diff --git a/backend/Temp/alc_runtime.js b/backend/Temp/alc_runtime.js index 0444c06..6c8f28f 100644 --- a/backend/Temp/alc_runtime.js +++ b/backend/Temp/alc_runtime.js @@ -18,7 +18,7 @@ var Vn=Object.defineProperty;var Fn=(n,e,t)=>e in n?Vn(n,e,{enumerable:!0,config `+s):r.stack=s}catch{}}throw r}}_request(e,t){typeof e=="string"?(t=t||{},t.url=e):t=e||{},t=mergeConfig(this.defaults,t);const{transitional:r,paramsSerializer:o,headers:s}=t;r!==void 0&&validator.assertOptions(r,{silentJSONParsing:validators.transitional(validators.boolean),forcedJSONParsing:validators.transitional(validators.boolean),clarifyTimeoutError:validators.transitional(validators.boolean)},!1),o!=null&&(utils$1$1.isFunction(o)?t.paramsSerializer={serialize:o}:validator.assertOptions(o,{encode:validators.function,serialize:validators.function},!0)),t.method=(t.method||this.defaults.method||"get").toLowerCase();let l=s&&utils$1$1.merge(s.common,s[t.method]);s&&utils$1$1.forEach(["delete","get","head","post","put","patch","common"],w=>{delete s[w]}),t.headers=AxiosHeaders$1.concat(l,s);const f=[];let E=!0;this.interceptors.request.forEach(function(x){typeof x.runWhen=="function"&&x.runWhen(t)===!1||(E=E&&x.synchronous,f.unshift(x.fulfilled,x.rejected))});const d=[];this.interceptors.response.forEach(function(x){d.push(x.fulfilled,x.rejected)});let m,y=0,S;if(!E){const w=[dispatchRequest.bind(this),void 0];for(w.unshift.apply(w,f),w.push.apply(w,d),S=w.length,m=Promise.resolve(t);y{if(!r._listeners)return;let s=r._listeners.length;for(;s-- >0;)r._listeners[s](o);r._listeners=null}),this.promise.then=o=>{let s;const l=new Promise(f=>{r.subscribe(f),s=f}).then(o);return l.cancel=function(){r.unsubscribe(s)},l},e(function(s,l,f){r.reason||(r.reason=new CanceledError(s,l,f),t(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}static source(){let e;return{token:new CancelToken(function(o){e=o}),cancel:e}}}var CancelToken$1=CancelToken;function spread(n){return function(t){return n.apply(null,t)}}function isAxiosError(n){return utils$1$1.isObject(n)&&n.isAxiosError===!0}const HttpStatusCode={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(HttpStatusCode).forEach(([n,e])=>{HttpStatusCode[e]=n});var HttpStatusCode$1=HttpStatusCode;function createInstance(n){const e=new Axios$1(n),t=bind$2(Axios$1.prototype.request,e);return utils$1$1.extend(t,Axios$1.prototype,e,{allOwnKeys:!0}),utils$1$1.extend(t,e,null,{allOwnKeys:!0}),t.create=function(o){return createInstance(mergeConfig(n,o))},t}const axios=createInstance(defaults$1$1);axios.Axios=Axios$1;axios.CanceledError=CanceledError;axios.CancelToken=CancelToken$1;axios.isCancel=isCancel;axios.VERSION=VERSION$1;axios.toFormData=toFormData;axios.AxiosError=AxiosError;axios.Cancel=axios.CanceledError;axios.all=function n(e){return Promise.all(e)};axios.spread=spread;axios.isAxiosError=isAxiosError;axios.mergeConfig=mergeConfig;axios.AxiosHeaders=AxiosHeaders$1;axios.formToJSON=n=>formDataToJSON(utils$1$1.isHTMLForm(n)?new FormData(n):n);axios.getAdapter=adapters.getAdapter;axios.HttpStatusCode=HttpStatusCode$1;axios.default=axios;var axios_1$1=axios,__assign$3=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$3=Object.assign||function(n){for(var e,t=1,r=arguments.length;t0&&s[s.length-1])&&(d[0]===6||d[0]===2)){t=0;continue}if(d[0]===3&&(!s||d[1]>s[0]&&d[1]"u"||!getProto?undefined$1:getProto(Uint8Array),INTRINSICS={__proto__:null,"%AggregateError%":typeof AggregateError>"u"?undefined$1:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?undefined$1:ArrayBuffer,"%ArrayIteratorPrototype%":hasSymbols&&getProto?getProto([][Symbol.iterator]()):undefined$1,"%AsyncFromSyncIteratorPrototype%":undefined$1,"%AsyncFunction%":needsEval,"%AsyncGenerator%":needsEval,"%AsyncGeneratorFunction%":needsEval,"%AsyncIteratorPrototype%":needsEval,"%Atomics%":typeof Atomics>"u"?undefined$1:Atomics,"%BigInt%":typeof BigInt>"u"?undefined$1:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?undefined$1:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?undefined$1:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?undefined$1:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":$Error,"%eval%":eval,"%EvalError%":$EvalError,"%Float32Array%":typeof Float32Array>"u"?undefined$1:Float32Array,"%Float64Array%":typeof Float64Array>"u"?undefined$1:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?undefined$1:FinalizationRegistry,"%Function%":$Function,"%GeneratorFunction%":needsEval,"%Int8Array%":typeof Int8Array>"u"?undefined$1:Int8Array,"%Int16Array%":typeof Int16Array>"u"?undefined$1:Int16Array,"%Int32Array%":typeof Int32Array>"u"?undefined$1:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":hasSymbols&&getProto?getProto(getProto([][Symbol.iterator]())):undefined$1,"%JSON%":typeof JSON=="object"?JSON:undefined$1,"%Map%":typeof Map>"u"?undefined$1:Map,"%MapIteratorPrototype%":typeof Map>"u"||!hasSymbols||!getProto?undefined$1:getProto(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?undefined$1:Promise,"%Proxy%":typeof Proxy>"u"?undefined$1:Proxy,"%RangeError%":$RangeError,"%ReferenceError%":$ReferenceError,"%Reflect%":typeof Reflect>"u"?undefined$1:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?undefined$1:Set,"%SetIteratorPrototype%":typeof Set>"u"||!hasSymbols||!getProto?undefined$1:getProto(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?undefined$1:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":hasSymbols&&getProto?getProto(""[Symbol.iterator]()):undefined$1,"%Symbol%":hasSymbols?Symbol:undefined$1,"%SyntaxError%":$SyntaxError$1,"%ThrowTypeError%":ThrowTypeError,"%TypedArray%":TypedArray,"%TypeError%":$TypeError$3,"%Uint8Array%":typeof Uint8Array>"u"?undefined$1:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?undefined$1:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?undefined$1:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?undefined$1:Uint32Array,"%URIError%":$URIError,"%WeakMap%":typeof WeakMap>"u"?undefined$1:WeakMap,"%WeakRef%":typeof WeakRef>"u"?undefined$1:WeakRef,"%WeakSet%":typeof WeakSet>"u"?undefined$1:WeakSet};if(getProto)try{null.error}catch(n){var errorProto=getProto(getProto(n));INTRINSICS["%Error.prototype%"]=errorProto}var doEval=function n(e){var t;if(e==="%AsyncFunction%")t=getEvalledConstructor("async function () {}");else if(e==="%GeneratorFunction%")t=getEvalledConstructor("function* () {}");else if(e==="%AsyncGeneratorFunction%")t=getEvalledConstructor("async function* () {}");else if(e==="%AsyncGenerator%"){var r=n("%AsyncGeneratorFunction%");r&&(t=r.prototype)}else if(e==="%AsyncIteratorPrototype%"){var o=n("%AsyncGenerator%");o&&getProto&&(t=getProto(o.prototype))}return INTRINSICS[e]=t,t},LEGACY_ALIASES={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},bind=functionBind,hasOwn$1=hasown,$concat$1=bind.call(Function.call,Array.prototype.concat),$spliceApply=bind.call(Function.apply,Array.prototype.splice),$replace$1=bind.call(Function.call,String.prototype.replace),$strSlice=bind.call(Function.call,String.prototype.slice),$exec=bind.call(Function.call,RegExp.prototype.exec),rePropName=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,reEscapeChar=/\\(\\)?/g,stringToPath=function n(e){var t=$strSlice(e,0,1),r=$strSlice(e,-1);if(t==="%"&&r!=="%")throw new $SyntaxError$1("invalid intrinsic syntax, expected closing `%`");if(r==="%"&&t!=="%")throw new $SyntaxError$1("invalid intrinsic syntax, expected opening `%`");var o=[];return $replace$1(e,rePropName,function(s,l,f,E){o[o.length]=f?$replace$1(E,reEscapeChar,"$1"):l||s}),o},getBaseIntrinsic=function n(e,t){var r=e,o;if(hasOwn$1(LEGACY_ALIASES,r)&&(o=LEGACY_ALIASES[r],r="%"+o[0]+"%"),hasOwn$1(INTRINSICS,r)){var s=INTRINSICS[r];if(s===needsEval&&(s=doEval(r)),typeof s>"u"&&!t)throw new $TypeError$3("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:o,name:r,value:s}}throw new $SyntaxError$1("intrinsic "+e+" does not exist!")},getIntrinsic=function n(e,t){if(typeof e!="string"||e.length===0)throw new $TypeError$3("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof t!="boolean")throw new $TypeError$3('"allowMissing" argument must be a boolean');if($exec(/^%?[^%]*%?$/,e)===null)throw new $SyntaxError$1("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var r=stringToPath(e),o=r.length>0?r[0]:"",s=getBaseIntrinsic("%"+o+"%",t),l=s.name,f=s.value,E=!1,d=s.alias;d&&(o=d[0],$spliceApply(r,$concat$1([0,1],d)));for(var m=1,y=!0;m=r.length){var x=$gOPD$1(f,S);y=!!x,y&&"get"in x&&!("originalValue"in x.get)?f=x.get:f=f[S]}else y=hasOwn$1(f,S),f=f[S];y&&!E&&(INTRINSICS[l]=f)}}return f},callBind$1={exports:{}},esDefineProperty,hasRequiredEsDefineProperty;function requireEsDefineProperty(){if(hasRequiredEsDefineProperty)return esDefineProperty;hasRequiredEsDefineProperty=1;var n=getIntrinsic,e=n("%Object.defineProperty%",!0)||!1;if(e)try{e({},"a",{value:1})}catch{e=!1}return esDefineProperty=e,esDefineProperty}var GetIntrinsic$3=getIntrinsic,$gOPD=GetIntrinsic$3("%Object.getOwnPropertyDescriptor%",!0);if($gOPD)try{$gOPD([],"length")}catch{$gOPD=null}var gopd$1=$gOPD,$defineProperty$1=requireEsDefineProperty(),$SyntaxError=syntax,$TypeError$2=type,gopd=gopd$1,defineDataProperty=function n(e,t,r){if(!e||typeof e!="object"&&typeof e!="function")throw new $TypeError$2("`obj` must be an object or a function`");if(typeof t!="string"&&typeof t!="symbol")throw new $TypeError$2("`property` must be a string or a symbol`");if(arguments.length>3&&typeof arguments[3]!="boolean"&&arguments[3]!==null)throw new $TypeError$2("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&typeof arguments[4]!="boolean"&&arguments[4]!==null)throw new $TypeError$2("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&typeof arguments[5]!="boolean"&&arguments[5]!==null)throw new $TypeError$2("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&typeof arguments[6]!="boolean")throw new $TypeError$2("`loose`, if provided, must be a boolean");var o=arguments.length>3?arguments[3]:null,s=arguments.length>4?arguments[4]:null,l=arguments.length>5?arguments[5]:null,f=arguments.length>6?arguments[6]:!1,E=!!gopd&&gopd(e,t);if($defineProperty$1)$defineProperty$1(e,t,{configurable:l===null&&E?E.configurable:!l,enumerable:o===null&&E?E.enumerable:!o,value:r,writable:s===null&&E?E.writable:!s});else if(f||!o&&!s&&!l)e[t]=r;else throw new $SyntaxError("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.")},$defineProperty=requireEsDefineProperty(),hasPropertyDescriptors=function n(){return!!$defineProperty};hasPropertyDescriptors.hasArrayLengthDefineBug=function n(){if(!$defineProperty)return null;try{return $defineProperty([],"length",{value:1}).length!==1}catch{return!0}};var hasPropertyDescriptors_1=hasPropertyDescriptors,GetIntrinsic$2=getIntrinsic,define=defineDataProperty,hasDescriptors=hasPropertyDescriptors_1(),gOPD=gopd$1,$TypeError$1=type,$floor$1=GetIntrinsic$2("%Math.floor%"),setFunctionLength=function n(e,t){if(typeof e!="function")throw new $TypeError$1("`fn` is not a function");if(typeof t!="number"||t<0||t>4294967295||$floor$1(t)!==t)throw new $TypeError$1("`length` must be a positive 32-bit integer");var r=arguments.length>2&&!!arguments[2],o=!0,s=!0;if("length"in e&&gOPD){var l=gOPD(e,"length");l&&!l.configurable&&(o=!1),l&&!l.writable&&(s=!1)}return(o||s||!r)&&(hasDescriptors?define(e,"length",t,!0,!0):define(e,"length",t)),e};(function(n){var e=functionBind,t=getIntrinsic,r=setFunctionLength,o=type,s=t("%Function.prototype.apply%"),l=t("%Function.prototype.call%"),f=t("%Reflect.apply%",!0)||e.call(l,s),E=requireEsDefineProperty(),d=t("%Math.max%");n.exports=function(S){if(typeof S!="function")throw new o("a function is required");var C=f(e,l,arguments);return r(C,1+d(0,S.length-(arguments.length-1)),!0)};var m=function(){return f(e,s,arguments)};E?E(n.exports,"apply",{value:m}):n.exports.apply=m})(callBind$1);var callBindExports=callBind$1.exports,GetIntrinsic$1=getIntrinsic,callBind=callBindExports,$indexOf=callBind(GetIntrinsic$1("String.prototype.indexOf")),callBound$1=function n(e,t){var r=GetIntrinsic$1(e,!!t);return typeof r=="function"&&$indexOf(e,".prototype.")>-1?callBind(r):r};const __viteBrowserExternal={},__viteBrowserExternal$1=Object.freeze(Object.defineProperty({__proto__:null,default:__viteBrowserExternal},Symbol.toStringTag,{value:"Module"})),require$$0=getAugmentedNamespace(__viteBrowserExternal$1);var hasMap=typeof Map=="function"&&Map.prototype,mapSizeDescriptor=Object.getOwnPropertyDescriptor&&hasMap?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,mapSize=hasMap&&mapSizeDescriptor&&typeof mapSizeDescriptor.get=="function"?mapSizeDescriptor.get:null,mapForEach=hasMap&&Map.prototype.forEach,hasSet=typeof Set=="function"&&Set.prototype,setSizeDescriptor=Object.getOwnPropertyDescriptor&&hasSet?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,setSize=hasSet&&setSizeDescriptor&&typeof setSizeDescriptor.get=="function"?setSizeDescriptor.get:null,setForEach=hasSet&&Set.prototype.forEach,hasWeakMap=typeof WeakMap=="function"&&WeakMap.prototype,weakMapHas=hasWeakMap?WeakMap.prototype.has:null,hasWeakSet=typeof WeakSet=="function"&&WeakSet.prototype,weakSetHas=hasWeakSet?WeakSet.prototype.has:null,hasWeakRef=typeof WeakRef=="function"&&WeakRef.prototype,weakRefDeref=hasWeakRef?WeakRef.prototype.deref:null,booleanValueOf=Boolean.prototype.valueOf,objectToString=Object.prototype.toString,functionToString=Function.prototype.toString,$match=String.prototype.match,$slice=String.prototype.slice,$replace=String.prototype.replace,$toUpperCase=String.prototype.toUpperCase,$toLowerCase=String.prototype.toLowerCase,$test=RegExp.prototype.test,$concat=Array.prototype.concat,$join=Array.prototype.join,$arrSlice=Array.prototype.slice,$floor=Math.floor,bigIntValueOf=typeof BigInt=="function"?BigInt.prototype.valueOf:null,gOPS=Object.getOwnPropertySymbols,symToString=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Symbol.prototype.toString:null,hasShammedSymbols=typeof Symbol=="function"&&typeof Symbol.iterator=="object",toStringTag=typeof Symbol=="function"&&Symbol.toStringTag&&(typeof Symbol.toStringTag===hasShammedSymbols||"symbol")?Symbol.toStringTag:null,isEnumerable=Object.prototype.propertyIsEnumerable,gPO=(typeof Reflect=="function"?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(n){return n.__proto__}:null);function addNumericSeparator(n,e){if(n===1/0||n===-1/0||n!==n||n&&n>-1e3&&n<1e3||$test.call(/e/,e))return e;var t=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if(typeof n=="number"){var r=n<0?-$floor(-n):$floor(n);if(r!==n){var o=String(r),s=$slice.call(e,o.length+1);return $replace.call(o,t,"$&_")+"."+$replace.call($replace.call(s,/([0-9]{3})/g,"$&_"),/_$/,"")}}return $replace.call(e,t,"$&_")}var utilInspect=require$$0,inspectCustom=utilInspect.custom,inspectSymbol=isSymbol(inspectCustom)?inspectCustom:null,objectInspect=function n(e,t,r,o){var s=t||{};if(has$3(s,"quoteStyle")&&s.quoteStyle!=="single"&&s.quoteStyle!=="double")throw new TypeError('option "quoteStyle" must be "single" or "double"');if(has$3(s,"maxStringLength")&&(typeof s.maxStringLength=="number"?s.maxStringLength<0&&s.maxStringLength!==1/0:s.maxStringLength!==null))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var l=has$3(s,"customInspect")?s.customInspect:!0;if(typeof l!="boolean"&&l!=="symbol")throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(has$3(s,"indent")&&s.indent!==null&&s.indent!==" "&&!(parseInt(s.indent,10)===s.indent&&s.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(has$3(s,"numericSeparator")&&typeof s.numericSeparator!="boolean")throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var f=s.numericSeparator;if(typeof e>"u")return"undefined";if(e===null)return"null";if(typeof e=="boolean")return e?"true":"false";if(typeof e=="string")return inspectString(e,s);if(typeof e=="number"){if(e===0)return 1/0/e>0?"0":"-0";var E=String(e);return f?addNumericSeparator(e,E):E}if(typeof e=="bigint"){var d=String(e)+"n";return f?addNumericSeparator(e,d):d}var m=typeof s.depth>"u"?5:s.depth;if(typeof r>"u"&&(r=0),r>=m&&m>0&&typeof e=="object")return isArray$3(e)?"[Array]":"[Object]";var y=getIndent(s,r);if(typeof o>"u")o=[];else if(indexOf(o,e)>=0)return"[Circular]";function S(G,oe,ue){if(oe&&(o=$arrSlice.call(o),o.push(oe)),ue){var pe={depth:s.depth};return has$3(s,"quoteStyle")&&(pe.quoteStyle=s.quoteStyle),n(G,pe,r+1,o)}return n(G,s,r+1,o)}if(typeof e=="function"&&!isRegExp$1(e)){var C=nameOf(e),w=arrObjKeys(e,S);return"[Function"+(C?": "+C:" (anonymous)")+"]"+(w.length>0?" { "+$join.call(w,", ")+" }":"")}if(isSymbol(e)){var x=hasShammedSymbols?$replace.call(String(e),/^(Symbol\(.*\))_[^)]*$/,"$1"):symToString.call(e);return typeof e=="object"&&!hasShammedSymbols?markBoxed(x):x}if(isElement$2(e)){for(var H="<"+$toLowerCase.call(String(e.nodeName)),D=e.attributes||[],Z=0;Z",H}if(isArray$3(e)){if(e.length===0)return"[]";var F=arrObjKeys(e,S);return y&&!singleLineValues(F)?"["+indentedJoin(F,y)+"]":"[ "+$join.call(F,", ")+" ]"}if(isError(e)){var Y=arrObjKeys(e,S);return!("cause"in Error.prototype)&&"cause"in e&&!isEnumerable.call(e,"cause")?"{ ["+String(e)+"] "+$join.call($concat.call("[cause]: "+S(e.cause),Y),", ")+" }":Y.length===0?"["+String(e)+"]":"{ ["+String(e)+"] "+$join.call(Y,", ")+" }"}if(typeof e=="object"&&l){if(inspectSymbol&&typeof e[inspectSymbol]=="function"&&utilInspect)return utilInspect(e,{depth:m-r});if(l!=="symbol"&&typeof e.inspect=="function")return e.inspect()}if(isMap(e)){var ne=[];return mapForEach&&mapForEach.call(e,function(G,oe){ne.push(S(oe,e,!0)+" => "+S(G,e))}),collectionOf("Map",mapSize.call(e),ne,y)}if(isSet(e)){var V=[];return setForEach&&setForEach.call(e,function(G){V.push(S(G,e))}),collectionOf("Set",setSize.call(e),V,y)}if(isWeakMap(e))return weakCollectionOf("WeakMap");if(isWeakSet(e))return weakCollectionOf("WeakSet");if(isWeakRef(e))return weakCollectionOf("WeakRef");if(isNumber(e))return markBoxed(S(Number(e)));if(isBigInt(e))return markBoxed(S(bigIntValueOf.call(e)));if(isBoolean(e))return markBoxed(booleanValueOf.call(e));if(isString(e))return markBoxed(S(String(e)));if(typeof window<"u"&&e===window)return"{ [object Window] }";if(typeof globalThis<"u"&&e===globalThis||typeof commonjsGlobal<"u"&&e===commonjsGlobal)return"{ [object globalThis] }";if(!isDate(e)&&!isRegExp$1(e)){var u=arrObjKeys(e,S),X=gPO?gPO(e)===Object.prototype:e instanceof Object||e.constructor===Object,U=e instanceof Object?"":"null prototype",I=!X&&toStringTag&&Object(e)===e&&toStringTag in e?$slice.call(toStr(e),8,-1):U?"Object":"",K=X||typeof e.constructor!="function"?"":e.constructor.name?e.constructor.name+" ":"",q=K+(I||U?"["+$join.call($concat.call([],I||[],U||[]),": ")+"] ":"");return u.length===0?q+"{}":y?q+"{"+indentedJoin(u,y)+"}":q+"{ "+$join.call(u,", ")+" }"}return String(e)};function wrapQuotes(n,e,t){var r=(t.quoteStyle||e)==="double"?'"':"'";return r+n+r}function quote(n){return $replace.call(String(n),/"/g,""")}function isArray$3(n){return toStr(n)==="[object Array]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isDate(n){return toStr(n)==="[object Date]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isRegExp$1(n){return toStr(n)==="[object RegExp]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isError(n){return toStr(n)==="[object Error]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isString(n){return toStr(n)==="[object String]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isNumber(n){return toStr(n)==="[object Number]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isBoolean(n){return toStr(n)==="[object Boolean]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isSymbol(n){if(hasShammedSymbols)return n&&typeof n=="object"&&n instanceof Symbol;if(typeof n=="symbol")return!0;if(!n||typeof n!="object"||!symToString)return!1;try{return symToString.call(n),!0}catch{}return!1}function isBigInt(n){if(!n||typeof n!="object"||!bigIntValueOf)return!1;try{return bigIntValueOf.call(n),!0}catch{}return!1}var hasOwn=Object.prototype.hasOwnProperty||function(n){return n in this};function has$3(n,e){return hasOwn.call(n,e)}function toStr(n){return objectToString.call(n)}function nameOf(n){if(n.name)return n.name;var e=$match.call(functionToString.call(n),/^function\s*([\w$]+)/);return e?e[1]:null}function indexOf(n,e){if(n.indexOf)return n.indexOf(e);for(var t=0,r=n.length;te.maxStringLength){var t=n.length-e.maxStringLength,r="... "+t+" more character"+(t>1?"s":"");return inspectString($slice.call(n,0,e.maxStringLength),e)+r}var o=$replace.call($replace.call(n,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,lowbyte);return wrapQuotes(o,"single",e)}function lowbyte(n){var e=n.charCodeAt(0),t={8:"b",9:"t",10:"n",12:"f",13:"r"}[e];return t?"\\"+t:"\\x"+(e<16?"0":"")+$toUpperCase.call(e.toString(16))}function markBoxed(n){return"Object("+n+")"}function weakCollectionOf(n){return n+" { ? }"}function collectionOf(n,e,t,r){var o=r?indentedJoin(t,r):$join.call(t,", ");return n+" ("+e+") {"+o+"}"}function singleLineValues(n){for(var e=0;e=0)return!1;return!0}function getIndent(n,e){var t;if(n.indent===" ")t=" ";else if(typeof n.indent=="number"&&n.indent>0)t=$join.call(Array(n.indent+1)," ");else return null;return{base:t,prev:$join.call(Array(e+1),t)}}function indentedJoin(n,e){if(n.length===0)return"";var t=` `+e.prev+e.base;return t+$join.call(n,","+t)+` -`+e.prev}function arrObjKeys(n,e){var t=isArray$3(n),r=[];if(t){r.length=n.length;for(var o=0;o1;){var t=e.pop(),r=t.obj[t.prop];if(isArray$2(r)){for(var o=[],s=0;s=limit?l.slice(E,E+limit):l,m=[],y=0;y=48&&S<=57||S>=65&&S<=90||S>=97&&S<=122||s===formats$2.RFC1738&&(S===40||S===41)){m[m.length]=d.charAt(y);continue}if(S<128){m[m.length]=hexTable[S];continue}if(S<2048){m[m.length]=hexTable[192|S>>6]+hexTable[128|S&63];continue}if(S<55296||S>=57344){m[m.length]=hexTable[224|S>>12]+hexTable[128|S>>6&63]+hexTable[128|S&63];continue}y+=1,S=65536+((S&1023)<<10|d.charCodeAt(y)&1023),m[m.length]=hexTable[240|S>>18]+hexTable[128|S>>12&63]+hexTable[128|S>>6&63]+hexTable[128|S&63]}f+=m.join("")}return f},compact=function n(e){for(var t=[{obj:{o:e},prop:"o"}],r=[],o=0;o"u"&&(ne=0)}if(typeof m=="function"?F=m(t,F):F instanceof Date?F=C(F):r==="comma"&&isArray$1(F)&&(F=utils$1.maybeMap(F,function(Re){return Re instanceof Date?C(Re):Re})),F===null){if(l)return d&&!H?d(t,defaults$1.encoder,D,"key",w):t;F=""}if(isNonNullishPrimitive(F)||utils$1.isBuffer(F)){if(d){var X=H?t:d(t,defaults$1.encoder,D,"key",w);return[x(X)+"="+x(d(F,defaults$1.encoder,D,"value",w))]}return[x(t)+"="+x(String(F))]}var U=[];if(typeof F>"u")return U;var I;if(r==="comma"&&isArray$1(F))H&&d&&(F=utils$1.maybeMap(F,d)),I=[{value:F.length>0?F.join(",")||null:void 0}];else if(isArray$1(m))I=m;else{var K=Object.keys(F);I=y?K.sort(y):K}var q=E?t.replace(/\./g,"%2E"):t,G=o&&isArray$1(F)&&F.length===1?q+"[]":q;if(s&&isArray$1(F)&&F.length===0)return G+"[]";for(var oe=0;oe"u"?e.encodeDotInKeys===!0?!0:defaults$1.allowDots:!!e.allowDots;return{addQueryPrefix:typeof e.addQueryPrefix=="boolean"?e.addQueryPrefix:defaults$1.addQueryPrefix,allowDots:f,allowEmptyArrays:typeof e.allowEmptyArrays=="boolean"?!!e.allowEmptyArrays:defaults$1.allowEmptyArrays,arrayFormat:l,charset:t,charsetSentinel:typeof e.charsetSentinel=="boolean"?e.charsetSentinel:defaults$1.charsetSentinel,commaRoundTrip:e.commaRoundTrip,delimiter:typeof e.delimiter>"u"?defaults$1.delimiter:e.delimiter,encode:typeof e.encode=="boolean"?e.encode:defaults$1.encode,encodeDotInKeys:typeof e.encodeDotInKeys=="boolean"?e.encodeDotInKeys:defaults$1.encodeDotInKeys,encoder:typeof e.encoder=="function"?e.encoder:defaults$1.encoder,encodeValuesOnly:typeof e.encodeValuesOnly=="boolean"?e.encodeValuesOnly:defaults$1.encodeValuesOnly,filter:s,format:r,formatter:o,serializeDate:typeof e.serializeDate=="function"?e.serializeDate:defaults$1.serializeDate,skipNulls:typeof e.skipNulls=="boolean"?e.skipNulls:defaults$1.skipNulls,sort:typeof e.sort=="function"?e.sort:null,strictNullHandling:typeof e.strictNullHandling=="boolean"?e.strictNullHandling:defaults$1.strictNullHandling}},stringify_1=function(n,e){var t=n,r=normalizeStringifyOptions(e),o,s;typeof r.filter=="function"?(s=r.filter,t=s("",t)):isArray$1(r.filter)&&(s=r.filter,o=s);var l=[];if(typeof t!="object"||t===null)return"";var f=arrayPrefixGenerators[r.arrayFormat],E=f==="comma"&&r.commaRoundTrip;o||(o=Object.keys(t)),r.sort&&o.sort(r.sort);for(var d=getSideChannel(),m=0;m0?C+S:""},utils=utils$2,has=Object.prototype.hasOwnProperty,isArray=Array.isArray,defaults={allowDots:!1,allowEmptyArrays:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decodeDotInKeys:!1,decoder:utils.decode,delimiter:"&",depth:5,duplicates:"combine",ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},interpretNumericEntities=function(n){return n.replace(/&#(\d+);/g,function(e,t){return String.fromCharCode(parseInt(t,10))})},parseArrayValue=function(n,e){return n&&typeof n=="string"&&e.comma&&n.indexOf(",")>-1?n.split(","):n},isoSentinel="utf8=%26%2310003%3B",charsetSentinel="utf8=%E2%9C%93",parseValues=function n(e,t){var r={__proto__:null},o=t.ignoreQueryPrefix?e.replace(/^\?/,""):e;o=o.replace(/%5B/gi,"[").replace(/%5D/gi,"]");var s=t.parameterLimit===1/0?void 0:t.parameterLimit,l=o.split(t.delimiter,s),f=-1,E,d=t.charset;if(t.charsetSentinel)for(E=0;E-1&&(w=isArray(w)?[w]:w);var x=has.call(r,C);x&&t.duplicates==="combine"?r[C]=utils.combine(r[C],w):(!x||t.duplicates==="last")&&(r[C]=w)}return r},parseObject=function(n,e,t,r){for(var o=r?e:parseArrayValue(e,t),s=n.length-1;s>=0;--s){var l,f=n[s];if(f==="[]"&&t.parseArrays)l=t.allowEmptyArrays&&o===""?[]:[].concat(o);else{l=t.plainObjects?Object.create(null):{};var E=f.charAt(0)==="["&&f.charAt(f.length-1)==="]"?f.slice(1,-1):f,d=t.decodeDotInKeys?E.replace(/%2E/g,"."):E,m=parseInt(d,10);!t.parseArrays&&d===""?l={0:o}:!isNaN(m)&&f!==d&&String(m)===d&&m>=0&&t.parseArrays&&m<=t.arrayLimit?(l=[],l[m]=o):d!=="__proto__"&&(l[d]=o)}o=l}return o},parseKeys=function n(e,t,r,o){if(e){var s=r.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,l=/(\[[^[\]]*])/,f=/(\[[^[\]]*])/g,E=r.depth>0&&l.exec(s),d=E?s.slice(0,E.index):s,m=[];if(d){if(!r.plainObjects&&has.call(Object.prototype,d)&&!r.allowPrototypes)return;m.push(d)}for(var y=0;r.depth>0&&(E=f.exec(s))!==null&&y"u"?defaults.charset:e.charset,r=typeof e.duplicates>"u"?defaults.duplicates:e.duplicates;if(r!=="combine"&&r!=="first"&&r!=="last")throw new TypeError("The duplicates option must be either combine, first, or last");var o=typeof e.allowDots>"u"?e.decodeDotInKeys===!0?!0:defaults.allowDots:!!e.allowDots;return{allowDots:o,allowEmptyArrays:typeof e.allowEmptyArrays=="boolean"?!!e.allowEmptyArrays:defaults.allowEmptyArrays,allowPrototypes:typeof e.allowPrototypes=="boolean"?e.allowPrototypes:defaults.allowPrototypes,allowSparse:typeof e.allowSparse=="boolean"?e.allowSparse:defaults.allowSparse,arrayLimit:typeof e.arrayLimit=="number"?e.arrayLimit:defaults.arrayLimit,charset:t,charsetSentinel:typeof e.charsetSentinel=="boolean"?e.charsetSentinel:defaults.charsetSentinel,comma:typeof e.comma=="boolean"?e.comma:defaults.comma,decodeDotInKeys:typeof e.decodeDotInKeys=="boolean"?e.decodeDotInKeys:defaults.decodeDotInKeys,decoder:typeof e.decoder=="function"?e.decoder:defaults.decoder,delimiter:typeof e.delimiter=="string"||utils.isRegExp(e.delimiter)?e.delimiter:defaults.delimiter,depth:typeof e.depth=="number"||e.depth===!1?+e.depth:defaults.depth,duplicates:r,ignoreQueryPrefix:e.ignoreQueryPrefix===!0,interpretNumericEntities:typeof e.interpretNumericEntities=="boolean"?e.interpretNumericEntities:defaults.interpretNumericEntities,parameterLimit:typeof e.parameterLimit=="number"?e.parameterLimit:defaults.parameterLimit,parseArrays:e.parseArrays!==!1,plainObjects:typeof e.plainObjects=="boolean"?e.plainObjects:defaults.plainObjects,strictNullHandling:typeof e.strictNullHandling=="boolean"?e.strictNullHandling:defaults.strictNullHandling}},parse$1=function(n,e){var t=normalizeParseOptions(e);if(n===""||n===null||typeof n>"u")return t.plainObjects?Object.create(null):{};for(var r=typeof n=="string"?parseValues(n,t):n,o=t.plainObjects?Object.create(null):{},s=Object.keys(r),l=0;l255||($e=j.charCodeAt(Be++))>255||(Me=j.charCodeAt(Be++))>255)throw new TypeError("invalid character found");ee=Te<<16|$e<<8|Me,Oe+=E[ee>>18&63]+E[ee>>12&63]+E[ee>>6&63]+E[ee&63]}return Ze?Oe.slice(0,Ze-3)+"===".substring(Ze):Oe},H=typeof btoa=="function"?function(j){return btoa(j)}:o?function(j){return Buffer.from(j,"binary").toString("base64")}:x,D=o?function(j){return Buffer.from(j).toString("base64")}:function(j){for(var ee=4096,Te=[],$e=0,Me=j.length;$e>>6)+y(128|ee&63):y(224|ee>>>12&15)+y(128|ee>>>6&63)+y(128|ee&63)}else{var ee=65536+(j.charCodeAt(0)-55296)*1024+(j.charCodeAt(1)-56320);return y(240|ee>>>18&7)+y(128|ee>>>12&63)+y(128|ee>>>6&63)+y(128|ee&63)}},Y=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,ne=function(j){return j.replace(Y,F)},V=o?function(j){return Buffer.from(j,"utf8").toString("base64")}:l?function(j){return D(l.encode(j))}:function(j){return H(ne(j))},u=function(j,ee){return ee===void 0&&(ee=!1),ee?C(V(j)):V(j)},X=function(j){return u(j,!0)},U=/[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g,I=function(j){switch(j.length){case 4:var ee=(7&j.charCodeAt(0))<<18|(63&j.charCodeAt(1))<<12|(63&j.charCodeAt(2))<<6|63&j.charCodeAt(3),Te=ee-65536;return y((Te>>>10)+55296)+y((Te&1023)+56320);case 3:return y((15&j.charCodeAt(0))<<12|(63&j.charCodeAt(1))<<6|63&j.charCodeAt(2));default:return y((31&j.charCodeAt(0))<<6|63&j.charCodeAt(1))}},K=function(j){return j.replace(U,I)},q=function(j){if(j=j.replace(/\s+/g,""),!m.test(j))throw new TypeError("malformed base64.");j+="==".slice(2-(j.length&3));for(var ee,Te="",$e,Me,Oe=0;Oe>16&255):Me===64?y(ee>>16&255,ee>>8&255):y(ee>>16&255,ee>>8&255,ee&255);return Te},G=typeof atob=="function"?function(j){return atob(w(j))}:o?function(j){return Buffer.from(j,"base64").toString("binary")}:q,oe=o?function(j){return S(Buffer.from(j,"base64"))}:function(j){return S(G(j).split("").map(function(ee){return ee.charCodeAt(0)}))},ue=function(j){return oe(le(j))},pe=o?function(j){return Buffer.from(j,"base64").toString("utf8")}:s?function(j){return s.decode(oe(j))}:function(j){return K(G(j))},le=function(j){return w(j.replace(/[-_]/g,function(ee){return ee=="-"?"+":"/"}))},ve=function(j){return pe(le(j))},he=function(j){if(typeof j!="string")return!1;var ee=j.replace(/\s+/g,"").replace(/={0,2}$/,"");return!/[^\s0-9a-zA-Z\+/]/.test(ee)||!/[^\s0-9a-zA-Z\-_]/.test(ee)},Re=function(j){return{value:j,enumerable:!1,writable:!0,configurable:!0}},fe=function(){var j=function(ee,Te){return Object.defineProperty(String.prototype,ee,Re(Te))};j("fromBase64",function(){return ve(this)}),j("toBase64",function(ee){return u(this,ee)}),j("toBase64URI",function(){return u(this,!0)}),j("toBase64URL",function(){return u(this,!0)}),j("toUint8Array",function(){return ue(this)})},be=function(){var j=function(ee,Te){return Object.defineProperty(Uint8Array.prototype,ee,Re(Te))};j("toBase64",function(ee){return Z(this,ee)}),j("toBase64URI",function(){return Z(this,!0)}),j("toBase64URL",function(){return Z(this,!0)})},we=function(){fe(),be()},xe={version:t,VERSION:r,atob:G,atobPolyfill:q,btoa:H,btoaPolyfill:x,fromBase64:ve,toBase64:u,encode:u,encodeURI:X,encodeURL:X,utob:ne,btou:K,decode:ve,isValid:he,fromUint8Array:Z,toUint8Array:ue,extendString:fe,extendUint8Array:be,extendBuiltins:we};return xe.Base64={},Object.keys(xe).forEach(function(j){return xe.Base64[j]=xe[j]}),xe})})(base64);var base64Exports=base64.exports,__assign$2=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$2=Object.assign||function(n){for(var e,t=1,r=arguments.length;t0&&s[s.length-1])&&(d[0]===6||d[0]===2)){t=0;continue}if(d[0]===3&&(!s||d[1]>s[0]&&d[1]THRESHOLD_AVOID_REQUEST_URL_TOO_LARGE?(f=[__assign$2({},s)],w={method:"post",headers:__assign$2(__assign$2({},this.headers),{"X-HTTP-Method-Override":"GET"})},[4,this.buildData(r)]):[3,3];case 2:return[2,__assign$2.apply(void 0,f.concat([(w.data=D.sent(),w)]))];case 3:return[2,__assign$2(__assign$2({},s),{url:y})];case 4:return r instanceof form_data_1.default?[4,this.buildData(r)]:[3,6];case 5:return E=D.sent(),[2,__assign$2(__assign$2({},s),{headers:typeof E.getHeaders=="function"?__assign$2(__assign$2({},this.headers),E.getHeaders()):this.headers,data:E})];case 6:return d=[__assign$2({},s)],x={},[4,this.buildData(r)];case 7:return[2,__assign$2.apply(void 0,d.concat([(x.data=D.sent(),x)]))];case 8:return m=[__assign$2({},s)],H={},[4,this.buildData(r)];case 9:return[2,__assign$2.apply(void 0,m.concat([(H.data=D.sent(),H)]))];case 10:return S=this.buildRequestUrl,C=[t],[4,this.buildData(r)];case 11:return y=S.apply(this,C.concat([D.sent()])),[2,__assign$2(__assign$2({},s),{url:y})];case 12:throw new Error("".concat(e," method is not supported"));case 13:return[2]}})})},n.prototype.buildProxyConfig=function(e){var t;if(e!==void 0){if(e===!1)return!1;var r=e;return r.auth&&(r.auth.username.length===0||r.auth.password.length===0)&&(r.auth=void 0),r.protocol=(t=r.protocol)!==null&&t!==void 0?t:DEFAULT_PROXY_PROTOCOL,r}},n.prototype.buildRequestUrl=function(e,t){return"".concat(this.baseUrl).concat(e,"?").concat(qs_1.default.stringify(t))},n.prototype.buildData=function(e){return __awaiter(this,void 0,void 0,function(){var t;return __generator(this,function(r){switch(r.label){case 0:return this.auth.type!=="session"?[3,2]:[4,this.getRequestToken()];case 1:return t=r.sent(),e instanceof form_data_1.default?(e.append("__REQUEST_TOKEN__",t),[2,e]):[2,__assign$2({__REQUEST_TOKEN__:t},e)];case 2:return[2,e]}})})},n.prototype.buildHeaders=function(e){var t=e.basicAuth,r=e.userAgent,o=t?{Authorization:"Basic ".concat(js_base64_1.Base64.encode("".concat(t.username,":").concat(t.password)))}:{},s=platform_1$1.platformDeps.buildHeaders({userAgent:r}),l=__assign$2(__assign$2({},s),o);switch(this.auth.type){case"password":return __assign$2(__assign$2({},l),{"X-Cybozu-Authorization":js_base64_1.Base64.encode("".concat(this.auth.username,":").concat(this.auth.password))});case"apiToken":{var f=this.auth.apiToken;return Array.isArray(f)?__assign$2(__assign$2({},l),{"X-Cybozu-API-Token":f.join(",")}):__assign$2(__assign$2({},l),{"X-Cybozu-API-Token":f})}case"oAuthToken":return __assign$2(__assign$2({},l),{Authorization:"Bearer ".concat(this.auth.oAuthToken)});default:return __assign$2(__assign$2({},l),{"X-Requested-With":"XMLHttpRequest"})}},n.prototype.getRequestToken=function(){return __awaiter(this,void 0,void 0,function(){var e;return __generator(this,function(t){switch(t.label){case 0:return this.requestToken!==null?[3,2]:(e=this,[4,platform_1$1.platformDeps.getRequestToken()]);case 1:e.requestToken=t.sent(),t.label=2;case 2:return[2,this.requestToken]}})})},n}();KintoneRequestConfigBuilder$1.KintoneRequestConfigBuilder=KintoneRequestConfigBuilder;var KintoneResponseHandler$1={},__assign$1=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$1=Object.assign||function(n){for(var e,t=1,r=arguments.length;t(n.CALC="CALC",n.CATEGORY="CATEGORY",n.CHECK_BOX="CHECK_BOX",n.CREATED_TIME="CREATED_TIME",n.CREATOR="CREATOR",n.DATE="DATE",n.DATETIME="DATETIME",n.DROP_DOWN="DROP_DOWN",n.FILE="FILE",n.GROUP="GROUP",n.GROUP_SELECT="GROUP_SELECT",n.LINK="LINK",n.MODIFIER="MODIFIER",n.MULTI_LINE_TEXT="MULTI_LINE_TEXT",n.MULTI_SELECT="MULTI_SELECT",n.NUMBER="NUMBER",n.ORGANIZATION_SELECT="ORGANIZATION_SELECT",n.RADIO_BUTTON="RADIO_BUTTON",n.RECORD_NUMBER="RECORD_NUMBER",n.REFERENCE_TABLE="REFERENCE_TABLE",n.RICH_TEXT="RICH_TEXT",n.SINGLE_LINE_TEXT="SINGLE_LINE_TEXT",n.STATUS="STATUS",n.STATUS_ASSIGNEE="STATUS_ASSIGNEE",n.SUBTABLE="SUBTABLE",n.TIME="TIME",n.UPDATED_TIME="UPDATED_TIME",n.USER_SELECT="USER_SELECT",n))(FieldType||{}),CalcFormat=(n=>(n.NUMBER="NUMBER",n.NUMBER_DIGIT="NUMBER_DIGIT",n.DATETIME="DATETIME",n.DATE="DATE",n.TIME="TIME",n.HOUR_MINUTE="HOUR_MINUTE",n.DAY_HOUR_MINUTE="DAY_HOUR_MINUTE",n))(CalcFormat||{});class Aggregator{constructor(e,t){B(this,"data");B(this,"field");this.data=e,this.field=t}toNumberArray(){return this.data.map(t=>{const r=Number(t);if(isNaN(r))throw new Error(`フィールド「${this.field.code} 」は数値に変換できないため、計算を実行できません。`);return r})}sum(){return this.data.length===0?null:this.toNumberArray().reduce((t,r)=>t+r,0)}avg(){if(this.data.length===0)return null;const e=this.toNumberArray();return e.reduce((r,o)=>r+o,0)/e.length}max(){if(this.data.length===0)return null;if(this.field.type===FieldType.NUMBER){const e=this.toNumberArray();return Math.max(...e)}if(this.field.type===FieldType.CALC){const e=this.field;if(e.format===CalcFormat.NUMBER||e.format===CalcFormat.NUMBER_DIGIT){const t=this.toNumberArray();return Math.max(...t)}}return this.data.reduce((e,t)=>t>e?t:e,this.data[0])}min(){if(this.data.length===0)return null;if(this.field.type===FieldType.NUMBER){const e=this.toNumberArray();return Math.min(...e)}if(this.field.type===FieldType.CALC){const e=this.field;if(e.format===CalcFormat.NUMBER||e.format===CalcFormat.NUMBER_DIGIT){const t=this.toNumberArray();return Math.min(...t)}}return this.data===null||this.data.length===0?null:this.data.reduce((e,t)=>t{console.log(e);const r=/var\((.*?)\)/g;let o;for(;(o=r.exec(e))!==null;){const s=o[1];if(s in t)e=e.replace(o[0],t[s]);else throw new Error(`変数${s}が見つかりません`)}return console.log(e),e});B(this,"selectData",async e=>{const t=new index_browser.KintoneRestAPIClient,r=this.props.sources.fields.map(l=>l.code),o=await t.record.getAllRecords({app:this.props.sources.app.id,fields:r,condition:e}),s={};return o.forEach(l=>{for(const[f,E]of Object.entries(l))s[f]||(s[f]={type:E.type,value:[]}),s[f].value.push(E.value)}),s});this.name="データ処理",this.actionProps=[],this.props={displayName:"",condition:"",sources:{app:{id:""},fields:[]}},this.register()}async process(e,t,r){this.actionProps=e.actionProps,this.props=e.ActionValue;const o=JSON.parse(this.props.condition);let s={canNext:!0,result:""};try{if(!this.props)return s;const l=this.getQuery(o.queryString,r.variables),f=await this.selectData(l);if(console.log("data ",f),this.props.verName){const E=this.props.verName.vars.reduce((d,m)=>{const y=f[m.field.code].value,C=new Aggregator(y,m.field).calculate(m.logicalOperator.operator);return d[m.vName]=C,d},{});r.variables[this.props.verName.name]=E,console.log("context ",r)}return s}catch(l){return console.error("データ集計中例外が発生しました。",l),l instanceof Error?t.error=`データ集計中例外が発生しました。 ${l.message}`:t.error="データ集計中例外が発生しました。",s.canNext=!1,s}}register(){actionAddins[this.name]=this}}new DataProcessingAction;class DataMappingAction{constructor(){B(this,"name");B(this,"actionProps");B(this,"dataMappingProps");this.name="データマッピング",this.actionProps=[],this.dataMappingProps={},this.register()}async process(e,t,r){this.actionProps=e.actionProps,this.dataMappingProps=e.ActionValue,console.log(e.ActionValue);let o={canNext:!0,result:""};try{const s=this.dataMappingProps.dataMapping.filter(l=>l.from.objectType==="variable"&&l.from.name.name&&l.to.app&&l.to.fields&&l.to.fields.length>0).reduce((l,f)=>({...l,[f.to.fields[0].code]:{value:getValueByPath(r.variables,f.from.name.name)}}),{});s&&Object.keys(s).length>0&&await kintone.api(kintone.api.url("/k/v1/record.json",!0),"POST",{app:this.dataMappingProps.sources.app.id,record:s})}catch(s){console.error("DataMappingAction error",s),o.canNext=!1}return console.log("dataMappingProps",this.dataMappingProps),o}register(){actionAddins[this.name]=this}}new DataMappingAction;const getValueByPath=(n,e)=>e.split(".").reduce((t,r)=>(t||{})[r],n);class CurrentFieldGetAction{constructor(){B(this,"name");B(this,"actionProps");B(this,"currentFieldGetProps");this.name="フィールドの値を取得する",this.actionProps=[],this.currentFieldGetProps={},this.register()}async process(e,t,r){this.currentFieldGetProps=e.ActionValue,this.actionProps=e.actionProps;let o={canNext:!0,result:""};try{r.variables[this.currentFieldGetProps.verName.name]=r.record[this.currentFieldGetProps.field.code].value}catch(s){console.error("CurrentFieldGetAction error",s),o.canNext=!1}return o}register(){actionAddins[this.name]=this}}new CurrentFieldGetAction;class RegularCheckAction{constructor(){B(this,"name");B(this,"actionProps");B(this,"props");this.name="正規表現チェック",this.actionProps=[],this.props={field:{code:""},message:"",regExpression:""},this.register()}async process(e,t){let r={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("message"in e.ActionValue)&&!("regExpression"in e.ActionValue))return r;this.props=e.ActionValue;const o=t.record,s=o[this.props.field.code].value;return new RegExp(this.props.regExpression).test(s)?r={canNext:!0,result:!0}:o[this.props.field.code].error=this.props.message,r}catch(o){return t.error=o,console.error(o),r.canNext=!1,r}}register(){actionAddins[this.name]=this}}new RegularCheckAction;class MailCheckAction{constructor(){B(this,"name");B(this,"actionProps");B(this,"props");this.name="メールアドレスチェック",this.actionProps=[],this.props={field:{code:""},message:"",emailCheck:""},this.register()}async process(e,t){let r={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("message"in e.ActionValue)&&!("emailCheck"in e.ActionValue))return r;this.props=e.ActionValue;const o=t.record,s=o[this.props.field.code].value;return this.props.emailCheck==="厳格"?/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/.test(s)||(o[this.props.field.code].error=this.props.message):this.props.emailCheck==="ゆるめ"?/^[^@]+@[^@]+$/.test(s)||(o[this.props.field.code].error=this.props.message):r={canNext:!0,result:!0},r}catch(o){return t.error=o,console.error(o),r.canNext=!1,r}}register(){actionAddins[this.name]=this}}new MailCheckAction;class StrCountCheckAciton{constructor(){B(this,"name");B(this,"actionProps");B(this,"props");this.name="文字数チェック",this.actionProps=[],this.props={field:{code:""},message:"",maxLength:0},this.register()}async process(e,t){let r={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("message"in e.ActionValue)&&!("strExpression"in e.ActionValue))return r;this.props=e.ActionValue;const o=t.record,s=o[this.props.field.code].value,l=this.props.maxLength;return s===void 0||s===""||(l0&&(t.record[C].value=Z)),o={canNext:!0,result:!0},o}catch(s){return t.record,t.error=s.message,console.error(s),o.canNext=!0,o}}getConditionResult(e){const t=this.getCondition(this.props.condition);return t?t.evaluate(t.root,e):!0}getCondition(e){try{const t=new ConditionTree;return t.fromJson(e),t.getConditions(t.root).length>0?t:null}catch{return null}}register(){actionAddins[this.name]=this}}new InsertValueAction;class GetValueAciton{constructor(){B(this,"name");B(this,"actionProps");B(this,"props");this.name="値を取得する",this.actionProps=[],this.props={field:{code:""},verName:{name:""}},this.register()}async process(e,t,r){let o={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("verName"in e.ActionValue))return o;this.props=e.ActionValue;const l=t.record[this.props.field.code].value;return this.props.verName&&this.props.verName.name!==""&&(r.variables[this.props.verName.name]=l),o={canNext:!0,result:!0},o}catch(s){return t.error=s,console.error(s),o.canNext=!1,o}}register(){actionAddins[this.name]=this}}new GetValueAciton;class StringJoinAction{constructor(){B(this,"name");B(this,"actionProps");B(this,"props");this.name="文字結合",this.actionProps=[],this.register(),this.props={saveField:{code:""},joinField1:{code:""},joinField2:{code:""},delimiter:""},this.register()}async process(e,t){let r={canNext:!1,result:!1};try{let o=function(C,w,x,H){var D,Z,F,Y,ne,V,u,X,U,I,K,q,G,oe,ue,pe;if((((D=H.record[x])==null?void 0:D.value)===void 0||((Z=H.record[x])==null?void 0:Z.value)===null)&&(H.record[x].value=""),w==="CREATOR"||w==="MODIFIER")C=(F=H.record[x])==null?void 0:F.value.name;else if(w==="DATETIME"||w==="CREATED_TIME"||w==="UPDATED_TIME")((Y=H.record[x])==null?void 0:Y.value)!==void 0&&((ne=H.record[x])==null?void 0:ne.value)!==""?C=Formatter.dateFormat(new Date((V=H.record[x])==null?void 0:V.value),"yyyy-MM-dd HH:mm"):C=(u=H.record[x])==null?void 0:u.value;else if(w==="USER_SELECT"||w==="ORGANIZATION_SELECT"||w==="GROUP_SELECT"||w==="FILE"||w==="STATUS_ASSIGNEE")if(((X=H.record[x])==null?void 0:X.value)===void 0||((U=H.record[x])==null?void 0:U.value)==="")C=(I=H.record[x])==null?void 0:I.value;else{const le=(K=H.record[x])==null?void 0:K.value;let ve=[];for(let he=0;he{s[this.props.saveField.code].value=S,t.type.includes("index")?window.alert("文字結合行いました。"+this.props.joinField1.name+":"+d+","+this.props.joinField2.name+":"+m+"。一覧画面更新成功後自動リロードしません。必要に応じて手動リロードください。"):window.alert("文字結合行いました。"+this.props.joinField1.name+":"+d+","+this.props.joinField2.name+":"+m+"。")}).catch(w=>(t.error="エラーが発生しました。結合しません。システム管理者へお問合せください",window.alert(t.error+"error message:"+w),t))}return r={canNext:!0,result:!0},r}catch(o){return t.type.includes("success")&&window.alert("[windows alert]:処理中異常が発生しました。結合しません。システム担当者へお問合せください。errorメッセージ:"+o),t.error="[エラーメッセージ]:処理中異常が発生しました。結合しません。システム担当者へお問合せください。errorメッセージ:"+o,{canNext:!1,result:!1}}}register(){actionAddins[this.name]=this}}new StringJoinAction;class FullWidthAction{constructor(){B(this,"name");B(this,"actionProps");B(this,"props");this.name="全角チェック",this.actionProps=[],this.props={field:{code:""}},this.register()}async process(e,t,r){var s;let o={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue))return o;this.props=e.ActionValue;const l=t.record,f=(s=l[this.props.field.code])==null?void 0:s.value;return f===void 0||f===""?o:this.containsFullWidthChars(f)?(o={canNext:!0,result:!0},o):(l[this.props.field.code].error="半角が含まれています",o.canNext=!1,o)}catch(l){return t.error=l,console.error(l),o.canNext=!1,o}}containsFullWidthChars(e){const t="^[^-~。-゚]+$";return new RegExp(t).test(e)}register(){actionAddins[this.name]=this}}new FullWidthAction;class HalfWidthAction{constructor(){B(this,"name");B(this,"actionProps");B(this,"props");this.name="半角チェック",this.actionProps=[],this.props={field:{code:""}},this.register()}async process(e,t,r){var s;let o={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue))return o;this.props=e.ActionValue;const l=t.record,f=(s=l[this.props.field.code])==null?void 0:s.value;return f===void 0||f===""?o:this.containsHalfWidthChars(f)?(o={canNext:!0,result:!0},o):(l[this.props.field.code].error="全角が含まれています",o.canNext=!1,o)}catch(l){return t.error=l,console.error(l),o.canNext=!1,o}}containsHalfWidthChars(e){const t="^[-~。-゚]+$";return new RegExp(t).test(e)}register(){actionAddins[this.name]=this}}new HalfWidthAction;class LoginUserGetterAction{constructor(){B(this,"name");B(this,"actionProps");B(this,"props");this.name="ログインユーザー取得",this.actionProps=[],this.register(),this.props={verName:{name:""}},this.register()}async process(e,t,r){let o={canNext:!0,result:!1};try{return this.actionProps=e.actionProps,"verName"in e.ActionValue&&(this.props=e.ActionValue,this.props.verName&&this.props.verName.name!==""&&(r.variables[this.props.verName.name]=kintone.getLoginUser()),o={canNext:!0,result:!0}),o}catch(s){return t.error=s.message,{canNext:!1,result:!1}}}register(){actionAddins[this.name]=this}}new LoginUserGetterAction;const autoLookup="";var modal={exports:{}},baseComponent={exports:{}},data={exports:{}};/*! +`+e.prev}function arrObjKeys(n,e){var t=isArray$3(n),r=[];if(t){r.length=n.length;for(var o=0;o1;){var t=e.pop(),r=t.obj[t.prop];if(isArray$2(r)){for(var o=[],s=0;s=limit?l.slice(E,E+limit):l,m=[],y=0;y=48&&S<=57||S>=65&&S<=90||S>=97&&S<=122||s===formats$2.RFC1738&&(S===40||S===41)){m[m.length]=d.charAt(y);continue}if(S<128){m[m.length]=hexTable[S];continue}if(S<2048){m[m.length]=hexTable[192|S>>6]+hexTable[128|S&63];continue}if(S<55296||S>=57344){m[m.length]=hexTable[224|S>>12]+hexTable[128|S>>6&63]+hexTable[128|S&63];continue}y+=1,S=65536+((S&1023)<<10|d.charCodeAt(y)&1023),m[m.length]=hexTable[240|S>>18]+hexTable[128|S>>12&63]+hexTable[128|S>>6&63]+hexTable[128|S&63]}f+=m.join("")}return f},compact=function n(e){for(var t=[{obj:{o:e},prop:"o"}],r=[],o=0;o"u"&&(ne=0)}if(typeof m=="function"?F=m(t,F):F instanceof Date?F=C(F):r==="comma"&&isArray$1(F)&&(F=utils$1.maybeMap(F,function(Re){return Re instanceof Date?C(Re):Re})),F===null){if(l)return d&&!H?d(t,defaults$1.encoder,D,"key",w):t;F=""}if(isNonNullishPrimitive(F)||utils$1.isBuffer(F)){if(d){var X=H?t:d(t,defaults$1.encoder,D,"key",w);return[x(X)+"="+x(d(F,defaults$1.encoder,D,"value",w))]}return[x(t)+"="+x(String(F))]}var U=[];if(typeof F>"u")return U;var I;if(r==="comma"&&isArray$1(F))H&&d&&(F=utils$1.maybeMap(F,d)),I=[{value:F.length>0?F.join(",")||null:void 0}];else if(isArray$1(m))I=m;else{var K=Object.keys(F);I=y?K.sort(y):K}var q=E?t.replace(/\./g,"%2E"):t,G=o&&isArray$1(F)&&F.length===1?q+"[]":q;if(s&&isArray$1(F)&&F.length===0)return G+"[]";for(var oe=0;oe"u"?e.encodeDotInKeys===!0?!0:defaults$1.allowDots:!!e.allowDots;return{addQueryPrefix:typeof e.addQueryPrefix=="boolean"?e.addQueryPrefix:defaults$1.addQueryPrefix,allowDots:f,allowEmptyArrays:typeof e.allowEmptyArrays=="boolean"?!!e.allowEmptyArrays:defaults$1.allowEmptyArrays,arrayFormat:l,charset:t,charsetSentinel:typeof e.charsetSentinel=="boolean"?e.charsetSentinel:defaults$1.charsetSentinel,commaRoundTrip:e.commaRoundTrip,delimiter:typeof e.delimiter>"u"?defaults$1.delimiter:e.delimiter,encode:typeof e.encode=="boolean"?e.encode:defaults$1.encode,encodeDotInKeys:typeof e.encodeDotInKeys=="boolean"?e.encodeDotInKeys:defaults$1.encodeDotInKeys,encoder:typeof e.encoder=="function"?e.encoder:defaults$1.encoder,encodeValuesOnly:typeof e.encodeValuesOnly=="boolean"?e.encodeValuesOnly:defaults$1.encodeValuesOnly,filter:s,format:r,formatter:o,serializeDate:typeof e.serializeDate=="function"?e.serializeDate:defaults$1.serializeDate,skipNulls:typeof e.skipNulls=="boolean"?e.skipNulls:defaults$1.skipNulls,sort:typeof e.sort=="function"?e.sort:null,strictNullHandling:typeof e.strictNullHandling=="boolean"?e.strictNullHandling:defaults$1.strictNullHandling}},stringify_1=function(n,e){var t=n,r=normalizeStringifyOptions(e),o,s;typeof r.filter=="function"?(s=r.filter,t=s("",t)):isArray$1(r.filter)&&(s=r.filter,o=s);var l=[];if(typeof t!="object"||t===null)return"";var f=arrayPrefixGenerators[r.arrayFormat],E=f==="comma"&&r.commaRoundTrip;o||(o=Object.keys(t)),r.sort&&o.sort(r.sort);for(var d=getSideChannel(),m=0;m0?C+S:""},utils=utils$2,has=Object.prototype.hasOwnProperty,isArray=Array.isArray,defaults={allowDots:!1,allowEmptyArrays:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decodeDotInKeys:!1,decoder:utils.decode,delimiter:"&",depth:5,duplicates:"combine",ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},interpretNumericEntities=function(n){return n.replace(/&#(\d+);/g,function(e,t){return String.fromCharCode(parseInt(t,10))})},parseArrayValue=function(n,e){return n&&typeof n=="string"&&e.comma&&n.indexOf(",")>-1?n.split(","):n},isoSentinel="utf8=%26%2310003%3B",charsetSentinel="utf8=%E2%9C%93",parseValues=function n(e,t){var r={__proto__:null},o=t.ignoreQueryPrefix?e.replace(/^\?/,""):e;o=o.replace(/%5B/gi,"[").replace(/%5D/gi,"]");var s=t.parameterLimit===1/0?void 0:t.parameterLimit,l=o.split(t.delimiter,s),f=-1,E,d=t.charset;if(t.charsetSentinel)for(E=0;E-1&&(w=isArray(w)?[w]:w);var x=has.call(r,C);x&&t.duplicates==="combine"?r[C]=utils.combine(r[C],w):(!x||t.duplicates==="last")&&(r[C]=w)}return r},parseObject=function(n,e,t,r){for(var o=r?e:parseArrayValue(e,t),s=n.length-1;s>=0;--s){var l,f=n[s];if(f==="[]"&&t.parseArrays)l=t.allowEmptyArrays&&o===""?[]:[].concat(o);else{l=t.plainObjects?Object.create(null):{};var E=f.charAt(0)==="["&&f.charAt(f.length-1)==="]"?f.slice(1,-1):f,d=t.decodeDotInKeys?E.replace(/%2E/g,"."):E,m=parseInt(d,10);!t.parseArrays&&d===""?l={0:o}:!isNaN(m)&&f!==d&&String(m)===d&&m>=0&&t.parseArrays&&m<=t.arrayLimit?(l=[],l[m]=o):d!=="__proto__"&&(l[d]=o)}o=l}return o},parseKeys=function n(e,t,r,o){if(e){var s=r.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,l=/(\[[^[\]]*])/,f=/(\[[^[\]]*])/g,E=r.depth>0&&l.exec(s),d=E?s.slice(0,E.index):s,m=[];if(d){if(!r.plainObjects&&has.call(Object.prototype,d)&&!r.allowPrototypes)return;m.push(d)}for(var y=0;r.depth>0&&(E=f.exec(s))!==null&&y"u"?defaults.charset:e.charset,r=typeof e.duplicates>"u"?defaults.duplicates:e.duplicates;if(r!=="combine"&&r!=="first"&&r!=="last")throw new TypeError("The duplicates option must be either combine, first, or last");var o=typeof e.allowDots>"u"?e.decodeDotInKeys===!0?!0:defaults.allowDots:!!e.allowDots;return{allowDots:o,allowEmptyArrays:typeof e.allowEmptyArrays=="boolean"?!!e.allowEmptyArrays:defaults.allowEmptyArrays,allowPrototypes:typeof e.allowPrototypes=="boolean"?e.allowPrototypes:defaults.allowPrototypes,allowSparse:typeof e.allowSparse=="boolean"?e.allowSparse:defaults.allowSparse,arrayLimit:typeof e.arrayLimit=="number"?e.arrayLimit:defaults.arrayLimit,charset:t,charsetSentinel:typeof e.charsetSentinel=="boolean"?e.charsetSentinel:defaults.charsetSentinel,comma:typeof e.comma=="boolean"?e.comma:defaults.comma,decodeDotInKeys:typeof e.decodeDotInKeys=="boolean"?e.decodeDotInKeys:defaults.decodeDotInKeys,decoder:typeof e.decoder=="function"?e.decoder:defaults.decoder,delimiter:typeof e.delimiter=="string"||utils.isRegExp(e.delimiter)?e.delimiter:defaults.delimiter,depth:typeof e.depth=="number"||e.depth===!1?+e.depth:defaults.depth,duplicates:r,ignoreQueryPrefix:e.ignoreQueryPrefix===!0,interpretNumericEntities:typeof e.interpretNumericEntities=="boolean"?e.interpretNumericEntities:defaults.interpretNumericEntities,parameterLimit:typeof e.parameterLimit=="number"?e.parameterLimit:defaults.parameterLimit,parseArrays:e.parseArrays!==!1,plainObjects:typeof e.plainObjects=="boolean"?e.plainObjects:defaults.plainObjects,strictNullHandling:typeof e.strictNullHandling=="boolean"?e.strictNullHandling:defaults.strictNullHandling}},parse$1=function(n,e){var t=normalizeParseOptions(e);if(n===""||n===null||typeof n>"u")return t.plainObjects?Object.create(null):{};for(var r=typeof n=="string"?parseValues(n,t):n,o=t.plainObjects?Object.create(null):{},s=Object.keys(r),l=0;l255||($e=j.charCodeAt(Be++))>255||(Me=j.charCodeAt(Be++))>255)throw new TypeError("invalid character found");ee=Te<<16|$e<<8|Me,Oe+=E[ee>>18&63]+E[ee>>12&63]+E[ee>>6&63]+E[ee&63]}return Ze?Oe.slice(0,Ze-3)+"===".substring(Ze):Oe},H=typeof btoa=="function"?function(j){return btoa(j)}:o?function(j){return Buffer.from(j,"binary").toString("base64")}:x,D=o?function(j){return Buffer.from(j).toString("base64")}:function(j){for(var ee=4096,Te=[],$e=0,Me=j.length;$e>>6)+y(128|ee&63):y(224|ee>>>12&15)+y(128|ee>>>6&63)+y(128|ee&63)}else{var ee=65536+(j.charCodeAt(0)-55296)*1024+(j.charCodeAt(1)-56320);return y(240|ee>>>18&7)+y(128|ee>>>12&63)+y(128|ee>>>6&63)+y(128|ee&63)}},Y=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,ne=function(j){return j.replace(Y,F)},V=o?function(j){return Buffer.from(j,"utf8").toString("base64")}:l?function(j){return D(l.encode(j))}:function(j){return H(ne(j))},u=function(j,ee){return ee===void 0&&(ee=!1),ee?C(V(j)):V(j)},X=function(j){return u(j,!0)},U=/[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g,I=function(j){switch(j.length){case 4:var ee=(7&j.charCodeAt(0))<<18|(63&j.charCodeAt(1))<<12|(63&j.charCodeAt(2))<<6|63&j.charCodeAt(3),Te=ee-65536;return y((Te>>>10)+55296)+y((Te&1023)+56320);case 3:return y((15&j.charCodeAt(0))<<12|(63&j.charCodeAt(1))<<6|63&j.charCodeAt(2));default:return y((31&j.charCodeAt(0))<<6|63&j.charCodeAt(1))}},K=function(j){return j.replace(U,I)},q=function(j){if(j=j.replace(/\s+/g,""),!m.test(j))throw new TypeError("malformed base64.");j+="==".slice(2-(j.length&3));for(var ee,Te="",$e,Me,Oe=0;Oe>16&255):Me===64?y(ee>>16&255,ee>>8&255):y(ee>>16&255,ee>>8&255,ee&255);return Te},G=typeof atob=="function"?function(j){return atob(w(j))}:o?function(j){return Buffer.from(j,"base64").toString("binary")}:q,oe=o?function(j){return S(Buffer.from(j,"base64"))}:function(j){return S(G(j).split("").map(function(ee){return ee.charCodeAt(0)}))},ue=function(j){return oe(le(j))},pe=o?function(j){return Buffer.from(j,"base64").toString("utf8")}:s?function(j){return s.decode(oe(j))}:function(j){return K(G(j))},le=function(j){return w(j.replace(/[-_]/g,function(ee){return ee=="-"?"+":"/"}))},ve=function(j){return pe(le(j))},he=function(j){if(typeof j!="string")return!1;var ee=j.replace(/\s+/g,"").replace(/={0,2}$/,"");return!/[^\s0-9a-zA-Z\+/]/.test(ee)||!/[^\s0-9a-zA-Z\-_]/.test(ee)},Re=function(j){return{value:j,enumerable:!1,writable:!0,configurable:!0}},fe=function(){var j=function(ee,Te){return Object.defineProperty(String.prototype,ee,Re(Te))};j("fromBase64",function(){return ve(this)}),j("toBase64",function(ee){return u(this,ee)}),j("toBase64URI",function(){return u(this,!0)}),j("toBase64URL",function(){return u(this,!0)}),j("toUint8Array",function(){return ue(this)})},be=function(){var j=function(ee,Te){return Object.defineProperty(Uint8Array.prototype,ee,Re(Te))};j("toBase64",function(ee){return Z(this,ee)}),j("toBase64URI",function(){return Z(this,!0)}),j("toBase64URL",function(){return Z(this,!0)})},we=function(){fe(),be()},xe={version:t,VERSION:r,atob:G,atobPolyfill:q,btoa:H,btoaPolyfill:x,fromBase64:ve,toBase64:u,encode:u,encodeURI:X,encodeURL:X,utob:ne,btou:K,decode:ve,isValid:he,fromUint8Array:Z,toUint8Array:ue,extendString:fe,extendUint8Array:be,extendBuiltins:we};return xe.Base64={},Object.keys(xe).forEach(function(j){return xe.Base64[j]=xe[j]}),xe})})(base64);var base64Exports=base64.exports,__assign$2=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$2=Object.assign||function(n){for(var e,t=1,r=arguments.length;t0&&s[s.length-1])&&(d[0]===6||d[0]===2)){t=0;continue}if(d[0]===3&&(!s||d[1]>s[0]&&d[1]THRESHOLD_AVOID_REQUEST_URL_TOO_LARGE?(f=[__assign$2({},s)],w={method:"post",headers:__assign$2(__assign$2({},this.headers),{"X-HTTP-Method-Override":"GET"})},[4,this.buildData(r)]):[3,3];case 2:return[2,__assign$2.apply(void 0,f.concat([(w.data=D.sent(),w)]))];case 3:return[2,__assign$2(__assign$2({},s),{url:y})];case 4:return r instanceof form_data_1.default?[4,this.buildData(r)]:[3,6];case 5:return E=D.sent(),[2,__assign$2(__assign$2({},s),{headers:typeof E.getHeaders=="function"?__assign$2(__assign$2({},this.headers),E.getHeaders()):this.headers,data:E})];case 6:return d=[__assign$2({},s)],x={},[4,this.buildData(r)];case 7:return[2,__assign$2.apply(void 0,d.concat([(x.data=D.sent(),x)]))];case 8:return m=[__assign$2({},s)],H={},[4,this.buildData(r)];case 9:return[2,__assign$2.apply(void 0,m.concat([(H.data=D.sent(),H)]))];case 10:return S=this.buildRequestUrl,C=[t],[4,this.buildData(r)];case 11:return y=S.apply(this,C.concat([D.sent()])),[2,__assign$2(__assign$2({},s),{url:y})];case 12:throw new Error("".concat(e," method is not supported"));case 13:return[2]}})})},n.prototype.buildProxyConfig=function(e){var t;if(e!==void 0){if(e===!1)return!1;var r=e;return r.auth&&(r.auth.username.length===0||r.auth.password.length===0)&&(r.auth=void 0),r.protocol=(t=r.protocol)!==null&&t!==void 0?t:DEFAULT_PROXY_PROTOCOL,r}},n.prototype.buildRequestUrl=function(e,t){return"".concat(this.baseUrl).concat(e,"?").concat(qs_1.default.stringify(t))},n.prototype.buildData=function(e){return __awaiter(this,void 0,void 0,function(){var t;return __generator(this,function(r){switch(r.label){case 0:return this.auth.type!=="session"?[3,2]:[4,this.getRequestToken()];case 1:return t=r.sent(),e instanceof form_data_1.default?(e.append("__REQUEST_TOKEN__",t),[2,e]):[2,__assign$2({__REQUEST_TOKEN__:t},e)];case 2:return[2,e]}})})},n.prototype.buildHeaders=function(e){var t=e.basicAuth,r=e.userAgent,o=t?{Authorization:"Basic ".concat(js_base64_1.Base64.encode("".concat(t.username,":").concat(t.password)))}:{},s=platform_1$1.platformDeps.buildHeaders({userAgent:r}),l=__assign$2(__assign$2({},s),o);switch(this.auth.type){case"password":return __assign$2(__assign$2({},l),{"X-Cybozu-Authorization":js_base64_1.Base64.encode("".concat(this.auth.username,":").concat(this.auth.password))});case"apiToken":{var f=this.auth.apiToken;return Array.isArray(f)?__assign$2(__assign$2({},l),{"X-Cybozu-API-Token":f.join(",")}):__assign$2(__assign$2({},l),{"X-Cybozu-API-Token":f})}case"oAuthToken":return __assign$2(__assign$2({},l),{Authorization:"Bearer ".concat(this.auth.oAuthToken)});default:return __assign$2(__assign$2({},l),{"X-Requested-With":"XMLHttpRequest"})}},n.prototype.getRequestToken=function(){return __awaiter(this,void 0,void 0,function(){var e;return __generator(this,function(t){switch(t.label){case 0:return this.requestToken!==null?[3,2]:(e=this,[4,platform_1$1.platformDeps.getRequestToken()]);case 1:e.requestToken=t.sent(),t.label=2;case 2:return[2,this.requestToken]}})})},n}();KintoneRequestConfigBuilder$1.KintoneRequestConfigBuilder=KintoneRequestConfigBuilder;var KintoneResponseHandler$1={},__assign$1=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$1=Object.assign||function(n){for(var e,t=1,r=arguments.length;t(n.CALC="CALC",n.CATEGORY="CATEGORY",n.CHECK_BOX="CHECK_BOX",n.CREATED_TIME="CREATED_TIME",n.CREATOR="CREATOR",n.DATE="DATE",n.DATETIME="DATETIME",n.DROP_DOWN="DROP_DOWN",n.FILE="FILE",n.GROUP="GROUP",n.GROUP_SELECT="GROUP_SELECT",n.LINK="LINK",n.MODIFIER="MODIFIER",n.MULTI_LINE_TEXT="MULTI_LINE_TEXT",n.MULTI_SELECT="MULTI_SELECT",n.NUMBER="NUMBER",n.ORGANIZATION_SELECT="ORGANIZATION_SELECT",n.RADIO_BUTTON="RADIO_BUTTON",n.RECORD_NUMBER="RECORD_NUMBER",n.REFERENCE_TABLE="REFERENCE_TABLE",n.RICH_TEXT="RICH_TEXT",n.SINGLE_LINE_TEXT="SINGLE_LINE_TEXT",n.STATUS="STATUS",n.STATUS_ASSIGNEE="STATUS_ASSIGNEE",n.SUBTABLE="SUBTABLE",n.TIME="TIME",n.UPDATED_TIME="UPDATED_TIME",n.USER_SELECT="USER_SELECT",n))(FieldType||{}),CalcFormat=(n=>(n.NUMBER="NUMBER",n.NUMBER_DIGIT="NUMBER_DIGIT",n.DATETIME="DATETIME",n.DATE="DATE",n.TIME="TIME",n.HOUR_MINUTE="HOUR_MINUTE",n.DAY_HOUR_MINUTE="DAY_HOUR_MINUTE",n))(CalcFormat||{});class Aggregator{constructor(e,t){B(this,"data");B(this,"field");this.data=e,this.field=t}toNumberArray(){return this.data.map(t=>{const r=Number(t);if(isNaN(r))throw new Error(`フィールド「${this.field.code} 」は数値に変換できないため、計算を実行できません。`);return r})}sum(){return this.data.length===0?null:this.toNumberArray().reduce((t,r)=>t+r,0)}avg(){if(this.data.length===0)return null;const e=this.toNumberArray();return e.reduce((r,o)=>r+o,0)/e.length}max(){if(this.data.length===0)return null;if(this.field.type===FieldType.NUMBER){const e=this.toNumberArray();return Math.max(...e)}if(this.field.type===FieldType.CALC){const e=this.field;if(e.format===CalcFormat.NUMBER||e.format===CalcFormat.NUMBER_DIGIT){const t=this.toNumberArray();return Math.max(...t)}}return this.data.reduce((e,t)=>t>e?t:e,this.data[0])}min(){if(this.data.length===0)return null;if(this.field.type===FieldType.NUMBER){const e=this.toNumberArray();return Math.min(...e)}if(this.field.type===FieldType.CALC){const e=this.field;if(e.format===CalcFormat.NUMBER||e.format===CalcFormat.NUMBER_DIGIT){const t=this.toNumberArray();return Math.min(...t)}}return this.data===null||this.data.length===0?null:this.data.reduce((e,t)=>t{console.log(e);const r=/var\((.*?)\)/g;let o;for(;(o=r.exec(e))!==null;){const s=o[1];if(s in t)e=e.replace(o[0],t[s]);else throw new Error(`変数${s}が見つかりません`)}return console.log(e),e});B(this,"selectData",async e=>{const t=new index_browser.KintoneRestAPIClient,r=this.props.sources.fields.map(l=>l.code),o=await t.record.getAllRecords({app:this.props.sources.app.id,fields:r,condition:e}),s={};return o.forEach(l=>{for(const[f,E]of Object.entries(l))s[f]||(s[f]={type:E.type,value:[]}),s[f].value.push(E.value)}),s});this.name="データ処理",this.actionProps=[],this.props={displayName:"",condition:"",sources:{app:{id:""},fields:[]}},this.register()}async process(e,t,r){this.actionProps=e.actionProps,this.props=e.ActionValue;const o=JSON.parse(this.props.condition);let s={canNext:!0,result:""};try{if(!this.props)return s;const l=this.getQuery(o.queryString,r.variables),f=await this.selectData(l);if(console.log("data ",f),this.props.verName){const E=this.props.verName.vars.reduce((d,m)=>{const y=f[m.field.code].value,C=new Aggregator(y,m.field).calculate(m.logicalOperator.operator);return d[m.vName]=C,d},{});r.variables[this.props.verName.name]=E,console.log("context ",r)}return s}catch(l){return console.error("データ集計中例外が発生しました。",l),l instanceof Error?t.error=`データ集計中例外が発生しました。 ${l.message}`:t.error="データ集計中例外が発生しました。",s.canNext=!1,s}}register(){actionAddins[this.name]=this}}new DataProcessingAction;class DataMappingAction{constructor(){B(this,"name");B(this,"actionProps");B(this,"dataMappingProps");this.name="データマッピング",this.actionProps=[],this.dataMappingProps={},this.register()}async process(e,t,r){this.actionProps=e.actionProps,this.dataMappingProps=e.ActionValue,console.log(e.ActionValue);let o={canNext:!0,result:""};try{const s=this.dataMappingProps.dataMapping.filter(l=>l.from.objectType==="variable"&&l.from.name.name&&l.to.app&&l.to.fields&&l.to.fields.length>0).reduce((l,f)=>({...l,[f.to.fields[0].code]:{value:getValueByPath(r.variables,f.from.name.name)}}),{});s&&Object.keys(s).length>0&&await kintone.api(kintone.api.url("/k/v1/record.json",!0),"POST",{app:this.dataMappingProps.sources.app.id,record:s})}catch(s){console.error("DataMappingAction error",s),o.canNext=!1}return console.log("dataMappingProps",this.dataMappingProps),o}register(){actionAddins[this.name]=this}}new DataMappingAction;const getValueByPath=(n,e)=>e.split(".").reduce((t,r)=>(t||{})[r],n);class CurrentFieldGetAction{constructor(){B(this,"name");B(this,"actionProps");B(this,"currentFieldGetProps");this.name="フィールドの値を取得する",this.actionProps=[],this.currentFieldGetProps={},this.register()}async process(e,t,r){this.currentFieldGetProps=e.ActionValue,this.actionProps=e.actionProps;let o={canNext:!0,result:""};try{r.variables[this.currentFieldGetProps.verName.name]=r.record[this.currentFieldGetProps.field.code].value}catch(s){console.error("CurrentFieldGetAction error",s),o.canNext=!1}return o}register(){actionAddins[this.name]=this}}new CurrentFieldGetAction;class RegularCheckAction{constructor(){B(this,"name");B(this,"actionProps");B(this,"props");this.name="正規表現チェック",this.actionProps=[],this.props={field:{code:""},message:"",regExpression:""},this.register()}async process(e,t){let r={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("message"in e.ActionValue)&&!("regExpression"in e.ActionValue))return r;this.props=e.ActionValue;const o=t.record,s=o[this.props.field.code].value;return new RegExp(this.props.regExpression).test(s)?r={canNext:!0,result:!0}:o[this.props.field.code].error=this.props.message,r}catch(o){return t.error=o,console.error(o),r.canNext=!1,r}}register(){actionAddins[this.name]=this}}new RegularCheckAction;class MailCheckAction{constructor(){B(this,"name");B(this,"actionProps");B(this,"props");this.name="メールアドレスチェック",this.actionProps=[],this.props={field:{code:""},message:"",emailCheck:""},this.register()}async process(e,t){let r={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("message"in e.ActionValue)&&!("emailCheck"in e.ActionValue))return r;this.props=e.ActionValue;const o=t.record,s=o[this.props.field.code].value;return this.props.emailCheck==="厳格"?/^[a-zA-Z0-9_-¥.]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/.test(s)?o[this.props.field.code].error=null:o[this.props.field.code].error=this.props.message:this.props.emailCheck==="ゆるめ"?/^[^@]+@[^@]+$/.test(s)?o[this.props.field.code].error=null:o[this.props.field.code].error=this.props.message:r={canNext:!0,result:!0},r}catch(o){return t.error=o,console.error(o),r.canNext=!1,r}}register(){actionAddins[this.name]=this}}new MailCheckAction;class StrCountCheckAciton{constructor(){B(this,"name");B(this,"actionProps");B(this,"props");this.name="文字数チェック",this.actionProps=[],this.props={field:{code:""},message:"",maxLength:0},this.register()}async process(e,t){let r={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("message"in e.ActionValue)&&!("strExpression"in e.ActionValue))return r;this.props=e.ActionValue;const o=t.record,s=o[this.props.field.code].value,l=this.props.maxLength;return s===void 0||s===""||(l0&&(t.record[C].value=Z)),o={canNext:!0,result:!0},o}catch(s){return t.record,t.error=s.message,console.error(s),o.canNext=!0,o}}getConditionResult(e){const t=this.getCondition(this.props.condition);return t?t.evaluate(t.root,e):!0}getCondition(e){try{const t=new ConditionTree;return t.fromJson(e),t.getConditions(t.root).length>0?t:null}catch{return null}}register(){actionAddins[this.name]=this}}new InsertValueAction;class GetValueAciton{constructor(){B(this,"name");B(this,"actionProps");B(this,"props");this.name="値を取得する",this.actionProps=[],this.props={field:{code:""},verName:{name:""}},this.register()}async process(e,t,r){let o={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("verName"in e.ActionValue))return o;this.props=e.ActionValue;const l=t.record[this.props.field.code].value;return this.props.verName&&this.props.verName.name!==""&&(r.variables[this.props.verName.name]=l),o={canNext:!0,result:!0},o}catch(s){return t.error=s,console.error(s),o.canNext=!1,o}}register(){actionAddins[this.name]=this}}new GetValueAciton;class StringJoinAction{constructor(){B(this,"name");B(this,"actionProps");B(this,"props");this.name="文字結合",this.actionProps=[],this.register(),this.props={saveField:{code:""},joinField1:{code:""},joinField2:{code:""},delimiter:""},this.register()}async process(e,t){let r={canNext:!1,result:!1};try{let o=function(C,w,x,H){var D,Z,F,Y,ne,V,u,X,U,I,K,q,G,oe,ue,pe;if((((D=H.record[x])==null?void 0:D.value)===void 0||((Z=H.record[x])==null?void 0:Z.value)===null)&&(H.record[x].value=""),w==="CREATOR"||w==="MODIFIER")C=(F=H.record[x])==null?void 0:F.value.name;else if(w==="DATETIME"||w==="CREATED_TIME"||w==="UPDATED_TIME")((Y=H.record[x])==null?void 0:Y.value)!==void 0&&((ne=H.record[x])==null?void 0:ne.value)!==""?C=Formatter.dateFormat(new Date((V=H.record[x])==null?void 0:V.value),"yyyy-MM-dd HH:mm"):C=(u=H.record[x])==null?void 0:u.value;else if(w==="USER_SELECT"||w==="ORGANIZATION_SELECT"||w==="GROUP_SELECT"||w==="FILE"||w==="STATUS_ASSIGNEE")if(((X=H.record[x])==null?void 0:X.value)===void 0||((U=H.record[x])==null?void 0:U.value)==="")C=(I=H.record[x])==null?void 0:I.value;else{const le=(K=H.record[x])==null?void 0:K.value;let ve=[];for(let he=0;he{s[this.props.saveField.code].value=S,t.type.includes("index")?window.alert("文字結合行いました。"+this.props.joinField1.name+":"+d+","+this.props.joinField2.name+":"+m+"。一覧画面更新成功後自動リロードしません。必要に応じて手動リロードください。"):window.alert("文字結合行いました。"+this.props.joinField1.name+":"+d+","+this.props.joinField2.name+":"+m+"。")}).catch(w=>(t.error="エラーが発生しました。結合しません。システム管理者へお問合せください",window.alert(t.error+"error message:"+w),t))}return r={canNext:!0,result:!0},r}catch(o){return t.type.includes("success")&&window.alert("[windows alert]:処理中異常が発生しました。結合しません。システム担当者へお問合せください。errorメッセージ:"+o),t.error="[エラーメッセージ]:処理中異常が発生しました。結合しません。システム担当者へお問合せください。errorメッセージ:"+o,{canNext:!1,result:!1}}}register(){actionAddins[this.name]=this}}new StringJoinAction;class FullWidthAction{constructor(){B(this,"name");B(this,"actionProps");B(this,"props");this.name="全角チェック",this.actionProps=[],this.props={field:{code:""}},this.register()}async process(e,t,r){var s;let o={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue))return o;this.props=e.ActionValue;const l=t.record,f=(s=l[this.props.field.code])==null?void 0:s.value;return f===void 0||f===""?o:this.containsFullWidthChars(f)?(o={canNext:!0,result:!0},o):(l[this.props.field.code].error="半角が含まれています",o.canNext=!1,o)}catch(l){return t.error=l,console.error(l),o.canNext=!1,o}}containsFullWidthChars(e){const t="^[^-~。-゚]+$";return new RegExp(t).test(e)}register(){actionAddins[this.name]=this}}new FullWidthAction;class HalfWidthAction{constructor(){B(this,"name");B(this,"actionProps");B(this,"props");this.name="半角チェック",this.actionProps=[],this.props={field:{code:""}},this.register()}async process(e,t,r){var s;let o={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue))return o;this.props=e.ActionValue;const l=t.record,f=(s=l[this.props.field.code])==null?void 0:s.value;return f===void 0||f===""?o:this.containsHalfWidthChars(f)?(o={canNext:!0,result:!0},o):(l[this.props.field.code].error="全角が含まれています",o.canNext=!1,o)}catch(l){return t.error=l,console.error(l),o.canNext=!1,o}}containsHalfWidthChars(e){const t="^[-~。-゚]+$";return new RegExp(t).test(e)}register(){actionAddins[this.name]=this}}new HalfWidthAction;class LoginUserGetterAction{constructor(){B(this,"name");B(this,"actionProps");B(this,"props");this.name="ログインユーザー取得",this.actionProps=[],this.register(),this.props={verName:{name:""}},this.register()}async process(e,t,r){let o={canNext:!0,result:!1};try{return this.actionProps=e.actionProps,"verName"in e.ActionValue&&(this.props=e.ActionValue,this.props.verName&&this.props.verName.name!==""&&(r.variables[this.props.verName.name]=kintone.getLoginUser()),o={canNext:!0,result:!0}),o}catch(s){return t.error=s.message,{canNext:!1,result:!1}}}register(){actionAddins[this.name]=this}}new LoginUserGetterAction;const autoLookup="";var modal={exports:{}},baseComponent={exports:{}},data={exports:{}};/*! * Bootstrap data.js v5.3.3 (https://getbootstrap.com/) * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) @@ -97,4 +97,3 @@ var Vn=Object.defineProperty;var Fn=(n,e,t)=>e in n?Vn(n,e,{enumerable:!0,config
`;r.append(o)}Modal.getOrCreateInstance(t.get()[0]).show()});B(this,"showResult",(e,t)=>{const r=$(`#alcLookupModal .modal-body #app${e.id}`),o=`
${e.name}
更新件数:${t}件
`;r.html(o)});this.name="ルックアップ更新",this.actionProps=[],this.props={},this.register()}async process(e,t,r){this.actionProps=e.actionProps,this.props={...e.ActionValue,condition:JSON.parse(e.ActionValue.condition)};let o={canNext:!0,result:""};try{const s=this.props.lookupField.fields.filter(m=>m.lookup&&m.lookup.relatedApp.app===String(kintone.app.getId()));if(!s||s.length===0)throw new Error(`ルックアップの設定は不正です。${this.props.lookupField.fields[0].label} `);const l=this.props.lookupField.fields[0],f=t.record[l.lookup.relatedKeyField].value,E=await this.getUpdateRecords(l,f);if(E.length===0)return o;const d=this.convertForLookup(E,l,f);console.log("updateRecords",d),this.showSpinnerModel(this.props.lookupField.app),await this.updateLookupTarget(d),this.showResult(this.props.lookupField.app,d.length)}catch(s){console.error("ルックアップ更新中例外が発生しました。",s),s instanceof Error?t.error=s.message:t.error="ルックアップ更新中例外が発生しました。",o.canNext=!1}return console.log("autoLookupProps",this.props),o}register(){actionAddins[this.name]=this}}new AutoLookUpAction;class ActionProcess{constructor(e,t,r){B(this,"eventId");B(this,"flow");B(this,"event");B(this,"context");this.eventId=e,this.flow=t,this.event=r,this.context={record:this.event.record,variables:{}}}async exec(){const e=this.flow.getRoot();if(e===void 0||e.nextNodeIds.size===0)return;let t=e.nextNodeIds.get("");if(t===void 0)return;let r=this.flow.findNodeById(t),o={canNext:!0};for(;r!==void 0&&o.canNext;){const s=actionAddins[r.name];s!==void 0&&(o=await s.process(r,this.event,this.context));let l="";if(r.outputPoints&&r.outputPoints.length>1&&(l=o.result||""),t=r.nextNodeIds.get(l),t===void 0)return;r=this.flow.findNodeById(t)}}}class ActionProperty{constructor(e,t,r,o,s){B(this,"component");B(this,"props");this.component=e,this.props={name:t,displayName:r,placeholder:o,modelValue:s}}static defaultProperty(){return new ActionProperty("InputText","displayName","表示名","表示を入力してください","")}}class ActionNode{constructor({id:e,name:t,title:r,inputPoint:o,outputPoints:s,actionProps:l}){B(this,"id");B(this,"name");B(this,"inputPoint");B(this,"outputPoints");B(this,"actionProps");B(this,"prevNodeId");B(this,"nextNodeIds");this.id=e,this.name=t,this.inputPoint=o,this.outputPoints=s;const f=ActionProperty.defaultProperty();f.props.modelValue=r,this.actionProps=l,this.nextNodeIds=new Map}get title(){const e=this.actionProps.find(t=>t.props.name==="displayName");return e==null?void 0:e.props.modelValue}get subTitle(){return this.name}get isRoot(){return!1}get ActionValue(){const e={};return this.actionProps.forEach(t=>{e[t.props.name]=t.props.modelValue}),e}}class RootAction{constructor({id:e,name:t,title:r,subTitle:o}){B(this,"id");B(this,"name");B(this,"title");B(this,"subTitle");B(this,"inputPoint");B(this,"outputPoints");B(this,"isRoot");B(this,"actionProps");B(this,"ActionValue");B(this,"prevNodeId");B(this,"nextNodeIds");this.id=e,this.name=t,this.title=r,this.subTitle=o,this.inputPoint="",this.outputPoints=[],this.isRoot=!0,this.actionProps=[],this.ActionValue={},this.nextNodeIds=new Map}}class ActionFlow{constructor(e){B(this,"id");B(this,"actionNodes");e instanceof Array?this.actionNodes=e:this.actionNodes=[e],this.id=""}findNodeById(e){return this.actionNodes.find(t=>t.id===e)}toJSON(){return{id:this.id,actionNodes:this.actionNodes.map(e=>{const{nextNodeIds:t,...r}=e;return{...r,nextNodeIds:Array.from(t.entries())}})}}getRoot(){return this.actionNodes.find(e=>e.isRoot)}static fromJSON(e){const t=JSON.parse(e),r=t.actionNodes.map(s=>{const l=s.isRoot?new RootAction(s):new ActionNode(s);return l.nextNodeIds=new Map(Object.entries(s.nextNodeIds)),l.prevNodeId=s.prevNodeId,l.id=s.id,l}),o=new ActionFlow(r);return o.id=t.id,o}}$(function(){const n=f=>f.filter(E=>E.includes(".change.")),e=f=>f.filter(E=>E.includes(".customButtonClick.")),t=f=>f.filter(E=>!E.includes(".customButtonClick.")&&!E.includes(".change.")),r=Object.keys(alcflow),o=n(r),s=e(r),l=t(r);l.length>0&&kintone.events.on(l,async f=>{const E=alcflow[f.type],d=ActionFlow.fromJSON(E.content);return d!==void 0&&await new ActionProcess(f.type,d,f).exec(),f}),o.length>0&&kintone.events.on(o,f=>{const E=alcflow[f.type],d=ActionFlow.fromJSON(E.content);return d!==void 0&&new ActionProcess(f.type,d,f).exec(),f}),s.length>0&&s.forEach(f=>{$(document).on(f,async()=>{const E=kintone.app.record.get(),d=alcflow[f],m=ActionFlow.fromJSON(d.content);m!==void 0&&await new ActionProcess(f,m,E).exec();const y=E.record;kintone.app.record.set({record:y})})})}); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxjX3J1bnRpbWUuanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMiLCIuLi9zcmMvYWN0aW9ucy9pbmRleC50cyIsIi4uL3NyYy9hY3Rpb25zL211c3QtaW5wdXQudHMiLCIuLi9zcmMvdXRpbC9mb3JtYXQudHMiLCIuLi9zcmMvYWN0aW9ucy9hdXRvLW51bWJlcmluZy50cyIsIi4uL3NyYy90eXBlcy9Db25kaXRpb25zLnRzIiwiLi4vc3JjL2FjdGlvbnMvZmllbGQtc2hvd24udHMiLCIuLi9zcmMvYWN0aW9ucy9lcnJvci1zaG93LnRzIiwiLi4vc3JjL2FjdGlvbnMvYnV0dG9uLWFkZC50cyIsIi4uL3NyYy9hY3Rpb25zL2NvbmRpdGlvbi1hY3Rpb24udHMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvcGxhdGZvcm0vaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvcGxhdGZvcm0vVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yLmpzIiwiLi4vbm9kZV9tb2R1bGVzL21pbWUvTWltZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9taW1lL3R5cGVzL3N0YW5kYXJkLmpzIiwiLi4vbm9kZV9tb2R1bGVzL21pbWUvbGl0ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9wbGF0Zm9ybS9icm93c2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BraW50b25lL3Jlc3QtYXBpLWNsaWVudC9saWIvc3JjL3VybC5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9jbGllbnQvQmFzZUNsaWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9jbGllbnQvQnVsa1JlcXVlc3RDbGllbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvY2xpZW50L0FwcENsaWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9lcnJvci9LaW50b25lQWJvcnRTZWFyY2hFcnJvci5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9lcnJvci9LaW50b25lQWxsUmVjb3Jkc0Vycm9yLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BraW50b25lL3Jlc3QtYXBpLWNsaWVudC9saWIvc3JjL2Vycm9yL0tpbnRvbmVSZXN0QVBJRXJyb3IuanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvZXJyb3IvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvY2xpZW50L1JlY29yZENsaWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9jbGllbnQvU3BhY2VDbGllbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvZm9ybS1kYXRhL2xpYi9icm93c2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BraW50b25lL3Jlc3QtYXBpLWNsaWVudC9saWIvc3JjL2NsaWVudC9GaWxlQ2xpZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2Rpc3QvYnJvd3Nlci9heGlvcy5janMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvaHR0cC9BeGlvc0NsaWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9odHRwL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9lcy1lcnJvcnMvZXZhbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9lcy1lcnJvcnMvcmFuZ2UuanMiLCIuLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL3JlZi5qcyIsIi4uL25vZGVfbW9kdWxlcy9lcy1lcnJvcnMvc3ludGF4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy90eXBlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy91cmkuanMiLCIuLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanMiLCIuLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvaGFzLXByb3RvL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW1wbGVtZW50YXRpb24uanMiLCIuLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9oYXNvd24vaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9lcy1kZWZpbmUtcHJvcGVydHkvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvZ29wZC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9kZWZpbmUtZGF0YS1wcm9wZXJ0eS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9oYXMtcHJvcGVydHktZGVzY3JpcHRvcnMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvc2V0LWZ1bmN0aW9uLWxlbmd0aC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2NhbGxCb3VuZC5qcyIsIi4uL19fdml0ZS1icm93c2VyLWV4dGVybmFsIiwiLi4vbm9kZV9tb2R1bGVzL29iamVjdC1pbnNwZWN0L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9xcy9saWIvZm9ybWF0cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9xcy9saWIvdXRpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvcXMvbGliL3N0cmluZ2lmeS5qcyIsIi4uL25vZGVfbW9kdWxlcy9xcy9saWIvcGFyc2UuanMiLCIuLi9ub2RlX21vZHVsZXMvcXMvbGliL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2pzLWJhc2U2NC9iYXNlNjQuanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BraW50b25lL3Jlc3QtYXBpLWNsaWVudC9saWIvc3JjL0tpbnRvbmVSZXNwb25zZUhhbmRsZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvS2ludG9uZVJlc3RBUElDbGllbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvaW5kZXguYnJvd3Nlci5qcyIsIi4uL3NyYy90eXBlcy9GaWVsZExheW91dC50cyIsIi4uL3NyYy91dGlsL2FnZ3JlZ2F0ZXMudHMiLCIuLi9zcmMvYWN0aW9ucy9kYXRhLXByb2Nlc3NpbmcudHMiLCIuLi9zcmMvYWN0aW9ucy9kYXRhLW1hcHBpbmcudHMiLCIuLi9zcmMvYWN0aW9ucy9jdXJyZW50LWZpZWxkLWdldC50cyIsIi4uL3NyYy9hY3Rpb25zL3JlZ3VsYXItY2hlY2sudHMiLCIuLi9zcmMvYWN0aW9ucy9tYWlsLWNoZWNrLnRzIiwiLi4vc3JjL2FjdGlvbnMvY291bnRlci1jaGVjay50cyIsIi4uL3NyYy9hY3Rpb25zL2RhdGV0aW1lLWdldHRlci50cyIsIi4uL3NyYy9hY3Rpb25zL2luc2VydC12YWx1ZS50cyIsIi4uL3NyYy9hY3Rpb25zL3ZhbHVlLWdldHRlci50cyIsIi4uL3NyYy9hY3Rpb25zL3N0cmluZy1qb2luLnRzIiwiLi4vc3JjL2FjdGlvbnMvdmFsaWRhdGlvbi1mdWxsd2lkdGgudHMiLCIuLi9zcmMvYWN0aW9ucy92YWxpZGF0aW9uLWhhbGZ3aWR0aC50cyIsIi4uL3NyYy9hY3Rpb25zL2xvZ2luLXVzZXItZ2V0dGVyLnRzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9kaXN0L2RvbS9kYXRhLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9kaXN0L3V0aWwvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL2Rpc3QvZG9tL2V2ZW50LWhhbmRsZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL2Rpc3QvZG9tL21hbmlwdWxhdG9yLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9kaXN0L3V0aWwvY29uZmlnLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9kaXN0L2Jhc2UtY29tcG9uZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9kaXN0L2RvbS9zZWxlY3Rvci1lbmdpbmUuanMiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL2Rpc3QvdXRpbC9iYWNrZHJvcC5qcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvZGlzdC91dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMuanMiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL2Rpc3QvdXRpbC9mb2N1c3RyYXAuanMiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL2Rpc3QvdXRpbC9zY3JvbGxiYXIuanMiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL2Rpc3QvbW9kYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2VudW1zLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3cuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21hdGguanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3VzZXJBZ2VudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzTGF5b3V0Vmlld3BvcnQuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvY29udGFpbnMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNUYWJsZUVsZW1lbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRQYXJlbnROb2RlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3dpdGhpbi5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0RnJlc2hTaWRlT2JqZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tZXJnZVBhZGRpbmdPYmplY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2Fycm93LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRWYXJpYXRpb24uanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbEJhclguanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRWaWV3cG9ydFJlY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudFJlY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1Njcm9sbFBhcmVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFNjcm9sbFBhcmVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9jb21wdXRlT2Zmc2V0cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvZmxpcC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2hpZGUuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9vZmZzZXQuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRBbHRBeGlzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlU2Nyb2xsLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q29tcG9zaXRlUmVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvb3JkZXJNb2RpZmllcnMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2RlYm91bmNlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tZXJnZUJ5TmFtZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvY3JlYXRlUG9wcGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9wb3BwZXItbGl0ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9kaXN0L2pzL2Jvb3RzdHJhcC5lc20uanMiLCIuLi9zcmMvYWN0aW9ucy9hdXRvLWxvb2t1cC50cyIsIi4uL3NyYy90eXBlcy9hY3Rpb24tcHJvY2Vzcy50cyIsIi4uL3NyYy90eXBlcy9BY3Rpb25UeXBlcy50cyIsIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuNy4xXG4gKiBodHRwczovL2pxdWVyeS5jb20vXG4gKlxuICogQ29weXJpZ2h0IE9wZW5KUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cHM6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqXG4gKiBEYXRlOiAyMDIzLTA4LTI4VDEzOjM3WlxuICovXG4oIGZ1bmN0aW9uKCBnbG9iYWwsIGZhY3RvcnkgKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0aWYgKCB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vIEZvciBDb21tb25KUyBhbmQgQ29tbW9uSlMtbGlrZSBlbnZpcm9ubWVudHMgd2hlcmUgYSBwcm9wZXIgYHdpbmRvd2Bcblx0XHQvLyBpcyBwcmVzZW50LCBleGVjdXRlIHRoZSBmYWN0b3J5IGFuZCBnZXQgalF1ZXJ5LlxuXHRcdC8vIEZvciBlbnZpcm9ubWVudHMgdGhhdCBkbyBub3QgaGF2ZSBhIGB3aW5kb3dgIHdpdGggYSBgZG9jdW1lbnRgXG5cdFx0Ly8gKHN1Y2ggYXMgTm9kZS5qcyksIGV4cG9zZSBhIGZhY3RvcnkgYXMgbW9kdWxlLmV4cG9ydHMuXG5cdFx0Ly8gVGhpcyBhY2NlbnR1YXRlcyB0aGUgbmVlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIGEgcmVhbCBgd2luZG93YC5cblx0XHQvLyBlLmcuIHZhciBqUXVlcnkgPSByZXF1aXJlKFwianF1ZXJ5XCIpKHdpbmRvdyk7XG5cdFx0Ly8gU2VlIHRpY2tldCB0cmFjLTE0NTQ5IGZvciBtb3JlIGluZm8uXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xuXHRcdFx0ZmFjdG9yeSggZ2xvYmFsLCB0cnVlICkgOlxuXHRcdFx0ZnVuY3Rpb24oIHcgKSB7XG5cdFx0XHRcdGlmICggIXcuZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCBcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWN0b3J5KCB3ICk7XG5cdFx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGZhY3RvcnkoIGdsb2JhbCApO1xuXHR9XG5cbi8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQgeWV0XG59ICkoIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHtcblxuLy8gRWRnZSA8PSAxMiAtIDEzKywgRmlyZWZveCA8PTE4IC0gNDUrLCBJRSAxMCAtIDExLCBTYWZhcmkgNS4xIC0gOSssIGlPUyA2IC0gOS4xXG4vLyB0aHJvdyBleGNlcHRpb25zIHdoZW4gbm9uLXN0cmljdCBjb2RlIChlLmcuLCBBU1AuTkVUIDQuNSkgYWNjZXNzZXMgc3RyaWN0IG1vZGVcbi8vIGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyICh0cmFjLTEzMzM1KS4gQnV0IGFzIG9mIGpRdWVyeSAzLjAgKDIwMTYpLCBzdHJpY3QgbW9kZSBzaG91bGQgYmUgY29tbW9uXG4vLyBlbm91Z2ggdGhhdCBhbGwgc3VjaCBhdHRlbXB0cyBhcmUgZ3VhcmRlZCBpbiBhIHRyeSBibG9jay5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgYXJyID0gW107XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcblxudmFyIHNsaWNlID0gYXJyLnNsaWNlO1xuXG52YXIgZmxhdCA9IGFyci5mbGF0ID8gZnVuY3Rpb24oIGFycmF5ICkge1xuXHRyZXR1cm4gYXJyLmZsYXQuY2FsbCggYXJyYXkgKTtcbn0gOiBmdW5jdGlvbiggYXJyYXkgKSB7XG5cdHJldHVybiBhcnIuY29uY2F0LmFwcGx5KCBbXSwgYXJyYXkgKTtcbn07XG5cblxudmFyIHB1c2ggPSBhcnIucHVzaDtcblxudmFyIGluZGV4T2YgPSBhcnIuaW5kZXhPZjtcblxudmFyIGNsYXNzMnR5cGUgPSB7fTtcblxudmFyIHRvU3RyaW5nID0gY2xhc3MydHlwZS50b1N0cmluZztcblxudmFyIGhhc093biA9IGNsYXNzMnR5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBmblRvU3RyaW5nID0gaGFzT3duLnRvU3RyaW5nO1xuXG52YXIgT2JqZWN0RnVuY3Rpb25TdHJpbmcgPSBmblRvU3RyaW5nLmNhbGwoIE9iamVjdCApO1xuXG52YXIgc3VwcG9ydCA9IHt9O1xuXG52YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIGlzRnVuY3Rpb24oIG9iaiApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTU3LCBGaXJlZm94IDw9NTJcblx0XHQvLyBJbiBzb21lIGJyb3dzZXJzLCB0eXBlb2YgcmV0dXJucyBcImZ1bmN0aW9uXCIgZm9yIEhUTUwgPG9iamVjdD4gZWxlbWVudHNcblx0XHQvLyAoaS5lLiwgYHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9iamVjdFwiICkgPT09IFwiZnVuY3Rpb25cImApLlxuXHRcdC8vIFdlIGRvbid0IHdhbnQgdG8gY2xhc3NpZnkgKmFueSogRE9NIG5vZGUgYXMgYSBmdW5jdGlvbi5cblx0XHQvLyBTdXBwb3J0OiBRdFdlYiA8PTMuOC41LCBXZWJLaXQgPD01MzQuMzQsIHdraHRtbHRvcGRmIHRvb2wgPD0wLjEyLjVcblx0XHQvLyBQbHVzIGZvciBvbGQgV2ViS2l0LCB0eXBlb2YgcmV0dXJucyBcImZ1bmN0aW9uXCIgZm9yIEhUTUwgY29sbGVjdGlvbnNcblx0XHQvLyAoZS5nLiwgYHR5cGVvZiBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImRpdlwiKSA9PT0gXCJmdW5jdGlvblwiYCkuIChnaC00NzU2KVxuXHRcdHJldHVybiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIG9iai5ub2RlVHlwZSAhPT0gXCJudW1iZXJcIiAmJlxuXHRcdFx0dHlwZW9mIG9iai5pdGVtICE9PSBcImZ1bmN0aW9uXCI7XG5cdH07XG5cblxudmFyIGlzV2luZG93ID0gZnVuY3Rpb24gaXNXaW5kb3coIG9iaiApIHtcblx0XHRyZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09PSBvYmoud2luZG93O1xuXHR9O1xuXG5cbnZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcblxuXG5cblx0dmFyIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMgPSB7XG5cdFx0dHlwZTogdHJ1ZSxcblx0XHRzcmM6IHRydWUsXG5cdFx0bm9uY2U6IHRydWUsXG5cdFx0bm9Nb2R1bGU6IHRydWVcblx0fTtcblxuXHRmdW5jdGlvbiBET01FdmFsKCBjb2RlLCBub2RlLCBkb2MgKSB7XG5cdFx0ZG9jID0gZG9jIHx8IGRvY3VtZW50O1xuXG5cdFx0dmFyIGksIHZhbCxcblx0XHRcdHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KCBcInNjcmlwdFwiICk7XG5cblx0XHRzY3JpcHQudGV4dCA9IGNvZGU7XG5cdFx0aWYgKCBub2RlICkge1xuXHRcdFx0Zm9yICggaSBpbiBwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNjQrLCBFZGdlIDE4K1xuXHRcdFx0XHQvLyBTb21lIGJyb3dzZXJzIGRvbid0IHN1cHBvcnQgdGhlIFwibm9uY2VcIiBwcm9wZXJ0eSBvbiBzY3JpcHRzLlxuXHRcdFx0XHQvLyBPbiB0aGUgb3RoZXIgaGFuZCwganVzdCB1c2luZyBgZ2V0QXR0cmlidXRlYCBpcyBub3QgZW5vdWdoIGFzXG5cdFx0XHRcdC8vIHRoZSBgbm9uY2VgIGF0dHJpYnV0ZSBpcyByZXNldCB0byBhbiBlbXB0eSBzdHJpbmcgd2hlbmV2ZXIgaXRcblx0XHRcdFx0Ly8gYmVjb21lcyBicm93c2luZy1jb250ZXh0IGNvbm5lY3RlZC5cblx0XHRcdFx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvaHRtbC9pc3N1ZXMvMjM2OVxuXHRcdFx0XHQvLyBTZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jbm9uY2UtYXR0cmlidXRlc1xuXHRcdFx0XHQvLyBUaGUgYG5vZGUuZ2V0QXR0cmlidXRlYCBjaGVjayB3YXMgYWRkZWQgZm9yIHRoZSBzYWtlIG9mXG5cdFx0XHRcdC8vIGBqUXVlcnkuZ2xvYmFsRXZhbGAgc28gdGhhdCBpdCBjYW4gZmFrZSBhIG5vbmNlLWNvbnRhaW5pbmcgbm9kZVxuXHRcdFx0XHQvLyB2aWEgYW4gb2JqZWN0LlxuXHRcdFx0XHR2YWwgPSBub2RlWyBpIF0gfHwgbm9kZS5nZXRBdHRyaWJ1dGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoIGkgKTtcblx0XHRcdFx0aWYgKCB2YWwgKSB7XG5cdFx0XHRcdFx0c2NyaXB0LnNldEF0dHJpYnV0ZSggaSwgdmFsICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZG9jLmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdCApLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHNjcmlwdCApO1xuXHR9XG5cblxuZnVuY3Rpb24gdG9UeXBlKCBvYmogKSB7XG5cdGlmICggb2JqID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIG9iaiArIFwiXCI7XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHkgKGZ1bmN0aW9uaXNoIFJlZ0V4cClcblx0cmV0dXJuIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiID9cblx0XHRjbGFzczJ0eXBlWyB0b1N0cmluZy5jYWxsKCBvYmogKSBdIHx8IFwib2JqZWN0XCIgOlxuXHRcdHR5cGVvZiBvYmo7XG59XG4vKiBnbG9iYWwgU3ltYm9sICovXG4vLyBEZWZpbmluZyB0aGlzIGdsb2JhbCBpbiAuZXNsaW50cmMuanNvbiB3b3VsZCBjcmVhdGUgYSBkYW5nZXIgb2YgdXNpbmcgdGhlIGdsb2JhbFxuLy8gdW5ndWFyZGVkIGluIGFub3RoZXIgcGxhY2UsIGl0IHNlZW1zIHNhZmVyIHRvIGRlZmluZSBnbG9iYWwgb25seSBmb3IgdGhpcyBtb2R1bGVcblxuXG5cbnZhciB2ZXJzaW9uID0gXCIzLjcuMVwiLFxuXG5cdHJodG1sU3VmZml4ID0gL0hUTUwkL2ksXG5cblx0Ly8gRGVmaW5lIGEgbG9jYWwgY29weSBvZiBqUXVlcnlcblx0alF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXG5cdFx0Ly8gVGhlIGpRdWVyeSBvYmplY3QgaXMgYWN0dWFsbHkganVzdCB0aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQnXG5cdFx0Ly8gTmVlZCBpbml0IGlmIGpRdWVyeSBpcyBjYWxsZWQgKGp1c3QgYWxsb3cgZXJyb3IgdG8gYmUgdGhyb3duIGlmIG5vdCBpbmNsdWRlZClcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5mbi5pbml0KCBzZWxlY3RvciwgY29udGV4dCApO1xuXHR9O1xuXG5qUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0ge1xuXG5cdC8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWRcblx0anF1ZXJ5OiB2ZXJzaW9uLFxuXG5cdGNvbnN0cnVjdG9yOiBqUXVlcnksXG5cblx0Ly8gVGhlIGRlZmF1bHQgbGVuZ3RoIG9mIGEgalF1ZXJ5IG9iamVjdCBpcyAwXG5cdGxlbmd0aDogMCxcblxuXHR0b0FycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHR9LFxuXG5cdC8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1Jcblx0Ly8gR2V0IHRoZSB3aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXlcblx0Z2V0OiBmdW5jdGlvbiggbnVtICkge1xuXG5cdFx0Ly8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgaW4gYSBjbGVhbiBhcnJheVxuXHRcdGlmICggbnVtID09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiBqdXN0IHRoZSBvbmUgZWxlbWVudCBmcm9tIHRoZSBzZXRcblx0XHRyZXR1cm4gbnVtIDwgMCA/IHRoaXNbIG51bSArIHRoaXMubGVuZ3RoIF0gOiB0aGlzWyBudW0gXTtcblx0fSxcblxuXHQvLyBUYWtlIGFuIGFycmF5IG9mIGVsZW1lbnRzIGFuZCBwdXNoIGl0IG9udG8gdGhlIHN0YWNrXG5cdC8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KVxuXHRwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblxuXHRcdC8vIEJ1aWxkIGEgbmV3IGpRdWVyeSBtYXRjaGVkIGVsZW1lbnQgc2V0XG5cdFx0dmFyIHJldCA9IGpRdWVyeS5tZXJnZSggdGhpcy5jb25zdHJ1Y3RvcigpLCBlbGVtcyApO1xuXG5cdFx0Ly8gQWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChhcyBhIHJlZmVyZW5jZSlcblx0XHRyZXQucHJldk9iamVjdCA9IHRoaXM7XG5cblx0XHQvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldFxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0Ly8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC5cblx0ZWFjaDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2sgKTtcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGNhbGxiYWNrLmNhbGwoIGVsZW0sIGksIGVsZW0gKTtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRzbGljZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBzbGljZS5hcHBseSggdGhpcywgYXJndW1lbnRzICkgKTtcblx0fSxcblxuXHRmaXJzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIDAgKTtcblx0fSxcblxuXHRsYXN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggLTEgKTtcblx0fSxcblxuXHRldmVuOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5ncmVwKCB0aGlzLCBmdW5jdGlvbiggX2VsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gKCBpICsgMSApICUgMjtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRvZGQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5LmdyZXAoIHRoaXMsIGZ1bmN0aW9uKCBfZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiBpICUgMjtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRlcTogZnVuY3Rpb24oIGkgKSB7XG5cdFx0dmFyIGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0aiA9ICtpICsgKCBpIDwgMCA/IGxlbiA6IDAgKTtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGogPj0gMCAmJiBqIDwgbGVuID8gWyB0aGlzWyBqIF0gXSA6IFtdICk7XG5cdH0sXG5cblx0ZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IoKTtcblx0fSxcblxuXHQvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuXG5cdC8vIEJlaGF2ZXMgbGlrZSBhbiBBcnJheSdzIG1ldGhvZCwgbm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLlxuXHRwdXNoOiBwdXNoLFxuXHRzb3J0OiBhcnIuc29ydCxcblx0c3BsaWNlOiBhcnIuc3BsaWNlXG59O1xuXG5qUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmUsXG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyAwIF0gfHwge30sXG5cdFx0aSA9IDEsXG5cdFx0bGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcblx0XHRkZWVwID0gZmFsc2U7XG5cblx0Ly8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvblxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGRlZXAgPSB0YXJnZXQ7XG5cblx0XHQvLyBTa2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0XG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyBpIF0gfHwge307XG5cdFx0aSsrO1xuXHR9XG5cblx0Ly8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpXG5cdGlmICggdHlwZW9mIHRhcmdldCAhPT0gXCJvYmplY3RcIiAmJiAhaXNGdW5jdGlvbiggdGFyZ2V0ICkgKSB7XG5cdFx0dGFyZ2V0ID0ge307XG5cdH1cblxuXHQvLyBFeHRlbmQgalF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWRcblx0aWYgKCBpID09PSBsZW5ndGggKSB7XG5cdFx0dGFyZ2V0ID0gdGhpcztcblx0XHRpLS07XG5cdH1cblxuXHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblxuXHRcdC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXNcblx0XHRpZiAoICggb3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBdICkgIT0gbnVsbCApIHtcblxuXHRcdFx0Ly8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdFxuXHRcdFx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdFx0XHRjb3B5ID0gb3B0aW9uc1sgbmFtZSBdO1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgT2JqZWN0LnByb3RvdHlwZSBwb2xsdXRpb25cblx0XHRcdFx0Ly8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9vcFxuXHRcdFx0XHRpZiAoIG5hbWUgPT09IFwiX19wcm90b19fXCIgfHwgdGFyZ2V0ID09PSBjb3B5ICkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzXG5cdFx0XHRcdGlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvcHkgKSB8fFxuXHRcdFx0XHRcdCggY29weUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KCBjb3B5ICkgKSApICkge1xuXHRcdFx0XHRcdHNyYyA9IHRhcmdldFsgbmFtZSBdO1xuXG5cdFx0XHRcdFx0Ly8gRW5zdXJlIHByb3BlciB0eXBlIGZvciB0aGUgc291cmNlIHZhbHVlXG5cdFx0XHRcdFx0aWYgKCBjb3B5SXNBcnJheSAmJiAhQXJyYXkuaXNBcnJheSggc3JjICkgKSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IFtdO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoICFjb3B5SXNBcnJheSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHNyYyApICkge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSB7fTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvcHlJc0FycmF5ID0gZmFsc2U7XG5cblx0XHRcdFx0XHQvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW1cblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25lLCBjb3B5ICk7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlc1xuXHRcdFx0XHR9IGVsc2UgaWYgKCBjb3B5ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBjb3B5O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3Rcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBVbmlxdWUgZm9yIGVhY2ggY29weSBvZiBqUXVlcnkgb24gdGhlIHBhZ2Vcblx0ZXhwYW5kbzogXCJqUXVlcnlcIiArICggdmVyc2lvbiArIE1hdGgucmFuZG9tKCkgKS5yZXBsYWNlKCAvXFxEL2csIFwiXCIgKSxcblxuXHQvLyBBc3N1bWUgalF1ZXJ5IGlzIHJlYWR5IHdpdGhvdXQgdGhlIHJlYWR5IG1vZHVsZVxuXHRpc1JlYWR5OiB0cnVlLFxuXG5cdGVycm9yOiBmdW5jdGlvbiggbXNnICkge1xuXHRcdHRocm93IG5ldyBFcnJvciggbXNnICk7XG5cdH0sXG5cblx0bm9vcDogZnVuY3Rpb24oKSB7fSxcblxuXHRpc1BsYWluT2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHZhciBwcm90bywgQ3RvcjtcblxuXHRcdC8vIERldGVjdCBvYnZpb3VzIG5lZ2F0aXZlc1xuXHRcdC8vIFVzZSB0b1N0cmluZyBpbnN0ZWFkIG9mIGpRdWVyeS50eXBlIHRvIGNhdGNoIGhvc3Qgb2JqZWN0c1xuXHRcdGlmICggIW9iaiB8fCB0b1N0cmluZy5jYWxsKCBvYmogKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRwcm90byA9IGdldFByb3RvKCBvYmogKTtcblxuXHRcdC8vIE9iamVjdHMgd2l0aCBubyBwcm90b3R5cGUgKGUuZy4sIGBPYmplY3QuY3JlYXRlKCBudWxsIClgKSBhcmUgcGxhaW5cblx0XHRpZiAoICFwcm90byApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIE9iamVjdHMgd2l0aCBwcm90b3R5cGUgYXJlIHBsYWluIGlmZiB0aGV5IHdlcmUgY29uc3RydWN0ZWQgYnkgYSBnbG9iYWwgT2JqZWN0IGZ1bmN0aW9uXG5cdFx0Q3RvciA9IGhhc093bi5jYWxsKCBwcm90bywgXCJjb25zdHJ1Y3RvclwiICkgJiYgcHJvdG8uY29uc3RydWN0b3I7XG5cdFx0cmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgZm5Ub1N0cmluZy5jYWxsKCBDdG9yICkgPT09IE9iamVjdEZ1bmN0aW9uU3RyaW5nO1xuXHR9LFxuXG5cdGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIG5hbWU7XG5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Ly8gRXZhbHVhdGVzIGEgc2NyaXB0IGluIGEgcHJvdmlkZWQgY29udGV4dDsgZmFsbHMgYmFjayB0byB0aGUgZ2xvYmFsIG9uZVxuXHQvLyBpZiBub3Qgc3BlY2lmaWVkLlxuXHRnbG9iYWxFdmFsOiBmdW5jdGlvbiggY29kZSwgb3B0aW9ucywgZG9jICkge1xuXHRcdERPTUV2YWwoIGNvZGUsIHsgbm9uY2U6IG9wdGlvbnMgJiYgb3B0aW9ucy5ub25jZSB9LCBkb2MgKTtcblx0fSxcblxuXHRlYWNoOiBmdW5jdGlvbiggb2JqLCBjYWxsYmFjayApIHtcblx0XHR2YXIgbGVuZ3RoLCBpID0gMDtcblxuXHRcdGlmICggaXNBcnJheUxpa2UoIG9iaiApICkge1xuXHRcdFx0bGVuZ3RoID0gb2JqLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCBpIGluIG9iaiApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cblx0Ly8gUmV0cmlldmUgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzXG5cdHRleHQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBub2RlLFxuXHRcdFx0cmV0ID0gXCJcIixcblx0XHRcdGkgPSAwLFxuXHRcdFx0bm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0aWYgKCAhbm9kZVR5cGUgKSB7XG5cblx0XHRcdC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5XG5cdFx0XHR3aGlsZSAoICggbm9kZSA9IGVsZW1bIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0Ly8gRG8gbm90IHRyYXZlcnNlIGNvbW1lbnQgbm9kZXNcblx0XHRcdFx0cmV0ICs9IGpRdWVyeS50ZXh0KCBub2RlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICggbm9kZVR5cGUgPT09IDEgfHwgbm9kZVR5cGUgPT09IDExICkge1xuXHRcdFx0cmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7XG5cdFx0fVxuXHRcdGlmICggbm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kb2N1bWVudEVsZW1lbnQudGV4dENvbnRlbnQ7XG5cdFx0fVxuXHRcdGlmICggbm9kZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5ub2RlVmFsdWU7XG5cdFx0fVxuXG5cdFx0Ly8gRG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzXG5cblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdC8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFrZUFycmF5OiBmdW5jdGlvbiggYXJyLCByZXN1bHRzICkge1xuXHRcdHZhciByZXQgPSByZXN1bHRzIHx8IFtdO1xuXG5cdFx0aWYgKCBhcnIgIT0gbnVsbCApIHtcblx0XHRcdGlmICggaXNBcnJheUxpa2UoIE9iamVjdCggYXJyICkgKSApIHtcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCByZXQsXG5cdFx0XHRcdFx0dHlwZW9mIGFyciA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0XHRbIGFyciBdIDogYXJyXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmNhbGwoIHJldCwgYXJyICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHRpbkFycmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyLCBpICkge1xuXHRcdHJldHVybiBhcnIgPT0gbnVsbCA/IC0xIDogaW5kZXhPZi5jYWxsKCBhcnIsIGVsZW0sIGkgKTtcblx0fSxcblxuXHRpc1hNTERvYzogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWVzcGFjZSA9IGVsZW0gJiYgZWxlbS5uYW1lc3BhY2VVUkksXG5cdFx0XHRkb2NFbGVtID0gZWxlbSAmJiAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkuZG9jdW1lbnRFbGVtZW50O1xuXG5cdFx0Ly8gQXNzdW1lIEhUTUwgd2hlbiBkb2N1bWVudEVsZW1lbnQgZG9lc24ndCB5ZXQgZXhpc3QsIHN1Y2ggYXMgaW5zaWRlXG5cdFx0Ly8gZG9jdW1lbnQgZnJhZ21lbnRzLlxuXHRcdHJldHVybiAhcmh0bWxTdWZmaXgudGVzdCggbmFtZXNwYWNlIHx8IGRvY0VsZW0gJiYgZG9jRWxlbS5ub2RlTmFtZSB8fCBcIkhUTUxcIiApO1xuXHR9LFxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdG1lcmdlOiBmdW5jdGlvbiggZmlyc3QsIHNlY29uZCApIHtcblx0XHR2YXIgbGVuID0gK3NlY29uZC5sZW5ndGgsXG5cdFx0XHRqID0gMCxcblx0XHRcdGkgPSBmaXJzdC5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdO1xuXHRcdH1cblxuXHRcdGZpcnN0Lmxlbmd0aCA9IGk7XG5cblx0XHRyZXR1cm4gZmlyc3Q7XG5cdH0sXG5cblx0Z3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgaW52ZXJ0ICkge1xuXHRcdHZhciBjYWxsYmFja0ludmVyc2UsXG5cdFx0XHRtYXRjaGVzID0gW10sXG5cdFx0XHRpID0gMCxcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aCxcblx0XHRcdGNhbGxiYWNrRXhwZWN0ID0gIWludmVydDtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCBvbmx5IHNhdmluZyB0aGUgaXRlbXNcblx0XHQvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvblxuXHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0Y2FsbGJhY2tJbnZlcnNlID0gIWNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpICk7XG5cdFx0XHRpZiAoIGNhbGxiYWNrSW52ZXJzZSAhPT0gY2FsbGJhY2tFeHBlY3QgKSB7XG5cdFx0XHRcdG1hdGNoZXMucHVzaCggZWxlbXNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBtYXRjaGVzO1xuXHR9LFxuXG5cdC8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGFyZyApIHtcblx0XHR2YXIgbGVuZ3RoLCB2YWx1ZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0cmV0ID0gW107XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIgbmV3IHZhbHVlc1xuXHRcdGlmICggaXNBcnJheUxpa2UoIGVsZW1zICkgKSB7XG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBHbyB0aHJvdWdoIGV2ZXJ5IGtleSBvbiB0aGUgb2JqZWN0LFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCBpIGluIGVsZW1zICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdFx0cmV0dXJuIGZsYXQoIHJldCApO1xuXHR9LFxuXG5cdC8vIEEgZ2xvYmFsIEdVSUQgY291bnRlciBmb3Igb2JqZWN0c1xuXHRndWlkOiAxLFxuXG5cdC8vIGpRdWVyeS5zdXBwb3J0IGlzIG5vdCB1c2VkIGluIENvcmUgYnV0IG90aGVyIHByb2plY3RzIGF0dGFjaCB0aGVpclxuXHQvLyBwcm9wZXJ0aWVzIHRvIGl0IHNvIGl0IG5lZWRzIHRvIGV4aXN0LlxuXHRzdXBwb3J0OiBzdXBwb3J0XG59ICk7XG5cbmlmICggdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICkge1xuXHRqUXVlcnkuZm5bIFN5bWJvbC5pdGVyYXRvciBdID0gYXJyWyBTeW1ib2wuaXRlcmF0b3IgXTtcbn1cblxuLy8gUG9wdWxhdGUgdGhlIGNsYXNzMnR5cGUgbWFwXG5qUXVlcnkuZWFjaCggXCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbFwiLnNwbGl0KCBcIiBcIiApLFxuXHRmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdFx0Y2xhc3MydHlwZVsgXCJbb2JqZWN0IFwiICsgbmFtZSArIFwiXVwiIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdH0gKTtcblxuZnVuY3Rpb24gaXNBcnJheUxpa2UoIG9iaiApIHtcblxuXHQvLyBTdXBwb3J0OiByZWFsIGlPUyA4LjIgb25seSAobm90IHJlcHJvZHVjaWJsZSBpbiBzaW11bGF0b3IpXG5cdC8vIGBpbmAgY2hlY2sgdXNlZCB0byBwcmV2ZW50IEpJVCBlcnJvciAoZ2gtMjE0NSlcblx0Ly8gaGFzT3duIGlzbid0IHVzZWQgaGVyZSBkdWUgdG8gZmFsc2UgbmVnYXRpdmVzXG5cdC8vIHJlZ2FyZGluZyBOb2RlbGlzdCBsZW5ndGggaW4gSUVcblx0dmFyIGxlbmd0aCA9ICEhb2JqICYmIFwibGVuZ3RoXCIgaW4gb2JqICYmIG9iai5sZW5ndGgsXG5cdFx0dHlwZSA9IHRvVHlwZSggb2JqICk7XG5cblx0aWYgKCBpc0Z1bmN0aW9uKCBvYmogKSB8fCBpc1dpbmRvdyggb2JqICkgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHR5cGUgPT09IFwiYXJyYXlcIiB8fCBsZW5ndGggPT09IDAgfHxcblx0XHR0eXBlb2YgbGVuZ3RoID09PSBcIm51bWJlclwiICYmIGxlbmd0aCA+IDAgJiYgKCBsZW5ndGggLSAxICkgaW4gb2JqO1xufVxuXG5cbmZ1bmN0aW9uIG5vZGVOYW1lKCBlbGVtLCBuYW1lICkge1xuXG5cdHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG59XG52YXIgcG9wID0gYXJyLnBvcDtcblxuXG52YXIgc29ydCA9IGFyci5zb3J0O1xuXG5cbnZhciBzcGxpY2UgPSBhcnIuc3BsaWNlO1xuXG5cbnZhciB3aGl0ZXNwYWNlID0gXCJbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXVwiO1xuXG5cbnZhciBydHJpbUNTUyA9IG5ldyBSZWdFeHAoXG5cdFwiXlwiICsgd2hpdGVzcGFjZSArIFwiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIiArIHdoaXRlc3BhY2UgKyBcIiskXCIsXG5cdFwiZ1wiXG4pO1xuXG5cblxuXG4vLyBOb3RlOiBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmXG5qUXVlcnkuY29udGFpbnMgPSBmdW5jdGlvbiggYSwgYiApIHtcblx0dmFyIGJ1cCA9IGIgJiYgYi5wYXJlbnROb2RlO1xuXG5cdHJldHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAubm9kZVR5cGUgPT09IDEgJiYgKFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExK1xuXHRcdC8vIElFIGRvZXNuJ3QgaGF2ZSBgY29udGFpbnNgIG9uIFNWRy5cblx0XHRhLmNvbnRhaW5zID9cblx0XHRcdGEuY29udGFpbnMoIGJ1cCApIDpcblx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYnVwICkgJiAxNlxuXHQpICk7XG59O1xuXG5cblxuXG4vLyBDU1Mgc3RyaW5nL2lkZW50aWZpZXIgc2VyaWFsaXphdGlvblxuLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNjb21tb24tc2VyaWFsaXppbmctaWRpb21zXG52YXIgcmNzc2VzY2FwZSA9IC8oW1xcMC1cXHgxZlxceDdmXXxeLT9cXGQpfF4tJHxbXlxceDgwLVxcdUZGRkZcXHctXS9nO1xuXG5mdW5jdGlvbiBmY3NzZXNjYXBlKCBjaCwgYXNDb2RlUG9pbnQgKSB7XG5cdGlmICggYXNDb2RlUG9pbnQgKSB7XG5cblx0XHQvLyBVKzAwMDAgTlVMTCBiZWNvbWVzIFUrRkZGRCBSRVBMQUNFTUVOVCBDSEFSQUNURVJcblx0XHRpZiAoIGNoID09PSBcIlxcMFwiICkge1xuXHRcdFx0cmV0dXJuIFwiXFx1RkZGRFwiO1xuXHRcdH1cblxuXHRcdC8vIENvbnRyb2wgY2hhcmFjdGVycyBhbmQgKGRlcGVuZGVudCB1cG9uIHBvc2l0aW9uKSBudW1iZXJzIGdldCBlc2NhcGVkIGFzIGNvZGUgcG9pbnRzXG5cdFx0cmV0dXJuIGNoLnNsaWNlKCAwLCAtMSApICsgXCJcXFxcXCIgKyBjaC5jaGFyQ29kZUF0KCBjaC5sZW5ndGggLSAxICkudG9TdHJpbmcoIDE2ICkgKyBcIiBcIjtcblx0fVxuXG5cdC8vIE90aGVyIHBvdGVudGlhbGx5LXNwZWNpYWwgQVNDSUkgY2hhcmFjdGVycyBnZXQgYmFja3NsYXNoLWVzY2FwZWRcblx0cmV0dXJuIFwiXFxcXFwiICsgY2g7XG59XG5cbmpRdWVyeS5lc2NhcGVTZWxlY3RvciA9IGZ1bmN0aW9uKCBzZWwgKSB7XG5cdHJldHVybiAoIHNlbCArIFwiXCIgKS5yZXBsYWNlKCByY3NzZXNjYXBlLCBmY3NzZXNjYXBlICk7XG59O1xuXG5cblxuXG52YXIgcHJlZmVycmVkRG9jID0gZG9jdW1lbnQsXG5cdHB1c2hOYXRpdmUgPSBwdXNoO1xuXG4oIGZ1bmN0aW9uKCkge1xuXG52YXIgaSxcblx0RXhwcixcblx0b3V0ZXJtb3N0Q29udGV4dCxcblx0c29ydElucHV0LFxuXHRoYXNEdXBsaWNhdGUsXG5cdHB1c2ggPSBwdXNoTmF0aXZlLFxuXG5cdC8vIExvY2FsIGRvY3VtZW50IHZhcnNcblx0ZG9jdW1lbnQsXG5cdGRvY3VtZW50RWxlbWVudCxcblx0ZG9jdW1lbnRJc0hUTUwsXG5cdHJidWdneVFTQSxcblx0bWF0Y2hlcyxcblxuXHQvLyBJbnN0YW5jZS1zcGVjaWZpYyBkYXRhXG5cdGV4cGFuZG8gPSBqUXVlcnkuZXhwYW5kbyxcblx0ZGlycnVucyA9IDAsXG5cdGRvbmUgPSAwLFxuXHRjbGFzc0NhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0dG9rZW5DYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdGNvbXBpbGVyQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRub25uYXRpdmVTZWxlY3RvckNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0c29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIDA7XG5cdH0sXG5cblx0Ym9vbGVhbnMgPSBcImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxcIiArXG5cdFx0XCJsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkXCIsXG5cblx0Ly8gUmVndWxhciBleHByZXNzaW9uc1xuXG5cdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mtc3ludGF4LTMvI2lkZW50LXRva2VuLWRpYWdyYW1cblx0aWRlbnRpZmllciA9IFwiKD86XFxcXFxcXFxbXFxcXGRhLWZBLUZdezEsNn1cIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiP3xcXFxcXFxcXFteXFxcXHJcXFxcblxcXFxmXXxbXFxcXHctXXxbXlxcMC1cXFxceDdmXSkrXCIsXG5cblx0Ly8gQXR0cmlidXRlIHNlbGVjdG9yczogaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9yc1xuXHRhdHRyaWJ1dGVzID0gXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcIiArIHdoaXRlc3BhY2UgK1xuXG5cdFx0Ly8gT3BlcmF0b3IgKGNhcHR1cmUgMilcblx0XHRcIiooWypeJHwhfl0/PSlcIiArIHdoaXRlc3BhY2UgK1xuXG5cdFx0Ly8gXCJBdHRyaWJ1dGUgdmFsdWVzIG11c3QgYmUgQ1NTIGlkZW50aWZpZXJzIFtjYXB0dXJlIDVdIG9yIHN0cmluZ3MgW2NhcHR1cmUgMyBvciBjYXB0dXJlIDRdXCJcblx0XHRcIiooPzonKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCJ8KFwiICsgaWRlbnRpZmllciArIFwiKSl8KVwiICtcblx0XHR3aGl0ZXNwYWNlICsgXCIqXFxcXF1cIixcblxuXHRwc2V1ZG9zID0gXCI6KFwiICsgaWRlbnRpZmllciArIFwiKSg/OlxcXFwoKFwiICtcblxuXHRcdC8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycyBuZWVkaW5nIHRva2VuaXplIGluIHRoZSBwcmVGaWx0ZXIsIHByZWZlciBhcmd1bWVudHM6XG5cdFx0Ly8gMS4gcXVvdGVkIChjYXB0dXJlIDM7IGNhcHR1cmUgNCBvciBjYXB0dXJlIDUpXG5cdFx0XCIoJygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwiKXxcIiArXG5cblx0XHQvLyAyLiBzaW1wbGUgKGNhcHR1cmUgNilcblx0XHRcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpW1xcXFxdXXxcIiArIGF0dHJpYnV0ZXMgKyBcIikqKXxcIiArXG5cblx0XHQvLyAzLiBhbnl0aGluZyBlbHNlIChjYXB0dXJlIDIpXG5cdFx0XCIuKlwiICtcblx0XHRcIilcXFxcKXwpXCIsXG5cblx0Ly8gTGVhZGluZyBhbmQgbm9uLWVzY2FwZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgY2FwdHVyaW5nIHNvbWUgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycyBwcmVjZWRpbmcgdGhlIGxhdHRlclxuXHRyd2hpdGVzcGFjZSA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcIitcIiwgXCJnXCIgKSxcblxuXHRyY29tbWEgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiosXCIgKyB3aGl0ZXNwYWNlICsgXCIqXCIgKSxcblx0cmxlYWRpbmdDb21iaW5hdG9yID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFs+K35dfFwiICsgd2hpdGVzcGFjZSArIFwiKVwiICtcblx0XHR3aGl0ZXNwYWNlICsgXCIqXCIgKSxcblx0cmRlc2NlbmQgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCJ8PlwiICksXG5cblx0cnBzZXVkbyA9IG5ldyBSZWdFeHAoIHBzZXVkb3MgKSxcblx0cmlkZW50aWZpZXIgPSBuZXcgUmVnRXhwKCBcIl5cIiArIGlkZW50aWZpZXIgKyBcIiRcIiApLFxuXG5cdG1hdGNoRXhwciA9IHtcblx0XHRJRDogbmV3IFJlZ0V4cCggXCJeIyhcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdENMQVNTOiBuZXcgUmVnRXhwKCBcIl5cXFxcLihcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFRBRzogbmV3IFJlZ0V4cCggXCJeKFwiICsgaWRlbnRpZmllciArIFwifFsqXSlcIiApLFxuXHRcdEFUVFI6IG5ldyBSZWdFeHAoIFwiXlwiICsgYXR0cmlidXRlcyApLFxuXHRcdFBTRVVETzogbmV3IFJlZ0V4cCggXCJeXCIgKyBwc2V1ZG9zICksXG5cdFx0Q0hJTEQ6IG5ldyBSZWdFeHAoXG5cdFx0XHRcIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcXFwoXCIgK1xuXHRcdFx0XHR3aGl0ZXNwYWNlICsgXCIqKGV2ZW58b2RkfCgoWystXXwpKFxcXFxkKilufClcIiArIHdoaXRlc3BhY2UgKyBcIiooPzooWystXXwpXCIgK1xuXHRcdFx0XHR3aGl0ZXNwYWNlICsgXCIqKFxcXFxkKyl8KSlcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpXCIsIFwiaVwiICksXG5cdFx0Ym9vbDogbmV3IFJlZ0V4cCggXCJeKD86XCIgKyBib29sZWFucyArIFwiKSRcIiwgXCJpXCIgKSxcblxuXHRcdC8vIEZvciB1c2UgaW4gbGlicmFyaWVzIGltcGxlbWVudGluZyAuaXMoKVxuXHRcdC8vIFdlIHVzZSB0aGlzIGZvciBQT1MgbWF0Y2hpbmcgaW4gYHNlbGVjdGBcblx0XHRuZWVkc0NvbnRleHQ6IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcXFwoXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKigoPzotXFxcXGQpP1xcXFxkKilcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpKD89W14tXXwkKVwiLCBcImlcIiApXG5cdH0sXG5cblx0cmlucHV0cyA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJoZWFkZXIgPSAvXmhcXGQkL2ksXG5cblx0Ly8gRWFzaWx5LXBhcnNlYWJsZS9yZXRyaWV2YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzXG5cdHJxdWlja0V4cHIgPSAvXig/OiMoW1xcdy1dKyl8KFxcdyspfFxcLihbXFx3LV0rKSkkLyxcblxuXHRyc2libGluZyA9IC9bK35dLyxcblxuXHQvLyBDU1MgZXNjYXBlc1xuXHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI2VzY2FwZWQtY2hhcmFjdGVyc1xuXHRydW5lc2NhcGUgPSBuZXcgUmVnRXhwKCBcIlxcXFxcXFxcW1xcXFxkYS1mQS1GXXsxLDZ9XCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcIj98XFxcXFxcXFwoW15cXFxcclxcXFxuXFxcXGZdKVwiLCBcImdcIiApLFxuXHRmdW5lc2NhcGUgPSBmdW5jdGlvbiggZXNjYXBlLCBub25IZXggKSB7XG5cdFx0dmFyIGhpZ2ggPSBcIjB4XCIgKyBlc2NhcGUuc2xpY2UoIDEgKSAtIDB4MTAwMDA7XG5cblx0XHRpZiAoIG5vbkhleCApIHtcblxuXHRcdFx0Ly8gU3RyaXAgdGhlIGJhY2tzbGFzaCBwcmVmaXggZnJvbSBhIG5vbi1oZXggZXNjYXBlIHNlcXVlbmNlXG5cdFx0XHRyZXR1cm4gbm9uSGV4O1xuXHRcdH1cblxuXHRcdC8vIFJlcGxhY2UgYSBoZXhhZGVjaW1hbCBlc2NhcGUgc2VxdWVuY2Ugd2l0aCB0aGUgZW5jb2RlZCBVbmljb2RlIGNvZGUgcG9pbnRcblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExK1xuXHRcdC8vIEZvciB2YWx1ZXMgb3V0c2lkZSB0aGUgQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lIChCTVApLCBtYW51YWxseSBjb25zdHJ1Y3QgYVxuXHRcdC8vIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0cmV0dXJuIGhpZ2ggPCAwID9cblx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggKyAweDEwMDAwICkgOlxuXHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCA+PiAxMCB8IDB4RDgwMCwgaGlnaCAmIDB4M0ZGIHwgMHhEQzAwICk7XG5cdH0sXG5cblx0Ly8gVXNlZCBmb3IgaWZyYW1lczsgc2VlIGBzZXREb2N1bWVudGAuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCtcblx0Ly8gUmVtb3ZpbmcgdGhlIGZ1bmN0aW9uIHdyYXBwZXIgY2F1c2VzIGEgXCJQZXJtaXNzaW9uIERlbmllZFwiXG5cdC8vIGVycm9yIGluIElFL0VkZ2UuXG5cdHVubG9hZEhhbmRsZXIgPSBmdW5jdGlvbigpIHtcblx0XHRzZXREb2N1bWVudCgpO1xuXHR9LFxuXG5cdGluRGlzYWJsZWRGaWVsZHNldCA9IGFkZENvbWJpbmF0b3IoXG5cdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZSAmJiBub2RlTmFtZSggZWxlbSwgXCJmaWVsZHNldFwiICk7XG5cdFx0fSxcblx0XHR7IGRpcjogXCJwYXJlbnROb2RlXCIsIG5leHQ6IFwibGVnZW5kXCIgfVxuXHQpO1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gQWNjZXNzaW5nIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgY2FuIHRocm93IHVuZXhwZWN0ZWRseVxuLy8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzkzXG5mdW5jdGlvbiBzYWZlQWN0aXZlRWxlbWVudCgpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblx0fSBjYXRjaCAoIGVyciApIHsgfVxufVxuXG4vLyBPcHRpbWl6ZSBmb3IgcHVzaC5hcHBseSggXywgTm9kZUxpc3QgKVxudHJ5IHtcblx0cHVzaC5hcHBseShcblx0XHQoIGFyciA9IHNsaWNlLmNhbGwoIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzICkgKSxcblx0XHRwcmVmZXJyZWREb2MuY2hpbGROb2Rlc1xuXHQpO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjBcblx0Ly8gRGV0ZWN0IHNpbGVudGx5IGZhaWxpbmcgcHVzaC5hcHBseVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdGFyclsgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMubGVuZ3RoIF0ubm9kZVR5cGU7XG59IGNhdGNoICggZSApIHtcblx0cHVzaCA9IHtcblx0XHRhcHBseTogZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0cHVzaE5hdGl2ZS5hcHBseSggdGFyZ2V0LCBzbGljZS5jYWxsKCBlbHMgKSApO1xuXHRcdH0sXG5cdFx0Y2FsbDogZnVuY3Rpb24oIHRhcmdldCApIHtcblx0XHRcdHB1c2hOYXRpdmUuYXBwbHkoIHRhcmdldCwgc2xpY2UuY2FsbCggYXJndW1lbnRzLCAxICkgKTtcblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIGZpbmQoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgbSwgaSwgZWxlbSwgbmlkLCBtYXRjaCwgZ3JvdXBzLCBuZXdTZWxlY3Rvcixcblx0XHRuZXdDb250ZXh0ID0gY29udGV4dCAmJiBjb250ZXh0Lm93bmVyRG9jdW1lbnQsXG5cblx0XHQvLyBub2RlVHlwZSBkZWZhdWx0cyB0byA5LCBzaW5jZSBjb250ZXh0IGRlZmF1bHRzIHRvIGRvY3VtZW50XG5cdFx0bm9kZVR5cGUgPSBjb250ZXh0ID8gY29udGV4dC5ub2RlVHlwZSA6IDk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGZyb20gY2FsbHMgd2l0aCBpbnZhbGlkIHNlbGVjdG9yIG9yIGNvbnRleHRcblx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgfHwgIXNlbGVjdG9yIHx8XG5cdFx0bm9kZVR5cGUgIT09IDEgJiYgbm9kZVR5cGUgIT09IDkgJiYgbm9kZVR5cGUgIT09IDExICkge1xuXG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH1cblxuXHQvLyBUcnkgdG8gc2hvcnRjdXQgZmluZCBvcGVyYXRpb25zIChhcyBvcHBvc2VkIHRvIGZpbHRlcnMpIGluIEhUTUwgZG9jdW1lbnRzXG5cdGlmICggIXNlZWQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0XHRjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDtcblxuXHRcdGlmICggZG9jdW1lbnRJc0hUTUwgKSB7XG5cblx0XHRcdC8vIElmIHRoZSBzZWxlY3RvciBpcyBzdWZmaWNpZW50bHkgc2ltcGxlLCB0cnkgdXNpbmcgYSBcImdldCpCeSpcIiBET00gbWV0aG9kXG5cdFx0XHQvLyAoZXhjZXB0aW5nIERvY3VtZW50RnJhZ21lbnQgY29udGV4dCwgd2hlcmUgdGhlIG1ldGhvZHMgZG9uJ3QgZXhpc3QpXG5cdFx0XHRpZiAoIG5vZGVUeXBlICE9PSAxMSAmJiAoIG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApICkgKSB7XG5cblx0XHRcdFx0Ly8gSUQgc2VsZWN0b3Jcblx0XHRcdFx0aWYgKCAoIG0gPSBtYXRjaFsgMSBdICkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb2N1bWVudCBjb250ZXh0XG5cdFx0XHRcdFx0aWYgKCBub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdGlmICggKCBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdFx0aWYgKCBlbGVtLmlkID09PSBtICkge1xuXHRcdFx0XHRcdFx0XHRcdHB1c2guY2FsbCggcmVzdWx0cywgZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEVsZW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0aWYgKCBuZXdDb250ZXh0ICYmICggZWxlbSA9IG5ld0NvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSApICYmXG5cdFx0XHRcdFx0XHRcdGZpbmQuY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKSAmJlxuXHRcdFx0XHRcdFx0XHRlbGVtLmlkID09PSBtICkge1xuXG5cdFx0XHRcdFx0XHRcdHB1c2guY2FsbCggcmVzdWx0cywgZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHlwZSBzZWxlY3RvclxuXHRcdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFsgMiBdICkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHNlbGVjdG9yICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0XHQvLyBDbGFzcyBzZWxlY3RvclxuXHRcdFx0XHR9IGVsc2UgaWYgKCAoIG0gPSBtYXRjaFsgMyBdICkgJiYgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGFrZSBhZHZhbnRhZ2Ugb2YgcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0aWYgKCAhbm9ubmF0aXZlU2VsZWN0b3JDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdICYmXG5cdFx0XHRcdCggIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIHNlbGVjdG9yICkgKSApIHtcblxuXHRcdFx0XHRuZXdTZWxlY3RvciA9IHNlbGVjdG9yO1xuXHRcdFx0XHRuZXdDb250ZXh0ID0gY29udGV4dDtcblxuXHRcdFx0XHQvLyBxU0EgY29uc2lkZXJzIGVsZW1lbnRzIG91dHNpZGUgYSBzY29waW5nIHJvb3Qgd2hlbiBldmFsdWF0aW5nIGNoaWxkIG9yXG5cdFx0XHRcdC8vIGRlc2NlbmRhbnQgY29tYmluYXRvcnMsIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnQuXG5cdFx0XHRcdC8vIEluIHN1Y2ggY2FzZXMsIHdlIHdvcmsgYXJvdW5kIHRoZSBiZWhhdmlvciBieSBwcmVmaXhpbmcgZXZlcnkgc2VsZWN0b3IgaW4gdGhlXG5cdFx0XHRcdC8vIGxpc3Qgd2l0aCBhbiBJRCBzZWxlY3RvciByZWZlcmVuY2luZyB0aGUgc2NvcGUgY29udGV4dC5cblx0XHRcdFx0Ly8gVGhlIHRlY2huaXF1ZSBoYXMgdG8gYmUgdXNlZCBhcyB3ZWxsIHdoZW4gYSBsZWFkaW5nIGNvbWJpbmF0b3IgaXMgdXNlZFxuXHRcdFx0XHQvLyBhcyBzdWNoIHNlbGVjdG9ycyBhcmUgbm90IHJlY29nbml6ZWQgYnkgcXVlcnlTZWxlY3RvckFsbC5cblx0XHRcdFx0Ly8gVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQgZm9yIHRoaXMgdGVjaG5pcXVlLlxuXHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0KCByZGVzY2VuZC50ZXN0KCBzZWxlY3RvciApIHx8IHJsZWFkaW5nQ29tYmluYXRvci50ZXN0KCBzZWxlY3RvciApICkgKSB7XG5cblx0XHRcdFx0XHQvLyBFeHBhbmQgY29udGV4dCBmb3Igc2libGluZyBzZWxlY3RvcnNcblx0XHRcdFx0XHRuZXdDb250ZXh0ID0gcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHxcblx0XHRcdFx0XHRcdGNvbnRleHQ7XG5cblx0XHRcdFx0XHQvLyBXZSBjYW4gdXNlIDpzY29wZSBpbnN0ZWFkIG9mIHRoZSBJRCBoYWNrIGlmIHRoZSBicm93c2VyXG5cdFx0XHRcdFx0Ly8gc3VwcG9ydHMgaXQgJiBpZiB3ZSdyZSBub3QgY2hhbmdpbmcgdGhlIGNvbnRleHQuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlblxuXHRcdFx0XHRcdC8vIHN0cmljdC1jb21wYXJpbmcgdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgIT0gY29udGV4dCB8fCAhc3VwcG9ydC5zY29wZSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2FwdHVyZSB0aGUgY29udGV4dCBJRCwgc2V0dGluZyBpdCBmaXJzdCBpZiBuZWNlc3Nhcnlcblx0XHRcdFx0XHRcdGlmICggKCBuaWQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSggXCJpZFwiICkgKSApIHtcblx0XHRcdFx0XHRcdFx0bmlkID0galF1ZXJ5LmVzY2FwZVNlbGVjdG9yKCBuaWQgKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHQuc2V0QXR0cmlidXRlKCBcImlkXCIsICggbmlkID0gZXhwYW5kbyApICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJlZml4IGV2ZXJ5IHNlbGVjdG9yIGluIHRoZSBsaXN0XG5cdFx0XHRcdFx0Z3JvdXBzID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0XHRcdFx0aSA9IGdyb3Vwcy5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRncm91cHNbIGkgXSA9ICggbmlkID8gXCIjXCIgKyBuaWQgOiBcIjpzY29wZVwiICkgKyBcIiBcIiArXG5cdFx0XHRcdFx0XHRcdHRvU2VsZWN0b3IoIGdyb3Vwc1sgaSBdICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG5ld1NlbGVjdG9yID0gZ3JvdXBzLmpvaW4oIFwiLFwiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsXG5cdFx0XHRcdFx0XHRuZXdDb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIG5ld1NlbGVjdG9yIClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHR9IGNhdGNoICggcXNhRXJyb3IgKSB7XG5cdFx0XHRcdFx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSggc2VsZWN0b3IsIHRydWUgKTtcblx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRpZiAoIG5pZCA9PT0gZXhwYW5kbyApIHtcblx0XHRcdFx0XHRcdGNvbnRleHQucmVtb3ZlQXR0cmlidXRlKCBcImlkXCIgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBbGwgb3RoZXJzXG5cdHJldHVybiBzZWxlY3QoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltQ1NTLCBcIiQxXCIgKSwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApO1xufVxuXG4vKipcbiAqIENyZWF0ZSBrZXktdmFsdWUgY2FjaGVzIG9mIGxpbWl0ZWQgc2l6ZVxuICogQHJldHVybnMge2Z1bmN0aW9uKHN0cmluZywgb2JqZWN0KX0gUmV0dXJucyB0aGUgT2JqZWN0IGRhdGEgYWZ0ZXIgc3RvcmluZyBpdCBvbiBpdHNlbGYgd2l0aFxuICpcdHByb3BlcnR5IG5hbWUgdGhlIChzcGFjZS1zdWZmaXhlZCkgc3RyaW5nIGFuZCAoaWYgdGhlIGNhY2hlIGlzIGxhcmdlciB0aGFuIEV4cHIuY2FjaGVMZW5ndGgpXG4gKlx0ZGVsZXRpbmcgdGhlIG9sZGVzdCBlbnRyeVxuICovXG5mdW5jdGlvbiBjcmVhdGVDYWNoZSgpIHtcblx0dmFyIGtleXMgPSBbXTtcblxuXHRmdW5jdGlvbiBjYWNoZSgga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIFVzZSAoa2V5ICsgXCIgXCIpIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBwcm90b3R5cGUgcHJvcGVydGllc1xuXHRcdC8vIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvaXNzdWVzLzE1Nylcblx0XHRpZiAoIGtleXMucHVzaCgga2V5ICsgXCIgXCIgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7XG5cblx0XHRcdC8vIE9ubHkga2VlcCB0aGUgbW9zdCByZWNlbnQgZW50cmllc1xuXHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlzLnNoaWZ0KCkgXTtcblx0XHR9XG5cdFx0cmV0dXJuICggY2FjaGVbIGtleSArIFwiIFwiIF0gPSB2YWx1ZSApO1xuXHR9XG5cdHJldHVybiBjYWNoZTtcbn1cblxuLyoqXG4gKiBNYXJrIGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IGpRdWVyeSBzZWxlY3RvciBtb2R1bGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBtYXJrXG4gKi9cbmZ1bmN0aW9uIG1hcmtGdW5jdGlvbiggZm4gKSB7XG5cdGZuWyBleHBhbmRvIF0gPSB0cnVlO1xuXHRyZXR1cm4gZm47XG59XG5cbi8qKlxuICogU3VwcG9ydCB0ZXN0aW5nIHVzaW5nIGFuIGVsZW1lbnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFBhc3NlZCB0aGUgY3JlYXRlZCBlbGVtZW50IGFuZCByZXR1cm5zIGEgYm9vbGVhbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0KCBmbiApIHtcblx0dmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJmaWVsZHNldFwiICk7XG5cblx0dHJ5IHtcblx0XHRyZXR1cm4gISFmbiggZWwgKTtcblx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGZpbmFsbHkge1xuXG5cdFx0Ly8gUmVtb3ZlIGZyb20gaXRzIHBhcmVudCBieSBkZWZhdWx0XG5cdFx0aWYgKCBlbC5wYXJlbnROb2RlICkge1xuXHRcdFx0ZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWwgKTtcblx0XHR9XG5cblx0XHQvLyByZWxlYXNlIG1lbW9yeSBpbiBJRVxuXHRcdGVsID0gbnVsbDtcblx0fVxufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgaW5wdXQgdHlwZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0UHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBidXR0b25zXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVCdXR0b25Qc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gKCBub2RlTmFtZSggZWxlbSwgXCJpbnB1dFwiICkgfHwgbm9kZU5hbWUoIGVsZW0sIFwiYnV0dG9uXCIgKSApICYmXG5cdFx0XHRlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciA6ZW5hYmxlZC86ZGlzYWJsZWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZGlzYWJsZWQgdHJ1ZSBmb3IgOmRpc2FibGVkOyBmYWxzZSBmb3IgOmVuYWJsZWRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGRpc2FibGVkICkge1xuXG5cdC8vIEtub3duIDpkaXNhYmxlZCBmYWxzZSBwb3NpdGl2ZXM6IGZpZWxkc2V0W2Rpc2FibGVkXSA+IGxlZ2VuZDpudGgtb2YtdHlwZShuKzIpIDpjYW4tZGlzYWJsZVxuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBPbmx5IGNlcnRhaW4gZWxlbWVudHMgY2FuIG1hdGNoIDplbmFibGVkIG9yIDpkaXNhYmxlZFxuXHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWVuYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1kaXNhYmxlZFxuXHRcdGlmICggXCJmb3JtXCIgaW4gZWxlbSApIHtcblxuXHRcdFx0Ly8gQ2hlY2sgZm9yIGluaGVyaXRlZCBkaXNhYmxlZG5lc3Mgb24gcmVsZXZhbnQgbm9uLWRpc2FibGVkIGVsZW1lbnRzOlxuXHRcdFx0Ly8gKiBsaXN0ZWQgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgZmllbGRzZXRcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjYXRlZ29yeS1saXN0ZWRcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LWZlLWRpc2FibGVkXG5cdFx0XHQvLyAqIG9wdGlvbiBlbGVtZW50cyBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1vcHRpb24tZGlzYWJsZWRcblx0XHRcdC8vIEFsbCBzdWNoIGVsZW1lbnRzIGhhdmUgYSBcImZvcm1cIiBwcm9wZXJ0eS5cblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICYmIGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdC8vIE9wdGlvbiBlbGVtZW50cyBkZWZlciB0byBhIHBhcmVudCBvcHRncm91cCBpZiBwcmVzZW50XG5cdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0gKSB7XG5cdFx0XHRcdFx0aWYgKCBcImxhYmVsXCIgaW4gZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0ucGFyZW50Tm9kZS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA2IC0gMTErXG5cdFx0XHRcdC8vIFVzZSB0aGUgaXNEaXNhYmxlZCBzaG9ydGN1dCBwcm9wZXJ0eSB0byBjaGVjayBmb3IgZGlzYWJsZWQgZmllbGRzZXQgYW5jZXN0b3JzXG5cdFx0XHRcdHJldHVybiBlbGVtLmlzRGlzYWJsZWQgPT09IGRpc2FibGVkIHx8XG5cblx0XHRcdFx0XHQvLyBXaGVyZSB0aGVyZSBpcyBubyBpc0Rpc2FibGVkLCBjaGVjayBtYW51YWxseVxuXHRcdFx0XHRcdGVsZW0uaXNEaXNhYmxlZCAhPT0gIWRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRpbkRpc2FibGVkRmllbGRzZXQoIGVsZW0gKSA9PT0gZGlzYWJsZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblxuXHRcdC8vIFRyeSB0byB3aW5ub3cgb3V0IGVsZW1lbnRzIHRoYXQgY2FuJ3QgYmUgZGlzYWJsZWQgYmVmb3JlIHRydXN0aW5nIHRoZSBkaXNhYmxlZCBwcm9wZXJ0eS5cblx0XHQvLyBTb21lIHZpY3RpbXMgZ2V0IGNhdWdodCBpbiBvdXIgbmV0IChsYWJlbCwgbGVnZW5kLCBtZW51LCB0cmFjayksIGJ1dCBpdCBzaG91bGRuJ3Rcblx0XHQvLyBldmVuIGV4aXN0IG9uIHRoZW0sIGxldCBhbG9uZSBoYXZlIGEgYm9vbGVhbiB2YWx1ZS5cblx0XHR9IGVsc2UgaWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHR9XG5cblx0XHQvLyBSZW1haW5pbmcgZWxlbWVudHMgYXJlIG5laXRoZXIgOmVuYWJsZWQgbm9yIDpkaXNhYmxlZFxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIHBvc2l0aW9uYWxzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICovXG5mdW5jdGlvbiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmbiApIHtcblx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGFyZ3VtZW50ICkge1xuXHRcdGFyZ3VtZW50ID0gK2FyZ3VtZW50O1xuXHRcdHJldHVybiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0dmFyIGosXG5cdFx0XHRcdG1hdGNoSW5kZXhlcyA9IGZuKCBbXSwgc2VlZC5sZW5ndGgsIGFyZ3VtZW50ICksXG5cdFx0XHRcdGkgPSBtYXRjaEluZGV4ZXMubGVuZ3RoO1xuXG5cdFx0XHQvLyBNYXRjaCBlbGVtZW50cyBmb3VuZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4ZXNcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoIHNlZWRbICggaiA9IG1hdGNoSW5kZXhlc1sgaSBdICkgXSApIHtcblx0XHRcdFx0XHRzZWVkWyBqIF0gPSAhKCBtYXRjaGVzWyBqIF0gPSBzZWVkWyBqIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSApO1xufVxuXG4vKipcbiAqIENoZWNrcyBhIG5vZGUgZm9yIHZhbGlkaXR5IGFzIGEgalF1ZXJ5IHNlbGVjdG9yIGNvbnRleHRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3Q9fSBjb250ZXh0XG4gKiBAcmV0dXJucyB7RWxlbWVudHxPYmplY3R8Qm9vbGVhbn0gVGhlIGlucHV0IG5vZGUgaWYgYWNjZXB0YWJsZSwgb3RoZXJ3aXNlIGEgZmFsc3kgdmFsdWVcbiAqL1xuZnVuY3Rpb24gdGVzdENvbnRleHQoIGNvbnRleHQgKSB7XG5cdHJldHVybiBjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnRleHQ7XG59XG5cbi8qKlxuICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxlcyBvbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBbbm9kZV0gQW4gZWxlbWVudCBvciBkb2N1bWVudCBvYmplY3QgdG8gdXNlIHRvIHNldCB0aGUgZG9jdW1lbnRcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqL1xuZnVuY3Rpb24gc2V0RG9jdW1lbnQoIG5vZGUgKSB7XG5cdHZhciBzdWJXaW5kb3csXG5cdFx0ZG9jID0gbm9kZSA/IG5vZGUub3duZXJEb2N1bWVudCB8fCBub2RlIDogcHJlZmVycmVkRG9jO1xuXG5cdC8vIFJldHVybiBlYXJseSBpZiBkb2MgaXMgaW52YWxpZCBvciBhbHJlYWR5IHNlbGVjdGVkXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggZG9jID09IGRvY3VtZW50IHx8IGRvYy5ub2RlVHlwZSAhPT0gOSB8fCAhZG9jLmRvY3VtZW50RWxlbWVudCApIHtcblx0XHRyZXR1cm4gZG9jdW1lbnQ7XG5cdH1cblxuXHQvLyBVcGRhdGUgZ2xvYmFsIHZhcmlhYmxlc1xuXHRkb2N1bWVudCA9IGRvYztcblx0ZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXHRkb2N1bWVudElzSFRNTCA9ICFqUXVlcnkuaXNYTUxEb2MoIGRvY3VtZW50ICk7XG5cblx0Ly8gU3VwcG9ydDogaU9TIDcgb25seSwgSUUgOSAtIDExK1xuXHQvLyBPbGRlciBicm93c2VycyBkaWRuJ3Qgc3VwcG9ydCB1bnByZWZpeGVkIGBtYXRjaGVzYC5cblx0bWF0Y2hlcyA9IGRvY3VtZW50RWxlbWVudC5tYXRjaGVzIHx8XG5cdFx0ZG9jdW1lbnRFbGVtZW50LndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY3VtZW50RWxlbWVudC5tc01hdGNoZXNTZWxlY3RvcjtcblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrXG5cdC8vIEFjY2Vzc2luZyBpZnJhbWUgZG9jdW1lbnRzIGFmdGVyIHVubG9hZCB0aHJvd3MgXCJwZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yc1xuXHQvLyAoc2VlIHRyYWMtMTM5MzYpLlxuXHQvLyBMaW1pdCB0aGUgZml4IHRvIElFICYgRWRnZSBMZWdhY3k7IGRlc3BpdGUgRWRnZSAxNSsgaW1wbGVtZW50aW5nIGBtYXRjaGVzYCxcblx0Ly8gYWxsIElFIDkrIGFuZCBFZGdlIExlZ2FjeSB2ZXJzaW9ucyBpbXBsZW1lbnQgYG1zTWF0Y2hlc1NlbGVjdG9yYCBhcyB3ZWxsLlxuXHRpZiAoIGRvY3VtZW50RWxlbWVudC5tc01hdGNoZXNTZWxlY3RvciAmJlxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRwcmVmZXJyZWREb2MgIT0gZG9jdW1lbnQgJiZcblx0XHQoIHN1YldpbmRvdyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3ICkgJiYgc3ViV2luZG93LnRvcCAhPT0gc3ViV2luZG93ICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4K1xuXHRcdHN1YldpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcInVubG9hZFwiLCB1bmxvYWRIYW5kbGVyICk7XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA8MTBcblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudEJ5SWQgcmV0dXJucyBlbGVtZW50cyBieSBuYW1lXG5cdC8vIFRoZSBicm9rZW4gZ2V0RWxlbWVudEJ5SWQgbWV0aG9kcyBkb24ndCBwaWNrIHVwIHByb2dyYW1tYXRpY2FsbHktc2V0IG5hbWVzLFxuXHQvLyBzbyB1c2UgYSByb3VuZGFib3V0IGdldEVsZW1lbnRzQnlOYW1lIHRlc3Rcblx0c3VwcG9ydC5nZXRCeUlkID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBlbCApLmlkID0galF1ZXJ5LmV4cGFuZG87XG5cdFx0cmV0dXJuICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSB8fFxuXHRcdFx0IWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBqUXVlcnkuZXhwYW5kbyApLmxlbmd0aDtcblx0fSApO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHQvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3Jcblx0Ly8gb24gYSBkaXNjb25uZWN0ZWQgbm9kZS5cblx0c3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdHJldHVybiBtYXRjaGVzLmNhbGwoIGVsLCBcIipcIiApO1xuXHR9ICk7XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4K1xuXHQvLyBJRS9FZGdlIGRvbid0IHN1cHBvcnQgdGhlIDpzY29wZSBwc2V1ZG8tY2xhc3MuXG5cdHN1cHBvcnQuc2NvcGUgPSBhc3NlcnQoIGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpzY29wZVwiICk7XG5cdH0gKTtcblxuXHQvLyBTdXBwb3J0OiBDaHJvbWUgMTA1IC0gMTExIG9ubHksIFNhZmFyaSAxNS40IC0gMTYuMyBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB0aGUgYDpoYXMoKWAgYXJndW1lbnQgaXMgcGFyc2VkIHVuZm9yZ2l2aW5nbHkuXG5cdC8vIFdlIGluY2x1ZGUgYCpgIGluIHRoZSB0ZXN0IHRvIGRldGVjdCBidWdneSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhcmVcblx0Ly8gX3NlbGVjdGl2ZWx5XyBmb3JnaXZpbmcgKHNwZWNpZmljYWxseSB3aGVuIHRoZSBsaXN0IGluY2x1ZGVzIGF0IGxlYXN0XG5cdC8vIG9uZSB2YWxpZCBzZWxlY3RvcikuXG5cdC8vIE5vdGUgdGhhdCB3ZSB0cmVhdCBjb21wbGV0ZSBsYWNrIG9mIHN1cHBvcnQgZm9yIGA6aGFzKClgIGFzIGlmIGl0IHdlcmVcblx0Ly8gc3BlYy1jb21wbGlhbnQgc3VwcG9ydCwgd2hpY2ggaXMgZmluZSBiZWNhdXNlIHVzZSBvZiBgOmhhcygpYCBpbiBzdWNoXG5cdC8vIGVudmlyb25tZW50cyB3aWxsIGZhaWwgaW4gdGhlIHFTQSBwYXRoIGFuZCBmYWxsIGJhY2sgdG8galF1ZXJ5IHRyYXZlcnNhbFxuXHQvLyBhbnl3YXkuXG5cdHN1cHBvcnQuY3NzSGFzID0gYXNzZXJ0KCBmdW5jdGlvbigpIHtcblx0XHR0cnkge1xuXHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvciggXCI6aGFzKCosOmpxZmFrZSlcIiApO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9ICk7XG5cblx0Ly8gSUQgZmlsdGVyIGFuZCBmaW5kXG5cdGlmICggc3VwcG9ydC5nZXRCeUlkICkge1xuXHRcdEV4cHIuZmlsdGVyLklEID0gZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJpZFwiICkgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblx0XHRFeHByLmZpbmQuSUQgPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cdFx0XHRcdHJldHVybiBlbGVtID8gWyBlbGVtIF0gOiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdEV4cHIuZmlsdGVyLklEID0gIGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIFwiaWRcIiApO1xuXHRcdFx0XHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA2IC0gNyBvbmx5XG5cdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgaXMgbm90IHJlbGlhYmxlIGFzIGEgZmluZCBzaG9ydGN1dFxuXHRcdEV4cHIuZmluZC5JRCA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBub2RlLCBpLCBlbGVtcyxcblx0XHRcdFx0XHRlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHQvLyBWZXJpZnkgdGhlIGlkIGF0dHJpYnV0ZVxuXHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBGYWxsIGJhY2sgb24gZ2V0RWxlbWVudHNCeU5hbWVcblx0XHRcdFx0XHRlbGVtcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUoIGlkICk7XG5cdFx0XHRcdFx0aSA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gWyBlbGVtIF07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvLyBUYWdcblx0RXhwci5maW5kLlRBRyA9IGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcblxuXHRcdC8vIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgZG9uJ3QgaGF2ZSBnRUJUTlxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgKTtcblx0XHR9XG5cdH07XG5cblx0Ly8gQ2xhc3Ncblx0RXhwci5maW5kLkNMQVNTID0gZnVuY3Rpb24oIGNsYXNzTmFtZSwgY29udGV4dCApIHtcblx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBjbGFzc05hbWUgKTtcblx0XHR9XG5cdH07XG5cblx0LyogUVNBL21hdGNoZXNTZWxlY3RvclxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gUVNBIGFuZCBtYXRjaGVzU2VsZWN0b3Igc3VwcG9ydFxuXG5cdHJidWdneVFTQSA9IFtdO1xuXG5cdC8vIEJ1aWxkIFFTQSByZWdleFxuXHQvLyBSZWdleCBzdHJhdGVneSBhZG9wdGVkIGZyb20gRGllZ28gUGVyaW5pXG5cdGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXG5cdFx0dmFyIGlucHV0O1xuXG5cdFx0ZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBlbCApLmlubmVySFRNTCA9XG5cdFx0XHRcIjxhIGlkPSdcIiArIGV4cGFuZG8gKyBcIicgaHJlZj0nJyBkaXNhYmxlZD0nZGlzYWJsZWQnPjwvYT5cIiArXG5cdFx0XHRcIjxzZWxlY3QgaWQ9J1wiICsgZXhwYW5kbyArIFwiLVxcclxcXFwnIGRpc2FibGVkPSdkaXNhYmxlZCc+XCIgK1xuXHRcdFx0XCI8b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PlwiO1xuXG5cdFx0Ly8gU3VwcG9ydDogaU9TIDw9NyAtIDggb25seVxuXHRcdC8vIEJvb2xlYW4gYXR0cmlidXRlcyBhbmQgXCJ2YWx1ZVwiIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHkgaW4gc29tZSBYTUwgZG9jdW1lbnRzXG5cdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJbc2VsZWN0ZWRdXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKig/OnZhbHVlfFwiICsgYm9vbGVhbnMgKyBcIilcIiApO1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IGlPUyA8PTcgLSA4IG9ubHlcblx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltpZH49XCIgKyBleHBhbmRvICsgXCItXVwiICkubGVuZ3RoICkge1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwifj1cIiApO1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IGlPUyA4IG9ubHlcblx0XHQvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2ODUxXG5cdFx0Ly8gSW4tcGFnZSBgc2VsZWN0b3IjaWQgc2libGluZy1jb21iaW5hdG9yIHNlbGVjdG9yYCBmYWlsc1xuXHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiYSNcIiArIGV4cGFuZG8gKyBcIisqXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCIuIy4rWyt+XVwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MTA1KywgRmlyZWZveCA8PTEwNCssIFNhZmFyaSA8PTE1LjQrXG5cdFx0Ly8gSW4gc29tZSBvZiB0aGUgZG9jdW1lbnQga2luZHMsIHRoZXNlIHNlbGVjdG9ycyB3b3VsZG4ndCB3b3JrIG5hdGl2ZWx5LlxuXHRcdC8vIFRoaXMgaXMgcHJvYmFibHkgT0sgYnV0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3ZSB3YW50IHRvIG1haW50YWluXG5cdFx0Ly8gaGFuZGxpbmcgdGhlbSB0aHJvdWdoIGpRdWVyeSB0cmF2ZXJzYWwgaW4galF1ZXJ5IDMueC5cblx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpjaGVja2VkXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6Y2hlY2tlZFwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogV2luZG93cyA4IE5hdGl2ZSBBcHBzXG5cdFx0Ly8gVGhlIHR5cGUgYW5kIG5hbWUgYXR0cmlidXRlcyBhcmUgcmVzdHJpY3RlZCBkdXJpbmcgLmlubmVySFRNTCBhc3NpZ25tZW50XG5cdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcImhpZGRlblwiICk7XG5cdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICkuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJEXCIgKTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMStcblx0XHQvLyBJRSdzIDpkaXNhYmxlZCBzZWxlY3RvciBkb2VzIG5vdCBwaWNrIHVwIHRoZSBjaGlsZHJlbiBvZiBkaXNhYmxlZCBmaWVsZHNldHNcblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0xMDUrLCBGaXJlZm94IDw9MTA0KywgU2FmYXJpIDw9MTUuNCtcblx0XHQvLyBJbiBzb21lIG9mIHRoZSBkb2N1bWVudCBraW5kcywgdGhlc2Ugc2VsZWN0b3JzIHdvdWxkbid0IHdvcmsgbmF0aXZlbHkuXG5cdFx0Ly8gVGhpcyBpcyBwcm9iYWJseSBPSyBidXQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdlIHdhbnQgdG8gbWFpbnRhaW5cblx0XHQvLyBoYW5kbGluZyB0aGVtIHRocm91Z2ggalF1ZXJ5IHRyYXZlcnNhbCBpbiBqUXVlcnkgMy54LlxuXHRcdGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggZWwgKS5kaXNhYmxlZCA9IHRydWU7XG5cdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpkaXNhYmxlZFwiICkubGVuZ3RoICE9PSAyICkge1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdC8vIElFIDExL0VkZ2UgZG9uJ3QgZmluZCBlbGVtZW50cyBvbiBhIGBbbmFtZT0nJ11gIHF1ZXJ5IGluIHNvbWUgY2FzZXMuXG5cdFx0Ly8gQWRkaW5nIGEgdGVtcG9yYXJ5IGF0dHJpYnV0ZSB0byB0aGUgZG9jdW1lbnQgYmVmb3JlIHRoZSBzZWxlY3Rpb24gd29ya3Ncblx0XHQvLyBhcm91bmQgdGhlIGlzc3VlLlxuXHRcdC8vIEludGVyZXN0aW5nbHksIElFIDEwICYgb2xkZXIgZG9uJ3Qgc2VlbSB0byBoYXZlIHRoZSBpc3N1ZS5cblx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRcdGlucHV0LnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwiXCIgKTtcblx0XHRlbC5hcHBlbmRDaGlsZCggaW5wdXQgKTtcblx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltuYW1lPScnXVwiICkubGVuZ3RoICkge1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIipuYW1lXCIgKyB3aGl0ZXNwYWNlICsgXCIqPVwiICtcblx0XHRcdFx0d2hpdGVzcGFjZSArIFwiKig/OicnfFxcXCJcXFwiKVwiICk7XG5cdFx0fVxuXHR9ICk7XG5cblx0aWYgKCAhc3VwcG9ydC5jc3NIYXMgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgMTA1IC0gMTEwKywgU2FmYXJpIDE1LjQgLSAxNi4zK1xuXHRcdC8vIE91ciByZWd1bGFyIGB0cnktY2F0Y2hgIG1lY2hhbmlzbSBmYWlscyB0byBkZXRlY3QgbmF0aXZlbHktdW5zdXBwb3J0ZWRcblx0XHQvLyBwc2V1ZG8tY2xhc3NlcyBpbnNpZGUgYDpoYXMoKWAgKHN1Y2ggYXMgYDpoYXMoOmNvbnRhaW5zKFwiRm9vXCIpKWApXG5cdFx0Ly8gaW4gYnJvd3NlcnMgdGhhdCBwYXJzZSB0aGUgYDpoYXMoKWAgYXJndW1lbnQgYXMgYSBmb3JnaXZpbmcgc2VsZWN0b3IgbGlzdC5cblx0XHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvc2VsZWN0b3JzLyNyZWxhdGlvbmFsIG5vdyByZXF1aXJlcyB0aGUgYXJndW1lbnRcblx0XHQvLyB0byBiZSBwYXJzZWQgdW5mb3JnaXZpbmdseSwgYnV0IGJyb3dzZXJzIGhhdmUgbm90IHlldCBmdWxseSBhZGp1c3RlZC5cblx0XHRyYnVnZ3lRU0EucHVzaCggXCI6aGFzXCIgKTtcblx0fVxuXG5cdHJidWdneVFTQSA9IHJidWdneVFTQS5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5UVNBLmpvaW4oIFwifFwiICkgKTtcblxuXHQvKiBTb3J0aW5nXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBEb2N1bWVudCBvcmRlciBzb3J0aW5nXG5cdHNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkge1xuXG5cdFx0Ly8gRmxhZyBmb3IgZHVwbGljYXRlIHJlbW92YWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Ly8gU29ydCBvbiBtZXRob2QgZXhpc3RlbmNlIGlmIG9ubHkgb25lIGlucHV0IGhhcyBjb21wYXJlRG9jdW1lbnRQb3NpdGlvblxuXHRcdHZhciBjb21wYXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtcblx0XHRpZiAoIGNvbXBhcmUgKSB7XG5cdFx0XHRyZXR1cm4gY29tcGFyZTtcblx0XHR9XG5cblx0XHQvLyBDYWxjdWxhdGUgcG9zaXRpb24gaWYgYm90aCBpbnB1dHMgYmVsb25nIHRvIHRoZSBzYW1lIGRvY3VtZW50XG5cdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRjb21wYXJlID0gKCBhLm93bmVyRG9jdW1lbnQgfHwgYSApID09ICggYi5vd25lckRvY3VtZW50IHx8IGIgKSA/XG5cdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugd2Uga25vdyB0aGV5IGFyZSBkaXNjb25uZWN0ZWRcblx0XHRcdDE7XG5cblx0XHQvLyBEaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRpZiAoIGNvbXBhcmUgJiAxIHx8XG5cdFx0XHQoICFzdXBwb3J0LnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBhICkgPT09IGNvbXBhcmUgKSApIHtcblxuXHRcdFx0Ly8gQ2hvb3NlIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgcmVsYXRlZCB0byBvdXIgcHJlZmVycmVkIGRvY3VtZW50XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0aWYgKCBhID09PSBkb2N1bWVudCB8fCBhLm93bmVyRG9jdW1lbnQgPT0gcHJlZmVycmVkRG9jICYmXG5cdFx0XHRcdGZpbmQuY29udGFpbnMoIHByZWZlcnJlZERvYywgYSApICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRpZiAoIGIgPT09IGRvY3VtZW50IHx8IGIub3duZXJEb2N1bWVudCA9PSBwcmVmZXJyZWREb2MgJiZcblx0XHRcdFx0ZmluZC5jb250YWlucyggcHJlZmVycmVkRG9jLCBiICkgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWludGFpbiBvcmlnaW5hbCBvcmRlclxuXHRcdFx0cmV0dXJuIHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZi5jYWxsKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YuY2FsbCggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbXBhcmUgJiA0ID8gLTEgOiAxO1xuXHR9O1xuXG5cdHJldHVybiBkb2N1bWVudDtcbn1cblxuZmluZC5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1lbnRzICkge1xuXHRyZXR1cm4gZmluZCggZXhwciwgbnVsbCwgbnVsbCwgZWxlbWVudHMgKTtcbn07XG5cbmZpbmQubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4cHIgKSB7XG5cdHNldERvY3VtZW50KCBlbGVtICk7XG5cblx0aWYgKCBkb2N1bWVudElzSFRNTCAmJlxuXHRcdCFub25uYXRpdmVTZWxlY3RvckNhY2hlWyBleHByICsgXCIgXCIgXSAmJlxuXHRcdCggIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIGV4cHIgKSApICkge1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhciByZXQgPSBtYXRjaGVzLmNhbGwoIGVsZW0sIGV4cHIgKTtcblxuXHRcdFx0Ly8gSUUgOSdzIG1hdGNoZXNTZWxlY3RvciByZXR1cm5zIGZhbHNlIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuXHRcdFx0aWYgKCByZXQgfHwgc3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCB8fFxuXG5cdFx0XHRcdFx0Ly8gQXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnRcblx0XHRcdFx0XHQvLyBmcmFnbWVudCBpbiBJRSA5XG5cdFx0XHRcdFx0ZWxlbS5kb2N1bWVudCAmJiBlbGVtLmRvY3VtZW50Lm5vZGVUeXBlICE9PSAxMSApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblx0XHR9IGNhdGNoICggZSApIHtcblx0XHRcdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUoIGV4cHIsIHRydWUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZmluZCggZXhwciwgZG9jdW1lbnQsIG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDtcbn07XG5cbmZpbmQuY29udGFpbnMgPSBmdW5jdGlvbiggY29udGV4dCwgZWxlbSApIHtcblxuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCAoIGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0ICkgIT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0fVxuXHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICk7XG59O1xuXG5cbmZpbmQuYXR0ciA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHR9XG5cblx0dmFyIGZuID0gRXhwci5hdHRySGFuZGxlWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSxcblxuXHRcdC8vIERvbid0IGdldCBmb29sZWQgYnkgT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzIChzZWUgdHJhYy0xMzgwNylcblx0XHR2YWwgPSBmbiAmJiBoYXNPd24uY2FsbCggRXhwci5hdHRySGFuZGxlLCBuYW1lLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRmbiggZWxlbSwgbmFtZSwgIWRvY3VtZW50SXNIVE1MICkgOlxuXHRcdFx0dW5kZWZpbmVkO1xuXG5cdGlmICggdmFsICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0cmV0dXJuIHZhbDtcblx0fVxuXG5cdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApO1xufTtcblxuZmluZC5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdHRocm93IG5ldyBFcnJvciggXCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiBcIiArIG1zZyApO1xufTtcblxuLyoqXG4gKiBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1vdmluZyBkdXBsaWNhdGVzXG4gKiBAcGFyYW0ge0FycmF5TGlrZX0gcmVzdWx0c1xuICovXG5qUXVlcnkudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkge1xuXHR2YXIgZWxlbSxcblx0XHRkdXBsaWNhdGVzID0gW10sXG5cdFx0aiA9IDAsXG5cdFx0aSA9IDA7XG5cblx0Ly8gVW5sZXNzIHdlICprbm93KiB3ZSBjYW4gZGV0ZWN0IGR1cGxpY2F0ZXMsIGFzc3VtZSB0aGVpciBwcmVzZW5jZVxuXHQvL1xuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wK1xuXHQvLyBUZXN0aW5nIGZvciBkZXRlY3RpbmcgZHVwbGljYXRlcyBpcyB1bnByZWRpY3RhYmxlIHNvIGluc3RlYWQgYXNzdW1lIHdlIGNhbid0XG5cdC8vIGRlcGVuZCBvbiBkdXBsaWNhdGUgZGV0ZWN0aW9uIGluIGFsbCBicm93c2VycyB3aXRob3V0IGEgc3RhYmxlIHNvcnQuXG5cdGhhc0R1cGxpY2F0ZSA9ICFzdXBwb3J0LnNvcnRTdGFibGU7XG5cdHNvcnRJbnB1dCA9ICFzdXBwb3J0LnNvcnRTdGFibGUgJiYgc2xpY2UuY2FsbCggcmVzdWx0cywgMCApO1xuXHRzb3J0LmNhbGwoIHJlc3VsdHMsIHNvcnRPcmRlciApO1xuXG5cdGlmICggaGFzRHVwbGljYXRlICkge1xuXHRcdHdoaWxlICggKCBlbGVtID0gcmVzdWx0c1sgaSsrIF0gKSApIHtcblx0XHRcdGlmICggZWxlbSA9PT0gcmVzdWx0c1sgaSBdICkge1xuXHRcdFx0XHRqID0gZHVwbGljYXRlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0c3BsaWNlLmNhbGwoIHJlc3VsdHMsIGR1cGxpY2F0ZXNbIGogXSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENsZWFyIGlucHV0IGFmdGVyIHNvcnRpbmcgdG8gcmVsZWFzZSBvYmplY3RzXG5cdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9wdWxsLzIyNVxuXHRzb3J0SW5wdXQgPSBudWxsO1xuXG5cdHJldHVybiByZXN1bHRzO1xufTtcblxualF1ZXJ5LmZuLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkudW5pcXVlU29ydCggc2xpY2UuYXBwbHkoIHRoaXMgKSApICk7XG59O1xuXG5FeHByID0galF1ZXJ5LmV4cHIgPSB7XG5cblx0Ly8gQ2FuIGJlIGFkanVzdGVkIGJ5IHRoZSB1c2VyXG5cdGNhY2hlTGVuZ3RoOiA1MCxcblxuXHRjcmVhdGVQc2V1ZG86IG1hcmtGdW5jdGlvbixcblxuXHRtYXRjaDogbWF0Y2hFeHByLFxuXG5cdGF0dHJIYW5kbGU6IHt9LFxuXG5cdGZpbmQ6IHt9LFxuXG5cdHJlbGF0aXZlOiB7XG5cdFx0XCI+XCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIiBcIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiIH0sXG5cdFx0XCIrXCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiflwiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiB9XG5cdH0sXG5cblx0cHJlRmlsdGVyOiB7XG5cdFx0QVRUUjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0bWF0Y2hbIDEgXSA9IG1hdGNoWyAxIF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblxuXHRcdFx0Ly8gTW92ZSB0aGUgZ2l2ZW4gdmFsdWUgdG8gbWF0Y2hbM10gd2hldGhlciBxdW90ZWQgb3IgdW5xdW90ZWRcblx0XHRcdG1hdGNoWyAzIF0gPSAoIG1hdGNoWyAzIF0gfHwgbWF0Y2hbIDQgXSB8fCBtYXRjaFsgNSBdIHx8IFwiXCIgKVxuXHRcdFx0XHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblxuXHRcdFx0aWYgKCBtYXRjaFsgMiBdID09PSBcIn49XCIgKSB7XG5cdFx0XHRcdG1hdGNoWyAzIF0gPSBcIiBcIiArIG1hdGNoWyAzIF0gKyBcIiBcIjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCA0ICk7XG5cdFx0fSxcblxuXHRcdENISUxEOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cblx0XHRcdC8qIG1hdGNoZXMgZnJvbSBtYXRjaEV4cHJbXCJDSElMRFwiXVxuXHRcdFx0XHQxIHR5cGUgKG9ubHl8bnRofC4uLilcblx0XHRcdFx0MiB3aGF0IChjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHQzIGFyZ3VtZW50IChldmVufG9kZHxcXGQqfFxcZCpuKFsrLV1cXGQrKT98Li4uKVxuXHRcdFx0XHQ0IHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xcZCpufClcblx0XHRcdFx0NSBzaWduIG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ2IHggb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDcgc2lnbiBvZiB5LWNvbXBvbmVudFxuXHRcdFx0XHQ4IHkgb2YgeS1jb21wb25lbnRcblx0XHRcdCovXG5cdFx0XHRtYXRjaFsgMSBdID0gbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0XHRpZiAoIG1hdGNoWyAxIF0uc2xpY2UoIDAsIDMgKSA9PT0gXCJudGhcIiApIHtcblxuXHRcdFx0XHQvLyBudGgtKiByZXF1aXJlcyBhcmd1bWVudFxuXHRcdFx0XHRpZiAoICFtYXRjaFsgMyBdICkge1xuXHRcdFx0XHRcdGZpbmQuZXJyb3IoIG1hdGNoWyAwIF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHByLmZpbHRlci5DSElMRFxuXHRcdFx0XHQvLyByZW1lbWJlciB0aGF0IGZhbHNlL3RydWUgY2FzdCByZXNwZWN0aXZlbHkgdG8gMC8xXG5cdFx0XHRcdG1hdGNoWyA0IF0gPSArKCBtYXRjaFsgNCBdID9cblx0XHRcdFx0XHRtYXRjaFsgNSBdICsgKCBtYXRjaFsgNiBdIHx8IDEgKSA6XG5cdFx0XHRcdFx0MiAqICggbWF0Y2hbIDMgXSA9PT0gXCJldmVuXCIgfHwgbWF0Y2hbIDMgXSA9PT0gXCJvZGRcIiApXG5cdFx0XHRcdCk7XG5cdFx0XHRcdG1hdGNoWyA1IF0gPSArKCAoIG1hdGNoWyA3IF0gKyBtYXRjaFsgOCBdICkgfHwgbWF0Y2hbIDMgXSA9PT0gXCJvZGRcIiApO1xuXG5cdFx0XHQvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWyAzIF0gKSB7XG5cdFx0XHRcdGZpbmQuZXJyb3IoIG1hdGNoWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdH0sXG5cblx0XHRQU0VVRE86IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdHZhciBleGNlc3MsXG5cdFx0XHRcdHVucXVvdGVkID0gIW1hdGNoWyA2IF0gJiYgbWF0Y2hbIDIgXTtcblxuXHRcdFx0aWYgKCBtYXRjaEV4cHIuQ0hJTEQudGVzdCggbWF0Y2hbIDAgXSApICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWNjZXB0IHF1b3RlZCBhcmd1bWVudHMgYXMtaXNcblx0XHRcdGlmICggbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0bWF0Y2hbIDIgXSA9IG1hdGNoWyA0IF0gfHwgbWF0Y2hbIDUgXSB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTdHJpcCBleGNlc3MgY2hhcmFjdGVycyBmcm9tIHVucXVvdGVkIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggdW5xdW90ZWQgJiYgcnBzZXVkby50ZXN0KCB1bnF1b3RlZCApICYmXG5cblx0XHRcdFx0Ly8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSlcblx0XHRcdFx0KCBleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSApICYmXG5cblx0XHRcdFx0Ly8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzXG5cdFx0XHRcdCggZXhjZXNzID0gdW5xdW90ZWQuaW5kZXhPZiggXCIpXCIsIHVucXVvdGVkLmxlbmd0aCAtIGV4Y2VzcyApIC0gdW5xdW90ZWQubGVuZ3RoICkgKSB7XG5cblx0XHRcdFx0Ly8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXhcblx0XHRcdFx0bWF0Y2hbIDAgXSA9IG1hdGNoWyAwIF0uc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0XHRtYXRjaFsgMiBdID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudClcblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApO1xuXHRcdH1cblx0fSxcblxuXHRmaWx0ZXI6IHtcblxuXHRcdFRBRzogZnVuY3Rpb24oIG5vZGVOYW1lU2VsZWN0b3IgKSB7XG5cdFx0XHR2YXIgZXhwZWN0ZWROb2RlTmFtZSA9IG5vZGVOYW1lU2VsZWN0b3IucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5vZGVOYW1lU2VsZWN0b3IgPT09IFwiKlwiID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0gOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gbm9kZU5hbWUoIGVsZW0sIGV4cGVjdGVkTm9kZU5hbWUgKTtcblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0Q0xBU1M6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7XG5cdFx0XHR2YXIgcGF0dGVybiA9IGNsYXNzQ2FjaGVbIGNsYXNzTmFtZSArIFwiIFwiIF07XG5cblx0XHRcdHJldHVybiBwYXR0ZXJuIHx8XG5cdFx0XHRcdCggcGF0dGVybiA9IG5ldyBSZWdFeHAoIFwiKF58XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgKyBjbGFzc05hbWUgK1xuXHRcdFx0XHRcdFwiKFwiICsgd2hpdGVzcGFjZSArIFwifCQpXCIgKSApICYmXG5cdFx0XHRcdGNsYXNzQ2FjaGUoIGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhdHRlcm4udGVzdChcblx0XHRcdFx0XHRcdHR5cGVvZiBlbGVtLmNsYXNzTmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBlbGVtLmNsYXNzTmFtZSB8fFxuXHRcdFx0XHRcdFx0XHR0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHxcblx0XHRcdFx0XHRcdFx0XCJcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gKTtcblx0XHR9LFxuXG5cdFx0QVRUUjogZnVuY3Rpb24oIG5hbWUsIG9wZXJhdG9yLCBjaGVjayApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHJlc3VsdCA9IGZpbmQuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0XHRcdGlmICggcmVzdWx0ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIiE9XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAhb3BlcmF0b3IgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQgKz0gXCJcIjtcblxuXHRcdFx0XHRpZiAoIG9wZXJhdG9yID09PSBcIj1cIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0ID09PSBjaGVjaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIG9wZXJhdG9yID09PSBcIiE9XCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdCAhPT0gY2hlY2s7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBvcGVyYXRvciA9PT0gXCJePVwiICkge1xuXHRcdFx0XHRcdHJldHVybiBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA9PT0gMDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIG9wZXJhdG9yID09PSBcIio9XCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID4gLTE7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBvcGVyYXRvciA9PT0gXCIkPVwiICkge1xuXHRcdFx0XHRcdHJldHVybiBjaGVjayAmJiByZXN1bHQuc2xpY2UoIC1jaGVjay5sZW5ndGggKSA9PT0gY2hlY2s7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBvcGVyYXRvciA9PT0gXCJ+PVwiICkge1xuXHRcdFx0XHRcdHJldHVybiAoIFwiIFwiICsgcmVzdWx0LnJlcGxhY2UoIHJ3aGl0ZXNwYWNlLCBcIiBcIiApICsgXCIgXCIgKVxuXHRcdFx0XHRcdFx0LmluZGV4T2YoIGNoZWNrICkgPiAtMTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIG9wZXJhdG9yID09PSBcInw9XCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdCA9PT0gY2hlY2sgfHwgcmVzdWx0LnNsaWNlKCAwLCBjaGVjay5sZW5ndGggKyAxICkgPT09IGNoZWNrICsgXCItXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRDSElMRDogZnVuY3Rpb24oIHR5cGUsIHdoYXQsIF9hcmd1bWVudCwgZmlyc3QsIGxhc3QgKSB7XG5cdFx0XHR2YXIgc2ltcGxlID0gdHlwZS5zbGljZSggMCwgMyApICE9PSBcIm50aFwiLFxuXHRcdFx0XHRmb3J3YXJkID0gdHlwZS5zbGljZSggLTQgKSAhPT0gXCJsYXN0XCIsXG5cdFx0XHRcdG9mVHlwZSA9IHdoYXQgPT09IFwib2YtdHlwZVwiO1xuXG5cdFx0XHRyZXR1cm4gZmlyc3QgPT09IDEgJiYgbGFzdCA9PT0gMCA/XG5cblx0XHRcdFx0Ly8gU2hvcnRjdXQgZm9yIDpudGgtKihuKVxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gISFlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRcdH0gOlxuXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBfY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdHZhciBjYWNoZSwgb3V0ZXJDYWNoZSwgbm9kZSwgbm9kZUluZGV4LCBzdGFydCxcblx0XHRcdFx0XHRcdGRpciA9IHNpbXBsZSAhPT0gZm9yd2FyZCA/IFwibmV4dFNpYmxpbmdcIiA6IFwicHJldmlvdXNTaWJsaW5nXCIsXG5cdFx0XHRcdFx0XHRwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGUsXG5cdFx0XHRcdFx0XHRuYW1lID0gb2ZUeXBlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxcblx0XHRcdFx0XHRcdHVzZUNhY2hlID0gIXhtbCAmJiAhb2ZUeXBlLFxuXHRcdFx0XHRcdFx0ZGlmZiA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIDooZmlyc3R8bGFzdHxvbmx5KS0oY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0XHRcdGlmICggc2ltcGxlICkge1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIGRpciApIHtcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gZWxlbTtcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbm9kZSA9IG5vZGVbIGRpciBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGVOYW1lKCBub2RlLCBuYW1lICkgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBSZXZlcnNlIGRpcmVjdGlvbiBmb3IgOm9ubHktKiAoaWYgd2UgaGF2ZW4ndCB5ZXQgZG9uZSBzbylcblx0XHRcdFx0XHRcdFx0XHRzdGFydCA9IGRpciA9IHR5cGUgPT09IFwib25seVwiICYmICFzdGFydCAmJiBcIm5leHRTaWJsaW5nXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHN0YXJ0ID0gWyBmb3J3YXJkID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07XG5cblx0XHRcdFx0XHRcdC8vIG5vbi14bWwgOm50aC1jaGlsZCguLi4pIHN0b3JlcyBjYWNoZSBkYXRhIG9uIGBwYXJlbnRgXG5cdFx0XHRcdFx0XHRpZiAoIGZvcndhcmQgJiYgdXNlQ2FjaGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU2VlayBgZWxlbWAgZnJvbSBhIHByZXZpb3VzbHktY2FjaGVkIGluZGV4XG5cdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBwYXJlbnRbIGV4cGFuZG8gXSB8fCAoIHBhcmVudFsgZXhwYW5kbyBdID0ge30gKTtcblx0XHRcdFx0XHRcdFx0Y2FjaGUgPSBvdXRlckNhY2hlWyB0eXBlIF0gfHwgW107XG5cdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleCAmJiBjYWNoZVsgMiBdO1xuXHRcdFx0XHRcdFx0XHRub2RlID0gbm9kZUluZGV4ICYmIHBhcmVudC5jaGlsZE5vZGVzWyBub2RlSW5kZXggXTtcblxuXHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEZhbGxiYWNrIHRvIHNlZWtpbmcgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0KCBkaWZmID0gbm9kZUluZGV4ID0gMCApIHx8IHN0YXJ0LnBvcCgpICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBXaGVuIGZvdW5kLCBjYWNoZSBpbmRleGVzIG9uIGBwYXJlbnRgIGFuZCBicmVha1xuXHRcdFx0XHRcdFx0XHRcdGlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSAmJiArK2RpZmYgJiYgbm9kZSA9PT0gZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgbm9kZUluZGV4LCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBVc2UgcHJldmlvdXNseS1jYWNoZWQgZWxlbWVudCBpbmRleCBpZiBhdmFpbGFibGVcblx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gZWxlbVsgZXhwYW5kbyBdIHx8ICggZWxlbVsgZXhwYW5kbyBdID0ge30gKTtcblx0XHRcdFx0XHRcdFx0XHRjYWNoZSA9IG91dGVyQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07XG5cdFx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIHhtbCA6bnRoLWNoaWxkKC4uLilcblx0XHRcdFx0XHRcdFx0Ly8gb3IgOm50aC1sYXN0LWNoaWxkKC4uLikgb3IgOm50aCgtbGFzdCk/LW9mLXR5cGUoLi4uKVxuXHRcdFx0XHRcdFx0XHRpZiAoIGRpZmYgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gVXNlIHRoZSBzYW1lIGxvb3AgYXMgYWJvdmUgdG8gc2VlayBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdCggZGlmZiA9IG5vZGVJbmRleCA9IDAgKSB8fCBzdGFydC5wb3AoKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZU5hbWUoIG5vZGUsIG5hbWUgKSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQrK2RpZmYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2FjaGUgdGhlIGluZGV4IG9mIGVhY2ggZW5jb3VudGVyZWQgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCggbm9kZVsgZXhwYW5kbyBdID0ge30gKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggbm9kZSA9PT0gZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBJbmNvcnBvcmF0ZSB0aGUgb2Zmc2V0LCB0aGVuIGNoZWNrIGFnYWluc3QgY3ljbGUgc2l6ZVxuXHRcdFx0XHRcdFx0ZGlmZiAtPSBsYXN0O1xuXHRcdFx0XHRcdFx0cmV0dXJuIGRpZmYgPT09IGZpcnN0IHx8ICggZGlmZiAlIGZpcnN0ID09PSAwICYmIGRpZmYgLyBmaXJzdCA+PSAwICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRQU0VVRE86IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkge1xuXG5cdFx0XHQvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVkby1jbGFzc2VzXG5cdFx0XHQvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20gcHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVyc1xuXHRcdFx0Ly8gUmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvc1xuXHRcdFx0dmFyIGFyZ3MsXG5cdFx0XHRcdGZuID0gRXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0XHRmaW5kLmVycm9yKCBcInVuc3VwcG9ydGVkIHBzZXVkbzogXCIgKyBwc2V1ZG8gKTtcblxuXHRcdFx0Ly8gVGhlIHVzZXIgbWF5IHVzZSBjcmVhdGVQc2V1ZG8gdG8gaW5kaWNhdGUgdGhhdFxuXHRcdFx0Ly8gYXJndW1lbnRzIGFyZSBuZWVkZWQgdG8gY3JlYXRlIHRoZSBmaWx0ZXIgZnVuY3Rpb25cblx0XHRcdC8vIGp1c3QgYXMgalF1ZXJ5IGRvZXNcblx0XHRcdGlmICggZm5bIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0cmV0dXJuIGZuKCBhcmd1bWVudCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBCdXQgbWFpbnRhaW4gc3VwcG9ydCBmb3Igb2xkIHNpZ25hdHVyZXNcblx0XHRcdGlmICggZm4ubGVuZ3RoID4gMSApIHtcblx0XHRcdFx0YXJncyA9IFsgcHNldWRvLCBwc2V1ZG8sIFwiXCIsIGFyZ3VtZW50IF07XG5cdFx0XHRcdHJldHVybiBFeHByLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoIHBzZXVkby50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0XHRcdG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHRcdFx0XHR2YXIgaWR4LFxuXHRcdFx0XHRcdFx0XHRtYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksXG5cdFx0XHRcdFx0XHRcdGkgPSBtYXRjaGVkLmxlbmd0aDtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZHggPSBpbmRleE9mLmNhbGwoIHNlZWQsIG1hdGNoZWRbIGkgXSApO1xuXHRcdFx0XHRcdFx0XHRzZWVkWyBpZHggXSA9ICEoIG1hdGNoZXNbIGlkeCBdID0gbWF0Y2hlZFsgaSBdICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmbiggZWxlbSwgMCwgYXJncyApO1xuXHRcdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmbjtcblx0XHR9XG5cdH0sXG5cblx0cHNldWRvczoge1xuXG5cdFx0Ly8gUG90ZW50aWFsbHkgY29tcGxleCBwc2V1ZG9zXG5cdFx0bm90OiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblxuXHRcdFx0Ly8gVHJpbSB0aGUgc2VsZWN0b3IgcGFzc2VkIHRvIGNvbXBpbGVcblx0XHRcdC8vIHRvIGF2b2lkIHRyZWF0aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nXG5cdFx0XHQvLyBzcGFjZXMgYXMgY29tYmluYXRvcnNcblx0XHRcdHZhciBpbnB1dCA9IFtdLFxuXHRcdFx0XHRyZXN1bHRzID0gW10sXG5cdFx0XHRcdG1hdGNoZXIgPSBjb21waWxlKCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbUNTUywgXCIkMVwiICkgKTtcblxuXHRcdFx0cmV0dXJuIG1hdGNoZXJbIGV4cGFuZG8gXSA/XG5cdFx0XHRcdG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksXG5cdFx0XHRcdFx0XHRpID0gc2VlZC5sZW5ndGg7XG5cblx0XHRcdFx0XHQvLyBNYXRjaCBlbGVtZW50cyB1bm1hdGNoZWQgYnkgYG1hdGNoZXJgXG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZWxlbSA9IHVubWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGkgXSA9ICEoIG1hdGNoZXNbIGkgXSA9IGVsZW0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBfY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdGlucHV0WyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdG1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTtcblxuXHRcdFx0XHRcdC8vIERvbid0IGtlZXAgdGhlIGVsZW1lbnRcblx0XHRcdFx0XHQvLyAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL2lzc3Vlcy8yOTkpXG5cdFx0XHRcdFx0aW5wdXRbIDAgXSA9IG51bGw7XG5cdFx0XHRcdFx0cmV0dXJuICFyZXN1bHRzLnBvcCgpO1xuXHRcdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdGhhczogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBmaW5kKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdGNvbnRhaW5zOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0dGV4dCA9IHRleHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS50ZXh0Q29udGVudCB8fCBqUXVlcnkudGV4dCggZWxlbSApICkuaW5kZXhPZiggdGV4dCApID4gLTE7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdC8vIFwiV2hldGhlciBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEgOmxhbmcoKSBzZWxlY3RvclxuXHRcdC8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlXG5cdFx0Ly8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQyxcblx0XHQvLyBvciBiZWdpbm5pbmcgd2l0aCB0aGUgaWRlbnRpZmllciBDIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IFwiLVwiLlxuXHRcdC8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuXHRcdC8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuXCJcblx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNsYW5nLXBzZXVkb1xuXHRcdGxhbmc6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGxhbmcgKSB7XG5cblx0XHRcdC8vIGxhbmcgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGlkZW50aWZpZXJcblx0XHRcdGlmICggIXJpZGVudGlmaWVyLnRlc3QoIGxhbmcgfHwgXCJcIiApICkge1xuXHRcdFx0XHRmaW5kLmVycm9yKCBcInVuc3VwcG9ydGVkIGxhbmc6IFwiICsgbGFuZyApO1xuXHRcdFx0fVxuXHRcdFx0bGFuZyA9IGxhbmcucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgZWxlbUxhbmc7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoICggZWxlbUxhbmcgPSBkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRcdFx0XHRlbGVtLmxhbmcgOlxuXHRcdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIFwieG1sOmxhbmdcIiApIHx8IGVsZW0uZ2V0QXR0cmlidXRlKCBcImxhbmdcIiApICkgKSB7XG5cblx0XHRcdFx0XHRcdGVsZW1MYW5nID0gZWxlbUxhbmcudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtTGFuZyA9PT0gbGFuZyB8fCBlbGVtTGFuZy5pbmRleE9mKCBsYW5nICsgXCItXCIgKSA9PT0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gd2hpbGUgKCAoIGVsZW0gPSBlbGVtLnBhcmVudE5vZGUgKSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0Ly8gTWlzY2VsbGFuZW91c1xuXHRcdHRhcmdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0XHRcdHJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxlbS5pZDtcblx0XHR9LFxuXG5cdFx0cm9vdDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jdW1lbnRFbGVtZW50O1xuXHRcdH0sXG5cblx0XHRmb2N1czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSAmJlxuXHRcdFx0XHRkb2N1bWVudC5oYXNGb2N1cygpICYmXG5cdFx0XHRcdCEhKCBlbGVtLnR5cGUgfHwgZWxlbS5ocmVmIHx8IH5lbGVtLnRhYkluZGV4ICk7XG5cdFx0fSxcblxuXHRcdC8vIEJvb2xlYW4gcHJvcGVydGllc1xuXHRcdGVuYWJsZWQ6IGNyZWF0ZURpc2FibGVkUHNldWRvKCBmYWxzZSApLFxuXHRcdGRpc2FibGVkOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggdHJ1ZSApLFxuXG5cdFx0Y2hlY2tlZDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8vIEluIENTUzMsIDpjaGVja2VkIHNob3VsZCByZXR1cm4gYm90aCBjaGVja2VkIGFuZCBzZWxlY3RlZCBlbGVtZW50c1xuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHRyZXR1cm4gKCBub2RlTmFtZSggZWxlbSwgXCJpbnB1dFwiICkgJiYgISFlbGVtLmNoZWNrZWQgKSB8fFxuXHRcdFx0XHQoIG5vZGVOYW1lKCBlbGVtLCBcIm9wdGlvblwiICkgJiYgISFlbGVtLnNlbGVjdGVkICk7XG5cdFx0fSxcblxuXHRcdHNlbGVjdGVkOiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMStcblx0XHRcdC8vIEFjY2Vzc2luZyB0aGUgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eVxuXHRcdFx0Ly8gZm9yY2VzIHRoZSBicm93c2VyIHRvIHRyZWF0IHRoZSBkZWZhdWx0IG9wdGlvbiBhc1xuXHRcdFx0Ly8gc2VsZWN0ZWQgd2hlbiBpbiBhbiBvcHRncm91cC5cblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdFx0XHRcdGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gQ29udGVudHNcblx0XHRlbXB0eTogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2VtcHR5LXBzZXVkb1xuXHRcdFx0Ly8gOmVtcHR5IGlzIG5lZ2F0ZWQgYnkgZWxlbWVudCAoMSkgb3IgY29udGVudCBub2RlcyAodGV4dDogMzsgY2RhdGE6IDQ7IGVudGl0eSByZWY6IDUpLFxuXHRcdFx0Ly8gICBidXQgbm90IGJ5IG90aGVycyAoY29tbWVudDogODsgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbjogNzsgZXRjLilcblx0XHRcdC8vIG5vZGVUeXBlIDwgNiB3b3JrcyBiZWNhdXNlIGF0dHJpYnV0ZXMgKDIpIGRvIG5vdCBhcHBlYXIgYXMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPCA2ICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdHBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gIUV4cHIucHNldWRvcy5lbXB0eSggZWxlbSApO1xuXHRcdH0sXG5cblx0XHQvLyBFbGVtZW50L2lucHV0IHR5cGVzXG5cdFx0aGVhZGVyOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0aW5wdXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJpbnB1dHMudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRidXR0b246IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSAmJiBlbGVtLnR5cGUgPT09IFwiYnV0dG9uXCIgfHxcblx0XHRcdFx0bm9kZU5hbWUoIGVsZW0sIFwiYnV0dG9uXCIgKTtcblx0XHR9LFxuXG5cdFx0dGV4dDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgYXR0cjtcblx0XHRcdHJldHVybiBub2RlTmFtZSggZWxlbSwgXCJpbnB1dFwiICkgJiYgZWxlbS50eXBlID09PSBcInRleHRcIiAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDwxMCBvbmx5XG5cdFx0XHRcdC8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuLCBcInNlYXJjaFwiKSBhcHBlYXJcblx0XHRcdFx0Ly8gd2l0aCBlbGVtLnR5cGUgPT09IFwidGV4dFwiXG5cdFx0XHRcdCggKCBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidHlwZVwiICkgKSA9PSBudWxsIHx8XG5cdFx0XHRcdFx0YXR0ci50b0xvd2VyQ2FzZSgpID09PSBcInRleHRcIiApO1xuXHRcdH0sXG5cblx0XHQvLyBQb3NpdGlvbi1pbi1jb2xsZWN0aW9uXG5cdFx0Zmlyc3Q6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIFsgMCBdO1xuXHRcdH0gKSxcblxuXHRcdGxhc3Q6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBfbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gWyBsZW5ndGggLSAxIF07XG5cdFx0fSApLFxuXG5cdFx0ZXE6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBfbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0cmV0dXJuIFsgYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudCBdO1xuXHRcdH0gKSxcblxuXHRcdGV2ZW46IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRvZGQ6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMTtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRsdDogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpO1xuXG5cdFx0XHRpZiAoIGFyZ3VtZW50IDwgMCApIHtcblx0XHRcdFx0aSA9IGFyZ3VtZW50ICsgbGVuZ3RoO1xuXHRcdFx0fSBlbHNlIGlmICggYXJndW1lbnQgPiBsZW5ndGggKSB7XG5cdFx0XHRcdGkgPSBsZW5ndGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpID0gYXJndW1lbnQ7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoIDsgLS1pID49IDA7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRndDogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgKytpIDwgbGVuZ3RoOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApXG5cdH1cbn07XG5cbkV4cHIucHNldWRvcy5udGggPSBFeHByLnBzZXVkb3MuZXE7XG5cbi8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zXG5mb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVJbnB1dFBzZXVkbyggaSApO1xufVxuZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwgcmVzZXQ6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTtcbn1cblxuLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzXG5mdW5jdGlvbiBzZXRGaWx0ZXJzKCkge31cbnNldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5maWx0ZXJzID0gRXhwci5wc2V1ZG9zO1xuRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTtcblxuZnVuY3Rpb24gdG9rZW5pemUoIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7XG5cdHZhciBtYXRjaGVkLCBtYXRjaCwgdG9rZW5zLCB0eXBlLFxuXHRcdHNvRmFyLCBncm91cHMsIHByZUZpbHRlcnMsXG5cdFx0Y2FjaGVkID0gdG9rZW5DYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xuXG5cdGlmICggY2FjaGVkICkge1xuXHRcdHJldHVybiBwYXJzZU9ubHkgPyAwIDogY2FjaGVkLnNsaWNlKCAwICk7XG5cdH1cblxuXHRzb0ZhciA9IHNlbGVjdG9yO1xuXHRncm91cHMgPSBbXTtcblx0cHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyO1xuXG5cdHdoaWxlICggc29GYXIgKSB7XG5cblx0XHQvLyBDb21tYSBhbmQgZmlyc3QgcnVuXG5cdFx0aWYgKCAhbWF0Y2hlZCB8fCAoIG1hdGNoID0gcmNvbW1hLmV4ZWMoIHNvRmFyICkgKSApIHtcblx0XHRcdGlmICggbWF0Y2ggKSB7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgY29uc3VtZSB0cmFpbGluZyBjb21tYXMgYXMgdmFsaWRcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hbIDAgXS5sZW5ndGggKSB8fCBzb0Zhcjtcblx0XHRcdH1cblx0XHRcdGdyb3Vwcy5wdXNoKCAoIHRva2VucyA9IFtdICkgKTtcblx0XHR9XG5cblx0XHRtYXRjaGVkID0gZmFsc2U7XG5cblx0XHQvLyBDb21iaW5hdG9yc1xuXHRcdGlmICggKCBtYXRjaCA9IHJsZWFkaW5nQ29tYmluYXRvci5leGVjKCBzb0ZhciApICkgKSB7XG5cdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdHRva2Vucy5wdXNoKCB7XG5cdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXG5cdFx0XHRcdC8vIENhc3QgZGVzY2VuZGFudCBjb21iaW5hdG9ycyB0byBzcGFjZVxuXHRcdFx0XHR0eXBlOiBtYXRjaFsgMCBdLnJlcGxhY2UoIHJ0cmltQ1NTLCBcIiBcIiApXG5cdFx0XHR9ICk7XG5cdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZpbHRlcnNcblx0XHRmb3IgKCB0eXBlIGluIEV4cHIuZmlsdGVyICkge1xuXHRcdFx0aWYgKCAoIG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYyggc29GYXIgKSApICYmICggIXByZUZpbHRlcnNbIHR5cGUgXSB8fFxuXHRcdFx0XHQoIG1hdGNoID0gcHJlRmlsdGVyc1sgdHlwZSBdKCBtYXRjaCApICkgKSApIHtcblx0XHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHRcdHRva2Vucy5wdXNoKCB7XG5cdFx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cdFx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0XHRtYXRjaGVzOiBtYXRjaFxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCAhbWF0Y2hlZCApIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnZhbGlkIGV4Y2Vzc1xuXHQvLyBpZiB3ZSdyZSBqdXN0IHBhcnNpbmdcblx0Ly8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvciBvciByZXR1cm4gdG9rZW5zXG5cdGlmICggcGFyc2VPbmx5ICkge1xuXHRcdHJldHVybiBzb0Zhci5sZW5ndGg7XG5cdH1cblxuXHRyZXR1cm4gc29GYXIgP1xuXHRcdGZpbmQuZXJyb3IoIHNlbGVjdG9yICkgOlxuXG5cdFx0Ly8gQ2FjaGUgdGhlIHRva2Vuc1xuXHRcdHRva2VuQ2FjaGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApO1xufVxuXG5mdW5jdGlvbiB0b1NlbGVjdG9yKCB0b2tlbnMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdHNlbGVjdG9yID0gXCJcIjtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0c2VsZWN0b3IgKz0gdG9rZW5zWyBpIF0udmFsdWU7XG5cdH1cblx0cmV0dXJuIHNlbGVjdG9yO1xufVxuXG5mdW5jdGlvbiBhZGRDb21iaW5hdG9yKCBtYXRjaGVyLCBjb21iaW5hdG9yLCBiYXNlICkge1xuXHR2YXIgZGlyID0gY29tYmluYXRvci5kaXIsXG5cdFx0c2tpcCA9IGNvbWJpbmF0b3IubmV4dCxcblx0XHRrZXkgPSBza2lwIHx8IGRpcixcblx0XHRjaGVja05vbkVsZW1lbnRzID0gYmFzZSAmJiBrZXkgPT09IFwicGFyZW50Tm9kZVwiLFxuXHRcdGRvbmVOYW1lID0gZG9uZSsrO1xuXG5cdHJldHVybiBjb21iaW5hdG9yLmZpcnN0ID9cblxuXHRcdC8vIENoZWNrIGFnYWluc3QgY2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdHJldHVybiBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gOlxuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBvbGRDYWNoZSwgb3V0ZXJDYWNoZSxcblx0XHRcdFx0bmV3Q2FjaGUgPSBbIGRpcnJ1bnMsIGRvbmVOYW1lIF07XG5cblx0XHRcdC8vIFdlIGNhbid0IHNldCBhcmJpdHJhcnkgZGF0YSBvbiBYTUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3QgYmVuZWZpdCBmcm9tIGNvbWJpbmF0b3IgY2FjaGluZ1xuXHRcdFx0aWYgKCB4bWwgKSB7XG5cdFx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoIGVsZW1bIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdGlmICggc2tpcCAmJiBub2RlTmFtZSggZWxlbSwgc2tpcCApICkge1xuXHRcdFx0XHRcdFx0XHRlbGVtID0gZWxlbVsgZGlyIF0gfHwgZWxlbTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoICggb2xkQ2FjaGUgPSBvdXRlckNhY2hlWyBrZXkgXSApICYmXG5cdFx0XHRcdFx0XHRcdG9sZENhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgb2xkQ2FjaGVbIDEgXSA9PT0gZG9uZU5hbWUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQXNzaWduIHRvIG5ld0NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0cmV0dXJuICggbmV3Q2FjaGVbIDIgXSA9IG9sZENhY2hlWyAyIF0gKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUmV1c2UgbmV3Y2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlWyBrZXkgXSA9IG5ld0NhY2hlO1xuXG5cdFx0XHRcdFx0XHRcdC8vIEEgbWF0Y2ggbWVhbnMgd2UncmUgZG9uZTsgYSBmYWlsIG1lYW5zIHdlIGhhdmUgdG8ga2VlcCBjaGVja2luZ1xuXHRcdFx0XHRcdFx0XHRpZiAoICggbmV3Q2FjaGVbIDIgXSA9IG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xufVxuXG5mdW5jdGlvbiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSB7XG5cdHJldHVybiBtYXRjaGVycy5sZW5ndGggPiAxID9cblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIGkgPSBtYXRjaGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAhbWF0Y2hlcnNbIGkgXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IDpcblx0XHRtYXRjaGVyc1sgMCBdO1xufVxuXG5mdW5jdGlvbiBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciwgY29udGV4dHMsIHJlc3VsdHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBjb250ZXh0cy5sZW5ndGg7XG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGZpbmQoIHNlbGVjdG9yLCBjb250ZXh0c1sgaSBdLCByZXN1bHRzICk7XG5cdH1cblx0cmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIGNvbmRlbnNlKCB1bm1hdGNoZWQsIG1hcCwgZmlsdGVyLCBjb250ZXh0LCB4bWwgKSB7XG5cdHZhciBlbGVtLFxuXHRcdG5ld1VubWF0Y2hlZCA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGxlbiA9IHVubWF0Y2hlZC5sZW5ndGgsXG5cdFx0bWFwcGVkID0gbWFwICE9IG51bGw7XG5cblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0aWYgKCAoIGVsZW0gPSB1bm1hdGNoZWRbIGkgXSApICkge1xuXHRcdFx0aWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdGlmICggbWFwcGVkICkge1xuXHRcdFx0XHRcdG1hcC5wdXNoKCBpICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3VW5tYXRjaGVkO1xufVxuXG5mdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKSB7XG5cdGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7XG5cdH1cblx0aWYgKCBwb3N0RmluZGVyICYmICFwb3N0RmluZGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApO1xuXHR9XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCByZXN1bHRzLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0dmFyIHRlbXAsIGksIGVsZW0sIG1hdGNoZXJPdXQsXG5cdFx0XHRwcmVNYXAgPSBbXSxcblx0XHRcdHBvc3RNYXAgPSBbXSxcblx0XHRcdHByZWV4aXN0aW5nID0gcmVzdWx0cy5sZW5ndGgsXG5cblx0XHRcdC8vIEdldCBpbml0aWFsIGVsZW1lbnRzIGZyb20gc2VlZCBvciBjb250ZXh0XG5cdFx0XHRlbGVtcyA9IHNlZWQgfHxcblx0XHRcdFx0bXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IgfHwgXCIqXCIsXG5cdFx0XHRcdFx0Y29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCwgW10gKSxcblxuXHRcdFx0Ly8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uXG5cdFx0XHRtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID9cblx0XHRcdFx0Y29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRlbGVtcztcblxuXHRcdGlmICggbWF0Y2hlciApIHtcblxuXHRcdFx0Ly8gSWYgd2UgaGF2ZSBhIHBvc3RGaW5kZXIsIG9yIGZpbHRlcmVkIHNlZWQsIG9yIG5vbi1zZWVkIHBvc3RGaWx0ZXJcblx0XHRcdC8vIG9yIHByZWV4aXN0aW5nIHJlc3VsdHMsXG5cdFx0XHRtYXRjaGVyT3V0ID0gcG9zdEZpbmRlciB8fCAoIHNlZWQgPyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0RmlsdGVyICkgP1xuXG5cdFx0XHRcdC8vIC4uLmludGVybWVkaWF0ZSBwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeVxuXHRcdFx0XHRbXSA6XG5cblx0XHRcdFx0Ly8gLi4ub3RoZXJ3aXNlIHVzZSByZXN1bHRzIGRpcmVjdGx5XG5cdFx0XHRcdHJlc3VsdHM7XG5cblx0XHRcdC8vIEZpbmQgcHJpbWFyeSBtYXRjaGVzXG5cdFx0XHRtYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHhtbCApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyT3V0ID0gbWF0Y2hlckluO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHBvc3RGaWx0ZXJcblx0XHRpZiAoIHBvc3RGaWx0ZXIgKSB7XG5cdFx0XHR0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTtcblx0XHRcdHBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTtcblxuXHRcdFx0Ly8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJblxuXHRcdFx0aSA9IHRlbXAubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggKCBlbGVtID0gdGVtcFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlck91dFsgcG9zdE1hcFsgaSBdIF0gPSAhKCBtYXRjaGVySW5bIHBvc3RNYXBbIGkgXSBdID0gZWxlbSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyIHx8IHByZUZpbHRlciApIHtcblx0XHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcgdGhpcyBpbnRlcm1lZGlhdGUgaW50byBwb3N0RmluZGVyIGNvbnRleHRzXG5cdFx0XHRcdFx0dGVtcCA9IFtdO1xuXHRcdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKCBlbGVtID0gbWF0Y2hlck91dFsgaSBdICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBtYXRjaGVySW4gc2luY2UgZWxlbSBpcyBub3QgeWV0IGEgZmluYWwgbWF0Y2hcblx0XHRcdFx0XHRcdFx0dGVtcC5wdXNoKCAoIG1hdGNoZXJJblsgaSBdID0gZWxlbSApICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsICggbWF0Y2hlck91dCA9IFtdICksIHRlbXAsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWRcblx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRpZiAoICggZWxlbSA9IG1hdGNoZXJPdXRbIGkgXSApICYmXG5cdFx0XHRcdFx0XHQoIHRlbXAgPSBwb3N0RmluZGVyID8gaW5kZXhPZi5jYWxsKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbIGkgXSApID4gLTEgKSB7XG5cblx0XHRcdFx0XHRcdHNlZWRbIHRlbXAgXSA9ICEoIHJlc3VsdHNbIHRlbXAgXSA9IGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEFkZCBlbGVtZW50cyB0byByZXN1bHRzLCB0aHJvdWdoIHBvc3RGaW5kZXIgaWYgZGVmaW5lZFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyT3V0ID0gY29uZGVuc2UoXG5cdFx0XHRcdG1hdGNoZXJPdXQgPT09IHJlc3VsdHMgP1xuXHRcdFx0XHRcdG1hdGNoZXJPdXQuc3BsaWNlKCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6XG5cdFx0XHRcdFx0bWF0Y2hlck91dFxuXHRcdFx0KTtcblx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcblx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgcmVzdWx0cywgbWF0Y2hlck91dCwgeG1sICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBtYXRjaGVyT3V0ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMgKSB7XG5cdHZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGosXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRsZWFkaW5nUmVsYXRpdmUgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIDAgXS50eXBlIF0sXG5cdFx0aW1wbGljaXRSZWxhdGl2ZSA9IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlWyBcIiBcIiBdLFxuXHRcdGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCxcblxuXHRcdC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpXG5cdFx0bWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0O1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBpbmRleE9mLmNhbGwoIGNoZWNrQ29udGV4dCwgZWxlbSApID4gLTE7XG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxuXHRcdG1hdGNoZXJzID0gWyBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0dmFyIHJldCA9ICggIWxlYWRpbmdSZWxhdGl2ZSAmJiAoIHhtbCB8fCBjb250ZXh0ICE9IG91dGVybW9zdENvbnRleHQgKSApIHx8IChcblx0XHRcdFx0KCBjaGVja0NvbnRleHQgPSBjb250ZXh0ICkubm9kZVR5cGUgP1xuXHRcdFx0XHRcdG1hdGNoQ29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRcdG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgKTtcblxuXHRcdFx0Ly8gQXZvaWQgaGFuZ2luZyBvbnRvIGVsZW1lbnRcblx0XHRcdC8vIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvaXNzdWVzLzI5OSlcblx0XHRcdGNoZWNrQ29udGV4dCA9IG51bGw7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH0gXTtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoICggbWF0Y2hlciA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgaSBdLnR5cGUgXSApICkge1xuXHRcdFx0bWF0Y2hlcnMgPSBbIGFkZENvbWJpbmF0b3IoIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyICkgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbIGkgXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1sgaSBdLm1hdGNoZXMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIHNwZWNpYWwgdXBvbiBzZWVpbmcgYSBwb3NpdGlvbmFsIG1hdGNoZXJcblx0XHRcdGlmICggbWF0Y2hlclsgZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdC8vIEZpbmQgdGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0b3IgKGlmIGFueSkgZm9yIHByb3BlciBoYW5kbGluZ1xuXHRcdFx0XHRqID0gKytpO1xuXHRcdFx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgaiBdLnR5cGUgXSApIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2V0TWF0Y2hlcihcblx0XHRcdFx0XHRpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSxcblx0XHRcdFx0XHRpID4gMSAmJiB0b1NlbGVjdG9yKFxuXG5cdFx0XHRcdFx0XHQvLyBJZiB0aGUgcHJlY2VkaW5nIHRva2VuIHdhcyBhIGRlc2NlbmRhbnQgY29tYmluYXRvciwgaW5zZXJ0IGFuIGltcGxpY2l0IGFueS1lbGVtZW50IGAqYFxuXHRcdFx0XHRcdFx0dG9rZW5zLnNsaWNlKCAwLCBpIC0gMSApXG5cdFx0XHRcdFx0XHRcdC5jb25jYXQoIHsgdmFsdWU6IHRva2Vuc1sgaSAtIDIgXS50eXBlID09PSBcIiBcIiA/IFwiKlwiIDogXCJcIiB9IClcblx0XHRcdFx0XHQpLnJlcGxhY2UoIHJ0cmltQ1NTLCBcIiQxXCIgKSxcblx0XHRcdFx0XHRtYXRjaGVyLFxuXHRcdFx0XHRcdGkgPCBqICYmIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMuc2xpY2UoIGksIGogKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgbWF0Y2hlckZyb21Ub2tlbnMoICggdG9rZW5zID0gdG9rZW5zLnNsaWNlKCBqICkgKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgdG9TZWxlY3RvciggdG9rZW5zIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdG1hdGNoZXJzLnB1c2goIG1hdGNoZXIgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApIHtcblx0dmFyIGJ5U2V0ID0gc2V0TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRieUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRzdXBlck1hdGNoZXIgPSBmdW5jdGlvbiggc2VlZCwgY29udGV4dCwgeG1sLCByZXN1bHRzLCBvdXRlcm1vc3QgKSB7XG5cdFx0XHR2YXIgZWxlbSwgaiwgbWF0Y2hlcixcblx0XHRcdFx0bWF0Y2hlZENvdW50ID0gMCxcblx0XHRcdFx0aSA9IFwiMFwiLFxuXHRcdFx0XHR1bm1hdGNoZWQgPSBzZWVkICYmIFtdLFxuXHRcdFx0XHRzZXRNYXRjaGVkID0gW10sXG5cdFx0XHRcdGNvbnRleHRCYWNrdXAgPSBvdXRlcm1vc3RDb250ZXh0LFxuXG5cdFx0XHRcdC8vIFdlIG11c3QgYWx3YXlzIGhhdmUgZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Igb3V0ZXJtb3N0IGNvbnRleHRcblx0XHRcdFx0ZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAmJiBFeHByLmZpbmQuVEFHKCBcIipcIiwgb3V0ZXJtb3N0ICksXG5cblx0XHRcdFx0Ly8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXJcblx0XHRcdFx0ZGlycnVuc1VuaXF1ZSA9ICggZGlycnVucyArPSBjb250ZXh0QmFja3VwID09IG51bGwgPyAxIDogTWF0aC5yYW5kb20oKSB8fCAwLjEgKSxcblx0XHRcdFx0bGVuID0gZWxlbXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dCA9PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHNcblx0XHRcdC8vIFN1cHBvcnQ6IGlPUyA8PTcgLSA5IG9ubHlcblx0XHRcdC8vIFRvbGVyYXRlIE5vZGVMaXN0IHByb3BlcnRpZXMgKElFOiBcImxlbmd0aFwiOyBTYWZhcmk6IDxudW1iZXI+KSBtYXRjaGluZ1xuXHRcdFx0Ly8gZWxlbWVudHMgYnkgaWQuIChzZWUgdHJhYy0xNDE0Milcblx0XHRcdGZvciAoIDsgaSAhPT0gbGVuICYmICggZWxlbSA9IGVsZW1zWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggYnlFbGVtZW50ICYmIGVsZW0gKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0XHRcdGlmICggIWNvbnRleHQgJiYgZWxlbS5vd25lckRvY3VtZW50ICE9IGRvY3VtZW50ICkge1xuXHRcdFx0XHRcdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0XHRcdFx0XHRcdHhtbCA9ICFkb2N1bWVudElzSFRNTDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoZXIgPSBlbGVtZW50TWF0Y2hlcnNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQgfHwgZG9jdW1lbnQsIHhtbCApICkge1xuXHRcdFx0XHRcdFx0XHRwdXNoLmNhbGwoIHJlc3VsdHMsIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRcdFx0ZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHJhY2sgdW5tYXRjaGVkIGVsZW1lbnRzIGZvciBzZXQgZmlsdGVyc1xuXHRcdFx0XHRpZiAoIGJ5U2V0ICkge1xuXG5cdFx0XHRcdFx0Ly8gVGhleSB3aWxsIGhhdmUgZ29uZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBtYXRjaGVyc1xuXHRcdFx0XHRcdGlmICggKCBlbGVtID0gIW1hdGNoZXIgJiYgZWxlbSApICkge1xuXHRcdFx0XHRcdFx0bWF0Y2hlZENvdW50LS07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTGVuZ3RoZW4gdGhlIGFycmF5IGZvciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdFxuXHRcdFx0XHRcdGlmICggc2VlZCApIHtcblx0XHRcdFx0XHRcdHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIGBpYCBpcyBub3cgdGhlIGNvdW50IG9mIGVsZW1lbnRzIHZpc2l0ZWQgYWJvdmUsIGFuZCBhZGRpbmcgaXQgdG8gYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIG1ha2VzIHRoZSBsYXR0ZXIgbm9ubmVnYXRpdmUuXG5cdFx0XHRtYXRjaGVkQ291bnQgKz0gaTtcblxuXHRcdFx0Ly8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBOT1RFOiBUaGlzIGNhbiBiZSBza2lwcGVkIGlmIHRoZXJlIGFyZSBubyB1bm1hdGNoZWQgZWxlbWVudHMgKGkuZS4sIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBlcXVhbHMgYGlgKSwgdW5sZXNzIHdlIGRpZG4ndCB2aXNpdCBfYW55XyBlbGVtZW50cyBpbiB0aGUgYWJvdmUgbG9vcCBiZWNhdXNlIHdlIGhhdmVcblx0XHRcdC8vIG5vIGVsZW1lbnQgbWF0Y2hlcnMgYW5kIG5vIHNlZWQuXG5cdFx0XHQvLyBJbmNyZW1lbnRpbmcgYW4gaW5pdGlhbGx5LXN0cmluZyBcIjBcIiBgaWAgYWxsb3dzIGBpYCB0byByZW1haW4gYSBzdHJpbmcgb25seSBpbiB0aGF0XG5cdFx0XHQvLyBjYXNlLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIFwiMDBcIiBgbWF0Y2hlZENvdW50YCB0aGF0IGRpZmZlcnMgZnJvbSBgaWAgYnV0IGlzIGFsc29cblx0XHRcdC8vIG51bWVyaWNhbGx5IHplcm8uXG5cdFx0XHRpZiAoIGJ5U2V0ICYmIGkgIT09IG1hdGNoZWRDb3VudCApIHtcblx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdHdoaWxlICggKCBtYXRjaGVyID0gc2V0TWF0Y2hlcnNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlciggdW5tYXRjaGVkLCBzZXRNYXRjaGVkLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggc2VlZCApIHtcblxuXHRcdFx0XHRcdC8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHNvcnRpbmdcblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCAhKCB1bm1hdGNoZWRbIGkgXSB8fCBzZXRNYXRjaGVkWyBpIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHRzZXRNYXRjaGVkWyBpIF0gPSBwb3AuY2FsbCggcmVzdWx0cyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRGlzY2FyZCBpbmRleCBwbGFjZWhvbGRlciB2YWx1ZXMgdG8gZ2V0IG9ubHkgYWN0dWFsIG1hdGNoZXNcblx0XHRcdFx0XHRzZXRNYXRjaGVkID0gY29uZGVuc2UoIHNldE1hdGNoZWQgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFkZCBtYXRjaGVzIHRvIHJlc3VsdHNcblx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2V0TWF0Y2hlZCApO1xuXG5cdFx0XHRcdC8vIFNlZWRsZXNzIHNldCBtYXRjaGVzIHN1Y2NlZWRpbmcgbXVsdGlwbGUgc3VjY2Vzc2Z1bCBtYXRjaGVycyBzdGlwdWxhdGUgc29ydGluZ1xuXHRcdFx0XHRpZiAoIG91dGVybW9zdCAmJiAhc2VlZCAmJiBzZXRNYXRjaGVkLmxlbmd0aCA+IDAgJiZcblx0XHRcdFx0XHQoIG1hdGNoZWRDb3VudCArIHNldE1hdGNoZXJzLmxlbmd0aCApID4gMSApIHtcblxuXHRcdFx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KCByZXN1bHRzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gT3ZlcnJpZGUgbWFuaXB1bGF0aW9uIG9mIGdsb2JhbHMgYnkgbmVzdGVkIG1hdGNoZXJzXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0ZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7XG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0QmFja3VwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdW5tYXRjaGVkO1xuXHRcdH07XG5cblx0cmV0dXJuIGJ5U2V0ID9cblx0XHRtYXJrRnVuY3Rpb24oIHN1cGVyTWF0Y2hlciApIDpcblx0XHRzdXBlck1hdGNoZXI7XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGUoIHNlbGVjdG9yLCBtYXRjaCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHtcblx0dmFyIGksXG5cdFx0c2V0TWF0Y2hlcnMgPSBbXSxcblx0XHRlbGVtZW50TWF0Y2hlcnMgPSBbXSxcblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCAhY2FjaGVkICkge1xuXG5cdFx0Ly8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50XG5cdFx0aWYgKCAhbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaCA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdH1cblx0XHRpID0gbWF0Y2gubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0Y2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMoIG1hdGNoWyBpIF0gKTtcblx0XHRcdGlmICggY2FjaGVkWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHNldE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhY2hlIHRoZSBjb21waWxlZCBmdW5jdGlvblxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUoIHNlbGVjdG9yLFxuXHRcdFx0bWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgKTtcblxuXHRcdC8vIFNhdmUgc2VsZWN0b3IgYW5kIHRva2VuaXphdGlvblxuXHRcdGNhY2hlZC5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXHR9XG5cdHJldHVybiBjYWNoZWQ7XG59XG5cbi8qKlxuICogQSBsb3ctbGV2ZWwgc2VsZWN0aW9uIGZ1bmN0aW9uIHRoYXQgd29ya3Mgd2l0aCBqUXVlcnkncyBjb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHNlbGVjdG9yIEEgc2VsZWN0b3Igb3IgYSBwcmUtY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbiBidWlsdCB3aXRoIGpRdWVyeSBzZWxlY3RvciBjb21waWxlXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRleHRcbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHRzXVxuICogQHBhcmFtIHtBcnJheX0gW3NlZWRdIEEgc2V0IG9mIGVsZW1lbnRzIHRvIG1hdGNoIGFnYWluc3RcbiAqL1xuZnVuY3Rpb24gc2VsZWN0KCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIGksIHRva2VucywgdG9rZW4sIHR5cGUsIGZpbmQsXG5cdFx0Y29tcGlsZWQgPSB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBzZWxlY3Rvcixcblx0XHRtYXRjaCA9ICFzZWVkICYmIHRva2VuaXplKCAoIHNlbGVjdG9yID0gY29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IgKSApO1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNlbGVjdG9yIGluIHRoZSBsaXN0IGFuZCBubyBzZWVkXG5cdC8vICh0aGUgbGF0dGVyIG9mIHdoaWNoIGd1YXJhbnRlZXMgdXMgY29udGV4dClcblx0aWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7XG5cblx0XHQvLyBSZWR1Y2UgY29udGV4dCBpZiB0aGUgbGVhZGluZyBjb21wb3VuZCBzZWxlY3RvciBpcyBhbiBJRFxuXHRcdHRva2VucyA9IG1hdGNoWyAwIF0gPSBtYXRjaFsgMCBdLnNsaWNlKCAwICk7XG5cdFx0aWYgKCB0b2tlbnMubGVuZ3RoID4gMiAmJiAoIHRva2VuID0gdG9rZW5zWyAwIF0gKS50eXBlID09PSBcIklEXCIgJiZcblx0XHRcdFx0Y29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJiBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIDEgXS50eXBlIF0gKSB7XG5cblx0XHRcdGNvbnRleHQgPSAoIEV4cHIuZmluZC5JRChcblx0XHRcdFx0dG9rZW4ubWF0Y2hlc1sgMCBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksXG5cdFx0XHRcdGNvbnRleHRcblx0XHRcdCkgfHwgW10gKVsgMCBdO1xuXHRcdFx0aWYgKCAhY29udGV4dCApIHtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdC8vIFByZWNvbXBpbGVkIG1hdGNoZXJzIHdpbGwgc3RpbGwgdmVyaWZ5IGFuY2VzdHJ5LCBzbyBzdGVwIHVwIGEgbGV2ZWxcblx0XHRcdH0gZWxzZSBpZiAoIGNvbXBpbGVkICkge1xuXHRcdFx0XHRjb250ZXh0ID0gY29udGV4dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKCB0b2tlbnMuc2hpZnQoKS52YWx1ZS5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGZXRjaCBhIHNlZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nXG5cdFx0aSA9IG1hdGNoRXhwci5uZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSA/IDAgOiB0b2tlbnMubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG9rZW4gPSB0b2tlbnNbIGkgXTtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRvclxuXHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyAoIHR5cGUgPSB0b2tlbi50eXBlICkgXSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICggZmluZCA9IEV4cHIuZmluZFsgdHlwZSBdICkgKSB7XG5cblx0XHRcdFx0Ly8gU2VhcmNoLCBleHBhbmRpbmcgY29udGV4dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzXG5cdFx0XHRcdGlmICggKCBzZWVkID0gZmluZChcblx0XHRcdFx0XHR0b2tlbi5tYXRjaGVzWyAwIF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSxcblx0XHRcdFx0XHRyc2libGluZy50ZXN0KCB0b2tlbnNbIDAgXS50eXBlICkgJiZcblx0XHRcdFx0XHRcdHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdFx0XHRcdCkgKSApIHtcblxuXHRcdFx0XHRcdC8vIElmIHNlZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJldHVybiBlYXJseVxuXHRcdFx0XHRcdHRva2Vucy5zcGxpY2UoIGksIDEgKTtcblx0XHRcdFx0XHRzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRvU2VsZWN0b3IoIHRva2VucyApO1xuXHRcdFx0XHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2VlZCApO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDb21waWxlIGFuZCBleGVjdXRlIGEgZmlsdGVyaW5nIGZ1bmN0aW9uIGlmIG9uZSBpcyBub3QgcHJvdmlkZWRcblx0Ly8gUHJvdmlkZSBgbWF0Y2hgIHRvIGF2b2lkIHJldG9rZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZVxuXHQoIGNvbXBpbGVkIHx8IGNvbXBpbGUoIHNlbGVjdG9yLCBtYXRjaCApICkoXG5cdFx0c2VlZCxcblx0XHRjb250ZXh0LFxuXHRcdCFkb2N1bWVudElzSFRNTCxcblx0XHRyZXN1bHRzLFxuXHRcdCFjb250ZXh0IHx8IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0KTtcblx0cmV0dXJuIHJlc3VsdHM7XG59XG5cbi8vIE9uZS10aW1lIGFzc2lnbm1lbnRzXG5cbi8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgLSA0LjErXG4vLyBTb3J0IHN0YWJpbGl0eVxuc3VwcG9ydC5zb3J0U3RhYmxlID0gZXhwYW5kby5zcGxpdCggXCJcIiApLnNvcnQoIHNvcnRPcmRlciApLmpvaW4oIFwiXCIgKSA9PT0gZXhwYW5kbztcblxuLy8gSW5pdGlhbGl6ZSBhZ2FpbnN0IHRoZSBkZWZhdWx0IGRvY3VtZW50XG5zZXREb2N1bWVudCgpO1xuXG4vLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIC0gNC4xK1xuLy8gRGV0YWNoZWQgbm9kZXMgY29uZm91bmRpbmdseSBmb2xsb3cgKmVhY2ggb3RoZXIqXG5zdXBwb3J0LnNvcnREZXRhY2hlZCA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXG5cdC8vIFNob3VsZCByZXR1cm4gMSwgYnV0IHJldHVybnMgNCAoZm9sbG93aW5nKVxuXHRyZXR1cm4gZWwuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZmllbGRzZXRcIiApICkgJiAxO1xufSApO1xuXG5qUXVlcnkuZmluZCA9IGZpbmQ7XG5cbi8vIERlcHJlY2F0ZWRcbmpRdWVyeS5leHByWyBcIjpcIiBdID0galF1ZXJ5LmV4cHIucHNldWRvcztcbmpRdWVyeS51bmlxdWUgPSBqUXVlcnkudW5pcXVlU29ydDtcblxuLy8gVGhlc2UgaGF2ZSBhbHdheXMgYmVlbiBwcml2YXRlLCBidXQgdGhleSB1c2VkIHRvIGJlIGRvY3VtZW50ZWQgYXMgcGFydCBvZlxuLy8gU2l6emxlIHNvIGxldCdzIG1haW50YWluIHRoZW0gZm9yIG5vdyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcHVycG9zZXMuXG5maW5kLmNvbXBpbGUgPSBjb21waWxlO1xuZmluZC5zZWxlY3QgPSBzZWxlY3Q7XG5maW5kLnNldERvY3VtZW50ID0gc2V0RG9jdW1lbnQ7XG5maW5kLnRva2VuaXplID0gdG9rZW5pemU7XG5cbmZpbmQuZXNjYXBlID0galF1ZXJ5LmVzY2FwZVNlbGVjdG9yO1xuZmluZC5nZXRUZXh0ID0galF1ZXJ5LnRleHQ7XG5maW5kLmlzWE1MID0galF1ZXJ5LmlzWE1MRG9jO1xuZmluZC5zZWxlY3RvcnMgPSBqUXVlcnkuZXhwcjtcbmZpbmQuc3VwcG9ydCA9IGpRdWVyeS5zdXBwb3J0O1xuZmluZC51bmlxdWVTb3J0ID0galF1ZXJ5LnVuaXF1ZVNvcnQ7XG5cblx0LyogZXNsaW50LWVuYWJsZSAqL1xuXG59ICkoKTtcblxuXG52YXIgZGlyID0gZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwgKSB7XG5cdHZhciBtYXRjaGVkID0gW10sXG5cdFx0dHJ1bmNhdGUgPSB1bnRpbCAhPT0gdW5kZWZpbmVkO1xuXG5cdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSAmJiBlbGVtLm5vZGVUeXBlICE9PSA5ICkge1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGlmICggdHJ1bmNhdGUgJiYgalF1ZXJ5KCBlbGVtICkuaXMoIHVudGlsICkgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgc2libGluZ3MgPSBmdW5jdGlvbiggbiwgZWxlbSApIHtcblx0dmFyIG1hdGNoZWQgPSBbXTtcblxuXHRmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkge1xuXHRcdGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkge1xuXHRcdFx0bWF0Y2hlZC5wdXNoKCBuICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0O1xuXG52YXIgcnNpbmdsZVRhZyA9ICggL148KFthLXpdW15cXC9cXDA+OlxceDIwXFx0XFxyXFxuXFxmXSopW1xceDIwXFx0XFxyXFxuXFxmXSpcXC8/Pig/OjxcXC9cXDE+fCkkL2kgKTtcblxuXG5cbi8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90XG5mdW5jdGlvbiB3aW5ub3coIGVsZW1lbnRzLCBxdWFsaWZpZXIsIG5vdCApIHtcblx0aWYgKCBpc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBTaW5nbGUgZWxlbWVudFxuXHRpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gQXJyYXlsaWtlIG9mIGVsZW1lbnRzIChqUXVlcnksIGFyZ3VtZW50cywgQXJyYXkpXG5cdGlmICggdHlwZW9mIHF1YWxpZmllciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGluZGV4T2YuY2FsbCggcXVhbGlmaWVyLCBlbGVtICkgPiAtMSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRmlsdGVyZWQgZGlyZWN0bHkgZm9yIGJvdGggc2ltcGxlIGFuZCBjb21wbGV4IHNlbGVjdG9yc1xuXHRyZXR1cm4galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cywgbm90ICk7XG59XG5cbmpRdWVyeS5maWx0ZXIgPSBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHtcblx0dmFyIGVsZW0gPSBlbGVtc1sgMCBdO1xuXG5cdGlmICggbm90ICkge1xuXHRcdGV4cHIgPSBcIjpub3QoXCIgKyBleHByICsgXCIpXCI7XG5cdH1cblxuXHRpZiAoIGVsZW1zLmxlbmd0aCA9PT0gMSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGVsZW0sIGV4cHIgKSA/IFsgZWxlbSBdIDogW107XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlcyggZXhwciwgalF1ZXJ5LmdyZXAoIGVsZW1zLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTtcblx0fSApICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgaSwgcmV0LFxuXHRcdFx0bGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRzZWxmID0gdGhpcztcblxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoIHNlbGVjdG9yICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKSApO1xuXHRcdH1cblxuXHRcdHJldCA9IHRoaXMucHVzaFN0YWNrKCBbXSApO1xuXG5cdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGpRdWVyeS5maW5kKCBzZWxlY3Rvciwgc2VsZlsgaSBdLCByZXQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbGVuID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCByZXQgKSA6IHJldDtcblx0fSxcblx0ZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCBmYWxzZSApICk7XG5cdH0sXG5cdG5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgdHJ1ZSApICk7XG5cdH0sXG5cdGlzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuICEhd2lubm93KFxuXHRcdFx0dGhpcyxcblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIHBvc2l0aW9uYWwvcmVsYXRpdmUgc2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJldHVybmVkIHNldFxuXHRcdFx0Ly8gc28gJChcInA6Zmlyc3RcIikuaXMoXCJwOmxhc3RcIikgd29uJ3QgcmV0dXJuIHRydWUgZm9yIGEgZG9jIHdpdGggdHdvIFwicFwiLlxuXHRcdFx0dHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICYmIHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGpRdWVyeSggc2VsZWN0b3IgKSA6XG5cdFx0XHRcdHNlbGVjdG9yIHx8IFtdLFxuXHRcdFx0ZmFsc2Vcblx0XHQpLmxlbmd0aDtcblx0fVxufSApO1xuXG5cbi8vIEluaXRpYWxpemUgYSBqUXVlcnkgb2JqZWN0XG5cblxuLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBqUXVlcnkoZG9jdW1lbnQpXG52YXIgcm9vdGpRdWVyeSxcblxuXHQvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5nc1xuXHQvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAodHJhYy05NTIxKVxuXHQvLyBTdHJpY3QgSFRNTCByZWNvZ25pdGlvbiAodHJhYy0xMTI5MDogbXVzdCBzdGFydCB3aXRoIDwpXG5cdC8vIFNob3J0Y3V0IHNpbXBsZSAjaWQgY2FzZSBmb3Igc3BlZWRcblx0cnF1aWNrRXhwciA9IC9eKD86XFxzKig8W1xcd1xcV10rPilbXj5dKnwjKFtcXHctXSspKSQvLFxuXG5cdGluaXQgPSBqUXVlcnkuZm4uaW5pdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcm9vdCApIHtcblx0XHR2YXIgbWF0Y2gsIGVsZW07XG5cblx0XHQvLyBIQU5ETEU6ICQoXCJcIiksICQobnVsbCksICQodW5kZWZpbmVkKSwgJChmYWxzZSlcblx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdC8vIE1ldGhvZCBpbml0KCkgYWNjZXB0cyBhbiBhbHRlcm5hdGUgcm9vdGpRdWVyeVxuXHRcdC8vIHNvIG1pZ3JhdGUgY2FuIHN1cHBvcnQgalF1ZXJ5LnN1YiAoZ2gtMjEwMSlcblx0XHRyb290ID0gcm9vdCB8fCByb290alF1ZXJ5O1xuXG5cdFx0Ly8gSGFuZGxlIEhUTUwgc3RyaW5nc1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0aWYgKCBzZWxlY3RvclsgMCBdID09PSBcIjxcIiAmJlxuXHRcdFx0XHRzZWxlY3Rvclsgc2VsZWN0b3IubGVuZ3RoIC0gMSBdID09PSBcIj5cIiAmJlxuXHRcdFx0XHRzZWxlY3Rvci5sZW5ndGggPj0gMyApIHtcblxuXHRcdFx0XHQvLyBBc3N1bWUgdGhhdCBzdHJpbmdzIHRoYXQgc3RhcnQgYW5kIGVuZCB3aXRoIDw+IGFyZSBIVE1MIGFuZCBza2lwIHRoZSByZWdleCBjaGVja1xuXHRcdFx0XHRtYXRjaCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1hdGNoIGh0bWwgb3IgbWFrZSBzdXJlIG5vIGNvbnRleHQgaXMgc3BlY2lmaWVkIGZvciAjaWRcblx0XHRcdGlmICggbWF0Y2ggJiYgKCBtYXRjaFsgMSBdIHx8ICFjb250ZXh0ICkgKSB7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwpIC0+ICQoYXJyYXkpXG5cdFx0XHRcdGlmICggbWF0Y2hbIDEgXSApIHtcblx0XHRcdFx0XHRjb250ZXh0ID0gY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSA/IGNvbnRleHRbIDAgXSA6IGNvbnRleHQ7XG5cblx0XHRcdFx0XHQvLyBPcHRpb24gdG8gcnVuIHNjcmlwdHMgaXMgdHJ1ZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbGx5IGxldCB0aGUgZXJyb3IgYmUgdGhyb3duIGlmIHBhcnNlSFRNTCBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcywgalF1ZXJ5LnBhcnNlSFRNTChcblx0XHRcdFx0XHRcdG1hdGNoWyAxIF0sXG5cdFx0XHRcdFx0XHRjb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3VtZW50LFxuXHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdCkgKTtcblxuXHRcdFx0XHRcdC8vIEhBTkRMRTogJChodG1sLCBwcm9wcylcblx0XHRcdFx0XHRpZiAoIHJzaW5nbGVUYWcudGVzdCggbWF0Y2hbIDEgXSApICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb250ZXh0ICkgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCBtYXRjaCBpbiBjb250ZXh0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFByb3BlcnRpZXMgb2YgY29udGV4dCBhcmUgY2FsbGVkIGFzIG1ldGhvZHMgaWYgcG9zc2libGVcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGlzWyBtYXRjaCBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpc1sgbWF0Y2ggXSggY29udGV4dFsgbWF0Y2ggXSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmFuZCBvdGhlcndpc2Ugc2V0IGFzIGF0dHJpYnV0ZXNcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmF0dHIoIG1hdGNoLCBjb250ZXh0WyBtYXRjaCBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoI2lkKVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggbWF0Y2hbIDIgXSApO1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdFxuXHRcdFx0XHRcdFx0dGhpc1sgMCBdID0gZWxlbTtcblx0XHRcdFx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsICQoLi4uKSlcblx0XHRcdH0gZWxzZSBpZiAoICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkge1xuXHRcdFx0XHRyZXR1cm4gKCBjb250ZXh0IHx8IHJvb3QgKS5maW5kKCBzZWxlY3RvciApO1xuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgY29udGV4dClcblx0XHRcdC8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQgdG86ICQoY29udGV4dCkuZmluZChleHByKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoIGNvbnRleHQgKS5maW5kKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0Ly8gSEFORExFOiAkKERPTUVsZW1lbnQpXG5cdFx0fSBlbHNlIGlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7XG5cdFx0XHR0aGlzWyAwIF0gPSBzZWxlY3Rvcjtcblx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0Ly8gSEFORExFOiAkKGZ1bmN0aW9uKVxuXHRcdC8vIFNob3J0Y3V0IGZvciBkb2N1bWVudCByZWFkeVxuXHRcdH0gZWxzZSBpZiAoIGlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7XG5cdFx0XHRyZXR1cm4gcm9vdC5yZWFkeSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0cm9vdC5yZWFkeSggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gRXhlY3V0ZSBpbW1lZGlhdGVseSBpZiByZWFkeSBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRzZWxlY3RvciggalF1ZXJ5ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yLCB0aGlzICk7XG5cdH07XG5cbi8vIEdpdmUgdGhlIGluaXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGluc3RhbnRpYXRpb25cbmluaXQucHJvdG90eXBlID0galF1ZXJ5LmZuO1xuXG4vLyBJbml0aWFsaXplIGNlbnRyYWwgcmVmZXJlbmNlXG5yb290alF1ZXJ5ID0galF1ZXJ5KCBkb2N1bWVudCApO1xuXG5cbnZhciBycGFyZW50c3ByZXYgPSAvXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxcblxuXHQvLyBNZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhIHVuaXF1ZSBzZXQgd2hlbiBzdGFydGluZyBmcm9tIGEgdW5pcXVlIHNldFxuXHRndWFyYW50ZWVkVW5pcXVlID0ge1xuXHRcdGNoaWxkcmVuOiB0cnVlLFxuXHRcdGNvbnRlbnRzOiB0cnVlLFxuXHRcdG5leHQ6IHRydWUsXG5cdFx0cHJldjogdHJ1ZVxuXHR9O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGhhczogZnVuY3Rpb24oIHRhcmdldCApIHtcblx0XHR2YXIgdGFyZ2V0cyA9IGpRdWVyeSggdGFyZ2V0LCB0aGlzICksXG5cdFx0XHRsID0gdGFyZ2V0cy5sZW5ndGg7XG5cblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggdGhpcywgdGFyZ2V0c1sgaSBdICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Y2xvc2VzdDogZnVuY3Rpb24oIHNlbGVjdG9ycywgY29udGV4dCApIHtcblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRtYXRjaGVkID0gW10sXG5cdFx0XHR0YXJnZXRzID0gdHlwZW9mIHNlbGVjdG9ycyAhPT0gXCJzdHJpbmdcIiAmJiBqUXVlcnkoIHNlbGVjdG9ycyApO1xuXG5cdFx0Ly8gUG9zaXRpb25hbCBzZWxlY3RvcnMgbmV2ZXIgbWF0Y2gsIHNpbmNlIHRoZXJlJ3Mgbm8gX3NlbGVjdGlvbl8gY29udGV4dFxuXHRcdGlmICggIXJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3JzICkgKSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZvciAoIGN1ciA9IHRoaXNbIGkgXTsgY3VyICYmIGN1ciAhPT0gY29udGV4dDsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cblx0XHRcdFx0XHQvLyBBbHdheXMgc2tpcCBkb2N1bWVudCBmcmFnbWVudHNcblx0XHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA8IDExICYmICggdGFyZ2V0cyA/XG5cdFx0XHRcdFx0XHR0YXJnZXRzLmluZGV4KCBjdXIgKSA+IC0xIDpcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcGFzcyBub24tZWxlbWVudHMgdG8galF1ZXJ5I2ZpbmRcblx0XHRcdFx0XHRcdGN1ci5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGN1ciwgc2VsZWN0b3JzICkgKSApIHtcblxuXHRcdFx0XHRcdFx0bWF0Y2hlZC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKSA6IG1hdGNoZWQgKTtcblx0fSxcblxuXHQvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgd2l0aGluIHRoZSBzZXRcblx0aW5kZXg6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gTm8gYXJndW1lbnQsIHJldHVybiBpbmRleCBpbiBwYXJlbnRcblx0XHRpZiAoICFlbGVtICkge1xuXHRcdFx0cmV0dXJuICggdGhpc1sgMCBdICYmIHRoaXNbIDAgXS5wYXJlbnROb2RlICkgPyB0aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aCA6IC0xO1xuXHRcdH1cblxuXHRcdC8vIEluZGV4IGluIHNlbGVjdG9yXG5cdFx0aWYgKCB0eXBlb2YgZWxlbSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBpbmRleE9mLmNhbGwoIGpRdWVyeSggZWxlbSApLCB0aGlzWyAwIF0gKTtcblx0XHR9XG5cblx0XHQvLyBMb2NhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkZXNpcmVkIGVsZW1lbnRcblx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCB0aGlzLFxuXG5cdFx0XHQvLyBJZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWRcblx0XHRcdGVsZW0uanF1ZXJ5ID8gZWxlbVsgMCBdIDogZWxlbVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkOiBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKFxuXHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoXG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcy5nZXQoKSwgalF1ZXJ5KCBzZWxlY3RvciwgY29udGV4dCApIClcblx0XHRcdClcblx0XHQpO1xuXHR9LFxuXG5cdGFkZEJhY2s6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5hZGQoIHNlbGVjdG9yID09IG51bGwgP1xuXHRcdFx0dGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlciggc2VsZWN0b3IgKVxuXHRcdCk7XG5cdH1cbn0gKTtcblxuZnVuY3Rpb24gc2libGluZyggY3VyLCBkaXIgKSB7XG5cdHdoaWxlICggKCBjdXIgPSBjdXJbIGRpciBdICkgJiYgY3VyLm5vZGVUeXBlICE9PSAxICkge31cblx0cmV0dXJuIGN1cjtcbn1cblxualF1ZXJ5LmVhY2goIHtcblx0cGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7XG5cdH0sXG5cdHBhcmVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiICk7XG5cdH0sXG5cdHBhcmVudHNVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInBhcmVudE5vZGVcIiwgdW50aWwgKTtcblx0fSxcblx0bmV4dDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xuXHR9LFxuXHRuZXh0QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xuXHR9LFxuXHRuZXh0VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0c2libGluZ3M6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggKCBlbGVtLnBhcmVudE5vZGUgfHwge30gKS5maXJzdENoaWxkLCBlbGVtICk7XG5cdH0sXG5cdGNoaWxkcmVuOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZ3MoIGVsZW0uZmlyc3RDaGlsZCApO1xuXHR9LFxuXHRjb250ZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0aWYgKCBlbGVtLmNvbnRlbnREb2N1bWVudCAhPSBudWxsICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExK1xuXHRcdFx0Ly8gPG9iamVjdD4gZWxlbWVudHMgd2l0aCBubyBgZGF0YWAgYXR0cmlidXRlIGhhcyBhbiBvYmplY3Rcblx0XHRcdC8vIGBjb250ZW50RG9jdW1lbnRgIHdpdGggYSBgbnVsbGAgcHJvdG90eXBlLlxuXHRcdFx0Z2V0UHJvdG8oIGVsZW0uY29udGVudERvY3VtZW50ICkgKSB7XG5cblx0XHRcdHJldHVybiBlbGVtLmNvbnRlbnREb2N1bWVudDtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seSwgaU9TIDcgb25seSwgQW5kcm9pZCBCcm93c2VyIDw9NC4zIG9ubHlcblx0XHQvLyBUcmVhdCB0aGUgdGVtcGxhdGUgZWxlbWVudCBhcyBhIHJlZ3VsYXIgb25lIGluIGJyb3dzZXJzIHRoYXRcblx0XHQvLyBkb24ndCBzdXBwb3J0IGl0LlxuXHRcdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGVtcGxhdGVcIiApICkge1xuXHRcdFx0ZWxlbSA9IGVsZW0uY29udGVudCB8fCBlbGVtO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTtcblx0fVxufSwgZnVuY3Rpb24oIG5hbWUsIGZuICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7XG5cdFx0dmFyIG1hdGNoZWQgPSBqUXVlcnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKTtcblxuXHRcdGlmICggbmFtZS5zbGljZSggLTUgKSAhPT0gXCJVbnRpbFwiICkge1xuXHRcdFx0c2VsZWN0b3IgPSB1bnRpbDtcblx0XHR9XG5cblx0XHRpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG1hdGNoZWQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgbWF0Y2hlZCApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5sZW5ndGggPiAxICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgZHVwbGljYXRlc1xuXHRcdFx0aWYgKCAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdICkge1xuXHRcdFx0XHRqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXZlcnNlIG9yZGVyIGZvciBwYXJlbnRzKiBhbmQgcHJldi1kZXJpdmF0aXZlc1xuXHRcdFx0aWYgKCBycGFyZW50c3ByZXYudGVzdCggbmFtZSApICkge1xuXHRcdFx0XHRtYXRjaGVkLnJldmVyc2UoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQgKTtcblx0fTtcbn0gKTtcbnZhciBybm90aHRtbHdoaXRlID0gKCAvW15cXHgyMFxcdFxcclxcblxcZl0rL2cgKTtcblxuXG5cbi8vIENvbnZlcnQgU3RyaW5nLWZvcm1hdHRlZCBvcHRpb25zIGludG8gT2JqZWN0LWZvcm1hdHRlZCBvbmVzXG5mdW5jdGlvbiBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkge1xuXHR2YXIgb2JqZWN0ID0ge307XG5cdGpRdWVyeS5lYWNoKCBvcHRpb25zLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBmbGFnICkge1xuXHRcdG9iamVjdFsgZmxhZyBdID0gdHJ1ZTtcblx0fSApO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG4vKlxuICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gKlxuICpcdG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3dcbiAqXHRcdFx0dGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVjdFxuICpcbiAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlXG4gKiBcImZpcmVkXCIgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogUG9zc2libGUgb3B0aW9uczpcbiAqXG4gKlx0b25jZTpcdFx0XHR3aWxsIGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdG1lbW9yeTpcdFx0XHR3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkXG4gKlx0XHRcdFx0XHRhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5IHdpdGggdGhlIGxhdGVzdCBcIm1lbW9yaXplZFwiXG4gKlx0XHRcdFx0XHR2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0dW5pcXVlOlx0XHRcdHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KVxuICpcbiAqXHRzdG9wT25GYWxzZTpcdGludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICpcbiAqL1xualF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2JqZWN0LWZvcm1hdHRlZCBpZiBuZWVkZWRcblx0Ly8gKHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KVxuXHRvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIgP1xuXHRcdGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSA6XG5cdFx0alF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTtcblxuXHR2YXIgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5IGZpcmluZ1xuXHRcdGZpcmluZyxcblxuXHRcdC8vIExhc3QgZmlyZSB2YWx1ZSBmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzXG5cdFx0bWVtb3J5LFxuXG5cdFx0Ly8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFscmVhZHkgZmlyZWRcblx0XHRmaXJlZCxcblxuXHRcdC8vIEZsYWcgdG8gcHJldmVudCBmaXJpbmdcblx0XHRsb2NrZWQsXG5cblx0XHQvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdFxuXHRcdGxpc3QgPSBbXSxcblxuXHRcdC8vIFF1ZXVlIG9mIGV4ZWN1dGlvbiBkYXRhIGZvciByZXBlYXRhYmxlIGxpc3RzXG5cdFx0cXVldWUgPSBbXSxcblxuXHRcdC8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IGFkZC9yZW1vdmUgYXMgbmVlZGVkKVxuXHRcdGZpcmluZ0luZGV4ID0gLTEsXG5cblx0XHQvLyBGaXJlIGNhbGxiYWNrc1xuXHRcdGZpcmUgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5mb3JjZSBzaW5nbGUtZmlyaW5nXG5cdFx0XHRsb2NrZWQgPSBsb2NrZWQgfHwgb3B0aW9ucy5vbmNlO1xuXG5cdFx0XHQvLyBFeGVjdXRlIGNhbGxiYWNrcyBmb3IgYWxsIHBlbmRpbmcgZXhlY3V0aW9ucyxcblx0XHRcdC8vIHJlc3BlY3RpbmcgZmlyaW5nSW5kZXggb3ZlcnJpZGVzIGFuZCBydW50aW1lIGNoYW5nZXNcblx0XHRcdGZpcmVkID0gZmlyaW5nID0gdHJ1ZTtcblx0XHRcdGZvciAoIDsgcXVldWUubGVuZ3RoOyBmaXJpbmdJbmRleCA9IC0xICkge1xuXHRcdFx0XHRtZW1vcnkgPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0XHR3aGlsZSAoICsrZmlyaW5nSW5kZXggPCBsaXN0Lmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdC8vIFJ1biBjYWxsYmFjayBhbmQgY2hlY2sgZm9yIGVhcmx5IHRlcm1pbmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBsaXN0WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBtZW1vcnlbIDAgXSwgbWVtb3J5WyAxIF0gKSA9PT0gZmFsc2UgJiZcblx0XHRcdFx0XHRcdG9wdGlvbnMuc3RvcE9uRmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdC8vIEp1bXAgdG8gZW5kIGFuZCBmb3JnZXQgdGhlIGRhdGEgc28gLmFkZCBkb2Vzbid0IHJlLWZpcmVcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGg7XG5cdFx0XHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yZ2V0IHRoZSBkYXRhIGlmIHdlJ3JlIGRvbmUgd2l0aCBpdFxuXHRcdFx0aWYgKCAhb3B0aW9ucy5tZW1vcnkgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRmaXJpbmcgPSBmYWxzZTtcblxuXHRcdFx0Ly8gQ2xlYW4gdXAgaWYgd2UncmUgZG9uZSBmaXJpbmcgZm9yIGdvb2Rcblx0XHRcdGlmICggbG9ja2VkICkge1xuXG5cdFx0XHRcdC8vIEtlZXAgYW4gZW1wdHkgbGlzdCBpZiB3ZSBoYXZlIGRhdGEgZm9yIGZ1dHVyZSBhZGQgY2FsbHNcblx0XHRcdFx0aWYgKCBtZW1vcnkgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgdGhpcyBvYmplY3QgaXMgc3BlbnRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsaXN0ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBBY3R1YWwgQ2FsbGJhY2tzIG9iamVjdFxuXHRcdHNlbGYgPSB7XG5cblx0XHRcdC8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gdGhlIGxpc3Rcblx0XHRcdGFkZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblxuXHRcdFx0XHRcdC8vIElmIHdlIGhhdmUgbWVtb3J5IGZyb20gYSBwYXN0IHJ1biwgd2Ugc2hvdWxkIGZpcmUgYWZ0ZXIgYWRkaW5nXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdFx0cXVldWUucHVzaCggbWVtb3J5ICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0KCBmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggYXJncywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGlzdC5wdXNoKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIHRvVHlwZSggYXJnICkgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5XG5cdFx0XHRcdFx0XHRcdFx0YWRkKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdH0gKSggYXJndW1lbnRzICk7XG5cblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3Rcblx0XHRcdHJlbW92ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0dmFyIGluZGV4O1xuXHRcdFx0XHRcdHdoaWxlICggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0bGlzdC5zcGxpY2UoIGluZGV4LCAxICk7XG5cblx0XHRcdFx0XHRcdC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlc1xuXHRcdFx0XHRcdFx0aWYgKCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHtcblx0XHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXgtLTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDaGVjayBpZiBhIGdpdmVuIGNhbGxiYWNrIGlzIGluIHRoZSBsaXN0LlxuXHRcdFx0Ly8gSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHJldHVybiB3aGV0aGVyIG9yIG5vdCBsaXN0IGhhcyBjYWxsYmFja3MgYXR0YWNoZWQuXG5cdFx0XHRoYXM6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0cmV0dXJuIGZuID9cblx0XHRcdFx0XHRqUXVlcnkuaW5BcnJheSggZm4sIGxpc3QgKSA+IC0xIDpcblx0XHRcdFx0XHRsaXN0Lmxlbmd0aCA+IDA7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0XG5cdFx0XHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlIGFuZCAuYWRkXG5cdFx0XHQvLyBBYm9ydCBhbnkgY3VycmVudC9wZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdC8vIENsZWFyIGFsbCBjYWxsYmFja3MgYW5kIHZhbHVlc1xuXHRcdFx0ZGlzYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRkaXNhYmxlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhbGlzdDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmVcblx0XHRcdC8vIEFsc28gZGlzYWJsZSAuYWRkIHVubGVzcyB3ZSBoYXZlIG1lbW9yeSAoc2luY2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QpXG5cdFx0XHQvLyBBYm9ydCBhbnkgcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHRsb2NrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0aWYgKCAhbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0bG9ja2VkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhbG9ja2VkO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkge1xuXHRcdFx0XHRpZiAoICFsb2NrZWQgKSB7XG5cdFx0XHRcdFx0YXJncyA9IGFyZ3MgfHwgW107XG5cdFx0XHRcdFx0YXJncyA9IFsgY29udGV4dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBhcmdzICk7XG5cdFx0XHRcdFx0aWYgKCAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzXG5cdFx0XHRmaXJlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0c2VsZi5maXJlV2l0aCggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiB0aGUgY2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlXG5cdFx0XHRmaXJlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWZpcmVkO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0cmV0dXJuIHNlbGY7XG59O1xuXG5cbmZ1bmN0aW9uIElkZW50aXR5KCB2ICkge1xuXHRyZXR1cm4gdjtcbn1cbmZ1bmN0aW9uIFRocm93ZXIoIGV4ICkge1xuXHR0aHJvdyBleDtcbn1cblxuZnVuY3Rpb24gYWRvcHRWYWx1ZSggdmFsdWUsIHJlc29sdmUsIHJlamVjdCwgbm9WYWx1ZSApIHtcblx0dmFyIG1ldGhvZDtcblxuXHR0cnkge1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIHByb21pc2UgYXNwZWN0IGZpcnN0IHRvIHByaXZpbGVnZSBzeW5jaHJvbm91cyBiZWhhdmlvclxuXHRcdGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS5wcm9taXNlICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSApLmRvbmUoIHJlc29sdmUgKS5mYWlsKCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIHRoZW5hYmxlc1xuXHRcdH0gZWxzZSBpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUudGhlbiApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUsIHJlc29sdmUsIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgbm9uLXRoZW5hYmxlc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvbnRyb2wgYHJlc29sdmVgIGFyZ3VtZW50cyBieSBsZXR0aW5nIEFycmF5I3NsaWNlIGNhc3QgYm9vbGVhbiBgbm9WYWx1ZWAgdG8gaW50ZWdlcjpcblx0XHRcdC8vICogZmFsc2U6IFsgdmFsdWUgXS5zbGljZSggMCApID0+IHJlc29sdmUoIHZhbHVlIClcblx0XHRcdC8vICogdHJ1ZTogWyB2YWx1ZSBdLnNsaWNlKCAxICkgPT4gcmVzb2x2ZSgpXG5cdFx0XHRyZXNvbHZlLmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXS5zbGljZSggbm9WYWx1ZSApICk7XG5cdFx0fVxuXG5cdC8vIEZvciBQcm9taXNlcy9BKywgY29udmVydCBleGNlcHRpb25zIGludG8gcmVqZWN0aW9uc1xuXHQvLyBTaW5jZSBqUXVlcnkud2hlbiBkb2Vzbid0IHVud3JhcCB0aGVuYWJsZXMsIHdlIGNhbiBza2lwIHRoZSBleHRyYSBjaGVja3MgYXBwZWFyaW5nIGluXG5cdC8vIERlZmVycmVkI3RoZW4gdG8gY29uZGl0aW9uYWxseSBzdXBwcmVzcyByZWplY3Rpb24uXG5cdH0gY2F0Y2ggKCB2YWx1ZSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIG9ubHlcblx0XHQvLyBTdHJpY3QgbW9kZSBmdW5jdGlvbnMgaW52b2tlZCB3aXRob3V0IC5jYWxsLy5hcHBseSBnZXQgZ2xvYmFsLW9iamVjdCBjb250ZXh0XG5cdFx0cmVqZWN0LmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXSApO1xuXHR9XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHREZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7XG5cdFx0dmFyIHR1cGxlcyA9IFtcblxuXHRcdFx0XHQvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgY2FsbGJhY2tzLFxuXHRcdFx0XHQvLyAuLi4gLnRoZW4gaGFuZGxlcnMsIGFyZ3VtZW50IGluZGV4LCBbZmluYWwgc3RhdGVdXG5cdFx0XHRcdFsgXCJub3RpZnlcIiwgXCJwcm9ncmVzc1wiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLCAyIF0sXG5cdFx0XHRcdFsgXCJyZXNvbHZlXCIsIFwiZG9uZVwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMCwgXCJyZXNvbHZlZFwiIF0sXG5cdFx0XHRcdFsgXCJyZWplY3RcIiwgXCJmYWlsXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAxLCBcInJlamVjdGVkXCIgXVxuXHRcdFx0XSxcblx0XHRcdHN0YXRlID0gXCJwZW5kaW5nXCIsXG5cdFx0XHRwcm9taXNlID0ge1xuXHRcdFx0XHRzdGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbHdheXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGRlZmVycmVkLmRvbmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImNhdGNoXCI6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJvbWlzZS50aGVuKCBudWxsLCBmbiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEtlZXAgcGlwZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0cGlwZTogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkge1xuXHRcdFx0XHRcdHZhciBmbnMgPSBhcmd1bWVudHM7XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggX2ksIHR1cGxlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE1hcCB0dXBsZXMgKHByb2dyZXNzLCBkb25lLCBmYWlsKSB0byBhcmd1bWVudHMgKGRvbmUsIGZhaWwsIHByb2dyZXNzKVxuXHRcdFx0XHRcdFx0XHR2YXIgZm4gPSBpc0Z1bmN0aW9uKCBmbnNbIHR1cGxlWyA0IF0gXSApICYmIGZuc1sgdHVwbGVbIDQgXSBdO1xuXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLnByb2dyZXNzKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLm5vdGlmeSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5kb25lKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlc29sdmUgfSlcblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQuZmFpbChmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZWplY3QgfSlcblx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAxIF0gXSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkID0gZm4gJiYgZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgJiYgaXNGdW5jdGlvbiggcmV0dXJuZWQucHJvbWlzZSApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQucHJvbWlzZSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5wcm9ncmVzcyggbmV3RGVmZXIubm90aWZ5IClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmRvbmUoIG5ld0RlZmVyLnJlc29sdmUgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZmFpbCggbmV3RGVmZXIucmVqZWN0ICk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXShcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm4gPyBbIHJldHVybmVkIF0gOiBhcmd1bWVudHNcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRmbnMgPSBudWxsO1xuXHRcdFx0XHRcdH0gKS5wcm9taXNlKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoZW46IGZ1bmN0aW9uKCBvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgb25Qcm9ncmVzcyApIHtcblx0XHRcdFx0XHR2YXIgbWF4RGVwdGggPSAwO1xuXHRcdFx0XHRcdGZ1bmN0aW9uIHJlc29sdmUoIGRlcHRoLCBkZWZlcnJlZCwgaGFuZGxlciwgc3BlY2lhbCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBhcmd1bWVudHMsXG5cdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkLCB0aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuM1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElnbm9yZSBkb3VibGUtcmVzb2x1dGlvbiBhdHRlbXB0c1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCA8IG1heERlcHRoICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkID0gaGFuZGxlci5hcHBseSggdGhhdCwgYXJncyApO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4xXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC00OFxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCA9PT0gZGVmZXJyZWQucHJvbWlzZSgpICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCBcIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvblwiICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb25zIDIuMy4zLjEsIDMuNVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTRcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTc1XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBSZXRyaWV2ZSBgdGhlbmAgb25seSBvbmNlXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGVuID0gcmV0dXJuZWQgJiZcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy40XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTY0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgY2hlY2sgb2JqZWN0cyBhbmQgZnVuY3Rpb25zIGZvciB0aGVuYWJpbGl0eVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoIHR5cGVvZiByZXR1cm5lZCA9PT0gXCJvYmplY3RcIiB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiByZXR1cm5lZCA9PT0gXCJmdW5jdGlvblwiICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQudGhlbjtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGEgcmV0dXJuZWQgdGhlbmFibGVcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggdGhlbiApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFNwZWNpYWwgcHJvY2Vzc29ycyAobm90aWZ5KSBqdXN0IHdhaXQgZm9yIHJlc29sdXRpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBhbHNvIGhvb2sgaW50byBwcm9ncmVzc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIGRpc3JlZ2FyZCBvbGRlciByZXNvbHV0aW9uIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1heERlcHRoKys7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgVGhyb3dlciwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYWxsIG90aGVyIHJldHVybmVkIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IElkZW50aXR5ICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncyA9IFsgcmV0dXJuZWQgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFByb2Nlc3MgdGhlIHZhbHVlKHMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERlZmF1bHQgcHJvY2VzcyBpcyByZXNvbHZlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggc3BlY2lhbCB8fCBkZWZlcnJlZC5yZXNvbHZlV2l0aCApKCB0aGF0LCBhcmdzICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgbm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGNhdGNoIGFuZCByZWplY3QgZXhjZXB0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MgPSBzcGVjaWFsID9cblx0XHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3cgOlxuXHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayggZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5lcnJvciApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy40LjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC02MVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIElnbm9yZSBwb3N0LXJlc29sdXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKyAxID49IG1heERlcHRoICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhbmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3BlYyBiZWhhdmlvcilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gVGhyb3dlciApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncyA9IFsgZSBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCB0aGF0LCBhcmdzICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4xXG5cdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU3XG5cdFx0XHRcdFx0XHRcdC8vIFJlLXJlc29sdmUgcHJvbWlzZXMgaW1tZWRpYXRlbHkgdG8gZG9kZ2UgZmFsc2UgcmVqZWN0aW9uIGZyb21cblx0XHRcdFx0XHRcdFx0Ly8gc3Vic2VxdWVudCBlcnJvcnNcblx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCApIHtcblx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzKCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBDYWxsIGFuIG9wdGlvbmFsIGhvb2sgdG8gcmVjb3JkIHRoZSBlcnJvciwgaW4gY2FzZSBvZiBleGNlcHRpb25cblx0XHRcdFx0XHRcdFx0XHQvLyBzaW5jZSBpdCdzIG90aGVyd2lzZSBsb3N0IHdoZW4gZXhlY3V0aW9uIGdvZXMgYXN5bmNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5EZWZlcnJlZC5nZXRFcnJvckhvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLmVycm9yID0galF1ZXJ5LkRlZmVycmVkLmdldEVycm9ySG9vaygpO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gVGhlIGRlcHJlY2F0ZWQgYWxpYXMgb2YgdGhlIGFib3ZlLiBXaGlsZSB0aGUgbmFtZSBzdWdnZXN0c1xuXHRcdFx0XHRcdFx0XHRcdC8vIHJldHVybmluZyB0aGUgc3RhY2ssIG5vdCBhbiBlcnJvciBpbnN0YW5jZSwgalF1ZXJ5IGp1c3QgcGFzc2VzXG5cdFx0XHRcdFx0XHRcdFx0Ly8gaXQgZGlyZWN0bHkgdG8gYGNvbnNvbGUud2FybmAgc28gYm90aCB3aWxsIHdvcms7IGFuIGluc3RhbmNlXG5cdFx0XHRcdFx0XHRcdFx0Ly8ganVzdCBiZXR0ZXIgY29vcGVyYXRlcyB3aXRoIHNvdXJjZSBtYXBzLlxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLmVycm9yID0galF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggcHJvY2VzcyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblxuXHRcdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblByb2dyZXNzICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25Qcm9ncmVzcyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlci5ub3RpZnlXaXRoXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDEgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uRnVsZmlsbGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25GdWxmaWxsZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHlcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAyIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblJlamVjdGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25SZWplY3RlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRUaHJvd2VyXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkXG5cdFx0XHRcdC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3Rcblx0XHRcdFx0cHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRcdFx0XHRyZXR1cm4gb2JqICE9IG51bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWZlcnJlZCA9IHt9O1xuXG5cdFx0Ly8gQWRkIGxpc3Qtc3BlY2lmaWMgbWV0aG9kc1xuXHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHtcblx0XHRcdHZhciBsaXN0ID0gdHVwbGVbIDIgXSxcblx0XHRcdFx0c3RhdGVTdHJpbmcgPSB0dXBsZVsgNSBdO1xuXG5cdFx0XHQvLyBwcm9taXNlLnByb2dyZXNzID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZG9uZSA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmZhaWwgPSBsaXN0LmFkZFxuXHRcdFx0cHJvbWlzZVsgdHVwbGVbIDEgXSBdID0gbGlzdC5hZGQ7XG5cblx0XHRcdC8vIEhhbmRsZSBzdGF0ZVxuXHRcdFx0aWYgKCBzdGF0ZVN0cmluZyApIHtcblx0XHRcdFx0bGlzdC5hZGQoXG5cdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZXNvbHZlZFwiIChpLmUuLCBmdWxmaWxsZWQpXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVqZWN0ZWRcIlxuXHRcdFx0XHRcdFx0c3RhdGUgPSBzdGF0ZVN0cmluZztcblx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDIgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAzIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2NhbGxiYWNrcy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDIgXS5sb2NrLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMubG9ja1xuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0ubG9ja1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5maXJlXG5cdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0bGlzdC5hZGQoIHR1cGxlWyAzIF0uZmlyZSApO1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnkgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQubm90aWZ5V2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmUgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVzb2x2ZVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3QgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVqZWN0V2l0aCguLi4pIH1cblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IHVuZGVmaW5lZCA6IHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH07XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlV2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdFdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0gPSBsaXN0LmZpcmVXaXRoO1xuXHRcdH0gKTtcblxuXHRcdC8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZVxuXHRcdHByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTtcblxuXHRcdC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnlcblx0XHRpZiAoIGZ1bmMgKSB7XG5cdFx0XHRmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZlcnJlZCApO1xuXHRcdH1cblxuXHRcdC8vIEFsbCBkb25lIVxuXHRcdHJldHVybiBkZWZlcnJlZDtcblx0fSxcblxuXHQvLyBEZWZlcnJlZCBoZWxwZXJcblx0d2hlbjogZnVuY3Rpb24oIHNpbmdsZVZhbHVlICkge1xuXHRcdHZhclxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXNcblx0XHRcdHJlbWFpbmluZyA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cblx0XHRcdC8vIGNvdW50IG9mIHVucHJvY2Vzc2VkIGFyZ3VtZW50c1xuXHRcdFx0aSA9IHJlbWFpbmluZyxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgZnVsZmlsbG1lbnQgZGF0YVxuXHRcdFx0cmVzb2x2ZUNvbnRleHRzID0gQXJyYXkoIGkgKSxcblx0XHRcdHJlc29sdmVWYWx1ZXMgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSxcblxuXHRcdFx0Ly8gdGhlIHByaW1hcnkgRGVmZXJyZWRcblx0XHRcdHByaW1hcnkgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgY2FsbGJhY2sgZmFjdG9yeVxuXHRcdFx0dXBkYXRlRnVuYyA9IGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJlc29sdmVDb250ZXh0c1sgaSBdID0gdGhpcztcblx0XHRcdFx0XHRyZXNvbHZlVmFsdWVzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApIDogdmFsdWU7XG5cdFx0XHRcdFx0aWYgKCAhKCAtLXJlbWFpbmluZyApICkge1xuXHRcdFx0XHRcdFx0cHJpbWFyeS5yZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblxuXHRcdC8vIFNpbmdsZS0gYW5kIGVtcHR5IGFyZ3VtZW50cyBhcmUgYWRvcHRlZCBsaWtlIFByb21pc2UucmVzb2x2ZVxuXHRcdGlmICggcmVtYWluaW5nIDw9IDEgKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCBzaW5nbGVWYWx1ZSwgcHJpbWFyeS5kb25lKCB1cGRhdGVGdW5jKCBpICkgKS5yZXNvbHZlLCBwcmltYXJ5LnJlamVjdCxcblx0XHRcdFx0IXJlbWFpbmluZyApO1xuXG5cdFx0XHQvLyBVc2UgLnRoZW4oKSB0byB1bndyYXAgc2Vjb25kYXJ5IHRoZW5hYmxlcyAoY2YuIGdoLTMwMDApXG5cdFx0XHRpZiAoIHByaW1hcnkuc3RhdGUoKSA9PT0gXCJwZW5kaW5nXCIgfHxcblx0XHRcdFx0aXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIHJlc29sdmVWYWx1ZXNbIGkgXS50aGVuICkgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHByaW1hcnkudGhlbigpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGFyZ3VtZW50cyBhcmUgYWdncmVnYXRlZCBsaWtlIFByb21pc2UuYWxsIGFycmF5IGVsZW1lbnRzXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCByZXNvbHZlVmFsdWVzWyBpIF0sIHVwZGF0ZUZ1bmMoIGkgKSwgcHJpbWFyeS5yZWplY3QgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJpbWFyeS5wcm9taXNlKCk7XG5cdH1cbn0gKTtcblxuXG4vLyBUaGVzZSB1c3VhbGx5IGluZGljYXRlIGEgcHJvZ3JhbW1lciBtaXN0YWtlIGR1cmluZyBkZXZlbG9wbWVudCxcbi8vIHdhcm4gYWJvdXQgdGhlbSBBU0FQIHJhdGhlciB0aGFuIHN3YWxsb3dpbmcgdGhlbSBieSBkZWZhdWx0LlxudmFyIHJlcnJvck5hbWVzID0gL14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC87XG5cbi8vIElmIGBqUXVlcnkuRGVmZXJyZWQuZ2V0RXJyb3JIb29rYCBpcyBkZWZpbmVkLCBgYXN5bmNFcnJvcmAgaXMgYW4gZXJyb3Jcbi8vIGNhcHR1cmVkIGJlZm9yZSB0aGUgYXN5bmMgYmFycmllciB0byBnZXQgdGhlIG9yaWdpbmFsIGVycm9yIGNhdXNlXG4vLyB3aGljaCBtYXkgb3RoZXJ3aXNlIGJlIGhpZGRlbi5cbmpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rID0gZnVuY3Rpb24oIGVycm9yLCBhc3luY0Vycm9yICkge1xuXG5cdC8vIFN1cHBvcnQ6IElFIDggLSA5IG9ubHlcblx0Ly8gQ29uc29sZSBleGlzdHMgd2hlbiBkZXYgdG9vbHMgYXJlIG9wZW4sIHdoaWNoIGNhbiBoYXBwZW4gYXQgYW55IHRpbWVcblx0aWYgKCB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS53YXJuICYmIGVycm9yICYmIHJlcnJvck5hbWVzLnRlc3QoIGVycm9yLm5hbWUgKSApIHtcblx0XHR3aW5kb3cuY29uc29sZS53YXJuKCBcImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246IFwiICsgZXJyb3IubWVzc2FnZSxcblx0XHRcdGVycm9yLnN0YWNrLCBhc3luY0Vycm9yICk7XG5cdH1cbn07XG5cblxuXG5cbmpRdWVyeS5yZWFkeUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKCBlcnJvciApIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdHRocm93IGVycm9yO1xuXHR9ICk7XG59O1xuXG5cblxuXG4vLyBUaGUgZGVmZXJyZWQgdXNlZCBvbiBET00gcmVhZHlcbnZhciByZWFkeUxpc3QgPSBqUXVlcnkuRGVmZXJyZWQoKTtcblxualF1ZXJ5LmZuLnJlYWR5ID0gZnVuY3Rpb24oIGZuICkge1xuXG5cdHJlYWR5TGlzdFxuXHRcdC50aGVuKCBmbiApXG5cblx0XHQvLyBXcmFwIGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiBpbiBhIGZ1bmN0aW9uIHNvIHRoYXQgdGhlIGxvb2t1cFxuXHRcdC8vIGhhcHBlbnMgYXQgdGhlIHRpbWUgb2YgZXJyb3IgaGFuZGxpbmcgaW5zdGVhZCBvZiBjYWxsYmFja1xuXHRcdC8vIHJlZ2lzdHJhdGlvbi5cblx0XHQuY2F0Y2goIGZ1bmN0aW9uKCBlcnJvciApIHtcblx0XHRcdGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiggZXJyb3IgKTtcblx0XHR9ICk7XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gSXMgdGhlIERPTSByZWFkeSB0byBiZSB1c2VkPyBTZXQgdG8gdHJ1ZSBvbmNlIGl0IG9jY3Vycy5cblx0aXNSZWFkeTogZmFsc2UsXG5cblx0Ly8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9yIGJlZm9yZVxuXHQvLyB0aGUgcmVhZHkgZXZlbnQgZmlyZXMuIFNlZSB0cmFjLTY3ODFcblx0cmVhZHlXYWl0OiAxLFxuXG5cdC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHlcblx0cmVhZHk6IGZ1bmN0aW9uKCB3YWl0ICkge1xuXG5cdFx0Ly8gQWJvcnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeVxuXHRcdGlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJlYWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeVxuXHRcdGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTtcblxuXHRcdC8vIElmIGEgbm9ybWFsIERPTSBSZWFkeSBldmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlXG5cdFx0aWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0ZVxuXHRcdHJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkucmVhZHkudGhlbiA9IHJlYWR5TGlzdC50aGVuO1xuXG4vLyBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlciBhbmQgc2VsZiBjbGVhbnVwIG1ldGhvZFxuZnVuY3Rpb24gY29tcGxldGVkKCkge1xuXHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG5cdGpRdWVyeS5yZWFkeSgpO1xufVxuXG4vLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZFxuLy8gYWZ0ZXIgdGhlIGJyb3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMCBvbmx5XG4vLyBPbGRlciBJRSBzb21ldGltZXMgc2lnbmFscyBcImludGVyYWN0aXZlXCIgdG9vIHNvb25cbmlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiIHx8XG5cdCggZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gXCJsb2FkaW5nXCIgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCApICkge1xuXG5cdC8vIEhhbmRsZSBpdCBhc3luY2hyb25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFkeVxuXHR3aW5kb3cuc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5ICk7XG5cbn0gZWxzZSB7XG5cblx0Ly8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFja1xuXHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cblx0Ly8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcbn1cblxuXG5cblxuLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1ZXMgb2YgYSBjb2xsZWN0aW9uXG4vLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb25cbnZhciBhY2Nlc3MgPSBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCByYXcgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBlbGVtcy5sZW5ndGgsXG5cdFx0YnVsayA9IGtleSA9PSBudWxsO1xuXG5cdC8vIFNldHMgbWFueSB2YWx1ZXNcblx0aWYgKCB0b1R5cGUoIGtleSApID09PSBcIm9iamVjdFwiICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cdFx0Zm9yICggaSBpbiBrZXkgKSB7XG5cdFx0XHRhY2Nlc3MoIGVsZW1zLCBmbiwgaSwga2V5WyBpIF0sIHRydWUsIGVtcHR5R2V0LCByYXcgKTtcblx0XHR9XG5cblx0Ly8gU2V0cyBvbmUgdmFsdWVcblx0fSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXG5cdFx0aWYgKCAhaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJhdyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBidWxrICkge1xuXG5cdFx0XHQvLyBCdWxrIG9wZXJhdGlvbnMgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXRcblx0XHRcdGlmICggcmF3ICkge1xuXHRcdFx0XHRmbi5jYWxsKCBlbGVtcywgdmFsdWUgKTtcblx0XHRcdFx0Zm4gPSBudWxsO1xuXG5cdFx0XHQvLyAuLi5leGNlcHQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWxrID0gZm47XG5cdFx0XHRcdGZuID0gZnVuY3Rpb24oIGVsZW0sIF9rZXksIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiBidWxrLmNhbGwoIGpRdWVyeSggZWxlbSApLCB2YWx1ZSApO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggZm4gKSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0Zm4oXG5cdFx0XHRcdFx0ZWxlbXNbIGkgXSwga2V5LCByYXcgP1xuXHRcdFx0XHRcdFx0dmFsdWUgOlxuXHRcdFx0XHRcdFx0dmFsdWUuY2FsbCggZWxlbXNbIGkgXSwgaSwgZm4oIGVsZW1zWyBpIF0sIGtleSApIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIGNoYWluYWJsZSApIHtcblx0XHRyZXR1cm4gZWxlbXM7XG5cdH1cblxuXHQvLyBHZXRzXG5cdGlmICggYnVsayApIHtcblx0XHRyZXR1cm4gZm4uY2FsbCggZWxlbXMgKTtcblx0fVxuXG5cdHJldHVybiBsZW4gPyBmbiggZWxlbXNbIDAgXSwga2V5ICkgOiBlbXB0eUdldDtcbn07XG5cblxuLy8gTWF0Y2hlcyBkYXNoZWQgc3RyaW5nIGZvciBjYW1lbGl6aW5nXG52YXIgcm1zUHJlZml4ID0gL14tbXMtLyxcblx0cmRhc2hBbHBoYSA9IC8tKFthLXpdKS9nO1xuXG4vLyBVc2VkIGJ5IGNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKClcbmZ1bmN0aW9uIGZjYW1lbENhc2UoIF9hbGwsIGxldHRlciApIHtcblx0cmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpO1xufVxuXG4vLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG4vLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAodHJhYy05NTcyKVxuZnVuY3Rpb24gY2FtZWxDYXNlKCBzdHJpbmcgKSB7XG5cdHJldHVybiBzdHJpbmcucmVwbGFjZSggcm1zUHJlZml4LCBcIm1zLVwiICkucmVwbGFjZSggcmRhc2hBbHBoYSwgZmNhbWVsQ2FzZSApO1xufVxudmFyIGFjY2VwdERhdGEgPSBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0Ly8gQWNjZXB0cyBvbmx5OlxuXHQvLyAgLSBOb2RlXG5cdC8vICAgIC0gTm9kZS5FTEVNRU5UX05PREVcblx0Ly8gICAgLSBOb2RlLkRPQ1VNRU5UX05PREVcblx0Ly8gIC0gT2JqZWN0XG5cdC8vICAgIC0gQW55XG5cdHJldHVybiBvd25lci5ub2RlVHlwZSA9PT0gMSB8fCBvd25lci5ub2RlVHlwZSA9PT0gOSB8fCAhKCArb3duZXIubm9kZVR5cGUgKTtcbn07XG5cblxuXG5cbmZ1bmN0aW9uIERhdGEoKSB7XG5cdHRoaXMuZXhwYW5kbyA9IGpRdWVyeS5leHBhbmRvICsgRGF0YS51aWQrKztcbn1cblxuRGF0YS51aWQgPSAxO1xuXG5EYXRhLnByb3RvdHlwZSA9IHtcblxuXHRjYWNoZTogZnVuY3Rpb24oIG93bmVyICkge1xuXG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIG93bmVyIG9iamVjdCBhbHJlYWR5IGhhcyBhIGNhY2hlXG5cdFx0dmFyIHZhbHVlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0Ly8gSWYgbm90LCBjcmVhdGUgb25lXG5cdFx0aWYgKCAhdmFsdWUgKSB7XG5cdFx0XHR2YWx1ZSA9IHt9O1xuXG5cdFx0XHQvLyBXZSBjYW4gYWNjZXB0IGRhdGEgZm9yIG5vbi1lbGVtZW50IG5vZGVzIGluIG1vZGVybiBicm93c2Vycyxcblx0XHRcdC8vIGJ1dCB3ZSBzaG91bGQgbm90LCBzZWUgdHJhYy04MzM1LlxuXHRcdFx0Ly8gQWx3YXlzIHJldHVybiBhbiBlbXB0eSBvYmplY3QuXG5cdFx0XHRpZiAoIGFjY2VwdERhdGEoIG93bmVyICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgaXQgaXMgYSBub2RlIHVubGlrZWx5IHRvIGJlIHN0cmluZ2lmeS1lZCBvciBsb29wZWQgb3ZlclxuXHRcdFx0XHQvLyB1c2UgcGxhaW4gYXNzaWdubWVudFxuXHRcdFx0XHRpZiAoIG93bmVyLm5vZGVUeXBlICkge1xuXHRcdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHZhbHVlO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBzZWN1cmUgaXQgaW4gYSBub24tZW51bWVyYWJsZSBwcm9wZXJ0eVxuXHRcdFx0XHQvLyBjb25maWd1cmFibGUgbXVzdCBiZSB0cnVlIHRvIGFsbG93IHRoZSBwcm9wZXJ0eSB0byBiZVxuXHRcdFx0XHQvLyBkZWxldGVkIHdoZW4gZGF0YSBpcyByZW1vdmVkXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBvd25lciwgdGhpcy5leHBhbmRvLCB7XG5cdFx0XHRcdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWVcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24oIG93bmVyLCBkYXRhLCB2YWx1ZSApIHtcblx0XHR2YXIgcHJvcCxcblx0XHRcdGNhY2hlID0gdGhpcy5jYWNoZSggb3duZXIgKTtcblxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwga2V5LCB2YWx1ZSBdIGFyZ3Ncblx0XHQvLyBBbHdheXMgdXNlIGNhbWVsQ2FzZSBrZXkgKGdoLTIyNTcpXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGNhY2hlWyBjYW1lbENhc2UoIGRhdGEgKSBdID0gdmFsdWU7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIHsgcHJvcGVydGllcyB9IF0gYXJnc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvcHkgdGhlIHByb3BlcnRpZXMgb25lLWJ5LW9uZSB0byB0aGUgY2FjaGUgb2JqZWN0XG5cdFx0XHRmb3IgKCBwcm9wIGluIGRhdGEgKSB7XG5cdFx0XHRcdGNhY2hlWyBjYW1lbENhc2UoIHByb3AgKSBdID0gZGF0YVsgcHJvcCBdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY2FjaGU7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XG5cdFx0cmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMuY2FjaGUoIG93bmVyICkgOlxuXG5cdFx0XHQvLyBBbHdheXMgdXNlIGNhbWVsQ2FzZSBrZXkgKGdoLTIyNTcpXG5cdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gJiYgb3duZXJbIHRoaXMuZXhwYW5kbyBdWyBjYW1lbENhc2UoIGtleSApIF07XG5cdH0sXG5cdGFjY2VzczogZnVuY3Rpb24oIG93bmVyLCBrZXksIHZhbHVlICkge1xuXG5cdFx0Ly8gSW4gY2FzZXMgd2hlcmUgZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBObyBrZXkgd2FzIHNwZWNpZmllZFxuXHRcdC8vICAgMi4gQSBzdHJpbmcga2V5IHdhcyBzcGVjaWZpZWQsIGJ1dCBubyB2YWx1ZSBwcm92aWRlZFxuXHRcdC8vXG5cdFx0Ly8gVGFrZSB0aGUgXCJyZWFkXCIgcGF0aCBhbmQgYWxsb3cgdGhlIGdldCBtZXRob2QgdG8gZGV0ZXJtaW5lXG5cdFx0Ly8gd2hpY2ggdmFsdWUgdG8gcmV0dXJuLCByZXNwZWN0aXZlbHkgZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBUaGUgZW50aXJlIGNhY2hlIG9iamVjdFxuXHRcdC8vICAgMi4gVGhlIGRhdGEgc3RvcmVkIGF0IHRoZSBrZXlcblx0XHQvL1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0KCAoIGtleSAmJiB0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiICkgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApICkge1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5nZXQoIG93bmVyLCBrZXkgKTtcblx0XHR9XG5cblx0XHQvLyBXaGVuIHRoZSBrZXkgaXMgbm90IGEgc3RyaW5nLCBvciBib3RoIGEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vIGFyZSBzcGVjaWZpZWQsIHNldCBvciBleHRlbmQgKGV4aXN0aW5nIG9iamVjdHMpIHdpdGggZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBBbiBvYmplY3Qgb2YgcHJvcGVydGllc1xuXHRcdC8vICAgMi4gQSBrZXkgYW5kIHZhbHVlXG5cdFx0Ly9cblx0XHR0aGlzLnNldCggb3duZXIsIGtleSwgdmFsdWUgKTtcblxuXHRcdC8vIFNpbmNlIHRoZSBcInNldFwiIHBhdGggY2FuIGhhdmUgdHdvIHBvc3NpYmxlIGVudHJ5IHBvaW50c1xuXHRcdC8vIHJldHVybiB0aGUgZXhwZWN0ZWQgZGF0YSBiYXNlZCBvbiB3aGljaCBwYXRoIHdhcyB0YWtlblsqXVxuXHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiBrZXk7XG5cdH0sXG5cdHJlbW92ZTogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XG5cdFx0dmFyIGksXG5cdFx0XHRjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblxuXHRcdGlmICggY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIGtleSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0IGFycmF5IG9yIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgb2Yga2V5c1xuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBrZXkgKSApIHtcblxuXHRcdFx0XHQvLyBJZiBrZXkgaXMgYW4gYXJyYXkgb2Yga2V5cy4uLlxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc2V0IGNhbWVsQ2FzZSBrZXlzLCBzbyByZW1vdmUgdGhhdC5cblx0XHRcdFx0a2V5ID0ga2V5Lm1hcCggY2FtZWxDYXNlICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRrZXkgPSBjYW1lbENhc2UoIGtleSApO1xuXG5cdFx0XHRcdC8vIElmIGEga2V5IHdpdGggdGhlIHNwYWNlcyBleGlzdHMsIHVzZSBpdC5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBjcmVhdGUgYW4gYXJyYXkgYnkgbWF0Y2hpbmcgbm9uLXdoaXRlc3BhY2Vcblx0XHRcdFx0a2V5ID0ga2V5IGluIGNhY2hlID9cblx0XHRcdFx0XHRbIGtleSBdIDpcblx0XHRcdFx0XHQoIGtleS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdICk7XG5cdFx0XHR9XG5cblx0XHRcdGkgPSBrZXkubGVuZ3RoO1xuXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlbIGkgXSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiB0aGVyZSdzIG5vIG1vcmUgZGF0YVxuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgfHwgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICkgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDVcblx0XHRcdC8vIFdlYmtpdCAmIEJsaW5rIHBlcmZvcm1hbmNlIHN1ZmZlcnMgd2hlbiBkZWxldGluZyBwcm9wZXJ0aWVzXG5cdFx0XHQvLyBmcm9tIERPTSBub2Rlcywgc28gc2V0IHRvIHVuZGVmaW5lZCBpbnN0ZWFkXG5cdFx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zNzg2MDcgKGJ1ZyByZXN0cmljdGVkKVxuXHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVsZXRlIG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBvd25lciApIHtcblx0XHR2YXIgY2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0cmV0dXJuIGNhY2hlICE9PSB1bmRlZmluZWQgJiYgIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApO1xuXHR9XG59O1xudmFyIGRhdGFQcml2ID0gbmV3IERhdGEoKTtcblxudmFyIGRhdGFVc2VyID0gbmV3IERhdGEoKTtcblxuXG5cbi8vXHRJbXBsZW1lbnRhdGlvbiBTdW1tYXJ5XG4vL1xuLy9cdDEuIEVuZm9yY2UgQVBJIHN1cmZhY2UgYW5kIHNlbWFudGljIGNvbXBhdGliaWxpdHkgd2l0aCAxLjkueCBicmFuY2hcbi8vXHQyLiBJbXByb3ZlIHRoZSBtb2R1bGUncyBtYWludGFpbmFiaWxpdHkgYnkgcmVkdWNpbmcgdGhlIHN0b3JhZ2Vcbi8vXHRcdHBhdGhzIHRvIGEgc2luZ2xlIG1lY2hhbmlzbS5cbi8vXHQzLiBVc2UgdGhlIHNhbWUgc2luZ2xlIG1lY2hhbmlzbSB0byBzdXBwb3J0IFwicHJpdmF0ZVwiIGFuZCBcInVzZXJcIiBkYXRhLlxuLy9cdDQuIF9OZXZlcl8gZXhwb3NlIFwicHJpdmF0ZVwiIGRhdGEgdG8gdXNlciBjb2RlIChUT0RPOiBEcm9wIF9kYXRhLCBfcmVtb3ZlRGF0YSlcbi8vXHQ1LiBBdm9pZCBleHBvc2luZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9uIHVzZXIgb2JqZWN0cyAoZWcuIGV4cGFuZG8gcHJvcGVydGllcylcbi8vXHQ2LiBQcm92aWRlIGEgY2xlYXIgcGF0aCBmb3IgaW1wbGVtZW50YXRpb24gdXBncmFkZSB0byBXZWFrTWFwIGluIDIwMTRcblxudmFyIHJicmFjZSA9IC9eKD86XFx7W1xcd1xcV10qXFx9fFxcW1tcXHdcXFddKlxcXSkkLyxcblx0cm11bHRpRGFzaCA9IC9bQS1aXS9nO1xuXG5mdW5jdGlvbiBnZXREYXRhKCBkYXRhICkge1xuXHRpZiAoIGRhdGEgPT09IFwidHJ1ZVwiICkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aWYgKCBkYXRhID09PSBcImZhbHNlXCIgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aWYgKCBkYXRhID09PSBcIm51bGxcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIE9ubHkgY29udmVydCB0byBhIG51bWJlciBpZiBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgc3RyaW5nXG5cdGlmICggZGF0YSA9PT0gK2RhdGEgKyBcIlwiICkge1xuXHRcdHJldHVybiArZGF0YTtcblx0fVxuXG5cdGlmICggcmJyYWNlLnRlc3QoIGRhdGEgKSApIHtcblx0XHRyZXR1cm4gSlNPTi5wYXJzZSggZGF0YSApO1xuXHR9XG5cblx0cmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEgKSB7XG5cdHZhciBuYW1lO1xuXG5cdC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHksIHRyeSB0byBmZXRjaCBhbnlcblx0Ly8gZGF0YSBmcm9tIHRoZSBIVE1MNSBkYXRhLSogYXR0cmlidXRlXG5cdGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0bmFtZSA9IFwiZGF0YS1cIiArIGtleS5yZXBsYWNlKCBybXVsdGlEYXNoLCBcIi0kJlwiICkudG9Mb3dlckNhc2UoKTtcblx0XHRkYXRhID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTtcblxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRkYXRhID0gZ2V0RGF0YSggZGF0YSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXG5cdFx0XHQvLyBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNvIGl0IGlzbid0IGNoYW5nZWQgbGF0ZXJcblx0XHRcdGRhdGFVc2VyLnNldCggZWxlbSwga2V5LCBkYXRhICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkYXRhO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkYXRhVXNlci5oYXNEYXRhKCBlbGVtICkgfHwgZGF0YVByaXYuaGFzRGF0YSggZWxlbSApO1xuXHR9LFxuXG5cdGRhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkge1xuXHRcdHJldHVybiBkYXRhVXNlci5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcblx0fSxcblxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0XHRkYXRhVXNlci5yZW1vdmUoIGVsZW0sIG5hbWUgKTtcblx0fSxcblxuXHQvLyBUT0RPOiBOb3cgdGhhdCBhbGwgY2FsbHMgdG8gX2RhdGEgYW5kIF9yZW1vdmVEYXRhIGhhdmUgYmVlbiByZXBsYWNlZFxuXHQvLyB3aXRoIGRpcmVjdCBjYWxscyB0byBkYXRhUHJpdiBtZXRob2RzLCB0aGVzZSBjYW4gYmUgZGVwcmVjYXRlZC5cblx0X2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkge1xuXHRcdHJldHVybiBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcblx0fSxcblxuXHRfcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHR2YXIgaSwgbmFtZSwgZGF0YSxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRhdHRycyA9IGVsZW0gJiYgZWxlbS5hdHRyaWJ1dGVzO1xuXG5cdFx0Ly8gR2V0cyBhbGwgdmFsdWVzXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggdGhpcy5sZW5ndGggKSB7XG5cdFx0XHRcdGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0gKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWRhdGFQcml2LmdldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiApICkge1xuXHRcdFx0XHRcdGkgPSBhdHRycy5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdFx0XHRcdC8vIFRoZSBhdHRycyBlbGVtZW50cyBjYW4gYmUgbnVsbCAodHJhYy0xNDg5NClcblx0XHRcdFx0XHRcdGlmICggYXR0cnNbIGkgXSApIHtcblx0XHRcdFx0XHRcdFx0bmFtZSA9IGF0dHJzWyBpIF0ubmFtZTtcblx0XHRcdFx0XHRcdFx0aWYgKCBuYW1lLmluZGV4T2YoIFwiZGF0YS1cIiApID09PSAwICkge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBjYW1lbENhc2UoIG5hbWUuc2xpY2UoIDUgKSApO1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHQvLyBTZXRzIG11bHRpcGxlIHZhbHVlc1xuXHRcdGlmICggdHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBkYXRhO1xuXG5cdFx0XHQvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eVxuXHRcdFx0Ly8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGVcblx0XHRcdC8vIGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBub3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2JqZWN0XG5cdFx0XHQvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsXG5cdFx0XHQvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLlxuXHRcdFx0aWYgKCBlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZVxuXHRcdFx0XHQvLyBUaGUga2V5IHdpbGwgYWx3YXlzIGJlIGNhbWVsQ2FzZWQgaW4gRGF0YVxuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIFwiZGlzY292ZXJcIiB0aGUgZGF0YSBpblxuXHRcdFx0XHQvLyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzXG5cdFx0XHRcdGRhdGEgPSBkYXRhQXR0ciggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2UgdHJpZWQgcmVhbGx5IGhhcmQsIGJ1dCB0aGUgZGF0YSBkb2Vzbid0IGV4aXN0LlxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCB0aGUgZGF0YS4uLlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc3RvcmUgdGhlIGNhbWVsQ2FzZWQga2V5XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApO1xuXHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkYXRhVXNlci5yZW1vdmUoIHRoaXMsIGtleSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBxdWV1ZTtcblxuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHR5cGUgPSAoIHR5cGUgfHwgXCJmeFwiICkgKyBcInF1ZXVlXCI7XG5cdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmdldCggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHQvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwXG5cdFx0XHRpZiAoIGRhdGEgKSB7XG5cdFx0XHRcdGlmICggIXF1ZXVlIHx8IEFycmF5LmlzQXJyYXkoIGRhdGEgKSApIHtcblx0XHRcdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cXVldWUucHVzaCggZGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcXVldWUgfHwgW107XG5cdFx0fVxuXHR9LFxuXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLFxuXHRcdFx0c3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsXG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCksXG5cdFx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLFxuXHRcdFx0bmV4dCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApO1xuXHRcdFx0fTtcblxuXHRcdC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWxcblx0XHRpZiAoIGZuID09PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdHN0YXJ0TGVuZ3RoLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblxuXHRcdFx0Ly8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZ1xuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBkZXF1ZXVlZFxuXHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgKSB7XG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoIFwiaW5wcm9ncmVzc1wiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb25cblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0Zm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTtcblx0XHR9XG5cblx0XHRpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmVcblx0X3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHZhciBrZXkgPSB0eXBlICsgXCJxdWV1ZUhvb2tzXCI7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBrZXksIHtcblx0XHRcdGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKS5hZGQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlwZSArIFwicXVldWVcIiwga2V5IF0gKTtcblx0XHRcdH0gKVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgc2V0dGVyID0gMjtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRkYXRhID0gdHlwZTtcblx0XHRcdHR5cGUgPSBcImZ4XCI7XG5cdFx0XHRzZXR0ZXItLTtcblx0XHR9XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMgOlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWVcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgJiYgcXVldWVbIDAgXSAhPT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHR9LFxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0fSApO1xuXHR9LFxuXHRjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdH0sXG5cblx0Ly8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZVxuXHQvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdClcblx0cHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHtcblx0XHR2YXIgdG1wLFxuXHRcdFx0Y291bnQgPSAxLFxuXHRcdFx0ZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGVsZW1lbnRzID0gdGhpcyxcblx0XHRcdGkgPSB0aGlzLmxlbmd0aCxcblx0XHRcdHJlc29sdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhKCAtLWNvdW50ICkgKSB7XG5cdFx0XHRcdFx0ZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRvYmogPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0bXAgPSBkYXRhUHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyBcInF1ZXVlSG9va3NcIiApO1xuXHRcdFx0aWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJlc29sdmUoKTtcblx0XHRyZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7XG5cdH1cbn0gKTtcbnZhciBwbnVtID0gKCAvWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLyApLnNvdXJjZTtcblxudmFyIHJjc3NOdW0gPSBuZXcgUmVnRXhwKCBcIl4oPzooWystXSk9fCkoXCIgKyBwbnVtICsgXCIpKFthLXolXSopJFwiLCBcImlcIiApO1xuXG5cbnZhciBjc3NFeHBhbmQgPSBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCIgXTtcblxudmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuXG5cblx0dmFyIGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXHRcdH0sXG5cdFx0Y29tcG9zZWQgPSB7IGNvbXBvc2VkOiB0cnVlIH07XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4KywgaU9TIDEwLjAgLSAxMC4yIG9ubHlcblx0Ly8gQ2hlY2sgYXR0YWNobWVudCBhY3Jvc3Mgc2hhZG93IERPTSBib3VuZGFyaWVzIHdoZW4gcG9zc2libGUgKGdoLTM1MDQpXG5cdC8vIFN1cHBvcnQ6IGlPUyAxMC4wLTEwLjIgb25seVxuXHQvLyBFYXJseSBpT1MgMTAgdmVyc2lvbnMgc3VwcG9ydCBgYXR0YWNoU2hhZG93YCBidXQgbm90IGBnZXRSb290Tm9kZWAsXG5cdC8vIGxlYWRpbmcgdG8gZXJyb3JzLiBXZSBuZWVkIHRvIGNoZWNrIGZvciBgZ2V0Um9vdE5vZGVgLlxuXHRpZiAoIGRvY3VtZW50RWxlbWVudC5nZXRSb290Tm9kZSApIHtcblx0XHRpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSB8fFxuXHRcdFx0XHRlbGVtLmdldFJvb3ROb2RlKCBjb21wb3NlZCApID09PSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0fTtcblx0fVxudmFyIGlzSGlkZGVuV2l0aGluVHJlZSA9IGZ1bmN0aW9uKCBlbGVtLCBlbCApIHtcblxuXHRcdC8vIGlzSGlkZGVuV2l0aGluVHJlZSBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uO1xuXHRcdC8vIGluIHRoYXQgY2FzZSwgZWxlbWVudCB3aWxsIGJlIHNlY29uZCBhcmd1bWVudFxuXHRcdGVsZW0gPSBlbCB8fCBlbGVtO1xuXG5cdFx0Ly8gSW5saW5lIHN0eWxlIHRydW1wcyBhbGxcblx0XHRyZXR1cm4gZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIiB8fFxuXHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmXG5cblx0XHRcdC8vIE90aGVyd2lzZSwgY2hlY2sgY29tcHV0ZWQgc3R5bGVcblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MyAtIDQ1XG5cdFx0XHQvLyBEaXNjb25uZWN0ZWQgZWxlbWVudHMgY2FuIGhhdmUgY29tcHV0ZWQgZGlzcGxheTogbm9uZSwgc28gZmlyc3QgY29uZmlybSB0aGF0IGVsZW0gaXNcblx0XHRcdC8vIGluIHRoZSBkb2N1bWVudC5cblx0XHRcdGlzQXR0YWNoZWQoIGVsZW0gKSAmJlxuXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApID09PSBcIm5vbmVcIjtcblx0fTtcblxuXG5cbmZ1bmN0aW9uIGFkanVzdENTUyggZWxlbSwgcHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4gKSB7XG5cdHZhciBhZGp1c3RlZCwgc2NhbGUsXG5cdFx0bWF4SXRlcmF0aW9ucyA9IDIwLFxuXHRcdGN1cnJlbnRWYWx1ZSA9IHR3ZWVuID9cblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uY3VyKCk7XG5cdFx0XHR9IDpcblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgcHJvcCwgXCJcIiApO1xuXHRcdFx0fSxcblx0XHRpbml0aWFsID0gY3VycmVudFZhbHVlKCksXG5cdFx0dW5pdCA9IHZhbHVlUGFydHMgJiYgdmFsdWVQYXJ0c1sgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApLFxuXG5cdFx0Ly8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXNcblx0XHRpbml0aWFsSW5Vbml0ID0gZWxlbS5ub2RlVHlwZSAmJlxuXHRcdFx0KCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gfHwgdW5pdCAhPT0gXCJweFwiICYmICtpbml0aWFsICkgJiZcblx0XHRcdHJjc3NOdW0uZXhlYyggalF1ZXJ5LmNzcyggZWxlbSwgcHJvcCApICk7XG5cblx0aWYgKCBpbml0aWFsSW5Vbml0ICYmIGluaXRpYWxJblVuaXRbIDMgXSAhPT0gdW5pdCApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHRcdC8vIEhhbHZlIHRoZSBpdGVyYXRpb24gdGFyZ2V0IHZhbHVlIHRvIHByZXZlbnQgaW50ZXJmZXJlbmNlIGZyb20gQ1NTIHVwcGVyIGJvdW5kcyAoZ2gtMjE0NClcblx0XHRpbml0aWFsID0gaW5pdGlhbCAvIDI7XG5cblx0XHQvLyBUcnVzdCB1bml0cyByZXBvcnRlZCBieSBqUXVlcnkuY3NzXG5cdFx0dW5pdCA9IHVuaXQgfHwgaW5pdGlhbEluVW5pdFsgMyBdO1xuXG5cdFx0Ly8gSXRlcmF0aXZlbHkgYXBwcm94aW1hdGUgZnJvbSBhIG5vbnplcm8gc3RhcnRpbmcgcG9pbnRcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWwgfHwgMTtcblxuXHRcdHdoaWxlICggbWF4SXRlcmF0aW9ucy0tICkge1xuXG5cdFx0XHQvLyBFdmFsdWF0ZSBhbmQgdXBkYXRlIG91ciBiZXN0IGd1ZXNzIChkb3VibGluZyBndWVzc2VzIHRoYXQgemVybyBvdXQpLlxuXHRcdFx0Ly8gRmluaXNoIGlmIHRoZSBzY2FsZSBlcXVhbHMgb3IgY3Jvc3NlcyAxIChtYWtpbmcgdGhlIG9sZCpuZXcgcHJvZHVjdCBub24tcG9zaXRpdmUpLlxuXHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xuXHRcdFx0aWYgKCAoIDEgLSBzY2FsZSApICogKCAxIC0gKCBzY2FsZSA9IGN1cnJlbnRWYWx1ZSgpIC8gaW5pdGlhbCB8fCAwLjUgKSApIDw9IDAgKSB7XG5cdFx0XHRcdG1heEl0ZXJhdGlvbnMgPSAwO1xuXHRcdFx0fVxuXHRcdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTtcblxuXHRcdH1cblxuXHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0ICogMjtcblx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVyIG9uXG5cdFx0dmFsdWVQYXJ0cyA9IHZhbHVlUGFydHMgfHwgW107XG5cdH1cblxuXHRpZiAoIHZhbHVlUGFydHMgKSB7XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsSW5Vbml0IHx8ICtpbml0aWFsIHx8IDA7XG5cblx0XHQvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWRcblx0XHRhZGp1c3RlZCA9IHZhbHVlUGFydHNbIDEgXSA/XG5cdFx0XHRpbml0aWFsSW5Vbml0ICsgKCB2YWx1ZVBhcnRzWyAxIF0gKyAxICkgKiB2YWx1ZVBhcnRzWyAyIF0gOlxuXHRcdFx0K3ZhbHVlUGFydHNbIDIgXTtcblx0XHRpZiAoIHR3ZWVuICkge1xuXHRcdFx0dHdlZW4udW5pdCA9IHVuaXQ7XG5cdFx0XHR0d2Vlbi5zdGFydCA9IGluaXRpYWxJblVuaXQ7XG5cdFx0XHR0d2Vlbi5lbmQgPSBhZGp1c3RlZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFkanVzdGVkO1xufVxuXG5cbnZhciBkZWZhdWx0RGlzcGxheU1hcCA9IHt9O1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApIHtcblx0dmFyIHRlbXAsXG5cdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50LFxuXHRcdG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSxcblx0XHRkaXNwbGF5ID0gZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF07XG5cblx0aWYgKCBkaXNwbGF5ICkge1xuXHRcdHJldHVybiBkaXNwbGF5O1xuXHR9XG5cblx0dGVtcCA9IGRvYy5ib2R5LmFwcGVuZENoaWxkKCBkb2MuY3JlYXRlRWxlbWVudCggbm9kZU5hbWUgKSApO1xuXHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggdGVtcCwgXCJkaXNwbGF5XCIgKTtcblxuXHR0ZW1wLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRlbXAgKTtcblxuXHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdGRpc3BsYXkgPSBcImJsb2NrXCI7XG5cdH1cblx0ZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF0gPSBkaXNwbGF5O1xuXG5cdHJldHVybiBkaXNwbGF5O1xufVxuXG5mdW5jdGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7XG5cdHZhciBkaXNwbGF5LCBlbGVtLFxuXHRcdHZhbHVlcyA9IFtdLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cblx0Ly8gRGV0ZXJtaW5lIG5ldyBkaXNwbGF5IHZhbHVlIGZvciBlbGVtZW50cyB0aGF0IG5lZWQgdG8gY2hhbmdlXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdO1xuXHRcdGlmICggIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5O1xuXHRcdGlmICggc2hvdyApIHtcblxuXHRcdFx0Ly8gU2luY2Ugd2UgZm9yY2UgdmlzaWJpbGl0eSB1cG9uIGNhc2NhZGUtaGlkZGVuIGVsZW1lbnRzLCBhbiBpbW1lZGlhdGUgKGFuZCBzbG93KVxuXHRcdFx0Ly8gY2hlY2sgaXMgcmVxdWlyZWQgaW4gdGhpcyBmaXJzdCBsb29wIHVubGVzcyB3ZSBoYXZlIGEgbm9uZW1wdHkgZGlzcGxheSB2YWx1ZSAoZWl0aGVyXG5cdFx0XHQvLyBpbmxpbmUgb3IgYWJvdXQtdG8tYmUtcmVzdG9yZWQpXG5cdFx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICkgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCAhdmFsdWVzWyBpbmRleCBdICkge1xuXHRcdFx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIGRpc3BsYXkgIT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBcIm5vbmVcIjtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB3aGF0IHdlJ3JlIG92ZXJ3cml0aW5nXG5cdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJkaXNwbGF5XCIsIGRpc3BsYXkgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTZXQgdGhlIGRpc3BsYXkgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AgdG8gYXZvaWQgY29uc3RhbnQgcmVmbG93XG5cdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCB2YWx1ZXNbIGluZGV4IF0gIT0gbnVsbCApIHtcblx0XHRcdGVsZW1lbnRzWyBpbmRleCBdLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZXNbIGluZGV4IF07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRzO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNob3c6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApO1xuXHR9LFxuXHRoaWRlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMgKTtcblx0fSxcblx0dG9nZ2xlOiBmdW5jdGlvbiggc3RhdGUgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNIaWRkZW5XaXRoaW5UcmVlKCB0aGlzICkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnNob3coKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcbnZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykkL2kgKTtcblxudmFyIHJ0YWdOYW1lID0gKCAvPChbYS16XVteXFwvXFwwPlxceDIwXFx0XFxyXFxuXFxmXSopL2kgKTtcblxudmFyIHJzY3JpcHRUeXBlID0gKCAvXiR8Xm1vZHVsZSR8XFwvKD86amF2YXxlY21hKXNjcmlwdC9pICk7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0ZGl2ID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApLFxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seVxuXHQvLyBDaGVjayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAodHJhYy0xMTIxNylcblx0Ly8gU3VwcG9ydDogV2luZG93cyBXZWIgQXBwcyAoV1dBKVxuXHQvLyBgbmFtZWAgYW5kIGB0eXBlYCBtdXN0IHVzZSAuc2V0QXR0cmlidXRlIGZvciBXV0EgKHRyYWMtMTQ5MDEpXG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwicmFkaW9cIiApO1xuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwiY2hlY2tlZFwiLCBcImNoZWNrZWRcIiApO1xuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcInRcIiApO1xuXG5cdGRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4xIG9ubHlcblx0Ly8gT2xkZXIgV2ViS2l0IGRvZXNuJ3QgY2xvbmUgY2hlY2tlZCBzdGF0ZSBjb3JyZWN0bHkgaW4gZnJhZ21lbnRzXG5cdHN1cHBvcnQuY2hlY2tDbG9uZSA9IGRpdi5jbG9uZU5vZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuY2hlY2tlZDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gTWFrZSBzdXJlIHRleHRhcmVhIChhbmQgY2hlY2tib3gpIGRlZmF1bHRWYWx1ZSBpcyBwcm9wZXJseSBjbG9uZWRcblx0ZGl2LmlubmVySFRNTCA9IFwiPHRleHRhcmVhPng8L3RleHRhcmVhPlwiO1xuXHRzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkID0gISFkaXYuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZTtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHQvLyBJRSA8PTkgcmVwbGFjZXMgPG9wdGlvbj4gdGFncyB3aXRoIHRoZWlyIGNvbnRlbnRzIHdoZW4gaW5zZXJ0ZWQgb3V0c2lkZSBvZlxuXHQvLyB0aGUgc2VsZWN0IGVsZW1lbnQuXG5cdGRpdi5pbm5lckhUTUwgPSBcIjxvcHRpb24+PC9vcHRpb24+XCI7XG5cdHN1cHBvcnQub3B0aW9uID0gISFkaXYubGFzdENoaWxkO1xufSApKCk7XG5cblxuLy8gV2UgaGF2ZSB0byBjbG9zZSB0aGVzZSB0YWdzIHRvIHN1cHBvcnQgWEhUTUwgKHRyYWMtMTMyMDApXG52YXIgd3JhcE1hcCA9IHtcblxuXHQvLyBYSFRNTCBwYXJzZXJzIGRvIG5vdCBtYWdpY2FsbHkgaW5zZXJ0IGVsZW1lbnRzIGluIHRoZVxuXHQvLyBzYW1lIHdheSB0aGF0IHRhZyBzb3VwIHBhcnNlcnMgZG8uIFNvIHdlIGNhbm5vdCBzaG9ydGVuXG5cdC8vIHRoaXMgYnkgb21pdHRpbmcgPHRib2R5PiBvciBvdGhlciByZXF1aXJlZCBlbGVtZW50cy5cblx0dGhlYWQ6IFsgMSwgXCI8dGFibGU+XCIsIFwiPC90YWJsZT5cIiBdLFxuXHRjb2w6IFsgMiwgXCI8dGFibGU+PGNvbGdyb3VwPlwiLCBcIjwvY29sZ3JvdXA+PC90YWJsZT5cIiBdLFxuXHR0cjogWyAyLCBcIjx0YWJsZT48dGJvZHk+XCIsIFwiPC90Ym9keT48L3RhYmxlPlwiIF0sXG5cdHRkOiBbIDMsIFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsIFwiPC90cj48L3Rib2R5PjwvdGFibGU+XCIgXSxcblxuXHRfZGVmYXVsdDogWyAwLCBcIlwiLCBcIlwiIF1cbn07XG5cbndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7XG53cmFwTWFwLnRoID0gd3JhcE1hcC50ZDtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbmlmICggIXN1cHBvcnQub3B0aW9uICkge1xuXHR3cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb24gPSBbIDEsIFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLCBcIjwvc2VsZWN0PlwiIF07XG59XG5cblxuZnVuY3Rpb24gZ2V0QWxsKCBjb250ZXh0LCB0YWcgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBVc2UgdHlwZW9mIHRvIGF2b2lkIHplcm8tYXJndW1lbnQgbWV0aG9kIGludm9jYXRpb24gb24gaG9zdCBvYmplY3RzICh0cmFjLTE1MTUxKVxuXHR2YXIgcmV0O1xuXG5cdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0cmV0ID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIGlmICggdHlwZW9mIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyB8fCBcIipcIiApO1xuXG5cdH0gZWxzZSB7XG5cdFx0cmV0ID0gW107XG5cdH1cblxuXHRpZiAoIHRhZyA9PT0gdW5kZWZpbmVkIHx8IHRhZyAmJiBub2RlTmFtZSggY29udGV4dCwgdGFnICkgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5tZXJnZSggWyBjb250ZXh0IF0sIHJldCApO1xuXHR9XG5cblx0cmV0dXJuIHJldDtcbn1cblxuXG4vLyBNYXJrIHNjcmlwdHMgYXMgaGF2aW5nIGFscmVhZHkgYmVlbiBldmFsdWF0ZWRcbmZ1bmN0aW9uIHNldEdsb2JhbEV2YWwoIGVsZW1zLCByZWZFbGVtZW50cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGRhdGFQcml2LnNldChcblx0XHRcdGVsZW1zWyBpIF0sXG5cdFx0XHRcImdsb2JhbEV2YWxcIixcblx0XHRcdCFyZWZFbGVtZW50cyB8fCBkYXRhUHJpdi5nZXQoIHJlZkVsZW1lbnRzWyBpIF0sIFwiZ2xvYmFsRXZhbFwiIClcblx0XHQpO1xuXHR9XG59XG5cblxudmFyIHJodG1sID0gLzx8JiM/XFx3KzsvO1xuXG5mdW5jdGlvbiBidWlsZEZyYWdtZW50KCBlbGVtcywgY29udGV4dCwgc2NyaXB0cywgc2VsZWN0aW9uLCBpZ25vcmVkICkge1xuXHR2YXIgZWxlbSwgdG1wLCB0YWcsIHdyYXAsIGF0dGFjaGVkLCBqLFxuXHRcdGZyYWdtZW50ID0gY29udGV4dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0bm9kZXMgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRlbGVtID0gZWxlbXNbIGkgXTtcblxuXHRcdGlmICggZWxlbSB8fCBlbGVtID09PSAwICkge1xuXG5cdFx0XHQvLyBBZGQgbm9kZXMgZGlyZWN0bHlcblx0XHRcdGlmICggdG9UeXBlKCBlbGVtICkgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgZWxlbS5ub2RlVHlwZSA/IFsgZWxlbSBdIDogZWxlbSApO1xuXG5cdFx0XHQvLyBDb252ZXJ0IG5vbi1odG1sIGludG8gYSB0ZXh0IG5vZGVcblx0XHRcdH0gZWxzZSBpZiAoICFyaHRtbC50ZXN0KCBlbGVtICkgKSB7XG5cdFx0XHRcdG5vZGVzLnB1c2goIGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIGVsZW0gKSApO1xuXG5cdFx0XHQvLyBDb252ZXJ0IGh0bWwgaW50byBET00gbm9kZXNcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRtcCA9IHRtcCB8fCBmcmFnbWVudC5hcHBlbmRDaGlsZCggY29udGV4dC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKTtcblxuXHRcdFx0XHQvLyBEZXNlcmlhbGl6ZSBhIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uXG5cdFx0XHRcdHRhZyA9ICggcnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR3cmFwID0gd3JhcE1hcFsgdGFnIF0gfHwgd3JhcE1hcC5fZGVmYXVsdDtcblx0XHRcdFx0dG1wLmlubmVySFRNTCA9IHdyYXBbIDEgXSArIGpRdWVyeS5odG1sUHJlZmlsdGVyKCBlbGVtICkgKyB3cmFwWyAyIF07XG5cblx0XHRcdFx0Ly8gRGVzY2VuZCB0aHJvdWdoIHdyYXBwZXJzIHRvIHRoZSByaWdodCBjb250ZW50XG5cdFx0XHRcdGogPSB3cmFwWyAwIF07XG5cdFx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRcdHRtcCA9IHRtcC5sYXN0Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCB0bXAuY2hpbGROb2RlcyApO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHRoZSB0b3AtbGV2ZWwgY29udGFpbmVyXG5cdFx0XHRcdHRtcCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIHRoZSBjcmVhdGVkIG5vZGVzIGFyZSBvcnBoYW5lZCAodHJhYy0xMjM5Milcblx0XHRcdFx0dG1wLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZW1vdmUgd3JhcHBlciBmcm9tIGZyYWdtZW50XG5cdGZyYWdtZW50LnRleHRDb250ZW50ID0gXCJcIjtcblxuXHRpID0gMDtcblx0d2hpbGUgKCAoIGVsZW0gPSBub2Rlc1sgaSsrIF0gKSApIHtcblxuXHRcdC8vIFNraXAgZWxlbWVudHMgYWxyZWFkeSBpbiB0aGUgY29udGV4dCBjb2xsZWN0aW9uICh0cmFjLTQwODcpXG5cdFx0aWYgKCBzZWxlY3Rpb24gJiYgalF1ZXJ5LmluQXJyYXkoIGVsZW0sIHNlbGVjdGlvbiApID4gLTEgKSB7XG5cdFx0XHRpZiAoIGlnbm9yZWQgKSB7XG5cdFx0XHRcdGlnbm9yZWQucHVzaCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0YXR0YWNoZWQgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBBcHBlbmQgdG8gZnJhZ21lbnRcblx0XHR0bXAgPSBnZXRBbGwoIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICksIFwic2NyaXB0XCIgKTtcblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRpZiAoIGF0dGFjaGVkICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggdG1wICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FwdHVyZSBleGVjdXRhYmxlc1xuXHRcdGlmICggc2NyaXB0cyApIHtcblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0bXBbIGorKyBdICkgKSB7XG5cdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlIHx8IFwiXCIgKSApIHtcblx0XHRcdFx0XHRzY3JpcHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmcmFnbWVudDtcbn1cblxuXG52YXIgcnR5cGVuYW1lc3BhY2UgPSAvXihbXi5dKikoPzpcXC4oLispfCkvO1xuXG5mdW5jdGlvbiByZXR1cm5UcnVlKCkge1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7XG5cdHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gb24oIGVsZW0sIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIG9uZSApIHtcblx0dmFyIG9yaWdGbiwgdHlwZTtcblxuXHQvLyBUeXBlcyBjYW4gYmUgYSBtYXAgb2YgdHlwZXMvaGFuZGxlcnNcblx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKVxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLU9iamVjdCwgZGF0YSApXG5cdFx0XHRkYXRhID0gZGF0YSB8fCBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0b24oIGVsZW0sIHR5cGUsIHNlbGVjdG9yLCBkYXRhLCB0eXBlc1sgdHlwZSBdLCBvbmUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkge1xuXG5cdFx0Ly8gKCB0eXBlcywgZm4gKVxuXHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0ZGF0YSA9IHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkge1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBkYXRhLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0fSBlbHNlIGlmICggIWZuICkge1xuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBvbmUgPT09IDEgKSB7XG5cdFx0b3JpZ0ZuID0gZm47XG5cdFx0Zm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mb1xuXHRcdFx0alF1ZXJ5KCkub2ZmKCBldmVudCApO1xuXHRcdFx0cmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fTtcblxuXHRcdC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNpbmcgb3JpZ0ZuXG5cdFx0Zm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7XG5cdH1cblx0cmV0dXJuIGVsZW0uZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0alF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZXMsIGZuLCBkYXRhLCBzZWxlY3RvciApO1xuXHR9ICk7XG59XG5cbi8qXG4gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG4gKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLlxuICovXG5qUXVlcnkuZXZlbnQgPSB7XG5cblx0Z2xvYmFsOiB7fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2VsZWN0b3IgKSB7XG5cblx0XHR2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHQvLyBPbmx5IGF0dGFjaCBldmVudHMgdG8gb2JqZWN0cyB0aGF0IGFjY2VwdCBkYXRhXG5cdFx0aWYgKCAhYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlclxuXHRcdGlmICggaGFuZGxlci5oYW5kbGVyICkge1xuXHRcdFx0aGFuZGxlT2JqSW4gPSBoYW5kbGVyO1xuXHRcdFx0aGFuZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7XG5cdFx0XHRzZWxlY3RvciA9IGhhbmRsZU9iakluLnNlbGVjdG9yO1xuXHRcdH1cblxuXHRcdC8vIEVuc3VyZSB0aGF0IGludmFsaWQgc2VsZWN0b3JzIHRocm93IGV4Y2VwdGlvbnMgYXQgYXR0YWNoIHRpbWVcblx0XHQvLyBFdmFsdWF0ZSBhZ2FpbnN0IGRvY3VtZW50RWxlbWVudCBpbiBjYXNlIGVsZW0gaXMgYSBub24tZWxlbWVudCBub2RlIChlLmcuLCBkb2N1bWVudClcblx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBkb2N1bWVudEVsZW1lbnQsIHNlbGVjdG9yICk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEgdW5pcXVlIElELCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyXG5cdFx0aWYgKCAhaGFuZGxlci5ndWlkICkge1xuXHRcdFx0aGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1aWQrKztcblx0XHR9XG5cblx0XHQvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJlIGFuZCBtYWluIGhhbmRsZXIsIGlmIHRoaXMgaXMgdGhlIGZpcnN0XG5cdFx0aWYgKCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IE9iamVjdC5jcmVhdGUoIG51bGwgKTtcblx0XHR9XG5cdFx0aWYgKCAhKCBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSApICkge1xuXHRcdFx0ZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgPSBmdW5jdGlvbiggZSApIHtcblxuXHRcdFx0XHQvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFuZFxuXHRcdFx0XHQvLyB3aGVuIGFuIGV2ZW50IGlzIGNhbGxlZCBhZnRlciBhIHBhZ2UgaGFzIHVubG9hZGVkXG5cdFx0XHRcdHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSBcInVuZGVmaW5lZFwiICYmIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSA/XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBlbGVtLCBhcmd1bWVudHMgKSA6IHVuZGVmaW5lZDtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZVxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBUaGVyZSAqbXVzdCogYmUgYSB0eXBlLCBubyBhdHRhY2hpbmcgbmFtZXNwYWNlLW9ubHkgaGFuZGxlcnNcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBldmVudCBjaGFuZ2VzIGl0cyB0eXBlLCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBjaGFuZ2VkIHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBJZiBzZWxlY3RvciBkZWZpbmVkLCBkZXRlcm1pbmUgc3BlY2lhbCBldmVudCBhcGkgdHlwZSwgb3RoZXJ3aXNlIGdpdmVuIHR5cGVcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblxuXHRcdFx0Ly8gVXBkYXRlIHNwZWNpYWwgYmFzZWQgb24gbmV3bHkgcmVzZXQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIGhhbmRsZU9iaiBpcyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzXG5cdFx0XHRoYW5kbGVPYmogPSBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdG9yaWdUeXBlOiBvcmlnVHlwZSxcblx0XHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdFx0aGFuZGxlcjogaGFuZGxlcixcblx0XHRcdFx0Z3VpZDogaGFuZGxlci5ndWlkLFxuXHRcdFx0XHRzZWxlY3Rvcjogc2VsZWN0b3IsXG5cdFx0XHRcdG5lZWRzQ29udGV4dDogc2VsZWN0b3IgJiYgalF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICksXG5cdFx0XHRcdG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApXG5cdFx0XHR9LCBoYW5kbGVPYmpJbiApO1xuXG5cdFx0XHQvLyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlIGlmIHdlJ3JlIHRoZSBmaXJzdFxuXHRcdFx0aWYgKCAhKCBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdICkgKSB7XG5cdFx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBbXTtcblx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7XG5cblx0XHRcdFx0Ly8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lciBpZiB0aGUgc3BlY2lhbCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlXG5cdFx0XHRcdGlmICggIXNwZWNpYWwuc2V0dXAgfHxcblx0XHRcdFx0XHRzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtLmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGV2ZW50SGFuZGxlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggc3BlY2lhbC5hZGQgKSB7XG5cdFx0XHRcdHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXG5cdFx0XHRcdGlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgdG8gdGhlIGVsZW1lbnQncyBoYW5kbGVyIGxpc3QsIGRlbGVnYXRlcyBpbiBmcm9udFxuXHRcdFx0aWYgKCBzZWxlY3RvciApIHtcblx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb25cblx0XHRcdGpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7XG5cdFx0fVxuXG5cdH0sXG5cblx0Ly8gRGV0YWNoIGFuIGV2ZW50IG9yIHNldCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50XG5cdHJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7XG5cblx0XHR2YXIgaiwgb3JpZ0NvdW50LCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuaGFzRGF0YSggZWxlbSApICYmIGRhdGFQcml2LmdldCggZWxlbSApO1xuXG5cdFx0aWYgKCAhZWxlbURhdGEgfHwgISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gT25jZSBmb3IgZWFjaCB0eXBlLm5hbWVzcGFjZSBpbiB0eXBlczsgdHlwZSBtYXkgYmUgb21pdHRlZFxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBVbmJpbmQgYWxsIGV2ZW50cyAob24gdGhpcyBuYW1lc3BhY2UsIGlmIHByb3ZpZGVkKSBmb3IgdGhlIGVsZW1lbnRcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKyB0eXBlc1sgdCBdLCBoYW5kbGVyLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gfHwgW107XG5cdFx0XHR0bXAgPSB0bXBbIDIgXSAmJlxuXHRcdFx0XHRuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKCBcIlxcXFwuKD86LipcXFxcLnwpXCIgKSArIFwiKFxcXFwufCQpXCIgKTtcblxuXHRcdFx0Ly8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50c1xuXHRcdFx0b3JpZ0NvdW50ID0gaiA9IGhhbmRsZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaiBdO1xuXG5cdFx0XHRcdGlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiZcblx0XHRcdFx0XHQoICFoYW5kbGVyIHx8IGhhbmRsZXIuZ3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSAmJlxuXHRcdFx0XHRcdCggIXRtcCB8fCB0bXAudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiZcblx0XHRcdFx0XHQoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8XG5cdFx0XHRcdFx0XHRzZWxlY3RvciA9PT0gXCIqKlwiICYmIGhhbmRsZU9iai5zZWxlY3RvciApICkge1xuXHRcdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaiwgMSApO1xuXG5cdFx0XHRcdFx0aWYgKCBoYW5kbGVPYmouc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LS07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc3BlY2lhbC5yZW1vdmUgKSB7XG5cdFx0XHRcdFx0XHRzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVtb3ZlIGdlbmVyaWMgZXZlbnQgaGFuZGxlciBpZiB3ZSByZW1vdmVkIHNvbWV0aGluZyBhbmQgbm8gbW9yZSBoYW5kbGVycyBleGlzdFxuXHRcdFx0Ly8gKGF2b2lkcyBwb3RlbnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJzaW9uIGR1cmluZyByZW1vdmFsIG9mIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMpXG5cdFx0XHRpZiAoIG9yaWdDb3VudCAmJiAhaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnRlYXJkb3duIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3BhY2VzLCBlbGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGVsZXRlIGV2ZW50c1sgdHlwZSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSBkYXRhIGFuZCB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2VkXG5cdFx0aWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRzICkgKSB7XG5cdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiaGFuZGxlIGV2ZW50c1wiICk7XG5cdFx0fVxuXHR9LFxuXG5cdGRpc3BhdGNoOiBmdW5jdGlvbiggbmF0aXZlRXZlbnQgKSB7XG5cblx0XHR2YXIgaSwgaiwgcmV0LCBtYXRjaGVkLCBoYW5kbGVPYmosIGhhbmRsZXJRdWV1ZSxcblx0XHRcdGFyZ3MgPSBuZXcgQXJyYXkoIGFyZ3VtZW50cy5sZW5ndGggKSxcblxuXHRcdFx0Ly8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0XG5cdFx0XHRldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIG5hdGl2ZUV2ZW50ICksXG5cblx0XHRcdGhhbmRsZXJzID0gKFxuXHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZXZlbnRzXCIgKSB8fCBPYmplY3QuY3JlYXRlKCBudWxsIClcblx0XHRcdClbIGV2ZW50LnR5cGUgXSB8fCBbXSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9O1xuXG5cdFx0Ly8gVXNlIHRoZSBmaXgtZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnRcblx0XHRhcmdzWyAwIF0gPSBldmVudDtcblxuXHRcdGZvciAoIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0YXJnc1sgaSBdID0gYXJndW1lbnRzWyBpIF07XG5cdFx0fVxuXG5cdFx0ZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzO1xuXG5cdFx0Ly8gQ2FsbCB0aGUgcHJlRGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlLCBhbmQgbGV0IGl0IGJhaWwgaWYgZGVzaXJlZFxuXHRcdGlmICggc3BlY2lhbC5wcmVEaXNwYXRjaCAmJiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBoYW5kbGVyc1xuXHRcdGhhbmRsZXJRdWV1ZSA9IGpRdWVyeS5ldmVudC5oYW5kbGVycy5jYWxsKCB0aGlzLCBldmVudCwgaGFuZGxlcnMgKTtcblxuXHRcdC8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2hlZC5lbGVtO1xuXG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBoYW5kbGVPYmogPSBtYXRjaGVkLmhhbmRsZXJzWyBqKysgXSApICYmXG5cdFx0XHRcdCFldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZSBldmVudCBpcyBuYW1lc3BhY2VkLCB0aGVuIGVhY2ggaGFuZGxlciBpcyBvbmx5IGludm9rZWQgaWYgaXQgaXNcblx0XHRcdFx0Ly8gc3BlY2lhbGx5IHVuaXZlcnNhbCBvciBpdHMgbmFtZXNwYWNlcyBhcmUgYSBzdXBlcnNldCBvZiB0aGUgZXZlbnQncy5cblx0XHRcdFx0aWYgKCAhZXZlbnQucm5hbWVzcGFjZSB8fCBoYW5kbGVPYmoubmFtZXNwYWNlID09PSBmYWxzZSB8fFxuXHRcdFx0XHRcdGV2ZW50LnJuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkge1xuXG5cdFx0XHRcdFx0ZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqO1xuXHRcdFx0XHRcdGV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTtcblxuXHRcdFx0XHRcdHJldCA9ICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30gKS5oYW5kbGUgfHxcblx0XHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyICkuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApO1xuXG5cdFx0XHRcdFx0aWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdGlmICggKCBldmVudC5yZXN1bHQgPSByZXQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGwgdGhlIHBvc3REaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGVcblx0XHRpZiAoIHNwZWNpYWwucG9zdERpc3BhdGNoICkge1xuXHRcdFx0c3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdGhhbmRsZXJzOiBmdW5jdGlvbiggZXZlbnQsIGhhbmRsZXJzICkge1xuXHRcdHZhciBpLCBoYW5kbGVPYmosIHNlbCwgbWF0Y2hlZEhhbmRsZXJzLCBtYXRjaGVkU2VsZWN0b3JzLFxuXHRcdFx0aGFuZGxlclF1ZXVlID0gW10sXG5cdFx0XHRkZWxlZ2F0ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCxcblx0XHRcdGN1ciA9IGV2ZW50LnRhcmdldDtcblxuXHRcdC8vIEZpbmQgZGVsZWdhdGUgaGFuZGxlcnNcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05XG5cdFx0XHQvLyBCbGFjay1ob2xlIFNWRyA8dXNlPiBpbnN0YW5jZSB0cmVlcyAodHJhYy0xMzE4MClcblx0XHRcdGN1ci5ub2RlVHlwZSAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDJcblx0XHRcdC8vIFN1cHByZXNzIHNwZWMtdmlvbGF0aW5nIGNsaWNrcyBpbmRpY2F0aW5nIGEgbm9uLXByaW1hcnkgcG9pbnRlciBidXR0b24gKHRyYWMtMzg2MSlcblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50LXR5cGUtY2xpY2tcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdC8vIC4uLmJ1dCBub3QgYXJyb3cga2V5IFwiY2xpY2tzXCIgb2YgcmFkaW8gaW5wdXRzLCB3aGljaCBjYW4gaGF2ZSBgYnV0dG9uYCAtMSAoZ2gtMjM0Mylcblx0XHRcdCEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBldmVudC5idXR0b24gPj0gMSApICkge1xuXG5cdFx0XHRmb3IgKCA7IGN1ciAhPT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5vZGUgfHwgdGhpcyApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjaGVjayBub24tZWxlbWVudHMgKHRyYWMtMTMyMDgpXG5cdFx0XHRcdC8vIERvbid0IHByb2Nlc3MgY2xpY2tzIG9uIGRpc2FibGVkIGVsZW1lbnRzICh0cmFjLTY5MTEsIHRyYWMtODE2NSwgdHJhYy0xMTM4MiwgdHJhYy0xMTc2NClcblx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPT09IDEgJiYgISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGN1ci5kaXNhYmxlZCA9PT0gdHJ1ZSApICkge1xuXHRcdFx0XHRcdG1hdGNoZWRIYW5kbGVycyA9IFtdO1xuXHRcdFx0XHRcdG1hdGNoZWRTZWxlY3RvcnMgPSB7fTtcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGRlbGVnYXRlQ291bnQ7IGkrKyApIHtcblx0XHRcdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBpIF07XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IGNvbmZsaWN0IHdpdGggT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzICh0cmFjLTEzMjAzKVxuXHRcdFx0XHRcdFx0c2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yICsgXCIgXCI7XG5cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPSBoYW5kbGVPYmoubmVlZHNDb250ZXh0ID9cblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkoIHNlbCwgdGhpcyApLmluZGV4KCBjdXIgKSA+IC0xIDpcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZCggc2VsLCB0aGlzLCBudWxsLCBbIGN1ciBdICkubGVuZ3RoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRIYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVkSGFuZGxlcnMgfSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkgaGFuZGxlcnNcblx0XHRjdXIgPSB0aGlzO1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCA8IGhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBoYW5kbGVyUXVldWU7XG5cdH0sXG5cblx0YWRkUHJvcDogZnVuY3Rpb24oIG5hbWUsIGhvb2sgKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBqUXVlcnkuRXZlbnQucHJvdG90eXBlLCBuYW1lLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXG5cdFx0XHRnZXQ6IGlzRnVuY3Rpb24oIGhvb2sgKSA/XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGhvb2soIHRoaXMub3JpZ2luYWxFdmVudCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFsgbmFtZSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0c2V0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgbmFtZSwge1xuXHRcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGZpeDogZnVuY3Rpb24oIG9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0cmV0dXJuIG9yaWdpbmFsRXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0b3JpZ2luYWxFdmVudCA6XG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7XG5cdH0sXG5cblx0c3BlY2lhbDoge1xuXHRcdGxvYWQ6IHtcblxuXHRcdFx0Ly8gUHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9hZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZFxuXHRcdFx0bm9CdWJibGU6IHRydWVcblx0XHR9LFxuXHRcdGNsaWNrOiB7XG5cblx0XHRcdC8vIFV0aWxpemUgbmF0aXZlIGV2ZW50IHRvIGVuc3VyZSBjb3JyZWN0IHN0YXRlIGZvciBjaGVja2FibGUgaW5wdXRzXG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oIGRhdGEgKSB7XG5cblx0XHRcdFx0Ly8gRm9yIG11dHVhbCBjb21wcmVzc2liaWxpdHkgd2l0aCBfZGVmYXVsdCwgcmVwbGFjZSBgdGhpc2AgYWNjZXNzIHdpdGggYSBsb2NhbCB2YXIuXG5cdFx0XHRcdC8vIGB8fCBkYXRhYCBpcyBkZWFkIGNvZGUgbWVhbnQgb25seSB0byBwcmVzZXJ2ZSB0aGUgdmFyaWFibGUgdGhyb3VnaCBtaW5pZmljYXRpb24uXG5cdFx0XHRcdHZhciBlbCA9IHRoaXMgfHwgZGF0YTtcblxuXHRcdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHQvLyBkYXRhUHJpdi5zZXQoIGVsLCBcImNsaWNrXCIsIC4uLiApXG5cdFx0XHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIGVsLCBcImNsaWNrXCIsIHRydWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJldHVybiBmYWxzZSB0byBhbGxvdyBub3JtYWwgcHJvY2Vzc2luZyBpbiB0aGUgY2FsbGVyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHR0cmlnZ2VyOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIEZvcmNlIHNldHVwIGJlZm9yZSB0cmlnZ2VyaW5nIGEgY2xpY2tcblx0XHRcdFx0aWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbC50eXBlICkgJiZcblx0XHRcdFx0XHRlbC5jbGljayAmJiBub2RlTmFtZSggZWwsIFwiaW5wdXRcIiApICkge1xuXG5cdFx0XHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIGVsLCBcImNsaWNrXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJldHVybiBub24tZmFsc2UgdG8gYWxsb3cgbm9ybWFsIGV2ZW50LXBhdGggcHJvcGFnYXRpb25cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBGb3IgY3Jvc3MtYnJvd3NlciBjb25zaXN0ZW5jeSwgc3VwcHJlc3MgbmF0aXZlIC5jbGljaygpIG9uIGxpbmtzXG5cdFx0XHQvLyBBbHNvIHByZXZlbnQgaXQgaWYgd2UncmUgY3VycmVudGx5IGluc2lkZSBhIGxldmVyYWdlZCBuYXRpdmUtZXZlbnQgc3RhY2tcblx0XHRcdF9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRcdHJldHVybiByY2hlY2thYmxlVHlwZS50ZXN0KCB0YXJnZXQudHlwZSApICYmXG5cdFx0XHRcdFx0dGFyZ2V0LmNsaWNrICYmIG5vZGVOYW1lKCB0YXJnZXQsIFwiaW5wdXRcIiApICYmXG5cdFx0XHRcdFx0ZGF0YVByaXYuZ2V0KCB0YXJnZXQsIFwiY2xpY2tcIiApIHx8XG5cdFx0XHRcdFx0bm9kZU5hbWUoIHRhcmdldCwgXCJhXCIgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0YmVmb3JldW5sb2FkOiB7XG5cdFx0XHRwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDIwK1xuXHRcdFx0XHQvLyBGaXJlZm94IGRvZXNuJ3QgYWxlcnQgaWYgdGhlIHJldHVyblZhbHVlIGZpZWxkIGlzIG5vdCBzZXQuXG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRldmVudC5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlID0gZXZlbnQucmVzdWx0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBFbnN1cmUgdGhlIHByZXNlbmNlIG9mIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgaGFuZGxlcyBtYW51YWxseS10cmlnZ2VyZWRcbi8vIHN5bnRoZXRpYyBldmVudHMgYnkgaW50ZXJydXB0aW5nIHByb2dyZXNzIHVudGlsIHJlaW52b2tlZCBpbiByZXNwb25zZSB0b1xuLy8gKm5hdGl2ZSogZXZlbnRzIHRoYXQgaXQgZmlyZXMgZGlyZWN0bHksIGVuc3VyaW5nIHRoYXQgc3RhdGUgY2hhbmdlcyBoYXZlXG4vLyBhbHJlYWR5IG9jY3VycmVkIGJlZm9yZSBvdGhlciBsaXN0ZW5lcnMgYXJlIGludm9rZWQuXG5mdW5jdGlvbiBsZXZlcmFnZU5hdGl2ZSggZWwsIHR5cGUsIGlzU2V0dXAgKSB7XG5cblx0Ly8gTWlzc2luZyBgaXNTZXR1cGAgaW5kaWNhdGVzIGEgdHJpZ2dlciBjYWxsLCB3aGljaCBtdXN0IGZvcmNlIHNldHVwIHRocm91Z2ggalF1ZXJ5LmV2ZW50LmFkZFxuXHRpZiAoICFpc1NldHVwICkge1xuXHRcdGlmICggZGF0YVByaXYuZ2V0KCBlbCwgdHlwZSApID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBlbCwgdHlwZSwgcmV0dXJuVHJ1ZSApO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZWdpc3RlciB0aGUgY29udHJvbGxlciBhcyBhIHNwZWNpYWwgdW5pdmVyc2FsIGhhbmRsZXIgZm9yIGFsbCBldmVudCBuYW1lc3BhY2VzXG5cdGRhdGFQcml2LnNldCggZWwsIHR5cGUsIGZhbHNlICk7XG5cdGpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCB7XG5cdFx0bmFtZXNwYWNlOiBmYWxzZSxcblx0XHRoYW5kbGVyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgcmVzdWx0LFxuXHRcdFx0XHRzYXZlZCA9IGRhdGFQcml2LmdldCggdGhpcywgdHlwZSApO1xuXG5cdFx0XHRpZiAoICggZXZlbnQuaXNUcmlnZ2VyICYgMSApICYmIHRoaXNbIHR5cGUgXSApIHtcblxuXHRcdFx0XHQvLyBJbnRlcnJ1cHQgcHJvY2Vzc2luZyBvZiB0aGUgb3V0ZXIgc3ludGhldGljIC50cmlnZ2VyKCllZCBldmVudFxuXHRcdFx0XHRpZiAoICFzYXZlZCApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGFyZ3VtZW50cyBmb3IgdXNlIHdoZW4gaGFuZGxpbmcgdGhlIGlubmVyIG5hdGl2ZSBldmVudFxuXHRcdFx0XHRcdC8vIFRoZXJlIHdpbGwgYWx3YXlzIGJlIGF0IGxlYXN0IG9uZSBhcmd1bWVudCAoYW4gZXZlbnQgb2JqZWN0KSwgc28gdGhpcyBhcnJheVxuXHRcdFx0XHRcdC8vIHdpbGwgbm90IGJlIGNvbmZ1c2VkIHdpdGggYSBsZWZ0b3ZlciBjYXB0dXJlIG9iamVjdC5cblx0XHRcdFx0XHRzYXZlZCA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgc2F2ZWQgKTtcblxuXHRcdFx0XHRcdC8vIFRyaWdnZXIgdGhlIG5hdGl2ZSBldmVudCBhbmQgY2FwdHVyZSBpdHMgcmVzdWx0XG5cdFx0XHRcdFx0dGhpc1sgdHlwZSBdKCk7XG5cdFx0XHRcdFx0cmVzdWx0ID0gZGF0YVByaXYuZ2V0KCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBmYWxzZSApO1xuXG5cdFx0XHRcdFx0aWYgKCBzYXZlZCAhPT0gcmVzdWx0ICkge1xuXG5cdFx0XHRcdFx0XHQvLyBDYW5jZWwgdGhlIG91dGVyIHN5bnRoZXRpYyBldmVudFxuXHRcdFx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGlzIGlzIGFuIGlubmVyIHN5bnRoZXRpYyBldmVudCBmb3IgYW4gZXZlbnQgd2l0aCBhIGJ1YmJsaW5nIHN1cnJvZ2F0ZVxuXHRcdFx0XHQvLyAoZm9jdXMgb3IgYmx1ciksIGFzc3VtZSB0aGF0IHRoZSBzdXJyb2dhdGUgYWxyZWFkeSBwcm9wYWdhdGVkIGZyb20gdHJpZ2dlcmluZ1xuXHRcdFx0XHQvLyB0aGUgbmF0aXZlIGV2ZW50IGFuZCBwcmV2ZW50IHRoYXQgZnJvbSBoYXBwZW5pbmcgYWdhaW4gaGVyZS5cblx0XHRcdFx0Ly8gVGhpcyB0ZWNobmljYWxseSBnZXRzIHRoZSBvcmRlcmluZyB3cm9uZyB3LnIudC4gdG8gYC50cmlnZ2VyKClgIChpbiB3aGljaCB0aGVcblx0XHRcdFx0Ly8gYnViYmxpbmcgc3Vycm9nYXRlIHByb3BhZ2F0ZXMgKmFmdGVyKiB0aGUgbm9uLWJ1YmJsaW5nIGJhc2UpLCBidXQgdGhhdCBzZWVtc1xuXHRcdFx0XHQvLyBsZXNzIGJhZCB0aGFuIGR1cGxpY2F0aW9uLlxuXHRcdFx0XHR9IGVsc2UgaWYgKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge30gKS5kZWxlZ2F0ZVR5cGUgKSB7XG5cdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIG5hdGl2ZSBldmVudCB0cmlnZ2VyZWQgYWJvdmUsIGV2ZXJ5dGhpbmcgaXMgbm93IGluIG9yZGVyXG5cdFx0XHQvLyBGaXJlIGFuIGlubmVyIHN5bnRoZXRpYyBldmVudCB3aXRoIHRoZSBvcmlnaW5hbCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIHNhdmVkICkge1xuXG5cdFx0XHRcdC8vIC4uLmFuZCBjYXB0dXJlIHRoZSByZXN1bHRcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBqUXVlcnkuZXZlbnQudHJpZ2dlcihcblx0XHRcdFx0XHRzYXZlZFsgMCBdLFxuXHRcdFx0XHRcdHNhdmVkLnNsaWNlKCAxICksXG5cdFx0XHRcdFx0dGhpc1xuXHRcdFx0XHQpICk7XG5cblx0XHRcdFx0Ly8gQWJvcnQgaGFuZGxpbmcgb2YgdGhlIG5hdGl2ZSBldmVudCBieSBhbGwgalF1ZXJ5IGhhbmRsZXJzIHdoaWxlIGFsbG93aW5nXG5cdFx0XHRcdC8vIG5hdGl2ZSBoYW5kbGVycyBvbiB0aGUgc2FtZSBlbGVtZW50IHRvIHJ1bi4gT24gdGFyZ2V0LCB0aGlzIGlzIGFjaGlldmVkXG5cdFx0XHRcdC8vIGJ5IHN0b3BwaW5nIGltbWVkaWF0ZSBwcm9wYWdhdGlvbiBqdXN0IG9uIHRoZSBqUXVlcnkgZXZlbnQuIEhvd2V2ZXIsXG5cdFx0XHRcdC8vIHRoZSBuYXRpdmUgZXZlbnQgaXMgcmUtd3JhcHBlZCBieSBhIGpRdWVyeSBvbmUgb24gZWFjaCBsZXZlbCBvZiB0aGVcblx0XHRcdFx0Ly8gcHJvcGFnYXRpb24gc28gdGhlIG9ubHkgd2F5IHRvIHN0b3AgaXQgZm9yIGpRdWVyeSBpcyB0byBzdG9wIGl0IGZvclxuXHRcdFx0XHQvLyBldmVyeW9uZSB2aWEgbmF0aXZlIGBzdG9wUHJvcGFnYXRpb24oKWAuIFRoaXMgaXMgbm90IGEgcHJvYmxlbSBmb3Jcblx0XHRcdFx0Ly8gZm9jdXMvYmx1ciB3aGljaCBkb24ndCBidWJibGUsIGJ1dCBpdCBkb2VzIGFsc28gc3RvcCBjbGljayBvbiBjaGVja2JveGVzXG5cdFx0XHRcdC8vIGFuZCByYWRpb3MuIFdlIGFjY2VwdCB0aGlzIGxpbWl0YXRpb24uXG5cdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmpRdWVyeS5yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7XG5cblx0Ly8gVGhpcyBcImlmXCIgaXMgbmVlZGVkIGZvciBwbGFpbiBvYmplY3RzXG5cdGlmICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkge1xuXHRcdGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlICk7XG5cdH1cbn07XG5cbmpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkge1xuXG5cdC8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5d29yZFxuXHRpZiAoICEoIHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQgKSApIHtcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gRXZlbnQgb2JqZWN0XG5cdGlmICggc3JjICYmIHNyYy50eXBlICkge1xuXHRcdHRoaXMub3JpZ2luYWxFdmVudCA9IHNyYztcblx0XHR0aGlzLnR5cGUgPSBzcmMudHlwZTtcblxuXHRcdC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVkXG5cdFx0Ly8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBzcmMuZGVmYXVsdFByZXZlbnRlZCB8fFxuXHRcdFx0XHRzcmMuZGVmYXVsdFByZXZlbnRlZCA9PT0gdW5kZWZpbmVkICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5XG5cdFx0XHRcdHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0cmV0dXJuVHJ1ZSA6XG5cdFx0XHRyZXR1cm5GYWxzZTtcblxuXHRcdC8vIENyZWF0ZSB0YXJnZXQgcHJvcGVydGllc1xuXHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA8PTYgLSA3IG9ubHlcblx0XHQvLyBUYXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAodHJhYy01MDQsIHRyYWMtMTMxNDMpXG5cdFx0dGhpcy50YXJnZXQgPSAoIHNyYy50YXJnZXQgJiYgc3JjLnRhcmdldC5ub2RlVHlwZSA9PT0gMyApID9cblx0XHRcdHNyYy50YXJnZXQucGFyZW50Tm9kZSA6XG5cdFx0XHRzcmMudGFyZ2V0O1xuXG5cdFx0dGhpcy5jdXJyZW50VGFyZ2V0ID0gc3JjLmN1cnJlbnRUYXJnZXQ7XG5cdFx0dGhpcy5yZWxhdGVkVGFyZ2V0ID0gc3JjLnJlbGF0ZWRUYXJnZXQ7XG5cblx0Ly8gRXZlbnQgdHlwZVxuXHR9IGVsc2Uge1xuXHRcdHRoaXMudHlwZSA9IHNyYztcblx0fVxuXG5cdC8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHByb3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0XG5cdGlmICggcHJvcHMgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdGhpcywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIENyZWF0ZSBhIHRpbWVzdGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0IGhhdmUgb25lXG5cdHRoaXMudGltZVN0YW1wID0gc3JjICYmIHNyYy50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTtcblxuXHQvLyBNYXJrIGl0IGFzIGZpeGVkXG5cdHRoaXNbIGpRdWVyeS5leHBhbmRvIF0gPSB0cnVlO1xufTtcblxuLy8galF1ZXJ5LkV2ZW50IGlzIGJhc2VkIG9uIERPTTMgRXZlbnRzIGFzIHNwZWNpZmllZCBieSB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBCaW5kaW5nXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sXG5qUXVlcnkuRXZlbnQucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LkV2ZW50LFxuXHRpc0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVybkZhbHNlLFxuXHRpc1Byb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNTaW11bGF0ZWQ6IGZhbHNlLFxuXG5cdHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdH1cblxuXHRcdHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdH1cbn07XG5cbi8vIEluY2x1ZGVzIGFsbCBjb21tb24gZXZlbnQgcHJvcHMgaW5jbHVkaW5nIEtleUV2ZW50IGFuZCBNb3VzZUV2ZW50IHNwZWNpZmljIHByb3BzXG5qUXVlcnkuZWFjaCgge1xuXHRhbHRLZXk6IHRydWUsXG5cdGJ1YmJsZXM6IHRydWUsXG5cdGNhbmNlbGFibGU6IHRydWUsXG5cdGNoYW5nZWRUb3VjaGVzOiB0cnVlLFxuXHRjdHJsS2V5OiB0cnVlLFxuXHRkZXRhaWw6IHRydWUsXG5cdGV2ZW50UGhhc2U6IHRydWUsXG5cdG1ldGFLZXk6IHRydWUsXG5cdHBhZ2VYOiB0cnVlLFxuXHRwYWdlWTogdHJ1ZSxcblx0c2hpZnRLZXk6IHRydWUsXG5cdHZpZXc6IHRydWUsXG5cdFwiY2hhclwiOiB0cnVlLFxuXHRjb2RlOiB0cnVlLFxuXHRjaGFyQ29kZTogdHJ1ZSxcblx0a2V5OiB0cnVlLFxuXHRrZXlDb2RlOiB0cnVlLFxuXHRidXR0b246IHRydWUsXG5cdGJ1dHRvbnM6IHRydWUsXG5cdGNsaWVudFg6IHRydWUsXG5cdGNsaWVudFk6IHRydWUsXG5cdG9mZnNldFg6IHRydWUsXG5cdG9mZnNldFk6IHRydWUsXG5cdHBvaW50ZXJJZDogdHJ1ZSxcblx0cG9pbnRlclR5cGU6IHRydWUsXG5cdHNjcmVlblg6IHRydWUsXG5cdHNjcmVlblk6IHRydWUsXG5cdHRhcmdldFRvdWNoZXM6IHRydWUsXG5cdHRvRWxlbWVudDogdHJ1ZSxcblx0dG91Y2hlczogdHJ1ZSxcblx0d2hpY2g6IHRydWVcbn0sIGpRdWVyeS5ldmVudC5hZGRQcm9wICk7XG5cbmpRdWVyeS5lYWNoKCB7IGZvY3VzOiBcImZvY3VzaW5cIiwgYmx1cjogXCJmb2N1c291dFwiIH0sIGZ1bmN0aW9uKCB0eXBlLCBkZWxlZ2F0ZVR5cGUgKSB7XG5cblx0ZnVuY3Rpb24gZm9jdXNNYXBwZWRIYW5kbGVyKCBuYXRpdmVFdmVudCApIHtcblx0XHRpZiAoIGRvY3VtZW50LmRvY3VtZW50TW9kZSApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErXG5cdFx0XHQvLyBBdHRhY2ggYSBzaW5nbGUgZm9jdXNpbi9mb2N1c291dCBoYW5kbGVyIG9uIHRoZSBkb2N1bWVudCB3aGlsZSBzb21lb25lIHdhbnRzXG5cdFx0XHQvLyBmb2N1cy9ibHVyLiBUaGlzIGlzIGJlY2F1c2UgdGhlIGZvcm1lciBhcmUgc3luY2hyb25vdXMgaW4gSUUgd2hpbGUgdGhlIGxhdHRlclxuXHRcdFx0Ly8gYXJlIGFzeW5jLiBJbiBvdGhlciBicm93c2VycywgYWxsIHRob3NlIGhhbmRsZXJzIGFyZSBpbnZva2VkIHN5bmNocm9ub3VzbHkuXG5cblx0XHRcdC8vIGBoYW5kbGVgIGZyb20gcHJpdmF0ZSBkYXRhIHdvdWxkIGFscmVhZHkgd3JhcCB0aGUgZXZlbnQsIGJ1dCB3ZSBuZWVkXG5cdFx0XHQvLyB0byBjaGFuZ2UgdGhlIGB0eXBlYCBoZXJlLlxuXHRcdFx0dmFyIGhhbmRsZSA9IGRhdGFQcml2LmdldCggdGhpcywgXCJoYW5kbGVcIiApLFxuXHRcdFx0XHRldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIG5hdGl2ZUV2ZW50ICk7XG5cdFx0XHRldmVudC50eXBlID0gbmF0aXZlRXZlbnQudHlwZSA9PT0gXCJmb2N1c2luXCIgPyBcImZvY3VzXCIgOiBcImJsdXJcIjtcblx0XHRcdGV2ZW50LmlzU2ltdWxhdGVkID0gdHJ1ZTtcblxuXHRcdFx0Ly8gRmlyc3QsIGhhbmRsZSBmb2N1c2luL2ZvY3Vzb3V0XG5cdFx0XHRoYW5kbGUoIG5hdGl2ZUV2ZW50ICk7XG5cblx0XHRcdC8vIC4uLnRoZW4sIGhhbmRsZSBmb2N1cy9ibHVyXG5cdFx0XHQvL1xuXHRcdFx0Ly8gZm9jdXMvYmx1ciBkb24ndCBidWJibGUgd2hpbGUgZm9jdXNpbi9mb2N1c291dCBkbzsgc2ltdWxhdGUgdGhlIGZvcm1lciBieSBvbmx5XG5cdFx0XHQvLyBpbnZva2luZyB0aGUgaGFuZGxlciBhdCB0aGUgbG93ZXIgbGV2ZWwuXG5cdFx0XHRpZiAoIGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCApIHtcblxuXHRcdFx0XHQvLyBUaGUgc2V0dXAgcGFydCBjYWxscyBgbGV2ZXJhZ2VOYXRpdmVgLCB3aGljaCwgaW4gdHVybiwgY2FsbHNcblx0XHRcdFx0Ly8gYGpRdWVyeS5ldmVudC5hZGRgLCBzbyBldmVudCBoYW5kbGUgd2lsbCBhbHJlYWR5IGhhdmUgYmVlbiBzZXRcblx0XHRcdFx0Ly8gYnkgdGhpcyBwb2ludC5cblx0XHRcdFx0aGFuZGxlKCBldmVudCApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIEZvciBub24tSUUgYnJvd3NlcnMsIGF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciBvbiB0aGUgZG9jdW1lbnRcblx0XHRcdC8vIHdoaWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9mb2N1c291dC5cblx0XHRcdGpRdWVyeS5ldmVudC5zaW11bGF0ZSggZGVsZWdhdGVUeXBlLCBuYXRpdmVFdmVudC50YXJnZXQsXG5cdFx0XHRcdGpRdWVyeS5ldmVudC5maXgoIG5hdGl2ZUV2ZW50ICkgKTtcblx0XHR9XG5cdH1cblxuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdID0ge1xuXG5cdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBjb3JyZWN0XG5cdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHR2YXIgYXR0YWNoZXM7XG5cblx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHQvLyBkYXRhUHJpdi5zZXQoIHRoaXMsIFwiZm9jdXNcIiwgLi4uIClcblx0XHRcdC8vIGRhdGFQcml2LnNldCggdGhpcywgXCJibHVyXCIsIC4uLiApXG5cdFx0XHRsZXZlcmFnZU5hdGl2ZSggdGhpcywgdHlwZSwgdHJ1ZSApO1xuXG5cdFx0XHRpZiAoIGRvY3VtZW50LmRvY3VtZW50TW9kZSApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErXG5cdFx0XHRcdC8vIFdlIHVzZSB0aGUgc2FtZSBuYXRpdmUgaGFuZGxlciBmb3IgZm9jdXNpbiAmIGZvY3VzIChhbmQgZm9jdXNvdXQgJiBibHVyKVxuXHRcdFx0XHQvLyBzbyB3ZSBuZWVkIHRvIGNvb3JkaW5hdGUgc2V0dXAgJiB0ZWFyZG93biBwYXJ0cyBiZXR3ZWVuIHRob3NlIGV2ZW50cy5cblx0XHRcdFx0Ly8gVXNlIGBkZWxlZ2F0ZVR5cGVgIGFzIHRoZSBrZXkgYXMgYHR5cGVgIGlzIGFscmVhZHkgdXNlZCBieSBgbGV2ZXJhZ2VOYXRpdmVgLlxuXHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmdldCggdGhpcywgZGVsZWdhdGVUeXBlICk7XG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdHRoaXMuYWRkRXZlbnRMaXN0ZW5lciggZGVsZWdhdGVUeXBlLCBmb2N1c01hcHBlZEhhbmRsZXIgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIGRlbGVnYXRlVHlwZSwgKCBhdHRhY2hlcyB8fCAwICkgKyAxICk7XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIFJldHVybiBmYWxzZSB0byBhbGxvdyBub3JtYWwgcHJvY2Vzc2luZyBpbiB0aGUgY2FsbGVyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBGb3JjZSBzZXR1cCBiZWZvcmUgdHJpZ2dlclxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBhdHRhY2hlcztcblxuXHRcdFx0aWYgKCBkb2N1bWVudC5kb2N1bWVudE1vZGUgKSB7XG5cdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuZ2V0KCB0aGlzLCBkZWxlZ2F0ZVR5cGUgKSAtIDE7XG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lciggZGVsZWdhdGVUeXBlLCBmb2N1c01hcHBlZEhhbmRsZXIgKTtcblx0XHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIHRoaXMsIGRlbGVnYXRlVHlwZSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgZGVsZWdhdGVUeXBlLCBhdHRhY2hlcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIFJldHVybiBmYWxzZSB0byBpbmRpY2F0ZSBzdGFuZGFyZCB0ZWFyZG93biBzaG91bGQgYmUgYXBwbGllZFxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8vIFN1cHByZXNzIG5hdGl2ZSBmb2N1cyBvciBibHVyIGlmIHdlJ3JlIGN1cnJlbnRseSBpbnNpZGVcblx0XHQvLyBhIGxldmVyYWdlZCBuYXRpdmUtZXZlbnQgc3RhY2tcblx0XHRfZGVmYXVsdDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZXZlbnQudGFyZ2V0LCB0eXBlICk7XG5cdFx0fSxcblxuXHRcdGRlbGVnYXRlVHlwZTogZGVsZWdhdGVUeXBlXG5cdH07XG5cblx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTQ0XG5cdC8vIEZpcmVmb3ggZG9lc24ndCBoYXZlIGZvY3VzKGluIHwgb3V0KSBldmVudHNcblx0Ly8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc3ODdcblx0Ly9cblx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NDggLSA0OSwgU2FmYXJpIDw9OS4wIC0gOS4xXG5cdC8vIGZvY3VzKGluIHwgb3V0KSBldmVudHMgZmlyZSBhZnRlciBmb2N1cyAmIGJsdXIgZXZlbnRzLFxuXHQvLyB3aGljaCBpcyBzcGVjIHZpb2xhdGlvbiAtIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWZvY3VzZXZlbnQtZXZlbnQtb3JkZXJcblx0Ly8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDk4NTdcblx0Ly9cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExK1xuXHQvLyBUbyBwcmVzZXJ2ZSByZWxhdGl2ZSBmb2N1c2luL2ZvY3VzICYgZm9jdXNvdXQvYmx1ciBldmVudCBvcmRlciBndWFyYW50ZWVkIG9uIHRoZSAzLnggYnJhbmNoLFxuXHQvLyBhdHRhY2ggYSBzaW5nbGUgaGFuZGxlciBmb3IgYm90aCBldmVudHMgaW4gSUUuXG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBkZWxlZ2F0ZVR5cGUgXSA9IHtcblx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEhhbmRsZTogcmVndWxhciBub2RlcyAodmlhIGB0aGlzLm93bmVyRG9jdW1lbnRgKSwgd2luZG93XG5cdFx0XHQvLyAodmlhIGB0aGlzLmRvY3VtZW50YCkgJiBkb2N1bWVudCAodmlhIGB0aGlzYCkuXG5cdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMuZG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0ZGF0YUhvbGRlciA9IGRvY3VtZW50LmRvY3VtZW50TW9kZSA/IHRoaXMgOiBkb2MsXG5cdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuZ2V0KCBkYXRhSG9sZGVyLCBkZWxlZ2F0ZVR5cGUgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExK1xuXHRcdFx0Ly8gV2UgdXNlIHRoZSBzYW1lIG5hdGl2ZSBoYW5kbGVyIGZvciBmb2N1c2luICYgZm9jdXMgKGFuZCBmb2N1c291dCAmIGJsdXIpXG5cdFx0XHQvLyBzbyB3ZSBuZWVkIHRvIGNvb3JkaW5hdGUgc2V0dXAgJiB0ZWFyZG93biBwYXJ0cyBiZXR3ZWVuIHRob3NlIGV2ZW50cy5cblx0XHRcdC8vIFVzZSBgZGVsZWdhdGVUeXBlYCBhcyB0aGUga2V5IGFzIGB0eXBlYCBpcyBhbHJlYWR5IHVzZWQgYnkgYGxldmVyYWdlTmF0aXZlYC5cblx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRpZiAoIGRvY3VtZW50LmRvY3VtZW50TW9kZSApIHtcblx0XHRcdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIGRlbGVnYXRlVHlwZSwgZm9jdXNNYXBwZWRIYW5kbGVyICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZG9jLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGZvY3VzTWFwcGVkSGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRkYXRhUHJpdi5zZXQoIGRhdGFIb2xkZXIsIGRlbGVnYXRlVHlwZSwgKCBhdHRhY2hlcyB8fCAwICkgKyAxICk7XG5cdFx0fSxcblx0XHR0ZWFyZG93bjogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMuZG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0ZGF0YUhvbGRlciA9IGRvY3VtZW50LmRvY3VtZW50TW9kZSA/IHRoaXMgOiBkb2MsXG5cdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuZ2V0KCBkYXRhSG9sZGVyLCBkZWxlZ2F0ZVR5cGUgKSAtIDE7XG5cblx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRpZiAoIGRvY3VtZW50LmRvY3VtZW50TW9kZSApIHtcblx0XHRcdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoIGRlbGVnYXRlVHlwZSwgZm9jdXNNYXBwZWRIYW5kbGVyICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIGZvY3VzTWFwcGVkSGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZGF0YUhvbGRlciwgZGVsZWdhdGVUeXBlICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkYXRhUHJpdi5zZXQoIGRhdGFIb2xkZXIsIGRlbGVnYXRlVHlwZSwgYXR0YWNoZXMgKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59ICk7XG5cbi8vIENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrc1xuLy8gc28gdGhhdCBldmVudCBkZWxlZ2F0aW9uIHdvcmtzIGluIGpRdWVyeS5cbi8vIERvIHRoZSBzYW1lIGZvciBwb2ludGVyZW50ZXIvcG9pbnRlcmxlYXZlIGFuZCBwb2ludGVyb3Zlci9wb2ludGVyb3V0XG4vL1xuLy8gU3VwcG9ydDogU2FmYXJpIDcgb25seVxuLy8gU2FmYXJpIHNlbmRzIG1vdXNlZW50ZXIgdG9vIG9mdGVuOyBzZWU6XG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NzAyNThcbi8vIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZyAoaXQgZXhpc3RlZCBpbiBvbGRlciBDaHJvbWUgdmVyc2lvbnMgYXMgd2VsbCkuXG5qUXVlcnkuZWFjaCgge1xuXHRtb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLFxuXHRtb3VzZWxlYXZlOiBcIm1vdXNlb3V0XCIsXG5cdHBvaW50ZXJlbnRlcjogXCJwb2ludGVyb3ZlclwiLFxuXHRwb2ludGVybGVhdmU6IFwicG9pbnRlcm91dFwiXG59LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0ge1xuXHRcdGRlbGVnYXRlVHlwZTogZml4LFxuXHRcdGJpbmRUeXBlOiBmaXgsXG5cblx0XHRoYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciByZXQsXG5cdFx0XHRcdHRhcmdldCA9IHRoaXMsXG5cdFx0XHRcdHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0LFxuXHRcdFx0XHRoYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmo7XG5cblx0XHRcdC8vIEZvciBtb3VzZWVudGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQuXG5cdFx0XHQvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvd1xuXHRcdFx0aWYgKCAhcmVsYXRlZCB8fCAoIHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5LmNvbnRhaW5zKCB0YXJnZXQsIHJlbGF0ZWQgKSApICkge1xuXHRcdFx0XHRldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlO1xuXHRcdFx0XHRyZXQgPSBoYW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBmaXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdG9uOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0b25lOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIDEgKTtcblx0fSxcblx0b2ZmOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHtcblx0XHR2YXIgaGFuZGxlT2JqLCB0eXBlO1xuXHRcdGlmICggdHlwZXMgJiYgdHlwZXMucHJldmVudERlZmF1bHQgJiYgdHlwZXMuaGFuZGxlT2JqICkge1xuXG5cdFx0XHQvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50XG5cdFx0XHRoYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7XG5cdFx0XHRqUXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKFxuXHRcdFx0XHRoYW5kbGVPYmoubmFtZXNwYWNlID9cblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUgKyBcIi5cIiArIGhhbmRsZU9iai5uYW1lc3BhY2UgOlxuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSxcblx0XHRcdFx0aGFuZGxlT2JqLnNlbGVjdG9yLFxuXHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlclxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3JdIClcblx0XHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRcdHRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5cGUgXSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggc2VsZWN0b3IgPT09IGZhbHNlIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzIFssIGZuXSApXG5cdFx0XHRmbiA9IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggZm4gPT09IGZhbHNlICkge1xuXHRcdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxudmFyXG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExLCBFZGdlIDEyIC0gMTMgb25seVxuXHQvLyBJbiBJRS9FZGdlIHVzaW5nIHJlZ2V4IGdyb3VwcyBoZXJlIGNhdXNlcyBzZXZlcmUgc2xvd2Rvd25zLlxuXHQvLyBTZWUgaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy8xNzM2NTEyL1xuXHRybm9Jbm5lcmh0bWwgPSAvPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSxcblxuXHQvLyBjaGVja2VkPVwiY2hlY2tlZFwiIG9yIGNoZWNrZWRcblx0cmNoZWNrZWQgPSAvY2hlY2tlZFxccyooPzpbXj1dfD1cXHMqLmNoZWNrZWQuKS9pLFxuXG5cdHJjbGVhblNjcmlwdCA9IC9eXFxzKjwhXFxbQ0RBVEFcXFt8XFxdXFxdPlxccyokL2c7XG5cbi8vIFByZWZlciBhIHRib2R5IG92ZXIgaXRzIHBhcmVudCB0YWJsZSBmb3IgY29udGFpbmluZyBuZXcgcm93c1xuZnVuY3Rpb24gbWFuaXB1bGF0aW9uVGFyZ2V0KCBlbGVtLCBjb250ZW50ICkge1xuXHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRhYmxlXCIgKSAmJlxuXHRcdG5vZGVOYW1lKCBjb250ZW50Lm5vZGVUeXBlICE9PSAxMSA/IGNvbnRlbnQgOiBjb250ZW50LmZpcnN0Q2hpbGQsIFwidHJcIiApICkge1xuXG5cdFx0cmV0dXJuIGpRdWVyeSggZWxlbSApLmNoaWxkcmVuKCBcInRib2R5XCIgKVsgMCBdIHx8IGVsZW07XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuLy8gUmVwbGFjZS9yZXN0b3JlIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBzY3JpcHQgZWxlbWVudHMgZm9yIHNhZmUgRE9NIG1hbmlwdWxhdGlvblxuZnVuY3Rpb24gZGlzYWJsZVNjcmlwdCggZWxlbSApIHtcblx0ZWxlbS50eXBlID0gKCBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSAhPT0gbnVsbCApICsgXCIvXCIgKyBlbGVtLnR5cGU7XG5cdHJldHVybiBlbGVtO1xufVxuZnVuY3Rpb24gcmVzdG9yZVNjcmlwdCggZWxlbSApIHtcblx0aWYgKCAoIGVsZW0udHlwZSB8fCBcIlwiICkuc2xpY2UoIDAsIDUgKSA9PT0gXCJ0cnVlL1wiICkge1xuXHRcdGVsZW0udHlwZSA9IGVsZW0udHlwZS5zbGljZSggNSApO1xuXHR9IGVsc2Uge1xuXHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBcInR5cGVcIiApO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmZ1bmN0aW9uIGNsb25lQ29weUV2ZW50KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBpLCBsLCB0eXBlLCBwZGF0YU9sZCwgdWRhdGFPbGQsIHVkYXRhQ3VyLCBldmVudHM7XG5cblx0aWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIDEuIENvcHkgcHJpdmF0ZSBkYXRhOiBldmVudHMsIGhhbmRsZXJzLCBldGMuXG5cdGlmICggZGF0YVByaXYuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0cGRhdGFPbGQgPSBkYXRhUHJpdi5nZXQoIHNyYyApO1xuXHRcdGV2ZW50cyA9IHBkYXRhT2xkLmV2ZW50cztcblxuXHRcdGlmICggZXZlbnRzICkge1xuXHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkZXN0LCBcImhhbmRsZSBldmVudHNcIiApO1xuXG5cdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBldmVudHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gMi4gQ29weSB1c2VyIGRhdGFcblx0aWYgKCBkYXRhVXNlci5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHR1ZGF0YU9sZCA9IGRhdGFVc2VyLmFjY2Vzcyggc3JjICk7XG5cdFx0dWRhdGFDdXIgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgdWRhdGFPbGQgKTtcblxuXHRcdGRhdGFVc2VyLnNldCggZGVzdCwgdWRhdGFDdXIgKTtcblx0fVxufVxuXG4vLyBGaXggSUUgYnVncywgc2VlIHN1cHBvcnQgdGVzdHNcbmZ1bmN0aW9uIGZpeElucHV0KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHQvLyBGYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi5cblx0aWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7XG5cdFx0ZGVzdC5jaGVja2VkID0gc3JjLmNoZWNrZWQ7XG5cblx0Ly8gRmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQgc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnNcblx0fSBlbHNlIGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiB8fCBub2RlTmFtZSA9PT0gXCJ0ZXh0YXJlYVwiICkge1xuXHRcdGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1ZTtcblx0fVxufVxuXG5mdW5jdGlvbiBkb21NYW5pcCggY29sbGVjdGlvbiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKSB7XG5cblx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRhcmdzID0gZmxhdCggYXJncyApO1xuXG5cdHZhciBmcmFnbWVudCwgZmlyc3QsIHNjcmlwdHMsIGhhc1NjcmlwdHMsIG5vZGUsIGRvYyxcblx0XHRpID0gMCxcblx0XHRsID0gY29sbGVjdGlvbi5sZW5ndGgsXG5cdFx0aU5vQ2xvbmUgPSBsIC0gMSxcblx0XHR2YWx1ZSA9IGFyZ3NbIDAgXSxcblx0XHR2YWx1ZUlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdFxuXHRpZiAoIHZhbHVlSXNGdW5jdGlvbiB8fFxuXHRcdFx0KCBsID4gMSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXN1cHBvcnQuY2hlY2tDbG9uZSAmJiByY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgKSB7XG5cdFx0cmV0dXJuIGNvbGxlY3Rpb24uZWFjaCggZnVuY3Rpb24oIGluZGV4ICkge1xuXHRcdFx0dmFyIHNlbGYgPSBjb2xsZWN0aW9uLmVxKCBpbmRleCApO1xuXHRcdFx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdGFyZ3NbIDAgXSA9IHZhbHVlLmNhbGwoIHRoaXMsIGluZGV4LCBzZWxmLmh0bWwoKSApO1xuXHRcdFx0fVxuXHRcdFx0ZG9tTWFuaXAoIHNlbGYsIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCBsICkge1xuXHRcdGZyYWdtZW50ID0gYnVpbGRGcmFnbWVudCggYXJncywgY29sbGVjdGlvblsgMCBdLm93bmVyRG9jdW1lbnQsIGZhbHNlLCBjb2xsZWN0aW9uLCBpZ25vcmVkICk7XG5cdFx0Zmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0aWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHtcblx0XHRcdGZyYWdtZW50ID0gZmlyc3Q7XG5cdFx0fVxuXG5cdFx0Ly8gUmVxdWlyZSBlaXRoZXIgbmV3IGNvbnRlbnQgb3IgYW4gaW50ZXJlc3QgaW4gaWdub3JlZCBlbGVtZW50cyB0byBpbnZva2UgdGhlIGNhbGxiYWNrXG5cdFx0aWYgKCBmaXJzdCB8fCBpZ25vcmVkICkge1xuXHRcdFx0c2NyaXB0cyA9IGpRdWVyeS5tYXAoIGdldEFsbCggZnJhZ21lbnQsIFwic2NyaXB0XCIgKSwgZGlzYWJsZVNjcmlwdCApO1xuXHRcdFx0aGFzU2NyaXB0cyA9IHNjcmlwdHMubGVuZ3RoO1xuXG5cdFx0XHQvLyBVc2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtXG5cdFx0XHQvLyBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXBcblx0XHRcdC8vIGJlaW5nIGVtcHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICh0cmFjLTgwNzApLlxuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRub2RlID0gZnJhZ21lbnQ7XG5cblx0XHRcdFx0aWYgKCBpICE9PSBpTm9DbG9uZSApIHtcblx0XHRcdFx0XHRub2RlID0galF1ZXJ5LmNsb25lKCBub2RlLCB0cnVlLCB0cnVlICk7XG5cblx0XHRcdFx0XHQvLyBLZWVwIHJlZmVyZW5jZXMgdG8gY2xvbmVkIHNjcmlwdHMgZm9yIGxhdGVyIHJlc3RvcmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggc2NyaXB0cywgZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxsYmFjay5jYWxsKCBjb2xsZWN0aW9uWyBpIF0sIG5vZGUsIGkgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXHRcdFx0XHRkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50O1xuXG5cdFx0XHRcdC8vIFJlLWVuYWJsZSBzY3JpcHRzXG5cdFx0XHRcdGpRdWVyeS5tYXAoIHNjcmlwdHMsIHJlc3RvcmVTY3JpcHQgKTtcblxuXHRcdFx0XHQvLyBFdmFsdWF0ZSBleGVjdXRhYmxlIHNjcmlwdHMgb24gZmlyc3QgZG9jdW1lbnQgaW5zZXJ0aW9uXG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgaGFzU2NyaXB0czsgaSsrICkge1xuXHRcdFx0XHRcdG5vZGUgPSBzY3JpcHRzWyBpIF07XG5cdFx0XHRcdFx0aWYgKCByc2NyaXB0VHlwZS50ZXN0KCBub2RlLnR5cGUgfHwgXCJcIiApICYmXG5cdFx0XHRcdFx0XHQhZGF0YVByaXYuYWNjZXNzKCBub2RlLCBcImdsb2JhbEV2YWxcIiApICYmXG5cdFx0XHRcdFx0XHRqUXVlcnkuY29udGFpbnMoIGRvYywgbm9kZSApICkge1xuXG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUuc3JjICYmICggbm9kZS50eXBlIHx8IFwiXCIgKS50b0xvd2VyQ2FzZSgpICAhPT0gXCJtb2R1bGVcIiApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBPcHRpb25hbCBBSkFYIGRlcGVuZGVuY3ksIGJ1dCB3b24ndCBydW4gc2NyaXB0cyBpZiBub3QgcHJlc2VudFxuXHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5fZXZhbFVybCAmJiAhbm9kZS5ub01vZHVsZSApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuX2V2YWxVcmwoIG5vZGUuc3JjLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRub25jZTogbm9kZS5ub25jZSB8fCBub2RlLmdldEF0dHJpYnV0ZSggXCJub25jZVwiIClcblx0XHRcdFx0XHRcdFx0XHR9LCBkb2MgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBVbndyYXAgYSBDREFUQSBzZWN0aW9uIGNvbnRhaW5pbmcgc2NyaXB0IGNvbnRlbnRzLiBUaGlzIHNob3VsZG4ndCBiZVxuXHRcdFx0XHRcdFx0XHQvLyBuZWVkZWQgYXMgaW4gWE1MIGRvY3VtZW50cyB0aGV5J3JlIGFscmVhZHkgbm90IHZpc2libGUgd2hlblxuXHRcdFx0XHRcdFx0XHQvLyBpbnNwZWN0aW5nIGVsZW1lbnQgY29udGVudHMgYW5kIGluIEhUTUwgZG9jdW1lbnRzIHRoZXkgaGF2ZSBub1xuXHRcdFx0XHRcdFx0XHQvLyBtZWFuaW5nIGJ1dCB3ZSdyZSBwcmVzZXJ2aW5nIHRoYXQgbG9naWMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBjb21wbGV0ZWx5IGluIDQuMC4gU2VlIGdoLTQ5MDQuXG5cdFx0XHRcdFx0XHRcdERPTUV2YWwoIG5vZGUudGV4dENvbnRlbnQucmVwbGFjZSggcmNsZWFuU2NyaXB0LCBcIlwiICksIG5vZGUsIGRvYyApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjb2xsZWN0aW9uO1xufVxuXG5mdW5jdGlvbiByZW1vdmUoIGVsZW0sIHNlbGVjdG9yLCBrZWVwRGF0YSApIHtcblx0dmFyIG5vZGUsXG5cdFx0bm9kZXMgPSBzZWxlY3RvciA/IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBlbGVtICkgOiBlbGVtLFxuXHRcdGkgPSAwO1xuXG5cdGZvciAoIDsgKCBub2RlID0gbm9kZXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRpZiAoICFrZWVwRGF0YSAmJiBub2RlLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBub2RlICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG5vZGUucGFyZW50Tm9kZSApIHtcblx0XHRcdGlmICgga2VlcERhdGEgJiYgaXNBdHRhY2hlZCggbm9kZSApICkge1xuXHRcdFx0XHRzZXRHbG9iYWxFdmFsKCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0fVxuXHRcdFx0bm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBub2RlICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0aHRtbFByZWZpbHRlcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0cmV0dXJuIGh0bWw7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHR2YXIgaSwgbCwgc3JjRWxlbWVudHMsIGRlc3RFbGVtZW50cyxcblx0XHRcdGNsb25lID0gZWxlbS5jbG9uZU5vZGUoIHRydWUgKSxcblx0XHRcdGluUGFnZSA9IGlzQXR0YWNoZWQoIGVsZW0gKTtcblxuXHRcdC8vIEZpeCBJRSBjbG9uaW5nIGlzc3Vlc1xuXHRcdGlmICggIXN1cHBvcnQubm9DbG9uZUNoZWNrZWQgJiYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGVsZW0ubm9kZVR5cGUgPT09IDExICkgJiZcblx0XHRcdFx0IWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXG5cdFx0XHQvLyBXZSBlc2NoZXcgalF1ZXJ5I2ZpbmQgaGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uczpcblx0XHRcdC8vIGh0dHBzOi8vanNwZXJmLmNvbS9nZXRhbGwtdnMtc2l6emxlLzJcblx0XHRcdGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTtcblx0XHRcdHNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7XG5cblx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRmaXhJbnB1dCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb3B5IHRoZSBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIGNsb25lXG5cdFx0aWYgKCBkYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0aWYgKCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdFx0c3JjRWxlbWVudHMgPSBzcmNFbGVtZW50cyB8fCBnZXRBbGwoIGVsZW0gKTtcblx0XHRcdFx0ZGVzdEVsZW1lbnRzID0gZGVzdEVsZW1lbnRzIHx8IGdldEFsbCggY2xvbmUgKTtcblxuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRjbG9uZUNvcHlFdmVudCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25lICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxuXHRcdGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUsIFwic2NyaXB0XCIgKTtcblx0XHRpZiAoIGRlc3RFbGVtZW50cy5sZW5ndGggPiAwICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggZGVzdEVsZW1lbnRzLCAhaW5QYWdlICYmIGdldEFsbCggZWxlbSwgXCJzY3JpcHRcIiApICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHRoZSBjbG9uZWQgc2V0XG5cdFx0cmV0dXJuIGNsb25lO1xuXHR9LFxuXG5cdGNsZWFuRGF0YTogZnVuY3Rpb24oIGVsZW1zICkge1xuXHRcdHZhciBkYXRhLCBlbGVtLCB0eXBlLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IGVsZW1zWyBpIF0gKSAhPT0gdW5kZWZpbmVkOyBpKysgKSB7XG5cdFx0XHRpZiAoIGFjY2VwdERhdGEoIGVsZW0gKSApIHtcblx0XHRcdFx0aWYgKCAoIGRhdGEgPSBlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0Zm9yICggdHlwZSBpbiBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBzcGVjaWFsWyB0eXBlIF0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBhdm9pZCBqUXVlcnkuZXZlbnQucmVtb3ZlJ3Mgb3ZlcmhlYWRcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGRhdGEuaGFuZGxlICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSApIHtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IsIHRydWUgKTtcblx0fSxcblxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciApO1xuXHR9LFxuXG5cdHRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS50ZXh0KCB0aGlzICkgOlxuXHRcdFx0XHR0aGlzLmVtcHR5KCkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRwcmVwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0YXJnZXQuZmlyc3RDaGlsZCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRiZWZvcmU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGFmdGVyOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5uZXh0U2libGluZyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gdGhpc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXG5cdFx0XHRcdC8vIFJlbW92ZSBhbnkgcmVtYWluaW5nIG5vZGVzXG5cdFx0XHRcdGVsZW0udGV4dENvbnRlbnQgPSBcIlwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0ZGF0YUFuZEV2ZW50cyA9IGRhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGZhbHNlIDogZGF0YUFuZEV2ZW50cztcblx0XHRkZWVwRGF0YUFuZEV2ZW50cyA9IGRlZXBEYXRhQW5kRXZlbnRzID09IG51bGwgPyBkYXRhQW5kRXZlbnRzIDogZGVlcERhdGFBbmRFdmVudHM7XG5cblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jbG9uZSggdGhpcywgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0aHRtbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBlbGVtID0gdGhpc1sgMCBdIHx8IHt9LFxuXHRcdFx0XHRpID0gMCxcblx0XHRcdFx0bCA9IHRoaXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uaW5uZXJIVE1MO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZWUgaWYgd2UgY2FuIHRha2UgYSBzaG9ydGN1dCBhbmQganVzdCB1c2UgaW5uZXJIVE1MXG5cdFx0XHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAhcm5vSW5uZXJodG1sLnRlc3QoIHZhbHVlICkgJiZcblx0XHRcdFx0IXdyYXBNYXBbICggcnRhZ05hbWUuZXhlYyggdmFsdWUgKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKSBdICkge1xuXG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIHZhbHVlICk7XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0XHRlbGVtID0gdGhpc1sgaSBdIHx8IHt9O1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cdFx0XHRcdFx0XHRcdGVsZW0uaW5uZXJIVE1MID0gdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxlbSA9IDA7XG5cblx0XHRcdFx0Ly8gSWYgdXNpbmcgaW5uZXJIVE1MIHRocm93cyBhbiBleGNlcHRpb24sIHVzZSB0aGUgZmFsbGJhY2sgbWV0aG9kXG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge31cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHR0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApO1xuXHRcdFx0fVxuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0cmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpZ25vcmVkID0gW107XG5cblx0XHQvLyBNYWtlIHRoZSBjaGFuZ2VzLCByZXBsYWNpbmcgZWFjaCBub24taWdub3JlZCBjb250ZXh0IGVsZW1lbnQgd2l0aCB0aGUgbmV3IGNvbnRlbnRcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuXG5cdFx0XHRpZiAoIGpRdWVyeS5pbkFycmF5KCB0aGlzLCBpZ25vcmVkICkgPCAwICkge1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIHRoaXMgKSApO1xuXHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0XHRwYXJlbnQucmVwbGFjZUNoaWxkKCBlbGVtLCB0aGlzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEZvcmNlIGNhbGxiYWNrIGludm9jYXRpb25cblx0XHR9LCBpZ25vcmVkICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIHtcblx0YXBwZW5kVG86IFwiYXBwZW5kXCIsXG5cdHByZXBlbmRUbzogXCJwcmVwZW5kXCIsXG5cdGluc2VydEJlZm9yZTogXCJiZWZvcmVcIixcblx0aW5zZXJ0QWZ0ZXI6IFwiYWZ0ZXJcIixcblx0cmVwbGFjZUFsbDogXCJyZXBsYWNlV2l0aFwiXG59LCBmdW5jdGlvbiggbmFtZSwgb3JpZ2luYWwgKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBlbGVtcyxcblx0XHRcdHJldCA9IFtdLFxuXHRcdFx0aW5zZXJ0ID0galF1ZXJ5KCBzZWxlY3RvciApLFxuXHRcdFx0bGFzdCA9IGluc2VydC5sZW5ndGggLSAxLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7IGkgPD0gbGFzdDsgaSsrICkge1xuXHRcdFx0ZWxlbXMgPSBpID09PSBsYXN0ID8gdGhpcyA6IHRoaXMuY2xvbmUoIHRydWUgKTtcblx0XHRcdGpRdWVyeSggaW5zZXJ0WyBpIF0gKVsgb3JpZ2luYWwgXSggZWxlbXMgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHQvLyAuZ2V0KCkgYmVjYXVzZSBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRwdXNoLmFwcGx5KCByZXQsIGVsZW1zLmdldCgpICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQgKTtcblx0fTtcbn0gKTtcbnZhciBybnVtbm9ucHggPSBuZXcgUmVnRXhwKCBcIl4oXCIgKyBwbnVtICsgXCIpKD8hcHgpW2EteiVdKyRcIiwgXCJpXCIgKTtcblxudmFyIHJjdXN0b21Qcm9wID0gL14tLS87XG5cblxudmFyIGdldFN0eWxlcyA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5LCBGaXJlZm94IDw9MzAgKHRyYWMtMTUwOTgsIHRyYWMtMTQxNTApXG5cdFx0Ly8gSUUgdGhyb3dzIG9uIGVsZW1lbnRzIGNyZWF0ZWQgaW4gcG9wdXBzXG5cdFx0Ly8gRkYgbWVhbndoaWxlIHRocm93cyBvbiBmcmFtZSBlbGVtZW50cyB0aHJvdWdoIFwiZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZVwiXG5cdFx0dmFyIHZpZXcgPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cblx0XHRpZiAoICF2aWV3IHx8ICF2aWV3Lm9wZW5lciApIHtcblx0XHRcdHZpZXcgPSB3aW5kb3c7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSApO1xuXHR9O1xuXG52YXIgc3dhcCA9IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBjYWxsYmFjayApIHtcblx0dmFyIHJldCwgbmFtZSxcblx0XHRvbGQgPSB7fTtcblxuXHQvLyBSZW1lbWJlciB0aGUgb2xkIHZhbHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXNcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdG9sZFsgbmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdO1xuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9wdGlvbnNbIG5hbWUgXTtcblx0fVxuXG5cdHJldCA9IGNhbGxiYWNrLmNhbGwoIGVsZW0gKTtcblxuXHQvLyBSZXZlcnQgdGhlIG9sZCB2YWx1ZXNcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9sZFsgbmFtZSBdO1xuXHR9XG5cblx0cmV0dXJuIHJldDtcbn07XG5cblxudmFyIHJib3hTdHlsZSA9IG5ldyBSZWdFeHAoIGNzc0V4cGFuZC5qb2luKCBcInxcIiApLCBcImlcIiApO1xuXG5cblxuKCBmdW5jdGlvbigpIHtcblxuXHQvLyBFeGVjdXRpbmcgYm90aCBwaXhlbFBvc2l0aW9uICYgYm94U2l6aW5nUmVsaWFibGUgdGVzdHMgcmVxdWlyZSBvbmx5IG9uZSBsYXlvdXRcblx0Ly8gc28gdGhleSdyZSBleGVjdXRlZCBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgdGhlIHNlY29uZCBjb21wdXRhdGlvbi5cblx0ZnVuY3Rpb24gY29tcHV0ZVN0eWxlVGVzdHMoKSB7XG5cblx0XHQvLyBUaGlzIGlzIGEgc2luZ2xldG9uLCB3ZSBuZWVkIHRvIGV4ZWN1dGUgaXQgb25seSBvbmNlXG5cdFx0aWYgKCAhZGl2ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnRhaW5lci5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4O3dpZHRoOjYwcHg7XCIgK1xuXHRcdFx0XCJtYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjBcIjtcblx0XHRkaXYuc3R5bGUuY3NzVGV4dCA9XG5cdFx0XHRcInBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OnNjcm9sbDtcIiArXG5cdFx0XHRcIm1hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7XCIgK1xuXHRcdFx0XCJ3aWR0aDo2MCU7dG9wOjElXCI7XG5cdFx0ZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBjb250YWluZXIgKS5hcHBlbmRDaGlsZCggZGl2ICk7XG5cblx0XHR2YXIgZGl2U3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZGl2ICk7XG5cdFx0cGl4ZWxQb3NpdGlvblZhbCA9IGRpdlN0eWxlLnRvcCAhPT0gXCIxJVwiO1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgRmlyZWZveCA8PTMgLSA0NFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdFZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUubWFyZ2luTGVmdCApID09PSAxMjtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIFNhZmFyaSA8PTkuMSAtIDEwLjEsIGlPUyA8PTcuMCAtIDkuM1xuXHRcdC8vIFNvbWUgc3R5bGVzIGNvbWUgYmFjayB3aXRoIHBlcmNlbnRhZ2UgdmFsdWVzLCBldmVuIHRob3VnaCB0aGV5IHNob3VsZG4ndFxuXHRcdGRpdi5zdHlsZS5yaWdodCA9IFwiNjAlXCI7XG5cdFx0cGl4ZWxCb3hTdHlsZXNWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLnJpZ2h0ICkgPT09IDM2O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0XHQvLyBEZXRlY3QgbWlzcmVwb3J0aW5nIG9mIGNvbnRlbnQgZGltZW5zaW9ucyBmb3IgYm94LXNpemluZzpib3JkZXItYm94IGVsZW1lbnRzXG5cdFx0Ym94U2l6aW5nUmVsaWFibGVWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLndpZHRoICkgPT09IDM2O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0Ly8gRGV0ZWN0IG92ZXJmbG93OnNjcm9sbCBzY3Jld2luZXNzIChnaC0zNjk5KVxuXHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTY0XG5cdFx0Ly8gRG9uJ3QgZ2V0IHRyaWNrZWQgd2hlbiB6b29tIGFmZmVjdHMgb2Zmc2V0V2lkdGggKGdoLTQwMjkpXG5cdFx0ZGl2LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuXHRcdHNjcm9sbGJveFNpemVWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdi5vZmZzZXRXaWR0aCAvIDMgKSA9PT0gMTI7XG5cblx0XHRkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciApO1xuXG5cdFx0Ly8gTnVsbGlmeSB0aGUgZGl2IHNvIGl0IHdvdWxkbid0IGJlIHN0b3JlZCBpbiB0aGUgbWVtb3J5IGFuZFxuXHRcdC8vIGl0IHdpbGwgYWxzbyBiZSBhIHNpZ24gdGhhdCBjaGVja3MgYWxyZWFkeSBwZXJmb3JtZWRcblx0XHRkaXYgPSBudWxsO1xuXHR9XG5cblx0ZnVuY3Rpb24gcm91bmRQaXhlbE1lYXN1cmVzKCBtZWFzdXJlICkge1xuXHRcdHJldHVybiBNYXRoLnJvdW5kKCBwYXJzZUZsb2F0KCBtZWFzdXJlICkgKTtcblx0fVxuXG5cdHZhciBwaXhlbFBvc2l0aW9uVmFsLCBib3hTaXppbmdSZWxpYWJsZVZhbCwgc2Nyb2xsYm94U2l6ZVZhbCwgcGl4ZWxCb3hTdHlsZXNWYWwsXG5cdFx0cmVsaWFibGVUckRpbWVuc2lvbnNWYWwsIHJlbGlhYmxlTWFyZ2luTGVmdFZhbCxcblx0XHRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICksXG5cdFx0ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApO1xuXG5cdC8vIEZpbmlzaCBlYXJseSBpbiBsaW1pdGVkIChub24tYnJvd3NlcikgZW52aXJvbm1lbnRzXG5cdGlmICggIWRpdi5zdHlsZSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFN0eWxlIG9mIGNsb25lZCBlbGVtZW50IGFmZmVjdHMgc291cmNlIGVsZW1lbnQgY2xvbmVkICh0cmFjLTg5MDgpXG5cdGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiY29udGVudC1ib3hcIjtcblx0ZGl2LmNsb25lTm9kZSggdHJ1ZSApLnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJcIjtcblx0c3VwcG9ydC5jbGVhckNsb25lU3R5bGUgPSBkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPT09IFwiY29udGVudC1ib3hcIjtcblxuXHRqUXVlcnkuZXh0ZW5kKCBzdXBwb3J0LCB7XG5cdFx0Ym94U2l6aW5nUmVsaWFibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBib3hTaXppbmdSZWxpYWJsZVZhbDtcblx0XHR9LFxuXHRcdHBpeGVsQm94U3R5bGVzOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcGl4ZWxCb3hTdHlsZXNWYWw7XG5cdFx0fSxcblx0XHRwaXhlbFBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcGl4ZWxQb3NpdGlvblZhbDtcblx0XHR9LFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdDogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHJlbGlhYmxlTWFyZ2luTGVmdFZhbDtcblx0XHR9LFxuXHRcdHNjcm9sbGJveFNpemU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBzY3JvbGxib3hTaXplVmFsO1xuXHRcdH0sXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBtaXNyZXBvcnQgYGdldENvbXB1dGVkU3R5bGVgIG9mIHRhYmxlIHJvd3Mgd2l0aCB3aWR0aC9oZWlnaHRcblx0XHQvLyBzZXQgaW4gQ1NTIHdoaWxlIGBvZmZzZXQqYCBwcm9wZXJ0aWVzIHJlcG9ydCBjb3JyZWN0IHZhbHVlcy5cblx0XHQvLyBCZWhhdmlvciBpbiBJRSA5IGlzIG1vcmUgc3VidGxlIHRoYW4gaW4gbmV3ZXIgdmVyc2lvbnMgJiBpdCBwYXNzZXNcblx0XHQvLyBzb21lIHZlcnNpb25zIG9mIHRoaXMgdGVzdDsgbWFrZSBzdXJlIG5vdCB0byBtYWtlIGl0IHBhc3MgdGhlcmUhXG5cdFx0Ly9cblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDcwK1xuXHRcdC8vIE9ubHkgRmlyZWZveCBpbmNsdWRlcyBib3JkZXIgd2lkdGhzXG5cdFx0Ly8gaW4gY29tcHV0ZWQgZGltZW5zaW9ucy4gKGdoLTQ1MjkpXG5cdFx0cmVsaWFibGVUckRpbWVuc2lvbnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHRhYmxlLCB0ciwgdHJDaGlsZCwgdHJTdHlsZTtcblx0XHRcdGlmICggcmVsaWFibGVUckRpbWVuc2lvbnNWYWwgPT0gbnVsbCApIHtcblx0XHRcdFx0dGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInRhYmxlXCIgKTtcblx0XHRcdFx0dHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInRyXCIgKTtcblx0XHRcdFx0dHJDaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKTtcblxuXHRcdFx0XHR0YWJsZS5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4O2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZVwiO1xuXHRcdFx0XHR0ci5zdHlsZS5jc3NUZXh0ID0gXCJib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JvcmRlcjoxcHggc29saWRcIjtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgODYrXG5cdFx0XHRcdC8vIEhlaWdodCBzZXQgdGhyb3VnaCBjc3NUZXh0IGRvZXMgbm90IGdldCBhcHBsaWVkLlxuXHRcdFx0XHQvLyBDb21wdXRlZCBoZWlnaHQgdGhlbiBjb21lcyBiYWNrIGFzIDAuXG5cdFx0XHRcdHRyLnN0eWxlLmhlaWdodCA9IFwiMXB4XCI7XG5cdFx0XHRcdHRyQ2hpbGQuc3R5bGUuaGVpZ2h0ID0gXCI5cHhcIjtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDggQ2hyb21lIDg2K1xuXHRcdFx0XHQvLyBJbiBvdXIgYm9keUJhY2tncm91bmQuaHRtbCBpZnJhbWUsXG5cdFx0XHRcdC8vIGRpc3BsYXkgZm9yIGFsbCBkaXYgZWxlbWVudHMgaXMgc2V0IHRvIFwiaW5saW5lXCIsXG5cdFx0XHRcdC8vIHdoaWNoIGNhdXNlcyBhIHByb2JsZW0gb25seSBpbiBBbmRyb2lkIDggQ2hyb21lIDg2LlxuXHRcdFx0XHQvLyBFbnN1cmluZyB0aGUgZGl2IGlzIGBkaXNwbGF5OiBibG9ja2Bcblx0XHRcdFx0Ly8gZ2V0cyBhcm91bmQgdGhpcyBpc3N1ZS5cblx0XHRcdFx0dHJDaGlsZC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuXG5cdFx0XHRcdGRvY3VtZW50RWxlbWVudFxuXHRcdFx0XHRcdC5hcHBlbmRDaGlsZCggdGFibGUgKVxuXHRcdFx0XHRcdC5hcHBlbmRDaGlsZCggdHIgKVxuXHRcdFx0XHRcdC5hcHBlbmRDaGlsZCggdHJDaGlsZCApO1xuXG5cdFx0XHRcdHRyU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggdHIgKTtcblx0XHRcdFx0cmVsaWFibGVUckRpbWVuc2lvbnNWYWwgPSAoIHBhcnNlSW50KCB0clN0eWxlLmhlaWdodCwgMTAgKSArXG5cdFx0XHRcdFx0cGFyc2VJbnQoIHRyU3R5bGUuYm9yZGVyVG9wV2lkdGgsIDEwICkgK1xuXHRcdFx0XHRcdHBhcnNlSW50KCB0clN0eWxlLmJvcmRlckJvdHRvbVdpZHRoLCAxMCApICkgPT09IHRyLm9mZnNldEhlaWdodDtcblxuXHRcdFx0XHRkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoIHRhYmxlICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVUckRpbWVuc2lvbnNWYWw7XG5cdFx0fVxuXHR9ICk7XG59ICkoKTtcblxuXG5mdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkge1xuXHR2YXIgd2lkdGgsIG1pbldpZHRoLCBtYXhXaWR0aCwgcmV0LFxuXHRcdGlzQ3VzdG9tUHJvcCA9IHJjdXN0b21Qcm9wLnRlc3QoIG5hbWUgKSxcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNTErXG5cdFx0Ly8gUmV0cmlldmluZyBzdHlsZSBiZWZvcmUgY29tcHV0ZWQgc29tZWhvd1xuXHRcdC8vIGZpeGVzIGFuIGlzc3VlIHdpdGggZ2V0dGluZyB3cm9uZyB2YWx1ZXNcblx0XHQvLyBvbiBkZXRhY2hlZCBlbGVtZW50c1xuXHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcblxuXHRjb21wdXRlZCA9IGNvbXB1dGVkIHx8IGdldFN0eWxlcyggZWxlbSApO1xuXG5cdC8vIGdldFByb3BlcnR5VmFsdWUgaXMgbmVlZGVkIGZvcjpcblx0Ly8gICAuY3NzKCdmaWx0ZXInKSAoSUUgOSBvbmx5LCB0cmFjLTEyNTM3KVxuXHQvLyAgIC5jc3MoJy0tY3VzdG9tUHJvcGVydHkpIChnaC0zMTQ0KVxuXHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTErXG5cdFx0Ly8gSUUgb25seSBzdXBwb3J0cyBgXCJmbG9hdFwiYCBpbiBgZ2V0UHJvcGVydHlWYWx1ZWA7IGluIGNvbXB1dGVkIHN0eWxlc1xuXHRcdC8vIGl0J3Mgb25seSBhdmFpbGFibGUgYXMgYFwiY3NzRmxvYXRcImAuIFdlIG5vIGxvbmdlciBtb2RpZnkgcHJvcGVydGllc1xuXHRcdC8vIHNlbnQgdG8gYC5jc3MoKWAgYXBhcnQgZnJvbSBjYW1lbENhc2luZywgc28gd2UgbmVlZCB0byBjaGVjayBib3RoLlxuXHRcdC8vIE5vcm1hbGx5LCB0aGlzIHdvdWxkIGNyZWF0ZSBkaWZmZXJlbmNlIGluIGJlaGF2aW9yOiBpZlxuXHRcdC8vIGBnZXRQcm9wZXJ0eVZhbHVlYCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZywgdGhlIHZhbHVlIHJldHVybmVkXG5cdFx0Ly8gYnkgYC5jc3MoKWAgd291bGQgYmUgYHVuZGVmaW5lZGAuIFRoaXMgaXMgdXN1YWxseSB0aGUgY2FzZSBmb3Jcblx0XHQvLyBkaXNjb25uZWN0ZWQgZWxlbWVudHMuIEhvd2V2ZXIsIGluIElFIGV2ZW4gZGlzY29ubmVjdGVkIGVsZW1lbnRzXG5cdFx0Ly8gd2l0aCBubyBzdHlsZXMgcmV0dXJuIGBcIm5vbmVcImAgZm9yIGBnZXRQcm9wZXJ0eVZhbHVlKCBcImZsb2F0XCIgKWBcblx0XHRyZXQgPSBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICkgfHwgY29tcHV0ZWRbIG5hbWUgXTtcblxuXHRcdGlmICggaXNDdXN0b21Qcm9wICYmIHJldCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCAxMDUrLCBDaHJvbWUgPD0xMDUrXG5cdFx0XHQvLyBTcGVjIHJlcXVpcmVzIHRyaW1taW5nIHdoaXRlc3BhY2UgZm9yIGN1c3RvbSBwcm9wZXJ0aWVzIChnaC00OTI2KS5cblx0XHRcdC8vIEZpcmVmb3ggb25seSB0cmltcyBsZWFkaW5nIHdoaXRlc3BhY2UuIENocm9tZSBqdXN0IGNvbGxhcHNlc1xuXHRcdFx0Ly8gYm90aCBsZWFkaW5nICYgdHJhaWxpbmcgd2hpdGVzcGFjZSB0byBhIHNpbmdsZSBzcGFjZS5cblx0XHRcdC8vXG5cdFx0XHQvLyBGYWxsIGJhY2sgdG8gYHVuZGVmaW5lZGAgaWYgZW1wdHkgc3RyaW5nIHJldHVybmVkLlxuXHRcdFx0Ly8gVGhpcyBjb2xsYXBzZXMgYSBtaXNzaW5nIGRlZmluaXRpb24gd2l0aCBwcm9wZXJ0eSBkZWZpbmVkXG5cdFx0XHQvLyBhbmQgc2V0IHRvIGFuIGVtcHR5IHN0cmluZyBidXQgdGhlcmUncyBubyBzdGFuZGFyZCBBUElcblx0XHRcdC8vIGFsbG93aW5nIHVzIHRvIGRpZmZlcmVudGlhdGUgdGhlbSB3aXRob3V0IGEgcGVyZm9ybWFuY2UgcGVuYWx0eVxuXHRcdFx0Ly8gYW5kIHJldHVybmluZyBgdW5kZWZpbmVkYCBhbGlnbnMgd2l0aCBvbGRlciBqUXVlcnkuXG5cdFx0XHQvL1xuXHRcdFx0Ly8gcnRyaW1DU1MgdHJlYXRzIFUrMDAwRCBDQVJSSUFHRSBSRVRVUk4gYW5kIFUrMDAwQyBGT1JNIEZFRURcblx0XHRcdC8vIGFzIHdoaXRlc3BhY2Ugd2hpbGUgQ1NTIGRvZXMgbm90LCBidXQgdGhpcyBpcyBub3QgYSBwcm9ibGVtXG5cdFx0XHQvLyBiZWNhdXNlIENTUyBwcmVwcm9jZXNzaW5nIHJlcGxhY2VzIHRoZW0gd2l0aCBVKzAwMEEgTElORSBGRUVEXG5cdFx0XHQvLyAod2hpY2ggKmlzKiBDU1Mgd2hpdGVzcGFjZSlcblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mtc3ludGF4LTMvI2lucHV0LXByZXByb2Nlc3Npbmdcblx0XHRcdHJldCA9IHJldC5yZXBsYWNlKCBydHJpbUNTUywgXCIkMVwiICkgfHwgdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGlmICggcmV0ID09PSBcIlwiICYmICFpc0F0dGFjaGVkKCBlbGVtICkgKSB7XG5cdFx0XHRyZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBBIHRyaWJ1dGUgdG8gdGhlIFwiYXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkc1wiXG5cdFx0Ly8gQW5kcm9pZCBCcm93c2VyIHJldHVybnMgcGVyY2VudGFnZSBmb3Igc29tZSB2YWx1ZXMsXG5cdFx0Ly8gYnV0IHdpZHRoIHNlZW1zIHRvIGJlIHJlbGlhYmx5IHBpeGVscy5cblx0XHQvLyBUaGlzIGlzIGFnYWluc3QgdGhlIENTU09NIGRyYWZ0IHNwZWM6XG5cdFx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNyZXNvbHZlZC12YWx1ZXNcblx0XHRpZiAoICFzdXBwb3J0LnBpeGVsQm94U3R5bGVzKCkgJiYgcm51bW5vbnB4LnRlc3QoIHJldCApICYmIHJib3hTdHlsZS50ZXN0KCBuYW1lICkgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXNcblx0XHRcdHdpZHRoID0gc3R5bGUud2lkdGg7XG5cdFx0XHRtaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRoO1xuXHRcdFx0bWF4V2lkdGggPSBzdHlsZS5tYXhXaWR0aDtcblxuXHRcdFx0Ly8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dFxuXHRcdFx0c3R5bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0aCA9IHN0eWxlLndpZHRoID0gcmV0O1xuXHRcdFx0cmV0ID0gY29tcHV0ZWQud2lkdGg7XG5cblx0XHRcdC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXNcblx0XHRcdHN0eWxlLndpZHRoID0gd2lkdGg7XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoO1xuXHRcdFx0c3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmV0ICE9PSB1bmRlZmluZWQgP1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdC8vIElFIHJldHVybnMgekluZGV4IHZhbHVlIGFzIGFuIGludGVnZXIuXG5cdFx0cmV0ICsgXCJcIiA6XG5cdFx0cmV0O1xufVxuXG5cbmZ1bmN0aW9uIGFkZEdldEhvb2tJZiggY29uZGl0aW9uRm4sIGhvb2tGbiApIHtcblxuXHQvLyBEZWZpbmUgdGhlIGhvb2ssIHdlJ2xsIGNoZWNrIG9uIHRoZSBmaXJzdCBydW4gaWYgaXQncyByZWFsbHkgbmVlZGVkLlxuXHRyZXR1cm4ge1xuXHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGNvbmRpdGlvbkZuKCkgKSB7XG5cblx0XHRcdFx0Ly8gSG9vayBub3QgbmVlZGVkIChvciBpdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgaXQgZHVlXG5cdFx0XHRcdC8vIHRvIG1pc3NpbmcgZGVwZW5kZW5jeSksIHJlbW92ZSBpdC5cblx0XHRcdFx0ZGVsZXRlIHRoaXMuZ2V0O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhvb2sgbmVlZGVkOyByZWRlZmluZSBpdCBzbyB0aGF0IHRoZSBzdXBwb3J0IHRlc3QgaXMgbm90IGV4ZWN1dGVkIGFnYWluLlxuXHRcdFx0cmV0dXJuICggdGhpcy5nZXQgPSBob29rRm4gKS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fVxuXHR9O1xufVxuXG5cbnZhciBjc3NQcmVmaXhlcyA9IFsgXCJXZWJraXRcIiwgXCJNb3pcIiwgXCJtc1wiIF0sXG5cdGVtcHR5U3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkuc3R5bGUsXG5cdHZlbmRvclByb3BzID0ge307XG5cbi8vIFJldHVybiBhIHZlbmRvci1wcmVmaXhlZCBwcm9wZXJ0eSBvciB1bmRlZmluZWRcbmZ1bmN0aW9uIHZlbmRvclByb3BOYW1lKCBuYW1lICkge1xuXG5cdC8vIENoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXNcblx0dmFyIGNhcE5hbWUgPSBuYW1lWyAwIF0udG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoIDEgKSxcblx0XHRpID0gY3NzUHJlZml4ZXMubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdG5hbWUgPSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTtcblx0XHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRcdHJldHVybiBuYW1lO1xuXHRcdH1cblx0fVxufVxuXG4vLyBSZXR1cm4gYSBwb3RlbnRpYWxseS1tYXBwZWQgalF1ZXJ5LmNzc1Byb3BzIG9yIHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eVxuZnVuY3Rpb24gZmluYWxQcm9wTmFtZSggbmFtZSApIHtcblx0dmFyIGZpbmFsID0galF1ZXJ5LmNzc1Byb3BzWyBuYW1lIF0gfHwgdmVuZG9yUHJvcHNbIG5hbWUgXTtcblxuXHRpZiAoIGZpbmFsICkge1xuXHRcdHJldHVybiBmaW5hbDtcblx0fVxuXHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRyZXR1cm4gbmFtZTtcblx0fVxuXHRyZXR1cm4gdmVuZG9yUHJvcHNbIG5hbWUgXSA9IHZlbmRvclByb3BOYW1lKCBuYW1lICkgfHwgbmFtZTtcbn1cblxuXG52YXJcblxuXHQvLyBTd2FwcGFibGUgaWYgZGlzcGxheSBpcyBub25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxlXG5cdC8vIGV4Y2VwdCBcInRhYmxlXCIsIFwidGFibGUtY2VsbFwiLCBvciBcInRhYmxlLWNhcHRpb25cIlxuXHQvLyBTZWUgaGVyZSBmb3IgZGlzcGxheSB2YWx1ZXM6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2Rpc3BsYXlcblx0cmRpc3BsYXlzd2FwID0gL14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLFxuXHRjc3NTaG93ID0geyBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLCB2aXNpYmlsaXR5OiBcImhpZGRlblwiLCBkaXNwbGF5OiBcImJsb2NrXCIgfSxcblx0Y3NzTm9ybWFsVHJhbnNmb3JtID0ge1xuXHRcdGxldHRlclNwYWNpbmc6IFwiMFwiLFxuXHRcdGZvbnRXZWlnaHQ6IFwiNDAwXCJcblx0fTtcblxuZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIF9lbGVtLCB2YWx1ZSwgc3VidHJhY3QgKSB7XG5cblx0Ly8gQW55IHJlbGF0aXZlICgrLy0pIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlblxuXHQvLyBub3JtYWxpemVkIGF0IHRoaXMgcG9pbnRcblx0dmFyIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICk7XG5cdHJldHVybiBtYXRjaGVzID9cblxuXHRcdC8vIEd1YXJkIGFnYWluc3QgdW5kZWZpbmVkIFwic3VidHJhY3RcIiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzXG5cdFx0TWF0aC5tYXgoIDAsIG1hdGNoZXNbIDIgXSAtICggc3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSA6XG5cdFx0dmFsdWU7XG59XG5cbmZ1bmN0aW9uIGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBib3gsIGlzQm9yZGVyQm94LCBzdHlsZXMsIGNvbXB1dGVkVmFsICkge1xuXHR2YXIgaSA9IGRpbWVuc2lvbiA9PT0gXCJ3aWR0aFwiID8gMSA6IDAsXG5cdFx0ZXh0cmEgPSAwLFxuXHRcdGRlbHRhID0gMCxcblx0XHRtYXJnaW5EZWx0YSA9IDA7XG5cblx0Ly8gQWRqdXN0bWVudCBtYXkgbm90IGJlIG5lY2Vzc2FyeVxuXHRpZiAoIGJveCA9PT0gKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApICkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgNDsgaSArPSAyICkge1xuXG5cdFx0Ly8gQm90aCBib3ggbW9kZWxzIGV4Y2x1ZGUgbWFyZ2luXG5cdFx0Ly8gQ291bnQgbWFyZ2luIGRlbHRhIHNlcGFyYXRlbHkgdG8gb25seSBhZGQgaXQgYWZ0ZXIgc2Nyb2xsIGd1dHRlciBhZGp1c3RtZW50LlxuXHRcdC8vIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgbmVnYXRpdmUgbWFyZ2lucyB3b3JrIHdpdGggYG91dGVySGVpZ2h0KCB0cnVlIClgIChnaC0zOTgyKS5cblx0XHRpZiAoIGJveCA9PT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdG1hcmdpbkRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIGJveCArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgY29udGVudC1ib3gsIHdlJ3JlIHNlZWtpbmcgXCJwYWRkaW5nXCIgb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiXG5cdFx0aWYgKCAhaXNCb3JkZXJCb3ggKSB7XG5cblx0XHRcdC8vIEFkZCBwYWRkaW5nXG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gRm9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIiwgYWRkIGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwicGFkZGluZ1wiICkge1xuXHRcdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBCdXQgc3RpbGwga2VlcCB0cmFjayBvZiBpdCBvdGhlcndpc2Vcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGV4dHJhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgYm9yZGVyLWJveCAoY29udGVudCArIHBhZGRpbmcgKyBib3JkZXIpLCB3ZSdyZSBzZWVraW5nIFwiY29udGVudFwiIG9yXG5cdFx0Ly8gXCJwYWRkaW5nXCIgb3IgXCJtYXJnaW5cIlxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiwgc3VidHJhY3QgcGFkZGluZ1xuXHRcdFx0aWYgKCBib3ggPT09IFwiY29udGVudFwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiIG9yIFwicGFkZGluZ1wiLCBzdWJ0cmFjdCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFjY291bnQgZm9yIHBvc2l0aXZlIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXIgd2hlbiByZXF1ZXN0ZWQgYnkgcHJvdmlkaW5nIGNvbXB1dGVkVmFsXG5cdGlmICggIWlzQm9yZGVyQm94ICYmIGNvbXB1dGVkVmFsID49IDAgKSB7XG5cblx0XHQvLyBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgYSByb3VuZGVkIHN1bSBvZiBjb250ZW50LCBwYWRkaW5nLCBzY3JvbGwgZ3V0dGVyLCBhbmQgYm9yZGVyXG5cdFx0Ly8gQXNzdW1pbmcgaW50ZWdlciBzY3JvbGwgZ3V0dGVyLCBzdWJ0cmFjdCB0aGUgcmVzdCBhbmQgcm91bmQgZG93blxuXHRcdGRlbHRhICs9IE1hdGgubWF4KCAwLCBNYXRoLmNlaWwoXG5cdFx0XHRlbGVtWyBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF0gLVxuXHRcdFx0Y29tcHV0ZWRWYWwgLVxuXHRcdFx0ZGVsdGEgLVxuXHRcdFx0ZXh0cmEgLVxuXHRcdFx0MC41XG5cblx0XHQvLyBJZiBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgdW5rbm93biwgdGhlbiB3ZSBjYW4ndCBkZXRlcm1pbmUgY29udGVudC1ib3ggc2Nyb2xsIGd1dHRlclxuXHRcdC8vIFVzZSBhbiBleHBsaWNpdCB6ZXJvIHRvIGF2b2lkIE5hTiAoZ2gtMzk2NClcblx0XHQpICkgfHwgMDtcblx0fVxuXG5cdHJldHVybiBkZWx0YSArIG1hcmdpbkRlbHRhO1xufVxuXG5mdW5jdGlvbiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICkge1xuXG5cdC8vIFN0YXJ0IHdpdGggY29tcHV0ZWQgc3R5bGVcblx0dmFyIHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLFxuXG5cdFx0Ly8gVG8gYXZvaWQgZm9yY2luZyBhIHJlZmxvdywgb25seSBmZXRjaCBib3hTaXppbmcgaWYgd2UgbmVlZCBpdCAoZ2gtNDMyMikuXG5cdFx0Ly8gRmFrZSBjb250ZW50LWJveCB1bnRpbCB3ZSBrbm93IGl0J3MgbmVlZGVkIHRvIGtub3cgdGhlIHRydWUgdmFsdWUuXG5cdFx0Ym94U2l6aW5nTmVlZGVkID0gIXN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSB8fCBleHRyYSxcblx0XHRpc0JvcmRlckJveCA9IGJveFNpemluZ05lZWRlZCAmJlxuXHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHR2YWx1ZUlzQm9yZGVyQm94ID0gaXNCb3JkZXJCb3gsXG5cblx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIGRpbWVuc2lvbiwgc3R5bGVzICksXG5cdFx0b2Zmc2V0UHJvcCA9IFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICk7XG5cblx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTU0XG5cdC8vIFJldHVybiBhIGNvbmZvdW5kaW5nIG5vbi1waXhlbCB2YWx1ZSBvciBmZWlnbiBpZ25vcmFuY2UsIGFzIGFwcHJvcHJpYXRlLlxuXHRpZiAoIHJudW1ub25weC50ZXN0KCB2YWwgKSApIHtcblx0XHRpZiAoICFleHRyYSApIHtcblx0XHRcdHJldHVybiB2YWw7XG5cdFx0fVxuXHRcdHZhbCA9IFwiYXV0b1wiO1xuXHR9XG5cblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHQvLyBVc2Ugb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGZvciB3aGVuIGJveCBzaXppbmcgaXMgdW5yZWxpYWJsZS5cblx0Ly8gSW4gdGhvc2UgY2FzZXMsIHRoZSBjb21wdXRlZCB2YWx1ZSBjYW4gYmUgdHJ1c3RlZCB0byBiZSBib3JkZXItYm94LlxuXHRpZiAoICggIXN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSAmJiBpc0JvcmRlckJveCB8fFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgMTAgLSAxMSssIEVkZ2UgMTUgLSAxOCtcblx0XHQvLyBJRS9FZGdlIG1pc3JlcG9ydCBgZ2V0Q29tcHV0ZWRTdHlsZWAgb2YgdGFibGUgcm93cyB3aXRoIHdpZHRoL2hlaWdodFxuXHRcdC8vIHNldCBpbiBDU1Mgd2hpbGUgYG9mZnNldCpgIHByb3BlcnRpZXMgcmVwb3J0IGNvcnJlY3QgdmFsdWVzLlxuXHRcdC8vIEludGVyZXN0aW5nbHksIGluIHNvbWUgY2FzZXMgSUUgOSBkb2Vzbid0IHN1ZmZlciBmcm9tIHRoaXMgaXNzdWUuXG5cdFx0IXN1cHBvcnQucmVsaWFibGVUckRpbWVuc2lvbnMoKSAmJiBub2RlTmFtZSggZWxlbSwgXCJ0clwiICkgfHxcblxuXHRcdC8vIEZhbGwgYmFjayB0byBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgd2hlbiB2YWx1ZSBpcyBcImF1dG9cIlxuXHRcdC8vIFRoaXMgaGFwcGVucyBmb3IgaW5saW5lIGVsZW1lbnRzIHdpdGggbm8gZXhwbGljaXQgc2V0dGluZyAoZ2gtMzU3MSlcblx0XHR2YWwgPT09IFwiYXV0b1wiIHx8XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4xIC0gNC4zIG9ubHlcblx0XHQvLyBBbHNvIHVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIG1pc3JlcG9ydGVkIGlubGluZSBkaW1lbnNpb25zIChnaC0zNjAyKVxuXHRcdCFwYXJzZUZsb2F0KCB2YWwgKSAmJiBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImlubGluZVwiICkgJiZcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGUgZWxlbWVudCBpcyB2aXNpYmxlICYgY29ubmVjdGVkXG5cdFx0ZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcblxuXHRcdGlzQm9yZGVyQm94ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIjtcblxuXHRcdC8vIFdoZXJlIGF2YWlsYWJsZSwgb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGFwcHJveGltYXRlIGJvcmRlciBib3ggZGltZW5zaW9ucy5cblx0XHQvLyBXaGVyZSBub3QgYXZhaWxhYmxlIChlLmcuLCBTVkcpLCBhc3N1bWUgdW5yZWxpYWJsZSBib3gtc2l6aW5nIGFuZCBpbnRlcnByZXQgdGhlXG5cdFx0Ly8gcmV0cmlldmVkIHZhbHVlIGFzIGEgY29udGVudCBib3ggZGltZW5zaW9uLlxuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSBvZmZzZXRQcm9wIGluIGVsZW07XG5cdFx0aWYgKCB2YWx1ZUlzQm9yZGVyQm94ICkge1xuXHRcdFx0dmFsID0gZWxlbVsgb2Zmc2V0UHJvcCBdO1xuXHRcdH1cblx0fVxuXG5cdC8vIE5vcm1hbGl6ZSBcIlwiIGFuZCBhdXRvXG5cdHZhbCA9IHBhcnNlRmxvYXQoIHZhbCApIHx8IDA7XG5cblx0Ly8gQWRqdXN0IGZvciB0aGUgZWxlbWVudCdzIGJveCBtb2RlbFxuXHRyZXR1cm4gKCB2YWwgK1xuXHRcdGJveE1vZGVsQWRqdXN0bWVudChcblx0XHRcdGVsZW0sXG5cdFx0XHRkaW1lbnNpb24sXG5cdFx0XHRleHRyYSB8fCAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICksXG5cdFx0XHR2YWx1ZUlzQm9yZGVyQm94LFxuXHRcdFx0c3R5bGVzLFxuXG5cdFx0XHQvLyBQcm92aWRlIHRoZSBjdXJyZW50IGNvbXB1dGVkIHNpemUgdG8gcmVxdWVzdCBzY3JvbGwgZ3V0dGVyIGNhbGN1bGF0aW9uIChnaC0zNTg5KVxuXHRcdFx0dmFsXG5cdFx0KVxuXHQpICsgXCJweFwiO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQWRkIGluIHN0eWxlIHByb3BlcnR5IGhvb2tzIGZvciBvdmVycmlkaW5nIHRoZSBkZWZhdWx0XG5cdC8vIGJlaGF2aW9yIG9mIGdldHRpbmcgYW5kIHNldHRpbmcgYSBzdHlsZSBwcm9wZXJ0eVxuXHRjc3NIb29rczoge1xuXHRcdG9wYWNpdHk6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdFx0Ly8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYSBudW1iZXIgYmFjayBmcm9tIG9wYWNpdHlcblx0XHRcdFx0XHR2YXIgcmV0ID0gY3VyQ1NTKCBlbGVtLCBcIm9wYWNpdHlcIiApO1xuXHRcdFx0XHRcdHJldHVybiByZXQgPT09IFwiXCIgPyBcIjFcIiA6IHJldDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvLyBEb24ndCBhdXRvbWF0aWNhbGx5IGFkZCBcInB4XCIgdG8gdGhlc2UgcG9zc2libHktdW5pdGxlc3MgcHJvcGVydGllc1xuXHRjc3NOdW1iZXI6IHtcblx0XHRhbmltYXRpb25JdGVyYXRpb25Db3VudDogdHJ1ZSxcblx0XHRhc3BlY3RSYXRpbzogdHJ1ZSxcblx0XHRib3JkZXJJbWFnZVNsaWNlOiB0cnVlLFxuXHRcdGNvbHVtbkNvdW50OiB0cnVlLFxuXHRcdGZsZXhHcm93OiB0cnVlLFxuXHRcdGZsZXhTaHJpbms6IHRydWUsXG5cdFx0Zm9udFdlaWdodDogdHJ1ZSxcblx0XHRncmlkQXJlYTogdHJ1ZSxcblx0XHRncmlkQ29sdW1uOiB0cnVlLFxuXHRcdGdyaWRDb2x1bW5FbmQ6IHRydWUsXG5cdFx0Z3JpZENvbHVtblN0YXJ0OiB0cnVlLFxuXHRcdGdyaWRSb3c6IHRydWUsXG5cdFx0Z3JpZFJvd0VuZDogdHJ1ZSxcblx0XHRncmlkUm93U3RhcnQ6IHRydWUsXG5cdFx0bGluZUhlaWdodDogdHJ1ZSxcblx0XHRvcGFjaXR5OiB0cnVlLFxuXHRcdG9yZGVyOiB0cnVlLFxuXHRcdG9ycGhhbnM6IHRydWUsXG5cdFx0c2NhbGU6IHRydWUsXG5cdFx0d2lkb3dzOiB0cnVlLFxuXHRcdHpJbmRleDogdHJ1ZSxcblx0XHR6b29tOiB0cnVlLFxuXG5cdFx0Ly8gU1ZHLXJlbGF0ZWRcblx0XHRmaWxsT3BhY2l0eTogdHJ1ZSxcblx0XHRmbG9vZE9wYWNpdHk6IHRydWUsXG5cdFx0c3RvcE9wYWNpdHk6IHRydWUsXG5cdFx0c3Ryb2tlTWl0ZXJsaW1pdDogdHJ1ZSxcblx0XHRzdHJva2VPcGFjaXR5OiB0cnVlXG5cdH0sXG5cblx0Ly8gQWRkIGluIHByb3BlcnRpZXMgd2hvc2UgbmFtZXMgeW91IHdpc2ggdG8gZml4IGJlZm9yZVxuXHQvLyBzZXR0aW5nIG9yIGdldHRpbmcgdGhlIHZhbHVlXG5cdGNzc1Byb3BzOiB7fSxcblxuXHQvLyBHZXQgYW5kIHNldCB0aGUgc3R5bGUgcHJvcGVydHkgb24gYSBET00gTm9kZVxuXHRzdHlsZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlLCBleHRyYSApIHtcblxuXHRcdC8vIERvbid0IHNldCBzdHlsZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2Rlc1xuXHRcdGlmICggIWVsZW0gfHwgZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4IHx8ICFlbGVtLnN0eWxlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZVxuXHRcdHZhciByZXQsIHR5cGUsIGhvb2tzLFxuXHRcdFx0b3JpZ05hbWUgPSBjYW1lbENhc2UoIG5hbWUgKSxcblx0XHRcdGlzQ3VzdG9tUHJvcCA9IHJjdXN0b21Qcm9wLnRlc3QoIG5hbWUgKSxcblx0XHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZS4gV2UgZG9uJ3Rcblx0XHQvLyB3YW50IHRvIHF1ZXJ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gR2V0cyBob29rIGZvciB0aGUgcHJlZml4ZWQgdmVyc2lvbiwgdGhlbiB1bnByZWZpeGVkIHZlcnNpb25cblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTtcblxuXHRcdC8vIENoZWNrIGlmIHdlJ3JlIHNldHRpbmcgYSB2YWx1ZVxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHR5cGUgPSB0eXBlb2YgdmFsdWU7XG5cblx0XHRcdC8vIENvbnZlcnQgXCIrPVwiIG9yIFwiLT1cIiB0byByZWxhdGl2ZSBudW1iZXJzICh0cmFjLTczNDUpXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwic3RyaW5nXCIgJiYgKCByZXQgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJiByZXRbIDEgXSApIHtcblx0XHRcdFx0dmFsdWUgPSBhZGp1c3RDU1MoIGVsZW0sIG5hbWUsIHJldCApO1xuXG5cdFx0XHRcdC8vIEZpeGVzIGJ1ZyB0cmFjLTkyMzdcblx0XHRcdFx0dHlwZSA9IFwibnVtYmVyXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IG51bGwgYW5kIE5hTiB2YWx1ZXMgYXJlbid0IHNldCAodHJhYy03MTE2KVxuXHRcdFx0aWYgKCB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlICE9PSB2YWx1ZSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBhIG51bWJlciB3YXMgcGFzc2VkIGluLCBhZGQgdGhlIHVuaXQgKGV4Y2VwdCBmb3IgY2VydGFpbiBDU1MgcHJvcGVydGllcylcblx0XHRcdC8vIFRoZSBpc0N1c3RvbVByb3AgY2hlY2sgY2FuIGJlIHJlbW92ZWQgaW4galF1ZXJ5IDQuMCB3aGVuIHdlIG9ubHkgYXV0by1hcHBlbmRcblx0XHRcdC8vIFwicHhcIiB0byBhIGZldyBoYXJkY29kZWQgdmFsdWVzLlxuXHRcdFx0aWYgKCB0eXBlID09PSBcIm51bWJlclwiICYmICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRcdHZhbHVlICs9IHJldCAmJiByZXRbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIG9yaWdOYW1lIF0gPyBcIlwiIDogXCJweFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGJhY2tncm91bmQtKiBwcm9wcyBhZmZlY3Qgb3JpZ2luYWwgY2xvbmUncyB2YWx1ZXNcblx0XHRcdGlmICggIXN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlICYmIHZhbHVlID09PSBcIlwiICYmIG5hbWUuaW5kZXhPZiggXCJiYWNrZ3JvdW5kXCIgKSA9PT0gMCApIHtcblx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IFwiaW5oZXJpdFwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3RoZXJ3aXNlIGp1c3Qgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWVcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fFxuXHRcdFx0XHQoIHZhbHVlID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0aWYgKCBpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRcdFx0c3R5bGUuc2V0UHJvcGVydHkoIG5hbWUsIHZhbHVlICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgbm9uLWNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgZmFsc2UsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE90aGVyd2lzZSBqdXN0IGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgc3R5bGUgb2JqZWN0XG5cdFx0XHRyZXR1cm4gc3R5bGVbIG5hbWUgXTtcblx0XHR9XG5cdH0sXG5cblx0Y3NzOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZXh0cmEsIHN0eWxlcyApIHtcblx0XHR2YXIgdmFsLCBudW0sIGhvb2tzLFxuXHRcdFx0b3JpZ05hbWUgPSBjYW1lbENhc2UoIG5hbWUgKSxcblx0XHRcdGlzQ3VzdG9tUHJvcCA9IHJjdXN0b21Qcm9wLnRlc3QoIG5hbWUgKTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZS4gV2UgZG9uJ3Rcblx0XHQvLyB3YW50IHRvIG1vZGlmeSB0aGUgdmFsdWUgaWYgaXQgaXMgYSBDU1MgY3VzdG9tIHByb3BlcnR5XG5cdFx0Ly8gc2luY2UgdGhleSBhcmUgdXNlci1kZWZpbmVkLlxuXHRcdGlmICggIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdG5hbWUgPSBmaW5hbFByb3BOYW1lKCBvcmlnTmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIFRyeSBwcmVmaXhlZCBuYW1lIGZvbGxvd2VkIGJ5IHRoZSB1bnByZWZpeGVkIG5hbWVcblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTtcblxuXHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICkge1xuXHRcdFx0dmFsID0gaG9va3MuZ2V0KCBlbGVtLCB0cnVlLCBleHRyYSApO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSwgaWYgYSB3YXkgdG8gZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBleGlzdHMsIHVzZSB0aGF0XG5cdFx0aWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSwgc3R5bGVzICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBcIm5vcm1hbFwiIHRvIGNvbXB1dGVkIHZhbHVlXG5cdFx0aWYgKCB2YWwgPT09IFwibm9ybWFsXCIgJiYgbmFtZSBpbiBjc3NOb3JtYWxUcmFuc2Zvcm0gKSB7XG5cdFx0XHR2YWwgPSBjc3NOb3JtYWxUcmFuc2Zvcm1bIG5hbWUgXTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIG51bWVyaWMgaWYgZm9yY2VkIG9yIGEgcXVhbGlmaWVyIHdhcyBwcm92aWRlZCBhbmQgdmFsIGxvb2tzIG51bWVyaWNcblx0XHRpZiAoIGV4dHJhID09PSBcIlwiIHx8IGV4dHJhICkge1xuXHRcdFx0bnVtID0gcGFyc2VGbG9hdCggdmFsICk7XG5cdFx0XHRyZXR1cm4gZXh0cmEgPT09IHRydWUgfHwgaXNGaW5pdGUoIG51bSApID8gbnVtIHx8IDAgOiB2YWw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbDtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImhlaWdodFwiLCBcIndpZHRoXCIgXSwgZnVuY3Rpb24oIF9pLCBkaW1lbnNpb24gKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgZGltZW5zaW9uIF0gPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQsIGV4dHJhICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHQvLyBDZXJ0YWluIGVsZW1lbnRzIGNhbiBoYXZlIGRpbWVuc2lvbiBpbmZvIGlmIHdlIGludmlzaWJseSBzaG93IHRoZW1cblx0XHRcdFx0Ly8gYnV0IGl0IG11c3QgaGF2ZSBhIGN1cnJlbnQgZGlzcGxheSBzdHlsZSB0aGF0IHdvdWxkIGJlbmVmaXRcblx0XHRcdFx0cmV0dXJuIHJkaXNwbGF5c3dhcC50ZXN0KCBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApICkgJiZcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4K1xuXHRcdFx0XHRcdC8vIFRhYmxlIGNvbHVtbnMgaW4gU2FmYXJpIGhhdmUgbm9uLXplcm8gb2Zmc2V0V2lkdGggJiB6ZXJvXG5cdFx0XHRcdFx0Ly8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggdW5sZXNzIGRpc3BsYXkgaXMgY2hhbmdlZC5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHRcdFx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlXG5cdFx0XHRcdFx0Ly8gaW4gSUUgdGhyb3dzIGFuIGVycm9yLlxuXHRcdFx0XHRcdCggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggfHwgIWVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKSA/XG5cdFx0XHRcdFx0c3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApO1xuXHRcdFx0XHRcdH0gKSA6XG5cdFx0XHRcdFx0Z2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSB7XG5cdFx0XHR2YXIgbWF0Y2hlcyxcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHRcdFx0Ly8gT25seSByZWFkIHN0eWxlcy5wb3NpdGlvbiBpZiB0aGUgdGVzdCBoYXMgYSBjaGFuY2UgdG8gZmFpbFxuXHRcdFx0XHQvLyB0byBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LlxuXHRcdFx0XHRzY3JvbGxib3hTaXplQnVnZ3kgPSAhc3VwcG9ydC5zY3JvbGxib3hTaXplKCkgJiZcblx0XHRcdFx0XHRzdHlsZXMucG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIixcblxuXHRcdFx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC0zOTkxKVxuXHRcdFx0XHRib3hTaXppbmdOZWVkZWQgPSBzY3JvbGxib3hTaXplQnVnZ3kgfHwgZXh0cmEsXG5cdFx0XHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHRcdFx0c3VidHJhY3QgPSBleHRyYSA/XG5cdFx0XHRcdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0XHRcdFx0ZWxlbSxcblx0XHRcdFx0XHRcdGRpbWVuc2lvbixcblx0XHRcdFx0XHRcdGV4dHJhLFxuXHRcdFx0XHRcdFx0aXNCb3JkZXJCb3gsXG5cdFx0XHRcdFx0XHRzdHlsZXNcblx0XHRcdFx0XHQpIDpcblx0XHRcdFx0XHQwO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB1bnJlbGlhYmxlIGJvcmRlci1ib3ggZGltZW5zaW9ucyBieSBjb21wYXJpbmcgb2Zmc2V0KiB0byBjb21wdXRlZCBhbmRcblx0XHRcdC8vIGZha2luZyBhIGNvbnRlbnQtYm94IHRvIGdldCBib3JkZXIgYW5kIHBhZGRpbmcgKGdoLTM2OTkpXG5cdFx0XHRpZiAoIGlzQm9yZGVyQm94ICYmIHNjcm9sbGJveFNpemVCdWdneSApIHtcblx0XHRcdFx0c3VidHJhY3QgLT0gTWF0aC5jZWlsKFxuXHRcdFx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXG5cdFx0XHRcdFx0cGFyc2VGbG9hdCggc3R5bGVzWyBkaW1lbnNpb24gXSApIC1cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgXCJib3JkZXJcIiwgZmFsc2UsIHN0eWxlcyApIC1cblx0XHRcdFx0XHQwLjVcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCB0byBwaXhlbHMgaWYgdmFsdWUgYWRqdXN0bWVudCBpcyBuZWVkZWRcblx0XHRcdGlmICggc3VidHJhY3QgJiYgKCBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiZcblx0XHRcdFx0KCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgIT09IFwicHhcIiApIHtcblxuXHRcdFx0XHRlbGVtLnN0eWxlWyBkaW1lbnNpb24gXSA9IHZhbHVlO1xuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5jc3MoIGVsZW0sIGRpbWVuc2lvbiApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApO1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmNzc0hvb2tzLm1hcmdpbkxlZnQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5MZWZ0LFxuXHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdHJldHVybiAoIHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIgKSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtXG5cdFx0XHRcdFx0c3dhcCggZWxlbSwgeyBtYXJnaW5MZWZ0OiAwIH0sIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblx0XHRcdFx0XHR9IClcblx0XHRcdCkgKyBcInB4XCI7XG5cdFx0fVxuXHR9XG4pO1xuXG4vLyBUaGVzZSBob29rcyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFuZCBwcm9wZXJ0aWVzXG5qUXVlcnkuZWFjaCgge1xuXHRtYXJnaW46IFwiXCIsXG5cdHBhZGRpbmc6IFwiXCIsXG5cdGJvcmRlcjogXCJXaWR0aFwiXG59LCBmdW5jdGlvbiggcHJlZml4LCBzdWZmaXggKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0gPSB7XG5cdFx0ZXhwYW5kOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgaSA9IDAsXG5cdFx0XHRcdGV4cGFuZGVkID0ge30sXG5cblx0XHRcdFx0Ly8gQXNzdW1lcyBhIHNpbmdsZSBudW1iZXIgaWYgbm90IGEgc3RyaW5nXG5cdFx0XHRcdHBhcnRzID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUuc3BsaXQoIFwiIFwiICkgOiBbIHZhbHVlIF07XG5cblx0XHRcdGZvciAoIDsgaSA8IDQ7IGkrKyApIHtcblx0XHRcdFx0ZXhwYW5kZWRbIHByZWZpeCArIGNzc0V4cGFuZFsgaSBdICsgc3VmZml4IF0gPVxuXHRcdFx0XHRcdHBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGV4cGFuZGVkO1xuXHRcdH1cblx0fTtcblxuXHRpZiAoIHByZWZpeCAhPT0gXCJtYXJnaW5cIiApIHtcblx0XHRqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdLnNldCA9IHNldFBvc2l0aXZlTnVtYmVyO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0Y3NzOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0dmFyIHN0eWxlcywgbGVuLFxuXHRcdFx0XHRtYXAgPSB7fSxcblx0XHRcdFx0aSA9IDA7XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggbmFtZSApICkge1xuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKTtcblx0XHRcdFx0bGVuID0gbmFtZS5sZW5ndGg7XG5cblx0XHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0bWFwWyBuYW1lWyBpIF0gXSA9IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWVbIGkgXSwgZmFsc2UsIHN0eWxlcyApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG1hcDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZhbHVlICkgOlxuXHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7XG5cdFx0fSwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH1cbn0gKTtcblxuXG5mdW5jdGlvbiBUd2VlbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKSB7XG5cdHJldHVybiBuZXcgVHdlZW4ucHJvdG90eXBlLmluaXQoIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICk7XG59XG5qUXVlcnkuVHdlZW4gPSBUd2VlbjtcblxuVHdlZW4ucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogVHdlZW4sXG5cdGluaXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZywgdW5pdCApIHtcblx0XHR0aGlzLmVsZW0gPSBlbGVtO1xuXHRcdHRoaXMucHJvcCA9IHByb3A7XG5cdFx0dGhpcy5lYXNpbmcgPSBlYXNpbmcgfHwgalF1ZXJ5LmVhc2luZy5fZGVmYXVsdDtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXHRcdHRoaXMuc3RhcnQgPSB0aGlzLm5vdyA9IHRoaXMuY3VyKCk7XG5cdFx0dGhpcy5lbmQgPSBlbmQ7XG5cdFx0dGhpcy51bml0ID0gdW5pdCB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0fSxcblx0Y3VyOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xuXG5cdFx0cmV0dXJuIGhvb2tzICYmIGhvb2tzLmdldCA/XG5cdFx0XHRob29rcy5nZXQoIHRoaXMgKSA6XG5cdFx0XHRUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KCB0aGlzICk7XG5cdH0sXG5cdHJ1bjogZnVuY3Rpb24oIHBlcmNlbnQgKSB7XG5cdFx0dmFyIGVhc2VkLFxuXHRcdFx0aG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKSB7XG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0galF1ZXJ5LmVhc2luZ1sgdGhpcy5lYXNpbmcgXShcblx0XHRcdFx0cGVyY2VudCwgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogcGVyY2VudCwgMCwgMSwgdGhpcy5vcHRpb25zLmR1cmF0aW9uXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0gcGVyY2VudDtcblx0XHR9XG5cdFx0dGhpcy5ub3cgPSAoIHRoaXMuZW5kIC0gdGhpcy5zdGFydCApICogZWFzZWQgKyB0aGlzLnN0YXJ0O1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuc3RlcCApIHtcblx0XHRcdHRoaXMub3B0aW9ucy5zdGVwLmNhbGwoIHRoaXMuZWxlbSwgdGhpcy5ub3csIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnNldCApIHtcblx0XHRcdGhvb2tzLnNldCggdGhpcyApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KCB0aGlzICk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59O1xuXG5Ud2Vlbi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGUgPSBUd2Vlbi5wcm90b3R5cGU7XG5cblR3ZWVuLnByb3BIb29rcyA9IHtcblx0X2RlZmF1bHQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRcdHZhciByZXN1bHQ7XG5cblx0XHRcdC8vIFVzZSBhIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGRpcmVjdGx5IHdoZW4gaXQgaXMgbm90IGEgRE9NIGVsZW1lbnQsXG5cdFx0XHQvLyBvciB3aGVuIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHN0eWxlIHByb3BlcnR5IHRoYXQgZXhpc3RzLlxuXHRcdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICE9PSAxIHx8XG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSAhPSBudWxsICYmIHR3ZWVuLmVsZW0uc3R5bGVbIHR3ZWVuLnByb3AgXSA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQYXNzaW5nIGFuIGVtcHR5IHN0cmluZyBhcyBhIDNyZCBwYXJhbWV0ZXIgdG8gLmNzcyB3aWxsIGF1dG9tYXRpY2FsbHlcblx0XHRcdC8vIGF0dGVtcHQgYSBwYXJzZUZsb2F0IGFuZCBmYWxsYmFjayB0byBhIHN0cmluZyBpZiB0aGUgcGFyc2UgZmFpbHMuXG5cdFx0XHQvLyBTaW1wbGUgdmFsdWVzIHN1Y2ggYXMgXCIxMHB4XCIgYXJlIHBhcnNlZCB0byBGbG9hdDtcblx0XHRcdC8vIGNvbXBsZXggdmFsdWVzIHN1Y2ggYXMgXCJyb3RhdGUoMXJhZClcIiBhcmUgcmV0dXJuZWQgYXMtaXMuXG5cdFx0XHRyZXN1bHQgPSBqUXVlcnkuY3NzKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCBcIlwiICk7XG5cblx0XHRcdC8vIEVtcHR5IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgXCJhdXRvXCIgYXJlIGNvbnZlcnRlZCB0byAwLlxuXHRcdFx0cmV0dXJuICFyZXN1bHQgfHwgcmVzdWx0ID09PSBcImF1dG9cIiA/IDAgOiByZXN1bHQ7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblxuXHRcdFx0Ly8gVXNlIHN0ZXAgaG9vayBmb3IgYmFjayBjb21wYXQuXG5cdFx0XHQvLyBVc2UgY3NzSG9vayBpZiBpdHMgdGhlcmUuXG5cdFx0XHQvLyBVc2UgLnN0eWxlIGlmIGF2YWlsYWJsZSBhbmQgdXNlIHBsYWluIHByb3BlcnRpZXMgd2hlcmUgYXZhaWxhYmxlLlxuXHRcdFx0aWYgKCBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdICkge1xuXHRcdFx0XHRqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApO1xuXHRcdFx0fSBlbHNlIGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoXG5cdFx0XHRcdGpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdIHx8XG5cdFx0XHRcdFx0dHdlZW4uZWxlbS5zdHlsZVsgZmluYWxQcm9wTmFtZSggdHdlZW4ucHJvcCApIF0gIT0gbnVsbCApICkge1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVuLnVuaXQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG4vLyBQYW5pYyBiYXNlZCBhcHByb2FjaCB0byBzZXR0aW5nIHRoaW5ncyBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblR3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3AgPSBUd2Vlbi5wcm9wSG9va3Muc2Nyb2xsTGVmdCA9IHtcblx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICYmIHR3ZWVuLmVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5lYXNpbmcgPSB7XG5cdGxpbmVhcjogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIHA7XG5cdH0sXG5cdHN3aW5nOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gMC41IC0gTWF0aC5jb3MoIHAgKiBNYXRoLlBJICkgLyAyO1xuXHR9LFxuXHRfZGVmYXVsdDogXCJzd2luZ1wiXG59O1xuXG5qUXVlcnkuZnggPSBUd2Vlbi5wcm90b3R5cGUuaW5pdDtcblxuLy8gQmFjayBjb21wYXQgPDEuOCBleHRlbnNpb24gcG9pbnRcbmpRdWVyeS5meC5zdGVwID0ge307XG5cblxuXG5cbnZhclxuXHRmeE5vdywgaW5Qcm9ncmVzcyxcblx0cmZ4dHlwZXMgPSAvXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sXG5cdHJydW4gPSAvcXVldWVIb29rcyQvO1xuXG5mdW5jdGlvbiBzY2hlZHVsZSgpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdGlmICggZG9jdW1lbnQuaGlkZGVuID09PSBmYWxzZSAmJiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lICkge1xuXHRcdFx0d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSggc2NoZWR1bGUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d2luZG93LnNldFRpbWVvdXQoIHNjaGVkdWxlLCBqUXVlcnkuZnguaW50ZXJ2YWwgKTtcblx0XHR9XG5cblx0XHRqUXVlcnkuZngudGljaygpO1xuXHR9XG59XG5cbi8vIEFuaW1hdGlvbnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHlcbmZ1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0ZnhOb3cgPSB1bmRlZmluZWQ7XG5cdH0gKTtcblx0cmV0dXJuICggZnhOb3cgPSBEYXRlLm5vdygpICk7XG59XG5cbi8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRhcmQgYW5pbWF0aW9uXG5mdW5jdGlvbiBnZW5GeCggdHlwZSwgaW5jbHVkZVdpZHRoICkge1xuXHR2YXIgd2hpY2gsXG5cdFx0aSA9IDAsXG5cdFx0YXR0cnMgPSB7IGhlaWdodDogdHlwZSB9O1xuXG5cdC8vIElmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwgY3NzRXhwYW5kIHZhbHVlcyxcblx0Ly8gb3RoZXJ3aXNlIHN0ZXAgdmFsdWUgaXMgMiB0byBza2lwIG92ZXIgTGVmdCBhbmQgUmlnaHRcblx0aW5jbHVkZVdpZHRoID0gaW5jbHVkZVdpZHRoID8gMSA6IDA7XG5cdGZvciAoIDsgaSA8IDQ7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHtcblx0XHR3aGljaCA9IGNzc0V4cGFuZFsgaSBdO1xuXHRcdGF0dHJzWyBcIm1hcmdpblwiICsgd2hpY2ggXSA9IGF0dHJzWyBcInBhZGRpbmdcIiArIHdoaWNoIF0gPSB0eXBlO1xuXHR9XG5cblx0aWYgKCBpbmNsdWRlV2lkdGggKSB7XG5cdFx0YXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlwZTtcblx0fVxuXG5cdHJldHVybiBhdHRycztcbn1cblxuZnVuY3Rpb24gY3JlYXRlVHdlZW4oIHZhbHVlLCBwcm9wLCBhbmltYXRpb24gKSB7XG5cdHZhciB0d2Vlbixcblx0XHRjb2xsZWN0aW9uID0gKCBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXSApLmNvbmNhdCggQW5pbWF0aW9uLnR3ZWVuZXJzWyBcIipcIiBdICksXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGlmICggKCB0d2VlbiA9IGNvbGxlY3Rpb25bIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBwcm9wLCB2YWx1ZSApICkgKSB7XG5cblx0XHRcdC8vIFdlJ3JlIGRvbmUgd2l0aCB0aGlzIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRQcmVmaWx0ZXIoIGVsZW0sIHByb3BzLCBvcHRzICkge1xuXHR2YXIgcHJvcCwgdmFsdWUsIHRvZ2dsZSwgaG9va3MsIG9sZGZpcmUsIHByb3BUd2VlbiwgcmVzdG9yZURpc3BsYXksIGRpc3BsYXksXG5cdFx0aXNCb3ggPSBcIndpZHRoXCIgaW4gcHJvcHMgfHwgXCJoZWlnaHRcIiBpbiBwcm9wcyxcblx0XHRhbmltID0gdGhpcyxcblx0XHRvcmlnID0ge30sXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlLFxuXHRcdGhpZGRlbiA9IGVsZW0ubm9kZVR5cGUgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICksXG5cdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZnhzaG93XCIgKTtcblxuXHQvLyBRdWV1ZS1za2lwcGluZyBhbmltYXRpb25zIGhpamFjayB0aGUgZnggaG9va3Ncblx0aWYgKCAhb3B0cy5xdWV1ZSApIHtcblx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgXCJmeFwiICk7XG5cdFx0aWYgKCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkge1xuXHRcdFx0aG9va3MudW5xdWV1ZWQgPSAwO1xuXHRcdFx0b2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZpcmU7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggIWhvb2tzLnVucXVldWVkICkge1xuXHRcdFx0XHRcdG9sZGZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aG9va3MudW5xdWV1ZWQrKztcblxuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5zdXJlIHRoZSBjb21wbGV0ZSBoYW5kbGVyIGlzIGNhbGxlZCBiZWZvcmUgdGhpcyBjb21wbGV0ZXNcblx0XHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aG9va3MudW5xdWV1ZWQtLTtcblx0XHRcdFx0aWYgKCAhalF1ZXJ5LnF1ZXVlKCBlbGVtLCBcImZ4XCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRGV0ZWN0IHNob3cvaGlkZSBhbmltYXRpb25zXG5cdGZvciAoIHByb3AgaW4gcHJvcHMgKSB7XG5cdFx0dmFsdWUgPSBwcm9wc1sgcHJvcCBdO1xuXHRcdGlmICggcmZ4dHlwZXMudGVzdCggdmFsdWUgKSApIHtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgcHJvcCBdO1xuXHRcdFx0dG9nZ2xlID0gdG9nZ2xlIHx8IHZhbHVlID09PSBcInRvZ2dsZVwiO1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gKCBoaWRkZW4gPyBcImhpZGVcIiA6IFwic2hvd1wiICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJldGVuZCB0byBiZSBoaWRkZW4gaWYgdGhpcyBpcyBhIFwic2hvd1wiIGFuZFxuXHRcdFx0XHQvLyB0aGVyZSBpcyBzdGlsbCBkYXRhIGZyb20gYSBzdG9wcGVkIHNob3cvaGlkZVxuXHRcdFx0XHRpZiAoIHZhbHVlID09PSBcInNob3dcIiAmJiBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gdHJ1ZTtcblxuXHRcdFx0XHQvLyBJZ25vcmUgYWxsIG90aGVyIG5vLW9wIHNob3cvaGlkZSBkYXRhXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG9yaWdbIHByb3AgXSA9IGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gfHwgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQmFpbCBvdXQgaWYgdGhpcyBpcyBhIG5vLW9wIGxpa2UgLmhpZGUoKS5oaWRlKClcblx0cHJvcFR3ZWVuID0gIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wcyApO1xuXHRpZiAoICFwcm9wVHdlZW4gJiYgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIG9yaWcgKSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZXN0cmljdCBcIm92ZXJmbG93XCIgYW5kIFwiZGlzcGxheVwiIHN0eWxlcyBkdXJpbmcgYm94IGFuaW1hdGlvbnNcblx0aWYgKCBpc0JveCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEsIEVkZ2UgMTIgLSAxNVxuXHRcdC8vIFJlY29yZCBhbGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUUgZG9lcyBub3QgaW5mZXIgdGhlIHNob3J0aGFuZFxuXHRcdC8vIGZyb20gaWRlbnRpY2FsbHktdmFsdWVkIG92ZXJmbG93WCBhbmQgb3ZlcmZsb3dZIGFuZCBFZGdlIGp1c3QgbWlycm9yc1xuXHRcdC8vIHRoZSBvdmVyZmxvd1ggdmFsdWUgdGhlcmUuXG5cdFx0b3B0cy5vdmVyZmxvdyA9IFsgc3R5bGUub3ZlcmZsb3csIHN0eWxlLm92ZXJmbG93WCwgc3R5bGUub3ZlcmZsb3dZIF07XG5cblx0XHQvLyBJZGVudGlmeSBhIGRpc3BsYXkgdHlwZSwgcHJlZmVycmluZyBvbGQgc2hvdy9oaWRlIGRhdGEgb3ZlciB0aGUgQ1NTIGNhc2NhZGVcblx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFTaG93ICYmIGRhdGFTaG93LmRpc3BsYXk7XG5cdFx0aWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkge1xuXHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0fVxuXHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ICkge1xuXHRcdFx0XHRkaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEdldCBub25lbXB0eSB2YWx1ZShzKSBieSB0ZW1wb3JhcmlseSBmb3JjaW5nIHZpc2liaWxpdHlcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5IHx8IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQW5pbWF0ZSBpbmxpbmUgZWxlbWVudHMgYXMgaW5saW5lLWJsb2NrXG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcImlubGluZVwiIHx8IGRpc3BsYXkgPT09IFwiaW5saW5lLWJsb2NrXCIgJiYgcmVzdG9yZURpc3BsYXkgIT0gbnVsbCApIHtcblx0XHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJmbG9hdFwiICkgPT09IFwibm9uZVwiICkge1xuXG5cdFx0XHRcdC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGRpc3BsYXkgdmFsdWUgYXQgdGhlIGVuZCBvZiBwdXJlIHNob3cvaGlkZSBhbmltYXRpb25zXG5cdFx0XHRcdGlmICggIXByb3BUd2VlbiApIHtcblx0XHRcdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5ID0gc3R5bGUuZGlzcGxheTtcblx0XHRcdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZGlzcGxheSA9PT0gXCJub25lXCIgPyBcIlwiIDogZGlzcGxheTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBvcHRzLm92ZXJmbG93ICkge1xuXHRcdHN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRzdHlsZS5vdmVyZmxvdyA9IG9wdHMub3ZlcmZsb3dbIDAgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WCA9IG9wdHMub3ZlcmZsb3dbIDEgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WSA9IG9wdHMub3ZlcmZsb3dbIDIgXTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBJbXBsZW1lbnQgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0cHJvcFR3ZWVuID0gZmFsc2U7XG5cdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblxuXHRcdC8vIEdlbmVyYWwgc2hvdy9oaWRlIHNldHVwIGZvciB0aGlzIGVsZW1lbnQgYW5pbWF0aW9uXG5cdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0aWYgKCBkYXRhU2hvdyApIHtcblx0XHRcdFx0aWYgKCBcImhpZGRlblwiIGluIGRhdGFTaG93ICkge1xuXHRcdFx0XHRcdGhpZGRlbiA9IGRhdGFTaG93LmhpZGRlbjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIFwiZnhzaG93XCIsIHsgZGlzcGxheTogcmVzdG9yZURpc3BsYXkgfSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdG9yZSBoaWRkZW4vdmlzaWJsZSBmb3IgdG9nZ2xlIHNvIGAuc3RvcCgpLnRvZ2dsZSgpYCBcInJldmVyc2VzXCJcblx0XHRcdGlmICggdG9nZ2xlICkge1xuXHRcdFx0XHRkYXRhU2hvdy5oaWRkZW4gPSAhaGlkZGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTaG93IGVsZW1lbnRzIGJlZm9yZSBhbmltYXRpbmcgdGhlbVxuXHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuXHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRcdC8vIFRoZSBmaW5hbCBzdGVwIG9mIGEgXCJoaWRlXCIgYW5pbWF0aW9uIGlzIGFjdHVhbGx5IGhpZGluZyB0aGUgZWxlbWVudFxuXHRcdFx0XHRpZiAoICFoaWRkZW4gKSB7XG5cdFx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cdFx0XHRcdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIG9yaWdbIHByb3AgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Ly8gUGVyLXByb3BlcnR5IHNldHVwXG5cdFx0cHJvcFR3ZWVuID0gY3JlYXRlVHdlZW4oIGhpZGRlbiA/IGRhdGFTaG93WyBwcm9wIF0gOiAwLCBwcm9wLCBhbmltICk7XG5cdFx0aWYgKCAhKCBwcm9wIGluIGRhdGFTaG93ICkgKSB7XG5cdFx0XHRkYXRhU2hvd1sgcHJvcCBdID0gcHJvcFR3ZWVuLnN0YXJ0O1xuXHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdHByb3BUd2Vlbi5lbmQgPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRcdHByb3BUd2Vlbi5zdGFydCA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHByb3BGaWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFzaW5nICkge1xuXHR2YXIgaW5kZXgsIG5hbWUsIGVhc2luZywgdmFsdWUsIGhvb2tzO1xuXG5cdC8vIGNhbWVsQ2FzZSwgc3BlY2lhbEVhc2luZyBhbmQgZXhwYW5kIGNzc0hvb2sgcGFzc1xuXHRmb3IgKCBpbmRleCBpbiBwcm9wcyApIHtcblx0XHRuYW1lID0gY2FtZWxDYXNlKCBpbmRleCApO1xuXHRcdGVhc2luZyA9IHNwZWNpYWxFYXNpbmdbIG5hbWUgXTtcblx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdO1xuXHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdGVhc2luZyA9IHZhbHVlWyAxIF07XG5cdFx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdID0gdmFsdWVbIDAgXTtcblx0XHR9XG5cblx0XHRpZiAoIGluZGV4ICE9PSBuYW1lICkge1xuXHRcdFx0cHJvcHNbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBpbmRleCBdO1xuXHRcdH1cblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF07XG5cdFx0aWYgKCBob29rcyAmJiBcImV4cGFuZFwiIGluIGhvb2tzICkge1xuXHRcdFx0dmFsdWUgPSBob29rcy5leHBhbmQoIHZhbHVlICk7XG5cdFx0XHRkZWxldGUgcHJvcHNbIG5hbWUgXTtcblxuXHRcdFx0Ly8gTm90IHF1aXRlICQuZXh0ZW5kLCB0aGlzIHdvbid0IG92ZXJ3cml0ZSBleGlzdGluZyBrZXlzLlxuXHRcdFx0Ly8gUmV1c2luZyAnaW5kZXgnIGJlY2F1c2Ugd2UgaGF2ZSB0aGUgY29ycmVjdCBcIm5hbWVcIlxuXHRcdFx0Zm9yICggaW5kZXggaW4gdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggISggaW5kZXggaW4gcHJvcHMgKSApIHtcblx0XHRcdFx0XHRwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyBpbmRleCBdO1xuXHRcdFx0XHRcdHNwZWNpYWxFYXNpbmdbIGluZGV4IF0gPSBlYXNpbmc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3BlY2lhbEVhc2luZ1sgbmFtZSBdID0gZWFzaW5nO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBBbmltYXRpb24oIGVsZW0sIHByb3BlcnRpZXMsIG9wdGlvbnMgKSB7XG5cdHZhciByZXN1bHQsXG5cdFx0c3RvcHBlZCxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gQW5pbWF0aW9uLnByZWZpbHRlcnMubGVuZ3RoLFxuXHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCkuYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRG9uJ3QgbWF0Y2ggZWxlbSBpbiB0aGUgOmFuaW1hdGVkIHNlbGVjdG9yXG5cdFx0XHRkZWxldGUgdGljay5lbGVtO1xuXHRcdH0gKSxcblx0XHR0aWNrID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHZhciBjdXJyZW50VGltZSA9IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXG5cdFx0XHRcdHJlbWFpbmluZyA9IE1hdGgubWF4KCAwLCBhbmltYXRpb24uc3RhcnRUaW1lICsgYW5pbWF0aW9uLmR1cmF0aW9uIC0gY3VycmVudFRpbWUgKSxcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDIuMyBvbmx5XG5cdFx0XHRcdC8vIEFyY2hhaWMgY3Jhc2ggYnVnIHdvbid0IGFsbG93IHVzIHRvIHVzZSBgMSAtICggMC41IHx8IDAgKWAgKHRyYWMtMTI0OTcpXG5cdFx0XHRcdHRlbXAgPSByZW1haW5pbmcgLyBhbmltYXRpb24uZHVyYXRpb24gfHwgMCxcblx0XHRcdFx0cGVyY2VudCA9IDEgLSB0ZW1wLFxuXHRcdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRcdGxlbmd0aCA9IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoO1xuXG5cdFx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggcGVyY2VudCApO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgcGVyY2VudCwgcmVtYWluaW5nIF0gKTtcblxuXHRcdFx0Ly8gSWYgdGhlcmUncyBtb3JlIHRvIGRvLCB5aWVsZFxuXHRcdFx0aWYgKCBwZXJjZW50IDwgMSAmJiBsZW5ndGggKSB7XG5cdFx0XHRcdHJldHVybiByZW1haW5pbmc7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHRoaXMgd2FzIGFuIGVtcHR5IGFuaW1hdGlvbiwgc3ludGhlc2l6ZSBhIGZpbmFsIHByb2dyZXNzIG5vdGlmaWNhdGlvblxuXHRcdFx0aWYgKCAhbGVuZ3RoICkge1xuXHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlc29sdmUgdGhlIGFuaW1hdGlvbiBhbmQgcmVwb3J0IGl0cyBjb25jbHVzaW9uXG5cdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24gXSApO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0YW5pbWF0aW9uID0gZGVmZXJyZWQucHJvbWlzZSgge1xuXHRcdFx0ZWxlbTogZWxlbSxcblx0XHRcdHByb3BzOiBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcGVydGllcyApLFxuXHRcdFx0b3B0czogalF1ZXJ5LmV4dGVuZCggdHJ1ZSwge1xuXHRcdFx0XHRzcGVjaWFsRWFzaW5nOiB7fSxcblx0XHRcdFx0ZWFzaW5nOiBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0XG5cdFx0XHR9LCBvcHRpb25zICksXG5cdFx0XHRvcmlnaW5hbFByb3BlcnRpZXM6IHByb3BlcnRpZXMsXG5cdFx0XHRvcmlnaW5hbE9wdGlvbnM6IG9wdGlvbnMsXG5cdFx0XHRzdGFydFRpbWU6IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXG5cdFx0XHRkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbixcblx0XHRcdHR3ZWVuczogW10sXG5cdFx0XHRjcmVhdGVUd2VlbjogZnVuY3Rpb24oIHByb3AsIGVuZCApIHtcblx0XHRcdFx0dmFyIHR3ZWVuID0galF1ZXJ5LlR3ZWVuKCBlbGVtLCBhbmltYXRpb24ub3B0cywgcHJvcCwgZW5kLFxuXHRcdFx0XHRcdGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmdbIHByb3AgXSB8fCBhbmltYXRpb24ub3B0cy5lYXNpbmcgKTtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVucy5wdXNoKCB0d2VlbiApO1xuXHRcdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0XHR9LFxuXHRcdFx0c3RvcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7XG5cdFx0XHRcdHZhciBpbmRleCA9IDAsXG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBhcmUgZ29pbmcgdG8gdGhlIGVuZCwgd2Ugd2FudCB0byBydW4gYWxsIHRoZSB0d2VlbnNcblx0XHRcdFx0XHQvLyBvdGhlcndpc2Ugd2Ugc2tpcCB0aGlzIHBhcnRcblx0XHRcdFx0XHRsZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAwO1xuXHRcdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3RvcHBlZCA9IHRydWU7XG5cdFx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIDEgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlc29sdmUgd2hlbiB3ZSBwbGF5ZWQgdGhlIGxhc3QgZnJhbWU7IG90aGVyd2lzZSwgcmVqZWN0XG5cdFx0XHRcdGlmICggZ290b0VuZCApIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0fSApLFxuXHRcdHByb3BzID0gYW5pbWF0aW9uLnByb3BzO1xuXG5cdHByb3BGaWx0ZXIoIHByb3BzLCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7XG5cblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRyZXN1bHQgPSBBbmltYXRpb24ucHJlZmlsdGVyc1sgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIGVsZW0sIHByb3BzLCBhbmltYXRpb24ub3B0cyApO1xuXHRcdGlmICggcmVzdWx0ICkge1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCByZXN1bHQuc3RvcCApICkge1xuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIGFuaW1hdGlvbi5lbGVtLCBhbmltYXRpb24ub3B0cy5xdWV1ZSApLnN0b3AgPVxuXHRcdFx0XHRcdHJlc3VsdC5zdG9wLmJpbmQoIHJlc3VsdCApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH1cblxuXHRqUXVlcnkubWFwKCBwcm9wcywgY3JlYXRlVHdlZW4sIGFuaW1hdGlvbiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggYW5pbWF0aW9uLm9wdHMuc3RhcnQgKSApIHtcblx0XHRhbmltYXRpb24ub3B0cy5zdGFydC5jYWxsKCBlbGVtLCBhbmltYXRpb24gKTtcblx0fVxuXG5cdC8vIEF0dGFjaCBjYWxsYmFja3MgZnJvbSBvcHRpb25zXG5cdGFuaW1hdGlvblxuXHRcdC5wcm9ncmVzcyggYW5pbWF0aW9uLm9wdHMucHJvZ3Jlc3MgKVxuXHRcdC5kb25lKCBhbmltYXRpb24ub3B0cy5kb25lLCBhbmltYXRpb24ub3B0cy5jb21wbGV0ZSApXG5cdFx0LmZhaWwoIGFuaW1hdGlvbi5vcHRzLmZhaWwgKVxuXHRcdC5hbHdheXMoIGFuaW1hdGlvbi5vcHRzLmFsd2F5cyApO1xuXG5cdGpRdWVyeS5meC50aW1lcihcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aWNrLCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0YW5pbTogYW5pbWF0aW9uLFxuXHRcdFx0cXVldWU6IGFuaW1hdGlvbi5vcHRzLnF1ZXVlXG5cdFx0fSApXG5cdCk7XG5cblx0cmV0dXJuIGFuaW1hdGlvbjtcbn1cblxualF1ZXJ5LkFuaW1hdGlvbiA9IGpRdWVyeS5leHRlbmQoIEFuaW1hdGlvbiwge1xuXG5cdHR3ZWVuZXJzOiB7XG5cdFx0XCIqXCI6IFsgZnVuY3Rpb24oIHByb3AsIHZhbHVlICkge1xuXHRcdFx0dmFyIHR3ZWVuID0gdGhpcy5jcmVhdGVUd2VlbiggcHJvcCwgdmFsdWUgKTtcblx0XHRcdGFkanVzdENTUyggdHdlZW4uZWxlbSwgcHJvcCwgcmNzc051bS5leGVjKCB2YWx1ZSApLCB0d2VlbiApO1xuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH0gXVxuXHR9LFxuXG5cdHR3ZWVuZXI6IGZ1bmN0aW9uKCBwcm9wcywgY2FsbGJhY2sgKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBwcm9wcyApICkge1xuXHRcdFx0Y2FsbGJhY2sgPSBwcm9wcztcblx0XHRcdHByb3BzID0gWyBcIipcIiBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwcm9wcyA9IHByb3BzLm1hdGNoKCBybm90aHRtbHdoaXRlICk7XG5cdFx0fVxuXG5cdFx0dmFyIHByb3AsXG5cdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0cHJvcCA9IHByb3BzWyBpbmRleCBdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gPSBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9LFxuXG5cdHByZWZpbHRlcnM6IFsgZGVmYXVsdFByZWZpbHRlciBdLFxuXG5cdHByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5kICkge1xuXHRcdGlmICggcHJlcGVuZCApIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5zcGVlZCA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBmbiApIHtcblx0dmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9PT0gXCJvYmplY3RcIiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVlZCApIDoge1xuXHRcdGNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8XG5cdFx0XHRpc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLFxuXHRcdGR1cmF0aW9uOiBzcGVlZCxcblx0XHRlYXNpbmc6IGZuICYmIGVhc2luZyB8fCBlYXNpbmcgJiYgIWlzRnVuY3Rpb24oIGVhc2luZyApICYmIGVhc2luZ1xuXHR9O1xuXG5cdC8vIEdvIHRvIHRoZSBlbmQgc3RhdGUgaWYgZnggYXJlIG9mZlxuXHRpZiAoIGpRdWVyeS5meC5vZmYgKSB7XG5cdFx0b3B0LmR1cmF0aW9uID0gMDtcblxuXHR9IGVsc2Uge1xuXHRcdGlmICggdHlwZW9mIG9wdC5kdXJhdGlvbiAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdGlmICggb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgKSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHNbIG9wdC5kdXJhdGlvbiBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzLl9kZWZhdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIE5vcm1hbGl6ZSBvcHQucXVldWUgLSB0cnVlL3VuZGVmaW5lZC9udWxsIC0+IFwiZnhcIlxuXHRpZiAoIG9wdC5xdWV1ZSA9PSBudWxsIHx8IG9wdC5xdWV1ZSA9PT0gdHJ1ZSApIHtcblx0XHRvcHQucXVldWUgPSBcImZ4XCI7XG5cdH1cblxuXHQvLyBRdWV1ZWluZ1xuXHRvcHQub2xkID0gb3B0LmNvbXBsZXRlO1xuXG5cdG9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggb3B0Lm9sZCApICkge1xuXHRcdFx0b3B0Lm9sZC5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHQucXVldWUgKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1ZXVlICk7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBvcHQ7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZhZGVUbzogZnVuY3Rpb24oIHNwZWVkLCB0bywgZWFzaW5nLCBjYWxsYmFjayApIHtcblxuXHRcdC8vIFNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMFxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggaXNIaWRkZW5XaXRoaW5UcmVlICkuY3NzKCBcIm9wYWNpdHlcIiwgMCApLnNob3coKVxuXG5cdFx0XHQvLyBBbmltYXRlIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWRcblx0XHRcdC5lbmQoKS5hbmltYXRlKCB7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH0sXG5cdGFuaW1hdGU6IGZ1bmN0aW9uKCBwcm9wLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHR2YXIgZW1wdHkgPSBqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcCApLFxuXHRcdFx0b3B0YWxsID0galF1ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApLFxuXHRcdFx0ZG9BbmltYXRpb24gPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBPcGVyYXRlIG9uIGEgY29weSBvZiBwcm9wIHNvIHBlci1wcm9wZXJ0eSBlYXNpbmcgd29uJ3QgYmUgbG9zdFxuXHRcdFx0XHR2YXIgYW5pbSA9IEFuaW1hdGlvbiggdGhpcywgalF1ZXJ5LmV4dGVuZCgge30sIHByb3AgKSwgb3B0YWxsICk7XG5cblx0XHRcdFx0Ly8gRW1wdHkgYW5pbWF0aW9ucywgb3IgZmluaXNoaW5nIHJlc29sdmVzIGltbWVkaWF0ZWx5XG5cdFx0XHRcdGlmICggZW1wdHkgfHwgZGF0YVByaXYuZ2V0KCB0aGlzLCBcImZpbmlzaFwiICkgKSB7XG5cdFx0XHRcdFx0YW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRkb0FuaW1hdGlvbi5maW5pc2ggPSBkb0FuaW1hdGlvbjtcblxuXHRcdHJldHVybiBlbXB0eSB8fCBvcHRhbGwucXVldWUgPT09IGZhbHNlID9cblx0XHRcdHRoaXMuZWFjaCggZG9BbmltYXRpb24gKSA6XG5cdFx0XHR0aGlzLnF1ZXVlKCBvcHRhbGwucXVldWUsIGRvQW5pbWF0aW9uICk7XG5cdH0sXG5cdHN0b3A6IGZ1bmN0aW9uKCB0eXBlLCBjbGVhclF1ZXVlLCBnb3RvRW5kICkge1xuXHRcdHZhciBzdG9wUXVldWUgPSBmdW5jdGlvbiggaG9va3MgKSB7XG5cdFx0XHR2YXIgc3RvcCA9IGhvb2tzLnN0b3A7XG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdHN0b3AoIGdvdG9FbmQgKTtcblx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGdvdG9FbmQgPSBjbGVhclF1ZXVlO1xuXHRcdFx0Y2xlYXJRdWV1ZSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGNsZWFyUXVldWUgKSB7XG5cdFx0XHR0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkZXF1ZXVlID0gdHJ1ZSxcblx0XHRcdFx0aW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArIFwicXVldWVIb29rc1wiLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICk7XG5cblx0XHRcdGlmICggaW5kZXggKSB7XG5cdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgKSB7XG5cdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoIGluZGV4IGluIGRhdGEgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCAmJiBycnVuLnRlc3QoIGluZGV4ICkgKSB7XG5cdFx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJlxuXHRcdFx0XHRcdCggdHlwZSA9PSBudWxsIHx8IHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApICkge1xuXG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggZ290b0VuZCApO1xuXHRcdFx0XHRcdGRlcXVldWUgPSBmYWxzZTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXJ0IHRoZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBmb3JjZWQuXG5cdFx0XHQvLyBUaW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFja3MsIHdoaWNoXG5cdFx0XHQvLyB3aWxsIGRlcXVldWUgYnV0IG9ubHkgaWYgdGhleSB3ZXJlIGdvdG9FbmQuXG5cdFx0XHRpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXHRmaW5pc2g6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdGlmICggdHlwZSAhPT0gZmFsc2UgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGluZGV4LFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICksXG5cdFx0XHRcdHF1ZXVlID0gZGF0YVsgdHlwZSArIFwicXVldWVcIiBdLFxuXHRcdFx0XHRob29rcyA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlSG9va3NcIiBdLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRsZW5ndGggPSBxdWV1ZSA/IHF1ZXVlLmxlbmd0aCA6IDA7XG5cblx0XHRcdC8vIEVuYWJsZSBmaW5pc2hpbmcgZmxhZyBvbiBwcml2YXRlIGRhdGFcblx0XHRcdGRhdGEuZmluaXNoID0gdHJ1ZTtcblxuXHRcdFx0Ly8gRW1wdHkgdGhlIHF1ZXVlIGZpcnN0XG5cdFx0XHRqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIFtdICk7XG5cblx0XHRcdGlmICggaG9va3MgJiYgaG9va3Muc3RvcCApIHtcblx0XHRcdFx0aG9va3Muc3RvcC5jYWxsKCB0aGlzLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhY3RpdmUgYW5pbWF0aW9ucywgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmIHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApIHtcblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYW5pbWF0aW9ucyBpbiB0aGUgb2xkIHF1ZXVlIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0aWYgKCBxdWV1ZVsgaW5kZXggXSAmJiBxdWV1ZVsgaW5kZXggXS5maW5pc2ggKSB7XG5cdFx0XHRcdFx0cXVldWVbIGluZGV4IF0uZmluaXNoLmNhbGwoIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUdXJuIG9mZiBmaW5pc2hpbmcgZmxhZ1xuXHRcdFx0ZGVsZXRlIGRhdGEuZmluaXNoO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcInRvZ2dsZVwiLCBcInNob3dcIiwgXCJoaWRlXCIgXSwgZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXHR2YXIgY3NzRm4gPSBqUXVlcnkuZm5bIG5hbWUgXTtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHNwZWVkID09IG51bGwgfHwgdHlwZW9mIHNwZWVkID09PSBcImJvb2xlYW5cIiA/XG5cdFx0XHRjc3NGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICkgOlxuXHRcdFx0dGhpcy5hbmltYXRlKCBnZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9O1xufSApO1xuXG4vLyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBhbmltYXRpb25zXG5qUXVlcnkuZWFjaCgge1xuXHRzbGlkZURvd246IGdlbkZ4KCBcInNob3dcIiApLFxuXHRzbGlkZVVwOiBnZW5GeCggXCJoaWRlXCIgKSxcblx0c2xpZGVUb2dnbGU6IGdlbkZ4KCBcInRvZ2dsZVwiICksXG5cdGZhZGVJbjogeyBvcGFjaXR5OiBcInNob3dcIiB9LFxuXHRmYWRlT3V0OiB7IG9wYWNpdHk6IFwiaGlkZVwiIH0sXG5cdGZhZGVUb2dnbGU6IHsgb3BhY2l0eTogXCJ0b2dnbGVcIiB9XG59LCBmdW5jdGlvbiggbmFtZSwgcHJvcHMgKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLmFuaW1hdGUoIHByb3BzLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkudGltZXJzID0gW107XG5qUXVlcnkuZngudGljayA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgdGltZXIsXG5cdFx0aSA9IDAsXG5cdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycztcblxuXHRmeE5vdyA9IERhdGUubm93KCk7XG5cblx0Zm9yICggOyBpIDwgdGltZXJzLmxlbmd0aDsgaSsrICkge1xuXHRcdHRpbWVyID0gdGltZXJzWyBpIF07XG5cblx0XHQvLyBSdW4gdGhlIHRpbWVyIGFuZCBzYWZlbHkgcmVtb3ZlIGl0IHdoZW4gZG9uZSAoYWxsb3dpbmcgZm9yIGV4dGVybmFsIHJlbW92YWwpXG5cdFx0aWYgKCAhdGltZXIoKSAmJiB0aW1lcnNbIGkgXSA9PT0gdGltZXIgKSB7XG5cdFx0XHR0aW1lcnMuc3BsaWNlKCBpLS0sIDEgKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoICF0aW1lcnMubGVuZ3RoICkge1xuXHRcdGpRdWVyeS5meC5zdG9wKCk7XG5cdH1cblx0ZnhOb3cgPSB1bmRlZmluZWQ7XG59O1xuXG5qUXVlcnkuZngudGltZXIgPSBmdW5jdGlvbiggdGltZXIgKSB7XG5cdGpRdWVyeS50aW1lcnMucHVzaCggdGltZXIgKTtcblx0alF1ZXJ5LmZ4LnN0YXJ0KCk7XG59O1xuXG5qUXVlcnkuZnguaW50ZXJ2YWwgPSAxMztcbmpRdWVyeS5meC5zdGFydCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aW5Qcm9ncmVzcyA9IHRydWU7XG5cdHNjaGVkdWxlKCk7XG59O1xuXG5qUXVlcnkuZnguc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRpblByb2dyZXNzID0gbnVsbDtcbn07XG5cbmpRdWVyeS5meC5zcGVlZHMgPSB7XG5cdHNsb3c6IDYwMCxcblx0ZmFzdDogMjAwLFxuXG5cdC8vIERlZmF1bHQgc3BlZWRcblx0X2RlZmF1bHQ6IDQwMFxufTtcblxuXG4vLyBCYXNlZCBvZmYgb2YgdGhlIHBsdWdpbiBieSBDbGludCBIZWxmZXJzLCB3aXRoIHBlcm1pc3Npb24uXG5qUXVlcnkuZm4uZGVsYXkgPSBmdW5jdGlvbiggdGltZSwgdHlwZSApIHtcblx0dGltZSA9IGpRdWVyeS5meCA/IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDogdGltZTtcblx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlLCBmdW5jdGlvbiggbmV4dCwgaG9va3MgKSB7XG5cdFx0dmFyIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCggbmV4dCwgdGltZSApO1xuXHRcdGhvb2tzLnN0b3AgPSBmdW5jdGlvbigpIHtcblx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXQgKTtcblx0XHR9O1xuXHR9ICk7XG59O1xuXG5cbiggZnVuY3Rpb24oKSB7XG5cdHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApLFxuXHRcdHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwic2VsZWN0XCIgKSxcblx0XHRvcHQgPSBzZWxlY3QuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib3B0aW9uXCIgKSApO1xuXG5cdGlucHV0LnR5cGUgPSBcImNoZWNrYm94XCI7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMyBvbmx5XG5cdC8vIERlZmF1bHQgdmFsdWUgZm9yIGEgY2hlY2tib3ggc2hvdWxkIGJlIFwib25cIlxuXHRzdXBwb3J0LmNoZWNrT24gPSBpbnB1dC52YWx1ZSAhPT0gXCJcIjtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gTXVzdCBhY2Nlc3Mgc2VsZWN0ZWRJbmRleCB0byBtYWtlIGRlZmF1bHQgb3B0aW9ucyBzZWxlY3Rcblx0c3VwcG9ydC5vcHRTZWxlY3RlZCA9IG9wdC5zZWxlY3RlZDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gQW4gaW5wdXQgbG9zZXMgaXRzIHZhbHVlIGFmdGVyIGJlY29taW5nIGEgcmFkaW9cblx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0aW5wdXQudmFsdWUgPSBcInRcIjtcblx0aW5wdXQudHlwZSA9IFwicmFkaW9cIjtcblx0c3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFsdWUgPT09IFwidFwiO1xufSApKCk7XG5cblxudmFyIGJvb2xIb29rLFxuXHRhdHRySGFuZGxlID0galF1ZXJ5LmV4cHIuYXR0ckhhbmRsZTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhdHRyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LmF0dHIsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9LFxuXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBuYW1lICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIHRoaXMsIG5hbWUgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRhdHRyOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGYWxsYmFjayB0byBwcm9wIHdoZW4gYXR0cmlidXRlcyBhcmUgbm90IHN1cHBvcnRlZFxuXHRcdGlmICggdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlID09PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lLCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdC8vIEF0dHJpYnV0ZSBob29rcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgbG93ZXJjYXNlIHZlcnNpb25cblx0XHQvLyBHcmFiIG5lY2Vzc2FyeSBob29rIGlmIG9uZSBpcyBkZWZpbmVkXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5hdHRySG9va3NbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8XG5cdFx0XHRcdCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC50ZXN0KCBuYW1lICkgPyBib29sSG9vayA6IHVuZGVmaW5lZCApO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggdmFsdWUgPT09IG51bGwgKSB7XG5cdFx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVlICsgXCJcIiApO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdC8vIE5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkXG5cdFx0cmV0dXJuIHJldCA9PSBudWxsID8gdW5kZWZpbmVkIDogcmV0O1xuXHR9LFxuXG5cdGF0dHJIb29rczoge1xuXHRcdHR5cGU6IHtcblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICFzdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09IFwicmFkaW9cIiAmJlxuXHRcdFx0XHRcdG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSApIHtcblx0XHRcdFx0XHR2YXIgdmFsID0gZWxlbS52YWx1ZTtcblx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIHZhbHVlICk7XG5cdFx0XHRcdFx0aWYgKCB2YWwgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnZhbHVlID0gdmFsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdHZhciBuYW1lLFxuXHRcdFx0aSA9IDAsXG5cblx0XHRcdC8vIEF0dHJpYnV0ZSBuYW1lcyBjYW4gY29udGFpbiBub24tSFRNTCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnNcblx0XHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2F0dHJpYnV0ZXMtMlxuXHRcdFx0YXR0ck5hbWVzID0gdmFsdWUgJiYgdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblxuXHRcdGlmICggYXR0ck5hbWVzICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHR3aGlsZSAoICggbmFtZSA9IGF0dHJOYW1lc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIG5hbWUgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSG9va3MgZm9yIGJvb2xlYW4gYXR0cmlidXRlc1xuYm9vbEhvb2sgPSB7XG5cdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkge1xuXHRcdGlmICggdmFsdWUgPT09IGZhbHNlICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgYm9vbGVhbiBhdHRyaWJ1dGVzIHdoZW4gc2V0IHRvIGZhbHNlXG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgbmFtZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gbmFtZTtcblx0fVxufTtcblxualF1ZXJ5LmVhY2goIGpRdWVyeS5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKCAvXFx3Ky9nICksIGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0dmFyIGdldHRlciA9IGF0dHJIYW5kbGVbIG5hbWUgXSB8fCBqUXVlcnkuZmluZC5hdHRyO1xuXG5cdGF0dHJIYW5kbGVbIG5hbWUgXSA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgcmV0LCBoYW5kbGUsXG5cdFx0XHRsb3dlcmNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cblx0XHRcdC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3AgYnkgdGVtcG9yYXJpbHkgcmVtb3ZpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIHRoZSBnZXR0ZXJcblx0XHRcdGhhbmRsZSA9IGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXTtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IHJldDtcblx0XHRcdHJldCA9IGdldHRlciggZWxlbSwgbmFtZSwgaXNYTUwgKSAhPSBudWxsID9cblx0XHRcdFx0bG93ZXJjYXNlTmFtZSA6XG5cdFx0XHRcdG51bGw7XG5cdFx0XHRhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSBoYW5kbGU7XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH07XG59ICk7XG5cblxuXG5cbnZhciByZm9jdXNhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmNsaWNrYWJsZSA9IC9eKD86YXxhcmVhKSQvaTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9LFxuXG5cdHJlbW92ZVByb3A6IGZ1bmN0aW9uKCBuYW1lICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0ZGVsZXRlIHRoaXNbIGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZSBdO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgcHJvcGVydGllcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXG5cdFx0XHQvLyBGaXggbmFtZSBhbmQgYXR0YWNoIGhvb2tzXG5cdFx0XHRuYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lO1xuXHRcdFx0aG9va3MgPSBqUXVlcnkucHJvcEhvb2tzWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICggZWxlbVsgbmFtZSBdID0gdmFsdWUgKTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZWxlbVsgbmFtZSBdO1xuXHR9LFxuXG5cdHByb3BIb29rczoge1xuXHRcdHRhYkluZGV4OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0XHRcdFx0Ly8gZWxlbS50YWJJbmRleCBkb2Vzbid0IGFsd2F5cyByZXR1cm4gdGhlXG5cdFx0XHRcdC8vIGNvcnJlY3QgdmFsdWUgd2hlbiBpdCBoYXNuJ3QgYmVlbiBleHBsaWNpdGx5IHNldFxuXHRcdFx0XHQvLyBVc2UgcHJvcGVyIGF0dHJpYnV0ZSByZXRyaWV2YWwgKHRyYWMtMTIwNzIpXG5cdFx0XHRcdHZhciB0YWJpbmRleCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidGFiaW5kZXhcIiApO1xuXG5cdFx0XHRcdGlmICggdGFiaW5kZXggKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KCB0YWJpbmRleCwgMTAgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRyZm9jdXNhYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fFxuXHRcdFx0XHRcdHJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmXG5cdFx0XHRcdFx0ZWxlbS5ocmVmXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRwcm9wRml4OiB7XG5cdFx0XCJmb3JcIjogXCJodG1sRm9yXCIsXG5cdFx0XCJjbGFzc1wiOiBcImNsYXNzTmFtZVwiXG5cdH1cbn0gKTtcblxuLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG4vLyBBY2Nlc3NpbmcgdGhlIHNlbGVjdGVkSW5kZXggcHJvcGVydHlcbi8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byByZXNwZWN0IHNldHRpbmcgc2VsZWN0ZWRcbi8vIG9uIHRoZSBvcHRpb25cbi8vIFRoZSBnZXR0ZXIgZW5zdXJlcyBhIGRlZmF1bHQgb3B0aW9uIGlzIHNlbGVjdGVkXG4vLyB3aGVuIGluIGFuIG9wdGdyb3VwXG4vLyBlc2xpbnQgcnVsZSBcIm5vLXVudXNlZC1leHByZXNzaW9uc1wiIGlzIGRpc2FibGVkIGZvciB0aGlzIGNvZGVcbi8vIHNpbmNlIGl0IGNvbnNpZGVycyBzdWNoIGFjY2Vzc2lvbnMgbm9vcFxuaWYgKCAhc3VwcG9ydC5vcHRTZWxlY3RlZCApIHtcblx0alF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCAmJiBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdHBhcmVudC5zZWxlY3RlZEluZGV4O1xuXG5cdFx0XHRcdGlmICggcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxualF1ZXJ5LmVhY2goIFtcblx0XCJ0YWJJbmRleFwiLFxuXHRcInJlYWRPbmx5XCIsXG5cdFwibWF4TGVuZ3RoXCIsXG5cdFwiY2VsbFNwYWNpbmdcIixcblx0XCJjZWxsUGFkZGluZ1wiLFxuXHRcInJvd1NwYW5cIixcblx0XCJjb2xTcGFuXCIsXG5cdFwidXNlTWFwXCIsXG5cdFwiZnJhbWVCb3JkZXJcIixcblx0XCJjb250ZW50RWRpdGFibGVcIlxuXSwgZnVuY3Rpb24oKSB7XG5cdGpRdWVyeS5wcm9wRml4WyB0aGlzLnRvTG93ZXJDYXNlKCkgXSA9IHRoaXM7XG59ICk7XG5cblxuXG5cblx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2UgYWNjb3JkaW5nIHRvIEhUTUwgc3BlY1xuXHQvLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLWFzY2lpLXdoaXRlc3BhY2Vcblx0ZnVuY3Rpb24gc3RyaXBBbmRDb2xsYXBzZSggdmFsdWUgKSB7XG5cdFx0dmFyIHRva2VucyA9IHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdFx0cmV0dXJuIHRva2Vucy5qb2luKCBcIiBcIiApO1xuXHR9XG5cblxuZnVuY3Rpb24gZ2V0Q2xhc3MoIGVsZW0gKSB7XG5cdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSAmJiBlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHwgXCJcIjtcbn1cblxuZnVuY3Rpb24gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICkge1xuXHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHR9XG5cdHJldHVybiBbXTtcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc05hbWVzLCBjdXIsIGN1clZhbHVlLCBjbGFzc05hbWUsIGksIGZpbmFsVmFsdWU7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuYWRkQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGNsYXNzTmFtZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggY2xhc3NOYW1lcy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXHRcdFx0XHRjdXIgPSB0aGlzLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGNsYXNzTmFtZXMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdFx0XHRjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBpIF07XG5cdFx0XHRcdFx0XHRpZiAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXNzTmFtZSArIFwiIFwiICkgPCAwICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgKz0gY2xhc3NOYW1lICsgXCIgXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy5cblx0XHRcdFx0XHRmaW5hbFZhbHVlID0gc3RyaXBBbmRDb2xsYXBzZSggY3VyICk7XG5cdFx0XHRcdFx0aWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHtcblx0XHRcdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsIGZpbmFsVmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc05hbWVzLCBjdXIsIGN1clZhbHVlLCBjbGFzc05hbWUsIGksIGZpbmFsVmFsdWU7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hdHRyKCBcImNsYXNzXCIsIFwiXCIgKTtcblx0XHR9XG5cblx0XHRjbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzTmFtZXMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIHRoaXMgKTtcblxuXHRcdFx0XHQvLyBUaGlzIGV4cHJlc3Npb24gaXMgaGVyZSBmb3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0eSAoc2VlIGFkZENsYXNzKVxuXHRcdFx0XHRjdXIgPSB0aGlzLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGNsYXNzTmFtZXMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdFx0XHRjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBpIF07XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSAqYWxsKiBpbnN0YW5jZXNcblx0XHRcdFx0XHRcdHdoaWxlICggY3VyLmluZGV4T2YoIFwiIFwiICsgY2xhc3NOYW1lICsgXCIgXCIgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgPSBjdXIucmVwbGFjZSggXCIgXCIgKyBjbGFzc05hbWUgKyBcIiBcIiwgXCIgXCIgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkge1xuXHRcdHZhciBjbGFzc05hbWVzLCBjbGFzc05hbWUsIGksIHNlbGYsXG5cdFx0XHR0eXBlID0gdHlwZW9mIHZhbHVlLFxuXHRcdFx0aXNWYWxpZFZhbHVlID0gdHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKFxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIHRoaXMsIGksIGdldENsYXNzKCB0aGlzICksIHN0YXRlVmFsICksXG5cdFx0XHRcdFx0c3RhdGVWYWxcblx0XHRcdFx0KTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRpZiAoIHR5cGVvZiBzdGF0ZVZhbCA9PT0gXCJib29sZWFuXCIgJiYgaXNWYWxpZFZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlVmFsID8gdGhpcy5hZGRDbGFzcyggdmFsdWUgKSA6IHRoaXMucmVtb3ZlQ2xhc3MoIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NOYW1lcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGlzVmFsaWRWYWx1ZSApIHtcblxuXHRcdFx0XHQvLyBUb2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lc1xuXHRcdFx0XHRzZWxmID0galF1ZXJ5KCB0aGlzICk7XG5cblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBjbGFzc05hbWVzLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHRcdGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkgXTtcblxuXHRcdFx0XHRcdC8vIENoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBzcGFjZSBzZXBhcmF0ZWQgbGlzdFxuXHRcdFx0XHRcdGlmICggc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICkgKSB7XG5cdFx0XHRcdFx0XHRzZWxmLnJlbW92ZUNsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2VsZi5hZGRDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdC8vIFRvZ2dsZSB3aG9sZSBjbGFzcyBuYW1lXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0XHRjbGFzc05hbWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXHRcdFx0XHRpZiAoIGNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGNsYXNzTmFtZSBpZiBzZXRcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiLCBjbGFzc05hbWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoZSBlbGVtZW50IGhhcyBhIGNsYXNzIG5hbWUgb3IgaWYgd2UncmUgcGFzc2VkIGBmYWxzZWAsXG5cdFx0XHRcdC8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBicmluZyBiYWNrIHdoYXRldmVyIHdhcyBwcmV2aW91c2x5IHNhdmVkIChpZiBhbnl0aGluZyksXG5cdFx0XHRcdC8vIGZhbGxpbmcgYmFjayB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vdGhpbmcgd2FzIHN0b3JlZC5cblx0XHRcdFx0aWYgKCB0aGlzLnNldEF0dHJpYnV0ZSApIHtcblx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lIHx8IHZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRcdFx0XHRcdFwiXCIgOlxuXHRcdFx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiICkgfHwgXCJcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0aGFzQ2xhc3M6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgY2xhc3NOYW1lLCBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRjbGFzc05hbWUgPSBcIiBcIiArIHNlbGVjdG9yICsgXCIgXCI7XG5cdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdCggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBnZXRDbGFzcyggZWxlbSApICkgKyBcIiBcIiApLmluZGV4T2YoIGNsYXNzTmFtZSApID4gLTEgKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufSApO1xuXG5cblxuXG52YXIgcnJldHVybiA9IC9cXHIvZztcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHR2YWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgaG9va3MsIHJldCwgdmFsdWVJc0Z1bmN0aW9uLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXTtcblxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyBlbGVtLnR5cGUgXSB8fFxuXHRcdFx0XHRcdGpRdWVyeS52YWxIb29rc1sgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07XG5cblx0XHRcdFx0aWYgKCBob29rcyAmJlxuXHRcdFx0XHRcdFwiZ2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0XHQoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgXCJ2YWx1ZVwiICkgKSAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXQgPSBlbGVtLnZhbHVlO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSBtb3N0IGNvbW1vbiBzdHJpbmcgY2FzZXNcblx0XHRcdFx0aWYgKCB0eXBlb2YgcmV0ID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0XHRcdHJldHVybiByZXQucmVwbGFjZSggcnJldHVybiwgXCJcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSGFuZGxlIGNhc2VzIHdoZXJlIHZhbHVlIGlzIG51bGwvdW5kZWYgb3IgbnVtYmVyXG5cdFx0XHRcdHJldHVybiByZXQgPT0gbnVsbCA/IFwiXCIgOiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YWx1ZUlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHR2YXIgdmFsO1xuXG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlLmNhbGwoIHRoaXMsIGksIGpRdWVyeSggdGhpcyApLnZhbCgpICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVHJlYXQgbnVsbC91bmRlZmluZWQgYXMgXCJcIjsgY29udmVydCBudW1iZXJzIHRvIHN0cmluZ1xuXHRcdFx0aWYgKCB2YWwgPT0gbnVsbCApIHtcblx0XHRcdFx0dmFsID0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggdHlwZW9mIHZhbCA9PT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0dmFsICs9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIEFycmF5LmlzQXJyYXkoIHZhbCApICkge1xuXHRcdFx0XHR2YWwgPSBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSArIFwiXCI7XG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblxuXHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIHRoaXMudHlwZSBdIHx8IGpRdWVyeS52YWxIb29rc1sgdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07XG5cblx0XHRcdC8vIElmIHNldCByZXR1cm5zIHVuZGVmaW5lZCwgZmFsbCBiYWNrIHRvIG5vcm1hbCBzZXR0aW5nXG5cdFx0XHRpZiAoICFob29rcyB8fCAhKCBcInNldFwiIGluIGhvb2tzICkgfHwgaG9va3Muc2V0KCB0aGlzLCB2YWwsIFwidmFsdWVcIiApID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHRoaXMudmFsdWUgPSB2YWw7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0dmFsSG9va3M6IHtcblx0XHRvcHRpb246IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdFx0dmFyIHZhbCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidmFsdWVcIiApO1xuXHRcdFx0XHRyZXR1cm4gdmFsICE9IG51bGwgP1xuXHRcdFx0XHRcdHZhbCA6XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTEwIC0gMTEgb25seVxuXHRcdFx0XHRcdC8vIG9wdGlvbi50ZXh0IHRocm93cyBleGNlcHRpb25zICh0cmFjLTE0Njg2LCB0cmFjLTE0ODU4KVxuXHRcdFx0XHRcdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLXdoaXRlc3BhY2Vcblx0XHRcdFx0XHRzdHJpcEFuZENvbGxhcHNlKCBqUXVlcnkudGV4dCggZWxlbSApICk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRzZWxlY3Q6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciB2YWx1ZSwgb3B0aW9uLCBpLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0aW5kZXggPSBlbGVtLnNlbGVjdGVkSW5kZXgsXG5cdFx0XHRcdFx0b25lID0gZWxlbS50eXBlID09PSBcInNlbGVjdC1vbmVcIixcblx0XHRcdFx0XHR2YWx1ZXMgPSBvbmUgPyBudWxsIDogW10sXG5cdFx0XHRcdFx0bWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0aWYgKCBpbmRleCA8IDAgKSB7XG5cdFx0XHRcdFx0aSA9IG1heDtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGkgPSBvbmUgPyBpbmRleCA6IDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zXG5cdFx0XHRcdGZvciAoIDsgaSA8IG1heDsgaSsrICkge1xuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0Ly8gSUU4LTkgZG9lc24ndCB1cGRhdGUgc2VsZWN0ZWQgYWZ0ZXIgZm9ybSByZXNldCAodHJhYy0yNTUxKVxuXHRcdFx0XHRcdGlmICggKCBvcHRpb24uc2VsZWN0ZWQgfHwgaSA9PT0gaW5kZXggKSAmJlxuXG5cdFx0XHRcdFx0XHRcdC8vIERvbid0IHJldHVybiBvcHRpb25zIHRoYXQgYXJlIGRpc2FibGVkIG9yIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXBcblx0XHRcdFx0XHRcdFx0IW9wdGlvbi5kaXNhYmxlZCAmJlxuXHRcdFx0XHRcdFx0XHQoICFvcHRpb24ucGFyZW50Tm9kZS5kaXNhYmxlZCB8fFxuXHRcdFx0XHRcdFx0XHRcdCFub2RlTmFtZSggb3B0aW9uLnBhcmVudE5vZGUsIFwib3B0Z3JvdXBcIiApICkgKSB7XG5cblx0XHRcdFx0XHRcdC8vIEdldCB0aGUgc3BlY2lmaWMgdmFsdWUgZm9yIHRoZSBvcHRpb25cblx0XHRcdFx0XHRcdHZhbHVlID0galF1ZXJ5KCBvcHRpb24gKS52YWwoKTtcblxuXHRcdFx0XHRcdFx0Ly8gV2UgZG9uJ3QgbmVlZCBhbiBhcnJheSBmb3Igb25lIHNlbGVjdHNcblx0XHRcdFx0XHRcdGlmICggb25lICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIE11bHRpLVNlbGVjdHMgcmV0dXJuIGFuIGFycmF5XG5cdFx0XHRcdFx0XHR2YWx1ZXMucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWVzO1xuXHRcdFx0fSxcblxuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdHZhciBvcHRpb25TZXQsIG9wdGlvbixcblx0XHRcdFx0XHRvcHRpb25zID0gZWxlbS5vcHRpb25zLFxuXHRcdFx0XHRcdHZhbHVlcyA9IGpRdWVyeS5tYWtlQXJyYXkoIHZhbHVlICksXG5cdFx0XHRcdFx0aSA9IG9wdGlvbnMubGVuZ3RoO1xuXG5cdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcblxuXHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbmQtYXNzaWduICovXG5cblx0XHRcdFx0XHRpZiAoIG9wdGlvbi5zZWxlY3RlZCA9XG5cdFx0XHRcdFx0XHRqUXVlcnkuaW5BcnJheSggalF1ZXJ5LnZhbEhvb2tzLm9wdGlvbi5nZXQoIG9wdGlvbiApLCB2YWx1ZXMgKSA+IC0xXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRvcHRpb25TZXQgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tY29uZC1hc3NpZ24gKi9cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEZvcmNlIGJyb3dzZXJzIHRvIGJlaGF2ZSBjb25zaXN0ZW50bHkgd2hlbiBub24tbWF0Y2hpbmcgdmFsdWUgaXMgc2V0XG5cdFx0XHRcdGlmICggIW9wdGlvblNldCApIHtcblx0XHRcdFx0XHRlbGVtLnNlbGVjdGVkSW5kZXggPSAtMTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdmFsdWVzO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBSYWRpb3MgYW5kIGNoZWNrYm94ZXMgZ2V0dGVyL3NldHRlclxualF1ZXJ5LmVhY2goIFsgXCJyYWRpb1wiLCBcImNoZWNrYm94XCIgXSwgZnVuY3Rpb24oKSB7XG5cdGpRdWVyeS52YWxIb29rc1sgdGhpcyBdID0ge1xuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLmNoZWNrZWQgPSBqUXVlcnkuaW5BcnJheSggalF1ZXJ5KCBlbGVtICkudmFsKCksIHZhbHVlICkgPiAtMSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0aWYgKCAhc3VwcG9ydC5jaGVja09uICkge1xuXHRcdGpRdWVyeS52YWxIb29rc1sgdGhpcyBdLmdldCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBcInZhbHVlXCIgKSA9PT0gbnVsbCA/IFwib25cIiA6IGVsZW0udmFsdWU7XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG4vLyBSZXR1cm4galF1ZXJ5IGZvciBhdHRyaWJ1dGVzLW9ubHkgaW5jbHVzaW9uXG52YXIgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG5cbnZhciBub25jZSA9IHsgZ3VpZDogRGF0ZS5ub3coKSB9O1xuXG52YXIgcnF1ZXJ5ID0gKCAvXFw/LyApO1xuXG5cblxuLy8gQ3Jvc3MtYnJvd3NlciB4bWwgcGFyc2luZ1xualF1ZXJ5LnBhcnNlWE1MID0gZnVuY3Rpb24oIGRhdGEgKSB7XG5cdHZhciB4bWwsIHBhcnNlckVycm9yRWxlbTtcblx0aWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIElFIHRocm93cyBvbiBwYXJzZUZyb21TdHJpbmcgd2l0aCBpbnZhbGlkIGlucHV0LlxuXHR0cnkge1xuXHRcdHhtbCA9ICggbmV3IHdpbmRvdy5ET01QYXJzZXIoKSApLnBhcnNlRnJvbVN0cmluZyggZGF0YSwgXCJ0ZXh0L3htbFwiICk7XG5cdH0gY2F0Y2ggKCBlICkge31cblxuXHRwYXJzZXJFcnJvckVsZW0gPSB4bWwgJiYgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcInBhcnNlcmVycm9yXCIgKVsgMCBdO1xuXHRpZiAoICF4bWwgfHwgcGFyc2VyRXJyb3JFbGVtICkge1xuXHRcdGpRdWVyeS5lcnJvciggXCJJbnZhbGlkIFhNTDogXCIgKyAoXG5cdFx0XHRwYXJzZXJFcnJvckVsZW0gP1xuXHRcdFx0XHRqUXVlcnkubWFwKCBwYXJzZXJFcnJvckVsZW0uY2hpbGROb2RlcywgZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0XHRcdHJldHVybiBlbC50ZXh0Q29udGVudDtcblx0XHRcdFx0fSApLmpvaW4oIFwiXFxuXCIgKSA6XG5cdFx0XHRcdGRhdGFcblx0XHQpICk7XG5cdH1cblx0cmV0dXJuIHhtbDtcbn07XG5cblxudmFyIHJmb2N1c01vcnBoID0gL14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLFxuXHRzdG9wUHJvcGFnYXRpb25DYWxsYmFjayA9IGZ1bmN0aW9uKCBlICkge1xuXHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdH07XG5cbmpRdWVyeS5leHRlbmQoIGpRdWVyeS5ldmVudCwge1xuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCBldmVudCwgZGF0YSwgZWxlbSwgb25seUhhbmRsZXJzICkge1xuXG5cdFx0dmFyIGksIGN1ciwgdG1wLCBidWJibGVUeXBlLCBvbnR5cGUsIGhhbmRsZSwgc3BlY2lhbCwgbGFzdEVsZW1lbnQsXG5cdFx0XHRldmVudFBhdGggPSBbIGVsZW0gfHwgZG9jdW1lbnQgXSxcblx0XHRcdHR5cGUgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwidHlwZVwiICkgPyBldmVudC50eXBlIDogZXZlbnQsXG5cdFx0XHRuYW1lc3BhY2VzID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcIm5hbWVzcGFjZVwiICkgPyBldmVudC5uYW1lc3BhY2Uuc3BsaXQoIFwiLlwiICkgOiBbXTtcblxuXHRcdGN1ciA9IGxhc3RFbGVtZW50ID0gdG1wID0gZWxlbSA9IGVsZW0gfHwgZG9jdW1lbnQ7XG5cblx0XHQvLyBEb24ndCBkbyBldmVudHMgb24gdGV4dCBhbmQgY29tbWVudCBub2Rlc1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGZvY3VzL2JsdXIgbW9ycGhzIHRvIGZvY3VzaW4vb3V0OyBlbnN1cmUgd2UncmUgbm90IGZpcmluZyB0aGVtIHJpZ2h0IG5vd1xuXHRcdGlmICggcmZvY3VzTW9ycGgudGVzdCggdHlwZSArIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIHR5cGUuaW5kZXhPZiggXCIuXCIgKSA+IC0xICkge1xuXG5cdFx0XHQvLyBOYW1lc3BhY2VkIHRyaWdnZXI7IGNyZWF0ZSBhIHJlZ2V4cCB0byBtYXRjaCBldmVudCB0eXBlIGluIGhhbmRsZSgpXG5cdFx0XHRuYW1lc3BhY2VzID0gdHlwZS5zcGxpdCggXCIuXCIgKTtcblx0XHRcdHR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7XG5cdFx0XHRuYW1lc3BhY2VzLnNvcnQoKTtcblx0XHR9XG5cdFx0b250eXBlID0gdHlwZS5pbmRleE9mKCBcIjpcIiApIDwgMCAmJiBcIm9uXCIgKyB0eXBlO1xuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGEgalF1ZXJ5LkV2ZW50IG9iamVjdCwgT2JqZWN0LCBvciBqdXN0IGFuIGV2ZW50IHR5cGUgc3RyaW5nXG5cdFx0ZXZlbnQgPSBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRldmVudCA6XG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCB0eXBlb2YgZXZlbnQgPT09IFwib2JqZWN0XCIgJiYgZXZlbnQgKTtcblxuXHRcdC8vIFRyaWdnZXIgYml0bWFzazogJiAxIGZvciBuYXRpdmUgaGFuZGxlcnM7ICYgMiBmb3IgalF1ZXJ5IChhbHdheXMgdHJ1ZSlcblx0XHRldmVudC5pc1RyaWdnZXIgPSBvbmx5SGFuZGxlcnMgPyAyIDogMztcblx0XHRldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiICk7XG5cdFx0ZXZlbnQucm5hbWVzcGFjZSA9IGV2ZW50Lm5hbWVzcGFjZSA/XG5cdFx0XHRuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKCBcIlxcXFwuKD86LipcXFxcLnwpXCIgKSArIFwiKFxcXFwufCQpXCIgKSA6XG5cdFx0XHRudWxsO1xuXG5cdFx0Ly8gQ2xlYW4gdXAgdGhlIGV2ZW50IGluIGNhc2UgaXQgaXMgYmVpbmcgcmV1c2VkXG5cdFx0ZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVkO1xuXHRcdGlmICggIWV2ZW50LnRhcmdldCApIHtcblx0XHRcdGV2ZW50LnRhcmdldCA9IGVsZW07XG5cdFx0fVxuXG5cdFx0Ly8gQ2xvbmUgYW55IGluY29taW5nIGRhdGEgYW5kIHByZXBlbmQgdGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxlciBhcmcgbGlzdFxuXHRcdGRhdGEgPSBkYXRhID09IG51bGwgP1xuXHRcdFx0WyBldmVudCBdIDpcblx0XHRcdGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEsIFsgZXZlbnQgXSApO1xuXG5cdFx0Ly8gQWxsb3cgc3BlY2lhbCBldmVudHMgdG8gZHJhdyBvdXRzaWRlIHRoZSBsaW5lc1xuXHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiBzcGVjaWFsLnRyaWdnZXIgJiYgc3BlY2lhbC50cmlnZ2VyLmFwcGx5KCBlbGVtLCBkYXRhICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBldmVudCBwcm9wYWdhdGlvbiBwYXRoIGluIGFkdmFuY2UsIHBlciBXM0MgZXZlbnRzIHNwZWMgKHRyYWMtOTk1MSlcblx0XHQvLyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1bWVudCB2YXIgKHRyYWMtOTcyNClcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdGJ1YmJsZVR5cGUgPSBzcGVjaWFsLmRlbGVnYXRlVHlwZSB8fCB0eXBlO1xuXHRcdFx0aWYgKCAhcmZvY3VzTW9ycGgudGVzdCggYnViYmxlVHlwZSArIHR5cGUgKSApIHtcblx0XHRcdFx0Y3VyID0gY3VyLnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKCA7IGN1cjsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0dG1wID0gY3VyO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPbmx5IGFkZCB3aW5kb3cgaWYgd2UgZ290IHRvIGRvY3VtZW50IChlLmcuLCBub3QgcGxhaW4gb2JqIG9yIGRldGFjaGVkIERPTSlcblx0XHRcdGlmICggdG1wID09PSAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCApICkge1xuXHRcdFx0XHRldmVudFBhdGgucHVzaCggdG1wLmRlZmF1bHRWaWV3IHx8IHRtcC5wYXJlbnRXaW5kb3cgfHwgd2luZG93ICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmlyZSBoYW5kbGVycyBvbiB0aGUgZXZlbnQgcGF0aFxuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBjdXIgPSBldmVudFBhdGhbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRsYXN0RWxlbWVudCA9IGN1cjtcblx0XHRcdGV2ZW50LnR5cGUgPSBpID4gMSA/XG5cdFx0XHRcdGJ1YmJsZVR5cGUgOlxuXHRcdFx0XHRzcGVjaWFsLmJpbmRUeXBlIHx8IHR5cGU7XG5cblx0XHRcdC8vIGpRdWVyeSBoYW5kbGVyXG5cdFx0XHRoYW5kbGUgPSAoIGRhdGFQcml2LmdldCggY3VyLCBcImV2ZW50c1wiICkgfHwgT2JqZWN0LmNyZWF0ZSggbnVsbCApIClbIGV2ZW50LnR5cGUgXSAmJlxuXHRcdFx0XHRkYXRhUHJpdi5nZXQoIGN1ciwgXCJoYW5kbGVcIiApO1xuXHRcdFx0aWYgKCBoYW5kbGUgKSB7XG5cdFx0XHRcdGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE5hdGl2ZSBoYW5kbGVyXG5cdFx0XHRoYW5kbGUgPSBvbnR5cGUgJiYgY3VyWyBvbnR5cGUgXTtcblx0XHRcdGlmICggaGFuZGxlICYmIGhhbmRsZS5hcHBseSAmJiBhY2NlcHREYXRhKCBjdXIgKSApIHtcblx0XHRcdFx0ZXZlbnQucmVzdWx0ID0gaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZXZlbnQudHlwZSA9IHR5cGU7XG5cblx0XHQvLyBJZiBub2JvZHkgcHJldmVudGVkIHRoZSBkZWZhdWx0IGFjdGlvbiwgZG8gaXQgbm93XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmICFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHtcblxuXHRcdFx0aWYgKCAoICFzcGVjaWFsLl9kZWZhdWx0IHx8XG5cdFx0XHRcdHNwZWNpYWwuX2RlZmF1bHQuYXBwbHkoIGV2ZW50UGF0aC5wb3AoKSwgZGF0YSApID09PSBmYWxzZSApICYmXG5cdFx0XHRcdGFjY2VwdERhdGEoIGVsZW0gKSApIHtcblxuXHRcdFx0XHQvLyBDYWxsIGEgbmF0aXZlIERPTSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGV2ZW50LlxuXHRcdFx0XHQvLyBEb24ndCBkbyBkZWZhdWx0IGFjdGlvbnMgb24gd2luZG93LCB0aGF0J3Mgd2hlcmUgZ2xvYmFsIHZhcmlhYmxlcyBiZSAodHJhYy02MTcwKVxuXHRcdFx0XHRpZiAoIG9udHlwZSAmJiBpc0Z1bmN0aW9uKCBlbGVtWyB0eXBlIF0gKSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvbid0IHJlLXRyaWdnZXIgYW4gb25GT08gZXZlbnQgd2hlbiB3ZSBjYWxsIGl0cyBGT08oKSBtZXRob2Rcblx0XHRcdFx0XHR0bXAgPSBlbGVtWyBvbnR5cGUgXTtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVudCwgc2luY2Ugd2UgYWxyZWFkeSBidWJibGVkIGl0IGFib3ZlXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5cGU7XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW1bIHR5cGUgXSgpO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IHRtcDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdC8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2ZW50IHRvIHNpbXVsYXRlIGEgZGlmZmVyZW50IG9uZVxuXHQvLyBVc2VkIG9ubHkgZm9yIGBmb2N1cyhpbiB8IG91dClgIGV2ZW50c1xuXHRzaW11bGF0ZTogZnVuY3Rpb24oIHR5cGUsIGVsZW0sIGV2ZW50ICkge1xuXHRcdHZhciBlID0galF1ZXJ5LmV4dGVuZChcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoKSxcblx0XHRcdGV2ZW50LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRpc1NpbXVsYXRlZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApO1xuXHR9XG5cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTtcblx0XHR9ICk7XG5cdH0sXG5cdHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXTtcblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIGVsZW0sIHRydWUgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG52YXJcblx0cmJyYWNrZXQgPSAvXFxbXFxdJC8sXG5cdHJDUkxGID0gL1xccj9cXG4vZyxcblx0cnN1Ym1pdHRlclR5cGVzID0gL14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLFxuXHRyc3VibWl0dGFibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7XG5cbmZ1bmN0aW9uIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIG9iaiwgdHJhZGl0aW9uYWwsIGFkZCApIHtcblx0dmFyIG5hbWU7XG5cblx0aWYgKCBBcnJheS5pc0FycmF5KCBvYmogKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBhcnJheSBpdGVtLlxuXHRcdGpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9uKCBpLCB2ICkge1xuXHRcdFx0aWYgKCB0cmFkaXRpb25hbCB8fCByYnJhY2tldC50ZXN0KCBwcmVmaXggKSApIHtcblxuXHRcdFx0XHQvLyBUcmVhdCBlYWNoIGFycmF5IGl0ZW0gYXMgYSBzY2FsYXIuXG5cdFx0XHRcdGFkZCggcHJlZml4LCB2ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gSXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzIG51bWVyaWMgaW5kZXguXG5cdFx0XHRcdGJ1aWxkUGFyYW1zKFxuXHRcdFx0XHRcdHByZWZpeCArIFwiW1wiICsgKCB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9IG51bGwgPyBpIDogXCJcIiApICsgXCJdXCIsXG5cdFx0XHRcdFx0dixcblx0XHRcdFx0XHR0cmFkaXRpb25hbCxcblx0XHRcdFx0XHRhZGRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0fSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIHRvVHlwZSggb2JqICkgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgb2JqZWN0IGl0ZW0uXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRidWlsZFBhcmFtcyggcHJlZml4ICsgXCJbXCIgKyBuYW1lICsgXCJdXCIsIG9ialsgbmFtZSBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBTZXJpYWxpemUgc2NhbGFyIGl0ZW0uXG5cdFx0YWRkKCBwcmVmaXgsIG9iaiApO1xuXHR9XG59XG5cbi8vIFNlcmlhbGl6ZSBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzIG9yIGEgc2V0IG9mXG4vLyBrZXkvdmFsdWVzIGludG8gYSBxdWVyeSBzdHJpbmdcbmpRdWVyeS5wYXJhbSA9IGZ1bmN0aW9uKCBhLCB0cmFkaXRpb25hbCApIHtcblx0dmFyIHByZWZpeCxcblx0XHRzID0gW10sXG5cdFx0YWRkID0gZnVuY3Rpb24oIGtleSwgdmFsdWVPckZ1bmN0aW9uICkge1xuXG5cdFx0XHQvLyBJZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCBpbnZva2UgaXQgYW5kIHVzZSBpdHMgcmV0dXJuIHZhbHVlXG5cdFx0XHR2YXIgdmFsdWUgPSBpc0Z1bmN0aW9uKCB2YWx1ZU9yRnVuY3Rpb24gKSA/XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbigpIDpcblx0XHRcdFx0dmFsdWVPckZ1bmN0aW9uO1xuXG5cdFx0XHRzWyBzLmxlbmd0aCBdID0gZW5jb2RlVVJJQ29tcG9uZW50KCBrZXkgKSArIFwiPVwiICtcblx0XHRcdFx0ZW5jb2RlVVJJQ29tcG9uZW50KCB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICk7XG5cdFx0fTtcblxuXHRpZiAoIGEgPT0gbnVsbCApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdC8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMuXG5cdGlmICggQXJyYXkuaXNBcnJheSggYSApIHx8ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSB0aGUgZm9ybSBlbGVtZW50c1xuXHRcdGpRdWVyeS5lYWNoKCBhLCBmdW5jdGlvbigpIHtcblx0XHRcdGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7XG5cdFx0fSApO1xuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSBcIm9sZFwiIHdheSAodGhlIHdheSAxLjMuMiBvciBvbGRlclxuXHRcdC8vIGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LlxuXHRcdGZvciAoIHByZWZpeCBpbiBhICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uXG5cdHJldHVybiBzLmpvaW4oIFwiJlwiICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5wYXJhbSggdGhpcy5zZXJpYWxpemVBcnJheSgpICk7XG5cdH0sXG5cdHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDYW4gYWRkIHByb3BIb29rIGZvciBcImVsZW1lbnRzXCIgdG8gZmlsdGVyIG9yIGFkZCBmb3JtIGVsZW1lbnRzXG5cdFx0XHR2YXIgZWxlbWVudHMgPSBqUXVlcnkucHJvcCggdGhpcywgXCJlbGVtZW50c1wiICk7XG5cdFx0XHRyZXR1cm4gZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCBlbGVtZW50cyApIDogdGhpcztcblx0XHR9ICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0eXBlID0gdGhpcy50eXBlO1xuXG5cdFx0XHQvLyBVc2UgLmlzKCBcIjpkaXNhYmxlZFwiICkgc28gdGhhdCBmaWVsZHNldFtkaXNhYmxlZF0gd29ya3Ncblx0XHRcdHJldHVybiB0aGlzLm5hbWUgJiYgIWpRdWVyeSggdGhpcyApLmlzKCBcIjpkaXNhYmxlZFwiICkgJiZcblx0XHRcdFx0cnN1Ym1pdHRhYmxlLnRlc3QoIHRoaXMubm9kZU5hbWUgKSAmJiAhcnN1Ym1pdHRlclR5cGVzLnRlc3QoIHR5cGUgKSAmJlxuXHRcdFx0XHQoIHRoaXMuY2hlY2tlZCB8fCAhcmNoZWNrYWJsZVR5cGUudGVzdCggdHlwZSApICk7XG5cdFx0fSApLm1hcCggZnVuY3Rpb24oIF9pLCBlbGVtICkge1xuXHRcdFx0dmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpO1xuXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCApIHtcblx0XHRcdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0fSApLmdldCgpO1xuXHR9XG59ICk7XG5cblxudmFyXG5cdHIyMCA9IC8lMjAvZyxcblx0cmhhc2ggPSAvIy4qJC8sXG5cdHJhbnRpQ2FjaGUgPSAvKFs/Jl0pXz1bXiZdKi8sXG5cdHJoZWFkZXJzID0gL14oLio/KTpbIFxcdF0qKFteXFxyXFxuXSopJC9tZyxcblxuXHQvLyB0cmFjLTc2NTMsIHRyYWMtODEyNSwgdHJhYy04MTUyOiBsb2NhbCBwcm90b2NvbCBkZXRlY3Rpb25cblx0cmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxcblx0cm5vQ29udGVudCA9IC9eKD86R0VUfEhFQUQpJC8sXG5cdHJwcm90b2NvbCA9IC9eXFwvXFwvLyxcblxuXHQvKiBQcmVmaWx0ZXJzXG5cdCAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpXG5cdCAqIDIpIFRoZXNlIGFyZSBjYWxsZWQ6XG5cdCAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnRcblx0ICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKVxuXHQgKiAzKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDQpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogNSkgZXhlY3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gY29udGludWUgZG93biB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHByZWZpbHRlcnMgPSB7fSxcblxuXHQvKiBUcmFuc3BvcnRzIGJpbmRpbmdzXG5cdCAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogMikgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHRyYW5zcG9ydHMgPSB7fSxcblxuXHQvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICh0cmFjLTEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uXG5cdGFsbFR5cGVzID0gXCIqL1wiLmNvbmNhdCggXCIqXCIgKSxcblxuXHQvLyBBbmNob3IgdGFnIGZvciBwYXJzaW5nIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b3JpZ2luQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblxub3JpZ2luQW5jaG9yLmhyZWYgPSBsb2NhdGlvbi5ocmVmO1xuXG4vLyBCYXNlIFwiY29uc3RydWN0b3JcIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0XG5mdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHtcblxuXHQvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIFwiKlwiXG5cdHJldHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5jICkge1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZnVuYyA9IGRhdGFUeXBlRXhwcmVzc2lvbjtcblx0XHRcdGRhdGFUeXBlRXhwcmVzc2lvbiA9IFwiKlwiO1xuXHRcdH1cblxuXHRcdHZhciBkYXRhVHlwZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0ZGF0YVR5cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggZnVuYyApICkge1xuXG5cdFx0XHQvLyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgZGF0YVR5cGVFeHByZXNzaW9uXG5cdFx0XHR3aGlsZSAoICggZGF0YVR5cGUgPSBkYXRhVHlwZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJlcGVuZCBpZiByZXF1ZXN0ZWRcblx0XHRcdFx0aWYgKCBkYXRhVHlwZVsgMCBdID09PSBcIitcIiApIHtcblx0XHRcdFx0XHRkYXRhVHlwZSA9IGRhdGFUeXBlLnNsaWNlKCAxICkgfHwgXCIqXCI7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS51bnNoaWZ0KCBmdW5jICk7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkucHVzaCggZnVuYyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vLyBCYXNlIGluc3BlY3Rpb24gZnVuY3Rpb24gZm9yIHByZWZpbHRlcnMgYW5kIHRyYW5zcG9ydHNcbmZ1bmN0aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKSB7XG5cblx0dmFyIGluc3BlY3RlZCA9IHt9LFxuXHRcdHNlZWtpbmdUcmFuc3BvcnQgPSAoIHN0cnVjdHVyZSA9PT0gdHJhbnNwb3J0cyApO1xuXG5cdGZ1bmN0aW9uIGluc3BlY3QoIGRhdGFUeXBlICkge1xuXHRcdHZhciBzZWxlY3RlZDtcblx0XHRpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlO1xuXHRcdGpRdWVyeS5lYWNoKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10sIGZ1bmN0aW9uKCBfLCBwcmVmaWx0ZXJPckZhY3RvcnkgKSB7XG5cdFx0XHR2YXIgZGF0YVR5cGVPclRyYW5zcG9ydCA9IHByZWZpbHRlck9yRmFjdG9yeSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApO1xuXHRcdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc2Vla2luZ1RyYW5zcG9ydCAmJiAhaW5zcGVjdGVkWyBkYXRhVHlwZU9yVHJhbnNwb3J0IF0gKSB7XG5cblx0XHRcdFx0b3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRpbnNwZWN0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAoIHNlZWtpbmdUcmFuc3BvcnQgKSB7XG5cdFx0XHRcdHJldHVybiAhKCBzZWxlY3RlZCA9IGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIHNlbGVjdGVkO1xuXHR9XG5cblx0cmV0dXJuIGluc3BlY3QoIG9wdGlvbnMuZGF0YVR5cGVzWyAwIF0gKSB8fCAhaW5zcGVjdGVkWyBcIipcIiBdICYmIGluc3BlY3QoIFwiKlwiICk7XG59XG5cbi8vIEEgc3BlY2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9uc1xuLy8gdGhhdCB0YWtlcyBcImZsYXRcIiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRlZClcbi8vIEZpeGVzIHRyYWMtOTg4N1xuZnVuY3Rpb24gYWpheEV4dGVuZCggdGFyZ2V0LCBzcmMgKSB7XG5cdHZhciBrZXksIGRlZXAsXG5cdFx0ZmxhdE9wdGlvbnMgPSBqUXVlcnkuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zIHx8IHt9O1xuXG5cdGZvciAoIGtleSBpbiBzcmMgKSB7XG5cdFx0aWYgKCBzcmNbIGtleSBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHQoIGZsYXRPcHRpb25zWyBrZXkgXSA/IHRhcmdldCA6ICggZGVlcCB8fCAoIGRlZXAgPSB7fSApICkgKVsga2V5IF0gPSBzcmNbIGtleSBdO1xuXHRcdH1cblx0fVxuXHRpZiAoIGRlZXAgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0LCBkZWVwICk7XG5cdH1cblxuXHRyZXR1cm4gdGFyZ2V0O1xufVxuXG4vKiBIYW5kbGVzIHJlc3BvbnNlcyB0byBhbiBhamF4IHJlcXVlc3Q6XG4gKiAtIGZpbmRzIHRoZSByaWdodCBkYXRhVHlwZSAobWVkaWF0ZXMgYmV0d2VlbiBjb250ZW50LXR5cGUgYW5kIGV4cGVjdGVkIGRhdGFUeXBlKVxuICogLSByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKSB7XG5cblx0dmFyIGN0LCB0eXBlLCBmaW5hbERhdGFUeXBlLCBmaXJzdERhdGFUeXBlLFxuXHRcdGNvbnRlbnRzID0gcy5jb250ZW50cyxcblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcztcblxuXHQvLyBSZW1vdmUgYXV0byBkYXRhVHlwZSBhbmQgZ2V0IGNvbnRlbnQtdHlwZSBpbiB0aGUgcHJvY2Vzc1xuXHR3aGlsZSAoIGRhdGFUeXBlc1sgMCBdID09PSBcIipcIiApIHtcblx0XHRkYXRhVHlwZXMuc2hpZnQoKTtcblx0XHRpZiAoIGN0ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRjdCA9IHMubWltZVR5cGUgfHwganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiQ29udGVudC1UeXBlXCIgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGVcblx0aWYgKCBjdCApIHtcblx0XHRmb3IgKCB0eXBlIGluIGNvbnRlbnRzICkge1xuXHRcdFx0aWYgKCBjb250ZW50c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHtcblx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHR5cGUgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVkIGRhdGFUeXBlXG5cdGlmICggZGF0YVR5cGVzWyAwIF0gaW4gcmVzcG9uc2VzICkge1xuXHRcdGZpbmFsRGF0YVR5cGUgPSBkYXRhVHlwZXNbIDAgXTtcblx0fSBlbHNlIHtcblxuXHRcdC8vIFRyeSBjb252ZXJ0aWJsZSBkYXRhVHlwZXNcblx0XHRmb3IgKCB0eXBlIGluIHJlc3BvbnNlcyApIHtcblx0XHRcdGlmICggIWRhdGFUeXBlc1sgMCBdIHx8IHMuY29udmVydGVyc1sgdHlwZSArIFwiIFwiICsgZGF0YVR5cGVzWyAwIF0gXSApIHtcblx0XHRcdFx0ZmluYWxEYXRhVHlwZSA9IHR5cGU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAhZmlyc3REYXRhVHlwZSApIHtcblx0XHRcdFx0Zmlyc3REYXRhVHlwZSA9IHR5cGU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gT3IganVzdCB1c2UgZmlyc3Qgb25lXG5cdFx0ZmluYWxEYXRhVHlwZSA9IGZpbmFsRGF0YVR5cGUgfHwgZmlyc3REYXRhVHlwZTtcblx0fVxuXG5cdC8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGVcblx0Ly8gV2UgYWRkIHRoZSBkYXRhVHlwZSB0byB0aGUgbGlzdCBpZiBuZWVkZWRcblx0Ly8gYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuXHRpZiAoIGZpbmFsRGF0YVR5cGUgKSB7XG5cdFx0aWYgKCBmaW5hbERhdGFUeXBlICE9PSBkYXRhVHlwZXNbIDAgXSApIHtcblx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCBmaW5hbERhdGFUeXBlICk7XG5cdFx0fVxuXHRcdHJldHVybiByZXNwb25zZXNbIGZpbmFsRGF0YVR5cGUgXTtcblx0fVxufVxuXG4vKiBDaGFpbiBjb252ZXJzaW9ucyBnaXZlbiB0aGUgcmVxdWVzdCBhbmQgdGhlIG9yaWdpbmFsIHJlc3BvbnNlXG4gKiBBbHNvIHNldHMgdGhlIHJlc3BvbnNlWFhYIGZpZWxkcyBvbiB0aGUganFYSFIgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICkge1xuXHR2YXIgY29udjIsIGN1cnJlbnQsIGNvbnYsIHRtcCwgcHJldixcblx0XHRjb252ZXJ0ZXJzID0ge30sXG5cblx0XHQvLyBXb3JrIHdpdGggYSBjb3B5IG9mIGRhdGFUeXBlcyBpbiBjYXNlIHdlIG5lZWQgdG8gbW9kaWZ5IGl0IGZvciBjb252ZXJzaW9uXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMuc2xpY2UoKTtcblxuXHQvLyBDcmVhdGUgY29udmVydGVycyBtYXAgd2l0aCBsb3dlcmNhc2VkIGtleXNcblx0aWYgKCBkYXRhVHlwZXNbIDEgXSApIHtcblx0XHRmb3IgKCBjb252IGluIHMuY29udmVydGVycyApIHtcblx0XHRcdGNvbnZlcnRlcnNbIGNvbnYudG9Mb3dlckNhc2UoKSBdID0gcy5jb252ZXJ0ZXJzWyBjb252IF07XG5cdFx0fVxuXHR9XG5cblx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdC8vIENvbnZlcnQgdG8gZWFjaCBzZXF1ZW50aWFsIGRhdGFUeXBlXG5cdHdoaWxlICggY3VycmVudCApIHtcblxuXHRcdGlmICggcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdICkge1xuXHRcdFx0anFYSFJbIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSBdID0gcmVzcG9uc2U7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgdGhlIGRhdGFGaWx0ZXIgaWYgcHJvdmlkZWRcblx0XHRpZiAoICFwcmV2ICYmIGlzU3VjY2VzcyAmJiBzLmRhdGFGaWx0ZXIgKSB7XG5cdFx0XHRyZXNwb25zZSA9IHMuZGF0YUZpbHRlciggcmVzcG9uc2UsIHMuZGF0YVR5cGUgKTtcblx0XHR9XG5cblx0XHRwcmV2ID0gY3VycmVudDtcblx0XHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0XHRpZiAoIGN1cnJlbnQgKSB7XG5cblx0XHRcdC8vIFRoZXJlJ3Mgb25seSB3b3JrIHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1dG9cblx0XHRcdGlmICggY3VycmVudCA9PT0gXCIqXCIgKSB7XG5cblx0XHRcdFx0Y3VycmVudCA9IHByZXY7XG5cblx0XHRcdC8vIENvbnZlcnQgcmVzcG9uc2UgaWYgcHJldiBkYXRhVHlwZSBpcyBub24tYXV0byBhbmQgZGlmZmVycyBmcm9tIGN1cnJlbnRcblx0XHRcdH0gZWxzZSBpZiAoIHByZXYgIT09IFwiKlwiICYmIHByZXYgIT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0Ly8gU2VlayBhIGRpcmVjdCBjb252ZXJ0ZXJcblx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIGN1cnJlbnQgXSB8fCBjb252ZXJ0ZXJzWyBcIiogXCIgKyBjdXJyZW50IF07XG5cblx0XHRcdFx0Ly8gSWYgbm9uZSBmb3VuZCwgc2VlayBhIHBhaXJcblx0XHRcdFx0aWYgKCAhY29udiApIHtcblx0XHRcdFx0XHRmb3IgKCBjb252MiBpbiBjb252ZXJ0ZXJzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnRcblx0XHRcdFx0XHRcdHRtcCA9IGNvbnYyLnNwbGl0KCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0aWYgKCB0bXBbIDEgXSA9PT0gY3VycmVudCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXRcblx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIHRtcFsgMCBdIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJzWyBcIiogXCIgKyB0bXBbIDAgXSBdO1xuXHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBDb25kZW5zZSBlcXVpdmFsZW5jZSBjb252ZXJ0ZXJzXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjb252ID09PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIGNvbnYyIF07XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBPdGhlcndpc2UsIGluc2VydCB0aGUgaW50ZXJtZWRpYXRlIGRhdGFUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggY29udmVydGVyc1sgY29udjIgXSAhPT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnQgPSB0bXBbIDAgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0bXBbIDEgXSApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFwcGx5IGNvbnZlcnRlciAoaWYgbm90IGFuIGVxdWl2YWxlbmNlKVxuXHRcdFx0XHRpZiAoIGNvbnYgIT09IHRydWUgKSB7XG5cblx0XHRcdFx0XHQvLyBVbmxlc3MgZXJyb3JzIGFyZSBhbGxvd2VkIHRvIGJ1YmJsZSwgY2F0Y2ggYW5kIHJldHVybiB0aGVtXG5cdFx0XHRcdFx0aWYgKCBjb252ICYmIHMudGhyb3dzICkge1xuXHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZTogXCJwYXJzZXJlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdGVycm9yOiBjb252ID8gZSA6IFwiTm8gY29udmVyc2lvbiBmcm9tIFwiICsgcHJldiArIFwiIHRvIFwiICsgY3VycmVudFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IHN0YXRlOiBcInN1Y2Nlc3NcIiwgZGF0YTogcmVzcG9uc2UgfTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIENvdW50ZXIgZm9yIGhvbGRpbmcgdGhlIG51bWJlciBvZiBhY3RpdmUgcXVlcmllc1xuXHRhY3RpdmU6IDAsXG5cblx0Ly8gTGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdFxuXHRsYXN0TW9kaWZpZWQ6IHt9LFxuXHRldGFnOiB7fSxcblxuXHRhamF4U2V0dGluZ3M6IHtcblx0XHR1cmw6IGxvY2F0aW9uLmhyZWYsXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRpc0xvY2FsOiBybG9jYWxQcm90b2NvbC50ZXN0KCBsb2NhdGlvbi5wcm90b2NvbCApLFxuXHRcdGdsb2JhbDogdHJ1ZSxcblx0XHRwcm9jZXNzRGF0YTogdHJ1ZSxcblx0XHRhc3luYzogdHJ1ZSxcblx0XHRjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLThcIixcblxuXHRcdC8qXG5cdFx0dGltZW91dDogMCxcblx0XHRkYXRhOiBudWxsLFxuXHRcdGRhdGFUeXBlOiBudWxsLFxuXHRcdHVzZXJuYW1lOiBudWxsLFxuXHRcdHBhc3N3b3JkOiBudWxsLFxuXHRcdGNhY2hlOiBudWxsLFxuXHRcdHRocm93czogZmFsc2UsXG5cdFx0dHJhZGl0aW9uYWw6IGZhbHNlLFxuXHRcdGhlYWRlcnM6IHt9LFxuXHRcdCovXG5cblx0XHRhY2NlcHRzOiB7XG5cdFx0XHRcIipcIjogYWxsVHlwZXMsXG5cdFx0XHR0ZXh0OiBcInRleHQvcGxhaW5cIixcblx0XHRcdGh0bWw6IFwidGV4dC9odG1sXCIsXG5cdFx0XHR4bWw6IFwiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbFwiLFxuXHRcdFx0anNvbjogXCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHRcIlxuXHRcdH0sXG5cblx0XHRjb250ZW50czoge1xuXHRcdFx0eG1sOiAvXFxieG1sXFxiLyxcblx0XHRcdGh0bWw6IC9cXGJodG1sLyxcblx0XHRcdGpzb246IC9cXGJqc29uXFxiL1xuXHRcdH0sXG5cblx0XHRyZXNwb25zZUZpZWxkczoge1xuXHRcdFx0eG1sOiBcInJlc3BvbnNlWE1MXCIsXG5cdFx0XHR0ZXh0OiBcInJlc3BvbnNlVGV4dFwiLFxuXHRcdFx0anNvbjogXCJyZXNwb25zZUpTT05cIlxuXHRcdH0sXG5cblx0XHQvLyBEYXRhIGNvbnZlcnRlcnNcblx0XHQvLyBLZXlzIHNlcGFyYXRlIHNvdXJjZSAob3IgY2F0Y2hhbGwgXCIqXCIpIGFuZCBkZXN0aW5hdGlvbiB0eXBlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXG5cdFx0Y29udmVydGVyczoge1xuXG5cdFx0XHQvLyBDb252ZXJ0IGFueXRoaW5nIHRvIHRleHRcblx0XHRcdFwiKiB0ZXh0XCI6IFN0cmluZyxcblxuXHRcdFx0Ly8gVGV4dCB0byBodG1sICh0cnVlID0gbm8gdHJhbnNmb3JtYXRpb24pXG5cdFx0XHRcInRleHQgaHRtbFwiOiB0cnVlLFxuXG5cdFx0XHQvLyBFdmFsdWF0ZSB0ZXh0IGFzIGEganNvbiBleHByZXNzaW9uXG5cdFx0XHRcInRleHQganNvblwiOiBKU09OLnBhcnNlLFxuXG5cdFx0XHQvLyBQYXJzZSB0ZXh0IGFzIHhtbFxuXHRcdFx0XCJ0ZXh0IHhtbFwiOiBqUXVlcnkucGFyc2VYTUxcblx0XHR9LFxuXG5cdFx0Ly8gRm9yIG9wdGlvbnMgdGhhdCBzaG91bGRuJ3QgYmUgZGVlcCBleHRlbmRlZDpcblx0XHQvLyB5b3UgY2FuIGFkZCB5b3VyIG93biBjdXN0b20gb3B0aW9ucyBoZXJlIGlmXG5cdFx0Ly8gYW5kIHdoZW4geW91IGNyZWF0ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmVcblx0XHQvLyBkZWVwIGV4dGVuZGVkIChzZWUgYWpheEV4dGVuZClcblx0XHRmbGF0T3B0aW9uczoge1xuXHRcdFx0dXJsOiB0cnVlLFxuXHRcdFx0Y29udGV4dDogdHJ1ZVxuXHRcdH1cblx0fSxcblxuXHQvLyBDcmVhdGVzIGEgZnVsbCBmbGVkZ2VkIHNldHRpbmdzIG9iamVjdCBpbnRvIHRhcmdldFxuXHQvLyB3aXRoIGJvdGggYWpheFNldHRpbmdzIGFuZCBzZXR0aW5ncyBmaWVsZHMuXG5cdC8vIElmIHRhcmdldCBpcyBvbWl0dGVkLCB3cml0ZXMgaW50byBhamF4U2V0dGluZ3MuXG5cdGFqYXhTZXR1cDogZnVuY3Rpb24oIHRhcmdldCwgc2V0dGluZ3MgKSB7XG5cdFx0cmV0dXJuIHNldHRpbmdzID9cblxuXHRcdFx0Ly8gQnVpbGRpbmcgYSBzZXR0aW5ncyBvYmplY3Rcblx0XHRcdGFqYXhFeHRlbmQoIGFqYXhFeHRlbmQoIHRhcmdldCwgalF1ZXJ5LmFqYXhTZXR0aW5ncyApLCBzZXR0aW5ncyApIDpcblxuXHRcdFx0Ly8gRXh0ZW5kaW5nIGFqYXhTZXR0aW5nc1xuXHRcdFx0YWpheEV4dGVuZCggalF1ZXJ5LmFqYXhTZXR0aW5ncywgdGFyZ2V0ICk7XG5cdH0sXG5cblx0YWpheFByZWZpbHRlcjogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzICksXG5cdGFqYXhUcmFuc3BvcnQ6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cyApLFxuXG5cdC8vIE1haW4gbWV0aG9kXG5cdGFqYXg6IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBJZiB1cmwgaXMgYW4gb2JqZWN0LCBzaW11bGF0ZSBwcmUtMS41IHNpZ25hdHVyZVxuXHRcdGlmICggdHlwZW9mIHVybCA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdG9wdGlvbnMgPSB1cmw7XG5cdFx0XHR1cmwgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gRm9yY2Ugb3B0aW9ucyB0byBiZSBhbiBvYmplY3Rcblx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRcdHZhciB0cmFuc3BvcnQsXG5cblx0XHRcdC8vIFVSTCB3aXRob3V0IGFudGktY2FjaGUgcGFyYW1cblx0XHRcdGNhY2hlVVJMLFxuXG5cdFx0XHQvLyBSZXNwb25zZSBoZWFkZXJzXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcsXG5cdFx0XHRyZXNwb25zZUhlYWRlcnMsXG5cblx0XHRcdC8vIHRpbWVvdXQgaGFuZGxlXG5cdFx0XHR0aW1lb3V0VGltZXIsXG5cblx0XHRcdC8vIFVybCBjbGVhbnVwIHZhclxuXHRcdFx0dXJsQW5jaG9yLFxuXG5cdFx0XHQvLyBSZXF1ZXN0IHN0YXRlIChiZWNvbWVzIGZhbHNlIHVwb24gc2VuZCBhbmQgdHJ1ZSB1cG9uIGNvbXBsZXRpb24pXG5cdFx0XHRjb21wbGV0ZWQsXG5cblx0XHRcdC8vIFRvIGtub3cgaWYgZ2xvYmFsIGV2ZW50cyBhcmUgdG8gYmUgZGlzcGF0Y2hlZFxuXHRcdFx0ZmlyZUdsb2JhbHMsXG5cblx0XHRcdC8vIExvb3AgdmFyaWFibGVcblx0XHRcdGksXG5cblx0XHRcdC8vIHVuY2FjaGVkIHBhcnQgb2YgdGhlIHVybFxuXHRcdFx0dW5jYWNoZWQsXG5cblx0XHRcdC8vIENyZWF0ZSB0aGUgZmluYWwgb3B0aW9ucyBvYmplY3Rcblx0XHRcdHMgPSBqUXVlcnkuYWpheFNldHVwKCB7fSwgb3B0aW9ucyApLFxuXG5cdFx0XHQvLyBDYWxsYmFja3MgY29udGV4dFxuXHRcdFx0Y2FsbGJhY2tDb250ZXh0ID0gcy5jb250ZXh0IHx8IHMsXG5cblx0XHRcdC8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVudHMgaXMgY2FsbGJhY2tDb250ZXh0IGlmIGl0IGlzIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IGNvbGxlY3Rpb25cblx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dCA9IHMuY29udGV4dCAmJlxuXHRcdFx0XHQoIGNhbGxiYWNrQ29udGV4dC5ub2RlVHlwZSB8fCBjYWxsYmFja0NvbnRleHQuanF1ZXJ5ICkgP1xuXHRcdFx0XHRqUXVlcnkoIGNhbGxiYWNrQ29udGV4dCApIDpcblx0XHRcdFx0alF1ZXJ5LmV2ZW50LFxuXG5cdFx0XHQvLyBEZWZlcnJlZHNcblx0XHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkID0galF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRzdGF0dXNDb2RlID0gcy5zdGF0dXNDb2RlIHx8IHt9LFxuXG5cdFx0XHQvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKVxuXHRcdFx0cmVxdWVzdEhlYWRlcnMgPSB7fSxcblx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXMgPSB7fSxcblxuXHRcdFx0Ly8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlXG5cdFx0XHRzdHJBYm9ydCA9IFwiY2FuY2VsZWRcIixcblxuXHRcdFx0Ly8gRmFrZSB4aHJcblx0XHRcdGpxWEhSID0ge1xuXHRcdFx0XHRyZWFkeVN0YXRlOiAwLFxuXG5cdFx0XHRcdC8vIEJ1aWxkcyBoZWFkZXJzIGhhc2h0YWJsZSBpZiBuZWVkZWRcblx0XHRcdFx0Z2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0XHRcdFx0dmFyIG1hdGNoO1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAhcmVzcG9uc2VIZWFkZXJzICkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnMgPSB7fTtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSArIFwiIFwiIF0gPVxuXHRcdFx0XHRcdFx0XHRcdFx0KCByZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSArIFwiIFwiIF0gfHwgW10gKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuY29uY2F0KCBtYXRjaFsgMiBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSArIFwiIFwiIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBtYXRjaCA9PSBudWxsID8gbnVsbCA6IG1hdGNoLmpvaW4oIFwiLCBcIiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFJhdyBzdHJpbmdcblx0XHRcdFx0Z2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29tcGxldGVkID8gcmVzcG9uc2VIZWFkZXJzU3RyaW5nIDogbnVsbDtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYWNoZXMgdGhlIGhlYWRlclxuXHRcdFx0XHRzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdG5hbWUgPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSA9XG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8IG5hbWU7XG5cdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlcyByZXNwb25zZSBjb250ZW50LXR5cGUgaGVhZGVyXG5cdFx0XHRcdG92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRzLm1pbWVUeXBlID0gdHlwZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdFx0c3RhdHVzQ29kZTogZnVuY3Rpb24oIG1hcCApIHtcblx0XHRcdFx0XHR2YXIgY29kZTtcblx0XHRcdFx0XHRpZiAoIG1hcCApIHtcblx0XHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEV4ZWN1dGUgdGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrc1xuXHRcdFx0XHRcdFx0XHRqcVhIUi5hbHdheXMoIG1hcFsganFYSFIuc3RhdHVzIF0gKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTGF6eS1hZGQgdGhlIG5ldyBjYWxsYmFja3MgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgb2xkIG9uZXNcblx0XHRcdFx0XHRcdFx0Zm9yICggY29kZSBpbiBtYXAgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdHVzQ29kZVsgY29kZSBdID0gWyBzdGF0dXNDb2RlWyBjb2RlIF0sIG1hcFsgY29kZSBdIF07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSByZXF1ZXN0XG5cdFx0XHRcdGFib3J0OiBmdW5jdGlvbiggc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHR2YXIgZmluYWxUZXh0ID0gc3RhdHVzVGV4dCB8fCBzdHJBYm9ydDtcblx0XHRcdFx0XHRpZiAoIHRyYW5zcG9ydCApIHtcblx0XHRcdFx0XHRcdHRyYW5zcG9ydC5hYm9ydCggZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRvbmUoIDAsIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0Ly8gQXR0YWNoIGRlZmVycmVkc1xuXHRcdGRlZmVycmVkLnByb21pc2UoIGpxWEhSICk7XG5cblx0XHQvLyBBZGQgcHJvdG9jb2wgaWYgbm90IHByb3ZpZGVkIChwcmVmaWx0ZXJzIG1pZ2h0IGV4cGVjdCBpdClcblx0XHQvLyBIYW5kbGUgZmFsc3kgdXJsIGluIHRoZSBzZXR0aW5ncyBvYmplY3QgKHRyYWMtMTAwOTM6IGNvbnNpc3RlbmN5IHdpdGggb2xkIHNpZ25hdHVyZSlcblx0XHQvLyBXZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBhdmFpbGFibGVcblx0XHRzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgfHwgbG9jYXRpb24uaHJlZiApICsgXCJcIiApXG5cdFx0XHQucmVwbGFjZSggcnByb3RvY29sLCBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiApO1xuXG5cdFx0Ly8gQWxpYXMgbWV0aG9kIG9wdGlvbiB0byB0eXBlIGFzIHBlciB0aWNrZXQgdHJhYy0xMjAwNFxuXHRcdHMudHlwZSA9IG9wdGlvbnMubWV0aG9kIHx8IG9wdGlvbnMudHlwZSB8fCBzLm1ldGhvZCB8fCBzLnR5cGU7XG5cblx0XHQvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0XG5cdFx0cy5kYXRhVHlwZXMgPSAoIHMuZGF0YVR5cGUgfHwgXCIqXCIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cblx0XHQvLyBBIGNyb3NzLWRvbWFpbiByZXF1ZXN0IGlzIGluIG9yZGVyIHdoZW4gdGhlIG9yaWdpbiBkb2Vzbid0IG1hdGNoIHRoZSBjdXJyZW50IG9yaWdpbi5cblx0XHRpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHtcblx0XHRcdHVybEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExLCBFZGdlIDEyIC0gMTVcblx0XHRcdC8vIElFIHRocm93cyBleGNlcHRpb24gb24gYWNjZXNzaW5nIHRoZSBocmVmIHByb3BlcnR5IGlmIHVybCBpcyBtYWxmb3JtZWQsXG5cdFx0XHQvLyBlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbTo4MHgvXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHMudXJsO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExIG9ubHlcblx0XHRcdFx0Ly8gQW5jaG9yJ3MgaG9zdCBwcm9wZXJ0eSBpc24ndCBjb3JyZWN0bHkgc2V0IHdoZW4gcy51cmwgaXMgcmVsYXRpdmVcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSB1cmxBbmNob3IuaHJlZjtcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IG9yaWdpbkFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIG9yaWdpbkFuY2hvci5ob3N0ICE9PVxuXHRcdFx0XHRcdHVybEFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIHVybEFuY2hvci5ob3N0O1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgVVJMLCBhc3N1bWUgaXQgaXMgY3Jvc3NEb21haW4sXG5cdFx0XHRcdC8vIGl0IGNhbiBiZSByZWplY3RlZCBieSB0aGUgdHJhbnNwb3J0IGlmIGl0IGlzIGludmFsaWRcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nXG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJiB0eXBlb2Ygcy5kYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwcmVmaWx0ZXJzXG5cdFx0aW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVyZVxuXHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdH1cblxuXHRcdC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvXG5cdFx0Ly8gRG9uJ3QgZmlyZSBldmVudHMgaWYgalF1ZXJ5LmV2ZW50IGlzIHVuZGVmaW5lZCBpbiBhbiBBTUQtdXNhZ2Ugc2NlbmFyaW8gKHRyYWMtMTUxMTgpXG5cdFx0ZmlyZUdsb2JhbHMgPSBqUXVlcnkuZXZlbnQgJiYgcy5nbG9iYWw7XG5cblx0XHQvLyBXYXRjaCBmb3IgYSBuZXcgc2V0IG9mIHJlcXVlc3RzXG5cdFx0aWYgKCBmaXJlR2xvYmFscyAmJiBqUXVlcnkuYWN0aXZlKysgPT09IDAgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RhcnRcIiApO1xuXHRcdH1cblxuXHRcdC8vIFVwcGVyY2FzZSB0aGUgdHlwZVxuXHRcdHMudHlwZSA9IHMudHlwZS50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIGlmIHJlcXVlc3QgaGFzIGNvbnRlbnRcblx0XHRzLmhhc0NvbnRlbnQgPSAhcm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTtcblxuXHRcdC8vIFNhdmUgdGhlIFVSTCBpbiBjYXNlIHdlJ3JlIHRveWluZyB3aXRoIHRoZSBJZi1Nb2RpZmllZC1TaW5jZVxuXHRcdC8vIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciBsYXRlciBvblxuXHRcdC8vIFJlbW92ZSBoYXNoIHRvIHNpbXBsaWZ5IHVybCBtYW5pcHVsYXRpb25cblx0XHRjYWNoZVVSTCA9IHMudXJsLnJlcGxhY2UoIHJoYXNoLCBcIlwiICk7XG5cblx0XHQvLyBNb3JlIG9wdGlvbnMgaGFuZGxpbmcgZm9yIHJlcXVlc3RzIHdpdGggbm8gY29udGVudFxuXHRcdGlmICggIXMuaGFzQ29udGVudCApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIGhhc2ggc28gd2UgY2FuIHB1dCBpdCBiYWNrXG5cdFx0XHR1bmNhY2hlZCA9IHMudXJsLnNsaWNlKCBjYWNoZVVSTC5sZW5ndGggKTtcblxuXHRcdFx0Ly8gSWYgZGF0YSBpcyBhdmFpbGFibGUgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQsIGFwcGVuZCBkYXRhIHRvIHVybFxuXHRcdFx0aWYgKCBzLmRhdGEgJiYgKCBzLnByb2Nlc3NEYXRhIHx8IHR5cGVvZiBzLmRhdGEgPT09IFwic3RyaW5nXCIgKSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgKz0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuZGF0YTtcblxuXHRcdFx0XHQvLyB0cmFjLTk2ODI6IHJlbW92ZSBkYXRhIHNvIHRoYXQgaXQncyBub3QgdXNlZCBpbiBhbiBldmVudHVhbCByZXRyeVxuXHRcdFx0XHRkZWxldGUgcy5kYXRhO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgb3IgdXBkYXRlIGFudGktY2FjaGUgcGFyYW0gaWYgbmVlZGVkXG5cdFx0XHRpZiAoIHMuY2FjaGUgPT09IGZhbHNlICkge1xuXHRcdFx0XHRjYWNoZVVSTCA9IGNhY2hlVVJMLnJlcGxhY2UoIHJhbnRpQ2FjaGUsIFwiJDFcIiApO1xuXHRcdFx0XHR1bmNhY2hlZCA9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBcIl89XCIgKyAoIG5vbmNlLmd1aWQrKyApICtcblx0XHRcdFx0XHR1bmNhY2hlZDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUHV0IGhhc2ggYW5kIGFudGktY2FjaGUgb24gdGhlIFVSTCB0aGF0IHdpbGwgYmUgcmVxdWVzdGVkIChnaC0xNzMyKVxuXHRcdFx0cy51cmwgPSBjYWNoZVVSTCArIHVuY2FjaGVkO1xuXG5cdFx0Ly8gQ2hhbmdlICclMjAnIHRvICcrJyBpZiB0aGlzIGlzIGVuY29kZWQgZm9ybSBib2R5IGNvbnRlbnQgKGdoLTI2NTgpXG5cdFx0fSBlbHNlIGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiZcblx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiICkuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICkge1xuXHRcdFx0cy5kYXRhID0gcy5kYXRhLnJlcGxhY2UoIHIyMCwgXCIrXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0aWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU1vZGlmaWVkLVNpbmNlXCIsIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHRcdGlmICggalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTm9uZS1NYXRjaFwiLCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudFxuXHRcdGlmICggcy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25zLmNvbnRlbnRUeXBlICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJDb250ZW50LVR5cGVcIiwgcy5jb250ZW50VHlwZSApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGVcblx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKFxuXHRcdFx0XCJBY2NlcHRcIixcblx0XHRcdHMuZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gP1xuXHRcdFx0XHRzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSArXG5cdFx0XHRcdFx0KCBzLmRhdGFUeXBlc1sgMCBdICE9PSBcIipcIiA/IFwiLCBcIiArIGFsbFR5cGVzICsgXCI7IHE9MC4wMVwiIDogXCJcIiApIDpcblx0XHRcdFx0cy5hY2NlcHRzWyBcIipcIiBdXG5cdFx0KTtcblxuXHRcdC8vIENoZWNrIGZvciBoZWFkZXJzIG9wdGlvblxuXHRcdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTtcblx0XHR9XG5cblx0XHQvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0XG5cdFx0aWYgKCBzLmJlZm9yZVNlbmQgJiZcblx0XHRcdCggcy5iZWZvcmVTZW5kLmNhbGwoIGNhbGxiYWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFsc2UgfHwgY29tcGxldGVkICkgKSB7XG5cblx0XHRcdC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVyblxuXHRcdFx0cmV0dXJuIGpxWEhSLmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0aW9uXG5cdFx0c3RyQWJvcnQgPSBcImFib3J0XCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHNcblx0XHRjb21wbGV0ZURlZmVycmVkLmFkZCggcy5jb21wbGV0ZSApO1xuXHRcdGpxWEhSLmRvbmUoIHMuc3VjY2VzcyApO1xuXHRcdGpxWEhSLmZhaWwoIHMuZXJyb3IgKTtcblxuXHRcdC8vIEdldCB0cmFuc3BvcnRcblx0XHR0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydFxuXHRcdGlmICggIXRyYW5zcG9ydCApIHtcblx0XHRcdGRvbmUoIC0xLCBcIk5vIFRyYW5zcG9ydFwiICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSAxO1xuXG5cdFx0XHQvLyBTZW5kIGdsb2JhbCBldmVudFxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheFNlbmRcIiwgWyBqcVhIUiwgcyBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGFqYXhTZW5kLCBzdG9wIHRoZXJlXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaW1lb3V0XG5cdFx0XHRpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4gMCApIHtcblx0XHRcdFx0dGltZW91dFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGpxWEhSLmFib3J0KCBcInRpbWVvdXRcIiApO1xuXHRcdFx0XHR9LCBzLnRpbWVvdXQgKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29tcGxldGVkID0gZmFsc2U7XG5cdFx0XHRcdHRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gUmV0aHJvdyBwb3N0LWNvbXBsZXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUHJvcGFnYXRlIG90aGVycyBhcyByZXN1bHRzXG5cdFx0XHRcdGRvbmUoIC0xLCBlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lXG5cdFx0ZnVuY3Rpb24gZG9uZSggc3RhdHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7XG5cdFx0XHR2YXIgaXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1vZGlmaWVkLFxuXHRcdFx0XHRzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVzVGV4dDtcblxuXHRcdFx0Ly8gSWdub3JlIHJlcGVhdCBpbnZvY2F0aW9uc1xuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29tcGxldGVkID0gdHJ1ZTtcblxuXHRcdFx0Ly8gQ2xlYXIgdGltZW91dCBpZiBpdCBleGlzdHNcblx0XHRcdGlmICggdGltZW91dFRpbWVyICkge1xuXHRcdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb25cblx0XHRcdC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpXG5cdFx0XHR0cmFuc3BvcnQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgXCJcIjtcblxuXHRcdFx0Ly8gU2V0IHJlYWR5U3RhdGVcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7XG5cblx0XHRcdC8vIERldGVybWluZSBpZiBzdWNjZXNzZnVsXG5cdFx0XHRpc1N1Y2Nlc3MgPSBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNDtcblxuXHRcdFx0Ly8gR2V0IHJlc3BvbnNlIGRhdGFcblx0XHRcdGlmICggcmVzcG9uc2VzICkge1xuXHRcdFx0XHRyZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVXNlIGEgbm9vcCBjb252ZXJ0ZXIgZm9yIG1pc3Npbmcgc2NyaXB0IGJ1dCBub3QgaWYganNvbnBcblx0XHRcdGlmICggIWlzU3VjY2VzcyAmJlxuXHRcdFx0XHRqUXVlcnkuaW5BcnJheSggXCJzY3JpcHRcIiwgcy5kYXRhVHlwZXMgKSA+IC0xICYmXG5cdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBcImpzb25cIiwgcy5kYXRhVHlwZXMgKSA8IDAgKSB7XG5cdFx0XHRcdHMuY29udmVydGVyc1sgXCJ0ZXh0IHNjcmlwdFwiIF0gPSBmdW5jdGlvbigpIHt9O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IG5vIG1hdHRlciB3aGF0ICh0aGF0IHdheSByZXNwb25zZVhYWCBmaWVsZHMgYXJlIGFsd2F5cyBzZXQpXG5cdFx0XHRyZXNwb25zZSA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApO1xuXG5cdFx0XHQvLyBJZiBzdWNjZXNzZnVsLCBoYW5kbGUgdHlwZSBjaGFpbmluZ1xuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cblx0XHRcdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cblx0XHRcdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJMYXN0LU1vZGlmaWVkXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcImV0YWdcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGlmIG5vIGNvbnRlbnRcblx0XHRcdFx0aWYgKCBzdGF0dXMgPT09IDIwNCB8fCBzLnR5cGUgPT09IFwiSEVBRFwiICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vY29udGVudFwiO1xuXG5cdFx0XHRcdC8vIGlmIG5vdCBtb2RpZmllZFxuXHRcdFx0XHR9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDMwNCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub3Rtb2RpZmllZFwiO1xuXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgZGF0YSwgbGV0J3MgY29udmVydCBpdFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0ZTtcblx0XHRcdFx0XHRzdWNjZXNzID0gcmVzcG9uc2UuZGF0YTtcblx0XHRcdFx0XHRlcnJvciA9IHJlc3BvbnNlLmVycm9yO1xuXHRcdFx0XHRcdGlzU3VjY2VzcyA9ICFlcnJvcjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBFeHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dCBhbmQgbm9ybWFsaXplIGZvciBub24tYWJvcnRzXG5cdFx0XHRcdGVycm9yID0gc3RhdHVzVGV4dDtcblx0XHRcdFx0aWYgKCBzdGF0dXMgfHwgIXN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwiZXJyb3JcIjtcblx0XHRcdFx0XHRpZiAoIHN0YXR1cyA8IDAgKSB7XG5cdFx0XHRcdFx0XHRzdGF0dXMgPSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgZGF0YSBmb3IgdGhlIGZha2UgeGhyIG9iamVjdFxuXHRcdFx0anFYSFIuc3RhdHVzID0gc3RhdHVzO1xuXHRcdFx0anFYSFIuc3RhdHVzVGV4dCA9ICggbmF0aXZlU3RhdHVzVGV4dCB8fCBzdGF0dXNUZXh0ICkgKyBcIlwiO1xuXG5cdFx0XHQvLyBTdWNjZXNzL0Vycm9yXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNjZXNzLCBzdGF0dXNUZXh0LCBqcVhIUiBdICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQsIGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdGpxWEhSLnN0YXR1c0NvZGUoIHN0YXR1c0NvZGUgKTtcblx0XHRcdHN0YXR1c0NvZGUgPSB1bmRlZmluZWQ7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBpc1N1Y2Nlc3MgPyBcImFqYXhTdWNjZXNzXCIgOiBcImFqYXhFcnJvclwiLFxuXHRcdFx0XHRcdFsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbXBsZXRlXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQgXSApO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4Q29tcGxldGVcIiwgWyBqcVhIUiwgcyBdICk7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyXG5cdFx0XHRcdGlmICggISggLS1qUXVlcnkuYWN0aXZlICkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0b3BcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpxWEhSO1xuXHR9LFxuXG5cdGdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIGRhdGEsIGNhbGxiYWNrLCBcImpzb25cIiApO1xuXHR9LFxuXG5cdGdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgdW5kZWZpbmVkLCBjYWxsYmFjaywgXCJzY3JpcHRcIiApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiZ2V0XCIsIFwicG9zdFwiIF0sIGZ1bmN0aW9uKCBfaSwgbWV0aG9kICkge1xuXHRqUXVlcnlbIG1ldGhvZCBdID0gZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7XG5cblx0XHQvLyBTaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBhcmd1bWVudCB3YXMgb21pdHRlZFxuXHRcdGlmICggaXNGdW5jdGlvbiggZGF0YSApICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7XG5cdFx0XHRjYWxsYmFjayA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIFRoZSB1cmwgY2FuIGJlIGFuIG9wdGlvbnMgb2JqZWN0ICh3aGljaCB0aGVuIG11c3QgaGF2ZSAudXJsKVxuXHRcdHJldHVybiBqUXVlcnkuYWpheCggalF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cdFx0XHR0eXBlOiBtZXRob2QsXG5cdFx0XHRkYXRhVHlwZTogdHlwZSxcblx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRzdWNjZXNzOiBjYWxsYmFja1xuXHRcdH0sIGpRdWVyeS5pc1BsYWluT2JqZWN0KCB1cmwgKSAmJiB1cmwgKSApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkuYWpheFByZWZpbHRlciggZnVuY3Rpb24oIHMgKSB7XG5cdHZhciBpO1xuXHRmb3IgKCBpIGluIHMuaGVhZGVycyApIHtcblx0XHRpZiAoIGkudG9Mb3dlckNhc2UoKSA9PT0gXCJjb250ZW50LXR5cGVcIiApIHtcblx0XHRcdHMuY29udGVudFR5cGUgPSBzLmhlYWRlcnNbIGkgXSB8fCBcIlwiO1xuXHRcdH1cblx0fVxufSApO1xuXG5cbmpRdWVyeS5fZXZhbFVybCA9IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMsIGRvYyApIHtcblx0cmV0dXJuIGpRdWVyeS5hamF4KCB7XG5cdFx0dXJsOiB1cmwsXG5cblx0XHQvLyBNYWtlIHRoaXMgZXhwbGljaXQsIHNpbmNlIHVzZXIgY2FuIG92ZXJyaWRlIHRoaXMgdGhyb3VnaCBhamF4U2V0dXAgKHRyYWMtMTEyNjQpXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRkYXRhVHlwZTogXCJzY3JpcHRcIixcblx0XHRjYWNoZTogdHJ1ZSxcblx0XHRhc3luYzogZmFsc2UsXG5cdFx0Z2xvYmFsOiBmYWxzZSxcblxuXHRcdC8vIE9ubHkgZXZhbHVhdGUgdGhlIHJlc3BvbnNlIGlmIGl0IGlzIHN1Y2Nlc3NmdWwgKGdoLTQxMjYpXG5cdFx0Ly8gZGF0YUZpbHRlciBpcyBub3QgaW52b2tlZCBmb3IgZmFpbHVyZSByZXNwb25zZXMsIHNvIHVzaW5nIGl0IGluc3RlYWRcblx0XHQvLyBvZiB0aGUgZGVmYXVsdCBjb252ZXJ0ZXIgaXMga2x1ZGd5IGJ1dCBpdCB3b3Jrcy5cblx0XHRjb252ZXJ0ZXJzOiB7XG5cdFx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCkge31cblx0XHR9LFxuXHRcdGRhdGFGaWx0ZXI6IGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCByZXNwb25zZSwgb3B0aW9ucywgZG9jICk7XG5cdFx0fVxuXHR9ICk7XG59O1xuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0d3JhcEFsbDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIHdyYXA7XG5cblx0XHRpZiAoIHRoaXNbIDAgXSApIHtcblx0XHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0XHRodG1sID0gaHRtbC5jYWxsKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmRcblx0XHRcdHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbIDAgXS5vd25lckRvY3VtZW50ICkuZXEoIDAgKS5jbG9uZSggdHJ1ZSApO1xuXG5cdFx0XHRpZiAoIHRoaXNbIDAgXS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR3cmFwLmluc2VydEJlZm9yZSggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHdyYXAubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGVsZW0gPSB0aGlzO1xuXG5cdFx0XHRcdHdoaWxlICggZWxlbS5maXJzdEVsZW1lbnRDaGlsZCApIHtcblx0XHRcdFx0XHRlbGVtID0gZWxlbS5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBlbGVtO1xuXHRcdFx0fSApLmFwcGVuZCggdGhpcyApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHdyYXBJbm5lcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcElubmVyKCBodG1sLmNhbGwoIHRoaXMsIGkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSxcblx0XHRcdFx0Y29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7XG5cblx0XHRcdGlmICggY29udGVudHMubGVuZ3RoICkge1xuXHRcdFx0XHRjb250ZW50cy53cmFwQWxsKCBodG1sICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGYuYXBwZW5kKCBodG1sICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHdyYXA6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciBodG1sSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIGh0bWwgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcEFsbCggaHRtbElzRnVuY3Rpb24gPyBodG1sLmNhbGwoIHRoaXMsIGkgKSA6IGh0bWwgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0dW53cmFwOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dGhpcy5wYXJlbnQoIHNlbGVjdG9yICkubm90KCBcImJvZHlcIiApLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApO1xuXHRcdH0gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhalF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlKCBlbGVtICk7XG59O1xualF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhISggZWxlbS5vZmZzZXRXaWR0aCB8fCBlbGVtLm9mZnNldEhlaWdodCB8fCBlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICk7XG59O1xuXG5cblxuXG5qUXVlcnkuYWpheFNldHRpbmdzLnhociA9IGZ1bmN0aW9uKCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7XG5cdH0gY2F0Y2ggKCBlICkge31cbn07XG5cbnZhciB4aHJTdWNjZXNzU3RhdHVzID0ge1xuXG5cdFx0Ly8gRmlsZSBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyBjb2RlIDAsIGFzc3VtZSAyMDBcblx0XHQwOiAyMDAsXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdC8vIHRyYWMtMTQ1MDogc29tZXRpbWVzIElFIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDRcblx0XHQxMjIzOiAyMDRcblx0fSxcblx0eGhyU3VwcG9ydGVkID0galF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTtcblxuc3VwcG9ydC5jb3JzID0gISF4aHJTdXBwb3J0ZWQgJiYgKCBcIndpdGhDcmVkZW50aWFsc1wiIGluIHhoclN1cHBvcnRlZCApO1xuc3VwcG9ydC5hamF4ID0geGhyU3VwcG9ydGVkID0gISF4aHJTdXBwb3J0ZWQ7XG5cbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0dmFyIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrO1xuXG5cdC8vIENyb3NzIGRvbWFpbiBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0cFJlcXVlc3Rcblx0aWYgKCBzdXBwb3J0LmNvcnMgfHwgeGhyU3VwcG9ydGVkICYmICFvcHRpb25zLmNyb3NzRG9tYWluICkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHZhciBpLFxuXHRcdFx0XHRcdHhociA9IG9wdGlvbnMueGhyKCk7XG5cblx0XHRcdFx0eGhyLm9wZW4oXG5cdFx0XHRcdFx0b3B0aW9ucy50eXBlLFxuXHRcdFx0XHRcdG9wdGlvbnMudXJsLFxuXHRcdFx0XHRcdG9wdGlvbnMuYXN5bmMsXG5cdFx0XHRcdFx0b3B0aW9ucy51c2VybmFtZSxcblx0XHRcdFx0XHRvcHRpb25zLnBhc3N3b3JkXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Ly8gQXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBwcm92aWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdGZvciAoIGkgaW4gb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0XHR4aHJbIGkgXSA9IG9wdGlvbnMueGhyRmllbGRzWyBpIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7XG5cdFx0XHRcdFx0eGhyLm92ZXJyaWRlTWltZVR5cGUoIG9wdGlvbnMubWltZVR5cGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFgtUmVxdWVzdGVkLVdpdGggaGVhZGVyXG5cdFx0XHRcdC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmVcblx0XHRcdFx0Ly8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS5cblx0XHRcdFx0Ly8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApXG5cdFx0XHRcdC8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLlxuXHRcdFx0XHRpZiAoICFvcHRpb25zLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdICkge1xuXHRcdFx0XHRcdGhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gPSBcIlhNTEh0dHBSZXF1ZXN0XCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTZXQgaGVhZGVyc1xuXHRcdFx0XHRmb3IgKCBpIGluIGhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoIGksIGhlYWRlcnNbIGkgXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRjYWxsYmFjayA9IGVycm9yQ2FsbGJhY2sgPSB4aHIub25sb2FkID1cblx0XHRcdFx0XHRcdFx0XHR4aHIub25lcnJvciA9IHhoci5vbmFib3J0ID0geGhyLm9udGltZW91dCA9XG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiYWJvcnRcIiApIHtcblx0XHRcdFx0XHRcdFx0XHR4aHIuYWJvcnQoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gXCJlcnJvclwiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBPbiBhIG1hbnVhbCBuYXRpdmUgYWJvcnQsIElFOSB0aHJvd3Ncblx0XHRcdFx0XHRcdFx0XHQvLyBlcnJvcnMgb24gYW55IHByb3BlcnR5IGFjY2VzcyB0aGF0IGlzIG5vdCByZWFkeVN0YXRlXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlb2YgeGhyLnN0YXR1cyAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCAwLCBcImVycm9yXCIgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRmlsZTogcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgMDsgc2VlIHRyYWMtODYwNSwgdHJhYy0xNDIwN1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHJTdWNjZXNzU3RhdHVzWyB4aHIuc3RhdHVzIF0gfHwgeGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0LFxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSUU5IGhhcyBubyBYSFIyIGJ1dCB0aHJvd3Mgb24gYmluYXJ5ICh0cmFjLTExNDI2KVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gRm9yIFhIUjIgbm9uLXRleHQsIGxldCB0aGUgY2FsbGVyIGhhbmRsZSBpdCAoZ2gtMjQ5OClcblx0XHRcdFx0XHRcdFx0XHRcdCggeGhyLnJlc3BvbnNlVHlwZSB8fCBcInRleHRcIiApICE9PSBcInRleHRcIiAgfHxcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiB4aHIucmVzcG9uc2VUZXh0ICE9PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0eyBiaW5hcnk6IHhoci5yZXNwb25zZSB9IDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0eyB0ZXh0OiB4aHIucmVzcG9uc2VUZXh0IH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBMaXN0ZW4gdG8gZXZlbnRzXG5cdFx0XHRcdHhoci5vbmxvYWQgPSBjYWxsYmFjaygpO1xuXHRcdFx0XHRlcnJvckNhbGxiYWNrID0geGhyLm9uZXJyb3IgPSB4aHIub250aW1lb3V0ID0gY2FsbGJhY2soIFwiZXJyb3JcIiApO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdFx0XHQvLyBVc2Ugb25yZWFkeXN0YXRlY2hhbmdlIHRvIHJlcGxhY2Ugb25hYm9ydFxuXHRcdFx0XHQvLyB0byBoYW5kbGUgdW5jYXVnaHQgYWJvcnRzXG5cdFx0XHRcdGlmICggeGhyLm9uYWJvcnQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR4aHIub25hYm9ydCA9IGVycm9yQ2FsbGJhY2s7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0XHQvLyBDaGVjayByZWFkeVN0YXRlIGJlZm9yZSB0aW1lb3V0IGFzIGl0IGNoYW5nZXNcblx0XHRcdFx0XHRcdGlmICggeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQWxsb3cgb25lcnJvciB0byBiZSBjYWxsZWQgZmlyc3QsXG5cdFx0XHRcdFx0XHRcdC8vIGJ1dCB0aGF0IHdpbGwgbm90IGhhbmRsZSBhIG5hdGl2ZSBhYm9ydFxuXHRcdFx0XHRcdFx0XHQvLyBBbHNvLCBzYXZlIGVycm9yQ2FsbGJhY2sgdG8gYSB2YXJpYWJsZVxuXHRcdFx0XHRcdFx0XHQvLyBhcyB4aHIub25lcnJvciBjYW5ub3QgYmUgYWNjZXNzZWRcblx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgYWJvcnQgY2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBjYWxsYmFjayggXCJhYm9ydFwiICk7XG5cblx0XHRcdFx0dHJ5IHtcblxuXHRcdFx0XHRcdC8vIERvIHNlbmQgdGhlIHJlcXVlc3QgKHRoaXMgbWF5IHJhaXNlIGFuIGV4Y2VwdGlvbilcblx0XHRcdFx0XHR4aHIuc2VuZCggb3B0aW9ucy5oYXNDb250ZW50ICYmIG9wdGlvbnMuZGF0YSB8fCBudWxsICk7XG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0Ly8gdHJhYy0xNDY4MzogT25seSByZXRocm93IGlmIHRoaXMgaGFzbid0IGJlZW4gbm90aWZpZWQgYXMgYW4gZXJyb3IgeWV0XG5cdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUHJldmVudCBhdXRvLWV4ZWN1dGlvbiBvZiBzY3JpcHRzIHdoZW4gbm8gZXhwbGljaXQgZGF0YVR5cGUgd2FzIHByb3ZpZGVkIChTZWUgZ2gtMjQzMilcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMuY29udGVudHMuc2NyaXB0ID0gZmFsc2U7XG5cdH1cbn0gKTtcblxuLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5cGVcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0YWNjZXB0czoge1xuXHRcdHNjcmlwdDogXCJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIFwiICtcblx0XHRcdFwiYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0XCJcblx0fSxcblx0Y29udGVudHM6IHtcblx0XHRzY3JpcHQ6IC9cXGIoPzpqYXZhfGVjbWEpc2NyaXB0XFxiL1xuXHR9LFxuXHRjb252ZXJ0ZXJzOiB7XG5cdFx0XCJ0ZXh0IHNjcmlwdFwiOiBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7XG5cdFx0XHRyZXR1cm4gdGV4dDtcblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBjcm9zc0RvbWFpblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRzLmNhY2hlID0gZmFsc2U7XG5cdH1cblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMudHlwZSA9IFwiR0VUXCI7XG5cdH1cbn0gKTtcblxuLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0XG5qUXVlcnkuYWpheFRyYW5zcG9ydCggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cblx0Ly8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRvbWFpbiBvciBmb3JjZWQtYnktYXR0cnMgcmVxdWVzdHNcblx0aWYgKCBzLmNyb3NzRG9tYWluIHx8IHMuc2NyaXB0QXR0cnMgKSB7XG5cdFx0dmFyIHNjcmlwdCwgY2FsbGJhY2s7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBfLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0c2NyaXB0ID0galF1ZXJ5KCBcIjxzY3JpcHQ+XCIgKVxuXHRcdFx0XHRcdC5hdHRyKCBzLnNjcmlwdEF0dHJzIHx8IHt9IClcblx0XHRcdFx0XHQucHJvcCggeyBjaGFyc2V0OiBzLnNjcmlwdENoYXJzZXQsIHNyYzogcy51cmwgfSApXG5cdFx0XHRcdFx0Lm9uKCBcImxvYWQgZXJyb3JcIiwgY2FsbGJhY2sgPSBmdW5jdGlvbiggZXZ0ICkge1xuXHRcdFx0XHRcdFx0c2NyaXB0LnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBudWxsO1xuXHRcdFx0XHRcdFx0aWYgKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCBldnQudHlwZSA9PT0gXCJlcnJvclwiID8gNDA0IDogMjAwLCBldnQudHlwZSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHQvLyBVc2UgbmF0aXZlIERPTSBtYW5pcHVsYXRpb24gdG8gYXZvaWQgb3VyIGRvbU1hbmlwIEFKQVggdHJpY2tlcnlcblx0XHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0WyAwIF0gKTtcblx0XHRcdH0sXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIG9sZENhbGxiYWNrcyA9IFtdLFxuXHRyanNvbnAgPSAvKD0pXFw/KD89JnwkKXxcXD9cXD8vO1xuXG4vLyBEZWZhdWx0IGpzb25wIHNldHRpbmdzXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGpzb25wOiBcImNhbGxiYWNrXCIsXG5cdGpzb25wQ2FsbGJhY2s6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBjYWxsYmFjayA9IG9sZENhbGxiYWNrcy5wb3AoKSB8fCAoIGpRdWVyeS5leHBhbmRvICsgXCJfXCIgKyAoIG5vbmNlLmd1aWQrKyApICk7XG5cdFx0dGhpc1sgY2FsbGJhY2sgXSA9IHRydWU7XG5cdFx0cmV0dXJuIGNhbGxiYWNrO1xuXHR9XG59ICk7XG5cbi8vIERldGVjdCwgbm9ybWFsaXplIG9wdGlvbnMgYW5kIGluc3RhbGwgY2FsbGJhY2tzIGZvciBqc29ucCByZXF1ZXN0c1xualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwianNvbiBqc29ucFwiLCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywganFYSFIgKSB7XG5cblx0dmFyIGNhbGxiYWNrTmFtZSwgb3ZlcndyaXR0ZW4sIHJlc3BvbnNlQ29udGFpbmVyLFxuXHRcdGpzb25Qcm9wID0gcy5qc29ucCAhPT0gZmFsc2UgJiYgKCByanNvbnAudGVzdCggcy51cmwgKSA/XG5cdFx0XHRcInVybFwiIDpcblx0XHRcdHR5cGVvZiBzLmRhdGEgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKVxuXHRcdFx0XHRcdC5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgJiZcblx0XHRcdFx0cmpzb25wLnRlc3QoIHMuZGF0YSApICYmIFwiZGF0YVwiXG5cdFx0KTtcblxuXHQvLyBIYW5kbGUgaWZmIHRoZSBleHBlY3RlZCBkYXRhIHR5cGUgaXMgXCJqc29ucFwiIG9yIHdlIGhhdmUgYSBwYXJhbWV0ZXIgdG8gc2V0XG5cdGlmICgganNvblByb3AgfHwgcy5kYXRhVHlwZXNbIDAgXSA9PT0gXCJqc29ucFwiICkge1xuXG5cdFx0Ly8gR2V0IGNhbGxiYWNrIG5hbWUsIHJlbWVtYmVyaW5nIHByZWV4aXN0aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdFxuXHRcdGNhbGxiYWNrTmFtZSA9IHMuanNvbnBDYWxsYmFjayA9IGlzRnVuY3Rpb24oIHMuanNvbnBDYWxsYmFjayApID9cblx0XHRcdHMuanNvbnBDYWxsYmFjaygpIDpcblx0XHRcdHMuanNvbnBDYWxsYmFjaztcblxuXHRcdC8vIEluc2VydCBjYWxsYmFjayBpbnRvIHVybCBvciBmb3JtIGRhdGFcblx0XHRpZiAoIGpzb25Qcm9wICkge1xuXHRcdFx0c1sganNvblByb3AgXSA9IHNbIGpzb25Qcm9wIF0ucmVwbGFjZSggcmpzb25wLCBcIiQxXCIgKyBjYWxsYmFja05hbWUgKTtcblx0XHR9IGVsc2UgaWYgKCBzLmpzb25wICE9PSBmYWxzZSApIHtcblx0XHRcdHMudXJsICs9ICggcnF1ZXJ5LnRlc3QoIHMudXJsICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmpzb25wICsgXCI9XCIgKyBjYWxsYmFja05hbWU7XG5cdFx0fVxuXG5cdFx0Ly8gVXNlIGRhdGEgY29udmVydGVyIHRvIHJldHJpZXZlIGpzb24gYWZ0ZXIgc2NyaXB0IGV4ZWN1dGlvblxuXHRcdHMuY29udmVydGVyc1sgXCJzY3JpcHQganNvblwiIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggIXJlc3BvbnNlQ29udGFpbmVyICkge1xuXHRcdFx0XHRqUXVlcnkuZXJyb3IoIGNhbGxiYWNrTmFtZSArIFwiIHdhcyBub3QgY2FsbGVkXCIgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXNwb25zZUNvbnRhaW5lclsgMCBdO1xuXHRcdH07XG5cblx0XHQvLyBGb3JjZSBqc29uIGRhdGFUeXBlXG5cdFx0cy5kYXRhVHlwZXNbIDAgXSA9IFwianNvblwiO1xuXG5cdFx0Ly8gSW5zdGFsbCBjYWxsYmFja1xuXHRcdG92ZXJ3cml0dGVuID0gd2luZG93WyBjYWxsYmFja05hbWUgXTtcblx0XHR3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXNwb25zZUNvbnRhaW5lciA9IGFyZ3VtZW50cztcblx0XHR9O1xuXG5cdFx0Ly8gQ2xlYW4tdXAgZnVuY3Rpb24gKGZpcmVzIGFmdGVyIGNvbnZlcnRlcnMpXG5cdFx0anFYSFIuYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gSWYgcHJldmlvdXMgdmFsdWUgZGlkbid0IGV4aXN0IC0gcmVtb3ZlIGl0XG5cdFx0XHRpZiAoIG92ZXJ3cml0dGVuID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdGpRdWVyeSggd2luZG93ICkucmVtb3ZlUHJvcCggY2FsbGJhY2tOYW1lICk7XG5cblx0XHRcdC8vIE90aGVyd2lzZSByZXN0b3JlIHByZWV4aXN0aW5nIHZhbHVlXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gb3ZlcndyaXR0ZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNhdmUgYmFjayBhcyBmcmVlXG5cdFx0XHRpZiAoIHNbIGNhbGxiYWNrTmFtZSBdICkge1xuXG5cdFx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHJlLXVzaW5nIHRoZSBvcHRpb25zIGRvZXNuJ3Qgc2NyZXcgdGhpbmdzIGFyb3VuZFxuXHRcdFx0XHRzLmpzb25wQ2FsbGJhY2sgPSBvcmlnaW5hbFNldHRpbmdzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHRcdFx0Ly8gU2F2ZSB0aGUgY2FsbGJhY2sgbmFtZSBmb3IgZnV0dXJlIHVzZVxuXHRcdFx0XHRvbGRDYWxsYmFja3MucHVzaCggY2FsbGJhY2tOYW1lICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENhbGwgaWYgaXQgd2FzIGEgZnVuY3Rpb24gYW5kIHdlIGhhdmUgYSByZXNwb25zZVxuXHRcdFx0aWYgKCByZXNwb25zZUNvbnRhaW5lciAmJiBpc0Z1bmN0aW9uKCBvdmVyd3JpdHRlbiApICkge1xuXHRcdFx0XHRvdmVyd3JpdHRlbiggcmVzcG9uc2VDb250YWluZXJbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXNwb25zZUNvbnRhaW5lciA9IG92ZXJ3cml0dGVuID0gdW5kZWZpbmVkO1xuXHRcdH0gKTtcblxuXHRcdC8vIERlbGVnYXRlIHRvIHNjcmlwdFxuXHRcdHJldHVybiBcInNjcmlwdFwiO1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA4IG9ubHlcbi8vIEluIFNhZmFyaSA4IGRvY3VtZW50cyBjcmVhdGVkIHZpYSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnRcbi8vIGNvbGxhcHNlIHNpYmxpbmcgZm9ybXM6IHRoZSBzZWNvbmQgb25lIGJlY29tZXMgYSBjaGlsZCBvZiB0aGUgZmlyc3Qgb25lLlxuLy8gQmVjYXVzZSBvZiB0aGF0LCB0aGlzIHNlY3VyaXR5IG1lYXN1cmUgaGFzIHRvIGJlIGRpc2FibGVkIGluIFNhZmFyaSA4LlxuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzMzN1xuc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgPSAoIGZ1bmN0aW9uKCkge1xuXHR2YXIgYm9keSA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCggXCJcIiApLmJvZHk7XG5cdGJvZHkuaW5uZXJIVE1MID0gXCI8Zm9ybT48L2Zvcm0+PGZvcm0+PC9mb3JtPlwiO1xuXHRyZXR1cm4gYm9keS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMjtcbn0gKSgpO1xuXG5cbi8vIEFyZ3VtZW50IFwiZGF0YVwiIHNob3VsZCBiZSBzdHJpbmcgb2YgaHRtbFxuLy8gY29udGV4dCAob3B0aW9uYWwpOiBJZiBzcGVjaWZpZWQsIHRoZSBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhpcyBjb250ZXh0LFxuLy8gZGVmYXVsdHMgdG8gZG9jdW1lbnRcbi8vIGtlZXBTY3JpcHRzIChvcHRpb25hbCk6IElmIHRydWUsIHdpbGwgaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgaHRtbCBzdHJpbmdcbmpRdWVyeS5wYXJzZUhUTUwgPSBmdW5jdGlvbiggZGF0YSwgY29udGV4dCwga2VlcFNjcmlwdHMgKSB7XG5cdGlmICggdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGtlZXBTY3JpcHRzID0gY29udGV4dDtcblx0XHRjb250ZXh0ID0gZmFsc2U7XG5cdH1cblxuXHR2YXIgYmFzZSwgcGFyc2VkLCBzY3JpcHRzO1xuXG5cdGlmICggIWNvbnRleHQgKSB7XG5cblx0XHQvLyBTdG9wIHNjcmlwdHMgb3IgaW5saW5lIGV2ZW50IGhhbmRsZXJzIGZyb20gYmVpbmcgZXhlY3V0ZWQgaW1tZWRpYXRlbHlcblx0XHQvLyBieSB1c2luZyBkb2N1bWVudC5pbXBsZW1lbnRhdGlvblxuXHRcdGlmICggc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgKSB7XG5cdFx0XHRjb250ZXh0ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICk7XG5cblx0XHRcdC8vIFNldCB0aGUgYmFzZSBocmVmIGZvciB0aGUgY3JlYXRlZCBkb2N1bWVudFxuXHRcdFx0Ly8gc28gYW55IHBhcnNlZCBlbGVtZW50cyB3aXRoIFVSTHNcblx0XHRcdC8vIGFyZSBiYXNlZCBvbiB0aGUgZG9jdW1lbnQncyBVUkwgKGdoLTI5NjUpXG5cdFx0XHRiYXNlID0gY29udGV4dC5jcmVhdGVFbGVtZW50KCBcImJhc2VcIiApO1xuXHRcdFx0YmFzZS5ocmVmID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZjtcblx0XHRcdGNvbnRleHQuaGVhZC5hcHBlbmRDaGlsZCggYmFzZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb250ZXh0ID0gZG9jdW1lbnQ7XG5cdFx0fVxuXHR9XG5cblx0cGFyc2VkID0gcnNpbmdsZVRhZy5leGVjKCBkYXRhICk7XG5cdHNjcmlwdHMgPSAha2VlcFNjcmlwdHMgJiYgW107XG5cblx0Ly8gU2luZ2xlIHRhZ1xuXHRpZiAoIHBhcnNlZCApIHtcblx0XHRyZXR1cm4gWyBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIHBhcnNlZFsgMSBdICkgXTtcblx0fVxuXG5cdHBhcnNlZCA9IGJ1aWxkRnJhZ21lbnQoIFsgZGF0YSBdLCBjb250ZXh0LCBzY3JpcHRzICk7XG5cblx0aWYgKCBzY3JpcHRzICYmIHNjcmlwdHMubGVuZ3RoICkge1xuXHRcdGpRdWVyeSggc2NyaXB0cyApLnJlbW92ZSgpO1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIHBhcnNlZC5jaGlsZE5vZGVzICk7XG59O1xuXG5cbi8qKlxuICogTG9hZCBhIHVybCBpbnRvIGEgcGFnZVxuICovXG5qUXVlcnkuZm4ubG9hZCA9IGZ1bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7XG5cdHZhciBzZWxlY3RvciwgdHlwZSwgcmVzcG9uc2UsXG5cdFx0c2VsZiA9IHRoaXMsXG5cdFx0b2ZmID0gdXJsLmluZGV4T2YoIFwiIFwiICk7XG5cblx0aWYgKCBvZmYgPiAtMSApIHtcblx0XHRzZWxlY3RvciA9IHN0cmlwQW5kQ29sbGFwc2UoIHVybC5zbGljZSggb2ZmICkgKTtcblx0XHR1cmwgPSB1cmwuc2xpY2UoIDAsIG9mZiApO1xuXHR9XG5cblx0Ly8gSWYgaXQncyBhIGZ1bmN0aW9uXG5cdGlmICggaXNGdW5jdGlvbiggcGFyYW1zICkgKSB7XG5cblx0XHQvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFja1xuXHRcdGNhbGxiYWNrID0gcGFyYW1zO1xuXHRcdHBhcmFtcyA9IHVuZGVmaW5lZDtcblxuXHQvLyBPdGhlcndpc2UsIGJ1aWxkIGEgcGFyYW0gc3RyaW5nXG5cdH0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1zID09PSBcIm9iamVjdFwiICkge1xuXHRcdHR5cGUgPSBcIlBPU1RcIjtcblx0fVxuXG5cdC8vIElmIHdlIGhhdmUgZWxlbWVudHMgdG8gbW9kaWZ5LCBtYWtlIHRoZSByZXF1ZXN0XG5cdGlmICggc2VsZi5sZW5ndGggPiAwICkge1xuXHRcdGpRdWVyeS5hamF4KCB7XG5cdFx0XHR1cmw6IHVybCxcblxuXHRcdFx0Ly8gSWYgXCJ0eXBlXCIgdmFyaWFibGUgaXMgdW5kZWZpbmVkLCB0aGVuIFwiR0VUXCIgbWV0aG9kIHdpbGwgYmUgdXNlZC5cblx0XHRcdC8vIE1ha2UgdmFsdWUgb2YgdGhpcyBmaWVsZCBleHBsaWNpdCBzaW5jZVxuXHRcdFx0Ly8gdXNlciBjYW4gb3ZlcnJpZGUgaXQgdGhyb3VnaCBhamF4U2V0dXAgbWV0aG9kXG5cdFx0XHR0eXBlOiB0eXBlIHx8IFwiR0VUXCIsXG5cdFx0XHRkYXRhVHlwZTogXCJodG1sXCIsXG5cdFx0XHRkYXRhOiBwYXJhbXNcblx0XHR9ICkuZG9uZSggZnVuY3Rpb24oIHJlc3BvbnNlVGV4dCApIHtcblxuXHRcdFx0Ly8gU2F2ZSByZXNwb25zZSBmb3IgdXNlIGluIGNvbXBsZXRlIGNhbGxiYWNrXG5cdFx0XHRyZXNwb25zZSA9IGFyZ3VtZW50cztcblxuXHRcdFx0c2VsZi5odG1sKCBzZWxlY3RvciA/XG5cblx0XHRcdFx0Ly8gSWYgYSBzZWxlY3RvciB3YXMgc3BlY2lmaWVkLCBsb2NhdGUgdGhlIHJpZ2h0IGVsZW1lbnRzIGluIGEgZHVtbXkgZGl2XG5cdFx0XHRcdC8vIEV4Y2x1ZGUgc2NyaXB0cyB0byBhdm9pZCBJRSAnUGVybWlzc2lvbiBEZW5pZWQnIGVycm9yc1xuXHRcdFx0XHRqUXVlcnkoIFwiPGRpdj5cIiApLmFwcGVuZCggalF1ZXJ5LnBhcnNlSFRNTCggcmVzcG9uc2VUZXh0ICkgKS5maW5kKCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgdXNlIHRoZSBmdWxsIHJlc3VsdFxuXHRcdFx0XHRyZXNwb25zZVRleHQgKTtcblxuXHRcdC8vIElmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJkYXRhXCIsIFwic3RhdHVzXCIsIFwianFYSFJcIlxuXHRcdC8vIGJ1dCB0aGV5IGFyZSBpZ25vcmVkIGJlY2F1c2UgcmVzcG9uc2Ugd2FzIHNldCBhYm92ZS5cblx0XHQvLyBJZiBpdCBmYWlscywgdGhpcyBmdW5jdGlvbiBnZXRzIFwianFYSFJcIiwgXCJzdGF0dXNcIiwgXCJlcnJvclwiXG5cdFx0fSApLmFsd2F5cyggY2FsbGJhY2sgJiYgZnVuY3Rpb24oIGpxWEhSLCBzdGF0dXMgKSB7XG5cdFx0XHRzZWxmLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjYWxsYmFjay5hcHBseSggdGhpcywgcmVzcG9uc2UgfHwgWyBqcVhIUi5yZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApO1xuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuXG5cblxualF1ZXJ5LmV4cHIucHNldWRvcy5hbmltYXRlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4galF1ZXJ5LmdyZXAoIGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gZWxlbSA9PT0gZm4uZWxlbTtcblx0fSApLmxlbmd0aDtcbn07XG5cblxuXG5cbmpRdWVyeS5vZmZzZXQgPSB7XG5cdHNldE9mZnNldDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGkgKSB7XG5cdFx0dmFyIGN1clBvc2l0aW9uLCBjdXJMZWZ0LCBjdXJDU1NUb3AsIGN1clRvcCwgY3VyT2Zmc2V0LCBjdXJDU1NMZWZ0LCBjYWxjdWxhdGVQb3NpdGlvbixcblx0XHRcdHBvc2l0aW9uID0galF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICksXG5cdFx0XHRjdXJFbGVtID0galF1ZXJ5KCBlbGVtICksXG5cdFx0XHRwcm9wcyA9IHt9O1xuXG5cdFx0Ly8gU2V0IHBvc2l0aW9uIGZpcnN0LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZlbiBvbiBzdGF0aWMgZWxlbVxuXHRcdGlmICggcG9zaXRpb24gPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRlbGVtLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuXHRcdH1cblxuXHRcdGN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0KCk7XG5cdFx0Y3VyQ1NTVG9wID0galF1ZXJ5LmNzcyggZWxlbSwgXCJ0b3BcIiApO1xuXHRcdGN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImxlZnRcIiApO1xuXHRcdGNhbGN1bGF0ZVBvc2l0aW9uID0gKCBwb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiIHx8IHBvc2l0aW9uID09PSBcImZpeGVkXCIgKSAmJlxuXHRcdFx0KCBjdXJDU1NUb3AgKyBjdXJDU1NMZWZ0ICkuaW5kZXhPZiggXCJhdXRvXCIgKSA+IC0xO1xuXG5cdFx0Ly8gTmVlZCB0byBiZSBhYmxlIHRvIGNhbGN1bGF0ZSBwb3NpdGlvbiBpZiBlaXRoZXJcblx0XHQvLyB0b3Agb3IgbGVmdCBpcyBhdXRvIGFuZCBwb3NpdGlvbiBpcyBlaXRoZXIgYWJzb2x1dGUgb3IgZml4ZWRcblx0XHRpZiAoIGNhbGN1bGF0ZVBvc2l0aW9uICkge1xuXHRcdFx0Y3VyUG9zaXRpb24gPSBjdXJFbGVtLnBvc2l0aW9uKCk7XG5cdFx0XHRjdXJUb3AgPSBjdXJQb3NpdGlvbi50b3A7XG5cdFx0XHRjdXJMZWZ0ID0gY3VyUG9zaXRpb24ubGVmdDtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwO1xuXHRcdFx0Y3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwO1xuXHRcdH1cblxuXHRcdGlmICggaXNGdW5jdGlvbiggb3B0aW9ucyApICkge1xuXG5cdFx0XHQvLyBVc2UgalF1ZXJ5LmV4dGVuZCBoZXJlIHRvIGFsbG93IG1vZGlmaWNhdGlvbiBvZiBjb29yZGluYXRlcyBhcmd1bWVudCAoZ2gtMTg0OClcblx0XHRcdG9wdGlvbnMgPSBvcHRpb25zLmNhbGwoIGVsZW0sIGksIGpRdWVyeS5leHRlbmQoIHt9LCBjdXJPZmZzZXQgKSApO1xuXHRcdH1cblxuXHRcdGlmICggb3B0aW9ucy50b3AgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLnRvcCA9ICggb3B0aW9ucy50b3AgLSBjdXJPZmZzZXQudG9wICkgKyBjdXJUb3A7XG5cdFx0fVxuXHRcdGlmICggb3B0aW9ucy5sZWZ0ICE9IG51bGwgKSB7XG5cdFx0XHRwcm9wcy5sZWZ0ID0gKCBvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCApICsgY3VyTGVmdDtcblx0XHR9XG5cblx0XHRpZiAoIFwidXNpbmdcIiBpbiBvcHRpb25zICkge1xuXHRcdFx0b3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1ckVsZW0uY3NzKCBwcm9wcyApO1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdC8vIG9mZnNldCgpIHJlbGF0ZXMgYW4gZWxlbWVudCdzIGJvcmRlciBib3ggdG8gdGhlIGRvY3VtZW50IG9yaWdpblxuXHRvZmZzZXQ6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdFx0Ly8gUHJlc2VydmUgY2hhaW5pbmcgZm9yIHNldHRlclxuXHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiBvcHRpb25zID09PSB1bmRlZmluZWQgP1xuXHRcdFx0XHR0aGlzIDpcblx0XHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0XHRqUXVlcnkub2Zmc2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApO1xuXHRcdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0dmFyIHJlY3QsIHdpbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFlbGVtICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB6ZXJvcyBmb3IgZGlzY29ubmVjdGVkIGFuZCBoaWRkZW4gKGRpc3BsYXk6IG5vbmUpIGVsZW1lbnRzIChnaC0yMzEwKVxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHRcdC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGFcblx0XHQvLyBkaXNjb25uZWN0ZWQgbm9kZSBpbiBJRSB0aHJvd3MgYW4gZXJyb3Jcblx0XHRpZiAoICFlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cdFx0fVxuXG5cdFx0Ly8gR2V0IGRvY3VtZW50LXJlbGF0aXZlIHBvc2l0aW9uIGJ5IGFkZGluZyB2aWV3cG9ydCBzY3JvbGwgdG8gdmlld3BvcnQtcmVsYXRpdmUgZ0JDUlxuXHRcdHJlY3QgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdHdpbiA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldztcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiByZWN0LnRvcCArIHdpbi5wYWdlWU9mZnNldCxcblx0XHRcdGxlZnQ6IHJlY3QubGVmdCArIHdpbi5wYWdlWE9mZnNldFxuXHRcdH07XG5cdH0sXG5cblx0Ly8gcG9zaXRpb24oKSByZWxhdGVzIGFuIGVsZW1lbnQncyBtYXJnaW4gYm94IHRvIGl0cyBvZmZzZXQgcGFyZW50J3MgcGFkZGluZyBib3hcblx0Ly8gVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgYmVoYXZpb3Igb2YgQ1NTIGFic29sdXRlIHBvc2l0aW9uaW5nXG5cdHBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoICF0aGlzWyAwIF0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIG9mZnNldFBhcmVudCwgb2Zmc2V0LCBkb2MsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0cGFyZW50T2Zmc2V0ID0geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblxuXHRcdC8vIHBvc2l0aW9uOmZpeGVkIGVsZW1lbnRzIGFyZSBvZmZzZXQgZnJvbSB0aGUgdmlld3BvcnQsIHdoaWNoIGl0c2VsZiBhbHdheXMgaGFzIHplcm8gb2Zmc2V0XG5cdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSA9PT0gXCJmaXhlZFwiICkge1xuXG5cdFx0XHQvLyBBc3N1bWUgcG9zaXRpb246Zml4ZWQgaW1wbGllcyBhdmFpbGFiaWxpdHkgb2YgZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG5cdFx0XHRvZmZzZXQgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdG9mZnNldCA9IHRoaXMub2Zmc2V0KCk7XG5cblx0XHRcdC8vIEFjY291bnQgZm9yIHRoZSAqcmVhbCogb2Zmc2V0IHBhcmVudCwgd2hpY2ggY2FuIGJlIHRoZSBkb2N1bWVudCBvciBpdHMgcm9vdCBlbGVtZW50XG5cdFx0XHQvLyB3aGVuIGEgc3RhdGljYWxseSBwb3NpdGlvbmVkIGVsZW1lbnQgaXMgaWRlbnRpZmllZFxuXHRcdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50O1xuXHRcdFx0b2Zmc2V0UGFyZW50ID0gZWxlbS5vZmZzZXRQYXJlbnQgfHwgZG9jLmRvY3VtZW50RWxlbWVudDtcblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmXG5cdFx0XHRcdCggb2Zmc2V0UGFyZW50ID09PSBkb2MuYm9keSB8fCBvZmZzZXRQYXJlbnQgPT09IGRvYy5kb2N1bWVudEVsZW1lbnQgKSAmJlxuXHRcdFx0XHRqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xuXG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0UGFyZW50ICE9PSBlbGVtICYmIG9mZnNldFBhcmVudC5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHQvLyBJbmNvcnBvcmF0ZSBib3JkZXJzIGludG8gaXRzIG9mZnNldCwgc2luY2UgdGhleSBhcmUgb3V0c2lkZSBpdHMgY29udGVudCBvcmlnaW5cblx0XHRcdFx0cGFyZW50T2Zmc2V0ID0galF1ZXJ5KCBvZmZzZXRQYXJlbnQgKS5vZmZzZXQoKTtcblx0XHRcdFx0cGFyZW50T2Zmc2V0LnRvcCArPSBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwiYm9yZGVyVG9wV2lkdGhcIiwgdHJ1ZSApO1xuXHRcdFx0XHRwYXJlbnRPZmZzZXQubGVmdCArPSBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwiYm9yZGVyTGVmdFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTdWJ0cmFjdCBwYXJlbnQgb2Zmc2V0cyBhbmQgZWxlbWVudCBtYXJnaW5zXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogb2Zmc2V0LnRvcCAtIHBhcmVudE9mZnNldC50b3AgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpblRvcFwiLCB0cnVlICksXG5cdFx0XHRsZWZ0OiBvZmZzZXQubGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0IC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIsIHRydWUgKVxuXHRcdH07XG5cdH0sXG5cblx0Ly8gVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gZG9jdW1lbnRFbGVtZW50IGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG5cdC8vIDEpIEZvciB0aGUgZWxlbWVudCBpbnNpZGUgdGhlIGlmcmFtZSB3aXRob3V0IG9mZnNldFBhcmVudCwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm5cblx0Ly8gICAgZG9jdW1lbnRFbGVtZW50IG9mIHRoZSBwYXJlbnQgd2luZG93XG5cdC8vIDIpIEZvciB0aGUgaGlkZGVuIG9yIGRldGFjaGVkIGVsZW1lbnRcblx0Ly8gMykgRm9yIGJvZHkgb3IgaHRtbCBlbGVtZW50LCBpLmUuIGluIGNhc2Ugb2YgdGhlIGh0bWwgbm9kZSAtIGl0IHdpbGwgcmV0dXJuIGl0c2VsZlxuXHQvL1xuXHQvLyBidXQgdGhvc2UgZXhjZXB0aW9ucyB3ZXJlIG5ldmVyIHByZXNlbnRlZCBhcyBhIHJlYWwgbGlmZSB1c2UtY2FzZXNcblx0Ly8gYW5kIG1pZ2h0IGJlIGNvbnNpZGVyZWQgYXMgbW9yZSBwcmVmZXJhYmxlIHJlc3VsdHMuXG5cdC8vXG5cdC8vIFRoaXMgbG9naWMsIGhvd2V2ZXIsIGlzIG5vdCBndWFyYW50ZWVkIGFuZCBjYW4gY2hhbmdlIGF0IGFueSBwb2ludCBpbiB0aGUgZnV0dXJlXG5cdG9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudDtcblxuXHRcdFx0d2hpbGUgKCBvZmZzZXRQYXJlbnQgJiYgalF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50Lm9mZnNldFBhcmVudDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9mZnNldFBhcmVudCB8fCBkb2N1bWVudEVsZW1lbnQ7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbi8vIENyZWF0ZSBzY3JvbGxMZWZ0IGFuZCBzY3JvbGxUb3AgbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgc2Nyb2xsTGVmdDogXCJwYWdlWE9mZnNldFwiLCBzY3JvbGxUb3A6IFwicGFnZVlPZmZzZXRcIiB9LCBmdW5jdGlvbiggbWV0aG9kLCBwcm9wICkge1xuXHR2YXIgdG9wID0gXCJwYWdlWU9mZnNldFwiID09PSBwcm9wO1xuXG5cdGpRdWVyeS5mblsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdmFsICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBtZXRob2QsIHZhbCApIHtcblxuXHRcdFx0Ly8gQ29hbGVzY2UgZG9jdW1lbnRzIGFuZCB3aW5kb3dzXG5cdFx0XHR2YXIgd2luO1xuXHRcdFx0aWYgKCBpc1dpbmRvdyggZWxlbSApICkge1xuXHRcdFx0XHR3aW4gPSBlbGVtO1xuXHRcdFx0fSBlbHNlIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0d2luID0gZWxlbS5kZWZhdWx0Vmlldztcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHdpbiA/IHdpblsgcHJvcCBdIDogZWxlbVsgbWV0aG9kIF07XG5cdFx0XHR9XG5cblx0XHRcdGlmICggd2luICkge1xuXHRcdFx0XHR3aW4uc2Nyb2xsVG8oXG5cdFx0XHRcdFx0IXRvcCA/IHZhbCA6IHdpbi5wYWdlWE9mZnNldCxcblx0XHRcdFx0XHR0b3AgPyB2YWwgOiB3aW4ucGFnZVlPZmZzZXRcblx0XHRcdFx0KTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbVsgbWV0aG9kIF0gPSB2YWw7XG5cdFx0XHR9XG5cdFx0fSwgbWV0aG9kLCB2YWwsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fTtcbn0gKTtcblxuLy8gU3VwcG9ydDogU2FmYXJpIDw9NyAtIDkuMSwgQ2hyb21lIDw9MzcgLSA0OVxuLy8gQWRkIHRoZSB0b3AvbGVmdCBjc3NIb29rcyB1c2luZyBqUXVlcnkuZm4ucG9zaXRpb25cbi8vIFdlYmtpdCBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA4NFxuLy8gQmxpbmsgYnVnOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD01ODkzNDdcbi8vIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyBwZXJjZW50IHdoZW4gc3BlY2lmaWVkIGZvciB0b3AvbGVmdC9ib3R0b20vcmlnaHQ7XG4vLyByYXRoZXIgdGhhbiBtYWtlIHRoZSBjc3MgbW9kdWxlIGRlcGVuZCBvbiB0aGUgb2Zmc2V0IG1vZHVsZSwganVzdCBjaGVjayBmb3IgaXQgaGVyZVxualF1ZXJ5LmVhY2goIFsgXCJ0b3BcIiwgXCJsZWZ0XCIgXSwgZnVuY3Rpb24oIF9pLCBwcm9wICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIHByb3AgXSA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5waXhlbFBvc2l0aW9uLFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGNvbXB1dGVkID0gY3VyQ1NTKCBlbGVtLCBwcm9wICk7XG5cblx0XHRcdFx0Ly8gSWYgY3VyQ1NTIHJldHVybnMgcGVyY2VudGFnZSwgZmFsbGJhY2sgdG8gb2Zmc2V0XG5cdFx0XHRcdHJldHVybiBybnVtbm9ucHgudGVzdCggY29tcHV0ZWQgKSA/XG5cdFx0XHRcdFx0alF1ZXJ5KCBlbGVtICkucG9zaXRpb24oKVsgcHJvcCBdICsgXCJweFwiIDpcblx0XHRcdFx0XHRjb21wdXRlZDtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59ICk7XG5cblxuLy8gQ3JlYXRlIGlubmVySGVpZ2h0LCBpbm5lcldpZHRoLCBoZWlnaHQsIHdpZHRoLCBvdXRlckhlaWdodCBhbmQgb3V0ZXJXaWR0aCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBIZWlnaHQ6IFwiaGVpZ2h0XCIsIFdpZHRoOiBcIndpZHRoXCIgfSwgZnVuY3Rpb24oIG5hbWUsIHR5cGUgKSB7XG5cdGpRdWVyeS5lYWNoKCB7XG5cdFx0cGFkZGluZzogXCJpbm5lclwiICsgbmFtZSxcblx0XHRjb250ZW50OiB0eXBlLFxuXHRcdFwiXCI6IFwib3V0ZXJcIiArIG5hbWVcblx0fSwgZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7XG5cblx0XHQvLyBNYXJnaW4gaXMgb25seSBmb3Igb3V0ZXJIZWlnaHQsIG91dGVyV2lkdGhcblx0XHRqUXVlcnkuZm5bIGZ1bmNOYW1lIF0gPSBmdW5jdGlvbiggbWFyZ2luLCB2YWx1ZSApIHtcblx0XHRcdHZhciBjaGFpbmFibGUgPSBhcmd1bWVudHMubGVuZ3RoICYmICggZGVmYXVsdEV4dHJhIHx8IHR5cGVvZiBtYXJnaW4gIT09IFwiYm9vbGVhblwiICksXG5cdFx0XHRcdGV4dHJhID0gZGVmYXVsdEV4dHJhIHx8ICggbWFyZ2luID09PSB0cnVlIHx8IHZhbHVlID09PSB0cnVlID8gXCJtYXJnaW5cIiA6IFwiYm9yZGVyXCIgKTtcblxuXHRcdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgZG9jO1xuXG5cdFx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vICQoIHdpbmRvdyApLm91dGVyV2lkdGgvSGVpZ2h0IHJldHVybiB3L2ggaW5jbHVkaW5nIHNjcm9sbGJhcnMgKGdoLTE3MjkpXG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmNOYW1lLmluZGV4T2YoIFwib3V0ZXJcIiApID09PSAwID9cblx0XHRcdFx0XHRcdGVsZW1bIFwiaW5uZXJcIiArIG5hbWUgXSA6XG5cdFx0XHRcdFx0XHRlbGVtLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgXCJjbGllbnRcIiArIG5hbWUgXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBoZWlnaHRcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdGRvYyA9IGVsZW0uZG9jdW1lbnRFbGVtZW50O1xuXG5cdFx0XHRcdFx0Ly8gRWl0aGVyIHNjcm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdIG9yIGNsaWVudFtXaWR0aC9IZWlnaHRdLFxuXHRcdFx0XHRcdC8vIHdoaWNoZXZlciBpcyBncmVhdGVzdFxuXHRcdFx0XHRcdHJldHVybiBNYXRoLm1heChcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJzY3JvbGxcIiArIG5hbWUgXSwgZG9jWyBcInNjcm9sbFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcIm9mZnNldFwiICsgbmFtZSBdLCBkb2NbIFwib2Zmc2V0XCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRkb2NbIFwiY2xpZW50XCIgKyBuYW1lIF1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXG5cdFx0XHRcdFx0Ly8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGluZyBidXQgbm90IGZvcmNpbmcgcGFyc2VGbG9hdFxuXHRcdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsIGV4dHJhICkgOlxuXG5cdFx0XHRcdFx0Ly8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudFxuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgdHlwZSwgdmFsdWUsIGV4dHJhICk7XG5cdFx0XHR9LCB0eXBlLCBjaGFpbmFibGUgPyBtYXJnaW4gOiB1bmRlZmluZWQsIGNoYWluYWJsZSApO1xuXHRcdH07XG5cdH0gKTtcbn0gKTtcblxuXG5qUXVlcnkuZWFjaCggW1xuXHRcImFqYXhTdGFydFwiLFxuXHRcImFqYXhTdG9wXCIsXG5cdFwiYWpheENvbXBsZXRlXCIsXG5cdFwiYWpheEVycm9yXCIsXG5cdFwiYWpheFN1Y2Nlc3NcIixcblx0XCJhamF4U2VuZFwiXG5dLCBmdW5jdGlvbiggX2ksIHR5cGUgKSB7XG5cdGpRdWVyeS5mblsgdHlwZSBdID0gZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlLCBmbiApO1xuXHR9O1xufSApO1xuXG5cblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0YmluZDogZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIG51bGwsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuYmluZDogZnVuY3Rpb24oIHR5cGVzLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApO1xuXHR9LFxuXG5cdGRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHtcblxuXHRcdC8vICggbmFtZXNwYWNlICkgb3IgKCBzZWxlY3RvciwgdHlwZXMgWywgZm5dIClcblx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/XG5cdFx0XHR0aGlzLm9mZiggc2VsZWN0b3IsIFwiKipcIiApIDpcblx0XHRcdHRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgXCIqKlwiLCBmbiApO1xuXHR9LFxuXG5cdGhvdmVyOiBmdW5jdGlvbiggZm5PdmVyLCBmbk91dCApIHtcblx0XHRyZXR1cm4gdGhpc1xuXHRcdFx0Lm9uKCBcIm1vdXNlZW50ZXJcIiwgZm5PdmVyIClcblx0XHRcdC5vbiggXCJtb3VzZWxlYXZlXCIsIGZuT3V0IHx8IGZuT3ZlciApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKFxuXHQoIFwiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgXCIgK1xuXHRcIm1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIFwiICtcblx0XCJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51XCIgKS5zcGxpdCggXCIgXCIgKSxcblx0ZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXG5cdFx0Ly8gSGFuZGxlIGV2ZW50IGJpbmRpbmdcblx0XHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBkYXRhLCBmbiApIHtcblx0XHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/XG5cdFx0XHRcdHRoaXMub24oIG5hbWUsIG51bGwsIGRhdGEsIGZuICkgOlxuXHRcdFx0XHR0aGlzLnRyaWdnZXIoIG5hbWUgKTtcblx0XHR9O1xuXHR9XG4pO1xuXG5cblxuXG4vLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHlcbi8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJTUFxuLy8gUmVxdWlyZSB0aGF0IHRoZSBcIndoaXRlc3BhY2UgcnVuXCIgc3RhcnRzIGZyb20gYSBub24td2hpdGVzcGFjZVxuLy8gdG8gYXZvaWQgTyhOXjIpIGJlaGF2aW9yIHdoZW4gdGhlIGVuZ2luZSB3b3VsZCB0cnkgbWF0Y2hpbmcgXCJcXHMrJFwiIGF0IGVhY2ggc3BhY2UgcG9zaXRpb24uXG52YXIgcnRyaW0gPSAvXltcXHNcXHVGRUZGXFx4QTBdK3woW15cXHNcXHVGRUZGXFx4QTBdKVtcXHNcXHVGRUZGXFx4QTBdKyQvZztcblxuLy8gQmluZCBhIGZ1bmN0aW9uIHRvIGEgY29udGV4dCwgb3B0aW9uYWxseSBwYXJ0aWFsbHkgYXBwbHlpbmcgYW55XG4vLyBhcmd1bWVudHMuXG4vLyBqUXVlcnkucHJveHkgaXMgZGVwcmVjYXRlZCB0byBwcm9tb3RlIHN0YW5kYXJkcyAoc3BlY2lmaWNhbGx5IEZ1bmN0aW9uI2JpbmQpXG4vLyBIb3dldmVyLCBpdCBpcyBub3Qgc2xhdGVkIGZvciByZW1vdmFsIGFueSB0aW1lIHNvb25cbmpRdWVyeS5wcm94eSA9IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHtcblx0dmFyIHRtcCwgYXJncywgcHJveHk7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHR0bXAgPSBmblsgY29udGV4dCBdO1xuXHRcdGNvbnRleHQgPSBmbjtcblx0XHRmbiA9IHRtcDtcblx0fVxuXG5cdC8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFibGUsIGluIHRoZSBzcGVjXG5cdC8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuXG5cdGlmICggIWlzRnVuY3Rpb24oIGZuICkgKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIFNpbXVsYXRlZCBiaW5kXG5cdGFyZ3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDIgKTtcblx0cHJveHkgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZm4uYXBwbHkoIGNvbnRleHQgfHwgdGhpcywgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApICkgKTtcblx0fTtcblxuXHQvLyBTZXQgdGhlIGd1aWQgb2YgdW5pcXVlIGhhbmRsZXIgdG8gdGhlIHNhbWUgb2Ygb3JpZ2luYWwgaGFuZGxlciwgc28gaXQgY2FuIGJlIHJlbW92ZWRcblx0cHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlkKys7XG5cblx0cmV0dXJuIHByb3h5O1xufTtcblxualF1ZXJ5LmhvbGRSZWFkeSA9IGZ1bmN0aW9uKCBob2xkICkge1xuXHRpZiAoIGhvbGQgKSB7XG5cdFx0alF1ZXJ5LnJlYWR5V2FpdCsrO1xuXHR9IGVsc2Uge1xuXHRcdGpRdWVyeS5yZWFkeSggdHJ1ZSApO1xuXHR9XG59O1xualF1ZXJ5LmlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xualF1ZXJ5LnBhcnNlSlNPTiA9IEpTT04ucGFyc2U7XG5qUXVlcnkubm9kZU5hbWUgPSBub2RlTmFtZTtcbmpRdWVyeS5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcbmpRdWVyeS5pc1dpbmRvdyA9IGlzV2luZG93O1xualF1ZXJ5LmNhbWVsQ2FzZSA9IGNhbWVsQ2FzZTtcbmpRdWVyeS50eXBlID0gdG9UeXBlO1xuXG5qUXVlcnkubm93ID0gRGF0ZS5ub3c7XG5cbmpRdWVyeS5pc051bWVyaWMgPSBmdW5jdGlvbiggb2JqICkge1xuXG5cdC8vIEFzIG9mIGpRdWVyeSAzLjAsIGlzTnVtZXJpYyBpcyBsaW1pdGVkIHRvXG5cdC8vIHN0cmluZ3MgYW5kIG51bWJlcnMgKHByaW1pdGl2ZXMgb3Igb2JqZWN0cylcblx0Ly8gdGhhdCBjYW4gYmUgY29lcmNlZCB0byBmaW5pdGUgbnVtYmVycyAoZ2gtMjY2Milcblx0dmFyIHR5cGUgPSBqUXVlcnkudHlwZSggb2JqICk7XG5cdHJldHVybiAoIHR5cGUgPT09IFwibnVtYmVyXCIgfHwgdHlwZSA9PT0gXCJzdHJpbmdcIiApICYmXG5cblx0XHQvLyBwYXJzZUZsb2F0IE5hTnMgbnVtZXJpYy1jYXN0IGZhbHNlIHBvc2l0aXZlcyAoXCJcIilcblx0XHQvLyAuLi5idXQgbWlzaW50ZXJwcmV0cyBsZWFkaW5nLW51bWJlciBzdHJpbmdzLCBwYXJ0aWN1bGFybHkgaGV4IGxpdGVyYWxzIChcIjB4Li4uXCIpXG5cdFx0Ly8gc3VidHJhY3Rpb24gZm9yY2VzIGluZmluaXRpZXMgdG8gTmFOXG5cdFx0IWlzTmFOKCBvYmogLSBwYXJzZUZsb2F0KCBvYmogKSApO1xufTtcblxualF1ZXJ5LnRyaW0gPSBmdW5jdGlvbiggdGV4dCApIHtcblx0cmV0dXJuIHRleHQgPT0gbnVsbCA/XG5cdFx0XCJcIiA6XG5cdFx0KCB0ZXh0ICsgXCJcIiApLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKTtcbn07XG5cblxuXG4vLyBSZWdpc3RlciBhcyBhIG5hbWVkIEFNRCBtb2R1bGUsIHNpbmNlIGpRdWVyeSBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggb3RoZXJcbi8vIGZpbGVzIHRoYXQgbWF5IHVzZSBkZWZpbmUsIGJ1dCBub3QgdmlhIGEgcHJvcGVyIGNvbmNhdGVuYXRpb24gc2NyaXB0IHRoYXRcbi8vIHVuZGVyc3RhbmRzIGFub255bW91cyBBTUQgbW9kdWxlcy4gQSBuYW1lZCBBTUQgaXMgc2FmZXN0IGFuZCBtb3N0IHJvYnVzdFxuLy8gd2F5IHRvIHJlZ2lzdGVyLiBMb3dlcmNhc2UganF1ZXJ5IGlzIHVzZWQgYmVjYXVzZSBBTUQgbW9kdWxlIG5hbWVzIGFyZVxuLy8gZGVyaXZlZCBmcm9tIGZpbGUgbmFtZXMsIGFuZCBqUXVlcnkgaXMgbm9ybWFsbHkgZGVsaXZlcmVkIGluIGEgbG93ZXJjYXNlXG4vLyBmaWxlIG5hbWUuIERvIHRoaXMgYWZ0ZXIgY3JlYXRpbmcgdGhlIGdsb2JhbCBzbyB0aGF0IGlmIGFuIEFNRCBtb2R1bGUgd2FudHNcbi8vIHRvIGNhbGwgbm9Db25mbGljdCB0byBoaWRlIHRoaXMgdmVyc2lvbiBvZiBqUXVlcnksIGl0IHdpbGwgd29yay5cblxuLy8gTm90ZSB0aGF0IGZvciBtYXhpbXVtIHBvcnRhYmlsaXR5LCBsaWJyYXJpZXMgdGhhdCBhcmUgbm90IGpRdWVyeSBzaG91bGRcbi8vIGRlY2xhcmUgdGhlbXNlbHZlcyBhcyBhbm9ueW1vdXMgbW9kdWxlcywgYW5kIGF2b2lkIHNldHRpbmcgYSBnbG9iYWwgaWYgYW5cbi8vIEFNRCBsb2FkZXIgaXMgcHJlc2VudC4galF1ZXJ5IGlzIGEgc3BlY2lhbCBjYXNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvd2lraS9VcGRhdGluZy1leGlzdGluZy1saWJyYXJpZXMjd2lraS1hbm9uXG5cbmlmICggdHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQgKSB7XG5cdGRlZmluZSggXCJqcXVlcnlcIiwgW10sIGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnk7XG5cdH0gKTtcbn1cblxuXG5cblxudmFyXG5cblx0Ly8gTWFwIG92ZXIgalF1ZXJ5IGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LFxuXG5cdC8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF8kID0gd2luZG93LiQ7XG5cbmpRdWVyeS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oIGRlZXAgKSB7XG5cdGlmICggd2luZG93LiQgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cuJCA9IF8kO1xuXHR9XG5cblx0aWYgKCBkZWVwICYmIHdpbmRvdy5qUXVlcnkgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnk7XG59O1xuXG4vLyBFeHBvc2UgalF1ZXJ5IGFuZCAkIGlkZW50aWZpZXJzLCBldmVuIGluIEFNRFxuLy8gKHRyYWMtNzEwMiNjb21tZW50OjEwLCBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9wdWxsLzU1Nylcbi8vIGFuZCBDb21tb25KUyBmb3IgYnJvd3NlciBlbXVsYXRvcnMgKHRyYWMtMTM1NjYpXG5pZiAoIHR5cGVvZiBub0dsb2JhbCA9PT0gXCJ1bmRlZmluZWRcIiApIHtcblx0d2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0galF1ZXJ5O1xufVxuXG5cblxuXG5yZXR1cm4galF1ZXJ5O1xufSApO1xuIiwiaW1wb3J0IHsgSUFjdGlvbiB9IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG5leHBvcnQgY29uc3QgYWN0aW9uQWRkaW5zIDpSZWNvcmQ8c3RyaW5nLElBY3Rpb24+PXt9O1xyXG4iLCJcclxuaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgIElBY3Rpb24sSUFjdGlvblJlc3VsdCwgSUFjdGlvbk5vZGUsIElBY3Rpb25Qcm9wZXJ0eSwgSUZpZWxkIH0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcblxyXG5pbnRlcmZhY2UgSU11c3RJbnB1dFByb3Bze1xyXG4gICAgZmllbGQ6SUZpZWxkO1xyXG4gICAgbWVzc2FnZTpzdHJpbmc7IFxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTXVzdElucHV0QWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbntcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICAgIHByb3BzOklNdXN0SW5wdXRQcm9wcztcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5uYW1lPVwi5b+F6aCI44OB44Kn44OD44KvXCI7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1bXTtcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICAgICAgdGhpcy5wcm9wcz17XHJcbiAgICAgICAgICAgIGZpZWxkOntjb2RlOicnfSxcclxuICAgICAgICAgICAgbWVzc2FnZTonJ1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOklBY3Rpb25Ob2RlLGV2ZW50OmFueSk6UHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdD17XHJcbiAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OmZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzPWFjdGlvbk5vZGUuYWN0aW9uUHJvcHM7XHJcbiAgICAgICAgaWYgKCEoJ2ZpZWxkJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdtZXNzYWdlJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElNdXN0SW5wdXRQcm9wcztcclxuICAgICAgICBjb25zdCByZWNvcmQgPSBldmVudC5yZWNvcmQ7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXT8udmFsdWU7XHJcbiAgICAgICAgaWYodmFsdWU9PT11bmRlZmluZWQgfHwgdmFsdWU9PT0nJyl7XHJcbiAgICAgICAgICAgIHJlY29yZFt0aGlzLnByb3BzLmZpZWxkLmNvZGVdLmVycm9yPXRoaXMucHJvcHMubWVzc2FnZTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0PSB7XHJcbiAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICByZXN1bHQ6dHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdPXRoaXM7XHJcbiAgICB9XHJcbiAgICBcclxufVxyXG5uZXcgTXVzdElucHV0QWN0aW9uKCk7IiwiZXhwb3J0IGNsYXNzIEZvcm1hdHRlcntcclxuICAgIHN0YXRpYyBudW1iZXJGb3JtYXQobnVtOm51bWJlcixmb3JtYXQ6c3RyaW5nKTpzdHJpbmd7XHJcbiAgICAgICAgbGV0IGludGVnZXJQYXJ0ID0gTWF0aC5mbG9vcihNYXRoLmFicyhudW0pKS50b1N0cmluZygpO1xyXG4gICAgICAgIGxldCBmcmFjdGlvblBhcnQgPSBNYXRoLmFicyhudW0pLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSB8fCAnJztcclxuICAgICAgICBsZXQgaXNOZWdhdGl2ZSA9IG51bSA8IDA7XHJcbiAgICAgICAgbGV0IGlzUGVyY2VudCA9IGZvcm1hdC5pbmNsdWRlcygnJScpOyAgICAgICBcclxuICAgICAgICAvLyAlXHJcbiAgICAgICAgaWYgKGlzUGVyY2VudCkge1xyXG4gICAgICAgICAgICBudW0gKj0gMTAwO1xyXG4gICAgICAgICAgICBpbnRlZ2VyUGFydCA9IE1hdGguZmxvb3IoTWF0aC5hYnMobnVtKSkudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgZnJhY3Rpb25QYXJ0ID0gTWF0aC5hYnMobnVtKS50b1N0cmluZygpLnNwbGl0KCcuJylbMV0gfHwgJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIOWwj+aVsOOBqOaVtOaVsOmDqOWIhuOBruWHpueQhlxyXG4gICAgICAgIGxldCBbaW50ZWdlckZvcm1hdCwgZnJhY3Rpb25Gb3JtYXRdID0gZm9ybWF0LnNwbGl0KCcuJyk7XHJcbiAgICAgICAgaW50ZWdlclBhcnQgPSBpbnRlZ2VyRm9ybWF0ID8gaW50ZWdlclBhcnQucGFkU3RhcnQoaW50ZWdlckZvcm1hdC5yZXBsYWNlKC9bXjBdL2csICcnKS5sZW5ndGgsICcwJykgOiBpbnRlZ2VyUGFydDtcclxuICAgICAgICBmcmFjdGlvblBhcnQgPSBmcmFjdGlvblBhcnQucGFkRW5kKGZyYWN0aW9uRm9ybWF0ID8gZnJhY3Rpb25Gb3JtYXQubGVuZ3RoIDogMCwgJzAnKTtcclxuXHJcbiAgICAgICAgLy8g44Kr44Oe5Yy65YiHXHJcbiAgICAgICAgaWYgKC8sLy50ZXN0KGludGVnZXJGb3JtYXQpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gW107XHJcbiAgICAgICAgICAgIHdoaWxlIChpbnRlZ2VyUGFydC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcGFydHMudW5zaGlmdChpbnRlZ2VyUGFydC5zbGljZSgtMykpO1xyXG4gICAgICAgICAgICBpbnRlZ2VyUGFydCA9IGludGVnZXJQYXJ0LnNsaWNlKDAsIC0zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpbnRlZ2VyUGFydCA9IHBhcnRzLmpvaW4oJywnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOOBmeOBueOBpue1hOWQiOOCj+OBm1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBmcmFjdGlvbkZvcm1hdCA/IGAke2ludGVnZXJQYXJ0fS4ke2ZyYWN0aW9uUGFydH1gIDogaW50ZWdlclBhcnQ7XHJcbiAgICAgICAgcmVzdWx0ID0gaXNOZWdhdGl2ZSA/IGAtJHtyZXN1bHR9YCA6IHJlc3VsdDtcclxuICAgICAgICByZXR1cm4gaXNQZXJjZW50ID8gYCR7cmVzdWx0fSVgIDogcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgICBcclxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICAgIGNvbnN0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpICsgMTtcclxuICAgICAgICBjb25zdCBkYXkgPSBkYXRlLmdldERhdGUoKTtcclxuICAgICAgICBjb25zdCBob3VyID0gZGF0ZS5nZXRIb3VycygpO1xyXG4gICAgICAgIGNvbnN0IG1pbnV0ZSA9IGRhdGUuZ2V0TWludXRlcygpO1xyXG4gICAgICAgIGNvbnN0IHNlY29uZCA9IGRhdGUuZ2V0U2Vjb25kcygpO1xyXG4gICAgICAgIGNvbnN0IG1pbGxpc2Vjb25kID0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKTtcclxuICAgICAgICBjb25zdCB0aW1lWm9uZU9mZnNldCA9IC1kYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgLyA2MDtcclxuICAgICAgXHJcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRzID0ge1xyXG4gICAgICAgICAgJ3l5eXknOiB5ZWFyLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAneXknOiB5ZWFyLnRvU3RyaW5nKCkuc2xpY2UoLTIpLFxyXG4gICAgICAgICAgJ01NJzogbW9udGgudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgJ00nOiBtb250aC50b1N0cmluZygpLFxyXG4gICAgICAgICAgJ2RkJzogZGF5LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSxcclxuICAgICAgICAgICdkJzogZGF5LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAnSEgnOiBob3VyLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSxcclxuICAgICAgICAgICdIJzogaG91ci50b1N0cmluZygpLFxyXG4gICAgICAgICAgJ2hoJzogKGhvdXIgPiAxMiA/IGhvdXIgLSAxMiA6IGhvdXIpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSxcclxuICAgICAgICAgICdoJzogKGhvdXIgPiAxMiA/IGhvdXIgLSAxMiA6IGhvdXIpLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAnbW0nOiBtaW51dGUudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgJ20nOiBtaW51dGUudG9TdHJpbmcoKSxcclxuICAgICAgICAgICdzcyc6IHNlY29uZC50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXHJcbiAgICAgICAgICAncyc6IHNlY29uZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgJ2ZmZic6IG1pbGxpc2Vjb25kLnRvU3RyaW5nKCkucGFkU3RhcnQoMywgJzAnKSxcclxuICAgICAgICAgICd6enonOiAodGltZVpvbmVPZmZzZXQgPj0gMCA/ICcrJyA6ICctJykgKyBNYXRoLmFicyh0aW1lWm9uZU9mZnNldCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpICsgJzowMCdcclxuICAgICAgICB9O1xyXG4gICAgICBcclxuICAgICAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL3l5eXl8eXl8TU18TXxkZHxkfEhIfEh8aGh8aHxtbXxtfHNzfHN8ZmZmfHp6ei9nLCAobWF0Y2gpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXBsYWNlbWVudHNbbWF0Y2ggYXMga2V5b2YgdHlwZW9mIHJlcGxhY2VtZW50c10gfHwgbWF0Y2g7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgIFxyXG5cclxufSIsIlxyXG5pbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyBJRmllbGQsIElBY3Rpb24sSUFjdGlvblJlc3VsdCwgSUFjdGlvbk5vZGUsIElBY3Rpb25Qcm9wZXJ0eSwgSUNvbnRleHQsIElWYXJOYW1lIH0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbmltcG9ydCB7IEZvcm1hdHRlciB9IGZyb20gXCIuLi91dGlsL2Zvcm1hdFwiO1xyXG5cclxuZGVjbGFyZSBnbG9iYWwge1xyXG4gICAgaW50ZXJmYWNlIFdpbmRvdyB7ICRmb3JtYXQ6IGFueTsgfSAgXHJcbn1cclxuXHJcbmludGVyZmFjZSBJQXV0b051bWJlcmluZ1Byb3Bze1xyXG4gICAgLy/mlofmm7jnlarlj7fjgpLmoLzntI3jgZnjgotcclxuICAgIGZpZWxkOklGaWVsZDtcclxuICAgIGZvcm1hdDpzdHJpbmc7XHJcbiAgICBwcmVmaXg6c3RyaW5nO1xyXG4gICAgc3VmZml4OnN0cmluZztcclxuICAgIHZlck5hbWU6SVZhck5hbWU7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBdXRvTnVtYmVyaW5nIGltcGxlbWVudHMgSUFjdGlvbntcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICAgIHByb3BzOklBdXRvTnVtYmVyaW5nUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMubmFtZT1cIuiHquWLleaOoeeVquOBmeOCi1wiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9W107XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gICAgICAgIHRoaXMucHJvcHM9e1xyXG4gICAgICAgICAgICBmaWVsZDp7Y29kZTonJ30sXHJcbiAgICAgICAgICAgIGZvcm1hdDonJyxcclxuICAgICAgICAgICAgcHJlZml4OicnLFxyXG4gICAgICAgICAgICBzdWZmaXg6JycsXHJcbiAgICAgICAgICAgIHZlck5hbWU6e25hbWU6Jyd9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdsb2JhbFRoaXMud2luZG93LiRmb3JtYXQ9dGhpcy5mb3JtYXQ7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gICAgfVxyXG4vKipcclxuICog44Ki44Kv44K344On44Oz44Gu5Yem55CG44KS5a6f6KOF44GZ44KLXHJcbiAqIEBwYXJhbSBhY3Rpb25Ob2RlIOOCouOCr+OCt+ODp+ODs+ODjuODvOODiVxyXG4gKiBAcGFyYW0gZXZlbnQgS2ludG9uZeOBruOCpOODmeODs+ODiFxyXG4gKiBAcGFyYW0gY29udGV4dCDjgrPjg7Pjg4bjgq3jgrnjg4jvvIjjg6zjgrPjg7zjg4njgIHlpInmlbDmg4XloLHjgpLmjIHjgaPjgabjgYTjgovvvIlcclxuICogQHJldHVybnMgXHJcbiAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOklBY3Rpb25Ob2RlLGV2ZW50OmFueSxjb250ZXh0OklDb250ZXh0KTpQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgICAgICBsZXQgcmVzdWx0PXtcclxuICAgICAgICAgICAgY2FuTmV4dDpmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OmZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9YWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgaWYgKCEoJ2ZpZWxkJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdmb3JtYXQnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUgYXMgSUF1dG9OdW1iZXJpbmdQcm9wcztcclxuICAgICAgICAgICAgY29uc3QgcmVjb3JkID0gZXZlbnQucmVjb3JkO1xyXG4gICAgICAgICAgICBjb25zdCBkb2NOdW0gPSBhd2FpdCB0aGlzLmNyZWF0ZU51bWJlcih0aGlzLnByb3BzKTtcclxuICAgICAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0udmFsdWU9ZG9jTnVtO1xyXG4gICAgICAgICAgICAvL+WkieaVsOioreWumlxyXG4gICAgICAgICAgICBpZih0aGlzLnByb3BzLnZlck5hbWUgJiYgdGhpcy5wcm9wcy52ZXJOYW1lLm5hbWUhPT0nJyl7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LnZhcmlhYmxlc1t0aGlzLnByb3BzLnZlck5hbWUubmFtZV09ZG9jTnVtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdD0ge1xyXG4gICAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgICByZXN1bHQ6dHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgIGV2ZW50LmVycm9yPVwi5Yem55CG5Lit55Ww5bi444GM55m655Sf44GX44G+44GX44Gf44CCXCI7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBjYW5OZXh0OmZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OmZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXhlY1RlbXBsYXRlKHRlbXBsYXRlOnN0cmluZyk6c3RyaW5ne1xyXG4gICAgICAgIGlmKHRlbXBsYXRlPT09dW5kZWZpbmVkKSByZXR1cm4gJyc7XHJcbiAgICAgICAgY29uc3QgcmVnZXggPSAvXFwkXFx7KFtefV0rKVxcfS9nO1xyXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKHJlZ2V4LChtYXRjaCxleHByKT0+e1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5leGVjRXZhbChtYXRjaCxleHByKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBleGVjRXZhbChtYXRjaDpzdHJpbmcsZXhwcjpzdHJpbmcpOnN0cmluZ3tcclxuICAgICAgICBjb25zb2xlLmxvZyhtYXRjaCk7XHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIHJldHVybiBldmFsKGV4cHIpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvcm1hdChwYXR0ZXJuOnN0cmluZyk6c3RyaW5ne1xyXG4gICAgICAgIGNvbnN0IG5vdz1uZXcgRGF0ZSgpO1xyXG4gICAgICAgIHJldHVybiBGb3JtYXR0ZXIuZGF0ZUZvcm1hdChub3csIHBhdHRlcm4pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNyZWF0ZU51bWJlcihwcm9wczpJQXV0b051bWJlcmluZ1Byb3BzKXtcclxuICAgICAgICBsZXQgbnVtYmVyIDpzdHJpbmc9Jyc7XHJcbiAgICAgICAgbGV0IHByZWZpeDpzdHJpbmc9Jyc7XHJcbiAgICAgICAgbGV0IHN1ZmZpeDpzdHJpbmc9Jyc7XHJcbiAgICAgICAgbGV0IG5vPTE7ICAgICBcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIG5vID0gYXdhaXQgdGhpcy5mZXRjaE5vKCk7XHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihwcm9wcy5mb3JtYXQhPT11bmRlZmluZWQgJiYgcHJvcHMuZm9ybWF0IT09Jycpe1xyXG4gICAgICAgICAgICBudW1iZXI9Rm9ybWF0dGVyLm51bWJlckZvcm1hdChubywgcHJvcHMuZm9ybWF0KTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgbnVtYmVyPW5vLnRvU3RyaW5nKDEwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKHByb3BzLnByZWZpeCE9PXVuZGVmaW5lZCAmJiBwcm9wcy5wcmVmaXghPT0nJyl7XHJcbiAgICAgICAgICAgIHByZWZpeD10aGlzLmV4ZWNUZW1wbGF0ZShwcm9wcy5wcmVmaXgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYocHJvcHMuc3VmZml4IT09dW5kZWZpbmVkICYmIHByb3BzLnN1ZmZpeCE9PScnKXtcclxuICAgICAgICAgICAgc3VmZml4PXRoaXMuZXhlY1RlbXBsYXRlKHByb3BzLnN1ZmZpeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgJHtwcmVmaXh9JHtudW1iZXJ9JHtzdWZmaXh9YDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmZXRjaE5vKCk6UHJvbWlzZTxudW1iZXI+e1xyXG4gICAgICAgIGxldCByZWNObz0xO1xyXG5cclxuICAgICAgICByZXR1cm4gYXdhaXQgbmV3IGtpbnRvbmUuUHJvbWlzZTxudW1iZXI+KChyZXNvbHZlLHJlamVjdCk9PntcclxuICAgICAgICAgICAgY29uc3QgYXBwdXJsID0ga2ludG9uZS5hcGkudXJsKCcvay92MS9yZWNvcmRzJyx0cnVlKTtcclxuICAgICAgICAgICAgY29uc3QgcGFyYW1zPXtcclxuICAgICAgICAgICAgICAgIGFwcDpraW50b25lLmFwcC5nZXRJZCgpLFxyXG4gICAgICAgICAgICAgICAgZmllbGRzOlsnJGlkJ10sXHJcbiAgICAgICAgICAgICAgICBxdWVyeTonbGltaXQgMSdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGtpbnRvbmUuYXBpKGFwcHVybCwnR0VUJyxwYXJhbXMpLnRoZW4oKHJlc3ApPT57XHJcbiAgICAgICAgICAgICAgICBpZihyZXNwLnJlY29yZHNbMF0hPT1udWxsKXtcclxuICAgICAgICAgICAgICAgICAgICByZWNObyA9IHBhcnNlSW50KHJlc3AucmVjb3Jkc1swXS4kaWQudmFsdWUsMTApKzE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlY05vKTtcclxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKT0+e1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV09dGhpcztcclxuICAgIH1cclxuICAgIFxyXG59XHJcbm5ldyBBdXRvTnVtYmVyaW5nKCk7IiwiaW1wb3J0IHsgSUNvbnRleHQgfSBmcm9tIFwiLi9BY3Rpb25UeXBlc1wiO1xyXG5cclxuLy/jg47jg7zjg4nnqK7liKVcclxuZXhwb3J0IGVudW0gTm9kZVR5cGV7XHJcbiAgUm9vdCA9ICdyb290JyxcclxuICBMb2dpY0dyb3VwID0nbG9naWNncm91cCcsXHJcbiAgQ29uZGl0aW9uID0nY29uZGl0aW9uJ1xyXG59XHJcblxyXG4vL+ODreOCuOODg+OCr+OCquODmuODrOODvOOCv+ODvFxyXG5leHBvcnQgZW51bSBMb2dpY2FsT3BlcmF0b3J7XHJcbiAgQU5EID0gJ0FORCcsXHJcbiAgT1IgPSAnT1InXHJcbn1cclxuXHJcbi8v5p2h5Lu244Kq44Oa44Os44O844K/44O8XHJcbmV4cG9ydCBlbnVtIE9wZXJhdG9ye1xyXG4gIEVxdWFsID0gJz0nLFxyXG4gIE5vdEVxdWFsPSchPScsXHJcbiAgR3JlYXRlciA9ICc+JyxcclxuICBHcmVhdGVyT3JFcXVhbCA9ICc+PScsXHJcbiAgTGVzcyA9ICc8JyxcclxuICBMZXNzT3JFcXVhbCA9ICc8PScsXHJcbiAgQ29udGFpbnMgPSAnY29udGFpbnMnLFxyXG4gIE5vdENvbnRhaW5zID0gJ25vdCBjb250YWlucycsXHJcbiAgU3RhcnRXaXRoID0gJ3N0YXJ0IFdpdGgnLFxyXG4gIEVuZFdpdGggPSAnZW5kIHdpdGgnLFxyXG4gIE5vdFN0YXJ0V2l0aCA9ICdub3Qgc3RhcnQgd2l0aCcsXHJcbiAgTm90RW5kV2l0aCA9ICdub3QgZW5kIHdpdGgnXHJcbn1cclxuXHJcblxyXG4vLyBJTm9kZVxyXG5leHBvcnQgaW50ZXJmYWNlIElOb2RlIHtcclxuICBpbmRleDpudW1iZXI7XHJcbiAgdHlwZTogTm9kZVR5cGU7XHJcbiAgaGVhZGVyOnN0cmluZztcclxuICBwYXJlbnQ6IElOb2RlIHwgbnVsbDtcclxuICBsb2dpY2FsT3BlcmF0b3I6TG9naWNhbE9wZXJhdG9yXHJcbn1cclxuXHJcbi8vIOODreOCuOODg+OCr+ODjuODvOODiVxyXG5leHBvcnQgY2xhc3MgR3JvdXBOb2RlIGltcGxlbWVudHMgSU5vZGUge1xyXG4gIGluZGV4Om51bWJlcjtcclxuICB0eXBlOiBOb2RlVHlwZTtcclxuICBjaGlsZHJlbjogSU5vZGVbXTtcclxuICBwYXJlbnQ6IElOb2RlIHwgbnVsbDtcclxuICBsb2dpY2FsT3BlcmF0b3I6IExvZ2ljYWxPcGVyYXRvcjtcclxuICBnZXQgbGFiZWwoKTpzdHJpbmd7XHJcbiAgICByZXR1cm4gdGhpcy5sb2dpY2FsT3BlcmF0b3I7XHJcbiAgfVxyXG4gIGdldCBoZWFkZXIoKTpzdHJpbmd7XHJcbiAgICByZXR1cm4gdGhpcy50eXBlPT09Tm9kZVR5cGUuUm9vdD8ncm9vdCc6J2dlbmVyaWMnO1xyXG4gIH1cclxuICBnZXQgZXhwYW5kZWQoKTpib29sZWFue1xyXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoPjA7XHJcbiAgfVxyXG4gIGNvbnN0cnVjdG9yKGxvZ2ljT3A6TG9naWNhbE9wZXJhdG9yLCBwYXJlbnQ6IElOb2RlIHwgbnVsbCkge1xyXG4gICAgdGhpcy5pbmRleD0wO1xyXG4gICAgdGhpcy50eXBlID0gcGFyZW50PT1udWxsP05vZGVUeXBlLlJvb3Q6IE5vZGVUeXBlLkxvZ2ljR3JvdXA7XHJcbiAgICB0aGlzLmxvZ2ljYWxPcGVyYXRvciA9IGxvZ2ljT3A7XHJcbiAgICB0aGlzLnBhcmVudD1wYXJlbnQ7XHJcbiAgICB0aGlzLmNoaWxkcmVuPVtdO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21KU09OKGpzb246IGFueSwgcGFyZW50OiBJTm9kZSB8IG51bGwgPSBudWxsKTogR3JvdXBOb2RlIHtcclxuICAgIGNvbnN0IG5vZGUgPSBuZXcgR3JvdXBOb2RlKGpzb24ubG9naWNhbE9wZXJhdG9yLCBwYXJlbnQpO1xyXG4gICAgbm9kZS5pbmRleD1qc29uLmluZGV4O1xyXG4gICAgbm9kZS5jaGlsZHJlbiA9IGpzb24uY2hpbGRyZW4ubWFwKChjaGlsZEpzb246IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gY2hpbGRKc29uLnR5cGUgPT09IE5vZGVUeXBlLkxvZ2ljR3JvdXBcclxuICAgICAgICA/IEdyb3VwTm9kZS5mcm9tSlNPTihjaGlsZEpzb24sIG5vZGUpXHJcbiAgICAgICAgOiBDb25kaXRpb25Ob2RlLmZyb21KU09OKGNoaWxkSnNvbiwgbm9kZSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBub2RlO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbi8vIOadoeS7tuW8j+ODjuODvOODiVxyXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uTm9kZSBpbXBsZW1lbnRzIElOb2RlIHtcclxuICBpbmRleDogbnVtYmVyO1xyXG4gIHR5cGU6IE5vZGVUeXBlO1xyXG4gIHBhcmVudDpJTm9kZTtcclxuICBnZXQgbG9naWNhbE9wZXJhdG9yKCk6IExvZ2ljYWxPcGVyYXRvcntcclxuICAgIHJldHVybiB0aGlzLnBhcmVudC5sb2dpY2FsT3BlcmF0b3I7XHJcbiAgfTtcclxuICBvYmplY3Q6IGFueTsgLy8g5q+U6LyD5YWDXHJcbiAgb3BlcmF0b3I6IE9wZXJhdG9yOyAvLyDmr5TovIPlrZBcclxuICB2YWx1ZTogYW55O1xyXG4gIGdldCBoZWFkZXIoKTpzdHJpbmd7XHJcbiAgICByZXR1cm4gJ2dlbmVyaWMnO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3Iob2JqZWN0OiBhbnksIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IGFueSwgcGFyZW50OiBHcm91cE5vZGUpIHtcclxuICAgIHRoaXMuaW5kZXg9MDtcclxuICAgIHRoaXMudHlwZSA9IE5vZGVUeXBlLkNvbmRpdGlvbjtcclxuICAgIHRoaXMub2JqZWN0ID0gb2JqZWN0O1xyXG4gICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yO1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5wYXJlbnQ9cGFyZW50O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21KU09OKGpzb246IGFueSwgcGFyZW50OiBHcm91cE5vZGUpOiBDb25kaXRpb25Ob2RlIHtcclxuICAgIGNvbnN0IG5vZGU9IG5ldyBDb25kaXRpb25Ob2RlKFxyXG4gICAgICBqc29uLm9iamVjdCxcclxuICAgICAganNvbi5vcGVyYXRvcixcclxuICAgICAganNvbi52YWx1ZSxcclxuICAgICAgcGFyZW50XHJcbiAgICApO1xyXG4gICAgbm9kZS5pbmRleD1qc29uLmluZGV4O1xyXG4gICAgcmV0dXJuIG5vZGU7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICog5p2h5Lu25byP44Gu566h55CG44Kv44Op44K5XHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uVHJlZSB7XHJcbiAgcm9vdDogR3JvdXBOb2RlO1xyXG4gIG1heEluZGV4Om51bWJlcjtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLm1heEluZGV4PTA7XHJcbiAgICB0aGlzLnJvb3QgPSBuZXcgR3JvdXBOb2RlKExvZ2ljYWxPcGVyYXRvci5BTkQsIG51bGwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog44OO44O844OJ6L+95YqgXHJcbiAgICogQHBhcmFtIHBhcmVudCBcclxuICAgKiBAcGFyYW0gbm9kZSBcclxuICAgKi9cclxuICBhZGROb2RlKHBhcmVudDogR3JvdXBOb2RlLCBub2RlOiBJTm9kZSk6IHZvaWQge1xyXG4gICAgdGhpcy5tYXhJbmRleCsrO1xyXG4gICAgbm9kZS5pbmRleD10aGlzLm1heEluZGV4O1xyXG4gICAgcGFyZW50LmNoaWxkcmVuLnB1c2gobm9kZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiAg44OO44O844OJ5YmK6ZmkXHJcbiAgICogQHBhcmFtIG5vZGUgXHJcbiAgICovXHJcbiAgcmVtb3ZlTm9kZShub2RlOiBJTm9kZSk6IHZvaWQge1xyXG4gICAgaWYgKG5vZGUucGFyZW50ID09PSBudWxsKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcign44Or44O844OI44OO44O844OJ5YmK6Zmk44Gn44GN44G+44Gb44KTJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudCBhcyBHcm91cE5vZGU7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gcGFyZW50LmNoaWxkcmVuLmluZGV4T2Yobm9kZSk7XHJcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgcGFyZW50LmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4vKipcclxuICog5p2h5Lu244OE44Oq44O844GL44KJ44Kk44Oz44OH44Kj44Kv44K55YCk44Gn5p2h5Lu244OO44O844OJ44KS5qSc57Si44GZ44KLXHJcbiAqIEBwYXJhbSBpbmRleCBcclxuICogQHJldHVybnMgXHJcbiAqL1xyXG4gIGZpbmRCeUluZGV4KGluZGV4Om51bWJlcik6SU5vZGV8dW5kZWZpbmVke1xyXG4gICAgcmV0dXJuIHRoaXMuZmluZENoaWxkcmVuKHRoaXMucm9vdCxpbmRleCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmjIflrprjga7jg47jg7zjg4njgrDjg6vjg7zjg5fjgYvjgonjgqTjg7Pjg4fjgqPjgq/jgrnlgKTjgafmnaHku7bjg47jg7zjg4njgpLmpJzntKLjgZnjgotcclxuICAgKiBAcGFyYW0gcGFyZW50IFxyXG4gICAqIEBwYXJhbSBpbmRleCBcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBmaW5kQ2hpbGRyZW4ocGFyZW50OiBHcm91cE5vZGUsIGluZGV4OiBudW1iZXIpOiBJTm9kZSB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAocGFyZW50LmluZGV4ID09PSBpbmRleCkge1xyXG4gICAgICByZXR1cm4gcGFyZW50O1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBub2RlIG9mIHBhcmVudC5jaGlsZHJlbikge1xyXG4gICAgICBpZiAobm9kZS5pbmRleCA9PT0gaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gbm9kZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobm9kZS50eXBlICE9PSBOb2RlVHlwZS5Db25kaXRpb24pIHtcclxuICAgICAgICBjb25zdCBmb3VuZE5vZGUgPSB0aGlzLmZpbmRDaGlsZHJlbihub2RlIGFzIEdyb3VwTm9kZSwgaW5kZXgpO1xyXG4gICAgICAgIGlmIChmb3VuZE5vZGUpIHtcclxuICAgICAgICAgIHJldHVybiBmb3VuZE5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIG5vZGUg5pyA5aSn44Gu44Kk44Oz44OH44Kj44Kv44K55YCk44KS5Y+W5b6X44GZ44KLXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgZ2V0TWF4SW5kZXgobm9kZTpJTm9kZSk6bnVtYmVye1xyXG4gICAgbGV0IG1heEluZGV4Om51bWJlcj1ub2RlLmluZGV4O1xyXG4gICAgaWYobm9kZS50eXBlIT09Tm9kZVR5cGUuQ29uZGl0aW9uKXtcclxuICAgICAgY29uc3QgZ3JvdXBOb2RlID0gbm9kZSBhcyBHcm91cE5vZGU7XHJcbiAgICAgIGdyb3VwTm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCk9PntcclxuICAgICAgICAgIGNvbnN0IGNoaWxkTWF4ID0gdGhpcy5nZXRNYXhJbmRleChjaGlsZCk7XHJcbiAgICAgICAgICBpZihjaGlsZE1heD5tYXhJbmRleCl7XHJcbiAgICAgICAgICAgIG1heEluZGV4PWNoaWxkTWF4O1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBtYXhJbmRleDtcclxufVxyXG5cclxuICAvKipcclxuICAgKiDmnaHku7blvI/jgpLooajnpLrjgZnjgotcclxuICAgKiBAcGFyYW0gbm9kZSDmnaHku7bjg47jg7zjg4lcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBidWlsZENvbmRpdGlvblN0cmluZyhub2RlOklOb2RlKXtcclxuICAgIGlmIChub2RlLnR5cGUgIT09IE5vZGVUeXBlLkNvbmRpdGlvbikge1xyXG4gICAgICBsZXQgY29uZGl0aW9uU3RyaW5nID0gJygnO1xyXG4gICAgICBjb25zdCBncm91cE5vZGUgPSBub2RlIGFzIEdyb3VwTm9kZTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBncm91cE5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBjaGlsZENvbmRpdGlvblN0cmluZyA9IHRoaXMuYnVpbGRDb25kaXRpb25TdHJpbmcoZ3JvdXBOb2RlLmNoaWxkcmVuW2ldKTtcclxuICAgICAgICBpZiAoY2hpbGRDb25kaXRpb25TdHJpbmcgIT09ICcnKSB7XHJcbiAgICAgICAgICBjb25kaXRpb25TdHJpbmcgKz0gY2hpbGRDb25kaXRpb25TdHJpbmc7XHJcbiAgICAgICAgICBpZiAoaSA8IGdyb3VwTm9kZS5jaGlsZHJlbi5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvblN0cmluZyArPSBgICR7Z3JvdXBOb2RlLmxvZ2ljYWxPcGVyYXRvcn0gYDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY29uZGl0aW9uU3RyaW5nICs9ICcpJztcclxuICAgICAgcmV0dXJuIGNvbmRpdGlvblN0cmluZztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGNvbmROb2RlPW5vZGUgYXMgQ29uZGl0aW9uTm9kZTtcclxuICAgICAgaWYgKGNvbmROb2RlLm9iamVjdCAmJiBjb25kTm9kZS5vcGVyYXRvciApIHtcclxuICAgICAgICBsZXQgdmFsdWU9Y29uZE5vZGUudmFsdWU7XHJcbiAgICAgICAgaWYodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSdvYmplY3QnICYmICgnbGFiZWwnIGluIHZhbHVlKSl7XHJcbiAgICAgICAgICAgIHZhbHVlID1jb25kTm9kZS52YWx1ZS5sYWJlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke2NvbmROb2RlLm9iamVjdC5uYW1lfSAke2NvbmROb2RlLm9wZXJhdG9yfSAnJHt2YWx1ZX0nYDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICog44GZ44G544Gm5p2h5Lu25byP44KS5Y+W5b6X44GZ44KLXHJcbiAgICovXHJcbiAgZ2V0Q29uZGl0aW9ucyhwYXJlbnQ6R3JvdXBOb2RlKTpDb25kaXRpb25Ob2RlW117XHJcbiAgICBjb25zdCBjb25kaU5vZGVzOkNvbmRpdGlvbk5vZGVbXT1bXTtcclxuICAgIHBhcmVudC5jaGlsZHJlbi5mb3JFYWNoKChub2RlKT0+e1xyXG4gICAgICBpZihub2RlLnR5cGU9PT1Ob2RlVHlwZS5Db25kaXRpb24pe1xyXG4gICAgICAgIGNvbmRpTm9kZXMucHVzaChub2RlIGFzIENvbmRpdGlvbk5vZGUpO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBjb25kaU5vZGVzLnB1c2goLi4udGhpcy5nZXRDb25kaXRpb25zKG5vZGUgYXMgR3JvdXBOb2RlKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGNvbmRpTm9kZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGFyZW50IOOBmeOBueOBpuadoeS7tuOCsOODq+ODvOODl+OCkuWPluW+l+OBmeOCi1xyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGdldEdyb3VwcyhwYXJlbnQ6R3JvdXBOb2RlKTpudW1iZXJbXXtcclxuICAgIGNvbnN0IGdyb3VwczpudW1iZXJbXT1bXTtcclxuICAgIGdyb3Vwcy5wdXNoKHBhcmVudC5pbmRleCk7XHJcbiAgICBwYXJlbnQuY2hpbGRyZW4uZm9yRWFjaCgobm9kZSk9PntcclxuICAgICAgaWYobm9kZS50eXBlIT09Tm9kZVR5cGUuQ29uZGl0aW9uKXtcclxuICAgICAgICBncm91cHMucHVzaCguLi50aGlzLmdldEdyb3Vwcyhub2RlIGFzIEdyb3VwTm9kZSkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBncm91cHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBKc29u44GL44KJ5b6p5YWDXHJcbiAgICogQHBhcmFtIGpzb25TdHJpbmcgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgZnJvbUpzb24oanNvblN0cmluZzogc3RyaW5nKTogSU5vZGUge1xyXG4gICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XHJcbiAgICB0aGlzLnJvb3QgPSBHcm91cE5vZGUuZnJvbUpTT04oanNvbikgYXMgR3JvdXBOb2RlO1xyXG4gICAgdGhpcy5tYXhJbmRleD10aGlzLmdldE1heEluZGV4KHRoaXMucm9vdCk7XHJcbiAgICByZXR1cm4gdGhpcy5yb290O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBKU09O5paH5a2X5YiX44Gr5aSJ5o+b44GZ44KLXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgdG9Kc29uKCk6c3RyaW5ne1xyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMucm9vdCwgKGtleSwgdmFsdWUpID0+IHtcclxuICAgICAgaWYgKGtleSA9PT0gJ3BhcmVudCcpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS50eXBlIDogbnVsbDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOadoeS7tuW8j+OCkuioiOeul+OBmeOCi1xyXG4gICAqIEBwYXJhbSBub2RlIFxyXG4gICAqIEBwYXJhbSBjb250ZXh0IFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGV2YWx1YXRlKG5vZGU6IElOb2RlLCBjb250ZXh0OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmIChub2RlLnR5cGUgPT09IE5vZGVUeXBlLkNvbmRpdGlvbikge1xyXG4gICAgICByZXR1cm4gdGhpcy5ldmFsdWF0ZUNvbmRpdGlvbihub2RlIGFzIENvbmRpdGlvbk5vZGUsIGNvbnRleHQpO1xyXG4gICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IE5vZGVUeXBlLkxvZ2ljR3JvdXAgfHwgbm9kZS50eXBlID09PSBOb2RlVHlwZS5Sb290KSB7XHJcbiAgICAgIGNvbnN0IGdyb3VwTm9kZSA9IG5vZGUgYXMgR3JvdXBOb2RlO1xyXG4gICAgICBjb25zdCByZXN1bHRzID0gZ3JvdXBOb2RlLmNoaWxkcmVuLm1hcChjaGlsZCA9PiB0aGlzLmV2YWx1YXRlKGNoaWxkLCBjb250ZXh0KSk7XHJcbiAgXHJcbiAgICAgIGlmIChncm91cE5vZGUubG9naWNhbE9wZXJhdG9yID09PSBMb2dpY2FsT3BlcmF0b3IuQU5EKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMuZXZlcnkocmVzdWx0ID0+IHJlc3VsdCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZ3JvdXBOb2RlLmxvZ2ljYWxPcGVyYXRvciA9PT0gTG9naWNhbE9wZXJhdG9yLk9SKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMuc29tZShyZXN1bHQgPT4gcmVzdWx0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGxvZ2ljYWwgb3BlcmF0b3InKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBub2RlIHR5cGUnKTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogQ29uZGl0aW9uIG9iamVjdOOBruWApOOCkuWPluW+l+OBmeOCi1xyXG4gICAqIEBwYXJhbSBvYmplY3QgXHJcbiAgICogQHBhcmFtIGNvbnRleHQgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgZ2V0T2JqZWN0VmFsdWUob2JqZWN0OmFueSxjb250ZXh0OklDb250ZXh0KXtcclxuICAgIGlmKCFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCE9PVwib2JqZWN0XCIgfHwgIShcIm9iamVjdFR5cGVcIiBpbiBvYmplY3QpKXtcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgaWYob2JqZWN0Lm9iamVjdFR5cGU9PT0nZmllbGQnKXtcclxuICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IGNvbnRleHQucmVjb3JkW29iamVjdC5jb2RlXTtcclxuICAgICAgaWYoZmllbGRWYWx1ZS50eXBlPT09J05VTUJFUicgJiYgZmllbGRWYWx1ZS52YWx1ZSE9PXVuZGVmaW5lZCl7XHJcbiAgICAgICAgcmV0dXJuIE51bWJlcihmaWVsZFZhbHVlLnZhbHVlKTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgcmV0dXJuIGZpZWxkVmFsdWUudmFsdWU7XHJcbiAgICAgIH0gICAgICBcclxuICAgIH1lbHNlIGlmKG9iamVjdC5vYmplY3RUeXBlPT09J3ZhcmlhYmxlJyl7XHJcbiAgICAgIHJldHVybiBjb250ZXh0LnZhcmlhYmxlc1tvYmplY3QubmFtZV0udmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmr5TovIPjgqrjg5bjgrjjgqfjgq/jg4jjga7lgKTjgpLlj5blvpdcclxuICAgKiBAcGFyYW0gb2JqZWN0IFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGdldENvbmRpdGlvblZhbHVlKG9iamVjdDphbnkpe1xyXG4gICAgaWYoIW9iamVjdCB8fCB0eXBlb2Ygb2JqZWN0IT09XCJvYmplY3RcIil7XHJcbiAgICAgIHJldHVybiBvYmplY3Q7XHJcbiAgICB9XHJcbiAgICBpZihcImxhYmVsXCIgaW4gb2JqZWN0KXtcclxuICAgICAgcmV0dXJuIG9iamVjdC5sYWJlbDtcclxuICAgIH1cclxuICAgIGlmKFwidmFsdWVcIiBpbiBvYmplY3Qpe1xyXG4gICAgICByZXR1cm4gb2JqZWN0LnZhbHVlO1xyXG4gICAgfVxyXG4gICAgaWYoXCJuYW1lXCIgaW4gb2JqZWN0KXtcclxuICAgICAgcmV0dXJuIG9iamVjdC5uYW1lO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5p2h5Lu25byP44KS6KiI566X44GZ44KLXHJcbiAgICogQHBhcmFtIGNvbmRpdGlvbiBcclxuICAgKiBAcGFyYW0gY29udGV4dCBcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBldmFsdWF0ZUNvbmRpdGlvbihjb25kaXRpb246IENvbmRpdGlvbk5vZGUsIGNvbnRleHQ6IElDb250ZXh0KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB7IG9iamVjdCwgb3BlcmF0b3IsIHZhbHVlIH0gPSBjb25kaXRpb247XHJcbiAgICBjb25zdCB0YXJnZXRWYWx1ZSA9IHRoaXMuZ2V0T2JqZWN0VmFsdWUob2JqZWN0LGNvbnRleHQpO1xyXG4gICAgY29uc3QgY29uZGl0aW9uVmFsdWUgPSB0aGlzLmdldENvbmRpdGlvblZhbHVlKHZhbHVlKTtcclxuICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcclxuICAgICAgY2FzZSBPcGVyYXRvci5FcXVhbDpcclxuICAgICAgY2FzZSBPcGVyYXRvci5Ob3RFcXVhbDpcclxuICAgICAgY2FzZSBPcGVyYXRvci5HcmVhdGVyOlxyXG4gICAgICBjYXNlIE9wZXJhdG9yLkdyZWF0ZXJPckVxdWFsOlxyXG4gICAgICBjYXNlIE9wZXJhdG9yLkxlc3M6XHJcbiAgICAgIGNhc2UgT3BlcmF0b3IuTGVzc09yRXF1YWw6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShvcGVyYXRvcix0YXJnZXRWYWx1ZSwgY29uZGl0aW9uVmFsdWUpO1xyXG4gICAgICBjYXNlIE9wZXJhdG9yLkNvbnRhaW5zOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5zKHRhcmdldFZhbHVlLGNvbmRpdGlvblZhbHVlKTtcclxuICAgICAgY2FzZSBPcGVyYXRvci5Ob3RDb250YWluczpcclxuICAgICAgICByZXR1cm4gIXRoaXMuY29udGFpbnModGFyZ2V0VmFsdWUsY29uZGl0aW9uVmFsdWUpO1xyXG4gICAgICBjYXNlIE9wZXJhdG9yLlN0YXJ0V2l0aDpcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydFdpdGgodGFyZ2V0VmFsdWUsY29uZGl0aW9uVmFsdWUpO1xyXG4gICAgICBjYXNlIE9wZXJhdG9yLk5vdFN0YXJ0V2l0aDpcclxuICAgICAgICByZXR1cm4gIXRoaXMuc3RhcnRXaXRoKHRhcmdldFZhbHVlLGNvbmRpdGlvblZhbHVlKTtcclxuICAgICAgY2FzZSBPcGVyYXRvci5FbmRXaXRoOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmVuZHNXaXRoKHRhcmdldFZhbHVlLGNvbmRpdGlvblZhbHVlKTtcclxuICAgICAgY2FzZSBPcGVyYXRvci5Ob3RFbmRXaXRoOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmVuZHNXaXRoKHRhcmdldFZhbHVlLGNvbmRpdGlvblZhbHVlKTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIG9wZXJhdG9yJyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gICAqIOavlOi8g+OCkuWun+ihjOOBmeOCi1xyXG4gICAqIEBwYXJhbSBvcGVyYXRvciBcclxuICAgKiBAcGFyYW0gdGFyZ2V0VmFsdWUgXHJcbiAgICogQHBhcmFtIHZhbHVlIFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGNvbXBhcmUob3BlcmF0b3I6IE9wZXJhdG9yLCB0YXJnZXRWYWx1ZTogYW55LCB2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAvLyB0YXJnZXRWYWx1ZSDjga/ml6XmnJ/ml7bvvIx2YWx1ZSDjgoLml6XmnJ/jgavlpInmj5vjgZfjgabmr5TovIPjgZnjgotcclxuICAgIGlmKHRhcmdldFZhbHVlPT09dW5kZWZpbmVkIHx8IHRhcmdldFZhbHVlPT09bnVsbHx8dGFyZ2V0VmFsdWU9PT0nJyl7XHJcbiAgICAgIGlmKHZhbHVlPT09dW5kZWZpbmVkIHx8IHZhbHVlPT09bnVsbHx8dmFsdWU9PT0nJyl7XHJcbiAgICAgICAgdGFyZ2V0VmFsdWU9Jyc7XHJcbiAgICAgICAgdmFsdWU9Jyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0YXJnZXRWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgY29uc3QgZGF0ZVZhbHVlID0gbmV3IERhdGUodmFsdWUpO1xyXG4gICAgICBpZiAoIWlzTmFOKGRhdGVWYWx1ZS5nZXRUaW1lKCkpKSB7XHJcbiAgICAgICAgdmFsdWUgPSBkYXRlVmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vdGFyZ2V0VmFsdWXjga/mlbDlgKTmmYLvvIx2YWx1ZSDjgpLmlbDlgKTjgavlpInmj5vjgZnjgotcclxuICAgIGVsc2UgaWYgKHR5cGVvZiB0YXJnZXRWYWx1ZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgY29uc3QgbnVtYmVyVmFsdWUgPSBOdW1iZXIodmFsdWUpO1xyXG4gICAgICBpZiAoIWlzTmFOKG51bWJlclZhbHVlKSkge1xyXG4gICAgICAgIHZhbHVlID0gbnVtYmVyVmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiB0YXJnZXRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgc3dpdGNoIChvcGVyYXRvcikge1xyXG4gICAgICBjYXNlIE9wZXJhdG9yLkVxdWFsOlxyXG4gICAgICAgIHJldHVybiB0YXJnZXRWYWx1ZSA9PT0gdmFsdWU7XHJcbiAgICAgIGNhc2UgT3BlcmF0b3IuTm90RXF1YWw6XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldFZhbHVlICE9PSB2YWx1ZTtcclxuICAgICAgY2FzZSBPcGVyYXRvci5HcmVhdGVyOlxyXG4gICAgICAgIHJldHVybiB0YXJnZXRWYWx1ZSA+IHZhbHVlO1xyXG4gICAgICBjYXNlIE9wZXJhdG9yLkdyZWF0ZXJPckVxdWFsOlxyXG4gICAgICAgIHJldHVybiB0YXJnZXRWYWx1ZSA+PSB2YWx1ZTtcclxuICAgICAgY2FzZSBPcGVyYXRvci5MZXNzOlxyXG4gICAgICAgIHJldHVybiB0YXJnZXRWYWx1ZSA8IHZhbHVlO1xyXG4gICAgICBjYXNlIE9wZXJhdG9yLkxlc3NPckVxdWFsOlxyXG4gICAgICAgIHJldHVybiB0YXJnZXRWYWx1ZSA8PSB2YWx1ZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIG9wZXJhdG9yIGZvciBjb21wYXJpc29uJyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gICAqIOWQq+OCgOioiOeul1xyXG4gICAqIEBwYXJhbSB0YXJnZXRWYWx1ZSBcclxuICAgKiBAcGFyYW0gdmFsdWUgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgY29udGFpbnModGFyZ2V0VmFsdWU6IGFueSwgdmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHR5cGVvZiB0YXJnZXRWYWx1ZSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gdGFyZ2V0VmFsdWUuaW5jbHVkZXModmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICAgLyoqXHJcbiAgICogU3RhcnRXaXRo6KiI566XXHJcbiAgICogQHBhcmFtIHRhcmdldFZhbHVlIFxyXG4gICAqIEBwYXJhbSB2YWx1ZSBcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBzdGFydFdpdGgodGFyZ2V0VmFsdWU6IGFueSwgdmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHR5cGVvZiB0YXJnZXRWYWx1ZSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gdGFyZ2V0VmFsdWUuc3RhcnRzV2l0aCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEVuZHNXaXRo6KiI566XXHJcbiAgICogQHBhcmFtIHRhcmdldFZhbHVlIFxyXG4gICAqIEBwYXJhbSB2YWx1ZSBcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBlbmRzV2l0aCh0YXJnZXRWYWx1ZTogYW55LCB2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAodHlwZW9mIHRhcmdldFZhbHVlID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiB0YXJnZXRWYWx1ZS5lbmRzV2l0aCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIiwiXHJcbmltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7ICBJQWN0aW9uLElBY3Rpb25SZXN1bHQsIElBY3Rpb25Ob2RlLCBJQWN0aW9uUHJvcGVydHksIElGaWVsZCwgSUNvbnRleHQgfSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuaW1wb3J0IHsgQ29uZGl0aW9uVHJlZSB9IGZyb20gJy4uL3R5cGVzL0NvbmRpdGlvbnMnO1xyXG4vKipcclxuICog44Ki44Kv44K344On44Oz44Gu5bGe5oCn5a6a576pXHJcbiAqL1xyXG5pbnRlcmZhY2UgSVNob3duUHJvcHN7XHJcbiAgICBmaWVsZDpJRmllbGQ7XHJcbiAgICBzaG93OnN0cmluZzsgXHJcbiAgICBjb25kaXRpb246c3RyaW5nO1xyXG59XHJcbi8qKlxyXG4gKiDooajnpLrvvI/pnZ7ooajnpLrjgqLjgq/jgrfjg6fjg7NcclxuICovXHJcbmV4cG9ydCBjbGFzcyBGaWVsZFNob3duQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbntcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICAgIHByb3BzOklTaG93blByb3BzO1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLm5hbWU9XCLooajnpLrvvI/pnZ7ooajnpLpcIjtcclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzPVtdO1xyXG4gICAgICAgdGhpcy5wcm9wcz17XHJcbiAgICAgICAgICAgIGZpZWxkOntjb2RlOicnfSxcclxuICAgICAgICAgICAgc2hvdzonJyxcclxuICAgICAgICAgICAgY29uZGl0aW9uOicnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v44Ki44Kv44K344On44Oz44KS55m76Yyy44GZ44KLXHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiDjgqLjgq/jgrfjg6fjg7Pjga7lrp/ooYzjgpLlkbzjgbPlh7rjgZlcclxuICAgICAqIEBwYXJhbSBhY3Rpb25Ob2RlIFxyXG4gICAgICogQHBhcmFtIGV2ZW50IFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHByb2Nlc3MoYWN0aW9uTm9kZTpJQWN0aW9uTm9kZSxldmVudDphbnksY29udGV4dDpJQ29udGV4dCk6UHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdD17XHJcbiAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OmZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9YWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgaWYgKCEoJ2ZpZWxkJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdzaG93JyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElTaG93blByb3BzO1xyXG4gICAgICAgICAgICAvL+adoeS7tuW8j+OBruioiOeul+e1kOaenOOCkuWPluW+l1xyXG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb25SZXN1bHQgPSB0aGlzLmdldENvbmRpdGlvblJlc3VsdChjb250ZXh0KTtcclxuICAgICAgICAgICAgaWYoY29uZGl0aW9uUmVzdWx0KXtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMucHJvcHMuc2hvdz09PSfooajnpLonKXtcclxuICAgICAgICAgICAgICAgICAgICBraW50b25lLmFwcC5yZWNvcmQuc2V0RmllbGRTaG93bih0aGlzLnByb3BzLmZpZWxkLmNvZGUsdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZiAodGhpcy5wcm9wcy5zaG93PT09J+mdnuihqOekuicpe1xyXG4gICAgICAgICAgICAgICAgICAgIGtpbnRvbmUuYXBwLnJlY29yZC5zZXRGaWVsZFNob3duKHRoaXMucHJvcHMuZmllbGQuY29kZSxmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzdWx0PSB7XHJcbiAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OnRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1jYXRjaChlcnJvcil7XHJcbiAgICAgICAgICAgIGV2ZW50LmVycm9yPWVycm9yO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQ9ZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb250ZXh0IOadoeS7tuW8j+OCkuWun+ihjOOBmeOCi1xyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgZ2V0Q29uZGl0aW9uUmVzdWx0KGNvbnRleHQ6YW55KTpib29sZWFue1xyXG4gICAgICAgIGNvbnN0IHRyZWUgPXRoaXMuZ2V0Q29uZGl0aW9uKHRoaXMucHJvcHMuY29uZGl0aW9uKTtcclxuICAgICAgICBpZighdHJlZSl7XHJcbiAgICAgICAgICAgIC8v5p2h5Lu244KS6Kit5a6a44GV44KM44Gm44GE44G+44Gb44KTXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJlZS5ldmFsdWF0ZSh0cmVlLnJvb3QsY29udGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gY29uZGl0aW9uIOadoeS7tuW8j+ODhOODquODvOOCkuWPluW+l+OBmeOCi1xyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgZ2V0Q29uZGl0aW9uKGNvbmRpdGlvbjpzdHJpbmcpOkNvbmRpdGlvblRyZWV8bnVsbHtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyZWUgPSBuZXcgQ29uZGl0aW9uVHJlZSgpO1xyXG4gICAgICAgICAgICB0cmVlLmZyb21Kc29uKGNvbmRpdGlvbik7XHJcbiAgICAgICAgICAgIGlmKHRyZWUuZ2V0Q29uZGl0aW9ucyh0cmVlLnJvb3QpLmxlbmd0aD4wKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cmVlO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdPXRoaXM7XHJcbiAgICB9XHJcbn1cclxubmV3IEZpZWxkU2hvd25BY3Rpb24oKTsiLCJcclxuaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgSUFjdGlvbiwgSUFjdGlvblByb3BlcnR5LCBJQWN0aW9uTm9kZSwgSUNvbnRleHQsIElBY3Rpb25SZXN1bHQgfSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuaW1wb3J0IHsgQ29uZGl0aW9uVHJlZSB9IGZyb20gJy4uL3R5cGVzL0NvbmRpdGlvbnMnO1xyXG4vKipcclxuICog44Ki44Kv44K344On44Oz44Gu5bGe5oCn5a6a576pXHJcbiAqL1xyXG5pbnRlcmZhY2UgSUVycm9yU2hvd1Byb3BzIHtcclxuICAgIG1lc3NhZ2U6IHN0cmluZztcclxuICAgIGNvbmRpdGlvbjogc3RyaW5nO1xyXG59ICAgXHJcblxyXG5leHBvcnQgY2xhc3MgRXJyb3JTaG93QWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbiB7XHJcbiAgICBuYW1lOiBzdHJpbmc7IFxyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdOyAvL+iwg+eUqOS7jmltcG9ydOWvvOWFpeWFs+S6juaYvuekuuexu+eahOWumuS5iVxyXG4gICAgcHJvcHM6IElFcnJvclNob3dQcm9wczsvL+S7juS4iuaWueeahGludGVyZmFjZSDlrprkuYnov5nkuKpwcm9wc+aJgOmcgOimgeaOpeWPl+eahOWxnuaAp1xyXG4gICAgY29uc3RydWN0b3IoKSB7IC8v6Kej5p6E5Ye95pWw5a6a5LmJ6ZyA6KaB55qE57G75ZCNXHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCLjgqjjg6njg7zooajnpLpcIjtcclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzID0gW107XHJcbiAgICAgICAgdGhpcy5wcm9wcyA9IHtcclxuICAgICAgICAgICAgbWVzc2FnZTogJycsXHJcbiAgICAgICAgICAgIGNvbmRpdGlvbjogJydcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigpOyAvL+mHjee9ruS7peS4iuazqOWGjOihqFxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog44Ki44Kv44K344On44Oz44Gu5a6f6KGM44KS5ZG844Gz5Ye644GZXHJcbiAgICAgKiBAcGFyYW0gYWN0aW9uTm9kZSBcclxuICAgICAqIEBwYXJhbSBldmVudCBcclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBhc3luYyBwcm9jZXNzKGFjdGlvbk5vZGU6IElBY3Rpb25Ob2RlLCBldmVudDogYW55LCBjb250ZXh0OiBJQ29udGV4dCk6IFByb21pc2U8SUFjdGlvblJlc3VsdD4geyAvL+W8guatpeWkhOeQhuafkOWHveaVsOS4i+eahO+8mnh45bGe5oCnXHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgXHJcbiAgICAgICAgICAgIGNhbk5leHQ6IHRydWUsXHJcbiAgICAgICAgICAgIHJlc3VsdDogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeSB7IC8v5bCd6K+V5omn6KGM5Lul5LiL5Luj56CB6YOo5YiGXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBhY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG4gICAgICAgICAgICBpZiAoISgnbWVzc2FnZScgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkgJiYgISgnY29uZGl0aW9uJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSkgeyAvL+WmguaenG1lc3NhZ2Xku6Xlj4pjb25kaXRpb27kuKTogIXpg73kuI3lrZjlnKjnmoTmg4XlhrXkuItyZXR1cm5cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnByb3BzID0gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSBhcyBJRXJyb3JTaG93UHJvcHM7IFxyXG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb25SZXN1bHQgPSB0aGlzLmdldENvbmRpdGlvblJlc3VsdChjb250ZXh0KTsgXHJcbiAgICAgICAgICAgIGlmIChjb25kaXRpb25SZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50LmVycm9yID0gdGhpcy5wcm9wcy5tZXNzYWdlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbk5leHQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgZXZlbnQuZXJyb3IgPSBlcnJvcjtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jYW5OZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgKiBcclxuICAgICogQHBhcmFtIGNvbnRleHQg5p2h5Lu25byP44KS5a6f6KGM44GZ44KLXHJcbiAgICAqIEByZXR1cm5zIFxyXG4gICAgKi9cclxuICAgIGdldENvbmRpdGlvblJlc3VsdChjb250ZXh0OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCB0cmVlID0gdGhpcy5nZXRDb25kaXRpb24odGhpcy5wcm9wcy5jb25kaXRpb24pO1xyXG4gICAgICAgIGlmICghdHJlZSkge1xyXG4gICAgICAgICAgICAvL+adoeS7tuOCkuioreWumuOBleOCjOOBpuOBhOOBvuOBm+OCk1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRyZWUuZXZhbHVhdGUodHJlZS5yb290LCBjb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSBjb25kaXRpb24g5p2h5Lu25byP44OE44Oq44O844KS5Y+W5b6X44GZ44KLXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgZ2V0Q29uZGl0aW9uKGNvbmRpdGlvbjogc3RyaW5nKTogQ29uZGl0aW9uVHJlZSB8IG51bGwge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyZWUgPSBuZXcgQ29uZGl0aW9uVHJlZSgpO1xyXG4gICAgICAgICAgICB0cmVlLmZyb21Kc29uKGNvbmRpdGlvbik7XHJcbiAgICAgICAgICAgIGlmICh0cmVlLmdldENvbmRpdGlvbnModHJlZS5yb290KS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJlZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdID0gdGhpcztcclxuICAgIH1cclxuXHJcbn1cclxubmV3IEVycm9yU2hvd0FjdGlvbigpOyIsIlxyXG5pbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xyXG5pbXBvcnQgeyBJQWN0aW9uLCBJQWN0aW9uUHJvcGVydHksIElBY3Rpb25Ob2RlLCBJQWN0aW9uUmVzdWx0IH0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbmltcG9ydCBcIi4vYnV0dG9uLWFkZC5jc3NcIjtcclxuXHJcbi8qKlxyXG4gKiDjg5zjgr/jg7PphY3nva7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJQnV0dG9uQWRkUHJvcHMge1xyXG4gICAgLy/jg5zjgr/jg7PooajnpLrlkI1cclxuICAgIGJ1dHRvbk5hbWU6IHN0cmluZztcclxuICAgIHNwYWNlPzpJU3BhY2U7XHJcbiAgICAvL+mFjee9ruS9jee9rlxyXG4gICAgcG9zaXRpb246IHN0cmluZztcclxuICAgIC8v44Kk44OZ44Oz44OI5ZCNXHJcbiAgICBldmVudE5hbWU6c3RyaW5nXHJcbn0gICBcclxuXHJcbmludGVyZmFjZSBJU3BhY2V7XHJcbiAgICB0eXBlOnN0cmluZyxcclxuICAgIGVsZW1lbnRJZDpzdHJpbmdcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbkFkZEFjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb24ge1xyXG4gICAgbmFtZTogc3RyaW5nOyBcclxuICAgIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTsgXHJcbiAgICBwcm9wczogSUJ1dHRvbkFkZFByb3BzO1xyXG4gICAgY29uc3RydWN0b3IoKSB7IFxyXG4gICAgICAgIHRoaXMubmFtZSA9IFwi44Oc44K/44Oz44Gu6YWN572uXCI7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcyA9IFtdO1xyXG4gICAgICAgIHRoaXMucHJvcHMgPSB7XHJcbiAgICAgICAgICAgIGJ1dHRvbk5hbWU6ICcnLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogJycsXHJcbiAgICAgICAgICAgIGV2ZW50TmFtZTonJ1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDjgqLjgq/jgrfjg6fjg7Pjga7lrp/ooYzjgpLlkbzjgbPlh7rjgZlcclxuICAgICAqIEBwYXJhbSBhY3Rpb25Ob2RlIFxyXG4gICAgICogQHBhcmFtIGV2ZW50IFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHByb2Nlc3MoYWN0aW9uTm9kZTogSUFjdGlvbk5vZGUsIGV2ZW50OiBhbnkpOiBQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHsgXHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgXHJcbiAgICAgICAgICAgIGNhbk5leHQ6IHRydWUsXHJcbiAgICAgICAgICAgIHJlc3VsdDogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeSB7IFxyXG4gICAgICAgICAgICB0aGlzLmFjdGlvblByb3BzID0gYWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgaWYgKCEoJ2J1dHRvbk5hbWUnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmICEoJ3Bvc2l0aW9uJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSkgeyBcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnByb3BzID0gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSBhcyBJQnV0dG9uQWRkUHJvcHM7IFxyXG4gICAgICAgICAgICAvL+ODnOOCv+ODs+OCkumFjee9ruOBmeOCi1xyXG4gICAgICAgICAgICBsZXQgYnV0dG9uU3BhY2U7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucHJvcHMuc3BhY2UgJiYgdGhpcy5wcm9wcy5zcGFjZS5lbGVtZW50SWQpe1xyXG4gICAgICAgICAgICAgICAgYnV0dG9uU3BhY2UgPSBraW50b25lLmFwcC5yZWNvcmQuZ2V0U3BhY2VFbGVtZW50KHRoaXMucHJvcHMuc3BhY2UuZWxlbWVudElkKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBidXR0b25TcGFjZSA9IGtpbnRvbmUuYXBwLnJlY29yZC5nZXRIZWFkZXJNZW51U3BhY2VFbGVtZW50KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoIWJ1dHRvblNwYWNlKSByZXR1cm4gcmVzdWx0O1xyXG4gIFxyXG4gICAgICAgICAgICBjb25zdCBidXR0b24gPSQoYDxidXR0b24gaWQ9JyR7dGhpcy5wcm9wcy5ldmVudE5hbWV9JyBjbGFzcz0nYWxjLWJ1dHRvbi1ub3JtYWwnID4ke3RoaXMucHJvcHMuYnV0dG9uTmFtZX08L2J1dHRvbj5gKTtcclxuICAgICAgICAgICAgaWYodGhpcy5wcm9wcy5wb3NpdGlvbj09PVwi5LiA55Wq5bem44Gr6L+95Yqg44GZ44KLXCIpe1xyXG4gICAgICAgICAgICAgICAgJChidXR0b25TcGFjZSkucHJlcGVuZChidXR0b24pO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICQoYnV0dG9uU3BhY2UpLmFwcGVuZChidXR0b24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGNsaWNrRXZlbnROYW1lID0gYCR7ZXZlbnQudHlwZX0uY3VzdG9tQnV0dG9uQ2xpY2suJHt0aGlzLnByb3BzLmV2ZW50TmFtZX1gO1xyXG4gICAgICAgICAgICBidXR0b24ub24oXCJjbGlja1wiLCgpPT57XHJcbiAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS50cmlnZ2VyKGNsaWNrRXZlbnROYW1lLGV2ZW50KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgZXZlbnQuZXJyb3IgPSBlcnJvcjtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jYW5OZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gIFxyXG5cclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdID0gdGhpcztcclxuICAgIH1cclxuXHJcbn1cclxubmV3IEJ1dHRvbkFkZEFjdGlvbigpOyIsIlxyXG5pbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyAgSUFjdGlvbixJQWN0aW9uUmVzdWx0LCBJQWN0aW9uTm9kZSwgSUFjdGlvblByb3BlcnR5LCBJQ29udGV4dCwgSVZhck5hbWUgfSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuaW1wb3J0IHsgQ29uZGl0aW9uVHJlZSB9IGZyb20gJy4uL3R5cGVzL0NvbmRpdGlvbnMnO1xyXG4vKipcclxuICog44Ki44Kv44K344On44Oz44Gu5bGe5oCn5a6a576pXHJcbiAqL1xyXG5pbnRlcmZhY2UgSUNvbmRpdGlvbntcclxuICAgIGNvbmRpdGlvbjpzdHJpbmc7XHJcbiAgICB2ZXJOYW1lOklWYXJOYW1lO1xyXG59XHJcbi8qKlxyXG4gKiDmnaHku7bliIblspDjgqLjgq/jgrfjg6fjg7NcclxuICovXHJcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25BY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9ue1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gICAgcHJvcHM6SUNvbmRpdGlvbjtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5uYW1lPVwi5p2h5Lu25byPXCI7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1bXTtcclxuICAgICAgICB0aGlzLnByb3BzPXtcclxuICAgICAgICAgICAgY29uZGl0aW9uOicnLFxyXG4gICAgICAgICAgICB2ZXJOYW1lOntuYW1lOicnfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvL+OCouOCr+OCt+ODp+ODs+OCkueZu+mMsuOBmeOCi1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICog44Ki44Kv44K344On44Oz44Gu5a6f6KGM44KS5ZG844Gz5Ye644GZXHJcbiAgICAgKiBAcGFyYW0gYWN0aW9uTm9kZSBcclxuICAgICAqIEBwYXJhbSBldmVudCBcclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBhc3luYyBwcm9jZXNzKGFjdGlvbk5vZGU6SUFjdGlvbk5vZGUsZXZlbnQ6YW55LGNvbnRleHQ6SUNvbnRleHQpOlByb21pc2U8SUFjdGlvblJlc3VsdD4ge1xyXG4gICAgICAgIGxldCByZXN1bHQ9e1xyXG4gICAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICAgIHJlc3VsdDonJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAvL+WxnuaAp+ioreWumuOCkuWPluW+l+OBmeOCi1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvblByb3BzPWFjdGlvbk5vZGUuYWN0aW9uUHJvcHM7XHJcbiAgICAgICAgICAgIGlmICghKCdjb25kaXRpb24nIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmICEoJ3Zlck5hbWUnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUgYXMgSUNvbmRpdGlvbjtcclxuICAgICAgICAgICAgLy/mnaHku7blvI/jga7oqIjnrpfntZDmnpzjgpLlj5blvpdcclxuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uUmVzdWx0ID0gdGhpcy5nZXRDb25kaXRpb25SZXN1bHQoY29udGV4dCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5p2h5Lu26KiI566X57WQ5p6cOlwiLGNvbmRpdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICAgIGlmKGNvbmRpdGlvblJlc3VsdCl7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQ9IHtcclxuICAgICAgICAgICAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0Oifjga/jgYQnXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQ9IHtcclxuICAgICAgICAgICAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OifjgYTjgYTjgYgnXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih0aGlzLnByb3BzLnZlck5hbWUgJiYgdGhpcy5wcm9wcy52ZXJOYW1lLm5hbWUhPT0nJyl7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LnZhcmlhYmxlc1t0aGlzLnByb3BzLnZlck5hbWUubmFtZV09cmVzdWx0LnJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1jYXRjaChlcnJvcil7XHJcbiAgICAgICAgICAgIGV2ZW50LmVycm9yPWVycm9yO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQ9ZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBjb250ZXh0IOadoeS7tuW8j+OCkuWun+ihjOOBmeOCi1xyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIGdldENvbmRpdGlvblJlc3VsdChjb250ZXh0OmFueSk6Ym9vbGVhbntcclxuICAgICAgICBjb25zdCB0cmVlID10aGlzLmdldENvbmRpdGlvbih0aGlzLnByb3BzLmNvbmRpdGlvbik7XHJcbiAgICAgICAgaWYoIXRyZWUpe1xyXG4gICAgICAgICAgICAvL+adoeS7tuOCkuioreWumuOBleOCjOOBpuOBhOOBvuOBm+OCk1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRyZWUuZXZhbHVhdGUodHJlZS5yb290LGNvbnRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIGNvbmRpdGlvbiDmnaHku7blvI/jg4Tjg6rjg7zjgpLlj5blvpfjgZnjgotcclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBnZXRDb25kaXRpb24oY29uZGl0aW9uOnN0cmluZyk6Q29uZGl0aW9uVHJlZXxudWxse1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgY29uc3QgdHJlZSA9IG5ldyBDb25kaXRpb25UcmVlKCk7XHJcbiAgICAgICAgICAgIHRyZWUuZnJvbUpzb24oY29uZGl0aW9uKTtcclxuICAgICAgICAgICAgaWYodHJlZS5nZXRDb25kaXRpb25zKHRyZWUucm9vdCkubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyZWU7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdPXRoaXM7XHJcbiAgICB9XHJcbiAgICBcclxufVxyXG5uZXcgQ29uZGl0aW9uQWN0aW9uKCk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmluamVjdFBsYXRmb3JtRGVwcyA9IGV4cG9ydHMucGxhdGZvcm1EZXBzID0gdm9pZCAwO1xuZXhwb3J0cy5wbGF0Zm9ybURlcHMgPSB7XG4gICAgcmVhZEZpbGVGcm9tUGF0aDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfSxcbiAgICBnZXRSZXF1ZXN0VG9rZW46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH0sXG4gICAgZ2V0RGVmYXVsdEF1dGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH0sXG4gICAgYnVpbGRQbGF0Zm9ybURlcGVuZGVudENvbmZpZzogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfSxcbiAgICBidWlsZEhlYWRlcnM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH0sXG4gICAgYnVpbGRGb3JtRGF0YVZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9LFxuICAgIGJ1aWxkQmFzZVVybDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfSxcbiAgICBnZXRWZXJzaW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9LFxufTtcbnZhciBpbmplY3RQbGF0Zm9ybURlcHMgPSBmdW5jdGlvbiAoZGVwcykge1xuICAgIGlmIChkZXBzLnJlYWRGaWxlRnJvbVBhdGgpIHtcbiAgICAgICAgZXhwb3J0cy5wbGF0Zm9ybURlcHMucmVhZEZpbGVGcm9tUGF0aCA9IGRlcHMucmVhZEZpbGVGcm9tUGF0aDtcbiAgICB9XG4gICAgaWYgKGRlcHMuZ2V0UmVxdWVzdFRva2VuKSB7XG4gICAgICAgIGV4cG9ydHMucGxhdGZvcm1EZXBzLmdldFJlcXVlc3RUb2tlbiA9IGRlcHMuZ2V0UmVxdWVzdFRva2VuO1xuICAgIH1cbiAgICBpZiAoZGVwcy5nZXREZWZhdWx0QXV0aCkge1xuICAgICAgICBleHBvcnRzLnBsYXRmb3JtRGVwcy5nZXREZWZhdWx0QXV0aCA9IGRlcHMuZ2V0RGVmYXVsdEF1dGg7XG4gICAgfVxuICAgIGlmIChkZXBzLmJ1aWxkUGxhdGZvcm1EZXBlbmRlbnRDb25maWcpIHtcbiAgICAgICAgZXhwb3J0cy5wbGF0Zm9ybURlcHMuYnVpbGRQbGF0Zm9ybURlcGVuZGVudENvbmZpZyA9XG4gICAgICAgICAgICBkZXBzLmJ1aWxkUGxhdGZvcm1EZXBlbmRlbnRDb25maWc7XG4gICAgfVxuICAgIGlmIChkZXBzLmJ1aWxkSGVhZGVycykge1xuICAgICAgICBleHBvcnRzLnBsYXRmb3JtRGVwcy5idWlsZEhlYWRlcnMgPSBkZXBzLmJ1aWxkSGVhZGVycztcbiAgICB9XG4gICAgaWYgKGRlcHMuYnVpbGRGb3JtRGF0YVZhbHVlKSB7XG4gICAgICAgIGV4cG9ydHMucGxhdGZvcm1EZXBzLmJ1aWxkRm9ybURhdGFWYWx1ZSA9IGRlcHMuYnVpbGRGb3JtRGF0YVZhbHVlO1xuICAgIH1cbiAgICBpZiAoZGVwcy5idWlsZEJhc2VVcmwpIHtcbiAgICAgICAgZXhwb3J0cy5wbGF0Zm9ybURlcHMuYnVpbGRCYXNlVXJsID0gZGVwcy5idWlsZEJhc2VVcmw7XG4gICAgfVxuICAgIGlmIChkZXBzLmdldFZlcnNpb24pIHtcbiAgICAgICAgZXhwb3J0cy5wbGF0Zm9ybURlcHMuZ2V0VmVyc2lvbiA9IGRlcHMuZ2V0VmVyc2lvbjtcbiAgICB9XG59O1xuZXhwb3J0cy5pbmplY3RQbGF0Zm9ybURlcHMgPSBpbmplY3RQbGF0Zm9ybURlcHM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvciA9IHZvaWQgMDtcbnZhciBVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3IocGxhdGZvcm0pIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBcIlRoaXMgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBpbiBcIi5jb25jYXQocGxhdGZvcm0sIFwiIGVudmlyb25tZW50XCIpO1xuICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UpIHx8IHRoaXM7XG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0Vycm9yI0N1c3RvbV9FcnJvcl9UeXBlc1xuICAgICAgICAvLyBNYWludGFpbnMgcHJvcGVyIHN0YWNrIHRyYWNlIGZvciB3aGVyZSBvdXIgZXJyb3Igd2FzIHRocm93biAob25seSBhdmFpbGFibGUgb24gVjgpXG4gICAgICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoX3RoaXMsIFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMubmFtZSA9IFwiVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yXCI7XG4gICAgICAgIF90aGlzLnBsYXRmb3JtID0gcGxhdGZvcm07XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC93aWtpL0JyZWFraW5nLUNoYW5nZXMjZXh0ZW5kaW5nLWJ1aWx0LWlucy1saWtlLWVycm9yLWFycmF5LWFuZC1tYXAtbWF5LW5vLWxvbmdlci13b3JrXG4gICAgICAgIC8vIFNldCB0aGUgcHJvdG90eXBlIGV4cGxpY2l0bHkuXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihfdGhpcywgVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yLnByb3RvdHlwZSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvcjtcbn0oRXJyb3IpKTtcbmV4cG9ydHMuVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yID0gVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yLmpzLm1hcCIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBAcGFyYW0gdHlwZU1hcCBbT2JqZWN0XSBNYXAgb2YgTUlNRSB0eXBlIC0+IEFycmF5W2V4dGVuc2lvbnNdXG4gKiBAcGFyYW0gLi4uXG4gKi9cbmZ1bmN0aW9uIE1pbWUoKSB7XG4gIHRoaXMuX3R5cGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdGhpcy5fZXh0ZW5zaW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB0aGlzLmRlZmluZShhcmd1bWVudHNbaV0pO1xuICB9XG5cbiAgdGhpcy5kZWZpbmUgPSB0aGlzLmRlZmluZS5iaW5kKHRoaXMpO1xuICB0aGlzLmdldFR5cGUgPSB0aGlzLmdldFR5cGUuYmluZCh0aGlzKTtcbiAgdGhpcy5nZXRFeHRlbnNpb24gPSB0aGlzLmdldEV4dGVuc2lvbi5iaW5kKHRoaXMpO1xufVxuXG4vKipcbiAqIERlZmluZSBtaW1ldHlwZSAtPiBleHRlbnNpb24gbWFwcGluZ3MuICBFYWNoIGtleSBpcyBhIG1pbWUtdHlwZSB0aGF0IG1hcHNcbiAqIHRvIGFuIGFycmF5IG9mIGV4dGVuc2lvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0eXBlLiAgVGhlIGZpcnN0IGV4dGVuc2lvbiBpc1xuICogdXNlZCBhcyB0aGUgZGVmYXVsdCBleHRlbnNpb24gZm9yIHRoZSB0eXBlLlxuICpcbiAqIGUuZy4gbWltZS5kZWZpbmUoeydhdWRpby9vZ2cnLCBbJ29nYScsICdvZ2cnLCAnc3B4J119KTtcbiAqXG4gKiBJZiBhIHR5cGUgZGVjbGFyZXMgYW4gZXh0ZW5zaW9uIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLCBhbiBlcnJvciB3aWxsXG4gKiBiZSB0aHJvd24uICBUbyBzdXBwcmVzcyB0aGlzIGVycm9yIGFuZCBmb3JjZSB0aGUgZXh0ZW5zaW9uIHRvIGJlIGFzc29jaWF0ZWRcbiAqIHdpdGggdGhlIG5ldyB0eXBlLCBwYXNzIGBmb3JjZWA9dHJ1ZS4gIEFsdGVybmF0aXZlbHksIHlvdSBtYXkgcHJlZml4IHRoZVxuICogZXh0ZW5zaW9uIHdpdGggXCIqXCIgdG8gbWFwIHRoZSB0eXBlIHRvIGV4dGVuc2lvbiwgd2l0aG91dCBtYXBwaW5nIHRoZVxuICogZXh0ZW5zaW9uIHRvIHRoZSB0eXBlLlxuICpcbiAqIGUuZy4gbWltZS5kZWZpbmUoeydhdWRpby93YXYnLCBbJ3dhdiddfSwgeydhdWRpby94LXdhdicsIFsnKndhdiddfSk7XG4gKlxuICpcbiAqIEBwYXJhbSBtYXAgKE9iamVjdCkgdHlwZSBkZWZpbml0aW9uc1xuICogQHBhcmFtIGZvcmNlIChCb29sZWFuKSBpZiB0cnVlLCBmb3JjZSBvdmVycmlkaW5nIG9mIGV4aXN0aW5nIGRlZmluaXRpb25zXG4gKi9cbk1pbWUucHJvdG90eXBlLmRlZmluZSA9IGZ1bmN0aW9uKHR5cGVNYXAsIGZvcmNlKSB7XG4gIGZvciAobGV0IHR5cGUgaW4gdHlwZU1hcCkge1xuICAgIGxldCBleHRlbnNpb25zID0gdHlwZU1hcFt0eXBlXS5tYXAoZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHQudG9Mb3dlckNhc2UoKTtcbiAgICB9KTtcbiAgICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHRlbnNpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBleHQgPSBleHRlbnNpb25zW2ldO1xuXG4gICAgICAvLyAnKicgcHJlZml4ID0gbm90IHRoZSBwcmVmZXJyZWQgdHlwZSBmb3IgdGhpcyBleHRlbnNpb24uICBTbyBmaXh1cCB0aGVcbiAgICAgIC8vIGV4dGVuc2lvbiwgYW5kIHNraXAgaXQuXG4gICAgICBpZiAoZXh0WzBdID09PSAnKicpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghZm9yY2UgJiYgKGV4dCBpbiB0aGlzLl90eXBlcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdBdHRlbXB0IHRvIGNoYW5nZSBtYXBwaW5nIGZvciBcIicgKyBleHQgK1xuICAgICAgICAgICdcIiBleHRlbnNpb24gZnJvbSBcIicgKyB0aGlzLl90eXBlc1tleHRdICsgJ1wiIHRvIFwiJyArIHR5cGUgK1xuICAgICAgICAgICdcIi4gUGFzcyBgZm9yY2U9dHJ1ZWAgdG8gYWxsb3cgdGhpcywgb3RoZXJ3aXNlIHJlbW92ZSBcIicgKyBleHQgK1xuICAgICAgICAgICdcIiBmcm9tIHRoZSBsaXN0IG9mIGV4dGVuc2lvbnMgZm9yIFwiJyArIHR5cGUgKyAnXCIuJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl90eXBlc1tleHRdID0gdHlwZTtcbiAgICB9XG5cbiAgICAvLyBVc2UgZmlyc3QgZXh0ZW5zaW9uIGFzIGRlZmF1bHRcbiAgICBpZiAoZm9yY2UgfHwgIXRoaXMuX2V4dGVuc2lvbnNbdHlwZV0pIHtcbiAgICAgIGNvbnN0IGV4dCA9IGV4dGVuc2lvbnNbMF07XG4gICAgICB0aGlzLl9leHRlbnNpb25zW3R5cGVdID0gKGV4dFswXSAhPT0gJyonKSA/IGV4dCA6IGV4dC5zdWJzdHIoMSk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIExvb2t1cCBhIG1pbWUgdHlwZSBiYXNlZCBvbiBleHRlbnNpb25cbiAqL1xuTWltZS5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcGF0aCA9IFN0cmluZyhwYXRoKTtcbiAgbGV0IGxhc3QgPSBwYXRoLnJlcGxhY2UoL14uKlsvXFxcXF0vLCAnJykudG9Mb3dlckNhc2UoKTtcbiAgbGV0IGV4dCA9IGxhc3QucmVwbGFjZSgvXi4qXFwuLywgJycpLnRvTG93ZXJDYXNlKCk7XG5cbiAgbGV0IGhhc1BhdGggPSBsYXN0Lmxlbmd0aCA8IHBhdGgubGVuZ3RoO1xuICBsZXQgaGFzRG90ID0gZXh0Lmxlbmd0aCA8IGxhc3QubGVuZ3RoIC0gMTtcblxuICByZXR1cm4gKGhhc0RvdCB8fCAhaGFzUGF0aCkgJiYgdGhpcy5fdHlwZXNbZXh0XSB8fCBudWxsO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gZmlsZSBleHRlbnNpb24gYXNzb2NpYXRlZCB3aXRoIGEgbWltZSB0eXBlXG4gKi9cbk1pbWUucHJvdG90eXBlLmdldEV4dGVuc2lvbiA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgdHlwZSA9IC9eXFxzKihbXjtcXHNdKikvLnRlc3QodHlwZSkgJiYgUmVnRXhwLiQxO1xuICByZXR1cm4gdHlwZSAmJiB0aGlzLl9leHRlbnNpb25zW3R5cGUudG9Mb3dlckNhc2UoKV0gfHwgbnVsbDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTWltZTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1wiYXBwbGljYXRpb24vYW5kcmV3LWluc2V0XCI6W1wiZXpcIl0sXCJhcHBsaWNhdGlvbi9hcHBsaXh3YXJlXCI6W1wiYXdcIl0sXCJhcHBsaWNhdGlvbi9hdG9tK3htbFwiOltcImF0b21cIl0sXCJhcHBsaWNhdGlvbi9hdG9tY2F0K3htbFwiOltcImF0b21jYXRcIl0sXCJhcHBsaWNhdGlvbi9hdG9tZGVsZXRlZCt4bWxcIjpbXCJhdG9tZGVsZXRlZFwiXSxcImFwcGxpY2F0aW9uL2F0b21zdmMreG1sXCI6W1wiYXRvbXN2Y1wiXSxcImFwcGxpY2F0aW9uL2F0c2MtZHdkK3htbFwiOltcImR3ZFwiXSxcImFwcGxpY2F0aW9uL2F0c2MtaGVsZCt4bWxcIjpbXCJoZWxkXCJdLFwiYXBwbGljYXRpb24vYXRzYy1yc2F0K3htbFwiOltcInJzYXRcIl0sXCJhcHBsaWNhdGlvbi9iZG9jXCI6W1wiYmRvY1wiXSxcImFwcGxpY2F0aW9uL2NhbGVuZGFyK3htbFwiOltcInhjc1wiXSxcImFwcGxpY2F0aW9uL2NjeG1sK3htbFwiOltcImNjeG1sXCJdLFwiYXBwbGljYXRpb24vY2RmeCt4bWxcIjpbXCJjZGZ4XCJdLFwiYXBwbGljYXRpb24vY2RtaS1jYXBhYmlsaXR5XCI6W1wiY2RtaWFcIl0sXCJhcHBsaWNhdGlvbi9jZG1pLWNvbnRhaW5lclwiOltcImNkbWljXCJdLFwiYXBwbGljYXRpb24vY2RtaS1kb21haW5cIjpbXCJjZG1pZFwiXSxcImFwcGxpY2F0aW9uL2NkbWktb2JqZWN0XCI6W1wiY2RtaW9cIl0sXCJhcHBsaWNhdGlvbi9jZG1pLXF1ZXVlXCI6W1wiY2RtaXFcIl0sXCJhcHBsaWNhdGlvbi9jdS1zZWVtZVwiOltcImN1XCJdLFwiYXBwbGljYXRpb24vZGFzaCt4bWxcIjpbXCJtcGRcIl0sXCJhcHBsaWNhdGlvbi9kYXZtb3VudCt4bWxcIjpbXCJkYXZtb3VudFwiXSxcImFwcGxpY2F0aW9uL2RvY2Jvb2sreG1sXCI6W1wiZGJrXCJdLFwiYXBwbGljYXRpb24vZHNzYytkZXJcIjpbXCJkc3NjXCJdLFwiYXBwbGljYXRpb24vZHNzYyt4bWxcIjpbXCJ4ZHNzY1wiXSxcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHRcIjpbXCJlc1wiLFwiZWNtYVwiXSxcImFwcGxpY2F0aW9uL2VtbWEreG1sXCI6W1wiZW1tYVwiXSxcImFwcGxpY2F0aW9uL2Vtb3Rpb25tbCt4bWxcIjpbXCJlbW90aW9ubWxcIl0sXCJhcHBsaWNhdGlvbi9lcHViK3ppcFwiOltcImVwdWJcIl0sXCJhcHBsaWNhdGlvbi9leGlcIjpbXCJleGlcIl0sXCJhcHBsaWNhdGlvbi9leHByZXNzXCI6W1wiZXhwXCJdLFwiYXBwbGljYXRpb24vZmR0K3htbFwiOltcImZkdFwiXSxcImFwcGxpY2F0aW9uL2ZvbnQtdGRwZnJcIjpbXCJwZnJcIl0sXCJhcHBsaWNhdGlvbi9nZW8ranNvblwiOltcImdlb2pzb25cIl0sXCJhcHBsaWNhdGlvbi9nbWwreG1sXCI6W1wiZ21sXCJdLFwiYXBwbGljYXRpb24vZ3B4K3htbFwiOltcImdweFwiXSxcImFwcGxpY2F0aW9uL2d4ZlwiOltcImd4ZlwiXSxcImFwcGxpY2F0aW9uL2d6aXBcIjpbXCJnelwiXSxcImFwcGxpY2F0aW9uL2hqc29uXCI6W1wiaGpzb25cIl0sXCJhcHBsaWNhdGlvbi9oeXBlcnN0dWRpb1wiOltcInN0a1wiXSxcImFwcGxpY2F0aW9uL2lua21sK3htbFwiOltcImlua1wiLFwiaW5rbWxcIl0sXCJhcHBsaWNhdGlvbi9pcGZpeFwiOltcImlwZml4XCJdLFwiYXBwbGljYXRpb24vaXRzK3htbFwiOltcIml0c1wiXSxcImFwcGxpY2F0aW9uL2phdmEtYXJjaGl2ZVwiOltcImphclwiLFwid2FyXCIsXCJlYXJcIl0sXCJhcHBsaWNhdGlvbi9qYXZhLXNlcmlhbGl6ZWQtb2JqZWN0XCI6W1wic2VyXCJdLFwiYXBwbGljYXRpb24vamF2YS12bVwiOltcImNsYXNzXCJdLFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiOltcImpzXCIsXCJtanNcIl0sXCJhcHBsaWNhdGlvbi9qc29uXCI6W1wianNvblwiLFwibWFwXCJdLFwiYXBwbGljYXRpb24vanNvbjVcIjpbXCJqc29uNVwiXSxcImFwcGxpY2F0aW9uL2pzb25tbCtqc29uXCI6W1wianNvbm1sXCJdLFwiYXBwbGljYXRpb24vbGQranNvblwiOltcImpzb25sZFwiXSxcImFwcGxpY2F0aW9uL2xncit4bWxcIjpbXCJsZ3JcIl0sXCJhcHBsaWNhdGlvbi9sb3N0K3htbFwiOltcImxvc3R4bWxcIl0sXCJhcHBsaWNhdGlvbi9tYWMtYmluaGV4NDBcIjpbXCJocXhcIl0sXCJhcHBsaWNhdGlvbi9tYWMtY29tcGFjdHByb1wiOltcImNwdFwiXSxcImFwcGxpY2F0aW9uL21hZHMreG1sXCI6W1wibWFkc1wiXSxcImFwcGxpY2F0aW9uL21hbmlmZXN0K2pzb25cIjpbXCJ3ZWJtYW5pZmVzdFwiXSxcImFwcGxpY2F0aW9uL21hcmNcIjpbXCJtcmNcIl0sXCJhcHBsaWNhdGlvbi9tYXJjeG1sK3htbFwiOltcIm1yY3hcIl0sXCJhcHBsaWNhdGlvbi9tYXRoZW1hdGljYVwiOltcIm1hXCIsXCJuYlwiLFwibWJcIl0sXCJhcHBsaWNhdGlvbi9tYXRobWwreG1sXCI6W1wibWF0aG1sXCJdLFwiYXBwbGljYXRpb24vbWJveFwiOltcIm1ib3hcIl0sXCJhcHBsaWNhdGlvbi9tZWRpYXNlcnZlcmNvbnRyb2wreG1sXCI6W1wibXNjbWxcIl0sXCJhcHBsaWNhdGlvbi9tZXRhbGluayt4bWxcIjpbXCJtZXRhbGlua1wiXSxcImFwcGxpY2F0aW9uL21ldGFsaW5rNCt4bWxcIjpbXCJtZXRhNFwiXSxcImFwcGxpY2F0aW9uL21ldHMreG1sXCI6W1wibWV0c1wiXSxcImFwcGxpY2F0aW9uL21tdC1hZWkreG1sXCI6W1wibWFlaVwiXSxcImFwcGxpY2F0aW9uL21tdC11c2QreG1sXCI6W1wibXVzZFwiXSxcImFwcGxpY2F0aW9uL21vZHMreG1sXCI6W1wibW9kc1wiXSxcImFwcGxpY2F0aW9uL21wMjFcIjpbXCJtMjFcIixcIm1wMjFcIl0sXCJhcHBsaWNhdGlvbi9tcDRcIjpbXCJtcDRzXCIsXCJtNHBcIl0sXCJhcHBsaWNhdGlvbi9tc3dvcmRcIjpbXCJkb2NcIixcImRvdFwiXSxcImFwcGxpY2F0aW9uL214ZlwiOltcIm14ZlwiXSxcImFwcGxpY2F0aW9uL24tcXVhZHNcIjpbXCJucVwiXSxcImFwcGxpY2F0aW9uL24tdHJpcGxlc1wiOltcIm50XCJdLFwiYXBwbGljYXRpb24vbm9kZVwiOltcImNqc1wiXSxcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiOltcImJpblwiLFwiZG1zXCIsXCJscmZcIixcIm1hclwiLFwic29cIixcImRpc3RcIixcImRpc3R6XCIsXCJwa2dcIixcImJwa1wiLFwiZHVtcFwiLFwiZWxjXCIsXCJkZXBsb3lcIixcImV4ZVwiLFwiZGxsXCIsXCJkZWJcIixcImRtZ1wiLFwiaXNvXCIsXCJpbWdcIixcIm1zaVwiLFwibXNwXCIsXCJtc21cIixcImJ1ZmZlclwiXSxcImFwcGxpY2F0aW9uL29kYVwiOltcIm9kYVwiXSxcImFwcGxpY2F0aW9uL29lYnBzLXBhY2thZ2UreG1sXCI6W1wib3BmXCJdLFwiYXBwbGljYXRpb24vb2dnXCI6W1wib2d4XCJdLFwiYXBwbGljYXRpb24vb21kb2MreG1sXCI6W1wib21kb2NcIl0sXCJhcHBsaWNhdGlvbi9vbmVub3RlXCI6W1wib25ldG9jXCIsXCJvbmV0b2MyXCIsXCJvbmV0bXBcIixcIm9uZXBrZ1wiXSxcImFwcGxpY2F0aW9uL294cHNcIjpbXCJveHBzXCJdLFwiYXBwbGljYXRpb24vcDJwLW92ZXJsYXkreG1sXCI6W1wicmVsb1wiXSxcImFwcGxpY2F0aW9uL3BhdGNoLW9wcy1lcnJvcit4bWxcIjpbXCJ4ZXJcIl0sXCJhcHBsaWNhdGlvbi9wZGZcIjpbXCJwZGZcIl0sXCJhcHBsaWNhdGlvbi9wZ3AtZW5jcnlwdGVkXCI6W1wicGdwXCJdLFwiYXBwbGljYXRpb24vcGdwLXNpZ25hdHVyZVwiOltcImFzY1wiLFwic2lnXCJdLFwiYXBwbGljYXRpb24vcGljcy1ydWxlc1wiOltcInByZlwiXSxcImFwcGxpY2F0aW9uL3BrY3MxMFwiOltcInAxMFwiXSxcImFwcGxpY2F0aW9uL3BrY3M3LW1pbWVcIjpbXCJwN21cIixcInA3Y1wiXSxcImFwcGxpY2F0aW9uL3BrY3M3LXNpZ25hdHVyZVwiOltcInA3c1wiXSxcImFwcGxpY2F0aW9uL3BrY3M4XCI6W1wicDhcIl0sXCJhcHBsaWNhdGlvbi9wa2l4LWF0dHItY2VydFwiOltcImFjXCJdLFwiYXBwbGljYXRpb24vcGtpeC1jZXJ0XCI6W1wiY2VyXCJdLFwiYXBwbGljYXRpb24vcGtpeC1jcmxcIjpbXCJjcmxcIl0sXCJhcHBsaWNhdGlvbi9wa2l4LXBraXBhdGhcIjpbXCJwa2lwYXRoXCJdLFwiYXBwbGljYXRpb24vcGtpeGNtcFwiOltcInBraVwiXSxcImFwcGxpY2F0aW9uL3Bscyt4bWxcIjpbXCJwbHNcIl0sXCJhcHBsaWNhdGlvbi9wb3N0c2NyaXB0XCI6W1wiYWlcIixcImVwc1wiLFwicHNcIl0sXCJhcHBsaWNhdGlvbi9wcm92ZW5hbmNlK3htbFwiOltcInByb3Z4XCJdLFwiYXBwbGljYXRpb24vcHNrYyt4bWxcIjpbXCJwc2tjeG1sXCJdLFwiYXBwbGljYXRpb24vcmFtbCt5YW1sXCI6W1wicmFtbFwiXSxcImFwcGxpY2F0aW9uL3JkZit4bWxcIjpbXCJyZGZcIixcIm93bFwiXSxcImFwcGxpY2F0aW9uL3JlZ2luZm8reG1sXCI6W1wicmlmXCJdLFwiYXBwbGljYXRpb24vcmVsYXgtbmctY29tcGFjdC1zeW50YXhcIjpbXCJybmNcIl0sXCJhcHBsaWNhdGlvbi9yZXNvdXJjZS1saXN0cyt4bWxcIjpbXCJybFwiXSxcImFwcGxpY2F0aW9uL3Jlc291cmNlLWxpc3RzLWRpZmYreG1sXCI6W1wicmxkXCJdLFwiYXBwbGljYXRpb24vcmxzLXNlcnZpY2VzK3htbFwiOltcInJzXCJdLFwiYXBwbGljYXRpb24vcm91dGUtYXBkK3htbFwiOltcInJhcGRcIl0sXCJhcHBsaWNhdGlvbi9yb3V0ZS1zLXRzaWQreG1sXCI6W1wic2xzXCJdLFwiYXBwbGljYXRpb24vcm91dGUtdXNkK3htbFwiOltcInJ1c2RcIl0sXCJhcHBsaWNhdGlvbi9ycGtpLWdob3N0YnVzdGVyc1wiOltcImdiclwiXSxcImFwcGxpY2F0aW9uL3Jwa2ktbWFuaWZlc3RcIjpbXCJtZnRcIl0sXCJhcHBsaWNhdGlvbi9ycGtpLXJvYVwiOltcInJvYVwiXSxcImFwcGxpY2F0aW9uL3JzZCt4bWxcIjpbXCJyc2RcIl0sXCJhcHBsaWNhdGlvbi9yc3MreG1sXCI6W1wicnNzXCJdLFwiYXBwbGljYXRpb24vcnRmXCI6W1wicnRmXCJdLFwiYXBwbGljYXRpb24vc2JtbCt4bWxcIjpbXCJzYm1sXCJdLFwiYXBwbGljYXRpb24vc2N2cC1jdi1yZXF1ZXN0XCI6W1wic2NxXCJdLFwiYXBwbGljYXRpb24vc2N2cC1jdi1yZXNwb25zZVwiOltcInNjc1wiXSxcImFwcGxpY2F0aW9uL3NjdnAtdnAtcmVxdWVzdFwiOltcInNwcVwiXSxcImFwcGxpY2F0aW9uL3NjdnAtdnAtcmVzcG9uc2VcIjpbXCJzcHBcIl0sXCJhcHBsaWNhdGlvbi9zZHBcIjpbXCJzZHBcIl0sXCJhcHBsaWNhdGlvbi9zZW5tbCt4bWxcIjpbXCJzZW5tbHhcIl0sXCJhcHBsaWNhdGlvbi9zZW5zbWwreG1sXCI6W1wic2Vuc21seFwiXSxcImFwcGxpY2F0aW9uL3NldC1wYXltZW50LWluaXRpYXRpb25cIjpbXCJzZXRwYXlcIl0sXCJhcHBsaWNhdGlvbi9zZXQtcmVnaXN0cmF0aW9uLWluaXRpYXRpb25cIjpbXCJzZXRyZWdcIl0sXCJhcHBsaWNhdGlvbi9zaGYreG1sXCI6W1wic2hmXCJdLFwiYXBwbGljYXRpb24vc2lldmVcIjpbXCJzaXZcIixcInNpZXZlXCJdLFwiYXBwbGljYXRpb24vc21pbCt4bWxcIjpbXCJzbWlcIixcInNtaWxcIl0sXCJhcHBsaWNhdGlvbi9zcGFycWwtcXVlcnlcIjpbXCJycVwiXSxcImFwcGxpY2F0aW9uL3NwYXJxbC1yZXN1bHRzK3htbFwiOltcInNyeFwiXSxcImFwcGxpY2F0aW9uL3NyZ3NcIjpbXCJncmFtXCJdLFwiYXBwbGljYXRpb24vc3Jncyt4bWxcIjpbXCJncnhtbFwiXSxcImFwcGxpY2F0aW9uL3NydSt4bWxcIjpbXCJzcnVcIl0sXCJhcHBsaWNhdGlvbi9zc2RsK3htbFwiOltcInNzZGxcIl0sXCJhcHBsaWNhdGlvbi9zc21sK3htbFwiOltcInNzbWxcIl0sXCJhcHBsaWNhdGlvbi9zd2lkK3htbFwiOltcInN3aWR0YWdcIl0sXCJhcHBsaWNhdGlvbi90ZWkreG1sXCI6W1widGVpXCIsXCJ0ZWljb3JwdXNcIl0sXCJhcHBsaWNhdGlvbi90aHJhdWQreG1sXCI6W1widGZpXCJdLFwiYXBwbGljYXRpb24vdGltZXN0YW1wZWQtZGF0YVwiOltcInRzZFwiXSxcImFwcGxpY2F0aW9uL3RvbWxcIjpbXCJ0b21sXCJdLFwiYXBwbGljYXRpb24vdHJpZ1wiOltcInRyaWdcIl0sXCJhcHBsaWNhdGlvbi90dG1sK3htbFwiOltcInR0bWxcIl0sXCJhcHBsaWNhdGlvbi91Ympzb25cIjpbXCJ1YmpcIl0sXCJhcHBsaWNhdGlvbi91cmMtcmVzc2hlZXQreG1sXCI6W1wicnNoZWV0XCJdLFwiYXBwbGljYXRpb24vdXJjLXRhcmdldGRlc2MreG1sXCI6W1widGRcIl0sXCJhcHBsaWNhdGlvbi92b2ljZXhtbCt4bWxcIjpbXCJ2eG1sXCJdLFwiYXBwbGljYXRpb24vd2FzbVwiOltcIndhc21cIl0sXCJhcHBsaWNhdGlvbi93aWRnZXRcIjpbXCJ3Z3RcIl0sXCJhcHBsaWNhdGlvbi93aW5obHBcIjpbXCJobHBcIl0sXCJhcHBsaWNhdGlvbi93c2RsK3htbFwiOltcIndzZGxcIl0sXCJhcHBsaWNhdGlvbi93c3BvbGljeSt4bWxcIjpbXCJ3c3BvbGljeVwiXSxcImFwcGxpY2F0aW9uL3hhbWwreG1sXCI6W1wieGFtbFwiXSxcImFwcGxpY2F0aW9uL3hjYXAtYXR0K3htbFwiOltcInhhdlwiXSxcImFwcGxpY2F0aW9uL3hjYXAtY2Fwcyt4bWxcIjpbXCJ4Y2FcIl0sXCJhcHBsaWNhdGlvbi94Y2FwLWRpZmYreG1sXCI6W1wieGRmXCJdLFwiYXBwbGljYXRpb24veGNhcC1lbCt4bWxcIjpbXCJ4ZWxcIl0sXCJhcHBsaWNhdGlvbi94Y2FwLW5zK3htbFwiOltcInhuc1wiXSxcImFwcGxpY2F0aW9uL3hlbmMreG1sXCI6W1wieGVuY1wiXSxcImFwcGxpY2F0aW9uL3hodG1sK3htbFwiOltcInhodG1sXCIsXCJ4aHRcIl0sXCJhcHBsaWNhdGlvbi94bGlmZit4bWxcIjpbXCJ4bGZcIl0sXCJhcHBsaWNhdGlvbi94bWxcIjpbXCJ4bWxcIixcInhzbFwiLFwieHNkXCIsXCJybmdcIl0sXCJhcHBsaWNhdGlvbi94bWwtZHRkXCI6W1wiZHRkXCJdLFwiYXBwbGljYXRpb24veG9wK3htbFwiOltcInhvcFwiXSxcImFwcGxpY2F0aW9uL3hwcm9jK3htbFwiOltcInhwbFwiXSxcImFwcGxpY2F0aW9uL3hzbHQreG1sXCI6W1wiKnhzbFwiLFwieHNsdFwiXSxcImFwcGxpY2F0aW9uL3hzcGYreG1sXCI6W1wieHNwZlwiXSxcImFwcGxpY2F0aW9uL3h2K3htbFwiOltcIm14bWxcIixcInhodm1sXCIsXCJ4dm1sXCIsXCJ4dm1cIl0sXCJhcHBsaWNhdGlvbi95YW5nXCI6W1wieWFuZ1wiXSxcImFwcGxpY2F0aW9uL3lpbit4bWxcIjpbXCJ5aW5cIl0sXCJhcHBsaWNhdGlvbi96aXBcIjpbXCJ6aXBcIl0sXCJhdWRpby8zZ3BwXCI6W1wiKjNncHBcIl0sXCJhdWRpby9hZHBjbVwiOltcImFkcFwiXSxcImF1ZGlvL2FtclwiOltcImFtclwiXSxcImF1ZGlvL2Jhc2ljXCI6W1wiYXVcIixcInNuZFwiXSxcImF1ZGlvL21pZGlcIjpbXCJtaWRcIixcIm1pZGlcIixcImthclwiLFwicm1pXCJdLFwiYXVkaW8vbW9iaWxlLXhtZlwiOltcIm14bWZcIl0sXCJhdWRpby9tcDNcIjpbXCIqbXAzXCJdLFwiYXVkaW8vbXA0XCI6W1wibTRhXCIsXCJtcDRhXCJdLFwiYXVkaW8vbXBlZ1wiOltcIm1wZ2FcIixcIm1wMlwiLFwibXAyYVwiLFwibXAzXCIsXCJtMmFcIixcIm0zYVwiXSxcImF1ZGlvL29nZ1wiOltcIm9nYVwiLFwib2dnXCIsXCJzcHhcIixcIm9wdXNcIl0sXCJhdWRpby9zM21cIjpbXCJzM21cIl0sXCJhdWRpby9zaWxrXCI6W1wic2lsXCJdLFwiYXVkaW8vd2F2XCI6W1wid2F2XCJdLFwiYXVkaW8vd2F2ZVwiOltcIip3YXZcIl0sXCJhdWRpby93ZWJtXCI6W1wid2ViYVwiXSxcImF1ZGlvL3htXCI6W1wieG1cIl0sXCJmb250L2NvbGxlY3Rpb25cIjpbXCJ0dGNcIl0sXCJmb250L290ZlwiOltcIm90ZlwiXSxcImZvbnQvdHRmXCI6W1widHRmXCJdLFwiZm9udC93b2ZmXCI6W1wid29mZlwiXSxcImZvbnQvd29mZjJcIjpbXCJ3b2ZmMlwiXSxcImltYWdlL2FjZXNcIjpbXCJleHJcIl0sXCJpbWFnZS9hcG5nXCI6W1wiYXBuZ1wiXSxcImltYWdlL2F2aWZcIjpbXCJhdmlmXCJdLFwiaW1hZ2UvYm1wXCI6W1wiYm1wXCJdLFwiaW1hZ2UvY2dtXCI6W1wiY2dtXCJdLFwiaW1hZ2UvZGljb20tcmxlXCI6W1wiZHJsZVwiXSxcImltYWdlL2VtZlwiOltcImVtZlwiXSxcImltYWdlL2ZpdHNcIjpbXCJmaXRzXCJdLFwiaW1hZ2UvZzNmYXhcIjpbXCJnM1wiXSxcImltYWdlL2dpZlwiOltcImdpZlwiXSxcImltYWdlL2hlaWNcIjpbXCJoZWljXCJdLFwiaW1hZ2UvaGVpYy1zZXF1ZW5jZVwiOltcImhlaWNzXCJdLFwiaW1hZ2UvaGVpZlwiOltcImhlaWZcIl0sXCJpbWFnZS9oZWlmLXNlcXVlbmNlXCI6W1wiaGVpZnNcIl0sXCJpbWFnZS9oZWoya1wiOltcImhlajJcIl0sXCJpbWFnZS9oc2oyXCI6W1wiaHNqMlwiXSxcImltYWdlL2llZlwiOltcImllZlwiXSxcImltYWdlL2psc1wiOltcImpsc1wiXSxcImltYWdlL2pwMlwiOltcImpwMlwiLFwianBnMlwiXSxcImltYWdlL2pwZWdcIjpbXCJqcGVnXCIsXCJqcGdcIixcImpwZVwiXSxcImltYWdlL2pwaFwiOltcImpwaFwiXSxcImltYWdlL2pwaGNcIjpbXCJqaGNcIl0sXCJpbWFnZS9qcG1cIjpbXCJqcG1cIl0sXCJpbWFnZS9qcHhcIjpbXCJqcHhcIixcImpwZlwiXSxcImltYWdlL2p4clwiOltcImp4clwiXSxcImltYWdlL2p4cmFcIjpbXCJqeHJhXCJdLFwiaW1hZ2Uvanhyc1wiOltcImp4cnNcIl0sXCJpbWFnZS9qeHNcIjpbXCJqeHNcIl0sXCJpbWFnZS9qeHNjXCI6W1wianhzY1wiXSxcImltYWdlL2p4c2lcIjpbXCJqeHNpXCJdLFwiaW1hZ2Uvanhzc1wiOltcImp4c3NcIl0sXCJpbWFnZS9rdHhcIjpbXCJrdHhcIl0sXCJpbWFnZS9rdHgyXCI6W1wia3R4MlwiXSxcImltYWdlL3BuZ1wiOltcInBuZ1wiXSxcImltYWdlL3NnaVwiOltcInNnaVwiXSxcImltYWdlL3N2Zyt4bWxcIjpbXCJzdmdcIixcInN2Z3pcIl0sXCJpbWFnZS90MzhcIjpbXCJ0MzhcIl0sXCJpbWFnZS90aWZmXCI6W1widGlmXCIsXCJ0aWZmXCJdLFwiaW1hZ2UvdGlmZi1meFwiOltcInRmeFwiXSxcImltYWdlL3dlYnBcIjpbXCJ3ZWJwXCJdLFwiaW1hZ2Uvd21mXCI6W1wid21mXCJdLFwibWVzc2FnZS9kaXNwb3NpdGlvbi1ub3RpZmljYXRpb25cIjpbXCJkaXNwb3NpdGlvbi1ub3RpZmljYXRpb25cIl0sXCJtZXNzYWdlL2dsb2JhbFwiOltcInU4bXNnXCJdLFwibWVzc2FnZS9nbG9iYWwtZGVsaXZlcnktc3RhdHVzXCI6W1widThkc25cIl0sXCJtZXNzYWdlL2dsb2JhbC1kaXNwb3NpdGlvbi1ub3RpZmljYXRpb25cIjpbXCJ1OG1kblwiXSxcIm1lc3NhZ2UvZ2xvYmFsLWhlYWRlcnNcIjpbXCJ1OGhkclwiXSxcIm1lc3NhZ2UvcmZjODIyXCI6W1wiZW1sXCIsXCJtaW1lXCJdLFwibW9kZWwvM21mXCI6W1wiM21mXCJdLFwibW9kZWwvZ2x0Zitqc29uXCI6W1wiZ2x0ZlwiXSxcIm1vZGVsL2dsdGYtYmluYXJ5XCI6W1wiZ2xiXCJdLFwibW9kZWwvaWdlc1wiOltcImlnc1wiLFwiaWdlc1wiXSxcIm1vZGVsL21lc2hcIjpbXCJtc2hcIixcIm1lc2hcIixcInNpbG9cIl0sXCJtb2RlbC9tdGxcIjpbXCJtdGxcIl0sXCJtb2RlbC9vYmpcIjpbXCJvYmpcIl0sXCJtb2RlbC9zdGVwK3htbFwiOltcInN0cHhcIl0sXCJtb2RlbC9zdGVwK3ppcFwiOltcInN0cHpcIl0sXCJtb2RlbC9zdGVwLXhtbCt6aXBcIjpbXCJzdHB4elwiXSxcIm1vZGVsL3N0bFwiOltcInN0bFwiXSxcIm1vZGVsL3ZybWxcIjpbXCJ3cmxcIixcInZybWxcIl0sXCJtb2RlbC94M2QrYmluYXJ5XCI6W1wiKngzZGJcIixcIngzZGJ6XCJdLFwibW9kZWwveDNkK2Zhc3RpbmZvc2V0XCI6W1wieDNkYlwiXSxcIm1vZGVsL3gzZCt2cm1sXCI6W1wiKngzZHZcIixcIngzZHZ6XCJdLFwibW9kZWwveDNkK3htbFwiOltcIngzZFwiLFwieDNkelwiXSxcIm1vZGVsL3gzZC12cm1sXCI6W1wieDNkdlwiXSxcInRleHQvY2FjaGUtbWFuaWZlc3RcIjpbXCJhcHBjYWNoZVwiLFwibWFuaWZlc3RcIl0sXCJ0ZXh0L2NhbGVuZGFyXCI6W1wiaWNzXCIsXCJpZmJcIl0sXCJ0ZXh0L2NvZmZlZXNjcmlwdFwiOltcImNvZmZlZVwiLFwibGl0Y29mZmVlXCJdLFwidGV4dC9jc3NcIjpbXCJjc3NcIl0sXCJ0ZXh0L2NzdlwiOltcImNzdlwiXSxcInRleHQvaHRtbFwiOltcImh0bWxcIixcImh0bVwiLFwic2h0bWxcIl0sXCJ0ZXh0L2phZGVcIjpbXCJqYWRlXCJdLFwidGV4dC9qc3hcIjpbXCJqc3hcIl0sXCJ0ZXh0L2xlc3NcIjpbXCJsZXNzXCJdLFwidGV4dC9tYXJrZG93blwiOltcIm1hcmtkb3duXCIsXCJtZFwiXSxcInRleHQvbWF0aG1sXCI6W1wibW1sXCJdLFwidGV4dC9tZHhcIjpbXCJtZHhcIl0sXCJ0ZXh0L24zXCI6W1wibjNcIl0sXCJ0ZXh0L3BsYWluXCI6W1widHh0XCIsXCJ0ZXh0XCIsXCJjb25mXCIsXCJkZWZcIixcImxpc3RcIixcImxvZ1wiLFwiaW5cIixcImluaVwiXSxcInRleHQvcmljaHRleHRcIjpbXCJydHhcIl0sXCJ0ZXh0L3J0ZlwiOltcIipydGZcIl0sXCJ0ZXh0L3NnbWxcIjpbXCJzZ21sXCIsXCJzZ21cIl0sXCJ0ZXh0L3NoZXhcIjpbXCJzaGV4XCJdLFwidGV4dC9zbGltXCI6W1wic2xpbVwiLFwic2xtXCJdLFwidGV4dC9zcGR4XCI6W1wic3BkeFwiXSxcInRleHQvc3R5bHVzXCI6W1wic3R5bHVzXCIsXCJzdHlsXCJdLFwidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlc1wiOltcInRzdlwiXSxcInRleHQvdHJvZmZcIjpbXCJ0XCIsXCJ0clwiLFwicm9mZlwiLFwibWFuXCIsXCJtZVwiLFwibXNcIl0sXCJ0ZXh0L3R1cnRsZVwiOltcInR0bFwiXSxcInRleHQvdXJpLWxpc3RcIjpbXCJ1cmlcIixcInVyaXNcIixcInVybHNcIl0sXCJ0ZXh0L3ZjYXJkXCI6W1widmNhcmRcIl0sXCJ0ZXh0L3Z0dFwiOltcInZ0dFwiXSxcInRleHQveG1sXCI6W1wiKnhtbFwiXSxcInRleHQveWFtbFwiOltcInlhbWxcIixcInltbFwiXSxcInZpZGVvLzNncHBcIjpbXCIzZ3BcIixcIjNncHBcIl0sXCJ2aWRlby8zZ3BwMlwiOltcIjNnMlwiXSxcInZpZGVvL2gyNjFcIjpbXCJoMjYxXCJdLFwidmlkZW8vaDI2M1wiOltcImgyNjNcIl0sXCJ2aWRlby9oMjY0XCI6W1wiaDI2NFwiXSxcInZpZGVvL2lzby5zZWdtZW50XCI6W1wibTRzXCJdLFwidmlkZW8vanBlZ1wiOltcImpwZ3ZcIl0sXCJ2aWRlby9qcG1cIjpbXCIqanBtXCIsXCJqcGdtXCJdLFwidmlkZW8vbWoyXCI6W1wibWoyXCIsXCJtanAyXCJdLFwidmlkZW8vbXAydFwiOltcInRzXCJdLFwidmlkZW8vbXA0XCI6W1wibXA0XCIsXCJtcDR2XCIsXCJtcGc0XCJdLFwidmlkZW8vbXBlZ1wiOltcIm1wZWdcIixcIm1wZ1wiLFwibXBlXCIsXCJtMXZcIixcIm0ydlwiXSxcInZpZGVvL29nZ1wiOltcIm9ndlwiXSxcInZpZGVvL3F1aWNrdGltZVwiOltcInF0XCIsXCJtb3ZcIl0sXCJ2aWRlby93ZWJtXCI6W1wid2VibVwiXX07IiwiJ3VzZSBzdHJpY3QnO1xuXG5sZXQgTWltZSA9IHJlcXVpcmUoJy4vTWltZScpO1xubW9kdWxlLmV4cG9ydHMgPSBuZXcgTWltZShyZXF1aXJlKCcuL3R5cGVzL3N0YW5kYXJkJykpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFZlcnNpb24gPSBleHBvcnRzLmJ1aWxkQmFzZVVybCA9IGV4cG9ydHMuYnVpbGRGb3JtRGF0YVZhbHVlID0gZXhwb3J0cy5idWlsZEhlYWRlcnMgPSBleHBvcnRzLmJ1aWxkUGxhdGZvcm1EZXBlbmRlbnRDb25maWcgPSBleHBvcnRzLmdldERlZmF1bHRBdXRoID0gZXhwb3J0cy5nZXRSZXF1ZXN0VG9rZW4gPSBleHBvcnRzLnJlYWRGaWxlRnJvbVBhdGggPSB2b2lkIDA7XG52YXIgVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yXzEgPSByZXF1aXJlKFwiLi9VbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3JcIik7XG52YXIgbGl0ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJtaW1lL2xpdGVcIikpO1xudmFyIHBhY2thZ2VfanNvbl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9wYWNrYWdlLmpzb25cIikpO1xudmFyIHJlYWRGaWxlRnJvbVBhdGggPSBmdW5jdGlvbiAoZmlsZVBhdGgpIHtcbiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yXzEuVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yKFwiQnJvd3NlclwiKTtcbn07XG5leHBvcnRzLnJlYWRGaWxlRnJvbVBhdGggPSByZWFkRmlsZUZyb21QYXRoO1xudmFyIGdldFJlcXVlc3RUb2tlbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9jKSB7XG4gICAgICAgIGlmICh0eXBlb2Yga2ludG9uZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAga2ludG9uZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgdHlwZW9mIGtpbnRvbmUuZ2V0UmVxdWVzdFRva2VuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBraW50b25lLmdldFJlcXVlc3RUb2tlbigpXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGdhcm9vbiA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgZ2Fyb29uICE9PSBudWxsICYmXG4gICAgICAgICAgICB0eXBlb2YgKChfYiA9IChfYSA9IGdhcm9vbi5jb25uZWN0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eua2ludG9uZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmdldFJlcXVlc3RUb2tlbikgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGdhcm9vbi5jb25uZWN0LmtpbnRvbmUuZ2V0UmVxdWVzdFRva2VuKCldO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInNlc3Npb24gYXV0aGVudGljYXRpb24gbXVzdCBzcGVjaWZ5IGEgcmVxdWVzdCB0b2tlblwiKTtcbiAgICB9KTtcbn0pOyB9O1xuZXhwb3J0cy5nZXRSZXF1ZXN0VG9rZW4gPSBnZXRSZXF1ZXN0VG9rZW47XG52YXIgZ2V0RGVmYXVsdEF1dGggPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJzZXNzaW9uXCIsXG4gICAgfTtcbn07XG5leHBvcnRzLmdldERlZmF1bHRBdXRoID0gZ2V0RGVmYXVsdEF1dGg7XG52YXIgYnVpbGRQbGF0Zm9ybURlcGVuZGVudENvbmZpZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge307XG59O1xuZXhwb3J0cy5idWlsZFBsYXRmb3JtRGVwZW5kZW50Q29uZmlnID0gYnVpbGRQbGF0Zm9ybURlcGVuZGVudENvbmZpZztcbnZhciBidWlsZEhlYWRlcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHt9O1xufTtcbmV4cG9ydHMuYnVpbGRIZWFkZXJzID0gYnVpbGRIZWFkZXJzO1xudmFyIGJ1aWxkRm9ybURhdGFWYWx1ZSA9IGZ1bmN0aW9uIChkYXRhLCBmaWxlTmFtZSkge1xuICAgIHZhciBvcHRpb25zID0ge307XG4gICAgaWYgKGZpbGVOYW1lKSB7XG4gICAgICAgIG9wdGlvbnMudHlwZSA9IGxpdGVfMS5kZWZhdWx0LmdldFR5cGUoZmlsZU5hbWUpIHx8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBCbG9iKFtkYXRhXSwgb3B0aW9ucyk7XG59O1xuZXhwb3J0cy5idWlsZEZvcm1EYXRhVmFsdWUgPSBidWlsZEZvcm1EYXRhVmFsdWU7XG52YXIgYnVpbGRCYXNlVXJsID0gZnVuY3Rpb24gKGJhc2VVcmwpIHtcbiAgICBpZiAoYmFzZVVybCkge1xuICAgICAgICByZXR1cm4gYmFzZVVybDtcbiAgICB9XG4gICAgaWYgKGxvY2F0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGJhc2VVcmwgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIGZvciB0aGlzIGVudmlyb25tZW50XCIpO1xuICAgIH1cbiAgICB2YXIgaG9zdCA9IGxvY2F0aW9uLmhvc3QsIHByb3RvY29sID0gbG9jYXRpb24ucHJvdG9jb2w7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHByb3RvY29sLCBcIi8vXCIpLmNvbmNhdChob3N0KTtcbn07XG5leHBvcnRzLmJ1aWxkQmFzZVVybCA9IGJ1aWxkQmFzZVVybDtcbnZhciBnZXRWZXJzaW9uID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBwYWNrYWdlX2pzb25fMS5kZWZhdWx0LnZlcnNpb247XG59O1xuZXhwb3J0cy5nZXRWZXJzaW9uID0gZ2V0VmVyc2lvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJyb3dzZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJ1aWxkUGF0aCA9IHZvaWQgMDtcbnZhciBidWlsZFBhdGggPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgdmFyIGVuZHBvaW50TmFtZSA9IHBhcmFtcy5lbmRwb2ludE5hbWUsIGd1ZXN0U3BhY2VJZCA9IHBhcmFtcy5ndWVzdFNwYWNlSWQsIHByZXZpZXcgPSBwYXJhbXMucHJldmlldztcbiAgICB2YXIgZ3Vlc3RQYXRoID0gZ3Vlc3RTcGFjZUlkICE9PSB1bmRlZmluZWQgPyBcIi9ndWVzdC9cIi5jb25jYXQoZ3Vlc3RTcGFjZUlkKSA6IFwiXCI7XG4gICAgdmFyIHByZXZpZXdQYXRoID0gcHJldmlldyA/IFwiL3ByZXZpZXdcIiA6IFwiXCI7XG4gICAgcmV0dXJuIFwiL2tcIi5jb25jYXQoZ3Vlc3RQYXRoLCBcIi92MVwiKS5jb25jYXQocHJldmlld1BhdGgsIFwiL1wiKS5jb25jYXQoZW5kcG9pbnROYW1lLCBcIi5qc29uXCIpO1xufTtcbmV4cG9ydHMuYnVpbGRQYXRoID0gYnVpbGRQYXRoO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXJsLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQmFzZUNsaWVudCA9IHZvaWQgMDtcbnZhciB1cmxfMSA9IHJlcXVpcmUoXCIuLi91cmxcIik7XG52YXIgQmFzZUNsaWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBCYXNlQ2xpZW50KGNsaWVudCwgZ3Vlc3RTcGFjZUlkKSB7XG4gICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgICAgICB0aGlzLmd1ZXN0U3BhY2VJZCA9IGd1ZXN0U3BhY2VJZDtcbiAgICB9XG4gICAgQmFzZUNsaWVudC5wcm90b3R5cGUuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuICgwLCB1cmxfMS5idWlsZFBhdGgpKF9fYXNzaWduKF9fYXNzaWduKHt9LCBwYXJhbXMpLCB7IGd1ZXN0U3BhY2VJZDogdGhpcy5ndWVzdFNwYWNlSWQgfSkpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBidWlsZCB0aGUgZW5kcG9pbnQgZm9yIHRoZSBBUEkgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBndWVzdCBzcGFjZSBVUkwuXG4gICAgICogT3RoZXJ3aXNlLCBwbGVhc2UgdXNlIGBidWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkYCBpbnN0ZWFkLlxuICAgICAqIEBwYXJhbSBwYXJhbXNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgQmFzZUNsaWVudC5wcm90b3R5cGUuYnVpbGRQYXRoID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gKDAsIHVybF8xLmJ1aWxkUGF0aCkocGFyYW1zKTtcbiAgICB9O1xuICAgIHJldHVybiBCYXNlQ2xpZW50O1xufSgpKTtcbmV4cG9ydHMuQmFzZUNsaWVudCA9IEJhc2VDbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1CYXNlQ2xpZW50LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkJ1bGtSZXF1ZXN0Q2xpZW50ID0gdm9pZCAwO1xudmFyIEJhc2VDbGllbnRfMSA9IHJlcXVpcmUoXCIuL0Jhc2VDbGllbnRcIik7XG52YXIgQnVsa1JlcXVlc3RDbGllbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEJ1bGtSZXF1ZXN0Q2xpZW50LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEJ1bGtSZXF1ZXN0Q2xpZW50KGNsaWVudCwgZ3Vlc3RTcGFjZUlkKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGNsaWVudCwgZ3Vlc3RTcGFjZUlkKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5SRVFVRVNUU19MRU5HVEhfTElNSVQgPSAyMDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBCdWxrUmVxdWVzdENsaWVudC5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHJlcXVlc3RzUGFyYW0gPSBwYXJhbXMucmVxdWVzdHM7XG4gICAgICAgIHZhciByZXF1ZXN0cyA9IHJlcXVlc3RzUGFyYW0ubWFwKGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG4gICAgICAgICAgICBpZiAoXCJlbmRwb2ludE5hbWVcIiBpbiByZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGVuZHBvaW50TmFtZSA9IHJlcXVlc3QuZW5kcG9pbnROYW1lLCByZXN0ID0gX19yZXN0KHJlcXVlc3QsIFtcImVuZHBvaW50TmFtZVwiXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9fYXNzaWduKHsgYXBpOiBfdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHsgZW5kcG9pbnROYW1lOiBlbmRwb2ludE5hbWUgfSkgfSwgcmVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJidWxrUmVxdWVzdFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnBvc3QocGF0aCwgeyByZXF1ZXN0czogcmVxdWVzdHMgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gQnVsa1JlcXVlc3RDbGllbnQ7XG59KEJhc2VDbGllbnRfMS5CYXNlQ2xpZW50KSk7XG5leHBvcnRzLkJ1bGtSZXF1ZXN0Q2xpZW50ID0gQnVsa1JlcXVlc3RDbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1CdWxrUmVxdWVzdENsaWVudC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BcHBDbGllbnQgPSB2b2lkIDA7XG52YXIgQmFzZUNsaWVudF8xID0gcmVxdWlyZShcIi4vQmFzZUNsaWVudFwiKTtcbnZhciBBcHBDbGllbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFwcENsaWVudCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBcHBDbGllbnQoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5nZXRGb3JtRmllbGRzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcHJldmlldyA9IHBhcmFtcy5wcmV2aWV3LCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wicHJldmlld1wiXSk7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvZm9ybS9maWVsZHNcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHByZXZpZXcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIF9fYXNzaWduKHt9LCByZXN0KSk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmFkZEZvcm1GaWVsZHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvZm9ybS9maWVsZHNcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucG9zdChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS51cGRhdGVGb3JtRmllbGRzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2Zvcm0vZmllbGRzXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5kZWxldGVGb3JtRmllbGRzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2Zvcm0vZmllbGRzXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmRlbGV0ZShwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5nZXRGb3JtTGF5b3V0ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcHJldmlldyA9IHBhcmFtcy5wcmV2aWV3LCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wicHJldmlld1wiXSk7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvZm9ybS9sYXlvdXRcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHByZXZpZXcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIF9fYXNzaWduKHt9LCByZXN0KSk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLnVwZGF0ZUZvcm1MYXlvdXQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvZm9ybS9sYXlvdXRcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmdldFZpZXdzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcHJldmlldyA9IHBhcmFtcy5wcmV2aWV3LCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wicHJldmlld1wiXSk7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvdmlld3NcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHByZXZpZXcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHJlc3QpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS51cGRhdGVWaWV3cyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC92aWV3c1wiLFxuICAgICAgICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUuZ2V0QXBwID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmdldEFwcHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHBzXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmFkZEFwcCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG5hbWUsIHNwYWNlLCBwYXRoLCBzcGFjZVBhdGgsIGRlZmF1bHRUaHJlYWQ7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gcGFyYW1zLm5hbWUsIHNwYWNlID0gcGFyYW1zLnNwYWNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3BhY2UpIHJldHVybiBbMyAvKmJyZWFrKi8sIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VQYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwic3BhY2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5jbGllbnQuZ2V0KHNwYWNlUGF0aCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogc3BhY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VGhyZWFkID0gKF9hLnNlbnQoKSkuZGVmYXVsdFRocmVhZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLmNsaWVudC5wb3N0KHBhdGgsIF9fYXNzaWduKF9fYXNzaWduKHt9LCBwYXJhbXMpLCB7IHRocmVhZDogZGVmYXVsdFRocmVhZCB9KSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLmNsaWVudC5wb3N0KHBhdGgsIHsgbmFtZTogbmFtZSB9KV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5nZXRBcHBTZXR0aW5ncyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHByZXZpZXcgPSBwYXJhbXMucHJldmlldywgcmVzdCA9IF9fcmVzdChwYXJhbXMsIFtcInByZXZpZXdcIl0pO1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL3NldHRpbmdzXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiBwcmV2aWV3LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCByZXN0KTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUudXBkYXRlQXBwU2V0dGluZ3MgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvc2V0dGluZ3NcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmdldFByb2Nlc3NNYW5hZ2VtZW50ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcHJldmlldyA9IHBhcmFtcy5wcmV2aWV3LCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wicHJldmlld1wiXSk7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvc3RhdHVzXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiBwcmV2aWV3LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCByZXN0KTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUudXBkYXRlUHJvY2Vzc01hbmFnZW1lbnQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvc3RhdHVzXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5nZXREZXBsb3lTdGF0dXMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvZGVwbG95XCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5kZXBsb3lBcHAgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvZGVwbG95XCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnBvc3QocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUuZ2V0RmllbGRBY2wgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwcmV2aWV3ID0gcGFyYW1zLnByZXZpZXcsIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJwcmV2aWV3XCJdKTtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImZpZWxkL2FjbFwiLFxuICAgICAgICAgICAgcHJldmlldzogcHJldmlldyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgX19hc3NpZ24oe30sIHJlc3QpKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUudXBkYXRlRmllbGRBY2wgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIC8vIE5PVEU6IFdoZW4gZXhlY3V0aW5nIHRoaXMgQVBJIHdpdGhvdXQgYHByZXZpZXdgLFxuICAgICAgICAvLyBhbGwgcHJlLWxpdmUgYXBwJ3Mgc2V0dGluZ3Mgd2lsbCBiZSBkZXBsb3llZCB0byBsaXZlIGFwcC5cbiAgICAgICAgLy8gVGhpcyBiZWhhdmlvciBtYXkgbm90IGJlIHdoYXQgdGhlIHVzZXJzIGV4cGVjdGVkLFxuICAgICAgICAvLyBzbyB3ZSBkaXNhYmxlIGl0IHRlbXBvcmFyaWx5LlxuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiZmllbGQvYWNsXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5nZXRBcHBBY2wgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwcmV2aWV3ID0gcGFyYW1zLnByZXZpZXcsIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJwcmV2aWV3XCJdKTtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9hY2xcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHByZXZpZXcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIF9fYXNzaWduKHt9LCByZXN0KSk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLnVwZGF0ZUFwcEFjbCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgLy8gTk9URTogV2hlbiBleGVjdXRpbmcgdGhpcyBBUEkgd2l0aG91dCBgcHJldmlld2AsXG4gICAgICAgIC8vIGFsbCBwcmUtbGl2ZSBhcHAncyBzZXR0aW5ncyB3aWxsIGJlIGRlcGxveWVkIHRvIGxpdmUgYXBwLlxuICAgICAgICAvLyBUaGlzIGJlaGF2aW9yIG1heSBub3QgYmUgd2hhdCB0aGUgdXNlcnMgZXhwZWN0ZWQsXG4gICAgICAgIC8vIHNvIHdlIGRpc2FibGUgaXQgdGVtcG9yYXJpbHkuXG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvYWNsXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5ldmFsdWF0ZVJlY29yZHNBY2wgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzL2FjbC9ldmFsdWF0ZVwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5nZXRSZWNvcmRBY2wgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwcmV2aWV3ID0gcGFyYW1zLnByZXZpZXcsIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJwcmV2aWV3XCJdKTtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZC9hY2xcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHByZXZpZXcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIF9fYXNzaWduKHt9LCByZXN0KSk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLnVwZGF0ZVJlY29yZEFjbCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgLy8gTk9URTogV2hlbiBleGVjdXRpbmcgdGhpcyBBUEkgd2l0aG91dCBgcHJldmlld2AsXG4gICAgICAgIC8vIGFsbCBwcmUtbGl2ZSBhcHAncyBzZXR0aW5ncyB3aWxsIGJlIGRlcGxveWVkIHRvIGxpdmUgYXBwLlxuICAgICAgICAvLyBUaGlzIGJlaGF2aW9yIG1heSBub3QgYmUgd2hhdCB0aGUgdXNlcnMgZXhwZWN0ZWQsXG4gICAgICAgIC8vIHNvIHdlIGRpc2FibGUgaXQgdGVtcG9yYXJpbHkuXG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmQvYWNsXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5nZXRBcHBDdXN0b21pemUgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwcmV2aWV3ID0gcGFyYW1zLnByZXZpZXcsIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJwcmV2aWV3XCJdKTtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9jdXN0b21pemVcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHByZXZpZXcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIF9fYXNzaWduKHt9LCByZXN0KSk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLnVwZGF0ZUFwcEN1c3RvbWl6ZSA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9jdXN0b21pemVcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmdldEdlbmVyYWxOb3RpZmljYXRpb25zID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcHJldmlldyA9IHBhcmFtcy5wcmV2aWV3LCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wicHJldmlld1wiXSk7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvbm90aWZpY2F0aW9ucy9nZW5lcmFsXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiBwcmV2aWV3LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBfX2Fzc2lnbih7fSwgcmVzdCkpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS51cGRhdGVHZW5lcmFsTm90aWZpY2F0aW9ucyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9ub3RpZmljYXRpb25zL2dlbmVyYWxcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmdldFBlclJlY29yZE5vdGlmaWNhdGlvbnMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwcmV2aWV3ID0gcGFyYW1zLnByZXZpZXcsIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJwcmV2aWV3XCJdKTtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9ub3RpZmljYXRpb25zL3BlclJlY29yZFwiLFxuICAgICAgICAgICAgcHJldmlldzogcHJldmlldyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcmVzdCk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLnVwZGF0ZVBlclJlY29yZE5vdGlmaWNhdGlvbnMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvbm90aWZpY2F0aW9ucy9wZXJSZWNvcmRcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmdldFJlbWluZGVyTm90aWZpY2F0aW9ucyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHByZXZpZXcgPSBwYXJhbXMucHJldmlldywgcmVzdCA9IF9fcmVzdChwYXJhbXMsIFtcInByZXZpZXdcIl0pO1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL25vdGlmaWNhdGlvbnMvcmVtaW5kZXJcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHByZXZpZXcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHJlc3QpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS51cGRhdGVSZW1pbmRlck5vdGlmaWNhdGlvbnMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvbm90aWZpY2F0aW9ucy9yZW1pbmRlclwiLFxuICAgICAgICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUuZ2V0UmVwb3J0cyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHByZXZpZXcgPSBwYXJhbXMucHJldmlldywgcmVzdCA9IF9fcmVzdChwYXJhbXMsIFtcInByZXZpZXdcIl0pO1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL3JlcG9ydHNcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHByZXZpZXcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHJlc3QpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS51cGRhdGVSZXBvcnRzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL3JlcG9ydHNcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmdldEFwcEFjdGlvbnMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwcmV2aWV3ID0gcGFyYW1zLnByZXZpZXcsIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJwcmV2aWV3XCJdKTtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9hY3Rpb25zXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiBwcmV2aWV3LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCByZXN0KTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUudXBkYXRlQXBwQWN0aW9ucyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9hY3Rpb25zXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgcmV0dXJuIEFwcENsaWVudDtcbn0oQmFzZUNsaWVudF8xLkJhc2VDbGllbnQpKTtcbmV4cG9ydHMuQXBwQ2xpZW50ID0gQXBwQ2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXBwQ2xpZW50LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuS2ludG9uZUFib3J0U2VhcmNoRXJyb3IgPSB2b2lkIDA7XG52YXIgS2ludG9uZUFib3J0U2VhcmNoRXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEtpbnRvbmVBYm9ydFNlYXJjaEVycm9yLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEtpbnRvbmVBYm9ydFNlYXJjaEVycm9yKG1lc3NhZ2UpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbWVzc2FnZSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMubmFtZSA9IFwiS2ludG9uZUFib3J0U2VhcmNoRXJyb3JcIjtcbiAgICAgICAgX3RoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC93aWtpL0JyZWFraW5nLUNoYW5nZXMjZXh0ZW5kaW5nLWJ1aWx0LWlucy1saWtlLWVycm9yLWFycmF5LWFuZC1tYXAtbWF5LW5vLWxvbmdlci13b3JrXG4gICAgICAgIC8vIFNldCB0aGUgcHJvdG90eXBlIGV4cGxpY2l0bHkuXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihfdGhpcywgS2ludG9uZUFib3J0U2VhcmNoRXJyb3IucHJvdG90eXBlKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gS2ludG9uZUFib3J0U2VhcmNoRXJyb3I7XG59KEVycm9yKSk7XG5leHBvcnRzLktpbnRvbmVBYm9ydFNlYXJjaEVycm9yID0gS2ludG9uZUFib3J0U2VhcmNoRXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1LaW50b25lQWJvcnRTZWFyY2hFcnJvci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLktpbnRvbmVBbGxSZWNvcmRzRXJyb3IgPSB2b2lkIDA7XG52YXIgS2ludG9uZUFsbFJlY29yZHNFcnJvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoS2ludG9uZUFsbFJlY29yZHNFcnJvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBLaW50b25lQWxsUmVjb3Jkc0Vycm9yKHByb2Nlc3NlZFJlY29yZHNSZXN1bHQsIHVucHJvY2Vzc2VkUmVjb3JkcywgbnVtT2ZBbGxSZWNvcmRzLCBlcnJvciwgY2h1bmtMZW5ndGgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIG51bU9mUHJvY2Vzc2VkUmVjb3JkcyA9IG51bU9mQWxsUmVjb3JkcyAtIHVucHJvY2Vzc2VkUmVjb3Jkcy5sZW5ndGg7XG4gICAgICAgIHZhciBlcnJvckluZGV4ID0gS2ludG9uZUFsbFJlY29yZHNFcnJvci5leHRyYWN0RXJyb3JJbmRleChudW1PZlByb2Nlc3NlZFJlY29yZHMsIGVycm9yLCBjaHVua0xlbmd0aCk7XG4gICAgICAgIHZhciBtZXNzYWdlID0gS2ludG9uZUFsbFJlY29yZHNFcnJvci5idWlsZEVycm9yTWVzc2FnZShudW1PZlByb2Nlc3NlZFJlY29yZHMsIG51bU9mQWxsUmVjb3JkcywgZXJyb3JJbmRleCk7XG4gICAgICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbWVzc2FnZSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMubmFtZSA9IFwiS2ludG9uZUFsbFJlY29yZHNFcnJvclwiO1xuICAgICAgICBfdGhpcy5wcm9jZXNzZWRSZWNvcmRzUmVzdWx0ID0gcHJvY2Vzc2VkUmVjb3Jkc1Jlc3VsdDtcbiAgICAgICAgX3RoaXMudW5wcm9jZXNzZWRSZWNvcmRzID0gdW5wcm9jZXNzZWRSZWNvcmRzO1xuICAgICAgICBfdGhpcy5lcnJvciA9IGVycm9yO1xuICAgICAgICBfdGhpcy5lcnJvckluZGV4ID0gZXJyb3JJbmRleDtcbiAgICAgICAgX3RoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIF90aGlzLm51bU9mUHJvY2Vzc2VkUmVjb3JkcyA9IG51bU9mUHJvY2Vzc2VkUmVjb3JkcztcbiAgICAgICAgX3RoaXMubnVtT2ZBbGxSZWNvcmRzID0gbnVtT2ZBbGxSZWNvcmRzO1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvd2lraS9CcmVha2luZy1DaGFuZ2VzI2V4dGVuZGluZy1idWlsdC1pbnMtbGlrZS1lcnJvci1hcnJheS1hbmQtbWFwLW1heS1uby1sb25nZXItd29ya1xuICAgICAgICAvLyBTZXQgdGhlIHByb3RvdHlwZSBleHBsaWNpdGx5LlxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoX3RoaXMsIEtpbnRvbmVBbGxSZWNvcmRzRXJyb3IucHJvdG90eXBlKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBLaW50b25lQWxsUmVjb3Jkc0Vycm9yLnBhcnNlRXJyb3JJbmRleCA9IGZ1bmN0aW9uIChlcnJvcnMpIHtcbiAgICAgICAgLy8gVE9ETzogdXNlIG1hdGNoQWxsIGFmdGVyIEVTMjAyMCBzdXBwb3J0XG4gICAgICAgIHZhciBlcnJvckluZGV4ZXMgPSBbXTtcbiAgICAgICAgT2JqZWN0LmtleXMoZXJyb3JzKS5mb3JFYWNoKGZ1bmN0aW9uIChlcnJvcktleSkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGVycm9yS2V5Lm1hdGNoKC9yZWNvcmRzXFxbKFxcZCspXFxdLyk7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgZXJyb3JJbmRleGVzLnB1c2goTnVtYmVyKHJlc3VsdFsxXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGVycm9ySW5kZXhlcy5sZW5ndGggPiAwID8gTWF0aC5taW4uYXBwbHkoTWF0aCwgZXJyb3JJbmRleGVzKSA6IG51bGw7XG4gICAgfTtcbiAgICBLaW50b25lQWxsUmVjb3Jkc0Vycm9yLmV4dHJhY3RFcnJvckluZGV4ID0gZnVuY3Rpb24gKG51bU9mUHJvY2Vzc2VkUmVjb3JkcywgZXJyb3IsIGNodW5rTGVuZ3RoKSB7XG4gICAgICAgIGlmIChlcnJvci5idWxrUmVxdWVzdEluZGV4ICE9PSB1bmRlZmluZWQgJiYgZXJyb3IuZXJyb3JzKSB7XG4gICAgICAgICAgICB2YXIgZXJyb3JQYXJzZVJlc3VsdCA9IEtpbnRvbmVBbGxSZWNvcmRzRXJyb3IucGFyc2VFcnJvckluZGV4KGVycm9yLmVycm9ycyk7XG4gICAgICAgICAgICBpZiAoZXJyb3JQYXJzZVJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAobnVtT2ZQcm9jZXNzZWRSZWNvcmRzICtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IuYnVsa1JlcXVlc3RJbmRleCAqIGNodW5rTGVuZ3RoICtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JQYXJzZVJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIEtpbnRvbmVBbGxSZWNvcmRzRXJyb3IuYnVpbGRFcnJvck1lc3NhZ2UgPSBmdW5jdGlvbiAobnVtT2ZQcm9jZXNzZWRSZWNvcmRzLCBudW1PZkFsbFJlY29yZHMsIGVycm9ySW5kZXgpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBcIlwiO1xuICAgICAgICBpZiAoZXJyb3JJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBtZXNzYWdlID0gXCJBbiBlcnJvciBvY2N1cnJlZCBhdCByZWNvcmRzW1wiLmNvbmNhdChlcnJvckluZGV4LCBcIl0uIFwiKTtcbiAgICAgICAgfVxuICAgICAgICBtZXNzYWdlICs9IFwiXCIuY29uY2F0KG51bU9mUHJvY2Vzc2VkUmVjb3JkcywgXCIvXCIpLmNvbmNhdChudW1PZkFsbFJlY29yZHMsIFwiIHJlY29yZHMgYXJlIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHlcIik7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH07XG4gICAgcmV0dXJuIEtpbnRvbmVBbGxSZWNvcmRzRXJyb3I7XG59KEVycm9yKSk7XG5leHBvcnRzLktpbnRvbmVBbGxSZWNvcmRzRXJyb3IgPSBLaW50b25lQWxsUmVjb3Jkc0Vycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9S2ludG9uZUFsbFJlY29yZHNFcnJvci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLktpbnRvbmVSZXN0QVBJRXJyb3IgPSB2b2lkIDA7XG52YXIgS2ludG9uZVJlc3RBUElFcnJvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoS2ludG9uZVJlc3RBUElFcnJvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBLaW50b25lUmVzdEFQSUVycm9yKGVycm9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IEtpbnRvbmVSZXN0QVBJRXJyb3IuYnVpbGRFcnJvclJlc3BvbnNlRGF0ZVdpdGhJbmRleChlcnJvciksIGRhdGEgPSBfYS5kYXRhLCBidWxrUmVxdWVzdEluZGV4ID0gX2EuYnVsa1JlcXVlc3RJbmRleDtcbiAgICAgICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkYXRhLm1lc3NhZ2UpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm5hbWUgPSBcIktpbnRvbmVSZXN0QVBJRXJyb3JcIjtcbiAgICAgICAgX3RoaXMuaWQgPSBkYXRhLmlkO1xuICAgICAgICBfdGhpcy5jb2RlID0gZGF0YS5jb2RlO1xuICAgICAgICBfdGhpcy5lcnJvcnMgPSBkYXRhLmVycm9ycztcbiAgICAgICAgX3RoaXMuc3RhdHVzID0gZXJyb3Iuc3RhdHVzO1xuICAgICAgICBfdGhpcy5idWxrUmVxdWVzdEluZGV4ID0gYnVsa1JlcXVlc3RJbmRleDtcbiAgICAgICAgX3RoaXMuaGVhZGVycyA9IGVycm9yLmhlYWRlcnM7XG4gICAgICAgIF90aGlzLm1lc3NhZ2UgPSBcIltcIi5jb25jYXQoZXJyb3Iuc3RhdHVzLCBcIl0gW1wiKS5jb25jYXQoX3RoaXMuY29kZSwgXCJdIFwiKS5jb25jYXQoX3RoaXMubWVzc2FnZSwgXCIgKFwiKS5jb25jYXQoX3RoaXMuaWQsIFwiKVwiKTtcbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRXJyb3IjQ3VzdG9tX0Vycm9yX1R5cGVzXG4gICAgICAgIC8vIE1haW50YWlucyBwcm9wZXIgc3RhY2sgdHJhY2UgZm9yIHdoZXJlIG91ciBlcnJvciB3YXMgdGhyb3duIChvbmx5IGF2YWlsYWJsZSBvbiBWOClcbiAgICAgICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShfdGhpcywgS2ludG9uZVJlc3RBUElFcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L3dpa2kvQnJlYWtpbmctQ2hhbmdlcyNleHRlbmRpbmctYnVpbHQtaW5zLWxpa2UtZXJyb3ItYXJyYXktYW5kLW1hcC1tYXktbm8tbG9uZ2VyLXdvcmtcbiAgICAgICAgLy8gU2V0IHRoZSBwcm90b3R5cGUgZXhwbGljaXRseS5cbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKF90aGlzLCBLaW50b25lUmVzdEFQSUVycm9yLnByb3RvdHlwZSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgS2ludG9uZVJlc3RBUElFcnJvci5maW5kRXJyb3JSZXNwb25zZURhdGFXaXRoSW5kZXggPSBmdW5jdGlvbiAocmVzdWx0cykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhyZXN1bHRzW2ldKS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHJlc3VsdHNbaV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogZGF0YSwgYnVsa1JlcXVlc3RJbmRleDogaSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IEVycm9yKFwiTWlzc2luZyByZXNwb25zZSBkYXRhIGluIGByZXN1bHRzYC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIEtpbnRvbmUgUkVTVCBBUEkgQ2xpZW50LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIik7XG4gICAgfTtcbiAgICBLaW50b25lUmVzdEFQSUVycm9yLmJ1aWxkRXJyb3JSZXNwb25zZURhdGVXaXRoSW5kZXggPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKFwicmVzdWx0c1wiIGluIGVycm9yLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBLaW50b25lUmVzdEFQSUVycm9yLmZpbmRFcnJvclJlc3BvbnNlRGF0YVdpdGhJbmRleChlcnJvci5kYXRhLnJlc3VsdHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRhdGE6IGVycm9yLmRhdGEgfTtcbiAgICB9O1xuICAgIHJldHVybiBLaW50b25lUmVzdEFQSUVycm9yO1xufShFcnJvcikpO1xuZXhwb3J0cy5LaW50b25lUmVzdEFQSUVycm9yID0gS2ludG9uZVJlc3RBUElFcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUtpbnRvbmVSZXN0QVBJRXJyb3IuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9LaW50b25lQWJvcnRTZWFyY2hFcnJvclwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vS2ludG9uZUFsbFJlY29yZHNFcnJvclwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vS2ludG9uZVJlc3RBUElFcnJvclwiKSwgZXhwb3J0cyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SZWNvcmRDbGllbnQgPSB2b2lkIDA7XG52YXIgZXJyb3JfMSA9IHJlcXVpcmUoXCIuLi9lcnJvclwiKTtcbnZhciBCYXNlQ2xpZW50XzEgPSByZXF1aXJlKFwiLi9CYXNlQ2xpZW50XCIpO1xudmFyIEFERF9SRUNPUkRTX0xJTUlUID0gMTAwO1xudmFyIFVQREFURV9SRUNPUkRTX0xJTUlUID0gMTAwO1xudmFyIERFTEVURV9SRUNPUkRTX0xJTUlUID0gMTAwO1xudmFyIEdFVF9SRUNPUkRTX0xJTUlUID0gNTAwO1xudmFyIFJlY29yZENsaWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUmVjb3JkQ2xpZW50LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFJlY29yZENsaWVudChjbGllbnQsIGJ1bGtSZXF1ZXN0Q2xpZW50LCBndWVzdFNwYWNlSWQpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgY2xpZW50LCBndWVzdFNwYWNlSWQpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmJ1bGtSZXF1ZXN0Q2xpZW50ID0gYnVsa1JlcXVlc3RDbGllbnQ7XG4gICAgICAgIF90aGlzLmRpZFdhcm5NYXhpbXVtT2Zmc2V0VmFsdWUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmdldFJlY29yZCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5hZGRSZWNvcmQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wb3N0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLnVwZGF0ZVJlY29yZCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS51cHNlcnRSZWNvcmQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcHAsIHVwZGF0ZUtleSwgcmVjb3JkLCByZWNvcmRzLCByZXZpc2lvbjtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcCA9IHBhcmFtcy5hcHAsIHVwZGF0ZUtleSA9IHBhcmFtcy51cGRhdGVLZXksIHJlY29yZCA9IHBhcmFtcy5yZWNvcmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmdldFJlY29yZHMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHA6IGFwcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnk6IFwiXCIuY29uY2F0KHVwZGF0ZUtleS5maWVsZCwgXCIgPSBcXFwiXCIpLmNvbmNhdCh1cGRhdGVLZXkudmFsdWUsIFwiXFxcIlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHMgPSAoX2Iuc2VudCgpKS5yZWNvcmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVjb3Jkcy5sZW5ndGggPiAwKSkgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWNvcmRzWzBdLiRpZC50eXBlID09PSBcIl9fSURfX1wiKSkgcmV0dXJuIFszIC8qYnJlYWsqLywgM107XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLnVwZGF0ZVJlY29yZChwYXJhbXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb24gPSAoX2Iuc2VudCgpKS5yZXZpc2lvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7IGlkOiByZWNvcmRzWzBdLiRpZC52YWx1ZSwgcmV2aXNpb246IHJldmlzaW9uIH1dO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgYCRpZGAgaW4gYGdldFJlY29yZHNgIHJlc3BvbnNlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gS2ludG9uZSBSRVNUIEFQSSBDbGllbnQuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIgLypyZXR1cm4qLywgdGhpcy5hZGRSZWNvcmQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcDogYXBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZDogT2JqZWN0LmFzc2lnbih7fSwgcmVjb3JkLCAoX2EgPSB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2FbdXBkYXRlS2V5LmZpZWxkXSA9IHsgdmFsdWU6IHVwZGF0ZUtleS52YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIFRPRE86IGByZWNvcmRzYCB0eXBlIGluIHJldHVybiB0eXBlIHNob3VsZCBiZSBmaWx0ZXJlZCBieSBgZmllbGRzYC5cbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmdldFJlY29yZHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBwYXRoLCByZXNwb25zZTtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuY2xpZW50LmdldChwYXRoLCBwYXJhbXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndhcm5NYXhpbXVtT2Zmc2V0VmFsdWVJZk5lZWRlZChwYXJhbXMucXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHJlc3BvbnNlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLndhcm5NYXhpbXVtT2Zmc2V0VmFsdWVJZk5lZWRlZCA9IGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICAgIHZhciByZWdleHAgPSAvb2Zmc2V0XFxzKyhcXGQrKS9pO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHF1ZXJ5Lm1hdGNoKHJlZ2V4cCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGlkV2Fybk1heGltdW1PZmZzZXRWYWx1ZSAmJlxuICAgICAgICAgICAgICAgIHJlc3VsdCAmJlxuICAgICAgICAgICAgICAgIE51bWJlcihyZXN1bHRbMV0pID4gMTAwMDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpZFdhcm5NYXhpbXVtT2Zmc2V0VmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIldhcm5pbmc6IFRoZSBtYXhpbXVtIG9mZnNldCB2YWx1ZSB3aWxsIGJlIGxpbWl0ZWQgdG8gMTAsMDAwIGluIHRoZSBmdXR1cmUuIFBsZWFzZSB1c2UgYGNyZWF0ZUN1cnNvcigpYCBhbmQgYGdldFJlY29yZHNCeUN1cnNvcigpYCBpbnN0ZWFkLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5hZGRSZWNvcmRzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcGF0aCwgX2EsIGlkcywgcmV2aXNpb25zO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5jbGllbnQucG9zdChwYXRoLCBwYXJhbXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2EgPSBfYi5zZW50KCksIGlkcyA9IF9hLmlkcywgcmV2aXNpb25zID0gX2EucmV2aXNpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRzOiBpZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uczogcmV2aXNpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzOiBpZHMubWFwKGZ1bmN0aW9uIChpZCwgaSkgeyByZXR1cm4gKHsgaWQ6IGlkLCByZXZpc2lvbjogcmV2aXNpb25zW2ldIH0pOyB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLnVwZGF0ZVJlY29yZHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmRlbGV0ZVJlY29yZHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZGVsZXRlKHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmNyZWF0ZUN1cnNvciA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZHMvY3Vyc29yXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucG9zdChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5nZXRSZWNvcmRzQnlDdXJzb3IgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzL2N1cnNvclwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5kZWxldGVDdXJzb3IgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzL2N1cnNvclwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmRlbGV0ZShwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5nZXRBbGxSZWNvcmRzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgY29uZGl0aW9uLCBvcmRlckJ5LCBfYSwgd2l0aEN1cnNvciwgcmVzdCwgY29uZGl0aW9uUXVlcnksIHF1ZXJ5O1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9IHBhcmFtcy5jb25kaXRpb24sIG9yZGVyQnkgPSBwYXJhbXMub3JkZXJCeSwgX2EgPSBwYXJhbXMud2l0aEN1cnNvciwgd2l0aEN1cnNvciA9IF9hID09PSB2b2lkIDAgPyB0cnVlIDogX2EsIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJjb25kaXRpb25cIiwgXCJvcmRlckJ5XCIsIFwid2l0aEN1cnNvclwiXSk7XG4gICAgICAgICAgICAgICAgaWYgKCFvcmRlckJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLmdldEFsbFJlY29yZHNXaXRoSWQoX19hc3NpZ24oX19hc3NpZ24oe30sIHJlc3QpLCB7IGNvbmRpdGlvbjogY29uZGl0aW9uIH0pKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh3aXRoQ3Vyc29yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblF1ZXJ5ID0gY29uZGl0aW9uID8gXCJcIi5jb25jYXQoY29uZGl0aW9uLCBcIiBcIikgOiBcIlwiO1xuICAgICAgICAgICAgICAgICAgICBxdWVyeSA9IFwiXCIuY29uY2F0KGNvbmRpdGlvblF1ZXJ5KS5jb25jYXQob3JkZXJCeSA/IFwib3JkZXIgYnkgXCIuY29uY2F0KG9yZGVyQnkpIDogXCJcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLmdldEFsbFJlY29yZHNXaXRoQ3Vyc29yKF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXN0KSwgeyBxdWVyeTogcXVlcnkgfSkpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHRoaXMuZ2V0QWxsUmVjb3Jkc1dpdGhPZmZzZXQoX19hc3NpZ24oX19hc3NpZ24oe30sIHJlc3QpLCB7IG9yZGVyQnk6IG9yZGVyQnksIGNvbmRpdGlvbjogY29uZGl0aW9uIH0pKV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmdldEFsbFJlY29yZHNXaXRoSWQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBvcmlnaW5hbEZpZWxkcywgY29uZGl0aW9uLCByZXN0LCBmaWVsZHMsIGNvbmRpdGlvblF1ZXJ5LCBhbGxSZWNvcmRzLCBsYXN0SWQsIHF1ZXJ5LCByZXN1bHQsIGxhc3RSZWNvcmQ7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEZpZWxkcyA9IHBhcmFtcy5maWVsZHMsIGNvbmRpdGlvbiA9IHBhcmFtcy5jb25kaXRpb24sIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJmaWVsZHNcIiwgXCJjb25kaXRpb25cIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzID0gb3JpZ2luYWxGaWVsZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBcHBlbmQgJGlkIGlmICRpZCBkb2Vzbid0IGV4aXN0IGluIGZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkcyAmJiBmaWVsZHMubGVuZ3RoID4gMCAmJiBmaWVsZHMuaW5kZXhPZihcIiRpZFwiKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMgPSBfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIGZpZWxkcywgdHJ1ZSksIFtcIiRpZFwiXSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uUXVlcnkgPSBjb25kaXRpb24gPyBcIihcIi5jb25jYXQoY29uZGl0aW9uLCBcIikgYW5kIFwiKSA6IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxSZWNvcmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0SWQgPSBcIjBcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0cnVlKSByZXR1cm4gWzMgLypicmVhayovLCAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5ID0gXCJcIi5jb25jYXQoY29uZGl0aW9uUXVlcnksIFwiJGlkID4gXCIpLmNvbmNhdChsYXN0SWQsIFwiIG9yZGVyIGJ5ICRpZCBhc2MgbGltaXQgXCIpLmNvbmNhdChHRVRfUkVDT1JEU19MSU1JVCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmdldFJlY29yZHMoX19hc3NpZ24oX19hc3NpZ24oe30sIHJlc3QpLCB7IGZpZWxkczogZmllbGRzLCBxdWVyeTogcXVlcnkgfSkpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxsUmVjb3JkcyA9IGFsbFJlY29yZHMuY29uY2F0KHJlc3VsdC5yZWNvcmRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucmVjb3Jkcy5sZW5ndGggPCBHRVRfUkVDT1JEU19MSU1JVCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFJlY29yZCA9IHJlc3VsdC5yZWNvcmRzW3Jlc3VsdC5yZWNvcmRzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RSZWNvcmQuJGlkLnR5cGUgPT09IFwiX19JRF9fXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0SWQgPSBsYXN0UmVjb3JkLiRpZC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgYCRpZGAgaW4gYGdldFJlY29yZHNgIHJlc3BvbnNlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gS2ludG9uZSBSRVNUIEFQSSBDbGllbnQuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDFdO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMiAvKnJldHVybiovLCBhbGxSZWNvcmRzXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmdldEFsbFJlY29yZHNXaXRoT2Zmc2V0ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgY29uZGl0aW9uLCBvcmRlckJ5LCByZXN0LCBjb25kaXRpb25RdWVyeSwgYWxsUmVjb3Jkcywgb2Zmc2V0LCBxdWVyeSwgcmVzdWx0O1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uID0gcGFyYW1zLmNvbmRpdGlvbiwgb3JkZXJCeSA9IHBhcmFtcy5vcmRlckJ5LCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wiY29uZGl0aW9uXCIsIFwib3JkZXJCeVwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25RdWVyeSA9IGNvbmRpdGlvbiA/IFwiXCIuY29uY2F0KGNvbmRpdGlvbiwgXCIgXCIpIDogXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbFJlY29yZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHJ1ZSkgcmV0dXJuIFszIC8qYnJlYWsqLywgM107XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSA9IFwiXCIuY29uY2F0KGNvbmRpdGlvblF1ZXJ5KS5jb25jYXQob3JkZXJCeSA/IFwib3JkZXIgYnkgXCIuY29uY2F0KG9yZGVyQnksIFwiIFwiKSA6IFwiXCIsIFwibGltaXQgXCIpLmNvbmNhdChHRVRfUkVDT1JEU19MSU1JVCwgXCIgb2Zmc2V0IFwiKS5jb25jYXQob2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuZ2V0UmVjb3JkcyhfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcmVzdCksIHsgcXVlcnk6IHF1ZXJ5IH0pKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbFJlY29yZHMgPSBhbGxSZWNvcmRzLmNvbmNhdChyZXN1bHQucmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnJlY29yZHMubGVuZ3RoIDwgR0VUX1JFQ09SRFNfTElNSVQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBHRVRfUkVDT1JEU19MSU1JVDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDFdO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMiAvKnJldHVybiovLCBhbGxSZWNvcmRzXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmdldEFsbFJlY29yZHNXaXRoQ3Vyc29yID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgaWQsIGFsbFJlY29yZHMsIHJlc3VsdCwgZXJyb3JfMjtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5jcmVhdGVDdXJzb3IocGFyYW1zKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gKF9hLnNlbnQoKSkuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDI7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLnRyeXMucHVzaChbMiwgNiwgLCA4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxSZWNvcmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDM7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHJ1ZSkgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmdldFJlY29yZHNCeUN1cnNvcih7IGlkOiBpZCB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbFJlY29yZHMgPSBhbGxSZWNvcmRzLmNvbmNhdChyZXN1bHQucmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCAzXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzIgLypyZXR1cm4qLywgYWxsUmVjb3Jkc107XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yXzIgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmRlbGV0ZUN1cnNvcih7IGlkOiBpZCB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yXzI7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuYWRkQWxsUmVjb3JkcyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIGlmICghcGFyYW1zLnJlY29yZHMuZXZlcnkoZnVuY3Rpb24gKHJlY29yZCkgeyByZXR1cm4gIUFycmF5LmlzQXJyYXkocmVjb3JkKSAmJiByZWNvcmQgaW5zdGFuY2VvZiBPYmplY3Q7IH0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRoZSBgcmVjb3Jkc2AgcGFyYW1ldGVyIG11c3QgYmUgYW4gYXJyYXkgb2Ygb2JqZWN0LlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHRoaXMuYWRkQWxsUmVjb3Jkc1JlY3Vyc2l2ZShwYXJhbXMsIHBhcmFtcy5yZWNvcmRzLmxlbmd0aCwgW10pXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuYWRkQWxsUmVjb3Jkc1JlY3Vyc2l2ZSA9IGZ1bmN0aW9uIChwYXJhbXMsIG51bU9mQWxsUmVjb3JkcywgcmVzdWx0cykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgQ0hVTktfTEVOR1RILCBhcHAsIHJlY29yZHMsIHJlY29yZHNDaHVuaywgbmV3UmVzdWx0cywgZV8xO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgQ0hVTktfTEVOR1RIID0gdGhpcy5idWxrUmVxdWVzdENsaWVudC5SRVFVRVNUU19MRU5HVEhfTElNSVQgKiBBRERfUkVDT1JEU19MSU1JVDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcCA9IHBhcmFtcy5hcHAsIHJlY29yZHMgPSBwYXJhbXMucmVjb3JkcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHNDaHVuayA9IHJlY29yZHMuc2xpY2UoMCwgQ0hVTktfTEVOR1RIKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmRzQ2h1bmsubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHsgcmVjb3JkczogcmVzdWx0cyB9XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFsxLCAzLCAsIDRdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuYWRkQWxsUmVjb3Jkc1dpdGhCdWxrUmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcDogYXBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzOiByZWNvcmRzQ2h1bmssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdSZXN1bHRzID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGVfMSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcl8xLktpbnRvbmVBbGxSZWNvcmRzRXJyb3IoeyByZWNvcmRzOiByZXN1bHRzIH0sIHJlY29yZHMsIG51bU9mQWxsUmVjb3JkcywgZV8xLCBBRERfUkVDT1JEU19MSU1JVCk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHRoaXMuYWRkQWxsUmVjb3Jkc1JlY3Vyc2l2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwOiBhcHAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkczogcmVjb3Jkcy5zbGljZShDSFVOS19MRU5HVEgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgbnVtT2ZBbGxSZWNvcmRzLCByZXN1bHRzLmNvbmNhdChuZXdSZXN1bHRzKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuYWRkQWxsUmVjb3Jkc1dpdGhCdWxrUmVxdWVzdCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHNlcGFyYXRlZFJlY29yZHMsIHJlcXVlc3RzLCByZXN1bHRzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGVkUmVjb3JkcyA9IHRoaXMuc2VwYXJhdGVBcnJheVJlY3Vyc2l2ZShBRERfUkVDT1JEU19MSU1JVCwgW10sIHBhcmFtcy5yZWNvcmRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzID0gc2VwYXJhdGVkUmVjb3Jkcy5tYXAoZnVuY3Rpb24gKHJlY29yZHMpIHsgcmV0dXJuICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwOiBwYXJhbXMuYXBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzOiByZWNvcmRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmJ1bGtSZXF1ZXN0Q2xpZW50LnNlbmQoeyByZXF1ZXN0czogcmVxdWVzdHMgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gKF9hLnNlbnQoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVzdWx0cztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCByZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWRzID0gcmVzdWx0LmlkcywgcmV2aXNpb25zID0gcmVzdWx0LnJldmlzaW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkcy5tYXAoZnVuY3Rpb24gKGlkLCBpKSB7IHJldHVybiAoeyBpZDogaWQsIHJldmlzaW9uOiByZXZpc2lvbnNbaV0gfSk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcmVjb3Jkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChyZWNvcmRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBbXSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUudXBkYXRlQWxsUmVjb3JkcyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLnVwZGF0ZUFsbFJlY29yZHNSZWN1cnNpdmUocGFyYW1zLCBwYXJhbXMucmVjb3Jkcy5sZW5ndGgsIFtdKV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLnVwZGF0ZUFsbFJlY29yZHNSZWN1cnNpdmUgPSBmdW5jdGlvbiAocGFyYW1zLCBudW1PZkFsbFJlY29yZHMsIHJlc3VsdHMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIENIVU5LX0xFTkdUSCwgYXBwLCByZWNvcmRzLCByZWNvcmRzQ2h1bmssIG5ld1Jlc3VsdHMsIGVfMjtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIENIVU5LX0xFTkdUSCA9IHRoaXMuYnVsa1JlcXVlc3RDbGllbnQuUkVRVUVTVFNfTEVOR1RIX0xJTUlUICogVVBEQVRFX1JFQ09SRFNfTElNSVQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHAgPSBwYXJhbXMuYXBwLCByZWNvcmRzID0gcGFyYW1zLnJlY29yZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzQ2h1bmsgPSByZWNvcmRzLnNsaWNlKDAsIENIVU5LX0xFTkdUSCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3Jkc0NodW5rLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7IHJlY29yZHM6IHJlc3VsdHMgfV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLnRyeXMucHVzaChbMSwgMywgLCA0XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLnVwZGF0ZUFsbFJlY29yZHNXaXRoQnVsa1JlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHA6IGFwcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkczogcmVjb3Jkc0NodW5rLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3UmVzdWx0cyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBlXzIgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JfMS5LaW50b25lQWxsUmVjb3Jkc0Vycm9yKHsgcmVjb3JkczogcmVzdWx0cyB9LCByZWNvcmRzLCBudW1PZkFsbFJlY29yZHMsIGVfMiwgVVBEQVRFX1JFQ09SRFNfTElNSVQpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLnVwZGF0ZUFsbFJlY29yZHNSZWN1cnNpdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcDogYXBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHM6IHJlY29yZHMuc2xpY2UoQ0hVTktfTEVOR1RIKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG51bU9mQWxsUmVjb3JkcywgcmVzdWx0cy5jb25jYXQobmV3UmVzdWx0cykpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLnVwZGF0ZUFsbFJlY29yZHNXaXRoQnVsa1JlcXVlc3QgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBzZXBhcmF0ZWRSZWNvcmRzLCByZXF1ZXN0cywgcmVzdWx0cztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRlZFJlY29yZHMgPSB0aGlzLnNlcGFyYXRlQXJyYXlSZWN1cnNpdmUoVVBEQVRFX1JFQ09SRFNfTElNSVQsIFtdLCBwYXJhbXMucmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyA9IHNlcGFyYXRlZFJlY29yZHMubWFwKGZ1bmN0aW9uIChyZWNvcmRzKSB7IHJldHVybiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQVVRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwOiBwYXJhbXMuYXBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzOiByZWNvcmRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmJ1bGtSZXF1ZXN0Q2xpZW50LnNlbmQoeyByZXF1ZXN0czogcmVxdWVzdHMgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gKF9hLnNlbnQoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVzdWx0cztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCByZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0LnJlY29yZHM7IH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcmVjb3Jkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChyZWNvcmRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBbXSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuZGVsZXRlQWxsUmVjb3JkcyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQWxsUmVjb3Jkc1JlY3Vyc2l2ZShwYXJhbXMsIHBhcmFtcy5yZWNvcmRzLmxlbmd0aCk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmRlbGV0ZUFsbFJlY29yZHNSZWN1cnNpdmUgPSBmdW5jdGlvbiAocGFyYW1zLCBudW1PZkFsbFJlY29yZHMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIENIVU5LX0xFTkdUSCwgYXBwLCByZWNvcmRzLCByZWNvcmRzQ2h1bmssIGVfMztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIENIVU5LX0xFTkdUSCA9IHRoaXMuYnVsa1JlcXVlc3RDbGllbnQuUkVRVUVTVFNfTEVOR1RIX0xJTUlUICogREVMRVRFX1JFQ09SRFNfTElNSVQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHAgPSBwYXJhbXMuYXBwLCByZWNvcmRzID0gcGFyYW1zLnJlY29yZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzQ2h1bmsgPSByZWNvcmRzLnNsaWNlKDAsIENIVU5LX0xFTkdUSCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3Jkc0NodW5rLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7fV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLnRyeXMucHVzaChbMSwgMywgLCA0XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmRlbGV0ZUFsbFJlY29yZHNXaXRoQnVsa1JlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHA6IGFwcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkczogcmVjb3Jkc0NodW5rLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGVfMyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcl8xLktpbnRvbmVBbGxSZWNvcmRzRXJyb3Ioe30sIHJlY29yZHMsIG51bU9mQWxsUmVjb3JkcywgZV8zLCBERUxFVEVfUkVDT1JEU19MSU1JVCk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHRoaXMuZGVsZXRlQWxsUmVjb3Jkc1JlY3Vyc2l2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwOiBhcHAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkczogcmVjb3Jkcy5zbGljZShDSFVOS19MRU5HVEgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgbnVtT2ZBbGxSZWNvcmRzKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5kZWxldGVBbGxSZWNvcmRzV2l0aEJ1bGtSZXF1ZXN0ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgc2VwYXJhdGVkUmVjb3JkcywgcmVxdWVzdHM7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZWRSZWNvcmRzID0gdGhpcy5zZXBhcmF0ZUFycmF5UmVjdXJzaXZlKERFTEVURV9SRUNPUkRTX0xJTUlULCBbXSwgcGFyYW1zLnJlY29yZHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMgPSBzZXBhcmF0ZWRSZWNvcmRzLm1hcChmdW5jdGlvbiAocmVjb3JkcykgeyByZXR1cm4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiREVMRVRFXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcDogcGFyYW1zLmFwcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRzOiByZWNvcmRzLm1hcChmdW5jdGlvbiAocmVjb3JkKSB7IHJldHVybiByZWNvcmQuaWQ7IH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbnM6IHJlY29yZHMubWFwKGZ1bmN0aW9uIChyZWNvcmQpIHsgcmV0dXJuIHJlY29yZC5yZXZpc2lvbjsgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuYnVsa1JlcXVlc3RDbGllbnQuc2VuZCh7IHJlcXVlc3RzOiByZXF1ZXN0cyB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLnNlcGFyYXRlQXJyYXlSZWN1cnNpdmUgPSBmdW5jdGlvbiAoc2l6ZSwgc2VwYXJhdGVkLCBhcnJheSkge1xuICAgICAgICB2YXIgY2h1bmsgPSBhcnJheS5zbGljZSgwLCBzaXplKTtcbiAgICAgICAgaWYgKGNodW5rLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHNlcGFyYXRlZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zZXBhcmF0ZUFycmF5UmVjdXJzaXZlKHNpemUsIF9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbXSwgc2VwYXJhdGVkLCB0cnVlKSwgW2NodW5rXSwgZmFsc2UpLCBhcnJheS5zbGljZShzaXplKSk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmFkZFJlY29yZENvbW1lbnQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmQvY29tbWVudFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnBvc3QocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuZGVsZXRlUmVjb3JkQ29tbWVudCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZC9jb21tZW50XCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZGVsZXRlKHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmdldFJlY29yZENvbW1lbnRzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3JkL2NvbW1lbnRzXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLnVwZGF0ZVJlY29yZEFzc2lnbmVlcyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZC9hc3NpZ25lZXNcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUudXBkYXRlUmVjb3JkU3RhdHVzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3JkL3N0YXR1c1wiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS51cGRhdGVSZWNvcmRzU3RhdHVzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkcy9zdGF0dXNcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIHJldHVybiBSZWNvcmRDbGllbnQ7XG59KEJhc2VDbGllbnRfMS5CYXNlQ2xpZW50KSk7XG5leHBvcnRzLlJlY29yZENsaWVudCA9IFJlY29yZENsaWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJlY29yZENsaWVudC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNwYWNlQ2xpZW50ID0gdm9pZCAwO1xudmFyIEJhc2VDbGllbnRfMSA9IHJlcXVpcmUoXCIuL0Jhc2VDbGllbnRcIik7XG52YXIgU3BhY2VDbGllbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNwYWNlQ2xpZW50LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNwYWNlQ2xpZW50KCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIFNwYWNlQ2xpZW50LnByb3RvdHlwZS5nZXRTcGFjZSA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInNwYWNlXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBTcGFjZUNsaWVudC5wcm90b3R5cGUuZGVsZXRlU3BhY2UgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJzcGFjZVwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmRlbGV0ZShwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgU3BhY2VDbGllbnQucHJvdG90eXBlLnVwZGF0ZVNwYWNlQm9keSA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInNwYWNlL2JvZHlcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFNwYWNlQ2xpZW50LnByb3RvdHlwZS5nZXRTcGFjZU1lbWJlcnMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJzcGFjZS9tZW1iZXJzXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBTcGFjZUNsaWVudC5wcm90b3R5cGUudXBkYXRlU3BhY2VNZW1iZXJzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwic3BhY2UvbWVtYmVyc1wiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgU3BhY2VDbGllbnQucHJvdG90eXBlLnVwZGF0ZVRocmVhZCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInNwYWNlL3RocmVhZFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgU3BhY2VDbGllbnQucHJvdG90eXBlLmFkZFRocmVhZENvbW1lbnQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJzcGFjZS90aHJlYWQvY29tbWVudFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnBvc3QocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFNwYWNlQ2xpZW50LnByb3RvdHlwZS5hZGRHdWVzdHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGgoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImd1ZXN0c1wiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnBvc3QocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFNwYWNlQ2xpZW50LnByb3RvdHlwZS5kZWxldGVHdWVzdHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGgoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImd1ZXN0c1wiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmRlbGV0ZShwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgU3BhY2VDbGllbnQucHJvdG90eXBlLnVwZGF0ZVNwYWNlR3Vlc3RzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwic3BhY2UvZ3Vlc3RzXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBTcGFjZUNsaWVudC5wcm90b3R5cGUuYWRkU3BhY2VGcm9tVGVtcGxhdGUgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGgoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInRlbXBsYXRlL3NwYWNlXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucG9zdChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgcmV0dXJuIFNwYWNlQ2xpZW50O1xufShCYXNlQ2xpZW50XzEuQmFzZUNsaWVudCkpO1xuZXhwb3J0cy5TcGFjZUNsaWVudCA9IFNwYWNlQ2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3BhY2VDbGllbnQuanMubWFwIiwiLyogZXNsaW50LWVudiBicm93c2VyICovXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnID8gc2VsZi5Gb3JtRGF0YSA6IHdpbmRvdy5Gb3JtRGF0YTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRmlsZUNsaWVudCA9IHZvaWQgMDtcbnZhciBmb3JtX2RhdGFfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiZm9ybS1kYXRhXCIpKTtcbnZhciBwbGF0Zm9ybV8xID0gcmVxdWlyZShcIi4uL3BsYXRmb3JtXCIpO1xudmFyIFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvcl8xID0gcmVxdWlyZShcIi4uL3BsYXRmb3JtL1Vuc3VwcG9ydGVkUGxhdGZvcm1FcnJvclwiKTtcbnZhciBCYXNlQ2xpZW50XzEgPSByZXF1aXJlKFwiLi9CYXNlQ2xpZW50XCIpO1xudmFyIEZpbGVDbGllbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEZpbGVDbGllbnQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRmlsZUNsaWVudCgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBGaWxlQ2xpZW50LnByb3RvdHlwZS51cGxvYWRGaWxlID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcGF0aCwgZm9ybURhdGEsIF9hLCBuYW1lXzEsIGRhdGEsIGVfMSwgX2IsIG5hbWVfMiwgZGF0YSwgZmlsZURhdGE7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9jKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYy5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiZmlsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YSA9IG5ldyBmb3JtX2RhdGFfMS5kZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShcInBhdGhcIiBpbiBwYXJhbXMuZmlsZSkpIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2MubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYy50cnlzLnB1c2goWzEsIDMsICwgNF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgcGxhdGZvcm1fMS5wbGF0Zm9ybURlcHMucmVhZEZpbGVGcm9tUGF0aChwYXJhbXMuZmlsZS5wYXRoKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hID0gX2Muc2VudCgpLCBuYW1lXzEgPSBfYS5uYW1lLCBkYXRhID0gX2EuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcImZpbGVcIiwgZGF0YSwgbmFtZV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBlXzEgPSBfYy5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZV8xIGluc3RhbmNlb2YgVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yXzEuVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXBsb2FkRmlsZSBkb2Vzbid0IGFsbG93IHRvIGFjY2VwdCBhIGZpbGUgcGF0aCBpbiBcIi5jb25jYXQoZV8xLnBsYXRmb3JtLCBcIiBlbnZpcm9ubWVudC5cIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZV8xO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMyAvKmJyZWFrKi8sIDZdO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYiA9IHBhcmFtcy5maWxlLCBuYW1lXzIgPSBfYi5uYW1lLCBkYXRhID0gX2IuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVEYXRhID0gcGxhdGZvcm1fMS5wbGF0Zm9ybURlcHMuYnVpbGRGb3JtRGF0YVZhbHVlKGRhdGEsIG5hbWVfMik7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXCJmaWxlXCIsIGZpbGVEYXRhLCBuYW1lXzIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2MubGFiZWwgPSA2O1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6IHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLmNsaWVudC5wb3N0RGF0YShwYXRoLCBmb3JtRGF0YSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEZpbGVDbGllbnQucHJvdG90eXBlLmRvd25sb2FkRmlsZSA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImZpbGVcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXREYXRhKHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICByZXR1cm4gRmlsZUNsaWVudDtcbn0oQmFzZUNsaWVudF8xLkJhc2VDbGllbnQpKTtcbmV4cG9ydHMuRmlsZUNsaWVudCA9IEZpbGVDbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GaWxlQ2xpZW50LmpzLm1hcCIsIi8vIEF4aW9zIHYxLjcuMiBDb3B5cmlnaHQgKGMpIDIwMjQgTWF0dCBaYWJyaXNraWUgYW5kIGNvbnRyaWJ1dG9yc1xuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG5jb25zdCB7dG9TdHJpbmd9ID0gT2JqZWN0LnByb3RvdHlwZTtcbmNvbnN0IHtnZXRQcm90b3R5cGVPZn0gPSBPYmplY3Q7XG5cbmNvbnN0IGtpbmRPZiA9IChjYWNoZSA9PiB0aGluZyA9PiB7XG4gICAgY29uc3Qgc3RyID0gdG9TdHJpbmcuY2FsbCh0aGluZyk7XG4gICAgcmV0dXJuIGNhY2hlW3N0cl0gfHwgKGNhY2hlW3N0cl0gPSBzdHIuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkpO1xufSkoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbmNvbnN0IGtpbmRPZlRlc3QgPSAodHlwZSkgPT4ge1xuICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKHRoaW5nKSA9PiBraW5kT2YodGhpbmcpID09PSB0eXBlXG59O1xuXG5jb25zdCB0eXBlT2ZUZXN0ID0gdHlwZSA9PiB0aGluZyA9PiB0eXBlb2YgdGhpbmcgPT09IHR5cGU7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCB7aXNBcnJheX0gPSBBcnJheTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VuZGVmaW5lZCA9IHR5cGVPZlRlc3QoJ3VuZGVmaW5lZCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIGlzRnVuY3Rpb24odmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSAmJiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIodmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0FycmF5QnVmZmVyID0ga2luZE9mVGVzdCgnQXJyYXlCdWZmZXInKTtcblxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIGxldCByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKGlzQXJyYXlCdWZmZXIodmFsLmJ1ZmZlcikpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJpbmcgPSB0eXBlT2ZUZXN0KCdzdHJpbmcnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Z1bmN0aW9uID0gdHlwZU9mVGVzdCgnZnVuY3Rpb24nKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc051bWJlciA9IHR5cGVPZlRlc3QoJ251bWJlcicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgIT09IG51bGwgJiYgdHlwZW9mIHRoaW5nID09PSAnb2JqZWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJvb2xlYW5cbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJvb2xlYW4sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jvb2xlYW4gPSB0aGluZyA9PiB0aGluZyA9PT0gdHJ1ZSB8fCB0aGluZyA9PT0gZmFsc2U7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNQbGFpbk9iamVjdCA9ICh2YWwpID0+IHtcbiAgaWYgKGtpbmRPZih2YWwpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiAocHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKSA9PT0gbnVsbCkgJiYgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsKSAmJiAhKFN5bWJvbC5pdGVyYXRvciBpbiB2YWwpO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRGF0ZSA9IGtpbmRPZlRlc3QoJ0RhdGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQmxvYiA9IGtpbmRPZlRlc3QoJ0Jsb2InKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVMaXN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGVMaXN0ID0ga2luZE9mVGVzdCgnRmlsZUxpc3QnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmVhbSA9ICh2YWwpID0+IGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRm9ybURhdGEgPSAodGhpbmcpID0+IHtcbiAgbGV0IGtpbmQ7XG4gIHJldHVybiB0aGluZyAmJiAoXG4gICAgKHR5cGVvZiBGb3JtRGF0YSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGluZyBpbnN0YW5jZW9mIEZvcm1EYXRhKSB8fCAoXG4gICAgICBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgKFxuICAgICAgICAoa2luZCA9IGtpbmRPZih0aGluZykpID09PSAnZm9ybWRhdGEnIHx8XG4gICAgICAgIC8vIGRldGVjdCBmb3JtLWRhdGEgaW5zdGFuY2VcbiAgICAgICAgKGtpbmQgPT09ICdvYmplY3QnICYmIGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IEZvcm1EYXRhXScpXG4gICAgICApXG4gICAgKVxuICApXG59O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KCdVUkxTZWFyY2hQYXJhbXMnKTtcblxuY29uc3QgW2lzUmVhZGFibGVTdHJlYW0sIGlzUmVxdWVzdCwgaXNSZXNwb25zZSwgaXNIZWFkZXJzXSA9IFsnUmVhZGFibGVTdHJlYW0nLCAnUmVxdWVzdCcsICdSZXNwb25zZScsICdIZWFkZXJzJ10ubWFwKGtpbmRPZlRlc3QpO1xuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5jb25zdCB0cmltID0gKHN0cikgPT4gc3RyLnRyaW0gP1xuICBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCAnJyk7XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzID0gZmFsc2VdXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4sIHthbGxPd25LZXlzID0gZmFsc2V9ID0ge30pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgaTtcbiAgbGV0IGw7XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGNvbnN0IGtleXMgPSBhbGxPd25LZXlzID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKSA6IE9iamVjdC5rZXlzKG9iaik7XG4gICAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGtleTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEtleShvYmosIGtleSkge1xuICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIGxldCBfa2V5O1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIF9rZXkgPSBrZXlzW2ldO1xuICAgIGlmIChrZXkgPT09IF9rZXkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgcmV0dXJuIF9rZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBfZ2xvYmFsID0gKCgpID0+IHtcbiAgLyplc2xpbnQgbm8tdW5kZWY6MCovXG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGdsb2JhbFRoaXM7XG4gIHJldHVybiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBnbG9iYWwpXG59KSgpO1xuXG5jb25zdCBpc0NvbnRleHREZWZpbmVkID0gKGNvbnRleHQpID0+ICFpc1VuZGVmaW5lZChjb250ZXh0KSAmJiBjb250ZXh0ICE9PSBfZ2xvYmFsO1xuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIGNvbnN0IHtjYXNlbGVzc30gPSBpc0NvbnRleHREZWZpbmVkKHRoaXMpICYmIHRoaXMgfHwge307XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBjb25zdCBhc3NpZ25WYWx1ZSA9ICh2YWwsIGtleSkgPT4ge1xuICAgIGNvbnN0IHRhcmdldEtleSA9IGNhc2VsZXNzICYmIGZpbmRLZXkocmVzdWx0LCBrZXkpIHx8IGtleTtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChyZXN1bHRbdGFyZ2V0S2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHJlc3VsdFt0YXJnZXRLZXldLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbDtcbiAgICB9XG4gIH07XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgYXJndW1lbnRzW2ldICYmIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXNdXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmNvbnN0IGV4dGVuZCA9IChhLCBiLCB0aGlzQXJnLCB7YWxsT3duS2V5c309IHt9KSA9PiB7XG4gIGZvckVhY2goYiwgKHZhbCwga2V5KSA9PiB7XG4gICAgaWYgKHRoaXNBcmcgJiYgaXNGdW5jdGlvbih2YWwpKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0sIHthbGxPd25LZXlzfSk7XG4gIHJldHVybiBhO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuY29uc3Qgc3RyaXBCT00gPSAoY29udGVudCkgPT4ge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn07XG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDb25zdHJ1Y3RvclxuICogQHBhcmFtIHtvYmplY3R9IFtwcm9wc11cbiAqIEBwYXJhbSB7b2JqZWN0fSBbZGVzY3JpcHRvcnNdXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGluaGVyaXRzID0gKGNvbnN0cnVjdG9yLCBzdXBlckNvbnN0cnVjdG9yLCBwcm9wcywgZGVzY3JpcHRvcnMpID0+IHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZSwgZGVzY3JpcHRvcnMpO1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnN0cnVjdG9yLCAnc3VwZXInLCB7XG4gICAgdmFsdWU6IHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlXG4gIH0pO1xuICBwcm9wcyAmJiBPYmplY3QuYXNzaWduKGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvcHMpO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlIG9iamVjdCB3aXRoIGRlZXAgcHJvdG90eXBlIGNoYWluIHRvIGEgZmxhdCBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2VPYmogc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IFtkZXN0T2JqXVxuICogQHBhcmFtIHtGdW5jdGlvbnxCb29sZWFufSBbZmlsdGVyXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Byb3BGaWx0ZXJdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuY29uc3QgdG9GbGF0T2JqZWN0ID0gKHNvdXJjZU9iaiwgZGVzdE9iaiwgZmlsdGVyLCBwcm9wRmlsdGVyKSA9PiB7XG4gIGxldCBwcm9wcztcbiAgbGV0IGk7XG4gIGxldCBwcm9wO1xuICBjb25zdCBtZXJnZWQgPSB7fTtcblxuICBkZXN0T2JqID0gZGVzdE9iaiB8fCB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIGlmIChzb3VyY2VPYmogPT0gbnVsbCkgcmV0dXJuIGRlc3RPYmo7XG5cbiAgZG8ge1xuICAgIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlT2JqKTtcbiAgICBpID0gcHJvcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICBwcm9wID0gcHJvcHNbaV07XG4gICAgICBpZiAoKCFwcm9wRmlsdGVyIHx8IHByb3BGaWx0ZXIocHJvcCwgc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgIW1lcmdlZFtwcm9wXSkge1xuICAgICAgICBkZXN0T2JqW3Byb3BdID0gc291cmNlT2JqW3Byb3BdO1xuICAgICAgICBtZXJnZWRbcHJvcF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VPYmogPSBmaWx0ZXIgIT09IGZhbHNlICYmIGdldFByb3RvdHlwZU9mKHNvdXJjZU9iaik7XG4gIH0gd2hpbGUgKHNvdXJjZU9iaiAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgc291cmNlT2JqICE9PSBPYmplY3QucHJvdG90eXBlKTtcblxuICByZXR1cm4gZGVzdE9iajtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gW3Bvc2l0aW9uPSAwXVxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBlbmRzV2l0aCA9IChzdHIsIHNlYXJjaFN0cmluZywgcG9zaXRpb24pID0+IHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uID4gc3RyLmxlbmd0aCkge1xuICAgIHBvc2l0aW9uID0gc3RyLmxlbmd0aDtcbiAgfVxuICBwb3NpdGlvbiAtPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICBjb25zdCBsYXN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIG5ldyBhcnJheSBmcm9tIGFycmF5IGxpa2Ugb2JqZWN0IG9yIG51bGwgaWYgZmFpbGVkXG4gKlxuICogQHBhcmFtIHsqfSBbdGhpbmddXG4gKlxuICogQHJldHVybnMgez9BcnJheX1cbiAqL1xuY29uc3QgdG9BcnJheSA9ICh0aGluZykgPT4ge1xuICBpZiAoIXRoaW5nKSByZXR1cm4gbnVsbDtcbiAgaWYgKGlzQXJyYXkodGhpbmcpKSByZXR1cm4gdGhpbmc7XG4gIGxldCBpID0gdGhpbmcubGVuZ3RoO1xuICBpZiAoIWlzTnVtYmVyKGkpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYXJyID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGFycltpXSA9IHRoaW5nW2ldO1xuICB9XG4gIHJldHVybiBhcnI7XG59O1xuXG4vKipcbiAqIENoZWNraW5nIGlmIHRoZSBVaW50OEFycmF5IGV4aXN0cyBhbmQgaWYgaXQgZG9lcywgaXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIHRoZVxuICogdGhpbmcgcGFzc2VkIGluIGlzIGFuIGluc3RhbmNlIG9mIFVpbnQ4QXJyYXlcbiAqXG4gKiBAcGFyYW0ge1R5cGVkQXJyYXl9XG4gKlxuICogQHJldHVybnMge0FycmF5fVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuY29uc3QgaXNUeXBlZEFycmF5ID0gKFR5cGVkQXJyYXkgPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gdGhpbmcgPT4ge1xuICAgIHJldHVybiBUeXBlZEFycmF5ICYmIHRoaW5nIGluc3RhbmNlb2YgVHlwZWRBcnJheTtcbiAgfTtcbn0pKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBnZXRQcm90b3R5cGVPZihVaW50OEFycmF5KSk7XG5cbi8qKlxuICogRm9yIGVhY2ggZW50cnkgaW4gdGhlIG9iamVjdCwgY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCB0aGUga2V5IGFuZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgZm9yRWFjaEVudHJ5ID0gKG9iaiwgZm4pID0+IHtcbiAgY29uc3QgZ2VuZXJhdG9yID0gb2JqICYmIG9ialtTeW1ib2wuaXRlcmF0b3JdO1xuXG4gIGNvbnN0IGl0ZXJhdG9yID0gZ2VuZXJhdG9yLmNhbGwob2JqKTtcblxuICBsZXQgcmVzdWx0O1xuXG4gIHdoaWxlICgocmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpKSAmJiAhcmVzdWx0LmRvbmUpIHtcbiAgICBjb25zdCBwYWlyID0gcmVzdWx0LnZhbHVlO1xuICAgIGZuLmNhbGwob2JqLCBwYWlyWzBdLCBwYWlyWzFdKTtcbiAgfVxufTtcblxuLyoqXG4gKiBJdCB0YWtlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgYSBzdHJpbmcsIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgbWF0Y2hlc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdFeHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBzZWFyY2guXG4gKlxuICogQHJldHVybnMge0FycmF5PGJvb2xlYW4+fVxuICovXG5jb25zdCBtYXRjaEFsbCA9IChyZWdFeHAsIHN0cikgPT4ge1xuICBsZXQgbWF0Y2hlcztcbiAgY29uc3QgYXJyID0gW107XG5cbiAgd2hpbGUgKChtYXRjaGVzID0gcmVnRXhwLmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICBhcnIucHVzaChtYXRjaGVzKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59O1xuXG4vKiBDaGVja2luZyBpZiB0aGUga2luZE9mVGVzdCBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYW4gSFRNTEZvcm1FbGVtZW50LiAqL1xuY29uc3QgaXNIVE1MRm9ybSA9IGtpbmRPZlRlc3QoJ0hUTUxGb3JtRWxlbWVudCcpO1xuXG5jb25zdCB0b0NhbWVsQ2FzZSA9IHN0ciA9PiB7XG4gIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLFxuICAgIGZ1bmN0aW9uIHJlcGxhY2VyKG0sIHAxLCBwMikge1xuICAgICAgcmV0dXJuIHAxLnRvVXBwZXJDYXNlKCkgKyBwMjtcbiAgICB9XG4gICk7XG59O1xuXG4vKiBDcmVhdGluZyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBjaGVjayBpZiBhbiBvYmplY3QgaGFzIGEgcHJvcGVydHkuICovXG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9ICgoe2hhc093blByb3BlcnR5fSkgPT4gKG9iaiwgcHJvcCkgPT4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKShPYmplY3QucHJvdG90eXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUmVnRXhwID0ga2luZE9mVGVzdCgnUmVnRXhwJyk7XG5cbmNvbnN0IHJlZHVjZURlc2NyaXB0b3JzID0gKG9iaiwgcmVkdWNlcikgPT4ge1xuICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iaik7XG4gIGNvbnN0IHJlZHVjZWREZXNjcmlwdG9ycyA9IHt9O1xuXG4gIGZvckVhY2goZGVzY3JpcHRvcnMsIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgbGV0IHJldDtcbiAgICBpZiAoKHJldCA9IHJlZHVjZXIoZGVzY3JpcHRvciwgbmFtZSwgb2JqKSkgIT09IGZhbHNlKSB7XG4gICAgICByZWR1Y2VkRGVzY3JpcHRvcnNbbmFtZV0gPSByZXQgfHwgZGVzY3JpcHRvcjtcbiAgICB9XG4gIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iaiwgcmVkdWNlZERlc2NyaXB0b3JzKTtcbn07XG5cbi8qKlxuICogTWFrZXMgYWxsIG1ldGhvZHMgcmVhZC1vbmx5XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKi9cblxuY29uc3QgZnJlZXplTWV0aG9kcyA9IChvYmopID0+IHtcbiAgcmVkdWNlRGVzY3JpcHRvcnMob2JqLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIC8vIHNraXAgcmVzdHJpY3RlZCBwcm9wcyBpbiBzdHJpY3QgbW9kZVxuICAgIGlmIChpc0Z1bmN0aW9uKG9iaikgJiYgWydhcmd1bWVudHMnLCAnY2FsbGVyJywgJ2NhbGxlZSddLmluZGV4T2YobmFtZSkgIT09IC0xKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBvYmpbbmFtZV07XG5cbiAgICBpZiAoIWlzRnVuY3Rpb24odmFsdWUpKSByZXR1cm47XG5cbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBmYWxzZTtcblxuICAgIGlmICgnd3JpdGFibGUnIGluIGRlc2NyaXB0b3IpIHtcbiAgICAgIGRlc2NyaXB0b3Iud3JpdGFibGUgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRlc2NyaXB0b3Iuc2V0KSB7XG4gICAgICBkZXNjcmlwdG9yLnNldCA9ICgpID0+IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0NhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kIFxcJycgKyBuYW1lICsgJ1xcJycpO1xuICAgICAgfTtcbiAgICB9XG4gIH0pO1xufTtcblxuY29uc3QgdG9PYmplY3RTZXQgPSAoYXJyYXlPclN0cmluZywgZGVsaW1pdGVyKSA9PiB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuXG4gIGNvbnN0IGRlZmluZSA9IChhcnIpID0+IHtcbiAgICBhcnIuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICBvYmpbdmFsdWVdID0gdHJ1ZTtcbiAgICB9KTtcbiAgfTtcblxuICBpc0FycmF5KGFycmF5T3JTdHJpbmcpID8gZGVmaW5lKGFycmF5T3JTdHJpbmcpIDogZGVmaW5lKFN0cmluZyhhcnJheU9yU3RyaW5nKS5zcGxpdChkZWxpbWl0ZXIpKTtcblxuICByZXR1cm4gb2JqO1xufTtcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5jb25zdCB0b0Zpbml0ZU51bWJlciA9ICh2YWx1ZSwgZGVmYXVsdFZhbHVlKSA9PiB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSA9ICt2YWx1ZSkgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbn07XG5cbmNvbnN0IEFMUEhBID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JztcblxuY29uc3QgRElHSVQgPSAnMDEyMzQ1Njc4OSc7XG5cbmNvbnN0IEFMUEhBQkVUID0ge1xuICBESUdJVCxcbiAgQUxQSEEsXG4gIEFMUEhBX0RJR0lUOiBBTFBIQSArIEFMUEhBLnRvVXBwZXJDYXNlKCkgKyBESUdJVFxufTtcblxuY29uc3QgZ2VuZXJhdGVTdHJpbmcgPSAoc2l6ZSA9IDE2LCBhbHBoYWJldCA9IEFMUEhBQkVULkFMUEhBX0RJR0lUKSA9PiB7XG4gIGxldCBzdHIgPSAnJztcbiAgY29uc3Qge2xlbmd0aH0gPSBhbHBoYWJldDtcbiAgd2hpbGUgKHNpemUtLSkge1xuICAgIHN0ciArPSBhbHBoYWJldFtNYXRoLnJhbmRvbSgpICogbGVuZ3RofDBdO1xuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn07XG5cbi8qKlxuICogSWYgdGhlIHRoaW5nIGlzIGEgRm9ybURhdGEgb2JqZWN0LCByZXR1cm4gdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHRoaW5nIC0gVGhlIHRoaW5nIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1NwZWNDb21wbGlhbnRGb3JtKHRoaW5nKSB7XG4gIHJldHVybiAhISh0aGluZyAmJiBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgdGhpbmdbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJyAmJiB0aGluZ1tTeW1ib2wuaXRlcmF0b3JdKTtcbn1cblxuY29uc3QgdG9KU09OT2JqZWN0ID0gKG9iaikgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBBcnJheSgxMCk7XG5cbiAgY29uc3QgdmlzaXQgPSAoc291cmNlLCBpKSA9PiB7XG5cbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgaWYgKHN0YWNrLmluZGV4T2Yoc291cmNlKSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYoISgndG9KU09OJyBpbiBzb3VyY2UpKSB7XG4gICAgICAgIHN0YWNrW2ldID0gc291cmNlO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBpc0FycmF5KHNvdXJjZSkgPyBbXSA6IHt9O1xuXG4gICAgICAgIGZvckVhY2goc291cmNlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZHVjZWRWYWx1ZSA9IHZpc2l0KHZhbHVlLCBpICsgMSk7XG4gICAgICAgICAgIWlzVW5kZWZpbmVkKHJlZHVjZWRWYWx1ZSkgJiYgKHRhcmdldFtrZXldID0gcmVkdWNlZFZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RhY2tbaV0gPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlO1xuICB9O1xuXG4gIHJldHVybiB2aXNpdChvYmosIDApO1xufTtcblxuY29uc3QgaXNBc3luY0ZuID0ga2luZE9mVGVzdCgnQXN5bmNGdW5jdGlvbicpO1xuXG5jb25zdCBpc1RoZW5hYmxlID0gKHRoaW5nKSA9PlxuICB0aGluZyAmJiAoaXNPYmplY3QodGhpbmcpIHx8IGlzRnVuY3Rpb24odGhpbmcpKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRoZW4pICYmIGlzRnVuY3Rpb24odGhpbmcuY2F0Y2gpO1xuXG52YXIgdXRpbHMkMSA9IHtcbiAgaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXIsXG4gIGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZyxcbiAgaXNOdW1iZXIsXG4gIGlzQm9vbGVhbixcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmVhZGFibGVTdHJlYW0sXG4gIGlzUmVxdWVzdCxcbiAgaXNSZXNwb25zZSxcbiAgaXNIZWFkZXJzLFxuICBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlLFxuICBpc0ZpbGUsXG4gIGlzQmxvYixcbiAgaXNSZWdFeHAsXG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNUeXBlZEFycmF5LFxuICBpc0ZpbGVMaXN0LFxuICBmb3JFYWNoLFxuICBtZXJnZSxcbiAgZXh0ZW5kLFxuICB0cmltLFxuICBzdHJpcEJPTSxcbiAgaW5oZXJpdHMsXG4gIHRvRmxhdE9iamVjdCxcbiAga2luZE9mLFxuICBraW5kT2ZUZXN0LFxuICBlbmRzV2l0aCxcbiAgdG9BcnJheSxcbiAgZm9yRWFjaEVudHJ5LFxuICBtYXRjaEFsbCxcbiAgaXNIVE1MRm9ybSxcbiAgaGFzT3duUHJvcGVydHksXG4gIGhhc093blByb3A6IGhhc093blByb3BlcnR5LCAvLyBhbiBhbGlhcyB0byBhdm9pZCBFU0xpbnQgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIGRldGVjdGlvblxuICByZWR1Y2VEZXNjcmlwdG9ycyxcbiAgZnJlZXplTWV0aG9kcyxcbiAgdG9PYmplY3RTZXQsXG4gIHRvQ2FtZWxDYXNlLFxuICBub29wLFxuICB0b0Zpbml0ZU51bWJlcixcbiAgZmluZEtleSxcbiAgZ2xvYmFsOiBfZ2xvYmFsLFxuICBpc0NvbnRleHREZWZpbmVkLFxuICBBTFBIQUJFVCxcbiAgZ2VuZXJhdGVTdHJpbmcsXG4gIGlzU3BlY0NvbXBsaWFudEZvcm0sXG4gIHRvSlNPTk9iamVjdCxcbiAgaXNBc3luY0ZuLFxuICBpc1RoZW5hYmxlXG59O1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbmZpZ10gVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQXhpb3NFcnJvcihtZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIEVycm9yLmNhbGwodGhpcyk7XG5cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7XG4gIH1cblxuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7XG4gIGNvZGUgJiYgKHRoaXMuY29kZSA9IGNvZGUpO1xuICBjb25maWcgJiYgKHRoaXMuY29uZmlnID0gY29uZmlnKTtcbiAgcmVxdWVzdCAmJiAodGhpcy5yZXF1ZXN0ID0gcmVxdWVzdCk7XG4gIHJlc3BvbnNlICYmICh0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2UpO1xufVxuXG51dGlscyQxLmluaGVyaXRzKEF4aW9zRXJyb3IsIEVycm9yLCB7XG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHV0aWxzJDEudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1czogdGhpcy5yZXNwb25zZSAmJiB0aGlzLnJlc3BvbnNlLnN0YXR1cyA/IHRoaXMucmVzcG9uc2Uuc3RhdHVzIDogbnVsbFxuICAgIH07XG4gIH1cbn0pO1xuXG5jb25zdCBwcm90b3R5cGUkMSA9IEF4aW9zRXJyb3IucHJvdG90eXBlO1xuY29uc3QgZGVzY3JpcHRvcnMgPSB7fTtcblxuW1xuICAnRVJSX0JBRF9PUFRJT05fVkFMVUUnLFxuICAnRVJSX0JBRF9PUFRJT04nLFxuICAnRUNPTk5BQk9SVEVEJyxcbiAgJ0VUSU1FRE9VVCcsXG4gICdFUlJfTkVUV09SSycsXG4gICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJyxcbiAgJ0VSUl9ERVBSRUNBVEVEJyxcbiAgJ0VSUl9CQURfUkVTUE9OU0UnLFxuICAnRVJSX0JBRF9SRVFVRVNUJyxcbiAgJ0VSUl9DQU5DRUxFRCcsXG4gICdFUlJfTk9UX1NVUFBPUlQnLFxuICAnRVJSX0lOVkFMSURfVVJMJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbl0uZm9yRWFjaChjb2RlID0+IHtcbiAgZGVzY3JpcHRvcnNbY29kZV0gPSB7dmFsdWU6IGNvZGV9O1xufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEF4aW9zRXJyb3IsIGRlc2NyaXB0b3JzKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90b3R5cGUkMSwgJ2lzQXhpb3NFcnJvcicsIHt2YWx1ZTogdHJ1ZX0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuQXhpb3NFcnJvci5mcm9tID0gKGVycm9yLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlLCBjdXN0b21Qcm9wcykgPT4ge1xuICBjb25zdCBheGlvc0Vycm9yID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUkMSk7XG5cbiAgdXRpbHMkMS50b0ZsYXRPYmplY3QoZXJyb3IsIGF4aW9zRXJyb3IsIGZ1bmN0aW9uIGZpbHRlcihvYmopIHtcbiAgICByZXR1cm4gb2JqICE9PSBFcnJvci5wcm90b3R5cGU7XG4gIH0sIHByb3AgPT4ge1xuICAgIHJldHVybiBwcm9wICE9PSAnaXNBeGlvc0Vycm9yJztcbiAgfSk7XG5cbiAgQXhpb3NFcnJvci5jYWxsKGF4aW9zRXJyb3IsIGVycm9yLm1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpO1xuXG4gIGF4aW9zRXJyb3IuY2F1c2UgPSBlcnJvcjtcblxuICBheGlvc0Vycm9yLm5hbWUgPSBlcnJvci5uYW1lO1xuXG4gIGN1c3RvbVByb3BzICYmIE9iamVjdC5hc3NpZ24oYXhpb3NFcnJvciwgY3VzdG9tUHJvcHMpO1xuXG4gIHJldHVybiBheGlvc0Vycm9yO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0cmljdFxudmFyIGh0dHBBZGFwdGVyID0gbnVsbDtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiB0aGluZyBpcyBhIGFycmF5IG9yIGpzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGhpbmcgLSBUaGUgb2JqZWN0IG9yIGFycmF5IHRvIGJlIHZpc2l0ZWQuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmlzaXRhYmxlKHRoaW5nKSB7XG4gIHJldHVybiB1dGlscyQxLmlzUGxhaW5PYmplY3QodGhpbmcpIHx8IHV0aWxzJDEuaXNBcnJheSh0aGluZyk7XG59XG5cbi8qKlxuICogSXQgcmVtb3ZlcyB0aGUgYnJhY2tldHMgZnJvbSB0aGUgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHBhcmFtZXRlci5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUga2V5IHdpdGhvdXQgdGhlIGJyYWNrZXRzLlxuICovXG5mdW5jdGlvbiByZW1vdmVCcmFja2V0cyhrZXkpIHtcbiAgcmV0dXJuIHV0aWxzJDEuZW5kc1dpdGgoa2V5LCAnW10nKSA/IGtleS5zbGljZSgwLCAtMikgOiBrZXk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXRoLCBhIGtleSwgYW5kIGEgYm9vbGVhbiwgYW5kIHJldHVybnMgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBjdXJyZW50IG9iamVjdCBiZWluZyBpdGVyYXRlZCBvdmVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGRvdHMgLSBJZiB0cnVlLCB0aGUga2V5IHdpbGwgYmUgcmVuZGVyZWQgd2l0aCBkb3RzIGluc3RlYWQgb2YgYnJhY2tldHMuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICovXG5mdW5jdGlvbiByZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSB7XG4gIGlmICghcGF0aCkgcmV0dXJuIGtleTtcbiAgcmV0dXJuIHBhdGguY29uY2F0KGtleSkubWFwKGZ1bmN0aW9uIGVhY2godG9rZW4sIGkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB0b2tlbiA9IHJlbW92ZUJyYWNrZXRzKHRva2VuKTtcbiAgICByZXR1cm4gIWRvdHMgJiYgaSA/ICdbJyArIHRva2VuICsgJ10nIDogdG9rZW47XG4gIH0pLmpvaW4oZG90cyA/ICcuJyA6ICcnKTtcbn1cblxuLyoqXG4gKiBJZiB0aGUgYXJyYXkgaXMgYW4gYXJyYXkgYW5kIG5vbmUgb2YgaXRzIGVsZW1lbnRzIGFyZSB2aXNpdGFibGUsIHRoZW4gaXQncyBhIGZsYXQgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY2hlY2tcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNGbGF0QXJyYXkoYXJyKSB7XG4gIHJldHVybiB1dGlscyQxLmlzQXJyYXkoYXJyKSAmJiAhYXJyLnNvbWUoaXNWaXNpdGFibGUpO1xufVxuXG5jb25zdCBwcmVkaWNhdGVzID0gdXRpbHMkMS50b0ZsYXRPYmplY3QodXRpbHMkMSwge30sIG51bGwsIGZ1bmN0aW9uIGZpbHRlcihwcm9wKSB7XG4gIHJldHVybiAvXmlzW0EtWl0vLnRlc3QocHJvcCk7XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgZGF0YSBvYmplY3QgdG8gRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0gez9PYmplY3R9IFtmb3JtRGF0YV1cbiAqIEBwYXJhbSB7P09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy52aXNpdG9yXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5tZXRhVG9rZW5zID0gdHJ1ZV1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZG90cyA9IGZhbHNlXVxuICogQHBhcmFtIHs/Qm9vbGVhbn0gW29wdGlvbnMuaW5kZXhlcyA9IGZhbHNlXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiovXG5cbi8qKlxuICogSXQgY29udmVydHMgYW4gb2JqZWN0IGludG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gY29udmVydCB0byBmb3JtIGRhdGEuXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgLSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIHRvRm9ybURhdGEob2JqLCBmb3JtRGF0YSwgb3B0aW9ucykge1xuICBpZiAoIXV0aWxzJDEuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhcmdldCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGZvcm1EYXRhID0gZm9ybURhdGEgfHwgbmV3IChGb3JtRGF0YSkoKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgb3B0aW9ucyA9IHV0aWxzJDEudG9GbGF0T2JqZWN0KG9wdGlvbnMsIHtcbiAgICBtZXRhVG9rZW5zOiB0cnVlLFxuICAgIGRvdHM6IGZhbHNlLFxuICAgIGluZGV4ZXM6IGZhbHNlXG4gIH0sIGZhbHNlLCBmdW5jdGlvbiBkZWZpbmVkKG9wdGlvbiwgc291cmNlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gICAgcmV0dXJuICF1dGlscyQxLmlzVW5kZWZpbmVkKHNvdXJjZVtvcHRpb25dKTtcbiAgfSk7XG5cbiAgY29uc3QgbWV0YVRva2VucyA9IG9wdGlvbnMubWV0YVRva2VucztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIGNvbnN0IHZpc2l0b3IgPSBvcHRpb25zLnZpc2l0b3IgfHwgZGVmYXVsdFZpc2l0b3I7XG4gIGNvbnN0IGRvdHMgPSBvcHRpb25zLmRvdHM7XG4gIGNvbnN0IGluZGV4ZXMgPSBvcHRpb25zLmluZGV4ZXM7XG4gIGNvbnN0IF9CbG9iID0gb3B0aW9ucy5CbG9iIHx8IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBCbG9iO1xuICBjb25zdCB1c2VCbG9iID0gX0Jsb2IgJiYgdXRpbHMkMS5pc1NwZWNDb21wbGlhbnRGb3JtKGZvcm1EYXRhKTtcblxuICBpZiAoIXV0aWxzJDEuaXNGdW5jdGlvbih2aXNpdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Zpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnJztcblxuICAgIGlmICh1dGlscyQxLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICghdXNlQmxvYiAmJiB1dGlscyQxLmlzQmxvYih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLicpO1xuICAgIH1cblxuICAgIGlmICh1dGlscyQxLmlzQXJyYXlCdWZmZXIodmFsdWUpIHx8IHV0aWxzJDEuaXNUeXBlZEFycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVzZUJsb2IgJiYgdHlwZW9mIEJsb2IgPT09ICdmdW5jdGlvbicgPyBuZXcgQmxvYihbdmFsdWVdKSA6IEJ1ZmZlci5mcm9tKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCB2aXNpdG9yLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0ga2V5XG4gICAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nfE51bWJlcj59IHBhdGhcbiAgICogQHRoaXMge0Zvcm1EYXRhfVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJuIHRydWUgdG8gdmlzaXQgdGhlIGVhY2ggcHJvcCBvZiB0aGUgdmFsdWUgcmVjdXJzaXZlbHlcbiAgICovXG4gIGZ1bmN0aW9uIGRlZmF1bHRWaXNpdG9yKHZhbHVlLCBrZXksIHBhdGgpIHtcbiAgICBsZXQgYXJyID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUgJiYgIXBhdGggJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHV0aWxzJDEuZW5kc1dpdGgoa2V5LCAne30nKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gbWV0YVRva2VucyA/IGtleSA6IGtleS5zbGljZSgwLCAtMik7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICh1dGlscyQxLmlzQXJyYXkodmFsdWUpICYmIGlzRmxhdEFycmF5KHZhbHVlKSkgfHxcbiAgICAgICAgKCh1dGlscyQxLmlzRmlsZUxpc3QodmFsdWUpIHx8IHV0aWxzJDEuZW5kc1dpdGgoa2V5LCAnW10nKSkgJiYgKGFyciA9IHV0aWxzJDEudG9BcnJheSh2YWx1ZSkpXG4gICAgICAgICkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IHJlbW92ZUJyYWNrZXRzKGtleSk7XG5cbiAgICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24gZWFjaChlbCwgaW5kZXgpIHtcbiAgICAgICAgICAhKHV0aWxzJDEuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgICAgICAgICAgIGluZGV4ZXMgPT09IHRydWUgPyByZW5kZXJLZXkoW2tleV0sIGluZGV4LCBkb3RzKSA6IChpbmRleGVzID09PSBudWxsID8ga2V5IDoga2V5ICsgJ1tdJyksXG4gICAgICAgICAgICBjb252ZXJ0VmFsdWUoZWwpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNWaXNpdGFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQocmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cyksIGNvbnZlcnRWYWx1ZSh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc3RhY2sgPSBbXTtcblxuICBjb25zdCBleHBvc2VkSGVscGVycyA9IE9iamVjdC5hc3NpZ24ocHJlZGljYXRlcywge1xuICAgIGRlZmF1bHRWaXNpdG9yLFxuICAgIGNvbnZlcnRWYWx1ZSxcbiAgICBpc1Zpc2l0YWJsZVxuICB9KTtcblxuICBmdW5jdGlvbiBidWlsZCh2YWx1ZSwgcGF0aCkge1xuICAgIGlmICh1dGlscyQxLmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgaWYgKHN0YWNrLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0NpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAnICsgcGF0aC5qb2luKCcuJykpO1xuICAgIH1cblxuICAgIHN0YWNrLnB1c2godmFsdWUpO1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiBlYWNoKGVsLCBrZXkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9ICEodXRpbHMkMS5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIHZpc2l0b3IuY2FsbChcbiAgICAgICAgZm9ybURhdGEsIGVsLCB1dGlscyQxLmlzU3RyaW5nKGtleSkgPyBrZXkudHJpbSgpIDoga2V5LCBwYXRoLCBleHBvc2VkSGVscGVyc1xuICAgICAgKTtcblxuICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgICBidWlsZChlbCwgcGF0aCA/IHBhdGguY29uY2F0KGtleSkgOiBba2V5XSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdGFjay5wb3AoKTtcbiAgfVxuXG4gIGlmICghdXRpbHMkMS5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZGF0YSBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgYnVpbGQob2JqKTtcblxuICByZXR1cm4gZm9ybURhdGE7XG59XG5cbi8qKlxuICogSXQgZW5jb2RlcyBhIHN0cmluZyBieSByZXBsYWNpbmcgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGluIHRoZSB1bnJlc2VydmVkIHNldCB3aXRoXG4gKiB0aGVpciBwZXJjZW50LWVuY29kZWQgZXF1aXZhbGVudHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBlbmNvZGUuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBlbmNvZGUkMShzdHIpIHtcbiAgY29uc3QgY2hhck1hcCA9IHtcbiAgICAnISc6ICclMjEnLFxuICAgIFwiJ1wiOiAnJTI3JyxcbiAgICAnKCc6ICclMjgnLFxuICAgICcpJzogJyUyOScsXG4gICAgJ34nOiAnJTdFJyxcbiAgICAnJTIwJzogJysnLFxuICAgICclMDAnOiAnXFx4MDAnXG4gIH07XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZywgZnVuY3Rpb24gcmVwbGFjZXIobWF0Y2gpIHtcbiAgICByZXR1cm4gY2hhck1hcFttYXRjaF07XG4gIH0pO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGFyYW1zIG9iamVjdCBhbmQgY29udmVydHMgaXQgdG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIGJlIGNvbnZlcnRlZCB0byBhIEZvcm1EYXRhIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCBwYXNzZWQgdG8gdGhlIEF4aW9zIGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpIHtcbiAgdGhpcy5fcGFpcnMgPSBbXTtcblxuICBwYXJhbXMgJiYgdG9Gb3JtRGF0YShwYXJhbXMsIHRoaXMsIG9wdGlvbnMpO1xufVxuXG5jb25zdCBwcm90b3R5cGUgPSBBeGlvc1VSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG5cbnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQobmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5fcGFpcnMucHVzaChbbmFtZSwgdmFsdWVdKTtcbn07XG5cbnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKGVuY29kZXIpIHtcbiAgY29uc3QgX2VuY29kZSA9IGVuY29kZXIgPyBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBlbmNvZGVyLmNhbGwodGhpcywgdmFsdWUsIGVuY29kZSQxKTtcbiAgfSA6IGVuY29kZSQxO1xuXG4gIHJldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24gZWFjaChwYWlyKSB7XG4gICAgcmV0dXJuIF9lbmNvZGUocGFpclswXSkgKyAnPScgKyBfZW5jb2RlKHBhaXJbMV0pO1xuICB9LCAnJykuam9pbignJicpO1xufTtcblxuLyoqXG4gKiBJdCByZXBsYWNlcyBhbGwgaW5zdGFuY2VzIG9mIHRoZSBjaGFyYWN0ZXJzIGA6YCwgYCRgLCBgLGAsIGArYCwgYFtgLCBhbmQgYF1gIHdpdGggdGhlaXJcbiAqIFVSSSBlbmNvZGVkIGNvdW50ZXJwYXJ0c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWwgVGhlIHZhbHVlIHRvIGJlIGVuY29kZWQuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcGFyYW0gez9vYmplY3R9IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5mdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgb3B0aW9ucykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIFxuICBjb25zdCBfZW5jb2RlID0gb3B0aW9ucyAmJiBvcHRpb25zLmVuY29kZSB8fCBlbmNvZGU7XG5cbiAgY29uc3Qgc2VyaWFsaXplRm4gPSBvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplO1xuXG4gIGxldCBzZXJpYWxpemVkUGFyYW1zO1xuXG4gIGlmIChzZXJpYWxpemVGbikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBzZXJpYWxpemVGbihwYXJhbXMsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSB1dGlscyQxLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykgP1xuICAgICAgcGFyYW1zLnRvU3RyaW5nKCkgOlxuICAgICAgbmV3IEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykudG9TdHJpbmcoX2VuY29kZSk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIGNvbnN0IGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZihcIiNcIik7XG5cbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn1cblxuY2xhc3MgSW50ZXJjZXB0b3JNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICAgKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gICAqL1xuICB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCwgb3B0aW9ucykge1xuICAgIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgICBmdWxmaWxsZWQsXG4gICAgICByZWplY3RlZCxcbiAgICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gICAqXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGludGVyY2VwdG9yIHdhcyByZW1vdmVkLCBgZmFsc2VgIG90aGVyd2lzZVxuICAgKi9cbiAgZWplY3QoaWQpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGludGVyY2VwdG9ycyBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsZWFyKCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gICAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZvckVhY2goZm4pIHtcbiAgICB1dGlscyQxLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgICAgaWYgKGggIT09IG51bGwpIHtcbiAgICAgICAgZm4oaCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxudmFyIEludGVyY2VwdG9yTWFuYWdlciQxID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuXG52YXIgdHJhbnNpdGlvbmFsRGVmYXVsdHMgPSB7XG4gIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2Vcbn07XG5cbnZhciBVUkxTZWFyY2hQYXJhbXMkMSA9IHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnID8gVVJMU2VhcmNoUGFyYW1zIDogQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG5cbnZhciBGb3JtRGF0YSQxID0gdHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyA/IEZvcm1EYXRhIDogbnVsbDtcblxudmFyIEJsb2IkMSA9IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyA/IEJsb2IgOiBudWxsO1xuXG52YXIgcGxhdGZvcm0kMSA9IHtcbiAgaXNCcm93c2VyOiB0cnVlLFxuICBjbGFzc2VzOiB7XG4gICAgVVJMU2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXMkMSxcbiAgICBGb3JtRGF0YTogRm9ybURhdGEkMSxcbiAgICBCbG9iOiBCbG9iJDFcbiAgfSxcbiAgcHJvdG9jb2xzOiBbJ2h0dHAnLCAnaHR0cHMnLCAnZmlsZScsICdibG9iJywgJ3VybCcsICdkYXRhJ11cbn07XG5cbmNvbnN0IGhhc0Jyb3dzZXJFbnYgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyRW52ID0gKFxuICAocHJvZHVjdCkgPT4ge1xuICAgIHJldHVybiBoYXNCcm93c2VyRW52ICYmIFsnUmVhY3ROYXRpdmUnLCAnTmF0aXZlU2NyaXB0JywgJ05TJ10uaW5kZXhPZihwcm9kdWN0KSA8IDBcbiAgfSkodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnByb2R1Y3QpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciB3ZWJXb3JrZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBBbHRob3VnaCB0aGUgYGlzU3RhbmRhcmRCcm93c2VyRW52YCBtZXRob2QgaW5kaWNhdGVzIHRoYXRcbiAqIGBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlcmAsIHRoZSBXZWJXb3JrZXIgd2lsbCBzdGlsbCBiZVxuICogZmlsdGVyZWQgb3V0IGR1ZSB0byBpdHMganVkZ21lbnQgc3RhbmRhcmRcbiAqIGB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnYC5cbiAqIFRoaXMgbGVhZHMgdG8gYSBwcm9ibGVtIHdoZW4gYXhpb3MgcG9zdCBgRm9ybURhdGFgIGluIHdlYldvcmtlclxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYgPSAoKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUgJiZcbiAgICB0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzID09PSAnZnVuY3Rpb24nXG4gICk7XG59KSgpO1xuXG5jb25zdCBvcmlnaW4gPSBoYXNCcm93c2VyRW52ICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmIHx8ICdodHRwOi8vbG9jYWxob3N0JztcblxudmFyIHV0aWxzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIGhhc0Jyb3dzZXJFbnY6IGhhc0Jyb3dzZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjogaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJFbnY6IGhhc1N0YW5kYXJkQnJvd3NlckVudixcbiAgb3JpZ2luOiBvcmlnaW5cbn0pO1xuXG52YXIgcGxhdGZvcm0gPSB7XG4gIC4uLnV0aWxzLFxuICAuLi5wbGF0Zm9ybSQxXG59O1xuXG5mdW5jdGlvbiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvRm9ybURhdGEoZGF0YSwgbmV3IHBsYXRmb3JtLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zKCksIE9iamVjdC5hc3NpZ24oe1xuICAgIHZpc2l0b3I6IGZ1bmN0aW9uKHZhbHVlLCBrZXksIHBhdGgsIGhlbHBlcnMpIHtcbiAgICAgIGlmIChwbGF0Zm9ybS5pc05vZGUgJiYgdXRpbHMkMS5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoa2V5LCB2YWx1ZS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoZWxwZXJzLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9LCBvcHRpb25zKSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcgbGlrZSBgZm9vW3hdW3ldW3pdYCBhbmQgcmV0dXJucyBhbiBhcnJheSBsaWtlIGBbJ2ZvbycsICd4JywgJ3knLCAneiddXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICpcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUHJvcFBhdGgobmFtZSkge1xuICAvLyBmb29beF1beV1bel1cbiAgLy8gZm9vLngueS56XG4gIC8vIGZvby14LXktelxuICAvLyBmb28geCB5IHpcbiAgcmV0dXJuIHV0aWxzJDEubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLCBuYW1lKS5tYXAobWF0Y2ggPT4ge1xuICAgIHJldHVybiBtYXRjaFswXSA9PT0gJ1tdJyA/ICcnIDogbWF0Y2hbMV0gfHwgbWF0Y2hbMF07XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gYXJyYXkgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNvbnZlcnQgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIGtleXMgYW5kIHZhbHVlcyBhcyB0aGUgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5VG9PYmplY3QoYXJyKSB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYXJyKTtcbiAgbGV0IGk7XG4gIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICBsZXQga2V5O1xuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ldO1xuICAgIG9ialtrZXldID0gYXJyW2tleV07XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIEZvcm1EYXRhIG9iamVjdCBhbmQgcmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gY29udmVydCB0byBKU09OLlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3Q8c3RyaW5nLCBhbnk+IHwgbnVsbH0gVGhlIGNvbnZlcnRlZCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGZvcm1EYXRhVG9KU09OKGZvcm1EYXRhKSB7XG4gIGZ1bmN0aW9uIGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0LCBpbmRleCkge1xuICAgIGxldCBuYW1lID0gcGF0aFtpbmRleCsrXTtcblxuICAgIGlmIChuYW1lID09PSAnX19wcm90b19fJykgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBpc051bWVyaWNLZXkgPSBOdW1iZXIuaXNGaW5pdGUoK25hbWUpO1xuICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID49IHBhdGgubGVuZ3RoO1xuICAgIG5hbWUgPSAhbmFtZSAmJiB1dGlscyQxLmlzQXJyYXkodGFyZ2V0KSA/IHRhcmdldC5sZW5ndGggOiBuYW1lO1xuXG4gICAgaWYgKGlzTGFzdCkge1xuICAgICAgaWYgKHV0aWxzJDEuaGFzT3duUHJvcCh0YXJnZXQsIG5hbWUpKSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IFt0YXJnZXRbbmFtZV0sIHZhbHVlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldFtuYW1lXSB8fCAhdXRpbHMkMS5pc09iamVjdCh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldFtuYW1lXSwgaW5kZXgpO1xuXG4gICAgaWYgKHJlc3VsdCAmJiB1dGlscyQxLmlzQXJyYXkodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gYXJyYXlUb09iamVjdCh0YXJnZXRbbmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICB9XG5cbiAgaWYgKHV0aWxzJDEuaXNGb3JtRGF0YShmb3JtRGF0YSkgJiYgdXRpbHMkMS5pc0Z1bmN0aW9uKGZvcm1EYXRhLmVudHJpZXMpKSB7XG4gICAgY29uc3Qgb2JqID0ge307XG5cbiAgICB1dGlscyQxLmZvckVhY2hFbnRyeShmb3JtRGF0YSwgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBidWlsZFBhdGgocGFyc2VQcm9wUGF0aChuYW1lKSwgdmFsdWUsIG9iaiwgMCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcsIHRyaWVzIHRvIHBhcnNlIGl0LCBhbmQgaWYgaXQgZmFpbHMsIGl0IHJldHVybnMgdGhlIHN0cmluZ2lmaWVkIHZlcnNpb25cbiAqIG9mIHRoZSBpbnB1dFxuICpcbiAqIEBwYXJhbSB7YW55fSByYXdWYWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBzdHJpbmdpZmllZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcnNlciAtIEEgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzdHJpbmcgaW50byBhIEphdmFTY3JpcHQgb2JqZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZW5jb2RlciAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHZhbHVlIGFuZCByZXR1cm5zIGEgc3RyaW5nLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgc3RyaW5naWZpZWQgdmVyc2lvbiBvZiB0aGUgcmF3VmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeVNhZmVseShyYXdWYWx1ZSwgcGFyc2VyLCBlbmNvZGVyKSB7XG4gIGlmICh1dGlscyQxLmlzU3RyaW5nKHJhd1ZhbHVlKSkge1xuICAgIHRyeSB7XG4gICAgICAocGFyc2VyIHx8IEpTT04ucGFyc2UpKHJhd1ZhbHVlKTtcbiAgICAgIHJldHVybiB1dGlscyQxLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxuY29uc3QgZGVmYXVsdHMgPSB7XG5cbiAgdHJhbnNpdGlvbmFsOiB0cmFuc2l0aW9uYWxEZWZhdWx0cyxcblxuICBhZGFwdGVyOiBbJ3hocicsICdodHRwJywgJ2ZldGNoJ10sXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpIHx8ICcnO1xuICAgIGNvbnN0IGhhc0pTT05Db250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2pzb24nKSA+IC0xO1xuICAgIGNvbnN0IGlzT2JqZWN0UGF5bG9hZCA9IHV0aWxzJDEuaXNPYmplY3QoZGF0YSk7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkICYmIHV0aWxzJDEuaXNIVE1MRm9ybShkYXRhKSkge1xuICAgICAgZGF0YSA9IG5ldyBGb3JtRGF0YShkYXRhKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0Zvcm1EYXRhID0gdXRpbHMkMS5pc0Zvcm1EYXRhKGRhdGEpO1xuXG4gICAgaWYgKGlzRm9ybURhdGEpIHtcbiAgICAgIHJldHVybiBoYXNKU09OQ29udGVudFR5cGUgPyBKU09OLnN0cmluZ2lmeShmb3JtRGF0YVRvSlNPTihkYXRhKSkgOiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh1dGlscyQxLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzJDEuaXNCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzJDEuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzJDEuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzQmxvYihkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc1JlYWRhYmxlU3RyZWFtKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzJDEuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04JywgZmFsc2UpO1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgaXNGaWxlTGlzdDtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQpIHtcbiAgICAgIGlmIChjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSA+IC0xKSB7XG4gICAgICAgIHJldHVybiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICgoaXNGaWxlTGlzdCA9IHV0aWxzJDEuaXNGaWxlTGlzdChkYXRhKSkgfHwgY29udGVudFR5cGUuaW5kZXhPZignbXVsdGlwYXJ0L2Zvcm0tZGF0YScpID4gLTEpIHtcbiAgICAgICAgY29uc3QgX0Zvcm1EYXRhID0gdGhpcy5lbnYgJiYgdGhpcy5lbnYuRm9ybURhdGE7XG5cbiAgICAgICAgcmV0dXJuIHRvRm9ybURhdGEoXG4gICAgICAgICAgaXNGaWxlTGlzdCA/IHsnZmlsZXNbXSc6IGRhdGF9IDogZGF0YSxcbiAgICAgICAgICBfRm9ybURhdGEgJiYgbmV3IF9Gb3JtRGF0YSgpLFxuICAgICAgICAgIHRoaXMuZm9ybVNlcmlhbGl6ZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGhhc0pTT05Db250ZW50VHlwZSApIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL2pzb24nLCBmYWxzZSk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSB0aGlzLnRyYW5zaXRpb25hbCB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgY29uc3QgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgIGNvbnN0IEpTT05SZXF1ZXN0ZWQgPSB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgaWYgKHV0aWxzJDEuaXNSZXNwb25zZShkYXRhKSB8fCB1dGlscyQxLmlzUmVhZGFibGVTdHJlYW0oZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmIChkYXRhICYmIHV0aWxzJDEuaXNTdHJpbmcoZGF0YSkgJiYgKChmb3JjZWRKU09OUGFyc2luZyAmJiAhdGhpcy5yZXNwb25zZVR5cGUpIHx8IEpTT05SZXF1ZXN0ZWQpKSB7XG4gICAgICBjb25zdCBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgICBjb25zdCBzdHJpY3RKU09OUGFyc2luZyA9ICFzaWxlbnRKU09OUGFyc2luZyAmJiBKU09OUmVxdWVzdGVkO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHN0cmljdEpTT05QYXJzaW5nKSB7XG4gICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGUsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgdGhpcywgbnVsbCwgdGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG4gIG1heEJvZHlMZW5ndGg6IC0xLFxuXG4gIGVudjoge1xuICAgIEZvcm1EYXRhOiBwbGF0Zm9ybS5jbGFzc2VzLkZvcm1EYXRhLFxuICAgIEJsb2I6IHBsYXRmb3JtLmNsYXNzZXMuQmxvYlxuICB9LFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH0sXG5cbiAgaGVhZGVyczoge1xuICAgIGNvbW1vbjoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxufTtcblxudXRpbHMkMS5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIChtZXRob2QpID0+IHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxudmFyIGRlZmF1bHRzJDEgPSBkZWZhdWx0cztcblxuLy8gUmF3QXhpb3NIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xuY29uc3QgaWdub3JlRHVwbGljYXRlT2YgPSB1dGlscyQxLnRvT2JqZWN0U2V0KFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dKTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJhd0hlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbnZhciBwYXJzZUhlYWRlcnMgPSByYXdIZWFkZXJzID0+IHtcbiAgY29uc3QgcGFyc2VkID0ge307XG4gIGxldCBrZXk7XG4gIGxldCB2YWw7XG4gIGxldCBpO1xuXG4gIHJhd0hlYWRlcnMgJiYgcmF3SGVhZGVycy5zcGxpdCgnXFxuJykuZm9yRWFjaChmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSBsaW5lLnN1YnN0cmluZygwLCBpKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSBsaW5lLnN1YnN0cmluZyhpICsgMSkudHJpbSgpO1xuXG4gICAgaWYgKCFrZXkgfHwgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mW2tleV0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICBpZiAocGFyc2VkW2tleV0pIHtcbiAgICAgICAgcGFyc2VkW2tleV0ucHVzaCh2YWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBbdmFsXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuXG5jb25zdCAkaW50ZXJuYWxzID0gU3ltYm9sKCdpbnRlcm5hbHMnKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyICYmIFN0cmluZyhoZWFkZXIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdXRpbHMkMS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChub3JtYWxpemVWYWx1ZSkgOiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRva2VucyhzdHIpIHtcbiAgY29uc3QgdG9rZW5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgY29uc3QgdG9rZW5zUkUgPSAvKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nO1xuICBsZXQgbWF0Y2g7XG5cbiAgd2hpbGUgKChtYXRjaCA9IHRva2Vuc1JFLmV4ZWMoc3RyKSkpIHtcbiAgICB0b2tlbnNbbWF0Y2hbMV1dID0gbWF0Y2hbMl07XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5jb25zdCBpc1ZhbGlkSGVhZGVyTmFtZSA9IChzdHIpID0+IC9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3Qoc3RyLnRyaW0oKSk7XG5cbmZ1bmN0aW9uIG1hdGNoSGVhZGVyVmFsdWUoY29udGV4dCwgdmFsdWUsIGhlYWRlciwgZmlsdGVyLCBpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgaWYgKHV0aWxzJDEuaXNGdW5jdGlvbihmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci5jYWxsKHRoaXMsIHZhbHVlLCBoZWFkZXIpO1xuICB9XG5cbiAgaWYgKGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICAgIHZhbHVlID0gaGVhZGVyO1xuICB9XG5cbiAgaWYgKCF1dGlscyQxLmlzU3RyaW5nKHZhbHVlKSkgcmV0dXJuO1xuXG4gIGlmICh1dGlscyQxLmlzU3RyaW5nKGZpbHRlcikpIHtcbiAgICByZXR1cm4gdmFsdWUuaW5kZXhPZihmaWx0ZXIpICE9PSAtMTtcbiAgfVxuXG4gIGlmICh1dGlscyQxLmlzUmVnRXhwKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLnRlc3QodmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlci50cmltKClcbiAgICAudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxcZF0pKFxcdyopL2csICh3LCBjaGFyLCBzdHIpID0+IHtcbiAgICAgIHJldHVybiBjaGFyLnRvVXBwZXJDYXNlKCkgKyBzdHI7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWNjZXNzb3JzKG9iaiwgaGVhZGVyKSB7XG4gIGNvbnN0IGFjY2Vzc29yTmFtZSA9IHV0aWxzJDEudG9DYW1lbENhc2UoJyAnICsgaGVhZGVyKTtcblxuICBbJ2dldCcsICdzZXQnLCAnaGFzJ10uZm9yRWFjaChtZXRob2ROYW1lID0+IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBtZXRob2ROYW1lICsgYWNjZXNzb3JOYW1lLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24oYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgICByZXR1cm4gdGhpc1ttZXRob2ROYW1lXS5jYWxsKHRoaXMsIGhlYWRlciwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0pO1xufVxuXG5jbGFzcyBBeGlvc0hlYWRlcnMge1xuICBjb25zdHJ1Y3RvcihoZWFkZXJzKSB7XG4gICAgaGVhZGVycyAmJiB0aGlzLnNldChoZWFkZXJzKTtcbiAgfVxuXG4gIHNldChoZWFkZXIsIHZhbHVlT3JSZXdyaXRlLCByZXdyaXRlKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICBmdW5jdGlvbiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFsSGVhZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gdXRpbHMkMS5maW5kS2V5KHNlbGYsIGxIZWFkZXIpO1xuXG4gICAgICBpZigha2V5IHx8IHNlbGZba2V5XSA9PT0gdW5kZWZpbmVkIHx8IF9yZXdyaXRlID09PSB0cnVlIHx8IChfcmV3cml0ZSA9PT0gdW5kZWZpbmVkICYmIHNlbGZba2V5XSAhPT0gZmFsc2UpKSB7XG4gICAgICAgIHNlbGZba2V5IHx8IF9oZWFkZXJdID0gbm9ybWFsaXplVmFsdWUoX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRIZWFkZXJzID0gKGhlYWRlcnMsIF9yZXdyaXRlKSA9PlxuICAgICAgdXRpbHMkMS5mb3JFYWNoKGhlYWRlcnMsIChfdmFsdWUsIF9oZWFkZXIpID0+IHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSk7XG5cbiAgICBpZiAodXRpbHMkMS5pc1BsYWluT2JqZWN0KGhlYWRlcikgfHwgaGVhZGVyIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcikge1xuICAgICAgc2V0SGVhZGVycyhoZWFkZXIsIHZhbHVlT3JSZXdyaXRlKTtcbiAgICB9IGVsc2UgaWYodXRpbHMkMS5pc1N0cmluZyhoZWFkZXIpICYmIChoZWFkZXIgPSBoZWFkZXIudHJpbSgpKSAmJiAhaXNWYWxpZEhlYWRlck5hbWUoaGVhZGVyKSkge1xuICAgICAgc2V0SGVhZGVycyhwYXJzZUhlYWRlcnMoaGVhZGVyKSwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMkMS5pc0hlYWRlcnMoaGVhZGVyKSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgaGVhZGVyLmVudHJpZXMoKSkge1xuICAgICAgICBzZXRIZWFkZXIodmFsdWUsIGtleSwgcmV3cml0ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlciAhPSBudWxsICYmIHNldEhlYWRlcih2YWx1ZU9yUmV3cml0ZSwgaGVhZGVyLCByZXdyaXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldChoZWFkZXIsIHBhcnNlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMkMS5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tleV07XG5cbiAgICAgICAgaWYgKCFwYXJzZXIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VyID09PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVG9rZW5zKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscyQxLmlzRnVuY3Rpb24ocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuY2FsbCh0aGlzLCB2YWx1ZSwga2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscyQxLmlzUmVnRXhwKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmV4ZWModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXMoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgcmV0dXJuICEhKGtleSAmJiB0aGlzW2tleV0gIT09IHVuZGVmaW5lZCAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlcikpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBkZWxldGUoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGRlbGV0ZUhlYWRlcihfaGVhZGVyKSB7XG4gICAgICBfaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoX2hlYWRlcikge1xuICAgICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoc2VsZiwgX2hlYWRlcik7XG5cbiAgICAgICAgaWYgKGtleSAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZShzZWxmLCBzZWxmW2tleV0sIGtleSwgbWF0Y2hlcikpKSB7XG4gICAgICAgICAgZGVsZXRlIHNlbGZba2V5XTtcblxuICAgICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheShoZWFkZXIpKSB7XG4gICAgICBoZWFkZXIuZm9yRWFjaChkZWxldGVIZWFkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGVIZWFkZXIoaGVhZGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIGNsZWFyKG1hdGNoZXIpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcyk7XG4gICAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIsIHRydWUpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgbm9ybWFsaXplKGZvcm1hdCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMkMS5maW5kS2V5KGhlYWRlcnMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgc2VsZltrZXldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBmb3JtYXQgPyBmb3JtYXRIZWFkZXIoaGVhZGVyKSA6IFN0cmluZyhoZWFkZXIpLnRyaW0oKTtcblxuICAgICAgaWYgKG5vcm1hbGl6ZWQgIT09IGhlYWRlcikge1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgfVxuXG4gICAgICBzZWxmW25vcm1hbGl6ZWRdID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuXG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWRdID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29uY2F0KC4uLnRhcmdldHMpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywgLi4udGFyZ2V0cyk7XG4gIH1cblxuICB0b0pTT04oYXNTdHJpbmdzKSB7XG4gICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gZmFsc2UgJiYgKG9ialtoZWFkZXJdID0gYXNTdHJpbmdzICYmIHV0aWxzJDEuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5qb2luKCcsICcpIDogdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbaGVhZGVyLCB2YWx1ZV0pID0+IGhlYWRlciArICc6ICcgKyB2YWx1ZSkuam9pbignXFxuJyk7XG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdBeGlvc0hlYWRlcnMnO1xuICB9XG5cbiAgc3RhdGljIGZyb20odGhpbmcpIHtcbiAgICByZXR1cm4gdGhpbmcgaW5zdGFuY2VvZiB0aGlzID8gdGhpbmcgOiBuZXcgdGhpcyh0aGluZyk7XG4gIH1cblxuICBzdGF0aWMgY29uY2F0KGZpcnN0LCAuLi50YXJnZXRzKSB7XG4gICAgY29uc3QgY29tcHV0ZWQgPSBuZXcgdGhpcyhmaXJzdCk7XG5cbiAgICB0YXJnZXRzLmZvckVhY2goKHRhcmdldCkgPT4gY29tcHV0ZWQuc2V0KHRhcmdldCkpO1xuXG4gICAgcmV0dXJuIGNvbXB1dGVkO1xuICB9XG5cbiAgc3RhdGljIGFjY2Vzc29yKGhlYWRlcikge1xuICAgIGNvbnN0IGludGVybmFscyA9IHRoaXNbJGludGVybmFsc10gPSAodGhpc1skaW50ZXJuYWxzXSA9IHtcbiAgICAgIGFjY2Vzc29yczoge31cbiAgICB9KTtcblxuICAgIGNvbnN0IGFjY2Vzc29ycyA9IGludGVybmFscy5hY2Nlc3NvcnM7XG4gICAgY29uc3QgcHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVBY2Nlc3NvcihfaGVhZGVyKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWFjY2Vzc29yc1tsSGVhZGVyXSkge1xuICAgICAgICBidWlsZEFjY2Vzc29ycyhwcm90b3R5cGUsIF9oZWFkZXIpO1xuICAgICAgICBhY2Nlc3NvcnNbbEhlYWRlcl0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHV0aWxzJDEuaXNBcnJheShoZWFkZXIpID8gaGVhZGVyLmZvckVhY2goZGVmaW5lQWNjZXNzb3IpIDogZGVmaW5lQWNjZXNzb3IoaGVhZGVyKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbkF4aW9zSGVhZGVycy5hY2Nlc3NvcihbJ0NvbnRlbnQtVHlwZScsICdDb250ZW50LUxlbmd0aCcsICdBY2NlcHQnLCAnQWNjZXB0LUVuY29kaW5nJywgJ1VzZXItQWdlbnQnLCAnQXV0aG9yaXphdGlvbiddKTtcblxuLy8gcmVzZXJ2ZWQgbmFtZXMgaG90Zml4XG51dGlscyQxLnJlZHVjZURlc2NyaXB0b3JzKEF4aW9zSGVhZGVycy5wcm90b3R5cGUsICh7dmFsdWV9LCBrZXkpID0+IHtcbiAgbGV0IG1hcHBlZCA9IGtleVswXS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpOyAvLyBtYXAgYHNldGAgPT4gYFNldGBcbiAgcmV0dXJuIHtcbiAgICBnZXQ6ICgpID0+IHZhbHVlLFxuICAgIHNldChoZWFkZXJWYWx1ZSkge1xuICAgICAgdGhpc1ttYXBwZWRdID0gaGVhZGVyVmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudXRpbHMkMS5mcmVlemVNZXRob2RzKEF4aW9zSGVhZGVycyk7XG5cbnZhciBBeGlvc0hlYWRlcnMkMSA9IEF4aW9zSGVhZGVycztcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHBhcmFtIHs/T2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0XG4gKlxuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGZucywgcmVzcG9uc2UpIHtcbiAgY29uc3QgY29uZmlnID0gdGhpcyB8fCBkZWZhdWx0cyQxO1xuICBjb25zdCBjb250ZXh0ID0gcmVzcG9uc2UgfHwgY29uZmlnO1xuICBjb25zdCBoZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShjb250ZXh0LmhlYWRlcnMpO1xuICBsZXQgZGF0YSA9IGNvbnRleHQuZGF0YTtcblxuICB1dGlscyQxLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4uY2FsbChjb25maWcsIGRhdGEsIGhlYWRlcnMubm9ybWFsaXplKCksIHJlc3BvbnNlID8gcmVzcG9uc2Uuc3RhdHVzIDogdW5kZWZpbmVkKTtcbiAgfSk7XG5cbiAgaGVhZGVycy5ub3JtYWxpemUoKTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufVxuXG4vKipcbiAqIEEgYENhbmNlbGVkRXJyb3JgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3Q9fSByZXF1ZXN0IFRoZSByZXF1ZXN0LlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxlZEVycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIEF4aW9zRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQsIGNvbmZpZywgcmVxdWVzdCk7XG4gIHRoaXMubmFtZSA9ICdDYW5jZWxlZEVycm9yJztcbn1cblxudXRpbHMkMS5pbmhlcml0cyhDYW5jZWxlZEVycm9yLCBBeGlvc0Vycm9yLCB7XG4gIF9fQ0FOQ0VMX186IHRydWVcbn0pO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSByZXNwb25zZS5cbiAqL1xuZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgY29uc3QgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XSxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlUHJvdG9jb2wodXJsKSB7XG4gIGNvbnN0IG1hdGNoID0gL14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWModXJsKTtcbiAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBkYXRhIG1heFJhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2FtcGxlc0NvdW50PSAxMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSBbbWluPSAxMDAwXVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcGVlZG9tZXRlcihzYW1wbGVzQ291bnQsIG1pbikge1xuICBzYW1wbGVzQ291bnQgPSBzYW1wbGVzQ291bnQgfHwgMTA7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGNvbnN0IHRpbWVzdGFtcHMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgbGV0IGhlYWQgPSAwO1xuICBsZXQgdGFpbCA9IDA7XG4gIGxldCBmaXJzdFNhbXBsZVRTO1xuXG4gIG1pbiA9IG1pbiAhPT0gdW5kZWZpbmVkID8gbWluIDogMTAwMDtcblxuICByZXR1cm4gZnVuY3Rpb24gcHVzaChjaHVua0xlbmd0aCkge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICBjb25zdCBzdGFydGVkQXQgPSB0aW1lc3RhbXBzW3RhaWxdO1xuXG4gICAgaWYgKCFmaXJzdFNhbXBsZVRTKSB7XG4gICAgICBmaXJzdFNhbXBsZVRTID0gbm93O1xuICAgIH1cblxuICAgIGJ5dGVzW2hlYWRdID0gY2h1bmtMZW5ndGg7XG4gICAgdGltZXN0YW1wc1toZWFkXSA9IG5vdztcblxuICAgIGxldCBpID0gdGFpbDtcbiAgICBsZXQgYnl0ZXNDb3VudCA9IDA7XG5cbiAgICB3aGlsZSAoaSAhPT0gaGVhZCkge1xuICAgICAgYnl0ZXNDb3VudCArPSBieXRlc1tpKytdO1xuICAgICAgaSA9IGkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaGVhZCA9IChoZWFkICsgMSkgJSBzYW1wbGVzQ291bnQ7XG5cbiAgICBpZiAoaGVhZCA9PT0gdGFpbCkge1xuICAgICAgdGFpbCA9ICh0YWlsICsgMSkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaWYgKG5vdyAtIGZpcnN0U2FtcGxlVFMgPCBtaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXNzZWQgPSBzdGFydGVkQXQgJiYgbm93IC0gc3RhcnRlZEF0O1xuXG4gICAgcmV0dXJuIHBhc3NlZCA/IE1hdGgucm91bmQoYnl0ZXNDb3VudCAqIDEwMDAgLyBwYXNzZWQpIDogdW5kZWZpbmVkO1xuICB9O1xufVxuXG4vKipcbiAqIFRocm90dGxlIGRlY29yYXRvclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7TnVtYmVyfSBmcmVxXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gdGhyb3R0bGUoZm4sIGZyZXEpIHtcbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGNvbnN0IHRocmVzaG9sZCA9IDEwMDAgLyBmcmVxO1xuICBsZXQgdGltZXIgPSBudWxsO1xuICByZXR1cm4gZnVuY3Rpb24gdGhyb3R0bGVkKCkge1xuICAgIGNvbnN0IGZvcmNlID0gdGhpcyA9PT0gdHJ1ZTtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgaWYgKGZvcmNlIHx8IG5vdyAtIHRpbWVzdGFtcCA+IHRocmVzaG9sZCkge1xuICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRpbWVzdGFtcCA9IG5vdztcbiAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgICBpZiAoIXRpbWVyKSB7XG4gICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgIHRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfSwgdGhyZXNob2xkIC0gKG5vdyAtIHRpbWVzdGFtcCkpO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIHByb2dyZXNzRXZlbnRSZWR1Y2VyID0gKGxpc3RlbmVyLCBpc0Rvd25sb2FkU3RyZWFtLCBmcmVxID0gMykgPT4ge1xuICBsZXQgYnl0ZXNOb3RpZmllZCA9IDA7XG4gIGNvbnN0IF9zcGVlZG9tZXRlciA9IHNwZWVkb21ldGVyKDUwLCAyNTApO1xuXG4gIHJldHVybiB0aHJvdHRsZShlID0+IHtcbiAgICBjb25zdCBsb2FkZWQgPSBlLmxvYWRlZDtcbiAgICBjb25zdCB0b3RhbCA9IGUubGVuZ3RoQ29tcHV0YWJsZSA/IGUudG90YWwgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJvZ3Jlc3NCeXRlcyA9IGxvYWRlZCAtIGJ5dGVzTm90aWZpZWQ7XG4gICAgY29uc3QgcmF0ZSA9IF9zcGVlZG9tZXRlcihwcm9ncmVzc0J5dGVzKTtcbiAgICBjb25zdCBpblJhbmdlID0gbG9hZGVkIDw9IHRvdGFsO1xuXG4gICAgYnl0ZXNOb3RpZmllZCA9IGxvYWRlZDtcblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBsb2FkZWQsXG4gICAgICB0b3RhbCxcbiAgICAgIHByb2dyZXNzOiB0b3RhbCA/IChsb2FkZWQgLyB0b3RhbCkgOiB1bmRlZmluZWQsXG4gICAgICBieXRlczogcHJvZ3Jlc3NCeXRlcyxcbiAgICAgIHJhdGU6IHJhdGUgPyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXN0aW1hdGVkOiByYXRlICYmIHRvdGFsICYmIGluUmFuZ2UgPyAodG90YWwgLSBsb2FkZWQpIC8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGV2ZW50OiBlLFxuICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdG90YWwgIT0gbnVsbFxuICAgIH07XG5cbiAgICBkYXRhW2lzRG93bmxvYWRTdHJlYW0gPyAnZG93bmxvYWQnIDogJ3VwbG9hZCddID0gdHJ1ZTtcblxuICAgIGxpc3RlbmVyKGRhdGEpO1xuICB9LCBmcmVxKTtcbn07XG5cbnZhciBpc1VSTFNhbWVPcmlnaW4gPSBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4vLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3Rcbi8vIHdoZXRoZXIgdGhlIHJlcXVlc3QgVVJMIGlzIG9mIHRoZSBzYW1lIG9yaWdpbiBhcyBjdXJyZW50IGxvY2F0aW9uLlxuICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIGNvbnN0IG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIGNvbnN0IHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGxldCBvcmlnaW5VUkw7XG5cbiAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0cyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICBsZXQgaHJlZiA9IHVybDtcblxuICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICB9XG5cbiAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICByZXR1cm4ge1xuICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gKHV0aWxzJDEuaXNTdHJpbmcocmVxdWVzdFVSTCkpID8gcmVzb2x2ZVVSTChyZXF1ZXN0VVJMKSA6IHJlcXVlc3RVUkw7XG4gICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICB9O1xuICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9KSgpO1xuXG52YXIgY29va2llcyA9IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gIHtcbiAgICB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgIGNvbnN0IGNvb2tpZSA9IFtuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKV07XG5cbiAgICAgIHV0aWxzJDEuaXNOdW1iZXIoZXhwaXJlcykgJiYgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuXG4gICAgICB1dGlscyQxLmlzU3RyaW5nKHBhdGgpICYmIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcblxuICAgICAgdXRpbHMkMS5pc1N0cmluZyhkb21haW4pICYmIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG5cbiAgICAgIHNlY3VyZSA9PT0gdHJ1ZSAmJiBjb29raWUucHVzaCgnc2VjdXJlJyk7XG5cbiAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgIH0sXG5cbiAgICByZWFkKG5hbWUpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgfSxcblxuICAgIHJlbW92ZShuYW1lKSB7XG4gICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgIH1cbiAgfVxuXG4gIDpcblxuICAvLyBOb24tc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIHtcbiAgICB3cml0ZSgpIHt9LFxuICAgIHJlYWQoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHJlbW92ZSgpIHt9XG4gIH07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xuZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLz9cXC8kLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5mdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCkge1xuICBpZiAoYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RlZFVSTDtcbn1cblxuY29uc3QgaGVhZGVyc1RvT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyBpbnN0YW5jZW9mIEF4aW9zSGVhZGVycyQxID8geyAuLi50aGluZyB9IDogdGhpbmc7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xuZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIGNvbnN0IGNvbmZpZyA9IHt9O1xuXG4gIGZ1bmN0aW9uIGdldE1lcmdlZFZhbHVlKHRhcmdldCwgc291cmNlLCBjYXNlbGVzcykge1xuICAgIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiB1dGlscyQxLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzJDEubWVyZ2UuY2FsbCh7Y2FzZWxlc3N9LCB0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzJDEubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscyQxLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMoYSwgYiwgY2FzZWxlc3MpIHtcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiLCBjYXNlbGVzcyk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSwgY2FzZWxlc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURpcmVjdEtleXMoYSwgYiwgcHJvcCkge1xuICAgIGlmIChwcm9wIGluIGNvbmZpZzIpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVyZ2VNYXAgPSB7XG4gICAgdXJsOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIG1ldGhvZDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBkYXRhOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGJhc2VVUkw6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVxdWVzdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXNwb25zZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBwYXJhbXNTZXJpYWxpemVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dE1lc3NhZ2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aENyZWRlbnRpYWxzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhYU1JGVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYWRhcHRlcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZVR5cGU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkNvb2tpZU5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkhlYWRlck5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25VcGxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgZGVjb21wcmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhDb250ZW50TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heEJvZHlMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYmVmb3JlUmVkaXJlY3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNwb3J0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwc0FnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGNhbmNlbFRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHNvY2tldFBhdGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VFbmNvZGluZzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB2YWxpZGF0ZVN0YXR1czogbWVyZ2VEaXJlY3RLZXlzLFxuICAgIGhlYWRlcnM6IChhLCBiKSA9PiBtZXJnZURlZXBQcm9wZXJ0aWVzKGhlYWRlcnNUb09iamVjdChhKSwgaGVhZGVyc1RvT2JqZWN0KGIpLCB0cnVlKVxuICB9O1xuXG4gIHV0aWxzJDEuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCBjb25maWcxLCBjb25maWcyKSksIGZ1bmN0aW9uIGNvbXB1dGVDb25maWdWYWx1ZShwcm9wKSB7XG4gICAgY29uc3QgbWVyZ2UgPSBtZXJnZU1hcFtwcm9wXSB8fCBtZXJnZURlZXBQcm9wZXJ0aWVzO1xuICAgIGNvbnN0IGNvbmZpZ1ZhbHVlID0gbWVyZ2UoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSwgcHJvcCk7XG4gICAgKHV0aWxzJDEuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59XG5cbnZhciByZXNvbHZlQ29uZmlnID0gKGNvbmZpZykgPT4ge1xuICBjb25zdCBuZXdDb25maWcgPSBtZXJnZUNvbmZpZyh7fSwgY29uZmlnKTtcblxuICBsZXQge2RhdGEsIHdpdGhYU1JGVG9rZW4sIHhzcmZIZWFkZXJOYW1lLCB4c3JmQ29va2llTmFtZSwgaGVhZGVycywgYXV0aH0gPSBuZXdDb25maWc7XG5cbiAgbmV3Q29uZmlnLmhlYWRlcnMgPSBoZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShoZWFkZXJzKTtcblxuICBuZXdDb25maWcudXJsID0gYnVpbGRVUkwoYnVpbGRGdWxsUGF0aChuZXdDb25maWcuYmFzZVVSTCwgbmV3Q29uZmlnLnVybCksIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcblxuICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gIGlmIChhdXRoKSB7XG4gICAgaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmFzaWMgJyArXG4gICAgICBidG9hKChhdXRoLnVzZXJuYW1lIHx8ICcnKSArICc6JyArIChhdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgucGFzc3dvcmQpKSA6ICcnKSlcbiAgICApO1xuICB9XG5cbiAgbGV0IGNvbnRlbnRUeXBlO1xuXG4gIGlmICh1dGlscyQxLmlzRm9ybURhdGEoZGF0YSkpIHtcbiAgICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52IHx8IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudikge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSh1bmRlZmluZWQpOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfSBlbHNlIGlmICgoY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkpICE9PSBmYWxzZSkge1xuICAgICAgLy8gZml4IHNlbWljb2xvbiBkdXBsaWNhdGlvbiBpc3N1ZSBmb3IgUmVhY3ROYXRpdmUgRm9ybURhdGEgaW1wbGVtZW50YXRpb25cbiAgICAgIGNvbnN0IFt0eXBlLCAuLi50b2tlbnNdID0gY29udGVudFR5cGUgPyBjb250ZW50VHlwZS5zcGxpdCgnOycpLm1hcCh0b2tlbiA9PiB0b2tlbi50cmltKCkpLmZpbHRlcihCb29sZWFuKSA6IFtdO1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZShbdHlwZSB8fCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsIC4uLnRva2Vuc10uam9pbignOyAnKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAvLyBTcGVjaWZpY2FsbHkgbm90IGlmIHdlJ3JlIGluIGEgd2ViIHdvcmtlciwgb3IgcmVhY3QtbmF0aXZlLlxuXG4gIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYpIHtcbiAgICB3aXRoWFNSRlRva2VuICYmIHV0aWxzJDEuaXNGdW5jdGlvbih3aXRoWFNSRlRva2VuKSAmJiAod2l0aFhTUkZUb2tlbiA9IHdpdGhYU1JGVG9rZW4obmV3Q29uZmlnKSk7XG5cbiAgICBpZiAod2l0aFhTUkZUb2tlbiB8fCAod2l0aFhTUkZUb2tlbiAhPT0gZmFsc2UgJiYgaXNVUkxTYW1lT3JpZ2luKG5ld0NvbmZpZy51cmwpKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICBjb25zdCB4c3JmVmFsdWUgPSB4c3JmSGVhZGVyTmFtZSAmJiB4c3JmQ29va2llTmFtZSAmJiBjb29raWVzLnJlYWQoeHNyZkNvb2tpZU5hbWUpO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIGhlYWRlcnMuc2V0KHhzcmZIZWFkZXJOYW1lLCB4c3JmVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdDb25maWc7XG59O1xuXG5jb25zdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnO1xuXG52YXIgeGhyQWRhcHRlciA9IGlzWEhSQWRhcHRlclN1cHBvcnRlZCAmJiBmdW5jdGlvbiAoY29uZmlnKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBkaXNwYXRjaFhoclJlcXVlc3QocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgY29uc3QgX2NvbmZpZyA9IHJlc29sdmVDb25maWcoY29uZmlnKTtcbiAgICBsZXQgcmVxdWVzdERhdGEgPSBfY29uZmlnLmRhdGE7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKF9jb25maWcuaGVhZGVycykubm9ybWFsaXplKCk7XG4gICAgbGV0IHtyZXNwb25zZVR5cGV9ID0gX2NvbmZpZztcbiAgICBsZXQgb25DYW5jZWxlZDtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgaWYgKF9jb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgICAgX2NvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF9jb25maWcuc2lnbmFsKSB7XG4gICAgICAgIF9jb25maWcuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIHJlcXVlc3Qub3BlbihfY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBfY29uZmlnLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IF9jb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShcbiAgICAgICAgJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCAmJiByZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gIXJlc3BvbnNlVHlwZSB8fCByZXNwb25zZVR5cGUgPT09ICd0ZXh0JyB8fCByZXNwb25zZVR5cGUgPT09ICdqc29uJyA/XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShmdW5jdGlvbiBfcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgZnVuY3Rpb24gX3JlamVjdChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsIF9jb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBfY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIGxldCB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIF9jb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBfY29uZmlnLnRyYW5zaXRpb25hbCB8fCB0cmFuc2l0aW9uYWxEZWZhdWx0cztcbiAgICAgIGlmIChfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBfY29uZmlnLFxuICAgICAgICByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgcmVxdWVzdERhdGEgPT09IHVuZGVmaW5lZCAmJiByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShudWxsKTtcblxuICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICB1dGlscyQxLmZvckVhY2gocmVxdWVzdEhlYWRlcnMudG9KU09OKCksIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoX2NvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhX2NvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gX2NvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmICh0eXBlb2YgX2NvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBwcm9ncmVzc0V2ZW50UmVkdWNlcihfY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcywgdHJ1ZSkpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKHR5cGVvZiBfY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoX2NvbmZpZy5vblVwbG9hZFByb2dyZXNzKSk7XG4gICAgfVxuXG4gICAgaWYgKF9jb25maWcuY2FuY2VsVG9rZW4gfHwgX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBvbkNhbmNlbGVkID0gY2FuY2VsID0+IHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdCghY2FuY2VsIHx8IGNhbmNlbC50eXBlID8gbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnLCByZXF1ZXN0KSA6IGNhbmNlbCk7XG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICBfY29uZmlnLmNhbmNlbFRva2VuICYmIF9jb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKF9jb25maWcuc2lnbmFsKSB7XG4gICAgICAgIF9jb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBfY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHByb3RvY29sID0gcGFyc2VQcm90b2NvbChfY29uZmlnLnVybCk7XG5cbiAgICBpZiAocHJvdG9jb2wgJiYgcGxhdGZvcm0ucHJvdG9jb2xzLmluZGV4T2YocHJvdG9jb2wpID09PSAtMSkge1xuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wgKyAnOicsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBjb25maWcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEgfHwgbnVsbCk7XG4gIH0pO1xufTtcblxuY29uc3QgY29tcG9zZVNpZ25hbHMgPSAoc2lnbmFscywgdGltZW91dCkgPT4ge1xuICBsZXQgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICBsZXQgYWJvcnRlZDtcblxuICBjb25zdCBvbmFib3J0ID0gZnVuY3Rpb24gKGNhbmNlbCkge1xuICAgIGlmICghYWJvcnRlZCkge1xuICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICB1bnN1YnNjcmliZSgpO1xuICAgICAgY29uc3QgZXJyID0gY2FuY2VsIGluc3RhbmNlb2YgRXJyb3IgPyBjYW5jZWwgOiB0aGlzLnJlYXNvbjtcbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQoZXJyIGluc3RhbmNlb2YgQXhpb3NFcnJvciA/IGVyciA6IG5ldyBDYW5jZWxlZEVycm9yKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBlcnIpKTtcbiAgICB9XG4gIH07XG5cbiAgbGV0IHRpbWVyID0gdGltZW91dCAmJiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBvbmFib3J0KG5ldyBBeGlvc0Vycm9yKGB0aW1lb3V0ICR7dGltZW91dH0gb2YgbXMgZXhjZWVkZWRgLCBBeGlvc0Vycm9yLkVUSU1FRE9VVCkpO1xuICB9LCB0aW1lb3V0KTtcblxuICBjb25zdCB1bnN1YnNjcmliZSA9ICgpID0+IHtcbiAgICBpZiAoc2lnbmFscykge1xuICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgIHNpZ25hbHMuZm9yRWFjaChzaWduYWwgPT4ge1xuICAgICAgICBzaWduYWwgJiZcbiAgICAgICAgKHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyID8gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCkgOiBzaWduYWwudW5zdWJzY3JpYmUob25hYm9ydCkpO1xuICAgICAgfSk7XG4gICAgICBzaWduYWxzID0gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgc2lnbmFscy5mb3JFYWNoKChzaWduYWwpID0+IHNpZ25hbCAmJiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KSk7XG5cbiAgY29uc3Qge3NpZ25hbH0gPSBjb250cm9sbGVyO1xuXG4gIHNpZ25hbC51bnN1YnNjcmliZSA9IHVuc3Vic2NyaWJlO1xuXG4gIHJldHVybiBbc2lnbmFsLCAoKSA9PiB7XG4gICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICB0aW1lciA9IG51bGw7XG4gIH1dO1xufTtcblxudmFyIGNvbXBvc2VTaWduYWxzJDEgPSBjb21wb3NlU2lnbmFscztcblxuY29uc3Qgc3RyZWFtQ2h1bmsgPSBmdW5jdGlvbiogKGNodW5rLCBjaHVua1NpemUpIHtcbiAgbGV0IGxlbiA9IGNodW5rLmJ5dGVMZW5ndGg7XG5cbiAgaWYgKCFjaHVua1NpemUgfHwgbGVuIDwgY2h1bmtTaXplKSB7XG4gICAgeWllbGQgY2h1bms7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHBvcyA9IDA7XG4gIGxldCBlbmQ7XG5cbiAgd2hpbGUgKHBvcyA8IGxlbikge1xuICAgIGVuZCA9IHBvcyArIGNodW5rU2l6ZTtcbiAgICB5aWVsZCBjaHVuay5zbGljZShwb3MsIGVuZCk7XG4gICAgcG9zID0gZW5kO1xuICB9XG59O1xuXG5jb25zdCByZWFkQnl0ZXMgPSBhc3luYyBmdW5jdGlvbiogKGl0ZXJhYmxlLCBjaHVua1NpemUsIGVuY29kZSkge1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGl0ZXJhYmxlKSB7XG4gICAgeWllbGQqIHN0cmVhbUNodW5rKEFycmF5QnVmZmVyLmlzVmlldyhjaHVuaykgPyBjaHVuayA6IChhd2FpdCBlbmNvZGUoU3RyaW5nKGNodW5rKSkpLCBjaHVua1NpemUpO1xuICB9XG59O1xuXG5jb25zdCB0cmFja1N0cmVhbSA9IChzdHJlYW0sIGNodW5rU2l6ZSwgb25Qcm9ncmVzcywgb25GaW5pc2gsIGVuY29kZSkgPT4ge1xuICBjb25zdCBpdGVyYXRvciA9IHJlYWRCeXRlcyhzdHJlYW0sIGNodW5rU2l6ZSwgZW5jb2RlKTtcblxuICBsZXQgYnl0ZXMgPSAwO1xuXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgIHR5cGU6ICdieXRlcycsXG5cbiAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgIGNvbnN0IHtkb25lLCB2YWx1ZX0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgb25GaW5pc2goKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgbGVuID0gdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICAgIG9uUHJvZ3Jlc3MgJiYgb25Qcm9ncmVzcyhieXRlcyArPSBsZW4pO1xuICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSk7XG4gICAgfSxcbiAgICBjYW5jZWwocmVhc29uKSB7XG4gICAgICBvbkZpbmlzaChyZWFzb24pO1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yLnJldHVybigpO1xuICAgIH1cbiAgfSwge1xuICAgIGhpZ2hXYXRlck1hcms6IDJcbiAgfSlcbn07XG5cbmNvbnN0IGZldGNoUHJvZ3Jlc3NEZWNvcmF0b3IgPSAodG90YWwsIGZuKSA9PiB7XG4gIGNvbnN0IGxlbmd0aENvbXB1dGFibGUgPSB0b3RhbCAhPSBudWxsO1xuICByZXR1cm4gKGxvYWRlZCkgPT4gc2V0VGltZW91dCgoKSA9PiBmbih7XG4gICAgbGVuZ3RoQ29tcHV0YWJsZSxcbiAgICB0b3RhbCxcbiAgICBsb2FkZWRcbiAgfSkpO1xufTtcblxuY29uc3QgaXNGZXRjaFN1cHBvcnRlZCA9IHR5cGVvZiBmZXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgUmVxdWVzdCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgUmVzcG9uc2UgPT09ICdmdW5jdGlvbic7XG5jb25zdCBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkID0gaXNGZXRjaFN1cHBvcnRlZCAmJiB0eXBlb2YgUmVhZGFibGVTdHJlYW0gPT09ICdmdW5jdGlvbic7XG5cbi8vIHVzZWQgb25seSBpbnNpZGUgdGhlIGZldGNoIGFkYXB0ZXJcbmNvbnN0IGVuY29kZVRleHQgPSBpc0ZldGNoU3VwcG9ydGVkICYmICh0eXBlb2YgVGV4dEVuY29kZXIgPT09ICdmdW5jdGlvbicgP1xuICAgICgoZW5jb2RlcikgPT4gKHN0cikgPT4gZW5jb2Rlci5lbmNvZGUoc3RyKSkobmV3IFRleHRFbmNvZGVyKCkpIDpcbiAgICBhc3luYyAoc3RyKSA9PiBuZXcgVWludDhBcnJheShhd2FpdCBuZXcgUmVzcG9uc2Uoc3RyKS5hcnJheUJ1ZmZlcigpKVxuKTtcblxuY29uc3Qgc3VwcG9ydHNSZXF1ZXN0U3RyZWFtID0gaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCAmJiAoKCkgPT4ge1xuICBsZXQgZHVwbGV4QWNjZXNzZWQgPSBmYWxzZTtcblxuICBjb25zdCBoYXNDb250ZW50VHlwZSA9IG5ldyBSZXF1ZXN0KHBsYXRmb3JtLm9yaWdpbiwge1xuICAgIGJvZHk6IG5ldyBSZWFkYWJsZVN0cmVhbSgpLFxuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGdldCBkdXBsZXgoKSB7XG4gICAgICBkdXBsZXhBY2Nlc3NlZCA9IHRydWU7XG4gICAgICByZXR1cm4gJ2hhbGYnO1xuICAgIH0sXG4gIH0pLmhlYWRlcnMuaGFzKCdDb250ZW50LVR5cGUnKTtcblxuICByZXR1cm4gZHVwbGV4QWNjZXNzZWQgJiYgIWhhc0NvbnRlbnRUeXBlO1xufSkoKTtcblxuY29uc3QgREVGQVVMVF9DSFVOS19TSVpFID0gNjQgKiAxMDI0O1xuXG5jb25zdCBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtID0gaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCAmJiAhISgoKT0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdXRpbHMkMS5pc1JlYWRhYmxlU3RyZWFtKG5ldyBSZXNwb25zZSgnJykuYm9keSk7XG4gIH0gY2F0Y2goZXJyKSB7XG4gICAgLy8gcmV0dXJuIHVuZGVmaW5lZFxuICB9XG59KSgpO1xuXG5jb25zdCByZXNvbHZlcnMgPSB7XG4gIHN0cmVhbTogc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAoKHJlcykgPT4gcmVzLmJvZHkpXG59O1xuXG5pc0ZldGNoU3VwcG9ydGVkICYmICgoKHJlcykgPT4ge1xuICBbJ3RleHQnLCAnYXJyYXlCdWZmZXInLCAnYmxvYicsICdmb3JtRGF0YScsICdzdHJlYW0nXS5mb3JFYWNoKHR5cGUgPT4ge1xuICAgICFyZXNvbHZlcnNbdHlwZV0gJiYgKHJlc29sdmVyc1t0eXBlXSA9IHV0aWxzJDEuaXNGdW5jdGlvbihyZXNbdHlwZV0pID8gKHJlcykgPT4gcmVzW3R5cGVdKCkgOlxuICAgICAgKF8sIGNvbmZpZykgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgUmVzcG9uc2UgdHlwZSAnJHt0eXBlfScgaXMgbm90IHN1cHBvcnRlZGAsIEF4aW9zRXJyb3IuRVJSX05PVF9TVVBQT1JULCBjb25maWcpO1xuICAgICAgfSk7XG4gIH0pO1xufSkobmV3IFJlc3BvbnNlKSk7XG5cbmNvbnN0IGdldEJvZHlMZW5ndGggPSBhc3luYyAoYm9keSkgPT4ge1xuICBpZiAoYm9keSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZih1dGlscyQxLmlzQmxvYihib2R5KSkge1xuICAgIHJldHVybiBib2R5LnNpemU7XG4gIH1cblxuICBpZih1dGlscyQxLmlzU3BlY0NvbXBsaWFudEZvcm0oYm9keSkpIHtcbiAgICByZXR1cm4gKGF3YWl0IG5ldyBSZXF1ZXN0KGJvZHkpLmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg7XG4gIH1cblxuICBpZih1dGlscyQxLmlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuYnl0ZUxlbmd0aDtcbiAgfVxuXG4gIGlmKHV0aWxzJDEuaXNVUkxTZWFyY2hQYXJhbXMoYm9keSkpIHtcbiAgICBib2R5ID0gYm9keSArICcnO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc1N0cmluZyhib2R5KSkge1xuICAgIHJldHVybiAoYXdhaXQgZW5jb2RlVGV4dChib2R5KSkuYnl0ZUxlbmd0aDtcbiAgfVxufTtcblxuY29uc3QgcmVzb2x2ZUJvZHlMZW5ndGggPSBhc3luYyAoaGVhZGVycywgYm9keSkgPT4ge1xuICBjb25zdCBsZW5ndGggPSB1dGlscyQxLnRvRmluaXRlTnVtYmVyKGhlYWRlcnMuZ2V0Q29udGVudExlbmd0aCgpKTtcblxuICByZXR1cm4gbGVuZ3RoID09IG51bGwgPyBnZXRCb2R5TGVuZ3RoKGJvZHkpIDogbGVuZ3RoO1xufTtcblxudmFyIGZldGNoQWRhcHRlciA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKGFzeW5jIChjb25maWcpID0+IHtcbiAgbGV0IHtcbiAgICB1cmwsXG4gICAgbWV0aG9kLFxuICAgIGRhdGEsXG4gICAgc2lnbmFsLFxuICAgIGNhbmNlbFRva2VuLFxuICAgIHRpbWVvdXQsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3MsXG4gICAgcmVzcG9uc2VUeXBlLFxuICAgIGhlYWRlcnMsXG4gICAgd2l0aENyZWRlbnRpYWxzID0gJ3NhbWUtb3JpZ2luJyxcbiAgICBmZXRjaE9wdGlvbnNcbiAgfSA9IHJlc29sdmVDb25maWcoY29uZmlnKTtcblxuICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgPyAocmVzcG9uc2VUeXBlICsgJycpLnRvTG93ZXJDYXNlKCkgOiAndGV4dCc7XG5cbiAgbGV0IFtjb21wb3NlZFNpZ25hbCwgc3RvcFRpbWVvdXRdID0gKHNpZ25hbCB8fCBjYW5jZWxUb2tlbiB8fCB0aW1lb3V0KSA/XG4gICAgY29tcG9zZVNpZ25hbHMkMShbc2lnbmFsLCBjYW5jZWxUb2tlbl0sIHRpbWVvdXQpIDogW107XG5cbiAgbGV0IGZpbmlzaGVkLCByZXF1ZXN0O1xuXG4gIGNvbnN0IG9uRmluaXNoID0gKCkgPT4ge1xuICAgICFmaW5pc2hlZCAmJiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbXBvc2VkU2lnbmFsICYmIGNvbXBvc2VkU2lnbmFsLnVuc3Vic2NyaWJlKCk7XG4gICAgfSk7XG5cbiAgICBmaW5pc2hlZCA9IHRydWU7XG4gIH07XG5cbiAgbGV0IHJlcXVlc3RDb250ZW50TGVuZ3RoO1xuXG4gIHRyeSB7XG4gICAgaWYgKFxuICAgICAgb25VcGxvYWRQcm9ncmVzcyAmJiBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gJiYgbWV0aG9kICE9PSAnZ2V0JyAmJiBtZXRob2QgIT09ICdoZWFkJyAmJlxuICAgICAgKHJlcXVlc3RDb250ZW50TGVuZ3RoID0gYXdhaXQgcmVzb2x2ZUJvZHlMZW5ndGgoaGVhZGVycywgZGF0YSkpICE9PSAwXG4gICAgKSB7XG4gICAgICBsZXQgX3JlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAgIGR1cGxleDogXCJoYWxmXCJcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgY29udGVudFR5cGVIZWFkZXI7XG5cbiAgICAgIGlmICh1dGlscyQxLmlzRm9ybURhdGEoZGF0YSkgJiYgKGNvbnRlbnRUeXBlSGVhZGVyID0gX3JlcXVlc3QuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSkge1xuICAgICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlSGVhZGVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF9yZXF1ZXN0LmJvZHkpIHtcbiAgICAgICAgZGF0YSA9IHRyYWNrU3RyZWFtKF9yZXF1ZXN0LmJvZHksIERFRkFVTFRfQ0hVTktfU0laRSwgZmV0Y2hQcm9ncmVzc0RlY29yYXRvcihcbiAgICAgICAgICByZXF1ZXN0Q29udGVudExlbmd0aCxcbiAgICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihvblVwbG9hZFByb2dyZXNzKVxuICAgICAgICApLCBudWxsLCBlbmNvZGVUZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXV0aWxzJDEuaXNTdHJpbmcod2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgd2l0aENyZWRlbnRpYWxzID0gd2l0aENyZWRlbnRpYWxzID8gJ2NvcnMnIDogJ29taXQnO1xuICAgIH1cblxuICAgIHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgIC4uLmZldGNoT3B0aW9ucyxcbiAgICAgIHNpZ25hbDogY29tcG9zZWRTaWduYWwsXG4gICAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgaGVhZGVyczogaGVhZGVycy5ub3JtYWxpemUoKS50b0pTT04oKSxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgICBkdXBsZXg6IFwiaGFsZlwiLFxuICAgICAgd2l0aENyZWRlbnRpYWxzXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChyZXF1ZXN0KTtcblxuICAgIGNvbnN0IGlzU3RyZWFtUmVzcG9uc2UgPSBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChyZXNwb25zZVR5cGUgPT09ICdzdHJlYW0nIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3Jlc3BvbnNlJyk7XG5cbiAgICBpZiAoc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAob25Eb3dubG9hZFByb2dyZXNzIHx8IGlzU3RyZWFtUmVzcG9uc2UpKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0ge307XG5cbiAgICAgIFsnc3RhdHVzJywgJ3N0YXR1c1RleHQnLCAnaGVhZGVycyddLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgIG9wdGlvbnNbcHJvcF0gPSByZXNwb25zZVtwcm9wXTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXNwb25zZUNvbnRlbnRMZW5ndGggPSB1dGlscyQxLnRvRmluaXRlTnVtYmVyKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LWxlbmd0aCcpKTtcblxuICAgICAgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoXG4gICAgICAgIHRyYWNrU3RyZWFtKHJlc3BvbnNlLmJvZHksIERFRkFVTFRfQ0hVTktfU0laRSwgb25Eb3dubG9hZFByb2dyZXNzICYmIGZldGNoUHJvZ3Jlc3NEZWNvcmF0b3IoXG4gICAgICAgICAgcmVzcG9uc2VDb250ZW50TGVuZ3RoLFxuICAgICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uRG93bmxvYWRQcm9ncmVzcywgdHJ1ZSlcbiAgICAgICAgKSwgaXNTdHJlYW1SZXNwb25zZSAmJiBvbkZpbmlzaCwgZW5jb2RlVGV4dCksXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlIHx8ICd0ZXh0JztcblxuICAgIGxldCByZXNwb25zZURhdGEgPSBhd2FpdCByZXNvbHZlcnNbdXRpbHMkMS5maW5kS2V5KHJlc29sdmVycywgcmVzcG9uc2VUeXBlKSB8fCAndGV4dCddKHJlc3BvbnNlLCBjb25maWcpO1xuXG4gICAgIWlzU3RyZWFtUmVzcG9uc2UgJiYgb25GaW5pc2goKTtcblxuICAgIHN0b3BUaW1lb3V0ICYmIHN0b3BUaW1lb3V0KCk7XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIGhlYWRlcnM6IEF4aW9zSGVhZGVycyQxLmZyb20ocmVzcG9uc2UuaGVhZGVycyksXG4gICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3RcbiAgICAgIH0pO1xuICAgIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIG9uRmluaXNoKCk7XG5cbiAgICBpZiAoZXJyICYmIGVyci5uYW1lID09PSAnVHlwZUVycm9yJyAmJiAvZmV0Y2gvaS50ZXN0KGVyci5tZXNzYWdlKSkge1xuICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgbmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpLFxuICAgICAgICB7XG4gICAgICAgICAgY2F1c2U6IGVyci5jYXVzZSB8fCBlcnJcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cblxuICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlcnIsIGVyciAmJiBlcnIuY29kZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgfVxufSk7XG5cbmNvbnN0IGtub3duQWRhcHRlcnMgPSB7XG4gIGh0dHA6IGh0dHBBZGFwdGVyLFxuICB4aHI6IHhockFkYXB0ZXIsXG4gIGZldGNoOiBmZXRjaEFkYXB0ZXJcbn07XG5cbnV0aWxzJDEuZm9yRWFjaChrbm93bkFkYXB0ZXJzLCAoZm4sIHZhbHVlKSA9PiB7XG4gIGlmIChmbikge1xuICAgIHRyeSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICduYW1lJywge3ZhbHVlfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ2FkYXB0ZXJOYW1lJywge3ZhbHVlfSk7XG4gIH1cbn0pO1xuXG5jb25zdCByZW5kZXJSZWFzb24gPSAocmVhc29uKSA9PiBgLSAke3JlYXNvbn1gO1xuXG5jb25zdCBpc1Jlc29sdmVkSGFuZGxlID0gKGFkYXB0ZXIpID0+IHV0aWxzJDEuaXNGdW5jdGlvbihhZGFwdGVyKSB8fCBhZGFwdGVyID09PSBudWxsIHx8IGFkYXB0ZXIgPT09IGZhbHNlO1xuXG52YXIgYWRhcHRlcnMgPSB7XG4gIGdldEFkYXB0ZXI6IChhZGFwdGVycykgPT4ge1xuICAgIGFkYXB0ZXJzID0gdXRpbHMkMS5pc0FycmF5KGFkYXB0ZXJzKSA/IGFkYXB0ZXJzIDogW2FkYXB0ZXJzXTtcblxuICAgIGNvbnN0IHtsZW5ndGh9ID0gYWRhcHRlcnM7XG4gICAgbGV0IG5hbWVPckFkYXB0ZXI7XG4gICAgbGV0IGFkYXB0ZXI7XG5cbiAgICBjb25zdCByZWplY3RlZFJlYXNvbnMgPSB7fTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIG5hbWVPckFkYXB0ZXIgPSBhZGFwdGVyc1tpXTtcbiAgICAgIGxldCBpZDtcblxuICAgICAgYWRhcHRlciA9IG5hbWVPckFkYXB0ZXI7XG5cbiAgICAgIGlmICghaXNSZXNvbHZlZEhhbmRsZShuYW1lT3JBZGFwdGVyKSkge1xuICAgICAgICBhZGFwdGVyID0ga25vd25BZGFwdGVyc1soaWQgPSBTdHJpbmcobmFtZU9yQWRhcHRlcikpLnRvTG93ZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChhZGFwdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgVW5rbm93biBhZGFwdGVyICcke2lkfSdgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYWRhcHRlcikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmVqZWN0ZWRSZWFzb25zW2lkIHx8ICcjJyArIGldID0gYWRhcHRlcjtcbiAgICB9XG5cbiAgICBpZiAoIWFkYXB0ZXIpIHtcblxuICAgICAgY29uc3QgcmVhc29ucyA9IE9iamVjdC5lbnRyaWVzKHJlamVjdGVkUmVhc29ucylcbiAgICAgICAgLm1hcCgoW2lkLCBzdGF0ZV0pID0+IGBhZGFwdGVyICR7aWR9IGAgK1xuICAgICAgICAgIChzdGF0ZSA9PT0gZmFsc2UgPyAnaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQnIDogJ2lzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkJylcbiAgICAgICAgKTtcblxuICAgICAgbGV0IHMgPSBsZW5ndGggP1xuICAgICAgICAocmVhc29ucy5sZW5ndGggPiAxID8gJ3NpbmNlIDpcXG4nICsgcmVhc29ucy5tYXAocmVuZGVyUmVhc29uKS5qb2luKCdcXG4nKSA6ICcgJyArIHJlbmRlclJlYXNvbihyZWFzb25zWzBdKSkgOlxuICAgICAgICAnYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQnO1xuXG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgYFRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgYCArIHMsXG4gICAgICAgICdFUlJfTk9UX1NVUFBPUlQnXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBhZGFwdGVyO1xuICB9LFxuICBhZGFwdGVyczoga25vd25BZGFwdGVyc1xufTtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxuXG4gIGlmIChjb25maWcuc2lnbmFsICYmIGNvbmZpZy5zaWduYWwuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5mdW5jdGlvbiBkaXNwYXRjaFJlcXVlc3QoY29uZmlnKSB7XG4gIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oY29uZmlnLmhlYWRlcnMpO1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgaWYgKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmRleE9mKGNvbmZpZy5tZXRob2QpICE9PSAtMSkge1xuICAgIGNvbmZpZy5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLCBmYWxzZSk7XG4gIH1cblxuICBjb25zdCBhZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcihjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cyQxLmFkYXB0ZXIpO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgY29uZmlnLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20ocmVzcG9uc2UuaGVhZGVycyk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0sIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlXG4gICAgICAgICk7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShyZWFzb24ucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufVxuXG5jb25zdCBWRVJTSU9OID0gXCIxLjcuMlwiO1xuXG5jb25zdCB2YWxpZGF0b3JzJDEgPSB7fTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblsnb2JqZWN0JywgJ2Jvb2xlYW4nLCAnbnVtYmVyJywgJ2Z1bmN0aW9uJywgJ3N0cmluZycsICdzeW1ib2wnXS5mb3JFYWNoKCh0eXBlLCBpKSA9PiB7XG4gIHZhbGlkYXRvcnMkMVt0eXBlXSA9IGZ1bmN0aW9uIHZhbGlkYXRvcih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09IHR5cGUgfHwgJ2EnICsgKGkgPCAxID8gJ24gJyA6ICcgJykgKyB0eXBlO1xuICB9O1xufSk7XG5cbmNvbnN0IGRlcHJlY2F0ZWRXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIFRyYW5zaXRpb25hbCBvcHRpb24gdmFsaWRhdG9yXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yIC0gc2V0IHRvIGZhbHNlIGlmIHRoZSB0cmFuc2l0aW9uYWwgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nP30gdmVyc2lvbiAtIGRlcHJlY2F0ZWQgdmVyc2lvbiAvIHJlbW92ZWQgc2luY2UgdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSBtZXNzYWdlIC0gc29tZSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvXG4gKlxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG52YWxpZGF0b3JzJDEudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgVkVSU0lPTiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXFwnJyArIG9wdCArICdcXCcnICsgZGVzYyArIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gKHZhbHVlLCBvcHQsIG9wdHMpID0+IHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWFcbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGFsbG93VW5rbm93blxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnLCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgfVxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgY29uc3Qgb3B0ID0ga2V5c1tpXTtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSBzY2hlbWFbb3B0XTtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnNbb3B0XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9uICcgKyBvcHQgKyAnIG11c3QgYmUgJyArIHJlc3VsdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGFsbG93VW5rbm93biAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ1Vua25vd24gb3B0aW9uICcgKyBvcHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT04pO1xuICAgIH1cbiAgfVxufVxuXG52YXIgdmFsaWRhdG9yID0ge1xuICBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzOiB2YWxpZGF0b3JzJDFcbn07XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuY2xhc3MgQXhpb3Mge1xuICBjb25zdHJ1Y3RvcihpbnN0YW5jZUNvbmZpZykge1xuICAgIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIkMSgpLFxuICAgICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIkMSgpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBjb25maWdPclVybCBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gICAqIEBwYXJhbSB7P09iamVjdH0gY29uZmlnXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAgICovXG4gIGFzeW5jIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBsZXQgZHVtbXk7XG5cbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShkdW1teSA9IHt9KSA6IChkdW1teSA9IG5ldyBFcnJvcigpKTtcblxuICAgICAgICAvLyBzbGljZSBvZmYgdGhlIEVycm9yOiAuLi4gbGluZVxuICAgICAgICBjb25zdCBzdGFjayA9IGR1bW15LnN0YWNrID8gZHVtbXkuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywgJycpIDogJyc7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCFlcnIuc3RhY2spIHtcbiAgICAgICAgICAgIGVyci5zdGFjayA9IHN0YWNrO1xuICAgICAgICAgICAgLy8gbWF0Y2ggd2l0aG91dCB0aGUgMiB0b3Agc3RhY2sgbGluZXNcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YWNrICYmICFTdHJpbmcoZXJyLnN0YWNrKS5lbmRzV2l0aChzdGFjay5yZXBsYWNlKC9eLitcXG4uK1xcbi8sICcnKSkpIHtcbiAgICAgICAgICAgIGVyci5zdGFjayArPSAnXFxuJyArIHN0YWNrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGlnbm9yZSB0aGUgY2FzZSB3aGVyZSBcInN0YWNrXCIgaXMgYW4gdW4td3JpdGFibGUgcHJvcGVydHlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgICBpZiAodHlwZW9mIGNvbmZpZ09yVXJsID09PSAnc3RyaW5nJykge1xuICAgICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgICAgY29uZmlnLnVybCA9IGNvbmZpZ09yVXJsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcgPSBjb25maWdPclVybCB8fCB7fTtcbiAgICB9XG5cbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gICAgY29uc3Qge3RyYW5zaXRpb25hbCwgcGFyYW1zU2VyaWFsaXplciwgaGVhZGVyc30gPSBjb25maWc7XG5cbiAgICBpZiAodHJhbnNpdGlvbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgZm9yY2VkSlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbilcbiAgICAgIH0sIGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zU2VyaWFsaXplciAhPSBudWxsKSB7XG4gICAgICBpZiAodXRpbHMkMS5pc0Z1bmN0aW9uKHBhcmFtc1NlcmlhbGl6ZXIpKSB7XG4gICAgICAgIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyID0ge1xuICAgICAgICAgIHNlcmlhbGl6ZTogcGFyYW1zU2VyaWFsaXplclxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnMocGFyYW1zU2VyaWFsaXplciwge1xuICAgICAgICAgIGVuY29kZTogdmFsaWRhdG9ycy5mdW5jdGlvbixcbiAgICAgICAgICBzZXJpYWxpemU6IHZhbGlkYXRvcnMuZnVuY3Rpb25cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgICBjb25maWcubWV0aG9kID0gKGNvbmZpZy5tZXRob2QgfHwgdGhpcy5kZWZhdWx0cy5tZXRob2QgfHwgJ2dldCcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgICBsZXQgY29udGV4dEhlYWRlcnMgPSBoZWFkZXJzICYmIHV0aWxzJDEubWVyZ2UoXG4gICAgICBoZWFkZXJzLmNvbW1vbixcbiAgICAgIGhlYWRlcnNbY29uZmlnLm1ldGhvZF1cbiAgICApO1xuXG4gICAgaGVhZGVycyAmJiB1dGlscyQxLmZvckVhY2goXG4gICAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICAgIChtZXRob2QpID0+IHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbbWV0aG9kXTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5jb25jYXQoY29udGV4dEhlYWRlcnMsIGhlYWRlcnMpO1xuXG4gICAgLy8gZmlsdGVyIG91dCBza2lwcGVkIGludGVyY2VwdG9yc1xuICAgIGNvbnN0IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgbGV0IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHRydWU7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGxldCBwcm9taXNlO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgbGVuO1xuXG4gICAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdC5iaW5kKHRoaXMpLCB1bmRlZmluZWRdO1xuICAgICAgY2hhaW4udW5zaGlmdC5hcHBseShjaGFpbiwgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgY2hhaW4ucHVzaC5hcHBseShjaGFpbiwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGxlbiA9IGNoYWluLmxlbmd0aDtcblxuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gICAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluW2krK10sIGNoYWluW2krK10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG5cbiAgICBsZW4gPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICBsZXQgbmV3Q29uZmlnID0gY29uZmlnO1xuXG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgY29uc3Qgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgY29uc3Qgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICB0cnkge1xuICAgICAgICBuZXdDb25maWcgPSBvbkZ1bGZpbGxlZChuZXdDb25maWcpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgb25SZWplY3RlZC5jYWxsKHRoaXMsIGVycm9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QuY2FsbCh0aGlzLCBuZXdDb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cblxuICAgIGkgPSAwO1xuICAgIGxlbiA9IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgZ2V0VXJpKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgICByZXR1cm4gYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcbiAgfVxufVxuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzJDEuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgZGF0YTogKGNvbmZpZyB8fCB7fSkuZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscyQxLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGlzRm9ybSA/IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgICAgIH0gOiB7fSxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxudmFyIEF4aW9zJDEgPSBBeGlvcztcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsVG9rZW59XG4gKi9cbmNsYXNzIENhbmNlbFRva2VuIHtcbiAgY29uc3RydWN0b3IoZXhlY3V0b3IpIHtcbiAgICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVQcm9taXNlO1xuXG4gICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRva2VuID0gdGhpcztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4oY2FuY2VsID0+IHtcbiAgICAgIGlmICghdG9rZW4uX2xpc3RlbmVycykgcmV0dXJuO1xuXG4gICAgICBsZXQgaSA9IHRva2VuLl9saXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgICB0b2tlbi5fbGlzdGVuZXJzW2ldKGNhbmNlbCk7XG4gICAgICB9XG4gICAgICB0b2tlbi5fbGlzdGVuZXJzID0gbnVsbDtcbiAgICB9KTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4gPSBvbmZ1bGZpbGxlZCA9PiB7XG4gICAgICBsZXQgX3Jlc29sdmU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICB0b2tlbi5zdWJzY3JpYmUocmVzb2x2ZSk7XG4gICAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgICBwcm9taXNlLmNhbmNlbCA9IGZ1bmN0aW9uIHJlamVjdCgpIHtcbiAgICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gICAqL1xuICB0aHJvd0lmUmVxdWVzdGVkKCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgdGhyb3cgdGhpcy5yZWFzb247XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIGxpc3RlbmVyKHRoaXMucmVhc29uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtsaXN0ZW5lcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICAgKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICAgKi9cbiAgc3RhdGljIHNvdXJjZSgpIHtcbiAgICBsZXQgY2FuY2VsO1xuICAgIGNvbnN0IHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICAgIGNhbmNlbCA9IGM7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuLFxuICAgICAgY2FuY2VsXG4gICAgfTtcbiAgfVxufVxuXG52YXIgQ2FuY2VsVG9rZW4kMSA9IENhbmNlbFRva2VuO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zXG4gKlxuICogQHBhcmFtIHsqfSBwYXlsb2FkIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBeGlvc0Vycm9yKHBheWxvYWQpIHtcbiAgcmV0dXJuIHV0aWxzJDEuaXNPYmplY3QocGF5bG9hZCkgJiYgKHBheWxvYWQuaXNBeGlvc0Vycm9yID09PSB0cnVlKTtcbn1cblxuY29uc3QgSHR0cFN0YXR1c0NvZGUgPSB7XG4gIENvbnRpbnVlOiAxMDAsXG4gIFN3aXRjaGluZ1Byb3RvY29sczogMTAxLFxuICBQcm9jZXNzaW5nOiAxMDIsXG4gIEVhcmx5SGludHM6IDEwMyxcbiAgT2s6IDIwMCxcbiAgQ3JlYXRlZDogMjAxLFxuICBBY2NlcHRlZDogMjAyLFxuICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246IDIwMyxcbiAgTm9Db250ZW50OiAyMDQsXG4gIFJlc2V0Q29udGVudDogMjA1LFxuICBQYXJ0aWFsQ29udGVudDogMjA2LFxuICBNdWx0aVN0YXR1czogMjA3LFxuICBBbHJlYWR5UmVwb3J0ZWQ6IDIwOCxcbiAgSW1Vc2VkOiAyMjYsXG4gIE11bHRpcGxlQ2hvaWNlczogMzAwLFxuICBNb3ZlZFBlcm1hbmVudGx5OiAzMDEsXG4gIEZvdW5kOiAzMDIsXG4gIFNlZU90aGVyOiAzMDMsXG4gIE5vdE1vZGlmaWVkOiAzMDQsXG4gIFVzZVByb3h5OiAzMDUsXG4gIFVudXNlZDogMzA2LFxuICBUZW1wb3JhcnlSZWRpcmVjdDogMzA3LFxuICBQZXJtYW5lbnRSZWRpcmVjdDogMzA4LFxuICBCYWRSZXF1ZXN0OiA0MDAsXG4gIFVuYXV0aG9yaXplZDogNDAxLFxuICBQYXltZW50UmVxdWlyZWQ6IDQwMixcbiAgRm9yYmlkZGVuOiA0MDMsXG4gIE5vdEZvdW5kOiA0MDQsXG4gIE1ldGhvZE5vdEFsbG93ZWQ6IDQwNSxcbiAgTm90QWNjZXB0YWJsZTogNDA2LFxuICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDQwNyxcbiAgUmVxdWVzdFRpbWVvdXQ6IDQwOCxcbiAgQ29uZmxpY3Q6IDQwOSxcbiAgR29uZTogNDEwLFxuICBMZW5ndGhSZXF1aXJlZDogNDExLFxuICBQcmVjb25kaXRpb25GYWlsZWQ6IDQxMixcbiAgUGF5bG9hZFRvb0xhcmdlOiA0MTMsXG4gIFVyaVRvb0xvbmc6IDQxNCxcbiAgVW5zdXBwb3J0ZWRNZWRpYVR5cGU6IDQxNSxcbiAgUmFuZ2VOb3RTYXRpc2ZpYWJsZTogNDE2LFxuICBFeHBlY3RhdGlvbkZhaWxlZDogNDE3LFxuICBJbUFUZWFwb3Q6IDQxOCxcbiAgTWlzZGlyZWN0ZWRSZXF1ZXN0OiA0MjEsXG4gIFVucHJvY2Vzc2FibGVFbnRpdHk6IDQyMixcbiAgTG9ja2VkOiA0MjMsXG4gIEZhaWxlZERlcGVuZGVuY3k6IDQyNCxcbiAgVG9vRWFybHk6IDQyNSxcbiAgVXBncmFkZVJlcXVpcmVkOiA0MjYsXG4gIFByZWNvbmRpdGlvblJlcXVpcmVkOiA0MjgsXG4gIFRvb01hbnlSZXF1ZXN0czogNDI5LFxuICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6IDQzMSxcbiAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6IDQ1MSxcbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvcjogNTAwLFxuICBOb3RJbXBsZW1lbnRlZDogNTAxLFxuICBCYWRHYXRld2F5OiA1MDIsXG4gIFNlcnZpY2VVbmF2YWlsYWJsZTogNTAzLFxuICBHYXRld2F5VGltZW91dDogNTA0LFxuICBIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDogNTA1LFxuICBWYXJpYW50QWxzb05lZ290aWF0ZXM6IDUwNixcbiAgSW5zdWZmaWNpZW50U3RvcmFnZTogNTA3LFxuICBMb29wRGV0ZWN0ZWQ6IDUwOCxcbiAgTm90RXh0ZW5kZWQ6IDUxMCxcbiAgTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDUxMSxcbn07XG5cbk9iamVjdC5lbnRyaWVzKEh0dHBTdGF0dXNDb2RlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgSHR0cFN0YXR1c0NvZGVbdmFsdWVdID0ga2V5O1xufSk7XG5cbnZhciBIdHRwU3RhdHVzQ29kZSQxID0gSHR0cFN0YXR1c0NvZGU7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJucyB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBBeGlvcyQxKGRlZmF1bHRDb25maWcpO1xuICBjb25zdCBpbnN0YW5jZSA9IGJpbmQoQXhpb3MkMS5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMkMS5leHRlbmQoaW5zdGFuY2UsIEF4aW9zJDEucHJvdG90eXBlLCBjb250ZXh0LCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscyQxLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCwgbnVsbCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG4gIGluc3RhbmNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICAgIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhkZWZhdWx0Q29uZmlnLCBpbnN0YW5jZUNvbmZpZykpO1xuICB9O1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG5jb25zdCBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzJDEpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3MkMTtcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gQ2FuY2VsZWRFcnJvcjtcbmF4aW9zLkNhbmNlbFRva2VuID0gQ2FuY2VsVG9rZW4kMTtcbmF4aW9zLmlzQ2FuY2VsID0gaXNDYW5jZWw7XG5heGlvcy5WRVJTSU9OID0gVkVSU0lPTjtcbmF4aW9zLnRvRm9ybURhdGEgPSB0b0Zvcm1EYXRhO1xuXG4vLyBFeHBvc2UgQXhpb3NFcnJvciBjbGFzc1xuYXhpb3MuQXhpb3NFcnJvciA9IEF4aW9zRXJyb3I7XG5cbi8vIGFsaWFzIGZvciBDYW5jZWxlZEVycm9yIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5heGlvcy5DYW5jZWwgPSBheGlvcy5DYW5jZWxlZEVycm9yO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuXG5heGlvcy5zcHJlYWQgPSBzcHJlYWQ7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IGlzQXhpb3NFcnJvcjtcblxuLy8gRXhwb3NlIG1lcmdlQ29uZmlnXG5heGlvcy5tZXJnZUNvbmZpZyA9IG1lcmdlQ29uZmlnO1xuXG5heGlvcy5BeGlvc0hlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMTtcblxuYXhpb3MuZm9ybVRvSlNPTiA9IHRoaW5nID0+IGZvcm1EYXRhVG9KU09OKHV0aWxzJDEuaXNIVE1MRm9ybSh0aGluZykgPyBuZXcgRm9ybURhdGEodGhpbmcpIDogdGhpbmcpO1xuXG5heGlvcy5nZXRBZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcjtcblxuYXhpb3MuSHR0cFN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzQ29kZSQxO1xuXG5heGlvcy5kZWZhdWx0ID0gYXhpb3M7XG5cbm1vZHVsZS5leHBvcnRzID0gYXhpb3M7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1heGlvcy5janMubWFwXG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkF4aW9zQ2xpZW50ID0gdm9pZCAwO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbnZhciBBeGlvc0NsaWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBBeGlvc0NsaWVudChfYSkge1xuICAgICAgICB2YXIgcmVzcG9uc2VIYW5kbGVyID0gX2EucmVzcG9uc2VIYW5kbGVyLCByZXF1ZXN0Q29uZmlnQnVpbGRlciA9IF9hLnJlcXVlc3RDb25maWdCdWlsZGVyO1xuICAgICAgICB0aGlzLnJlc3BvbnNlSGFuZGxlciA9IHJlc3BvbnNlSGFuZGxlcjtcbiAgICAgICAgdGhpcy5yZXF1ZXN0Q29uZmlnQnVpbGRlciA9IHJlcXVlc3RDb25maWdCdWlsZGVyO1xuICAgIH1cbiAgICBBeGlvc0NsaWVudC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHBhdGgsIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVxdWVzdENvbmZpZztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5yZXF1ZXN0Q29uZmlnQnVpbGRlci5idWlsZChcImdldFwiLCBwYXRoLCBwYXJhbXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdENvbmZpZyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdENvbmZpZyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBbMiAvKnJldHVybiovLCAoX2Euc2VudCgpKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQXhpb3NDbGllbnQucHJvdG90eXBlLmdldERhdGEgPSBmdW5jdGlvbiAocGF0aCwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXF1ZXN0Q29uZmlnO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLnJlcXVlc3RDb25maWdCdWlsZGVyLmJ1aWxkKFwiZ2V0XCIsIHBhdGgsIHBhcmFtcywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJhcnJheWJ1ZmZlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q29uZmlnID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0Q29uZmlnKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIChfYS5zZW50KCkpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBBeGlvc0NsaWVudC5wcm90b3R5cGUucG9zdCA9IGZ1bmN0aW9uIChwYXRoLCBwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlcXVlc3RDb25maWc7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMucmVxdWVzdENvbmZpZ0J1aWxkZXIuYnVpbGQoXCJwb3N0XCIsIHBhdGgsIHBhcmFtcyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q29uZmlnID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0Q29uZmlnKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIChfYS5zZW50KCkpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBBeGlvc0NsaWVudC5wcm90b3R5cGUucG9zdERhdGEgPSBmdW5jdGlvbiAocGF0aCwgZm9ybURhdGEpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlcXVlc3RDb25maWc7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMucmVxdWVzdENvbmZpZ0J1aWxkZXIuYnVpbGQoXCJwb3N0XCIsIHBhdGgsIGZvcm1EYXRhKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RDb25maWcgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLnNlbmRSZXF1ZXN0KHJlcXVlc3RDb25maWcpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gWzIgLypyZXR1cm4qLywgKF9hLnNlbnQoKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEF4aW9zQ2xpZW50LnByb3RvdHlwZS5wdXQgPSBmdW5jdGlvbiAocGF0aCwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXF1ZXN0Q29uZmlnO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLnJlcXVlc3RDb25maWdCdWlsZGVyLmJ1aWxkKFwicHV0XCIsIHBhdGgsIHBhcmFtcyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q29uZmlnID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0Q29uZmlnKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIChfYS5zZW50KCkpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBBeGlvc0NsaWVudC5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKHBhdGgsIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVxdWVzdENvbmZpZztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5yZXF1ZXN0Q29uZmlnQnVpbGRlci5idWlsZChcImRlbGV0ZVwiLCBwYXRoLCBwYXJhbXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdENvbmZpZyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdENvbmZpZyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBbMiAvKnJldHVybiovLCAoX2Euc2VudCgpKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQXhpb3NDbGllbnQucHJvdG90eXBlLnNlbmRSZXF1ZXN0ID0gZnVuY3Rpb24gKHJlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2VIYW5kbGVyLmhhbmRsZShcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5ldy1jYXBcbiAgICAgICAgKDAsIGF4aW9zXzEuZGVmYXVsdCkoX19hc3NpZ24oX19hc3NpZ24oe30sIHJlcXVlc3RDb25maWcpLCB7IG1heEJvZHlMZW5ndGg6IEluZmluaXR5LCBtYXhDb250ZW50TGVuZ3RoOiBJbmZpbml0eSB9KSkpO1xuICAgIH07XG4gICAgcmV0dXJuIEF4aW9zQ2xpZW50O1xufSgpKTtcbmV4cG9ydHMuQXhpb3NDbGllbnQgPSBBeGlvc0NsaWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUF4aW9zQ2xpZW50LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EZWZhdWx0SHR0cENsaWVudCA9IHZvaWQgMDtcbnZhciBBeGlvc0NsaWVudF8xID0gcmVxdWlyZShcIi4vQXhpb3NDbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEZWZhdWx0SHR0cENsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQXhpb3NDbGllbnRfMS5BeGlvc0NsaWVudDsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL2V2YWwnKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gRXZhbEVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9yYW5nZScpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBSYW5nZUVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9yZWYnKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gUmVmZXJlbmNlRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL3N5bnRheCcpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBTeW50YXhFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vdHlwZScpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBUeXBlRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL3VyaScpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBVUklFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IGNvbXBsZXhpdHk6IFsyLCAxOF0sIG1heC1zdGF0ZW1lbnRzOiBbMiwgMzNdICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhhc1N5bWJvbHMoKSB7XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gJ3N5bWJvbCcpIHsgcmV0dXJuIHRydWU7IH1cblxuXHR2YXIgb2JqID0ge307XG5cdHZhciBzeW0gPSBTeW1ib2woJ3Rlc3QnKTtcblx0dmFyIHN5bU9iaiA9IE9iamVjdChzeW0pO1xuXHRpZiAodHlwZW9mIHN5bSA9PT0gJ3N0cmluZycpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzeW0pICE9PSAnW29iamVjdCBTeW1ib2xdJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzeW1PYmopICE9PSAnW29iamVjdCBTeW1ib2xdJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vbGpoYXJiL29iamVjdC5hc3NpZ24vaXNzdWVzLzE3XG5cdC8vIGlmIChzeW0gaW5zdGFuY2VvZiBTeW1ib2wpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIHRlbXAgZGlzYWJsZWQgcGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJSZWZsZWN0aW9uL2dldC1vd24tcHJvcGVydHktc3ltYm9scy9pc3N1ZXMvNFxuXHQvLyBpZiAoIShzeW1PYmogaW5zdGFuY2VvZiBTeW1ib2wpKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdC8vIGlmICh0eXBlb2YgU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0Ly8gaWYgKFN0cmluZyhzeW0pICE9PSBTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltVmFsID0gNDI7XG5cdG9ialtzeW1dID0gc3ltVmFsO1xuXHRmb3IgKHN5bSBpbiBvYmopIHsgcmV0dXJuIGZhbHNlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLXVucmVhY2hhYmxlLWxvb3Bcblx0aWYgKHR5cGVvZiBPYmplY3Qua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzID09PSAnZnVuY3Rpb24nICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoICE9PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHZhciBzeW1zID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmopO1xuXHRpZiAoc3ltcy5sZW5ndGggIT09IDEgfHwgc3ltc1swXSAhPT0gc3ltKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iaiwgc3ltKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPT09ICdmdW5jdGlvbicpIHtcblx0XHR2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBzeW0pO1xuXHRcdGlmIChkZXNjcmlwdG9yLnZhbHVlICE9PSBzeW1WYWwgfHwgZGVzY3JpcHRvci5lbnVtZXJhYmxlICE9PSB0cnVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHR9XG5cblx0cmV0dXJuIHRydWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgb3JpZ1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbDtcbnZhciBoYXNTeW1ib2xTaGFtID0gcmVxdWlyZSgnLi9zaGFtcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhhc05hdGl2ZVN5bWJvbHMoKSB7XG5cdGlmICh0eXBlb2Ygb3JpZ1N5bWJvbCAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2Ygb3JpZ1N5bWJvbCgnZm9vJykgIT09ICdzeW1ib2wnKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbCgnYmFyJykgIT09ICdzeW1ib2wnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHJldHVybiBoYXNTeW1ib2xTaGFtKCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdGVzdCA9IHtcblx0X19wcm90b19fOiBudWxsLFxuXHRmb286IHt9XG59O1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzUHJvdG8oKSB7XG5cdC8vIEB0cy1leHBlY3QtZXJyb3I6IFRTIGVycm9ycyBvbiBhbiBpbmhlcml0ZWQgcHJvcGVydHkgZm9yIHNvbWUgcmVhc29uXG5cdHJldHVybiB7IF9fcHJvdG9fXzogdGVzdCB9LmZvbyA9PT0gdGVzdC5mb29cblx0XHQmJiAhKHRlc3QgaW5zdGFuY2VvZiAkT2JqZWN0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBuby1pbnZhbGlkLXRoaXM6IDEgKi9cblxudmFyIEVSUk9SX01FU1NBR0UgPSAnRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAnO1xudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBmdW5jVHlwZSA9ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cbnZhciBjb25jYXR0eSA9IGZ1bmN0aW9uIGNvbmNhdHR5KGEsIGIpIHtcbiAgICB2YXIgYXJyID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgYXJyW2ldID0gYVtpXTtcbiAgICB9XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBiLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIGFycltqICsgYS5sZW5ndGhdID0gYltqXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyO1xufTtcblxudmFyIHNsaWN5ID0gZnVuY3Rpb24gc2xpY3koYXJyTGlrZSwgb2Zmc2V0KSB7XG4gICAgdmFyIGFyciA9IFtdO1xuICAgIGZvciAodmFyIGkgPSBvZmZzZXQgfHwgMCwgaiA9IDA7IGkgPCBhcnJMaWtlLmxlbmd0aDsgaSArPSAxLCBqICs9IDEpIHtcbiAgICAgICAgYXJyW2pdID0gYXJyTGlrZVtpXTtcbiAgICB9XG4gICAgcmV0dXJuIGFycjtcbn07XG5cbnZhciBqb2lueSA9IGZ1bmN0aW9uIChhcnIsIGpvaW5lcikge1xuICAgIHZhciBzdHIgPSAnJztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBzdHIgKz0gYXJyW2ldO1xuICAgICAgICBpZiAoaSArIDEgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICBzdHIgKz0gam9pbmVyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQodGhhdCkge1xuICAgIHZhciB0YXJnZXQgPSB0aGlzO1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9PSAnZnVuY3Rpb24nIHx8IHRvU3RyLmFwcGx5KHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY3koYXJndW1lbnRzLCAxKTtcblxuICAgIHZhciBib3VuZDtcbiAgICB2YXIgYmluZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgY29uY2F0dHkoYXJncywgYXJndW1lbnRzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChPYmplY3QocmVzdWx0KSA9PT0gcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICB0aGF0LFxuICAgICAgICAgICAgY29uY2F0dHkoYXJncywgYXJndW1lbnRzKVxuICAgICAgICApO1xuXG4gICAgfTtcblxuICAgIHZhciBib3VuZExlbmd0aCA9IG1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzW2ldID0gJyQnICsgaTtcbiAgICB9XG5cbiAgICBib3VuZCA9IEZ1bmN0aW9uKCdiaW5kZXInLCAncmV0dXJuIGZ1bmN0aW9uICgnICsgam9pbnkoYm91bmRBcmdzLCAnLCcpICsgJyl7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9JykoYmluZGVyKTtcblxuICAgIGlmICh0YXJnZXQucHJvdG90eXBlKSB7XG4gICAgICAgIHZhciBFbXB0eSA9IGZ1bmN0aW9uIEVtcHR5KCkge307XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIGJvdW5kLnByb3RvdHlwZSA9IG5ldyBFbXB0eSgpO1xuICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBib3VuZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcbnZhciAkaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBiaW5kLmNhbGwoY2FsbCwgJGhhc093bik7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1bmRlZmluZWQ7XG5cbnZhciAkRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMnKTtcbnZhciAkRXZhbEVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL2V2YWwnKTtcbnZhciAkUmFuZ2VFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy9yYW5nZScpO1xudmFyICRSZWZlcmVuY2VFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy9yZWYnKTtcbnZhciAkU3ludGF4RXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvc3ludGF4Jyk7XG52YXIgJFR5cGVFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy90eXBlJyk7XG52YXIgJFVSSUVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3VyaScpO1xuXG52YXIgJEZ1bmN0aW9uID0gRnVuY3Rpb247XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG52YXIgaGFzUHJvdG8gPSByZXF1aXJlKCdoYXMtcHJvdG8nKSgpO1xuXG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgKFxuXHRoYXNQcm90b1xuXHRcdD8gZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHguX19wcm90b19fOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblx0XHQ6IG51bGxcbik7XG5cbnZhciBuZWVkc0V2YWwgPSB7fTtcblxudmFyIFR5cGVkQXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgfHwgIWdldFByb3RvID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8oVWludDhBcnJheSk7XG5cbnZhciBJTlRSSU5TSUNTID0ge1xuXHRfX3Byb3RvX186IG51bGwsXG5cdCclQWdncmVnYXRlRXJyb3IlJzogdHlwZW9mIEFnZ3JlZ2F0ZUVycm9yID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFnZ3JlZ2F0ZUVycm9yLFxuXHQnJUFycmF5JSc6IEFycmF5LFxuXHQnJUFycmF5QnVmZmVyJSc6IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBcnJheUJ1ZmZlcixcblx0JyVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgJiYgZ2V0UHJvdG8gPyBnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpIDogdW5kZWZpbmVkLFxuXHQnJUFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlJzogbmVlZHNFdmFsLFxuXHQnJUF0b21pY3MlJzogdHlwZW9mIEF0b21pY3MgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQXRvbWljcyxcblx0JyVCaWdJbnQlJzogdHlwZW9mIEJpZ0ludCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBCaWdJbnQsXG5cdCclQmlnSW50NjRBcnJheSUnOiB0eXBlb2YgQmlnSW50NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBCaWdJbnQ2NEFycmF5LFxuXHQnJUJpZ1VpbnQ2NEFycmF5JSc6IHR5cGVvZiBCaWdVaW50NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBCaWdVaW50NjRBcnJheSxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6ICRFcnJvcixcblx0JyVldmFsJSc6IGV2YWwsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZXZhbFxuXHQnJUV2YWxFcnJvciUnOiAkRXZhbEVycm9yLFxuXHQnJUZsb2F0MzJBcnJheSUnOiB0eXBlb2YgRmxvYXQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0MzJBcnJheSxcblx0JyVGbG9hdDY0QXJyYXklJzogdHlwZW9mIEZsb2F0NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDY0QXJyYXksXG5cdCclRmluYWxpemF0aW9uUmVnaXN0cnklJzogdHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZpbmFsaXphdGlvblJlZ2lzdHJ5LFxuXHQnJUZ1bmN0aW9uJSc6ICRGdW5jdGlvbixcblx0JyVHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclSW50OEFycmF5JSc6IHR5cGVvZiBJbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50OEFycmF5LFxuXHQnJUludDE2QXJyYXklJzogdHlwZW9mIEludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50MTZBcnJheSxcblx0JyVJbnQzMkFycmF5JSc6IHR5cGVvZiBJbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDMyQXJyYXksXG5cdCclaXNGaW5pdGUlJzogaXNGaW5pdGUsXG5cdCclaXNOYU4lJzogaXNOYU4sXG5cdCclSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyAmJiBnZXRQcm90byA/IGdldFByb3RvKGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpIDogdW5kZWZpbmVkLFxuXHQnJUpTT04lJzogdHlwZW9mIEpTT04gPT09ICdvYmplY3QnID8gSlNPTiA6IHVuZGVmaW5lZCxcblx0JyVNYXAlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBNYXAsXG5cdCclTWFwSXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgfHwgIWdldFByb3RvID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6ICRSYW5nZUVycm9yLFxuXHQnJVJlZmVyZW5jZUVycm9yJSc6ICRSZWZlcmVuY2VFcnJvcixcblx0JyVSZWZsZWN0JSc6IHR5cGVvZiBSZWZsZWN0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFJlZmxlY3QsXG5cdCclUmVnRXhwJSc6IFJlZ0V4cCxcblx0JyVTZXQlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTZXQsXG5cdCclU2V0SXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgfHwgIWdldFByb3RvID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyAmJiBnZXRQcm90byA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogJFVSSUVycm9yLFxuXHQnJVdlYWtNYXAlJzogdHlwZW9mIFdlYWtNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha01hcCxcblx0JyVXZWFrUmVmJSc6IHR5cGVvZiBXZWFrUmVmID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtSZWYsXG5cdCclV2Vha1NldCUnOiB0eXBlb2YgV2Vha1NldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrU2V0XG59O1xuXG5pZiAoZ2V0UHJvdG8pIHtcblx0dHJ5IHtcblx0XHRudWxsLmVycm9yOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2hhZG93cmVhbG0vcHVsbC8zODQjaXNzdWVjb21tZW50LTEzNjQyNjQyMjlcblx0XHR2YXIgZXJyb3JQcm90byA9IGdldFByb3RvKGdldFByb3RvKGUpKTtcblx0XHRJTlRSSU5TSUNTWyclRXJyb3IucHJvdG90eXBlJSddID0gZXJyb3JQcm90bztcblx0fVxufVxuXG52YXIgZG9FdmFsID0gZnVuY3Rpb24gZG9FdmFsKG5hbWUpIHtcblx0dmFyIHZhbHVlO1xuXHRpZiAobmFtZSA9PT0gJyVBc3luY0Z1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignYXN5bmMgZnVuY3Rpb24gKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUdlbmVyYXRvckZ1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignZnVuY3Rpb24qICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignYXN5bmMgZnVuY3Rpb24qICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0dlbmVyYXRvciUnKSB7XG5cdFx0dmFyIGZuID0gZG9FdmFsKCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnKTtcblx0XHRpZiAoZm4pIHtcblx0XHRcdHZhbHVlID0gZm4ucHJvdG90eXBlO1xuXHRcdH1cblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlJykge1xuXHRcdHZhciBnZW4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvciUnKTtcblx0XHRpZiAoZ2VuICYmIGdldFByb3RvKSB7XG5cdFx0XHR2YWx1ZSA9IGdldFByb3RvKGdlbi5wcm90b3R5cGUpO1xuXHRcdH1cblx0fVxuXG5cdElOVFJJTlNJQ1NbbmFtZV0gPSB2YWx1ZTtcblxuXHRyZXR1cm4gdmFsdWU7XG59O1xuXG52YXIgTEVHQUNZX0FMSUFTRVMgPSB7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXNvd24nKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG52YXIgJGV4ZWMgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgUmVnRXhwLnByb3RvdHlwZS5leGVjKTtcblxuLyogYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvNC4xNy4xNS9kaXN0L2xvZGFzaC5qcyNMNjczNS1MNjc0NCAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14lLltcXF1dK3xcXFsoPzooLT9cXGQrKD86XFwuXFxkKyk/KXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSo/KVxcMilcXF18KD89KD86XFwufFxcW1xcXSkoPzpcXC58XFxbXFxdfCUkKSkvZztcbnZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZzsgLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgc3RyaW5nVG9QYXRoID0gZnVuY3Rpb24gc3RyaW5nVG9QYXRoKHN0cmluZykge1xuXHR2YXIgZmlyc3QgPSAkc3RyU2xpY2Uoc3RyaW5nLCAwLCAxKTtcblx0dmFyIGxhc3QgPSAkc3RyU2xpY2Uoc3RyaW5nLCAtMSk7XG5cdGlmIChmaXJzdCA9PT0gJyUnICYmIGxhc3QgIT09ICclJykge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgY2xvc2luZyBgJWAnKTtcblx0fSBlbHNlIGlmIChsYXN0ID09PSAnJScgJiYgZmlyc3QgIT09ICclJykge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgb3BlbmluZyBgJWAnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gW107XG5cdCRyZXBsYWNlKHN0cmluZywgcmVQcm9wTmFtZSwgZnVuY3Rpb24gKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcblx0XHRyZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSBxdW90ZSA/ICRyZXBsYWNlKHN1YlN0cmluZywgcmVFc2NhcGVDaGFyLCAnJDEnKSA6IG51bWJlciB8fCBtYXRjaDtcblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuLyogZW5kIGFkYXB0YXRpb24gKi9cblxudmFyIGdldEJhc2VJbnRyaW5zaWMgPSBmdW5jdGlvbiBnZXRCYXNlSW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHR2YXIgaW50cmluc2ljTmFtZSA9IG5hbWU7XG5cdHZhciBhbGlhcztcblx0aWYgKGhhc093bihMRUdBQ1lfQUxJQVNFUywgaW50cmluc2ljTmFtZSkpIHtcblx0XHRhbGlhcyA9IExFR0FDWV9BTElBU0VTW2ludHJpbnNpY05hbWVdO1xuXHRcdGludHJpbnNpY05hbWUgPSAnJScgKyBhbGlhc1swXSArICclJztcblx0fVxuXG5cdGlmIChoYXNPd24oSU5UUklOU0lDUywgaW50cmluc2ljTmFtZSkpIHtcblx0XHR2YXIgdmFsdWUgPSBJTlRSSU5TSUNTW2ludHJpbnNpY05hbWVdO1xuXHRcdGlmICh2YWx1ZSA9PT0gbmVlZHNFdmFsKSB7XG5cdFx0XHR2YWx1ZSA9IGRvRXZhbChpbnRyaW5zaWNOYW1lKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgJiYgIWFsbG93TWlzc2luZykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZXhpc3RzLCBidXQgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGZpbGUgYW4gaXNzdWUhJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGFsaWFzOiBhbGlhcyxcblx0XHRcdG5hbWU6IGludHJpbnNpY05hbWUsXG5cdFx0XHR2YWx1ZTogdmFsdWVcblx0XHR9O1xuXHR9XG5cblx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignaW50cmluc2ljICcgKyBuYW1lICsgJyBkb2VzIG5vdCBleGlzdCEnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0SW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHRpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IG5hbWUubGVuZ3RoID09PSAwKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2ludHJpbnNpYyBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHR5cGVvZiBhbGxvd01pc3NpbmcgIT09ICdib29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcImFsbG93TWlzc2luZ1wiIGFyZ3VtZW50IG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblxuXHRpZiAoJGV4ZWMoL14lP1teJV0qJT8kLywgbmFtZSkgPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdgJWAgbWF5IG5vdCBiZSBwcmVzZW50IGFueXdoZXJlIGJ1dCBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIGludHJpbnNpYyBuYW1lJyk7XG5cdH1cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJyl9ICovXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpIHx8IGZhbHNlO1xuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9ICRkZWZpbmVQcm9wZXJ0eTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRnT1BEID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciUnLCB0cnVlKTtcblxuaWYgKCRnT1BEKSB7XG5cdHRyeSB7XG5cdFx0JGdPUEQoW10sICdsZW5ndGgnKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIElFIDggaGFzIGEgYnJva2VuIGdPUERcblx0XHQkZ09QRCA9IG51bGw7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSAkZ09QRDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJ2VzLWRlZmluZS1wcm9wZXJ0eScpO1xuXG52YXIgJFN5bnRheEVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3N5bnRheCcpO1xudmFyICRUeXBlRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvdHlwZScpO1xuXG52YXIgZ29wZCA9IHJlcXVpcmUoJ2dvcGQnKTtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lRGF0YVByb3BlcnR5KFxuXHRvYmosXG5cdHByb3BlcnR5LFxuXHR2YWx1ZVxuKSB7XG5cdGlmICghb2JqIHx8ICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb2JqICE9PSAnZnVuY3Rpb24nKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgb2JqYCBtdXN0IGJlIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uYCcpO1xuXHR9XG5cdGlmICh0eXBlb2YgcHJvcGVydHkgIT09ICdzdHJpbmcnICYmIHR5cGVvZiBwcm9wZXJ0eSAhPT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHByb3BlcnR5YCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgc3ltYm9sYCcpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMyAmJiB0eXBlb2YgYXJndW1lbnRzWzNdICE9PSAnYm9vbGVhbicgJiYgYXJndW1lbnRzWzNdICE9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2Bub25FbnVtZXJhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwnKTtcblx0fVxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgdHlwZW9mIGFyZ3VtZW50c1s0XSAhPT0gJ2Jvb2xlYW4nICYmIGFyZ3VtZW50c1s0XSAhPT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgbm9uV3JpdGFibGVgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4gb3IgbnVsbCcpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gNSAmJiB0eXBlb2YgYXJndW1lbnRzWzVdICE9PSAnYm9vbGVhbicgJiYgYXJndW1lbnRzWzVdICE9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2Bub25Db25maWd1cmFibGVgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4gb3IgbnVsbCcpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gNiAmJiB0eXBlb2YgYXJndW1lbnRzWzZdICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGxvb3NlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblxuXHR2YXIgbm9uRW51bWVyYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzID8gYXJndW1lbnRzWzNdIDogbnVsbDtcblx0dmFyIG5vbldyaXRhYmxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgPyBhcmd1bWVudHNbNF0gOiBudWxsO1xuXHR2YXIgbm9uQ29uZmlndXJhYmxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgPyBhcmd1bWVudHNbNV0gOiBudWxsO1xuXHR2YXIgbG9vc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gNiA/IGFyZ3VtZW50c1s2XSA6IGZhbHNlO1xuXG5cdC8qIEB0eXBlIHtmYWxzZSB8IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+fSAqL1xuXHR2YXIgZGVzYyA9ICEhZ29wZCAmJiBnb3BkKG9iaiwgcHJvcGVydHkpO1xuXG5cdGlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0XHQkZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wZXJ0eSwge1xuXHRcdFx0Y29uZmlndXJhYmxlOiBub25Db25maWd1cmFibGUgPT09IG51bGwgJiYgZGVzYyA/IGRlc2MuY29uZmlndXJhYmxlIDogIW5vbkNvbmZpZ3VyYWJsZSxcblx0XHRcdGVudW1lcmFibGU6IG5vbkVudW1lcmFibGUgPT09IG51bGwgJiYgZGVzYyA/IGRlc2MuZW51bWVyYWJsZSA6ICFub25FbnVtZXJhYmxlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IG5vbldyaXRhYmxlID09PSBudWxsICYmIGRlc2MgPyBkZXNjLndyaXRhYmxlIDogIW5vbldyaXRhYmxlXG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAobG9vc2UgfHwgKCFub25FbnVtZXJhYmxlICYmICFub25Xcml0YWJsZSAmJiAhbm9uQ29uZmlndXJhYmxlKSkge1xuXHRcdC8vIG11c3QgZmFsbCBiYWNrIHRvIFtbU2V0XV0sIGFuZCB3YXMgbm90IGV4cGxpY2l0bHkgYXNrZWQgdG8gbWFrZSBub24tZW51bWVyYWJsZSwgbm9uLXdyaXRhYmxlLCBvciBub24tY29uZmlndXJhYmxlXG5cdFx0b2JqW3Byb3BlcnR5XSA9IHZhbHVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignVGhpcyBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IGRlZmluaW5nIGEgcHJvcGVydHkgYXMgbm9uLWNvbmZpZ3VyYWJsZSwgbm9uLXdyaXRhYmxlLCBvciBub24tZW51bWVyYWJsZS4nKTtcblx0fVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJ2VzLWRlZmluZS1wcm9wZXJ0eScpO1xuXG52YXIgaGFzUHJvcGVydHlEZXNjcmlwdG9ycyA9IGZ1bmN0aW9uIGhhc1Byb3BlcnR5RGVzY3JpcHRvcnMoKSB7XG5cdHJldHVybiAhISRkZWZpbmVQcm9wZXJ0eTtcbn07XG5cbmhhc1Byb3BlcnR5RGVzY3JpcHRvcnMuaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBmdW5jdGlvbiBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZygpIHtcblx0Ly8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0dHJ5IHtcblx0XHRyZXR1cm4gJGRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggIT09IDE7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJbiBGaXJlZm94IDQtMjIsIGRlZmluaW5nIGxlbmd0aCBvbiBhbiBhcnJheSB0aHJvd3MgYW4gZXhjZXB0aW9uLlxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc1Byb3BlcnR5RGVzY3JpcHRvcnM7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLWRhdGEtcHJvcGVydHknKTtcbnZhciBoYXNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2hhcy1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpKCk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJ2dvcGQnKTtcblxudmFyICRUeXBlRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvdHlwZScpO1xudmFyICRmbG9vciA9IEdldEludHJpbnNpYygnJU1hdGguZmxvb3IlJyk7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNldEZ1bmN0aW9uTGVuZ3RoKGZuLCBsZW5ndGgpIHtcblx0aWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgZm5gIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblx0aWYgKHR5cGVvZiBsZW5ndGggIT09ICdudW1iZXInIHx8IGxlbmd0aCA8IDAgfHwgbGVuZ3RoID4gMHhGRkZGRkZGRiB8fCAkZmxvb3IobGVuZ3RoKSAhPT0gbGVuZ3RoKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BsZW5ndGhgIG11c3QgYmUgYSBwb3NpdGl2ZSAzMi1iaXQgaW50ZWdlcicpO1xuXHR9XG5cblx0dmFyIGxvb3NlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgISFhcmd1bWVudHNbMl07XG5cblx0dmFyIGZ1bmN0aW9uTGVuZ3RoSXNDb25maWd1cmFibGUgPSB0cnVlO1xuXHR2YXIgZnVuY3Rpb25MZW5ndGhJc1dyaXRhYmxlID0gdHJ1ZTtcblx0aWYgKCdsZW5ndGgnIGluIGZuICYmIGdPUEQpIHtcblx0XHR2YXIgZGVzYyA9IGdPUEQoZm4sICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYyAmJiAhZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdGZ1bmN0aW9uTGVuZ3RoSXNDb25maWd1cmFibGUgPSBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKGRlc2MgJiYgIWRlc2Mud3JpdGFibGUpIHtcblx0XHRcdGZ1bmN0aW9uTGVuZ3RoSXNXcml0YWJsZSA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlmIChmdW5jdGlvbkxlbmd0aElzQ29uZmlndXJhYmxlIHx8IGZ1bmN0aW9uTGVuZ3RoSXNXcml0YWJsZSB8fCAhbG9vc2UpIHtcblx0XHRpZiAoaGFzRGVzY3JpcHRvcnMpIHtcblx0XHRcdGRlZmluZSgvKiogQHR5cGUge1BhcmFtZXRlcnM8ZGVmaW5lPlswXX0gKi8gKGZuKSwgJ2xlbmd0aCcsIGxlbmd0aCwgdHJ1ZSwgdHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRlZmluZSgvKiogQHR5cGUge1BhcmFtZXRlcnM8ZGVmaW5lPlswXX0gKi8gKGZuKSwgJ2xlbmd0aCcsIGxlbmd0aCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmbjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBzZXRGdW5jdGlvbkxlbmd0aCA9IHJlcXVpcmUoJ3NldC1mdW5jdGlvbi1sZW5ndGgnKTtcblxudmFyICRUeXBlRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvdHlwZScpO1xudmFyICRhcHBseSA9IEdldEludHJpbnNpYygnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcbnZhciAkY2FsbCA9IEdldEludHJpbnNpYygnJUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsJScpO1xudmFyICRyZWZsZWN0QXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGJpbmQuY2FsbCgkY2FsbCwgJGFwcGx5KTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJ2VzLWRlZmluZS1wcm9wZXJ0eScpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjYWxsQmluZChvcmlnaW5hbEZ1bmN0aW9uKSB7XG5cdGlmICh0eXBlb2Ygb3JpZ2luYWxGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdhIGZ1bmN0aW9uIGlzIHJlcXVpcmVkJyk7XG5cdH1cblx0dmFyIGZ1bmMgPSAkcmVmbGVjdEFwcGx5KGJpbmQsICRjYWxsLCBhcmd1bWVudHMpO1xuXHRyZXR1cm4gc2V0RnVuY3Rpb25MZW5ndGgoXG5cdFx0ZnVuYyxcblx0XHQxICsgJG1heCgwLCBvcmlnaW5hbEZ1bmN0aW9uLmxlbmd0aCAtIChhcmd1bWVudHMubGVuZ3RoIC0gMSkpLFxuXHRcdHRydWVcblx0KTtcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnLi8nKTtcblxudmFyICRpbmRleE9mID0gY2FsbEJpbmQoR2V0SW50cmluc2ljKCdTdHJpbmcucHJvdG90eXBlLmluZGV4T2YnKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJvdW5kSW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHR2YXIgaW50cmluc2ljID0gR2V0SW50cmluc2ljKG5hbWUsICEhYWxsb3dNaXNzaW5nKTtcblx0aWYgKHR5cGVvZiBpbnRyaW5zaWMgPT09ICdmdW5jdGlvbicgJiYgJGluZGV4T2YobmFtZSwgJy5wcm90b3R5cGUuJykgPiAtMSkge1xuXHRcdHJldHVybiBjYWxsQmluZChpbnRyaW5zaWMpO1xuXHR9XG5cdHJldHVybiBpbnRyaW5zaWM7XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge30iLCJ2YXIgaGFzTWFwID0gdHlwZW9mIE1hcCA9PT0gJ2Z1bmN0aW9uJyAmJiBNYXAucHJvdG90eXBlO1xudmFyIG1hcFNpemVEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiBoYXNNYXAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE1hcC5wcm90b3R5cGUsICdzaXplJykgOiBudWxsO1xudmFyIG1hcFNpemUgPSBoYXNNYXAgJiYgbWFwU2l6ZURlc2NyaXB0b3IgJiYgdHlwZW9mIG1hcFNpemVEZXNjcmlwdG9yLmdldCA9PT0gJ2Z1bmN0aW9uJyA/IG1hcFNpemVEZXNjcmlwdG9yLmdldCA6IG51bGw7XG52YXIgbWFwRm9yRWFjaCA9IGhhc01hcCAmJiBNYXAucHJvdG90eXBlLmZvckVhY2g7XG52YXIgaGFzU2V0ID0gdHlwZW9mIFNldCA9PT0gJ2Z1bmN0aW9uJyAmJiBTZXQucHJvdG90eXBlO1xudmFyIHNldFNpemVEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiBoYXNTZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFNldC5wcm90b3R5cGUsICdzaXplJykgOiBudWxsO1xudmFyIHNldFNpemUgPSBoYXNTZXQgJiYgc2V0U2l6ZURlc2NyaXB0b3IgJiYgdHlwZW9mIHNldFNpemVEZXNjcmlwdG9yLmdldCA9PT0gJ2Z1bmN0aW9uJyA/IHNldFNpemVEZXNjcmlwdG9yLmdldCA6IG51bGw7XG52YXIgc2V0Rm9yRWFjaCA9IGhhc1NldCAmJiBTZXQucHJvdG90eXBlLmZvckVhY2g7XG52YXIgaGFzV2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nICYmIFdlYWtNYXAucHJvdG90eXBlO1xudmFyIHdlYWtNYXBIYXMgPSBoYXNXZWFrTWFwID8gV2Vha01hcC5wcm90b3R5cGUuaGFzIDogbnVsbDtcbnZhciBoYXNXZWFrU2V0ID0gdHlwZW9mIFdlYWtTZXQgPT09ICdmdW5jdGlvbicgJiYgV2Vha1NldC5wcm90b3R5cGU7XG52YXIgd2Vha1NldEhhcyA9IGhhc1dlYWtTZXQgPyBXZWFrU2V0LnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtSZWYgPSB0eXBlb2YgV2Vha1JlZiA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrUmVmLnByb3RvdHlwZTtcbnZhciB3ZWFrUmVmRGVyZWYgPSBoYXNXZWFrUmVmID8gV2Vha1JlZi5wcm90b3R5cGUuZGVyZWYgOiBudWxsO1xudmFyIGJvb2xlYW5WYWx1ZU9mID0gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZjtcbnZhciBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztcbnZhciAkbWF0Y2ggPSBTdHJpbmcucHJvdG90eXBlLm1hdGNoO1xudmFyICRzbGljZSA9IFN0cmluZy5wcm90b3R5cGUuc2xpY2U7XG52YXIgJHJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG52YXIgJHRvVXBwZXJDYXNlID0gU3RyaW5nLnByb3RvdHlwZS50b1VwcGVyQ2FzZTtcbnZhciAkdG9Mb3dlckNhc2UgPSBTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlO1xudmFyICR0ZXN0ID0gUmVnRXhwLnByb3RvdHlwZS50ZXN0O1xudmFyICRjb25jYXQgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0O1xudmFyICRqb2luID0gQXJyYXkucHJvdG90eXBlLmpvaW47XG52YXIgJGFyclNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgYmlnSW50VmFsdWVPZiA9IHR5cGVvZiBCaWdJbnQgPT09ICdmdW5jdGlvbicgPyBCaWdJbnQucHJvdG90eXBlLnZhbHVlT2YgOiBudWxsO1xudmFyIGdPUFMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIHN5bVRvU3RyaW5nID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJyA/IFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgOiBudWxsO1xudmFyIGhhc1NoYW1tZWRTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnb2JqZWN0Jztcbi8vIGllLCBgaGFzLXRvc3RyaW5ndGFnL3NoYW1zXG52YXIgdG9TdHJpbmdUYWcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC50b1N0cmluZ1RhZyAmJiAodHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyA9PT0gaGFzU2hhbW1lZFN5bWJvbHMgPyAnb2JqZWN0JyA6ICdzeW1ib2wnKVxuICAgID8gU3ltYm9sLnRvU3RyaW5nVGFnXG4gICAgOiBudWxsO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbmZ1bmN0aW9uIGFkZE51bWVyaWNTZXBhcmF0b3IobnVtLCBzdHIpIHtcbiAgICBpZiAoXG4gICAgICAgIG51bSA9PT0gSW5maW5pdHlcbiAgICAgICAgfHwgbnVtID09PSAtSW5maW5pdHlcbiAgICAgICAgfHwgbnVtICE9PSBudW1cbiAgICAgICAgfHwgKG51bSAmJiBudW0gPiAtMTAwMCAmJiBudW0gPCAxMDAwKVxuICAgICAgICB8fCAkdGVzdC5jYWxsKC9lLywgc3RyKVxuICAgICkge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgICB2YXIgc2VwUmVnZXggPSAvWzAtOV0oPz0oPzpbMC05XXszfSkrKD8hWzAtOV0pKS9nO1xuICAgIGlmICh0eXBlb2YgbnVtID09PSAnbnVtYmVyJykge1xuICAgICAgICB2YXIgaW50ID0gbnVtIDwgMCA/IC0kZmxvb3IoLW51bSkgOiAkZmxvb3IobnVtKTsgLy8gdHJ1bmMobnVtKVxuICAgICAgICBpZiAoaW50ICE9PSBudW0pIHtcbiAgICAgICAgICAgIHZhciBpbnRTdHIgPSBTdHJpbmcoaW50KTtcbiAgICAgICAgICAgIHZhciBkZWMgPSAkc2xpY2UuY2FsbChzdHIsIGludFN0ci5sZW5ndGggKyAxKTtcbiAgICAgICAgICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKGludFN0ciwgc2VwUmVnZXgsICckJl8nKSArICcuJyArICRyZXBsYWNlLmNhbGwoJHJlcGxhY2UuY2FsbChkZWMsIC8oWzAtOV17M30pL2csICckJl8nKSwgL18kLywgJycpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHN0ciwgc2VwUmVnZXgsICckJl8nKTtcbn1cblxudmFyIHV0aWxJbnNwZWN0ID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKTtcbnZhciBpbnNwZWN0Q3VzdG9tID0gdXRpbEluc3BlY3QuY3VzdG9tO1xudmFyIGluc3BlY3RTeW1ib2wgPSBpc1N5bWJvbChpbnNwZWN0Q3VzdG9tKSA/IGluc3BlY3RDdXN0b20gOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJpbmRlbnRcIiBtdXN0IGJlIFwiXFxcXHRcIiwgYW4gaW50ZWdlciA+IDAsIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICBpZiAoaGFzKG9wdHMsICdudW1lcmljU2VwYXJhdG9yJykgJiYgdHlwZW9mIG9wdHMubnVtZXJpY1NlcGFyYXRvciAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBcIm51bWVyaWNTZXBhcmF0b3JcIiwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYHRydWVgIG9yIGBmYWxzZWAnKTtcbiAgICB9XG4gICAgdmFyIG51bWVyaWNTZXBhcmF0b3IgPSBvcHRzLm51bWVyaWNTZXBhcmF0b3I7XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgc3RyID0gU3RyaW5nKG9iaik7XG4gICAgICAgIHJldHVybiBudW1lcmljU2VwYXJhdG9yID8gYWRkTnVtZXJpY1NlcGFyYXRvcihvYmosIHN0cikgOiBzdHI7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICB2YXIgYmlnSW50U3RyID0gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgICAgIHJldHVybiBudW1lcmljU2VwYXJhdG9yID8gYWRkTnVtZXJpY1NlcGFyYXRvcihvYmosIGJpZ0ludFN0cikgOiBiaWdJbnRTdHI7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9ICRhcnJTbGljZS5jYWxsKHNlZW4pO1xuICAgICAgICAgICAgc2Vlbi5wdXNoKGZyb20pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub0luZGVudCkge1xuICAgICAgICAgICAgdmFyIG5ld09wdHMgPSB7XG4gICAgICAgICAgICAgICAgZGVwdGg6IG9wdHMuZGVwdGhcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykpIHtcbiAgICAgICAgICAgICAgICBuZXdPcHRzLnF1b3RlU3R5bGUgPSBvcHRzLnF1b3RlU3R5bGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5zcGVjdF8odmFsdWUsIG5ld09wdHMsIGRlcHRoICsgMSwgc2Vlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBvcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nICYmICFpc1JlZ0V4cChvYmopKSB7IC8vIGluIG9sZGVyIGVuZ2luZXMsIHJlZ2V4ZXMgYXJlIGNhbGxhYmxlXG4gICAgICAgIHZhciBuYW1lID0gbmFtZU9mKG9iaik7XG4gICAgICAgIHZhciBrZXlzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICByZXR1cm4gJ1tGdW5jdGlvbicgKyAobmFtZSA/ICc6ICcgKyBuYW1lIDogJyAoYW5vbnltb3VzKScpICsgJ10nICsgKGtleXMubGVuZ3RoID4gMCA/ICcgeyAnICsgJGpvaW4uY2FsbChrZXlzLCAnLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/ICRyZXBsYWNlLmNhbGwoU3RyaW5nKG9iaiksIC9eKFN5bWJvbFxcKC4qXFwpKV9bXildKiQvLCAnJDEnKSA6IHN5bVRvU3RyaW5nLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmICFoYXNTaGFtbWVkU3ltYm9scyA/IG1hcmtCb3hlZChzeW1TdHJpbmcpIDogc3ltU3RyaW5nO1xuICAgIH1cbiAgICBpZiAoaXNFbGVtZW50KG9iaikpIHtcbiAgICAgICAgdmFyIHMgPSAnPCcgKyAkdG9Mb3dlckNhc2UuY2FsbChTdHJpbmcob2JqLm5vZGVOYW1lKSk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgJHRvTG93ZXJDYXNlLmNhbGwoU3RyaW5nKG9iai5ub2RlTmFtZSkpICsgJz4nO1xuICAgICAgICByZXR1cm4gcztcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgICAgICBpZiAob2JqLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1tdJzsgfVxuICAgICAgICB2YXIgeHMgPSBhcnJPYmpLZXlzKG9iaiwgaW5zcGVjdCk7XG4gICAgICAgIGlmIChpbmRlbnQgJiYgIXNpbmdsZUxpbmVWYWx1ZXMoeHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ1snICsgaW5kZW50ZWRKb2luKHhzLCBpbmRlbnQpICsgJ10nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnWyAnICsgJGpvaW4uY2FsbCh4cywgJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKCEoJ2NhdXNlJyBpbiBFcnJvci5wcm90b3R5cGUpICYmICdjYXVzZScgaW4gb2JqICYmICFpc0VudW1lcmFibGUuY2FsbChvYmosICdjYXVzZScpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3sgWycgKyBTdHJpbmcob2JqKSArICddICcgKyAkam9pbi5jYWxsKCRjb25jYXQuY2FsbCgnW2NhdXNlXTogJyArIGluc3BlY3Qob2JqLmNhdXNlKSwgcGFydHMpLCAnLCAnKSArICcgfSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgJGpvaW4uY2FsbChwYXJ0cywgJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgY3VzdG9tSW5zcGVjdCkge1xuICAgICAgICBpZiAoaW5zcGVjdFN5bWJvbCAmJiB0eXBlb2Ygb2JqW2luc3BlY3RTeW1ib2xdID09PSAnZnVuY3Rpb24nICYmIHV0aWxJbnNwZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbEluc3BlY3Qob2JqLCB7IGRlcHRoOiBtYXhEZXB0aCAtIGRlcHRoIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGN1c3RvbUluc3BlY3QgIT09ICdzeW1ib2wnICYmIHR5cGVvZiBvYmouaW5zcGVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIG9iai5pbnNwZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzTWFwKG9iaikpIHtcbiAgICAgICAgdmFyIG1hcFBhcnRzID0gW107XG4gICAgICAgIGlmIChtYXBGb3JFYWNoKSB7XG4gICAgICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgICAgIG1hcFBhcnRzLnB1c2goaW5zcGVjdChrZXksIG9iaiwgdHJ1ZSkgKyAnID0+ICcgKyBpbnNwZWN0KHZhbHVlLCBvYmopKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uT2YoJ01hcCcsIG1hcFNpemUuY2FsbChvYmopLCBtYXBQYXJ0cywgaW5kZW50KTtcbiAgICB9XG4gICAgaWYgKGlzU2V0KG9iaikpIHtcbiAgICAgICAgdmFyIHNldFBhcnRzID0gW107XG4gICAgICAgIGlmIChzZXRGb3JFYWNoKSB7XG4gICAgICAgICAgICBzZXRGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICAvLyBub3RlOiBpbiBJRSA4LCBzb21ldGltZXMgYGdsb2JhbCAhPT0gd2luZG93YCBidXQgYm90aCBhcmUgdGhlIHByb3RvdHlwZXMgb2YgZWFjaCBvdGhlclxuICAgIC8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiBvYmogPT09IHdpbmRvdykge1xuICAgICAgICByZXR1cm4gJ3sgW29iamVjdCBXaW5kb3ddIH0nO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAgICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgJiYgb2JqID09PSBnbG9iYWxUaGlzKVxuICAgICAgICB8fCAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgb2JqID09PSBnbG9iYWwpXG4gICAgKSB7XG4gICAgICAgIHJldHVybiAneyBbb2JqZWN0IGdsb2JhbFRoaXNdIH0nO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyAkc2xpY2UuY2FsbCh0b1N0cihvYmopLCA4LCAtMSkgOiBwcm90b1RhZyA/ICdPYmplY3QnIDogJyc7XG4gICAgICAgIHZhciBjb25zdHJ1Y3RvclRhZyA9IGlzUGxhaW5PYmplY3QgfHwgdHlwZW9mIG9iai5jb25zdHJ1Y3RvciAhPT0gJ2Z1bmN0aW9uJyA/ICcnIDogb2JqLmNvbnN0cnVjdG9yLm5hbWUgPyBvYmouY29uc3RydWN0b3IubmFtZSArICcgJyA6ICcnO1xuICAgICAgICB2YXIgdGFnID0gY29uc3RydWN0b3JUYWcgKyAoc3RyaW5nVGFnIHx8IHByb3RvVGFnID8gJ1snICsgJGpvaW4uY2FsbCgkY29uY2F0LmNhbGwoW10sIHN0cmluZ1RhZyB8fCBbXSwgcHJvdG9UYWcgfHwgW10pLCAnOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArICRqb2luLmNhbGwoeXMsICcsICcpICsgJyB9JztcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyhvYmopO1xufTtcblxuZnVuY3Rpb24gd3JhcFF1b3RlcyhzLCBkZWZhdWx0U3R5bGUsIG9wdHMpIHtcbiAgICB2YXIgcXVvdGVDaGFyID0gKG9wdHMucXVvdGVTdHlsZSB8fCBkZWZhdWx0U3R5bGUpID09PSAnZG91YmxlJyA/ICdcIicgOiBcIidcIjtcbiAgICByZXR1cm4gcXVvdGVDaGFyICsgcyArIHF1b3RlQ2hhcjtcbn1cblxuZnVuY3Rpb24gcXVvdGUocykge1xuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKFN0cmluZyhzKSwgL1wiL2csICcmcXVvdDsnKTtcbn1cblxuZnVuY3Rpb24gaXNBcnJheShvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0RhdGUob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBEYXRlXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc1JlZ0V4cChvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IFJlZ0V4cF0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNFcnJvcihvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IEVycm9yXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc1N0cmluZyhvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IFN0cmluZ10nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNOdW1iZXIob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBOdW1iZXJdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzQm9vbGVhbihvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IEJvb2xlYW5dJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cblxuLy8gU3ltYm9sIGFuZCBCaWdJbnQgZG8gaGF2ZSBTeW1ib2wudG9TdHJpbmdUYWcgYnkgc3BlYywgc28gdGhhdCBjYW4ndCBiZSB1c2VkIHRvIGVsaW1pbmF0ZSBmYWxzZSBwb3NpdGl2ZXNcbmZ1bmN0aW9uIGlzU3ltYm9sKG9iaikge1xuICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scykge1xuICAgICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiBpbnN0YW5jZW9mIFN5bWJvbDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzeW1ib2wnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCAhc3ltVG9TdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBzeW1Ub1N0cmluZy5jYWxsKG9iaik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0JpZ0ludChvYmopIHtcbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCAhYmlnSW50VmFsdWVPZikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGJpZ0ludFZhbHVlT2YuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxudmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkgfHwgZnVuY3Rpb24gKGtleSkgeyByZXR1cm4ga2V5IGluIHRoaXM7IH07XG5mdW5jdGlvbiBoYXMob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gaGFzT3duLmNhbGwob2JqLCBrZXkpO1xufVxuXG5mdW5jdGlvbiB0b1N0cihvYmopIHtcbiAgICByZXR1cm4gb2JqZWN0VG9TdHJpbmcuY2FsbChvYmopO1xufVxuXG5mdW5jdGlvbiBuYW1lT2YoZikge1xuICAgIGlmIChmLm5hbWUpIHsgcmV0dXJuIGYubmFtZTsgfVxuICAgIHZhciBtID0gJG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKCRzbGljZS5jYWxsKHN0ciwgMCwgb3B0cy5tYXhTdHJpbmdMZW5ndGgpLCBvcHRzKSArIHRyYWlsZXI7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG4gICAgdmFyIHMgPSAkcmVwbGFjZS5jYWxsKCRyZXBsYWNlLmNhbGwoc3RyLCAvKFsnXFxcXF0pL2csICdcXFxcJDEnKSwgL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyAkdG9VcHBlckNhc2UuY2FsbChuLnRvU3RyaW5nKDE2KSk7XG59XG5cbmZ1bmN0aW9uIG1hcmtCb3hlZChzdHIpIHtcbiAgICByZXR1cm4gJ09iamVjdCgnICsgc3RyICsgJyknO1xufVxuXG5mdW5jdGlvbiB3ZWFrQ29sbGVjdGlvbk9mKHR5cGUpIHtcbiAgICByZXR1cm4gdHlwZSArICcgeyA/IH0nO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0aW9uT2YodHlwZSwgc2l6ZSwgZW50cmllcywgaW5kZW50KSB7XG4gICAgdmFyIGpvaW5lZEVudHJpZXMgPSBpbmRlbnQgPyBpbmRlbnRlZEpvaW4oZW50cmllcywgaW5kZW50KSA6ICRqb2luLmNhbGwoZW50cmllcywgJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICRqb2luLmNhbGwoQXJyYXkob3B0cy5pbmRlbnQgKyAxKSwgJyAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYmFzZTogYmFzZUluZGVudCxcbiAgICAgICAgcHJldjogJGpvaW4uY2FsbChBcnJheShkZXB0aCArIDEpLCBiYXNlSW5kZW50KVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGluZGVudGVkSm9pbih4cywgaW5kZW50KSB7XG4gICAgaWYgKHhzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJyc7IH1cbiAgICB2YXIgbGluZUpvaW5lciA9ICdcXG4nICsgaW5kZW50LnByZXYgKyBpbmRlbnQuYmFzZTtcbiAgICByZXR1cm4gbGluZUpvaW5lciArICRqb2luLmNhbGwoeHMsICcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCR0ZXN0LmNhbGwoL1teXFx3JF0vLCBrZXkpKSB7XG4gICAgICAgICAgICB4cy5wdXNoKGluc3BlY3Qoa2V5LCBvYmopICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeHMucHVzaChrZXkgKyAnOiAnICsgaW5zcGVjdChvYmpba2V5XSwgb2JqKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3ltcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKGlzRW51bWVyYWJsZS5jYWxsKG9iaiwgc3ltc1tqXSkpIHtcbiAgICAgICAgICAgICAgICB4cy5wdXNoKCdbJyArIGluc3BlY3Qoc3ltc1tqXSkgKyAnXTogJyArIGluc3BlY3Qob2JqW3N5bXNbal1dLCBvYmopKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geHM7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGluc3BlY3QgPSByZXF1aXJlKCdvYmplY3QtaW5zcGVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy90eXBlJyk7XG52YXIgJFdlYWtNYXAgPSBHZXRJbnRyaW5zaWMoJyVXZWFrTWFwJScsIHRydWUpO1xudmFyICRNYXAgPSBHZXRJbnRyaW5zaWMoJyVNYXAlJywgdHJ1ZSk7XG5cbnZhciAkd2Vha01hcEdldCA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuZ2V0JywgdHJ1ZSk7XG52YXIgJHdlYWtNYXBTZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwSGFzID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5oYXMnLCB0cnVlKTtcbnZhciAkbWFwR2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICRtYXBTZXQgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuc2V0JywgdHJ1ZSk7XG52YXIgJG1hcEhhcyA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5oYXMnLCB0cnVlKTtcblxuLypcbiogVGhpcyBmdW5jdGlvbiB0cmF2ZXJzZXMgdGhlIGxpc3QgcmV0dXJuaW5nIHRoZSBub2RlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGtleS5cbipcbiogVGhhdCBub2RlIGlzIGFsc28gbW92ZWQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QsIHNvIHRoYXQgaWYgaXQncyBhY2Nlc3NlZCBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseSB1c2VkIG5vZGVzIGNhbiBiZSBhY2Nlc3NlZCByZWxhdGl2ZWx5IHF1aWNrbHkuXG4qL1xuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKS5saXN0R2V0Tm9kZX0gKi9cbnZhciBsaXN0R2V0Tm9kZSA9IGZ1bmN0aW9uIChsaXN0LCBrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHQvKiogQHR5cGUge3R5cGVvZiBsaXN0IHwgTm9uTnVsbGFibGU8KHR5cGVvZiBsaXN0KVsnbmV4dCddPn0gKi9cblx0dmFyIHByZXYgPSBsaXN0O1xuXHQvKiogQHR5cGUgeyh0eXBlb2YgbGlzdClbJ25leHQnXX0gKi9cblx0dmFyIGN1cnI7XG5cdGZvciAoOyAoY3VyciA9IHByZXYubmV4dCkgIT09IG51bGw7IHByZXYgPSBjdXJyKSB7XG5cdFx0aWYgKGN1cnIua2V5ID09PSBrZXkpIHtcblx0XHRcdHByZXYubmV4dCA9IGN1cnIubmV4dDtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRyYS1wYXJlbnNcblx0XHRcdGN1cnIubmV4dCA9IC8qKiBAdHlwZSB7Tm9uTnVsbGFibGU8dHlwZW9mIGxpc3QubmV4dD59ICovIChsaXN0Lm5leHQpO1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpLmxpc3RHZXR9ICovXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbi8qKiBAdHlwZSB7aW1wb3J0KCcuJykubGlzdFNldH0gKi9cbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0gLyoqIEB0eXBlIHtpbXBvcnQoJy4nKS5MaXN0Tm9kZTx0eXBlb2YgdmFsdWU+fSAqLyAoeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduLCBuby1leHRyYS1wYXJlbnNcblx0XHRcdGtleToga2V5LFxuXHRcdFx0bmV4dDogb2JqZWN0cy5uZXh0LFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fSk7XG5cdH1cbn07XG4vKiogQHR5cGUge2ltcG9ydCgnLicpLmxpc3RIYXN9ICovXG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFNpZGVDaGFubmVsKCkge1xuXHQvKiogQHR5cGUge1dlYWtNYXA8b2JqZWN0LCB1bmtub3duPn0gKi8gdmFyICR3bTtcblx0LyoqIEB0eXBlIHtNYXA8b2JqZWN0LCB1bmtub3duPn0gKi8gdmFyICRtO1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLicpLlJvb3ROb2RlPHVua25vd24+fSAqLyB2YXIgJG87XG5cblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4nKS5DaGFubmVsfSAqL1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8vIEluaXRpYWxpemUgdGhlIGxpbmtlZCBsaXN0IGFzIGFuIGVtcHR5IG5vZGUsIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBzcGVjaWFsLWNhc2UgaGFuZGxpbmcgb2YgdGhlIGZpcnN0IG5vZGU6IHdlIGNhbiBhbHdheXMgcmVmZXIgdG8gaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcbnZhciBwZXJjZW50VHdlbnRpZXMgPSAvJTIwL2c7XG5cbnZhciBGb3JtYXQgPSB7XG4gICAgUkZDMTczODogJ1JGQzE3MzgnLFxuICAgIFJGQzM5ODY6ICdSRkMzOTg2J1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgJ2RlZmF1bHQnOiBGb3JtYXQuUkZDMzk4NixcbiAgICBmb3JtYXR0ZXJzOiB7XG4gICAgICAgIFJGQzE3Mzg6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2UuY2FsbCh2YWx1ZSwgcGVyY2VudFR3ZW50aWVzLCAnKycpO1xuICAgICAgICB9LFxuICAgICAgICBSRkMzOTg2OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBSRkMxNzM4OiBGb3JtYXQuUkZDMTczOCxcbiAgICBSRkMzOTg2OiBGb3JtYXQuUkZDMzk4NlxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGZvcm1hdHMgPSByZXF1aXJlKCcuL2Zvcm1hdHMnKTtcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbnZhciBoZXhUYWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgICAgICBhcnJheS5wdXNoKCclJyArICgoaSA8IDE2ID8gJzAnIDogJycpICsgaS50b1N0cmluZygxNikpLnRvVXBwZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbn0oKSk7XG5cbnZhciBjb21wYWN0UXVldWUgPSBmdW5jdGlvbiBjb21wYWN0UXVldWUocXVldWUpIHtcbiAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMSkge1xuICAgICAgICB2YXIgaXRlbSA9IHF1ZXVlLnBvcCgpO1xuICAgICAgICB2YXIgb2JqID0gaXRlbS5vYmpbaXRlbS5wcm9wXTtcblxuICAgICAgICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgICB2YXIgY29tcGFjdGVkID0gW107XG5cbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgb2JqLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmpbal0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBhY3RlZC5wdXNoKG9ialtqXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpdGVtLm9ialtpdGVtLnByb3BdID0gY29tcGFjdGVkO1xuICAgICAgICB9XG4gICAgfVxufTtcblxudmFyIGFycmF5VG9PYmplY3QgPSBmdW5jdGlvbiBhcnJheVRvT2JqZWN0KHNvdXJjZSwgb3B0aW9ucykge1xuICAgIHZhciBvYmogPSBvcHRpb25zICYmIG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlW2ldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgb2JqW2ldID0gc291cmNlW2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBtZXJnZSA9IGZ1bmN0aW9uIG1lcmdlKHRhcmdldCwgc291cmNlLCBvcHRpb25zKSB7XG4gICAgLyogZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOiAwICovXG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodGFyZ2V0KSkge1xuICAgICAgICAgICAgdGFyZ2V0LnB1c2goc291cmNlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgJiYgdHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmICgob3B0aW9ucyAmJiAob3B0aW9ucy5wbGFpbk9iamVjdHMgfHwgb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpKSB8fCAhaGFzLmNhbGwoT2JqZWN0LnByb3RvdHlwZSwgc291cmNlKSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtzb3VyY2VdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbdGFyZ2V0LCBzb3VyY2VdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldCB8fCB0eXBlb2YgdGFyZ2V0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gW3RhcmdldF0uY29uY2F0KHNvdXJjZSk7XG4gICAgfVxuXG4gICAgdmFyIG1lcmdlVGFyZ2V0ID0gdGFyZ2V0O1xuICAgIGlmIChpc0FycmF5KHRhcmdldCkgJiYgIWlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICBtZXJnZVRhcmdldCA9IGFycmF5VG9PYmplY3QodGFyZ2V0LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoaXNBcnJheSh0YXJnZXQpICYmIGlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICBzb3VyY2UuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaSkge1xuICAgICAgICAgICAgaWYgKGhhcy5jYWxsKHRhcmdldCwgaSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0SXRlbSA9IHRhcmdldFtpXTtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0SXRlbSAmJiB0eXBlb2YgdGFyZ2V0SXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAmJiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2ldID0gbWVyZ2UodGFyZ2V0SXRlbSwgaXRlbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbaV0gPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc291cmNlKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywga2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHNvdXJjZVtrZXldO1xuXG4gICAgICAgIGlmIChoYXMuY2FsbChhY2MsIGtleSkpIHtcbiAgICAgICAgICAgIGFjY1trZXldID0gbWVyZ2UoYWNjW2tleV0sIHZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjY1trZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBtZXJnZVRhcmdldCk7XG59O1xuXG52YXIgYXNzaWduID0gZnVuY3Rpb24gYXNzaWduU2luZ2xlU291cmNlKHRhcmdldCwgc291cmNlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHNvdXJjZSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGtleSkge1xuICAgICAgICBhY2Nba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHRhcmdldCk7XG59O1xuXG52YXIgZGVjb2RlID0gZnVuY3Rpb24gKHN0ciwgZGVjb2RlciwgY2hhcnNldCkge1xuICAgIHZhciBzdHJXaXRob3V0UGx1cyA9IHN0ci5yZXBsYWNlKC9cXCsvZywgJyAnKTtcbiAgICBpZiAoY2hhcnNldCA9PT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgIC8vIHVuZXNjYXBlIG5ldmVyIHRocm93cywgbm8gdHJ5Li4uY2F0Y2ggbmVlZGVkOlxuICAgICAgICByZXR1cm4gc3RyV2l0aG91dFBsdXMucmVwbGFjZSgvJVswLTlhLWZdezJ9L2dpLCB1bmVzY2FwZSk7XG4gICAgfVxuICAgIC8vIHV0Zi04XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChzdHJXaXRob3V0UGx1cyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gc3RyV2l0aG91dFBsdXM7XG4gICAgfVxufTtcblxudmFyIGxpbWl0ID0gMTAyNDtcblxuLyogZXNsaW50IG9wZXJhdG9yLWxpbmVicmVhazogWzIsIFwiYmVmb3JlXCJdICovXG5cbnZhciBlbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoc3RyLCBkZWZhdWx0RW5jb2RlciwgY2hhcnNldCwga2luZCwgZm9ybWF0KSB7XG4gICAgLy8gVGhpcyBjb2RlIHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQnJpYW4gV2hpdGUgKG1zY2RleCkgZm9yIHRoZSBpby5qcyBjb3JlIHF1ZXJ5c3RyaW5nIGxpYnJhcnkuXG4gICAgLy8gSXQgaGFzIGJlZW4gYWRhcHRlZCBoZXJlIGZvciBzdHJpY3RlciBhZGhlcmVuY2UgdG8gUkZDIDM5ODZcbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIHZhciBzdHJpbmcgPSBzdHI7XG4gICAgaWYgKHR5cGVvZiBzdHIgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgIHN0cmluZyA9IFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzdHIpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgc3RyaW5nID0gU3RyaW5nKHN0cik7XG4gICAgfVxuXG4gICAgaWYgKGNoYXJzZXQgPT09ICdpc28tODg1OS0xJykge1xuICAgICAgICByZXR1cm4gZXNjYXBlKHN0cmluZykucmVwbGFjZSgvJXVbMC05YS1mXXs0fS9naSwgZnVuY3Rpb24gKCQwKSB7XG4gICAgICAgICAgICByZXR1cm4gJyUyNiUyMycgKyBwYXJzZUludCgkMC5zbGljZSgyKSwgMTYpICsgJyUzQic7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBvdXQgPSAnJztcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN0cmluZy5sZW5ndGg7IGogKz0gbGltaXQpIHtcbiAgICAgICAgdmFyIHNlZ21lbnQgPSBzdHJpbmcubGVuZ3RoID49IGxpbWl0ID8gc3RyaW5nLnNsaWNlKGosIGogKyBsaW1pdCkgOiBzdHJpbmc7XG4gICAgICAgIHZhciBhcnIgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlZ21lbnQubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHZhciBjID0gc2VnbWVudC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGMgPT09IDB4MkQgLy8gLVxuICAgICAgICAgICAgICAgIHx8IGMgPT09IDB4MkUgLy8gLlxuICAgICAgICAgICAgICAgIHx8IGMgPT09IDB4NUYgLy8gX1xuICAgICAgICAgICAgICAgIHx8IGMgPT09IDB4N0UgLy8gflxuICAgICAgICAgICAgICAgIHx8IChjID49IDB4MzAgJiYgYyA8PSAweDM5KSAvLyAwLTlcbiAgICAgICAgICAgICAgICB8fCAoYyA+PSAweDQxICYmIGMgPD0gMHg1QSkgLy8gYS16XG4gICAgICAgICAgICAgICAgfHwgKGMgPj0gMHg2MSAmJiBjIDw9IDB4N0EpIC8vIEEtWlxuICAgICAgICAgICAgICAgIHx8IChmb3JtYXQgPT09IGZvcm1hdHMuUkZDMTczOCAmJiAoYyA9PT0gMHgyOCB8fCBjID09PSAweDI5KSkgLy8gKCApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBhcnJbYXJyLmxlbmd0aF0gPSBzZWdtZW50LmNoYXJBdChpKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGMgPCAweDgwKSB7XG4gICAgICAgICAgICAgICAgYXJyW2Fyci5sZW5ndGhdID0gaGV4VGFibGVbY107XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjIDwgMHg4MDApIHtcbiAgICAgICAgICAgICAgICBhcnJbYXJyLmxlbmd0aF0gPSBoZXhUYWJsZVsweEMwIHwgKGMgPj4gNildXG4gICAgICAgICAgICAgICAgICAgICsgaGV4VGFibGVbMHg4MCB8IChjICYgMHgzRildO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYyA8IDB4RDgwMCB8fCBjID49IDB4RTAwMCkge1xuICAgICAgICAgICAgICAgIGFyclthcnIubGVuZ3RoXSA9IGhleFRhYmxlWzB4RTAgfCAoYyA+PiAxMildXG4gICAgICAgICAgICAgICAgICAgICsgaGV4VGFibGVbMHg4MCB8ICgoYyA+PiA2KSAmIDB4M0YpXVxuICAgICAgICAgICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M0YpXTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaSArPSAxO1xuICAgICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKChjICYgMHgzRkYpIDw8IDEwKSB8IChzZWdtZW50LmNoYXJDb2RlQXQoaSkgJiAweDNGRikpO1xuXG4gICAgICAgICAgICBhcnJbYXJyLmxlbmd0aF0gPSBoZXhUYWJsZVsweEYwIHwgKGMgPj4gMTgpXVxuICAgICAgICAgICAgICAgICsgaGV4VGFibGVbMHg4MCB8ICgoYyA+PiAxMikgJiAweDNGKV1cbiAgICAgICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoKGMgPj4gNikgJiAweDNGKV1cbiAgICAgICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M0YpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIG91dCArPSBhcnIuam9pbignJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dDtcbn07XG5cbnZhciBjb21wYWN0ID0gZnVuY3Rpb24gY29tcGFjdCh2YWx1ZSkge1xuICAgIHZhciBxdWV1ZSA9IFt7IG9iajogeyBvOiB2YWx1ZSB9LCBwcm9wOiAnbycgfV07XG4gICAgdmFyIHJlZnMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGl0ZW0gPSBxdWV1ZVtpXTtcbiAgICAgICAgdmFyIG9iaiA9IGl0ZW0ub2JqW2l0ZW0ucHJvcF07XG5cbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtleXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2pdO1xuICAgICAgICAgICAgdmFyIHZhbCA9IG9ialtrZXldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCAmJiByZWZzLmluZGV4T2YodmFsKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZS5wdXNoKHsgb2JqOiBvYmosIHByb3A6IGtleSB9KTtcbiAgICAgICAgICAgICAgICByZWZzLnB1c2godmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBhY3RRdWV1ZShxdWV1ZSk7XG5cbiAgICByZXR1cm4gdmFsdWU7XG59O1xuXG52YXIgaXNSZWdFeHAgPSBmdW5jdGlvbiBpc1JlZ0V4cChvYmopIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufTtcblxudmFyIGlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAhIShvYmouY29uc3RydWN0b3IgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyICYmIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihvYmopKTtcbn07XG5cbnZhciBjb21iaW5lID0gZnVuY3Rpb24gY29tYmluZShhLCBiKSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdChhLCBiKTtcbn07XG5cbnZhciBtYXliZU1hcCA9IGZ1bmN0aW9uIG1heWJlTWFwKHZhbCwgZm4pIHtcbiAgICBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIHZhciBtYXBwZWQgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIG1hcHBlZC5wdXNoKGZuKHZhbFtpXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXBwZWQ7XG4gICAgfVxuICAgIHJldHVybiBmbih2YWwpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYXJyYXlUb09iamVjdDogYXJyYXlUb09iamVjdCxcbiAgICBhc3NpZ246IGFzc2lnbixcbiAgICBjb21iaW5lOiBjb21iaW5lLFxuICAgIGNvbXBhY3Q6IGNvbXBhY3QsXG4gICAgZGVjb2RlOiBkZWNvZGUsXG4gICAgZW5jb2RlOiBlbmNvZGUsXG4gICAgaXNCdWZmZXI6IGlzQnVmZmVyLFxuICAgIGlzUmVnRXhwOiBpc1JlZ0V4cCxcbiAgICBtYXliZU1hcDogbWF5YmVNYXAsXG4gICAgbWVyZ2U6IG1lcmdlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZ2V0U2lkZUNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBmb3JtYXRzID0gcmVxdWlyZSgnLi9mb3JtYXRzJyk7XG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGFycmF5UHJlZml4R2VuZXJhdG9ycyA9IHtcbiAgICBicmFja2V0czogZnVuY3Rpb24gYnJhY2tldHMocHJlZml4KSB7XG4gICAgICAgIHJldHVybiBwcmVmaXggKyAnW10nO1xuICAgIH0sXG4gICAgY29tbWE6ICdjb21tYScsXG4gICAgaW5kaWNlczogZnVuY3Rpb24gaW5kaWNlcyhwcmVmaXgsIGtleSkge1xuICAgICAgICByZXR1cm4gcHJlZml4ICsgJ1snICsga2V5ICsgJ10nO1xuICAgIH0sXG4gICAgcmVwZWF0OiBmdW5jdGlvbiByZXBlYXQocHJlZml4KSB7XG4gICAgICAgIHJldHVybiBwcmVmaXg7XG4gICAgfVxufTtcblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xudmFyIHB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaDtcbnZhciBwdXNoVG9BcnJheSA9IGZ1bmN0aW9uIChhcnIsIHZhbHVlT3JBcnJheSkge1xuICAgIHB1c2guYXBwbHkoYXJyLCBpc0FycmF5KHZhbHVlT3JBcnJheSkgPyB2YWx1ZU9yQXJyYXkgOiBbdmFsdWVPckFycmF5XSk7XG59O1xuXG52YXIgdG9JU08gPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZztcblxudmFyIGRlZmF1bHRGb3JtYXQgPSBmb3JtYXRzWydkZWZhdWx0J107XG52YXIgZGVmYXVsdHMgPSB7XG4gICAgYWRkUXVlcnlQcmVmaXg6IGZhbHNlLFxuICAgIGFsbG93RG90czogZmFsc2UsXG4gICAgYWxsb3dFbXB0eUFycmF5czogZmFsc2UsXG4gICAgYXJyYXlGb3JtYXQ6ICdpbmRpY2VzJyxcbiAgICBjaGFyc2V0OiAndXRmLTgnLFxuICAgIGNoYXJzZXRTZW50aW5lbDogZmFsc2UsXG4gICAgZGVsaW1pdGVyOiAnJicsXG4gICAgZW5jb2RlOiB0cnVlLFxuICAgIGVuY29kZURvdEluS2V5czogZmFsc2UsXG4gICAgZW5jb2RlcjogdXRpbHMuZW5jb2RlLFxuICAgIGVuY29kZVZhbHVlc09ubHk6IGZhbHNlLFxuICAgIGZvcm1hdDogZGVmYXVsdEZvcm1hdCxcbiAgICBmb3JtYXR0ZXI6IGZvcm1hdHMuZm9ybWF0dGVyc1tkZWZhdWx0Rm9ybWF0XSxcbiAgICAvLyBkZXByZWNhdGVkXG4gICAgaW5kaWNlczogZmFsc2UsXG4gICAgc2VyaWFsaXplRGF0ZTogZnVuY3Rpb24gc2VyaWFsaXplRGF0ZShkYXRlKSB7XG4gICAgICAgIHJldHVybiB0b0lTTy5jYWxsKGRhdGUpO1xuICAgIH0sXG4gICAgc2tpcE51bGxzOiBmYWxzZSxcbiAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IGZhbHNlXG59O1xuXG52YXIgaXNOb25OdWxsaXNoUHJpbWl0aXZlID0gZnVuY3Rpb24gaXNOb25OdWxsaXNoUHJpbWl0aXZlKHYpIHtcbiAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdzdHJpbmcnXG4gICAgICAgIHx8IHR5cGVvZiB2ID09PSAnbnVtYmVyJ1xuICAgICAgICB8fCB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgIHx8IHR5cGVvZiB2ID09PSAnc3ltYm9sJ1xuICAgICAgICB8fCB0eXBlb2YgdiA9PT0gJ2JpZ2ludCc7XG59O1xuXG52YXIgc2VudGluZWwgPSB7fTtcblxudmFyIHN0cmluZ2lmeSA9IGZ1bmN0aW9uIHN0cmluZ2lmeShcbiAgICBvYmplY3QsXG4gICAgcHJlZml4LFxuICAgIGdlbmVyYXRlQXJyYXlQcmVmaXgsXG4gICAgY29tbWFSb3VuZFRyaXAsXG4gICAgYWxsb3dFbXB0eUFycmF5cyxcbiAgICBzdHJpY3ROdWxsSGFuZGxpbmcsXG4gICAgc2tpcE51bGxzLFxuICAgIGVuY29kZURvdEluS2V5cyxcbiAgICBlbmNvZGVyLFxuICAgIGZpbHRlcixcbiAgICBzb3J0LFxuICAgIGFsbG93RG90cyxcbiAgICBzZXJpYWxpemVEYXRlLFxuICAgIGZvcm1hdCxcbiAgICBmb3JtYXR0ZXIsXG4gICAgZW5jb2RlVmFsdWVzT25seSxcbiAgICBjaGFyc2V0LFxuICAgIHNpZGVDaGFubmVsXG4pIHtcbiAgICB2YXIgb2JqID0gb2JqZWN0O1xuXG4gICAgdmFyIHRtcFNjID0gc2lkZUNoYW5uZWw7XG4gICAgdmFyIHN0ZXAgPSAwO1xuICAgIHZhciBmaW5kRmxhZyA9IGZhbHNlO1xuICAgIHdoaWxlICgodG1wU2MgPSB0bXBTYy5nZXQoc2VudGluZWwpKSAhPT0gdm9pZCB1bmRlZmluZWQgJiYgIWZpbmRGbGFnKSB7XG4gICAgICAgIC8vIFdoZXJlIG9iamVjdCBsYXN0IGFwcGVhcmVkIGluIHRoZSByZWYgdHJlZVxuICAgICAgICB2YXIgcG9zID0gdG1wU2MuZ2V0KG9iamVjdCk7XG4gICAgICAgIHN0ZXAgKz0gMTtcbiAgICAgICAgaWYgKHR5cGVvZiBwb3MgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBpZiAocG9zID09PSBzdGVwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0N5Y2xpYyBvYmplY3QgdmFsdWUnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmluZEZsYWcgPSB0cnVlOyAvLyBCcmVhayB3aGlsZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdG1wU2MuZ2V0KHNlbnRpbmVsKSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHN0ZXAgPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb2JqID0gZmlsdGVyKHByZWZpeCwgb2JqKTtcbiAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgb2JqID0gc2VyaWFsaXplRGF0ZShvYmopO1xuICAgIH0gZWxzZSBpZiAoZ2VuZXJhdGVBcnJheVByZWZpeCA9PT0gJ2NvbW1hJyAmJiBpc0FycmF5KG9iaikpIHtcbiAgICAgICAgb2JqID0gdXRpbHMubWF5YmVNYXAob2JqLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChvYmogPT09IG51bGwpIHtcbiAgICAgICAgaWYgKHN0cmljdE51bGxIYW5kbGluZykge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZXIgJiYgIWVuY29kZVZhbHVlc09ubHkgPyBlbmNvZGVyKHByZWZpeCwgZGVmYXVsdHMuZW5jb2RlciwgY2hhcnNldCwgJ2tleScsIGZvcm1hdCkgOiBwcmVmaXg7XG4gICAgICAgIH1cblxuICAgICAgICBvYmogPSAnJztcbiAgICB9XG5cbiAgICBpZiAoaXNOb25OdWxsaXNoUHJpbWl0aXZlKG9iaikgfHwgdXRpbHMuaXNCdWZmZXIob2JqKSkge1xuICAgICAgICBpZiAoZW5jb2Rlcikge1xuICAgICAgICAgICAgdmFyIGtleVZhbHVlID0gZW5jb2RlVmFsdWVzT25seSA/IHByZWZpeCA6IGVuY29kZXIocHJlZml4LCBkZWZhdWx0cy5lbmNvZGVyLCBjaGFyc2V0LCAna2V5JywgZm9ybWF0KTtcbiAgICAgICAgICAgIHJldHVybiBbZm9ybWF0dGVyKGtleVZhbHVlKSArICc9JyArIGZvcm1hdHRlcihlbmNvZGVyKG9iaiwgZGVmYXVsdHMuZW5jb2RlciwgY2hhcnNldCwgJ3ZhbHVlJywgZm9ybWF0KSldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbZm9ybWF0dGVyKHByZWZpeCkgKyAnPScgKyBmb3JtYXR0ZXIoU3RyaW5nKG9iaikpXTtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWVzID0gW107XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9XG5cbiAgICB2YXIgb2JqS2V5cztcbiAgICBpZiAoZ2VuZXJhdGVBcnJheVByZWZpeCA9PT0gJ2NvbW1hJyAmJiBpc0FycmF5KG9iaikpIHtcbiAgICAgICAgLy8gd2UgbmVlZCB0byBqb2luIGVsZW1lbnRzIGluXG4gICAgICAgIGlmIChlbmNvZGVWYWx1ZXNPbmx5ICYmIGVuY29kZXIpIHtcbiAgICAgICAgICAgIG9iaiA9IHV0aWxzLm1heWJlTWFwKG9iaiwgZW5jb2Rlcik7XG4gICAgICAgIH1cbiAgICAgICAgb2JqS2V5cyA9IFt7IHZhbHVlOiBvYmoubGVuZ3RoID4gMCA/IG9iai5qb2luKCcsJykgfHwgbnVsbCA6IHZvaWQgdW5kZWZpbmVkIH1dO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShmaWx0ZXIpKSB7XG4gICAgICAgIG9iaktleXMgPSBmaWx0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICBvYmpLZXlzID0gc29ydCA/IGtleXMuc29ydChzb3J0KSA6IGtleXM7XG4gICAgfVxuXG4gICAgdmFyIGVuY29kZWRQcmVmaXggPSBlbmNvZGVEb3RJbktleXMgPyBwcmVmaXgucmVwbGFjZSgvXFwuL2csICclMkUnKSA6IHByZWZpeDtcblxuICAgIHZhciBhZGp1c3RlZFByZWZpeCA9IGNvbW1hUm91bmRUcmlwICYmIGlzQXJyYXkob2JqKSAmJiBvYmoubGVuZ3RoID09PSAxID8gZW5jb2RlZFByZWZpeCArICdbXScgOiBlbmNvZGVkUHJlZml4O1xuXG4gICAgaWYgKGFsbG93RW1wdHlBcnJheXMgJiYgaXNBcnJheShvYmopICYmIG9iai5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGFkanVzdGVkUHJlZml4ICsgJ1tdJztcbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG9iaktleXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgdmFyIGtleSA9IG9iaktleXNbal07XG4gICAgICAgIHZhciB2YWx1ZSA9IHR5cGVvZiBrZXkgPT09ICdvYmplY3QnICYmIHR5cGVvZiBrZXkudmFsdWUgIT09ICd1bmRlZmluZWQnID8ga2V5LnZhbHVlIDogb2JqW2tleV07XG5cbiAgICAgICAgaWYgKHNraXBOdWxscyAmJiB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZW5jb2RlZEtleSA9IGFsbG93RG90cyAmJiBlbmNvZGVEb3RJbktleXMgPyBrZXkucmVwbGFjZSgvXFwuL2csICclMkUnKSA6IGtleTtcbiAgICAgICAgdmFyIGtleVByZWZpeCA9IGlzQXJyYXkob2JqKVxuICAgICAgICAgICAgPyB0eXBlb2YgZ2VuZXJhdGVBcnJheVByZWZpeCA9PT0gJ2Z1bmN0aW9uJyA/IGdlbmVyYXRlQXJyYXlQcmVmaXgoYWRqdXN0ZWRQcmVmaXgsIGVuY29kZWRLZXkpIDogYWRqdXN0ZWRQcmVmaXhcbiAgICAgICAgICAgIDogYWRqdXN0ZWRQcmVmaXggKyAoYWxsb3dEb3RzID8gJy4nICsgZW5jb2RlZEtleSA6ICdbJyArIGVuY29kZWRLZXkgKyAnXScpO1xuXG4gICAgICAgIHNpZGVDaGFubmVsLnNldChvYmplY3QsIHN0ZXApO1xuICAgICAgICB2YXIgdmFsdWVTaWRlQ2hhbm5lbCA9IGdldFNpZGVDaGFubmVsKCk7XG4gICAgICAgIHZhbHVlU2lkZUNoYW5uZWwuc2V0KHNlbnRpbmVsLCBzaWRlQ2hhbm5lbCk7XG4gICAgICAgIHB1c2hUb0FycmF5KHZhbHVlcywgc3RyaW5naWZ5KFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBrZXlQcmVmaXgsXG4gICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgICAgICAgICAgY29tbWFSb3VuZFRyaXAsXG4gICAgICAgICAgICBhbGxvd0VtcHR5QXJyYXlzLFxuICAgICAgICAgICAgc3RyaWN0TnVsbEhhbmRsaW5nLFxuICAgICAgICAgICAgc2tpcE51bGxzLFxuICAgICAgICAgICAgZW5jb2RlRG90SW5LZXlzLFxuICAgICAgICAgICAgZ2VuZXJhdGVBcnJheVByZWZpeCA9PT0gJ2NvbW1hJyAmJiBlbmNvZGVWYWx1ZXNPbmx5ICYmIGlzQXJyYXkob2JqKSA/IG51bGwgOiBlbmNvZGVyLFxuICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgICAgc29ydCxcbiAgICAgICAgICAgIGFsbG93RG90cyxcbiAgICAgICAgICAgIHNlcmlhbGl6ZURhdGUsXG4gICAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgICBmb3JtYXR0ZXIsXG4gICAgICAgICAgICBlbmNvZGVWYWx1ZXNPbmx5LFxuICAgICAgICAgICAgY2hhcnNldCxcbiAgICAgICAgICAgIHZhbHVlU2lkZUNoYW5uZWxcbiAgICAgICAgKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlcztcbn07XG5cbnZhciBub3JtYWxpemVTdHJpbmdpZnlPcHRpb25zID0gZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5naWZ5T3B0aW9ucyhvcHRzKSB7XG4gICAgaWYgKCFvcHRzKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdHMuYWxsb3dFbXB0eUFycmF5cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9wdHMuYWxsb3dFbXB0eUFycmF5cyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2BhbGxvd0VtcHR5QXJyYXlzYCBvcHRpb24gY2FuIG9ubHkgYmUgYHRydWVgIG9yIGBmYWxzZWAsIHdoZW4gcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdHMuZW5jb2RlRG90SW5LZXlzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb3B0cy5lbmNvZGVEb3RJbktleXMgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgZW5jb2RlRG90SW5LZXlzYCBvcHRpb24gY2FuIG9ubHkgYmUgYHRydWVgIG9yIGBmYWxzZWAsIHdoZW4gcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5lbmNvZGVyICE9PSBudWxsICYmIHR5cGVvZiBvcHRzLmVuY29kZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBvcHRzLmVuY29kZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRW5jb2RlciBoYXMgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhcnNldCA9IG9wdHMuY2hhcnNldCB8fCBkZWZhdWx0cy5jaGFyc2V0O1xuICAgIGlmICh0eXBlb2Ygb3B0cy5jaGFyc2V0ICE9PSAndW5kZWZpbmVkJyAmJiBvcHRzLmNoYXJzZXQgIT09ICd1dGYtOCcgJiYgb3B0cy5jaGFyc2V0ICE9PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGNoYXJzZXQgb3B0aW9uIG11c3QgYmUgZWl0aGVyIHV0Zi04LCBpc28tODg1OS0xLCBvciB1bmRlZmluZWQnKTtcbiAgICB9XG5cbiAgICB2YXIgZm9ybWF0ID0gZm9ybWF0c1snZGVmYXVsdCddO1xuICAgIGlmICh0eXBlb2Ygb3B0cy5mb3JtYXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmICghaGFzLmNhbGwoZm9ybWF0cy5mb3JtYXR0ZXJzLCBvcHRzLmZvcm1hdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZm9ybWF0IG9wdGlvbiBwcm92aWRlZC4nKTtcbiAgICAgICAgfVxuICAgICAgICBmb3JtYXQgPSBvcHRzLmZvcm1hdDtcbiAgICB9XG4gICAgdmFyIGZvcm1hdHRlciA9IGZvcm1hdHMuZm9ybWF0dGVyc1tmb3JtYXRdO1xuXG4gICAgdmFyIGZpbHRlciA9IGRlZmF1bHRzLmZpbHRlcjtcbiAgICBpZiAodHlwZW9mIG9wdHMuZmlsdGVyID09PSAnZnVuY3Rpb24nIHx8IGlzQXJyYXkob3B0cy5maWx0ZXIpKSB7XG4gICAgICAgIGZpbHRlciA9IG9wdHMuZmlsdGVyO1xuICAgIH1cblxuICAgIHZhciBhcnJheUZvcm1hdDtcbiAgICBpZiAob3B0cy5hcnJheUZvcm1hdCBpbiBhcnJheVByZWZpeEdlbmVyYXRvcnMpIHtcbiAgICAgICAgYXJyYXlGb3JtYXQgPSBvcHRzLmFycmF5Rm9ybWF0O1xuICAgIH0gZWxzZSBpZiAoJ2luZGljZXMnIGluIG9wdHMpIHtcbiAgICAgICAgYXJyYXlGb3JtYXQgPSBvcHRzLmluZGljZXMgPyAnaW5kaWNlcycgOiAncmVwZWF0JztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhcnJheUZvcm1hdCA9IGRlZmF1bHRzLmFycmF5Rm9ybWF0O1xuICAgIH1cblxuICAgIGlmICgnY29tbWFSb3VuZFRyaXAnIGluIG9wdHMgJiYgdHlwZW9mIG9wdHMuY29tbWFSb3VuZFRyaXAgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgY29tbWFSb3VuZFRyaXBgIG11c3QgYmUgYSBib29sZWFuLCBvciBhYnNlbnQnKTtcbiAgICB9XG5cbiAgICB2YXIgYWxsb3dEb3RzID0gdHlwZW9mIG9wdHMuYWxsb3dEb3RzID09PSAndW5kZWZpbmVkJyA/IG9wdHMuZW5jb2RlRG90SW5LZXlzID09PSB0cnVlID8gdHJ1ZSA6IGRlZmF1bHRzLmFsbG93RG90cyA6ICEhb3B0cy5hbGxvd0RvdHM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBhZGRRdWVyeVByZWZpeDogdHlwZW9mIG9wdHMuYWRkUXVlcnlQcmVmaXggPT09ICdib29sZWFuJyA/IG9wdHMuYWRkUXVlcnlQcmVmaXggOiBkZWZhdWx0cy5hZGRRdWVyeVByZWZpeCxcbiAgICAgICAgYWxsb3dEb3RzOiBhbGxvd0RvdHMsXG4gICAgICAgIGFsbG93RW1wdHlBcnJheXM6IHR5cGVvZiBvcHRzLmFsbG93RW1wdHlBcnJheXMgPT09ICdib29sZWFuJyA/ICEhb3B0cy5hbGxvd0VtcHR5QXJyYXlzIDogZGVmYXVsdHMuYWxsb3dFbXB0eUFycmF5cyxcbiAgICAgICAgYXJyYXlGb3JtYXQ6IGFycmF5Rm9ybWF0LFxuICAgICAgICBjaGFyc2V0OiBjaGFyc2V0LFxuICAgICAgICBjaGFyc2V0U2VudGluZWw6IHR5cGVvZiBvcHRzLmNoYXJzZXRTZW50aW5lbCA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5jaGFyc2V0U2VudGluZWwgOiBkZWZhdWx0cy5jaGFyc2V0U2VudGluZWwsXG4gICAgICAgIGNvbW1hUm91bmRUcmlwOiBvcHRzLmNvbW1hUm91bmRUcmlwLFxuICAgICAgICBkZWxpbWl0ZXI6IHR5cGVvZiBvcHRzLmRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0cy5kZWxpbWl0ZXIgOiBvcHRzLmRlbGltaXRlcixcbiAgICAgICAgZW5jb2RlOiB0eXBlb2Ygb3B0cy5lbmNvZGUgPT09ICdib29sZWFuJyA/IG9wdHMuZW5jb2RlIDogZGVmYXVsdHMuZW5jb2RlLFxuICAgICAgICBlbmNvZGVEb3RJbktleXM6IHR5cGVvZiBvcHRzLmVuY29kZURvdEluS2V5cyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5lbmNvZGVEb3RJbktleXMgOiBkZWZhdWx0cy5lbmNvZGVEb3RJbktleXMsXG4gICAgICAgIGVuY29kZXI6IHR5cGVvZiBvcHRzLmVuY29kZXIgPT09ICdmdW5jdGlvbicgPyBvcHRzLmVuY29kZXIgOiBkZWZhdWx0cy5lbmNvZGVyLFxuICAgICAgICBlbmNvZGVWYWx1ZXNPbmx5OiB0eXBlb2Ygb3B0cy5lbmNvZGVWYWx1ZXNPbmx5ID09PSAnYm9vbGVhbicgPyBvcHRzLmVuY29kZVZhbHVlc09ubHkgOiBkZWZhdWx0cy5lbmNvZGVWYWx1ZXNPbmx5LFxuICAgICAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICAgICAgZm9ybWF0OiBmb3JtYXQsXG4gICAgICAgIGZvcm1hdHRlcjogZm9ybWF0dGVyLFxuICAgICAgICBzZXJpYWxpemVEYXRlOiB0eXBlb2Ygb3B0cy5zZXJpYWxpemVEYXRlID09PSAnZnVuY3Rpb24nID8gb3B0cy5zZXJpYWxpemVEYXRlIDogZGVmYXVsdHMuc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgc2tpcE51bGxzOiB0eXBlb2Ygb3B0cy5za2lwTnVsbHMgPT09ICdib29sZWFuJyA/IG9wdHMuc2tpcE51bGxzIDogZGVmYXVsdHMuc2tpcE51bGxzLFxuICAgICAgICBzb3J0OiB0eXBlb2Ygb3B0cy5zb3J0ID09PSAnZnVuY3Rpb24nID8gb3B0cy5zb3J0IDogbnVsbCxcbiAgICAgICAgc3RyaWN0TnVsbEhhbmRsaW5nOiB0eXBlb2Ygb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgPT09ICdib29sZWFuJyA/IG9wdHMuc3RyaWN0TnVsbEhhbmRsaW5nIDogZGVmYXVsdHMuc3RyaWN0TnVsbEhhbmRsaW5nXG4gICAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgb3B0cykge1xuICAgIHZhciBvYmogPSBvYmplY3Q7XG4gICAgdmFyIG9wdGlvbnMgPSBub3JtYWxpemVTdHJpbmdpZnlPcHRpb25zKG9wdHMpO1xuXG4gICAgdmFyIG9iaktleXM7XG4gICAgdmFyIGZpbHRlcjtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5maWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIG9iaiA9IGZpbHRlcignJywgb2JqKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob3B0aW9ucy5maWx0ZXIpKSB7XG4gICAgICAgIGZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICAgICAgICBvYmpLZXlzID0gZmlsdGVyO1xuICAgIH1cblxuICAgIHZhciBrZXlzID0gW107XG5cbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICB2YXIgZ2VuZXJhdGVBcnJheVByZWZpeCA9IGFycmF5UHJlZml4R2VuZXJhdG9yc1tvcHRpb25zLmFycmF5Rm9ybWF0XTtcbiAgICB2YXIgY29tbWFSb3VuZFRyaXAgPSBnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnY29tbWEnICYmIG9wdGlvbnMuY29tbWFSb3VuZFRyaXA7XG5cbiAgICBpZiAoIW9iaktleXMpIHtcbiAgICAgICAgb2JqS2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc29ydCkge1xuICAgICAgICBvYmpLZXlzLnNvcnQob3B0aW9ucy5zb3J0KTtcbiAgICB9XG5cbiAgICB2YXIgc2lkZUNoYW5uZWwgPSBnZXRTaWRlQ2hhbm5lbCgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqS2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIga2V5ID0gb2JqS2V5c1tpXTtcblxuICAgICAgICBpZiAob3B0aW9ucy5za2lwTnVsbHMgJiYgb2JqW2tleV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHB1c2hUb0FycmF5KGtleXMsIHN0cmluZ2lmeShcbiAgICAgICAgICAgIG9ialtrZXldLFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgZ2VuZXJhdGVBcnJheVByZWZpeCxcbiAgICAgICAgICAgIGNvbW1hUm91bmRUcmlwLFxuICAgICAgICAgICAgb3B0aW9ucy5hbGxvd0VtcHR5QXJyYXlzLFxuICAgICAgICAgICAgb3B0aW9ucy5zdHJpY3ROdWxsSGFuZGxpbmcsXG4gICAgICAgICAgICBvcHRpb25zLnNraXBOdWxscyxcbiAgICAgICAgICAgIG9wdGlvbnMuZW5jb2RlRG90SW5LZXlzLFxuICAgICAgICAgICAgb3B0aW9ucy5lbmNvZGUgPyBvcHRpb25zLmVuY29kZXIgOiBudWxsLFxuICAgICAgICAgICAgb3B0aW9ucy5maWx0ZXIsXG4gICAgICAgICAgICBvcHRpb25zLnNvcnQsXG4gICAgICAgICAgICBvcHRpb25zLmFsbG93RG90cyxcbiAgICAgICAgICAgIG9wdGlvbnMuc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgICAgIG9wdGlvbnMuZm9ybWF0LFxuICAgICAgICAgICAgb3B0aW9ucy5mb3JtYXR0ZXIsXG4gICAgICAgICAgICBvcHRpb25zLmVuY29kZVZhbHVlc09ubHksXG4gICAgICAgICAgICBvcHRpb25zLmNoYXJzZXQsXG4gICAgICAgICAgICBzaWRlQ2hhbm5lbFxuICAgICAgICApKTtcbiAgICB9XG5cbiAgICB2YXIgam9pbmVkID0ga2V5cy5qb2luKG9wdGlvbnMuZGVsaW1pdGVyKTtcbiAgICB2YXIgcHJlZml4ID0gb3B0aW9ucy5hZGRRdWVyeVByZWZpeCA9PT0gdHJ1ZSA/ICc/JyA6ICcnO1xuXG4gICAgaWYgKG9wdGlvbnMuY2hhcnNldFNlbnRpbmVsKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmNoYXJzZXQgPT09ICdpc28tODg1OS0xJykge1xuICAgICAgICAgICAgLy8gZW5jb2RlVVJJQ29tcG9uZW50KCcmIzEwMDAzOycpLCB0aGUgXCJudW1lcmljIGVudGl0eVwiIHJlcHJlc2VudGF0aW9uIG9mIGEgY2hlY2ttYXJrXG4gICAgICAgICAgICBwcmVmaXggKz0gJ3V0Zjg9JTI2JTIzMTAwMDMlM0ImJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGVuY29kZVVSSUNvbXBvbmVudCgn4pyTJylcbiAgICAgICAgICAgIHByZWZpeCArPSAndXRmOD0lRTIlOUMlOTMmJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBqb2luZWQubGVuZ3RoID4gMCA/IHByZWZpeCArIGpvaW5lZCA6ICcnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxudmFyIGRlZmF1bHRzID0ge1xuICAgIGFsbG93RG90czogZmFsc2UsXG4gICAgYWxsb3dFbXB0eUFycmF5czogZmFsc2UsXG4gICAgYWxsb3dQcm90b3R5cGVzOiBmYWxzZSxcbiAgICBhbGxvd1NwYXJzZTogZmFsc2UsXG4gICAgYXJyYXlMaW1pdDogMjAsXG4gICAgY2hhcnNldDogJ3V0Zi04JyxcbiAgICBjaGFyc2V0U2VudGluZWw6IGZhbHNlLFxuICAgIGNvbW1hOiBmYWxzZSxcbiAgICBkZWNvZGVEb3RJbktleXM6IGZhbHNlLFxuICAgIGRlY29kZXI6IHV0aWxzLmRlY29kZSxcbiAgICBkZWxpbWl0ZXI6ICcmJyxcbiAgICBkZXB0aDogNSxcbiAgICBkdXBsaWNhdGVzOiAnY29tYmluZScsXG4gICAgaWdub3JlUXVlcnlQcmVmaXg6IGZhbHNlLFxuICAgIGludGVycHJldE51bWVyaWNFbnRpdGllczogZmFsc2UsXG4gICAgcGFyYW1ldGVyTGltaXQ6IDEwMDAsXG4gICAgcGFyc2VBcnJheXM6IHRydWUsXG4gICAgcGxhaW5PYmplY3RzOiBmYWxzZSxcbiAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IGZhbHNlXG59O1xuXG52YXIgaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzID0gZnVuY3Rpb24gKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvJiMoXFxkKyk7L2csIGZ1bmN0aW9uICgkMCwgbnVtYmVyU3RyKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KG51bWJlclN0ciwgMTApKTtcbiAgICB9KTtcbn07XG5cbnZhciBwYXJzZUFycmF5VmFsdWUgPSBmdW5jdGlvbiAodmFsLCBvcHRpb25zKSB7XG4gICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiBvcHRpb25zLmNvbW1hICYmIHZhbC5pbmRleE9mKCcsJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gdmFsLnNwbGl0KCcsJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbDtcbn07XG5cbi8vIFRoaXMgaXMgd2hhdCBicm93c2VycyB3aWxsIHN1Ym1pdCB3aGVuIHRoZSDinJMgY2hhcmFjdGVyIG9jY3VycyBpbiBhblxuLy8gYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIGJvZHkgYW5kIHRoZSBlbmNvZGluZyBvZiB0aGUgcGFnZSBjb250YWluaW5nXG4vLyB0aGUgZm9ybSBpcyBpc28tODg1OS0xLCBvciB3aGVuIHRoZSBzdWJtaXR0ZWQgZm9ybSBoYXMgYW4gYWNjZXB0LWNoYXJzZXRcbi8vIGF0dHJpYnV0ZSBvZiBpc28tODg1OS0xLiBQcmVzdW1hYmx5IGFsc28gd2l0aCBvdGhlciBjaGFyc2V0cyB0aGF0IGRvIG5vdCBjb250YWluXG4vLyB0aGUg4pyTIGNoYXJhY3Rlciwgc3VjaCBhcyB1cy1hc2NpaS5cbnZhciBpc29TZW50aW5lbCA9ICd1dGY4PSUyNiUyMzEwMDAzJTNCJzsgLy8gZW5jb2RlVVJJQ29tcG9uZW50KCcmIzEwMDAzOycpXG5cbi8vIFRoZXNlIGFyZSB0aGUgcGVyY2VudC1lbmNvZGVkIHV0Zi04IG9jdGV0cyByZXByZXNlbnRpbmcgYSBjaGVja21hcmssIGluZGljYXRpbmcgdGhhdCB0aGUgcmVxdWVzdCBhY3R1YWxseSBpcyB1dGYtOCBlbmNvZGVkLlxudmFyIGNoYXJzZXRTZW50aW5lbCA9ICd1dGY4PSVFMiU5QyU5Myc7IC8vIGVuY29kZVVSSUNvbXBvbmVudCgn4pyTJylcblxudmFyIHBhcnNlVmFsdWVzID0gZnVuY3Rpb24gcGFyc2VRdWVyeVN0cmluZ1ZhbHVlcyhzdHIsIG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqID0geyBfX3Byb3RvX186IG51bGwgfTtcblxuICAgIHZhciBjbGVhblN0ciA9IG9wdGlvbnMuaWdub3JlUXVlcnlQcmVmaXggPyBzdHIucmVwbGFjZSgvXlxcPy8sICcnKSA6IHN0cjtcbiAgICBjbGVhblN0ciA9IGNsZWFuU3RyLnJlcGxhY2UoLyU1Qi9naSwgJ1snKS5yZXBsYWNlKC8lNUQvZ2ksICddJyk7XG4gICAgdmFyIGxpbWl0ID0gb3B0aW9ucy5wYXJhbWV0ZXJMaW1pdCA9PT0gSW5maW5pdHkgPyB1bmRlZmluZWQgOiBvcHRpb25zLnBhcmFtZXRlckxpbWl0O1xuICAgIHZhciBwYXJ0cyA9IGNsZWFuU3RyLnNwbGl0KG9wdGlvbnMuZGVsaW1pdGVyLCBsaW1pdCk7XG4gICAgdmFyIHNraXBJbmRleCA9IC0xOyAvLyBLZWVwIHRyYWNrIG9mIHdoZXJlIHRoZSB1dGY4IHNlbnRpbmVsIHdhcyBmb3VuZFxuICAgIHZhciBpO1xuXG4gICAgdmFyIGNoYXJzZXQgPSBvcHRpb25zLmNoYXJzZXQ7XG4gICAgaWYgKG9wdGlvbnMuY2hhcnNldFNlbnRpbmVsKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKHBhcnRzW2ldLmluZGV4T2YoJ3V0Zjg9JykgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAocGFydHNbaV0gPT09IGNoYXJzZXRTZW50aW5lbCkge1xuICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gJ3V0Zi04JztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnRzW2ldID09PSBpc29TZW50aW5lbCkge1xuICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gJ2lzby04ODU5LTEnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBza2lwSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIGkgPSBwYXJ0cy5sZW5ndGg7IC8vIFRoZSBlc2xpbnQgc2V0dGluZ3MgZG8gbm90IGFsbG93IGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChpID09PSBza2lwSW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXJ0ID0gcGFydHNbaV07XG5cbiAgICAgICAgdmFyIGJyYWNrZXRFcXVhbHNQb3MgPSBwYXJ0LmluZGV4T2YoJ109Jyk7XG4gICAgICAgIHZhciBwb3MgPSBicmFja2V0RXF1YWxzUG9zID09PSAtMSA/IHBhcnQuaW5kZXhPZignPScpIDogYnJhY2tldEVxdWFsc1BvcyArIDE7XG5cbiAgICAgICAgdmFyIGtleSwgdmFsO1xuICAgICAgICBpZiAocG9zID09PSAtMSkge1xuICAgICAgICAgICAga2V5ID0gb3B0aW9ucy5kZWNvZGVyKHBhcnQsIGRlZmF1bHRzLmRlY29kZXIsIGNoYXJzZXQsICdrZXknKTtcbiAgICAgICAgICAgIHZhbCA9IG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nID8gbnVsbCA6ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAga2V5ID0gb3B0aW9ucy5kZWNvZGVyKHBhcnQuc2xpY2UoMCwgcG9zKSwgZGVmYXVsdHMuZGVjb2RlciwgY2hhcnNldCwgJ2tleScpO1xuICAgICAgICAgICAgdmFsID0gdXRpbHMubWF5YmVNYXAoXG4gICAgICAgICAgICAgICAgcGFyc2VBcnJheVZhbHVlKHBhcnQuc2xpY2UocG9zICsgMSksIG9wdGlvbnMpLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChlbmNvZGVkVmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmRlY29kZXIoZW5jb2RlZFZhbCwgZGVmYXVsdHMuZGVjb2RlciwgY2hhcnNldCwgJ3ZhbHVlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWwgJiYgb3B0aW9ucy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMgJiYgY2hhcnNldCA9PT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgICAgICB2YWwgPSBpbnRlcnByZXROdW1lcmljRW50aXRpZXModmFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJ0LmluZGV4T2YoJ1tdPScpID4gLTEpIHtcbiAgICAgICAgICAgIHZhbCA9IGlzQXJyYXkodmFsKSA/IFt2YWxdIDogdmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGV4aXN0aW5nID0gaGFzLmNhbGwob2JqLCBrZXkpO1xuICAgICAgICBpZiAoZXhpc3RpbmcgJiYgb3B0aW9ucy5kdXBsaWNhdGVzID09PSAnY29tYmluZScpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gdXRpbHMuY29tYmluZShvYmpba2V5XSwgdmFsKTtcbiAgICAgICAgfSBlbHNlIGlmICghZXhpc3RpbmcgfHwgb3B0aW9ucy5kdXBsaWNhdGVzID09PSAnbGFzdCcpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBwYXJzZU9iamVjdCA9IGZ1bmN0aW9uIChjaGFpbiwgdmFsLCBvcHRpb25zLCB2YWx1ZXNQYXJzZWQpIHtcbiAgICB2YXIgbGVhZiA9IHZhbHVlc1BhcnNlZCA/IHZhbCA6IHBhcnNlQXJyYXlWYWx1ZSh2YWwsIG9wdGlvbnMpO1xuXG4gICAgZm9yICh2YXIgaSA9IGNoYWluLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBvYmo7XG4gICAgICAgIHZhciByb290ID0gY2hhaW5baV07XG5cbiAgICAgICAgaWYgKHJvb3QgPT09ICdbXScgJiYgb3B0aW9ucy5wYXJzZUFycmF5cykge1xuICAgICAgICAgICAgb2JqID0gb3B0aW9ucy5hbGxvd0VtcHR5QXJyYXlzICYmIGxlYWYgPT09ICcnID8gW10gOiBbXS5jb25jYXQobGVhZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYmogPSBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fTtcbiAgICAgICAgICAgIHZhciBjbGVhblJvb3QgPSByb290LmNoYXJBdCgwKSA9PT0gJ1snICYmIHJvb3QuY2hhckF0KHJvb3QubGVuZ3RoIC0gMSkgPT09ICddJyA/IHJvb3Quc2xpY2UoMSwgLTEpIDogcm9vdDtcbiAgICAgICAgICAgIHZhciBkZWNvZGVkUm9vdCA9IG9wdGlvbnMuZGVjb2RlRG90SW5LZXlzID8gY2xlYW5Sb290LnJlcGxhY2UoLyUyRS9nLCAnLicpIDogY2xlYW5Sb290O1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gcGFyc2VJbnQoZGVjb2RlZFJvb3QsIDEwKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5wYXJzZUFycmF5cyAmJiBkZWNvZGVkUm9vdCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICBvYmogPSB7IDA6IGxlYWYgfTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgIWlzTmFOKGluZGV4KVxuICAgICAgICAgICAgICAgICYmIHJvb3QgIT09IGRlY29kZWRSb290XG4gICAgICAgICAgICAgICAgJiYgU3RyaW5nKGluZGV4KSA9PT0gZGVjb2RlZFJvb3RcbiAgICAgICAgICAgICAgICAmJiBpbmRleCA+PSAwXG4gICAgICAgICAgICAgICAgJiYgKG9wdGlvbnMucGFyc2VBcnJheXMgJiYgaW5kZXggPD0gb3B0aW9ucy5hcnJheUxpbWl0KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgb2JqID0gW107XG4gICAgICAgICAgICAgICAgb2JqW2luZGV4XSA9IGxlYWY7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRlY29kZWRSb290ICE9PSAnX19wcm90b19fJykge1xuICAgICAgICAgICAgICAgIG9ialtkZWNvZGVkUm9vdF0gPSBsZWFmO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGVhZiA9IG9iajtcbiAgICB9XG5cbiAgICByZXR1cm4gbGVhZjtcbn07XG5cbnZhciBwYXJzZUtleXMgPSBmdW5jdGlvbiBwYXJzZVF1ZXJ5U3RyaW5nS2V5cyhnaXZlbktleSwgdmFsLCBvcHRpb25zLCB2YWx1ZXNQYXJzZWQpIHtcbiAgICBpZiAoIWdpdmVuS2V5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUcmFuc2Zvcm0gZG90IG5vdGF0aW9uIHRvIGJyYWNrZXQgbm90YXRpb25cbiAgICB2YXIga2V5ID0gb3B0aW9ucy5hbGxvd0RvdHMgPyBnaXZlbktleS5yZXBsYWNlKC9cXC4oW14uW10rKS9nLCAnWyQxXScpIDogZ2l2ZW5LZXk7XG5cbiAgICAvLyBUaGUgcmVnZXggY2h1bmtzXG5cbiAgICB2YXIgYnJhY2tldHMgPSAvKFxcW1teW1xcXV0qXSkvO1xuICAgIHZhciBjaGlsZCA9IC8oXFxbW15bXFxdXSpdKS9nO1xuXG4gICAgLy8gR2V0IHRoZSBwYXJlbnRcblxuICAgIHZhciBzZWdtZW50ID0gb3B0aW9ucy5kZXB0aCA+IDAgJiYgYnJhY2tldHMuZXhlYyhrZXkpO1xuICAgIHZhciBwYXJlbnQgPSBzZWdtZW50ID8ga2V5LnNsaWNlKDAsIHNlZ21lbnQuaW5kZXgpIDoga2V5O1xuXG4gICAgLy8gU3Rhc2ggdGhlIHBhcmVudCBpZiBpdCBleGlzdHNcblxuICAgIHZhciBrZXlzID0gW107XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgICAvLyBJZiB3ZSBhcmVuJ3QgdXNpbmcgcGxhaW4gb2JqZWN0cywgb3B0aW9uYWxseSBwcmVmaXgga2V5cyB0aGF0IHdvdWxkIG92ZXJ3cml0ZSBvYmplY3QgcHJvdG90eXBlIHByb3BlcnRpZXNcbiAgICAgICAgaWYgKCFvcHRpb25zLnBsYWluT2JqZWN0cyAmJiBoYXMuY2FsbChPYmplY3QucHJvdG90eXBlLCBwYXJlbnQpKSB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuYWxsb3dQcm90b3R5cGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAga2V5cy5wdXNoKHBhcmVudCk7XG4gICAgfVxuXG4gICAgLy8gTG9vcCB0aHJvdWdoIGNoaWxkcmVuIGFwcGVuZGluZyB0byB0aGUgYXJyYXkgdW50aWwgd2UgaGl0IGRlcHRoXG5cbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKG9wdGlvbnMuZGVwdGggPiAwICYmIChzZWdtZW50ID0gY2hpbGQuZXhlYyhrZXkpKSAhPT0gbnVsbCAmJiBpIDwgb3B0aW9ucy5kZXB0aCkge1xuICAgICAgICBpICs9IDE7XG4gICAgICAgIGlmICghb3B0aW9ucy5wbGFpbk9iamVjdHMgJiYgaGFzLmNhbGwoT2JqZWN0LnByb3RvdHlwZSwgc2VnbWVudFsxXS5zbGljZSgxLCAtMSkpKSB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuYWxsb3dQcm90b3R5cGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGtleXMucHVzaChzZWdtZW50WzFdKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSdzIGEgcmVtYWluZGVyLCBqdXN0IGFkZCB3aGF0ZXZlciBpcyBsZWZ0XG5cbiAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICBrZXlzLnB1c2goJ1snICsga2V5LnNsaWNlKHNlZ21lbnQuaW5kZXgpICsgJ10nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VPYmplY3Qoa2V5cywgdmFsLCBvcHRpb25zLCB2YWx1ZXNQYXJzZWQpO1xufTtcblxudmFyIG5vcm1hbGl6ZVBhcnNlT3B0aW9ucyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZVBhcnNlT3B0aW9ucyhvcHRzKSB7XG4gICAgaWYgKCFvcHRzKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdHMuYWxsb3dFbXB0eUFycmF5cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9wdHMuYWxsb3dFbXB0eUFycmF5cyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2BhbGxvd0VtcHR5QXJyYXlzYCBvcHRpb24gY2FuIG9ubHkgYmUgYHRydWVgIG9yIGBmYWxzZWAsIHdoZW4gcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdHMuZGVjb2RlRG90SW5LZXlzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb3B0cy5kZWNvZGVEb3RJbktleXMgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgZGVjb2RlRG90SW5LZXlzYCBvcHRpb24gY2FuIG9ubHkgYmUgYHRydWVgIG9yIGBmYWxzZWAsIHdoZW4gcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5kZWNvZGVyICE9PSBudWxsICYmIHR5cGVvZiBvcHRzLmRlY29kZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBvcHRzLmRlY29kZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRGVjb2RlciBoYXMgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdHMuY2hhcnNldCAhPT0gJ3VuZGVmaW5lZCcgJiYgb3B0cy5jaGFyc2V0ICE9PSAndXRmLTgnICYmIG9wdHMuY2hhcnNldCAhPT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBjaGFyc2V0IG9wdGlvbiBtdXN0IGJlIGVpdGhlciB1dGYtOCwgaXNvLTg4NTktMSwgb3IgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHZhciBjaGFyc2V0ID0gdHlwZW9mIG9wdHMuY2hhcnNldCA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0cy5jaGFyc2V0IDogb3B0cy5jaGFyc2V0O1xuXG4gICAgdmFyIGR1cGxpY2F0ZXMgPSB0eXBlb2Ygb3B0cy5kdXBsaWNhdGVzID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHRzLmR1cGxpY2F0ZXMgOiBvcHRzLmR1cGxpY2F0ZXM7XG5cbiAgICBpZiAoZHVwbGljYXRlcyAhPT0gJ2NvbWJpbmUnICYmIGR1cGxpY2F0ZXMgIT09ICdmaXJzdCcgJiYgZHVwbGljYXRlcyAhPT0gJ2xhc3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBkdXBsaWNhdGVzIG9wdGlvbiBtdXN0IGJlIGVpdGhlciBjb21iaW5lLCBmaXJzdCwgb3IgbGFzdCcpO1xuICAgIH1cblxuICAgIHZhciBhbGxvd0RvdHMgPSB0eXBlb2Ygb3B0cy5hbGxvd0RvdHMgPT09ICd1bmRlZmluZWQnID8gb3B0cy5kZWNvZGVEb3RJbktleXMgPT09IHRydWUgPyB0cnVlIDogZGVmYXVsdHMuYWxsb3dEb3RzIDogISFvcHRzLmFsbG93RG90cztcblxuICAgIHJldHVybiB7XG4gICAgICAgIGFsbG93RG90czogYWxsb3dEb3RzLFxuICAgICAgICBhbGxvd0VtcHR5QXJyYXlzOiB0eXBlb2Ygb3B0cy5hbGxvd0VtcHR5QXJyYXlzID09PSAnYm9vbGVhbicgPyAhIW9wdHMuYWxsb3dFbXB0eUFycmF5cyA6IGRlZmF1bHRzLmFsbG93RW1wdHlBcnJheXMsXG4gICAgICAgIGFsbG93UHJvdG90eXBlczogdHlwZW9mIG9wdHMuYWxsb3dQcm90b3R5cGVzID09PSAnYm9vbGVhbicgPyBvcHRzLmFsbG93UHJvdG90eXBlcyA6IGRlZmF1bHRzLmFsbG93UHJvdG90eXBlcyxcbiAgICAgICAgYWxsb3dTcGFyc2U6IHR5cGVvZiBvcHRzLmFsbG93U3BhcnNlID09PSAnYm9vbGVhbicgPyBvcHRzLmFsbG93U3BhcnNlIDogZGVmYXVsdHMuYWxsb3dTcGFyc2UsXG4gICAgICAgIGFycmF5TGltaXQ6IHR5cGVvZiBvcHRzLmFycmF5TGltaXQgPT09ICdudW1iZXInID8gb3B0cy5hcnJheUxpbWl0IDogZGVmYXVsdHMuYXJyYXlMaW1pdCxcbiAgICAgICAgY2hhcnNldDogY2hhcnNldCxcbiAgICAgICAgY2hhcnNldFNlbnRpbmVsOiB0eXBlb2Ygb3B0cy5jaGFyc2V0U2VudGluZWwgPT09ICdib29sZWFuJyA/IG9wdHMuY2hhcnNldFNlbnRpbmVsIDogZGVmYXVsdHMuY2hhcnNldFNlbnRpbmVsLFxuICAgICAgICBjb21tYTogdHlwZW9mIG9wdHMuY29tbWEgPT09ICdib29sZWFuJyA/IG9wdHMuY29tbWEgOiBkZWZhdWx0cy5jb21tYSxcbiAgICAgICAgZGVjb2RlRG90SW5LZXlzOiB0eXBlb2Ygb3B0cy5kZWNvZGVEb3RJbktleXMgPT09ICdib29sZWFuJyA/IG9wdHMuZGVjb2RlRG90SW5LZXlzIDogZGVmYXVsdHMuZGVjb2RlRG90SW5LZXlzLFxuICAgICAgICBkZWNvZGVyOiB0eXBlb2Ygb3B0cy5kZWNvZGVyID09PSAnZnVuY3Rpb24nID8gb3B0cy5kZWNvZGVyIDogZGVmYXVsdHMuZGVjb2RlcixcbiAgICAgICAgZGVsaW1pdGVyOiB0eXBlb2Ygb3B0cy5kZWxpbWl0ZXIgPT09ICdzdHJpbmcnIHx8IHV0aWxzLmlzUmVnRXhwKG9wdHMuZGVsaW1pdGVyKSA/IG9wdHMuZGVsaW1pdGVyIDogZGVmYXVsdHMuZGVsaW1pdGVyLFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW1wbGljaXQtY29lcmNpb24sIG5vLWV4dHJhLXBhcmVuc1xuICAgICAgICBkZXB0aDogKHR5cGVvZiBvcHRzLmRlcHRoID09PSAnbnVtYmVyJyB8fCBvcHRzLmRlcHRoID09PSBmYWxzZSkgPyArb3B0cy5kZXB0aCA6IGRlZmF1bHRzLmRlcHRoLFxuICAgICAgICBkdXBsaWNhdGVzOiBkdXBsaWNhdGVzLFxuICAgICAgICBpZ25vcmVRdWVyeVByZWZpeDogb3B0cy5pZ25vcmVRdWVyeVByZWZpeCA9PT0gdHJ1ZSxcbiAgICAgICAgaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzOiB0eXBlb2Ygb3B0cy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMgPT09ICdib29sZWFuJyA/IG9wdHMuaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzIDogZGVmYXVsdHMuaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzLFxuICAgICAgICBwYXJhbWV0ZXJMaW1pdDogdHlwZW9mIG9wdHMucGFyYW1ldGVyTGltaXQgPT09ICdudW1iZXInID8gb3B0cy5wYXJhbWV0ZXJMaW1pdCA6IGRlZmF1bHRzLnBhcmFtZXRlckxpbWl0LFxuICAgICAgICBwYXJzZUFycmF5czogb3B0cy5wYXJzZUFycmF5cyAhPT0gZmFsc2UsXG4gICAgICAgIHBsYWluT2JqZWN0czogdHlwZW9mIG9wdHMucGxhaW5PYmplY3RzID09PSAnYm9vbGVhbicgPyBvcHRzLnBsYWluT2JqZWN0cyA6IGRlZmF1bHRzLnBsYWluT2JqZWN0cyxcbiAgICAgICAgc3RyaWN0TnVsbEhhbmRsaW5nOiB0eXBlb2Ygb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgPT09ICdib29sZWFuJyA/IG9wdHMuc3RyaWN0TnVsbEhhbmRsaW5nIDogZGVmYXVsdHMuc3RyaWN0TnVsbEhhbmRsaW5nXG4gICAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHN0ciwgb3B0cykge1xuICAgIHZhciBvcHRpb25zID0gbm9ybWFsaXplUGFyc2VPcHRpb25zKG9wdHMpO1xuXG4gICAgaWYgKHN0ciA9PT0gJycgfHwgc3RyID09PSBudWxsIHx8IHR5cGVvZiBzdHIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fTtcbiAgICB9XG5cbiAgICB2YXIgdGVtcE9iaiA9IHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnID8gcGFyc2VWYWx1ZXMoc3RyLCBvcHRpb25zKSA6IHN0cjtcbiAgICB2YXIgb2JqID0gb3B0aW9ucy5wbGFpbk9iamVjdHMgPyBPYmplY3QuY3JlYXRlKG51bGwpIDoge307XG5cbiAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGtleXMgYW5kIHNldHVwIHRoZSBuZXcgb2JqZWN0XG5cbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRlbXBPYmopO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgdmFyIG5ld09iaiA9IHBhcnNlS2V5cyhrZXksIHRlbXBPYmpba2V5XSwgb3B0aW9ucywgdHlwZW9mIHN0ciA9PT0gJ3N0cmluZycpO1xuICAgICAgICBvYmogPSB1dGlscy5tZXJnZShvYmosIG5ld09iaiwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuYWxsb3dTcGFyc2UgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICByZXR1cm4gdXRpbHMuY29tcGFjdChvYmopO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vc3RyaW5naWZ5Jyk7XG52YXIgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJyk7XG52YXIgZm9ybWF0cyA9IHJlcXVpcmUoJy4vZm9ybWF0cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBmb3JtYXRzOiBmb3JtYXRzLFxuICAgIHBhcnNlOiBwYXJzZSxcbiAgICBzdHJpbmdpZnk6IHN0cmluZ2lmeVxufTtcbiIsIi8vXG4vLyBUSElTIEZJTEUgSVMgQVVUT01BVElDQUxMWSBHRU5FUkFURUQhIERPIE5PVCBFRElUIEJZIEhBTkQhXG4vL1xuO1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKVxuICAgICAgICA6IHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZFxuICAgICAgICAgICAgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgICAgICAgICAgLy8gY2YuIGh0dHBzOi8vZ2l0aHViLmNvbS9kYW5rb2dhaS9qcy1iYXNlNjQvaXNzdWVzLzExOVxuICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAvLyBleGlzdGluZyB2ZXJzaW9uIGZvciBub0NvbmZsaWN0KClcbiAgICAgICAgICAgICAgICB2YXIgX0Jhc2U2NCA9IGdsb2JhbC5CYXNlNjQ7XG4gICAgICAgICAgICAgICAgdmFyIGdCYXNlNjQgPSBmYWN0b3J5KCk7XG4gICAgICAgICAgICAgICAgZ0Jhc2U2NC5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBnbG9iYWwuQmFzZTY0ID0gX0Jhc2U2NDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdCYXNlNjQ7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsLk1ldGVvcikgeyAvLyBNZXRlb3IuanNcbiAgICAgICAgICAgICAgICAgICAgQmFzZTY0ID0gZ0Jhc2U2NDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZ2xvYmFsLkJhc2U2NCA9IGdCYXNlNjQ7XG4gICAgICAgICAgICB9KSgpO1xufSgodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZlxuICAgIDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3dcbiAgICAgICAgOiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFxuICAgICAgICAgICAgOiB0aGlzKSwgZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvKipcbiAgICAgKiAgYmFzZTY0LnRzXG4gICAgICpcbiAgICAgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLUNsYXVzZSBMaWNlbnNlLlxuICAgICAqICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAgICAgKlxuICAgICAqICBSZWZlcmVuY2VzOlxuICAgICAqICAgIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0XG4gICAgICpcbiAgICAgKiBAYXV0aG9yIERhbiBLb2dhaSAoaHR0cHM6Ly9naXRodWIuY29tL2RhbmtvZ2FpKVxuICAgICAqL1xuICAgIHZhciB2ZXJzaW9uID0gJzMuNy43JztcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgbG93ZXJjYXNlIGB2ZXJzaW9uYC5cbiAgICAgKi9cbiAgICB2YXIgVkVSU0lPTiA9IHZlcnNpb247XG4gICAgdmFyIF9oYXNCdWZmZXIgPSB0eXBlb2YgQnVmZmVyID09PSAnZnVuY3Rpb24nO1xuICAgIHZhciBfVEQgPSB0eXBlb2YgVGV4dERlY29kZXIgPT09ICdmdW5jdGlvbicgPyBuZXcgVGV4dERlY29kZXIoKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgX1RFID0gdHlwZW9mIFRleHRFbmNvZGVyID09PSAnZnVuY3Rpb24nID8gbmV3IFRleHRFbmNvZGVyKCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIGI2NGNoID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89JztcbiAgICB2YXIgYjY0Y2hzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYjY0Y2gpO1xuICAgIHZhciBiNjR0YWIgPSAoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgdmFyIHRhYiA9IHt9O1xuICAgICAgICBhLmZvckVhY2goZnVuY3Rpb24gKGMsIGkpIHsgcmV0dXJuIHRhYltjXSA9IGk7IH0pO1xuICAgICAgICByZXR1cm4gdGFiO1xuICAgIH0pKGI2NGNocyk7XG4gICAgdmFyIGI2NHJlID0gL14oPzpbQS1aYS16XFxkK1xcL117NH0pKj8oPzpbQS1aYS16XFxkK1xcL117Mn0oPzo9PSk/fFtBLVphLXpcXGQrXFwvXXszfT0/KT8kLztcbiAgICB2YXIgX2Zyb21DQyA9IFN0cmluZy5mcm9tQ2hhckNvZGUuYmluZChTdHJpbmcpO1xuICAgIHZhciBfVThBZnJvbSA9IHR5cGVvZiBVaW50OEFycmF5LmZyb20gPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBVaW50OEFycmF5LmZyb20uYmluZChVaW50OEFycmF5KVxuICAgICAgICA6IGZ1bmN0aW9uIChpdCkgeyByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaXQsIDApKTsgfTtcbiAgICB2YXIgX21rVXJpU2FmZSA9IGZ1bmN0aW9uIChzcmMpIHsgcmV0dXJuIHNyY1xuICAgICAgICAucmVwbGFjZSgvPS9nLCAnJykucmVwbGFjZSgvWytcXC9dL2csIGZ1bmN0aW9uIChtMCkgeyByZXR1cm4gbTAgPT0gJysnID8gJy0nIDogJ18nOyB9KTsgfTtcbiAgICB2YXIgX3RpZHlCNjQgPSBmdW5jdGlvbiAocykgeyByZXR1cm4gcy5yZXBsYWNlKC9bXkEtWmEtejAtOVxcK1xcL10vZywgJycpOyB9O1xuICAgIC8qKlxuICAgICAqIHBvbHlmaWxsIHZlcnNpb24gb2YgYGJ0b2FgXG4gICAgICovXG4gICAgdmFyIGJ0b2FQb2x5ZmlsbCA9IGZ1bmN0aW9uIChiaW4pIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3BvbHlmaWxsZWQnKTtcbiAgICAgICAgdmFyIHUzMiwgYzAsIGMxLCBjMiwgYXNjID0gJyc7XG4gICAgICAgIHZhciBwYWQgPSBiaW4ubGVuZ3RoICUgMztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiaW4ubGVuZ3RoOykge1xuICAgICAgICAgICAgaWYgKChjMCA9IGJpbi5jaGFyQ29kZUF0KGkrKykpID4gMjU1IHx8XG4gICAgICAgICAgICAgICAgKGMxID0gYmluLmNoYXJDb2RlQXQoaSsrKSkgPiAyNTUgfHxcbiAgICAgICAgICAgICAgICAoYzIgPSBiaW4uY2hhckNvZGVBdChpKyspKSA+IDI1NSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIGNoYXJhY3RlciBmb3VuZCcpO1xuICAgICAgICAgICAgdTMyID0gKGMwIDw8IDE2KSB8IChjMSA8PCA4KSB8IGMyO1xuICAgICAgICAgICAgYXNjICs9IGI2NGNoc1t1MzIgPj4gMTggJiA2M11cbiAgICAgICAgICAgICAgICArIGI2NGNoc1t1MzIgPj4gMTIgJiA2M11cbiAgICAgICAgICAgICAgICArIGI2NGNoc1t1MzIgPj4gNiAmIDYzXVxuICAgICAgICAgICAgICAgICsgYjY0Y2hzW3UzMiAmIDYzXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFkID8gYXNjLnNsaWNlKDAsIHBhZCAtIDMpICsgXCI9PT1cIi5zdWJzdHJpbmcocGFkKSA6IGFzYztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIGRvZXMgd2hhdCBgd2luZG93LmJ0b2FgIG9mIHdlYiBicm93c2VycyBkby5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gYmluIGJpbmFyeSBzdHJpbmdcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQtZW5jb2RlZCBzdHJpbmdcbiAgICAgKi9cbiAgICB2YXIgX2J0b2EgPSB0eXBlb2YgYnRvYSA9PT0gJ2Z1bmN0aW9uJyA/IGZ1bmN0aW9uIChiaW4pIHsgcmV0dXJuIGJ0b2EoYmluKTsgfVxuICAgICAgICA6IF9oYXNCdWZmZXIgPyBmdW5jdGlvbiAoYmluKSB7IHJldHVybiBCdWZmZXIuZnJvbShiaW4sICdiaW5hcnknKS50b1N0cmluZygnYmFzZTY0Jyk7IH1cbiAgICAgICAgICAgIDogYnRvYVBvbHlmaWxsO1xuICAgIHZhciBfZnJvbVVpbnQ4QXJyYXkgPSBfaGFzQnVmZmVyXG4gICAgICAgID8gZnVuY3Rpb24gKHU4YSkgeyByZXR1cm4gQnVmZmVyLmZyb20odThhKS50b1N0cmluZygnYmFzZTY0Jyk7IH1cbiAgICAgICAgOiBmdW5jdGlvbiAodThhKSB7XG4gICAgICAgICAgICAvLyBjZi4gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTI3MTAwMDEvaG93LXRvLWNvbnZlcnQtdWludDgtYXJyYXktdG8tYmFzZTY0LWVuY29kZWQtc3RyaW5nLzEyNzEzMzI2IzEyNzEzMzI2XG4gICAgICAgICAgICB2YXIgbWF4YXJncyA9IDB4MTAwMDtcbiAgICAgICAgICAgIHZhciBzdHJzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHU4YS5sZW5ndGg7IGkgPCBsOyBpICs9IG1heGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBzdHJzLnB1c2goX2Zyb21DQy5hcHBseShudWxsLCB1OGEuc3ViYXJyYXkoaSwgaSArIG1heGFyZ3MpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX2J0b2Eoc3Rycy5qb2luKCcnKSk7XG4gICAgICAgIH07XG4gICAgLyoqXG4gICAgICogY29udmVydHMgYSBVaW50OEFycmF5IHRvIGEgQmFzZTY0IHN0cmluZy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt1cmxzYWZlXSBVUkwtYW5kLWZpbGVuYW1lLXNhZmUgYSBsYSBSRkM0NjQ4IMKnNVxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IEJhc2U2NCBzdHJpbmdcbiAgICAgKi9cbiAgICB2YXIgZnJvbVVpbnQ4QXJyYXkgPSBmdW5jdGlvbiAodThhLCB1cmxzYWZlKSB7XG4gICAgICAgIGlmICh1cmxzYWZlID09PSB2b2lkIDApIHsgdXJsc2FmZSA9IGZhbHNlOyB9XG4gICAgICAgIHJldHVybiB1cmxzYWZlID8gX21rVXJpU2FmZShfZnJvbVVpbnQ4QXJyYXkodThhKSkgOiBfZnJvbVVpbnQ4QXJyYXkodThhKTtcbiAgICB9O1xuICAgIC8vIFRoaXMgdHJpY2sgaXMgZm91bmQgYnJva2VuIGh0dHBzOi8vZ2l0aHViLmNvbS9kYW5rb2dhaS9qcy1iYXNlNjQvaXNzdWVzLzEzMFxuICAgIC8vIGNvbnN0IHV0b2IgPSAoc3JjOiBzdHJpbmcpID0+IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzcmMpKTtcbiAgICAvLyByZXZlcnRpbmcgZ29vZCBvbGQgZmF0aW9uZWQgcmVnZXhwXG4gICAgdmFyIGNiX3V0b2IgPSBmdW5jdGlvbiAoYykge1xuICAgICAgICBpZiAoYy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICB2YXIgY2MgPSBjLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICByZXR1cm4gY2MgPCAweDgwID8gY1xuICAgICAgICAgICAgICAgIDogY2MgPCAweDgwMCA/IChfZnJvbUNDKDB4YzAgfCAoY2MgPj4+IDYpKVxuICAgICAgICAgICAgICAgICAgICArIF9mcm9tQ0MoMHg4MCB8IChjYyAmIDB4M2YpKSlcbiAgICAgICAgICAgICAgICAgICAgOiAoX2Zyb21DQygweGUwIHwgKChjYyA+Pj4gMTIpICYgMHgwZikpXG4gICAgICAgICAgICAgICAgICAgICAgICArIF9mcm9tQ0MoMHg4MCB8ICgoY2MgPj4+IDYpICYgMHgzZikpXG4gICAgICAgICAgICAgICAgICAgICAgICArIF9mcm9tQ0MoMHg4MCB8IChjYyAmIDB4M2YpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY2MgPSAweDEwMDAwXG4gICAgICAgICAgICAgICAgKyAoYy5jaGFyQ29kZUF0KDApIC0gMHhEODAwKSAqIDB4NDAwXG4gICAgICAgICAgICAgICAgKyAoYy5jaGFyQ29kZUF0KDEpIC0gMHhEQzAwKTtcbiAgICAgICAgICAgIHJldHVybiAoX2Zyb21DQygweGYwIHwgKChjYyA+Pj4gMTgpICYgMHgwNykpXG4gICAgICAgICAgICAgICAgKyBfZnJvbUNDKDB4ODAgfCAoKGNjID4+PiAxMikgJiAweDNmKSlcbiAgICAgICAgICAgICAgICArIF9mcm9tQ0MoMHg4MCB8ICgoY2MgPj4+IDYpICYgMHgzZikpXG4gICAgICAgICAgICAgICAgKyBfZnJvbUNDKDB4ODAgfCAoY2MgJiAweDNmKSkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgcmVfdXRvYiA9IC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZGXXxbXlxceDAwLVxceDdGXS9nO1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHNob3VsZCBoYXZlIGJlZW4gaW50ZXJuYWwgdXNlIG9ubHkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNyYyBVVEYtOCBzdHJpbmdcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBVVEYtMTYgc3RyaW5nXG4gICAgICovXG4gICAgdmFyIHV0b2IgPSBmdW5jdGlvbiAodSkgeyByZXR1cm4gdS5yZXBsYWNlKHJlX3V0b2IsIGNiX3V0b2IpOyB9O1xuICAgIC8vXG4gICAgdmFyIF9lbmNvZGUgPSBfaGFzQnVmZmVyXG4gICAgICAgID8gZnVuY3Rpb24gKHMpIHsgcmV0dXJuIEJ1ZmZlci5mcm9tKHMsICd1dGY4JykudG9TdHJpbmcoJ2Jhc2U2NCcpOyB9XG4gICAgICAgIDogX1RFXG4gICAgICAgICAgICA/IGZ1bmN0aW9uIChzKSB7IHJldHVybiBfZnJvbVVpbnQ4QXJyYXkoX1RFLmVuY29kZShzKSk7IH1cbiAgICAgICAgICAgIDogZnVuY3Rpb24gKHMpIHsgcmV0dXJuIF9idG9hKHV0b2IocykpOyB9O1xuICAgIC8qKlxuICAgICAqIGNvbnZlcnRzIGEgVVRGLTgtZW5jb2RlZCBzdHJpbmcgdG8gYSBCYXNlNjQgc3RyaW5nLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3VybHNhZmVdIGlmIGB0cnVlYCBtYWtlIHRoZSByZXN1bHQgVVJMLXNhZmVcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQgc3RyaW5nXG4gICAgICovXG4gICAgdmFyIGVuY29kZSA9IGZ1bmN0aW9uIChzcmMsIHVybHNhZmUpIHtcbiAgICAgICAgaWYgKHVybHNhZmUgPT09IHZvaWQgMCkgeyB1cmxzYWZlID0gZmFsc2U7IH1cbiAgICAgICAgcmV0dXJuIHVybHNhZmVcbiAgICAgICAgICAgID8gX21rVXJpU2FmZShfZW5jb2RlKHNyYykpXG4gICAgICAgICAgICA6IF9lbmNvZGUoc3JjKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIGNvbnZlcnRzIGEgVVRGLTgtZW5jb2RlZCBzdHJpbmcgdG8gVVJMLXNhZmUgQmFzZTY0IFJGQzQ2NDggwqc1LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IEJhc2U2NCBzdHJpbmdcbiAgICAgKi9cbiAgICB2YXIgZW5jb2RlVVJJID0gZnVuY3Rpb24gKHNyYykgeyByZXR1cm4gZW5jb2RlKHNyYywgdHJ1ZSk7IH07XG4gICAgLy8gVGhpcyB0cmljayBpcyBmb3VuZCBicm9rZW4gaHR0cHM6Ly9naXRodWIuY29tL2RhbmtvZ2FpL2pzLWJhc2U2NC9pc3N1ZXMvMTMwXG4gICAgLy8gY29uc3QgYnRvdSA9IChzcmM6IHN0cmluZykgPT4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShzcmMpKTtcbiAgICAvLyByZXZlcnRpbmcgZ29vZCBvbGQgZmF0aW9uZWQgcmVnZXhwXG4gICAgdmFyIHJlX2J0b3UgPSAvW1xceEMwLVxceERGXVtcXHg4MC1cXHhCRl18W1xceEUwLVxceEVGXVtcXHg4MC1cXHhCRl17Mn18W1xceEYwLVxceEY3XVtcXHg4MC1cXHhCRl17M30vZztcbiAgICB2YXIgY2JfYnRvdSA9IGZ1bmN0aW9uIChjY2NjKSB7XG4gICAgICAgIHN3aXRjaCAoY2NjYy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICB2YXIgY3AgPSAoKDB4MDcgJiBjY2NjLmNoYXJDb2RlQXQoMCkpIDw8IDE4KVxuICAgICAgICAgICAgICAgICAgICB8ICgoMHgzZiAmIGNjY2MuY2hhckNvZGVBdCgxKSkgPDwgMTIpXG4gICAgICAgICAgICAgICAgICAgIHwgKCgweDNmICYgY2NjYy5jaGFyQ29kZUF0KDIpKSA8PCA2KVxuICAgICAgICAgICAgICAgICAgICB8ICgweDNmICYgY2NjYy5jaGFyQ29kZUF0KDMpKSwgb2Zmc2V0ID0gY3AgLSAweDEwMDAwO1xuICAgICAgICAgICAgICAgIHJldHVybiAoX2Zyb21DQygob2Zmc2V0ID4+PiAxMCkgKyAweEQ4MDApXG4gICAgICAgICAgICAgICAgICAgICsgX2Zyb21DQygob2Zmc2V0ICYgMHgzRkYpICsgMHhEQzAwKSk7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcm9tQ0MoKCgweDBmICYgY2NjYy5jaGFyQ29kZUF0KDApKSA8PCAxMilcbiAgICAgICAgICAgICAgICAgICAgfCAoKDB4M2YgJiBjY2NjLmNoYXJDb2RlQXQoMSkpIDw8IDYpXG4gICAgICAgICAgICAgICAgICAgIHwgKDB4M2YgJiBjY2NjLmNoYXJDb2RlQXQoMikpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcm9tQ0MoKCgweDFmICYgY2NjYy5jaGFyQ29kZUF0KDApKSA8PCA2KVxuICAgICAgICAgICAgICAgICAgICB8ICgweDNmICYgY2NjYy5jaGFyQ29kZUF0KDEpKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHNob3VsZCBoYXZlIGJlZW4gaW50ZXJuYWwgdXNlIG9ubHkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNyYyBVVEYtMTYgc3RyaW5nXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVVRGLTggc3RyaW5nXG4gICAgICovXG4gICAgdmFyIGJ0b3UgPSBmdW5jdGlvbiAoYikgeyByZXR1cm4gYi5yZXBsYWNlKHJlX2J0b3UsIGNiX2J0b3UpOyB9O1xuICAgIC8qKlxuICAgICAqIHBvbHlmaWxsIHZlcnNpb24gb2YgYGF0b2JgXG4gICAgICovXG4gICAgdmFyIGF0b2JQb2x5ZmlsbCA9IGZ1bmN0aW9uIChhc2MpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3BvbHlmaWxsZWQnKTtcbiAgICAgICAgYXNjID0gYXNjLnJlcGxhY2UoL1xccysvZywgJycpO1xuICAgICAgICBpZiAoIWI2NHJlLnRlc3QoYXNjKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21hbGZvcm1lZCBiYXNlNjQuJyk7XG4gICAgICAgIGFzYyArPSAnPT0nLnNsaWNlKDIgLSAoYXNjLmxlbmd0aCAmIDMpKTtcbiAgICAgICAgdmFyIHUyNCwgYmluID0gJycsIHIxLCByMjtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhc2MubGVuZ3RoOykge1xuICAgICAgICAgICAgdTI0ID0gYjY0dGFiW2FzYy5jaGFyQXQoaSsrKV0gPDwgMThcbiAgICAgICAgICAgICAgICB8IGI2NHRhYlthc2MuY2hhckF0KGkrKyldIDw8IDEyXG4gICAgICAgICAgICAgICAgfCAocjEgPSBiNjR0YWJbYXNjLmNoYXJBdChpKyspXSkgPDwgNlxuICAgICAgICAgICAgICAgIHwgKHIyID0gYjY0dGFiW2FzYy5jaGFyQXQoaSsrKV0pO1xuICAgICAgICAgICAgYmluICs9IHIxID09PSA2NCA/IF9mcm9tQ0ModTI0ID4+IDE2ICYgMjU1KVxuICAgICAgICAgICAgICAgIDogcjIgPT09IDY0ID8gX2Zyb21DQyh1MjQgPj4gMTYgJiAyNTUsIHUyNCA+PiA4ICYgMjU1KVxuICAgICAgICAgICAgICAgICAgICA6IF9mcm9tQ0ModTI0ID4+IDE2ICYgMjU1LCB1MjQgPj4gOCAmIDI1NSwgdTI0ICYgMjU1KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmluO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogZG9lcyB3aGF0IGB3aW5kb3cuYXRvYmAgb2Ygd2ViIGJyb3dzZXJzIGRvLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBhc2MgQmFzZTY0LWVuY29kZWQgc3RyaW5nXG4gICAgICogQHJldHVybnMge3N0cmluZ30gYmluYXJ5IHN0cmluZ1xuICAgICAqL1xuICAgIHZhciBfYXRvYiA9IHR5cGVvZiBhdG9iID09PSAnZnVuY3Rpb24nID8gZnVuY3Rpb24gKGFzYykgeyByZXR1cm4gYXRvYihfdGlkeUI2NChhc2MpKTsgfVxuICAgICAgICA6IF9oYXNCdWZmZXIgPyBmdW5jdGlvbiAoYXNjKSB7IHJldHVybiBCdWZmZXIuZnJvbShhc2MsICdiYXNlNjQnKS50b1N0cmluZygnYmluYXJ5Jyk7IH1cbiAgICAgICAgICAgIDogYXRvYlBvbHlmaWxsO1xuICAgIC8vXG4gICAgdmFyIF90b1VpbnQ4QXJyYXkgPSBfaGFzQnVmZmVyXG4gICAgICAgID8gZnVuY3Rpb24gKGEpIHsgcmV0dXJuIF9VOEFmcm9tKEJ1ZmZlci5mcm9tKGEsICdiYXNlNjQnKSk7IH1cbiAgICAgICAgOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gX1U4QWZyb20oX2F0b2IoYSkuc3BsaXQoJycpLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gYy5jaGFyQ29kZUF0KDApOyB9KSk7IH07XG4gICAgLyoqXG4gICAgICogY29udmVydHMgYSBCYXNlNjQgc3RyaW5nIHRvIGEgVWludDhBcnJheS5cbiAgICAgKi9cbiAgICB2YXIgdG9VaW50OEFycmF5ID0gZnVuY3Rpb24gKGEpIHsgcmV0dXJuIF90b1VpbnQ4QXJyYXkoX3VuVVJJKGEpKTsgfTtcbiAgICAvL1xuICAgIHZhciBfZGVjb2RlID0gX2hhc0J1ZmZlclxuICAgICAgICA/IGZ1bmN0aW9uIChhKSB7IHJldHVybiBCdWZmZXIuZnJvbShhLCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0ZjgnKTsgfVxuICAgICAgICA6IF9URFxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoYSkgeyByZXR1cm4gX1RELmRlY29kZShfdG9VaW50OEFycmF5KGEpKTsgfVxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYnRvdShfYXRvYihhKSk7IH07XG4gICAgdmFyIF91blVSSSA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiBfdGlkeUI2NChhLnJlcGxhY2UoL1stX10vZywgZnVuY3Rpb24gKG0wKSB7IHJldHVybiBtMCA9PSAnLScgPyAnKycgOiAnLyc7IH0pKTsgfTtcbiAgICAvKipcbiAgICAgKiBjb252ZXJ0cyBhIEJhc2U2NCBzdHJpbmcgdG8gYSBVVEYtOCBzdHJpbmcuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHNyYyBCYXNlNjQgc3RyaW5nLiAgQm90aCBub3JtYWwgYW5kIFVSTC1zYWZlIGFyZSBzdXBwb3J0ZWRcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBVVEYtOCBzdHJpbmdcbiAgICAgKi9cbiAgICB2YXIgZGVjb2RlID0gZnVuY3Rpb24gKHNyYykgeyByZXR1cm4gX2RlY29kZShfdW5VUkkoc3JjKSk7IH07XG4gICAgLyoqXG4gICAgICogY2hlY2sgaWYgYSB2YWx1ZSBpcyBhIHZhbGlkIEJhc2U2NCBzdHJpbmdcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3JjIGEgdmFsdWUgdG8gY2hlY2tcbiAgICAgICovXG4gICAgdmFyIGlzVmFsaWQgPSBmdW5jdGlvbiAoc3JjKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3JjICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIHMgPSBzcmMucmVwbGFjZSgvXFxzKy9nLCAnJykucmVwbGFjZSgvPXswLDJ9JC8sICcnKTtcbiAgICAgICAgcmV0dXJuICEvW15cXHMwLTlhLXpBLVpcXCsvXS8udGVzdChzKSB8fCAhL1teXFxzMC05YS16QS1aXFwtX10vLnRlc3Qocyk7XG4gICAgfTtcbiAgICAvL1xuICAgIHZhciBfbm9FbnVtID0gZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiB2LCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9O1xuICAgIH07XG4gICAgLyoqXG4gICAgICogZXh0ZW5kIFN0cmluZy5wcm90b3R5cGUgd2l0aCByZWxldmFudCBtZXRob2RzXG4gICAgICovXG4gICAgdmFyIGV4dGVuZFN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hZGQgPSBmdW5jdGlvbiAobmFtZSwgYm9keSkgeyByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0cmluZy5wcm90b3R5cGUsIG5hbWUsIF9ub0VudW0oYm9keSkpOyB9O1xuICAgICAgICBfYWRkKCdmcm9tQmFzZTY0JywgZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVjb2RlKHRoaXMpOyB9KTtcbiAgICAgICAgX2FkZCgndG9CYXNlNjQnLCBmdW5jdGlvbiAodXJsc2FmZSkgeyByZXR1cm4gZW5jb2RlKHRoaXMsIHVybHNhZmUpOyB9KTtcbiAgICAgICAgX2FkZCgndG9CYXNlNjRVUkknLCBmdW5jdGlvbiAoKSB7IHJldHVybiBlbmNvZGUodGhpcywgdHJ1ZSk7IH0pO1xuICAgICAgICBfYWRkKCd0b0Jhc2U2NFVSTCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVuY29kZSh0aGlzLCB0cnVlKTsgfSk7XG4gICAgICAgIF9hZGQoJ3RvVWludDhBcnJheScsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRvVWludDhBcnJheSh0aGlzKTsgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBleHRlbmQgVWludDhBcnJheS5wcm90b3R5cGUgd2l0aCByZWxldmFudCBtZXRob2RzXG4gICAgICovXG4gICAgdmFyIGV4dGVuZFVpbnQ4QXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYWRkID0gZnVuY3Rpb24gKG5hbWUsIGJvZHkpIHsgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVaW50OEFycmF5LnByb3RvdHlwZSwgbmFtZSwgX25vRW51bShib2R5KSk7IH07XG4gICAgICAgIF9hZGQoJ3RvQmFzZTY0JywgZnVuY3Rpb24gKHVybHNhZmUpIHsgcmV0dXJuIGZyb21VaW50OEFycmF5KHRoaXMsIHVybHNhZmUpOyB9KTtcbiAgICAgICAgX2FkZCgndG9CYXNlNjRVUkknLCBmdW5jdGlvbiAoKSB7IHJldHVybiBmcm9tVWludDhBcnJheSh0aGlzLCB0cnVlKTsgfSk7XG4gICAgICAgIF9hZGQoJ3RvQmFzZTY0VVJMJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gZnJvbVVpbnQ4QXJyYXkodGhpcywgdHJ1ZSk7IH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogZXh0ZW5kIEJ1aWx0aW4gcHJvdG90eXBlcyB3aXRoIHJlbGV2YW50IG1ldGhvZHNcbiAgICAgKi9cbiAgICB2YXIgZXh0ZW5kQnVpbHRpbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4dGVuZFN0cmluZygpO1xuICAgICAgICBleHRlbmRVaW50OEFycmF5KCk7XG4gICAgfTtcbiAgICB2YXIgZ0Jhc2U2NCA9IHtcbiAgICAgICAgdmVyc2lvbjogdmVyc2lvbixcbiAgICAgICAgVkVSU0lPTjogVkVSU0lPTixcbiAgICAgICAgYXRvYjogX2F0b2IsXG4gICAgICAgIGF0b2JQb2x5ZmlsbDogYXRvYlBvbHlmaWxsLFxuICAgICAgICBidG9hOiBfYnRvYSxcbiAgICAgICAgYnRvYVBvbHlmaWxsOiBidG9hUG9seWZpbGwsXG4gICAgICAgIGZyb21CYXNlNjQ6IGRlY29kZSxcbiAgICAgICAgdG9CYXNlNjQ6IGVuY29kZSxcbiAgICAgICAgZW5jb2RlOiBlbmNvZGUsXG4gICAgICAgIGVuY29kZVVSSTogZW5jb2RlVVJJLFxuICAgICAgICBlbmNvZGVVUkw6IGVuY29kZVVSSSxcbiAgICAgICAgdXRvYjogdXRvYixcbiAgICAgICAgYnRvdTogYnRvdSxcbiAgICAgICAgZGVjb2RlOiBkZWNvZGUsXG4gICAgICAgIGlzVmFsaWQ6IGlzVmFsaWQsXG4gICAgICAgIGZyb21VaW50OEFycmF5OiBmcm9tVWludDhBcnJheSxcbiAgICAgICAgdG9VaW50OEFycmF5OiB0b1VpbnQ4QXJyYXksXG4gICAgICAgIGV4dGVuZFN0cmluZzogZXh0ZW5kU3RyaW5nLFxuICAgICAgICBleHRlbmRVaW50OEFycmF5OiBleHRlbmRVaW50OEFycmF5LFxuICAgICAgICBleHRlbmRCdWlsdGluczogZXh0ZW5kQnVpbHRpbnNcbiAgICB9O1xuICAgIC8vXG4gICAgLy8gZXhwb3J0IEJhc2U2NCB0byB0aGUgbmFtZXNwYWNlXG4gICAgLy9cbiAgICAvLyBFUzUgaXMgeWV0IHRvIGhhdmUgT2JqZWN0LmFzc2lnbigpIHRoYXQgbWF5IG1ha2UgdHJhbnNwaWxlcnMgdW5oYXBweS5cbiAgICAvLyBnQmFzZTY0LkJhc2U2NCA9IE9iamVjdC5hc3NpZ24oe30sIGdCYXNlNjQpO1xuICAgIGdCYXNlNjQuQmFzZTY0ID0ge307XG4gICAgT2JqZWN0LmtleXMoZ0Jhc2U2NCkuZm9yRWFjaChmdW5jdGlvbiAoaykgeyByZXR1cm4gZ0Jhc2U2NC5CYXNlNjRba10gPSBnQmFzZTY0W2tdOyB9KTtcbiAgICByZXR1cm4gZ0Jhc2U2NDtcbn0pKTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyID0gdm9pZCAwO1xudmFyIGZvcm1fZGF0YV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJmb3JtLWRhdGFcIikpO1xudmFyIHFzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInFzXCIpKTtcbnZhciBqc19iYXNlNjRfMSA9IHJlcXVpcmUoXCJqcy1iYXNlNjRcIik7XG52YXIgcGxhdGZvcm1fMSA9IHJlcXVpcmUoXCIuL3BsYXRmb3JtL1wiKTtcbnZhciBERUZBVUxUX1BST1hZX1BST1RPQ09MID0gXCJodHRwXCI7XG52YXIgVEhSRVNIT0xEX0FWT0lEX1JFUVVFU1RfVVJMX1RPT19MQVJHRSA9IDQwOTY7XG52YXIgS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEtpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IG9wdGlvbnMuYmFzZVVybDtcbiAgICAgICAgdGhpcy5hdXRoID0gb3B0aW9ucy5hdXRoO1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSB0aGlzLmJ1aWxkSGVhZGVycyh7XG4gICAgICAgICAgICBiYXNpY0F1dGg6IG9wdGlvbnMuYmFzaWNBdXRoLFxuICAgICAgICAgICAgdXNlckFnZW50OiBvcHRpb25zLnVzZXJBZ2VudCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChcImh0dHBzQWdlbnRcIiBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAoXCJjbGllbnRDZXJ0QXV0aFwiIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3Qgc3BlY2lmeSBjbGllbnRDZXJ0QXV0aCBhbG9uZyB3aXRoIGh0dHBzQWdlbnQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5odHRwc0FnZW50ID0gb3B0aW9ucy5odHRwc0FnZW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFwiY2xpZW50Q2VydEF1dGhcIiBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmNsaWVudENlcnRBdXRoID0gb3B0aW9ucy5jbGllbnRDZXJ0QXV0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb3h5ID0gb3B0aW9ucy5wcm94eTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0VG9rZW4gPSBudWxsO1xuICAgICAgICB0aGlzLnNvY2tldFRpbWVvdXQgPSBvcHRpb25zLnNvY2tldFRpbWVvdXQ7XG4gICAgfVxuICAgIEtpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlci5wcm90b3R5cGUuYnVpbGQgPSBmdW5jdGlvbiAobWV0aG9kLCBwYXRoLCBwYXJhbXMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlcXVlc3RDb25maWcsIF9hLCByZXF1ZXN0VXJsLCBfYiwgZm9ybURhdGEsIF9jLCBfZCwgcmVxdWVzdFVybCwgX2UsIF9mO1xuICAgICAgICAgICAgdmFyIF9nLCBfaCwgX2o7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9rKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfay5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q29uZmlnID0gX19hc3NpZ24oX19hc3NpZ24oX19hc3NpZ24oeyBtZXRob2Q6IG1ldGhvZCwgaGVhZGVyczogdGhpcy5oZWFkZXJzLCB1cmw6IFwiXCIuY29uY2F0KHRoaXMuYmFzZVVybCkuY29uY2F0KHBhdGgpIH0sIChvcHRpb25zID8gb3B0aW9ucyA6IHt9KSksIHBsYXRmb3JtXzEucGxhdGZvcm1EZXBzLmJ1aWxkUGxhdGZvcm1EZXBlbmRlbnRDb25maWcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzQWdlbnQ6IHRoaXMuaHR0cHNBZ2VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRDZXJ0QXV0aDogdGhpcy5jbGllbnRDZXJ0QXV0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXRUaW1lb3V0OiB0aGlzLnNvY2tldFRpbWVvdXQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSksIHsgcHJveHk6IHRoaXMuYnVpbGRQcm94eUNvbmZpZyh0aGlzLnByb3h5KSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hID0gbWV0aG9kO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJnZXRcIjogcmV0dXJuIFszIC8qYnJlYWsqLywgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInBvc3RcIjogcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInB1dFwiOiByZXR1cm4gWzMgLypicmVhayovLCA4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZGVsZXRlXCI6IHJldHVybiBbMyAvKmJyZWFrKi8sIDEwXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDEyXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVybCA9IHRoaXMuYnVpbGRSZXF1ZXN0VXJsKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZXF1ZXN0VXJsLmxlbmd0aCA+IFRIUkVTSE9MRF9BVk9JRF9SRVFVRVNUX1VSTF9UT09fTEFSR0UpKSByZXR1cm4gWzMgLypicmVhayovLCAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9iID0gW19fYXNzaWduKHt9LCByZXF1ZXN0Q29uZmlnKV07XG4gICAgICAgICAgICAgICAgICAgICAgICBfZyA9IHsgbWV0aG9kOiBcInBvc3RcIiwgaGVhZGVyczogX19hc3NpZ24oX19hc3NpZ24oe30sIHRoaXMuaGVhZGVycyksIHsgXCJYLUhUVFAtTWV0aG9kLU92ZXJyaWRlXCI6IFwiR0VUXCIgfSkgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuYnVpbGREYXRhKHBhcmFtcyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBbMiAvKnJldHVybiovLCBfX2Fzc2lnbi5hcHBseSh2b2lkIDAsIF9iLmNvbmNhdChbKF9nLmRhdGEgPSBfay5zZW50KCksIF9nKV0pKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXF1ZXN0Q29uZmlnKSwgeyB1cmw6IHJlcXVlc3RVcmwgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShwYXJhbXMgaW5zdGFuY2VvZiBmb3JtX2RhdGFfMS5kZWZhdWx0KSkgcmV0dXJuIFszIC8qYnJlYWsqLywgNl07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmJ1aWxkRGF0YShwYXJhbXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEgPSBfay5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgX19hc3NpZ24oX19hc3NpZ24oe30sIHJlcXVlc3RDb25maWcpLCB7IGhlYWRlcnM6IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiBmb3JtRGF0YS5nZXRIZWFkZXJzIGRvZXMgbm90IGV4aXN0IGluIGEgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGZvcm1EYXRhLmdldEhlYWRlcnMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgdGhpcy5oZWFkZXJzKSwgZm9ybURhdGEuZ2V0SGVhZGVycygpKSA6IHRoaXMuaGVhZGVycywgZGF0YTogZm9ybURhdGEgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYyA9IFtfX2Fzc2lnbih7fSwgcmVxdWVzdENvbmZpZyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2ggPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuYnVpbGREYXRhKHBhcmFtcyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDc6IHJldHVybiBbMiAvKnJldHVybiovLCBfX2Fzc2lnbi5hcHBseSh2b2lkIDAsIF9jLmNvbmNhdChbKF9oLmRhdGEgPSBfay5zZW50KCksIF9oKV0pKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9kID0gW19fYXNzaWduKHt9LCByZXF1ZXN0Q29uZmlnKV07XG4gICAgICAgICAgICAgICAgICAgICAgICBfaiA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5idWlsZERhdGEocGFyYW1zKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgOTogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9fYXNzaWduLmFwcGx5KHZvaWQgMCwgX2QuY29uY2F0KFsoX2ouZGF0YSA9IF9rLnNlbnQoKSwgX2opXSkpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lID0gdGhpcy5idWlsZFJlcXVlc3RVcmw7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZiA9IFtwYXRoXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuYnVpbGREYXRhKHBhcmFtcyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVybCA9IF9lLmFwcGx5KHRoaXMsIF9mLmNvbmNhdChbX2suc2VudCgpXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXF1ZXN0Q29uZmlnKSwgeyB1cmw6IHJlcXVlc3RVcmwgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlwiLmNvbmNhdChtZXRob2QsIFwiIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF9rLmxhYmVsID0gMTM7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBLaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXIucHJvdG90eXBlLmJ1aWxkUHJveHlDb25maWcgPSBmdW5jdGlvbiAocHJveHlDb25maWcpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAocHJveHlDb25maWcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJveHlDb25maWcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByb3h5ID0gcHJveHlDb25maWc7XG4gICAgICAgIGlmIChwcm94eS5hdXRoICYmXG4gICAgICAgICAgICAocHJveHkuYXV0aC51c2VybmFtZS5sZW5ndGggPT09IDAgfHwgcHJveHkuYXV0aC5wYXNzd29yZC5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICBwcm94eS5hdXRoID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHByb3h5LnByb3RvY29sID0gKF9hID0gcHJveHkucHJvdG9jb2wpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IERFRkFVTFRfUFJPWFlfUFJPVE9DT0w7XG4gICAgICAgIHJldHVybiBwcm94eTtcbiAgICB9O1xuICAgIEtpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlci5wcm90b3R5cGUuYnVpbGRSZXF1ZXN0VXJsID0gZnVuY3Rpb24gKHBhdGgsIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQodGhpcy5iYXNlVXJsKS5jb25jYXQocGF0aCwgXCI/XCIpLmNvbmNhdChxc18xLmRlZmF1bHQuc3RyaW5naWZ5KHBhcmFtcykpO1xuICAgIH07XG4gICAgS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyLnByb3RvdHlwZS5idWlsZERhdGEgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXF1ZXN0VG9rZW47XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0aGlzLmF1dGgudHlwZSA9PT0gXCJzZXNzaW9uXCIpKSByZXR1cm4gWzMgLypicmVhayovLCAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuZ2V0UmVxdWVzdFRva2VuKCldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0VG9rZW4gPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zIGluc3RhbmNlb2YgZm9ybV9kYXRhXzEuZGVmYXVsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoXCJfX1JFUVVFU1RfVE9LRU5fX1wiLCByZXF1ZXN0VG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBwYXJhbXNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9fYXNzaWduKHsgX19SRVFVRVNUX1RPS0VOX186IHJlcXVlc3RUb2tlbiB9LCBwYXJhbXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gWzIgLypyZXR1cm4qLywgcGFyYW1zXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBLaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXIucHJvdG90eXBlLmJ1aWxkSGVhZGVycyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIGJhc2ljQXV0aCA9IHBhcmFtcy5iYXNpY0F1dGgsIHVzZXJBZ2VudCA9IHBhcmFtcy51c2VyQWdlbnQ7XG4gICAgICAgIHZhciBiYXNpY0F1dGhIZWFkZXJzID0gYmFzaWNBdXRoXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBcIkJhc2ljIFwiLmNvbmNhdChqc19iYXNlNjRfMS5CYXNlNjQuZW5jb2RlKFwiXCIuY29uY2F0KGJhc2ljQXV0aC51c2VybmFtZSwgXCI6XCIpLmNvbmNhdChiYXNpY0F1dGgucGFzc3dvcmQpKSksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9O1xuICAgICAgICB2YXIgcGxhdGZvcm1EZXBzSGVhZGVycyA9IHBsYXRmb3JtXzEucGxhdGZvcm1EZXBzLmJ1aWxkSGVhZGVycyh7IHVzZXJBZ2VudDogdXNlckFnZW50IH0pO1xuICAgICAgICB2YXIgY29tbW9uSGVhZGVycyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBwbGF0Zm9ybURlcHNIZWFkZXJzKSwgYmFzaWNBdXRoSGVhZGVycyk7XG4gICAgICAgIHN3aXRjaCAodGhpcy5hdXRoLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJwYXNzd29yZFwiOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb21tb25IZWFkZXJzKSwgeyBcIlgtQ3lib3p1LUF1dGhvcml6YXRpb25cIjoganNfYmFzZTY0XzEuQmFzZTY0LmVuY29kZShcIlwiLmNvbmNhdCh0aGlzLmF1dGgudXNlcm5hbWUsIFwiOlwiKS5jb25jYXQodGhpcy5hdXRoLnBhc3N3b3JkKSkgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiYXBpVG9rZW5cIjoge1xuICAgICAgICAgICAgICAgIHZhciBhcGlUb2tlbiA9IHRoaXMuYXV0aC5hcGlUb2tlbjtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcGlUb2tlbikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb21tb25IZWFkZXJzKSwgeyBcIlgtQ3lib3p1LUFQSS1Ub2tlblwiOiBhcGlUb2tlbi5qb2luKFwiLFwiKSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb21tb25IZWFkZXJzKSwgeyBcIlgtQ3lib3p1LUFQSS1Ub2tlblwiOiBhcGlUb2tlbiB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJvQXV0aFRva2VuXCI6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX19hc3NpZ24oX19hc3NpZ24oe30sIGNvbW1vbkhlYWRlcnMpLCB7IEF1dGhvcml6YXRpb246IFwiQmVhcmVyIFwiLmNvbmNhdCh0aGlzLmF1dGgub0F1dGhUb2tlbikgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb21tb25IZWFkZXJzKSwgeyBcIlgtUmVxdWVzdGVkLVdpdGhcIjogXCJYTUxIdHRwUmVxdWVzdFwiIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBLaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXIucHJvdG90eXBlLmdldFJlcXVlc3RUb2tlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodGhpcy5yZXF1ZXN0VG9rZW4gPT09IG51bGwpKSByZXR1cm4gWzMgLypicmVhayovLCAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHBsYXRmb3JtXzEucGxhdGZvcm1EZXBzLmdldFJlcXVlc3RUb2tlbigpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2EucmVxdWVzdFRva2VuID0gX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAyO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLnJlcXVlc3RUb2tlbl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIEtpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlcjtcbn0oKSk7XG5leHBvcnRzLktpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlciA9IEtpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUtpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLktpbnRvbmVSZXNwb25zZUhhbmRsZXIgPSB2b2lkIDA7XG52YXIgZXJyb3JfMSA9IHJlcXVpcmUoXCIuL2Vycm9yXCIpO1xudmFyIEtpbnRvbmVSZXNwb25zZUhhbmRsZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gS2ludG9uZVJlc3BvbnNlSGFuZGxlcihfYSkge1xuICAgICAgICB2YXIgZW5hYmxlQWJvcnRTZWFyY2hFcnJvciA9IF9hLmVuYWJsZUFib3J0U2VhcmNoRXJyb3I7XG4gICAgICAgIHRoaXMuZW5hYmxlQWJvcnRTZWFyY2hFcnJvciA9IGVuYWJsZUFib3J0U2VhcmNoRXJyb3I7XG4gICAgfVxuICAgIEtpbnRvbmVSZXNwb25zZUhhbmRsZXIucHJvdG90eXBlLmhhbmRsZSA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UudGhlbihmdW5jdGlvbiAocmVzKSB7IHJldHVybiBfdGhpcy5oYW5kbGVTdWNjZXNzUmVzcG9uc2UocmVzKTsgfSwgZnVuY3Rpb24gKGVycm9yKSB7IHJldHVybiBfdGhpcy5oYW5kbGVFcnJvclJlc3BvbnNlKGVycm9yKTsgfSk7XG4gICAgfTtcbiAgICBLaW50b25lUmVzcG9uc2VIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVTdWNjZXNzUmVzcG9uc2UgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlQWJvcnRTZWFyY2hFcnJvciAmJlxuICAgICAgICAgICAgL0ZpbHRlciBhYm9ydGVkIGJlY2F1c2Ugb2YgdG9vIG1hbnkgc2VhcmNoIHJlc3VsdHMvLnRlc3QocmVzcG9uc2UuaGVhZGVyc1tcIngtY3lib3p1LXdhcm5pbmdcIl0pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JfMS5LaW50b25lQWJvcnRTZWFyY2hFcnJvcihyZXNwb25zZS5oZWFkZXJzW1wieC1jeWJvenUtd2FybmluZ1wiXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfTtcbiAgICBLaW50b25lUmVzcG9uc2VIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVFcnJvclJlc3BvbnNlID0gZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIGlmICghZXJyb3IucmVzcG9uc2UpIHtcbiAgICAgICAgICAgIC8vIEZJWE1FOiBmaW5kIGEgYmV0dGVyIHdheSB0byBoYW5kbGUgdGhpcyBlcnJvclxuICAgICAgICAgICAgaWYgKC9tYWMgdmVyaWZ5IGZhaWx1cmUvLnRlc3QoZXJyb3IudG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNsaWVudENlcnRBdXRoIHNldHRpbmdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3JSZXNwb25zZSA9IGVycm9yLnJlc3BvbnNlO1xuICAgICAgICB2YXIgZGF0YSA9IGVycm9yUmVzcG9uc2UuZGF0YSwgcmVzdCA9IF9fcmVzdChlcnJvclJlc3BvbnNlLCBbXCJkYXRhXCJdKTtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJcIi5jb25jYXQocmVzdC5zdGF0dXMsIFwiOiBcIikuY29uY2F0KHJlc3Quc3RhdHVzVGV4dCkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBlcnJvcl8xLktpbnRvbmVSZXN0QVBJRXJyb3IoX19hc3NpZ24oeyBkYXRhOiBkYXRhIH0sIHJlc3QpKTtcbiAgICB9O1xuICAgIHJldHVybiBLaW50b25lUmVzcG9uc2VIYW5kbGVyO1xufSgpKTtcbmV4cG9ydHMuS2ludG9uZVJlc3BvbnNlSGFuZGxlciA9IEtpbnRvbmVSZXNwb25zZUhhbmRsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1LaW50b25lUmVzcG9uc2VIYW5kbGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuS2ludG9uZVJlc3RBUElDbGllbnQgPSB2b2lkIDA7XG52YXIgQnVsa1JlcXVlc3RDbGllbnRfMSA9IHJlcXVpcmUoXCIuL2NsaWVudC9CdWxrUmVxdWVzdENsaWVudFwiKTtcbnZhciBBcHBDbGllbnRfMSA9IHJlcXVpcmUoXCIuL2NsaWVudC9BcHBDbGllbnRcIik7XG52YXIgUmVjb3JkQ2xpZW50XzEgPSByZXF1aXJlKFwiLi9jbGllbnQvUmVjb3JkQ2xpZW50XCIpO1xudmFyIFNwYWNlQ2xpZW50XzEgPSByZXF1aXJlKFwiLi9jbGllbnQvU3BhY2VDbGllbnRcIik7XG52YXIgRmlsZUNsaWVudF8xID0gcmVxdWlyZShcIi4vY2xpZW50L0ZpbGVDbGllbnRcIik7XG52YXIgaHR0cF8xID0gcmVxdWlyZShcIi4vaHR0cC9cIik7XG52YXIgS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyXzEgPSByZXF1aXJlKFwiLi9LaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXJcIik7XG52YXIgS2ludG9uZVJlc3BvbnNlSGFuZGxlcl8xID0gcmVxdWlyZShcIi4vS2ludG9uZVJlc3BvbnNlSGFuZGxlclwiKTtcbnZhciBwbGF0Zm9ybV8xID0gcmVxdWlyZShcIi4vcGxhdGZvcm1cIik7XG52YXIgVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yXzEgPSByZXF1aXJlKFwiLi9wbGF0Zm9ybS9VbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3JcIik7XG52YXIgYnVpbGREaXNjcmltaW5hdGVkQXV0aCA9IGZ1bmN0aW9uIChhdXRoKSB7XG4gICAgaWYgKFwidXNlcm5hbWVcIiBpbiBhdXRoKSB7XG4gICAgICAgIHJldHVybiBfX2Fzc2lnbih7IHR5cGU6IFwicGFzc3dvcmRcIiB9LCBhdXRoKTtcbiAgICB9XG4gICAgaWYgKFwiYXBpVG9rZW5cIiBpbiBhdXRoKSB7XG4gICAgICAgIHJldHVybiBfX2Fzc2lnbih7IHR5cGU6IFwiYXBpVG9rZW5cIiB9LCBhdXRoKTtcbiAgICB9XG4gICAgaWYgKFwib0F1dGhUb2tlblwiIGluIGF1dGgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXNzaWduKHsgdHlwZTogXCJvQXV0aFRva2VuXCIgfSwgYXV0aCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBwbGF0Zm9ybV8xLnBsYXRmb3JtRGVwcy5nZXREZWZhdWx0QXV0aCgpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvcl8xLlVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2Vzc2lvbiBhdXRoZW50aWNhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluIFwiLmNvbmNhdChlLnBsYXRmb3JtLCBcIiBlbnZpcm9ubWVudC5cIikpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGU7XG4gICAgfVxufTtcbnZhciBLaW50b25lUmVzdEFQSUNsaWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBLaW50b25lUmVzdEFQSUNsaWVudChvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICB2YWxpZGF0ZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IHBsYXRmb3JtXzEucGxhdGZvcm1EZXBzXG4gICAgICAgICAgICAuYnVpbGRCYXNlVXJsKG9wdGlvbnMuYmFzZVVybClcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpOyAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hcbiAgICAgICAgdmFyIGF1dGggPSBidWlsZERpc2NyaW1pbmF0ZWRBdXRoKChfYSA9IG9wdGlvbnMuYXV0aCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30pO1xuICAgICAgICB2YXIgcmVxdWVzdENvbmZpZ0J1aWxkZXIgPSBuZXcgS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyXzEuS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyKF9fYXNzaWduKF9fYXNzaWduKHt9LCBvcHRpb25zKSwgeyBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsIGF1dGg6IGF1dGggfSkpO1xuICAgICAgICB2YXIgcmVzcG9uc2VIYW5kbGVyID0gbmV3IEtpbnRvbmVSZXNwb25zZUhhbmRsZXJfMS5LaW50b25lUmVzcG9uc2VIYW5kbGVyKHtcbiAgICAgICAgICAgIGVuYWJsZUFib3J0U2VhcmNoRXJyb3I6IChfYyA9IChfYiA9IG9wdGlvbnMuZmVhdHVyZUZsYWdzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZW5hYmxlQWJvcnRTZWFyY2hFcnJvcikgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgaHR0cENsaWVudCA9IG5ldyBodHRwXzEuRGVmYXVsdEh0dHBDbGllbnQoe1xuICAgICAgICAgICAgcmVzcG9uc2VIYW5kbGVyOiByZXNwb25zZUhhbmRsZXIsXG4gICAgICAgICAgICByZXF1ZXN0Q29uZmlnQnVpbGRlcjogcmVxdWVzdENvbmZpZ0J1aWxkZXIsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZ3Vlc3RTcGFjZUlkID0gb3B0aW9ucy5ndWVzdFNwYWNlSWQ7XG4gICAgICAgIHRoaXMuYnVsa1JlcXVlc3RfID0gbmV3IEJ1bGtSZXF1ZXN0Q2xpZW50XzEuQnVsa1JlcXVlc3RDbGllbnQoaHR0cENsaWVudCwgZ3Vlc3RTcGFjZUlkKTtcbiAgICAgICAgdGhpcy5yZWNvcmQgPSBuZXcgUmVjb3JkQ2xpZW50XzEuUmVjb3JkQ2xpZW50KGh0dHBDbGllbnQsIHRoaXMuYnVsa1JlcXVlc3RfLCBndWVzdFNwYWNlSWQpO1xuICAgICAgICB0aGlzLmFwcCA9IG5ldyBBcHBDbGllbnRfMS5BcHBDbGllbnQoaHR0cENsaWVudCwgZ3Vlc3RTcGFjZUlkKTtcbiAgICAgICAgdGhpcy5zcGFjZSA9IG5ldyBTcGFjZUNsaWVudF8xLlNwYWNlQ2xpZW50KGh0dHBDbGllbnQsIGd1ZXN0U3BhY2VJZCk7XG4gICAgICAgIHRoaXMuZmlsZSA9IG5ldyBGaWxlQ2xpZW50XzEuRmlsZUNsaWVudChodHRwQ2xpZW50LCBndWVzdFNwYWNlSWQpO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoS2ludG9uZVJlc3RBUElDbGllbnQsIFwidmVyc2lvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBsYXRmb3JtXzEucGxhdGZvcm1EZXBzLmdldFZlcnNpb24oKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIEtpbnRvbmVSZXN0QVBJQ2xpZW50LnByb3RvdHlwZS5nZXRCYXNlVXJsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsO1xuICAgIH07XG4gICAgS2ludG9uZVJlc3RBUElDbGllbnQucHJvdG90eXBlLmJ1bGtSZXF1ZXN0ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gdGhpcy5idWxrUmVxdWVzdF8uc2VuZChwYXJhbXMpO1xuICAgIH07XG4gICAgcmV0dXJuIEtpbnRvbmVSZXN0QVBJQ2xpZW50O1xufSgpKTtcbmV4cG9ydHMuS2ludG9uZVJlc3RBUElDbGllbnQgPSBLaW50b25lUmVzdEFQSUNsaWVudDtcbnZhciB2YWxpZGF0ZU9wdGlvbnMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhbGlkYXRlQmFzZVVybChvcHRpb25zLmJhc2VVcmwpO1xuICAgIHZhbGlkYXRlR3Vlc3RTcGFjZUlkKG9wdGlvbnMuZ3Vlc3RTcGFjZUlkKTtcbiAgICB2YWxpZGF0ZVNvY2tldFRpbWVvdXQob3B0aW9ucy5zb2NrZXRUaW1lb3V0KTtcbn07XG52YXIgdmFsaWRhdGVCYXNlVXJsID0gZnVuY3Rpb24gKGJhc2VVcmwpIHtcbiAgICBpZiAoYmFzZVVybCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHVybCA9IG5ldyBVUkwoYmFzZVVybCk7XG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPT0gXCJsb2NhbGhvc3RcIiAmJiB1cmwucHJvdG9jb2wgIT09IFwiaHR0cHM6XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcHJvdG9jb2wgb2YgYmFzZVVybCBtdXN0IGJlIFwiaHR0cHNcIi4nKTtcbiAgICB9XG59O1xudmFyIHZhbGlkYXRlR3Vlc3RTcGFjZUlkID0gZnVuY3Rpb24gKGd1ZXN0U3BhY2VJZCkge1xuICAgIGlmIChndWVzdFNwYWNlSWQgPT09IFwiXCIgfHwgZ3Vlc3RTcGFjZUlkID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZ3Vlc3RTcGFjZUlkOiBnb3QgW1wiLmNvbmNhdChndWVzdFNwYWNlSWQsIFwiXVwiKSk7XG4gICAgfVxufTtcbnZhciB2YWxpZGF0ZVNvY2tldFRpbWVvdXQgPSBmdW5jdGlvbiAoc29ja2V0VGltZW91dCkge1xuICAgIGlmIChzb2NrZXRUaW1lb3V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbnVtYmVyID0gcGFyc2VGbG9hdChzb2NrZXRUaW1lb3V0LnRvU3RyaW5nKCkpO1xuICAgIGlmIChpc05hTihudW1iZXIpIHx8IG51bWJlciA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzb2NrZXRUaW1lb3V0LiBNdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLlwiKTtcbiAgICB9XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9S2ludG9uZVJlc3RBUElDbGllbnQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLktpbnRvbmVSZXN0QVBJQ2xpZW50ID0gdm9pZCAwO1xudmFyIHBsYXRmb3JtXzEgPSByZXF1aXJlKFwiLi9wbGF0Zm9ybS9cIik7XG52YXIgYnJvd3NlckRlcHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vcGxhdGZvcm0vYnJvd3NlclwiKSk7XG4oMCwgcGxhdGZvcm1fMS5pbmplY3RQbGF0Zm9ybURlcHMpKGJyb3dzZXJEZXBzKTtcbnZhciBLaW50b25lUmVzdEFQSUNsaWVudF8xID0gcmVxdWlyZShcIi4vS2ludG9uZVJlc3RBUElDbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJLaW50b25lUmVzdEFQSUNsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gS2ludG9uZVJlc3RBUElDbGllbnRfMS5LaW50b25lUmVzdEFQSUNsaWVudDsgfSB9KTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9lcnJvclwiKSwgZXhwb3J0cyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5icm93c2VyLmpzLm1hcCIsIi8vIHNyYy90eXBlcy9maWVsZC5kLnRzXHJcblxyXG5leHBvcnQgZW51bSBGaWVsZFR5cGUge1xyXG4gICAgQ0FMQyA9IFwiQ0FMQ1wiLFxyXG4gICAgQ0FURUdPUlkgPSBcIkNBVEVHT1JZXCIsXHJcbiAgICBDSEVDS19CT1ggPSBcIkNIRUNLX0JPWFwiLFxyXG4gICAgQ1JFQVRFRF9USU1FID0gXCJDUkVBVEVEX1RJTUVcIixcclxuICAgIENSRUFUT1IgPSBcIkNSRUFUT1JcIixcclxuICAgIERBVEUgPSBcIkRBVEVcIixcclxuICAgIERBVEVUSU1FID0gXCJEQVRFVElNRVwiLFxyXG4gICAgRFJPUF9ET1dOID0gXCJEUk9QX0RPV05cIixcclxuICAgIEZJTEUgPSBcIkZJTEVcIixcclxuICAgIEdST1VQID0gXCJHUk9VUFwiLFxyXG4gICAgR1JPVVBfU0VMRUNUID0gXCJHUk9VUF9TRUxFQ1RcIixcclxuICAgIExJTksgPSBcIkxJTktcIixcclxuICAgIE1PRElGSUVSID0gXCJNT0RJRklFUlwiLFxyXG4gICAgTVVMVElfTElORV9URVhUID0gXCJNVUxUSV9MSU5FX1RFWFRcIixcclxuICAgIE1VTFRJX1NFTEVDVCA9IFwiTVVMVElfU0VMRUNUXCIsXHJcbiAgICBOVU1CRVIgPSBcIk5VTUJFUlwiLFxyXG4gICAgT1JHQU5JWkFUSU9OX1NFTEVDVCA9IFwiT1JHQU5JWkFUSU9OX1NFTEVDVFwiLFxyXG4gICAgUkFESU9fQlVUVE9OID0gXCJSQURJT19CVVRUT05cIixcclxuICAgIFJFQ09SRF9OVU1CRVIgPSBcIlJFQ09SRF9OVU1CRVJcIixcclxuICAgIFJFRkVSRU5DRV9UQUJMRSA9IFwiUkVGRVJFTkNFX1RBQkxFXCIsXHJcbiAgICBSSUNIX1RFWFQgPSBcIlJJQ0hfVEVYVFwiLFxyXG4gICAgU0lOR0xFX0xJTkVfVEVYVCA9IFwiU0lOR0xFX0xJTkVfVEVYVFwiLFxyXG4gICAgU1RBVFVTID0gXCJTVEFUVVNcIixcclxuICAgIFNUQVRVU19BU1NJR05FRSA9IFwiU1RBVFVTX0FTU0lHTkVFXCIsXHJcbiAgICBTVUJUQUJMRSA9IFwiU1VCVEFCTEVcIixcclxuICAgIFRJTUUgPSBcIlRJTUVcIixcclxuICAgIFVQREFURURfVElNRSA9IFwiVVBEQVRFRF9USU1FXCIsXHJcbiAgICBVU0VSX1NFTEVDVCA9IFwiVVNFUl9TRUxFQ1RcIlxyXG59XHJcblxyXG5leHBvcnQgZW51bSBDYWxjRm9ybWF0e1xyXG4gICAgTlVNQkVSID0gXCJOVU1CRVJcIixcclxuICAgIE5VTUJFUl9ESUdJVCA9IFwiTlVNQkVSX0RJR0lUXCIsXHJcbiAgICBEQVRFVElNRSA9IFwiREFURVRJTUVcIixcclxuICAgIERBVEUgPSBcIkRBVEVcIixcclxuICAgIFRJTUUgPSBcIlRJTUVcIixcclxuICAgIEhPVVJfTUlOVVRFPSBcIkhPVVJfTUlOVVRFXCIsXHJcbiAgICBEQVlfSE9VUl9NSU5VVEU9IFwiREFZX0hPVVJfTUlOVVRFXCJcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWVsZEZvcm0ge1xyXG4gICAgY29kZTogc3RyaW5nO1xyXG4gICAgdHlwZTogRmllbGRUeXBlO1xyXG4gICAgcmVxdWlyZWQ/OiBib29sZWFuO1xyXG4gICAgbm9MYWJlbD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uRm9ybXtcclxuICAgIGluZGV4OiBzdHJpbmc7XHJcbiAgICBsYWJlbDogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUZvcm0ge1xyXG4gICAgY29kZTogc3RyaW5nO1xyXG4gICAgdHlwZTogJ1VTRVInIHwgJ09SR0FOSVpBVElPTicgfCAnR1JPVVAnIHwgJ0ZVTkNUSU9OJztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDYWxjRmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIHVuaXQ/OiBzdHJpbmc7XHJcbiAgICBleHByZXNzaW9uPzogc3RyaW5nO1xyXG4gICAgZm9ybWF0PzpDYWxjRm9ybWF0O1xyXG4gICAgdW5pdFBvc2l0aW9uPzogJ0JFRk9SRScgfCAnQUZURVInO1xyXG4gICAgZGlzcGxheVNjYWxlPzogc3RyaW5nO1xyXG4gICAgaGlkZUV4cHJlc3Npb24/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENhdGVnb3J5RmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIGVuYWJsZWQ/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERhdGVGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xyXG4gICAgdW5pcXVlPzogYm9vbGVhbjtcclxuICAgIGRlZmF1bHROb3dWYWx1ZT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZXRpbWVGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xyXG4gICAgdW5pcXVlPzogYm9vbGVhbjtcclxuICAgIGRlZmF1bHROb3dWYWx1ZT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGVjaW1hbEZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBtYXhWYWx1ZT86IHN0cmluZztcclxuICAgIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcclxuICAgIHVuaXRQb3NpdGlvbj86ICdCRUZPUkUnIHwgJ0FGVEVSJztcclxuICAgIG1pblZhbHVlPzogc3RyaW5nO1xyXG4gICAgdW5pdD86IHN0cmluZztcclxuICAgIHVuaXF1ZT86IGJvb2xlYW47XHJcbiAgICBkaXNwbGF5U2NhbGU/OiBzdHJpbmc7XHJcbiAgICBkaWdpdD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yRmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlGb3JtIHtcclxuICAgIGNvZGU6IHN0cmluZztcclxuICAgIHR5cGU6ICdVU0VSJyB8ICdPUkdBTklaQVRJT04nIHwgJ0dST1VQJyB8ICdGVU5DVElPTic7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmllbGRNYXBwaW5nRm9ybSB7XHJcbiAgICByZWxhdGVkRmllbGQ6IHN0cmluZztcclxuICAgIGZpZWxkOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmlsZUZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICB0aHVtYm5haWxTaXplPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwRmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIG9wZW5Hcm91cD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBTZWxlY3RGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgZW50aXRpZXM6IEVudGl0eUZvcm1bXTtcclxuICAgIGRlZmF1bHRWYWx1ZT86IEVudGl0eUZvcm1bXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMaW5rRmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIHByb3RvY29sPzogJ1dFQicgfCAnQ0FMTCcgfCAnTUFJTCc7XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XHJcbiAgICBtaW5MZW5ndGg/OiBzdHJpbmc7XHJcbiAgICB1bmlxdWU/OiBib29sZWFuO1xyXG4gICAgbWF4TGVuZ3RoPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIExvb2t1cEZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBsb29rdXA6IHtcclxuICAgICAgICBsb29rdXBQaWNrZXJGaWVsZHM6IHN0cmluZ1tdO1xyXG4gICAgICAgIHJlbGF0ZWRLZXlGaWVsZDogc3RyaW5nO1xyXG4gICAgICAgIHJlbGF0ZWRBcHA6IHtcclxuICAgICAgICAgICAgYXBwOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIGNvZGU6IHN0cmluZztcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZpZWxkTWFwcGluZ3M6IEZpZWxkTWFwcGluZ0Zvcm1bXTtcclxuICAgICAgICBzb3J0Pzogc3RyaW5nO1xyXG4gICAgICAgIGZpbHRlckNvbmQ/OiBzdHJpbmc7XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1vZGlmaWVkQXRGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge31cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTW9kaWZpZXJGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge31cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlwbGVDaGVja0ZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBzdHJpbmdbXTtcclxuICAgIG9wdGlvbnM6IHtcclxuICAgICAgICBba2V5OiBzdHJpbmddOiBPcHRpb25Gb3JtO1xyXG4gICAgfTtcclxuICAgIGFsaWduPzogJ0hPUklaT05UQUwnIHwgJ1ZFUlRJQ0FMJztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNdWx0aXBsZUxpbmVUZXh0RmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNdWx0aXBsZVNlbGVjdEZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBzdHJpbmdbXTtcclxuICAgIG9wdGlvbnM6IHtcclxuICAgICAgICBba2V5OiBzdHJpbmddOiBPcHRpb25Gb3JtO1xyXG4gICAgfTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemF0aW9uU2VsZWN0RmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIGVudGl0aWVzOiBFbnRpdHlGb3JtW107XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBFbnRpdHlGb3JtW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkSWRGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge31cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVmZXJlbmNlVGFibGVGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgcmVmZXJlbmNlVGFibGU6IHtcclxuICAgICAgICBjb25kaXRpb246IHtcclxuICAgICAgICAgICAgcmVsYXRlZEZpZWxkOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIGZpZWxkOiBzdHJpbmc7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBzaXplPzogc3RyaW5nO1xyXG4gICAgICAgIHJlbGF0ZWRBcHA6IHtcclxuICAgICAgICAgICAgYXBwOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIGNvZGU6IHN0cmluZztcclxuICAgICAgICB9O1xyXG4gICAgICAgIHNvcnQ/OiBzdHJpbmc7XHJcbiAgICAgICAgZmlsdGVyQ29uZD86IHN0cmluZztcclxuICAgICAgICBkaXNwbGF5RmllbGRzOiBzdHJpbmdbXTtcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2luZ2xlQ2hlY2tGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xyXG4gICAgb3B0aW9uczoge1xyXG4gICAgICAgIFtrZXk6IHN0cmluZ106IE9wdGlvbkZvcm07XHJcbiAgICB9O1xyXG4gICAgYWxpZ24/OiAnSE9SSVpPTlRBTCcgfCAnVkVSVElDQUwnO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNpbmdsZUxpbmVUZXh0RmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIGV4cHJlc3Npb24/OiBzdHJpbmc7XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XHJcbiAgICBtaW5MZW5ndGg/OiBzdHJpbmc7XHJcbiAgICB1bmlxdWU/OiBib29sZWFuO1xyXG4gICAgbWF4TGVuZ3RoPzogc3RyaW5nO1xyXG4gICAgaGlkZUV4cHJlc3Npb24/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNpbmdsZVNlbGVjdEZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XHJcbiAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgW2tleTogc3RyaW5nXTogT3B0aW9uRm9ybTtcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3RhdHVzQXNzaWduZWVGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgZW5hYmxlZD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3RhdHVzRmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIGVuYWJsZWQ/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBmaWVsZHM6IHtcclxuICAgICAgICBba2V5OiBzdHJpbmddOiBDYWxjRmllbGRGb3JtIHwgQ2F0ZWdvcnlGaWVsZEZvcm0gfCBEYXRlRmllbGRGb3JtIHwgRGF0ZXRpbWVGaWVsZEZvcm0gfCBEZWNpbWFsRmllbGRGb3JtIHwgRWRpdG9yRmllbGRGb3JtIHwgRmlsZUZpZWxkRm9ybSB8IEdyb3VwRmllbGRGb3JtIHwgR3JvdXBTZWxlY3RGaWVsZEZvcm0gfCBMaW5rRmllbGRGb3JtIHwgTG9va3VwRmllbGRGb3JtIHwgTW9kaWZpZWRBdEZpZWxkRm9ybSB8IE1vZGlmaWVyRmllbGRGb3JtIHwgTXVsdGlwbGVDaGVja0ZpZWxkRm9ybSB8IE11bHRpcGxlTGluZVRleHRGaWVsZEZvcm0gfCBNdWx0aXBsZVNlbGVjdEZpZWxkRm9ybSB8IE9yZ2FuaXphdGlvblNlbGVjdEZpZWxkRm9ybSB8IFJlY29yZElkRmllbGRGb3JtIHwgUmVmZXJlbmNlVGFibGVGaWVsZEZvcm0gfCBTaW5nbGVDaGVja0ZpZWxkRm9ybSB8IFNpbmdsZUxpbmVUZXh0RmllbGRGb3JtIHwgU2luZ2xlU2VsZWN0RmllbGRGb3JtIHwgU3RhdHVzQXNzaWduZWVGaWVsZEZvcm0gfCBTdGF0dXNGaWVsZEZvcm0gfCBUYWJsZUZvcm0gfCBUaW1lRmllbGRGb3JtIHwgVXNlclNlbGVjdEZpZWxkRm9ybTtcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVGltZUZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XHJcbiAgICBkZWZhdWx0Tm93VmFsdWU/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJTZWxlY3RGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgZW50aXRpZXM6IEVudGl0eUZvcm1bXTtcclxuICAgIGRlZmF1bHRWYWx1ZT86IEVudGl0eUZvcm1bXTtcclxufSIsImltcG9ydCB7IEZpZWxkRm9ybSxDYWxjRmllbGRGb3JtLEZpZWxkVHlwZSwgQ2FsY0Zvcm1hdH0gZnJvbSBcIi4uL3R5cGVzL0ZpZWxkTGF5b3V0XCI7XHJcblxyXG4vKipcclxuICog6ZuG6KiI5pON5L2c5a2QXHJcbiAqL1xyXG5leHBvcnQgZW51bSBPcGVyYXRvciB7XHJcbiAgICBTVU0gPSBcIlNVTVwiLFxyXG4gICAgQVZHID0gXCJBVkdcIixcclxuICAgIE1BWCA9IFwiTUFYXCIsXHJcbiAgICBNSU4gPSBcIk1JTlwiLFxyXG4gICAgQ09VTlQgPSBcIkNPVU5UXCIsXHJcbiAgICBGSVJTVCA9IFwiRklSU1RcIixcclxuICAgIExBU1QgPSBcIkxBU1RcIlxyXG59XHJcblxyXG4vKipcclxuICog6ZuG6KiI6Zai5pWwXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNsYXNzIEFnZ3JlZ2F0b3Ige1xyXG4gICAgcHJpdmF0ZSBkYXRhOiBzdHJpbmdbXTtcclxuICAgIHByaXZhdGUgZmllbGQ6IEZpZWxkRm9ybTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBzdHJpbmdbXSwgZmllbGQ6IEZpZWxkRm9ybSkge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5maWVsZCA9IGZpZWxkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdG9OdW1iZXJBcnJheSgpOiBudW1iZXJbXSB7XHJcbiAgICAgICAgY29uc3QgbnVtYmVyQXJyYXkgPSB0aGlzLmRhdGEubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIoaXRlbSk7XHJcbiAgICAgICAgICAgIGlmIChpc05hTihudW0pKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOODleOCo+ODvOODq+ODieOAjCR7dGhpcy5maWVsZC5jb2RlfSDjgI3jga/mlbDlgKTjgavlpInmj5vjgafjgY3jgarjgYTjgZ/jgoHjgIHoqIjnrpfjgpLlrp/ooYzjgafjgY3jgb7jgZvjgpPjgIJgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVtO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gbnVtYmVyQXJyYXk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdW0oKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xyXG4gICAgICAgIGNvbnN0IG51bWJlckFycmF5ID0gdGhpcy50b051bWJlckFycmF5KCk7XHJcbiAgICAgICAgcmV0dXJuIG51bWJlckFycmF5LnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyArIHZhbCwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhdmcoKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xyXG4gICAgICAgIGNvbnN0IG51bWJlckFycmF5ID0gdGhpcy50b051bWJlckFycmF5KCk7XHJcbiAgICAgICAgY29uc3QgdG90YWwgPSBudW1iZXJBcnJheS5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgKyB2YWwsIDApO1xyXG4gICAgICAgIHJldHVybiB0b3RhbCAvIG51bWJlckFycmF5Lmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1heCgpOiBudW1iZXIgfCBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuZmllbGQudHlwZSA9PT0gRmllbGRUeXBlLk5VTUJFUiApIHtcclxuICAgICAgICAgICAgY29uc3QgbnVtYmVyQXJyYXkgPSB0aGlzLnRvTnVtYmVyQXJyYXkoKTtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KC4uLm51bWJlckFycmF5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodGhpcy5maWVsZC50eXBlPT09RmllbGRUeXBlLkNBTEMpe1xyXG4gICAgICAgICAgICBjb25zdCBjYWxjRmllbGQgPSB0aGlzLmZpZWxkIGFzIENhbGNGaWVsZEZvcm07XHJcbiAgICAgICAgICAgIGlmKGNhbGNGaWVsZC5mb3JtYXQ9PT1DYWxjRm9ybWF0Lk5VTUJFUiB8fCBjYWxjRmllbGQuZm9ybWF0PT09Q2FsY0Zvcm1hdC5OVU1CRVJfRElHSVQpe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyQXJyYXkgPSB0aGlzLnRvTnVtYmVyQXJyYXkoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCguLi5udW1iZXJBcnJheSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5yZWR1Y2UoKG1heCwgaXRlbSkgPT4gKGl0ZW0gPiBtYXggPyBpdGVtIDogbWF4KSwgdGhpcy5kYXRhWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1pbigpOiBudW1iZXIgfCBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuZmllbGQudHlwZSA9PT0gRmllbGRUeXBlLk5VTUJFUiApIHtcclxuICAgICAgICAgICAgY29uc3QgbnVtYmVyQXJyYXkgPSB0aGlzLnRvTnVtYmVyQXJyYXkoKTtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKC4uLm51bWJlckFycmF5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodGhpcy5maWVsZC50eXBlPT09RmllbGRUeXBlLkNBTEMpe1xyXG4gICAgICAgICAgICBjb25zdCBjYWxjRmllbGQgPSB0aGlzLmZpZWxkIGFzIENhbGNGaWVsZEZvcm07XHJcbiAgICAgICAgICAgIGlmKGNhbGNGaWVsZC5mb3JtYXQ9PT1DYWxjRm9ybWF0Lk5VTUJFUiB8fCBjYWxjRmllbGQuZm9ybWF0PT09Q2FsY0Zvcm1hdC5OVU1CRVJfRElHSVQpe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyQXJyYXkgPSB0aGlzLnRvTnVtYmVyQXJyYXkoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbiguLi5udW1iZXJBcnJheSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodGhpcy5kYXRhPT09bnVsbCB8fCB0aGlzLmRhdGEubGVuZ3RoPT09MCl7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnJlZHVjZSgobWluLCBpdGVtKSA9PiAoaXRlbSA8IG1pbiA/IGl0ZW0gOiBtaW4pLCB0aGlzLmRhdGFbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY291bnQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpcnN0KCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEubGVuZ3RoID8gdGhpcy5kYXRhWzBdIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxhc3QoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5sZW5ndGggPyB0aGlzLmRhdGFbdGhpcy5kYXRhLmxlbmd0aCAtIDFdIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FsY3VsYXRlKG9wZXJhdG9yOiBPcGVyYXRvcik6IG51bWJlciB8IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIE9wZXJhdG9yLlNVTTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VtKCk7XHJcbiAgICAgICAgICAgICAgICBjYXNlIE9wZXJhdG9yLkFWRzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXZnKCk7XHJcbiAgICAgICAgICAgICAgICBjYXNlIE9wZXJhdG9yLk1BWDpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXgoKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuTUlOOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1pbigpO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5DT1VOVDpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb3VudCgpO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5GSVJTVDpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maXJzdCgpO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5MQVNUOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxhc3QoKTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgIH1cclxufSIsImltcG9ydCB7XHJcbiAgSUFjdGlvbixcclxuICBJQWN0aW9uUmVzdWx0LFxyXG4gIElBY3Rpb25Ob2RlLFxyXG4gIElBY3Rpb25Qcm9wZXJ0eSxcclxuICBJQ29udGV4dCxcclxufSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHtLaW50b25lUmVzdEFQSUNsaWVudH0gZnJvbSAnQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50JztcclxuaW1wb3J0IHsgQWdncmVnYXRvcixPcGVyYXRvcn0gZnJvbSAnLi4vdXRpbC9hZ2dyZWdhdGVzJztcclxuaW1wb3J0IHsgRmllbGRGb3JtIH0gZnJvbSBcIi4uL3R5cGVzL0ZpZWxkTGF5b3V0XCI7XHJcblxyXG5pbnRlcmZhY2UgSURhdGFQcm9jZXNzaW5nUHJvcHMge1xyXG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgc291cmNlczogU291cmNlcztcclxuICBjb25kaXRpb246IHN0cmluZztcclxuICB2ZXJOYW1lPzogVmVyTmFtZTtcclxufVxyXG5cclxuaW50ZXJmYWNlIENvbmRpdGlvbiB7XHJcbiAgcXVlcnlTdHJpbmc6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIFZlck5hbWUge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBhY3Rpb25OYW1lOiBzdHJpbmc7XHJcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcclxuICB2YXJzOiBWYXJbXTtcclxufVxyXG5cclxuaW50ZXJmYWNlIFZhciB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBmaWVsZDogRmllbGRGb3JtO1xyXG4gIGxvZ2ljYWxPcGVyYXRvcjogQ2FsY09wZXJhdG9yO1xyXG4gIHZOYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBDYWxjT3BlcmF0b3Ige1xyXG4gIG9wZXJhdG9yOiBPcGVyYXRvcjtcclxuICBsYWJlbDogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgU291cmNlcyB7XHJcbiAgYXBwOiBBcHA7XHJcbiAgZmllbGRzOiBGaWVsZEZvcm1bXTtcclxufVxyXG5cclxuaW50ZXJmYWNlIEFwcCB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBuYW1lPzogc3RyaW5nO1xyXG59XHJcblxyXG50eXBlIFJlc3VsdCA9IHtcclxuICBba2V5OiBzdHJpbmddOiB7XHJcbiAgICB0eXBlOiBzdHJpbmc7XHJcbiAgICB2YWx1ZTogYW55W107XHJcbiAgfTtcclxufTtcclxuXHJcbnR5cGUgQW55T2JqZWN0ID0ge1xyXG4gIFtrZXk6IHN0cmluZ106IGFueTtcclxufTtcclxuXHJcbmV4cG9ydCBjbGFzcyBEYXRhUHJvY2Vzc2luZ0FjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb24ge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgcHJvcHM6IElEYXRhUHJvY2Vzc2luZ1Byb3BzIDtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLm5hbWUgPSBcIuODh+ODvOOCv+WHpueQhlwiO1xyXG4gICAgdGhpcy5hY3Rpb25Qcm9wcyA9IFtdO1xyXG4gICAgdGhpcy5wcm9wcyA9IHtcclxuICAgICAgZGlzcGxheU5hbWU6JycsXHJcbiAgICAgIGNvbmRpdGlvbjonJyxcclxuICAgICAgc291cmNlczp7XHJcbiAgICAgICAgYXBwOntcclxuICAgICAgICAgIGlkOlwiXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZpZWxkczpbXVxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHByb2Nlc3MoXHJcbiAgICBub2RlczogSUFjdGlvbk5vZGUsXHJcbiAgICBldmVudDogYW55LFxyXG4gICAgY29udGV4dDogSUNvbnRleHRcclxuICApOiBQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBub2Rlcy5hY3Rpb25Qcm9wcztcclxuXHJcbiAgICB0aGlzLnByb3BzID0gbm9kZXMuQWN0aW9uVmFsdWUgYXMgSURhdGFQcm9jZXNzaW5nUHJvcHM7XHJcbiAgICBjb25zdCBjb25kaXRpb24gPSBKU09OLnBhcnNlKHRoaXMucHJvcHMuY29uZGl0aW9uKSBhcyBDb25kaXRpb247XHJcbiAgICBsZXQgcmVzdWx0ID0ge1xyXG4gICAgICBjYW5OZXh0OiB0cnVlLFxyXG4gICAgICByZXN1bHQ6IFwiXCIsXHJcbiAgICB9IGFzIElBY3Rpb25SZXN1bHQ7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMucHJvcHMpIHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0UXVlcnkoY29uZGl0aW9uLnF1ZXJ5U3RyaW5nLGNvbnRleHQudmFyaWFibGVzKTtcclxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuc2VsZWN0RGF0YShxdWVyeSk7XHJcbiAgICAgIFxyXG4gICAgICBjb25zb2xlLmxvZyhcImRhdGEgXCIsIGRhdGEpO1xyXG5cclxuICAgICAgaWYodGhpcy5wcm9wcy52ZXJOYW1lKXtcclxuICAgICAgICAgY29uc3QgdmFyVmFsdWVzPSB0aGlzLnByb3BzLnZlck5hbWUudmFycy5yZWR1Y2UoKGFjYywgZikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhcz1kYXRhW2YuZmllbGQuY29kZV0udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGFnZyA9IG5ldyBBZ2dyZWdhdG9yKGRhdGFzLGYuZmllbGQpO1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhZ2cuY2FsY3VsYXRlKGYubG9naWNhbE9wZXJhdG9yLm9wZXJhdG9yKVxyXG4gICAgICAgICAgICBhY2NbZi52TmFtZV09cmVzdWx0O1xyXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgICAgfSwge30gYXMgQW55T2JqZWN0KTtcclxuICAgICAgICAgIGNvbnRleHQudmFyaWFibGVzW3RoaXMucHJvcHMudmVyTmFtZS5uYW1lXT12YXJWYWx1ZXM7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJjb250ZXh0IFwiLCBjb250ZXh0KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIuODh+ODvOOCv+mbhuioiOS4reS+i+WkluOBjOeZuueUn+OBl+OBvuOBl+OBn+OAglwiLCBlcnJvcik7XHJcbiAgICAgIGlmKGVycm9yIGluc3RhbmNlb2YgRXJyb3Ipe1xyXG4gICAgICAgIGV2ZW50LmVycm9yID0gYOODh+ODvOOCv+mbhuioiOS4reS+i+WkluOBjOeZuueUn+OBl+OBvuOBl+OBn+OAgiAke2Vycm9yLm1lc3NhZ2V9YDtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgZXZlbnQuZXJyb3IgPSBcIuODh+ODvOOCv+mbhuioiOS4reS+i+WkluOBjOeZuueUn+OBl+OBvuOBl+OBn+OAglwiO1xyXG4gICAgICB9XHJcbiAgICAgIHJlc3VsdC5jYW5OZXh0ID0gZmFsc2U7XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gc3RyIFxyXG4gICAqIEBwYXJhbSB2YXJzIFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGdldFF1ZXJ5ID0gKHN0cjogc3RyaW5nLCB2YXJzOiBhbnkpID0+IHtcclxuICAgIGNvbnNvbGUubG9nKHN0cik7XHJcbiAgICBjb25zdCByZWdleCA9IC92YXJcXCgoLio/KVxcKS9nO1xyXG4gICAgbGV0IG1hdGNoO1xyXG4gICAgd2hpbGUgKChtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcclxuICAgICAgY29uc3QgdmFyTmFtZSA9IG1hdGNoWzFdO1xyXG4gICAgICBpZiAodmFyTmFtZSBpbiB2YXJzKSB7XHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UobWF0Y2hbMF0sIHZhcnNbdmFyTmFtZV0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihg5aSJ5pWwJHt2YXJOYW1lfeOBjOimi+OBpOOBi+OCiuOBvuOBm+OCk2ApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhzdHIpO1xyXG4gICAgcmV0dXJuIHN0cjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiDjg4fjg7zjgr/jgpLlj5blvpfjgZnjgotcclxuICAgKiBAcGFyYW0gcXVlcnkgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgc2VsZWN0RGF0YSA9IGFzeW5jICggcXVlcnk/OiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IGFwaSA9IG5ldyBLaW50b25lUmVzdEFQSUNsaWVudCgpO1xyXG4gICAgY29uc3QgZmllbGRzID0gdGhpcy5wcm9wcy5zb3VyY2VzLmZpZWxkcy5tYXAoKGZpZWxkKT0+ZmllbGQuY29kZSk7XHJcbiAgICBjb25zdCByZXNwID0gIGF3YWl0IGFwaS5yZWNvcmQuZ2V0QWxsUmVjb3Jkcyh7XHJcbiAgICAgICAgYXBwOiB0aGlzLnByb3BzLnNvdXJjZXMuYXBwLmlkLFxyXG4gICAgICAgIGZpZWxkczpmaWVsZHMsXHJcbiAgICAgICAgY29uZGl0aW9uOnF1ZXJ5XHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zdCByZXN1bHQ6IFJlc3VsdCA9IHt9O1xyXG4gICAgICByZXNwLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbGVtZW50KSkge1xyXG4gICAgICAgICAgaWYgKCFyZXN1bHRba2V5XSkge1xyXG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHsgdHlwZTogdmFsdWUudHlwZSwgdmFsdWU6IFtdIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXN1bHRba2V5XS52YWx1ZS5wdXNoKHZhbHVlLnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgIFxyXG4gIH07XHJcblxyXG4gIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV0gPSB0aGlzO1xyXG4gIH1cclxufVxyXG5cclxubmV3IERhdGFQcm9jZXNzaW5nQWN0aW9uKCk7IiwiaW1wb3J0IHtcclxuICBJQWN0aW9uLFxyXG4gIElBY3Rpb25SZXN1bHQsXHJcbiAgSUFjdGlvbk5vZGUsXHJcbiAgSUFjdGlvblByb3BlcnR5LFxyXG4gIElDb250ZXh0LFxyXG59IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG5pbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5cclxuaW50ZXJmYWNlIFByb3BzIHtcclxuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xyXG4gIHNvdXJjZXM6IFNvdXJjZXM7XHJcbiAgZGF0YU1hcHBpbmc6IERhdGFNYXBwaW5nW107XHJcbn1cclxuXHJcbmludGVyZmFjZSBEYXRhTWFwcGluZyB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBmcm9tOiBGcm9tO1xyXG4gIHRvOiBUbztcclxufVxyXG5cclxuaW50ZXJmYWNlIFRvIHtcclxuICBhcHA6IEFwcDtcclxuICBmaWVsZHM6IEZpZWxkW107XHJcbiAgaXNEaWFsb2dWaXNpYmxlOiBib29sZWFuO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgRmllbGQge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgY29kZTogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgbm9MYWJlbDogYm9vbGVhbjtcclxuICByZXF1aXJlZDogYm9vbGVhbjtcclxuICBtaW5MZW5ndGg6IHN0cmluZztcclxuICBtYXhMZW5ndGg6IHN0cmluZztcclxuICBleHByZXNzaW9uOiBzdHJpbmc7XHJcbiAgaGlkZUV4cHJlc3Npb246IGJvb2xlYW47XHJcbiAgdW5pcXVlOiBib29sZWFuO1xyXG4gIGRlZmF1bHRWYWx1ZTogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgRnJvbSB7XHJcbiAgc2hhcmVkVGV4dDogc3RyaW5nO1xyXG4gIF90OiBzdHJpbmc7XHJcbiAgaWQ6IHN0cmluZztcclxuICBvYmplY3RUeXBlOiBzdHJpbmc7XHJcbiAgbmFtZTogTmFtZTtcclxuICBhY3Rpb25OYW1lOiBzdHJpbmc7XHJcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIE5hbWUge1xyXG4gIG5hbWU6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIFNvdXJjZXMge1xyXG4gIGFwcDogQXBwO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQXBwIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gIGNyZWF0ZWRhdGU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIERhdGFNYXBwaW5nQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbiB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICBkYXRhTWFwcGluZ1Byb3BzOiBQcm9wcztcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMubmFtZSA9IFwi44OH44O844K/44Oe44OD44OU44Oz44KwXCI7XHJcbiAgICB0aGlzLmFjdGlvblByb3BzID0gW107XHJcbiAgICB0aGlzLmRhdGFNYXBwaW5nUHJvcHMgPSB7fSBhcyBQcm9wcztcclxuICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHByb2Nlc3MoXHJcbiAgICBwcm9wOiBJQWN0aW9uTm9kZSxcclxuICAgIGV2ZW50OiBhbnksXHJcbiAgICBjb250ZXh0OiBJQ29udGV4dFxyXG4gICk6IFByb21pc2U8SUFjdGlvblJlc3VsdD4ge1xyXG4gICAgdGhpcy5hY3Rpb25Qcm9wcyA9IHByb3AuYWN0aW9uUHJvcHM7XHJcbiAgICB0aGlzLmRhdGFNYXBwaW5nUHJvcHMgPSBwcm9wLkFjdGlvblZhbHVlIGFzIFByb3BzO1xyXG4gICAgY29uc29sZS5sb2cocHJvcC5BY3Rpb25WYWx1ZSk7XHJcblxyXG4gICAgLy8gdGhpcy5pbml0VHlwZWRBY3Rpb25Qcm9wcygpO1xyXG4gICAgbGV0IHJlc3VsdCA9IHtcclxuICAgICAgY2FuTmV4dDogdHJ1ZSxcclxuICAgICAgcmVzdWx0OiBcIlwiLFxyXG4gICAgfSBhcyBJQWN0aW9uUmVzdWx0O1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVjb3JkID0gdGhpcy5kYXRhTWFwcGluZ1Byb3BzLmRhdGFNYXBwaW5nXHJcbiAgICAgICAgLmZpbHRlcihcclxuICAgICAgICAgIChpdGVtKSA9PlxyXG4gICAgICAgICAgICBpdGVtLmZyb20ub2JqZWN0VHlwZSA9PT0gXCJ2YXJpYWJsZVwiICYmXHJcbiAgICAgICAgICAgIGl0ZW0uZnJvbS5uYW1lLm5hbWUgJiZcclxuICAgICAgICAgICAgaXRlbS50by5hcHAgJiZcclxuICAgICAgICAgICAgaXRlbS50by5maWVsZHMgJiZcclxuICAgICAgICAgICAgaXRlbS50by5maWVsZHMubGVuZ3RoID4gMFxyXG4gICAgICAgIClcclxuICAgICAgICAucmVkdWNlKChhY2N1bXVsYXRvciwgaXRlbSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHsuLi5hY2N1bXVsYXRvciwgW2l0ZW0udG8uZmllbGRzWzBdLmNvZGVdOiB7XHJcbiAgICAgICAgICAgIHZhbHVlOiBnZXRWYWx1ZUJ5UGF0aChjb250ZXh0LnZhcmlhYmxlcywgaXRlbS5mcm9tLm5hbWUubmFtZSksXHJcbiAgICAgICAgICB9fTtcclxuICAgICAgfSwge30pO1xyXG4gICAgICBpZiAocmVjb3JkICYmIE9iamVjdC5rZXlzKHJlY29yZCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGF3YWl0IGtpbnRvbmUuYXBpKGtpbnRvbmUuYXBpLnVybChcIi9rL3YxL3JlY29yZC5qc29uXCIsIHRydWUpLCBcIlBPU1RcIiwge1xyXG4gICAgICAgICAgYXBwOiB0aGlzLmRhdGFNYXBwaW5nUHJvcHMuc291cmNlcy5hcHAuaWQsXHJcbiAgICAgICAgICByZWNvcmQ6IHJlY29yZCxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIkRhdGFNYXBwaW5nQWN0aW9uIGVycm9yXCIsIGVycm9yKTtcclxuICAgICAgcmVzdWx0LmNhbk5leHQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKFwiZGF0YU1hcHBpbmdQcm9wc1wiLCB0aGlzLmRhdGFNYXBwaW5nUHJvcHMpO1xyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICByZWdpc3RlcigpOiB2b2lkIHtcclxuICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdID0gdGhpcztcclxuICB9XHJcbn1cclxuXHJcbm5ldyBEYXRhTWFwcGluZ0FjdGlvbigpO1xyXG5cclxuY29uc3QgZ2V0VmFsdWVCeVBhdGggPSAob2JqOiBhbnksIHBhdGg6IHN0cmluZykgPT4ge1xyXG4gIHJldHVybiBwYXRoLnNwbGl0KFwiLlwiKS5yZWR1Y2UoKG8sIGspID0+IChvIHx8IHt9KVtrXSwgb2JqKTtcclxufTtcclxuXHJcbnR5cGUgUmVzcCA9IHsgcmVjb3JkczogUmVzcFJlY29yZFR5cGVbXSB9O1xyXG5cclxudHlwZSBSZXNwUmVjb3JkVHlwZSA9IHtcclxuICBba2V5OiBzdHJpbmddOiB7XHJcbiAgICB0eXBlOiBzdHJpbmc7XHJcbiAgICB2YWx1ZTogYW55O1xyXG4gIH07XHJcbn07XHJcblxyXG50eXBlIFJlc3VsdCA9IHtcclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgdmFsdWU6IGFueVtdO1xyXG59O1xyXG5cclxuY29uc3Qgc2VsZWN0RGF0YSA9IGFzeW5jIChhcHBpZDogc3RyaW5nLCBmaWVsZDogc3RyaW5nKTogUHJvbWlzZTxSZXN1bHQ+ID0+IHtcclxuICByZXR1cm4ga2ludG9uZVxyXG4gICAgLmFwaShraW50b25lLmFwaS51cmwoXCIvay92MS9yZWNvcmRzXCIsIHRydWUpLCBcIkdFVFwiLCB7XHJcbiAgICAgIGFwcDogYXBwaWQgPz8ga2ludG9uZS5hcHAuZ2V0SWQoKSxcclxuICAgICAgZmllbGRzOiBbZmllbGRdLFxyXG4gICAgfSlcclxuICAgIC50aGVuKChyZXNwOiBSZXNwKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdDogUmVzdWx0ID0geyB0eXBlOiBcIlwiLCB2YWx1ZTogW10gfTtcclxuICAgICAgcmVzcC5yZWNvcmRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbGVtZW50KSkge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC50eXBlID0gdmFsdWUudHlwZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlc3VsdC52YWx1ZS5wdXNoKHZhbHVlLnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSk7XHJcbn07XHJcbiIsImltcG9ydCB7XHJcbiAgSUFjdGlvbixcclxuICBJQWN0aW9uUmVzdWx0LFxyXG4gIElBY3Rpb25Ob2RlLFxyXG4gIElBY3Rpb25Qcm9wZXJ0eSxcclxuICBJQ29udGV4dCxcclxufSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuXHJcblxyXG5pbnRlcmZhY2UgUHJvcHMge1xyXG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgZmllbGQ6IEZpZWxkO1xyXG4gIHZlck5hbWU6IFZlck5hbWU7XHJcbn1cclxuXHJcbmludGVyZmFjZSBWZXJOYW1lIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBGaWVsZCB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHR5cGU6IHN0cmluZztcclxuICBjb2RlOiBzdHJpbmc7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICBub0xhYmVsOiBib29sZWFuO1xyXG4gIHJlcXVpcmVkOiBib29sZWFuO1xyXG4gIG1pbkxlbmd0aDogc3RyaW5nO1xyXG4gIG1heExlbmd0aDogc3RyaW5nO1xyXG4gIGV4cHJlc3Npb246IHN0cmluZztcclxuICBoaWRlRXhwcmVzc2lvbjogYm9vbGVhbjtcclxuICB1bmlxdWU6IGJvb2xlYW47XHJcbiAgZGVmYXVsdFZhbHVlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDdXJyZW50RmllbGRHZXRBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9uIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gIGN1cnJlbnRGaWVsZEdldFByb3BzOiBQcm9wcztcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMubmFtZSA9IFwi44OV44Kj44O844Or44OJ44Gu5YCk44KS5Y+W5b6X44GZ44KLXCI7XHJcbiAgICB0aGlzLmFjdGlvblByb3BzID0gW107XHJcbiAgICB0aGlzLmN1cnJlbnRGaWVsZEdldFByb3BzID0ge30gYXMgUHJvcHM7XHJcbiAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBwcm9jZXNzKFxyXG4gICAgcHJvcDogSUFjdGlvbk5vZGUsXHJcbiAgICBldmVudDogYW55LFxyXG4gICAgY29udGV4dDogSUNvbnRleHRcclxuICApOiBQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgIHRoaXMuY3VycmVudEZpZWxkR2V0UHJvcHMgPSBwcm9wLkFjdGlvblZhbHVlIGFzIFByb3BzO1xyXG4gICAgdGhpcy5hY3Rpb25Qcm9wcyA9IHByb3AuYWN0aW9uUHJvcHM7XHJcblxyXG4gICAgbGV0IHJlc3VsdCA9IHtcclxuICAgICAgY2FuTmV4dDogdHJ1ZSxcclxuICAgICAgcmVzdWx0OiBcIlwiLFxyXG4gICAgfSBhcyBJQWN0aW9uUmVzdWx0O1xyXG4gICAgXHJcbiAgICB0cnkge1xyXG4gICAgICBjb250ZXh0LnZhcmlhYmxlc1t0aGlzLmN1cnJlbnRGaWVsZEdldFByb3BzLnZlck5hbWUubmFtZV0gPSBjb250ZXh0LnJlY29yZFt0aGlzLmN1cnJlbnRGaWVsZEdldFByb3BzLmZpZWxkLmNvZGVdLnZhbHVlO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIkN1cnJlbnRGaWVsZEdldEFjdGlvbiBlcnJvclwiLCBlcnJvcik7XHJcbiAgICAgIHJlc3VsdC5jYW5OZXh0ID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXSA9IHRoaXM7XHJcbiAgfVxyXG59XHJcblxyXG5uZXcgQ3VycmVudEZpZWxkR2V0QWN0aW9uKCk7XHJcbiIsImltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7ICBJQWN0aW9uLElBY3Rpb25SZXN1bHQsIElBY3Rpb25Ob2RlLCBJQWN0aW9uUHJvcGVydHksIElGaWVsZH0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJUmVndWxhckNoZWNrUHJvcHN7XHJcbiAgICBmaWVsZDpJRmllbGQ7Ly/jg4Hjgqfjg4Pjgq/jgZnjgovjg5XjgqPjg7zjg6vjg4njga7lr77osaFcclxuICAgIG1lc3NhZ2U6c3RyaW5nOy8v44Ko44Op44O844Oh44OD44K744O844K4XHJcbiAgICByZWdFeHByZXNzaW9uOnN0cmluZzsvL+ato+imj+ihqOePvuW8j1xyXG59XHJcbi8qKlxyXG4gKiDmraPopo/ooajnj77jg4Hjgqfjg4Pjgq/jgqLjgq/jgrfjg6fjg7NcclxuICovXHJcbmV4cG9ydCBjbGFzcyBSZWd1bGFyQ2hlY2tBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9ue1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gICAgcHJvcHM6SVJlZ3VsYXJDaGVja1Byb3BzO1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLm5hbWU9XCLmraPopo/ooajnj77jg4Hjgqfjg4Pjgq9cIjtcclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzPVtdO1xyXG4gICAgICAgIHRoaXMucHJvcHM9e1xyXG4gICAgICAgICAgICBmaWVsZDp7Y29kZTonJ30sXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6JycsXHJcbiAgICAgICAgICAgIHJlZ0V4cHJlc3Npb246JydcclxuICAgICAgICB9XHJcbiAgICAgICAgLy/jgqLjgq/jgrfjg6fjg7PjgpLnmbvpjLLjgZnjgotcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGUgXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOklBY3Rpb25Ob2RlLGV2ZW50OmFueSk6UHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdD17XHJcbiAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OmZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9YWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgaWYgKCEoJ2ZpZWxkJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdtZXNzYWdlJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdyZWdFeHByZXNzaW9uJ2luIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUgYXMgSVJlZ3VsYXJDaGVja1Byb3BzO1xyXG4gICAgICAgICAgICAvL+adoeS7tuW8j+OBruioiOeul+e1kOaenOOCkuWPluW+l1xyXG4gICAgICAgICAgICBjb25zdCByZWNvcmQgPSBldmVudC5yZWNvcmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCh0aGlzLnByb3BzLnJlZ0V4cHJlc3Npb24pO1xyXG4gICAgICAgICAgICBpZighcmVnZXgudGVzdCh2YWx1ZSkpe1xyXG4gICAgICAgICAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0uZXJyb3I9dGhpcy5wcm9wcy5tZXNzYWdlO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHJlc3VsdD0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6dHJ1ZVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9Y2F0Y2goZXJyb3Ipe1xyXG4gICAgICAgICAgICBldmVudC5lcnJvcj1lcnJvcjtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jYW5OZXh0PWZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZWdpc3RlcigpOiB2b2lkIHtcclxuICAgICAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXT10aGlzO1xyXG4gICAgfVxyXG4gICAgXHJcbn1cclxubmV3IFJlZ3VsYXJDaGVja0FjdGlvbigpO1xyXG4iLCJpbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyBJQWN0aW9uLCBJQWN0aW9uUmVzdWx0LCBJQWN0aW9uTm9kZSwgSUFjdGlvblByb3BlcnR5LCBJRmllbGQgfSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+OBruWxnuaAp+Wumue+qVxyXG4gKi9cclxuaW50ZXJmYWNlIElNYWlsQ2hlY2tQcm9wcyB7XHJcbiAgICBmaWVsZDogSUZpZWxkOy8v44OB44Kn44OD44Kv44GZ44KL44OV44Kj44O844Or44OJ44Gu5a++6LGhXHJcbiAgICBtZXNzYWdlOiBzdHJpbmc7Ly/jgqjjg6njg7zjg6Hjg4Pjgrvjg7zjgrhcclxuICAgIGVtYWlsQ2hlY2s6c3RyaW5nO1xyXG59XHJcbi8qKlxyXG4gKiDjg6Hjg7zjg6vjgqLjg4njg6zjgrnjg4Hjgqfjg4Pjgq/jgqLjgq/jgrfjg6fjg7NcclxuICovXHJcbmV4cG9ydCBjbGFzcyBNYWlsQ2hlY2tBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9uIHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICAgIHByb3BzOiBJTWFpbENoZWNrUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIuODoeODvOODq+OCouODieODrOOCueODgeOCp+ODg+OCr1wiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBbXTtcclxuICAgICAgICB0aGlzLnByb3BzID0ge1xyXG4gICAgICAgICAgICBmaWVsZDogeyBjb2RlOiAnJyB9LFxyXG4gICAgICAgICAgICBtZXNzYWdlOiAnJyxcclxuICAgICAgICAgICAgZW1haWxDaGVjazonJ1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL+OCouOCr+OCt+ODp+ODs+OCkueZu+mMsuOBmeOCi1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICog44Ki44Kv44K344On44Oz44Gu5a6f6KGM44KS5ZG844Gz5Ye644GZXHJcbiAgICAgKiBAcGFyYW0gYWN0aW9uTm9kZSBcclxuICAgICAqIEBwYXJhbSBldmVudCBcclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBhc3luYyBwcm9jZXNzKGFjdGlvbk5vZGU6IElBY3Rpb25Ob2RlLCBldmVudDogYW55KTogUHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgY2FuTmV4dDogdHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OiBmYWxzZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBhY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG5cclxuICAgICAgICAgICAgaWYgKCEoJ2ZpZWxkJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdtZXNzYWdlJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdlbWFpbENoZWNrJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElNYWlsQ2hlY2tQcm9wcztcclxuICAgICAgICAgICAgLy/mnaHku7blvI/jga7oqIjnrpfntZDmnpzjgpLlj5blvpdcclxuICAgICAgICAgICAgY29uc3QgcmVjb3JkID0gZXZlbnQucmVjb3JkO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJlY29yZFt0aGlzLnByb3BzLmZpZWxkLmNvZGVdLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuZW1haWxDaGVjayA9PT0gJ+WOs+agvCcpIHtcclxuICAgICAgICAgICAgICAgIGlmICghL15bYS16QS1aMC05Xy1dK0BbYS16QS1aMC05Xy1dKyhcXC5bYS16QS1aMC05Xy1dKykrJC8udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS5lcnJvciA9IHRoaXMucHJvcHMubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmVtYWlsQ2hlY2sgPT09ICfjgobjgovjgoEnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIS9eW15AXStAW15AXSskLy50ZXN0KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZFt0aGlzLnByb3BzLmZpZWxkLmNvZGVdLmVycm9yID0gdGhpcy5wcm9wcy5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbk5leHQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBldmVudC5lcnJvciA9IGVycm9yO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV0gPSB0aGlzO1xyXG4gICAgfVxyXG5cclxufVxyXG5uZXcgTWFpbENoZWNrQWN0aW9uKCk7XHJcbiIsImltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7ICBJQWN0aW9uLElBY3Rpb25SZXN1bHQsIElBY3Rpb25Ob2RlLCBJQWN0aW9uUHJvcGVydHksIElGaWVsZH0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJU3RyQ291bnRDaGVja1Byb3Bze1xyXG4gICAgZmllbGQ6SUZpZWxkOy8v44OB44Kn44OD44Kv44GZ44KL44OV44Kj44O844Or44OJ44Gu5a++6LGhXHJcbiAgICBtZXNzYWdlOnN0cmluZzsvL+OCqOODqeODvOODoeODg+OCu+ODvOOCuFxyXG4gICAgbWF4TGVuZ3RoOm51bWJlcjsvL1xyXG59XHJcbi8qKlxyXG4gKiDmraPopo/ooajnj77jg4Hjgqfjg4Pjgq/jgqLjgq/jgrfjg6fjg7NcclxuICovXHJcbmV4cG9ydCBjbGFzcyBTdHJDb3VudENoZWNrQWNpdG9uIGltcGxlbWVudHMgSUFjdGlvbntcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICAgIHByb3BzOklTdHJDb3VudENoZWNrUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMubmFtZT1cIuaWh+Wtl+aVsOODgeOCp+ODg+OCr1wiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9W107XHJcbiAgICAgICAgdGhpcy5wcm9wcz17XHJcbiAgICAgICAgICAgIGZpZWxkOntjb2RlOicnfSxcclxuICAgICAgICAgICAgbWVzc2FnZTonJyxcclxuICAgICAgICAgICAgbWF4TGVuZ3RoOjBcclxuICAgICAgICB9XHJcbiAgICAgICAgLy/jgqLjgq/jgrfjg6fjg7PjgpLnmbvpjLLjgZnjgotcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGUgXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOklBY3Rpb25Ob2RlLGV2ZW50OmFueSk6UHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdD17XHJcbiAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OmZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9YWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgaWYgKCEoJ2ZpZWxkJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdtZXNzYWdlJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdzdHJFeHByZXNzaW9uJ2luIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElTdHJDb3VudENoZWNrUHJvcHM7XHJcbiAgICAgICAgICAgIC8v5p2h5Lu25byP44Gu6KiI566X57WQ5p6c44KS5Y+W5b6XXHJcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IGV2ZW50LnJlY29yZDtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS52YWx1ZTtcclxuICAgICAgICAgICAgY29uc3QgbWF4TGVuZ3RoID0gdGhpcy5wcm9wcy5tYXhMZW5ndGg7XHJcbiAgICAgICAgICAgIGlmKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnICl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9ZWxzZSBpZihtYXhMZW5ndGggPCB2YWx1ZS5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0uZXJyb3IgPSB0aGlzLnByb3BzLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0PSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDp0cnVlXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1jYXRjaChlcnJvcil7XHJcbiAgICAgICAgICAgIGV2ZW50LmVycm9yPWVycm9yO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQ9ZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdPXRoaXM7XHJcbiAgICB9XHJcbiAgICBcclxufVxyXG5uZXcgU3RyQ291bnRDaGVja0FjaXRvbigpO1xyXG4iLCJpbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyBJQWN0aW9uLCBJQWN0aW9uUmVzdWx0LCBJQWN0aW9uTm9kZSwgSUFjdGlvblByb3BlcnR5LCBJRmllbGQgLElDb250ZXh0LCBJVmFyTmFtZX0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJRGF0ZXRpbWVHZXR0ZXJQcm9wcyB7XHJcbiAgICAvKirlpInmlbDjga7lkI3liY0gKi9cclxuICAgIHZlck5hbWU6SVZhck5hbWU7XHJcbn1cclxuLyoqXHJcbiAqIOePvuWcqOaXpeaZguOCkuWPluW+l+OBmeOCi+OCouOCr+OCt+ODp+ODs1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIERhdGV0aW1lR2V0dGVyQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbiB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgICBwcm9wczogSURhdGV0aW1lR2V0dGVyUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIuePvuWcqOaXpeaZglwiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBbXTtcclxuICAgICAgICB0aGlzLnByb3BzID0ge1xyXG4gICAgICAgICAgICB2ZXJOYW1lOntuYW1lOicnfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGUgXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOiBJQWN0aW9uTm9kZSwgZXZlbnQ6IGFueSxjb250ZXh0OklDb250ZXh0KTogUHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgY2FuTmV4dDogdHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OiBmYWxzZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBhY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG5cclxuICAgICAgICAgICAgaWYgKCEoJ3Zlck5hbWUnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElEYXRldGltZUdldHRlclByb3BzO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZih0aGlzLnByb3BzLnZlck5hbWUgJiYgdGhpcy5wcm9wcy52ZXJOYW1lLm5hbWUhPT0nJyl7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LnZhcmlhYmxlc1t0aGlzLnByb3BzLnZlck5hbWUubmFtZV09dG9kYXkudG9JU09TdHJpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuXHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgZXZlbnQuZXJyb3IgPSBlcnJvcjtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jYW5OZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdID0gdGhpcztcclxuICAgIH1cclxuXHJcbn1cclxubmV3IERhdGV0aW1lR2V0dGVyQWN0aW9uKCk7XHJcbiIsIlxyXG5cclxuaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgIElBY3Rpb24sSUFjdGlvblJlc3VsdCwgSUFjdGlvbk5vZGUsIElBY3Rpb25Qcm9wZXJ0eSwgSUZpZWxkLCBJQ29udGV4dCB9IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG5pbXBvcnQgeyBDb25kaXRpb25UcmVlIH0gZnJvbSAnLi4vdHlwZXMvQ29uZGl0aW9ucyc7XHJcblxyXG5cclxuXHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJSW5zZXJ0VmFsdWVQcm9wc3tcclxuICAgIGZpZWxkOklGaWVsZDtcclxuICAgIGNvbmRpdGlvbjpzdHJpbmc7XHJcbiAgICB2YWx1ZTpzdHJpbmc7XHJcbiAgICBzaG93OnN0cmluZztcclxufVxyXG4vKipcclxuICpcclxuICovXHJcbmV4cG9ydCBjbGFzcyBJbnNlcnRWYWx1ZUFjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb257XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgICBwcm9wczpJSW5zZXJ0VmFsdWVQcm9wcztcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5uYW1lPVwi5YCk44KS5oy/5YWl44GZ44KLXCI7Ly8gRELjgavnmbvpjLLjgZfjgZ/jgqLjgq/jgrfjg6fjg7PlkI1cclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzPVtdO1xyXG4gICAgICAgIC8v44OX44Ot44OR44OG44Kj5bGe5oCn44Gu5Yid5pyf5YyWXHJcbiAgICAgICAgdGhpcy5wcm9wcz17XHJcbiAgICAgICAgICAgIGZpZWxkOntjb2RlOicnfSxcclxuICAgICAgICAgICAgY29uZGl0aW9uOicnLFxyXG4gICAgICAgICAgICB2YWx1ZTonJyxcclxuICAgICAgICAgICAgc2hvdzonJ1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL+OCouOCr+OCt+ODp+ODs+OCkueZu+mMsuOBmeOCi1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOepuueZveaWh+Wtl+OCkuepuueZveaWh+Wtl+OBjOmdnuWvvuW/nOOBruODleOCo+ODvOODq+ODieOBq+aMv+WFpeOBl+OCiOOBhuOBqOOBl+OBpuOBhOOBquOBhOOBi+OAgeW/hemgiOmgheebruODleOCo+ODvOODq+ODieOBq+aMv+WFpeOBl+OCiOOBhuOBqOOBl+OBpuOBhOOBquOBhOOBi+ODgeOCp+ODg+OCr+OBmeOCi1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlucHV0VmFsdWUgLSDmjL/lhaXjgZnjgovlgKRcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IC3lhaXlipvlgKTjgYzmnInlirnjgarml6Xku5jlvaLlvI/jga7loLTlkIjjga90cnVl44KS6L+U44GX44CB44Gd44GG44Gn44Gq44GE5aC05ZCI44Gv5L6L5aSW44KS55m655Sf44GV44Gb44KLXHJcbiAgICAgKi9cclxuICAgIGNoZWNrSW5wdXRCbGFuayhmaWVsZFR5cGUgOnN0cmluZyB8IHVuZGVmaW5lZCxpbnB1dFZhbHVlIDpzdHJpbmcsZmllbGRDb2RlIDpzdHJpbmcsZmllbGRSZXF1aXJlZCA6Ym9vbGVhbiB8IHVuZGVmaW5lZCxldmVudCA6YW55KTogYm9vbGVhbntcclxuICAgICAgICAvL+ato+imj+ihqOePvuODgeOCp+ODg+OCr1xyXG4gICAgICAgIGxldCBibGFua0NoZWNrPSBpbnB1dFZhbHVlLm1hdGNoKC9eKFxcc3zjgIApKz8kLyk7Ly/ljYrop5Ljgrnjg5rjg7zjgrnjg7vjgr/jg5bmloflrZfjg7vmlLnooYzjg7vmlLnjg5rjg7zjgrjjg7vlhajop5Ljgrnjg5rjg7zjgrlcclxuXHJcbiAgICAgICAgaWYoYmxhbmtDaGVjayAhPT0gbnVsbCl7XHJcbiAgICAgICAgICAgIC8v56m655m95paH5a2X44KS56m655m95paH5a2X44GM6Z2e5a++5b+c44Gu44OV44Kj44O844Or44OJ44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gm44GE44KL5aC05ZCI44CB5L6L5aSW44KS55m655Sf44GV44Gb44KLXHJcbiAgICAgICAgICAgIGlmKGZpZWxkVHlwZSA9PT0gXCJOVU1CRVJcIiB8fCBmaWVsZFR5cGUgPT09IFwiREFURVwiIHx8IGZpZWxkVHlwZSA9PT0gXCJEQVRFVElNRVwiIHx8IGZpZWxkVHlwZSA9PT0gXCJUSU1FXCIgfHwgZmllbGRUeXBlID09PSBcIlVTRVJfU0VMRUNUXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgZmllbGRUeXBlID09PSBcIk9SR0FOSVpBVElPTl9TRUxFQ1RcIiB8fCBmaWVsZFR5cGUgPT09IFwiR1JPVVBfU0VMRUNUXCIgfHwgZmllbGRUeXBlID09PSBcIlJBRElPX0JVVFRPTlwiIHx8IGZpZWxkVHlwZSA9PT0gXCJEUk9QX0RPV05cIiB8fCBmaWVsZFR5cGUgPT09IFwiQ0hFQ0tfQk9YXCIgfHwgZmllbGRUeXBlID09PSBcIk1VTFRJX1NFTEVDVFwiKXtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdWydlcnJvciddID0gXCLjgIxcIitmaWVsZENvZGUrXCLjgI1cIitcIuODleOCo+ODvOODq+ODieOBq+OBr+OAgeepuueZveaWh+Wtl+OBr+aMv+WFpeOBp+OBjeOBvuOBm+OCk+OAglwiOyAvL+ODrOOCs+ODvOODieOBq+OCqOODqeODvOOCkuihqOekulxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjg5XjgqPjg7zjg6vjg4njgavjga/jgIHnqbrnmb3mloflrZfjga/mjL/lhaXjgafjgY3jgb7jgZvjgpPjgILjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjga7lh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIik7XHJcblxyXG4gICAgICAgICAgICAvL+epuueZveaWh+Wtl+OCkuW/hemgiOmgheebruODleOCo+ODvOODq+ODieOBq+aMv+WFpeOBl+OCiOOBhuOBqOOBl+OBpuOBhOOCi+WgtOWQiOOAgeS+i+WkluOCkueZuueUn+OBleOBm+OCi1xyXG4gICAgICAgICAgICB9ZWxzZSBpZihmaWVsZFJlcXVpcmVkKXtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdWydlcnJvciddID0gXCLjgIxcIitmaWVsZENvZGUrXCLjgI1cIitcIuODleOCo+ODvOODq+ODieOBr+W/hemgiOmgheebruOBruOBn+OCgeOAgeepuueZveaWh+Wtl+OBr+aMv+WFpeOBp+OBjeOBvuOBm+OCk+OAglwiOyAvL+ODrOOCs+ODvOODieOBq+OCqOODqeODvOOCkuihqOekulxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjg5XjgqPjg7zjg6vjg4njga/lv4XpoIjpoIXnm67jga7jgZ/jgoHjgIHnqbrnmb3mloflrZfjga/mjL/lhaXjgafjgY3jgb7jgZvjgpPjgILjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjga7lh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5YWl5Yqb5YCk44GM5Y2K6KeS5pWw5a2X44GL44OB44Kn44OD44Kv44GZ44KL6Zai5pWwXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRWYWx1ZSAtIOaMv+WFpeOBmeOCi+WApFxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gLeWFpeWKm+WApOOBjOacieWKueOBquaVsOWApOOBruWgtOWQiOOBr3RydWXjgpLov5TjgZfjgIHjgZ3jgYbjgafjgarjgYTloLTlkIjjga/kvovlpJbjgpLnmbrnlJ/jgZXjgZvjgotcclxuICAgICAqL1xyXG4gICAgY2hlY2tJbnB1dE51bWJlcihpbnB1dFZhbHVlIDpzdHJpbmcsZmllbGRDb2RlIDpzdHJpbmcsZXZlbnQgOmFueSk6IGJvb2xlYW57XHJcbiAgICAgICAgbGV0IGlucHV0TnVtYmVyVmFsdWUgPSBOdW1iZXIoaW5wdXRWYWx1ZSk7Ly/mlbDlgKTlnovjgavlpInmj5tcclxuXHJcbiAgICAgICAgLy/mnInpmZDmlbDjgYvjganjgYbjgYvliKTlrppzXHJcbiAgICAgICAgaWYoIWlzRmluaXRlKGlucHV0TnVtYmVyVmFsdWUpKXtcclxuICAgICAgICAgICAgZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV1bJ2Vycm9yJ10gPSBcIuOAjFwiK2ZpZWxkQ29kZStcIuOAjVwiK1wi44OV44Kj44O844Or44OJ44Gr5YWl44KM44KI44GG44Go44GX44Gf5YCk44Gv44CB54Sh5Yq544Gq5pel5LuY5b2i5byP44Gn44GZ44CCXCI7IC8v44Os44Kz44O844OJ44Gr44Ko44Op44O844KS6KGo56S6XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIuOAjFwiK2ZpZWxkQ29kZStcIuOAjVwiK1wi44OV44Kj44O844Or44OJ44Gr5YWl44KM44KI44GG44Go44GX44Gf5YCk44Gv44CB5pyJ5Yq544Gq5pWw5YCk44Gn44Gv44GC44KK44G+44Gb44KT44CC44CM5YCk44KS5oy/5YWl44GZ44KL44CN44Kz44Oz44Od44O844ON44Oz44OI44Gu5Yem55CG44KS5Lit5pat44GX44G+44GX44Gf44CCXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKiog5YWl5Yqb5YCk44GM5pyJ5Yq544Gq5pel5LuY5b2i5byP44GL44OB44Kn44OD44Kv44GZ44KL6Zai5pWwXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRWYWx1ZSAtIOaMv+WFpeOBmeOCi+WApFxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gLeWFpeWKm+WApOOBjOacieWKueOBquaXpeS7mOW9ouW8j+OBruWgtOWQiOOBr3RydWXjgpLov5TjgZfjgIHjgZ3jgYbjgafjgarjgYTloLTlkIjjga/kvovlpJbjgpLnmbrnlJ/jgZXjgZvjgotcclxuICAgICAqL1xyXG4gICAgY2hlY2tJbnB1dERhdGUoaW5wdXRWYWx1ZSA6c3RyaW5nLGZpZWxkQ29kZSA6c3RyaW5nLGV2ZW50IDphbnkpOiBib29sZWFue1xyXG4gICAgICAgIC8v5q2j6KaP6KGo54++44OB44Kn44OD44KvXHJcbiAgICAgICAgbGV0IHR3b0RpZ2l0TW9udGhEYXkgPSBpbnB1dFZhbHVlLm1hdGNoKC8oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KSQvKTsvLzTmoYHjga7mlbDlrZctMuahgeOBruaVsOWtly0y5qGB44Gu5pWw5a2XXHJcbiAgICAgICAgbGV0IHNpbmdsZURpZ2l0TW9udGhEYXkgPSBpbnB1dFZhbHVlLm1hdGNoKC8oXFxkezR9KS0oXFxkezF9KS0oXFxkezF9KSQvKTsvLzTmoYHjga7mlbDlrZctMeahgeOBruaVsOWtly0y5qGB44Gu5pWw5a2XXHJcbiAgICAgICAgbGV0IHNpbmdsZURpZ2l0TW9udGggPSBpbnB1dFZhbHVlLm1hdGNoKC8oXFxkezR9KS0oXFxkezF9KS0oXFxkezJ9KSQvKTsvLzTmoYHjga7mlbDlrZctMeahgeOBruaVsOWtly0y5qGB44Gu5pWw5a2XXHJcbiAgICAgICAgbGV0IHNpbmdsZURpZ2l0RGF5ID0gaW5wdXRWYWx1ZS5tYXRjaCgvKFxcZHs0fSktKFxcZHsyfSktKFxcZHsxfSkkLyk7Ly805qGB44Gu5pWw5a2XLTLmoYHjga7mlbDlrZctMeahgeOBruaVsOWtl1xyXG4gICAgICAgIGxldCBkYXRlVGltZSA9IGlucHV0VmFsdWUubWF0Y2goLyhcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pVChcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0pLjAwMFovKTsvL+aZguWIu+WFpeOCiuOBrlVUQ+OBruaXpeS7mOW9ouW8j1xyXG4gICAgICAgIGxldCBkYXRlO1xyXG4gICAgICAgIC8vZGF0ZeWei+OBq+WkieaPm1xyXG4gICAgICAgIGRhdGUgPSBuZXcgRGF0ZShpbnB1dFZhbHVlKTtcclxuXHJcbiAgICAgICAgLy9kYXRl5Z6L5aSJ5o+b44Gn44GN44Gf44GL56K66KqNXHJcbiAgICAgICAgaWYoZGF0ZSAhPT0gdW5kZWZpbmVkICYmICFpc05hTihkYXRlLmdldERhdGUoKSkpe1xyXG4gICAgICAgICAgICAvL+ato+imj+ihqOePvuODgeOCp+ODg+OCr+eiuuiqjVxyXG4gICAgICAgICAgICBpZih0d29EaWdpdE1vbnRoRGF5ID09PSBudWxsICYmIHNpbmdsZURpZ2l0TW9udGggPT09IG51bGwgJiYgc2luZ2xlRGlnaXREYXkgPT09IG51bGwgJiYgc2luZ2xlRGlnaXRNb250aERheSA9PT0gbnVsbCAmJiBkYXRlVGltZSA9PT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV1bJ2Vycm9yJ10gPSBcIuOAjFwiK2ZpZWxkQ29kZStcIuOAjVwiK1wi44OV44Kj44O844Or44OJ44Gr5YWl44KM44KI44GG44Go44GX44Gf5YCk44Gv44CB54Sh5Yq544Gq5pel5LuY5b2i5byP44Gn44GZ44CCXCI7IC8v44Os44Kz44O844OJ44Gr44Ko44Op44O844KS6KGo56S6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjg5XjgqPjg7zjg6vjg4njgavlhaXjgozjgojjgYbjgajjgZfjgZ/lgKTjga/jgIHnhKHlirnjgarml6Xku5jlvaLlvI/jgafjgZnjgILjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjga7lh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIOWFpeWKm+WApOOBjOacieWKueOBquaZguWIu+W9ouW8j+OBi+ODgeOCp+ODg+OCr+OBmeOCi+mWouaVsFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlucHV0VmFsdWUgLSDmjL/lhaXjgZnjgovlgKRcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IC3lhaXlipvlgKTjgYzmnInlirnjgarml6Xku5jlvaLlvI/jga7loLTlkIjjga90cnVl44KS6L+U44GX44CB44Gd44GG44Gn44Gq44GE5aC05ZCI44Gv5L6L5aSW44KS55m655Sf44GV44Gb44KLXHJcbiAgICAgKi9cclxuICAgIGNoZWNrSW5wdXRUaW1lKGlucHV0VmFsdWUgOnN0cmluZyxmaWVsZENvZGUgOnN0cmluZyxldmVudCA6YW55KTogYm9vbGVhbntcclxuICAgICAgICAvL+ato+imj+ihqOePvuODgeOCp+ODg+OCr1xyXG4gICAgICAgIGxldCB0aW1lRm9ybWF0ID1pbnB1dFZhbHVlLm1hdGNoKC9eKFswLTldfDFbMC05XXwyWzAtM10pOlswLTVdWzAtOV0kLyk7XHJcblxyXG4gICAgICAgICAgICAvL+ato+imj+ihqOePvuODgeOCp+ODg+OCr+eiuuiqjVxyXG4gICAgICAgICAgICBpZih0aW1lRm9ybWF0ID09PSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5yZWNvcmRbZmllbGRDb2RlXVsnZXJyb3InXSA9IFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjg5XjgqPjg7zjg6vjg4njgavlhaXjgozjgojjgYbjgajjgZfjgZ/lgKTjga/jgIHnhKHlirnjgarmmYLliLvlvaLlvI/jgafjgZnjgIJcIjsgLy/jg6zjgrPjg7zjg4njgavjgqjjg6njg7zjgpLooajnpLpcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLjgIxcIitmaWVsZENvZGUrXCLjgI1cIitcIuODleOCo+ODvOODq+ODieOBq+WFpeOCjOOCiOOBhuOBqOOBl+OBn+WApOOBr+OAgeeEoeWKueOBquaZguWIu+W9ouW8j+OBp+OBmeOAguOAjOWApOOCkuaMv+WFpeOBmeOCi+OAjeOCs+ODs+ODneODvOODjeODs+ODiOOBruWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAglwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5YWl5Yqb5YCk44Gu44OV44Kj44O844Or44OJ44K/44Kk44OX44GMREFURVRJTUXjgafjgYLjgozjgbDjgIHmmYLliLvjgYLjgorjga7ml6Xku5jlvaLlvI/lpInmj5vjgZfjgIFEQVRF44Gn44GC44KM44Gw5pmC5Yi744Gq44GX44Gu5pel5LuY5b2i5byP5aSJ5o+b44GZ44KL6Zai5pWwXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRWYWx1ZSAt5oy/5YWl44GZ44KL5YCkXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGRUeXBlICAt44OV44Kj44O844Or44OJ44K/44Kk44OXXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IC3lhaXlipvlgKTjgYzml6Xku5jlvaLlvI/jgavlpInmj5vjgafjgY3jgZ/loLTlkIjjga/mloflrZfliJfjgpLov5TjgZfjgIHjgZ3jgYbjgafjgarjgYTloLTlkIjjga/kvovlpJbjgpLnmbrnlJ/jgZXjgZvjgotcclxuICAgICAqL1xyXG4gICAgY2hhbmdlRGF0ZUZvcm1hdChpbnB1dFZhbHVlIDpzdHJpbmcsIGZpZWxkVHlwZSA6c3RyaW5nLGZpZWxkQ29kZSA6c3RyaW5nLGV2ZW50IDphbnkpOiBzdHJpbmd7XHJcbiAgICAgICAgbGV0IGRhdGVUaW1lO1xyXG4gICAgICAgIGxldCBkYXRlO1xyXG5cclxuICAgICAgICAvL+aMv+WFpeOBmeOCi+WApOOCkmRhdGXlnovjgavlpInmj5tcclxuICAgICAgICBkYXRlID0gbmV3IERhdGUoaW5wdXRWYWx1ZSk7XHJcbiAgICAgICAgLy9kYXRl5Z6L5aSJ5o+b44Gn44GN44Gf44GL56K66KqNXHJcbiAgICAgICAgaWYoZGF0ZSAhPT0gdW5kZWZpbmVkICYmICFpc05hTihkYXRlLmdldERhdGUoKSkpe1xyXG5cclxuICAgICAgICAgICAgLy/ml6XmmYLjg5XjgqPjg7zjg6vjg4njga7loLTlkIjjgIHmmYLliLvjgYLjgorjga7ml6Xku5jlvaLlvI/lpInmj5tcclxuICAgICAgICAgICAgaWYoZmllbGRUeXBlID09PSBcIkRBVEVUSU1FXCIpe1xyXG4gICAgICAgICAgICAgICAgZGF0ZVRpbWUgPWRhdGUudG9JU09TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRlVGltZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy/ml6Xku5jjg5XjgqPjg7zjg6vjg4njga7loLTlkIjjgIHmmYLliLvjgarjgZfjga7ml6Xku5jlvaLlvI/lpInmj5tcclxuICAgICAgICAgICAgbGV0IGRhdGVBcnJheT1pbnB1dFZhbHVlLm1hdGNoKC8oXFxkezR9KS0oXFxkezEsMn0pLShcXGR7MSwyfSkkLyk7Ly805qGB44Gu5pWw5a2XLTHvvZ4y5qGB44Gu5pWw5a2XLTHvvZ4y5qGB44Gu5pWw5a2XXHJcbiAgICAgICAgICAgIGlmKGRhdGVBcnJheSAhPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICBsZXQgeWVhckluZGV4ID0gMTtcclxuICAgICAgICAgICAgICAgIGxldCBtb250aEluZGV4ID0gMjtcclxuICAgICAgICAgICAgICAgIGxldCBkYXlJbmRleCA9IDM7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0ZUZvcm1hdHRlZD1gJHtkYXRlQXJyYXlbeWVhckluZGV4XX0tJHtkYXRlQXJyYXlbbW9udGhJbmRleF19LSR7ZGF0ZUFycmF5W2RheUluZGV4XX1gXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZUZvcm1hdHRlZDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdWydlcnJvciddID0gXCLjgIxcIitmaWVsZENvZGUrXCLjgI1cIitcIuODleOCo+ODvOODq+ODieOBq+WFpeOCjOOCiOOBhuOBqOOBl+OBn+WApOOBr+OAgeeEoeWKueOBquaXpeS7mOW9ouW8j+OBp+OBmeOAglwiOyAvL+ODrOOCs+ODvOODieOBq+OCqOODqeODvOOCkuihqOekulxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIuOAjFwiK2ZpZWxkQ29kZStcIuOAjVwiK1wi44OV44Kj44O844Or44OJ44Gr5YWl44KM44KI44GG44Go44GX44Gf5YCk44Gv44CB54Sh5Yq544Gq5pel5LuY5b2i5byP44Gn44GZ44CC44CM5YCk44KS5oy/5YWl44GZ44KL44CN44Kz44Oz44Od44O844ON44Oz44OI44Gu5Yem55CG44KS5Lit5pat44GX44G+44GX44Gf44CCXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5YWl5Yqb5YCk44GM44OV44Kj44O844Or44OJ44K/44Kk44OXKOODqeOCuOOCquODnOOCv+ODs+ODu+ODieODreODg+ODl+ODgOOCpuODs+ODu+ikh+aVsOmBuOaKnuODu+ODieODreODg+ODl+ODgOOCpuODsynjga7pgbjmip7ogqLjgavlrZjlnKjjgZnjgovlgKTjgYvjg4Hjgqfjg4Pjgq/jgZnjgovplqLmlbBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFZhbHVlIC0g5oy/5YWl44GZ44KL5YCkXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSAt5YWl5Yqb5YCk44GM5pyJ5Yq544Gq5YCk44Gu5aC05ZCI44GvdHJ1ZeOCkui/lOOBl+OAgeOBneOBhuOBp+OBquOBhOWgtOWQiOOBr+S+i+WkluOCkueZuueUn+OBleOBm+OCi1xyXG4gICAgICovXHJcbiAgICBjaGVja0lucHV0T3B0aW9uKGlucHV0VmFsdWUgOnN0cmluZyxmaWVsZE9wdGlvbnMgOnN0cmluZyB8IHVuZGVmaW5lZCxmaWVsZENvZGUgOnN0cmluZyxldmVudCA6YW55KTogYm9vbGVhbiB7XHJcblxyXG4gICAgICAgIC8v5YWl5Yqb5YCk44GM6YG45oqe6IKi44Gr5a2Y5Zyo44GZ44KL5YCk44GL44OB44Kn44OD44Kv44GX44CB5a2Y5Zyo44GX44Gf44KJdHJ1ZeOCkui/lOOBmVxyXG4gICAgICAgIGlmKGZpZWxkT3B0aW9ucyAhPT0gdW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBPYmplY3Qua2V5cyhmaWVsZE9wdGlvbnMpO1xyXG4gICAgICAgICAgICBmb3IodmFyIG9wdGlvbnNJbmRleCBpbiBvcHRpb25zKXtcclxuICAgICAgICAgICAgICAgIGlmKG9wdGlvbnNbb3B0aW9uc0luZGV4XSA9PT0gaW5wdXRWYWx1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdWydlcnJvciddPVwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjgavjga/jgIHlrZjlnKjjgZfjgarjgYTlgKTjgpLmjL/lhaXjgZfjgojjgYbjgajjgZfjgZ/jgZ/jgoHjgIHlh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIjtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLjgIxcIitmaWVsZENvZGUrXCLjgI1cIitcIuOBq+OBr+OAgeWtmOWcqOOBl+OBquOBhOWApOOCkuaMv+WFpeOBl+OCiOOBhuOBqOOBl+OBn+OBn+OCgeOAgeWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAguOAjOWApOOCkuaMv+WFpeOBmeOCi+OAjeOCs+ODs+ODneODvOODjeODs+ODiOOBruWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAglwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOWFpeWKm+WApOOBjOODleOCo+ODvOODq+ODieOCv+OCpOODlyjjg6bjg7zjgrbjg7zpgbjmip4p44Gn44CB44Om44O844K244O85oOF5aCx44Gr5a2Y5Zyo44GZ44KL5YCk44GL44OB44Kn44OD44Kv44GZ44KL6Zai5pWwXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRWYWx1ZSAtIOaMv+WFpeOBmeOCi+WApFxyXG4gICAgICogQHJldHVybiB7c3RyaW5nIHwgYm9vbGVhbn0g5YWl5Yqb5YCk44GM55m76Yyy44GV44KM44Gm44GE44KL44Om44O844K244O85oOF5aCx44GL44KJ6KaL44Gk44GL44Gj44Gf5aC05ZCI44CBdHJ1ZeOCkui/lOOBl+OAgeimi+OBpOOBi+OCieOBquOBi+OBo+OBn+WgtOWQiOOAgWZhbHNl44KS6L+U44GZXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHNldElucHV0VXNlcihpbnB1dFZhbHVlIDpzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IGJvb2xlYW4+e1xyXG5cclxuICAgICAgICAvL+ODpuODvOOCtuODvOWQjeOCkuagvOe0jeOBmeOCi+WkieaVsFxyXG4gICAgICAgIGxldCB1c2Vyc05hbWU7XHJcbiAgICAgICAgY29uc3QgdXNlcnNJbmZvQ29sdW1uSW5kZXg9MDtcclxuXHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAvL0FQSeOBp+ODpuODvOOCtuODvOaDheWgseOCkuWPluW+l+OBmeOCi1xyXG4gICAgICAgICAgICBjb25zdCByZXNwID1hd2FpdCBraW50b25lLmFwaShraW50b25lLmFwaS51cmwoJy92MS91c2VycycsIHRydWUpLCAnR0VUJywge2NvZGVzOltpbnB1dFZhbHVlIF19KVxyXG5cclxuICAgICAgICAgICAgLy/lhaXlipvjgZXjgozjgZ/jg63jgrDjgqTjg7PlkI0o44Oh44O844Or44Ki44OJ44Os44K5KeOBjOODpuODvOOCtuODvOaDheWgseOBq+eZu+mMsuOBleOCjOOBpuOBhOOCi+WgtOWQiOOAgeOBneOBruODpuODvOOCtuODvOWQjeOCkuWPluW+l+OBmeOCi1xyXG4gICAgICAgICAgICBpZiAocmVzcC51c2Vyc1t1c2Vyc0luZm9Db2x1bW5JbmRleF0uY29kZSA9PT0gaW5wdXRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdXNlcnNOYW1lPXJlc3AudXNlcnNbdXNlcnNJbmZvQ29sdW1uSW5kZXhdLm5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8v44Om44O844K244O85ZCN44GM5Y+W5b6X44Gn44GN44Gf5aC05ZCI44CB44Ot44Kw44Kk44Oz5ZCN44Go44Om44O844K244O85ZCN44KS44OV44Kj44O844Or44OJ44Gr44K744OD44OI44GZ44KLXHJcbiAgICAgICAgICAgIGlmKHVzZXJzTmFtZSA9PT0gdW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWNhdGNoe1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdXNlcnNOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5YWl5Yqb5YCk44GM44OV44Kj44O844Or44OJ44K/44Kk44OXKOe1hOe5lOmBuOaKninjgafjgIHntYTnuZTmg4XloLHjgavlrZjlnKjjgZnjgovlgKTjgYvjg4Hjgqfjg4Pjgq/jgZnjgovplqLmlbBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFZhbHVlIC0g5oy/5YWl44GZ44KL5YCkXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmcgfCBib29sZWFufSDlhaXlipvlgKTjgYznmbvpjLLjgZXjgozjgabjgYTjgovntYTnuZTmg4XloLHjgYvjgonopovjgaTjgYvjgaPjgZ/loLTlkIjjgIF0cnVl44KS6L+U44GX44CB6KaL44Gk44GL44KJ44Gq44GL44Gj44Gf5aC05ZCI44CBZmFsc2XjgpLov5TjgZlcclxuICAgICAqL1xyXG4gICAgYXN5bmMgc2V0SW5wdXRPcmdhbml6YXRpb24oaW5wdXRWYWx1ZSA6c3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBib29sZWFuPntcclxuXHJcbiAgICAgICAgLy/ntYTnuZTlkI3jgpLmoLzntI3jgZnjgovlpInmlbBcclxuICAgICAgICBsZXQgb3JnYW5pemF0aW9uTmFtZTtcclxuICAgICAgICBjb25zdCBvcmdhbml6YXRpb25zSW5mb0NvbHVtbkluZGV4PTA7XHJcblxyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgLy9BUEnjgafntYTnuZTmg4XloLHjgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgY29uc3QgcmVzcCA9YXdhaXQga2ludG9uZS5hcGkoa2ludG9uZS5hcGkudXJsKCcvdjEvb3JnYW5pemF0aW9ucy5qc29uJywgdHJ1ZSksICdHRVQnLCB7Y29kZXM6W2lucHV0VmFsdWUgXX0pXHJcblxyXG4gICAgICAgICAgICAvL+WFpeWKm+OBleOCjOOBn+e1hOe5lOOCs+ODvOODieOBjOe1hOe5lOaDheWgseOBq+eZu+mMsuOBleOCjOOBpuOBhOOCi+WgtOWQiOOAgeOBneOBrue1hOe5lOWQjeOCkuWPluW+l+OBmeOCi1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3Aub3JnYW5pemF0aW9uc1tvcmdhbml6YXRpb25zSW5mb0NvbHVtbkluZGV4XS5jb2RlID09PSBpbnB1dFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3JnYW5pemF0aW9uTmFtZT1yZXNwLm9yZ2FuaXphdGlvbnNbb3JnYW5pemF0aW9uc0luZm9Db2x1bW5JbmRleF0ubmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8v57WE57mU5ZCN44GM5Y+W5b6X44Gn44GN44Gf5aC05ZCI44CB57WE57mU44Kz44O844OJ44Go57WE57mU5ZCN44KS44OV44Kj44O844Or44OJ44Gr44K744OD44OI44GZ44KLXHJcbiAgICAgICAgICAgIGlmKG9yZ2FuaXphdGlvbk5hbWUgPT09IHVuZGVmaW5lZCl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1jYXRjaHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9yZ2FuaXphdGlvbk5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDlhaXlipvlgKTjgYzjg5XjgqPjg7zjg6vjg4njgr/jgqTjg5co44Kw44Or44O844OX6YG45oqeKeOBp+OAgeOCsOODq+ODvOODl+aDheWgseOBq+WtmOWcqOOBmeOCi+WApOOBi+ODgeOCp+ODg+OCr+OBmeOCi+mWouaVsFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlucHV0VmFsdWUgLSDmjL/lhaXjgZnjgovlgKRcclxuICAgICAqIEByZXR1cm4ge3N0cmluZyB8IGJvb2xlYW59IOWFpeWKm+WApOOBjOeZu+mMsuOBleOCjOOBpuOBhOOCi+OCsOODq+ODvOODl+aDheWgseOBi+OCieimi+OBpOOBi+OBo+OBn+WgtOWQiOOAgXRydWXjgpLov5TjgZfjgIHopovjgaTjgYvjgonjgarjgYvjgaPjgZ/loLTlkIjjgIFmYWxzZeOCkui/lOOBmVxyXG4gICAgICovXHJcbiAgICBhc3luYyBzZXRJbnB1dEdyb3VwKGlucHV0VmFsdWUgOnN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgYm9vbGVhbj57XHJcblxyXG4gICAgICAgIC8v44Kw44Or44O844OX5ZCN44KS5qC857SN44GZ44KL5aSJ5pWwXHJcbiAgICAgICAgbGV0IGdyb3Vwc05hbWU7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBzSW5mb0NvbHVtbkluZGV4PTA7XHJcblxyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgLy9BUEnjgafjgrDjg6vjg7zjg5fmg4XloLHjgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgY29uc3QgcmVzcCA9YXdhaXQga2ludG9uZS5hcGkoa2ludG9uZS5hcGkudXJsKCcvdjEvZ3JvdXBzLmpzb24nLCB0cnVlKSwgJ0dFVCcsIHtjb2RlczpbaW5wdXRWYWx1ZSBdfSlcclxuXHJcbiAgICAgICAgICAgIC8v5YWl5Yqb44GV44KM44Gf44Kw44Or44O844OX44Kz44O844OJ44GM44Kw44Or44O844OX5oOF5aCx44Gr55m76Yyy44GV44KM44Gm44GE44KL5aC05ZCI44CB44Gd44Gu44Kw44Or44O844OX5ZCN44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgIGlmIChyZXNwLmdyb3Vwc1tncm91cHNJbmZvQ29sdW1uSW5kZXhdLmNvZGUgPT09IGlucHV0VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGdyb3Vwc05hbWU9cmVzcC5ncm91cHNbZ3JvdXBzSW5mb0NvbHVtbkluZGV4XS5uYW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL+OCsOODq+ODvOODl+WQjeOBjOWPluW+l+OBp+OBjeOBn+WgtOWQiOOAgeOCsOODq+ODvOODl+OCs+ODvOODieOBqOOCsOODq+ODvOODl+WQjeOCkuODleOCo+ODvOODq+ODieOBq+OCu+ODg+ODiOOBmeOCi1xyXG4gICAgICAgICAgICBpZihncm91cHNOYW1lID09PSB1bmRlZmluZWQpe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9Y2F0Y2h7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBncm91cHNOYW1lO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDjgqLjgq/jgrfjg6fjg7Pjga7lrp/ooYzjgpLlkbzjgbPlh7rjgZlcclxuICAgICAqIEBwYXJhbSBhY3Rpb25Ob2RlXHJcbiAgICAgKiBAcGFyYW0gZXZlbnRcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHByb2Nlc3MoYWN0aW9uTm9kZTpJQWN0aW9uTm9kZSxldmVudDphbnksY29udGV4dDpJQ29udGV4dCk6UHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcblxyXG4gICAgICAgIGxldCByZXN1bHQ9e1xyXG4gICAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICAgIHJlc3VsdDpmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAvL+WxnuaAp+ioreWumuOCkuWPluW+l+OBmeOCi1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvblByb3BzID0gYWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgaWYgKCEoJ2ZpZWxkJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCd2YWx1ZScgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZmllbGRDb2x1bW5JbmRleD0xO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUNvbHVtbkluZGV4PTM7XHJcblxyXG4gICAgICAgICAgICAvL+ODl+ODreODkeODhuOCo+OBp+mBuOaKnuOBleOCjOOBn+ODleOCo+ODvOODq+ODiVxyXG4gICAgICAgICAgICBjb25zdCBmaWVsZD10aGlzLmFjdGlvblByb3BzW2ZpZWxkQ29sdW1uSW5kZXhdLnByb3BzLm1vZGVsVmFsdWUudHlwZTtcclxuICAgICAgICAgICAgLy/jg5fjg63jg5Hjg4bjgqPjga7mjL/lhaXjgZnjgovlgKRcclxuICAgICAgICAgICAgY29uc3QgdmFsdWU9dGhpcy5hY3Rpb25Qcm9wc1t2YWx1ZUNvbHVtbkluZGV4XS5wcm9wcy5tb2RlbFZhbHVlO1xyXG5cclxuICAgICAgICAgICAgLy/mnaHku7blvI/jga7ntZDmnpzjgpLlj5blvpdcclxuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uUmVzdWx0ID0gdGhpcy5nZXRDb25kaXRpb25SZXN1bHQoY29udGV4dCk7XHJcbiAgICAgICAgICAgIGlmKCFjb25kaXRpb25SZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy/jg5fjg63jg5Hjg4bjgqPjga7lgKTjgpLmjL/lhaXjgZnjgovjg5XjgqPjg7zjg6vjg4njgYzmnKrpgbjmip7jga7loLTlkIjjgIHkvovlpJbjgpLnmbrnlJ/jgZXjgZvjgotcclxuICAgICAgICAgICAgaWYoZmllbGQgPT09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi44CM5YCk44KS5oy/5YWl44GZ44KL44CN44Kz44Oz44Od44O844ON44Oz44OI44Gn44CB5YCk44KS5oy/5YWl44GZ44KL44OV44Kj44O844Or44OJ44GM5oyH5a6a44GV44KM44Gm44GE44Gq44GL44Gj44Gf44Gf44KB44CB5Yem55CG44GM5Lit5pat44GV44KM44G+44GX44Gf44CCXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL+ODl+ODreODkeODhuOCo+OBruWApOOCkuaMv+WFpeOBmeOCi+ODleOCo+ODvOODq+ODieOBjOmdnuWvvuW/nOODleOCo+ODvOODq+ODieOBruWgtOWQiOOAgeS+i+WkluOCkueZuueUn+OBleOBm+OCi1xyXG4gICAgICAgICAgICAvL+a3u+S7mOODleOCoeOCpOODq+ODu+ODhuODvOODluODq+ODu+OCq+ODhuOCtOODquODvOODu+OCueODhuODvOOCv+OCueODu+S9nOaIkOiAheODu+abtOaWsOiAheODu+S9nOalreiAheODu+ODquODk+OCuOODp+ODs+eVquWPt+ODu+ODrOOCs+ODvOODieeVquWPt+ODu+ODrOOCs+ODvOODiUlE44O76KiI566X44O75L2c5oiQ5pel5pmC44O75pu05paw5pel5pmC44OV44Kj44O844Or44OJ44GM6YG45oqe44GV44KM44Gm44GE44KL5aC05ZCI44CB5L6L5aSW44KS55m655Sf44GV44Gb44KLXHJcbiAgICAgICAgICAgIGlmKGZpZWxkID09PSBcIkZJTEVcIiB8fCBmaWVsZCA9PT0gXCJTVUJUQUJMRVwiIHx8IGZpZWxkID09PSBcIkNBVEVHT1JZXCIgfHwgZmllbGQgPT09IFwiU1RBVFVTXCJcclxuICAgICAgICAgICAgICAgICAgICB8fCBmaWVsZCA9PT0gXCJTVEFUVVNfQVNTSUdORUVcIiB8fCBmaWVsZCA9PT0gXCJDUkVBVE9SXCIgfHwgZmllbGQgPT09IFwiTU9ESUZJRVJcIiB8fCBmaWVsZCA9PT0gXCJfX1JFVklTSU9OX19cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCBmaWVsZCA9PT0gXCJSRUNPUkRfTlVNQkVSXCJ8fCBmaWVsZCA9PT0gXCJfX0lEX19cIiB8fCBmaWVsZCA9PT1cIkNBTENcIiB8fCBmaWVsZCA9PT0gXCJDUkVBVEVEX1RJTUVcIiB8fCBmaWVsZCA9PT0gXCJVUERBVEVEX1RJTUVcIiApe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi44CM5YCk44KS5oy/5YWl44GZ44KL44CN44Kz44Oz44Od44O844ON44Oz44OI44Gn44CB6YG45oqe44GV44KM44Gf44OV44Kj44O844Or44OJ44Gv44CB5YCk44KS5oy/5YWl44GZ44KL44Kz44Oz44Od44O844ON44Oz44OI44Gn44Gv6Z2e5a++5b+c44Gu44OV44Kj44O844Or44OJ44Gu44Gf44KB44CB5Yem55CG44KS5Lit5pat44GX44G+44GX44Gf44CCXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL+ODl+ODreODkeODhuOCo+OBruaMv+WFpeOBmeOCi+WApOOBjOacquWFpeWKm+OBruWgtOWQiOOAgeS+i+WkluOCkueZuueUn+OBleOBm+OCi1xyXG4gICAgICAgICAgICBpZih2YWx1ZSA9PT0gXCJcIil7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjgafjgIHjg5XjgqPjg7zjg6vjg4njgavmjL/lhaXjgZnjgovlgKTjgYzmjIflrprjgZXjgozjgabjgYTjgarjgYvjgaPjgZ/jgZ/jgoHjgIHlh6bnkIbjgYzkuK3mlq3jgZXjgozjgb7jgZfjgZ/jgIJcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8v5pei5a6a44Gu44OX44Ot44OR44OG44Kj44Gu44Kk44Oz44K/44O844OV44Kn44O844K544G45aSJ5o+b44GZ44KLXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElJbnNlcnRWYWx1ZVByb3BzO1xyXG5cclxuICAgICAgICAgICAgLy/mjL/lhaXjgZnjgovlgKTjgpLlj5blvpdcclxuICAgICAgICAgICAgbGV0IGZpZWxkVmFsdWUgPSB0aGlzLnByb3BzLnZhbHVlO1xyXG4gICAgICAgICAgICAvL+ODleOCo+ODvOODq+ODieOBrueorumhnuOCkuWPluW+l1xyXG4gICAgICAgICAgICBjb25zdCBmaWVsZFR5cGUgPSB0aGlzLnByb3BzLmZpZWxkLnR5cGU7XHJcbiAgICAgICAgICAgIC8v44OV44Kj44O844Or44OJ44GM5b+F6aCI6aCF55uu44Gq44Gu44GL5Y+W5b6XXHJcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkUmVxdWlyZWQ9dGhpcy5wcm9wcy5maWVsZC5yZXF1aXJlZDtcclxuICAgICAgICAgICAgLy/mjL/lhaXjgZnjgovjg5XjgqPjg7zjg6vjg4njga7jgrPjg7zjg4njgpLlj5blvpdcclxuICAgICAgICAgICAgY29uc3QgZmllbGRDb2RlPXRoaXMucHJvcHMuZmllbGQuY29kZTtcclxuICAgICAgICAgICAgLy/mjL/lhaXjgZnjgovlgKTjga7lvaLlvI/vvIjmiYvlhaXlipvjgYvlpInmlbDvvInjgpLlj5blvpdcclxuICAgICAgICAgICAgY29uc3QgaW5zZXJ0VmFsdWVUeXBlPXRoaXMucHJvcHMuc2hvdztcclxuICAgICAgICAgICAgLy/jg6njgrjjgqrjg5zjgr/jg7Pjg7vjg4Hjgqfjg4Pjgq/jg5zjg4Pjgq/jgrnjg7vopIfmlbDpgbjmip7jg7vjg4njg63jg4Pjg5fjg4Djgqbjg7Pjga7pgbjmip7ogqLjgpLlj5blvpdcclxuICAgICAgICAgICAgbGV0IGZpZWxkT3B0aW9ucyA9dGhpcy5wcm9wcy5maWVsZC5vcHRpb25zO1xyXG4gICAgICAgICAgICAvL+WkieaVsOOBruWApOOCkuagvOe0jeOBmeOCi1xyXG4gICAgICAgICAgICBsZXQgdmFyaWFibGVWYWx1ZTtcclxuXHJcbiAgICAgICAgICAgIC8v5aSJ5pWw44Gu5aC05ZCI44CB5YCk44GM5Y+W5b6X44Gn44GN44KL44GL44OB44Kn44OD44KvXHJcbiAgICAgICAgICAgIGlmKGluc2VydFZhbHVlVHlwZSA9PT0gXCLlpInmlbBcIiAmJiBjb25kaXRpb25SZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgdmFyaWFibGVWYWx1ZSA9IGNvbnRleHQudmFyaWFibGVzW2ZpZWxkVmFsdWVdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKHZhcmlhYmxlVmFsdWUgPT09IHVuZGVmaW5lZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjg5XjgqPjg7zjg6vjg4njgavlhaXjgozjgojjgYbjgajjgZfjgZ/lpInmlbDjga/jgIHnhKHlirnjgarlhaXlipvlvaLlvI/jgafjgZnjgIJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmaWVsZFZhbHVlID0gdmFyaWFibGVWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy/lhaXlipvlgKTjg4Hjgqfjg4Pjgq/lvozjgIHlvaLlvI/lpInmj5vjgIHlnovlpInmj5vjgZfjgZ/lgKTjgpLmoLzntI3jgZnjgovlpInmlbBcclxuICAgICAgICAgICAgbGV0IGNvcnJlY3RGb3JtYXR0ZWRWYWx1ZTtcclxuICAgICAgICAgICAgLy/lhaXlipvlgKTjg4Hjgqfjg4Pjgq/lvozjgIHlvaLlvI/lpInmj5vjgIHlnovlpInmj5vjgZfjgZ/lgKTjgpLmoLzntI3jgZnjgovphY3liJdcclxuICAgICAgICAgICAgbGV0IGNvcnJlY3RWYWx1ZXMgOnN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgIC8v5YWl5Yqb44Ko44Op44O877yI56m655m95paH5a2X44Gu5re35YWl77yJ44GM44Gq44GE44GT44Go44KS44OB44Kn44OD44KvXHJcbiAgICAgICAgICAgIGxldCBub3RJbnB1dEVycm9yPXRoaXMuY2hlY2tJbnB1dEJsYW5rKGZpZWxkVHlwZSxmaWVsZFZhbHVlLGZpZWxkQ29kZSxmaWVsZFJlcXVpcmVkLGV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgIC8v5p2h5Lu25byP44Gu57WQ5p6c44GMdHJ1ZeOAgeWFpeWKm+OCqOODqeODvO+8iOepuueZveaWh+Wtl+OBrua3t+WFpe+8ieOBjOOBquOBhOWgtOWQiOOAgeaMv+WFpeOBmeOCi+WApOOCkuODleOCo+ODvOODq+ODieOCv+OCpOODl+WIpeOBq+ODgeOCp+ODg+OCr+OBmeOCi1xyXG4gICAgICAgICAgICBpZihjb25kaXRpb25SZXN1bHQgJiYgbm90SW5wdXRFcnJvcil7XHJcblxyXG4gICAgICAgICAgICAgICAgLy/mloflrZfliJflnovjga7jg5XjgqPjg7zjg6vjg4njgavmjL/lhaXjgZfjgojjgYbjgajjgZfjgabjgYTjgovlgKTjgYzpganliIfjga7loLTlkIjjgIFjb3JyZWN0Rm9ybWF0dGVkVmFsdWXjgavku6PlhaXjgZnjgotcclxuICAgICAgICAgICAgICAgIGlmKGZpZWxkVHlwZSA9PT0gXCJTSU5HTEVfTElORV9URVhUXCIgfHwgZmllbGRUeXBlID09PSBcIk1VTFRJX0xJTkVfVEVYVFwiIHx8IGZpZWxkVHlwZSA9PT0gXCJSSUNIX1RFWFRcIiB8fCBmaWVsZFR5cGUgPT09IFwiTElOS1wiICl7XHJcbiAgICAgICAgICAgICAgICAgICAgY29ycmVjdEZvcm1hdHRlZFZhbHVlID0gZmllbGRWYWx1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAvL+aVsOWApOWei+OBruODleOCo+ODvOODq+ODieOBq+aMv+WFpeOBl+OCiOOBhuOBqOOBl+OBpuOBhOOCi+WApOOBjOmBqeWIh+OBruWgtOWQiOOAgeaVsOWApOWei+OBq+Wei+WkieaPm+OBl+OBpmNvcnJlY3RGb3JtYXR0ZWRWYWx1ZeOBq+S7o+WFpeOBmeOCi1xyXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoZmllbGRUeXBlID09PSBcIk5VTUJFUlwiICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5jaGVja0lucHV0TnVtYmVyKGZpZWxkVmFsdWUsZmllbGRDb2RlLGV2ZW50KSl7Ly/lhaXlipvlgKTjg4Hjgqfjg4Pjgq9cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVjdEZvcm1hdHRlZFZhbHVlID0gTnVtYmVyKGZpZWxkVmFsdWUpOy8v5Z6L5aSJ5o+bXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8v5pel5LuY44O75pel5pmC5Z6L44Gu44OV44Kj44O844Or44OJ44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gm44GE44KL5YCk44GM6YGp5YiH44Gu5aC05ZCI44CB5oyH5a6a44Gu5pel5LuY44O75pel5pmC44Gr5b2i5byP5aSJ5o+b44GX44GmY29ycmVjdEZvcm1hdHRlZFZhbHVl44Gr5Luj5YWl44GZ44KLXHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihmaWVsZFR5cGUgPT09IFwiREFURVwiIHx8IGZpZWxkVHlwZSA9PT0gXCJEQVRFVElNRVwiICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5jaGVja0lucHV0RGF0ZShmaWVsZFZhbHVlLGZpZWxkQ29kZSxldmVudCkpey8v5YWl5Yqb5YCk44OB44Kn44OD44KvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JtYXR0ZWREYXRlID0gdGhpcy5jaGFuZ2VEYXRlRm9ybWF0KGZpZWxkVmFsdWUsZmllbGRUeXBlLGZpZWxkQ29kZSxldmVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZm9ybWF0dGVkRGF0ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0Rm9ybWF0dGVkVmFsdWUgPSBmb3JtYXR0ZWREYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy/mmYLliLvjg5XjgqPjg7zjg6vjg4njgavmjL/lhaXjgZfjgojjgYbjgajjgZfjgabjgYTjgovlgKTjgYzpganliIfjga7loLTlkIjjgIFjb3JyZWN0Rm9ybWF0dGVkVmFsdWXjgavku6PlhaXjgZnjgotcclxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKGZpZWxkVHlwZSA9PT0gXCJUSU1FXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuY2hlY2tJbnB1dFRpbWUoZmllbGRWYWx1ZSxmaWVsZENvZGUsZXZlbnQpKXsvL+WFpeWKm+WApOODgeOCp+ODg+OCr1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0Rm9ybWF0dGVkVmFsdWUgPSBmaWVsZFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvL+ODqeOCuOOCquODnOOCv+ODs+ODu+ODieODreODg+ODl+ODgOOCpuODs+OBruODleOCo+ODvOODq+ODieOBrumBuOaKnuiCouOBqOWFpeWKm+WApOOBjOS4gOiHtOOBl+OBn+WgtOWQiOOAgWNvcnJlY3RGb3JtYXR0ZWRWYWx1ZeOBq+S7o+WFpeOBmeOCi1xyXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoZmllbGRUeXBlID09PSBcIlJBRElPX0JVVFRPTlwiIHx8IGZpZWxkVHlwZSA9PT0gXCJEUk9QX0RPV05cIil7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5jaGVja0lucHV0T3B0aW9uKGZpZWxkVmFsdWUsZmllbGRPcHRpb25zLGZpZWxkQ29kZSxldmVudCkpey8v5YWl5Yqb5YCk44OB44Kn44OD44KvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RGb3JtYXR0ZWRWYWx1ZSA9IGZpZWxkVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8v44OB44Kn44OD44Kv44Oc44OD44Kv44K544O76KSH5pWw6YG45oqe44Gu44OV44Kj44O844Or44OJ44Gu6YG45oqe6IKi44Go5YWl5Yqb5YCk44GM5LiA6Ie044GX44Gf5aC05ZCI44CBY29ycmVjdFZhbHVlc+OBrumFjeWIl+OBq+S7o+WFpeOBmeOCi1xyXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoZmllbGRUeXBlID09PSBcIkNIRUNLX0JPWFwiIHx8IGZpZWxkVHlwZSA9PT0gXCJNVUxUSV9TRUxFQ1RcIiApe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuY2hlY2tJbnB1dE9wdGlvbihmaWVsZFZhbHVlLGZpZWxkT3B0aW9ucyxmaWVsZENvZGUsZXZlbnQpKXsvL+WFpeWKm+WApOODgeOCp+ODg+OCr1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0VmFsdWVzWzBdID0gZmllbGRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy/jg6bjg7zjgrbjg7zmg4XloLHjg5XjgqPjg7zjg4njgavmjL/lhaXjgZfjgojjgYbjgajjgZfjgZ/lgKTjgYzpganliIfjgarloLTlkIjjgIFjb3JyZWN0Rm9ybWF0dGVkVmFsdWXjgavku6PlhaXjgZnjgotcclxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKGZpZWxkVHlwZSA9PT0gXCJVU0VSX1NFTEVDVFwiKXtcclxuICAgICAgICAgICAgICAgICAgICAvL+aMv+WFpeOBmeOCi+WApOOBjOODpuODvOOCtuODvOaDheWgseOBi+OCieimi+OBpOOBi+OCjOOBsOOAgeODpuODvOOCtuODvOWQjeOCkuagvOe0jVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCB1c2Vycz1hd2FpdCB0aGlzLnNldElucHV0VXNlcihmaWVsZFZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy/jg6bjg7zjgrbjg7zlkI3jgYzmoLzntI3jgafjgY3jgabjgYTjgovloLTlkIjjgIHjg63jgrDjgqTjg7PlkI3jgajjg6bjg7zjgrbjg7zlkI3jgpJjb3JyZWN0Rm9ybWF0dGVkVmFsdWXjgavku6PlhaXjgZnjgotcclxuICAgICAgICAgICAgICAgICAgICBpZighdXNlcnMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5yZWNvcmRbZmllbGRDb2RlXVsnZXJyb3InXT1cIuODpuODvOOCtuODvOmBuOaKnuOBq+OAgeaMv+WFpeOBl+OCiOOBhuOBqOOBl+OBn+ODpuODvOOCtuODvOaDheWgseOBr+imi+OBpOOBi+OCiuOBvuOBm+OCk+OBp+OBl+OBn+OAguOAjOWApOOCkuaMv+WFpeOBmeOCi+OAjeOCs+ODs+ODneODvOODjeODs+ODiOOBruWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAglwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLjg6bjg7zjgrbjg7zpgbjmip7jgavjgIHmjL/lhaXjgZfjgojjgYbjgajjgZfjgZ/jg6bjg7zjgrbjg7zmg4XloLHjga/opovjgaTjgYvjgorjgb7jgZvjgpPjgafjgZfjgZ/jgILjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjga7lh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RGb3JtYXR0ZWRWYWx1ZT1beyBjb2RlOiBmaWVsZFZhbHVlLCBuYW1lOiB1c2VycyB9XTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy/ntYTnuZTmg4XloLHjg5XjgqPjg7zjg4njgavmjL/lhaXjgZfjgojjgYbjgajjgZfjgZ/lgKTjgYzpganliIfjgarloLTlkIjjgIFjb3JyZWN0Rm9ybWF0dGVkVmFsdWXjgavku6PlhaXjgZnjgotcclxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKGZpZWxkVHlwZSA9PT0gXCJPUkdBTklaQVRJT05fU0VMRUNUXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgIC8v5oy/5YWl44GZ44KL5YCk44GM57WE57mU5oOF5aCx44GL44KJ6KaL44Gk44GL44KM44Gw44CB57WE57mU5ZCN44KS5qC857SNXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9yZ2FuaXphdGlvbnM9YXdhaXQgdGhpcy5zZXRJbnB1dE9yZ2FuaXphdGlvbihmaWVsZFZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy/ntYTnuZTlkI3jgYzmoLzntI3jgafjgY3jgabjgYTjgovloLTlkIjjgIHntYTnuZTjgrPjg7zjg4njgajntYTnuZTlkI3jgpJjb3JyZWN0Rm9ybWF0dGVkVmFsdWXjgavku6PlhaXjgZnjgotcclxuICAgICAgICAgICAgICAgICAgICBpZighb3JnYW5pemF0aW9ucyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdWydlcnJvciddPVwi57WE57mU6YG45oqe44OV44Kj44O844Or44OJ44Gr44CB5oy/5YWl44GX44KI44GG44Go44GX44Gf57WE57mU5oOF5aCx44Gv6KaL44Gk44GL44KK44G+44Gb44KT44Gn44GX44Gf44CC44CM5YCk44KS5oy/5YWl44GZ44KL44CN44Kz44Oz44Od44O844ON44Oz44OI44Gu5Yem55CG44KS5Lit5pat44GX44G+44GX44Gf44CCXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIue1hOe5lOmBuOaKnuODleOCo+ODvOODq+ODieOBq+OAgeaMv+WFpeOBl+OCiOOBhuOBqOOBl+OBn+e1hOe5lOaDheWgseOBr+imi+OBpOOBi+OCiuOBvuOBm+OCk+OBp+OBl+OBn+OAguOAjOWApOOCkuaMv+WFpeOBmeOCi+OAjeOCs+ODs+ODneODvOODjeODs+ODiOOBruWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAglwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVjdEZvcm1hdHRlZFZhbHVlPVt7IGNvZGU6IGZpZWxkVmFsdWUsIG5hbWU6IG9yZ2FuaXphdGlvbnN9XTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy/jgrDjg6vjg7zjg5fmg4XloLHjg5XjgqPjg7zjg4njgavmjL/lhaXjgZfjgojjgYbjgajjgZfjgZ/lgKTjgYzpganliIfjgarloLTlkIjjgIFjb3JyZWN0Rm9ybWF0dGVkVmFsdWXjgavku6PlhaXjgZnjgotcclxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKGZpZWxkVHlwZSA9PT0gXCJHUk9VUF9TRUxFQ1RcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgLy/mjL/lhaXjgZnjgovlgKTjgYzjgrDjg6vjg7zjg5fmg4XloLHjgYvjgonopovjgaTjgYvjgozjgbDjgIHjgrDjg6vjg7zjg5flkI3jgpLmoLzntI1cclxuICAgICAgICAgICAgICAgICAgICBsZXQgZ3JvdXBzPWF3YWl0IHRoaXMuc2V0SW5wdXRHcm91cChmaWVsZFZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy/jgrDjg6vjg7zjg5flkI3jgYzmoLzntI3jgafjgY3jgabjgYTjgovloLTlkIjjgIHjgrDjg6vjg7zjg5fjgrPjg7zjg4njgajjgrDjg6vjg7zjg5flkI3jgpJjb3JyZWN0Rm9ybWF0dGVkVmFsdWXjgavku6PlhaXjgZnjgotcclxuICAgICAgICAgICAgICAgICAgICBpZighZ3JvdXBzKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV1bJ2Vycm9yJ109XCLjgrDjg6vjg7zjg5fpgbjmip7jg5XjgqPjg7zjg6vjg4njgavjgIHmjL/lhaXjgZfjgojjgYbjgajjgZfjgZ/jgrDjg6vjg7zjg5fmg4XloLHjga/opovjgaTjgYvjgorjgb7jgZvjgpPjgafjgZfjgZ/jgILjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjga7lh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi44Kw44Or44O844OX6YG45oqe44OV44Kj44O844Or44OJ44Gr44CB5oy/5YWl44GX44KI44GG44Go44GX44Gf44Kw44Or44O844OX5oOF5aCx44Gv6KaL44Gk44GL44KK44G+44Gb44KT44Gn44GX44Gf44CC44CM5YCk44KS5oy/5YWl44GZ44KL44CN44Kz44Oz44Od44O844ON44Oz44OI44Gu5Yem55CG44KS5Lit5pat44GX44G+44GX44Gf44CCXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0Rm9ybWF0dGVkVmFsdWU9W3sgY29kZTogZmllbGRWYWx1ZSwgbmFtZTogZ3JvdXBzfV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL+adoeS7tuW8j+OBrue1kOaenOOBjHRydWXjgYvjgaTmjL/lhaXjgZnjgovlgKTjgYzlpInmj5vjgafjgY3jgZ/loLTlkIjjgIHjg5XjgqPjg7zjg6vjg4nvvIjjg6njgrjjgqrjg5zjgr/jg7Pjg7vjg4njg63jg4Pjg5fjg4Djgqbjg7Pjg7vjg4Hjgqfjg4Pjgq/jg5zjg4Pjgq/jgrnjg7vopIfmlbDpgbjmip7jg7vmloflrZfliJfkuIDooYzjg7vmloflrZfliJfopIfmlbDooYzjg7vjg6rjg4Pjg4Hjgqjjg4fjgqPjgr/jg7vmlbDlgKTjg7vml6Xku5jjg7vml6XmmYLjg7vmmYLliLvvvInjgavjgrvjg4Pjg4hcclxuICAgICAgICAgICAgaWYoY29uZGl0aW9uUmVzdWx0ICYmIChjb3JyZWN0Rm9ybWF0dGVkVmFsdWUgfHwgY29ycmVjdFZhbHVlcykpe1xyXG4gICAgICAgICAgICAgICAgLy/mnaHku7blvI/jga7ntZDmnpzjgYx0dXJl44GL44Gk44CB5YCk44KS5q2j44GX44GE5b2i5byP44Gr5aSJ5o+b44Gn44GN44Gf5aC05ZCI44CB44OV44Kj44O844Or44OJ44Gr5YCk44KS44K744OD44OI44GZ44KLXHJcbiAgICAgICAgICAgICAgICBpZihjb3JyZWN0Rm9ybWF0dGVkVmFsdWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdLnZhbHVlID0gY29ycmVjdEZvcm1hdHRlZFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgLy/mnaHku7blvI/jga7ntZDmnpzjgYx0dXJl44GL44Gk44CB5YCk44KS5q2j44GX44GE5b2i5byP77yI6YWN5YiX77yJ44Gr5aSJ5o+b44Gn44GN44Gf5aC05ZCI44CB44OV44Kj44O844Or44OJ44Gr5YCk77yI6YWN5YiX77yJ44KS44K744OD44OI44GZ44KLXHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihjb3JyZWN0VmFsdWVzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdLnZhbHVlID0gY29ycmVjdFZhbHVlcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzdWx0PSB7XHJcbiAgICAgICAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6dHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfWNhdGNoKGVycm9yOmFueSl7XHJcbiAgICAgICAgICAgIGV2ZW50LnJlY29yZDtcclxuICAgICAgICAgICAgZXZlbnQuZXJyb3I9ZXJyb3IubWVzc2FnZTtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jYW5OZXh0PXRydWU7Ly/mrKHjga7jg47jg7zjg4njga/lh6bnkIbjgpLntprjgZHjgotcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb250ZXh0IOadoeS7tuW8j+OCkuWun+ihjOOBmeOCi1xyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgZ2V0Q29uZGl0aW9uUmVzdWx0KGNvbnRleHQ6YW55KTpib29sZWFue1xyXG4gICAgICAgIC8v44OX44Ot44OR44OG44KjYGNvbmRpdGlvbmDjgYvjgonmnaHku7bjg4Tjg6rjg7zjgpLlj5blvpfjgZnjgotcclxuICAgICAgICBjb25zdCB0cmVlID10aGlzLmdldENvbmRpdGlvbih0aGlzLnByb3BzLmNvbmRpdGlvbik7XHJcbiAgICAgICAgaWYoIXRyZWUpe1xyXG4gICAgICAgICAgICAvL+adoeS7tuOCkuioreWumuOBleOCjOOBpuOBhOOBvuOBm+OCk1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRyZWUuZXZhbHVhdGUodHJlZS5yb290LGNvbnRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIGNvbmRpdGlvbiDmnaHku7blvI/jg4Tjg6rjg7zjgpLlj5blvpfjgZnjgotcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGdldENvbmRpdGlvbihjb25kaXRpb246c3RyaW5nKTpDb25kaXRpb25UcmVlfG51bGx7XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlID0gbmV3IENvbmRpdGlvblRyZWUoKTtcclxuICAgICAgICAgICAgdHJlZS5mcm9tSnNvbihjb25kaXRpb24pO1xyXG4gICAgICAgICAgICBpZih0cmVlLmdldENvbmRpdGlvbnModHJlZS5yb290KS5sZW5ndGg+MCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJlZTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1jYXRjaChlcnJvcil7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlcigpOiB2b2lkIHtcclxuICAgICAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXT10aGlzO1xyXG4gICAgfVxyXG5cclxufVxyXG5uZXcgSW5zZXJ0VmFsdWVBY3Rpb24oKTsiLCJpbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyAgSUFjdGlvbixJQWN0aW9uUmVzdWx0LCBJQWN0aW9uTm9kZSwgSUFjdGlvblByb3BlcnR5LCBJRmllbGQsIElDb250ZXh0LCBJVmFyTmFtZX0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJR2V0VmFsdWVQcm9wc3tcclxuICAgIGZpZWxkOklGaWVsZDsvL+ODgeOCp+ODg+OCr+OBmeOCi+ODleOCo+ODvOODq+ODieOBruWvvuixoVxyXG4gICAgdmVyTmFtZTpJVmFyTmFtZTtcclxufVxyXG4vKipcclxuICog5q2j6KaP6KGo54++44OB44Kn44OD44Kv44Ki44Kv44K344On44OzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgR2V0VmFsdWVBY2l0b24gaW1wbGVtZW50cyBJQWN0aW9ue1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gICAgcHJvcHM6SUdldFZhbHVlUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMubmFtZT1cIuWApOOCkuWPluW+l+OBmeOCi1wiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9W107XHJcbiAgICAgICAgdGhpcy5wcm9wcz17XHJcbiAgICAgICAgICAgIGZpZWxkOntjb2RlOicnfSxcclxuICAgICAgICAgICAgdmVyTmFtZTp7bmFtZTonJ31cclxuICAgICAgICB9XHJcbiAgICAgICAgLy/jgqLjgq/jgrfjg6fjg7PjgpLnmbvpjLLjgZnjgotcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGUgXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOklBY3Rpb25Ob2RlLGV2ZW50OmFueSxjb250ZXh0OklDb250ZXh0KTpQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgICAgICBsZXQgcmVzdWx0PXtcclxuICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgLy/lsZ7mgKfoqK3lrprjgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1hY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG4gICAgICAgICAgICBpZiAoISgnZmllbGQnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmICEoJ3Zlck5hbWUnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElHZXRWYWx1ZVByb3BzO1xyXG4gICAgICAgICAgICAvL+adoeS7tuW8j+OBruioiOeul+e1kOaenOOCkuWPluW+l1xyXG4gICAgICAgICAgICBjb25zdCByZWNvcmQgPSBldmVudC5yZWNvcmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0udmFsdWU7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucHJvcHMudmVyTmFtZSAmJiB0aGlzLnByb3BzLnZlck5hbWUubmFtZSE9PScnKXtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQudmFyaWFibGVzW3RoaXMucHJvcHMudmVyTmFtZS5uYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDp0cnVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1jYXRjaChlcnJvcil7XHJcbiAgICAgICAgICAgIGV2ZW50LmVycm9yPWVycm9yO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQ9ZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdPXRoaXM7XHJcbiAgICB9XHJcbiAgICBcclxufVxyXG5uZXcgR2V0VmFsdWVBY2l0b24oKTtcclxuIiwiaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgSUZpZWxkLCBJQWN0aW9uLElBY3Rpb25SZXN1bHQsIElBY3Rpb25Ob2RlLCBJQWN0aW9uUHJvcGVydHkgfSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuaW1wb3J0IHsgRm9ybWF0dGVyIH0gZnJvbSBcIi4uL3V0aWwvZm9ybWF0XCI7XHJcblxyXG4vL+WPs1VJ55S76Z2icHJvcGVydHnjga5uYW1lOuWei++8mlxyXG5pbnRlcmZhY2UgSVN0cmluZ0pvaW5Qcm9wc3tcclxuICAgIC8v5L+d5a2Y5YWI44OV44Kj44O844Or44OJXHJcbiAgICBzYXZlRmllbGQ6SUZpZWxkO1xyXG4gICAgLy/ntZDlkIjlhYPjg5XjgqPjg7zjg6vjg4kxXHJcbiAgICBqb2luRmllbGQxOklGaWVsZDtcclxuICAgIC8v57WQ5ZCI5YWD44OV44Kj44O844Or44OJMlxyXG4gICAgam9pbkZpZWxkMjpJRmllbGQ7XHJcbiAgICAvL+WMuuWIh+OCiuaWh+Wtl1xyXG4gICAgZGVsaW1pdGVyOnN0cmluZztcclxufVxyXG5cclxuLy9JQWN0aW9u44Kk44Oz44K/44OV44Kn44O844K544KS5a6f6KOF44GZ44KL5paw44GX44GE44Kv44Op44K5QWN0aW9u44KS5L2c5oiQ77yaXHJcbmV4cG9ydCBjbGFzcyBTdHJpbmdKb2luQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbntcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIC8vaW1wb3J044GL44KJ5bCO5YWl6aGV56S65a6a576pXHJcbiAgICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgICAvL+S4iuaWueOBrmludGVyZmFjZSBQcm9wc+OBi+OCieOAgXByb3Bz5Y+X44GR44KL5bGe5oCn44KS5a6a576p77yaXHJcbiAgICBwcm9wczpJU3RyaW5nSm9pblByb3BzO1xyXG4gICAgLy/plqLmlbDlrprnvqnjgavlv4XopoHjgarpoZ7lkI3jgpLmp4vnr4nvvJpcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgLy9wZ0FkbWluRELjgavnmbvpjLLjgZfjgZ/jgqLjgq/jgrfjg6fjg7PlkI0obmFtZS9zdWJ0aXRsZSnkuIDoh7TjgZnjgovlv4XopoHjgYzjgYLjgovvvJpcclxuICAgICAgICB0aGlzLm5hbWU9XCLmloflrZfntZDlkIhcIjtcclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzPVtdO1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgICAgICAvL+ODl+ODreODkeODhuOCo+WxnuaAp+WIneacn+WMlu+8mlxyXG4gICAgICAgIHRoaXMucHJvcHM9e1xyXG4gICAgICAgICAgICBzYXZlRmllbGQ6e2NvZGU6Jyd9LFxyXG4gICAgICAgICAgICBqb2luRmllbGQxOntjb2RlOicnfSxcclxuICAgICAgICAgICAgam9pbkZpZWxkMjp7Y29kZTonJ30sXHJcbiAgICAgICAgICAgIGRlbGltaXRlcjonJ1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL+ODquOCu+ODg+ODiOS4iuiomOeZu+mMsuihqO+8mlxyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgIH1cclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+OBruWHpueQhuOCkuWun+ijheOBmeOCi1xyXG4gKiBAcGFyYW0gYWN0aW9uTm9kZSDjgqLjgq/jgrfjg6fjg7Pjg47jg7zjg4lcclxuICogQHBhcmFtIGV2ZW50IEtpbnRvbmXjga7jgqTjg5njg7Pjg4hcclxuICogQHBhcmFtIGNvbnRleHQg44Kz44Oz44OG44Kt44K544OI77yI44Os44Kz44O844OJ44CB5aSJ5pWw5oOF5aCx44KS5oyB44Gj44Gm44GE44KL77yJXHJcbiAqIEByZXR1cm5zIFxyXG4gKi9cclxuICAgIC8v6Z2e5ZCM5pyf5Yem55CG44GC44KL6Zai5pWw5LiL44Gu44GC44KL5bGe5oCn77yaXHJcbiAgICBhc3luYyBwcm9jZXNzKGFjdGlvbk5vZGU6SUFjdGlvbk5vZGUsZXZlbnQ6YW55KTpQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgICAgICBsZXQgcmVzdWx0PXtcclxuICAgICAgICAgICAgLy/lvozntpnlh6bnkIbkuI3lj6/vvJpcclxuICAgICAgICAgICAgY2FuTmV4dDpmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OmZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KL77yaXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9YWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgLy/jg5fjg63jg5Hjg4bjgqPoqK3lrprjga7jg4fjg7zjgr/lnovjga/lv4XopoHjgarmg4XloLHlkKvjgoHjgb7jgZnjgYvvvJ/lhajpg6jkuI3lrZjlnKjmmYJyZXR1cm46XHJcbiAgICAgICAgICAgIGlmICghKCdzYXZlRmllbGQnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmICEoJ2pvaW5GaWVsZDEnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmICEoJ2pvaW5GaWVsZDInIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8v5pei5a6a44Gu44OX44Ot44OR44OG44Kj44Gu44Kk44Oz44K/44OV44Kn44O844K544G45aSJ5o+b77yaXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElTdHJpbmdKb2luUHJvcHM7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IGV2ZW50LnJlY29yZDtcclxuXHJcbiAgICAgICAgICAgIC8va2ludG9uZeODleOCo+ODvOODq+ODieOCv+OCpOODl+WPluW+l++8mlxyXG4gICAgICAgICAgICBjb25zdCBqb2luRmllbGQxdHlwZT10aGlzLnByb3BzLmpvaW5GaWVsZDEudHlwZTtcclxuICAgICAgICAgICAgY29uc3Qgam9pbkZpZWxkMnR5cGU9dGhpcy5wcm9wcy5qb2luRmllbGQyLnR5cGU7XHJcbiAgICAgICAgICAgIGNvbnN0IHNhdmVGaWVsZHR5cGU9dGhpcy5wcm9wcy5zYXZlRmllbGQudHlwZTtcclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgICAgICAvLyAvL+S/neWtmOWFiOODleOCo+ODvOODq+ODieOBr+aWh+Wtl+WIl+ODleOCo+ODvOODq+ODieOBp+OBr+OBquOBhOWgtOWQiOOAgeOCqOODqeODvOeZuueUn++8mlxyXG4gICAgICAgICAgICBpZighKHNhdmVGaWVsZHR5cGU9PT0nU0lOR0xFX0xJTkVfVEVYVCd8fHNhdmVGaWVsZHR5cGU9PT0nTVVMVElfTElORV9URVhUJ3x8c2F2ZUZpZWxkdHlwZT09PSdSSUNIX1RFWFQnKSl7XHJcbiAgICAgICAgICAgICAgICBldmVudC5lcnJvcj0nW+OCqOODqeODvOODoeODg+OCu+ODvOOCuF3vvJrntZDlkIjkv53lrZjlhYjlr77lv5zkuI3lj6/jgILntZDlkIjjgZfjgb7jgZvjgpMnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnR5cGUuaW5jbHVkZXMoJ3N1Y2Nlc3MnKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmFsZXJ0KFwiW3dpbmRvd3MgYWxlcnRd77yaXCIrZXZlbnQuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbk5leHQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogZmFsc2VcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvL+WApOWPluW+l+aWueazleWumue+qe+8mlxyXG4gICAgZnVuY3Rpb24gZ2V0VmFsdWUodmFsdWU6c3RyaW5nLHR5cGU6c3RyaW5nfHVuZGVmaW5lZCxmaWVsZENvZGU6c3RyaW5nLGV2ZW50OmFueSl7XHJcbiAgICAgICAgaWYoZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0/LnZhbHVlPT09dW5kZWZpbmVkfHxldmVudC5yZWNvcmRbZmllbGRDb2RlXT8udmFsdWU9PT1udWxsKXtcclxuICAgICAgICAgICAgZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0udmFsdWU9Jyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v5L2c5oiQ6ICF44CB5pu05paw6ICF77yaXHJcbiAgICAgICAgaWYodHlwZT09PSdDUkVBVE9SJ3x8dHlwZT09PSdNT0RJRklFUicpe1xyXG4gICAgICAgICAgICB2YWx1ZSA9IGV2ZW50LnJlY29yZFtmaWVsZENvZGVdPy52YWx1ZS5uYW1lO1xyXG4gICAgICAgIC8v5pel5pmC44CB5L2c5oiQ5pel5pmC44CB5pu05paw5pel5pmC77yaXHJcbiAgICAgICAgfWVsc2UgaWYodHlwZT09PSdEQVRFVElNRSd8fHR5cGU9PT0nQ1JFQVRFRF9USU1FJ3x8dHlwZT09PSdVUERBVEVEX1RJTUUnKXtcclxuICAgICAgICAgICAgaWYoZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0/LnZhbHVlIT09dW5kZWZpbmVkICYmIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdPy52YWx1ZSE9PScnKXtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gRm9ybWF0dGVyLmRhdGVGb3JtYXQobmV3IERhdGUoZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0/LnZhbHVlKSwneXl5eS1NTS1kZCBISDptbScpO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9ZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0/LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIC8v44Om44O844K26YG45oqe44CB57WE57mU6YG45oqe44CB44Kw44Or44O844OX6YG45oqe44CB5re75LuY44OV44Kh44Kk44Or5ZCN44CB5L2c5qWt6ICF44CB44Kr44OG44K044Oq44O877yaXHJcbiAgICAgICAgfWVsc2UgaWYodHlwZT09PSdVU0VSX1NFTEVDVCd8fHR5cGU9PT0nT1JHQU5JWkFUSU9OX1NFTEVDVCd8fHR5cGU9PT0nR1JPVVBfU0VMRUNUJ3x8dHlwZT09PSdGSUxFJ3x8dHlwZT09PSdTVEFUVVNfQVNTSUdORUUnKXtcclxuICAgICAgICAgICAgaWYoZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0/LnZhbHVlPT09dW5kZWZpbmVkIHx8IGV2ZW50LnJlY29yZFtmaWVsZENvZGVdPy52YWx1ZT09PScnKXtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0/LnZhbHVlO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vdG90ZXh0PWV2ZW50LnJlY29yZFtmaWVsZENvZGVdPy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIGxldCBhcnI9W107XHJcbiAgICAgICAgICAgICAgICBmb3IobGV0IGk9MDtpPG1vdG90ZXh0Lmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKG1vdG90ZXh0W2ldLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy/phY3liJfopoHntKDjgpIs44Gn6YCj57WQ44GX44Gm5paH5a2X5YiX44KS5L2c5oiQ77yaXHJcbiAgICAgICAgICAgICAgICB2YWx1ZT1hcnIuam9pbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgLy/jgqvjg4bjgrTjg6rjg7zjgIHjg4Hjgqfjg4Pjgq/jg5zjg4Pjgq/jgrnjgIHopIfmlbDpgbjmip7vvJpcclxuICAgICAgICB9ZWxzZSBpZih0eXBlPT09J0NBVEVHT1JZJ3x8dHlwZT09PSdDSEVDS19CT1gnfHx0eXBlPT09J01VTFRJX1NFTEVDVCcpe1xyXG4gICAgICAgICAgICBpZihldmVudC5yZWNvcmRbZmllbGRDb2RlXT8udmFsdWU9PT11bmRlZmluZWQgfHwgZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0/LnZhbHVlPT09Jycpe1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBldmVudC5yZWNvcmRbZmllbGRDb2RlXT8udmFsdWU7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW90b3RleHQ9ZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0/LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgbGV0IGFycj1bXTtcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgaT0wO2k8bW90b3RleHQubGVuZ3RoO2krKyl7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2gobW90b3RleHRbaV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy/phY3liJfopoHntKDjgpIs44Gn6YCj57WQ44GX44Gm5paH5a2X5YiX44KS5L2c5oiQ77yaXHJcbiAgICAgICAgICAgICAgICB2YWx1ZT1hcnIuam9pbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgLy/oqbPntLDnlLvpnaLjg5fjg63jgrvjgrnlrp/ooYzlvozjga7jgrnjg4bjg7zjgr/jgrnvvJpcclxuICAgICAgICB9ZWxzZSBpZih0eXBlPT09J1NUQVRVUycmJmV2ZW50LnR5cGUuaW5jbHVkZXMoJ3Byb2Nlc3MnKSl7XHJcbiAgICAgICAgICAgIHZhbHVlID0gZXZlbnQubmV4dFN0YXR1cy52YWx1ZTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdmFsdWUgPSBldmVudC5yZWNvcmRbZmllbGRDb2RlXT8udmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZT09PXVuZGVmaW5lZCB8fCB2YWx1ZT09PW51bGwpe1xyXG4gICAgICAgICAgICB2YWx1ZT0nJztcclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgICByZXR1cm4gdmFsdWU7ICAgICBcclxuICAgIH1cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgICAgICAvL+WApOWPluW+l+aWueazleWRvOWHuu+8mlxyXG4gICAgICAgICAgICBsZXQgam9pblZhbHVlMTpzdHJpbmc9Jyc7XHJcbiAgICAgICAgICAgIGpvaW5WYWx1ZTE9Z2V0VmFsdWUoam9pblZhbHVlMSxqb2luRmllbGQxdHlwZSx0aGlzLnByb3BzLmpvaW5GaWVsZDEuY29kZSxldmVudCk7XHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAgICAgbGV0IGpvaW5WYWx1ZTI6c3RyaW5nPScnO1xyXG4gICAgICAgICAgICBqb2luVmFsdWUyPWdldFZhbHVlKGpvaW5WYWx1ZTIsam9pbkZpZWxkMnR5cGUsdGhpcy5wcm9wcy5qb2luRmllbGQyLmNvZGUsZXZlbnQpO1xyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAgICAgICAgIGNvbnN0IGNvblN0cmluZyA9IHRoaXMucHJvcHMuZGVsaW1pdGVyO1xyXG4gICAgICAgICAgICBsZXQgc2F2ZVZhbHVlOnN0cmluZz0nJztcclxuICAgICAgICAgICAgLy/liY3lvozntZDlkIjlhYPjgYznqbrnmb3jgarjgonljLrliIfjgormloflrZfjgoLnqbrnmb3jgavjgZnjgoso5L6LOjEtOOOBrjjnhKHjgYTjgarjgokx44CCMS0444GuMeeEoeOBhOOBquOCiTjjgIIx56m655m9OOOBrjjnhKHjgYTjgarjgokx44CC57WQ5ZCI5YWD5YWo6YOo56m655m944Gq44KJ5YWo6YOo56m655m9KTpcclxuICAgICAgICAgICAgaWYoam9pblZhbHVlMT09PScnJiZqb2luVmFsdWUyPT09Jycpe1xyXG4gICAgICAgICAgICAgICAgc2F2ZVZhbHVlPScnO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZihqb2luVmFsdWUxPT09JycmJmpvaW5WYWx1ZTIhPT0nJyl7XHJcbiAgICAgICAgICAgICAgICBzYXZlVmFsdWU9am9pblZhbHVlMjtcclxuICAgICAgICAgICAgfWVsc2UgaWYoam9pblZhbHVlMj09PScnJiZqb2luVmFsdWUxIT09Jycpe1xyXG4gICAgICAgICAgICAgICAgc2F2ZVZhbHVlPWpvaW5WYWx1ZTE7XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKGpvaW5WYWx1ZTEhPT0nJyYmam9pblZhbHVlMiE9PScnKXtcclxuICAgICAgICAgICAgICAgIHNhdmVWYWx1ZT1gJHtqb2luVmFsdWUxfSR7Y29uU3RyaW5nfSR7am9pblZhbHVlMn1gXHJcbiAgICAgICAgICAgIH1cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAgICAgICAgIC8v5paw6KaPL+abtOaWsC/kuIDopqfkv53lrZjmiJDlip/lvozjga7ku6XlpJbjga5ldmVudOOBp1BVVOS9v+eUqOOBl+OBquOBhO+8mlxyXG4gICAgICAgICAgICBpZiAoIWV2ZW50LnR5cGUuaW5jbHVkZXMoJ3N1Y2Nlc3MnKSl7XHJcbiAgICAgICAgICAgICAgICAgLy/kv53lrZjlhYjjg5XjgqPjg7zjg6vjg4njgavlgKTjgrvjg4Pjg4jvvJpcclxuICAgICAgICAgICAgICAgICByZWNvcmRbdGhpcy5wcm9wcy5zYXZlRmllbGQuY29kZV0udmFsdWU9c2F2ZVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgIHdpbmRvdy5hbGVydChcIuaWh+Wtl+e1kOWQiOihjOOBhOOBvuOBl+OBn+OAglwiK3RoaXMucHJvcHMuam9pbkZpZWxkMS5uYW1lK1wiOlwiK2pvaW5WYWx1ZTErXCIsXCIrdGhpcy5wcm9wcy5qb2luRmllbGQyLm5hbWUrXCI6XCIram9pblZhbHVlMitcIuOAglwiKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXM9e1xyXG4gICAgICAgICAgICAgICAgICAgIFwiYXBwXCI6ZXZlbnQuYXBwSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJpZFwiOmV2ZW50LnJlY29yZElkLFxyXG4gICAgICAgICAgICAgICAgICAgIFwicmVjb3JkXCI6e1t0aGlzLnByb3BzLnNhdmVGaWVsZC5jb2RlXTp7XCJ2YWx1ZVwiOnNhdmVWYWx1ZX19XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGtpbnRvbmUuYXBpKGtpbnRvbmUuYXBpLnVybCgnL2svdjEvcmVjb3JkJyx0cnVlKSwnUFVUJyxwYXJhbXMpLnRoZW4oKHJlc3ApID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvL2tpbnRvbmXkv53lrZjlhYjjg5XjgqPjg7zjg6vjg4nlrZjlnKjnorroqo3vvJpcclxuICAgICAgICAgICAgICAgICAgICByZWNvcmRbdGhpcy5wcm9wcy5zYXZlRmllbGQuY29kZV0udmFsdWU9c2F2ZVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC50eXBlLmluY2x1ZGVzKCdpbmRleCcpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmFsZXJ0KFwi5paH5a2X57WQ5ZCI6KGM44GE44G+44GX44Gf44CCXCIrdGhpcy5wcm9wcy5qb2luRmllbGQxLm5hbWUrXCI6XCIram9pblZhbHVlMStcIixcIit0aGlzLnByb3BzLmpvaW5GaWVsZDIubmFtZStcIjpcIitqb2luVmFsdWUyK1wi44CC5LiA6Kan55S76Z2i5pu05paw5oiQ5Yqf5b6M6Ieq5YuV44Oq44Ot44O844OJ44GX44G+44Gb44KT44CC5b+F6KaB44Gr5b+c44GY44Gm5omL5YuV44Oq44Ot44O844OJ44GP44Gg44GV44GE44CCXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWxlcnQoXCLmloflrZfntZDlkIjooYzjgYTjgb7jgZfjgZ/jgIJcIit0aGlzLnByb3BzLmpvaW5GaWVsZDEubmFtZStcIjpcIitqb2luVmFsdWUxK1wiLFwiK3RoaXMucHJvcHMuam9pbkZpZWxkMi5uYW1lK1wiOlwiK2pvaW5WYWx1ZTIrXCLjgIJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL+S4gOimp+eUu+mdouabtOaWsOaIkOWKn+W+jOODquODreODvOODie+8mlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIChldmVudC50eXBlLmluY2x1ZGVzKCdpbmRleCcpKXtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgZXZlbnQudXJsID0gbG9jYXRpb24uaHJlZi5lbmRzV2l0aCgnLycpIHx8IGxvY2F0aW9uLmhyZWYuZW5kc1dpdGgoJyYnKSA/XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIGxvY2F0aW9uLmhyZWYuc2xpY2UoMCwgLTEpIDpcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgbG9jYXRpb24uaHJlZiArIChsb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCc/JykgPyAnJicgOiAnLycpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmVycm9yID0gJ+OCqOODqeODvOOBjOeZuueUn+OBl+OBvuOBl+OBn+OAgue1kOWQiOOBl+OBvuOBm+OCk+OAguOCt+OCueODhuODoOeuoeeQhuiAheOBuOOBiuWVj+WQiOOBm+OBj+OBoOOBleOBhCc7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmFsZXJ0KGV2ZW50LmVycm9yK1wiZXJyb3IgbWVzc2FnZe+8mlwiK2Vycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAgICAgcmVzdWx0PSB7XHJcbiAgICAgICAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6dHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXs7XHJcbiAgICAgICAgICAgIGlmIChldmVudC50eXBlLmluY2x1ZGVzKCdzdWNjZXNzJykpe1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmFsZXJ0KFwiW3dpbmRvd3MgYWxlcnRd77ya5Yem55CG5Lit55Ww5bi444GM55m655Sf44GX44G+44GX44Gf44CC57WQ5ZCI44GX44G+44Gb44KT44CC44K344K544OG44Og5ouF5b2T6ICF44G444GK5ZWP5ZCI44Gb44GP44Gg44GV44GE44CCZXJyb3Ljg6Hjg4Pjgrvjg7zjgrjvvJpcIitlcnJvcilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBldmVudC5lcnJvcj1cIlvjgqjjg6njg7zjg6Hjg4Pjgrvjg7zjgrhd77ya5Yem55CG5Lit55Ww5bi444GM55m655Sf44GX44G+44GX44Gf44CC57WQ5ZCI44GX44G+44Gb44KT44CC44K344K544OG44Og5ouF5b2T6ICF44G444GK5ZWP5ZCI44Gb44GP44Gg44GV44GE44CCZXJyb3Ljg6Hjg4Pjgrvjg7zjgrjvvJpcIitlcnJvcjtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGNhbk5leHQ6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdPXRoaXM7XHJcbiAgICB9XHJcbn1cclxubmV3IFN0cmluZ0pvaW5BY3Rpb24oKTsiLCJpbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyAgSUFjdGlvbixJQWN0aW9uUmVzdWx0LCBJQWN0aW9uTm9kZSwgSUFjdGlvblByb3BlcnR5LCBJRmllbGQsIElDb250ZXh0IH0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcblxyXG4vL+OCr+ODqeOCueWQjeOCkuioreioiOabuOOBq+aPg+OBiOOCi1xyXG4vKipcclxuICog44Ki44Kv44K344On44Oz44Gu5bGe5oCn5a6a576pXHJcbiAqL1xyXG4gICAgaW50ZXJmYWNlIEZ1bGxXaWR0aFByb3Bze1xyXG4gICAgICAgIC8vY2hlY2tPcHRpb246QXJyYXk8c3RyaW5nPixcclxuICAgICAgICBmaWVsZDpJRmllbGRcclxuICAgIH1cclxuLyoqXHJcbiAqIOWFqOinkuODgeOCp+ODg+OCr+OCouOCr+OCt+ODp+ODs1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEZ1bGxXaWR0aEFjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb257XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgICBwcm9wczpGdWxsV2lkdGhQcm9wcztcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5uYW1lPVwi5YWo6KeS44OB44Kn44OD44KvXCI7IC8qIHBnYWRtaW7jga5uYW1l44Go5ZCM5qeYICAqL1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9W107XHJcbiAgICAgICAgdGhpcy5wcm9wcz17XHJcbiAgICAgICAgICAgIC8vY2hlY2tPcHRpb246W10sXHJcbiAgICAgICAgICAgIGZpZWxkOntjb2RlOicnfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvL+OCouOCr+OCt+ODp+ODs+OCkueZu+mMsuOBmeOCi1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICog44Ki44Kv44K344On44Oz44Gu5a6f6KGM44KS5ZG844Gz5Ye644GZXHJcbiAgICAgKiBAcGFyYW0gYWN0aW9uTm9kZVxyXG4gICAgICogQHBhcmFtIGV2ZW50XHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBhc3luYyBwcm9jZXNzKGFjdGlvbk5vZGU6SUFjdGlvbk5vZGUsZXZlbnQ6YW55LGNvbnRleHQ6SUNvbnRleHQpOlByb21pc2U8SUFjdGlvblJlc3VsdD4ge1xyXG4gICAgICAgIGxldCByZXN1bHQ9e1xyXG4gICAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICAgIHJlc3VsdDpmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAvL+WxnuaAp+ioreWumuOCkuWPluW+l+OBmeOCi1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvblByb3BzPWFjdGlvbk5vZGUuYWN0aW9uUHJvcHM7XHJcbiAgICAgICAgICAgIGlmICghKCdmaWVsZCcgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUgYXMgRnVsbFdpZHRoUHJvcHM7XHJcbiAgICAgICAgICAgIC8v5p2h5Lu25byP44Gu6KiI566X57WQ5p6c44KS5Y+W5b6XXHJcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IGV2ZW50LnJlY29yZDtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXT8udmFsdWU7XHJcbiAgICAgICAgICAgIC8v5p2h5Lu25YiG5bKQXHJcbiAgICAgICAgICAgIC8v5pyq5YWl5Yqb5pmC44Gv5L2V44KC5Yem55CG44KS44Gb44Ga57WC5LqGXHJcbiAgICAgICAgICAgIGlmKHZhbHVlPT09dW5kZWZpbmVkIHx8IHZhbHVlPT09Jycpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL+WNiuinkuOBjOWQq+OBvuOCjOOBpuOBhOOBn+WgtOWQiHJlc3VsdOOBjGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNvbnRhaW5zRnVsbFdpZHRoQ2hhcnModmFsdWUpKXtcclxuICAgICAgICAgICAgICAgIC8v44Ko44Op44O85pmC44Gr5Ye65Yqb44GV44KM44KL5paH5a2X6Kit5a6aXHJcbiAgICAgICAgICAgICAgICByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS5lcnJvcj1cIuWNiuinkuOBjOWQq+OBvuOCjOOBpuOBhOOBvuOBmVwiO1xyXG4gICAgICAgICAgICAgICAgLy/mrKHjga7lh6bnkIbjgpLkuK3mraLjgZnjgovlgKToqK3lrppcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5jYW5OZXh0PWZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3Jlc3VsdOODl+ODreODkeODhuOCo+aMh+WumlxyXG4gICAgICAgICAgICByZXN1bHQ9IHtcclxuICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6dHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcblxyXG4gICAgICAgIC8v5L6L5aSW5Yem55CGXHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXtcclxuICAgICAgICAgICAgZXZlbnQuZXJyb3I9ZXJyb3I7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICByZXN1bHQuY2FuTmV4dD1mYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyDlhajjgablhajop5Ljga7mloflrZfliJfjga7loLTlkIjjga90cnVl44CB44Gd44GG44Gn44Gq44GE5aC05ZCI44GvZmFsc2VcclxuICAgIGNvbnRhaW5zRnVsbFdpZHRoQ2hhcnModGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XHJcblxyXG4gICAgICAgIC8vIOWNiuinkuiLseaVsOWtl+OCq+ODiuiomOWPt+OCkumZpOWkllxyXG4gICAgICAgIGNvbnN0IGNoZWNrUmVnZXg9XCJeW15cXHgwMS1cXHg3RVxcdUZGNjEtXFx1RkY5Rl0rJFwiO1xyXG5cclxuICAgICAgICAvL+ato+imj+ihqOePvuOCquODluOCuOOCp+OCr+ODiOeUn+aIkFxyXG4gICAgICAgIGNvbnN0IGZ1bGxXaWR0aFJlZ2V4ID0gbmV3IFJlZ0V4cChjaGVja1JlZ2V4KTtcclxuXHJcbiAgICAgICAgLy/mraPopo/ooajnj77jg4Hjgqfjg4Pjgq9cclxuICAgICAgICByZXR1cm4gZnVsbFdpZHRoUmVnZXgudGVzdCh0ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICAvL+aIu+OCiuWApOOCkuaMgeOBn+OBquOBhOOBn+OCgXZvaWTlnotcclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdPXRoaXM7XHJcbiAgICB9XHJcbn1cclxubmV3IEZ1bGxXaWR0aEFjdGlvbigpOyIsImltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7ICBJQWN0aW9uLElBY3Rpb25SZXN1bHQsIElBY3Rpb25Ob2RlLCBJQWN0aW9uUHJvcGVydHksIElGaWVsZCwgSUNvbnRleHQgfSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuXHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbiAgICBpbnRlcmZhY2UgSGFsZldpZHRoUHJvcHN7XHJcbiAgICAgICAgZmllbGQ6SUZpZWxkXHJcbiAgICB9XHJcbi8qKlxyXG4gKiDljYrop5Ljg4Hjgqfjg4Pjgq/jgqLjgq/jgrfjg6fjg7NcclxuICovXHJcbmV4cG9ydCBjbGFzcyBIYWxmV2lkdGhBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9ue1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gICAgcHJvcHM6SGFsZldpZHRoUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMubmFtZT1cIuWNiuinkuODgeOCp+ODg+OCr1wiOyAvKiBwZ2FkbWlu44GubmFtZeOBqOWQjOanmCAgKi9cclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzPVtdO1xyXG4gICAgICAgIHRoaXMucHJvcHM9e1xyXG4gICAgICAgICAgICBmaWVsZDp7Y29kZTonJ31cclxuICAgICAgICB9XHJcbiAgICAgICAgLy/jgqLjgq/jgrfjg6fjg7PjgpLnmbvpjLLjgZnjgotcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGVcclxuICAgICAqIEBwYXJhbSBldmVudFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOklBY3Rpb25Ob2RlLGV2ZW50OmFueSxjb250ZXh0OklDb250ZXh0KTpQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgICAgICBsZXQgcmVzdWx0PXtcclxuICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgLy/lsZ7mgKfoqK3lrprjgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1hY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG4gICAgICAgICAgICBpZiAoISgnZmllbGQnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIEhhbGZXaWR0aFByb3BzO1xyXG4gICAgICAgICAgICAvL+adoeS7tuW8j+OBruioiOeul+e1kOaenOOCkuWPluW+l1xyXG4gICAgICAgICAgICBjb25zdCByZWNvcmQgPSBldmVudC5yZWNvcmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0/LnZhbHVlO1xyXG4gICAgICAgICAgICAvL+adoeS7tuWIhuWykFxyXG4gICAgICAgICAgICAvL+acquWFpeWKm+aZguOBr+S9leOCguWHpueQhuOCkuOBm+OBmue1guS6hlxyXG4gICAgICAgICAgICBpZih2YWx1ZT09PXVuZGVmaW5lZCB8fCB2YWx1ZT09PScnKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy/lhajop5LjgYzlkKvjgb7jgozjgabjgYTjgZ/loLTlkIjkv53lrZjlh6bnkIbkuK3mraIo44Ko44Op44O85Yem55CGKVxyXG4gICAgICAgICAgICBpZighdGhpcy5jb250YWluc0hhbGZXaWR0aENoYXJzKHZhbHVlKSl7XHJcbiAgICAgICAgICAgICAgICAvL+OCqOODqeODvOaZguOBq+WHuuWKm+OBleOCjOOCi+aWh+Wtl+ioreWumlxyXG4gICAgICAgICAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0uZXJyb3I9XCLlhajop5LjgYzlkKvjgb7jgozjgabjgYTjgb7jgZlcIjtcclxuICAgICAgICAgICAgICAgIC8v5qyh44Gu5Yem55CG44KS5Lit5q2i44GZ44KL5YCk6Kit5a6aXHJcbiAgICAgICAgICAgICAgICByZXN1bHQuY2FuTmV4dD1mYWxzZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy/ljYrop5Ljga7loLTlkIjllY/poYzjgarjgY/lrp/ooYxcclxuICAgICAgICAgICAgLy9yZXN1bHTjg5fjg63jg5Hjg4bjgqPmjIflrppcclxuICAgICAgICAgICAgcmVzdWx0PSB7XHJcbiAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OnRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIC8v5L6L5aSW5Yem55CGXHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXtcclxuICAgICAgICAgICAgZXZlbnQuZXJyb3I9ZXJyb3I7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICByZXN1bHQuY2FuTmV4dD1mYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyDlhajjgablhajop5Ljga7mloflrZfliJfjga7loLTlkIjjga90cnVl44CB44Gd44GG44Gn44Gq44GE5aC05ZCI44GvZmFsc2VcclxuICAgIGNvbnRhaW5zSGFsZldpZHRoQ2hhcnModGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XHJcblxyXG4gICAgICAgIGNvbnN0IGNoZWNrUmVnZXggPSBcIl5bXFx4MDEtXFx4N0VcXHVGRjYxLVxcdUZGOUZdKyRcIjtcclxuICAgICAgICAvL+ato+imj+ihqOePvuOCquODluOCuOOCp+OCr+ODiOeUn+aIkFxyXG4gICAgICAgIGNvbnN0IGhhbGZXaWR0aFJlZ2V4ID0gbmV3IFJlZ0V4cChjaGVja1JlZ2V4KTtcclxuXHJcbiAgICAgICAgLy/mraPopo/ooajnj77jg4Hjgqfjg4Pjgq9cclxuICAgICAgICByZXR1cm4gaGFsZldpZHRoUmVnZXgudGVzdCh0ZXh0KTtcclxuICAgIH1cclxuICAgIC8v5oi744KK5YCk44KS5oyB44Gf44Gq44GE44Gf44KBdm9pZOWei1xyXG4gICAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV09dGhpcztcclxuICAgIH1cclxufVxyXG5uZXcgSGFsZldpZHRoQWN0aW9uKCk7IiwiaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgSUZpZWxkLElBY3Rpb24sSUFjdGlvblJlc3VsdCwgSUFjdGlvbk5vZGUsIElBY3Rpb25Qcm9wZXJ0eSxJQ29udGV4dCxJVmFyTmFtZX0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbi8v5Y+zVUnnlLvpnaJwcm9wZXJ0eeOBrm5hbWU65Z6L77yaXHJcbmludGVyZmFjZSBJTG9naW5Vc2VyR2V0dGVyUHJvcHN7XHJcbiAgICAvL+WkieaVsOWQjeOBq+OCu+ODg+ODiO+8muWApOOBjOOCquODluOCuOOCp+OCr+ODiOOBruW9ouW8j1xyXG4gICAgdmVyTmFtZTpJVmFyTmFtZTtcclxufVxyXG4vL0lBY3Rpb27jgqTjg7Pjgr/jg5Xjgqfjg7zjgrnjgpLlrp/oo4XjgZnjgovmlrDjgZfjgYTjgq/jg6njgrlBY3Rpb27jgpLkvZzmiJDvvJpcclxuZXhwb3J0IGNsYXNzIExvZ2luVXNlckdldHRlckFjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb257XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICAvL2ltcG9ydOOBi+OCieWwjuWFpemhleekuuWumue+qVxyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gICAgLy/kuIrmlrnjga5pbnRlcmZhY2UgUHJvcHPjgYvjgonjgIFwcm9wc+WPl+OBkeOCi+WxnuaAp+OCkuWumue+qe+8mlxyXG4gICAgcHJvcHM6SUxvZ2luVXNlckdldHRlclByb3BzO1xyXG4gICAgLy/plqLmlbDlrprnvqnjgavlv4XopoHjgarpoZ7lkI3jgpLmp4vnr4nvvJpcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgLy9wZ0FkbWluRELjgavnmbvpjLLjgZfjgZ/jgqLjgq/jgrfjg6fjg7PlkI0obmFtZS9zdWJ0aXRsZSnkuIDoh7TjgZnjgovlv4XopoHjgYzjgYLjgovvvJpcclxuICAgICAgICB0aGlzLm5hbWU9XCLjg63jgrDjgqTjg7Pjg6bjg7zjgrbjg7zlj5blvpdcIjtcclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzPVtdO1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgICAgICAvL+ODl+ODreODkeODhuOCo+WxnuaAp+WIneacn+WMlu+8mlxyXG4gICAgICAgIHRoaXMucHJvcHM9e1xyXG4gICAgICAgICAgICB2ZXJOYW1lOntuYW1lOicnfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvL+ODquOCu+ODg+ODiOS4iuiomOeZu+mMsuihqO+8mlxyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgIH1cclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+OBruWHpueQhuOCkuWun+ijheOBmeOCi1xyXG4gKiBAcGFyYW0gYWN0aW9uTm9kZSDjgqLjgq/jgrfjg6fjg7Pjg47jg7zjg4lcclxuICogQHBhcmFtIGV2ZW50IEtpbnRvbmXjga7jgqTjg5njg7Pjg4hcclxuICogQHBhcmFtIGNvbnRleHQg44Kz44Oz44OG44Kt44K544OI77yI44Os44Kz44O844OJ44CB5aSJ5pWw5oOF5aCx44KS5oyB44Gj44Gm44GE44KL77yJXHJcbiAqIEByZXR1cm5zIFxyXG4gKi9cclxu44CA44CALy/pnZ7lkIzmnJ/lh6bnkIbjgYLjgovplqLmlbDkuIvjga7jgYLjgovlsZ7mgKfvvJpcclxuICAgIGFzeW5jIHByb2Nlc3MoYWN0aW9uTm9kZTpJQWN0aW9uTm9kZSxldmVudDphbnksY29udGV4dDpJQ29udGV4dCk6UHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdD17XHJcbiAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OmZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KL77yaXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9YWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgLy/jg5fjg63jg5Hjg4bjgqPoqK3lrprjga7jg4fjg7zjgr/lnovjga/lv4XopoHjgarmg4XloLHlkKvjgoHjgb7jgZnjgYvvvJ/lhajpg6jkuI3lrZjlnKjmmYJyZXR1cm46XHJcbiAgICAgICAgICAgIGlmICghKCd2ZXJOYW1lJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8v5pei5a6a44Gu44OX44Ot44OR44OG44Kj44Gu44Kk44Oz44K/44OV44Kn44O844K544G45aSJ5o+b77yaXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElMb2dpblVzZXJHZXR0ZXJQcm9wcztcclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAgICAgaWYodGhpcy5wcm9wcy52ZXJOYW1lJiZ0aGlzLnByb3BzLnZlck5hbWUubmFtZSE9PScnKXtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQudmFyaWFibGVzW3RoaXMucHJvcHMudmVyTmFtZS5uYW1lXT1raW50b25lLmdldExvZ2luVXNlcigpO1xyXG4gICAgICAgICAgICAgICAgLy8gd2luZG93LmFsZXJ0KFwi5aSJ5pWw5ZCNXCIrdGhpcy5wcm9wcy52ZXJOYW1lLm5hbWUrXCLjga7lgKTjga9cIitjb250ZXh0LnZhcmlhYmxlc1t0aGlzLnByb3BzLnZlck5hbWUubmFtZV0rXCLjgafjgZlcIik7XHJcbiAgICAgICAgICAgICAgICAvLyBldmVudC5yZWNvcmRbXCLlpInmlbDpgYvnlKjlhYjjga7jg6bjg7zjgrbpgbjmip7jg5XjgqPjg7zjg6vjg4lcIl0udmFsdWU9IFt7Y29kZTpjb250ZXh0LnZhcmlhYmxlc1t0aGlzLnByb3BzLnZlck5hbWUubmFtZV0uY29kZX1dO1xyXG4gICAgICAgICAgICB9XHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAgICAgICAgIHJlc3VsdD0ge1xyXG4gICAgICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OnRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgIH1jYXRjaChlcnJvcjphbnkpeztcclxuICAgICAgICAgICAgZXZlbnQuZXJyb3I9ZXJyb3IubWVzc2FnZTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGNhbk5leHQ6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdPXRoaXM7XHJcbiAgICB9XHJcbn1cclxubmV3IExvZ2luVXNlckdldHRlckFjdGlvbigpOyIsIi8qIVxuICAqIEJvb3RzdHJhcCBkYXRhLmpzIHY1LjMuMyAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDI0IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5EYXRhID0gZmFjdG9yeSgpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwIGRvbS9kYXRhLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICAvKipcbiAgICogQ29uc3RhbnRzXG4gICAqL1xuXG4gIGNvbnN0IGVsZW1lbnRNYXAgPSBuZXcgTWFwKCk7XG4gIGNvbnN0IGRhdGEgPSB7XG4gICAgc2V0KGVsZW1lbnQsIGtleSwgaW5zdGFuY2UpIHtcbiAgICAgIGlmICghZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgZWxlbWVudE1hcC5zZXQoZWxlbWVudCwgbmV3IE1hcCgpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGluc3RhbmNlTWFwID0gZWxlbWVudE1hcC5nZXQoZWxlbWVudCk7XG5cbiAgICAgIC8vIG1ha2UgaXQgY2xlYXIgd2Ugb25seSB3YW50IG9uZSBpbnN0YW5jZSBwZXIgZWxlbWVudFxuICAgICAgLy8gY2FuIGJlIHJlbW92ZWQgbGF0ZXIgd2hlbiBtdWx0aXBsZSBrZXkvaW5zdGFuY2VzIGFyZSBmaW5lIHRvIGJlIHVzZWRcbiAgICAgIGlmICghaW5zdGFuY2VNYXAuaGFzKGtleSkgJiYgaW5zdGFuY2VNYXAuc2l6ZSAhPT0gMCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKGBCb290c3RyYXAgZG9lc24ndCBhbGxvdyBtb3JlIHRoYW4gb25lIGluc3RhbmNlIHBlciBlbGVtZW50LiBCb3VuZCBpbnN0YW5jZTogJHtBcnJheS5mcm9tKGluc3RhbmNlTWFwLmtleXMoKSlbMF19LmApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpbnN0YW5jZU1hcC5zZXQoa2V5LCBpbnN0YW5jZSk7XG4gICAgfSxcbiAgICBnZXQoZWxlbWVudCwga2V5KSB7XG4gICAgICBpZiAoZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0KGVsZW1lbnQpLmdldChrZXkpIHx8IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHJlbW92ZShlbGVtZW50LCBrZXkpIHtcbiAgICAgIGlmICghZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5zdGFuY2VNYXAgPSBlbGVtZW50TWFwLmdldChlbGVtZW50KTtcbiAgICAgIGluc3RhbmNlTWFwLmRlbGV0ZShrZXkpO1xuXG4gICAgICAvLyBmcmVlIHVwIGVsZW1lbnQgcmVmZXJlbmNlcyBpZiB0aGVyZSBhcmUgbm8gaW5zdGFuY2VzIGxlZnQgZm9yIGFuIGVsZW1lbnRcbiAgICAgIGlmIChpbnN0YW5jZU1hcC5zaXplID09PSAwKSB7XG4gICAgICAgIGVsZW1lbnRNYXAuZGVsZXRlKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gZGF0YTtcblxufSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YS5qcy5tYXBcbiIsIi8qIVxuICAqIEJvb3RzdHJhcCBpbmRleC5qcyB2NS4zLjMgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyNCBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBmYWN0b3J5KGdsb2JhbC5JbmRleCA9IHt9KSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBCb290c3RyYXAgdXRpbC9pbmRleC5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgY29uc3QgTUFYX1VJRCA9IDEwMDAwMDA7XG4gIGNvbnN0IE1JTExJU0VDT05EU19NVUxUSVBMSUVSID0gMTAwMDtcbiAgY29uc3QgVFJBTlNJVElPTl9FTkQgPSAndHJhbnNpdGlvbmVuZCc7XG5cbiAgLyoqXG4gICAqIFByb3Blcmx5IGVzY2FwZSBJRHMgc2VsZWN0b3JzIHRvIGhhbmRsZSB3ZWlyZCBJRHNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBjb25zdCBwYXJzZVNlbGVjdG9yID0gc2VsZWN0b3IgPT4ge1xuICAgIGlmIChzZWxlY3RvciAmJiB3aW5kb3cuQ1NTICYmIHdpbmRvdy5DU1MuZXNjYXBlKSB7XG4gICAgICAvLyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yIG5lZWRzIGVzY2FwaW5nIHRvIGhhbmRsZSBJRHMgKGh0bWw1KykgY29udGFpbmluZyBmb3IgaW5zdGFuY2UgL1xuICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5yZXBsYWNlKC8jKFteXFxzXCIjJ10rKS9nLCAobWF0Y2gsIGlkKSA9PiBgIyR7Q1NTLmVzY2FwZShpZCl9YCk7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RvcjtcbiAgfTtcblxuICAvLyBTaG91dC1vdXQgQW5ndXMgQ3JvbGwgKGh0dHBzOi8vZ29vLmdsL3B4d1FHcClcbiAgY29uc3QgdG9UeXBlID0gb2JqZWN0ID0+IHtcbiAgICBpZiAob2JqZWN0ID09PSBudWxsIHx8IG9iamVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gYCR7b2JqZWN0fWA7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KS5tYXRjaCgvXFxzKFthLXpdKykvaSlbMV0udG9Mb3dlckNhc2UoKTtcbiAgfTtcblxuICAvKipcbiAgICogUHVibGljIFV0aWwgQVBJXG4gICAqL1xuXG4gIGNvbnN0IGdldFVJRCA9IHByZWZpeCA9PiB7XG4gICAgZG8ge1xuICAgICAgcHJlZml4ICs9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIE1BWF9VSUQpO1xuICAgIH0gd2hpbGUgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByZWZpeCkpO1xuICAgIHJldHVybiBwcmVmaXg7XG4gIH07XG4gIGNvbnN0IGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50ID0gZWxlbWVudCA9PiB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvLyBHZXQgdHJhbnNpdGlvbi1kdXJhdGlvbiBvZiB0aGUgZWxlbWVudFxuICAgIGxldCB7XG4gICAgICB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgICB0cmFuc2l0aW9uRGVsYXlcbiAgICB9ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gICAgY29uc3QgZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24gPSBOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pO1xuICAgIGNvbnN0IGZsb2F0VHJhbnNpdGlvbkRlbGF5ID0gTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkRlbGF5KTtcblxuICAgIC8vIFJldHVybiAwIGlmIGVsZW1lbnQgb3IgdHJhbnNpdGlvbiBkdXJhdGlvbiBpcyBub3QgZm91bmRcbiAgICBpZiAoIWZsb2F0VHJhbnNpdGlvbkR1cmF0aW9uICYmICFmbG9hdFRyYW5zaXRpb25EZWxheSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLy8gSWYgbXVsdGlwbGUgZHVyYXRpb25zIGFyZSBkZWZpbmVkLCB0YWtlIHRoZSBmaXJzdFxuICAgIHRyYW5zaXRpb25EdXJhdGlvbiA9IHRyYW5zaXRpb25EdXJhdGlvbi5zcGxpdCgnLCcpWzBdO1xuICAgIHRyYW5zaXRpb25EZWxheSA9IHRyYW5zaXRpb25EZWxheS5zcGxpdCgnLCcpWzBdO1xuICAgIHJldHVybiAoTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkR1cmF0aW9uKSArIE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EZWxheSkpICogTUlMTElTRUNPTkRTX01VTFRJUExJRVI7XG4gIH07XG4gIGNvbnN0IHRyaWdnZXJUcmFuc2l0aW9uRW5kID0gZWxlbWVudCA9PiB7XG4gICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChUUkFOU0lUSU9OX0VORCkpO1xuICB9O1xuICBjb25zdCBpc0VsZW1lbnQgPSBvYmplY3QgPT4ge1xuICAgIGlmICghb2JqZWN0IHx8IHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqZWN0LmpxdWVyeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG9iamVjdCA9IG9iamVjdFswXTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3Qubm9kZVR5cGUgIT09ICd1bmRlZmluZWQnO1xuICB9O1xuICBjb25zdCBnZXRFbGVtZW50ID0gb2JqZWN0ID0+IHtcbiAgICAvLyBpdCdzIGEgalF1ZXJ5IG9iamVjdCBvciBhIG5vZGUgZWxlbWVudFxuICAgIGlmIChpc0VsZW1lbnQob2JqZWN0KSkge1xuICAgICAgcmV0dXJuIG9iamVjdC5qcXVlcnkgPyBvYmplY3RbMF0gOiBvYmplY3Q7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJyAmJiBvYmplY3QubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocGFyc2VTZWxlY3RvcihvYmplY3QpKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIGNvbnN0IGlzVmlzaWJsZSA9IGVsZW1lbnQgPT4ge1xuICAgIGlmICghaXNFbGVtZW50KGVsZW1lbnQpIHx8IGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudElzVmlzaWJsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZSgndmlzaWJpbGl0eScpID09PSAndmlzaWJsZSc7XG4gICAgLy8gSGFuZGxlIGBkZXRhaWxzYCBlbGVtZW50IGFzIGl0cyBjb250ZW50IG1heSBmYWxzaWUgYXBwZWFyIHZpc2libGUgd2hlbiBpdCBpcyBjbG9zZWRcbiAgICBjb25zdCBjbG9zZWREZXRhaWxzID0gZWxlbWVudC5jbG9zZXN0KCdkZXRhaWxzOm5vdChbb3Blbl0pJyk7XG4gICAgaWYgKCFjbG9zZWREZXRhaWxzKSB7XG4gICAgICByZXR1cm4gZWxlbWVudElzVmlzaWJsZTtcbiAgICB9XG4gICAgaWYgKGNsb3NlZERldGFpbHMgIT09IGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHN1bW1hcnkgPSBlbGVtZW50LmNsb3Nlc3QoJ3N1bW1hcnknKTtcbiAgICAgIGlmIChzdW1tYXJ5ICYmIHN1bW1hcnkucGFyZW50Tm9kZSAhPT0gY2xvc2VkRGV0YWlscykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoc3VtbWFyeSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50SXNWaXNpYmxlO1xuICB9O1xuICBjb25zdCBpc0Rpc2FibGVkID0gZWxlbWVudCA9PiB7XG4gICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50LmRpc2FibGVkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGVsZW1lbnQuZGlzYWJsZWQ7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKSAhPT0gJ2ZhbHNlJztcbiAgfTtcbiAgY29uc3QgZmluZFNoYWRvd1Jvb3QgPSBlbGVtZW50ID0+IHtcbiAgICBpZiAoIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hdHRhY2hTaGFkb3cpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIENhbiBmaW5kIHRoZSBzaGFkb3cgcm9vdCBvdGhlcndpc2UgaXQnbGwgcmV0dXJuIHRoZSBkb2N1bWVudFxuICAgIGlmICh0eXBlb2YgZWxlbWVudC5nZXRSb290Tm9kZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3Qgcm9vdCA9IGVsZW1lbnQuZ2V0Um9vdE5vZGUoKTtcbiAgICAgIHJldHVybiByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBudWxsO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIC8vIHdoZW4gd2UgZG9uJ3QgZmluZCBhIHNoYWRvdyByb290XG4gICAgaWYgKCFlbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZmluZFNoYWRvd1Jvb3QoZWxlbWVudC5wYXJlbnROb2RlKTtcbiAgfTtcbiAgY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG4gIC8qKlxuICAgKiBUcmljayB0byByZXN0YXJ0IGFuIGVsZW1lbnQncyBhbmltYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICAgKiBAcmV0dXJuIHZvaWRcbiAgICpcbiAgICogQHNlZSBodHRwczovL3d3dy5jaGFyaXN0aGVvLmlvL2Jsb2cvMjAyMS8wMi9yZXN0YXJ0LWEtY3NzLWFuaW1hdGlvbi13aXRoLWphdmFzY3JpcHQvI3Jlc3RhcnRpbmctYS1jc3MtYW5pbWF0aW9uXG4gICAqL1xuICBjb25zdCByZWZsb3cgPSBlbGVtZW50ID0+IHtcbiAgICBlbGVtZW50Lm9mZnNldEhlaWdodDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgfTtcbiAgY29uc3QgZ2V0alF1ZXJ5ID0gKCkgPT4ge1xuICAgIGlmICh3aW5kb3cualF1ZXJ5ICYmICFkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgnZGF0YS1icy1uby1qcXVlcnknKSkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5qUXVlcnk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuICBjb25zdCBET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzID0gW107XG4gIGNvbnN0IG9uRE9NQ29udGVudExvYWRlZCA9IGNhbGxiYWNrID0+IHtcbiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgICAvLyBhZGQgbGlzdGVuZXIgb24gdGhlIGZpcnN0IGNhbGwgd2hlbiB0aGUgZG9jdW1lbnQgaXMgaW4gbG9hZGluZyBzdGF0ZVxuICAgICAgaWYgKCFET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzLmxlbmd0aCkge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgRE9NQ29udGVudExvYWRlZENhbGxiYWNrcykge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgRE9NQ29udGVudExvYWRlZENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGlzUlRMID0gKCkgPT4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRpciA9PT0gJ3J0bCc7XG4gIGNvbnN0IGRlZmluZUpRdWVyeVBsdWdpbiA9IHBsdWdpbiA9PiB7XG4gICAgb25ET01Db250ZW50TG9hZGVkKCgpID0+IHtcbiAgICAgIGNvbnN0ICQgPSBnZXRqUXVlcnkoKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKCQpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHBsdWdpbi5OQU1FO1xuICAgICAgICBjb25zdCBKUVVFUllfTk9fQ09ORkxJQ1QgPSAkLmZuW25hbWVdO1xuICAgICAgICAkLmZuW25hbWVdID0gcGx1Z2luLmpRdWVyeUludGVyZmFjZTtcbiAgICAgICAgJC5mbltuYW1lXS5Db25zdHJ1Y3RvciA9IHBsdWdpbjtcbiAgICAgICAgJC5mbltuYW1lXS5ub0NvbmZsaWN0ID0gKCkgPT4ge1xuICAgICAgICAgICQuZm5bbmFtZV0gPSBKUVVFUllfTk9fQ09ORkxJQ1Q7XG4gICAgICAgICAgcmV0dXJuIHBsdWdpbi5qUXVlcnlJbnRlcmZhY2U7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGV4ZWN1dGUgPSAocG9zc2libGVDYWxsYmFjaywgYXJncyA9IFtdLCBkZWZhdWx0VmFsdWUgPSBwb3NzaWJsZUNhbGxiYWNrKSA9PiB7XG4gICAgcmV0dXJuIHR5cGVvZiBwb3NzaWJsZUNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gcG9zc2libGVDYWxsYmFjayguLi5hcmdzKSA6IGRlZmF1bHRWYWx1ZTtcbiAgfTtcbiAgY29uc3QgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbiA9IChjYWxsYmFjaywgdHJhbnNpdGlvbkVsZW1lbnQsIHdhaXRGb3JUcmFuc2l0aW9uID0gdHJ1ZSkgPT4ge1xuICAgIGlmICghd2FpdEZvclRyYW5zaXRpb24pIHtcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkdXJhdGlvblBhZGRpbmcgPSA1O1xuICAgIGNvbnN0IGVtdWxhdGVkRHVyYXRpb24gPSBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0cmFuc2l0aW9uRWxlbWVudCkgKyBkdXJhdGlvblBhZGRpbmc7XG4gICAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGhhbmRsZXIgPSAoe1xuICAgICAgdGFyZ2V0XG4gICAgfSkgPT4ge1xuICAgICAgaWYgKHRhcmdldCAhPT0gdHJhbnNpdGlvbkVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgIHRyYW5zaXRpb25FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoVFJBTlNJVElPTl9FTkQsIGhhbmRsZXIpO1xuICAgICAgZXhlY3V0ZShjYWxsYmFjayk7XG4gICAgfTtcbiAgICB0cmFuc2l0aW9uRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFRSQU5TSVRJT05fRU5ELCBoYW5kbGVyKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgIHRyaWdnZXJUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25FbGVtZW50KTtcbiAgICAgIH1cbiAgICB9LCBlbXVsYXRlZER1cmF0aW9uKTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBwcmV2aW91cy9uZXh0IGVsZW1lbnQgb2YgYSBsaXN0LlxuICAgKlxuICAgKiBAcGFyYW0ge2FycmF5fSBsaXN0ICAgIFRoZSBsaXN0IG9mIGVsZW1lbnRzXG4gICAqIEBwYXJhbSBhY3RpdmVFbGVtZW50ICAgVGhlIGFjdGl2ZSBlbGVtZW50XG4gICAqIEBwYXJhbSBzaG91bGRHZXROZXh0ICAgQ2hvb3NlIHRvIGdldCBuZXh0IG9yIHByZXZpb3VzIGVsZW1lbnRcbiAgICogQHBhcmFtIGlzQ3ljbGVBbGxvd2VkXG4gICAqIEByZXR1cm4ge0VsZW1lbnR8ZWxlbX0gVGhlIHByb3BlciBlbGVtZW50XG4gICAqL1xuICBjb25zdCBnZXROZXh0QWN0aXZlRWxlbWVudCA9IChsaXN0LCBhY3RpdmVFbGVtZW50LCBzaG91bGRHZXROZXh0LCBpc0N5Y2xlQWxsb3dlZCkgPT4ge1xuICAgIGNvbnN0IGxpc3RMZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgICBsZXQgaW5kZXggPSBsaXN0LmluZGV4T2YoYWN0aXZlRWxlbWVudCk7XG5cbiAgICAvLyBpZiB0aGUgZWxlbWVudCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbGlzdCByZXR1cm4gYW4gZWxlbWVudFxuICAgIC8vIGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uIGFuZCBpZiBjeWNsZSBpcyBhbGxvd2VkXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuICFzaG91bGRHZXROZXh0ICYmIGlzQ3ljbGVBbGxvd2VkID8gbGlzdFtsaXN0TGVuZ3RoIC0gMV0gOiBsaXN0WzBdO1xuICAgIH1cbiAgICBpbmRleCArPSBzaG91bGRHZXROZXh0ID8gMSA6IC0xO1xuICAgIGlmIChpc0N5Y2xlQWxsb3dlZCkge1xuICAgICAgaW5kZXggPSAoaW5kZXggKyBsaXN0TGVuZ3RoKSAlIGxpc3RMZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiBsaXN0W01hdGgubWF4KDAsIE1hdGgubWluKGluZGV4LCBsaXN0TGVuZ3RoIC0gMSkpXTtcbiAgfTtcblxuICBleHBvcnRzLmRlZmluZUpRdWVyeVBsdWdpbiA9IGRlZmluZUpRdWVyeVBsdWdpbjtcbiAgZXhwb3J0cy5leGVjdXRlID0gZXhlY3V0ZTtcbiAgZXhwb3J0cy5leGVjdXRlQWZ0ZXJUcmFuc2l0aW9uID0gZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbjtcbiAgZXhwb3J0cy5maW5kU2hhZG93Um9vdCA9IGZpbmRTaGFkb3dSb290O1xuICBleHBvcnRzLmdldEVsZW1lbnQgPSBnZXRFbGVtZW50O1xuICBleHBvcnRzLmdldE5leHRBY3RpdmVFbGVtZW50ID0gZ2V0TmV4dEFjdGl2ZUVsZW1lbnQ7XG4gIGV4cG9ydHMuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQgPSBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudDtcbiAgZXhwb3J0cy5nZXRVSUQgPSBnZXRVSUQ7XG4gIGV4cG9ydHMuZ2V0alF1ZXJ5ID0gZ2V0alF1ZXJ5O1xuICBleHBvcnRzLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICBleHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbiAgZXhwb3J0cy5pc1JUTCA9IGlzUlRMO1xuICBleHBvcnRzLmlzVmlzaWJsZSA9IGlzVmlzaWJsZTtcbiAgZXhwb3J0cy5ub29wID0gbm9vcDtcbiAgZXhwb3J0cy5vbkRPTUNvbnRlbnRMb2FkZWQgPSBvbkRPTUNvbnRlbnRMb2FkZWQ7XG4gIGV4cG9ydHMucGFyc2VTZWxlY3RvciA9IHBhcnNlU2VsZWN0b3I7XG4gIGV4cG9ydHMucmVmbG93ID0gcmVmbG93O1xuICBleHBvcnRzLnRvVHlwZSA9IHRvVHlwZTtcbiAgZXhwb3J0cy50cmlnZ2VyVHJhbnNpdGlvbkVuZCA9IHRyaWdnZXJUcmFuc2l0aW9uRW5kO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXG59KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsIi8qIVxuICAqIEJvb3RzdHJhcCBldmVudC1oYW5kbGVyLmpzIHY1LjMuMyAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDI0IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnLi4vdXRpbC9pbmRleC5qcycpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL3V0aWwvaW5kZXgnXSwgZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBnbG9iYWwuRXZlbnRIYW5kbGVyID0gZmFjdG9yeShnbG9iYWwuSW5kZXgpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoaW5kZXhfanMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBCb290c3RyYXAgZG9tL2V2ZW50LWhhbmRsZXIuanNcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgLyoqXG4gICAqIENvbnN0YW50c1xuICAgKi9cblxuICBjb25zdCBuYW1lc3BhY2VSZWdleCA9IC9bXi5dKig/PVxcLi4qKVxcLnwuKi87XG4gIGNvbnN0IHN0cmlwTmFtZVJlZ2V4ID0gL1xcLi4qLztcbiAgY29uc3Qgc3RyaXBVaWRSZWdleCA9IC86OlxcZCskLztcbiAgY29uc3QgZXZlbnRSZWdpc3RyeSA9IHt9OyAvLyBFdmVudHMgc3RvcmFnZVxuICBsZXQgdWlkRXZlbnQgPSAxO1xuICBjb25zdCBjdXN0b21FdmVudHMgPSB7XG4gICAgbW91c2VlbnRlcjogJ21vdXNlb3ZlcicsXG4gICAgbW91c2VsZWF2ZTogJ21vdXNlb3V0J1xuICB9O1xuICBjb25zdCBuYXRpdmVFdmVudHMgPSBuZXcgU2V0KFsnY2xpY2snLCAnZGJsY2xpY2snLCAnbW91c2V1cCcsICdtb3VzZWRvd24nLCAnY29udGV4dG1lbnUnLCAnbW91c2V3aGVlbCcsICdET01Nb3VzZVNjcm9sbCcsICdtb3VzZW92ZXInLCAnbW91c2VvdXQnLCAnbW91c2Vtb3ZlJywgJ3NlbGVjdHN0YXJ0JywgJ3NlbGVjdGVuZCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ29yaWVudGF0aW9uY2hhbmdlJywgJ3RvdWNoc3RhcnQnLCAndG91Y2htb3ZlJywgJ3RvdWNoZW5kJywgJ3RvdWNoY2FuY2VsJywgJ3BvaW50ZXJkb3duJywgJ3BvaW50ZXJtb3ZlJywgJ3BvaW50ZXJ1cCcsICdwb2ludGVybGVhdmUnLCAncG9pbnRlcmNhbmNlbCcsICdnZXN0dXJlc3RhcnQnLCAnZ2VzdHVyZWNoYW5nZScsICdnZXN0dXJlZW5kJywgJ2ZvY3VzJywgJ2JsdXInLCAnY2hhbmdlJywgJ3Jlc2V0JywgJ3NlbGVjdCcsICdzdWJtaXQnLCAnZm9jdXNpbicsICdmb2N1c291dCcsICdsb2FkJywgJ3VubG9hZCcsICdiZWZvcmV1bmxvYWQnLCAncmVzaXplJywgJ21vdmUnLCAnRE9NQ29udGVudExvYWRlZCcsICdyZWFkeXN0YXRlY2hhbmdlJywgJ2Vycm9yJywgJ2Fib3J0JywgJ3Njcm9sbCddKTtcblxuICAvKipcbiAgICogUHJpdmF0ZSBtZXRob2RzXG4gICAqL1xuXG4gIGZ1bmN0aW9uIG1ha2VFdmVudFVpZChlbGVtZW50LCB1aWQpIHtcbiAgICByZXR1cm4gdWlkICYmIGAke3VpZH06OiR7dWlkRXZlbnQrK31gIHx8IGVsZW1lbnQudWlkRXZlbnQgfHwgdWlkRXZlbnQrKztcbiAgfVxuICBmdW5jdGlvbiBnZXRFbGVtZW50RXZlbnRzKGVsZW1lbnQpIHtcbiAgICBjb25zdCB1aWQgPSBtYWtlRXZlbnRVaWQoZWxlbWVudCk7XG4gICAgZWxlbWVudC51aWRFdmVudCA9IHVpZDtcbiAgICBldmVudFJlZ2lzdHJ5W3VpZF0gPSBldmVudFJlZ2lzdHJ5W3VpZF0gfHwge307XG4gICAgcmV0dXJuIGV2ZW50UmVnaXN0cnlbdWlkXTtcbiAgfVxuICBmdW5jdGlvbiBib290c3RyYXBIYW5kbGVyKGVsZW1lbnQsIGZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcbiAgICAgIGh5ZHJhdGVPYmooZXZlbnQsIHtcbiAgICAgICAgZGVsZWdhdGVUYXJnZXQ6IGVsZW1lbnRcbiAgICAgIH0pO1xuICAgICAgaWYgKGhhbmRsZXIub25lT2ZmKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgZXZlbnQudHlwZSwgZm4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZuLmFwcGx5KGVsZW1lbnQsIFtldmVudF0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gYm9vdHN0cmFwRGVsZWdhdGlvbkhhbmRsZXIoZWxlbWVudCwgc2VsZWN0b3IsIGZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcbiAgICAgIGNvbnN0IGRvbUVsZW1lbnRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgICAgIGZvciAobGV0IHtcbiAgICAgICAgdGFyZ2V0XG4gICAgICB9ID0gZXZlbnQ7IHRhcmdldCAmJiB0YXJnZXQgIT09IHRoaXM7IHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlKSB7XG4gICAgICAgIGZvciAoY29uc3QgZG9tRWxlbWVudCBvZiBkb21FbGVtZW50cykge1xuICAgICAgICAgIGlmIChkb21FbGVtZW50ICE9PSB0YXJnZXQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBoeWRyYXRlT2JqKGV2ZW50LCB7XG4gICAgICAgICAgICBkZWxlZ2F0ZVRhcmdldDogdGFyZ2V0XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGhhbmRsZXIub25lT2ZmKSB7XG4gICAgICAgICAgICBFdmVudEhhbmRsZXIub2ZmKGVsZW1lbnQsIGV2ZW50LnR5cGUsIHNlbGVjdG9yLCBmbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0YXJnZXQsIFtldmVudF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBmaW5kSGFuZGxlcihldmVudHMsIGNhbGxhYmxlLCBkZWxlZ2F0aW9uU2VsZWN0b3IgPSBudWxsKSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZXZlbnRzKS5maW5kKGV2ZW50ID0+IGV2ZW50LmNhbGxhYmxlID09PSBjYWxsYWJsZSAmJiBldmVudC5kZWxlZ2F0aW9uU2VsZWN0b3IgPT09IGRlbGVnYXRpb25TZWxlY3Rvcik7XG4gIH1cbiAgZnVuY3Rpb24gbm9ybWFsaXplUGFyYW1ldGVycyhvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gICAgY29uc3QgaXNEZWxlZ2F0ZWQgPSB0eXBlb2YgaGFuZGxlciA9PT0gJ3N0cmluZyc7XG4gICAgLy8gVE9ETzogdG9vbHRpcCBwYXNzZXMgYGZhbHNlYCBpbnN0ZWFkIG9mIHNlbGVjdG9yLCBzbyB3ZSBuZWVkIHRvIGNoZWNrXG4gICAgY29uc3QgY2FsbGFibGUgPSBpc0RlbGVnYXRlZCA/IGRlbGVnYXRpb25GdW5jdGlvbiA6IGhhbmRsZXIgfHwgZGVsZWdhdGlvbkZ1bmN0aW9uO1xuICAgIGxldCB0eXBlRXZlbnQgPSBnZXRUeXBlRXZlbnQob3JpZ2luYWxUeXBlRXZlbnQpO1xuICAgIGlmICghbmF0aXZlRXZlbnRzLmhhcyh0eXBlRXZlbnQpKSB7XG4gICAgICB0eXBlRXZlbnQgPSBvcmlnaW5hbFR5cGVFdmVudDtcbiAgICB9XG4gICAgcmV0dXJuIFtpc0RlbGVnYXRlZCwgY2FsbGFibGUsIHR5cGVFdmVudF07XG4gIH1cbiAgZnVuY3Rpb24gYWRkSGFuZGxlcihlbGVtZW50LCBvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCBvbmVPZmYpIHtcbiAgICBpZiAodHlwZW9mIG9yaWdpbmFsVHlwZUV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgW2lzRGVsZWdhdGVkLCBjYWxsYWJsZSwgdHlwZUV2ZW50XSA9IG5vcm1hbGl6ZVBhcmFtZXRlcnMob3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbik7XG5cbiAgICAvLyBpbiBjYXNlIG9mIG1vdXNlZW50ZXIgb3IgbW91c2VsZWF2ZSB3cmFwIHRoZSBoYW5kbGVyIHdpdGhpbiBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGZvciBpdHMgRE9NIHBvc2l0aW9uXG4gICAgLy8gdGhpcyBwcmV2ZW50cyB0aGUgaGFuZGxlciBmcm9tIGJlaW5nIGRpc3BhdGNoZWQgdGhlIHNhbWUgd2F5IGFzIG1vdXNlb3ZlciBvciBtb3VzZW91dCBkb2VzXG4gICAgaWYgKG9yaWdpbmFsVHlwZUV2ZW50IGluIGN1c3RvbUV2ZW50cykge1xuICAgICAgY29uc3Qgd3JhcEZ1bmN0aW9uID0gZm4gPT4ge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgaWYgKCFldmVudC5yZWxhdGVkVGFyZ2V0IHx8IGV2ZW50LnJlbGF0ZWRUYXJnZXQgIT09IGV2ZW50LmRlbGVnYXRlVGFyZ2V0ICYmICFldmVudC5kZWxlZ2F0ZVRhcmdldC5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjYWxsYWJsZSA9IHdyYXBGdW5jdGlvbihjYWxsYWJsZSk7XG4gICAgfVxuICAgIGNvbnN0IGV2ZW50cyA9IGdldEVsZW1lbnRFdmVudHMoZWxlbWVudCk7XG4gICAgY29uc3QgaGFuZGxlcnMgPSBldmVudHNbdHlwZUV2ZW50XSB8fCAoZXZlbnRzW3R5cGVFdmVudF0gPSB7fSk7XG4gICAgY29uc3QgcHJldmlvdXNGdW5jdGlvbiA9IGZpbmRIYW5kbGVyKGhhbmRsZXJzLCBjYWxsYWJsZSwgaXNEZWxlZ2F0ZWQgPyBoYW5kbGVyIDogbnVsbCk7XG4gICAgaWYgKHByZXZpb3VzRnVuY3Rpb24pIHtcbiAgICAgIHByZXZpb3VzRnVuY3Rpb24ub25lT2ZmID0gcHJldmlvdXNGdW5jdGlvbi5vbmVPZmYgJiYgb25lT2ZmO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1aWQgPSBtYWtlRXZlbnRVaWQoY2FsbGFibGUsIG9yaWdpbmFsVHlwZUV2ZW50LnJlcGxhY2UobmFtZXNwYWNlUmVnZXgsICcnKSk7XG4gICAgY29uc3QgZm4gPSBpc0RlbGVnYXRlZCA/IGJvb3RzdHJhcERlbGVnYXRpb25IYW5kbGVyKGVsZW1lbnQsIGhhbmRsZXIsIGNhbGxhYmxlKSA6IGJvb3RzdHJhcEhhbmRsZXIoZWxlbWVudCwgY2FsbGFibGUpO1xuICAgIGZuLmRlbGVnYXRpb25TZWxlY3RvciA9IGlzRGVsZWdhdGVkID8gaGFuZGxlciA6IG51bGw7XG4gICAgZm4uY2FsbGFibGUgPSBjYWxsYWJsZTtcbiAgICBmbi5vbmVPZmYgPSBvbmVPZmY7XG4gICAgZm4udWlkRXZlbnQgPSB1aWQ7XG4gICAgaGFuZGxlcnNbdWlkXSA9IGZuO1xuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlRXZlbnQsIGZuLCBpc0RlbGVnYXRlZCk7XG4gIH1cbiAgZnVuY3Rpb24gcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvblNlbGVjdG9yKSB7XG4gICAgY29uc3QgZm4gPSBmaW5kSGFuZGxlcihldmVudHNbdHlwZUV2ZW50XSwgaGFuZGxlciwgZGVsZWdhdGlvblNlbGVjdG9yKTtcbiAgICBpZiAoIWZuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlRXZlbnQsIGZuLCBCb29sZWFuKGRlbGVnYXRpb25TZWxlY3RvcikpO1xuICAgIGRlbGV0ZSBldmVudHNbdHlwZUV2ZW50XVtmbi51aWRFdmVudF07XG4gIH1cbiAgZnVuY3Rpb24gcmVtb3ZlTmFtZXNwYWNlZEhhbmRsZXJzKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBuYW1lc3BhY2UpIHtcbiAgICBjb25zdCBzdG9yZUVsZW1lbnRFdmVudCA9IGV2ZW50c1t0eXBlRXZlbnRdIHx8IHt9O1xuICAgIGZvciAoY29uc3QgW2hhbmRsZXJLZXksIGV2ZW50XSBvZiBPYmplY3QuZW50cmllcyhzdG9yZUVsZW1lbnRFdmVudCkpIHtcbiAgICAgIGlmIChoYW5kbGVyS2V5LmluY2x1ZGVzKG5hbWVzcGFjZSkpIHtcbiAgICAgICAgcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgZXZlbnQuY2FsbGFibGUsIGV2ZW50LmRlbGVnYXRpb25TZWxlY3Rvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGdldFR5cGVFdmVudChldmVudCkge1xuICAgIC8vIGFsbG93IHRvIGdldCB0aGUgbmF0aXZlIGV2ZW50cyBmcm9tIG5hbWVzcGFjZWQgZXZlbnRzICgnY2xpY2suYnMuYnV0dG9uJyAtLT4gJ2NsaWNrJylcbiAgICBldmVudCA9IGV2ZW50LnJlcGxhY2Uoc3RyaXBOYW1lUmVnZXgsICcnKTtcbiAgICByZXR1cm4gY3VzdG9tRXZlbnRzW2V2ZW50XSB8fCBldmVudDtcbiAgfVxuICBjb25zdCBFdmVudEhhbmRsZXIgPSB7XG4gICAgb24oZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbikge1xuICAgICAgYWRkSGFuZGxlcihlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCBmYWxzZSk7XG4gICAgfSxcbiAgICBvbmUoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbikge1xuICAgICAgYWRkSGFuZGxlcihlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCB0cnVlKTtcbiAgICB9LFxuICAgIG9mZihlbGVtZW50LCBvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gICAgICBpZiAodHlwZW9mIG9yaWdpbmFsVHlwZUV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBbaXNEZWxlZ2F0ZWQsIGNhbGxhYmxlLCB0eXBlRXZlbnRdID0gbm9ybWFsaXplUGFyYW1ldGVycyhvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKTtcbiAgICAgIGNvbnN0IGluTmFtZXNwYWNlID0gdHlwZUV2ZW50ICE9PSBvcmlnaW5hbFR5cGVFdmVudDtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IGdldEVsZW1lbnRFdmVudHMoZWxlbWVudCk7XG4gICAgICBjb25zdCBzdG9yZUVsZW1lbnRFdmVudCA9IGV2ZW50c1t0eXBlRXZlbnRdIHx8IHt9O1xuICAgICAgY29uc3QgaXNOYW1lc3BhY2UgPSBvcmlnaW5hbFR5cGVFdmVudC5zdGFydHNXaXRoKCcuJyk7XG4gICAgICBpZiAodHlwZW9mIGNhbGxhYmxlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAvLyBTaW1wbGVzdCBjYXNlOiBoYW5kbGVyIGlzIHBhc3NlZCwgcmVtb3ZlIHRoYXQgbGlzdGVuZXIgT05MWS5cbiAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhzdG9yZUVsZW1lbnRFdmVudCkubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGNhbGxhYmxlLCBpc0RlbGVnYXRlZCA/IGhhbmRsZXIgOiBudWxsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGlzTmFtZXNwYWNlKSB7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudEV2ZW50IG9mIE9iamVjdC5rZXlzKGV2ZW50cykpIHtcbiAgICAgICAgICByZW1vdmVOYW1lc3BhY2VkSGFuZGxlcnMoZWxlbWVudCwgZXZlbnRzLCBlbGVtZW50RXZlbnQsIG9yaWdpbmFsVHlwZUV2ZW50LnNsaWNlKDEpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBba2V5SGFuZGxlcnMsIGV2ZW50XSBvZiBPYmplY3QuZW50cmllcyhzdG9yZUVsZW1lbnRFdmVudCkpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlcktleSA9IGtleUhhbmRsZXJzLnJlcGxhY2Uoc3RyaXBVaWRSZWdleCwgJycpO1xuICAgICAgICBpZiAoIWluTmFtZXNwYWNlIHx8IG9yaWdpbmFsVHlwZUV2ZW50LmluY2x1ZGVzKGhhbmRsZXJLZXkpKSB7XG4gICAgICAgICAgcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgZXZlbnQuY2FsbGFibGUsIGV2ZW50LmRlbGVnYXRpb25TZWxlY3Rvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHRyaWdnZXIoZWxlbWVudCwgZXZlbnQsIGFyZ3MpIHtcbiAgICAgIGlmICh0eXBlb2YgZXZlbnQgIT09ICdzdHJpbmcnIHx8ICFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgJCA9IGluZGV4X2pzLmdldGpRdWVyeSgpO1xuICAgICAgY29uc3QgdHlwZUV2ZW50ID0gZ2V0VHlwZUV2ZW50KGV2ZW50KTtcbiAgICAgIGNvbnN0IGluTmFtZXNwYWNlID0gZXZlbnQgIT09IHR5cGVFdmVudDtcbiAgICAgIGxldCBqUXVlcnlFdmVudCA9IG51bGw7XG4gICAgICBsZXQgYnViYmxlcyA9IHRydWU7XG4gICAgICBsZXQgbmF0aXZlRGlzcGF0Y2ggPSB0cnVlO1xuICAgICAgbGV0IGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcbiAgICAgIGlmIChpbk5hbWVzcGFjZSAmJiAkKSB7XG4gICAgICAgIGpRdWVyeUV2ZW50ID0gJC5FdmVudChldmVudCwgYXJncyk7XG4gICAgICAgICQoZWxlbWVudCkudHJpZ2dlcihqUXVlcnlFdmVudCk7XG4gICAgICAgIGJ1YmJsZXMgPSAhalF1ZXJ5RXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtcbiAgICAgICAgbmF0aXZlRGlzcGF0Y2ggPSAhalF1ZXJ5RXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKTtcbiAgICAgICAgZGVmYXVsdFByZXZlbnRlZCA9IGpRdWVyeUV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgZXZ0ID0gaHlkcmF0ZU9iaihuZXcgRXZlbnQoZXZlbnQsIHtcbiAgICAgICAgYnViYmxlcyxcbiAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgICAgfSksIGFyZ3MpO1xuICAgICAgaWYgKGRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgICBpZiAobmF0aXZlRGlzcGF0Y2gpIHtcbiAgICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2dCk7XG4gICAgICB9XG4gICAgICBpZiAoZXZ0LmRlZmF1bHRQcmV2ZW50ZWQgJiYgalF1ZXJ5RXZlbnQpIHtcbiAgICAgICAgalF1ZXJ5RXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBldnQ7XG4gICAgfVxuICB9O1xuICBmdW5jdGlvbiBoeWRyYXRlT2JqKG9iaiwgbWV0YSA9IHt9KSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWV0YSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgICB9IGNhdGNoIChfdW51c2VkKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiBFdmVudEhhbmRsZXI7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV2ZW50LWhhbmRsZXIuanMubWFwXG4iLCIvKiFcbiAgKiBCb290c3RyYXAgbWFuaXB1bGF0b3IuanMgdjUuMy4zIChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKVxuICAqIENvcHlyaWdodCAyMDExLTIwMjQgVGhlIEJvb3RzdHJhcCBBdXRob3JzIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvZ3JhcGhzL2NvbnRyaWJ1dG9ycylcbiAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLk1hbmlwdWxhdG9yID0gZmFjdG9yeSgpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwIGRvbS9tYW5pcHVsYXRvci5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplRGF0YSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gJ3RydWUnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gTnVtYmVyKHZhbHVlKS50b1N0cmluZygpKSB7XG4gICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gJ251bGwnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuICAgIH0gY2F0Y2ggKF91bnVzZWQpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gbm9ybWFsaXplRGF0YUtleShrZXkpIHtcbiAgICByZXR1cm4ga2V5LnJlcGxhY2UoL1tBLVpdL2csIGNociA9PiBgLSR7Y2hyLnRvTG93ZXJDYXNlKCl9YCk7XG4gIH1cbiAgY29uc3QgTWFuaXB1bGF0b3IgPSB7XG4gICAgc2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBrZXksIHZhbHVlKSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShgZGF0YS1icy0ke25vcm1hbGl6ZURhdGFLZXkoa2V5KX1gLCB2YWx1ZSk7XG4gICAgfSxcbiAgICByZW1vdmVEYXRhQXR0cmlidXRlKGVsZW1lbnQsIGtleSkge1xuICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYGRhdGEtYnMtJHtub3JtYWxpemVEYXRhS2V5KGtleSl9YCk7XG4gICAgfSxcbiAgICBnZXREYXRhQXR0cmlidXRlcyhlbGVtZW50KSB7XG4gICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgY29uc3QgYnNLZXlzID0gT2JqZWN0LmtleXMoZWxlbWVudC5kYXRhc2V0KS5maWx0ZXIoa2V5ID0+IGtleS5zdGFydHNXaXRoKCdicycpICYmICFrZXkuc3RhcnRzV2l0aCgnYnNDb25maWcnKSk7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBic0tleXMpIHtcbiAgICAgICAgbGV0IHB1cmVLZXkgPSBrZXkucmVwbGFjZSgvXmJzLywgJycpO1xuICAgICAgICBwdXJlS2V5ID0gcHVyZUtleS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHB1cmVLZXkuc2xpY2UoMSwgcHVyZUtleS5sZW5ndGgpO1xuICAgICAgICBhdHRyaWJ1dGVzW3B1cmVLZXldID0gbm9ybWFsaXplRGF0YShlbGVtZW50LmRhdGFzZXRba2V5XSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgICB9LFxuICAgIGdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5KSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplRGF0YShlbGVtZW50LmdldEF0dHJpYnV0ZShgZGF0YS1icy0ke25vcm1hbGl6ZURhdGFLZXkoa2V5KX1gKSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBNYW5pcHVsYXRvcjtcblxufSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFuaXB1bGF0b3IuanMubWFwXG4iLCIvKiFcbiAgKiBCb290c3RyYXAgY29uZmlnLmpzIHY1LjMuMyAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDI0IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnLi4vZG9tL21hbmlwdWxhdG9yLmpzJyksIHJlcXVpcmUoJy4vaW5kZXguanMnKSkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9kb20vbWFuaXB1bGF0b3InLCAnLi9pbmRleCddLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5Db25maWcgPSBmYWN0b3J5KGdsb2JhbC5NYW5pcHVsYXRvciwgZ2xvYmFsLkluZGV4KSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKE1hbmlwdWxhdG9yLCBpbmRleF9qcykgeyAndXNlIHN0cmljdCc7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCB1dGlsL2NvbmZpZy5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cblxuICAvKipcbiAgICogQ2xhc3MgZGVmaW5pdGlvblxuICAgKi9cblxuICBjbGFzcyBDb25maWcge1xuICAgIC8vIEdldHRlcnNcbiAgICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGhhdmUgdG8gaW1wbGVtZW50IHRoZSBzdGF0aWMgbWV0aG9kIFwiTkFNRVwiLCBmb3IgZWFjaCBjb21wb25lbnQhJyk7XG4gICAgfVxuICAgIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgICBjb25maWcgPSB0aGlzLl9tZXJnZUNvbmZpZ09iaihjb25maWcpO1xuICAgICAgY29uZmlnID0gdGhpcy5fY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpO1xuICAgICAgdGhpcy5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZyk7XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cbiAgICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuICAgIF9tZXJnZUNvbmZpZ09iaihjb25maWcsIGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGpzb25Db25maWcgPSBpbmRleF9qcy5pc0VsZW1lbnQoZWxlbWVudCkgPyBNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsICdjb25maWcnKSA6IHt9OyAvLyB0cnkgdG8gcGFyc2VcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0LFxuICAgICAgICAuLi4odHlwZW9mIGpzb25Db25maWcgPT09ICdvYmplY3QnID8ganNvbkNvbmZpZyA6IHt9KSxcbiAgICAgICAgLi4uKGluZGV4X2pzLmlzRWxlbWVudChlbGVtZW50KSA/IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGVzKGVsZW1lbnQpIDoge30pLFxuICAgICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiB7fSlcbiAgICAgIH07XG4gICAgfVxuICAgIF90eXBlQ2hlY2tDb25maWcoY29uZmlnLCBjb25maWdUeXBlcyA9IHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFR5cGUpIHtcbiAgICAgIGZvciAoY29uc3QgW3Byb3BlcnR5LCBleHBlY3RlZFR5cGVzXSBvZiBPYmplY3QuZW50cmllcyhjb25maWdUeXBlcykpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjb25maWdbcHJvcGVydHldO1xuICAgICAgICBjb25zdCB2YWx1ZVR5cGUgPSBpbmRleF9qcy5pc0VsZW1lbnQodmFsdWUpID8gJ2VsZW1lbnQnIDogaW5kZXhfanMudG9UeXBlKHZhbHVlKTtcbiAgICAgICAgaWYgKCFuZXcgUmVnRXhwKGV4cGVjdGVkVHlwZXMpLnRlc3QodmFsdWVUeXBlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FLnRvVXBwZXJDYXNlKCl9OiBPcHRpb24gXCIke3Byb3BlcnR5fVwiIHByb3ZpZGVkIHR5cGUgXCIke3ZhbHVlVHlwZX1cIiBidXQgZXhwZWN0ZWQgdHlwZSBcIiR7ZXhwZWN0ZWRUeXBlc31cIi5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBDb25maWc7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmZpZy5qcy5tYXBcbiIsIi8qIVxuICAqIEJvb3RzdHJhcCBiYXNlLWNvbXBvbmVudC5qcyB2NS4zLjMgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyNCBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJy4vZG9tL2RhdGEuanMnKSwgcmVxdWlyZSgnLi9kb20vZXZlbnQtaGFuZGxlci5qcycpLCByZXF1aXJlKCcuL3V0aWwvY29uZmlnLmpzJyksIHJlcXVpcmUoJy4vdXRpbC9pbmRleC5qcycpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4vZG9tL2RhdGEnLCAnLi9kb20vZXZlbnQtaGFuZGxlcicsICcuL3V0aWwvY29uZmlnJywgJy4vdXRpbC9pbmRleCddLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5CYXNlQ29tcG9uZW50ID0gZmFjdG9yeShnbG9iYWwuRGF0YSwgZ2xvYmFsLkV2ZW50SGFuZGxlciwgZ2xvYmFsLkNvbmZpZywgZ2xvYmFsLkluZGV4KSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKERhdGEsIEV2ZW50SGFuZGxlciwgQ29uZmlnLCBpbmRleF9qcykgeyAndXNlIHN0cmljdCc7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCBiYXNlLWNvbXBvbmVudC5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cblxuICAvKipcbiAgICogQ29uc3RhbnRzXG4gICAqL1xuXG4gIGNvbnN0IFZFUlNJT04gPSAnNS4zLjMnO1xuXG4gIC8qKlxuICAgKiBDbGFzcyBkZWZpbml0aW9uXG4gICAqL1xuXG4gIGNsYXNzIEJhc2VDb21wb25lbnQgZXh0ZW5kcyBDb25maWcge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIGVsZW1lbnQgPSBpbmRleF9qcy5nZXRFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICBEYXRhLnNldCh0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvLyBQdWJsaWNcbiAgICBkaXNwb3NlKCkge1xuICAgICAgRGF0YS5yZW1vdmUodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSk7XG4gICAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuRVZFTlRfS0VZKTtcbiAgICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSB7XG4gICAgICAgIHRoaXNbcHJvcGVydHlOYW1lXSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIF9xdWV1ZUNhbGxiYWNrKGNhbGxiYWNrLCBlbGVtZW50LCBpc0FuaW1hdGVkID0gdHJ1ZSkge1xuICAgICAgaW5kZXhfanMuZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbihjYWxsYmFjaywgZWxlbWVudCwgaXNBbmltYXRlZCk7XG4gICAgfVxuICAgIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgICBjb25maWcgPSB0aGlzLl9tZXJnZUNvbmZpZ09iaihjb25maWcsIHRoaXMuX2VsZW1lbnQpO1xuICAgICAgY29uZmlnID0gdGhpcy5fY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpO1xuICAgICAgdGhpcy5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZyk7XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cblxuICAgIC8vIFN0YXRpY1xuICAgIHN0YXRpYyBnZXRJbnN0YW5jZShlbGVtZW50KSB7XG4gICAgICByZXR1cm4gRGF0YS5nZXQoaW5kZXhfanMuZ2V0RWxlbWVudChlbGVtZW50KSwgdGhpcy5EQVRBX0tFWSk7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQsIGNvbmZpZyA9IHt9KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJbnN0YW5jZShlbGVtZW50KSB8fCBuZXcgdGhpcyhlbGVtZW50LCB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyA/IGNvbmZpZyA6IG51bGwpO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0IFZFUlNJT04oKSB7XG4gICAgICByZXR1cm4gVkVSU0lPTjtcbiAgICB9XG4gICAgc3RhdGljIGdldCBEQVRBX0tFWSgpIHtcbiAgICAgIHJldHVybiBgYnMuJHt0aGlzLk5BTUV9YDtcbiAgICB9XG4gICAgc3RhdGljIGdldCBFVkVOVF9LRVkoKSB7XG4gICAgICByZXR1cm4gYC4ke3RoaXMuREFUQV9LRVl9YDtcbiAgICB9XG4gICAgc3RhdGljIGV2ZW50TmFtZShuYW1lKSB7XG4gICAgICByZXR1cm4gYCR7bmFtZX0ke3RoaXMuRVZFTlRfS0VZfWA7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIEJhc2VDb21wb25lbnQ7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJhc2UtY29tcG9uZW50LmpzLm1hcFxuIiwiLyohXG4gICogQm9vdHN0cmFwIHNlbGVjdG9yLWVuZ2luZS5qcyB2NS4zLjMgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyNCBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJy4uL3V0aWwvaW5kZXguanMnKSkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi91dGlsL2luZGV4J10sIGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLlNlbGVjdG9yRW5naW5lID0gZmFjdG9yeShnbG9iYWwuSW5kZXgpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoaW5kZXhfanMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBCb290c3RyYXAgZG9tL3NlbGVjdG9yLWVuZ2luZS5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgY29uc3QgZ2V0U2VsZWN0b3IgPSBlbGVtZW50ID0+IHtcbiAgICBsZXQgc2VsZWN0b3IgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy10YXJnZXQnKTtcbiAgICBpZiAoIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSAnIycpIHtcbiAgICAgIGxldCBocmVmQXR0cmlidXRlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcblxuICAgICAgLy8gVGhlIG9ubHkgdmFsaWQgY29udGVudCB0aGF0IGNvdWxkIGRvdWJsZSBhcyBhIHNlbGVjdG9yIGFyZSBJRHMgb3IgY2xhc3NlcyxcbiAgICAgIC8vIHNvIGV2ZXJ5dGhpbmcgc3RhcnRpbmcgd2l0aCBgI2Agb3IgYC5gLiBJZiBhIFwicmVhbFwiIFVSTCBpcyB1c2VkIGFzIHRoZSBzZWxlY3RvcixcbiAgICAgIC8vIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCB3aWxsIHJpZ2h0ZnVsbHkgY29tcGxhaW4gaXQgaXMgaW52YWxpZC5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzMyMjczXG4gICAgICBpZiAoIWhyZWZBdHRyaWJ1dGUgfHwgIWhyZWZBdHRyaWJ1dGUuaW5jbHVkZXMoJyMnKSAmJiAhaHJlZkF0dHJpYnV0ZS5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIEp1c3QgaW4gY2FzZSBzb21lIENNUyBwdXRzIG91dCBhIGZ1bGwgVVJMIHdpdGggdGhlIGFuY2hvciBhcHBlbmRlZFxuICAgICAgaWYgKGhyZWZBdHRyaWJ1dGUuaW5jbHVkZXMoJyMnKSAmJiAhaHJlZkF0dHJpYnV0ZS5zdGFydHNXaXRoKCcjJykpIHtcbiAgICAgICAgaHJlZkF0dHJpYnV0ZSA9IGAjJHtocmVmQXR0cmlidXRlLnNwbGl0KCcjJylbMV19YDtcbiAgICAgIH1cbiAgICAgIHNlbGVjdG9yID0gaHJlZkF0dHJpYnV0ZSAmJiBocmVmQXR0cmlidXRlICE9PSAnIycgPyBocmVmQXR0cmlidXRlLnRyaW0oKSA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RvciA/IHNlbGVjdG9yLnNwbGl0KCcsJykubWFwKHNlbCA9PiBpbmRleF9qcy5wYXJzZVNlbGVjdG9yKHNlbCkpLmpvaW4oJywnKSA6IG51bGw7XG4gIH07XG4gIGNvbnN0IFNlbGVjdG9yRW5naW5lID0ge1xuICAgIGZpbmQoc2VsZWN0b3IsIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBbXS5jb25jYXQoLi4uRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbC5jYWxsKGVsZW1lbnQsIHNlbGVjdG9yKSk7XG4gICAgfSxcbiAgICBmaW5kT25lKHNlbGVjdG9yLCBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICByZXR1cm4gRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3Rvci5jYWxsKGVsZW1lbnQsIHNlbGVjdG9yKTtcbiAgICB9LFxuICAgIGNoaWxkcmVuKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gW10uY29uY2F0KC4uLmVsZW1lbnQuY2hpbGRyZW4pLmZpbHRlcihjaGlsZCA9PiBjaGlsZC5tYXRjaGVzKHNlbGVjdG9yKSk7XG4gICAgfSxcbiAgICBwYXJlbnRzKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgICBjb25zdCBwYXJlbnRzID0gW107XG4gICAgICBsZXQgYW5jZXN0b3IgPSBlbGVtZW50LnBhcmVudE5vZGUuY2xvc2VzdChzZWxlY3Rvcik7XG4gICAgICB3aGlsZSAoYW5jZXN0b3IpIHtcbiAgICAgICAgcGFyZW50cy5wdXNoKGFuY2VzdG9yKTtcbiAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnROb2RlLmNsb3Nlc3Qoc2VsZWN0b3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcmVudHM7XG4gICAgfSxcbiAgICBwcmV2KGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgICBsZXQgcHJldmlvdXMgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgICB3aGlsZSAocHJldmlvdXMpIHtcbiAgICAgICAgaWYgKHByZXZpb3VzLm1hdGNoZXMoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgcmV0dXJuIFtwcmV2aW91c107XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXMgPSBwcmV2aW91cy5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0sXG4gICAgLy8gVE9ETzogdGhpcyBpcyBub3cgdW51c2VkOyByZW1vdmUgbGF0ZXIgYWxvbmcgd2l0aCBwcmV2KClcbiAgICBuZXh0KGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgICBsZXQgbmV4dCA9IGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgd2hpbGUgKG5leHQpIHtcbiAgICAgICAgaWYgKG5leHQubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgICAgICByZXR1cm4gW25leHRdO1xuICAgICAgICB9XG4gICAgICAgIG5leHQgPSBuZXh0Lm5leHRFbGVtZW50U2libGluZztcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9LFxuICAgIGZvY3VzYWJsZUNoaWxkcmVuKGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGZvY3VzYWJsZXMgPSBbJ2EnLCAnYnV0dG9uJywgJ2lucHV0JywgJ3RleHRhcmVhJywgJ3NlbGVjdCcsICdkZXRhaWxzJywgJ1t0YWJpbmRleF0nLCAnW2NvbnRlbnRlZGl0YWJsZT1cInRydWVcIl0nXS5tYXAoc2VsZWN0b3IgPT4gYCR7c2VsZWN0b3J9Om5vdChbdGFiaW5kZXhePVwiLVwiXSlgKS5qb2luKCcsJyk7XG4gICAgICByZXR1cm4gdGhpcy5maW5kKGZvY3VzYWJsZXMsIGVsZW1lbnQpLmZpbHRlcihlbCA9PiAhaW5kZXhfanMuaXNEaXNhYmxlZChlbCkgJiYgaW5kZXhfanMuaXNWaXNpYmxlKGVsKSk7XG4gICAgfSxcbiAgICBnZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoc2VsZWN0b3IpID8gc2VsZWN0b3IgOiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBnZXRFbGVtZW50RnJvbVNlbGVjdG9yKGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgICByZXR1cm4gc2VsZWN0b3IgPyBTZWxlY3RvckVuZ2luZS5maW5kT25lKHNlbGVjdG9yKSA6IG51bGw7XG4gICAgfSxcbiAgICBnZXRNdWx0aXBsZUVsZW1lbnRzRnJvbVNlbGVjdG9yKGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgICByZXR1cm4gc2VsZWN0b3IgPyBTZWxlY3RvckVuZ2luZS5maW5kKHNlbGVjdG9yKSA6IFtdO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gU2VsZWN0b3JFbmdpbmU7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlbGVjdG9yLWVuZ2luZS5qcy5tYXBcbiIsIi8qIVxuICAqIEJvb3RzdHJhcCBiYWNrZHJvcC5qcyB2NS4zLjMgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyNCBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJy4uL2RvbS9ldmVudC1oYW5kbGVyLmpzJyksIHJlcXVpcmUoJy4vY29uZmlnLmpzJyksIHJlcXVpcmUoJy4vaW5kZXguanMnKSkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9kb20vZXZlbnQtaGFuZGxlcicsICcuL2NvbmZpZycsICcuL2luZGV4J10sIGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLkJhY2tkcm9wID0gZmFjdG9yeShnbG9iYWwuRXZlbnRIYW5kbGVyLCBnbG9iYWwuQ29uZmlnLCBnbG9iYWwuSW5kZXgpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoRXZlbnRIYW5kbGVyLCBDb25maWcsIGluZGV4X2pzKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwIHV0aWwvYmFja2Ryb3AuanNcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgLyoqXG4gICAqIENvbnN0YW50c1xuICAgKi9cblxuICBjb25zdCBOQU1FID0gJ2JhY2tkcm9wJztcbiAgY29uc3QgQ0xBU1NfTkFNRV9GQURFID0gJ2ZhZGUnO1xuICBjb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdyc7XG4gIGNvbnN0IEVWRU5UX01PVVNFRE9XTiA9IGBtb3VzZWRvd24uYnMuJHtOQU1FfWA7XG4gIGNvbnN0IERlZmF1bHQgPSB7XG4gICAgY2xhc3NOYW1lOiAnbW9kYWwtYmFja2Ryb3AnLFxuICAgIGNsaWNrQ2FsbGJhY2s6IG51bGwsXG4gICAgaXNBbmltYXRlZDogZmFsc2UsXG4gICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgIC8vIGlmIGZhbHNlLCB3ZSB1c2UgdGhlIGJhY2tkcm9wIGhlbHBlciB3aXRob3V0IGFkZGluZyBhbnkgZWxlbWVudCB0byB0aGUgZG9tXG4gICAgcm9vdEVsZW1lbnQ6ICdib2R5JyAvLyBnaXZlIHRoZSBjaG9pY2UgdG8gcGxhY2UgYmFja2Ryb3AgdW5kZXIgZGlmZmVyZW50IGVsZW1lbnRzXG4gIH07XG4gIGNvbnN0IERlZmF1bHRUeXBlID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgY2xpY2tDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKScsXG4gICAgaXNBbmltYXRlZDogJ2Jvb2xlYW4nLFxuICAgIGlzVmlzaWJsZTogJ2Jvb2xlYW4nLFxuICAgIHJvb3RFbGVtZW50OiAnKGVsZW1lbnR8c3RyaW5nKSdcbiAgfTtcblxuICAvKipcbiAgICogQ2xhc3MgZGVmaW5pdGlvblxuICAgKi9cblxuICBjbGFzcyBCYWNrZHJvcCBleHRlbmRzIENvbmZpZyB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICBzdXBlcigpO1xuICAgICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICB0aGlzLl9pc0FwcGVuZGVkID0gZmFsc2U7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBHZXR0ZXJzXG4gICAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgICAgcmV0dXJuIERlZmF1bHQ7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgICByZXR1cm4gRGVmYXVsdFR5cGU7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICAgIHJldHVybiBOQU1FO1xuICAgIH1cblxuICAgIC8vIFB1YmxpY1xuICAgIHNob3coY2FsbGJhY2spIHtcbiAgICAgIGlmICghdGhpcy5fY29uZmlnLmlzVmlzaWJsZSkge1xuICAgICAgICBpbmRleF9qcy5leGVjdXRlKGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fYXBwZW5kKCk7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZ2V0RWxlbWVudCgpO1xuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5pc0FuaW1hdGVkKSB7XG4gICAgICAgIGluZGV4X2pzLnJlZmxvdyhlbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1cpO1xuICAgICAgdGhpcy5fZW11bGF0ZUFuaW1hdGlvbigoKSA9PiB7XG4gICAgICAgIGluZGV4X2pzLmV4ZWN1dGUoY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGhpZGUoY2FsbGJhY2spIHtcbiAgICAgIGlmICghdGhpcy5fY29uZmlnLmlzVmlzaWJsZSkge1xuICAgICAgICBpbmRleF9qcy5leGVjdXRlKGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fZ2V0RWxlbWVudCgpLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKTtcbiAgICAgIHRoaXMuX2VtdWxhdGVBbmltYXRpb24oKCkgPT4ge1xuICAgICAgICB0aGlzLmRpc3Bvc2UoKTtcbiAgICAgICAgaW5kZXhfanMuZXhlY3V0ZShjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZGlzcG9zZSgpIHtcbiAgICAgIGlmICghdGhpcy5faXNBcHBlbmRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFRE9XTik7XG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZSgpO1xuICAgICAgdGhpcy5faXNBcHBlbmRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFByaXZhdGVcbiAgICBfZ2V0RWxlbWVudCgpIHtcbiAgICAgIGlmICghdGhpcy5fZWxlbWVudCkge1xuICAgICAgICBjb25zdCBiYWNrZHJvcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBiYWNrZHJvcC5jbGFzc05hbWUgPSB0aGlzLl9jb25maWcuY2xhc3NOYW1lO1xuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmlzQW5pbWF0ZWQpIHtcbiAgICAgICAgICBiYWNrZHJvcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZWxlbWVudCA9IGJhY2tkcm9wO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQ7XG4gICAgfVxuICAgIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgICAgLy8gdXNlIGdldEVsZW1lbnQoKSB3aXRoIHRoZSBkZWZhdWx0IFwiYm9keVwiIHRvIGdldCBhIGZyZXNoIEVsZW1lbnQgb24gZWFjaCBpbnN0YW50aWF0aW9uXG4gICAgICBjb25maWcucm9vdEVsZW1lbnQgPSBpbmRleF9qcy5nZXRFbGVtZW50KGNvbmZpZy5yb290RWxlbWVudCk7XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cbiAgICBfYXBwZW5kKCkge1xuICAgICAgaWYgKHRoaXMuX2lzQXBwZW5kZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2dldEVsZW1lbnQoKTtcbiAgICAgIHRoaXMuX2NvbmZpZy5yb290RWxlbWVudC5hcHBlbmQoZWxlbWVudCk7XG4gICAgICBFdmVudEhhbmRsZXIub24oZWxlbWVudCwgRVZFTlRfTU9VU0VET1dOLCAoKSA9PiB7XG4gICAgICAgIGluZGV4X2pzLmV4ZWN1dGUodGhpcy5fY29uZmlnLmNsaWNrQ2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9pc0FwcGVuZGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgX2VtdWxhdGVBbmltYXRpb24oY2FsbGJhY2spIHtcbiAgICAgIGluZGV4X2pzLmV4ZWN1dGVBZnRlclRyYW5zaXRpb24oY2FsbGJhY2ssIHRoaXMuX2dldEVsZW1lbnQoKSwgdGhpcy5fY29uZmlnLmlzQW5pbWF0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBCYWNrZHJvcDtcblxufSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmFja2Ryb3AuanMubWFwXG4iLCIvKiFcbiAgKiBCb290c3RyYXAgY29tcG9uZW50LWZ1bmN0aW9ucy5qcyB2NS4zLjMgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyNCBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzLCByZXF1aXJlKCcuLi9kb20vZXZlbnQtaGFuZGxlci5qcycpLCByZXF1aXJlKCcuLi9kb20vc2VsZWN0b3ItZW5naW5lLmpzJyksIHJlcXVpcmUoJy4vaW5kZXguanMnKSkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJywgJy4uL2RvbS9ldmVudC1oYW5kbGVyJywgJy4uL2RvbS9zZWxlY3Rvci1lbmdpbmUnLCAnLi9pbmRleCddLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGZhY3RvcnkoZ2xvYmFsLkNvbXBvbmVudEZ1bmN0aW9ucyA9IHt9LCBnbG9iYWwuRXZlbnRIYW5kbGVyLCBnbG9iYWwuU2VsZWN0b3JFbmdpbmUsIGdsb2JhbC5JbmRleCkpO1xufSkodGhpcywgKGZ1bmN0aW9uIChleHBvcnRzLCBFdmVudEhhbmRsZXIsIFNlbGVjdG9yRW5naW5lLCBpbmRleF9qcykgeyAndXNlIHN0cmljdCc7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCB1dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMuanNcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIGNvbnN0IGVuYWJsZURpc21pc3NUcmlnZ2VyID0gKGNvbXBvbmVudCwgbWV0aG9kID0gJ2hpZGUnKSA9PiB7XG4gICAgY29uc3QgY2xpY2tFdmVudCA9IGBjbGljay5kaXNtaXNzJHtjb21wb25lbnQuRVZFTlRfS0VZfWA7XG4gICAgY29uc3QgbmFtZSA9IGNvbXBvbmVudC5OQU1FO1xuICAgIEV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgY2xpY2tFdmVudCwgYFtkYXRhLWJzLWRpc21pc3M9XCIke25hbWV9XCJdYCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgICBpZiAoaW5kZXhfanMuaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB0YXJnZXQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKHRoaXMpIHx8IHRoaXMuY2xvc2VzdChgLiR7bmFtZX1gKTtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gY29tcG9uZW50LmdldE9yQ3JlYXRlSW5zdGFuY2UodGFyZ2V0KTtcblxuICAgICAgLy8gTWV0aG9kIGFyZ3VtZW50IGlzIGxlZnQsIGZvciBBbGVydCBhbmQgb25seSwgYXMgaXQgZG9lc24ndCBpbXBsZW1lbnQgdGhlICdoaWRlJyBtZXRob2RcbiAgICAgIGluc3RhbmNlW21ldGhvZF0oKTtcbiAgICB9KTtcbiAgfTtcblxuICBleHBvcnRzLmVuYWJsZURpc21pc3NUcmlnZ2VyID0gZW5hYmxlRGlzbWlzc1RyaWdnZXI7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbXBvbmVudC1mdW5jdGlvbnMuanMubWFwXG4iLCIvKiFcbiAgKiBCb290c3RyYXAgZm9jdXN0cmFwLmpzIHY1LjMuMyAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDI0IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnLi4vZG9tL2V2ZW50LWhhbmRsZXIuanMnKSwgcmVxdWlyZSgnLi4vZG9tL3NlbGVjdG9yLWVuZ2luZS5qcycpLCByZXF1aXJlKCcuL2NvbmZpZy5qcycpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL2RvbS9ldmVudC1oYW5kbGVyJywgJy4uL2RvbS9zZWxlY3Rvci1lbmdpbmUnLCAnLi9jb25maWcnXSwgZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBnbG9iYWwuRm9jdXN0cmFwID0gZmFjdG9yeShnbG9iYWwuRXZlbnRIYW5kbGVyLCBnbG9iYWwuU2VsZWN0b3JFbmdpbmUsIGdsb2JhbC5Db25maWcpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoRXZlbnRIYW5kbGVyLCBTZWxlY3RvckVuZ2luZSwgQ29uZmlnKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwIHV0aWwvZm9jdXN0cmFwLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gIC8qKlxuICAgKiBDb25zdGFudHNcbiAgICovXG5cbiAgY29uc3QgTkFNRSA9ICdmb2N1c3RyYXAnO1xuICBjb25zdCBEQVRBX0tFWSA9ICdicy5mb2N1c3RyYXAnO1xuICBjb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YDtcbiAgY29uc3QgRVZFTlRfRk9DVVNJTiA9IGBmb2N1c2luJHtFVkVOVF9LRVl9YDtcbiAgY29uc3QgRVZFTlRfS0VZRE9XTl9UQUIgPSBga2V5ZG93bi50YWIke0VWRU5UX0tFWX1gO1xuICBjb25zdCBUQUJfS0VZID0gJ1RhYic7XG4gIGNvbnN0IFRBQl9OQVZfRk9SV0FSRCA9ICdmb3J3YXJkJztcbiAgY29uc3QgVEFCX05BVl9CQUNLV0FSRCA9ICdiYWNrd2FyZCc7XG4gIGNvbnN0IERlZmF1bHQgPSB7XG4gICAgYXV0b2ZvY3VzOiB0cnVlLFxuICAgIHRyYXBFbGVtZW50OiBudWxsIC8vIFRoZSBlbGVtZW50IHRvIHRyYXAgZm9jdXMgaW5zaWRlIG9mXG4gIH07XG4gIGNvbnN0IERlZmF1bHRUeXBlID0ge1xuICAgIGF1dG9mb2N1czogJ2Jvb2xlYW4nLFxuICAgIHRyYXBFbGVtZW50OiAnZWxlbWVudCdcbiAgfTtcblxuICAvKipcbiAgICogQ2xhc3MgZGVmaW5pdGlvblxuICAgKi9cblxuICBjbGFzcyBGb2N1c1RyYXAgZXh0ZW5kcyBDb25maWcge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIEdldHRlcnNcbiAgICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgICByZXR1cm4gRGVmYXVsdDtcbiAgICB9XG4gICAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICAgIHJldHVybiBEZWZhdWx0VHlwZTtcbiAgICB9XG4gICAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgICAgcmV0dXJuIE5BTUU7XG4gICAgfVxuXG4gICAgLy8gUHVibGljXG4gICAgYWN0aXZhdGUoKSB7XG4gICAgICBpZiAodGhpcy5faXNBY3RpdmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5hdXRvZm9jdXMpIHtcbiAgICAgICAgdGhpcy5fY29uZmlnLnRyYXBFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgICBFdmVudEhhbmRsZXIub2ZmKGRvY3VtZW50LCBFVkVOVF9LRVkpOyAvLyBndWFyZCBhZ2FpbnN0IGluZmluaXRlIGZvY3VzIGxvb3BcbiAgICAgIEV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfRk9DVVNJTiwgZXZlbnQgPT4gdGhpcy5faGFuZGxlRm9jdXNpbihldmVudCkpO1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlET1dOX1RBQiwgZXZlbnQgPT4gdGhpcy5faGFuZGxlS2V5ZG93bihldmVudCkpO1xuICAgICAgdGhpcy5faXNBY3RpdmUgPSB0cnVlO1xuICAgIH1cbiAgICBkZWFjdGl2YXRlKCkge1xuICAgICAgaWYgKCF0aGlzLl9pc0FjdGl2ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgRXZlbnRIYW5kbGVyLm9mZihkb2N1bWVudCwgRVZFTlRfS0VZKTtcbiAgICB9XG5cbiAgICAvLyBQcml2YXRlXG4gICAgX2hhbmRsZUZvY3VzaW4oZXZlbnQpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgdHJhcEVsZW1lbnRcbiAgICAgIH0gPSB0aGlzLl9jb25maWc7XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBkb2N1bWVudCB8fCBldmVudC50YXJnZXQgPT09IHRyYXBFbGVtZW50IHx8IHRyYXBFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZWxlbWVudHMgPSBTZWxlY3RvckVuZ2luZS5mb2N1c2FibGVDaGlsZHJlbih0cmFwRWxlbWVudCk7XG4gICAgICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRyYXBFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24gPT09IFRBQl9OQVZfQkFDS1dBUkQpIHtcbiAgICAgICAgZWxlbWVudHNbZWxlbWVudHMubGVuZ3RoIC0gMV0uZm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnRzWzBdLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICAgIF9oYW5kbGVLZXlkb3duKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSBUQUJfS0VZKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24gPSBldmVudC5zaGlmdEtleSA/IFRBQl9OQVZfQkFDS1dBUkQgOiBUQUJfTkFWX0ZPUldBUkQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIEZvY3VzVHJhcDtcblxufSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zm9jdXN0cmFwLmpzLm1hcFxuIiwiLyohXG4gICogQm9vdHN0cmFwIHNjcm9sbGJhci5qcyB2NS4zLjMgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyNCBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJy4uL2RvbS9tYW5pcHVsYXRvci5qcycpLCByZXF1aXJlKCcuLi9kb20vc2VsZWN0b3ItZW5naW5lLmpzJyksIHJlcXVpcmUoJy4vaW5kZXguanMnKSkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9kb20vbWFuaXB1bGF0b3InLCAnLi4vZG9tL3NlbGVjdG9yLWVuZ2luZScsICcuL2luZGV4J10sIGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLlNjcm9sbGJhciA9IGZhY3RvcnkoZ2xvYmFsLk1hbmlwdWxhdG9yLCBnbG9iYWwuU2VsZWN0b3JFbmdpbmUsIGdsb2JhbC5JbmRleCkpO1xufSkodGhpcywgKGZ1bmN0aW9uIChNYW5pcHVsYXRvciwgU2VsZWN0b3JFbmdpbmUsIGluZGV4X2pzKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwIHV0aWwvc2Nyb2xsQmFyLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gIC8qKlxuICAgKiBDb25zdGFudHNcbiAgICovXG5cbiAgY29uc3QgU0VMRUNUT1JfRklYRURfQ09OVEVOVCA9ICcuZml4ZWQtdG9wLCAuZml4ZWQtYm90dG9tLCAuaXMtZml4ZWQsIC5zdGlja3ktdG9wJztcbiAgY29uc3QgU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQgPSAnLnN0aWNreS10b3AnO1xuICBjb25zdCBQUk9QRVJUWV9QQURESU5HID0gJ3BhZGRpbmctcmlnaHQnO1xuICBjb25zdCBQUk9QRVJUWV9NQVJHSU4gPSAnbWFyZ2luLXJpZ2h0JztcblxuICAvKipcbiAgICogQ2xhc3MgZGVmaW5pdGlvblxuICAgKi9cblxuICBjbGFzcyBTY3JvbGxCYXJIZWxwZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgdGhpcy5fZWxlbWVudCA9IGRvY3VtZW50LmJvZHk7XG4gICAgfVxuXG4gICAgLy8gUHVibGljXG4gICAgZ2V0V2lkdGgoKSB7XG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93L2lubmVyV2lkdGgjdXNhZ2Vfbm90ZXNcbiAgICAgIGNvbnN0IGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICByZXR1cm4gTWF0aC5hYnMod2luZG93LmlubmVyV2lkdGggLSBkb2N1bWVudFdpZHRoKTtcbiAgICB9XG4gICAgaGlkZSgpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRXaWR0aCgpO1xuICAgICAgdGhpcy5fZGlzYWJsZU92ZXJGbG93KCk7XG4gICAgICAvLyBnaXZlIHBhZGRpbmcgdG8gZWxlbWVudCB0byBiYWxhbmNlIHRoZSBoaWRkZW4gc2Nyb2xsYmFyIHdpZHRoXG4gICAgICB0aGlzLl9zZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LCBQUk9QRVJUWV9QQURESU5HLCBjYWxjdWxhdGVkVmFsdWUgPT4gY2FsY3VsYXRlZFZhbHVlICsgd2lkdGgpO1xuICAgICAgLy8gdHJpY2s6IFdlIGFkanVzdCBwb3NpdGl2ZSBwYWRkaW5nUmlnaHQgYW5kIG5lZ2F0aXZlIG1hcmdpblJpZ2h0IHRvIHN0aWNreS10b3AgZWxlbWVudHMgdG8ga2VlcCBzaG93aW5nIGZ1bGx3aWR0aFxuICAgICAgdGhpcy5fc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfRklYRURfQ09OVEVOVCwgUFJPUEVSVFlfUEFERElORywgY2FsY3VsYXRlZFZhbHVlID0+IGNhbGN1bGF0ZWRWYWx1ZSArIHdpZHRoKTtcbiAgICAgIHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX1NUSUNLWV9DT05URU5ULCBQUk9QRVJUWV9NQVJHSU4sIGNhbGN1bGF0ZWRWYWx1ZSA9PiBjYWxjdWxhdGVkVmFsdWUgLSB3aWR0aCk7XG4gICAgfVxuICAgIHJlc2V0KCkge1xuICAgICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LCAnb3ZlcmZsb3cnKTtcbiAgICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCwgUFJPUEVSVFlfUEFERElORyk7XG4gICAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQsIFBST1BFUlRZX1BBRERJTkcpO1xuICAgICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCwgUFJPUEVSVFlfTUFSR0lOKTtcbiAgICB9XG4gICAgaXNPdmVyZmxvd2luZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFdpZHRoKCkgPiAwO1xuICAgIH1cblxuICAgIC8vIFByaXZhdGVcbiAgICBfZGlzYWJsZU92ZXJGbG93KCkge1xuICAgICAgdGhpcy5fc2F2ZUluaXRpYWxBdHRyaWJ1dGUodGhpcy5fZWxlbWVudCwgJ292ZXJmbG93Jyk7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgfVxuICAgIF9zZXRFbGVtZW50QXR0cmlidXRlcyhzZWxlY3Rvciwgc3R5bGVQcm9wZXJ0eSwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IHNjcm9sbGJhcldpZHRoID0gdGhpcy5nZXRXaWR0aCgpO1xuICAgICAgY29uc3QgbWFuaXB1bGF0aW9uQ2FsbEJhY2sgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQgIT09IHRoaXMuX2VsZW1lbnQgJiYgd2luZG93LmlubmVyV2lkdGggPiBlbGVtZW50LmNsaWVudFdpZHRoICsgc2Nyb2xsYmFyV2lkdGgpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2F2ZUluaXRpYWxBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSk7XG4gICAgICAgIGNvbnN0IGNhbGN1bGF0ZWRWYWx1ZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoc3R5bGVQcm9wZXJ0eSk7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoc3R5bGVQcm9wZXJ0eSwgYCR7Y2FsbGJhY2soTnVtYmVyLnBhcnNlRmxvYXQoY2FsY3VsYXRlZFZhbHVlKSl9cHhgKTtcbiAgICAgIH07XG4gICAgICB0aGlzLl9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHNlbGVjdG9yLCBtYW5pcHVsYXRpb25DYWxsQmFjayk7XG4gICAgfVxuICAgIF9zYXZlSW5pdGlhbEF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KSB7XG4gICAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGVsZW1lbnQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3BlcnR5KTtcbiAgICAgIGlmIChhY3R1YWxWYWx1ZSkge1xuICAgICAgICBNYW5pcHVsYXRvci5zZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHksIGFjdHVhbFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMoc2VsZWN0b3IsIHN0eWxlUHJvcGVydHkpIHtcbiAgICAgIGNvbnN0IG1hbmlwdWxhdGlvbkNhbGxCYWNrID0gZWxlbWVudCA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KTtcbiAgICAgICAgLy8gV2Ugb25seSB3YW50IHRvIHJlbW92ZSB0aGUgcHJvcGVydHkgaWYgdGhlIHZhbHVlIGlzIGBudWxsYDsgdGhlIHZhbHVlIGNhbiBhbHNvIGJlIHplcm9cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShzdHlsZVByb3BlcnR5KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgTWFuaXB1bGF0b3IucmVtb3ZlRGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KTtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShzdHlsZVByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5fYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayhzZWxlY3RvciwgbWFuaXB1bGF0aW9uQ2FsbEJhY2spO1xuICAgIH1cbiAgICBfYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayhzZWxlY3RvciwgY2FsbEJhY2spIHtcbiAgICAgIGlmIChpbmRleF9qcy5pc0VsZW1lbnQoc2VsZWN0b3IpKSB7XG4gICAgICAgIGNhbGxCYWNrKHNlbGVjdG9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBzZWwgb2YgU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvciwgdGhpcy5fZWxlbWVudCkpIHtcbiAgICAgICAgY2FsbEJhY2soc2VsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gU2Nyb2xsQmFySGVscGVyO1xuXG59KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY3JvbGxiYXIuanMubWFwXG4iLCIvKiFcbiAgKiBCb290c3RyYXAgbW9kYWwuanMgdjUuMy4zIChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKVxuICAqIENvcHlyaWdodCAyMDExLTIwMjQgVGhlIEJvb3RzdHJhcCBBdXRob3JzIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvZ3JhcGhzL2NvbnRyaWJ1dG9ycylcbiAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCcuL2Jhc2UtY29tcG9uZW50LmpzJyksIHJlcXVpcmUoJy4vZG9tL2V2ZW50LWhhbmRsZXIuanMnKSwgcmVxdWlyZSgnLi9kb20vc2VsZWN0b3ItZW5naW5lLmpzJyksIHJlcXVpcmUoJy4vdXRpbC9iYWNrZHJvcC5qcycpLCByZXF1aXJlKCcuL3V0aWwvY29tcG9uZW50LWZ1bmN0aW9ucy5qcycpLCByZXF1aXJlKCcuL3V0aWwvZm9jdXN0cmFwLmpzJyksIHJlcXVpcmUoJy4vdXRpbC9pbmRleC5qcycpLCByZXF1aXJlKCcuL3V0aWwvc2Nyb2xsYmFyLmpzJykpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi9iYXNlLWNvbXBvbmVudCcsICcuL2RvbS9ldmVudC1oYW5kbGVyJywgJy4vZG9tL3NlbGVjdG9yLWVuZ2luZScsICcuL3V0aWwvYmFja2Ryb3AnLCAnLi91dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMnLCAnLi91dGlsL2ZvY3VzdHJhcCcsICcuL3V0aWwvaW5kZXgnLCAnLi91dGlsL3Njcm9sbGJhciddLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5Nb2RhbCA9IGZhY3RvcnkoZ2xvYmFsLkJhc2VDb21wb25lbnQsIGdsb2JhbC5FdmVudEhhbmRsZXIsIGdsb2JhbC5TZWxlY3RvckVuZ2luZSwgZ2xvYmFsLkJhY2tkcm9wLCBnbG9iYWwuQ29tcG9uZW50RnVuY3Rpb25zLCBnbG9iYWwuRm9jdXN0cmFwLCBnbG9iYWwuSW5kZXgsIGdsb2JhbC5TY3JvbGxiYXIpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoQmFzZUNvbXBvbmVudCwgRXZlbnRIYW5kbGVyLCBTZWxlY3RvckVuZ2luZSwgQmFja2Ryb3AsIGNvbXBvbmVudEZ1bmN0aW9uc19qcywgRm9jdXNUcmFwLCBpbmRleF9qcywgU2Nyb2xsQmFySGVscGVyKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwIG1vZGFsLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gIC8qKlxuICAgKiBDb25zdGFudHNcbiAgICovXG5cbiAgY29uc3QgTkFNRSA9ICdtb2RhbCc7XG4gIGNvbnN0IERBVEFfS0VZID0gJ2JzLm1vZGFsJztcbiAgY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWA7XG4gIGNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknO1xuICBjb25zdCBFU0NBUEVfS0VZID0gJ0VzY2FwZSc7XG4gIGNvbnN0IEVWRU5UX0hJREUgPSBgaGlkZSR7RVZFTlRfS0VZfWA7XG4gIGNvbnN0IEVWRU5UX0hJREVfUFJFVkVOVEVEID0gYGhpZGVQcmV2ZW50ZWQke0VWRU5UX0tFWX1gO1xuICBjb25zdCBFVkVOVF9ISURERU4gPSBgaGlkZGVuJHtFVkVOVF9LRVl9YDtcbiAgY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YDtcbiAgY29uc3QgRVZFTlRfU0hPV04gPSBgc2hvd24ke0VWRU5UX0tFWX1gO1xuICBjb25zdCBFVkVOVF9SRVNJWkUgPSBgcmVzaXplJHtFVkVOVF9LRVl9YDtcbiAgY29uc3QgRVZFTlRfQ0xJQ0tfRElTTUlTUyA9IGBjbGljay5kaXNtaXNzJHtFVkVOVF9LRVl9YDtcbiAgY29uc3QgRVZFTlRfTU9VU0VET1dOX0RJU01JU1MgPSBgbW91c2Vkb3duLmRpc21pc3Mke0VWRU5UX0tFWX1gO1xuICBjb25zdCBFVkVOVF9LRVlET1dOX0RJU01JU1MgPSBga2V5ZG93bi5kaXNtaXNzJHtFVkVOVF9LRVl9YDtcbiAgY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkgPSBgY2xpY2ske0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gO1xuICBjb25zdCBDTEFTU19OQU1FX09QRU4gPSAnbW9kYWwtb3Blbic7XG4gIGNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJztcbiAgY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnO1xuICBjb25zdCBDTEFTU19OQU1FX1NUQVRJQyA9ICdtb2RhbC1zdGF0aWMnO1xuICBjb25zdCBPUEVOX1NFTEVDVE9SID0gJy5tb2RhbC5zaG93JztcbiAgY29uc3QgU0VMRUNUT1JfRElBTE9HID0gJy5tb2RhbC1kaWFsb2cnO1xuICBjb25zdCBTRUxFQ1RPUl9NT0RBTF9CT0RZID0gJy5tb2RhbC1ib2R5JztcbiAgY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIl0nO1xuICBjb25zdCBEZWZhdWx0ID0ge1xuICAgIGJhY2tkcm9wOiB0cnVlLFxuICAgIGZvY3VzOiB0cnVlLFxuICAgIGtleWJvYXJkOiB0cnVlXG4gIH07XG4gIGNvbnN0IERlZmF1bHRUeXBlID0ge1xuICAgIGJhY2tkcm9wOiAnKGJvb2xlYW58c3RyaW5nKScsXG4gICAgZm9jdXM6ICdib29sZWFuJyxcbiAgICBrZXlib2FyZDogJ2Jvb2xlYW4nXG4gIH07XG5cbiAgLyoqXG4gICAqIENsYXNzIGRlZmluaXRpb25cbiAgICovXG5cbiAgY2xhc3MgTW9kYWwgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG4gICAgICB0aGlzLl9kaWFsb2cgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0RJQUxPRywgdGhpcy5fZWxlbWVudCk7XG4gICAgICB0aGlzLl9iYWNrZHJvcCA9IHRoaXMuX2luaXRpYWxpemVCYWNrRHJvcCgpO1xuICAgICAgdGhpcy5fZm9jdXN0cmFwID0gdGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpO1xuICAgICAgdGhpcy5faXNTaG93biA9IGZhbHNlO1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9zY3JvbGxCYXIgPSBuZXcgU2Nyb2xsQmFySGVscGVyKCk7XG4gICAgICB0aGlzLl9hZGRFdmVudExpc3RlbmVycygpO1xuICAgIH1cblxuICAgIC8vIEdldHRlcnNcbiAgICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgICByZXR1cm4gRGVmYXVsdDtcbiAgICB9XG4gICAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICAgIHJldHVybiBEZWZhdWx0VHlwZTtcbiAgICB9XG4gICAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgICAgcmV0dXJuIE5BTUU7XG4gICAgfVxuXG4gICAgLy8gUHVibGljXG4gICAgdG9nZ2xlKHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pc1Nob3duID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3cocmVsYXRlZFRhcmdldCk7XG4gICAgfVxuICAgIHNob3cocmVsYXRlZFRhcmdldCkge1xuICAgICAgaWYgKHRoaXMuX2lzU2hvd24gfHwgdGhpcy5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1csIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldFxuICAgICAgfSk7XG4gICAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5faXNTaG93biA9IHRydWU7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgICAgdGhpcy5fc2Nyb2xsQmFyLmhpZGUoKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX09QRU4pO1xuICAgICAgdGhpcy5fYWRqdXN0RGlhbG9nKCk7XG4gICAgICB0aGlzLl9iYWNrZHJvcC5zaG93KCgpID0+IHRoaXMuX3Nob3dFbGVtZW50KHJlbGF0ZWRUYXJnZXQpKTtcbiAgICB9XG4gICAgaGlkZSgpIHtcbiAgICAgIGlmICghdGhpcy5faXNTaG93biB8fCB0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSk7XG4gICAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5faXNTaG93biA9IGZhbHNlO1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKCk7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKTtcbiAgICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCkgPT4gdGhpcy5faGlkZU1vZGFsKCksIHRoaXMuX2VsZW1lbnQsIHRoaXMuX2lzQW5pbWF0ZWQoKSk7XG4gICAgfVxuICAgIGRpc3Bvc2UoKSB7XG4gICAgICBFdmVudEhhbmRsZXIub2ZmKHdpbmRvdywgRVZFTlRfS0VZKTtcbiAgICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZGlhbG9nLCBFVkVOVF9LRVkpO1xuICAgICAgdGhpcy5fYmFja2Ryb3AuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKTtcbiAgICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgICB9XG4gICAgaGFuZGxlVXBkYXRlKCkge1xuICAgICAgdGhpcy5fYWRqdXN0RGlhbG9nKCk7XG4gICAgfVxuXG4gICAgLy8gUHJpdmF0ZVxuICAgIF9pbml0aWFsaXplQmFja0Ryb3AoKSB7XG4gICAgICByZXR1cm4gbmV3IEJhY2tkcm9wKHtcbiAgICAgICAgaXNWaXNpYmxlOiBCb29sZWFuKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCksXG4gICAgICAgIC8vICdzdGF0aWMnIG9wdGlvbiB3aWxsIGJlIHRyYW5zbGF0ZWQgdG8gdHJ1ZSwgYW5kIGJvb2xlYW5zIHdpbGwga2VlcCB0aGVpciB2YWx1ZSxcbiAgICAgICAgaXNBbmltYXRlZDogdGhpcy5faXNBbmltYXRlZCgpXG4gICAgICB9KTtcbiAgICB9XG4gICAgX2luaXRpYWxpemVGb2N1c1RyYXAoKSB7XG4gICAgICByZXR1cm4gbmV3IEZvY3VzVHJhcCh7XG4gICAgICAgIHRyYXBFbGVtZW50OiB0aGlzLl9lbGVtZW50XG4gICAgICB9KTtcbiAgICB9XG4gICAgX3Nob3dFbGVtZW50KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgIC8vIHRyeSB0byBhcHBlbmQgZHluYW1pYyBtb2RhbFxuICAgICAgaWYgKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKHRoaXMuX2VsZW1lbnQpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpO1xuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnLCB0cnVlKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2RpYWxvZycpO1xuICAgICAgdGhpcy5fZWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgICAgY29uc3QgbW9kYWxCb2R5ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9NT0RBTF9CT0RZLCB0aGlzLl9kaWFsb2cpO1xuICAgICAgaWYgKG1vZGFsQm9keSkge1xuICAgICAgICBtb2RhbEJvZHkuc2Nyb2xsVG9wID0gMDtcbiAgICAgIH1cbiAgICAgIGluZGV4X2pzLnJlZmxvdyh0aGlzLl9lbGVtZW50KTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1cpO1xuICAgICAgY29uc3QgdHJhbnNpdGlvbkNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmZvY3VzKSB7XG4gICAgICAgICAgdGhpcy5fZm9jdXN0cmFwLmFjdGl2YXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOLCB7XG4gICAgICAgICAgcmVsYXRlZFRhcmdldFxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKHRyYW5zaXRpb25Db21wbGV0ZSwgdGhpcy5fZGlhbG9nLCB0aGlzLl9pc0FuaW1hdGVkKCkpO1xuICAgIH1cbiAgICBfYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTl9ESVNNSVNTLCBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5rZXkgIT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5rZXlib2FyZCkge1xuICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKCk7XG4gICAgICB9KTtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX1JFU0laRSwgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5faXNTaG93biAmJiAhdGhpcy5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgICAgdGhpcy5fYWRqdXN0RGlhbG9nKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFRE9XTl9ESVNNSVNTLCBldmVudCA9PiB7XG4gICAgICAgIC8vIGEgYmFkIHRyaWNrIHRvIHNlZ3JlZ2F0ZSBjbGlja3MgdGhhdCBtYXkgc3RhcnQgaW5zaWRlIGRpYWxvZyBidXQgZW5kIG91dHNpZGUsIGFuZCBhdm9pZCBsaXN0ZW4gdG8gc2Nyb2xsYmFyIGNsaWNrc1xuICAgICAgICBFdmVudEhhbmRsZXIub25lKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMSUNLX0RJU01JU1MsIGV2ZW50MiA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQgIT09IGV2ZW50LnRhcmdldCB8fCB0aGlzLl9lbGVtZW50ICE9PSBldmVudDIudGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLl9jb25maWcuYmFja2Ryb3AgPT09ICdzdGF0aWMnKSB7XG4gICAgICAgICAgICB0aGlzLl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLl9jb25maWcuYmFja2Ryb3ApIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgX2hpZGVNb2RhbCgpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdyb2xlJyk7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2JhY2tkcm9wLmhpZGUoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9PUEVOKTtcbiAgICAgICAgdGhpcy5fcmVzZXRBZGp1c3RtZW50cygpO1xuICAgICAgICB0aGlzLl9zY3JvbGxCYXIucmVzZXQoKTtcbiAgICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBfaXNBbmltYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpO1xuICAgIH1cbiAgICBfdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpIHtcbiAgICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREVfUFJFVkVOVEVEKTtcbiAgICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpc01vZGFsT3ZlcmZsb3dpbmcgPSB0aGlzLl9lbGVtZW50LnNjcm9sbEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICBjb25zdCBpbml0aWFsT3ZlcmZsb3dZID0gdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1k7XG4gICAgICAvLyByZXR1cm4gaWYgdGhlIGZvbGxvd2luZyBiYWNrZ3JvdW5kIHRyYW5zaXRpb24gaGFzbid0IHlldCBjb21wbGV0ZWRcbiAgICAgIGlmIChpbml0aWFsT3ZlcmZsb3dZID09PSAnaGlkZGVuJyB8fCB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NUQVRJQykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSAnaGlkZGVuJztcbiAgICAgIH1cbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NUQVRJQyk7XG4gICAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU1RBVElDKTtcbiAgICAgICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSBpbml0aWFsT3ZlcmZsb3dZO1xuICAgICAgICB9LCB0aGlzLl9kaWFsb2cpO1xuICAgICAgfSwgdGhpcy5fZGlhbG9nKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gaGFuZGxlIG92ZXJmbG93aW5nIG1vZGFsc1xuICAgICAqL1xuXG4gICAgX2FkanVzdERpYWxvZygpIHtcbiAgICAgIGNvbnN0IGlzTW9kYWxPdmVyZmxvd2luZyA9IHRoaXMuX2VsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IHNjcm9sbGJhcldpZHRoID0gdGhpcy5fc2Nyb2xsQmFyLmdldFdpZHRoKCk7XG4gICAgICBjb25zdCBpc0JvZHlPdmVyZmxvd2luZyA9IHNjcm9sbGJhcldpZHRoID4gMDtcbiAgICAgIGlmIChpc0JvZHlPdmVyZmxvd2luZyAmJiAhaXNNb2RhbE92ZXJmbG93aW5nKSB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5ID0gaW5kZXhfanMuaXNSVEwoKSA/ICdwYWRkaW5nTGVmdCcgOiAncGFkZGluZ1JpZ2h0JztcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZVtwcm9wZXJ0eV0gPSBgJHtzY3JvbGxiYXJXaWR0aH1weGA7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQm9keU92ZXJmbG93aW5nICYmIGlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGluZGV4X2pzLmlzUlRMKCkgPyAncGFkZGluZ1JpZ2h0JyA6ICdwYWRkaW5nTGVmdCc7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbcHJvcGVydHldID0gYCR7c2Nyb2xsYmFyV2lkdGh9cHhgO1xuICAgICAgfVxuICAgIH1cbiAgICBfcmVzZXRBZGp1c3RtZW50cygpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQgPSAnJztcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gJyc7XG4gICAgfVxuXG4gICAgLy8gU3RhdGljXG4gICAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcsIHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhW2NvbmZpZ10ocmVsYXRlZFRhcmdldCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAgICovXG5cbiAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcyk7XG4gICAgaWYgKFsnQScsICdBUkVBJ10uaW5jbHVkZXModGhpcy50YWdOYW1lKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgRXZlbnRIYW5kbGVyLm9uZSh0YXJnZXQsIEVWRU5UX1NIT1csIHNob3dFdmVudCA9PiB7XG4gICAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgLy8gb25seSByZWdpc3RlciBmb2N1cyByZXN0b3JlciBpZiBtb2RhbCB3aWxsIGFjdHVhbGx5IGdldCBzaG93blxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBFdmVudEhhbmRsZXIub25lKHRhcmdldCwgRVZFTlRfSElEREVOLCAoKSA9PiB7XG4gICAgICAgIGlmIChpbmRleF9qcy5pc1Zpc2libGUodGhpcykpIHtcbiAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gYXZvaWQgY29uZmxpY3Qgd2hlbiBjbGlja2luZyBtb2RhbCB0b2dnbGVyIHdoaWxlIGFub3RoZXIgb25lIGlzIG9wZW5cbiAgICBjb25zdCBhbHJlYWR5T3BlbiA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoT1BFTl9TRUxFQ1RPUik7XG4gICAgaWYgKGFscmVhZHlPcGVuKSB7XG4gICAgICBNb2RhbC5nZXRJbnN0YW5jZShhbHJlYWR5T3BlbikuaGlkZSgpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpO1xuICAgIGRhdGEudG9nZ2xlKHRoaXMpO1xuICB9KTtcbiAgY29tcG9uZW50RnVuY3Rpb25zX2pzLmVuYWJsZURpc21pc3NUcmlnZ2VyKE1vZGFsKTtcblxuICAvKipcbiAgICogalF1ZXJ5XG4gICAqL1xuXG4gIGluZGV4X2pzLmRlZmluZUpRdWVyeVBsdWdpbihNb2RhbCk7XG5cbiAgcmV0dXJuIE1vZGFsO1xuXG59KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tb2RhbC5qcy5tYXBcbiIsImV4cG9ydCB2YXIgdG9wID0gJ3RvcCc7XG5leHBvcnQgdmFyIGJvdHRvbSA9ICdib3R0b20nO1xuZXhwb3J0IHZhciByaWdodCA9ICdyaWdodCc7XG5leHBvcnQgdmFyIGxlZnQgPSAnbGVmdCc7XG5leHBvcnQgdmFyIGF1dG8gPSAnYXV0byc7XG5leHBvcnQgdmFyIGJhc2VQbGFjZW1lbnRzID0gW3RvcCwgYm90dG9tLCByaWdodCwgbGVmdF07XG5leHBvcnQgdmFyIHN0YXJ0ID0gJ3N0YXJ0JztcbmV4cG9ydCB2YXIgZW5kID0gJ2VuZCc7XG5leHBvcnQgdmFyIGNsaXBwaW5nUGFyZW50cyA9ICdjbGlwcGluZ1BhcmVudHMnO1xuZXhwb3J0IHZhciB2aWV3cG9ydCA9ICd2aWV3cG9ydCc7XG5leHBvcnQgdmFyIHBvcHBlciA9ICdwb3BwZXInO1xuZXhwb3J0IHZhciByZWZlcmVuY2UgPSAncmVmZXJlbmNlJztcbmV4cG9ydCB2YXIgdmFyaWF0aW9uUGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9iYXNlUGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gIHJldHVybiBhY2MuY29uY2F0KFtwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pO1xuZXhwb3J0IHZhciBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL1tdLmNvbmNhdChiYXNlUGxhY2VtZW50cywgW2F1dG9dKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gIHJldHVybiBhY2MuY29uY2F0KFtwbGFjZW1lbnQsIHBsYWNlbWVudCArIFwiLVwiICsgc3RhcnQsIHBsYWNlbWVudCArIFwiLVwiICsgZW5kXSk7XG59LCBbXSk7IC8vIG1vZGlmaWVycyB0aGF0IG5lZWQgdG8gcmVhZCB0aGUgRE9NXG5cbmV4cG9ydCB2YXIgYmVmb3JlUmVhZCA9ICdiZWZvcmVSZWFkJztcbmV4cG9ydCB2YXIgcmVhZCA9ICdyZWFkJztcbmV4cG9ydCB2YXIgYWZ0ZXJSZWFkID0gJ2FmdGVyUmVhZCc7IC8vIHB1cmUtbG9naWMgbW9kaWZpZXJzXG5cbmV4cG9ydCB2YXIgYmVmb3JlTWFpbiA9ICdiZWZvcmVNYWluJztcbmV4cG9ydCB2YXIgbWFpbiA9ICdtYWluJztcbmV4cG9ydCB2YXIgYWZ0ZXJNYWluID0gJ2FmdGVyTWFpbic7IC8vIG1vZGlmaWVyIHdpdGggdGhlIHB1cnBvc2UgdG8gd3JpdGUgdG8gdGhlIERPTSAob3Igd3JpdGUgaW50byBhIGZyYW1ld29yayBzdGF0ZSlcblxuZXhwb3J0IHZhciBiZWZvcmVXcml0ZSA9ICdiZWZvcmVXcml0ZSc7XG5leHBvcnQgdmFyIHdyaXRlID0gJ3dyaXRlJztcbmV4cG9ydCB2YXIgYWZ0ZXJXcml0ZSA9ICdhZnRlcldyaXRlJztcbmV4cG9ydCB2YXIgbW9kaWZpZXJQaGFzZXMgPSBbYmVmb3JlUmVhZCwgcmVhZCwgYWZ0ZXJSZWFkLCBiZWZvcmVNYWluLCBtYWluLCBhZnRlck1haW4sIGJlZm9yZVdyaXRlLCB3cml0ZSwgYWZ0ZXJXcml0ZV07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZU5hbWUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudCA/IChlbGVtZW50Lm5vZGVOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIGlmIChub2RlLnRvU3RyaW5nKCkgIT09ICdbb2JqZWN0IFdpbmRvd10nKSB7XG4gICAgdmFyIG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQ7XG4gICAgcmV0dXJuIG93bmVyRG9jdW1lbnQgPyBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdyA6IHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNIVE1MRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkhUTUxFbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc1NoYWRvd1Jvb3Qobm9kZSkge1xuICAvLyBJRSAxMSBoYXMgbm8gU2hhZG93Um9vdFxuICBpZiAodHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuU2hhZG93Um9vdDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290O1xufVxuXG5leHBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9OyIsImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7IC8vIFRoaXMgbW9kaWZpZXIgdGFrZXMgdGhlIHN0eWxlcyBwcmVwYXJlZCBieSB0aGUgYGNvbXB1dGVTdHlsZXNgIG1vZGlmaWVyXG4vLyBhbmQgYXBwbGllcyB0aGVtIHRvIHRoZSBIVE1MRWxlbWVudHMgc3VjaCBhcyBwb3BwZXIgYW5kIGFycm93XG5cbmZ1bmN0aW9uIGFwcGx5U3R5bGVzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZTtcbiAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgc3R5bGUgPSBzdGF0ZS5zdHlsZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRmxvdyBkb2Vzbid0IHN1cHBvcnQgdG8gZXh0ZW5kIHRoaXMgcHJvcGVydHksIGJ1dCBpdCdzIHRoZSBtb3N0XG4gICAgLy8gZWZmZWN0aXZlIHdheSB0byBhcHBseSBzdHlsZXMgdG8gYW4gSFRNTEVsZW1lbnRcbiAgICAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV1cblxuXG4gICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIHZhbHVlID0gYXR0cmlidXRlc1tuYW1lXTtcblxuICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlID09PSB0cnVlID8gJycgOiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGU7XG4gIHZhciBpbml0aWFsU3R5bGVzID0ge1xuICAgIHBvcHBlcjoge1xuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBsZWZ0OiAnMCcsXG4gICAgICB0b3A6ICcwJyxcbiAgICAgIG1hcmdpbjogJzAnXG4gICAgfSxcbiAgICBhcnJvdzoge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZSdcbiAgICB9LFxuICAgIHJlZmVyZW5jZToge31cbiAgfTtcbiAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5wb3BwZXIuc3R5bGUsIGluaXRpYWxTdHlsZXMucG9wcGVyKTtcbiAgc3RhdGUuc3R5bGVzID0gaW5pdGlhbFN0eWxlcztcblxuICBpZiAoc3RhdGUuZWxlbWVudHMuYXJyb3cpIHtcbiAgICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLmFycm93LnN0eWxlLCBpbml0aWFsU3R5bGVzLmFycm93KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07XG4gICAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgICB2YXIgc3R5bGVQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoc3RhdGUuc3R5bGVzLmhhc093blByb3BlcnR5KG5hbWUpID8gc3RhdGUuc3R5bGVzW25hbWVdIDogaW5pdGlhbFN0eWxlc1tuYW1lXSk7IC8vIFNldCBhbGwgdmFsdWVzIHRvIGFuIGVtcHR5IHN0cmluZyB0byB1bnNldCB0aGVtXG5cbiAgICAgIHZhciBzdHlsZSA9IHN0eWxlUHJvcGVydGllcy5yZWR1Y2UoZnVuY3Rpb24gKHN0eWxlLCBwcm9wZXJ0eSkge1xuICAgICAgICBzdHlsZVtwcm9wZXJ0eV0gPSAnJztcbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfSwge30pOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2FwcGx5U3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBhcHBseVN0eWxlcyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ2NvbXB1dGVTdHlsZXMnXVxufTsiLCJpbXBvcnQgeyBhdXRvIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG59IiwiZXhwb3J0IHZhciBtYXggPSBNYXRoLm1heDtcbmV4cG9ydCB2YXIgbWluID0gTWF0aC5taW47XG5leHBvcnQgdmFyIHJvdW5kID0gTWF0aC5yb3VuZDsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVQVN0cmluZygpIHtcbiAgdmFyIHVhRGF0YSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhO1xuXG4gIGlmICh1YURhdGEgIT0gbnVsbCAmJiB1YURhdGEuYnJhbmRzICYmIEFycmF5LmlzQXJyYXkodWFEYXRhLmJyYW5kcykpIHtcbiAgICByZXR1cm4gdWFEYXRhLmJyYW5kcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLmJyYW5kICsgXCIvXCIgKyBpdGVtLnZlcnNpb247XG4gICAgfSkuam9pbignICcpO1xuICB9XG5cbiAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7XG59IiwiaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzTGF5b3V0Vmlld3BvcnQoKSB7XG4gIHJldHVybiAhL14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChnZXRVQVN0cmluZygpKTtcbn0iLCJpbXBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGluY2x1ZGVTY2FsZSwgaXNGaXhlZFN0cmF0ZWd5KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzRml4ZWRTdHJhdGVneSA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZFN0cmF0ZWd5ID0gZmFsc2U7XG4gIH1cblxuICB2YXIgY2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSAxO1xuICB2YXIgc2NhbGVZID0gMTtcblxuICBpZiAoaW5jbHVkZVNjYWxlICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICBzY2FsZVggPSBlbGVtZW50Lm9mZnNldFdpZHRoID4gMCA/IHJvdW5kKGNsaWVudFJlY3Qud2lkdGgpIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxIDogMTtcbiAgICBzY2FsZVkgPSBlbGVtZW50Lm9mZnNldEhlaWdodCA+IDAgPyByb3VuZChjbGllbnRSZWN0LmhlaWdodCkgLyBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCAxIDogMTtcbiAgfVxuXG4gIHZhciBfcmVmID0gaXNFbGVtZW50KGVsZW1lbnQpID8gZ2V0V2luZG93KGVsZW1lbnQpIDogd2luZG93LFxuICAgICAgdmlzdWFsVmlld3BvcnQgPSBfcmVmLnZpc3VhbFZpZXdwb3J0O1xuXG4gIHZhciBhZGRWaXN1YWxPZmZzZXRzID0gIWlzTGF5b3V0Vmlld3BvcnQoKSAmJiBpc0ZpeGVkU3RyYXRlZ3k7XG4gIHZhciB4ID0gKGNsaWVudFJlY3QubGVmdCArIChhZGRWaXN1YWxPZmZzZXRzICYmIHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCA6IDApKSAvIHNjYWxlWDtcbiAgdmFyIHkgPSAoY2xpZW50UmVjdC50b3AgKyAoYWRkVmlzdWFsT2Zmc2V0cyAmJiB2aXN1YWxWaWV3cG9ydCA/IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcCA6IDApKSAvIHNjYWxlWTtcbiAgdmFyIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aCAvIHNjYWxlWDtcbiAgdmFyIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0IC8gc2NhbGVZO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB0b3A6IHksXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgbGVmdDogeCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiOyAvLyBSZXR1cm5zIHRoZSBsYXlvdXQgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuIExheW91dFxuLy8gbWVhbnMgaXQgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRMYXlvdXRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCk7IC8vIFVzZSB0aGUgY2xpZW50UmVjdCBzaXplcyBpZiBpdCdzIG5vdCBiZWVuIHRyYW5zZm9ybWVkLlxuICAvLyBGaXhlcyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEyMjNcblxuICB2YXIgd2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3Qud2lkdGggLSB3aWR0aCkgPD0gMSkge1xuICAgIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aDtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LmhlaWdodCAtIGhlaWdodCkgPD0gMSkge1xuICAgIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBlbGVtZW50Lm9mZnNldExlZnQsXG4gICAgeTogZWxlbWVudC5vZmZzZXRUb3AsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59IiwiaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGFpbnMocGFyZW50LCBjaGlsZCkge1xuICB2YXIgcm9vdE5vZGUgPSBjaGlsZC5nZXRSb290Tm9kZSAmJiBjaGlsZC5nZXRSb290Tm9kZSgpOyAvLyBGaXJzdCwgYXR0ZW1wdCB3aXRoIGZhc3RlciBuYXRpdmUgbWV0aG9kXG5cbiAgaWYgKHBhcmVudC5jb250YWlucyhjaGlsZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyB0aGVuIGZhbGxiYWNrIHRvIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiB3aXRoIFNoYWRvdyBET00gc3VwcG9ydFxuICBlbHNlIGlmIChyb290Tm9kZSAmJiBpc1NoYWRvd1Jvb3Qocm9vdE5vZGUpKSB7XG4gICAgICB2YXIgbmV4dCA9IGNoaWxkO1xuXG4gICAgICBkbyB7XG4gICAgICAgIGlmIChuZXh0ICYmIHBhcmVudC5pc1NhbWVOb2RlKG5leHQpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddOiBuZWVkIGEgYmV0dGVyIHdheSB0byBoYW5kbGUgdGhpcy4uLlxuXG5cbiAgICAgICAgbmV4dCA9IG5leHQucGFyZW50Tm9kZSB8fCBuZXh0Lmhvc3Q7XG4gICAgICB9IHdoaWxlIChuZXh0KTtcbiAgICB9IC8vIEdpdmUgdXAsIHRoZSByZXN1bHQgaXMgZmFsc2VcblxuXG4gIHJldHVybiBmYWxzZTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn0iLCJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIFsndGFibGUnLCAndGQnLCAndGgnXS5pbmRleE9mKGdldE5vZGVOYW1lKGVsZW1lbnQpKSA+PSAwO1xufSIsImltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSB7XG4gIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgcmV0dXJuICgoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudC5vd25lckRvY3VtZW50IDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gIGVsZW1lbnQuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkuZG9jdW1lbnRFbGVtZW50O1xufSIsImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFBhcmVudE5vZGUoZWxlbWVudCkge1xuICBpZiAoZ2V0Tm9kZU5hbWUoZWxlbWVudCkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgcmV0dXJuICgvLyB0aGlzIGlzIGEgcXVpY2tlciAoYnV0IGxlc3MgdHlwZSBzYWZlKSB3YXkgdG8gc2F2ZSBxdWl0ZSBzb21lIGJ5dGVzIGZyb20gdGhlIGJ1bmRsZVxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cbiAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICBlbGVtZW50LmFzc2lnbmVkU2xvdCB8fCAvLyBzdGVwIGludG8gdGhlIHNoYWRvdyBET00gb2YgdGhlIHBhcmVudCBvZiBhIHNsb3R0ZWQgbm9kZVxuICAgIGVsZW1lbnQucGFyZW50Tm9kZSB8fCAoIC8vIERPTSBFbGVtZW50IGRldGVjdGVkXG4gICAgaXNTaGFkb3dSb290KGVsZW1lbnQpID8gZWxlbWVudC5ob3N0IDogbnVsbCkgfHwgLy8gU2hhZG93Um9vdCBkZXRlY3RlZFxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBIVE1MRWxlbWVudCBpcyBhIE5vZGVcbiAgICBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkgLy8gZmFsbGJhY2tcblxuICApO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBpc1RhYmxlRWxlbWVudCBmcm9tIFwiLi9pc1RhYmxlRWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzgzN1xuICBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG59IC8vIGAub2Zmc2V0UGFyZW50YCByZXBvcnRzIGBudWxsYCBmb3IgZml4ZWQgZWxlbWVudHMsIHdoaWxlIGFic29sdXRlIGVsZW1lbnRzXG4vLyByZXR1cm4gdGhlIGNvbnRhaW5pbmcgYmxvY2tcblxuXG5mdW5jdGlvbiBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkge1xuICB2YXIgaXNGaXJlZm94ID0gL2ZpcmVmb3gvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xuICB2YXIgaXNJRSA9IC9UcmlkZW50L2kudGVzdChnZXRVQVN0cmluZygpKTtcblxuICBpZiAoaXNJRSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgLy8gSW4gSUUgOSwgMTAgYW5kIDExIGZpeGVkIGVsZW1lbnRzIGNvbnRhaW5pbmcgYmxvY2sgaXMgYWx3YXlzIGVzdGFibGlzaGVkIGJ5IHRoZSB2aWV3cG9ydFxuICAgIHZhciBlbGVtZW50Q3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcblxuICAgIGlmIChlbGVtZW50Q3NzLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuXG4gIGlmIChpc1NoYWRvd1Jvb3QoY3VycmVudE5vZGUpKSB7XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5ob3N0O1xuICB9XG5cbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmIFsnaHRtbCcsICdib2R5J10uaW5kZXhPZihnZXROb2RlTmFtZShjdXJyZW50Tm9kZSkpIDwgMCkge1xuICAgIHZhciBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnROb2RlKTsgLy8gVGhpcyBpcyBub24tZXhoYXVzdGl2ZSBidXQgY292ZXJzIHRoZSBtb3N0IGNvbW1vbiBDU1MgcHJvcGVydGllcyB0aGF0XG4gICAgLy8gY3JlYXRlIGEgY29udGFpbmluZyBibG9jay5cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuXG4gICAgaWYgKGNzcy50cmFuc2Zvcm0gIT09ICdub25lJyB8fCBjc3MucGVyc3BlY3RpdmUgIT09ICdub25lJyB8fCBjc3MuY29udGFpbiA9PT0gJ3BhaW50JyB8fCBbJ3RyYW5zZm9ybScsICdwZXJzcGVjdGl2ZSddLmluZGV4T2YoY3NzLndpbGxDaGFuZ2UpICE9PSAtMSB8fCBpc0ZpcmVmb3ggJiYgY3NzLndpbGxDaGFuZ2UgPT09ICdmaWx0ZXInIHx8IGlzRmlyZWZveCAmJiBjc3MuZmlsdGVyICYmIGNzcy5maWx0ZXIgIT09ICdub25lJykge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IC8vIEdldHMgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcG9zaXRpb25lZCBlbGVtZW50LiBIYW5kbGVzIHNvbWUgZWRnZSBjYXNlcyxcbi8vIHN1Y2ggYXMgdGFibGUgYW5jZXN0b3JzIGFuZCBjcm9zcyBicm93c2VyIGJ1Z3MuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCk7XG5cbiAgd2hpbGUgKG9mZnNldFBhcmVudCAmJiBpc1RhYmxlRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCk7XG4gIH1cblxuICBpZiAob2Zmc2V0UGFyZW50ICYmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnaHRtbCcgfHwgZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2JvZHknICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbmRvdztcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBbJ3RvcCcsICdib3R0b20nXS5pbmRleE9mKHBsYWNlbWVudCkgPj0gMCA/ICd4JyA6ICd5Jztcbn0iLCJpbXBvcnQgeyBtYXggYXMgbWF0aE1heCwgbWluIGFzIG1hdGhNaW4gfSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gd2l0aGluKG1pbiwgdmFsdWUsIG1heCkge1xuICByZXR1cm4gbWF0aE1heChtaW4sIG1hdGhNaW4odmFsdWUsIG1heCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhpbk1heENsYW1wKG1pbiwgdmFsdWUsIG1heCkge1xuICB2YXIgdiA9IHdpdGhpbihtaW4sIHZhbHVlLCBtYXgpO1xuICByZXR1cm4gdiA+IG1heCA/IG1heCA6IHY7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RnJlc2hTaWRlT2JqZWN0KCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMFxuICB9O1xufSIsImltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4vZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZVBhZGRpbmdPYmplY3QocGFkZGluZ09iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ2V0RnJlc2hTaWRlT2JqZWN0KCksIHBhZGRpbmdPYmplY3QpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4cGFuZFRvSGFzaE1hcCh2YWx1ZSwga2V5cykge1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoZnVuY3Rpb24gKGhhc2hNYXAsIGtleSkge1xuICAgIGhhc2hNYXBba2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiBoYXNoTWFwO1xuICB9LCB7fSk7XG59IiwiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuLi9kb20tdXRpbHMvY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgd2l0aGluIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi4vdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuLi91dGlscy9leHBhbmRUb0hhc2hNYXAuanNcIjtcbmltcG9ydCB7IGxlZnQsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdG9wLCBib3R0b20gfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdG9QYWRkaW5nT2JqZWN0ID0gZnVuY3Rpb24gdG9QYWRkaW5nT2JqZWN0KHBhZGRpbmcsIHN0YXRlKSB7XG4gIHBhZGRpbmcgPSB0eXBlb2YgcGFkZGluZyA9PT0gJ2Z1bmN0aW9uJyA/IHBhZGRpbmcoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiBwYWRkaW5nO1xuICByZXR1cm4gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbn07XG5cbmZ1bmN0aW9uIGFycm93KF9yZWYpIHtcbiAgdmFyIF9zdGF0ZSRtb2RpZmllcnNEYXRhJDtcblxuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgYXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGlzVmVydGljYWwgPSBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgaWYgKCFhcnJvd0VsZW1lbnQgfHwgIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGFkZGluZ09iamVjdCA9IHRvUGFkZGluZ09iamVjdChvcHRpb25zLnBhZGRpbmcsIHN0YXRlKTtcbiAgdmFyIGFycm93UmVjdCA9IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KTtcbiAgdmFyIG1pblByb3AgPSBheGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICB2YXIgbWF4UHJvcCA9IGF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICB2YXIgZW5kRGlmZiA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtsZW5dICsgc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdIC0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnBvcHBlcltsZW5dO1xuICB2YXIgc3RhcnREaWZmID0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGFycm93RWxlbWVudCk7XG4gIHZhciBjbGllbnRTaXplID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBheGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRIZWlnaHQgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoIHx8IDAgOiAwO1xuICB2YXIgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7IC8vIE1ha2Ugc3VyZSB0aGUgYXJyb3cgZG9lc24ndCBvdmVyZmxvdyB0aGUgcG9wcGVyIGlmIHRoZSBjZW50ZXIgcG9pbnQgaXNcbiAgLy8gb3V0c2lkZSBvZiB0aGUgcG9wcGVyIGJvdW5kc1xuXG4gIHZhciBtaW4gPSBwYWRkaW5nT2JqZWN0W21pblByb3BdO1xuICB2YXIgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93UmVjdFtsZW5dIC0gcGFkZGluZ09iamVjdFttYXhQcm9wXTtcbiAgdmFyIGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dSZWN0W2xlbl0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gIHZhciBvZmZzZXQgPSB3aXRoaW4obWluLCBjZW50ZXIsIG1heCk7IC8vIFByZXZlbnRzIGJyZWFraW5nIHN5bnRheCBoaWdobGlnaHRpbmcuLi5cblxuICB2YXIgYXhpc1Byb3AgPSBheGlzO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gKF9zdGF0ZSRtb2RpZmllcnNEYXRhJCA9IHt9LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSRbYXhpc1Byb3BdID0gb2Zmc2V0LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQuY2VudGVyT2Zmc2V0ID0gb2Zmc2V0IC0gY2VudGVyLCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQpO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQsXG4gICAgICBhcnJvd0VsZW1lbnQgPSBfb3B0aW9ucyRlbGVtZW50ID09PSB2b2lkIDAgPyAnW2RhdGEtcG9wcGVyLWFycm93XScgOiBfb3B0aW9ucyRlbGVtZW50O1xuXG4gIGlmIChhcnJvd0VsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBDU1Mgc2VsZWN0b3JcblxuXG4gIGlmICh0eXBlb2YgYXJyb3dFbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLnBvcHBlci5xdWVyeVNlbGVjdG9yKGFycm93RWxlbWVudCk7XG5cbiAgICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGFpbnMoc3RhdGUuZWxlbWVudHMucG9wcGVyLCBhcnJvd0VsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGUuZWxlbWVudHMuYXJyb3cgPSBhcnJvd0VsZW1lbnQ7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcnJvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBhcnJvdyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXVxufTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcbn0iLCJpbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20sIGVuZCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHVuc2V0U2lkZXMgPSB7XG4gIHRvcDogJ2F1dG8nLFxuICByaWdodDogJ2F1dG8nLFxuICBib3R0b206ICdhdXRvJyxcbiAgbGVmdDogJ2F1dG8nXG59OyAvLyBSb3VuZCB0aGUgb2Zmc2V0cyB0byB0aGUgbmVhcmVzdCBzdWl0YWJsZSBzdWJwaXhlbCBiYXNlZCBvbiB0aGUgRFBSLlxuLy8gWm9vbWluZyBjYW4gY2hhbmdlIHRoZSBEUFIsIGJ1dCBpdCBzZWVtcyB0byByZXBvcnQgYSB2YWx1ZSB0aGF0IHdpbGxcbi8vIGNsZWFubHkgZGl2aWRlIHRoZSB2YWx1ZXMgaW50byB0aGUgYXBwcm9wcmlhdGUgc3VicGl4ZWxzLlxuXG5mdW5jdGlvbiByb3VuZE9mZnNldHNCeURQUihfcmVmLCB3aW4pIHtcbiAgdmFyIHggPSBfcmVmLngsXG4gICAgICB5ID0gX3JlZi55O1xuICB2YXIgZHByID0gd2luLmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgcmV0dXJuIHtcbiAgICB4OiByb3VuZCh4ICogZHByKSAvIGRwciB8fCAwLFxuICAgIHk6IHJvdW5kKHkgKiBkcHIpIC8gZHByIHx8IDBcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFRvU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBfT2JqZWN0JGFzc2lnbjI7XG5cbiAgdmFyIHBvcHBlciA9IF9yZWYyLnBvcHBlcixcbiAgICAgIHBvcHBlclJlY3QgPSBfcmVmMi5wb3BwZXJSZWN0LFxuICAgICAgcGxhY2VtZW50ID0gX3JlZjIucGxhY2VtZW50LFxuICAgICAgdmFyaWF0aW9uID0gX3JlZjIudmFyaWF0aW9uLFxuICAgICAgb2Zmc2V0cyA9IF9yZWYyLm9mZnNldHMsXG4gICAgICBwb3NpdGlvbiA9IF9yZWYyLnBvc2l0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX3JlZjIuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgYWRhcHRpdmUgPSBfcmVmMi5hZGFwdGl2ZSxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9yZWYyLnJvdW5kT2Zmc2V0cyxcbiAgICAgIGlzRml4ZWQgPSBfcmVmMi5pc0ZpeGVkO1xuICB2YXIgX29mZnNldHMkeCA9IG9mZnNldHMueCxcbiAgICAgIHggPSBfb2Zmc2V0cyR4ID09PSB2b2lkIDAgPyAwIDogX29mZnNldHMkeCxcbiAgICAgIF9vZmZzZXRzJHkgPSBvZmZzZXRzLnksXG4gICAgICB5ID0gX29mZnNldHMkeSA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHk7XG5cbiAgdmFyIF9yZWYzID0gdHlwZW9mIHJvdW5kT2Zmc2V0cyA9PT0gJ2Z1bmN0aW9uJyA/IHJvdW5kT2Zmc2V0cyh7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0pIDoge1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xuXG4gIHggPSBfcmVmMy54O1xuICB5ID0gX3JlZjMueTtcbiAgdmFyIGhhc1ggPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd4Jyk7XG4gIHZhciBoYXNZID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneScpO1xuICB2YXIgc2lkZVggPSBsZWZ0O1xuICB2YXIgc2lkZVkgPSB0b3A7XG4gIHZhciB3aW4gPSB3aW5kb3c7XG5cbiAgaWYgKGFkYXB0aXZlKSB7XG4gICAgdmFyIG9mZnNldFBhcmVudCA9IGdldE9mZnNldFBhcmVudChwb3BwZXIpO1xuICAgIHZhciBoZWlnaHRQcm9wID0gJ2NsaWVudEhlaWdodCc7XG4gICAgdmFyIHdpZHRoUHJvcCA9ICdjbGllbnRXaWR0aCc7XG5cbiAgICBpZiAob2Zmc2V0UGFyZW50ID09PSBnZXRXaW5kb3cocG9wcGVyKSkge1xuICAgICAgb2Zmc2V0UGFyZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KHBvcHBlcik7XG5cbiAgICAgIGlmIChnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gIT09ICdzdGF0aWMnICYmIHBvc2l0aW9uID09PSAnYWJzb2x1dGUnKSB7XG4gICAgICAgIGhlaWdodFByb3AgPSAnc2Nyb2xsSGVpZ2h0JztcbiAgICAgICAgd2lkdGhQcm9wID0gJ3Njcm9sbFdpZHRoJztcbiAgICAgIH1cbiAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhc3RdOiBmb3JjZSB0eXBlIHJlZmluZW1lbnQsIHdlIGNvbXBhcmUgb2Zmc2V0UGFyZW50IHdpdGggd2luZG93IGFib3ZlLCBidXQgRmxvdyBkb2Vzbid0IGRldGVjdCBpdFxuXG5cbiAgICBvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQ7XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSB0b3AgfHwgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCBwbGFjZW1lbnQgPT09IHJpZ2h0KSAmJiB2YXJpYXRpb24gPT09IGVuZCkge1xuICAgICAgc2lkZVkgPSBib3R0b207XG4gICAgICB2YXIgb2Zmc2V0WSA9IGlzRml4ZWQgJiYgb2Zmc2V0UGFyZW50ID09PSB3aW4gJiYgd2luLnZpc3VhbFZpZXdwb3J0ID8gd2luLnZpc3VhbFZpZXdwb3J0LmhlaWdodCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W2hlaWdodFByb3BdO1xuICAgICAgeSAtPSBvZmZzZXRZIC0gcG9wcGVyUmVjdC5oZWlnaHQ7XG4gICAgICB5ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSBsZWZ0IHx8IChwbGFjZW1lbnQgPT09IHRvcCB8fCBwbGFjZW1lbnQgPT09IGJvdHRvbSkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVYID0gcmlnaHQ7XG4gICAgICB2YXIgb2Zmc2V0WCA9IGlzRml4ZWQgJiYgb2Zmc2V0UGFyZW50ID09PSB3aW4gJiYgd2luLnZpc3VhbFZpZXdwb3J0ID8gd2luLnZpc3VhbFZpZXdwb3J0LndpZHRoIDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICBvZmZzZXRQYXJlbnRbd2lkdGhQcm9wXTtcbiAgICAgIHggLT0gb2Zmc2V0WCAtIHBvcHBlclJlY3Qud2lkdGg7XG4gICAgICB4ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29tbW9uU3R5bGVzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgcG9zaXRpb246IHBvc2l0aW9uXG4gIH0sIGFkYXB0aXZlICYmIHVuc2V0U2lkZXMpO1xuXG4gIHZhciBfcmVmNCA9IHJvdW5kT2Zmc2V0cyA9PT0gdHJ1ZSA/IHJvdW5kT2Zmc2V0c0J5RFBSKHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfSwgZ2V0V2luZG93KHBvcHBlcikpIDoge1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xuXG4gIHggPSBfcmVmNC54O1xuICB5ID0gX3JlZjQueTtcblxuICBpZiAoZ3B1QWNjZWxlcmF0aW9uKSB7XG4gICAgdmFyIF9PYmplY3QkYXNzaWduO1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduID0ge30sIF9PYmplY3QkYXNzaWduW3NpZGVZXSA9IGhhc1kgPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ25bc2lkZVhdID0gaGFzWCA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbi50cmFuc2Zvcm0gPSAod2luLmRldmljZVBpeGVsUmF0aW8gfHwgMSkgPD0gMSA/IFwidHJhbnNsYXRlKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgpXCIgOiBcInRyYW5zbGF0ZTNkKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgsIDApXCIsIF9PYmplY3QkYXNzaWduKSk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24yID0ge30sIF9PYmplY3QkYXNzaWduMltzaWRlWV0gPSBoYXNZID8geSArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjJbc2lkZVhdID0gaGFzWCA/IHggKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yLnRyYW5zZm9ybSA9ICcnLCBfT2JqZWN0JGFzc2lnbjIpKTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVN0eWxlcyhfcmVmNSkge1xuICB2YXIgc3RhdGUgPSBfcmVmNS5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmNS5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID0gb3B0aW9ucy5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRncHVBY2NlbGVyYXQsXG4gICAgICBfb3B0aW9ucyRhZGFwdGl2ZSA9IG9wdGlvbnMuYWRhcHRpdmUsXG4gICAgICBhZGFwdGl2ZSA9IF9vcHRpb25zJGFkYXB0aXZlID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkYWRhcHRpdmUsXG4gICAgICBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPSBvcHRpb25zLnJvdW5kT2Zmc2V0cyxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHJvdW5kT2Zmc2V0cztcbiAgdmFyIGNvbW1vblN0eWxlcyA9IHtcbiAgICBwbGFjZW1lbnQ6IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KSxcbiAgICB2YXJpYXRpb246IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHBvcHBlcjogc3RhdGUuZWxlbWVudHMucG9wcGVyLFxuICAgIHBvcHBlclJlY3Q6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBncHVBY2NlbGVyYXRpb246IGdwdUFjY2VsZXJhdGlvbixcbiAgICBpc0ZpeGVkOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnXG4gIH07XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5wb3BwZXIsIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLFxuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBhZGFwdGl2ZTogYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLmFycm93ID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLmFycm93LCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3csXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGFkYXB0aXZlOiBmYWxzZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcGxhY2VtZW50Jzogc3RhdGUucGxhY2VtZW50XG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnY29tcHV0ZVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnYmVmb3JlV3JpdGUnLFxuICBmbjogY29tcHV0ZVN0eWxlcyxcbiAgZGF0YToge31cbn07IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciBwYXNzaXZlID0ge1xuICBwYXNzaXZlOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgaW5zdGFuY2UgPSBfcmVmLmluc3RhbmNlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJHNjcm9sbCA9IG9wdGlvbnMuc2Nyb2xsLFxuICAgICAgc2Nyb2xsID0gX29wdGlvbnMkc2Nyb2xsID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkc2Nyb2xsLFxuICAgICAgX29wdGlvbnMkcmVzaXplID0gb3B0aW9ucy5yZXNpemUsXG4gICAgICByZXNpemUgPSBfb3B0aW9ucyRyZXNpemUgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyZXNpemU7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coc3RhdGUuZWxlbWVudHMucG9wcGVyKTtcbiAgdmFyIHNjcm9sbFBhcmVudHMgPSBbXS5jb25jYXQoc3RhdGUuc2Nyb2xsUGFyZW50cy5yZWZlcmVuY2UsIHN0YXRlLnNjcm9sbFBhcmVudHMucG9wcGVyKTtcblxuICBpZiAoc2Nyb2xsKSB7XG4gICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgIHNjcm9sbFBhcmVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHJlc2l6ZSkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2Nyb2xsKSB7XG4gICAgICBzY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHNjcm9sbFBhcmVudCkge1xuICAgICAgICBzY3JvbGxQYXJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChyZXNpemUpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH1cbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2V2ZW50TGlzdGVuZXJzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBmdW5jdGlvbiBmbigpIHt9LFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgZGF0YToge31cbn07IiwidmFyIGhhc2ggPSB7XG4gIGxlZnQ6ICdyaWdodCcsXG4gIHJpZ2h0OiAnbGVmdCcsXG4gIGJvdHRvbTogJ3RvcCcsXG4gIHRvcDogJ2JvdHRvbSdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59IiwidmFyIGhhc2ggPSB7XG4gIHN0YXJ0OiAnZW5kJyxcbiAgZW5kOiAnc3RhcnQnXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGwobm9kZSkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KG5vZGUpO1xuICB2YXIgc2Nyb2xsTGVmdCA9IHdpbi5wYWdlWE9mZnNldDtcbiAgdmFyIHNjcm9sbFRvcCA9IHdpbi5wYWdlWU9mZnNldDtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wXG4gIH07XG59IiwiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSB7XG4gIC8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbiAgLy8gaW5jb3JyZWN0IGZvciBSVEwuXG4gIC8vIFBvcHBlciAxIGlzIGJyb2tlbiBpbiB0aGlzIGNhc2UgYW5kIG5ldmVyIGhhZCBhIGJ1ZyByZXBvcnQgc28gbGV0J3MgYXNzdW1lXG4gIC8vIGl0J3Mgbm90IGFuIGlzc3VlLiBJIGRvbid0IHRoaW5rIGFueW9uZSBldmVyIHNwZWNpZmllcyB3aWR0aCBvbiA8aHRtbD5cbiAgLy8gYW55d2F5LlxuICAvLyBCcm93c2VycyB3aGVyZSB0aGUgbGVmdCBzY3JvbGxiYXIgZG9lc24ndCBjYXVzZSBhbiBpc3N1ZSByZXBvcnQgYDBgIGZvclxuICAvLyB0aGlzIChlLmcuIEVkZ2UgMjAxOSwgSUUxMSwgU2FmYXJpKVxuICByZXR1cm4gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkubGVmdCArIGdldFdpbmRvd1Njcm9sbChlbGVtZW50KS5zY3JvbGxMZWZ0O1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIHZhciB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgdmFyIHggPSAwO1xuICB2YXIgeSA9IDA7XG5cbiAgaWYgKHZpc3VhbFZpZXdwb3J0KSB7XG4gICAgd2lkdGggPSB2aXN1YWxWaWV3cG9ydC53aWR0aDtcbiAgICBoZWlnaHQgPSB2aXN1YWxWaWV3cG9ydC5oZWlnaHQ7XG4gICAgdmFyIGxheW91dFZpZXdwb3J0ID0gaXNMYXlvdXRWaWV3cG9ydCgpO1xuXG4gICAgaWYgKGxheW91dFZpZXdwb3J0IHx8ICFsYXlvdXRWaWV3cG9ydCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHggKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpLFxuICAgIHk6IHlcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCB7IG1heCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGVcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHdpblNjcm9sbCA9IGdldFdpbmRvd1Njcm9sbChlbGVtZW50KTtcbiAgdmFyIGJvZHkgPSAoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHk7XG4gIHZhciB3aWR0aCA9IG1heChodG1sLnNjcm9sbFdpZHRoLCBodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5zY3JvbGxXaWR0aCA6IDAsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCk7XG4gIHZhciBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5ID8gYm9keS5zY3JvbGxIZWlnaHQgOiAwLCBib2R5ID8gYm9keS5jbGllbnRIZWlnaHQgOiAwKTtcbiAgdmFyIHggPSAtd2luU2Nyb2xsLnNjcm9sbExlZnQgKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpO1xuICB2YXIgeSA9IC13aW5TY3JvbGwuc2Nyb2xsVG9wO1xuXG4gIGlmIChnZXRDb21wdXRlZFN0eWxlKGJvZHkgfHwgaHRtbCkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCkgLSB3aWR0aDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsImltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzU2Nyb2xsUGFyZW50KGVsZW1lbnQpIHtcbiAgLy8gRmlyZWZveCB3YW50cyB1cyB0byBjaGVjayBgLXhgIGFuZCBgLXlgIHZhcmlhdGlvbnMgYXMgd2VsbFxuICB2YXIgX2dldENvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLFxuICAgICAgb3ZlcmZsb3cgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvdyxcbiAgICAgIG92ZXJmbG93WCA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93WCxcbiAgICAgIG92ZXJmbG93WSA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93WTtcblxuICByZXR1cm4gL2F1dG98c2Nyb2xsfG92ZXJsYXl8aGlkZGVuLy50ZXN0KG92ZXJmbG93ICsgb3ZlcmZsb3dZICsgb3ZlcmZsb3dYKTtcbn0iLCJpbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChub2RlKSB7XG4gIGlmIChbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXS5pbmRleE9mKGdldE5vZGVOYW1lKG5vZGUpKSA+PSAwKSB7XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuXG4gIGlmIChpc0hUTUxFbGVtZW50KG5vZGUpICYmIGlzU2Nyb2xsUGFyZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpO1xufSIsImltcG9ydCBnZXRTY3JvbGxQYXJlbnQgZnJvbSBcIi4vZ2V0U2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG4vKlxuZ2l2ZW4gYSBET00gZWxlbWVudCwgcmV0dXJuIHRoZSBsaXN0IG9mIGFsbCBzY3JvbGwgcGFyZW50cywgdXAgdGhlIGxpc3Qgb2YgYW5jZXNvcnNcbnVudGlsIHdlIGdldCB0byB0aGUgdG9wIHdpbmRvdyBvYmplY3QuIFRoaXMgbGlzdCBpcyB3aGF0IHdlIGF0dGFjaCBzY3JvbGwgbGlzdGVuZXJzXG50bywgYmVjYXVzZSBpZiBhbnkgb2YgdGhlc2UgcGFyZW50IGVsZW1lbnRzIHNjcm9sbCwgd2UnbGwgbmVlZCB0byByZS1jYWxjdWxhdGUgdGhlXG5yZWZlcmVuY2UgZWxlbWVudCdzIHBvc2l0aW9uLlxuKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGlzdFNjcm9sbFBhcmVudHMoZWxlbWVudCwgbGlzdCkge1xuICB2YXIgX2VsZW1lbnQkb3duZXJEb2N1bWVuO1xuXG4gIGlmIChsaXN0ID09PSB2b2lkIDApIHtcbiAgICBsaXN0ID0gW107XG4gIH1cblxuICB2YXIgc2Nyb2xsUGFyZW50ID0gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQpO1xuICB2YXIgaXNCb2R5ID0gc2Nyb2xsUGFyZW50ID09PSAoKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5KTtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhzY3JvbGxQYXJlbnQpO1xuICB2YXIgdGFyZ2V0ID0gaXNCb2R5ID8gW3dpbl0uY29uY2F0KHdpbi52aXN1YWxWaWV3cG9ydCB8fCBbXSwgaXNTY3JvbGxQYXJlbnQoc2Nyb2xsUGFyZW50KSA/IHNjcm9sbFBhcmVudCA6IFtdKSA6IHNjcm9sbFBhcmVudDtcbiAgdmFyIHVwZGF0ZWRMaXN0ID0gbGlzdC5jb25jYXQodGFyZ2V0KTtcbiAgcmV0dXJuIGlzQm9keSA/IHVwZGF0ZWRMaXN0IDogLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IGlzQm9keSB0ZWxscyB1cyB0YXJnZXQgd2lsbCBiZSBhbiBIVE1MRWxlbWVudCBoZXJlXG4gIHVwZGF0ZWRMaXN0LmNvbmNhdChsaXN0U2Nyb2xsUGFyZW50cyhnZXRQYXJlbnROb2RlKHRhcmdldCkpKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWN0VG9DbGllbnRSZWN0KHJlY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHJlY3QsIHtcbiAgICBsZWZ0OiByZWN0LngsXG4gICAgdG9wOiByZWN0LnksXG4gICAgcmlnaHQ6IHJlY3QueCArIHJlY3Qud2lkdGgsXG4gICAgYm90dG9tOiByZWN0LnkgKyByZWN0LmhlaWdodFxuICB9KTtcbn0iLCJpbXBvcnQgeyB2aWV3cG9ydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZpZXdwb3J0UmVjdCBmcm9tIFwiLi9nZXRWaWV3cG9ydFJlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudFJlY3QgZnJvbSBcIi4vZ2V0RG9jdW1lbnRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vbGlzdFNjcm9sbFBhcmVudHMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4vZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi9jb250YWlucy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tIFwiLi4vdXRpbHMvcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgbWF4LCBtaW4gfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBmYWxzZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICByZWN0LnRvcCA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRUb3A7XG4gIHJlY3QubGVmdCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50TGVmdDtcbiAgcmVjdC5ib3R0b20gPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnJpZ2h0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC53aWR0aCA9IGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3QuaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QueCA9IHJlY3QubGVmdDtcbiAgcmVjdC55ID0gcmVjdC50b3A7XG4gIHJldHVybiByZWN0O1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpIHtcbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50ID09PSB2aWV3cG9ydCA/IHJlY3RUb0NsaWVudFJlY3QoZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSkgOiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpID8gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSA6IHJlY3RUb0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkpO1xufSAvLyBBIFwiY2xpcHBpbmcgcGFyZW50XCIgaXMgYW4gb3ZlcmZsb3dhYmxlIGNvbnRhaW5lciB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgb3ZlcmZsb3dpbmcgZWxlbWVudHMgd2l0aCBhIHBvc2l0aW9uIGRpZmZlcmVudCBmcm9tXG4vLyBgaW5pdGlhbGBcblxuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkge1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gbGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG4gIHZhciBjYW5Fc2NhcGVDbGlwcGluZyA9IFsnYWJzb2x1dGUnLCAnZml4ZWQnXS5pbmRleE9mKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24pID49IDA7XG4gIHZhciBjbGlwcGVyRWxlbWVudCA9IGNhbkVzY2FwZUNsaXBwaW5nICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkgOiBlbGVtZW50O1xuXG4gIGlmICghaXNFbGVtZW50KGNsaXBwZXJFbGVtZW50KSkge1xuICAgIHJldHVybiBbXTtcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMTQxNFxuXG5cbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50cy5maWx0ZXIoZnVuY3Rpb24gKGNsaXBwaW5nUGFyZW50KSB7XG4gICAgcmV0dXJuIGlzRWxlbWVudChjbGlwcGluZ1BhcmVudCkgJiYgY29udGFpbnMoY2xpcHBpbmdQYXJlbnQsIGNsaXBwZXJFbGVtZW50KSAmJiBnZXROb2RlTmFtZShjbGlwcGluZ1BhcmVudCkgIT09ICdib2R5JztcbiAgfSk7XG59IC8vIEdldHMgdGhlIG1heGltdW0gYXJlYSB0aGF0IHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gZHVlIHRvIGFueSBudW1iZXIgb2Zcbi8vIGNsaXBwaW5nIHBhcmVudHNcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDbGlwcGluZ1JlY3QoZWxlbWVudCwgYm91bmRhcnksIHJvb3RCb3VuZGFyeSwgc3RyYXRlZ3kpIHtcbiAgdmFyIG1haW5DbGlwcGluZ1BhcmVudHMgPSBib3VuZGFyeSA9PT0gJ2NsaXBwaW5nUGFyZW50cycgPyBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gW10uY29uY2F0KG1haW5DbGlwcGluZ1BhcmVudHMsIFtyb290Qm91bmRhcnldKTtcbiAgdmFyIGZpcnN0Q2xpcHBpbmdQYXJlbnQgPSBjbGlwcGluZ1BhcmVudHNbMF07XG4gIHZhciBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ1BhcmVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2NSZWN0LCBjbGlwcGluZ1BhcmVudCkge1xuICAgIHZhciByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBmaXJzdENsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkpO1xuICBjbGlwcGluZ1JlY3Qud2lkdGggPSBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LmhlaWdodCA9IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wO1xuICBjbGlwcGluZ1JlY3QueCA9IGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QueSA9IGNsaXBwaW5nUmVjdC50b3A7XG4gIHJldHVybiBjbGlwcGluZ1JlY3Q7XG59IiwiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4vZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHN0YXJ0LCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHJlZmVyZW5jZSA9IF9yZWYucmVmZXJlbmNlLFxuICAgICAgZWxlbWVudCA9IF9yZWYuZWxlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudCA/IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciB2YXJpYXRpb24gPSBwbGFjZW1lbnQgPyBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZWxlbWVudC53aWR0aCAvIDI7XG4gIHZhciBjb21tb25ZID0gcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0IC8gMiAtIGVsZW1lbnQuaGVpZ2h0IC8gMjtcbiAgdmFyIG9mZnNldHM7XG5cbiAgc3dpdGNoIChiYXNlUGxhY2VtZW50KSB7XG4gICAgY2FzZSB0b3A6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSAtIGVsZW1lbnQuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGJvdHRvbTpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSByaWdodDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGxlZnQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCAtIGVsZW1lbnQud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cblxuICB2YXIgbWFpbkF4aXMgPSBiYXNlUGxhY2VtZW50ID8gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpIDogbnVsbDtcblxuICBpZiAobWFpbkF4aXMgIT0gbnVsbCkge1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgc3dpdGNoICh2YXJpYXRpb24pIHtcbiAgICAgIGNhc2Ugc3RhcnQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gLSAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIGVuZDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPSBvZmZzZXRzW21haW5BeGlzXSArIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9mZnNldHM7XG59IiwiaW1wb3J0IGdldENsaXBwaW5nUmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldENsaXBwaW5nUmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuL2NvbXB1dGVPZmZzZXRzLmpzXCI7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tIFwiLi9yZWN0VG9DbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgeyBjbGlwcGluZ1BhcmVudHMsIHJlZmVyZW5jZSwgcG9wcGVyLCBib3R0b20sIHRvcCwgcmlnaHQsIGJhc2VQbGFjZW1lbnRzLCB2aWV3cG9ydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgbWVyZ2VQYWRkaW5nT2JqZWN0IGZyb20gXCIuL21lcmdlUGFkZGluZ09iamVjdC5qc1wiO1xuaW1wb3J0IGV4cGFuZFRvSGFzaE1hcCBmcm9tIFwiLi9leHBhbmRUb0hhc2hNYXAuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIF9vcHRpb25zJHBsYWNlbWVudCA9IF9vcHRpb25zLnBsYWNlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9vcHRpb25zJHBsYWNlbWVudCA9PT0gdm9pZCAwID8gc3RhdGUucGxhY2VtZW50IDogX29wdGlvbnMkcGxhY2VtZW50LFxuICAgICAgX29wdGlvbnMkc3RyYXRlZ3kgPSBfb3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIHN0cmF0ZWd5ID0gX29wdGlvbnMkc3RyYXRlZ3kgPT09IHZvaWQgMCA/IHN0YXRlLnN0cmF0ZWd5IDogX29wdGlvbnMkc3RyYXRlZ3ksXG4gICAgICBfb3B0aW9ucyRib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgYm91bmRhcnkgPSBfb3B0aW9ucyRib3VuZGFyeSA9PT0gdm9pZCAwID8gY2xpcHBpbmdQYXJlbnRzIDogX29wdGlvbnMkYm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRyb290Qm91bmRhcnkgPSBfb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBfb3B0aW9ucyRyb290Qm91bmRhcnkgPT09IHZvaWQgMCA/IHZpZXdwb3J0IDogX29wdGlvbnMkcm9vdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkZWxlbWVudENvbnRlID0gX29wdGlvbnMuZWxlbWVudENvbnRleHQsXG4gICAgICBlbGVtZW50Q29udGV4dCA9IF9vcHRpb25zJGVsZW1lbnRDb250ZSA9PT0gdm9pZCAwID8gcG9wcGVyIDogX29wdGlvbnMkZWxlbWVudENvbnRlLFxuICAgICAgX29wdGlvbnMkYWx0Qm91bmRhcnkgPSBfb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMkYWx0Qm91bmRhcnkgPT09IHZvaWQgMCA/IGZhbHNlIDogX29wdGlvbnMkYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRwYWRkaW5nID0gX29wdGlvbnMucGFkZGluZyxcbiAgICAgIHBhZGRpbmcgPSBfb3B0aW9ucyRwYWRkaW5nID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkcGFkZGluZztcbiAgdmFyIHBhZGRpbmdPYmplY3QgPSBtZXJnZVBhZGRpbmdPYmplY3QodHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gcGFkZGluZyA6IGV4cGFuZFRvSGFzaE1hcChwYWRkaW5nLCBiYXNlUGxhY2VtZW50cykpO1xuICB2YXIgYWx0Q29udGV4dCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyByZWZlcmVuY2UgOiBwb3BwZXI7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW2FsdEJvdW5kYXJ5ID8gYWx0Q29udGV4dCA6IGVsZW1lbnRDb250ZXh0XTtcbiAgdmFyIGNsaXBwaW5nQ2xpZW50UmVjdCA9IGdldENsaXBwaW5nUmVjdChpc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50IDogZWxlbWVudC5jb250ZXh0RWxlbWVudCB8fCBnZXREb2N1bWVudEVsZW1lbnQoc3RhdGUuZWxlbWVudHMucG9wcGVyKSwgYm91bmRhcnksIHJvb3RCb3VuZGFyeSwgc3RyYXRlZ3kpO1xuICB2YXIgcmVmZXJlbmNlQ2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChzdGF0ZS5lbGVtZW50cy5yZWZlcmVuY2UpO1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHJlZmVyZW5jZUNsaWVudFJlY3QsXG4gICAgZWxlbWVudDogcG9wcGVyUmVjdCxcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICB9KTtcbiAgdmFyIHBvcHBlckNsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KE9iamVjdC5hc3NpZ24oe30sIHBvcHBlclJlY3QsIHBvcHBlck9mZnNldHMpKTtcbiAgdmFyIGVsZW1lbnRDbGllbnRSZWN0ID0gZWxlbWVudENvbnRleHQgPT09IHBvcHBlciA/IHBvcHBlckNsaWVudFJlY3QgOiByZWZlcmVuY2VDbGllbnRSZWN0OyAvLyBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyByZWN0XG4gIC8vIDAgb3IgbmVnYXRpdmUgPSB3aXRoaW4gdGhlIGNsaXBwaW5nIHJlY3RcblxuICB2YXIgb3ZlcmZsb3dPZmZzZXRzID0ge1xuICAgIHRvcDogY2xpcHBpbmdDbGllbnRSZWN0LnRvcCAtIGVsZW1lbnRDbGllbnRSZWN0LnRvcCArIHBhZGRpbmdPYmplY3QudG9wLFxuICAgIGJvdHRvbTogZWxlbWVudENsaWVudFJlY3QuYm90dG9tIC0gY2xpcHBpbmdDbGllbnRSZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tLFxuICAgIGxlZnQ6IGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCxcbiAgICByaWdodDogZWxlbWVudENsaWVudFJlY3QucmlnaHQgLSBjbGlwcGluZ0NsaWVudFJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0XG4gIH07XG4gIHZhciBvZmZzZXREYXRhID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQ7IC8vIE9mZnNldHMgY2FuIGJlIGFwcGxpZWQgb25seSB0byB0aGUgcG9wcGVyIGVsZW1lbnRcblxuICBpZiAoZWxlbWVudENvbnRleHQgPT09IHBvcHBlciAmJiBvZmZzZXREYXRhKSB7XG4gICAgdmFyIG9mZnNldCA9IG9mZnNldERhdGFbcGxhY2VtZW50XTtcbiAgICBPYmplY3Qua2V5cyhvdmVyZmxvd09mZnNldHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgdmFyIG11bHRpcGx5ID0gW3JpZ2h0LCBib3R0b21dLmluZGV4T2Yoa2V5KSA+PSAwID8gMSA6IC0xO1xuICAgICAgdmFyIGF4aXMgPSBbdG9wLCBib3R0b21dLmluZGV4T2Yoa2V5KSA+PSAwID8gJ3knIDogJ3gnO1xuICAgICAgb3ZlcmZsb3dPZmZzZXRzW2tleV0gKz0gb2Zmc2V0W2F4aXNdICogbXVsdGlwbHk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gb3ZlcmZsb3dPZmZzZXRzO1xufSIsImltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyB2YXJpYXRpb25QbGFjZW1lbnRzLCBiYXNlUGxhY2VtZW50cywgcGxhY2VtZW50cyBhcyBhbGxQbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4vZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVBdXRvUGxhY2VtZW50KHN0YXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgcGxhY2VtZW50ID0gX29wdGlvbnMucGxhY2VtZW50LFxuICAgICAgYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmcgPSBfb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucy5mbGlwVmFyaWF0aW9ucyxcbiAgICAgIF9vcHRpb25zJGFsbG93ZWRBdXRvUCA9IF9vcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50cyA9IF9vcHRpb25zJGFsbG93ZWRBdXRvUCA9PT0gdm9pZCAwID8gYWxsUGxhY2VtZW50cyA6IF9vcHRpb25zJGFsbG93ZWRBdXRvUDtcbiAgdmFyIHZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpO1xuICB2YXIgcGxhY2VtZW50cyA9IHZhcmlhdGlvbiA/IGZsaXBWYXJpYXRpb25zID8gdmFyaWF0aW9uUGxhY2VtZW50cyA6IHZhcmlhdGlvblBsYWNlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHZhcmlhdGlvbjtcbiAgfSkgOiBiYXNlUGxhY2VtZW50cztcbiAgdmFyIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBhbGxvd2VkQXV0b1BsYWNlbWVudHMuaW5kZXhPZihwbGFjZW1lbnQpID49IDA7XG4gIH0pO1xuXG4gIGlmIChhbGxvd2VkUGxhY2VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHM7XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV06IEZsb3cgc2VlbXMgdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIHR3byBhcnJheSB1bmlvbnMuLi5cblxuXG4gIHZhciBvdmVyZmxvd3MgPSBhbGxvd2VkUGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgYWNjW3BsYWNlbWVudF0gPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmdcbiAgICB9KVtnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCldO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG92ZXJmbG93cykuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBvdmVyZmxvd3NbYV0gLSBvdmVyZmxvd3NbYl07XG4gIH0pO1xufSIsImltcG9ydCBnZXRPcHBvc2l0ZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgY29tcHV0ZUF1dG9QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyBib3R0b20sIHRvcCwgc3RhcnQsIHJpZ2h0LCBsZWZ0LCBhdXRvIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5mdW5jdGlvbiBnZXRFeHBhbmRlZEZhbGxiYWNrUGxhY2VtZW50cyhwbGFjZW1lbnQpIHtcbiAgaWYgKGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA9PT0gYXV0bykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHZhciBvcHBvc2l0ZVBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHJldHVybiBbZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSwgb3Bwb3NpdGVQbGFjZW1lbnQsIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KG9wcG9zaXRlUGxhY2VtZW50KV07XG59XG5cbmZ1bmN0aW9uIGZsaXAoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0uX3NraXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGFsdEF4aXMsXG4gICAgICBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgPSBvcHRpb25zLmZhbGxiYWNrUGxhY2VtZW50cyxcbiAgICAgIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmcsXG4gICAgICBib3VuZGFyeSA9IG9wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBvcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGZsaXBWYXJpYXRpbyA9IG9wdGlvbnMuZmxpcFZhcmlhdGlvbnMsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zJGZsaXBWYXJpYXRpbyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGZsaXBWYXJpYXRpbyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50cyA9IG9wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzO1xuICB2YXIgcHJlZmVycmVkUGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpO1xuICB2YXIgaXNCYXNlUGxhY2VtZW50ID0gYmFzZVBsYWNlbWVudCA9PT0gcHJlZmVycmVkUGxhY2VtZW50O1xuICB2YXIgZmFsbGJhY2tQbGFjZW1lbnRzID0gc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIHx8IChpc0Jhc2VQbGFjZW1lbnQgfHwgIWZsaXBWYXJpYXRpb25zID8gW2dldE9wcG9zaXRlUGxhY2VtZW50KHByZWZlcnJlZFBsYWNlbWVudCldIDogZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocHJlZmVycmVkUGxhY2VtZW50KSk7XG4gIHZhciBwbGFjZW1lbnRzID0gW3ByZWZlcnJlZFBsYWNlbWVudF0uY29uY2F0KGZhbGxiYWNrUGxhY2VtZW50cykucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA9PT0gYXV0byA/IGNvbXB1dGVBdXRvUGxhY2VtZW50KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZyxcbiAgICAgIGZsaXBWYXJpYXRpb25zOiBmbGlwVmFyaWF0aW9ucyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50czogYWxsb3dlZEF1dG9QbGFjZW1lbnRzXG4gICAgfSkgOiBwbGFjZW1lbnQpO1xuICB9LCBbXSk7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGNoZWNrc01hcCA9IG5ldyBNYXAoKTtcbiAgdmFyIG1ha2VGYWxsYmFja0NoZWNrcyA9IHRydWU7XG4gIHZhciBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnRzWzBdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGxhY2VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwbGFjZW1lbnQgPSBwbGFjZW1lbnRzW2ldO1xuXG4gICAgdmFyIF9iYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuXG4gICAgdmFyIGlzU3RhcnRWYXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gc3RhcnQ7XG4gICAgdmFyIGlzVmVydGljYWwgPSBbdG9wLCBib3R0b21dLmluZGV4T2YoX2Jhc2VQbGFjZW1lbnQpID49IDA7XG4gICAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG4gICAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nXG4gICAgfSk7XG4gICAgdmFyIG1haW5WYXJpYXRpb25TaWRlID0gaXNWZXJ0aWNhbCA/IGlzU3RhcnRWYXJpYXRpb24gPyByaWdodCA6IGxlZnQgOiBpc1N0YXJ0VmFyaWF0aW9uID8gYm90dG9tIDogdG9wO1xuXG4gICAgaWYgKHJlZmVyZW5jZVJlY3RbbGVuXSA+IHBvcHBlclJlY3RbbGVuXSkge1xuICAgICAgbWFpblZhcmlhdGlvblNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluVmFyaWF0aW9uU2lkZSk7XG4gICAgfVxuXG4gICAgdmFyIGFsdFZhcmlhdGlvblNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluVmFyaWF0aW9uU2lkZSk7XG4gICAgdmFyIGNoZWNrcyA9IFtdO1xuXG4gICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKG92ZXJmbG93W19iYXNlUGxhY2VtZW50XSA8PSAwKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1ttYWluVmFyaWF0aW9uU2lkZV0gPD0gMCwgb3ZlcmZsb3dbYWx0VmFyaWF0aW9uU2lkZV0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrcy5ldmVyeShmdW5jdGlvbiAoY2hlY2spIHtcbiAgICAgIHJldHVybiBjaGVjaztcbiAgICB9KSkge1xuICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50O1xuICAgICAgbWFrZUZhbGxiYWNrQ2hlY2tzID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjaGVja3NNYXAuc2V0KHBsYWNlbWVudCwgY2hlY2tzKTtcbiAgfVxuXG4gIGlmIChtYWtlRmFsbGJhY2tDaGVja3MpIHtcbiAgICAvLyBgMmAgbWF5IGJlIGRlc2lyZWQgaW4gc29tZSBjYXNlcyDigJMgcmVzZWFyY2ggbGF0ZXJcbiAgICB2YXIgbnVtYmVyT2ZDaGVja3MgPSBmbGlwVmFyaWF0aW9ucyA/IDMgOiAxO1xuXG4gICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoX2kpIHtcbiAgICAgIHZhciBmaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50cy5maW5kKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICAgICAgdmFyIGNoZWNrcyA9IGNoZWNrc01hcC5nZXQocGxhY2VtZW50KTtcblxuICAgICAgICBpZiAoY2hlY2tzKSB7XG4gICAgICAgICAgcmV0dXJuIGNoZWNrcy5zbGljZSgwLCBfaSkuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hlY2s7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZml0dGluZ1BsYWNlbWVudCkge1xuICAgICAgICBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBmaXR0aW5nUGxhY2VtZW50O1xuICAgICAgICByZXR1cm4gXCJicmVha1wiO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKHZhciBfaSA9IG51bWJlck9mQ2hlY2tzOyBfaSA+IDA7IF9pLS0pIHtcbiAgICAgIHZhciBfcmV0ID0gX2xvb3AoX2kpO1xuXG4gICAgICBpZiAoX3JldCA9PT0gXCJicmVha1wiKSBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdGUucGxhY2VtZW50ICE9PSBmaXJzdEZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwID0gdHJ1ZTtcbiAgICBzdGF0ZS5wbGFjZW1lbnQgPSBmaXJzdEZpdHRpbmdQbGFjZW1lbnQ7XG4gICAgc3RhdGUucmVzZXQgPSB0cnVlO1xuICB9XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdmbGlwJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IGZsaXAsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsnb2Zmc2V0J10sXG4gIGRhdGE6IHtcbiAgICBfc2tpcDogZmFsc2VcbiAgfVxufTsiLCJpbXBvcnQgeyB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcblxuZnVuY3Rpb24gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3QsIHByZXZlbnRlZE9mZnNldHMpIHtcbiAgaWYgKHByZXZlbnRlZE9mZnNldHMgPT09IHZvaWQgMCkge1xuICAgIHByZXZlbnRlZE9mZnNldHMgPSB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvcDogb3ZlcmZsb3cudG9wIC0gcmVjdC5oZWlnaHQgLSBwcmV2ZW50ZWRPZmZzZXRzLnksXG4gICAgcmlnaHQ6IG92ZXJmbG93LnJpZ2h0IC0gcmVjdC53aWR0aCArIHByZXZlbnRlZE9mZnNldHMueCxcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0ICsgcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIGxlZnQ6IG92ZXJmbG93LmxlZnQgLSByZWN0LndpZHRoIC0gcHJldmVudGVkT2Zmc2V0cy54XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvdmVyZmxvdykge1xuICByZXR1cm4gW3RvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdF0uc29tZShmdW5jdGlvbiAoc2lkZSkge1xuICAgIHJldHVybiBvdmVyZmxvd1tzaWRlXSA+PSAwO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaGlkZShfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBwcmV2ZW50ZWRPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wcmV2ZW50T3ZlcmZsb3c7XG4gIHZhciByZWZlcmVuY2VPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gIH0pO1xuICB2YXIgcG9wcGVyQWx0T3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGFsdEJvdW5kYXJ5OiB0cnVlXG4gIH0pO1xuICB2YXIgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMocmVmZXJlbmNlT3ZlcmZsb3csIHJlZmVyZW5jZVJlY3QpO1xuICB2YXIgcG9wcGVyRXNjYXBlT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHBvcHBlckFsdE92ZXJmbG93LCBwb3BwZXJSZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKTtcbiAgdmFyIGlzUmVmZXJlbmNlSGlkZGVuID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyk7XG4gIHZhciBoYXNQb3BwZXJFc2NhcGVkID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHBvcHBlckVzY2FwZU9mZnNldHMpO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0ge1xuICAgIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0czogcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzLFxuICAgIHBvcHBlckVzY2FwZU9mZnNldHM6IHBvcHBlckVzY2FwZU9mZnNldHMsXG4gICAgaXNSZWZlcmVuY2VIaWRkZW46IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgIGhhc1BvcHBlckVzY2FwZWQ6IGhhc1BvcHBlckVzY2FwZWRcbiAgfTtcbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgICdkYXRhLXBvcHBlci1yZWZlcmVuY2UtaGlkZGVuJzogaXNSZWZlcmVuY2VIaWRkZW4sXG4gICAgJ2RhdGEtcG9wcGVyLWVzY2FwZWQnOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnaGlkZScsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J10sXG4gIGZuOiBoaWRlXG59OyIsImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBwbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgcmVjdHMsIG9mZnNldCkge1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgdmFyIGludmVydERpc3RhbmNlID0gW2xlZnQsIHRvcF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8gLTEgOiAxO1xuXG4gIHZhciBfcmVmID0gdHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IG9mZnNldChPYmplY3QuYXNzaWduKHt9LCByZWN0cywge1xuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pKSA6IG9mZnNldCxcbiAgICAgIHNraWRkaW5nID0gX3JlZlswXSxcbiAgICAgIGRpc3RhbmNlID0gX3JlZlsxXTtcblxuICBza2lkZGluZyA9IHNraWRkaW5nIHx8IDA7XG4gIGRpc3RhbmNlID0gKGRpc3RhbmNlIHx8IDApICogaW52ZXJ0RGlzdGFuY2U7XG4gIHJldHVybiBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IHtcbiAgICB4OiBkaXN0YW5jZSxcbiAgICB5OiBza2lkZGluZ1xuICB9IDoge1xuICAgIHg6IHNraWRkaW5nLFxuICAgIHk6IGRpc3RhbmNlXG4gIH07XG59XG5cbmZ1bmN0aW9uIG9mZnNldChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYyLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRvZmZzZXQgPSBvcHRpb25zLm9mZnNldCxcbiAgICAgIG9mZnNldCA9IF9vcHRpb25zJG9mZnNldCA9PT0gdm9pZCAwID8gWzAsIDBdIDogX29wdGlvbnMkb2Zmc2V0O1xuICB2YXIgZGF0YSA9IHBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCBzdGF0ZS5yZWN0cywgb2Zmc2V0KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHZhciBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQgPSBkYXRhW3N0YXRlLnBsYWNlbWVudF0sXG4gICAgICB4ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50LngsXG4gICAgICB5ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50Lnk7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnggKz0geDtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueSArPSB5O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdvZmZzZXQnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIGZuOiBvZmZzZXRcbn07IiwiaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuLi91dGlscy9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuXG5mdW5jdGlvbiBwb3BwZXJPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIC8vIE9mZnNldHMgYXJlIHRoZSBhY3R1YWwgcG9zaXRpb24gdGhlIHBvcHBlciBuZWVkcyB0byBoYXZlIHRvIGJlXG4gIC8vIHByb3Blcmx5IHBvc2l0aW9uZWQgbmVhciBpdHMgcmVmZXJlbmNlIGVsZW1lbnRcbiAgLy8gVGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBwbGFjZW1lbnQsIGFuZCB3aWxsIGJlIGFkanVzdGVkIGJ5XG4gIC8vIHRoZSBtb2RpZmllcnMgaW4gdGhlIG5leHQgc3RlcFxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogc3RhdGUucmVjdHMucmVmZXJlbmNlLFxuICAgIGVsZW1lbnQ6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3BvcHBlck9mZnNldHMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3JlYWQnLFxuICBmbjogcG9wcGVyT2Zmc2V0cyxcbiAgZGF0YToge31cbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QWx0QXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59IiwiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLCBzdGFydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldEFsdEF4aXMgZnJvbSBcIi4uL3V0aWxzL2dldEFsdEF4aXMuanNcIjtcbmltcG9ydCB7IHdpdGhpbiwgd2l0aGluTWF4Q2xhbXAgfSBmcm9tIFwiLi4vdXRpbHMvd2l0aGluLmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IGdldEZyZXNoU2lkZU9iamVjdCBmcm9tIFwiLi4vdXRpbHMvZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5pbXBvcnQgeyBtaW4gYXMgbWF0aE1pbiwgbWF4IGFzIG1hdGhNYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBwcmV2ZW50T3ZlcmZsb3coX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRtYWluQXhpcyA9IG9wdGlvbnMubWFpbkF4aXMsXG4gICAgICBjaGVja01haW5BeGlzID0gX29wdGlvbnMkbWFpbkF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRtYWluQXhpcyxcbiAgICAgIF9vcHRpb25zJGFsdEF4aXMgPSBvcHRpb25zLmFsdEF4aXMsXG4gICAgICBjaGVja0FsdEF4aXMgPSBfb3B0aW9ucyRhbHRBeGlzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEF4aXMsXG4gICAgICBib3VuZGFyeSA9IG9wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBvcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmcsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXIgPSBvcHRpb25zLnRldGhlcixcbiAgICAgIHRldGhlciA9IF9vcHRpb25zJHRldGhlciA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHRldGhlcixcbiAgICAgIF9vcHRpb25zJHRldGhlck9mZnNldCA9IG9wdGlvbnMudGV0aGVyT2Zmc2V0LFxuICAgICAgdGV0aGVyT2Zmc2V0ID0gX29wdGlvbnMkdGV0aGVyT2Zmc2V0ID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkdGV0aGVyT2Zmc2V0O1xuICB2YXIgb3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICBwYWRkaW5nOiBwYWRkaW5nLFxuICAgIGFsdEJvdW5kYXJ5OiBhbHRCb3VuZGFyeVxuICB9KTtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9ICF2YXJpYXRpb247XG4gIHZhciBtYWluQXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGFsdEF4aXMgPSBnZXRBbHRBeGlzKG1haW5BeGlzKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIHRldGhlck9mZnNldFZhbHVlID0gdHlwZW9mIHRldGhlck9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IHRldGhlck9mZnNldChPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5yZWN0cywge1xuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pKSA6IHRldGhlck9mZnNldDtcbiAgdmFyIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXRWYWx1ZSA9PT0gJ251bWJlcicgPyB7XG4gICAgbWFpbkF4aXM6IHRldGhlck9mZnNldFZhbHVlLFxuICAgIGFsdEF4aXM6IHRldGhlck9mZnNldFZhbHVlXG4gIH0gOiBPYmplY3QuYXNzaWduKHtcbiAgICBtYWluQXhpczogMCxcbiAgICBhbHRBeGlzOiAwXG4gIH0sIHRldGhlck9mZnNldFZhbHVlKTtcbiAgdmFyIG9mZnNldE1vZGlmaWVyU3RhdGUgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldCA/IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0W3N0YXRlLnBsYWNlbWVudF0gOiBudWxsO1xuICB2YXIgZGF0YSA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQ7XG5cbiAgICB2YXIgbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgICB2YXIgYWx0U2lkZSA9IG1haW5BeGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICB2YXIgb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1ttYWluQXhpc107XG4gICAgdmFyIG1pbiA9IG9mZnNldCArIG92ZXJmbG93W21haW5TaWRlXTtcbiAgICB2YXIgbWF4ID0gb2Zmc2V0IC0gb3ZlcmZsb3dbYWx0U2lkZV07XG4gICAgdmFyIGFkZGl0aXZlID0gdGV0aGVyID8gLXBvcHBlclJlY3RbbGVuXSAvIDIgOiAwO1xuICAgIHZhciBtaW5MZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gcmVmZXJlbmNlUmVjdFtsZW5dIDogcG9wcGVyUmVjdFtsZW5dO1xuICAgIHZhciBtYXhMZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gLXBvcHBlclJlY3RbbGVuXSA6IC1yZWZlcmVuY2VSZWN0W2xlbl07IC8vIFdlIG5lZWQgdG8gaW5jbHVkZSB0aGUgYXJyb3cgaW4gdGhlIGNhbGN1bGF0aW9uIHNvIHRoZSBhcnJvdyBkb2Vzbid0IGdvXG4gICAgLy8gb3V0c2lkZSB0aGUgcmVmZXJlbmNlIGJvdW5kc1xuXG4gICAgdmFyIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93O1xuICAgIHZhciBhcnJvd1JlY3QgPSB0ZXRoZXIgJiYgYXJyb3dFbGVtZW50ID8gZ2V0TGF5b3V0UmVjdChhcnJvd0VsZW1lbnQpIDoge1xuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9O1xuICAgIHZhciBhcnJvd1BhZGRpbmdPYmplY3QgPSBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10gPyBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10ucGFkZGluZyA6IGdldEZyZXNoU2lkZU9iamVjdCgpO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNaW4gPSBhcnJvd1BhZGRpbmdPYmplY3RbbWFpblNpZGVdO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNYXggPSBhcnJvd1BhZGRpbmdPYmplY3RbYWx0U2lkZV07IC8vIElmIHRoZSByZWZlcmVuY2UgbGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiB0aGUgYXJyb3cgbGVuZ3RoLCB3ZSBkb24ndCB3YW50XG4gICAgLy8gdG8gaW5jbHVkZSBpdHMgZnVsbCBzaXplIGluIHRoZSBjYWxjdWxhdGlvbi4gSWYgdGhlIHJlZmVyZW5jZSBpcyBzbWFsbFxuICAgIC8vIGFuZCBuZWFyIHRoZSBlZGdlIG9mIGEgYm91bmRhcnksIHRoZSBwb3BwZXIgY2FuIG92ZXJmbG93IGV2ZW4gaWYgdGhlXG4gICAgLy8gcmVmZXJlbmNlIGlzIG5vdCBvdmVyZmxvd2luZyBhcyB3ZWxsIChlLmcuIHZpcnR1YWwgZWxlbWVudHMgd2l0aCBub1xuICAgIC8vIHdpZHRoIG9yIGhlaWdodClcblxuICAgIHZhciBhcnJvd0xlbiA9IHdpdGhpbigwLCByZWZlcmVuY2VSZWN0W2xlbl0sIGFycm93UmVjdFtsZW5dKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50ID8gcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiAtIGFkZGl0aXZlIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXMgOiBtaW5MZW4gLSBhcnJvd0xlbiAtIGFycm93UGFkZGluZ01pbiAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcztcbiAgICB2YXIgbWF4T2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50ID8gLXJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgKyBhZGRpdGl2ZSArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWF4TGVuICsgYXJyb3dMZW4gKyBhcnJvd1BhZGRpbmdNYXggKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3cgJiYgZ2V0T2Zmc2V0UGFyZW50KHN0YXRlLmVsZW1lbnRzLmFycm93KTtcbiAgICB2YXIgY2xpZW50T2Zmc2V0ID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBtYWluQXhpcyA9PT0gJ3knID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50VG9wIHx8IDAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRMZWZ0IHx8IDAgOiAwO1xuICAgIHZhciBvZmZzZXRNb2RpZmllclZhbHVlID0gKF9vZmZzZXRNb2RpZmllclN0YXRlJCA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbbWFpbkF4aXNdKSAhPSBudWxsID8gX29mZnNldE1vZGlmaWVyU3RhdGUkIDogMDtcbiAgICB2YXIgdGV0aGVyTWluID0gb2Zmc2V0ICsgbWluT2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZSAtIGNsaWVudE9mZnNldDtcbiAgICB2YXIgdGV0aGVyTWF4ID0gb2Zmc2V0ICsgbWF4T2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZTtcbiAgICB2YXIgcHJldmVudGVkT2Zmc2V0ID0gd2l0aGluKHRldGhlciA/IG1hdGhNaW4obWluLCB0ZXRoZXJNaW4pIDogbWluLCBvZmZzZXQsIHRldGhlciA/IG1hdGhNYXgobWF4LCB0ZXRoZXJNYXgpIDogbWF4KTtcbiAgICBwb3BwZXJPZmZzZXRzW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldDtcbiAgICBkYXRhW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldCAtIG9mZnNldDtcbiAgfVxuXG4gIGlmIChjaGVja0FsdEF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkMjtcblxuICAgIHZhciBfbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gdG9wIDogbGVmdDtcblxuICAgIHZhciBfYWx0U2lkZSA9IG1haW5BeGlzID09PSAneCcgPyBib3R0b20gOiByaWdodDtcblxuICAgIHZhciBfb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1thbHRBeGlzXTtcblxuICAgIHZhciBfbGVuID0gYWx0QXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgdmFyIF9taW4gPSBfb2Zmc2V0ICsgb3ZlcmZsb3dbX21haW5TaWRlXTtcblxuICAgIHZhciBfbWF4ID0gX29mZnNldCAtIG92ZXJmbG93W19hbHRTaWRlXTtcblxuICAgIHZhciBpc09yaWdpblNpZGUgPSBbdG9wLCBsZWZ0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyID0gb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogb2Zmc2V0TW9kaWZpZXJTdGF0ZVthbHRBeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJDIgOiAwO1xuXG4gICAgdmFyIF90ZXRoZXJNaW4gPSBpc09yaWdpblNpZGUgPyBfbWluIDogX29mZnNldCAtIHJlZmVyZW5jZVJlY3RbX2xlbl0gLSBwb3BwZXJSZWN0W19sZW5dIC0gX29mZnNldE1vZGlmaWVyVmFsdWUgKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUuYWx0QXhpcztcblxuICAgIHZhciBfdGV0aGVyTWF4ID0gaXNPcmlnaW5TaWRlID8gX29mZnNldCArIHJlZmVyZW5jZVJlY3RbX2xlbl0gKyBwb3BwZXJSZWN0W19sZW5dIC0gX29mZnNldE1vZGlmaWVyVmFsdWUgLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUuYWx0QXhpcyA6IF9tYXg7XG5cbiAgICB2YXIgX3ByZXZlbnRlZE9mZnNldCA9IHRldGhlciAmJiBpc09yaWdpblNpZGUgPyB3aXRoaW5NYXhDbGFtcChfdGV0aGVyTWluLCBfb2Zmc2V0LCBfdGV0aGVyTWF4KSA6IHdpdGhpbih0ZXRoZXIgPyBfdGV0aGVyTWluIDogX21pbiwgX29mZnNldCwgdGV0aGVyID8gX3RldGhlck1heCA6IF9tYXgpO1xuXG4gICAgcG9wcGVyT2Zmc2V0c1thbHRBeGlzXSA9IF9wcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVthbHRBeGlzXSA9IF9wcmV2ZW50ZWRPZmZzZXQgLSBfb2Zmc2V0O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogcHJldmVudE92ZXJmbG93LFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddXG59OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEhUTUxFbGVtZW50U2Nyb2xsKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbExlZnQsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICB9O1xufSIsImltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRIVE1MRWxlbWVudFNjcm9sbCBmcm9tIFwiLi9nZXRIVE1MRWxlbWVudFNjcm9sbC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChub2RlKSB7XG4gIGlmIChub2RlID09PSBnZXRXaW5kb3cobm9kZSkgfHwgIWlzSFRNTEVsZW1lbnQobm9kZSkpIHtcbiAgICByZXR1cm4gZ2V0V2luZG93U2Nyb2xsKG5vZGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZXRIVE1MRWxlbWVudFNjcm9sbChub2RlKTtcbiAgfVxufSIsImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZVNjcm9sbCBmcm9tIFwiLi9nZXROb2RlU2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudFNjYWxlZChlbGVtZW50KSB7XG4gIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IHJvdW5kKHJlY3Qud2lkdGgpIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxO1xuICB2YXIgc2NhbGVZID0gcm91bmQocmVjdC5oZWlnaHQpIC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMTtcbiAgcmV0dXJuIHNjYWxlWCAhPT0gMSB8fCBzY2FsZVkgIT09IDE7XG59IC8vIFJldHVybnMgdGhlIGNvbXBvc2l0ZSByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC5cbi8vIENvbXBvc2l0ZSBtZWFucyBpdCB0YWtlcyBpbnRvIGFjY291bnQgdHJhbnNmb3JtcyBhcyB3ZWxsIGFzIGxheW91dC5cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wb3NpdGVSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnQsIGlzRml4ZWQpIHtcbiAgaWYgKGlzRml4ZWQgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudElzU2NhbGVkID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGlzRWxlbWVudFNjYWxlZChvZmZzZXRQYXJlbnQpO1xuICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnRJc1NjYWxlZCwgaXNGaXhlZCk7XG4gIHZhciBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgdmFyIG9mZnNldHMgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMDc4XG4gICAgaXNTY3JvbGxQYXJlbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cblxuICAgIGlmIChpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgIG9mZnNldHMgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlKTtcbiAgICAgIG9mZnNldHMueCArPSBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSArPSBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCxcbiAgICB5OiByZWN0LnRvcCArIHNjcm9sbC5zY3JvbGxUb3AgLSBvZmZzZXRzLnksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufSIsImltcG9ydCB7IG1vZGlmaWVyUGhhc2VzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIHNvdXJjZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDk4NzUyNTVcblxuZnVuY3Rpb24gb3JkZXIobW9kaWZpZXJzKSB7XG4gIHZhciBtYXAgPSBuZXcgTWFwKCk7XG4gIHZhciB2aXNpdGVkID0gbmV3IFNldCgpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIG1hcC5zZXQobW9kaWZpZXIubmFtZSwgbW9kaWZpZXIpO1xuICB9KTsgLy8gT24gdmlzaXRpbmcgb2JqZWN0LCBjaGVjayBmb3IgaXRzIGRlcGVuZGVuY2llcyBhbmQgdmlzaXQgdGhlbSByZWN1cnNpdmVseVxuXG4gIGZ1bmN0aW9uIHNvcnQobW9kaWZpZXIpIHtcbiAgICB2aXNpdGVkLmFkZChtb2RpZmllci5uYW1lKTtcbiAgICB2YXIgcmVxdWlyZXMgPSBbXS5jb25jYXQobW9kaWZpZXIucmVxdWlyZXMgfHwgW10sIG1vZGlmaWVyLnJlcXVpcmVzSWZFeGlzdHMgfHwgW10pO1xuICAgIHJlcXVpcmVzLmZvckVhY2goZnVuY3Rpb24gKGRlcCkge1xuICAgICAgaWYgKCF2aXNpdGVkLmhhcyhkZXApKSB7XG4gICAgICAgIHZhciBkZXBNb2RpZmllciA9IG1hcC5nZXQoZGVwKTtcblxuICAgICAgICBpZiAoZGVwTW9kaWZpZXIpIHtcbiAgICAgICAgICBzb3J0KGRlcE1vZGlmaWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJlc3VsdC5wdXNoKG1vZGlmaWVyKTtcbiAgfVxuXG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIGlmICghdmlzaXRlZC5oYXMobW9kaWZpZXIubmFtZSkpIHtcbiAgICAgIC8vIGNoZWNrIGZvciB2aXNpdGVkIG9iamVjdFxuICAgICAgc29ydChtb2RpZmllcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JkZXJNb2RpZmllcnMobW9kaWZpZXJzKSB7XG4gIC8vIG9yZGVyIGJhc2VkIG9uIGRlcGVuZGVuY2llc1xuICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyKG1vZGlmaWVycyk7IC8vIG9yZGVyIGJhc2VkIG9uIHBoYXNlXG5cbiAgcmV0dXJuIG1vZGlmaWVyUGhhc2VzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwaGFzZSkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgcmV0dXJuIG1vZGlmaWVyLnBoYXNlID09PSBwaGFzZTtcbiAgICB9KSk7XG4gIH0sIFtdKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWJvdW5jZShmbikge1xuICB2YXIgcGVuZGluZztcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHBlbmRpbmcgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBwZW5kaW5nID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJlc29sdmUoZm4oKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBlbmRpbmc7XG4gIH07XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VCeU5hbWUobW9kaWZpZXJzKSB7XG4gIHZhciBtZXJnZWQgPSBtb2RpZmllcnMucmVkdWNlKGZ1bmN0aW9uIChtZXJnZWQsIGN1cnJlbnQpIHtcbiAgICB2YXIgZXhpc3RpbmcgPSBtZXJnZWRbY3VycmVudC5uYW1lXTtcbiAgICBtZXJnZWRbY3VycmVudC5uYW1lXSA9IGV4aXN0aW5nID8gT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcsIGN1cnJlbnQsIHtcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLm9wdGlvbnMsIGN1cnJlbnQub3B0aW9ucyksXG4gICAgICBkYXRhOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5kYXRhLCBjdXJyZW50LmRhdGEpXG4gICAgfSkgOiBjdXJyZW50O1xuICAgIHJldHVybiBtZXJnZWQ7XG4gIH0sIHt9KTsgLy8gSUUxMSBkb2VzIG5vdCBzdXBwb3J0IE9iamVjdC52YWx1ZXNcblxuICByZXR1cm4gT2JqZWN0LmtleXMobWVyZ2VkKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBtZXJnZWRba2V5XTtcbiAgfSk7XG59IiwiaW1wb3J0IGdldENvbXBvc2l0ZVJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBvcmRlck1vZGlmaWVycyBmcm9tIFwiLi91dGlscy9vcmRlck1vZGlmaWVycy5qc1wiO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gXCIuL3V0aWxzL2RlYm91bmNlLmpzXCI7XG5pbXBvcnQgbWVyZ2VCeU5hbWUgZnJvbSBcIi4vdXRpbHMvbWVyZ2VCeU5hbWUuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gIG1vZGlmaWVyczogW10sXG4gIHN0cmF0ZWd5OiAnYWJzb2x1dGUnXG59O1xuXG5mdW5jdGlvbiBhcmVWYWxpZEVsZW1lbnRzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuICFhcmdzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gIShlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9PT0gJ2Z1bmN0aW9uJyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wcGVyR2VuZXJhdG9yKGdlbmVyYXRvck9wdGlvbnMpIHtcbiAgaWYgKGdlbmVyYXRvck9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIGdlbmVyYXRvck9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfZ2VuZXJhdG9yT3B0aW9ucyA9IGdlbmVyYXRvck9wdGlvbnMsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0TW9kaWZpZXJzLFxuICAgICAgZGVmYXVsdE1vZGlmaWVycyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9PT0gdm9pZCAwID8gW10gOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG4gICAgICBkZWZhdWx0T3B0aW9ucyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPT09IHZvaWQgMCA/IERFRkFVTFRfT1BUSU9OUyA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZjI7XG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVQb3BwZXIocmVmZXJlbmNlLCBwb3BwZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXRlID0ge1xuICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgIG9yZGVyZWRNb2RpZmllcnM6IFtdLFxuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TLCBkZWZhdWx0T3B0aW9ucyksXG4gICAgICBtb2RpZmllcnNEYXRhOiB7fSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlLFxuICAgICAgICBwb3BwZXI6IHBvcHBlclxuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgc3R5bGVzOiB7fVxuICAgIH07XG4gICAgdmFyIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB2YXIgaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB2YXIgaW5zdGFuY2UgPSB7XG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBzZXRPcHRpb25zOiBmdW5jdGlvbiBzZXRPcHRpb25zKHNldE9wdGlvbnNBY3Rpb24pIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2V0T3B0aW9uc0FjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHNldE9wdGlvbnNBY3Rpb24oc3RhdGUub3B0aW9ucykgOiBzZXRPcHRpb25zQWN0aW9uO1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHN0YXRlLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgc3RhdGUub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHN0YXRlLnNjcm9sbFBhcmVudHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBpc0VsZW1lbnQocmVmZXJlbmNlKSA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZSkgOiByZWZlcmVuY2UuY29udGV4dEVsZW1lbnQgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UuY29udGV4dEVsZW1lbnQpIDogW10sXG4gICAgICAgICAgcG9wcGVyOiBsaXN0U2Nyb2xsUGFyZW50cyhwb3BwZXIpXG4gICAgICAgIH07IC8vIE9yZGVycyB0aGUgbW9kaWZpZXJzIGJhc2VkIG9uIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgYHBoYXNlYFxuICAgICAgICAvLyBwcm9wZXJ0aWVzXG5cbiAgICAgICAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlck1vZGlmaWVycyhtZXJnZUJ5TmFtZShbXS5jb25jYXQoZGVmYXVsdE1vZGlmaWVycywgc3RhdGUub3B0aW9ucy5tb2RpZmllcnMpKSk7IC8vIFN0cmlwIG91dCBkaXNhYmxlZCBtb2RpZmllcnNcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICByZXR1cm4gbS5lbmFibGVkO1xuICAgICAgICB9KTtcbiAgICAgICAgcnVuTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICAvLyBTeW5jIHVwZGF0ZSDigJMgaXQgd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQsIGV2ZW4gaWYgbm90IG5lY2Vzc2FyeS4gVGhpc1xuICAgICAgLy8gaXMgdXNlZnVsIGZvciBsb3cgZnJlcXVlbmN5IHVwZGF0ZXMgd2hlcmUgc3luYyBiZWhhdmlvciBzaW1wbGlmaWVzIHRoZVxuICAgICAgLy8gbG9naWMuXG4gICAgICAvLyBGb3IgaGlnaCBmcmVxdWVuY3kgdXBkYXRlcyAoZS5nLiBgcmVzaXplYCBhbmQgYHNjcm9sbGAgZXZlbnRzKSwgYWx3YXlzXG4gICAgICAvLyBwcmVmZXIgdGhlIGFzeW5jIFBvcHBlciN1cGRhdGUgbWV0aG9kXG4gICAgICBmb3JjZVVwZGF0ZTogZnVuY3Rpb24gZm9yY2VVcGRhdGUoKSB7XG4gICAgICAgIGlmIChpc0Rlc3Ryb3llZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfc3RhdGUkZWxlbWVudHMgPSBzdGF0ZS5lbGVtZW50cyxcbiAgICAgICAgICAgIHJlZmVyZW5jZSA9IF9zdGF0ZSRlbGVtZW50cy5yZWZlcmVuY2UsXG4gICAgICAgICAgICBwb3BwZXIgPSBfc3RhdGUkZWxlbWVudHMucG9wcGVyOyAvLyBEb24ndCBwcm9jZWVkIGlmIGByZWZlcmVuY2VgIG9yIGBwb3BwZXJgIGFyZSBub3QgdmFsaWQgZWxlbWVudHNcbiAgICAgICAgLy8gYW55bW9yZVxuXG4gICAgICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gU3RvcmUgdGhlIHJlZmVyZW5jZSBhbmQgcG9wcGVyIHJlY3RzIHRvIGJlIHJlYWQgYnkgbW9kaWZpZXJzXG5cblxuICAgICAgICBzdGF0ZS5yZWN0cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGdldENvbXBvc2l0ZVJlY3QocmVmZXJlbmNlLCBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKSwgc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJyksXG4gICAgICAgICAgcG9wcGVyOiBnZXRMYXlvdXRSZWN0KHBvcHBlcilcbiAgICAgICAgfTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gcmVzZXQgdGhlIGN1cnJlbnQgdXBkYXRlIGN5Y2xlLiBUaGVcbiAgICAgICAgLy8gbW9zdCBjb21tb24gdXNlIGNhc2UgZm9yIHRoaXMgaXMgdGhlIGBmbGlwYCBtb2RpZmllciBjaGFuZ2luZyB0aGVcbiAgICAgICAgLy8gcGxhY2VtZW50LCB3aGljaCB0aGVuIG5lZWRzIHRvIHJlLXJ1biBhbGwgdGhlIG1vZGlmaWVycywgYmVjYXVzZSB0aGVcbiAgICAgICAgLy8gbG9naWMgd2FzIHByZXZpb3VzbHkgcmFuIGZvciB0aGUgcHJldmlvdXMgcGxhY2VtZW50IGFuZCBpcyB0aGVyZWZvcmVcbiAgICAgICAgLy8gc3RhbGUvaW5jb3JyZWN0XG5cbiAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUucGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7IC8vIE9uIGVhY2ggdXBkYXRlIGN5Y2xlLCB0aGUgYG1vZGlmaWVyc0RhdGFgIHByb3BlcnR5IGZvciBlYWNoIG1vZGlmaWVyXG4gICAgICAgIC8vIGlzIGZpbGxlZCB3aXRoIHRoZSBpbml0aWFsIGRhdGEgc3BlY2lmaWVkIGJ5IHRoZSBtb2RpZmllci4gVGhpcyBtZWFuc1xuICAgICAgICAvLyBpdCBkb2Vzbid0IHBlcnNpc3QgYW5kIGlzIGZyZXNoIG9uIGVhY2ggdXBkYXRlLlxuICAgICAgICAvLyBUbyBlbnN1cmUgcGVyc2lzdGVudCBkYXRhLCB1c2UgYCR7bmFtZX0jcGVyc2lzdGVudGBcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLm1vZGlmaWVyc0RhdGFbbW9kaWZpZXIubmFtZV0gPSBPYmplY3QuYXNzaWduKHt9LCBtb2RpZmllci5kYXRhKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHN0YXRlLm9yZGVyZWRNb2RpZmllcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgaWYgKHN0YXRlLnJlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfc3RhdGUkb3JkZXJlZE1vZGlmaWUgPSBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzW2luZGV4XSxcbiAgICAgICAgICAgICAgZm4gPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUuZm4sXG4gICAgICAgICAgICAgIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUub3B0aW9ucyxcbiAgICAgICAgICAgICAgX29wdGlvbnMgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID09PSB2b2lkIDAgPyB7fSA6IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIsXG4gICAgICAgICAgICAgIG5hbWUgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUubmFtZTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0YXRlID0gZm4oe1xuICAgICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IF9vcHRpb25zLFxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2VcbiAgICAgICAgICAgIH0pIHx8IHN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIEFzeW5jIGFuZCBvcHRpbWlzdGljYWxseSBvcHRpbWl6ZWQgdXBkYXRlIOKAkyBpdCB3aWxsIG5vdCBiZSBleGVjdXRlZCBpZlxuICAgICAgLy8gbm90IG5lY2Vzc2FyeSAoZGVib3VuY2VkIHRvIHJ1biBhdCBtb3N0IG9uY2UtcGVyLXRpY2spXG4gICAgICB1cGRhdGU6IGRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICByZXNvbHZlKHN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgaW5zdGFuY2Uuc2V0T3B0aW9ucyhvcHRpb25zKS50aGVuKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgaWYgKCFpc0Rlc3Ryb3llZCAmJiBvcHRpb25zLm9uRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKHN0YXRlKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSBiZWZvcmUgdGhlIGZpcnN0XG4gICAgLy8gdXBkYXRlIGN5Y2xlIHJ1bnMuIFRoZXkgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgdXBkYXRlXG4gICAgLy8gY3ljbGUuIFRoaXMgaXMgdXNlZnVsIHdoZW4gYSBtb2RpZmllciBhZGRzIHNvbWUgcGVyc2lzdGVudCBkYXRhIHRoYXRcbiAgICAvLyBvdGhlciBtb2RpZmllcnMgbmVlZCB0byB1c2UsIGJ1dCB0aGUgbW9kaWZpZXIgaXMgcnVuIGFmdGVyIHRoZSBkZXBlbmRlbnRcbiAgICAvLyBvbmUuXG5cbiAgICBmdW5jdGlvbiBydW5Nb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICAgICAgICBfcmVmJG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zID0gX3JlZiRvcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9yZWYkb3B0aW9ucyxcbiAgICAgICAgICAgIGVmZmVjdCA9IF9yZWYuZWZmZWN0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgZWZmZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIGNsZWFudXBGbiA9IGVmZmVjdCh7XG4gICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdmFyIG5vb3BGbiA9IGZ1bmN0aW9uIG5vb3BGbigpIHt9O1xuXG4gICAgICAgICAgZWZmZWN0Q2xlYW51cEZucy5wdXNoKGNsZWFudXBGbiB8fCBub29wRm4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgZWZmZWN0Q2xlYW51cEZucy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgIH0pO1xuICAgICAgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfTtcbn1cbmV4cG9ydCB2YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGRldGVjdE92ZXJmbG93IH07IiwiaW1wb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdyB9IGZyb20gXCIuL2NyZWF0ZVBvcHBlci5qc1wiO1xuaW1wb3J0IGV2ZW50TGlzdGVuZXJzIGZyb20gXCIuL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qc1wiO1xuaW1wb3J0IHBvcHBlck9mZnNldHMgZnJvbSBcIi4vbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanNcIjtcbmltcG9ydCBjb21wdXRlU3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzXCI7XG5pbXBvcnQgYXBwbHlTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2FwcGx5U3R5bGVzLmpzXCI7XG52YXIgZGVmYXVsdE1vZGlmaWVycyA9IFtldmVudExpc3RlbmVycywgcG9wcGVyT2Zmc2V0cywgY29tcHV0ZVN0eWxlcywgYXBwbHlTdHlsZXNdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsiLCJpbXBvcnQgeyBwb3BwZXJHZW5lcmF0b3IsIGRldGVjdE92ZXJmbG93IH0gZnJvbSBcIi4vY3JlYXRlUG9wcGVyLmpzXCI7XG5pbXBvcnQgZXZlbnRMaXN0ZW5lcnMgZnJvbSBcIi4vbW9kaWZpZXJzL2V2ZW50TGlzdGVuZXJzLmpzXCI7XG5pbXBvcnQgcG9wcGVyT2Zmc2V0cyBmcm9tIFwiLi9tb2RpZmllcnMvcG9wcGVyT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanNcIjtcbmltcG9ydCBhcHBseVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanNcIjtcbmltcG9ydCBvZmZzZXQgZnJvbSBcIi4vbW9kaWZpZXJzL29mZnNldC5qc1wiO1xuaW1wb3J0IGZsaXAgZnJvbSBcIi4vbW9kaWZpZXJzL2ZsaXAuanNcIjtcbmltcG9ydCBwcmV2ZW50T3ZlcmZsb3cgZnJvbSBcIi4vbW9kaWZpZXJzL3ByZXZlbnRPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGFycm93IGZyb20gXCIuL21vZGlmaWVycy9hcnJvdy5qc1wiO1xuaW1wb3J0IGhpZGUgZnJvbSBcIi4vbW9kaWZpZXJzL2hpZGUuanNcIjtcbnZhciBkZWZhdWx0TW9kaWZpZXJzID0gW2V2ZW50TGlzdGVuZXJzLCBwb3BwZXJPZmZzZXRzLCBjb21wdXRlU3R5bGVzLCBhcHBseVN0eWxlcywgb2Zmc2V0LCBmbGlwLCBwcmV2ZW50T3ZlcmZsb3csIGFycm93LCBoaWRlXTtcbnZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKHtcbiAgZGVmYXVsdE1vZGlmaWVyczogZGVmYXVsdE1vZGlmaWVyc1xufSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyLCBwb3BwZXJHZW5lcmF0b3IsIGRlZmF1bHRNb2RpZmllcnMsIGRldGVjdE92ZXJmbG93IH07IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyIGFzIGNyZWF0ZVBvcHBlckxpdGUgfSBmcm9tIFwiLi9wb3BwZXItbGl0ZS5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCAqIGZyb20gXCIuL21vZGlmaWVycy9pbmRleC5qc1wiOyIsIi8qIVxuICAqIEJvb3RzdHJhcCB2NS4zLjMgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyNCBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuaW1wb3J0ICogYXMgUG9wcGVyIGZyb20gJ0Bwb3BwZXJqcy9jb3JlJztcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGRvbS9kYXRhLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBlbGVtZW50TWFwID0gbmV3IE1hcCgpO1xuY29uc3QgRGF0YSA9IHtcbiAgc2V0KGVsZW1lbnQsIGtleSwgaW5zdGFuY2UpIHtcbiAgICBpZiAoIWVsZW1lbnRNYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICBlbGVtZW50TWFwLnNldChlbGVtZW50LCBuZXcgTWFwKCkpO1xuICAgIH1cbiAgICBjb25zdCBpbnN0YW5jZU1hcCA9IGVsZW1lbnRNYXAuZ2V0KGVsZW1lbnQpO1xuXG4gICAgLy8gbWFrZSBpdCBjbGVhciB3ZSBvbmx5IHdhbnQgb25lIGluc3RhbmNlIHBlciBlbGVtZW50XG4gICAgLy8gY2FuIGJlIHJlbW92ZWQgbGF0ZXIgd2hlbiBtdWx0aXBsZSBrZXkvaW5zdGFuY2VzIGFyZSBmaW5lIHRvIGJlIHVzZWRcbiAgICBpZiAoIWluc3RhbmNlTWFwLmhhcyhrZXkpICYmIGluc3RhbmNlTWFwLnNpemUgIT09IDApIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmVycm9yKGBCb290c3RyYXAgZG9lc24ndCBhbGxvdyBtb3JlIHRoYW4gb25lIGluc3RhbmNlIHBlciBlbGVtZW50LiBCb3VuZCBpbnN0YW5jZTogJHtBcnJheS5mcm9tKGluc3RhbmNlTWFwLmtleXMoKSlbMF19LmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpbnN0YW5jZU1hcC5zZXQoa2V5LCBpbnN0YW5jZSk7XG4gIH0sXG4gIGdldChlbGVtZW50LCBrZXkpIHtcbiAgICBpZiAoZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBlbGVtZW50TWFwLmdldChlbGVtZW50KS5nZXQoa2V5KSB8fCBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgcmVtb3ZlKGVsZW1lbnQsIGtleSkge1xuICAgIGlmICghZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5zdGFuY2VNYXAgPSBlbGVtZW50TWFwLmdldChlbGVtZW50KTtcbiAgICBpbnN0YW5jZU1hcC5kZWxldGUoa2V5KTtcblxuICAgIC8vIGZyZWUgdXAgZWxlbWVudCByZWZlcmVuY2VzIGlmIHRoZXJlIGFyZSBubyBpbnN0YW5jZXMgbGVmdCBmb3IgYW4gZWxlbWVudFxuICAgIGlmIChpbnN0YW5jZU1hcC5zaXplID09PSAwKSB7XG4gICAgICBlbGVtZW50TWFwLmRlbGV0ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL2luZGV4LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTUFYX1VJRCA9IDEwMDAwMDA7XG5jb25zdCBNSUxMSVNFQ09ORFNfTVVMVElQTElFUiA9IDEwMDA7XG5jb25zdCBUUkFOU0lUSU9OX0VORCA9ICd0cmFuc2l0aW9uZW5kJztcblxuLyoqXG4gKiBQcm9wZXJseSBlc2NhcGUgSURzIHNlbGVjdG9ycyB0byBoYW5kbGUgd2VpcmQgSURzXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmNvbnN0IHBhcnNlU2VsZWN0b3IgPSBzZWxlY3RvciA9PiB7XG4gIGlmIChzZWxlY3RvciAmJiB3aW5kb3cuQ1NTICYmIHdpbmRvdy5DU1MuZXNjYXBlKSB7XG4gICAgLy8gZG9jdW1lbnQucXVlcnlTZWxlY3RvciBuZWVkcyBlc2NhcGluZyB0byBoYW5kbGUgSURzIChodG1sNSspIGNvbnRhaW5pbmcgZm9yIGluc3RhbmNlIC9cbiAgICBzZWxlY3RvciA9IHNlbGVjdG9yLnJlcGxhY2UoLyMoW15cXHNcIiMnXSspL2csIChtYXRjaCwgaWQpID0+IGAjJHtDU1MuZXNjYXBlKGlkKX1gKTtcbiAgfVxuICByZXR1cm4gc2VsZWN0b3I7XG59O1xuXG4vLyBTaG91dC1vdXQgQW5ndXMgQ3JvbGwgKGh0dHBzOi8vZ29vLmdsL3B4d1FHcClcbmNvbnN0IHRvVHlwZSA9IG9iamVjdCA9PiB7XG4gIGlmIChvYmplY3QgPT09IG51bGwgfHwgb2JqZWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYCR7b2JqZWN0fWA7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpLm1hdGNoKC9cXHMoW2Etel0rKS9pKVsxXS50b0xvd2VyQ2FzZSgpO1xufTtcblxuLyoqXG4gKiBQdWJsaWMgVXRpbCBBUElcbiAqL1xuXG5jb25zdCBnZXRVSUQgPSBwcmVmaXggPT4ge1xuICBkbyB7XG4gICAgcHJlZml4ICs9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIE1BWF9VSUQpO1xuICB9IHdoaWxlIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcmVmaXgpKTtcbiAgcmV0dXJuIHByZWZpeDtcbn07XG5jb25zdCBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCA9IGVsZW1lbnQgPT4ge1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIC8vIEdldCB0cmFuc2l0aW9uLWR1cmF0aW9uIG9mIHRoZSBlbGVtZW50XG4gIGxldCB7XG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgIHRyYW5zaXRpb25EZWxheVxuICB9ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIGNvbnN0IGZsb2F0VHJhbnNpdGlvbkR1cmF0aW9uID0gTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgY29uc3QgZmxvYXRUcmFuc2l0aW9uRGVsYXkgPSBOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRGVsYXkpO1xuXG4gIC8vIFJldHVybiAwIGlmIGVsZW1lbnQgb3IgdHJhbnNpdGlvbiBkdXJhdGlvbiBpcyBub3QgZm91bmRcbiAgaWYgKCFmbG9hdFRyYW5zaXRpb25EdXJhdGlvbiAmJiAhZmxvYXRUcmFuc2l0aW9uRGVsYXkpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIC8vIElmIG11bHRpcGxlIGR1cmF0aW9ucyBhcmUgZGVmaW5lZCwgdGFrZSB0aGUgZmlyc3RcbiAgdHJhbnNpdGlvbkR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uLnNwbGl0KCcsJylbMF07XG4gIHRyYW5zaXRpb25EZWxheSA9IHRyYW5zaXRpb25EZWxheS5zcGxpdCgnLCcpWzBdO1xuICByZXR1cm4gKE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EdXJhdGlvbikgKyBOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRGVsYXkpKSAqIE1JTExJU0VDT05EU19NVUxUSVBMSUVSO1xufTtcbmNvbnN0IHRyaWdnZXJUcmFuc2l0aW9uRW5kID0gZWxlbWVudCA9PiB7XG4gIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoVFJBTlNJVElPTl9FTkQpKTtcbn07XG5jb25zdCBpc0VsZW1lbnQgPSBvYmplY3QgPT4ge1xuICBpZiAoIW9iamVjdCB8fCB0eXBlb2Ygb2JqZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIG9iamVjdC5qcXVlcnkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0WzBdO1xuICB9XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0Lm5vZGVUeXBlICE9PSAndW5kZWZpbmVkJztcbn07XG5jb25zdCBnZXRFbGVtZW50ID0gb2JqZWN0ID0+IHtcbiAgLy8gaXQncyBhIGpRdWVyeSBvYmplY3Qgb3IgYSBub2RlIGVsZW1lbnRcbiAgaWYgKGlzRWxlbWVudChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG9iamVjdC5qcXVlcnkgPyBvYmplY3RbMF0gOiBvYmplY3Q7XG4gIH1cbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdzdHJpbmcnICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocGFyc2VTZWxlY3RvcihvYmplY3QpKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5jb25zdCBpc1Zpc2libGUgPSBlbGVtZW50ID0+IHtcbiAgaWYgKCFpc0VsZW1lbnQoZWxlbWVudCkgfHwgZWxlbWVudC5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBlbGVtZW50SXNWaXNpYmxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCd2aXNpYmlsaXR5JykgPT09ICd2aXNpYmxlJztcbiAgLy8gSGFuZGxlIGBkZXRhaWxzYCBlbGVtZW50IGFzIGl0cyBjb250ZW50IG1heSBmYWxzaWUgYXBwZWFyIHZpc2libGUgd2hlbiBpdCBpcyBjbG9zZWRcbiAgY29uc3QgY2xvc2VkRGV0YWlscyA9IGVsZW1lbnQuY2xvc2VzdCgnZGV0YWlsczpub3QoW29wZW5dKScpO1xuICBpZiAoIWNsb3NlZERldGFpbHMpIHtcbiAgICByZXR1cm4gZWxlbWVudElzVmlzaWJsZTtcbiAgfVxuICBpZiAoY2xvc2VkRGV0YWlscyAhPT0gZWxlbWVudCkge1xuICAgIGNvbnN0IHN1bW1hcnkgPSBlbGVtZW50LmNsb3Nlc3QoJ3N1bW1hcnknKTtcbiAgICBpZiAoc3VtbWFyeSAmJiBzdW1tYXJ5LnBhcmVudE5vZGUgIT09IGNsb3NlZERldGFpbHMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHN1bW1hcnkgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVsZW1lbnRJc1Zpc2libGU7XG59O1xuY29uc3QgaXNEaXNhYmxlZCA9IGVsZW1lbnQgPT4ge1xuICBpZiAoIWVsZW1lbnQgfHwgZWxlbWVudC5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodHlwZW9mIGVsZW1lbnQuZGlzYWJsZWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuZGlzYWJsZWQ7XG4gIH1cbiAgcmV0dXJuIGVsZW1lbnQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkaXNhYmxlZCcpICE9PSAnZmFsc2UnO1xufTtcbmNvbnN0IGZpbmRTaGFkb3dSb290ID0gZWxlbWVudCA9PiB7XG4gIGlmICghZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmF0dGFjaFNoYWRvdykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQ2FuIGZpbmQgdGhlIHNoYWRvdyByb290IG90aGVyd2lzZSBpdCdsbCByZXR1cm4gdGhlIGRvY3VtZW50XG4gIGlmICh0eXBlb2YgZWxlbWVudC5nZXRSb290Tm9kZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IHJvb3QgPSBlbGVtZW50LmdldFJvb3ROb2RlKCk7XG4gICAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IG51bGw7XG4gIH1cbiAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICAvLyB3aGVuIHdlIGRvbid0IGZpbmQgYSBzaGFkb3cgcm9vdFxuICBpZiAoIWVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBmaW5kU2hhZG93Um9vdChlbGVtZW50LnBhcmVudE5vZGUpO1xufTtcbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuLyoqXG4gKiBUcmljayB0byByZXN0YXJ0IGFuIGVsZW1lbnQncyBhbmltYXRpb25cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHZvaWRcbiAqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LmNoYXJpc3RoZW8uaW8vYmxvZy8yMDIxLzAyL3Jlc3RhcnQtYS1jc3MtYW5pbWF0aW9uLXdpdGgtamF2YXNjcmlwdC8jcmVzdGFydGluZy1hLWNzcy1hbmltYXRpb25cbiAqL1xuY29uc3QgcmVmbG93ID0gZWxlbWVudCA9PiB7XG4gIGVsZW1lbnQub2Zmc2V0SGVpZ2h0OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xufTtcbmNvbnN0IGdldGpRdWVyeSA9ICgpID0+IHtcbiAgaWYgKHdpbmRvdy5qUXVlcnkgJiYgIWRvY3VtZW50LmJvZHkuaGFzQXR0cmlidXRlKCdkYXRhLWJzLW5vLWpxdWVyeScpKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5qUXVlcnk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuY29uc3QgRE9NQ29udGVudExvYWRlZENhbGxiYWNrcyA9IFtdO1xuY29uc3Qgb25ET01Db250ZW50TG9hZGVkID0gY2FsbGJhY2sgPT4ge1xuICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgLy8gYWRkIGxpc3RlbmVyIG9uIHRoZSBmaXJzdCBjYWxsIHdoZW4gdGhlIGRvY3VtZW50IGlzIGluIGxvYWRpbmcgc3RhdGVcbiAgICBpZiAoIURPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MubGVuZ3RoKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIERPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MpIHtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgRE9NQ29udGVudExvYWRlZENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjaygpO1xuICB9XG59O1xuY29uc3QgaXNSVEwgPSAoKSA9PiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGlyID09PSAncnRsJztcbmNvbnN0IGRlZmluZUpRdWVyeVBsdWdpbiA9IHBsdWdpbiA9PiB7XG4gIG9uRE9NQ29udGVudExvYWRlZCgoKSA9PiB7XG4gICAgY29uc3QgJCA9IGdldGpRdWVyeSgpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICgkKSB7XG4gICAgICBjb25zdCBuYW1lID0gcGx1Z2luLk5BTUU7XG4gICAgICBjb25zdCBKUVVFUllfTk9fQ09ORkxJQ1QgPSAkLmZuW25hbWVdO1xuICAgICAgJC5mbltuYW1lXSA9IHBsdWdpbi5qUXVlcnlJbnRlcmZhY2U7XG4gICAgICAkLmZuW25hbWVdLkNvbnN0cnVjdG9yID0gcGx1Z2luO1xuICAgICAgJC5mbltuYW1lXS5ub0NvbmZsaWN0ID0gKCkgPT4ge1xuICAgICAgICAkLmZuW25hbWVdID0gSlFVRVJZX05PX0NPTkZMSUNUO1xuICAgICAgICByZXR1cm4gcGx1Z2luLmpRdWVyeUludGVyZmFjZTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBleGVjdXRlID0gKHBvc3NpYmxlQ2FsbGJhY2ssIGFyZ3MgPSBbXSwgZGVmYXVsdFZhbHVlID0gcG9zc2libGVDYWxsYmFjaykgPT4ge1xuICByZXR1cm4gdHlwZW9mIHBvc3NpYmxlQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBwb3NzaWJsZUNhbGxiYWNrKC4uLmFyZ3MpIDogZGVmYXVsdFZhbHVlO1xufTtcbmNvbnN0IGV4ZWN1dGVBZnRlclRyYW5zaXRpb24gPSAoY2FsbGJhY2ssIHRyYW5zaXRpb25FbGVtZW50LCB3YWl0Rm9yVHJhbnNpdGlvbiA9IHRydWUpID0+IHtcbiAgaWYgKCF3YWl0Rm9yVHJhbnNpdGlvbikge1xuICAgIGV4ZWN1dGUoY2FsbGJhY2spO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBkdXJhdGlvblBhZGRpbmcgPSA1O1xuICBjb25zdCBlbXVsYXRlZER1cmF0aW9uID0gZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodHJhbnNpdGlvbkVsZW1lbnQpICsgZHVyYXRpb25QYWRkaW5nO1xuICBsZXQgY2FsbGVkID0gZmFsc2U7XG4gIGNvbnN0IGhhbmRsZXIgPSAoe1xuICAgIHRhcmdldFxuICB9KSA9PiB7XG4gICAgaWYgKHRhcmdldCAhPT0gdHJhbnNpdGlvbkVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2FsbGVkID0gdHJ1ZTtcbiAgICB0cmFuc2l0aW9uRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFRSQU5TSVRJT05fRU5ELCBoYW5kbGVyKTtcbiAgICBleGVjdXRlKGNhbGxiYWNrKTtcbiAgfTtcbiAgdHJhbnNpdGlvbkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihUUkFOU0lUSU9OX0VORCwgaGFuZGxlcik7XG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGlmICghY2FsbGVkKSB7XG4gICAgICB0cmlnZ2VyVHJhbnNpdGlvbkVuZCh0cmFuc2l0aW9uRWxlbWVudCk7XG4gICAgfVxuICB9LCBlbXVsYXRlZER1cmF0aW9uKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBwcmV2aW91cy9uZXh0IGVsZW1lbnQgb2YgYSBsaXN0LlxuICpcbiAqIEBwYXJhbSB7YXJyYXl9IGxpc3QgICAgVGhlIGxpc3Qgb2YgZWxlbWVudHNcbiAqIEBwYXJhbSBhY3RpdmVFbGVtZW50ICAgVGhlIGFjdGl2ZSBlbGVtZW50XG4gKiBAcGFyYW0gc2hvdWxkR2V0TmV4dCAgIENob29zZSB0byBnZXQgbmV4dCBvciBwcmV2aW91cyBlbGVtZW50XG4gKiBAcGFyYW0gaXNDeWNsZUFsbG93ZWRcbiAqIEByZXR1cm4ge0VsZW1lbnR8ZWxlbX0gVGhlIHByb3BlciBlbGVtZW50XG4gKi9cbmNvbnN0IGdldE5leHRBY3RpdmVFbGVtZW50ID0gKGxpc3QsIGFjdGl2ZUVsZW1lbnQsIHNob3VsZEdldE5leHQsIGlzQ3ljbGVBbGxvd2VkKSA9PiB7XG4gIGNvbnN0IGxpc3RMZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgbGV0IGluZGV4ID0gbGlzdC5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpO1xuXG4gIC8vIGlmIHRoZSBlbGVtZW50IGRvZXMgbm90IGV4aXN0IGluIHRoZSBsaXN0IHJldHVybiBhbiBlbGVtZW50XG4gIC8vIGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uIGFuZCBpZiBjeWNsZSBpcyBhbGxvd2VkXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gIXNob3VsZEdldE5leHQgJiYgaXNDeWNsZUFsbG93ZWQgPyBsaXN0W2xpc3RMZW5ndGggLSAxXSA6IGxpc3RbMF07XG4gIH1cbiAgaW5kZXggKz0gc2hvdWxkR2V0TmV4dCA/IDEgOiAtMTtcbiAgaWYgKGlzQ3ljbGVBbGxvd2VkKSB7XG4gICAgaW5kZXggPSAoaW5kZXggKyBsaXN0TGVuZ3RoKSAlIGxpc3RMZW5ndGg7XG4gIH1cbiAgcmV0dXJuIGxpc3RbTWF0aC5tYXgoMCwgTWF0aC5taW4oaW5kZXgsIGxpc3RMZW5ndGggLSAxKSldO1xufTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGRvbS9ldmVudC1oYW5kbGVyLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IG5hbWVzcGFjZVJlZ2V4ID0gL1teLl0qKD89XFwuLiopXFwufC4qLztcbmNvbnN0IHN0cmlwTmFtZVJlZ2V4ID0gL1xcLi4qLztcbmNvbnN0IHN0cmlwVWlkUmVnZXggPSAvOjpcXGQrJC87XG5jb25zdCBldmVudFJlZ2lzdHJ5ID0ge307IC8vIEV2ZW50cyBzdG9yYWdlXG5sZXQgdWlkRXZlbnQgPSAxO1xuY29uc3QgY3VzdG9tRXZlbnRzID0ge1xuICBtb3VzZWVudGVyOiAnbW91c2VvdmVyJyxcbiAgbW91c2VsZWF2ZTogJ21vdXNlb3V0J1xufTtcbmNvbnN0IG5hdGl2ZUV2ZW50cyA9IG5ldyBTZXQoWydjbGljaycsICdkYmxjbGljaycsICdtb3VzZXVwJywgJ21vdXNlZG93bicsICdjb250ZXh0bWVudScsICdtb3VzZXdoZWVsJywgJ0RPTU1vdXNlU2Nyb2xsJywgJ21vdXNlb3ZlcicsICdtb3VzZW91dCcsICdtb3VzZW1vdmUnLCAnc2VsZWN0c3RhcnQnLCAnc2VsZWN0ZW5kJywgJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnLCAnb3JpZW50YXRpb25jaGFuZ2UnLCAndG91Y2hzdGFydCcsICd0b3VjaG1vdmUnLCAndG91Y2hlbmQnLCAndG91Y2hjYW5jZWwnLCAncG9pbnRlcmRvd24nLCAncG9pbnRlcm1vdmUnLCAncG9pbnRlcnVwJywgJ3BvaW50ZXJsZWF2ZScsICdwb2ludGVyY2FuY2VsJywgJ2dlc3R1cmVzdGFydCcsICdnZXN0dXJlY2hhbmdlJywgJ2dlc3R1cmVlbmQnLCAnZm9jdXMnLCAnYmx1cicsICdjaGFuZ2UnLCAncmVzZXQnLCAnc2VsZWN0JywgJ3N1Ym1pdCcsICdmb2N1c2luJywgJ2ZvY3Vzb3V0JywgJ2xvYWQnLCAndW5sb2FkJywgJ2JlZm9yZXVubG9hZCcsICdyZXNpemUnLCAnbW92ZScsICdET01Db250ZW50TG9hZGVkJywgJ3JlYWR5c3RhdGVjaGFuZ2UnLCAnZXJyb3InLCAnYWJvcnQnLCAnc2Nyb2xsJ10pO1xuXG4vKipcbiAqIFByaXZhdGUgbWV0aG9kc1xuICovXG5cbmZ1bmN0aW9uIG1ha2VFdmVudFVpZChlbGVtZW50LCB1aWQpIHtcbiAgcmV0dXJuIHVpZCAmJiBgJHt1aWR9Ojoke3VpZEV2ZW50Kyt9YCB8fCBlbGVtZW50LnVpZEV2ZW50IHx8IHVpZEV2ZW50Kys7XG59XG5mdW5jdGlvbiBnZXRFbGVtZW50RXZlbnRzKGVsZW1lbnQpIHtcbiAgY29uc3QgdWlkID0gbWFrZUV2ZW50VWlkKGVsZW1lbnQpO1xuICBlbGVtZW50LnVpZEV2ZW50ID0gdWlkO1xuICBldmVudFJlZ2lzdHJ5W3VpZF0gPSBldmVudFJlZ2lzdHJ5W3VpZF0gfHwge307XG4gIHJldHVybiBldmVudFJlZ2lzdHJ5W3VpZF07XG59XG5mdW5jdGlvbiBib290c3RyYXBIYW5kbGVyKGVsZW1lbnQsIGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7XG4gICAgaHlkcmF0ZU9iaihldmVudCwge1xuICAgICAgZGVsZWdhdGVUYXJnZXQ6IGVsZW1lbnRcbiAgICB9KTtcbiAgICBpZiAoaGFuZGxlci5vbmVPZmYpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgZXZlbnQudHlwZSwgZm4pO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkoZWxlbWVudCwgW2V2ZW50XSk7XG4gIH07XG59XG5mdW5jdGlvbiBib290c3RyYXBEZWxlZ2F0aW9uSGFuZGxlcihlbGVtZW50LCBzZWxlY3RvciwgZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcbiAgICBjb25zdCBkb21FbGVtZW50cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gICAgZm9yIChsZXQge1xuICAgICAgdGFyZ2V0XG4gICAgfSA9IGV2ZW50OyB0YXJnZXQgJiYgdGFyZ2V0ICE9PSB0aGlzOyB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZSkge1xuICAgICAgZm9yIChjb25zdCBkb21FbGVtZW50IG9mIGRvbUVsZW1lbnRzKSB7XG4gICAgICAgIGlmIChkb21FbGVtZW50ICE9PSB0YXJnZXQpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBoeWRyYXRlT2JqKGV2ZW50LCB7XG4gICAgICAgICAgZGVsZWdhdGVUYXJnZXQ6IHRhcmdldFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGhhbmRsZXIub25lT2ZmKSB7XG4gICAgICAgICAgRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCBldmVudC50eXBlLCBzZWxlY3RvciwgZm4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmbi5hcHBseSh0YXJnZXQsIFtldmVudF0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIGZpbmRIYW5kbGVyKGV2ZW50cywgY2FsbGFibGUsIGRlbGVnYXRpb25TZWxlY3RvciA9IG51bGwpIHtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZXZlbnRzKS5maW5kKGV2ZW50ID0+IGV2ZW50LmNhbGxhYmxlID09PSBjYWxsYWJsZSAmJiBldmVudC5kZWxlZ2F0aW9uU2VsZWN0b3IgPT09IGRlbGVnYXRpb25TZWxlY3Rvcik7XG59XG5mdW5jdGlvbiBub3JtYWxpemVQYXJhbWV0ZXJzKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgY29uc3QgaXNEZWxlZ2F0ZWQgPSB0eXBlb2YgaGFuZGxlciA9PT0gJ3N0cmluZyc7XG4gIC8vIFRPRE86IHRvb2x0aXAgcGFzc2VzIGBmYWxzZWAgaW5zdGVhZCBvZiBzZWxlY3Rvciwgc28gd2UgbmVlZCB0byBjaGVja1xuICBjb25zdCBjYWxsYWJsZSA9IGlzRGVsZWdhdGVkID8gZGVsZWdhdGlvbkZ1bmN0aW9uIDogaGFuZGxlciB8fCBkZWxlZ2F0aW9uRnVuY3Rpb247XG4gIGxldCB0eXBlRXZlbnQgPSBnZXRUeXBlRXZlbnQob3JpZ2luYWxUeXBlRXZlbnQpO1xuICBpZiAoIW5hdGl2ZUV2ZW50cy5oYXModHlwZUV2ZW50KSkge1xuICAgIHR5cGVFdmVudCA9IG9yaWdpbmFsVHlwZUV2ZW50O1xuICB9XG4gIHJldHVybiBbaXNEZWxlZ2F0ZWQsIGNhbGxhYmxlLCB0eXBlRXZlbnRdO1xufVxuZnVuY3Rpb24gYWRkSGFuZGxlcihlbGVtZW50LCBvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCBvbmVPZmYpIHtcbiAgaWYgKHR5cGVvZiBvcmlnaW5hbFR5cGVFdmVudCAhPT0gJ3N0cmluZycgfHwgIWVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IFtpc0RlbGVnYXRlZCwgY2FsbGFibGUsIHR5cGVFdmVudF0gPSBub3JtYWxpemVQYXJhbWV0ZXJzKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pO1xuXG4gIC8vIGluIGNhc2Ugb2YgbW91c2VlbnRlciBvciBtb3VzZWxlYXZlIHdyYXAgdGhlIGhhbmRsZXIgd2l0aGluIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgZm9yIGl0cyBET00gcG9zaXRpb25cbiAgLy8gdGhpcyBwcmV2ZW50cyB0aGUgaGFuZGxlciBmcm9tIGJlaW5nIGRpc3BhdGNoZWQgdGhlIHNhbWUgd2F5IGFzIG1vdXNlb3ZlciBvciBtb3VzZW91dCBkb2VzXG4gIGlmIChvcmlnaW5hbFR5cGVFdmVudCBpbiBjdXN0b21FdmVudHMpIHtcbiAgICBjb25zdCB3cmFwRnVuY3Rpb24gPSBmbiA9PiB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmICghZXZlbnQucmVsYXRlZFRhcmdldCB8fCBldmVudC5yZWxhdGVkVGFyZ2V0ICE9PSBldmVudC5kZWxlZ2F0ZVRhcmdldCAmJiAhZXZlbnQuZGVsZWdhdGVUYXJnZXQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCkpIHtcbiAgICAgICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBjYWxsYWJsZSA9IHdyYXBGdW5jdGlvbihjYWxsYWJsZSk7XG4gIH1cbiAgY29uc3QgZXZlbnRzID0gZ2V0RWxlbWVudEV2ZW50cyhlbGVtZW50KTtcbiAgY29uc3QgaGFuZGxlcnMgPSBldmVudHNbdHlwZUV2ZW50XSB8fCAoZXZlbnRzW3R5cGVFdmVudF0gPSB7fSk7XG4gIGNvbnN0IHByZXZpb3VzRnVuY3Rpb24gPSBmaW5kSGFuZGxlcihoYW5kbGVycywgY2FsbGFibGUsIGlzRGVsZWdhdGVkID8gaGFuZGxlciA6IG51bGwpO1xuICBpZiAocHJldmlvdXNGdW5jdGlvbikge1xuICAgIHByZXZpb3VzRnVuY3Rpb24ub25lT2ZmID0gcHJldmlvdXNGdW5jdGlvbi5vbmVPZmYgJiYgb25lT2ZmO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB1aWQgPSBtYWtlRXZlbnRVaWQoY2FsbGFibGUsIG9yaWdpbmFsVHlwZUV2ZW50LnJlcGxhY2UobmFtZXNwYWNlUmVnZXgsICcnKSk7XG4gIGNvbnN0IGZuID0gaXNEZWxlZ2F0ZWQgPyBib290c3RyYXBEZWxlZ2F0aW9uSGFuZGxlcihlbGVtZW50LCBoYW5kbGVyLCBjYWxsYWJsZSkgOiBib290c3RyYXBIYW5kbGVyKGVsZW1lbnQsIGNhbGxhYmxlKTtcbiAgZm4uZGVsZWdhdGlvblNlbGVjdG9yID0gaXNEZWxlZ2F0ZWQgPyBoYW5kbGVyIDogbnVsbDtcbiAgZm4uY2FsbGFibGUgPSBjYWxsYWJsZTtcbiAgZm4ub25lT2ZmID0gb25lT2ZmO1xuICBmbi51aWRFdmVudCA9IHVpZDtcbiAgaGFuZGxlcnNbdWlkXSA9IGZuO1xuICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZUV2ZW50LCBmbiwgaXNEZWxlZ2F0ZWQpO1xufVxuZnVuY3Rpb24gcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvblNlbGVjdG9yKSB7XG4gIGNvbnN0IGZuID0gZmluZEhhbmRsZXIoZXZlbnRzW3R5cGVFdmVudF0sIGhhbmRsZXIsIGRlbGVnYXRpb25TZWxlY3Rvcik7XG4gIGlmICghZm4pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGVFdmVudCwgZm4sIEJvb2xlYW4oZGVsZWdhdGlvblNlbGVjdG9yKSk7XG4gIGRlbGV0ZSBldmVudHNbdHlwZUV2ZW50XVtmbi51aWRFdmVudF07XG59XG5mdW5jdGlvbiByZW1vdmVOYW1lc3BhY2VkSGFuZGxlcnMoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIG5hbWVzcGFjZSkge1xuICBjb25zdCBzdG9yZUVsZW1lbnRFdmVudCA9IGV2ZW50c1t0eXBlRXZlbnRdIHx8IHt9O1xuICBmb3IgKGNvbnN0IFtoYW5kbGVyS2V5LCBldmVudF0gb2YgT2JqZWN0LmVudHJpZXMoc3RvcmVFbGVtZW50RXZlbnQpKSB7XG4gICAgaWYgKGhhbmRsZXJLZXkuaW5jbHVkZXMobmFtZXNwYWNlKSkge1xuICAgICAgcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgZXZlbnQuY2FsbGFibGUsIGV2ZW50LmRlbGVnYXRpb25TZWxlY3Rvcik7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXRUeXBlRXZlbnQoZXZlbnQpIHtcbiAgLy8gYWxsb3cgdG8gZ2V0IHRoZSBuYXRpdmUgZXZlbnRzIGZyb20gbmFtZXNwYWNlZCBldmVudHMgKCdjbGljay5icy5idXR0b24nIC0tPiAnY2xpY2snKVxuICBldmVudCA9IGV2ZW50LnJlcGxhY2Uoc3RyaXBOYW1lUmVnZXgsICcnKTtcbiAgcmV0dXJuIGN1c3RvbUV2ZW50c1tldmVudF0gfHwgZXZlbnQ7XG59XG5jb25zdCBFdmVudEhhbmRsZXIgPSB7XG4gIG9uKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgICBhZGRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24sIGZhbHNlKTtcbiAgfSxcbiAgb25lKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgICBhZGRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24sIHRydWUpO1xuICB9LFxuICBvZmYoZWxlbWVudCwgb3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbikge1xuICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxUeXBlRXZlbnQgIT09ICdzdHJpbmcnIHx8ICFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IFtpc0RlbGVnYXRlZCwgY2FsbGFibGUsIHR5cGVFdmVudF0gPSBub3JtYWxpemVQYXJhbWV0ZXJzKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pO1xuICAgIGNvbnN0IGluTmFtZXNwYWNlID0gdHlwZUV2ZW50ICE9PSBvcmlnaW5hbFR5cGVFdmVudDtcbiAgICBjb25zdCBldmVudHMgPSBnZXRFbGVtZW50RXZlbnRzKGVsZW1lbnQpO1xuICAgIGNvbnN0IHN0b3JlRWxlbWVudEV2ZW50ID0gZXZlbnRzW3R5cGVFdmVudF0gfHwge307XG4gICAgY29uc3QgaXNOYW1lc3BhY2UgPSBvcmlnaW5hbFR5cGVFdmVudC5zdGFydHNXaXRoKCcuJyk7XG4gICAgaWYgKHR5cGVvZiBjYWxsYWJsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIFNpbXBsZXN0IGNhc2U6IGhhbmRsZXIgaXMgcGFzc2VkLCByZW1vdmUgdGhhdCBsaXN0ZW5lciBPTkxZLlxuICAgICAgaWYgKCFPYmplY3Qua2V5cyhzdG9yZUVsZW1lbnRFdmVudCkubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGNhbGxhYmxlLCBpc0RlbGVnYXRlZCA/IGhhbmRsZXIgOiBudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzTmFtZXNwYWNlKSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnRFdmVudCBvZiBPYmplY3Qua2V5cyhldmVudHMpKSB7XG4gICAgICAgIHJlbW92ZU5hbWVzcGFjZWRIYW5kbGVycyhlbGVtZW50LCBldmVudHMsIGVsZW1lbnRFdmVudCwgb3JpZ2luYWxUeXBlRXZlbnQuc2xpY2UoMSkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtrZXlIYW5kbGVycywgZXZlbnRdIG9mIE9iamVjdC5lbnRyaWVzKHN0b3JlRWxlbWVudEV2ZW50KSkge1xuICAgICAgY29uc3QgaGFuZGxlcktleSA9IGtleUhhbmRsZXJzLnJlcGxhY2Uoc3RyaXBVaWRSZWdleCwgJycpO1xuICAgICAgaWYgKCFpbk5hbWVzcGFjZSB8fCBvcmlnaW5hbFR5cGVFdmVudC5pbmNsdWRlcyhoYW5kbGVyS2V5KSkge1xuICAgICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBldmVudC5jYWxsYWJsZSwgZXZlbnQuZGVsZWdhdGlvblNlbGVjdG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHRyaWdnZXIoZWxlbWVudCwgZXZlbnQsIGFyZ3MpIHtcbiAgICBpZiAodHlwZW9mIGV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0ICQgPSBnZXRqUXVlcnkoKTtcbiAgICBjb25zdCB0eXBlRXZlbnQgPSBnZXRUeXBlRXZlbnQoZXZlbnQpO1xuICAgIGNvbnN0IGluTmFtZXNwYWNlID0gZXZlbnQgIT09IHR5cGVFdmVudDtcbiAgICBsZXQgalF1ZXJ5RXZlbnQgPSBudWxsO1xuICAgIGxldCBidWJibGVzID0gdHJ1ZTtcbiAgICBsZXQgbmF0aXZlRGlzcGF0Y2ggPSB0cnVlO1xuICAgIGxldCBkZWZhdWx0UHJldmVudGVkID0gZmFsc2U7XG4gICAgaWYgKGluTmFtZXNwYWNlICYmICQpIHtcbiAgICAgIGpRdWVyeUV2ZW50ID0gJC5FdmVudChldmVudCwgYXJncyk7XG4gICAgICAkKGVsZW1lbnQpLnRyaWdnZXIoalF1ZXJ5RXZlbnQpO1xuICAgICAgYnViYmxlcyA9ICFqUXVlcnlFdmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO1xuICAgICAgbmF0aXZlRGlzcGF0Y2ggPSAhalF1ZXJ5RXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKTtcbiAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSBqUXVlcnlFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKTtcbiAgICB9XG4gICAgY29uc3QgZXZ0ID0gaHlkcmF0ZU9iaihuZXcgRXZlbnQoZXZlbnQsIHtcbiAgICAgIGJ1YmJsZXMsXG4gICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgfSksIGFyZ3MpO1xuICAgIGlmIChkZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKG5hdGl2ZURpc3BhdGNoKSB7XG4gICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICB9XG4gICAgaWYgKGV2dC5kZWZhdWx0UHJldmVudGVkICYmIGpRdWVyeUV2ZW50KSB7XG4gICAgICBqUXVlcnlFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICByZXR1cm4gZXZ0O1xuICB9XG59O1xuZnVuY3Rpb24gaHlkcmF0ZU9iaihvYmosIG1ldGEgPSB7fSkge1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtZXRhKSkge1xuICAgIHRyeSB7XG4gICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgIH0gY2F0Y2ggKF91bnVzZWQpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgZG9tL21hbmlwdWxhdG9yLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuZnVuY3Rpb24gbm9ybWFsaXplRGF0YSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09ICd0cnVlJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodmFsdWUgPT09IE51bWJlcih2YWx1ZSkudG9TdHJpbmcoKSkge1xuICAgIHJldHVybiBOdW1iZXIodmFsdWUpO1xuICB9XG4gIGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09ICdudWxsJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG4gIH0gY2F0Y2ggKF91bnVzZWQpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGFLZXkoa2V5KSB7XG4gIHJldHVybiBrZXkucmVwbGFjZSgvW0EtWl0vZywgY2hyID0+IGAtJHtjaHIudG9Mb3dlckNhc2UoKX1gKTtcbn1cbmNvbnN0IE1hbmlwdWxhdG9yID0ge1xuICBzZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIGtleSwgdmFsdWUpIHtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShgZGF0YS1icy0ke25vcm1hbGl6ZURhdGFLZXkoa2V5KX1gLCB2YWx1ZSk7XG4gIH0sXG4gIHJlbW92ZURhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5KSB7XG4gICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYGRhdGEtYnMtJHtub3JtYWxpemVEYXRhS2V5KGtleSl9YCk7XG4gIH0sXG4gIGdldERhdGFBdHRyaWJ1dGVzKGVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHt9O1xuICAgIGNvbnN0IGJzS2V5cyA9IE9iamVjdC5rZXlzKGVsZW1lbnQuZGF0YXNldCkuZmlsdGVyKGtleSA9PiBrZXkuc3RhcnRzV2l0aCgnYnMnKSAmJiAha2V5LnN0YXJ0c1dpdGgoJ2JzQ29uZmlnJykpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGJzS2V5cykge1xuICAgICAgbGV0IHB1cmVLZXkgPSBrZXkucmVwbGFjZSgvXmJzLywgJycpO1xuICAgICAgcHVyZUtleSA9IHB1cmVLZXkuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBwdXJlS2V5LnNsaWNlKDEsIHB1cmVLZXkubGVuZ3RoKTtcbiAgICAgIGF0dHJpYnV0ZXNbcHVyZUtleV0gPSBub3JtYWxpemVEYXRhKGVsZW1lbnQuZGF0YXNldFtrZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gIH0sXG4gIGdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5KSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZURhdGEoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYGRhdGEtYnMtJHtub3JtYWxpemVEYXRhS2V5KGtleSl9YCkpO1xuICB9XG59O1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9jb25maWcuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIENvbmZpZyB7XG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgaGF2ZSB0byBpbXBsZW1lbnQgdGhlIHN0YXRpYyBtZXRob2QgXCJOQU1FXCIsIGZvciBlYWNoIGNvbXBvbmVudCEnKTtcbiAgfVxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHRoaXMuX21lcmdlQ29uZmlnT2JqKGNvbmZpZyk7XG4gICAgY29uZmlnID0gdGhpcy5fY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpO1xuICAgIHRoaXMuX3R5cGVDaGVja0NvbmZpZyhjb25maWcpO1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfbWVyZ2VDb25maWdPYmooY29uZmlnLCBlbGVtZW50KSB7XG4gICAgY29uc3QganNvbkNvbmZpZyA9IGlzRWxlbWVudChlbGVtZW50KSA/IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwgJ2NvbmZpZycpIDoge307IC8vIHRyeSB0byBwYXJzZVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuY29uc3RydWN0b3IuRGVmYXVsdCxcbiAgICAgIC4uLih0eXBlb2YganNvbkNvbmZpZyA9PT0gJ29iamVjdCcgPyBqc29uQ29uZmlnIDoge30pLFxuICAgICAgLi4uKGlzRWxlbWVudChlbGVtZW50KSA/IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGVzKGVsZW1lbnQpIDoge30pLFxuICAgICAgLi4uKHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnID8gY29uZmlnIDoge30pXG4gICAgfTtcbiAgfVxuICBfdHlwZUNoZWNrQ29uZmlnKGNvbmZpZywgY29uZmlnVHlwZXMgPSB0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBlKSB7XG4gICAgZm9yIChjb25zdCBbcHJvcGVydHksIGV4cGVjdGVkVHlwZXNdIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZ1R5cGVzKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBjb25maWdbcHJvcGVydHldO1xuICAgICAgY29uc3QgdmFsdWVUeXBlID0gaXNFbGVtZW50KHZhbHVlKSA/ICdlbGVtZW50JyA6IHRvVHlwZSh2YWx1ZSk7XG4gICAgICBpZiAoIW5ldyBSZWdFeHAoZXhwZWN0ZWRUeXBlcykudGVzdCh2YWx1ZVR5cGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FLnRvVXBwZXJDYXNlKCl9OiBPcHRpb24gXCIke3Byb3BlcnR5fVwiIHByb3ZpZGVkIHR5cGUgXCIke3ZhbHVlVHlwZX1cIiBidXQgZXhwZWN0ZWQgdHlwZSBcIiR7ZXhwZWN0ZWRUeXBlc31cIi5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGJhc2UtY29tcG9uZW50LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IFZFUlNJT04gPSAnNS4zLjMnO1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBCYXNlQ29tcG9uZW50IGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoKTtcbiAgICBlbGVtZW50ID0gZ2V0RWxlbWVudChlbGVtZW50KTtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgRGF0YS5zZXQodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSwgdGhpcyk7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgZGlzcG9zZSgpIHtcbiAgICBEYXRhLnJlbW92ZSh0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZKTtcbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuRVZFTlRfS0VZKTtcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkge1xuICAgICAgdGhpc1twcm9wZXJ0eU5hbWVdID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgX3F1ZXVlQ2FsbGJhY2soY2FsbGJhY2ssIGVsZW1lbnQsIGlzQW5pbWF0ZWQgPSB0cnVlKSB7XG4gICAgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbihjYWxsYmFjaywgZWxlbWVudCwgaXNBbmltYXRlZCk7XG4gIH1cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB0aGlzLl9tZXJnZUNvbmZpZ09iaihjb25maWcsIHRoaXMuX2VsZW1lbnQpO1xuICAgIGNvbmZpZyA9IHRoaXMuX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKTtcbiAgICB0aGlzLl90eXBlQ2hlY2tDb25maWcoY29uZmlnKTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBnZXRJbnN0YW5jZShlbGVtZW50KSB7XG4gICAgcmV0dXJuIERhdGEuZ2V0KGdldEVsZW1lbnQoZWxlbWVudCksIHRoaXMuREFUQV9LRVkpO1xuICB9XG4gIHN0YXRpYyBnZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQsIGNvbmZpZyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SW5zdGFuY2UoZWxlbWVudCkgfHwgbmV3IHRoaXMoZWxlbWVudCwgdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiBudWxsKTtcbiAgfVxuICBzdGF0aWMgZ2V0IFZFUlNJT04oKSB7XG4gICAgcmV0dXJuIFZFUlNJT047XG4gIH1cbiAgc3RhdGljIGdldCBEQVRBX0tFWSgpIHtcbiAgICByZXR1cm4gYGJzLiR7dGhpcy5OQU1FfWA7XG4gIH1cbiAgc3RhdGljIGdldCBFVkVOVF9LRVkoKSB7XG4gICAgcmV0dXJuIGAuJHt0aGlzLkRBVEFfS0VZfWA7XG4gIH1cbiAgc3RhdGljIGV2ZW50TmFtZShuYW1lKSB7XG4gICAgcmV0dXJuIGAke25hbWV9JHt0aGlzLkVWRU5UX0tFWX1gO1xuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBkb20vc2VsZWN0b3ItZW5naW5lLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgZ2V0U2VsZWN0b3IgPSBlbGVtZW50ID0+IHtcbiAgbGV0IHNlbGVjdG9yID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtdGFyZ2V0Jyk7XG4gIGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09ICcjJykge1xuICAgIGxldCBocmVmQXR0cmlidXRlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcblxuICAgIC8vIFRoZSBvbmx5IHZhbGlkIGNvbnRlbnQgdGhhdCBjb3VsZCBkb3VibGUgYXMgYSBzZWxlY3RvciBhcmUgSURzIG9yIGNsYXNzZXMsXG4gICAgLy8gc28gZXZlcnl0aGluZyBzdGFydGluZyB3aXRoIGAjYCBvciBgLmAuIElmIGEgXCJyZWFsXCIgVVJMIGlzIHVzZWQgYXMgdGhlIHNlbGVjdG9yLFxuICAgIC8vIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCB3aWxsIHJpZ2h0ZnVsbHkgY29tcGxhaW4gaXQgaXMgaW52YWxpZC5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8zMjI3M1xuICAgIGlmICghaHJlZkF0dHJpYnV0ZSB8fCAhaHJlZkF0dHJpYnV0ZS5pbmNsdWRlcygnIycpICYmICFocmVmQXR0cmlidXRlLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gSnVzdCBpbiBjYXNlIHNvbWUgQ01TIHB1dHMgb3V0IGEgZnVsbCBVUkwgd2l0aCB0aGUgYW5jaG9yIGFwcGVuZGVkXG4gICAgaWYgKGhyZWZBdHRyaWJ1dGUuaW5jbHVkZXMoJyMnKSAmJiAhaHJlZkF0dHJpYnV0ZS5zdGFydHNXaXRoKCcjJykpIHtcbiAgICAgIGhyZWZBdHRyaWJ1dGUgPSBgIyR7aHJlZkF0dHJpYnV0ZS5zcGxpdCgnIycpWzFdfWA7XG4gICAgfVxuICAgIHNlbGVjdG9yID0gaHJlZkF0dHJpYnV0ZSAmJiBocmVmQXR0cmlidXRlICE9PSAnIycgPyBocmVmQXR0cmlidXRlLnRyaW0oKSA6IG51bGw7XG4gIH1cbiAgcmV0dXJuIHNlbGVjdG9yID8gc2VsZWN0b3Iuc3BsaXQoJywnKS5tYXAoc2VsID0+IHBhcnNlU2VsZWN0b3Ioc2VsKSkuam9pbignLCcpIDogbnVsbDtcbn07XG5jb25zdCBTZWxlY3RvckVuZ2luZSA9IHtcbiAgZmluZChzZWxlY3RvciwgZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgIHJldHVybiBbXS5jb25jYXQoLi4uRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbC5jYWxsKGVsZW1lbnQsIHNlbGVjdG9yKSk7XG4gIH0sXG4gIGZpbmRPbmUoc2VsZWN0b3IsIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3Rvci5jYWxsKGVsZW1lbnQsIHNlbGVjdG9yKTtcbiAgfSxcbiAgY2hpbGRyZW4oZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gW10uY29uY2F0KC4uLmVsZW1lbnQuY2hpbGRyZW4pLmZpbHRlcihjaGlsZCA9PiBjaGlsZC5tYXRjaGVzKHNlbGVjdG9yKSk7XG4gIH0sXG4gIHBhcmVudHMoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCBwYXJlbnRzID0gW107XG4gICAgbGV0IGFuY2VzdG9yID0gZWxlbWVudC5wYXJlbnROb2RlLmNsb3Nlc3Qoc2VsZWN0b3IpO1xuICAgIHdoaWxlIChhbmNlc3Rvcikge1xuICAgICAgcGFyZW50cy5wdXNoKGFuY2VzdG9yKTtcbiAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50Tm9kZS5jbG9zZXN0KHNlbGVjdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmVudHM7XG4gIH0sXG4gIHByZXYoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICBsZXQgcHJldmlvdXMgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgd2hpbGUgKHByZXZpb3VzKSB7XG4gICAgICBpZiAocHJldmlvdXMubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgICAgcmV0dXJuIFtwcmV2aW91c107XG4gICAgICB9XG4gICAgICBwcmV2aW91cyA9IHByZXZpb3VzLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfSxcbiAgLy8gVE9ETzogdGhpcyBpcyBub3cgdW51c2VkOyByZW1vdmUgbGF0ZXIgYWxvbmcgd2l0aCBwcmV2KClcbiAgbmV4dChlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIGxldCBuZXh0ID0gZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgd2hpbGUgKG5leHQpIHtcbiAgICAgIGlmIChuZXh0Lm1hdGNoZXMoc2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBbbmV4dF07XG4gICAgICB9XG4gICAgICBuZXh0ID0gbmV4dC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfSxcbiAgZm9jdXNhYmxlQ2hpbGRyZW4oZWxlbWVudCkge1xuICAgIGNvbnN0IGZvY3VzYWJsZXMgPSBbJ2EnLCAnYnV0dG9uJywgJ2lucHV0JywgJ3RleHRhcmVhJywgJ3NlbGVjdCcsICdkZXRhaWxzJywgJ1t0YWJpbmRleF0nLCAnW2NvbnRlbnRlZGl0YWJsZT1cInRydWVcIl0nXS5tYXAoc2VsZWN0b3IgPT4gYCR7c2VsZWN0b3J9Om5vdChbdGFiaW5kZXhePVwiLVwiXSlgKS5qb2luKCcsJyk7XG4gICAgcmV0dXJuIHRoaXMuZmluZChmb2N1c2FibGVzLCBlbGVtZW50KS5maWx0ZXIoZWwgPT4gIWlzRGlzYWJsZWQoZWwpICYmIGlzVmlzaWJsZShlbCkpO1xuICB9LFxuICBnZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgICBjb25zdCBzZWxlY3RvciA9IGdldFNlbGVjdG9yKGVsZW1lbnQpO1xuICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoc2VsZWN0b3IpID8gc2VsZWN0b3IgOiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgZ2V0RWxlbWVudEZyb21TZWxlY3RvcihlbGVtZW50KSB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihlbGVtZW50KTtcbiAgICByZXR1cm4gc2VsZWN0b3IgPyBTZWxlY3RvckVuZ2luZS5maW5kT25lKHNlbGVjdG9yKSA6IG51bGw7XG4gIH0sXG4gIGdldE11bHRpcGxlRWxlbWVudHNGcm9tU2VsZWN0b3IoZWxlbWVudCkge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgcmV0dXJuIHNlbGVjdG9yID8gU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvcikgOiBbXTtcbiAgfVxufTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvY29tcG9uZW50LWZ1bmN0aW9ucy5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IGVuYWJsZURpc21pc3NUcmlnZ2VyID0gKGNvbXBvbmVudCwgbWV0aG9kID0gJ2hpZGUnKSA9PiB7XG4gIGNvbnN0IGNsaWNrRXZlbnQgPSBgY2xpY2suZGlzbWlzcyR7Y29tcG9uZW50LkVWRU5UX0tFWX1gO1xuICBjb25zdCBuYW1lID0gY29tcG9uZW50Lk5BTUU7XG4gIEV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgY2xpY2tFdmVudCwgYFtkYXRhLWJzLWRpc21pc3M9XCIke25hbWV9XCJdYCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKFsnQScsICdBUkVBJ10uaW5jbHVkZXModGhpcy50YWdOYW1lKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKSB8fCB0aGlzLmNsb3Nlc3QoYC4ke25hbWV9YCk7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBjb21wb25lbnQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpO1xuXG4gICAgLy8gTWV0aG9kIGFyZ3VtZW50IGlzIGxlZnQsIGZvciBBbGVydCBhbmQgb25seSwgYXMgaXQgZG9lc24ndCBpbXBsZW1lbnQgdGhlICdoaWRlJyBtZXRob2RcbiAgICBpbnN0YW5jZVttZXRob2RdKCk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGFsZXJ0LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkZiA9ICdhbGVydCc7XG5jb25zdCBEQVRBX0tFWSRhID0gJ2JzLmFsZXJ0JztcbmNvbnN0IEVWRU5UX0tFWSRiID0gYC4ke0RBVEFfS0VZJGF9YDtcbmNvbnN0IEVWRU5UX0NMT1NFID0gYGNsb3NlJHtFVkVOVF9LRVkkYn1gO1xuY29uc3QgRVZFTlRfQ0xPU0VEID0gYGNsb3NlZCR7RVZFTlRfS0VZJGJ9YDtcbmNvbnN0IENMQVNTX05BTUVfRkFERSQ1ID0gJ2ZhZGUnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDggPSAnc2hvdyc7XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEFsZXJ0IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJGY7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgY2xvc2UoKSB7XG4gICAgY29uc3QgY2xvc2VFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMT1NFKTtcbiAgICBpZiAoY2xvc2VFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckOCk7XG4gICAgY29uc3QgaXNBbmltYXRlZCA9IHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSQ1KTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpID0+IHRoaXMuX2Rlc3Ryb3lFbGVtZW50KCksIHRoaXMuX2VsZW1lbnQsIGlzQW5pbWF0ZWQpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZGVzdHJveUVsZW1lbnQoKSB7XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmUoKTtcbiAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9DTE9TRUQpO1xuICAgIHRoaXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gQWxlcnQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZGF0YVtjb25maWddID09PSB1bmRlZmluZWQgfHwgY29uZmlnLnN0YXJ0c1dpdGgoJ18nKSB8fCBjb25maWcgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFbY29uZmlnXSh0aGlzKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuZW5hYmxlRGlzbWlzc1RyaWdnZXIoQWxlcnQsICdjbG9zZScpO1xuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihBbGVydCk7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBidXR0b24uanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSRlID0gJ2J1dHRvbic7XG5jb25zdCBEQVRBX0tFWSQ5ID0gJ2JzLmJ1dHRvbic7XG5jb25zdCBFVkVOVF9LRVkkYSA9IGAuJHtEQVRBX0tFWSQ5fWA7XG5jb25zdCBEQVRBX0FQSV9LRVkkNiA9ICcuZGF0YS1hcGknO1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUkMyA9ICdhY3RpdmUnO1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUkNSA9ICdbZGF0YS1icy10b2dnbGU9XCJidXR0b25cIl0nO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkNiA9IGBjbGljayR7RVZFTlRfS0VZJGF9JHtEQVRBX0FQSV9LRVkkNn1gO1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBCdXR0b24gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkZTtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICB0b2dnbGUoKSB7XG4gICAgLy8gVG9nZ2xlIGNsYXNzIGFuZCBzeW5jIHRoZSBgYXJpYS1wcmVzc2VkYCBhdHRyaWJ1dGUgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBgLnRvZ2dsZSgpYCBtZXRob2RcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKENMQVNTX05BTUVfQUNUSVZFJDMpKTtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IEJ1dHRvbi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpO1xuICAgICAgaWYgKGNvbmZpZyA9PT0gJ3RvZ2dsZScpIHtcbiAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkNiwgU0VMRUNUT1JfREFUQV9UT0dHTEUkNSwgZXZlbnQgPT4ge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBjb25zdCBidXR0b24gPSBldmVudC50YXJnZXQuY2xvc2VzdChTRUxFQ1RPUl9EQVRBX1RPR0dMRSQ1KTtcbiAgY29uc3QgZGF0YSA9IEJ1dHRvbi5nZXRPckNyZWF0ZUluc3RhbmNlKGJ1dHRvbik7XG4gIGRhdGEudG9nZ2xlKCk7XG59KTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQnV0dG9uKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvc3dpcGUuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSRkID0gJ3N3aXBlJztcbmNvbnN0IEVWRU5UX0tFWSQ5ID0gJy5icy5zd2lwZSc7XG5jb25zdCBFVkVOVF9UT1VDSFNUQVJUID0gYHRvdWNoc3RhcnQke0VWRU5UX0tFWSQ5fWA7XG5jb25zdCBFVkVOVF9UT1VDSE1PVkUgPSBgdG91Y2htb3ZlJHtFVkVOVF9LRVkkOX1gO1xuY29uc3QgRVZFTlRfVE9VQ0hFTkQgPSBgdG91Y2hlbmQke0VWRU5UX0tFWSQ5fWA7XG5jb25zdCBFVkVOVF9QT0lOVEVSRE9XTiA9IGBwb2ludGVyZG93biR7RVZFTlRfS0VZJDl9YDtcbmNvbnN0IEVWRU5UX1BPSU5URVJVUCA9IGBwb2ludGVydXAke0VWRU5UX0tFWSQ5fWA7XG5jb25zdCBQT0lOVEVSX1RZUEVfVE9VQ0ggPSAndG91Y2gnO1xuY29uc3QgUE9JTlRFUl9UWVBFX1BFTiA9ICdwZW4nO1xuY29uc3QgQ0xBU1NfTkFNRV9QT0lOVEVSX0VWRU5UID0gJ3BvaW50ZXItZXZlbnQnO1xuY29uc3QgU1dJUEVfVEhSRVNIT0xEID0gNDA7XG5jb25zdCBEZWZhdWx0JGMgPSB7XG4gIGVuZENhbGxiYWNrOiBudWxsLFxuICBsZWZ0Q2FsbGJhY2s6IG51bGwsXG4gIHJpZ2h0Q2FsbGJhY2s6IG51bGxcbn07XG5jb25zdCBEZWZhdWx0VHlwZSRjID0ge1xuICBlbmRDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKScsXG4gIGxlZnRDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKScsXG4gIHJpZ2h0Q2FsbGJhY2s6ICcoZnVuY3Rpb258bnVsbCknXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBTd2lwZSBleHRlbmRzIENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgaWYgKCFlbGVtZW50IHx8ICFTd2lwZS5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgIHRoaXMuX2RlbHRhWCA9IDA7XG4gICAgdGhpcy5fc3VwcG9ydFBvaW50ZXJFdmVudHMgPSBCb29sZWFuKHdpbmRvdy5Qb2ludGVyRXZlbnQpO1xuICAgIHRoaXMuX2luaXRFdmVudHMoKTtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JGM7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkYztcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkZDtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBkaXNwb3NlKCkge1xuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZJDkpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfc3RhcnQoZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzKSB7XG4gICAgICB0aGlzLl9kZWx0YVggPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFg7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9ldmVudElzUG9pbnRlclBlblRvdWNoKGV2ZW50KSkge1xuICAgICAgdGhpcy5fZGVsdGFYID0gZXZlbnQuY2xpZW50WDtcbiAgICB9XG4gIH1cbiAgX2VuZChldmVudCkge1xuICAgIGlmICh0aGlzLl9ldmVudElzUG9pbnRlclBlblRvdWNoKGV2ZW50KSkge1xuICAgICAgdGhpcy5fZGVsdGFYID0gZXZlbnQuY2xpZW50WCAtIHRoaXMuX2RlbHRhWDtcbiAgICB9XG4gICAgdGhpcy5faGFuZGxlU3dpcGUoKTtcbiAgICBleGVjdXRlKHRoaXMuX2NvbmZpZy5lbmRDYWxsYmFjayk7XG4gIH1cbiAgX21vdmUoZXZlbnQpIHtcbiAgICB0aGlzLl9kZWx0YVggPSBldmVudC50b3VjaGVzICYmIGV2ZW50LnRvdWNoZXMubGVuZ3RoID4gMSA/IDAgOiBldmVudC50b3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLl9kZWx0YVg7XG4gIH1cbiAgX2hhbmRsZVN3aXBlKCkge1xuICAgIGNvbnN0IGFic0RlbHRhWCA9IE1hdGguYWJzKHRoaXMuX2RlbHRhWCk7XG4gICAgaWYgKGFic0RlbHRhWCA8PSBTV0lQRV9USFJFU0hPTEQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGlyZWN0aW9uID0gYWJzRGVsdGFYIC8gdGhpcy5fZGVsdGFYO1xuICAgIHRoaXMuX2RlbHRhWCA9IDA7XG4gICAgaWYgKCFkaXJlY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXhlY3V0ZShkaXJlY3Rpb24gPiAwID8gdGhpcy5fY29uZmlnLnJpZ2h0Q2FsbGJhY2sgOiB0aGlzLl9jb25maWcubGVmdENhbGxiYWNrKTtcbiAgfVxuICBfaW5pdEV2ZW50cygpIHtcbiAgICBpZiAodGhpcy5fc3VwcG9ydFBvaW50ZXJFdmVudHMpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9QT0lOVEVSRE9XTiwgZXZlbnQgPT4gdGhpcy5fc3RhcnQoZXZlbnQpKTtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9QT0lOVEVSVVAsIGV2ZW50ID0+IHRoaXMuX2VuZChldmVudCkpO1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfUE9JTlRFUl9FVkVOVCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9UT1VDSFNUQVJULCBldmVudCA9PiB0aGlzLl9zdGFydChldmVudCkpO1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1RPVUNITU9WRSwgZXZlbnQgPT4gdGhpcy5fbW92ZShldmVudCkpO1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1RPVUNIRU5ELCBldmVudCA9PiB0aGlzLl9lbmQoZXZlbnQpKTtcbiAgICB9XG4gIH1cbiAgX2V2ZW50SXNQb2ludGVyUGVuVG91Y2goZXZlbnQpIHtcbiAgICByZXR1cm4gdGhpcy5fc3VwcG9ydFBvaW50ZXJFdmVudHMgJiYgKGV2ZW50LnBvaW50ZXJUeXBlID09PSBQT0lOVEVSX1RZUEVfUEVOIHx8IGV2ZW50LnBvaW50ZXJUeXBlID09PSBQT0lOVEVSX1RZUEVfVE9VQ0gpO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBpc1N1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDA7XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGNhcm91c2VsLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkYyA9ICdjYXJvdXNlbCc7XG5jb25zdCBEQVRBX0tFWSQ4ID0gJ2JzLmNhcm91c2VsJztcbmNvbnN0IEVWRU5UX0tFWSQ4ID0gYC4ke0RBVEFfS0VZJDh9YDtcbmNvbnN0IERBVEFfQVBJX0tFWSQ1ID0gJy5kYXRhLWFwaSc7XG5jb25zdCBBUlJPV19MRUZUX0tFWSQxID0gJ0Fycm93TGVmdCc7XG5jb25zdCBBUlJPV19SSUdIVF9LRVkkMSA9ICdBcnJvd1JpZ2h0JztcbmNvbnN0IFRPVUNIRVZFTlRfQ09NUEFUX1dBSVQgPSA1MDA7IC8vIFRpbWUgZm9yIG1vdXNlIGNvbXBhdCBldmVudHMgdG8gZmlyZSBhZnRlciB0b3VjaFxuXG5jb25zdCBPUkRFUl9ORVhUID0gJ25leHQnO1xuY29uc3QgT1JERVJfUFJFViA9ICdwcmV2JztcbmNvbnN0IERJUkVDVElPTl9MRUZUID0gJ2xlZnQnO1xuY29uc3QgRElSRUNUSU9OX1JJR0hUID0gJ3JpZ2h0JztcbmNvbnN0IEVWRU5UX1NMSURFID0gYHNsaWRlJHtFVkVOVF9LRVkkOH1gO1xuY29uc3QgRVZFTlRfU0xJRCA9IGBzbGlkJHtFVkVOVF9LRVkkOH1gO1xuY29uc3QgRVZFTlRfS0VZRE9XTiQxID0gYGtleWRvd24ke0VWRU5UX0tFWSQ4fWA7XG5jb25zdCBFVkVOVF9NT1VTRUVOVEVSJDEgPSBgbW91c2VlbnRlciR7RVZFTlRfS0VZJDh9YDtcbmNvbnN0IEVWRU5UX01PVVNFTEVBVkUkMSA9IGBtb3VzZWxlYXZlJHtFVkVOVF9LRVkkOH1gO1xuY29uc3QgRVZFTlRfRFJBR19TVEFSVCA9IGBkcmFnc3RhcnQke0VWRU5UX0tFWSQ4fWA7XG5jb25zdCBFVkVOVF9MT0FEX0RBVEFfQVBJJDMgPSBgbG9hZCR7RVZFTlRfS0VZJDh9JHtEQVRBX0FQSV9LRVkkNX1gO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkNSA9IGBjbGljayR7RVZFTlRfS0VZJDh9JHtEQVRBX0FQSV9LRVkkNX1gO1xuY29uc3QgQ0xBU1NfTkFNRV9DQVJPVVNFTCA9ICdjYXJvdXNlbCc7XG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSQyID0gJ2FjdGl2ZSc7XG5jb25zdCBDTEFTU19OQU1FX1NMSURFID0gJ3NsaWRlJztcbmNvbnN0IENMQVNTX05BTUVfRU5EID0gJ2Nhcm91c2VsLWl0ZW0tZW5kJztcbmNvbnN0IENMQVNTX05BTUVfU1RBUlQgPSAnY2Fyb3VzZWwtaXRlbS1zdGFydCc7XG5jb25zdCBDTEFTU19OQU1FX05FWFQgPSAnY2Fyb3VzZWwtaXRlbS1uZXh0JztcbmNvbnN0IENMQVNTX05BTUVfUFJFViA9ICdjYXJvdXNlbC1pdGVtLXByZXYnO1xuY29uc3QgU0VMRUNUT1JfQUNUSVZFID0gJy5hY3RpdmUnO1xuY29uc3QgU0VMRUNUT1JfSVRFTSA9ICcuY2Fyb3VzZWwtaXRlbSc7XG5jb25zdCBTRUxFQ1RPUl9BQ1RJVkVfSVRFTSA9IFNFTEVDVE9SX0FDVElWRSArIFNFTEVDVE9SX0lURU07XG5jb25zdCBTRUxFQ1RPUl9JVEVNX0lNRyA9ICcuY2Fyb3VzZWwtaXRlbSBpbWcnO1xuY29uc3QgU0VMRUNUT1JfSU5ESUNBVE9SUyA9ICcuY2Fyb3VzZWwtaW5kaWNhdG9ycyc7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1NMSURFID0gJ1tkYXRhLWJzLXNsaWRlXSwgW2RhdGEtYnMtc2xpZGUtdG9dJztcbmNvbnN0IFNFTEVDVE9SX0RBVEFfUklERSA9ICdbZGF0YS1icy1yaWRlPVwiY2Fyb3VzZWxcIl0nO1xuY29uc3QgS0VZX1RPX0RJUkVDVElPTiA9IHtcbiAgW0FSUk9XX0xFRlRfS0VZJDFdOiBESVJFQ1RJT05fUklHSFQsXG4gIFtBUlJPV19SSUdIVF9LRVkkMV06IERJUkVDVElPTl9MRUZUXG59O1xuY29uc3QgRGVmYXVsdCRiID0ge1xuICBpbnRlcnZhbDogNTAwMCxcbiAga2V5Ym9hcmQ6IHRydWUsXG4gIHBhdXNlOiAnaG92ZXInLFxuICByaWRlOiBmYWxzZSxcbiAgdG91Y2g6IHRydWUsXG4gIHdyYXA6IHRydWVcbn07XG5jb25zdCBEZWZhdWx0VHlwZSRiID0ge1xuICBpbnRlcnZhbDogJyhudW1iZXJ8Ym9vbGVhbiknLFxuICAvLyBUT0RPOnY2IHJlbW92ZSBib29sZWFuIHN1cHBvcnRcbiAga2V5Ym9hcmQ6ICdib29sZWFuJyxcbiAgcGF1c2U6ICcoc3RyaW5nfGJvb2xlYW4pJyxcbiAgcmlkZTogJyhib29sZWFufHN0cmluZyknLFxuICB0b3VjaDogJ2Jvb2xlYW4nLFxuICB3cmFwOiAnYm9vbGVhbidcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIENhcm91c2VsIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG4gICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlO1xuICAgIHRoaXMudG91Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLl9zd2lwZUhlbHBlciA9IG51bGw7XG4gICAgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0lORElDQVRPUlMsIHRoaXMuX2VsZW1lbnQpO1xuICAgIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5yaWRlID09PSBDTEFTU19OQU1FX0NBUk9VU0VMKSB7XG4gICAgICB0aGlzLmN5Y2xlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkYjtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSRiO1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSRjO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIG5leHQoKSB7XG4gICAgdGhpcy5fc2xpZGUoT1JERVJfTkVYVCk7XG4gIH1cbiAgbmV4dFdoZW5WaXNpYmxlKCkge1xuICAgIC8vIEZJWE1FIFRPRE8gdXNlIGBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGVgXG4gICAgLy8gRG9uJ3QgY2FsbCBuZXh0IHdoZW4gdGhlIHBhZ2UgaXNuJ3QgdmlzaWJsZVxuICAgIC8vIG9yIHRoZSBjYXJvdXNlbCBvciBpdHMgcGFyZW50IGlzbid0IHZpc2libGVcbiAgICBpZiAoIWRvY3VtZW50LmhpZGRlbiAmJiBpc1Zpc2libGUodGhpcy5fZWxlbWVudCkpIHtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH1cbiAgfVxuICBwcmV2KCkge1xuICAgIHRoaXMuX3NsaWRlKE9SREVSX1BSRVYpO1xuICB9XG4gIHBhdXNlKCkge1xuICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgIHRyaWdnZXJUcmFuc2l0aW9uRW5kKHRoaXMuX2VsZW1lbnQpO1xuICAgIH1cbiAgICB0aGlzLl9jbGVhckludGVydmFsKCk7XG4gIH1cbiAgY3ljbGUoKSB7XG4gICAgdGhpcy5fY2xlYXJJbnRlcnZhbCgpO1xuICAgIHRoaXMuX3VwZGF0ZUludGVydmFsKCk7XG4gICAgdGhpcy5faW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLm5leHRXaGVuVmlzaWJsZSgpLCB0aGlzLl9jb25maWcuaW50ZXJ2YWwpO1xuICB9XG4gIF9tYXliZUVuYWJsZUN5Y2xlKCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnLnJpZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uZSh0aGlzLl9lbGVtZW50LCBFVkVOVF9TTElELCAoKSA9PiB0aGlzLmN5Y2xlKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmN5Y2xlKCk7XG4gIH1cbiAgdG8oaW5kZXgpIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2dldEl0ZW1zKCk7XG4gICAgaWYgKGluZGV4ID4gaXRlbXMubGVuZ3RoIC0gMSB8fCBpbmRleCA8IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uZSh0aGlzLl9lbGVtZW50LCBFVkVOVF9TTElELCAoKSA9PiB0aGlzLnRvKGluZGV4KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2dldEFjdGl2ZSgpKTtcbiAgICBpZiAoYWN0aXZlSW5kZXggPT09IGluZGV4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9yZGVyID0gaW5kZXggPiBhY3RpdmVJbmRleCA/IE9SREVSX05FWFQgOiBPUkRFUl9QUkVWO1xuICAgIHRoaXMuX3NsaWRlKG9yZGVyLCBpdGVtc1tpbmRleF0pO1xuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgaWYgKHRoaXMuX3N3aXBlSGVscGVyKSB7XG4gICAgICB0aGlzLl9zd2lwZUhlbHBlci5kaXNwb3NlKCk7XG4gICAgfVxuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgY29uZmlnLmRlZmF1bHRJbnRlcnZhbCA9IGNvbmZpZy5pbnRlcnZhbDtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTiQxLCBldmVudCA9PiB0aGlzLl9rZXlkb3duKGV2ZW50KSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb25maWcucGF1c2UgPT09ICdob3ZlcicpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRUVOVEVSJDEsICgpID0+IHRoaXMucGF1c2UoKSk7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VMRUFWRSQxLCAoKSA9PiB0aGlzLl9tYXliZUVuYWJsZUN5Y2xlKCkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29uZmlnLnRvdWNoICYmIFN3aXBlLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgIHRoaXMuX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB9XG4gIH1cbiAgX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgZm9yIChjb25zdCBpbWcgb2YgU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9JVEVNX0lNRywgdGhpcy5fZWxlbWVudCkpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbihpbWcsIEVWRU5UX0RSQUdfU1RBUlQsIGV2ZW50ID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KCkpO1xuICAgIH1cbiAgICBjb25zdCBlbmRDYWxsQmFjayA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jb25maWcucGF1c2UgIT09ICdob3ZlcicpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBpdCdzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2UsIG1vdXNlZW50ZXIvbGVhdmUgYXJlIGZpcmVkIGFzXG4gICAgICAvLyBwYXJ0IG9mIHRoZSBtb3VzZSBjb21wYXRpYmlsaXR5IGV2ZW50cyBvbiBmaXJzdCB0YXAgLSB0aGUgY2Fyb3VzZWxcbiAgICAgIC8vIHdvdWxkIHN0b3AgY3ljbGluZyB1bnRpbCB1c2VyIHRhcHBlZCBvdXQgb2YgaXQ7XG4gICAgICAvLyBoZXJlLCB3ZSBsaXN0ZW4gZm9yIHRvdWNoZW5kLCBleHBsaWNpdGx5IHBhdXNlIHRoZSBjYXJvdXNlbFxuICAgICAgLy8gKGFzIGlmIGl0J3MgdGhlIHNlY29uZCB0aW1lIHdlIHRhcCBvbiBpdCwgbW91c2VlbnRlciBjb21wYXQgZXZlbnRcbiAgICAgIC8vIGlzIE5PVCBmaXJlZCkgYW5kIGFmdGVyIGEgdGltZW91dCAodG8gYWxsb3cgZm9yIG1vdXNlIGNvbXBhdGliaWxpdHlcbiAgICAgIC8vIGV2ZW50cyB0byBmaXJlKSB3ZSBleHBsaWNpdGx5IHJlc3RhcnQgY3ljbGluZ1xuXG4gICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICBpZiAodGhpcy50b3VjaFRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudG91Y2hUaW1lb3V0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG91Y2hUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLl9tYXliZUVuYWJsZUN5Y2xlKCksIFRPVUNIRVZFTlRfQ09NUEFUX1dBSVQgKyB0aGlzLl9jb25maWcuaW50ZXJ2YWwpO1xuICAgIH07XG4gICAgY29uc3Qgc3dpcGVDb25maWcgPSB7XG4gICAgICBsZWZ0Q2FsbGJhY2s6ICgpID0+IHRoaXMuX3NsaWRlKHRoaXMuX2RpcmVjdGlvblRvT3JkZXIoRElSRUNUSU9OX0xFRlQpKSxcbiAgICAgIHJpZ2h0Q2FsbGJhY2s6ICgpID0+IHRoaXMuX3NsaWRlKHRoaXMuX2RpcmVjdGlvblRvT3JkZXIoRElSRUNUSU9OX1JJR0hUKSksXG4gICAgICBlbmRDYWxsYmFjazogZW5kQ2FsbEJhY2tcbiAgICB9O1xuICAgIHRoaXMuX3N3aXBlSGVscGVyID0gbmV3IFN3aXBlKHRoaXMuX2VsZW1lbnQsIHN3aXBlQ29uZmlnKTtcbiAgfVxuICBfa2V5ZG93bihldmVudCkge1xuICAgIGlmICgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkaXJlY3Rpb24gPSBLRVlfVE9fRElSRUNUSU9OW2V2ZW50LmtleV07XG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuX3NsaWRlKHRoaXMuX2RpcmVjdGlvblRvT3JkZXIoZGlyZWN0aW9uKSk7XG4gICAgfVxuICB9XG4gIF9nZXRJdGVtSW5kZXgoZWxlbWVudCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRJdGVtcygpLmluZGV4T2YoZWxlbWVudCk7XG4gIH1cbiAgX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQoaW5kZXgpIHtcbiAgICBpZiAoIXRoaXMuX2luZGljYXRvcnNFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFjdGl2ZUluZGljYXRvciA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfQUNUSVZFLCB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCk7XG4gICAgYWN0aXZlSW5kaWNhdG9yLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUkMik7XG4gICAgYWN0aXZlSW5kaWNhdG9yLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50Jyk7XG4gICAgY29uc3QgbmV3QWN0aXZlSW5kaWNhdG9yID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShgW2RhdGEtYnMtc2xpZGUtdG89XCIke2luZGV4fVwiXWAsIHRoaXMuX2luZGljYXRvcnNFbGVtZW50KTtcbiAgICBpZiAobmV3QWN0aXZlSW5kaWNhdG9yKSB7XG4gICAgICBuZXdBY3RpdmVJbmRpY2F0b3IuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSQyKTtcbiAgICAgIG5ld0FjdGl2ZUluZGljYXRvci5zZXRBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcsICd0cnVlJyk7XG4gICAgfVxuICB9XG4gIF91cGRhdGVJbnRlcnZhbCgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fYWN0aXZlRWxlbWVudCB8fCB0aGlzLl9nZXRBY3RpdmUoKTtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudEludGVydmFsID0gTnVtYmVyLnBhcnNlSW50KGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLWludGVydmFsJyksIDEwKTtcbiAgICB0aGlzLl9jb25maWcuaW50ZXJ2YWwgPSBlbGVtZW50SW50ZXJ2YWwgfHwgdGhpcy5fY29uZmlnLmRlZmF1bHRJbnRlcnZhbDtcbiAgfVxuICBfc2xpZGUob3JkZXIsIGVsZW1lbnQgPSBudWxsKSB7XG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gdGhpcy5fZ2V0QWN0aXZlKCk7XG4gICAgY29uc3QgaXNOZXh0ID0gb3JkZXIgPT09IE9SREVSX05FWFQ7XG4gICAgY29uc3QgbmV4dEVsZW1lbnQgPSBlbGVtZW50IHx8IGdldE5leHRBY3RpdmVFbGVtZW50KHRoaXMuX2dldEl0ZW1zKCksIGFjdGl2ZUVsZW1lbnQsIGlzTmV4dCwgdGhpcy5fY29uZmlnLndyYXApO1xuICAgIGlmIChuZXh0RWxlbWVudCA9PT0gYWN0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXh0RWxlbWVudEluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KG5leHRFbGVtZW50KTtcbiAgICBjb25zdCB0cmlnZ2VyRXZlbnQgPSBldmVudE5hbWUgPT4ge1xuICAgICAgcmV0dXJuIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIGV2ZW50TmFtZSwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiBuZXh0RWxlbWVudCxcbiAgICAgICAgZGlyZWN0aW9uOiB0aGlzLl9vcmRlclRvRGlyZWN0aW9uKG9yZGVyKSxcbiAgICAgICAgZnJvbTogdGhpcy5fZ2V0SXRlbUluZGV4KGFjdGl2ZUVsZW1lbnQpLFxuICAgICAgICB0bzogbmV4dEVsZW1lbnRJbmRleFxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzbGlkZUV2ZW50ID0gdHJpZ2dlckV2ZW50KEVWRU5UX1NMSURFKTtcbiAgICBpZiAoc2xpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghYWN0aXZlRWxlbWVudCB8fCAhbmV4dEVsZW1lbnQpIHtcbiAgICAgIC8vIFNvbWUgd2VpcmRuZXNzIGlzIGhhcHBlbmluZywgc28gd2UgYmFpbFxuICAgICAgLy8gVE9ETzogY2hhbmdlIHRlc3RzIHRoYXQgdXNlIGVtcHR5IGRpdnMgdG8gYXZvaWQgdGhpcyBjaGVja1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpc0N5Y2xpbmcgPSBCb29sZWFuKHRoaXMuX2ludGVydmFsKTtcbiAgICB0aGlzLnBhdXNlKCk7XG4gICAgdGhpcy5faXNTbGlkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KG5leHRFbGVtZW50SW5kZXgpO1xuICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBuZXh0RWxlbWVudDtcbiAgICBjb25zdCBkaXJlY3Rpb25hbENsYXNzTmFtZSA9IGlzTmV4dCA/IENMQVNTX05BTUVfU1RBUlQgOiBDTEFTU19OQU1FX0VORDtcbiAgICBjb25zdCBvcmRlckNsYXNzTmFtZSA9IGlzTmV4dCA/IENMQVNTX05BTUVfTkVYVCA6IENMQVNTX05BTUVfUFJFVjtcbiAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QuYWRkKG9yZGVyQ2xhc3NOYW1lKTtcbiAgICByZWZsb3cobmV4dEVsZW1lbnQpO1xuICAgIGFjdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChkaXJlY3Rpb25hbENsYXNzTmFtZSk7XG4gICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChkaXJlY3Rpb25hbENsYXNzTmFtZSk7XG4gICAgY29uc3QgY29tcGxldGVDYWxsQmFjayA9ICgpID0+IHtcbiAgICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoZGlyZWN0aW9uYWxDbGFzc05hbWUsIG9yZGVyQ2xhc3NOYW1lKTtcbiAgICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUkMik7XG4gICAgICBhY3RpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUkMiwgb3JkZXJDbGFzc05hbWUsIGRpcmVjdGlvbmFsQ2xhc3NOYW1lKTtcbiAgICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlO1xuICAgICAgdHJpZ2dlckV2ZW50KEVWRU5UX1NMSUQpO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZUNhbGxCYWNrLCBhY3RpdmVFbGVtZW50LCB0aGlzLl9pc0FuaW1hdGVkKCkpO1xuICAgIGlmIChpc0N5Y2xpbmcpIHtcbiAgICAgIHRoaXMuY3ljbGUoKTtcbiAgICB9XG4gIH1cbiAgX2lzQW5pbWF0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0xJREUpO1xuICB9XG4gIF9nZXRBY3RpdmUoKSB7XG4gICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfQUNUSVZFX0lURU0sIHRoaXMuX2VsZW1lbnQpO1xuICB9XG4gIF9nZXRJdGVtcygpIHtcbiAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9JVEVNLCB0aGlzLl9lbGVtZW50KTtcbiAgfVxuICBfY2xlYXJJbnRlcnZhbCgpIHtcbiAgICBpZiAodGhpcy5faW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpO1xuICAgICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cbiAgfVxuICBfZGlyZWN0aW9uVG9PcmRlcihkaXJlY3Rpb24pIHtcbiAgICBpZiAoaXNSVEwoKSkge1xuICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX0xFRlQgPyBPUkRFUl9QUkVWIDogT1JERVJfTkVYVDtcbiAgICB9XG4gICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX0xFRlQgPyBPUkRFUl9ORVhUIDogT1JERVJfUFJFVjtcbiAgfVxuICBfb3JkZXJUb0RpcmVjdGlvbihvcmRlcikge1xuICAgIGlmIChpc1JUTCgpKSB7XG4gICAgICByZXR1cm4gb3JkZXIgPT09IE9SREVSX1BSRVYgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVDtcbiAgICB9XG4gICAgcmV0dXJuIG9yZGVyID09PSBPUkRFUl9QUkVWID8gRElSRUNUSU9OX1JJR0hUIDogRElSRUNUSU9OX0xFRlQ7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBDYXJvdXNlbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgZGF0YS50byhjb25maWcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSQ1LCBTRUxFQ1RPUl9EQVRBX1NMSURFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKTtcbiAgaWYgKCF0YXJnZXQgfHwgIXRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9DQVJPVVNFTCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgY29uc3QgY2Fyb3VzZWwgPSBDYXJvdXNlbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldCk7XG4gIGNvbnN0IHNsaWRlSW5kZXggPSB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS1icy1zbGlkZS10bycpO1xuICBpZiAoc2xpZGVJbmRleCkge1xuICAgIGNhcm91c2VsLnRvKHNsaWRlSW5kZXgpO1xuICAgIGNhcm91c2VsLl9tYXliZUVuYWJsZUN5Y2xlKCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlKHRoaXMsICdzbGlkZScpID09PSAnbmV4dCcpIHtcbiAgICBjYXJvdXNlbC5uZXh0KCk7XG4gICAgY2Fyb3VzZWwuX21heWJlRW5hYmxlQ3ljbGUoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY2Fyb3VzZWwucHJldigpO1xuICBjYXJvdXNlbC5fbWF5YmVFbmFibGVDeWNsZSgpO1xufSk7XG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9MT0FEX0RBVEFfQVBJJDMsICgpID0+IHtcbiAgY29uc3QgY2Fyb3VzZWxzID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1JJREUpO1xuICBmb3IgKGNvbnN0IGNhcm91c2VsIG9mIGNhcm91c2Vscykge1xuICAgIENhcm91c2VsLmdldE9yQ3JlYXRlSW5zdGFuY2UoY2Fyb3VzZWwpO1xuICB9XG59KTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQ2Fyb3VzZWwpO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgY29sbGFwc2UuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSRiID0gJ2NvbGxhcHNlJztcbmNvbnN0IERBVEFfS0VZJDcgPSAnYnMuY29sbGFwc2UnO1xuY29uc3QgRVZFTlRfS0VZJDcgPSBgLiR7REFUQV9LRVkkN31gO1xuY29uc3QgREFUQV9BUElfS0VZJDQgPSAnLmRhdGEtYXBpJztcbmNvbnN0IEVWRU5UX1NIT1ckNiA9IGBzaG93JHtFVkVOVF9LRVkkN31gO1xuY29uc3QgRVZFTlRfU0hPV04kNiA9IGBzaG93biR7RVZFTlRfS0VZJDd9YDtcbmNvbnN0IEVWRU5UX0hJREUkNiA9IGBoaWRlJHtFVkVOVF9LRVkkN31gO1xuY29uc3QgRVZFTlRfSElEREVOJDYgPSBgaGlkZGVuJHtFVkVOVF9LRVkkN31gO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkNCA9IGBjbGljayR7RVZFTlRfS0VZJDd9JHtEQVRBX0FQSV9LRVkkNH1gO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDcgPSAnc2hvdyc7XG5jb25zdCBDTEFTU19OQU1FX0NPTExBUFNFID0gJ2NvbGxhcHNlJztcbmNvbnN0IENMQVNTX05BTUVfQ09MTEFQU0lORyA9ICdjb2xsYXBzaW5nJztcbmNvbnN0IENMQVNTX05BTUVfQ09MTEFQU0VEID0gJ2NvbGxhcHNlZCc7XG5jb25zdCBDTEFTU19OQU1FX0RFRVBFUl9DSElMRFJFTiA9IGA6c2NvcGUgLiR7Q0xBU1NfTkFNRV9DT0xMQVBTRX0gLiR7Q0xBU1NfTkFNRV9DT0xMQVBTRX1gO1xuY29uc3QgQ0xBU1NfTkFNRV9IT1JJWk9OVEFMID0gJ2NvbGxhcHNlLWhvcml6b250YWwnO1xuY29uc3QgV0lEVEggPSAnd2lkdGgnO1xuY29uc3QgSEVJR0hUID0gJ2hlaWdodCc7XG5jb25zdCBTRUxFQ1RPUl9BQ1RJVkVTID0gJy5jb2xsYXBzZS5zaG93LCAuY29sbGFwc2UuY29sbGFwc2luZyc7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQ0ID0gJ1tkYXRhLWJzLXRvZ2dsZT1cImNvbGxhcHNlXCJdJztcbmNvbnN0IERlZmF1bHQkYSA9IHtcbiAgcGFyZW50OiBudWxsLFxuICB0b2dnbGU6IHRydWVcbn07XG5jb25zdCBEZWZhdWx0VHlwZSRhID0ge1xuICBwYXJlbnQ6ICcobnVsbHxlbGVtZW50KScsXG4gIHRvZ2dsZTogJ2Jvb2xlYW4nXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBDb2xsYXBzZSBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3RyaWdnZXJBcnJheSA9IFtdO1xuICAgIGNvbnN0IHRvZ2dsZUxpc3QgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfVE9HR0xFJDQpO1xuICAgIGZvciAoY29uc3QgZWxlbSBvZiB0b2dnbGVMaXN0KSB7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IFNlbGVjdG9yRW5naW5lLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQoZWxlbSk7XG4gICAgICBjb25zdCBmaWx0ZXJFbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvcikuZmlsdGVyKGZvdW5kRWxlbWVudCA9PiBmb3VuZEVsZW1lbnQgPT09IHRoaXMuX2VsZW1lbnQpO1xuICAgICAgaWYgKHNlbGVjdG9yICE9PSBudWxsICYmIGZpbHRlckVsZW1lbnQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJBcnJheS5wdXNoKGVsZW0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9pbml0aWFsaXplQ2hpbGRyZW4oKTtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5wYXJlbnQpIHtcbiAgICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0aGlzLl90cmlnZ2VyQXJyYXksIHRoaXMuX2lzU2hvd24oKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb25maWcudG9nZ2xlKSB7XG4gICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JGE7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkYTtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkYjtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvdygpO1xuICAgIH1cbiAgfVxuICBzaG93KCkge1xuICAgIGlmICh0aGlzLl9pc1RyYW5zaXRpb25pbmcgfHwgdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBhY3RpdmVDaGlsZHJlbiA9IFtdO1xuXG4gICAgLy8gZmluZCBhY3RpdmUgY2hpbGRyZW5cbiAgICBpZiAodGhpcy5fY29uZmlnLnBhcmVudCkge1xuICAgICAgYWN0aXZlQ2hpbGRyZW4gPSB0aGlzLl9nZXRGaXJzdExldmVsQ2hpbGRyZW4oU0VMRUNUT1JfQUNUSVZFUykuZmlsdGVyKGVsZW1lbnQgPT4gZWxlbWVudCAhPT0gdGhpcy5fZWxlbWVudCkubWFwKGVsZW1lbnQgPT4gQ29sbGFwc2UuZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtZW50LCB7XG4gICAgICAgIHRvZ2dsZTogZmFsc2VcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgaWYgKGFjdGl2ZUNoaWxkcmVuLmxlbmd0aCAmJiBhY3RpdmVDaGlsZHJlblswXS5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XJDYpO1xuICAgIGlmIChzdGFydEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBhY3RpdmVJbnN0YW5jZSBvZiBhY3RpdmVDaGlsZHJlbikge1xuICAgICAgYWN0aXZlSW5zdGFuY2UuaGlkZSgpO1xuICAgIH1cbiAgICBjb25zdCBkaW1lbnNpb24gPSB0aGlzLl9nZXREaW1lbnNpb24oKTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTRSk7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQ09MTEFQU0lORyk7XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gMDtcbiAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy5fdHJpZ2dlckFycmF5LCB0cnVlKTtcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNFLCBDTEFTU19OQU1FX1NIT1ckNyk7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAnJztcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOJDYpO1xuICAgIH07XG4gICAgY29uc3QgY2FwaXRhbGl6ZWREaW1lbnNpb24gPSBkaW1lbnNpb25bMF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSgxKTtcbiAgICBjb25zdCBzY3JvbGxTaXplID0gYHNjcm9sbCR7Y2FwaXRhbGl6ZWREaW1lbnNpb259YDtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLl9lbGVtZW50LCB0cnVlKTtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSBgJHt0aGlzLl9lbGVtZW50W3Njcm9sbFNpemVdfXB4YDtcbiAgfVxuICBoaWRlKCkge1xuICAgIGlmICh0aGlzLl9pc1RyYW5zaXRpb25pbmcgfHwgIXRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzdGFydEV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSQ2KTtcbiAgICBpZiAoc3RhcnRFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRpbWVuc2lvbiA9IHRoaXMuX2dldERpbWVuc2lvbigpO1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9IGAke3RoaXMuX2VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbZGltZW5zaW9uXX1weGA7XG4gICAgcmVmbG93KHRoaXMuX2VsZW1lbnQpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNJTkcpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNFLCBDTEFTU19OQU1FX1NIT1ckNyk7XG4gICAgZm9yIChjb25zdCB0cmlnZ2VyIG9mIHRoaXMuX3RyaWdnZXJBcnJheSkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IodHJpZ2dlcik7XG4gICAgICBpZiAoZWxlbWVudCAmJiAhdGhpcy5faXNTaG93bihlbGVtZW50KSkge1xuICAgICAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoW3RyaWdnZXJdLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNJTkcpO1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQ09MTEFQU0UpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOJDYpO1xuICAgIH07XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gJyc7XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdHJ1ZSk7XG4gIH1cbiAgX2lzU2hvd24oZWxlbWVudCA9IHRoaXMuX2VsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TSE9XJDcpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICBjb25maWcudG9nZ2xlID0gQm9vbGVhbihjb25maWcudG9nZ2xlKTsgLy8gQ29lcmNlIHN0cmluZyB2YWx1ZXNcbiAgICBjb25maWcucGFyZW50ID0gZ2V0RWxlbWVudChjb25maWcucGFyZW50KTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9nZXREaW1lbnNpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfSE9SSVpPTlRBTCkgPyBXSURUSCA6IEhFSUdIVDtcbiAgfVxuICBfaW5pdGlhbGl6ZUNoaWxkcmVuKCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnLnBhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuX2dldEZpcnN0TGV2ZWxDaGlsZHJlbihTRUxFQ1RPUl9EQVRBX1RPR0dMRSQ0KTtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3RvcihlbGVtZW50KTtcbiAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoW2VsZW1lbnRdLCB0aGlzLl9pc1Nob3duKHNlbGVjdGVkKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIF9nZXRGaXJzdExldmVsQ2hpbGRyZW4oc2VsZWN0b3IpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IFNlbGVjdG9yRW5naW5lLmZpbmQoQ0xBU1NfTkFNRV9ERUVQRVJfQ0hJTERSRU4sIHRoaXMuX2NvbmZpZy5wYXJlbnQpO1xuICAgIC8vIHJlbW92ZSBjaGlsZHJlbiBpZiBncmVhdGVyIGRlcHRoXG4gICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IsIHRoaXMuX2NvbmZpZy5wYXJlbnQpLmZpbHRlcihlbGVtZW50ID0+ICFjaGlsZHJlbi5pbmNsdWRlcyhlbGVtZW50KSk7XG4gIH1cbiAgX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0cmlnZ2VyQXJyYXksIGlzT3Blbikge1xuICAgIGlmICghdHJpZ2dlckFycmF5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdHJpZ2dlckFycmF5KSB7XG4gICAgICBlbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoQ0xBU1NfTkFNRV9DT0xMQVBTRUQsICFpc09wZW4pO1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCBpc09wZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIGNvbnN0IF9jb25maWcgPSB7fTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycgJiYgL3Nob3d8aGlkZS8udGVzdChjb25maWcpKSB7XG4gICAgICBfY29uZmlnLnRvZ2dsZSA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBDb2xsYXBzZS5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIF9jb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkNCwgU0VMRUNUT1JfREFUQV9UT0dHTEUkNCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIC8vIHByZXZlbnREZWZhdWx0IG9ubHkgZm9yIDxhPiBlbGVtZW50cyAod2hpY2ggY2hhbmdlIHRoZSBVUkwpIG5vdCBpbnNpZGUgdGhlIGNvbGxhcHNpYmxlIGVsZW1lbnRcbiAgaWYgKGV2ZW50LnRhcmdldC50YWdOYW1lID09PSAnQScgfHwgZXZlbnQuZGVsZWdhdGVUYXJnZXQgJiYgZXZlbnQuZGVsZWdhdGVUYXJnZXQudGFnTmFtZSA9PT0gJ0EnKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgU2VsZWN0b3JFbmdpbmUuZ2V0TXVsdGlwbGVFbGVtZW50c0Zyb21TZWxlY3Rvcih0aGlzKSkge1xuICAgIENvbGxhcHNlLmdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCwge1xuICAgICAgdG9nZ2xlOiBmYWxzZVxuICAgIH0pLnRvZ2dsZSgpO1xuICB9XG59KTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQ29sbGFwc2UpO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgZHJvcGRvd24uanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSRhID0gJ2Ryb3Bkb3duJztcbmNvbnN0IERBVEFfS0VZJDYgPSAnYnMuZHJvcGRvd24nO1xuY29uc3QgRVZFTlRfS0VZJDYgPSBgLiR7REFUQV9LRVkkNn1gO1xuY29uc3QgREFUQV9BUElfS0VZJDMgPSAnLmRhdGEtYXBpJztcbmNvbnN0IEVTQ0FQRV9LRVkkMiA9ICdFc2NhcGUnO1xuY29uc3QgVEFCX0tFWSQxID0gJ1RhYic7XG5jb25zdCBBUlJPV19VUF9LRVkkMSA9ICdBcnJvd1VwJztcbmNvbnN0IEFSUk9XX0RPV05fS0VZJDEgPSAnQXJyb3dEb3duJztcbmNvbnN0IFJJR0hUX01PVVNFX0JVVFRPTiA9IDI7IC8vIE1vdXNlRXZlbnQuYnV0dG9uIHZhbHVlIGZvciB0aGUgc2Vjb25kYXJ5IGJ1dHRvbiwgdXN1YWxseSB0aGUgcmlnaHQgYnV0dG9uXG5cbmNvbnN0IEVWRU5UX0hJREUkNSA9IGBoaWRlJHtFVkVOVF9LRVkkNn1gO1xuY29uc3QgRVZFTlRfSElEREVOJDUgPSBgaGlkZGVuJHtFVkVOVF9LRVkkNn1gO1xuY29uc3QgRVZFTlRfU0hPVyQ1ID0gYHNob3cke0VWRU5UX0tFWSQ2fWA7XG5jb25zdCBFVkVOVF9TSE9XTiQ1ID0gYHNob3duJHtFVkVOVF9LRVkkNn1gO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkMyA9IGBjbGljayR7RVZFTlRfS0VZJDZ9JHtEQVRBX0FQSV9LRVkkM31gO1xuY29uc3QgRVZFTlRfS0VZRE9XTl9EQVRBX0FQSSA9IGBrZXlkb3duJHtFVkVOVF9LRVkkNn0ke0RBVEFfQVBJX0tFWSQzfWA7XG5jb25zdCBFVkVOVF9LRVlVUF9EQVRBX0FQSSA9IGBrZXl1cCR7RVZFTlRfS0VZJDZ9JHtEQVRBX0FQSV9LRVkkM31gO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDYgPSAnc2hvdyc7XG5jb25zdCBDTEFTU19OQU1FX0RST1BVUCA9ICdkcm9wdXAnO1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QRU5EID0gJ2Ryb3BlbmQnO1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QU1RBUlQgPSAnZHJvcHN0YXJ0JztcbmNvbnN0IENMQVNTX05BTUVfRFJPUFVQX0NFTlRFUiA9ICdkcm9wdXAtY2VudGVyJztcbmNvbnN0IENMQVNTX05BTUVfRFJPUERPV05fQ0VOVEVSID0gJ2Ryb3Bkb3duLWNlbnRlcic7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzID0gJ1tkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCJdOm5vdCguZGlzYWJsZWQpOm5vdCg6ZGlzYWJsZWQpJztcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFX1NIT1dOID0gYCR7U0VMRUNUT1JfREFUQV9UT0dHTEUkM30uJHtDTEFTU19OQU1FX1NIT1ckNn1gO1xuY29uc3QgU0VMRUNUT1JfTUVOVSA9ICcuZHJvcGRvd24tbWVudSc7XG5jb25zdCBTRUxFQ1RPUl9OQVZCQVIgPSAnLm5hdmJhcic7XG5jb25zdCBTRUxFQ1RPUl9OQVZCQVJfTkFWID0gJy5uYXZiYXItbmF2JztcbmNvbnN0IFNFTEVDVE9SX1ZJU0lCTEVfSVRFTVMgPSAnLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06bm90KC5kaXNhYmxlZCk6bm90KDpkaXNhYmxlZCknO1xuY29uc3QgUExBQ0VNRU5UX1RPUCA9IGlzUlRMKCkgPyAndG9wLWVuZCcgOiAndG9wLXN0YXJ0JztcbmNvbnN0IFBMQUNFTUVOVF9UT1BFTkQgPSBpc1JUTCgpID8gJ3RvcC1zdGFydCcgOiAndG9wLWVuZCc7XG5jb25zdCBQTEFDRU1FTlRfQk9UVE9NID0gaXNSVEwoKSA/ICdib3R0b20tZW5kJyA6ICdib3R0b20tc3RhcnQnO1xuY29uc3QgUExBQ0VNRU5UX0JPVFRPTUVORCA9IGlzUlRMKCkgPyAnYm90dG9tLXN0YXJ0JyA6ICdib3R0b20tZW5kJztcbmNvbnN0IFBMQUNFTUVOVF9SSUdIVCA9IGlzUlRMKCkgPyAnbGVmdC1zdGFydCcgOiAncmlnaHQtc3RhcnQnO1xuY29uc3QgUExBQ0VNRU5UX0xFRlQgPSBpc1JUTCgpID8gJ3JpZ2h0LXN0YXJ0JyA6ICdsZWZ0LXN0YXJ0JztcbmNvbnN0IFBMQUNFTUVOVF9UT1BDRU5URVIgPSAndG9wJztcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT01DRU5URVIgPSAnYm90dG9tJztcbmNvbnN0IERlZmF1bHQkOSA9IHtcbiAgYXV0b0Nsb3NlOiB0cnVlLFxuICBib3VuZGFyeTogJ2NsaXBwaW5nUGFyZW50cycsXG4gIGRpc3BsYXk6ICdkeW5hbWljJyxcbiAgb2Zmc2V0OiBbMCwgMl0sXG4gIHBvcHBlckNvbmZpZzogbnVsbCxcbiAgcmVmZXJlbmNlOiAndG9nZ2xlJ1xufTtcbmNvbnN0IERlZmF1bHRUeXBlJDkgPSB7XG4gIGF1dG9DbG9zZTogJyhib29sZWFufHN0cmluZyknLFxuICBib3VuZGFyeTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICBkaXNwbGF5OiAnc3RyaW5nJyxcbiAgb2Zmc2V0OiAnKGFycmF5fHN0cmluZ3xmdW5jdGlvbiknLFxuICBwb3BwZXJDb25maWc6ICcobnVsbHxvYmplY3R8ZnVuY3Rpb24pJyxcbiAgcmVmZXJlbmNlOiAnKHN0cmluZ3xlbGVtZW50fG9iamVjdCknXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBEcm9wZG93biBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuICAgIHRoaXMuX3BvcHBlciA9IG51bGw7XG4gICAgdGhpcy5fcGFyZW50ID0gdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlOyAvLyBkcm9wZG93biB3cmFwcGVyXG4gICAgLy8gVE9ETzogdjYgcmV2ZXJ0ICMzNzAxMSAmIGNoYW5nZSBtYXJrdXAgaHR0cHM6Ly9nZXRib290c3RyYXAuY29tL2RvY3MvNS4zL2Zvcm1zL2lucHV0LWdyb3VwL1xuICAgIHRoaXMuX21lbnUgPSBTZWxlY3RvckVuZ2luZS5uZXh0KHRoaXMuX2VsZW1lbnQsIFNFTEVDVE9SX01FTlUpWzBdIHx8IFNlbGVjdG9yRW5naW5lLnByZXYodGhpcy5fZWxlbWVudCwgU0VMRUNUT1JfTUVOVSlbMF0gfHwgU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9NRU5VLCB0aGlzLl9wYXJlbnQpO1xuICAgIHRoaXMuX2luTmF2YmFyID0gdGhpcy5fZGV0ZWN0TmF2YmFyKCk7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQ5O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDk7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJGE7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duKCkgPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdygpO1xuICB9XG4gIHNob3coKSB7XG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcy5fZWxlbWVudCkgfHwgdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSB7XG4gICAgICByZWxhdGVkVGFyZ2V0OiB0aGlzLl9lbGVtZW50XG4gICAgfTtcbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XJDUsIHJlbGF0ZWRUYXJnZXQpO1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9jcmVhdGVQb3BwZXIoKTtcblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSBhZGQgZXh0cmFcbiAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHRvIHRoZSBib2R5J3MgaW1tZWRpYXRlIGNoaWxkcmVuO1xuICAgIC8vIG9ubHkgbmVlZGVkIGJlY2F1c2Ugb2YgYnJva2VuIGV2ZW50IGRlbGVnYXRpb24gb24gaU9TXG4gICAgLy8gaHR0cHM6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDE0LzAyL21vdXNlX2V2ZW50X2J1Yi5odG1sXG4gICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiAhdGhpcy5fcGFyZW50LmNsb3Nlc3QoU0VMRUNUT1JfTkFWQkFSX05BVikpIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbikpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9uKGVsZW1lbnQsICdtb3VzZW92ZXInLCBub29wKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudC5mb2N1cygpO1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSk7XG4gICAgdGhpcy5fbWVudS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVyQ2KTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XJDYpO1xuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOJDUsIHJlbGF0ZWRUYXJnZXQpO1xuICB9XG4gIGhpZGUoKSB7XG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcy5fZWxlbWVudCkgfHwgIXRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVudFxuICAgIH07XG4gICAgdGhpcy5fY29tcGxldGVIaWRlKHJlbGF0ZWRUYXJnZXQpO1xuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICB9XG4gIHVwZGF0ZSgpIHtcbiAgICB0aGlzLl9pbk5hdmJhciA9IHRoaXMuX2RldGVjdE5hdmJhcigpO1xuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci51cGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9jb21wbGV0ZUhpZGUocmVsYXRlZFRhcmdldCkge1xuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUkNSwgcmVsYXRlZFRhcmdldCk7XG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIHJlbW92ZSB0aGUgZXh0cmFcbiAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHdlIGFkZGVkIGZvciBpT1Mgc3VwcG9ydFxuICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbikpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCAnbW91c2VvdmVyJywgbm9vcCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci5kZXN0cm95KCk7XG4gICAgfVxuICAgIHRoaXMuX21lbnUuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckNik7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyQ2KTtcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuICAgIE1hbmlwdWxhdG9yLnJlbW92ZURhdGFBdHRyaWJ1dGUodGhpcy5fbWVudSwgJ3BvcHBlcicpO1xuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTiQ1LCByZWxhdGVkVGFyZ2V0KTtcbiAgfVxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHN1cGVyLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWZlcmVuY2UgPT09ICdvYmplY3QnICYmICFpc0VsZW1lbnQoY29uZmlnLnJlZmVyZW5jZSkgJiYgdHlwZW9mIGNvbmZpZy5yZWZlcmVuY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBQb3BwZXIgdmlydHVhbCBlbGVtZW50cyByZXF1aXJlIGEgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG1ldGhvZFxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtOQU1FJGEudG9VcHBlckNhc2UoKX06IE9wdGlvbiBcInJlZmVyZW5jZVwiIHByb3ZpZGVkIHR5cGUgXCJvYmplY3RcIiB3aXRob3V0IGEgcmVxdWlyZWQgXCJnZXRCb3VuZGluZ0NsaWVudFJlY3RcIiBtZXRob2QuYCk7XG4gICAgfVxuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX2NyZWF0ZVBvcHBlcigpIHtcbiAgICBpZiAodHlwZW9mIFBvcHBlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Jvb3RzdHJhcFxcJ3MgZHJvcGRvd25zIHJlcXVpcmUgUG9wcGVyIChodHRwczovL3BvcHBlci5qcy5vcmcpJyk7XG4gICAgfVxuICAgIGxldCByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fZWxlbWVudDtcbiAgICBpZiAodGhpcy5fY29uZmlnLnJlZmVyZW5jZSA9PT0gJ3BhcmVudCcpIHtcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLl9wYXJlbnQ7XG4gICAgfSBlbHNlIGlmIChpc0VsZW1lbnQodGhpcy5fY29uZmlnLnJlZmVyZW5jZSkpIHtcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSBnZXRFbGVtZW50KHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UgPT09ICdvYmplY3QnKSB7XG4gICAgICByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fY29uZmlnLnJlZmVyZW5jZTtcbiAgICB9XG4gICAgY29uc3QgcG9wcGVyQ29uZmlnID0gdGhpcy5fZ2V0UG9wcGVyQ29uZmlnKCk7XG4gICAgdGhpcy5fcG9wcGVyID0gUG9wcGVyLmNyZWF0ZVBvcHBlcihyZWZlcmVuY2VFbGVtZW50LCB0aGlzLl9tZW51LCBwb3BwZXJDb25maWcpO1xuICB9XG4gIF9pc1Nob3duKCkge1xuICAgIHJldHVybiB0aGlzLl9tZW51LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1ckNik7XG4gIH1cbiAgX2dldFBsYWNlbWVudCgpIHtcbiAgICBjb25zdCBwYXJlbnREcm9wZG93biA9IHRoaXMuX3BhcmVudDtcbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUEVORCkpIHtcbiAgICAgIHJldHVybiBQTEFDRU1FTlRfUklHSFQ7XG4gICAgfVxuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QU1RBUlQpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX0xFRlQ7XG4gICAgfVxuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QVVBfQ0VOVEVSKSkge1xuICAgICAgcmV0dXJuIFBMQUNFTUVOVF9UT1BDRU5URVI7XG4gICAgfVxuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QRE9XTl9DRU5URVIpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX0JPVFRPTUNFTlRFUjtcbiAgICB9XG5cbiAgICAvLyBXZSBuZWVkIHRvIHRyaW0gdGhlIHZhbHVlIGJlY2F1c2UgY3VzdG9tIHByb3BlcnRpZXMgY2FuIGFsc28gaW5jbHVkZSBzcGFjZXNcbiAgICBjb25zdCBpc0VuZCA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5fbWVudSkuZ2V0UHJvcGVydHlWYWx1ZSgnLS1icy1wb3NpdGlvbicpLnRyaW0oKSA9PT0gJ2VuZCc7XG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BVUCkpIHtcbiAgICAgIHJldHVybiBpc0VuZCA/IFBMQUNFTUVOVF9UT1BFTkQgOiBQTEFDRU1FTlRfVE9QO1xuICAgIH1cbiAgICByZXR1cm4gaXNFbmQgPyBQTEFDRU1FTlRfQk9UVE9NRU5EIDogUExBQ0VNRU5UX0JPVFRPTTtcbiAgfVxuICBfZGV0ZWN0TmF2YmFyKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfTkFWQkFSKSAhPT0gbnVsbDtcbiAgfVxuICBfZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG9mZnNldFxuICAgIH0gPSB0aGlzLl9jb25maWc7XG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gb2Zmc2V0LnNwbGl0KCcsJykubWFwKHZhbHVlID0+IE51bWJlci5wYXJzZUludCh2YWx1ZSwgMTApKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBwb3BwZXJEYXRhID0+IG9mZnNldChwb3BwZXJEYXRhLCB0aGlzLl9lbGVtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfVxuICBfZ2V0UG9wcGVyQ29uZmlnKCkge1xuICAgIGNvbnN0IGRlZmF1bHRCc1BvcHBlckNvbmZpZyA9IHtcbiAgICAgIHBsYWNlbWVudDogdGhpcy5fZ2V0UGxhY2VtZW50KCksXG4gICAgICBtb2RpZmllcnM6IFt7XG4gICAgICAgIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgYm91bmRhcnk6IHRoaXMuX2NvbmZpZy5ib3VuZGFyeVxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgb2Zmc2V0OiB0aGlzLl9nZXRPZmZzZXQoKVxuICAgICAgICB9XG4gICAgICB9XVxuICAgIH07XG5cbiAgICAvLyBEaXNhYmxlIFBvcHBlciBpZiB3ZSBoYXZlIGEgc3RhdGljIGRpc3BsYXkgb3IgRHJvcGRvd24gaXMgaW4gTmF2YmFyXG4gICAgaWYgKHRoaXMuX2luTmF2YmFyIHx8IHRoaXMuX2NvbmZpZy5kaXNwbGF5ID09PSAnc3RhdGljJykge1xuICAgICAgTWFuaXB1bGF0b3Iuc2V0RGF0YUF0dHJpYnV0ZSh0aGlzLl9tZW51LCAncG9wcGVyJywgJ3N0YXRpYycpOyAvLyBUT0RPOiB2NiByZW1vdmVcbiAgICAgIGRlZmF1bHRCc1BvcHBlckNvbmZpZy5tb2RpZmllcnMgPSBbe1xuICAgICAgICBuYW1lOiAnYXBwbHlTdHlsZXMnLFxuICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgfV07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWZhdWx0QnNQb3BwZXJDb25maWcsXG4gICAgICAuLi5leGVjdXRlKHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcsIFtkZWZhdWx0QnNQb3BwZXJDb25maWddKVxuICAgIH07XG4gIH1cbiAgX3NlbGVjdE1lbnVJdGVtKHtcbiAgICBrZXksXG4gICAgdGFyZ2V0XG4gIH0pIHtcbiAgICBjb25zdCBpdGVtcyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfVklTSUJMRV9JVEVNUywgdGhpcy5fbWVudSkuZmlsdGVyKGVsZW1lbnQgPT4gaXNWaXNpYmxlKGVsZW1lbnQpKTtcbiAgICBpZiAoIWl0ZW1zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRhcmdldCBpc24ndCBpbmNsdWRlZCBpbiBpdGVtcyAoZS5nLiB3aGVuIGV4cGFuZGluZyB0aGUgZHJvcGRvd24pXG4gICAgLy8gYWxsb3cgY3ljbGluZyB0byBnZXQgdGhlIGxhc3QgaXRlbSBpbiBjYXNlIGtleSBlcXVhbHMgQVJST1dfVVBfS0VZXG4gICAgZ2V0TmV4dEFjdGl2ZUVsZW1lbnQoaXRlbXMsIHRhcmdldCwga2V5ID09PSBBUlJPV19ET1dOX0tFWSQxLCAhaXRlbXMuaW5jbHVkZXModGFyZ2V0KSkuZm9jdXMoKTtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IERyb3Bkb3duLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgIH0pO1xuICB9XG4gIHN0YXRpYyBjbGVhck1lbnVzKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmJ1dHRvbiA9PT0gUklHSFRfTU9VU0VfQlVUVE9OIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgZXZlbnQua2V5ICE9PSBUQUJfS0VZJDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3BlblRvZ2dsZXMgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfVE9HR0xFX1NIT1dOKTtcbiAgICBmb3IgKGNvbnN0IHRvZ2dsZSBvZiBvcGVuVG9nZ2xlcykge1xuICAgICAgY29uc3QgY29udGV4dCA9IERyb3Bkb3duLmdldEluc3RhbmNlKHRvZ2dsZSk7XG4gICAgICBpZiAoIWNvbnRleHQgfHwgY29udGV4dC5fY29uZmlnLmF1dG9DbG9zZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBjb21wb3NlZFBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcbiAgICAgIGNvbnN0IGlzTWVudVRhcmdldCA9IGNvbXBvc2VkUGF0aC5pbmNsdWRlcyhjb250ZXh0Ll9tZW51KTtcbiAgICAgIGlmIChjb21wb3NlZFBhdGguaW5jbHVkZXMoY29udGV4dC5fZWxlbWVudCkgfHwgY29udGV4dC5fY29uZmlnLmF1dG9DbG9zZSA9PT0gJ2luc2lkZScgJiYgIWlzTWVudVRhcmdldCB8fCBjb250ZXh0Ll9jb25maWcuYXV0b0Nsb3NlID09PSAnb3V0c2lkZScgJiYgaXNNZW51VGFyZ2V0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBUYWIgbmF2aWdhdGlvbiB0aHJvdWdoIHRoZSBkcm9wZG93biBtZW51IG9yIGV2ZW50cyBmcm9tIGNvbnRhaW5lZCBpbnB1dHMgc2hvdWxkbid0IGNsb3NlIHRoZSBtZW51XG4gICAgICBpZiAoY29udGV4dC5fbWVudS5jb250YWlucyhldmVudC50YXJnZXQpICYmIChldmVudC50eXBlID09PSAna2V5dXAnICYmIGV2ZW50LmtleSA9PT0gVEFCX0tFWSQxIHx8IC9pbnB1dHxzZWxlY3R8b3B0aW9ufHRleHRhcmVhfGZvcm0vaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiBjb250ZXh0Ll9lbGVtZW50XG4gICAgICB9O1xuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdjbGljaycpIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldC5jbGlja0V2ZW50ID0gZXZlbnQ7XG4gICAgICB9XG4gICAgICBjb250ZXh0Ll9jb21wbGV0ZUhpZGUocmVsYXRlZFRhcmdldCk7XG4gICAgfVxuICB9XG4gIHN0YXRpYyBkYXRhQXBpS2V5ZG93bkhhbmRsZXIoZXZlbnQpIHtcbiAgICAvLyBJZiBub3QgYW4gVVAgfCBET1dOIHwgRVNDQVBFIGtleSA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG4gICAgLy8gSWYgaW5wdXQvdGV4dGFyZWEgJiYgaWYga2V5IGlzIG90aGVyIHRoYW4gRVNDQVBFID0+IG5vdCBhIGRyb3Bkb3duIGNvbW1hbmRcblxuICAgIGNvbnN0IGlzSW5wdXQgPSAvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKTtcbiAgICBjb25zdCBpc0VzY2FwZUV2ZW50ID0gZXZlbnQua2V5ID09PSBFU0NBUEVfS0VZJDI7XG4gICAgY29uc3QgaXNVcE9yRG93bkV2ZW50ID0gW0FSUk9XX1VQX0tFWSQxLCBBUlJPV19ET1dOX0tFWSQxXS5pbmNsdWRlcyhldmVudC5rZXkpO1xuICAgIGlmICghaXNVcE9yRG93bkV2ZW50ICYmICFpc0VzY2FwZUV2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc0lucHV0ICYmICFpc0VzY2FwZUV2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAvLyBUT0RPOiB2NiByZXZlcnQgIzM3MDExICYgY2hhbmdlIG1hcmt1cCBodHRwczovL2dldGJvb3RzdHJhcC5jb20vZG9jcy81LjMvZm9ybXMvaW5wdXQtZ3JvdXAvXG4gICAgY29uc3QgZ2V0VG9nZ2xlQnV0dG9uID0gdGhpcy5tYXRjaGVzKFNFTEVDVE9SX0RBVEFfVE9HR0xFJDMpID8gdGhpcyA6IFNlbGVjdG9yRW5naW5lLnByZXYodGhpcywgU0VMRUNUT1JfREFUQV9UT0dHTEUkMylbMF0gfHwgU2VsZWN0b3JFbmdpbmUubmV4dCh0aGlzLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzKVswXSB8fCBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0RBVEFfVE9HR0xFJDMsIGV2ZW50LmRlbGVnYXRlVGFyZ2V0LnBhcmVudE5vZGUpO1xuICAgIGNvbnN0IGluc3RhbmNlID0gRHJvcGRvd24uZ2V0T3JDcmVhdGVJbnN0YW5jZShnZXRUb2dnbGVCdXR0b24pO1xuICAgIGlmIChpc1VwT3JEb3duRXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaW5zdGFuY2Uuc2hvdygpO1xuICAgICAgaW5zdGFuY2UuX3NlbGVjdE1lbnVJdGVtKGV2ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGluc3RhbmNlLl9pc1Nob3duKCkpIHtcbiAgICAgIC8vIGVsc2UgaXMgZXNjYXBlIGFuZCB3ZSBjaGVjayBpZiBpdCBpcyBzaG93blxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBpbnN0YW5jZS5oaWRlKCk7XG4gICAgICBnZXRUb2dnbGVCdXR0b24uZm9jdXMoKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfS0VZRE9XTl9EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUkMywgRHJvcGRvd24uZGF0YUFwaUtleWRvd25IYW5kbGVyKTtcbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfS0VZRE9XTl9EQVRBX0FQSSwgU0VMRUNUT1JfTUVOVSwgRHJvcGRvd24uZGF0YUFwaUtleWRvd25IYW5kbGVyKTtcbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkMywgRHJvcGRvd24uY2xlYXJNZW51cyk7XG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWVVQX0RBVEFfQVBJLCBEcm9wZG93bi5jbGVhck1lbnVzKTtcbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkMywgU0VMRUNUT1JfREFUQV9UT0dHTEUkMywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIERyb3Bkb3duLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcykudG9nZ2xlKCk7XG59KTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oRHJvcGRvd24pO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9iYWNrZHJvcC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDkgPSAnYmFja2Ryb3AnO1xuY29uc3QgQ0xBU1NfTkFNRV9GQURFJDQgPSAnZmFkZSc7XG5jb25zdCBDTEFTU19OQU1FX1NIT1ckNSA9ICdzaG93JztcbmNvbnN0IEVWRU5UX01PVVNFRE9XTiA9IGBtb3VzZWRvd24uYnMuJHtOQU1FJDl9YDtcbmNvbnN0IERlZmF1bHQkOCA9IHtcbiAgY2xhc3NOYW1lOiAnbW9kYWwtYmFja2Ryb3AnLFxuICBjbGlja0NhbGxiYWNrOiBudWxsLFxuICBpc0FuaW1hdGVkOiBmYWxzZSxcbiAgaXNWaXNpYmxlOiB0cnVlLFxuICAvLyBpZiBmYWxzZSwgd2UgdXNlIHRoZSBiYWNrZHJvcCBoZWxwZXIgd2l0aG91dCBhZGRpbmcgYW55IGVsZW1lbnQgdG8gdGhlIGRvbVxuICByb290RWxlbWVudDogJ2JvZHknIC8vIGdpdmUgdGhlIGNob2ljZSB0byBwbGFjZSBiYWNrZHJvcCB1bmRlciBkaWZmZXJlbnQgZWxlbWVudHNcbn07XG5jb25zdCBEZWZhdWx0VHlwZSQ4ID0ge1xuICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICBjbGlja0NhbGxiYWNrOiAnKGZ1bmN0aW9ufG51bGwpJyxcbiAgaXNBbmltYXRlZDogJ2Jvb2xlYW4nLFxuICBpc1Zpc2libGU6ICdib29sZWFuJyxcbiAgcm9vdEVsZW1lbnQ6ICcoZWxlbWVudHxzdHJpbmcpJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQmFja2Ryb3AgZXh0ZW5kcyBDb25maWcge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgIHRoaXMuX2lzQXBwZW5kZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDg7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkODtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkOTtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBzaG93KGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuaXNWaXNpYmxlKSB7XG4gICAgICBleGVjdXRlKGNhbGxiYWNrKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fYXBwZW5kKCk7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2dldEVsZW1lbnQoKTtcbiAgICBpZiAodGhpcy5fY29uZmlnLmlzQW5pbWF0ZWQpIHtcbiAgICAgIHJlZmxvdyhlbGVtZW50KTtcbiAgICB9XG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVyQ1KTtcbiAgICB0aGlzLl9lbXVsYXRlQW5pbWF0aW9uKCgpID0+IHtcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spO1xuICAgIH0pO1xuICB9XG4gIGhpZGUoY2FsbGJhY2spIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5pc1Zpc2libGUpIHtcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9nZXRFbGVtZW50KCkuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckNSk7XG4gICAgdGhpcy5fZW11bGF0ZUFuaW1hdGlvbigoKSA9PiB7XG4gICAgICB0aGlzLmRpc3Bvc2UoKTtcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spO1xuICAgIH0pO1xuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0FwcGVuZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VET1dOKTtcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZSgpO1xuICAgIHRoaXMuX2lzQXBwZW5kZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2dldEVsZW1lbnQoKSB7XG4gICAgaWYgKCF0aGlzLl9lbGVtZW50KSB7XG4gICAgICBjb25zdCBiYWNrZHJvcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgYmFja2Ryb3AuY2xhc3NOYW1lID0gdGhpcy5fY29uZmlnLmNsYXNzTmFtZTtcbiAgICAgIGlmICh0aGlzLl9jb25maWcuaXNBbmltYXRlZCkge1xuICAgICAgICBiYWNrZHJvcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSQ0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBiYWNrZHJvcDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQ7XG4gIH1cbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgLy8gdXNlIGdldEVsZW1lbnQoKSB3aXRoIHRoZSBkZWZhdWx0IFwiYm9keVwiIHRvIGdldCBhIGZyZXNoIEVsZW1lbnQgb24gZWFjaCBpbnN0YW50aWF0aW9uXG4gICAgY29uZmlnLnJvb3RFbGVtZW50ID0gZ2V0RWxlbWVudChjb25maWcucm9vdEVsZW1lbnQpO1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX2FwcGVuZCgpIHtcbiAgICBpZiAodGhpcy5faXNBcHBlbmRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZ2V0RWxlbWVudCgpO1xuICAgIHRoaXMuX2NvbmZpZy5yb290RWxlbWVudC5hcHBlbmQoZWxlbWVudCk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKGVsZW1lbnQsIEVWRU5UX01PVVNFRE9XTiwgKCkgPT4ge1xuICAgICAgZXhlY3V0ZSh0aGlzLl9jb25maWcuY2xpY2tDYWxsYmFjayk7XG4gICAgfSk7XG4gICAgdGhpcy5faXNBcHBlbmRlZCA9IHRydWU7XG4gIH1cbiAgX2VtdWxhdGVBbmltYXRpb24oY2FsbGJhY2spIHtcbiAgICBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uKGNhbGxiYWNrLCB0aGlzLl9nZXRFbGVtZW50KCksIHRoaXMuX2NvbmZpZy5pc0FuaW1hdGVkKTtcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9mb2N1c3RyYXAuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQ4ID0gJ2ZvY3VzdHJhcCc7XG5jb25zdCBEQVRBX0tFWSQ1ID0gJ2JzLmZvY3VzdHJhcCc7XG5jb25zdCBFVkVOVF9LRVkkNSA9IGAuJHtEQVRBX0tFWSQ1fWA7XG5jb25zdCBFVkVOVF9GT0NVU0lOJDIgPSBgZm9jdXNpbiR7RVZFTlRfS0VZJDV9YDtcbmNvbnN0IEVWRU5UX0tFWURPV05fVEFCID0gYGtleWRvd24udGFiJHtFVkVOVF9LRVkkNX1gO1xuY29uc3QgVEFCX0tFWSA9ICdUYWInO1xuY29uc3QgVEFCX05BVl9GT1JXQVJEID0gJ2ZvcndhcmQnO1xuY29uc3QgVEFCX05BVl9CQUNLV0FSRCA9ICdiYWNrd2FyZCc7XG5jb25zdCBEZWZhdWx0JDcgPSB7XG4gIGF1dG9mb2N1czogdHJ1ZSxcbiAgdHJhcEVsZW1lbnQ6IG51bGwgLy8gVGhlIGVsZW1lbnQgdG8gdHJhcCBmb2N1cyBpbnNpZGUgb2Zcbn07XG5jb25zdCBEZWZhdWx0VHlwZSQ3ID0ge1xuICBhdXRvZm9jdXM6ICdib29sZWFuJyxcbiAgdHJhcEVsZW1lbnQ6ICdlbGVtZW50J1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgRm9jdXNUcmFwIGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24gPSBudWxsO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkNztcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQ3O1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQ4O1xuICB9XG5cbiAgLy8gUHVibGljXG4gIGFjdGl2YXRlKCkge1xuICAgIGlmICh0aGlzLl9pc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29uZmlnLmF1dG9mb2N1cykge1xuICAgICAgdGhpcy5fY29uZmlnLnRyYXBFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIEV2ZW50SGFuZGxlci5vZmYoZG9jdW1lbnQsIEVWRU5UX0tFWSQ1KTsgLy8gZ3VhcmQgYWdhaW5zdCBpbmZpbml0ZSBmb2N1cyBsb29wXG4gICAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9GT0NVU0lOJDIsIGV2ZW50ID0+IHRoaXMuX2hhbmRsZUZvY3VzaW4oZXZlbnQpKTtcbiAgICBFdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWURPV05fVEFCLCBldmVudCA9PiB0aGlzLl9oYW5kbGVLZXlkb3duKGV2ZW50KSk7XG4gICAgdGhpcy5faXNBY3RpdmUgPSB0cnVlO1xuICB9XG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlO1xuICAgIEV2ZW50SGFuZGxlci5vZmYoZG9jdW1lbnQsIEVWRU5UX0tFWSQ1KTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2hhbmRsZUZvY3VzaW4oZXZlbnQpIHtcbiAgICBjb25zdCB7XG4gICAgICB0cmFwRWxlbWVudFxuICAgIH0gPSB0aGlzLl9jb25maWc7XG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZG9jdW1lbnQgfHwgZXZlbnQudGFyZ2V0ID09PSB0cmFwRWxlbWVudCB8fCB0cmFwRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnRzID0gU2VsZWN0b3JFbmdpbmUuZm9jdXNhYmxlQ2hpbGRyZW4odHJhcEVsZW1lbnQpO1xuICAgIGlmIChlbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRyYXBFbGVtZW50LmZvY3VzKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9sYXN0VGFiTmF2RGlyZWN0aW9uID09PSBUQUJfTkFWX0JBQ0tXQVJEKSB7XG4gICAgICBlbGVtZW50c1tlbGVtZW50cy5sZW5ndGggLSAxXS5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50c1swXS5mb2N1cygpO1xuICAgIH1cbiAgfVxuICBfaGFuZGxlS2V5ZG93bihldmVudCkge1xuICAgIGlmIChldmVudC5rZXkgIT09IFRBQl9LRVkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbiA9IGV2ZW50LnNoaWZ0S2V5ID8gVEFCX05BVl9CQUNLV0FSRCA6IFRBQl9OQVZfRk9SV0FSRDtcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9zY3JvbGxCYXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgU0VMRUNUT1JfRklYRURfQ09OVEVOVCA9ICcuZml4ZWQtdG9wLCAuZml4ZWQtYm90dG9tLCAuaXMtZml4ZWQsIC5zdGlja3ktdG9wJztcbmNvbnN0IFNFTEVDVE9SX1NUSUNLWV9DT05URU5UID0gJy5zdGlja3ktdG9wJztcbmNvbnN0IFBST1BFUlRZX1BBRERJTkcgPSAncGFkZGluZy1yaWdodCc7XG5jb25zdCBQUk9QRVJUWV9NQVJHSU4gPSAnbWFyZ2luLXJpZ2h0JztcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgU2Nyb2xsQmFySGVscGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fZWxlbWVudCA9IGRvY3VtZW50LmJvZHk7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgZ2V0V2lkdGgoKSB7XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dpbmRvdy9pbm5lcldpZHRoI3VzYWdlX25vdGVzXG4gICAgY29uc3QgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICByZXR1cm4gTWF0aC5hYnMod2luZG93LmlubmVyV2lkdGggLSBkb2N1bWVudFdpZHRoKTtcbiAgfVxuICBoaWRlKCkge1xuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRXaWR0aCgpO1xuICAgIHRoaXMuX2Rpc2FibGVPdmVyRmxvdygpO1xuICAgIC8vIGdpdmUgcGFkZGluZyB0byBlbGVtZW50IHRvIGJhbGFuY2UgdGhlIGhpZGRlbiBzY3JvbGxiYXIgd2lkdGhcbiAgICB0aGlzLl9zZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LCBQUk9QRVJUWV9QQURESU5HLCBjYWxjdWxhdGVkVmFsdWUgPT4gY2FsY3VsYXRlZFZhbHVlICsgd2lkdGgpO1xuICAgIC8vIHRyaWNrOiBXZSBhZGp1c3QgcG9zaXRpdmUgcGFkZGluZ1JpZ2h0IGFuZCBuZWdhdGl2ZSBtYXJnaW5SaWdodCB0byBzdGlja3ktdG9wIGVsZW1lbnRzIHRvIGtlZXAgc2hvd2luZyBmdWxsd2lkdGhcbiAgICB0aGlzLl9zZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9GSVhFRF9DT05URU5ULCBQUk9QRVJUWV9QQURESU5HLCBjYWxjdWxhdGVkVmFsdWUgPT4gY2FsY3VsYXRlZFZhbHVlICsgd2lkdGgpO1xuICAgIHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX1NUSUNLWV9DT05URU5ULCBQUk9QRVJUWV9NQVJHSU4sIGNhbGN1bGF0ZWRWYWx1ZSA9PiBjYWxjdWxhdGVkVmFsdWUgLSB3aWR0aCk7XG4gIH1cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LCAnb3ZlcmZsb3cnKTtcbiAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQsIFBST1BFUlRZX1BBRERJTkcpO1xuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfRklYRURfQ09OVEVOVCwgUFJPUEVSVFlfUEFERElORyk7XG4gICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCwgUFJPUEVSVFlfTUFSR0lOKTtcbiAgfVxuICBpc092ZXJmbG93aW5nKCkge1xuICAgIHJldHVybiB0aGlzLmdldFdpZHRoKCkgPiAwO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZGlzYWJsZU92ZXJGbG93KCkge1xuICAgIHRoaXMuX3NhdmVJbml0aWFsQXR0cmlidXRlKHRoaXMuX2VsZW1lbnQsICdvdmVyZmxvdycpO1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgfVxuICBfc2V0RWxlbWVudEF0dHJpYnV0ZXMoc2VsZWN0b3IsIHN0eWxlUHJvcGVydHksIGNhbGxiYWNrKSB7XG4gICAgY29uc3Qgc2Nyb2xsYmFyV2lkdGggPSB0aGlzLmdldFdpZHRoKCk7XG4gICAgY29uc3QgbWFuaXB1bGF0aW9uQ2FsbEJhY2sgPSBlbGVtZW50ID0+IHtcbiAgICAgIGlmIChlbGVtZW50ICE9PSB0aGlzLl9lbGVtZW50ICYmIHdpbmRvdy5pbm5lcldpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aCArIHNjcm9sbGJhcldpZHRoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3NhdmVJbml0aWFsQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHkpO1xuICAgICAgY29uc3QgY2FsY3VsYXRlZFZhbHVlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3BlcnR5KTtcbiAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoc3R5bGVQcm9wZXJ0eSwgYCR7Y2FsbGJhY2soTnVtYmVyLnBhcnNlRmxvYXQoY2FsY3VsYXRlZFZhbHVlKSl9cHhgKTtcbiAgICB9O1xuICAgIHRoaXMuX2FwcGx5TWFuaXB1bGF0aW9uQ2FsbGJhY2soc2VsZWN0b3IsIG1hbmlwdWxhdGlvbkNhbGxCYWNrKTtcbiAgfVxuICBfc2F2ZUluaXRpYWxBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSkge1xuICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gZWxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHN0eWxlUHJvcGVydHkpO1xuICAgIGlmIChhY3R1YWxWYWx1ZSkge1xuICAgICAgTWFuaXB1bGF0b3Iuc2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5LCBhY3R1YWxWYWx1ZSk7XG4gICAgfVxuICB9XG4gIF9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKHNlbGVjdG9yLCBzdHlsZVByb3BlcnR5KSB7XG4gICAgY29uc3QgbWFuaXB1bGF0aW9uQ2FsbEJhY2sgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KTtcbiAgICAgIC8vIFdlIG9ubHkgd2FudCB0byByZW1vdmUgdGhlIHByb3BlcnR5IGlmIHRoZSB2YWx1ZSBpcyBgbnVsbGA7IHRoZSB2YWx1ZSBjYW4gYWxzbyBiZSB6ZXJvXG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShzdHlsZVByb3BlcnR5KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgTWFuaXB1bGF0b3IucmVtb3ZlRGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KTtcbiAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoc3R5bGVQcm9wZXJ0eSwgdmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5fYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayhzZWxlY3RvciwgbWFuaXB1bGF0aW9uQ2FsbEJhY2spO1xuICB9XG4gIF9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHNlbGVjdG9yLCBjYWxsQmFjaykge1xuICAgIGlmIChpc0VsZW1lbnQoc2VsZWN0b3IpKSB7XG4gICAgICBjYWxsQmFjayhzZWxlY3Rvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc2VsIG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IsIHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICBjYWxsQmFjayhzZWwpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgbW9kYWwuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQ3ID0gJ21vZGFsJztcbmNvbnN0IERBVEFfS0VZJDQgPSAnYnMubW9kYWwnO1xuY29uc3QgRVZFTlRfS0VZJDQgPSBgLiR7REFUQV9LRVkkNH1gO1xuY29uc3QgREFUQV9BUElfS0VZJDIgPSAnLmRhdGEtYXBpJztcbmNvbnN0IEVTQ0FQRV9LRVkkMSA9ICdFc2NhcGUnO1xuY29uc3QgRVZFTlRfSElERSQ0ID0gYGhpZGUke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9ISURFX1BSRVZFTlRFRCQxID0gYGhpZGVQcmV2ZW50ZWQke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9ISURERU4kNCA9IGBoaWRkZW4ke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9TSE9XJDQgPSBgc2hvdyR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX1NIT1dOJDQgPSBgc2hvd24ke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9SRVNJWkUkMSA9IGByZXNpemUke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9DTElDS19ESVNNSVNTID0gYGNsaWNrLmRpc21pc3Mke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9NT1VTRURPV05fRElTTUlTUyA9IGBtb3VzZWRvd24uZGlzbWlzcyR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX0tFWURPV05fRElTTUlTUyQxID0gYGtleWRvd24uZGlzbWlzcyR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJJDIgPSBgY2xpY2ske0VWRU5UX0tFWSQ0fSR7REFUQV9BUElfS0VZJDJ9YDtcbmNvbnN0IENMQVNTX05BTUVfT1BFTiA9ICdtb2RhbC1vcGVuJztcbmNvbnN0IENMQVNTX05BTUVfRkFERSQzID0gJ2ZhZGUnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDQgPSAnc2hvdyc7XG5jb25zdCBDTEFTU19OQU1FX1NUQVRJQyA9ICdtb2RhbC1zdGF0aWMnO1xuY29uc3QgT1BFTl9TRUxFQ1RPUiQxID0gJy5tb2RhbC5zaG93JztcbmNvbnN0IFNFTEVDVE9SX0RJQUxPRyA9ICcubW9kYWwtZGlhbG9nJztcbmNvbnN0IFNFTEVDVE9SX01PREFMX0JPRFkgPSAnLm1vZGFsLWJvZHknO1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUkMiA9ICdbZGF0YS1icy10b2dnbGU9XCJtb2RhbFwiXSc7XG5jb25zdCBEZWZhdWx0JDYgPSB7XG4gIGJhY2tkcm9wOiB0cnVlLFxuICBmb2N1czogdHJ1ZSxcbiAga2V5Ym9hcmQ6IHRydWVcbn07XG5jb25zdCBEZWZhdWx0VHlwZSQ2ID0ge1xuICBiYWNrZHJvcDogJyhib29sZWFufHN0cmluZyknLFxuICBmb2N1czogJ2Jvb2xlYW4nLFxuICBrZXlib2FyZDogJ2Jvb2xlYW4nXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBNb2RhbCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuICAgIHRoaXMuX2RpYWxvZyA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfRElBTE9HLCB0aGlzLl9lbGVtZW50KTtcbiAgICB0aGlzLl9iYWNrZHJvcCA9IHRoaXMuX2luaXRpYWxpemVCYWNrRHJvcCgpO1xuICAgIHRoaXMuX2ZvY3VzdHJhcCA9IHRoaXMuX2luaXRpYWxpemVGb2N1c1RyYXAoKTtcbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2U7XG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fc2Nyb2xsQmFyID0gbmV3IFNjcm9sbEJhckhlbHBlcigpO1xuICAgIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQ2O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDY7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDc7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKHJlbGF0ZWRUYXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTaG93biA/IHRoaXMuaGlkZSgpIDogdGhpcy5zaG93KHJlbGF0ZWRUYXJnZXQpO1xuICB9XG4gIHNob3cocmVsYXRlZFRhcmdldCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duIHx8IHRoaXMuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XJDQsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXRcbiAgICB9KTtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faXNTaG93biA9IHRydWU7XG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9zY3JvbGxCYXIuaGlkZSgpO1xuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX09QRU4pO1xuICAgIHRoaXMuX2FkanVzdERpYWxvZygpO1xuICAgIHRoaXMuX2JhY2tkcm9wLnNob3coKCkgPT4gdGhpcy5fc2hvd0VsZW1lbnQocmVsYXRlZFRhcmdldCkpO1xuICB9XG4gIGhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc1Nob3duIHx8IHRoaXMuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFJDQpO1xuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2U7XG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9mb2N1c3RyYXAuZGVhY3RpdmF0ZSgpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckNCk7XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB0aGlzLl9oaWRlTW9kYWwoKSwgdGhpcy5fZWxlbWVudCwgdGhpcy5faXNBbmltYXRlZCgpKTtcbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIEV2ZW50SGFuZGxlci5vZmYod2luZG93LCBFVkVOVF9LRVkkNCk7XG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9kaWFsb2csIEVWRU5UX0tFWSQ0KTtcbiAgICB0aGlzLl9iYWNrZHJvcC5kaXNwb3NlKCk7XG4gICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKTtcbiAgICBzdXBlci5kaXNwb3NlKCk7XG4gIH1cbiAgaGFuZGxlVXBkYXRlKCkge1xuICAgIHRoaXMuX2FkanVzdERpYWxvZygpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfaW5pdGlhbGl6ZUJhY2tEcm9wKCkge1xuICAgIHJldHVybiBuZXcgQmFja2Ryb3Aoe1xuICAgICAgaXNWaXNpYmxlOiBCb29sZWFuKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCksXG4gICAgICAvLyAnc3RhdGljJyBvcHRpb24gd2lsbCBiZSB0cmFuc2xhdGVkIHRvIHRydWUsIGFuZCBib29sZWFucyB3aWxsIGtlZXAgdGhlaXIgdmFsdWUsXG4gICAgICBpc0FuaW1hdGVkOiB0aGlzLl9pc0FuaW1hdGVkKClcbiAgICB9KTtcbiAgfVxuICBfaW5pdGlhbGl6ZUZvY3VzVHJhcCgpIHtcbiAgICByZXR1cm4gbmV3IEZvY3VzVHJhcCh7XG4gICAgICB0cmFwRWxlbWVudDogdGhpcy5fZWxlbWVudFxuICAgIH0pO1xuICB9XG4gIF9zaG93RWxlbWVudChyZWxhdGVkVGFyZ2V0KSB7XG4gICAgLy8gdHJ5IHRvIGFwcGVuZCBkeW5hbWljIG1vZGFsXG4gICAgaWYgKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZCh0aGlzLl9lbGVtZW50KTtcbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcsIHRydWUpO1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2RpYWxvZycpO1xuICAgIHRoaXMuX2VsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICBjb25zdCBtb2RhbEJvZHkgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX01PREFMX0JPRFksIHRoaXMuX2RpYWxvZyk7XG4gICAgaWYgKG1vZGFsQm9keSkge1xuICAgICAgbW9kYWxCb2R5LnNjcm9sbFRvcCA9IDA7XG4gICAgfVxuICAgIHJlZmxvdyh0aGlzLl9lbGVtZW50KTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XJDQpO1xuICAgIGNvbnN0IHRyYW5zaXRpb25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jb25maWcuZm9jdXMpIHtcbiAgICAgICAgdGhpcy5fZm9jdXN0cmFwLmFjdGl2YXRlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOJDQsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldFxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKHRyYW5zaXRpb25Db21wbGV0ZSwgdGhpcy5fZGlhbG9nLCB0aGlzLl9pc0FuaW1hdGVkKCkpO1xuICB9XG4gIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTl9ESVNNSVNTJDEsIGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgIT09IEVTQ0FQRV9LRVkkMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKCk7XG4gICAgfSk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfUkVTSVpFJDEsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc1Nob3duICYmICF0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgdGhpcy5fYWRqdXN0RGlhbG9nKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFRE9XTl9ESVNNSVNTLCBldmVudCA9PiB7XG4gICAgICAvLyBhIGJhZCB0cmljayB0byBzZWdyZWdhdGUgY2xpY2tzIHRoYXQgbWF5IHN0YXJ0IGluc2lkZSBkaWFsb2cgYnV0IGVuZCBvdXRzaWRlLCBhbmQgYXZvaWQgbGlzdGVuIHRvIHNjcm9sbGJhciBjbGlja3NcbiAgICAgIEV2ZW50SGFuZGxlci5vbmUodGhpcy5fZWxlbWVudCwgRVZFTlRfQ0xJQ0tfRElTTUlTUywgZXZlbnQyID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQgIT09IGV2ZW50LnRhcmdldCB8fCB0aGlzLl9lbGVtZW50ICE9PSBldmVudDIudGFyZ2V0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jb25maWcuYmFja2Ryb3AgPT09ICdzdGF0aWMnKSB7XG4gICAgICAgICAgdGhpcy5fdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmJhY2tkcm9wKSB7XG4gICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIF9oaWRlTW9kYWwoKSB7XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLW1vZGFsJyk7XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3JvbGUnKTtcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9iYWNrZHJvcC5oaWRlKCgpID0+IHtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX09QRU4pO1xuICAgICAgdGhpcy5fcmVzZXRBZGp1c3RtZW50cygpO1xuICAgICAgdGhpcy5fc2Nyb2xsQmFyLnJlc2V0KCk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4kNCk7XG4gICAgfSk7XG4gIH1cbiAgX2lzQW5pbWF0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSQzKTtcbiAgfVxuICBfdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpIHtcbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFX1BSRVZFTlRFRCQxKTtcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNNb2RhbE92ZXJmbG93aW5nID0gdGhpcy5fZWxlbWVudC5zY3JvbGxIZWlnaHQgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgIGNvbnN0IGluaXRpYWxPdmVyZmxvd1kgPSB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93WTtcbiAgICAvLyByZXR1cm4gaWYgdGhlIGZvbGxvd2luZyBiYWNrZ3JvdW5kIHRyYW5zaXRpb24gaGFzbid0IHlldCBjb21wbGV0ZWRcbiAgICBpZiAoaW5pdGlhbE92ZXJmbG93WSA9PT0gJ2hpZGRlbicgfHwgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TVEFUSUMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaXNNb2RhbE92ZXJmbG93aW5nKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93WSA9ICdoaWRkZW4nO1xuICAgIH1cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TVEFUSUMpO1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU1RBVElDKTtcbiAgICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93WSA9IGluaXRpYWxPdmVyZmxvd1k7XG4gICAgICB9LCB0aGlzLl9kaWFsb2cpO1xuICAgIH0sIHRoaXMuX2RpYWxvZyk7XG4gICAgdGhpcy5fZWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgdXNlZCB0byBoYW5kbGUgb3ZlcmZsb3dpbmcgbW9kYWxzXG4gICAqL1xuXG4gIF9hZGp1c3REaWFsb2coKSB7XG4gICAgY29uc3QgaXNNb2RhbE92ZXJmbG93aW5nID0gdGhpcy5fZWxlbWVudC5zY3JvbGxIZWlnaHQgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgIGNvbnN0IHNjcm9sbGJhcldpZHRoID0gdGhpcy5fc2Nyb2xsQmFyLmdldFdpZHRoKCk7XG4gICAgY29uc3QgaXNCb2R5T3ZlcmZsb3dpbmcgPSBzY3JvbGxiYXJXaWR0aCA+IDA7XG4gICAgaWYgKGlzQm9keU92ZXJmbG93aW5nICYmICFpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gaXNSVEwoKSA/ICdwYWRkaW5nTGVmdCcgOiAncGFkZGluZ1JpZ2h0JztcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbcHJvcGVydHldID0gYCR7c2Nyb2xsYmFyV2lkdGh9cHhgO1xuICAgIH1cbiAgICBpZiAoIWlzQm9keU92ZXJmbG93aW5nICYmIGlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSBpc1JUTCgpID8gJ3BhZGRpbmdSaWdodCcgOiAncGFkZGluZ0xlZnQnO1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZVtwcm9wZXJ0eV0gPSBgJHtzY3JvbGxiYXJXaWR0aH1weGA7XG4gICAgfVxuICB9XG4gIF9yZXNldEFkanVzdG1lbnRzKCkge1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQgPSAnJztcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9ICcnO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnLCByZWxhdGVkVGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgfVxuICAgICAgZGF0YVtjb25maWddKHJlbGF0ZWRUYXJnZXQpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJJDIsIFNFTEVDVE9SX0RBVEFfVE9HR0xFJDIsIGZ1bmN0aW9uIChldmVudCkge1xuICBjb25zdCB0YXJnZXQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKHRoaXMpO1xuICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICBFdmVudEhhbmRsZXIub25lKHRhcmdldCwgRVZFTlRfU0hPVyQ0LCBzaG93RXZlbnQgPT4ge1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgLy8gb25seSByZWdpc3RlciBmb2N1cyByZXN0b3JlciBpZiBtb2RhbCB3aWxsIGFjdHVhbGx5IGdldCBzaG93blxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBFdmVudEhhbmRsZXIub25lKHRhcmdldCwgRVZFTlRfSElEREVOJDQsICgpID0+IHtcbiAgICAgIGlmIChpc1Zpc2libGUodGhpcykpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICAvLyBhdm9pZCBjb25mbGljdCB3aGVuIGNsaWNraW5nIG1vZGFsIHRvZ2dsZXIgd2hpbGUgYW5vdGhlciBvbmUgaXMgb3BlblxuICBjb25zdCBhbHJlYWR5T3BlbiA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoT1BFTl9TRUxFQ1RPUiQxKTtcbiAgaWYgKGFscmVhZHlPcGVuKSB7XG4gICAgTW9kYWwuZ2V0SW5zdGFuY2UoYWxyZWFkeU9wZW4pLmhpZGUoKTtcbiAgfVxuICBjb25zdCBkYXRhID0gTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpO1xuICBkYXRhLnRvZ2dsZSh0aGlzKTtcbn0pO1xuZW5hYmxlRGlzbWlzc1RyaWdnZXIoTW9kYWwpO1xuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihNb2RhbCk7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBvZmZjYW52YXMuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQ2ID0gJ29mZmNhbnZhcyc7XG5jb25zdCBEQVRBX0tFWSQzID0gJ2JzLm9mZmNhbnZhcyc7XG5jb25zdCBFVkVOVF9LRVkkMyA9IGAuJHtEQVRBX0tFWSQzfWA7XG5jb25zdCBEQVRBX0FQSV9LRVkkMSA9ICcuZGF0YS1hcGknO1xuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSQyID0gYGxvYWQke0VWRU5UX0tFWSQzfSR7REFUQV9BUElfS0VZJDF9YDtcbmNvbnN0IEVTQ0FQRV9LRVkgPSAnRXNjYXBlJztcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQzID0gJ3Nob3cnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XSU5HJDEgPSAnc2hvd2luZyc7XG5jb25zdCBDTEFTU19OQU1FX0hJRElORyA9ICdoaWRpbmcnO1xuY29uc3QgQ0xBU1NfTkFNRV9CQUNLRFJPUCA9ICdvZmZjYW52YXMtYmFja2Ryb3AnO1xuY29uc3QgT1BFTl9TRUxFQ1RPUiA9ICcub2ZmY2FudmFzLnNob3cnO1xuY29uc3QgRVZFTlRfU0hPVyQzID0gYHNob3cke0VWRU5UX0tFWSQzfWA7XG5jb25zdCBFVkVOVF9TSE9XTiQzID0gYHNob3duJHtFVkVOVF9LRVkkM31gO1xuY29uc3QgRVZFTlRfSElERSQzID0gYGhpZGUke0VWRU5UX0tFWSQzfWA7XG5jb25zdCBFVkVOVF9ISURFX1BSRVZFTlRFRCA9IGBoaWRlUHJldmVudGVkJHtFVkVOVF9LRVkkM31gO1xuY29uc3QgRVZFTlRfSElEREVOJDMgPSBgaGlkZGVuJHtFVkVOVF9LRVkkM31gO1xuY29uc3QgRVZFTlRfUkVTSVpFID0gYHJlc2l6ZSR7RVZFTlRfS0VZJDN9YDtcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJJDEgPSBgY2xpY2ske0VWRU5UX0tFWSQzfSR7REFUQV9BUElfS0VZJDF9YDtcbmNvbnN0IEVWRU5UX0tFWURPV05fRElTTUlTUyA9IGBrZXlkb3duLmRpc21pc3Mke0VWRU5UX0tFWSQzfWA7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQxID0gJ1tkYXRhLWJzLXRvZ2dsZT1cIm9mZmNhbnZhc1wiXSc7XG5jb25zdCBEZWZhdWx0JDUgPSB7XG4gIGJhY2tkcm9wOiB0cnVlLFxuICBrZXlib2FyZDogdHJ1ZSxcbiAgc2Nyb2xsOiBmYWxzZVxufTtcbmNvbnN0IERlZmF1bHRUeXBlJDUgPSB7XG4gIGJhY2tkcm9wOiAnKGJvb2xlYW58c3RyaW5nKScsXG4gIGtleWJvYXJkOiAnYm9vbGVhbicsXG4gIHNjcm9sbDogJ2Jvb2xlYW4nXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBPZmZjYW52YXMgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKTtcbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2U7XG4gICAgdGhpcy5fYmFja2Ryb3AgPSB0aGlzLl9pbml0aWFsaXplQmFja0Ryb3AoKTtcbiAgICB0aGlzLl9mb2N1c3RyYXAgPSB0aGlzLl9pbml0aWFsaXplRm9jdXNUcmFwKCk7XG4gICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDU7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkNTtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkNjtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICB0b2dnbGUocmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3cocmVsYXRlZFRhcmdldCk7XG4gIH1cbiAgc2hvdyhyZWxhdGVkVGFyZ2V0KSB7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVyQzLCB7XG4gICAgICByZWxhdGVkVGFyZ2V0XG4gICAgfSk7XG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2lzU2hvd24gPSB0cnVlO1xuICAgIHRoaXMuX2JhY2tkcm9wLnNob3coKTtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5zY3JvbGwpIHtcbiAgICAgIG5ldyBTY3JvbGxCYXJIZWxwZXIoKS5oaWRlKCk7XG4gICAgfVxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLW1vZGFsJywgdHJ1ZSk7XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnZGlhbG9nJyk7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPV0lORyQxKTtcbiAgICBjb25zdCBjb21wbGV0ZUNhbGxCYWNrID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9jb25maWcuc2Nyb2xsIHx8IHRoaXMuX2NvbmZpZy5iYWNrZHJvcCkge1xuICAgICAgICB0aGlzLl9mb2N1c3RyYXAuYWN0aXZhdGUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1ckMyk7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XSU5HJDEpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPV04kMywge1xuICAgICAgICByZWxhdGVkVGFyZ2V0XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGVDYWxsQmFjaywgdGhpcy5fZWxlbWVudCwgdHJ1ZSk7XG4gIH1cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzU2hvd24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSQzKTtcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKTtcbiAgICB0aGlzLl9lbGVtZW50LmJsdXIoKTtcbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2U7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfSElESU5HKTtcbiAgICB0aGlzLl9iYWNrZHJvcC5oaWRlKCk7XG4gICAgY29uc3QgY29tcGxldGVDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckMywgQ0xBU1NfTkFNRV9ISURJTkcpO1xuICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdyb2xlJyk7XG4gICAgICBpZiAoIXRoaXMuX2NvbmZpZy5zY3JvbGwpIHtcbiAgICAgICAgbmV3IFNjcm9sbEJhckhlbHBlcigpLnJlc2V0KCk7XG4gICAgICB9XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4kMyk7XG4gICAgfTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlQ2FsbGJhY2ssIHRoaXMuX2VsZW1lbnQsIHRydWUpO1xuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5fYmFja2Ryb3AuZGlzcG9zZSgpO1xuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKCk7XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfaW5pdGlhbGl6ZUJhY2tEcm9wKCkge1xuICAgIGNvbnN0IGNsaWNrQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY29uZmlnLmJhY2tkcm9wID09PSAnc3RhdGljJykge1xuICAgICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFX1BSRVZFTlRFRCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH07XG5cbiAgICAvLyAnc3RhdGljJyBvcHRpb24gd2lsbCBiZSB0cmFuc2xhdGVkIHRvIHRydWUsIGFuZCBib29sZWFucyB3aWxsIGtlZXAgdGhlaXIgdmFsdWVcbiAgICBjb25zdCBpc1Zpc2libGUgPSBCb29sZWFuKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCk7XG4gICAgcmV0dXJuIG5ldyBCYWNrZHJvcCh7XG4gICAgICBjbGFzc05hbWU6IENMQVNTX05BTUVfQkFDS0RST1AsXG4gICAgICBpc1Zpc2libGUsXG4gICAgICBpc0FuaW1hdGVkOiB0cnVlLFxuICAgICAgcm9vdEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSxcbiAgICAgIGNsaWNrQ2FsbGJhY2s6IGlzVmlzaWJsZSA/IGNsaWNrQ2FsbGJhY2sgOiBudWxsXG4gICAgfSk7XG4gIH1cbiAgX2luaXRpYWxpemVGb2N1c1RyYXAoKSB7XG4gICAgcmV0dXJuIG5ldyBGb2N1c1RyYXAoe1xuICAgICAgdHJhcEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9KTtcbiAgfVxuICBfYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWURPV05fRElTTUlTUywgZXZlbnQgPT4ge1xuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gRVNDQVBFX0tFWSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFX1BSRVZFTlRFRCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBPZmZjYW52YXMuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgfVxuICAgICAgZGF0YVtjb25maWddKHRoaXMpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJJDEsIFNFTEVDVE9SX0RBVEFfVE9HR0xFJDEsIGZ1bmN0aW9uIChldmVudCkge1xuICBjb25zdCB0YXJnZXQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKHRoaXMpO1xuICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBFdmVudEhhbmRsZXIub25lKHRhcmdldCwgRVZFTlRfSElEREVOJDMsICgpID0+IHtcbiAgICAvLyBmb2N1cyBvbiB0cmlnZ2VyIHdoZW4gaXQgaXMgY2xvc2VkXG4gICAgaWYgKGlzVmlzaWJsZSh0aGlzKSkge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gYXZvaWQgY29uZmxpY3Qgd2hlbiBjbGlja2luZyBhIHRvZ2dsZXIgb2YgYW4gb2ZmY2FudmFzLCB3aGlsZSBhbm90aGVyIGlzIG9wZW5cbiAgY29uc3QgYWxyZWFkeU9wZW4gPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKE9QRU5fU0VMRUNUT1IpO1xuICBpZiAoYWxyZWFkeU9wZW4gJiYgYWxyZWFkeU9wZW4gIT09IHRhcmdldCkge1xuICAgIE9mZmNhbnZhcy5nZXRJbnN0YW5jZShhbHJlYWR5T3BlbikuaGlkZSgpO1xuICB9XG4gIGNvbnN0IGRhdGEgPSBPZmZjYW52YXMuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpO1xuICBkYXRhLnRvZ2dsZSh0aGlzKTtcbn0pO1xuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSQyLCAoKSA9PiB7XG4gIGZvciAoY29uc3Qgc2VsZWN0b3Igb2YgU2VsZWN0b3JFbmdpbmUuZmluZChPUEVOX1NFTEVDVE9SKSkge1xuICAgIE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKHNlbGVjdG9yKS5zaG93KCk7XG4gIH1cbn0pO1xuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfUkVTSVpFLCAoKSA9PiB7XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBTZWxlY3RvckVuZ2luZS5maW5kKCdbYXJpYS1tb2RhbF1bY2xhc3MqPXNob3ddW2NsYXNzKj1vZmZjYW52YXMtXScpKSB7XG4gICAgaWYgKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gIT09ICdmaXhlZCcpIHtcbiAgICAgIE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQpLmhpZGUoKTtcbiAgICB9XG4gIH1cbn0pO1xuZW5hYmxlRGlzbWlzc1RyaWdnZXIoT2ZmY2FudmFzKTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oT2ZmY2FudmFzKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvc2FuaXRpemVyLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuLy8ganMtZG9jcy1zdGFydCBhbGxvdy1saXN0XG5jb25zdCBBUklBX0FUVFJJQlVURV9QQVRURVJOID0gL15hcmlhLVtcXHctXSokL2k7XG5jb25zdCBEZWZhdWx0QWxsb3dsaXN0ID0ge1xuICAvLyBHbG9iYWwgYXR0cmlidXRlcyBhbGxvd2VkIG9uIGFueSBzdXBwbGllZCBlbGVtZW50IGJlbG93LlxuICAnKic6IFsnY2xhc3MnLCAnZGlyJywgJ2lkJywgJ2xhbmcnLCAncm9sZScsIEFSSUFfQVRUUklCVVRFX1BBVFRFUk5dLFxuICBhOiBbJ3RhcmdldCcsICdocmVmJywgJ3RpdGxlJywgJ3JlbCddLFxuICBhcmVhOiBbXSxcbiAgYjogW10sXG4gIGJyOiBbXSxcbiAgY29sOiBbXSxcbiAgY29kZTogW10sXG4gIGRkOiBbXSxcbiAgZGl2OiBbXSxcbiAgZGw6IFtdLFxuICBkdDogW10sXG4gIGVtOiBbXSxcbiAgaHI6IFtdLFxuICBoMTogW10sXG4gIGgyOiBbXSxcbiAgaDM6IFtdLFxuICBoNDogW10sXG4gIGg1OiBbXSxcbiAgaDY6IFtdLFxuICBpOiBbXSxcbiAgaW1nOiBbJ3NyYycsICdzcmNzZXQnLCAnYWx0JywgJ3RpdGxlJywgJ3dpZHRoJywgJ2hlaWdodCddLFxuICBsaTogW10sXG4gIG9sOiBbXSxcbiAgcDogW10sXG4gIHByZTogW10sXG4gIHM6IFtdLFxuICBzbWFsbDogW10sXG4gIHNwYW46IFtdLFxuICBzdWI6IFtdLFxuICBzdXA6IFtdLFxuICBzdHJvbmc6IFtdLFxuICB1OiBbXSxcbiAgdWw6IFtdXG59O1xuLy8ganMtZG9jcy1lbmQgYWxsb3ctbGlzdFxuXG5jb25zdCB1cmlBdHRyaWJ1dGVzID0gbmV3IFNldChbJ2JhY2tncm91bmQnLCAnY2l0ZScsICdocmVmJywgJ2l0ZW10eXBlJywgJ2xvbmdkZXNjJywgJ3Bvc3RlcicsICdzcmMnLCAneGxpbms6aHJlZiddKTtcblxuLyoqXG4gKiBBIHBhdHRlcm4gdGhhdCByZWNvZ25pemVzIFVSTHMgdGhhdCBhcmUgc2FmZSB3cnQuIFhTUyBpbiBVUkwgbmF2aWdhdGlvblxuICogY29udGV4dHMuXG4gKlxuICogU2hvdXQtb3V0IHRvIEFuZ3VsYXIgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iLzE1LjIuOC9wYWNrYWdlcy9jb3JlL3NyYy9zYW5pdGl6YXRpb24vdXJsX3Nhbml0aXplci50cyNMMzhcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vYmV0dGVyLXJlZ2V4XG5jb25zdCBTQUZFX1VSTF9QQVRURVJOID0gL14oPyFqYXZhc2NyaXB0OikoPzpbYS16MC05Ky4tXSs6fFteJjovPyNdKig/OlsvPyNdfCQpKS9pO1xuY29uc3QgYWxsb3dlZEF0dHJpYnV0ZSA9IChhdHRyaWJ1dGUsIGFsbG93ZWRBdHRyaWJ1dGVMaXN0KSA9PiB7XG4gIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGFsbG93ZWRBdHRyaWJ1dGVMaXN0LmluY2x1ZGVzKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgaWYgKHVyaUF0dHJpYnV0ZXMuaGFzKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICByZXR1cm4gQm9vbGVhbihTQUZFX1VSTF9QQVRURVJOLnRlc3QoYXR0cmlidXRlLm5vZGVWYWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIGEgcmVndWxhciBleHByZXNzaW9uIHZhbGlkYXRlcyB0aGUgYXR0cmlidXRlLlxuICByZXR1cm4gYWxsb3dlZEF0dHJpYnV0ZUxpc3QuZmlsdGVyKGF0dHJpYnV0ZVJlZ2V4ID0+IGF0dHJpYnV0ZVJlZ2V4IGluc3RhbmNlb2YgUmVnRXhwKS5zb21lKHJlZ2V4ID0+IHJlZ2V4LnRlc3QoYXR0cmlidXRlTmFtZSkpO1xufTtcbmZ1bmN0aW9uIHNhbml0aXplSHRtbCh1bnNhZmVIdG1sLCBhbGxvd0xpc3QsIHNhbml0aXplRnVuY3Rpb24pIHtcbiAgaWYgKCF1bnNhZmVIdG1sLmxlbmd0aCkge1xuICAgIHJldHVybiB1bnNhZmVIdG1sO1xuICB9XG4gIGlmIChzYW5pdGl6ZUZ1bmN0aW9uICYmIHR5cGVvZiBzYW5pdGl6ZUZ1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHNhbml0aXplRnVuY3Rpb24odW5zYWZlSHRtbCk7XG4gIH1cbiAgY29uc3QgZG9tUGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKTtcbiAgY29uc3QgY3JlYXRlZERvY3VtZW50ID0gZG9tUGFyc2VyLnBhcnNlRnJvbVN0cmluZyh1bnNhZmVIdG1sLCAndGV4dC9odG1sJyk7XG4gIGNvbnN0IGVsZW1lbnRzID0gW10uY29uY2F0KC4uLmNyZWF0ZWREb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoJyonKSk7XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgIGNvbnN0IGVsZW1lbnROYW1lID0gZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghT2JqZWN0LmtleXMoYWxsb3dMaXN0KS5pbmNsdWRlcyhlbGVtZW50TmFtZSkpIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgYXR0cmlidXRlTGlzdCA9IFtdLmNvbmNhdCguLi5lbGVtZW50LmF0dHJpYnV0ZXMpO1xuICAgIGNvbnN0IGFsbG93ZWRBdHRyaWJ1dGVzID0gW10uY29uY2F0KGFsbG93TGlzdFsnKiddIHx8IFtdLCBhbGxvd0xpc3RbZWxlbWVudE5hbWVdIHx8IFtdKTtcbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVMaXN0KSB7XG4gICAgICBpZiAoIWFsbG93ZWRBdHRyaWJ1dGUoYXR0cmlidXRlLCBhbGxvd2VkQXR0cmlidXRlcykpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlLm5vZGVOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZWREb2N1bWVudC5ib2R5LmlubmVySFRNTDtcbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvdGVtcGxhdGUtZmFjdG9yeS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDUgPSAnVGVtcGxhdGVGYWN0b3J5JztcbmNvbnN0IERlZmF1bHQkNCA9IHtcbiAgYWxsb3dMaXN0OiBEZWZhdWx0QWxsb3dsaXN0LFxuICBjb250ZW50OiB7fSxcbiAgLy8geyBzZWxlY3RvciA6IHRleHQgLCAgc2VsZWN0b3IyIDogdGV4dDIgLCB9XG4gIGV4dHJhQ2xhc3M6ICcnLFxuICBodG1sOiBmYWxzZSxcbiAgc2FuaXRpemU6IHRydWUsXG4gIHNhbml0aXplRm46IG51bGwsXG4gIHRlbXBsYXRlOiAnPGRpdj48L2Rpdj4nXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkNCA9IHtcbiAgYWxsb3dMaXN0OiAnb2JqZWN0JyxcbiAgY29udGVudDogJ29iamVjdCcsXG4gIGV4dHJhQ2xhc3M6ICcoc3RyaW5nfGZ1bmN0aW9uKScsXG4gIGh0bWw6ICdib29sZWFuJyxcbiAgc2FuaXRpemU6ICdib29sZWFuJyxcbiAgc2FuaXRpemVGbjogJyhudWxsfGZ1bmN0aW9uKScsXG4gIHRlbXBsYXRlOiAnc3RyaW5nJ1xufTtcbmNvbnN0IERlZmF1bHRDb250ZW50VHlwZSA9IHtcbiAgZW50cnk6ICcoc3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb258bnVsbCknLFxuICBzZWxlY3RvcjogJyhzdHJpbmd8ZWxlbWVudCknXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBUZW1wbGF0ZUZhY3RvcnkgZXh0ZW5kcyBDb25maWcge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkNDtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQ0O1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQ1O1xuICB9XG5cbiAgLy8gUHVibGljXG4gIGdldENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5fY29uZmlnLmNvbnRlbnQpLm1hcChjb25maWcgPT4gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24oY29uZmlnKSkuZmlsdGVyKEJvb2xlYW4pO1xuICB9XG4gIGhhc0NvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29udGVudCgpLmxlbmd0aCA+IDA7XG4gIH1cbiAgY2hhbmdlQ29udGVudChjb250ZW50KSB7XG4gICAgdGhpcy5fY2hlY2tDb250ZW50KGNvbnRlbnQpO1xuICAgIHRoaXMuX2NvbmZpZy5jb250ZW50ID0ge1xuICAgICAgLi4udGhpcy5fY29uZmlnLmNvbnRlbnQsXG4gICAgICAuLi5jb250ZW50XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB0b0h0bWwoKSB7XG4gICAgY29uc3QgdGVtcGxhdGVXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGVtcGxhdGVXcmFwcGVyLmlubmVySFRNTCA9IHRoaXMuX21heWJlU2FuaXRpemUodGhpcy5fY29uZmlnLnRlbXBsYXRlKTtcbiAgICBmb3IgKGNvbnN0IFtzZWxlY3RvciwgdGV4dF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5fY29uZmlnLmNvbnRlbnQpKSB7XG4gICAgICB0aGlzLl9zZXRDb250ZW50KHRlbXBsYXRlV3JhcHBlciwgdGV4dCwgc2VsZWN0b3IpO1xuICAgIH1cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHRlbXBsYXRlV3JhcHBlci5jaGlsZHJlblswXTtcbiAgICBjb25zdCBleHRyYUNsYXNzID0gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmV4dHJhQ2xhc3MpO1xuICAgIGlmIChleHRyYUNsYXNzKSB7XG4gICAgICB0ZW1wbGF0ZS5jbGFzc0xpc3QuYWRkKC4uLmV4dHJhQ2xhc3Muc3BsaXQoJyAnKSk7XG4gICAgfVxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX3R5cGVDaGVja0NvbmZpZyhjb25maWcpIHtcbiAgICBzdXBlci5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZyk7XG4gICAgdGhpcy5fY2hlY2tDb250ZW50KGNvbmZpZy5jb250ZW50KTtcbiAgfVxuICBfY2hlY2tDb250ZW50KGFyZykge1xuICAgIGZvciAoY29uc3QgW3NlbGVjdG9yLCBjb250ZW50XSBvZiBPYmplY3QuZW50cmllcyhhcmcpKSB7XG4gICAgICBzdXBlci5fdHlwZUNoZWNrQ29uZmlnKHtcbiAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgIGVudHJ5OiBjb250ZW50XG4gICAgICB9LCBEZWZhdWx0Q29udGVudFR5cGUpO1xuICAgIH1cbiAgfVxuICBfc2V0Q29udGVudCh0ZW1wbGF0ZSwgY29udGVudCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZUVsZW1lbnQgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKHNlbGVjdG9yLCB0ZW1wbGF0ZSk7XG4gICAgaWYgKCF0ZW1wbGF0ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29udGVudCA9IHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGNvbnRlbnQpO1xuICAgIGlmICghY29udGVudCkge1xuICAgICAgdGVtcGxhdGVFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNFbGVtZW50KGNvbnRlbnQpKSB7XG4gICAgICB0aGlzLl9wdXRFbGVtZW50SW5UZW1wbGF0ZShnZXRFbGVtZW50KGNvbnRlbnQpLCB0ZW1wbGF0ZUVsZW1lbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29uZmlnLmh0bWwpIHtcbiAgICAgIHRlbXBsYXRlRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLl9tYXliZVNhbml0aXplKGNvbnRlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0ZW1wbGF0ZUVsZW1lbnQudGV4dENvbnRlbnQgPSBjb250ZW50O1xuICB9XG4gIF9tYXliZVNhbml0aXplKGFyZykge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcuc2FuaXRpemUgPyBzYW5pdGl6ZUh0bWwoYXJnLCB0aGlzLl9jb25maWcuYWxsb3dMaXN0LCB0aGlzLl9jb25maWcuc2FuaXRpemVGbikgOiBhcmc7XG4gIH1cbiAgX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBleGVjdXRlKGFyZywgW3RoaXNdKTtcbiAgfVxuICBfcHV0RWxlbWVudEluVGVtcGxhdGUoZWxlbWVudCwgdGVtcGxhdGVFbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5odG1sKSB7XG4gICAgICB0ZW1wbGF0ZUVsZW1lbnQuaW5uZXJIVE1MID0gJyc7XG4gICAgICB0ZW1wbGF0ZUVsZW1lbnQuYXBwZW5kKGVsZW1lbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0ZW1wbGF0ZUVsZW1lbnQudGV4dENvbnRlbnQgPSBlbGVtZW50LnRleHRDb250ZW50O1xuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB0b29sdGlwLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkNCA9ICd0b29sdGlwJztcbmNvbnN0IERJU0FMTE9XRURfQVRUUklCVVRFUyA9IG5ldyBTZXQoWydzYW5pdGl6ZScsICdhbGxvd0xpc3QnLCAnc2FuaXRpemVGbiddKTtcbmNvbnN0IENMQVNTX05BTUVfRkFERSQyID0gJ2ZhZGUnO1xuY29uc3QgQ0xBU1NfTkFNRV9NT0RBTCA9ICdtb2RhbCc7XG5jb25zdCBDTEFTU19OQU1FX1NIT1ckMiA9ICdzaG93JztcbmNvbnN0IFNFTEVDVE9SX1RPT0xUSVBfSU5ORVIgPSAnLnRvb2x0aXAtaW5uZXInO1xuY29uc3QgU0VMRUNUT1JfTU9EQUwgPSBgLiR7Q0xBU1NfTkFNRV9NT0RBTH1gO1xuY29uc3QgRVZFTlRfTU9EQUxfSElERSA9ICdoaWRlLmJzLm1vZGFsJztcbmNvbnN0IFRSSUdHRVJfSE9WRVIgPSAnaG92ZXInO1xuY29uc3QgVFJJR0dFUl9GT0NVUyA9ICdmb2N1cyc7XG5jb25zdCBUUklHR0VSX0NMSUNLID0gJ2NsaWNrJztcbmNvbnN0IFRSSUdHRVJfTUFOVUFMID0gJ21hbnVhbCc7XG5jb25zdCBFVkVOVF9ISURFJDIgPSAnaGlkZSc7XG5jb25zdCBFVkVOVF9ISURERU4kMiA9ICdoaWRkZW4nO1xuY29uc3QgRVZFTlRfU0hPVyQyID0gJ3Nob3cnO1xuY29uc3QgRVZFTlRfU0hPV04kMiA9ICdzaG93bic7XG5jb25zdCBFVkVOVF9JTlNFUlRFRCA9ICdpbnNlcnRlZCc7XG5jb25zdCBFVkVOVF9DTElDSyQxID0gJ2NsaWNrJztcbmNvbnN0IEVWRU5UX0ZPQ1VTSU4kMSA9ICdmb2N1c2luJztcbmNvbnN0IEVWRU5UX0ZPQ1VTT1VUJDEgPSAnZm9jdXNvdXQnO1xuY29uc3QgRVZFTlRfTU9VU0VFTlRFUiA9ICdtb3VzZWVudGVyJztcbmNvbnN0IEVWRU5UX01PVVNFTEVBVkUgPSAnbW91c2VsZWF2ZSc7XG5jb25zdCBBdHRhY2htZW50TWFwID0ge1xuICBBVVRPOiAnYXV0bycsXG4gIFRPUDogJ3RvcCcsXG4gIFJJR0hUOiBpc1JUTCgpID8gJ2xlZnQnIDogJ3JpZ2h0JyxcbiAgQk9UVE9NOiAnYm90dG9tJyxcbiAgTEVGVDogaXNSVEwoKSA/ICdyaWdodCcgOiAnbGVmdCdcbn07XG5jb25zdCBEZWZhdWx0JDMgPSB7XG4gIGFsbG93TGlzdDogRGVmYXVsdEFsbG93bGlzdCxcbiAgYW5pbWF0aW9uOiB0cnVlLFxuICBib3VuZGFyeTogJ2NsaXBwaW5nUGFyZW50cycsXG4gIGNvbnRhaW5lcjogZmFsc2UsXG4gIGN1c3RvbUNsYXNzOiAnJyxcbiAgZGVsYXk6IDAsXG4gIGZhbGxiYWNrUGxhY2VtZW50czogWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXSxcbiAgaHRtbDogZmFsc2UsXG4gIG9mZnNldDogWzAsIDZdLFxuICBwbGFjZW1lbnQ6ICd0b3AnLFxuICBwb3BwZXJDb25maWc6IG51bGwsXG4gIHNhbml0aXplOiB0cnVlLFxuICBzYW5pdGl6ZUZuOiBudWxsLFxuICBzZWxlY3RvcjogZmFsc2UsXG4gIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiPicgKyAnPGRpdiBjbGFzcz1cInRvb2x0aXAtYXJyb3dcIj48L2Rpdj4nICsgJzxkaXYgY2xhc3M9XCJ0b29sdGlwLWlubmVyXCI+PC9kaXY+JyArICc8L2Rpdj4nLFxuICB0aXRsZTogJycsXG4gIHRyaWdnZXI6ICdob3ZlciBmb2N1cydcbn07XG5jb25zdCBEZWZhdWx0VHlwZSQzID0ge1xuICBhbGxvd0xpc3Q6ICdvYmplY3QnLFxuICBhbmltYXRpb246ICdib29sZWFuJyxcbiAgYm91bmRhcnk6ICcoc3RyaW5nfGVsZW1lbnQpJyxcbiAgY29udGFpbmVyOiAnKHN0cmluZ3xlbGVtZW50fGJvb2xlYW4pJyxcbiAgY3VzdG9tQ2xhc3M6ICcoc3RyaW5nfGZ1bmN0aW9uKScsXG4gIGRlbGF5OiAnKG51bWJlcnxvYmplY3QpJyxcbiAgZmFsbGJhY2tQbGFjZW1lbnRzOiAnYXJyYXknLFxuICBodG1sOiAnYm9vbGVhbicsXG4gIG9mZnNldDogJyhhcnJheXxzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgcGxhY2VtZW50OiAnKHN0cmluZ3xmdW5jdGlvbiknLFxuICBwb3BwZXJDb25maWc6ICcobnVsbHxvYmplY3R8ZnVuY3Rpb24pJyxcbiAgc2FuaXRpemU6ICdib29sZWFuJyxcbiAgc2FuaXRpemVGbjogJyhudWxsfGZ1bmN0aW9uKScsXG4gIHNlbGVjdG9yOiAnKHN0cmluZ3xib29sZWFuKScsXG4gIHRlbXBsYXRlOiAnc3RyaW5nJyxcbiAgdGl0bGU6ICcoc3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb24pJyxcbiAgdHJpZ2dlcjogJ3N0cmluZydcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFRvb2x0aXAgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgaWYgKHR5cGVvZiBQb3BwZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb290c3RyYXBcXCdzIHRvb2x0aXBzIHJlcXVpcmUgUG9wcGVyIChodHRwczovL3BvcHBlci5qcy5vcmcpJyk7XG4gICAgfVxuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG5cbiAgICAvLyBQcml2YXRlXG4gICAgdGhpcy5faXNFbmFibGVkID0gdHJ1ZTtcbiAgICB0aGlzLl90aW1lb3V0ID0gMDtcbiAgICB0aGlzLl9pc0hvdmVyZWQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXIgPSB7fTtcbiAgICB0aGlzLl9wb3BwZXIgPSBudWxsO1xuICAgIHRoaXMuX3RlbXBsYXRlRmFjdG9yeSA9IG51bGw7XG4gICAgdGhpcy5fbmV3Q29udGVudCA9IG51bGw7XG5cbiAgICAvLyBQcm90ZWN0ZWRcbiAgICB0aGlzLnRpcCA9IG51bGw7XG4gICAgdGhpcy5fc2V0TGlzdGVuZXJzKCk7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuc2VsZWN0b3IpIHtcbiAgICAgIHRoaXMuX2ZpeFRpdGxlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkMztcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQzO1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQ0O1xuICB9XG5cbiAgLy8gUHVibGljXG4gIGVuYWJsZSgpIHtcbiAgICB0aGlzLl9pc0VuYWJsZWQgPSB0cnVlO1xuICB9XG4gIGRpc2FibGUoKSB7XG4gICAgdGhpcy5faXNFbmFibGVkID0gZmFsc2U7XG4gIH1cbiAgdG9nZ2xlRW5hYmxlZCgpIHtcbiAgICB0aGlzLl9pc0VuYWJsZWQgPSAhdGhpcy5faXNFbmFibGVkO1xuICB9XG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyLmNsaWNrID0gIXRoaXMuX2FjdGl2ZVRyaWdnZXIuY2xpY2s7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgdGhpcy5fbGVhdmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZW50ZXIoKTtcbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQuY2xvc2VzdChTRUxFQ1RPUl9NT0RBTCksIEVWRU5UX01PREFMX0hJREUsIHRoaXMuX2hpZGVNb2RhbEhhbmRsZXIpO1xuICAgIGlmICh0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy1vcmlnaW5hbC10aXRsZScpKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgndGl0bGUnLCB0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy1vcmlnaW5hbC10aXRsZScpKTtcbiAgICB9XG4gICAgdGhpcy5fZGlzcG9zZVBvcHBlcigpO1xuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgfVxuICBzaG93KCkge1xuICAgIGlmICh0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgdXNlIHNob3cgb24gdmlzaWJsZSBlbGVtZW50cycpO1xuICAgIH1cbiAgICBpZiAoISh0aGlzLl9pc1dpdGhDb250ZW50KCkgJiYgdGhpcy5faXNFbmFibGVkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9TSE9XJDIpKTtcbiAgICBjb25zdCBzaGFkb3dSb290ID0gZmluZFNoYWRvd1Jvb3QodGhpcy5fZWxlbWVudCk7XG4gICAgY29uc3QgaXNJblRoZURvbSA9IChzaGFkb3dSb290IHx8IHRoaXMuX2VsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmNvbnRhaW5zKHRoaXMuX2VsZW1lbnQpO1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCAhaXNJblRoZURvbSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHY2IHJlbW92ZSB0aGlzIG9yIG1ha2UgaXQgb3B0aW9uYWxcbiAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKCk7XG4gICAgY29uc3QgdGlwID0gdGhpcy5fZ2V0VGlwRWxlbWVudCgpO1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgdGlwLmdldEF0dHJpYnV0ZSgnaWQnKSk7XG4gICAgY29uc3Qge1xuICAgICAgY29udGFpbmVyXG4gICAgfSA9IHRoaXMuX2NvbmZpZztcbiAgICBpZiAoIXRoaXMuX2VsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29udGFpbnModGhpcy50aXApKSB7XG4gICAgICBjb250YWluZXIuYXBwZW5kKHRpcCk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9JTlNFUlRFRCkpO1xuICAgIH1cbiAgICB0aGlzLl9wb3BwZXIgPSB0aGlzLl9jcmVhdGVQb3BwZXIodGlwKTtcbiAgICB0aXAuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1ckMik7XG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgYWRkIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB0byB0aGUgYm9keSdzIGltbWVkaWF0ZSBjaGlsZHJlbjtcbiAgICAvLyBvbmx5IG5lZWRlZCBiZWNhdXNlIG9mIGJyb2tlbiBldmVudCBkZWxlZ2F0aW9uIG9uIGlPU1xuICAgIC8vIGh0dHBzOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAxNC8wMi9tb3VzZV9ldmVudF9idWIuaHRtbFxuICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbikpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9uKGVsZW1lbnQsICdtb3VzZW92ZXInLCBub29wKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9TSE9XTiQyKSk7XG4gICAgICBpZiAodGhpcy5faXNIb3ZlcmVkID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLl9sZWF2ZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5faXNIb3ZlcmVkID0gZmFsc2U7XG4gICAgfTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLnRpcCwgdGhpcy5faXNBbmltYXRlZCgpKTtcbiAgfVxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX0hJREUkMikpO1xuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0aXAgPSB0aGlzLl9nZXRUaXBFbGVtZW50KCk7XG4gICAgdGlwLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XJDIpO1xuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIHJlbW92ZSB0aGUgZXh0cmFcbiAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHdlIGFkZGVkIGZvciBpT1Mgc3VwcG9ydFxuICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbikpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCAnbW91c2VvdmVyJywgbm9vcCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9DTElDS10gPSBmYWxzZTtcbiAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyW1RSSUdHRVJfRk9DVVNdID0gZmFsc2U7XG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlcltUUklHR0VSX0hPVkVSXSA9IGZhbHNlO1xuICAgIHRoaXMuX2lzSG92ZXJlZCA9IG51bGw7IC8vIGl0IGlzIGEgdHJpY2sgdG8gc3VwcG9ydCBtYW51YWwgdHJpZ2dlcmluZ1xuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNXaXRoQWN0aXZlVHJpZ2dlcigpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5faXNIb3ZlcmVkKSB7XG4gICAgICAgIHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5Jyk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9ISURERU4kMikpO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy50aXAsIHRoaXMuX2lzQW5pbWF0ZWQoKSk7XG4gIH1cbiAgdXBkYXRlKCkge1xuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci51cGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBQcm90ZWN0ZWRcbiAgX2lzV2l0aENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5fZ2V0VGl0bGUoKSk7XG4gIH1cbiAgX2dldFRpcEVsZW1lbnQoKSB7XG4gICAgaWYgKCF0aGlzLnRpcCkge1xuICAgICAgdGhpcy50aXAgPSB0aGlzLl9jcmVhdGVUaXBFbGVtZW50KHRoaXMuX25ld0NvbnRlbnQgfHwgdGhpcy5fZ2V0Q29udGVudEZvclRlbXBsYXRlKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50aXA7XG4gIH1cbiAgX2NyZWF0ZVRpcEVsZW1lbnQoY29udGVudCkge1xuICAgIGNvbnN0IHRpcCA9IHRoaXMuX2dldFRlbXBsYXRlRmFjdG9yeShjb250ZW50KS50b0h0bWwoKTtcblxuICAgIC8vIFRPRE86IHJlbW92ZSB0aGlzIGNoZWNrIGluIHY2XG4gICAgaWYgKCF0aXApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB0aXAuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0ZBREUkMiwgQ0xBU1NfTkFNRV9TSE9XJDIpO1xuICAgIC8vIFRPRE86IHY2IHRoZSBmb2xsb3dpbmcgY2FuIGJlIGFjaGlldmVkIHdpdGggQ1NTIG9ubHlcbiAgICB0aXAuY2xhc3NMaXN0LmFkZChgYnMtJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9LWF1dG9gKTtcbiAgICBjb25zdCB0aXBJZCA9IGdldFVJRCh0aGlzLmNvbnN0cnVjdG9yLk5BTUUpLnRvU3RyaW5nKCk7XG4gICAgdGlwLnNldEF0dHJpYnV0ZSgnaWQnLCB0aXBJZCk7XG4gICAgaWYgKHRoaXMuX2lzQW5pbWF0ZWQoKSkge1xuICAgICAgdGlwLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9GQURFJDIpO1xuICAgIH1cbiAgICByZXR1cm4gdGlwO1xuICB9XG4gIHNldENvbnRlbnQoY29udGVudCkge1xuICAgIHRoaXMuX25ld0NvbnRlbnQgPSBjb250ZW50O1xuICAgIGlmICh0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKTtcbiAgICAgIHRoaXMuc2hvdygpO1xuICAgIH1cbiAgfVxuICBfZ2V0VGVtcGxhdGVGYWN0b3J5KGNvbnRlbnQpIHtcbiAgICBpZiAodGhpcy5fdGVtcGxhdGVGYWN0b3J5KSB7XG4gICAgICB0aGlzLl90ZW1wbGF0ZUZhY3RvcnkuY2hhbmdlQ29udGVudChjb250ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdGVtcGxhdGVGYWN0b3J5ID0gbmV3IFRlbXBsYXRlRmFjdG9yeSh7XG4gICAgICAgIC4uLnRoaXMuX2NvbmZpZyxcbiAgICAgICAgLy8gdGhlIGBjb250ZW50YCB2YXIgaGFzIHRvIGJlIGFmdGVyIGB0aGlzLl9jb25maWdgXG4gICAgICAgIC8vIHRvIG92ZXJyaWRlIGNvbmZpZy5jb250ZW50IGluIGNhc2Ugb2YgcG9wb3ZlclxuICAgICAgICBjb250ZW50LFxuICAgICAgICBleHRyYUNsYXNzOiB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbih0aGlzLl9jb25maWcuY3VzdG9tQ2xhc3MpXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlRmFjdG9yeTtcbiAgfVxuICBfZ2V0Q29udGVudEZvclRlbXBsYXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBbU0VMRUNUT1JfVE9PTFRJUF9JTk5FUl06IHRoaXMuX2dldFRpdGxlKClcbiAgICB9O1xuICB9XG4gIF9nZXRUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLnRpdGxlKSB8fCB0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy1vcmlnaW5hbC10aXRsZScpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfaW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0KGV2ZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuZ2V0T3JDcmVhdGVJbnN0YW5jZShldmVudC5kZWxlZ2F0ZVRhcmdldCwgdGhpcy5fZ2V0RGVsZWdhdGVDb25maWcoKSk7XG4gIH1cbiAgX2lzQW5pbWF0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5hbmltYXRpb24gfHwgdGhpcy50aXAgJiYgdGhpcy50aXAuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSQyKTtcbiAgfVxuICBfaXNTaG93bigpIHtcbiAgICByZXR1cm4gdGhpcy50aXAgJiYgdGhpcy50aXAuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVyQyKTtcbiAgfVxuICBfY3JlYXRlUG9wcGVyKHRpcCkge1xuICAgIGNvbnN0IHBsYWNlbWVudCA9IGV4ZWN1dGUodGhpcy5fY29uZmlnLnBsYWNlbWVudCwgW3RoaXMsIHRpcCwgdGhpcy5fZWxlbWVudF0pO1xuICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBBdHRhY2htZW50TWFwW3BsYWNlbWVudC50b1VwcGVyQ2FzZSgpXTtcbiAgICByZXR1cm4gUG9wcGVyLmNyZWF0ZVBvcHBlcih0aGlzLl9lbGVtZW50LCB0aXAsIHRoaXMuX2dldFBvcHBlckNvbmZpZyhhdHRhY2htZW50KSk7XG4gIH1cbiAgX2dldE9mZnNldCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBvZmZzZXRcbiAgICB9ID0gdGhpcy5fY29uZmlnO1xuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG9mZnNldC5zcGxpdCgnLCcpLm1hcCh2YWx1ZSA9PiBOdW1iZXIucGFyc2VJbnQodmFsdWUsIDEwKSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcG9wcGVyRGF0YSA9PiBvZmZzZXQocG9wcGVyRGF0YSwgdGhpcy5fZWxlbWVudCk7XG4gICAgfVxuICAgIHJldHVybiBvZmZzZXQ7XG4gIH1cbiAgX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBleGVjdXRlKGFyZywgW3RoaXMuX2VsZW1lbnRdKTtcbiAgfVxuICBfZ2V0UG9wcGVyQ29uZmlnKGF0dGFjaG1lbnQpIHtcbiAgICBjb25zdCBkZWZhdWx0QnNQb3BwZXJDb25maWcgPSB7XG4gICAgICBwbGFjZW1lbnQ6IGF0dGFjaG1lbnQsXG4gICAgICBtb2RpZmllcnM6IFt7XG4gICAgICAgIG5hbWU6ICdmbGlwJyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGZhbGxiYWNrUGxhY2VtZW50czogdGhpcy5fY29uZmlnLmZhbGxiYWNrUGxhY2VtZW50c1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgb2Zmc2V0OiB0aGlzLl9nZXRPZmZzZXQoKVxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgYm91bmRhcnk6IHRoaXMuX2NvbmZpZy5ib3VuZGFyeVxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICdhcnJvdycsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBlbGVtZW50OiBgLiR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfS1hcnJvd2BcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAncHJlU2V0UGxhY2VtZW50JyxcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgcGhhc2U6ICdiZWZvcmVNYWluJyxcbiAgICAgICAgZm46IGRhdGEgPT4ge1xuICAgICAgICAgIC8vIFByZS1zZXQgUG9wcGVyJ3MgcGxhY2VtZW50IGF0dHJpYnV0ZSBpbiBvcmRlciB0byByZWFkIHRoZSBhcnJvdyBzaXplcyBwcm9wZXJseS5cbiAgICAgICAgICAvLyBPdGhlcndpc2UsIFBvcHBlciBtaXhlcyB1cCB0aGUgd2lkdGggYW5kIGhlaWdodCBkaW1lbnNpb25zIHNpbmNlIHRoZSBpbml0aWFsIGFycm93IHN0eWxlIGlzIGZvciB0b3AgcGxhY2VtZW50XG4gICAgICAgICAgdGhpcy5fZ2V0VGlwRWxlbWVudCgpLnNldEF0dHJpYnV0ZSgnZGF0YS1wb3BwZXItcGxhY2VtZW50JywgZGF0YS5zdGF0ZS5wbGFjZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZmF1bHRCc1BvcHBlckNvbmZpZyxcbiAgICAgIC4uLmV4ZWN1dGUodGhpcy5fY29uZmlnLnBvcHBlckNvbmZpZywgW2RlZmF1bHRCc1BvcHBlckNvbmZpZ10pXG4gICAgfTtcbiAgfVxuICBfc2V0TGlzdGVuZXJzKCkge1xuICAgIGNvbnN0IHRyaWdnZXJzID0gdGhpcy5fY29uZmlnLnRyaWdnZXIuc3BsaXQoJyAnKTtcbiAgICBmb3IgKGNvbnN0IHRyaWdnZXIgb2YgdHJpZ2dlcnMpIHtcbiAgICAgIGlmICh0cmlnZ2VyID09PSAnY2xpY2snKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9DTElDSyQxKSwgdGhpcy5fY29uZmlnLnNlbGVjdG9yLCBldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudCk7XG4gICAgICAgICAgY29udGV4dC50b2dnbGUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHRyaWdnZXIgIT09IFRSSUdHRVJfTUFOVUFMKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50SW4gPSB0cmlnZ2VyID09PSBUUklHR0VSX0hPVkVSID8gdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfTU9VU0VFTlRFUikgOiB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9GT0NVU0lOJDEpO1xuICAgICAgICBjb25zdCBldmVudE91dCA9IHRyaWdnZXIgPT09IFRSSUdHRVJfSE9WRVIgPyB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9NT1VTRUxFQVZFKSA6IHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX0ZPQ1VTT1VUJDEpO1xuICAgICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgZXZlbnRJbiwgdGhpcy5fY29uZmlnLnNlbGVjdG9yLCBldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudCk7XG4gICAgICAgICAgY29udGV4dC5fYWN0aXZlVHJpZ2dlcltldmVudC50eXBlID09PSAnZm9jdXNpbicgPyBUUklHR0VSX0ZPQ1VTIDogVFJJR0dFUl9IT1ZFUl0gPSB0cnVlO1xuICAgICAgICAgIGNvbnRleHQuX2VudGVyKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgZXZlbnRPdXQsIHRoaXMuX2NvbmZpZy5zZWxlY3RvciwgZXZlbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLl9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQoZXZlbnQpO1xuICAgICAgICAgIGNvbnRleHQuX2FjdGl2ZVRyaWdnZXJbZXZlbnQudHlwZSA9PT0gJ2ZvY3Vzb3V0JyA/IFRSSUdHRVJfRk9DVVMgOiBUUklHR0VSX0hPVkVSXSA9IGNvbnRleHQuX2VsZW1lbnQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCk7XG4gICAgICAgICAgY29udGV4dC5fbGVhdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2hpZGVNb2RhbEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fZWxlbWVudCkge1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfTU9EQUwpLCBFVkVOVF9NT0RBTF9ISURFLCB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyKTtcbiAgfVxuICBfZml4VGl0bGUoKSB7XG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgndGl0bGUnKTtcbiAgICBpZiAoIXRpdGxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKSAmJiAhdGhpcy5fZWxlbWVudC50ZXh0Q29udGVudC50cmltKCkpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgdGl0bGUpO1xuICAgIH1cbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1icy1vcmlnaW5hbC10aXRsZScsIHRpdGxlKTsgLy8gRE8gTk9UIFVTRSBJVC4gSXMgb25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgndGl0bGUnKTtcbiAgfVxuICBfZW50ZXIoKSB7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24oKSB8fCB0aGlzLl9pc0hvdmVyZWQpIHtcbiAgICAgIHRoaXMuX2lzSG92ZXJlZCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2lzSG92ZXJlZCA9IHRydWU7XG4gICAgdGhpcy5fc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNIb3ZlcmVkKSB7XG4gICAgICAgIHRoaXMuc2hvdygpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuX2NvbmZpZy5kZWxheS5zaG93KTtcbiAgfVxuICBfbGVhdmUoKSB7XG4gICAgaWYgKHRoaXMuX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pc0hvdmVyZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5faXNIb3ZlcmVkKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuX2NvbmZpZy5kZWxheS5oaWRlKTtcbiAgfVxuICBfc2V0VGltZW91dChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGhhbmRsZXIsIHRpbWVvdXQpO1xuICB9XG4gIF9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2FjdGl2ZVRyaWdnZXIpLmluY2x1ZGVzKHRydWUpO1xuICB9XG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uc3QgZGF0YUF0dHJpYnV0ZXMgPSBNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlcyh0aGlzLl9lbGVtZW50KTtcbiAgICBmb3IgKGNvbnN0IGRhdGFBdHRyaWJ1dGUgb2YgT2JqZWN0LmtleXMoZGF0YUF0dHJpYnV0ZXMpKSB7XG4gICAgICBpZiAoRElTQUxMT1dFRF9BVFRSSUJVVEVTLmhhcyhkYXRhQXR0cmlidXRlKSkge1xuICAgICAgICBkZWxldGUgZGF0YUF0dHJpYnV0ZXNbZGF0YUF0dHJpYnV0ZV07XG4gICAgICB9XG4gICAgfVxuICAgIGNvbmZpZyA9IHtcbiAgICAgIC4uLmRhdGFBdHRyaWJ1dGVzLFxuICAgICAgLi4uKHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNvbmZpZyA6IHt9KVxuICAgIH07XG4gICAgY29uZmlnID0gdGhpcy5fbWVyZ2VDb25maWdPYmooY29uZmlnKTtcbiAgICBjb25maWcgPSB0aGlzLl9jb25maWdBZnRlck1lcmdlKGNvbmZpZyk7XG4gICAgdGhpcy5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZyk7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICBjb25maWcuY29udGFpbmVyID0gY29uZmlnLmNvbnRhaW5lciA9PT0gZmFsc2UgPyBkb2N1bWVudC5ib2R5IDogZ2V0RWxlbWVudChjb25maWcuY29udGFpbmVyKTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5kZWxheSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbmZpZy5kZWxheSA9IHtcbiAgICAgICAgc2hvdzogY29uZmlnLmRlbGF5LFxuICAgICAgICBoaWRlOiBjb25maWcuZGVsYXlcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29uZmlnLnRpdGxlID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLnRpdGxlID0gY29uZmlnLnRpdGxlLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29uZmlnLmNvbnRlbnQgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25maWcuY29udGVudCA9IGNvbmZpZy5jb250ZW50LnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX2dldERlbGVnYXRlQ29uZmlnKCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX2NvbmZpZykpIHtcbiAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRba2V5XSAhPT0gdmFsdWUpIHtcbiAgICAgICAgY29uZmlnW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uZmlnLnNlbGVjdG9yID0gZmFsc2U7XG4gICAgY29uZmlnLnRyaWdnZXIgPSAnbWFudWFsJztcblxuICAgIC8vIEluIHRoZSBmdXR1cmUgY2FuIGJlIHJlcGxhY2VkIHdpdGg6XG4gICAgLy8gY29uc3Qga2V5c1dpdGhEaWZmZXJlbnRWYWx1ZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLl9jb25maWcpLmZpbHRlcihlbnRyeSA9PiB0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRbZW50cnlbMF1dICE9PSB0aGlzLl9jb25maWdbZW50cnlbMF1dKVxuICAgIC8vIGBPYmplY3QuZnJvbUVudHJpZXMoa2V5c1dpdGhEaWZmZXJlbnRWYWx1ZXMpYFxuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX2Rpc3Bvc2VQb3BwZXIoKSB7XG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuX3BvcHBlciA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLnRpcCkge1xuICAgICAgdGhpcy50aXAucmVtb3ZlKCk7XG4gICAgICB0aGlzLnRpcCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gVG9vbHRpcC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihUb29sdGlwKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHBvcG92ZXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQzID0gJ3BvcG92ZXInO1xuY29uc3QgU0VMRUNUT1JfVElUTEUgPSAnLnBvcG92ZXItaGVhZGVyJztcbmNvbnN0IFNFTEVDVE9SX0NPTlRFTlQgPSAnLnBvcG92ZXItYm9keSc7XG5jb25zdCBEZWZhdWx0JDIgPSB7XG4gIC4uLlRvb2x0aXAuRGVmYXVsdCxcbiAgY29udGVudDogJycsXG4gIG9mZnNldDogWzAsIDhdLFxuICBwbGFjZW1lbnQ6ICdyaWdodCcsXG4gIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInBvcG92ZXJcIiByb2xlPVwidG9vbHRpcFwiPicgKyAnPGRpdiBjbGFzcz1cInBvcG92ZXItYXJyb3dcIj48L2Rpdj4nICsgJzxoMyBjbGFzcz1cInBvcG92ZXItaGVhZGVyXCI+PC9oMz4nICsgJzxkaXYgY2xhc3M9XCJwb3BvdmVyLWJvZHlcIj48L2Rpdj4nICsgJzwvZGl2PicsXG4gIHRyaWdnZXI6ICdjbGljaydcbn07XG5jb25zdCBEZWZhdWx0VHlwZSQyID0ge1xuICAuLi5Ub29sdGlwLkRlZmF1bHRUeXBlLFxuICBjb250ZW50OiAnKG51bGx8c3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb24pJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgUG9wb3ZlciBleHRlbmRzIFRvb2x0aXAge1xuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQyO1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDI7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDM7XG4gIH1cblxuICAvLyBPdmVycmlkZXNcbiAgX2lzV2l0aENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldFRpdGxlKCkgfHwgdGhpcy5fZ2V0Q29udGVudCgpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZ2V0Q29udGVudEZvclRlbXBsYXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBbU0VMRUNUT1JfVElUTEVdOiB0aGlzLl9nZXRUaXRsZSgpLFxuICAgICAgW1NFTEVDVE9SX0NPTlRFTlRdOiB0aGlzLl9nZXRDb250ZW50KClcbiAgICB9O1xuICB9XG4gIF9nZXRDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbih0aGlzLl9jb25maWcuY29udGVudCk7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBQb3BvdmVyLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFBvcG92ZXIpO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgc2Nyb2xsc3B5LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkMiA9ICdzY3JvbGxzcHknO1xuY29uc3QgREFUQV9LRVkkMiA9ICdicy5zY3JvbGxzcHknO1xuY29uc3QgRVZFTlRfS0VZJDIgPSBgLiR7REFUQV9LRVkkMn1gO1xuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSc7XG5jb25zdCBFVkVOVF9BQ1RJVkFURSA9IGBhY3RpdmF0ZSR7RVZFTlRfS0VZJDJ9YDtcbmNvbnN0IEVWRU5UX0NMSUNLID0gYGNsaWNrJHtFVkVOVF9LRVkkMn1gO1xuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSQxID0gYGxvYWQke0VWRU5UX0tFWSQyfSR7REFUQV9BUElfS0VZfWA7XG5jb25zdCBDTEFTU19OQU1FX0RST1BET1dOX0lURU0gPSAnZHJvcGRvd24taXRlbSc7XG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSQxID0gJ2FjdGl2ZSc7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1NQWSA9ICdbZGF0YS1icy1zcHk9XCJzY3JvbGxcIl0nO1xuY29uc3QgU0VMRUNUT1JfVEFSR0VUX0xJTktTID0gJ1tocmVmXSc7XG5jb25zdCBTRUxFQ1RPUl9OQVZfTElTVF9HUk9VUCA9ICcubmF2LCAubGlzdC1ncm91cCc7XG5jb25zdCBTRUxFQ1RPUl9OQVZfTElOS1MgPSAnLm5hdi1saW5rJztcbmNvbnN0IFNFTEVDVE9SX05BVl9JVEVNUyA9ICcubmF2LWl0ZW0nO1xuY29uc3QgU0VMRUNUT1JfTElTVF9JVEVNUyA9ICcubGlzdC1ncm91cC1pdGVtJztcbmNvbnN0IFNFTEVDVE9SX0xJTktfSVRFTVMgPSBgJHtTRUxFQ1RPUl9OQVZfTElOS1N9LCAke1NFTEVDVE9SX05BVl9JVEVNU30gPiAke1NFTEVDVE9SX05BVl9MSU5LU30sICR7U0VMRUNUT1JfTElTVF9JVEVNU31gO1xuY29uc3QgU0VMRUNUT1JfRFJPUERPV04gPSAnLmRyb3Bkb3duJztcbmNvbnN0IFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSQxID0gJy5kcm9wZG93bi10b2dnbGUnO1xuY29uc3QgRGVmYXVsdCQxID0ge1xuICBvZmZzZXQ6IG51bGwsXG4gIC8vIFRPRE86IHY2IEBkZXByZWNhdGVkLCBrZWVwIGl0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zXG4gIHJvb3RNYXJnaW46ICcwcHggMHB4IC0yNSUnLFxuICBzbW9vdGhTY3JvbGw6IGZhbHNlLFxuICB0YXJnZXQ6IG51bGwsXG4gIHRocmVzaG9sZDogWzAuMSwgMC41LCAxXVxufTtcbmNvbnN0IERlZmF1bHRUeXBlJDEgPSB7XG4gIG9mZnNldDogJyhudW1iZXJ8bnVsbCknLFxuICAvLyBUT0RPIHY2IEBkZXByZWNhdGVkLCBrZWVwIGl0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zXG4gIHJvb3RNYXJnaW46ICdzdHJpbmcnLFxuICBzbW9vdGhTY3JvbGw6ICdib29sZWFuJyxcbiAgdGFyZ2V0OiAnZWxlbWVudCcsXG4gIHRocmVzaG9sZDogJ2FycmF5J1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgU2Nyb2xsU3B5IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG5cbiAgICAvLyB0aGlzLl9lbGVtZW50IGlzIHRoZSBvYnNlcnZhYmxlc0NvbnRhaW5lciBhbmQgY29uZmlnLnRhcmdldCB0aGUgbWVudSBsaW5rcyB3cmFwcGVyXG4gICAgdGhpcy5fdGFyZ2V0TGlua3MgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX3Jvb3RFbGVtZW50ID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9lbGVtZW50KS5vdmVyZmxvd1kgPT09ICd2aXNpYmxlJyA/IG51bGwgOiB0aGlzLl9lbGVtZW50O1xuICAgIHRoaXMuX2FjdGl2ZVRhcmdldCA9IG51bGw7XG4gICAgdGhpcy5fb2JzZXJ2ZXIgPSBudWxsO1xuICAgIHRoaXMuX3ByZXZpb3VzU2Nyb2xsRGF0YSA9IHtcbiAgICAgIHZpc2libGVFbnRyeVRvcDogMCxcbiAgICAgIHBhcmVudFNjcm9sbFRvcDogMFxuICAgIH07XG4gICAgdGhpcy5yZWZyZXNoKCk7IC8vIGluaXRpYWxpemVcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDE7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkMTtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkMjtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICByZWZyZXNoKCkge1xuICAgIHRoaXMuX2luaXRpYWxpemVUYXJnZXRzQW5kT2JzZXJ2YWJsZXMoKTtcbiAgICB0aGlzLl9tYXliZUVuYWJsZVNtb290aFNjcm9sbCgpO1xuICAgIGlmICh0aGlzLl9vYnNlcnZlcikge1xuICAgICAgdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vYnNlcnZlciA9IHRoaXMuX2dldE5ld09ic2VydmVyKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiB0aGlzLl9vYnNlcnZhYmxlU2VjdGlvbnMudmFsdWVzKCkpIHtcbiAgICAgIHRoaXMuX29ic2VydmVyLm9ic2VydmUoc2VjdGlvbik7XG4gICAgfVxuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgLy8gVE9ETzogb24gdjYgdGFyZ2V0IHNob3VsZCBiZSBnaXZlbiBleHBsaWNpdGx5ICYgcmVtb3ZlIHRoZSB7dGFyZ2V0OiAnc3MtdGFyZ2V0J30gY2FzZVxuICAgIGNvbmZpZy50YXJnZXQgPSBnZXRFbGVtZW50KGNvbmZpZy50YXJnZXQpIHx8IGRvY3VtZW50LmJvZHk7XG5cbiAgICAvLyBUT0RPOiB2NiBPbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zLiBVc2Ugcm9vdE1hcmdpbiBvbmx5XG4gICAgY29uZmlnLnJvb3RNYXJnaW4gPSBjb25maWcub2Zmc2V0ID8gYCR7Y29uZmlnLm9mZnNldH1weCAwcHggLTMwJWAgOiBjb25maWcucm9vdE1hcmdpbjtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy50aHJlc2hvbGQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25maWcudGhyZXNob2xkID0gY29uZmlnLnRocmVzaG9sZC5zcGxpdCgnLCcpLm1hcCh2YWx1ZSA9PiBOdW1iZXIucGFyc2VGbG9hdCh2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9tYXliZUVuYWJsZVNtb290aFNjcm9sbCgpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5zbW9vdGhTY3JvbGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB1bnJlZ2lzdGVyIGFueSBwcmV2aW91cyBsaXN0ZW5lcnNcbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2NvbmZpZy50YXJnZXQsIEVWRU5UX0NMSUNLKTtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fY29uZmlnLnRhcmdldCwgRVZFTlRfQ0xJQ0ssIFNFTEVDVE9SX1RBUkdFVF9MSU5LUywgZXZlbnQgPT4ge1xuICAgICAgY29uc3Qgb2JzZXJ2YWJsZVNlY3Rpb24gPSB0aGlzLl9vYnNlcnZhYmxlU2VjdGlvbnMuZ2V0KGV2ZW50LnRhcmdldC5oYXNoKTtcbiAgICAgIGlmIChvYnNlcnZhYmxlU2VjdGlvbikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCByb290ID0gdGhpcy5fcm9vdEVsZW1lbnQgfHwgd2luZG93O1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBvYnNlcnZhYmxlU2VjdGlvbi5vZmZzZXRUb3AgLSB0aGlzLl9lbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgICAgaWYgKHJvb3Quc2Nyb2xsVG8pIHtcbiAgICAgICAgICByb290LnNjcm9sbFRvKHtcbiAgICAgICAgICAgIHRvcDogaGVpZ2h0LFxuICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hyb21lIDYwIGRvZXNuJ3Qgc3VwcG9ydCBgc2Nyb2xsVG9gXG4gICAgICAgIHJvb3Quc2Nyb2xsVG9wID0gaGVpZ2h0O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIF9nZXROZXdPYnNlcnZlcigpIHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcm9vdDogdGhpcy5fcm9vdEVsZW1lbnQsXG4gICAgICB0aHJlc2hvbGQ6IHRoaXMuX2NvbmZpZy50aHJlc2hvbGQsXG4gICAgICByb290TWFyZ2luOiB0aGlzLl9jb25maWcucm9vdE1hcmdpblxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihlbnRyaWVzID0+IHRoaXMuX29ic2VydmVyQ2FsbGJhY2soZW50cmllcyksIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gVGhlIGxvZ2ljIG9mIHNlbGVjdGlvblxuICBfb2JzZXJ2ZXJDYWxsYmFjayhlbnRyaWVzKSB7XG4gICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IGVudHJ5ID0+IHRoaXMuX3RhcmdldExpbmtzLmdldChgIyR7ZW50cnkudGFyZ2V0LmlkfWApO1xuICAgIGNvbnN0IGFjdGl2YXRlID0gZW50cnkgPT4ge1xuICAgICAgdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhLnZpc2libGVFbnRyeVRvcCA9IGVudHJ5LnRhcmdldC5vZmZzZXRUb3A7XG4gICAgICB0aGlzLl9wcm9jZXNzKHRhcmdldEVsZW1lbnQoZW50cnkpKTtcbiAgICB9O1xuICAgIGNvbnN0IHBhcmVudFNjcm9sbFRvcCA9ICh0aGlzLl9yb290RWxlbWVudCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLnNjcm9sbFRvcDtcbiAgICBjb25zdCB1c2VyU2Nyb2xsc0Rvd24gPSBwYXJlbnRTY3JvbGxUb3AgPj0gdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhLnBhcmVudFNjcm9sbFRvcDtcbiAgICB0aGlzLl9wcmV2aW91c1Njcm9sbERhdGEucGFyZW50U2Nyb2xsVG9wID0gcGFyZW50U2Nyb2xsVG9wO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgaWYgKCFlbnRyeS5pc0ludGVyc2VjdGluZykge1xuICAgICAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSBudWxsO1xuICAgICAgICB0aGlzLl9jbGVhckFjdGl2ZUNsYXNzKHRhcmdldEVsZW1lbnQoZW50cnkpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBlbnRyeUlzTG93ZXJUaGFuUHJldmlvdXMgPSBlbnRyeS50YXJnZXQub2Zmc2V0VG9wID49IHRoaXMuX3ByZXZpb3VzU2Nyb2xsRGF0YS52aXNpYmxlRW50cnlUb3A7XG4gICAgICAvLyBpZiB3ZSBhcmUgc2Nyb2xsaW5nIGRvd24sIHBpY2sgdGhlIGJpZ2dlciBvZmZzZXRUb3BcbiAgICAgIGlmICh1c2VyU2Nyb2xsc0Rvd24gJiYgZW50cnlJc0xvd2VyVGhhblByZXZpb3VzKSB7XG4gICAgICAgIGFjdGl2YXRlKGVudHJ5KTtcbiAgICAgICAgLy8gaWYgcGFyZW50IGlzbid0IHNjcm9sbGVkLCBsZXQncyBrZWVwIHRoZSBmaXJzdCB2aXNpYmxlIGl0ZW0sIGJyZWFraW5nIHRoZSBpdGVyYXRpb25cbiAgICAgICAgaWYgKCFwYXJlbnRTY3JvbGxUb3ApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHdlIGFyZSBzY3JvbGxpbmcgdXAsIHBpY2sgdGhlIHNtYWxsZXN0IG9mZnNldFRvcFxuICAgICAgaWYgKCF1c2VyU2Nyb2xsc0Rvd24gJiYgIWVudHJ5SXNMb3dlclRoYW5QcmV2aW91cykge1xuICAgICAgICBhY3RpdmF0ZShlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIF9pbml0aWFsaXplVGFyZ2V0c0FuZE9ic2VydmFibGVzKCkge1xuICAgIHRoaXMuX3RhcmdldExpbmtzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX29ic2VydmFibGVTZWN0aW9ucyA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCB0YXJnZXRMaW5rcyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfVEFSR0VUX0xJTktTLCB0aGlzLl9jb25maWcudGFyZ2V0KTtcbiAgICBmb3IgKGNvbnN0IGFuY2hvciBvZiB0YXJnZXRMaW5rcykge1xuICAgICAgLy8gZW5zdXJlIHRoYXQgdGhlIGFuY2hvciBoYXMgYW4gaWQgYW5kIGlzIG5vdCBkaXNhYmxlZFxuICAgICAgaWYgKCFhbmNob3IuaGFzaCB8fCBpc0Rpc2FibGVkKGFuY2hvcikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBvYnNlcnZhYmxlU2VjdGlvbiA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoZGVjb2RlVVJJKGFuY2hvci5oYXNoKSwgdGhpcy5fZWxlbWVudCk7XG5cbiAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBvYnNlcnZhYmxlU2VjdGlvbiBleGlzdHMgJiBpcyB2aXNpYmxlXG4gICAgICBpZiAoaXNWaXNpYmxlKG9ic2VydmFibGVTZWN0aW9uKSkge1xuICAgICAgICB0aGlzLl90YXJnZXRMaW5rcy5zZXQoZGVjb2RlVVJJKGFuY2hvci5oYXNoKSwgYW5jaG9yKTtcbiAgICAgICAgdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zLnNldChhbmNob3IuaGFzaCwgb2JzZXJ2YWJsZVNlY3Rpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBfcHJvY2Vzcyh0YXJnZXQpIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlVGFyZ2V0ID09PSB0YXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fY2xlYXJBY3RpdmVDbGFzcyh0aGlzLl9jb25maWcudGFyZ2V0KTtcbiAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSB0YXJnZXQ7XG4gICAgdGFyZ2V0LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUkMSk7XG4gICAgdGhpcy5fYWN0aXZhdGVQYXJlbnRzKHRhcmdldCk7XG4gICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfQUNUSVZBVEUsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRhcmdldFxuICAgIH0pO1xuICB9XG4gIF9hY3RpdmF0ZVBhcmVudHModGFyZ2V0KSB7XG4gICAgLy8gQWN0aXZhdGUgZHJvcGRvd24gcGFyZW50c1xuICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUERPV05fSVRFTSkpIHtcbiAgICAgIFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFJDEsIHRhcmdldC5jbG9zZXN0KFNFTEVDVE9SX0RST1BET1dOKSkuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSQxKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBsaXN0R3JvdXAgb2YgU2VsZWN0b3JFbmdpbmUucGFyZW50cyh0YXJnZXQsIFNFTEVDVE9SX05BVl9MSVNUX0dST1VQKSkge1xuICAgICAgLy8gU2V0IHRyaWdnZXJlZCBsaW5rcyBwYXJlbnRzIGFzIGFjdGl2ZVxuICAgICAgLy8gV2l0aCBib3RoIDx1bD4gYW5kIDxuYXY+IG1hcmt1cCBhIHBhcmVudCBpcyB0aGUgcHJldmlvdXMgc2libGluZyBvZiBhbnkgbmF2IGFuY2VzdG9yXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgU2VsZWN0b3JFbmdpbmUucHJldihsaXN0R3JvdXAsIFNFTEVDVE9SX0xJTktfSVRFTVMpKSB7XG4gICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSQxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgX2NsZWFyQWN0aXZlQ2xhc3MocGFyZW50KSB7XG4gICAgcGFyZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUkMSk7XG4gICAgY29uc3QgYWN0aXZlTm9kZXMgPSBTZWxlY3RvckVuZ2luZS5maW5kKGAke1NFTEVDVE9SX1RBUkdFVF9MSU5LU30uJHtDTEFTU19OQU1FX0FDVElWRSQxfWAsIHBhcmVudCk7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIGFjdGl2ZU5vZGVzKSB7XG4gICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUkMSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gU2Nyb2xsU3B5LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZGF0YVtjb25maWddID09PSB1bmRlZmluZWQgfHwgY29uZmlnLnN0YXJ0c1dpdGgoJ18nKSB8fCBjb25maWcgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9MT0FEX0RBVEFfQVBJJDEsICgpID0+IHtcbiAgZm9yIChjb25zdCBzcHkgb2YgU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1NQWSkpIHtcbiAgICBTY3JvbGxTcHkuZ2V0T3JDcmVhdGVJbnN0YW5jZShzcHkpO1xuICB9XG59KTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oU2Nyb2xsU3B5KTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHRhYi5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDEgPSAndGFiJztcbmNvbnN0IERBVEFfS0VZJDEgPSAnYnMudGFiJztcbmNvbnN0IEVWRU5UX0tFWSQxID0gYC4ke0RBVEFfS0VZJDF9YDtcbmNvbnN0IEVWRU5UX0hJREUkMSA9IGBoaWRlJHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgRVZFTlRfSElEREVOJDEgPSBgaGlkZGVuJHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgRVZFTlRfU0hPVyQxID0gYHNob3cke0VWRU5UX0tFWSQxfWA7XG5jb25zdCBFVkVOVF9TSE9XTiQxID0gYHNob3duJHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkgPSBgY2xpY2ske0VWRU5UX0tFWSQxfWA7XG5jb25zdCBFVkVOVF9LRVlET1dOID0gYGtleWRvd24ke0VWRU5UX0tFWSQxfWA7XG5jb25zdCBFVkVOVF9MT0FEX0RBVEFfQVBJID0gYGxvYWQke0VWRU5UX0tFWSQxfWA7XG5jb25zdCBBUlJPV19MRUZUX0tFWSA9ICdBcnJvd0xlZnQnO1xuY29uc3QgQVJST1dfUklHSFRfS0VZID0gJ0Fycm93UmlnaHQnO1xuY29uc3QgQVJST1dfVVBfS0VZID0gJ0Fycm93VXAnO1xuY29uc3QgQVJST1dfRE9XTl9LRVkgPSAnQXJyb3dEb3duJztcbmNvbnN0IEhPTUVfS0VZID0gJ0hvbWUnO1xuY29uc3QgRU5EX0tFWSA9ICdFbmQnO1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUgPSAnYWN0aXZlJztcbmNvbnN0IENMQVNTX05BTUVfRkFERSQxID0gJ2ZhZGUnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDEgPSAnc2hvdyc7XG5jb25zdCBDTEFTU19EUk9QRE9XTiA9ICdkcm9wZG93bic7XG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUgPSAnLmRyb3Bkb3duLXRvZ2dsZSc7XG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTl9NRU5VID0gJy5kcm9wZG93bi1tZW51JztcbmNvbnN0IE5PVF9TRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUgPSBgOm5vdCgke1NFTEVDVE9SX0RST1BET1dOX1RPR0dMRX0pYDtcbmNvbnN0IFNFTEVDVE9SX1RBQl9QQU5FTCA9ICcubGlzdC1ncm91cCwgLm5hdiwgW3JvbGU9XCJ0YWJsaXN0XCJdJztcbmNvbnN0IFNFTEVDVE9SX09VVEVSID0gJy5uYXYtaXRlbSwgLmxpc3QtZ3JvdXAtaXRlbSc7XG5jb25zdCBTRUxFQ1RPUl9JTk5FUiA9IGAubmF2LWxpbmske05PVF9TRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEV9LCAubGlzdC1ncm91cC1pdGVtJHtOT1RfU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFfSwgW3JvbGU9XCJ0YWJcIl0ke05PVF9TRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEV9YDtcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFID0gJ1tkYXRhLWJzLXRvZ2dsZT1cInRhYlwiXSwgW2RhdGEtYnMtdG9nZ2xlPVwicGlsbFwiXSwgW2RhdGEtYnMtdG9nZ2xlPVwibGlzdFwiXSc7IC8vIFRPRE86IGNvdWxkIG9ubHkgYmUgYHRhYmAgaW4gdjZcbmNvbnN0IFNFTEVDVE9SX0lOTkVSX0VMRU0gPSBgJHtTRUxFQ1RPUl9JTk5FUn0sICR7U0VMRUNUT1JfREFUQV9UT0dHTEV9YDtcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFX0FDVElWRSA9IGAuJHtDTEFTU19OQU1FX0FDVElWRX1bZGF0YS1icy10b2dnbGU9XCJ0YWJcIl0sIC4ke0NMQVNTX05BTUVfQUNUSVZFfVtkYXRhLWJzLXRvZ2dsZT1cInBpbGxcIl0sIC4ke0NMQVNTX05BTUVfQUNUSVZFfVtkYXRhLWJzLXRvZ2dsZT1cImxpc3RcIl1gO1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBUYWIgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCkge1xuICAgIHN1cGVyKGVsZW1lbnQpO1xuICAgIHRoaXMuX3BhcmVudCA9IHRoaXMuX2VsZW1lbnQuY2xvc2VzdChTRUxFQ1RPUl9UQUJfUEFORUwpO1xuICAgIGlmICghdGhpcy5fcGFyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgICAvLyBUT0RPOiBzaG91bGQgdGhyb3cgZXhjZXB0aW9uIGluIHY2XG4gICAgICAvLyB0aHJvdyBuZXcgVHlwZUVycm9yKGAke2VsZW1lbnQub3V0ZXJIVE1MfSBoYXMgbm90IGEgdmFsaWQgcGFyZW50ICR7U0VMRUNUT1JfSU5ORVJfRUxFTX1gKVxuICAgIH1cblxuICAgIC8vIFNldCB1cCBpbml0aWFsIGFyaWEgYXR0cmlidXRlc1xuICAgIHRoaXMuX3NldEluaXRpYWxBdHRyaWJ1dGVzKHRoaXMuX3BhcmVudCwgdGhpcy5fZ2V0Q2hpbGRyZW4oKSk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWURPV04sIGV2ZW50ID0+IHRoaXMuX2tleWRvd24oZXZlbnQpKTtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDE7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgc2hvdygpIHtcbiAgICAvLyBTaG93cyB0aGlzIGVsZW0gYW5kIGRlYWN0aXZhdGUgdGhlIGFjdGl2ZSBzaWJsaW5nIGlmIGV4aXN0c1xuICAgIGNvbnN0IGlubmVyRWxlbSA9IHRoaXMuX2VsZW1lbnQ7XG4gICAgaWYgKHRoaXMuX2VsZW1Jc0FjdGl2ZShpbm5lckVsZW0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2VhcmNoIGZvciBhY3RpdmUgdGFiIG9uIHNhbWUgcGFyZW50IHRvIGRlYWN0aXZhdGUgaXRcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLl9nZXRBY3RpdmVFbGVtKCk7XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gYWN0aXZlID8gRXZlbnRIYW5kbGVyLnRyaWdnZXIoYWN0aXZlLCBFVkVOVF9ISURFJDEsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IGlubmVyRWxlbVxuICAgIH0pIDogbnVsbDtcbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcihpbm5lckVsZW0sIEVWRU5UX1NIT1ckMSwge1xuICAgICAgcmVsYXRlZFRhcmdldDogYWN0aXZlXG4gICAgfSk7XG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkIHx8IGhpZGVFdmVudCAmJiBoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9kZWFjdGl2YXRlKGFjdGl2ZSwgaW5uZXJFbGVtKTtcbiAgICB0aGlzLl9hY3RpdmF0ZShpbm5lckVsZW0sIGFjdGl2ZSk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9hY3RpdmF0ZShlbGVtZW50LCByZWxhdGVkRWxlbSkge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpO1xuICAgIHRoaXMuX2FjdGl2YXRlKFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudCkpOyAvLyBTZWFyY2ggYW5kIGFjdGl2YXRlL3Nob3cgdGhlIHByb3BlciBzZWN0aW9uXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZSgncm9sZScpICE9PSAndGFiJykge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XJDEpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgdHJ1ZSk7XG4gICAgICB0aGlzLl90b2dnbGVEcm9wRG93bihlbGVtZW50LCB0cnVlKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKGVsZW1lbnQsIEVWRU5UX1NIT1dOJDEsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogcmVsYXRlZEVsZW1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgZWxlbWVudCwgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFJDEpKTtcbiAgfVxuICBfZGVhY3RpdmF0ZShlbGVtZW50LCByZWxhdGVkRWxlbSkge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUpO1xuICAgIGVsZW1lbnQuYmx1cigpO1xuICAgIHRoaXMuX2RlYWN0aXZhdGUoU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3RvcihlbGVtZW50KSk7IC8vIFNlYXJjaCBhbmQgZGVhY3RpdmF0ZSB0aGUgc2hvd24gc2VjdGlvbiB0b29cblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdyb2xlJykgIT09ICd0YWInKSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckMSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgZmFsc2UpO1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJyk7XG4gICAgICB0aGlzLl90b2dnbGVEcm9wRG93bihlbGVtZW50LCBmYWxzZSk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcihlbGVtZW50LCBFVkVOVF9ISURERU4kMSwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiByZWxhdGVkRWxlbVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCBlbGVtZW50LCBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUkMSkpO1xuICB9XG4gIF9rZXlkb3duKGV2ZW50KSB7XG4gICAgaWYgKCFbQVJST1dfTEVGVF9LRVksIEFSUk9XX1JJR0hUX0tFWSwgQVJST1dfVVBfS0VZLCBBUlJPV19ET1dOX0tFWSwgSE9NRV9LRVksIEVORF9LRVldLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IC8vIHN0b3BQcm9wYWdhdGlvbi9wcmV2ZW50RGVmYXVsdCBib3RoIGFkZGVkIHRvIHN1cHBvcnQgdXAvZG93biBrZXlzIHdpdGhvdXQgc2Nyb2xsaW5nIHRoZSBwYWdlXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuX2dldENoaWxkcmVuKCkuZmlsdGVyKGVsZW1lbnQgPT4gIWlzRGlzYWJsZWQoZWxlbWVudCkpO1xuICAgIGxldCBuZXh0QWN0aXZlRWxlbWVudDtcbiAgICBpZiAoW0hPTUVfS0VZLCBFTkRfS0VZXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICBuZXh0QWN0aXZlRWxlbWVudCA9IGNoaWxkcmVuW2V2ZW50LmtleSA9PT0gSE9NRV9LRVkgPyAwIDogY2hpbGRyZW4ubGVuZ3RoIC0gMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGlzTmV4dCA9IFtBUlJPV19SSUdIVF9LRVksIEFSUk9XX0RPV05fS0VZXS5pbmNsdWRlcyhldmVudC5rZXkpO1xuICAgICAgbmV4dEFjdGl2ZUVsZW1lbnQgPSBnZXROZXh0QWN0aXZlRWxlbWVudChjaGlsZHJlbiwgZXZlbnQudGFyZ2V0LCBpc05leHQsIHRydWUpO1xuICAgIH1cbiAgICBpZiAobmV4dEFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIG5leHRBY3RpdmVFbGVtZW50LmZvY3VzKHtcbiAgICAgICAgcHJldmVudFNjcm9sbDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBUYWIuZ2V0T3JDcmVhdGVJbnN0YW5jZShuZXh0QWN0aXZlRWxlbWVudCkuc2hvdygpO1xuICAgIH1cbiAgfVxuICBfZ2V0Q2hpbGRyZW4oKSB7XG4gICAgLy8gY29sbGVjdGlvbiBvZiBpbm5lciBlbGVtZW50c1xuICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0lOTkVSX0VMRU0sIHRoaXMuX3BhcmVudCk7XG4gIH1cbiAgX2dldEFjdGl2ZUVsZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldENoaWxkcmVuKCkuZmluZChjaGlsZCA9PiB0aGlzLl9lbGVtSXNBY3RpdmUoY2hpbGQpKSB8fCBudWxsO1xuICB9XG4gIF9zZXRJbml0aWFsQXR0cmlidXRlcyhwYXJlbnQsIGNoaWxkcmVuKSB7XG4gICAgdGhpcy5fc2V0QXR0cmlidXRlSWZOb3RFeGlzdHMocGFyZW50LCAncm9sZScsICd0YWJsaXN0Jyk7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgdGhpcy5fc2V0SW5pdGlhbEF0dHJpYnV0ZXNPbkNoaWxkKGNoaWxkKTtcbiAgICB9XG4gIH1cbiAgX3NldEluaXRpYWxBdHRyaWJ1dGVzT25DaGlsZChjaGlsZCkge1xuICAgIGNoaWxkID0gdGhpcy5fZ2V0SW5uZXJFbGVtZW50KGNoaWxkKTtcbiAgICBjb25zdCBpc0FjdGl2ZSA9IHRoaXMuX2VsZW1Jc0FjdGl2ZShjaGlsZCk7XG4gICAgY29uc3Qgb3V0ZXJFbGVtID0gdGhpcy5fZ2V0T3V0ZXJFbGVtZW50KGNoaWxkKTtcbiAgICBjaGlsZC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCBpc0FjdGl2ZSk7XG4gICAgaWYgKG91dGVyRWxlbSAhPT0gY2hpbGQpIHtcbiAgICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKG91dGVyRWxlbSwgJ3JvbGUnLCAncHJlc2VudGF0aW9uJyk7XG4gICAgfVxuICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTtcbiAgICB9XG4gICAgdGhpcy5fc2V0QXR0cmlidXRlSWZOb3RFeGlzdHMoY2hpbGQsICdyb2xlJywgJ3RhYicpO1xuXG4gICAgLy8gc2V0IGF0dHJpYnV0ZXMgdG8gdGhlIHJlbGF0ZWQgcGFuZWwgdG9vXG4gICAgdGhpcy5fc2V0SW5pdGlhbEF0dHJpYnV0ZXNPblRhcmdldFBhbmVsKGNoaWxkKTtcbiAgfVxuICBfc2V0SW5pdGlhbEF0dHJpYnV0ZXNPblRhcmdldFBhbmVsKGNoaWxkKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3RvcihjaGlsZCk7XG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fc2V0QXR0cmlidXRlSWZOb3RFeGlzdHModGFyZ2V0LCAncm9sZScsICd0YWJwYW5lbCcpO1xuICAgIGlmIChjaGlsZC5pZCkge1xuICAgICAgdGhpcy5fc2V0QXR0cmlidXRlSWZOb3RFeGlzdHModGFyZ2V0LCAnYXJpYS1sYWJlbGxlZGJ5JywgYCR7Y2hpbGQuaWR9YCk7XG4gICAgfVxuICB9XG4gIF90b2dnbGVEcm9wRG93bihlbGVtZW50LCBvcGVuKSB7XG4gICAgY29uc3Qgb3V0ZXJFbGVtID0gdGhpcy5fZ2V0T3V0ZXJFbGVtZW50KGVsZW1lbnQpO1xuICAgIGlmICghb3V0ZXJFbGVtLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19EUk9QRE9XTikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdG9nZ2xlID0gKHNlbGVjdG9yLCBjbGFzc05hbWUpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKHNlbGVjdG9yLCBvdXRlckVsZW0pO1xuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKGNsYXNzTmFtZSwgb3Blbik7XG4gICAgICB9XG4gICAgfTtcbiAgICB0b2dnbGUoU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFLCBDTEFTU19OQU1FX0FDVElWRSk7XG4gICAgdG9nZ2xlKFNFTEVDVE9SX0RST1BET1dOX01FTlUsIENMQVNTX05BTUVfU0hPVyQxKTtcbiAgICBvdXRlckVsZW0uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgb3Blbik7XG4gIH1cbiAgX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKGVsZW1lbnQsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgICBpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZSkpIHtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICBfZWxlbUlzQWN0aXZlKGVsZW0pIHtcbiAgICByZXR1cm4gZWxlbS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9BQ1RJVkUpO1xuICB9XG5cbiAgLy8gVHJ5IHRvIGdldCB0aGUgaW5uZXIgZWxlbWVudCAodXN1YWxseSB0aGUgLm5hdi1saW5rKVxuICBfZ2V0SW5uZXJFbGVtZW50KGVsZW0pIHtcbiAgICByZXR1cm4gZWxlbS5tYXRjaGVzKFNFTEVDVE9SX0lOTkVSX0VMRU0pID8gZWxlbSA6IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfSU5ORVJfRUxFTSwgZWxlbSk7XG4gIH1cblxuICAvLyBUcnkgdG8gZ2V0IHRoZSBvdXRlciBlbGVtZW50ICh1c3VhbGx5IHRoZSAubmF2LWl0ZW0pXG4gIF9nZXRPdXRlckVsZW1lbnQoZWxlbSkge1xuICAgIHJldHVybiBlbGVtLmNsb3Nlc3QoU0VMRUNUT1JfT1VURVIpIHx8IGVsZW07XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBUYWIuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZGF0YVtjb25maWddID09PSB1bmRlZmluZWQgfHwgY29uZmlnLnN0YXJ0c1dpdGgoJ18nKSB8fCBjb25maWcgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG4gIGlmIChpc0Rpc2FibGVkKHRoaXMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIFRhYi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpLnNob3coKTtcbn0pO1xuXG4vKipcbiAqIEluaXRpYWxpemUgb24gZm9jdXNcbiAqL1xuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSwgKCkgPT4ge1xuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1RPR0dMRV9BQ1RJVkUpKSB7XG4gICAgVGFiLmdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCk7XG4gIH1cbn0pO1xuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oVGFiKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHRvYXN0LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUgPSAndG9hc3QnO1xuY29uc3QgREFUQV9LRVkgPSAnYnMudG9hc3QnO1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWA7XG5jb25zdCBFVkVOVF9NT1VTRU9WRVIgPSBgbW91c2VvdmVyJHtFVkVOVF9LRVl9YDtcbmNvbnN0IEVWRU5UX01PVVNFT1VUID0gYG1vdXNlb3V0JHtFVkVOVF9LRVl9YDtcbmNvbnN0IEVWRU5UX0ZPQ1VTSU4gPSBgZm9jdXNpbiR7RVZFTlRfS0VZfWA7XG5jb25zdCBFVkVOVF9GT0NVU09VVCA9IGBmb2N1c291dCR7RVZFTlRfS0VZfWA7XG5jb25zdCBFVkVOVF9ISURFID0gYGhpZGUke0VWRU5UX0tFWX1gO1xuY29uc3QgRVZFTlRfSElEREVOID0gYGhpZGRlbiR7RVZFTlRfS0VZfWA7XG5jb25zdCBFVkVOVF9TSE9XID0gYHNob3cke0VWRU5UX0tFWX1gO1xuY29uc3QgRVZFTlRfU0hPV04gPSBgc2hvd24ke0VWRU5UX0tFWX1gO1xuY29uc3QgQ0xBU1NfTkFNRV9GQURFID0gJ2ZhZGUnO1xuY29uc3QgQ0xBU1NfTkFNRV9ISURFID0gJ2hpZGUnOyAvLyBAZGVwcmVjYXRlZCAtIGtlcHQgaGVyZSBvbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XSU5HID0gJ3Nob3dpbmcnO1xuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGFuaW1hdGlvbjogJ2Jvb2xlYW4nLFxuICBhdXRvaGlkZTogJ2Jvb2xlYW4nLFxuICBkZWxheTogJ251bWJlcidcbn07XG5jb25zdCBEZWZhdWx0ID0ge1xuICBhbmltYXRpb246IHRydWUsXG4gIGF1dG9oaWRlOiB0cnVlLFxuICBkZWxheTogNTAwMFxufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgVG9hc3QgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKTtcbiAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLl9oYXNNb3VzZUludGVyYWN0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5faGFzS2V5Ym9hcmRJbnRlcmFjdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuX3NldExpc3RlbmVycygpO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQ7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGU7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHNob3coKSB7XG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVyk7XG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2NsZWFyVGltZW91dCgpO1xuICAgIGlmICh0aGlzLl9jb25maWcuYW5pbWF0aW9uKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9GQURFKTtcbiAgICB9XG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XSU5HKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOKTtcbiAgICAgIHRoaXMuX21heWJlU2NoZWR1bGVIaWRlKCk7XG4gICAgfTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9ISURFKTsgLy8gQGRlcHJlY2F0ZWRcbiAgICByZWZsb3codGhpcy5fZWxlbWVudCk7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVywgQ0xBU1NfTkFNRV9TSE9XSU5HKTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLl9lbGVtZW50LCB0aGlzLl9jb25maWcuYW5pbWF0aW9uKTtcbiAgfVxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5pc1Nob3duKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSk7XG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfSElERSk7IC8vIEBkZXByZWNhdGVkXG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XSU5HLCBDTEFTU19OQU1FX1NIT1cpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOKTtcbiAgICB9O1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1dJTkcpO1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRoaXMuX2NvbmZpZy5hbmltYXRpb24pO1xuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5fY2xlYXJUaW1lb3V0KCk7XG4gICAgaWYgKHRoaXMuaXNTaG93bigpKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKTtcbiAgICB9XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICB9XG4gIGlzU2hvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVyk7XG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX21heWJlU2NoZWR1bGVIaWRlKCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnLmF1dG9oaWRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9oYXNNb3VzZUludGVyYWN0aW9uIHx8IHRoaXMuX2hhc0tleWJvYXJkSW50ZXJhY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfSwgdGhpcy5fY29uZmlnLmRlbGF5KTtcbiAgfVxuICBfb25JbnRlcmFjdGlvbihldmVudCwgaXNJbnRlcmFjdGluZykge1xuICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgY2FzZSAnbW91c2VvdmVyJzpcbiAgICAgIGNhc2UgJ21vdXNlb3V0JzpcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMuX2hhc01vdXNlSW50ZXJhY3Rpb24gPSBpc0ludGVyYWN0aW5nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICBjYXNlICdmb2N1c2luJzpcbiAgICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMuX2hhc0tleWJvYXJkSW50ZXJhY3Rpb24gPSBpc0ludGVyYWN0aW5nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc0ludGVyYWN0aW5nKSB7XG4gICAgICB0aGlzLl9jbGVhclRpbWVvdXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV4dEVsZW1lbnQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgIGlmICh0aGlzLl9lbGVtZW50ID09PSBuZXh0RWxlbWVudCB8fCB0aGlzLl9lbGVtZW50LmNvbnRhaW5zKG5leHRFbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9tYXliZVNjaGVkdWxlSGlkZSgpO1xuICB9XG4gIF9zZXRMaXN0ZW5lcnMoKSB7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFT1ZFUiwgZXZlbnQgPT4gdGhpcy5fb25JbnRlcmFjdGlvbihldmVudCwgdHJ1ZSkpO1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRU9VVCwgZXZlbnQgPT4gdGhpcy5fb25JbnRlcmFjdGlvbihldmVudCwgZmFsc2UpKTtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfRk9DVVNJTiwgZXZlbnQgPT4gdGhpcy5fb25JbnRlcmFjdGlvbihldmVudCwgdHJ1ZSkpO1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9GT0NVU09VVCwgZXZlbnQgPT4gdGhpcy5fb25JbnRlcmFjdGlvbihldmVudCwgZmFsc2UpKTtcbiAgfVxuICBfY2xlYXJUaW1lb3V0KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFRvYXN0LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbY29uZmlnXSh0aGlzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuZW5hYmxlRGlzbWlzc1RyaWdnZXIoVG9hc3QpO1xuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihUb2FzdCk7XG5cbmV4cG9ydCB7IEFsZXJ0LCBCdXR0b24sIENhcm91c2VsLCBDb2xsYXBzZSwgRHJvcGRvd24sIE1vZGFsLCBPZmZjYW52YXMsIFBvcG92ZXIsIFNjcm9sbFNweSwgVGFiLCBUb2FzdCwgVG9vbHRpcCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Ym9vdHN0cmFwLmVzbS5qcy5tYXBcbiIsImltcG9ydCB7XHJcbiAgSUFjdGlvbixcclxuICBJQWN0aW9uUmVzdWx0LFxyXG4gIElBY3Rpb25Ob2RlLFxyXG4gIElBY3Rpb25Qcm9wZXJ0eSxcclxuICBJQ29udGV4dCxcclxuICBJRmllbGQsXHJcbn0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcblxyXG5pbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgdHlwZSB7IFJlY29yZH0gZnJvbSBcIkBraW50b25lL3Jlc3QtYXBpLWNsaWVudC9saWIvc3JjL2NsaWVudC90eXBlc1wiO1xyXG5pbXBvcnQgeyBLaW50b25lUmVzdEFQSUNsaWVudH0gZnJvbSBcIkBraW50b25lL3Jlc3QtYXBpLWNsaWVudFwiO1xyXG5pbXBvcnQgXCIuL2F1dG8tbG9va3VwLnNjc3NcIjtcclxuaW1wb3J0IFwiYm9vdHN0cmFwL2pzL2Rpc3QvbW9kYWxcIjtcclxuLy8gaW1wb3J0IFwiYm9vdHN0cmFwL2pzL2Rpc3Qvc3Bpbm5lclwiO1xyXG5pbXBvcnQge01vZGFsfSBmcm9tIFwiYm9vdHN0cmFwXCJcclxuaW1wb3J0ICQgZnJvbSBcImpxdWVyeVwiO1xyXG5cclxuaW50ZXJmYWNlIFByb3BzIHtcclxuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xyXG4gIGxvb2t1cEZpZWxkOiBMb29rdXBGaWVsZDtcclxuICBjb25kaXRpb246IENvbmRpdGlvbjtcclxufVxyXG5cclxuaW50ZXJmYWNlIENvbmRpdGlvbiB7XHJcbiAgcXVlcnlTdHJpbmc6IHN0cmluZztcclxuICBpbmRleDogbnVtYmVyO1xyXG4gIHR5cGU6IHN0cmluZztcclxuICBjaGlsZHJlbjogQ2hpbGRbXTtcclxuICBwYXJlbnQ6IG51bGw7XHJcbiAgbG9naWNhbE9wZXJhdG9yOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBDaGlsZCB7XHJcbiAgaW5kZXg6IG51bWJlcjtcclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgcGFyZW50OiBzdHJpbmc7XHJcbiAgb2JqZWN0OiBhbnk7XHJcbiAgb3BlcmF0b3I6IHN0cmluZztcclxuICB2YWx1ZTogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgTG9va3VwRmllbGQge1xyXG4gIGFwcDogQXBwO1xyXG4gIGZpZWxkczogRmllbGRbXTtcclxufVxyXG5cclxuaW50ZXJmYWNlIEZpZWxkIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdHlwZTogc3RyaW5nO1xyXG4gIGNvZGU6IHN0cmluZztcclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIG5vTGFiZWw6IGJvb2xlYW47XHJcbiAgcmVxdWlyZWQ6IGJvb2xlYW47XHJcbiAgbG9va3VwOiBMb29rdXA7XHJcbn0gXHJcblxyXG5pbnRlcmZhY2UgTG9va3VwIHtcclxuICByZWxhdGVkQXBwOiBSZWxhdGVkQXBwO1xyXG4gIHJlbGF0ZWRLZXlGaWVsZDogc3RyaW5nO1xyXG4gIGZpZWxkTWFwcGluZ3M6IEZpZWxkTWFwcGluZ1tdO1xyXG4gIGxvb2t1cFBpY2tlckZpZWxkczogYW55W107XHJcbiAgZmlsdGVyQ29uZDogc3RyaW5nO1xyXG4gIHNvcnQ6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIEZpZWxkTWFwcGluZyB7XHJcbiAgZmllbGQ6IHN0cmluZztcclxuICByZWxhdGVkRmllbGQ6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIFJlbGF0ZWRBcHAge1xyXG4gIGFwcDogc3RyaW5nO1xyXG4gIGNvZGU6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIEFwcCB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICBjcmVhdGVkYXRlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBdXRvTG9va1VwQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbiB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICBwcm9wczogUHJvcHM7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLm5hbWUgPSBcIuODq+ODg+OCr+OCouODg+ODl+abtOaWsFwiO1xyXG4gICAgdGhpcy5hY3Rpb25Qcm9wcyA9IFtdO1xyXG4gICAgdGhpcy5wcm9wcyA9IHt9IGFzIFByb3BzO1xyXG4gICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gIH1cclxuXHJcbiAgLyoqKlxyXG4gICAqIOOCouOCr+OCu+OCueOBruODoeOCpOODs+OBruWHpueQhumWouaVsFxyXG4gICAqL1xyXG4gIGFzeW5jIHByb2Nlc3MoXHJcbiAgICBwcm9wOiBJQWN0aW9uTm9kZSxcclxuICAgIGV2ZW50OiBhbnksXHJcbiAgICBjb250ZXh0OiBJQ29udGV4dFxyXG4gICk6IFByb21pc2U8SUFjdGlvblJlc3VsdD4ge1xyXG4gICAgdGhpcy5hY3Rpb25Qcm9wcyA9IHByb3AuYWN0aW9uUHJvcHM7XHJcbiAgICB0aGlzLnByb3BzID0ge1xyXG4gICAgICAuLi5wcm9wLkFjdGlvblZhbHVlLFxyXG4gICAgICBjb25kaXRpb246IEpTT04ucGFyc2UoKHByb3AuQWN0aW9uVmFsdWUgYXMgYW55KS5jb25kaXRpb24pLFxyXG4gICAgfSBhcyBQcm9wcztcclxuICAgIC8vIGNvbnNvbGUubG9nKGNvbnRleHQpO1xyXG5cclxuICAgIGxldCByZXN1bHQgPSB7XHJcbiAgICAgIGNhbk5leHQ6IHRydWUsXHJcbiAgICAgIHJlc3VsdDogXCJcIixcclxuICAgIH0gYXMgSUFjdGlvblJlc3VsdDtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGxvb2tVcEZpZWxkcyA9IHRoaXMucHJvcHMubG9va3VwRmllbGQuZmllbGRzLmZpbHRlcihcclxuICAgICAgICAoZikgPT4gZi5sb29rdXAgJiYgZi5sb29rdXAucmVsYXRlZEFwcC5hcHAgPT09IFN0cmluZyhraW50b25lLmFwcC5nZXRJZCgpKVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoIWxvb2tVcEZpZWxkcyB8fCBsb29rVXBGaWVsZHMubGVuZ3RoPT09MCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIGDjg6vjg4Pjgq/jgqLjg4Pjg5fjga7oqK3lrprjga/kuI3mraPjgafjgZnjgIIke3RoaXMucHJvcHMubG9va3VwRmllbGQuZmllbGRzWzBdLmxhYmVsfSBgXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBsb29rVXBGaWVsZCA9IHRoaXMucHJvcHMubG9va3VwRmllbGQuZmllbGRzWzBdOyBcclxuICAgICAgY29uc3Qga2V5ID0gZXZlbnQucmVjb3JkW2xvb2tVcEZpZWxkLmxvb2t1cC5yZWxhdGVkS2V5RmllbGRdLnZhbHVlO1xyXG4gICAgICBjb25zdCB0YXJnZXRSZWNvcmRzID0gYXdhaXQgdGhpcy5nZXRVcGRhdGVSZWNvcmRzKGxvb2tVcEZpZWxkLCBrZXkpO1xyXG4gICAgICAvL+abtOaWsOWvvuixoeOBjOOBquOBhOaZguOBq+OCueOCreODg+ODl1xyXG4gICAgICBpZih0YXJnZXRSZWNvcmRzLmxlbmd0aD09PTApe1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdXBkYXRlUmVjb3JkcyA9IHRoaXMuY29udmVydEZvckxvb2t1cCh0YXJnZXRSZWNvcmRzLGxvb2tVcEZpZWxkLGtleSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwidXBkYXRlUmVjb3Jkc1wiLCB1cGRhdGVSZWNvcmRzKTtcclxuICAgICAgdGhpcy5zaG93U3Bpbm5lck1vZGVsKHRoaXMucHJvcHMubG9va3VwRmllbGQuYXBwKTtcclxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVMb29rdXBUYXJnZXQodXBkYXRlUmVjb3Jkcyk7XHJcbiAgICAgIHRoaXMuc2hvd1Jlc3VsdCh0aGlzLnByb3BzLmxvb2t1cEZpZWxkLmFwcCx1cGRhdGVSZWNvcmRzLmxlbmd0aCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCLjg6vjg4Pjgq/jgqLjg4Pjg5fmm7TmlrDkuK3kvovlpJbjgYznmbrnlJ/jgZfjgb7jgZfjgZ/jgIJcIiwgZXJyb3IpO1xyXG4gICAgICAgIGlmKGVycm9yIGluc3RhbmNlb2YgRXJyb3Ipe1xyXG4gICAgICAgICAgZXZlbnQuZXJyb3IgPSBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgZXZlbnQuZXJyb3IgPSBcIuODq+ODg+OCr+OCouODg+ODl+abtOaWsOS4reS+i+WkluOBjOeZuueUn+OBl+OBvuOBl+OBn+OAglwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQuY2FuTmV4dCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coXCJhdXRvTG9va3VwUHJvcHNcIiwgdGhpcy5wcm9wcyk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUkVTVCBBUEnnlKjjgq/jgqjjg6rkvZzmiJBcclxuICAgKiBUT0RPOuWFsemAmumWouaVsOOBqOOBl+OBpuS9nOaIkFxyXG4gICAqIEBwYXJhbSBsb29rVXBGaWVsZCBcclxuICAgKiBAcGFyYW0ga2V5IFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIG1ha2VRdWVyeT0obG9va1VwRmllbGQ6RmllbGQsa2V5OmFueSk9PntcclxuICAgIGlmKHR5cGVvZiBrZXk9PT0nbnVtYmVyJyl7XHJcbiAgICAgIHJldHVybiBgJHtsb29rVXBGaWVsZC5jb2RlfSA9ICR7a2V5fWBcclxuICAgIH1cclxuICAgIGlmKHR5cGVvZiBrZXk9PT0nc3RyaW5nJyl7XHJcbiAgICAgIHJldHVybiBgJHtsb29rVXBGaWVsZC5jb2RlfSA9IFwiJHtrZXl9XCJgXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmm7TmlrDlr77osaHjga7jg6zjgrPjg7zjg4njgpLlj5blvpfjgZnjgotcclxuICAgKi9cclxuICBnZXRVcGRhdGVSZWNvcmRzID0gYXN5bmMgKGxvb2tVcEZpZWxkOkZpZWxkLGtleTphbnkpOlByb21pc2U8IFJlY29yZFtdPj0+e1xyXG4gICAgY29uc3QgY2xpZW50PW5ldyBLaW50b25lUmVzdEFQSUNsaWVudCgpO1xyXG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGNsaWVudC5yZWNvcmQuZ2V0QWxsUmVjb3Jkcyh7XHJcbiAgICAgIGFwcDp0aGlzLnByb3BzLmxvb2t1cEZpZWxkLmFwcC5pZCxcclxuICAgICAgZmllbGRzOltcIiRpZFwiXSxcclxuICAgICAgY29uZGl0aW9uOnRoaXMubWFrZVF1ZXJ5KGxvb2tVcEZpZWxkLGtleSlcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3A7XHJcbiAgfVxyXG5cclxuIC8qKlxyXG4gICog44Or44OD44Kv44Ki44OD44OX5pu05paw55So44Os44Kz44O844OJ44Gr5aSJ5o+b44GZ44KLXHJcbiAgKiBAcGFyYW0gdGFyZ2V0UmVjb3JkcyDmm7TmlrDlr77osaHjg6zjgrPjg7zjg4lcclxuICAqIEBwYXJhbSBsb29rVXBGaWVsZCDjg6vjg4Pjgq/jgqLjg4Pjg5fjg5XjgqPjg7zjg6vjg4lcclxuICAqIEBwYXJhbSBrZXkg44Or44OD44Kv44Ki44OD44OX44OV44Kj44O844Or44OJ44Gu5YCkXHJcbiAgKiBAcmV0dXJucyBcclxuICAqL1xyXG4gIGNvbnZlcnRGb3JMb29rdXAgPSAodGFyZ2V0UmVjb3JkczpSZWNvcmRbXSxsb29rVXBGaWVsZDpGaWVsZCxrZXk6YW55KTpBcnJheTxhbnk+PT57XHJcbiAgICByZXR1cm4gdGFyZ2V0UmVjb3Jkcy5tYXAoKHIpID0+ICh7XHJcbiAgICAgIGlkOiBOdW1iZXIocltcIiRpZFwiXS52YWx1ZSksXHJcbiAgICAgIHJlY29yZDogeyBbbG9va1VwRmllbGQuY29kZV06IHsgdmFsdWU6IGtleSB9IH0sXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDjg6vjg4Pjgq/jgqLjg4Pjg5flhYjjgpLmm7TmlrDjgZnjgotcclxuICAgKiBAcGFyYW0gdXBkYXRlUmVjb3JkcyBcclxuICAgKi9cclxuICB1cGRhdGVMb29rdXBUYXJnZXQgPSBhc3luYyAodXBkYXRlUmVjb3JkczpBcnJheTxhbnk+KT0+e1xyXG4gICAgaWYgKHVwZGF0ZVJlY29yZHMgJiYgdXBkYXRlUmVjb3Jkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGNsaWVudD1uZXcgS2ludG9uZVJlc3RBUElDbGllbnQoKTtcclxuICAgICAgY2xpZW50LnJlY29yZC51cGRhdGVBbGxSZWNvcmRzKHtcclxuICAgICAgICBhcHA6dGhpcy5wcm9wcy5sb29rdXBGaWVsZC5hcHAuaWQsXHJcbiAgICAgICAgcmVjb3Jkczp1cGRhdGVSZWNvcmRzXHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyBhd2FpdCBraW50b25lLmFwaShraW50b25lLmFwaS51cmwoXCIvay92MS9yZWNvcmRzLmpzb25cIiwgdHJ1ZSksIFwiUFVUXCIsIHtcclxuICAgICAgLy8gICBhcHA6IHRoaXMucHJvcHMubG9va3VwRmllbGQuYXBwLmlkLFxyXG4gICAgICAvLyAgIHJlY29yZHM6IHVwZGF0ZVJlY29yZHNcclxuICAgICAgLy8gfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmm7TmlrDkuK3jga7jg4DjgqTjgqLjg63jgrDooajnpLpcclxuICAgKiBAcGFyYW0gYXBwIFxyXG4gICAqL1xyXG4gIHNob3dTcGlubmVyTW9kZWwgPSAoYXBwOkFwcCkgPT4ge1xyXG4gICAgbGV0IGRpYWxvZyA9ICQoXCIjYWxjTG9va3VwTW9kYWxcIik7XHJcbiAgICBpZihkaWFsb2cubGVuZ3RoPT09MCl7XHJcbiAgICAgIGNvbnN0IG1vZGFsSFRNTCA9IGBcclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJhbGNMb29rdXBNb2RhbFwiIHRhYmluZGV4PVwiLTFcIiBhcmlhLWxhYmVsbGVkYnk9XCJzdGF0aWNCYWNrZHJvcExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZy1jZW50ZXJlZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJtb2RhbC10aXRsZSBmcy01XCIgaWQ9XCJhbGNMb29rdXBNb2RhbExhYmVsXCI+44Or44OD44Kv44Ki44OD44OX5ZCM5pyf5Yem55CGPC9oMT5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBpZD1cImFwcCR7YXBwLmlkfVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1zZWNvbmRhcnkgY29sLTEgXCIgcm9sZT1cImFsZXJ0XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj4ke2FwcC5uYW1lfTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj5PSzwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5gO1xyXG4gICAgICBkaWFsb2cgPSAkKG1vZGFsSFRNTCkuYXBwZW5kVG8oXCJib2R5XCIpO1xyXG4gICAgICBkaWFsb2cuZ2V0KClbMF0uYWRkRXZlbnRMaXN0ZW5lcignaGlkZGVuLmJzLm1vZGFsJywoZXYpPT57XHJcbiAgICAgICAgTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZShkaWFsb2cuZ2V0KClbMF0pLmRpc3Bvc2UoKTtcclxuICAgICAgICAkKFwiI2FsY0xvb2t1cE1vZGFsXCIpLnJlbW92ZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1lbHNle1xyXG4gICAgICBjb25zdCBkaWFsb2dCb2R5PSQoXCIjYWxjTG9va3VwTW9kYWwgLm1vZGFsLWJvZHlcIik7XHJcbiAgICAgIGNvbnN0IGh0bWxyb3c9YCBcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBpZD1cImFwcCR7YXBwLmlkfVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1zZWNvbmRhcnkgY29sLTEgXCIgcm9sZT1cImFsZXJ0XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+JHthcHAubmFtZX08L2Rpdj5cclxuICAgICAgICAgIDxkaXY+YDtcclxuICAgICAgZGlhbG9nQm9keS5hcHBlbmQoaHRtbHJvdyk7XHJcbiAgICB9XHJcbiAgICBNb2RhbC5nZXRPckNyZWF0ZUluc3RhbmNlKGRpYWxvZy5nZXQoKVswXSkuc2hvdygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5pu05paw57WQ5p6c44KS6KGo56S644GZ44KLXHJcbiAgICogQHBhcmFtIGFwcCDjgIDmm7TmlrDlhYjjgqLjg5fjg6rmg4XloLFcclxuICAgKiBAcGFyYW0gY291bnQg5pu05paw5Lu25pWwXHJcbiAgICovXHJcbiAgc2hvd1Jlc3VsdD0oYXBwOkFwcCxjb3VudDpudW1iZXIpPT57XHJcbiAgICBjb25zdCBkaWFsb2dCb2R5PSQoYCNhbGNMb29rdXBNb2RhbCAubW9kYWwtYm9keSAjYXBwJHthcHAuaWR9YCk7XHJcbiAgICBjb25zdCBodG1sPWAgICAgPGRpdiBjbGFzcz1cImNvbC0xIHRleHQtc3VjY2Vzc1wiPuKclDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj4ke2FwcC5uYW1lfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj7mm7TmlrDku7bmlbA6JHtjb3VudH3ku7Y8L2Rpdj5gO1xyXG4gICAgZGlhbG9nQm9keS5odG1sKGh0bWwpO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXSA9IHRoaXM7XHJcbiAgfVxyXG59XHJcblxyXG5uZXcgQXV0b0xvb2tVcEFjdGlvbigpOyIsIlxyXG5pbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLi4vYWN0aW9uc1wiO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvbXVzdC1pbnB1dCc7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9hdXRvLW51bWJlcmluZyc7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9maWVsZC1zaG93bic7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9lcnJvci1zaG93JztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL2J1dHRvbi1hZGQnO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvY29uZGl0aW9uLWFjdGlvbic7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9kYXRhLXByb2Nlc3NpbmcnO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvZGF0YS1tYXBwaW5nJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL2N1cnJlbnQtZmllbGQtZ2V0JztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL3JlZ3VsYXItY2hlY2snO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvbWFpbC1jaGVjayc7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9jb3VudGVyLWNoZWNrJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL2RhdGV0aW1lLWdldHRlcic7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9pbnNlcnQtdmFsdWUnO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvdmFsdWUtZ2V0dGVyJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL3N0cmluZy1qb2luJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL3ZhbGlkYXRpb24tZnVsbHdpZHRoJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL3ZhbGlkYXRpb24taGFsZndpZHRoJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL2xvZ2luLXVzZXItZ2V0dGVyJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL2F1dG8tbG9va3VwJztcclxuXHJcbmltcG9ydCB7IEFjdGlvbkZsb3csSUFjdGlvbkZsb3csIElBY3Rpb25SZXN1bHQsSUNvbnRleHQgfSBmcm9tIFwiLi9BY3Rpb25UeXBlc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFjdGlvblByb2Nlc3N7XHJcbiAgICBldmVudElkOnN0cmluZztcclxuICAgIGZsb3c6SUFjdGlvbkZsb3c7XHJcbiAgICBldmVudDphbnk7XHJcbiAgICBjb250ZXh0OklDb250ZXh0O1xyXG4gICAgY29uc3RydWN0b3IoZXZlbnRJZDpzdHJpbmcsZmxvdzpBY3Rpb25GbG93LGV2ZW50OmFueSl7XHJcbiAgICAgICAgdGhpcy5ldmVudElkPWV2ZW50SWQ7XHJcbiAgICAgICAgdGhpcy5mbG93PWZsb3c7XHJcbiAgICAgICAgdGhpcy5ldmVudD1ldmVudDtcclxuICAgICAgICB0aGlzLmNvbnRleHQ9e1xyXG4gICAgICAgICAgICByZWNvcmQ6dGhpcy5ldmVudC5yZWNvcmQsXHJcbiAgICAgICAgICAgIHZhcmlhYmxlczp7fVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBhc3luYyBleGVjKCl7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuZmxvdy5nZXRSb290KCk7XHJcbiAgICAgICAgaWYocm9vdD09PXVuZGVmaW5lZCB8fCByb290Lm5leHROb2RlSWRzLnNpemU9PT0wKXtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaWQ9cm9vdC5uZXh0Tm9kZUlkcy5nZXQoJycpO1xyXG4gICAgICAgIGlmKGlkPT09dW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICAgICAgbGV0IG5leHRBY3Rpb24gPSB0aGlzLmZsb3cuZmluZE5vZGVCeUlkKGlkKTsgXHJcbiAgICAgICAgbGV0IHJlc3VsdDpJQWN0aW9uUmVzdWx0PXtcclxuICAgICAgICAgICAgY2FuTmV4dDp0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB3aGlsZShuZXh0QWN0aW9uIT09dW5kZWZpbmVkICYmIHJlc3VsdC5jYW5OZXh0KXtcclxuICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBhY3Rpb25BZGRpbnNbbmV4dEFjdGlvbi5uYW1lXTtcclxuICAgICAgICAgICBpZihhY3Rpb24hPT11bmRlZmluZWQpe1xyXG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBhY3Rpb24ucHJvY2VzcyhuZXh0QWN0aW9uLHRoaXMuZXZlbnQsdGhpcy5jb250ZXh0KTtcclxuICAgICAgICAgICB9XHJcbiAgICAgICAgICAgbGV0IG5leHRJbnB1dCA9ICcnO1xyXG4gICAgICAgICAgIC8vb3V0cHV0UG9pbnRz5LiA44Gk5Lul5LiK44Gu5aC05ZCI44CB5qyh44GuSW5wdXRQb2ludOOBr+aIu+OCiuWApOOCkuioreWumuOBmeOCi1xyXG4gICAgICAgICAgIGlmKG5leHRBY3Rpb24ub3V0cHV0UG9pbnRzICYmIG5leHRBY3Rpb24ub3V0cHV0UG9pbnRzLmxlbmd0aD4xKXtcclxuICAgICAgICAgICAgIG5leHRJbnB1dCA9IHJlc3VsdC5yZXN1bHR8fCcnO1xyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgICBpZD1uZXh0QWN0aW9uLm5leHROb2RlSWRzLmdldChuZXh0SW5wdXQpO1xyXG4gICAgICAgICAgIGlmKGlkPT09dW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICAgICAgICAgbmV4dEFjdGlvbiA9IHRoaXMuZmxvdy5maW5kTm9kZUJ5SWQoaWQpOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG59IiwiXHJcbi8qKlxyXG4gKiDjgqLjg5fjg6rmg4XloLFcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXBwSW5mbyB7XHJcbiAgYXBwSWQ6IHN0cmluZztcclxuICBjb2RlPzogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBkZXNjcmlwdGlvbj86IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiog44Ki44Kv44K344On44Oz44Gu44OX44Ot44OR44OG44Kj5a6a576pXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElBY3Rpb25Qcm9wZXJ0eSB7XHJcbiAgY29tcG9uZW50OiBzdHJpbmc7XHJcbiAgcHJvcHM6IHtcclxuICAgIC8v44OX44Ot44OR44OG44Kj5ZCNXHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICAvL+ODl+ODreODkeODhuOCo+ihqOekuuWQjVxyXG4gICAgZGlzcGxheU5hbWU6IHN0cmluZztcclxuICAgIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgICAvL+ODl+ODreODkeODhuOCo+ioreWumuWApFxyXG4gICAgbW9kZWxWYWx1ZTogYW55O1xyXG4gIH07XHJcbn1cclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+OCv+OCpOODl+Wumue+qVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJQWN0aW9uTm9kZSB7XHJcbiAgaWQ6IHN0cmluZztcclxuICAvL+OCouOCr+OCt+ODp+ODs+WQjVxyXG4gIG5hbWU6IHN0cmluZztcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIHN1YlRpdGxlOiBzdHJpbmc7XHJcbiAgaW5wdXRQb2ludDogc3RyaW5nO1xyXG4gIC8v5Ye65Yqb44Od44Kk44Oz44OI77yI5p2h5Lu25YiG5bKQ5Lul5aSW5pyq5L2/55So77yJXHJcbiAgb3V0cHV0UG9pbnRzOiBBcnJheTxzdHJpbmc+O1xyXG4gIC8v44Or44O844OI44Ki44Kv44K344On44Oz77yIS2ludG9uZSBldmVudO+8iVxyXG4gIGlzUm9vdDogYm9vbGVhbjtcclxuICAvL+OCouOCr+OCt+ODp+ODs+OBruODl+ODreODkeODhuOCo+Wumue+qVxyXG4gIGFjdGlvblByb3BzOiBBcnJheTxJQWN0aW9uUHJvcGVydHk+O1xyXG4gIC8v44Ki44Kv44K344On44Oz44Gu44OX44Ot44OR44OG44Kj6Kit5a6a5YCk5oq95Ye6XHJcbiAgQWN0aW9uVmFsdWU6IG9iamVjdFxyXG4gIHByZXZOb2RlSWQ/OiBzdHJpbmc7XHJcbiAgbmV4dE5vZGVJZHM6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcbn1cclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+ODleODreODvOOBruWumue+qVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJQWN0aW9uRmxvdyB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBhY3Rpb25Ob2RlczogSUFjdGlvbk5vZGVbXTtcclxuICBmaW5kTm9kZUJ5SWQoaWQ6IHN0cmluZyk6IElBY3Rpb25Ob2RlIHwgdW5kZWZpbmVkO1xyXG4gIHRvSlNPTigpOiBhbnk7XHJcbiAgZ2V0Um9vdCgpOiBJQWN0aW9uTm9kZSB8IHVuZGVmaW5lZDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQWN0aW9uUmVzdWx0e1xyXG4gIGNhbk5leHQ6Ym9vbGVhbjtcclxuICByZXN1bHQ/OmFueTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOOCs+ODs+ODhuOCreOCueODiFxyXG4gKiDjg6zjgrPjg7zjg4njgajjg5Xjg63jg7zjga7lpInmlbDjgpLmjIHjgaRcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvbnRleHR7XHJcbiAgcmVjb3JkOmFueSxcclxuICB2YXJpYWJsZXM6YW55XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7jgqTjg7Pjgr/jg7zjg5Xjgqfjg7zjgrlcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFjdGlvbntcclxuICAvL+OCouOCr+OCt+ODp+ODs+OBruWQjeWJje+8iOODpuODvOODi+ODg+OCr+WQjeOBjOW/heimge+8iVxyXG4gIG5hbWU6c3RyaW5nO1xyXG4gIC8v5bGe5oCn6Kit5a6a5oOF5aCxXHJcbiAgYWN0aW9uUHJvcHM6IEFycmF5PElBY3Rpb25Qcm9wZXJ0eT47XHJcbiAgLy/jgqLjgq/jgrfjg6fjg7Pjga7jg5fjg63jgrvjgrnlrp/ooYzplqLmlbBcclxuICBwcm9jZXNzKHByb3A6SUFjdGlvbk5vZGUsZXZlbnQ6YW55LGNvbnRleHQ6SUNvbnRleHQpOlByb21pc2U8SUFjdGlvblJlc3VsdD47XHJcbiAgLy/jgqLjgq/jgrfjg6fjg7Pjga7nmbvpjLLplqLmlbBcclxuICByZWdpc3RlcigpOnZvaWQ7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElGaWVsZHtcclxuICBuYW1lPzpzdHJpbmc7XHJcbiAgY29kZTpzdHJpbmc7XHJcbiAgdHlwZT86c3RyaW5nO1xyXG4gIHJlcXVpcmVkPzpib29sZWFuO1xyXG4gIG9wdGlvbnM/OnN0cmluZztcclxufVxyXG4vL+WkieaVsOOBruOCpOODs+OCv+ODvOODleOCp+ODvOOCuVxyXG5leHBvcnQgaW50ZXJmYWNlIElWYXJOYW1le1xyXG4gIG5hbWU6c3RyaW5nO1xyXG4gIGZpZWxkcz86SVZhck5hbWVbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+OBruODl+ODreODkeODhuOCo+Wumue+qeOBq+WfuuOBpeOBhOOBn+OCr+ODqeOCuVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEFjdGlvblByb3BlcnR5IGltcGxlbWVudHMgSUFjdGlvblByb3BlcnR5IHtcclxuICBjb21wb25lbnQ6IHN0cmluZztcclxuICBwcm9wczoge1xyXG4gICAgLy8g44OX44Ot44OR44OG44Kj5ZCNXHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICAvLyDjg5fjg63jg5Hjg4bjgqPooajnpLrlkI1cclxuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgICBwbGFjZWhvbGRlcjogc3RyaW5nO1xyXG4gICAgLy8g44OX44Ot44OR44OG44Kj6Kit5a6a5YCkXHJcbiAgICBtb2RlbFZhbHVlOiBhbnk7XHJcbiAgfTtcclxuXHJcbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0eSgpOiBJQWN0aW9uUHJvcGVydHkge1xyXG4gICAgcmV0dXJuIG5ldyBBY3Rpb25Qcm9wZXJ0eSgnSW5wdXRUZXh0JywgJ2Rpc3BsYXlOYW1lJywgJ+ihqOekuuWQjScsICfooajnpLrjgpLlhaXlipvjgZfjgabjgY/jgaDjgZXjgYQnLCAnJyk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBjb21wb25lbnQ6IHN0cmluZyxcclxuICAgIG5hbWU6IHN0cmluZyxcclxuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmcsXHJcbiAgICBwbGFjZWhvbGRlcjogc3RyaW5nLFxyXG4gICAgbW9kZWxWYWx1ZTogYW55XHJcbiAgKSB7XHJcbiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcclxuICAgIHRoaXMucHJvcHMgPSB7XHJcbiAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgIGRpc3BsYXlOYW1lOiBkaXNwbGF5TmFtZSxcclxuICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLFxyXG4gICAgICBtb2RlbFZhbHVlOiBtb2RlbFZhbHVlXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIElBY3Rpb25Ob2Rl44Gu5a6f6KOF44CBUm9vdEFjdGlvbk5vZGXku6XlpJbjga7jgqLjgq/jgrfjg6fjg7PlrprnvqlcclxuICovXHJcbmV4cG9ydCBjbGFzcyBBY3Rpb25Ob2RlIGltcGxlbWVudHMgSUFjdGlvbk5vZGUge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGdldCB0aXRsZSgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcHJvcCA9IHRoaXMuYWN0aW9uUHJvcHMuZmluZCgocHJvcCkgPT4gcHJvcC5wcm9wcy5uYW1lID09PSBcImRpc3BsYXlOYW1lXCIpO1xyXG4gICAgcmV0dXJuIHByb3A/LnByb3BzLm1vZGVsVmFsdWU7XHJcbiAgfTtcclxuICBnZXQgc3ViVGl0bGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLm5hbWU7XHJcbiAgfTtcclxuICBpbnB1dFBvaW50OiBzdHJpbmc7XHJcbiAgLy/lh7rlipvjg53jgqTjg7Pjg4jvvIjmnaHku7bliIblspDku6XlpJbmnKrkvb/nlKjvvIlcclxuICBvdXRwdXRQb2ludHM6IEFycmF5PHN0cmluZz47XHJcbiAgYWN0aW9uUHJvcHM6IEFycmF5PElBY3Rpb25Qcm9wZXJ0eT47XHJcbiAgZ2V0IGlzUm9vdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9O1xyXG4gIGdldCBBY3Rpb25WYWx1ZSgpOiBvYmplY3Qge1xyXG4gICAgY29uc3QgcHJvcFZhbHVlOiBhbnkgPSB7fTtcclxuICAgIHRoaXMuYWN0aW9uUHJvcHMuZm9yRWFjaCgodmFsdWUpID0+IHtcclxuICAgICAgcHJvcFZhbHVlW3ZhbHVlLnByb3BzLm5hbWVdID0gdmFsdWUucHJvcHMubW9kZWxWYWx1ZVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcHJvcFZhbHVlO1xyXG4gIH07XHJcbiAgcHJldk5vZGVJZD86IHN0cmluZztcclxuICBuZXh0Tm9kZUlkczogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHtpZCxuYW1lLHRpdGxlLGlucHV0UG9pbnQsb3V0cHV0UG9pbnRzLGFjdGlvblByb3BzfTpcclxuICAgIHtcclxuICAgICAgaWQ6c3RyaW5nLFxyXG4gICAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICAgIHRpdGxlOiBzdHJpbmcsXHJcbiAgICAgIGlucHV0UG9pbnQ6IHN0cmluZyxcclxuICAgICAgb3V0cHV0UG9pbnRzOiBBcnJheTxzdHJpbmc+LFxyXG4gICAgICBhY3Rpb25Qcm9wczogQXJyYXk8SUFjdGlvblByb3BlcnR5Pn1cclxuICApIHtcclxuICAgIHRoaXMuaWQ9aWQ7XHJcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgdGhpcy5pbnB1dFBvaW50ID0gaW5wdXRQb2ludDtcclxuICAgIHRoaXMub3V0cHV0UG9pbnRzID0gb3V0cHV0UG9pbnRzO1xyXG4gICAgY29uc3QgZGVmUHJvcCA9IEFjdGlvblByb3BlcnR5LmRlZmF1bHRQcm9wZXJ0eSgpO1xyXG4gICAgZGVmUHJvcC5wcm9wcy5tb2RlbFZhbHVlID0gdGl0bGU7XHJcbiAgICB0aGlzLmFjdGlvblByb3BzID0gYWN0aW9uUHJvcHM7XHJcbiAgICB0aGlzLm5leHROb2RlSWRzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcclxuICB9XHJcblxyXG59XHJcbi8qKlxyXG4gKiDjg6vjg7zjg4jjgqLjgq/jgrfjg6fjg7PlrprnvqlcclxuICovXHJcbmV4cG9ydCBjbGFzcyBSb290QWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbk5vZGUge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgc3ViVGl0bGU6IHN0cmluZztcclxuICBpbnB1dFBvaW50OiBzdHJpbmc7XHJcbiAgLy/lh7rlipvjg53jgqTjg7Pjg4jvvIjmnaHku7bliIblspDku6XlpJbmnKrkvb/nlKjvvIlcclxuICBvdXRwdXRQb2ludHM6IEFycmF5PHN0cmluZz47XHJcbiAgaXNSb290OiBib29sZWFuO1xyXG4gIGFjdGlvblByb3BzOiBBcnJheTxJQWN0aW9uUHJvcGVydHk+O1xyXG4gIEFjdGlvblZhbHVlOiBvYmplY3Q7XHJcbiAgcHJldk5vZGVJZD86IHN0cmluZyA9IHVuZGVmaW5lZDtcclxuICBuZXh0Tm9kZUlkczogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHtpZCxuYW1lLHRpdGxlLHN1YlRpdGxlfTp7XHJcbiAgICAgIGlkOnN0cmluZyxcclxuICAgICAgbmFtZTogc3RyaW5nLFxyXG4gICAgICB0aXRsZTogc3RyaW5nLFxyXG4gICAgICBzdWJUaXRsZTogc3RyaW5nfVxyXG4gICkge1xyXG4gICAgdGhpcy5pZCA9IGlkO1xyXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgIHRoaXMudGl0bGUgPSB0aXRsZTtcclxuICAgIHRoaXMuc3ViVGl0bGUgPSBzdWJUaXRsZTtcclxuICAgIHRoaXMuaW5wdXRQb2ludCA9ICcnO1xyXG4gICAgdGhpcy5vdXRwdXRQb2ludHMgPSBbXTtcclxuICAgIHRoaXMuaXNSb290ID0gdHJ1ZTtcclxuICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBbXTtcclxuICAgIHRoaXMuQWN0aW9uVmFsdWUgPSB7fTtcclxuICAgIHRoaXMubmV4dE5vZGVJZHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+ODleODreODvOOBruWumue+qVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEFjdGlvbkZsb3cgaW1wbGVtZW50cyBJQWN0aW9uRmxvdyB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBhY3Rpb25Ob2RlczogQXJyYXk8SUFjdGlvbk5vZGU+O1xyXG4gIGNvbnN0cnVjdG9yKGFjdGlvbk5vZGVzOiBBcnJheTxJQWN0aW9uTm9kZT4gfCBSb290QWN0aW9uKSB7XHJcbiAgICBpZiAoYWN0aW9uTm9kZXMgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICB0aGlzLmFjdGlvbk5vZGVzID0gYWN0aW9uTm9kZXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFjdGlvbk5vZGVzID0gW2FjdGlvbk5vZGVzXTtcclxuICAgIH1cclxuICAgIHRoaXMuaWQgPSAnJztcclxuICB9XHJcbiAgLyoqKlxyXG4gICAqIElE44GnQWN0aW9uTm9kZeOCkuWPluW+l+OBmeOCi1xyXG4gICAqL1xyXG4gIGZpbmROb2RlQnlJZChpZDogc3RyaW5nKTogSUFjdGlvbk5vZGUgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuYWN0aW9uTm9kZXMuZmluZCgobm9kZSkgPT4gbm9kZS5pZCA9PT0gaWQpO1xyXG4gIH1cclxuXHJcbiAgdG9KU09OKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaWQ6IHRoaXMuaWQsXHJcbiAgICAgIGFjdGlvbk5vZGVzOiB0aGlzLmFjdGlvbk5vZGVzLm1hcChub2RlID0+IHtcclxuICAgICAgICBjb25zdCB7IG5leHROb2RlSWRzLCAuLi5yZXN0IH0gPSBub2RlO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5yZXN0LFxyXG4gICAgICAgICAgbmV4dE5vZGVJZHM6IEFycmF5LmZyb20obmV4dE5vZGVJZHMuZW50cmllcygpKVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0Um9vdCgpOiBJQWN0aW9uTm9kZSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5hY3Rpb25Ob2Rlcy5maW5kKG5vZGUgPT4gbm9kZS5pc1Jvb3QpXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUpTT04oanNvbjogc3RyaW5nKTogQWN0aW9uRmxvdyB7XHJcbiAgICBjb25zdCBwYXJzZWRPYmplY3QgPSBKU09OLnBhcnNlKGpzb24pO1xyXG5cclxuICAgIGNvbnN0IGFjdGlvbk5vZGVzID0gcGFyc2VkT2JqZWN0LmFjdGlvbk5vZGVzLm1hcCgobm9kZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IG5vZGVDbGFzcyA9ICFub2RlLmlzUm9vdCA/IG5ldyBBY3Rpb25Ob2RlKG5vZGUpXHJcbiAgICAgICAgOiBuZXcgUm9vdEFjdGlvbihub2RlKTtcclxuICAgICAgbm9kZUNsYXNzLm5leHROb2RlSWRzID0gbmV3IE1hcDxzdHJpbmcsc3RyaW5nPihPYmplY3QuZW50cmllcyhub2RlLm5leHROb2RlSWRzKSk7XHJcbiAgICAgIG5vZGVDbGFzcy5wcmV2Tm9kZUlkID0gbm9kZS5wcmV2Tm9kZUlkO1xyXG4gICAgICBub2RlQ2xhc3MuaWQgPSBub2RlLmlkO1xyXG4gICAgICByZXR1cm4gbm9kZUNsYXNzO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBhY3Rpb25GbG93ID0gbmV3IEFjdGlvbkZsb3coYWN0aW9uTm9kZXMpO1xyXG4gICAgYWN0aW9uRmxvdy5pZCA9IHBhcnNlZE9iamVjdC5pZDtcclxuICAgIHJldHVybiBhY3Rpb25GbG93O1xyXG4gIH1cclxufVxyXG5cclxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcclxuaW1wb3J0IHsgQWN0aW9uUHJvY2VzcyB9IGZyb20gJy4vdHlwZXMvYWN0aW9uLXByb2Nlc3MnO1xyXG5pbXBvcnQgeyBBY3Rpb25GbG93IH0gZnJvbSAnLi90eXBlcy9BY3Rpb25UeXBlcyc7XHJcbmltcG9ydCB7IEZsb3dJbmZvIH0gZnJvbSAnLi90eXBlcy9mbG93U2V0dGluZyc7XHJcblxyXG5kZWNsYXJlIGNvbnN0IGFsY2Zsb3cgOiB7XHJcbiAgW2tleTpzdHJpbmddOkZsb3dJbmZvXHJcbn07XHJcblxyXG4kKGZ1bmN0aW9uICgpe1xyXG4gICAgY29uc3QgZ2V0Q2hhbmdlRXZlbnRzPShldmVudHM6c3RyaW5nW10pPT57XHJcbiAgICAgIHJldHVybiBldmVudHMuZmlsdGVyKChldmVudCk9PmV2ZW50LmluY2x1ZGVzKFwiLmNoYW5nZS5cIikpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZ2V0Q2xpY2tFdmVudHM9KGV2ZW50czpzdHJpbmdbXSk9PntcclxuICAgICAgcmV0dXJuIGV2ZW50cy5maWx0ZXIoKGV2ZW50KT0+ZXZlbnQuaW5jbHVkZXMoXCIuY3VzdG9tQnV0dG9uQ2xpY2suXCIpKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGdldEtpbnRvbmVFdmVudHM9KGV2ZW50czpzdHJpbmdbXSk9PntcclxuICAgICAgcmV0dXJuIGV2ZW50cy5maWx0ZXIoKGV2ZW50KT0+e1xyXG4gICAgICAgIHJldHVybiAhZXZlbnQuaW5jbHVkZXMoXCIuY3VzdG9tQnV0dG9uQ2xpY2suXCIpICYmICFldmVudC5pbmNsdWRlcyhcIi5jaGFuZ2UuXCIpXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZXZlbnRzPU9iamVjdC5rZXlzKGFsY2Zsb3cpO1xyXG4gICAgY29uc3QgY2hhbmdlRXZlbnRzID0gZ2V0Q2hhbmdlRXZlbnRzKGV2ZW50cyk7XHJcbiAgICBjb25zdCBjbGlja0V2ZW50cyA9IGdldENsaWNrRXZlbnRzKGV2ZW50cyk7XHJcbiAgICBjb25zdCBraW50b25lRXZlbnRzID0gZ2V0S2ludG9uZUV2ZW50cyhldmVudHMpO1xyXG4gICAgaWYoa2ludG9uZUV2ZW50cy5sZW5ndGg+MCApe1xyXG4gICAgICAvL+mAmuW4uEtpbnRvbmXjgqTjg5njg7Pjg4jjgpLjg5Djg7Pjg4lcclxuICAgICAga2ludG9uZS5ldmVudHMub24oa2ludG9uZUV2ZW50cyxhc3luYyAoZXZlbnQ6YW55KT0+e1xyXG4gICAgICAgIGNvbnN0IGZsb3dpbmZvID0gYWxjZmxvd1tldmVudC50eXBlXTtcclxuICAgICAgICBjb25zdCBmbG93PUFjdGlvbkZsb3cuZnJvbUpTT04oZmxvd2luZm8uY29udGVudCk7XHJcbiAgICAgICAgaWYoZmxvdyE9PXVuZGVmaW5lZCl7XHJcbiAgICAgICAgICBjb25zdCBwcm9jZXNzID0gbmV3IEFjdGlvblByb2Nlc3MoZXZlbnQudHlwZSxmbG93LGV2ZW50KTtcclxuICAgICAgICAgIGF3YWl0IHByb2Nlc3MuZXhlYygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXZlbnQ7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYoY2hhbmdlRXZlbnRzLmxlbmd0aD4wKXtcclxuICAgICAgLy/lgKTlpInmm7TjgqTjg5njg7Pjg4jjgpLjg5Djg7Pjg4njgZnjgotcclxuICAgICAga2ludG9uZS5ldmVudHMub24oY2hhbmdlRXZlbnRzLChldmVudDphbnkpPT57XHJcbiAgICAgICAgY29uc3QgZmxvd2luZm8gPSBhbGNmbG93W2V2ZW50LnR5cGVdO1xyXG4gICAgICAgIGNvbnN0IGZsb3c9QWN0aW9uRmxvdy5mcm9tSlNPTihmbG93aW5mby5jb250ZW50KTtcclxuICAgICAgICBpZihmbG93IT09dW5kZWZpbmVkKXtcclxuICAgICAgICAgIGNvbnN0IHByb2Nlc3MgPSBuZXcgQWN0aW9uUHJvY2VzcyhldmVudC50eXBlLGZsb3csZXZlbnQpO1xyXG4gICAgICAgICAgcHJvY2Vzcy5leGVjKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBldmVudDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZihjbGlja0V2ZW50cy5sZW5ndGg+MCl7XHJcbiAgICAgIGNsaWNrRXZlbnRzLmZvckVhY2goKGV2ZW50TmFtZTpzdHJpbmcpPT57XHJcbiAgICAgICAgJChkb2N1bWVudCkub24oZXZlbnROYW1lLGFzeW5jICgpPT57XHJcbiAgICAgICAgICBjb25zdCBldmVudD1raW50b25lLmFwcC5yZWNvcmQuZ2V0KCk7XHJcbiAgICAgICAgICBjb25zdCBmbG93aW5mbyA9IGFsY2Zsb3dbZXZlbnROYW1lXTtcclxuICAgICAgICAgIGNvbnN0IGZsb3c9QWN0aW9uRmxvdy5mcm9tSlNPTihmbG93aW5mby5jb250ZW50KTtcclxuICAgICAgICAgIGlmKGZsb3chPT11bmRlZmluZWQpe1xyXG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzID0gbmV3IEFjdGlvblByb2Nlc3MoZXZlbnROYW1lLGZsb3csZXZlbnQpO1xyXG4gICAgICAgICAgICBhd2FpdCBwcm9jZXNzLmV4ZWMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IHJlY29yZCA9IGV2ZW50LnJlY29yZDtcclxuICAgICAgICAgIGtpbnRvbmUuYXBwLnJlY29yZC5zZXQoe3JlY29yZH0pXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG59KTsiXSwibmFtZXMiOlsiZ2xvYmFsIiwiZmFjdG9yeSIsIm1vZHVsZSIsInciLCJ0aGlzIiwid2luZG93Iiwibm9HbG9iYWwiLCJhcnIiLCJnZXRQcm90byIsInNsaWNlIiwiZmxhdCIsImFycmF5IiwicHVzaCIsImluZGV4T2YiLCJjbGFzczJ0eXBlIiwidG9TdHJpbmciLCJoYXNPd24iLCJmblRvU3RyaW5nIiwiT2JqZWN0RnVuY3Rpb25TdHJpbmciLCJzdXBwb3J0IiwiaXNGdW5jdGlvbiIsIm9iaiIsImlzV2luZG93IiwiZG9jdW1lbnQiLCJwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzIiwiRE9NRXZhbCIsImNvZGUiLCJub2RlIiwiZG9jIiwiaSIsInZhbCIsInNjcmlwdCIsInRvVHlwZSIsInZlcnNpb24iLCJyaHRtbFN1ZmZpeCIsImpRdWVyeSIsInNlbGVjdG9yIiwiY29udGV4dCIsIm51bSIsImVsZW1zIiwicmV0IiwiY2FsbGJhY2siLCJlbGVtIiwiX2VsZW0iLCJsZW4iLCJqIiwib3B0aW9ucyIsIm5hbWUiLCJzcmMiLCJjb3B5IiwiY29weUlzQXJyYXkiLCJjbG9uZSIsInRhcmdldCIsImxlbmd0aCIsImRlZXAiLCJtc2ciLCJwcm90byIsIkN0b3IiLCJpc0FycmF5TGlrZSIsIm5vZGVUeXBlIiwicmVzdWx0cyIsIm5hbWVzcGFjZSIsImRvY0VsZW0iLCJmaXJzdCIsInNlY29uZCIsImludmVydCIsImNhbGxiYWNrSW52ZXJzZSIsIm1hdGNoZXMiLCJjYWxsYmFja0V4cGVjdCIsImFyZyIsInZhbHVlIiwiX2kiLCJ0eXBlIiwibm9kZU5hbWUiLCJwb3AiLCJzb3J0Iiwic3BsaWNlIiwid2hpdGVzcGFjZSIsInJ0cmltQ1NTIiwiYSIsImIiLCJidXAiLCJyY3NzZXNjYXBlIiwiZmNzc2VzY2FwZSIsImNoIiwiYXNDb2RlUG9pbnQiLCJzZWwiLCJwcmVmZXJyZWREb2MiLCJwdXNoTmF0aXZlIiwiRXhwciIsIm91dGVybW9zdENvbnRleHQiLCJzb3J0SW5wdXQiLCJoYXNEdXBsaWNhdGUiLCJkb2N1bWVudEVsZW1lbnQiLCJkb2N1bWVudElzSFRNTCIsInJidWdneVFTQSIsImV4cGFuZG8iLCJkaXJydW5zIiwiZG9uZSIsImNsYXNzQ2FjaGUiLCJjcmVhdGVDYWNoZSIsInRva2VuQ2FjaGUiLCJjb21waWxlckNhY2hlIiwibm9ubmF0aXZlU2VsZWN0b3JDYWNoZSIsInNvcnRPcmRlciIsImJvb2xlYW5zIiwiaWRlbnRpZmllciIsImF0dHJpYnV0ZXMiLCJwc2V1ZG9zIiwicndoaXRlc3BhY2UiLCJyY29tbWEiLCJybGVhZGluZ0NvbWJpbmF0b3IiLCJyZGVzY2VuZCIsInJwc2V1ZG8iLCJyaWRlbnRpZmllciIsIm1hdGNoRXhwciIsInJpbnB1dHMiLCJyaGVhZGVyIiwicnF1aWNrRXhwciIsInJzaWJsaW5nIiwicnVuZXNjYXBlIiwiZnVuZXNjYXBlIiwiZXNjYXBlIiwibm9uSGV4IiwiaGlnaCIsInVubG9hZEhhbmRsZXIiLCJzZXREb2N1bWVudCIsImluRGlzYWJsZWRGaWVsZHNldCIsImFkZENvbWJpbmF0b3IiLCJzYWZlQWN0aXZlRWxlbWVudCIsImVscyIsImZpbmQiLCJzZWVkIiwibSIsIm5pZCIsIm1hdGNoIiwiZ3JvdXBzIiwibmV3U2VsZWN0b3IiLCJuZXdDb250ZXh0IiwidGVzdENvbnRleHQiLCJ0b2tlbml6ZSIsInRvU2VsZWN0b3IiLCJzZWxlY3QiLCJrZXlzIiwiY2FjaGUiLCJrZXkiLCJtYXJrRnVuY3Rpb24iLCJmbiIsImFzc2VydCIsImVsIiwiY3JlYXRlSW5wdXRQc2V1ZG8iLCJjcmVhdGVCdXR0b25Qc2V1ZG8iLCJjcmVhdGVEaXNhYmxlZFBzZXVkbyIsImRpc2FibGVkIiwiY3JlYXRlUG9zaXRpb25hbFBzZXVkbyIsImFyZ3VtZW50IiwibWF0Y2hJbmRleGVzIiwic3ViV2luZG93IiwiaWQiLCJhdHRySWQiLCJ0YWciLCJjbGFzc05hbWUiLCJpbnB1dCIsImNvbXBhcmUiLCJleHByIiwiZWxlbWVudHMiLCJkdXBsaWNhdGVzIiwiZXhjZXNzIiwidW5xdW90ZWQiLCJub2RlTmFtZVNlbGVjdG9yIiwiZXhwZWN0ZWROb2RlTmFtZSIsInBhdHRlcm4iLCJvcGVyYXRvciIsImNoZWNrIiwicmVzdWx0Iiwid2hhdCIsIl9hcmd1bWVudCIsImxhc3QiLCJzaW1wbGUiLCJmb3J3YXJkIiwib2ZUeXBlIiwiX2NvbnRleHQiLCJ4bWwiLCJvdXRlckNhY2hlIiwibm9kZUluZGV4Iiwic3RhcnQiLCJkaXIiLCJwYXJlbnQiLCJ1c2VDYWNoZSIsImRpZmYiLCJwc2V1ZG8iLCJhcmdzIiwiaWR4IiwibWF0Y2hlZCIsIm1hdGNoZXIiLCJjb21waWxlIiwidW5tYXRjaGVkIiwidGV4dCIsImxhbmciLCJlbGVtTGFuZyIsImhhc2giLCJhdHRyIiwiX21hdGNoSW5kZXhlcyIsInNldEZpbHRlcnMiLCJwYXJzZU9ubHkiLCJ0b2tlbnMiLCJzb0ZhciIsInByZUZpbHRlcnMiLCJjYWNoZWQiLCJjb21iaW5hdG9yIiwiYmFzZSIsInNraXAiLCJjaGVja05vbkVsZW1lbnRzIiwiZG9uZU5hbWUiLCJvbGRDYWNoZSIsIm5ld0NhY2hlIiwiZWxlbWVudE1hdGNoZXIiLCJtYXRjaGVycyIsIm11bHRpcGxlQ29udGV4dHMiLCJjb250ZXh0cyIsImNvbmRlbnNlIiwibWFwIiwiZmlsdGVyIiwibmV3VW5tYXRjaGVkIiwibWFwcGVkIiwic2V0TWF0Y2hlciIsInByZUZpbHRlciIsInBvc3RGaWx0ZXIiLCJwb3N0RmluZGVyIiwicG9zdFNlbGVjdG9yIiwidGVtcCIsIm1hdGNoZXJPdXQiLCJwcmVNYXAiLCJwb3N0TWFwIiwicHJlZXhpc3RpbmciLCJtYXRjaGVySW4iLCJtYXRjaGVyRnJvbVRva2VucyIsImNoZWNrQ29udGV4dCIsImxlYWRpbmdSZWxhdGl2ZSIsImltcGxpY2l0UmVsYXRpdmUiLCJtYXRjaENvbnRleHQiLCJtYXRjaEFueUNvbnRleHQiLCJtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMiLCJlbGVtZW50TWF0Y2hlcnMiLCJzZXRNYXRjaGVycyIsImJ5U2V0IiwiYnlFbGVtZW50Iiwic3VwZXJNYXRjaGVyIiwib3V0ZXJtb3N0IiwibWF0Y2hlZENvdW50Iiwic2V0TWF0Y2hlZCIsImNvbnRleHRCYWNrdXAiLCJkaXJydW5zVW5pcXVlIiwidG9rZW4iLCJjb21waWxlZCIsInVudGlsIiwidHJ1bmNhdGUiLCJzaWJsaW5ncyIsIm4iLCJybmVlZHNDb250ZXh0IiwicnNpbmdsZVRhZyIsIndpbm5vdyIsInF1YWxpZmllciIsIm5vdCIsInNlbGYiLCJyb290alF1ZXJ5IiwiaW5pdCIsInJvb3QiLCJycGFyZW50c3ByZXYiLCJndWFyYW50ZWVkVW5pcXVlIiwidGFyZ2V0cyIsImwiLCJzZWxlY3RvcnMiLCJjdXIiLCJzaWJsaW5nIiwicm5vdGh0bWx3aGl0ZSIsImNyZWF0ZU9wdGlvbnMiLCJvYmplY3QiLCJfIiwiZmxhZyIsImZpcmluZyIsIm1lbW9yeSIsImZpcmVkIiwibG9ja2VkIiwibGlzdCIsInF1ZXVlIiwiZmlyaW5nSW5kZXgiLCJmaXJlIiwiYWRkIiwiaW5kZXgiLCJJZGVudGl0eSIsInYiLCJUaHJvd2VyIiwiZXgiLCJhZG9wdFZhbHVlIiwicmVzb2x2ZSIsInJlamVjdCIsIm5vVmFsdWUiLCJtZXRob2QiLCJmdW5jIiwidHVwbGVzIiwic3RhdGUiLCJwcm9taXNlIiwiZGVmZXJyZWQiLCJmbnMiLCJuZXdEZWZlciIsInR1cGxlIiwicmV0dXJuZWQiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJvblByb2dyZXNzIiwibWF4RGVwdGgiLCJkZXB0aCIsImhhbmRsZXIiLCJzcGVjaWFsIiwidGhhdCIsIm1pZ2h0VGhyb3ciLCJ0aGVuIiwicHJvY2VzcyIsImUiLCJzdGF0ZVN0cmluZyIsInNpbmdsZVZhbHVlIiwicmVtYWluaW5nIiwicmVzb2x2ZUNvbnRleHRzIiwicmVzb2x2ZVZhbHVlcyIsInByaW1hcnkiLCJ1cGRhdGVGdW5jIiwicmVycm9yTmFtZXMiLCJlcnJvciIsImFzeW5jRXJyb3IiLCJyZWFkeUxpc3QiLCJ3YWl0IiwiY29tcGxldGVkIiwiYWNjZXNzIiwiY2hhaW5hYmxlIiwiZW1wdHlHZXQiLCJyYXciLCJidWxrIiwiX2tleSIsInJtc1ByZWZpeCIsInJkYXNoQWxwaGEiLCJmY2FtZWxDYXNlIiwiX2FsbCIsImxldHRlciIsImNhbWVsQ2FzZSIsInN0cmluZyIsImFjY2VwdERhdGEiLCJvd25lciIsIkRhdGEiLCJkYXRhIiwicHJvcCIsImRhdGFQcml2IiwiZGF0YVVzZXIiLCJyYnJhY2UiLCJybXVsdGlEYXNoIiwiZ2V0RGF0YSIsImRhdGFBdHRyIiwiYXR0cnMiLCJzdGFydExlbmd0aCIsImhvb2tzIiwibmV4dCIsInNldHRlciIsInRtcCIsImNvdW50IiwiZGVmZXIiLCJwbnVtIiwicmNzc051bSIsImNzc0V4cGFuZCIsImlzQXR0YWNoZWQiLCJjb21wb3NlZCIsImlzSGlkZGVuV2l0aGluVHJlZSIsImFkanVzdENTUyIsInZhbHVlUGFydHMiLCJ0d2VlbiIsImFkanVzdGVkIiwic2NhbGUiLCJtYXhJdGVyYXRpb25zIiwiY3VycmVudFZhbHVlIiwiaW5pdGlhbCIsInVuaXQiLCJpbml0aWFsSW5Vbml0IiwiZGVmYXVsdERpc3BsYXlNYXAiLCJnZXREZWZhdWx0RGlzcGxheSIsImRpc3BsYXkiLCJzaG93SGlkZSIsInNob3ciLCJ2YWx1ZXMiLCJyY2hlY2thYmxlVHlwZSIsInJ0YWdOYW1lIiwicnNjcmlwdFR5cGUiLCJmcmFnbWVudCIsImRpdiIsIndyYXBNYXAiLCJnZXRBbGwiLCJzZXRHbG9iYWxFdmFsIiwicmVmRWxlbWVudHMiLCJyaHRtbCIsImJ1aWxkRnJhZ21lbnQiLCJzY3JpcHRzIiwic2VsZWN0aW9uIiwiaWdub3JlZCIsIndyYXAiLCJhdHRhY2hlZCIsIm5vZGVzIiwicnR5cGVuYW1lc3BhY2UiLCJyZXR1cm5UcnVlIiwicmV0dXJuRmFsc2UiLCJvbiIsInR5cGVzIiwib25lIiwib3JpZ0ZuIiwiZXZlbnQiLCJoYW5kbGVPYmpJbiIsImV2ZW50SGFuZGxlIiwiZXZlbnRzIiwidCIsImhhbmRsZU9iaiIsImhhbmRsZXJzIiwibmFtZXNwYWNlcyIsIm9yaWdUeXBlIiwiZWxlbURhdGEiLCJtYXBwZWRUeXBlcyIsIm9yaWdDb3VudCIsIm5hdGl2ZUV2ZW50IiwiaGFuZGxlclF1ZXVlIiwibWF0Y2hlZEhhbmRsZXJzIiwibWF0Y2hlZFNlbGVjdG9ycyIsImRlbGVnYXRlQ291bnQiLCJob29rIiwib3JpZ2luYWxFdmVudCIsImxldmVyYWdlTmF0aXZlIiwiaXNTZXR1cCIsInNhdmVkIiwiaGFuZGxlIiwicHJvcHMiLCJkZWxlZ2F0ZVR5cGUiLCJmb2N1c01hcHBlZEhhbmRsZXIiLCJhdHRhY2hlcyIsImRhdGFIb2xkZXIiLCJvcmlnIiwiZml4IiwicmVsYXRlZCIsInJub0lubmVyaHRtbCIsInJjaGVja2VkIiwicmNsZWFuU2NyaXB0IiwibWFuaXB1bGF0aW9uVGFyZ2V0IiwiY29udGVudCIsImRpc2FibGVTY3JpcHQiLCJyZXN0b3JlU2NyaXB0IiwiY2xvbmVDb3B5RXZlbnQiLCJkZXN0IiwicGRhdGFPbGQiLCJ1ZGF0YU9sZCIsInVkYXRhQ3VyIiwiZml4SW5wdXQiLCJkb21NYW5pcCIsImNvbGxlY3Rpb24iLCJoYXNTY3JpcHRzIiwiaU5vQ2xvbmUiLCJ2YWx1ZUlzRnVuY3Rpb24iLCJyZW1vdmUiLCJrZWVwRGF0YSIsImh0bWwiLCJkYXRhQW5kRXZlbnRzIiwiZGVlcERhdGFBbmRFdmVudHMiLCJzcmNFbGVtZW50cyIsImRlc3RFbGVtZW50cyIsImluUGFnZSIsIm9yaWdpbmFsIiwiaW5zZXJ0Iiwicm51bW5vbnB4IiwicmN1c3RvbVByb3AiLCJnZXRTdHlsZXMiLCJ2aWV3Iiwic3dhcCIsIm9sZCIsInJib3hTdHlsZSIsImNvbXB1dGVTdHlsZVRlc3RzIiwiY29udGFpbmVyIiwiZGl2U3R5bGUiLCJwaXhlbFBvc2l0aW9uVmFsIiwicmVsaWFibGVNYXJnaW5MZWZ0VmFsIiwicm91bmRQaXhlbE1lYXN1cmVzIiwicGl4ZWxCb3hTdHlsZXNWYWwiLCJib3hTaXppbmdSZWxpYWJsZVZhbCIsInNjcm9sbGJveFNpemVWYWwiLCJtZWFzdXJlIiwicmVsaWFibGVUckRpbWVuc2lvbnNWYWwiLCJ0YWJsZSIsInRyIiwidHJDaGlsZCIsInRyU3R5bGUiLCJjdXJDU1MiLCJjb21wdXRlZCIsIndpZHRoIiwibWluV2lkdGgiLCJtYXhXaWR0aCIsImlzQ3VzdG9tUHJvcCIsInN0eWxlIiwiYWRkR2V0SG9va0lmIiwiY29uZGl0aW9uRm4iLCJob29rRm4iLCJjc3NQcmVmaXhlcyIsImVtcHR5U3R5bGUiLCJ2ZW5kb3JQcm9wcyIsInZlbmRvclByb3BOYW1lIiwiY2FwTmFtZSIsImZpbmFsUHJvcE5hbWUiLCJmaW5hbCIsInJkaXNwbGF5c3dhcCIsImNzc1Nob3ciLCJjc3NOb3JtYWxUcmFuc2Zvcm0iLCJzZXRQb3NpdGl2ZU51bWJlciIsInN1YnRyYWN0IiwiYm94TW9kZWxBZGp1c3RtZW50IiwiZGltZW5zaW9uIiwiYm94IiwiaXNCb3JkZXJCb3giLCJzdHlsZXMiLCJjb21wdXRlZFZhbCIsImV4dHJhIiwiZGVsdGEiLCJtYXJnaW5EZWx0YSIsImdldFdpZHRoT3JIZWlnaHQiLCJib3hTaXppbmdOZWVkZWQiLCJ2YWx1ZUlzQm9yZGVyQm94Iiwib2Zmc2V0UHJvcCIsIm9yaWdOYW1lIiwic2Nyb2xsYm94U2l6ZUJ1Z2d5IiwicHJlZml4Iiwic3VmZml4IiwiZXhwYW5kZWQiLCJwYXJ0cyIsIlR3ZWVuIiwiZW5kIiwiZWFzaW5nIiwicGVyY2VudCIsImVhc2VkIiwicCIsImZ4Tm93IiwiaW5Qcm9ncmVzcyIsInJmeHR5cGVzIiwicnJ1biIsInNjaGVkdWxlIiwiY3JlYXRlRnhOb3ciLCJnZW5GeCIsImluY2x1ZGVXaWR0aCIsIndoaWNoIiwiY3JlYXRlVHdlZW4iLCJhbmltYXRpb24iLCJBbmltYXRpb24iLCJkZWZhdWx0UHJlZmlsdGVyIiwib3B0cyIsInRvZ2dsZSIsIm9sZGZpcmUiLCJwcm9wVHdlZW4iLCJyZXN0b3JlRGlzcGxheSIsImlzQm94IiwiYW5pbSIsImhpZGRlbiIsImRhdGFTaG93IiwicHJvcEZpbHRlciIsInNwZWNpYWxFYXNpbmciLCJwcm9wZXJ0aWVzIiwic3RvcHBlZCIsInRpY2siLCJjdXJyZW50VGltZSIsImdvdG9FbmQiLCJwcmVwZW5kIiwic3BlZWQiLCJvcHQiLCJ0byIsImVtcHR5Iiwib3B0YWxsIiwiZG9BbmltYXRpb24iLCJjbGVhclF1ZXVlIiwic3RvcFF1ZXVlIiwic3RvcCIsImRlcXVldWUiLCJ0aW1lcnMiLCJjc3NGbiIsInRpbWVyIiwidGltZSIsInRpbWVvdXQiLCJib29sSG9vayIsImF0dHJIYW5kbGUiLCJuVHlwZSIsImF0dHJOYW1lcyIsImdldHRlciIsImlzWE1MIiwibG93ZXJjYXNlTmFtZSIsInJmb2N1c2FibGUiLCJyY2xpY2thYmxlIiwidGFiaW5kZXgiLCJzdHJpcEFuZENvbGxhcHNlIiwiZ2V0Q2xhc3MiLCJjbGFzc2VzVG9BcnJheSIsImNsYXNzTmFtZXMiLCJjdXJWYWx1ZSIsImZpbmFsVmFsdWUiLCJzdGF0ZVZhbCIsImlzVmFsaWRWYWx1ZSIsInJyZXR1cm4iLCJvcHRpb24iLCJtYXgiLCJvcHRpb25TZXQiLCJsb2NhdGlvbiIsIm5vbmNlIiwicnF1ZXJ5IiwicGFyc2VyRXJyb3JFbGVtIiwicmZvY3VzTW9ycGgiLCJzdG9wUHJvcGFnYXRpb25DYWxsYmFjayIsIm9ubHlIYW5kbGVycyIsImJ1YmJsZVR5cGUiLCJvbnR5cGUiLCJsYXN0RWxlbWVudCIsImV2ZW50UGF0aCIsInJicmFja2V0IiwickNSTEYiLCJyc3VibWl0dGVyVHlwZXMiLCJyc3VibWl0dGFibGUiLCJidWlsZFBhcmFtcyIsInRyYWRpdGlvbmFsIiwicyIsInZhbHVlT3JGdW5jdGlvbiIsInIyMCIsInJoYXNoIiwicmFudGlDYWNoZSIsInJoZWFkZXJzIiwicmxvY2FsUHJvdG9jb2wiLCJybm9Db250ZW50IiwicnByb3RvY29sIiwicHJlZmlsdGVycyIsInRyYW5zcG9ydHMiLCJhbGxUeXBlcyIsIm9yaWdpbkFuY2hvciIsImFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyIsInN0cnVjdHVyZSIsImRhdGFUeXBlRXhwcmVzc2lvbiIsImRhdGFUeXBlIiwiZGF0YVR5cGVzIiwiaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMiLCJvcmlnaW5hbE9wdGlvbnMiLCJqcVhIUiIsImluc3BlY3RlZCIsInNlZWtpbmdUcmFuc3BvcnQiLCJpbnNwZWN0Iiwic2VsZWN0ZWQiLCJwcmVmaWx0ZXJPckZhY3RvcnkiLCJkYXRhVHlwZU9yVHJhbnNwb3J0IiwiYWpheEV4dGVuZCIsImZsYXRPcHRpb25zIiwiYWpheEhhbmRsZVJlc3BvbnNlcyIsInJlc3BvbnNlcyIsImN0IiwiZmluYWxEYXRhVHlwZSIsImZpcnN0RGF0YVR5cGUiLCJjb250ZW50cyIsImFqYXhDb252ZXJ0IiwicmVzcG9uc2UiLCJpc1N1Y2Nlc3MiLCJjb252MiIsImN1cnJlbnQiLCJjb252IiwicHJldiIsImNvbnZlcnRlcnMiLCJzZXR0aW5ncyIsInVybCIsInRyYW5zcG9ydCIsImNhY2hlVVJMIiwicmVzcG9uc2VIZWFkZXJzU3RyaW5nIiwicmVzcG9uc2VIZWFkZXJzIiwidGltZW91dFRpbWVyIiwidXJsQW5jaG9yIiwiZmlyZUdsb2JhbHMiLCJ1bmNhY2hlZCIsImNhbGxiYWNrQ29udGV4dCIsImdsb2JhbEV2ZW50Q29udGV4dCIsImNvbXBsZXRlRGVmZXJyZWQiLCJzdGF0dXNDb2RlIiwicmVxdWVzdEhlYWRlcnMiLCJyZXF1ZXN0SGVhZGVyc05hbWVzIiwic3RyQWJvcnQiLCJzdGF0dXNUZXh0IiwiZmluYWxUZXh0Iiwic3RhdHVzIiwibmF0aXZlU3RhdHVzVGV4dCIsImhlYWRlcnMiLCJzdWNjZXNzIiwibW9kaWZpZWQiLCJodG1sSXNGdW5jdGlvbiIsInhoclN1Y2Nlc3NTdGF0dXMiLCJ4aHJTdXBwb3J0ZWQiLCJlcnJvckNhbGxiYWNrIiwiY29tcGxldGUiLCJ4aHIiLCJldnQiLCJvbGRDYWxsYmFja3MiLCJyanNvbnAiLCJvcmlnaW5hbFNldHRpbmdzIiwiY2FsbGJhY2tOYW1lIiwib3ZlcndyaXR0ZW4iLCJyZXNwb25zZUNvbnRhaW5lciIsImpzb25Qcm9wIiwiYm9keSIsImtlZXBTY3JpcHRzIiwicGFyc2VkIiwicGFyYW1zIiwib2ZmIiwicmVzcG9uc2VUZXh0IiwiY3VyUG9zaXRpb24iLCJjdXJMZWZ0IiwiY3VyQ1NTVG9wIiwiY3VyVG9wIiwiY3VyT2Zmc2V0IiwiY3VyQ1NTTGVmdCIsImNhbGN1bGF0ZVBvc2l0aW9uIiwicG9zaXRpb24iLCJjdXJFbGVtIiwicmVjdCIsIndpbiIsIm9mZnNldFBhcmVudCIsIm9mZnNldCIsInBhcmVudE9mZnNldCIsInRvcCIsImRlZmF1bHRFeHRyYSIsImZ1bmNOYW1lIiwibWFyZ2luIiwiZm5PdmVyIiwiZm5PdXQiLCJydHJpbSIsInByb3h5IiwiaG9sZCIsIl9qUXVlcnkiLCJfJCIsIl9fcHVibGljRmllbGQiLCJhY3Rpb25Ob2RlIiwicmVjb3JkIiwiX2EiLCJmb3JtYXQiLCJpbnRlZ2VyUGFydCIsImZyYWN0aW9uUGFydCIsImlzTmVnYXRpdmUiLCJpc1BlcmNlbnQiLCJpbnRlZ2VyRm9ybWF0IiwiZnJhY3Rpb25Gb3JtYXQiLCJkYXRlIiwieWVhciIsIm1vbnRoIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIsIm1pbGxpc2Vjb25kIiwidGltZVpvbmVPZmZzZXQiLCJyZXBsYWNlbWVudHMiLCJkb2NOdW0iLCJ0ZW1wbGF0ZSIsInJlZ2V4Iiwibm93IiwibnVtYmVyIiwibm8iLCJyZWNObyIsImFwcHVybCIsInJlc3AiLCJsb2dpY09wIiwianNvbiIsImNoaWxkSnNvbiIsImZvdW5kTm9kZSIsIm1heEluZGV4IiwiY2hpbGQiLCJjaGlsZE1heCIsImNvbmRpdGlvblN0cmluZyIsImdyb3VwTm9kZSIsImNoaWxkQ29uZGl0aW9uU3RyaW5nIiwiY29uZE5vZGUiLCJjb25kaU5vZGVzIiwianNvblN0cmluZyIsImZpZWxkVmFsdWUiLCJjb25kaXRpb24iLCJ0YXJnZXRWYWx1ZSIsImNvbmRpdGlvblZhbHVlIiwiZGF0ZVZhbHVlIiwibnVtYmVyVmFsdWUiLCJ0cmVlIiwiYnV0dG9uU3BhY2UiLCJidXR0b24iLCJjbGlja0V2ZW50TmFtZSIsImNvbmRpdGlvblJlc3VsdCIsImV4cG9ydHMiLCJpbmplY3RQbGF0Zm9ybURlcHMiLCJkZXBzIiwiX19leHRlbmRzIiwiZXh0ZW5kU3RhdGljcyIsImQiLCJfXyIsIlVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvcl8xIiwiX3N1cGVyIiwiVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yIiwicGxhdGZvcm0iLCJfdGhpcyIsIm1lc3NhZ2UiLCJNaW1lIiwidHlwZU1hcCIsImZvcmNlIiwiZXh0ZW5zaW9ucyIsImV4dCIsInBhdGgiLCJoYXNQYXRoIiwicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsImZ1bGZpbGxlZCIsInN0ZXAiLCJyZWplY3RlZCIsIl9fZ2VuZXJhdG9yIiwiZiIsInkiLCJnIiwidmVyYiIsIm9wIiwiX19pbXBvcnREZWZhdWx0IiwibW9kIiwiYnJvd3NlciIsImZpbGVQYXRoIiwiX2IiLCJfYyIsImZpbGVOYW1lIiwiYmFzZVVybCIsImhvc3QiLCJwcm90b2NvbCIsImVuZHBvaW50TmFtZSIsImd1ZXN0U3BhY2VJZCIsInByZXZpZXciLCJndWVzdFBhdGgiLCJwcmV2aWV3UGF0aCIsIl9fYXNzaWduIiwiQmFzZUNsaWVudF8xIiwiQmFzZUNsaWVudCIsImNsaWVudCIsIl9fcmVzdCIsIkJ1bGtSZXF1ZXN0Q2xpZW50XzEiLCJCdWxrUmVxdWVzdENsaWVudCIsInJlcXVlc3RzUGFyYW0iLCJyZXF1ZXN0cyIsInJlcXVlc3QiLCJyZXN0IiwiQXBwQ2xpZW50XzEiLCJBcHBDbGllbnQiLCJzcGFjZSIsInNwYWNlUGF0aCIsImRlZmF1bHRUaHJlYWQiLCJLaW50b25lQWJvcnRTZWFyY2hFcnJvcl8xIiwiS2ludG9uZUFib3J0U2VhcmNoRXJyb3IiLCJLaW50b25lQWxsUmVjb3Jkc0Vycm9yXzEiLCJLaW50b25lQWxsUmVjb3Jkc0Vycm9yIiwicHJvY2Vzc2VkUmVjb3Jkc1Jlc3VsdCIsInVucHJvY2Vzc2VkUmVjb3JkcyIsIm51bU9mQWxsUmVjb3JkcyIsImNodW5rTGVuZ3RoIiwibnVtT2ZQcm9jZXNzZWRSZWNvcmRzIiwiZXJyb3JJbmRleCIsImVycm9ycyIsImVycm9ySW5kZXhlcyIsImVycm9yS2V5IiwiZXJyb3JQYXJzZVJlc3VsdCIsIktpbnRvbmVSZXN0QVBJRXJyb3JfMSIsIktpbnRvbmVSZXN0QVBJRXJyb3IiLCJidWxrUmVxdWVzdEluZGV4IiwiX19jcmVhdGVCaW5kaW5nIiwibyIsImsiLCJrMiIsImRlc2MiLCJfX2V4cG9ydFN0YXIiLCJyZXF1aXJlJCQyIiwiZnJvbSIsInBhY2siLCJhciIsIlJlY29yZENsaWVudF8xIiwiZXJyb3JfMSIsIlJlY29yZENsaWVudCIsImJ1bGtSZXF1ZXN0Q2xpZW50IiwiYXBwIiwidXBkYXRlS2V5IiwicmVjb3JkcyIsInJldmlzaW9uIiwicXVlcnkiLCJyZWdleHAiLCJpZHMiLCJyZXZpc2lvbnMiLCJvcmRlckJ5Iiwid2l0aEN1cnNvciIsImNvbmRpdGlvblF1ZXJ5Iiwib3JpZ2luYWxGaWVsZHMiLCJmaWVsZHMiLCJhbGxSZWNvcmRzIiwibGFzdElkIiwibGFzdFJlY29yZCIsImVycm9yXzIiLCJDSFVOS19MRU5HVEgiLCJyZWNvcmRzQ2h1bmsiLCJuZXdSZXN1bHRzIiwiZV8xIiwic2VwYXJhdGVkUmVjb3JkcyIsImFjYyIsImVfMiIsImVfMyIsInNpemUiLCJzZXBhcmF0ZWQiLCJjaHVuayIsIlNwYWNlQ2xpZW50XzEiLCJTcGFjZUNsaWVudCIsIkZpbGVDbGllbnRfMSIsImZvcm1fZGF0YV8xIiwicGxhdGZvcm1fMSIsInJlcXVpcmUkJDMiLCJGaWxlQ2xpZW50IiwiZm9ybURhdGEiLCJuYW1lXzEiLCJuYW1lXzIiLCJmaWxlRGF0YSIsImJpbmQiLCJ0aGluZyIsInN0ciIsImlzQXJyYXkiLCJpc0J1ZmZlciIsImlzU3RyaW5nIiwiaXNOdW1iZXIiLCJpc0Jvb2xlYW4iLCJwcm90b3R5cGUiLCJpc0RhdGUiLCJraW5kIiwiYWxsT3duS2V5cyIsIm1lcmdlIiwiY2FzZWxlc3MiLCJhc3NpZ25WYWx1ZSIsInRhcmdldEtleSIsImNvbnN0cnVjdG9yIiwic3VwZXJDb25zdHJ1Y3RvciIsImRlc2NyaXB0b3JzIiwic291cmNlT2JqIiwiZGVzdE9iaiIsIm1lcmdlZCIsInNlYXJjaFN0cmluZyIsImxhc3RJbmRleCIsIlR5cGVkQXJyYXkiLCJpdGVyYXRvciIsInBhaXIiLCJyZWdFeHAiLCJwMSIsInAyIiwiaGFzT3duUHJvcGVydHkiLCJpc1JlZ0V4cCIsInJlZHVjZXIiLCJyZWR1Y2VkRGVzY3JpcHRvcnMiLCJkZXNjcmlwdG9yIiwiYXJyYXlPclN0cmluZyIsImRlbGltaXRlciIsImRlZmluZSIsIm5vb3AiLCJkZWZhdWx0VmFsdWUiLCJhbHBoYWJldCIsInN0YWNrIiwidmlzaXQiLCJzb3VyY2UiLCJyZWR1Y2VkVmFsdWUiLCJ1dGlscyQxIiwiY29uZmlnIiwidG9KU09OIiwiY3VzdG9tUHJvcHMiLCJheGlvc0Vycm9yIiwiZG90cyIsIm1ldGFUb2tlbnMiLCJ2aXNpdG9yIiwiZGVmYXVsdFZpc2l0b3IiLCJpbmRleGVzIiwidXNlQmxvYiIsImNvbnZlcnRWYWx1ZSIsImV4cG9zZWRIZWxwZXJzIiwiYnVpbGQiLCJjaGFyTWFwIiwiYXBwZW5kIiwiZW5jb2RlciIsIl9lbmNvZGUiLCJlbmNvZGUiLCJzZXJpYWxpemVGbiIsInNlcmlhbGl6ZWRQYXJhbXMiLCJoYXNobWFya0luZGV4IiwiaCIsInByb2R1Y3QiLCJ1dGlscyIsImhlbHBlcnMiLCJhcnJheVRvT2JqZWN0IiwiYnVpbGRQYXRoIiwiaXNOdW1lcmljS2V5IiwiaXNMYXN0IiwicmF3VmFsdWUiLCJwYXJzZXIiLCJkZWZhdWx0cyIsInRyYW5zZm9ybVJlcXVlc3QiLCJjb250ZW50VHlwZSIsImhhc0pTT05Db250ZW50VHlwZSIsImlzT2JqZWN0UGF5bG9hZCIsImlzRmlsZUxpc3QiLCJfRm9ybURhdGEiLCJ0cmFuc2Zvcm1SZXNwb25zZSIsInRyYW5zaXRpb25hbCIsImZvcmNlZEpTT05QYXJzaW5nIiwiSlNPTlJlcXVlc3RlZCIsInN0cmljdEpTT05QYXJzaW5nIiwidmFsaWRhdGVTdGF0dXMiLCJkZWZhdWx0cyQxIiwicmF3SGVhZGVycyIsImxpbmUiLCJoZWFkZXIiLCJ0b2tlbnNSRSIsImlzSGVhZGVyTmFtZUZpbHRlciIsImNoYXIiLCJhY2Nlc3Nvck5hbWUiLCJtZXRob2ROYW1lIiwiYXJnMSIsImFyZzIiLCJhcmczIiwidmFsdWVPclJld3JpdGUiLCJyZXdyaXRlIiwic2V0SGVhZGVyIiwiX3ZhbHVlIiwiX2hlYWRlciIsIl9yZXdyaXRlIiwibEhlYWRlciIsInNldEhlYWRlcnMiLCJkZWxldGVkIiwiZGVsZXRlSGVhZGVyIiwibm9ybWFsaXplZCIsImFzU3RyaW5ncyIsImFjY2Vzc29ycyIsImRlZmluZUFjY2Vzc29yIiwiaGVhZGVyVmFsdWUiLCJzYW1wbGVzQ291bnQiLCJtaW4iLCJieXRlcyIsInRpbWVzdGFtcHMiLCJoZWFkIiwidGFpbCIsImZpcnN0U2FtcGxlVFMiLCJzdGFydGVkQXQiLCJieXRlc0NvdW50IiwicGFzc2VkIiwiZnJlcSIsInRpbWVzdGFtcCIsInRocmVzaG9sZCIsImxpc3RlbmVyIiwiaXNEb3dubG9hZFN0cmVhbSIsImJ5dGVzTm90aWZpZWQiLCJfc3BlZWRvbWV0ZXIiLCJsb2FkZWQiLCJ0b3RhbCIsInByb2dyZXNzQnl0ZXMiLCJyYXRlIiwiaW5SYW5nZSIsInN0YW5kYXJkQnJvd3NlckVudiIsIm1zaWUiLCJ1cmxQYXJzaW5nTm9kZSIsIm9yaWdpblVSTCIsInJlc29sdmVVUkwiLCJocmVmIiwicmVxdWVzdFVSTCIsIm5vblN0YW5kYXJkQnJvd3NlckVudiIsImV4cGlyZXMiLCJkb21haW4iLCJzZWN1cmUiLCJjb29raWUiLCJiYXNlVVJMIiwicmVsYXRpdmVVUkwiLCJyZXF1ZXN0ZWRVUkwiLCJjb25maWcxIiwiY29uZmlnMiIsImdldE1lcmdlZFZhbHVlIiwibWVyZ2VEZWVwUHJvcGVydGllcyIsInZhbHVlRnJvbUNvbmZpZzIiLCJkZWZhdWx0VG9Db25maWcyIiwibWVyZ2VEaXJlY3RLZXlzIiwibWVyZ2VNYXAiLCJjb25maWdWYWx1ZSIsIm5ld0NvbmZpZyIsIndpdGhYU1JGVG9rZW4iLCJ4c3JmSGVhZGVyTmFtZSIsInhzcmZDb29raWVOYW1lIiwiYXV0aCIsInhzcmZWYWx1ZSIsIl9jb25maWciLCJyZXF1ZXN0RGF0YSIsInJlc3BvbnNlVHlwZSIsIm9uQ2FuY2VsZWQiLCJvbmxvYWRlbmQiLCJlcnIiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwiY2FuY2VsIiwic2lnbmFscyIsImNvbnRyb2xsZXIiLCJhYm9ydGVkIiwib25hYm9ydCIsInVuc3Vic2NyaWJlIiwic2lnbmFsIiwiY2h1bmtTaXplIiwicG9zIiwiaXRlcmFibGUiLCJzdHJlYW0iLCJvbkZpbmlzaCIsInJlYXNvbiIsImxlbmd0aENvbXB1dGFibGUiLCJkdXBsZXhBY2Nlc3NlZCIsImhhc0NvbnRlbnRUeXBlIiwicmVzIiwiY2FuY2VsVG9rZW4iLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJvblVwbG9hZFByb2dyZXNzIiwid2l0aENyZWRlbnRpYWxzIiwiZmV0Y2hPcHRpb25zIiwiY29tcG9zZWRTaWduYWwiLCJzdG9wVGltZW91dCIsImZpbmlzaGVkIiwicmVxdWVzdENvbnRlbnRMZW5ndGgiLCJfcmVxdWVzdCIsImNvbnRlbnRUeXBlSGVhZGVyIiwiaXNTdHJlYW1SZXNwb25zZSIsInJlc3BvbnNlQ29udGVudExlbmd0aCIsInJlc3BvbnNlRGF0YSIsImFkYXB0ZXIiLCJhZGFwdGVycyIsIm5hbWVPckFkYXB0ZXIiLCJyZWplY3RlZFJlYXNvbnMiLCJyZWFzb25zIiwiVkVSU0lPTiIsInZhbGlkYXRvciIsImZvcm1hdE1lc3NhZ2UiLCJzY2hlbWEiLCJhbGxvd1Vua25vd24iLCJpbnN0YW5jZUNvbmZpZyIsImNvbmZpZ09yVXJsIiwiZHVtbXkiLCJwYXJhbXNTZXJpYWxpemVyIiwiY29udGV4dEhlYWRlcnMiLCJyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiIsInN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyIsImludGVyY2VwdG9yIiwicmVzcG9uc2VJbnRlcmNlcHRvckNoYWluIiwiY2hhaW4iLCJmdWxsUGF0aCIsImZvckVhY2hNZXRob2ROb0RhdGEiLCJmb3JFYWNoTWV0aG9kV2l0aERhdGEiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJleGVjdXRvciIsInJlc29sdmVQcm9taXNlIiwib25mdWxmaWxsZWQiLCJfcmVzb2x2ZSIsImMiLCJwYXlsb2FkIiwiZGVmYXVsdENvbmZpZyIsImluc3RhbmNlIiwiYWxsIiwicHJvbWlzZXMiLCJheGlvc18xIiwiQXhpb3NDbGllbnRfMSIsIkF4aW9zQ2xpZW50IiwicmVzcG9uc2VIYW5kbGVyIiwicmVxdWVzdENvbmZpZ0J1aWxkZXIiLCJyZXF1ZXN0Q29uZmlnIiwiaGFzU3ltYm9scyIsInN5bSIsInN5bU9iaiIsInN5bVZhbCIsInN5bXMiLCJoYXNOYXRpdmVTeW1ib2xzIiwiaGFzUHJvdG8iLCJ0b1N0ciIsImNvbmNhdHR5Iiwic2xpY3kiLCJhcnJMaWtlIiwiam9pbmVyIiwiaW1wbGVtZW50YXRpb24iLCJib3VuZCIsImJpbmRlciIsImJvdW5kTGVuZ3RoIiwiYm91bmRBcmdzIiwiRW1wdHkiLCJ1bmRlZmluZWQiLCIkU3ludGF4RXJyb3IiLCJyZXF1aXJlJCQ0IiwiJFR5cGVFcnJvciIsInJlcXVpcmUkJDUiLCJyZXF1aXJlJCQ2IiwiZXhwcmVzc2lvblN5bnRheCIsIiRnT1BEIiwicmVxdWlyZSQkNyIsInJlcXVpcmUkJDgiLCJ4IiwiZG9FdmFsIiwiZ2VuIiwicmVxdWlyZSQkOSIsInJlcXVpcmUkJDEwIiwiJGNvbmNhdCIsIiRyZXBsYWNlIiwic3RyaW5nVG9QYXRoIiwicXVvdGUiLCJzdWJTdHJpbmciLCJnZXRCYXNlSW50cmluc2ljIiwiYWxsb3dNaXNzaW5nIiwiaW50cmluc2ljTmFtZSIsImFsaWFzIiwiR2V0SW50cmluc2ljIiwiaW50cmluc2ljQmFzZU5hbWUiLCJpbnRyaW5zaWMiLCJpbnRyaW5zaWNSZWFsTmFtZSIsInNraXBGdXJ0aGVyQ2FjaGluZyIsImlzT3duIiwicGFydCIsIiRkZWZpbmVQcm9wZXJ0eSIsImdvcGQiLCJkZWZpbmVEYXRhUHJvcGVydHkiLCJwcm9wZXJ0eSIsIm5vbkVudW1lcmFibGUiLCJub25Xcml0YWJsZSIsIm5vbkNvbmZpZ3VyYWJsZSIsImxvb3NlIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9ycyIsImhhc0FycmF5TGVuZ3RoRGVmaW5lQnVnIiwiJGZsb29yIiwic2V0RnVuY3Rpb25MZW5ndGgiLCJmdW5jdGlvbkxlbmd0aElzQ29uZmlndXJhYmxlIiwiZnVuY3Rpb25MZW5ndGhJc1dyaXRhYmxlIiwiJGFwcGx5IiwiJGNhbGwiLCIkcmVmbGVjdEFwcGx5IiwiJG1heCIsIm9yaWdpbmFsRnVuY3Rpb24iLCJhcHBseUJpbmQiLCJjYWxsQm91bmQiLCJjYWxsQm91bmRJbnRyaW5zaWMiLCJPIiwic2VwUmVnZXgiLCJpbnQiLCJpbnRTdHIiLCJkZWMiLCJpbnNwZWN0XyIsInNlZW4iLCJoYXMiLCJjdXN0b21JbnNwZWN0IiwibnVtZXJpY1NlcGFyYXRvciIsImJpZ0ludFN0ciIsImluZGVudCIsIm5vSW5kZW50IiwibmV3T3B0cyIsInN5bVN0cmluZyIsImlzRWxlbWVudCIsInhzIiwibWFwUGFydHMiLCJzZXRQYXJ0cyIsInlzIiwiaXNQbGFpbk9iamVjdCIsInByb3RvVGFnIiwic3RyaW5nVGFnIiwiY29uc3RydWN0b3JUYWciLCJkZWZhdWx0U3R5bGUiLCJxdW90ZUNoYXIiLCJ0cmFpbGVyIiwiZW50cmllcyIsImpvaW5lZEVudHJpZXMiLCJiYXNlSW5kZW50IiwibGluZUpvaW5lciIsImlzQXJyIiwic3ltTWFwIiwiY3VyciIsIm9iamVjdHMiLCJnZXRTaWRlQ2hhbm5lbCIsIiR3bSIsIiRtIiwiJG8iLCJjaGFubmVsIiwiZm9ybWF0cyIsImNvbXBhY3RRdWV1ZSIsIml0ZW0iLCJjb21wYWN0ZWQiLCJtZXJnZVRhcmdldCIsInRhcmdldEl0ZW0iLCJhc3NpZ25TaW5nbGVTb3VyY2UiLCJkZWNvZGVyIiwiY2hhcnNldCIsInN0cldpdGhvdXRQbHVzIiwiZGVmYXVsdEVuY29kZXIiLCIkMCIsIm91dCIsInNlZ21lbnQiLCJjb21wYWN0IiwicmVmcyIsImNvbWJpbmUiLCJtYXliZU1hcCIsImJyYWNrZXRzIiwiaW5kaWNlcyIsInJlcGVhdCIsInZhbHVlT3JBcnJheSIsInNlcmlhbGl6ZURhdGUiLCJpc05vbk51bGxpc2hQcmltaXRpdmUiLCJzdHJpbmdpZnkiLCJnZW5lcmF0ZUFycmF5UHJlZml4IiwiY29tbWFSb3VuZFRyaXAiLCJhbGxvd0VtcHR5QXJyYXlzIiwic3RyaWN0TnVsbEhhbmRsaW5nIiwic2tpcE51bGxzIiwiZW5jb2RlRG90SW5LZXlzIiwiYWxsb3dEb3RzIiwiZm9ybWF0dGVyIiwiZW5jb2RlVmFsdWVzT25seSIsInNpZGVDaGFubmVsIiwidG1wU2MiLCJmaW5kRmxhZyIsImtleVZhbHVlIiwib2JqS2V5cyIsImVuY29kZWRQcmVmaXgiLCJhZGp1c3RlZFByZWZpeCIsImVuY29kZWRLZXkiLCJrZXlQcmVmaXgiLCJ2YWx1ZVNpZGVDaGFubmVsIiwibm9ybWFsaXplU3RyaW5naWZ5T3B0aW9ucyIsImFycmF5Rm9ybWF0Iiwiam9pbmVkIiwibnVtYmVyU3RyIiwicGFyc2VRdWVyeVN0cmluZ1ZhbHVlcyIsImNsZWFuU3RyIiwibGltaXQiLCJza2lwSW5kZXgiLCJicmFja2V0RXF1YWxzUG9zIiwiZW5jb2RlZFZhbCIsImV4aXN0aW5nIiwidmFsdWVzUGFyc2VkIiwibGVhZiIsImNsZWFuUm9vdCIsImRlY29kZWRSb290IiwicGFyc2VRdWVyeVN0cmluZ0tleXMiLCJnaXZlbktleSIsIm5vcm1hbGl6ZVBhcnNlT3B0aW9ucyIsInBhcnNlIiwidGVtcE9iaiIsIm5ld09iaiIsIl9oYXNCdWZmZXIiLCJfVEQiLCJfVEUiLCJiNjRjaCIsImI2NGNocyIsImI2NHRhYiIsInRhYiIsImI2NHJlIiwiX2Zyb21DQyIsIl9VOEFmcm9tIiwiaXQiLCJfbWtVcmlTYWZlIiwibTAiLCJfdGlkeUI2NCIsImJ0b2FQb2x5ZmlsbCIsImJpbiIsInUzMiIsImMwIiwiYzEiLCJjMiIsImFzYyIsInBhZCIsIl9idG9hIiwiX2Zyb21VaW50OEFycmF5IiwidThhIiwibWF4YXJncyIsInN0cnMiLCJmcm9tVWludDhBcnJheSIsInVybHNhZmUiLCJjYl91dG9iIiwiY2MiLCJyZV91dG9iIiwidXRvYiIsInUiLCJlbmNvZGVVUkkiLCJyZV9idG91IiwiY2JfYnRvdSIsImNjY2MiLCJjcCIsImJ0b3UiLCJhdG9iUG9seWZpbGwiLCJ1MjQiLCJyMSIsInIyIiwiX2F0b2IiLCJfdG9VaW50OEFycmF5IiwidG9VaW50OEFycmF5IiwiX3VuVVJJIiwiX2RlY29kZSIsImRlY29kZSIsImlzVmFsaWQiLCJfbm9FbnVtIiwiZXh0ZW5kU3RyaW5nIiwiX2FkZCIsImV4dGVuZFVpbnQ4QXJyYXkiLCJleHRlbmRCdWlsdGlucyIsImdCYXNlNjQiLCJLaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXJfMSIsIktpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlciIsInJlcXVlc3RVcmwiLCJfZCIsIl9lIiwiX2YiLCJfZyIsIl9oIiwiX2oiLCJfayIsInByb3h5Q29uZmlnIiwicmVxdWVzdFRva2VuIiwiYmFzaWNBdXRoIiwidXNlckFnZW50IiwiYmFzaWNBdXRoSGVhZGVycyIsInBsYXRmb3JtRGVwc0hlYWRlcnMiLCJjb21tb25IZWFkZXJzIiwiYXBpVG9rZW4iLCJLaW50b25lUmVzcG9uc2VIYW5kbGVyXzEiLCJLaW50b25lUmVzcG9uc2VIYW5kbGVyIiwiZW5hYmxlQWJvcnRTZWFyY2hFcnJvciIsImVycm9yUmVzcG9uc2UiLCJLaW50b25lUmVzdEFQSUNsaWVudF8xIiwiS2ludG9uZVJlc3RBUElDbGllbnQiLCJodHRwQ2xpZW50Iiwic29ja2V0VGltZW91dCIsIl9fc2V0TW9kdWxlRGVmYXVsdCIsIl9faW1wb3J0U3RhciIsImJyb3dzZXJEZXBzIiwiRmllbGRUeXBlIiwiQ2FsY0Zvcm1hdCIsImZpZWxkIiwibnVtYmVyQXJyYXkiLCJjYWxjRmllbGQiLCJ2YXJzIiwidmFyTmFtZSIsImFwaSIsImVsZW1lbnQiLCJ2YXJWYWx1ZXMiLCJkYXRhcyIsImFjY3VtdWxhdG9yIiwibWF4TGVuZ3RoIiwidG9kYXkiLCJmaWVsZFR5cGUiLCJpbnB1dFZhbHVlIiwiZmllbGRDb2RlIiwiZmllbGRSZXF1aXJlZCIsImlucHV0TnVtYmVyVmFsdWUiLCJ0d29EaWdpdE1vbnRoRGF5Iiwic2luZ2xlRGlnaXRNb250aERheSIsInNpbmdsZURpZ2l0TW9udGgiLCJzaW5nbGVEaWdpdERheSIsImRhdGVUaW1lIiwiZGF0ZUFycmF5IiwieWVhckluZGV4IiwibW9udGhJbmRleCIsImRheUluZGV4IiwiZmllbGRPcHRpb25zIiwib3B0aW9uc0luZGV4IiwidXNlcnNOYW1lIiwib3JnYW5pemF0aW9uTmFtZSIsImdyb3Vwc05hbWUiLCJmaWVsZENvbHVtbkluZGV4IiwidmFsdWVDb2x1bW5JbmRleCIsImluc2VydFZhbHVlVHlwZSIsInZhcmlhYmxlVmFsdWUiLCJjb3JyZWN0Rm9ybWF0dGVkVmFsdWUiLCJjb3JyZWN0VmFsdWVzIiwibm90SW5wdXRFcnJvciIsImZvcm1hdHRlZERhdGUiLCJ1c2VycyIsIm9yZ2FuaXphdGlvbnMiLCJnZXRWYWx1ZSIsIm1vdG90ZXh0Iiwiam9pbkZpZWxkMXR5cGUiLCJqb2luRmllbGQydHlwZSIsInNhdmVGaWVsZHR5cGUiLCJqb2luVmFsdWUxIiwiam9pblZhbHVlMiIsImNvblN0cmluZyIsInNhdmVWYWx1ZSIsImNoZWNrUmVnZXgiLCJlbGVtZW50TWFwIiwiaW5zdGFuY2VNYXAiLCJUUkFOU0lUSU9OX0VORCIsInBhcnNlU2VsZWN0b3IiLCJnZXRVSUQiLCJnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCIsInRyYW5zaXRpb25EdXJhdGlvbiIsInRyYW5zaXRpb25EZWxheSIsImZsb2F0VHJhbnNpdGlvbkR1cmF0aW9uIiwiZmxvYXRUcmFuc2l0aW9uRGVsYXkiLCJ0cmlnZ2VyVHJhbnNpdGlvbkVuZCIsImdldEVsZW1lbnQiLCJpc1Zpc2libGUiLCJlbGVtZW50SXNWaXNpYmxlIiwiY2xvc2VkRGV0YWlscyIsInN1bW1hcnkiLCJpc0Rpc2FibGVkIiwiZmluZFNoYWRvd1Jvb3QiLCJyZWZsb3ciLCJnZXRqUXVlcnkiLCJET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzIiwib25ET01Db250ZW50TG9hZGVkIiwiaXNSVEwiLCJkZWZpbmVKUXVlcnlQbHVnaW4iLCJwbHVnaW4iLCIkIiwiSlFVRVJZX05PX0NPTkZMSUNUIiwiZXhlY3V0ZSIsInBvc3NpYmxlQ2FsbGJhY2siLCJleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uIiwidHJhbnNpdGlvbkVsZW1lbnQiLCJ3YWl0Rm9yVHJhbnNpdGlvbiIsImR1cmF0aW9uUGFkZGluZyIsImVtdWxhdGVkRHVyYXRpb24iLCJjYWxsZWQiLCJnZXROZXh0QWN0aXZlRWxlbWVudCIsImFjdGl2ZUVsZW1lbnQiLCJzaG91bGRHZXROZXh0IiwiaXNDeWNsZUFsbG93ZWQiLCJsaXN0TGVuZ3RoIiwiaW5kZXhfanMiLCJuYW1lc3BhY2VSZWdleCIsInN0cmlwTmFtZVJlZ2V4Iiwic3RyaXBVaWRSZWdleCIsImV2ZW50UmVnaXN0cnkiLCJ1aWRFdmVudCIsImN1c3RvbUV2ZW50cyIsIm5hdGl2ZUV2ZW50cyIsIm1ha2VFdmVudFVpZCIsInVpZCIsImdldEVsZW1lbnRFdmVudHMiLCJib290c3RyYXBIYW5kbGVyIiwiaHlkcmF0ZU9iaiIsIkV2ZW50SGFuZGxlciIsImJvb3RzdHJhcERlbGVnYXRpb25IYW5kbGVyIiwiZG9tRWxlbWVudHMiLCJkb21FbGVtZW50IiwiZmluZEhhbmRsZXIiLCJjYWxsYWJsZSIsImRlbGVnYXRpb25TZWxlY3RvciIsIm5vcm1hbGl6ZVBhcmFtZXRlcnMiLCJvcmlnaW5hbFR5cGVFdmVudCIsImRlbGVnYXRpb25GdW5jdGlvbiIsImlzRGVsZWdhdGVkIiwidHlwZUV2ZW50IiwiZ2V0VHlwZUV2ZW50IiwiYWRkSGFuZGxlciIsIm9uZU9mZiIsInByZXZpb3VzRnVuY3Rpb24iLCJyZW1vdmVIYW5kbGVyIiwicmVtb3ZlTmFtZXNwYWNlZEhhbmRsZXJzIiwic3RvcmVFbGVtZW50RXZlbnQiLCJoYW5kbGVyS2V5IiwiaW5OYW1lc3BhY2UiLCJpc05hbWVzcGFjZSIsImVsZW1lbnRFdmVudCIsImtleUhhbmRsZXJzIiwialF1ZXJ5RXZlbnQiLCJidWJibGVzIiwibmF0aXZlRGlzcGF0Y2giLCJkZWZhdWx0UHJldmVudGVkIiwibWV0YSIsIm5vcm1hbGl6ZURhdGEiLCJub3JtYWxpemVEYXRhS2V5IiwiY2hyIiwiYnNLZXlzIiwicHVyZUtleSIsIk1hbmlwdWxhdG9yIiwiQ29uZmlnIiwianNvbkNvbmZpZyIsImNvbmZpZ1R5cGVzIiwiZXhwZWN0ZWRUeXBlcyIsInZhbHVlVHlwZSIsIkJhc2VDb21wb25lbnQiLCJwcm9wZXJ0eU5hbWUiLCJpc0FuaW1hdGVkIiwiZ2V0U2VsZWN0b3IiLCJocmVmQXR0cmlidXRlIiwiU2VsZWN0b3JFbmdpbmUiLCJwYXJlbnRzIiwiYW5jZXN0b3IiLCJwcmV2aW91cyIsImZvY3VzYWJsZXMiLCJOQU1FIiwiQ0xBU1NfTkFNRV9GQURFIiwiQ0xBU1NfTkFNRV9TSE9XIiwiRVZFTlRfTU9VU0VET1dOIiwiRGVmYXVsdCIsIkRlZmF1bHRUeXBlIiwiQmFja2Ryb3AiLCJiYWNrZHJvcCIsImVuYWJsZURpc21pc3NUcmlnZ2VyIiwiY29tcG9uZW50IiwiY2xpY2tFdmVudCIsIkVWRU5UX0tFWSIsIkVWRU5UX0ZPQ1VTSU4iLCJFVkVOVF9LRVlET1dOX1RBQiIsIlRBQl9LRVkiLCJUQUJfTkFWX0ZPUldBUkQiLCJUQUJfTkFWX0JBQ0tXQVJEIiwiRm9jdXNUcmFwIiwidHJhcEVsZW1lbnQiLCJTRUxFQ1RPUl9GSVhFRF9DT05URU5UIiwiU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQiLCJQUk9QRVJUWV9QQURESU5HIiwiUFJPUEVSVFlfTUFSR0lOIiwiU2Nyb2xsQmFySGVscGVyIiwiZG9jdW1lbnRXaWR0aCIsImNhbGN1bGF0ZWRWYWx1ZSIsInN0eWxlUHJvcGVydHkiLCJzY3JvbGxiYXJXaWR0aCIsIm1hbmlwdWxhdGlvbkNhbGxCYWNrIiwiYWN0dWFsVmFsdWUiLCJjYWxsQmFjayIsImNvbXBvbmVudEZ1bmN0aW9uc19qcyIsIkRBVEFfQVBJX0tFWSIsIkVTQ0FQRV9LRVkiLCJFVkVOVF9ISURFIiwiRVZFTlRfSElERV9QUkVWRU5URUQiLCJFVkVOVF9ISURERU4iLCJFVkVOVF9TSE9XIiwiRVZFTlRfU0hPV04iLCJFVkVOVF9SRVNJWkUiLCJFVkVOVF9DTElDS19ESVNNSVNTIiwiRVZFTlRfTU9VU0VET1dOX0RJU01JU1MiLCJFVkVOVF9LRVlET1dOX0RJU01JU1MiLCJFVkVOVF9DTElDS19EQVRBX0FQSSIsIkNMQVNTX05BTUVfT1BFTiIsIkNMQVNTX05BTUVfU1RBVElDIiwiT1BFTl9TRUxFQ1RPUiIsIlNFTEVDVE9SX0RJQUxPRyIsIlNFTEVDVE9SX01PREFMX0JPRFkiLCJTRUxFQ1RPUl9EQVRBX1RPR0dMRSIsIk1vZGFsIiwicmVsYXRlZFRhcmdldCIsIm1vZGFsQm9keSIsInRyYW5zaXRpb25Db21wbGV0ZSIsImV2ZW50MiIsImlzTW9kYWxPdmVyZmxvd2luZyIsImluaXRpYWxPdmVyZmxvd1kiLCJpc0JvZHlPdmVyZmxvd2luZyIsInNob3dFdmVudCIsImFscmVhZHlPcGVuIiwicGxhY2VtZW50Iiwib3duZXJEb2N1bWVudCIsIk93bkVsZW1lbnQiLCJfcmVmIiwiZWZmZWN0IiwiX3JlZjIiLCJpbml0aWFsU3R5bGVzIiwic3R5bGVQcm9wZXJ0aWVzIiwiYXR0cmlidXRlIiwidWFEYXRhIiwiaW5jbHVkZVNjYWxlIiwiaXNGaXhlZFN0cmF0ZWd5IiwiY2xpZW50UmVjdCIsInNjYWxlWCIsInNjYWxlWSIsInZpc3VhbFZpZXdwb3J0IiwiYWRkVmlzdWFsT2Zmc2V0cyIsImhlaWdodCIsInJvb3ROb2RlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImlzRmlyZWZveCIsImlzSUUiLCJlbGVtZW50Q3NzIiwiY3VycmVudE5vZGUiLCJjc3MiLCJtYXRoTWF4IiwibWF0aE1pbiIsInBhZGRpbmdPYmplY3QiLCJoYXNoTWFwIiwidG9QYWRkaW5nT2JqZWN0IiwicGFkZGluZyIsIl9zdGF0ZSRtb2RpZmllcnNEYXRhJCIsImFycm93RWxlbWVudCIsInBvcHBlck9mZnNldHMiLCJiYXNlUGxhY2VtZW50IiwiYXhpcyIsImlzVmVydGljYWwiLCJhcnJvd1JlY3QiLCJtaW5Qcm9wIiwibWF4UHJvcCIsImVuZERpZmYiLCJzdGFydERpZmYiLCJhcnJvd09mZnNldFBhcmVudCIsImNsaWVudFNpemUiLCJjZW50ZXJUb1JlZmVyZW5jZSIsImNlbnRlciIsImF4aXNQcm9wIiwiX29wdGlvbnMkZWxlbWVudCIsImRwciIsIl9PYmplY3QkYXNzaWduMiIsInBvcHBlciIsInBvcHBlclJlY3QiLCJ2YXJpYXRpb24iLCJvZmZzZXRzIiwiZ3B1QWNjZWxlcmF0aW9uIiwiYWRhcHRpdmUiLCJyb3VuZE9mZnNldHMiLCJpc0ZpeGVkIiwiX29mZnNldHMkeCIsIl9vZmZzZXRzJHkiLCJfcmVmMyIsImhhc1giLCJoYXNZIiwic2lkZVgiLCJzaWRlWSIsImhlaWdodFByb3AiLCJ3aWR0aFByb3AiLCJvZmZzZXRZIiwib2Zmc2V0WCIsImNvbW1vblN0eWxlcyIsIl9yZWY0IiwiX09iamVjdCRhc3NpZ24iLCJfcmVmNSIsIl9vcHRpb25zJGdwdUFjY2VsZXJhdCIsIl9vcHRpb25zJGFkYXB0aXZlIiwiX29wdGlvbnMkcm91bmRPZmZzZXRzIiwiX29wdGlvbnMkc2Nyb2xsIiwic2Nyb2xsIiwiX29wdGlvbnMkcmVzaXplIiwicmVzaXplIiwic2Nyb2xsUGFyZW50cyIsInNjcm9sbFBhcmVudCIsInNjcm9sbExlZnQiLCJzY3JvbGxUb3AiLCJzdHJhdGVneSIsImxheW91dFZpZXdwb3J0IiwiX2VsZW1lbnQkb3duZXJEb2N1bWVuIiwid2luU2Nyb2xsIiwiX2dldENvbXB1dGVkU3R5bGUiLCJvdmVyZmxvdyIsIm92ZXJmbG93WCIsIm92ZXJmbG93WSIsImlzQm9keSIsInVwZGF0ZWRMaXN0IiwiY2xpcHBpbmdQYXJlbnQiLCJjbGlwcGluZ1BhcmVudHMiLCJjYW5Fc2NhcGVDbGlwcGluZyIsImNsaXBwZXJFbGVtZW50IiwiYm91bmRhcnkiLCJyb290Qm91bmRhcnkiLCJtYWluQ2xpcHBpbmdQYXJlbnRzIiwiZmlyc3RDbGlwcGluZ1BhcmVudCIsImNsaXBwaW5nUmVjdCIsImFjY1JlY3QiLCJyZWZlcmVuY2UiLCJjb21tb25YIiwiY29tbW9uWSIsIm1haW5BeGlzIiwiX29wdGlvbnMiLCJfb3B0aW9ucyRwbGFjZW1lbnQiLCJfb3B0aW9ucyRzdHJhdGVneSIsIl9vcHRpb25zJGJvdW5kYXJ5IiwiX29wdGlvbnMkcm9vdEJvdW5kYXJ5IiwiX29wdGlvbnMkZWxlbWVudENvbnRlIiwiZWxlbWVudENvbnRleHQiLCJfb3B0aW9ucyRhbHRCb3VuZGFyeSIsImFsdEJvdW5kYXJ5IiwiX29wdGlvbnMkcGFkZGluZyIsImFsdENvbnRleHQiLCJjbGlwcGluZ0NsaWVudFJlY3QiLCJyZWZlcmVuY2VDbGllbnRSZWN0IiwicG9wcGVyQ2xpZW50UmVjdCIsImVsZW1lbnRDbGllbnRSZWN0Iiwib3ZlcmZsb3dPZmZzZXRzIiwib2Zmc2V0RGF0YSIsIm11bHRpcGx5IiwiZmxpcFZhcmlhdGlvbnMiLCJfb3B0aW9ucyRhbGxvd2VkQXV0b1AiLCJhbGxvd2VkQXV0b1BsYWNlbWVudHMiLCJhbGxQbGFjZW1lbnRzIiwicGxhY2VtZW50cyIsImFsbG93ZWRQbGFjZW1lbnRzIiwib3ZlcmZsb3dzIiwib3Bwb3NpdGVQbGFjZW1lbnQiLCJfb3B0aW9ucyRtYWluQXhpcyIsImNoZWNrTWFpbkF4aXMiLCJfb3B0aW9ucyRhbHRBeGlzIiwiY2hlY2tBbHRBeGlzIiwic3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIiwiX29wdGlvbnMkZmxpcFZhcmlhdGlvIiwicHJlZmVycmVkUGxhY2VtZW50IiwiaXNCYXNlUGxhY2VtZW50IiwiZmFsbGJhY2tQbGFjZW1lbnRzIiwicmVmZXJlbmNlUmVjdCIsImNoZWNrc01hcCIsIm1ha2VGYWxsYmFja0NoZWNrcyIsImZpcnN0Rml0dGluZ1BsYWNlbWVudCIsIl9iYXNlUGxhY2VtZW50IiwiaXNTdGFydFZhcmlhdGlvbiIsIm1haW5WYXJpYXRpb25TaWRlIiwiYWx0VmFyaWF0aW9uU2lkZSIsImNoZWNrcyIsIm51bWJlck9mQ2hlY2tzIiwiX2xvb3AiLCJmaXR0aW5nUGxhY2VtZW50IiwiX3JldCIsInByZXZlbnRlZE9mZnNldHMiLCJzaWRlIiwicmVmZXJlbmNlT3ZlcmZsb3ciLCJwb3BwZXJBbHRPdmVyZmxvdyIsInJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyIsInBvcHBlckVzY2FwZU9mZnNldHMiLCJpc1JlZmVyZW5jZUhpZGRlbiIsImhhc1BvcHBlckVzY2FwZWQiLCJyZWN0cyIsImludmVydERpc3RhbmNlIiwic2tpZGRpbmciLCJkaXN0YW5jZSIsIl9vcHRpb25zJG9mZnNldCIsIl9kYXRhJHN0YXRlJHBsYWNlbWVudCIsIl9vcHRpb25zJHRldGhlciIsInRldGhlciIsIl9vcHRpb25zJHRldGhlck9mZnNldCIsInRldGhlck9mZnNldCIsImFsdEF4aXMiLCJ0ZXRoZXJPZmZzZXRWYWx1ZSIsIm5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZSIsIm9mZnNldE1vZGlmaWVyU3RhdGUiLCJfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQiLCJtYWluU2lkZSIsImFsdFNpZGUiLCJhZGRpdGl2ZSIsIm1pbkxlbiIsIm1heExlbiIsImFycm93UGFkZGluZ09iamVjdCIsImFycm93UGFkZGluZ01pbiIsImFycm93UGFkZGluZ01heCIsImFycm93TGVuIiwibWluT2Zmc2V0IiwibWF4T2Zmc2V0IiwiY2xpZW50T2Zmc2V0Iiwib2Zmc2V0TW9kaWZpZXJWYWx1ZSIsInRldGhlck1pbiIsInRldGhlck1heCIsInByZXZlbnRlZE9mZnNldCIsIl9vZmZzZXRNb2RpZmllclN0YXRlJDIiLCJfbWFpblNpZGUiLCJfYWx0U2lkZSIsIl9vZmZzZXQiLCJfbGVuIiwiX21pbiIsIl9tYXgiLCJpc09yaWdpblNpZGUiLCJfb2Zmc2V0TW9kaWZpZXJWYWx1ZSIsIl90ZXRoZXJNaW4iLCJfdGV0aGVyTWF4IiwiX3ByZXZlbnRlZE9mZnNldCIsImVsZW1lbnRPclZpcnR1YWxFbGVtZW50IiwiaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQiLCJvZmZzZXRQYXJlbnRJc1NjYWxlZCIsIm1vZGlmaWVycyIsInZpc2l0ZWQiLCJtb2RpZmllciIsInJlcXVpcmVzIiwiZGVwIiwiZGVwTW9kaWZpZXIiLCJvcmRlcmVkTW9kaWZpZXJzIiwicGhhc2UiLCJwZW5kaW5nIiwiZ2VuZXJhdG9yT3B0aW9ucyIsIl9nZW5lcmF0b3JPcHRpb25zIiwiX2dlbmVyYXRvck9wdGlvbnMkZGVmIiwiZGVmYXVsdE1vZGlmaWVycyIsIl9nZW5lcmF0b3JPcHRpb25zJGRlZjIiLCJkZWZhdWx0T3B0aW9ucyIsImVmZmVjdENsZWFudXBGbnMiLCJpc0Rlc3Ryb3llZCIsInNldE9wdGlvbnNBY3Rpb24iLCJjbGVhbnVwTW9kaWZpZXJFZmZlY3RzIiwicnVuTW9kaWZpZXJFZmZlY3RzIiwiX3N0YXRlJGVsZW1lbnRzIiwiX3N0YXRlJG9yZGVyZWRNb2RpZmllIiwiX3N0YXRlJG9yZGVyZWRNb2RpZmllMiIsIl9yZWYkb3B0aW9ucyIsImNsZWFudXBGbiIsIm5vb3BGbiIsImNyZWF0ZVBvcHBlciIsImNvbXB1dGVTdHlsZXMiLCJhcHBseVN0eWxlcyIsImZsaXAiLCJwcmV2ZW50T3ZlcmZsb3ciLCJhcnJvdyIsImhpZGUiLCJhYnNEZWx0YVgiLCJkaXJlY3Rpb24iLCJpdGVtcyIsImFjdGl2ZUluZGV4Iiwib3JkZXIiLCJpbWciLCJzd2lwZUNvbmZpZyIsImFjdGl2ZUluZGljYXRvciIsIm5ld0FjdGl2ZUluZGljYXRvciIsImVsZW1lbnRJbnRlcnZhbCIsImlzTmV4dCIsIm5leHRFbGVtZW50IiwibmV4dEVsZW1lbnRJbmRleCIsInRyaWdnZXJFdmVudCIsImV2ZW50TmFtZSIsImlzQ3ljbGluZyIsImRpcmVjdGlvbmFsQ2xhc3NOYW1lIiwib3JkZXJDbGFzc05hbWUiLCJjb21wbGV0ZUNhbGxCYWNrIiwiY2Fyb3VzZWwiLCJzbGlkZUluZGV4IiwiY2Fyb3VzZWxzIiwidG9nZ2xlTGlzdCIsImZpbHRlckVsZW1lbnQiLCJmb3VuZEVsZW1lbnQiLCJhY3RpdmVDaGlsZHJlbiIsImFjdGl2ZUluc3RhbmNlIiwic2Nyb2xsU2l6ZSIsInRyaWdnZXIiLCJjaGlsZHJlbiIsInRyaWdnZXJBcnJheSIsImlzT3BlbiIsInJlZmVyZW5jZUVsZW1lbnQiLCJwb3BwZXJDb25maWciLCJQb3BwZXIuY3JlYXRlUG9wcGVyIiwicGFyZW50RHJvcGRvd24iLCJpc0VuZCIsInBvcHBlckRhdGEiLCJkZWZhdWx0QnNQb3BwZXJDb25maWciLCJvcGVuVG9nZ2xlcyIsImNvbXBvc2VkUGF0aCIsImlzTWVudVRhcmdldCIsImlzSW5wdXQiLCJpc0VzY2FwZUV2ZW50IiwiaXNVcE9yRG93bkV2ZW50IiwiZ2V0VG9nZ2xlQnV0dG9uIiwiY29tcGxldGVDYWxsYmFjayIsImNsaWNrQ2FsbGJhY2siLCJhbGxvd2VkQXR0cmlidXRlTGlzdCIsImF0dHJpYnV0ZU5hbWUiLCJhdHRyaWJ1dGVSZWdleCIsInVuc2FmZUh0bWwiLCJhbGxvd0xpc3QiLCJzYW5pdGl6ZUZ1bmN0aW9uIiwiY3JlYXRlZERvY3VtZW50IiwiZWxlbWVudE5hbWUiLCJhdHRyaWJ1dGVMaXN0IiwiYWxsb3dlZEF0dHJpYnV0ZXMiLCJ0ZW1wbGF0ZVdyYXBwZXIiLCJleHRyYUNsYXNzIiwidGVtcGxhdGVFbGVtZW50IiwiaXNJblRoZURvbSIsInRpcCIsInRpcElkIiwiYXR0YWNobWVudCIsInRyaWdnZXJzIiwiZXZlbnRJbiIsImV2ZW50T3V0IiwidGl0bGUiLCJkYXRhQXR0cmlidXRlcyIsImRhdGFBdHRyaWJ1dGUiLCJzZWN0aW9uIiwib2JzZXJ2YWJsZVNlY3Rpb24iLCJ0YXJnZXRFbGVtZW50IiwiZW50cnkiLCJhY3RpdmF0ZSIsInBhcmVudFNjcm9sbFRvcCIsInVzZXJTY3JvbGxzRG93biIsImVudHJ5SXNMb3dlclRoYW5QcmV2aW91cyIsInRhcmdldExpbmtzIiwiYW5jaG9yIiwibGlzdEdyb3VwIiwiYWN0aXZlTm9kZXMiLCJzcHkiLCJpbm5lckVsZW0iLCJhY3RpdmUiLCJoaWRlRXZlbnQiLCJyZWxhdGVkRWxlbSIsIm5leHRBY3RpdmVFbGVtZW50IiwiaXNBY3RpdmUiLCJvdXRlckVsZW0iLCJvcGVuIiwiaXNJbnRlcmFjdGluZyIsImxvb2tVcEZpZWxkIiwidGFyZ2V0UmVjb3JkcyIsInIiLCJ1cGRhdGVSZWNvcmRzIiwiZGlhbG9nIiwibW9kYWxIVE1MIiwiZXYiLCJkaWFsb2dCb2R5IiwiaHRtbHJvdyIsImxvb2tVcEZpZWxkcyIsImV2ZW50SWQiLCJmbG93IiwibmV4dEFjdGlvbiIsImFjdGlvbiIsIm5leHRJbnB1dCIsImRpc3BsYXlOYW1lIiwicGxhY2Vob2xkZXIiLCJtb2RlbFZhbHVlIiwiaW5wdXRQb2ludCIsIm91dHB1dFBvaW50cyIsImFjdGlvblByb3BzIiwiZGVmUHJvcCIsInByb3BWYWx1ZSIsInN1YlRpdGxlIiwiYWN0aW9uTm9kZXMiLCJuZXh0Tm9kZUlkcyIsInBhcnNlZE9iamVjdCIsIm5vZGVDbGFzcyIsImFjdGlvbkZsb3ciLCJnZXRDaGFuZ2VFdmVudHMiLCJnZXRDbGlja0V2ZW50cyIsImdldEtpbnRvbmVFdmVudHMiLCJjaGFuZ2VFdmVudHMiLCJjbGlja0V2ZW50cyIsImtpbnRvbmVFdmVudHMiLCJmbG93aW5mbyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O2lCQVVFLFNBQVVBLEVBQVFDLEVBQVUsQ0FhNUJDLEVBQUEsUUFBaUJGLEVBQU8sU0FDdkJDLEVBQVNELEVBQVEsRUFBTSxFQUN2QixTQUFVRyxFQUFJLENBQ2IsR0FBSyxDQUFDQSxFQUFFLFNBQ1AsTUFBTSxJQUFJLE1BQU8sNENBRWxCLE9BQU9GLEVBQVNFLEVBQ3BCLENBTUEsR0FBSyxPQUFPLE9BQVcsSUFBYyxPQUFTQyxlQUFNLFNBQVVDLEVBQVFDLEVBQVcsQ0FRakYsSUFBSUMsRUFBTSxDQUFBLEVBRU5DLEVBQVcsT0FBTyxlQUVsQkMsRUFBUUYsRUFBSSxNQUVaRyxFQUFPSCxFQUFJLEtBQU8sU0FBVUksRUFBUSxDQUN2QyxPQUFPSixFQUFJLEtBQUssS0FBTUksQ0FBSyxDQUMzQixFQUFHLFNBQVVBLEVBQVEsQ0FDckIsT0FBT0osRUFBSSxPQUFPLE1B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QUFZLENBQzNDLE1BQUE0a0QsRUFBVyxRQUFRNWtELEVBQU0sSUFBSSxFQUM3Qm9qRCxFQUFLLFdBQVcsU0FBU3dCLEVBQVMsT0FBTyxFQUMvQyxPQUFHeEIsSUFBTyxRQUVSLE1BRGdCLElBQUksY0FBY3BqRCxFQUFNLEtBQUtvakQsRUFBS3BqRCxDQUFLLEVBQ3pDLE9BRVRBLENBQUEsQ0FDUixFQUVBeWtELEVBQWEsT0FBTyxHQUVyQixRQUFRLE9BQU8sR0FBR0EsRUFBY3prRCxHQUFZLENBQ3BDLE1BQUE0a0QsRUFBVyxRQUFRNWtELEVBQU0sSUFBSSxFQUM3Qm9qRCxFQUFLLFdBQVcsU0FBU3dCLEVBQVMsT0FBTyxFQUMvQyxPQUFHeEIsSUFBTyxRQUNRLElBQUksY0FBY3BqRCxFQUFNLEtBQUtvakQsRUFBS3BqRCxDQUFLLEVBQy9DLEtBQUssRUFFUkEsQ0FBQSxDQUNSLEVBRUEwa0QsRUFBWSxPQUFPLEdBQ1JBLEVBQUEsUUFBU2hILEdBQW1CLENBQ3RDLEVBQUUsUUFBUSxFQUFFLEdBQUdBLEVBQVUsU0FBVSxDQUNqQyxNQUFNMTlDLEVBQU0sUUFBUSxJQUFJLE9BQU8sSUFBSSxFQUM3QjRrRCxFQUFXLFFBQVFsSCxDQUFTLEVBQzVCMEYsRUFBSyxXQUFXLFNBQVN3QixFQUFTLE9BQU8sRUFDNUN4QixJQUFPLFFBRVIsTUFEZ0IsSUFBSSxjQUFjMUYsRUFBVTBGLEVBQUtwakQsQ0FBSyxFQUN4QyxPQUVoQixNQUFNc1UsRUFBU3RVLEVBQU0sT0FDckIsUUFBUSxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQUFzVSxDQUFPLENBQUEsQ0FBQSxDQUNoQyxDQUFBLENBQ0YsQ0FFUCxDQUFDIiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTI3LDEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDddfQ== diff --git a/plugin/kintone-addins/src/actions/mail-check.ts b/plugin/kintone-addins/src/actions/mail-check.ts index b1ed8cc..fe937fa 100644 --- a/plugin/kintone-addins/src/actions/mail-check.ts +++ b/plugin/kintone-addins/src/actions/mail-check.ts @@ -51,13 +51,19 @@ export class MailCheckAction implements IAction { const value = record[this.props.field.code].value; if (this.props.emailCheck === '厳格') { - if (!/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/.test(value)) { + if (!/^[a-zA-Z0-9_-¥.]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/.test(value)) { record[this.props.field.code].error = this.props.message; } + else { + record[this.props.field.code].error = null; + } } else if (this.props.emailCheck === 'ゆるめ') { if (!/^[^@]+@[^@]+$/.test(value)) { record[this.props.field.code].error = this.props.message; } + else { + record[this.props.field.code].error = null; + } } else { result = { canNext: true, diff --git a/plugin/kintone-addins/src/index.ts b/plugin/kintone-addins/src/index.ts index 0a740e8..c4eab19 100644 --- a/plugin/kintone-addins/src/index.ts +++ b/plugin/kintone-addins/src/index.ts @@ -42,7 +42,12 @@ $(function (){ const flow=ActionFlow.fromJSON(flowinfo.content); if(flow!==undefined){ const process = new ActionProcess(event.type,flow,event); - process.exec(); + process.exec().then((res)=>{ + const record = event.record; + kintone.app.record.set({record}); + }).catch((err)=>{ + console.error(err); + }); } return event; }); @@ -58,7 +63,7 @@ $(function (){ await process.exec(); } const record = event.record; - kintone.app.record.set({record}) + kintone.app.record.set({record}); }); }); }