"),super.end(e);let t=this._hub.getClient();if(t&&t.emit&&t.emit("finishTransaction",this),!0!==this._sampled){n.DEBUG_BUILD&&(0,i.logger).log("[Tracing] Discarding transaction because its trace was not chosen to be sampled."),t&&t.recordDroppedEvent("sample_rate","transaction");return}let o=this.spanRecorder?this.spanRecorder.spans.filter(e=>e!==this&&(0,p.spanToJSON)(e).timestamp):[];if(this._trimEnd&&o.length>0){let e=o.map(e=>(0,p.spanToJSON)(e).timestamp).filter(Boolean);this._endTime=e.reduce((e,t)=>e>t?e:t)}let{scope:r,isolationScope:d}=(0,c.getCapturedScopesOnSpan)(this),{metadata:u}=this,{source:m}=u,g={contexts:{...this._contexts,trace:(0,p.spanToTraceContext)(this)},spans:o,start_timestamp:this._startTime,tags:this.tags,timestamp:this._endTime,transaction:this._name,type:"transaction",sdkProcessingMetadata:{...u,capturedSpanScope:r,capturedSpanIsolationScope:d,...(0,a.dropUndefinedKeys)({dynamicSamplingContext:(0,l.getDynamicSamplingContextFromSpan)(this)})},_metrics_summary:(0,s.getMetricSummaryJsonForSpan)(this),...m&&{transaction_info:{source:m}}};return Object.keys(this._measurements).length>0&&(n.DEBUG_BUILD&&(0,i.logger).log("[Measurements] Adding measurements to transaction",JSON.stringify(this._measurements,void 0,2)),g.measurements=this._measurements),n.DEBUG_BUILD&&(0,i.logger).log(`[Tracing] Finishing ${this.op} transaction: ${this._name}.`),g}}}),X("ibVDy",function(e,t){W(e.exports,"sampleTransaction",()=>p),W(e.exports,"isValidSampleRate",()=>l);var a=O("jVURz"),i=O("k2ErF"),n=O("2Mb7l"),o=O("9GA7E"),s=O("7z6ft"),r=O("iD1up");function p(e,t,a){let p;return(0,s.hasTracingEnabled)(t)?void 0!==e.sampled?e.setAttribute(o.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE,Number(e.sampled)):("function"==typeof t.tracesSampler?(p=t.tracesSampler(a),e.setAttribute(o.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE,Number(p))):void 0!==a.parentSampled?p=a.parentSampled:void 0!==t.tracesSampleRate?(p=t.tracesSampleRate,e.setAttribute(o.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE,Number(p))):(p=1,e.setAttribute(o.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE,p)),l(p))?p?(e.sampled=Math.random()1)||(n.DEBUG_BUILD&&(0,i.logger).warn(`[Tracing] Given sample rate is invalid. Sample rate must be between 0 and 1. Got ${e}.`),!1)}}),X("fziSu",function(e,t){W(e.exports,"setMeasurement",()=>i);var a=O("050Gq");function i(e,t,i){let n=(0,a.getActiveTransaction)();n&&n.setMeasurement(e,t,i)}}),X("9TgzM",function(e,t){W(e.exports,"ServerRuntimeClient",()=>b);var a=O("51Ehf"),i=O("k2ErF"),n=O("kcLAY"),o=O("1gT0D"),s=O("5nomz"),r=O("gegwf"),p=O("2Mb7l"),l=O("deYUe"),d=O("iLRyb"),c=O("j1tEK"),u=O("jfDa9"),m=O("iD1up"),g=O("dwLFO"),h=O("cCmfn");class b extends s.BaseClient{constructor(e){(0,u.addTracingExtensions)(),super(e),e._experiments&&e._experiments.metricsAggregator&&(this.metricsAggregator=new d.MetricsAggregator(this))}eventFromException(e,t){return(0,n.resolvedSyncPromise)((0,a.eventFromUnknownInput)((0,l.getClient)(),this._options.stackParser,e,t))}eventFromMessage(e,t="info",i){return(0,n.resolvedSyncPromise)((0,a.eventFromMessage)(this._options.stackParser,e,t,i,this._options.attachStacktrace))}captureException(e,t,a){if(this._options.autoSessionTracking&&this._sessionFlusher&&a){let e=a.getRequestSession();e&&"ok"===e.status&&(e.status="errored")}return super.captureException(e,t,a)}captureEvent(e,t,a){if(this._options.autoSessionTracking&&this._sessionFlusher&&a&&"exception"===(e.type||"exception")&&e.exception&&e.exception.values&&e.exception.values.length>0){let e=a.getRequestSession();e&&"ok"===e.status&&(e.status="errored")}return super.captureEvent(e,t,a)}close(e){return this._sessionFlusher&&this._sessionFlusher.close(),super.close(e)}initSessionFlusher(){let{release:e,environment:t}=this._options;e?this._sessionFlusher=new c.SessionFlusher(this,{release:e,environment:t}):p.DEBUG_BUILD&&(0,i.logger).warn("Cannot initialise an instance of SessionFlusher if no release is provided!")}captureCheckIn(e,t,a){let n="checkInId"in e&&e.checkInId?e.checkInId:(0,o.uuid4)();if(!this._isEnabled())return p.DEBUG_BUILD&&(0,i.logger).warn("SDK not enabled, will not capture checkin."),n;let{release:s,environment:l,tunnel:d}=this.getOptions(),c={check_in_id:n,monitor_slug:e.monitorSlug,status:e.status,release:s,environment:l};"duration"in e&&(c.duration=e.duration),t&&(c.monitor_config={schedule:t.schedule,checkin_margin:t.checkinMargin,max_runtime:t.maxRuntime,timezone:t.timezone});let[u,m]=this._getTraceInfoFromScope(a);m&&(c.contexts={trace:m});let g=(0,r.createCheckInEnvelope)(c,u,this.getSdkMetadata(),d,this.getDsn());return p.DEBUG_BUILD&&(0,i.logger).info("Sending checkin:",e.monitorSlug,e.status),this._sendEnvelope(g),n}_captureRequestSession(){this._sessionFlusher?this._sessionFlusher.incrementSessionStatusCount():p.DEBUG_BUILD&&(0,i.logger).warn("Discarded request mode session because autoSessionTracking option was disabled")}_prepareEvent(e,t,a,i){return this._options.platform&&(e.platform=e.platform||this._options.platform),this._options.runtime&&(e.contexts={...e.contexts,runtime:(e.contexts||{}).runtime||this._options.runtime}),this._options.serverName&&(e.server_name=e.server_name||this._options.serverName),super._prepareEvent(e,t,a,i)}_getTraceInfoFromScope(e){if(!e)return[void 0,void 0];let t=e.getSpan();if(t)return[(0,g.getRootSpan)(t)?(0,h.getDynamicSamplingContextFromSpan)(t):void 0,(0,m.spanToTraceContext)(t)];let{traceId:a,spanId:i,parentSpanId:n,dsc:o}=e.getPropagationContext(),s={trace_id:a,span_id:i,parent_span_id:n};return o?[o,s]:[(0,h.getDynamicSamplingContextFromClient)(a,this,e),s]}}}),X("51Ehf",function(e,t){W(e.exports,"exceptionFromError",()=>r),W(e.exports,"eventFromUnknownInput",()=>p),W(e.exports,"eventFromMessage",()=>l);var a=O("jVURz"),i=O("1gT0D"),n=O("jD1jC"),o=O("e4IUz");function s(e,t){return e(t.stack||"",1)}function r(e,t){let a={type:t.name||t.constructor.name,value:t.message},i=s(e,t);return i.length&&(a.stacktrace={frames:i}),a}function p(e,t,s,p){let l;let d="function"==typeof e?e().getClient():e,c=s,u=p&&p.data&&p.data.mechanism||{handled:!0,type:"generic"};if(!(0,a.isError)(s)){if((0,a.isPlainObject)(s)){let e=d&&d.getOptions().normalizeDepth;l={__serialized__:(0,n.normalizeToSize)(s,e)};let t=function(e){if("name"in e&&"string"==typeof e.name){let t=`'${e.name}' captured as exception`;return"message"in e&&"string"==typeof e.message&&(t+=` with message '${e.message}'`),t}return"message"in e&&"string"==typeof e.message?e.message:`Object captured as exception with keys: ${(0,o.extractExceptionKeysForMessage)(e)}`}(s);(c=p&&p.syntheticException||Error(t)).message=t}else(c=p&&p.syntheticException||Error(s)).message=s;u.synthetic=!0}let m={exception:{values:[r(t,c)]}};return l&&(m.extra=l),(0,i.addExceptionTypeValue)(m,void 0,void 0),(0,i.addExceptionMechanism)(m,u),{...m,event_id:p&&p.event_id}}function l(e,t,i="info",n,o){let r={event_id:n&&n.event_id,level:i};if(o&&n&&n.syntheticException){let a=s(e,n.syntheticException);a.length&&(r.exception={values:[{value:t,stacktrace:{frames:a}}]})}if((0,a.isParameterizedString)(t)){let{__sentry_template_string__:e,__sentry_template_values__:a}=t;return r.logentry={message:e,params:a},r}return r.message=t,r}}),X("gegwf",function(e,t){W(e.exports,"createCheckInEnvelope",()=>o);var a=O("agl5x"),i=O("e4IUz"),n=O("8zTrc");function o(e,t,o,s,r){let p={sent_at:new Date().toISOString()};return o&&o.sdk&&(p.sdk={name:o.sdk.name,version:o.sdk.version}),s&&r&&(p.dsn=(0,n.dsnToString)(r)),t&&(p.trace=(0,i.dropUndefinedKeys)(t)),(0,a.createEnvelope)(p,[[{type:"check_in"},e]])}}),X("iLRyb",function(e,t){W(e.exports,"MetricsAggregator",()=>r);var a=O("iYy7D"),i=O("3SIMf"),n=O("6DYvy"),o=O("6CIba"),s=O("duvvp");class r{constructor(e){this._client=e,this._buckets=new Map,this._bucketsTotalWeight=0,this._interval=setInterval(()=>this._flush(),i.DEFAULT_FLUSH_INTERVAL),this._flushShift=Math.floor(Math.random()*i.DEFAULT_FLUSH_INTERVAL/1e3),this._forceFlush=!1}add(e,t,r,p="none",l={},d=(0,a.timestampInSeconds)()){let c=Math.floor(d),u=t.replace(i.NAME_AND_TAG_KEY_NORMALIZATION_REGEX,"_"),m=(0,s.sanitizeTags)(l),g=(0,s.getBucketKey)(e,u,p,m),h=this._buckets.get(g),b=h&&e===i.SET_METRIC_TYPE?h.metric.weight:0;h?(h.metric.add(r),h.timestamp=i.MAX_WEIGHT&&this.flush()}flush(){this._forceFlush=!0,this._flush()}close(){this._forceFlush=!0,clearInterval(this._interval),this._flush()}_flush(){if(this._forceFlush){this._forceFlush=!1,this._bucketsTotalWeight=0,this._captureMetrics(this._buckets),this._buckets.clear();return}let e=Math.floor((0,a.timestampInSeconds)())-i.DEFAULT_FLUSH_INTERVAL/1e3-this._flushShift,t=new Map;for(let[a,i]of this._buckets)i.timestamp<=e&&(t.set(a,i),this._bucketsTotalWeight-=i.metric.weight);for(let[e]of t)this._buckets.delete(e);this._captureMetrics(t)}_captureMetrics(e){if(e.size>0&&this._client.captureAggregateMetrics){let t=Array.from(e).map(([,e])=>e);this._client.captureAggregateMetrics(t)}}}}),X("6DYvy",function(e,t){W(e.exports,"METRIC_MAP",()=>n);var a=O("3SIMf"),i=O("duvvp");let n={[a.COUNTER_METRIC_TYPE]:class{constructor(e){this._value=e}get weight(){return 1}add(e){this._value+=e}toString(){return`${this._value}`}},[a.GAUGE_METRIC_TYPE]:class{constructor(e){this._last=e,this._min=e,this._max=e,this._sum=e,this._count=1}get weight(){return 5}add(e){this._last=e,ethis._max&&(this._max=e),this._sum+=e,this._count++}toString(){return`${this._last}:${this._min}:${this._max}:${this._sum}:${this._count}`}},[a.DISTRIBUTION_METRIC_TYPE]:class{constructor(e){this._value=[e]}get weight(){return this._value.length}add(e){this._value.push(e)}toString(){return this._value.join(":")}},[a.SET_METRIC_TYPE]:class{constructor(e){this.first=e,this._value=new Set([e])}get weight(){return this._value.size}add(e){this._value.add(e)}toString(){return Array.from(this._value).map(e=>"string"==typeof e?(0,i.simpleHash)(e):e).join(":")}}}}),X("j1tEK",function(e,t){W(e.exports,"SessionFlusher",()=>n);var a=O("e4IUz"),i=O("deYUe");class n{constructor(e,t){this._client=e,this.flushTimeout=60,this._pendingAggregates={},this._isEnabled=!0,this._intervalId=setInterval(()=>this.flush(),1e3*this.flushTimeout),this._sessionAttrs=t}flush(){let e=this.getSessionAggregates();0!==e.aggregates.length&&(this._pendingAggregates={},this._client.sendSession(e))}getSessionAggregates(){let e=Object.keys(this._pendingAggregates).map(e=>this._pendingAggregates[parseInt(e)]),t={attrs:this._sessionAttrs,aggregates:e};return(0,a.dropUndefinedKeys)(t)}close(){clearInterval(this._intervalId),this._isEnabled=!1,this.flush()}incrementSessionStatusCount(){if(!this._isEnabled)return;let e=(0,i.getCurrentScope)(),t=e.getRequestSession();t&&t.status&&(this._incrementSessionStatusCount(t.status,new Date),e.setRequestSession(void 0))}_incrementSessionStatusCount(e,t){let a=new Date(t).setSeconds(0,0);this._pendingAggregates[a]=this._pendingAggregates[a]||{};let i=this._pendingAggregates[a];switch(i.started||(i.started=new Date(a).toISOString()),e){case"errored":return i.errored=(i.errored||0)+1,i.errored;case"ok":return i.exited=(i.exited||0)+1,i.exited;default:return i.crashed=(i.crashed||0)+1,i.crashed}}}}),X("c2wyx",function(e,t){W(e.exports,"initAndBind",()=>s),W(e.exports,"setCurrentClient",()=>r);var a=O("k2ErF"),i=O("2Mb7l"),n=O("deYUe"),o=O("eCOpK");function s(e,t){!0===t.debug&&(i.DEBUG_BUILD?(0,a.logger).enable():(0,a.consoleSandbox)(()=>{console.warn("[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.")})),(0,n.getCurrentScope)().update(t.initialScope);let o=new e(t);r(o),o.init?o.init():o.setupIntegrations&&o.setupIntegrations()}function r(e){let t=(0,o.getCurrentHub)().getStackTop();t.client=e,t.scope.setClient(e)}}),X("4i5AO",function(e,t){W(e.exports,"createSpanEnvelope",()=>n);var a=O("agl5x"),i=O("8zTrc");function n(e,t){let n={sent_at:new Date().toISOString()};t&&(n.dsn=(0,i.dsnToString)(t));let s=e.map(o);return(0,a.createEnvelope)(n,s)}function o(e){return[{type:"span"},e]}}),X("ehWym",function(e,t){function a(e,t){let a=t&&void 0!==t.getClient?t.getClient():t,n=a&&a.getDsn(),o=a&&a.getOptions().tunnel;return!!n&&e.includes(n.host)||!!o&&i(e)===i(o)}function i(e){return"/"===e[e.length-1]?e.slice(0,-1):e}W(e.exports,"isSentryRequestUrl",()=>a)}),X("3dN9k",function(e,t){W(e.exports,"parameterize",()=>a);function a(e,...t){let i=new String(String.raw(e,...t));return i.__sentry_template_string__=e.join("\0").replace(/%/g,"%%").replace(/\0/g,"%s"),i.__sentry_template_values__=t,i}}),X("7NWiQ",function(e,t){W(e.exports,"applySdkMetadata",()=>i);var a=O("039qT");function i(e,t,i=[t],n="npm"){let o=e._metadata||{};o.sdk||(o.sdk={name:`sentry.javascript.${t}`,packages:i.map(e=>({name:`${n}:@sentry/${e}`,version:a.SDK_VERSION})),version:a.SDK_VERSION}),e._metadata=o}}),X("l9Z6v",function(e,t){W(e.exports,"requestDataIntegration",()=>r),W(e.exports,"RequestData",()=>p);var a=O("jpnao"),i=O("hVqbS"),n=O("iD1up");let o={include:{cookies:!0,data:!0,headers:!0,ip:!1,query_string:!0,url:!0,user:{id:!0,username:!0,email:!0}},transactionNamingScheme:"methodPath"},s="RequestData",r=(0,i.defineIntegration)((e={})=>{let t=a.addRequestDataToEvent,i={...o,...e,include:{method:!0,...o.include,...e.include,user:e.include&&"boolean"==typeof e.include.user?e.include.user:{...o.include.user,...(e.include||{}).user}}};return{name:s,setupOnce(){},processEvent(e,o,s){let{transactionNamingScheme:r}=i,{sdkProcessingMetadata:p={}}=e,l=p.request;if(!l)return e;let d=t(e,l,p.requestDataOptionsFromExpressHandler||p.requestDataOptionsFromGCPWrapper||function(e){let t;let{transactionNamingScheme:a,include:{ip:i,user:n,...o}}=e,s=[];for(let[e,t]of Object.entries(o))t&&s.push(e);if(void 0===n)t=!0;else if("boolean"==typeof n)t=n;else{let e=[];for(let[t,a]of Object.entries(n))a&&e.push(t);t=e}return{include:{ip:i,user:t,request:0!==s.length?s:void 0,transaction:a}}}(i));if("transaction"===e.type||"handler"===r)return d;let c=l._sentryTransaction;if(c){let e=(0,n.spanToJSON)(c).description||"",t="sentry.javascript.nextjs"===function(e){try{return e.getOptions()._metadata.sdk.name}catch(e){return}}(s)?e.startsWith("/api"):"path"!==r,[i]=(0,a.extractPathForTransaction)(l,{path:!0,method:t,customRoute:e});d.transaction=i}return d}}}),p=(0,i.convertIntegrationFnToClass)(s,r)}),X("jpnao",function(e,t){W(e.exports,"DEFAULT_USER_INCLUDES",()=>p),W(e.exports,"addRequestDataToTransaction",()=>l),W(e.exports,"extractPathForTransaction",()=>d),W(e.exports,"extractRequestData",()=>c),W(e.exports,"addRequestDataToEvent",()=>u);var a=O("eBTPg");O("aoHsm");var i=O("jVURz");O("k2ErF");var n=O("jD1jC"),o=O("6szME");let s={ip:!1,request:!0,transaction:!0,user:!0},r=["cookies","data","headers","method","query_string","url"],p=["id","username","email"];function l(e,t,a){if(e){if(!e.metadata.source||"url"===e.metadata.source){let[a,i]=d(t,{path:!0,method:!0});e.updateName(a),e.setMetadata({source:i})}e.setAttribute("url",t.originalUrl||t.url),t.baseUrl&&e.setAttribute("baseUrl",t.baseUrl),e.setData("query",m(t,a))}}function d(e,t={}){let a=e.method&&e.method.toUpperCase(),i="",n="url";t.customRoute||e.route?(i=t.customRoute||`${e.baseUrl||""}${e.route&&e.route.path}`,n="route"):(e.originalUrl||e.url)&&(i=(0,o.stripUrlQueryAndFragment)(e.originalUrl||e.url||""));let s="";return t.method&&a&&(s+=a),t.method&&t.path&&(s+=" "),t.path&&i&&(s+=i),[s,n]}function c(e,t){let{include:o=r,deps:s}=t||{},p={},l=e.headers||{},d=e.method,c=l.host||e.hostname||e.host||"",u="https"===e.protocol||e.socket&&e.socket.encrypted?"https":"http",g=e.originalUrl||e.url||"",h=g.startsWith(u)?g:`${u}://${c}${g}`;return o.forEach(t=>{switch(t){case"headers":p.headers=l,o.includes("cookies")||delete p.headers.cookie;break;case"method":p.method=d;break;case"url":p.url=h;break;case"cookies":p.cookies=e.cookies||l.cookie&&(0,a.parseCookie)(l.cookie)||{};break;case"query_string":p.query_string=m(e,s);break;case"data":if("GET"===d||"HEAD"===d)break;void 0!==e.body&&(p.data=(0,i.isString)(e.body)?e.body:JSON.stringify((0,n.normalize)(e.body)));break;default:({}).hasOwnProperty.call(e,t)&&(p[t]=e[t])}}),p}function u(e,t,a){let n={...s,...a&&a.include};if(n.request){let i=Array.isArray(n.request)?c(t,{include:n.request,deps:a&&a.deps}):c(t,{deps:a&&a.deps});e.request={...e.request,...i}}if(n.user){let a=t.user&&(0,i.isPlainObject)(t.user)?function(e,t){let a={};return(Array.isArray(t)?t:p).forEach(t=>{e&&t in e&&(a[t]=e[t])}),a}(t.user,n.user):{};Object.keys(a).length&&(e.user={...e.user,...a})}if(n.ip){let a=t.ip||t.socket&&t.socket.remoteAddress;a&&(e.user={...e.user,ip_address:a})}return n.transaction&&!e.transaction&&(e.transaction=function(e,t){switch(t){case"path":return d(e,{path:!0})[0];case"handler":return e.route&&e.route.stack&&e.route.stack[0]&&e.route.stack[0].name||"";default:{let t=e._reconstructedRoute?e._reconstructedRoute:void 0;return d(e,{path:!0,method:!0,customRoute:t})[0]}}}(t,n.transaction)),e}function m(e,t){let a=e.originalUrl||e.url||"";if(a){a.startsWith("/")&&(a=`http://dogs.are.great${a}`);try{return e.query||"undefined"!=typeof URL&&new URL(a).search.slice(1)||t&&t.url&&t.url.parse(a).query||void 0}catch(e){return}}}}),X("eBTPg",function(e,t){W(e.exports,"parseCookie",()=>a);function a(e){let t={},a=0;for(;ae.length>0&&","!==e).length}function o(e){let{protocol:t,host:a,path:i}=e,n=a&&a.replace(/^.*@/,"[filtered]:[filtered]@").replace(/(:80)$/,"").replace(/(:443)$/,"")||"";return`${t?`${t}://`:""}${n}${i}`}W(e.exports,"parseUrl",()=>a),W(e.exports,"stripUrlQueryAndFragment",()=>i),W(e.exports,"getNumberOfUrlSegments",()=>n),W(e.exports,"getSanitizedUrlString",()=>o)}),X("gi3Kq",function(e,t){W(e.exports,"linkedErrorsIntegration",()=>s),W(e.exports,"LinkedErrors",()=>r);var a=O("5q3Fq"),i=O("51Ehf"),n=O("hVqbS");let o="LinkedErrors",s=(0,n.defineIntegration)((e={})=>{let t=e.limit||5,n=e.key||"cause";return{name:o,setupOnce(){},preprocessEvent(e,o,s){let r=s.getOptions();(0,a.applyAggregateErrorsToEvent)(i.exceptionFromError,r.stackParser,r.maxValueLength,n,t,e,o)}}}),r=(0,n.convertIntegrationFnToClass)(o,s)}),X("5q3Fq",function(e,t){W(e.exports,"applyAggregateErrorsToEvent",()=>n);var a=O("jVURz"),i=O("c6AFW");function n(e,t,n=250,r,p,l,d){if(!l.exception||!l.exception.values||!d||!(0,a.isInstanceOf)(d.originalException,Error))return;let c=l.exception.values.length>0?l.exception.values[l.exception.values.length-1]:void 0;c&&(l.exception.values=(function e(t,i,n,r,p,l,d,c){if(l.length>=n+1)return l;let u=[...l];if((0,a.isInstanceOf)(r[p],Error)){o(d,c);let a=t(i,r[p]),l=u.length;s(a,p,l,c),u=e(t,i,n,r[p],p,[a,...u],a,l)}return Array.isArray(r.errors)&&r.errors.forEach((r,l)=>{if((0,a.isInstanceOf)(r,Error)){o(d,c);let a=t(i,r),m=u.length;s(a,`errors[${l}]`,m,c),u=e(t,i,n,r,p,[a,...u],a,m)}}),u})(e,t,p,d.originalException,r,l.exception.values,c,0).map(e=>(e.value&&(e.value=(0,i.truncate)(e.value,n)),e)))}function o(e,t){e.mechanism=e.mechanism||{type:"generic",handled:!0},e.mechanism={...e.mechanism,..."AggregateError"===e.type&&{is_exception_group:!0},exception_id:t}}function s(e,t,a,i){e.mechanism=e.mechanism||{type:"generic",handled:!0},e.mechanism={...e.mechanism,type:"chained",source:t,exception_id:a,parent_id:i}}}),X("3pHvJ",function(e,t){W(e.exports,"FunctionToString",()=>O("7B5Oi").FunctionToString),W(e.exports,"InboundFilters",()=>O("aT332").InboundFilters),W(e.exports,"LinkedErrors",()=>O("gi3Kq").LinkedErrors),O("7B5Oi"),O("aT332"),O("gi3Kq")}),X("kpMy9",function(e,t){W(e.exports,"metrics",()=>l);var a=O("k2ErF"),i=O("2Mb7l"),n=O("deYUe"),o=O("iD1up"),s=O("3SIMf"),r=O("384sO");function p(e,t,s,r={}){let p=(0,n.getClient)(),l=(0,n.getCurrentScope)();if(p){if(!p.metricsAggregator){i.DEBUG_BUILD&&(0,a.logger).warn("No metrics aggregator enabled. Please add the MetricsAggregator integration to use metrics APIs");return}let{unit:n,tags:d,timestamp:c}=r,{release:u,environment:m}=p.getOptions(),g=l.getTransaction(),h={};u&&(h.release=u),m&&(h.environment=m),g&&(h.transaction=(0,o.spanToJSON)(g).description||""),i.DEBUG_BUILD&&(0,a.logger).log(`Adding value of ${s} to ${e} metric ${t}`),p.metricsAggregator.add(e,t,s,n,{...h,...d},c)}}let l={increment:function(e,t=1,a){p(s.COUNTER_METRIC_TYPE,e,t,a)},distribution:function(e,t,a){p(s.DISTRIBUTION_METRIC_TYPE,e,t,a)},set:function(e,t,a){p(s.SET_METRIC_TYPE,e,t,a)},gauge:function(e,t,a){p(s.GAUGE_METRIC_TYPE,e,t,a)},MetricsAggregator:r.MetricsAggregator,metricsAggregatorIntegration:r.metricsAggregatorIntegration}}),X("384sO",function(e,t){W(e.exports,"metricsAggregatorIntegration",()=>o),W(e.exports,"MetricsAggregator",()=>s);var a=O("hVqbS"),i=O("eY0oP");let n="MetricsAggregator",o=(0,a.defineIntegration)(()=>({name:n,setupOnce(){},setup(e){e.metricsAggregator=new i.BrowserMetricsAggregator(e)}})),s=(0,a.convertIntegrationFnToClass)(n,o)}),X("eY0oP",function(e,t){W(e.exports,"BrowserMetricsAggregator",()=>r);var a=O("iYy7D"),i=O("3SIMf"),n=O("6DYvy"),o=O("6CIba"),s=O("duvvp");class r{constructor(e){this._client=e,this._buckets=new Map,this._interval=setInterval(()=>this.flush(),i.DEFAULT_BROWSER_FLUSH_INTERVAL)}add(e,t,r,p="none",l={},d=(0,a.timestampInSeconds)()){let c=Math.floor(d),u=t.replace(i.NAME_AND_TAG_KEY_NORMALIZATION_REGEX,"_"),m=(0,s.sanitizeTags)(l),g=(0,s.getBucketKey)(e,u,p,m),h=this._buckets.get(g),b=h&&e===i.SET_METRIC_TYPE?h.metric.weight:0;h?(h.metric.add(r),h.timestampe);this._client.captureAggregateMetrics(e)}this._buckets.clear()}}close(){clearInterval(this._interval),this.flush()}}}),X("ce8iF",function(e,t){W(e.exports,"autoDiscoverNodePerformanceMonitoringIntegrations",()=>n);var a=O("aSKCX"),i=O("k2ErF");function n(){let e=(0,a.lazyLoadedNodePerformanceMonitoringIntegrations).map(e=>{try{return e()}catch(e){return}}).filter(e=>!!e);return 0===e.length&&(0,i.logger).warn("Performance monitoring integrations could not be automatically loaded."),e.filter(e=>!!e.loadDependency())}}),X("aSKCX",function(e,t){W(e.exports,"lazyLoadedNodePerformanceMonitoringIntegrations",()=>i);var a=O("fArVl");let i=[()=>new((0,a.dynamicRequire)(e,"./apollo")).Apollo,()=>new((0,a.dynamicRequire)(e,"./apollo")).Apollo({useNestjs:!0}),()=>new((0,a.dynamicRequire)(e,"./graphql")).GraphQL,()=>new((0,a.dynamicRequire)(e,"./mongo")).Mongo,()=>new((0,a.dynamicRequire)(e,"./mongo")).Mongo({mongoose:!0}),()=>new((0,a.dynamicRequire)(e,"./mysql")).Mysql,()=>new((0,a.dynamicRequire)(e,"./postgres")).Postgres]}),X("fArVl",function(e,t){W(e.exports,"isNodeEnv",()=>i),W(e.exports,"dynamicRequire",()=>n),W(e.exports,"loadModule",()=>o);var a=O("fuWNm");function i(){return!(0,a.isBrowserBundle)()&&"[object process]"===Object.prototype.toString.call("undefined"!=typeof process?process:0)}function n(e,t){return e.require(t)}function o(t){let a;try{a=n(e,t)}catch(e){}try{let{cwd:i}=n(e,"process");a=n(e,`${i()}/node_modules/${t}`)}catch(e){}return a}}),X("fuWNm",function(e,t){W(e.exports,"isBrowserBundle",()=>a);function a(){return"undefined"!=typeof __SENTRY_BROWSER_BUNDLE__&&!!__SENTRY_BROWSER_BUNDLE__}}),X("2QOEJ",function(e,t){W(e.exports,"NodeClient",()=>n);var a=O("7NWiQ"),i=O("9TgzM");class n extends i.ServerRuntimeClient{constructor(e){(0,a.applySdkMetadata)(e,"node"),e.transportOptions={textEncoder:new C.TextEncoder,...e.transportOptions},super({...e,platform:"node",runtime:{name:"node",version:H.process.version},serverName:e.serverName||H.process.env.SENTRY_NAME||w.hostname()})}}}),X("ejtry",function(e,t){W(e.exports,"makeNodeTransport",()=>s);var a=O("g4u0U"),i=O("k2ErF"),n=O("9hHOU"),o=O("kCv8V");function s(e){let t;try{t=new G.URL(e.url)}catch(t){return(0,i.consoleSandbox)(()=>{console.warn("[@sentry/node]: Invalid dsn or tunnel option, will not send any events. The tunnel option must be a full URL when used.")}),(0,n.createTransport)(e,()=>Promise.resolve({}))}let s="https:"===t.protocol,r=function(e,t){let{no_proxy:a}=process.env;if(!(a&&a.split(",").some(t=>e.host.endsWith(t)||e.hostname.endsWith(t))))return t}(t,e.proxy||(s?process.env.https_proxy:void 0)||process.env.http_proxy),p=s?h:g,l=void 0!==e.keepAlive&&e.keepAlive,d=r?new o.HttpsProxyAgent(r):new p.Agent({keepAlive:l,maxSockets:30,timeout:2e3}),c=function(e,t,i){let{hostname:n,pathname:o,port:s,protocol:r,search:p}=new G.URL(e.url);return function(l){return new Promise((d,c)=>{var u;let m=(u=l.body,new S.Readable({read(){this.push(u),this.push(null)}})),g={...e.headers};l.body.length>32768&&(g["content-encoding"]="gzip",m=m.pipe((0,B.createGzip)()));let h=t.request({method:"POST",agent:i,headers:g,hostname:n,path:`${o}${p}`,port:s,protocol:r,ca:e.caCerts},e=>{e.on("data",()=>{}),e.on("end",()=>{}),e.setEncoding("utf8");let t=(0,a._nullishCoalesce)(e.headers["retry-after"],()=>null),i=(0,a._nullishCoalesce)(e.headers["x-sentry-rate-limits"],()=>null);d({statusCode:e.statusCode,headers:{"retry-after":t,"x-sentry-rate-limits":Array.isArray(i)?i[0]:i}})});h.on("error",c),m.pipe(h)})}}(e,(0,a._nullishCoalesce)(e.httpModule,()=>p),d);return(0,n.createTransport)(e,c)}}),X("g4u0U",function(e,t){W(e.exports,"_nullishCoalesce",()=>a);function a(e,t){return null!=e?e:t()}}),X("kCv8V",function(e,t){W(e.exports,"HttpsProxyAgent",()=>p);var a=O("g4u0U"),i=O("bsjXU"),n=O("k2ErF"),o=O("iUFHX"),s=O("xmdp1");function r(...e){(0,n.logger).log("[https-proxy-agent]",...e)}class p extends o.Agent{static __initStatic(){this.protocols=["http","https"]}constructor(e,t){super(t),this.options={},this.proxy="string"==typeof e?new G.URL(e):e,this.proxyHeaders=(0,a._nullishCoalesce)((0,i._optionalChain)([t,"optionalAccess",e=>e.headers]),()=>({})),r("Creating new HttpsProxyAgent instance: %o",this.proxy.href);let n=(this.proxy.hostname||this.proxy.host).replace(/^\[|\]$/g,""),o=this.proxy.port?parseInt(this.proxy.port,10):"https:"===this.proxy.protocol?443:80;this.connectOpts={ALPNProtocols:["http/1.1"],...t?d(t,"headers"):null,host:n,port:o}}async connect(e,t){let a;let{proxy:i}=this;if(!t.host)throw TypeError('No "host" provided');if("https:"===i.protocol){r("Creating `tls.Socket`: %o",this.connectOpts);let e=this.connectOpts.servername||this.connectOpts.host;a=f.connect({...this.connectOpts,servername:e&&b.isIP(e)?void 0:e})}else r("Creating `net.Socket`: %o",this.connectOpts),a=b.connect(this.connectOpts);let n="function"==typeof this.proxyHeaders?this.proxyHeaders():{...this.proxyHeaders},o=b.isIPv6(t.host)?`[${t.host}]`:t.host,p=`CONNECT ${o}:${t.port} HTTP/1.1\r
+Error:`,t)}}}),O("eHTdB",function(e,t){W(e.exports,"addGlobalUnhandledRejectionInstrumentationHandler",()=>o);var a=X("gd055"),i=X("hxO1L");let n=null;function o(e){let t="unhandledrejection";(0,i.addHandler)(t,e),(0,i.maybeInstrument)(t,s)}function s(){n=a.GLOBAL_OBJ.onunhandledrejection,a.GLOBAL_OBJ.onunhandledrejection=function(e){return(0,i.triggerHandlers)("unhandledrejection",e),!n||!!n.__SENTRY_LOADER__||n.apply(this,arguments)},a.GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__=!0}}),O("ios84",function(e,t){W(e.exports,"TRACING_DEFAULTS",()=>p),W(e.exports,"IdleTransaction",()=>d);var a=X("k2ErF"),i=X("iYy7D"),n=X("2Mb7l"),o=X("iD1up"),s=X("7nqVO"),r=X("6aON8");let p={idleTimeout:1e3,finalTimeout:3e4,heartbeatInterval:5e3};class l extends s.SpanRecorder{constructor(e,t,a,i){super(i),this._pushActivity=e,this._popActivity=t,this.transactionSpanId=a}add(e){if(e.spanContext().spanId!==this.transactionSpanId){let t=e.end;e.end=(...a)=>(this._popActivity(e.spanContext().spanId),t.apply(e,a)),void 0===(0,o.spanToJSON)(e).timestamp&&this._pushActivity(e.spanContext().spanId)}super.add(e)}}class d extends r.Transaction{constructor(e,t,i=p.idleTimeout,o=p.finalTimeout,s=p.heartbeatInterval,r=!1,l=!1){super(e,t),this._idleHub=t,this._idleTimeout=i,this._finalTimeout=o,this._heartbeatInterval=s,this._onScope=r,this.activities={},this._heartbeatCounter=0,this._finished=!1,this._idleTimeoutCanceledPermanently=!1,this._beforeFinishCallbacks=[],this._finishReason="externalFinish",this._autoFinishAllowed=!l,r&&(n.DEBUG_BUILD&&(0,a.logger).log(`Setting idle transaction on scope. Span ID: ${this.spanContext().spanId}`),t.getScope().setSpan(this)),l||this._restartIdleTimeout(),setTimeout(()=>{this._finished||(this.setStatus("deadline_exceeded"),this._finishReason="finalTimeout",this.end())},this._finalTimeout)}end(e){let t=(0,o.spanTimeInputToSeconds)(e);if(this._finished=!0,this.activities={},"ui.action.click"===this.op&&this.setAttribute("finishReason",this._finishReason),this.spanRecorder){for(let e of(n.DEBUG_BUILD&&(0,a.logger).log("[Tracing] finishing IdleTransaction",new Date(1e3*t).toISOString(),this.op),this._beforeFinishCallbacks))e(this,t);this.spanRecorder.spans=this.spanRecorder.spans.filter(e=>{if(e.spanContext().spanId===this.spanContext().spanId)return!0;!(0,o.spanToJSON)(e).timestamp&&(e.setStatus("cancelled"),e.end(t),n.DEBUG_BUILD&&(0,a.logger).log("[Tracing] cancelling span since transaction ended early",JSON.stringify(e,void 0,2)));let{start_timestamp:i,timestamp:s}=(0,o.spanToJSON)(e),r=i&&i{this._finished||this._pushActivity(e)},e=>{this._finished||this._popActivity(e)},this.spanContext().spanId,e),n.DEBUG_BUILD&&(0,a.logger).log("Starting heartbeat"),this._pingHeartbeat()),this.spanRecorder.add(this)}cancelIdleTimeout(e,{restartOnChildSpanChange:t}={restartOnChildSpanChange:!0}){this._idleTimeoutCanceledPermanently=!1===t,this._idleTimeoutID&&(clearTimeout(this._idleTimeoutID),this._idleTimeoutID=void 0,0===Object.keys(this.activities).length&&this._idleTimeoutCanceledPermanently&&(this._finishReason="cancelled",this.end(e)))}setFinishReason(e){this._finishReason=e}sendAutoFinishSignal(){this._autoFinishAllowed||(n.DEBUG_BUILD&&(0,a.logger).log("[Tracing] Received finish signal for idle transaction."),this._restartIdleTimeout(),this._autoFinishAllowed=!0)}_restartIdleTimeout(e){this.cancelIdleTimeout(),this._idleTimeoutID=setTimeout(()=>{this._finished||0!==Object.keys(this.activities).length||(this._finishReason="idleTimeout",this.end(e))},this._idleTimeout)}_pushActivity(e){this.cancelIdleTimeout(void 0,{restartOnChildSpanChange:!this._idleTimeoutCanceledPermanently}),n.DEBUG_BUILD&&(0,a.logger).log(`[Tracing] pushActivity: ${e}`),this.activities[e]=!0,n.DEBUG_BUILD&&(0,a.logger).log("[Tracing] new activities count",Object.keys(this.activities).length)}_popActivity(e){if(this.activities[e]&&(n.DEBUG_BUILD&&(0,a.logger).log(`[Tracing] popActivity ${e}`),delete this.activities[e],n.DEBUG_BUILD&&(0,a.logger).log("[Tracing] new activities count",Object.keys(this.activities).length)),0===Object.keys(this.activities).length){let e=(0,i.timestampInSeconds)();this._idleTimeoutCanceledPermanently?this._autoFinishAllowed&&(this._finishReason="cancelled",this.end(e)):this._restartIdleTimeout(e+this._idleTimeout/1e3)}}_beat(){if(this._finished)return;let e=Object.keys(this.activities).join("");e===this._prevHeartbeatString?this._heartbeatCounter++:this._heartbeatCounter=1,this._prevHeartbeatString=e,this._heartbeatCounter>=3?this._autoFinishAllowed&&(n.DEBUG_BUILD&&(0,a.logger).log("[Tracing] Transaction finished because of no change for 3 heart beats"),this.setStatus("deadline_exceeded"),this._finishReason="heartbeatFailed",this.end()):this._pingHeartbeat()}_pingHeartbeat(){n.DEBUG_BUILD&&(0,a.logger).log(`pinging Heartbeat -> current counter: ${this._heartbeatCounter}`),setTimeout(()=>{this._beat()},this._heartbeatInterval)}}}),O("7nqVO",function(e,t){W(e.exports,"SpanRecorder",()=>u),W(e.exports,"Span",()=>m);var a=X("e4IUz"),i=X("k2ErF"),n=X("iYy7D"),o=X("1gT0D"),s=X("2Mb7l"),r=X("6CIba"),p=X("9GA7E"),l=X("dwLFO"),d=X("iD1up"),c=X("b2ZPh");class u{constructor(e=1e3){this._maxlen=e,this.spans=[]}add(e){this.spans.length>this._maxlen?e.spanRecorder=void 0:this.spans.push(e)}}class m{constructor(e={}){this._traceId=e.traceId||(0,o.uuid4)(),this._spanId=e.spanId||(0,o.uuid4)().substring(16),this._startTime=e.startTimestamp||(0,n.timestampInSeconds)(),this.tags=e.tags?{...e.tags}:{},this.data=e.data?{...e.data}:{},this.instrumenter=e.instrumenter||"sentry",this._attributes={},this.setAttributes({[p.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]:e.origin||"manual",[p.SEMANTIC_ATTRIBUTE_SENTRY_OP]:e.op,...e.attributes}),this._name=e.name||e.description,e.parentSpanId&&(this._parentSpanId=e.parentSpanId),"sampled"in e&&(this._sampled=e.sampled),e.status&&(this._status=e.status),e.endTimestamp&&(this._endTime=e.endTimestamp),e.exclusiveTime&&(this._exclusiveTime=e.exclusiveTime),this._measurements=e.measurements?{...e.measurements}:{}}get name(){return this._name||""}set name(e){this.updateName(e)}get description(){return this._name}set description(e){this._name=e}get traceId(){return this._traceId}set traceId(e){this._traceId=e}get spanId(){return this._spanId}set spanId(e){this._spanId=e}set parentSpanId(e){this._parentSpanId=e}get parentSpanId(){return this._parentSpanId}get sampled(){return this._sampled}set sampled(e){this._sampled=e}get attributes(){return this._attributes}set attributes(e){this._attributes=e}get startTimestamp(){return this._startTime}set startTimestamp(e){this._startTime=e}get endTimestamp(){return this._endTime}set endTimestamp(e){this._endTime=e}get status(){return this._status}set status(e){this._status=e}get op(){return this._attributes[p.SEMANTIC_ATTRIBUTE_SENTRY_OP]}set op(e){this.setAttribute(p.SEMANTIC_ATTRIBUTE_SENTRY_OP,e)}get origin(){return this._attributes[p.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]}set origin(e){this.setAttribute(p.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,e)}spanContext(){let{_spanId:e,_traceId:t,_sampled:a}=this;return{spanId:e,traceId:t,traceFlags:a?d.TRACE_FLAG_SAMPLED:d.TRACE_FLAG_NONE}}startChild(e){let t=new m({...e,parentSpanId:this._spanId,sampled:this._sampled,traceId:this._traceId});t.spanRecorder=this.spanRecorder,t.spanRecorder&&t.spanRecorder.add(t);let a=(0,l.getRootSpan)(this);if(t.transaction=a,s.DEBUG_BUILD&&a){let n=e&&e.op||"< unknown op >",o=(0,d.spanToJSON)(t).description||"< unknown name >",s=a.spanContext().spanId,r=`[Tracing] Starting '${n}' span on transaction '${o}' (${s}).`;(0,i.logger).log(r),this._logMessage=r}return t}setTag(e,t){return this.tags={...this.tags,[e]:t},this}setData(e,t){return this.data={...this.data,[e]:t},this}setAttribute(e,t){void 0===t?delete this._attributes[e]:this._attributes[e]=t}setAttributes(e){Object.keys(e).forEach(t=>this.setAttribute(t,e[t]))}setStatus(e){return this._status=e,this}setHttpStatus(e){return(0,c.setHttpStatus)(this,e),this}setName(e){this.updateName(e)}updateName(e){return this._name=e,this}isSuccess(){return"ok"===this._status}finish(e){return this.end(e)}end(e){if(this._endTime)return;let t=(0,l.getRootSpan)(this);if(s.DEBUG_BUILD&&t&&t.spanContext().spanId!==this._spanId){let e=this._logMessage;e&&(0,i.logger).log(e.replace("Starting","Finishing"))}this._endTime=(0,d.spanTimeInputToSeconds)(e)}toTraceparent(){return(0,d.spanToTraceHeader)(this)}toContext(){return(0,a.dropUndefinedKeys)({data:this._getData(),description:this._name,endTimestamp:this._endTime,op:this.op,parentSpanId:this._parentSpanId,sampled:this._sampled,spanId:this._spanId,startTimestamp:this._startTime,status:this._status,tags:this.tags,traceId:this._traceId})}updateWithContext(e){return this.data=e.data||{},this._name=e.name||e.description,this._endTime=e.endTimestamp,this.op=e.op,this._parentSpanId=e.parentSpanId,this._sampled=e.sampled,this._spanId=e.spanId||this._spanId,this._startTime=e.startTimestamp||this._startTime,this._status=e.status,this.tags=e.tags||{},this._traceId=e.traceId||this._traceId,this}getTraceContext(){return(0,d.spanToTraceContext)(this)}getSpanJSON(){return(0,a.dropUndefinedKeys)({data:this._getData(),description:this._name,op:this._attributes[p.SEMANTIC_ATTRIBUTE_SENTRY_OP],parent_span_id:this._parentSpanId,span_id:this._spanId,start_timestamp:this._startTime,status:this._status,tags:Object.keys(this.tags).length>0?this.tags:void 0,timestamp:this._endTime,trace_id:this._traceId,origin:this._attributes[p.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN],_metrics_summary:(0,r.getMetricSummaryJsonForSpan)(this),profile_id:this._attributes[p.SEMANTIC_ATTRIBUTE_PROFILE_ID],exclusive_time:this._exclusiveTime,measurements:Object.keys(this._measurements).length>0?this._measurements:void 0})}isRecording(){return!this._endTime&&!!this._sampled}toJSON(){return this.getSpanJSON()}_getData(){let{data:e,_attributes:t}=this,a=Object.keys(e).length>0,i=Object.keys(t).length>0;if(a||i)return a&&i?{...e,...t}:a?e:t}}}),O("6CIba",function(e,t){let a;W(e.exports,"getMetricSummaryJsonForSpan",()=>s),W(e.exports,"updateMetricSummaryOnActiveSpan",()=>r);var i=X("e4IUz"),n=X("3hDCQ");function o(e){return a?a.get(e):void 0}function s(e){let t=o(e);if(!t)return;let a={};for(let[,[e,n]]of t)a[e]||(a[e]=[]),a[e].push((0,i.dropUndefinedKeys)(n));return a}function r(e,t,i,s,r,p){let l=(0,n.getActiveSpan)();if(l){let n=o(l)||new Map,d=`${e}:${t}@${s}`,c=n.get(p);if(c){let[,e]=c;n.set(p,[d,{min:Math.min(e.min,i),max:Math.max(e.max,i),count:e.count+=1,sum:e.sum+=i,tags:e.tags}])}else n.set(p,[d,{min:i,max:i,count:1,sum:i,tags:r}]);a||(a=new WeakMap),a.set(l,n)}}}),O("9GA7E",function(e,t){W(e.exports,"SEMANTIC_ATTRIBUTE_SENTRY_SOURCE",()=>a),W(e.exports,"SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE",()=>i),W(e.exports,"SEMANTIC_ATTRIBUTE_SENTRY_OP",()=>n),W(e.exports,"SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN",()=>o),W(e.exports,"SEMANTIC_ATTRIBUTE_PROFILE_ID",()=>s);let a="sentry.source",i="sentry.sample_rate",n="sentry.op",o="sentry.origin",s="profile_id"}),O("6aON8",function(e,t){W(e.exports,"Transaction",()=>u);var a=X("e4IUz"),i=X("k2ErF"),n=X("2Mb7l"),o=X("eCOpK"),s=X("6CIba"),r=X("9GA7E"),p=X("iD1up"),l=X("cCmfn"),d=X("7nqVO"),c=X("3hDCQ");class u extends d.Span{constructor(e,t){super(e),this._contexts={},this._hub=t||(0,o.getCurrentHub)(),this._name=e.name||"",this._metadata={...e.metadata},this._trimEnd=e.trimEnd,this.transaction=this;let a=this._metadata.dynamicSamplingContext;a&&(this._frozenDynamicSamplingContext={...a})}get name(){return this._name}set name(e){this.setName(e)}get metadata(){return{source:"custom",spanMetadata:{},...this._metadata,...this._attributes[r.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]&&{source:this._attributes[r.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]},...this._attributes[r.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]&&{sampleRate:this._attributes[r.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]}}}set metadata(e){this._metadata=e}setName(e,t="custom"){this._name=e,this.setAttribute(r.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,t)}updateName(e){return this._name=e,this}initSpanRecorder(e=1e3){this.spanRecorder||(this.spanRecorder=new d.SpanRecorder(e)),this.spanRecorder.add(this)}setContext(e,t){null===t?delete this._contexts[e]:this._contexts[e]=t}setMeasurement(e,t,a=""){this._measurements[e]={value:t,unit:a}}setMetadata(e){this._metadata={...this._metadata,...e}}end(e){let t=(0,p.spanTimeInputToSeconds)(e),a=this._finishTransaction(t);if(a)return this._hub.captureEvent(a)}toContext(){let e=super.toContext();return(0,a.dropUndefinedKeys)({...e,name:this._name,trimEnd:this._trimEnd})}updateWithContext(e){return super.updateWithContext(e),this._name=e.name||"",this._trimEnd=e.trimEnd,this}getDynamicSamplingContext(){return(0,l.getDynamicSamplingContextFromSpan)(this)}setHub(e){this._hub=e}getProfileId(){if(void 0!==this._contexts&&void 0!==this._contexts.profile)return this._contexts.profile.profile_id}_finishTransaction(e){if(void 0!==this._endTime)return;this._name||(n.DEBUG_BUILD&&(0,i.logger).warn("Transaction has no name, falling back to ``."),this._name=""),super.end(e);let t=this._hub.getClient();if(t&&t.emit&&t.emit("finishTransaction",this),!0!==this._sampled){n.DEBUG_BUILD&&(0,i.logger).log("[Tracing] Discarding transaction because its trace was not chosen to be sampled."),t&&t.recordDroppedEvent("sample_rate","transaction");return}let o=this.spanRecorder?this.spanRecorder.spans.filter(e=>e!==this&&(0,p.spanToJSON)(e).timestamp):[];if(this._trimEnd&&o.length>0){let e=o.map(e=>(0,p.spanToJSON)(e).timestamp).filter(Boolean);this._endTime=e.reduce((e,t)=>e>t?e:t)}let{scope:r,isolationScope:d}=(0,c.getCapturedScopesOnSpan)(this),{metadata:u}=this,{source:m}=u,g={contexts:{...this._contexts,trace:(0,p.spanToTraceContext)(this)},spans:o,start_timestamp:this._startTime,tags:this.tags,timestamp:this._endTime,transaction:this._name,type:"transaction",sdkProcessingMetadata:{...u,capturedSpanScope:r,capturedSpanIsolationScope:d,...(0,a.dropUndefinedKeys)({dynamicSamplingContext:(0,l.getDynamicSamplingContextFromSpan)(this)})},_metrics_summary:(0,s.getMetricSummaryJsonForSpan)(this),...m&&{transaction_info:{source:m}}};return Object.keys(this._measurements).length>0&&(n.DEBUG_BUILD&&(0,i.logger).log("[Measurements] Adding measurements to transaction",JSON.stringify(this._measurements,void 0,2)),g.measurements=this._measurements),n.DEBUG_BUILD&&(0,i.logger).log(`[Tracing] Finishing ${this.op} transaction: ${this._name}.`),g}}}),O("ibVDy",function(e,t){W(e.exports,"sampleTransaction",()=>p),W(e.exports,"isValidSampleRate",()=>l);var a=X("jVURz"),i=X("k2ErF"),n=X("2Mb7l"),o=X("9GA7E"),s=X("7z6ft"),r=X("iD1up");function p(e,t,a){let p;return(0,s.hasTracingEnabled)(t)?void 0!==e.sampled?e.setAttribute(o.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE,Number(e.sampled)):("function"==typeof t.tracesSampler?(p=t.tracesSampler(a),e.setAttribute(o.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE,Number(p))):void 0!==a.parentSampled?p=a.parentSampled:void 0!==t.tracesSampleRate?(p=t.tracesSampleRate,e.setAttribute(o.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE,Number(p))):(p=1,e.setAttribute(o.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE,p)),l(p))?p?(e.sampled=Math.random()1)||(n.DEBUG_BUILD&&(0,i.logger).warn(`[Tracing] Given sample rate is invalid. Sample rate must be between 0 and 1. Got ${e}.`),!1)}}),O("fziSu",function(e,t){W(e.exports,"setMeasurement",()=>i);var a=X("050Gq");function i(e,t,i){let n=(0,a.getActiveTransaction)();n&&n.setMeasurement(e,t,i)}}),O("9TgzM",function(e,t){W(e.exports,"ServerRuntimeClient",()=>b);var a=X("51Ehf"),i=X("k2ErF"),n=X("kcLAY"),o=X("1gT0D"),s=X("5nomz"),r=X("gegwf"),p=X("2Mb7l"),l=X("deYUe"),d=X("iLRyb"),c=X("j1tEK"),u=X("jfDa9"),m=X("iD1up"),g=X("dwLFO"),h=X("cCmfn");class b extends s.BaseClient{constructor(e){(0,u.addTracingExtensions)(),super(e),e._experiments&&e._experiments.metricsAggregator&&(this.metricsAggregator=new d.MetricsAggregator(this))}eventFromException(e,t){return(0,n.resolvedSyncPromise)((0,a.eventFromUnknownInput)((0,l.getClient)(),this._options.stackParser,e,t))}eventFromMessage(e,t="info",i){return(0,n.resolvedSyncPromise)((0,a.eventFromMessage)(this._options.stackParser,e,t,i,this._options.attachStacktrace))}captureException(e,t,a){if(this._options.autoSessionTracking&&this._sessionFlusher&&a){let e=a.getRequestSession();e&&"ok"===e.status&&(e.status="errored")}return super.captureException(e,t,a)}captureEvent(e,t,a){if(this._options.autoSessionTracking&&this._sessionFlusher&&a&&"exception"===(e.type||"exception")&&e.exception&&e.exception.values&&e.exception.values.length>0){let e=a.getRequestSession();e&&"ok"===e.status&&(e.status="errored")}return super.captureEvent(e,t,a)}close(e){return this._sessionFlusher&&this._sessionFlusher.close(),super.close(e)}initSessionFlusher(){let{release:e,environment:t}=this._options;e?this._sessionFlusher=new c.SessionFlusher(this,{release:e,environment:t}):p.DEBUG_BUILD&&(0,i.logger).warn("Cannot initialise an instance of SessionFlusher if no release is provided!")}captureCheckIn(e,t,a){let n="checkInId"in e&&e.checkInId?e.checkInId:(0,o.uuid4)();if(!this._isEnabled())return p.DEBUG_BUILD&&(0,i.logger).warn("SDK not enabled, will not capture checkin."),n;let{release:s,environment:l,tunnel:d}=this.getOptions(),c={check_in_id:n,monitor_slug:e.monitorSlug,status:e.status,release:s,environment:l};"duration"in e&&(c.duration=e.duration),t&&(c.monitor_config={schedule:t.schedule,checkin_margin:t.checkinMargin,max_runtime:t.maxRuntime,timezone:t.timezone});let[u,m]=this._getTraceInfoFromScope(a);m&&(c.contexts={trace:m});let g=(0,r.createCheckInEnvelope)(c,u,this.getSdkMetadata(),d,this.getDsn());return p.DEBUG_BUILD&&(0,i.logger).info("Sending checkin:",e.monitorSlug,e.status),this._sendEnvelope(g),n}_captureRequestSession(){this._sessionFlusher?this._sessionFlusher.incrementSessionStatusCount():p.DEBUG_BUILD&&(0,i.logger).warn("Discarded request mode session because autoSessionTracking option was disabled")}_prepareEvent(e,t,a,i){return this._options.platform&&(e.platform=e.platform||this._options.platform),this._options.runtime&&(e.contexts={...e.contexts,runtime:(e.contexts||{}).runtime||this._options.runtime}),this._options.serverName&&(e.server_name=e.server_name||this._options.serverName),super._prepareEvent(e,t,a,i)}_getTraceInfoFromScope(e){if(!e)return[void 0,void 0];let t=e.getSpan();if(t)return[(0,g.getRootSpan)(t)?(0,h.getDynamicSamplingContextFromSpan)(t):void 0,(0,m.spanToTraceContext)(t)];let{traceId:a,spanId:i,parentSpanId:n,dsc:o}=e.getPropagationContext(),s={trace_id:a,span_id:i,parent_span_id:n};return o?[o,s]:[(0,h.getDynamicSamplingContextFromClient)(a,this,e),s]}}}),O("51Ehf",function(e,t){W(e.exports,"exceptionFromError",()=>r),W(e.exports,"eventFromUnknownInput",()=>p),W(e.exports,"eventFromMessage",()=>l);var a=X("jVURz"),i=X("1gT0D"),n=X("jD1jC"),o=X("e4IUz");function s(e,t){return e(t.stack||"",1)}function r(e,t){let a={type:t.name||t.constructor.name,value:t.message},i=s(e,t);return i.length&&(a.stacktrace={frames:i}),a}function p(e,t,s,p){let l;let d="function"==typeof e?e().getClient():e,c=s,u=p&&p.data&&p.data.mechanism||{handled:!0,type:"generic"};if(!(0,a.isError)(s)){if((0,a.isPlainObject)(s)){let e=d&&d.getOptions().normalizeDepth;l={__serialized__:(0,n.normalizeToSize)(s,e)};let t=function(e){if("name"in e&&"string"==typeof e.name){let t=`'${e.name}' captured as exception`;return"message"in e&&"string"==typeof e.message&&(t+=` with message '${e.message}'`),t}return"message"in e&&"string"==typeof e.message?e.message:`Object captured as exception with keys: ${(0,o.extractExceptionKeysForMessage)(e)}`}(s);(c=p&&p.syntheticException||Error(t)).message=t}else(c=p&&p.syntheticException||Error(s)).message=s;u.synthetic=!0}let m={exception:{values:[r(t,c)]}};return l&&(m.extra=l),(0,i.addExceptionTypeValue)(m,void 0,void 0),(0,i.addExceptionMechanism)(m,u),{...m,event_id:p&&p.event_id}}function l(e,t,i="info",n,o){let r={event_id:n&&n.event_id,level:i};if(o&&n&&n.syntheticException){let a=s(e,n.syntheticException);a.length&&(r.exception={values:[{value:t,stacktrace:{frames:a}}]})}if((0,a.isParameterizedString)(t)){let{__sentry_template_string__:e,__sentry_template_values__:a}=t;return r.logentry={message:e,params:a},r}return r.message=t,r}}),O("gegwf",function(e,t){W(e.exports,"createCheckInEnvelope",()=>o);var a=X("agl5x"),i=X("e4IUz"),n=X("8zTrc");function o(e,t,o,s,r){let p={sent_at:new Date().toISOString()};return o&&o.sdk&&(p.sdk={name:o.sdk.name,version:o.sdk.version}),s&&r&&(p.dsn=(0,n.dsnToString)(r)),t&&(p.trace=(0,i.dropUndefinedKeys)(t)),(0,a.createEnvelope)(p,[[{type:"check_in"},e]])}}),O("iLRyb",function(e,t){W(e.exports,"MetricsAggregator",()=>r);var a=X("iYy7D"),i=X("3SIMf"),n=X("6DYvy"),o=X("6CIba"),s=X("duvvp");class r{constructor(e){this._client=e,this._buckets=new Map,this._bucketsTotalWeight=0,this._interval=setInterval(()=>this._flush(),i.DEFAULT_FLUSH_INTERVAL),this._flushShift=Math.floor(Math.random()*i.DEFAULT_FLUSH_INTERVAL/1e3),this._forceFlush=!1}add(e,t,r,p="none",l={},d=(0,a.timestampInSeconds)()){let c=Math.floor(d),u=t.replace(i.NAME_AND_TAG_KEY_NORMALIZATION_REGEX,"_"),m=(0,s.sanitizeTags)(l),g=(0,s.getBucketKey)(e,u,p,m),h=this._buckets.get(g),b=h&&e===i.SET_METRIC_TYPE?h.metric.weight:0;h?(h.metric.add(r),h.timestamp=i.MAX_WEIGHT&&this.flush()}flush(){this._forceFlush=!0,this._flush()}close(){this._forceFlush=!0,clearInterval(this._interval),this._flush()}_flush(){if(this._forceFlush){this._forceFlush=!1,this._bucketsTotalWeight=0,this._captureMetrics(this._buckets),this._buckets.clear();return}let e=Math.floor((0,a.timestampInSeconds)())-i.DEFAULT_FLUSH_INTERVAL/1e3-this._flushShift,t=new Map;for(let[a,i]of this._buckets)i.timestamp<=e&&(t.set(a,i),this._bucketsTotalWeight-=i.metric.weight);for(let[e]of t)this._buckets.delete(e);this._captureMetrics(t)}_captureMetrics(e){if(e.size>0&&this._client.captureAggregateMetrics){let t=Array.from(e).map(([,e])=>e);this._client.captureAggregateMetrics(t)}}}}),O("6DYvy",function(e,t){W(e.exports,"METRIC_MAP",()=>n);var a=X("3SIMf"),i=X("duvvp");let n={[a.COUNTER_METRIC_TYPE]:class{constructor(e){this._value=e}get weight(){return 1}add(e){this._value+=e}toString(){return`${this._value}`}},[a.GAUGE_METRIC_TYPE]:class{constructor(e){this._last=e,this._min=e,this._max=e,this._sum=e,this._count=1}get weight(){return 5}add(e){this._last=e,ethis._max&&(this._max=e),this._sum+=e,this._count++}toString(){return`${this._last}:${this._min}:${this._max}:${this._sum}:${this._count}`}},[a.DISTRIBUTION_METRIC_TYPE]:class{constructor(e){this._value=[e]}get weight(){return this._value.length}add(e){this._value.push(e)}toString(){return this._value.join(":")}},[a.SET_METRIC_TYPE]:class{constructor(e){this.first=e,this._value=new Set([e])}get weight(){return this._value.size}add(e){this._value.add(e)}toString(){return Array.from(this._value).map(e=>"string"==typeof e?(0,i.simpleHash)(e):e).join(":")}}}}),O("j1tEK",function(e,t){W(e.exports,"SessionFlusher",()=>n);var a=X("e4IUz"),i=X("deYUe");class n{constructor(e,t){this._client=e,this.flushTimeout=60,this._pendingAggregates={},this._isEnabled=!0,this._intervalId=setInterval(()=>this.flush(),1e3*this.flushTimeout),this._sessionAttrs=t}flush(){let e=this.getSessionAggregates();0!==e.aggregates.length&&(this._pendingAggregates={},this._client.sendSession(e))}getSessionAggregates(){let e=Object.keys(this._pendingAggregates).map(e=>this._pendingAggregates[parseInt(e)]),t={attrs:this._sessionAttrs,aggregates:e};return(0,a.dropUndefinedKeys)(t)}close(){clearInterval(this._intervalId),this._isEnabled=!1,this.flush()}incrementSessionStatusCount(){if(!this._isEnabled)return;let e=(0,i.getCurrentScope)(),t=e.getRequestSession();t&&t.status&&(this._incrementSessionStatusCount(t.status,new Date),e.setRequestSession(void 0))}_incrementSessionStatusCount(e,t){let a=new Date(t).setSeconds(0,0);this._pendingAggregates[a]=this._pendingAggregates[a]||{};let i=this._pendingAggregates[a];switch(i.started||(i.started=new Date(a).toISOString()),e){case"errored":return i.errored=(i.errored||0)+1,i.errored;case"ok":return i.exited=(i.exited||0)+1,i.exited;default:return i.crashed=(i.crashed||0)+1,i.crashed}}}}),O("c2wyx",function(e,t){W(e.exports,"initAndBind",()=>s),W(e.exports,"setCurrentClient",()=>r);var a=X("k2ErF"),i=X("2Mb7l"),n=X("deYUe"),o=X("eCOpK");function s(e,t){!0===t.debug&&(i.DEBUG_BUILD?(0,a.logger).enable():(0,a.consoleSandbox)(()=>{console.warn("[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.")})),(0,n.getCurrentScope)().update(t.initialScope);let o=new e(t);r(o),o.init?o.init():o.setupIntegrations&&o.setupIntegrations()}function r(e){let t=(0,o.getCurrentHub)().getStackTop();t.client=e,t.scope.setClient(e)}}),O("4i5AO",function(e,t){W(e.exports,"createSpanEnvelope",()=>n);var a=X("agl5x"),i=X("8zTrc");function n(e,t){let n={sent_at:new Date().toISOString()};t&&(n.dsn=(0,i.dsnToString)(t));let s=e.map(o);return(0,a.createEnvelope)(n,s)}function o(e){return[{type:"span"},e]}}),O("ehWym",function(e,t){function a(e,t){let a=t&&void 0!==t.getClient?t.getClient():t,n=a&&a.getDsn(),o=a&&a.getOptions().tunnel;return!!n&&e.includes(n.host)||!!o&&i(e)===i(o)}function i(e){return"/"===e[e.length-1]?e.slice(0,-1):e}W(e.exports,"isSentryRequestUrl",()=>a)}),O("3dN9k",function(e,t){W(e.exports,"parameterize",()=>a);function a(e,...t){let i=new String(String.raw(e,...t));return i.__sentry_template_string__=e.join("\0").replace(/%/g,"%%").replace(/\0/g,"%s"),i.__sentry_template_values__=t,i}}),O("7NWiQ",function(e,t){W(e.exports,"applySdkMetadata",()=>i);var a=X("039qT");function i(e,t,i=[t],n="npm"){let o=e._metadata||{};o.sdk||(o.sdk={name:`sentry.javascript.${t}`,packages:i.map(e=>({name:`${n}:@sentry/${e}`,version:a.SDK_VERSION})),version:a.SDK_VERSION}),e._metadata=o}}),O("l9Z6v",function(e,t){W(e.exports,"requestDataIntegration",()=>r),W(e.exports,"RequestData",()=>p);var a=X("jpnao"),i=X("hVqbS"),n=X("iD1up");let o={include:{cookies:!0,data:!0,headers:!0,ip:!1,query_string:!0,url:!0,user:{id:!0,username:!0,email:!0}},transactionNamingScheme:"methodPath"},s="RequestData",r=(0,i.defineIntegration)((e={})=>{let t=a.addRequestDataToEvent,i={...o,...e,include:{method:!0,...o.include,...e.include,user:e.include&&"boolean"==typeof e.include.user?e.include.user:{...o.include.user,...(e.include||{}).user}}};return{name:s,setupOnce(){},processEvent(e,o,s){let{transactionNamingScheme:r}=i,{sdkProcessingMetadata:p={}}=e,l=p.request;if(!l)return e;let d=t(e,l,p.requestDataOptionsFromExpressHandler||p.requestDataOptionsFromGCPWrapper||function(e){let t;let{transactionNamingScheme:a,include:{ip:i,user:n,...o}}=e,s=[];for(let[e,t]of Object.entries(o))t&&s.push(e);if(void 0===n)t=!0;else if("boolean"==typeof n)t=n;else{let e=[];for(let[t,a]of Object.entries(n))a&&e.push(t);t=e}return{include:{ip:i,user:t,request:0!==s.length?s:void 0,transaction:a}}}(i));if("transaction"===e.type||"handler"===r)return d;let c=l._sentryTransaction;if(c){let e=(0,n.spanToJSON)(c).description||"",t="sentry.javascript.nextjs"===function(e){try{return e.getOptions()._metadata.sdk.name}catch(e){return}}(s)?e.startsWith("/api"):"path"!==r,[i]=(0,a.extractPathForTransaction)(l,{path:!0,method:t,customRoute:e});d.transaction=i}return d}}}),p=(0,i.convertIntegrationFnToClass)(s,r)}),O("jpnao",function(e,t){W(e.exports,"DEFAULT_USER_INCLUDES",()=>p),W(e.exports,"addRequestDataToTransaction",()=>l),W(e.exports,"extractPathForTransaction",()=>d),W(e.exports,"extractRequestData",()=>c),W(e.exports,"addRequestDataToEvent",()=>u);var a=X("eBTPg");X("aoHsm");var i=X("jVURz");X("k2ErF");var n=X("jD1jC"),o=X("6szME");let s={ip:!1,request:!0,transaction:!0,user:!0},r=["cookies","data","headers","method","query_string","url"],p=["id","username","email"];function l(e,t,a){if(e){if(!e.metadata.source||"url"===e.metadata.source){let[a,i]=d(t,{path:!0,method:!0});e.updateName(a),e.setMetadata({source:i})}e.setAttribute("url",t.originalUrl||t.url),t.baseUrl&&e.setAttribute("baseUrl",t.baseUrl),e.setData("query",m(t,a))}}function d(e,t={}){let a=e.method&&e.method.toUpperCase(),i="",n="url";t.customRoute||e.route?(i=t.customRoute||`${e.baseUrl||""}${e.route&&e.route.path}`,n="route"):(e.originalUrl||e.url)&&(i=(0,o.stripUrlQueryAndFragment)(e.originalUrl||e.url||""));let s="";return t.method&&a&&(s+=a),t.method&&t.path&&(s+=" "),t.path&&i&&(s+=i),[s,n]}function c(e,t){let{include:o=r,deps:s}=t||{},p={},l=e.headers||{},d=e.method,c=l.host||e.hostname||e.host||"",u="https"===e.protocol||e.socket&&e.socket.encrypted?"https":"http",g=e.originalUrl||e.url||"",h=g.startsWith(u)?g:`${u}://${c}${g}`;return o.forEach(t=>{switch(t){case"headers":p.headers=l,o.includes("cookies")||delete p.headers.cookie;break;case"method":p.method=d;break;case"url":p.url=h;break;case"cookies":p.cookies=e.cookies||l.cookie&&(0,a.parseCookie)(l.cookie)||{};break;case"query_string":p.query_string=m(e,s);break;case"data":if("GET"===d||"HEAD"===d)break;void 0!==e.body&&(p.data=(0,i.isString)(e.body)?e.body:JSON.stringify((0,n.normalize)(e.body)));break;default:({}).hasOwnProperty.call(e,t)&&(p[t]=e[t])}}),p}function u(e,t,a){let n={...s,...a&&a.include};if(n.request){let i=Array.isArray(n.request)?c(t,{include:n.request,deps:a&&a.deps}):c(t,{deps:a&&a.deps});e.request={...e.request,...i}}if(n.user){let a=t.user&&(0,i.isPlainObject)(t.user)?function(e,t){let a={};return(Array.isArray(t)?t:p).forEach(t=>{e&&t in e&&(a[t]=e[t])}),a}(t.user,n.user):{};Object.keys(a).length&&(e.user={...e.user,...a})}if(n.ip){let a=t.ip||t.socket&&t.socket.remoteAddress;a&&(e.user={...e.user,ip_address:a})}return n.transaction&&!e.transaction&&(e.transaction=function(e,t){switch(t){case"path":return d(e,{path:!0})[0];case"handler":return e.route&&e.route.stack&&e.route.stack[0]&&e.route.stack[0].name||"";default:{let t=e._reconstructedRoute?e._reconstructedRoute:void 0;return d(e,{path:!0,method:!0,customRoute:t})[0]}}}(t,n.transaction)),e}function m(e,t){let a=e.originalUrl||e.url||"";if(a){a.startsWith("/")&&(a=`http://dogs.are.great${a}`);try{return e.query||"undefined"!=typeof URL&&new URL(a).search.slice(1)||t&&t.url&&t.url.parse(a).query||void 0}catch(e){return}}}}),O("eBTPg",function(e,t){W(e.exports,"parseCookie",()=>a);function a(e){let t={},a=0;for(;ae.length>0&&","!==e).length}function o(e){let{protocol:t,host:a,path:i}=e,n=a&&a.replace(/^.*@/,"[filtered]:[filtered]@").replace(/(:80)$/,"").replace(/(:443)$/,"")||"";return`${t?`${t}://`:""}${n}${i}`}W(e.exports,"parseUrl",()=>a),W(e.exports,"stripUrlQueryAndFragment",()=>i),W(e.exports,"getNumberOfUrlSegments",()=>n),W(e.exports,"getSanitizedUrlString",()=>o)}),O("gi3Kq",function(e,t){W(e.exports,"linkedErrorsIntegration",()=>s),W(e.exports,"LinkedErrors",()=>r);var a=X("5q3Fq"),i=X("51Ehf"),n=X("hVqbS");let o="LinkedErrors",s=(0,n.defineIntegration)((e={})=>{let t=e.limit||5,n=e.key||"cause";return{name:o,setupOnce(){},preprocessEvent(e,o,s){let r=s.getOptions();(0,a.applyAggregateErrorsToEvent)(i.exceptionFromError,r.stackParser,r.maxValueLength,n,t,e,o)}}}),r=(0,n.convertIntegrationFnToClass)(o,s)}),O("5q3Fq",function(e,t){W(e.exports,"applyAggregateErrorsToEvent",()=>n);var a=X("jVURz"),i=X("c6AFW");function n(e,t,n=250,r,p,l,d){if(!l.exception||!l.exception.values||!d||!(0,a.isInstanceOf)(d.originalException,Error))return;let c=l.exception.values.length>0?l.exception.values[l.exception.values.length-1]:void 0;c&&(l.exception.values=(function e(t,i,n,r,p,l,d,c){if(l.length>=n+1)return l;let u=[...l];if((0,a.isInstanceOf)(r[p],Error)){o(d,c);let a=t(i,r[p]),l=u.length;s(a,p,l,c),u=e(t,i,n,r[p],p,[a,...u],a,l)}return Array.isArray(r.errors)&&r.errors.forEach((r,l)=>{if((0,a.isInstanceOf)(r,Error)){o(d,c);let a=t(i,r),m=u.length;s(a,`errors[${l}]`,m,c),u=e(t,i,n,r,p,[a,...u],a,m)}}),u})(e,t,p,d.originalException,r,l.exception.values,c,0).map(e=>(e.value&&(e.value=(0,i.truncate)(e.value,n)),e)))}function o(e,t){e.mechanism=e.mechanism||{type:"generic",handled:!0},e.mechanism={...e.mechanism,..."AggregateError"===e.type&&{is_exception_group:!0},exception_id:t}}function s(e,t,a,i){e.mechanism=e.mechanism||{type:"generic",handled:!0},e.mechanism={...e.mechanism,type:"chained",source:t,exception_id:a,parent_id:i}}}),O("3pHvJ",function(e,t){W(e.exports,"FunctionToString",()=>X("7B5Oi").FunctionToString),W(e.exports,"InboundFilters",()=>X("aT332").InboundFilters),W(e.exports,"LinkedErrors",()=>X("gi3Kq").LinkedErrors),X("7B5Oi"),X("aT332"),X("gi3Kq")}),O("kpMy9",function(e,t){W(e.exports,"metrics",()=>l);var a=X("k2ErF"),i=X("2Mb7l"),n=X("deYUe"),o=X("iD1up"),s=X("3SIMf"),r=X("384sO");function p(e,t,s,r={}){let p=(0,n.getClient)(),l=(0,n.getCurrentScope)();if(p){if(!p.metricsAggregator){i.DEBUG_BUILD&&(0,a.logger).warn("No metrics aggregator enabled. Please add the MetricsAggregator integration to use metrics APIs");return}let{unit:n,tags:d,timestamp:c}=r,{release:u,environment:m}=p.getOptions(),g=l.getTransaction(),h={};u&&(h.release=u),m&&(h.environment=m),g&&(h.transaction=(0,o.spanToJSON)(g).description||""),i.DEBUG_BUILD&&(0,a.logger).log(`Adding value of ${s} to ${e} metric ${t}`),p.metricsAggregator.add(e,t,s,n,{...h,...d},c)}}let l={increment:function(e,t=1,a){p(s.COUNTER_METRIC_TYPE,e,t,a)},distribution:function(e,t,a){p(s.DISTRIBUTION_METRIC_TYPE,e,t,a)},set:function(e,t,a){p(s.SET_METRIC_TYPE,e,t,a)},gauge:function(e,t,a){p(s.GAUGE_METRIC_TYPE,e,t,a)},MetricsAggregator:r.MetricsAggregator,metricsAggregatorIntegration:r.metricsAggregatorIntegration}}),O("384sO",function(e,t){W(e.exports,"metricsAggregatorIntegration",()=>o),W(e.exports,"MetricsAggregator",()=>s);var a=X("hVqbS"),i=X("eY0oP");let n="MetricsAggregator",o=(0,a.defineIntegration)(()=>({name:n,setupOnce(){},setup(e){e.metricsAggregator=new i.BrowserMetricsAggregator(e)}})),s=(0,a.convertIntegrationFnToClass)(n,o)}),O("eY0oP",function(e,t){W(e.exports,"BrowserMetricsAggregator",()=>r);var a=X("iYy7D"),i=X("3SIMf"),n=X("6DYvy"),o=X("6CIba"),s=X("duvvp");class r{constructor(e){this._client=e,this._buckets=new Map,this._interval=setInterval(()=>this.flush(),i.DEFAULT_BROWSER_FLUSH_INTERVAL)}add(e,t,r,p="none",l={},d=(0,a.timestampInSeconds)()){let c=Math.floor(d),u=t.replace(i.NAME_AND_TAG_KEY_NORMALIZATION_REGEX,"_"),m=(0,s.sanitizeTags)(l),g=(0,s.getBucketKey)(e,u,p,m),h=this._buckets.get(g),b=h&&e===i.SET_METRIC_TYPE?h.metric.weight:0;h?(h.metric.add(r),h.timestampe);this._client.captureAggregateMetrics(e)}this._buckets.clear()}}close(){clearInterval(this._interval),this.flush()}}}),O("ce8iF",function(e,t){W(e.exports,"autoDiscoverNodePerformanceMonitoringIntegrations",()=>n);var a=X("aSKCX"),i=X("k2ErF");function n(){let e=(0,a.lazyLoadedNodePerformanceMonitoringIntegrations).map(e=>{try{return e()}catch(e){return}}).filter(e=>!!e);return 0===e.length&&(0,i.logger).warn("Performance monitoring integrations could not be automatically loaded."),e.filter(e=>!!e.loadDependency())}}),O("aSKCX",function(e,t){W(e.exports,"lazyLoadedNodePerformanceMonitoringIntegrations",()=>i);var a=X("fArVl");let i=[()=>new((0,a.dynamicRequire)(e,"./apollo")).Apollo,()=>new((0,a.dynamicRequire)(e,"./apollo")).Apollo({useNestjs:!0}),()=>new((0,a.dynamicRequire)(e,"./graphql")).GraphQL,()=>new((0,a.dynamicRequire)(e,"./mongo")).Mongo,()=>new((0,a.dynamicRequire)(e,"./mongo")).Mongo({mongoose:!0}),()=>new((0,a.dynamicRequire)(e,"./mysql")).Mysql,()=>new((0,a.dynamicRequire)(e,"./postgres")).Postgres]}),O("fArVl",function(e,t){W(e.exports,"isNodeEnv",()=>i),W(e.exports,"dynamicRequire",()=>n),W(e.exports,"loadModule",()=>o);var a=X("fuWNm");function i(){return!(0,a.isBrowserBundle)()&&"[object process]"===Object.prototype.toString.call("undefined"!=typeof process?process:0)}function n(e,t){return e.require(t)}function o(t){let a;try{a=n(e,t)}catch(e){}try{let{cwd:i}=n(e,"process");a=n(e,`${i()}/node_modules/${t}`)}catch(e){}return a}}),O("fuWNm",function(e,t){W(e.exports,"isBrowserBundle",()=>a);function a(){return"undefined"!=typeof __SENTRY_BROWSER_BUNDLE__&&!!__SENTRY_BROWSER_BUNDLE__}}),O("2QOEJ",function(e,t){W(e.exports,"NodeClient",()=>n);var a=X("7NWiQ"),i=X("9TgzM");class n extends i.ServerRuntimeClient{constructor(e){(0,a.applySdkMetadata)(e,"node"),e.transportOptions={textEncoder:new C.TextEncoder,...e.transportOptions},super({...e,platform:"node",runtime:{name:"node",version:H.process.version},serverName:e.serverName||H.process.env.SENTRY_NAME||w.hostname()})}}}),O("ejtry",function(e,t){W(e.exports,"makeNodeTransport",()=>s);var a=X("g4u0U"),i=X("k2ErF"),n=X("9hHOU"),o=X("kCv8V");function s(e){let t;try{t=new G.URL(e.url)}catch(t){return(0,i.consoleSandbox)(()=>{console.warn("[@sentry/node]: Invalid dsn or tunnel option, will not send any events. The tunnel option must be a full URL when used.")}),(0,n.createTransport)(e,()=>Promise.resolve({}))}let s="https:"===t.protocol,r=function(e,t){let{no_proxy:a}=process.env;if(!(a&&a.split(",").some(t=>e.host.endsWith(t)||e.hostname.endsWith(t))))return t}(t,e.proxy||(s?process.env.https_proxy:void 0)||process.env.http_proxy),p=s?h:g,l=void 0!==e.keepAlive&&e.keepAlive,d=r?new o.HttpsProxyAgent(r):new p.Agent({keepAlive:l,maxSockets:30,timeout:2e3}),c=function(e,t,i){let{hostname:n,pathname:o,port:s,protocol:r,search:p}=new G.URL(e.url);return function(l){return new Promise((d,c)=>{var u;let m=(u=l.body,new B.Readable({read(){this.push(u),this.push(null)}})),g={...e.headers};l.body.length>32768&&(g["content-encoding"]="gzip",m=m.pipe((0,S.createGzip)()));let h=t.request({method:"POST",agent:i,headers:g,hostname:n,path:`${o}${p}`,port:s,protocol:r,ca:e.caCerts},e=>{e.on("data",()=>{}),e.on("end",()=>{}),e.setEncoding("utf8");let t=(0,a._nullishCoalesce)(e.headers["retry-after"],()=>null),i=(0,a._nullishCoalesce)(e.headers["x-sentry-rate-limits"],()=>null);d({statusCode:e.statusCode,headers:{"retry-after":t,"x-sentry-rate-limits":Array.isArray(i)?i[0]:i}})});h.on("error",c),m.pipe(h)})}}(e,(0,a._nullishCoalesce)(e.httpModule,()=>p),d);return(0,n.createTransport)(e,c)}}),O("g4u0U",function(e,t){W(e.exports,"_nullishCoalesce",()=>a);function a(e,t){return null!=e?e:t()}}),O("kCv8V",function(e,t){W(e.exports,"HttpsProxyAgent",()=>p);var a=X("g4u0U"),i=X("bsjXU"),n=X("k2ErF"),o=X("iUFHX"),s=X("xmdp1");function r(...e){(0,n.logger).log("[https-proxy-agent]",...e)}class p extends o.Agent{static __initStatic(){this.protocols=["http","https"]}constructor(e,t){super(t),this.options={},this.proxy="string"==typeof e?new G.URL(e):e,this.proxyHeaders=(0,a._nullishCoalesce)((0,i._optionalChain)([t,"optionalAccess",e=>e.headers]),()=>({})),r("Creating new HttpsProxyAgent instance: %o",this.proxy.href);let n=(this.proxy.hostname||this.proxy.host).replace(/^\[|\]$/g,""),o=this.proxy.port?parseInt(this.proxy.port,10):"https:"===this.proxy.protocol?443:80;this.connectOpts={ALPNProtocols:["http/1.1"],...t?d(t,"headers"):null,host:n,port:o}}async connect(e,t){let a;let{proxy:i}=this;if(!t.host)throw TypeError('No "host" provided');if("https:"===i.protocol){r("Creating `tls.Socket`: %o",this.connectOpts);let e=this.connectOpts.servername||this.connectOpts.host;a=f.connect({...this.connectOpts,servername:e&&b.isIP(e)?void 0:e})}else r("Creating `net.Socket`: %o",this.connectOpts),a=b.connect(this.connectOpts);let n="function"==typeof this.proxyHeaders?this.proxyHeaders():{...this.proxyHeaders},o=b.isIPv6(t.host)?`[${t.host}]`:t.host,p=`CONNECT ${o}:${t.port} HTTP/1.1\r
`;if(i.username||i.password){let e=`${decodeURIComponent(i.username)}:${decodeURIComponent(i.password)}`;n["Proxy-Authorization"]=`Basic ${Buffer.from(e).toString("base64")}`}for(let e of(n.Host=`${o}:${t.port}`,n["Proxy-Connection"]||(n["Proxy-Connection"]=this.keepAlive?"Keep-Alive":"close"),Object.keys(n)))p+=`${e}: ${n[e]}\r
`;let c=(0,s.parseProxyResponse)(a);a.write(`${p}\r
-`);let{connect:u,buffered:m}=await c;if(e.emit("proxyConnect",u),this.emit("proxyConnect",u,e),200===u.statusCode){if(e.once("socket",l),t.secureEndpoint){r("Upgrading socket connection to TLS");let e=t.servername||t.host;return f.connect({...d(t,"host","path","port"),socket:a,servername:b.isIP(e)?void 0:e})}return a}a.destroy();let g=new b.Socket({writable:!1});return g.readable=!0,e.once("socket",e=>{r("Replaying proxy buffer for failed request"),e.push(m),e.push(null)}),g}}function l(e){e.resume()}function d(e,...t){let a;let i={};for(a in e)t.includes(a)||(i[a]=e[a]);return i}p.__initStatic()}),X("bsjXU",function(e,t){W(e.exports,"_optionalChain",()=>a);function a(e){let t;let a=e[0],i=1;for(;ia.call(t,...e)),t=void 0)}return a}}),X("iUFHX",function(e,t){W(e.exports,"Agent",()=>n);var a=O("g4u0U");let i=Symbol("AgentBaseInternalState");class n extends g.Agent{constructor(e){super(e),this[i]={}}isSecureEndpoint(e){if(e){if("boolean"==typeof e.secureEndpoint)return e.secureEndpoint;if("string"==typeof e.protocol)return"https:"===e.protocol}let{stack:t}=Error();return"string"==typeof t&&t.split("\n").some(e=>-1!==e.indexOf("(https.js:")||-1!==e.indexOf("node:https:"))}createSocket(e,t,a){let n={...t,secureEndpoint:this.isSecureEndpoint(t)};Promise.resolve().then(()=>this.connect(e,n)).then(o=>{if(o instanceof g.Agent)return o.addRequest(e,n);this[i].currentSocket=o,super.createSocket(e,t,a)},a)}createConnection(){let e=this[i].currentSocket;if(this[i].currentSocket=void 0,!e)throw Error("No socket was returned in the `connect()` function");return e}get defaultPort(){return(0,a._nullishCoalesce)(this[i].defaultPort,()=>"https:"===this.protocol?443:80)}set defaultPort(e){this[i]&&(this[i].defaultPort=e)}get protocol(){return(0,a._nullishCoalesce)(this[i].protocol,()=>this.isSecureEndpoint()?"https:":"http:")}set protocol(e){this[i]&&(this[i].protocol=e)}}}),X("xmdp1",function(e,t){W(e.exports,"parseProxyResponse",()=>n);var a=O("k2ErF");function i(...e){(0,a.logger).log("[https-proxy-agent:parse-proxy-response]",...e)}function n(e){return new Promise((t,a)=>{let n=0,o=[];function s(){let p=e.read();p?function(p){o.push(p),n+=p.length;let l=Buffer.concat(o,n),d=l.indexOf("\r\n\r\n");if(-1===d){i("have not received end of HTTP headers yet..."),s();return}let c=l.slice(0,d).toString("ascii").split("\r\n"),u=c.shift();if(!u)return e.destroy(),a(Error("No header received from proxy CONNECT response"));let m=u.split(" "),g=+m[1],h=m.slice(2).join(" "),b={};for(let t of c){if(!t)continue;let i=t.indexOf(":");if(-1===i)return e.destroy(),a(Error(`Invalid header from proxy CONNECT response: "${t}"`));let n=t.slice(0,i).toLowerCase(),o=t.slice(i+1).trimStart(),s=b[n];"string"==typeof s?b[n]=[s,o]:Array.isArray(s)?s.push(o):b[n]=o}i("got proxy server response: %o %o",u,b),r(),t({connect:{statusCode:g,statusText:h,headers:b},buffered:l})}(p):e.once("readable",s)}function r(){e.removeListener("end",p),e.removeListener("error",l),e.removeListener("readable",s)}function p(){r(),i("onend"),a(Error("Proxy connection ended before receiving CONNECT response"))}function l(e){r(),i("onerror %o",e),a(e)}e.on("error",l),e.on("end",p),s()})}}),X("1iHXL",function(e,t){W(e.exports,"defaultIntegrations",()=>Z),W(e.exports,"getDefaultIntegrations",()=>_),W(e.exports,"init",()=>T),W(e.exports,"getSentryRelease",()=>V),W(e.exports,"defaultStackParser",()=>E),W(e.exports,"isAutoSessionTrackingEnabled",()=>R);var a=O("bsjXU"),i=O("goIvU"),n=O("gd055"),o=O("2gq4F"),s=O("deYUe"),r=O("7B5Oi"),p=O("hVqbS"),l=O("eCOpK"),d=O("aT332"),c=O("c2wyx"),u=O("gi3Kq"),m=O("l9Z6v"),g=O("djgx3"),h=O("2QOEJ"),b=O("bCDzK"),f=O("ezym9"),v=O("koeOU"),I=O("8G0FT"),C=O("lVZId"),y=O("esVyk"),w=O("dDWKn"),x=O("kpGGI"),A=O("7wvFM"),G=O("aCFro"),S=O("jUJ2l"),B=O("ejtry");let Z=[(0,d.inboundFiltersIntegration)(),(0,r.functionToStringIntegration)(),(0,u.linkedErrorsIntegration)(),(0,m.requestDataIntegration)(),(0,b.consoleIntegration)(),(0,I.httpIntegration)(),(0,G.nativeNodeFetchintegration)(),(0,w.onUncaughtExceptionIntegration)(),(0,x.onUnhandledRejectionIntegration)(),(0,v.contextLinesIntegration)(),(0,C.localVariablesIntegration)(),(0,f.nodeContextIntegration)(),(0,y.modulesIntegration)()];function _(e){let t=(0,l.getMainCarrier)();return[...Z,...(0,a._optionalChain)([t,"access",e=>e.__SENTRY__,"optionalAccess",e=>e.integrations])||[]]}function T(e={}){(0,g.setNodeAsyncContextStrategy)(),void 0===e.defaultIntegrations&&(e.defaultIntegrations=_()),void 0===e.dsn&&process.env.SENTRY_DSN&&(e.dsn=process.env.SENTRY_DSN);let t=process.env.SENTRY_TRACES_SAMPLE_RATE;if(void 0===e.tracesSampleRate&&t){let a=parseFloat(t);isFinite(a)&&(e.tracesSampleRate=a)}if(void 0===e.release){let t=V();void 0!==t?e.release=t:e.autoSessionTracking=!1}void 0===e.environment&&process.env.SENTRY_ENVIRONMENT&&(e.environment=process.env.SENTRY_ENVIRONMENT),void 0===e.autoSessionTracking&&void 0!==e.dsn&&(e.autoSessionTracking=!0),void 0===e.instrumenter&&(e.instrumenter="sentry");let a={...e,stackParser:(0,i.stackParserFromStackParserOptions)(e.stackParser||E),integrations:(0,p.getIntegrationsToSetup)(e),transport:e.transport||B.makeNodeTransport};if((0,c.initAndBind)(e.clientClass||h.NodeClient,a),e.autoSessionTracking&&((0,s.startSession)(),process.on("beforeExit",()=>{let e=(0,l.getIsolationScope)().getSession();e&&!["exited","crashed"].includes(e.status)&&(0,s.endSession)()})),function(){if(!["false","n","no","off","0"].includes((process.env.SENTRY_USE_ENVIRONMENT||"").toLowerCase())){let e=process.env.SENTRY_TRACE,t=process.env.SENTRY_BAGGAGE,a=(0,o.propagationContextFromHeaders)(e,t);(0,s.getCurrentScope)().setPropagationContext(a)}}(),e.spotlight){let t=(0,s.getClient)();if(t&&t.addIntegration){for(let e of t.getOptions().integrations)t.addIntegration(e);t.addIntegration((0,A.spotlightIntegration)({sidecarUrl:"string"==typeof e.spotlight?e.spotlight:void 0}))}}}function R(e){if(void 0===e)return!1;let t=e&&e.getOptions();return!!t&&void 0!==t.autoSessionTracking&&t.autoSessionTracking}function V(e){return process.env.SENTRY_RELEASE?process.env.SENTRY_RELEASE:n.GLOBAL_OBJ.SENTRY_RELEASE&&n.GLOBAL_OBJ.SENTRY_RELEASE.id?n.GLOBAL_OBJ.SENTRY_RELEASE.id:process.env.GITHUB_SHA||process.env.COMMIT_REF||process.env.VERCEL_GIT_COMMIT_SHA||process.env.VERCEL_GITHUB_COMMIT_SHA||process.env.VERCEL_GITLAB_COMMIT_SHA||process.env.VERCEL_BITBUCKET_COMMIT_SHA||process.env.ZEIT_GITHUB_COMMIT_SHA||process.env.ZEIT_GITLAB_COMMIT_SHA||process.env.ZEIT_BITBUCKET_COMMIT_SHA||process.env.CF_PAGES_COMMIT_SHA||e}let E=(0,i.createStackParser)((0,i.nodeStackLineParser)((0,S.createGetModuleFromFilename)()))}),X("djgx3",function(e,t){W(e.exports,"setNodeAsyncContextStrategy",()=>o);var a=O("04aWn"),i=O("4hMJG"),n=O("aFGyw");function o(){a.NODE_VERSION.major>=14?(0,n.setHooksAsyncContextStrategy)():(0,i.setDomainAsyncContextStrategy)()}}),X("04aWn",function(e,t){W(e.exports,"NODE_VERSION",()=>a);let a=(0,O("1gT0D").parseSemver)(process.versions.node)}),X("4hMJG",function(e,t){W(e.exports,"setDomainAsyncContextStrategy",()=>s);var a=O("bsjXU"),i=O("eCOpK");function n(){let e=_.active;if(e)return(0,i.ensureHubOnCarrier)(e),(0,i.getHubFromCarrier)(e)}function o(e,t){let n=_.active;if(n&&(0,a._optionalChain)([t,"optionalAccess",e=>e.reuseExisting]))return e();let o=_.create(),s=function(e){let t={};return(0,i.ensureHubOnCarrier)(t,e),(0,i.getHubFromCarrier)(t)}(n?(0,i.getHubFromCarrier)(n):void 0);return(0,i.setHubOnCarrier)(o,s),o.bind(()=>e())()}function s(){(0,i.setAsyncContextStrategy)({getCurrentHub:n,runWithAsyncContext:o})}}),X("aFGyw",function(e,t){let a;W(e.exports,"setHooksAsyncContextStrategy",()=>o);var i=O("bsjXU"),n=O("eCOpK");function o(){function e(){return a.getStore()}a||(a=new T.AsyncLocalStorage),(0,n.setAsyncContextStrategy)({getCurrentHub:e,runWithAsyncContext:function(t,o){let s=e();if(s&&(0,i._optionalChain)([o,"optionalAccess",e=>e.reuseExisting]))return t();let r=function(e){let t={};return(0,n.ensureHubOnCarrier)(t,e),(0,n.getHubFromCarrier)(t)}(s);return a.run(r,()=>t())}})}}),X("bCDzK",function(e,t){W(e.exports,"consoleIntegration",()=>r),W(e.exports,"Console",()=>p);var a=O("deYUe"),i=O("hVqbS"),n=O("kMFvf"),o=O("gZn4V");let s="Console",r=(0,i.defineIntegration)(()=>({name:s,setupOnce(){},setup(e){(0,n.addConsoleInstrumentationHandler)(({args:t,level:i})=>{(0,a.getClient)()===e&&(0,a.addBreadcrumb)({category:"console",level:(0,o.severityLevelFromString)(i),message:C.format.apply(void 0,t)},{input:[...t],level:i})})}})),p=(0,i.convertIntegrationFnToClass)(s,r)}),X("kMFvf",function(e,t){W(e.exports,"addConsoleInstrumentationHandler",()=>s);var a=O("k2ErF"),i=O("e4IUz"),n=O("gd055"),o=O("hxO1L");function s(e){let t="console";(0,o.addHandler)(t,e),(0,o.maybeInstrument)(t,r)}function r(){"console"in n.GLOBAL_OBJ&&(0,a.CONSOLE_LEVELS).forEach(function(e){e in n.GLOBAL_OBJ.console&&(0,i.fill)(n.GLOBAL_OBJ.console,e,function(t){return a.originalConsoleMethods[e]=t,function(...t){(0,o.triggerHandlers)("console",{args:t,level:e});let i=a.originalConsoleMethods[e];i&&i.apply(n.GLOBAL_OBJ.console,t)}})})}}),X("gZn4V",function(e,t){W(e.exports,"severityLevelFromString",()=>i);let a=["fatal","error","warning","log","info","debug"];function i(e){return"warn"===e?"warning":a.includes(e)?e:"log"}}),X("ezym9",function(e,t){W(e.exports,"nodeContextIntegration",()=>r),W(e.exports,"Context",()=>p);var a=O("bsjXU"),i=O("hVqbS");let n=(0,C.promisify)(y.readFile),o=(0,C.promisify)(y.readdir),s="Context",r=(0,i.defineIntegration)((e={})=>{let t;let i={app:!0,os:!0,device:!0,culture:!0,cloudResource:!0,...e};async function n(e){var i;void 0===t&&(t=o());let n=(i=await t,(0,a._optionalChain)([i,"optionalAccess",e=>e.app,"optionalAccess",e=>e.app_memory])&&(i.app.app_memory=process.memoryUsage().rss),(0,a._optionalChain)([i,"optionalAccess",e=>e.device,"optionalAccess",e=>e.free_memory])&&(i.device.free_memory=w.freemem()),i);return e.contexts={...e.contexts,app:{...n.app,...(0,a._optionalChain)([e,"access",e=>e.contexts,"optionalAccess",e=>e.app])},os:{...n.os,...(0,a._optionalChain)([e,"access",e=>e.contexts,"optionalAccess",e=>e.os])},device:{...n.device,...(0,a._optionalChain)([e,"access",e=>e.contexts,"optionalAccess",e=>e.device])},culture:{...n.culture,...(0,a._optionalChain)([e,"access",e=>e.contexts,"optionalAccess",e=>e.culture])},cloud_resource:{...n.cloud_resource,...(0,a._optionalChain)([e,"access",e=>e.contexts,"optionalAccess",e=>e.cloud_resource])}},e}async function o(){let e={};if(i.os&&(e.os=await l()),i.app&&(e.app=function(){let e=process.memoryUsage().rss;return{app_start_time:new Date(Date.now()-1e3*process.uptime()).toISOString(),app_memory:e}}()),i.device&&(e.device=function(e){let t;let a={};try{t=w.uptime&&w.uptime()}catch(e){}if("number"==typeof t&&(a.boot_time=new Date(Date.now()-1e3*t).toISOString()),a.arch=w.arch(),(!0===e||e.memory)&&(a.memory_size=w.totalmem(),a.free_memory=w.freemem()),!0===e||e.cpu){let e=w.cpus();if(e&&e.length){let t=e[0];a.processor_count=e.length,a.cpu_description=t.model,a.processor_frequency=t.speed}}return a}(i.device)),i.culture){let t=function(){try{if("string"!=typeof process.versions.icu)return;let e=new Date(9e8),t=new Intl.DateTimeFormat("es",{month:"long"});if("enero"===t.format(e)){let e=Intl.DateTimeFormat().resolvedOptions();return{locale:e.locale,timezone:e.timeZone}}}catch(e){}}();t&&(e.culture=t)}return i.cloudResource&&(e.cloud_resource=function(){if(process.env.VERCEL)return{"cloud.provider":"vercel","cloud.region":process.env.VERCEL_REGION};if(process.env.AWS_REGION)return{"cloud.provider":"aws","cloud.region":process.env.AWS_REGION,"cloud.platform":process.env.AWS_EXECUTION_ENV};if(process.env.GCP_PROJECT)return{"cloud.provider":"gcp"};if(process.env.ALIYUN_REGION_ID)return{"cloud.provider":"alibaba_cloud","cloud.region":process.env.ALIYUN_REGION_ID};if(process.env.WEBSITE_SITE_NAME&&process.env.REGION_NAME)return{"cloud.provider":"azure","cloud.region":process.env.REGION_NAME};if(process.env.IBM_CLOUD_REGION)return{"cloud.provider":"ibm_cloud","cloud.region":process.env.IBM_CLOUD_REGION};if(process.env.TENCENTCLOUD_REGION)return{"cloud.provider":"tencent_cloud","cloud.region":process.env.TENCENTCLOUD_REGION,"cloud.account.id":process.env.TENCENTCLOUD_APPID,"cloud.availability_zone":process.env.TENCENTCLOUD_ZONE};else if(process.env.NETLIFY)return{"cloud.provider":"netlify"};else if(process.env.FLY_REGION)return{"cloud.provider":"fly.io","cloud.region":process.env.FLY_REGION};else if(process.env.DYNO)return{"cloud.provider":"heroku"};else return}()),e}return{name:s,setupOnce(){},processEvent:e=>n(e)}}),p=(0,i.convertIntegrationFnToClass)(s,r);async function l(){let e=w.platform();switch(e){case"darwin":return g();case"linux":return b();default:return{name:d[e]||e,version:w.release()}}}let d={aix:"IBM AIX",freebsd:"FreeBSD",openbsd:"OpenBSD",sunos:"SunOS",win32:"Windows"},c=[{name:"fedora-release",distros:["Fedora"]},{name:"redhat-release",distros:["Red Hat Linux","Centos"]},{name:"redhat_version",distros:["Red Hat Linux"]},{name:"SuSE-release",distros:["SUSE Linux"]},{name:"lsb-release",distros:["Ubuntu Linux","Arch Linux"]},{name:"debian_version",distros:["Debian"]},{name:"debian_release",distros:["Debian"]},{name:"arch-release",distros:["Arch Linux"]},{name:"gentoo-release",distros:["Gentoo Linux"]},{name:"novell-release",distros:["SUSE Linux"]},{name:"alpine-release",distros:["Alpine Linux"]}],u={alpine:e=>e,arch:e=>m(/distrib_release=(.*)/,e),centos:e=>m(/release ([^ ]+)/,e),debian:e=>e,fedora:e=>m(/release (..)/,e),mint:e=>m(/distrib_release=(.*)/,e),red:e=>m(/release ([^ ]+)/,e),suse:e=>m(/VERSION = (.*)\n/,e),ubuntu:e=>m(/distrib_release=(.*)/,e)};function m(e,t){let a=e.exec(t);return a?a[1]:void 0}async function g(){let e={kernel_version:w.release(),name:"Mac OS X",version:`10.${Number(w.release().split(".")[0])-4}`};try{let t=await new Promise((e,t)=>{(0,R.execFile)("/usr/bin/sw_vers",(a,i)=>{if(a){t(a);return}e(i)})});e.name=m(/^ProductName:\s+(.*)$/m,t),e.version=m(/^ProductVersion:\s+(.*)$/m,t),e.build=m(/^BuildVersion:\s+(.*)$/m,t)}catch(e){}return e}function h(e){return e.split(" ")[0].toLowerCase()}async function b(){let e={kernel_version:w.release(),name:"Linux"};try{let t=await o("/etc"),a=c.find(e=>t.includes(e.name));if(!a)return e;let i=(0,A.join)("/etc",a.name),s=(await n(i,{encoding:"utf-8"})).toLowerCase(),{distros:r}=a;e.name=r.find(e=>s.indexOf(h(e))>=0)||r[0];let p=h(e.name);e.version=u[p](s)}catch(e){}return e}}),X("koeOU",function(e,t){W(e.exports,"contextLinesIntegration",()=>p),W(e.exports,"ContextLines",()=>l);var a=O("bsjXU"),i=O("1gT0D"),n=O("kTF8L"),o=O("hVqbS");let s=new n.LRUMap(100),r="ContextLines",p=(0,o.defineIntegration)((e={})=>{let t=void 0!==e.frameContextLines?e.frameContextLines:7;return{name:r,setupOnce(){},processEvent:e=>d(e,t)}}),l=(0,o.convertIntegrationFnToClass)(r,p);async function d(e,t){let n={},o=[];if(t>0&&(0,a._optionalChain)([e,"access",e=>e.exception,"optionalAccess",e=>e.values])){for(let t of e.exception.values)if((0,a._optionalChain)([t,"access",e=>e.stacktrace,"optionalAccess",e=>e.frames]))for(let e=t.stacktrace.frames.length-1;e>=0;e--){let a=t.stacktrace.frames[e];!a.filename||n[a.filename]||s.get(a.filename)||(o.push(c(a.filename)),n[a.filename]=1)}}if(o.length>0&&await Promise.all(o),t>0&&(0,a._optionalChain)([e,"access",e=>e.exception,"optionalAccess",e=>e.values]))for(let a of e.exception.values)a.stacktrace&&a.stacktrace.frames&&await function(e,t){for(let a of e)if(a.filename&&void 0===a.context_line){let e=s.get(a.filename);if(e)try{(0,i.addContextToFrame)(e,a,t)}catch(e){}}}(a.stacktrace.frames,t);return e}async function c(e){let t=s.get(e);if(null===t)return null;if(void 0!==t)return t;let a=null;try{a=(await new Promise((t,a)=>{(0,y.readFile)(e,"utf8",(e,i)=>{e?a(e):t(i)})})).split("\n")}catch(e){}return s.set(e,a),a}}),X("kTF8L",function(e,t){W(e.exports,"LRUMap",()=>a);class a{constructor(e){this._maxSize=e,this._cache=new Map}get size(){return this._cache.size}get(e){let t=this._cache.get(e);if(void 0!==t)return this._cache.delete(e),this._cache.set(e,t),t}set(e,t){this._cache.size>=this._maxSize&&this._cache.delete(this._cache.keys().next().value),this._cache.set(e,t)}remove(e){let t=this._cache.get(e);return t&&this._cache.delete(e),t}clear(){this._cache.clear()}keys(){return Array.from(this._cache.keys())}values(){let e=[];return this._cache.forEach(t=>e.push(t)),e}}}),X("8G0FT",function(e,t){W(e.exports,"Http",()=>A),W(e.exports,"httpIntegration",()=>x);var a=O("bsjXU"),i=O("e4IUz"),n=O("hSiIl"),o=O("2gq4F"),s=O("k2ErF"),r=O("kTF8L"),p=O("c6AFW"),l=O("deYUe"),d=O("hVqbS"),c=O("3hDCQ"),u=O("eCOpK"),m=O("cCmfn"),b=O("7z6ft"),f=O("ehWym"),v=O("b2ZPh"),I=O("iD1up"),C=O("2xRAP"),y=O("04aWn"),w=O("bmtY7");let x=(0,d.defineIntegration)((e={})=>{let{breadcrumbs:t,tracing:a,shouldCreateSpanForRequest:n}=e;return new A({breadcrumbs:t,tracing:!1!==a&&(0,i.dropUndefinedKeys)({enableIfHasTracingEnabled:!0!==a||void 0,shouldCreateSpanForRequest:n})})});class A{static __initStatic(){this.id="Http"}__init(){this.name=A.id}constructor(e={}){A.prototype.__init.call(this),this._breadcrumbs=void 0===e.breadcrumbs||e.breadcrumbs,this._tracing=e.tracing?!0===e.tracing?{}:e.tracing:void 0}setupOnce(e,t){var n,o;let r=(0,a._optionalChain)([t,"call",e=>e(),"access",e=>e.getClient,"call",e=>e(),"optionalAccess",e=>e.getOptions,"call",e=>e()]),p=void 0!==(n=this._tracing)&&(!n.enableIfHasTracingEnabled||(0,b.hasTracingEnabled)(r));if(!this._breadcrumbs&&!p)return;if(r&&"sentry"!==r.instrumenter){C.DEBUG_BUILD&&(0,s.logger).log("HTTP Integration is skipped because of instrumenter configuration.");return}let l=(o=this._tracing,p?(0,a._optionalChain)([o,"optionalAccess",e=>e.shouldCreateSpanForRequest])||(0,a._optionalChain)([r,"optionalAccess",e=>e.shouldCreateSpanForRequest]):()=>!1),d=(0,a._optionalChain)([r,"optionalAccess",e=>e.tracePropagationTargets])||(0,a._optionalChain)([this,"access",e=>e._tracing,"optionalAccess",e=>e.tracePropagationTargets]),c=G(g,this._breadcrumbs,l,d);if((0,i.fill)(g,"get",c),(0,i.fill)(g,"request",c),y.NODE_VERSION.major>8){let e=G(h,this._breadcrumbs,l,d);(0,i.fill)(h,"get",e),(0,i.fill)(h,"request",e)}}}function G(e,t,i,d){let g=new r.LRUMap(100),h=new r.LRUMap(100),b=e=>{if(void 0===i)return!0;let t=g.get(e);if(void 0!==t)return t;let a=i(e);return g.set(e,a),a},y=e=>{if(void 0===d)return!0;let t=h.get(e);if(void 0!==t)return t;let a=(0,p.stringMatchesSomePattern)(e,d);return h.set(e,a),a};function x(e,t,a,i){(0,u.getCurrentHub)().getIntegration(A)&&(0,l.addBreadcrumb)({category:"http",data:{status_code:i&&i.statusCode,...t},type:"http"},{event:e,request:a,response:i})}return function(i){return function(...r){let p=(0,w.normalizeRequestArgs)(e,r),d=p[0],g=(0,w.extractRawUrl)(d),h=(0,w.extractUrl)(d),A=(0,l.getClient)();if((0,f.isSentryRequestUrl)(h,A))return i.apply(e,p);let G=(0,l.getCurrentScope)(),S=(0,u.getIsolationScope)(),B=(0,c.getActiveSpan)(),Z=function(e,t){let a={url:e,"http.method":t.method||"GET"};return t.hash&&(a["http.fragment"]=t.hash.substring(1)),t.search&&(a["http.query"]=t.search.substring(1)),a}(h,d),_=b(g)?(0,a._optionalChain)([B,"optionalAccess",e=>e.startChild,"call",e=>e({op:"http.client",origin:"auto.http.node.http",description:`${Z["http.method"]} ${Z.url}`,data:Z})]):void 0;if(A&&y(g)){var T;let{traceId:e,spanId:t,sampled:a,dsc:i}={...S.getPropagationContext(),...G.getPropagationContext()},r=_?(0,I.spanToTraceHeader)(_):(0,o.generateSentryTraceHeader)(e,t,a);T=(0,n.dynamicSamplingContextToSentryBaggageHeader)(i||(_?(0,m.getDynamicSamplingContextFromSpan)(_):(0,m.getDynamicSamplingContextFromClient)(e,A,G))),(d.headers||{})["sentry-trace"]||(C.DEBUG_BUILD&&(0,s.logger).log(`[Tracing] Adding sentry-trace header ${r} to outgoing request to "${h}": `),d.headers={...d.headers,"sentry-trace":r,...T&&T.length>0&&{baggage:d.headers&&d.headers.baggage?T?Array.isArray(d.headers.baggage)?[...d.headers.baggage,T]:[d.headers.baggage,T]:d.headers.baggage:T}})}else C.DEBUG_BUILD&&(0,s.logger).log(`[Tracing] Not adding sentry-trace header to outgoing request (${h}) due to mismatching tracePropagationTargets option.`);return i.apply(e,p).once("response",function(e){t&&x("response",Z,this,e),_&&(e.statusCode&&(0,v.setHttpStatus)(_,e.statusCode),_.updateName((0,w.cleanSpanDescription)((0,I.spanToJSON)(_).description||"",d,this)||""),_.end())}).once("error",function(){t&&x("error",Z,this),_&&((0,v.setHttpStatus)(_,500),_.updateName((0,w.cleanSpanDescription)((0,I.spanToJSON)(_).description||"",d,this)||""),_.end())})}}}A.__initStatic()}),X("2xRAP",function(e,t){W(e.exports,"DEBUG_BUILD",()=>a);let a="undefined"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__}),X("bmtY7",function(e,t){W(e.exports,"extractRawUrl",()=>n),W(e.exports,"extractUrl",()=>o),W(e.exports,"cleanSpanDescription",()=>s),W(e.exports,"normalizeRequestArgs",()=>p);var a=O("bsjXU"),i=O("04aWn");function n(e){let{protocol:t,hostname:a,port:i}=l(e),n=e.path?e.path:"/";return`${t}//${a}${i}${n}`}function o(e){let{protocol:t,hostname:a,port:i}=l(e),n=e.pathname||"/",o=e.auth?function(e){let[t,a]=e.split(":");return`${t?"[Filtered]":""}:${a?"[Filtered]":""}@`}(e.auth):"";return`${t}//${o}${a}${i}${n}`}function s(e,t,i){if(!e)return e;let[n,s]=e.split(" ");return t.host&&!t.protocol&&(t.protocol=(0,a._optionalChain)([i,"optionalAccess",e=>e.agent,"optionalAccess",e=>e.protocol]),s=o(t)),(0,a._optionalChain)([s,"optionalAccess",e=>e.startsWith,"call",e=>e("///")])&&(s=s.slice(2)),`${n} ${s}`}function r(e){let t={protocol:e.protocol,hostname:"string"==typeof e.hostname&&e.hostname.startsWith("[")?e.hostname.slice(1,-1):e.hostname,hash:e.hash,search:e.search,pathname:e.pathname,path:`${e.pathname||""}${e.search||""}`,href:e.href};return""!==e.port&&(t.port=Number(e.port)),(e.username||e.password)&&(t.auth=`${e.username}:${e.password}`),t}function p(e,t){let n,o;if("function"==typeof t[t.length-1]&&(n=t.pop()),"string"==typeof t[0])o=r(new G.URL(t[0]));else if(t[0]instanceof G.URL)o=r(t[0]);else{o=t[0];try{let e=new G.URL(o.path||"",`${o.protocol||"http:"}//${o.hostname}`);o={pathname:e.pathname,search:e.search,hash:e.hash,...o}}catch(e){}}return(2===t.length&&(o={...o,...t[1]}),void 0===o.protocol&&(i.NODE_VERSION.major>8?o.protocol=(0,a._optionalChain)([(0,a._optionalChain)([e,"optionalAccess",e=>e.globalAgent]),"optionalAccess",e=>e.protocol])||(0,a._optionalChain)([o.agent,"optionalAccess",e=>e.protocol])||(0,a._optionalChain)([o._defaultAgent,"optionalAccess",e=>e.protocol]):o.protocol=(0,a._optionalChain)([o.agent,"optionalAccess",e=>e.protocol])||(0,a._optionalChain)([o._defaultAgent,"optionalAccess",e=>e.protocol])||(0,a._optionalChain)([(0,a._optionalChain)([e,"optionalAccess",e=>e.globalAgent]),"optionalAccess",e=>e.protocol])),n)?[o,n]:[o]}function l(e){let t=e.protocol||"",a=e.hostname||e.host||"",i=!e.port||80===e.port||443===e.port||/^(.*):(\d+)$/.test(a)?"":`:${e.port}`;return{protocol:t,hostname:a,port:i}}}),X("lVZId",function(e,t){W(e.exports,"LocalVariables",()=>i),W(e.exports,"localVariablesIntegration",()=>n);var a=O("oF3fg");let i=a.LocalVariablesSync,n=a.localVariablesSyncIntegration}),X("oF3fg",function(e,t){W(e.exports,"localVariablesSyncIntegration",()=>m),W(e.exports,"LocalVariablesSync",()=>g);var a=O("bsjXU"),i=O("k2ErF"),n=O("kTF8L"),o=O("hVqbS"),s=O("deYUe"),r=O("04aWn"),p=O("1KgWA");function l(e){let t=[],a=!1;function i(i){t=[],a||(a=!0,e(i))}return t.push(i),{add:function(e){t.push(e)},next:function(e){let a=t.pop()||i;try{a(e)}catch(t){i(e)}}}}class d{constructor(){let{Session:e}=V;this._session=new e}configureAndConnect(e,t){this._session.connect(),this._session.on("Debugger.paused",t=>{e(t,()=>{this._session.post("Debugger.resume")})}),this._session.post("Debugger.enable"),this._session.post("Debugger.setPauseOnExceptions",{state:t?"all":"uncaught"})}setPauseOnExceptions(e){this._session.post("Debugger.setPauseOnExceptions",{state:e?"all":"uncaught"})}getLocalVariables(e,t){this._getProperties(e,e=>{let{add:i,next:n}=l(t);for(let t of e)if((0,a._optionalChain)([t,"optionalAccess",e=>e.value,"optionalAccess",e=>e.objectId])&&"Array"===(0,a._optionalChain)([t,"optionalAccess",e=>e.value,"access",e=>e.className])){let e=t.value.objectId;i(a=>this._unrollArray(e,t.name,a,n))}else if((0,a._optionalChain)([t,"optionalAccess",e=>e.value,"optionalAccess",e=>e.objectId])&&"Object"===(0,a._optionalChain)([t,"optionalAccess",e=>e.value,"optionalAccess",e=>e.className])){let e=t.value.objectId;i(a=>this._unrollObject(e,t.name,a,n))}else((0,a._optionalChain)([t,"optionalAccess",e=>e.value,"optionalAccess",e=>e.value])||(0,a._optionalChain)([t,"optionalAccess",e=>e.value,"optionalAccess",e=>e.description]))&&i(e=>this._unrollOther(t,e,n));n({})})}_getProperties(e,t){this._session.post("Runtime.getProperties",{objectId:e,ownProperties:!0},(e,a)=>{e?t([]):t(a.result)})}_unrollArray(e,t,i,n){this._getProperties(e,e=>{i[t]=e.filter(e=>"length"!==e.name&&!isNaN(parseInt(e.name,10))).sort((e,t)=>parseInt(e.name,10)-parseInt(t.name,10)).map(e=>(0,a._optionalChain)([e,"optionalAccess",e=>e.value,"optionalAccess",e=>e.value])),n(i)})}_unrollObject(e,t,i,n){this._getProperties(e,e=>{i[t]=e.map(e=>[e.name,(0,a._optionalChain)([e,"optionalAccess",e=>e.value,"optionalAccess",e=>e.value])]).reduce((e,[t,a])=>(e[t]=a,e),{}),n(i)})}_unrollOther(e,t,i){(0,a._optionalChain)([e,"optionalAccess",e=>e.value,"optionalAccess",e=>e.value])?t[e.name]=e.value.value:(0,a._optionalChain)([e,"optionalAccess",e=>e.value,"optionalAccess",e=>e.description])&&"function"!==(0,a._optionalChain)([e,"optionalAccess",e=>e.value,"optionalAccess",e=>e.type])&&(t[e.name]=`<${e.value.description}>`),i(t)}}function c(){try{return new d}catch(e){return}}let u="LocalVariables",m=(0,o.defineIntegration)((e={},t=c())=>{let o;let d=new n.LRUMap(20),m=!1;return{name:u,setupOnce(){let n=(0,s.getClient)(),c=(0,a._optionalChain)([n,"optionalAccess",e=>e.getOptions,"call",e=>e()]);if(t&&(0,a._optionalChain)([c,"optionalAccess",e=>e.includeLocalVariables])){if(r.NODE_VERSION.major<18){(0,i.logger).log("The `LocalVariables` integration is only supported on Node >= v18.");return}let n=!1!==e.captureAllExceptions;if(t.configureAndConnect((e,i)=>(function(e,{params:{reason:i,data:n,callFrames:s}},r){if("exception"!==i&&"promiseRejection"!==i){r();return}(0,a._optionalChain)([o,"optionalCall",e=>e()]);let c=(0,p.hashFromStack)(e,(0,a._optionalChain)([n,"optionalAccess",e=>e.description]));if(void 0==c){r();return}let{add:u,next:m}=l(e=>{d.set(c,e),r()});for(let e=0;e"local"===e.type),p="global"!==o.className&&o.className?`${o.className}.${n}`:n;if(void 0===(0,a._optionalChain)([r,"optionalAccess",e=>e.object,"access",e=>e.objectId]))u(t=>{t[e]={function:p},m(t)});else{let i=r.object.objectId;u(n=>(0,a._optionalChain)([t,"optionalAccess",e=>e.getLocalVariables,"call",t=>t(i,t=>{n[e]={function:p,vars:t},m(n)})]))}}m([])})(c.stackParser,e,i),n),n){let n=e.maxExceptionsPerSecond||50;o=(0,p.createRateLimiter)(n,()=>{(0,i.logger).log("Local variables rate-limit lifted."),(0,a._optionalChain)([t,"optionalAccess",e=>e.setPauseOnExceptions,"call",e=>e(!0)])},e=>{(0,i.logger).log(`Local variables rate-limit exceeded. Disabling capturing of caught exceptions for ${e} seconds.`),(0,a._optionalChain)([t,"optionalAccess",e=>e.setPauseOnExceptions,"call",e=>e(!1)])})}m=!0}},processEvent:e=>m?function(e){for(let t of(0,a._optionalChain)([e,"optionalAccess",e=>e.exception,"optionalAccess",e=>e.values])||[])!function(e){let t=(0,p.hashFrames)((0,a._optionalChain)([e,"optionalAccess",e=>e.stacktrace,"optionalAccess",e=>e.frames]));if(void 0===t)return;let i=d.remove(t);if(void 0===i)return;let n=(0,a._optionalChain)([e,"access",e=>e.stacktrace,"optionalAccess",e=>e.frames,"optionalAccess",e=>e.length])||0;for(let t=0;te.stacktrace,"optionalAccess",e=>e.frames,"optionalAccess",e=>e[o]])||!i[t])break;void 0!==i[t].vars&&!1!==e.stacktrace.frames[o].in_app&&(0,p.functionNamesMatch)(e.stacktrace.frames[o].function,i[t].function)&&(e.stacktrace.frames[o].vars=i[t].vars)}}(t);return e}(e):e,_getCachedFramesCount:()=>d.size,_getFirstCachedFrame:()=>d.values()[0]}}),g=(0,o.convertIntegrationFnToClass)(u,m)}),X("1KgWA",function(e,t){function a(e,t,a){let i=0,n=5,o=0;return setInterval(()=>{0===o?i>e&&(a(n*=2),n>86400&&(n=86400),o=n):0==(o-=1)&&t(),i=0},1e3).unref(),()=>{i+=1}}function i(e){return void 0!==e&&(0===e.length||"?"===e||""===e)}function n(e,t){return e===t||i(e)&&i(t)}function o(e){if(void 0!==e)return e.slice(-10).reduce((e,t)=>`${e},${t.function},${t.lineno},${t.colno}`,"")}function s(e,t){if(void 0!==t)return o(e(t,1))}W(e.exports,"createRateLimiter",()=>a),W(e.exports,"functionNamesMatch",()=>n),W(e.exports,"hashFrames",()=>o),W(e.exports,"hashFromStack",()=>s)}),X("esVyk",function(e,t){let a;W(e.exports,"modulesIntegration",()=>o),W(e.exports,"Modules",()=>s);var i=O("hVqbS");let n="Modules",o=(0,i.defineIntegration)(()=>({name:n,setupOnce(){},processEvent:e=>(e.modules={...e.modules,...(a||(a=function(){let e=[],t=function(){try{return[]}catch(e){return[]}}(),a={},i={};return t.forEach(t=>{let n=t,o=()=>{let t=n;if(!(n=(0,A.dirname)(t))||t===n||i[t])return;if(0>e.indexOf(n))return o();let s=(0,A.join)(t,"package.json");if(i[t]=!0,!(0,y.existsSync)(s))return o();try{let e=JSON.parse((0,y.readFileSync)(s,"utf8"));a[e.name]=e.version}catch(e){}};o()}),a}()),a)},e)})),s=(0,i.convertIntegrationFnToClass)(n,o)}),X("dDWKn",function(e,t){W(e.exports,"onUncaughtExceptionIntegration",()=>p),W(e.exports,"OnUncaughtException",()=>l);var a=O("deYUe"),i=O("hVqbS"),n=O("k2ErF"),o=O("2xRAP"),s=O("7xJCG");let r="OnUncaughtException",p=(0,i.defineIntegration)((e={})=>{let t={exitEvenIfOtherHandlersAreRegistered:!0,...e};return{name:r,setupOnce(){},setup(e){H.process.on("uncaughtException",function(e,t){let i;let r=!1,p=!1,l=!1,d=e.getOptions();return Object.assign(c=>{let u=s.logAndExitProcess;t.onFatalError?u=t.onFatalError:d.onFatalError&&(u=d.onFatalError);let m=H.process.listeners("uncaughtException").reduce((e,t)=>"domainUncaughtExceptionClear"===t.name||t.tag&&"sentry_tracingErrorCallback"===t.tag||t._errorHandler?e:e+1,0),g=t.exitEvenIfOtherHandlersAreRegistered||0===m;r?g&&(l?(o.DEBUG_BUILD&&(0,n.logger).warn("uncaught exception after calling fatal error shutdown callback - this is bad! forcing shutdown"),(0,s.logAndExitProcess)(c)):p||(p=!0,setTimeout(()=>{l||(l=!0,u(i,c))},2e3))):(i=c,r=!0,(0,a.getClient)()===e&&(0,a.captureException)(c,{originalException:c,captureContext:{level:"fatal"},mechanism:{handled:!1,type:"onuncaughtexception"}}),!l&&g&&(l=!0,u(c)))},{_errorHandler:!0})}(e,t))}}}),l=(0,i.convertIntegrationFnToClass)(r,p)}),X("7xJCG",function(e,t){W(e.exports,"logAndExitProcess",()=>o);var a=O("deYUe"),i=O("k2ErF"),n=O("2xRAP");function o(e){(0,i.consoleSandbox)(()=>{console.error(e)});let t=(0,a.getClient)();void 0===t&&(n.DEBUG_BUILD&&(0,i.logger).warn("No NodeClient was defined, we are exiting the process now."),H.process.exit(1));let o=t.getOptions(),s=o&&o.shutdownTimeout&&o.shutdownTimeout>0&&o.shutdownTimeout||2e3;t.close(s).then(e=>{!e&&n.DEBUG_BUILD&&(0,i.logger).warn("We reached the timeout for emptying the request buffer, still exiting now!"),H.process.exit(1)},e=>{n.DEBUG_BUILD&&(0,i.logger).error(e)})}}),X("kpGGI",function(e,t){W(e.exports,"onUnhandledRejectionIntegration",()=>r),W(e.exports,"OnUnhandledRejection",()=>p);var a=O("deYUe"),i=O("hVqbS"),n=O("k2ErF"),o=O("7xJCG");let s="OnUnhandledRejection",r=(0,i.defineIntegration)((e={})=>{let t=e.mode||"warn";return{name:s,setupOnce(){},setup(e){var i;H.process.on("unhandledRejection",(i={mode:t},function(t,s){(0,a.getClient)()===e&&((0,a.captureException)(t,{originalException:s,captureContext:{extra:{unhandledPromiseRejection:!0}},mechanism:{handled:!1,type:"onunhandledrejection"}}),function(e,t){let a="This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason:";"warn"===t.mode?(0,n.consoleSandbox)(()=>{console.warn(a),console.error(e&&e.stack?e.stack:e)}):"strict"===t.mode&&((0,n.consoleSandbox)(()=>{console.warn(a)}),(0,o.logAndExitProcess)(e))}(t,i))}))}}}),p=(0,i.convertIntegrationFnToClass)(s,r)}),X("7wvFM",function(e,t){W(e.exports,"spotlightIntegration",()=>s),W(e.exports,"Spotlight",()=>r);var a=O("hVqbS"),i=O("k2ErF"),n=O("agl5x");let o="Spotlight",s=(0,a.defineIntegration)((e={})=>{let t={sidecarUrl:e.sidecarUrl||"http://localhost:8969/stream"};return{name:o,setupOnce(){},setup(e){"object"==typeof process&&process.env&&"development"!==process.env.NODE_ENV&&(0,i.logger).warn("[Spotlight] It seems you're not in dev mode. Do you really want to have Spotlight enabled?"),function(e,t){let a=function(e){try{return new G.URL(`${e}`)}catch(t){(0,i.logger).warn(`[Spotlight] Invalid sidecar URL: ${e}`);return}}(t.sidecarUrl);if(!a)return;let o=0;if("function"!=typeof e.on){(0,i.logger).warn("[Spotlight] Cannot connect to spotlight due to missing method on SDK client (`client.on`)");return}e.on("beforeEnvelope",e=>{if(o>3){(0,i.logger).warn("[Spotlight] Disabled Sentry -> Spotlight integration due to too many failed requests");return}let t=(0,n.serializeEnvelope)(e),s=(function(){let{request:e}=g;return"__sentry_original__"in e?e.__sentry_original__:e})()({method:"POST",path:a.pathname,hostname:a.hostname,port:a.port,headers:{"Content-Type":"application/x-sentry-envelope"}},e=>{e.on("data",()=>{}),e.on("end",()=>{}),e.setEncoding("utf8")});s.on("error",()=>{o++,(0,i.logger).warn("[Spotlight] Failed to send envelope to Spotlight Sidecar")}),s.write(t),s.end()})}(e,t)}}}),r=(0,a.convertIntegrationFnToClass)(o,s)}),X("aCFro",function(e,t){W(e.exports,"Undici",()=>y),W(e.exports,"nativeNodeFetchintegration",()=>C);var a,i,n=O("bsjXU"),o=O("hSiIl"),s=O("2gq4F"),r=O("6szME"),p=O("kTF8L"),l=O("c6AFW"),d=O("deYUe"),c=O("hVqbS"),u=O("3hDCQ"),m=O("cCmfn"),g=O("eCOpK"),h=O("7z6ft"),b=O("ehWym"),f=O("b2ZPh"),v=O("iD1up"),I=O("04aWn");(a=i||(i={})).RequestCreate="undici:request:create",a.RequestEnd="undici:request:headers",a.RequestError="undici:request:error";let C=(0,c.defineIntegration)(e=>new y(e));class y{static __initStatic(){this.id="Undici"}__init(){this.name=y.id}__init2(){this._createSpanUrlMap=new p.LRUMap(100)}__init3(){this._headersUrlMap=new p.LRUMap(100)}constructor(e={}){y.prototype.__init.call(this),y.prototype.__init2.call(this),y.prototype.__init3.call(this),y.prototype.__init4.call(this),y.prototype.__init5.call(this),y.prototype.__init6.call(this),this._options={breadcrumbs:void 0===e.breadcrumbs||e.breadcrumbs,tracing:e.tracing,shouldCreateSpanForRequest:e.shouldCreateSpanForRequest}}setupOnce(e){let t;if(!(I.NODE_VERSION.major<16)){try{t=$7bbd994cd14cc33f$import$ea7cfbf0dcb32429}catch(e){}t&&t.subscribe&&(t.subscribe(i.RequestCreate,this._onRequestCreate),t.subscribe(i.RequestEnd,this._onRequestEnd),t.subscribe(i.RequestError,this._onRequestError))}}_shouldCreateSpan(e){if(!1===this._options.tracing||void 0===this._options.tracing&&!(0,h.hasTracingEnabled)())return!1;if(void 0===this._options.shouldCreateSpanForRequest)return!0;let t=this._createSpanUrlMap.get(e);if(void 0!==t)return t;let a=this._options.shouldCreateSpanForRequest(e);return this._createSpanUrlMap.set(e,a),a}__init4(){this._onRequestCreate=e=>{if(!(0,n._optionalChain)([d.getClient,"call",e=>e(),"optionalAccess",e=>e.getIntegration,"call",e=>e(y)]))return;let{request:t}=e,a=t.origin?t.origin.toString()+t.path:t.path,i=(0,d.getClient)();if(!i||(0,b.isSentryRequestUrl)(a,i)||void 0!==t.__sentry_span__)return;let p=i.getOptions(),c=(0,d.getCurrentScope)(),h=(0,g.getIsolationScope)(),f=(0,u.getActiveSpan)(),I=this._shouldCreateSpan(a)?function(e,t,a){let i=(0,r.parseUrl)(a),o=t.method||"GET",s={"http.method":o};return i.search&&(s["http.query"]=i.search),i.hash&&(s["http.fragment"]=i.hash),(0,n._optionalChain)([e,"optionalAccess",e=>e.startChild,"call",e=>e({op:"http.client",origin:"auto.http.node.undici",description:`${o} ${(0,r.getSanitizedUrlString)(i)}`,data:s})])}(f,t,a):void 0;if(I&&(t.__sentry_span__=I),(e=>{if(void 0===p.tracePropagationTargets)return!0;let t=this._headersUrlMap.get(e);if(void 0!==t)return t;let a=(0,l.stringMatchesSomePattern)(e,p.tracePropagationTargets);return this._headersUrlMap.set(e,a),a})(a)){var C;let{traceId:e,spanId:a,sampled:n,dsc:r}={...h.getPropagationContext(),...c.getPropagationContext()},p=I?(0,v.spanToTraceHeader)(I):(0,s.generateSentryTraceHeader)(e,a,n);C=(0,o.dynamicSamplingContextToSentryBaggageHeader)(r||(I?(0,m.getDynamicSamplingContextFromSpan)(I):(0,m.getDynamicSamplingContextFromClient)(e,i,c))),(Array.isArray(t.headers)?t.headers.some(e=>"sentry-trace"===e):t.headers.split("\r\n").some(e=>e.startsWith("sentry-trace:")))||(t.addHeader("sentry-trace",p),C&&t.addHeader("baggage",C))}}}__init5(){this._onRequestEnd=e=>{if(!(0,n._optionalChain)([d.getClient,"call",e=>e(),"optionalAccess",e=>e.getIntegration,"call",e=>e(y)]))return;let{request:t,response:a}=e,i=t.origin?t.origin.toString()+t.path:t.path;if((0,b.isSentryRequestUrl)(i,(0,d.getClient)()))return;let o=t.__sentry_span__;o&&((0,f.setHttpStatus)(o,a.statusCode),o.end()),this._options.breadcrumbs&&(0,d.addBreadcrumb)({category:"http",data:{method:t.method,status_code:a.statusCode,url:i},type:"http"},{event:"response",request:t,response:a})}}__init6(){this._onRequestError=e=>{if(!(0,n._optionalChain)([d.getClient,"call",e=>e(),"optionalAccess",e=>e.getIntegration,"call",e=>e(y)]))return;let{request:t}=e,a=t.origin?t.origin.toString()+t.path:t.path;if((0,b.isSentryRequestUrl)(a,(0,d.getClient)()))return;let i=t.__sentry_span__;i&&(i.setStatus("internal_error"),i.end()),this._options.breadcrumbs&&(0,d.addBreadcrumb)({category:"http",data:{method:t.method,url:a},level:"error",type:"http"},{event:"error",request:t})}}}y.__initStatic()}),X("jUJ2l",function(e,t){W(e.exports,"createGetModuleFromFilename",()=>n);var a=O("eANmd");function i(e){return e.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}function n(e=process.argv[1]?(0,a.dirname)(process.argv[1]):process.cwd(),t="\\"===A.sep){let n=t?i(e):e;return e=>{if(!e)return;let a=t?i(e):e,{dir:o,base:s,ext:r}=(0,A.posix).parse(a);(".js"===r||".mjs"===r||".cjs"===r)&&(s=s.slice(0,-1*r.length)),o||(o=".");let p=o.lastIndexOf("/node_modules");if(p>-1)return`${o.slice(p+14).replace(/\//g,".")}:${s}`;if(o.startsWith(n)){let e=o.slice(n.length+1).replace(/\//g,".");return e&&(e+=":"),e+=s}return s}}}),X("eANmd",function(e,t){W(e.exports,"dirname",()=>i);let a=/^(\S+:\\|\/?)([\s\S]*?)((?:\.{1,2}|[^/\\]+?|)(\.[^./\\]*|))(?:[/\\]*)$/;function i(e){let t=function(e){let t=e.length>1024?`${e.slice(-1024)}`:e,i=a.exec(t);return i?i.slice(1):[]}(e),i=t[0],n=t[1];return i||n?(n&&(n=n.slice(0,n.length-1)),i+n):"."}}),X("aCqBu",function(e,t){W(e.exports,"deepReadDirSync",()=>a);function a(e){let t=A.resolve(e);if(!y.existsSync(t))throw Error(`Cannot read contents of ${t}. Directory does not exist.`);if(!y.statSync(t).isDirectory())throw Error(`Cannot read contents of ${t}, because it is not a directory.`);let a=e=>y.readdirSync(e).reduce((t,i)=>{let n=A.join(e,i);return y.statSync(n).isDirectory()?t.concat(a(n)):(t.push(n),t)},[]);return a(t).map(e=>A.relative(t,e))}}),X("eOLhk",function(e,t){W(e.exports,"enableAnrDetection",()=>n);var a=O("deYUe"),i=O("5x2pZ");function n(e){let t=(0,a.getClient)();return new i.Anr(e).setup(t),Promise.resolve()}}),X("5x2pZ",function(e,t){W(e.exports,"anrIntegration",()=>u),W(e.exports,"Anr",()=>m);var a=O("bsjXU"),i=O("bfWYX"),n=O("fArVl"),o=O("k2ErF"),s=O("hVqbS"),r=O("deYUe"),p=O("04aWn"),l=O("3yNTe");function d(e,...t){(0,o.logger).log(`[ANR] ${e}`,...t)}async function c(e){let t={message:"ANR"},i={};for(let a of e.getEventProcessors()){if(null===t)break;t=await a(t,i)}return(0,a._optionalChain)([t,"optionalAccess",e=>e.contexts])||{}}let u=(0,s.defineIntegration)((e={})=>({name:"Anr",setupOnce(){},setup(t){if(p.NODE_VERSION.major<16||16===p.NODE_VERSION.major&&p.NODE_VERSION.minor<17)throw Error("ANR detection requires Node 16.17.0 or later");setImmediate(()=>g(t,e))}})),m=(0,s.convertIntegrationFnToClass)("Anr",u);async function g(t,a){let s=await c(t),p=t.getDsn();if(!p)return;(0,i._optionalChainDelete)([s,"access",e=>e.app,"optionalAccess",e=>delete e.app_memory]),(0,i._optionalChainDelete)([s,"access",e=>e.device,"optionalAccess",e=>delete e.free_memory]);let u=t.getOptions(),m=t.getSdkMetadata()||{};m.sdk&&(m.sdk.integrations=u.integrations.map(e=>e.name));let g={debug:(0,o.logger).isEnabled(),dsn:p,environment:u.environment||"production",release:u.release,dist:u.dist,sdkMetadata:m,appRootPath:a.appRootPath,pollInterval:a.pollInterval||50,anrThreshold:a.anrThreshold||5e3,captureStackTrace:!!a.captureStackTrace,staticTags:a.staticTags||{},contexts:s};g.captureStackTrace&&!V.url()&&V.open(0);let{Worker:h}=(0,n.dynamicRequire)(e,"worker_threads"),b=new h(new G.URL(`data:application/javascript;base64,${l.base64WorkerScript}`),{workerData:g});process.on("exit",()=>{b.terminate()});let f=setInterval(()=>{try{let e=(0,r.getCurrentScope)().getSession(),t=e?{...e,toJSON:void 0}:void 0;b.postMessage({session:t})}catch(e){}},g.pollInterval);f.unref(),b.on("message",e=>{"session-ended"===e&&(d("ANR event sent from ANR worker. Clearing session in this thread."),(0,r.getCurrentScope)().setSession(void 0))}),b.once("error",e=>{clearInterval(f),d("ANR worker error",e)}),b.once("exit",e=>{clearInterval(f),d("ANR worker exit",e)}),b.unref()}}),X("bfWYX",function(e,t){W(e.exports,"_optionalChainDelete",()=>i);var a=O("bsjXU");function i(e){let t=(0,a._optionalChain)(e);return null==t||t}}),X("3yNTe",function(e,t){W(e.exports,"base64WorkerScript",()=>a);/*! @sentry/node 7.107.0 (48b8169) | https://github.com/getsentry/sentry-javascript */let a="aW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gJ2luc3BlY3Rvcic7CmltcG9ydCB7IHdvcmtlckRhdGEsIHBhcmVudFBvcnQgfSBmcm9tICd3b3JrZXJfdGhyZWFkcyc7CmltcG9ydCB7IHBvc2l4LCBzZXAgfSBmcm9tICdwYXRoJzsKaW1wb3J0ICogYXMgaHR0cCBmcm9tICdodHRwJzsKaW1wb3J0ICogYXMgaHR0cHMgZnJvbSAnaHR0cHMnOwppbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7CmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCc7CmltcG9ydCB7IGNyZWF0ZUd6aXAgfSBmcm9tICd6bGliJzsKaW1wb3J0ICogYXMgbmV0IGZyb20gJ25ldCc7CmltcG9ydCAqIGFzIHRscyBmcm9tICd0bHMnOwoKLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZApjb25zdCBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIG9uZSBvZiBhIGZldyBFcnJvciBvciBFcnJvci1saWtlCiAqIHtAbGluayBpc0Vycm9yfS4KICoKICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuCiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC4KICovCmZ1bmN0aW9uIGlzRXJyb3Iod2F0KSB7CiAgc3dpdGNoIChvYmplY3RUb1N0cmluZy5jYWxsKHdhdCkpIHsKICAgIGNhc2UgJ1tvYmplY3QgRXJyb3JdJzoKICAgIGNhc2UgJ1tvYmplY3QgRXhjZXB0aW9uXSc6CiAgICBjYXNlICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nOgogICAgICByZXR1cm4gdHJ1ZTsKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiBpc0luc3RhbmNlT2Yod2F0LCBFcnJvcik7CiAgfQp9Ci8qKgogKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gYnVpbHQtaW4gY2xhc3MuCiAqCiAqIEBwYXJhbSB3YXQgVGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQKICogQHBhcmFtIGNsYXNzTmFtZQogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc0J1aWx0aW4od2F0LCBjbGFzc05hbWUpIHsKICByZXR1cm4gb2JqZWN0VG9TdHJpbmcuY2FsbCh3YXQpID09PSBgW29iamVjdCAke2NsYXNzTmFtZX1dYDsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIHN0cmluZwogKiB7QGxpbmsgaXNTdHJpbmd9LgogKgogKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNTdHJpbmcod2F0KSB7CiAgcmV0dXJuIGlzQnVpbHRpbih3YXQsICdTdHJpbmcnKTsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBvYmplY3QgbGl0ZXJhbCwgb3IgYSBjbGFzcyBpbnN0YW5jZS4KICoge0BsaW5rIGlzUGxhaW5PYmplY3R9LgogKgogKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh3YXQpIHsKICByZXR1cm4gaXNCdWlsdGluKHdhdCwgJ09iamVjdCcpOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEV2ZW50IGluc3RhbmNlCiAqIHtAbGluayBpc0V2ZW50fS4KICoKICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuCiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC4KICovCmZ1bmN0aW9uIGlzRXZlbnQod2F0KSB7CiAgcmV0dXJuIHR5cGVvZiBFdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHdhdCwgRXZlbnQpOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEVsZW1lbnQgaW5zdGFuY2UKICoge0BsaW5rIGlzRWxlbWVudH0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc0VsZW1lbnQod2F0KSB7CiAgcmV0dXJuIHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpc0luc3RhbmNlT2Yod2F0LCBFbGVtZW50KTsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlIGhhcyBhIHRoZW4gZnVuY3Rpb24uCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKi8KZnVuY3Rpb24gaXNUaGVuYWJsZSh3YXQpIHsKICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzCiAgcmV0dXJuIEJvb2xlYW4od2F0ICYmIHdhdC50aGVuICYmIHR5cGVvZiB3YXQudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7Cn0KCi8qKgogKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYSBTeW50aGV0aWNFdmVudAogKiB7QGxpbmsgaXNTeW50aGV0aWNFdmVudH0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KHdhdCkgewogIHJldHVybiBpc1BsYWluT2JqZWN0KHdhdCkgJiYgJ25hdGl2ZUV2ZW50JyBpbiB3YXQgJiYgJ3ByZXZlbnREZWZhdWx0JyBpbiB3YXQgJiYgJ3N0b3BQcm9wYWdhdGlvbicgaW4gd2F0Owp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUgaXMgTmFOCiAqIHtAbGluayBpc05hTn0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc05hTiQxKHdhdCkgewogIHJldHVybiB0eXBlb2Ygd2F0ID09PSAnbnVtYmVyJyAmJiB3YXQgIT09IHdhdDsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBpbnN0YW5jZSBvZiBwcm92aWRlZCBjb25zdHJ1Y3Rvci4KICoge0BsaW5rIGlzSW5zdGFuY2VPZn0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcGFyYW0gYmFzZSBBIGNvbnN0cnVjdG9yIHRvIGJlIHVzZWQgaW4gYSBjaGVjay4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNJbnN0YW5jZU9mKHdhdCwgYmFzZSkgewogIHRyeSB7CiAgICByZXR1cm4gd2F0IGluc3RhbmNlb2YgYmFzZTsKICB9IGNhdGNoIChfZSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIFZ1ZSBWaWV3TW9kZWwuCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc1Z1ZVZpZXdNb2RlbCh3YXQpIHsKICAvLyBOb3QgdXNpbmcgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyBiZWNhdXNlIGluIFZ1ZSAzIGl0IHdvdWxkIHJlYWQgdGhlIGluc3RhbmNlJ3MgU3ltYm9sKFN5bWJvbC50b1N0cmluZ1RhZykgcHJvcGVydHkuCiAgcmV0dXJuICEhKHR5cGVvZiB3YXQgPT09ICdvYmplY3QnICYmIHdhdCAhPT0gbnVsbCAmJiAoKHdhdCApLl9faXNWdWUgfHwgKHdhdCApLl9pc1Z1ZSkpOwp9CgovKiogSW50ZXJuYWwgZ2xvYmFsIHdpdGggY29tbW9uIHByb3BlcnRpZXMgYW5kIFNlbnRyeSBleHRlbnNpb25zICAqLwoKLy8gVGhlIGNvZGUgYmVsb3cgZm9yICdpc0dsb2JhbE9iaicgYW5kICdHTE9CQUxfT0JKJyB3YXMgY29waWVkIGZyb20gY29yZS1qcyBiZWZvcmUgbW9kaWZpY2F0aW9uCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvMWI5NDRkZjU1MjgyY2RjOTljOTBkYjVmNDllYjBiNmVkYTJjYzBhMy9wYWNrYWdlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMKLy8gY29yZS1qcyBoYXMgdGhlIGZvbGxvd2luZyBsaWNlbmNlOgovLwovLyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAyMiBEZW5pcyBQdXNoa2FyZXYKLy8KLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQovLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAovLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci8vCi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgovLwovLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgovLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgovLyBUSEUgU09GVFdBUkUuCgovKiogUmV0dXJucyAnb2JqJyBpZiBpdCdzIHRoZSBnbG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgcmV0dXJucyB1bmRlZmluZWQgKi8KZnVuY3Rpb24gaXNHbG9iYWxPYmoob2JqKSB7CiAgcmV0dXJuIG9iaiAmJiBvYmouTWF0aCA9PSBNYXRoID8gb2JqIDogdW5kZWZpbmVkOwp9CgovKiogR2V0J3MgdGhlIGdsb2JhbCBvYmplY3QgZm9yIHRoZSBjdXJyZW50IEphdmFTY3JpcHQgcnVudGltZSAqLwpjb25zdCBHTE9CQUxfT0JKID0KICAodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgaXNHbG9iYWxPYmooZ2xvYmFsVGhpcykpIHx8CiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscwogICh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKHdpbmRvdykpIHx8CiAgKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKHNlbGYpKSB8fAogICh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKGdsb2JhbCkpIHx8CiAgKGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB0aGlzOwogIH0pKCkgfHwKICB7fTsKCi8qKgogKiBAZGVwcmVjYXRlZCBVc2UgR0xPQkFMX09CSiBpbnN0ZWFkIG9yIFdJTkRPVyBmcm9tIEBzZW50cnkvYnJvd3Nlci4gVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjgKICovCmZ1bmN0aW9uIGdldEdsb2JhbE9iamVjdCgpIHsKICByZXR1cm4gR0xPQkFMX09CSiA7Cn0KCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpjb25zdCBXSU5ET1cgPSBnZXRHbG9iYWxPYmplY3QoKTsKCmNvbnN0IERFRkFVTFRfTUFYX1NUUklOR19MRU5HVEggPSA4MDsKCi8qKgogKiBHaXZlbiBhIGNoaWxkIERPTSBlbGVtZW50LCByZXR1cm5zIGEgcXVlcnktc2VsZWN0b3Igc3RhdGVtZW50IGRlc2NyaWJpbmcgdGhhdAogKiBhbmQgaXRzIGFuY2VzdG9ycwogKiBlLmcuIFtIVE1MRWxlbWVudF0gPT4gYm9keSA+IGRpdiA+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdCiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aAogKi8KZnVuY3Rpb24gaHRtbFRyZWVBc1N0cmluZygKICBlbGVtLAogIG9wdGlvbnMgPSB7fSwKKSB7CiAgaWYgKCFlbGVtKSB7CiAgICByZXR1cm4gJzx1bmtub3duPic7CiAgfQoKICAvLyB0cnkvY2F0Y2ggYm90aDoKICAvLyAtIGFjY2Vzc2luZyBldmVudC50YXJnZXQgKHNlZSBnZXRzZW50cnkvcmF2ZW4tanMjODM4LCAjNzY4KQogIC8vIC0gYGh0bWxUcmVlQXNTdHJpbmdgIGJlY2F1c2UgaXQncyBjb21wbGV4LCBhbmQganVzdCBhY2Nlc3NpbmcgdGhlIERPTSBpbmNvcnJlY3RseQogIC8vIC0gY2FuIHRocm93IGFuIGV4Y2VwdGlvbiBpbiBzb21lIGNpcmN1bXN0YW5jZXMuCiAgdHJ5IHsKICAgIGxldCBjdXJyZW50RWxlbSA9IGVsZW0gOwogICAgY29uc3QgTUFYX1RSQVZFUlNFX0hFSUdIVCA9IDU7CiAgICBjb25zdCBvdXQgPSBbXTsKICAgIGxldCBoZWlnaHQgPSAwOwogICAgbGV0IGxlbiA9IDA7CiAgICBjb25zdCBzZXBhcmF0b3IgPSAnID4gJzsKICAgIGNvbnN0IHNlcExlbmd0aCA9IHNlcGFyYXRvci5sZW5ndGg7CiAgICBsZXQgbmV4dFN0cjsKICAgIGNvbnN0IGtleUF0dHJzID0gQXJyYXkuaXNBcnJheShvcHRpb25zKSA/IG9wdGlvbnMgOiBvcHRpb25zLmtleUF0dHJzOwogICAgY29uc3QgbWF4U3RyaW5nTGVuZ3RoID0gKCFBcnJheS5pc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMubWF4U3RyaW5nTGVuZ3RoKSB8fCBERUZBVUxUX01BWF9TVFJJTkdfTEVOR1RIOwoKICAgIHdoaWxlIChjdXJyZW50RWxlbSAmJiBoZWlnaHQrKyA8IE1BWF9UUkFWRVJTRV9IRUlHSFQpIHsKICAgICAgbmV4dFN0ciA9IF9odG1sRWxlbWVudEFzU3RyaW5nKGN1cnJlbnRFbGVtLCBrZXlBdHRycyk7CiAgICAgIC8vIGJhaWwgb3V0IGlmCiAgICAgIC8vIC0gbmV4dFN0ciBpcyB0aGUgJ2h0bWwnIGVsZW1lbnQKICAgICAgLy8gLSB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgdGhhdCB3b3VsZCBiZSBjcmVhdGVkIGV4Y2VlZHMgbWF4U3RyaW5nTGVuZ3RoCiAgICAgIC8vICAgKGlnbm9yZSB0aGlzIGxpbWl0IGlmIHdlIGFyZSBvbiB0aGUgZmlyc3QgaXRlcmF0aW9uKQogICAgICBpZiAobmV4dFN0ciA9PT0gJ2h0bWwnIHx8IChoZWlnaHQgPiAxICYmIGxlbiArIG91dC5sZW5ndGggKiBzZXBMZW5ndGggKyBuZXh0U3RyLmxlbmd0aCA+PSBtYXhTdHJpbmdMZW5ndGgpKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIG91dC5wdXNoKG5leHRTdHIpOwoKICAgICAgbGVuICs9IG5leHRTdHIubGVuZ3RoOwogICAgICBjdXJyZW50RWxlbSA9IGN1cnJlbnRFbGVtLnBhcmVudE5vZGU7CiAgICB9CgogICAgcmV0dXJuIG91dC5yZXZlcnNlKCkuam9pbihzZXBhcmF0b3IpOwogIH0gY2F0Y2ggKF9vTykgewogICAgcmV0dXJuICc8dW5rbm93bj4nOwogIH0KfQoKLyoqCiAqIFJldHVybnMgYSBzaW1wbGUsIHF1ZXJ5LXNlbGVjdG9yIHJlcHJlc2VudGF0aW9uIG9mIGEgRE9NIGVsZW1lbnQKICogZS5nLiBbSFRNTEVsZW1lbnRdID0+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdCiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aAogKi8KZnVuY3Rpb24gX2h0bWxFbGVtZW50QXNTdHJpbmcoZWwsIGtleUF0dHJzKSB7CiAgY29uc3QgZWxlbSA9IGVsCgo7CgogIGNvbnN0IG91dCA9IFtdOwogIGxldCBjbGFzc05hbWU7CiAgbGV0IGNsYXNzZXM7CiAgbGV0IGtleTsKICBsZXQgYXR0cjsKICBsZXQgaTsKCiAgaWYgKCFlbGVtIHx8ICFlbGVtLnRhZ05hbWUpIHsKICAgIHJldHVybiAnJzsKICB9CgogIC8vIEB0cy1leHBlY3QtZXJyb3IgV0lORE9XIGhhcyBIVE1MRWxlbWVudAogIGlmIChXSU5ET1cuSFRNTEVsZW1lbnQpIHsKICAgIC8vIElmIHVzaW5nIHRoZSBjb21wb25lbnQgbmFtZSBhbm5vdGF0aW9uIHBsdWdpbiwgdGhpcyB2YWx1ZSBtYXkgYmUgYXZhaWxhYmxlIG9uIHRoZSBET00gbm9kZQogICAgaWYgKGVsZW0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbGVtLmRhdGFzZXQgJiYgZWxlbS5kYXRhc2V0WydzZW50cnlDb21wb25lbnQnXSkgewogICAgICByZXR1cm4gZWxlbS5kYXRhc2V0WydzZW50cnlDb21wb25lbnQnXTsKICAgIH0KICB9CgogIG91dC5wdXNoKGVsZW0udGFnTmFtZS50b0xvd2VyQ2FzZSgpKTsKCiAgLy8gUGFpcnMgb2YgYXR0cmlidXRlIGtleXMgZGVmaW5lZCBpbiBgc2VyaWFsaXplQXR0cmlidXRlYCBhbmQgdGhlaXIgdmFsdWVzIG9uIGVsZW1lbnQuCiAgY29uc3Qga2V5QXR0clBhaXJzID0KICAgIGtleUF0dHJzICYmIGtleUF0dHJzLmxlbmd0aAogICAgICA/IGtleUF0dHJzLmZpbHRlcihrZXlBdHRyID0+IGVsZW0uZ2V0QXR0cmlidXRlKGtleUF0dHIpKS5tYXAoa2V5QXR0ciA9PiBba2V5QXR0ciwgZWxlbS5nZXRBdHRyaWJ1dGUoa2V5QXR0cildKQogICAgICA6IG51bGw7CgogIGlmIChrZXlBdHRyUGFpcnMgJiYga2V5QXR0clBhaXJzLmxlbmd0aCkgewogICAga2V5QXR0clBhaXJzLmZvckVhY2goa2V5QXR0clBhaXIgPT4gewogICAgICBvdXQucHVzaChgWyR7a2V5QXR0clBhaXJbMF19PSIke2tleUF0dHJQYWlyWzFdfSJdYCk7CiAgICB9KTsKICB9IGVsc2UgewogICAgaWYgKGVsZW0uaWQpIHsKICAgICAgb3V0LnB1c2goYCMke2VsZW0uaWR9YCk7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdAogICAgY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWU7CiAgICBpZiAoY2xhc3NOYW1lICYmIGlzU3RyaW5nKGNsYXNzTmFtZSkpIHsKICAgICAgY2xhc3NlcyA9IGNsYXNzTmFtZS5zcGxpdCgvXHMrLyk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgb3V0LnB1c2goYC4ke2NsYXNzZXNbaV19YCk7CiAgICAgIH0KICAgIH0KICB9CiAgY29uc3QgYWxsb3dlZEF0dHJzID0gWydhcmlhLWxhYmVsJywgJ3R5cGUnLCAnbmFtZScsICd0aXRsZScsICdhbHQnXTsKICBmb3IgKGkgPSAwOyBpIDwgYWxsb3dlZEF0dHJzLmxlbmd0aDsgaSsrKSB7CiAgICBrZXkgPSBhbGxvd2VkQXR0cnNbaV07CiAgICBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoa2V5KTsKICAgIGlmIChhdHRyKSB7CiAgICAgIG91dC5wdXNoKGBbJHtrZXl9PSIke2F0dHJ9Il1gKTsKICAgIH0KICB9CiAgcmV0dXJuIG91dC5qb2luKCcnKTsKfQoKLyoqCiAqIFRoaXMgc2VydmVzIGFzIGEgYnVpbGQgdGltZSBmbGFnIHRoYXQgd2lsbCBiZSB0cnVlIGJ5IGRlZmF1bHQsIGJ1dCBmYWxzZSBpbiBub24tZGVidWcgYnVpbGRzIG9yIGlmIHVzZXJzIHJlcGxhY2UgYF9fU0VOVFJZX0RFQlVHX19gIGluIHRoZWlyIGdlbmVyYXRlZCBjb2RlLgogKgogKiBBVFRFTlRJT046IFRoaXMgY29uc3RhbnQgbXVzdCBuZXZlciBjcm9zcyBwYWNrYWdlIGJvdW5kYXJpZXMgKGkuZS4gYmUgZXhwb3J0ZWQpIHRvIGd1YXJhbnRlZSB0aGF0IGl0IGNhbiBiZSB1c2VkIGZvciB0cmVlIHNoYWtpbmcuCiAqLwpjb25zdCBERUJVR19CVUlMRCQxID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTsKCi8qKiBQcmVmaXggZm9yIGxvZ2dpbmcgc3RyaW5ncyAqLwpjb25zdCBQUkVGSVggPSAnU2VudHJ5IExvZ2dlciAnOwoKY29uc3QgQ09OU09MRV9MRVZFTFMgPSBbCiAgJ2RlYnVnJywKICAnaW5mbycsCiAgJ3dhcm4nLAogICdlcnJvcicsCiAgJ2xvZycsCiAgJ2Fzc2VydCcsCiAgJ3RyYWNlJywKXSA7CgovKiogVGhpcyBtYXkgYmUgbXV0YXRlZCBieSB0aGUgY29uc29sZSBpbnN0cnVtZW50YXRpb24uICovCmNvbnN0IG9yaWdpbmFsQ29uc29sZU1ldGhvZHMKCiA9IHt9OwoKLyoqIEpTRG9jICovCgovKioKICogVGVtcG9yYXJpbHkgZGlzYWJsZSBzZW50cnkgY29uc29sZSBpbnN0cnVtZW50YXRpb25zLgogKgogKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIHJ1biBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBgY29uc29sZWAgbWVzc2FnZXMKICogQHJldHVybnMgVGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrCiAqLwpmdW5jdGlvbiBjb25zb2xlU2FuZGJveChjYWxsYmFjaykgewogIGlmICghKCdjb25zb2xlJyBpbiBHTE9CQUxfT0JKKSkgewogICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgfQoKICBjb25zdCBjb25zb2xlID0gR0xPQkFMX09CSi5jb25zb2xlIDsKICBjb25zdCB3cmFwcGVkRnVuY3MgPSB7fTsKCiAgY29uc3Qgd3JhcHBlZExldmVscyA9IE9iamVjdC5rZXlzKG9yaWdpbmFsQ29uc29sZU1ldGhvZHMpIDsKCiAgLy8gUmVzdG9yZSBhbGwgd3JhcHBlZCBjb25zb2xlIG1ldGhvZHMKICB3cmFwcGVkTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4gewogICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlTWV0aG9kID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kc1tsZXZlbF0gOwogICAgd3JhcHBlZEZ1bmNzW2xldmVsXSA9IGNvbnNvbGVbbGV2ZWxdIDsKICAgIGNvbnNvbGVbbGV2ZWxdID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kOwogIH0pOwoKICB0cnkgewogICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgfSBmaW5hbGx5IHsKICAgIC8vIFJldmVydCByZXN0b3JhdGlvbiB0byB3cmFwcGVkIHN0YXRlCiAgICB3cmFwcGVkTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4gewogICAgICBjb25zb2xlW2xldmVsXSA9IHdyYXBwZWRGdW5jc1tsZXZlbF0gOwogICAgfSk7CiAgfQp9CgpmdW5jdGlvbiBtYWtlTG9nZ2VyKCkgewogIGxldCBlbmFibGVkID0gZmFsc2U7CiAgY29uc3QgbG9nZ2VyID0gewogICAgZW5hYmxlOiAoKSA9PiB7CiAgICAgIGVuYWJsZWQgPSB0cnVlOwogICAgfSwKICAgIGRpc2FibGU6ICgpID0+IHsKICAgICAgZW5hYmxlZCA9IGZhbHNlOwogICAgfSwKICAgIGlzRW5hYmxlZDogKCkgPT4gZW5hYmxlZCwKICB9OwoKICBpZiAoREVCVUdfQlVJTEQkMSkgewogICAgQ09OU09MRV9MRVZFTFMuZm9yRWFjaChuYW1lID0+IHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkKICAgICAgbG9nZ2VyW25hbWVdID0gKC4uLmFyZ3MpID0+IHsKICAgICAgICBpZiAoZW5hYmxlZCkgewogICAgICAgICAgY29uc29sZVNhbmRib3goKCkgPT4gewogICAgICAgICAgICBHTE9CQUxfT0JKLmNvbnNvbGVbbmFtZV0oYCR7UFJFRklYfVske25hbWV9XTpgLCAuLi5hcmdzKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0pOwogIH0gZWxzZSB7CiAgICBDT05TT0xFX0xFVkVMUy5mb3JFYWNoKG5hbWUgPT4gewogICAgICBsb2dnZXJbbmFtZV0gPSAoKSA9PiB1bmRlZmluZWQ7CiAgICB9KTsKICB9CgogIHJldHVybiBsb2dnZXIgOwp9Cgpjb25zdCBsb2dnZXIgPSBtYWtlTG9nZ2VyKCk7CgovKioKICogUmVuZGVycyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHNuLgogKgogKiBCeSBkZWZhdWx0LCB0aGlzIHdpbGwgcmVuZGVyIHRoZSBwdWJsaWMgcmVwcmVzZW50YXRpb24gd2l0aG91dCB0aGUgcGFzc3dvcmQKICogY29tcG9uZW50LiBUbyBnZXQgdGhlIGRlcHJlY2F0ZWQgcHJpdmF0ZSByZXByZXNlbnRhdGlvbiwgc2V0IGB3aXRoUGFzc3dvcmRgCiAqIHRvIHRydWUuCiAqCiAqIEBwYXJhbSB3aXRoUGFzc3dvcmQgV2hlbiBzZXQgdG8gdHJ1ZSwgdGhlIHBhc3N3b3JkIHdpbGwgYmUgaW5jbHVkZWQuCiAqLwpmdW5jdGlvbiBkc25Ub1N0cmluZyhkc24sIHdpdGhQYXNzd29yZCA9IGZhbHNlKSB7CiAgY29uc3QgeyBob3N0LCBwYXRoLCBwYXNzLCBwb3J0LCBwcm9qZWN0SWQsIHByb3RvY29sLCBwdWJsaWNLZXkgfSA9IGRzbjsKICByZXR1cm4gKAogICAgYCR7cHJvdG9jb2x9Oi8vJHtwdWJsaWNLZXl9JHt3aXRoUGFzc3dvcmQgJiYgcGFzcyA/IGA6JHtwYXNzfWAgOiAnJ31gICsKICAgIGBAJHtob3N0fSR7cG9ydCA/IGA6JHtwb3J0fWAgOiAnJ30vJHtwYXRoID8gYCR7cGF0aH0vYCA6IHBhdGh9JHtwcm9qZWN0SWR9YAogICk7Cn0KCi8qKiBBbiBlcnJvciBlbWl0dGVkIGJ5IFNlbnRyeSBTREtzIGFuZCByZWxhdGVkIHV0aWxpdGllcy4gKi8KY2xhc3MgU2VudHJ5RXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgLyoqIERpc3BsYXkgbmFtZSBvZiB0aGlzIGVycm9yIGluc3RhbmNlLiAqLwoKICAgY29uc3RydWN0b3IoIG1lc3NhZ2UsIGxvZ0xldmVsID0gJ3dhcm4nKSB7CiAgICBzdXBlcihtZXNzYWdlKTt0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwogICAgdGhpcy5uYW1lID0gbmV3LnRhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZTsKICAgIC8vIFRoaXMgc2V0cyB0aGUgcHJvdG90eXBlIHRvIGJlIGBFcnJvcmAsIG5vdCBgU2VudHJ5RXJyb3JgLiBJdCdzIHVuY2xlYXIgd2h5IHdlIGRvIHRoaXMsIGJ1dCBjb21tZW50aW5nIHRoaXMgbGluZQogICAgLy8gb3V0IGNhdXNlcyB2YXJpb3VzIChzZWVtaW5nbHkgdG90YWxseSB1bnJlbGF0ZWQpIHBsYXl3cmlnaHQgdGVzdHMgY29uc2lzdGVudGx5IHRpbWUgb3V0LiBGWUksIHRoaXMgbWFrZXMKICAgIC8vIGluc3RhbmNlcyBvZiBgU2VudHJ5RXJyb3JgIGZhaWwgYG9iaiBpbnN0YW5jZW9mIFNlbnRyeUVycm9yYCBjaGVja3MuCiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgbmV3LnRhcmdldC5wcm90b3R5cGUpOwogICAgdGhpcy5sb2dMZXZlbCA9IGxvZ0xldmVsOwogIH0KfQoKLyoqCiAqIEVuY29kZXMgZ2l2ZW4gb2JqZWN0IGludG8gdXJsLWZyaWVuZGx5IGZvcm1hdAogKgogKiBAcGFyYW0gb2JqZWN0IEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHNlcmlhbGl6YWJsZSB2YWx1ZXMKICogQHJldHVybnMgc3RyaW5nIEVuY29kZWQKICovCmZ1bmN0aW9uIHVybEVuY29kZShvYmplY3QpIHsKICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KQogICAgLm1hcChrZXkgPT4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KG9iamVjdFtrZXldKX1gKQogICAgLmpvaW4oJyYnKTsKfQoKLyoqCiAqIFRyYW5zZm9ybXMgYW55IGBFcnJvcmAgb3IgYEV2ZW50YCBpbnRvIGEgcGxhaW4gb2JqZWN0IHdpdGggYWxsIG9mIHRoZWlyIGVudW1lcmFibGUgcHJvcGVydGllcywgYW5kIHNvbWUgb2YgdGhlaXIKICogbm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBhdHRhY2hlZC4KICoKICogQHBhcmFtIHZhbHVlIEluaXRpYWwgc291cmNlIHRoYXQgd2UgaGF2ZSB0byB0cmFuc2Zvcm0gaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHVzYWJsZSBieSB0aGUgc2VyaWFsaXplcgogKiBAcmV0dXJucyBBbiBFdmVudCBvciBFcnJvciB0dXJuZWQgaW50byBhbiBvYmplY3QgLSBvciB0aGUgdmFsdWUgYXJndXJtZW50IGl0c2VsZiwgd2hlbiB2YWx1ZSBpcyBuZWl0aGVyIGFuIEV2ZW50IG5vcgogKiAgYW4gRXJyb3IuCiAqLwpmdW5jdGlvbiBjb252ZXJ0VG9QbGFpbk9iamVjdCgKICB2YWx1ZSwKKQoKIHsKICBpZiAoaXNFcnJvcih2YWx1ZSkpIHsKICAgIHJldHVybiB7CiAgICAgIG1lc3NhZ2U6IHZhbHVlLm1lc3NhZ2UsCiAgICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAgIHN0YWNrOiB2YWx1ZS5zdGFjaywKICAgICAgLi4uZ2V0T3duUHJvcGVydGllcyh2YWx1ZSksCiAgICB9OwogIH0gZWxzZSBpZiAoaXNFdmVudCh2YWx1ZSkpIHsKICAgIGNvbnN0IG5ld09iagoKID0gewogICAgICB0eXBlOiB2YWx1ZS50eXBlLAogICAgICB0YXJnZXQ6IHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHZhbHVlLnRhcmdldCksCiAgICAgIGN1cnJlbnRUYXJnZXQ6IHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHZhbHVlLmN1cnJlbnRUYXJnZXQpLAogICAgICAuLi5nZXRPd25Qcm9wZXJ0aWVzKHZhbHVlKSwKICAgIH07CgogICAgaWYgKHR5cGVvZiBDdXN0b21FdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHZhbHVlLCBDdXN0b21FdmVudCkpIHsKICAgICAgbmV3T2JqLmRldGFpbCA9IHZhbHVlLmRldGFpbDsKICAgIH0KCiAgICByZXR1cm4gbmV3T2JqOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdmFsdWU7CiAgfQp9CgovKiogQ3JlYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGFyZ2V0IG9mIGFuIGBFdmVudGAgb2JqZWN0ICovCmZ1bmN0aW9uIHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHRhcmdldCkgewogIHRyeSB7CiAgICByZXR1cm4gaXNFbGVtZW50KHRhcmdldCkgPyBodG1sVHJlZUFzU3RyaW5nKHRhcmdldCkgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGFyZ2V0KTsKICB9IGNhdGNoIChfb08pIHsKICAgIHJldHVybiAnPHVua25vd24+JzsKICB9Cn0KCi8qKiBGaWx0ZXJzIG91dCBhbGwgYnV0IGFuIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzICovCmZ1bmN0aW9uIGdldE93blByb3BlcnRpZXMob2JqKSB7CiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkgewogICAgY29uc3QgZXh0cmFjdGVkUHJvcHMgPSB7fTsKICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gb2JqKSB7CiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wZXJ0eSkpIHsKICAgICAgICBleHRyYWN0ZWRQcm9wc1twcm9wZXJ0eV0gPSAob2JqIClbcHJvcGVydHldOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZXh0cmFjdGVkUHJvcHM7CiAgfSBlbHNlIHsKICAgIHJldHVybiB7fTsKICB9Cn0KCi8qKgogKiBHaXZlbiBhbnkgb2JqZWN0LCByZXR1cm4gYSBuZXcgb2JqZWN0IGhhdmluZyByZW1vdmVkIGFsbCBmaWVsZHMgd2hvc2UgdmFsdWUgd2FzIGB1bmRlZmluZWRgLgogKiBXb3JrcyByZWN1cnNpdmVseSBvbiBvYmplY3RzIGFuZCBhcnJheXMuCiAqCiAqIEF0dGVudGlvbjogVGhpcyBmdW5jdGlvbiBrZWVwcyBjaXJjdWxhciByZWZlcmVuY2VzIGluIHRoZSByZXR1cm5lZCBvYmplY3QuCiAqLwpmdW5jdGlvbiBkcm9wVW5kZWZpbmVkS2V5cyhpbnB1dFZhbHVlKSB7CiAgLy8gVGhpcyBtYXAga2VlcHMgdHJhY2sgb2Ygd2hhdCBhbHJlYWR5IHZpc2l0ZWQgbm9kZXMgbWFwIHRvLgogIC8vIE91ciBTZXQgLSBiYXNlZCBtZW1vQnVpbGRlciBkb2Vzbid0IHdvcmsgaGVyZSBiZWNhdXNlIHdlIHdhbnQgdG8gdGhlIG91dHB1dCBvYmplY3QgdG8gaGF2ZSB0aGUgc2FtZSBjaXJjdWxhcgogIC8vIHJlZmVyZW5jZXMgYXMgdGhlIGlucHV0IG9iamVjdC4KICBjb25zdCBtZW1vaXphdGlvbk1hcCA9IG5ldyBNYXAoKTsKCiAgLy8gVGhpcyBmdW5jdGlvbiBqdXN0IHByb3hpZXMgYF9kcm9wVW5kZWZpbmVkS2V5c2AgdG8ga2VlcCB0aGUgYG1lbW9CdWlsZGVyYCBvdXQgb2YgdGhpcyBmdW5jdGlvbidzIEFQSQogIHJldHVybiBfZHJvcFVuZGVmaW5lZEtleXMoaW5wdXRWYWx1ZSwgbWVtb2l6YXRpb25NYXApOwp9CgpmdW5jdGlvbiBfZHJvcFVuZGVmaW5lZEtleXMoaW5wdXRWYWx1ZSwgbWVtb2l6YXRpb25NYXApIHsKICBpZiAoaXNQb2pvKGlucHV0VmFsdWUpKSB7CiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGR1ZSB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBvYmplY3QgaXQgd2FzIG1hcHBlZCB0byBpbiB0aGUgbmV3IG9iamVjdAogICAgY29uc3QgbWVtb1ZhbCA9IG1lbW9pemF0aW9uTWFwLmdldChpbnB1dFZhbHVlKTsKICAgIGlmIChtZW1vVmFsICE9PSB1bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIG1lbW9WYWwgOwogICAgfQoKICAgIGNvbnN0IHJldHVyblZhbHVlID0ge307CiAgICAvLyBTdG9yZSB0aGUgbWFwcGluZyBvZiB0aGlzIHZhbHVlIGluIGNhc2Ugd2UgdmlzaXQgaXQgYWdhaW4sIGluIGNhc2Ugb2YgY2lyY3VsYXIgZGF0YQogICAgbWVtb2l6YXRpb25NYXAuc2V0KGlucHV0VmFsdWUsIHJldHVyblZhbHVlKTsKCiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhpbnB1dFZhbHVlKSkgewogICAgICBpZiAodHlwZW9mIGlucHV0VmFsdWVba2V5XSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICByZXR1cm5WYWx1ZVtrZXldID0gX2Ryb3BVbmRlZmluZWRLZXlzKGlucHV0VmFsdWVba2V5XSwgbWVtb2l6YXRpb25NYXApOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJldHVyblZhbHVlIDsKICB9CgogIGlmIChBcnJheS5pc0FycmF5KGlucHV0VmFsdWUpKSB7CiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGR1ZSB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBhcnJheSBpdCB3YXMgbWFwcGVkIHRvIGluIHRoZSBuZXcgb2JqZWN0CiAgICBjb25zdCBtZW1vVmFsID0gbWVtb2l6YXRpb25NYXAuZ2V0KGlucHV0VmFsdWUpOwogICAgaWYgKG1lbW9WYWwgIT09IHVuZGVmaW5lZCkgewogICAgICByZXR1cm4gbWVtb1ZhbCA7CiAgICB9CgogICAgY29uc3QgcmV0dXJuVmFsdWUgPSBbXTsKICAgIC8vIFN0b3JlIHRoZSBtYXBwaW5nIG9mIHRoaXMgdmFsdWUgaW4gY2FzZSB3ZSB2aXNpdCBpdCBhZ2FpbiwgaW4gY2FzZSBvZiBjaXJjdWxhciBkYXRhCiAgICBtZW1vaXphdGlvbk1hcC5zZXQoaW5wdXRWYWx1ZSwgcmV0dXJuVmFsdWUpOwoKICAgIGlucHV0VmFsdWUuZm9yRWFjaCgoaXRlbSkgPT4gewogICAgICByZXR1cm5WYWx1ZS5wdXNoKF9kcm9wVW5kZWZpbmVkS2V5cyhpdGVtLCBtZW1vaXphdGlvbk1hcCkpOwogICAgfSk7CgogICAgcmV0dXJuIHJldHVyblZhbHVlIDsKICB9CgogIHJldHVybiBpbnB1dFZhbHVlOwp9CgpmdW5jdGlvbiBpc1Bvam8oaW5wdXQpIHsKICBpZiAoIWlzUGxhaW5PYmplY3QoaW5wdXQpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB0cnkgewogICAgY29uc3QgbmFtZSA9IChPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5wdXQpICkuY29uc3RydWN0b3IubmFtZTsKICAgIHJldHVybiAhbmFtZSB8fCBuYW1lID09PSAnT2JqZWN0JzsKICB9IGNhdGNoIChlKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCi8qKgogKiBEb2VzIHRoaXMgZmlsZW5hbWUgbG9vayBsaWtlIGl0J3MgcGFydCBvZiB0aGUgYXBwIGNvZGU/CiAqLwpmdW5jdGlvbiBmaWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUsIGlzTmF0aXZlID0gZmFsc2UpIHsKICBjb25zdCBpc0ludGVybmFsID0KICAgIGlzTmF0aXZlIHx8CiAgICAoZmlsZW5hbWUgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgaXQncyBhbiBhYnNvbHV0ZSBsaW51eCBwYXRoCiAgICAgICFmaWxlbmFtZS5zdGFydHNXaXRoKCcvJykgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgaXQncyBhbiBhYnNvbHV0ZSB3aW5kb3dzIHBhdGgKICAgICAgIWZpbGVuYW1lLm1hdGNoKC9eW0EtWl06LykgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgdGhlIHBhdGggaXMgc3RhcnRpbmcgd2l0aCBhIGRvdAogICAgICAhZmlsZW5hbWUuc3RhcnRzV2l0aCgnLicpICYmCiAgICAgIC8vIEl0J3Mgbm90IGludGVybmFsIGlmIHRoZSBmcmFtZSBoYXMgYSBwcm90b2NvbC4gSW4gbm9kZSwgdGhpcyBpcyB1c3VhbGx5IHRoZSBjYXNlIGlmIHRoZSBmaWxlIGdvdCBwcmUtcHJvY2Vzc2VkIHdpdGggYSBidW5kbGVyIGxpa2Ugd2VicGFjawogICAgICAhZmlsZW5hbWUubWF0Y2goL15bYS16QS1aXShbYS16QS1aMC05LlwtK10pKjpcL1wvLykpOyAvLyBTY2hlbWEgZnJvbTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM2NDE3ODIKCiAgLy8gaW5fYXBwIGlzIGFsbCB0aGF0J3Mgbm90IGFuIGludGVybmFsIE5vZGUgZnVuY3Rpb24gb3IgYSBtb2R1bGUgd2l0aGluIG5vZGVfbW9kdWxlcwogIC8vIG5vdGUgdGhhdCBpc05hdGl2ZSBhcHBlYXJzIHRvIHJldHVybiB0cnVlIGV2ZW4gZm9yIG5vZGUgY29yZSBsaWJyYXJpZXMKICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9yYXZlbi1ub2RlL2lzc3Vlcy8xNzYKCiAgcmV0dXJuICFpc0ludGVybmFsICYmIGZpbGVuYW1lICE9PSB1bmRlZmluZWQgJiYgIWZpbGVuYW1lLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvJyk7Cn0KCmNvbnN0IFNUQUNLVFJBQ0VfRlJBTUVfTElNSVQgPSA1MDsKY29uc3QgU1RSSVBfRlJBTUVfUkVHRVhQID0gL2NhcHR1cmVNZXNzYWdlfGNhcHR1cmVFeGNlcHRpb24vOwoKLyoqCiAqIFJlbW92ZXMgU2VudHJ5IGZyYW1lcyBmcm9tIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgc3RhY2sgaWYgcHJlc2VudCBhbmQgZW5mb3JjZXMgYSBsaW1pdCBvZiBtYXggbnVtYmVyIG9mIGZyYW1lcy4KICogQXNzdW1lcyBzdGFjayBpbnB1dCBpcyBvcmRlcmVkIGZyb20gdG9wIHRvIGJvdHRvbSBhbmQgcmV0dXJucyB0aGUgcmV2ZXJzZSByZXByZXNlbnRhdGlvbiBzbyBjYWxsIHNpdGUgb2YgdGhlCiAqIGZ1bmN0aW9uIHRoYXQgY2F1c2VkIHRoZSBjcmFzaCBpcyB0aGUgbGFzdCBmcmFtZSBpbiB0aGUgYXJyYXkuCiAqIEBoaWRkZW4KICovCmZ1bmN0aW9uIHN0cmlwU2VudHJ5RnJhbWVzQW5kUmV2ZXJzZShzdGFjaykgewogIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICByZXR1cm4gW107CiAgfQoKICBjb25zdCBsb2NhbFN0YWNrID0gQXJyYXkuZnJvbShzdGFjayk7CgogIC8vIElmIHN0YWNrIHN0YXJ0cyB3aXRoIG9uZSBvZiBvdXIgQVBJIGNhbGxzLCByZW1vdmUgaXQgKHN0YXJ0cywgbWVhbmluZyBpdCdzIHRoZSB0b3Agb2YgdGhlIHN0YWNrIC0gYWthIGxhc3QgY2FsbCkKICBpZiAoL3NlbnRyeVdyYXBwZWQvLnRlc3QobG9jYWxTdGFja1tsb2NhbFN0YWNrLmxlbmd0aCAtIDFdLmZ1bmN0aW9uIHx8ICcnKSkgewogICAgbG9jYWxTdGFjay5wb3AoKTsKICB9CgogIC8vIFJldmVyc2luZyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwcm9jZWR1cmUgYWxsb3dzIHVzIHRvIGp1c3QgcG9wIHRoZSB2YWx1ZXMgb2ZmIHRoZSBzdGFjawogIGxvY2FsU3RhY2sucmV2ZXJzZSgpOwoKICAvLyBJZiBzdGFjayBlbmRzIHdpdGggb25lIG9mIG91ciBpbnRlcm5hbCBBUEkgY2FsbHMsIHJlbW92ZSBpdCAoZW5kcywgbWVhbmluZyBpdCdzIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrIC0gYWthIHRvcC1tb3N0IGNhbGwpCiAgaWYgKFNUUklQX0ZSQU1FX1JFR0VYUC50ZXN0KGxvY2FsU3RhY2tbbG9jYWxTdGFjay5sZW5ndGggLSAxXS5mdW5jdGlvbiB8fCAnJykpIHsKICAgIGxvY2FsU3RhY2sucG9wKCk7CgogICAgLy8gV2hlbiB1c2luZyBzeW50aGV0aWMgZXZlbnRzLCB3ZSB3aWxsIGhhdmUgYSAyIGxldmVscyBkZWVwIHN0YWNrLCBhcyBgbmV3IEVycm9yKCdTZW50cnkgc3ludGhldGljRXhjZXB0aW9uJylgCiAgICAvLyBpcyBwcm9kdWNlZCB3aXRoaW4gdGhlIGh1YiBpdHNlbGYsIG1ha2luZyBpdDoKICAgIC8vCiAgICAvLyAgIFNlbnRyeS5jYXB0dXJlRXhjZXB0aW9uKCkKICAgIC8vICAgZ2V0Q3VycmVudEh1YigpLmNhcHR1cmVFeGNlcHRpb24oKQogICAgLy8KICAgIC8vIGluc3RlYWQgb2YganVzdCB0aGUgdG9wIGBTZW50cnlgIGNhbGwgaXRzZWxmLgogICAgLy8gVGhpcyBmb3JjZXMgdXMgdG8gcG9zc2libHkgc3RyaXAgYW4gYWRkaXRpb25hbCBmcmFtZSBpbiB0aGUgZXhhY3Qgc2FtZSB3YXMgYXMgYWJvdmUuCiAgICBpZiAoU1RSSVBfRlJBTUVfUkVHRVhQLnRlc3QobG9jYWxTdGFja1tsb2NhbFN0YWNrLmxlbmd0aCAtIDFdLmZ1bmN0aW9uIHx8ICcnKSkgewogICAgICBsb2NhbFN0YWNrLnBvcCgpOwogICAgfQogIH0KCiAgcmV0dXJuIGxvY2FsU3RhY2suc2xpY2UoMCwgU1RBQ0tUUkFDRV9GUkFNRV9MSU1JVCkubWFwKGZyYW1lID0+ICh7CiAgICAuLi5mcmFtZSwKICAgIGZpbGVuYW1lOiBmcmFtZS5maWxlbmFtZSB8fCBsb2NhbFN0YWNrW2xvY2FsU3RhY2subGVuZ3RoIC0gMV0uZmlsZW5hbWUsCiAgICBmdW5jdGlvbjogZnJhbWUuZnVuY3Rpb24gfHwgJz8nLAogIH0pKTsKfQoKY29uc3QgZGVmYXVsdEZ1bmN0aW9uTmFtZSA9ICc8YW5vbnltb3VzPic7CgovKioKICogU2FmZWx5IGV4dHJhY3QgZnVuY3Rpb24gbmFtZSBmcm9tIGl0c2VsZgogKi8KZnVuY3Rpb24gZ2V0RnVuY3Rpb25OYW1lKGZuKSB7CiAgdHJ5IHsKICAgIGlmICghZm4gfHwgdHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7CiAgICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lOwogICAgfQogICAgcmV0dXJuIGZuLm5hbWUgfHwgZGVmYXVsdEZ1bmN0aW9uTmFtZTsKICB9IGNhdGNoIChlKSB7CiAgICAvLyBKdXN0IGFjY2Vzc2luZyBjdXN0b20gcHJvcHMgaW4gc29tZSBTZWxlbml1bSBlbnZpcm9ubWVudHMKICAgIC8vIGNhbiBjYXVzZSBhICJQZXJtaXNzaW9uIGRlbmllZCIgZXhjZXB0aW9uIChzZWUgcmF2ZW4tanMjNDk1KS4KICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lOwogIH0KfQoKLyoqCiAqIFVVSUQ0IGdlbmVyYXRvcgogKgogKiBAcmV0dXJucyBzdHJpbmcgR2VuZXJhdGVkIFVVSUQ0LgogKi8KZnVuY3Rpb24gdXVpZDQoKSB7CiAgY29uc3QgZ2JsID0gR0xPQkFMX09CSiA7CiAgY29uc3QgY3J5cHRvID0gZ2JsLmNyeXB0byB8fCBnYmwubXNDcnlwdG87CgogIGxldCBnZXRSYW5kb21CeXRlID0gKCkgPT4gTWF0aC5yYW5kb20oKSAqIDE2OwogIHRyeSB7CiAgICBpZiAoY3J5cHRvICYmIGNyeXB0by5yYW5kb21VVUlEKSB7CiAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpLnJlcGxhY2UoLy0vZywgJycpOwogICAgfQogICAgaWYgKGNyeXB0byAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7CiAgICAgIGdldFJhbmRvbUJ5dGUgPSAoKSA9PiB7CiAgICAgICAgLy8gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyBtaWdodCByZXR1cm4gdW5kZWZpbmVkIGluc3RlYWQgb2YgdGhlIHR5cGVkIGFycmF5CiAgICAgICAgLy8gaW4gb2xkIENocm9taXVtIHZlcnNpb25zIChlLmcuIDIzLjAuMTIzNS4wICgxNTE0MjIpKQogICAgICAgIC8vIEhvd2V2ZXIsIGB0eXBlZEFycmF5YCBpcyBzdGlsbCBmaWxsZWQgaW4tcGxhY2UuCiAgICAgICAgLy8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3J5cHRvL2dldFJhbmRvbVZhbHVlcyN0eXBlZGFycmF5CiAgICAgICAgY29uc3QgdHlwZWRBcnJheSA9IG5ldyBVaW50OEFycmF5KDEpOwogICAgICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXModHlwZWRBcnJheSk7CiAgICAgICAgcmV0dXJuIHR5cGVkQXJyYXlbMF07CiAgICAgIH07CiAgICB9CiAgfSBjYXRjaCAoXykgewogICAgLy8gc29tZSBydW50aW1lcyBjYW4gY3Jhc2ggaW52b2tpbmcgY3J5cHRvCiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy84OTM1CiAgfQoKICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTAzNC9ob3ctdG8tY3JlYXRlLWEtZ3VpZC11dWlkLWluLWphdmFzY3JpcHQvMjExNzUyMyMyMTE3NTIzCiAgLy8gQ29uY2F0ZW5hdGluZyB0aGUgZm9sbG93aW5nIG51bWJlcnMgYXMgc3RyaW5ncyByZXN1bHRzIGluICcxMDAwMDAwMDEwMDA0MDAwODAwMDEwMDAwMDAwMDAwMCcKICByZXR1cm4gKChbMWU3XSApICsgMWUzICsgNGUzICsgOGUzICsgMWUxMSkucmVwbGFjZSgvWzAxOF0vZywgYyA9PgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2UKICAgICgoYyApIF4gKChnZXRSYW5kb21CeXRlKCkgJiAxNSkgPj4gKChjICkgLyA0KSkpLnRvU3RyaW5nKDE2KSwKICApOwp9CgovKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi8KLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqLwoKLyoqCiAqIEhlbHBlciB0byBkZWN5Y2xlIGpzb24gb2JqZWN0cwogKi8KZnVuY3Rpb24gbWVtb0J1aWxkZXIoKSB7CiAgY29uc3QgaGFzV2Vha1NldCA9IHR5cGVvZiBXZWFrU2V0ID09PSAnZnVuY3Rpb24nOwogIGNvbnN0IGlubmVyID0gaGFzV2Vha1NldCA/IG5ldyBXZWFrU2V0KCkgOiBbXTsKICBmdW5jdGlvbiBtZW1vaXplKG9iaikgewogICAgaWYgKGhhc1dlYWtTZXQpIHsKICAgICAgaWYgKGlubmVyLmhhcyhvYmopKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgaW5uZXIuYWRkKG9iaik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLWZvci1vZgogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbm5lci5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCB2YWx1ZSA9IGlubmVyW2ldOwogICAgICBpZiAodmFsdWUgPT09IG9iaikgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICBpbm5lci5wdXNoKG9iaik7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBmdW5jdGlvbiB1bm1lbW9pemUob2JqKSB7CiAgICBpZiAoaGFzV2Vha1NldCkgewogICAgICBpbm5lci5kZWxldGUob2JqKTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5uZXIubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoaW5uZXJbaV0gPT09IG9iaikgewogICAgICAgICAgaW5uZXIuc3BsaWNlKGksIDEpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIHJldHVybiBbbWVtb2l6ZSwgdW5tZW1vaXplXTsKfQoKLyoqCiAqIFJlY3Vyc2l2ZWx5IG5vcm1hbGl6ZXMgdGhlIGdpdmVuIG9iamVjdC4KICoKICogLSBDcmVhdGVzIGEgY29weSB0byBwcmV2ZW50IG9yaWdpbmFsIGlucHV0IG11dGF0aW9uCiAqIC0gU2tpcHMgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcwogKiAtIFdoZW4gc3RyaW5naWZ5aW5nLCBjYWxscyBgdG9KU09OYCBpZiBpbXBsZW1lbnRlZAogKiAtIFJlbW92ZXMgY2lyY3VsYXIgcmVmZXJlbmNlcwogKiAtIFRyYW5zbGF0ZXMgbm9uLXNlcmlhbGl6YWJsZSB2YWx1ZXMgKGB1bmRlZmluZWRgL2BOYU5gL2Z1bmN0aW9ucykgdG8gc2VyaWFsaXphYmxlIGZvcm1hdAogKiAtIFRyYW5zbGF0ZXMga25vd24gZ2xvYmFsIG9iamVjdHMvY2xhc3NlcyB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbnMKICogLSBUYWtlcyBjYXJlIG9mIGBFcnJvcmAgb2JqZWN0IHNlcmlhbGl6YXRpb24KICogLSBPcHRpb25hbGx5IGxpbWl0cyBkZXB0aCBvZiBmaW5hbCBvdXRwdXQKICogLSBPcHRpb25hbGx5IGxpbWl0cyBudW1iZXIgb2YgcHJvcGVydGllcy9lbGVtZW50cyBpbmNsdWRlZCBpbiBhbnkgc2luZ2xlIG9iamVjdC9hcnJheQogKgogKiBAcGFyYW0gaW5wdXQgVGhlIG9iamVjdCB0byBiZSBub3JtYWxpemVkLgogKiBAcGFyYW0gZGVwdGggVGhlIG1heCBkZXB0aCB0byB3aGljaCB0byBub3JtYWxpemUgdGhlIG9iamVjdC4gKEFueXRoaW5nIGRlZXBlciBzdHJpbmdpZmllZCB3aG9sZS4pCiAqIEBwYXJhbSBtYXhQcm9wZXJ0aWVzIFRoZSBtYXggbnVtYmVyIG9mIGVsZW1lbnRzIG9yIHByb3BlcnRpZXMgdG8gYmUgaW5jbHVkZWQgaW4gYW55IHNpbmdsZSBhcnJheSBvcgogKiBvYmplY3QgaW4gdGhlIG5vcm1hbGxpemVkIG91dHB1dC4KICogQHJldHVybnMgQSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhlIG9iamVjdCwgb3IgYCIqKm5vbi1zZXJpYWxpemFibGUqKiJgIGlmIGFueSBlcnJvcnMgYXJlIHRocm93biBkdXJpbmcgbm9ybWFsaXphdGlvbi4KICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55CmZ1bmN0aW9uIG5vcm1hbGl6ZShpbnB1dCwgZGVwdGggPSAxMDAsIG1heFByb3BlcnRpZXMgPSArSW5maW5pdHkpIHsKICB0cnkgewogICAgLy8gc2luY2Ugd2UncmUgYXQgdGhlIG91dGVybW9zdCBsZXZlbCwgd2UgZG9uJ3QgcHJvdmlkZSBhIGtleQogICAgcmV0dXJuIHZpc2l0KCcnLCBpbnB1dCwgZGVwdGgsIG1heFByb3BlcnRpZXMpOwogIH0gY2F0Y2ggKGVycikgewogICAgcmV0dXJuIHsgRVJST1I6IGAqKm5vbi1zZXJpYWxpemFibGUqKiAoJHtlcnJ9KWAgfTsKICB9Cn0KCi8qKgogKiBWaXNpdHMgYSBub2RlIHRvIHBlcmZvcm0gbm9ybWFsaXphdGlvbiBvbiBpdAogKgogKiBAcGFyYW0ga2V5IFRoZSBrZXkgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gbm9kZQogKiBAcGFyYW0gdmFsdWUgVGhlIG5vZGUgdG8gYmUgdmlzaXRlZAogKiBAcGFyYW0gZGVwdGggT3B0aW9uYWwgbnVtYmVyIGluZGljYXRpbmcgdGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoCiAqIEBwYXJhbSBtYXhQcm9wZXJ0aWVzIE9wdGlvbmFsIG1heGltdW0gbnVtYmVyIG9mIHByb3BlcnRpZXMvZWxlbWVudHMgaW5jbHVkZWQgaW4gYW55IHNpbmdsZSBvYmplY3QvYXJyYXkKICogQHBhcmFtIG1lbW8gT3B0aW9uYWwgTWVtbyBjbGFzcyBoYW5kbGluZyBkZWN5Y2xpbmcKICovCmZ1bmN0aW9uIHZpc2l0KAogIGtleSwKICB2YWx1ZSwKICBkZXB0aCA9ICtJbmZpbml0eSwKICBtYXhQcm9wZXJ0aWVzID0gK0luZmluaXR5LAogIG1lbW8gPSBtZW1vQnVpbGRlcigpLAopIHsKICBjb25zdCBbbWVtb2l6ZSwgdW5tZW1vaXplXSA9IG1lbW87CgogIC8vIEdldCB0aGUgc2ltcGxlIGNhc2VzIG91dCBvZiB0aGUgd2F5IGZpcnN0CiAgaWYgKAogICAgdmFsdWUgPT0gbnVsbCB8fCAvLyB0aGlzIG1hdGNoZXMgbnVsbCBhbmQgdW5kZWZpbmVkIC0+IGVxZXEgbm90IGVxZXFlcQogICAgKFsnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnc3RyaW5nJ10uaW5jbHVkZXModHlwZW9mIHZhbHVlKSAmJiAhaXNOYU4kMSh2YWx1ZSkpCiAgKSB7CiAgICByZXR1cm4gdmFsdWUgOwogIH0KCiAgY29uc3Qgc3RyaW5naWZpZWQgPSBzdHJpbmdpZnlWYWx1ZShrZXksIHZhbHVlKTsKCiAgLy8gQW55dGhpbmcgd2UgY291bGQgcG90ZW50aWFsbHkgZGlnIGludG8gbW9yZSAob2JqZWN0cyBvciBhcnJheXMpIHdpbGwgaGF2ZSBjb21lIGJhY2sgYXMgYCJbb2JqZWN0IFhYWFhdImAuCiAgLy8gRXZlcnl0aGluZyBlbHNlIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gc2VyaWFsaXplZCwgc28gaWYgd2UgZG9uJ3Qgc2VlIHRoYXQgcGF0dGVybiwgd2UncmUgZG9uZS4KICBpZiAoIXN0cmluZ2lmaWVkLnN0YXJ0c1dpdGgoJ1tvYmplY3QgJykpIHsKICAgIHJldHVybiBzdHJpbmdpZmllZDsKICB9CgogIC8vIEZyb20gaGVyZSBvbiwgd2UgY2FuIGFzc2VydCB0aGF0IGB2YWx1ZWAgaXMgZWl0aGVyIGFuIG9iamVjdCBvciBhbiBhcnJheS4KCiAgLy8gRG8gbm90IG5vcm1hbGl6ZSBvYmplY3RzIHRoYXQgd2Uga25vdyBoYXZlIGFscmVhZHkgYmVlbiBub3JtYWxpemVkLiBBcyBhIGdlbmVyYWwgcnVsZSwgdGhlCiAgLy8gIl9fc2VudHJ5X3NraXBfbm9ybWFsaXphdGlvbl9fIiBwcm9wZXJ0eSBzaG91bGQgb25seSBiZSB1c2VkIHNwYXJpbmdseSBhbmQgb25seSBzaG91bGQgb25seSBiZSBzZXQgb24gb2JqZWN0cyB0aGF0CiAgLy8gaGF2ZSBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZC4KICBpZiAoKHZhbHVlIClbJ19fc2VudHJ5X3NraXBfbm9ybWFsaXphdGlvbl9fJ10pIHsKICAgIHJldHVybiB2YWx1ZSA7CiAgfQoKICAvLyBXZSBjYW4gc2V0IGBfX3NlbnRyeV9vdmVycmlkZV9ub3JtYWxpemF0aW9uX2RlcHRoX19gIG9uIGFuIG9iamVjdCB0byBlbnN1cmUgdGhhdCBmcm9tIHRoZXJlCiAgLy8gV2Uga2VlcCBhIGNlcnRhaW4gYW1vdW50IG9mIGRlcHRoLgogIC8vIFRoaXMgc2hvdWxkIGJlIHVzZWQgc3BhcmluZ2x5LCBlLmcuIHdlIHVzZSBpdCBmb3IgdGhlIHJlZHV4IGludGVncmF0aW9uIHRvIGVuc3VyZSB3ZSBnZXQgYSBjZXJ0YWluIGFtb3VudCBvZiBzdGF0ZS4KICBjb25zdCByZW1haW5pbmdEZXB0aCA9CiAgICB0eXBlb2YgKHZhbHVlIClbJ19fc2VudHJ5X292ZXJyaWRlX25vcm1hbGl6YXRpb25fZGVwdGhfXyddID09PSAnbnVtYmVyJwogICAgICA/ICgodmFsdWUgKVsnX19zZW50cnlfb3ZlcnJpZGVfbm9ybWFsaXphdGlvbl9kZXB0aF9fJ10gKQogICAgICA6IGRlcHRoOwoKICAvLyBXZSdyZSBhbHNvIGRvbmUgaWYgd2UndmUgcmVhY2hlZCB0aGUgbWF4IGRlcHRoCiAgaWYgKHJlbWFpbmluZ0RlcHRoID09PSAwKSB7CiAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgYHNlcmlhbGl6ZWRgIGlzIGEgc3RyaW5nIG9mIHRoZSBmb3JtIGAiW29iamVjdCBYWFhYXSJgLiBDbGVhbiBpdCB1cCBzbyBpdCdzIGp1c3QgYCJbWFhYWF0iYC4KICAgIHJldHVybiBzdHJpbmdpZmllZC5yZXBsYWNlKCdvYmplY3QgJywgJycpOwogIH0KCiAgLy8gSWYgd2UndmUgYWxyZWFkeSB2aXNpdGVkIHRoaXMgYnJhbmNoLCBiYWlsIG91dCwgYXMgaXQncyBjaXJjdWxhciByZWZlcmVuY2UuIElmIG5vdCwgbm90ZSB0aGF0IHdlJ3JlIHNlZWluZyBpdCBub3cuCiAgaWYgKG1lbW9pemUodmFsdWUpKSB7CiAgICByZXR1cm4gJ1tDaXJjdWxhciB+XSc7CiAgfQoKICAvLyBJZiB0aGUgdmFsdWUgaGFzIGEgYHRvSlNPTmAgbWV0aG9kLCB3ZSBjYWxsIGl0IHRvIGV4dHJhY3QgbW9yZSBpbmZvcm1hdGlvbgogIGNvbnN0IHZhbHVlV2l0aFRvSlNPTiA9IHZhbHVlIDsKICBpZiAodmFsdWVXaXRoVG9KU09OICYmIHR5cGVvZiB2YWx1ZVdpdGhUb0pTT04udG9KU09OID09PSAnZnVuY3Rpb24nKSB7CiAgICB0cnkgewogICAgICBjb25zdCBqc29uVmFsdWUgPSB2YWx1ZVdpdGhUb0pTT04udG9KU09OKCk7CiAgICAgIC8vIFdlIG5lZWQgdG8gbm9ybWFsaXplIHRoZSByZXR1cm4gdmFsdWUgb2YgYC50b0pTT04oKWAgaW4gY2FzZSBpdCBoYXMgY2lyY3VsYXIgcmVmZXJlbmNlcwogICAgICByZXR1cm4gdmlzaXQoJycsIGpzb25WYWx1ZSwgcmVtYWluaW5nRGVwdGggLSAxLCBtYXhQcm9wZXJ0aWVzLCBtZW1vKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICAvLyBwYXNzIChUaGUgYnVpbHQtaW4gYHRvSlNPTmAgZmFpbGVkLCBidXQgd2UgY2FuIHN0aWxsIHRyeSB0byBkbyBpdCBvdXJzZWx2ZXMpCiAgICB9CiAgfQoKICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgd2UgZWl0aGVyIGhhdmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5LCB3ZSBoYXZlbid0IHNlZW4gaXQgYmVmb3JlLCBhbmQgd2UncmUgZ29pbmcgdG8gcmVjdXJzZQogIC8vIGJlY2F1c2Ugd2UgaGF2ZW4ndCB5ZXQgcmVhY2hlZCB0aGUgbWF4IGRlcHRoLiBDcmVhdGUgYW4gYWNjdW11bGF0b3IgdG8gaG9sZCB0aGUgcmVzdWx0cyBvZiB2aXNpdGluZyBlYWNoCiAgLy8gcHJvcGVydHkvZW50cnksIGFuZCBrZWVwIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgaXRlbXMgd2UgYWRkIHRvIGl0LgogIGNvbnN0IG5vcm1hbGl6ZWQgPSAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbXSA6IHt9KSA7CiAgbGV0IG51bUFkZGVkID0gMDsKCiAgLy8gQmVmb3JlIHdlIGJlZ2luLCBjb252ZXJ0YEVycm9yYCBhbmRgRXZlbnRgIGluc3RhbmNlcyBpbnRvIHBsYWluIG9iamVjdHMsIHNpbmNlIHNvbWUgb2YgZWFjaCBvZiB0aGVpciByZWxldmFudAogIC8vIHByb3BlcnRpZXMgYXJlIG5vbi1lbnVtZXJhYmxlIGFuZCBvdGhlcndpc2Ugd291bGQgZ2V0IG1pc3NlZC4KICBjb25zdCB2aXNpdGFibGUgPSBjb252ZXJ0VG9QbGFpbk9iamVjdCh2YWx1ZSApOwoKICBmb3IgKGNvbnN0IHZpc2l0S2V5IGluIHZpc2l0YWJsZSkgewogICAgLy8gQXZvaWQgaXRlcmF0aW5nIG92ZXIgZmllbGRzIGluIHRoZSBwcm90b3R5cGUgaWYgdGhleSd2ZSBzb21laG93IGJlZW4gZXhwb3NlZCB0byBlbnVtZXJhdGlvbi4KICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZpc2l0YWJsZSwgdmlzaXRLZXkpKSB7CiAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIGlmIChudW1BZGRlZCA+PSBtYXhQcm9wZXJ0aWVzKSB7CiAgICAgIG5vcm1hbGl6ZWRbdmlzaXRLZXldID0gJ1tNYXhQcm9wZXJ0aWVzIH5dJzsKICAgICAgYnJlYWs7CiAgICB9CgogICAgLy8gUmVjdXJzaXZlbHkgdmlzaXQgYWxsIHRoZSBjaGlsZCBub2RlcwogICAgY29uc3QgdmlzaXRWYWx1ZSA9IHZpc2l0YWJsZVt2aXNpdEtleV07CiAgICBub3JtYWxpemVkW3Zpc2l0S2V5XSA9IHZpc2l0KHZpc2l0S2V5LCB2aXNpdFZhbHVlLCByZW1haW5pbmdEZXB0aCAtIDEsIG1heFByb3BlcnRpZXMsIG1lbW8pOwoKICAgIG51bUFkZGVkKys7CiAgfQoKICAvLyBPbmNlIHdlJ3ZlIHZpc2l0ZWQgYWxsIHRoZSBicmFuY2hlcywgcmVtb3ZlIHRoZSBwYXJlbnQgZnJvbSBtZW1vIHN0b3JhZ2UKICB1bm1lbW9pemUodmFsdWUpOwoKICAvLyBSZXR1cm4gYWNjdW11bGF0ZWQgdmFsdWVzCiAgcmV0dXJuIG5vcm1hbGl6ZWQ7Cn0KCi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi8KLyoqCiAqIFN0cmluZ2lmeSB0aGUgZ2l2ZW4gdmFsdWUuIEhhbmRsZXMgdmFyaW91cyBrbm93biBzcGVjaWFsIHZhbHVlcyBhbmQgdHlwZXMuCiAqCiAqIE5vdCBtZWFudCB0byBiZSB1c2VkIG9uIHNpbXBsZSBwcmltaXRpdmVzIHdoaWNoIGFscmVhZHkgaGF2ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiwgYXMgaXQgd2lsbCwgZm9yIGV4YW1wbGUsIHR1cm4KICogdGhlIG51bWJlciAxMjMxIGludG8gIltPYmplY3QgTnVtYmVyXSIsIG5vciBvbiBgbnVsbGAsIGFzIGl0IHdpbGwgdGhyb3cuCiAqCiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gc3RyaW5naWZ5CiAqIEByZXR1cm5zIEEgc3RyaW5naWZpZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIHZhbHVlCiAqLwpmdW5jdGlvbiBzdHJpbmdpZnlWYWx1ZSgKICBrZXksCiAgLy8gdGhpcyB0eXBlIGlzIGEgdGlueSBiaXQgb2YgYSBjaGVhdCwgc2luY2UgdGhpcyBmdW5jdGlvbiBkb2VzIGhhbmRsZSBOYU4gKHdoaWNoIGlzIHRlY2huaWNhbGx5IGEgbnVtYmVyKSwgYnV0IGZvcgogIC8vIG91ciBpbnRlcm5hbCB1c2UsIGl0J2xsIGRvCiAgdmFsdWUsCikgewogIHRyeSB7CiAgICBpZiAoa2V5ID09PSAnZG9tYWluJyAmJiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICh2YWx1ZSApLl9ldmVudHMpIHsKICAgICAgcmV0dXJuICdbRG9tYWluXSc7CiAgICB9CgogICAgaWYgKGtleSA9PT0gJ2RvbWFpbkVtaXR0ZXInKSB7CiAgICAgIHJldHVybiAnW0RvbWFpbkVtaXR0ZXJdJzsKICAgIH0KCiAgICAvLyBJdCdzIHNhZmUgdG8gdXNlIGBnbG9iYWxgLCBgd2luZG93YCwgYW5kIGBkb2N1bWVudGAgaGVyZSBpbiB0aGlzIG1hbm5lciwgYXMgd2UgYXJlIGFzc2VydGluZyB1c2luZyBgdHlwZW9mYCBmaXJzdAogICAgLy8gd2hpY2ggd29uJ3QgdGhyb3cgaWYgdGhleSBhcmUgbm90IHByZXNlbnQuCgogICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlID09PSBnbG9iYWwpIHsKICAgICAgcmV0dXJuICdbR2xvYmFsXSc7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscwogICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlID09PSB3aW5kb3cpIHsKICAgICAgcmV0dXJuICdbV2luZG93XSc7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscwogICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgPT09IGRvY3VtZW50KSB7CiAgICAgIHJldHVybiAnW0RvY3VtZW50XSc7CiAgICB9CgogICAgaWYgKGlzVnVlVmlld01vZGVsKHZhbHVlKSkgewogICAgICByZXR1cm4gJ1tWdWVWaWV3TW9kZWxdJzsKICAgIH0KCiAgICAvLyBSZWFjdCdzIFN5bnRoZXRpY0V2ZW50IHRoaW5neQogICAgaWYgKGlzU3ludGhldGljRXZlbnQodmFsdWUpKSB7CiAgICAgIHJldHVybiAnW1N5bnRoZXRpY0V2ZW50XSc7CiAgICB9CgogICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHZhbHVlKSB7CiAgICAgIHJldHVybiAnW05hTl0nOwogICAgfQoKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHsKICAgICAgcmV0dXJuIGBbRnVuY3Rpb246ICR7Z2V0RnVuY3Rpb25OYW1lKHZhbHVlKX1dYDsKICAgIH0KCiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykgewogICAgICByZXR1cm4gYFske1N0cmluZyh2YWx1ZSl9XWA7CiAgICB9CgogICAgLy8gc3RyaW5naWZpZWQgQmlnSW50cyBhcmUgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSByZWd1bGFyIG51bWJlcnMsIHNvIHdlIG5lZWQgdG8gbGFiZWwgdGhlbSB0byBhdm9pZCBjb25mdXNpb24KICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnKSB7CiAgICAgIHJldHVybiBgW0JpZ0ludDogJHtTdHJpbmcodmFsdWUpfV1gOwogICAgfQoKICAgIC8vIE5vdyB0aGF0IHdlJ3ZlIGtub2NrZWQgb3V0IGFsbCB0aGUgc3BlY2lhbCBjYXNlcyBhbmQgdGhlIHByaW1pdGl2ZXMsIGFsbCB3ZSBoYXZlIGxlZnQgYXJlIG9iamVjdHMuIFNpbXBseSBjYXN0aW5nCiAgICAvLyB0aGVtIHRvIHN0cmluZ3MgbWVhbnMgdGhhdCBpbnN0YW5jZXMgb2YgY2xhc3NlcyB3aGljaCBoYXZlbid0IGRlZmluZWQgdGhlaXIgYHRvU3RyaW5nVGFnYCB3aWxsIGp1c3QgY29tZSBvdXQgYXMKICAgIC8vIGAiW29iamVjdCBPYmplY3RdImAuIElmIHdlIGluc3RlYWQgbG9vayBhdCB0aGUgY29uc3RydWN0b3IncyBuYW1lICh3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MpLAogICAgLy8gd2UgY2FuIG1ha2Ugc3VyZSB0aGF0IG9ubHkgcGxhaW4gb2JqZWN0cyBjb21lIG91dCB0aGF0IHdheS4KICAgIGNvbnN0IG9iak5hbWUgPSBnZXRDb25zdHJ1Y3Rvck5hbWUodmFsdWUpOwoKICAgIC8vIEhhbmRsZSBIVE1MIEVsZW1lbnRzCiAgICBpZiAoL15IVE1MKFx3KilFbGVtZW50JC8udGVzdChvYmpOYW1lKSkgewogICAgICByZXR1cm4gYFtIVE1MRWxlbWVudDogJHtvYmpOYW1lfV1gOwogICAgfQoKICAgIHJldHVybiBgW29iamVjdCAke29iak5hbWV9XWA7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICByZXR1cm4gYCoqbm9uLXNlcmlhbGl6YWJsZSoqICgke2Vycn0pYDsKICB9Cn0KLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovCgpmdW5jdGlvbiBnZXRDb25zdHJ1Y3Rvck5hbWUodmFsdWUpIHsKICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpOwoKICByZXR1cm4gcHJvdG90eXBlID8gcHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWUgOiAnbnVsbCBwcm90b3R5cGUnOwp9CgovKioKICogTm9ybWFsaXplcyBVUkxzIGluIGV4Y2VwdGlvbnMgYW5kIHN0YWNrdHJhY2VzIHRvIGEgYmFzZSBwYXRoIHNvIFNlbnRyeSBjYW4gZmluZ2VycHJpbnQKICogYWNyb3NzIHBsYXRmb3JtcyBhbmQgd29ya2luZyBkaXJlY3RvcnkuCiAqCiAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0byBiZSBub3JtYWxpemVkLgogKiBAcGFyYW0gYmFzZVBhdGggVGhlIGFwcGxpY2F0aW9uIGJhc2UgcGF0aC4KICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgVVJMLgogKi8KZnVuY3Rpb24gbm9ybWFsaXplVXJsVG9CYXNlKHVybCwgYmFzZVBhdGgpIHsKICBjb25zdCBlc2NhcGVkQmFzZSA9IGJhc2VQYXRoCiAgICAvLyBCYWNrc2xhc2ggdG8gZm9yd2FyZAogICAgLnJlcGxhY2UoL1xcL2csICcvJykKICAgIC8vIEVzY2FwZSBSZWdFeHAgc3BlY2lhbCBjaGFyYWN0ZXJzCiAgICAucmVwbGFjZSgvW3xcXHt9KClbXF1eJCsqPy5dL2csICdcXCQmJyk7CgogIGxldCBuZXdVcmwgPSB1cmw7CiAgdHJ5IHsKICAgIG5ld1VybCA9IGRlY29kZVVSSSh1cmwpOwogIH0gY2F0Y2ggKF9PbykgewogICAgLy8gU29tZXRpbWUgdGhpcyBicmVha3MKICB9CiAgcmV0dXJuICgKICAgIG5ld1VybAogICAgICAucmVwbGFjZSgvXFwvZywgJy8nKQogICAgICAucmVwbGFjZSgvd2VicGFjazpcLz8vZywgJycpIC8vIFJlbW92ZSBpbnRlcm1lZGlhdGUgYmFzZSBwYXRoCiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc2VudHJ5LWludGVybmFsL3Nkay9uby1yZWdleHAtY29uc3RydWN0b3IKICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cChgKGZpbGU6Ly8pPy8qJHtlc2NhcGVkQmFzZX0vKmAsICdpZycpLCAnYXBwOi8vLycpCiAgKTsKfQoKLy8gU2xpZ2h0bHkgbW9kaWZpZWQgKG5vIElFOCBzdXBwb3J0LCBFUzYpIGFuZCB0cmFuc2NyaWJlZCB0byBUeXBlU2NyaXB0CgovLyBTcGxpdCBhIGZpbGVuYW1lIGludG8gW3Jvb3QsIGRpciwgYmFzZW5hbWUsIGV4dF0sIHVuaXggdmVyc2lvbgovLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLgpjb25zdCBzcGxpdFBhdGhSZSA9IC9eKFxTKzpcXHxcLz8pKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteL1xcXSs/fCkoXC5bXi4vXFxdKnwpKSg/OlsvXFxdKikkLzsKLyoqIEpTRG9jICovCmZ1bmN0aW9uIHNwbGl0UGF0aChmaWxlbmFtZSkgewogIC8vIFRydW5jYXRlIGZpbGVzIG5hbWVzIGdyZWF0ZXIgdGhhbiAxMDI0IGNoYXJhY3RlcnMgdG8gYXZvaWQgcmVnZXggZG9zCiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9wdWxsLzg3MzcjZGlzY3Vzc2lvbl9yMTI4NTcxOTE3MgogIGNvbnN0IHRydW5jYXRlZCA9IGZpbGVuYW1lLmxlbmd0aCA+IDEwMjQgPyBgPHRydW5jYXRlZD4ke2ZpbGVuYW1lLnNsaWNlKC0xMDI0KX1gIDogZmlsZW5hbWU7CiAgY29uc3QgcGFydHMgPSBzcGxpdFBhdGhSZS5leGVjKHRydW5jYXRlZCk7CiAgcmV0dXJuIHBhcnRzID8gcGFydHMuc2xpY2UoMSkgOiBbXTsKfQoKLyoqIEpTRG9jICovCmZ1bmN0aW9uIGRpcm5hbWUocGF0aCkgewogIGNvbnN0IHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKTsKICBjb25zdCByb290ID0gcmVzdWx0WzBdOwogIGxldCBkaXIgPSByZXN1bHRbMV07CgogIGlmICghcm9vdCAmJiAhZGlyKSB7CiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXIKICAgIHJldHVybiAnLic7CiAgfQoKICBpZiAoZGlyKSB7CiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaAogICAgZGlyID0gZGlyLnNsaWNlKDAsIGRpci5sZW5ndGggLSAxKTsKICB9CgogIHJldHVybiByb290ICsgZGlyOwp9CgovKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUgKi8KCi8qKiBTeW5jUHJvbWlzZSBpbnRlcm5hbCBzdGF0ZXMgKi8KdmFyIFN0YXRlczsgKGZ1bmN0aW9uIChTdGF0ZXMpIHsKICAvKiogUGVuZGluZyAqLwogIGNvbnN0IFBFTkRJTkcgPSAwOyBTdGF0ZXNbU3RhdGVzWyJQRU5ESU5HIl0gPSBQRU5ESU5HXSA9ICJQRU5ESU5HIjsKICAvKiogUmVzb2x2ZWQgLyBPSyAqLwogIGNvbnN0IFJFU09MVkVEID0gMTsgU3RhdGVzW1N0YXRlc1siUkVTT0xWRUQiXSA9IFJFU09MVkVEXSA9ICJSRVNPTFZFRCI7CiAgLyoqIFJlamVjdGVkIC8gRXJyb3IgKi8KICBjb25zdCBSRUpFQ1RFRCA9IDI7IFN0YXRlc1tTdGF0ZXNbIlJFSkVDVEVEIl0gPSBSRUpFQ1RFRF0gPSAiUkVKRUNURUQiOwp9KShTdGF0ZXMgfHwgKFN0YXRlcyA9IHt9KSk7CgovLyBPdmVybG9hZHMgc28gd2UgY2FuIGNhbGwgcmVzb2x2ZWRTeW5jUHJvbWlzZSB3aXRob3V0IGFyZ3VtZW50cyBhbmQgZ2VuZXJpYyBhcmd1bWVudAoKLyoqCiAqIENyZWF0ZXMgYSByZXNvbHZlZCBzeW5jIHByb21pc2UuCiAqCiAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gcmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRoCiAqIEByZXR1cm5zIHRoZSByZXNvbHZlZCBzeW5jIHByb21pc2UKICovCmZ1bmN0aW9uIHJlc29sdmVkU3luY1Byb21pc2UodmFsdWUpIHsKICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKHJlc29sdmUgPT4gewogICAgcmVzb2x2ZSh2YWx1ZSk7CiAgfSk7Cn0KCi8qKgogKiBDcmVhdGVzIGEgcmVqZWN0ZWQgc3luYyBwcm9taXNlLgogKgogKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIHJlamVjdCB0aGUgcHJvbWlzZSB3aXRoCiAqIEByZXR1cm5zIHRoZSByZWplY3RlZCBzeW5jIHByb21pc2UKICovCmZ1bmN0aW9uIHJlamVjdGVkU3luY1Byb21pc2UocmVhc29uKSB7CiAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7CiAgICByZWplY3QocmVhc29uKTsKICB9KTsKfQoKLyoqCiAqIFRoZW5hYmxlIGNsYXNzIHRoYXQgYmVoYXZlcyBsaWtlIGEgUHJvbWlzZSBhbmQgZm9sbG93cyBpdCdzIGludGVyZmFjZQogKiBidXQgaXMgbm90IGFzeW5jIGludGVybmFsbHkKICovCmNsYXNzIFN5bmNQcm9taXNlIHsKCiAgIGNvbnN0cnVjdG9yKAogICAgZXhlY3V0b3IsCiAgKSB7U3luY1Byb21pc2UucHJvdG90eXBlLl9faW5pdC5jYWxsKHRoaXMpO1N5bmNQcm9taXNlLnByb3RvdHlwZS5fX2luaXQyLmNhbGwodGhpcyk7U3luY1Byb21pc2UucHJvdG90eXBlLl9faW5pdDMuY2FsbCh0aGlzKTtTeW5jUHJvbWlzZS5wcm90b3R5cGUuX19pbml0NC5jYWxsKHRoaXMpOwogICAgdGhpcy5fc3RhdGUgPSBTdGF0ZXMuUEVORElORzsKICAgIHRoaXMuX2hhbmRsZXJzID0gW107CgogICAgdHJ5IHsKICAgICAgZXhlY3V0b3IodGhpcy5fcmVzb2x2ZSwgdGhpcy5fcmVqZWN0KTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgdGhpcy5fcmVqZWN0KGUpOwogICAgfQogIH0KCiAgLyoqIEpTRG9jICovCiAgIHRoZW4oCiAgICBvbmZ1bGZpbGxlZCwKICAgIG9ucmVqZWN0ZWQsCiAgKSB7CiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgdGhpcy5faGFuZGxlcnMucHVzaChbCiAgICAgICAgZmFsc2UsCiAgICAgICAgcmVzdWx0ID0+IHsKICAgICAgICAgIGlmICghb25mdWxmaWxsZWQpIHsKICAgICAgICAgICAgLy8gVE9ETzogwq9cXyjjg4QpXy/CrwogICAgICAgICAgICAvLyBUT0RPOiBGSVhNRQogICAgICAgICAgICByZXNvbHZlKHJlc3VsdCApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICByZXNvbHZlKG9uZnVsZmlsbGVkKHJlc3VsdCkpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICByZWFzb24gPT4gewogICAgICAgICAgaWYgKCFvbnJlamVjdGVkKSB7CiAgICAgICAgICAgIHJlamVjdChyZWFzb24pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICByZXNvbHZlKG9ucmVqZWN0ZWQocmVhc29uKSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICByZWplY3QoZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICBdKTsKICAgICAgdGhpcy5fZXhlY3V0ZUhhbmRsZXJzKCk7CiAgICB9KTsKICB9CgogIC8qKiBKU0RvYyAqLwogICBjYXRjaCgKICAgIG9ucmVqZWN0ZWQsCiAgKSB7CiAgICByZXR1cm4gdGhpcy50aGVuKHZhbCA9PiB2YWwsIG9ucmVqZWN0ZWQpOwogIH0KCiAgLyoqIEpTRG9jICovCiAgIGZpbmFsbHkob25maW5hbGx5KSB7CiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgbGV0IHZhbDsKICAgICAgbGV0IGlzUmVqZWN0ZWQ7CgogICAgICByZXR1cm4gdGhpcy50aGVuKAogICAgICAgIHZhbHVlID0+IHsKICAgICAgICAgIGlzUmVqZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgIHZhbCA9IHZhbHVlOwogICAgICAgICAgaWYgKG9uZmluYWxseSkgewogICAgICAgICAgICBvbmZpbmFsbHkoKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHJlYXNvbiA9PiB7CiAgICAgICAgICBpc1JlamVjdGVkID0gdHJ1ZTsKICAgICAgICAgIHZhbCA9IHJlYXNvbjsKICAgICAgICAgIGlmIChvbmZpbmFsbHkpIHsKICAgICAgICAgICAgb25maW5hbGx5KCk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgKS50aGVuKCgpID0+IHsKICAgICAgICBpZiAoaXNSZWplY3RlZCkgewogICAgICAgICAgcmVqZWN0KHZhbCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICByZXNvbHZlKHZhbCApOwogICAgICB9KTsKICAgIH0pOwogIH0KCiAgLyoqIEpTRG9jICovCiAgICBfX2luaXQoKSB7dGhpcy5fcmVzb2x2ZSA9ICh2YWx1ZSkgPT4gewogICAgdGhpcy5fc2V0UmVzdWx0KFN0YXRlcy5SRVNPTFZFRCwgdmFsdWUpOwogIH07fQoKICAvKiogSlNEb2MgKi8KICAgIF9faW5pdDIoKSB7dGhpcy5fcmVqZWN0ID0gKHJlYXNvbikgPT4gewogICAgdGhpcy5fc2V0UmVzdWx0KFN0YXRlcy5SRUpFQ1RFRCwgcmVhc29uKTsKICB9O30KCiAgLyoqIEpTRG9jICovCiAgICBfX2luaXQzKCkge3RoaXMuX3NldFJlc3VsdCA9IChzdGF0ZSwgdmFsdWUpID0+IHsKICAgIGlmICh0aGlzLl9zdGF0ZSAhPT0gU3RhdGVzLlBFTkRJTkcpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChpc1RoZW5hYmxlKHZhbHVlKSkgewogICAgICB2b2lkICh2YWx1ZSApLnRoZW4odGhpcy5fcmVzb2x2ZSwgdGhpcy5fcmVqZWN0KTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHRoaXMuX3N0YXRlID0gc3RhdGU7CiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlOwoKICAgIHRoaXMuX2V4ZWN1dGVIYW5kbGVycygpOwogIH07fQoKICAvKiogSlNEb2MgKi8KICAgIF9faW5pdDQoKSB7dGhpcy5fZXhlY3V0ZUhhbmRsZXJzID0gKCkgPT4gewogICAgaWYgKHRoaXMuX3N0YXRlID09PSBTdGF0ZXMuUEVORElORykgewogICAgICByZXR1cm47CiAgICB9CgogICAgY29uc3QgY2FjaGVkSGFuZGxlcnMgPSB0aGlzLl9oYW5kbGVycy5zbGljZSgpOwogICAgdGhpcy5faGFuZGxlcnMgPSBbXTsKCiAgICBjYWNoZWRIYW5kbGVycy5mb3JFYWNoKGhhbmRsZXIgPT4gewogICAgICBpZiAoaGFuZGxlclswXSkgewogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSBTdGF0ZXMuUkVTT0xWRUQpIHsKICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzCiAgICAgICAgaGFuZGxlclsxXSh0aGlzLl92YWx1ZSApOwogICAgICB9CgogICAgICBpZiAodGhpcy5fc3RhdGUgPT09IFN0YXRlcy5SRUpFQ1RFRCkgewogICAgICAgIGhhbmRsZXJbMl0odGhpcy5fdmFsdWUpOwogICAgICB9CgogICAgICBoYW5kbGVyWzBdID0gdHJ1ZTsKICAgIH0pOwogIH07fQp9CgovKioKICogQ3JlYXRlcyBhbiBuZXcgUHJvbWlzZUJ1ZmZlciBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIGxpbWl0CiAqIEBwYXJhbSBsaW1pdCBtYXggbnVtYmVyIG9mIHByb21pc2VzIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgYnVmZmVyCiAqLwpmdW5jdGlvbiBtYWtlUHJvbWlzZUJ1ZmZlcihsaW1pdCkgewogIGNvbnN0IGJ1ZmZlciA9IFtdOwoKICBmdW5jdGlvbiBpc1JlYWR5KCkgewogICAgcmV0dXJuIGxpbWl0ID09PSB1bmRlZmluZWQgfHwgYnVmZmVyLmxlbmd0aCA8IGxpbWl0OwogIH0KCiAgLyoqCiAgICogUmVtb3ZlIGEgcHJvbWlzZSBmcm9tIHRoZSBxdWV1ZS4KICAgKgogICAqIEBwYXJhbSB0YXNrIENhbiBiZSBhbnkgUHJvbWlzZUxpa2U8VD4KICAgKiBAcmV0dXJucyBSZW1vdmVkIHByb21pc2UuCiAgICovCiAgZnVuY3Rpb24gcmVtb3ZlKHRhc2spIHsKICAgIHJldHVybiBidWZmZXIuc3BsaWNlKGJ1ZmZlci5pbmRleE9mKHRhc2spLCAxKVswXTsKICB9CgogIC8qKgogICAqIEFkZCBhIHByb21pc2UgKHJlcHJlc2VudGluZyBhbiBpbi1mbGlnaHQgYWN0aW9uKSB0byB0aGUgcXVldWUsIGFuZCBzZXQgaXQgdG8gcmVtb3ZlIGl0c2VsZiBvbiBmdWxmaWxsbWVudC4KICAgKgogICAqIEBwYXJhbSB0YXNrUHJvZHVjZXIgQSBmdW5jdGlvbiBwcm9kdWNpbmcgYW55IFByb21pc2VMaWtlPFQ+OyBJbiBwcmV2aW91cyB2ZXJzaW9ucyB0aGlzIHVzZWQgdG8gYmUgYHRhc2s6CiAgICogICAgICAgIFByb21pc2VMaWtlPFQ+YCwgYnV0IHVuZGVyIHRoYXQgbW9kZWwsIFByb21pc2VzIHdlcmUgaW5zdGFudGx5IGNyZWF0ZWQgb24gdGhlIGNhbGwtc2l0ZSBhbmQgdGhlaXIgZXhlY3V0b3IKICAgKiAgICAgICAgZnVuY3Rpb25zIHRoZXJlZm9yZSByYW4gaW1tZWRpYXRlbHkuIFRodXMsIGV2ZW4gaWYgdGhlIGJ1ZmZlciB3YXMgZnVsbCwgdGhlIGFjdGlvbiBzdGlsbCBoYXBwZW5lZC4gQnkKICAgKiAgICAgICAgcmVxdWlyaW5nIHRoZSBwcm9taXNlIHRvIGJlIHdyYXBwZWQgaW4gYSBmdW5jdGlvbiwgd2UgY2FuIGRlZmVyIHByb21pc2UgY3JlYXRpb24gdW50aWwgYWZ0ZXIgdGhlIGJ1ZmZlcgogICAqICAgICAgICBsaW1pdCBjaGVjay4KICAgKiBAcmV0dXJucyBUaGUgb3JpZ2luYWwgcHJvbWlzZS4KICAgKi8KICBmdW5jdGlvbiBhZGQodGFza1Byb2R1Y2VyKSB7CiAgICBpZiAoIWlzUmVhZHkoKSkgewogICAgICByZXR1cm4gcmVqZWN0ZWRTeW5jUHJvbWlzZShuZXcgU2VudHJ5RXJyb3IoJ05vdCBhZGRpbmcgUHJvbWlzZSBiZWNhdXNlIGJ1ZmZlciBsaW1pdCB3YXMgcmVhY2hlZC4nKSk7CiAgICB9CgogICAgLy8gc3RhcnQgdGhlIHRhc2sgYW5kIGFkZCBpdHMgcHJvbWlzZSB0byB0aGUgcXVldWUKICAgIGNvbnN0IHRhc2sgPSB0YXNrUHJvZHVjZXIoKTsKICAgIGlmIChidWZmZXIuaW5kZXhPZih0YXNrKSA9PT0gLTEpIHsKICAgICAgYnVmZmVyLnB1c2godGFzayk7CiAgICB9CiAgICB2b2lkIHRhc2sKICAgICAgLnRoZW4oKCkgPT4gcmVtb3ZlKHRhc2spKQogICAgICAvLyBVc2UgYHRoZW4obnVsbCwgcmVqZWN0aW9uSGFuZGxlcilgIHJhdGhlciB0aGFuIGBjYXRjaChyZWplY3Rpb25IYW5kbGVyKWAgc28gdGhhdCB3ZSBjYW4gdXNlIGBQcm9taXNlTGlrZWAKICAgICAgLy8gcmF0aGVyIHRoYW4gYFByb21pc2VgLiBgUHJvbWlzZUxpa2VgIGRvZXNuJ3QgaGF2ZSBhIGAuY2F0Y2hgIG1ldGhvZCwgbWFraW5nIGl0cyBwb2x5ZmlsbCBzbWFsbGVyLiAoRVM1IGRpZG4ndAogICAgICAvLyBoYXZlIHByb21pc2VzLCBzbyBUUyBoYXMgdG8gcG9seWZpbGwgd2hlbiBkb3duLWNvbXBpbGluZy4pCiAgICAgIC50aGVuKG51bGwsICgpID0+CiAgICAgICAgcmVtb3ZlKHRhc2spLnRoZW4obnVsbCwgKCkgPT4gewogICAgICAgICAgLy8gV2UgaGF2ZSB0byBhZGQgYW5vdGhlciBjYXRjaCBoZXJlIGJlY2F1c2UgYHJlbW92ZSgpYCBzdGFydHMgYSBuZXcgcHJvbWlzZSBjaGFpbi4KICAgICAgICB9KSwKICAgICAgKTsKICAgIHJldHVybiB0YXNrOwogIH0KCiAgLyoqCiAgICogV2FpdCBmb3IgYWxsIHByb21pc2VzIGluIHRoZSBxdWV1ZSB0byByZXNvbHZlIG9yIGZvciB0aW1lb3V0IHRvIGV4cGlyZSwgd2hpY2hldmVyIGNvbWVzIGZpcnN0LgogICAqCiAgICogQHBhcmFtIHRpbWVvdXQgVGhlIHRpbWUsIGluIG1zLCBhZnRlciB3aGljaCB0byByZXNvbHZlIHRvIGBmYWxzZWAgaWYgdGhlIHF1ZXVlIGlzIHN0aWxsIG5vbi1lbXB0eS4gUGFzc2luZyBgMGAgKG9yCiAgICogbm90IHBhc3NpbmcgYW55dGhpbmcpIHdpbGwgbWFrZSB0aGUgcHJvbWlzZSB3YWl0IGFzIGxvbmcgYXMgaXQgdGFrZXMgZm9yIHRoZSBxdWV1ZSB0byBkcmFpbiBiZWZvcmUgcmVzb2x2aW5nIHRvCiAgICogYHRydWVgLgogICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCB3aWxsIHJlc29sdmUgdG8gYHRydWVgIGlmIHRoZSBxdWV1ZSBpcyBhbHJlYWR5IGVtcHR5IG9yIGRyYWlucyBiZWZvcmUgdGhlIHRpbWVvdXQsIGFuZAogICAqIGBmYWxzZWAgb3RoZXJ3aXNlCiAgICovCiAgZnVuY3Rpb24gZHJhaW4odGltZW91dCkgewogICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIGxldCBjb3VudGVyID0gYnVmZmVyLmxlbmd0aDsKCiAgICAgIGlmICghY291bnRlcikgewogICAgICAgIHJldHVybiByZXNvbHZlKHRydWUpOwogICAgICB9CgogICAgICAvLyB3YWl0IGZvciBgdGltZW91dGAgbXMgYW5kIHRoZW4gcmVzb2x2ZSB0byBgZmFsc2VgIChpZiBub3QgY2FuY2VsbGVkIGZpcnN0KQogICAgICBjb25zdCBjYXB0dXJlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICBpZiAodGltZW91dCAmJiB0aW1lb3V0ID4gMCkgewogICAgICAgICAgcmVzb2x2ZShmYWxzZSk7CiAgICAgICAgfQogICAgICB9LCB0aW1lb3V0KTsKCiAgICAgIC8vIGlmIGFsbCBwcm9taXNlcyByZXNvbHZlIGluIHRpbWUsIGNhbmNlbCB0aGUgdGltZXIgYW5kIHJlc29sdmUgdG8gYHRydWVgCiAgICAgIGJ1ZmZlci5mb3JFYWNoKGl0ZW0gPT4gewogICAgICAgIHZvaWQgcmVzb2x2ZWRTeW5jUHJvbWlzZShpdGVtKS50aGVuKCgpID0+IHsKICAgICAgICAgIGlmICghLS1jb3VudGVyKSB7CiAgICAgICAgICAgIGNsZWFyVGltZW91dChjYXB0dXJlZFNldFRpbWVvdXQpOwogICAgICAgICAgICByZXNvbHZlKHRydWUpOwogICAgICAgICAgfQogICAgICAgIH0sIHJlamVjdCk7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICByZXR1cm4gewogICAgJDogYnVmZmVyLAogICAgYWRkLAogICAgZHJhaW4sCiAgfTsKfQoKY29uc3QgT05FX1NFQ09ORF9JTl9NUyA9IDEwMDA7CgovKioKICogQSBwYXJ0aWFsIGRlZmluaXRpb24gb2YgdGhlIFtQZXJmb3JtYW5jZSBXZWIgQVBJXXtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUGVyZm9ybWFuY2V9CiAqIGZvciBhY2Nlc3NpbmcgYSBoaWdoLXJlc29sdXRpb24gbW9ub3RvbmljIGNsb2NrLgogKi8KCi8qKgogKiBSZXR1cm5zIGEgdGltZXN0YW1wIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2ggdXNpbmcgdGhlIERhdGUgQVBJLgogKgogKiBUT0RPKHY4KTogUmV0dXJuIHR5cGUgc2hvdWxkIGJlIHJvdW5kZWQuCiAqLwpmdW5jdGlvbiBkYXRlVGltZXN0YW1wSW5TZWNvbmRzKCkgewogIHJldHVybiBEYXRlLm5vdygpIC8gT05FX1NFQ09ORF9JTl9NUzsKfQoKLyoqCiAqIFJldHVybnMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIFBlcmZvcm1hbmNlIEFQSSBicm93c2VyIGltcGxlbWVudGF0aW9uLCBvciB1bmRlZmluZWQgZm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90CiAqIHN1cHBvcnQgdGhlIEFQSS4KICoKICogV3JhcHBpbmcgdGhlIG5hdGl2ZSBBUEkgd29ya3MgYXJvdW5kIGRpZmZlcmVuY2VzIGluIGJlaGF2aW9yIGZyb20gZGlmZmVyZW50IGJyb3dzZXJzLgogKi8KZnVuY3Rpb24gY3JlYXRlVW5peFRpbWVzdGFtcEluU2Vjb25kc0Z1bmMoKSB7CiAgY29uc3QgeyBwZXJmb3JtYW5jZSB9ID0gR0xPQkFMX09CSiA7CiAgaWYgKCFwZXJmb3JtYW5jZSB8fCAhcGVyZm9ybWFuY2Uubm93KSB7CiAgICByZXR1cm4gZGF0ZVRpbWVzdGFtcEluU2Vjb25kczsKICB9CgogIC8vIFNvbWUgYnJvd3NlciBhbmQgZW52aXJvbm1lbnRzIGRvbid0IGhhdmUgYSB0aW1lT3JpZ2luLCBzbyB3ZSBmYWxsYmFjayB0bwogIC8vIHVzaW5nIERhdGUubm93KCkgdG8gY29tcHV0ZSB0aGUgc3RhcnRpbmcgdGltZS4KICBjb25zdCBhcHByb3hTdGFydGluZ1RpbWVPcmlnaW4gPSBEYXRlLm5vdygpIC0gcGVyZm9ybWFuY2Uubm93KCk7CiAgY29uc3QgdGltZU9yaWdpbiA9IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gPT0gdW5kZWZpbmVkID8gYXBwcm94U3RhcnRpbmdUaW1lT3JpZ2luIDogcGVyZm9ybWFuY2UudGltZU9yaWdpbjsKCiAgLy8gcGVyZm9ybWFuY2Uubm93KCkgaXMgYSBtb25vdG9uaWMgY2xvY2ssIHdoaWNoIG1lYW5zIGl0IHN0YXJ0cyBhdCAwIHdoZW4gdGhlIHByb2Nlc3MgYmVnaW5zLiBUbyBnZXQgdGhlIGN1cnJlbnQKICAvLyB3YWxsIGNsb2NrIHRpbWUgKGFjdHVhbCBVTklYIHRpbWVzdGFtcCksIHdlIG5lZWQgdG8gYWRkIHRoZSBzdGFydGluZyB0aW1lIG9yaWdpbiBhbmQgdGhlIGN1cnJlbnQgdGltZSBlbGFwc2VkLgogIC8vCiAgLy8gVE9ETzogVGhpcyBkb2VzIG5vdCBhY2NvdW50IGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgbW9ub3RvbmljIGNsb2NrIHRoYXQgcG93ZXJzIHBlcmZvcm1hbmNlLm5vdygpIGRyaWZ0cyBmcm9tIHRoZQogIC8vIHdhbGwgY2xvY2sgdGltZSwgd2hpY2ggY2F1c2VzIHRoZSByZXR1cm5lZCB0aW1lc3RhbXAgdG8gYmUgaW5hY2N1cmF0ZS4gV2Ugc2hvdWxkIGludmVzdGlnYXRlIGhvdyB0byBkZXRlY3QgYW5kCiAgLy8gY29ycmVjdCBmb3IgdGhpcy4KICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1OTAKICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tZG4vY29udGVudC9pc3N1ZXMvNDcxMwogIC8vIFNlZTogaHR0cHM6Ly9kZXYudG8vbm9hbXIvd2hlbi1hLW1pbGxpc2Vjb25kLWlzLW5vdC1hLW1pbGxpc2Vjb25kLTNoNgogIHJldHVybiAoKSA9PiB7CiAgICByZXR1cm4gKHRpbWVPcmlnaW4gKyBwZXJmb3JtYW5jZS5ub3coKSkgLyBPTkVfU0VDT05EX0lOX01TOwogIH07Cn0KCi8qKgogKiBSZXR1cm5zIGEgdGltZXN0YW1wIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2ggdXNpbmcgZWl0aGVyIHRoZSBQZXJmb3JtYW5jZSBvciBEYXRlIEFQSXMsIGRlcGVuZGluZyBvbiB0aGUKICogYXZhaWxhYmlsaXR5IG9mIHRoZSBQZXJmb3JtYW5jZSBBUEkuCiAqCiAqIEJVRzogTm90ZSB0aGF0IGJlY2F1c2Ugb2YgaG93IGJyb3dzZXJzIGltcGxlbWVudCB0aGUgUGVyZm9ybWFuY2UgQVBJLCB0aGUgY2xvY2sgbWlnaHQgc3RvcCB3aGVuIHRoZSBjb21wdXRlciBpcwogKiBhc2xlZXAuIFRoaXMgY3JlYXRlcyBhIHNrZXcgYmV0d2VlbiBgZGF0ZVRpbWVzdGFtcEluU2Vjb25kc2AgYW5kIGB0aW1lc3RhbXBJblNlY29uZHNgLiBUaGUKICogc2tldyBjYW4gZ3JvdyB0byBhcmJpdHJhcnkgYW1vdW50cyBsaWtlIGRheXMsIHdlZWtzIG9yIG1vbnRocy4KICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1OTAuCiAqLwpjb25zdCB0aW1lc3RhbXBJblNlY29uZHMgPSBjcmVhdGVVbml4VGltZXN0YW1wSW5TZWNvbmRzRnVuYygpOwoKLyoqCiAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoLiBUaGlzIHZhbHVlIGlzIG9ubHkgdXNhYmxlIGluIGEgYnJvd3NlciwgYW5kIG9ubHkgd2hlbiB0aGUKICogcGVyZm9ybWFuY2UgQVBJIGlzIGF2YWlsYWJsZS4KICovCigoKSA9PiB7CiAgLy8gVW5mb3J0dW5hdGVseSBicm93c2VycyBtYXkgcmVwb3J0IGFuIGluYWNjdXJhdGUgdGltZSBvcmlnaW4gZGF0YSwgdGhyb3VnaCBlaXRoZXIgcGVyZm9ybWFuY2UudGltZU9yaWdpbiBvcgogIC8vIHBlcmZvcm1hbmNlLnRpbWluZy5uYXZpZ2F0aW9uU3RhcnQsIHdoaWNoIHJlc3VsdHMgaW4gcG9vciByZXN1bHRzIGluIHBlcmZvcm1hbmNlIGRhdGEuIFdlIG9ubHkgdHJlYXQgdGltZSBvcmlnaW4KICAvLyBkYXRhIGFzIHJlbGlhYmxlIGlmIHRoZXkgYXJlIHdpdGhpbiBhIHJlYXNvbmFibGUgdGhyZXNob2xkIG9mIHRoZSBjdXJyZW50IHRpbWUuCgogIGNvbnN0IHsgcGVyZm9ybWFuY2UgfSA9IEdMT0JBTF9PQkogOwogIGlmICghcGVyZm9ybWFuY2UgfHwgIXBlcmZvcm1hbmNlLm5vdykgewogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CgogIGNvbnN0IHRocmVzaG9sZCA9IDM2MDAgKiAxMDAwOwogIGNvbnN0IHBlcmZvcm1hbmNlTm93ID0gcGVyZm9ybWFuY2Uubm93KCk7CiAgY29uc3QgZGF0ZU5vdyA9IERhdGUubm93KCk7CgogIC8vIGlmIHRpbWVPcmlnaW4gaXNuJ3QgYXZhaWxhYmxlIHNldCBkZWx0YSB0byB0aHJlc2hvbGQgc28gaXQgaXNuJ3QgdXNlZAogIGNvbnN0IHRpbWVPcmlnaW5EZWx0YSA9IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4KICAgID8gTWF0aC5hYnMocGVyZm9ybWFuY2UudGltZU9yaWdpbiArIHBlcmZvcm1hbmNlTm93IC0gZGF0ZU5vdykKICAgIDogdGhyZXNob2xkOwogIGNvbnN0IHRpbWVPcmlnaW5Jc1JlbGlhYmxlID0gdGltZU9yaWdpbkRlbHRhIDwgdGhyZXNob2xkOwoKICAvLyBXaGlsZSBwZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0IGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgcGVyZm9ybWFuY2UudGltZU9yaWdpbiwgcGVyZm9ybWFuY2UudGltZU9yaWdpbgogIC8vIGlzIG5vdCBhcyB3aWRlbHkgc3VwcG9ydGVkLiBOYW1lbHksIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gaXMgdW5kZWZpbmVkIGluIFNhZmFyaSBhcyBvZiB3cml0aW5nLgogIC8vIEFsc28gYXMgb2Ygd3JpdGluZywgcGVyZm9ybWFuY2UudGltaW5nIGlzIG5vdCBhdmFpbGFibGUgaW4gV2ViIFdvcmtlcnMgaW4gbWFpbnN0cmVhbSBicm93c2Vycywgc28gaXQgaXMgbm90IGFsd2F5cwogIC8vIGEgdmFsaWQgZmFsbGJhY2suIEluIHRoZSBhYnNlbmNlIG9mIGFuIGluaXRpYWwgdGltZSBwcm92aWRlZCBieSB0aGUgYnJvd3NlciwgZmFsbGJhY2sgdG8gdGhlIGN1cnJlbnQgdGltZSBmcm9tIHRoZQogIC8vIERhdGUgQVBJLgogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIGNvbnN0IG5hdmlnYXRpb25TdGFydCA9IHBlcmZvcm1hbmNlLnRpbWluZyAmJiBwZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0OwogIGNvbnN0IGhhc05hdmlnYXRpb25TdGFydCA9IHR5cGVvZiBuYXZpZ2F0aW9uU3RhcnQgPT09ICdudW1iZXInOwogIC8vIGlmIG5hdmlnYXRpb25TdGFydCBpc24ndCBhdmFpbGFibGUgc2V0IGRlbHRhIHRvIHRocmVzaG9sZCBzbyBpdCBpc24ndCB1c2VkCiAgY29uc3QgbmF2aWdhdGlvblN0YXJ0RGVsdGEgPSBoYXNOYXZpZ2F0aW9uU3RhcnQgPyBNYXRoLmFicyhuYXZpZ2F0aW9uU3RhcnQgKyBwZXJmb3JtYW5jZU5vdyAtIGRhdGVOb3cpIDogdGhyZXNob2xkOwogIGNvbnN0IG5hdmlnYXRpb25TdGFydElzUmVsaWFibGUgPSBuYXZpZ2F0aW9uU3RhcnREZWx0YSA8IHRocmVzaG9sZDsKCiAgaWYgKHRpbWVPcmlnaW5Jc1JlbGlhYmxlIHx8IG5hdmlnYXRpb25TdGFydElzUmVsaWFibGUpIHsKICAgIC8vIFVzZSB0aGUgbW9yZSByZWxpYWJsZSB0aW1lIG9yaWdpbgogICAgaWYgKHRpbWVPcmlnaW5EZWx0YSA8PSBuYXZpZ2F0aW9uU3RhcnREZWx0YSkgewogICAgICByZXR1cm4gcGVyZm9ybWFuY2UudGltZU9yaWdpbjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuYXZpZ2F0aW9uU3RhcnQ7CiAgICB9CiAgfQogIHJldHVybiBkYXRlTm93Owp9KSgpOwoKLyoqCiAqIENyZWF0ZXMgYW4gZW52ZWxvcGUuCiAqIE1ha2Ugc3VyZSB0byBhbHdheXMgZXhwbGljaXRseSBwcm92aWRlIHRoZSBnZW5lcmljIHRvIHRoaXMgZnVuY3Rpb24KICogc28gdGhhdCB0aGUgZW52ZWxvcGUgdHlwZXMgcmVzb2x2ZSBjb3JyZWN0bHkuCiAqLwpmdW5jdGlvbiBjcmVhdGVFbnZlbG9wZShoZWFkZXJzLCBpdGVtcyA9IFtdKSB7CiAgcmV0dXJuIFtoZWFkZXJzLCBpdGVtc10gOwp9CgovKioKICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gbG9vcCB0aHJvdWdoIHRoZSBpdGVtcyBhbmQgaXRlbSB0eXBlcyBvZiBhbiBlbnZlbG9wZS4KICogKFRoaXMgZnVuY3Rpb24gd2FzIG1vc3RseSBjcmVhdGVkIGJlY2F1c2Ugd29ya2luZyB3aXRoIGVudmVsb3BlIHR5cGVzIGlzIHBhaW5mdWwgYXQgdGhlIG1vbWVudCkKICoKICogSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSwgdGhlIHJlc3Qgb2YgdGhlIGl0ZW1zIHdpbGwgYmUgc2tpcHBlZC4KICovCmZ1bmN0aW9uIGZvckVhY2hFbnZlbG9wZUl0ZW0oCiAgZW52ZWxvcGUsCiAgY2FsbGJhY2ssCikgewogIGNvbnN0IGVudmVsb3BlSXRlbXMgPSBlbnZlbG9wZVsxXTsKCiAgZm9yIChjb25zdCBlbnZlbG9wZUl0ZW0gb2YgZW52ZWxvcGVJdGVtcykgewogICAgY29uc3QgZW52ZWxvcGVJdGVtVHlwZSA9IGVudmVsb3BlSXRlbVswXS50eXBlOwogICAgY29uc3QgcmVzdWx0ID0gY2FsbGJhY2soZW52ZWxvcGVJdGVtLCBlbnZlbG9wZUl0ZW1UeXBlKTsKCiAgICBpZiAocmVzdWx0KSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KCiAgcmV0dXJuIGZhbHNlOwp9CgovKioKICogRW5jb2RlIGEgc3RyaW5nIHRvIFVURjguCiAqLwpmdW5jdGlvbiBlbmNvZGVVVEY4KGlucHV0LCB0ZXh0RW5jb2RlcikgewogIGNvbnN0IHV0ZjggPSB0ZXh0RW5jb2RlciB8fCBuZXcgVGV4dEVuY29kZXIoKTsKICByZXR1cm4gdXRmOC5lbmNvZGUoaW5wdXQpOwp9CgovKioKICogU2VyaWFsaXplcyBhbiBlbnZlbG9wZS4KICovCmZ1bmN0aW9uIHNlcmlhbGl6ZUVudmVsb3BlKGVudmVsb3BlLCB0ZXh0RW5jb2RlcikgewogIGNvbnN0IFtlbnZIZWFkZXJzLCBpdGVtc10gPSBlbnZlbG9wZTsKCiAgLy8gSW5pdGlhbGx5IHdlIGNvbnN0cnVjdCBvdXIgZW52ZWxvcGUgYXMgYSBzdHJpbmcgYW5kIG9ubHkgY29udmVydCB0byBiaW5hcnkgY2h1bmtzIGlmIHdlIGVuY291bnRlciBiaW5hcnkgZGF0YQogIGxldCBwYXJ0cyA9IEpTT04uc3RyaW5naWZ5KGVudkhlYWRlcnMpOwoKICBmdW5jdGlvbiBhcHBlbmQobmV4dCkgewogICAgaWYgKHR5cGVvZiBwYXJ0cyA9PT0gJ3N0cmluZycpIHsKICAgICAgcGFydHMgPSB0eXBlb2YgbmV4dCA9PT0gJ3N0cmluZycgPyBwYXJ0cyArIG5leHQgOiBbZW5jb2RlVVRGOChwYXJ0cywgdGV4dEVuY29kZXIpLCBuZXh0XTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnRzLnB1c2godHlwZW9mIG5leHQgPT09ICdzdHJpbmcnID8gZW5jb2RlVVRGOChuZXh0LCB0ZXh0RW5jb2RlcikgOiBuZXh0KTsKICAgIH0KICB9CgogIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykgewogICAgY29uc3QgW2l0ZW1IZWFkZXJzLCBwYXlsb2FkXSA9IGl0ZW07CgogICAgYXBwZW5kKGBcbiR7SlNPTi5zdHJpbmdpZnkoaXRlbUhlYWRlcnMpfVxuYCk7CgogICAgaWYgKHR5cGVvZiBwYXlsb2FkID09PSAnc3RyaW5nJyB8fCBwYXlsb2FkIGluc3RhbmNlb2YgVWludDhBcnJheSkgewogICAgICBhcHBlbmQocGF5bG9hZCk7CiAgICB9IGVsc2UgewogICAgICBsZXQgc3RyaW5naWZpZWRQYXlsb2FkOwogICAgICB0cnkgewogICAgICAgIHN0cmluZ2lmaWVkUGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgLy8gSW4gY2FzZSwgZGVzcGl0ZSBhbGwgb3VyIGVmZm9ydHMgdG8ga2VlcCBgcGF5bG9hZGAgY2lyY3VsYXItZGVwZW5kZW5jeS1mcmVlLCBgSlNPTi5zdHJpbmlmeSgpYCBzdGlsbAogICAgICAgIC8vIGZhaWxzLCB3ZSB0cnkgYWdhaW4gYWZ0ZXIgbm9ybWFsaXppbmcgaXQgYWdhaW4gd2l0aCBpbmZpbml0ZSBub3JtYWxpemF0aW9uIGRlcHRoLiBUaGlzIG9mIGNvdXJzZSBoYXMgYQogICAgICAgIC8vIHBlcmZvcm1hbmNlIGltcGFjdCBidXQgaW4gdGhpcyBjYXNlIGEgcGVyZm9ybWFuY2UgaGl0IGlzIGJldHRlciB0aGFuIHRocm93aW5nLgogICAgICAgIHN0cmluZ2lmaWVkUGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KG5vcm1hbGl6ZShwYXlsb2FkKSk7CiAgICAgIH0KICAgICAgYXBwZW5kKHN0cmluZ2lmaWVkUGF5bG9hZCk7CiAgICB9CiAgfQoKICByZXR1cm4gdHlwZW9mIHBhcnRzID09PSAnc3RyaW5nJyA/IHBhcnRzIDogY29uY2F0QnVmZmVycyhwYXJ0cyk7Cn0KCmZ1bmN0aW9uIGNvbmNhdEJ1ZmZlcnMoYnVmZmVycykgewogIGNvbnN0IHRvdGFsTGVuZ3RoID0gYnVmZmVycy5yZWR1Y2UoKGFjYywgYnVmKSA9PiBhY2MgKyBidWYubGVuZ3RoLCAwKTsKCiAgY29uc3QgbWVyZ2VkID0gbmV3IFVpbnQ4QXJyYXkodG90YWxMZW5ndGgpOwogIGxldCBvZmZzZXQgPSAwOwogIGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnMpIHsKICAgIG1lcmdlZC5zZXQoYnVmZmVyLCBvZmZzZXQpOwogICAgb2Zmc2V0ICs9IGJ1ZmZlci5sZW5ndGg7CiAgfQoKICByZXR1cm4gbWVyZ2VkOwp9Cgpjb25zdCBJVEVNX1RZUEVfVE9fREFUQV9DQVRFR09SWV9NQVAgPSB7CiAgc2Vzc2lvbjogJ3Nlc3Npb24nLAogIHNlc3Npb25zOiAnc2Vzc2lvbicsCiAgYXR0YWNobWVudDogJ2F0dGFjaG1lbnQnLAogIHRyYW5zYWN0aW9uOiAndHJhbnNhY3Rpb24nLAogIGV2ZW50OiAnZXJyb3InLAogIGNsaWVudF9yZXBvcnQ6ICdpbnRlcm5hbCcsCiAgdXNlcl9yZXBvcnQ6ICdkZWZhdWx0JywKICBwcm9maWxlOiAncHJvZmlsZScsCiAgcmVwbGF5X2V2ZW50OiAncmVwbGF5JywKICByZXBsYXlfcmVjb3JkaW5nOiAncmVwbGF5JywKICBjaGVja19pbjogJ21vbml0b3InLAogIGZlZWRiYWNrOiAnZmVlZGJhY2snLAogIHNwYW46ICdzcGFuJywKICAvLyBUT0RPOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgdW50aWwgd2UgaGF2ZSBhIHByb3BlciBkYXRhIGNhdGVnb3J5IGZvciBtZXRyaWNzCiAgc3RhdHNkOiAndW5rbm93bicsCn07CgovKioKICogTWFwcyB0aGUgdHlwZSBvZiBhbiBlbnZlbG9wZSBpdGVtIHRvIGEgZGF0YSBjYXRlZ29yeS4KICovCmZ1bmN0aW9uIGVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSh0eXBlKSB7CiAgcmV0dXJuIElURU1fVFlQRV9UT19EQVRBX0NBVEVHT1JZX01BUFt0eXBlXTsKfQoKLyoqIEV4dHJhY3RzIHRoZSBtaW5pbWFsIFNESyBpbmZvIGZyb20gZnJvbSB0aGUgbWV0YWRhdGEgb3IgYW4gZXZlbnRzICovCmZ1bmN0aW9uIGdldFNka01ldGFkYXRhRm9yRW52ZWxvcGVIZWFkZXIobWV0YWRhdGFPckV2ZW50KSB7CiAgaWYgKCFtZXRhZGF0YU9yRXZlbnQgfHwgIW1ldGFkYXRhT3JFdmVudC5zZGspIHsKICAgIHJldHVybjsKICB9CiAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uIH0gPSBtZXRhZGF0YU9yRXZlbnQuc2RrOwogIHJldHVybiB7IG5hbWUsIHZlcnNpb24gfTsKfQoKLyoqCiAqIENyZWF0ZXMgZXZlbnQgZW52ZWxvcGUgaGVhZGVycywgYmFzZWQgb24gZXZlbnQsIHNkayBpbmZvIGFuZCB0dW5uZWwKICogTm90ZTogVGhpcyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGZyb20gdGhlIGNvcmUgcGFja2FnZSB0byBtYWtlIGl0IGF2YWlsYWJsZSBpbiBSZXBsYXkKICovCmZ1bmN0aW9uIGNyZWF0ZUV2ZW50RW52ZWxvcGVIZWFkZXJzKAogIGV2ZW50LAogIHNka0luZm8sCiAgdHVubmVsLAogIGRzbiwKKSB7CiAgY29uc3QgZHluYW1pY1NhbXBsaW5nQ29udGV4dCA9IGV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YSAmJiBldmVudC5zZGtQcm9jZXNzaW5nTWV0YWRhdGEuZHluYW1pY1NhbXBsaW5nQ29udGV4dDsKICByZXR1cm4gewogICAgZXZlbnRfaWQ6IGV2ZW50LmV2ZW50X2lkICwKICAgIHNlbnRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwKICAgIC4uLihzZGtJbmZvICYmIHsgc2RrOiBzZGtJbmZvIH0pLAogICAgLi4uKCEhdHVubmVsICYmIGRzbiAmJiB7IGRzbjogZHNuVG9TdHJpbmcoZHNuKSB9KSwKICAgIC4uLihkeW5hbWljU2FtcGxpbmdDb250ZXh0ICYmIHsKICAgICAgdHJhY2U6IGRyb3BVbmRlZmluZWRLZXlzKHsgLi4uZHluYW1pY1NhbXBsaW5nQ29udGV4dCB9KSwKICAgIH0pLAogIH07Cn0KCi8vIEludGVudGlvbmFsbHkga2VlcGluZyB0aGUga2V5IGJyb2FkLCBhcyB3ZSBkb24ndCBrbm93IGZvciBzdXJlIHdoYXQgcmF0ZSBsaW1pdCBoZWFkZXJzIGdldCByZXR1cm5lZCBmcm9tIGJhY2tlbmQKCmNvbnN0IERFRkFVTFRfUkVUUllfQUZURVIgPSA2MCAqIDEwMDA7IC8vIDYwIHNlY29uZHMKCi8qKgogKiBFeHRyYWN0cyBSZXRyeS1BZnRlciB2YWx1ZSBmcm9tIHRoZSByZXF1ZXN0IGhlYWRlciBvciByZXR1cm5zIGRlZmF1bHQgdmFsdWUKICogQHBhcmFtIGhlYWRlciBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgJ1JldHJ5LUFmdGVyJyBoZWFkZXIKICogQHBhcmFtIG5vdyBjdXJyZW50IHVuaXggdGltZXN0YW1wCiAqCiAqLwpmdW5jdGlvbiBwYXJzZVJldHJ5QWZ0ZXJIZWFkZXIoaGVhZGVyLCBub3cgPSBEYXRlLm5vdygpKSB7CiAgY29uc3QgaGVhZGVyRGVsYXkgPSBwYXJzZUludChgJHtoZWFkZXJ9YCwgMTApOwogIGlmICghaXNOYU4oaGVhZGVyRGVsYXkpKSB7CiAgICByZXR1cm4gaGVhZGVyRGVsYXkgKiAxMDAwOwogIH0KCiAgY29uc3QgaGVhZGVyRGF0ZSA9IERhdGUucGFyc2UoYCR7aGVhZGVyfWApOwogIGlmICghaXNOYU4oaGVhZGVyRGF0ZSkpIHsKICAgIHJldHVybiBoZWFkZXJEYXRlIC0gbm93OwogIH0KCiAgcmV0dXJuIERFRkFVTFRfUkVUUllfQUZURVI7Cn0KCi8qKgogKiBHZXRzIHRoZSB0aW1lIHRoYXQgdGhlIGdpdmVuIGNhdGVnb3J5IGlzIGRpc2FibGVkIHVudGlsIGZvciByYXRlIGxpbWl0aW5nLgogKiBJbiBjYXNlIG5vIGNhdGVnb3J5LXNwZWNpZmljIGxpbWl0IGlzIHNldCBidXQgYSBnZW5lcmFsIHJhdGUgbGltaXQgYWNyb3NzIGFsbCBjYXRlZ29yaWVzIGlzIGFjdGl2ZSwKICogdGhhdCB0aW1lIGlzIHJldHVybmVkLgogKgogKiBAcmV0dXJuIHRoZSB0aW1lIGluIG1zIHRoYXQgdGhlIGNhdGVnb3J5IGlzIGRpc2FibGVkIHVudGlsIG9yIDAgaWYgdGhlcmUncyBubyBhY3RpdmUgcmF0ZSBsaW1pdC4KICovCmZ1bmN0aW9uIGRpc2FibGVkVW50aWwobGltaXRzLCBjYXRlZ29yeSkgewogIHJldHVybiBsaW1pdHNbY2F0ZWdvcnldIHx8IGxpbWl0cy5hbGwgfHwgMDsKfQoKLyoqCiAqIENoZWNrcyBpZiBhIGNhdGVnb3J5IGlzIHJhdGUgbGltaXRlZAogKi8KZnVuY3Rpb24gaXNSYXRlTGltaXRlZChsaW1pdHMsIGNhdGVnb3J5LCBub3cgPSBEYXRlLm5vdygpKSB7CiAgcmV0dXJuIGRpc2FibGVkVW50aWwobGltaXRzLCBjYXRlZ29yeSkgPiBub3c7Cn0KCi8qKgogKiBVcGRhdGUgcmF0ZWxpbWl0cyBmcm9tIGluY29taW5nIGhlYWRlcnMuCiAqCiAqIEByZXR1cm4gdGhlIHVwZGF0ZWQgUmF0ZUxpbWl0cyBvYmplY3QuCiAqLwpmdW5jdGlvbiB1cGRhdGVSYXRlTGltaXRzKAogIGxpbWl0cywKICB7IHN0YXR1c0NvZGUsIGhlYWRlcnMgfSwKICBub3cgPSBEYXRlLm5vdygpLAopIHsKICBjb25zdCB1cGRhdGVkUmF0ZUxpbWl0cyA9IHsKICAgIC4uLmxpbWl0cywKICB9OwoKICAvLyAiVGhlIG5hbWUgaXMgY2FzZS1pbnNlbnNpdGl2ZS4iCiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hlYWRlcnMvZ2V0CiAgY29uc3QgcmF0ZUxpbWl0SGVhZGVyID0gaGVhZGVycyAmJiBoZWFkZXJzWyd4LXNlbnRyeS1yYXRlLWxpbWl0cyddOwogIGNvbnN0IHJldHJ5QWZ0ZXJIZWFkZXIgPSBoZWFkZXJzICYmIGhlYWRlcnNbJ3JldHJ5LWFmdGVyJ107CgogIGlmIChyYXRlTGltaXRIZWFkZXIpIHsKICAgIC8qKgogICAgICogcmF0ZSBsaW1pdCBoZWFkZXJzIGFyZSBvZiB0aGUgZm9ybQogICAgICogICAgIDxoZWFkZXI+LDxoZWFkZXI+LC4uCiAgICAgKiB3aGVyZSBlYWNoIDxoZWFkZXI+IGlzIG9mIHRoZSBmb3JtCiAgICAgKiAgICAgPHJldHJ5X2FmdGVyPjogPGNhdGVnb3JpZXM+OiA8c2NvcGU+OiA8cmVhc29uX2NvZGU+CiAgICAgKiB3aGVyZQogICAgICogICAgIDxyZXRyeV9hZnRlcj4gaXMgYSBkZWxheSBpbiBzZWNvbmRzCiAgICAgKiAgICAgPGNhdGVnb3JpZXM+IGlzIHRoZSBldmVudCB0eXBlKHMpIChlcnJvciwgdHJhbnNhY3Rpb24sIGV0YykgYmVpbmcgcmF0ZSBsaW1pdGVkIGFuZCBpcyBvZiB0aGUgZm9ybQogICAgICogICAgICAgICA8Y2F0ZWdvcnk+OzxjYXRlZ29yeT47Li4uCiAgICAgKiAgICAgPHNjb3BlPiBpcyB3aGF0J3MgYmVpbmcgbGltaXRlZCAob3JnLCBwcm9qZWN0LCBvciBrZXkpIC0gaWdub3JlZCBieSBTREsKICAgICAqICAgICA8cmVhc29uX2NvZGU+IGlzIGFuIGFyYml0cmFyeSBzdHJpbmcgbGlrZSAib3JnX3F1b3RhIiAtIGlnbm9yZWQgYnkgU0RLCiAgICAgKi8KICAgIGZvciAoY29uc3QgbGltaXQgb2YgcmF0ZUxpbWl0SGVhZGVyLnRyaW0oKS5zcGxpdCgnLCcpKSB7CiAgICAgIGNvbnN0IFtyZXRyeUFmdGVyLCBjYXRlZ29yaWVzXSA9IGxpbWl0LnNwbGl0KCc6JywgMik7CiAgICAgIGNvbnN0IGhlYWRlckRlbGF5ID0gcGFyc2VJbnQocmV0cnlBZnRlciwgMTApOwogICAgICBjb25zdCBkZWxheSA9ICghaXNOYU4oaGVhZGVyRGVsYXkpID8gaGVhZGVyRGVsYXkgOiA2MCkgKiAxMDAwOyAvLyA2MHNlYyBkZWZhdWx0CiAgICAgIGlmICghY2F0ZWdvcmllcykgewogICAgICAgIHVwZGF0ZWRSYXRlTGltaXRzLmFsbCA9IG5vdyArIGRlbGF5OwogICAgICB9IGVsc2UgewogICAgICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllcy5zcGxpdCgnOycpKSB7CiAgICAgICAgICB1cGRhdGVkUmF0ZUxpbWl0c1tjYXRlZ29yeV0gPSBub3cgKyBkZWxheTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9IGVsc2UgaWYgKHJldHJ5QWZ0ZXJIZWFkZXIpIHsKICAgIHVwZGF0ZWRSYXRlTGltaXRzLmFsbCA9IG5vdyArIHBhcnNlUmV0cnlBZnRlckhlYWRlcihyZXRyeUFmdGVySGVhZGVyLCBub3cpOwogIH0gZWxzZSBpZiAoc3RhdHVzQ29kZSA9PT0gNDI5KSB7CiAgICB1cGRhdGVkUmF0ZUxpbWl0cy5hbGwgPSBub3cgKyA2MCAqIDEwMDA7CiAgfQoKICByZXR1cm4gdXBkYXRlZFJhdGVMaW1pdHM7Cn0KCi8qKgogKiBBIG5vZGUuanMgd2F0Y2hkb2cgdGltZXIKICogQHBhcmFtIHBvbGxJbnRlcnZhbCBUaGUgaW50ZXJ2YWwgdGhhdCB3ZSBleHBlY3QgdG8gZ2V0IHBvbGxlZCBhdAogKiBAcGFyYW0gYW5yVGhyZXNob2xkIFRoZSB0aHJlc2hvbGQgZm9yIHdoZW4gd2UgY29uc2lkZXIgQU5SCiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gY2FsbCBmb3IgQU5SCiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGBwb2xsYCBhbmQgYGVuYWJsZWRgIGZ1bmN0aW9ucyB7QGxpbmsgV2F0Y2hkb2dSZXR1cm59CiAqLwpmdW5jdGlvbiB3YXRjaGRvZ1RpbWVyKAogIGNyZWF0ZVRpbWVyLAogIHBvbGxJbnRlcnZhbCwKICBhbnJUaHJlc2hvbGQsCiAgY2FsbGJhY2ssCikgewogIGNvbnN0IHRpbWVyID0gY3JlYXRlVGltZXIoKTsKICBsZXQgdHJpZ2dlcmVkID0gZmFsc2U7CiAgbGV0IGVuYWJsZWQgPSB0cnVlOwoKICBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICBjb25zdCBkaWZmTXMgPSB0aW1lci5nZXRUaW1lTXMoKTsKCiAgICBpZiAodHJpZ2dlcmVkID09PSBmYWxzZSAmJiBkaWZmTXMgPiBwb2xsSW50ZXJ2YWwgKyBhbnJUaHJlc2hvbGQpIHsKICAgICAgdHJpZ2dlcmVkID0gdHJ1ZTsKICAgICAgaWYgKGVuYWJsZWQpIHsKICAgICAgICBjYWxsYmFjaygpOwogICAgICB9CiAgICB9CgogICAgaWYgKGRpZmZNcyA8IHBvbGxJbnRlcnZhbCArIGFuclRocmVzaG9sZCkgewogICAgICB0cmlnZ2VyZWQgPSBmYWxzZTsKICAgIH0KICB9LCAyMCk7CgogIHJldHVybiB7CiAgICBwb2xsOiAoKSA9PiB7CiAgICAgIHRpbWVyLnJlc2V0KCk7CiAgICB9LAogICAgZW5hYmxlZDogKHN0YXRlKSA9PiB7CiAgICAgIGVuYWJsZWQgPSBzdGF0ZTsKICAgIH0sCiAgfTsKfQoKLy8gdHlwZXMgY29waWVkIGZyb20gaW5zcGVjdG9yLmQudHMKCi8qKgogKiBDb252ZXJ0cyBEZWJ1Z2dlci5DYWxsRnJhbWUgdG8gU2VudHJ5IFN0YWNrRnJhbWUKICovCmZ1bmN0aW9uIGNhbGxGcmFtZVRvU3RhY2tGcmFtZSgKICBmcmFtZSwKICB1cmwsCiAgZ2V0TW9kdWxlRnJvbUZpbGVuYW1lLAopIHsKICBjb25zdCBmaWxlbmFtZSA9IHVybCA/IHVybC5yZXBsYWNlKC9eZmlsZTpcL1wvLywgJycpIDogdW5kZWZpbmVkOwoKICAvLyBDYWxsRnJhbWUgcm93L2NvbCBhcmUgMCBiYXNlZCwgd2hlcmVhcyBTdGFja0ZyYW1lIGFyZSAxIGJhc2VkCiAgY29uc3QgY29sbm8gPSBmcmFtZS5sb2NhdGlvbi5jb2x1bW5OdW1iZXIgPyBmcmFtZS5sb2NhdGlvbi5jb2x1bW5OdW1iZXIgKyAxIDogdW5kZWZpbmVkOwogIGNvbnN0IGxpbmVubyA9IGZyYW1lLmxvY2F0aW9uLmxpbmVOdW1iZXIgPyBmcmFtZS5sb2NhdGlvbi5saW5lTnVtYmVyICsgMSA6IHVuZGVmaW5lZDsKCiAgcmV0dXJuIGRyb3BVbmRlZmluZWRLZXlzKHsKICAgIGZpbGVuYW1lLAogICAgbW9kdWxlOiBnZXRNb2R1bGVGcm9tRmlsZW5hbWUoZmlsZW5hbWUpLAogICAgZnVuY3Rpb246IGZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnPycsCiAgICBjb2xubywKICAgIGxpbmVubywKICAgIGluX2FwcDogZmlsZW5hbWUgPyBmaWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUpIDogdW5kZWZpbmVkLAogIH0pOwp9CgovKioKICogVGhpcyBzZXJ2ZXMgYXMgYSBidWlsZCB0aW1lIGZsYWcgdGhhdCB3aWxsIGJlIHRydWUgYnkgZGVmYXVsdCwgYnV0IGZhbHNlIGluIG5vbi1kZWJ1ZyBidWlsZHMgb3IgaWYgdXNlcnMgcmVwbGFjZSBgX19TRU5UUllfREVCVUdfX2AgaW4gdGhlaXIgZ2VuZXJhdGVkIGNvZGUuCiAqCiAqIEFUVEVOVElPTjogVGhpcyBjb25zdGFudCBtdXN0IG5ldmVyIGNyb3NzIHBhY2thZ2UgYm91bmRhcmllcyAoaS5lLiBiZSBleHBvcnRlZCkgdG8gZ3VhcmFudGVlIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIHRyZWUgc2hha2luZy4KICovCmNvbnN0IERFQlVHX0JVSUxEID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTsKCi8qKgogKiBDcmVhdGVzIGEgbmV3IGBTZXNzaW9uYCBvYmplY3QgYnkgc2V0dGluZyBjZXJ0YWluIGRlZmF1bHQgcGFyYW1ldGVycy4gSWYgb3B0aW9uYWwgQHBhcmFtIGNvbnRleHQKICogaXMgcGFzc2VkLCB0aGUgcGFzc2VkIHByb3BlcnRpZXMgYXJlIGFwcGxpZWQgdG8gdGhlIHNlc3Npb24gb2JqZWN0LgogKgogKiBAcGFyYW0gY29udGV4dCAob3B0aW9uYWwpIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhcHBsaWVkIHRvIHRoZSByZXR1cm5lZCBzZXNzaW9uIG9iamVjdAogKgogKiBAcmV0dXJucyBhIG5ldyBgU2Vzc2lvbmAgb2JqZWN0CiAqLwpmdW5jdGlvbiBtYWtlU2Vzc2lvbihjb250ZXh0KSB7CiAgLy8gQm90aCB0aW1lc3RhbXAgYW5kIHN0YXJ0ZWQgYXJlIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2guCiAgY29uc3Qgc3RhcnRpbmdUaW1lID0gdGltZXN0YW1wSW5TZWNvbmRzKCk7CgogIGNvbnN0IHNlc3Npb24gPSB7CiAgICBzaWQ6IHV1aWQ0KCksCiAgICBpbml0OiB0cnVlLAogICAgdGltZXN0YW1wOiBzdGFydGluZ1RpbWUsCiAgICBzdGFydGVkOiBzdGFydGluZ1RpbWUsCiAgICBkdXJhdGlvbjogMCwKICAgIHN0YXR1czogJ29rJywKICAgIGVycm9yczogMCwKICAgIGlnbm9yZUR1cmF0aW9uOiBmYWxzZSwKICAgIHRvSlNPTjogKCkgPT4gc2Vzc2lvblRvSlNPTihzZXNzaW9uKSwKICB9OwoKICBpZiAoY29udGV4dCkgewogICAgdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0KTsKICB9CgogIHJldHVybiBzZXNzaW9uOwp9CgovKioKICogVXBkYXRlcyBhIHNlc3Npb24gb2JqZWN0IHdpdGggdGhlIHByb3BlcnRpZXMgcGFzc2VkIGluIHRoZSBjb250ZXh0LgogKgogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBtdXRhdGVzIHRoZSBwYXNzZWQgb2JqZWN0IGFuZCByZXR1cm5zIHZvaWQuCiAqIChIYWQgdG8gZG8gdGhpcyBpbnN0ZWFkIG9mIHJldHVybmluZyBhIG5ldyBhbmQgdXBkYXRlZCBzZXNzaW9uIGJlY2F1c2UgY2xvc2luZyBhbmQgc2VuZGluZyBhIHNlc3Npb24KICogbWFrZXMgYW4gdXBkYXRlIHRvIHRoZSBzZXNzaW9uIGFmdGVyIGl0IHdhcyBwYXNzZWQgdG8gdGhlIHNlbmRpbmcgbG9naWMuCiAqIEBzZWUgQmFzZUNsaWVudC5jYXB0dXJlU2Vzc2lvbiApCiAqCiAqIEBwYXJhbSBzZXNzaW9uIHRoZSBgU2Vzc2lvbmAgdG8gdXBkYXRlCiAqIEBwYXJhbSBjb250ZXh0IHRoZSBgU2Vzc2lvbkNvbnRleHRgIGhvbGRpbmcgdGhlIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmUgdXBkYXRlZCBpbiBAcGFyYW0gc2Vzc2lvbgogKi8KLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHkKZnVuY3Rpb24gdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0ID0ge30pIHsKICBpZiAoY29udGV4dC51c2VyKSB7CiAgICBpZiAoIXNlc3Npb24uaXBBZGRyZXNzICYmIGNvbnRleHQudXNlci5pcF9hZGRyZXNzKSB7CiAgICAgIHNlc3Npb24uaXBBZGRyZXNzID0gY29udGV4dC51c2VyLmlwX2FkZHJlc3M7CiAgICB9CgogICAgaWYgKCFzZXNzaW9uLmRpZCAmJiAhY29udGV4dC5kaWQpIHsKICAgICAgc2Vzc2lvbi5kaWQgPSBjb250ZXh0LnVzZXIuaWQgfHwgY29udGV4dC51c2VyLmVtYWlsIHx8IGNvbnRleHQudXNlci51c2VybmFtZTsKICAgIH0KICB9CgogIHNlc3Npb24udGltZXN0YW1wID0gY29udGV4dC50aW1lc3RhbXAgfHwgdGltZXN0YW1wSW5TZWNvbmRzKCk7CgogIGlmIChjb250ZXh0LmFibm9ybWFsX21lY2hhbmlzbSkgewogICAgc2Vzc2lvbi5hYm5vcm1hbF9tZWNoYW5pc20gPSBjb250ZXh0LmFibm9ybWFsX21lY2hhbmlzbTsKICB9CgogIGlmIChjb250ZXh0Lmlnbm9yZUR1cmF0aW9uKSB7CiAgICBzZXNzaW9uLmlnbm9yZUR1cmF0aW9uID0gY29udGV4dC5pZ25vcmVEdXJhdGlvbjsKICB9CiAgaWYgKGNvbnRleHQuc2lkKSB7CiAgICAvLyBHb29kIGVub3VnaCB1dWlkIHZhbGlkYXRpb24uIOKAlCBLYW1pbAogICAgc2Vzc2lvbi5zaWQgPSBjb250ZXh0LnNpZC5sZW5ndGggPT09IDMyID8gY29udGV4dC5zaWQgOiB1dWlkNCgpOwogIH0KICBpZiAoY29udGV4dC5pbml0ICE9PSB1bmRlZmluZWQpIHsKICAgIHNlc3Npb24uaW5pdCA9IGNvbnRleHQuaW5pdDsKICB9CiAgaWYgKCFzZXNzaW9uLmRpZCAmJiBjb250ZXh0LmRpZCkgewogICAgc2Vzc2lvbi5kaWQgPSBgJHtjb250ZXh0LmRpZH1gOwogIH0KICBpZiAodHlwZW9mIGNvbnRleHQuc3RhcnRlZCA9PT0gJ251bWJlcicpIHsKICAgIHNlc3Npb24uc3RhcnRlZCA9IGNvbnRleHQuc3RhcnRlZDsKICB9CiAgaWYgKHNlc3Npb24uaWdub3JlRHVyYXRpb24pIHsKICAgIHNlc3Npb24uZHVyYXRpb24gPSB1bmRlZmluZWQ7CiAgfSBlbHNlIGlmICh0eXBlb2YgY29udGV4dC5kdXJhdGlvbiA9PT0gJ251bWJlcicpIHsKICAgIHNlc3Npb24uZHVyYXRpb24gPSBjb250ZXh0LmR1cmF0aW9uOwogIH0gZWxzZSB7CiAgICBjb25zdCBkdXJhdGlvbiA9IHNlc3Npb24udGltZXN0YW1wIC0gc2Vzc2lvbi5zdGFydGVkOwogICAgc2Vzc2lvbi5kdXJhdGlvbiA9IGR1cmF0aW9uID49IDAgPyBkdXJhdGlvbiA6IDA7CiAgfQogIGlmIChjb250ZXh0LnJlbGVhc2UpIHsKICAgIHNlc3Npb24ucmVsZWFzZSA9IGNvbnRleHQucmVsZWFzZTsKICB9CiAgaWYgKGNvbnRleHQuZW52aXJvbm1lbnQpIHsKICAgIHNlc3Npb24uZW52aXJvbm1lbnQgPSBjb250ZXh0LmVudmlyb25tZW50OwogIH0KICBpZiAoIXNlc3Npb24uaXBBZGRyZXNzICYmIGNvbnRleHQuaXBBZGRyZXNzKSB7CiAgICBzZXNzaW9uLmlwQWRkcmVzcyA9IGNvbnRleHQuaXBBZGRyZXNzOwogIH0KICBpZiAoIXNlc3Npb24udXNlckFnZW50ICYmIGNvbnRleHQudXNlckFnZW50KSB7CiAgICBzZXNzaW9uLnVzZXJBZ2VudCA9IGNvbnRleHQudXNlckFnZW50OwogIH0KICBpZiAodHlwZW9mIGNvbnRleHQuZXJyb3JzID09PSAnbnVtYmVyJykgewogICAgc2Vzc2lvbi5lcnJvcnMgPSBjb250ZXh0LmVycm9yczsKICB9CiAgaWYgKGNvbnRleHQuc3RhdHVzKSB7CiAgICBzZXNzaW9uLnN0YXR1cyA9IGNvbnRleHQuc3RhdHVzOwogIH0KfQoKLyoqCiAqIFNlcmlhbGl6ZXMgYSBwYXNzZWQgc2Vzc2lvbiBvYmplY3QgdG8gYSBKU09OIG9iamVjdCB3aXRoIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHN0cnVjdHVyZS4KICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgU2VudHJ5IGJhY2tlbmQgcmVxdWlyZXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgc2NoZW1hIG9mIGEgc2Vzc2lvbgogKiB0aGFuIHRoZSBvbmUgdGhlIEpTIFNES3MgdXNlIGludGVybmFsbHkuCiAqCiAqIEBwYXJhbSBzZXNzaW9uIHRoZSBzZXNzaW9uIHRvIGJlIGNvbnZlcnRlZAogKgogKiBAcmV0dXJucyBhIEpTT04gb2JqZWN0IG9mIHRoZSBwYXNzZWQgc2Vzc2lvbgogKi8KZnVuY3Rpb24gc2Vzc2lvblRvSlNPTihzZXNzaW9uKSB7CiAgcmV0dXJuIGRyb3BVbmRlZmluZWRLZXlzKHsKICAgIHNpZDogYCR7c2Vzc2lvbi5zaWR9YCwKICAgIGluaXQ6IHNlc3Npb24uaW5pdCwKICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHNlYyBpcyBjb252ZXJ0ZWQgdG8gbXMgZm9yIGRhdGUgY29uc3RydWN0b3IKICAgIHN0YXJ0ZWQ6IG5ldyBEYXRlKHNlc3Npb24uc3RhcnRlZCAqIDEwMDApLnRvSVNPU3RyaW5nKCksCiAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKHNlc3Npb24udGltZXN0YW1wICogMTAwMCkudG9JU09TdHJpbmcoKSwKICAgIHN0YXR1czogc2Vzc2lvbi5zdGF0dXMsCiAgICBlcnJvcnM6IHNlc3Npb24uZXJyb3JzLAogICAgZGlkOiB0eXBlb2Ygc2Vzc2lvbi5kaWQgPT09ICdudW1iZXInIHx8IHR5cGVvZiBzZXNzaW9uLmRpZCA9PT0gJ3N0cmluZycgPyBgJHtzZXNzaW9uLmRpZH1gIDogdW5kZWZpbmVkLAogICAgZHVyYXRpb246IHNlc3Npb24uZHVyYXRpb24sCiAgICBhYm5vcm1hbF9tZWNoYW5pc206IHNlc3Npb24uYWJub3JtYWxfbWVjaGFuaXNtLAogICAgYXR0cnM6IHsKICAgICAgcmVsZWFzZTogc2Vzc2lvbi5yZWxlYXNlLAogICAgICBlbnZpcm9ubWVudDogc2Vzc2lvbi5lbnZpcm9ubWVudCwKICAgICAgaXBfYWRkcmVzczogc2Vzc2lvbi5pcEFkZHJlc3MsCiAgICAgIHVzZXJfYWdlbnQ6IHNlc3Npb24udXNlckFnZW50LAogICAgfSwKICB9KTsKfQoKLyoqCiAqIEFwcGx5IFNka0luZm8gKG5hbWUsIHZlcnNpb24sIHBhY2thZ2VzLCBpbnRlZ3JhdGlvbnMpIHRvIHRoZSBjb3JyZXNwb25kaW5nIGV2ZW50IGtleS4KICogTWVyZ2Ugd2l0aCBleGlzdGluZyBkYXRhIGlmIGFueS4KICoqLwpmdW5jdGlvbiBlbmhhbmNlRXZlbnRXaXRoU2RrSW5mbyhldmVudCwgc2RrSW5mbykgewogIGlmICghc2RrSW5mbykgewogICAgcmV0dXJuIGV2ZW50OwogIH0KICBldmVudC5zZGsgPSBldmVudC5zZGsgfHwge307CiAgZXZlbnQuc2RrLm5hbWUgPSBldmVudC5zZGsubmFtZSB8fCBzZGtJbmZvLm5hbWU7CiAgZXZlbnQuc2RrLnZlcnNpb24gPSBldmVudC5zZGsudmVyc2lvbiB8fCBzZGtJbmZvLnZlcnNpb247CiAgZXZlbnQuc2RrLmludGVncmF0aW9ucyA9IFsuLi4oZXZlbnQuc2RrLmludGVncmF0aW9ucyB8fCBbXSksIC4uLihzZGtJbmZvLmludGVncmF0aW9ucyB8fCBbXSldOwogIGV2ZW50LnNkay5wYWNrYWdlcyA9IFsuLi4oZXZlbnQuc2RrLnBhY2thZ2VzIHx8IFtdKSwgLi4uKHNka0luZm8ucGFja2FnZXMgfHwgW10pXTsKICByZXR1cm4gZXZlbnQ7Cn0KCi8qKiBDcmVhdGVzIGFuIGVudmVsb3BlIGZyb20gYSBTZXNzaW9uICovCmZ1bmN0aW9uIGNyZWF0ZVNlc3Npb25FbnZlbG9wZSgKICBzZXNzaW9uLAogIGRzbiwKICBtZXRhZGF0YSwKICB0dW5uZWwsCikgewogIGNvbnN0IHNka0luZm8gPSBnZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyKG1ldGFkYXRhKTsKICBjb25zdCBlbnZlbG9wZUhlYWRlcnMgPSB7CiAgICBzZW50X2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksCiAgICAuLi4oc2RrSW5mbyAmJiB7IHNkazogc2RrSW5mbyB9KSwKICAgIC4uLighIXR1bm5lbCAmJiBkc24gJiYgeyBkc246IGRzblRvU3RyaW5nKGRzbikgfSksCiAgfTsKCiAgY29uc3QgZW52ZWxvcGVJdGVtID0KICAgICdhZ2dyZWdhdGVzJyBpbiBzZXNzaW9uID8gW3sgdHlwZTogJ3Nlc3Npb25zJyB9LCBzZXNzaW9uXSA6IFt7IHR5cGU6ICdzZXNzaW9uJyB9LCBzZXNzaW9uLnRvSlNPTigpXTsKCiAgcmV0dXJuIGNyZWF0ZUVudmVsb3BlKGVudmVsb3BlSGVhZGVycywgW2VudmVsb3BlSXRlbV0pOwp9CgovKioKICogQ3JlYXRlIGFuIEVudmVsb3BlIGZyb20gYW4gZXZlbnQuCiAqLwpmdW5jdGlvbiBjcmVhdGVFdmVudEVudmVsb3BlKAogIGV2ZW50LAogIGRzbiwKICBtZXRhZGF0YSwKICB0dW5uZWwsCikgewogIGNvbnN0IHNka0luZm8gPSBnZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyKG1ldGFkYXRhKTsKCiAgLyoKICAgIE5vdGU6IER1ZSB0byBUUywgZXZlbnQudHlwZSBtYXkgYmUgYHJlcGxheV9ldmVudGAsIHRoZW9yZXRpY2FsbHkuCiAgICBJbiBwcmFjdGljZSwgd2UgbmV2ZXIgY2FsbCBgY3JlYXRlRXZlbnRFbnZlbG9wZWAgd2l0aCBgcmVwbGF5X2V2ZW50YCB0eXBlLAogICAgYW5kIHdlJ2QgaGF2ZSB0byBhZGp1dCBhIGxvb290IG9mIHR5cGVzIHRvIG1ha2UgdGhpcyB3b3JrIHByb3Blcmx5LgogICAgV2Ugd2FudCB0byBhdm9pZCBjYXN0aW5nIHRoaXMgYXJvdW5kLCBhcyB0aGF0IGNvdWxkIGxlYWQgdG8gYnVncyAoZS5nLiB3aGVuIHdlIGFkZCBhbm90aGVyIHR5cGUpCiAgICBTbyB0aGUgc2FmZSBjaG9pY2UgaXMgdG8gcmVhbGx5IGd1YXJkIGFnYWluc3QgdGhlIHJlcGxheV9ldmVudCB0eXBlIGhlcmUuCiAgKi8KICBjb25zdCBldmVudFR5cGUgPSBldmVudC50eXBlICYmIGV2ZW50LnR5cGUgIT09ICdyZXBsYXlfZXZlbnQnID8gZXZlbnQudHlwZSA6ICdldmVudCc7CgogIGVuaGFuY2VFdmVudFdpdGhTZGtJbmZvKGV2ZW50LCBtZXRhZGF0YSAmJiBtZXRhZGF0YS5zZGspOwoKICBjb25zdCBlbnZlbG9wZUhlYWRlcnMgPSBjcmVhdGVFdmVudEVudmVsb3BlSGVhZGVycyhldmVudCwgc2RrSW5mbywgdHVubmVsLCBkc24pOwoKICAvLyBQcmV2ZW50IHRoaXMgZGF0YSAod2hpY2gsIGlmIGl0IGV4aXN0cywgd2FzIHVzZWQgaW4gZWFybGllciBzdGVwcyBpbiB0aGUgcHJvY2Vzc2luZyBwaXBlbGluZSkgZnJvbSBiZWluZyBzZW50IHRvCiAgLy8gc2VudHJ5LiAoTm90ZTogT3VyIHVzZSBvZiB0aGlzIHByb3BlcnR5IGNvbWVzIGFuZCBnb2VzIHdpdGggd2hhdGV2ZXIgd2UgbWlnaHQgYmUgZGVidWdnaW5nLCB3aGF0ZXZlciBoYWNrcyB3ZSBtYXkKICAvLyBoYXZlIHRlbXBvcmFyaWx5IGFkZGVkLCBldGMuIEV2ZW4gaWYgd2UgZG9uJ3QgaGFwcGVuIHRvIGJlIHVzaW5nIGl0IGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwgbGV0J3Mgbm90IGdldCByaWQKICAvLyBvZiB0aGlzIGBkZWxldGVgLCBsZXN0IHdlIG1pc3MgcHV0dGluZyBpdCBiYWNrIGluIHRoZSBuZXh0IHRpbWUgdGhlIHByb3BlcnR5IGlzIGluIHVzZS4pCiAgZGVsZXRlIGV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YTsKCiAgY29uc3QgZXZlbnRJdGVtID0gW3sgdHlwZTogZXZlbnRUeXBlIH0sIGV2ZW50XTsKICByZXR1cm4gY3JlYXRlRW52ZWxvcGUoZW52ZWxvcGVIZWFkZXJzLCBbZXZlbnRJdGVtXSk7Cn0KCmNvbnN0IFNFTlRSWV9BUElfVkVSU0lPTiA9ICc3JzsKCi8qKiBSZXR1cm5zIHRoZSBwcmVmaXggdG8gY29uc3RydWN0IFNlbnRyeSBpbmdlc3Rpb24gQVBJIGVuZHBvaW50cy4gKi8KZnVuY3Rpb24gZ2V0QmFzZUFwaUVuZHBvaW50KGRzbikgewogIGNvbnN0IHByb3RvY29sID0gZHNuLnByb3RvY29sID8gYCR7ZHNuLnByb3RvY29sfTpgIDogJyc7CiAgY29uc3QgcG9ydCA9IGRzbi5wb3J0ID8gYDoke2Rzbi5wb3J0fWAgOiAnJzsKICByZXR1cm4gYCR7cHJvdG9jb2x9Ly8ke2Rzbi5ob3N0fSR7cG9ydH0ke2Rzbi5wYXRoID8gYC8ke2Rzbi5wYXRofWAgOiAnJ30vYXBpL2A7Cn0KCi8qKiBSZXR1cm5zIHRoZSBpbmdlc3QgQVBJIGVuZHBvaW50IGZvciB0YXJnZXQuICovCmZ1bmN0aW9uIF9nZXRJbmdlc3RFbmRwb2ludChkc24pIHsKICByZXR1cm4gYCR7Z2V0QmFzZUFwaUVuZHBvaW50KGRzbil9JHtkc24ucHJvamVjdElkfS9lbnZlbG9wZS9gOwp9CgovKiogUmV0dXJucyBhIFVSTC1lbmNvZGVkIHN0cmluZyB3aXRoIGF1dGggY29uZmlnIHN1aXRhYmxlIGZvciBhIHF1ZXJ5IHN0cmluZy4gKi8KZnVuY3Rpb24gX2VuY29kZWRBdXRoKGRzbiwgc2RrSW5mbykgewogIHJldHVybiB1cmxFbmNvZGUoewogICAgLy8gV2Ugc2VuZCBvbmx5IHRoZSBtaW5pbXVtIHNldCBvZiByZXF1aXJlZCBpbmZvcm1hdGlvbi4gU2VlCiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8yNTcyLgogICAgc2VudHJ5X2tleTogZHNuLnB1YmxpY0tleSwKICAgIHNlbnRyeV92ZXJzaW9uOiBTRU5UUllfQVBJX1ZFUlNJT04sCiAgICAuLi4oc2RrSW5mbyAmJiB7IHNlbnRyeV9jbGllbnQ6IGAke3Nka0luZm8ubmFtZX0vJHtzZGtJbmZvLnZlcnNpb259YCB9KSwKICB9KTsKfQoKLyoqCiAqIFJldHVybnMgdGhlIGVudmVsb3BlIGVuZHBvaW50IFVSTCB3aXRoIGF1dGggaW4gdGhlIHF1ZXJ5IHN0cmluZy4KICoKICogU2VuZGluZyBhdXRoIGFzIHBhcnQgb2YgdGhlIHF1ZXJ5IHN0cmluZyBhbmQgbm90IGFzIGN1c3RvbSBIVFRQIGhlYWRlcnMgYXZvaWRzIENPUlMgcHJlZmxpZ2h0IHJlcXVlc3RzLgogKi8KZnVuY3Rpb24gZ2V0RW52ZWxvcGVFbmRwb2ludFdpdGhVcmxFbmNvZGVkQXV0aCgKICBkc24sCiAgLy8gVE9ETyAodjgpOiBSZW1vdmUgYHR1bm5lbE9yT3B0aW9uc2AgaW4gZmF2b3Igb2YgYG9wdGlvbnNgLCBhbmQgdXNlIHRoZSBzdWJzdGl0dXRlIGNvZGUgYmVsb3cKICAvLyBvcHRpb25zOiBDbGllbnRPcHRpb25zID0ge30gYXMgQ2xpZW50T3B0aW9ucywKICB0dW5uZWxPck9wdGlvbnMgPSB7fSAsCikgewogIC8vIFRPRE8gKHY4KTogVXNlIHRoaXMgY29kZSBpbnN0ZWFkCiAgLy8gY29uc3QgeyB0dW5uZWwsIF9tZXRhZGF0YSA9IHt9IH0gPSBvcHRpb25zOwogIC8vIHJldHVybiB0dW5uZWwgPyB0dW5uZWwgOiBgJHtfZ2V0SW5nZXN0RW5kcG9pbnQoZHNuKX0/JHtfZW5jb2RlZEF1dGgoZHNuLCBfbWV0YWRhdGEuc2RrKX1gOwoKICBjb25zdCB0dW5uZWwgPSB0eXBlb2YgdHVubmVsT3JPcHRpb25zID09PSAnc3RyaW5nJyA/IHR1bm5lbE9yT3B0aW9ucyA6IHR1bm5lbE9yT3B0aW9ucy50dW5uZWw7CiAgY29uc3Qgc2RrSW5mbyA9CiAgICB0eXBlb2YgdHVubmVsT3JPcHRpb25zID09PSAnc3RyaW5nJyB8fCAhdHVubmVsT3JPcHRpb25zLl9tZXRhZGF0YSA/IHVuZGVmaW5lZCA6IHR1bm5lbE9yT3B0aW9ucy5fbWV0YWRhdGEuc2RrOwoKICByZXR1cm4gdHVubmVsID8gdHVubmVsIDogYCR7X2dldEluZ2VzdEVuZHBvaW50KGRzbil9PyR7X2VuY29kZWRBdXRoKGRzbiwgc2RrSW5mbyl9YDsKfQoKY29uc3QgREVGQVVMVF9UUkFOU1BPUlRfQlVGRkVSX1NJWkUgPSAzMDsKCi8qKgogKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIGEgU2VudHJ5IGBUcmFuc3BvcnRgCiAqCiAqIEBwYXJhbSBvcHRpb25zCiAqIEBwYXJhbSBtYWtlUmVxdWVzdAogKi8KZnVuY3Rpb24gY3JlYXRlVHJhbnNwb3J0KAogIG9wdGlvbnMsCiAgbWFrZVJlcXVlc3QsCiAgYnVmZmVyID0gbWFrZVByb21pc2VCdWZmZXIoCiAgICBvcHRpb25zLmJ1ZmZlclNpemUgfHwgREVGQVVMVF9UUkFOU1BPUlRfQlVGRkVSX1NJWkUsCiAgKSwKKSB7CiAgbGV0IHJhdGVMaW1pdHMgPSB7fTsKICBjb25zdCBmbHVzaCA9ICh0aW1lb3V0KSA9PiBidWZmZXIuZHJhaW4odGltZW91dCk7CgogIGZ1bmN0aW9uIHNlbmQoZW52ZWxvcGUpIHsKICAgIGNvbnN0IGZpbHRlcmVkRW52ZWxvcGVJdGVtcyA9IFtdOwoKICAgIC8vIERyb3AgcmF0ZSBsaW1pdGVkIGl0ZW1zIGZyb20gZW52ZWxvcGUKICAgIGZvckVhY2hFbnZlbG9wZUl0ZW0oZW52ZWxvcGUsIChpdGVtLCB0eXBlKSA9PiB7CiAgICAgIGNvbnN0IGVudmVsb3BlSXRlbURhdGFDYXRlZ29yeSA9IGVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSh0eXBlKTsKICAgICAgaWYgKGlzUmF0ZUxpbWl0ZWQocmF0ZUxpbWl0cywgZW52ZWxvcGVJdGVtRGF0YUNhdGVnb3J5KSkgewogICAgICAgIGNvbnN0IGV2ZW50ID0gZ2V0RXZlbnRGb3JFbnZlbG9wZUl0ZW0oaXRlbSwgdHlwZSk7CiAgICAgICAgb3B0aW9ucy5yZWNvcmREcm9wcGVkRXZlbnQoJ3JhdGVsaW1pdF9iYWNrb2ZmJywgZW52ZWxvcGVJdGVtRGF0YUNhdGVnb3J5LCBldmVudCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZmlsdGVyZWRFbnZlbG9wZUl0ZW1zLnB1c2goaXRlbSk7CiAgICAgIH0KICAgIH0pOwoKICAgIC8vIFNraXAgc2VuZGluZyBpZiBlbnZlbG9wZSBpcyBlbXB0eSBhZnRlciBmaWx0ZXJpbmcgb3V0IHJhdGUgbGltaXRlZCBldmVudHMKICAgIGlmIChmaWx0ZXJlZEVudmVsb3BlSXRlbXMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiByZXNvbHZlZFN5bmNQcm9taXNlKCk7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkKICAgIGNvbnN0IGZpbHRlcmVkRW52ZWxvcGUgPSBjcmVhdGVFbnZlbG9wZShlbnZlbG9wZVswXSwgZmlsdGVyZWRFbnZlbG9wZUl0ZW1zICk7CgogICAgLy8gQ3JlYXRlcyBjbGllbnQgcmVwb3J0IGZvciBlYWNoIGl0ZW0gaW4gYW4gZW52ZWxvcGUKICAgIGNvbnN0IHJlY29yZEVudmVsb3BlTG9zcyA9IChyZWFzb24pID0+IHsKICAgICAgZm9yRWFjaEVudmVsb3BlSXRlbShmaWx0ZXJlZEVudmVsb3BlLCAoaXRlbSwgdHlwZSkgPT4gewogICAgICAgIGNvbnN0IGV2ZW50ID0gZ2V0RXZlbnRGb3JFbnZlbG9wZUl0ZW0oaXRlbSwgdHlwZSk7CiAgICAgICAgb3B0aW9ucy5yZWNvcmREcm9wcGVkRXZlbnQocmVhc29uLCBlbnZlbG9wZUl0ZW1UeXBlVG9EYXRhQ2F0ZWdvcnkodHlwZSksIGV2ZW50KTsKICAgICAgfSk7CiAgICB9OwoKICAgIGNvbnN0IHJlcXVlc3RUYXNrID0gKCkgPT4KICAgICAgbWFrZVJlcXVlc3QoeyBib2R5OiBzZXJpYWxpemVFbnZlbG9wZShmaWx0ZXJlZEVudmVsb3BlLCBvcHRpb25zLnRleHRFbmNvZGVyKSB9KS50aGVuKAogICAgICAgIHJlc3BvbnNlID0+IHsKICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gdGhyb3cgb24gTk9LIHJlc3BvbnNlcywgYnV0IHdlIHdhbnQgdG8gYXQgbGVhc3QgbG9nIHRoZW0KICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9PSB1bmRlZmluZWQgJiYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgPCAyMDAgfHwgcmVzcG9uc2Uuc3RhdHVzQ29kZSA+PSAzMDApKSB7CiAgICAgICAgICAgIERFQlVHX0JVSUxEICYmIGxvZ2dlci53YXJuKGBTZW50cnkgcmVzcG9uZGVkIHdpdGggc3RhdHVzIGNvZGUgJHtyZXNwb25zZS5zdGF0dXNDb2RlfSB0byBzZW50IGV2ZW50LmApOwogICAgICAgICAgfQoKICAgICAgICAgIHJhdGVMaW1pdHMgPSB1cGRhdGVSYXRlTGltaXRzKHJhdGVMaW1pdHMsIHJlc3BvbnNlKTsKICAgICAgICAgIHJldHVybiByZXNwb25zZTsKICAgICAgICB9LAogICAgICAgIGVycm9yID0+IHsKICAgICAgICAgIHJlY29yZEVudmVsb3BlTG9zcygnbmV0d29ya19lcnJvcicpOwogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgfSwKICAgICAgKTsKCiAgICByZXR1cm4gYnVmZmVyLmFkZChyZXF1ZXN0VGFzaykudGhlbigKICAgICAgcmVzdWx0ID0+IHJlc3VsdCwKICAgICAgZXJyb3IgPT4gewogICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFNlbnRyeUVycm9yKSB7CiAgICAgICAgICBERUJVR19CVUlMRCAmJiBsb2dnZXIuZXJyb3IoJ1NraXBwZWQgc2VuZGluZyBldmVudCBiZWNhdXNlIGJ1ZmZlciBpcyBmdWxsLicpOwogICAgICAgICAgcmVjb3JkRW52ZWxvcGVMb3NzKCdxdWV1ZV9vdmVyZmxvdycpOwogICAgICAgICAgcmV0dXJuIHJlc29sdmVkU3luY1Byb21pc2UoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgfQogICAgICB9LAogICAgKTsKICB9CgogIC8vIFdlIHVzZSB0aGlzIHRvIGlkZW50aWZpZnkgaWYgdGhlIHRyYW5zcG9ydCBpcyB0aGUgYmFzZSB0cmFuc3BvcnQKICAvLyBUT0RPICh2OCk6IFJlbW92ZSB0aGlzIGFnYWluIGFzIHdlJ2xsIG5vIGxvbmdlciBuZWVkIGl0CiAgc2VuZC5fX3NlbnRyeV9fYmFzZVRyYW5zcG9ydF9fID0gdHJ1ZTsKCiAgcmV0dXJuIHsKICAgIHNlbmQsCiAgICBmbHVzaCwKICB9Owp9CgpmdW5jdGlvbiBnZXRFdmVudEZvckVudmVsb3BlSXRlbShpdGVtLCB0eXBlKSB7CiAgaWYgKHR5cGUgIT09ICdldmVudCcgJiYgdHlwZSAhPT0gJ3RyYW5zYWN0aW9uJykgewogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CgogIHJldHVybiBBcnJheS5pc0FycmF5KGl0ZW0pID8gKGl0ZW0gKVsxXSA6IHVuZGVmaW5lZDsKfQoKLyoqIG5vcm1hbGl6ZXMgV2luZG93cyBwYXRocyAqLwpmdW5jdGlvbiBub3JtYWxpemVXaW5kb3dzUGF0aChwYXRoKSB7CiAgcmV0dXJuIHBhdGgKICAgIC5yZXBsYWNlKC9eW0EtWl06LywgJycpIC8vIHJlbW92ZSBXaW5kb3dzLXN0eWxlIHByZWZpeAogICAgLnJlcGxhY2UoL1xcL2csICcvJyk7IC8vIHJlcGxhY2UgYWxsIGBcYCBpbnN0YW5jZXMgd2l0aCBgL2AKfQoKLyoqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgdGhlIG1vZHVsZSBuYW1lIGZyb20gYSBmaWxlbmFtZSAqLwpmdW5jdGlvbiBjcmVhdGVHZXRNb2R1bGVGcm9tRmlsZW5hbWUoCiAgYmFzZVBhdGggPSBwcm9jZXNzLmFyZ3ZbMV0gPyBkaXJuYW1lKHByb2Nlc3MuYXJndlsxXSkgOiBwcm9jZXNzLmN3ZCgpLAogIGlzV2luZG93cyA9IHNlcCA9PT0gJ1xcJywKKSB7CiAgY29uc3Qgbm9ybWFsaXplZEJhc2UgPSBpc1dpbmRvd3MgPyBub3JtYWxpemVXaW5kb3dzUGF0aChiYXNlUGF0aCkgOiBiYXNlUGF0aDsKCiAgcmV0dXJuIChmaWxlbmFtZSkgPT4gewogICAgaWYgKCFmaWxlbmFtZSkgewogICAgICByZXR1cm47CiAgICB9CgogICAgY29uc3Qgbm9ybWFsaXplZEZpbGVuYW1lID0gaXNXaW5kb3dzID8gbm9ybWFsaXplV2luZG93c1BhdGgoZmlsZW5hbWUpIDogZmlsZW5hbWU7CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdAogICAgbGV0IHsgZGlyLCBiYXNlOiBmaWxlLCBleHQgfSA9IHBvc2l4LnBhcnNlKG5vcm1hbGl6ZWRGaWxlbmFtZSk7CgogICAgaWYgKGV4dCA9PT0gJy5qcycgfHwgZXh0ID09PSAnLm1qcycgfHwgZXh0ID09PSAnLmNqcycpIHsKICAgICAgZmlsZSA9IGZpbGUuc2xpY2UoMCwgZXh0Lmxlbmd0aCAqIC0xKTsKICAgIH0KCiAgICBpZiAoIWRpcikgewogICAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXIKICAgICAgZGlyID0gJy4nOwogICAgfQoKICAgIGNvbnN0IG4gPSBkaXIubGFzdEluZGV4T2YoJy9ub2RlX21vZHVsZXMnKTsKICAgIGlmIChuID4gLTEpIHsKICAgICAgcmV0dXJuIGAke2Rpci5zbGljZShuICsgMTQpLnJlcGxhY2UoL1wvL2csICcuJyl9OiR7ZmlsZX1gOwogICAgfQoKICAgIC8vIExldCdzIHNlZSBpZiBpdCdzIGEgcGFydCBvZiB0aGUgbWFpbiBtb2R1bGUKICAgIC8vIFRvIGJlIGEgcGFydCBvZiBtYWluIG1vZHVsZSwgaXQgaGFzIHRvIHNoYXJlIHRoZSBzYW1lIGJhc2UKICAgIGlmIChkaXIuc3RhcnRzV2l0aChub3JtYWxpemVkQmFzZSkpIHsKICAgICAgbGV0IG1vZHVsZU5hbWUgPSBkaXIuc2xpY2Uobm9ybWFsaXplZEJhc2UubGVuZ3RoICsgMSkucmVwbGFjZSgvXC8vZywgJy4nKTsKCiAgICAgIGlmIChtb2R1bGVOYW1lKSB7CiAgICAgICAgbW9kdWxlTmFtZSArPSAnOic7CiAgICAgIH0KICAgICAgbW9kdWxlTmFtZSArPSBmaWxlOwoKICAgICAgcmV0dXJuIG1vZHVsZU5hbWU7CiAgICB9CgogICAgcmV0dXJuIGZpbGU7CiAgfTsKfQoKZnVuY3Rpb24gX251bGxpc2hDb2FsZXNjZSQyKGxocywgcmhzRm4pIHsgaWYgKGxocyAhPSBudWxsKSB7IHJldHVybiBsaHM7IH0gZWxzZSB7IHJldHVybiByaHNGbigpOyB9IH0vKioKICogVGhpcyBjb2RlIHdhcyBvcmlnaW5hbGx5IGZvcmtlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9Ub29UYWxsTmF0ZS9wcm94eS1hZ2VudHMvdHJlZS9iMTMzMjk1ZmQxNmY2NDc1NTc4YjZiMTViZDliNGUzM2VjYjBkMGI3CiAqIFdpdGggdGhlIGZvbGxvd2luZyBsaWNlbmNlOgogKgogKiAoVGhlIE1JVCBMaWNlbnNlKQogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTMgTmF0aGFuIFJhamxpY2ggPG5hdGhhbkB0b290YWxsbmF0ZS5uZXQ+KgogKgogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCiAqICdTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAogKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCiAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoqCiAqCiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCiAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLioKICoKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCiAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgogKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCiAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCiAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCiAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCiAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogKi8KCmNvbnN0IElOVEVSTkFMID0gU3ltYm9sKCdBZ2VudEJhc2VJbnRlcm5hbFN0YXRlJyk7CgpjbGFzcyBBZ2VudCBleHRlbmRzIGh0dHAuQWdlbnQgewoKICAvLyBTZXQgYnkgYGh0dHAuQWdlbnRgIC0gbWlzc2luZyBmcm9tIGBAdHlwZXMvbm9kZWAKCiAgY29uc3RydWN0b3Iob3B0cykgewogICAgc3VwZXIob3B0cyk7CiAgICB0aGlzW0lOVEVSTkFMXSA9IHt9OwogIH0KCiAgLyoqCiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhbiBgaHR0cGAgb3IgYGh0dHBzYCByZXF1ZXN0LgogICAqLwogIGlzU2VjdXJlRW5kcG9pbnQob3B0aW9ucykgewogICAgaWYgKG9wdGlvbnMpIHsKICAgICAgLy8gRmlyc3QgY2hlY2sgdGhlIGBzZWN1cmVFbmRwb2ludGAgcHJvcGVydHkgZXhwbGljaXRseSwgc2luY2UgdGhpcwogICAgICAvLyBtZWFucyB0aGF0IGEgcGFyZW50IGBBZ2VudGAgaXMgInBhc3NpbmcgdGhyb3VnaCIgdG8gdGhpcyBpbnN0YW5jZS4KICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcwogICAgICBpZiAodHlwZW9mIChvcHRpb25zICkuc2VjdXJlRW5kcG9pbnQgPT09ICdib29sZWFuJykgewogICAgICAgIHJldHVybiBvcHRpb25zLnNlY3VyZUVuZHBvaW50OwogICAgICB9CgogICAgICAvLyBJZiBubyBleHBsaWNpdCBgc2VjdXJlYCBlbmRwb2ludCwgY2hlY2sgaWYgYHByb3RvY29sYCBwcm9wZXJ0eSBpcwogICAgICAvLyBzZXQuIFRoaXMgd2lsbCB1c3VhbGx5IGJlIHRoZSBjYXNlIHNpbmNlIHVzaW5nIGEgZnVsbCBzdHJpbmcgVVJMCiAgICAgIC8vIG9yIGBVUkxgIGluc3RhbmNlIHNob3VsZCBiZSB0aGUgbW9zdCBjb21tb24gdXNhZ2UuCiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wcm90b2NvbCA9PT0gJ3N0cmluZycpIHsKICAgICAgICByZXR1cm4gb3B0aW9ucy5wcm90b2NvbCA9PT0gJ2h0dHBzOic7CiAgICAgIH0KICAgIH0KCiAgICAvLyBGaW5hbGx5LCBpZiBubyBgcHJvdG9jb2xgIHByb3BlcnR5IHdhcyBzZXQsIHRoZW4gZmFsbCBiYWNrIHRvCiAgICAvLyBjaGVja2luZyB0aGUgc3RhY2sgdHJhY2Ugb2YgdGhlIGN1cnJlbnQgY2FsbCBzdGFjaywgYW5kIHRyeSB0bwogICAgLy8gZGV0ZWN0IHRoZSAiaHR0cHMiIG1vZHVsZS4KICAgIGNvbnN0IHsgc3RhY2sgfSA9IG5ldyBFcnJvcigpOwogICAgaWYgKHR5cGVvZiBzdGFjayAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBzdGFjay5zcGxpdCgnXG4nKS5zb21lKGwgPT4gbC5pbmRleE9mKCcoaHR0cHMuanM6JykgIT09IC0xIHx8IGwuaW5kZXhPZignbm9kZTpodHRwczonKSAhPT0gLTEpOwogIH0KCiAgY3JlYXRlU29ja2V0KHJlcSwgb3B0aW9ucywgY2IpIHsKICAgIGNvbnN0IGNvbm5lY3RPcHRzID0gewogICAgICAuLi5vcHRpb25zLAogICAgICBzZWN1cmVFbmRwb2ludDogdGhpcy5pc1NlY3VyZUVuZHBvaW50KG9wdGlvbnMpLAogICAgfTsKICAgIFByb21pc2UucmVzb2x2ZSgpCiAgICAgIC50aGVuKCgpID0+IHRoaXMuY29ubmVjdChyZXEsIGNvbm5lY3RPcHRzKSkKICAgICAgLnRoZW4oc29ja2V0ID0+IHsKICAgICAgICBpZiAoc29ja2V0IGluc3RhbmNlb2YgaHR0cC5BZ2VudCkgewogICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgYWRkUmVxdWVzdCgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWAKICAgICAgICAgIHJldHVybiBzb2NrZXQuYWRkUmVxdWVzdChyZXEsIGNvbm5lY3RPcHRzKTsKICAgICAgICB9CiAgICAgICAgdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldCA9IHNvY2tldDsKICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBjcmVhdGVTb2NrZXQoKWAgaXNuJ3QgZGVmaW5lZCBpbiBgQHR5cGVzL25vZGVgCiAgICAgICAgc3VwZXIuY3JlYXRlU29ja2V0KHJlcSwgb3B0aW9ucywgY2IpOwogICAgICB9LCBjYik7CiAgfQoKICBjcmVhdGVDb25uZWN0aW9uKCkgewogICAgY29uc3Qgc29ja2V0ID0gdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldDsKICAgIHRoaXNbSU5URVJOQUxdLmN1cnJlbnRTb2NrZXQgPSB1bmRlZmluZWQ7CiAgICBpZiAoIXNvY2tldCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNvY2tldCB3YXMgcmV0dXJuZWQgaW4gdGhlIGBjb25uZWN0KClgIGZ1bmN0aW9uJyk7CiAgICB9CiAgICByZXR1cm4gc29ja2V0OwogIH0KCiAgZ2V0IGRlZmF1bHRQb3J0KCkgewogICAgcmV0dXJuIF9udWxsaXNoQ29hbGVzY2UkMih0aGlzW0lOVEVSTkFMXS5kZWZhdWx0UG9ydCwgKCkgPT4gKCAodGhpcy5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MCkpKTsKICB9CgogIHNldCBkZWZhdWx0UG9ydCh2KSB7CiAgICBpZiAodGhpc1tJTlRFUk5BTF0pIHsKICAgICAgdGhpc1tJTlRFUk5BTF0uZGVmYXVsdFBvcnQgPSB2OwogICAgfQogIH0KCiAgZ2V0IHByb3RvY29sKCkgewogICAgcmV0dXJuIF9udWxsaXNoQ29hbGVzY2UkMih0aGlzW0lOVEVSTkFMXS5wcm90b2NvbCwgKCkgPT4gKCAodGhpcy5pc1NlY3VyZUVuZHBvaW50KCkgPyAnaHR0cHM6JyA6ICdodHRwOicpKSk7CiAgfQoKICBzZXQgcHJvdG9jb2wodikgewogICAgaWYgKHRoaXNbSU5URVJOQUxdKSB7CiAgICAgIHRoaXNbSU5URVJOQUxdLnByb3RvY29sID0gdjsKICAgIH0KICB9Cn0KCmZ1bmN0aW9uIGRlYnVnJDEoLi4uYXJncykgewogIGxvZ2dlci5sb2coJ1todHRwcy1wcm94eS1hZ2VudDpwYXJzZS1wcm94eS1yZXNwb25zZV0nLCAuLi5hcmdzKTsKfQoKZnVuY3Rpb24gcGFyc2VQcm94eVJlc3BvbnNlKHNvY2tldCkgewogIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAvLyB3ZSBuZWVkIHRvIGJ1ZmZlciBhbnkgSFRUUCB0cmFmZmljIHRoYXQgaGFwcGVucyB3aXRoIHRoZSBwcm94eSBiZWZvcmUgd2UgZ2V0CiAgICAvLyB0aGUgQ09OTkVDVCByZXNwb25zZSwgc28gdGhhdCBpZiB0aGUgcmVzcG9uc2UgaXMgYW55dGhpbmcgb3RoZXIgdGhhbiBhbiAiMjAwIgogICAgLy8gcmVzcG9uc2UgY29kZSwgdGhlbiB3ZSBjYW4gcmUtcGxheSB0aGUgImRhdGEiIGV2ZW50cyBvbiB0aGUgc29ja2V0IG9uY2UgdGhlCiAgICAvLyBIVFRQIHBhcnNlciBpcyBob29rZWQgdXAuLi4KICAgIGxldCBidWZmZXJzTGVuZ3RoID0gMDsKICAgIGNvbnN0IGJ1ZmZlcnMgPSBbXTsKCiAgICBmdW5jdGlvbiByZWFkKCkgewogICAgICBjb25zdCBiID0gc29ja2V0LnJlYWQoKTsKICAgICAgaWYgKGIpIG9uZGF0YShiKTsKICAgICAgZWxzZSBzb2NrZXQub25jZSgncmVhZGFibGUnLCByZWFkKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjbGVhbnVwKCkgewogICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKTsKICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpOwogICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ3JlYWRhYmxlJywgcmVhZCk7CiAgICB9CgogICAgZnVuY3Rpb24gb25lbmQoKSB7CiAgICAgIGNsZWFudXAoKTsKICAgICAgZGVidWckMSgnb25lbmQnKTsKICAgICAgcmVqZWN0KG5ldyBFcnJvcignUHJveHkgY29ubmVjdGlvbiBlbmRlZCBiZWZvcmUgcmVjZWl2aW5nIENPTk5FQ1QgcmVzcG9uc2UnKSk7CiAgICB9CgogICAgZnVuY3Rpb24gb25lcnJvcihlcnIpIHsKICAgICAgY2xlYW51cCgpOwogICAgICBkZWJ1ZyQxKCdvbmVycm9yICVvJywgZXJyKTsKICAgICAgcmVqZWN0KGVycik7CiAgICB9CgogICAgZnVuY3Rpb24gb25kYXRhKGIpIHsKICAgICAgYnVmZmVycy5wdXNoKGIpOwogICAgICBidWZmZXJzTGVuZ3RoICs9IGIubGVuZ3RoOwoKICAgICAgY29uc3QgYnVmZmVyZWQgPSBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMsIGJ1ZmZlcnNMZW5ndGgpOwogICAgICBjb25zdCBlbmRPZkhlYWRlcnMgPSBidWZmZXJlZC5pbmRleE9mKCdcclxuXHJcbicpOwoKICAgICAgaWYgKGVuZE9mSGVhZGVycyA9PT0gLTEpIHsKICAgICAgICAvLyBrZWVwIGJ1ZmZlcmluZwogICAgICAgIGRlYnVnJDEoJ2hhdmUgbm90IHJlY2VpdmVkIGVuZCBvZiBIVFRQIGhlYWRlcnMgeWV0Li4uJyk7CiAgICAgICAgcmVhZCgpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgY29uc3QgaGVhZGVyUGFydHMgPSBidWZmZXJlZC5zbGljZSgwLCBlbmRPZkhlYWRlcnMpLnRvU3RyaW5nKCdhc2NpaScpLnNwbGl0KCdcclxuJyk7CiAgICAgIGNvbnN0IGZpcnN0TGluZSA9IGhlYWRlclBhcnRzLnNoaWZ0KCk7CiAgICAgIGlmICghZmlyc3RMaW5lKSB7CiAgICAgICAgc29ja2V0LmRlc3Ryb3koKTsKICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignTm8gaGVhZGVyIHJlY2VpdmVkIGZyb20gcHJveHkgQ09OTkVDVCByZXNwb25zZScpKTsKICAgICAgfQogICAgICBjb25zdCBmaXJzdExpbmVQYXJ0cyA9IGZpcnN0TGluZS5zcGxpdCgnICcpOwogICAgICBjb25zdCBzdGF0dXNDb2RlID0gK2ZpcnN0TGluZVBhcnRzWzFdOwogICAgICBjb25zdCBzdGF0dXNUZXh0ID0gZmlyc3RMaW5lUGFydHMuc2xpY2UoMikuam9pbignICcpOwogICAgICBjb25zdCBoZWFkZXJzID0ge307CiAgICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIGhlYWRlclBhcnRzKSB7CiAgICAgICAgaWYgKCFoZWFkZXIpIGNvbnRpbnVlOwogICAgICAgIGNvbnN0IGZpcnN0Q29sb24gPSBoZWFkZXIuaW5kZXhPZignOicpOwogICAgICAgIGlmIChmaXJzdENvbG9uID09PSAtMSkgewogICAgICAgICAgc29ja2V0LmRlc3Ryb3koKTsKICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKGBJbnZhbGlkIGhlYWRlciBmcm9tIHByb3h5IENPTk5FQ1QgcmVzcG9uc2U6ICIke2hlYWRlcn0iYCkpOwogICAgICAgIH0KICAgICAgICBjb25zdCBrZXkgPSBoZWFkZXIuc2xpY2UoMCwgZmlyc3RDb2xvbikudG9Mb3dlckNhc2UoKTsKICAgICAgICBjb25zdCB2YWx1ZSA9IGhlYWRlci5zbGljZShmaXJzdENvbG9uICsgMSkudHJpbVN0YXJ0KCk7CiAgICAgICAgY29uc3QgY3VycmVudCA9IGhlYWRlcnNba2V5XTsKICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnQgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICBoZWFkZXJzW2tleV0gPSBbY3VycmVudCwgdmFsdWVdOwogICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50KSkgewogICAgICAgICAgY3VycmVudC5wdXNoKHZhbHVlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaGVhZGVyc1trZXldID0gdmFsdWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGRlYnVnJDEoJ2dvdCBwcm94eSBzZXJ2ZXIgcmVzcG9uc2U6ICVvICVvJywgZmlyc3RMaW5lLCBoZWFkZXJzKTsKICAgICAgY2xlYW51cCgpOwogICAgICByZXNvbHZlKHsKICAgICAgICBjb25uZWN0OiB7CiAgICAgICAgICBzdGF0dXNDb2RlLAogICAgICAgICAgc3RhdHVzVGV4dCwKICAgICAgICAgIGhlYWRlcnMsCiAgICAgICAgfSwKICAgICAgICBidWZmZXJlZCwKICAgICAgfSk7CiAgICB9CgogICAgc29ja2V0Lm9uKCdlcnJvcicsIG9uZXJyb3IpOwogICAgc29ja2V0Lm9uKCdlbmQnLCBvbmVuZCk7CgogICAgcmVhZCgpOwogIH0pOwp9CgpmdW5jdGlvbiBfbnVsbGlzaENvYWxlc2NlJDEobGhzLCByaHNGbikgeyBpZiAobGhzICE9IG51bGwpIHsgcmV0dXJuIGxoczsgfSBlbHNlIHsgcmV0dXJuIHJoc0ZuKCk7IH0gfSBmdW5jdGlvbiBfb3B0aW9uYWxDaGFpbiQxKG9wcykgeyBsZXQgbGFzdEFjY2Vzc0xIUyA9IHVuZGVmaW5lZDsgbGV0IHZhbHVlID0gb3BzWzBdOyBsZXQgaSA9IDE7IHdoaWxlIChpIDwgb3BzLmxlbmd0aCkgeyBjb25zdCBvcCA9IG9wc1tpXTsgY29uc3QgZm4gPSBvcHNbaSArIDFdOyBpICs9IDI7IGlmICgob3AgPT09ICdvcHRpb25hbEFjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSAmJiB2YWx1ZSA9PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gaWYgKG9wID09PSAnYWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJykgeyBsYXN0QWNjZXNzTEhTID0gdmFsdWU7IHZhbHVlID0gZm4odmFsdWUpOyB9IGVsc2UgaWYgKG9wID09PSAnY2FsbCcgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSB7IHZhbHVlID0gZm4oKC4uLmFyZ3MpID0+IHZhbHVlLmNhbGwobGFzdEFjY2Vzc0xIUywgLi4uYXJncykpOyBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkOyB9IH0gcmV0dXJuIHZhbHVlOyB9CgpmdW5jdGlvbiBkZWJ1ZyguLi5hcmdzKSB7CiAgbG9nZ2VyLmxvZygnW2h0dHBzLXByb3h5LWFnZW50XScsIC4uLmFyZ3MpOwp9CgovKioKICogVGhlIGBIdHRwc1Byb3h5QWdlbnRgIGltcGxlbWVudHMgYW4gSFRUUCBBZ2VudCBzdWJjbGFzcyB0aGF0IGNvbm5lY3RzIHRvCiAqIHRoZSBzcGVjaWZpZWQgIkhUVFAocykgcHJveHkgc2VydmVyIiBpbiBvcmRlciB0byBwcm94eSBIVFRQUyByZXF1ZXN0cy4KICoKICogT3V0Z29pbmcgSFRUUCByZXF1ZXN0cyBhcmUgZmlyc3QgdHVubmVsZWQgdGhyb3VnaCB0aGUgcHJveHkgc2VydmVyIHVzaW5nIHRoZQogKiBgQ09OTkVDVGAgSFRUUCByZXF1ZXN0IG1ldGhvZCB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBzZXJ2ZXIsCiAqIGFuZCB0aGVuIHRoZSBwcm94eSBzZXJ2ZXIgY29ubmVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIHRhcmdldCBhbmQgaXNzdWVzIHRoZQogKiBIVFRQIHJlcXVlc3QgZnJvbSB0aGUgcHJveHkgc2VydmVyLgogKgogKiBgaHR0cHM6YCByZXF1ZXN0cyBoYXZlIHRoZWlyIHNvY2tldCBjb25uZWN0aW9uIHVwZ3JhZGVkIHRvIFRMUyBvbmNlCiAqIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBzZXJ2ZXIgaGFzIGJlZW4gZXN0YWJsaXNoZWQuCiAqLwpjbGFzcyBIdHRwc1Byb3h5QWdlbnQgZXh0ZW5kcyBBZ2VudCB7CiAgc3RhdGljIF9faW5pdFN0YXRpYygpIHt0aGlzLnByb3RvY29scyA9IFsnaHR0cCcsICdodHRwcyddOyB9CgogIGNvbnN0cnVjdG9yKHByb3h5LCBvcHRzKSB7CiAgICBzdXBlcihvcHRzKTsKICAgIHRoaXMub3B0aW9ucyA9IHt9OwogICAgdGhpcy5wcm94eSA9IHR5cGVvZiBwcm94eSA9PT0gJ3N0cmluZycgPyBuZXcgVVJMKHByb3h5KSA6IHByb3h5OwogICAgdGhpcy5wcm94eUhlYWRlcnMgPSBfbnVsbGlzaENvYWxlc2NlJDEoX29wdGlvbmFsQ2hhaW4kMShbb3B0cywgJ29wdGlvbmFsQWNjZXNzJywgXzIgPT4gXzIuaGVhZGVyc10pLCAoKSA9PiAoIHt9KSk7CiAgICBkZWJ1ZygnQ3JlYXRpbmcgbmV3IEh0dHBzUHJveHlBZ2VudCBpbnN0YW5jZTogJW8nLCB0aGlzLnByb3h5LmhyZWYpOwoKICAgIC8vIFRyaW0gb2ZmIHRoZSBicmFja2V0cyBmcm9tIElQdjYgYWRkcmVzc2VzCiAgICBjb25zdCBob3N0ID0gKHRoaXMucHJveHkuaG9zdG5hbWUgfHwgdGhpcy5wcm94eS5ob3N0KS5yZXBsYWNlKC9eXFt8XF0kL2csICcnKTsKICAgIGNvbnN0IHBvcnQgPSB0aGlzLnByb3h5LnBvcnQgPyBwYXJzZUludCh0aGlzLnByb3h5LnBvcnQsIDEwKSA6IHRoaXMucHJveHkucHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODA7CiAgICB0aGlzLmNvbm5lY3RPcHRzID0gewogICAgICAvLyBBdHRlbXB0IHRvIG5lZ290aWF0ZSBodHRwLzEuMSBmb3IgcHJveHkgc2VydmVycyB0aGF0IHN1cHBvcnQgaHR0cC8yCiAgICAgIEFMUE5Qcm90b2NvbHM6IFsnaHR0cC8xLjEnXSwKICAgICAgLi4uKG9wdHMgPyBvbWl0KG9wdHMsICdoZWFkZXJzJykgOiBudWxsKSwKICAgICAgaG9zdCwKICAgICAgcG9ydCwKICAgIH07CiAgfQoKICAvKioKICAgKiBDYWxsZWQgd2hlbiB0aGUgbm9kZS1jb3JlIEhUVFAgY2xpZW50IGxpYnJhcnkgaXMgY3JlYXRpbmcgYQogICAqIG5ldyBIVFRQIHJlcXVlc3QuCiAgICovCiAgYXN5bmMgY29ubmVjdChyZXEsIG9wdHMpIHsKICAgIGNvbnN0IHsgcHJveHkgfSA9IHRoaXM7CgogICAgaWYgKCFvcHRzLmhvc3QpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gImhvc3QiIHByb3ZpZGVkJyk7CiAgICB9CgogICAgLy8gQ3JlYXRlIGEgc29ja2V0IGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlci4KICAgIGxldCBzb2NrZXQ7CiAgICBpZiAocHJveHkucHJvdG9jb2wgPT09ICdodHRwczonKSB7CiAgICAgIGRlYnVnKCdDcmVhdGluZyBgdGxzLlNvY2tldGA6ICVvJywgdGhpcy5jb25uZWN0T3B0cyk7CiAgICAgIGNvbnN0IHNlcnZlcm5hbWUgPSB0aGlzLmNvbm5lY3RPcHRzLnNlcnZlcm5hbWUgfHwgdGhpcy5jb25uZWN0T3B0cy5ob3N0OwogICAgICBzb2NrZXQgPSB0bHMuY29ubmVjdCh7CiAgICAgICAgLi4udGhpcy5jb25uZWN0T3B0cywKICAgICAgICBzZXJ2ZXJuYW1lOiBzZXJ2ZXJuYW1lICYmIG5ldC5pc0lQKHNlcnZlcm5hbWUpID8gdW5kZWZpbmVkIDogc2VydmVybmFtZSwKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBkZWJ1ZygnQ3JlYXRpbmcgYG5ldC5Tb2NrZXRgOiAlbycsIHRoaXMuY29ubmVjdE9wdHMpOwogICAgICBzb2NrZXQgPSBuZXQuY29ubmVjdCh0aGlzLmNvbm5lY3RPcHRzKTsKICAgIH0KCiAgICBjb25zdCBoZWFkZXJzID0KICAgICAgdHlwZW9mIHRoaXMucHJveHlIZWFkZXJzID09PSAnZnVuY3Rpb24nID8gdGhpcy5wcm94eUhlYWRlcnMoKSA6IHsgLi4udGhpcy5wcm94eUhlYWRlcnMgfTsKICAgIGNvbnN0IGhvc3QgPSBuZXQuaXNJUHY2KG9wdHMuaG9zdCkgPyBgWyR7b3B0cy5ob3N0fV1gIDogb3B0cy5ob3N0OwogICAgbGV0IHBheWxvYWQgPSBgQ09OTkVDVCAke2hvc3R9OiR7b3B0cy5wb3J0fSBIVFRQLzEuMVxyXG5gOwoKICAgIC8vIEluamVjdCB0aGUgYFByb3h5LUF1dGhvcml6YXRpb25gIGhlYWRlciBpZiBuZWNlc3NhcnkuCiAgICBpZiAocHJveHkudXNlcm5hbWUgfHwgcHJveHkucGFzc3dvcmQpIHsKICAgICAgY29uc3QgYXV0aCA9IGAke2RlY29kZVVSSUNvbXBvbmVudChwcm94eS51c2VybmFtZSl9OiR7ZGVjb2RlVVJJQ29tcG9uZW50KHByb3h5LnBhc3N3b3JkKX1gOwogICAgICBoZWFkZXJzWydQcm94eS1BdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShhdXRoKS50b1N0cmluZygnYmFzZTY0Jyl9YDsKICAgIH0KCiAgICBoZWFkZXJzLkhvc3QgPSBgJHtob3N0fToke29wdHMucG9ydH1gOwoKICAgIGlmICghaGVhZGVyc1snUHJveHktQ29ubmVjdGlvbiddKSB7CiAgICAgIGhlYWRlcnNbJ1Byb3h5LUNvbm5lY3Rpb24nXSA9IHRoaXMua2VlcEFsaXZlID8gJ0tlZXAtQWxpdmUnIDogJ2Nsb3NlJzsKICAgIH0KICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKSkgewogICAgICBwYXlsb2FkICs9IGAke25hbWV9OiAke2hlYWRlcnNbbmFtZV19XHJcbmA7CiAgICB9CgogICAgY29uc3QgcHJveHlSZXNwb25zZVByb21pc2UgPSBwYXJzZVByb3h5UmVzcG9uc2Uoc29ja2V0KTsKCiAgICBzb2NrZXQud3JpdGUoYCR7cGF5bG9hZH1cclxuYCk7CgogICAgY29uc3QgeyBjb25uZWN0LCBidWZmZXJlZCB9ID0gYXdhaXQgcHJveHlSZXNwb25zZVByb21pc2U7CiAgICByZXEuZW1pdCgncHJveHlDb25uZWN0JywgY29ubmVjdCk7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50CiAgICAvLyBAdHMtaWdub3JlIE5vdCBFdmVudEVtaXR0ZXIgaW4gTm9kZSB0eXBlcwogICAgdGhpcy5lbWl0KCdwcm94eUNvbm5lY3QnLCBjb25uZWN0LCByZXEpOwoKICAgIGlmIChjb25uZWN0LnN0YXR1c0NvZGUgPT09IDIwMCkgewogICAgICByZXEub25jZSgnc29ja2V0JywgcmVzdW1lKTsKCiAgICAgIGlmIChvcHRzLnNlY3VyZUVuZHBvaW50KSB7CiAgICAgICAgLy8gVGhlIHByb3h5IGlzIGNvbm5lY3RpbmcgdG8gYSBUTFMgc2VydmVyLCBzbyB1cGdyYWRlCiAgICAgICAgLy8gdGhpcyBzb2NrZXQgY29ubmVjdGlvbiB0byBhIFRMUyBjb25uZWN0aW9uLgogICAgICAgIGRlYnVnKCdVcGdyYWRpbmcgc29ja2V0IGNvbm5lY3Rpb24gdG8gVExTJyk7CiAgICAgICAgY29uc3Qgc2VydmVybmFtZSA9IG9wdHMuc2VydmVybmFtZSB8fCBvcHRzLmhvc3Q7CiAgICAgICAgcmV0dXJuIHRscy5jb25uZWN0KHsKICAgICAgICAgIC4uLm9taXQob3B0cywgJ2hvc3QnLCAncGF0aCcsICdwb3J0JyksCiAgICAgICAgICBzb2NrZXQsCiAgICAgICAgICBzZXJ2ZXJuYW1lOiBuZXQuaXNJUChzZXJ2ZXJuYW1lKSA/IHVuZGVmaW5lZCA6IHNlcnZlcm5hbWUsCiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIHJldHVybiBzb2NrZXQ7CiAgICB9CgogICAgLy8gU29tZSBvdGhlciBzdGF0dXMgY29kZSB0aGF0J3Mgbm90IDIwMC4uLiBuZWVkIHRvIHJlLXBsYXkgdGhlIEhUVFAKICAgIC8vIGhlYWRlciAiZGF0YSIgZXZlbnRzIG9udG8gdGhlIHNvY2tldCBvbmNlIHRoZSBIVFRQIG1hY2hpbmVyeSBpcwogICAgLy8gYXR0YWNoZWQgc28gdGhhdCB0aGUgbm9kZSBjb3JlIGBodHRwYCBjYW4gcGFyc2UgYW5kIGhhbmRsZSB0aGUKICAgIC8vIGVycm9yIHN0YXR1cyBjb2RlLgoKICAgIC8vIENsb3NlIHRoZSBvcmlnaW5hbCBzb2NrZXQsIGFuZCBhIG5ldyAiZmFrZSIgc29ja2V0IGlzIHJldHVybmVkCiAgICAvLyBpbnN0ZWFkLCBzbyB0aGF0IHRoZSBwcm94eSBkb2Vzbid0IGdldCB0aGUgSFRUUCByZXF1ZXN0CiAgICAvLyB3cml0dGVuIHRvIGl0ICh3aGljaCBtYXkgY29udGFpbiBgQXV0aG9yaXphdGlvbmAgaGVhZGVycyBvciBvdGhlcgogICAgLy8gc2Vuc2l0aXZlIGRhdGEpLgogICAgLy8KICAgIC8vIFNlZTogaHR0cHM6Ly9oYWNrZXJvbmUuY29tL3JlcG9ydHMvNTQxNTAyCiAgICBzb2NrZXQuZGVzdHJveSgpOwoKICAgIGNvbnN0IGZha2VTb2NrZXQgPSBuZXcgbmV0LlNvY2tldCh7IHdyaXRhYmxlOiBmYWxzZSB9KTsKICAgIGZha2VTb2NrZXQucmVhZGFibGUgPSB0cnVlOwoKICAgIC8vIE5lZWQgdG8gd2FpdCBmb3IgdGhlICJzb2NrZXQiIGV2ZW50IHRvIHJlLXBsYXkgdGhlICJkYXRhIiBldmVudHMuCiAgICByZXEub25jZSgnc29ja2V0JywgKHMpID0+IHsKICAgICAgZGVidWcoJ1JlcGxheWluZyBwcm94eSBidWZmZXIgZm9yIGZhaWxlZCByZXF1ZXN0Jyk7CiAgICAgIC8vIFJlcGxheSB0aGUgImJ1ZmZlcmVkIiBCdWZmZXIgb250byB0aGUgZmFrZSBgc29ja2V0YCwgc2luY2UgYXQKICAgICAgLy8gdGhpcyBwb2ludCB0aGUgSFRUUCBtb2R1bGUgbWFjaGluZXJ5IGhhcyBiZWVuIGhvb2tlZCB1cCBmb3IKICAgICAgLy8gdGhlIHVzZXIuCiAgICAgIHMucHVzaChidWZmZXJlZCk7CiAgICAgIHMucHVzaChudWxsKTsKICAgIH0pOwoKICAgIHJldHVybiBmYWtlU29ja2V0OwogIH0KfSBIdHRwc1Byb3h5QWdlbnQuX19pbml0U3RhdGljKCk7CgpmdW5jdGlvbiByZXN1bWUoc29ja2V0KSB7CiAgc29ja2V0LnJlc3VtZSgpOwp9CgpmdW5jdGlvbiBvbWl0KAogIG9iaiwKICAuLi5rZXlzCikKCiB7CiAgY29uc3QgcmV0ID0ge30KCjsKICBsZXQga2V5OwogIGZvciAoa2V5IGluIG9iaikgewogICAgaWYgKCFrZXlzLmluY2x1ZGVzKGtleSkpIHsKICAgICAgcmV0W2tleV0gPSBvYmpba2V5XTsKICAgIH0KICB9CiAgcmV0dXJuIHJldDsKfQoKZnVuY3Rpb24gX251bGxpc2hDb2FsZXNjZShsaHMsIHJoc0ZuKSB7IGlmIChsaHMgIT0gbnVsbCkgeyByZXR1cm4gbGhzOyB9IGVsc2UgeyByZXR1cm4gcmhzRm4oKTsgfSB9Ci8vIEVzdGltYXRlZCBtYXhpbXVtIHNpemUgZm9yIHJlYXNvbmFibGUgc3RhbmRhbG9uZSBldmVudApjb25zdCBHWklQX1RIUkVTSE9MRCA9IDEwMjQgKiAzMjsKCi8qKgogKiBHZXRzIGEgc3RyZWFtIGZyb20gYSBVaW50OEFycmF5IG9yIHN0cmluZwogKiBSZWFkYWJsZS5mcm9tIGlzIGlkZWFsIGJ1dCB3YXMgYWRkZWQgaW4gbm9kZS5qcyB2MTIuMy4wIGFuZCB2MTAuMTcuMAogKi8KZnVuY3Rpb24gc3RyZWFtRnJvbUJvZHkoYm9keSkgewogIHJldHVybiBuZXcgUmVhZGFibGUoewogICAgcmVhZCgpIHsKICAgICAgdGhpcy5wdXNoKGJvZHkpOwogICAgICB0aGlzLnB1c2gobnVsbCk7CiAgICB9LAogIH0pOwp9CgovKioKICogQ3JlYXRlcyBhIFRyYW5zcG9ydCB0aGF0IHVzZXMgbmF0aXZlIHRoZSBuYXRpdmUgJ2h0dHAnIGFuZCAnaHR0cHMnIG1vZHVsZXMgdG8gc2VuZCBldmVudHMgdG8gU2VudHJ5LgogKi8KZnVuY3Rpb24gbWFrZU5vZGVUcmFuc3BvcnQob3B0aW9ucykgewogIGxldCB1cmxTZWdtZW50czsKCiAgdHJ5IHsKICAgIHVybFNlZ21lbnRzID0gbmV3IFVSTChvcHRpb25zLnVybCk7CiAgfSBjYXRjaCAoZSkgewogICAgY29uc29sZVNhbmRib3goKCkgPT4gewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZQogICAgICBjb25zb2xlLndhcm4oCiAgICAgICAgJ1tAc2VudHJ5L25vZGVdOiBJbnZhbGlkIGRzbiBvciB0dW5uZWwgb3B0aW9uLCB3aWxsIG5vdCBzZW5kIGFueSBldmVudHMuIFRoZSB0dW5uZWwgb3B0aW9uIG11c3QgYmUgYSBmdWxsIFVSTCB3aGVuIHVzZWQuJywKICAgICAgKTsKICAgIH0pOwogICAgcmV0dXJuIGNyZWF0ZVRyYW5zcG9ydChvcHRpb25zLCAoKSA9PiBQcm9taXNlLnJlc29sdmUoe30pKTsKICB9CgogIGNvbnN0IGlzSHR0cHMgPSB1cmxTZWdtZW50cy5wcm90b2NvbCA9PT0gJ2h0dHBzOic7CgogIC8vIFByb3h5IHByaW9yaXRpemF0aW9uOiBodHRwID0+IGBvcHRpb25zLnByb3h5YCB8IGBwcm9jZXNzLmVudi5odHRwX3Byb3h5YAogIC8vIFByb3h5IHByaW9yaXRpemF0aW9uOiBodHRwcyA9PiBgb3B0aW9ucy5wcm94eWAgfCBgcHJvY2Vzcy5lbnYuaHR0cHNfcHJveHlgIHwgYHByb2Nlc3MuZW52Lmh0dHBfcHJveHlgCiAgY29uc3QgcHJveHkgPSBhcHBseU5vUHJveHlPcHRpb24oCiAgICB1cmxTZWdtZW50cywKICAgIG9wdGlvbnMucHJveHkgfHwgKGlzSHR0cHMgPyBwcm9jZXNzLmVudi5odHRwc19wcm94eSA6IHVuZGVmaW5lZCkgfHwgcHJvY2Vzcy5lbnYuaHR0cF9wcm94eSwKICApOwoKICBjb25zdCBuYXRpdmVIdHRwTW9kdWxlID0gaXNIdHRwcyA/IGh0dHBzIDogaHR0cDsKICBjb25zdCBrZWVwQWxpdmUgPSBvcHRpb25zLmtlZXBBbGl2ZSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBvcHRpb25zLmtlZXBBbGl2ZTsKCiAgLy8gVE9ETyh2Nyk6IEV2YWx1YXRlIGlmIHdlIGNhbiBzZXQga2VlcEFsaXZlIHRvIHRydWUuIFRoaXMgd291bGQgaW52b2x2ZSB0ZXN0aW5nIGZvciBtZW1vcnkgbGVha3MgaW4gb2xkZXIgbm9kZQogIC8vIHZlcnNpb25zKD49IDgpIGFzIHRoZXkgaGFkIG1lbW9yeSBsZWFrcyB3aGVuIHVzaW5nIGl0OiAjMjU1NQogIGNvbnN0IGFnZW50ID0gcHJveHkKICAgID8gKG5ldyBIdHRwc1Byb3h5QWdlbnQocHJveHkpICkKICAgIDogbmV3IG5hdGl2ZUh0dHBNb2R1bGUuQWdlbnQoeyBrZWVwQWxpdmUsIG1heFNvY2tldHM6IDMwLCB0aW1lb3V0OiAyMDAwIH0pOwoKICBjb25zdCByZXF1ZXN0RXhlY3V0b3IgPSBjcmVhdGVSZXF1ZXN0RXhlY3V0b3Iob3B0aW9ucywgX251bGxpc2hDb2FsZXNjZShvcHRpb25zLmh0dHBNb2R1bGUsICgpID0+ICggbmF0aXZlSHR0cE1vZHVsZSkpLCBhZ2VudCk7CiAgcmV0dXJuIGNyZWF0ZVRyYW5zcG9ydChvcHRpb25zLCByZXF1ZXN0RXhlY3V0b3IpOwp9CgovKioKICogSG9ub3JzIHRoZSBgbm9fcHJveHlgIGVudiB2YXJpYWJsZSB3aXRoIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRvIGFsbG93IGZvciBob3N0cyBleGNsdXNpb24uCiAqCiAqIEBwYXJhbSB0cmFuc3BvcnRVcmwgVGhlIFVSTCB0aGUgdHJhbnNwb3J0IGludGVuZHMgdG8gc2VuZCBldmVudHMgdG8uCiAqIEBwYXJhbSBwcm94eSBUaGUgY2xpZW50IGNvbmZpZ3VyZWQgcHJveHkuCiAqIEByZXR1cm5zIEEgcHJveHkgdGhlIHRyYW5zcG9ydCBzaG91bGQgdXNlLgogKi8KZnVuY3Rpb24gYXBwbHlOb1Byb3h5T3B0aW9uKHRyYW5zcG9ydFVybFNlZ21lbnRzLCBwcm94eSkgewogIGNvbnN0IHsgbm9fcHJveHkgfSA9IHByb2Nlc3MuZW52OwoKICBjb25zdCB1cmxJc0V4ZW1wdEZyb21Qcm94eSA9CiAgICBub19wcm94eSAmJgogICAgbm9fcHJveHkKICAgICAgLnNwbGl0KCcsJykKICAgICAgLnNvbWUoCiAgICAgICAgZXhlbXB0aW9uID0+IHRyYW5zcG9ydFVybFNlZ21lbnRzLmhvc3QuZW5kc1dpdGgoZXhlbXB0aW9uKSB8fCB0cmFuc3BvcnRVcmxTZWdtZW50cy5ob3N0bmFtZS5lbmRzV2l0aChleGVtcHRpb24pLAogICAgICApOwoKICBpZiAodXJsSXNFeGVtcHRGcm9tUHJveHkpIHsKICAgIHJldHVybiB1bmRlZmluZWQ7CiAgfSBlbHNlIHsKICAgIHJldHVybiBwcm94eTsKICB9Cn0KCi8qKgogKiBDcmVhdGVzIGEgUmVxdWVzdEV4ZWN1dG9yIHRvIGJlIHVzZWQgd2l0aCBgY3JlYXRlVHJhbnNwb3J0YC4KICovCmZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3RFeGVjdXRvcigKICBvcHRpb25zLAogIGh0dHBNb2R1bGUsCiAgYWdlbnQsCikgewogIGNvbnN0IHsgaG9zdG5hbWUsIHBhdGhuYW1lLCBwb3J0LCBwcm90b2NvbCwgc2VhcmNoIH0gPSBuZXcgVVJMKG9wdGlvbnMudXJsKTsKICByZXR1cm4gZnVuY3Rpb24gbWFrZVJlcXVlc3QocmVxdWVzdCkgewogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgbGV0IGJvZHkgPSBzdHJlYW1Gcm9tQm9keShyZXF1ZXN0LmJvZHkpOwoKICAgICAgY29uc3QgaGVhZGVycyA9IHsgLi4ub3B0aW9ucy5oZWFkZXJzIH07CgogICAgICBpZiAocmVxdWVzdC5ib2R5Lmxlbmd0aCA+IEdaSVBfVEhSRVNIT0xEKSB7CiAgICAgICAgaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddID0gJ2d6aXAnOwogICAgICAgIGJvZHkgPSBib2R5LnBpcGUoY3JlYXRlR3ppcCgpKTsKICAgICAgfQoKICAgICAgY29uc3QgcmVxID0gaHR0cE1vZHVsZS5yZXF1ZXN0KAogICAgICAgIHsKICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAogICAgICAgICAgYWdlbnQsCiAgICAgICAgICBoZWFkZXJzLAogICAgICAgICAgaG9zdG5hbWUsCiAgICAgICAgICBwYXRoOiBgJHtwYXRobmFtZX0ke3NlYXJjaH1gLAogICAgICAgICAgcG9ydCwKICAgICAgICAgIHByb3RvY29sLAogICAgICAgICAgY2E6IG9wdGlvbnMuY2FDZXJ0cywKICAgICAgICB9LAogICAgICAgIHJlcyA9PiB7CiAgICAgICAgICByZXMub24oJ2RhdGEnLCAoKSA9PiB7CiAgICAgICAgICAgIC8vIERyYWluIHNvY2tldAogICAgICAgICAgfSk7CgogICAgICAgICAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7CiAgICAgICAgICAgIC8vIERyYWluIHNvY2tldAogICAgICAgICAgfSk7CgogICAgICAgICAgcmVzLnNldEVuY29kaW5nKCd1dGY4Jyk7CgogICAgICAgICAgLy8gIktleS12YWx1ZSBwYWlycyBvZiBoZWFkZXIgbmFtZXMgYW5kIHZhbHVlcy4gSGVhZGVyIG5hbWVzIGFyZSBsb3dlci1jYXNlZC4iCiAgICAgICAgICAvLyBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVycwogICAgICAgICAgY29uc3QgcmV0cnlBZnRlckhlYWRlciA9IF9udWxsaXNoQ29hbGVzY2UocmVzLmhlYWRlcnNbJ3JldHJ5LWFmdGVyJ10sICgpID0+ICggbnVsbCkpOwogICAgICAgICAgY29uc3QgcmF0ZUxpbWl0c0hlYWRlciA9IF9udWxsaXNoQ29hbGVzY2UocmVzLmhlYWRlcnNbJ3gtc2VudHJ5LXJhdGUtbGltaXRzJ10sICgpID0+ICggbnVsbCkpOwoKICAgICAgICAgIHJlc29sdmUoewogICAgICAgICAgICBzdGF0dXNDb2RlOiByZXMuc3RhdHVzQ29kZSwKICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICdyZXRyeS1hZnRlcic6IHJldHJ5QWZ0ZXJIZWFkZXIsCiAgICAgICAgICAgICAgJ3gtc2VudHJ5LXJhdGUtbGltaXRzJzogQXJyYXkuaXNBcnJheShyYXRlTGltaXRzSGVhZGVyKSA/IHJhdGVMaW1pdHNIZWFkZXJbMF0gOiByYXRlTGltaXRzSGVhZGVyLAogICAgICAgICAgICB9LAogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgKTsKCiAgICAgIHJlcS5vbignZXJyb3InLCByZWplY3QpOwogICAgICBib2R5LnBpcGUocmVxKTsKICAgIH0pOwogIH07Cn0KCmZ1bmN0aW9uIF9vcHRpb25hbENoYWluKG9wcykgeyBsZXQgbGFzdEFjY2Vzc0xIUyA9IHVuZGVmaW5lZDsgbGV0IHZhbHVlID0gb3BzWzBdOyBsZXQgaSA9IDE7IHdoaWxlIChpIDwgb3BzLmxlbmd0aCkgeyBjb25zdCBvcCA9IG9wc1tpXTsgY29uc3QgZm4gPSBvcHNbaSArIDFdOyBpICs9IDI7IGlmICgob3AgPT09ICdvcHRpb25hbEFjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSAmJiB2YWx1ZSA9PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gaWYgKG9wID09PSAnYWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJykgeyBsYXN0QWNjZXNzTEhTID0gdmFsdWU7IHZhbHVlID0gZm4odmFsdWUpOyB9IGVsc2UgaWYgKG9wID09PSAnY2FsbCcgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSB7IHZhbHVlID0gZm4oKC4uLmFyZ3MpID0+IHZhbHVlLmNhbGwobGFzdEFjY2Vzc0xIUywgLi4uYXJncykpOyBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkOyB9IH0gcmV0dXJuIHZhbHVlOyB9CmNvbnN0IG9wdGlvbnMgPSB3b3JrZXJEYXRhOwpsZXQgc2Vzc2lvbjsKbGV0IGhhc1NlbnRBbnJFdmVudCA9IGZhbHNlOwoKZnVuY3Rpb24gbG9nKG1zZykgewogIGlmIChvcHRpb25zLmRlYnVnKSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZQogICAgY29uc29sZS5sb2coYFtBTlIgV29ya2VyXSAke21zZ31gKTsKICB9Cn0KCmNvbnN0IHVybCA9IGdldEVudmVsb3BlRW5kcG9pbnRXaXRoVXJsRW5jb2RlZEF1dGgob3B0aW9ucy5kc24pOwpjb25zdCB0cmFuc3BvcnQgPSBtYWtlTm9kZVRyYW5zcG9ydCh7CiAgdXJsLAogIHJlY29yZERyb3BwZWRFdmVudDogKCkgPT4gewogICAgLy8KICB9LAp9KTsKCmFzeW5jIGZ1bmN0aW9uIHNlbmRBYm5vcm1hbFNlc3Npb24oKSB7CiAgLy8gb2Ygd2UgaGF2ZSBhbiBleGlzdGluZyBzZXNzaW9uIHBhc3NlZCBmcm9tIHRoZSBtYWluIHRocmVhZCwgc2VuZCBpdCBhcyBhYm5vcm1hbAogIGlmIChzZXNzaW9uKSB7CiAgICBsb2coJ1NlbmRpbmcgYWJub3JtYWwgc2Vzc2lvbicpOwogICAgdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCB7IHN0YXR1czogJ2Fibm9ybWFsJywgYWJub3JtYWxfbWVjaGFuaXNtOiAnYW5yX2ZvcmVncm91bmQnIH0pOwoKICAgIGNvbnN0IGVudmVsb3BlID0gY3JlYXRlU2Vzc2lvbkVudmVsb3BlKHNlc3Npb24sIG9wdGlvbnMuZHNuLCBvcHRpb25zLnNka01ldGFkYXRhKTsKICAgIC8vIExvZyB0aGUgZW52ZWxvcGUgc28gdG8gYWlkIGluIHRlc3RpbmcKICAgIGxvZyhKU09OLnN0cmluZ2lmeShlbnZlbG9wZSkpOwoKICAgIGF3YWl0IHRyYW5zcG9ydC5zZW5kKGVudmVsb3BlKTsKCiAgICB0cnkgewogICAgICAvLyBOb3RpZnkgdGhlIG1haW4gcHJvY2VzcyB0aGF0IHRoZSBzZXNzaW9uIGhhcyBlbmRlZCBzbyB0aGUgc2Vzc2lvbiBjYW4gYmUgY2xlYXJlZCBmcm9tIHRoZSBzY29wZQogICAgICBfb3B0aW9uYWxDaGFpbihbcGFyZW50UG9ydCwgJ29wdGlvbmFsQWNjZXNzJywgXzIgPT4gXzIucG9zdE1lc3NhZ2UsICdjYWxsJywgXzMgPT4gXzMoJ3Nlc3Npb24tZW5kZWQnKV0pOwogICAgfSBjYXRjaCAoXykgewogICAgICAvLyBpZ25vcmUKICAgIH0KICB9Cn0KCmxvZygnU3RhcnRlZCcpOwoKZnVuY3Rpb24gcHJlcGFyZVN0YWNrRnJhbWVzKHN0YWNrRnJhbWVzKSB7CiAgaWYgKCFzdGFja0ZyYW1lcykgewogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CgogIC8vIFN0cmlwIFNlbnRyeSBmcmFtZXMgYW5kIHJldmVyc2UgdGhlIHN0YWNrIGZyYW1lcyBzbyB0aGV5IGFyZSBpbiB0aGUgY29ycmVjdCBvcmRlcgogIGNvbnN0IHN0cmlwcGVkRnJhbWVzID0gc3RyaXBTZW50cnlGcmFtZXNBbmRSZXZlcnNlKHN0YWNrRnJhbWVzKTsKCiAgLy8gSWYgd2UgaGF2ZSBhbiBhcHAgcm9vdCBwYXRoLCByZXdyaXRlIHRoZSBmaWxlbmFtZXMgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIGFwcCByb290CiAgaWYgKG9wdGlvbnMuYXBwUm9vdFBhdGgpIHsKICAgIGZvciAoY29uc3QgZnJhbWUgb2Ygc3RyaXBwZWRGcmFtZXMpIHsKICAgICAgaWYgKCFmcmFtZS5maWxlbmFtZSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CgogICAgICBmcmFtZS5maWxlbmFtZSA9IG5vcm1hbGl6ZVVybFRvQmFzZShmcmFtZS5maWxlbmFtZSwgb3B0aW9ucy5hcHBSb290UGF0aCk7CiAgICB9CiAgfQoKICByZXR1cm4gc3RyaXBwZWRGcmFtZXM7Cn0KCmFzeW5jIGZ1bmN0aW9uIHNlbmRBbnJFdmVudChmcmFtZXMsIHRyYWNlQ29udGV4dCkgewogIGlmIChoYXNTZW50QW5yRXZlbnQpIHsKICAgIHJldHVybjsKICB9CgogIGhhc1NlbnRBbnJFdmVudCA9IHRydWU7CgogIGF3YWl0IHNlbmRBYm5vcm1hbFNlc3Npb24oKTsKCiAgbG9nKCdTZW5kaW5nIGV2ZW50Jyk7CgogIGNvbnN0IGV2ZW50ID0gewogICAgZXZlbnRfaWQ6IHV1aWQ0KCksCiAgICBjb250ZXh0czogeyAuLi5vcHRpb25zLmNvbnRleHRzLCB0cmFjZTogdHJhY2VDb250ZXh0IH0sCiAgICByZWxlYXNlOiBvcHRpb25zLnJlbGVhc2UsCiAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCwKICAgIGRpc3Q6IG9wdGlvbnMuZGlzdCwKICAgIHBsYXRmb3JtOiAnbm9kZScsCiAgICBsZXZlbDogJ2Vycm9yJywKICAgIGV4Y2VwdGlvbjogewogICAgICB2YWx1ZXM6IFsKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAnQXBwbGljYXRpb25Ob3RSZXNwb25kaW5nJywKICAgICAgICAgIHZhbHVlOiBgQXBwbGljYXRpb24gTm90IFJlc3BvbmRpbmcgZm9yIGF0IGxlYXN0ICR7b3B0aW9ucy5hbnJUaHJlc2hvbGR9IG1zYCwKICAgICAgICAgIHN0YWNrdHJhY2U6IHsgZnJhbWVzOiBwcmVwYXJlU3RhY2tGcmFtZXMoZnJhbWVzKSB9LAogICAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBVSSBkb2Vzbid0IHNheSAnQ3Jhc2hlZCBpbicgZm9yIHRoZSBzdGFjayB0cmFjZQogICAgICAgICAgbWVjaGFuaXNtOiB7IHR5cGU6ICdBTlInIH0sCiAgICAgICAgfSwKICAgICAgXSwKICAgIH0sCiAgICB0YWdzOiBvcHRpb25zLnN0YXRpY1RhZ3MsCiAgfTsKCiAgY29uc3QgZW52ZWxvcGUgPSBjcmVhdGVFdmVudEVudmVsb3BlKGV2ZW50LCBvcHRpb25zLmRzbiwgb3B0aW9ucy5zZGtNZXRhZGF0YSk7CiAgLy8gTG9nIHRoZSBlbnZlbG9wZSBzbyB0byBhaWQgaW4gdGVzdGluZwogIGxvZyhKU09OLnN0cmluZ2lmeShlbnZlbG9wZSkpOwoKICBhd2FpdCB0cmFuc3BvcnQuc2VuZChlbnZlbG9wZSk7CiAgYXdhaXQgdHJhbnNwb3J0LmZsdXNoKDIwMDApOwoKICAvLyBEZWxheSBmb3IgNSBzZWNvbmRzIHNvIHRoYXQgc3RkaW8gY2FuIGZsdXNoIGluIHRoZSBtYWluIGV2ZW50IGxvb3AgZXZlciByZXN0YXJ0cy4KICAvLyBUaGlzIGlzIG1haW5seSBmb3IgdGhlIGJlbmVmaXQgb2YgbG9nZ2luZy9kZWJ1Z2dpbmcgaXNzdWVzLgogIHNldFRpbWVvdXQoKCkgPT4gewogICAgcHJvY2Vzcy5leGl0KDApOwogIH0sIDUwMDApOwp9CgpsZXQgZGVidWdnZXJQYXVzZTsKCmlmIChvcHRpb25zLmNhcHR1cmVTdGFja1RyYWNlKSB7CiAgbG9nKCdDb25uZWN0aW5nIHRvIGRlYnVnZ2VyJyk7CgogIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbigpIDsKICBzZXNzaW9uLmNvbm5lY3RUb01haW5UaHJlYWQoKTsKCiAgbG9nKCdDb25uZWN0ZWQgdG8gZGVidWdnZXInKTsKCiAgLy8gQ29sbGVjdCBzY3JpcHRJZCAtPiB1cmwgbWFwIHNvIHdlIGNhbiBsb29rIHVwIHRoZSBmaWxlbmFtZXMgbGF0ZXIKICBjb25zdCBzY3JpcHRzID0gbmV3IE1hcCgpOwoKICBzZXNzaW9uLm9uKCdEZWJ1Z2dlci5zY3JpcHRQYXJzZWQnLCBldmVudCA9PiB7CiAgICBzY3JpcHRzLnNldChldmVudC5wYXJhbXMuc2NyaXB0SWQsIGV2ZW50LnBhcmFtcy51cmwpOwogIH0pOwoKICBzZXNzaW9uLm9uKCdEZWJ1Z2dlci5wYXVzZWQnLCBldmVudCA9PiB7CiAgICBpZiAoZXZlbnQucGFyYW1zLnJlYXNvbiAhPT0gJ290aGVyJykgewogICAgICByZXR1cm47CiAgICB9CgogICAgdHJ5IHsKICAgICAgbG9nKCdEZWJ1Z2dlciBwYXVzZWQnKTsKCiAgICAgIC8vIGNvcHkgdGhlIGZyYW1lcwogICAgICBjb25zdCBjYWxsRnJhbWVzID0gWy4uLmV2ZW50LnBhcmFtcy5jYWxsRnJhbWVzXTsKCiAgICAgIGNvbnN0IGdldE1vZHVsZU5hbWUgPSBvcHRpb25zLmFwcFJvb3RQYXRoID8gY3JlYXRlR2V0TW9kdWxlRnJvbUZpbGVuYW1lKG9wdGlvbnMuYXBwUm9vdFBhdGgpIDogKCkgPT4gdW5kZWZpbmVkOwogICAgICBjb25zdCBzdGFja0ZyYW1lcyA9IGNhbGxGcmFtZXMubWFwKGZyYW1lID0+CiAgICAgICAgY2FsbEZyYW1lVG9TdGFja0ZyYW1lKGZyYW1lLCBzY3JpcHRzLmdldChmcmFtZS5sb2NhdGlvbi5zY3JpcHRJZCksIGdldE1vZHVsZU5hbWUpLAogICAgICApOwoKICAgICAgLy8gRXZhbHVhdGUgYSBzY3JpcHQgaW4gdGhlIGN1cnJlbnRseSBwYXVzZWQgY29udGV4dAogICAgICBzZXNzaW9uLnBvc3QoCiAgICAgICAgJ1J1bnRpbWUuZXZhbHVhdGUnLAogICAgICAgIHsKICAgICAgICAgIC8vIEdyYWIgdGhlIHRyYWNlIGNvbnRleHQgZnJvbSB0aGUgY3VycmVudCBzY29wZQogICAgICAgICAgZXhwcmVzc2lvbjoKICAgICAgICAgICAgJ2NvbnN0IGN0eCA9IF9fU0VOVFJZX18uaHViLmdldFNjb3BlKCkuZ2V0UHJvcGFnYXRpb25Db250ZXh0KCk7IGN0eC50cmFjZUlkICsgIi0iICsgY3R4LnNwYW5JZCArICItIiArIGN0eC5wYXJlbnRTcGFuSWQnLAogICAgICAgICAgLy8gRG9uJ3QgcmUtdHJpZ2dlciB0aGUgZGVidWdnZXIgaWYgdGhpcyBjYXVzZXMgYW4gZXJyb3IKICAgICAgICAgIHNpbGVudDogdHJ1ZSwKICAgICAgICB9LAogICAgICAgIChfLCBwYXJhbSkgPT4gewogICAgICAgICAgY29uc3QgdHJhY2VJZCA9IHBhcmFtICYmIHBhcmFtLnJlc3VsdCA/IChwYXJhbS5yZXN1bHQudmFsdWUgKSA6ICctLSc7CiAgICAgICAgICBjb25zdCBbdHJhY2VfaWQsIHNwYW5faWQsIHBhcmVudF9zcGFuX2lkXSA9IHRyYWNlSWQuc3BsaXQoJy0nKSA7CgogICAgICAgICAgc2Vzc2lvbi5wb3N0KCdEZWJ1Z2dlci5yZXN1bWUnKTsKICAgICAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIuZGlzYWJsZScpOwoKICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBfb3B0aW9uYWxDaGFpbihbdHJhY2VfaWQsICdvcHRpb25hbEFjY2VzcycsIF80ID0+IF80Lmxlbmd0aF0pICYmIF9vcHRpb25hbENoYWluKFtzcGFuX2lkLCAnb3B0aW9uYWxBY2Nlc3MnLCBfNSA9PiBfNS5sZW5ndGhdKSA/IHsgdHJhY2VfaWQsIHNwYW5faWQsIHBhcmVudF9zcGFuX2lkIH0gOiB1bmRlZmluZWQ7CiAgICAgICAgICBzZW5kQW5yRXZlbnQoc3RhY2tGcmFtZXMsIGNvbnRleHQpLnRoZW4obnVsbCwgKCkgPT4gewogICAgICAgICAgICBsb2coJ1NlbmRpbmcgQU5SIGV2ZW50IGZhaWxlZC4nKTsKICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIucmVzdW1lJyk7CiAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIuZGlzYWJsZScpOwogICAgICB0aHJvdyBlOwogICAgfQogIH0pOwoKICBkZWJ1Z2dlclBhdXNlID0gKCkgPT4gewogICAgdHJ5IHsKICAgICAgc2Vzc2lvbi5wb3N0KCdEZWJ1Z2dlci5lbmFibGUnLCAoKSA9PiB7CiAgICAgICAgc2Vzc2lvbi5wb3N0KCdEZWJ1Z2dlci5wYXVzZScpOwogICAgICB9KTsKICAgIH0gY2F0Y2ggKF8pIHsKICAgICAgLy8KICAgIH0KICB9Owp9CgpmdW5jdGlvbiBjcmVhdGVIclRpbWVyKCkgewogIC8vIFRPRE8gKHY4KTogV2UgY2FuIHVzZSBwcm9jZXNzLmhydGltZS5iaWdpbnQoKSBhZnRlciB3ZSBkcm9wIG5vZGUgdjgKICBsZXQgbGFzdFBvbGwgPSBwcm9jZXNzLmhydGltZSgpOwoKICByZXR1cm4gewogICAgZ2V0VGltZU1zOiAoKSA9PiB7CiAgICAgIGNvbnN0IFtzZWNvbmRzLCBuYW5vU2Vjb25kc10gPSBwcm9jZXNzLmhydGltZShsYXN0UG9sbCk7CiAgICAgIHJldHVybiBNYXRoLmZsb29yKHNlY29uZHMgKiAxZTMgKyBuYW5vU2Vjb25kcyAvIDFlNik7CiAgICB9LAogICAgcmVzZXQ6ICgpID0+IHsKICAgICAgbGFzdFBvbGwgPSBwcm9jZXNzLmhydGltZSgpOwogICAgfSwKICB9Owp9CgpmdW5jdGlvbiB3YXRjaGRvZ1RpbWVvdXQoKSB7CiAgbG9nKCdXYXRjaGRvZyB0aW1lb3V0Jyk7CgogIGlmIChkZWJ1Z2dlclBhdXNlKSB7CiAgICBsb2coJ1BhdXNpbmcgZGVidWdnZXIgdG8gY2FwdHVyZSBzdGFjayB0cmFjZScpOwogICAgZGVidWdnZXJQYXVzZSgpOwogIH0gZWxzZSB7CiAgICBsb2coJ0NhcHR1cmluZyBldmVudCB3aXRob3V0IGEgc3RhY2sgdHJhY2UnKTsKICAgIHNlbmRBbnJFdmVudCgpLnRoZW4obnVsbCwgKCkgPT4gewogICAgICBsb2coJ1NlbmRpbmcgQU5SIGV2ZW50IGZhaWxlZCBvbiB3YXRjaGRvZyB0aW1lb3V0LicpOwogICAgfSk7CiAgfQp9Cgpjb25zdCB7IHBvbGwgfSA9IHdhdGNoZG9nVGltZXIoY3JlYXRlSHJUaW1lciwgb3B0aW9ucy5wb2xsSW50ZXJ2YWwsIG9wdGlvbnMuYW5yVGhyZXNob2xkLCB3YXRjaGRvZ1RpbWVvdXQpOwoKX29wdGlvbmFsQ2hhaW4oW3BhcmVudFBvcnQsICdvcHRpb25hbEFjY2VzcycsIF82ID0+IF82Lm9uLCAnY2FsbCcsIF83ID0+IF83KCdtZXNzYWdlJywgKG1zZykgPT4gewogIGlmIChtc2cuc2Vzc2lvbikgewogICAgc2Vzc2lvbiA9IG1ha2VTZXNzaW9uKG1zZy5zZXNzaW9uKTsKICB9CgogIHBvbGwoKTsKfSldKTs="}),X("68Cgx",function(e,t){W(e.exports,"tracingHandler",()=>b),W(e.exports,"requestHandler",()=>f),W(e.exports,"errorHandler",()=>v),W(e.exports,"trpcMiddleware",()=>I),W(e.exports,"extractRequestData",()=>O("fwl4C").extractRequestData),W(e.exports,"parseRequest",()=>O("fwl4C").parseRequest);var a=O("bsjXU"),i=O("jpnao"),n=O("e4IUz"),o=O("jVURz"),s=O("k2ErF"),r=O("jD1jC"),p=O("deYUe"),l=O("3hDCQ"),d=O("7z6ft"),c=O("eCOpK"),u=O("9GA7E"),m=O("b2ZPh"),g=O("2xRAP"),h=O("1iHXL");function b(){return function(e,t,n){let s=(0,a._optionalChain)([p.getClient,"call",e=>e(),"optionalAccess",e=>e.getOptions,"call",e=>e()]);if(!s||"sentry"!==s.instrumenter||"OPTIONS"===(0,a._optionalChain)([e,"access",e=>e.method,"optionalAccess",e=>e.toUpperCase,"call",e=>e()])||"HEAD"===(0,a._optionalChain)([e,"access",e=>e.method,"optionalAccess",e=>e.toUpperCase,"call",e=>e()]))return n();let r=e.headers&&(0,o.isString)(e.headers["sentry-trace"])?e.headers["sentry-trace"]:void 0,c=(0,a._optionalChain)([e,"access",e=>e.headers,"optionalAccess",e=>e.baggage]);if(!(0,d.hasTracingEnabled)(s))return n();let[g,h]=(0,i.extractPathForTransaction)(e,{path:!0,method:!0}),b=(0,l.continueTrace)({sentryTrace:r,baggage:c},t=>(0,p.startTransaction)({name:g,op:"http.server",origin:"auto.http.node.tracingHandler",...t,data:{[u.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]:h},metadata:{...t.metadata,request:e}},{request:(0,i.extractRequestData)(e)}));(0,p.getCurrentScope)().setSpan(b),t.__sentry_transaction=b,t.once("finish",()=>{setImmediate(()=>{(0,i.addRequestDataToTransaction)(b,e),(0,m.setHttpStatus)(b,t.statusCode),b.end()})}),n()}}function f(e){let t=function(e={}){let t;if("include"in e)t={include:e.include};else{let{ip:a,request:i,transaction:o,user:s}=e;(a||i||o||s)&&(t={include:(0,n.dropUndefinedKeys)({ip:a,request:i,transaction:o,user:s})})}return t}(e),a=(0,p.getClient)();if(a&&(0,h.isAutoSessionTrackingEnabled)(a)){a.initSessionFlusher();let e=(0,p.getCurrentScope)();e.getSession()&&e.setSession()}return function(a,i,n){if(e&&e.flushTimeout&&e.flushTimeout>0){let t=i.end;i.end=function(a,i,n){(0,p.flush)(e.flushTimeout).then(()=>{t.call(this,a,i,n)}).then(null,e=>{g.DEBUG_BUILD&&(0,s.logger).error(e),t.call(this,a,i,n)})}}(0,c.runWithAsyncContext)(()=>{let e=(0,p.getCurrentScope)();e.setSDKProcessingMetadata({request:a,requestDataOptionsFromExpressHandler:t});let o=(0,p.getClient)();(0,h.isAutoSessionTrackingEnabled)(o)&&e.setRequestSession({status:"ok"}),i.once("finish",()=>{let e=(0,p.getClient)();(0,h.isAutoSessionTrackingEnabled)(e)&&setImmediate(()=>{e&&e._captureRequestSession&&e._captureRequestSession()})}),n()})}}function v(e){return function(t,a,i,n){if((e&&e.shouldHandleError||function(e){return function(e){let t=e.status||e.statusCode||e.status_code||e.output&&e.output.statusCode;return t?parseInt(t,10):500}(e)>=500})(t)){(0,p.withScope)(e=>{e.setSDKProcessingMetadata({request:a});let o=i.__sentry_transaction;o&&!(0,l.getActiveSpan)()&&e.setSpan(o);let s=(0,p.getClient)();if(s&&(0,h.isAutoSessionTrackingEnabled)(s)&&void 0!==s._sessionFlusher){let t=e.getRequestSession();t&&void 0!==t.status&&(t.status="crashed")}let r=(0,p.captureException)(t,{mechanism:{type:"middleware",handled:!1}});i.sentry=r,n(t)});return}n(t)}}function I(e={}){return function({path:t,type:i,next:n,rawInput:s}){let l;let d=(0,a._optionalChain)([p.getClient,"call",e=>e(),"optionalAccess",e=>e.getOptions,"call",e=>e()]),c=(0,p.getCurrentScope)().getTransaction();if(c){c.updateName(`trpc/${t}`),c.setAttribute(u.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,"route"),c.op="rpc.server";let n={procedure_type:i};(void 0!==e.attachRpcInput?e.attachRpcInput:(0,a._optionalChain)([d,"optionalAccess",e=>e.sendDefaultPii]))&&(n.input=(0,r.normalize)(s)),c.setContext("trpc",n)}function m(e){e.ok||(0,p.captureException)(e.error,{mechanism:{handled:!1,data:{function:"trpcMiddleware"}}})}try{l=n()}catch(e){throw(0,p.captureException)(e,{mechanism:{handled:!1,data:{function:"trpcMiddleware"}}}),e}return(0,o.isThenable)(l)?Promise.resolve(l).then(e=>{m(e)},e=>{(0,p.captureException)(e,{mechanism:{handled:!1,data:{function:"trpcMiddleware"}}})}):m(l),l}}O("fwl4C")}),X("fwl4C",function(e,t){W(e.exports,"extractRequestData",()=>i),W(e.exports,"parseRequest",()=>n);var a=O("jpnao");function i(e,t){return(0,a.extractRequestData)(e,{include:t})}function n(e,t,i={}){return(0,a.addRequestDataToEvent)(e,t,{include:i})}}),X("iGrMv",function(e,t){W(e.exports,"Console",()=>O("bCDzK").Console),W(e.exports,"Http",()=>O("8G0FT").Http),W(e.exports,"OnUncaughtException",()=>O("dDWKn").OnUncaughtException),W(e.exports,"OnUnhandledRejection",()=>O("kpGGI").OnUnhandledRejection),W(e.exports,"Modules",()=>O("esVyk").Modules),W(e.exports,"ContextLines",()=>O("koeOU").ContextLines),W(e.exports,"Context",()=>O("ezym9").Context),W(e.exports,"RequestData",()=>O("l9Z6v").RequestData),W(e.exports,"LocalVariables",()=>O("lVZId").LocalVariables),W(e.exports,"Undici",()=>O("aCFro").Undici),W(e.exports,"Spotlight",()=>O("7wvFM").Spotlight),W(e.exports,"Anr",()=>O("5x2pZ").Anr),W(e.exports,"Hapi",()=>O("28DJl").Hapi),O("bCDzK"),O("8G0FT"),O("dDWKn"),O("kpGGI"),O("esVyk"),O("koeOU"),O("ezym9"),O("l9Z6v"),O("lVZId"),O("aCFro"),O("7wvFM"),O("5x2pZ"),O("28DJl")}),X("28DJl",function(e,t){W(e.exports,"hapiErrorPlugin",()=>g),W(e.exports,"hapiIntegration",()=>f),W(e.exports,"Hapi",()=>v);var a=O("deYUe"),i=O("3hDCQ"),n=O("hVqbS"),o=O("050Gq"),s=O("cCmfn"),r=O("039qT"),p=O("b2ZPh"),l=O("iD1up"),d=O("hSiIl"),c=O("e4IUz");function u(e){return e&&void 0!==e.statusCode}function m(e){(0,a.captureException)(e,{mechanism:{type:"hapi",handled:!1,data:{function:"hapiErrorPlugin"}}})}let g={name:"SentryHapiErrorPlugin",version:r.SDK_VERSION,register:async function(e){e.events.on("request",(e,t)=>{var a;let i=(0,o.getActiveTransaction)();e.response&&(a=e.response)&&void 0!==a.isBoom?m(e.response):t&&void 0!==t.error&&m(t.error),i&&(i.setStatus("internal_error"),i.end())})}},h={name:"SentryHapiTracingPlugin",version:r.SDK_VERSION,register:async function(e){e.ext("onPreHandler",(e,t)=>{let n=(0,i.continueTrace)({sentryTrace:e.headers["sentry-trace"]||void 0,baggage:e.headers.baggage||void 0},t=>(0,a.startTransaction)({...t,op:"hapi.request",name:e.route.path,description:`${e.route.method} ${e.path}`}));return(0,a.getCurrentScope)().setSpan(n),t.continue}),e.ext("onPreResponse",(e,t)=>{let a=(0,o.getActiveTransaction)();if(e.response&&u(e.response)&&a){let t=e.response;t.header("sentry-trace",(0,l.spanToTraceHeader)(a));let i=(0,d.dynamicSamplingContextToSentryBaggageHeader)((0,s.getDynamicSamplingContextFromSpan)(a));i&&t.header("baggage",i)}return t.continue}),e.ext("onPostHandler",(e,t)=>{let a=(0,o.getActiveTransaction)();return a&&(e.response&&u(e.response)&&(0,p.setHttpStatus)(a,e.response.statusCode),a.end()),t.continue})}},b="Hapi",f=(0,n.defineIntegration)((e={})=>{let t=e.server;return{name:b,setupOnce(){t&&(0,c.fill)(t,"start",e=>async function(){return await this.register(h),await this.register(g),e.apply(this)})}}}),v=(0,n.convertIntegrationFnToClass)(b,f)}),X("i3FeK",function(e,t){W(e.exports,"Apollo",()=>O("9rcfq").Apollo),W(e.exports,"Express",()=>O("3SU1C").Express),W(e.exports,"GraphQL",()=>O("2UNWp").GraphQL),W(e.exports,"Mongo",()=>O("5N1eW").Mongo),W(e.exports,"Mysql",()=>O("kEOfe").Mysql),W(e.exports,"Postgres",()=>O("k9pSf").Postgres),W(e.exports,"Prisma",()=>O("cWSR5").Prisma),O("9rcfq"),O("3SU1C"),O("2UNWp"),O("5N1eW"),O("kEOfe"),O("k9pSf"),O("cWSR5")}),X("9rcfq",function(e,t){W(e.exports,"Apollo",()=>d);var a=O("bsjXU"),i=O("1gT0D"),n=O("e4IUz"),o=O("jVURz"),s=O("fArVl"),r=O("k2ErF"),p=O("5NAaM"),l=O("9AttI");class d{static __initStatic(){this.id="Apollo"}constructor(e={useNestjs:!1}){this.name=d.id,this._useNest=!!e.useNestjs}loadDependency(){return this._useNest?this._module=this._module||(0,s.loadModule)("@nestjs/graphql"):this._module=this._module||(0,s.loadModule)("apollo-server-core"),this._module}setupOnce(e,t){if((0,l.shouldDisableAutoInstrumentation)(t)){p.DEBUG_BUILD&&(0,r.logger).log("Apollo Integration is skipped because of instrumenter configuration.");return}if(this._useNest){let e=this.loadDependency();if(!e){p.DEBUG_BUILD&&(0,r.logger).error("Apollo-NestJS Integration was unable to require @nestjs/graphql package.");return}(0,n.fill)(e.GraphQLFactory.prototype,"mergeWithSchema",function(e){return function(...a){return(0,n.fill)(this.resolversExplorerService,"explore",function(e){return function(){return c((0,i.arrayify)(e.call(this)),t)}}),e.call(this,...a)}})}else{let e=this.loadDependency();if(!e){p.DEBUG_BUILD&&(0,r.logger).error("Apollo Integration was unable to require apollo-server-core package.");return}(0,n.fill)(e.ApolloServerBase.prototype,"constructSchema",function(e){return function(){if(!this.config.resolvers)return p.DEBUG_BUILD&&(this.config.schema?((0,r.logger).warn("Apollo integration is not able to trace `ApolloServer` instances constructed via `schema` property.If you are using NestJS with Apollo, please use `Sentry.Integrations.Apollo({ useNestjs: true })` instead."),(0,r.logger).warn()):this.config.modules&&(0,r.logger).warn("Apollo integration is not able to trace `ApolloServer` instances constructed via `modules` property."),(0,r.logger).error("Skipping tracing as no resolvers found on the `ApolloServer` instance.")),e.call(this);let a=(0,i.arrayify)(this.config.resolvers);return this.config.resolvers=c(a,t),e.call(this)}})}}}function c(e,t){return e.map(e=>(Object.keys(e).forEach(i=>{Object.keys(e[i]).forEach(s=>{"function"==typeof e[i][s]&&(0,n.fill)(e[i],s,function(e){return function(...n){let r=t().getScope().getSpan(),p=(0,a._optionalChain)([r,"optionalAccess",e=>e.startChild,"call",e=>e({description:`${i}.${s}`,op:"graphql.resolve",origin:"auto.graphql.apollo"})]),l=e.call(this,...n);return(0,o.isThenable)(l)?l.then(e=>((0,a._optionalChain)([p,"optionalAccess",e=>e.end,"call",e=>e()]),e)):((0,a._optionalChain)([p,"optionalAccess",e=>e.end,"call",e=>e()]),l)}})})}),e))}d.__initStatic()}),X("5NAaM",function(e,t){W(e.exports,"DEBUG_BUILD",()=>a);let a="undefined"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__}),X("9AttI",function(e,t){W(e.exports,"shouldDisableAutoInstrumentation",()=>i);var a=O("bsjXU");function i(e){let t=(0,a._optionalChain)([e,"call",e=>e(),"access",e=>e.getClient,"call",e=>e(),"optionalAccess",e=>e.getOptions,"call",e=>e()]);return"sentry"!==((0,a._optionalChain)([t,"optionalAccess",e=>e.instrumenter])||"sentry")}}),X("3SU1C",function(e,t){W(e.exports,"Express",()=>u);var a=O("bsjXU"),i=O("jpnao"),n=O("6szME"),o=O("gd055"),s=O("jVURz"),r=O("k2ErF"),p=O("9GA7E"),l=O("iD1up"),d=O("5NAaM"),c=O("9AttI");class u{static __initStatic(){this.id="Express"}constructor(e={}){this.name=u.id,this._router=e.router||e.app,this._methods=(Array.isArray(e.methods)?e.methods:[]).concat("use")}setupOnce(e,t){if(!this._router){d.DEBUG_BUILD&&(0,r.logger).error("ExpressIntegration is missing an Express instance");return}if((0,c.shouldDisableAutoInstrumentation)(t)){d.DEBUG_BUILD&&(0,r.logger).log("Express Integration is skipped because of instrumenter configuration.");return}(function(e,t=[]){t.forEach(t=>(function(e,t){let a=e[t];return e[t]=function(...e){return a.call(this,...e.map(e=>"function"==typeof e?m(e,t):Array.isArray(e)?e.map(e=>"function"==typeof e?m(e,t):e):e))},e})(e,t))})(this._router,this._methods),function(e){let t="settings"in e;t&&void 0===e._router&&e.lazyrouter&&e.lazyrouter();let c=t?e._router:e;if(!c){d.DEBUG_BUILD&&(0,r.logger).debug("Cannot instrument router for URL Parameterization (did not find a valid router)."),d.DEBUG_BUILD&&(0,r.logger).debug("Routing instrumentation is currently only supported in Express 4.");return}let u=Object.getPrototypeOf(c),m=u.process_params;u.process_params=function(e,t,r,d,c){r._reconstructedRoute||(r._reconstructedRoute="");let{layerRoutePath:u,isRegex:h,isArray:b,numExtraSegments:f}=function(e){var t;let i=(0,a._optionalChain)([e,"access",e=>e.route,"optionalAccess",e=>e.path]),r=(0,s.isRegExp)(i),p=Array.isArray(i);if(!i){let[t]=(0,o.GLOBAL_OBJ).process.versions.node.split(".").map(Number);t>=16&&(i=g(e.path,e.regexp,e.keys))}if(!i)return{isRegex:r,isArray:p,numExtraSegments:0};let l=p?Math.max(i.reduce((e,t)=>e+(0,n.getNumberOfUrlSegments)(t.toString()),0)-(0,n.getNumberOfUrlSegments)(e.path||""),0):0;return{layerRoutePath:(t=i,p?t.map(e=>e.toString()).join(","):t&&t.toString()),isRegex:r,isArray:p,numExtraSegments:l}}(e);(u||h||b)&&(r._hasParameters=!0);let v=(u||function(e,t,i){let o=(0,n.stripUrlQueryAndFragment)(e||""),s=(0,a._optionalChain)([o,"optionalAccess",e=>e.split,"call",e=>e("/"),"access",e=>e.filter,"call",e=>e(e=>!!e)]),r=0,p=(0,a._optionalChain)([t,"optionalAccess",e=>e.split,"call",e=>e("/"),"access",e=>e.filter,"call",e=>e(e=>!!e),"access",e=>e.length])||0;return(0,a._optionalChain)([i,"optionalAccess",e=>e.split,"call",e=>e("/"),"access",e=>e.filter,"call",e=>e(e=>(0,a._optionalChain)([s,"optionalAccess",e=>e[p+r]])===e&&(r+=1,!0)),"access",e=>e.join,"call",e=>e("/")])}(r.originalUrl,r._reconstructedRoute,e.path)||"").split("/").filter(e=>e.length>0&&(h||b||!e.includes("*"))).join("/");if(v&&v.length>0&&(r._reconstructedRoute+=`/${v}${h?"/":""}`),(0,n.getNumberOfUrlSegments)((0,n.stripUrlQueryAndFragment)(r.originalUrl||""))+f===(0,n.getNumberOfUrlSegments)(r._reconstructedRoute)){r._hasParameters||r._reconstructedRoute===r.originalUrl||(r._reconstructedRoute=r.originalUrl?(0,n.stripUrlQueryAndFragment)(r.originalUrl):r.originalUrl);let e=d.__sentry_transaction,t=e&&(0,l.spanToJSON)(e).data||{};if(e&&"custom"!==t[p.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]){let t=r._reconstructedRoute||"/",[a,n]=(0,i.extractPathForTransaction)(r,{path:!0,method:!0,customRoute:t});e.updateName(a),e.setAttribute(p.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,n)}}return m.call(this,e,t,r,d,c)}}(this._router)}}function m(e,t){let i=e.length;switch(i){case 2:return function(a,i){let n=i.__sentry_transaction;if(n){let a=n.startChild({description:e.name,op:`middleware.express.${t}`,origin:"auto.middleware.express"});i.once("finish",()=>{a.end()})}return e.call(this,a,i)};case 3:return function(i,n,o){let s=n.__sentry_transaction,r=(0,a._optionalChain)([s,"optionalAccess",e=>e.startChild,"call",a=>a({description:e.name,op:`middleware.express.${t}`,origin:"auto.middleware.express"})]);e.call(this,i,n,function(...e){(0,a._optionalChain)([r,"optionalAccess",e=>e.end,"call",e=>e()]),o.call(this,...e)})};case 4:return function(i,n,o,s){let r=o.__sentry_transaction,p=(0,a._optionalChain)([r,"optionalAccess",e=>e.startChild,"call",a=>a({description:e.name,op:`middleware.express.${t}`,origin:"auto.middleware.express"})]);e.call(this,i,n,o,function(...e){(0,a._optionalChain)([p,"optionalAccess",e=>e.end,"call",e=>e()]),s.call(this,...e)})};default:throw Error(`Express middleware takes 2-4 arguments. Got: ${i}`)}}u.__initStatic();let g=(e,t,i)=>{if(!e||!t||!i||0===Object.keys(i).length||!(0,a._optionalChain)([i,"access",e=>e[0],"optionalAccess",e=>e.offset]))return;let n=i.sort((e,t)=>e.offset-t.offset),o=RegExp(t,`${t.flags}d`).exec(e);if(!o||!o.indices)return;let[,...s]=o.indices;if(s.length!==n.length)return;let r=e,p=0;return s.forEach((e,t)=>{if(e){let[a,i]=e,o=r.substring(0,a-p),s=`:${n[t].name}`;r=o+s+r.substring(i-p),p+=i-a-s.length}}),r}}),X("2UNWp",function(e,t){W(e.exports,"GraphQL",()=>l);var a=O("bsjXU"),i=O("e4IUz"),n=O("jVURz"),o=O("fArVl"),s=O("k2ErF"),r=O("5NAaM"),p=O("9AttI");class l{static __initStatic(){this.id="GraphQL"}constructor(){this.name=l.id}loadDependency(){return this._module=this._module||(0,o.loadModule)("graphql/execution/execute.js")}setupOnce(e,t){if((0,p.shouldDisableAutoInstrumentation)(t)){r.DEBUG_BUILD&&(0,s.logger).log("GraphQL Integration is skipped because of instrumenter configuration.");return}let o=this.loadDependency();if(!o){r.DEBUG_BUILD&&(0,s.logger).error("GraphQL Integration was unable to require graphql/execution package.");return}(0,i.fill)(o,"execute",function(e){return function(...i){let o=t().getScope(),s=o.getSpan(),r=(0,a._optionalChain)([s,"optionalAccess",e=>e.startChild,"call",e=>e({description:"execute",op:"graphql.execute",origin:"auto.graphql.graphql"})]);(0,a._optionalChain)([o,"optionalAccess",e=>e.setSpan,"call",e=>e(r)]);let p=e.call(this,...i);return(0,n.isThenable)(p)?p.then(e=>((0,a._optionalChain)([r,"optionalAccess",e=>e.end,"call",e=>e()]),(0,a._optionalChain)([o,"optionalAccess",e=>e.setSpan,"call",e=>e(s)]),e)):((0,a._optionalChain)([r,"optionalAccess",e=>e.end,"call",e=>e()]),(0,a._optionalChain)([o,"optionalAccess",e=>e.setSpan,"call",e=>e(s)]),p)}})}}l.__initStatic()}),X("5N1eW",function(e,t){W(e.exports,"Mongo",()=>c);var a=O("bsjXU"),i=O("e4IUz"),n=O("jVURz"),o=O("fArVl"),s=O("k2ErF"),r=O("5NAaM"),p=O("9AttI");let l=["aggregate","bulkWrite","countDocuments","createIndex","createIndexes","deleteMany","deleteOne","distinct","drop","dropIndex","dropIndexes","estimatedDocumentCount","find","findOne","findOneAndDelete","findOneAndReplace","findOneAndUpdate","indexes","indexExists","indexInformation","initializeOrderedBulkOp","insertMany","insertOne","isCapped","mapReduce","options","parallelCollectionScan","rename","replaceOne","stats","updateMany","updateOne"],d={bulkWrite:["operations"],countDocuments:["query"],createIndex:["fieldOrSpec"],createIndexes:["indexSpecs"],deleteMany:["filter"],deleteOne:["filter"],distinct:["key","query"],dropIndex:["indexName"],find:["query"],findOne:["query"],findOneAndDelete:["filter"],findOneAndReplace:["filter","replacement"],findOneAndUpdate:["filter","update"],indexExists:["indexes"],insertMany:["docs"],insertOne:["doc"],mapReduce:["map","reduce"],rename:["newName"],replaceOne:["filter","doc"],updateMany:["filter","update"],updateOne:["filter","update"]};class c{static __initStatic(){this.id="Mongo"}constructor(e={}){this.name=c.id,this._operations=Array.isArray(e.operations)?e.operations:l,this._describeOperations=!("describeOperations"in e)||e.describeOperations,this._useMongoose=!!e.useMongoose}loadDependency(){let e=this._useMongoose?"mongoose":"mongodb";return this._module=this._module||(0,o.loadModule)(e)}setupOnce(e,t){if((0,p.shouldDisableAutoInstrumentation)(t)){r.DEBUG_BUILD&&(0,s.logger).log("Mongo Integration is skipped because of instrumenter configuration.");return}let a=this.loadDependency();if(!a){let e=this._useMongoose?"mongoose":"mongodb";r.DEBUG_BUILD&&(0,s.logger).error(`Mongo Integration was unable to require \`${e}\` package.`);return}this._instrumentOperations(a.Collection,this._operations,t)}_instrumentOperations(e,t,a){t.forEach(t=>this._patchOperation(e,t,a))}_patchOperation(e,t,o){if(!(t in e.prototype))return;let s=this._getSpanContextFromOperationArguments.bind(this);(0,i.fill)(e.prototype,t,function(e){return function(...i){let r=i[i.length-1],p=o(),l=p.getScope(),d=p.getClient(),c=l.getSpan(),u=(0,a._optionalChain)([d,"optionalAccess",e=>e.getOptions,"call",e=>e(),"access",e=>e.sendDefaultPii]);if("function"!=typeof r||"mapReduce"===t&&2===i.length){let o=(0,a._optionalChain)([c,"optionalAccess",e=>e.startChild,"call",e=>e(s(this,t,i,u))]),r=e.call(this,...i);if((0,n.isThenable)(r))return r.then(e=>((0,a._optionalChain)([o,"optionalAccess",e=>e.end,"call",e=>e()]),e));if(!r||"object"!=typeof r||!r.once||"function"!=typeof r.once)return(0,a._optionalChain)([o,"optionalAccess",e=>e.end,"call",e=>e()]),r;try{r.once("close",()=>{(0,a._optionalChain)([o,"optionalAccess",e=>e.end,"call",e=>e()])})}catch(e){(0,a._optionalChain)([o,"optionalAccess",e=>e.end,"call",e=>e()])}return r}let m=(0,a._optionalChain)([c,"optionalAccess",e=>e.startChild,"call",e=>e(s(this,t,i.slice(0,-1)))]);return e.call(this,...i.slice(0,-1),function(e,t){(0,a._optionalChain)([m,"optionalAccess",e=>e.end,"call",e=>e()]),r(e,t)})}})}_getSpanContextFromOperationArguments(e,t,a,i=!1){let n={"db.system":"mongodb","db.name":e.dbName,"db.operation":t,"db.mongodb.collection":e.collectionName},o={op:"db",origin:"auto.db.mongo",description:t,data:n},s=d[t],r=Array.isArray(this._describeOperations)?this._describeOperations.includes(t):this._describeOperations;if(!s||!r||!i)return o;try{if("mapReduce"===t){let[e,t]=a;n[s[0]]="string"==typeof e?e:e.name||"",n[s[1]]="string"==typeof t?t:t.name||""}else for(let e=0;ep);var a=O("bsjXU"),i=O("e4IUz"),n=O("fArVl"),o=O("k2ErF"),s=O("5NAaM"),r=O("9AttI");class p{static __initStatic(){this.id="Mysql"}constructor(){this.name=p.id}loadDependency(){return this._module=this._module||(0,n.loadModule)("mysql/lib/Connection.js")}setupOnce(e,t){let n;if((0,r.shouldDisableAutoInstrumentation)(t)){s.DEBUG_BUILD&&(0,o.logger).log("Mysql Integration is skipped because of instrumenter configuration.");return}let p=this.loadDependency();if(!p){s.DEBUG_BUILD&&(0,o.logger).error("Mysql Integration was unable to require `mysql` package.");return}try{p.prototype.connect=new Proxy(p.prototype.connect,{apply:(e,t,a)=>(n||(n=t.config),e.apply(t,a))})}catch(e){s.DEBUG_BUILD&&(0,o.logger).error("Mysql Integration was unable to instrument `mysql` config.")}function l(e){if(!e)return;let t=n?{"server.address":n.host,"server.port":n.port,"db.user":n.user}:{};Object.keys(t).forEach(a=>{e.setAttribute(a,t[a])}),e.end()}(0,i.fill)(p,"createQuery",function(e){return function(i,n,o){let s=t().getScope().getSpan(),r=(0,a._optionalChain)([s,"optionalAccess",e=>e.startChild,"call",e=>e({description:"string"==typeof i?i:i.sql,op:"db",origin:"auto.db.mysql",data:{"db.system":"mysql"}})]);if("function"==typeof o)return e.call(this,i,n,function(e,t,a){l(r),o(e,t,a)});if("function"==typeof n)return e.call(this,i,function(e,t,a){l(r),n(e,t,a)});let p=e.call(this,i,n);return p.on("end",()=>{l(r)}),p}})}}p.__initStatic()}),X("k9pSf",function(e,t){W(e.exports,"Postgres",()=>l);var a=O("bsjXU"),i=O("e4IUz"),n=O("jVURz"),o=O("fArVl"),s=O("k2ErF"),r=O("5NAaM"),p=O("9AttI");class l{static __initStatic(){this.id="Postgres"}constructor(e={}){this.name=l.id,this._usePgNative=!!e.usePgNative,this._module=e.module}loadDependency(){return this._module=this._module||(0,o.loadModule)("pg")}setupOnce(e,t){if((0,p.shouldDisableAutoInstrumentation)(t)){r.DEBUG_BUILD&&(0,s.logger).log("Postgres Integration is skipped because of instrumenter configuration.");return}let o=this.loadDependency();if(!o){r.DEBUG_BUILD&&(0,s.logger).error("Postgres Integration was unable to require `pg` package.");return}let l=this._usePgNative?(0,a._optionalChain)([o,"access",e=>e.native,"optionalAccess",e=>e.Client]):o.Client;if(!l){r.DEBUG_BUILD&&(0,s.logger).error("Postgres Integration was unable to access 'pg-native' bindings.");return}(0,i.fill)(l.prototype,"query",function(e){return function(i,o,s){let r=t().getScope().getSpan(),p={"db.system":"postgresql"};try{this.database&&(p["db.name"]=this.database),this.host&&(p["server.address"]=this.host),this.port&&(p["server.port"]=this.port),this.user&&(p["db.user"]=this.user)}catch(e){}let l=(0,a._optionalChain)([r,"optionalAccess",e=>e.startChild,"call",e=>e({description:"string"==typeof i?i:i.text,op:"db",origin:"auto.db.postgres",data:p})]);if("function"==typeof s)return e.call(this,i,o,function(e,t){(0,a._optionalChain)([l,"optionalAccess",e=>e.end,"call",e=>e()]),s(e,t)});if("function"==typeof o)return e.call(this,i,function(e,t){(0,a._optionalChain)([l,"optionalAccess",e=>e.end,"call",e=>e()]),o(e,t)});let d=void 0!==o?e.call(this,i,o):e.call(this,i);return(0,n.isThenable)(d)?d.then(e=>((0,a._optionalChain)([l,"optionalAccess",e=>e.end,"call",e=>e()]),e)):((0,a._optionalChain)([l,"optionalAccess",e=>e.end,"call",e=>e()]),d)}})}}l.__initStatic()}),X("cWSR5",function(e,t){W(e.exports,"Prisma",()=>l);var a=O("eCOpK"),i=O("9GA7E"),n=O("3hDCQ"),o=O("e4IUz"),s=O("k2ErF"),r=O("5NAaM"),p=O("9AttI");class l{static __initStatic(){this.id="Prisma"}constructor(e={}){var t;if(this.name=l.id,(t=e.client)&&t.$use&&!e.client._sentryInstrumented){(0,o.addNonEnumerableProperty)(e.client,"_sentryInstrumented",!0);let t={};try{let a=e.client._engineConfig;if(a){let{activeProvider:e,clientVersion:i}=a;e&&(t["db.system"]=e),i&&(t["db.prisma.version"]=i)}}catch(e){}e.client.$use((e,o)=>{if((0,p.shouldDisableAutoInstrumentation)(a.getCurrentHub))return o(e);let s=e.action,r=e.model;return(0,n.startSpan)({name:r?`${r} ${s}`:s,onlyIfParent:!0,op:"db.prisma",attributes:{[i.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]:"auto.db.prisma"},data:{...t,"db.operation":s}},()=>o(e))})}else r.DEBUG_BUILD&&(0,s.logger).warn("Unsupported Prisma client provided to PrismaIntegration. Provided client:",e.client)}setupOnce(){}}l.__initStatic()}),X("6G2Kr",function(e,t){W(e.exports,"instrumentCron",()=>o);var a=O("deYUe"),i=O("bdQRg");let n="Automatic instrumentation of CronJob only supports crontab string";function o(e,t){let o=!1;return new Proxy(e,{construct(e,s){let[r,p,l,d,c,...u]=s;if("string"!=typeof r)throw Error(n);if(o)throw Error(`A job named '${t}' has already been scheduled`);o=!0;let m=(0,i.replaceCronNames)(r);return new e(r,function(e,i){return(0,a.withMonitor)(t,()=>p(e,i),{schedule:{type:"crontab",value:m},...c?{timeZone:c}:{}})},l,d,c,...u)},get:(e,s)=>"from"===s?s=>{let{cronTime:r,onTick:p,timeZone:l}=s;if("string"!=typeof r)throw Error(n);if(o)throw Error(`A job named '${t}' has already been scheduled`);o=!0;let d=(0,i.replaceCronNames)(r);return s.onTick=(e,i)=>(0,a.withMonitor)(t,()=>p(e,i),{schedule:{type:"crontab",value:d},...l?{timeZone:l}:{}}),e.from(s)}:e[s]})}}),X("bdQRg",function(e,t){W(e.exports,"replaceCronNames",()=>i);let a=[["january","1"],["february","2"],["march","3"],["april","4"],["may","5"],["june","6"],["july","7"],["august","8"],["september","9"],["october","10"],["november","11"],["december","12"],["jan","1"],["feb","2"],["mar","3"],["apr","4"],["may","5"],["jun","6"],["jul","7"],["aug","8"],["sep","9"],["oct","10"],["nov","11"],["dec","12"],["sunday","0"],["monday","1"],["tuesday","2"],["wednesday","3"],["thursday","4"],["friday","5"],["saturday","6"],["sun","0"],["mon","1"],["tue","2"],["wed","3"],["thu","4"],["fri","5"],["sat","6"]];function i(e){return a.reduce((e,[t,a])=>e.replace(RegExp(t,"gi"),a),e)}}),X("gRbyu",function(e,t){W(e.exports,"instrumentNodeCron",()=>o);var a=O("bsjXU"),i=O("deYUe"),n=O("bdQRg");function o(e){return new Proxy(e,{get:(e,t)=>"schedule"===t&&e.schedule?new Proxy(e.schedule,{apply(e,t,o){let[s,,r]=o;if(!(0,a._optionalChain)([r,"optionalAccess",e=>e.name]))throw Error('Missing "name" for scheduled job. A name is required for Sentry check-in monitoring.');return(0,i.withMonitor)(r.name,()=>e.apply(t,o),{schedule:{type:"crontab",value:(0,n.replaceCronNames)(s)},timezone:(0,a._optionalChain)([r,"optionalAccess",e=>e.timezone])})}}):e[t]})}}),X("4dSSb",function(e,t){W(e.exports,"instrumentNodeSchedule",()=>n);var a=O("deYUe"),i=O("bdQRg");function n(e){return new Proxy(e,{get:(e,t)=>"scheduleJob"===t?new Proxy(e.scheduleJob,{apply(e,t,n){let[o,s]=n;if("string"!=typeof o||"string"!=typeof s)throw Error("Automatic instrumentation of 'node-schedule' requires the first parameter of 'scheduleJob' to be a job name string and the second parameter to be a crontab string");return(0,a.withMonitor)(o,()=>e.apply(t,n),{schedule:{type:"crontab",value:(0,i.replaceCronNames)(s)}})}}):e[t]})}}),X("aDQYo",function(e,t){W(e.exports,"addExtensionMethods",()=>o);var a=O("jfDa9"),i=O("eCOpK"),n=O("fArVl");function o(){(0,a.addTracingExtensions)(),(0,n.isNodeEnv)()&&function(){let t=(0,i.getMainCarrier)();if(!t.__SENTRY__)return;let a={mongodb:()=>new((0,n.dynamicRequire)(e,"./node/integrations/mongo")).Mongo,mongoose:()=>new((0,n.dynamicRequire)(e,"./node/integrations/mongo")).Mongo,mysql:()=>new((0,n.dynamicRequire)(e,"./node/integrations/mysql")).Mysql,pg:()=>new((0,n.dynamicRequire)(e,"./node/integrations/postgres")).Postgres},o=Object.keys(a).filter(e=>!!(0,n.loadModule)(e)).map(e=>{try{return a[e]()}catch(e){return}}).filter(e=>e);o.length>0&&(t.__SENTRY__.integrations=[...t.__SENTRY__.integrations||[],...o])}()}}),X("95REl",function(e,t){var a=O("ihzfm");t.operation=function(e){return new a(t.timeouts(e),{forever:e&&(e.forever||e.retries===1/0),unref:e&&e.unref,maxRetryTime:e&&e.maxRetryTime})},t.timeouts=function(e){if(e instanceof Array)return[].concat(e);var t={retries:10,factor:2,minTimeout:1e3,maxTimeout:1/0,randomize:!1};for(var a in e)t[a]=e[a];if(t.minTimeout>t.maxTimeout)throw Error("minTimeout is greater than maxTimeout");for(var i=[],n=0;n=this._maxRetryTime)return this._errors.push(e),this._errors.unshift(Error("RetryOperation timeout occurred")),!1;this._errors.push(e);var a=this._timeouts.shift();if(void 0===a){if(!this._cachedTimeouts)return!1;this._errors.splice(0,this._errors.length-1),a=this._cachedTimeouts.slice(-1)}var i=this;return this._timer=setTimeout(function(){i._attempts++,i._operationTimeoutCb&&(i._timeout=setTimeout(function(){i._operationTimeoutCb(i._attempts)},i._operationTimeout),i._options.unref&&i._timeout.unref()),i._fn(i._attempts)},a),this._options.unref&&this._timer.unref(),!0},a.prototype.attempt=function(e,t){this._fn=e,t&&(t.timeout&&(this._operationTimeout=t.timeout),t.cb&&(this._operationTimeoutCb=t.cb));var a=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){a._operationTimeoutCb()},a._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)},a.prototype.try=function(e){console.log("Using RetryOperation.try() is deprecated"),this.attempt(e)},a.prototype.start=function(e){console.log("Using RetryOperation.start() is deprecated"),this.attempt(e)},a.prototype.start=a.prototype.try,a.prototype.errors=function(){return this._errors},a.prototype.attempts=function(){return this._attempts},a.prototype.mainError=function(){if(0===this._errors.length)return null;for(var e={},t=null,a=0,i=0;i=a&&(t=n,a=s)}return t}});var L={},D=L&&L.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[a]}})}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),K=L&&L.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),J=L&&L.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.hasOwnProperty.call(e,a)&&D(t,e,a);return K(t,e),t},z=L&&L.__awaiter||function(e,t,a,i){return new(a||(a=Promise))(function(n,o){function s(e){try{p(i.next(e))}catch(e){o(e)}}function r(e){try{p(i.throw(e))}catch(e){o(e)}}function p(e){var t;e.done?n(e.value):((t=e.value)instanceof a?t:new a(function(e){e(t)})).then(s,r)}p((i=i.apply(e,t||[])).next())})};Object.defineProperty(L,"__esModule",{value:!0}),L.getIDToken=L.getState=L.saveState=L.group=L.endGroup=L.startGroup=L.info=L.notice=L.warning=L.error=L.debug=L.isDebug=L.setFailed=L.setCommandEcho=L.setOutput=L.getBooleanInput=L.getMultilineInput=L.getInput=L.addPath=L.setSecret=L.exportVariable=L.ExitCode=void 0;var j={},P=j&&j.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[a]}})}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),M=j&&j.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Q=j&&j.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.hasOwnProperty.call(e,a)&&P(t,e,a);return M(t,e),t};Object.defineProperty(j,"__esModule",{value:!0}),j.issue=j.issueCommand=void 0;const q=Q(w);var $={};function ee(e,t,a){let i=new et(e,t,a);process.stdout.write(i.toString()+q.EOL)}Object.defineProperty($,"__esModule",{value:!0}),$.toCommandProperties=$.toCommandValue=void 0,$.toCommandValue=function(e){return null==e?"":"string"==typeof e||e instanceof String?e:JSON.stringify(e)},$.toCommandProperties=function(e){return Object.keys(e).length?{title:e.title,file:e.file,line:e.startLine,endLine:e.endLine,col:e.startColumn,endColumn:e.endColumn}:{}},j.issueCommand=ee,j.issue=function(e,t=""){ee(e,{},t)};class et{constructor(e,t,a){e||(e="missing.command"),this.command=e,this.properties=t,this.message=a}toString(){var e;let t="::"+this.command;if(this.properties&&Object.keys(this.properties).length>0){t+=" ";let e=!0;for(let a in this.properties)if(this.properties.hasOwnProperty(a)){let i=this.properties[a];i&&(e?e=!1:t+=",",t+=`${a}=${$.toCommandValue(i).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}`)}}return t+`::${e=this.message,$.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}`}}var ea={},ei=ea&&ea.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[a]}})}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),en=ea&&ea.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),eo=ea&&ea.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.hasOwnProperty.call(e,a)&&ei(t,e,a);return en(t,e),t};Object.defineProperty(ea,"__esModule",{value:!0}),ea.prepareKeyValueMessage=ea.issueFileCommand=void 0;const es=eo(y),er=eo(w),ep=new Uint8Array(256);let el=ep.length;var ed=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;const ec=[];for(let e=0;e<256;++e)ec.push((e+256).toString(16).substr(1));var eu=function(e,t=0){let a=(ec[e[t+0]]+ec[e[t+1]]+ec[e[t+2]]+ec[e[t+3]]+"-"+ec[e[t+4]]+ec[e[t+5]]+"-"+ec[e[t+6]]+ec[e[t+7]]+"-"+ec[e[t+8]]+ec[e[t+9]]+"-"+ec[e[t+10]]+ec[e[t+11]]+ec[e[t+12]]+ec[e[t+13]]+ec[e[t+14]]+ec[e[t+15]]).toLowerCase();if(!("string"==typeof a&&ed.test(a)))throw TypeError("Stringified UUID is invalid");return a},em=function(e,t,a){let i=(e=e||{}).random||(e.rng||function(){return el>ep.length-16&&(F(E).randomFillSync(ep),el=0),ep.slice(el,el+=16)})();if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,t){a=a||0;for(let e=0;e<16;++e)t[a+e]=i[e];return t}return eu(i)};ea.issueFileCommand=function(e,t){let a=process.env[`GITHUB_${e}`];if(!a)throw Error(`Unable to find environment variable for file command ${e}`);if(!es.existsSync(a))throw Error(`Missing file at path: ${a}`);es.appendFileSync(a,`${$.toCommandValue(t)}${er.EOL}`,{encoding:"utf8"})},ea.prepareKeyValueMessage=function(e,t){let a=`ghadelimiter_${em()}`,i=$.toCommandValue(t);if(e.includes(a))throw Error(`Unexpected input: name should not contain the delimiter "${a}"`);if(i.includes(a))throw Error(`Unexpected input: value should not contain the delimiter "${a}"`);return`${e}<<${a}${er.EOL}${i}${er.EOL}${a}`};const eg=J(w),eh=J(A);var eb={},ef=eb&&eb.__awaiter||function(e,t,a,i){return new(a||(a=Promise))(function(n,o){function s(e){try{p(i.next(e))}catch(e){o(e)}}function r(e){try{p(i.throw(e))}catch(e){o(e)}}function p(e){var t;e.done?n(e.value):((t=e.value)instanceof a?t:new a(function(e){e(t)})).then(s,r)}p((i=i.apply(e,t||[])).next())})};Object.defineProperty(eb,"__esModule",{value:!0}),eb.OidcClient=void 0;var ev=O("iPsMt"),eI={},eC=eI&&eI.__awaiter||function(e,t,a,i){return new(a||(a=Promise))(function(n,o){function s(e){try{p(i.next(e))}catch(e){o(e)}}function r(e){try{p(i.throw(e))}catch(e){o(e)}}function p(e){var t;e.done?n(e.value):((t=e.value)instanceof a?t:new a(function(e){e(t)})).then(s,r)}p((i=i.apply(e,t||[])).next())})};Object.defineProperty(eI,"__esModule",{value:!0}),eI.PersonalAccessTokenCredentialHandler=eI.BearerCredentialHandler=eI.BasicCredentialHandler=void 0,eI.BasicCredentialHandler=class{constructor(e,t){this.username=e,this.password=t}prepareRequest(e){if(!e.headers)throw Error("The request has no headers");e.headers.Authorization=`Basic ${Buffer.from(`${this.username}:${this.password}`).toString("base64")}`}canHandleAuthentication(){return!1}handleAuthentication(){return eC(this,void 0,void 0,function*(){throw Error("not implemented")})}},eI.BearerCredentialHandler=class{constructor(e){this.token=e}prepareRequest(e){if(!e.headers)throw Error("The request has no headers");e.headers.Authorization=`Bearer ${this.token}`}canHandleAuthentication(){return!1}handleAuthentication(){return eC(this,void 0,void 0,function*(){throw Error("not implemented")})}},eI.PersonalAccessTokenCredentialHandler=class{constructor(e){this.token=e}prepareRequest(e){if(!e.headers)throw Error("The request has no headers");e.headers.Authorization=`Basic ${Buffer.from(`PAT:${this.token}`).toString("base64")}`}canHandleAuthentication(){return!1}handleAuthentication(){return eC(this,void 0,void 0,function*(){throw Error("not implemented")})}};class ey{static createHttpClient(e=!0,t=10){return new ev.HttpClient("actions/oidc-client",[new eI.BearerCredentialHandler(ey.getRequestToken())],{allowRetries:e,maxRetries:t})}static getRequestToken(){let e=process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN;if(!e)throw Error("Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable");return e}static getIDTokenUrl(){let e=process.env.ACTIONS_ID_TOKEN_REQUEST_URL;if(!e)throw Error("Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable");return e}static getCall(e){var t;return ef(this,void 0,void 0,function*(){let a=ey.createHttpClient(),i=null===(t=(yield a.getJson(e).catch(e=>{throw Error(`Failed to get ID Token.
+`);let{connect:u,buffered:m}=await c;if(e.emit("proxyConnect",u),this.emit("proxyConnect",u,e),200===u.statusCode){if(e.once("socket",l),t.secureEndpoint){r("Upgrading socket connection to TLS");let e=t.servername||t.host;return f.connect({...d(t,"host","path","port"),socket:a,servername:b.isIP(e)?void 0:e})}return a}a.destroy();let g=new b.Socket({writable:!1});return g.readable=!0,e.once("socket",e=>{r("Replaying proxy buffer for failed request"),e.push(m),e.push(null)}),g}}function l(e){e.resume()}function d(e,...t){let a;let i={};for(a in e)t.includes(a)||(i[a]=e[a]);return i}p.__initStatic()}),O("bsjXU",function(e,t){W(e.exports,"_optionalChain",()=>a);function a(e){let t;let a=e[0],i=1;for(;ia.call(t,...e)),t=void 0)}return a}}),O("iUFHX",function(e,t){W(e.exports,"Agent",()=>n);var a=X("g4u0U");let i=Symbol("AgentBaseInternalState");class n extends g.Agent{constructor(e){super(e),this[i]={}}isSecureEndpoint(e){if(e){if("boolean"==typeof e.secureEndpoint)return e.secureEndpoint;if("string"==typeof e.protocol)return"https:"===e.protocol}let{stack:t}=Error();return"string"==typeof t&&t.split("\n").some(e=>-1!==e.indexOf("(https.js:")||-1!==e.indexOf("node:https:"))}createSocket(e,t,a){let n={...t,secureEndpoint:this.isSecureEndpoint(t)};Promise.resolve().then(()=>this.connect(e,n)).then(o=>{if(o instanceof g.Agent)return o.addRequest(e,n);this[i].currentSocket=o,super.createSocket(e,t,a)},a)}createConnection(){let e=this[i].currentSocket;if(this[i].currentSocket=void 0,!e)throw Error("No socket was returned in the `connect()` function");return e}get defaultPort(){return(0,a._nullishCoalesce)(this[i].defaultPort,()=>"https:"===this.protocol?443:80)}set defaultPort(e){this[i]&&(this[i].defaultPort=e)}get protocol(){return(0,a._nullishCoalesce)(this[i].protocol,()=>this.isSecureEndpoint()?"https:":"http:")}set protocol(e){this[i]&&(this[i].protocol=e)}}}),O("xmdp1",function(e,t){W(e.exports,"parseProxyResponse",()=>n);var a=X("k2ErF");function i(...e){(0,a.logger).log("[https-proxy-agent:parse-proxy-response]",...e)}function n(e){return new Promise((t,a)=>{let n=0,o=[];function s(){let p=e.read();p?function(p){o.push(p),n+=p.length;let l=Buffer.concat(o,n),d=l.indexOf("\r\n\r\n");if(-1===d){i("have not received end of HTTP headers yet..."),s();return}let c=l.slice(0,d).toString("ascii").split("\r\n"),u=c.shift();if(!u)return e.destroy(),a(Error("No header received from proxy CONNECT response"));let m=u.split(" "),g=+m[1],h=m.slice(2).join(" "),b={};for(let t of c){if(!t)continue;let i=t.indexOf(":");if(-1===i)return e.destroy(),a(Error(`Invalid header from proxy CONNECT response: "${t}"`));let n=t.slice(0,i).toLowerCase(),o=t.slice(i+1).trimStart(),s=b[n];"string"==typeof s?b[n]=[s,o]:Array.isArray(s)?s.push(o):b[n]=o}i("got proxy server response: %o %o",u,b),r(),t({connect:{statusCode:g,statusText:h,headers:b},buffered:l})}(p):e.once("readable",s)}function r(){e.removeListener("end",p),e.removeListener("error",l),e.removeListener("readable",s)}function p(){r(),i("onend"),a(Error("Proxy connection ended before receiving CONNECT response"))}function l(e){r(),i("onerror %o",e),a(e)}e.on("error",l),e.on("end",p),s()})}}),O("1iHXL",function(e,t){W(e.exports,"defaultIntegrations",()=>Z),W(e.exports,"getDefaultIntegrations",()=>_),W(e.exports,"init",()=>R),W(e.exports,"getSentryRelease",()=>T),W(e.exports,"defaultStackParser",()=>E),W(e.exports,"isAutoSessionTrackingEnabled",()=>V);var a=X("bsjXU"),i=X("goIvU"),n=X("gd055"),o=X("2gq4F"),s=X("deYUe"),r=X("7B5Oi"),p=X("hVqbS"),l=X("eCOpK"),d=X("aT332"),c=X("c2wyx"),u=X("gi3Kq"),m=X("l9Z6v"),g=X("djgx3"),h=X("2QOEJ"),b=X("bCDzK"),f=X("ezym9"),v=X("koeOU"),I=X("8G0FT"),C=X("lVZId"),y=X("esVyk"),w=X("dDWKn"),x=X("kpGGI"),A=X("7wvFM"),G=X("aCFro"),B=X("jUJ2l"),S=X("ejtry");let Z=[(0,d.inboundFiltersIntegration)(),(0,r.functionToStringIntegration)(),(0,u.linkedErrorsIntegration)(),(0,m.requestDataIntegration)(),(0,b.consoleIntegration)(),(0,I.httpIntegration)(),(0,G.nativeNodeFetchintegration)(),(0,w.onUncaughtExceptionIntegration)(),(0,x.onUnhandledRejectionIntegration)(),(0,v.contextLinesIntegration)(),(0,C.localVariablesIntegration)(),(0,f.nodeContextIntegration)(),(0,y.modulesIntegration)()];function _(e){let t=(0,l.getMainCarrier)();return[...Z,...(0,a._optionalChain)([t,"access",e=>e.__SENTRY__,"optionalAccess",e=>e.integrations])||[]]}function R(e={}){(0,g.setNodeAsyncContextStrategy)(),void 0===e.defaultIntegrations&&(e.defaultIntegrations=_()),void 0===e.dsn&&process.env.SENTRY_DSN&&(e.dsn=process.env.SENTRY_DSN);let t=process.env.SENTRY_TRACES_SAMPLE_RATE;if(void 0===e.tracesSampleRate&&t){let a=parseFloat(t);isFinite(a)&&(e.tracesSampleRate=a)}if(void 0===e.release){let t=T();void 0!==t?e.release=t:e.autoSessionTracking=!1}void 0===e.environment&&process.env.SENTRY_ENVIRONMENT&&(e.environment=process.env.SENTRY_ENVIRONMENT),void 0===e.autoSessionTracking&&void 0!==e.dsn&&(e.autoSessionTracking=!0),void 0===e.instrumenter&&(e.instrumenter="sentry");let a={...e,stackParser:(0,i.stackParserFromStackParserOptions)(e.stackParser||E),integrations:(0,p.getIntegrationsToSetup)(e),transport:e.transport||S.makeNodeTransport};if((0,c.initAndBind)(e.clientClass||h.NodeClient,a),e.autoSessionTracking&&((0,s.startSession)(),process.on("beforeExit",()=>{let e=(0,l.getIsolationScope)().getSession();e&&!["exited","crashed"].includes(e.status)&&(0,s.endSession)()})),function(){if(!["false","n","no","off","0"].includes((process.env.SENTRY_USE_ENVIRONMENT||"").toLowerCase())){let e=process.env.SENTRY_TRACE,t=process.env.SENTRY_BAGGAGE,a=(0,o.propagationContextFromHeaders)(e,t);(0,s.getCurrentScope)().setPropagationContext(a)}}(),e.spotlight){let t=(0,s.getClient)();if(t&&t.addIntegration){for(let e of t.getOptions().integrations)t.addIntegration(e);t.addIntegration((0,A.spotlightIntegration)({sidecarUrl:"string"==typeof e.spotlight?e.spotlight:void 0}))}}}function V(e){if(void 0===e)return!1;let t=e&&e.getOptions();return!!t&&void 0!==t.autoSessionTracking&&t.autoSessionTracking}function T(e){return process.env.SENTRY_RELEASE?process.env.SENTRY_RELEASE:n.GLOBAL_OBJ.SENTRY_RELEASE&&n.GLOBAL_OBJ.SENTRY_RELEASE.id?n.GLOBAL_OBJ.SENTRY_RELEASE.id:process.env.GITHUB_SHA||process.env.COMMIT_REF||process.env.VERCEL_GIT_COMMIT_SHA||process.env.VERCEL_GITHUB_COMMIT_SHA||process.env.VERCEL_GITLAB_COMMIT_SHA||process.env.VERCEL_BITBUCKET_COMMIT_SHA||process.env.ZEIT_GITHUB_COMMIT_SHA||process.env.ZEIT_GITLAB_COMMIT_SHA||process.env.ZEIT_BITBUCKET_COMMIT_SHA||process.env.CF_PAGES_COMMIT_SHA||e}let E=(0,i.createStackParser)((0,i.nodeStackLineParser)((0,B.createGetModuleFromFilename)()))}),O("djgx3",function(e,t){W(e.exports,"setNodeAsyncContextStrategy",()=>o);var a=X("04aWn"),i=X("4hMJG"),n=X("aFGyw");function o(){a.NODE_VERSION.major>=14?(0,n.setHooksAsyncContextStrategy)():(0,i.setDomainAsyncContextStrategy)()}}),O("04aWn",function(e,t){W(e.exports,"NODE_VERSION",()=>a);let a=(0,X("1gT0D").parseSemver)(process.versions.node)}),O("4hMJG",function(e,t){W(e.exports,"setDomainAsyncContextStrategy",()=>s);var a=X("bsjXU"),i=X("eCOpK");function n(){let e=_.active;if(e)return(0,i.ensureHubOnCarrier)(e),(0,i.getHubFromCarrier)(e)}function o(e,t){let n=_.active;if(n&&(0,a._optionalChain)([t,"optionalAccess",e=>e.reuseExisting]))return e();let o=_.create(),s=function(e){let t={};return(0,i.ensureHubOnCarrier)(t,e),(0,i.getHubFromCarrier)(t)}(n?(0,i.getHubFromCarrier)(n):void 0);return(0,i.setHubOnCarrier)(o,s),o.bind(()=>e())()}function s(){(0,i.setAsyncContextStrategy)({getCurrentHub:n,runWithAsyncContext:o})}}),O("aFGyw",function(e,t){let a;W(e.exports,"setHooksAsyncContextStrategy",()=>o);var i=X("bsjXU"),n=X("eCOpK");function o(){function e(){return a.getStore()}a||(a=new R.AsyncLocalStorage),(0,n.setAsyncContextStrategy)({getCurrentHub:e,runWithAsyncContext:function(t,o){let s=e();if(s&&(0,i._optionalChain)([o,"optionalAccess",e=>e.reuseExisting]))return t();let r=function(e){let t={};return(0,n.ensureHubOnCarrier)(t,e),(0,n.getHubFromCarrier)(t)}(s);return a.run(r,()=>t())}})}}),O("bCDzK",function(e,t){W(e.exports,"consoleIntegration",()=>r),W(e.exports,"Console",()=>p);var a=X("deYUe"),i=X("hVqbS"),n=X("kMFvf"),o=X("gZn4V");let s="Console",r=(0,i.defineIntegration)(()=>({name:s,setupOnce(){},setup(e){(0,n.addConsoleInstrumentationHandler)(({args:t,level:i})=>{(0,a.getClient)()===e&&(0,a.addBreadcrumb)({category:"console",level:(0,o.severityLevelFromString)(i),message:C.format.apply(void 0,t)},{input:[...t],level:i})})}})),p=(0,i.convertIntegrationFnToClass)(s,r)}),O("kMFvf",function(e,t){W(e.exports,"addConsoleInstrumentationHandler",()=>s);var a=X("k2ErF"),i=X("e4IUz"),n=X("gd055"),o=X("hxO1L");function s(e){let t="console";(0,o.addHandler)(t,e),(0,o.maybeInstrument)(t,r)}function r(){"console"in n.GLOBAL_OBJ&&(0,a.CONSOLE_LEVELS).forEach(function(e){e in n.GLOBAL_OBJ.console&&(0,i.fill)(n.GLOBAL_OBJ.console,e,function(t){return a.originalConsoleMethods[e]=t,function(...t){(0,o.triggerHandlers)("console",{args:t,level:e});let i=a.originalConsoleMethods[e];i&&i.apply(n.GLOBAL_OBJ.console,t)}})})}}),O("gZn4V",function(e,t){W(e.exports,"severityLevelFromString",()=>i);let a=["fatal","error","warning","log","info","debug"];function i(e){return"warn"===e?"warning":a.includes(e)?e:"log"}}),O("ezym9",function(e,t){W(e.exports,"nodeContextIntegration",()=>r),W(e.exports,"Context",()=>p);var a=X("bsjXU"),i=X("hVqbS");let n=(0,C.promisify)(y.readFile),o=(0,C.promisify)(y.readdir),s="Context",r=(0,i.defineIntegration)((e={})=>{let t;let i={app:!0,os:!0,device:!0,culture:!0,cloudResource:!0,...e};async function n(e){var i;void 0===t&&(t=o());let n=(i=await t,(0,a._optionalChain)([i,"optionalAccess",e=>e.app,"optionalAccess",e=>e.app_memory])&&(i.app.app_memory=process.memoryUsage().rss),(0,a._optionalChain)([i,"optionalAccess",e=>e.device,"optionalAccess",e=>e.free_memory])&&(i.device.free_memory=w.freemem()),i);return e.contexts={...e.contexts,app:{...n.app,...(0,a._optionalChain)([e,"access",e=>e.contexts,"optionalAccess",e=>e.app])},os:{...n.os,...(0,a._optionalChain)([e,"access",e=>e.contexts,"optionalAccess",e=>e.os])},device:{...n.device,...(0,a._optionalChain)([e,"access",e=>e.contexts,"optionalAccess",e=>e.device])},culture:{...n.culture,...(0,a._optionalChain)([e,"access",e=>e.contexts,"optionalAccess",e=>e.culture])},cloud_resource:{...n.cloud_resource,...(0,a._optionalChain)([e,"access",e=>e.contexts,"optionalAccess",e=>e.cloud_resource])}},e}async function o(){let e={};if(i.os&&(e.os=await l()),i.app&&(e.app=function(){let e=process.memoryUsage().rss;return{app_start_time:new Date(Date.now()-1e3*process.uptime()).toISOString(),app_memory:e}}()),i.device&&(e.device=function(e){let t;let a={};try{t=w.uptime&&w.uptime()}catch(e){}if("number"==typeof t&&(a.boot_time=new Date(Date.now()-1e3*t).toISOString()),a.arch=w.arch(),(!0===e||e.memory)&&(a.memory_size=w.totalmem(),a.free_memory=w.freemem()),!0===e||e.cpu){let e=w.cpus();if(e&&e.length){let t=e[0];a.processor_count=e.length,a.cpu_description=t.model,a.processor_frequency=t.speed}}return a}(i.device)),i.culture){let t=function(){try{if("string"!=typeof process.versions.icu)return;let e=new Date(9e8),t=new Intl.DateTimeFormat("es",{month:"long"});if("enero"===t.format(e)){let e=Intl.DateTimeFormat().resolvedOptions();return{locale:e.locale,timezone:e.timeZone}}}catch(e){}}();t&&(e.culture=t)}return i.cloudResource&&(e.cloud_resource=function(){if(process.env.VERCEL)return{"cloud.provider":"vercel","cloud.region":process.env.VERCEL_REGION};if(process.env.AWS_REGION)return{"cloud.provider":"aws","cloud.region":process.env.AWS_REGION,"cloud.platform":process.env.AWS_EXECUTION_ENV};if(process.env.GCP_PROJECT)return{"cloud.provider":"gcp"};if(process.env.ALIYUN_REGION_ID)return{"cloud.provider":"alibaba_cloud","cloud.region":process.env.ALIYUN_REGION_ID};if(process.env.WEBSITE_SITE_NAME&&process.env.REGION_NAME)return{"cloud.provider":"azure","cloud.region":process.env.REGION_NAME};if(process.env.IBM_CLOUD_REGION)return{"cloud.provider":"ibm_cloud","cloud.region":process.env.IBM_CLOUD_REGION};if(process.env.TENCENTCLOUD_REGION)return{"cloud.provider":"tencent_cloud","cloud.region":process.env.TENCENTCLOUD_REGION,"cloud.account.id":process.env.TENCENTCLOUD_APPID,"cloud.availability_zone":process.env.TENCENTCLOUD_ZONE};else if(process.env.NETLIFY)return{"cloud.provider":"netlify"};else if(process.env.FLY_REGION)return{"cloud.provider":"fly.io","cloud.region":process.env.FLY_REGION};else if(process.env.DYNO)return{"cloud.provider":"heroku"};else return}()),e}return{name:s,setupOnce(){},processEvent:e=>n(e)}}),p=(0,i.convertIntegrationFnToClass)(s,r);async function l(){let e=w.platform();switch(e){case"darwin":return g();case"linux":return b();default:return{name:d[e]||e,version:w.release()}}}let d={aix:"IBM AIX",freebsd:"FreeBSD",openbsd:"OpenBSD",sunos:"SunOS",win32:"Windows"},c=[{name:"fedora-release",distros:["Fedora"]},{name:"redhat-release",distros:["Red Hat Linux","Centos"]},{name:"redhat_version",distros:["Red Hat Linux"]},{name:"SuSE-release",distros:["SUSE Linux"]},{name:"lsb-release",distros:["Ubuntu Linux","Arch Linux"]},{name:"debian_version",distros:["Debian"]},{name:"debian_release",distros:["Debian"]},{name:"arch-release",distros:["Arch Linux"]},{name:"gentoo-release",distros:["Gentoo Linux"]},{name:"novell-release",distros:["SUSE Linux"]},{name:"alpine-release",distros:["Alpine Linux"]}],u={alpine:e=>e,arch:e=>m(/distrib_release=(.*)/,e),centos:e=>m(/release ([^ ]+)/,e),debian:e=>e,fedora:e=>m(/release (..)/,e),mint:e=>m(/distrib_release=(.*)/,e),red:e=>m(/release ([^ ]+)/,e),suse:e=>m(/VERSION = (.*)\n/,e),ubuntu:e=>m(/distrib_release=(.*)/,e)};function m(e,t){let a=e.exec(t);return a?a[1]:void 0}async function g(){let e={kernel_version:w.release(),name:"Mac OS X",version:`10.${Number(w.release().split(".")[0])-4}`};try{let t=await new Promise((e,t)=>{(0,V.execFile)("/usr/bin/sw_vers",(a,i)=>{if(a){t(a);return}e(i)})});e.name=m(/^ProductName:\s+(.*)$/m,t),e.version=m(/^ProductVersion:\s+(.*)$/m,t),e.build=m(/^BuildVersion:\s+(.*)$/m,t)}catch(e){}return e}function h(e){return e.split(" ")[0].toLowerCase()}async function b(){let e={kernel_version:w.release(),name:"Linux"};try{let t=await o("/etc"),a=c.find(e=>t.includes(e.name));if(!a)return e;let i=(0,A.join)("/etc",a.name),s=(await n(i,{encoding:"utf-8"})).toLowerCase(),{distros:r}=a;e.name=r.find(e=>s.indexOf(h(e))>=0)||r[0];let p=h(e.name);e.version=u[p](s)}catch(e){}return e}}),O("koeOU",function(e,t){W(e.exports,"contextLinesIntegration",()=>p),W(e.exports,"ContextLines",()=>l);var a=X("bsjXU"),i=X("1gT0D"),n=X("kTF8L"),o=X("hVqbS");let s=new n.LRUMap(100),r="ContextLines",p=(0,o.defineIntegration)((e={})=>{let t=void 0!==e.frameContextLines?e.frameContextLines:7;return{name:r,setupOnce(){},processEvent:e=>d(e,t)}}),l=(0,o.convertIntegrationFnToClass)(r,p);async function d(e,t){let n={},o=[];if(t>0&&(0,a._optionalChain)([e,"access",e=>e.exception,"optionalAccess",e=>e.values])){for(let t of e.exception.values)if((0,a._optionalChain)([t,"access",e=>e.stacktrace,"optionalAccess",e=>e.frames]))for(let e=t.stacktrace.frames.length-1;e>=0;e--){let a=t.stacktrace.frames[e];!a.filename||n[a.filename]||s.get(a.filename)||(o.push(c(a.filename)),n[a.filename]=1)}}if(o.length>0&&await Promise.all(o),t>0&&(0,a._optionalChain)([e,"access",e=>e.exception,"optionalAccess",e=>e.values]))for(let a of e.exception.values)a.stacktrace&&a.stacktrace.frames&&await function(e,t){for(let a of e)if(a.filename&&void 0===a.context_line){let e=s.get(a.filename);if(e)try{(0,i.addContextToFrame)(e,a,t)}catch(e){}}}(a.stacktrace.frames,t);return e}async function c(e){let t=s.get(e);if(null===t)return null;if(void 0!==t)return t;let a=null;try{a=(await new Promise((t,a)=>{(0,y.readFile)(e,"utf8",(e,i)=>{e?a(e):t(i)})})).split("\n")}catch(e){}return s.set(e,a),a}}),O("kTF8L",function(e,t){W(e.exports,"LRUMap",()=>a);class a{constructor(e){this._maxSize=e,this._cache=new Map}get size(){return this._cache.size}get(e){let t=this._cache.get(e);if(void 0!==t)return this._cache.delete(e),this._cache.set(e,t),t}set(e,t){this._cache.size>=this._maxSize&&this._cache.delete(this._cache.keys().next().value),this._cache.set(e,t)}remove(e){let t=this._cache.get(e);return t&&this._cache.delete(e),t}clear(){this._cache.clear()}keys(){return Array.from(this._cache.keys())}values(){let e=[];return this._cache.forEach(t=>e.push(t)),e}}}),O("8G0FT",function(e,t){W(e.exports,"Http",()=>A),W(e.exports,"httpIntegration",()=>x);var a=X("bsjXU"),i=X("e4IUz"),n=X("hSiIl"),o=X("2gq4F"),s=X("k2ErF"),r=X("kTF8L"),p=X("c6AFW"),l=X("deYUe"),d=X("hVqbS"),c=X("3hDCQ"),u=X("eCOpK"),m=X("cCmfn"),b=X("7z6ft"),f=X("ehWym"),v=X("b2ZPh"),I=X("iD1up"),C=X("2xRAP"),y=X("04aWn"),w=X("bmtY7");let x=(0,d.defineIntegration)((e={})=>{let{breadcrumbs:t,tracing:a,shouldCreateSpanForRequest:n}=e;return new A({breadcrumbs:t,tracing:!1!==a&&(0,i.dropUndefinedKeys)({enableIfHasTracingEnabled:!0!==a||void 0,shouldCreateSpanForRequest:n})})});class A{static __initStatic(){this.id="Http"}__init(){this.name=A.id}constructor(e={}){A.prototype.__init.call(this),this._breadcrumbs=void 0===e.breadcrumbs||e.breadcrumbs,this._tracing=e.tracing?!0===e.tracing?{}:e.tracing:void 0}setupOnce(e,t){var n,o;let r=(0,a._optionalChain)([t,"call",e=>e(),"access",e=>e.getClient,"call",e=>e(),"optionalAccess",e=>e.getOptions,"call",e=>e()]),p=void 0!==(n=this._tracing)&&(!n.enableIfHasTracingEnabled||(0,b.hasTracingEnabled)(r));if(!this._breadcrumbs&&!p)return;if(r&&"sentry"!==r.instrumenter){C.DEBUG_BUILD&&(0,s.logger).log("HTTP Integration is skipped because of instrumenter configuration.");return}let l=(o=this._tracing,p?(0,a._optionalChain)([o,"optionalAccess",e=>e.shouldCreateSpanForRequest])||(0,a._optionalChain)([r,"optionalAccess",e=>e.shouldCreateSpanForRequest]):()=>!1),d=(0,a._optionalChain)([r,"optionalAccess",e=>e.tracePropagationTargets])||(0,a._optionalChain)([this,"access",e=>e._tracing,"optionalAccess",e=>e.tracePropagationTargets]),c=G(g,this._breadcrumbs,l,d);if((0,i.fill)(g,"get",c),(0,i.fill)(g,"request",c),y.NODE_VERSION.major>8){let e=G(h,this._breadcrumbs,l,d);(0,i.fill)(h,"get",e),(0,i.fill)(h,"request",e)}}}function G(e,t,i,d){let g=new r.LRUMap(100),h=new r.LRUMap(100),b=e=>{if(void 0===i)return!0;let t=g.get(e);if(void 0!==t)return t;let a=i(e);return g.set(e,a),a},y=e=>{if(void 0===d)return!0;let t=h.get(e);if(void 0!==t)return t;let a=(0,p.stringMatchesSomePattern)(e,d);return h.set(e,a),a};function x(e,t,a,i){(0,u.getCurrentHub)().getIntegration(A)&&(0,l.addBreadcrumb)({category:"http",data:{status_code:i&&i.statusCode,...t},type:"http"},{event:e,request:a,response:i})}return function(i){return function(...r){let p=(0,w.normalizeRequestArgs)(e,r),d=p[0],g=(0,w.extractRawUrl)(d),h=(0,w.extractUrl)(d),A=(0,l.getClient)();if((0,f.isSentryRequestUrl)(h,A))return i.apply(e,p);let G=(0,l.getCurrentScope)(),B=(0,u.getIsolationScope)(),S=(0,c.getActiveSpan)(),Z=function(e,t){let a={url:e,"http.method":t.method||"GET"};return t.hash&&(a["http.fragment"]=t.hash.substring(1)),t.search&&(a["http.query"]=t.search.substring(1)),a}(h,d),_=b(g)?(0,a._optionalChain)([S,"optionalAccess",e=>e.startChild,"call",e=>e({op:"http.client",origin:"auto.http.node.http",description:`${Z["http.method"]} ${Z.url}`,data:Z})]):void 0;if(A&&y(g)){var R;let{traceId:e,spanId:t,sampled:a,dsc:i}={...B.getPropagationContext(),...G.getPropagationContext()},r=_?(0,I.spanToTraceHeader)(_):(0,o.generateSentryTraceHeader)(e,t,a);R=(0,n.dynamicSamplingContextToSentryBaggageHeader)(i||(_?(0,m.getDynamicSamplingContextFromSpan)(_):(0,m.getDynamicSamplingContextFromClient)(e,A,G))),(d.headers||{})["sentry-trace"]||(C.DEBUG_BUILD&&(0,s.logger).log(`[Tracing] Adding sentry-trace header ${r} to outgoing request to "${h}": `),d.headers={...d.headers,"sentry-trace":r,...R&&R.length>0&&{baggage:d.headers&&d.headers.baggage?R?Array.isArray(d.headers.baggage)?[...d.headers.baggage,R]:[d.headers.baggage,R]:d.headers.baggage:R}})}else C.DEBUG_BUILD&&(0,s.logger).log(`[Tracing] Not adding sentry-trace header to outgoing request (${h}) due to mismatching tracePropagationTargets option.`);return i.apply(e,p).once("response",function(e){t&&x("response",Z,this,e),_&&(e.statusCode&&(0,v.setHttpStatus)(_,e.statusCode),_.updateName((0,w.cleanSpanDescription)((0,I.spanToJSON)(_).description||"",d,this)||""),_.end())}).once("error",function(){t&&x("error",Z,this),_&&((0,v.setHttpStatus)(_,500),_.updateName((0,w.cleanSpanDescription)((0,I.spanToJSON)(_).description||"",d,this)||""),_.end())})}}}A.__initStatic()}),O("2xRAP",function(e,t){W(e.exports,"DEBUG_BUILD",()=>a);let a="undefined"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__}),O("bmtY7",function(e,t){W(e.exports,"extractRawUrl",()=>n),W(e.exports,"extractUrl",()=>o),W(e.exports,"cleanSpanDescription",()=>s),W(e.exports,"normalizeRequestArgs",()=>p);var a=X("bsjXU"),i=X("04aWn");function n(e){let{protocol:t,hostname:a,port:i}=l(e),n=e.path?e.path:"/";return`${t}//${a}${i}${n}`}function o(e){let{protocol:t,hostname:a,port:i}=l(e),n=e.pathname||"/",o=e.auth?function(e){let[t,a]=e.split(":");return`${t?"[Filtered]":""}:${a?"[Filtered]":""}@`}(e.auth):"";return`${t}//${o}${a}${i}${n}`}function s(e,t,i){if(!e)return e;let[n,s]=e.split(" ");return t.host&&!t.protocol&&(t.protocol=(0,a._optionalChain)([i,"optionalAccess",e=>e.agent,"optionalAccess",e=>e.protocol]),s=o(t)),(0,a._optionalChain)([s,"optionalAccess",e=>e.startsWith,"call",e=>e("///")])&&(s=s.slice(2)),`${n} ${s}`}function r(e){let t={protocol:e.protocol,hostname:"string"==typeof e.hostname&&e.hostname.startsWith("[")?e.hostname.slice(1,-1):e.hostname,hash:e.hash,search:e.search,pathname:e.pathname,path:`${e.pathname||""}${e.search||""}`,href:e.href};return""!==e.port&&(t.port=Number(e.port)),(e.username||e.password)&&(t.auth=`${e.username}:${e.password}`),t}function p(e,t){let n,o;if("function"==typeof t[t.length-1]&&(n=t.pop()),"string"==typeof t[0])o=r(new G.URL(t[0]));else if(t[0]instanceof G.URL)o=r(t[0]);else{o=t[0];try{let e=new G.URL(o.path||"",`${o.protocol||"http:"}//${o.hostname}`);o={pathname:e.pathname,search:e.search,hash:e.hash,...o}}catch(e){}}return(2===t.length&&(o={...o,...t[1]}),void 0===o.protocol&&(i.NODE_VERSION.major>8?o.protocol=(0,a._optionalChain)([(0,a._optionalChain)([e,"optionalAccess",e=>e.globalAgent]),"optionalAccess",e=>e.protocol])||(0,a._optionalChain)([o.agent,"optionalAccess",e=>e.protocol])||(0,a._optionalChain)([o._defaultAgent,"optionalAccess",e=>e.protocol]):o.protocol=(0,a._optionalChain)([o.agent,"optionalAccess",e=>e.protocol])||(0,a._optionalChain)([o._defaultAgent,"optionalAccess",e=>e.protocol])||(0,a._optionalChain)([(0,a._optionalChain)([e,"optionalAccess",e=>e.globalAgent]),"optionalAccess",e=>e.protocol])),n)?[o,n]:[o]}function l(e){let t=e.protocol||"",a=e.hostname||e.host||"",i=!e.port||80===e.port||443===e.port||/^(.*):(\d+)$/.test(a)?"":`:${e.port}`;return{protocol:t,hostname:a,port:i}}}),O("lVZId",function(e,t){W(e.exports,"LocalVariables",()=>i),W(e.exports,"localVariablesIntegration",()=>n);var a=X("oF3fg");let i=a.LocalVariablesSync,n=a.localVariablesSyncIntegration}),O("oF3fg",function(e,t){W(e.exports,"localVariablesSyncIntegration",()=>m),W(e.exports,"LocalVariablesSync",()=>g);var a=X("bsjXU"),i=X("k2ErF"),n=X("kTF8L"),o=X("hVqbS"),s=X("deYUe"),r=X("04aWn"),p=X("1KgWA");function l(e){let t=[],a=!1;function i(i){t=[],a||(a=!0,e(i))}return t.push(i),{add:function(e){t.push(e)},next:function(e){let a=t.pop()||i;try{a(e)}catch(t){i(e)}}}}class d{constructor(){let{Session:e}=T;this._session=new e}configureAndConnect(e,t){this._session.connect(),this._session.on("Debugger.paused",t=>{e(t,()=>{this._session.post("Debugger.resume")})}),this._session.post("Debugger.enable"),this._session.post("Debugger.setPauseOnExceptions",{state:t?"all":"uncaught"})}setPauseOnExceptions(e){this._session.post("Debugger.setPauseOnExceptions",{state:e?"all":"uncaught"})}getLocalVariables(e,t){this._getProperties(e,e=>{let{add:i,next:n}=l(t);for(let t of e)if((0,a._optionalChain)([t,"optionalAccess",e=>e.value,"optionalAccess",e=>e.objectId])&&"Array"===(0,a._optionalChain)([t,"optionalAccess",e=>e.value,"access",e=>e.className])){let e=t.value.objectId;i(a=>this._unrollArray(e,t.name,a,n))}else if((0,a._optionalChain)([t,"optionalAccess",e=>e.value,"optionalAccess",e=>e.objectId])&&"Object"===(0,a._optionalChain)([t,"optionalAccess",e=>e.value,"optionalAccess",e=>e.className])){let e=t.value.objectId;i(a=>this._unrollObject(e,t.name,a,n))}else((0,a._optionalChain)([t,"optionalAccess",e=>e.value,"optionalAccess",e=>e.value])||(0,a._optionalChain)([t,"optionalAccess",e=>e.value,"optionalAccess",e=>e.description]))&&i(e=>this._unrollOther(t,e,n));n({})})}_getProperties(e,t){this._session.post("Runtime.getProperties",{objectId:e,ownProperties:!0},(e,a)=>{e?t([]):t(a.result)})}_unrollArray(e,t,i,n){this._getProperties(e,e=>{i[t]=e.filter(e=>"length"!==e.name&&!isNaN(parseInt(e.name,10))).sort((e,t)=>parseInt(e.name,10)-parseInt(t.name,10)).map(e=>(0,a._optionalChain)([e,"optionalAccess",e=>e.value,"optionalAccess",e=>e.value])),n(i)})}_unrollObject(e,t,i,n){this._getProperties(e,e=>{i[t]=e.map(e=>[e.name,(0,a._optionalChain)([e,"optionalAccess",e=>e.value,"optionalAccess",e=>e.value])]).reduce((e,[t,a])=>(e[t]=a,e),{}),n(i)})}_unrollOther(e,t,i){(0,a._optionalChain)([e,"optionalAccess",e=>e.value,"optionalAccess",e=>e.value])?t[e.name]=e.value.value:(0,a._optionalChain)([e,"optionalAccess",e=>e.value,"optionalAccess",e=>e.description])&&"function"!==(0,a._optionalChain)([e,"optionalAccess",e=>e.value,"optionalAccess",e=>e.type])&&(t[e.name]=`<${e.value.description}>`),i(t)}}function c(){try{return new d}catch(e){return}}let u="LocalVariables",m=(0,o.defineIntegration)((e={},t=c())=>{let o;let d=new n.LRUMap(20),m=!1;return{name:u,setupOnce(){let n=(0,s.getClient)(),c=(0,a._optionalChain)([n,"optionalAccess",e=>e.getOptions,"call",e=>e()]);if(t&&(0,a._optionalChain)([c,"optionalAccess",e=>e.includeLocalVariables])){if(r.NODE_VERSION.major<18){(0,i.logger).log("The `LocalVariables` integration is only supported on Node >= v18.");return}let n=!1!==e.captureAllExceptions;if(t.configureAndConnect((e,i)=>(function(e,{params:{reason:i,data:n,callFrames:s}},r){if("exception"!==i&&"promiseRejection"!==i){r();return}(0,a._optionalChain)([o,"optionalCall",e=>e()]);let c=(0,p.hashFromStack)(e,(0,a._optionalChain)([n,"optionalAccess",e=>e.description]));if(void 0==c){r();return}let{add:u,next:m}=l(e=>{d.set(c,e),r()});for(let e=0;e"local"===e.type),p="global"!==o.className&&o.className?`${o.className}.${n}`:n;if(void 0===(0,a._optionalChain)([r,"optionalAccess",e=>e.object,"access",e=>e.objectId]))u(t=>{t[e]={function:p},m(t)});else{let i=r.object.objectId;u(n=>(0,a._optionalChain)([t,"optionalAccess",e=>e.getLocalVariables,"call",t=>t(i,t=>{n[e]={function:p,vars:t},m(n)})]))}}m([])})(c.stackParser,e,i),n),n){let n=e.maxExceptionsPerSecond||50;o=(0,p.createRateLimiter)(n,()=>{(0,i.logger).log("Local variables rate-limit lifted."),(0,a._optionalChain)([t,"optionalAccess",e=>e.setPauseOnExceptions,"call",e=>e(!0)])},e=>{(0,i.logger).log(`Local variables rate-limit exceeded. Disabling capturing of caught exceptions for ${e} seconds.`),(0,a._optionalChain)([t,"optionalAccess",e=>e.setPauseOnExceptions,"call",e=>e(!1)])})}m=!0}},processEvent:e=>m?function(e){for(let t of(0,a._optionalChain)([e,"optionalAccess",e=>e.exception,"optionalAccess",e=>e.values])||[])!function(e){let t=(0,p.hashFrames)((0,a._optionalChain)([e,"optionalAccess",e=>e.stacktrace,"optionalAccess",e=>e.frames]));if(void 0===t)return;let i=d.remove(t);if(void 0===i)return;let n=(0,a._optionalChain)([e,"access",e=>e.stacktrace,"optionalAccess",e=>e.frames,"optionalAccess",e=>e.length])||0;for(let t=0;te.stacktrace,"optionalAccess",e=>e.frames,"optionalAccess",e=>e[o]])||!i[t])break;void 0!==i[t].vars&&!1!==e.stacktrace.frames[o].in_app&&(0,p.functionNamesMatch)(e.stacktrace.frames[o].function,i[t].function)&&(e.stacktrace.frames[o].vars=i[t].vars)}}(t);return e}(e):e,_getCachedFramesCount:()=>d.size,_getFirstCachedFrame:()=>d.values()[0]}}),g=(0,o.convertIntegrationFnToClass)(u,m)}),O("1KgWA",function(e,t){function a(e,t,a){let i=0,n=5,o=0;return setInterval(()=>{0===o?i>e&&(a(n*=2),n>86400&&(n=86400),o=n):0==(o-=1)&&t(),i=0},1e3).unref(),()=>{i+=1}}function i(e){return void 0!==e&&(0===e.length||"?"===e||""===e)}function n(e,t){return e===t||i(e)&&i(t)}function o(e){if(void 0!==e)return e.slice(-10).reduce((e,t)=>`${e},${t.function},${t.lineno},${t.colno}`,"")}function s(e,t){if(void 0!==t)return o(e(t,1))}W(e.exports,"createRateLimiter",()=>a),W(e.exports,"functionNamesMatch",()=>n),W(e.exports,"hashFrames",()=>o),W(e.exports,"hashFromStack",()=>s)}),O("esVyk",function(e,t){let a;W(e.exports,"modulesIntegration",()=>o),W(e.exports,"Modules",()=>s);var i=X("hVqbS");let n="Modules",o=(0,i.defineIntegration)(()=>({name:n,setupOnce(){},processEvent:e=>(e.modules={...e.modules,...(a||(a=function(){let e=[],t=function(){try{return[]}catch(e){return[]}}(),a={},i={};return t.forEach(t=>{let n=t,o=()=>{let t=n;if(!(n=(0,A.dirname)(t))||t===n||i[t])return;if(0>e.indexOf(n))return o();let s=(0,A.join)(t,"package.json");if(i[t]=!0,!(0,y.existsSync)(s))return o();try{let e=JSON.parse((0,y.readFileSync)(s,"utf8"));a[e.name]=e.version}catch(e){}};o()}),a}()),a)},e)})),s=(0,i.convertIntegrationFnToClass)(n,o)}),O("dDWKn",function(e,t){W(e.exports,"onUncaughtExceptionIntegration",()=>p),W(e.exports,"OnUncaughtException",()=>l);var a=X("deYUe"),i=X("hVqbS"),n=X("k2ErF"),o=X("2xRAP"),s=X("7xJCG");let r="OnUncaughtException",p=(0,i.defineIntegration)((e={})=>{let t={exitEvenIfOtherHandlersAreRegistered:!0,...e};return{name:r,setupOnce(){},setup(e){H.process.on("uncaughtException",function(e,t){let i;let r=!1,p=!1,l=!1,d=e.getOptions();return Object.assign(c=>{let u=s.logAndExitProcess;t.onFatalError?u=t.onFatalError:d.onFatalError&&(u=d.onFatalError);let m=H.process.listeners("uncaughtException").reduce((e,t)=>"domainUncaughtExceptionClear"===t.name||t.tag&&"sentry_tracingErrorCallback"===t.tag||t._errorHandler?e:e+1,0),g=t.exitEvenIfOtherHandlersAreRegistered||0===m;r?g&&(l?(o.DEBUG_BUILD&&(0,n.logger).warn("uncaught exception after calling fatal error shutdown callback - this is bad! forcing shutdown"),(0,s.logAndExitProcess)(c)):p||(p=!0,setTimeout(()=>{l||(l=!0,u(i,c))},2e3))):(i=c,r=!0,(0,a.getClient)()===e&&(0,a.captureException)(c,{originalException:c,captureContext:{level:"fatal"},mechanism:{handled:!1,type:"onuncaughtexception"}}),!l&&g&&(l=!0,u(c)))},{_errorHandler:!0})}(e,t))}}}),l=(0,i.convertIntegrationFnToClass)(r,p)}),O("7xJCG",function(e,t){W(e.exports,"logAndExitProcess",()=>o);var a=X("deYUe"),i=X("k2ErF"),n=X("2xRAP");function o(e){(0,i.consoleSandbox)(()=>{console.error(e)});let t=(0,a.getClient)();void 0===t&&(n.DEBUG_BUILD&&(0,i.logger).warn("No NodeClient was defined, we are exiting the process now."),H.process.exit(1));let o=t.getOptions(),s=o&&o.shutdownTimeout&&o.shutdownTimeout>0&&o.shutdownTimeout||2e3;t.close(s).then(e=>{!e&&n.DEBUG_BUILD&&(0,i.logger).warn("We reached the timeout for emptying the request buffer, still exiting now!"),H.process.exit(1)},e=>{n.DEBUG_BUILD&&(0,i.logger).error(e)})}}),O("kpGGI",function(e,t){W(e.exports,"onUnhandledRejectionIntegration",()=>r),W(e.exports,"OnUnhandledRejection",()=>p);var a=X("deYUe"),i=X("hVqbS"),n=X("k2ErF"),o=X("7xJCG");let s="OnUnhandledRejection",r=(0,i.defineIntegration)((e={})=>{let t=e.mode||"warn";return{name:s,setupOnce(){},setup(e){var i;H.process.on("unhandledRejection",(i={mode:t},function(t,s){(0,a.getClient)()===e&&((0,a.captureException)(t,{originalException:s,captureContext:{extra:{unhandledPromiseRejection:!0}},mechanism:{handled:!1,type:"onunhandledrejection"}}),function(e,t){let a="This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason:";"warn"===t.mode?(0,n.consoleSandbox)(()=>{console.warn(a),console.error(e&&e.stack?e.stack:e)}):"strict"===t.mode&&((0,n.consoleSandbox)(()=>{console.warn(a)}),(0,o.logAndExitProcess)(e))}(t,i))}))}}}),p=(0,i.convertIntegrationFnToClass)(s,r)}),O("7wvFM",function(e,t){W(e.exports,"spotlightIntegration",()=>s),W(e.exports,"Spotlight",()=>r);var a=X("hVqbS"),i=X("k2ErF"),n=X("agl5x");let o="Spotlight",s=(0,a.defineIntegration)((e={})=>{let t={sidecarUrl:e.sidecarUrl||"http://localhost:8969/stream"};return{name:o,setupOnce(){},setup(e){"object"==typeof process&&process.env&&"development"!==process.env.NODE_ENV&&(0,i.logger).warn("[Spotlight] It seems you're not in dev mode. Do you really want to have Spotlight enabled?"),function(e,t){let a=function(e){try{return new G.URL(`${e}`)}catch(t){(0,i.logger).warn(`[Spotlight] Invalid sidecar URL: ${e}`);return}}(t.sidecarUrl);if(!a)return;let o=0;if("function"!=typeof e.on){(0,i.logger).warn("[Spotlight] Cannot connect to spotlight due to missing method on SDK client (`client.on`)");return}e.on("beforeEnvelope",e=>{if(o>3){(0,i.logger).warn("[Spotlight] Disabled Sentry -> Spotlight integration due to too many failed requests");return}let t=(0,n.serializeEnvelope)(e),s=(function(){let{request:e}=g;return"__sentry_original__"in e?e.__sentry_original__:e})()({method:"POST",path:a.pathname,hostname:a.hostname,port:a.port,headers:{"Content-Type":"application/x-sentry-envelope"}},e=>{e.on("data",()=>{}),e.on("end",()=>{}),e.setEncoding("utf8")});s.on("error",()=>{o++,(0,i.logger).warn("[Spotlight] Failed to send envelope to Spotlight Sidecar")}),s.write(t),s.end()})}(e,t)}}}),r=(0,a.convertIntegrationFnToClass)(o,s)}),O("aCFro",function(e,t){W(e.exports,"Undici",()=>y),W(e.exports,"nativeNodeFetchintegration",()=>C);var a,i,n=X("bsjXU"),o=X("hSiIl"),s=X("2gq4F"),r=X("6szME"),p=X("kTF8L"),l=X("c6AFW"),d=X("deYUe"),c=X("hVqbS"),u=X("3hDCQ"),m=X("cCmfn"),g=X("eCOpK"),h=X("7z6ft"),b=X("ehWym"),f=X("b2ZPh"),v=X("iD1up"),I=X("04aWn");(a=i||(i={})).RequestCreate="undici:request:create",a.RequestEnd="undici:request:headers",a.RequestError="undici:request:error";let C=(0,c.defineIntegration)(e=>new y(e));class y{static __initStatic(){this.id="Undici"}__init(){this.name=y.id}__init2(){this._createSpanUrlMap=new p.LRUMap(100)}__init3(){this._headersUrlMap=new p.LRUMap(100)}constructor(e={}){y.prototype.__init.call(this),y.prototype.__init2.call(this),y.prototype.__init3.call(this),y.prototype.__init4.call(this),y.prototype.__init5.call(this),y.prototype.__init6.call(this),this._options={breadcrumbs:void 0===e.breadcrumbs||e.breadcrumbs,tracing:e.tracing,shouldCreateSpanForRequest:e.shouldCreateSpanForRequest}}setupOnce(e){let t;if(!(I.NODE_VERSION.major<16)){try{t=$7bbd994cd14cc33f$import$ea7cfbf0dcb32429}catch(e){}t&&t.subscribe&&(t.subscribe(i.RequestCreate,this._onRequestCreate),t.subscribe(i.RequestEnd,this._onRequestEnd),t.subscribe(i.RequestError,this._onRequestError))}}_shouldCreateSpan(e){if(!1===this._options.tracing||void 0===this._options.tracing&&!(0,h.hasTracingEnabled)())return!1;if(void 0===this._options.shouldCreateSpanForRequest)return!0;let t=this._createSpanUrlMap.get(e);if(void 0!==t)return t;let a=this._options.shouldCreateSpanForRequest(e);return this._createSpanUrlMap.set(e,a),a}__init4(){this._onRequestCreate=e=>{if(!(0,n._optionalChain)([d.getClient,"call",e=>e(),"optionalAccess",e=>e.getIntegration,"call",e=>e(y)]))return;let{request:t}=e,a=t.origin?t.origin.toString()+t.path:t.path,i=(0,d.getClient)();if(!i||(0,b.isSentryRequestUrl)(a,i)||void 0!==t.__sentry_span__)return;let p=i.getOptions(),c=(0,d.getCurrentScope)(),h=(0,g.getIsolationScope)(),f=(0,u.getActiveSpan)(),I=this._shouldCreateSpan(a)?function(e,t,a){let i=(0,r.parseUrl)(a),o=t.method||"GET",s={"http.method":o};return i.search&&(s["http.query"]=i.search),i.hash&&(s["http.fragment"]=i.hash),(0,n._optionalChain)([e,"optionalAccess",e=>e.startChild,"call",e=>e({op:"http.client",origin:"auto.http.node.undici",description:`${o} ${(0,r.getSanitizedUrlString)(i)}`,data:s})])}(f,t,a):void 0;if(I&&(t.__sentry_span__=I),(e=>{if(void 0===p.tracePropagationTargets)return!0;let t=this._headersUrlMap.get(e);if(void 0!==t)return t;let a=(0,l.stringMatchesSomePattern)(e,p.tracePropagationTargets);return this._headersUrlMap.set(e,a),a})(a)){var C;let{traceId:e,spanId:a,sampled:n,dsc:r}={...h.getPropagationContext(),...c.getPropagationContext()},p=I?(0,v.spanToTraceHeader)(I):(0,s.generateSentryTraceHeader)(e,a,n);C=(0,o.dynamicSamplingContextToSentryBaggageHeader)(r||(I?(0,m.getDynamicSamplingContextFromSpan)(I):(0,m.getDynamicSamplingContextFromClient)(e,i,c))),(Array.isArray(t.headers)?t.headers.some(e=>"sentry-trace"===e):t.headers.split("\r\n").some(e=>e.startsWith("sentry-trace:")))||(t.addHeader("sentry-trace",p),C&&t.addHeader("baggage",C))}}}__init5(){this._onRequestEnd=e=>{if(!(0,n._optionalChain)([d.getClient,"call",e=>e(),"optionalAccess",e=>e.getIntegration,"call",e=>e(y)]))return;let{request:t,response:a}=e,i=t.origin?t.origin.toString()+t.path:t.path;if((0,b.isSentryRequestUrl)(i,(0,d.getClient)()))return;let o=t.__sentry_span__;o&&((0,f.setHttpStatus)(o,a.statusCode),o.end()),this._options.breadcrumbs&&(0,d.addBreadcrumb)({category:"http",data:{method:t.method,status_code:a.statusCode,url:i},type:"http"},{event:"response",request:t,response:a})}}__init6(){this._onRequestError=e=>{if(!(0,n._optionalChain)([d.getClient,"call",e=>e(),"optionalAccess",e=>e.getIntegration,"call",e=>e(y)]))return;let{request:t}=e,a=t.origin?t.origin.toString()+t.path:t.path;if((0,b.isSentryRequestUrl)(a,(0,d.getClient)()))return;let i=t.__sentry_span__;i&&(i.setStatus("internal_error"),i.end()),this._options.breadcrumbs&&(0,d.addBreadcrumb)({category:"http",data:{method:t.method,url:a},level:"error",type:"http"},{event:"error",request:t})}}}y.__initStatic()}),O("jUJ2l",function(e,t){W(e.exports,"createGetModuleFromFilename",()=>n);var a=X("eANmd");function i(e){return e.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}function n(e=process.argv[1]?(0,a.dirname)(process.argv[1]):process.cwd(),t="\\"===A.sep){let n=t?i(e):e;return e=>{if(!e)return;let a=t?i(e):e,{dir:o,base:s,ext:r}=(0,A.posix).parse(a);(".js"===r||".mjs"===r||".cjs"===r)&&(s=s.slice(0,-1*r.length)),o||(o=".");let p=o.lastIndexOf("/node_modules");if(p>-1)return`${o.slice(p+14).replace(/\//g,".")}:${s}`;if(o.startsWith(n)){let e=o.slice(n.length+1).replace(/\//g,".");return e&&(e+=":"),e+=s}return s}}}),O("eANmd",function(e,t){W(e.exports,"dirname",()=>i);let a=/^(\S+:\\|\/?)([\s\S]*?)((?:\.{1,2}|[^/\\]+?|)(\.[^./\\]*|))(?:[/\\]*)$/;function i(e){let t=function(e){let t=e.length>1024?`${e.slice(-1024)}`:e,i=a.exec(t);return i?i.slice(1):[]}(e),i=t[0],n=t[1];return i||n?(n&&(n=n.slice(0,n.length-1)),i+n):"."}}),O("aCqBu",function(e,t){W(e.exports,"deepReadDirSync",()=>a);function a(e){let t=A.resolve(e);if(!y.existsSync(t))throw Error(`Cannot read contents of ${t}. Directory does not exist.`);if(!y.statSync(t).isDirectory())throw Error(`Cannot read contents of ${t}, because it is not a directory.`);let a=e=>y.readdirSync(e).reduce((t,i)=>{let n=A.join(e,i);return y.statSync(n).isDirectory()?t.concat(a(n)):(t.push(n),t)},[]);return a(t).map(e=>A.relative(t,e))}}),O("eOLhk",function(e,t){W(e.exports,"enableAnrDetection",()=>n);var a=X("deYUe"),i=X("5x2pZ");function n(e){let t=(0,a.getClient)();return new i.Anr(e).setup(t),Promise.resolve()}}),O("5x2pZ",function(e,t){W(e.exports,"anrIntegration",()=>u),W(e.exports,"Anr",()=>m);var a=X("bsjXU"),i=X("bfWYX"),n=X("fArVl"),o=X("k2ErF"),s=X("hVqbS"),r=X("deYUe"),p=X("04aWn"),l=X("3yNTe");function d(e,...t){(0,o.logger).log(`[ANR] ${e}`,...t)}async function c(e){let t={message:"ANR"},i={};for(let a of e.getEventProcessors()){if(null===t)break;t=await a(t,i)}return(0,a._optionalChain)([t,"optionalAccess",e=>e.contexts])||{}}let u=(0,s.defineIntegration)((e={})=>({name:"Anr",setupOnce(){},setup(t){if(p.NODE_VERSION.major<16||16===p.NODE_VERSION.major&&p.NODE_VERSION.minor<17)throw Error("ANR detection requires Node 16.17.0 or later");setImmediate(()=>g(t,e))}})),m=(0,s.convertIntegrationFnToClass)("Anr",u);async function g(t,a){let s=await c(t),p=t.getDsn();if(!p)return;(0,i._optionalChainDelete)([s,"access",e=>e.app,"optionalAccess",e=>delete e.app_memory]),(0,i._optionalChainDelete)([s,"access",e=>e.device,"optionalAccess",e=>delete e.free_memory]);let u=t.getOptions(),m=t.getSdkMetadata()||{};m.sdk&&(m.sdk.integrations=u.integrations.map(e=>e.name));let g={debug:(0,o.logger).isEnabled(),dsn:p,environment:u.environment||"production",release:u.release,dist:u.dist,sdkMetadata:m,appRootPath:a.appRootPath,pollInterval:a.pollInterval||50,anrThreshold:a.anrThreshold||5e3,captureStackTrace:!!a.captureStackTrace,staticTags:a.staticTags||{},contexts:s};g.captureStackTrace&&!T.url()&&T.open(0);let{Worker:h}=(0,n.dynamicRequire)(e,"worker_threads"),b=new h(new G.URL(`data:application/javascript;base64,${l.base64WorkerScript}`),{workerData:g});process.on("exit",()=>{b.terminate()});let f=setInterval(()=>{try{let e=(0,r.getCurrentScope)().getSession(),t=e?{...e,toJSON:void 0}:void 0;b.postMessage({session:t})}catch(e){}},g.pollInterval);f.unref(),b.on("message",e=>{"session-ended"===e&&(d("ANR event sent from ANR worker. Clearing session in this thread."),(0,r.getCurrentScope)().setSession(void 0))}),b.once("error",e=>{clearInterval(f),d("ANR worker error",e)}),b.once("exit",e=>{clearInterval(f),d("ANR worker exit",e)}),b.unref()}}),O("bfWYX",function(e,t){W(e.exports,"_optionalChainDelete",()=>i);var a=X("bsjXU");function i(e){let t=(0,a._optionalChain)(e);return null==t||t}}),O("3yNTe",function(e,t){W(e.exports,"base64WorkerScript",()=>a);/*! @sentry/node 7.107.0 (48b8169) | https://github.com/getsentry/sentry-javascript */let a="aW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gJ2luc3BlY3Rvcic7CmltcG9ydCB7IHdvcmtlckRhdGEsIHBhcmVudFBvcnQgfSBmcm9tICd3b3JrZXJfdGhyZWFkcyc7CmltcG9ydCB7IHBvc2l4LCBzZXAgfSBmcm9tICdwYXRoJzsKaW1wb3J0ICogYXMgaHR0cCBmcm9tICdodHRwJzsKaW1wb3J0ICogYXMgaHR0cHMgZnJvbSAnaHR0cHMnOwppbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7CmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCc7CmltcG9ydCB7IGNyZWF0ZUd6aXAgfSBmcm9tICd6bGliJzsKaW1wb3J0ICogYXMgbmV0IGZyb20gJ25ldCc7CmltcG9ydCAqIGFzIHRscyBmcm9tICd0bHMnOwoKLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZApjb25zdCBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIG9uZSBvZiBhIGZldyBFcnJvciBvciBFcnJvci1saWtlCiAqIHtAbGluayBpc0Vycm9yfS4KICoKICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuCiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC4KICovCmZ1bmN0aW9uIGlzRXJyb3Iod2F0KSB7CiAgc3dpdGNoIChvYmplY3RUb1N0cmluZy5jYWxsKHdhdCkpIHsKICAgIGNhc2UgJ1tvYmplY3QgRXJyb3JdJzoKICAgIGNhc2UgJ1tvYmplY3QgRXhjZXB0aW9uXSc6CiAgICBjYXNlICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nOgogICAgICByZXR1cm4gdHJ1ZTsKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiBpc0luc3RhbmNlT2Yod2F0LCBFcnJvcik7CiAgfQp9Ci8qKgogKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gYnVpbHQtaW4gY2xhc3MuCiAqCiAqIEBwYXJhbSB3YXQgVGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQKICogQHBhcmFtIGNsYXNzTmFtZQogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc0J1aWx0aW4od2F0LCBjbGFzc05hbWUpIHsKICByZXR1cm4gb2JqZWN0VG9TdHJpbmcuY2FsbCh3YXQpID09PSBgW29iamVjdCAke2NsYXNzTmFtZX1dYDsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIHN0cmluZwogKiB7QGxpbmsgaXNTdHJpbmd9LgogKgogKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNTdHJpbmcod2F0KSB7CiAgcmV0dXJuIGlzQnVpbHRpbih3YXQsICdTdHJpbmcnKTsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBvYmplY3QgbGl0ZXJhbCwgb3IgYSBjbGFzcyBpbnN0YW5jZS4KICoge0BsaW5rIGlzUGxhaW5PYmplY3R9LgogKgogKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh3YXQpIHsKICByZXR1cm4gaXNCdWlsdGluKHdhdCwgJ09iamVjdCcpOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEV2ZW50IGluc3RhbmNlCiAqIHtAbGluayBpc0V2ZW50fS4KICoKICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuCiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC4KICovCmZ1bmN0aW9uIGlzRXZlbnQod2F0KSB7CiAgcmV0dXJuIHR5cGVvZiBFdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHdhdCwgRXZlbnQpOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEVsZW1lbnQgaW5zdGFuY2UKICoge0BsaW5rIGlzRWxlbWVudH0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc0VsZW1lbnQod2F0KSB7CiAgcmV0dXJuIHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpc0luc3RhbmNlT2Yod2F0LCBFbGVtZW50KTsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlIGhhcyBhIHRoZW4gZnVuY3Rpb24uCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKi8KZnVuY3Rpb24gaXNUaGVuYWJsZSh3YXQpIHsKICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzCiAgcmV0dXJuIEJvb2xlYW4od2F0ICYmIHdhdC50aGVuICYmIHR5cGVvZiB3YXQudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7Cn0KCi8qKgogKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYSBTeW50aGV0aWNFdmVudAogKiB7QGxpbmsgaXNTeW50aGV0aWNFdmVudH0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KHdhdCkgewogIHJldHVybiBpc1BsYWluT2JqZWN0KHdhdCkgJiYgJ25hdGl2ZUV2ZW50JyBpbiB3YXQgJiYgJ3ByZXZlbnREZWZhdWx0JyBpbiB3YXQgJiYgJ3N0b3BQcm9wYWdhdGlvbicgaW4gd2F0Owp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUgaXMgTmFOCiAqIHtAbGluayBpc05hTn0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc05hTiQxKHdhdCkgewogIHJldHVybiB0eXBlb2Ygd2F0ID09PSAnbnVtYmVyJyAmJiB3YXQgIT09IHdhdDsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBpbnN0YW5jZSBvZiBwcm92aWRlZCBjb25zdHJ1Y3Rvci4KICoge0BsaW5rIGlzSW5zdGFuY2VPZn0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcGFyYW0gYmFzZSBBIGNvbnN0cnVjdG9yIHRvIGJlIHVzZWQgaW4gYSBjaGVjay4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNJbnN0YW5jZU9mKHdhdCwgYmFzZSkgewogIHRyeSB7CiAgICByZXR1cm4gd2F0IGluc3RhbmNlb2YgYmFzZTsKICB9IGNhdGNoIChfZSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIFZ1ZSBWaWV3TW9kZWwuCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc1Z1ZVZpZXdNb2RlbCh3YXQpIHsKICAvLyBOb3QgdXNpbmcgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyBiZWNhdXNlIGluIFZ1ZSAzIGl0IHdvdWxkIHJlYWQgdGhlIGluc3RhbmNlJ3MgU3ltYm9sKFN5bWJvbC50b1N0cmluZ1RhZykgcHJvcGVydHkuCiAgcmV0dXJuICEhKHR5cGVvZiB3YXQgPT09ICdvYmplY3QnICYmIHdhdCAhPT0gbnVsbCAmJiAoKHdhdCApLl9faXNWdWUgfHwgKHdhdCApLl9pc1Z1ZSkpOwp9CgovKiogSW50ZXJuYWwgZ2xvYmFsIHdpdGggY29tbW9uIHByb3BlcnRpZXMgYW5kIFNlbnRyeSBleHRlbnNpb25zICAqLwoKLy8gVGhlIGNvZGUgYmVsb3cgZm9yICdpc0dsb2JhbE9iaicgYW5kICdHTE9CQUxfT0JKJyB3YXMgY29waWVkIGZyb20gY29yZS1qcyBiZWZvcmUgbW9kaWZpY2F0aW9uCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvMWI5NDRkZjU1MjgyY2RjOTljOTBkYjVmNDllYjBiNmVkYTJjYzBhMy9wYWNrYWdlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMKLy8gY29yZS1qcyBoYXMgdGhlIGZvbGxvd2luZyBsaWNlbmNlOgovLwovLyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAyMiBEZW5pcyBQdXNoa2FyZXYKLy8KLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQovLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAovLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci8vCi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgovLwovLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgovLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgovLyBUSEUgU09GVFdBUkUuCgovKiogUmV0dXJucyAnb2JqJyBpZiBpdCdzIHRoZSBnbG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgcmV0dXJucyB1bmRlZmluZWQgKi8KZnVuY3Rpb24gaXNHbG9iYWxPYmoob2JqKSB7CiAgcmV0dXJuIG9iaiAmJiBvYmouTWF0aCA9PSBNYXRoID8gb2JqIDogdW5kZWZpbmVkOwp9CgovKiogR2V0J3MgdGhlIGdsb2JhbCBvYmplY3QgZm9yIHRoZSBjdXJyZW50IEphdmFTY3JpcHQgcnVudGltZSAqLwpjb25zdCBHTE9CQUxfT0JKID0KICAodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgaXNHbG9iYWxPYmooZ2xvYmFsVGhpcykpIHx8CiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscwogICh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKHdpbmRvdykpIHx8CiAgKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKHNlbGYpKSB8fAogICh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKGdsb2JhbCkpIHx8CiAgKGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB0aGlzOwogIH0pKCkgfHwKICB7fTsKCi8qKgogKiBAZGVwcmVjYXRlZCBVc2UgR0xPQkFMX09CSiBpbnN0ZWFkIG9yIFdJTkRPVyBmcm9tIEBzZW50cnkvYnJvd3Nlci4gVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjgKICovCmZ1bmN0aW9uIGdldEdsb2JhbE9iamVjdCgpIHsKICByZXR1cm4gR0xPQkFMX09CSiA7Cn0KCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpjb25zdCBXSU5ET1cgPSBnZXRHbG9iYWxPYmplY3QoKTsKCmNvbnN0IERFRkFVTFRfTUFYX1NUUklOR19MRU5HVEggPSA4MDsKCi8qKgogKiBHaXZlbiBhIGNoaWxkIERPTSBlbGVtZW50LCByZXR1cm5zIGEgcXVlcnktc2VsZWN0b3Igc3RhdGVtZW50IGRlc2NyaWJpbmcgdGhhdAogKiBhbmQgaXRzIGFuY2VzdG9ycwogKiBlLmcuIFtIVE1MRWxlbWVudF0gPT4gYm9keSA+IGRpdiA+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdCiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aAogKi8KZnVuY3Rpb24gaHRtbFRyZWVBc1N0cmluZygKICBlbGVtLAogIG9wdGlvbnMgPSB7fSwKKSB7CiAgaWYgKCFlbGVtKSB7CiAgICByZXR1cm4gJzx1bmtub3duPic7CiAgfQoKICAvLyB0cnkvY2F0Y2ggYm90aDoKICAvLyAtIGFjY2Vzc2luZyBldmVudC50YXJnZXQgKHNlZSBnZXRzZW50cnkvcmF2ZW4tanMjODM4LCAjNzY4KQogIC8vIC0gYGh0bWxUcmVlQXNTdHJpbmdgIGJlY2F1c2UgaXQncyBjb21wbGV4LCBhbmQganVzdCBhY2Nlc3NpbmcgdGhlIERPTSBpbmNvcnJlY3RseQogIC8vIC0gY2FuIHRocm93IGFuIGV4Y2VwdGlvbiBpbiBzb21lIGNpcmN1bXN0YW5jZXMuCiAgdHJ5IHsKICAgIGxldCBjdXJyZW50RWxlbSA9IGVsZW0gOwogICAgY29uc3QgTUFYX1RSQVZFUlNFX0hFSUdIVCA9IDU7CiAgICBjb25zdCBvdXQgPSBbXTsKICAgIGxldCBoZWlnaHQgPSAwOwogICAgbGV0IGxlbiA9IDA7CiAgICBjb25zdCBzZXBhcmF0b3IgPSAnID4gJzsKICAgIGNvbnN0IHNlcExlbmd0aCA9IHNlcGFyYXRvci5sZW5ndGg7CiAgICBsZXQgbmV4dFN0cjsKICAgIGNvbnN0IGtleUF0dHJzID0gQXJyYXkuaXNBcnJheShvcHRpb25zKSA/IG9wdGlvbnMgOiBvcHRpb25zLmtleUF0dHJzOwogICAgY29uc3QgbWF4U3RyaW5nTGVuZ3RoID0gKCFBcnJheS5pc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMubWF4U3RyaW5nTGVuZ3RoKSB8fCBERUZBVUxUX01BWF9TVFJJTkdfTEVOR1RIOwoKICAgIHdoaWxlIChjdXJyZW50RWxlbSAmJiBoZWlnaHQrKyA8IE1BWF9UUkFWRVJTRV9IRUlHSFQpIHsKICAgICAgbmV4dFN0ciA9IF9odG1sRWxlbWVudEFzU3RyaW5nKGN1cnJlbnRFbGVtLCBrZXlBdHRycyk7CiAgICAgIC8vIGJhaWwgb3V0IGlmCiAgICAgIC8vIC0gbmV4dFN0ciBpcyB0aGUgJ2h0bWwnIGVsZW1lbnQKICAgICAgLy8gLSB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgdGhhdCB3b3VsZCBiZSBjcmVhdGVkIGV4Y2VlZHMgbWF4U3RyaW5nTGVuZ3RoCiAgICAgIC8vICAgKGlnbm9yZSB0aGlzIGxpbWl0IGlmIHdlIGFyZSBvbiB0aGUgZmlyc3QgaXRlcmF0aW9uKQogICAgICBpZiAobmV4dFN0ciA9PT0gJ2h0bWwnIHx8IChoZWlnaHQgPiAxICYmIGxlbiArIG91dC5sZW5ndGggKiBzZXBMZW5ndGggKyBuZXh0U3RyLmxlbmd0aCA+PSBtYXhTdHJpbmdMZW5ndGgpKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIG91dC5wdXNoKG5leHRTdHIpOwoKICAgICAgbGVuICs9IG5leHRTdHIubGVuZ3RoOwogICAgICBjdXJyZW50RWxlbSA9IGN1cnJlbnRFbGVtLnBhcmVudE5vZGU7CiAgICB9CgogICAgcmV0dXJuIG91dC5yZXZlcnNlKCkuam9pbihzZXBhcmF0b3IpOwogIH0gY2F0Y2ggKF9vTykgewogICAgcmV0dXJuICc8dW5rbm93bj4nOwogIH0KfQoKLyoqCiAqIFJldHVybnMgYSBzaW1wbGUsIHF1ZXJ5LXNlbGVjdG9yIHJlcHJlc2VudGF0aW9uIG9mIGEgRE9NIGVsZW1lbnQKICogZS5nLiBbSFRNTEVsZW1lbnRdID0+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdCiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aAogKi8KZnVuY3Rpb24gX2h0bWxFbGVtZW50QXNTdHJpbmcoZWwsIGtleUF0dHJzKSB7CiAgY29uc3QgZWxlbSA9IGVsCgo7CgogIGNvbnN0IG91dCA9IFtdOwogIGxldCBjbGFzc05hbWU7CiAgbGV0IGNsYXNzZXM7CiAgbGV0IGtleTsKICBsZXQgYXR0cjsKICBsZXQgaTsKCiAgaWYgKCFlbGVtIHx8ICFlbGVtLnRhZ05hbWUpIHsKICAgIHJldHVybiAnJzsKICB9CgogIC8vIEB0cy1leHBlY3QtZXJyb3IgV0lORE9XIGhhcyBIVE1MRWxlbWVudAogIGlmIChXSU5ET1cuSFRNTEVsZW1lbnQpIHsKICAgIC8vIElmIHVzaW5nIHRoZSBjb21wb25lbnQgbmFtZSBhbm5vdGF0aW9uIHBsdWdpbiwgdGhpcyB2YWx1ZSBtYXkgYmUgYXZhaWxhYmxlIG9uIHRoZSBET00gbm9kZQogICAgaWYgKGVsZW0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbGVtLmRhdGFzZXQgJiYgZWxlbS5kYXRhc2V0WydzZW50cnlDb21wb25lbnQnXSkgewogICAgICByZXR1cm4gZWxlbS5kYXRhc2V0WydzZW50cnlDb21wb25lbnQnXTsKICAgIH0KICB9CgogIG91dC5wdXNoKGVsZW0udGFnTmFtZS50b0xvd2VyQ2FzZSgpKTsKCiAgLy8gUGFpcnMgb2YgYXR0cmlidXRlIGtleXMgZGVmaW5lZCBpbiBgc2VyaWFsaXplQXR0cmlidXRlYCBhbmQgdGhlaXIgdmFsdWVzIG9uIGVsZW1lbnQuCiAgY29uc3Qga2V5QXR0clBhaXJzID0KICAgIGtleUF0dHJzICYmIGtleUF0dHJzLmxlbmd0aAogICAgICA/IGtleUF0dHJzLmZpbHRlcihrZXlBdHRyID0+IGVsZW0uZ2V0QXR0cmlidXRlKGtleUF0dHIpKS5tYXAoa2V5QXR0ciA9PiBba2V5QXR0ciwgZWxlbS5nZXRBdHRyaWJ1dGUoa2V5QXR0cildKQogICAgICA6IG51bGw7CgogIGlmIChrZXlBdHRyUGFpcnMgJiYga2V5QXR0clBhaXJzLmxlbmd0aCkgewogICAga2V5QXR0clBhaXJzLmZvckVhY2goa2V5QXR0clBhaXIgPT4gewogICAgICBvdXQucHVzaChgWyR7a2V5QXR0clBhaXJbMF19PSIke2tleUF0dHJQYWlyWzFdfSJdYCk7CiAgICB9KTsKICB9IGVsc2UgewogICAgaWYgKGVsZW0uaWQpIHsKICAgICAgb3V0LnB1c2goYCMke2VsZW0uaWR9YCk7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdAogICAgY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWU7CiAgICBpZiAoY2xhc3NOYW1lICYmIGlzU3RyaW5nKGNsYXNzTmFtZSkpIHsKICAgICAgY2xhc3NlcyA9IGNsYXNzTmFtZS5zcGxpdCgvXHMrLyk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgb3V0LnB1c2goYC4ke2NsYXNzZXNbaV19YCk7CiAgICAgIH0KICAgIH0KICB9CiAgY29uc3QgYWxsb3dlZEF0dHJzID0gWydhcmlhLWxhYmVsJywgJ3R5cGUnLCAnbmFtZScsICd0aXRsZScsICdhbHQnXTsKICBmb3IgKGkgPSAwOyBpIDwgYWxsb3dlZEF0dHJzLmxlbmd0aDsgaSsrKSB7CiAgICBrZXkgPSBhbGxvd2VkQXR0cnNbaV07CiAgICBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoa2V5KTsKICAgIGlmIChhdHRyKSB7CiAgICAgIG91dC5wdXNoKGBbJHtrZXl9PSIke2F0dHJ9Il1gKTsKICAgIH0KICB9CiAgcmV0dXJuIG91dC5qb2luKCcnKTsKfQoKLyoqCiAqIFRoaXMgc2VydmVzIGFzIGEgYnVpbGQgdGltZSBmbGFnIHRoYXQgd2lsbCBiZSB0cnVlIGJ5IGRlZmF1bHQsIGJ1dCBmYWxzZSBpbiBub24tZGVidWcgYnVpbGRzIG9yIGlmIHVzZXJzIHJlcGxhY2UgYF9fU0VOVFJZX0RFQlVHX19gIGluIHRoZWlyIGdlbmVyYXRlZCBjb2RlLgogKgogKiBBVFRFTlRJT046IFRoaXMgY29uc3RhbnQgbXVzdCBuZXZlciBjcm9zcyBwYWNrYWdlIGJvdW5kYXJpZXMgKGkuZS4gYmUgZXhwb3J0ZWQpIHRvIGd1YXJhbnRlZSB0aGF0IGl0IGNhbiBiZSB1c2VkIGZvciB0cmVlIHNoYWtpbmcuCiAqLwpjb25zdCBERUJVR19CVUlMRCQxID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTsKCi8qKiBQcmVmaXggZm9yIGxvZ2dpbmcgc3RyaW5ncyAqLwpjb25zdCBQUkVGSVggPSAnU2VudHJ5IExvZ2dlciAnOwoKY29uc3QgQ09OU09MRV9MRVZFTFMgPSBbCiAgJ2RlYnVnJywKICAnaW5mbycsCiAgJ3dhcm4nLAogICdlcnJvcicsCiAgJ2xvZycsCiAgJ2Fzc2VydCcsCiAgJ3RyYWNlJywKXSA7CgovKiogVGhpcyBtYXkgYmUgbXV0YXRlZCBieSB0aGUgY29uc29sZSBpbnN0cnVtZW50YXRpb24uICovCmNvbnN0IG9yaWdpbmFsQ29uc29sZU1ldGhvZHMKCiA9IHt9OwoKLyoqIEpTRG9jICovCgovKioKICogVGVtcG9yYXJpbHkgZGlzYWJsZSBzZW50cnkgY29uc29sZSBpbnN0cnVtZW50YXRpb25zLgogKgogKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIHJ1biBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBgY29uc29sZWAgbWVzc2FnZXMKICogQHJldHVybnMgVGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrCiAqLwpmdW5jdGlvbiBjb25zb2xlU2FuZGJveChjYWxsYmFjaykgewogIGlmICghKCdjb25zb2xlJyBpbiBHTE9CQUxfT0JKKSkgewogICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgfQoKICBjb25zdCBjb25zb2xlID0gR0xPQkFMX09CSi5jb25zb2xlIDsKICBjb25zdCB3cmFwcGVkRnVuY3MgPSB7fTsKCiAgY29uc3Qgd3JhcHBlZExldmVscyA9IE9iamVjdC5rZXlzKG9yaWdpbmFsQ29uc29sZU1ldGhvZHMpIDsKCiAgLy8gUmVzdG9yZSBhbGwgd3JhcHBlZCBjb25zb2xlIG1ldGhvZHMKICB3cmFwcGVkTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4gewogICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlTWV0aG9kID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kc1tsZXZlbF0gOwogICAgd3JhcHBlZEZ1bmNzW2xldmVsXSA9IGNvbnNvbGVbbGV2ZWxdIDsKICAgIGNvbnNvbGVbbGV2ZWxdID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kOwogIH0pOwoKICB0cnkgewogICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgfSBmaW5hbGx5IHsKICAgIC8vIFJldmVydCByZXN0b3JhdGlvbiB0byB3cmFwcGVkIHN0YXRlCiAgICB3cmFwcGVkTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4gewogICAgICBjb25zb2xlW2xldmVsXSA9IHdyYXBwZWRGdW5jc1tsZXZlbF0gOwogICAgfSk7CiAgfQp9CgpmdW5jdGlvbiBtYWtlTG9nZ2VyKCkgewogIGxldCBlbmFibGVkID0gZmFsc2U7CiAgY29uc3QgbG9nZ2VyID0gewogICAgZW5hYmxlOiAoKSA9PiB7CiAgICAgIGVuYWJsZWQgPSB0cnVlOwogICAgfSwKICAgIGRpc2FibGU6ICgpID0+IHsKICAgICAgZW5hYmxlZCA9IGZhbHNlOwogICAgfSwKICAgIGlzRW5hYmxlZDogKCkgPT4gZW5hYmxlZCwKICB9OwoKICBpZiAoREVCVUdfQlVJTEQkMSkgewogICAgQ09OU09MRV9MRVZFTFMuZm9yRWFjaChuYW1lID0+IHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkKICAgICAgbG9nZ2VyW25hbWVdID0gKC4uLmFyZ3MpID0+IHsKICAgICAgICBpZiAoZW5hYmxlZCkgewogICAgICAgICAgY29uc29sZVNhbmRib3goKCkgPT4gewogICAgICAgICAgICBHTE9CQUxfT0JKLmNvbnNvbGVbbmFtZV0oYCR7UFJFRklYfVske25hbWV9XTpgLCAuLi5hcmdzKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0pOwogIH0gZWxzZSB7CiAgICBDT05TT0xFX0xFVkVMUy5mb3JFYWNoKG5hbWUgPT4gewogICAgICBsb2dnZXJbbmFtZV0gPSAoKSA9PiB1bmRlZmluZWQ7CiAgICB9KTsKICB9CgogIHJldHVybiBsb2dnZXIgOwp9Cgpjb25zdCBsb2dnZXIgPSBtYWtlTG9nZ2VyKCk7CgovKioKICogUmVuZGVycyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHNuLgogKgogKiBCeSBkZWZhdWx0LCB0aGlzIHdpbGwgcmVuZGVyIHRoZSBwdWJsaWMgcmVwcmVzZW50YXRpb24gd2l0aG91dCB0aGUgcGFzc3dvcmQKICogY29tcG9uZW50LiBUbyBnZXQgdGhlIGRlcHJlY2F0ZWQgcHJpdmF0ZSByZXByZXNlbnRhdGlvbiwgc2V0IGB3aXRoUGFzc3dvcmRgCiAqIHRvIHRydWUuCiAqCiAqIEBwYXJhbSB3aXRoUGFzc3dvcmQgV2hlbiBzZXQgdG8gdHJ1ZSwgdGhlIHBhc3N3b3JkIHdpbGwgYmUgaW5jbHVkZWQuCiAqLwpmdW5jdGlvbiBkc25Ub1N0cmluZyhkc24sIHdpdGhQYXNzd29yZCA9IGZhbHNlKSB7CiAgY29uc3QgeyBob3N0LCBwYXRoLCBwYXNzLCBwb3J0LCBwcm9qZWN0SWQsIHByb3RvY29sLCBwdWJsaWNLZXkgfSA9IGRzbjsKICByZXR1cm4gKAogICAgYCR7cHJvdG9jb2x9Oi8vJHtwdWJsaWNLZXl9JHt3aXRoUGFzc3dvcmQgJiYgcGFzcyA/IGA6JHtwYXNzfWAgOiAnJ31gICsKICAgIGBAJHtob3N0fSR7cG9ydCA/IGA6JHtwb3J0fWAgOiAnJ30vJHtwYXRoID8gYCR7cGF0aH0vYCA6IHBhdGh9JHtwcm9qZWN0SWR9YAogICk7Cn0KCi8qKiBBbiBlcnJvciBlbWl0dGVkIGJ5IFNlbnRyeSBTREtzIGFuZCByZWxhdGVkIHV0aWxpdGllcy4gKi8KY2xhc3MgU2VudHJ5RXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgLyoqIERpc3BsYXkgbmFtZSBvZiB0aGlzIGVycm9yIGluc3RhbmNlLiAqLwoKICAgY29uc3RydWN0b3IoIG1lc3NhZ2UsIGxvZ0xldmVsID0gJ3dhcm4nKSB7CiAgICBzdXBlcihtZXNzYWdlKTt0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwogICAgdGhpcy5uYW1lID0gbmV3LnRhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZTsKICAgIC8vIFRoaXMgc2V0cyB0aGUgcHJvdG90eXBlIHRvIGJlIGBFcnJvcmAsIG5vdCBgU2VudHJ5RXJyb3JgLiBJdCdzIHVuY2xlYXIgd2h5IHdlIGRvIHRoaXMsIGJ1dCBjb21tZW50aW5nIHRoaXMgbGluZQogICAgLy8gb3V0IGNhdXNlcyB2YXJpb3VzIChzZWVtaW5nbHkgdG90YWxseSB1bnJlbGF0ZWQpIHBsYXl3cmlnaHQgdGVzdHMgY29uc2lzdGVudGx5IHRpbWUgb3V0LiBGWUksIHRoaXMgbWFrZXMKICAgIC8vIGluc3RhbmNlcyBvZiBgU2VudHJ5RXJyb3JgIGZhaWwgYG9iaiBpbnN0YW5jZW9mIFNlbnRyeUVycm9yYCBjaGVja3MuCiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgbmV3LnRhcmdldC5wcm90b3R5cGUpOwogICAgdGhpcy5sb2dMZXZlbCA9IGxvZ0xldmVsOwogIH0KfQoKLyoqCiAqIEVuY29kZXMgZ2l2ZW4gb2JqZWN0IGludG8gdXJsLWZyaWVuZGx5IGZvcm1hdAogKgogKiBAcGFyYW0gb2JqZWN0IEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHNlcmlhbGl6YWJsZSB2YWx1ZXMKICogQHJldHVybnMgc3RyaW5nIEVuY29kZWQKICovCmZ1bmN0aW9uIHVybEVuY29kZShvYmplY3QpIHsKICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KQogICAgLm1hcChrZXkgPT4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KG9iamVjdFtrZXldKX1gKQogICAgLmpvaW4oJyYnKTsKfQoKLyoqCiAqIFRyYW5zZm9ybXMgYW55IGBFcnJvcmAgb3IgYEV2ZW50YCBpbnRvIGEgcGxhaW4gb2JqZWN0IHdpdGggYWxsIG9mIHRoZWlyIGVudW1lcmFibGUgcHJvcGVydGllcywgYW5kIHNvbWUgb2YgdGhlaXIKICogbm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBhdHRhY2hlZC4KICoKICogQHBhcmFtIHZhbHVlIEluaXRpYWwgc291cmNlIHRoYXQgd2UgaGF2ZSB0byB0cmFuc2Zvcm0gaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHVzYWJsZSBieSB0aGUgc2VyaWFsaXplcgogKiBAcmV0dXJucyBBbiBFdmVudCBvciBFcnJvciB0dXJuZWQgaW50byBhbiBvYmplY3QgLSBvciB0aGUgdmFsdWUgYXJndXJtZW50IGl0c2VsZiwgd2hlbiB2YWx1ZSBpcyBuZWl0aGVyIGFuIEV2ZW50IG5vcgogKiAgYW4gRXJyb3IuCiAqLwpmdW5jdGlvbiBjb252ZXJ0VG9QbGFpbk9iamVjdCgKICB2YWx1ZSwKKQoKIHsKICBpZiAoaXNFcnJvcih2YWx1ZSkpIHsKICAgIHJldHVybiB7CiAgICAgIG1lc3NhZ2U6IHZhbHVlLm1lc3NhZ2UsCiAgICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAgIHN0YWNrOiB2YWx1ZS5zdGFjaywKICAgICAgLi4uZ2V0T3duUHJvcGVydGllcyh2YWx1ZSksCiAgICB9OwogIH0gZWxzZSBpZiAoaXNFdmVudCh2YWx1ZSkpIHsKICAgIGNvbnN0IG5ld09iagoKID0gewogICAgICB0eXBlOiB2YWx1ZS50eXBlLAogICAgICB0YXJnZXQ6IHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHZhbHVlLnRhcmdldCksCiAgICAgIGN1cnJlbnRUYXJnZXQ6IHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHZhbHVlLmN1cnJlbnRUYXJnZXQpLAogICAgICAuLi5nZXRPd25Qcm9wZXJ0aWVzKHZhbHVlKSwKICAgIH07CgogICAgaWYgKHR5cGVvZiBDdXN0b21FdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHZhbHVlLCBDdXN0b21FdmVudCkpIHsKICAgICAgbmV3T2JqLmRldGFpbCA9IHZhbHVlLmRldGFpbDsKICAgIH0KCiAgICByZXR1cm4gbmV3T2JqOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdmFsdWU7CiAgfQp9CgovKiogQ3JlYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGFyZ2V0IG9mIGFuIGBFdmVudGAgb2JqZWN0ICovCmZ1bmN0aW9uIHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHRhcmdldCkgewogIHRyeSB7CiAgICByZXR1cm4gaXNFbGVtZW50KHRhcmdldCkgPyBodG1sVHJlZUFzU3RyaW5nKHRhcmdldCkgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGFyZ2V0KTsKICB9IGNhdGNoIChfb08pIHsKICAgIHJldHVybiAnPHVua25vd24+JzsKICB9Cn0KCi8qKiBGaWx0ZXJzIG91dCBhbGwgYnV0IGFuIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzICovCmZ1bmN0aW9uIGdldE93blByb3BlcnRpZXMob2JqKSB7CiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkgewogICAgY29uc3QgZXh0cmFjdGVkUHJvcHMgPSB7fTsKICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gb2JqKSB7CiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wZXJ0eSkpIHsKICAgICAgICBleHRyYWN0ZWRQcm9wc1twcm9wZXJ0eV0gPSAob2JqIClbcHJvcGVydHldOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZXh0cmFjdGVkUHJvcHM7CiAgfSBlbHNlIHsKICAgIHJldHVybiB7fTsKICB9Cn0KCi8qKgogKiBHaXZlbiBhbnkgb2JqZWN0LCByZXR1cm4gYSBuZXcgb2JqZWN0IGhhdmluZyByZW1vdmVkIGFsbCBmaWVsZHMgd2hvc2UgdmFsdWUgd2FzIGB1bmRlZmluZWRgLgogKiBXb3JrcyByZWN1cnNpdmVseSBvbiBvYmplY3RzIGFuZCBhcnJheXMuCiAqCiAqIEF0dGVudGlvbjogVGhpcyBmdW5jdGlvbiBrZWVwcyBjaXJjdWxhciByZWZlcmVuY2VzIGluIHRoZSByZXR1cm5lZCBvYmplY3QuCiAqLwpmdW5jdGlvbiBkcm9wVW5kZWZpbmVkS2V5cyhpbnB1dFZhbHVlKSB7CiAgLy8gVGhpcyBtYXAga2VlcHMgdHJhY2sgb2Ygd2hhdCBhbHJlYWR5IHZpc2l0ZWQgbm9kZXMgbWFwIHRvLgogIC8vIE91ciBTZXQgLSBiYXNlZCBtZW1vQnVpbGRlciBkb2Vzbid0IHdvcmsgaGVyZSBiZWNhdXNlIHdlIHdhbnQgdG8gdGhlIG91dHB1dCBvYmplY3QgdG8gaGF2ZSB0aGUgc2FtZSBjaXJjdWxhcgogIC8vIHJlZmVyZW5jZXMgYXMgdGhlIGlucHV0IG9iamVjdC4KICBjb25zdCBtZW1vaXphdGlvbk1hcCA9IG5ldyBNYXAoKTsKCiAgLy8gVGhpcyBmdW5jdGlvbiBqdXN0IHByb3hpZXMgYF9kcm9wVW5kZWZpbmVkS2V5c2AgdG8ga2VlcCB0aGUgYG1lbW9CdWlsZGVyYCBvdXQgb2YgdGhpcyBmdW5jdGlvbidzIEFQSQogIHJldHVybiBfZHJvcFVuZGVmaW5lZEtleXMoaW5wdXRWYWx1ZSwgbWVtb2l6YXRpb25NYXApOwp9CgpmdW5jdGlvbiBfZHJvcFVuZGVmaW5lZEtleXMoaW5wdXRWYWx1ZSwgbWVtb2l6YXRpb25NYXApIHsKICBpZiAoaXNQb2pvKGlucHV0VmFsdWUpKSB7CiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGR1ZSB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBvYmplY3QgaXQgd2FzIG1hcHBlZCB0byBpbiB0aGUgbmV3IG9iamVjdAogICAgY29uc3QgbWVtb1ZhbCA9IG1lbW9pemF0aW9uTWFwLmdldChpbnB1dFZhbHVlKTsKICAgIGlmIChtZW1vVmFsICE9PSB1bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIG1lbW9WYWwgOwogICAgfQoKICAgIGNvbnN0IHJldHVyblZhbHVlID0ge307CiAgICAvLyBTdG9yZSB0aGUgbWFwcGluZyBvZiB0aGlzIHZhbHVlIGluIGNhc2Ugd2UgdmlzaXQgaXQgYWdhaW4sIGluIGNhc2Ugb2YgY2lyY3VsYXIgZGF0YQogICAgbWVtb2l6YXRpb25NYXAuc2V0KGlucHV0VmFsdWUsIHJldHVyblZhbHVlKTsKCiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhpbnB1dFZhbHVlKSkgewogICAgICBpZiAodHlwZW9mIGlucHV0VmFsdWVba2V5XSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICByZXR1cm5WYWx1ZVtrZXldID0gX2Ryb3BVbmRlZmluZWRLZXlzKGlucHV0VmFsdWVba2V5XSwgbWVtb2l6YXRpb25NYXApOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJldHVyblZhbHVlIDsKICB9CgogIGlmIChBcnJheS5pc0FycmF5KGlucHV0VmFsdWUpKSB7CiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGR1ZSB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBhcnJheSBpdCB3YXMgbWFwcGVkIHRvIGluIHRoZSBuZXcgb2JqZWN0CiAgICBjb25zdCBtZW1vVmFsID0gbWVtb2l6YXRpb25NYXAuZ2V0KGlucHV0VmFsdWUpOwogICAgaWYgKG1lbW9WYWwgIT09IHVuZGVmaW5lZCkgewogICAgICByZXR1cm4gbWVtb1ZhbCA7CiAgICB9CgogICAgY29uc3QgcmV0dXJuVmFsdWUgPSBbXTsKICAgIC8vIFN0b3JlIHRoZSBtYXBwaW5nIG9mIHRoaXMgdmFsdWUgaW4gY2FzZSB3ZSB2aXNpdCBpdCBhZ2FpbiwgaW4gY2FzZSBvZiBjaXJjdWxhciBkYXRhCiAgICBtZW1vaXphdGlvbk1hcC5zZXQoaW5wdXRWYWx1ZSwgcmV0dXJuVmFsdWUpOwoKICAgIGlucHV0VmFsdWUuZm9yRWFjaCgoaXRlbSkgPT4gewogICAgICByZXR1cm5WYWx1ZS5wdXNoKF9kcm9wVW5kZWZpbmVkS2V5cyhpdGVtLCBtZW1vaXphdGlvbk1hcCkpOwogICAgfSk7CgogICAgcmV0dXJuIHJldHVyblZhbHVlIDsKICB9CgogIHJldHVybiBpbnB1dFZhbHVlOwp9CgpmdW5jdGlvbiBpc1Bvam8oaW5wdXQpIHsKICBpZiAoIWlzUGxhaW5PYmplY3QoaW5wdXQpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB0cnkgewogICAgY29uc3QgbmFtZSA9IChPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5wdXQpICkuY29uc3RydWN0b3IubmFtZTsKICAgIHJldHVybiAhbmFtZSB8fCBuYW1lID09PSAnT2JqZWN0JzsKICB9IGNhdGNoIChlKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCi8qKgogKiBEb2VzIHRoaXMgZmlsZW5hbWUgbG9vayBsaWtlIGl0J3MgcGFydCBvZiB0aGUgYXBwIGNvZGU/CiAqLwpmdW5jdGlvbiBmaWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUsIGlzTmF0aXZlID0gZmFsc2UpIHsKICBjb25zdCBpc0ludGVybmFsID0KICAgIGlzTmF0aXZlIHx8CiAgICAoZmlsZW5hbWUgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgaXQncyBhbiBhYnNvbHV0ZSBsaW51eCBwYXRoCiAgICAgICFmaWxlbmFtZS5zdGFydHNXaXRoKCcvJykgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgaXQncyBhbiBhYnNvbHV0ZSB3aW5kb3dzIHBhdGgKICAgICAgIWZpbGVuYW1lLm1hdGNoKC9eW0EtWl06LykgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgdGhlIHBhdGggaXMgc3RhcnRpbmcgd2l0aCBhIGRvdAogICAgICAhZmlsZW5hbWUuc3RhcnRzV2l0aCgnLicpICYmCiAgICAgIC8vIEl0J3Mgbm90IGludGVybmFsIGlmIHRoZSBmcmFtZSBoYXMgYSBwcm90b2NvbC4gSW4gbm9kZSwgdGhpcyBpcyB1c3VhbGx5IHRoZSBjYXNlIGlmIHRoZSBmaWxlIGdvdCBwcmUtcHJvY2Vzc2VkIHdpdGggYSBidW5kbGVyIGxpa2Ugd2VicGFjawogICAgICAhZmlsZW5hbWUubWF0Y2goL15bYS16QS1aXShbYS16QS1aMC05LlwtK10pKjpcL1wvLykpOyAvLyBTY2hlbWEgZnJvbTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM2NDE3ODIKCiAgLy8gaW5fYXBwIGlzIGFsbCB0aGF0J3Mgbm90IGFuIGludGVybmFsIE5vZGUgZnVuY3Rpb24gb3IgYSBtb2R1bGUgd2l0aGluIG5vZGVfbW9kdWxlcwogIC8vIG5vdGUgdGhhdCBpc05hdGl2ZSBhcHBlYXJzIHRvIHJldHVybiB0cnVlIGV2ZW4gZm9yIG5vZGUgY29yZSBsaWJyYXJpZXMKICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9yYXZlbi1ub2RlL2lzc3Vlcy8xNzYKCiAgcmV0dXJuICFpc0ludGVybmFsICYmIGZpbGVuYW1lICE9PSB1bmRlZmluZWQgJiYgIWZpbGVuYW1lLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvJyk7Cn0KCmNvbnN0IFNUQUNLVFJBQ0VfRlJBTUVfTElNSVQgPSA1MDsKY29uc3QgU1RSSVBfRlJBTUVfUkVHRVhQID0gL2NhcHR1cmVNZXNzYWdlfGNhcHR1cmVFeGNlcHRpb24vOwoKLyoqCiAqIFJlbW92ZXMgU2VudHJ5IGZyYW1lcyBmcm9tIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgc3RhY2sgaWYgcHJlc2VudCBhbmQgZW5mb3JjZXMgYSBsaW1pdCBvZiBtYXggbnVtYmVyIG9mIGZyYW1lcy4KICogQXNzdW1lcyBzdGFjayBpbnB1dCBpcyBvcmRlcmVkIGZyb20gdG9wIHRvIGJvdHRvbSBhbmQgcmV0dXJucyB0aGUgcmV2ZXJzZSByZXByZXNlbnRhdGlvbiBzbyBjYWxsIHNpdGUgb2YgdGhlCiAqIGZ1bmN0aW9uIHRoYXQgY2F1c2VkIHRoZSBjcmFzaCBpcyB0aGUgbGFzdCBmcmFtZSBpbiB0aGUgYXJyYXkuCiAqIEBoaWRkZW4KICovCmZ1bmN0aW9uIHN0cmlwU2VudHJ5RnJhbWVzQW5kUmV2ZXJzZShzdGFjaykgewogIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICByZXR1cm4gW107CiAgfQoKICBjb25zdCBsb2NhbFN0YWNrID0gQXJyYXkuZnJvbShzdGFjayk7CgogIC8vIElmIHN0YWNrIHN0YXJ0cyB3aXRoIG9uZSBvZiBvdXIgQVBJIGNhbGxzLCByZW1vdmUgaXQgKHN0YXJ0cywgbWVhbmluZyBpdCdzIHRoZSB0b3Agb2YgdGhlIHN0YWNrIC0gYWthIGxhc3QgY2FsbCkKICBpZiAoL3NlbnRyeVdyYXBwZWQvLnRlc3QobG9jYWxTdGFja1tsb2NhbFN0YWNrLmxlbmd0aCAtIDFdLmZ1bmN0aW9uIHx8ICcnKSkgewogICAgbG9jYWxTdGFjay5wb3AoKTsKICB9CgogIC8vIFJldmVyc2luZyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwcm9jZWR1cmUgYWxsb3dzIHVzIHRvIGp1c3QgcG9wIHRoZSB2YWx1ZXMgb2ZmIHRoZSBzdGFjawogIGxvY2FsU3RhY2sucmV2ZXJzZSgpOwoKICAvLyBJZiBzdGFjayBlbmRzIHdpdGggb25lIG9mIG91ciBpbnRlcm5hbCBBUEkgY2FsbHMsIHJlbW92ZSBpdCAoZW5kcywgbWVhbmluZyBpdCdzIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrIC0gYWthIHRvcC1tb3N0IGNhbGwpCiAgaWYgKFNUUklQX0ZSQU1FX1JFR0VYUC50ZXN0KGxvY2FsU3RhY2tbbG9jYWxTdGFjay5sZW5ndGggLSAxXS5mdW5jdGlvbiB8fCAnJykpIHsKICAgIGxvY2FsU3RhY2sucG9wKCk7CgogICAgLy8gV2hlbiB1c2luZyBzeW50aGV0aWMgZXZlbnRzLCB3ZSB3aWxsIGhhdmUgYSAyIGxldmVscyBkZWVwIHN0YWNrLCBhcyBgbmV3IEVycm9yKCdTZW50cnkgc3ludGhldGljRXhjZXB0aW9uJylgCiAgICAvLyBpcyBwcm9kdWNlZCB3aXRoaW4gdGhlIGh1YiBpdHNlbGYsIG1ha2luZyBpdDoKICAgIC8vCiAgICAvLyAgIFNlbnRyeS5jYXB0dXJlRXhjZXB0aW9uKCkKICAgIC8vICAgZ2V0Q3VycmVudEh1YigpLmNhcHR1cmVFeGNlcHRpb24oKQogICAgLy8KICAgIC8vIGluc3RlYWQgb2YganVzdCB0aGUgdG9wIGBTZW50cnlgIGNhbGwgaXRzZWxmLgogICAgLy8gVGhpcyBmb3JjZXMgdXMgdG8gcG9zc2libHkgc3RyaXAgYW4gYWRkaXRpb25hbCBmcmFtZSBpbiB0aGUgZXhhY3Qgc2FtZSB3YXMgYXMgYWJvdmUuCiAgICBpZiAoU1RSSVBfRlJBTUVfUkVHRVhQLnRlc3QobG9jYWxTdGFja1tsb2NhbFN0YWNrLmxlbmd0aCAtIDFdLmZ1bmN0aW9uIHx8ICcnKSkgewogICAgICBsb2NhbFN0YWNrLnBvcCgpOwogICAgfQogIH0KCiAgcmV0dXJuIGxvY2FsU3RhY2suc2xpY2UoMCwgU1RBQ0tUUkFDRV9GUkFNRV9MSU1JVCkubWFwKGZyYW1lID0+ICh7CiAgICAuLi5mcmFtZSwKICAgIGZpbGVuYW1lOiBmcmFtZS5maWxlbmFtZSB8fCBsb2NhbFN0YWNrW2xvY2FsU3RhY2subGVuZ3RoIC0gMV0uZmlsZW5hbWUsCiAgICBmdW5jdGlvbjogZnJhbWUuZnVuY3Rpb24gfHwgJz8nLAogIH0pKTsKfQoKY29uc3QgZGVmYXVsdEZ1bmN0aW9uTmFtZSA9ICc8YW5vbnltb3VzPic7CgovKioKICogU2FmZWx5IGV4dHJhY3QgZnVuY3Rpb24gbmFtZSBmcm9tIGl0c2VsZgogKi8KZnVuY3Rpb24gZ2V0RnVuY3Rpb25OYW1lKGZuKSB7CiAgdHJ5IHsKICAgIGlmICghZm4gfHwgdHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7CiAgICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lOwogICAgfQogICAgcmV0dXJuIGZuLm5hbWUgfHwgZGVmYXVsdEZ1bmN0aW9uTmFtZTsKICB9IGNhdGNoIChlKSB7CiAgICAvLyBKdXN0IGFjY2Vzc2luZyBjdXN0b20gcHJvcHMgaW4gc29tZSBTZWxlbml1bSBlbnZpcm9ubWVudHMKICAgIC8vIGNhbiBjYXVzZSBhICJQZXJtaXNzaW9uIGRlbmllZCIgZXhjZXB0aW9uIChzZWUgcmF2ZW4tanMjNDk1KS4KICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lOwogIH0KfQoKLyoqCiAqIFVVSUQ0IGdlbmVyYXRvcgogKgogKiBAcmV0dXJucyBzdHJpbmcgR2VuZXJhdGVkIFVVSUQ0LgogKi8KZnVuY3Rpb24gdXVpZDQoKSB7CiAgY29uc3QgZ2JsID0gR0xPQkFMX09CSiA7CiAgY29uc3QgY3J5cHRvID0gZ2JsLmNyeXB0byB8fCBnYmwubXNDcnlwdG87CgogIGxldCBnZXRSYW5kb21CeXRlID0gKCkgPT4gTWF0aC5yYW5kb20oKSAqIDE2OwogIHRyeSB7CiAgICBpZiAoY3J5cHRvICYmIGNyeXB0by5yYW5kb21VVUlEKSB7CiAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpLnJlcGxhY2UoLy0vZywgJycpOwogICAgfQogICAgaWYgKGNyeXB0byAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7CiAgICAgIGdldFJhbmRvbUJ5dGUgPSAoKSA9PiB7CiAgICAgICAgLy8gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyBtaWdodCByZXR1cm4gdW5kZWZpbmVkIGluc3RlYWQgb2YgdGhlIHR5cGVkIGFycmF5CiAgICAgICAgLy8gaW4gb2xkIENocm9taXVtIHZlcnNpb25zIChlLmcuIDIzLjAuMTIzNS4wICgxNTE0MjIpKQogICAgICAgIC8vIEhvd2V2ZXIsIGB0eXBlZEFycmF5YCBpcyBzdGlsbCBmaWxsZWQgaW4tcGxhY2UuCiAgICAgICAgLy8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3J5cHRvL2dldFJhbmRvbVZhbHVlcyN0eXBlZGFycmF5CiAgICAgICAgY29uc3QgdHlwZWRBcnJheSA9IG5ldyBVaW50OEFycmF5KDEpOwogICAgICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXModHlwZWRBcnJheSk7CiAgICAgICAgcmV0dXJuIHR5cGVkQXJyYXlbMF07CiAgICAgIH07CiAgICB9CiAgfSBjYXRjaCAoXykgewogICAgLy8gc29tZSBydW50aW1lcyBjYW4gY3Jhc2ggaW52b2tpbmcgY3J5cHRvCiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy84OTM1CiAgfQoKICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTAzNC9ob3ctdG8tY3JlYXRlLWEtZ3VpZC11dWlkLWluLWphdmFzY3JpcHQvMjExNzUyMyMyMTE3NTIzCiAgLy8gQ29uY2F0ZW5hdGluZyB0aGUgZm9sbG93aW5nIG51bWJlcnMgYXMgc3RyaW5ncyByZXN1bHRzIGluICcxMDAwMDAwMDEwMDA0MDAwODAwMDEwMDAwMDAwMDAwMCcKICByZXR1cm4gKChbMWU3XSApICsgMWUzICsgNGUzICsgOGUzICsgMWUxMSkucmVwbGFjZSgvWzAxOF0vZywgYyA9PgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2UKICAgICgoYyApIF4gKChnZXRSYW5kb21CeXRlKCkgJiAxNSkgPj4gKChjICkgLyA0KSkpLnRvU3RyaW5nKDE2KSwKICApOwp9CgovKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi8KLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqLwoKLyoqCiAqIEhlbHBlciB0byBkZWN5Y2xlIGpzb24gb2JqZWN0cwogKi8KZnVuY3Rpb24gbWVtb0J1aWxkZXIoKSB7CiAgY29uc3QgaGFzV2Vha1NldCA9IHR5cGVvZiBXZWFrU2V0ID09PSAnZnVuY3Rpb24nOwogIGNvbnN0IGlubmVyID0gaGFzV2Vha1NldCA/IG5ldyBXZWFrU2V0KCkgOiBbXTsKICBmdW5jdGlvbiBtZW1vaXplKG9iaikgewogICAgaWYgKGhhc1dlYWtTZXQpIHsKICAgICAgaWYgKGlubmVyLmhhcyhvYmopKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgaW5uZXIuYWRkKG9iaik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLWZvci1vZgogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbm5lci5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCB2YWx1ZSA9IGlubmVyW2ldOwogICAgICBpZiAodmFsdWUgPT09IG9iaikgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICBpbm5lci5wdXNoKG9iaik7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBmdW5jdGlvbiB1bm1lbW9pemUob2JqKSB7CiAgICBpZiAoaGFzV2Vha1NldCkgewogICAgICBpbm5lci5kZWxldGUob2JqKTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5uZXIubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoaW5uZXJbaV0gPT09IG9iaikgewogICAgICAgICAgaW5uZXIuc3BsaWNlKGksIDEpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIHJldHVybiBbbWVtb2l6ZSwgdW5tZW1vaXplXTsKfQoKLyoqCiAqIFJlY3Vyc2l2ZWx5IG5vcm1hbGl6ZXMgdGhlIGdpdmVuIG9iamVjdC4KICoKICogLSBDcmVhdGVzIGEgY29weSB0byBwcmV2ZW50IG9yaWdpbmFsIGlucHV0IG11dGF0aW9uCiAqIC0gU2tpcHMgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcwogKiAtIFdoZW4gc3RyaW5naWZ5aW5nLCBjYWxscyBgdG9KU09OYCBpZiBpbXBsZW1lbnRlZAogKiAtIFJlbW92ZXMgY2lyY3VsYXIgcmVmZXJlbmNlcwogKiAtIFRyYW5zbGF0ZXMgbm9uLXNlcmlhbGl6YWJsZSB2YWx1ZXMgKGB1bmRlZmluZWRgL2BOYU5gL2Z1bmN0aW9ucykgdG8gc2VyaWFsaXphYmxlIGZvcm1hdAogKiAtIFRyYW5zbGF0ZXMga25vd24gZ2xvYmFsIG9iamVjdHMvY2xhc3NlcyB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbnMKICogLSBUYWtlcyBjYXJlIG9mIGBFcnJvcmAgb2JqZWN0IHNlcmlhbGl6YXRpb24KICogLSBPcHRpb25hbGx5IGxpbWl0cyBkZXB0aCBvZiBmaW5hbCBvdXRwdXQKICogLSBPcHRpb25hbGx5IGxpbWl0cyBudW1iZXIgb2YgcHJvcGVydGllcy9lbGVtZW50cyBpbmNsdWRlZCBpbiBhbnkgc2luZ2xlIG9iamVjdC9hcnJheQogKgogKiBAcGFyYW0gaW5wdXQgVGhlIG9iamVjdCB0byBiZSBub3JtYWxpemVkLgogKiBAcGFyYW0gZGVwdGggVGhlIG1heCBkZXB0aCB0byB3aGljaCB0byBub3JtYWxpemUgdGhlIG9iamVjdC4gKEFueXRoaW5nIGRlZXBlciBzdHJpbmdpZmllZCB3aG9sZS4pCiAqIEBwYXJhbSBtYXhQcm9wZXJ0aWVzIFRoZSBtYXggbnVtYmVyIG9mIGVsZW1lbnRzIG9yIHByb3BlcnRpZXMgdG8gYmUgaW5jbHVkZWQgaW4gYW55IHNpbmdsZSBhcnJheSBvcgogKiBvYmplY3QgaW4gdGhlIG5vcm1hbGxpemVkIG91dHB1dC4KICogQHJldHVybnMgQSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhlIG9iamVjdCwgb3IgYCIqKm5vbi1zZXJpYWxpemFibGUqKiJgIGlmIGFueSBlcnJvcnMgYXJlIHRocm93biBkdXJpbmcgbm9ybWFsaXphdGlvbi4KICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55CmZ1bmN0aW9uIG5vcm1hbGl6ZShpbnB1dCwgZGVwdGggPSAxMDAsIG1heFByb3BlcnRpZXMgPSArSW5maW5pdHkpIHsKICB0cnkgewogICAgLy8gc2luY2Ugd2UncmUgYXQgdGhlIG91dGVybW9zdCBsZXZlbCwgd2UgZG9uJ3QgcHJvdmlkZSBhIGtleQogICAgcmV0dXJuIHZpc2l0KCcnLCBpbnB1dCwgZGVwdGgsIG1heFByb3BlcnRpZXMpOwogIH0gY2F0Y2ggKGVycikgewogICAgcmV0dXJuIHsgRVJST1I6IGAqKm5vbi1zZXJpYWxpemFibGUqKiAoJHtlcnJ9KWAgfTsKICB9Cn0KCi8qKgogKiBWaXNpdHMgYSBub2RlIHRvIHBlcmZvcm0gbm9ybWFsaXphdGlvbiBvbiBpdAogKgogKiBAcGFyYW0ga2V5IFRoZSBrZXkgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gbm9kZQogKiBAcGFyYW0gdmFsdWUgVGhlIG5vZGUgdG8gYmUgdmlzaXRlZAogKiBAcGFyYW0gZGVwdGggT3B0aW9uYWwgbnVtYmVyIGluZGljYXRpbmcgdGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoCiAqIEBwYXJhbSBtYXhQcm9wZXJ0aWVzIE9wdGlvbmFsIG1heGltdW0gbnVtYmVyIG9mIHByb3BlcnRpZXMvZWxlbWVudHMgaW5jbHVkZWQgaW4gYW55IHNpbmdsZSBvYmplY3QvYXJyYXkKICogQHBhcmFtIG1lbW8gT3B0aW9uYWwgTWVtbyBjbGFzcyBoYW5kbGluZyBkZWN5Y2xpbmcKICovCmZ1bmN0aW9uIHZpc2l0KAogIGtleSwKICB2YWx1ZSwKICBkZXB0aCA9ICtJbmZpbml0eSwKICBtYXhQcm9wZXJ0aWVzID0gK0luZmluaXR5LAogIG1lbW8gPSBtZW1vQnVpbGRlcigpLAopIHsKICBjb25zdCBbbWVtb2l6ZSwgdW5tZW1vaXplXSA9IG1lbW87CgogIC8vIEdldCB0aGUgc2ltcGxlIGNhc2VzIG91dCBvZiB0aGUgd2F5IGZpcnN0CiAgaWYgKAogICAgdmFsdWUgPT0gbnVsbCB8fCAvLyB0aGlzIG1hdGNoZXMgbnVsbCBhbmQgdW5kZWZpbmVkIC0+IGVxZXEgbm90IGVxZXFlcQogICAgKFsnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnc3RyaW5nJ10uaW5jbHVkZXModHlwZW9mIHZhbHVlKSAmJiAhaXNOYU4kMSh2YWx1ZSkpCiAgKSB7CiAgICByZXR1cm4gdmFsdWUgOwogIH0KCiAgY29uc3Qgc3RyaW5naWZpZWQgPSBzdHJpbmdpZnlWYWx1ZShrZXksIHZhbHVlKTsKCiAgLy8gQW55dGhpbmcgd2UgY291bGQgcG90ZW50aWFsbHkgZGlnIGludG8gbW9yZSAob2JqZWN0cyBvciBhcnJheXMpIHdpbGwgaGF2ZSBjb21lIGJhY2sgYXMgYCJbb2JqZWN0IFhYWFhdImAuCiAgLy8gRXZlcnl0aGluZyBlbHNlIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gc2VyaWFsaXplZCwgc28gaWYgd2UgZG9uJ3Qgc2VlIHRoYXQgcGF0dGVybiwgd2UncmUgZG9uZS4KICBpZiAoIXN0cmluZ2lmaWVkLnN0YXJ0c1dpdGgoJ1tvYmplY3QgJykpIHsKICAgIHJldHVybiBzdHJpbmdpZmllZDsKICB9CgogIC8vIEZyb20gaGVyZSBvbiwgd2UgY2FuIGFzc2VydCB0aGF0IGB2YWx1ZWAgaXMgZWl0aGVyIGFuIG9iamVjdCBvciBhbiBhcnJheS4KCiAgLy8gRG8gbm90IG5vcm1hbGl6ZSBvYmplY3RzIHRoYXQgd2Uga25vdyBoYXZlIGFscmVhZHkgYmVlbiBub3JtYWxpemVkLiBBcyBhIGdlbmVyYWwgcnVsZSwgdGhlCiAgLy8gIl9fc2VudHJ5X3NraXBfbm9ybWFsaXphdGlvbl9fIiBwcm9wZXJ0eSBzaG91bGQgb25seSBiZSB1c2VkIHNwYXJpbmdseSBhbmQgb25seSBzaG91bGQgb25seSBiZSBzZXQgb24gb2JqZWN0cyB0aGF0CiAgLy8gaGF2ZSBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZC4KICBpZiAoKHZhbHVlIClbJ19fc2VudHJ5X3NraXBfbm9ybWFsaXphdGlvbl9fJ10pIHsKICAgIHJldHVybiB2YWx1ZSA7CiAgfQoKICAvLyBXZSBjYW4gc2V0IGBfX3NlbnRyeV9vdmVycmlkZV9ub3JtYWxpemF0aW9uX2RlcHRoX19gIG9uIGFuIG9iamVjdCB0byBlbnN1cmUgdGhhdCBmcm9tIHRoZXJlCiAgLy8gV2Uga2VlcCBhIGNlcnRhaW4gYW1vdW50IG9mIGRlcHRoLgogIC8vIFRoaXMgc2hvdWxkIGJlIHVzZWQgc3BhcmluZ2x5LCBlLmcuIHdlIHVzZSBpdCBmb3IgdGhlIHJlZHV4IGludGVncmF0aW9uIHRvIGVuc3VyZSB3ZSBnZXQgYSBjZXJ0YWluIGFtb3VudCBvZiBzdGF0ZS4KICBjb25zdCByZW1haW5pbmdEZXB0aCA9CiAgICB0eXBlb2YgKHZhbHVlIClbJ19fc2VudHJ5X292ZXJyaWRlX25vcm1hbGl6YXRpb25fZGVwdGhfXyddID09PSAnbnVtYmVyJwogICAgICA/ICgodmFsdWUgKVsnX19zZW50cnlfb3ZlcnJpZGVfbm9ybWFsaXphdGlvbl9kZXB0aF9fJ10gKQogICAgICA6IGRlcHRoOwoKICAvLyBXZSdyZSBhbHNvIGRvbmUgaWYgd2UndmUgcmVhY2hlZCB0aGUgbWF4IGRlcHRoCiAgaWYgKHJlbWFpbmluZ0RlcHRoID09PSAwKSB7CiAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgYHNlcmlhbGl6ZWRgIGlzIGEgc3RyaW5nIG9mIHRoZSBmb3JtIGAiW29iamVjdCBYWFhYXSJgLiBDbGVhbiBpdCB1cCBzbyBpdCdzIGp1c3QgYCJbWFhYWF0iYC4KICAgIHJldHVybiBzdHJpbmdpZmllZC5yZXBsYWNlKCdvYmplY3QgJywgJycpOwogIH0KCiAgLy8gSWYgd2UndmUgYWxyZWFkeSB2aXNpdGVkIHRoaXMgYnJhbmNoLCBiYWlsIG91dCwgYXMgaXQncyBjaXJjdWxhciByZWZlcmVuY2UuIElmIG5vdCwgbm90ZSB0aGF0IHdlJ3JlIHNlZWluZyBpdCBub3cuCiAgaWYgKG1lbW9pemUodmFsdWUpKSB7CiAgICByZXR1cm4gJ1tDaXJjdWxhciB+XSc7CiAgfQoKICAvLyBJZiB0aGUgdmFsdWUgaGFzIGEgYHRvSlNPTmAgbWV0aG9kLCB3ZSBjYWxsIGl0IHRvIGV4dHJhY3QgbW9yZSBpbmZvcm1hdGlvbgogIGNvbnN0IHZhbHVlV2l0aFRvSlNPTiA9IHZhbHVlIDsKICBpZiAodmFsdWVXaXRoVG9KU09OICYmIHR5cGVvZiB2YWx1ZVdpdGhUb0pTT04udG9KU09OID09PSAnZnVuY3Rpb24nKSB7CiAgICB0cnkgewogICAgICBjb25zdCBqc29uVmFsdWUgPSB2YWx1ZVdpdGhUb0pTT04udG9KU09OKCk7CiAgICAgIC8vIFdlIG5lZWQgdG8gbm9ybWFsaXplIHRoZSByZXR1cm4gdmFsdWUgb2YgYC50b0pTT04oKWAgaW4gY2FzZSBpdCBoYXMgY2lyY3VsYXIgcmVmZXJlbmNlcwogICAgICByZXR1cm4gdmlzaXQoJycsIGpzb25WYWx1ZSwgcmVtYWluaW5nRGVwdGggLSAxLCBtYXhQcm9wZXJ0aWVzLCBtZW1vKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICAvLyBwYXNzIChUaGUgYnVpbHQtaW4gYHRvSlNPTmAgZmFpbGVkLCBidXQgd2UgY2FuIHN0aWxsIHRyeSB0byBkbyBpdCBvdXJzZWx2ZXMpCiAgICB9CiAgfQoKICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgd2UgZWl0aGVyIGhhdmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5LCB3ZSBoYXZlbid0IHNlZW4gaXQgYmVmb3JlLCBhbmQgd2UncmUgZ29pbmcgdG8gcmVjdXJzZQogIC8vIGJlY2F1c2Ugd2UgaGF2ZW4ndCB5ZXQgcmVhY2hlZCB0aGUgbWF4IGRlcHRoLiBDcmVhdGUgYW4gYWNjdW11bGF0b3IgdG8gaG9sZCB0aGUgcmVzdWx0cyBvZiB2aXNpdGluZyBlYWNoCiAgLy8gcHJvcGVydHkvZW50cnksIGFuZCBrZWVwIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgaXRlbXMgd2UgYWRkIHRvIGl0LgogIGNvbnN0IG5vcm1hbGl6ZWQgPSAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbXSA6IHt9KSA7CiAgbGV0IG51bUFkZGVkID0gMDsKCiAgLy8gQmVmb3JlIHdlIGJlZ2luLCBjb252ZXJ0YEVycm9yYCBhbmRgRXZlbnRgIGluc3RhbmNlcyBpbnRvIHBsYWluIG9iamVjdHMsIHNpbmNlIHNvbWUgb2YgZWFjaCBvZiB0aGVpciByZWxldmFudAogIC8vIHByb3BlcnRpZXMgYXJlIG5vbi1lbnVtZXJhYmxlIGFuZCBvdGhlcndpc2Ugd291bGQgZ2V0IG1pc3NlZC4KICBjb25zdCB2aXNpdGFibGUgPSBjb252ZXJ0VG9QbGFpbk9iamVjdCh2YWx1ZSApOwoKICBmb3IgKGNvbnN0IHZpc2l0S2V5IGluIHZpc2l0YWJsZSkgewogICAgLy8gQXZvaWQgaXRlcmF0aW5nIG92ZXIgZmllbGRzIGluIHRoZSBwcm90b3R5cGUgaWYgdGhleSd2ZSBzb21laG93IGJlZW4gZXhwb3NlZCB0byBlbnVtZXJhdGlvbi4KICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZpc2l0YWJsZSwgdmlzaXRLZXkpKSB7CiAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIGlmIChudW1BZGRlZCA+PSBtYXhQcm9wZXJ0aWVzKSB7CiAgICAgIG5vcm1hbGl6ZWRbdmlzaXRLZXldID0gJ1tNYXhQcm9wZXJ0aWVzIH5dJzsKICAgICAgYnJlYWs7CiAgICB9CgogICAgLy8gUmVjdXJzaXZlbHkgdmlzaXQgYWxsIHRoZSBjaGlsZCBub2RlcwogICAgY29uc3QgdmlzaXRWYWx1ZSA9IHZpc2l0YWJsZVt2aXNpdEtleV07CiAgICBub3JtYWxpemVkW3Zpc2l0S2V5XSA9IHZpc2l0KHZpc2l0S2V5LCB2aXNpdFZhbHVlLCByZW1haW5pbmdEZXB0aCAtIDEsIG1heFByb3BlcnRpZXMsIG1lbW8pOwoKICAgIG51bUFkZGVkKys7CiAgfQoKICAvLyBPbmNlIHdlJ3ZlIHZpc2l0ZWQgYWxsIHRoZSBicmFuY2hlcywgcmVtb3ZlIHRoZSBwYXJlbnQgZnJvbSBtZW1vIHN0b3JhZ2UKICB1bm1lbW9pemUodmFsdWUpOwoKICAvLyBSZXR1cm4gYWNjdW11bGF0ZWQgdmFsdWVzCiAgcmV0dXJuIG5vcm1hbGl6ZWQ7Cn0KCi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi8KLyoqCiAqIFN0cmluZ2lmeSB0aGUgZ2l2ZW4gdmFsdWUuIEhhbmRsZXMgdmFyaW91cyBrbm93biBzcGVjaWFsIHZhbHVlcyBhbmQgdHlwZXMuCiAqCiAqIE5vdCBtZWFudCB0byBiZSB1c2VkIG9uIHNpbXBsZSBwcmltaXRpdmVzIHdoaWNoIGFscmVhZHkgaGF2ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiwgYXMgaXQgd2lsbCwgZm9yIGV4YW1wbGUsIHR1cm4KICogdGhlIG51bWJlciAxMjMxIGludG8gIltPYmplY3QgTnVtYmVyXSIsIG5vciBvbiBgbnVsbGAsIGFzIGl0IHdpbGwgdGhyb3cuCiAqCiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gc3RyaW5naWZ5CiAqIEByZXR1cm5zIEEgc3RyaW5naWZpZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIHZhbHVlCiAqLwpmdW5jdGlvbiBzdHJpbmdpZnlWYWx1ZSgKICBrZXksCiAgLy8gdGhpcyB0eXBlIGlzIGEgdGlueSBiaXQgb2YgYSBjaGVhdCwgc2luY2UgdGhpcyBmdW5jdGlvbiBkb2VzIGhhbmRsZSBOYU4gKHdoaWNoIGlzIHRlY2huaWNhbGx5IGEgbnVtYmVyKSwgYnV0IGZvcgogIC8vIG91ciBpbnRlcm5hbCB1c2UsIGl0J2xsIGRvCiAgdmFsdWUsCikgewogIHRyeSB7CiAgICBpZiAoa2V5ID09PSAnZG9tYWluJyAmJiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICh2YWx1ZSApLl9ldmVudHMpIHsKICAgICAgcmV0dXJuICdbRG9tYWluXSc7CiAgICB9CgogICAgaWYgKGtleSA9PT0gJ2RvbWFpbkVtaXR0ZXInKSB7CiAgICAgIHJldHVybiAnW0RvbWFpbkVtaXR0ZXJdJzsKICAgIH0KCiAgICAvLyBJdCdzIHNhZmUgdG8gdXNlIGBnbG9iYWxgLCBgd2luZG93YCwgYW5kIGBkb2N1bWVudGAgaGVyZSBpbiB0aGlzIG1hbm5lciwgYXMgd2UgYXJlIGFzc2VydGluZyB1c2luZyBgdHlwZW9mYCBmaXJzdAogICAgLy8gd2hpY2ggd29uJ3QgdGhyb3cgaWYgdGhleSBhcmUgbm90IHByZXNlbnQuCgogICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlID09PSBnbG9iYWwpIHsKICAgICAgcmV0dXJuICdbR2xvYmFsXSc7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscwogICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlID09PSB3aW5kb3cpIHsKICAgICAgcmV0dXJuICdbV2luZG93XSc7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscwogICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgPT09IGRvY3VtZW50KSB7CiAgICAgIHJldHVybiAnW0RvY3VtZW50XSc7CiAgICB9CgogICAgaWYgKGlzVnVlVmlld01vZGVsKHZhbHVlKSkgewogICAgICByZXR1cm4gJ1tWdWVWaWV3TW9kZWxdJzsKICAgIH0KCiAgICAvLyBSZWFjdCdzIFN5bnRoZXRpY0V2ZW50IHRoaW5neQogICAgaWYgKGlzU3ludGhldGljRXZlbnQodmFsdWUpKSB7CiAgICAgIHJldHVybiAnW1N5bnRoZXRpY0V2ZW50XSc7CiAgICB9CgogICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHZhbHVlKSB7CiAgICAgIHJldHVybiAnW05hTl0nOwogICAgfQoKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHsKICAgICAgcmV0dXJuIGBbRnVuY3Rpb246ICR7Z2V0RnVuY3Rpb25OYW1lKHZhbHVlKX1dYDsKICAgIH0KCiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykgewogICAgICByZXR1cm4gYFske1N0cmluZyh2YWx1ZSl9XWA7CiAgICB9CgogICAgLy8gc3RyaW5naWZpZWQgQmlnSW50cyBhcmUgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSByZWd1bGFyIG51bWJlcnMsIHNvIHdlIG5lZWQgdG8gbGFiZWwgdGhlbSB0byBhdm9pZCBjb25mdXNpb24KICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnKSB7CiAgICAgIHJldHVybiBgW0JpZ0ludDogJHtTdHJpbmcodmFsdWUpfV1gOwogICAgfQoKICAgIC8vIE5vdyB0aGF0IHdlJ3ZlIGtub2NrZWQgb3V0IGFsbCB0aGUgc3BlY2lhbCBjYXNlcyBhbmQgdGhlIHByaW1pdGl2ZXMsIGFsbCB3ZSBoYXZlIGxlZnQgYXJlIG9iamVjdHMuIFNpbXBseSBjYXN0aW5nCiAgICAvLyB0aGVtIHRvIHN0cmluZ3MgbWVhbnMgdGhhdCBpbnN0YW5jZXMgb2YgY2xhc3NlcyB3aGljaCBoYXZlbid0IGRlZmluZWQgdGhlaXIgYHRvU3RyaW5nVGFnYCB3aWxsIGp1c3QgY29tZSBvdXQgYXMKICAgIC8vIGAiW29iamVjdCBPYmplY3RdImAuIElmIHdlIGluc3RlYWQgbG9vayBhdCB0aGUgY29uc3RydWN0b3IncyBuYW1lICh3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MpLAogICAgLy8gd2UgY2FuIG1ha2Ugc3VyZSB0aGF0IG9ubHkgcGxhaW4gb2JqZWN0cyBjb21lIG91dCB0aGF0IHdheS4KICAgIGNvbnN0IG9iak5hbWUgPSBnZXRDb25zdHJ1Y3Rvck5hbWUodmFsdWUpOwoKICAgIC8vIEhhbmRsZSBIVE1MIEVsZW1lbnRzCiAgICBpZiAoL15IVE1MKFx3KilFbGVtZW50JC8udGVzdChvYmpOYW1lKSkgewogICAgICByZXR1cm4gYFtIVE1MRWxlbWVudDogJHtvYmpOYW1lfV1gOwogICAgfQoKICAgIHJldHVybiBgW29iamVjdCAke29iak5hbWV9XWA7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICByZXR1cm4gYCoqbm9uLXNlcmlhbGl6YWJsZSoqICgke2Vycn0pYDsKICB9Cn0KLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovCgpmdW5jdGlvbiBnZXRDb25zdHJ1Y3Rvck5hbWUodmFsdWUpIHsKICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpOwoKICByZXR1cm4gcHJvdG90eXBlID8gcHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWUgOiAnbnVsbCBwcm90b3R5cGUnOwp9CgovKioKICogTm9ybWFsaXplcyBVUkxzIGluIGV4Y2VwdGlvbnMgYW5kIHN0YWNrdHJhY2VzIHRvIGEgYmFzZSBwYXRoIHNvIFNlbnRyeSBjYW4gZmluZ2VycHJpbnQKICogYWNyb3NzIHBsYXRmb3JtcyBhbmQgd29ya2luZyBkaXJlY3RvcnkuCiAqCiAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0byBiZSBub3JtYWxpemVkLgogKiBAcGFyYW0gYmFzZVBhdGggVGhlIGFwcGxpY2F0aW9uIGJhc2UgcGF0aC4KICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgVVJMLgogKi8KZnVuY3Rpb24gbm9ybWFsaXplVXJsVG9CYXNlKHVybCwgYmFzZVBhdGgpIHsKICBjb25zdCBlc2NhcGVkQmFzZSA9IGJhc2VQYXRoCiAgICAvLyBCYWNrc2xhc2ggdG8gZm9yd2FyZAogICAgLnJlcGxhY2UoL1xcL2csICcvJykKICAgIC8vIEVzY2FwZSBSZWdFeHAgc3BlY2lhbCBjaGFyYWN0ZXJzCiAgICAucmVwbGFjZSgvW3xcXHt9KClbXF1eJCsqPy5dL2csICdcXCQmJyk7CgogIGxldCBuZXdVcmwgPSB1cmw7CiAgdHJ5IHsKICAgIG5ld1VybCA9IGRlY29kZVVSSSh1cmwpOwogIH0gY2F0Y2ggKF9PbykgewogICAgLy8gU29tZXRpbWUgdGhpcyBicmVha3MKICB9CiAgcmV0dXJuICgKICAgIG5ld1VybAogICAgICAucmVwbGFjZSgvXFwvZywgJy8nKQogICAgICAucmVwbGFjZSgvd2VicGFjazpcLz8vZywgJycpIC8vIFJlbW92ZSBpbnRlcm1lZGlhdGUgYmFzZSBwYXRoCiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc2VudHJ5LWludGVybmFsL3Nkay9uby1yZWdleHAtY29uc3RydWN0b3IKICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cChgKGZpbGU6Ly8pPy8qJHtlc2NhcGVkQmFzZX0vKmAsICdpZycpLCAnYXBwOi8vLycpCiAgKTsKfQoKLy8gU2xpZ2h0bHkgbW9kaWZpZWQgKG5vIElFOCBzdXBwb3J0LCBFUzYpIGFuZCB0cmFuc2NyaWJlZCB0byBUeXBlU2NyaXB0CgovLyBTcGxpdCBhIGZpbGVuYW1lIGludG8gW3Jvb3QsIGRpciwgYmFzZW5hbWUsIGV4dF0sIHVuaXggdmVyc2lvbgovLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLgpjb25zdCBzcGxpdFBhdGhSZSA9IC9eKFxTKzpcXHxcLz8pKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteL1xcXSs/fCkoXC5bXi4vXFxdKnwpKSg/OlsvXFxdKikkLzsKLyoqIEpTRG9jICovCmZ1bmN0aW9uIHNwbGl0UGF0aChmaWxlbmFtZSkgewogIC8vIFRydW5jYXRlIGZpbGVzIG5hbWVzIGdyZWF0ZXIgdGhhbiAxMDI0IGNoYXJhY3RlcnMgdG8gYXZvaWQgcmVnZXggZG9zCiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9wdWxsLzg3MzcjZGlzY3Vzc2lvbl9yMTI4NTcxOTE3MgogIGNvbnN0IHRydW5jYXRlZCA9IGZpbGVuYW1lLmxlbmd0aCA+IDEwMjQgPyBgPHRydW5jYXRlZD4ke2ZpbGVuYW1lLnNsaWNlKC0xMDI0KX1gIDogZmlsZW5hbWU7CiAgY29uc3QgcGFydHMgPSBzcGxpdFBhdGhSZS5leGVjKHRydW5jYXRlZCk7CiAgcmV0dXJuIHBhcnRzID8gcGFydHMuc2xpY2UoMSkgOiBbXTsKfQoKLyoqIEpTRG9jICovCmZ1bmN0aW9uIGRpcm5hbWUocGF0aCkgewogIGNvbnN0IHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKTsKICBjb25zdCByb290ID0gcmVzdWx0WzBdOwogIGxldCBkaXIgPSByZXN1bHRbMV07CgogIGlmICghcm9vdCAmJiAhZGlyKSB7CiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXIKICAgIHJldHVybiAnLic7CiAgfQoKICBpZiAoZGlyKSB7CiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaAogICAgZGlyID0gZGlyLnNsaWNlKDAsIGRpci5sZW5ndGggLSAxKTsKICB9CgogIHJldHVybiByb290ICsgZGlyOwp9CgovKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUgKi8KCi8qKiBTeW5jUHJvbWlzZSBpbnRlcm5hbCBzdGF0ZXMgKi8KdmFyIFN0YXRlczsgKGZ1bmN0aW9uIChTdGF0ZXMpIHsKICAvKiogUGVuZGluZyAqLwogIGNvbnN0IFBFTkRJTkcgPSAwOyBTdGF0ZXNbU3RhdGVzWyJQRU5ESU5HIl0gPSBQRU5ESU5HXSA9ICJQRU5ESU5HIjsKICAvKiogUmVzb2x2ZWQgLyBPSyAqLwogIGNvbnN0IFJFU09MVkVEID0gMTsgU3RhdGVzW1N0YXRlc1siUkVTT0xWRUQiXSA9IFJFU09MVkVEXSA9ICJSRVNPTFZFRCI7CiAgLyoqIFJlamVjdGVkIC8gRXJyb3IgKi8KICBjb25zdCBSRUpFQ1RFRCA9IDI7IFN0YXRlc1tTdGF0ZXNbIlJFSkVDVEVEIl0gPSBSRUpFQ1RFRF0gPSAiUkVKRUNURUQiOwp9KShTdGF0ZXMgfHwgKFN0YXRlcyA9IHt9KSk7CgovLyBPdmVybG9hZHMgc28gd2UgY2FuIGNhbGwgcmVzb2x2ZWRTeW5jUHJvbWlzZSB3aXRob3V0IGFyZ3VtZW50cyBhbmQgZ2VuZXJpYyBhcmd1bWVudAoKLyoqCiAqIENyZWF0ZXMgYSByZXNvbHZlZCBzeW5jIHByb21pc2UuCiAqCiAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gcmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRoCiAqIEByZXR1cm5zIHRoZSByZXNvbHZlZCBzeW5jIHByb21pc2UKICovCmZ1bmN0aW9uIHJlc29sdmVkU3luY1Byb21pc2UodmFsdWUpIHsKICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKHJlc29sdmUgPT4gewogICAgcmVzb2x2ZSh2YWx1ZSk7CiAgfSk7Cn0KCi8qKgogKiBDcmVhdGVzIGEgcmVqZWN0ZWQgc3luYyBwcm9taXNlLgogKgogKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIHJlamVjdCB0aGUgcHJvbWlzZSB3aXRoCiAqIEByZXR1cm5zIHRoZSByZWplY3RlZCBzeW5jIHByb21pc2UKICovCmZ1bmN0aW9uIHJlamVjdGVkU3luY1Byb21pc2UocmVhc29uKSB7CiAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7CiAgICByZWplY3QocmVhc29uKTsKICB9KTsKfQoKLyoqCiAqIFRoZW5hYmxlIGNsYXNzIHRoYXQgYmVoYXZlcyBsaWtlIGEgUHJvbWlzZSBhbmQgZm9sbG93cyBpdCdzIGludGVyZmFjZQogKiBidXQgaXMgbm90IGFzeW5jIGludGVybmFsbHkKICovCmNsYXNzIFN5bmNQcm9taXNlIHsKCiAgIGNvbnN0cnVjdG9yKAogICAgZXhlY3V0b3IsCiAgKSB7U3luY1Byb21pc2UucHJvdG90eXBlLl9faW5pdC5jYWxsKHRoaXMpO1N5bmNQcm9taXNlLnByb3RvdHlwZS5fX2luaXQyLmNhbGwodGhpcyk7U3luY1Byb21pc2UucHJvdG90eXBlLl9faW5pdDMuY2FsbCh0aGlzKTtTeW5jUHJvbWlzZS5wcm90b3R5cGUuX19pbml0NC5jYWxsKHRoaXMpOwogICAgdGhpcy5fc3RhdGUgPSBTdGF0ZXMuUEVORElORzsKICAgIHRoaXMuX2hhbmRsZXJzID0gW107CgogICAgdHJ5IHsKICAgICAgZXhlY3V0b3IodGhpcy5fcmVzb2x2ZSwgdGhpcy5fcmVqZWN0KTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgdGhpcy5fcmVqZWN0KGUpOwogICAgfQogIH0KCiAgLyoqIEpTRG9jICovCiAgIHRoZW4oCiAgICBvbmZ1bGZpbGxlZCwKICAgIG9ucmVqZWN0ZWQsCiAgKSB7CiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgdGhpcy5faGFuZGxlcnMucHVzaChbCiAgICAgICAgZmFsc2UsCiAgICAgICAgcmVzdWx0ID0+IHsKICAgICAgICAgIGlmICghb25mdWxmaWxsZWQpIHsKICAgICAgICAgICAgLy8gVE9ETzogwq9cXyjjg4QpXy/CrwogICAgICAgICAgICAvLyBUT0RPOiBGSVhNRQogICAgICAgICAgICByZXNvbHZlKHJlc3VsdCApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICByZXNvbHZlKG9uZnVsZmlsbGVkKHJlc3VsdCkpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICByZWFzb24gPT4gewogICAgICAgICAgaWYgKCFvbnJlamVjdGVkKSB7CiAgICAgICAgICAgIHJlamVjdChyZWFzb24pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICByZXNvbHZlKG9ucmVqZWN0ZWQocmVhc29uKSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICByZWplY3QoZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICBdKTsKICAgICAgdGhpcy5fZXhlY3V0ZUhhbmRsZXJzKCk7CiAgICB9KTsKICB9CgogIC8qKiBKU0RvYyAqLwogICBjYXRjaCgKICAgIG9ucmVqZWN0ZWQsCiAgKSB7CiAgICByZXR1cm4gdGhpcy50aGVuKHZhbCA9PiB2YWwsIG9ucmVqZWN0ZWQpOwogIH0KCiAgLyoqIEpTRG9jICovCiAgIGZpbmFsbHkob25maW5hbGx5KSB7CiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgbGV0IHZhbDsKICAgICAgbGV0IGlzUmVqZWN0ZWQ7CgogICAgICByZXR1cm4gdGhpcy50aGVuKAogICAgICAgIHZhbHVlID0+IHsKICAgICAgICAgIGlzUmVqZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgIHZhbCA9IHZhbHVlOwogICAgICAgICAgaWYgKG9uZmluYWxseSkgewogICAgICAgICAgICBvbmZpbmFsbHkoKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHJlYXNvbiA9PiB7CiAgICAgICAgICBpc1JlamVjdGVkID0gdHJ1ZTsKICAgICAgICAgIHZhbCA9IHJlYXNvbjsKICAgICAgICAgIGlmIChvbmZpbmFsbHkpIHsKICAgICAgICAgICAgb25maW5hbGx5KCk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgKS50aGVuKCgpID0+IHsKICAgICAgICBpZiAoaXNSZWplY3RlZCkgewogICAgICAgICAgcmVqZWN0KHZhbCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICByZXNvbHZlKHZhbCApOwogICAgICB9KTsKICAgIH0pOwogIH0KCiAgLyoqIEpTRG9jICovCiAgICBfX2luaXQoKSB7dGhpcy5fcmVzb2x2ZSA9ICh2YWx1ZSkgPT4gewogICAgdGhpcy5fc2V0UmVzdWx0KFN0YXRlcy5SRVNPTFZFRCwgdmFsdWUpOwogIH07fQoKICAvKiogSlNEb2MgKi8KICAgIF9faW5pdDIoKSB7dGhpcy5fcmVqZWN0ID0gKHJlYXNvbikgPT4gewogICAgdGhpcy5fc2V0UmVzdWx0KFN0YXRlcy5SRUpFQ1RFRCwgcmVhc29uKTsKICB9O30KCiAgLyoqIEpTRG9jICovCiAgICBfX2luaXQzKCkge3RoaXMuX3NldFJlc3VsdCA9IChzdGF0ZSwgdmFsdWUpID0+IHsKICAgIGlmICh0aGlzLl9zdGF0ZSAhPT0gU3RhdGVzLlBFTkRJTkcpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChpc1RoZW5hYmxlKHZhbHVlKSkgewogICAgICB2b2lkICh2YWx1ZSApLnRoZW4odGhpcy5fcmVzb2x2ZSwgdGhpcy5fcmVqZWN0KTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHRoaXMuX3N0YXRlID0gc3RhdGU7CiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlOwoKICAgIHRoaXMuX2V4ZWN1dGVIYW5kbGVycygpOwogIH07fQoKICAvKiogSlNEb2MgKi8KICAgIF9faW5pdDQoKSB7dGhpcy5fZXhlY3V0ZUhhbmRsZXJzID0gKCkgPT4gewogICAgaWYgKHRoaXMuX3N0YXRlID09PSBTdGF0ZXMuUEVORElORykgewogICAgICByZXR1cm47CiAgICB9CgogICAgY29uc3QgY2FjaGVkSGFuZGxlcnMgPSB0aGlzLl9oYW5kbGVycy5zbGljZSgpOwogICAgdGhpcy5faGFuZGxlcnMgPSBbXTsKCiAgICBjYWNoZWRIYW5kbGVycy5mb3JFYWNoKGhhbmRsZXIgPT4gewogICAgICBpZiAoaGFuZGxlclswXSkgewogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSBTdGF0ZXMuUkVTT0xWRUQpIHsKICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzCiAgICAgICAgaGFuZGxlclsxXSh0aGlzLl92YWx1ZSApOwogICAgICB9CgogICAgICBpZiAodGhpcy5fc3RhdGUgPT09IFN0YXRlcy5SRUpFQ1RFRCkgewogICAgICAgIGhhbmRsZXJbMl0odGhpcy5fdmFsdWUpOwogICAgICB9CgogICAgICBoYW5kbGVyWzBdID0gdHJ1ZTsKICAgIH0pOwogIH07fQp9CgovKioKICogQ3JlYXRlcyBhbiBuZXcgUHJvbWlzZUJ1ZmZlciBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIGxpbWl0CiAqIEBwYXJhbSBsaW1pdCBtYXggbnVtYmVyIG9mIHByb21pc2VzIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgYnVmZmVyCiAqLwpmdW5jdGlvbiBtYWtlUHJvbWlzZUJ1ZmZlcihsaW1pdCkgewogIGNvbnN0IGJ1ZmZlciA9IFtdOwoKICBmdW5jdGlvbiBpc1JlYWR5KCkgewogICAgcmV0dXJuIGxpbWl0ID09PSB1bmRlZmluZWQgfHwgYnVmZmVyLmxlbmd0aCA8IGxpbWl0OwogIH0KCiAgLyoqCiAgICogUmVtb3ZlIGEgcHJvbWlzZSBmcm9tIHRoZSBxdWV1ZS4KICAgKgogICAqIEBwYXJhbSB0YXNrIENhbiBiZSBhbnkgUHJvbWlzZUxpa2U8VD4KICAgKiBAcmV0dXJucyBSZW1vdmVkIHByb21pc2UuCiAgICovCiAgZnVuY3Rpb24gcmVtb3ZlKHRhc2spIHsKICAgIHJldHVybiBidWZmZXIuc3BsaWNlKGJ1ZmZlci5pbmRleE9mKHRhc2spLCAxKVswXTsKICB9CgogIC8qKgogICAqIEFkZCBhIHByb21pc2UgKHJlcHJlc2VudGluZyBhbiBpbi1mbGlnaHQgYWN0aW9uKSB0byB0aGUgcXVldWUsIGFuZCBzZXQgaXQgdG8gcmVtb3ZlIGl0c2VsZiBvbiBmdWxmaWxsbWVudC4KICAgKgogICAqIEBwYXJhbSB0YXNrUHJvZHVjZXIgQSBmdW5jdGlvbiBwcm9kdWNpbmcgYW55IFByb21pc2VMaWtlPFQ+OyBJbiBwcmV2aW91cyB2ZXJzaW9ucyB0aGlzIHVzZWQgdG8gYmUgYHRhc2s6CiAgICogICAgICAgIFByb21pc2VMaWtlPFQ+YCwgYnV0IHVuZGVyIHRoYXQgbW9kZWwsIFByb21pc2VzIHdlcmUgaW5zdGFudGx5IGNyZWF0ZWQgb24gdGhlIGNhbGwtc2l0ZSBhbmQgdGhlaXIgZXhlY3V0b3IKICAgKiAgICAgICAgZnVuY3Rpb25zIHRoZXJlZm9yZSByYW4gaW1tZWRpYXRlbHkuIFRodXMsIGV2ZW4gaWYgdGhlIGJ1ZmZlciB3YXMgZnVsbCwgdGhlIGFjdGlvbiBzdGlsbCBoYXBwZW5lZC4gQnkKICAgKiAgICAgICAgcmVxdWlyaW5nIHRoZSBwcm9taXNlIHRvIGJlIHdyYXBwZWQgaW4gYSBmdW5jdGlvbiwgd2UgY2FuIGRlZmVyIHByb21pc2UgY3JlYXRpb24gdW50aWwgYWZ0ZXIgdGhlIGJ1ZmZlcgogICAqICAgICAgICBsaW1pdCBjaGVjay4KICAgKiBAcmV0dXJucyBUaGUgb3JpZ2luYWwgcHJvbWlzZS4KICAgKi8KICBmdW5jdGlvbiBhZGQodGFza1Byb2R1Y2VyKSB7CiAgICBpZiAoIWlzUmVhZHkoKSkgewogICAgICByZXR1cm4gcmVqZWN0ZWRTeW5jUHJvbWlzZShuZXcgU2VudHJ5RXJyb3IoJ05vdCBhZGRpbmcgUHJvbWlzZSBiZWNhdXNlIGJ1ZmZlciBsaW1pdCB3YXMgcmVhY2hlZC4nKSk7CiAgICB9CgogICAgLy8gc3RhcnQgdGhlIHRhc2sgYW5kIGFkZCBpdHMgcHJvbWlzZSB0byB0aGUgcXVldWUKICAgIGNvbnN0IHRhc2sgPSB0YXNrUHJvZHVjZXIoKTsKICAgIGlmIChidWZmZXIuaW5kZXhPZih0YXNrKSA9PT0gLTEpIHsKICAgICAgYnVmZmVyLnB1c2godGFzayk7CiAgICB9CiAgICB2b2lkIHRhc2sKICAgICAgLnRoZW4oKCkgPT4gcmVtb3ZlKHRhc2spKQogICAgICAvLyBVc2UgYHRoZW4obnVsbCwgcmVqZWN0aW9uSGFuZGxlcilgIHJhdGhlciB0aGFuIGBjYXRjaChyZWplY3Rpb25IYW5kbGVyKWAgc28gdGhhdCB3ZSBjYW4gdXNlIGBQcm9taXNlTGlrZWAKICAgICAgLy8gcmF0aGVyIHRoYW4gYFByb21pc2VgLiBgUHJvbWlzZUxpa2VgIGRvZXNuJ3QgaGF2ZSBhIGAuY2F0Y2hgIG1ldGhvZCwgbWFraW5nIGl0cyBwb2x5ZmlsbCBzbWFsbGVyLiAoRVM1IGRpZG4ndAogICAgICAvLyBoYXZlIHByb21pc2VzLCBzbyBUUyBoYXMgdG8gcG9seWZpbGwgd2hlbiBkb3duLWNvbXBpbGluZy4pCiAgICAgIC50aGVuKG51bGwsICgpID0+CiAgICAgICAgcmVtb3ZlKHRhc2spLnRoZW4obnVsbCwgKCkgPT4gewogICAgICAgICAgLy8gV2UgaGF2ZSB0byBhZGQgYW5vdGhlciBjYXRjaCBoZXJlIGJlY2F1c2UgYHJlbW92ZSgpYCBzdGFydHMgYSBuZXcgcHJvbWlzZSBjaGFpbi4KICAgICAgICB9KSwKICAgICAgKTsKICAgIHJldHVybiB0YXNrOwogIH0KCiAgLyoqCiAgICogV2FpdCBmb3IgYWxsIHByb21pc2VzIGluIHRoZSBxdWV1ZSB0byByZXNvbHZlIG9yIGZvciB0aW1lb3V0IHRvIGV4cGlyZSwgd2hpY2hldmVyIGNvbWVzIGZpcnN0LgogICAqCiAgICogQHBhcmFtIHRpbWVvdXQgVGhlIHRpbWUsIGluIG1zLCBhZnRlciB3aGljaCB0byByZXNvbHZlIHRvIGBmYWxzZWAgaWYgdGhlIHF1ZXVlIGlzIHN0aWxsIG5vbi1lbXB0eS4gUGFzc2luZyBgMGAgKG9yCiAgICogbm90IHBhc3NpbmcgYW55dGhpbmcpIHdpbGwgbWFrZSB0aGUgcHJvbWlzZSB3YWl0IGFzIGxvbmcgYXMgaXQgdGFrZXMgZm9yIHRoZSBxdWV1ZSB0byBkcmFpbiBiZWZvcmUgcmVzb2x2aW5nIHRvCiAgICogYHRydWVgLgogICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCB3aWxsIHJlc29sdmUgdG8gYHRydWVgIGlmIHRoZSBxdWV1ZSBpcyBhbHJlYWR5IGVtcHR5IG9yIGRyYWlucyBiZWZvcmUgdGhlIHRpbWVvdXQsIGFuZAogICAqIGBmYWxzZWAgb3RoZXJ3aXNlCiAgICovCiAgZnVuY3Rpb24gZHJhaW4odGltZW91dCkgewogICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIGxldCBjb3VudGVyID0gYnVmZmVyLmxlbmd0aDsKCiAgICAgIGlmICghY291bnRlcikgewogICAgICAgIHJldHVybiByZXNvbHZlKHRydWUpOwogICAgICB9CgogICAgICAvLyB3YWl0IGZvciBgdGltZW91dGAgbXMgYW5kIHRoZW4gcmVzb2x2ZSB0byBgZmFsc2VgIChpZiBub3QgY2FuY2VsbGVkIGZpcnN0KQogICAgICBjb25zdCBjYXB0dXJlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICBpZiAodGltZW91dCAmJiB0aW1lb3V0ID4gMCkgewogICAgICAgICAgcmVzb2x2ZShmYWxzZSk7CiAgICAgICAgfQogICAgICB9LCB0aW1lb3V0KTsKCiAgICAgIC8vIGlmIGFsbCBwcm9taXNlcyByZXNvbHZlIGluIHRpbWUsIGNhbmNlbCB0aGUgdGltZXIgYW5kIHJlc29sdmUgdG8gYHRydWVgCiAgICAgIGJ1ZmZlci5mb3JFYWNoKGl0ZW0gPT4gewogICAgICAgIHZvaWQgcmVzb2x2ZWRTeW5jUHJvbWlzZShpdGVtKS50aGVuKCgpID0+IHsKICAgICAgICAgIGlmICghLS1jb3VudGVyKSB7CiAgICAgICAgICAgIGNsZWFyVGltZW91dChjYXB0dXJlZFNldFRpbWVvdXQpOwogICAgICAgICAgICByZXNvbHZlKHRydWUpOwogICAgICAgICAgfQogICAgICAgIH0sIHJlamVjdCk7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICByZXR1cm4gewogICAgJDogYnVmZmVyLAogICAgYWRkLAogICAgZHJhaW4sCiAgfTsKfQoKY29uc3QgT05FX1NFQ09ORF9JTl9NUyA9IDEwMDA7CgovKioKICogQSBwYXJ0aWFsIGRlZmluaXRpb24gb2YgdGhlIFtQZXJmb3JtYW5jZSBXZWIgQVBJXXtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUGVyZm9ybWFuY2V9CiAqIGZvciBhY2Nlc3NpbmcgYSBoaWdoLXJlc29sdXRpb24gbW9ub3RvbmljIGNsb2NrLgogKi8KCi8qKgogKiBSZXR1cm5zIGEgdGltZXN0YW1wIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2ggdXNpbmcgdGhlIERhdGUgQVBJLgogKgogKiBUT0RPKHY4KTogUmV0dXJuIHR5cGUgc2hvdWxkIGJlIHJvdW5kZWQuCiAqLwpmdW5jdGlvbiBkYXRlVGltZXN0YW1wSW5TZWNvbmRzKCkgewogIHJldHVybiBEYXRlLm5vdygpIC8gT05FX1NFQ09ORF9JTl9NUzsKfQoKLyoqCiAqIFJldHVybnMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIFBlcmZvcm1hbmNlIEFQSSBicm93c2VyIGltcGxlbWVudGF0aW9uLCBvciB1bmRlZmluZWQgZm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90CiAqIHN1cHBvcnQgdGhlIEFQSS4KICoKICogV3JhcHBpbmcgdGhlIG5hdGl2ZSBBUEkgd29ya3MgYXJvdW5kIGRpZmZlcmVuY2VzIGluIGJlaGF2aW9yIGZyb20gZGlmZmVyZW50IGJyb3dzZXJzLgogKi8KZnVuY3Rpb24gY3JlYXRlVW5peFRpbWVzdGFtcEluU2Vjb25kc0Z1bmMoKSB7CiAgY29uc3QgeyBwZXJmb3JtYW5jZSB9ID0gR0xPQkFMX09CSiA7CiAgaWYgKCFwZXJmb3JtYW5jZSB8fCAhcGVyZm9ybWFuY2Uubm93KSB7CiAgICByZXR1cm4gZGF0ZVRpbWVzdGFtcEluU2Vjb25kczsKICB9CgogIC8vIFNvbWUgYnJvd3NlciBhbmQgZW52aXJvbm1lbnRzIGRvbid0IGhhdmUgYSB0aW1lT3JpZ2luLCBzbyB3ZSBmYWxsYmFjayB0bwogIC8vIHVzaW5nIERhdGUubm93KCkgdG8gY29tcHV0ZSB0aGUgc3RhcnRpbmcgdGltZS4KICBjb25zdCBhcHByb3hTdGFydGluZ1RpbWVPcmlnaW4gPSBEYXRlLm5vdygpIC0gcGVyZm9ybWFuY2Uubm93KCk7CiAgY29uc3QgdGltZU9yaWdpbiA9IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gPT0gdW5kZWZpbmVkID8gYXBwcm94U3RhcnRpbmdUaW1lT3JpZ2luIDogcGVyZm9ybWFuY2UudGltZU9yaWdpbjsKCiAgLy8gcGVyZm9ybWFuY2Uubm93KCkgaXMgYSBtb25vdG9uaWMgY2xvY2ssIHdoaWNoIG1lYW5zIGl0IHN0YXJ0cyBhdCAwIHdoZW4gdGhlIHByb2Nlc3MgYmVnaW5zLiBUbyBnZXQgdGhlIGN1cnJlbnQKICAvLyB3YWxsIGNsb2NrIHRpbWUgKGFjdHVhbCBVTklYIHRpbWVzdGFtcCksIHdlIG5lZWQgdG8gYWRkIHRoZSBzdGFydGluZyB0aW1lIG9yaWdpbiBhbmQgdGhlIGN1cnJlbnQgdGltZSBlbGFwc2VkLgogIC8vCiAgLy8gVE9ETzogVGhpcyBkb2VzIG5vdCBhY2NvdW50IGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgbW9ub3RvbmljIGNsb2NrIHRoYXQgcG93ZXJzIHBlcmZvcm1hbmNlLm5vdygpIGRyaWZ0cyBmcm9tIHRoZQogIC8vIHdhbGwgY2xvY2sgdGltZSwgd2hpY2ggY2F1c2VzIHRoZSByZXR1cm5lZCB0aW1lc3RhbXAgdG8gYmUgaW5hY2N1cmF0ZS4gV2Ugc2hvdWxkIGludmVzdGlnYXRlIGhvdyB0byBkZXRlY3QgYW5kCiAgLy8gY29ycmVjdCBmb3IgdGhpcy4KICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1OTAKICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tZG4vY29udGVudC9pc3N1ZXMvNDcxMwogIC8vIFNlZTogaHR0cHM6Ly9kZXYudG8vbm9hbXIvd2hlbi1hLW1pbGxpc2Vjb25kLWlzLW5vdC1hLW1pbGxpc2Vjb25kLTNoNgogIHJldHVybiAoKSA9PiB7CiAgICByZXR1cm4gKHRpbWVPcmlnaW4gKyBwZXJmb3JtYW5jZS5ub3coKSkgLyBPTkVfU0VDT05EX0lOX01TOwogIH07Cn0KCi8qKgogKiBSZXR1cm5zIGEgdGltZXN0YW1wIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2ggdXNpbmcgZWl0aGVyIHRoZSBQZXJmb3JtYW5jZSBvciBEYXRlIEFQSXMsIGRlcGVuZGluZyBvbiB0aGUKICogYXZhaWxhYmlsaXR5IG9mIHRoZSBQZXJmb3JtYW5jZSBBUEkuCiAqCiAqIEJVRzogTm90ZSB0aGF0IGJlY2F1c2Ugb2YgaG93IGJyb3dzZXJzIGltcGxlbWVudCB0aGUgUGVyZm9ybWFuY2UgQVBJLCB0aGUgY2xvY2sgbWlnaHQgc3RvcCB3aGVuIHRoZSBjb21wdXRlciBpcwogKiBhc2xlZXAuIFRoaXMgY3JlYXRlcyBhIHNrZXcgYmV0d2VlbiBgZGF0ZVRpbWVzdGFtcEluU2Vjb25kc2AgYW5kIGB0aW1lc3RhbXBJblNlY29uZHNgLiBUaGUKICogc2tldyBjYW4gZ3JvdyB0byBhcmJpdHJhcnkgYW1vdW50cyBsaWtlIGRheXMsIHdlZWtzIG9yIG1vbnRocy4KICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1OTAuCiAqLwpjb25zdCB0aW1lc3RhbXBJblNlY29uZHMgPSBjcmVhdGVVbml4VGltZXN0YW1wSW5TZWNvbmRzRnVuYygpOwoKLyoqCiAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoLiBUaGlzIHZhbHVlIGlzIG9ubHkgdXNhYmxlIGluIGEgYnJvd3NlciwgYW5kIG9ubHkgd2hlbiB0aGUKICogcGVyZm9ybWFuY2UgQVBJIGlzIGF2YWlsYWJsZS4KICovCigoKSA9PiB7CiAgLy8gVW5mb3J0dW5hdGVseSBicm93c2VycyBtYXkgcmVwb3J0IGFuIGluYWNjdXJhdGUgdGltZSBvcmlnaW4gZGF0YSwgdGhyb3VnaCBlaXRoZXIgcGVyZm9ybWFuY2UudGltZU9yaWdpbiBvcgogIC8vIHBlcmZvcm1hbmNlLnRpbWluZy5uYXZpZ2F0aW9uU3RhcnQsIHdoaWNoIHJlc3VsdHMgaW4gcG9vciByZXN1bHRzIGluIHBlcmZvcm1hbmNlIGRhdGEuIFdlIG9ubHkgdHJlYXQgdGltZSBvcmlnaW4KICAvLyBkYXRhIGFzIHJlbGlhYmxlIGlmIHRoZXkgYXJlIHdpdGhpbiBhIHJlYXNvbmFibGUgdGhyZXNob2xkIG9mIHRoZSBjdXJyZW50IHRpbWUuCgogIGNvbnN0IHsgcGVyZm9ybWFuY2UgfSA9IEdMT0JBTF9PQkogOwogIGlmICghcGVyZm9ybWFuY2UgfHwgIXBlcmZvcm1hbmNlLm5vdykgewogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CgogIGNvbnN0IHRocmVzaG9sZCA9IDM2MDAgKiAxMDAwOwogIGNvbnN0IHBlcmZvcm1hbmNlTm93ID0gcGVyZm9ybWFuY2Uubm93KCk7CiAgY29uc3QgZGF0ZU5vdyA9IERhdGUubm93KCk7CgogIC8vIGlmIHRpbWVPcmlnaW4gaXNuJ3QgYXZhaWxhYmxlIHNldCBkZWx0YSB0byB0aHJlc2hvbGQgc28gaXQgaXNuJ3QgdXNlZAogIGNvbnN0IHRpbWVPcmlnaW5EZWx0YSA9IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4KICAgID8gTWF0aC5hYnMocGVyZm9ybWFuY2UudGltZU9yaWdpbiArIHBlcmZvcm1hbmNlTm93IC0gZGF0ZU5vdykKICAgIDogdGhyZXNob2xkOwogIGNvbnN0IHRpbWVPcmlnaW5Jc1JlbGlhYmxlID0gdGltZU9yaWdpbkRlbHRhIDwgdGhyZXNob2xkOwoKICAvLyBXaGlsZSBwZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0IGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgcGVyZm9ybWFuY2UudGltZU9yaWdpbiwgcGVyZm9ybWFuY2UudGltZU9yaWdpbgogIC8vIGlzIG5vdCBhcyB3aWRlbHkgc3VwcG9ydGVkLiBOYW1lbHksIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gaXMgdW5kZWZpbmVkIGluIFNhZmFyaSBhcyBvZiB3cml0aW5nLgogIC8vIEFsc28gYXMgb2Ygd3JpdGluZywgcGVyZm9ybWFuY2UudGltaW5nIGlzIG5vdCBhdmFpbGFibGUgaW4gV2ViIFdvcmtlcnMgaW4gbWFpbnN0cmVhbSBicm93c2Vycywgc28gaXQgaXMgbm90IGFsd2F5cwogIC8vIGEgdmFsaWQgZmFsbGJhY2suIEluIHRoZSBhYnNlbmNlIG9mIGFuIGluaXRpYWwgdGltZSBwcm92aWRlZCBieSB0aGUgYnJvd3NlciwgZmFsbGJhY2sgdG8gdGhlIGN1cnJlbnQgdGltZSBmcm9tIHRoZQogIC8vIERhdGUgQVBJLgogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIGNvbnN0IG5hdmlnYXRpb25TdGFydCA9IHBlcmZvcm1hbmNlLnRpbWluZyAmJiBwZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0OwogIGNvbnN0IGhhc05hdmlnYXRpb25TdGFydCA9IHR5cGVvZiBuYXZpZ2F0aW9uU3RhcnQgPT09ICdudW1iZXInOwogIC8vIGlmIG5hdmlnYXRpb25TdGFydCBpc24ndCBhdmFpbGFibGUgc2V0IGRlbHRhIHRvIHRocmVzaG9sZCBzbyBpdCBpc24ndCB1c2VkCiAgY29uc3QgbmF2aWdhdGlvblN0YXJ0RGVsdGEgPSBoYXNOYXZpZ2F0aW9uU3RhcnQgPyBNYXRoLmFicyhuYXZpZ2F0aW9uU3RhcnQgKyBwZXJmb3JtYW5jZU5vdyAtIGRhdGVOb3cpIDogdGhyZXNob2xkOwogIGNvbnN0IG5hdmlnYXRpb25TdGFydElzUmVsaWFibGUgPSBuYXZpZ2F0aW9uU3RhcnREZWx0YSA8IHRocmVzaG9sZDsKCiAgaWYgKHRpbWVPcmlnaW5Jc1JlbGlhYmxlIHx8IG5hdmlnYXRpb25TdGFydElzUmVsaWFibGUpIHsKICAgIC8vIFVzZSB0aGUgbW9yZSByZWxpYWJsZSB0aW1lIG9yaWdpbgogICAgaWYgKHRpbWVPcmlnaW5EZWx0YSA8PSBuYXZpZ2F0aW9uU3RhcnREZWx0YSkgewogICAgICByZXR1cm4gcGVyZm9ybWFuY2UudGltZU9yaWdpbjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuYXZpZ2F0aW9uU3RhcnQ7CiAgICB9CiAgfQogIHJldHVybiBkYXRlTm93Owp9KSgpOwoKLyoqCiAqIENyZWF0ZXMgYW4gZW52ZWxvcGUuCiAqIE1ha2Ugc3VyZSB0byBhbHdheXMgZXhwbGljaXRseSBwcm92aWRlIHRoZSBnZW5lcmljIHRvIHRoaXMgZnVuY3Rpb24KICogc28gdGhhdCB0aGUgZW52ZWxvcGUgdHlwZXMgcmVzb2x2ZSBjb3JyZWN0bHkuCiAqLwpmdW5jdGlvbiBjcmVhdGVFbnZlbG9wZShoZWFkZXJzLCBpdGVtcyA9IFtdKSB7CiAgcmV0dXJuIFtoZWFkZXJzLCBpdGVtc10gOwp9CgovKioKICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gbG9vcCB0aHJvdWdoIHRoZSBpdGVtcyBhbmQgaXRlbSB0eXBlcyBvZiBhbiBlbnZlbG9wZS4KICogKFRoaXMgZnVuY3Rpb24gd2FzIG1vc3RseSBjcmVhdGVkIGJlY2F1c2Ugd29ya2luZyB3aXRoIGVudmVsb3BlIHR5cGVzIGlzIHBhaW5mdWwgYXQgdGhlIG1vbWVudCkKICoKICogSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSwgdGhlIHJlc3Qgb2YgdGhlIGl0ZW1zIHdpbGwgYmUgc2tpcHBlZC4KICovCmZ1bmN0aW9uIGZvckVhY2hFbnZlbG9wZUl0ZW0oCiAgZW52ZWxvcGUsCiAgY2FsbGJhY2ssCikgewogIGNvbnN0IGVudmVsb3BlSXRlbXMgPSBlbnZlbG9wZVsxXTsKCiAgZm9yIChjb25zdCBlbnZlbG9wZUl0ZW0gb2YgZW52ZWxvcGVJdGVtcykgewogICAgY29uc3QgZW52ZWxvcGVJdGVtVHlwZSA9IGVudmVsb3BlSXRlbVswXS50eXBlOwogICAgY29uc3QgcmVzdWx0ID0gY2FsbGJhY2soZW52ZWxvcGVJdGVtLCBlbnZlbG9wZUl0ZW1UeXBlKTsKCiAgICBpZiAocmVzdWx0KSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KCiAgcmV0dXJuIGZhbHNlOwp9CgovKioKICogRW5jb2RlIGEgc3RyaW5nIHRvIFVURjguCiAqLwpmdW5jdGlvbiBlbmNvZGVVVEY4KGlucHV0LCB0ZXh0RW5jb2RlcikgewogIGNvbnN0IHV0ZjggPSB0ZXh0RW5jb2RlciB8fCBuZXcgVGV4dEVuY29kZXIoKTsKICByZXR1cm4gdXRmOC5lbmNvZGUoaW5wdXQpOwp9CgovKioKICogU2VyaWFsaXplcyBhbiBlbnZlbG9wZS4KICovCmZ1bmN0aW9uIHNlcmlhbGl6ZUVudmVsb3BlKGVudmVsb3BlLCB0ZXh0RW5jb2RlcikgewogIGNvbnN0IFtlbnZIZWFkZXJzLCBpdGVtc10gPSBlbnZlbG9wZTsKCiAgLy8gSW5pdGlhbGx5IHdlIGNvbnN0cnVjdCBvdXIgZW52ZWxvcGUgYXMgYSBzdHJpbmcgYW5kIG9ubHkgY29udmVydCB0byBiaW5hcnkgY2h1bmtzIGlmIHdlIGVuY291bnRlciBiaW5hcnkgZGF0YQogIGxldCBwYXJ0cyA9IEpTT04uc3RyaW5naWZ5KGVudkhlYWRlcnMpOwoKICBmdW5jdGlvbiBhcHBlbmQobmV4dCkgewogICAgaWYgKHR5cGVvZiBwYXJ0cyA9PT0gJ3N0cmluZycpIHsKICAgICAgcGFydHMgPSB0eXBlb2YgbmV4dCA9PT0gJ3N0cmluZycgPyBwYXJ0cyArIG5leHQgOiBbZW5jb2RlVVRGOChwYXJ0cywgdGV4dEVuY29kZXIpLCBuZXh0XTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnRzLnB1c2godHlwZW9mIG5leHQgPT09ICdzdHJpbmcnID8gZW5jb2RlVVRGOChuZXh0LCB0ZXh0RW5jb2RlcikgOiBuZXh0KTsKICAgIH0KICB9CgogIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykgewogICAgY29uc3QgW2l0ZW1IZWFkZXJzLCBwYXlsb2FkXSA9IGl0ZW07CgogICAgYXBwZW5kKGBcbiR7SlNPTi5zdHJpbmdpZnkoaXRlbUhlYWRlcnMpfVxuYCk7CgogICAgaWYgKHR5cGVvZiBwYXlsb2FkID09PSAnc3RyaW5nJyB8fCBwYXlsb2FkIGluc3RhbmNlb2YgVWludDhBcnJheSkgewogICAgICBhcHBlbmQocGF5bG9hZCk7CiAgICB9IGVsc2UgewogICAgICBsZXQgc3RyaW5naWZpZWRQYXlsb2FkOwogICAgICB0cnkgewogICAgICAgIHN0cmluZ2lmaWVkUGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgLy8gSW4gY2FzZSwgZGVzcGl0ZSBhbGwgb3VyIGVmZm9ydHMgdG8ga2VlcCBgcGF5bG9hZGAgY2lyY3VsYXItZGVwZW5kZW5jeS1mcmVlLCBgSlNPTi5zdHJpbmlmeSgpYCBzdGlsbAogICAgICAgIC8vIGZhaWxzLCB3ZSB0cnkgYWdhaW4gYWZ0ZXIgbm9ybWFsaXppbmcgaXQgYWdhaW4gd2l0aCBpbmZpbml0ZSBub3JtYWxpemF0aW9uIGRlcHRoLiBUaGlzIG9mIGNvdXJzZSBoYXMgYQogICAgICAgIC8vIHBlcmZvcm1hbmNlIGltcGFjdCBidXQgaW4gdGhpcyBjYXNlIGEgcGVyZm9ybWFuY2UgaGl0IGlzIGJldHRlciB0aGFuIHRocm93aW5nLgogICAgICAgIHN0cmluZ2lmaWVkUGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KG5vcm1hbGl6ZShwYXlsb2FkKSk7CiAgICAgIH0KICAgICAgYXBwZW5kKHN0cmluZ2lmaWVkUGF5bG9hZCk7CiAgICB9CiAgfQoKICByZXR1cm4gdHlwZW9mIHBhcnRzID09PSAnc3RyaW5nJyA/IHBhcnRzIDogY29uY2F0QnVmZmVycyhwYXJ0cyk7Cn0KCmZ1bmN0aW9uIGNvbmNhdEJ1ZmZlcnMoYnVmZmVycykgewogIGNvbnN0IHRvdGFsTGVuZ3RoID0gYnVmZmVycy5yZWR1Y2UoKGFjYywgYnVmKSA9PiBhY2MgKyBidWYubGVuZ3RoLCAwKTsKCiAgY29uc3QgbWVyZ2VkID0gbmV3IFVpbnQ4QXJyYXkodG90YWxMZW5ndGgpOwogIGxldCBvZmZzZXQgPSAwOwogIGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnMpIHsKICAgIG1lcmdlZC5zZXQoYnVmZmVyLCBvZmZzZXQpOwogICAgb2Zmc2V0ICs9IGJ1ZmZlci5sZW5ndGg7CiAgfQoKICByZXR1cm4gbWVyZ2VkOwp9Cgpjb25zdCBJVEVNX1RZUEVfVE9fREFUQV9DQVRFR09SWV9NQVAgPSB7CiAgc2Vzc2lvbjogJ3Nlc3Npb24nLAogIHNlc3Npb25zOiAnc2Vzc2lvbicsCiAgYXR0YWNobWVudDogJ2F0dGFjaG1lbnQnLAogIHRyYW5zYWN0aW9uOiAndHJhbnNhY3Rpb24nLAogIGV2ZW50OiAnZXJyb3InLAogIGNsaWVudF9yZXBvcnQ6ICdpbnRlcm5hbCcsCiAgdXNlcl9yZXBvcnQ6ICdkZWZhdWx0JywKICBwcm9maWxlOiAncHJvZmlsZScsCiAgcmVwbGF5X2V2ZW50OiAncmVwbGF5JywKICByZXBsYXlfcmVjb3JkaW5nOiAncmVwbGF5JywKICBjaGVja19pbjogJ21vbml0b3InLAogIGZlZWRiYWNrOiAnZmVlZGJhY2snLAogIHNwYW46ICdzcGFuJywKICAvLyBUT0RPOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgdW50aWwgd2UgaGF2ZSBhIHByb3BlciBkYXRhIGNhdGVnb3J5IGZvciBtZXRyaWNzCiAgc3RhdHNkOiAndW5rbm93bicsCn07CgovKioKICogTWFwcyB0aGUgdHlwZSBvZiBhbiBlbnZlbG9wZSBpdGVtIHRvIGEgZGF0YSBjYXRlZ29yeS4KICovCmZ1bmN0aW9uIGVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSh0eXBlKSB7CiAgcmV0dXJuIElURU1fVFlQRV9UT19EQVRBX0NBVEVHT1JZX01BUFt0eXBlXTsKfQoKLyoqIEV4dHJhY3RzIHRoZSBtaW5pbWFsIFNESyBpbmZvIGZyb20gZnJvbSB0aGUgbWV0YWRhdGEgb3IgYW4gZXZlbnRzICovCmZ1bmN0aW9uIGdldFNka01ldGFkYXRhRm9yRW52ZWxvcGVIZWFkZXIobWV0YWRhdGFPckV2ZW50KSB7CiAgaWYgKCFtZXRhZGF0YU9yRXZlbnQgfHwgIW1ldGFkYXRhT3JFdmVudC5zZGspIHsKICAgIHJldHVybjsKICB9CiAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uIH0gPSBtZXRhZGF0YU9yRXZlbnQuc2RrOwogIHJldHVybiB7IG5hbWUsIHZlcnNpb24gfTsKfQoKLyoqCiAqIENyZWF0ZXMgZXZlbnQgZW52ZWxvcGUgaGVhZGVycywgYmFzZWQgb24gZXZlbnQsIHNkayBpbmZvIGFuZCB0dW5uZWwKICogTm90ZTogVGhpcyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGZyb20gdGhlIGNvcmUgcGFja2FnZSB0byBtYWtlIGl0IGF2YWlsYWJsZSBpbiBSZXBsYXkKICovCmZ1bmN0aW9uIGNyZWF0ZUV2ZW50RW52ZWxvcGVIZWFkZXJzKAogIGV2ZW50LAogIHNka0luZm8sCiAgdHVubmVsLAogIGRzbiwKKSB7CiAgY29uc3QgZHluYW1pY1NhbXBsaW5nQ29udGV4dCA9IGV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YSAmJiBldmVudC5zZGtQcm9jZXNzaW5nTWV0YWRhdGEuZHluYW1pY1NhbXBsaW5nQ29udGV4dDsKICByZXR1cm4gewogICAgZXZlbnRfaWQ6IGV2ZW50LmV2ZW50X2lkICwKICAgIHNlbnRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwKICAgIC4uLihzZGtJbmZvICYmIHsgc2RrOiBzZGtJbmZvIH0pLAogICAgLi4uKCEhdHVubmVsICYmIGRzbiAmJiB7IGRzbjogZHNuVG9TdHJpbmcoZHNuKSB9KSwKICAgIC4uLihkeW5hbWljU2FtcGxpbmdDb250ZXh0ICYmIHsKICAgICAgdHJhY2U6IGRyb3BVbmRlZmluZWRLZXlzKHsgLi4uZHluYW1pY1NhbXBsaW5nQ29udGV4dCB9KSwKICAgIH0pLAogIH07Cn0KCi8vIEludGVudGlvbmFsbHkga2VlcGluZyB0aGUga2V5IGJyb2FkLCBhcyB3ZSBkb24ndCBrbm93IGZvciBzdXJlIHdoYXQgcmF0ZSBsaW1pdCBoZWFkZXJzIGdldCByZXR1cm5lZCBmcm9tIGJhY2tlbmQKCmNvbnN0IERFRkFVTFRfUkVUUllfQUZURVIgPSA2MCAqIDEwMDA7IC8vIDYwIHNlY29uZHMKCi8qKgogKiBFeHRyYWN0cyBSZXRyeS1BZnRlciB2YWx1ZSBmcm9tIHRoZSByZXF1ZXN0IGhlYWRlciBvciByZXR1cm5zIGRlZmF1bHQgdmFsdWUKICogQHBhcmFtIGhlYWRlciBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgJ1JldHJ5LUFmdGVyJyBoZWFkZXIKICogQHBhcmFtIG5vdyBjdXJyZW50IHVuaXggdGltZXN0YW1wCiAqCiAqLwpmdW5jdGlvbiBwYXJzZVJldHJ5QWZ0ZXJIZWFkZXIoaGVhZGVyLCBub3cgPSBEYXRlLm5vdygpKSB7CiAgY29uc3QgaGVhZGVyRGVsYXkgPSBwYXJzZUludChgJHtoZWFkZXJ9YCwgMTApOwogIGlmICghaXNOYU4oaGVhZGVyRGVsYXkpKSB7CiAgICByZXR1cm4gaGVhZGVyRGVsYXkgKiAxMDAwOwogIH0KCiAgY29uc3QgaGVhZGVyRGF0ZSA9IERhdGUucGFyc2UoYCR7aGVhZGVyfWApOwogIGlmICghaXNOYU4oaGVhZGVyRGF0ZSkpIHsKICAgIHJldHVybiBoZWFkZXJEYXRlIC0gbm93OwogIH0KCiAgcmV0dXJuIERFRkFVTFRfUkVUUllfQUZURVI7Cn0KCi8qKgogKiBHZXRzIHRoZSB0aW1lIHRoYXQgdGhlIGdpdmVuIGNhdGVnb3J5IGlzIGRpc2FibGVkIHVudGlsIGZvciByYXRlIGxpbWl0aW5nLgogKiBJbiBjYXNlIG5vIGNhdGVnb3J5LXNwZWNpZmljIGxpbWl0IGlzIHNldCBidXQgYSBnZW5lcmFsIHJhdGUgbGltaXQgYWNyb3NzIGFsbCBjYXRlZ29yaWVzIGlzIGFjdGl2ZSwKICogdGhhdCB0aW1lIGlzIHJldHVybmVkLgogKgogKiBAcmV0dXJuIHRoZSB0aW1lIGluIG1zIHRoYXQgdGhlIGNhdGVnb3J5IGlzIGRpc2FibGVkIHVudGlsIG9yIDAgaWYgdGhlcmUncyBubyBhY3RpdmUgcmF0ZSBsaW1pdC4KICovCmZ1bmN0aW9uIGRpc2FibGVkVW50aWwobGltaXRzLCBjYXRlZ29yeSkgewogIHJldHVybiBsaW1pdHNbY2F0ZWdvcnldIHx8IGxpbWl0cy5hbGwgfHwgMDsKfQoKLyoqCiAqIENoZWNrcyBpZiBhIGNhdGVnb3J5IGlzIHJhdGUgbGltaXRlZAogKi8KZnVuY3Rpb24gaXNSYXRlTGltaXRlZChsaW1pdHMsIGNhdGVnb3J5LCBub3cgPSBEYXRlLm5vdygpKSB7CiAgcmV0dXJuIGRpc2FibGVkVW50aWwobGltaXRzLCBjYXRlZ29yeSkgPiBub3c7Cn0KCi8qKgogKiBVcGRhdGUgcmF0ZWxpbWl0cyBmcm9tIGluY29taW5nIGhlYWRlcnMuCiAqCiAqIEByZXR1cm4gdGhlIHVwZGF0ZWQgUmF0ZUxpbWl0cyBvYmplY3QuCiAqLwpmdW5jdGlvbiB1cGRhdGVSYXRlTGltaXRzKAogIGxpbWl0cywKICB7IHN0YXR1c0NvZGUsIGhlYWRlcnMgfSwKICBub3cgPSBEYXRlLm5vdygpLAopIHsKICBjb25zdCB1cGRhdGVkUmF0ZUxpbWl0cyA9IHsKICAgIC4uLmxpbWl0cywKICB9OwoKICAvLyAiVGhlIG5hbWUgaXMgY2FzZS1pbnNlbnNpdGl2ZS4iCiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hlYWRlcnMvZ2V0CiAgY29uc3QgcmF0ZUxpbWl0SGVhZGVyID0gaGVhZGVycyAmJiBoZWFkZXJzWyd4LXNlbnRyeS1yYXRlLWxpbWl0cyddOwogIGNvbnN0IHJldHJ5QWZ0ZXJIZWFkZXIgPSBoZWFkZXJzICYmIGhlYWRlcnNbJ3JldHJ5LWFmdGVyJ107CgogIGlmIChyYXRlTGltaXRIZWFkZXIpIHsKICAgIC8qKgogICAgICogcmF0ZSBsaW1pdCBoZWFkZXJzIGFyZSBvZiB0aGUgZm9ybQogICAgICogICAgIDxoZWFkZXI+LDxoZWFkZXI+LC4uCiAgICAgKiB3aGVyZSBlYWNoIDxoZWFkZXI+IGlzIG9mIHRoZSBmb3JtCiAgICAgKiAgICAgPHJldHJ5X2FmdGVyPjogPGNhdGVnb3JpZXM+OiA8c2NvcGU+OiA8cmVhc29uX2NvZGU+CiAgICAgKiB3aGVyZQogICAgICogICAgIDxyZXRyeV9hZnRlcj4gaXMgYSBkZWxheSBpbiBzZWNvbmRzCiAgICAgKiAgICAgPGNhdGVnb3JpZXM+IGlzIHRoZSBldmVudCB0eXBlKHMpIChlcnJvciwgdHJhbnNhY3Rpb24sIGV0YykgYmVpbmcgcmF0ZSBsaW1pdGVkIGFuZCBpcyBvZiB0aGUgZm9ybQogICAgICogICAgICAgICA8Y2F0ZWdvcnk+OzxjYXRlZ29yeT47Li4uCiAgICAgKiAgICAgPHNjb3BlPiBpcyB3aGF0J3MgYmVpbmcgbGltaXRlZCAob3JnLCBwcm9qZWN0LCBvciBrZXkpIC0gaWdub3JlZCBieSBTREsKICAgICAqICAgICA8cmVhc29uX2NvZGU+IGlzIGFuIGFyYml0cmFyeSBzdHJpbmcgbGlrZSAib3JnX3F1b3RhIiAtIGlnbm9yZWQgYnkgU0RLCiAgICAgKi8KICAgIGZvciAoY29uc3QgbGltaXQgb2YgcmF0ZUxpbWl0SGVhZGVyLnRyaW0oKS5zcGxpdCgnLCcpKSB7CiAgICAgIGNvbnN0IFtyZXRyeUFmdGVyLCBjYXRlZ29yaWVzXSA9IGxpbWl0LnNwbGl0KCc6JywgMik7CiAgICAgIGNvbnN0IGhlYWRlckRlbGF5ID0gcGFyc2VJbnQocmV0cnlBZnRlciwgMTApOwogICAgICBjb25zdCBkZWxheSA9ICghaXNOYU4oaGVhZGVyRGVsYXkpID8gaGVhZGVyRGVsYXkgOiA2MCkgKiAxMDAwOyAvLyA2MHNlYyBkZWZhdWx0CiAgICAgIGlmICghY2F0ZWdvcmllcykgewogICAgICAgIHVwZGF0ZWRSYXRlTGltaXRzLmFsbCA9IG5vdyArIGRlbGF5OwogICAgICB9IGVsc2UgewogICAgICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllcy5zcGxpdCgnOycpKSB7CiAgICAgICAgICB1cGRhdGVkUmF0ZUxpbWl0c1tjYXRlZ29yeV0gPSBub3cgKyBkZWxheTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9IGVsc2UgaWYgKHJldHJ5QWZ0ZXJIZWFkZXIpIHsKICAgIHVwZGF0ZWRSYXRlTGltaXRzLmFsbCA9IG5vdyArIHBhcnNlUmV0cnlBZnRlckhlYWRlcihyZXRyeUFmdGVySGVhZGVyLCBub3cpOwogIH0gZWxzZSBpZiAoc3RhdHVzQ29kZSA9PT0gNDI5KSB7CiAgICB1cGRhdGVkUmF0ZUxpbWl0cy5hbGwgPSBub3cgKyA2MCAqIDEwMDA7CiAgfQoKICByZXR1cm4gdXBkYXRlZFJhdGVMaW1pdHM7Cn0KCi8qKgogKiBBIG5vZGUuanMgd2F0Y2hkb2cgdGltZXIKICogQHBhcmFtIHBvbGxJbnRlcnZhbCBUaGUgaW50ZXJ2YWwgdGhhdCB3ZSBleHBlY3QgdG8gZ2V0IHBvbGxlZCBhdAogKiBAcGFyYW0gYW5yVGhyZXNob2xkIFRoZSB0aHJlc2hvbGQgZm9yIHdoZW4gd2UgY29uc2lkZXIgQU5SCiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gY2FsbCBmb3IgQU5SCiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGBwb2xsYCBhbmQgYGVuYWJsZWRgIGZ1bmN0aW9ucyB7QGxpbmsgV2F0Y2hkb2dSZXR1cm59CiAqLwpmdW5jdGlvbiB3YXRjaGRvZ1RpbWVyKAogIGNyZWF0ZVRpbWVyLAogIHBvbGxJbnRlcnZhbCwKICBhbnJUaHJlc2hvbGQsCiAgY2FsbGJhY2ssCikgewogIGNvbnN0IHRpbWVyID0gY3JlYXRlVGltZXIoKTsKICBsZXQgdHJpZ2dlcmVkID0gZmFsc2U7CiAgbGV0IGVuYWJsZWQgPSB0cnVlOwoKICBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICBjb25zdCBkaWZmTXMgPSB0aW1lci5nZXRUaW1lTXMoKTsKCiAgICBpZiAodHJpZ2dlcmVkID09PSBmYWxzZSAmJiBkaWZmTXMgPiBwb2xsSW50ZXJ2YWwgKyBhbnJUaHJlc2hvbGQpIHsKICAgICAgdHJpZ2dlcmVkID0gdHJ1ZTsKICAgICAgaWYgKGVuYWJsZWQpIHsKICAgICAgICBjYWxsYmFjaygpOwogICAgICB9CiAgICB9CgogICAgaWYgKGRpZmZNcyA8IHBvbGxJbnRlcnZhbCArIGFuclRocmVzaG9sZCkgewogICAgICB0cmlnZ2VyZWQgPSBmYWxzZTsKICAgIH0KICB9LCAyMCk7CgogIHJldHVybiB7CiAgICBwb2xsOiAoKSA9PiB7CiAgICAgIHRpbWVyLnJlc2V0KCk7CiAgICB9LAogICAgZW5hYmxlZDogKHN0YXRlKSA9PiB7CiAgICAgIGVuYWJsZWQgPSBzdGF0ZTsKICAgIH0sCiAgfTsKfQoKLy8gdHlwZXMgY29waWVkIGZyb20gaW5zcGVjdG9yLmQudHMKCi8qKgogKiBDb252ZXJ0cyBEZWJ1Z2dlci5DYWxsRnJhbWUgdG8gU2VudHJ5IFN0YWNrRnJhbWUKICovCmZ1bmN0aW9uIGNhbGxGcmFtZVRvU3RhY2tGcmFtZSgKICBmcmFtZSwKICB1cmwsCiAgZ2V0TW9kdWxlRnJvbUZpbGVuYW1lLAopIHsKICBjb25zdCBmaWxlbmFtZSA9IHVybCA/IHVybC5yZXBsYWNlKC9eZmlsZTpcL1wvLywgJycpIDogdW5kZWZpbmVkOwoKICAvLyBDYWxsRnJhbWUgcm93L2NvbCBhcmUgMCBiYXNlZCwgd2hlcmVhcyBTdGFja0ZyYW1lIGFyZSAxIGJhc2VkCiAgY29uc3QgY29sbm8gPSBmcmFtZS5sb2NhdGlvbi5jb2x1bW5OdW1iZXIgPyBmcmFtZS5sb2NhdGlvbi5jb2x1bW5OdW1iZXIgKyAxIDogdW5kZWZpbmVkOwogIGNvbnN0IGxpbmVubyA9IGZyYW1lLmxvY2F0aW9uLmxpbmVOdW1iZXIgPyBmcmFtZS5sb2NhdGlvbi5saW5lTnVtYmVyICsgMSA6IHVuZGVmaW5lZDsKCiAgcmV0dXJuIGRyb3BVbmRlZmluZWRLZXlzKHsKICAgIGZpbGVuYW1lLAogICAgbW9kdWxlOiBnZXRNb2R1bGVGcm9tRmlsZW5hbWUoZmlsZW5hbWUpLAogICAgZnVuY3Rpb246IGZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnPycsCiAgICBjb2xubywKICAgIGxpbmVubywKICAgIGluX2FwcDogZmlsZW5hbWUgPyBmaWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUpIDogdW5kZWZpbmVkLAogIH0pOwp9CgovKioKICogVGhpcyBzZXJ2ZXMgYXMgYSBidWlsZCB0aW1lIGZsYWcgdGhhdCB3aWxsIGJlIHRydWUgYnkgZGVmYXVsdCwgYnV0IGZhbHNlIGluIG5vbi1kZWJ1ZyBidWlsZHMgb3IgaWYgdXNlcnMgcmVwbGFjZSBgX19TRU5UUllfREVCVUdfX2AgaW4gdGhlaXIgZ2VuZXJhdGVkIGNvZGUuCiAqCiAqIEFUVEVOVElPTjogVGhpcyBjb25zdGFudCBtdXN0IG5ldmVyIGNyb3NzIHBhY2thZ2UgYm91bmRhcmllcyAoaS5lLiBiZSBleHBvcnRlZCkgdG8gZ3VhcmFudGVlIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIHRyZWUgc2hha2luZy4KICovCmNvbnN0IERFQlVHX0JVSUxEID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTsKCi8qKgogKiBDcmVhdGVzIGEgbmV3IGBTZXNzaW9uYCBvYmplY3QgYnkgc2V0dGluZyBjZXJ0YWluIGRlZmF1bHQgcGFyYW1ldGVycy4gSWYgb3B0aW9uYWwgQHBhcmFtIGNvbnRleHQKICogaXMgcGFzc2VkLCB0aGUgcGFzc2VkIHByb3BlcnRpZXMgYXJlIGFwcGxpZWQgdG8gdGhlIHNlc3Npb24gb2JqZWN0LgogKgogKiBAcGFyYW0gY29udGV4dCAob3B0aW9uYWwpIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhcHBsaWVkIHRvIHRoZSByZXR1cm5lZCBzZXNzaW9uIG9iamVjdAogKgogKiBAcmV0dXJucyBhIG5ldyBgU2Vzc2lvbmAgb2JqZWN0CiAqLwpmdW5jdGlvbiBtYWtlU2Vzc2lvbihjb250ZXh0KSB7CiAgLy8gQm90aCB0aW1lc3RhbXAgYW5kIHN0YXJ0ZWQgYXJlIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2guCiAgY29uc3Qgc3RhcnRpbmdUaW1lID0gdGltZXN0YW1wSW5TZWNvbmRzKCk7CgogIGNvbnN0IHNlc3Npb24gPSB7CiAgICBzaWQ6IHV1aWQ0KCksCiAgICBpbml0OiB0cnVlLAogICAgdGltZXN0YW1wOiBzdGFydGluZ1RpbWUsCiAgICBzdGFydGVkOiBzdGFydGluZ1RpbWUsCiAgICBkdXJhdGlvbjogMCwKICAgIHN0YXR1czogJ29rJywKICAgIGVycm9yczogMCwKICAgIGlnbm9yZUR1cmF0aW9uOiBmYWxzZSwKICAgIHRvSlNPTjogKCkgPT4gc2Vzc2lvblRvSlNPTihzZXNzaW9uKSwKICB9OwoKICBpZiAoY29udGV4dCkgewogICAgdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0KTsKICB9CgogIHJldHVybiBzZXNzaW9uOwp9CgovKioKICogVXBkYXRlcyBhIHNlc3Npb24gb2JqZWN0IHdpdGggdGhlIHByb3BlcnRpZXMgcGFzc2VkIGluIHRoZSBjb250ZXh0LgogKgogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBtdXRhdGVzIHRoZSBwYXNzZWQgb2JqZWN0IGFuZCByZXR1cm5zIHZvaWQuCiAqIChIYWQgdG8gZG8gdGhpcyBpbnN0ZWFkIG9mIHJldHVybmluZyBhIG5ldyBhbmQgdXBkYXRlZCBzZXNzaW9uIGJlY2F1c2UgY2xvc2luZyBhbmQgc2VuZGluZyBhIHNlc3Npb24KICogbWFrZXMgYW4gdXBkYXRlIHRvIHRoZSBzZXNzaW9uIGFmdGVyIGl0IHdhcyBwYXNzZWQgdG8gdGhlIHNlbmRpbmcgbG9naWMuCiAqIEBzZWUgQmFzZUNsaWVudC5jYXB0dXJlU2Vzc2lvbiApCiAqCiAqIEBwYXJhbSBzZXNzaW9uIHRoZSBgU2Vzc2lvbmAgdG8gdXBkYXRlCiAqIEBwYXJhbSBjb250ZXh0IHRoZSBgU2Vzc2lvbkNvbnRleHRgIGhvbGRpbmcgdGhlIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmUgdXBkYXRlZCBpbiBAcGFyYW0gc2Vzc2lvbgogKi8KLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHkKZnVuY3Rpb24gdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0ID0ge30pIHsKICBpZiAoY29udGV4dC51c2VyKSB7CiAgICBpZiAoIXNlc3Npb24uaXBBZGRyZXNzICYmIGNvbnRleHQudXNlci5pcF9hZGRyZXNzKSB7CiAgICAgIHNlc3Npb24uaXBBZGRyZXNzID0gY29udGV4dC51c2VyLmlwX2FkZHJlc3M7CiAgICB9CgogICAgaWYgKCFzZXNzaW9uLmRpZCAmJiAhY29udGV4dC5kaWQpIHsKICAgICAgc2Vzc2lvbi5kaWQgPSBjb250ZXh0LnVzZXIuaWQgfHwgY29udGV4dC51c2VyLmVtYWlsIHx8IGNvbnRleHQudXNlci51c2VybmFtZTsKICAgIH0KICB9CgogIHNlc3Npb24udGltZXN0YW1wID0gY29udGV4dC50aW1lc3RhbXAgfHwgdGltZXN0YW1wSW5TZWNvbmRzKCk7CgogIGlmIChjb250ZXh0LmFibm9ybWFsX21lY2hhbmlzbSkgewogICAgc2Vzc2lvbi5hYm5vcm1hbF9tZWNoYW5pc20gPSBjb250ZXh0LmFibm9ybWFsX21lY2hhbmlzbTsKICB9CgogIGlmIChjb250ZXh0Lmlnbm9yZUR1cmF0aW9uKSB7CiAgICBzZXNzaW9uLmlnbm9yZUR1cmF0aW9uID0gY29udGV4dC5pZ25vcmVEdXJhdGlvbjsKICB9CiAgaWYgKGNvbnRleHQuc2lkKSB7CiAgICAvLyBHb29kIGVub3VnaCB1dWlkIHZhbGlkYXRpb24uIOKAlCBLYW1pbAogICAgc2Vzc2lvbi5zaWQgPSBjb250ZXh0LnNpZC5sZW5ndGggPT09IDMyID8gY29udGV4dC5zaWQgOiB1dWlkNCgpOwogIH0KICBpZiAoY29udGV4dC5pbml0ICE9PSB1bmRlZmluZWQpIHsKICAgIHNlc3Npb24uaW5pdCA9IGNvbnRleHQuaW5pdDsKICB9CiAgaWYgKCFzZXNzaW9uLmRpZCAmJiBjb250ZXh0LmRpZCkgewogICAgc2Vzc2lvbi5kaWQgPSBgJHtjb250ZXh0LmRpZH1gOwogIH0KICBpZiAodHlwZW9mIGNvbnRleHQuc3RhcnRlZCA9PT0gJ251bWJlcicpIHsKICAgIHNlc3Npb24uc3RhcnRlZCA9IGNvbnRleHQuc3RhcnRlZDsKICB9CiAgaWYgKHNlc3Npb24uaWdub3JlRHVyYXRpb24pIHsKICAgIHNlc3Npb24uZHVyYXRpb24gPSB1bmRlZmluZWQ7CiAgfSBlbHNlIGlmICh0eXBlb2YgY29udGV4dC5kdXJhdGlvbiA9PT0gJ251bWJlcicpIHsKICAgIHNlc3Npb24uZHVyYXRpb24gPSBjb250ZXh0LmR1cmF0aW9uOwogIH0gZWxzZSB7CiAgICBjb25zdCBkdXJhdGlvbiA9IHNlc3Npb24udGltZXN0YW1wIC0gc2Vzc2lvbi5zdGFydGVkOwogICAgc2Vzc2lvbi5kdXJhdGlvbiA9IGR1cmF0aW9uID49IDAgPyBkdXJhdGlvbiA6IDA7CiAgfQogIGlmIChjb250ZXh0LnJlbGVhc2UpIHsKICAgIHNlc3Npb24ucmVsZWFzZSA9IGNvbnRleHQucmVsZWFzZTsKICB9CiAgaWYgKGNvbnRleHQuZW52aXJvbm1lbnQpIHsKICAgIHNlc3Npb24uZW52aXJvbm1lbnQgPSBjb250ZXh0LmVudmlyb25tZW50OwogIH0KICBpZiAoIXNlc3Npb24uaXBBZGRyZXNzICYmIGNvbnRleHQuaXBBZGRyZXNzKSB7CiAgICBzZXNzaW9uLmlwQWRkcmVzcyA9IGNvbnRleHQuaXBBZGRyZXNzOwogIH0KICBpZiAoIXNlc3Npb24udXNlckFnZW50ICYmIGNvbnRleHQudXNlckFnZW50KSB7CiAgICBzZXNzaW9uLnVzZXJBZ2VudCA9IGNvbnRleHQudXNlckFnZW50OwogIH0KICBpZiAodHlwZW9mIGNvbnRleHQuZXJyb3JzID09PSAnbnVtYmVyJykgewogICAgc2Vzc2lvbi5lcnJvcnMgPSBjb250ZXh0LmVycm9yczsKICB9CiAgaWYgKGNvbnRleHQuc3RhdHVzKSB7CiAgICBzZXNzaW9uLnN0YXR1cyA9IGNvbnRleHQuc3RhdHVzOwogIH0KfQoKLyoqCiAqIFNlcmlhbGl6ZXMgYSBwYXNzZWQgc2Vzc2lvbiBvYmplY3QgdG8gYSBKU09OIG9iamVjdCB3aXRoIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHN0cnVjdHVyZS4KICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgU2VudHJ5IGJhY2tlbmQgcmVxdWlyZXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgc2NoZW1hIG9mIGEgc2Vzc2lvbgogKiB0aGFuIHRoZSBvbmUgdGhlIEpTIFNES3MgdXNlIGludGVybmFsbHkuCiAqCiAqIEBwYXJhbSBzZXNzaW9uIHRoZSBzZXNzaW9uIHRvIGJlIGNvbnZlcnRlZAogKgogKiBAcmV0dXJucyBhIEpTT04gb2JqZWN0IG9mIHRoZSBwYXNzZWQgc2Vzc2lvbgogKi8KZnVuY3Rpb24gc2Vzc2lvblRvSlNPTihzZXNzaW9uKSB7CiAgcmV0dXJuIGRyb3BVbmRlZmluZWRLZXlzKHsKICAgIHNpZDogYCR7c2Vzc2lvbi5zaWR9YCwKICAgIGluaXQ6IHNlc3Npb24uaW5pdCwKICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHNlYyBpcyBjb252ZXJ0ZWQgdG8gbXMgZm9yIGRhdGUgY29uc3RydWN0b3IKICAgIHN0YXJ0ZWQ6IG5ldyBEYXRlKHNlc3Npb24uc3RhcnRlZCAqIDEwMDApLnRvSVNPU3RyaW5nKCksCiAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKHNlc3Npb24udGltZXN0YW1wICogMTAwMCkudG9JU09TdHJpbmcoKSwKICAgIHN0YXR1czogc2Vzc2lvbi5zdGF0dXMsCiAgICBlcnJvcnM6IHNlc3Npb24uZXJyb3JzLAogICAgZGlkOiB0eXBlb2Ygc2Vzc2lvbi5kaWQgPT09ICdudW1iZXInIHx8IHR5cGVvZiBzZXNzaW9uLmRpZCA9PT0gJ3N0cmluZycgPyBgJHtzZXNzaW9uLmRpZH1gIDogdW5kZWZpbmVkLAogICAgZHVyYXRpb246IHNlc3Npb24uZHVyYXRpb24sCiAgICBhYm5vcm1hbF9tZWNoYW5pc206IHNlc3Npb24uYWJub3JtYWxfbWVjaGFuaXNtLAogICAgYXR0cnM6IHsKICAgICAgcmVsZWFzZTogc2Vzc2lvbi5yZWxlYXNlLAogICAgICBlbnZpcm9ubWVudDogc2Vzc2lvbi5lbnZpcm9ubWVudCwKICAgICAgaXBfYWRkcmVzczogc2Vzc2lvbi5pcEFkZHJlc3MsCiAgICAgIHVzZXJfYWdlbnQ6IHNlc3Npb24udXNlckFnZW50LAogICAgfSwKICB9KTsKfQoKLyoqCiAqIEFwcGx5IFNka0luZm8gKG5hbWUsIHZlcnNpb24sIHBhY2thZ2VzLCBpbnRlZ3JhdGlvbnMpIHRvIHRoZSBjb3JyZXNwb25kaW5nIGV2ZW50IGtleS4KICogTWVyZ2Ugd2l0aCBleGlzdGluZyBkYXRhIGlmIGFueS4KICoqLwpmdW5jdGlvbiBlbmhhbmNlRXZlbnRXaXRoU2RrSW5mbyhldmVudCwgc2RrSW5mbykgewogIGlmICghc2RrSW5mbykgewogICAgcmV0dXJuIGV2ZW50OwogIH0KICBldmVudC5zZGsgPSBldmVudC5zZGsgfHwge307CiAgZXZlbnQuc2RrLm5hbWUgPSBldmVudC5zZGsubmFtZSB8fCBzZGtJbmZvLm5hbWU7CiAgZXZlbnQuc2RrLnZlcnNpb24gPSBldmVudC5zZGsudmVyc2lvbiB8fCBzZGtJbmZvLnZlcnNpb247CiAgZXZlbnQuc2RrLmludGVncmF0aW9ucyA9IFsuLi4oZXZlbnQuc2RrLmludGVncmF0aW9ucyB8fCBbXSksIC4uLihzZGtJbmZvLmludGVncmF0aW9ucyB8fCBbXSldOwogIGV2ZW50LnNkay5wYWNrYWdlcyA9IFsuLi4oZXZlbnQuc2RrLnBhY2thZ2VzIHx8IFtdKSwgLi4uKHNka0luZm8ucGFja2FnZXMgfHwgW10pXTsKICByZXR1cm4gZXZlbnQ7Cn0KCi8qKiBDcmVhdGVzIGFuIGVudmVsb3BlIGZyb20gYSBTZXNzaW9uICovCmZ1bmN0aW9uIGNyZWF0ZVNlc3Npb25FbnZlbG9wZSgKICBzZXNzaW9uLAogIGRzbiwKICBtZXRhZGF0YSwKICB0dW5uZWwsCikgewogIGNvbnN0IHNka0luZm8gPSBnZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyKG1ldGFkYXRhKTsKICBjb25zdCBlbnZlbG9wZUhlYWRlcnMgPSB7CiAgICBzZW50X2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksCiAgICAuLi4oc2RrSW5mbyAmJiB7IHNkazogc2RrSW5mbyB9KSwKICAgIC4uLighIXR1bm5lbCAmJiBkc24gJiYgeyBkc246IGRzblRvU3RyaW5nKGRzbikgfSksCiAgfTsKCiAgY29uc3QgZW52ZWxvcGVJdGVtID0KICAgICdhZ2dyZWdhdGVzJyBpbiBzZXNzaW9uID8gW3sgdHlwZTogJ3Nlc3Npb25zJyB9LCBzZXNzaW9uXSA6IFt7IHR5cGU6ICdzZXNzaW9uJyB9LCBzZXNzaW9uLnRvSlNPTigpXTsKCiAgcmV0dXJuIGNyZWF0ZUVudmVsb3BlKGVudmVsb3BlSGVhZGVycywgW2VudmVsb3BlSXRlbV0pOwp9CgovKioKICogQ3JlYXRlIGFuIEVudmVsb3BlIGZyb20gYW4gZXZlbnQuCiAqLwpmdW5jdGlvbiBjcmVhdGVFdmVudEVudmVsb3BlKAogIGV2ZW50LAogIGRzbiwKICBtZXRhZGF0YSwKICB0dW5uZWwsCikgewogIGNvbnN0IHNka0luZm8gPSBnZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyKG1ldGFkYXRhKTsKCiAgLyoKICAgIE5vdGU6IER1ZSB0byBUUywgZXZlbnQudHlwZSBtYXkgYmUgYHJlcGxheV9ldmVudGAsIHRoZW9yZXRpY2FsbHkuCiAgICBJbiBwcmFjdGljZSwgd2UgbmV2ZXIgY2FsbCBgY3JlYXRlRXZlbnRFbnZlbG9wZWAgd2l0aCBgcmVwbGF5X2V2ZW50YCB0eXBlLAogICAgYW5kIHdlJ2QgaGF2ZSB0byBhZGp1dCBhIGxvb290IG9mIHR5cGVzIHRvIG1ha2UgdGhpcyB3b3JrIHByb3Blcmx5LgogICAgV2Ugd2FudCB0byBhdm9pZCBjYXN0aW5nIHRoaXMgYXJvdW5kLCBhcyB0aGF0IGNvdWxkIGxlYWQgdG8gYnVncyAoZS5nLiB3aGVuIHdlIGFkZCBhbm90aGVyIHR5cGUpCiAgICBTbyB0aGUgc2FmZSBjaG9pY2UgaXMgdG8gcmVhbGx5IGd1YXJkIGFnYWluc3QgdGhlIHJlcGxheV9ldmVudCB0eXBlIGhlcmUuCiAgKi8KICBjb25zdCBldmVudFR5cGUgPSBldmVudC50eXBlICYmIGV2ZW50LnR5cGUgIT09ICdyZXBsYXlfZXZlbnQnID8gZXZlbnQudHlwZSA6ICdldmVudCc7CgogIGVuaGFuY2VFdmVudFdpdGhTZGtJbmZvKGV2ZW50LCBtZXRhZGF0YSAmJiBtZXRhZGF0YS5zZGspOwoKICBjb25zdCBlbnZlbG9wZUhlYWRlcnMgPSBjcmVhdGVFdmVudEVudmVsb3BlSGVhZGVycyhldmVudCwgc2RrSW5mbywgdHVubmVsLCBkc24pOwoKICAvLyBQcmV2ZW50IHRoaXMgZGF0YSAod2hpY2gsIGlmIGl0IGV4aXN0cywgd2FzIHVzZWQgaW4gZWFybGllciBzdGVwcyBpbiB0aGUgcHJvY2Vzc2luZyBwaXBlbGluZSkgZnJvbSBiZWluZyBzZW50IHRvCiAgLy8gc2VudHJ5LiAoTm90ZTogT3VyIHVzZSBvZiB0aGlzIHByb3BlcnR5IGNvbWVzIGFuZCBnb2VzIHdpdGggd2hhdGV2ZXIgd2UgbWlnaHQgYmUgZGVidWdnaW5nLCB3aGF0ZXZlciBoYWNrcyB3ZSBtYXkKICAvLyBoYXZlIHRlbXBvcmFyaWx5IGFkZGVkLCBldGMuIEV2ZW4gaWYgd2UgZG9uJ3QgaGFwcGVuIHRvIGJlIHVzaW5nIGl0IGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwgbGV0J3Mgbm90IGdldCByaWQKICAvLyBvZiB0aGlzIGBkZWxldGVgLCBsZXN0IHdlIG1pc3MgcHV0dGluZyBpdCBiYWNrIGluIHRoZSBuZXh0IHRpbWUgdGhlIHByb3BlcnR5IGlzIGluIHVzZS4pCiAgZGVsZXRlIGV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YTsKCiAgY29uc3QgZXZlbnRJdGVtID0gW3sgdHlwZTogZXZlbnRUeXBlIH0sIGV2ZW50XTsKICByZXR1cm4gY3JlYXRlRW52ZWxvcGUoZW52ZWxvcGVIZWFkZXJzLCBbZXZlbnRJdGVtXSk7Cn0KCmNvbnN0IFNFTlRSWV9BUElfVkVSU0lPTiA9ICc3JzsKCi8qKiBSZXR1cm5zIHRoZSBwcmVmaXggdG8gY29uc3RydWN0IFNlbnRyeSBpbmdlc3Rpb24gQVBJIGVuZHBvaW50cy4gKi8KZnVuY3Rpb24gZ2V0QmFzZUFwaUVuZHBvaW50KGRzbikgewogIGNvbnN0IHByb3RvY29sID0gZHNuLnByb3RvY29sID8gYCR7ZHNuLnByb3RvY29sfTpgIDogJyc7CiAgY29uc3QgcG9ydCA9IGRzbi5wb3J0ID8gYDoke2Rzbi5wb3J0fWAgOiAnJzsKICByZXR1cm4gYCR7cHJvdG9jb2x9Ly8ke2Rzbi5ob3N0fSR7cG9ydH0ke2Rzbi5wYXRoID8gYC8ke2Rzbi5wYXRofWAgOiAnJ30vYXBpL2A7Cn0KCi8qKiBSZXR1cm5zIHRoZSBpbmdlc3QgQVBJIGVuZHBvaW50IGZvciB0YXJnZXQuICovCmZ1bmN0aW9uIF9nZXRJbmdlc3RFbmRwb2ludChkc24pIHsKICByZXR1cm4gYCR7Z2V0QmFzZUFwaUVuZHBvaW50KGRzbil9JHtkc24ucHJvamVjdElkfS9lbnZlbG9wZS9gOwp9CgovKiogUmV0dXJucyBhIFVSTC1lbmNvZGVkIHN0cmluZyB3aXRoIGF1dGggY29uZmlnIHN1aXRhYmxlIGZvciBhIHF1ZXJ5IHN0cmluZy4gKi8KZnVuY3Rpb24gX2VuY29kZWRBdXRoKGRzbiwgc2RrSW5mbykgewogIHJldHVybiB1cmxFbmNvZGUoewogICAgLy8gV2Ugc2VuZCBvbmx5IHRoZSBtaW5pbXVtIHNldCBvZiByZXF1aXJlZCBpbmZvcm1hdGlvbi4gU2VlCiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8yNTcyLgogICAgc2VudHJ5X2tleTogZHNuLnB1YmxpY0tleSwKICAgIHNlbnRyeV92ZXJzaW9uOiBTRU5UUllfQVBJX1ZFUlNJT04sCiAgICAuLi4oc2RrSW5mbyAmJiB7IHNlbnRyeV9jbGllbnQ6IGAke3Nka0luZm8ubmFtZX0vJHtzZGtJbmZvLnZlcnNpb259YCB9KSwKICB9KTsKfQoKLyoqCiAqIFJldHVybnMgdGhlIGVudmVsb3BlIGVuZHBvaW50IFVSTCB3aXRoIGF1dGggaW4gdGhlIHF1ZXJ5IHN0cmluZy4KICoKICogU2VuZGluZyBhdXRoIGFzIHBhcnQgb2YgdGhlIHF1ZXJ5IHN0cmluZyBhbmQgbm90IGFzIGN1c3RvbSBIVFRQIGhlYWRlcnMgYXZvaWRzIENPUlMgcHJlZmxpZ2h0IHJlcXVlc3RzLgogKi8KZnVuY3Rpb24gZ2V0RW52ZWxvcGVFbmRwb2ludFdpdGhVcmxFbmNvZGVkQXV0aCgKICBkc24sCiAgLy8gVE9ETyAodjgpOiBSZW1vdmUgYHR1bm5lbE9yT3B0aW9uc2AgaW4gZmF2b3Igb2YgYG9wdGlvbnNgLCBhbmQgdXNlIHRoZSBzdWJzdGl0dXRlIGNvZGUgYmVsb3cKICAvLyBvcHRpb25zOiBDbGllbnRPcHRpb25zID0ge30gYXMgQ2xpZW50T3B0aW9ucywKICB0dW5uZWxPck9wdGlvbnMgPSB7fSAsCikgewogIC8vIFRPRE8gKHY4KTogVXNlIHRoaXMgY29kZSBpbnN0ZWFkCiAgLy8gY29uc3QgeyB0dW5uZWwsIF9tZXRhZGF0YSA9IHt9IH0gPSBvcHRpb25zOwogIC8vIHJldHVybiB0dW5uZWwgPyB0dW5uZWwgOiBgJHtfZ2V0SW5nZXN0RW5kcG9pbnQoZHNuKX0/JHtfZW5jb2RlZEF1dGgoZHNuLCBfbWV0YWRhdGEuc2RrKX1gOwoKICBjb25zdCB0dW5uZWwgPSB0eXBlb2YgdHVubmVsT3JPcHRpb25zID09PSAnc3RyaW5nJyA/IHR1bm5lbE9yT3B0aW9ucyA6IHR1bm5lbE9yT3B0aW9ucy50dW5uZWw7CiAgY29uc3Qgc2RrSW5mbyA9CiAgICB0eXBlb2YgdHVubmVsT3JPcHRpb25zID09PSAnc3RyaW5nJyB8fCAhdHVubmVsT3JPcHRpb25zLl9tZXRhZGF0YSA/IHVuZGVmaW5lZCA6IHR1bm5lbE9yT3B0aW9ucy5fbWV0YWRhdGEuc2RrOwoKICByZXR1cm4gdHVubmVsID8gdHVubmVsIDogYCR7X2dldEluZ2VzdEVuZHBvaW50KGRzbil9PyR7X2VuY29kZWRBdXRoKGRzbiwgc2RrSW5mbyl9YDsKfQoKY29uc3QgREVGQVVMVF9UUkFOU1BPUlRfQlVGRkVSX1NJWkUgPSAzMDsKCi8qKgogKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIGEgU2VudHJ5IGBUcmFuc3BvcnRgCiAqCiAqIEBwYXJhbSBvcHRpb25zCiAqIEBwYXJhbSBtYWtlUmVxdWVzdAogKi8KZnVuY3Rpb24gY3JlYXRlVHJhbnNwb3J0KAogIG9wdGlvbnMsCiAgbWFrZVJlcXVlc3QsCiAgYnVmZmVyID0gbWFrZVByb21pc2VCdWZmZXIoCiAgICBvcHRpb25zLmJ1ZmZlclNpemUgfHwgREVGQVVMVF9UUkFOU1BPUlRfQlVGRkVSX1NJWkUsCiAgKSwKKSB7CiAgbGV0IHJhdGVMaW1pdHMgPSB7fTsKICBjb25zdCBmbHVzaCA9ICh0aW1lb3V0KSA9PiBidWZmZXIuZHJhaW4odGltZW91dCk7CgogIGZ1bmN0aW9uIHNlbmQoZW52ZWxvcGUpIHsKICAgIGNvbnN0IGZpbHRlcmVkRW52ZWxvcGVJdGVtcyA9IFtdOwoKICAgIC8vIERyb3AgcmF0ZSBsaW1pdGVkIGl0ZW1zIGZyb20gZW52ZWxvcGUKICAgIGZvckVhY2hFbnZlbG9wZUl0ZW0oZW52ZWxvcGUsIChpdGVtLCB0eXBlKSA9PiB7CiAgICAgIGNvbnN0IGVudmVsb3BlSXRlbURhdGFDYXRlZ29yeSA9IGVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSh0eXBlKTsKICAgICAgaWYgKGlzUmF0ZUxpbWl0ZWQocmF0ZUxpbWl0cywgZW52ZWxvcGVJdGVtRGF0YUNhdGVnb3J5KSkgewogICAgICAgIGNvbnN0IGV2ZW50ID0gZ2V0RXZlbnRGb3JFbnZlbG9wZUl0ZW0oaXRlbSwgdHlwZSk7CiAgICAgICAgb3B0aW9ucy5yZWNvcmREcm9wcGVkRXZlbnQoJ3JhdGVsaW1pdF9iYWNrb2ZmJywgZW52ZWxvcGVJdGVtRGF0YUNhdGVnb3J5LCBldmVudCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZmlsdGVyZWRFbnZlbG9wZUl0ZW1zLnB1c2goaXRlbSk7CiAgICAgIH0KICAgIH0pOwoKICAgIC8vIFNraXAgc2VuZGluZyBpZiBlbnZlbG9wZSBpcyBlbXB0eSBhZnRlciBmaWx0ZXJpbmcgb3V0IHJhdGUgbGltaXRlZCBldmVudHMKICAgIGlmIChmaWx0ZXJlZEVudmVsb3BlSXRlbXMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiByZXNvbHZlZFN5bmNQcm9taXNlKCk7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkKICAgIGNvbnN0IGZpbHRlcmVkRW52ZWxvcGUgPSBjcmVhdGVFbnZlbG9wZShlbnZlbG9wZVswXSwgZmlsdGVyZWRFbnZlbG9wZUl0ZW1zICk7CgogICAgLy8gQ3JlYXRlcyBjbGllbnQgcmVwb3J0IGZvciBlYWNoIGl0ZW0gaW4gYW4gZW52ZWxvcGUKICAgIGNvbnN0IHJlY29yZEVudmVsb3BlTG9zcyA9IChyZWFzb24pID0+IHsKICAgICAgZm9yRWFjaEVudmVsb3BlSXRlbShmaWx0ZXJlZEVudmVsb3BlLCAoaXRlbSwgdHlwZSkgPT4gewogICAgICAgIGNvbnN0IGV2ZW50ID0gZ2V0RXZlbnRGb3JFbnZlbG9wZUl0ZW0oaXRlbSwgdHlwZSk7CiAgICAgICAgb3B0aW9ucy5yZWNvcmREcm9wcGVkRXZlbnQocmVhc29uLCBlbnZlbG9wZUl0ZW1UeXBlVG9EYXRhQ2F0ZWdvcnkodHlwZSksIGV2ZW50KTsKICAgICAgfSk7CiAgICB9OwoKICAgIGNvbnN0IHJlcXVlc3RUYXNrID0gKCkgPT4KICAgICAgbWFrZVJlcXVlc3QoeyBib2R5OiBzZXJpYWxpemVFbnZlbG9wZShmaWx0ZXJlZEVudmVsb3BlLCBvcHRpb25zLnRleHRFbmNvZGVyKSB9KS50aGVuKAogICAgICAgIHJlc3BvbnNlID0+IHsKICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gdGhyb3cgb24gTk9LIHJlc3BvbnNlcywgYnV0IHdlIHdhbnQgdG8gYXQgbGVhc3QgbG9nIHRoZW0KICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9PSB1bmRlZmluZWQgJiYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgPCAyMDAgfHwgcmVzcG9uc2Uuc3RhdHVzQ29kZSA+PSAzMDApKSB7CiAgICAgICAgICAgIERFQlVHX0JVSUxEICYmIGxvZ2dlci53YXJuKGBTZW50cnkgcmVzcG9uZGVkIHdpdGggc3RhdHVzIGNvZGUgJHtyZXNwb25zZS5zdGF0dXNDb2RlfSB0byBzZW50IGV2ZW50LmApOwogICAgICAgICAgfQoKICAgICAgICAgIHJhdGVMaW1pdHMgPSB1cGRhdGVSYXRlTGltaXRzKHJhdGVMaW1pdHMsIHJlc3BvbnNlKTsKICAgICAgICAgIHJldHVybiByZXNwb25zZTsKICAgICAgICB9LAogICAgICAgIGVycm9yID0+IHsKICAgICAgICAgIHJlY29yZEVudmVsb3BlTG9zcygnbmV0d29ya19lcnJvcicpOwogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgfSwKICAgICAgKTsKCiAgICByZXR1cm4gYnVmZmVyLmFkZChyZXF1ZXN0VGFzaykudGhlbigKICAgICAgcmVzdWx0ID0+IHJlc3VsdCwKICAgICAgZXJyb3IgPT4gewogICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFNlbnRyeUVycm9yKSB7CiAgICAgICAgICBERUJVR19CVUlMRCAmJiBsb2dnZXIuZXJyb3IoJ1NraXBwZWQgc2VuZGluZyBldmVudCBiZWNhdXNlIGJ1ZmZlciBpcyBmdWxsLicpOwogICAgICAgICAgcmVjb3JkRW52ZWxvcGVMb3NzKCdxdWV1ZV9vdmVyZmxvdycpOwogICAgICAgICAgcmV0dXJuIHJlc29sdmVkU3luY1Byb21pc2UoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgfQogICAgICB9LAogICAgKTsKICB9CgogIC8vIFdlIHVzZSB0aGlzIHRvIGlkZW50aWZpZnkgaWYgdGhlIHRyYW5zcG9ydCBpcyB0aGUgYmFzZSB0cmFuc3BvcnQKICAvLyBUT0RPICh2OCk6IFJlbW92ZSB0aGlzIGFnYWluIGFzIHdlJ2xsIG5vIGxvbmdlciBuZWVkIGl0CiAgc2VuZC5fX3NlbnRyeV9fYmFzZVRyYW5zcG9ydF9fID0gdHJ1ZTsKCiAgcmV0dXJuIHsKICAgIHNlbmQsCiAgICBmbHVzaCwKICB9Owp9CgpmdW5jdGlvbiBnZXRFdmVudEZvckVudmVsb3BlSXRlbShpdGVtLCB0eXBlKSB7CiAgaWYgKHR5cGUgIT09ICdldmVudCcgJiYgdHlwZSAhPT0gJ3RyYW5zYWN0aW9uJykgewogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CgogIHJldHVybiBBcnJheS5pc0FycmF5KGl0ZW0pID8gKGl0ZW0gKVsxXSA6IHVuZGVmaW5lZDsKfQoKLyoqIG5vcm1hbGl6ZXMgV2luZG93cyBwYXRocyAqLwpmdW5jdGlvbiBub3JtYWxpemVXaW5kb3dzUGF0aChwYXRoKSB7CiAgcmV0dXJuIHBhdGgKICAgIC5yZXBsYWNlKC9eW0EtWl06LywgJycpIC8vIHJlbW92ZSBXaW5kb3dzLXN0eWxlIHByZWZpeAogICAgLnJlcGxhY2UoL1xcL2csICcvJyk7IC8vIHJlcGxhY2UgYWxsIGBcYCBpbnN0YW5jZXMgd2l0aCBgL2AKfQoKLyoqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgdGhlIG1vZHVsZSBuYW1lIGZyb20gYSBmaWxlbmFtZSAqLwpmdW5jdGlvbiBjcmVhdGVHZXRNb2R1bGVGcm9tRmlsZW5hbWUoCiAgYmFzZVBhdGggPSBwcm9jZXNzLmFyZ3ZbMV0gPyBkaXJuYW1lKHByb2Nlc3MuYXJndlsxXSkgOiBwcm9jZXNzLmN3ZCgpLAogIGlzV2luZG93cyA9IHNlcCA9PT0gJ1xcJywKKSB7CiAgY29uc3Qgbm9ybWFsaXplZEJhc2UgPSBpc1dpbmRvd3MgPyBub3JtYWxpemVXaW5kb3dzUGF0aChiYXNlUGF0aCkgOiBiYXNlUGF0aDsKCiAgcmV0dXJuIChmaWxlbmFtZSkgPT4gewogICAgaWYgKCFmaWxlbmFtZSkgewogICAgICByZXR1cm47CiAgICB9CgogICAgY29uc3Qgbm9ybWFsaXplZEZpbGVuYW1lID0gaXNXaW5kb3dzID8gbm9ybWFsaXplV2luZG93c1BhdGgoZmlsZW5hbWUpIDogZmlsZW5hbWU7CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdAogICAgbGV0IHsgZGlyLCBiYXNlOiBmaWxlLCBleHQgfSA9IHBvc2l4LnBhcnNlKG5vcm1hbGl6ZWRGaWxlbmFtZSk7CgogICAgaWYgKGV4dCA9PT0gJy5qcycgfHwgZXh0ID09PSAnLm1qcycgfHwgZXh0ID09PSAnLmNqcycpIHsKICAgICAgZmlsZSA9IGZpbGUuc2xpY2UoMCwgZXh0Lmxlbmd0aCAqIC0xKTsKICAgIH0KCiAgICBpZiAoIWRpcikgewogICAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXIKICAgICAgZGlyID0gJy4nOwogICAgfQoKICAgIGNvbnN0IG4gPSBkaXIubGFzdEluZGV4T2YoJy9ub2RlX21vZHVsZXMnKTsKICAgIGlmIChuID4gLTEpIHsKICAgICAgcmV0dXJuIGAke2Rpci5zbGljZShuICsgMTQpLnJlcGxhY2UoL1wvL2csICcuJyl9OiR7ZmlsZX1gOwogICAgfQoKICAgIC8vIExldCdzIHNlZSBpZiBpdCdzIGEgcGFydCBvZiB0aGUgbWFpbiBtb2R1bGUKICAgIC8vIFRvIGJlIGEgcGFydCBvZiBtYWluIG1vZHVsZSwgaXQgaGFzIHRvIHNoYXJlIHRoZSBzYW1lIGJhc2UKICAgIGlmIChkaXIuc3RhcnRzV2l0aChub3JtYWxpemVkQmFzZSkpIHsKICAgICAgbGV0IG1vZHVsZU5hbWUgPSBkaXIuc2xpY2Uobm9ybWFsaXplZEJhc2UubGVuZ3RoICsgMSkucmVwbGFjZSgvXC8vZywgJy4nKTsKCiAgICAgIGlmIChtb2R1bGVOYW1lKSB7CiAgICAgICAgbW9kdWxlTmFtZSArPSAnOic7CiAgICAgIH0KICAgICAgbW9kdWxlTmFtZSArPSBmaWxlOwoKICAgICAgcmV0dXJuIG1vZHVsZU5hbWU7CiAgICB9CgogICAgcmV0dXJuIGZpbGU7CiAgfTsKfQoKZnVuY3Rpb24gX251bGxpc2hDb2FsZXNjZSQyKGxocywgcmhzRm4pIHsgaWYgKGxocyAhPSBudWxsKSB7IHJldHVybiBsaHM7IH0gZWxzZSB7IHJldHVybiByaHNGbigpOyB9IH0vKioKICogVGhpcyBjb2RlIHdhcyBvcmlnaW5hbGx5IGZvcmtlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9Ub29UYWxsTmF0ZS9wcm94eS1hZ2VudHMvdHJlZS9iMTMzMjk1ZmQxNmY2NDc1NTc4YjZiMTViZDliNGUzM2VjYjBkMGI3CiAqIFdpdGggdGhlIGZvbGxvd2luZyBsaWNlbmNlOgogKgogKiAoVGhlIE1JVCBMaWNlbnNlKQogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTMgTmF0aGFuIFJhamxpY2ggPG5hdGhhbkB0b290YWxsbmF0ZS5uZXQ+KgogKgogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCiAqICdTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAogKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCiAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoqCiAqCiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCiAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLioKICoKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCiAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgogKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCiAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCiAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCiAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCiAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogKi8KCmNvbnN0IElOVEVSTkFMID0gU3ltYm9sKCdBZ2VudEJhc2VJbnRlcm5hbFN0YXRlJyk7CgpjbGFzcyBBZ2VudCBleHRlbmRzIGh0dHAuQWdlbnQgewoKICAvLyBTZXQgYnkgYGh0dHAuQWdlbnRgIC0gbWlzc2luZyBmcm9tIGBAdHlwZXMvbm9kZWAKCiAgY29uc3RydWN0b3Iob3B0cykgewogICAgc3VwZXIob3B0cyk7CiAgICB0aGlzW0lOVEVSTkFMXSA9IHt9OwogIH0KCiAgLyoqCiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhbiBgaHR0cGAgb3IgYGh0dHBzYCByZXF1ZXN0LgogICAqLwogIGlzU2VjdXJlRW5kcG9pbnQob3B0aW9ucykgewogICAgaWYgKG9wdGlvbnMpIHsKICAgICAgLy8gRmlyc3QgY2hlY2sgdGhlIGBzZWN1cmVFbmRwb2ludGAgcHJvcGVydHkgZXhwbGljaXRseSwgc2luY2UgdGhpcwogICAgICAvLyBtZWFucyB0aGF0IGEgcGFyZW50IGBBZ2VudGAgaXMgInBhc3NpbmcgdGhyb3VnaCIgdG8gdGhpcyBpbnN0YW5jZS4KICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcwogICAgICBpZiAodHlwZW9mIChvcHRpb25zICkuc2VjdXJlRW5kcG9pbnQgPT09ICdib29sZWFuJykgewogICAgICAgIHJldHVybiBvcHRpb25zLnNlY3VyZUVuZHBvaW50OwogICAgICB9CgogICAgICAvLyBJZiBubyBleHBsaWNpdCBgc2VjdXJlYCBlbmRwb2ludCwgY2hlY2sgaWYgYHByb3RvY29sYCBwcm9wZXJ0eSBpcwogICAgICAvLyBzZXQuIFRoaXMgd2lsbCB1c3VhbGx5IGJlIHRoZSBjYXNlIHNpbmNlIHVzaW5nIGEgZnVsbCBzdHJpbmcgVVJMCiAgICAgIC8vIG9yIGBVUkxgIGluc3RhbmNlIHNob3VsZCBiZSB0aGUgbW9zdCBjb21tb24gdXNhZ2UuCiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wcm90b2NvbCA9PT0gJ3N0cmluZycpIHsKICAgICAgICByZXR1cm4gb3B0aW9ucy5wcm90b2NvbCA9PT0gJ2h0dHBzOic7CiAgICAgIH0KICAgIH0KCiAgICAvLyBGaW5hbGx5LCBpZiBubyBgcHJvdG9jb2xgIHByb3BlcnR5IHdhcyBzZXQsIHRoZW4gZmFsbCBiYWNrIHRvCiAgICAvLyBjaGVja2luZyB0aGUgc3RhY2sgdHJhY2Ugb2YgdGhlIGN1cnJlbnQgY2FsbCBzdGFjaywgYW5kIHRyeSB0bwogICAgLy8gZGV0ZWN0IHRoZSAiaHR0cHMiIG1vZHVsZS4KICAgIGNvbnN0IHsgc3RhY2sgfSA9IG5ldyBFcnJvcigpOwogICAgaWYgKHR5cGVvZiBzdGFjayAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBzdGFjay5zcGxpdCgnXG4nKS5zb21lKGwgPT4gbC5pbmRleE9mKCcoaHR0cHMuanM6JykgIT09IC0xIHx8IGwuaW5kZXhPZignbm9kZTpodHRwczonKSAhPT0gLTEpOwogIH0KCiAgY3JlYXRlU29ja2V0KHJlcSwgb3B0aW9ucywgY2IpIHsKICAgIGNvbnN0IGNvbm5lY3RPcHRzID0gewogICAgICAuLi5vcHRpb25zLAogICAgICBzZWN1cmVFbmRwb2ludDogdGhpcy5pc1NlY3VyZUVuZHBvaW50KG9wdGlvbnMpLAogICAgfTsKICAgIFByb21pc2UucmVzb2x2ZSgpCiAgICAgIC50aGVuKCgpID0+IHRoaXMuY29ubmVjdChyZXEsIGNvbm5lY3RPcHRzKSkKICAgICAgLnRoZW4oc29ja2V0ID0+IHsKICAgICAgICBpZiAoc29ja2V0IGluc3RhbmNlb2YgaHR0cC5BZ2VudCkgewogICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgYWRkUmVxdWVzdCgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWAKICAgICAgICAgIHJldHVybiBzb2NrZXQuYWRkUmVxdWVzdChyZXEsIGNvbm5lY3RPcHRzKTsKICAgICAgICB9CiAgICAgICAgdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldCA9IHNvY2tldDsKICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBjcmVhdGVTb2NrZXQoKWAgaXNuJ3QgZGVmaW5lZCBpbiBgQHR5cGVzL25vZGVgCiAgICAgICAgc3VwZXIuY3JlYXRlU29ja2V0KHJlcSwgb3B0aW9ucywgY2IpOwogICAgICB9LCBjYik7CiAgfQoKICBjcmVhdGVDb25uZWN0aW9uKCkgewogICAgY29uc3Qgc29ja2V0ID0gdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldDsKICAgIHRoaXNbSU5URVJOQUxdLmN1cnJlbnRTb2NrZXQgPSB1bmRlZmluZWQ7CiAgICBpZiAoIXNvY2tldCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNvY2tldCB3YXMgcmV0dXJuZWQgaW4gdGhlIGBjb25uZWN0KClgIGZ1bmN0aW9uJyk7CiAgICB9CiAgICByZXR1cm4gc29ja2V0OwogIH0KCiAgZ2V0IGRlZmF1bHRQb3J0KCkgewogICAgcmV0dXJuIF9udWxsaXNoQ29hbGVzY2UkMih0aGlzW0lOVEVSTkFMXS5kZWZhdWx0UG9ydCwgKCkgPT4gKCAodGhpcy5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MCkpKTsKICB9CgogIHNldCBkZWZhdWx0UG9ydCh2KSB7CiAgICBpZiAodGhpc1tJTlRFUk5BTF0pIHsKICAgICAgdGhpc1tJTlRFUk5BTF0uZGVmYXVsdFBvcnQgPSB2OwogICAgfQogIH0KCiAgZ2V0IHByb3RvY29sKCkgewogICAgcmV0dXJuIF9udWxsaXNoQ29hbGVzY2UkMih0aGlzW0lOVEVSTkFMXS5wcm90b2NvbCwgKCkgPT4gKCAodGhpcy5pc1NlY3VyZUVuZHBvaW50KCkgPyAnaHR0cHM6JyA6ICdodHRwOicpKSk7CiAgfQoKICBzZXQgcHJvdG9jb2wodikgewogICAgaWYgKHRoaXNbSU5URVJOQUxdKSB7CiAgICAgIHRoaXNbSU5URVJOQUxdLnByb3RvY29sID0gdjsKICAgIH0KICB9Cn0KCmZ1bmN0aW9uIGRlYnVnJDEoLi4uYXJncykgewogIGxvZ2dlci5sb2coJ1todHRwcy1wcm94eS1hZ2VudDpwYXJzZS1wcm94eS1yZXNwb25zZV0nLCAuLi5hcmdzKTsKfQoKZnVuY3Rpb24gcGFyc2VQcm94eVJlc3BvbnNlKHNvY2tldCkgewogIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAvLyB3ZSBuZWVkIHRvIGJ1ZmZlciBhbnkgSFRUUCB0cmFmZmljIHRoYXQgaGFwcGVucyB3aXRoIHRoZSBwcm94eSBiZWZvcmUgd2UgZ2V0CiAgICAvLyB0aGUgQ09OTkVDVCByZXNwb25zZSwgc28gdGhhdCBpZiB0aGUgcmVzcG9uc2UgaXMgYW55dGhpbmcgb3RoZXIgdGhhbiBhbiAiMjAwIgogICAgLy8gcmVzcG9uc2UgY29kZSwgdGhlbiB3ZSBjYW4gcmUtcGxheSB0aGUgImRhdGEiIGV2ZW50cyBvbiB0aGUgc29ja2V0IG9uY2UgdGhlCiAgICAvLyBIVFRQIHBhcnNlciBpcyBob29rZWQgdXAuLi4KICAgIGxldCBidWZmZXJzTGVuZ3RoID0gMDsKICAgIGNvbnN0IGJ1ZmZlcnMgPSBbXTsKCiAgICBmdW5jdGlvbiByZWFkKCkgewogICAgICBjb25zdCBiID0gc29ja2V0LnJlYWQoKTsKICAgICAgaWYgKGIpIG9uZGF0YShiKTsKICAgICAgZWxzZSBzb2NrZXQub25jZSgncmVhZGFibGUnLCByZWFkKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjbGVhbnVwKCkgewogICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKTsKICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpOwogICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ3JlYWRhYmxlJywgcmVhZCk7CiAgICB9CgogICAgZnVuY3Rpb24gb25lbmQoKSB7CiAgICAgIGNsZWFudXAoKTsKICAgICAgZGVidWckMSgnb25lbmQnKTsKICAgICAgcmVqZWN0KG5ldyBFcnJvcignUHJveHkgY29ubmVjdGlvbiBlbmRlZCBiZWZvcmUgcmVjZWl2aW5nIENPTk5FQ1QgcmVzcG9uc2UnKSk7CiAgICB9CgogICAgZnVuY3Rpb24gb25lcnJvcihlcnIpIHsKICAgICAgY2xlYW51cCgpOwogICAgICBkZWJ1ZyQxKCdvbmVycm9yICVvJywgZXJyKTsKICAgICAgcmVqZWN0KGVycik7CiAgICB9CgogICAgZnVuY3Rpb24gb25kYXRhKGIpIHsKICAgICAgYnVmZmVycy5wdXNoKGIpOwogICAgICBidWZmZXJzTGVuZ3RoICs9IGIubGVuZ3RoOwoKICAgICAgY29uc3QgYnVmZmVyZWQgPSBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMsIGJ1ZmZlcnNMZW5ndGgpOwogICAgICBjb25zdCBlbmRPZkhlYWRlcnMgPSBidWZmZXJlZC5pbmRleE9mKCdcclxuXHJcbicpOwoKICAgICAgaWYgKGVuZE9mSGVhZGVycyA9PT0gLTEpIHsKICAgICAgICAvLyBrZWVwIGJ1ZmZlcmluZwogICAgICAgIGRlYnVnJDEoJ2hhdmUgbm90IHJlY2VpdmVkIGVuZCBvZiBIVFRQIGhlYWRlcnMgeWV0Li4uJyk7CiAgICAgICAgcmVhZCgpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgY29uc3QgaGVhZGVyUGFydHMgPSBidWZmZXJlZC5zbGljZSgwLCBlbmRPZkhlYWRlcnMpLnRvU3RyaW5nKCdhc2NpaScpLnNwbGl0KCdcclxuJyk7CiAgICAgIGNvbnN0IGZpcnN0TGluZSA9IGhlYWRlclBhcnRzLnNoaWZ0KCk7CiAgICAgIGlmICghZmlyc3RMaW5lKSB7CiAgICAgICAgc29ja2V0LmRlc3Ryb3koKTsKICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignTm8gaGVhZGVyIHJlY2VpdmVkIGZyb20gcHJveHkgQ09OTkVDVCByZXNwb25zZScpKTsKICAgICAgfQogICAgICBjb25zdCBmaXJzdExpbmVQYXJ0cyA9IGZpcnN0TGluZS5zcGxpdCgnICcpOwogICAgICBjb25zdCBzdGF0dXNDb2RlID0gK2ZpcnN0TGluZVBhcnRzWzFdOwogICAgICBjb25zdCBzdGF0dXNUZXh0ID0gZmlyc3RMaW5lUGFydHMuc2xpY2UoMikuam9pbignICcpOwogICAgICBjb25zdCBoZWFkZXJzID0ge307CiAgICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIGhlYWRlclBhcnRzKSB7CiAgICAgICAgaWYgKCFoZWFkZXIpIGNvbnRpbnVlOwogICAgICAgIGNvbnN0IGZpcnN0Q29sb24gPSBoZWFkZXIuaW5kZXhPZignOicpOwogICAgICAgIGlmIChmaXJzdENvbG9uID09PSAtMSkgewogICAgICAgICAgc29ja2V0LmRlc3Ryb3koKTsKICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKGBJbnZhbGlkIGhlYWRlciBmcm9tIHByb3h5IENPTk5FQ1QgcmVzcG9uc2U6ICIke2hlYWRlcn0iYCkpOwogICAgICAgIH0KICAgICAgICBjb25zdCBrZXkgPSBoZWFkZXIuc2xpY2UoMCwgZmlyc3RDb2xvbikudG9Mb3dlckNhc2UoKTsKICAgICAgICBjb25zdCB2YWx1ZSA9IGhlYWRlci5zbGljZShmaXJzdENvbG9uICsgMSkudHJpbVN0YXJ0KCk7CiAgICAgICAgY29uc3QgY3VycmVudCA9IGhlYWRlcnNba2V5XTsKICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnQgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICBoZWFkZXJzW2tleV0gPSBbY3VycmVudCwgdmFsdWVdOwogICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50KSkgewogICAgICAgICAgY3VycmVudC5wdXNoKHZhbHVlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaGVhZGVyc1trZXldID0gdmFsdWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGRlYnVnJDEoJ2dvdCBwcm94eSBzZXJ2ZXIgcmVzcG9uc2U6ICVvICVvJywgZmlyc3RMaW5lLCBoZWFkZXJzKTsKICAgICAgY2xlYW51cCgpOwogICAgICByZXNvbHZlKHsKICAgICAgICBjb25uZWN0OiB7CiAgICAgICAgICBzdGF0dXNDb2RlLAogICAgICAgICAgc3RhdHVzVGV4dCwKICAgICAgICAgIGhlYWRlcnMsCiAgICAgICAgfSwKICAgICAgICBidWZmZXJlZCwKICAgICAgfSk7CiAgICB9CgogICAgc29ja2V0Lm9uKCdlcnJvcicsIG9uZXJyb3IpOwogICAgc29ja2V0Lm9uKCdlbmQnLCBvbmVuZCk7CgogICAgcmVhZCgpOwogIH0pOwp9CgpmdW5jdGlvbiBfbnVsbGlzaENvYWxlc2NlJDEobGhzLCByaHNGbikgeyBpZiAobGhzICE9IG51bGwpIHsgcmV0dXJuIGxoczsgfSBlbHNlIHsgcmV0dXJuIHJoc0ZuKCk7IH0gfSBmdW5jdGlvbiBfb3B0aW9uYWxDaGFpbiQxKG9wcykgeyBsZXQgbGFzdEFjY2Vzc0xIUyA9IHVuZGVmaW5lZDsgbGV0IHZhbHVlID0gb3BzWzBdOyBsZXQgaSA9IDE7IHdoaWxlIChpIDwgb3BzLmxlbmd0aCkgeyBjb25zdCBvcCA9IG9wc1tpXTsgY29uc3QgZm4gPSBvcHNbaSArIDFdOyBpICs9IDI7IGlmICgob3AgPT09ICdvcHRpb25hbEFjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSAmJiB2YWx1ZSA9PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gaWYgKG9wID09PSAnYWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJykgeyBsYXN0QWNjZXNzTEhTID0gdmFsdWU7IHZhbHVlID0gZm4odmFsdWUpOyB9IGVsc2UgaWYgKG9wID09PSAnY2FsbCcgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSB7IHZhbHVlID0gZm4oKC4uLmFyZ3MpID0+IHZhbHVlLmNhbGwobGFzdEFjY2Vzc0xIUywgLi4uYXJncykpOyBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkOyB9IH0gcmV0dXJuIHZhbHVlOyB9CgpmdW5jdGlvbiBkZWJ1ZyguLi5hcmdzKSB7CiAgbG9nZ2VyLmxvZygnW2h0dHBzLXByb3h5LWFnZW50XScsIC4uLmFyZ3MpOwp9CgovKioKICogVGhlIGBIdHRwc1Byb3h5QWdlbnRgIGltcGxlbWVudHMgYW4gSFRUUCBBZ2VudCBzdWJjbGFzcyB0aGF0IGNvbm5lY3RzIHRvCiAqIHRoZSBzcGVjaWZpZWQgIkhUVFAocykgcHJveHkgc2VydmVyIiBpbiBvcmRlciB0byBwcm94eSBIVFRQUyByZXF1ZXN0cy4KICoKICogT3V0Z29pbmcgSFRUUCByZXF1ZXN0cyBhcmUgZmlyc3QgdHVubmVsZWQgdGhyb3VnaCB0aGUgcHJveHkgc2VydmVyIHVzaW5nIHRoZQogKiBgQ09OTkVDVGAgSFRUUCByZXF1ZXN0IG1ldGhvZCB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBzZXJ2ZXIsCiAqIGFuZCB0aGVuIHRoZSBwcm94eSBzZXJ2ZXIgY29ubmVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIHRhcmdldCBhbmQgaXNzdWVzIHRoZQogKiBIVFRQIHJlcXVlc3QgZnJvbSB0aGUgcHJveHkgc2VydmVyLgogKgogKiBgaHR0cHM6YCByZXF1ZXN0cyBoYXZlIHRoZWlyIHNvY2tldCBjb25uZWN0aW9uIHVwZ3JhZGVkIHRvIFRMUyBvbmNlCiAqIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBzZXJ2ZXIgaGFzIGJlZW4gZXN0YWJsaXNoZWQuCiAqLwpjbGFzcyBIdHRwc1Byb3h5QWdlbnQgZXh0ZW5kcyBBZ2VudCB7CiAgc3RhdGljIF9faW5pdFN0YXRpYygpIHt0aGlzLnByb3RvY29scyA9IFsnaHR0cCcsICdodHRwcyddOyB9CgogIGNvbnN0cnVjdG9yKHByb3h5LCBvcHRzKSB7CiAgICBzdXBlcihvcHRzKTsKICAgIHRoaXMub3B0aW9ucyA9IHt9OwogICAgdGhpcy5wcm94eSA9IHR5cGVvZiBwcm94eSA9PT0gJ3N0cmluZycgPyBuZXcgVVJMKHByb3h5KSA6IHByb3h5OwogICAgdGhpcy5wcm94eUhlYWRlcnMgPSBfbnVsbGlzaENvYWxlc2NlJDEoX29wdGlvbmFsQ2hhaW4kMShbb3B0cywgJ29wdGlvbmFsQWNjZXNzJywgXzIgPT4gXzIuaGVhZGVyc10pLCAoKSA9PiAoIHt9KSk7CiAgICBkZWJ1ZygnQ3JlYXRpbmcgbmV3IEh0dHBzUHJveHlBZ2VudCBpbnN0YW5jZTogJW8nLCB0aGlzLnByb3h5LmhyZWYpOwoKICAgIC8vIFRyaW0gb2ZmIHRoZSBicmFja2V0cyBmcm9tIElQdjYgYWRkcmVzc2VzCiAgICBjb25zdCBob3N0ID0gKHRoaXMucHJveHkuaG9zdG5hbWUgfHwgdGhpcy5wcm94eS5ob3N0KS5yZXBsYWNlKC9eXFt8XF0kL2csICcnKTsKICAgIGNvbnN0IHBvcnQgPSB0aGlzLnByb3h5LnBvcnQgPyBwYXJzZUludCh0aGlzLnByb3h5LnBvcnQsIDEwKSA6IHRoaXMucHJveHkucHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODA7CiAgICB0aGlzLmNvbm5lY3RPcHRzID0gewogICAgICAvLyBBdHRlbXB0IHRvIG5lZ290aWF0ZSBodHRwLzEuMSBmb3IgcHJveHkgc2VydmVycyB0aGF0IHN1cHBvcnQgaHR0cC8yCiAgICAgIEFMUE5Qcm90b2NvbHM6IFsnaHR0cC8xLjEnXSwKICAgICAgLi4uKG9wdHMgPyBvbWl0KG9wdHMsICdoZWFkZXJzJykgOiBudWxsKSwKICAgICAgaG9zdCwKICAgICAgcG9ydCwKICAgIH07CiAgfQoKICAvKioKICAgKiBDYWxsZWQgd2hlbiB0aGUgbm9kZS1jb3JlIEhUVFAgY2xpZW50IGxpYnJhcnkgaXMgY3JlYXRpbmcgYQogICAqIG5ldyBIVFRQIHJlcXVlc3QuCiAgICovCiAgYXN5bmMgY29ubmVjdChyZXEsIG9wdHMpIHsKICAgIGNvbnN0IHsgcHJveHkgfSA9IHRoaXM7CgogICAgaWYgKCFvcHRzLmhvc3QpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gImhvc3QiIHByb3ZpZGVkJyk7CiAgICB9CgogICAgLy8gQ3JlYXRlIGEgc29ja2V0IGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlci4KICAgIGxldCBzb2NrZXQ7CiAgICBpZiAocHJveHkucHJvdG9jb2wgPT09ICdodHRwczonKSB7CiAgICAgIGRlYnVnKCdDcmVhdGluZyBgdGxzLlNvY2tldGA6ICVvJywgdGhpcy5jb25uZWN0T3B0cyk7CiAgICAgIGNvbnN0IHNlcnZlcm5hbWUgPSB0aGlzLmNvbm5lY3RPcHRzLnNlcnZlcm5hbWUgfHwgdGhpcy5jb25uZWN0T3B0cy5ob3N0OwogICAgICBzb2NrZXQgPSB0bHMuY29ubmVjdCh7CiAgICAgICAgLi4udGhpcy5jb25uZWN0T3B0cywKICAgICAgICBzZXJ2ZXJuYW1lOiBzZXJ2ZXJuYW1lICYmIG5ldC5pc0lQKHNlcnZlcm5hbWUpID8gdW5kZWZpbmVkIDogc2VydmVybmFtZSwKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBkZWJ1ZygnQ3JlYXRpbmcgYG5ldC5Tb2NrZXRgOiAlbycsIHRoaXMuY29ubmVjdE9wdHMpOwogICAgICBzb2NrZXQgPSBuZXQuY29ubmVjdCh0aGlzLmNvbm5lY3RPcHRzKTsKICAgIH0KCiAgICBjb25zdCBoZWFkZXJzID0KICAgICAgdHlwZW9mIHRoaXMucHJveHlIZWFkZXJzID09PSAnZnVuY3Rpb24nID8gdGhpcy5wcm94eUhlYWRlcnMoKSA6IHsgLi4udGhpcy5wcm94eUhlYWRlcnMgfTsKICAgIGNvbnN0IGhvc3QgPSBuZXQuaXNJUHY2KG9wdHMuaG9zdCkgPyBgWyR7b3B0cy5ob3N0fV1gIDogb3B0cy5ob3N0OwogICAgbGV0IHBheWxvYWQgPSBgQ09OTkVDVCAke2hvc3R9OiR7b3B0cy5wb3J0fSBIVFRQLzEuMVxyXG5gOwoKICAgIC8vIEluamVjdCB0aGUgYFByb3h5LUF1dGhvcml6YXRpb25gIGhlYWRlciBpZiBuZWNlc3NhcnkuCiAgICBpZiAocHJveHkudXNlcm5hbWUgfHwgcHJveHkucGFzc3dvcmQpIHsKICAgICAgY29uc3QgYXV0aCA9IGAke2RlY29kZVVSSUNvbXBvbmVudChwcm94eS51c2VybmFtZSl9OiR7ZGVjb2RlVVJJQ29tcG9uZW50KHByb3h5LnBhc3N3b3JkKX1gOwogICAgICBoZWFkZXJzWydQcm94eS1BdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShhdXRoKS50b1N0cmluZygnYmFzZTY0Jyl9YDsKICAgIH0KCiAgICBoZWFkZXJzLkhvc3QgPSBgJHtob3N0fToke29wdHMucG9ydH1gOwoKICAgIGlmICghaGVhZGVyc1snUHJveHktQ29ubmVjdGlvbiddKSB7CiAgICAgIGhlYWRlcnNbJ1Byb3h5LUNvbm5lY3Rpb24nXSA9IHRoaXMua2VlcEFsaXZlID8gJ0tlZXAtQWxpdmUnIDogJ2Nsb3NlJzsKICAgIH0KICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKSkgewogICAgICBwYXlsb2FkICs9IGAke25hbWV9OiAke2hlYWRlcnNbbmFtZV19XHJcbmA7CiAgICB9CgogICAgY29uc3QgcHJveHlSZXNwb25zZVByb21pc2UgPSBwYXJzZVByb3h5UmVzcG9uc2Uoc29ja2V0KTsKCiAgICBzb2NrZXQud3JpdGUoYCR7cGF5bG9hZH1cclxuYCk7CgogICAgY29uc3QgeyBjb25uZWN0LCBidWZmZXJlZCB9ID0gYXdhaXQgcHJveHlSZXNwb25zZVByb21pc2U7CiAgICByZXEuZW1pdCgncHJveHlDb25uZWN0JywgY29ubmVjdCk7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50CiAgICAvLyBAdHMtaWdub3JlIE5vdCBFdmVudEVtaXR0ZXIgaW4gTm9kZSB0eXBlcwogICAgdGhpcy5lbWl0KCdwcm94eUNvbm5lY3QnLCBjb25uZWN0LCByZXEpOwoKICAgIGlmIChjb25uZWN0LnN0YXR1c0NvZGUgPT09IDIwMCkgewogICAgICByZXEub25jZSgnc29ja2V0JywgcmVzdW1lKTsKCiAgICAgIGlmIChvcHRzLnNlY3VyZUVuZHBvaW50KSB7CiAgICAgICAgLy8gVGhlIHByb3h5IGlzIGNvbm5lY3RpbmcgdG8gYSBUTFMgc2VydmVyLCBzbyB1cGdyYWRlCiAgICAgICAgLy8gdGhpcyBzb2NrZXQgY29ubmVjdGlvbiB0byBhIFRMUyBjb25uZWN0aW9uLgogICAgICAgIGRlYnVnKCdVcGdyYWRpbmcgc29ja2V0IGNvbm5lY3Rpb24gdG8gVExTJyk7CiAgICAgICAgY29uc3Qgc2VydmVybmFtZSA9IG9wdHMuc2VydmVybmFtZSB8fCBvcHRzLmhvc3Q7CiAgICAgICAgcmV0dXJuIHRscy5jb25uZWN0KHsKICAgICAgICAgIC4uLm9taXQob3B0cywgJ2hvc3QnLCAncGF0aCcsICdwb3J0JyksCiAgICAgICAgICBzb2NrZXQsCiAgICAgICAgICBzZXJ2ZXJuYW1lOiBuZXQuaXNJUChzZXJ2ZXJuYW1lKSA/IHVuZGVmaW5lZCA6IHNlcnZlcm5hbWUsCiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIHJldHVybiBzb2NrZXQ7CiAgICB9CgogICAgLy8gU29tZSBvdGhlciBzdGF0dXMgY29kZSB0aGF0J3Mgbm90IDIwMC4uLiBuZWVkIHRvIHJlLXBsYXkgdGhlIEhUVFAKICAgIC8vIGhlYWRlciAiZGF0YSIgZXZlbnRzIG9udG8gdGhlIHNvY2tldCBvbmNlIHRoZSBIVFRQIG1hY2hpbmVyeSBpcwogICAgLy8gYXR0YWNoZWQgc28gdGhhdCB0aGUgbm9kZSBjb3JlIGBodHRwYCBjYW4gcGFyc2UgYW5kIGhhbmRsZSB0aGUKICAgIC8vIGVycm9yIHN0YXR1cyBjb2RlLgoKICAgIC8vIENsb3NlIHRoZSBvcmlnaW5hbCBzb2NrZXQsIGFuZCBhIG5ldyAiZmFrZSIgc29ja2V0IGlzIHJldHVybmVkCiAgICAvLyBpbnN0ZWFkLCBzbyB0aGF0IHRoZSBwcm94eSBkb2Vzbid0IGdldCB0aGUgSFRUUCByZXF1ZXN0CiAgICAvLyB3cml0dGVuIHRvIGl0ICh3aGljaCBtYXkgY29udGFpbiBgQXV0aG9yaXphdGlvbmAgaGVhZGVycyBvciBvdGhlcgogICAgLy8gc2Vuc2l0aXZlIGRhdGEpLgogICAgLy8KICAgIC8vIFNlZTogaHR0cHM6Ly9oYWNrZXJvbmUuY29tL3JlcG9ydHMvNTQxNTAyCiAgICBzb2NrZXQuZGVzdHJveSgpOwoKICAgIGNvbnN0IGZha2VTb2NrZXQgPSBuZXcgbmV0LlNvY2tldCh7IHdyaXRhYmxlOiBmYWxzZSB9KTsKICAgIGZha2VTb2NrZXQucmVhZGFibGUgPSB0cnVlOwoKICAgIC8vIE5lZWQgdG8gd2FpdCBmb3IgdGhlICJzb2NrZXQiIGV2ZW50IHRvIHJlLXBsYXkgdGhlICJkYXRhIiBldmVudHMuCiAgICByZXEub25jZSgnc29ja2V0JywgKHMpID0+IHsKICAgICAgZGVidWcoJ1JlcGxheWluZyBwcm94eSBidWZmZXIgZm9yIGZhaWxlZCByZXF1ZXN0Jyk7CiAgICAgIC8vIFJlcGxheSB0aGUgImJ1ZmZlcmVkIiBCdWZmZXIgb250byB0aGUgZmFrZSBgc29ja2V0YCwgc2luY2UgYXQKICAgICAgLy8gdGhpcyBwb2ludCB0aGUgSFRUUCBtb2R1bGUgbWFjaGluZXJ5IGhhcyBiZWVuIGhvb2tlZCB1cCBmb3IKICAgICAgLy8gdGhlIHVzZXIuCiAgICAgIHMucHVzaChidWZmZXJlZCk7CiAgICAgIHMucHVzaChudWxsKTsKICAgIH0pOwoKICAgIHJldHVybiBmYWtlU29ja2V0OwogIH0KfSBIdHRwc1Byb3h5QWdlbnQuX19pbml0U3RhdGljKCk7CgpmdW5jdGlvbiByZXN1bWUoc29ja2V0KSB7CiAgc29ja2V0LnJlc3VtZSgpOwp9CgpmdW5jdGlvbiBvbWl0KAogIG9iaiwKICAuLi5rZXlzCikKCiB7CiAgY29uc3QgcmV0ID0ge30KCjsKICBsZXQga2V5OwogIGZvciAoa2V5IGluIG9iaikgewogICAgaWYgKCFrZXlzLmluY2x1ZGVzKGtleSkpIHsKICAgICAgcmV0W2tleV0gPSBvYmpba2V5XTsKICAgIH0KICB9CiAgcmV0dXJuIHJldDsKfQoKZnVuY3Rpb24gX251bGxpc2hDb2FsZXNjZShsaHMsIHJoc0ZuKSB7IGlmIChsaHMgIT0gbnVsbCkgeyByZXR1cm4gbGhzOyB9IGVsc2UgeyByZXR1cm4gcmhzRm4oKTsgfSB9Ci8vIEVzdGltYXRlZCBtYXhpbXVtIHNpemUgZm9yIHJlYXNvbmFibGUgc3RhbmRhbG9uZSBldmVudApjb25zdCBHWklQX1RIUkVTSE9MRCA9IDEwMjQgKiAzMjsKCi8qKgogKiBHZXRzIGEgc3RyZWFtIGZyb20gYSBVaW50OEFycmF5IG9yIHN0cmluZwogKiBSZWFkYWJsZS5mcm9tIGlzIGlkZWFsIGJ1dCB3YXMgYWRkZWQgaW4gbm9kZS5qcyB2MTIuMy4wIGFuZCB2MTAuMTcuMAogKi8KZnVuY3Rpb24gc3RyZWFtRnJvbUJvZHkoYm9keSkgewogIHJldHVybiBuZXcgUmVhZGFibGUoewogICAgcmVhZCgpIHsKICAgICAgdGhpcy5wdXNoKGJvZHkpOwogICAgICB0aGlzLnB1c2gobnVsbCk7CiAgICB9LAogIH0pOwp9CgovKioKICogQ3JlYXRlcyBhIFRyYW5zcG9ydCB0aGF0IHVzZXMgbmF0aXZlIHRoZSBuYXRpdmUgJ2h0dHAnIGFuZCAnaHR0cHMnIG1vZHVsZXMgdG8gc2VuZCBldmVudHMgdG8gU2VudHJ5LgogKi8KZnVuY3Rpb24gbWFrZU5vZGVUcmFuc3BvcnQob3B0aW9ucykgewogIGxldCB1cmxTZWdtZW50czsKCiAgdHJ5IHsKICAgIHVybFNlZ21lbnRzID0gbmV3IFVSTChvcHRpb25zLnVybCk7CiAgfSBjYXRjaCAoZSkgewogICAgY29uc29sZVNhbmRib3goKCkgPT4gewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZQogICAgICBjb25zb2xlLndhcm4oCiAgICAgICAgJ1tAc2VudHJ5L25vZGVdOiBJbnZhbGlkIGRzbiBvciB0dW5uZWwgb3B0aW9uLCB3aWxsIG5vdCBzZW5kIGFueSBldmVudHMuIFRoZSB0dW5uZWwgb3B0aW9uIG11c3QgYmUgYSBmdWxsIFVSTCB3aGVuIHVzZWQuJywKICAgICAgKTsKICAgIH0pOwogICAgcmV0dXJuIGNyZWF0ZVRyYW5zcG9ydChvcHRpb25zLCAoKSA9PiBQcm9taXNlLnJlc29sdmUoe30pKTsKICB9CgogIGNvbnN0IGlzSHR0cHMgPSB1cmxTZWdtZW50cy5wcm90b2NvbCA9PT0gJ2h0dHBzOic7CgogIC8vIFByb3h5IHByaW9yaXRpemF0aW9uOiBodHRwID0+IGBvcHRpb25zLnByb3h5YCB8IGBwcm9jZXNzLmVudi5odHRwX3Byb3h5YAogIC8vIFByb3h5IHByaW9yaXRpemF0aW9uOiBodHRwcyA9PiBgb3B0aW9ucy5wcm94eWAgfCBgcHJvY2Vzcy5lbnYuaHR0cHNfcHJveHlgIHwgYHByb2Nlc3MuZW52Lmh0dHBfcHJveHlgCiAgY29uc3QgcHJveHkgPSBhcHBseU5vUHJveHlPcHRpb24oCiAgICB1cmxTZWdtZW50cywKICAgIG9wdGlvbnMucHJveHkgfHwgKGlzSHR0cHMgPyBwcm9jZXNzLmVudi5odHRwc19wcm94eSA6IHVuZGVmaW5lZCkgfHwgcHJvY2Vzcy5lbnYuaHR0cF9wcm94eSwKICApOwoKICBjb25zdCBuYXRpdmVIdHRwTW9kdWxlID0gaXNIdHRwcyA/IGh0dHBzIDogaHR0cDsKICBjb25zdCBrZWVwQWxpdmUgPSBvcHRpb25zLmtlZXBBbGl2ZSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBvcHRpb25zLmtlZXBBbGl2ZTsKCiAgLy8gVE9ETyh2Nyk6IEV2YWx1YXRlIGlmIHdlIGNhbiBzZXQga2VlcEFsaXZlIHRvIHRydWUuIFRoaXMgd291bGQgaW52b2x2ZSB0ZXN0aW5nIGZvciBtZW1vcnkgbGVha3MgaW4gb2xkZXIgbm9kZQogIC8vIHZlcnNpb25zKD49IDgpIGFzIHRoZXkgaGFkIG1lbW9yeSBsZWFrcyB3aGVuIHVzaW5nIGl0OiAjMjU1NQogIGNvbnN0IGFnZW50ID0gcHJveHkKICAgID8gKG5ldyBIdHRwc1Byb3h5QWdlbnQocHJveHkpICkKICAgIDogbmV3IG5hdGl2ZUh0dHBNb2R1bGUuQWdlbnQoeyBrZWVwQWxpdmUsIG1heFNvY2tldHM6IDMwLCB0aW1lb3V0OiAyMDAwIH0pOwoKICBjb25zdCByZXF1ZXN0RXhlY3V0b3IgPSBjcmVhdGVSZXF1ZXN0RXhlY3V0b3Iob3B0aW9ucywgX251bGxpc2hDb2FsZXNjZShvcHRpb25zLmh0dHBNb2R1bGUsICgpID0+ICggbmF0aXZlSHR0cE1vZHVsZSkpLCBhZ2VudCk7CiAgcmV0dXJuIGNyZWF0ZVRyYW5zcG9ydChvcHRpb25zLCByZXF1ZXN0RXhlY3V0b3IpOwp9CgovKioKICogSG9ub3JzIHRoZSBgbm9fcHJveHlgIGVudiB2YXJpYWJsZSB3aXRoIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRvIGFsbG93IGZvciBob3N0cyBleGNsdXNpb24uCiAqCiAqIEBwYXJhbSB0cmFuc3BvcnRVcmwgVGhlIFVSTCB0aGUgdHJhbnNwb3J0IGludGVuZHMgdG8gc2VuZCBldmVudHMgdG8uCiAqIEBwYXJhbSBwcm94eSBUaGUgY2xpZW50IGNvbmZpZ3VyZWQgcHJveHkuCiAqIEByZXR1cm5zIEEgcHJveHkgdGhlIHRyYW5zcG9ydCBzaG91bGQgdXNlLgogKi8KZnVuY3Rpb24gYXBwbHlOb1Byb3h5T3B0aW9uKHRyYW5zcG9ydFVybFNlZ21lbnRzLCBwcm94eSkgewogIGNvbnN0IHsgbm9fcHJveHkgfSA9IHByb2Nlc3MuZW52OwoKICBjb25zdCB1cmxJc0V4ZW1wdEZyb21Qcm94eSA9CiAgICBub19wcm94eSAmJgogICAgbm9fcHJveHkKICAgICAgLnNwbGl0KCcsJykKICAgICAgLnNvbWUoCiAgICAgICAgZXhlbXB0aW9uID0+IHRyYW5zcG9ydFVybFNlZ21lbnRzLmhvc3QuZW5kc1dpdGgoZXhlbXB0aW9uKSB8fCB0cmFuc3BvcnRVcmxTZWdtZW50cy5ob3N0bmFtZS5lbmRzV2l0aChleGVtcHRpb24pLAogICAgICApOwoKICBpZiAodXJsSXNFeGVtcHRGcm9tUHJveHkpIHsKICAgIHJldHVybiB1bmRlZmluZWQ7CiAgfSBlbHNlIHsKICAgIHJldHVybiBwcm94eTsKICB9Cn0KCi8qKgogKiBDcmVhdGVzIGEgUmVxdWVzdEV4ZWN1dG9yIHRvIGJlIHVzZWQgd2l0aCBgY3JlYXRlVHJhbnNwb3J0YC4KICovCmZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3RFeGVjdXRvcigKICBvcHRpb25zLAogIGh0dHBNb2R1bGUsCiAgYWdlbnQsCikgewogIGNvbnN0IHsgaG9zdG5hbWUsIHBhdGhuYW1lLCBwb3J0LCBwcm90b2NvbCwgc2VhcmNoIH0gPSBuZXcgVVJMKG9wdGlvbnMudXJsKTsKICByZXR1cm4gZnVuY3Rpb24gbWFrZVJlcXVlc3QocmVxdWVzdCkgewogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgbGV0IGJvZHkgPSBzdHJlYW1Gcm9tQm9keShyZXF1ZXN0LmJvZHkpOwoKICAgICAgY29uc3QgaGVhZGVycyA9IHsgLi4ub3B0aW9ucy5oZWFkZXJzIH07CgogICAgICBpZiAocmVxdWVzdC5ib2R5Lmxlbmd0aCA+IEdaSVBfVEhSRVNIT0xEKSB7CiAgICAgICAgaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddID0gJ2d6aXAnOwogICAgICAgIGJvZHkgPSBib2R5LnBpcGUoY3JlYXRlR3ppcCgpKTsKICAgICAgfQoKICAgICAgY29uc3QgcmVxID0gaHR0cE1vZHVsZS5yZXF1ZXN0KAogICAgICAgIHsKICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAogICAgICAgICAgYWdlbnQsCiAgICAgICAgICBoZWFkZXJzLAogICAgICAgICAgaG9zdG5hbWUsCiAgICAgICAgICBwYXRoOiBgJHtwYXRobmFtZX0ke3NlYXJjaH1gLAogICAgICAgICAgcG9ydCwKICAgICAgICAgIHByb3RvY29sLAogICAgICAgICAgY2E6IG9wdGlvbnMuY2FDZXJ0cywKICAgICAgICB9LAogICAgICAgIHJlcyA9PiB7CiAgICAgICAgICByZXMub24oJ2RhdGEnLCAoKSA9PiB7CiAgICAgICAgICAgIC8vIERyYWluIHNvY2tldAogICAgICAgICAgfSk7CgogICAgICAgICAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7CiAgICAgICAgICAgIC8vIERyYWluIHNvY2tldAogICAgICAgICAgfSk7CgogICAgICAgICAgcmVzLnNldEVuY29kaW5nKCd1dGY4Jyk7CgogICAgICAgICAgLy8gIktleS12YWx1ZSBwYWlycyBvZiBoZWFkZXIgbmFtZXMgYW5kIHZhbHVlcy4gSGVhZGVyIG5hbWVzIGFyZSBsb3dlci1jYXNlZC4iCiAgICAgICAgICAvLyBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVycwogICAgICAgICAgY29uc3QgcmV0cnlBZnRlckhlYWRlciA9IF9udWxsaXNoQ29hbGVzY2UocmVzLmhlYWRlcnNbJ3JldHJ5LWFmdGVyJ10sICgpID0+ICggbnVsbCkpOwogICAgICAgICAgY29uc3QgcmF0ZUxpbWl0c0hlYWRlciA9IF9udWxsaXNoQ29hbGVzY2UocmVzLmhlYWRlcnNbJ3gtc2VudHJ5LXJhdGUtbGltaXRzJ10sICgpID0+ICggbnVsbCkpOwoKICAgICAgICAgIHJlc29sdmUoewogICAgICAgICAgICBzdGF0dXNDb2RlOiByZXMuc3RhdHVzQ29kZSwKICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICdyZXRyeS1hZnRlcic6IHJldHJ5QWZ0ZXJIZWFkZXIsCiAgICAgICAgICAgICAgJ3gtc2VudHJ5LXJhdGUtbGltaXRzJzogQXJyYXkuaXNBcnJheShyYXRlTGltaXRzSGVhZGVyKSA/IHJhdGVMaW1pdHNIZWFkZXJbMF0gOiByYXRlTGltaXRzSGVhZGVyLAogICAgICAgICAgICB9LAogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgKTsKCiAgICAgIHJlcS5vbignZXJyb3InLCByZWplY3QpOwogICAgICBib2R5LnBpcGUocmVxKTsKICAgIH0pOwogIH07Cn0KCmZ1bmN0aW9uIF9vcHRpb25hbENoYWluKG9wcykgeyBsZXQgbGFzdEFjY2Vzc0xIUyA9IHVuZGVmaW5lZDsgbGV0IHZhbHVlID0gb3BzWzBdOyBsZXQgaSA9IDE7IHdoaWxlIChpIDwgb3BzLmxlbmd0aCkgeyBjb25zdCBvcCA9IG9wc1tpXTsgY29uc3QgZm4gPSBvcHNbaSArIDFdOyBpICs9IDI7IGlmICgob3AgPT09ICdvcHRpb25hbEFjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSAmJiB2YWx1ZSA9PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gaWYgKG9wID09PSAnYWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJykgeyBsYXN0QWNjZXNzTEhTID0gdmFsdWU7IHZhbHVlID0gZm4odmFsdWUpOyB9IGVsc2UgaWYgKG9wID09PSAnY2FsbCcgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSB7IHZhbHVlID0gZm4oKC4uLmFyZ3MpID0+IHZhbHVlLmNhbGwobGFzdEFjY2Vzc0xIUywgLi4uYXJncykpOyBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkOyB9IH0gcmV0dXJuIHZhbHVlOyB9CmNvbnN0IG9wdGlvbnMgPSB3b3JrZXJEYXRhOwpsZXQgc2Vzc2lvbjsKbGV0IGhhc1NlbnRBbnJFdmVudCA9IGZhbHNlOwoKZnVuY3Rpb24gbG9nKG1zZykgewogIGlmIChvcHRpb25zLmRlYnVnKSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZQogICAgY29uc29sZS5sb2coYFtBTlIgV29ya2VyXSAke21zZ31gKTsKICB9Cn0KCmNvbnN0IHVybCA9IGdldEVudmVsb3BlRW5kcG9pbnRXaXRoVXJsRW5jb2RlZEF1dGgob3B0aW9ucy5kc24pOwpjb25zdCB0cmFuc3BvcnQgPSBtYWtlTm9kZVRyYW5zcG9ydCh7CiAgdXJsLAogIHJlY29yZERyb3BwZWRFdmVudDogKCkgPT4gewogICAgLy8KICB9LAp9KTsKCmFzeW5jIGZ1bmN0aW9uIHNlbmRBYm5vcm1hbFNlc3Npb24oKSB7CiAgLy8gb2Ygd2UgaGF2ZSBhbiBleGlzdGluZyBzZXNzaW9uIHBhc3NlZCBmcm9tIHRoZSBtYWluIHRocmVhZCwgc2VuZCBpdCBhcyBhYm5vcm1hbAogIGlmIChzZXNzaW9uKSB7CiAgICBsb2coJ1NlbmRpbmcgYWJub3JtYWwgc2Vzc2lvbicpOwogICAgdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCB7IHN0YXR1czogJ2Fibm9ybWFsJywgYWJub3JtYWxfbWVjaGFuaXNtOiAnYW5yX2ZvcmVncm91bmQnIH0pOwoKICAgIGNvbnN0IGVudmVsb3BlID0gY3JlYXRlU2Vzc2lvbkVudmVsb3BlKHNlc3Npb24sIG9wdGlvbnMuZHNuLCBvcHRpb25zLnNka01ldGFkYXRhKTsKICAgIC8vIExvZyB0aGUgZW52ZWxvcGUgc28gdG8gYWlkIGluIHRlc3RpbmcKICAgIGxvZyhKU09OLnN0cmluZ2lmeShlbnZlbG9wZSkpOwoKICAgIGF3YWl0IHRyYW5zcG9ydC5zZW5kKGVudmVsb3BlKTsKCiAgICB0cnkgewogICAgICAvLyBOb3RpZnkgdGhlIG1haW4gcHJvY2VzcyB0aGF0IHRoZSBzZXNzaW9uIGhhcyBlbmRlZCBzbyB0aGUgc2Vzc2lvbiBjYW4gYmUgY2xlYXJlZCBmcm9tIHRoZSBzY29wZQogICAgICBfb3B0aW9uYWxDaGFpbihbcGFyZW50UG9ydCwgJ29wdGlvbmFsQWNjZXNzJywgXzIgPT4gXzIucG9zdE1lc3NhZ2UsICdjYWxsJywgXzMgPT4gXzMoJ3Nlc3Npb24tZW5kZWQnKV0pOwogICAgfSBjYXRjaCAoXykgewogICAgICAvLyBpZ25vcmUKICAgIH0KICB9Cn0KCmxvZygnU3RhcnRlZCcpOwoKZnVuY3Rpb24gcHJlcGFyZVN0YWNrRnJhbWVzKHN0YWNrRnJhbWVzKSB7CiAgaWYgKCFzdGFja0ZyYW1lcykgewogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CgogIC8vIFN0cmlwIFNlbnRyeSBmcmFtZXMgYW5kIHJldmVyc2UgdGhlIHN0YWNrIGZyYW1lcyBzbyB0aGV5IGFyZSBpbiB0aGUgY29ycmVjdCBvcmRlcgogIGNvbnN0IHN0cmlwcGVkRnJhbWVzID0gc3RyaXBTZW50cnlGcmFtZXNBbmRSZXZlcnNlKHN0YWNrRnJhbWVzKTsKCiAgLy8gSWYgd2UgaGF2ZSBhbiBhcHAgcm9vdCBwYXRoLCByZXdyaXRlIHRoZSBmaWxlbmFtZXMgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIGFwcCByb290CiAgaWYgKG9wdGlvbnMuYXBwUm9vdFBhdGgpIHsKICAgIGZvciAoY29uc3QgZnJhbWUgb2Ygc3RyaXBwZWRGcmFtZXMpIHsKICAgICAgaWYgKCFmcmFtZS5maWxlbmFtZSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CgogICAgICBmcmFtZS5maWxlbmFtZSA9IG5vcm1hbGl6ZVVybFRvQmFzZShmcmFtZS5maWxlbmFtZSwgb3B0aW9ucy5hcHBSb290UGF0aCk7CiAgICB9CiAgfQoKICByZXR1cm4gc3RyaXBwZWRGcmFtZXM7Cn0KCmFzeW5jIGZ1bmN0aW9uIHNlbmRBbnJFdmVudChmcmFtZXMsIHRyYWNlQ29udGV4dCkgewogIGlmIChoYXNTZW50QW5yRXZlbnQpIHsKICAgIHJldHVybjsKICB9CgogIGhhc1NlbnRBbnJFdmVudCA9IHRydWU7CgogIGF3YWl0IHNlbmRBYm5vcm1hbFNlc3Npb24oKTsKCiAgbG9nKCdTZW5kaW5nIGV2ZW50Jyk7CgogIGNvbnN0IGV2ZW50ID0gewogICAgZXZlbnRfaWQ6IHV1aWQ0KCksCiAgICBjb250ZXh0czogeyAuLi5vcHRpb25zLmNvbnRleHRzLCB0cmFjZTogdHJhY2VDb250ZXh0IH0sCiAgICByZWxlYXNlOiBvcHRpb25zLnJlbGVhc2UsCiAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCwKICAgIGRpc3Q6IG9wdGlvbnMuZGlzdCwKICAgIHBsYXRmb3JtOiAnbm9kZScsCiAgICBsZXZlbDogJ2Vycm9yJywKICAgIGV4Y2VwdGlvbjogewogICAgICB2YWx1ZXM6IFsKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAnQXBwbGljYXRpb25Ob3RSZXNwb25kaW5nJywKICAgICAgICAgIHZhbHVlOiBgQXBwbGljYXRpb24gTm90IFJlc3BvbmRpbmcgZm9yIGF0IGxlYXN0ICR7b3B0aW9ucy5hbnJUaHJlc2hvbGR9IG1zYCwKICAgICAgICAgIHN0YWNrdHJhY2U6IHsgZnJhbWVzOiBwcmVwYXJlU3RhY2tGcmFtZXMoZnJhbWVzKSB9LAogICAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBVSSBkb2Vzbid0IHNheSAnQ3Jhc2hlZCBpbicgZm9yIHRoZSBzdGFjayB0cmFjZQogICAgICAgICAgbWVjaGFuaXNtOiB7IHR5cGU6ICdBTlInIH0sCiAgICAgICAgfSwKICAgICAgXSwKICAgIH0sCiAgICB0YWdzOiBvcHRpb25zLnN0YXRpY1RhZ3MsCiAgfTsKCiAgY29uc3QgZW52ZWxvcGUgPSBjcmVhdGVFdmVudEVudmVsb3BlKGV2ZW50LCBvcHRpb25zLmRzbiwgb3B0aW9ucy5zZGtNZXRhZGF0YSk7CiAgLy8gTG9nIHRoZSBlbnZlbG9wZSBzbyB0byBhaWQgaW4gdGVzdGluZwogIGxvZyhKU09OLnN0cmluZ2lmeShlbnZlbG9wZSkpOwoKICBhd2FpdCB0cmFuc3BvcnQuc2VuZChlbnZlbG9wZSk7CiAgYXdhaXQgdHJhbnNwb3J0LmZsdXNoKDIwMDApOwoKICAvLyBEZWxheSBmb3IgNSBzZWNvbmRzIHNvIHRoYXQgc3RkaW8gY2FuIGZsdXNoIGluIHRoZSBtYWluIGV2ZW50IGxvb3AgZXZlciByZXN0YXJ0cy4KICAvLyBUaGlzIGlzIG1haW5seSBmb3IgdGhlIGJlbmVmaXQgb2YgbG9nZ2luZy9kZWJ1Z2dpbmcgaXNzdWVzLgogIHNldFRpbWVvdXQoKCkgPT4gewogICAgcHJvY2Vzcy5leGl0KDApOwogIH0sIDUwMDApOwp9CgpsZXQgZGVidWdnZXJQYXVzZTsKCmlmIChvcHRpb25zLmNhcHR1cmVTdGFja1RyYWNlKSB7CiAgbG9nKCdDb25uZWN0aW5nIHRvIGRlYnVnZ2VyJyk7CgogIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbigpIDsKICBzZXNzaW9uLmNvbm5lY3RUb01haW5UaHJlYWQoKTsKCiAgbG9nKCdDb25uZWN0ZWQgdG8gZGVidWdnZXInKTsKCiAgLy8gQ29sbGVjdCBzY3JpcHRJZCAtPiB1cmwgbWFwIHNvIHdlIGNhbiBsb29rIHVwIHRoZSBmaWxlbmFtZXMgbGF0ZXIKICBjb25zdCBzY3JpcHRzID0gbmV3IE1hcCgpOwoKICBzZXNzaW9uLm9uKCdEZWJ1Z2dlci5zY3JpcHRQYXJzZWQnLCBldmVudCA9PiB7CiAgICBzY3JpcHRzLnNldChldmVudC5wYXJhbXMuc2NyaXB0SWQsIGV2ZW50LnBhcmFtcy51cmwpOwogIH0pOwoKICBzZXNzaW9uLm9uKCdEZWJ1Z2dlci5wYXVzZWQnLCBldmVudCA9PiB7CiAgICBpZiAoZXZlbnQucGFyYW1zLnJlYXNvbiAhPT0gJ290aGVyJykgewogICAgICByZXR1cm47CiAgICB9CgogICAgdHJ5IHsKICAgICAgbG9nKCdEZWJ1Z2dlciBwYXVzZWQnKTsKCiAgICAgIC8vIGNvcHkgdGhlIGZyYW1lcwogICAgICBjb25zdCBjYWxsRnJhbWVzID0gWy4uLmV2ZW50LnBhcmFtcy5jYWxsRnJhbWVzXTsKCiAgICAgIGNvbnN0IGdldE1vZHVsZU5hbWUgPSBvcHRpb25zLmFwcFJvb3RQYXRoID8gY3JlYXRlR2V0TW9kdWxlRnJvbUZpbGVuYW1lKG9wdGlvbnMuYXBwUm9vdFBhdGgpIDogKCkgPT4gdW5kZWZpbmVkOwogICAgICBjb25zdCBzdGFja0ZyYW1lcyA9IGNhbGxGcmFtZXMubWFwKGZyYW1lID0+CiAgICAgICAgY2FsbEZyYW1lVG9TdGFja0ZyYW1lKGZyYW1lLCBzY3JpcHRzLmdldChmcmFtZS5sb2NhdGlvbi5zY3JpcHRJZCksIGdldE1vZHVsZU5hbWUpLAogICAgICApOwoKICAgICAgLy8gRXZhbHVhdGUgYSBzY3JpcHQgaW4gdGhlIGN1cnJlbnRseSBwYXVzZWQgY29udGV4dAogICAgICBzZXNzaW9uLnBvc3QoCiAgICAgICAgJ1J1bnRpbWUuZXZhbHVhdGUnLAogICAgICAgIHsKICAgICAgICAgIC8vIEdyYWIgdGhlIHRyYWNlIGNvbnRleHQgZnJvbSB0aGUgY3VycmVudCBzY29wZQogICAgICAgICAgZXhwcmVzc2lvbjoKICAgICAgICAgICAgJ2NvbnN0IGN0eCA9IF9fU0VOVFJZX18uaHViLmdldFNjb3BlKCkuZ2V0UHJvcGFnYXRpb25Db250ZXh0KCk7IGN0eC50cmFjZUlkICsgIi0iICsgY3R4LnNwYW5JZCArICItIiArIGN0eC5wYXJlbnRTcGFuSWQnLAogICAgICAgICAgLy8gRG9uJ3QgcmUtdHJpZ2dlciB0aGUgZGVidWdnZXIgaWYgdGhpcyBjYXVzZXMgYW4gZXJyb3IKICAgICAgICAgIHNpbGVudDogdHJ1ZSwKICAgICAgICB9LAogICAgICAgIChfLCBwYXJhbSkgPT4gewogICAgICAgICAgY29uc3QgdHJhY2VJZCA9IHBhcmFtICYmIHBhcmFtLnJlc3VsdCA/IChwYXJhbS5yZXN1bHQudmFsdWUgKSA6ICctLSc7CiAgICAgICAgICBjb25zdCBbdHJhY2VfaWQsIHNwYW5faWQsIHBhcmVudF9zcGFuX2lkXSA9IHRyYWNlSWQuc3BsaXQoJy0nKSA7CgogICAgICAgICAgc2Vzc2lvbi5wb3N0KCdEZWJ1Z2dlci5yZXN1bWUnKTsKICAgICAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIuZGlzYWJsZScpOwoKICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBfb3B0aW9uYWxDaGFpbihbdHJhY2VfaWQsICdvcHRpb25hbEFjY2VzcycsIF80ID0+IF80Lmxlbmd0aF0pICYmIF9vcHRpb25hbENoYWluKFtzcGFuX2lkLCAnb3B0aW9uYWxBY2Nlc3MnLCBfNSA9PiBfNS5sZW5ndGhdKSA/IHsgdHJhY2VfaWQsIHNwYW5faWQsIHBhcmVudF9zcGFuX2lkIH0gOiB1bmRlZmluZWQ7CiAgICAgICAgICBzZW5kQW5yRXZlbnQoc3RhY2tGcmFtZXMsIGNvbnRleHQpLnRoZW4obnVsbCwgKCkgPT4gewogICAgICAgICAgICBsb2coJ1NlbmRpbmcgQU5SIGV2ZW50IGZhaWxlZC4nKTsKICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIucmVzdW1lJyk7CiAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIuZGlzYWJsZScpOwogICAgICB0aHJvdyBlOwogICAgfQogIH0pOwoKICBkZWJ1Z2dlclBhdXNlID0gKCkgPT4gewogICAgdHJ5IHsKICAgICAgc2Vzc2lvbi5wb3N0KCdEZWJ1Z2dlci5lbmFibGUnLCAoKSA9PiB7CiAgICAgICAgc2Vzc2lvbi5wb3N0KCdEZWJ1Z2dlci5wYXVzZScpOwogICAgICB9KTsKICAgIH0gY2F0Y2ggKF8pIHsKICAgICAgLy8KICAgIH0KICB9Owp9CgpmdW5jdGlvbiBjcmVhdGVIclRpbWVyKCkgewogIC8vIFRPRE8gKHY4KTogV2UgY2FuIHVzZSBwcm9jZXNzLmhydGltZS5iaWdpbnQoKSBhZnRlciB3ZSBkcm9wIG5vZGUgdjgKICBsZXQgbGFzdFBvbGwgPSBwcm9jZXNzLmhydGltZSgpOwoKICByZXR1cm4gewogICAgZ2V0VGltZU1zOiAoKSA9PiB7CiAgICAgIGNvbnN0IFtzZWNvbmRzLCBuYW5vU2Vjb25kc10gPSBwcm9jZXNzLmhydGltZShsYXN0UG9sbCk7CiAgICAgIHJldHVybiBNYXRoLmZsb29yKHNlY29uZHMgKiAxZTMgKyBuYW5vU2Vjb25kcyAvIDFlNik7CiAgICB9LAogICAgcmVzZXQ6ICgpID0+IHsKICAgICAgbGFzdFBvbGwgPSBwcm9jZXNzLmhydGltZSgpOwogICAgfSwKICB9Owp9CgpmdW5jdGlvbiB3YXRjaGRvZ1RpbWVvdXQoKSB7CiAgbG9nKCdXYXRjaGRvZyB0aW1lb3V0Jyk7CgogIGlmIChkZWJ1Z2dlclBhdXNlKSB7CiAgICBsb2coJ1BhdXNpbmcgZGVidWdnZXIgdG8gY2FwdHVyZSBzdGFjayB0cmFjZScpOwogICAgZGVidWdnZXJQYXVzZSgpOwogIH0gZWxzZSB7CiAgICBsb2coJ0NhcHR1cmluZyBldmVudCB3aXRob3V0IGEgc3RhY2sgdHJhY2UnKTsKICAgIHNlbmRBbnJFdmVudCgpLnRoZW4obnVsbCwgKCkgPT4gewogICAgICBsb2coJ1NlbmRpbmcgQU5SIGV2ZW50IGZhaWxlZCBvbiB3YXRjaGRvZyB0aW1lb3V0LicpOwogICAgfSk7CiAgfQp9Cgpjb25zdCB7IHBvbGwgfSA9IHdhdGNoZG9nVGltZXIoY3JlYXRlSHJUaW1lciwgb3B0aW9ucy5wb2xsSW50ZXJ2YWwsIG9wdGlvbnMuYW5yVGhyZXNob2xkLCB3YXRjaGRvZ1RpbWVvdXQpOwoKX29wdGlvbmFsQ2hhaW4oW3BhcmVudFBvcnQsICdvcHRpb25hbEFjY2VzcycsIF82ID0+IF82Lm9uLCAnY2FsbCcsIF83ID0+IF83KCdtZXNzYWdlJywgKG1zZykgPT4gewogIGlmIChtc2cuc2Vzc2lvbikgewogICAgc2Vzc2lvbiA9IG1ha2VTZXNzaW9uKG1zZy5zZXNzaW9uKTsKICB9CgogIHBvbGwoKTsKfSldKTs="}),O("68Cgx",function(e,t){W(e.exports,"tracingHandler",()=>b),W(e.exports,"requestHandler",()=>f),W(e.exports,"errorHandler",()=>v),W(e.exports,"trpcMiddleware",()=>I),W(e.exports,"extractRequestData",()=>X("fwl4C").extractRequestData),W(e.exports,"parseRequest",()=>X("fwl4C").parseRequest);var a=X("bsjXU"),i=X("jpnao"),n=X("e4IUz"),o=X("jVURz"),s=X("k2ErF"),r=X("jD1jC"),p=X("deYUe"),l=X("3hDCQ"),d=X("7z6ft"),c=X("eCOpK"),u=X("9GA7E"),m=X("b2ZPh"),g=X("2xRAP"),h=X("1iHXL");function b(){return function(e,t,n){let s=(0,a._optionalChain)([p.getClient,"call",e=>e(),"optionalAccess",e=>e.getOptions,"call",e=>e()]);if(!s||"sentry"!==s.instrumenter||"OPTIONS"===(0,a._optionalChain)([e,"access",e=>e.method,"optionalAccess",e=>e.toUpperCase,"call",e=>e()])||"HEAD"===(0,a._optionalChain)([e,"access",e=>e.method,"optionalAccess",e=>e.toUpperCase,"call",e=>e()]))return n();let r=e.headers&&(0,o.isString)(e.headers["sentry-trace"])?e.headers["sentry-trace"]:void 0,c=(0,a._optionalChain)([e,"access",e=>e.headers,"optionalAccess",e=>e.baggage]);if(!(0,d.hasTracingEnabled)(s))return n();let[g,h]=(0,i.extractPathForTransaction)(e,{path:!0,method:!0}),b=(0,l.continueTrace)({sentryTrace:r,baggage:c},t=>(0,p.startTransaction)({name:g,op:"http.server",origin:"auto.http.node.tracingHandler",...t,data:{[u.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]:h},metadata:{...t.metadata,request:e}},{request:(0,i.extractRequestData)(e)}));(0,p.getCurrentScope)().setSpan(b),t.__sentry_transaction=b,t.once("finish",()=>{setImmediate(()=>{(0,i.addRequestDataToTransaction)(b,e),(0,m.setHttpStatus)(b,t.statusCode),b.end()})}),n()}}function f(e){let t=function(e={}){let t;if("include"in e)t={include:e.include};else{let{ip:a,request:i,transaction:o,user:s}=e;(a||i||o||s)&&(t={include:(0,n.dropUndefinedKeys)({ip:a,request:i,transaction:o,user:s})})}return t}(e),a=(0,p.getClient)();if(a&&(0,h.isAutoSessionTrackingEnabled)(a)){a.initSessionFlusher();let e=(0,p.getCurrentScope)();e.getSession()&&e.setSession()}return function(a,i,n){if(e&&e.flushTimeout&&e.flushTimeout>0){let t=i.end;i.end=function(a,i,n){(0,p.flush)(e.flushTimeout).then(()=>{t.call(this,a,i,n)}).then(null,e=>{g.DEBUG_BUILD&&(0,s.logger).error(e),t.call(this,a,i,n)})}}(0,c.runWithAsyncContext)(()=>{let e=(0,p.getCurrentScope)();e.setSDKProcessingMetadata({request:a,requestDataOptionsFromExpressHandler:t});let o=(0,p.getClient)();(0,h.isAutoSessionTrackingEnabled)(o)&&e.setRequestSession({status:"ok"}),i.once("finish",()=>{let e=(0,p.getClient)();(0,h.isAutoSessionTrackingEnabled)(e)&&setImmediate(()=>{e&&e._captureRequestSession&&e._captureRequestSession()})}),n()})}}function v(e){return function(t,a,i,n){if((e&&e.shouldHandleError||function(e){return function(e){let t=e.status||e.statusCode||e.status_code||e.output&&e.output.statusCode;return t?parseInt(t,10):500}(e)>=500})(t)){(0,p.withScope)(e=>{e.setSDKProcessingMetadata({request:a});let o=i.__sentry_transaction;o&&!(0,l.getActiveSpan)()&&e.setSpan(o);let s=(0,p.getClient)();if(s&&(0,h.isAutoSessionTrackingEnabled)(s)&&void 0!==s._sessionFlusher){let t=e.getRequestSession();t&&void 0!==t.status&&(t.status="crashed")}let r=(0,p.captureException)(t,{mechanism:{type:"middleware",handled:!1}});i.sentry=r,n(t)});return}n(t)}}function I(e={}){return function({path:t,type:i,next:n,rawInput:s}){let l;let d=(0,a._optionalChain)([p.getClient,"call",e=>e(),"optionalAccess",e=>e.getOptions,"call",e=>e()]),c=(0,p.getCurrentScope)().getTransaction();if(c){c.updateName(`trpc/${t}`),c.setAttribute(u.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,"route"),c.op="rpc.server";let n={procedure_type:i};(void 0!==e.attachRpcInput?e.attachRpcInput:(0,a._optionalChain)([d,"optionalAccess",e=>e.sendDefaultPii]))&&(n.input=(0,r.normalize)(s)),c.setContext("trpc",n)}function m(e){e.ok||(0,p.captureException)(e.error,{mechanism:{handled:!1,data:{function:"trpcMiddleware"}}})}try{l=n()}catch(e){throw(0,p.captureException)(e,{mechanism:{handled:!1,data:{function:"trpcMiddleware"}}}),e}return(0,o.isThenable)(l)?Promise.resolve(l).then(e=>{m(e)},e=>{(0,p.captureException)(e,{mechanism:{handled:!1,data:{function:"trpcMiddleware"}}})}):m(l),l}}X("fwl4C")}),O("fwl4C",function(e,t){W(e.exports,"extractRequestData",()=>i),W(e.exports,"parseRequest",()=>n);var a=X("jpnao");function i(e,t){return(0,a.extractRequestData)(e,{include:t})}function n(e,t,i={}){return(0,a.addRequestDataToEvent)(e,t,{include:i})}}),O("iGrMv",function(e,t){W(e.exports,"Console",()=>X("bCDzK").Console),W(e.exports,"Http",()=>X("8G0FT").Http),W(e.exports,"OnUncaughtException",()=>X("dDWKn").OnUncaughtException),W(e.exports,"OnUnhandledRejection",()=>X("kpGGI").OnUnhandledRejection),W(e.exports,"Modules",()=>X("esVyk").Modules),W(e.exports,"ContextLines",()=>X("koeOU").ContextLines),W(e.exports,"Context",()=>X("ezym9").Context),W(e.exports,"RequestData",()=>X("l9Z6v").RequestData),W(e.exports,"LocalVariables",()=>X("lVZId").LocalVariables),W(e.exports,"Undici",()=>X("aCFro").Undici),W(e.exports,"Spotlight",()=>X("7wvFM").Spotlight),W(e.exports,"Anr",()=>X("5x2pZ").Anr),W(e.exports,"Hapi",()=>X("28DJl").Hapi),X("bCDzK"),X("8G0FT"),X("dDWKn"),X("kpGGI"),X("esVyk"),X("koeOU"),X("ezym9"),X("l9Z6v"),X("lVZId"),X("aCFro"),X("7wvFM"),X("5x2pZ"),X("28DJl")}),O("28DJl",function(e,t){W(e.exports,"hapiErrorPlugin",()=>g),W(e.exports,"hapiIntegration",()=>f),W(e.exports,"Hapi",()=>v);var a=X("deYUe"),i=X("3hDCQ"),n=X("hVqbS"),o=X("050Gq"),s=X("cCmfn"),r=X("039qT"),p=X("b2ZPh"),l=X("iD1up"),d=X("hSiIl"),c=X("e4IUz");function u(e){return e&&void 0!==e.statusCode}function m(e){(0,a.captureException)(e,{mechanism:{type:"hapi",handled:!1,data:{function:"hapiErrorPlugin"}}})}let g={name:"SentryHapiErrorPlugin",version:r.SDK_VERSION,register:async function(e){e.events.on("request",(e,t)=>{var a;let i=(0,o.getActiveTransaction)();e.response&&(a=e.response)&&void 0!==a.isBoom?m(e.response):t&&void 0!==t.error&&m(t.error),i&&(i.setStatus("internal_error"),i.end())})}},h={name:"SentryHapiTracingPlugin",version:r.SDK_VERSION,register:async function(e){e.ext("onPreHandler",(e,t)=>{let n=(0,i.continueTrace)({sentryTrace:e.headers["sentry-trace"]||void 0,baggage:e.headers.baggage||void 0},t=>(0,a.startTransaction)({...t,op:"hapi.request",name:e.route.path,description:`${e.route.method} ${e.path}`}));return(0,a.getCurrentScope)().setSpan(n),t.continue}),e.ext("onPreResponse",(e,t)=>{let a=(0,o.getActiveTransaction)();if(e.response&&u(e.response)&&a){let t=e.response;t.header("sentry-trace",(0,l.spanToTraceHeader)(a));let i=(0,d.dynamicSamplingContextToSentryBaggageHeader)((0,s.getDynamicSamplingContextFromSpan)(a));i&&t.header("baggage",i)}return t.continue}),e.ext("onPostHandler",(e,t)=>{let a=(0,o.getActiveTransaction)();return a&&(e.response&&u(e.response)&&(0,p.setHttpStatus)(a,e.response.statusCode),a.end()),t.continue})}},b="Hapi",f=(0,n.defineIntegration)((e={})=>{let t=e.server;return{name:b,setupOnce(){t&&(0,c.fill)(t,"start",e=>async function(){return await this.register(h),await this.register(g),e.apply(this)})}}}),v=(0,n.convertIntegrationFnToClass)(b,f)}),O("i3FeK",function(e,t){W(e.exports,"Apollo",()=>X("9rcfq").Apollo),W(e.exports,"Express",()=>X("3SU1C").Express),W(e.exports,"GraphQL",()=>X("2UNWp").GraphQL),W(e.exports,"Mongo",()=>X("5N1eW").Mongo),W(e.exports,"Mysql",()=>X("kEOfe").Mysql),W(e.exports,"Postgres",()=>X("k9pSf").Postgres),W(e.exports,"Prisma",()=>X("cWSR5").Prisma),X("9rcfq"),X("3SU1C"),X("2UNWp"),X("5N1eW"),X("kEOfe"),X("k9pSf"),X("cWSR5")}),O("9rcfq",function(e,t){W(e.exports,"Apollo",()=>d);var a=X("bsjXU"),i=X("1gT0D"),n=X("e4IUz"),o=X("jVURz"),s=X("fArVl"),r=X("k2ErF"),p=X("5NAaM"),l=X("9AttI");class d{static __initStatic(){this.id="Apollo"}constructor(e={useNestjs:!1}){this.name=d.id,this._useNest=!!e.useNestjs}loadDependency(){return this._useNest?this._module=this._module||(0,s.loadModule)("@nestjs/graphql"):this._module=this._module||(0,s.loadModule)("apollo-server-core"),this._module}setupOnce(e,t){if((0,l.shouldDisableAutoInstrumentation)(t)){p.DEBUG_BUILD&&(0,r.logger).log("Apollo Integration is skipped because of instrumenter configuration.");return}if(this._useNest){let e=this.loadDependency();if(!e){p.DEBUG_BUILD&&(0,r.logger).error("Apollo-NestJS Integration was unable to require @nestjs/graphql package.");return}(0,n.fill)(e.GraphQLFactory.prototype,"mergeWithSchema",function(e){return function(...a){return(0,n.fill)(this.resolversExplorerService,"explore",function(e){return function(){return c((0,i.arrayify)(e.call(this)),t)}}),e.call(this,...a)}})}else{let e=this.loadDependency();if(!e){p.DEBUG_BUILD&&(0,r.logger).error("Apollo Integration was unable to require apollo-server-core package.");return}(0,n.fill)(e.ApolloServerBase.prototype,"constructSchema",function(e){return function(){if(!this.config.resolvers)return p.DEBUG_BUILD&&(this.config.schema?((0,r.logger).warn("Apollo integration is not able to trace `ApolloServer` instances constructed via `schema` property.If you are using NestJS with Apollo, please use `Sentry.Integrations.Apollo({ useNestjs: true })` instead."),(0,r.logger).warn()):this.config.modules&&(0,r.logger).warn("Apollo integration is not able to trace `ApolloServer` instances constructed via `modules` property."),(0,r.logger).error("Skipping tracing as no resolvers found on the `ApolloServer` instance.")),e.call(this);let a=(0,i.arrayify)(this.config.resolvers);return this.config.resolvers=c(a,t),e.call(this)}})}}}function c(e,t){return e.map(e=>(Object.keys(e).forEach(i=>{Object.keys(e[i]).forEach(s=>{"function"==typeof e[i][s]&&(0,n.fill)(e[i],s,function(e){return function(...n){let r=t().getScope().getSpan(),p=(0,a._optionalChain)([r,"optionalAccess",e=>e.startChild,"call",e=>e({description:`${i}.${s}`,op:"graphql.resolve",origin:"auto.graphql.apollo"})]),l=e.call(this,...n);return(0,o.isThenable)(l)?l.then(e=>((0,a._optionalChain)([p,"optionalAccess",e=>e.end,"call",e=>e()]),e)):((0,a._optionalChain)([p,"optionalAccess",e=>e.end,"call",e=>e()]),l)}})})}),e))}d.__initStatic()}),O("5NAaM",function(e,t){W(e.exports,"DEBUG_BUILD",()=>a);let a="undefined"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__}),O("9AttI",function(e,t){W(e.exports,"shouldDisableAutoInstrumentation",()=>i);var a=X("bsjXU");function i(e){let t=(0,a._optionalChain)([e,"call",e=>e(),"access",e=>e.getClient,"call",e=>e(),"optionalAccess",e=>e.getOptions,"call",e=>e()]);return"sentry"!==((0,a._optionalChain)([t,"optionalAccess",e=>e.instrumenter])||"sentry")}}),O("3SU1C",function(e,t){W(e.exports,"Express",()=>u);var a=X("bsjXU"),i=X("jpnao"),n=X("6szME"),o=X("gd055"),s=X("jVURz"),r=X("k2ErF"),p=X("9GA7E"),l=X("iD1up"),d=X("5NAaM"),c=X("9AttI");class u{static __initStatic(){this.id="Express"}constructor(e={}){this.name=u.id,this._router=e.router||e.app,this._methods=(Array.isArray(e.methods)?e.methods:[]).concat("use")}setupOnce(e,t){if(!this._router){d.DEBUG_BUILD&&(0,r.logger).error("ExpressIntegration is missing an Express instance");return}if((0,c.shouldDisableAutoInstrumentation)(t)){d.DEBUG_BUILD&&(0,r.logger).log("Express Integration is skipped because of instrumenter configuration.");return}(function(e,t=[]){t.forEach(t=>(function(e,t){let a=e[t];return e[t]=function(...e){return a.call(this,...e.map(e=>"function"==typeof e?m(e,t):Array.isArray(e)?e.map(e=>"function"==typeof e?m(e,t):e):e))},e})(e,t))})(this._router,this._methods),function(e){let t="settings"in e;t&&void 0===e._router&&e.lazyrouter&&e.lazyrouter();let c=t?e._router:e;if(!c){d.DEBUG_BUILD&&(0,r.logger).debug("Cannot instrument router for URL Parameterization (did not find a valid router)."),d.DEBUG_BUILD&&(0,r.logger).debug("Routing instrumentation is currently only supported in Express 4.");return}let u=Object.getPrototypeOf(c),m=u.process_params;u.process_params=function(e,t,r,d,c){r._reconstructedRoute||(r._reconstructedRoute="");let{layerRoutePath:u,isRegex:h,isArray:b,numExtraSegments:f}=function(e){var t;let i=(0,a._optionalChain)([e,"access",e=>e.route,"optionalAccess",e=>e.path]),r=(0,s.isRegExp)(i),p=Array.isArray(i);if(!i){let[t]=(0,o.GLOBAL_OBJ).process.versions.node.split(".").map(Number);t>=16&&(i=g(e.path,e.regexp,e.keys))}if(!i)return{isRegex:r,isArray:p,numExtraSegments:0};let l=p?Math.max(i.reduce((e,t)=>e+(0,n.getNumberOfUrlSegments)(t.toString()),0)-(0,n.getNumberOfUrlSegments)(e.path||""),0):0;return{layerRoutePath:(t=i,p?t.map(e=>e.toString()).join(","):t&&t.toString()),isRegex:r,isArray:p,numExtraSegments:l}}(e);(u||h||b)&&(r._hasParameters=!0);let v=(u||function(e,t,i){let o=(0,n.stripUrlQueryAndFragment)(e||""),s=(0,a._optionalChain)([o,"optionalAccess",e=>e.split,"call",e=>e("/"),"access",e=>e.filter,"call",e=>e(e=>!!e)]),r=0,p=(0,a._optionalChain)([t,"optionalAccess",e=>e.split,"call",e=>e("/"),"access",e=>e.filter,"call",e=>e(e=>!!e),"access",e=>e.length])||0;return(0,a._optionalChain)([i,"optionalAccess",e=>e.split,"call",e=>e("/"),"access",e=>e.filter,"call",e=>e(e=>(0,a._optionalChain)([s,"optionalAccess",e=>e[p+r]])===e&&(r+=1,!0)),"access",e=>e.join,"call",e=>e("/")])}(r.originalUrl,r._reconstructedRoute,e.path)||"").split("/").filter(e=>e.length>0&&(h||b||!e.includes("*"))).join("/");if(v&&v.length>0&&(r._reconstructedRoute+=`/${v}${h?"/":""}`),(0,n.getNumberOfUrlSegments)((0,n.stripUrlQueryAndFragment)(r.originalUrl||""))+f===(0,n.getNumberOfUrlSegments)(r._reconstructedRoute)){r._hasParameters||r._reconstructedRoute===r.originalUrl||(r._reconstructedRoute=r.originalUrl?(0,n.stripUrlQueryAndFragment)(r.originalUrl):r.originalUrl);let e=d.__sentry_transaction,t=e&&(0,l.spanToJSON)(e).data||{};if(e&&"custom"!==t[p.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]){let t=r._reconstructedRoute||"/",[a,n]=(0,i.extractPathForTransaction)(r,{path:!0,method:!0,customRoute:t});e.updateName(a),e.setAttribute(p.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,n)}}return m.call(this,e,t,r,d,c)}}(this._router)}}function m(e,t){let i=e.length;switch(i){case 2:return function(a,i){let n=i.__sentry_transaction;if(n){let a=n.startChild({description:e.name,op:`middleware.express.${t}`,origin:"auto.middleware.express"});i.once("finish",()=>{a.end()})}return e.call(this,a,i)};case 3:return function(i,n,o){let s=n.__sentry_transaction,r=(0,a._optionalChain)([s,"optionalAccess",e=>e.startChild,"call",a=>a({description:e.name,op:`middleware.express.${t}`,origin:"auto.middleware.express"})]);e.call(this,i,n,function(...e){(0,a._optionalChain)([r,"optionalAccess",e=>e.end,"call",e=>e()]),o.call(this,...e)})};case 4:return function(i,n,o,s){let r=o.__sentry_transaction,p=(0,a._optionalChain)([r,"optionalAccess",e=>e.startChild,"call",a=>a({description:e.name,op:`middleware.express.${t}`,origin:"auto.middleware.express"})]);e.call(this,i,n,o,function(...e){(0,a._optionalChain)([p,"optionalAccess",e=>e.end,"call",e=>e()]),s.call(this,...e)})};default:throw Error(`Express middleware takes 2-4 arguments. Got: ${i}`)}}u.__initStatic();let g=(e,t,i)=>{if(!e||!t||!i||0===Object.keys(i).length||!(0,a._optionalChain)([i,"access",e=>e[0],"optionalAccess",e=>e.offset]))return;let n=i.sort((e,t)=>e.offset-t.offset),o=RegExp(t,`${t.flags}d`).exec(e);if(!o||!o.indices)return;let[,...s]=o.indices;if(s.length!==n.length)return;let r=e,p=0;return s.forEach((e,t)=>{if(e){let[a,i]=e,o=r.substring(0,a-p),s=`:${n[t].name}`;r=o+s+r.substring(i-p),p+=i-a-s.length}}),r}}),O("2UNWp",function(e,t){W(e.exports,"GraphQL",()=>l);var a=X("bsjXU"),i=X("e4IUz"),n=X("jVURz"),o=X("fArVl"),s=X("k2ErF"),r=X("5NAaM"),p=X("9AttI");class l{static __initStatic(){this.id="GraphQL"}constructor(){this.name=l.id}loadDependency(){return this._module=this._module||(0,o.loadModule)("graphql/execution/execute.js")}setupOnce(e,t){if((0,p.shouldDisableAutoInstrumentation)(t)){r.DEBUG_BUILD&&(0,s.logger).log("GraphQL Integration is skipped because of instrumenter configuration.");return}let o=this.loadDependency();if(!o){r.DEBUG_BUILD&&(0,s.logger).error("GraphQL Integration was unable to require graphql/execution package.");return}(0,i.fill)(o,"execute",function(e){return function(...i){let o=t().getScope(),s=o.getSpan(),r=(0,a._optionalChain)([s,"optionalAccess",e=>e.startChild,"call",e=>e({description:"execute",op:"graphql.execute",origin:"auto.graphql.graphql"})]);(0,a._optionalChain)([o,"optionalAccess",e=>e.setSpan,"call",e=>e(r)]);let p=e.call(this,...i);return(0,n.isThenable)(p)?p.then(e=>((0,a._optionalChain)([r,"optionalAccess",e=>e.end,"call",e=>e()]),(0,a._optionalChain)([o,"optionalAccess",e=>e.setSpan,"call",e=>e(s)]),e)):((0,a._optionalChain)([r,"optionalAccess",e=>e.end,"call",e=>e()]),(0,a._optionalChain)([o,"optionalAccess",e=>e.setSpan,"call",e=>e(s)]),p)}})}}l.__initStatic()}),O("5N1eW",function(e,t){W(e.exports,"Mongo",()=>c);var a=X("bsjXU"),i=X("e4IUz"),n=X("jVURz"),o=X("fArVl"),s=X("k2ErF"),r=X("5NAaM"),p=X("9AttI");let l=["aggregate","bulkWrite","countDocuments","createIndex","createIndexes","deleteMany","deleteOne","distinct","drop","dropIndex","dropIndexes","estimatedDocumentCount","find","findOne","findOneAndDelete","findOneAndReplace","findOneAndUpdate","indexes","indexExists","indexInformation","initializeOrderedBulkOp","insertMany","insertOne","isCapped","mapReduce","options","parallelCollectionScan","rename","replaceOne","stats","updateMany","updateOne"],d={bulkWrite:["operations"],countDocuments:["query"],createIndex:["fieldOrSpec"],createIndexes:["indexSpecs"],deleteMany:["filter"],deleteOne:["filter"],distinct:["key","query"],dropIndex:["indexName"],find:["query"],findOne:["query"],findOneAndDelete:["filter"],findOneAndReplace:["filter","replacement"],findOneAndUpdate:["filter","update"],indexExists:["indexes"],insertMany:["docs"],insertOne:["doc"],mapReduce:["map","reduce"],rename:["newName"],replaceOne:["filter","doc"],updateMany:["filter","update"],updateOne:["filter","update"]};class c{static __initStatic(){this.id="Mongo"}constructor(e={}){this.name=c.id,this._operations=Array.isArray(e.operations)?e.operations:l,this._describeOperations=!("describeOperations"in e)||e.describeOperations,this._useMongoose=!!e.useMongoose}loadDependency(){let e=this._useMongoose?"mongoose":"mongodb";return this._module=this._module||(0,o.loadModule)(e)}setupOnce(e,t){if((0,p.shouldDisableAutoInstrumentation)(t)){r.DEBUG_BUILD&&(0,s.logger).log("Mongo Integration is skipped because of instrumenter configuration.");return}let a=this.loadDependency();if(!a){let e=this._useMongoose?"mongoose":"mongodb";r.DEBUG_BUILD&&(0,s.logger).error(`Mongo Integration was unable to require \`${e}\` package.`);return}this._instrumentOperations(a.Collection,this._operations,t)}_instrumentOperations(e,t,a){t.forEach(t=>this._patchOperation(e,t,a))}_patchOperation(e,t,o){if(!(t in e.prototype))return;let s=this._getSpanContextFromOperationArguments.bind(this);(0,i.fill)(e.prototype,t,function(e){return function(...i){let r=i[i.length-1],p=o(),l=p.getScope(),d=p.getClient(),c=l.getSpan(),u=(0,a._optionalChain)([d,"optionalAccess",e=>e.getOptions,"call",e=>e(),"access",e=>e.sendDefaultPii]);if("function"!=typeof r||"mapReduce"===t&&2===i.length){let o=(0,a._optionalChain)([c,"optionalAccess",e=>e.startChild,"call",e=>e(s(this,t,i,u))]),r=e.call(this,...i);if((0,n.isThenable)(r))return r.then(e=>((0,a._optionalChain)([o,"optionalAccess",e=>e.end,"call",e=>e()]),e));if(!r||"object"!=typeof r||!r.once||"function"!=typeof r.once)return(0,a._optionalChain)([o,"optionalAccess",e=>e.end,"call",e=>e()]),r;try{r.once("close",()=>{(0,a._optionalChain)([o,"optionalAccess",e=>e.end,"call",e=>e()])})}catch(e){(0,a._optionalChain)([o,"optionalAccess",e=>e.end,"call",e=>e()])}return r}let m=(0,a._optionalChain)([c,"optionalAccess",e=>e.startChild,"call",e=>e(s(this,t,i.slice(0,-1)))]);return e.call(this,...i.slice(0,-1),function(e,t){(0,a._optionalChain)([m,"optionalAccess",e=>e.end,"call",e=>e()]),r(e,t)})}})}_getSpanContextFromOperationArguments(e,t,a,i=!1){let n={"db.system":"mongodb","db.name":e.dbName,"db.operation":t,"db.mongodb.collection":e.collectionName},o={op:"db",origin:"auto.db.mongo",description:t,data:n},s=d[t],r=Array.isArray(this._describeOperations)?this._describeOperations.includes(t):this._describeOperations;if(!s||!r||!i)return o;try{if("mapReduce"===t){let[e,t]=a;n[s[0]]="string"==typeof e?e:e.name||"",n[s[1]]="string"==typeof t?t:t.name||""}else for(let e=0;ep);var a=X("bsjXU"),i=X("e4IUz"),n=X("fArVl"),o=X("k2ErF"),s=X("5NAaM"),r=X("9AttI");class p{static __initStatic(){this.id="Mysql"}constructor(){this.name=p.id}loadDependency(){return this._module=this._module||(0,n.loadModule)("mysql/lib/Connection.js")}setupOnce(e,t){let n;if((0,r.shouldDisableAutoInstrumentation)(t)){s.DEBUG_BUILD&&(0,o.logger).log("Mysql Integration is skipped because of instrumenter configuration.");return}let p=this.loadDependency();if(!p){s.DEBUG_BUILD&&(0,o.logger).error("Mysql Integration was unable to require `mysql` package.");return}try{p.prototype.connect=new Proxy(p.prototype.connect,{apply:(e,t,a)=>(n||(n=t.config),e.apply(t,a))})}catch(e){s.DEBUG_BUILD&&(0,o.logger).error("Mysql Integration was unable to instrument `mysql` config.")}function l(e){if(!e)return;let t=n?{"server.address":n.host,"server.port":n.port,"db.user":n.user}:{};Object.keys(t).forEach(a=>{e.setAttribute(a,t[a])}),e.end()}(0,i.fill)(p,"createQuery",function(e){return function(i,n,o){let s=t().getScope().getSpan(),r=(0,a._optionalChain)([s,"optionalAccess",e=>e.startChild,"call",e=>e({description:"string"==typeof i?i:i.sql,op:"db",origin:"auto.db.mysql",data:{"db.system":"mysql"}})]);if("function"==typeof o)return e.call(this,i,n,function(e,t,a){l(r),o(e,t,a)});if("function"==typeof n)return e.call(this,i,function(e,t,a){l(r),n(e,t,a)});let p=e.call(this,i,n);return p.on("end",()=>{l(r)}),p}})}}p.__initStatic()}),O("k9pSf",function(e,t){W(e.exports,"Postgres",()=>l);var a=X("bsjXU"),i=X("e4IUz"),n=X("jVURz"),o=X("fArVl"),s=X("k2ErF"),r=X("5NAaM"),p=X("9AttI");class l{static __initStatic(){this.id="Postgres"}constructor(e={}){this.name=l.id,this._usePgNative=!!e.usePgNative,this._module=e.module}loadDependency(){return this._module=this._module||(0,o.loadModule)("pg")}setupOnce(e,t){if((0,p.shouldDisableAutoInstrumentation)(t)){r.DEBUG_BUILD&&(0,s.logger).log("Postgres Integration is skipped because of instrumenter configuration.");return}let o=this.loadDependency();if(!o){r.DEBUG_BUILD&&(0,s.logger).error("Postgres Integration was unable to require `pg` package.");return}let l=this._usePgNative?(0,a._optionalChain)([o,"access",e=>e.native,"optionalAccess",e=>e.Client]):o.Client;if(!l){r.DEBUG_BUILD&&(0,s.logger).error("Postgres Integration was unable to access 'pg-native' bindings.");return}(0,i.fill)(l.prototype,"query",function(e){return function(i,o,s){let r=t().getScope().getSpan(),p={"db.system":"postgresql"};try{this.database&&(p["db.name"]=this.database),this.host&&(p["server.address"]=this.host),this.port&&(p["server.port"]=this.port),this.user&&(p["db.user"]=this.user)}catch(e){}let l=(0,a._optionalChain)([r,"optionalAccess",e=>e.startChild,"call",e=>e({description:"string"==typeof i?i:i.text,op:"db",origin:"auto.db.postgres",data:p})]);if("function"==typeof s)return e.call(this,i,o,function(e,t){(0,a._optionalChain)([l,"optionalAccess",e=>e.end,"call",e=>e()]),s(e,t)});if("function"==typeof o)return e.call(this,i,function(e,t){(0,a._optionalChain)([l,"optionalAccess",e=>e.end,"call",e=>e()]),o(e,t)});let d=void 0!==o?e.call(this,i,o):e.call(this,i);return(0,n.isThenable)(d)?d.then(e=>((0,a._optionalChain)([l,"optionalAccess",e=>e.end,"call",e=>e()]),e)):((0,a._optionalChain)([l,"optionalAccess",e=>e.end,"call",e=>e()]),d)}})}}l.__initStatic()}),O("cWSR5",function(e,t){W(e.exports,"Prisma",()=>l);var a=X("eCOpK"),i=X("9GA7E"),n=X("3hDCQ"),o=X("e4IUz"),s=X("k2ErF"),r=X("5NAaM"),p=X("9AttI");class l{static __initStatic(){this.id="Prisma"}constructor(e={}){var t;if(this.name=l.id,(t=e.client)&&t.$use&&!e.client._sentryInstrumented){(0,o.addNonEnumerableProperty)(e.client,"_sentryInstrumented",!0);let t={};try{let a=e.client._engineConfig;if(a){let{activeProvider:e,clientVersion:i}=a;e&&(t["db.system"]=e),i&&(t["db.prisma.version"]=i)}}catch(e){}e.client.$use((e,o)=>{if((0,p.shouldDisableAutoInstrumentation)(a.getCurrentHub))return o(e);let s=e.action,r=e.model;return(0,n.startSpan)({name:r?`${r} ${s}`:s,onlyIfParent:!0,op:"db.prisma",attributes:{[i.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]:"auto.db.prisma"},data:{...t,"db.operation":s}},()=>o(e))})}else r.DEBUG_BUILD&&(0,s.logger).warn("Unsupported Prisma client provided to PrismaIntegration. Provided client:",e.client)}setupOnce(){}}l.__initStatic()}),O("6G2Kr",function(e,t){W(e.exports,"instrumentCron",()=>o);var a=X("deYUe"),i=X("bdQRg");let n="Automatic instrumentation of CronJob only supports crontab string";function o(e,t){let o=!1;return new Proxy(e,{construct(e,s){let[r,p,l,d,c,...u]=s;if("string"!=typeof r)throw Error(n);if(o)throw Error(`A job named '${t}' has already been scheduled`);o=!0;let m=(0,i.replaceCronNames)(r);return new e(r,function(e,i){return(0,a.withMonitor)(t,()=>p(e,i),{schedule:{type:"crontab",value:m},...c?{timeZone:c}:{}})},l,d,c,...u)},get:(e,s)=>"from"===s?s=>{let{cronTime:r,onTick:p,timeZone:l}=s;if("string"!=typeof r)throw Error(n);if(o)throw Error(`A job named '${t}' has already been scheduled`);o=!0;let d=(0,i.replaceCronNames)(r);return s.onTick=(e,i)=>(0,a.withMonitor)(t,()=>p(e,i),{schedule:{type:"crontab",value:d},...l?{timeZone:l}:{}}),e.from(s)}:e[s]})}}),O("bdQRg",function(e,t){W(e.exports,"replaceCronNames",()=>i);let a=[["january","1"],["february","2"],["march","3"],["april","4"],["may","5"],["june","6"],["july","7"],["august","8"],["september","9"],["october","10"],["november","11"],["december","12"],["jan","1"],["feb","2"],["mar","3"],["apr","4"],["may","5"],["jun","6"],["jul","7"],["aug","8"],["sep","9"],["oct","10"],["nov","11"],["dec","12"],["sunday","0"],["monday","1"],["tuesday","2"],["wednesday","3"],["thursday","4"],["friday","5"],["saturday","6"],["sun","0"],["mon","1"],["tue","2"],["wed","3"],["thu","4"],["fri","5"],["sat","6"]];function i(e){return a.reduce((e,[t,a])=>e.replace(RegExp(t,"gi"),a),e)}}),O("gRbyu",function(e,t){W(e.exports,"instrumentNodeCron",()=>o);var a=X("bsjXU"),i=X("deYUe"),n=X("bdQRg");function o(e){return new Proxy(e,{get:(e,t)=>"schedule"===t&&e.schedule?new Proxy(e.schedule,{apply(e,t,o){let[s,,r]=o;if(!(0,a._optionalChain)([r,"optionalAccess",e=>e.name]))throw Error('Missing "name" for scheduled job. A name is required for Sentry check-in monitoring.');return(0,i.withMonitor)(r.name,()=>e.apply(t,o),{schedule:{type:"crontab",value:(0,n.replaceCronNames)(s)},timezone:(0,a._optionalChain)([r,"optionalAccess",e=>e.timezone])})}}):e[t]})}}),O("4dSSb",function(e,t){W(e.exports,"instrumentNodeSchedule",()=>n);var a=X("deYUe"),i=X("bdQRg");function n(e){return new Proxy(e,{get:(e,t)=>"scheduleJob"===t?new Proxy(e.scheduleJob,{apply(e,t,n){let[o,s]=n;if("string"!=typeof o||"string"!=typeof s)throw Error("Automatic instrumentation of 'node-schedule' requires the first parameter of 'scheduleJob' to be a job name string and the second parameter to be a crontab string");return(0,a.withMonitor)(o,()=>e.apply(t,n),{schedule:{type:"crontab",value:(0,i.replaceCronNames)(s)}})}}):e[t]})}}),O("aDQYo",function(e,t){W(e.exports,"addExtensionMethods",()=>o);var a=X("jfDa9"),i=X("eCOpK"),n=X("fArVl");function o(){(0,a.addTracingExtensions)(),(0,n.isNodeEnv)()&&function(){let t=(0,i.getMainCarrier)();if(!t.__SENTRY__)return;let a={mongodb:()=>new((0,n.dynamicRequire)(e,"./node/integrations/mongo")).Mongo,mongoose:()=>new((0,n.dynamicRequire)(e,"./node/integrations/mongo")).Mongo,mysql:()=>new((0,n.dynamicRequire)(e,"./node/integrations/mysql")).Mysql,pg:()=>new((0,n.dynamicRequire)(e,"./node/integrations/postgres")).Postgres},o=Object.keys(a).filter(e=>!!(0,n.loadModule)(e)).map(e=>{try{return a[e]()}catch(e){return}}).filter(e=>e);o.length>0&&(t.__SENTRY__.integrations=[...t.__SENTRY__.integrations||[],...o])}()}}),O("95REl",function(e,t){var a=X("ihzfm");t.operation=function(e){return new a(t.timeouts(e),{forever:e&&(e.forever||e.retries===1/0),unref:e&&e.unref,maxRetryTime:e&&e.maxRetryTime})},t.timeouts=function(e){if(e instanceof Array)return[].concat(e);var t={retries:10,factor:2,minTimeout:1e3,maxTimeout:1/0,randomize:!1};for(var a in e)t[a]=e[a];if(t.minTimeout>t.maxTimeout)throw Error("minTimeout is greater than maxTimeout");for(var i=[],n=0;n=this._maxRetryTime)return this._errors.push(e),this._errors.unshift(Error("RetryOperation timeout occurred")),!1;this._errors.push(e);var a=this._timeouts.shift();if(void 0===a){if(!this._cachedTimeouts)return!1;this._errors.splice(0,this._errors.length-1),a=this._cachedTimeouts.slice(-1)}var i=this;return this._timer=setTimeout(function(){i._attempts++,i._operationTimeoutCb&&(i._timeout=setTimeout(function(){i._operationTimeoutCb(i._attempts)},i._operationTimeout),i._options.unref&&i._timeout.unref()),i._fn(i._attempts)},a),this._options.unref&&this._timer.unref(),!0},a.prototype.attempt=function(e,t){this._fn=e,t&&(t.timeout&&(this._operationTimeout=t.timeout),t.cb&&(this._operationTimeoutCb=t.cb));var a=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){a._operationTimeoutCb()},a._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)},a.prototype.try=function(e){console.log("Using RetryOperation.try() is deprecated"),this.attempt(e)},a.prototype.start=function(e){console.log("Using RetryOperation.start() is deprecated"),this.attempt(e)},a.prototype.start=a.prototype.try,a.prototype.errors=function(){return this._errors},a.prototype.attempts=function(){return this._attempts},a.prototype.mainError=function(){if(0===this._errors.length)return null;for(var e={},t=null,a=0,i=0;i=a&&(t=n,a=s)}return t}});var L={},D=L&&L.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[a]}})}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),K=L&&L.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),J=L&&L.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.hasOwnProperty.call(e,a)&&D(t,e,a);return K(t,e),t},z=L&&L.__awaiter||function(e,t,a,i){return new(a||(a=Promise))(function(n,o){function s(e){try{p(i.next(e))}catch(e){o(e)}}function r(e){try{p(i.throw(e))}catch(e){o(e)}}function p(e){var t;e.done?n(e.value):((t=e.value)instanceof a?t:new a(function(e){e(t)})).then(s,r)}p((i=i.apply(e,t||[])).next())})};Object.defineProperty(L,"__esModule",{value:!0}),L.getIDToken=L.getState=L.saveState=L.group=L.endGroup=L.startGroup=L.info=L.notice=L.warning=L.error=L.debug=L.isDebug=L.setFailed=L.setCommandEcho=L.setOutput=L.getBooleanInput=L.getMultilineInput=L.getInput=L.addPath=L.setSecret=L.exportVariable=L.ExitCode=void 0;var j={},P=j&&j.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[a]}})}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),M=j&&j.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Q=j&&j.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.hasOwnProperty.call(e,a)&&P(t,e,a);return M(t,e),t};Object.defineProperty(j,"__esModule",{value:!0}),j.issue=j.issueCommand=void 0;const q=Q(w);var $={};function ee(e,t,a){let i=new et(e,t,a);process.stdout.write(i.toString()+q.EOL)}Object.defineProperty($,"__esModule",{value:!0}),$.toCommandProperties=$.toCommandValue=void 0,$.toCommandValue=function(e){return null==e?"":"string"==typeof e||e instanceof String?e:JSON.stringify(e)},$.toCommandProperties=function(e){return Object.keys(e).length?{title:e.title,file:e.file,line:e.startLine,endLine:e.endLine,col:e.startColumn,endColumn:e.endColumn}:{}},j.issueCommand=ee,j.issue=function(e,t=""){ee(e,{},t)};class et{constructor(e,t,a){e||(e="missing.command"),this.command=e,this.properties=t,this.message=a}toString(){var e;let t="::"+this.command;if(this.properties&&Object.keys(this.properties).length>0){t+=" ";let e=!0;for(let a in this.properties)if(this.properties.hasOwnProperty(a)){let i=this.properties[a];i&&(e?e=!1:t+=",",t+=`${a}=${$.toCommandValue(i).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}`)}}return t+`::${e=this.message,$.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}`}}var ea={},ei=ea&&ea.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[a]}})}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),en=ea&&ea.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),eo=ea&&ea.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.hasOwnProperty.call(e,a)&&ei(t,e,a);return en(t,e),t};Object.defineProperty(ea,"__esModule",{value:!0}),ea.prepareKeyValueMessage=ea.issueFileCommand=void 0;const es=eo(y),er=eo(w),ep=new Uint8Array(256);let el=ep.length;var ed=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;const ec=[];for(let e=0;e<256;++e)ec.push((e+256).toString(16).substr(1));var eu=function(e,t=0){let a=(ec[e[t+0]]+ec[e[t+1]]+ec[e[t+2]]+ec[e[t+3]]+"-"+ec[e[t+4]]+ec[e[t+5]]+"-"+ec[e[t+6]]+ec[e[t+7]]+"-"+ec[e[t+8]]+ec[e[t+9]]+"-"+ec[e[t+10]]+ec[e[t+11]]+ec[e[t+12]]+ec[e[t+13]]+ec[e[t+14]]+ec[e[t+15]]).toLowerCase();if(!("string"==typeof a&&ed.test(a)))throw TypeError("Stringified UUID is invalid");return a},em=function(e,t,a){let i=(e=e||{}).random||(e.rng||function(){return el>ep.length-16&&(F(E).randomFillSync(ep),el=0),ep.slice(el,el+=16)})();if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,t){a=a||0;for(let e=0;e<16;++e)t[a+e]=i[e];return t}return eu(i)};ea.issueFileCommand=function(e,t){let a=process.env[`GITHUB_${e}`];if(!a)throw Error(`Unable to find environment variable for file command ${e}`);if(!es.existsSync(a))throw Error(`Missing file at path: ${a}`);es.appendFileSync(a,`${$.toCommandValue(t)}${er.EOL}`,{encoding:"utf8"})},ea.prepareKeyValueMessage=function(e,t){let a=`ghadelimiter_${em()}`,i=$.toCommandValue(t);if(e.includes(a))throw Error(`Unexpected input: name should not contain the delimiter "${a}"`);if(i.includes(a))throw Error(`Unexpected input: value should not contain the delimiter "${a}"`);return`${e}<<${a}${er.EOL}${i}${er.EOL}${a}`};const eg=J(w),eh=J(A);var eb={},ef=eb&&eb.__awaiter||function(e,t,a,i){return new(a||(a=Promise))(function(n,o){function s(e){try{p(i.next(e))}catch(e){o(e)}}function r(e){try{p(i.throw(e))}catch(e){o(e)}}function p(e){var t;e.done?n(e.value):((t=e.value)instanceof a?t:new a(function(e){e(t)})).then(s,r)}p((i=i.apply(e,t||[])).next())})};Object.defineProperty(eb,"__esModule",{value:!0}),eb.OidcClient=void 0;var ev=X("iPsMt"),eI={},eC=eI&&eI.__awaiter||function(e,t,a,i){return new(a||(a=Promise))(function(n,o){function s(e){try{p(i.next(e))}catch(e){o(e)}}function r(e){try{p(i.throw(e))}catch(e){o(e)}}function p(e){var t;e.done?n(e.value):((t=e.value)instanceof a?t:new a(function(e){e(t)})).then(s,r)}p((i=i.apply(e,t||[])).next())})};Object.defineProperty(eI,"__esModule",{value:!0}),eI.PersonalAccessTokenCredentialHandler=eI.BearerCredentialHandler=eI.BasicCredentialHandler=void 0,eI.BasicCredentialHandler=class{constructor(e,t){this.username=e,this.password=t}prepareRequest(e){if(!e.headers)throw Error("The request has no headers");e.headers.Authorization=`Basic ${Buffer.from(`${this.username}:${this.password}`).toString("base64")}`}canHandleAuthentication(){return!1}handleAuthentication(){return eC(this,void 0,void 0,function*(){throw Error("not implemented")})}},eI.BearerCredentialHandler=class{constructor(e){this.token=e}prepareRequest(e){if(!e.headers)throw Error("The request has no headers");e.headers.Authorization=`Bearer ${this.token}`}canHandleAuthentication(){return!1}handleAuthentication(){return eC(this,void 0,void 0,function*(){throw Error("not implemented")})}},eI.PersonalAccessTokenCredentialHandler=class{constructor(e){this.token=e}prepareRequest(e){if(!e.headers)throw Error("The request has no headers");e.headers.Authorization=`Basic ${Buffer.from(`PAT:${this.token}`).toString("base64")}`}canHandleAuthentication(){return!1}handleAuthentication(){return eC(this,void 0,void 0,function*(){throw Error("not implemented")})}};class ey{static createHttpClient(e=!0,t=10){return new ev.HttpClient("actions/oidc-client",[new eI.BearerCredentialHandler(ey.getRequestToken())],{allowRetries:e,maxRetries:t})}static getRequestToken(){let e=process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN;if(!e)throw Error("Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable");return e}static getIDTokenUrl(){let e=process.env.ACTIONS_ID_TOKEN_REQUEST_URL;if(!e)throw Error("Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable");return e}static getCall(e){var t;return ef(this,void 0,void 0,function*(){let a=ey.createHttpClient(),i=null===(t=(yield a.getJson(e).catch(e=>{throw Error(`Failed to get ID Token.
Error Code : ${e.statusCode}
Error Message: ${e.result.message}`)})).result)||void 0===t?void 0:t.value;if(!i)throw Error("Response json body do not have ID Token field");return i})}static getIDToken(e){return ef(this,void 0,void 0,function*(){try{let t=ey.getIDTokenUrl();if(e){let a=encodeURIComponent(e);t=`${t}&audience=${a}`}L.debug(`ID token url is ${t}`);let a=yield ey.getCall(t);return L.setSecret(a),a}catch(e){throw Error(`Error message: ${e.message}`)}})}}function ew(e,t){let a=process.env[`INPUT_${e.replace(/ /g,"_").toUpperCase()}`]||"";if(t&&t.required&&!a)throw Error(`Input required and not supplied: ${e}`);return t&&!1===t.trimWhitespace?a:a.trim()}function ex(e,t={}){j.issueCommand("error",$.toCommandProperties(t),e instanceof Error?e.toString():e)}function eA(e){j.issue("group",e)}function eG(){j.issue("endgroup")}eb.OidcClient=ey,(i=n=L.ExitCode||(L.ExitCode={}))[i.Success=0]="Success",i[i.Failure=1]="Failure",L.exportVariable=function(e,t){let a=$.toCommandValue(t);if(process.env[e]=a,process.env.GITHUB_ENV)return ea.issueFileCommand("ENV",ea.prepareKeyValueMessage(e,t));j.issueCommand("set-env",{name:e},a)},L.setSecret=function(e){j.issueCommand("add-mask",{},e)},L.addPath=function(e){process.env.GITHUB_PATH?ea.issueFileCommand("PATH",e):j.issueCommand("add-path",{},e),process.env.PATH=`${e}${eh.delimiter}${process.env.PATH}`},L.getInput=ew,L.getMultilineInput=function(e,t){let a=ew(e,t).split("\n").filter(e=>""!==e);return t&&!1===t.trimWhitespace?a:a.map(e=>e.trim())},L.getBooleanInput=function(e,t){let a=ew(e,t);if(["true","True","TRUE"].includes(a))return!0;if(["false","False","FALSE"].includes(a))return!1;throw TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${e}
-Support boolean input list: \`true | True | TRUE | false | False | FALSE\``)},L.setOutput=function(e,t){if(process.env.GITHUB_OUTPUT)return ea.issueFileCommand("OUTPUT",ea.prepareKeyValueMessage(e,t));process.stdout.write(eg.EOL),j.issueCommand("set-output",{name:e},$.toCommandValue(t))},L.setCommandEcho=function(e){j.issue("echo",e?"on":"off")},L.setFailed=function(e){process.exitCode=n.Failure,ex(e)},L.isDebug=function(){return"1"===process.env.RUNNER_DEBUG},L.debug=function(e){j.issueCommand("debug",{},e)},L.error=ex,L.warning=function(e,t={}){j.issueCommand("warning",$.toCommandProperties(t),e instanceof Error?e.toString():e)},L.notice=function(e,t={}){j.issueCommand("notice",$.toCommandProperties(t),e instanceof Error?e.toString():e)},L.info=function(e){process.stdout.write(e+eg.EOL)},L.startGroup=eA,L.endGroup=eG,L.group=function(e,t){return z(this,void 0,void 0,function*(){let a;eA(e);try{a=yield t()}finally{eG()}return a})},L.saveState=function(e,t){if(process.env.GITHUB_STATE)return ea.issueFileCommand("STATE",ea.prepareKeyValueMessage(e,t));j.issueCommand("save-state",{name:e},$.toCommandValue(t))},L.getState=function(e){return process.env[`STATE_${e}`]||""},L.getIDToken=function(e){return z(this,void 0,void 0,function*(){return yield eb.OidcClient.getIDToken(e)})};var eS={},eB=eS&&eS.__awaiter||function(e,t,a,i){return new(a||(a=Promise))(function(n,o){function s(e){try{p(i.next(e))}catch(e){o(e)}}function r(e){try{p(i.throw(e))}catch(e){o(e)}}function p(e){var t;e.done?n(e.value):((t=e.value)instanceof a?t:new a(function(e){e(t)})).then(s,r)}p((i=i.apply(e,t||[])).next())})};Object.defineProperty(eS,"__esModule",{value:!0}),eS.summary=eS.markdownSummary=eS.SUMMARY_DOCS_URL=eS.SUMMARY_ENV_VAR=void 0;const{access:eZ,appendFile:e_,writeFile:eT}=y.promises;eS.SUMMARY_ENV_VAR="GITHUB_STEP_SUMMARY",eS.SUMMARY_DOCS_URL="https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary";const eR=new class{constructor(){this._buffer=""}filePath(){return eB(this,void 0,void 0,function*(){if(this._filePath)return this._filePath;let e=process.env[eS.SUMMARY_ENV_VAR];if(!e)throw Error(`Unable to find environment variable for $${eS.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`);try{yield eZ(e,y.constants.R_OK|y.constants.W_OK)}catch(t){throw Error(`Unable to access summary file: '${e}'. Check if the file has correct read/write permissions.`)}return this._filePath=e,this._filePath})}wrap(e,t,a={}){let i=Object.entries(a).map(([e,t])=>` ${e}="${t}"`).join("");return t?`<${e}${i}>${t}${e}>`:`<${e}${i}>`}write(e){return eB(this,void 0,void 0,function*(){let t=!!(null==e?void 0:e.overwrite),a=yield this.filePath();return yield(t?eT:e_)(a,this._buffer,{encoding:"utf8"}),this.emptyBuffer()})}clear(){return eB(this,void 0,void 0,function*(){return this.emptyBuffer().write({overwrite:!0})})}stringify(){return this._buffer}isEmptyBuffer(){return 0===this._buffer.length}emptyBuffer(){return this._buffer="",this}addRaw(e,t=!1){return this._buffer+=e,t?this.addEOL():this}addEOL(){return this.addRaw(w.EOL)}addCodeBlock(e,t){let a=Object.assign({},t&&{lang:t}),i=this.wrap("pre",this.wrap("code",e),a);return this.addRaw(i).addEOL()}addList(e,t=!1){let a=e.map(e=>this.wrap("li",e)).join(""),i=this.wrap(t?"ol":"ul",a);return this.addRaw(i).addEOL()}addTable(e){let t=e.map(e=>{let t=e.map(e=>{if("string"==typeof e)return this.wrap("td",e);let{header:t,data:a,colspan:i,rowspan:n}=e,o=Object.assign(Object.assign({},i&&{colspan:i}),n&&{rowspan:n});return this.wrap(t?"th":"td",a,o)}).join("");return this.wrap("tr",t)}).join(""),a=this.wrap("table",t);return this.addRaw(a).addEOL()}addDetails(e,t){let a=this.wrap("details",this.wrap("summary",e)+t);return this.addRaw(a).addEOL()}addImage(e,t,a){let{width:i,height:n}=a||{},o=Object.assign(Object.assign({},i&&{width:i}),n&&{height:n}),s=this.wrap("img",null,Object.assign({src:e,alt:t},o));return this.addRaw(s).addEOL()}addHeading(e,t){let a=`h${t}`,i=["h1","h2","h3","h4","h5","h6"].includes(a)?a:"h1",n=this.wrap(i,e);return this.addRaw(n).addEOL()}addSeparator(){let e=this.wrap("hr",null);return this.addRaw(e).addEOL()}addBreak(){let e=this.wrap("br",null);return this.addRaw(e).addEOL()}addQuote(e,t){let a=Object.assign({},t&&{cite:t}),i=this.wrap("blockquote",e,a);return this.addRaw(i).addEOL()}addLink(e,t){let a=this.wrap("a",e,{href:t});return this.addRaw(a).addEOL()}};eS.markdownSummary=eR,eS.summary=eR,Object.defineProperty(L,"summary",{enumerable:!0,get:function(){return eS.summary}}),Object.defineProperty(L,"markdownSummary",{enumerable:!0,get:function(){return eS.markdownSummary}});var eV={},eE=eV&&eV.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[a]}})}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),eN=eV&&eV.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),eW=eV&&eV.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.hasOwnProperty.call(e,a)&&eE(t,e,a);return eN(t,e),t};Object.defineProperty(eV,"__esModule",{value:!0}),eV.toPlatformPath=eV.toWin32Path=eV.toPosixPath=void 0;const ek=eW(A);eV.toPosixPath=function(e){return e.replace(/[\\]/g,"/")},eV.toWin32Path=function(e){return e.replace(/[/]/g,"\\")},eV.toPlatformPath=function(e){return e.replace(/[/\\]/g,ek.sep)},Object.defineProperty(L,"toPosixPath",{enumerable:!0,get:function(){return eV.toPosixPath}}),Object.defineProperty(L,"toWin32Path",{enumerable:!0,get:function(){return eV.toWin32Path}}),Object.defineProperty(L,"toPlatformPath",{enumerable:!0,get:function(){return eV.toPlatformPath}});var eH={},eF=eH&&eH.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[a]}})}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),eU=eH&&eH.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),eY=eH&&eH.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.hasOwnProperty.call(e,a)&&eF(t,e,a);return eU(t,e),t};Object.defineProperty(eH,"__esModule",{value:!0}),eH.getOctokit=eH.context=void 0;const eO=eY(O("gQjas"));var eX={},eL=eX&&eX.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[a]}})}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),eD=eX&&eX.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),eK=eX&&eX.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.hasOwnProperty.call(e,a)&&eL(t,e,a);return eD(t,e),t};Object.defineProperty(eX,"__esModule",{value:!0}),eX.getOctokitOptions=eX.GitHub=eX.defaults=eX.context=void 0;const eJ=eK(O("gQjas")),ez=eK(O("3qvHp"));function ej(){return"object"==typeof navigator&&"userAgent"in navigator?navigator.userAgent:"object"==typeof process&&"version"in process?`Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`:""}var eP={},eM={};eM=function e(t,a,i,n){if("function"!=typeof i)throw Error("method for before hook must be a function");return(n||(n={}),Array.isArray(a))?a.reverse().reduce(function(a,i){return e.bind(null,t,i,a,n)},i)():Promise.resolve().then(function(){return t.registry[a]?t.registry[a].reduce(function(e,t){return t.hook.bind(null,e,n)},i)():i(n)})};var eQ={};eQ=function(e,t,a,i){var n=i;e.registry[a]||(e.registry[a]=[]),"before"===t&&(i=function(e,t){return Promise.resolve().then(n.bind(null,t)).then(e.bind(null,t))}),"after"===t&&(i=function(e,t){var a;return Promise.resolve().then(e.bind(null,t)).then(function(e){return n(a=e,t)}).then(function(){return a})}),"error"===t&&(i=function(e,t){return Promise.resolve().then(e.bind(null,t)).catch(function(e){return n(e,t)})}),e.registry[a].push({hook:i,orig:n})};var eq={};eq=function(e,t,a){if(e.registry[t]){var i=e.registry[t].map(function(e){return e.orig}).indexOf(a);-1!==i&&e.registry[t].splice(i,1)}};var e$=Function.bind,e1=e$.bind(e$);function e0(e,t,a){var i=e1(eq,null).apply(null,a?[t,a]:[t]);e.api={remove:i},e.remove=i,["before","error","after","wrap"].forEach(function(i){var n=a?[t,i,a]:[t,i];e[i]=e.api[i]=e1(eQ,null).apply(null,n)})}function e2(){var e={registry:{}},t=eM.bind(null,e);return e0(t,e),t}var e4=!1;function e9(){return e4||(console.warn('[before-after-hook]: "Hook()" repurposing warning, use "Hook.Collection()". Read more: https://git.io/upgrade-before-after-hook-to-1.4'),e4=!0),e2()}/*!
+Support boolean input list: \`true | True | TRUE | false | False | FALSE\``)},L.setOutput=function(e,t){if(process.env.GITHUB_OUTPUT)return ea.issueFileCommand("OUTPUT",ea.prepareKeyValueMessage(e,t));process.stdout.write(eg.EOL),j.issueCommand("set-output",{name:e},$.toCommandValue(t))},L.setCommandEcho=function(e){j.issue("echo",e?"on":"off")},L.setFailed=function(e){process.exitCode=n.Failure,ex(e)},L.isDebug=function(){return"1"===process.env.RUNNER_DEBUG},L.debug=function(e){j.issueCommand("debug",{},e)},L.error=ex,L.warning=function(e,t={}){j.issueCommand("warning",$.toCommandProperties(t),e instanceof Error?e.toString():e)},L.notice=function(e,t={}){j.issueCommand("notice",$.toCommandProperties(t),e instanceof Error?e.toString():e)},L.info=function(e){process.stdout.write(e+eg.EOL)},L.startGroup=eA,L.endGroup=eG,L.group=function(e,t){return z(this,void 0,void 0,function*(){let a;eA(e);try{a=yield t()}finally{eG()}return a})},L.saveState=function(e,t){if(process.env.GITHUB_STATE)return ea.issueFileCommand("STATE",ea.prepareKeyValueMessage(e,t));j.issueCommand("save-state",{name:e},$.toCommandValue(t))},L.getState=function(e){return process.env[`STATE_${e}`]||""},L.getIDToken=function(e){return z(this,void 0,void 0,function*(){return yield eb.OidcClient.getIDToken(e)})};var eB={},eS=eB&&eB.__awaiter||function(e,t,a,i){return new(a||(a=Promise))(function(n,o){function s(e){try{p(i.next(e))}catch(e){o(e)}}function r(e){try{p(i.throw(e))}catch(e){o(e)}}function p(e){var t;e.done?n(e.value):((t=e.value)instanceof a?t:new a(function(e){e(t)})).then(s,r)}p((i=i.apply(e,t||[])).next())})};Object.defineProperty(eB,"__esModule",{value:!0}),eB.summary=eB.markdownSummary=eB.SUMMARY_DOCS_URL=eB.SUMMARY_ENV_VAR=void 0;const{access:eZ,appendFile:e_,writeFile:eR}=y.promises;eB.SUMMARY_ENV_VAR="GITHUB_STEP_SUMMARY",eB.SUMMARY_DOCS_URL="https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary";const eV=new class{constructor(){this._buffer=""}filePath(){return eS(this,void 0,void 0,function*(){if(this._filePath)return this._filePath;let e=process.env[eB.SUMMARY_ENV_VAR];if(!e)throw Error(`Unable to find environment variable for $${eB.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`);try{yield eZ(e,y.constants.R_OK|y.constants.W_OK)}catch(t){throw Error(`Unable to access summary file: '${e}'. Check if the file has correct read/write permissions.`)}return this._filePath=e,this._filePath})}wrap(e,t,a={}){let i=Object.entries(a).map(([e,t])=>` ${e}="${t}"`).join("");return t?`<${e}${i}>${t}${e}>`:`<${e}${i}>`}write(e){return eS(this,void 0,void 0,function*(){let t=!!(null==e?void 0:e.overwrite),a=yield this.filePath();return yield(t?eR:e_)(a,this._buffer,{encoding:"utf8"}),this.emptyBuffer()})}clear(){return eS(this,void 0,void 0,function*(){return this.emptyBuffer().write({overwrite:!0})})}stringify(){return this._buffer}isEmptyBuffer(){return 0===this._buffer.length}emptyBuffer(){return this._buffer="",this}addRaw(e,t=!1){return this._buffer+=e,t?this.addEOL():this}addEOL(){return this.addRaw(w.EOL)}addCodeBlock(e,t){let a=Object.assign({},t&&{lang:t}),i=this.wrap("pre",this.wrap("code",e),a);return this.addRaw(i).addEOL()}addList(e,t=!1){let a=e.map(e=>this.wrap("li",e)).join(""),i=this.wrap(t?"ol":"ul",a);return this.addRaw(i).addEOL()}addTable(e){let t=e.map(e=>{let t=e.map(e=>{if("string"==typeof e)return this.wrap("td",e);let{header:t,data:a,colspan:i,rowspan:n}=e,o=Object.assign(Object.assign({},i&&{colspan:i}),n&&{rowspan:n});return this.wrap(t?"th":"td",a,o)}).join("");return this.wrap("tr",t)}).join(""),a=this.wrap("table",t);return this.addRaw(a).addEOL()}addDetails(e,t){let a=this.wrap("details",this.wrap("summary",e)+t);return this.addRaw(a).addEOL()}addImage(e,t,a){let{width:i,height:n}=a||{},o=Object.assign(Object.assign({},i&&{width:i}),n&&{height:n}),s=this.wrap("img",null,Object.assign({src:e,alt:t},o));return this.addRaw(s).addEOL()}addHeading(e,t){let a=`h${t}`,i=["h1","h2","h3","h4","h5","h6"].includes(a)?a:"h1",n=this.wrap(i,e);return this.addRaw(n).addEOL()}addSeparator(){let e=this.wrap("hr",null);return this.addRaw(e).addEOL()}addBreak(){let e=this.wrap("br",null);return this.addRaw(e).addEOL()}addQuote(e,t){let a=Object.assign({},t&&{cite:t}),i=this.wrap("blockquote",e,a);return this.addRaw(i).addEOL()}addLink(e,t){let a=this.wrap("a",e,{href:t});return this.addRaw(a).addEOL()}};eB.markdownSummary=eV,eB.summary=eV,Object.defineProperty(L,"summary",{enumerable:!0,get:function(){return eB.summary}}),Object.defineProperty(L,"markdownSummary",{enumerable:!0,get:function(){return eB.markdownSummary}});var eT={},eE=eT&&eT.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[a]}})}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),eN=eT&&eT.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),eW=eT&&eT.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.hasOwnProperty.call(e,a)&&eE(t,e,a);return eN(t,e),t};Object.defineProperty(eT,"__esModule",{value:!0}),eT.toPlatformPath=eT.toWin32Path=eT.toPosixPath=void 0;const ek=eW(A);eT.toPosixPath=function(e){return e.replace(/[\\]/g,"/")},eT.toWin32Path=function(e){return e.replace(/[/]/g,"\\")},eT.toPlatformPath=function(e){return e.replace(/[/\\]/g,ek.sep)},Object.defineProperty(L,"toPosixPath",{enumerable:!0,get:function(){return eT.toPosixPath}}),Object.defineProperty(L,"toWin32Path",{enumerable:!0,get:function(){return eT.toWin32Path}}),Object.defineProperty(L,"toPlatformPath",{enumerable:!0,get:function(){return eT.toPlatformPath}});var eH={},eF=eH&&eH.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[a]}})}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),eU=eH&&eH.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),eY=eH&&eH.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.hasOwnProperty.call(e,a)&&eF(t,e,a);return eU(t,e),t};Object.defineProperty(eH,"__esModule",{value:!0}),eH.getOctokit=eH.context=void 0;const eX=eY(X("gQjas"));var eO={},eL=eO&&eO.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[a]}})}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),eD=eO&&eO.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),eK=eO&&eO.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.hasOwnProperty.call(e,a)&&eL(t,e,a);return eD(t,e),t};Object.defineProperty(eO,"__esModule",{value:!0}),eO.getOctokitOptions=eO.GitHub=eO.defaults=eO.context=void 0;const eJ=eK(X("gQjas")),ez=eK(X("3qvHp"));function ej(){return"object"==typeof navigator&&"userAgent"in navigator?navigator.userAgent:"object"==typeof process&&"version"in process?`Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`:""}var eP={},eM={};eM=function e(t,a,i,n){if("function"!=typeof i)throw Error("method for before hook must be a function");return(n||(n={}),Array.isArray(a))?a.reverse().reduce(function(a,i){return e.bind(null,t,i,a,n)},i)():Promise.resolve().then(function(){return t.registry[a]?t.registry[a].reduce(function(e,t){return t.hook.bind(null,e,n)},i)():i(n)})};var eQ={};eQ=function(e,t,a,i){var n=i;e.registry[a]||(e.registry[a]=[]),"before"===t&&(i=function(e,t){return Promise.resolve().then(n.bind(null,t)).then(e.bind(null,t))}),"after"===t&&(i=function(e,t){var a;return Promise.resolve().then(e.bind(null,t)).then(function(e){return n(a=e,t)}).then(function(){return a})}),"error"===t&&(i=function(e,t){return Promise.resolve().then(e.bind(null,t)).catch(function(e){return n(e,t)})}),e.registry[a].push({hook:i,orig:n})};var eq={};eq=function(e,t,a){if(e.registry[t]){var i=e.registry[t].map(function(e){return e.orig}).indexOf(a);-1!==i&&e.registry[t].splice(i,1)}};var e$=Function.bind,e1=e$.bind(e$);function e0(e,t,a){var i=e1(eq,null).apply(null,a?[t,a]:[t]);e.api={remove:i},e.remove=i,["before","error","after","wrap"].forEach(function(i){var n=a?[t,i,a]:[t,i];e[i]=e.api[i]=e1(eQ,null).apply(null,n)})}function e2(){var e={registry:{}},t=eM.bind(null,e);return e0(t,e),t}var e4=!1;function e9(){return e4||(console.warn('[before-after-hook]: "Hook()" repurposing warning, use "Hook.Collection()". Read more: https://git.io/upgrade-before-after-hook-to-1.4'),e4=!0),e2()}/*!
* is-plain-object
*
* Copyright (c) 2014-2017, Jon Schlinkert.
* Released under the MIT License.
- */function e6(e){return"[object Object]"===Object.prototype.toString.call(e)}function e3(e){var t,a;return!1!==e6(e)&&(void 0===(t=e.constructor)||!1!==e6(a=t.prototype)&&!1!==a.hasOwnProperty("isPrototypeOf"))}function e5(e){for(let t in e)void 0===e[t]&&delete e[t];return e}function e8(e,t,a){var i;if("string"==typeof t){let[e,i]=t.split(" ");a=Object.assign(i?{method:e,url:i}:{url:e},a)}else a=Object.assign({},t);a.headers=(i=a.headers)?Object.keys(i).reduce((e,t)=>(e[t.toLowerCase()]=i[t],e),{}):{},e5(a),e5(a.headers);let n=function e(t,a){let i=Object.assign({},t);return Object.keys(a).forEach(n=>{e3(a[n])&&n in t?i[n]=e(t[n],a[n]):Object.assign(i,{[n]:a[n]})}),i}(e||{},a);return e&&e.mediaType.previews.length&&(n.mediaType.previews=e.mediaType.previews.filter(e=>!n.mediaType.previews.includes(e)).concat(n.mediaType.previews)),n.mediaType.previews=n.mediaType.previews.map(e=>e.replace(/-preview/,"")),n}e9.Singular=(function(){var e={registry:{}},t=eM.bind(null,e,"h");return e0(t,e,"h"),t}).bind(),e9.Collection=e2.bind(),(eP=e9).Hook=e9,eP.Singular=e9.Singular,eP.Collection=e9.Collection;const e7=/\{[^}]+\}/g;function te(e){return e.replace(/^\W+|\W+$/g,"").split(/,/)}function tt(e,t){return Object.keys(e).filter(e=>!t.includes(e)).reduce((t,a)=>(t[a]=e[a],t),{})}function ta(e){return e.split(/(%[0-9A-Fa-f]{2})/g).map(function(e){return/%[0-9A-Fa-f]/.test(e)||(e=encodeURI(e).replace(/%5B/g,"[").replace(/%5D/g,"]")),e}).join("")}function ti(e){return encodeURIComponent(e).replace(/[!'()*]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function tn(e,t,a){return(t="+"===e||"#"===e?ta(t):ti(t),a)?ti(a)+"="+t:t}function to(e){return null!=e}function ts(e){return";"===e||"&"===e||"?"===e}function tr(e,t){var a=["+","#",".","/",";","?","&"];return e.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g,function(e,i,n){if(!i)return ta(n);{let e="",n=[];if(-1!==a.indexOf(i.charAt(0))&&(e=i.charAt(0),i=i.substr(1)),i.split(/,/g).forEach(function(a){var i=/([^:\*]*)(?::(\d+)|(\*))?/.exec(a);n.push(function(e,t,a,i){var n=e[a],o=[];if(to(n)&&""!==n){if("string"==typeof n||"number"==typeof n||"boolean"==typeof n)n=n.toString(),i&&"*"!==i&&(n=n.substring(0,parseInt(i,10))),o.push(tn(t,n,ts(t)?a:""));else if("*"===i)Array.isArray(n)?n.filter(to).forEach(function(e){o.push(tn(t,e,ts(t)?a:""))}):Object.keys(n).forEach(function(e){to(n[e])&&o.push(tn(t,n[e],e))});else{let e=[];Array.isArray(n)?n.filter(to).forEach(function(a){e.push(tn(t,a))}):Object.keys(n).forEach(function(a){to(n[a])&&(e.push(ti(a)),e.push(tn(t,n[a].toString())))}),ts(t)?o.push(ti(a)+"="+e.join(",")):0!==e.length&&o.push(e.join(","))}}else";"===t?to(n)&&o.push(ti(a)):""===n&&("&"===t||"?"===t)?o.push(ti(a)+"="):""===n&&o.push("");return o}(t,e,i[1],i[2]||i[3]))}),!e||"+"===e)return n.join(",");var o=",";return"?"===e?o="&":"#"!==e&&(o=e),(0!==n.length?e:"")+n.join(o)}})}function tp(e){let t,a=e.method.toUpperCase(),i=(e.url||"/").replace(/:([a-z]\w+)/g,"{$1}"),n=Object.assign({},e.headers),o=tt(e,["method","baseUrl","url","headers","request","mediaType"]),s=function(e){let t=e.match(e7);return t?t.map(te).reduce((e,t)=>e.concat(t),[]):[]}(i);i=({expand:tr.bind(null,i)}).expand(o),/^http/.test(i)||(i=e.baseUrl+i);let r=tt(o,Object.keys(e).filter(e=>s.includes(e)).concat("baseUrl"));if(!/application\/octet-stream/i.test(n.accept)&&(e.mediaType.format&&(n.accept=n.accept.split(/,/).map(t=>t.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/,`application/vnd$1$2.${e.mediaType.format}`)).join(",")),e.mediaType.previews.length)){let t=n.accept.match(/[\w-]+(?=-preview)/g)||[];n.accept=t.concat(e.mediaType.previews).map(t=>{let a=e.mediaType.format?`.${e.mediaType.format}`:"+json";return`application/vnd.github.${t}-preview${a}`}).join(",")}return["GET","HEAD"].includes(a)?i=function(e,t){let a=/\?/.test(e)?"&":"?",i=Object.keys(t);return 0===i.length?e:e+a+i.map(e=>"q"===e?"q="+t.q.split("+").map(encodeURIComponent).join("+"):`${e}=${encodeURIComponent(t[e])}`).join("&")}(i,r):"data"in r?t=r.data:Object.keys(r).length?t=r:n["content-length"]=0,n["content-type"]||void 0===t||(n["content-type"]="application/json; charset=utf-8"),["PATCH","PUT"].includes(a)&&void 0===t&&(t=""),Object.assign({method:a,url:i,headers:n},void 0!==t?{body:t}:null,e.request?{request:e.request}:null)}function tl(e,t,a){return tp(e8(e,t,a))}const td=function e(t,a){let i=e8(t,a);return Object.assign(tl.bind(null,i),{DEFAULTS:i,defaults:e.bind(null,i),merge:e8.bind(null,i),parse:tp})}(null,{method:"GET",baseUrl:"https://api.github.com",headers:{accept:"application/vnd.github.v3+json","user-agent":`octokit-endpoint.js/6.0.12 ${ej()}`},mediaType:{format:"",previews:[]}});var tc={};W(tc,"URL",()=>o,e=>o=e),W(tc,"serializeURL",()=>s,e=>s=e),W(tc,"serializeURLOrigin",()=>r,e=>r=e),W(tc,"basicURLParse",()=>p,e=>p=e),W(tc,"setTheUsername",()=>l,e=>l=e),W(tc,"setThePassword",()=>d,e=>d=e),W(tc,"serializeHost",()=>c,e=>c=e),W(tc,"serializeInteger",()=>u,e=>u=e),W(tc,"parseURL",()=>m,e=>m=e),o=O("8w5ng").interface,s=O("8hbL0").serializeURL,r=O("8hbL0").serializeURLOrigin,p=O("8hbL0").basicURLParse,l=O("8hbL0").setTheUsername,d=O("8hbL0").setThePassword,c=O("8hbL0").serializeHost,u=O("8hbL0").serializeInteger,m=O("8hbL0").parseURL;const tu=F(S).Readable,tm=Symbol("buffer"),tg=Symbol("type");class th{constructor(){this[tg]="";let e=arguments[0],t=arguments[1],a=[];if(e){let t=Number(e.length);for(let i=0;i1&&void 0!==arguments[1]?arguments[1]:{},i=a.size,n=a.timeout;null==e?e=null:ty(e)?e=Buffer.from(e.toString()):tw(e)||Buffer.isBuffer(e)||("[object ArrayBuffer]"===Object.prototype.toString.call(e)?e=Buffer.from(e):ArrayBuffer.isView(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):e instanceof F(S)||(e=Buffer.from(String(e)))),this[tf]={body:e,disturbed:!1,error:null},this.size=void 0===i?0:i,this.timeout=void 0===n?0:n,e instanceof F(S)&&e.on("error",function(e){let a="AbortError"===e.name?e:new tb(`Invalid response body while trying to fetch ${t.url}: ${e.message}`,"system",e);t[tf].error=a})}function tC(){var e=this;if(this[tf].disturbed)return tI.Promise.reject(TypeError(`body used already for: ${this.url}`));if(this[tf].disturbed=!0,this[tf].error)return tI.Promise.reject(this[tf].error);let t=this.body;if(null===t)return tI.Promise.resolve(Buffer.alloc(0));if(tw(t)&&(t=t.stream()),Buffer.isBuffer(t))return tI.Promise.resolve(t);if(!(t instanceof F(S)))return tI.Promise.resolve(Buffer.alloc(0));let a=[],i=0,n=!1;return new tI.Promise(function(o,s){let r;e.timeout&&(r=setTimeout(function(){n=!0,s(new tb(`Response timeout while trying to fetch ${e.url} (over ${e.timeout}ms)`,"body-timeout"))},e.timeout)),t.on("error",function(t){"AbortError"===t.name?(n=!0,s(t)):s(new tb(`Invalid response body while trying to fetch ${e.url}: ${t.message}`,"system",t))}),t.on("data",function(t){if(!n&&null!==t){if(e.size&&i+t.length>e.size){n=!0,s(new tb(`content size at ${e.url} over limit: ${e.size}`,"max-size"));return}i+=t.length,a.push(t)}}),t.on("end",function(){if(!n){clearTimeout(r);try{o(Buffer.concat(a,i))}catch(t){s(new tb(`Could not create Buffer from response body for ${e.url}: ${t.message}`,"system",t))}}})})}function ty(e){return"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&("URLSearchParams"===e.constructor.name||"[object URLSearchParams]"===Object.prototype.toString.call(e)||"function"==typeof e.sort)}function tw(e){return"object"==typeof e&&"function"==typeof e.arrayBuffer&&"string"==typeof e.type&&"function"==typeof e.stream&&"function"==typeof e.constructor&&"string"==typeof e.constructor.name&&/^(Blob|File)$/.test(e.constructor.name)&&/^(Blob|File)$/.test(e[Symbol.toStringTag])}function tx(e){let t,a;let i=e.body;if(e.bodyUsed)throw Error("cannot clone body after it is used");return i instanceof F(S)&&"function"!=typeof i.getBoundary&&(t=new tv,a=new tv,i.pipe(t),i.pipe(a),e[tf].body=t,i=a),i}function tA(e){if(null===e)return null;if("string"==typeof e)return"text/plain;charset=UTF-8";if(ty(e))return"application/x-www-form-urlencoded;charset=UTF-8";if(tw(e))return e.type||null;if(Buffer.isBuffer(e))return null;if("[object ArrayBuffer]"===Object.prototype.toString.call(e))return null;if(ArrayBuffer.isView(e))return null;else if("function"==typeof e.getBoundary)return`multipart/form-data;boundary=${e.getBoundary()}`;else if(e instanceof F(S))return null;else return"text/plain;charset=UTF-8"}function tG(e){let t=e.body;return null===t?0:tw(t)?t.size:Buffer.isBuffer(t)?t.length:t&&"function"==typeof t.getLengthSync&&(t._lengthRetrievers&&0==t._lengthRetrievers.length||t.hasKnownLength&&t.hasKnownLength())?t.getLengthSync():null}tI.prototype={get body(){return this[tf].body},get bodyUsed(){return this[tf].disturbed},arrayBuffer(){return tC.call(this).then(function(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)})},blob(){let e=this.headers&&this.headers.get("content-type")||"";return tC.call(this).then(function(t){return Object.assign(new th([],{type:e.toLowerCase()}),{[tm]:t})})},json(){var e=this;return tC.call(this).then(function(t){try{return JSON.parse(t.toString())}catch(t){return tI.Promise.reject(new tb(`invalid json response body at ${e.url} reason: ${t.message}`,"invalid-json"))}})},text(){return tC.call(this).then(function(e){return e.toString()})},buffer(){return tC.call(this)},textConverted(){var t=this;return tC.call(this).then(function(a){return function(t,a){let i,n;if("function"!=typeof e)throw Error("The package `encoding` must be installed to use the textConverted() function");let o=a.get("content-type"),s="utf-8";return o&&(i=/charset=([^;]*)/i.exec(o)),n=t.slice(0,1024).toString(),!i&&n&&(i=/0&&void 0!==arguments[0]?arguments[0]:void 0;if(this[tR]=Object.create(null),e instanceof tV){let t=e.raw();for(let e of Object.keys(t))for(let a of t[e])this.append(e,a);return}if(null==e);else if("object"==typeof e){let t=e[Symbol.iterator];if(null!=t){if("function"!=typeof t)throw TypeError("Header pairs must be iterable");let a=[];for(let t of e){if("object"!=typeof t||"function"!=typeof t[Symbol.iterator])throw TypeError("Each header pair must be iterable");a.push(Array.from(t))}for(let e of a){if(2!==e.length)throw TypeError("Each header pair must be a name/value tuple");this.append(e[0],e[1])}}else for(let t of Object.keys(e)){let a=e[t];this.append(t,a)}}else throw TypeError("Provided initializer must be an object")}get(e){tZ(e=`${e}`);let t=tT(this[tR],e);return void 0===t?null:this[tR][t].join(", ")}forEach(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,a=tE(this),i=0;for(;i1&&void 0!==arguments[1]?arguments[1]:"key+value";return Object.keys(e[tR]).sort().map("key"===t?function(e){return e.toLowerCase()}:"value"===t?function(t){return e[tR][t].join(", ")}:function(t){return[t.toLowerCase(),e[tR][t].join(", ")]})}tV.prototype.entries=tV.prototype[Symbol.iterator],Object.defineProperty(tV.prototype,Symbol.toStringTag,{value:"Headers",writable:!1,enumerable:!1,configurable:!0}),Object.defineProperties(tV.prototype,{get:{enumerable:!0},forEach:{enumerable:!0},set:{enumerable:!0},append:{enumerable:!0},has:{enumerable:!0},delete:{enumerable:!0},keys:{enumerable:!0},values:{enumerable:!0},entries:{enumerable:!0}});const tN=Symbol("internal");function tW(e,t){let a=Object.create(tk);return a[tN]={target:e,kind:t,index:0},a}const tk=Object.setPrototypeOf({next(){if(!this||Object.getPrototypeOf(this)!==tk)throw TypeError("Value of `this` is not a HeadersIterator");var e=this[tN];let t=e.target,a=e.kind,i=e.index,n=tE(t,a);return i>=n.length?{value:void 0,done:!0}:(this[tN].index=i+1,{value:n[i],done:!1})}},Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));Object.defineProperty(tk,Symbol.toStringTag,{value:"HeadersIterator",writable:!1,enumerable:!1,configurable:!0});const tH=Symbol("Response internals"),tF=F(g).STATUS_CODES;class tU{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};tI.call(this,e,t);let a=t.status||200,i=new tV(t.headers);if(null!=e&&!i.has("Content-Type")){let t=tA(e);t&&i.append("Content-Type",t)}this[tH]={url:t.url,status:a,statusText:t.statusText||tF[a],headers:i,counter:t.counter}}get url(){return this[tH].url||""}get status(){return this[tH].status}get ok(){return this[tH].status>=200&&this[tH].status<300}get redirected(){return this[tH].counter>0}get statusText(){return this[tH].statusText}get headers(){return this[tH].headers}clone(){return new tU(tx(this),{url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected})}}tI.mixIn(tU.prototype),Object.defineProperties(tU.prototype,{url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}}),Object.defineProperty(tU.prototype,Symbol.toStringTag,{value:"Response",writable:!1,enumerable:!1,configurable:!0});const tY=Symbol("Request internals"),tO=F(G).URL||F(tc).URL,tX=F(G).parse,tL=F(G).format;function tD(e){return/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(e)&&(e=new tO(e).toString()),tX(e)}const tK="destroy"in F(S).Readable.prototype;function tJ(e){return"object"==typeof e&&"object"==typeof e[tY]}class tz{constructor(e){let t,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};tJ(e)?t=tD(e.url):(t=e&&e.href?tD(e.href):tD(`${e}`),e={});let i=a.method||e.method||"GET";if(i=i.toUpperCase(),(null!=a.body||tJ(e)&&null!==e.body)&&("GET"===i||"HEAD"===i))throw TypeError("Request with GET/HEAD method cannot have body");let n=null!=a.body?a.body:tJ(e)&&null!==e.body?tx(e):null;tI.call(this,n,{timeout:a.timeout||e.timeout||0,size:a.size||e.size||0});let o=new tV(a.headers||e.headers||{});if(null!=n&&!o.has("Content-Type")){let e=tA(n);e&&o.append("Content-Type",e)}let s=tJ(e)?e.signal:null;if("signal"in a&&(s=a.signal),null!=s&&!function(e){let t=e&&"object"==typeof e&&Object.getPrototypeOf(e);return!!(t&&"AbortSignal"===t.constructor.name)}(s))throw TypeError("Expected signal to be an instanceof AbortSignal");this[tY]={method:i,redirect:a.redirect||e.redirect||"follow",headers:o,parsedURL:t,signal:s},this.follow=void 0!==a.follow?a.follow:void 0!==e.follow?e.follow:20,this.compress=void 0!==a.compress?a.compress:void 0===e.compress||e.compress,this.counter=a.counter||e.counter||0,this.agent=a.agent||e.agent}get method(){return this[tY].method}get url(){return tL(this[tY].parsedURL)}get headers(){return this[tY].headers}get redirect(){return this[tY].redirect}get signal(){return this[tY].signal}clone(){return new tz(this)}}function tj(e){Error.call(this,e),this.type="aborted",this.message=e,Error.captureStackTrace(this,this.constructor)}tI.mixIn(tz.prototype),Object.defineProperty(tz.prototype,Symbol.toStringTag,{value:"Request",writable:!1,enumerable:!1,configurable:!0}),Object.defineProperties(tz.prototype,{method:{enumerable:!0},url:{enumerable:!0},headers:{enumerable:!0},redirect:{enumerable:!0},clone:{enumerable:!0},signal:{enumerable:!0}}),tj.prototype=Object.create(Error.prototype),tj.prototype.constructor=tj,tj.prototype.name="AbortError";const tP=F(G).URL||F(tc).URL,tM=F(S).PassThrough,tQ=function(e,t){let a=new tP(t).hostname,i=new tP(e).hostname;return a===i||"."===a[a.length-i.length-1]&&a.endsWith(i)};function tq(e,t){if(!tq.Promise)throw Error("native promise missing, set fetch.Promise to your favorite alternative");return tI.Promise=tq.Promise,new tq.Promise(function(a,i){let n;let o=new tz(e,t),s=function(e){let t=e[tY].parsedURL,a=new tV(e[tY].headers);if(a.has("Accept")||a.set("Accept","*/*"),!t.protocol||!t.hostname)throw TypeError("Only absolute URLs are supported");if(!/^https?:$/.test(t.protocol))throw TypeError("Only HTTP(S) protocols are supported");if(e.signal&&e.body instanceof F(S).Readable&&!tK)throw Error("Cancellation of streamed requests with AbortSignal is not supported in node < 8");let i=null;if(null==e.body&&/^(POST|PUT)$/i.test(e.method)&&(i="0"),null!=e.body){let t=tG(e);"number"==typeof t&&(i=String(t))}i&&a.set("Content-Length",i),a.has("User-Agent")||a.set("User-Agent","node-fetch/1.0 (+https://github.com/bitinn/node-fetch)"),e.compress&&!a.has("Accept-Encoding")&&a.set("Accept-Encoding","gzip,deflate");let n=e.agent;return"function"==typeof n&&(n=n(t)),a.has("Connection")||n||a.set("Connection","close"),Object.assign({},t,{method:e.method,headers:function(e){let t=Object.assign({__proto__:null},e[tR]),a=tT(e[tR],"Host");return void 0!==a&&(t[a]=t[a][0]),t}(a),agent:n})}(o),r=("https:"===s.protocol?F(h):F(g)).request,p=o.signal,l=null,d=function(){let e=new tj("The user aborted a request.");i(e),o.body&&o.body instanceof F(S).Readable&&o.body.destroy(e),l&&l.body&&l.body.emit("error",e)};if(p&&p.aborted){d();return}let c=function(){d(),m()},u=r(s);function m(){u.abort(),p&&p.removeEventListener("abort",c),clearTimeout(n)}p&&p.addEventListener("abort",c),o.timeout&&u.once("socket",function(e){n=setTimeout(function(){i(new tb(`network timeout at: ${o.url}`,"request-timeout")),m()},o.timeout)}),u.on("error",function(e){i(new tb(`request to ${o.url} failed, reason: ${e.message}`,"system",e)),m()}),u.on("response",function(e){clearTimeout(n);let t=function(e){let t=new tV;for(let a of Object.keys(e))if(!tS.test(a)){if(Array.isArray(e[a]))for(let i of e[a])tB.test(i)||(void 0===t[tR][a]?t[tR][a]=[i]:t[tR][a].push(i));else tB.test(e[a])||(t[tR][a]=[e[a]])}return t}(e.headers);if(tq.isRedirect(e.statusCode)){let n=t.get("Location"),s=null;try{s=null===n?null:new tP(n,o.url).toString()}catch(e){if("manual"!==o.redirect){i(new tb(`uri requested responds with an invalid redirect URL: ${n}`,"invalid-redirect")),m();return}}switch(o.redirect){case"error":i(new tb(`uri requested responds with a redirect, redirect mode is set to error: ${o.url}`,"no-redirect")),m();return;case"manual":if(null!==s)try{t.set("Location",s)}catch(e){i(e)}break;case"follow":if(null===s)break;if(o.counter>=o.follow){i(new tb(`maximum redirect reached at: ${o.url}`,"max-redirect")),m();return}let r={headers:new tV(o.headers),follow:o.follow,counter:o.counter+1,agent:o.agent,compress:o.compress,method:o.method,body:o.body,signal:o.signal,timeout:o.timeout,size:o.size};if(!tQ(o.url,s))for(let e of["authorization","www-authenticate","cookie","cookie2"])r.headers.delete(e);if(303!==e.statusCode&&o.body&&null===tG(o)){i(new tb("Cannot follow redirect with body being a readable stream","unsupported-redirect")),m();return}(303===e.statusCode||(301===e.statusCode||302===e.statusCode)&&"POST"===o.method)&&(r.method="GET",r.body=void 0,r.headers.delete("content-length")),a(tq(new tz(s,r))),m();return}}e.once("end",function(){p&&p.removeEventListener("abort",c)});let s=e.pipe(new tM),r={url:o.url,status:e.statusCode,statusText:e.statusMessage,headers:t,size:o.size,timeout:o.timeout,counter:o.counter},d=t.get("Content-Encoding");if(!o.compress||"HEAD"===o.method||null===d||204===e.statusCode||304===e.statusCode){a(l=new tU(s,r));return}let u={flush:F(B).Z_SYNC_FLUSH,finishFlush:F(B).Z_SYNC_FLUSH};if("gzip"==d||"x-gzip"==d){a(l=new tU(s=s.pipe(F(B).createGunzip(u)),r));return}if("deflate"==d||"x-deflate"==d){e.pipe(new tM).once("data",function(e){a(l=new tU(s=(15&e[0])==8?s.pipe(F(B).createInflate()):s.pipe(F(B).createInflateRaw()),r))});return}if("br"==d&&"function"==typeof F(B).createBrotliDecompress){a(l=new tU(s=s.pipe(F(B).createBrotliDecompress()),r));return}a(l=new tU(s,r))}),function(e,t){let a=t.body;null===a?e.end():tw(a)?a.stream().pipe(e):Buffer.isBuffer(a)?(e.write(a),e.end()):a.pipe(e)}(u,o)})}tq.isRedirect=function(e){return 301===e||302===e||303===e||307===e||308===e},tq.Promise=H.Promise;class t$ extends Error{constructor(e){super(e),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.name="Deprecation"}}var t1={},t0={};function t2(e){var t=function(){return t.called?t.value:(t.called=!0,t.value=e.apply(this,arguments))};return t.called=!1,t}function t4(e){var t=function(){if(t.called)throw Error(t.onceError);return t.called=!0,t.value=e.apply(this,arguments)},a=e.name||"Function wrapped with `once`";return t.onceError=a+" shouldn't be called more than once",t.called=!1,t}(t1=(t0=function e(t,a){if(t&&a)return e(t)(a);if("function"!=typeof t)throw TypeError("need wrapper function");return Object.keys(t).forEach(function(e){i[e]=t[e]}),i;function i(){for(var e=Array(arguments.length),a=0;aconsole.warn(e)),t6=F(t1)(e=>console.warn(e));class t3 extends Error{constructor(e,t,a){let i;super(e),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.name="HttpError",this.status=t,"headers"in a&&void 0!==a.headers&&(i=a.headers),"response"in a&&(this.response=a.response,i=a.response.headers);let n=Object.assign({},a.request);a.request.headers.authorization&&(n.headers=Object.assign({},a.request.headers,{authorization:a.request.headers.authorization.replace(/ .*$/," [REDACTED]")})),n.url=n.url.replace(/\bclient_secret=\w+/g,"client_secret=[REDACTED]").replace(/\baccess_token=\w+/g,"access_token=[REDACTED]"),this.request=n,Object.defineProperty(this,"code",{get:()=>(t9(new t$("[@octokit/request-error] `error.code` is deprecated, use `error.status`.")),t)}),Object.defineProperty(this,"headers",{get:()=>(t6(new t$("[@octokit/request-error] `error.headers` is deprecated, use `error.response.headers`.")),i||{})})}}function t5(e){let t,a;let i=e.request&&e.request.log?e.request.log:console;(e3(e.body)||Array.isArray(e.body))&&(e.body=JSON.stringify(e.body));let n={};return(e.request&&e.request.fetch||tq)(e.url,Object.assign({method:e.method,body:e.body,headers:e.headers,redirect:e.redirect},e.request)).then(async o=>{for(let e of(a=o.url,t=o.status,o.headers))n[e[0]]=e[1];if("deprecation"in n){let t=n.link&&n.link.match(/<([^>]+)>; rel="deprecation"/),a=t&&t.pop();i.warn(`[@octokit/request] "${e.method} ${e.url}" is deprecated. It is scheduled to be removed on ${n.sunset}${a?`. See ${a}`:""}`)}if(204!==t&&205!==t){if("HEAD"===e.method){if(t<400)return;throw new t3(o.statusText,t,{response:{url:a,status:t,headers:n,data:void 0},request:e})}if(304===t)throw new t3("Not modified",t,{response:{url:a,status:t,headers:n,data:await t8(o)},request:e});if(t>=400){let i=await t8(o);throw new t3("string"==typeof i?i:"message"in i?Array.isArray(i.errors)?`${i.message}: ${i.errors.map(JSON.stringify).join(", ")}`:i.message:`Unknown error: ${JSON.stringify(i)}`,t,{response:{url:a,status:t,headers:n,data:i},request:e})}return t8(o)}}).then(e=>({status:t,url:a,headers:n,data:e})).catch(t=>{if(t instanceof t3)throw t;throw new t3(t.message,500,{request:e})})}async function t8(e){let t=e.headers.get("content-type");return/application\/json/.test(t)?e.json():!t||/^text\/|charset=utf-8$/.test(t)?e.text():e.arrayBuffer()}const t7=function e(t,a){let i=t.defaults(a);return Object.assign(function(t,a){let n=i.merge(t,a);if(!n.request||!n.request.hook)return t5(i.parse(n));let o=(e,t)=>t5(i.parse(i.merge(e,t)));return Object.assign(o,{endpoint:i,defaults:e.bind(null,i)}),n.request.hook(o,n)},{endpoint:i,defaults:e.bind(null,i)})}(td,{headers:{"user-agent":`octokit-request.js/5.6.3 ${ej()}`}});class ae extends Error{constructor(e,t,a){super(`Request failed due to following response errors:
-`+a.errors.map(e=>` - ${e.message}`).join("\n")),this.request=e,this.headers=t,this.response=a,this.name="GraphqlResponseError",this.errors=a.errors,this.data=a.data,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}}const at=["method","baseUrl","url","headers","request","query","mediaType"],aa=["query","method","url"],ai=/\/api\/v3\/?$/;function an(e,t){let a=e.defaults(t);return Object.assign((e,t)=>(function(e,t,a){if(a){if("string"==typeof t&&"query"in a)return Promise.reject(Error('[@octokit/graphql] "query" cannot be used as variable name'));for(let e in a)if(aa.includes(e))return Promise.reject(Error(`[@octokit/graphql] "${e}" cannot be used as variable name`))}let i="string"==typeof t?Object.assign({query:t},a):t,n=Object.keys(i).reduce((e,t)=>(at.includes(t)?e[t]=i[t]:(e.variables||(e.variables={}),e.variables[t]=i[t]),e),{}),o=i.baseUrl||e.endpoint.DEFAULTS.baseUrl;return ai.test(o)&&(n.url=o.replace(ai,"/api/graphql")),e(n).then(e=>{if(e.data.errors){let t={};for(let a of Object.keys(e.headers))t[a]=e.headers[a];throw new ae(n,t,e.data)}return e.data.data})})(a,e,t),{defaults:an.bind(null,a),endpoint:t7.endpoint})}an(t7,{headers:{"user-agent":`octokit-graphql.js/4.8.0 ${ej()}`},method:"POST",url:"/graphql"});const ao=/^v1\./,as=/^ghs_/,ar=/^ghu_/;async function ap(e){let t=3===e.split(/\./).length,a=ao.test(e)||as.test(e),i=ar.test(e);return{type:"token",token:e,tokenType:t?"app":a?"installation":i?"user-to-server":"oauth"}}async function al(e,t,a,i){let n=t.endpoint.merge(a,i);return n.headers.authorization=3===e.split(/\./).length?`bearer ${e}`:`token ${e}`,t(n)}const ad=function(e){if(!e)throw Error("[@octokit/auth-token] No token passed to createTokenAuth");if("string"!=typeof e)throw Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");return e=e.replace(/^(token|bearer) +/i,""),Object.assign(ap.bind(null,e),{hook:al.bind(null,e)})},ac="3.6.0";class au{constructor(e={}){let t=new eP.Collection,a={baseUrl:t7.endpoint.DEFAULTS.baseUrl,headers:{},request:Object.assign({},e.request,{hook:t.bind(null,"request")}),mediaType:{previews:[],format:""}};if(a.headers["user-agent"]=[e.userAgent,`octokit-core.js/${ac} ${ej()}`].filter(Boolean).join(" "),e.baseUrl&&(a.baseUrl=e.baseUrl),e.previews&&(a.mediaType.previews=e.previews),e.timeZone&&(a.headers["time-zone"]=e.timeZone),this.request=t7.defaults(a),this.graphql=an(this.request,{method:"POST",url:"/graphql"}).defaults(a),this.log=Object.assign({debug:()=>{},info:()=>{},warn:console.warn.bind(console),error:console.error.bind(console)},e.log),this.hook=t,e.authStrategy){let{authStrategy:a,...i}=e,n=a(Object.assign({request:this.request,log:this.log,octokit:this,octokitOptions:i},e.auth));t.wrap("request",n.hook),this.auth=n}else if(e.auth){let a=ad(e.auth);t.wrap("request",a.hook),this.auth=a}else this.auth=async()=>({type:"unauthenticated"});this.constructor.plugins.forEach(t=>{Object.assign(this,t(this,e))})}static defaults(e){return class extends this{constructor(...t){let a=t[0]||{};if("function"==typeof e){super(e(a));return}super(Object.assign({},e,a,a.userAgent&&e.userAgent?{userAgent:`${a.userAgent} ${e.userAgent}`}:null))}}}static plugin(...e){var t;let a=this.plugins;return(t=class extends this{}).plugins=a.concat(e.filter(e=>!a.includes(e))),t}}au.VERSION=ac,au.plugins=[];const am={actions:{addCustomLabelsToSelfHostedRunnerForOrg:["POST /orgs/{org}/actions/runners/{runner_id}/labels"],addCustomLabelsToSelfHostedRunnerForRepo:["POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],addSelectedRepoToOrgSecret:["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"],approveWorkflowRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve"],cancelWorkflowRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel"],createOrUpdateEnvironmentSecret:["PUT /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"],createOrUpdateOrgSecret:["PUT /orgs/{org}/actions/secrets/{secret_name}"],createOrUpdateRepoSecret:["PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}"],createRegistrationTokenForOrg:["POST /orgs/{org}/actions/runners/registration-token"],createRegistrationTokenForRepo:["POST /repos/{owner}/{repo}/actions/runners/registration-token"],createRemoveTokenForOrg:["POST /orgs/{org}/actions/runners/remove-token"],createRemoveTokenForRepo:["POST /repos/{owner}/{repo}/actions/runners/remove-token"],createWorkflowDispatch:["POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches"],deleteActionsCacheById:["DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}"],deleteActionsCacheByKey:["DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}"],deleteArtifact:["DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],deleteEnvironmentSecret:["DELETE /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"],deleteOrgSecret:["DELETE /orgs/{org}/actions/secrets/{secret_name}"],deleteRepoSecret:["DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}"],deleteSelfHostedRunnerFromOrg:["DELETE /orgs/{org}/actions/runners/{runner_id}"],deleteSelfHostedRunnerFromRepo:["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}"],deleteWorkflowRun:["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}"],deleteWorkflowRunLogs:["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs"],disableSelectedRepositoryGithubActionsOrganization:["DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}"],disableWorkflow:["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable"],downloadArtifact:["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}"],downloadJobLogsForWorkflowRun:["GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs"],downloadWorkflowRunAttemptLogs:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs"],downloadWorkflowRunLogs:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs"],enableSelectedRepositoryGithubActionsOrganization:["PUT /orgs/{org}/actions/permissions/repositories/{repository_id}"],enableWorkflow:["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable"],getActionsCacheList:["GET /repos/{owner}/{repo}/actions/caches"],getActionsCacheUsage:["GET /repos/{owner}/{repo}/actions/cache/usage"],getActionsCacheUsageByRepoForOrg:["GET /orgs/{org}/actions/cache/usage-by-repository"],getActionsCacheUsageForEnterprise:["GET /enterprises/{enterprise}/actions/cache/usage"],getActionsCacheUsageForOrg:["GET /orgs/{org}/actions/cache/usage"],getAllowedActionsOrganization:["GET /orgs/{org}/actions/permissions/selected-actions"],getAllowedActionsRepository:["GET /repos/{owner}/{repo}/actions/permissions/selected-actions"],getArtifact:["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],getEnvironmentPublicKey:["GET /repositories/{repository_id}/environments/{environment_name}/secrets/public-key"],getEnvironmentSecret:["GET /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"],getGithubActionsDefaultWorkflowPermissionsEnterprise:["GET /enterprises/{enterprise}/actions/permissions/workflow"],getGithubActionsDefaultWorkflowPermissionsOrganization:["GET /orgs/{org}/actions/permissions/workflow"],getGithubActionsDefaultWorkflowPermissionsRepository:["GET /repos/{owner}/{repo}/actions/permissions/workflow"],getGithubActionsPermissionsOrganization:["GET /orgs/{org}/actions/permissions"],getGithubActionsPermissionsRepository:["GET /repos/{owner}/{repo}/actions/permissions"],getJobForWorkflowRun:["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"],getOrgPublicKey:["GET /orgs/{org}/actions/secrets/public-key"],getOrgSecret:["GET /orgs/{org}/actions/secrets/{secret_name}"],getPendingDeploymentsForRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"],getRepoPermissions:["GET /repos/{owner}/{repo}/actions/permissions",{},{renamed:["actions","getGithubActionsPermissionsRepository"]}],getRepoPublicKey:["GET /repos/{owner}/{repo}/actions/secrets/public-key"],getRepoSecret:["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}"],getReviewsForRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals"],getSelfHostedRunnerForOrg:["GET /orgs/{org}/actions/runners/{runner_id}"],getSelfHostedRunnerForRepo:["GET /repos/{owner}/{repo}/actions/runners/{runner_id}"],getWorkflow:["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"],getWorkflowAccessToRepository:["GET /repos/{owner}/{repo}/actions/permissions/access"],getWorkflowRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}"],getWorkflowRunAttempt:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}"],getWorkflowRunUsage:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing"],getWorkflowUsage:["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing"],listArtifactsForRepo:["GET /repos/{owner}/{repo}/actions/artifacts"],listEnvironmentSecrets:["GET /repositories/{repository_id}/environments/{environment_name}/secrets"],listJobsForWorkflowRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs"],listJobsForWorkflowRunAttempt:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs"],listLabelsForSelfHostedRunnerForOrg:["GET /orgs/{org}/actions/runners/{runner_id}/labels"],listLabelsForSelfHostedRunnerForRepo:["GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],listOrgSecrets:["GET /orgs/{org}/actions/secrets"],listRepoSecrets:["GET /repos/{owner}/{repo}/actions/secrets"],listRepoWorkflows:["GET /repos/{owner}/{repo}/actions/workflows"],listRunnerApplicationsForOrg:["GET /orgs/{org}/actions/runners/downloads"],listRunnerApplicationsForRepo:["GET /repos/{owner}/{repo}/actions/runners/downloads"],listSelectedReposForOrgSecret:["GET /orgs/{org}/actions/secrets/{secret_name}/repositories"],listSelectedRepositoriesEnabledGithubActionsOrganization:["GET /orgs/{org}/actions/permissions/repositories"],listSelfHostedRunnersForOrg:["GET /orgs/{org}/actions/runners"],listSelfHostedRunnersForRepo:["GET /repos/{owner}/{repo}/actions/runners"],listWorkflowRunArtifacts:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts"],listWorkflowRuns:["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs"],listWorkflowRunsForRepo:["GET /repos/{owner}/{repo}/actions/runs"],reRunJobForWorkflowRun:["POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun"],reRunWorkflow:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"],reRunWorkflowFailedJobs:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs"],removeAllCustomLabelsFromSelfHostedRunnerForOrg:["DELETE /orgs/{org}/actions/runners/{runner_id}/labels"],removeAllCustomLabelsFromSelfHostedRunnerForRepo:["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],removeCustomLabelFromSelfHostedRunnerForOrg:["DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}"],removeCustomLabelFromSelfHostedRunnerForRepo:["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}"],removeSelectedRepoFromOrgSecret:["DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"],reviewPendingDeploymentsForRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"],setAllowedActionsOrganization:["PUT /orgs/{org}/actions/permissions/selected-actions"],setAllowedActionsRepository:["PUT /repos/{owner}/{repo}/actions/permissions/selected-actions"],setCustomLabelsForSelfHostedRunnerForOrg:["PUT /orgs/{org}/actions/runners/{runner_id}/labels"],setCustomLabelsForSelfHostedRunnerForRepo:["PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],setGithubActionsDefaultWorkflowPermissionsEnterprise:["PUT /enterprises/{enterprise}/actions/permissions/workflow"],setGithubActionsDefaultWorkflowPermissionsOrganization:["PUT /orgs/{org}/actions/permissions/workflow"],setGithubActionsDefaultWorkflowPermissionsRepository:["PUT /repos/{owner}/{repo}/actions/permissions/workflow"],setGithubActionsPermissionsOrganization:["PUT /orgs/{org}/actions/permissions"],setGithubActionsPermissionsRepository:["PUT /repos/{owner}/{repo}/actions/permissions"],setSelectedReposForOrgSecret:["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories"],setSelectedRepositoriesEnabledGithubActionsOrganization:["PUT /orgs/{org}/actions/permissions/repositories"],setWorkflowAccessToRepository:["PUT /repos/{owner}/{repo}/actions/permissions/access"]},activity:{checkRepoIsStarredByAuthenticatedUser:["GET /user/starred/{owner}/{repo}"],deleteRepoSubscription:["DELETE /repos/{owner}/{repo}/subscription"],deleteThreadSubscription:["DELETE /notifications/threads/{thread_id}/subscription"],getFeeds:["GET /feeds"],getRepoSubscription:["GET /repos/{owner}/{repo}/subscription"],getThread:["GET /notifications/threads/{thread_id}"],getThreadSubscriptionForAuthenticatedUser:["GET /notifications/threads/{thread_id}/subscription"],listEventsForAuthenticatedUser:["GET /users/{username}/events"],listNotificationsForAuthenticatedUser:["GET /notifications"],listOrgEventsForAuthenticatedUser:["GET /users/{username}/events/orgs/{org}"],listPublicEvents:["GET /events"],listPublicEventsForRepoNetwork:["GET /networks/{owner}/{repo}/events"],listPublicEventsForUser:["GET /users/{username}/events/public"],listPublicOrgEvents:["GET /orgs/{org}/events"],listReceivedEventsForUser:["GET /users/{username}/received_events"],listReceivedPublicEventsForUser:["GET /users/{username}/received_events/public"],listRepoEvents:["GET /repos/{owner}/{repo}/events"],listRepoNotificationsForAuthenticatedUser:["GET /repos/{owner}/{repo}/notifications"],listReposStarredByAuthenticatedUser:["GET /user/starred"],listReposStarredByUser:["GET /users/{username}/starred"],listReposWatchedByUser:["GET /users/{username}/subscriptions"],listStargazersForRepo:["GET /repos/{owner}/{repo}/stargazers"],listWatchedReposForAuthenticatedUser:["GET /user/subscriptions"],listWatchersForRepo:["GET /repos/{owner}/{repo}/subscribers"],markNotificationsAsRead:["PUT /notifications"],markRepoNotificationsAsRead:["PUT /repos/{owner}/{repo}/notifications"],markThreadAsRead:["PATCH /notifications/threads/{thread_id}"],setRepoSubscription:["PUT /repos/{owner}/{repo}/subscription"],setThreadSubscription:["PUT /notifications/threads/{thread_id}/subscription"],starRepoForAuthenticatedUser:["PUT /user/starred/{owner}/{repo}"],unstarRepoForAuthenticatedUser:["DELETE /user/starred/{owner}/{repo}"]},apps:{addRepoToInstallation:["PUT /user/installations/{installation_id}/repositories/{repository_id}",{},{renamed:["apps","addRepoToInstallationForAuthenticatedUser"]}],addRepoToInstallationForAuthenticatedUser:["PUT /user/installations/{installation_id}/repositories/{repository_id}"],checkToken:["POST /applications/{client_id}/token"],createFromManifest:["POST /app-manifests/{code}/conversions"],createInstallationAccessToken:["POST /app/installations/{installation_id}/access_tokens"],deleteAuthorization:["DELETE /applications/{client_id}/grant"],deleteInstallation:["DELETE /app/installations/{installation_id}"],deleteToken:["DELETE /applications/{client_id}/token"],getAuthenticated:["GET /app"],getBySlug:["GET /apps/{app_slug}"],getInstallation:["GET /app/installations/{installation_id}"],getOrgInstallation:["GET /orgs/{org}/installation"],getRepoInstallation:["GET /repos/{owner}/{repo}/installation"],getSubscriptionPlanForAccount:["GET /marketplace_listing/accounts/{account_id}"],getSubscriptionPlanForAccountStubbed:["GET /marketplace_listing/stubbed/accounts/{account_id}"],getUserInstallation:["GET /users/{username}/installation"],getWebhookConfigForApp:["GET /app/hook/config"],getWebhookDelivery:["GET /app/hook/deliveries/{delivery_id}"],listAccountsForPlan:["GET /marketplace_listing/plans/{plan_id}/accounts"],listAccountsForPlanStubbed:["GET /marketplace_listing/stubbed/plans/{plan_id}/accounts"],listInstallationReposForAuthenticatedUser:["GET /user/installations/{installation_id}/repositories"],listInstallations:["GET /app/installations"],listInstallationsForAuthenticatedUser:["GET /user/installations"],listPlans:["GET /marketplace_listing/plans"],listPlansStubbed:["GET /marketplace_listing/stubbed/plans"],listReposAccessibleToInstallation:["GET /installation/repositories"],listSubscriptionsForAuthenticatedUser:["GET /user/marketplace_purchases"],listSubscriptionsForAuthenticatedUserStubbed:["GET /user/marketplace_purchases/stubbed"],listWebhookDeliveries:["GET /app/hook/deliveries"],redeliverWebhookDelivery:["POST /app/hook/deliveries/{delivery_id}/attempts"],removeRepoFromInstallation:["DELETE /user/installations/{installation_id}/repositories/{repository_id}",{},{renamed:["apps","removeRepoFromInstallationForAuthenticatedUser"]}],removeRepoFromInstallationForAuthenticatedUser:["DELETE /user/installations/{installation_id}/repositories/{repository_id}"],resetToken:["PATCH /applications/{client_id}/token"],revokeInstallationAccessToken:["DELETE /installation/token"],scopeToken:["POST /applications/{client_id}/token/scoped"],suspendInstallation:["PUT /app/installations/{installation_id}/suspended"],unsuspendInstallation:["DELETE /app/installations/{installation_id}/suspended"],updateWebhookConfigForApp:["PATCH /app/hook/config"]},billing:{getGithubActionsBillingOrg:["GET /orgs/{org}/settings/billing/actions"],getGithubActionsBillingUser:["GET /users/{username}/settings/billing/actions"],getGithubAdvancedSecurityBillingGhe:["GET /enterprises/{enterprise}/settings/billing/advanced-security"],getGithubAdvancedSecurityBillingOrg:["GET /orgs/{org}/settings/billing/advanced-security"],getGithubPackagesBillingOrg:["GET /orgs/{org}/settings/billing/packages"],getGithubPackagesBillingUser:["GET /users/{username}/settings/billing/packages"],getSharedStorageBillingOrg:["GET /orgs/{org}/settings/billing/shared-storage"],getSharedStorageBillingUser:["GET /users/{username}/settings/billing/shared-storage"]},checks:{create:["POST /repos/{owner}/{repo}/check-runs"],createSuite:["POST /repos/{owner}/{repo}/check-suites"],get:["GET /repos/{owner}/{repo}/check-runs/{check_run_id}"],getSuite:["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}"],listAnnotations:["GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations"],listForRef:["GET /repos/{owner}/{repo}/commits/{ref}/check-runs"],listForSuite:["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs"],listSuitesForRef:["GET /repos/{owner}/{repo}/commits/{ref}/check-suites"],rerequestRun:["POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest"],rerequestSuite:["POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest"],setSuitesPreferences:["PATCH /repos/{owner}/{repo}/check-suites/preferences"],update:["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}"]},codeScanning:{deleteAnalysis:["DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}"],getAlert:["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}",{},{renamedParameters:{alert_id:"alert_number"}}],getAnalysis:["GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}"],getSarif:["GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}"],listAlertInstances:["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances"],listAlertsForOrg:["GET /orgs/{org}/code-scanning/alerts"],listAlertsForRepo:["GET /repos/{owner}/{repo}/code-scanning/alerts"],listAlertsInstances:["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances",{},{renamed:["codeScanning","listAlertInstances"]}],listRecentAnalyses:["GET /repos/{owner}/{repo}/code-scanning/analyses"],updateAlert:["PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}"],uploadSarif:["POST /repos/{owner}/{repo}/code-scanning/sarifs"]},codesOfConduct:{getAllCodesOfConduct:["GET /codes_of_conduct"],getConductCode:["GET /codes_of_conduct/{key}"]},codespaces:{addRepositoryForSecretForAuthenticatedUser:["PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"],codespaceMachinesForAuthenticatedUser:["GET /user/codespaces/{codespace_name}/machines"],createForAuthenticatedUser:["POST /user/codespaces"],createOrUpdateRepoSecret:["PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"],createOrUpdateSecretForAuthenticatedUser:["PUT /user/codespaces/secrets/{secret_name}"],createWithPrForAuthenticatedUser:["POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces"],createWithRepoForAuthenticatedUser:["POST /repos/{owner}/{repo}/codespaces"],deleteForAuthenticatedUser:["DELETE /user/codespaces/{codespace_name}"],deleteFromOrganization:["DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}"],deleteRepoSecret:["DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"],deleteSecretForAuthenticatedUser:["DELETE /user/codespaces/secrets/{secret_name}"],exportForAuthenticatedUser:["POST /user/codespaces/{codespace_name}/exports"],getExportDetailsForAuthenticatedUser:["GET /user/codespaces/{codespace_name}/exports/{export_id}"],getForAuthenticatedUser:["GET /user/codespaces/{codespace_name}"],getPublicKeyForAuthenticatedUser:["GET /user/codespaces/secrets/public-key"],getRepoPublicKey:["GET /repos/{owner}/{repo}/codespaces/secrets/public-key"],getRepoSecret:["GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"],getSecretForAuthenticatedUser:["GET /user/codespaces/secrets/{secret_name}"],listDevcontainersInRepositoryForAuthenticatedUser:["GET /repos/{owner}/{repo}/codespaces/devcontainers"],listForAuthenticatedUser:["GET /user/codespaces"],listInOrganization:["GET /orgs/{org}/codespaces",{},{renamedParameters:{org_id:"org"}}],listInRepositoryForAuthenticatedUser:["GET /repos/{owner}/{repo}/codespaces"],listRepoSecrets:["GET /repos/{owner}/{repo}/codespaces/secrets"],listRepositoriesForSecretForAuthenticatedUser:["GET /user/codespaces/secrets/{secret_name}/repositories"],listSecretsForAuthenticatedUser:["GET /user/codespaces/secrets"],removeRepositoryForSecretForAuthenticatedUser:["DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"],repoMachinesForAuthenticatedUser:["GET /repos/{owner}/{repo}/codespaces/machines"],setRepositoriesForSecretForAuthenticatedUser:["PUT /user/codespaces/secrets/{secret_name}/repositories"],startForAuthenticatedUser:["POST /user/codespaces/{codespace_name}/start"],stopForAuthenticatedUser:["POST /user/codespaces/{codespace_name}/stop"],stopInOrganization:["POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop"],updateForAuthenticatedUser:["PATCH /user/codespaces/{codespace_name}"]},dependabot:{addSelectedRepoToOrgSecret:["PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"],createOrUpdateOrgSecret:["PUT /orgs/{org}/dependabot/secrets/{secret_name}"],createOrUpdateRepoSecret:["PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"],deleteOrgSecret:["DELETE /orgs/{org}/dependabot/secrets/{secret_name}"],deleteRepoSecret:["DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"],getOrgPublicKey:["GET /orgs/{org}/dependabot/secrets/public-key"],getOrgSecret:["GET /orgs/{org}/dependabot/secrets/{secret_name}"],getRepoPublicKey:["GET /repos/{owner}/{repo}/dependabot/secrets/public-key"],getRepoSecret:["GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"],listOrgSecrets:["GET /orgs/{org}/dependabot/secrets"],listRepoSecrets:["GET /repos/{owner}/{repo}/dependabot/secrets"],listSelectedReposForOrgSecret:["GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories"],removeSelectedRepoFromOrgSecret:["DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"],setSelectedReposForOrgSecret:["PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories"]},dependencyGraph:{createRepositorySnapshot:["POST /repos/{owner}/{repo}/dependency-graph/snapshots"],diffRange:["GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}"]},emojis:{get:["GET /emojis"]},enterpriseAdmin:{addCustomLabelsToSelfHostedRunnerForEnterprise:["POST /enterprises/{enterprise}/actions/runners/{runner_id}/labels"],disableSelectedOrganizationGithubActionsEnterprise:["DELETE /enterprises/{enterprise}/actions/permissions/organizations/{org_id}"],enableSelectedOrganizationGithubActionsEnterprise:["PUT /enterprises/{enterprise}/actions/permissions/organizations/{org_id}"],getAllowedActionsEnterprise:["GET /enterprises/{enterprise}/actions/permissions/selected-actions"],getGithubActionsPermissionsEnterprise:["GET /enterprises/{enterprise}/actions/permissions"],getServerStatistics:["GET /enterprise-installation/{enterprise_or_org}/server-statistics"],listLabelsForSelfHostedRunnerForEnterprise:["GET /enterprises/{enterprise}/actions/runners/{runner_id}/labels"],listSelectedOrganizationsEnabledGithubActionsEnterprise:["GET /enterprises/{enterprise}/actions/permissions/organizations"],removeAllCustomLabelsFromSelfHostedRunnerForEnterprise:["DELETE /enterprises/{enterprise}/actions/runners/{runner_id}/labels"],removeCustomLabelFromSelfHostedRunnerForEnterprise:["DELETE /enterprises/{enterprise}/actions/runners/{runner_id}/labels/{name}"],setAllowedActionsEnterprise:["PUT /enterprises/{enterprise}/actions/permissions/selected-actions"],setCustomLabelsForSelfHostedRunnerForEnterprise:["PUT /enterprises/{enterprise}/actions/runners/{runner_id}/labels"],setGithubActionsPermissionsEnterprise:["PUT /enterprises/{enterprise}/actions/permissions"],setSelectedOrganizationsEnabledGithubActionsEnterprise:["PUT /enterprises/{enterprise}/actions/permissions/organizations"]},gists:{checkIsStarred:["GET /gists/{gist_id}/star"],create:["POST /gists"],createComment:["POST /gists/{gist_id}/comments"],delete:["DELETE /gists/{gist_id}"],deleteComment:["DELETE /gists/{gist_id}/comments/{comment_id}"],fork:["POST /gists/{gist_id}/forks"],get:["GET /gists/{gist_id}"],getComment:["GET /gists/{gist_id}/comments/{comment_id}"],getRevision:["GET /gists/{gist_id}/{sha}"],list:["GET /gists"],listComments:["GET /gists/{gist_id}/comments"],listCommits:["GET /gists/{gist_id}/commits"],listForUser:["GET /users/{username}/gists"],listForks:["GET /gists/{gist_id}/forks"],listPublic:["GET /gists/public"],listStarred:["GET /gists/starred"],star:["PUT /gists/{gist_id}/star"],unstar:["DELETE /gists/{gist_id}/star"],update:["PATCH /gists/{gist_id}"],updateComment:["PATCH /gists/{gist_id}/comments/{comment_id}"]},git:{createBlob:["POST /repos/{owner}/{repo}/git/blobs"],createCommit:["POST /repos/{owner}/{repo}/git/commits"],createRef:["POST /repos/{owner}/{repo}/git/refs"],createTag:["POST /repos/{owner}/{repo}/git/tags"],createTree:["POST /repos/{owner}/{repo}/git/trees"],deleteRef:["DELETE /repos/{owner}/{repo}/git/refs/{ref}"],getBlob:["GET /repos/{owner}/{repo}/git/blobs/{file_sha}"],getCommit:["GET /repos/{owner}/{repo}/git/commits/{commit_sha}"],getRef:["GET /repos/{owner}/{repo}/git/ref/{ref}"],getTag:["GET /repos/{owner}/{repo}/git/tags/{tag_sha}"],getTree:["GET /repos/{owner}/{repo}/git/trees/{tree_sha}"],listMatchingRefs:["GET /repos/{owner}/{repo}/git/matching-refs/{ref}"],updateRef:["PATCH /repos/{owner}/{repo}/git/refs/{ref}"]},gitignore:{getAllTemplates:["GET /gitignore/templates"],getTemplate:["GET /gitignore/templates/{name}"]},interactions:{getRestrictionsForAuthenticatedUser:["GET /user/interaction-limits"],getRestrictionsForOrg:["GET /orgs/{org}/interaction-limits"],getRestrictionsForRepo:["GET /repos/{owner}/{repo}/interaction-limits"],getRestrictionsForYourPublicRepos:["GET /user/interaction-limits",{},{renamed:["interactions","getRestrictionsForAuthenticatedUser"]}],removeRestrictionsForAuthenticatedUser:["DELETE /user/interaction-limits"],removeRestrictionsForOrg:["DELETE /orgs/{org}/interaction-limits"],removeRestrictionsForRepo:["DELETE /repos/{owner}/{repo}/interaction-limits"],removeRestrictionsForYourPublicRepos:["DELETE /user/interaction-limits",{},{renamed:["interactions","removeRestrictionsForAuthenticatedUser"]}],setRestrictionsForAuthenticatedUser:["PUT /user/interaction-limits"],setRestrictionsForOrg:["PUT /orgs/{org}/interaction-limits"],setRestrictionsForRepo:["PUT /repos/{owner}/{repo}/interaction-limits"],setRestrictionsForYourPublicRepos:["PUT /user/interaction-limits",{},{renamed:["interactions","setRestrictionsForAuthenticatedUser"]}]},issues:{addAssignees:["POST /repos/{owner}/{repo}/issues/{issue_number}/assignees"],addLabels:["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"],checkUserCanBeAssigned:["GET /repos/{owner}/{repo}/assignees/{assignee}"],create:["POST /repos/{owner}/{repo}/issues"],createComment:["POST /repos/{owner}/{repo}/issues/{issue_number}/comments"],createLabel:["POST /repos/{owner}/{repo}/labels"],createMilestone:["POST /repos/{owner}/{repo}/milestones"],deleteComment:["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}"],deleteLabel:["DELETE /repos/{owner}/{repo}/labels/{name}"],deleteMilestone:["DELETE /repos/{owner}/{repo}/milestones/{milestone_number}"],get:["GET /repos/{owner}/{repo}/issues/{issue_number}"],getComment:["GET /repos/{owner}/{repo}/issues/comments/{comment_id}"],getEvent:["GET /repos/{owner}/{repo}/issues/events/{event_id}"],getLabel:["GET /repos/{owner}/{repo}/labels/{name}"],getMilestone:["GET /repos/{owner}/{repo}/milestones/{milestone_number}"],list:["GET /issues"],listAssignees:["GET /repos/{owner}/{repo}/assignees"],listComments:["GET /repos/{owner}/{repo}/issues/{issue_number}/comments"],listCommentsForRepo:["GET /repos/{owner}/{repo}/issues/comments"],listEvents:["GET /repos/{owner}/{repo}/issues/{issue_number}/events"],listEventsForRepo:["GET /repos/{owner}/{repo}/issues/events"],listEventsForTimeline:["GET /repos/{owner}/{repo}/issues/{issue_number}/timeline"],listForAuthenticatedUser:["GET /user/issues"],listForOrg:["GET /orgs/{org}/issues"],listForRepo:["GET /repos/{owner}/{repo}/issues"],listLabelsForMilestone:["GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels"],listLabelsForRepo:["GET /repos/{owner}/{repo}/labels"],listLabelsOnIssue:["GET /repos/{owner}/{repo}/issues/{issue_number}/labels"],listMilestones:["GET /repos/{owner}/{repo}/milestones"],lock:["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"],removeAllLabels:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels"],removeAssignees:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees"],removeLabel:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}"],setLabels:["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"],unlock:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"],update:["PATCH /repos/{owner}/{repo}/issues/{issue_number}"],updateComment:["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"],updateLabel:["PATCH /repos/{owner}/{repo}/labels/{name}"],updateMilestone:["PATCH /repos/{owner}/{repo}/milestones/{milestone_number}"]},licenses:{get:["GET /licenses/{license}"],getAllCommonlyUsed:["GET /licenses"],getForRepo:["GET /repos/{owner}/{repo}/license"]},markdown:{render:["POST /markdown"],renderRaw:["POST /markdown/raw",{headers:{"content-type":"text/plain; charset=utf-8"}}]},meta:{get:["GET /meta"],getOctocat:["GET /octocat"],getZen:["GET /zen"],root:["GET /"]},migrations:{cancelImport:["DELETE /repos/{owner}/{repo}/import"],deleteArchiveForAuthenticatedUser:["DELETE /user/migrations/{migration_id}/archive"],deleteArchiveForOrg:["DELETE /orgs/{org}/migrations/{migration_id}/archive"],downloadArchiveForOrg:["GET /orgs/{org}/migrations/{migration_id}/archive"],getArchiveForAuthenticatedUser:["GET /user/migrations/{migration_id}/archive"],getCommitAuthors:["GET /repos/{owner}/{repo}/import/authors"],getImportStatus:["GET /repos/{owner}/{repo}/import"],getLargeFiles:["GET /repos/{owner}/{repo}/import/large_files"],getStatusForAuthenticatedUser:["GET /user/migrations/{migration_id}"],getStatusForOrg:["GET /orgs/{org}/migrations/{migration_id}"],listForAuthenticatedUser:["GET /user/migrations"],listForOrg:["GET /orgs/{org}/migrations"],listReposForAuthenticatedUser:["GET /user/migrations/{migration_id}/repositories"],listReposForOrg:["GET /orgs/{org}/migrations/{migration_id}/repositories"],listReposForUser:["GET /user/migrations/{migration_id}/repositories",{},{renamed:["migrations","listReposForAuthenticatedUser"]}],mapCommitAuthor:["PATCH /repos/{owner}/{repo}/import/authors/{author_id}"],setLfsPreference:["PATCH /repos/{owner}/{repo}/import/lfs"],startForAuthenticatedUser:["POST /user/migrations"],startForOrg:["POST /orgs/{org}/migrations"],startImport:["PUT /repos/{owner}/{repo}/import"],unlockRepoForAuthenticatedUser:["DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock"],unlockRepoForOrg:["DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock"],updateImport:["PATCH /repos/{owner}/{repo}/import"]},orgs:{blockUser:["PUT /orgs/{org}/blocks/{username}"],cancelInvitation:["DELETE /orgs/{org}/invitations/{invitation_id}"],checkBlockedUser:["GET /orgs/{org}/blocks/{username}"],checkMembershipForUser:["GET /orgs/{org}/members/{username}"],checkPublicMembershipForUser:["GET /orgs/{org}/public_members/{username}"],convertMemberToOutsideCollaborator:["PUT /orgs/{org}/outside_collaborators/{username}"],createInvitation:["POST /orgs/{org}/invitations"],createWebhook:["POST /orgs/{org}/hooks"],deleteWebhook:["DELETE /orgs/{org}/hooks/{hook_id}"],get:["GET /orgs/{org}"],getMembershipForAuthenticatedUser:["GET /user/memberships/orgs/{org}"],getMembershipForUser:["GET /orgs/{org}/memberships/{username}"],getWebhook:["GET /orgs/{org}/hooks/{hook_id}"],getWebhookConfigForOrg:["GET /orgs/{org}/hooks/{hook_id}/config"],getWebhookDelivery:["GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}"],list:["GET /organizations"],listAppInstallations:["GET /orgs/{org}/installations"],listBlockedUsers:["GET /orgs/{org}/blocks"],listCustomRoles:["GET /organizations/{organization_id}/custom_roles"],listFailedInvitations:["GET /orgs/{org}/failed_invitations"],listForAuthenticatedUser:["GET /user/orgs"],listForUser:["GET /users/{username}/orgs"],listInvitationTeams:["GET /orgs/{org}/invitations/{invitation_id}/teams"],listMembers:["GET /orgs/{org}/members"],listMembershipsForAuthenticatedUser:["GET /user/memberships/orgs"],listOutsideCollaborators:["GET /orgs/{org}/outside_collaborators"],listPendingInvitations:["GET /orgs/{org}/invitations"],listPublicMembers:["GET /orgs/{org}/public_members"],listWebhookDeliveries:["GET /orgs/{org}/hooks/{hook_id}/deliveries"],listWebhooks:["GET /orgs/{org}/hooks"],pingWebhook:["POST /orgs/{org}/hooks/{hook_id}/pings"],redeliverWebhookDelivery:["POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"],removeMember:["DELETE /orgs/{org}/members/{username}"],removeMembershipForUser:["DELETE /orgs/{org}/memberships/{username}"],removeOutsideCollaborator:["DELETE /orgs/{org}/outside_collaborators/{username}"],removePublicMembershipForAuthenticatedUser:["DELETE /orgs/{org}/public_members/{username}"],setMembershipForUser:["PUT /orgs/{org}/memberships/{username}"],setPublicMembershipForAuthenticatedUser:["PUT /orgs/{org}/public_members/{username}"],unblockUser:["DELETE /orgs/{org}/blocks/{username}"],update:["PATCH /orgs/{org}"],updateMembershipForAuthenticatedUser:["PATCH /user/memberships/orgs/{org}"],updateWebhook:["PATCH /orgs/{org}/hooks/{hook_id}"],updateWebhookConfigForOrg:["PATCH /orgs/{org}/hooks/{hook_id}/config"]},packages:{deletePackageForAuthenticatedUser:["DELETE /user/packages/{package_type}/{package_name}"],deletePackageForOrg:["DELETE /orgs/{org}/packages/{package_type}/{package_name}"],deletePackageForUser:["DELETE /users/{username}/packages/{package_type}/{package_name}"],deletePackageVersionForAuthenticatedUser:["DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}"],deletePackageVersionForOrg:["DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"],deletePackageVersionForUser:["DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"],getAllPackageVersionsForAPackageOwnedByAnOrg:["GET /orgs/{org}/packages/{package_type}/{package_name}/versions",{},{renamed:["packages","getAllPackageVersionsForPackageOwnedByOrg"]}],getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser:["GET /user/packages/{package_type}/{package_name}/versions",{},{renamed:["packages","getAllPackageVersionsForPackageOwnedByAuthenticatedUser"]}],getAllPackageVersionsForPackageOwnedByAuthenticatedUser:["GET /user/packages/{package_type}/{package_name}/versions"],getAllPackageVersionsForPackageOwnedByOrg:["GET /orgs/{org}/packages/{package_type}/{package_name}/versions"],getAllPackageVersionsForPackageOwnedByUser:["GET /users/{username}/packages/{package_type}/{package_name}/versions"],getPackageForAuthenticatedUser:["GET /user/packages/{package_type}/{package_name}"],getPackageForOrganization:["GET /orgs/{org}/packages/{package_type}/{package_name}"],getPackageForUser:["GET /users/{username}/packages/{package_type}/{package_name}"],getPackageVersionForAuthenticatedUser:["GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}"],getPackageVersionForOrganization:["GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"],getPackageVersionForUser:["GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"],listPackagesForAuthenticatedUser:["GET /user/packages"],listPackagesForOrganization:["GET /orgs/{org}/packages"],listPackagesForUser:["GET /users/{username}/packages"],restorePackageForAuthenticatedUser:["POST /user/packages/{package_type}/{package_name}/restore{?token}"],restorePackageForOrg:["POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}"],restorePackageForUser:["POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}"],restorePackageVersionForAuthenticatedUser:["POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"],restorePackageVersionForOrg:["POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"],restorePackageVersionForUser:["POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"]},projects:{addCollaborator:["PUT /projects/{project_id}/collaborators/{username}"],createCard:["POST /projects/columns/{column_id}/cards"],createColumn:["POST /projects/{project_id}/columns"],createForAuthenticatedUser:["POST /user/projects"],createForOrg:["POST /orgs/{org}/projects"],createForRepo:["POST /repos/{owner}/{repo}/projects"],delete:["DELETE /projects/{project_id}"],deleteCard:["DELETE /projects/columns/cards/{card_id}"],deleteColumn:["DELETE /projects/columns/{column_id}"],get:["GET /projects/{project_id}"],getCard:["GET /projects/columns/cards/{card_id}"],getColumn:["GET /projects/columns/{column_id}"],getPermissionForUser:["GET /projects/{project_id}/collaborators/{username}/permission"],listCards:["GET /projects/columns/{column_id}/cards"],listCollaborators:["GET /projects/{project_id}/collaborators"],listColumns:["GET /projects/{project_id}/columns"],listForOrg:["GET /orgs/{org}/projects"],listForRepo:["GET /repos/{owner}/{repo}/projects"],listForUser:["GET /users/{username}/projects"],moveCard:["POST /projects/columns/cards/{card_id}/moves"],moveColumn:["POST /projects/columns/{column_id}/moves"],removeCollaborator:["DELETE /projects/{project_id}/collaborators/{username}"],update:["PATCH /projects/{project_id}"],updateCard:["PATCH /projects/columns/cards/{card_id}"],updateColumn:["PATCH /projects/columns/{column_id}"]},pulls:{checkIfMerged:["GET /repos/{owner}/{repo}/pulls/{pull_number}/merge"],create:["POST /repos/{owner}/{repo}/pulls"],createReplyForReviewComment:["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies"],createReview:["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],createReviewComment:["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments"],deletePendingReview:["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],deleteReviewComment:["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}"],dismissReview:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals"],get:["GET /repos/{owner}/{repo}/pulls/{pull_number}"],getReview:["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],getReviewComment:["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}"],list:["GET /repos/{owner}/{repo}/pulls"],listCommentsForReview:["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments"],listCommits:["GET /repos/{owner}/{repo}/pulls/{pull_number}/commits"],listFiles:["GET /repos/{owner}/{repo}/pulls/{pull_number}/files"],listRequestedReviewers:["GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],listReviewComments:["GET /repos/{owner}/{repo}/pulls/{pull_number}/comments"],listReviewCommentsForRepo:["GET /repos/{owner}/{repo}/pulls/comments"],listReviews:["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],merge:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge"],removeRequestedReviewers:["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],requestReviewers:["POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],submitReview:["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events"],update:["PATCH /repos/{owner}/{repo}/pulls/{pull_number}"],updateBranch:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch"],updateReview:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],updateReviewComment:["PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}"]},rateLimit:{get:["GET /rate_limit"]},reactions:{createForCommitComment:["POST /repos/{owner}/{repo}/comments/{comment_id}/reactions"],createForIssue:["POST /repos/{owner}/{repo}/issues/{issue_number}/reactions"],createForIssueComment:["POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"],createForPullRequestReviewComment:["POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"],createForRelease:["POST /repos/{owner}/{repo}/releases/{release_id}/reactions"],createForTeamDiscussionCommentInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"],createForTeamDiscussionInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"],deleteForCommitComment:["DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}"],deleteForIssue:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}"],deleteForIssueComment:["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}"],deleteForPullRequestComment:["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}"],deleteForRelease:["DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}"],deleteForTeamDiscussion:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}"],deleteForTeamDiscussionComment:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}"],listForCommitComment:["GET /repos/{owner}/{repo}/comments/{comment_id}/reactions"],listForIssue:["GET /repos/{owner}/{repo}/issues/{issue_number}/reactions"],listForIssueComment:["GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"],listForPullRequestReviewComment:["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"],listForRelease:["GET /repos/{owner}/{repo}/releases/{release_id}/reactions"],listForTeamDiscussionCommentInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"],listForTeamDiscussionInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"]},repos:{acceptInvitation:["PATCH /user/repository_invitations/{invitation_id}",{},{renamed:["repos","acceptInvitationForAuthenticatedUser"]}],acceptInvitationForAuthenticatedUser:["PATCH /user/repository_invitations/{invitation_id}"],addAppAccessRestrictions:["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",{},{mapToData:"apps"}],addCollaborator:["PUT /repos/{owner}/{repo}/collaborators/{username}"],addStatusCheckContexts:["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{mapToData:"contexts"}],addTeamAccessRestrictions:["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",{},{mapToData:"teams"}],addUserAccessRestrictions:["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",{},{mapToData:"users"}],checkCollaborator:["GET /repos/{owner}/{repo}/collaborators/{username}"],checkVulnerabilityAlerts:["GET /repos/{owner}/{repo}/vulnerability-alerts"],codeownersErrors:["GET /repos/{owner}/{repo}/codeowners/errors"],compareCommits:["GET /repos/{owner}/{repo}/compare/{base}...{head}"],compareCommitsWithBasehead:["GET /repos/{owner}/{repo}/compare/{basehead}"],createAutolink:["POST /repos/{owner}/{repo}/autolinks"],createCommitComment:["POST /repos/{owner}/{repo}/commits/{commit_sha}/comments"],createCommitSignatureProtection:["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"],createCommitStatus:["POST /repos/{owner}/{repo}/statuses/{sha}"],createDeployKey:["POST /repos/{owner}/{repo}/keys"],createDeployment:["POST /repos/{owner}/{repo}/deployments"],createDeploymentStatus:["POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"],createDispatchEvent:["POST /repos/{owner}/{repo}/dispatches"],createForAuthenticatedUser:["POST /user/repos"],createFork:["POST /repos/{owner}/{repo}/forks"],createInOrg:["POST /orgs/{org}/repos"],createOrUpdateEnvironment:["PUT /repos/{owner}/{repo}/environments/{environment_name}"],createOrUpdateFileContents:["PUT /repos/{owner}/{repo}/contents/{path}"],createPagesSite:["POST /repos/{owner}/{repo}/pages"],createRelease:["POST /repos/{owner}/{repo}/releases"],createTagProtection:["POST /repos/{owner}/{repo}/tags/protection"],createUsingTemplate:["POST /repos/{template_owner}/{template_repo}/generate"],createWebhook:["POST /repos/{owner}/{repo}/hooks"],declineInvitation:["DELETE /user/repository_invitations/{invitation_id}",{},{renamed:["repos","declineInvitationForAuthenticatedUser"]}],declineInvitationForAuthenticatedUser:["DELETE /user/repository_invitations/{invitation_id}"],delete:["DELETE /repos/{owner}/{repo}"],deleteAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"],deleteAdminBranchProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],deleteAnEnvironment:["DELETE /repos/{owner}/{repo}/environments/{environment_name}"],deleteAutolink:["DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}"],deleteBranchProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection"],deleteCommitComment:["DELETE /repos/{owner}/{repo}/comments/{comment_id}"],deleteCommitSignatureProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"],deleteDeployKey:["DELETE /repos/{owner}/{repo}/keys/{key_id}"],deleteDeployment:["DELETE /repos/{owner}/{repo}/deployments/{deployment_id}"],deleteFile:["DELETE /repos/{owner}/{repo}/contents/{path}"],deleteInvitation:["DELETE /repos/{owner}/{repo}/invitations/{invitation_id}"],deletePagesSite:["DELETE /repos/{owner}/{repo}/pages"],deletePullRequestReviewProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],deleteRelease:["DELETE /repos/{owner}/{repo}/releases/{release_id}"],deleteReleaseAsset:["DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}"],deleteTagProtection:["DELETE /repos/{owner}/{repo}/tags/protection/{tag_protection_id}"],deleteWebhook:["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"],disableAutomatedSecurityFixes:["DELETE /repos/{owner}/{repo}/automated-security-fixes"],disableLfsForRepo:["DELETE /repos/{owner}/{repo}/lfs"],disableVulnerabilityAlerts:["DELETE /repos/{owner}/{repo}/vulnerability-alerts"],downloadArchive:["GET /repos/{owner}/{repo}/zipball/{ref}",{},{renamed:["repos","downloadZipballArchive"]}],downloadTarballArchive:["GET /repos/{owner}/{repo}/tarball/{ref}"],downloadZipballArchive:["GET /repos/{owner}/{repo}/zipball/{ref}"],enableAutomatedSecurityFixes:["PUT /repos/{owner}/{repo}/automated-security-fixes"],enableLfsForRepo:["PUT /repos/{owner}/{repo}/lfs"],enableVulnerabilityAlerts:["PUT /repos/{owner}/{repo}/vulnerability-alerts"],generateReleaseNotes:["POST /repos/{owner}/{repo}/releases/generate-notes"],get:["GET /repos/{owner}/{repo}"],getAccessRestrictions:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"],getAdminBranchProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],getAllEnvironments:["GET /repos/{owner}/{repo}/environments"],getAllStatusCheckContexts:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts"],getAllTopics:["GET /repos/{owner}/{repo}/topics"],getAppsWithAccessToProtectedBranch:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps"],getAutolink:["GET /repos/{owner}/{repo}/autolinks/{autolink_id}"],getBranch:["GET /repos/{owner}/{repo}/branches/{branch}"],getBranchProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection"],getClones:["GET /repos/{owner}/{repo}/traffic/clones"],getCodeFrequencyStats:["GET /repos/{owner}/{repo}/stats/code_frequency"],getCollaboratorPermissionLevel:["GET /repos/{owner}/{repo}/collaborators/{username}/permission"],getCombinedStatusForRef:["GET /repos/{owner}/{repo}/commits/{ref}/status"],getCommit:["GET /repos/{owner}/{repo}/commits/{ref}"],getCommitActivityStats:["GET /repos/{owner}/{repo}/stats/commit_activity"],getCommitComment:["GET /repos/{owner}/{repo}/comments/{comment_id}"],getCommitSignatureProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"],getCommunityProfileMetrics:["GET /repos/{owner}/{repo}/community/profile"],getContent:["GET /repos/{owner}/{repo}/contents/{path}"],getContributorsStats:["GET /repos/{owner}/{repo}/stats/contributors"],getDeployKey:["GET /repos/{owner}/{repo}/keys/{key_id}"],getDeployment:["GET /repos/{owner}/{repo}/deployments/{deployment_id}"],getDeploymentStatus:["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}"],getEnvironment:["GET /repos/{owner}/{repo}/environments/{environment_name}"],getLatestPagesBuild:["GET /repos/{owner}/{repo}/pages/builds/latest"],getLatestRelease:["GET /repos/{owner}/{repo}/releases/latest"],getPages:["GET /repos/{owner}/{repo}/pages"],getPagesBuild:["GET /repos/{owner}/{repo}/pages/builds/{build_id}"],getPagesHealthCheck:["GET /repos/{owner}/{repo}/pages/health"],getParticipationStats:["GET /repos/{owner}/{repo}/stats/participation"],getPullRequestReviewProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],getPunchCardStats:["GET /repos/{owner}/{repo}/stats/punch_card"],getReadme:["GET /repos/{owner}/{repo}/readme"],getReadmeInDirectory:["GET /repos/{owner}/{repo}/readme/{dir}"],getRelease:["GET /repos/{owner}/{repo}/releases/{release_id}"],getReleaseAsset:["GET /repos/{owner}/{repo}/releases/assets/{asset_id}"],getReleaseByTag:["GET /repos/{owner}/{repo}/releases/tags/{tag}"],getStatusChecksProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],getTeamsWithAccessToProtectedBranch:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams"],getTopPaths:["GET /repos/{owner}/{repo}/traffic/popular/paths"],getTopReferrers:["GET /repos/{owner}/{repo}/traffic/popular/referrers"],getUsersWithAccessToProtectedBranch:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users"],getViews:["GET /repos/{owner}/{repo}/traffic/views"],getWebhook:["GET /repos/{owner}/{repo}/hooks/{hook_id}"],getWebhookConfigForRepo:["GET /repos/{owner}/{repo}/hooks/{hook_id}/config"],getWebhookDelivery:["GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}"],listAutolinks:["GET /repos/{owner}/{repo}/autolinks"],listBranches:["GET /repos/{owner}/{repo}/branches"],listBranchesForHeadCommit:["GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head"],listCollaborators:["GET /repos/{owner}/{repo}/collaborators"],listCommentsForCommit:["GET /repos/{owner}/{repo}/commits/{commit_sha}/comments"],listCommitCommentsForRepo:["GET /repos/{owner}/{repo}/comments"],listCommitStatusesForRef:["GET /repos/{owner}/{repo}/commits/{ref}/statuses"],listCommits:["GET /repos/{owner}/{repo}/commits"],listContributors:["GET /repos/{owner}/{repo}/contributors"],listDeployKeys:["GET /repos/{owner}/{repo}/keys"],listDeploymentStatuses:["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"],listDeployments:["GET /repos/{owner}/{repo}/deployments"],listForAuthenticatedUser:["GET /user/repos"],listForOrg:["GET /orgs/{org}/repos"],listForUser:["GET /users/{username}/repos"],listForks:["GET /repos/{owner}/{repo}/forks"],listInvitations:["GET /repos/{owner}/{repo}/invitations"],listInvitationsForAuthenticatedUser:["GET /user/repository_invitations"],listLanguages:["GET /repos/{owner}/{repo}/languages"],listPagesBuilds:["GET /repos/{owner}/{repo}/pages/builds"],listPublic:["GET /repositories"],listPullRequestsAssociatedWithCommit:["GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls"],listReleaseAssets:["GET /repos/{owner}/{repo}/releases/{release_id}/assets"],listReleases:["GET /repos/{owner}/{repo}/releases"],listTagProtection:["GET /repos/{owner}/{repo}/tags/protection"],listTags:["GET /repos/{owner}/{repo}/tags"],listTeams:["GET /repos/{owner}/{repo}/teams"],listWebhookDeliveries:["GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries"],listWebhooks:["GET /repos/{owner}/{repo}/hooks"],merge:["POST /repos/{owner}/{repo}/merges"],mergeUpstream:["POST /repos/{owner}/{repo}/merge-upstream"],pingWebhook:["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"],redeliverWebhookDelivery:["POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"],removeAppAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",{},{mapToData:"apps"}],removeCollaborator:["DELETE /repos/{owner}/{repo}/collaborators/{username}"],removeStatusCheckContexts:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{mapToData:"contexts"}],removeStatusCheckProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],removeTeamAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",{},{mapToData:"teams"}],removeUserAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",{},{mapToData:"users"}],renameBranch:["POST /repos/{owner}/{repo}/branches/{branch}/rename"],replaceAllTopics:["PUT /repos/{owner}/{repo}/topics"],requestPagesBuild:["POST /repos/{owner}/{repo}/pages/builds"],setAdminBranchProtection:["POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],setAppAccessRestrictions:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",{},{mapToData:"apps"}],setStatusCheckContexts:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{mapToData:"contexts"}],setTeamAccessRestrictions:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",{},{mapToData:"teams"}],setUserAccessRestrictions:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",{},{mapToData:"users"}],testPushWebhook:["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests"],transfer:["POST /repos/{owner}/{repo}/transfer"],update:["PATCH /repos/{owner}/{repo}"],updateBranchProtection:["PUT /repos/{owner}/{repo}/branches/{branch}/protection"],updateCommitComment:["PATCH /repos/{owner}/{repo}/comments/{comment_id}"],updateInformationAboutPagesSite:["PUT /repos/{owner}/{repo}/pages"],updateInvitation:["PATCH /repos/{owner}/{repo}/invitations/{invitation_id}"],updatePullRequestReviewProtection:["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],updateRelease:["PATCH /repos/{owner}/{repo}/releases/{release_id}"],updateReleaseAsset:["PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}"],updateStatusCheckPotection:["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks",{},{renamed:["repos","updateStatusCheckProtection"]}],updateStatusCheckProtection:["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],updateWebhook:["PATCH /repos/{owner}/{repo}/hooks/{hook_id}"],updateWebhookConfigForRepo:["PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config"],uploadReleaseAsset:["POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}",{baseUrl:"https://uploads.github.com"}]},search:{code:["GET /search/code"],commits:["GET /search/commits"],issuesAndPullRequests:["GET /search/issues"],labels:["GET /search/labels"],repos:["GET /search/repositories"],topics:["GET /search/topics"],users:["GET /search/users"]},secretScanning:{getAlert:["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"],listAlertsForEnterprise:["GET /enterprises/{enterprise}/secret-scanning/alerts"],listAlertsForOrg:["GET /orgs/{org}/secret-scanning/alerts"],listAlertsForRepo:["GET /repos/{owner}/{repo}/secret-scanning/alerts"],listLocationsForAlert:["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations"],updateAlert:["PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"]},teams:{addOrUpdateMembershipForUserInOrg:["PUT /orgs/{org}/teams/{team_slug}/memberships/{username}"],addOrUpdateProjectPermissionsInOrg:["PUT /orgs/{org}/teams/{team_slug}/projects/{project_id}"],addOrUpdateRepoPermissionsInOrg:["PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],checkPermissionsForProjectInOrg:["GET /orgs/{org}/teams/{team_slug}/projects/{project_id}"],checkPermissionsForRepoInOrg:["GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],create:["POST /orgs/{org}/teams"],createDiscussionCommentInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"],createDiscussionInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions"],deleteDiscussionCommentInOrg:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],deleteDiscussionInOrg:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],deleteInOrg:["DELETE /orgs/{org}/teams/{team_slug}"],getByName:["GET /orgs/{org}/teams/{team_slug}"],getDiscussionCommentInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],getDiscussionInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],getMembershipForUserInOrg:["GET /orgs/{org}/teams/{team_slug}/memberships/{username}"],list:["GET /orgs/{org}/teams"],listChildInOrg:["GET /orgs/{org}/teams/{team_slug}/teams"],listDiscussionCommentsInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"],listDiscussionsInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions"],listForAuthenticatedUser:["GET /user/teams"],listMembersInOrg:["GET /orgs/{org}/teams/{team_slug}/members"],listPendingInvitationsInOrg:["GET /orgs/{org}/teams/{team_slug}/invitations"],listProjectsInOrg:["GET /orgs/{org}/teams/{team_slug}/projects"],listReposInOrg:["GET /orgs/{org}/teams/{team_slug}/repos"],removeMembershipForUserInOrg:["DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}"],removeProjectInOrg:["DELETE /orgs/{org}/teams/{team_slug}/projects/{project_id}"],removeRepoInOrg:["DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],updateDiscussionCommentInOrg:["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],updateDiscussionInOrg:["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],updateInOrg:["PATCH /orgs/{org}/teams/{team_slug}"]},users:{addEmailForAuthenticated:["POST /user/emails",{},{renamed:["users","addEmailForAuthenticatedUser"]}],addEmailForAuthenticatedUser:["POST /user/emails"],block:["PUT /user/blocks/{username}"],checkBlocked:["GET /user/blocks/{username}"],checkFollowingForUser:["GET /users/{username}/following/{target_user}"],checkPersonIsFollowedByAuthenticated:["GET /user/following/{username}"],createGpgKeyForAuthenticated:["POST /user/gpg_keys",{},{renamed:["users","createGpgKeyForAuthenticatedUser"]}],createGpgKeyForAuthenticatedUser:["POST /user/gpg_keys"],createPublicSshKeyForAuthenticated:["POST /user/keys",{},{renamed:["users","createPublicSshKeyForAuthenticatedUser"]}],createPublicSshKeyForAuthenticatedUser:["POST /user/keys"],deleteEmailForAuthenticated:["DELETE /user/emails",{},{renamed:["users","deleteEmailForAuthenticatedUser"]}],deleteEmailForAuthenticatedUser:["DELETE /user/emails"],deleteGpgKeyForAuthenticated:["DELETE /user/gpg_keys/{gpg_key_id}",{},{renamed:["users","deleteGpgKeyForAuthenticatedUser"]}],deleteGpgKeyForAuthenticatedUser:["DELETE /user/gpg_keys/{gpg_key_id}"],deletePublicSshKeyForAuthenticated:["DELETE /user/keys/{key_id}",{},{renamed:["users","deletePublicSshKeyForAuthenticatedUser"]}],deletePublicSshKeyForAuthenticatedUser:["DELETE /user/keys/{key_id}"],follow:["PUT /user/following/{username}"],getAuthenticated:["GET /user"],getByUsername:["GET /users/{username}"],getContextForUser:["GET /users/{username}/hovercard"],getGpgKeyForAuthenticated:["GET /user/gpg_keys/{gpg_key_id}",{},{renamed:["users","getGpgKeyForAuthenticatedUser"]}],getGpgKeyForAuthenticatedUser:["GET /user/gpg_keys/{gpg_key_id}"],getPublicSshKeyForAuthenticated:["GET /user/keys/{key_id}",{},{renamed:["users","getPublicSshKeyForAuthenticatedUser"]}],getPublicSshKeyForAuthenticatedUser:["GET /user/keys/{key_id}"],list:["GET /users"],listBlockedByAuthenticated:["GET /user/blocks",{},{renamed:["users","listBlockedByAuthenticatedUser"]}],listBlockedByAuthenticatedUser:["GET /user/blocks"],listEmailsForAuthenticated:["GET /user/emails",{},{renamed:["users","listEmailsForAuthenticatedUser"]}],listEmailsForAuthenticatedUser:["GET /user/emails"],listFollowedByAuthenticated:["GET /user/following",{},{renamed:["users","listFollowedByAuthenticatedUser"]}],listFollowedByAuthenticatedUser:["GET /user/following"],listFollowersForAuthenticatedUser:["GET /user/followers"],listFollowersForUser:["GET /users/{username}/followers"],listFollowingForUser:["GET /users/{username}/following"],listGpgKeysForAuthenticated:["GET /user/gpg_keys",{},{renamed:["users","listGpgKeysForAuthenticatedUser"]}],listGpgKeysForAuthenticatedUser:["GET /user/gpg_keys"],listGpgKeysForUser:["GET /users/{username}/gpg_keys"],listPublicEmailsForAuthenticated:["GET /user/public_emails",{},{renamed:["users","listPublicEmailsForAuthenticatedUser"]}],listPublicEmailsForAuthenticatedUser:["GET /user/public_emails"],listPublicKeysForUser:["GET /users/{username}/keys"],listPublicSshKeysForAuthenticated:["GET /user/keys",{},{renamed:["users","listPublicSshKeysForAuthenticatedUser"]}],listPublicSshKeysForAuthenticatedUser:["GET /user/keys"],setPrimaryEmailVisibilityForAuthenticated:["PATCH /user/email/visibility",{},{renamed:["users","setPrimaryEmailVisibilityForAuthenticatedUser"]}],setPrimaryEmailVisibilityForAuthenticatedUser:["PATCH /user/email/visibility"],unblock:["DELETE /user/blocks/{username}"],unfollow:["DELETE /user/following/{username}"],updateAuthenticated:["PATCH /user"]}};function ag(e){return{rest:function(e,t){let a={};for(let[i,n]of Object.entries(t))for(let[t,o]of Object.entries(n)){let[n,s,r]=o,[p,l]=n.split(/ /),d=Object.assign({method:p,url:l},s);a[i]||(a[i]={});let c=a[i];if(r){c[t]=function(e,t,a,i,n){let o=e.request.defaults(i);return Object.assign(function(...i){let s=o.endpoint.merge(...i);if(n.mapToData)return o(s=Object.assign({},s,{data:s[n.mapToData],[n.mapToData]:void 0}));if(n.renamed){let[i,o]=n.renamed;e.log.warn(`octokit.${t}.${a}() has been renamed to octokit.${i}.${o}()`)}if(n.deprecated&&e.log.warn(n.deprecated),n.renamedParameters){let s=o.endpoint.merge(...i);for(let[i,o]of Object.entries(n.renamedParameters))i in s&&(e.log.warn(`"${i}" parameter is deprecated for "octokit.${t}.${a}()". Use "${o}" instead`),o in s||(s[o]=s[i]),delete s[i]);return o(s)}return o(...i)},o)}(e,i,t,d,r);continue}c[t]=e.request.defaults(d)}return a}(e,am)}}function ah(e,t,a){let i="function"==typeof t?t.endpoint(a):e.request.endpoint(t,a),n="function"==typeof t?t:e.request,o=i.method,s=i.headers,r=i.url;return{[Symbol.asyncIterator]:()=>({async next(){if(!r)return{done:!0};try{let e=await n({method:o,url:r,headers:s}),t=function(e){if(!e.data)return{...e,data:[]};if(!("total_count"in e.data&&!("url"in e.data)))return e;let t=e.data.incomplete_results,a=e.data.repository_selection,i=e.data.total_count;delete e.data.incomplete_results,delete e.data.repository_selection,delete e.data.total_count;let n=Object.keys(e.data)[0],o=e.data[n];return e.data=o,void 0!==t&&(e.data.incomplete_results=t),void 0!==a&&(e.data.repository_selection=a),e.data.total_count=i,e}(e);return r=((t.headers.link||"").match(/<([^>]+)>;\s*rel="next"/)||[])[1],{value:t}}catch(e){if(409!==e.status)throw e;return r="",{value:{status:200,headers:{},data:[]}}}}})}}function ab(e,t,a,i){return"function"==typeof a&&(i=a,a=void 0),function e(t,a,i,n){return i.next().then(o=>{if(o.done)return a;let s=!1;return(a=a.concat(n?n(o.value,function(){s=!0}):o.value.data),s)?a:e(t,a,i,n)})}(e,[],ah(e,t,a)[Symbol.asyncIterator](),i)}function af(e){return{paginate:Object.assign(ab.bind(null,e),{iterator:ah.bind(null,e)})}}ag.VERSION="5.16.2",Object.assign(ab,{iterator:ah}),af.VERSION="2.21.3",eX.context=new eJ.Context;const av=ez.getApiBaseUrl();eX.defaults={baseUrl:av,request:{agent:ez.getProxyAgent(av)}},eX.GitHub=au.plugin(ag,af).defaults(eX.defaults),eX.getOctokitOptions=function(e,t){let a=Object.assign({},t||{}),i=ez.getAuthString(e,a);return i&&(a.auth=i),a},eH.context=new eO.Context,eH.getOctokit=function(e,t,...a){return new(eX.GitHub.plugin(...a))(eX.getOctokitOptions(e,t))};var aI={};Object.defineProperty(aI,"__esModule",{value:!0}),aI.createClient=aI.getApiToken=aI.IN_PROGRESS_TEST_RUN_STATUS=aI.getLatestTestRunResults=aI.getTestRun=aI.executeSecureTunnelTestRun=aI.postSessionIdNotification=aI.getRecordingCommandId=aI.getRecordedSessionData=aI.getRecordedSession=aI.getReplayV3DownloadUrls=aI.getReplayDownloadUrl=aI.getReplay=aI.getProject=void 0;var aC={},ay=aC&&aC.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(aC,"__esModule",{value:!0}),aC.getProject=void 0;const aw=ay(O("5mM36")),ax=async e=>{let{data:t}=await e.get("projects/token-info").catch(e=>{var t;if(aw.default.isAxiosError(e)&&(null===(t=e.response)||void 0===t?void 0:t.status)===404)return{data:null};throw e});return t};aC.getProject=ax,Object.defineProperty(aI,"getProject",{enumerable:!0,get:function(){return aC.getProject}});var aA={},aG=aA&&aA.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(aA,"__esModule",{value:!0}),aA.getReplayV3DownloadUrls=aA.getReplayDownloadUrl=aA.getReplay=void 0;const aS=aG(O("5mM36")),aB=async(e,t)=>{let{data:a}=await e.get(`replays/${t}`).catch(e=>{var t;if(aS.default.isAxiosError(e)&&(null===(t=e.response)||void 0===t?void 0:t.status)===404)return{data:null};throw e});return a};aA.getReplay=aB;const aZ=async(e,t)=>{let{data:a}=await e.get(`replays/${t}/archive-url`).catch(e=>{var t;if(aS.default.isAxiosError(e)&&(null===(t=e.response)||void 0===t?void 0:t.status)===404)return{data:null};throw e});return a};aA.getReplayDownloadUrl=aZ;const a_=async(e,t)=>{let{data:a}=await e.get(`replays/${t}/download-urls`).catch(e=>{var t;if(aS.default.isAxiosError(e)&&(null===(t=e.response)||void 0===t?void 0:t.status)===404)return{data:null};throw e});return a};aA.getReplayV3DownloadUrls=a_,Object.defineProperty(aI,"getReplay",{enumerable:!0,get:function(){return aA.getReplay}}),Object.defineProperty(aI,"getReplayDownloadUrl",{enumerable:!0,get:function(){return aA.getReplayDownloadUrl}}),Object.defineProperty(aI,"getReplayV3DownloadUrls",{enumerable:!0,get:function(){return aA.getReplayV3DownloadUrls}});var aT={},aR=aT&&aT.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(aT,"__esModule",{value:!0}),aT.postSessionIdNotification=aT.getRecordingCommandId=aT.getRecordedSessionData=aT.getRecordedSession=void 0;const aV=aR(O("5mM36")),aE=async(e,t)=>{let{data:a}=await e.get(`sessions/${t}`).catch(e=>{var t;if(aV.default.isAxiosError(e)&&(null===(t=e.response)||void 0===t?void 0:t.status)===404)return{data:null};throw e});return a};aT.getRecordedSession=aE;const aN=async(e,t)=>{let{data:a}=await e.get(`sessions/${t}/data`).catch(e=>{var t;if(aV.default.isAxiosError(e)&&(null===(t=e.response)||void 0===t?void 0:t.status)===404)return{data:null};throw e});return a};aT.getRecordedSessionData=aN;const aW=async e=>{let{data:t}=await e.post("sessions/start"),{recordingCommandId:a}=t;return a};aT.getRecordingCommandId=aW;const ak=async(e,t,a)=>{await e.post(`sessions/${t}/notify`,{recordingCommandId:a})};aT.postSessionIdNotification=ak,Object.defineProperty(aI,"getRecordedSession",{enumerable:!0,get:function(){return aT.getRecordedSession}}),Object.defineProperty(aI,"getRecordedSessionData",{enumerable:!0,get:function(){return aT.getRecordedSessionData}}),Object.defineProperty(aI,"getRecordingCommandId",{enumerable:!0,get:function(){return aT.getRecordingCommandId}}),Object.defineProperty(aI,"postSessionIdNotification",{enumerable:!0,get:function(){return aT.postSessionIdNotification}});var aH={};Object.defineProperty(aH,"__esModule",{value:!0}),aH.getLatestTestRunResults=aH.getTestRun=aH.executeSecureTunnelTestRun=void 0;var aF=O("5mM36");const aU=async({client:e,headSha:t,tunnelUrl:a,basicAuthUser:i,basicAuthPassword:n,environment:o})=>{let{data:s}=await e.post("test-runs/trigger-secure-tunnel-test-run",{headSha:t,tunnelUrl:a,basicAuthUser:i,basicAuthPassword:n,environment:o}).catch(e=>{var t;if(e instanceof aF.AxiosError&&(null===(t=e.response)||void 0===t?void 0:t.status)===404)return{data:null};throw e});return null!=s?s:null};aH.executeSecureTunnelTestRun=aU;const aY=async({client:e,testRunId:t})=>{let{data:a}=await e.get(`test-runs/${t}`);return a};aH.getTestRun=aY;const aO=async({client:e,commitSha:t,logicalEnvironmentVersion:a,useCloudReplayEnvironmentVersion:i})=>{let{data:n}=await e.get("test-runs/cache",{params:{commitSha:encodeURIComponent(t),...a?{logicalEnvironmentVersion:encodeURIComponent(a)}:{},...i?{useCloudReplayEnvironmentVersion:!0}:{}}}).catch(e=>{var t;if(e instanceof aF.AxiosError&&(null===(t=e.response)||void 0===t?void 0:t.status)===404)return{data:null};throw e});return null!=n?n:null};aH.getLatestTestRunResults=aO,Object.defineProperty(aI,"executeSecureTunnelTestRun",{enumerable:!0,get:function(){return aH.executeSecureTunnelTestRun}}),Object.defineProperty(aI,"getTestRun",{enumerable:!0,get:function(){return aH.getTestRun}}),Object.defineProperty(aI,"getLatestTestRunResults",{enumerable:!0,get:function(){return aH.getLatestTestRunResults}});var aX={};Object.defineProperty(aX,"__esModule",{value:!0}),aX.IN_PROGRESS_TEST_RUN_STATUS=void 0,aX.IN_PROGRESS_TEST_RUN_STATUS=["Scheduled","Running"],Object.defineProperty(aI,"IN_PROGRESS_TEST_RUN_STATUS",{enumerable:!0,get:function(){return aX.IN_PROGRESS_TEST_RUN_STATUS}});var aL={},aD=aL&&aL.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(aL,"__esModule",{value:!0}),aL.getApiToken=void 0;var aK={};Object.defineProperty(aK,"__esModule",{value:!0}),aK.getCommitSha=aK.getMeticulousVersion=aK.IS_METICULOUS_SUPER_USER=aK.COMMON_CHROMIUM_FLAGS=aK.BASE_SNIPPETS_URL=aK.DEFAULT_SCREENSHOTTING_OPTIONS=aK.DEFAULT_EXECUTION_OPTIONS=aK.DebugLogger=aK.setLogLevel=aK.initLogger=aK.METICULOUS_LOGGER_NAME=aK.setMeticulousLocalDataDir=aK.getMeticulousLocalDataDir=aK.defer=void 0;var aJ={};Object.defineProperty(aJ,"__esModule",{value:!0}),aJ.defer=void 0,aJ.defer=function(){let e="pending",t=null,a=null,i=new Promise((e,i)=>{t=e,a=i});return i.then(()=>{e="fulfilled"},()=>{e="rejected"}),{resolve:t,reject:a,promise:i,getState:()=>e}},Object.defineProperty(aK,"defer",{enumerable:!0,get:function(){return aJ.defer}});var az={},aj=az&&az.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(az,"__esModule",{value:!0}),az.setMeticulousLocalDataDir=az.getMeticulousLocalDataDir=void 0;const aP=aj(O("7SZkG"));var aM={},aQ=aM&&aM.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(aM,"__esModule",{value:!0}),aM.setLogLevel=aM.initLogger=aM.METICULOUS_LOGGER_NAME=void 0;const aq=aQ(O("7SZkG"));aM.METICULOUS_LOGGER_NAME="@alwaysmeticulous",aM.initLogger=()=>{let e=aq.default.getLogger(aM.METICULOUS_LOGGER_NAME);return e.setDefaultLevel(aq.default.levels.INFO),e},aM.setLogLevel=e=>{let t=aq.default.getLogger(aM.METICULOUS_LOGGER_NAME);switch((e||"").toLocaleLowerCase()){case"trace":t.setLevel(aq.default.levels.TRACE,!1);break;case"debug":t.setLevel(aq.default.levels.DEBUG,!1);break;case"info":t.setLevel(aq.default.levels.INFO,!1);break;case"warn":t.setLevel(aq.default.levels.WARN,!1);break;case"error":t.setLevel(aq.default.levels.ERROR,!1);break;case"silent":t.setLevel(aq.default.levels.SILENT,!1)}};let a$="";az.getMeticulousLocalDataDir=()=>{let e=aP.default.getLogger(aM.METICULOUS_LOGGER_NAME);return a$?e.debug(`Using local data dir at ${a$}`):((0,az.setMeticulousLocalDataDir)(),e.debug(`Local data dir has not been set explictly, so defaulting to ${a$}`)),a$},az.setMeticulousLocalDataDir=e=>{let t=aP.default.getLogger(aM.METICULOUS_LOGGER_NAME);a$&&t.warn("Meticulous local data dir has already been set by a prior call to setMeticulousLocalDataDir()"),a$=e||process.env.METICULOUS_DIR||(0,A.normalize)((0,A.join)(process.env.HOME||process.cwd(),".meticulous"))},Object.defineProperty(aK,"getMeticulousLocalDataDir",{enumerable:!0,get:function(){return az.getMeticulousLocalDataDir}}),Object.defineProperty(aK,"setMeticulousLocalDataDir",{enumerable:!0,get:function(){return az.setMeticulousLocalDataDir}}),Object.defineProperty(aK,"METICULOUS_LOGGER_NAME",{enumerable:!0,get:function(){return aM.METICULOUS_LOGGER_NAME}}),Object.defineProperty(aK,"initLogger",{enumerable:!0,get:function(){return aM.initLogger}}),Object.defineProperty(aK,"setLogLevel",{enumerable:!0,get:function(){return aM.setLogLevel}});var a1={};Object.defineProperty(a1,"__esModule",{value:!0}),a1.DebugLogger=void 0;class a0 extends Error{}class a2 extends a0{constructor(e){super(`Invalid DateTime: ${e.toMessage()}`)}}class a4 extends a0{constructor(e){super(`Invalid Interval: ${e.toMessage()}`)}}class a9 extends a0{constructor(e){super(`Invalid Duration: ${e.toMessage()}`)}}class a6 extends a0{}class a3 extends a0{constructor(e){super(`Invalid unit ${e}`)}}class a5 extends a0{}class a8 extends a0{constructor(){super("Zone is an abstract class")}}const a7="numeric",ie="short",it="long",ia={year:a7,month:a7,day:a7},ii={year:a7,month:ie,day:a7},io={year:a7,month:ie,day:a7,weekday:ie},is={year:a7,month:it,day:a7},ir={year:a7,month:it,day:a7,weekday:it},ip={hour:a7,minute:a7},il={hour:a7,minute:a7,second:a7},id={hour:a7,minute:a7,second:a7,timeZoneName:ie},ic={hour:a7,minute:a7,second:a7,timeZoneName:it},iu={hour:a7,minute:a7,hourCycle:"h23"},im={hour:a7,minute:a7,second:a7,hourCycle:"h23"},ig={hour:a7,minute:a7,second:a7,hourCycle:"h23",timeZoneName:ie},ih={hour:a7,minute:a7,second:a7,hourCycle:"h23",timeZoneName:it},ib={year:a7,month:a7,day:a7,hour:a7,minute:a7},iv={year:a7,month:a7,day:a7,hour:a7,minute:a7,second:a7},iI={year:a7,month:ie,day:a7,hour:a7,minute:a7},iC={year:a7,month:ie,day:a7,hour:a7,minute:a7,second:a7},iy={year:a7,month:ie,day:a7,weekday:ie,hour:a7,minute:a7},iw={year:a7,month:it,day:a7,hour:a7,minute:a7,timeZoneName:ie},ix={year:a7,month:it,day:a7,hour:a7,minute:a7,second:a7,timeZoneName:ie},iA={year:a7,month:it,day:a7,weekday:it,hour:a7,minute:a7,timeZoneName:it},iG={year:a7,month:it,day:a7,weekday:it,hour:a7,minute:a7,second:a7,timeZoneName:it};class iS{get type(){throw new a8}get name(){throw new a8}get ianaName(){return this.name}get isUniversal(){throw new a8}offsetName(e,t){throw new a8}formatOffset(e,t){throw new a8}offset(e){throw new a8}equals(e){throw new a8}get isValid(){throw new a8}}let iB=null;class iZ extends iS{static get instance(){return null===iB&&(iB=new iZ),iB}get type(){return"system"}get name(){return new Intl.DateTimeFormat().resolvedOptions().timeZone}get isUniversal(){return!1}offsetName(e,{format:t,locale:a}){return nd(e,t,a)}formatOffset(e,t){return ng(this.offset(e),t)}offset(e){return-new Date(e).getTimezoneOffset()}equals(e){return"system"===e.type}get isValid(){return!0}}let i_={};const iT={year:0,month:1,day:2,era:3,hour:4,minute:5,second:6};let iR={};class iV extends iS{static create(e){return iR[e]||(iR[e]=new iV(e)),iR[e]}static resetCache(){iR={},i_={}}static isValidSpecifier(e){return this.isValidZone(e)}static isValidZone(e){if(!e)return!1;try{return new Intl.DateTimeFormat("en-US",{timeZone:e}).format(),!0}catch(e){return!1}}constructor(e){super(),this.zoneName=e,this.valid=iV.isValidZone(e)}get type(){return"iana"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(e,{format:t,locale:a}){return nd(e,t,a,this.name)}formatOffset(e,t){return ng(this.offset(e),t)}offset(e){var t;let a=new Date(e);if(isNaN(a))return NaN;let i=(i_[t=this.name]||(i_[t]=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",era:"short"})),i_[t]),[n,o,s,r,p,l,d]=i.formatToParts?function(e,t){let a=e.formatToParts(t),i=[];for(let e=0;e=0?m:1e3+m))/6e4}equals(e){return"iana"===e.type&&e.name===this.name}get isValid(){return this.valid}}let iE={},iN={};function iW(e,t={}){let a=JSON.stringify([e,t]),i=iN[a];return i||(i=new Intl.DateTimeFormat(e,t),iN[a]=i),i}let ik={},iH={},iF=null;function iU(e,t,a,i){let n=e.listingMode();return"error"===n?null:"en"===n?a(t):i(t)}class iY{constructor(e,t,a){this.padTo=a.padTo||0,this.floor=a.floor||!1;let{padTo:i,floor:n,...o}=a;if(!t||Object.keys(o).length>0){let t={useGrouping:!1,...a};a.padTo>0&&(t.minimumIntegerDigits=a.padTo),this.inf=function(e,t={}){let a=JSON.stringify([e,t]),i=ik[a];return i||(i=new Intl.NumberFormat(e,t),ik[a]=i),i}(e,t)}}format(e){if(!this.inf)return i7(this.floor?Math.floor(e):ni(e,3),this.padTo);{let t=this.floor?Math.floor(e):e;return this.inf.format(t)}}}class iO{constructor(e,t,a){let i;if(this.opts=a,this.originalZone=void 0,this.opts.timeZone)this.dt=e;else if("fixed"===e.zone.type){let t=-(e.offset/60*1),a=t>=0?`Etc/GMT+${t}`:`Etc/GMT${t}`;0!==e.offset&&iV.create(a).valid?(i=a,this.dt=e):(i="UTC",this.dt=0===e.offset?e:e.setZone("UTC").plus({minutes:e.offset}),this.originalZone=e.zone)}else"system"===e.zone.type?this.dt=e:"iana"===e.zone.type?(this.dt=e,i=e.zone.name):(i="UTC",this.dt=e.setZone("UTC").plus({minutes:e.offset}),this.originalZone=e.zone);let n={...this.opts};n.timeZone=n.timeZone||i,this.dtf=iW(t,n)}format(){return this.originalZone?this.formatToParts().map(({value:e})=>e).join(""):this.dtf.format(this.dt.toJSDate())}formatToParts(){let e=this.dtf.formatToParts(this.dt.toJSDate());return this.originalZone?e.map(e=>{if("timeZoneName"!==e.type)return e;{let t=this.originalZone.offsetName(this.dt.ts,{locale:this.dt.locale,format:this.opts.timeZoneName});return{...e,value:t}}}):e}resolvedOptions(){return this.dtf.resolvedOptions()}}class iX{constructor(e,t,a){this.opts={style:"long",...a},!t&&i6()&&(this.rtf=function(e,t={}){let{base:a,...i}=t,n=JSON.stringify([e,i]),o=iH[n];return o||(o=new Intl.RelativeTimeFormat(e,t),iH[n]=o),o}(e,a))}format(e,t){return this.rtf?this.rtf.format(e,t):function(e,t,a="always",i=!1){let n={years:["year","yr."],quarters:["quarter","qtr."],months:["month","mo."],weeks:["week","wk."],days:["day","day","days"],hours:["hour","hr."],minutes:["minute","min."],seconds:["second","sec."]},o=-1===["hours","minutes","seconds"].indexOf(e);if("auto"===a&&o){let a="days"===e;switch(t){case 1:return a?"tomorrow":`next ${n[e][0]}`;case -1:return a?"yesterday":`last ${n[e][0]}`;case 0:return a?"today":`this ${n[e][0]}`}}let s=Object.is(t,-0)||t<0,r=Math.abs(t),p=1===r,l=n[e],d=i?p?l[1]:l[2]||l[1]:p?n[e][0]:e;return s?`${r} ${d} ago`:`in ${r} ${d}`}(t,e,this.opts.numeric,"long"!==this.opts.style)}formatToParts(e,t){return this.rtf?this.rtf.formatToParts(e,t):[]}}class iL{static fromOpts(e){return iL.create(e.locale,e.numberingSystem,e.outputCalendar,e.defaultToEN)}static create(e,t,a,i=!1){let n=e||i0.defaultLocale;return new iL(n||(i?"en-US":iF||(iF=new Intl.DateTimeFormat().resolvedOptions().locale)),t||i0.defaultNumberingSystem,a||i0.defaultOutputCalendar,n)}static resetCache(){iF=null,iN={},ik={},iH={}}static fromObject({locale:e,numberingSystem:t,outputCalendar:a}={}){return iL.create(e,t,a)}constructor(e,t,a,i){var n,o,s;let[r,p,l]=function(e){let t=e.indexOf("-x-");-1!==t&&(e=e.substring(0,t));let a=e.indexOf("-u-");if(-1===a)return[e];{let t,i;try{t=iW(e).resolvedOptions(),i=e}catch(o){let n=e.substring(0,a);t=iW(n).resolvedOptions(),i=n}let{numberingSystem:n,calendar:o}=t;return[i,n,o]}}(e);this.locale=r,this.numberingSystem=t||p||null,this.outputCalendar=a||l||null,this.intl=(n=this.locale,o=this.numberingSystem,((s=this.outputCalendar)||o)&&(n.includes("-u-")||(n+="-u"),s&&(n+=`-ca-${s}`),o&&(n+=`-nu-${o}`)),n),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=i,this.fastNumbersCached=null}get fastNumbers(){return null==this.fastNumbersCached&&(this.fastNumbersCached=(!this.numberingSystem||"latn"===this.numberingSystem)&&("latn"===this.numberingSystem||!this.locale||this.locale.startsWith("en")||"latn"===new Intl.DateTimeFormat(this.intl).resolvedOptions().numberingSystem)),this.fastNumbersCached}listingMode(){let e=this.isEnglish(),t=(null===this.numberingSystem||"latn"===this.numberingSystem)&&(null===this.outputCalendar||"gregory"===this.outputCalendar);return e&&t?"en":"intl"}clone(e){return e&&0!==Object.getOwnPropertyNames(e).length?iL.create(e.locale||this.specifiedLocale,e.numberingSystem||this.numberingSystem,e.outputCalendar||this.outputCalendar,e.defaultToEN||!1):this}redefaultToEN(e={}){return this.clone({...e,defaultToEN:!0})}redefaultToSystem(e={}){return this.clone({...e,defaultToEN:!1})}months(e,t=!1){return iU(this,e,nI,()=>{let a=t?{month:e,day:"numeric"}:{month:e},i=t?"format":"standalone";return this.monthsCache[i][e]||(this.monthsCache[i][e]=function(e){let t=[];for(let a=1;a<=12;a++){let i=sc.utc(2009,a,1);t.push(e(i))}return t}(e=>this.extract(e,a,"month"))),this.monthsCache[i][e]})}weekdays(e,t=!1){return iU(this,e,nx,()=>{let a=t?{weekday:e,year:"numeric",month:"long",day:"numeric"}:{weekday:e},i=t?"format":"standalone";return this.weekdaysCache[i][e]||(this.weekdaysCache[i][e]=function(e){let t=[];for(let a=1;a<=7;a++){let i=sc.utc(2016,11,13+a);t.push(e(i))}return t}(e=>this.extract(e,a,"weekday"))),this.weekdaysCache[i][e]})}meridiems(){return iU(this,void 0,()=>nA,()=>{if(!this.meridiemCache){let e={hour:"numeric",hourCycle:"h12"};this.meridiemCache=[sc.utc(2016,11,13,9),sc.utc(2016,11,13,19)].map(t=>this.extract(t,e,"dayperiod"))}return this.meridiemCache})}eras(e){return iU(this,e,nZ,()=>{let t={era:e};return this.eraCache[e]||(this.eraCache[e]=[sc.utc(-40,1,1),sc.utc(2017,1,1)].map(e=>this.extract(e,t,"era"))),this.eraCache[e]})}extract(e,t,a){let i=this.dtFormatter(e,t).formatToParts().find(e=>e.type.toLowerCase()===a);return i?i.value:null}numberFormatter(e={}){return new iY(this.intl,e.forceSimple||this.fastNumbers,e)}dtFormatter(e,t={}){return new iO(e,this.intl,t)}relFormatter(e={}){return new iX(this.intl,this.isEnglish(),e)}listFormatter(e={}){return function(e,t={}){let a=JSON.stringify([e,t]),i=iE[a];return i||(i=new Intl.ListFormat(e,t),iE[a]=i),i}(this.intl,e)}isEnglish(){return"en"===this.locale||"en-us"===this.locale.toLowerCase()||new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us")}equals(e){return this.locale===e.locale&&this.numberingSystem===e.numberingSystem&&this.outputCalendar===e.outputCalendar}}let iD=null;class iK extends iS{static get utcInstance(){return null===iD&&(iD=new iK(0)),iD}static instance(e){return 0===e?iK.utcInstance:new iK(e)}static parseSpecifier(e){if(e){let t=e.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i);if(t)return new iK(nc(t[1],t[2]))}return null}constructor(e){super(),this.fixed=e}get type(){return"fixed"}get name(){return 0===this.fixed?"UTC":`UTC${ng(this.fixed,"narrow")}`}get ianaName(){return 0===this.fixed?"Etc/UTC":`Etc/GMT${ng(-this.fixed,"narrow")}`}offsetName(){return this.name}formatOffset(e,t){return ng(this.fixed,t)}get isUniversal(){return!0}offset(){return this.fixed}equals(e){return"fixed"===e.type&&e.fixed===this.fixed}get isValid(){return!0}}class iJ extends iS{constructor(e){super(),this.zoneName=e}get type(){return"invalid"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(){return null}formatOffset(){return""}offset(){return NaN}equals(){return!1}get isValid(){return!1}}function iz(e,t){if(i2(e)||null===e)return t;if(e instanceof iS)return e;if("string"==typeof e){let a=e.toLowerCase();return"default"===a?t:"local"===a||"system"===a?iZ.instance:"utc"===a||"gmt"===a?iK.utcInstance:iK.parseSpecifier(a)||iV.create(e)}return i4(e)?iK.instance(e):"object"==typeof e&&"offset"in e&&"function"==typeof e.offset?e:new iJ(e)}let ij=()=>Date.now(),iP="system",iM=null,iQ=null,iq=null,i$=60,i1;class i0{static get now(){return ij}static set now(e){ij=e}static set defaultZone(e){iP=e}static get defaultZone(){return iz(iP,iZ.instance)}static get defaultLocale(){return iM}static set defaultLocale(e){iM=e}static get defaultNumberingSystem(){return iQ}static set defaultNumberingSystem(e){iQ=e}static get defaultOutputCalendar(){return iq}static set defaultOutputCalendar(e){iq=e}static get twoDigitCutoffYear(){return i$}static set twoDigitCutoffYear(e){i$=e%100}static get throwOnInvalid(){return i1}static set throwOnInvalid(e){i1=e}static resetCaches(){iL.resetCache(),iV.resetCache()}}function i2(e){return void 0===e}function i4(e){return"number"==typeof e}function i9(e){return"number"==typeof e&&e%1==0}function i6(){try{return"undefined"!=typeof Intl&&!!Intl.RelativeTimeFormat}catch(e){return!1}}function i3(e,t,a){if(0!==e.length)return e.reduce((e,i)=>{let n=[t(i),i];return e&&a(e[0],n[0])===e[0]?e:n},null)[1]}function i5(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function i8(e,t,a){return i9(e)&&e>=t&&e<=a}function i7(e,t=2){return e<0?"-"+(""+-e).padStart(t,"0"):(""+e).padStart(t,"0")}function ne(e){if(!i2(e)&&null!==e&&""!==e)return parseInt(e,10)}function nt(e){if(!i2(e)&&null!==e&&""!==e)return parseFloat(e)}function na(e){if(!i2(e)&&null!==e&&""!==e)return Math.floor(1e3*parseFloat("0."+e))}function ni(e,t,a=!1){let i=10**t;return(a?Math.trunc:Math.round)(e*i)/i}function nn(e){return e%4==0&&(e%100!=0||e%400==0)}function no(e){return nn(e)?366:365}function ns(e,t){var a;let i=(a=t-1)-12*Math.floor(a/12)+1;return 2===i?nn(e+(t-i)/12)?29:28:[31,null,31,30,31,30,31,31,30,31,30,31][i-1]}function nr(e){let t=Date.UTC(e.year,e.month-1,e.day,e.hour,e.minute,e.second,e.millisecond);return e.year<100&&e.year>=0&&(t=new Date(t)).setUTCFullYear(e.year,e.month-1,e.day),+t}function np(e){let t=e-1;return 4==(e+Math.floor(e/4)-Math.floor(e/100)+Math.floor(e/400))%7||3==(t+Math.floor(t/4)-Math.floor(t/100)+Math.floor(t/400))%7?53:52}function nl(e){return e>99?e:e>i0.twoDigitCutoffYear?1900+e:2e3+e}function nd(e,t,a,i=null){let n=new Date(e),o={hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"};i&&(o.timeZone=i);let s={timeZoneName:t,...o},r=new Intl.DateTimeFormat(a,s).formatToParts(n).find(e=>"timezonename"===e.type.toLowerCase());return r?r.value:null}function nc(e,t){let a=parseInt(e,10);Number.isNaN(a)&&(a=0);let i=parseInt(t,10)||0,n=a<0||Object.is(a,-0)?-i:i;return 60*a+n}function nu(e){let t=Number(e);if("boolean"==typeof e||""===e||Number.isNaN(t))throw new a5(`Invalid unit value ${e}`);return t}function nm(e,t){let a={};for(let i in e)if(i5(e,i)){let n=e[i];if(null==n)continue;a[t(i)]=nu(n)}return a}function ng(e,t){let a=Math.trunc(Math.abs(e/60)),i=Math.trunc(Math.abs(e%60)),n=e>=0?"+":"-";switch(t){case"short":return`${n}${i7(a,2)}:${i7(i,2)}`;case"narrow":return`${n}${a}${i>0?`:${i}`:""}`;case"techie":return`${n}${i7(a,2)}${i7(i,2)}`;default:throw RangeError(`Value format ${t} is out of range for property format`)}}function nh(e){return["hour","minute","second","millisecond"].reduce((t,a)=>(t[a]=e[a],t),{})}const nb=["January","February","March","April","May","June","July","August","September","October","November","December"],nf=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],nv=["J","F","M","A","M","J","J","A","S","O","N","D"];function nI(e){switch(e){case"narrow":return[...nv];case"short":return[...nf];case"long":return[...nb];case"numeric":return["1","2","3","4","5","6","7","8","9","10","11","12"];case"2-digit":return["01","02","03","04","05","06","07","08","09","10","11","12"];default:return null}}const nC=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],ny=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],nw=["M","T","W","T","F","S","S"];function nx(e){switch(e){case"narrow":return[...nw];case"short":return[...ny];case"long":return[...nC];case"numeric":return["1","2","3","4","5","6","7"];default:return null}}const nA=["AM","PM"],nG=["Before Christ","Anno Domini"],nS=["BC","AD"],nB=["B","A"];function nZ(e){switch(e){case"narrow":return[...nB];case"short":return[...nS];case"long":return[...nG];default:return null}}function n_(e,t){let a="";for(let i of e)i.literal?a+=i.val:a+=t(i.val);return a}const nT={D:ia,DD:ii,DDD:is,DDDD:ir,t:ip,tt:il,ttt:id,tttt:ic,T:iu,TT:im,TTT:ig,TTTT:ih,f:ib,ff:iI,fff:iw,ffff:iA,F:iv,FF:iC,FFF:ix,FFFF:iG};class nR{static create(e,t={}){return new nR(e,t)}static parseFormat(e){let t=null,a="",i=!1,n=[];for(let o=0;o0&&n.push({literal:i||/^\s+$/.test(a),val:a}),t=null,a="",i=!i):i?a+=s:s===t?a+=s:(a.length>0&&n.push({literal:/^\s+$/.test(a),val:a}),a=s,t=s)}return a.length>0&&n.push({literal:i||/^\s+$/.test(a),val:a}),n}static macroTokenToFormatOpts(e){return nT[e]}constructor(e,t){this.opts=t,this.loc=e,this.systemLoc=null}formatWithSystemDefault(e,t){return null===this.systemLoc&&(this.systemLoc=this.loc.redefaultToSystem()),this.systemLoc.dtFormatter(e,{...this.opts,...t}).format()}dtFormatter(e,t={}){return this.loc.dtFormatter(e,{...this.opts,...t})}formatDateTime(e,t){return this.dtFormatter(e,t).format()}formatDateTimeParts(e,t){return this.dtFormatter(e,t).formatToParts()}formatInterval(e,t){return this.dtFormatter(e.start,t).dtf.formatRange(e.start.toJSDate(),e.end.toJSDate())}resolvedOptions(e,t){return this.dtFormatter(e,t).resolvedOptions()}num(e,t=0){if(this.opts.forceSimple)return i7(e,t);let a={...this.opts};return t>0&&(a.padTo=t),this.loc.numberFormatter(a).format(e)}formatDateTimeFromString(e,t){let a="en"===this.loc.listingMode(),i=this.loc.outputCalendar&&"gregory"!==this.loc.outputCalendar,n=(t,a)=>this.loc.extract(e,t,a),o=t=>e.isOffsetFixed&&0===e.offset&&t.allowZ?"Z":e.isValid?e.zone.formatOffset(e.ts,t.format):"",s=()=>a?nA[e.hour<12?0:1]:n({hour:"numeric",hourCycle:"h12"},"dayperiod"),r=(t,i)=>a?nI(t)[e.month-1]:n(i?{month:t}:{month:t,day:"numeric"},"month"),p=(t,i)=>a?nx(t)[e.weekday-1]:n(i?{weekday:t}:{weekday:t,month:"long",day:"numeric"},"weekday"),l=t=>{let a=nR.macroTokenToFormatOpts(t);return a?this.formatWithSystemDefault(e,a):t},d=t=>a?nZ(t)[e.year<0?0:1]:n({era:t},"era");return n_(nR.parseFormat(t),t=>{switch(t){case"S":return this.num(e.millisecond);case"u":case"SSS":return this.num(e.millisecond,3);case"s":return this.num(e.second);case"ss":return this.num(e.second,2);case"uu":return this.num(Math.floor(e.millisecond/10),2);case"uuu":return this.num(Math.floor(e.millisecond/100));case"m":return this.num(e.minute);case"mm":return this.num(e.minute,2);case"h":return this.num(e.hour%12==0?12:e.hour%12);case"hh":return this.num(e.hour%12==0?12:e.hour%12,2);case"H":return this.num(e.hour);case"HH":return this.num(e.hour,2);case"Z":return o({format:"narrow",allowZ:this.opts.allowZ});case"ZZ":return o({format:"short",allowZ:this.opts.allowZ});case"ZZZ":return o({format:"techie",allowZ:this.opts.allowZ});case"ZZZZ":return e.zone.offsetName(e.ts,{format:"short",locale:this.loc.locale});case"ZZZZZ":return e.zone.offsetName(e.ts,{format:"long",locale:this.loc.locale});case"z":return e.zoneName;case"a":return s();case"d":return i?n({day:"numeric"},"day"):this.num(e.day);case"dd":return i?n({day:"2-digit"},"day"):this.num(e.day,2);case"c":case"E":return this.num(e.weekday);case"ccc":return p("short",!0);case"cccc":return p("long",!0);case"ccccc":return p("narrow",!0);case"EEE":return p("short",!1);case"EEEE":return p("long",!1);case"EEEEE":return p("narrow",!1);case"L":return i?n({month:"numeric",day:"numeric"},"month"):this.num(e.month);case"LL":return i?n({month:"2-digit",day:"numeric"},"month"):this.num(e.month,2);case"LLL":return r("short",!0);case"LLLL":return r("long",!0);case"LLLLL":return r("narrow",!0);case"M":return i?n({month:"numeric"},"month"):this.num(e.month);case"MM":return i?n({month:"2-digit"},"month"):this.num(e.month,2);case"MMM":return r("short",!1);case"MMMM":return r("long",!1);case"MMMMM":return r("narrow",!1);case"y":return i?n({year:"numeric"},"year"):this.num(e.year);case"yy":return i?n({year:"2-digit"},"year"):this.num(e.year.toString().slice(-2),2);case"yyyy":return i?n({year:"numeric"},"year"):this.num(e.year,4);case"yyyyyy":return i?n({year:"numeric"},"year"):this.num(e.year,6);case"G":return d("short");case"GG":return d("long");case"GGGGG":return d("narrow");case"kk":return this.num(e.weekYear.toString().slice(-2),2);case"kkkk":return this.num(e.weekYear,4);case"W":return this.num(e.weekNumber);case"WW":return this.num(e.weekNumber,2);case"o":return this.num(e.ordinal);case"ooo":return this.num(e.ordinal,3);case"q":return this.num(e.quarter);case"qq":return this.num(e.quarter,2);case"X":return this.num(Math.floor(e.ts/1e3));case"x":return this.num(e.ts);default:return l(t)}})}formatDurationFromString(e,t){let a;let i=e=>{switch(e[0]){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":return"hour";case"d":return"day";case"w":return"week";case"M":return"month";case"y":return"year";default:return null}},n=nR.parseFormat(t),o=n.reduce((e,{literal:t,val:a})=>t?e:e.concat(a),[]);return n_(n,(a=e.shiftTo(...o.map(i).filter(e=>e)),e=>{let t=i(e);return t?this.num(a.get(t),e.length):e}))}}class nV{constructor(e,t){this.reason=e,this.explanation=t}toMessage(){return this.explanation?`${this.reason}: ${this.explanation}`:this.reason}}const nE=/[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/;function nN(...e){let t=e.reduce((e,t)=>e+t.source,"");return RegExp(`^${t}$`)}function nW(...e){return t=>e.reduce(([e,a,i],n)=>{let[o,s,r]=n(t,i);return[{...e,...o},s||a,r]},[{},null,1]).slice(0,2)}function nk(e,...t){if(null==e)return[null,null];for(let[a,i]of t){let t=a.exec(e);if(t)return i(t)}return[null,null]}function nH(...e){return(t,a)=>{let i;let n={};for(i=0;ivoid 0!==e&&(t||e&&d)?-e:e;return[{years:u(nt(a)),months:u(nt(i)),weeks:u(nt(n)),days:u(nt(o)),hours:u(nt(s)),minutes:u(nt(r)),seconds:u(nt(p),"-0"===p),milliseconds:u(na(l),c)}]}const n1={GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function n0(e,t,a,i,n,o,s){let r={year:2===t.length?nl(ne(t)):ne(t),month:nf.indexOf(a)+1,day:ne(i),hour:ne(n),minute:ne(o)};return s&&(r.second=ne(s)),e&&(r.weekday=e.length>3?nC.indexOf(e)+1:ny.indexOf(e)+1),r}const n2=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;function n4(e){let[,t,a,i,n,o,s,r,p,l,d,c]=e;return[n0(t,n,i,a,o,s,r),new iK(p?n1[p]:l?0:nc(d,c))]}const n9=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/,n6=/^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/,n3=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/;function n5(e){let[,t,a,i,n,o,s,r]=e;return[n0(t,n,i,a,o,s,r),iK.utcInstance]}function n8(e){let[,t,a,i,n,o,s,r]=e;return[n0(t,r,a,i,n,o,s),iK.utcInstance]}const n7=nN(/([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/,nX),oe=nN(/(\d{4})-?W(\d\d)(?:-?(\d))?/,nX),ot=nN(/(\d{4})-?(\d{3})/,nX),oa=nN(nO),oi=nW(function(e,t){return[{year:nz(e,t),month:nz(e,t+1,1),day:nz(e,t+2,1)},null,t+3]},nj,nP,nM),on=nW(nL,nj,nP,nM),oo=nW(nD,nj,nP,nM),os=nW(nj,nP,nM),or=nW(nj),op=nN(/(\d{4})-(\d\d)-(\d\d)/,nJ),ol=nN(nK),od=nW(nj,nP,nM),oc="Invalid Duration",ou={weeks:{days:7,hours:168,minutes:10080,seconds:604800,milliseconds:6048e5},days:{hours:24,minutes:1440,seconds:86400,milliseconds:864e5},hours:{minutes:60,seconds:3600,milliseconds:36e5},minutes:{seconds:60,milliseconds:6e4},seconds:{milliseconds:1e3}},om={years:{quarters:4,months:12,weeks:52,days:365,hours:8760,minutes:525600,seconds:31536e3,milliseconds:31536e6},quarters:{months:3,weeks:13,days:91,hours:2184,minutes:131040,seconds:7862400,milliseconds:78624e5},months:{weeks:4,days:30,hours:720,minutes:43200,seconds:2592e3,milliseconds:2592e6},...ou},og={years:{quarters:4,months:12,weeks:52.1775,days:365.2425,hours:8765.82,minutes:525949.2,seconds:31556952,milliseconds:31556952e3},quarters:{months:3,weeks:13.044375,days:91.310625,hours:2191.455,minutes:131487.3,seconds:7889238,milliseconds:7889238e3},months:{weeks:30.436875/7,days:30.436875,hours:730.485,minutes:43829.1,seconds:2629746,milliseconds:2629746e3},...ou},oh=["years","quarters","months","weeks","days","hours","minutes","seconds","milliseconds"],ob=oh.slice(0).reverse();function of(e,t,a=!1){return new oC({values:a?t.values:{...e.values,...t.values||{}},loc:e.loc.clone(t.loc),conversionAccuracy:t.conversionAccuracy||e.conversionAccuracy,matrix:t.matrix||e.matrix})}function ov(e,t){let a=t.milliseconds??0;for(let i of ob.slice(1))t[i]&&(a+=t[i]*e[i].milliseconds);return a}function oI(e,t){let a=0>ov(e,t)?-1:1;oh.reduceRight((i,n)=>{if(i2(t[n]))return i;if(i){let o=t[i]*a,s=e[n][i],r=Math.floor(o/s);t[n]+=r*a,t[i]-=r*s*a}return n},null),oh.reduce((a,i)=>{if(i2(t[i]))return a;if(a){let n=t[a]%1;t[a]-=n,t[i]+=n*e[a][i]}return i},null)}class oC{constructor(e){let t="longterm"===e.conversionAccuracy,a=t?og:om;e.matrix&&(a=e.matrix),this.values=e.values,this.loc=e.loc||iL.create(),this.conversionAccuracy=t?"longterm":"casual",this.invalid=e.invalid||null,this.matrix=a,this.isLuxonDuration=!0}static fromMillis(e,t){return oC.fromObject({milliseconds:e},t)}static fromObject(e,t={}){if(null==e||"object"!=typeof e)throw new a5(`Duration.fromObject: argument expected to be an object, got ${null===e?"null":typeof e}`);return new oC({values:nm(e,oC.normalizeUnit),loc:iL.fromObject(t),conversionAccuracy:t.conversionAccuracy,matrix:t.matrix})}static fromDurationLike(e){if(i4(e))return oC.fromMillis(e);if(oC.isDuration(e))return e;if("object"==typeof e)return oC.fromObject(e);throw new a5(`Unknown duration argument ${e} of type ${typeof e}`)}static fromISO(e,t){let[a]=nk(e,[nq,n$]);return a?oC.fromObject(a,t):oC.invalid("unparsable",`the input "${e}" can't be parsed as ISO 8601`)}static fromISOTime(e,t){let[a]=nk(e,[nQ,or]);return a?oC.fromObject(a,t):oC.invalid("unparsable",`the input "${e}" can't be parsed as ISO 8601`)}static invalid(e,t=null){if(!e)throw new a5("need to specify a reason the Duration is invalid");let a=e instanceof nV?e:new nV(e,t);if(!i0.throwOnInvalid)return new oC({invalid:a});throw new a9(a)}static normalizeUnit(e){let t={year:"years",years:"years",quarter:"quarters",quarters:"quarters",month:"months",months:"months",week:"weeks",weeks:"weeks",day:"days",days:"days",hour:"hours",hours:"hours",minute:"minutes",minutes:"minutes",second:"seconds",seconds:"seconds",millisecond:"milliseconds",milliseconds:"milliseconds"}[e?e.toLowerCase():e];if(!t)throw new a3(e);return t}static isDuration(e){return e&&e.isLuxonDuration||!1}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}toFormat(e,t={}){let a={...t,floor:!1!==t.round&&!1!==t.floor};return this.isValid?nR.create(this.loc,a).formatDurationFromString(this,e):oc}toHuman(e={}){if(!this.isValid)return oc;let t=oh.map(t=>{let a=this.values[t];return i2(a)?null:this.loc.numberFormatter({style:"unit",unitDisplay:"long",...e,unit:t.slice(0,-1)}).format(a)}).filter(e=>e);return this.loc.listFormatter({type:"conjunction",style:e.listStyle||"narrow",...e}).format(t)}toObject(){return this.isValid?{...this.values}:{}}toISO(){if(!this.isValid)return null;let e="P";return 0!==this.years&&(e+=this.years+"Y"),(0!==this.months||0!==this.quarters)&&(e+=this.months+3*this.quarters+"M"),0!==this.weeks&&(e+=this.weeks+"W"),0!==this.days&&(e+=this.days+"D"),(0!==this.hours||0!==this.minutes||0!==this.seconds||0!==this.milliseconds)&&(e+="T"),0!==this.hours&&(e+=this.hours+"H"),0!==this.minutes&&(e+=this.minutes+"M"),(0!==this.seconds||0!==this.milliseconds)&&(e+=ni(this.seconds+this.milliseconds/1e3,3)+"S"),"P"===e&&(e+="T0S"),e}toISOTime(e={}){if(!this.isValid)return null;let t=this.toMillis();return t<0||t>=864e5?null:(e={suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:"extended",...e,includeOffset:!1},sc.fromMillis(t,{zone:"UTC"}).toISOTime(e))}toJSON(){return this.toISO()}toString(){return this.toISO()}toMillis(){return this.isValid?ov(this.matrix,this.values):NaN}valueOf(){return this.toMillis()}plus(e){if(!this.isValid)return this;let t=oC.fromDurationLike(e),a={};for(let e of oh)(i5(t.values,e)||i5(this.values,e))&&(a[e]=t.get(e)+this.get(e));return of(this,{values:a},!0)}minus(e){if(!this.isValid)return this;let t=oC.fromDurationLike(e);return this.plus(t.negate())}mapUnits(e){if(!this.isValid)return this;let t={};for(let a of Object.keys(this.values))t[a]=nu(e(this.values[a],a));return of(this,{values:t},!0)}get(e){return this[oC.normalizeUnit(e)]}set(e){return this.isValid?of(this,{values:{...this.values,...nm(e,oC.normalizeUnit)}}):this}reconfigure({locale:e,numberingSystem:t,conversionAccuracy:a,matrix:i}={}){return of(this,{loc:this.loc.clone({locale:e,numberingSystem:t}),matrix:i,conversionAccuracy:a})}as(e){return this.isValid?this.shiftTo(e).get(e):NaN}normalize(){if(!this.isValid)return this;let e=this.toObject();return oI(this.matrix,e),of(this,{values:e},!0)}rescale(){return this.isValid?of(this,{values:function(e){let t={};for(let[a,i]of Object.entries(e))0!==i&&(t[a]=i);return t}(this.normalize().shiftToAll().toObject())},!0):this}shiftTo(...e){let t;if(!this.isValid||0===e.length)return this;e=e.map(e=>oC.normalizeUnit(e));let a={},i={},n=this.toObject();for(let o of oh)if(e.indexOf(o)>=0){t=o;let e=0;for(let t in i)e+=this.matrix[t][o]*i[t],i[t]=0;i4(n[o])&&(e+=n[o]);let s=Math.trunc(e);a[o]=s,i[o]=(1e3*e-1e3*s)/1e3}else i4(n[o])&&(i[o]=n[o]);for(let e in i)0!==i[e]&&(a[t]+=e===t?i[e]:i[e]/this.matrix[t][e]);return oI(this.matrix,a),of(this,{values:a},!0)}shiftToAll(){return this.isValid?this.shiftTo("years","months","weeks","days","hours","minutes","seconds","milliseconds"):this}negate(){if(!this.isValid)return this;let e={};for(let t of Object.keys(this.values))e[t]=0===this.values[t]?0:-this.values[t];return of(this,{values:e},!0)}get years(){return this.isValid?this.values.years||0:NaN}get quarters(){return this.isValid?this.values.quarters||0:NaN}get months(){return this.isValid?this.values.months||0:NaN}get weeks(){return this.isValid?this.values.weeks||0:NaN}get days(){return this.isValid?this.values.days||0:NaN}get hours(){return this.isValid?this.values.hours||0:NaN}get minutes(){return this.isValid?this.values.minutes||0:NaN}get seconds(){return this.isValid?this.values.seconds||0:NaN}get milliseconds(){return this.isValid?this.values.milliseconds||0:NaN}get isValid(){return null===this.invalid}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}equals(e){if(!this.isValid||!e.isValid||!this.loc.equals(e.loc))return!1;for(let i of oh){var t,a;if(t=this.values[i],a=e.values[i],void 0===t||0===t?void 0!==a&&0!==a:t!==a)return!1}return!0}}const oy="Invalid Interval";class ow{constructor(e){this.s=e.start,this.e=e.end,this.invalid=e.invalid||null,this.isLuxonInterval=!0}static invalid(e,t=null){if(!e)throw new a5("need to specify a reason the Interval is invalid");let a=e instanceof nV?e:new nV(e,t);if(!i0.throwOnInvalid)return new ow({invalid:a});throw new a4(a)}static fromDateTimes(e,t){let a=su(e),i=su(t),n=a&&a.isValid?i&&i.isValid?ie}isBefore(e){return!!this.isValid&&this.e<=e}contains(e){return!!this.isValid&&this.s<=e&&this.e>e}set({start:e,end:t}={}){return this.isValid?ow.fromDateTimes(e||this.s,t||this.e):this}splitAt(...e){if(!this.isValid)return[];let t=e.map(su).filter(e=>this.contains(e)).sort(),a=[],{s:i}=this,n=0;for(;i+this.e?this.e:e;a.push(ow.fromDateTimes(i,o)),i=o,n+=1}return a}splitBy(e){let t=oC.fromDurationLike(e);if(!this.isValid||!t.isValid||0===t.as("milliseconds"))return[];let{s:a}=this,i=1,n,o=[];for(;ae*i));n=+e>+this.e?this.e:e,o.push(ow.fromDateTimes(a,n)),a=n,i+=1}return o}divideEqually(e){return this.isValid?this.splitBy(this.length()/e).slice(0,e):[]}overlaps(e){return this.e>e.s&&this.s=e.e}equals(e){return!!this.isValid&&!!e.isValid&&this.s.equals(e.s)&&this.e.equals(e.e)}intersection(e){if(!this.isValid)return this;let t=this.s>e.s?this.s:e.s,a=this.e=a?null:ow.fromDateTimes(t,a)}union(e){if(!this.isValid)return this;let t=this.se.e?this.e:e.e;return ow.fromDateTimes(t,a)}static merge(e){let[t,a]=e.sort((e,t)=>e.s-t.s).reduce(([e,t],a)=>t?t.overlaps(a)||t.abutsStart(a)?[e,t.union(a)]:[e.concat([t]),a]:[e,a],[[],null]);return a&&t.push(a),t}static xor(e){let t=null,a=0,i=[],n=e.map(e=>[{time:e.s,type:"s"},{time:e.e,type:"e"}]);for(let e of Array.prototype.concat(...n).sort((e,t)=>e.time-t.time))1===(a+="s"===e.type?1:-1)?t=e.time:(t&&+t!=+e.time&&i.push(ow.fromDateTimes(t,e.time)),t=null);return ow.merge(i)}difference(...e){return ow.xor([this].concat(e)).map(e=>this.intersection(e)).filter(e=>e&&!e.isEmpty())}toString(){return this.isValid?`[${this.s.toISO()} \u{2013} ${this.e.toISO()})`:oy}toLocaleString(e=ia,t={}){return this.isValid?nR.create(this.s.loc.clone(t),e).formatInterval(this):oy}toISO(e){return this.isValid?`${this.s.toISO(e)}/${this.e.toISO(e)}`:oy}toISODate(){return this.isValid?`${this.s.toISODate()}/${this.e.toISODate()}`:oy}toISOTime(e){return this.isValid?`${this.s.toISOTime(e)}/${this.e.toISOTime(e)}`:oy}toFormat(e,{separator:t=" – "}={}){return this.isValid?`${this.s.toFormat(e)}${t}${this.e.toFormat(e)}`:oy}toDuration(e,t){return this.isValid?this.e.diff(this.s,e,t):oC.invalid(this.invalidReason)}mapEndpoints(e){return ow.fromDateTimes(e(this.s),e(this.e))}}class ox{static hasDST(e=i0.defaultZone){let t=sc.now().setZone(e).set({month:12});return!e.isUniversal&&t.offset!==t.set({month:6}).offset}static isValidIANAZone(e){return iV.isValidZone(e)}static normalizeZone(e){return iz(e,i0.defaultZone)}static months(e="long",{locale:t=null,numberingSystem:a=null,locObj:i=null,outputCalendar:n="gregory"}={}){return(i||iL.create(t,a,n)).months(e)}static monthsFormat(e="long",{locale:t=null,numberingSystem:a=null,locObj:i=null,outputCalendar:n="gregory"}={}){return(i||iL.create(t,a,n)).months(e,!0)}static weekdays(e="long",{locale:t=null,numberingSystem:a=null,locObj:i=null}={}){return(i||iL.create(t,a,null)).weekdays(e)}static weekdaysFormat(e="long",{locale:t=null,numberingSystem:a=null,locObj:i=null}={}){return(i||iL.create(t,a,null)).weekdays(e,!0)}static meridiems({locale:e=null}={}){return iL.create(e).meridiems()}static eras(e="short",{locale:t=null}={}){return iL.create(t,null,"gregory").eras(e)}static features(){return{relative:i6()}}}function oA(e,t){let a=e=>e.toUTC(0,{keepLocalTime:!0}).startOf("day").valueOf(),i=a(t)-a(e);return Math.floor(oC.fromMillis(i).as("days"))}const oG={arab:"[٠-٩]",arabext:"[۰-۹]",bali:"[᭐-᭙]",beng:"[০-৯]",deva:"[०-९]",fullwide:"[0-9]",gujr:"[૦-૯]",hanidec:"[〇|一|二|三|四|五|六|七|八|九]",khmr:"[០-៩]",knda:"[೦-೯]",laoo:"[໐-໙]",limb:"[᥆-᥏]",mlym:"[൦-൯]",mong:"[᠐-᠙]",mymr:"[၀-၉]",orya:"[୦-୯]",tamldec:"[௦-௯]",telu:"[౦-౯]",thai:"[๐-๙]",tibt:"[༠-༩]",latn:"\\d"},oS={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},oB=oG.hanidec.replace(/[\[|\]]/g,"").split("");function oZ({numberingSystem:e},t=""){return RegExp(`${oG[e||"latn"]}${t}`)}function o_(e,t=e=>e){return{regex:e,deser:([e])=>t(function(e){let t=parseInt(e,10);if(!isNaN(t))return t;t="";for(let a=0;a=a&&i<=n&&(t+=i-a)}}return parseInt(t,10)}(e))}}const oT=String.fromCharCode(160),oR=`[ ${oT}]`,oV=RegExp(oR,"g");function oE(e){return e.replace(/\./g,"\\.?").replace(oV,oR)}function oN(e){return e.replace(/\./g,"").replace(oV," ").toLowerCase()}function oW(e,t){return null===e?null:{regex:RegExp(e.map(oE).join("|")),deser:([a])=>e.findIndex(e=>oN(a)===oN(e))+t}}function ok(e,t){return{regex:e,deser:([,e,t])=>nc(e,t),groups:t}}function oH(e){return{regex:e,deser:([e])=>e}}const oF={year:{"2-digit":"yy",numeric:"yyyyy"},month:{numeric:"M","2-digit":"MM",short:"MMM",long:"MMMM"},day:{numeric:"d","2-digit":"dd"},weekday:{short:"EEE",long:"EEEE"},dayperiod:"a",dayPeriod:"a",hour12:{numeric:"h","2-digit":"hh"},hour24:{numeric:"H","2-digit":"HH"},minute:{numeric:"m","2-digit":"mm"},second:{numeric:"s","2-digit":"ss"},timeZoneName:{long:"ZZZZZ",short:"ZZZ"}};let oU=null;function oY(e,t){return Array.prototype.concat(...e.map(e=>(function(e,t){if(e.literal)return e;let a=oX(nR.macroTokenToFormatOpts(e.val),t);return null==a||a.includes(void 0)?e:a})(e,t)))}function oO(e,t,a){let i=oY(nR.parseFormat(a),e),n=i.map(t=>(function(e,t){let a=oZ(t),i=oZ(t,"{2}"),n=oZ(t,"{3}"),o=oZ(t,"{4}"),s=oZ(t,"{6}"),r=oZ(t,"{1,2}"),p=oZ(t,"{1,3}"),l=oZ(t,"{1,6}"),d=oZ(t,"{1,9}"),c=oZ(t,"{2,4}"),u=oZ(t,"{4,6}"),m=e=>({regex:RegExp(e.val.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")),deser:([e])=>e,literal:!0}),g=(g=>{if(e.literal)return m(g);switch(g.val){case"G":return oW(t.eras("short"),0);case"GG":return oW(t.eras("long"),0);case"y":return o_(l);case"yy":case"kk":return o_(c,nl);case"yyyy":case"kkkk":return o_(o);case"yyyyy":return o_(u);case"yyyyyy":return o_(s);case"M":case"L":case"d":case"H":case"h":case"m":case"q":case"s":case"W":return o_(r);case"MM":case"LL":case"dd":case"HH":case"hh":case"mm":case"qq":case"ss":case"WW":return o_(i);case"MMM":return oW(t.months("short",!0),1);case"MMMM":return oW(t.months("long",!0),1);case"LLL":return oW(t.months("short",!1),1);case"LLLL":return oW(t.months("long",!1),1);case"o":case"S":return o_(p);case"ooo":case"SSS":return o_(n);case"u":return oH(d);case"uu":return oH(r);case"uuu":case"E":case"c":return o_(a);case"a":return oW(t.meridiems(),0);case"EEE":return oW(t.weekdays("short",!1),1);case"EEEE":return oW(t.weekdays("long",!1),1);case"ccc":return oW(t.weekdays("short",!0),1);case"cccc":return oW(t.weekdays("long",!0),1);case"Z":case"ZZ":return ok(RegExp(`([+-]${r.source})(?::(${i.source}))?`),2);case"ZZZ":return ok(RegExp(`([+-]${r.source})(${i.source})?`),2);case"z":return oH(/[a-z_+-/]{1,256}?/i);case" ":return oH(/[^\S\n\r]/);default:return m(g)}})(e)||{invalidReason:"missing Intl.DateTimeFormat.formatToParts support"};return g.token=e,g})(t,e)),o=n.find(e=>e.invalidReason);if(o)return{input:t,tokens:i,invalidReason:o.invalidReason};{let[e,a]=function(e){let t=e.map(e=>e.regex).reduce((e,t)=>`${e}(${t.source})`,"");return[`^${t}$`,e]}(n),o=RegExp(e,"i"),[s,r]=function(e,t,a){let i=e.match(t);if(!i)return[i,{}];{let e={},t=1;for(let n in a)if(i5(a,n)){let o=a[n],s=o.groups?o.groups+1:1;!o.literal&&o.token&&(e[o.token.val[0]]=o.deser(i.slice(t,t+s))),t+=s}return[i,e]}}(t,o,a),[p,l,d]=r?function(e){let t;let a=e=>{switch(e){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":case"H":return"hour";case"d":return"day";case"o":return"ordinal";case"L":case"M":return"month";case"y":return"year";case"E":case"c":return"weekday";case"W":return"weekNumber";case"k":return"weekYear";case"q":return"quarter";default:return null}},i=null;return i2(e.z)||(i=iV.create(e.z)),i2(e.Z)||(i||(i=new iK(e.Z)),t=e.Z),i2(e.q)||(e.M=(e.q-1)*3+1),i2(e.h)||(e.h<12&&1===e.a?e.h+=12:12!==e.h||0!==e.a||(e.h=0)),0===e.G&&e.y&&(e.y=-e.y),i2(e.u)||(e.S=na(e.u)),[Object.keys(e).reduce((t,i)=>{let n=a(i);return n&&(t[n]=e[i]),t},{}),i,t]}(r):[null,null,void 0];if(i5(r,"a")&&i5(r,"H"))throw new a6("Can't include meridiem when specifying 24-hour format");return{input:t,tokens:i,regex:o,rawMatches:s,matches:r,result:p,zone:l,specificOffset:d}}}function oX(e,t){if(!e)return null;let a=nR.create(t,e).dtFormatter((oU||(oU=sc.fromMillis(1555555555555)),oU)),i=a.formatToParts(),n=a.resolvedOptions();return i.map(t=>(function(e,t,a){let{type:i,value:n}=e;if("literal"===i){let e=/^\s+$/.test(n);return{literal:!e,val:e?" ":n}}let o=t[i],s=i;"hour"===i&&(s=null!=t.hour12?t.hour12?"hour12":"hour24":null!=t.hourCycle?"h11"===t.hourCycle||"h12"===t.hourCycle?"hour12":"hour24":a.hour12?"hour12":"hour24");let r=oF[s];if("object"==typeof r&&(r=r[o]),r)return{literal:!1,val:r}})(t,e,n))}const oL=[0,31,59,90,120,151,181,212,243,273,304,334],oD=[0,31,60,91,121,152,182,213,244,274,305,335];function oK(e,t){return new nV("unit out of range",`you specified ${t} (of type ${typeof t}) as a ${e}, which is invalid`)}function oJ(e,t,a){let i=new Date(Date.UTC(e,t-1,a));e<100&&e>=0&&i.setUTCFullYear(i.getUTCFullYear()-1900);let n=i.getUTCDay();return 0===n?7:n}function oz(e,t){let a=nn(e)?oD:oL,i=a.findIndex(e=>enp(t)?(r=t+1,s=1):r=t,{weekYear:r,weekNumber:s,weekday:o,...nh(e)}}function oP(e){let{weekYear:t,weekNumber:a,weekday:i}=e,n=oJ(t,1,4),o=no(t),s=7*a+i-n-3,r;s<1?s+=no(r=t-1):s>o?(r=t+1,s-=no(t)):r=t;let{month:p,day:l}=oz(r,s);return{year:r,month:p,day:l,...nh(e)}}function oM(e){let{year:t,month:a,day:i}=e,n=i+(nn(t)?oD:oL)[a-1];return{year:t,ordinal:n,...nh(e)}}function oQ(e){let{year:t,ordinal:a}=e,{month:i,day:n}=oz(t,a);return{year:t,month:i,day:n,...nh(e)}}function oq(e){let t=i9(e.year),a=i8(e.month,1,12),i=i8(e.day,1,ns(e.year,e.month));return t?a?!i&&oK("day",e.day):oK("month",e.month):oK("year",e.year)}function o$(e){let{hour:t,minute:a,second:i,millisecond:n}=e,o=i8(t,0,23)||24===t&&0===a&&0===i&&0===n,s=i8(a,0,59),r=i8(i,0,59),p=i8(n,0,999);return o?s?r?!p&&oK("millisecond",n):oK("second",i):oK("minute",a):oK("hour",t)}const o1="Invalid DateTime";function o0(e){return new nV("unsupported zone",`the zone "${e.name}" is not supported`)}function o2(e){return null===e.weekData&&(e.weekData=oj(e.c)),e.weekData}function o4(e,t){let a={ts:e.ts,zone:e.zone,c:e.c,o:e.o,loc:e.loc,invalid:e.invalid};return new sc({...a,...t,old:a})}function o9(e,t,a){let i=e-6e4*t,n=a.offset(i);if(t===n)return[i,t];i-=(n-t)*6e4;let o=a.offset(i);return n===o?[i,n]:[e-6e4*Math.min(n,o),Math.max(n,o)]}function o6(e,t){let a=new Date(e+=6e4*t);return{year:a.getUTCFullYear(),month:a.getUTCMonth()+1,day:a.getUTCDate(),hour:a.getUTCHours(),minute:a.getUTCMinutes(),second:a.getUTCSeconds(),millisecond:a.getUTCMilliseconds()}}function o3(e,t){let a=e.o,i=e.c.year+Math.trunc(t.years),n=e.c.month+Math.trunc(t.months)+3*Math.trunc(t.quarters),o={...e.c,year:i,month:n,day:Math.min(e.c.day,ns(i,n))+Math.trunc(t.days)+7*Math.trunc(t.weeks)},s=oC.fromObject({years:t.years-Math.trunc(t.years),quarters:t.quarters-Math.trunc(t.quarters),months:t.months-Math.trunc(t.months),weeks:t.weeks-Math.trunc(t.weeks),days:t.days-Math.trunc(t.days),hours:t.hours,minutes:t.minutes,seconds:t.seconds,milliseconds:t.milliseconds}).as("milliseconds"),[r,p]=o9(nr(o),a,e.zone);return 0!==s&&(r+=s,p=e.zone.offset(r)),{ts:r,o:p}}function o5(e,t,a,i,n,o){let{setZone:s,zone:r}=a;if((!e||0===Object.keys(e).length)&&!t)return sc.invalid(new nV("unparsable",`the input "${n}" can't be parsed as ${i}`));{let i=sc.fromObject(e,{...a,zone:t||r,specificOffset:o});return s?i:i.setZone(r)}}function o8(e,t,a=!0){return e.isValid?nR.create(iL.create("en-US"),{allowZ:a,forceSimple:!0}).formatDateTimeFromString(e,t):null}function o7(e,t){let a=e.c.year>9999||e.c.year<0,i="";return a&&e.c.year>=0&&(i+="+"),i+=i7(e.c.year,a?6:4),t?i+="-"+i7(e.c.month)+"-"+i7(e.c.day):i+=i7(e.c.month)+i7(e.c.day),i}function se(e,t,a,i,n,o){let s=i7(e.c.hour);return t?(s+=":"+i7(e.c.minute),0===e.c.millisecond&&0===e.c.second&&a||(s+=":")):s+=i7(e.c.minute),0===e.c.millisecond&&0===e.c.second&&a||(s+=i7(e.c.second),0===e.c.millisecond&&i||(s+="."+i7(e.c.millisecond,3))),n&&(e.isOffsetFixed&&0===e.offset&&!o?s+="Z":e.o<0?s+="-"+i7(Math.trunc(-e.o/60))+":"+i7(Math.trunc(-e.o%60)):s+="+"+i7(Math.trunc(e.o/60))+":"+i7(Math.trunc(e.o%60))),o&&(s+="["+e.zone.ianaName+"]"),s}const st={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},sa={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},si={ordinal:1,hour:0,minute:0,second:0,millisecond:0},sn=["year","month","day","hour","minute","second","millisecond"],so=["weekYear","weekNumber","weekday","hour","minute","second","millisecond"],ss=["year","ordinal","hour","minute","second","millisecond"];function sr(e){let t={year:"year",years:"year",month:"month",months:"month",day:"day",days:"day",hour:"hour",hours:"hour",minute:"minute",minutes:"minute",quarter:"quarter",quarters:"quarter",second:"second",seconds:"second",millisecond:"millisecond",milliseconds:"millisecond",weekday:"weekday",weekdays:"weekday",weeknumber:"weekNumber",weeksnumber:"weekNumber",weeknumbers:"weekNumber",weekyear:"weekYear",weekyears:"weekYear",ordinal:"ordinal"}[e.toLowerCase()];if(!t)throw new a3(e);return t}function sp(e,t){let a,i;let n=iz(t.zone,i0.defaultZone),o=iL.fromObject(t),s=i0.now();if(i2(e.year))a=s;else{for(let t of sn)i2(e[t])&&(e[t]=st[t]);let t=oq(e)||o$(e);if(t)return sc.invalid(t);let o=n.offset(s);[a,i]=o9(nr(e),o,n)}return new sc({ts:a,zone:n,loc:o,o:i})}function sl(e,t,a){let i=!!i2(a.round)||a.round,n=(e,n)=>(e=ni(e,i||a.calendary?0:2,!0),t.loc.clone(a).relFormatter(a).format(e,n)),o=i=>a.calendary?t.hasSame(e,i)?0:t.startOf(i).diff(e.startOf(i),i).get(i):t.diff(e,i).get(i);if(a.unit)return n(o(a.unit),a.unit);for(let e of a.units){let t=o(e);if(Math.abs(t)>=1)return n(t,e)}return n(e>t?-0:0,a.units[a.units.length-1])}function sd(e){let t={},a;return e.length>0&&"object"==typeof e[e.length-1]?(t=e[e.length-1],a=Array.from(e).slice(0,e.length-1)):a=Array.from(e),[t,a]}class sc{constructor(e){let t=e.zone||i0.defaultZone,a=e.invalid||(Number.isNaN(e.ts)?new nV("invalid input"):null)||(t.isValid?null:o0(t));this.ts=i2(e.ts)?i0.now():e.ts;let i=null,n=null;if(!a){if(e.old&&e.old.ts===this.ts&&e.old.zone.equals(t))[i,n]=[e.old.c,e.old.o];else{let e=t.offset(this.ts);i=(a=Number.isNaN((i=o6(this.ts,e)).year)?new nV("invalid input"):null)?null:i,n=a?null:e}}this._zone=t,this.loc=e.loc||iL.create(),this.invalid=a,this.weekData=null,this.c=i,this.o=n,this.isLuxonDateTime=!0}static now(){return new sc({})}static local(){let[e,t]=sd(arguments),[a,i,n,o,s,r,p]=t;return sp({year:a,month:i,day:n,hour:o,minute:s,second:r,millisecond:p},e)}static utc(){let[e,t]=sd(arguments),[a,i,n,o,s,r,p]=t;return e.zone=iK.utcInstance,sp({year:a,month:i,day:n,hour:o,minute:s,second:r,millisecond:p},e)}static fromJSDate(e,t={}){let a="[object Date]"===Object.prototype.toString.call(e)?e.valueOf():NaN;if(Number.isNaN(a))return sc.invalid("invalid input");let i=iz(t.zone,i0.defaultZone);return i.isValid?new sc({ts:a,zone:i,loc:iL.fromObject(t)}):sc.invalid(o0(i))}static fromMillis(e,t={}){if(i4(e))return e<-864e13||e>864e13?sc.invalid("Timestamp out of range"):new sc({ts:e,zone:iz(t.zone,i0.defaultZone),loc:iL.fromObject(t)});throw new a5(`fromMillis requires a numerical input, but received a ${typeof e} with value ${e}`)}static fromSeconds(e,t={}){if(i4(e))return new sc({ts:1e3*e,zone:iz(t.zone,i0.defaultZone),loc:iL.fromObject(t)});throw new a5("fromSeconds requires a numerical input")}static fromObject(e,t={}){e=e||{};let a=iz(t.zone,i0.defaultZone);if(!a.isValid)return sc.invalid(o0(a));let i=i0.now(),n=i2(t.specificOffset)?a.offset(i):t.specificOffset,o=nm(e,sr),s=!i2(o.ordinal),r=!i2(o.year),p=!i2(o.month)||!i2(o.day),l=r||p,d=o.weekYear||o.weekNumber,c=iL.fromObject(t);if((l||s)&&d)throw new a6("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(p&&s)throw new a6("Can't mix ordinal dates with month/day");let u=d||o.weekday&&!l,m,g,h=o6(i,n);u?(m=so,g=sa,h=oj(h)):s?(m=ss,g=si,h=oM(h)):(m=sn,g=st);let b=!1;for(let e of m)i2(o[e])?b?o[e]=g[e]:o[e]=h[e]:b=!0;let f=(u?function(e){let t=i9(e.weekYear),a=i8(e.weekNumber,1,np(e.weekYear)),i=i8(e.weekday,1,7);return t?a?!i&&oK("weekday",e.weekday):oK("week",e.week):oK("weekYear",e.weekYear)}(o):s?function(e){let t=i9(e.year),a=i8(e.ordinal,1,no(e.year));return t?!a&&oK("ordinal",e.ordinal):oK("year",e.year)}(o):oq(o))||o$(o);if(f)return sc.invalid(f);let[v,I]=o9(nr(u?oP(o):s?oQ(o):o),n,a),C=new sc({ts:v,zone:a,o:I,loc:c});return o.weekday&&l&&e.weekday!==C.weekday?sc.invalid("mismatched weekday",`you can't specify both a weekday of ${o.weekday} and a date of ${C.toISO()}`):C}static fromISO(e,t={}){let[a,i]=nk(e,[n7,oi],[oe,on],[ot,oo],[oa,os]);return o5(a,i,t,"ISO 8601",e)}static fromRFC2822(e,t={}){let[a,i]=nk(e.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim(),[n2,n4]);return o5(a,i,t,"RFC 2822",e)}static fromHTTP(e,t={}){let[a,i]=nk(e,[n9,n5],[n6,n5],[n3,n8]);return o5(a,i,t,"HTTP",t)}static fromFormat(e,t,a={}){if(i2(e)||i2(t))throw new a5("fromFormat requires an input string and a format");let{locale:i=null,numberingSystem:n=null}=a,[o,s,r,p]=function(e,t,a){let{result:i,zone:n,specificOffset:o,invalidReason:s}=oO(e,t,a);return[i,n,o,s]}(iL.fromOpts({locale:i,numberingSystem:n,defaultToEN:!0}),e,t);return p?sc.invalid(p):o5(o,s,a,`format ${t}`,e,r)}static fromString(e,t,a={}){return sc.fromFormat(e,t,a)}static fromSQL(e,t={}){let[a,i]=nk(e,[op,oi],[ol,od]);return o5(a,i,t,"SQL",e)}static invalid(e,t=null){if(!e)throw new a5("need to specify a reason the DateTime is invalid");let a=e instanceof nV?e:new nV(e,t);if(!i0.throwOnInvalid)return new sc({invalid:a});throw new a2(a)}static isDateTime(e){return e&&e.isLuxonDateTime||!1}static parseFormatForOpts(e,t={}){let a=oX(e,iL.fromObject(t));return a?a.map(e=>e?e.val:null).join(""):null}static expandFormat(e,t={}){return oY(nR.parseFormat(e),iL.fromObject(t)).map(e=>e.val).join("")}get(e){return this[e]}get isValid(){return null===this.invalid}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}get outputCalendar(){return this.isValid?this.loc.outputCalendar:null}get zone(){return this._zone}get zoneName(){return this.isValid?this.zone.name:null}get year(){return this.isValid?this.c.year:NaN}get quarter(){return this.isValid?Math.ceil(this.c.month/3):NaN}get month(){return this.isValid?this.c.month:NaN}get day(){return this.isValid?this.c.day:NaN}get hour(){return this.isValid?this.c.hour:NaN}get minute(){return this.isValid?this.c.minute:NaN}get second(){return this.isValid?this.c.second:NaN}get millisecond(){return this.isValid?this.c.millisecond:NaN}get weekYear(){return this.isValid?o2(this).weekYear:NaN}get weekNumber(){return this.isValid?o2(this).weekNumber:NaN}get weekday(){return this.isValid?o2(this).weekday:NaN}get ordinal(){return this.isValid?oM(this.c).ordinal:NaN}get monthShort(){return this.isValid?ox.months("short",{locObj:this.loc})[this.month-1]:null}get monthLong(){return this.isValid?ox.months("long",{locObj:this.loc})[this.month-1]:null}get weekdayShort(){return this.isValid?ox.weekdays("short",{locObj:this.loc})[this.weekday-1]:null}get weekdayLong(){return this.isValid?ox.weekdays("long",{locObj:this.loc})[this.weekday-1]:null}get offset(){return this.isValid?+this.o:NaN}get offsetNameShort(){return this.isValid?this.zone.offsetName(this.ts,{format:"short",locale:this.locale}):null}get offsetNameLong(){return this.isValid?this.zone.offsetName(this.ts,{format:"long",locale:this.locale}):null}get isOffsetFixed(){return this.isValid?this.zone.isUniversal:null}get isInDST(){return!this.isOffsetFixed&&(this.offset>this.set({month:1,day:1}).offset||this.offset>this.set({month:5}).offset)}getPossibleOffsets(){if(!this.isValid||this.isOffsetFixed)return[this];let e=nr(this.c),t=this.zone.offset(e-864e5),a=this.zone.offset(e+864e5),i=this.zone.offset(e-6e4*t),n=this.zone.offset(e-6e4*a);if(i===n)return[this];let o=e-6e4*i,s=e-6e4*n,r=o6(o,i),p=o6(s,n);return r.hour===p.hour&&r.minute===p.minute&&r.second===p.second&&r.millisecond===p.millisecond?[o4(this,{ts:o}),o4(this,{ts:s})]:[this]}get isInLeapYear(){return nn(this.year)}get daysInMonth(){return ns(this.year,this.month)}get daysInYear(){return this.isValid?no(this.year):NaN}get weeksInWeekYear(){return this.isValid?np(this.weekYear):NaN}resolvedLocaleOptions(e={}){let{locale:t,numberingSystem:a,calendar:i}=nR.create(this.loc.clone(e),e).resolvedOptions(this);return{locale:t,numberingSystem:a,outputCalendar:i}}toUTC(e=0,t={}){return this.setZone(iK.instance(e),t)}toLocal(){return this.setZone(i0.defaultZone)}setZone(e,{keepLocalTime:t=!1,keepCalendarTime:a=!1}={}){if((e=iz(e,i0.defaultZone)).equals(this.zone))return this;{if(!e.isValid)return sc.invalid(o0(e));let n=this.ts;if(t||a){var i;let t=e.offset(this.ts),a=this.toObject();[n]=(i=e,o9(nr(a),t,i))}return o4(this,{ts:n,zone:e})}}reconfigure({locale:e,numberingSystem:t,outputCalendar:a}={}){return o4(this,{loc:this.loc.clone({locale:e,numberingSystem:t,outputCalendar:a})})}setLocale(e){return this.reconfigure({locale:e})}set(e){var t,a,i;let n;if(!this.isValid)return this;let o=nm(e,sr),s=!i2(o.weekYear)||!i2(o.weekNumber)||!i2(o.weekday),r=!i2(o.ordinal),p=!i2(o.year),l=!i2(o.month)||!i2(o.day),d=o.weekYear||o.weekNumber;if((p||l||r)&&d)throw new a6("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(l&&r)throw new a6("Can't mix ordinal dates with month/day");s?n=oP({...oj(this.c),...o}):i2(o.ordinal)?(n={...this.toObject(),...o},i2(o.day)&&(n.day=Math.min(ns(n.year,n.month),n.day))):n=oQ({...oM(this.c),...o});let[c,u]=(t=n,a=this.o,i=this.zone,o9(nr(t),a,i));return o4(this,{ts:c,o:u})}plus(e){return this.isValid?o4(this,o3(this,oC.fromDurationLike(e))):this}minus(e){return this.isValid?o4(this,o3(this,oC.fromDurationLike(e).negate())):this}startOf(e){if(!this.isValid)return this;let t={},a=oC.normalizeUnit(e);switch(a){case"years":t.month=1;case"quarters":case"months":t.day=1;case"weeks":case"days":t.hour=0;case"hours":t.minute=0;case"minutes":t.second=0;case"seconds":t.millisecond=0}if("weeks"===a&&(t.weekday=1),"quarters"===a){let e=Math.ceil(this.month/3);t.month=(e-1)*3+1}return this.set(t)}endOf(e){return this.isValid?this.plus({[e]:1}).startOf(e).minus(1):this}toFormat(e,t={}){return this.isValid?nR.create(this.loc.redefaultToEN(t)).formatDateTimeFromString(this,e):o1}toLocaleString(e=ia,t={}){return this.isValid?nR.create(this.loc.clone(t),e).formatDateTime(this):o1}toLocaleParts(e={}){return this.isValid?nR.create(this.loc.clone(e),e).formatDateTimeParts(this):[]}toISO({format:e="extended",suppressSeconds:t=!1,suppressMilliseconds:a=!1,includeOffset:i=!0,extendedZone:n=!1}={}){if(!this.isValid)return null;let o="extended"===e;return o7(this,o)+"T"+se(this,o,t,a,i,n)}toISODate({format:e="extended"}={}){return this.isValid?o7(this,"extended"===e):null}toISOWeekDate(){return o8(this,"kkkk-'W'WW-c")}toISOTime({suppressMilliseconds:e=!1,suppressSeconds:t=!1,includeOffset:a=!0,includePrefix:i=!1,extendedZone:n=!1,format:o="extended"}={}){return this.isValid?(i?"T":"")+se(this,"extended"===o,t,e,a,n):null}toRFC2822(){return o8(this,"EEE, dd LLL yyyy HH:mm:ss ZZZ",!1)}toHTTP(){return o8(this.toUTC(),"EEE, dd LLL yyyy HH:mm:ss 'GMT'")}toSQLDate(){return this.isValid?o7(this,!0):null}toSQLTime({includeOffset:e=!0,includeZone:t=!1,includeOffsetSpace:a=!0}={}){let i="HH:mm:ss.SSS";return(t||e)&&(a&&(i+=" "),t?i+="z":e&&(i+="ZZ")),o8(this,i,!0)}toSQL(e={}){return this.isValid?`${this.toSQLDate()} ${this.toSQLTime(e)}`:null}toString(){return this.isValid?this.toISO():o1}valueOf(){return this.toMillis()}toMillis(){return this.isValid?this.ts:NaN}toSeconds(){return this.isValid?this.ts/1e3:NaN}toUnixInteger(){return this.isValid?Math.floor(this.ts/1e3):NaN}toJSON(){return this.toISO()}toBSON(){return this.toJSDate()}toObject(e={}){if(!this.isValid)return{};let t={...this.c};return e.includeConfig&&(t.outputCalendar=this.outputCalendar,t.numberingSystem=this.loc.numberingSystem,t.locale=this.loc.locale),t}toJSDate(){return new Date(this.isValid?this.ts:NaN)}diff(e,t="milliseconds",a={}){if(!this.isValid||!e.isValid)return oC.invalid("created by diffing an invalid DateTime");let i={locale:this.locale,numberingSystem:this.numberingSystem,...a},n=(Array.isArray(t)?t:[t]).map(oC.normalizeUnit),o=e.valueOf()>this.valueOf(),s=function(e,t,a,i){let[n,o,s,r]=function(e,t,a){let i,n;let o={},s=e;for(let[r,p]of[["years",(e,t)=>t.year-e.year],["quarters",(e,t)=>t.quarter-e.quarter+(t.year-e.year)*4],["months",(e,t)=>t.month-e.month+(t.year-e.year)*12],["weeks",(e,t)=>{let a=oA(e,t);return(a-a%7)/7}],["days",oA]])a.indexOf(r)>=0&&(i=r,o[r]=p(e,t),(n=s.plus(o))>t?(o[r]--,(e=s.plus(o))>t&&(n=e,o[r]--,e=s.plus(o))):e=n);return[e,o,n,i]}(e,t,a),p=t-n,l=a.filter(e=>["hours","minutes","seconds","milliseconds"].indexOf(e)>=0);0===l.length&&(s0?oC.fromMillis(p,i).shiftTo(...l).plus(d):d}(o?this:e,o?e:this,n,i);return o?s.negate():s}diffNow(e="milliseconds",t={}){return this.diff(sc.now(),e,t)}until(e){return this.isValid?ow.fromDateTimes(this,e):this}hasSame(e,t){if(!this.isValid)return!1;let a=e.valueOf(),i=this.setZone(e.zone,{keepLocalTime:!0});return i.startOf(t)<=a&&a<=i.endOf(t)}equals(e){return this.isValid&&e.isValid&&this.valueOf()===e.valueOf()&&this.zone.equals(e.zone)&&this.loc.equals(e.loc)}toRelative(e={}){if(!this.isValid)return null;let t=e.base||sc.fromObject({},{zone:this.zone}),a=e.padding?thise.valueOf(),Math.min)}static max(...e){if(!e.every(sc.isDateTime))throw new a5("max requires all arguments be DateTimes");return i3(e,e=>e.valueOf(),Math.max)}static fromFormatExplain(e,t,a={}){let{locale:i=null,numberingSystem:n=null}=a;return oO(iL.fromOpts({locale:i,numberingSystem:n,defaultToEN:!0}),e,t)}static fromStringExplain(e,t,a={}){return sc.fromFormatExplain(e,t,a)}static get DATE_SHORT(){return ia}static get DATE_MED(){return ii}static get DATE_MED_WITH_WEEKDAY(){return io}static get DATE_FULL(){return is}static get DATE_HUGE(){return ir}static get TIME_SIMPLE(){return ip}static get TIME_WITH_SECONDS(){return il}static get TIME_WITH_SHORT_OFFSET(){return id}static get TIME_WITH_LONG_OFFSET(){return ic}static get TIME_24_SIMPLE(){return iu}static get TIME_24_WITH_SECONDS(){return im}static get TIME_24_WITH_SHORT_OFFSET(){return ig}static get TIME_24_WITH_LONG_OFFSET(){return ih}static get DATETIME_SHORT(){return ib}static get DATETIME_SHORT_WITH_SECONDS(){return iv}static get DATETIME_MED(){return iI}static get DATETIME_MED_WITH_SECONDS(){return iC}static get DATETIME_MED_WITH_WEEKDAY(){return iy}static get DATETIME_FULL(){return iw}static get DATETIME_FULL_WITH_SECONDS(){return ix}static get DATETIME_HUGE(){return iA}static get DATETIME_HUGE_WITH_SECONDS(){return iG}}function su(e){if(sc.isDateTime(e))return e;if(e&&e.valueOf&&i4(e.valueOf()))return sc.fromJSDate(e);if(e&&"object"==typeof e)return sc.fromObject(e);throw new a5(`Unknown datetime argument: ${e}, of type ${typeof e}`)}var sm={};Object.defineProperty(sm,"__esModule",{value:!0}),sm.getLogFile=void 0;const sg=async e=>{let t=(0,A.join)((0,az.getMeticulousLocalDataDir)(),"logs");return await (0,N.mkdir)(t,{recursive:!0}),(0,A.join)(t,`${e}.log`)};sm.getLogFile=sg;const sh=()=>(0,E.createHash)("sha256").update((0,E.randomUUID)()).digest("hex").slice(0,8),sb=()=>new Promise((e,t)=>{(0,R.exec)("uname -a",{encoding:"utf-8"},(a,i)=>{if(a){t(a);return}e(i)})}),sf=()=>new Promise((e,t)=>{(0,R.exec)("npm config get",{encoding:"utf-8"},(a,i)=>{if(a){t(a);return}e(i)})});class sv{constructor(e,t,a,i){this.invocationId=e,this.logFilePath=t,this.logFile=a,this.writeStream=i}log(e){this.writeStream.write(e),this.writeStream.write("\n")}logObject(e){this.log(JSON.stringify(e,null,2))}async logStart(){console.log(`Recording detailed log file in ${this.logFilePath}`);let e=await sb().catch(e=>`Error: ${e}`),t=process.cwd(),a=process.argv,i=process.execArgv,n=(0,az.getMeticulousLocalDataDir)();this.log("Invocation:"),this.logObject({uname:e,cwd:t,argv:a,execArgv:i,meticulousLocalDataDir:n});let o=await sf().catch(e=>`Error: ${e}`);this.log("NPM config:"),this.logObject({npmConfig:o})}static async create(){let e=sv.genereteInvocationId(),t=await (0,sm.getLogFile)(e),a=await (0,N.open)(t,"ax"),i=a.createWriteStream({encoding:"utf-8"}),n=new sv(e,t,a,i);return await n.logStart(),n}static genereteInvocationId(){let e=sc.utc();return`${e.toISO()}_${sh()}`}}a1.DebugLogger=sv,Object.defineProperty(aK,"DebugLogger",{enumerable:!0,get:function(){return a1.DebugLogger}});var sI={};Object.defineProperty(sI,"__esModule",{value:!0}),sI.COMMON_CHROMIUM_FLAGS=sI.DEFAULT_SCREENSHOTTING_OPTIONS=sI.DEFAULT_EXECUTION_OPTIONS=sI.IS_METICULOUS_SUPER_USER=sI.BASE_SNIPPETS_URL=void 0,sI.BASE_SNIPPETS_URL="https://snippet.meticulous.ai/",sI.IS_METICULOUS_SUPER_USER=!!process.env.METICULOUS_SUPER_USER,sI.DEFAULT_EXECUTION_OPTIONS={headless:!0,devTools:!1,bypassCSP:!1,shiftTime:!0,networkStubbing:!0,skipPauses:!0,moveBeforeMouseEvent:!0,disableRemoteFonts:!1,noSandbox:!1,maxDurationMs:3e5,maxEventCount:null,essentialFeaturesOnly:!1,logPossibleNonDeterminism:!1},sI.DEFAULT_SCREENSHOTTING_OPTIONS={enabled:!0,storyboardOptions:{enabled:!0},diffOptions:{diffThreshold:1e-5,diffPixelThreshold:.01}},sI.COMMON_CHROMIUM_FLAGS=["--disable-features=Translate,WebFontsCacheAwareTimeoutAdaption","--disable-background-timer-throttling","--disable-renderer-backgrounding","--disable-backgrounding-occluded-windows","--disable-breakpad","--disable-client-side-phishing-detection","--disable-default-apps","--disable-dev-shm-usage","--disable-extensions","--disable-hang-monitor","--disable-ipc-flooding-protection","--disable-notifications","--disable-prompt-on-repost","--disable-sync","--no-first-run","--blink-settings=imageAnimationPolicy=2","--disable-smooth-scrolling"],Object.defineProperty(aK,"DEFAULT_EXECUTION_OPTIONS",{enumerable:!0,get:function(){return sI.DEFAULT_EXECUTION_OPTIONS}}),Object.defineProperty(aK,"DEFAULT_SCREENSHOTTING_OPTIONS",{enumerable:!0,get:function(){return sI.DEFAULT_SCREENSHOTTING_OPTIONS}}),Object.defineProperty(aK,"BASE_SNIPPETS_URL",{enumerable:!0,get:function(){return sI.BASE_SNIPPETS_URL}}),Object.defineProperty(aK,"COMMON_CHROMIUM_FLAGS",{enumerable:!0,get:function(){return sI.COMMON_CHROMIUM_FLAGS}}),Object.defineProperty(aK,"IS_METICULOUS_SUPER_USER",{enumerable:!0,get:function(){return sI.IS_METICULOUS_SUPER_USER}});var sC={};Object.defineProperty(sC,"__esModule",{value:!0}),sC.getMeticulousVersion=void 0;let sy="";const sw=async e=>{if(sy)return sy;let t=JSON.parse(await (0,N.readFile)(e,{encoding:"utf-8"})).version||"unknown";return sy=`sdk-v${t}`};sC.getMeticulousVersion=sw,Object.defineProperty(aK,"getMeticulousVersion",{enumerable:!0,get:function(){return sC.getMeticulousVersion}});var sx={},sA=sx&&sx.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(sx,"__esModule",{value:!0}),sx.getCommitSha=void 0;const sG=sA(O("7SZkG")),sS=()=>new Promise((e,t)=>{(0,R.exec)("git rev-parse HEAD",{encoding:"utf-8"},(a,i)=>{if(a){t(a);return}e(i)})}),sB=async e=>{if(e)return e;let t=sG.default.getLogger(aM.METICULOUS_LOGGER_NAME);try{return(await sS()).trim()}catch(e){if(e instanceof Error&&e.message.startsWith("Command failed"))return t.info("Notice: not running in a git repository"),"";return t.error(e),""}};sx.getCommitSha=sB,Object.defineProperty(aK,"getCommitSha",{enumerable:!0,get:function(){return sx.getCommitSha}});const sZ=aD(O("7SZkG"));aL.getApiToken=e=>{let t=sZ.default.getLogger(aK.METICULOUS_LOGGER_NAME);if(e)return e;if(process.env.METICULOUS_API_TOKEN)return process.env.METICULOUS_API_TOKEN;let a=(0,A.join)((0,w.homedir)(),".meticulous/config.json");if((0,y.existsSync)(a)){let e=JSON.parse((0,y.readFileSync)(a).toString("utf-8"));if(e.apiToken)return t.info(`Using apiToken from ${a}`),e.apiToken}return null},Object.defineProperty(aI,"getApiToken",{enumerable:!0,get:function(){return aL.getApiToken}});var s_={},sT=s_&&s_.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(s_,"__esModule",{value:!0}),s_.createClient=void 0;const sR=sT(O("5mM36")),sV=sT(O("6Kcit")),sE=sT(O("7SZkG"));s_.createClient=({apiToken:e})=>{let t=(0,aL.getApiToken)(e);t||(sE.default.getLogger(aK.METICULOUS_LOGGER_NAME).error("You must provide an API token by using the --apiToken parameter"),process.exit(1));let a=sR.default.create({baseURL:sN(),headers:{authorization:t},timeout:6e4});return(0,sV.default)(a,{retries:3}),a};const sN=()=>process.env.METICULOUS_API_URL?process.env.METICULOUS_API_URL:"https://app.meticulous.ai/api/";Object.defineProperty(aI,"createClient",{enumerable:!0,get:function(){return s_.createClient}});var sW={},sk=sW&&sW.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(sW,"__esModule",{value:!0}),sW.executeRemoteTestRun=void 0;var sH={};Object.defineProperty(sH,"__esModule",{value:!0}),sH.localtunnel=void 0;var sF={};Object.defineProperty(sF,"__esModule",{value:!0}),sF.localtunnel=void 0;var sU={},sY=sU&&sU.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(sU,"__esModule",{value:!0}),sU.Tunnel=void 0;const sO=sY(O("5mM36")),sX=sY(O("6Kcit"));var sL={},sD=sL&&sL.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a);var n=Object.getOwnPropertyDescriptor(t,a);(!n||("get"in n?!t.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,i,n)}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),sK=sL&&sL.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),sJ=sL&&sL.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&sD(t,e,a);return sK(t,e),t},sz=sL&&sL.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(sL,"__esModule",{value:!0}),sL.TunnelCluster=void 0;const sj=sz(v),sP=sJ(b),sM=sJ(f);var sQ={};Object.defineProperty(sQ,"__esModule",{value:!0}),sQ.HeaderHostTransformer=void 0;class sq extends S.Transform{constructor(e){super(e),this.host=e.host||"localhost",this.replaced=!1}_transform(e,t,a){a(null,this.replaced?e:e.toString().replace(/(\r\n[Hh]ost: )\S+/,(e,t)=>(this.replaced=!0,t+this.host)))}}sQ.HeaderHostTransformer=sq;class s$ extends sj.default{constructor(e){super(),this.logger=e.logger,this.opts=e}open(){let e;let t=this.opts,a=t.remoteHost,i=t.remotePort,n=t.localHost,o=t.localPort,s=t.localHttps?"https":"http",r=t.allowInvalidCert;this.logger.debug("establishing tunnel %s://%s:%s <> %s:%s",s,n,o,a,i),(e=t.useTls?sM.connect({host:a,port:i,rejectUnauthorized:!0}):sP.connect({host:a,port:i})).setKeepAlive(!0),e.on("error",t=>{this.logger.debug("got remote connection error",t.message),"ECONNREFUSED"===t.code&&this.emit("error",Error(`connection refused: ${a}:${i} (check your firewall settings)`)),e.end()});let p=()=>{let a;if(e.destroyed){this.logger.debug("remote destroyed"),this.emit("dead");return}if(this.logger.debug("connecting locally to %s://%s:%d",s,n,o),e.write(`AUTH ${t.tunnelPassphrase}`),e.pause(),t.localHttps){if(r)this.logger.debug("allowing invalid certificates");else{if(!t.localCert)throw Error("local_cert is required for https");if(!t.localKey)throw Error("local_key is required for https")}a=sM.connect({host:n,port:o,...r?{rejectUnauthorized:!1}:{cert:(0,y.readFileSync)(t.localCert),key:(0,y.readFileSync)(t.localKey),ca:t.localCa?[(0,y.readFileSync)(t.localCa)]:void 0}})}else a=sP.connect({host:n,port:o});let i=()=>{this.logger.debug("remote close"),this.emit("dead"),a.end()};e.once("close",i),a.once("error",t=>{if(this.logger.debug("local error %s",t.message),a.end(),e.removeListener("close",i),"ECONNREFUSED"!==t.code&&"ECONNRESET"!==t.code)return e.end();setTimeout(p,1e3)}),a.once("connect",()=>{this.logger.debug("connected locally"),e.resume();let i=e;t.localHost&&(this.logger.debug("transform Host header to %s",t.localHost),i=e.pipe(new sQ.HeaderHostTransformer({host:t.localHost}))),i.pipe(a).pipe(e),a.once("close",e=>{this.logger.debug("local connection closed [%s]",e)})})};e.on("data",e=>{let t=e.toString().match(/^(\w+) (\S+)/);t&&this.emit("request",{method:t[1],path:t[2]})});let l=t.useTls?"secureConnect":"connect";e.once(l,()=>{this.emit("open",e),p()})}}sL.TunnelCluster=s$;class s1 extends v.EventEmitter{constructor(e){super(),this.tunnelCluster=null,this.clientId=null,this.url=null,this.basicAuthUser=null,this.basicAuthPassword=null,this.logger=e.logger,this.opts=e,this.closed=!1,this.host=e.host||"https://tunnels.meticulous.ai"}_getInfo(e){let{id:t,port:a,url:i,max_conn_count:n,tunnel_passphrase:o,basic_auth_user:s,basic_auth_password:r}=e,{port:p,localHost:l}=this.opts,{localHttps:d,localCert:c,localKey:u,localCa:m,allowInvalidCert:g}=this.opts,h=new URL(this.host),b="https:"===h.protocol;return{name:t,url:i,maxConn:n||1,remoteHost:h.hostname,remotePort:a,useTls:b,tunnelPassphrase:o,basicAuthUser:s,basicAuthPassword:r,localPort:p,localHost:l,localHttps:d,localCert:c,localKey:u,localCa:m,allowInvalidCert:g}}_init(e){let t=this.opts,a=this._getInfo.bind(this),i={responseType:"json",headers:{Authorization:t.apiToken}},n=`${this.host}/`+(t.subdomain||"?new"),o=()=>{let t=sO.default.create({timeout:3e4});(0,sX.default)(t,{retries:3,shouldResetTimeout:!0}),t.get(n,i).then(t=>{let i=t.data;if(this.logger.debug("got tunnel information",t.data),200!==t.status)return e(Error(i&&i.error||"localtunnel server returned an error, please try again"));e(null,a(i))}).catch(e=>(this.logger.debug(`tunnel server offline: ${e.message}, retry 1s`),setTimeout(o,1e3)))};o()}_establish(e){this.setMaxListeners(e.maxConn+(v.EventEmitter.defaultMaxListeners||10)),this.tunnelCluster=new sL.TunnelCluster({...e,logger:this.logger}),this.tunnelCluster.once("open",()=>{this.emit("url",{url:e.url,basicAuthUser:e.basicAuthUser,basicAuthPassword:e.basicAuthPassword})}),this.tunnelCluster.on("error",e=>{this.logger.debug("got socket error",e.message),this.emit("error",e)});let t=0;this.tunnelCluster.on("open",e=>{t++,this.logger.debug("tunnel open [total: %d]",t);let a=()=>{e.destroy()};if(this.closed)return a();this.once("close",a),e.once("close",()=>{this.removeListener("close",a)})}),this.tunnelCluster.on("dead",()=>{t--,this.logger.debug("tunnel dead [total: %d]",t),!this.closed&&this.tunnelCluster&&this.tunnelCluster.open()}),this.tunnelCluster.on("request",e=>{this.emit("request",e)});for(let t=0;t{if(t||!a)return e(t||void 0);this.clientId=a.name,this.url=a.url,this.basicAuthUser=a.basicAuthUser,this.basicAuthPassword=a.basicAuthPassword,this._establish(a),e()})}close(){this.closed=!0,this.emit("close")}}sU.Tunnel=s1,sF.localtunnel=e=>{let t=new sU.Tunnel(e);return new Promise((e,a)=>t.open(i=>i?a(i):e(t)))},Object.defineProperty(sH,"localtunnel",{enumerable:!0,get:function(){return sF.localtunnel}});const s0=sk(O("7SZkG"));var s2={};Object.defineProperty(s2,"__esModule",{value:!0}),s2.getPort=void 0,s2.getPort=function(e){if(""===e.port)switch(e.protocol){case"http:":case"ws:":return 80;case"https:":case"wss:":return 443;case"ftp:":return 21;default:return -1}let t=parseInt(e.port,10);return isNaN(t)?-1:t};const s4=async({apiToken:e,appUrl:t,commitSha:a,onTunnelCreated:i,onTestRunCreated:n,onProgressUpdate:o,keepTunnelOpenPromise:s,environment:r})=>{let p,l;let d=s0.default.getLogger(aK.METICULOUS_LOGGER_NAME),c=(0,aI.getApiToken)(e);c||(d.error("You must provide an API token by using the --apiToken parameter"),process.exit(1));let u=(0,aI.createClient)({apiToken:c});try{p=new URL(t)}catch(e){throw Error(`Invalid app URL: ${t}`)}let m=(0,s2.getPort)(p);if(-1===m)throw Error(`Invalid app URL port: ${t}`);let g=await (0,sH.localtunnel)({logger:d,apiToken:c,localHost:p.hostname,port:m,localHttps:!1,allowInvalidCert:!1});if(d.debug("Creating test run"),!g.url||!g.basicAuthUser||!g.basicAuthPassword)throw Error("Either Tunnel URL, basic auth user or basic auth password were not set");null==i||i({url:g.url,basicAuthUser:g.basicAuthUser,basicAuthPassword:g.basicAuthPassword});let h=await (0,aI.executeSecureTunnelTestRun)({client:u,headSha:a,tunnelUrl:g.url,basicAuthUser:g.basicAuthUser,basicAuthPassword:g.basicAuthPassword,environment:r});if(!h)throw Error("Test run was not created");null==n||n(h);let b=(0,aK.defer)(),f=e=>{l&&clearInterval(l),s?s.then(()=>{g.close(),b.resolve(e)}):(g.close(),b.resolve(e))};return l=setInterval(async()=>{let e=await (0,aI.getTestRun)({client:u,testRunId:h.id});if(null==o||o(e),!aI.IN_PROGRESS_TEST_RUN_STATUS.includes(e.status)){f(e);return}},5e3),{testRun:await b.promise}};sW.executeRemoteTestRun=s4;var s9={},s6=A.resolve(__dirname,"../node_modules/@alwaysmeticulous/sentry/dist","index.js"),s3=s9&&s9.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a);var n=Object.getOwnPropertyDescriptor(t,a);(!n||("get"in n?!t.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,i,n)}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),s5=s9&&s9.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s8=s9&&s9.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&s3(t,e,a);return s5(t,e),t};Object.defineProperty(s9,"__esModule",{value:!0}),s9.initSentry=s9.SENTRY_FLUSH_TIMEOUT=void 0;var s7={};Object.defineProperty(s7,"__esModule",{value:!0}),s7.getCommitSha=s7.getMeticulousVersion=s7.IS_METICULOUS_SUPER_USER=s7.COMMON_CHROMIUM_FLAGS=s7.BASE_SNIPPETS_URL=s7.DEFAULT_SCREENSHOTTING_OPTIONS=s7.DEFAULT_EXECUTION_OPTIONS=s7.DebugLogger=s7.setLogLevel=s7.initLogger=s7.METICULOUS_LOGGER_NAME=s7.setMeticulousLocalDataDir=s7.getMeticulousLocalDataDir=s7.defer=void 0;var re={};Object.defineProperty(re,"__esModule",{value:!0}),re.defer=void 0,re.defer=function(){let e="pending",t=null,a=null,i=new Promise((e,i)=>{t=e,a=i});return i.then(()=>{e="fulfilled"},()=>{e="rejected"}),{resolve:t,reject:a,promise:i,getState:()=>e}},Object.defineProperty(s7,"defer",{enumerable:!0,get:function(){return re.defer}});var rt={},ra=rt&&rt.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(rt,"__esModule",{value:!0}),rt.setMeticulousLocalDataDir=rt.getMeticulousLocalDataDir=void 0;const ri=ra(O("7SZkG"));var rn={},ro=rn&&rn.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(rn,"__esModule",{value:!0}),rn.setLogLevel=rn.initLogger=rn.METICULOUS_LOGGER_NAME=void 0;const rs=ro(O("7SZkG"));rn.METICULOUS_LOGGER_NAME="@alwaysmeticulous",rn.initLogger=()=>{let e=rs.default.getLogger(rn.METICULOUS_LOGGER_NAME);return e.setDefaultLevel(rs.default.levels.INFO),e},rn.setLogLevel=e=>{let t=rs.default.getLogger(rn.METICULOUS_LOGGER_NAME);switch((e||"").toLocaleLowerCase()){case"trace":t.setLevel(rs.default.levels.TRACE,!1);break;case"debug":t.setLevel(rs.default.levels.DEBUG,!1);break;case"info":t.setLevel(rs.default.levels.INFO,!1);break;case"warn":t.setLevel(rs.default.levels.WARN,!1);break;case"error":t.setLevel(rs.default.levels.ERROR,!1);break;case"silent":t.setLevel(rs.default.levels.SILENT,!1)}};let rr="";rt.getMeticulousLocalDataDir=()=>{let e=ri.default.getLogger(rn.METICULOUS_LOGGER_NAME);return rr?e.debug(`Using local data dir at ${rr}`):((0,rt.setMeticulousLocalDataDir)(),e.debug(`Local data dir has not been set explictly, so defaulting to ${rr}`)),rr},rt.setMeticulousLocalDataDir=e=>{let t=ri.default.getLogger(rn.METICULOUS_LOGGER_NAME);rr&&t.warn("Meticulous local data dir has already been set by a prior call to setMeticulousLocalDataDir()"),rr=e||process.env.METICULOUS_DIR||(0,A.normalize)((0,A.join)(process.env.HOME||process.cwd(),".meticulous"))},Object.defineProperty(s7,"getMeticulousLocalDataDir",{enumerable:!0,get:function(){return rt.getMeticulousLocalDataDir}}),Object.defineProperty(s7,"setMeticulousLocalDataDir",{enumerable:!0,get:function(){return rt.setMeticulousLocalDataDir}}),Object.defineProperty(s7,"METICULOUS_LOGGER_NAME",{enumerable:!0,get:function(){return rn.METICULOUS_LOGGER_NAME}}),Object.defineProperty(s7,"initLogger",{enumerable:!0,get:function(){return rn.initLogger}}),Object.defineProperty(s7,"setLogLevel",{enumerable:!0,get:function(){return rn.setLogLevel}});var rp={};Object.defineProperty(rp,"__esModule",{value:!0}),rp.DebugLogger=void 0;var rl={};Object.defineProperty(rl,"__esModule",{value:!0}),rl.getLogFile=void 0;const rd=async e=>{let t=(0,A.join)((0,rt.getMeticulousLocalDataDir)(),"logs");return await (0,N.mkdir)(t,{recursive:!0}),(0,A.join)(t,`${e}.log`)};rl.getLogFile=rd;const rc=()=>(0,E.createHash)("sha256").update((0,E.randomUUID)()).digest("hex").slice(0,8),ru=()=>new Promise((e,t)=>{(0,R.exec)("uname -a",{encoding:"utf-8"},(a,i)=>{if(a){t(a);return}e(i)})}),rm=()=>new Promise((e,t)=>{(0,R.exec)("npm config get",{encoding:"utf-8"},(a,i)=>{if(a){t(a);return}e(i)})});class rg{constructor(e,t,a,i){this.invocationId=e,this.logFilePath=t,this.logFile=a,this.writeStream=i}log(e){this.writeStream.write(e),this.writeStream.write("\n")}logObject(e){this.log(JSON.stringify(e,null,2))}async logStart(){console.log(`Recording detailed log file in ${this.logFilePath}`);let e=await ru().catch(e=>`Error: ${e}`),t=process.cwd(),a=process.argv,i=process.execArgv,n=(0,rt.getMeticulousLocalDataDir)();this.log("Invocation:"),this.logObject({uname:e,cwd:t,argv:a,execArgv:i,meticulousLocalDataDir:n});let o=await rm().catch(e=>`Error: ${e}`);this.log("NPM config:"),this.logObject({npmConfig:o})}static async create(){let e=rg.genereteInvocationId(),t=await (0,rl.getLogFile)(e),a=await (0,N.open)(t,"ax"),i=a.createWriteStream({encoding:"utf-8"}),n=new rg(e,t,a,i);return await n.logStart(),n}static genereteInvocationId(){let e=sc.utc();return`${e.toISO()}_${rc()}`}}rp.DebugLogger=rg,Object.defineProperty(s7,"DebugLogger",{enumerable:!0,get:function(){return rp.DebugLogger}});var rh={};Object.defineProperty(rh,"__esModule",{value:!0}),rh.COMMON_CHROMIUM_FLAGS=rh.DEFAULT_SCREENSHOTTING_OPTIONS=rh.DEFAULT_EXECUTION_OPTIONS=rh.IS_METICULOUS_SUPER_USER=rh.BASE_SNIPPETS_URL=void 0,rh.BASE_SNIPPETS_URL="https://snippet.meticulous.ai/",rh.IS_METICULOUS_SUPER_USER=!!process.env.METICULOUS_SUPER_USER,rh.DEFAULT_EXECUTION_OPTIONS={headless:!0,devTools:!1,bypassCSP:!1,shiftTime:!0,networkStubbing:!0,skipPauses:!0,moveBeforeMouseEvent:!0,disableRemoteFonts:!1,noSandbox:!1,maxDurationMs:3e5,maxEventCount:null,essentialFeaturesOnly:!1,logPossibleNonDeterminism:!1},rh.DEFAULT_SCREENSHOTTING_OPTIONS={enabled:!0,storyboardOptions:{enabled:!0},diffOptions:{diffThreshold:1e-5,diffPixelThreshold:.01}},rh.COMMON_CHROMIUM_FLAGS=["--disable-features=Translate,WebFontsCacheAwareTimeoutAdaption","--disable-background-timer-throttling","--disable-renderer-backgrounding","--disable-backgrounding-occluded-windows","--disable-breakpad","--disable-client-side-phishing-detection","--disable-default-apps","--disable-dev-shm-usage","--disable-extensions","--disable-hang-monitor","--disable-ipc-flooding-protection","--disable-notifications","--disable-prompt-on-repost","--disable-sync","--no-first-run","--blink-settings=imageAnimationPolicy=2","--disable-smooth-scrolling"],Object.defineProperty(s7,"DEFAULT_EXECUTION_OPTIONS",{enumerable:!0,get:function(){return rh.DEFAULT_EXECUTION_OPTIONS}}),Object.defineProperty(s7,"DEFAULT_SCREENSHOTTING_OPTIONS",{enumerable:!0,get:function(){return rh.DEFAULT_SCREENSHOTTING_OPTIONS}}),Object.defineProperty(s7,"BASE_SNIPPETS_URL",{enumerable:!0,get:function(){return rh.BASE_SNIPPETS_URL}}),Object.defineProperty(s7,"COMMON_CHROMIUM_FLAGS",{enumerable:!0,get:function(){return rh.COMMON_CHROMIUM_FLAGS}}),Object.defineProperty(s7,"IS_METICULOUS_SUPER_USER",{enumerable:!0,get:function(){return rh.IS_METICULOUS_SUPER_USER}});var rb={};Object.defineProperty(rb,"__esModule",{value:!0}),rb.getMeticulousVersion=void 0;let rf="";const rv=async e=>{if(rf)return rf;let t=JSON.parse(await (0,N.readFile)(e,{encoding:"utf-8"})).version||"unknown";return rf=`sdk-v${t}`};rb.getMeticulousVersion=rv,Object.defineProperty(s7,"getMeticulousVersion",{enumerable:!0,get:function(){return rb.getMeticulousVersion}});var rI={},rC=rI&&rI.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(rI,"__esModule",{value:!0}),rI.getCommitSha=void 0;const ry=rC(O("7SZkG")),rw=()=>new Promise((e,t)=>{(0,R.exec)("git rev-parse HEAD",{encoding:"utf-8"},(a,i)=>{if(a){t(a);return}e(i)})}),rx=async e=>{if(e)return e;let t=ry.default.getLogger(rn.METICULOUS_LOGGER_NAME);try{return(await rw()).trim()}catch(e){if(e instanceof Error&&e.message.startsWith("Command failed"))return t.info("Notice: not running in a git repository"),"";return t.error(e),""}};rI.getCommitSha=rx,Object.defineProperty(s7,"getCommitSha",{enumerable:!0,get:function(){return rI.getCommitSha}});const rA=s8(O("igDVI"));var rG=O("aDQYo"),rS=O("9rcfq"),rB=O("jfDa9"),rZ=O("050Gq"),r_=O("deYUe"),rT=O("9GA7E"),rR=O("ios84"),rV=O("fd5do"),rE=O("k2ErF"),rN=O("2gq4F"),rW=O("5NAaM"),rZ=O("050Gq"),rk=O("iD1up"),rE=O("k2ErF"),rW=O("5NAaM"),rH=O("gd055");const rF=rH.GLOBAL_OBJ;var rU=O("goIvU"),rE=O("k2ErF"),rW=O("5NAaM");const rY=(e,t,a)=>{let i,n;return o=>{t.value>=0&&(o||a)&&((n=t.value-(i||0))||void 0===i)&&(i=t.value,t.delta=n,e(t))}},rO=()=>`v3-${Date.now()}-${Math.floor(Math.random()*(9e12-1))+1e12}`,rX=()=>{let e=rF.performance.timing,t=rF.performance.navigation.type,a={entryType:"navigation",startTime:0,type:2==t?"back_forward":1===t?"reload":"navigate"};for(let t in e)"navigationStart"!==t&&"toJSON"!==t&&(a[t]=Math.max(e[t]-e.navigationStart,0));return a},rL=()=>rF.__WEB_VITALS_POLYFILL__?rF.performance&&(performance.getEntriesByType&&performance.getEntriesByType("navigation")[0]||rX()):rF.performance&&performance.getEntriesByType&&performance.getEntriesByType("navigation")[0],rD=()=>{let e=rL();return e&&e.activationStart||0},rK=(e,t)=>{let a=rL(),i="navigate";return a&&(i=rF.document.prerendering||rD()>0?"prerender":a.type.replace(/_/g,"-")),{name:e,value:void 0===t?-1:t,rating:"good",delta:0,entries:[],id:rO(),navigationType:i}},rJ=(e,t,a)=>{try{if(PerformanceObserver.supportedEntryTypes.includes(e)){let i=new PerformanceObserver(e=>{t(e.getEntries())});return i.observe(Object.assign({type:e,buffered:!0},a||{})),i}}catch(e){}},rz=(e,t)=>{let a=i=>{("pagehide"===i.type||"hidden"===rF.document.visibilityState)&&(e(i),t&&(removeEventListener("visibilitychange",a,!0),removeEventListener("pagehide",a,!0)))};addEventListener("visibilitychange",a,!0),addEventListener("pagehide",a,!0)};let rj=-1;const rP=()=>"hidden"!==rF.document.visibilityState||rF.document.prerendering?1/0:0,rM=()=>{rz(({timeStamp:e})=>{rj=e},!0)},rQ=()=>(rj<0&&(rj=rP(),rM()),{get firstHiddenTime(){return rj}});let rq=0,r$=1/0,r1=0;const r0=e=>{e.forEach(e=>{e.interactionId&&(r$=Math.min(r$,e.interactionId),rq=(r1=Math.max(r1,e.interactionId))?(r1-r$)/7+1:0)})},r2=()=>t?rq:performance.interactionCount||0,r4=()=>{"interactionCount"in performance||t||(t=rJ("event",r0,{type:"event",buffered:!0,durationThreshold:0}))},r9=()=>r2(),r6=[],r3={},r5=e=>{let t=r6[r6.length-1],a=r3[e.interactionId];if(a||r6.length<10||e.duration>t.latency){if(a)a.entries.push(e),a.latency=Math.max(a.latency,e.duration);else{let t={id:e.interactionId,latency:e.duration,entries:[e]};r3[t.id]=t,r6.push(t)}r6.sort((e,t)=>t.latency-e.latency),r6.splice(10).forEach(e=>{delete r3[e.id]})}},r8=()=>{let e=Math.min(r6.length-1,Math.floor(r9()/50));return r6[e]},r7={},pe={};O("4i5AO");var rZ=O("050Gq"),r_=O("deYUe"),pt=O("7z6ft"),pa=(O("ibVDy"),O("fziSu"),O("7nqVO")),rk=O("iD1up"),pi=O("iYy7D"),rV=O("fd5do"),rE=O("k2ErF"),pn=O("6szME"),rW=O("5NAaM"),r_=O("deYUe"),po=O("cCmfn"),ps=O("eCOpK"),pt=O("7z6ft"),rT=O("9GA7E"),pr=O("b2ZPh"),rk=O("iD1up"),pp=O("3hDCQ"),pl=O("e4IUz"),rE=(O("aoHsm"),O("k2ErF")),rH=O("gd055");(0,rH.getGlobalObject)();var rH=O("gd055"),pd=O("hxO1L"),pc=O("jVURz"),pl=O("e4IUz"),rH=O("gd055"),pd=O("hxO1L");rH.GLOBAL_OBJ;var pu=O("hSiIl"),pi=O("iYy7D"),rN=O("2gq4F"),r_=(O("c6AFW"),O("deYUe")),po=O("cCmfn"),ps=O("eCOpK"),pt=O("7z6ft"),rT=O("9GA7E"),pr=O("b2ZPh"),rk=O("iD1up"),pp=O("3hDCQ"),pu=O("hSiIl"),rN=O("2gq4F"),pc=O("jVURz"),pl=O("e4IUz"),rH=(O("gd055"),O("gd055"));const pm=(0,rH.getGlobalObject)();var pd=O("hxO1L");const pg=rH.GLOBAL_OBJ;var pi=O("iYy7D"),rE=O("k2ErF"),rW=O("5NAaM");rR.TRACING_DEFAULTS;var ph=O("3SU1C"),rZ=O("050Gq"),pb=O("2UNWp"),pt=O("7z6ft"),rR=O("ios84"),pf=O("5N1eW"),pv=O("kEOfe"),pI=O("k9pSf"),pC=O("cWSR5"),pa=O("7nqVO"),pr=O("b2ZPh"),rB=O("jfDa9"),pn=O("6szME"),rN=O("2gq4F"),py=O("6aON8");const pw=rG.addExtensionMethods;rZ.getActiveTransaction,rZ.extractTraceparentData,pr.spanStatusfromHttpCode,py.Transaction,pa.Span,pt.hasTracingEnabled,pn.stripUrlQueryAndFragment,rN.TRACEPARENT_REGEXP,rR.IdleTransaction,rB.startIdleTransaction,pr.SpanStatus,rS.Apollo,ph.Express,pb.GraphQL,pf.Mongo,pv.Mysql,pI.Postgres,pC.Prisma,("undefined"==typeof __SENTRY_TRACING__||__SENTRY_TRACING__)&&(0,rG.addExtensionMethods)(),s9.SENTRY_FLUSH_TIMEOUT=oC.fromObject({seconds:1});const px=()=>{var e;return parseFloat(null!==(e=process.env.METICULOUS_TELEMETRY_SAMPLE_RATE)&&void 0!==e?e:"1.0")},pA=async(e,t)=>(rA.init({dsn:"https://10c6a6c9f5434786b37fb81b01323798@o914390.ingest.sentry.io/6435232",release:e,tracesSampleRate:null!=t?t:px(),environment:s6.endsWith(".ts")||s7.IS_METICULOUS_SUPER_USER?"development":"production"}),pw(),rA.getCurrentHub());s9.initSentry=pA;var pG=O("7SZkG"),pS={};pS=O("95REl");const pB=async e=>{let t=pS.operation({retries:7,factor:2,minTimeout:1e3}),a=new URL(e);return new Promise((i,n)=>{t.attempt(async()=>{if(await pZ(a)){i();return}let o=Error(`Could not connect to '${e}'. Please check:
+ */function e6(e){return"[object Object]"===Object.prototype.toString.call(e)}function e3(e){var t,a;return!1!==e6(e)&&(void 0===(t=e.constructor)||!1!==e6(a=t.prototype)&&!1!==a.hasOwnProperty("isPrototypeOf"))}function e5(e){for(let t in e)void 0===e[t]&&delete e[t];return e}function e8(e,t,a){var i;if("string"==typeof t){let[e,i]=t.split(" ");a=Object.assign(i?{method:e,url:i}:{url:e},a)}else a=Object.assign({},t);a.headers=(i=a.headers)?Object.keys(i).reduce((e,t)=>(e[t.toLowerCase()]=i[t],e),{}):{},e5(a),e5(a.headers);let n=function e(t,a){let i=Object.assign({},t);return Object.keys(a).forEach(n=>{e3(a[n])&&n in t?i[n]=e(t[n],a[n]):Object.assign(i,{[n]:a[n]})}),i}(e||{},a);return e&&e.mediaType.previews.length&&(n.mediaType.previews=e.mediaType.previews.filter(e=>!n.mediaType.previews.includes(e)).concat(n.mediaType.previews)),n.mediaType.previews=n.mediaType.previews.map(e=>e.replace(/-preview/,"")),n}e9.Singular=(function(){var e={registry:{}},t=eM.bind(null,e,"h");return e0(t,e,"h"),t}).bind(),e9.Collection=e2.bind(),(eP=e9).Hook=e9,eP.Singular=e9.Singular,eP.Collection=e9.Collection;const e7=/\{[^}]+\}/g;function te(e){return e.replace(/^\W+|\W+$/g,"").split(/,/)}function tt(e,t){return Object.keys(e).filter(e=>!t.includes(e)).reduce((t,a)=>(t[a]=e[a],t),{})}function ta(e){return e.split(/(%[0-9A-Fa-f]{2})/g).map(function(e){return/%[0-9A-Fa-f]/.test(e)||(e=encodeURI(e).replace(/%5B/g,"[").replace(/%5D/g,"]")),e}).join("")}function ti(e){return encodeURIComponent(e).replace(/[!'()*]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function tn(e,t,a){return(t="+"===e||"#"===e?ta(t):ti(t),a)?ti(a)+"="+t:t}function to(e){return null!=e}function ts(e){return";"===e||"&"===e||"?"===e}function tr(e,t){var a=["+","#",".","/",";","?","&"];return e.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g,function(e,i,n){if(!i)return ta(n);{let e="",n=[];if(-1!==a.indexOf(i.charAt(0))&&(e=i.charAt(0),i=i.substr(1)),i.split(/,/g).forEach(function(a){var i=/([^:\*]*)(?::(\d+)|(\*))?/.exec(a);n.push(function(e,t,a,i){var n=e[a],o=[];if(to(n)&&""!==n){if("string"==typeof n||"number"==typeof n||"boolean"==typeof n)n=n.toString(),i&&"*"!==i&&(n=n.substring(0,parseInt(i,10))),o.push(tn(t,n,ts(t)?a:""));else if("*"===i)Array.isArray(n)?n.filter(to).forEach(function(e){o.push(tn(t,e,ts(t)?a:""))}):Object.keys(n).forEach(function(e){to(n[e])&&o.push(tn(t,n[e],e))});else{let e=[];Array.isArray(n)?n.filter(to).forEach(function(a){e.push(tn(t,a))}):Object.keys(n).forEach(function(a){to(n[a])&&(e.push(ti(a)),e.push(tn(t,n[a].toString())))}),ts(t)?o.push(ti(a)+"="+e.join(",")):0!==e.length&&o.push(e.join(","))}}else";"===t?to(n)&&o.push(ti(a)):""===n&&("&"===t||"?"===t)?o.push(ti(a)+"="):""===n&&o.push("");return o}(t,e,i[1],i[2]||i[3]))}),!e||"+"===e)return n.join(",");var o=",";return"?"===e?o="&":"#"!==e&&(o=e),(0!==n.length?e:"")+n.join(o)}})}function tp(e){let t,a=e.method.toUpperCase(),i=(e.url||"/").replace(/:([a-z]\w+)/g,"{$1}"),n=Object.assign({},e.headers),o=tt(e,["method","baseUrl","url","headers","request","mediaType"]),s=function(e){let t=e.match(e7);return t?t.map(te).reduce((e,t)=>e.concat(t),[]):[]}(i);i=({expand:tr.bind(null,i)}).expand(o),/^http/.test(i)||(i=e.baseUrl+i);let r=tt(o,Object.keys(e).filter(e=>s.includes(e)).concat("baseUrl"));if(!/application\/octet-stream/i.test(n.accept)&&(e.mediaType.format&&(n.accept=n.accept.split(/,/).map(t=>t.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/,`application/vnd$1$2.${e.mediaType.format}`)).join(",")),e.mediaType.previews.length)){let t=n.accept.match(/[\w-]+(?=-preview)/g)||[];n.accept=t.concat(e.mediaType.previews).map(t=>{let a=e.mediaType.format?`.${e.mediaType.format}`:"+json";return`application/vnd.github.${t}-preview${a}`}).join(",")}return["GET","HEAD"].includes(a)?i=function(e,t){let a=/\?/.test(e)?"&":"?",i=Object.keys(t);return 0===i.length?e:e+a+i.map(e=>"q"===e?"q="+t.q.split("+").map(encodeURIComponent).join("+"):`${e}=${encodeURIComponent(t[e])}`).join("&")}(i,r):"data"in r?t=r.data:Object.keys(r).length?t=r:n["content-length"]=0,n["content-type"]||void 0===t||(n["content-type"]="application/json; charset=utf-8"),["PATCH","PUT"].includes(a)&&void 0===t&&(t=""),Object.assign({method:a,url:i,headers:n},void 0!==t?{body:t}:null,e.request?{request:e.request}:null)}function tl(e,t,a){return tp(e8(e,t,a))}const td=function e(t,a){let i=e8(t,a);return Object.assign(tl.bind(null,i),{DEFAULTS:i,defaults:e.bind(null,i),merge:e8.bind(null,i),parse:tp})}(null,{method:"GET",baseUrl:"https://api.github.com",headers:{accept:"application/vnd.github.v3+json","user-agent":`octokit-endpoint.js/6.0.12 ${ej()}`},mediaType:{format:"",previews:[]}});var tc={};W(tc,"URL",()=>o,e=>o=e),W(tc,"serializeURL",()=>s,e=>s=e),W(tc,"serializeURLOrigin",()=>r,e=>r=e),W(tc,"basicURLParse",()=>p,e=>p=e),W(tc,"setTheUsername",()=>l,e=>l=e),W(tc,"setThePassword",()=>d,e=>d=e),W(tc,"serializeHost",()=>c,e=>c=e),W(tc,"serializeInteger",()=>u,e=>u=e),W(tc,"parseURL",()=>m,e=>m=e),o=X("8w5ng").interface,s=X("8hbL0").serializeURL,r=X("8hbL0").serializeURLOrigin,p=X("8hbL0").basicURLParse,l=X("8hbL0").setTheUsername,d=X("8hbL0").setThePassword,c=X("8hbL0").serializeHost,u=X("8hbL0").serializeInteger,m=X("8hbL0").parseURL;const tu=F(B).Readable,tm=Symbol("buffer"),tg=Symbol("type");class th{constructor(){this[tg]="";let e=arguments[0],t=arguments[1],a=[];if(e){let t=Number(e.length);for(let i=0;i1&&void 0!==arguments[1]?arguments[1]:{},i=a.size,n=a.timeout;null==e?e=null:ty(e)?e=Buffer.from(e.toString()):tw(e)||Buffer.isBuffer(e)||("[object ArrayBuffer]"===Object.prototype.toString.call(e)?e=Buffer.from(e):ArrayBuffer.isView(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):e instanceof F(B)||(e=Buffer.from(String(e)))),this[tf]={body:e,disturbed:!1,error:null},this.size=void 0===i?0:i,this.timeout=void 0===n?0:n,e instanceof F(B)&&e.on("error",function(e){let a="AbortError"===e.name?e:new tb(`Invalid response body while trying to fetch ${t.url}: ${e.message}`,"system",e);t[tf].error=a})}function tC(){var e=this;if(this[tf].disturbed)return tI.Promise.reject(TypeError(`body used already for: ${this.url}`));if(this[tf].disturbed=!0,this[tf].error)return tI.Promise.reject(this[tf].error);let t=this.body;if(null===t)return tI.Promise.resolve(Buffer.alloc(0));if(tw(t)&&(t=t.stream()),Buffer.isBuffer(t))return tI.Promise.resolve(t);if(!(t instanceof F(B)))return tI.Promise.resolve(Buffer.alloc(0));let a=[],i=0,n=!1;return new tI.Promise(function(o,s){let r;e.timeout&&(r=setTimeout(function(){n=!0,s(new tb(`Response timeout while trying to fetch ${e.url} (over ${e.timeout}ms)`,"body-timeout"))},e.timeout)),t.on("error",function(t){"AbortError"===t.name?(n=!0,s(t)):s(new tb(`Invalid response body while trying to fetch ${e.url}: ${t.message}`,"system",t))}),t.on("data",function(t){if(!n&&null!==t){if(e.size&&i+t.length>e.size){n=!0,s(new tb(`content size at ${e.url} over limit: ${e.size}`,"max-size"));return}i+=t.length,a.push(t)}}),t.on("end",function(){if(!n){clearTimeout(r);try{o(Buffer.concat(a,i))}catch(t){s(new tb(`Could not create Buffer from response body for ${e.url}: ${t.message}`,"system",t))}}})})}function ty(e){return"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&("URLSearchParams"===e.constructor.name||"[object URLSearchParams]"===Object.prototype.toString.call(e)||"function"==typeof e.sort)}function tw(e){return"object"==typeof e&&"function"==typeof e.arrayBuffer&&"string"==typeof e.type&&"function"==typeof e.stream&&"function"==typeof e.constructor&&"string"==typeof e.constructor.name&&/^(Blob|File)$/.test(e.constructor.name)&&/^(Blob|File)$/.test(e[Symbol.toStringTag])}function tx(e){let t,a;let i=e.body;if(e.bodyUsed)throw Error("cannot clone body after it is used");return i instanceof F(B)&&"function"!=typeof i.getBoundary&&(t=new tv,a=new tv,i.pipe(t),i.pipe(a),e[tf].body=t,i=a),i}function tA(e){if(null===e)return null;if("string"==typeof e)return"text/plain;charset=UTF-8";if(ty(e))return"application/x-www-form-urlencoded;charset=UTF-8";if(tw(e))return e.type||null;if(Buffer.isBuffer(e))return null;if("[object ArrayBuffer]"===Object.prototype.toString.call(e))return null;if(ArrayBuffer.isView(e))return null;else if("function"==typeof e.getBoundary)return`multipart/form-data;boundary=${e.getBoundary()}`;else if(e instanceof F(B))return null;else return"text/plain;charset=UTF-8"}function tG(e){let t=e.body;return null===t?0:tw(t)?t.size:Buffer.isBuffer(t)?t.length:t&&"function"==typeof t.getLengthSync&&(t._lengthRetrievers&&0==t._lengthRetrievers.length||t.hasKnownLength&&t.hasKnownLength())?t.getLengthSync():null}tI.prototype={get body(){return this[tf].body},get bodyUsed(){return this[tf].disturbed},arrayBuffer(){return tC.call(this).then(function(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)})},blob(){let e=this.headers&&this.headers.get("content-type")||"";return tC.call(this).then(function(t){return Object.assign(new th([],{type:e.toLowerCase()}),{[tm]:t})})},json(){var e=this;return tC.call(this).then(function(t){try{return JSON.parse(t.toString())}catch(t){return tI.Promise.reject(new tb(`invalid json response body at ${e.url} reason: ${t.message}`,"invalid-json"))}})},text(){return tC.call(this).then(function(e){return e.toString()})},buffer(){return tC.call(this)},textConverted(){var t=this;return tC.call(this).then(function(a){return function(t,a){let i,n;if("function"!=typeof e)throw Error("The package `encoding` must be installed to use the textConverted() function");let o=a.get("content-type"),s="utf-8";return o&&(i=/charset=([^;]*)/i.exec(o)),n=t.slice(0,1024).toString(),!i&&n&&(i=/0&&void 0!==arguments[0]?arguments[0]:void 0;if(this[tV]=Object.create(null),e instanceof tT){let t=e.raw();for(let e of Object.keys(t))for(let a of t[e])this.append(e,a);return}if(null==e);else if("object"==typeof e){let t=e[Symbol.iterator];if(null!=t){if("function"!=typeof t)throw TypeError("Header pairs must be iterable");let a=[];for(let t of e){if("object"!=typeof t||"function"!=typeof t[Symbol.iterator])throw TypeError("Each header pair must be iterable");a.push(Array.from(t))}for(let e of a){if(2!==e.length)throw TypeError("Each header pair must be a name/value tuple");this.append(e[0],e[1])}}else for(let t of Object.keys(e)){let a=e[t];this.append(t,a)}}else throw TypeError("Provided initializer must be an object")}get(e){tZ(e=`${e}`);let t=tR(this[tV],e);return void 0===t?null:this[tV][t].join(", ")}forEach(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,a=tE(this),i=0;for(;i1&&void 0!==arguments[1]?arguments[1]:"key+value";return Object.keys(e[tV]).sort().map("key"===t?function(e){return e.toLowerCase()}:"value"===t?function(t){return e[tV][t].join(", ")}:function(t){return[t.toLowerCase(),e[tV][t].join(", ")]})}tT.prototype.entries=tT.prototype[Symbol.iterator],Object.defineProperty(tT.prototype,Symbol.toStringTag,{value:"Headers",writable:!1,enumerable:!1,configurable:!0}),Object.defineProperties(tT.prototype,{get:{enumerable:!0},forEach:{enumerable:!0},set:{enumerable:!0},append:{enumerable:!0},has:{enumerable:!0},delete:{enumerable:!0},keys:{enumerable:!0},values:{enumerable:!0},entries:{enumerable:!0}});const tN=Symbol("internal");function tW(e,t){let a=Object.create(tk);return a[tN]={target:e,kind:t,index:0},a}const tk=Object.setPrototypeOf({next(){if(!this||Object.getPrototypeOf(this)!==tk)throw TypeError("Value of `this` is not a HeadersIterator");var e=this[tN];let t=e.target,a=e.kind,i=e.index,n=tE(t,a);return i>=n.length?{value:void 0,done:!0}:(this[tN].index=i+1,{value:n[i],done:!1})}},Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));Object.defineProperty(tk,Symbol.toStringTag,{value:"HeadersIterator",writable:!1,enumerable:!1,configurable:!0});const tH=Symbol("Response internals"),tF=F(g).STATUS_CODES;class tU{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};tI.call(this,e,t);let a=t.status||200,i=new tT(t.headers);if(null!=e&&!i.has("Content-Type")){let t=tA(e);t&&i.append("Content-Type",t)}this[tH]={url:t.url,status:a,statusText:t.statusText||tF[a],headers:i,counter:t.counter}}get url(){return this[tH].url||""}get status(){return this[tH].status}get ok(){return this[tH].status>=200&&this[tH].status<300}get redirected(){return this[tH].counter>0}get statusText(){return this[tH].statusText}get headers(){return this[tH].headers}clone(){return new tU(tx(this),{url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected})}}tI.mixIn(tU.prototype),Object.defineProperties(tU.prototype,{url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}}),Object.defineProperty(tU.prototype,Symbol.toStringTag,{value:"Response",writable:!1,enumerable:!1,configurable:!0});const tY=Symbol("Request internals"),tX=F(G).URL||F(tc).URL,tO=F(G).parse,tL=F(G).format;function tD(e){return/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(e)&&(e=new tX(e).toString()),tO(e)}const tK="destroy"in F(B).Readable.prototype;function tJ(e){return"object"==typeof e&&"object"==typeof e[tY]}class tz{constructor(e){let t,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};tJ(e)?t=tD(e.url):(t=e&&e.href?tD(e.href):tD(`${e}`),e={});let i=a.method||e.method||"GET";if(i=i.toUpperCase(),(null!=a.body||tJ(e)&&null!==e.body)&&("GET"===i||"HEAD"===i))throw TypeError("Request with GET/HEAD method cannot have body");let n=null!=a.body?a.body:tJ(e)&&null!==e.body?tx(e):null;tI.call(this,n,{timeout:a.timeout||e.timeout||0,size:a.size||e.size||0});let o=new tT(a.headers||e.headers||{});if(null!=n&&!o.has("Content-Type")){let e=tA(n);e&&o.append("Content-Type",e)}let s=tJ(e)?e.signal:null;if("signal"in a&&(s=a.signal),null!=s&&!function(e){let t=e&&"object"==typeof e&&Object.getPrototypeOf(e);return!!(t&&"AbortSignal"===t.constructor.name)}(s))throw TypeError("Expected signal to be an instanceof AbortSignal");this[tY]={method:i,redirect:a.redirect||e.redirect||"follow",headers:o,parsedURL:t,signal:s},this.follow=void 0!==a.follow?a.follow:void 0!==e.follow?e.follow:20,this.compress=void 0!==a.compress?a.compress:void 0===e.compress||e.compress,this.counter=a.counter||e.counter||0,this.agent=a.agent||e.agent}get method(){return this[tY].method}get url(){return tL(this[tY].parsedURL)}get headers(){return this[tY].headers}get redirect(){return this[tY].redirect}get signal(){return this[tY].signal}clone(){return new tz(this)}}function tj(e){Error.call(this,e),this.type="aborted",this.message=e,Error.captureStackTrace(this,this.constructor)}tI.mixIn(tz.prototype),Object.defineProperty(tz.prototype,Symbol.toStringTag,{value:"Request",writable:!1,enumerable:!1,configurable:!0}),Object.defineProperties(tz.prototype,{method:{enumerable:!0},url:{enumerable:!0},headers:{enumerable:!0},redirect:{enumerable:!0},clone:{enumerable:!0},signal:{enumerable:!0}}),tj.prototype=Object.create(Error.prototype),tj.prototype.constructor=tj,tj.prototype.name="AbortError";const tP=F(G).URL||F(tc).URL,tM=F(B).PassThrough,tQ=function(e,t){let a=new tP(t).hostname,i=new tP(e).hostname;return a===i||"."===a[a.length-i.length-1]&&a.endsWith(i)};function tq(e,t){if(!tq.Promise)throw Error("native promise missing, set fetch.Promise to your favorite alternative");return tI.Promise=tq.Promise,new tq.Promise(function(a,i){let n;let o=new tz(e,t),s=function(e){let t=e[tY].parsedURL,a=new tT(e[tY].headers);if(a.has("Accept")||a.set("Accept","*/*"),!t.protocol||!t.hostname)throw TypeError("Only absolute URLs are supported");if(!/^https?:$/.test(t.protocol))throw TypeError("Only HTTP(S) protocols are supported");if(e.signal&&e.body instanceof F(B).Readable&&!tK)throw Error("Cancellation of streamed requests with AbortSignal is not supported in node < 8");let i=null;if(null==e.body&&/^(POST|PUT)$/i.test(e.method)&&(i="0"),null!=e.body){let t=tG(e);"number"==typeof t&&(i=String(t))}i&&a.set("Content-Length",i),a.has("User-Agent")||a.set("User-Agent","node-fetch/1.0 (+https://github.com/bitinn/node-fetch)"),e.compress&&!a.has("Accept-Encoding")&&a.set("Accept-Encoding","gzip,deflate");let n=e.agent;return"function"==typeof n&&(n=n(t)),a.has("Connection")||n||a.set("Connection","close"),Object.assign({},t,{method:e.method,headers:function(e){let t=Object.assign({__proto__:null},e[tV]),a=tR(e[tV],"Host");return void 0!==a&&(t[a]=t[a][0]),t}(a),agent:n})}(o),r=("https:"===s.protocol?F(h):F(g)).request,p=o.signal,l=null,d=function(){let e=new tj("The user aborted a request.");i(e),o.body&&o.body instanceof F(B).Readable&&o.body.destroy(e),l&&l.body&&l.body.emit("error",e)};if(p&&p.aborted){d();return}let c=function(){d(),m()},u=r(s);function m(){u.abort(),p&&p.removeEventListener("abort",c),clearTimeout(n)}p&&p.addEventListener("abort",c),o.timeout&&u.once("socket",function(e){n=setTimeout(function(){i(new tb(`network timeout at: ${o.url}`,"request-timeout")),m()},o.timeout)}),u.on("error",function(e){i(new tb(`request to ${o.url} failed, reason: ${e.message}`,"system",e)),m()}),u.on("response",function(e){clearTimeout(n);let t=function(e){let t=new tT;for(let a of Object.keys(e))if(!tB.test(a)){if(Array.isArray(e[a]))for(let i of e[a])tS.test(i)||(void 0===t[tV][a]?t[tV][a]=[i]:t[tV][a].push(i));else tS.test(e[a])||(t[tV][a]=[e[a]])}return t}(e.headers);if(tq.isRedirect(e.statusCode)){let n=t.get("Location"),s=null;try{s=null===n?null:new tP(n,o.url).toString()}catch(e){if("manual"!==o.redirect){i(new tb(`uri requested responds with an invalid redirect URL: ${n}`,"invalid-redirect")),m();return}}switch(o.redirect){case"error":i(new tb(`uri requested responds with a redirect, redirect mode is set to error: ${o.url}`,"no-redirect")),m();return;case"manual":if(null!==s)try{t.set("Location",s)}catch(e){i(e)}break;case"follow":if(null===s)break;if(o.counter>=o.follow){i(new tb(`maximum redirect reached at: ${o.url}`,"max-redirect")),m();return}let r={headers:new tT(o.headers),follow:o.follow,counter:o.counter+1,agent:o.agent,compress:o.compress,method:o.method,body:o.body,signal:o.signal,timeout:o.timeout,size:o.size};if(!tQ(o.url,s))for(let e of["authorization","www-authenticate","cookie","cookie2"])r.headers.delete(e);if(303!==e.statusCode&&o.body&&null===tG(o)){i(new tb("Cannot follow redirect with body being a readable stream","unsupported-redirect")),m();return}(303===e.statusCode||(301===e.statusCode||302===e.statusCode)&&"POST"===o.method)&&(r.method="GET",r.body=void 0,r.headers.delete("content-length")),a(tq(new tz(s,r))),m();return}}e.once("end",function(){p&&p.removeEventListener("abort",c)});let s=e.pipe(new tM),r={url:o.url,status:e.statusCode,statusText:e.statusMessage,headers:t,size:o.size,timeout:o.timeout,counter:o.counter},d=t.get("Content-Encoding");if(!o.compress||"HEAD"===o.method||null===d||204===e.statusCode||304===e.statusCode){a(l=new tU(s,r));return}let u={flush:F(S).Z_SYNC_FLUSH,finishFlush:F(S).Z_SYNC_FLUSH};if("gzip"==d||"x-gzip"==d){a(l=new tU(s=s.pipe(F(S).createGunzip(u)),r));return}if("deflate"==d||"x-deflate"==d){e.pipe(new tM).once("data",function(e){a(l=new tU(s=(15&e[0])==8?s.pipe(F(S).createInflate()):s.pipe(F(S).createInflateRaw()),r))});return}if("br"==d&&"function"==typeof F(S).createBrotliDecompress){a(l=new tU(s=s.pipe(F(S).createBrotliDecompress()),r));return}a(l=new tU(s,r))}),function(e,t){let a=t.body;null===a?e.end():tw(a)?a.stream().pipe(e):Buffer.isBuffer(a)?(e.write(a),e.end()):a.pipe(e)}(u,o)})}tq.isRedirect=function(e){return 301===e||302===e||303===e||307===e||308===e},tq.Promise=H.Promise;class t$ extends Error{constructor(e){super(e),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.name="Deprecation"}}var t1={},t0={};function t2(e){var t=function(){return t.called?t.value:(t.called=!0,t.value=e.apply(this,arguments))};return t.called=!1,t}function t4(e){var t=function(){if(t.called)throw Error(t.onceError);return t.called=!0,t.value=e.apply(this,arguments)},a=e.name||"Function wrapped with `once`";return t.onceError=a+" shouldn't be called more than once",t.called=!1,t}(t1=(t0=function e(t,a){if(t&&a)return e(t)(a);if("function"!=typeof t)throw TypeError("need wrapper function");return Object.keys(t).forEach(function(e){i[e]=t[e]}),i;function i(){for(var e=Array(arguments.length),a=0;aconsole.warn(e)),t6=F(t1)(e=>console.warn(e));class t3 extends Error{constructor(e,t,a){let i;super(e),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.name="HttpError",this.status=t,"headers"in a&&void 0!==a.headers&&(i=a.headers),"response"in a&&(this.response=a.response,i=a.response.headers);let n=Object.assign({},a.request);a.request.headers.authorization&&(n.headers=Object.assign({},a.request.headers,{authorization:a.request.headers.authorization.replace(/ .*$/," [REDACTED]")})),n.url=n.url.replace(/\bclient_secret=\w+/g,"client_secret=[REDACTED]").replace(/\baccess_token=\w+/g,"access_token=[REDACTED]"),this.request=n,Object.defineProperty(this,"code",{get:()=>(t9(new t$("[@octokit/request-error] `error.code` is deprecated, use `error.status`.")),t)}),Object.defineProperty(this,"headers",{get:()=>(t6(new t$("[@octokit/request-error] `error.headers` is deprecated, use `error.response.headers`.")),i||{})})}}function t5(e){let t,a;let i=e.request&&e.request.log?e.request.log:console;(e3(e.body)||Array.isArray(e.body))&&(e.body=JSON.stringify(e.body));let n={};return(e.request&&e.request.fetch||tq)(e.url,Object.assign({method:e.method,body:e.body,headers:e.headers,redirect:e.redirect},e.request)).then(async o=>{for(let e of(a=o.url,t=o.status,o.headers))n[e[0]]=e[1];if("deprecation"in n){let t=n.link&&n.link.match(/<([^>]+)>; rel="deprecation"/),a=t&&t.pop();i.warn(`[@octokit/request] "${e.method} ${e.url}" is deprecated. It is scheduled to be removed on ${n.sunset}${a?`. See ${a}`:""}`)}if(204!==t&&205!==t){if("HEAD"===e.method){if(t<400)return;throw new t3(o.statusText,t,{response:{url:a,status:t,headers:n,data:void 0},request:e})}if(304===t)throw new t3("Not modified",t,{response:{url:a,status:t,headers:n,data:await t8(o)},request:e});if(t>=400){let i=await t8(o);throw new t3("string"==typeof i?i:"message"in i?Array.isArray(i.errors)?`${i.message}: ${i.errors.map(JSON.stringify).join(", ")}`:i.message:`Unknown error: ${JSON.stringify(i)}`,t,{response:{url:a,status:t,headers:n,data:i},request:e})}return t8(o)}}).then(e=>({status:t,url:a,headers:n,data:e})).catch(t=>{if(t instanceof t3)throw t;throw new t3(t.message,500,{request:e})})}async function t8(e){let t=e.headers.get("content-type");return/application\/json/.test(t)?e.json():!t||/^text\/|charset=utf-8$/.test(t)?e.text():e.arrayBuffer()}const t7=function e(t,a){let i=t.defaults(a);return Object.assign(function(t,a){let n=i.merge(t,a);if(!n.request||!n.request.hook)return t5(i.parse(n));let o=(e,t)=>t5(i.parse(i.merge(e,t)));return Object.assign(o,{endpoint:i,defaults:e.bind(null,i)}),n.request.hook(o,n)},{endpoint:i,defaults:e.bind(null,i)})}(td,{headers:{"user-agent":`octokit-request.js/5.6.3 ${ej()}`}});class ae extends Error{constructor(e,t,a){super(`Request failed due to following response errors:
+`+a.errors.map(e=>` - ${e.message}`).join("\n")),this.request=e,this.headers=t,this.response=a,this.name="GraphqlResponseError",this.errors=a.errors,this.data=a.data,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}}const at=["method","baseUrl","url","headers","request","query","mediaType"],aa=["query","method","url"],ai=/\/api\/v3\/?$/;function an(e,t){let a=e.defaults(t);return Object.assign((e,t)=>(function(e,t,a){if(a){if("string"==typeof t&&"query"in a)return Promise.reject(Error('[@octokit/graphql] "query" cannot be used as variable name'));for(let e in a)if(aa.includes(e))return Promise.reject(Error(`[@octokit/graphql] "${e}" cannot be used as variable name`))}let i="string"==typeof t?Object.assign({query:t},a):t,n=Object.keys(i).reduce((e,t)=>(at.includes(t)?e[t]=i[t]:(e.variables||(e.variables={}),e.variables[t]=i[t]),e),{}),o=i.baseUrl||e.endpoint.DEFAULTS.baseUrl;return ai.test(o)&&(n.url=o.replace(ai,"/api/graphql")),e(n).then(e=>{if(e.data.errors){let t={};for(let a of Object.keys(e.headers))t[a]=e.headers[a];throw new ae(n,t,e.data)}return e.data.data})})(a,e,t),{defaults:an.bind(null,a),endpoint:t7.endpoint})}an(t7,{headers:{"user-agent":`octokit-graphql.js/4.8.0 ${ej()}`},method:"POST",url:"/graphql"});const ao=/^v1\./,as=/^ghs_/,ar=/^ghu_/;async function ap(e){let t=3===e.split(/\./).length,a=ao.test(e)||as.test(e),i=ar.test(e);return{type:"token",token:e,tokenType:t?"app":a?"installation":i?"user-to-server":"oauth"}}async function al(e,t,a,i){let n=t.endpoint.merge(a,i);return n.headers.authorization=3===e.split(/\./).length?`bearer ${e}`:`token ${e}`,t(n)}const ad=function(e){if(!e)throw Error("[@octokit/auth-token] No token passed to createTokenAuth");if("string"!=typeof e)throw Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");return e=e.replace(/^(token|bearer) +/i,""),Object.assign(ap.bind(null,e),{hook:al.bind(null,e)})},ac="3.6.0";class au{constructor(e={}){let t=new eP.Collection,a={baseUrl:t7.endpoint.DEFAULTS.baseUrl,headers:{},request:Object.assign({},e.request,{hook:t.bind(null,"request")}),mediaType:{previews:[],format:""}};if(a.headers["user-agent"]=[e.userAgent,`octokit-core.js/${ac} ${ej()}`].filter(Boolean).join(" "),e.baseUrl&&(a.baseUrl=e.baseUrl),e.previews&&(a.mediaType.previews=e.previews),e.timeZone&&(a.headers["time-zone"]=e.timeZone),this.request=t7.defaults(a),this.graphql=an(this.request,{method:"POST",url:"/graphql"}).defaults(a),this.log=Object.assign({debug:()=>{},info:()=>{},warn:console.warn.bind(console),error:console.error.bind(console)},e.log),this.hook=t,e.authStrategy){let{authStrategy:a,...i}=e,n=a(Object.assign({request:this.request,log:this.log,octokit:this,octokitOptions:i},e.auth));t.wrap("request",n.hook),this.auth=n}else if(e.auth){let a=ad(e.auth);t.wrap("request",a.hook),this.auth=a}else this.auth=async()=>({type:"unauthenticated"});this.constructor.plugins.forEach(t=>{Object.assign(this,t(this,e))})}static defaults(e){return class extends this{constructor(...t){let a=t[0]||{};if("function"==typeof e){super(e(a));return}super(Object.assign({},e,a,a.userAgent&&e.userAgent?{userAgent:`${a.userAgent} ${e.userAgent}`}:null))}}}static plugin(...e){var t;let a=this.plugins;return(t=class extends this{}).plugins=a.concat(e.filter(e=>!a.includes(e))),t}}au.VERSION=ac,au.plugins=[];const am={actions:{addCustomLabelsToSelfHostedRunnerForOrg:["POST /orgs/{org}/actions/runners/{runner_id}/labels"],addCustomLabelsToSelfHostedRunnerForRepo:["POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],addSelectedRepoToOrgSecret:["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"],approveWorkflowRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve"],cancelWorkflowRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel"],createOrUpdateEnvironmentSecret:["PUT /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"],createOrUpdateOrgSecret:["PUT /orgs/{org}/actions/secrets/{secret_name}"],createOrUpdateRepoSecret:["PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}"],createRegistrationTokenForOrg:["POST /orgs/{org}/actions/runners/registration-token"],createRegistrationTokenForRepo:["POST /repos/{owner}/{repo}/actions/runners/registration-token"],createRemoveTokenForOrg:["POST /orgs/{org}/actions/runners/remove-token"],createRemoveTokenForRepo:["POST /repos/{owner}/{repo}/actions/runners/remove-token"],createWorkflowDispatch:["POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches"],deleteActionsCacheById:["DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}"],deleteActionsCacheByKey:["DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}"],deleteArtifact:["DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],deleteEnvironmentSecret:["DELETE /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"],deleteOrgSecret:["DELETE /orgs/{org}/actions/secrets/{secret_name}"],deleteRepoSecret:["DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}"],deleteSelfHostedRunnerFromOrg:["DELETE /orgs/{org}/actions/runners/{runner_id}"],deleteSelfHostedRunnerFromRepo:["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}"],deleteWorkflowRun:["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}"],deleteWorkflowRunLogs:["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs"],disableSelectedRepositoryGithubActionsOrganization:["DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}"],disableWorkflow:["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable"],downloadArtifact:["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}"],downloadJobLogsForWorkflowRun:["GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs"],downloadWorkflowRunAttemptLogs:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs"],downloadWorkflowRunLogs:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs"],enableSelectedRepositoryGithubActionsOrganization:["PUT /orgs/{org}/actions/permissions/repositories/{repository_id}"],enableWorkflow:["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable"],getActionsCacheList:["GET /repos/{owner}/{repo}/actions/caches"],getActionsCacheUsage:["GET /repos/{owner}/{repo}/actions/cache/usage"],getActionsCacheUsageByRepoForOrg:["GET /orgs/{org}/actions/cache/usage-by-repository"],getActionsCacheUsageForEnterprise:["GET /enterprises/{enterprise}/actions/cache/usage"],getActionsCacheUsageForOrg:["GET /orgs/{org}/actions/cache/usage"],getAllowedActionsOrganization:["GET /orgs/{org}/actions/permissions/selected-actions"],getAllowedActionsRepository:["GET /repos/{owner}/{repo}/actions/permissions/selected-actions"],getArtifact:["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],getEnvironmentPublicKey:["GET /repositories/{repository_id}/environments/{environment_name}/secrets/public-key"],getEnvironmentSecret:["GET /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"],getGithubActionsDefaultWorkflowPermissionsEnterprise:["GET /enterprises/{enterprise}/actions/permissions/workflow"],getGithubActionsDefaultWorkflowPermissionsOrganization:["GET /orgs/{org}/actions/permissions/workflow"],getGithubActionsDefaultWorkflowPermissionsRepository:["GET /repos/{owner}/{repo}/actions/permissions/workflow"],getGithubActionsPermissionsOrganization:["GET /orgs/{org}/actions/permissions"],getGithubActionsPermissionsRepository:["GET /repos/{owner}/{repo}/actions/permissions"],getJobForWorkflowRun:["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"],getOrgPublicKey:["GET /orgs/{org}/actions/secrets/public-key"],getOrgSecret:["GET /orgs/{org}/actions/secrets/{secret_name}"],getPendingDeploymentsForRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"],getRepoPermissions:["GET /repos/{owner}/{repo}/actions/permissions",{},{renamed:["actions","getGithubActionsPermissionsRepository"]}],getRepoPublicKey:["GET /repos/{owner}/{repo}/actions/secrets/public-key"],getRepoSecret:["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}"],getReviewsForRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals"],getSelfHostedRunnerForOrg:["GET /orgs/{org}/actions/runners/{runner_id}"],getSelfHostedRunnerForRepo:["GET /repos/{owner}/{repo}/actions/runners/{runner_id}"],getWorkflow:["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"],getWorkflowAccessToRepository:["GET /repos/{owner}/{repo}/actions/permissions/access"],getWorkflowRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}"],getWorkflowRunAttempt:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}"],getWorkflowRunUsage:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing"],getWorkflowUsage:["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing"],listArtifactsForRepo:["GET /repos/{owner}/{repo}/actions/artifacts"],listEnvironmentSecrets:["GET /repositories/{repository_id}/environments/{environment_name}/secrets"],listJobsForWorkflowRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs"],listJobsForWorkflowRunAttempt:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs"],listLabelsForSelfHostedRunnerForOrg:["GET /orgs/{org}/actions/runners/{runner_id}/labels"],listLabelsForSelfHostedRunnerForRepo:["GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],listOrgSecrets:["GET /orgs/{org}/actions/secrets"],listRepoSecrets:["GET /repos/{owner}/{repo}/actions/secrets"],listRepoWorkflows:["GET /repos/{owner}/{repo}/actions/workflows"],listRunnerApplicationsForOrg:["GET /orgs/{org}/actions/runners/downloads"],listRunnerApplicationsForRepo:["GET /repos/{owner}/{repo}/actions/runners/downloads"],listSelectedReposForOrgSecret:["GET /orgs/{org}/actions/secrets/{secret_name}/repositories"],listSelectedRepositoriesEnabledGithubActionsOrganization:["GET /orgs/{org}/actions/permissions/repositories"],listSelfHostedRunnersForOrg:["GET /orgs/{org}/actions/runners"],listSelfHostedRunnersForRepo:["GET /repos/{owner}/{repo}/actions/runners"],listWorkflowRunArtifacts:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts"],listWorkflowRuns:["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs"],listWorkflowRunsForRepo:["GET /repos/{owner}/{repo}/actions/runs"],reRunJobForWorkflowRun:["POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun"],reRunWorkflow:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"],reRunWorkflowFailedJobs:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs"],removeAllCustomLabelsFromSelfHostedRunnerForOrg:["DELETE /orgs/{org}/actions/runners/{runner_id}/labels"],removeAllCustomLabelsFromSelfHostedRunnerForRepo:["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],removeCustomLabelFromSelfHostedRunnerForOrg:["DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}"],removeCustomLabelFromSelfHostedRunnerForRepo:["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}"],removeSelectedRepoFromOrgSecret:["DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"],reviewPendingDeploymentsForRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"],setAllowedActionsOrganization:["PUT /orgs/{org}/actions/permissions/selected-actions"],setAllowedActionsRepository:["PUT /repos/{owner}/{repo}/actions/permissions/selected-actions"],setCustomLabelsForSelfHostedRunnerForOrg:["PUT /orgs/{org}/actions/runners/{runner_id}/labels"],setCustomLabelsForSelfHostedRunnerForRepo:["PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],setGithubActionsDefaultWorkflowPermissionsEnterprise:["PUT /enterprises/{enterprise}/actions/permissions/workflow"],setGithubActionsDefaultWorkflowPermissionsOrganization:["PUT /orgs/{org}/actions/permissions/workflow"],setGithubActionsDefaultWorkflowPermissionsRepository:["PUT /repos/{owner}/{repo}/actions/permissions/workflow"],setGithubActionsPermissionsOrganization:["PUT /orgs/{org}/actions/permissions"],setGithubActionsPermissionsRepository:["PUT /repos/{owner}/{repo}/actions/permissions"],setSelectedReposForOrgSecret:["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories"],setSelectedRepositoriesEnabledGithubActionsOrganization:["PUT /orgs/{org}/actions/permissions/repositories"],setWorkflowAccessToRepository:["PUT /repos/{owner}/{repo}/actions/permissions/access"]},activity:{checkRepoIsStarredByAuthenticatedUser:["GET /user/starred/{owner}/{repo}"],deleteRepoSubscription:["DELETE /repos/{owner}/{repo}/subscription"],deleteThreadSubscription:["DELETE /notifications/threads/{thread_id}/subscription"],getFeeds:["GET /feeds"],getRepoSubscription:["GET /repos/{owner}/{repo}/subscription"],getThread:["GET /notifications/threads/{thread_id}"],getThreadSubscriptionForAuthenticatedUser:["GET /notifications/threads/{thread_id}/subscription"],listEventsForAuthenticatedUser:["GET /users/{username}/events"],listNotificationsForAuthenticatedUser:["GET /notifications"],listOrgEventsForAuthenticatedUser:["GET /users/{username}/events/orgs/{org}"],listPublicEvents:["GET /events"],listPublicEventsForRepoNetwork:["GET /networks/{owner}/{repo}/events"],listPublicEventsForUser:["GET /users/{username}/events/public"],listPublicOrgEvents:["GET /orgs/{org}/events"],listReceivedEventsForUser:["GET /users/{username}/received_events"],listReceivedPublicEventsForUser:["GET /users/{username}/received_events/public"],listRepoEvents:["GET /repos/{owner}/{repo}/events"],listRepoNotificationsForAuthenticatedUser:["GET /repos/{owner}/{repo}/notifications"],listReposStarredByAuthenticatedUser:["GET /user/starred"],listReposStarredByUser:["GET /users/{username}/starred"],listReposWatchedByUser:["GET /users/{username}/subscriptions"],listStargazersForRepo:["GET /repos/{owner}/{repo}/stargazers"],listWatchedReposForAuthenticatedUser:["GET /user/subscriptions"],listWatchersForRepo:["GET /repos/{owner}/{repo}/subscribers"],markNotificationsAsRead:["PUT /notifications"],markRepoNotificationsAsRead:["PUT /repos/{owner}/{repo}/notifications"],markThreadAsRead:["PATCH /notifications/threads/{thread_id}"],setRepoSubscription:["PUT /repos/{owner}/{repo}/subscription"],setThreadSubscription:["PUT /notifications/threads/{thread_id}/subscription"],starRepoForAuthenticatedUser:["PUT /user/starred/{owner}/{repo}"],unstarRepoForAuthenticatedUser:["DELETE /user/starred/{owner}/{repo}"]},apps:{addRepoToInstallation:["PUT /user/installations/{installation_id}/repositories/{repository_id}",{},{renamed:["apps","addRepoToInstallationForAuthenticatedUser"]}],addRepoToInstallationForAuthenticatedUser:["PUT /user/installations/{installation_id}/repositories/{repository_id}"],checkToken:["POST /applications/{client_id}/token"],createFromManifest:["POST /app-manifests/{code}/conversions"],createInstallationAccessToken:["POST /app/installations/{installation_id}/access_tokens"],deleteAuthorization:["DELETE /applications/{client_id}/grant"],deleteInstallation:["DELETE /app/installations/{installation_id}"],deleteToken:["DELETE /applications/{client_id}/token"],getAuthenticated:["GET /app"],getBySlug:["GET /apps/{app_slug}"],getInstallation:["GET /app/installations/{installation_id}"],getOrgInstallation:["GET /orgs/{org}/installation"],getRepoInstallation:["GET /repos/{owner}/{repo}/installation"],getSubscriptionPlanForAccount:["GET /marketplace_listing/accounts/{account_id}"],getSubscriptionPlanForAccountStubbed:["GET /marketplace_listing/stubbed/accounts/{account_id}"],getUserInstallation:["GET /users/{username}/installation"],getWebhookConfigForApp:["GET /app/hook/config"],getWebhookDelivery:["GET /app/hook/deliveries/{delivery_id}"],listAccountsForPlan:["GET /marketplace_listing/plans/{plan_id}/accounts"],listAccountsForPlanStubbed:["GET /marketplace_listing/stubbed/plans/{plan_id}/accounts"],listInstallationReposForAuthenticatedUser:["GET /user/installations/{installation_id}/repositories"],listInstallations:["GET /app/installations"],listInstallationsForAuthenticatedUser:["GET /user/installations"],listPlans:["GET /marketplace_listing/plans"],listPlansStubbed:["GET /marketplace_listing/stubbed/plans"],listReposAccessibleToInstallation:["GET /installation/repositories"],listSubscriptionsForAuthenticatedUser:["GET /user/marketplace_purchases"],listSubscriptionsForAuthenticatedUserStubbed:["GET /user/marketplace_purchases/stubbed"],listWebhookDeliveries:["GET /app/hook/deliveries"],redeliverWebhookDelivery:["POST /app/hook/deliveries/{delivery_id}/attempts"],removeRepoFromInstallation:["DELETE /user/installations/{installation_id}/repositories/{repository_id}",{},{renamed:["apps","removeRepoFromInstallationForAuthenticatedUser"]}],removeRepoFromInstallationForAuthenticatedUser:["DELETE /user/installations/{installation_id}/repositories/{repository_id}"],resetToken:["PATCH /applications/{client_id}/token"],revokeInstallationAccessToken:["DELETE /installation/token"],scopeToken:["POST /applications/{client_id}/token/scoped"],suspendInstallation:["PUT /app/installations/{installation_id}/suspended"],unsuspendInstallation:["DELETE /app/installations/{installation_id}/suspended"],updateWebhookConfigForApp:["PATCH /app/hook/config"]},billing:{getGithubActionsBillingOrg:["GET /orgs/{org}/settings/billing/actions"],getGithubActionsBillingUser:["GET /users/{username}/settings/billing/actions"],getGithubAdvancedSecurityBillingGhe:["GET /enterprises/{enterprise}/settings/billing/advanced-security"],getGithubAdvancedSecurityBillingOrg:["GET /orgs/{org}/settings/billing/advanced-security"],getGithubPackagesBillingOrg:["GET /orgs/{org}/settings/billing/packages"],getGithubPackagesBillingUser:["GET /users/{username}/settings/billing/packages"],getSharedStorageBillingOrg:["GET /orgs/{org}/settings/billing/shared-storage"],getSharedStorageBillingUser:["GET /users/{username}/settings/billing/shared-storage"]},checks:{create:["POST /repos/{owner}/{repo}/check-runs"],createSuite:["POST /repos/{owner}/{repo}/check-suites"],get:["GET /repos/{owner}/{repo}/check-runs/{check_run_id}"],getSuite:["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}"],listAnnotations:["GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations"],listForRef:["GET /repos/{owner}/{repo}/commits/{ref}/check-runs"],listForSuite:["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs"],listSuitesForRef:["GET /repos/{owner}/{repo}/commits/{ref}/check-suites"],rerequestRun:["POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest"],rerequestSuite:["POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest"],setSuitesPreferences:["PATCH /repos/{owner}/{repo}/check-suites/preferences"],update:["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}"]},codeScanning:{deleteAnalysis:["DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}"],getAlert:["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}",{},{renamedParameters:{alert_id:"alert_number"}}],getAnalysis:["GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}"],getSarif:["GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}"],listAlertInstances:["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances"],listAlertsForOrg:["GET /orgs/{org}/code-scanning/alerts"],listAlertsForRepo:["GET /repos/{owner}/{repo}/code-scanning/alerts"],listAlertsInstances:["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances",{},{renamed:["codeScanning","listAlertInstances"]}],listRecentAnalyses:["GET /repos/{owner}/{repo}/code-scanning/analyses"],updateAlert:["PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}"],uploadSarif:["POST /repos/{owner}/{repo}/code-scanning/sarifs"]},codesOfConduct:{getAllCodesOfConduct:["GET /codes_of_conduct"],getConductCode:["GET /codes_of_conduct/{key}"]},codespaces:{addRepositoryForSecretForAuthenticatedUser:["PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"],codespaceMachinesForAuthenticatedUser:["GET /user/codespaces/{codespace_name}/machines"],createForAuthenticatedUser:["POST /user/codespaces"],createOrUpdateRepoSecret:["PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"],createOrUpdateSecretForAuthenticatedUser:["PUT /user/codespaces/secrets/{secret_name}"],createWithPrForAuthenticatedUser:["POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces"],createWithRepoForAuthenticatedUser:["POST /repos/{owner}/{repo}/codespaces"],deleteForAuthenticatedUser:["DELETE /user/codespaces/{codespace_name}"],deleteFromOrganization:["DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}"],deleteRepoSecret:["DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"],deleteSecretForAuthenticatedUser:["DELETE /user/codespaces/secrets/{secret_name}"],exportForAuthenticatedUser:["POST /user/codespaces/{codespace_name}/exports"],getExportDetailsForAuthenticatedUser:["GET /user/codespaces/{codespace_name}/exports/{export_id}"],getForAuthenticatedUser:["GET /user/codespaces/{codespace_name}"],getPublicKeyForAuthenticatedUser:["GET /user/codespaces/secrets/public-key"],getRepoPublicKey:["GET /repos/{owner}/{repo}/codespaces/secrets/public-key"],getRepoSecret:["GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"],getSecretForAuthenticatedUser:["GET /user/codespaces/secrets/{secret_name}"],listDevcontainersInRepositoryForAuthenticatedUser:["GET /repos/{owner}/{repo}/codespaces/devcontainers"],listForAuthenticatedUser:["GET /user/codespaces"],listInOrganization:["GET /orgs/{org}/codespaces",{},{renamedParameters:{org_id:"org"}}],listInRepositoryForAuthenticatedUser:["GET /repos/{owner}/{repo}/codespaces"],listRepoSecrets:["GET /repos/{owner}/{repo}/codespaces/secrets"],listRepositoriesForSecretForAuthenticatedUser:["GET /user/codespaces/secrets/{secret_name}/repositories"],listSecretsForAuthenticatedUser:["GET /user/codespaces/secrets"],removeRepositoryForSecretForAuthenticatedUser:["DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"],repoMachinesForAuthenticatedUser:["GET /repos/{owner}/{repo}/codespaces/machines"],setRepositoriesForSecretForAuthenticatedUser:["PUT /user/codespaces/secrets/{secret_name}/repositories"],startForAuthenticatedUser:["POST /user/codespaces/{codespace_name}/start"],stopForAuthenticatedUser:["POST /user/codespaces/{codespace_name}/stop"],stopInOrganization:["POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop"],updateForAuthenticatedUser:["PATCH /user/codespaces/{codespace_name}"]},dependabot:{addSelectedRepoToOrgSecret:["PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"],createOrUpdateOrgSecret:["PUT /orgs/{org}/dependabot/secrets/{secret_name}"],createOrUpdateRepoSecret:["PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"],deleteOrgSecret:["DELETE /orgs/{org}/dependabot/secrets/{secret_name}"],deleteRepoSecret:["DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"],getOrgPublicKey:["GET /orgs/{org}/dependabot/secrets/public-key"],getOrgSecret:["GET /orgs/{org}/dependabot/secrets/{secret_name}"],getRepoPublicKey:["GET /repos/{owner}/{repo}/dependabot/secrets/public-key"],getRepoSecret:["GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"],listOrgSecrets:["GET /orgs/{org}/dependabot/secrets"],listRepoSecrets:["GET /repos/{owner}/{repo}/dependabot/secrets"],listSelectedReposForOrgSecret:["GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories"],removeSelectedRepoFromOrgSecret:["DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"],setSelectedReposForOrgSecret:["PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories"]},dependencyGraph:{createRepositorySnapshot:["POST /repos/{owner}/{repo}/dependency-graph/snapshots"],diffRange:["GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}"]},emojis:{get:["GET /emojis"]},enterpriseAdmin:{addCustomLabelsToSelfHostedRunnerForEnterprise:["POST /enterprises/{enterprise}/actions/runners/{runner_id}/labels"],disableSelectedOrganizationGithubActionsEnterprise:["DELETE /enterprises/{enterprise}/actions/permissions/organizations/{org_id}"],enableSelectedOrganizationGithubActionsEnterprise:["PUT /enterprises/{enterprise}/actions/permissions/organizations/{org_id}"],getAllowedActionsEnterprise:["GET /enterprises/{enterprise}/actions/permissions/selected-actions"],getGithubActionsPermissionsEnterprise:["GET /enterprises/{enterprise}/actions/permissions"],getServerStatistics:["GET /enterprise-installation/{enterprise_or_org}/server-statistics"],listLabelsForSelfHostedRunnerForEnterprise:["GET /enterprises/{enterprise}/actions/runners/{runner_id}/labels"],listSelectedOrganizationsEnabledGithubActionsEnterprise:["GET /enterprises/{enterprise}/actions/permissions/organizations"],removeAllCustomLabelsFromSelfHostedRunnerForEnterprise:["DELETE /enterprises/{enterprise}/actions/runners/{runner_id}/labels"],removeCustomLabelFromSelfHostedRunnerForEnterprise:["DELETE /enterprises/{enterprise}/actions/runners/{runner_id}/labels/{name}"],setAllowedActionsEnterprise:["PUT /enterprises/{enterprise}/actions/permissions/selected-actions"],setCustomLabelsForSelfHostedRunnerForEnterprise:["PUT /enterprises/{enterprise}/actions/runners/{runner_id}/labels"],setGithubActionsPermissionsEnterprise:["PUT /enterprises/{enterprise}/actions/permissions"],setSelectedOrganizationsEnabledGithubActionsEnterprise:["PUT /enterprises/{enterprise}/actions/permissions/organizations"]},gists:{checkIsStarred:["GET /gists/{gist_id}/star"],create:["POST /gists"],createComment:["POST /gists/{gist_id}/comments"],delete:["DELETE /gists/{gist_id}"],deleteComment:["DELETE /gists/{gist_id}/comments/{comment_id}"],fork:["POST /gists/{gist_id}/forks"],get:["GET /gists/{gist_id}"],getComment:["GET /gists/{gist_id}/comments/{comment_id}"],getRevision:["GET /gists/{gist_id}/{sha}"],list:["GET /gists"],listComments:["GET /gists/{gist_id}/comments"],listCommits:["GET /gists/{gist_id}/commits"],listForUser:["GET /users/{username}/gists"],listForks:["GET /gists/{gist_id}/forks"],listPublic:["GET /gists/public"],listStarred:["GET /gists/starred"],star:["PUT /gists/{gist_id}/star"],unstar:["DELETE /gists/{gist_id}/star"],update:["PATCH /gists/{gist_id}"],updateComment:["PATCH /gists/{gist_id}/comments/{comment_id}"]},git:{createBlob:["POST /repos/{owner}/{repo}/git/blobs"],createCommit:["POST /repos/{owner}/{repo}/git/commits"],createRef:["POST /repos/{owner}/{repo}/git/refs"],createTag:["POST /repos/{owner}/{repo}/git/tags"],createTree:["POST /repos/{owner}/{repo}/git/trees"],deleteRef:["DELETE /repos/{owner}/{repo}/git/refs/{ref}"],getBlob:["GET /repos/{owner}/{repo}/git/blobs/{file_sha}"],getCommit:["GET /repos/{owner}/{repo}/git/commits/{commit_sha}"],getRef:["GET /repos/{owner}/{repo}/git/ref/{ref}"],getTag:["GET /repos/{owner}/{repo}/git/tags/{tag_sha}"],getTree:["GET /repos/{owner}/{repo}/git/trees/{tree_sha}"],listMatchingRefs:["GET /repos/{owner}/{repo}/git/matching-refs/{ref}"],updateRef:["PATCH /repos/{owner}/{repo}/git/refs/{ref}"]},gitignore:{getAllTemplates:["GET /gitignore/templates"],getTemplate:["GET /gitignore/templates/{name}"]},interactions:{getRestrictionsForAuthenticatedUser:["GET /user/interaction-limits"],getRestrictionsForOrg:["GET /orgs/{org}/interaction-limits"],getRestrictionsForRepo:["GET /repos/{owner}/{repo}/interaction-limits"],getRestrictionsForYourPublicRepos:["GET /user/interaction-limits",{},{renamed:["interactions","getRestrictionsForAuthenticatedUser"]}],removeRestrictionsForAuthenticatedUser:["DELETE /user/interaction-limits"],removeRestrictionsForOrg:["DELETE /orgs/{org}/interaction-limits"],removeRestrictionsForRepo:["DELETE /repos/{owner}/{repo}/interaction-limits"],removeRestrictionsForYourPublicRepos:["DELETE /user/interaction-limits",{},{renamed:["interactions","removeRestrictionsForAuthenticatedUser"]}],setRestrictionsForAuthenticatedUser:["PUT /user/interaction-limits"],setRestrictionsForOrg:["PUT /orgs/{org}/interaction-limits"],setRestrictionsForRepo:["PUT /repos/{owner}/{repo}/interaction-limits"],setRestrictionsForYourPublicRepos:["PUT /user/interaction-limits",{},{renamed:["interactions","setRestrictionsForAuthenticatedUser"]}]},issues:{addAssignees:["POST /repos/{owner}/{repo}/issues/{issue_number}/assignees"],addLabels:["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"],checkUserCanBeAssigned:["GET /repos/{owner}/{repo}/assignees/{assignee}"],create:["POST /repos/{owner}/{repo}/issues"],createComment:["POST /repos/{owner}/{repo}/issues/{issue_number}/comments"],createLabel:["POST /repos/{owner}/{repo}/labels"],createMilestone:["POST /repos/{owner}/{repo}/milestones"],deleteComment:["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}"],deleteLabel:["DELETE /repos/{owner}/{repo}/labels/{name}"],deleteMilestone:["DELETE /repos/{owner}/{repo}/milestones/{milestone_number}"],get:["GET /repos/{owner}/{repo}/issues/{issue_number}"],getComment:["GET /repos/{owner}/{repo}/issues/comments/{comment_id}"],getEvent:["GET /repos/{owner}/{repo}/issues/events/{event_id}"],getLabel:["GET /repos/{owner}/{repo}/labels/{name}"],getMilestone:["GET /repos/{owner}/{repo}/milestones/{milestone_number}"],list:["GET /issues"],listAssignees:["GET /repos/{owner}/{repo}/assignees"],listComments:["GET /repos/{owner}/{repo}/issues/{issue_number}/comments"],listCommentsForRepo:["GET /repos/{owner}/{repo}/issues/comments"],listEvents:["GET /repos/{owner}/{repo}/issues/{issue_number}/events"],listEventsForRepo:["GET /repos/{owner}/{repo}/issues/events"],listEventsForTimeline:["GET /repos/{owner}/{repo}/issues/{issue_number}/timeline"],listForAuthenticatedUser:["GET /user/issues"],listForOrg:["GET /orgs/{org}/issues"],listForRepo:["GET /repos/{owner}/{repo}/issues"],listLabelsForMilestone:["GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels"],listLabelsForRepo:["GET /repos/{owner}/{repo}/labels"],listLabelsOnIssue:["GET /repos/{owner}/{repo}/issues/{issue_number}/labels"],listMilestones:["GET /repos/{owner}/{repo}/milestones"],lock:["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"],removeAllLabels:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels"],removeAssignees:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees"],removeLabel:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}"],setLabels:["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"],unlock:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"],update:["PATCH /repos/{owner}/{repo}/issues/{issue_number}"],updateComment:["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"],updateLabel:["PATCH /repos/{owner}/{repo}/labels/{name}"],updateMilestone:["PATCH /repos/{owner}/{repo}/milestones/{milestone_number}"]},licenses:{get:["GET /licenses/{license}"],getAllCommonlyUsed:["GET /licenses"],getForRepo:["GET /repos/{owner}/{repo}/license"]},markdown:{render:["POST /markdown"],renderRaw:["POST /markdown/raw",{headers:{"content-type":"text/plain; charset=utf-8"}}]},meta:{get:["GET /meta"],getOctocat:["GET /octocat"],getZen:["GET /zen"],root:["GET /"]},migrations:{cancelImport:["DELETE /repos/{owner}/{repo}/import"],deleteArchiveForAuthenticatedUser:["DELETE /user/migrations/{migration_id}/archive"],deleteArchiveForOrg:["DELETE /orgs/{org}/migrations/{migration_id}/archive"],downloadArchiveForOrg:["GET /orgs/{org}/migrations/{migration_id}/archive"],getArchiveForAuthenticatedUser:["GET /user/migrations/{migration_id}/archive"],getCommitAuthors:["GET /repos/{owner}/{repo}/import/authors"],getImportStatus:["GET /repos/{owner}/{repo}/import"],getLargeFiles:["GET /repos/{owner}/{repo}/import/large_files"],getStatusForAuthenticatedUser:["GET /user/migrations/{migration_id}"],getStatusForOrg:["GET /orgs/{org}/migrations/{migration_id}"],listForAuthenticatedUser:["GET /user/migrations"],listForOrg:["GET /orgs/{org}/migrations"],listReposForAuthenticatedUser:["GET /user/migrations/{migration_id}/repositories"],listReposForOrg:["GET /orgs/{org}/migrations/{migration_id}/repositories"],listReposForUser:["GET /user/migrations/{migration_id}/repositories",{},{renamed:["migrations","listReposForAuthenticatedUser"]}],mapCommitAuthor:["PATCH /repos/{owner}/{repo}/import/authors/{author_id}"],setLfsPreference:["PATCH /repos/{owner}/{repo}/import/lfs"],startForAuthenticatedUser:["POST /user/migrations"],startForOrg:["POST /orgs/{org}/migrations"],startImport:["PUT /repos/{owner}/{repo}/import"],unlockRepoForAuthenticatedUser:["DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock"],unlockRepoForOrg:["DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock"],updateImport:["PATCH /repos/{owner}/{repo}/import"]},orgs:{blockUser:["PUT /orgs/{org}/blocks/{username}"],cancelInvitation:["DELETE /orgs/{org}/invitations/{invitation_id}"],checkBlockedUser:["GET /orgs/{org}/blocks/{username}"],checkMembershipForUser:["GET /orgs/{org}/members/{username}"],checkPublicMembershipForUser:["GET /orgs/{org}/public_members/{username}"],convertMemberToOutsideCollaborator:["PUT /orgs/{org}/outside_collaborators/{username}"],createInvitation:["POST /orgs/{org}/invitations"],createWebhook:["POST /orgs/{org}/hooks"],deleteWebhook:["DELETE /orgs/{org}/hooks/{hook_id}"],get:["GET /orgs/{org}"],getMembershipForAuthenticatedUser:["GET /user/memberships/orgs/{org}"],getMembershipForUser:["GET /orgs/{org}/memberships/{username}"],getWebhook:["GET /orgs/{org}/hooks/{hook_id}"],getWebhookConfigForOrg:["GET /orgs/{org}/hooks/{hook_id}/config"],getWebhookDelivery:["GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}"],list:["GET /organizations"],listAppInstallations:["GET /orgs/{org}/installations"],listBlockedUsers:["GET /orgs/{org}/blocks"],listCustomRoles:["GET /organizations/{organization_id}/custom_roles"],listFailedInvitations:["GET /orgs/{org}/failed_invitations"],listForAuthenticatedUser:["GET /user/orgs"],listForUser:["GET /users/{username}/orgs"],listInvitationTeams:["GET /orgs/{org}/invitations/{invitation_id}/teams"],listMembers:["GET /orgs/{org}/members"],listMembershipsForAuthenticatedUser:["GET /user/memberships/orgs"],listOutsideCollaborators:["GET /orgs/{org}/outside_collaborators"],listPendingInvitations:["GET /orgs/{org}/invitations"],listPublicMembers:["GET /orgs/{org}/public_members"],listWebhookDeliveries:["GET /orgs/{org}/hooks/{hook_id}/deliveries"],listWebhooks:["GET /orgs/{org}/hooks"],pingWebhook:["POST /orgs/{org}/hooks/{hook_id}/pings"],redeliverWebhookDelivery:["POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"],removeMember:["DELETE /orgs/{org}/members/{username}"],removeMembershipForUser:["DELETE /orgs/{org}/memberships/{username}"],removeOutsideCollaborator:["DELETE /orgs/{org}/outside_collaborators/{username}"],removePublicMembershipForAuthenticatedUser:["DELETE /orgs/{org}/public_members/{username}"],setMembershipForUser:["PUT /orgs/{org}/memberships/{username}"],setPublicMembershipForAuthenticatedUser:["PUT /orgs/{org}/public_members/{username}"],unblockUser:["DELETE /orgs/{org}/blocks/{username}"],update:["PATCH /orgs/{org}"],updateMembershipForAuthenticatedUser:["PATCH /user/memberships/orgs/{org}"],updateWebhook:["PATCH /orgs/{org}/hooks/{hook_id}"],updateWebhookConfigForOrg:["PATCH /orgs/{org}/hooks/{hook_id}/config"]},packages:{deletePackageForAuthenticatedUser:["DELETE /user/packages/{package_type}/{package_name}"],deletePackageForOrg:["DELETE /orgs/{org}/packages/{package_type}/{package_name}"],deletePackageForUser:["DELETE /users/{username}/packages/{package_type}/{package_name}"],deletePackageVersionForAuthenticatedUser:["DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}"],deletePackageVersionForOrg:["DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"],deletePackageVersionForUser:["DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"],getAllPackageVersionsForAPackageOwnedByAnOrg:["GET /orgs/{org}/packages/{package_type}/{package_name}/versions",{},{renamed:["packages","getAllPackageVersionsForPackageOwnedByOrg"]}],getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser:["GET /user/packages/{package_type}/{package_name}/versions",{},{renamed:["packages","getAllPackageVersionsForPackageOwnedByAuthenticatedUser"]}],getAllPackageVersionsForPackageOwnedByAuthenticatedUser:["GET /user/packages/{package_type}/{package_name}/versions"],getAllPackageVersionsForPackageOwnedByOrg:["GET /orgs/{org}/packages/{package_type}/{package_name}/versions"],getAllPackageVersionsForPackageOwnedByUser:["GET /users/{username}/packages/{package_type}/{package_name}/versions"],getPackageForAuthenticatedUser:["GET /user/packages/{package_type}/{package_name}"],getPackageForOrganization:["GET /orgs/{org}/packages/{package_type}/{package_name}"],getPackageForUser:["GET /users/{username}/packages/{package_type}/{package_name}"],getPackageVersionForAuthenticatedUser:["GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}"],getPackageVersionForOrganization:["GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"],getPackageVersionForUser:["GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"],listPackagesForAuthenticatedUser:["GET /user/packages"],listPackagesForOrganization:["GET /orgs/{org}/packages"],listPackagesForUser:["GET /users/{username}/packages"],restorePackageForAuthenticatedUser:["POST /user/packages/{package_type}/{package_name}/restore{?token}"],restorePackageForOrg:["POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}"],restorePackageForUser:["POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}"],restorePackageVersionForAuthenticatedUser:["POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"],restorePackageVersionForOrg:["POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"],restorePackageVersionForUser:["POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"]},projects:{addCollaborator:["PUT /projects/{project_id}/collaborators/{username}"],createCard:["POST /projects/columns/{column_id}/cards"],createColumn:["POST /projects/{project_id}/columns"],createForAuthenticatedUser:["POST /user/projects"],createForOrg:["POST /orgs/{org}/projects"],createForRepo:["POST /repos/{owner}/{repo}/projects"],delete:["DELETE /projects/{project_id}"],deleteCard:["DELETE /projects/columns/cards/{card_id}"],deleteColumn:["DELETE /projects/columns/{column_id}"],get:["GET /projects/{project_id}"],getCard:["GET /projects/columns/cards/{card_id}"],getColumn:["GET /projects/columns/{column_id}"],getPermissionForUser:["GET /projects/{project_id}/collaborators/{username}/permission"],listCards:["GET /projects/columns/{column_id}/cards"],listCollaborators:["GET /projects/{project_id}/collaborators"],listColumns:["GET /projects/{project_id}/columns"],listForOrg:["GET /orgs/{org}/projects"],listForRepo:["GET /repos/{owner}/{repo}/projects"],listForUser:["GET /users/{username}/projects"],moveCard:["POST /projects/columns/cards/{card_id}/moves"],moveColumn:["POST /projects/columns/{column_id}/moves"],removeCollaborator:["DELETE /projects/{project_id}/collaborators/{username}"],update:["PATCH /projects/{project_id}"],updateCard:["PATCH /projects/columns/cards/{card_id}"],updateColumn:["PATCH /projects/columns/{column_id}"]},pulls:{checkIfMerged:["GET /repos/{owner}/{repo}/pulls/{pull_number}/merge"],create:["POST /repos/{owner}/{repo}/pulls"],createReplyForReviewComment:["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies"],createReview:["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],createReviewComment:["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments"],deletePendingReview:["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],deleteReviewComment:["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}"],dismissReview:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals"],get:["GET /repos/{owner}/{repo}/pulls/{pull_number}"],getReview:["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],getReviewComment:["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}"],list:["GET /repos/{owner}/{repo}/pulls"],listCommentsForReview:["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments"],listCommits:["GET /repos/{owner}/{repo}/pulls/{pull_number}/commits"],listFiles:["GET /repos/{owner}/{repo}/pulls/{pull_number}/files"],listRequestedReviewers:["GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],listReviewComments:["GET /repos/{owner}/{repo}/pulls/{pull_number}/comments"],listReviewCommentsForRepo:["GET /repos/{owner}/{repo}/pulls/comments"],listReviews:["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],merge:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge"],removeRequestedReviewers:["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],requestReviewers:["POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],submitReview:["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events"],update:["PATCH /repos/{owner}/{repo}/pulls/{pull_number}"],updateBranch:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch"],updateReview:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],updateReviewComment:["PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}"]},rateLimit:{get:["GET /rate_limit"]},reactions:{createForCommitComment:["POST /repos/{owner}/{repo}/comments/{comment_id}/reactions"],createForIssue:["POST /repos/{owner}/{repo}/issues/{issue_number}/reactions"],createForIssueComment:["POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"],createForPullRequestReviewComment:["POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"],createForRelease:["POST /repos/{owner}/{repo}/releases/{release_id}/reactions"],createForTeamDiscussionCommentInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"],createForTeamDiscussionInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"],deleteForCommitComment:["DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}"],deleteForIssue:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}"],deleteForIssueComment:["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}"],deleteForPullRequestComment:["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}"],deleteForRelease:["DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}"],deleteForTeamDiscussion:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}"],deleteForTeamDiscussionComment:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}"],listForCommitComment:["GET /repos/{owner}/{repo}/comments/{comment_id}/reactions"],listForIssue:["GET /repos/{owner}/{repo}/issues/{issue_number}/reactions"],listForIssueComment:["GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"],listForPullRequestReviewComment:["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"],listForRelease:["GET /repos/{owner}/{repo}/releases/{release_id}/reactions"],listForTeamDiscussionCommentInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"],listForTeamDiscussionInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"]},repos:{acceptInvitation:["PATCH /user/repository_invitations/{invitation_id}",{},{renamed:["repos","acceptInvitationForAuthenticatedUser"]}],acceptInvitationForAuthenticatedUser:["PATCH /user/repository_invitations/{invitation_id}"],addAppAccessRestrictions:["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",{},{mapToData:"apps"}],addCollaborator:["PUT /repos/{owner}/{repo}/collaborators/{username}"],addStatusCheckContexts:["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{mapToData:"contexts"}],addTeamAccessRestrictions:["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",{},{mapToData:"teams"}],addUserAccessRestrictions:["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",{},{mapToData:"users"}],checkCollaborator:["GET /repos/{owner}/{repo}/collaborators/{username}"],checkVulnerabilityAlerts:["GET /repos/{owner}/{repo}/vulnerability-alerts"],codeownersErrors:["GET /repos/{owner}/{repo}/codeowners/errors"],compareCommits:["GET /repos/{owner}/{repo}/compare/{base}...{head}"],compareCommitsWithBasehead:["GET /repos/{owner}/{repo}/compare/{basehead}"],createAutolink:["POST /repos/{owner}/{repo}/autolinks"],createCommitComment:["POST /repos/{owner}/{repo}/commits/{commit_sha}/comments"],createCommitSignatureProtection:["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"],createCommitStatus:["POST /repos/{owner}/{repo}/statuses/{sha}"],createDeployKey:["POST /repos/{owner}/{repo}/keys"],createDeployment:["POST /repos/{owner}/{repo}/deployments"],createDeploymentStatus:["POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"],createDispatchEvent:["POST /repos/{owner}/{repo}/dispatches"],createForAuthenticatedUser:["POST /user/repos"],createFork:["POST /repos/{owner}/{repo}/forks"],createInOrg:["POST /orgs/{org}/repos"],createOrUpdateEnvironment:["PUT /repos/{owner}/{repo}/environments/{environment_name}"],createOrUpdateFileContents:["PUT /repos/{owner}/{repo}/contents/{path}"],createPagesSite:["POST /repos/{owner}/{repo}/pages"],createRelease:["POST /repos/{owner}/{repo}/releases"],createTagProtection:["POST /repos/{owner}/{repo}/tags/protection"],createUsingTemplate:["POST /repos/{template_owner}/{template_repo}/generate"],createWebhook:["POST /repos/{owner}/{repo}/hooks"],declineInvitation:["DELETE /user/repository_invitations/{invitation_id}",{},{renamed:["repos","declineInvitationForAuthenticatedUser"]}],declineInvitationForAuthenticatedUser:["DELETE /user/repository_invitations/{invitation_id}"],delete:["DELETE /repos/{owner}/{repo}"],deleteAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"],deleteAdminBranchProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],deleteAnEnvironment:["DELETE /repos/{owner}/{repo}/environments/{environment_name}"],deleteAutolink:["DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}"],deleteBranchProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection"],deleteCommitComment:["DELETE /repos/{owner}/{repo}/comments/{comment_id}"],deleteCommitSignatureProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"],deleteDeployKey:["DELETE /repos/{owner}/{repo}/keys/{key_id}"],deleteDeployment:["DELETE /repos/{owner}/{repo}/deployments/{deployment_id}"],deleteFile:["DELETE /repos/{owner}/{repo}/contents/{path}"],deleteInvitation:["DELETE /repos/{owner}/{repo}/invitations/{invitation_id}"],deletePagesSite:["DELETE /repos/{owner}/{repo}/pages"],deletePullRequestReviewProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],deleteRelease:["DELETE /repos/{owner}/{repo}/releases/{release_id}"],deleteReleaseAsset:["DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}"],deleteTagProtection:["DELETE /repos/{owner}/{repo}/tags/protection/{tag_protection_id}"],deleteWebhook:["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"],disableAutomatedSecurityFixes:["DELETE /repos/{owner}/{repo}/automated-security-fixes"],disableLfsForRepo:["DELETE /repos/{owner}/{repo}/lfs"],disableVulnerabilityAlerts:["DELETE /repos/{owner}/{repo}/vulnerability-alerts"],downloadArchive:["GET /repos/{owner}/{repo}/zipball/{ref}",{},{renamed:["repos","downloadZipballArchive"]}],downloadTarballArchive:["GET /repos/{owner}/{repo}/tarball/{ref}"],downloadZipballArchive:["GET /repos/{owner}/{repo}/zipball/{ref}"],enableAutomatedSecurityFixes:["PUT /repos/{owner}/{repo}/automated-security-fixes"],enableLfsForRepo:["PUT /repos/{owner}/{repo}/lfs"],enableVulnerabilityAlerts:["PUT /repos/{owner}/{repo}/vulnerability-alerts"],generateReleaseNotes:["POST /repos/{owner}/{repo}/releases/generate-notes"],get:["GET /repos/{owner}/{repo}"],getAccessRestrictions:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"],getAdminBranchProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],getAllEnvironments:["GET /repos/{owner}/{repo}/environments"],getAllStatusCheckContexts:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts"],getAllTopics:["GET /repos/{owner}/{repo}/topics"],getAppsWithAccessToProtectedBranch:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps"],getAutolink:["GET /repos/{owner}/{repo}/autolinks/{autolink_id}"],getBranch:["GET /repos/{owner}/{repo}/branches/{branch}"],getBranchProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection"],getClones:["GET /repos/{owner}/{repo}/traffic/clones"],getCodeFrequencyStats:["GET /repos/{owner}/{repo}/stats/code_frequency"],getCollaboratorPermissionLevel:["GET /repos/{owner}/{repo}/collaborators/{username}/permission"],getCombinedStatusForRef:["GET /repos/{owner}/{repo}/commits/{ref}/status"],getCommit:["GET /repos/{owner}/{repo}/commits/{ref}"],getCommitActivityStats:["GET /repos/{owner}/{repo}/stats/commit_activity"],getCommitComment:["GET /repos/{owner}/{repo}/comments/{comment_id}"],getCommitSignatureProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"],getCommunityProfileMetrics:["GET /repos/{owner}/{repo}/community/profile"],getContent:["GET /repos/{owner}/{repo}/contents/{path}"],getContributorsStats:["GET /repos/{owner}/{repo}/stats/contributors"],getDeployKey:["GET /repos/{owner}/{repo}/keys/{key_id}"],getDeployment:["GET /repos/{owner}/{repo}/deployments/{deployment_id}"],getDeploymentStatus:["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}"],getEnvironment:["GET /repos/{owner}/{repo}/environments/{environment_name}"],getLatestPagesBuild:["GET /repos/{owner}/{repo}/pages/builds/latest"],getLatestRelease:["GET /repos/{owner}/{repo}/releases/latest"],getPages:["GET /repos/{owner}/{repo}/pages"],getPagesBuild:["GET /repos/{owner}/{repo}/pages/builds/{build_id}"],getPagesHealthCheck:["GET /repos/{owner}/{repo}/pages/health"],getParticipationStats:["GET /repos/{owner}/{repo}/stats/participation"],getPullRequestReviewProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],getPunchCardStats:["GET /repos/{owner}/{repo}/stats/punch_card"],getReadme:["GET /repos/{owner}/{repo}/readme"],getReadmeInDirectory:["GET /repos/{owner}/{repo}/readme/{dir}"],getRelease:["GET /repos/{owner}/{repo}/releases/{release_id}"],getReleaseAsset:["GET /repos/{owner}/{repo}/releases/assets/{asset_id}"],getReleaseByTag:["GET /repos/{owner}/{repo}/releases/tags/{tag}"],getStatusChecksProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],getTeamsWithAccessToProtectedBranch:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams"],getTopPaths:["GET /repos/{owner}/{repo}/traffic/popular/paths"],getTopReferrers:["GET /repos/{owner}/{repo}/traffic/popular/referrers"],getUsersWithAccessToProtectedBranch:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users"],getViews:["GET /repos/{owner}/{repo}/traffic/views"],getWebhook:["GET /repos/{owner}/{repo}/hooks/{hook_id}"],getWebhookConfigForRepo:["GET /repos/{owner}/{repo}/hooks/{hook_id}/config"],getWebhookDelivery:["GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}"],listAutolinks:["GET /repos/{owner}/{repo}/autolinks"],listBranches:["GET /repos/{owner}/{repo}/branches"],listBranchesForHeadCommit:["GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head"],listCollaborators:["GET /repos/{owner}/{repo}/collaborators"],listCommentsForCommit:["GET /repos/{owner}/{repo}/commits/{commit_sha}/comments"],listCommitCommentsForRepo:["GET /repos/{owner}/{repo}/comments"],listCommitStatusesForRef:["GET /repos/{owner}/{repo}/commits/{ref}/statuses"],listCommits:["GET /repos/{owner}/{repo}/commits"],listContributors:["GET /repos/{owner}/{repo}/contributors"],listDeployKeys:["GET /repos/{owner}/{repo}/keys"],listDeploymentStatuses:["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"],listDeployments:["GET /repos/{owner}/{repo}/deployments"],listForAuthenticatedUser:["GET /user/repos"],listForOrg:["GET /orgs/{org}/repos"],listForUser:["GET /users/{username}/repos"],listForks:["GET /repos/{owner}/{repo}/forks"],listInvitations:["GET /repos/{owner}/{repo}/invitations"],listInvitationsForAuthenticatedUser:["GET /user/repository_invitations"],listLanguages:["GET /repos/{owner}/{repo}/languages"],listPagesBuilds:["GET /repos/{owner}/{repo}/pages/builds"],listPublic:["GET /repositories"],listPullRequestsAssociatedWithCommit:["GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls"],listReleaseAssets:["GET /repos/{owner}/{repo}/releases/{release_id}/assets"],listReleases:["GET /repos/{owner}/{repo}/releases"],listTagProtection:["GET /repos/{owner}/{repo}/tags/protection"],listTags:["GET /repos/{owner}/{repo}/tags"],listTeams:["GET /repos/{owner}/{repo}/teams"],listWebhookDeliveries:["GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries"],listWebhooks:["GET /repos/{owner}/{repo}/hooks"],merge:["POST /repos/{owner}/{repo}/merges"],mergeUpstream:["POST /repos/{owner}/{repo}/merge-upstream"],pingWebhook:["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"],redeliverWebhookDelivery:["POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"],removeAppAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",{},{mapToData:"apps"}],removeCollaborator:["DELETE /repos/{owner}/{repo}/collaborators/{username}"],removeStatusCheckContexts:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{mapToData:"contexts"}],removeStatusCheckProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],removeTeamAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",{},{mapToData:"teams"}],removeUserAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",{},{mapToData:"users"}],renameBranch:["POST /repos/{owner}/{repo}/branches/{branch}/rename"],replaceAllTopics:["PUT /repos/{owner}/{repo}/topics"],requestPagesBuild:["POST /repos/{owner}/{repo}/pages/builds"],setAdminBranchProtection:["POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],setAppAccessRestrictions:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",{},{mapToData:"apps"}],setStatusCheckContexts:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{mapToData:"contexts"}],setTeamAccessRestrictions:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",{},{mapToData:"teams"}],setUserAccessRestrictions:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",{},{mapToData:"users"}],testPushWebhook:["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests"],transfer:["POST /repos/{owner}/{repo}/transfer"],update:["PATCH /repos/{owner}/{repo}"],updateBranchProtection:["PUT /repos/{owner}/{repo}/branches/{branch}/protection"],updateCommitComment:["PATCH /repos/{owner}/{repo}/comments/{comment_id}"],updateInformationAboutPagesSite:["PUT /repos/{owner}/{repo}/pages"],updateInvitation:["PATCH /repos/{owner}/{repo}/invitations/{invitation_id}"],updatePullRequestReviewProtection:["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],updateRelease:["PATCH /repos/{owner}/{repo}/releases/{release_id}"],updateReleaseAsset:["PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}"],updateStatusCheckPotection:["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks",{},{renamed:["repos","updateStatusCheckProtection"]}],updateStatusCheckProtection:["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],updateWebhook:["PATCH /repos/{owner}/{repo}/hooks/{hook_id}"],updateWebhookConfigForRepo:["PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config"],uploadReleaseAsset:["POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}",{baseUrl:"https://uploads.github.com"}]},search:{code:["GET /search/code"],commits:["GET /search/commits"],issuesAndPullRequests:["GET /search/issues"],labels:["GET /search/labels"],repos:["GET /search/repositories"],topics:["GET /search/topics"],users:["GET /search/users"]},secretScanning:{getAlert:["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"],listAlertsForEnterprise:["GET /enterprises/{enterprise}/secret-scanning/alerts"],listAlertsForOrg:["GET /orgs/{org}/secret-scanning/alerts"],listAlertsForRepo:["GET /repos/{owner}/{repo}/secret-scanning/alerts"],listLocationsForAlert:["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations"],updateAlert:["PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"]},teams:{addOrUpdateMembershipForUserInOrg:["PUT /orgs/{org}/teams/{team_slug}/memberships/{username}"],addOrUpdateProjectPermissionsInOrg:["PUT /orgs/{org}/teams/{team_slug}/projects/{project_id}"],addOrUpdateRepoPermissionsInOrg:["PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],checkPermissionsForProjectInOrg:["GET /orgs/{org}/teams/{team_slug}/projects/{project_id}"],checkPermissionsForRepoInOrg:["GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],create:["POST /orgs/{org}/teams"],createDiscussionCommentInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"],createDiscussionInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions"],deleteDiscussionCommentInOrg:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],deleteDiscussionInOrg:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],deleteInOrg:["DELETE /orgs/{org}/teams/{team_slug}"],getByName:["GET /orgs/{org}/teams/{team_slug}"],getDiscussionCommentInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],getDiscussionInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],getMembershipForUserInOrg:["GET /orgs/{org}/teams/{team_slug}/memberships/{username}"],list:["GET /orgs/{org}/teams"],listChildInOrg:["GET /orgs/{org}/teams/{team_slug}/teams"],listDiscussionCommentsInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"],listDiscussionsInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions"],listForAuthenticatedUser:["GET /user/teams"],listMembersInOrg:["GET /orgs/{org}/teams/{team_slug}/members"],listPendingInvitationsInOrg:["GET /orgs/{org}/teams/{team_slug}/invitations"],listProjectsInOrg:["GET /orgs/{org}/teams/{team_slug}/projects"],listReposInOrg:["GET /orgs/{org}/teams/{team_slug}/repos"],removeMembershipForUserInOrg:["DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}"],removeProjectInOrg:["DELETE /orgs/{org}/teams/{team_slug}/projects/{project_id}"],removeRepoInOrg:["DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],updateDiscussionCommentInOrg:["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],updateDiscussionInOrg:["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],updateInOrg:["PATCH /orgs/{org}/teams/{team_slug}"]},users:{addEmailForAuthenticated:["POST /user/emails",{},{renamed:["users","addEmailForAuthenticatedUser"]}],addEmailForAuthenticatedUser:["POST /user/emails"],block:["PUT /user/blocks/{username}"],checkBlocked:["GET /user/blocks/{username}"],checkFollowingForUser:["GET /users/{username}/following/{target_user}"],checkPersonIsFollowedByAuthenticated:["GET /user/following/{username}"],createGpgKeyForAuthenticated:["POST /user/gpg_keys",{},{renamed:["users","createGpgKeyForAuthenticatedUser"]}],createGpgKeyForAuthenticatedUser:["POST /user/gpg_keys"],createPublicSshKeyForAuthenticated:["POST /user/keys",{},{renamed:["users","createPublicSshKeyForAuthenticatedUser"]}],createPublicSshKeyForAuthenticatedUser:["POST /user/keys"],deleteEmailForAuthenticated:["DELETE /user/emails",{},{renamed:["users","deleteEmailForAuthenticatedUser"]}],deleteEmailForAuthenticatedUser:["DELETE /user/emails"],deleteGpgKeyForAuthenticated:["DELETE /user/gpg_keys/{gpg_key_id}",{},{renamed:["users","deleteGpgKeyForAuthenticatedUser"]}],deleteGpgKeyForAuthenticatedUser:["DELETE /user/gpg_keys/{gpg_key_id}"],deletePublicSshKeyForAuthenticated:["DELETE /user/keys/{key_id}",{},{renamed:["users","deletePublicSshKeyForAuthenticatedUser"]}],deletePublicSshKeyForAuthenticatedUser:["DELETE /user/keys/{key_id}"],follow:["PUT /user/following/{username}"],getAuthenticated:["GET /user"],getByUsername:["GET /users/{username}"],getContextForUser:["GET /users/{username}/hovercard"],getGpgKeyForAuthenticated:["GET /user/gpg_keys/{gpg_key_id}",{},{renamed:["users","getGpgKeyForAuthenticatedUser"]}],getGpgKeyForAuthenticatedUser:["GET /user/gpg_keys/{gpg_key_id}"],getPublicSshKeyForAuthenticated:["GET /user/keys/{key_id}",{},{renamed:["users","getPublicSshKeyForAuthenticatedUser"]}],getPublicSshKeyForAuthenticatedUser:["GET /user/keys/{key_id}"],list:["GET /users"],listBlockedByAuthenticated:["GET /user/blocks",{},{renamed:["users","listBlockedByAuthenticatedUser"]}],listBlockedByAuthenticatedUser:["GET /user/blocks"],listEmailsForAuthenticated:["GET /user/emails",{},{renamed:["users","listEmailsForAuthenticatedUser"]}],listEmailsForAuthenticatedUser:["GET /user/emails"],listFollowedByAuthenticated:["GET /user/following",{},{renamed:["users","listFollowedByAuthenticatedUser"]}],listFollowedByAuthenticatedUser:["GET /user/following"],listFollowersForAuthenticatedUser:["GET /user/followers"],listFollowersForUser:["GET /users/{username}/followers"],listFollowingForUser:["GET /users/{username}/following"],listGpgKeysForAuthenticated:["GET /user/gpg_keys",{},{renamed:["users","listGpgKeysForAuthenticatedUser"]}],listGpgKeysForAuthenticatedUser:["GET /user/gpg_keys"],listGpgKeysForUser:["GET /users/{username}/gpg_keys"],listPublicEmailsForAuthenticated:["GET /user/public_emails",{},{renamed:["users","listPublicEmailsForAuthenticatedUser"]}],listPublicEmailsForAuthenticatedUser:["GET /user/public_emails"],listPublicKeysForUser:["GET /users/{username}/keys"],listPublicSshKeysForAuthenticated:["GET /user/keys",{},{renamed:["users","listPublicSshKeysForAuthenticatedUser"]}],listPublicSshKeysForAuthenticatedUser:["GET /user/keys"],setPrimaryEmailVisibilityForAuthenticated:["PATCH /user/email/visibility",{},{renamed:["users","setPrimaryEmailVisibilityForAuthenticatedUser"]}],setPrimaryEmailVisibilityForAuthenticatedUser:["PATCH /user/email/visibility"],unblock:["DELETE /user/blocks/{username}"],unfollow:["DELETE /user/following/{username}"],updateAuthenticated:["PATCH /user"]}};function ag(e){return{rest:function(e,t){let a={};for(let[i,n]of Object.entries(t))for(let[t,o]of Object.entries(n)){let[n,s,r]=o,[p,l]=n.split(/ /),d=Object.assign({method:p,url:l},s);a[i]||(a[i]={});let c=a[i];if(r){c[t]=function(e,t,a,i,n){let o=e.request.defaults(i);return Object.assign(function(...i){let s=o.endpoint.merge(...i);if(n.mapToData)return o(s=Object.assign({},s,{data:s[n.mapToData],[n.mapToData]:void 0}));if(n.renamed){let[i,o]=n.renamed;e.log.warn(`octokit.${t}.${a}() has been renamed to octokit.${i}.${o}()`)}if(n.deprecated&&e.log.warn(n.deprecated),n.renamedParameters){let s=o.endpoint.merge(...i);for(let[i,o]of Object.entries(n.renamedParameters))i in s&&(e.log.warn(`"${i}" parameter is deprecated for "octokit.${t}.${a}()". Use "${o}" instead`),o in s||(s[o]=s[i]),delete s[i]);return o(s)}return o(...i)},o)}(e,i,t,d,r);continue}c[t]=e.request.defaults(d)}return a}(e,am)}}function ah(e,t,a){let i="function"==typeof t?t.endpoint(a):e.request.endpoint(t,a),n="function"==typeof t?t:e.request,o=i.method,s=i.headers,r=i.url;return{[Symbol.asyncIterator]:()=>({async next(){if(!r)return{done:!0};try{let e=await n({method:o,url:r,headers:s}),t=function(e){if(!e.data)return{...e,data:[]};if(!("total_count"in e.data&&!("url"in e.data)))return e;let t=e.data.incomplete_results,a=e.data.repository_selection,i=e.data.total_count;delete e.data.incomplete_results,delete e.data.repository_selection,delete e.data.total_count;let n=Object.keys(e.data)[0],o=e.data[n];return e.data=o,void 0!==t&&(e.data.incomplete_results=t),void 0!==a&&(e.data.repository_selection=a),e.data.total_count=i,e}(e);return r=((t.headers.link||"").match(/<([^>]+)>;\s*rel="next"/)||[])[1],{value:t}}catch(e){if(409!==e.status)throw e;return r="",{value:{status:200,headers:{},data:[]}}}}})}}function ab(e,t,a,i){return"function"==typeof a&&(i=a,a=void 0),function e(t,a,i,n){return i.next().then(o=>{if(o.done)return a;let s=!1;return(a=a.concat(n?n(o.value,function(){s=!0}):o.value.data),s)?a:e(t,a,i,n)})}(e,[],ah(e,t,a)[Symbol.asyncIterator](),i)}function af(e){return{paginate:Object.assign(ab.bind(null,e),{iterator:ah.bind(null,e)})}}ag.VERSION="5.16.2",Object.assign(ab,{iterator:ah}),af.VERSION="2.21.3",eO.context=new eJ.Context;const av=ez.getApiBaseUrl();eO.defaults={baseUrl:av,request:{agent:ez.getProxyAgent(av)}},eO.GitHub=au.plugin(ag,af).defaults(eO.defaults),eO.getOctokitOptions=function(e,t){let a=Object.assign({},t||{}),i=ez.getAuthString(e,a);return i&&(a.auth=i),a},eH.context=new eX.Context,eH.getOctokit=function(e,t,...a){return new(eO.GitHub.plugin(...a))(eO.getOctokitOptions(e,t))};var aI={};Object.defineProperty(aI,"__esModule",{value:!0}),aI.createClient=aI.getApiToken=aI.IN_PROGRESS_TEST_RUN_STATUS=aI.getLatestTestRunResults=aI.getTestRun=aI.executeSecureTunnelTestRun=aI.postSessionIdNotification=aI.getRecordingCommandId=aI.getRecordedSessionData=aI.getRecordedSession=aI.getReplayV3DownloadUrls=aI.getReplayDownloadUrl=aI.getReplay=aI.getProject=void 0;var aC={},ay=aC&&aC.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(aC,"__esModule",{value:!0}),aC.getProject=void 0;const aw=ay(X("5mM36")),ax=async e=>{let{data:t}=await e.get("projects/token-info").catch(e=>{var t;if(aw.default.isAxiosError(e)&&(null===(t=e.response)||void 0===t?void 0:t.status)===404)return{data:null};throw e});return t};aC.getProject=ax,Object.defineProperty(aI,"getProject",{enumerable:!0,get:function(){return aC.getProject}});var aA={},aG=aA&&aA.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(aA,"__esModule",{value:!0}),aA.getReplayV3DownloadUrls=aA.getReplayDownloadUrl=aA.getReplay=void 0;const aB=aG(X("5mM36")),aS=async(e,t)=>{let{data:a}=await e.get(`replays/${t}`).catch(e=>{var t;if(aB.default.isAxiosError(e)&&(null===(t=e.response)||void 0===t?void 0:t.status)===404)return{data:null};throw e});return a};aA.getReplay=aS;const aZ=async(e,t)=>{let{data:a}=await e.get(`replays/${t}/archive-url`).catch(e=>{var t;if(aB.default.isAxiosError(e)&&(null===(t=e.response)||void 0===t?void 0:t.status)===404)return{data:null};throw e});return a};aA.getReplayDownloadUrl=aZ;const a_=async(e,t)=>{let{data:a}=await e.get(`replays/${t}/download-urls`).catch(e=>{var t;if(aB.default.isAxiosError(e)&&(null===(t=e.response)||void 0===t?void 0:t.status)===404)return{data:null};throw e});return a};aA.getReplayV3DownloadUrls=a_,Object.defineProperty(aI,"getReplay",{enumerable:!0,get:function(){return aA.getReplay}}),Object.defineProperty(aI,"getReplayDownloadUrl",{enumerable:!0,get:function(){return aA.getReplayDownloadUrl}}),Object.defineProperty(aI,"getReplayV3DownloadUrls",{enumerable:!0,get:function(){return aA.getReplayV3DownloadUrls}});var aR={},aV=aR&&aR.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(aR,"__esModule",{value:!0}),aR.postSessionIdNotification=aR.getRecordingCommandId=aR.getRecordedSessionData=aR.getRecordedSession=void 0;const aT=aV(X("5mM36")),aE=async(e,t)=>{let{data:a}=await e.get(`sessions/${t}`).catch(e=>{var t;if(aT.default.isAxiosError(e)&&(null===(t=e.response)||void 0===t?void 0:t.status)===404)return{data:null};throw e});return a};aR.getRecordedSession=aE;const aN=async(e,t)=>{let{data:a}=await e.get(`sessions/${t}/data`).catch(e=>{var t;if(aT.default.isAxiosError(e)&&(null===(t=e.response)||void 0===t?void 0:t.status)===404)return{data:null};throw e});return a};aR.getRecordedSessionData=aN;const aW=async e=>{let{data:t}=await e.post("sessions/start"),{recordingCommandId:a}=t;return a};aR.getRecordingCommandId=aW;const ak=async(e,t,a)=>{await e.post(`sessions/${t}/notify`,{recordingCommandId:a})};aR.postSessionIdNotification=ak,Object.defineProperty(aI,"getRecordedSession",{enumerable:!0,get:function(){return aR.getRecordedSession}}),Object.defineProperty(aI,"getRecordedSessionData",{enumerable:!0,get:function(){return aR.getRecordedSessionData}}),Object.defineProperty(aI,"getRecordingCommandId",{enumerable:!0,get:function(){return aR.getRecordingCommandId}}),Object.defineProperty(aI,"postSessionIdNotification",{enumerable:!0,get:function(){return aR.postSessionIdNotification}});var aH={};Object.defineProperty(aH,"__esModule",{value:!0}),aH.getLatestTestRunResults=aH.getTestRun=aH.executeSecureTunnelTestRun=void 0;var aF=X("5mM36");const aU=async({client:e,headSha:t,tunnelUrl:a,basicAuthUser:i,basicAuthPassword:n,environment:o})=>{let{data:s}=await e.post("test-runs/trigger-secure-tunnel-test-run",{headSha:t,tunnelUrl:a,basicAuthUser:i,basicAuthPassword:n,environment:o}).catch(e=>{var t;if(e instanceof aF.AxiosError&&(null===(t=e.response)||void 0===t?void 0:t.status)===404)return{data:null};throw e});return null!=s?s:null};aH.executeSecureTunnelTestRun=aU;const aY=async({client:e,testRunId:t})=>{let{data:a}=await e.get(`test-runs/${t}`);return a};aH.getTestRun=aY;const aX=async({client:e,commitSha:t,logicalEnvironmentVersion:a,useCloudReplayEnvironmentVersion:i})=>{let{data:n}=await e.get("test-runs/cache",{params:{commitSha:encodeURIComponent(t),...a?{logicalEnvironmentVersion:encodeURIComponent(a)}:{},...i?{useCloudReplayEnvironmentVersion:!0}:{}}}).catch(e=>{var t;if(e instanceof aF.AxiosError&&(null===(t=e.response)||void 0===t?void 0:t.status)===404)return{data:null};throw e});return null!=n?n:null};aH.getLatestTestRunResults=aX,Object.defineProperty(aI,"executeSecureTunnelTestRun",{enumerable:!0,get:function(){return aH.executeSecureTunnelTestRun}}),Object.defineProperty(aI,"getTestRun",{enumerable:!0,get:function(){return aH.getTestRun}}),Object.defineProperty(aI,"getLatestTestRunResults",{enumerable:!0,get:function(){return aH.getLatestTestRunResults}});var aO={};Object.defineProperty(aO,"__esModule",{value:!0}),aO.IN_PROGRESS_TEST_RUN_STATUS=void 0,aO.IN_PROGRESS_TEST_RUN_STATUS=["Scheduled","Running"],Object.defineProperty(aI,"IN_PROGRESS_TEST_RUN_STATUS",{enumerable:!0,get:function(){return aO.IN_PROGRESS_TEST_RUN_STATUS}});var aL={},aD=aL&&aL.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(aL,"__esModule",{value:!0}),aL.getApiToken=void 0;var aK={};Object.defineProperty(aK,"__esModule",{value:!0}),aK.getCommitSha=aK.getMeticulousVersion=aK.IS_METICULOUS_SUPER_USER=aK.COMMON_CHROMIUM_FLAGS=aK.BASE_SNIPPETS_URL=aK.DEFAULT_SCREENSHOTTING_OPTIONS=aK.DEFAULT_EXECUTION_OPTIONS=aK.DebugLogger=aK.setLogLevel=aK.initLogger=aK.METICULOUS_LOGGER_NAME=aK.setMeticulousLocalDataDir=aK.getMeticulousLocalDataDir=aK.defer=void 0;var aJ={};Object.defineProperty(aJ,"__esModule",{value:!0}),aJ.defer=void 0,aJ.defer=function(){let e="pending",t=null,a=null,i=new Promise((e,i)=>{t=e,a=i});return i.then(()=>{e="fulfilled"},()=>{e="rejected"}),{resolve:t,reject:a,promise:i,getState:()=>e}},Object.defineProperty(aK,"defer",{enumerable:!0,get:function(){return aJ.defer}});var az={},aj=az&&az.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(az,"__esModule",{value:!0}),az.setMeticulousLocalDataDir=az.getMeticulousLocalDataDir=void 0;const aP=aj(X("7SZkG"));var aM={},aQ=aM&&aM.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(aM,"__esModule",{value:!0}),aM.setLogLevel=aM.initLogger=aM.METICULOUS_LOGGER_NAME=void 0;const aq=aQ(X("7SZkG"));aM.METICULOUS_LOGGER_NAME="@alwaysmeticulous",aM.initLogger=()=>{let e=aq.default.getLogger(aM.METICULOUS_LOGGER_NAME);return e.setDefaultLevel(aq.default.levels.INFO),e},aM.setLogLevel=e=>{let t=aq.default.getLogger(aM.METICULOUS_LOGGER_NAME);switch((e||"").toLocaleLowerCase()){case"trace":t.setLevel(aq.default.levels.TRACE,!1);break;case"debug":t.setLevel(aq.default.levels.DEBUG,!1);break;case"info":t.setLevel(aq.default.levels.INFO,!1);break;case"warn":t.setLevel(aq.default.levels.WARN,!1);break;case"error":t.setLevel(aq.default.levels.ERROR,!1);break;case"silent":t.setLevel(aq.default.levels.SILENT,!1)}};let a$="";az.getMeticulousLocalDataDir=()=>{let e=aP.default.getLogger(aM.METICULOUS_LOGGER_NAME);return a$?e.debug(`Using local data dir at ${a$}`):((0,az.setMeticulousLocalDataDir)(),e.debug(`Local data dir has not been set explictly, so defaulting to ${a$}`)),a$},az.setMeticulousLocalDataDir=e=>{let t=aP.default.getLogger(aM.METICULOUS_LOGGER_NAME);a$&&t.warn("Meticulous local data dir has already been set by a prior call to setMeticulousLocalDataDir()"),a$=e||process.env.METICULOUS_DIR||(0,A.normalize)((0,A.join)(process.env.HOME||process.cwd(),".meticulous"))},Object.defineProperty(aK,"getMeticulousLocalDataDir",{enumerable:!0,get:function(){return az.getMeticulousLocalDataDir}}),Object.defineProperty(aK,"setMeticulousLocalDataDir",{enumerable:!0,get:function(){return az.setMeticulousLocalDataDir}}),Object.defineProperty(aK,"METICULOUS_LOGGER_NAME",{enumerable:!0,get:function(){return aM.METICULOUS_LOGGER_NAME}}),Object.defineProperty(aK,"initLogger",{enumerable:!0,get:function(){return aM.initLogger}}),Object.defineProperty(aK,"setLogLevel",{enumerable:!0,get:function(){return aM.setLogLevel}});var a1={};Object.defineProperty(a1,"__esModule",{value:!0}),a1.DebugLogger=void 0;class a0 extends Error{}class a2 extends a0{constructor(e){super(`Invalid DateTime: ${e.toMessage()}`)}}class a4 extends a0{constructor(e){super(`Invalid Interval: ${e.toMessage()}`)}}class a9 extends a0{constructor(e){super(`Invalid Duration: ${e.toMessage()}`)}}class a6 extends a0{}class a3 extends a0{constructor(e){super(`Invalid unit ${e}`)}}class a5 extends a0{}class a8 extends a0{constructor(){super("Zone is an abstract class")}}const a7="numeric",ie="short",it="long",ia={year:a7,month:a7,day:a7},ii={year:a7,month:ie,day:a7},io={year:a7,month:ie,day:a7,weekday:ie},is={year:a7,month:it,day:a7},ir={year:a7,month:it,day:a7,weekday:it},ip={hour:a7,minute:a7},il={hour:a7,minute:a7,second:a7},id={hour:a7,minute:a7,second:a7,timeZoneName:ie},ic={hour:a7,minute:a7,second:a7,timeZoneName:it},iu={hour:a7,minute:a7,hourCycle:"h23"},im={hour:a7,minute:a7,second:a7,hourCycle:"h23"},ig={hour:a7,minute:a7,second:a7,hourCycle:"h23",timeZoneName:ie},ih={hour:a7,minute:a7,second:a7,hourCycle:"h23",timeZoneName:it},ib={year:a7,month:a7,day:a7,hour:a7,minute:a7},iv={year:a7,month:a7,day:a7,hour:a7,minute:a7,second:a7},iI={year:a7,month:ie,day:a7,hour:a7,minute:a7},iC={year:a7,month:ie,day:a7,hour:a7,minute:a7,second:a7},iy={year:a7,month:ie,day:a7,weekday:ie,hour:a7,minute:a7},iw={year:a7,month:it,day:a7,hour:a7,minute:a7,timeZoneName:ie},ix={year:a7,month:it,day:a7,hour:a7,minute:a7,second:a7,timeZoneName:ie},iA={year:a7,month:it,day:a7,weekday:it,hour:a7,minute:a7,timeZoneName:it},iG={year:a7,month:it,day:a7,weekday:it,hour:a7,minute:a7,second:a7,timeZoneName:it};class iB{get type(){throw new a8}get name(){throw new a8}get ianaName(){return this.name}get isUniversal(){throw new a8}offsetName(e,t){throw new a8}formatOffset(e,t){throw new a8}offset(e){throw new a8}equals(e){throw new a8}get isValid(){throw new a8}}let iS=null;class iZ extends iB{static get instance(){return null===iS&&(iS=new iZ),iS}get type(){return"system"}get name(){return new Intl.DateTimeFormat().resolvedOptions().timeZone}get isUniversal(){return!1}offsetName(e,{format:t,locale:a}){return nd(e,t,a)}formatOffset(e,t){return ng(this.offset(e),t)}offset(e){return-new Date(e).getTimezoneOffset()}equals(e){return"system"===e.type}get isValid(){return!0}}let i_={};const iR={year:0,month:1,day:2,era:3,hour:4,minute:5,second:6};let iV={};class iT extends iB{static create(e){return iV[e]||(iV[e]=new iT(e)),iV[e]}static resetCache(){iV={},i_={}}static isValidSpecifier(e){return this.isValidZone(e)}static isValidZone(e){if(!e)return!1;try{return new Intl.DateTimeFormat("en-US",{timeZone:e}).format(),!0}catch(e){return!1}}constructor(e){super(),this.zoneName=e,this.valid=iT.isValidZone(e)}get type(){return"iana"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(e,{format:t,locale:a}){return nd(e,t,a,this.name)}formatOffset(e,t){return ng(this.offset(e),t)}offset(e){var t;let a=new Date(e);if(isNaN(a))return NaN;let i=(i_[t=this.name]||(i_[t]=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",era:"short"})),i_[t]),[n,o,s,r,p,l,d]=i.formatToParts?function(e,t){let a=e.formatToParts(t),i=[];for(let e=0;e=0?m:1e3+m))/6e4}equals(e){return"iana"===e.type&&e.name===this.name}get isValid(){return this.valid}}let iE={},iN={};function iW(e,t={}){let a=JSON.stringify([e,t]),i=iN[a];return i||(i=new Intl.DateTimeFormat(e,t),iN[a]=i),i}let ik={},iH={},iF=null;function iU(e,t,a,i){let n=e.listingMode();return"error"===n?null:"en"===n?a(t):i(t)}class iY{constructor(e,t,a){this.padTo=a.padTo||0,this.floor=a.floor||!1;let{padTo:i,floor:n,...o}=a;if(!t||Object.keys(o).length>0){let t={useGrouping:!1,...a};a.padTo>0&&(t.minimumIntegerDigits=a.padTo),this.inf=function(e,t={}){let a=JSON.stringify([e,t]),i=ik[a];return i||(i=new Intl.NumberFormat(e,t),ik[a]=i),i}(e,t)}}format(e){if(!this.inf)return i7(this.floor?Math.floor(e):ni(e,3),this.padTo);{let t=this.floor?Math.floor(e):e;return this.inf.format(t)}}}class iX{constructor(e,t,a){let i;if(this.opts=a,this.originalZone=void 0,this.opts.timeZone)this.dt=e;else if("fixed"===e.zone.type){let t=-(e.offset/60*1),a=t>=0?`Etc/GMT+${t}`:`Etc/GMT${t}`;0!==e.offset&&iT.create(a).valid?(i=a,this.dt=e):(i="UTC",this.dt=0===e.offset?e:e.setZone("UTC").plus({minutes:e.offset}),this.originalZone=e.zone)}else"system"===e.zone.type?this.dt=e:"iana"===e.zone.type?(this.dt=e,i=e.zone.name):(i="UTC",this.dt=e.setZone("UTC").plus({minutes:e.offset}),this.originalZone=e.zone);let n={...this.opts};n.timeZone=n.timeZone||i,this.dtf=iW(t,n)}format(){return this.originalZone?this.formatToParts().map(({value:e})=>e).join(""):this.dtf.format(this.dt.toJSDate())}formatToParts(){let e=this.dtf.formatToParts(this.dt.toJSDate());return this.originalZone?e.map(e=>{if("timeZoneName"!==e.type)return e;{let t=this.originalZone.offsetName(this.dt.ts,{locale:this.dt.locale,format:this.opts.timeZoneName});return{...e,value:t}}}):e}resolvedOptions(){return this.dtf.resolvedOptions()}}class iO{constructor(e,t,a){this.opts={style:"long",...a},!t&&i6()&&(this.rtf=function(e,t={}){let{base:a,...i}=t,n=JSON.stringify([e,i]),o=iH[n];return o||(o=new Intl.RelativeTimeFormat(e,t),iH[n]=o),o}(e,a))}format(e,t){return this.rtf?this.rtf.format(e,t):function(e,t,a="always",i=!1){let n={years:["year","yr."],quarters:["quarter","qtr."],months:["month","mo."],weeks:["week","wk."],days:["day","day","days"],hours:["hour","hr."],minutes:["minute","min."],seconds:["second","sec."]},o=-1===["hours","minutes","seconds"].indexOf(e);if("auto"===a&&o){let a="days"===e;switch(t){case 1:return a?"tomorrow":`next ${n[e][0]}`;case -1:return a?"yesterday":`last ${n[e][0]}`;case 0:return a?"today":`this ${n[e][0]}`}}let s=Object.is(t,-0)||t<0,r=Math.abs(t),p=1===r,l=n[e],d=i?p?l[1]:l[2]||l[1]:p?n[e][0]:e;return s?`${r} ${d} ago`:`in ${r} ${d}`}(t,e,this.opts.numeric,"long"!==this.opts.style)}formatToParts(e,t){return this.rtf?this.rtf.formatToParts(e,t):[]}}class iL{static fromOpts(e){return iL.create(e.locale,e.numberingSystem,e.outputCalendar,e.defaultToEN)}static create(e,t,a,i=!1){let n=e||i0.defaultLocale;return new iL(n||(i?"en-US":iF||(iF=new Intl.DateTimeFormat().resolvedOptions().locale)),t||i0.defaultNumberingSystem,a||i0.defaultOutputCalendar,n)}static resetCache(){iF=null,iN={},ik={},iH={}}static fromObject({locale:e,numberingSystem:t,outputCalendar:a}={}){return iL.create(e,t,a)}constructor(e,t,a,i){var n,o,s;let[r,p,l]=function(e){let t=e.indexOf("-x-");-1!==t&&(e=e.substring(0,t));let a=e.indexOf("-u-");if(-1===a)return[e];{let t,i;try{t=iW(e).resolvedOptions(),i=e}catch(o){let n=e.substring(0,a);t=iW(n).resolvedOptions(),i=n}let{numberingSystem:n,calendar:o}=t;return[i,n,o]}}(e);this.locale=r,this.numberingSystem=t||p||null,this.outputCalendar=a||l||null,this.intl=(n=this.locale,o=this.numberingSystem,((s=this.outputCalendar)||o)&&(n.includes("-u-")||(n+="-u"),s&&(n+=`-ca-${s}`),o&&(n+=`-nu-${o}`)),n),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=i,this.fastNumbersCached=null}get fastNumbers(){return null==this.fastNumbersCached&&(this.fastNumbersCached=(!this.numberingSystem||"latn"===this.numberingSystem)&&("latn"===this.numberingSystem||!this.locale||this.locale.startsWith("en")||"latn"===new Intl.DateTimeFormat(this.intl).resolvedOptions().numberingSystem)),this.fastNumbersCached}listingMode(){let e=this.isEnglish(),t=(null===this.numberingSystem||"latn"===this.numberingSystem)&&(null===this.outputCalendar||"gregory"===this.outputCalendar);return e&&t?"en":"intl"}clone(e){return e&&0!==Object.getOwnPropertyNames(e).length?iL.create(e.locale||this.specifiedLocale,e.numberingSystem||this.numberingSystem,e.outputCalendar||this.outputCalendar,e.defaultToEN||!1):this}redefaultToEN(e={}){return this.clone({...e,defaultToEN:!0})}redefaultToSystem(e={}){return this.clone({...e,defaultToEN:!1})}months(e,t=!1){return iU(this,e,nI,()=>{let a=t?{month:e,day:"numeric"}:{month:e},i=t?"format":"standalone";return this.monthsCache[i][e]||(this.monthsCache[i][e]=function(e){let t=[];for(let a=1;a<=12;a++){let i=sc.utc(2009,a,1);t.push(e(i))}return t}(e=>this.extract(e,a,"month"))),this.monthsCache[i][e]})}weekdays(e,t=!1){return iU(this,e,nx,()=>{let a=t?{weekday:e,year:"numeric",month:"long",day:"numeric"}:{weekday:e},i=t?"format":"standalone";return this.weekdaysCache[i][e]||(this.weekdaysCache[i][e]=function(e){let t=[];for(let a=1;a<=7;a++){let i=sc.utc(2016,11,13+a);t.push(e(i))}return t}(e=>this.extract(e,a,"weekday"))),this.weekdaysCache[i][e]})}meridiems(){return iU(this,void 0,()=>nA,()=>{if(!this.meridiemCache){let e={hour:"numeric",hourCycle:"h12"};this.meridiemCache=[sc.utc(2016,11,13,9),sc.utc(2016,11,13,19)].map(t=>this.extract(t,e,"dayperiod"))}return this.meridiemCache})}eras(e){return iU(this,e,nZ,()=>{let t={era:e};return this.eraCache[e]||(this.eraCache[e]=[sc.utc(-40,1,1),sc.utc(2017,1,1)].map(e=>this.extract(e,t,"era"))),this.eraCache[e]})}extract(e,t,a){let i=this.dtFormatter(e,t).formatToParts().find(e=>e.type.toLowerCase()===a);return i?i.value:null}numberFormatter(e={}){return new iY(this.intl,e.forceSimple||this.fastNumbers,e)}dtFormatter(e,t={}){return new iX(e,this.intl,t)}relFormatter(e={}){return new iO(this.intl,this.isEnglish(),e)}listFormatter(e={}){return function(e,t={}){let a=JSON.stringify([e,t]),i=iE[a];return i||(i=new Intl.ListFormat(e,t),iE[a]=i),i}(this.intl,e)}isEnglish(){return"en"===this.locale||"en-us"===this.locale.toLowerCase()||new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us")}equals(e){return this.locale===e.locale&&this.numberingSystem===e.numberingSystem&&this.outputCalendar===e.outputCalendar}}let iD=null;class iK extends iB{static get utcInstance(){return null===iD&&(iD=new iK(0)),iD}static instance(e){return 0===e?iK.utcInstance:new iK(e)}static parseSpecifier(e){if(e){let t=e.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i);if(t)return new iK(nc(t[1],t[2]))}return null}constructor(e){super(),this.fixed=e}get type(){return"fixed"}get name(){return 0===this.fixed?"UTC":`UTC${ng(this.fixed,"narrow")}`}get ianaName(){return 0===this.fixed?"Etc/UTC":`Etc/GMT${ng(-this.fixed,"narrow")}`}offsetName(){return this.name}formatOffset(e,t){return ng(this.fixed,t)}get isUniversal(){return!0}offset(){return this.fixed}equals(e){return"fixed"===e.type&&e.fixed===this.fixed}get isValid(){return!0}}class iJ extends iB{constructor(e){super(),this.zoneName=e}get type(){return"invalid"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(){return null}formatOffset(){return""}offset(){return NaN}equals(){return!1}get isValid(){return!1}}function iz(e,t){if(i2(e)||null===e)return t;if(e instanceof iB)return e;if("string"==typeof e){let a=e.toLowerCase();return"default"===a?t:"local"===a||"system"===a?iZ.instance:"utc"===a||"gmt"===a?iK.utcInstance:iK.parseSpecifier(a)||iT.create(e)}return i4(e)?iK.instance(e):"object"==typeof e&&"offset"in e&&"function"==typeof e.offset?e:new iJ(e)}let ij=()=>Date.now(),iP="system",iM=null,iQ=null,iq=null,i$=60,i1;class i0{static get now(){return ij}static set now(e){ij=e}static set defaultZone(e){iP=e}static get defaultZone(){return iz(iP,iZ.instance)}static get defaultLocale(){return iM}static set defaultLocale(e){iM=e}static get defaultNumberingSystem(){return iQ}static set defaultNumberingSystem(e){iQ=e}static get defaultOutputCalendar(){return iq}static set defaultOutputCalendar(e){iq=e}static get twoDigitCutoffYear(){return i$}static set twoDigitCutoffYear(e){i$=e%100}static get throwOnInvalid(){return i1}static set throwOnInvalid(e){i1=e}static resetCaches(){iL.resetCache(),iT.resetCache()}}function i2(e){return void 0===e}function i4(e){return"number"==typeof e}function i9(e){return"number"==typeof e&&e%1==0}function i6(){try{return"undefined"!=typeof Intl&&!!Intl.RelativeTimeFormat}catch(e){return!1}}function i3(e,t,a){if(0!==e.length)return e.reduce((e,i)=>{let n=[t(i),i];return e&&a(e[0],n[0])===e[0]?e:n},null)[1]}function i5(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function i8(e,t,a){return i9(e)&&e>=t&&e<=a}function i7(e,t=2){return e<0?"-"+(""+-e).padStart(t,"0"):(""+e).padStart(t,"0")}function ne(e){if(!i2(e)&&null!==e&&""!==e)return parseInt(e,10)}function nt(e){if(!i2(e)&&null!==e&&""!==e)return parseFloat(e)}function na(e){if(!i2(e)&&null!==e&&""!==e)return Math.floor(1e3*parseFloat("0."+e))}function ni(e,t,a=!1){let i=10**t;return(a?Math.trunc:Math.round)(e*i)/i}function nn(e){return e%4==0&&(e%100!=0||e%400==0)}function no(e){return nn(e)?366:365}function ns(e,t){var a;let i=(a=t-1)-12*Math.floor(a/12)+1;return 2===i?nn(e+(t-i)/12)?29:28:[31,null,31,30,31,30,31,31,30,31,30,31][i-1]}function nr(e){let t=Date.UTC(e.year,e.month-1,e.day,e.hour,e.minute,e.second,e.millisecond);return e.year<100&&e.year>=0&&(t=new Date(t)).setUTCFullYear(e.year,e.month-1,e.day),+t}function np(e){let t=e-1;return 4==(e+Math.floor(e/4)-Math.floor(e/100)+Math.floor(e/400))%7||3==(t+Math.floor(t/4)-Math.floor(t/100)+Math.floor(t/400))%7?53:52}function nl(e){return e>99?e:e>i0.twoDigitCutoffYear?1900+e:2e3+e}function nd(e,t,a,i=null){let n=new Date(e),o={hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"};i&&(o.timeZone=i);let s={timeZoneName:t,...o},r=new Intl.DateTimeFormat(a,s).formatToParts(n).find(e=>"timezonename"===e.type.toLowerCase());return r?r.value:null}function nc(e,t){let a=parseInt(e,10);Number.isNaN(a)&&(a=0);let i=parseInt(t,10)||0,n=a<0||Object.is(a,-0)?-i:i;return 60*a+n}function nu(e){let t=Number(e);if("boolean"==typeof e||""===e||Number.isNaN(t))throw new a5(`Invalid unit value ${e}`);return t}function nm(e,t){let a={};for(let i in e)if(i5(e,i)){let n=e[i];if(null==n)continue;a[t(i)]=nu(n)}return a}function ng(e,t){let a=Math.trunc(Math.abs(e/60)),i=Math.trunc(Math.abs(e%60)),n=e>=0?"+":"-";switch(t){case"short":return`${n}${i7(a,2)}:${i7(i,2)}`;case"narrow":return`${n}${a}${i>0?`:${i}`:""}`;case"techie":return`${n}${i7(a,2)}${i7(i,2)}`;default:throw RangeError(`Value format ${t} is out of range for property format`)}}function nh(e){return["hour","minute","second","millisecond"].reduce((t,a)=>(t[a]=e[a],t),{})}const nb=["January","February","March","April","May","June","July","August","September","October","November","December"],nf=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],nv=["J","F","M","A","M","J","J","A","S","O","N","D"];function nI(e){switch(e){case"narrow":return[...nv];case"short":return[...nf];case"long":return[...nb];case"numeric":return["1","2","3","4","5","6","7","8","9","10","11","12"];case"2-digit":return["01","02","03","04","05","06","07","08","09","10","11","12"];default:return null}}const nC=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],ny=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],nw=["M","T","W","T","F","S","S"];function nx(e){switch(e){case"narrow":return[...nw];case"short":return[...ny];case"long":return[...nC];case"numeric":return["1","2","3","4","5","6","7"];default:return null}}const nA=["AM","PM"],nG=["Before Christ","Anno Domini"],nB=["BC","AD"],nS=["B","A"];function nZ(e){switch(e){case"narrow":return[...nS];case"short":return[...nB];case"long":return[...nG];default:return null}}function n_(e,t){let a="";for(let i of e)i.literal?a+=i.val:a+=t(i.val);return a}const nR={D:ia,DD:ii,DDD:is,DDDD:ir,t:ip,tt:il,ttt:id,tttt:ic,T:iu,TT:im,TTT:ig,TTTT:ih,f:ib,ff:iI,fff:iw,ffff:iA,F:iv,FF:iC,FFF:ix,FFFF:iG};class nV{static create(e,t={}){return new nV(e,t)}static parseFormat(e){let t=null,a="",i=!1,n=[];for(let o=0;o0&&n.push({literal:i||/^\s+$/.test(a),val:a}),t=null,a="",i=!i):i?a+=s:s===t?a+=s:(a.length>0&&n.push({literal:/^\s+$/.test(a),val:a}),a=s,t=s)}return a.length>0&&n.push({literal:i||/^\s+$/.test(a),val:a}),n}static macroTokenToFormatOpts(e){return nR[e]}constructor(e,t){this.opts=t,this.loc=e,this.systemLoc=null}formatWithSystemDefault(e,t){return null===this.systemLoc&&(this.systemLoc=this.loc.redefaultToSystem()),this.systemLoc.dtFormatter(e,{...this.opts,...t}).format()}dtFormatter(e,t={}){return this.loc.dtFormatter(e,{...this.opts,...t})}formatDateTime(e,t){return this.dtFormatter(e,t).format()}formatDateTimeParts(e,t){return this.dtFormatter(e,t).formatToParts()}formatInterval(e,t){return this.dtFormatter(e.start,t).dtf.formatRange(e.start.toJSDate(),e.end.toJSDate())}resolvedOptions(e,t){return this.dtFormatter(e,t).resolvedOptions()}num(e,t=0){if(this.opts.forceSimple)return i7(e,t);let a={...this.opts};return t>0&&(a.padTo=t),this.loc.numberFormatter(a).format(e)}formatDateTimeFromString(e,t){let a="en"===this.loc.listingMode(),i=this.loc.outputCalendar&&"gregory"!==this.loc.outputCalendar,n=(t,a)=>this.loc.extract(e,t,a),o=t=>e.isOffsetFixed&&0===e.offset&&t.allowZ?"Z":e.isValid?e.zone.formatOffset(e.ts,t.format):"",s=()=>a?nA[e.hour<12?0:1]:n({hour:"numeric",hourCycle:"h12"},"dayperiod"),r=(t,i)=>a?nI(t)[e.month-1]:n(i?{month:t}:{month:t,day:"numeric"},"month"),p=(t,i)=>a?nx(t)[e.weekday-1]:n(i?{weekday:t}:{weekday:t,month:"long",day:"numeric"},"weekday"),l=t=>{let a=nV.macroTokenToFormatOpts(t);return a?this.formatWithSystemDefault(e,a):t},d=t=>a?nZ(t)[e.year<0?0:1]:n({era:t},"era");return n_(nV.parseFormat(t),t=>{switch(t){case"S":return this.num(e.millisecond);case"u":case"SSS":return this.num(e.millisecond,3);case"s":return this.num(e.second);case"ss":return this.num(e.second,2);case"uu":return this.num(Math.floor(e.millisecond/10),2);case"uuu":return this.num(Math.floor(e.millisecond/100));case"m":return this.num(e.minute);case"mm":return this.num(e.minute,2);case"h":return this.num(e.hour%12==0?12:e.hour%12);case"hh":return this.num(e.hour%12==0?12:e.hour%12,2);case"H":return this.num(e.hour);case"HH":return this.num(e.hour,2);case"Z":return o({format:"narrow",allowZ:this.opts.allowZ});case"ZZ":return o({format:"short",allowZ:this.opts.allowZ});case"ZZZ":return o({format:"techie",allowZ:this.opts.allowZ});case"ZZZZ":return e.zone.offsetName(e.ts,{format:"short",locale:this.loc.locale});case"ZZZZZ":return e.zone.offsetName(e.ts,{format:"long",locale:this.loc.locale});case"z":return e.zoneName;case"a":return s();case"d":return i?n({day:"numeric"},"day"):this.num(e.day);case"dd":return i?n({day:"2-digit"},"day"):this.num(e.day,2);case"c":case"E":return this.num(e.weekday);case"ccc":return p("short",!0);case"cccc":return p("long",!0);case"ccccc":return p("narrow",!0);case"EEE":return p("short",!1);case"EEEE":return p("long",!1);case"EEEEE":return p("narrow",!1);case"L":return i?n({month:"numeric",day:"numeric"},"month"):this.num(e.month);case"LL":return i?n({month:"2-digit",day:"numeric"},"month"):this.num(e.month,2);case"LLL":return r("short",!0);case"LLLL":return r("long",!0);case"LLLLL":return r("narrow",!0);case"M":return i?n({month:"numeric"},"month"):this.num(e.month);case"MM":return i?n({month:"2-digit"},"month"):this.num(e.month,2);case"MMM":return r("short",!1);case"MMMM":return r("long",!1);case"MMMMM":return r("narrow",!1);case"y":return i?n({year:"numeric"},"year"):this.num(e.year);case"yy":return i?n({year:"2-digit"},"year"):this.num(e.year.toString().slice(-2),2);case"yyyy":return i?n({year:"numeric"},"year"):this.num(e.year,4);case"yyyyyy":return i?n({year:"numeric"},"year"):this.num(e.year,6);case"G":return d("short");case"GG":return d("long");case"GGGGG":return d("narrow");case"kk":return this.num(e.weekYear.toString().slice(-2),2);case"kkkk":return this.num(e.weekYear,4);case"W":return this.num(e.weekNumber);case"WW":return this.num(e.weekNumber,2);case"o":return this.num(e.ordinal);case"ooo":return this.num(e.ordinal,3);case"q":return this.num(e.quarter);case"qq":return this.num(e.quarter,2);case"X":return this.num(Math.floor(e.ts/1e3));case"x":return this.num(e.ts);default:return l(t)}})}formatDurationFromString(e,t){let a;let i=e=>{switch(e[0]){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":return"hour";case"d":return"day";case"w":return"week";case"M":return"month";case"y":return"year";default:return null}},n=nV.parseFormat(t),o=n.reduce((e,{literal:t,val:a})=>t?e:e.concat(a),[]);return n_(n,(a=e.shiftTo(...o.map(i).filter(e=>e)),e=>{let t=i(e);return t?this.num(a.get(t),e.length):e}))}}class nT{constructor(e,t){this.reason=e,this.explanation=t}toMessage(){return this.explanation?`${this.reason}: ${this.explanation}`:this.reason}}const nE=/[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/;function nN(...e){let t=e.reduce((e,t)=>e+t.source,"");return RegExp(`^${t}$`)}function nW(...e){return t=>e.reduce(([e,a,i],n)=>{let[o,s,r]=n(t,i);return[{...e,...o},s||a,r]},[{},null,1]).slice(0,2)}function nk(e,...t){if(null==e)return[null,null];for(let[a,i]of t){let t=a.exec(e);if(t)return i(t)}return[null,null]}function nH(...e){return(t,a)=>{let i;let n={};for(i=0;ivoid 0!==e&&(t||e&&d)?-e:e;return[{years:u(nt(a)),months:u(nt(i)),weeks:u(nt(n)),days:u(nt(o)),hours:u(nt(s)),minutes:u(nt(r)),seconds:u(nt(p),"-0"===p),milliseconds:u(na(l),c)}]}const n1={GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function n0(e,t,a,i,n,o,s){let r={year:2===t.length?nl(ne(t)):ne(t),month:nf.indexOf(a)+1,day:ne(i),hour:ne(n),minute:ne(o)};return s&&(r.second=ne(s)),e&&(r.weekday=e.length>3?nC.indexOf(e)+1:ny.indexOf(e)+1),r}const n2=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;function n4(e){let[,t,a,i,n,o,s,r,p,l,d,c]=e;return[n0(t,n,i,a,o,s,r),new iK(p?n1[p]:l?0:nc(d,c))]}const n9=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/,n6=/^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/,n3=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/;function n5(e){let[,t,a,i,n,o,s,r]=e;return[n0(t,n,i,a,o,s,r),iK.utcInstance]}function n8(e){let[,t,a,i,n,o,s,r]=e;return[n0(t,r,a,i,n,o,s),iK.utcInstance]}const n7=nN(/([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/,nO),oe=nN(/(\d{4})-?W(\d\d)(?:-?(\d))?/,nO),ot=nN(/(\d{4})-?(\d{3})/,nO),oa=nN(nX),oi=nW(function(e,t){return[{year:nz(e,t),month:nz(e,t+1,1),day:nz(e,t+2,1)},null,t+3]},nj,nP,nM),on=nW(nL,nj,nP,nM),oo=nW(nD,nj,nP,nM),os=nW(nj,nP,nM),or=nW(nj),op=nN(/(\d{4})-(\d\d)-(\d\d)/,nJ),ol=nN(nK),od=nW(nj,nP,nM),oc="Invalid Duration",ou={weeks:{days:7,hours:168,minutes:10080,seconds:604800,milliseconds:6048e5},days:{hours:24,minutes:1440,seconds:86400,milliseconds:864e5},hours:{minutes:60,seconds:3600,milliseconds:36e5},minutes:{seconds:60,milliseconds:6e4},seconds:{milliseconds:1e3}},om={years:{quarters:4,months:12,weeks:52,days:365,hours:8760,minutes:525600,seconds:31536e3,milliseconds:31536e6},quarters:{months:3,weeks:13,days:91,hours:2184,minutes:131040,seconds:7862400,milliseconds:78624e5},months:{weeks:4,days:30,hours:720,minutes:43200,seconds:2592e3,milliseconds:2592e6},...ou},og={years:{quarters:4,months:12,weeks:52.1775,days:365.2425,hours:8765.82,minutes:525949.2,seconds:31556952,milliseconds:31556952e3},quarters:{months:3,weeks:13.044375,days:91.310625,hours:2191.455,minutes:131487.3,seconds:7889238,milliseconds:7889238e3},months:{weeks:30.436875/7,days:30.436875,hours:730.485,minutes:43829.1,seconds:2629746,milliseconds:2629746e3},...ou},oh=["years","quarters","months","weeks","days","hours","minutes","seconds","milliseconds"],ob=oh.slice(0).reverse();function of(e,t,a=!1){return new oC({values:a?t.values:{...e.values,...t.values||{}},loc:e.loc.clone(t.loc),conversionAccuracy:t.conversionAccuracy||e.conversionAccuracy,matrix:t.matrix||e.matrix})}function ov(e,t){let a=t.milliseconds??0;for(let i of ob.slice(1))t[i]&&(a+=t[i]*e[i].milliseconds);return a}function oI(e,t){let a=0>ov(e,t)?-1:1;oh.reduceRight((i,n)=>{if(i2(t[n]))return i;if(i){let o=t[i]*a,s=e[n][i],r=Math.floor(o/s);t[n]+=r*a,t[i]-=r*s*a}return n},null),oh.reduce((a,i)=>{if(i2(t[i]))return a;if(a){let n=t[a]%1;t[a]-=n,t[i]+=n*e[a][i]}return i},null)}class oC{constructor(e){let t="longterm"===e.conversionAccuracy,a=t?og:om;e.matrix&&(a=e.matrix),this.values=e.values,this.loc=e.loc||iL.create(),this.conversionAccuracy=t?"longterm":"casual",this.invalid=e.invalid||null,this.matrix=a,this.isLuxonDuration=!0}static fromMillis(e,t){return oC.fromObject({milliseconds:e},t)}static fromObject(e,t={}){if(null==e||"object"!=typeof e)throw new a5(`Duration.fromObject: argument expected to be an object, got ${null===e?"null":typeof e}`);return new oC({values:nm(e,oC.normalizeUnit),loc:iL.fromObject(t),conversionAccuracy:t.conversionAccuracy,matrix:t.matrix})}static fromDurationLike(e){if(i4(e))return oC.fromMillis(e);if(oC.isDuration(e))return e;if("object"==typeof e)return oC.fromObject(e);throw new a5(`Unknown duration argument ${e} of type ${typeof e}`)}static fromISO(e,t){let[a]=nk(e,[nq,n$]);return a?oC.fromObject(a,t):oC.invalid("unparsable",`the input "${e}" can't be parsed as ISO 8601`)}static fromISOTime(e,t){let[a]=nk(e,[nQ,or]);return a?oC.fromObject(a,t):oC.invalid("unparsable",`the input "${e}" can't be parsed as ISO 8601`)}static invalid(e,t=null){if(!e)throw new a5("need to specify a reason the Duration is invalid");let a=e instanceof nT?e:new nT(e,t);if(!i0.throwOnInvalid)return new oC({invalid:a});throw new a9(a)}static normalizeUnit(e){let t={year:"years",years:"years",quarter:"quarters",quarters:"quarters",month:"months",months:"months",week:"weeks",weeks:"weeks",day:"days",days:"days",hour:"hours",hours:"hours",minute:"minutes",minutes:"minutes",second:"seconds",seconds:"seconds",millisecond:"milliseconds",milliseconds:"milliseconds"}[e?e.toLowerCase():e];if(!t)throw new a3(e);return t}static isDuration(e){return e&&e.isLuxonDuration||!1}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}toFormat(e,t={}){let a={...t,floor:!1!==t.round&&!1!==t.floor};return this.isValid?nV.create(this.loc,a).formatDurationFromString(this,e):oc}toHuman(e={}){if(!this.isValid)return oc;let t=oh.map(t=>{let a=this.values[t];return i2(a)?null:this.loc.numberFormatter({style:"unit",unitDisplay:"long",...e,unit:t.slice(0,-1)}).format(a)}).filter(e=>e);return this.loc.listFormatter({type:"conjunction",style:e.listStyle||"narrow",...e}).format(t)}toObject(){return this.isValid?{...this.values}:{}}toISO(){if(!this.isValid)return null;let e="P";return 0!==this.years&&(e+=this.years+"Y"),(0!==this.months||0!==this.quarters)&&(e+=this.months+3*this.quarters+"M"),0!==this.weeks&&(e+=this.weeks+"W"),0!==this.days&&(e+=this.days+"D"),(0!==this.hours||0!==this.minutes||0!==this.seconds||0!==this.milliseconds)&&(e+="T"),0!==this.hours&&(e+=this.hours+"H"),0!==this.minutes&&(e+=this.minutes+"M"),(0!==this.seconds||0!==this.milliseconds)&&(e+=ni(this.seconds+this.milliseconds/1e3,3)+"S"),"P"===e&&(e+="T0S"),e}toISOTime(e={}){if(!this.isValid)return null;let t=this.toMillis();return t<0||t>=864e5?null:(e={suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:"extended",...e,includeOffset:!1},sc.fromMillis(t,{zone:"UTC"}).toISOTime(e))}toJSON(){return this.toISO()}toString(){return this.toISO()}toMillis(){return this.isValid?ov(this.matrix,this.values):NaN}valueOf(){return this.toMillis()}plus(e){if(!this.isValid)return this;let t=oC.fromDurationLike(e),a={};for(let e of oh)(i5(t.values,e)||i5(this.values,e))&&(a[e]=t.get(e)+this.get(e));return of(this,{values:a},!0)}minus(e){if(!this.isValid)return this;let t=oC.fromDurationLike(e);return this.plus(t.negate())}mapUnits(e){if(!this.isValid)return this;let t={};for(let a of Object.keys(this.values))t[a]=nu(e(this.values[a],a));return of(this,{values:t},!0)}get(e){return this[oC.normalizeUnit(e)]}set(e){return this.isValid?of(this,{values:{...this.values,...nm(e,oC.normalizeUnit)}}):this}reconfigure({locale:e,numberingSystem:t,conversionAccuracy:a,matrix:i}={}){return of(this,{loc:this.loc.clone({locale:e,numberingSystem:t}),matrix:i,conversionAccuracy:a})}as(e){return this.isValid?this.shiftTo(e).get(e):NaN}normalize(){if(!this.isValid)return this;let e=this.toObject();return oI(this.matrix,e),of(this,{values:e},!0)}rescale(){return this.isValid?of(this,{values:function(e){let t={};for(let[a,i]of Object.entries(e))0!==i&&(t[a]=i);return t}(this.normalize().shiftToAll().toObject())},!0):this}shiftTo(...e){let t;if(!this.isValid||0===e.length)return this;e=e.map(e=>oC.normalizeUnit(e));let a={},i={},n=this.toObject();for(let o of oh)if(e.indexOf(o)>=0){t=o;let e=0;for(let t in i)e+=this.matrix[t][o]*i[t],i[t]=0;i4(n[o])&&(e+=n[o]);let s=Math.trunc(e);a[o]=s,i[o]=(1e3*e-1e3*s)/1e3}else i4(n[o])&&(i[o]=n[o]);for(let e in i)0!==i[e]&&(a[t]+=e===t?i[e]:i[e]/this.matrix[t][e]);return oI(this.matrix,a),of(this,{values:a},!0)}shiftToAll(){return this.isValid?this.shiftTo("years","months","weeks","days","hours","minutes","seconds","milliseconds"):this}negate(){if(!this.isValid)return this;let e={};for(let t of Object.keys(this.values))e[t]=0===this.values[t]?0:-this.values[t];return of(this,{values:e},!0)}get years(){return this.isValid?this.values.years||0:NaN}get quarters(){return this.isValid?this.values.quarters||0:NaN}get months(){return this.isValid?this.values.months||0:NaN}get weeks(){return this.isValid?this.values.weeks||0:NaN}get days(){return this.isValid?this.values.days||0:NaN}get hours(){return this.isValid?this.values.hours||0:NaN}get minutes(){return this.isValid?this.values.minutes||0:NaN}get seconds(){return this.isValid?this.values.seconds||0:NaN}get milliseconds(){return this.isValid?this.values.milliseconds||0:NaN}get isValid(){return null===this.invalid}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}equals(e){if(!this.isValid||!e.isValid||!this.loc.equals(e.loc))return!1;for(let i of oh){var t,a;if(t=this.values[i],a=e.values[i],void 0===t||0===t?void 0!==a&&0!==a:t!==a)return!1}return!0}}const oy="Invalid Interval";class ow{constructor(e){this.s=e.start,this.e=e.end,this.invalid=e.invalid||null,this.isLuxonInterval=!0}static invalid(e,t=null){if(!e)throw new a5("need to specify a reason the Interval is invalid");let a=e instanceof nT?e:new nT(e,t);if(!i0.throwOnInvalid)return new ow({invalid:a});throw new a4(a)}static fromDateTimes(e,t){let a=su(e),i=su(t),n=a&&a.isValid?i&&i.isValid?ie}isBefore(e){return!!this.isValid&&this.e<=e}contains(e){return!!this.isValid&&this.s<=e&&this.e>e}set({start:e,end:t}={}){return this.isValid?ow.fromDateTimes(e||this.s,t||this.e):this}splitAt(...e){if(!this.isValid)return[];let t=e.map(su).filter(e=>this.contains(e)).sort(),a=[],{s:i}=this,n=0;for(;i+this.e?this.e:e;a.push(ow.fromDateTimes(i,o)),i=o,n+=1}return a}splitBy(e){let t=oC.fromDurationLike(e);if(!this.isValid||!t.isValid||0===t.as("milliseconds"))return[];let{s:a}=this,i=1,n,o=[];for(;ae*i));n=+e>+this.e?this.e:e,o.push(ow.fromDateTimes(a,n)),a=n,i+=1}return o}divideEqually(e){return this.isValid?this.splitBy(this.length()/e).slice(0,e):[]}overlaps(e){return this.e>e.s&&this.s=e.e}equals(e){return!!this.isValid&&!!e.isValid&&this.s.equals(e.s)&&this.e.equals(e.e)}intersection(e){if(!this.isValid)return this;let t=this.s>e.s?this.s:e.s,a=this.e=a?null:ow.fromDateTimes(t,a)}union(e){if(!this.isValid)return this;let t=this.se.e?this.e:e.e;return ow.fromDateTimes(t,a)}static merge(e){let[t,a]=e.sort((e,t)=>e.s-t.s).reduce(([e,t],a)=>t?t.overlaps(a)||t.abutsStart(a)?[e,t.union(a)]:[e.concat([t]),a]:[e,a],[[],null]);return a&&t.push(a),t}static xor(e){let t=null,a=0,i=[],n=e.map(e=>[{time:e.s,type:"s"},{time:e.e,type:"e"}]);for(let e of Array.prototype.concat(...n).sort((e,t)=>e.time-t.time))1===(a+="s"===e.type?1:-1)?t=e.time:(t&&+t!=+e.time&&i.push(ow.fromDateTimes(t,e.time)),t=null);return ow.merge(i)}difference(...e){return ow.xor([this].concat(e)).map(e=>this.intersection(e)).filter(e=>e&&!e.isEmpty())}toString(){return this.isValid?`[${this.s.toISO()} \u{2013} ${this.e.toISO()})`:oy}toLocaleString(e=ia,t={}){return this.isValid?nV.create(this.s.loc.clone(t),e).formatInterval(this):oy}toISO(e){return this.isValid?`${this.s.toISO(e)}/${this.e.toISO(e)}`:oy}toISODate(){return this.isValid?`${this.s.toISODate()}/${this.e.toISODate()}`:oy}toISOTime(e){return this.isValid?`${this.s.toISOTime(e)}/${this.e.toISOTime(e)}`:oy}toFormat(e,{separator:t=" – "}={}){return this.isValid?`${this.s.toFormat(e)}${t}${this.e.toFormat(e)}`:oy}toDuration(e,t){return this.isValid?this.e.diff(this.s,e,t):oC.invalid(this.invalidReason)}mapEndpoints(e){return ow.fromDateTimes(e(this.s),e(this.e))}}class ox{static hasDST(e=i0.defaultZone){let t=sc.now().setZone(e).set({month:12});return!e.isUniversal&&t.offset!==t.set({month:6}).offset}static isValidIANAZone(e){return iT.isValidZone(e)}static normalizeZone(e){return iz(e,i0.defaultZone)}static months(e="long",{locale:t=null,numberingSystem:a=null,locObj:i=null,outputCalendar:n="gregory"}={}){return(i||iL.create(t,a,n)).months(e)}static monthsFormat(e="long",{locale:t=null,numberingSystem:a=null,locObj:i=null,outputCalendar:n="gregory"}={}){return(i||iL.create(t,a,n)).months(e,!0)}static weekdays(e="long",{locale:t=null,numberingSystem:a=null,locObj:i=null}={}){return(i||iL.create(t,a,null)).weekdays(e)}static weekdaysFormat(e="long",{locale:t=null,numberingSystem:a=null,locObj:i=null}={}){return(i||iL.create(t,a,null)).weekdays(e,!0)}static meridiems({locale:e=null}={}){return iL.create(e).meridiems()}static eras(e="short",{locale:t=null}={}){return iL.create(t,null,"gregory").eras(e)}static features(){return{relative:i6()}}}function oA(e,t){let a=e=>e.toUTC(0,{keepLocalTime:!0}).startOf("day").valueOf(),i=a(t)-a(e);return Math.floor(oC.fromMillis(i).as("days"))}const oG={arab:"[٠-٩]",arabext:"[۰-۹]",bali:"[᭐-᭙]",beng:"[০-৯]",deva:"[०-९]",fullwide:"[0-9]",gujr:"[૦-૯]",hanidec:"[〇|一|二|三|四|五|六|七|八|九]",khmr:"[០-៩]",knda:"[೦-೯]",laoo:"[໐-໙]",limb:"[᥆-᥏]",mlym:"[൦-൯]",mong:"[᠐-᠙]",mymr:"[၀-၉]",orya:"[୦-୯]",tamldec:"[௦-௯]",telu:"[౦-౯]",thai:"[๐-๙]",tibt:"[༠-༩]",latn:"\\d"},oB={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},oS=oG.hanidec.replace(/[\[|\]]/g,"").split("");function oZ({numberingSystem:e},t=""){return RegExp(`${oG[e||"latn"]}${t}`)}function o_(e,t=e=>e){return{regex:e,deser:([e])=>t(function(e){let t=parseInt(e,10);if(!isNaN(t))return t;t="";for(let a=0;a=a&&i<=n&&(t+=i-a)}}return parseInt(t,10)}(e))}}const oR=String.fromCharCode(160),oV=`[ ${oR}]`,oT=RegExp(oV,"g");function oE(e){return e.replace(/\./g,"\\.?").replace(oT,oV)}function oN(e){return e.replace(/\./g,"").replace(oT," ").toLowerCase()}function oW(e,t){return null===e?null:{regex:RegExp(e.map(oE).join("|")),deser:([a])=>e.findIndex(e=>oN(a)===oN(e))+t}}function ok(e,t){return{regex:e,deser:([,e,t])=>nc(e,t),groups:t}}function oH(e){return{regex:e,deser:([e])=>e}}const oF={year:{"2-digit":"yy",numeric:"yyyyy"},month:{numeric:"M","2-digit":"MM",short:"MMM",long:"MMMM"},day:{numeric:"d","2-digit":"dd"},weekday:{short:"EEE",long:"EEEE"},dayperiod:"a",dayPeriod:"a",hour12:{numeric:"h","2-digit":"hh"},hour24:{numeric:"H","2-digit":"HH"},minute:{numeric:"m","2-digit":"mm"},second:{numeric:"s","2-digit":"ss"},timeZoneName:{long:"ZZZZZ",short:"ZZZ"}};let oU=null;function oY(e,t){return Array.prototype.concat(...e.map(e=>(function(e,t){if(e.literal)return e;let a=oO(nV.macroTokenToFormatOpts(e.val),t);return null==a||a.includes(void 0)?e:a})(e,t)))}function oX(e,t,a){let i=oY(nV.parseFormat(a),e),n=i.map(t=>(function(e,t){let a=oZ(t),i=oZ(t,"{2}"),n=oZ(t,"{3}"),o=oZ(t,"{4}"),s=oZ(t,"{6}"),r=oZ(t,"{1,2}"),p=oZ(t,"{1,3}"),l=oZ(t,"{1,6}"),d=oZ(t,"{1,9}"),c=oZ(t,"{2,4}"),u=oZ(t,"{4,6}"),m=e=>({regex:RegExp(e.val.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")),deser:([e])=>e,literal:!0}),g=(g=>{if(e.literal)return m(g);switch(g.val){case"G":return oW(t.eras("short"),0);case"GG":return oW(t.eras("long"),0);case"y":return o_(l);case"yy":case"kk":return o_(c,nl);case"yyyy":case"kkkk":return o_(o);case"yyyyy":return o_(u);case"yyyyyy":return o_(s);case"M":case"L":case"d":case"H":case"h":case"m":case"q":case"s":case"W":return o_(r);case"MM":case"LL":case"dd":case"HH":case"hh":case"mm":case"qq":case"ss":case"WW":return o_(i);case"MMM":return oW(t.months("short",!0),1);case"MMMM":return oW(t.months("long",!0),1);case"LLL":return oW(t.months("short",!1),1);case"LLLL":return oW(t.months("long",!1),1);case"o":case"S":return o_(p);case"ooo":case"SSS":return o_(n);case"u":return oH(d);case"uu":return oH(r);case"uuu":case"E":case"c":return o_(a);case"a":return oW(t.meridiems(),0);case"EEE":return oW(t.weekdays("short",!1),1);case"EEEE":return oW(t.weekdays("long",!1),1);case"ccc":return oW(t.weekdays("short",!0),1);case"cccc":return oW(t.weekdays("long",!0),1);case"Z":case"ZZ":return ok(RegExp(`([+-]${r.source})(?::(${i.source}))?`),2);case"ZZZ":return ok(RegExp(`([+-]${r.source})(${i.source})?`),2);case"z":return oH(/[a-z_+-/]{1,256}?/i);case" ":return oH(/[^\S\n\r]/);default:return m(g)}})(e)||{invalidReason:"missing Intl.DateTimeFormat.formatToParts support"};return g.token=e,g})(t,e)),o=n.find(e=>e.invalidReason);if(o)return{input:t,tokens:i,invalidReason:o.invalidReason};{let[e,a]=function(e){let t=e.map(e=>e.regex).reduce((e,t)=>`${e}(${t.source})`,"");return[`^${t}$`,e]}(n),o=RegExp(e,"i"),[s,r]=function(e,t,a){let i=e.match(t);if(!i)return[i,{}];{let e={},t=1;for(let n in a)if(i5(a,n)){let o=a[n],s=o.groups?o.groups+1:1;!o.literal&&o.token&&(e[o.token.val[0]]=o.deser(i.slice(t,t+s))),t+=s}return[i,e]}}(t,o,a),[p,l,d]=r?function(e){let t;let a=e=>{switch(e){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":case"H":return"hour";case"d":return"day";case"o":return"ordinal";case"L":case"M":return"month";case"y":return"year";case"E":case"c":return"weekday";case"W":return"weekNumber";case"k":return"weekYear";case"q":return"quarter";default:return null}},i=null;return i2(e.z)||(i=iT.create(e.z)),i2(e.Z)||(i||(i=new iK(e.Z)),t=e.Z),i2(e.q)||(e.M=(e.q-1)*3+1),i2(e.h)||(e.h<12&&1===e.a?e.h+=12:12!==e.h||0!==e.a||(e.h=0)),0===e.G&&e.y&&(e.y=-e.y),i2(e.u)||(e.S=na(e.u)),[Object.keys(e).reduce((t,i)=>{let n=a(i);return n&&(t[n]=e[i]),t},{}),i,t]}(r):[null,null,void 0];if(i5(r,"a")&&i5(r,"H"))throw new a6("Can't include meridiem when specifying 24-hour format");return{input:t,tokens:i,regex:o,rawMatches:s,matches:r,result:p,zone:l,specificOffset:d}}}function oO(e,t){if(!e)return null;let a=nV.create(t,e).dtFormatter((oU||(oU=sc.fromMillis(1555555555555)),oU)),i=a.formatToParts(),n=a.resolvedOptions();return i.map(t=>(function(e,t,a){let{type:i,value:n}=e;if("literal"===i){let e=/^\s+$/.test(n);return{literal:!e,val:e?" ":n}}let o=t[i],s=i;"hour"===i&&(s=null!=t.hour12?t.hour12?"hour12":"hour24":null!=t.hourCycle?"h11"===t.hourCycle||"h12"===t.hourCycle?"hour12":"hour24":a.hour12?"hour12":"hour24");let r=oF[s];if("object"==typeof r&&(r=r[o]),r)return{literal:!1,val:r}})(t,e,n))}const oL=[0,31,59,90,120,151,181,212,243,273,304,334],oD=[0,31,60,91,121,152,182,213,244,274,305,335];function oK(e,t){return new nT("unit out of range",`you specified ${t} (of type ${typeof t}) as a ${e}, which is invalid`)}function oJ(e,t,a){let i=new Date(Date.UTC(e,t-1,a));e<100&&e>=0&&i.setUTCFullYear(i.getUTCFullYear()-1900);let n=i.getUTCDay();return 0===n?7:n}function oz(e,t){let a=nn(e)?oD:oL,i=a.findIndex(e=>enp(t)?(r=t+1,s=1):r=t,{weekYear:r,weekNumber:s,weekday:o,...nh(e)}}function oP(e){let{weekYear:t,weekNumber:a,weekday:i}=e,n=oJ(t,1,4),o=no(t),s=7*a+i-n-3,r;s<1?s+=no(r=t-1):s>o?(r=t+1,s-=no(t)):r=t;let{month:p,day:l}=oz(r,s);return{year:r,month:p,day:l,...nh(e)}}function oM(e){let{year:t,month:a,day:i}=e,n=i+(nn(t)?oD:oL)[a-1];return{year:t,ordinal:n,...nh(e)}}function oQ(e){let{year:t,ordinal:a}=e,{month:i,day:n}=oz(t,a);return{year:t,month:i,day:n,...nh(e)}}function oq(e){let t=i9(e.year),a=i8(e.month,1,12),i=i8(e.day,1,ns(e.year,e.month));return t?a?!i&&oK("day",e.day):oK("month",e.month):oK("year",e.year)}function o$(e){let{hour:t,minute:a,second:i,millisecond:n}=e,o=i8(t,0,23)||24===t&&0===a&&0===i&&0===n,s=i8(a,0,59),r=i8(i,0,59),p=i8(n,0,999);return o?s?r?!p&&oK("millisecond",n):oK("second",i):oK("minute",a):oK("hour",t)}const o1="Invalid DateTime";function o0(e){return new nT("unsupported zone",`the zone "${e.name}" is not supported`)}function o2(e){return null===e.weekData&&(e.weekData=oj(e.c)),e.weekData}function o4(e,t){let a={ts:e.ts,zone:e.zone,c:e.c,o:e.o,loc:e.loc,invalid:e.invalid};return new sc({...a,...t,old:a})}function o9(e,t,a){let i=e-6e4*t,n=a.offset(i);if(t===n)return[i,t];i-=(n-t)*6e4;let o=a.offset(i);return n===o?[i,n]:[e-6e4*Math.min(n,o),Math.max(n,o)]}function o6(e,t){let a=new Date(e+=6e4*t);return{year:a.getUTCFullYear(),month:a.getUTCMonth()+1,day:a.getUTCDate(),hour:a.getUTCHours(),minute:a.getUTCMinutes(),second:a.getUTCSeconds(),millisecond:a.getUTCMilliseconds()}}function o3(e,t){let a=e.o,i=e.c.year+Math.trunc(t.years),n=e.c.month+Math.trunc(t.months)+3*Math.trunc(t.quarters),o={...e.c,year:i,month:n,day:Math.min(e.c.day,ns(i,n))+Math.trunc(t.days)+7*Math.trunc(t.weeks)},s=oC.fromObject({years:t.years-Math.trunc(t.years),quarters:t.quarters-Math.trunc(t.quarters),months:t.months-Math.trunc(t.months),weeks:t.weeks-Math.trunc(t.weeks),days:t.days-Math.trunc(t.days),hours:t.hours,minutes:t.minutes,seconds:t.seconds,milliseconds:t.milliseconds}).as("milliseconds"),[r,p]=o9(nr(o),a,e.zone);return 0!==s&&(r+=s,p=e.zone.offset(r)),{ts:r,o:p}}function o5(e,t,a,i,n,o){let{setZone:s,zone:r}=a;if((!e||0===Object.keys(e).length)&&!t)return sc.invalid(new nT("unparsable",`the input "${n}" can't be parsed as ${i}`));{let i=sc.fromObject(e,{...a,zone:t||r,specificOffset:o});return s?i:i.setZone(r)}}function o8(e,t,a=!0){return e.isValid?nV.create(iL.create("en-US"),{allowZ:a,forceSimple:!0}).formatDateTimeFromString(e,t):null}function o7(e,t){let a=e.c.year>9999||e.c.year<0,i="";return a&&e.c.year>=0&&(i+="+"),i+=i7(e.c.year,a?6:4),t?i+="-"+i7(e.c.month)+"-"+i7(e.c.day):i+=i7(e.c.month)+i7(e.c.day),i}function se(e,t,a,i,n,o){let s=i7(e.c.hour);return t?(s+=":"+i7(e.c.minute),0===e.c.millisecond&&0===e.c.second&&a||(s+=":")):s+=i7(e.c.minute),0===e.c.millisecond&&0===e.c.second&&a||(s+=i7(e.c.second),0===e.c.millisecond&&i||(s+="."+i7(e.c.millisecond,3))),n&&(e.isOffsetFixed&&0===e.offset&&!o?s+="Z":e.o<0?s+="-"+i7(Math.trunc(-e.o/60))+":"+i7(Math.trunc(-e.o%60)):s+="+"+i7(Math.trunc(e.o/60))+":"+i7(Math.trunc(e.o%60))),o&&(s+="["+e.zone.ianaName+"]"),s}const st={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},sa={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},si={ordinal:1,hour:0,minute:0,second:0,millisecond:0},sn=["year","month","day","hour","minute","second","millisecond"],so=["weekYear","weekNumber","weekday","hour","minute","second","millisecond"],ss=["year","ordinal","hour","minute","second","millisecond"];function sr(e){let t={year:"year",years:"year",month:"month",months:"month",day:"day",days:"day",hour:"hour",hours:"hour",minute:"minute",minutes:"minute",quarter:"quarter",quarters:"quarter",second:"second",seconds:"second",millisecond:"millisecond",milliseconds:"millisecond",weekday:"weekday",weekdays:"weekday",weeknumber:"weekNumber",weeksnumber:"weekNumber",weeknumbers:"weekNumber",weekyear:"weekYear",weekyears:"weekYear",ordinal:"ordinal"}[e.toLowerCase()];if(!t)throw new a3(e);return t}function sp(e,t){let a,i;let n=iz(t.zone,i0.defaultZone),o=iL.fromObject(t),s=i0.now();if(i2(e.year))a=s;else{for(let t of sn)i2(e[t])&&(e[t]=st[t]);let t=oq(e)||o$(e);if(t)return sc.invalid(t);let o=n.offset(s);[a,i]=o9(nr(e),o,n)}return new sc({ts:a,zone:n,loc:o,o:i})}function sl(e,t,a){let i=!!i2(a.round)||a.round,n=(e,n)=>(e=ni(e,i||a.calendary?0:2,!0),t.loc.clone(a).relFormatter(a).format(e,n)),o=i=>a.calendary?t.hasSame(e,i)?0:t.startOf(i).diff(e.startOf(i),i).get(i):t.diff(e,i).get(i);if(a.unit)return n(o(a.unit),a.unit);for(let e of a.units){let t=o(e);if(Math.abs(t)>=1)return n(t,e)}return n(e>t?-0:0,a.units[a.units.length-1])}function sd(e){let t={},a;return e.length>0&&"object"==typeof e[e.length-1]?(t=e[e.length-1],a=Array.from(e).slice(0,e.length-1)):a=Array.from(e),[t,a]}class sc{constructor(e){let t=e.zone||i0.defaultZone,a=e.invalid||(Number.isNaN(e.ts)?new nT("invalid input"):null)||(t.isValid?null:o0(t));this.ts=i2(e.ts)?i0.now():e.ts;let i=null,n=null;if(!a){if(e.old&&e.old.ts===this.ts&&e.old.zone.equals(t))[i,n]=[e.old.c,e.old.o];else{let e=t.offset(this.ts);i=(a=Number.isNaN((i=o6(this.ts,e)).year)?new nT("invalid input"):null)?null:i,n=a?null:e}}this._zone=t,this.loc=e.loc||iL.create(),this.invalid=a,this.weekData=null,this.c=i,this.o=n,this.isLuxonDateTime=!0}static now(){return new sc({})}static local(){let[e,t]=sd(arguments),[a,i,n,o,s,r,p]=t;return sp({year:a,month:i,day:n,hour:o,minute:s,second:r,millisecond:p},e)}static utc(){let[e,t]=sd(arguments),[a,i,n,o,s,r,p]=t;return e.zone=iK.utcInstance,sp({year:a,month:i,day:n,hour:o,minute:s,second:r,millisecond:p},e)}static fromJSDate(e,t={}){let a="[object Date]"===Object.prototype.toString.call(e)?e.valueOf():NaN;if(Number.isNaN(a))return sc.invalid("invalid input");let i=iz(t.zone,i0.defaultZone);return i.isValid?new sc({ts:a,zone:i,loc:iL.fromObject(t)}):sc.invalid(o0(i))}static fromMillis(e,t={}){if(i4(e))return e<-864e13||e>864e13?sc.invalid("Timestamp out of range"):new sc({ts:e,zone:iz(t.zone,i0.defaultZone),loc:iL.fromObject(t)});throw new a5(`fromMillis requires a numerical input, but received a ${typeof e} with value ${e}`)}static fromSeconds(e,t={}){if(i4(e))return new sc({ts:1e3*e,zone:iz(t.zone,i0.defaultZone),loc:iL.fromObject(t)});throw new a5("fromSeconds requires a numerical input")}static fromObject(e,t={}){e=e||{};let a=iz(t.zone,i0.defaultZone);if(!a.isValid)return sc.invalid(o0(a));let i=i0.now(),n=i2(t.specificOffset)?a.offset(i):t.specificOffset,o=nm(e,sr),s=!i2(o.ordinal),r=!i2(o.year),p=!i2(o.month)||!i2(o.day),l=r||p,d=o.weekYear||o.weekNumber,c=iL.fromObject(t);if((l||s)&&d)throw new a6("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(p&&s)throw new a6("Can't mix ordinal dates with month/day");let u=d||o.weekday&&!l,m,g,h=o6(i,n);u?(m=so,g=sa,h=oj(h)):s?(m=ss,g=si,h=oM(h)):(m=sn,g=st);let b=!1;for(let e of m)i2(o[e])?b?o[e]=g[e]:o[e]=h[e]:b=!0;let f=(u?function(e){let t=i9(e.weekYear),a=i8(e.weekNumber,1,np(e.weekYear)),i=i8(e.weekday,1,7);return t?a?!i&&oK("weekday",e.weekday):oK("week",e.week):oK("weekYear",e.weekYear)}(o):s?function(e){let t=i9(e.year),a=i8(e.ordinal,1,no(e.year));return t?!a&&oK("ordinal",e.ordinal):oK("year",e.year)}(o):oq(o))||o$(o);if(f)return sc.invalid(f);let[v,I]=o9(nr(u?oP(o):s?oQ(o):o),n,a),C=new sc({ts:v,zone:a,o:I,loc:c});return o.weekday&&l&&e.weekday!==C.weekday?sc.invalid("mismatched weekday",`you can't specify both a weekday of ${o.weekday} and a date of ${C.toISO()}`):C}static fromISO(e,t={}){let[a,i]=nk(e,[n7,oi],[oe,on],[ot,oo],[oa,os]);return o5(a,i,t,"ISO 8601",e)}static fromRFC2822(e,t={}){let[a,i]=nk(e.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim(),[n2,n4]);return o5(a,i,t,"RFC 2822",e)}static fromHTTP(e,t={}){let[a,i]=nk(e,[n9,n5],[n6,n5],[n3,n8]);return o5(a,i,t,"HTTP",t)}static fromFormat(e,t,a={}){if(i2(e)||i2(t))throw new a5("fromFormat requires an input string and a format");let{locale:i=null,numberingSystem:n=null}=a,[o,s,r,p]=function(e,t,a){let{result:i,zone:n,specificOffset:o,invalidReason:s}=oX(e,t,a);return[i,n,o,s]}(iL.fromOpts({locale:i,numberingSystem:n,defaultToEN:!0}),e,t);return p?sc.invalid(p):o5(o,s,a,`format ${t}`,e,r)}static fromString(e,t,a={}){return sc.fromFormat(e,t,a)}static fromSQL(e,t={}){let[a,i]=nk(e,[op,oi],[ol,od]);return o5(a,i,t,"SQL",e)}static invalid(e,t=null){if(!e)throw new a5("need to specify a reason the DateTime is invalid");let a=e instanceof nT?e:new nT(e,t);if(!i0.throwOnInvalid)return new sc({invalid:a});throw new a2(a)}static isDateTime(e){return e&&e.isLuxonDateTime||!1}static parseFormatForOpts(e,t={}){let a=oO(e,iL.fromObject(t));return a?a.map(e=>e?e.val:null).join(""):null}static expandFormat(e,t={}){return oY(nV.parseFormat(e),iL.fromObject(t)).map(e=>e.val).join("")}get(e){return this[e]}get isValid(){return null===this.invalid}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}get outputCalendar(){return this.isValid?this.loc.outputCalendar:null}get zone(){return this._zone}get zoneName(){return this.isValid?this.zone.name:null}get year(){return this.isValid?this.c.year:NaN}get quarter(){return this.isValid?Math.ceil(this.c.month/3):NaN}get month(){return this.isValid?this.c.month:NaN}get day(){return this.isValid?this.c.day:NaN}get hour(){return this.isValid?this.c.hour:NaN}get minute(){return this.isValid?this.c.minute:NaN}get second(){return this.isValid?this.c.second:NaN}get millisecond(){return this.isValid?this.c.millisecond:NaN}get weekYear(){return this.isValid?o2(this).weekYear:NaN}get weekNumber(){return this.isValid?o2(this).weekNumber:NaN}get weekday(){return this.isValid?o2(this).weekday:NaN}get ordinal(){return this.isValid?oM(this.c).ordinal:NaN}get monthShort(){return this.isValid?ox.months("short",{locObj:this.loc})[this.month-1]:null}get monthLong(){return this.isValid?ox.months("long",{locObj:this.loc})[this.month-1]:null}get weekdayShort(){return this.isValid?ox.weekdays("short",{locObj:this.loc})[this.weekday-1]:null}get weekdayLong(){return this.isValid?ox.weekdays("long",{locObj:this.loc})[this.weekday-1]:null}get offset(){return this.isValid?+this.o:NaN}get offsetNameShort(){return this.isValid?this.zone.offsetName(this.ts,{format:"short",locale:this.locale}):null}get offsetNameLong(){return this.isValid?this.zone.offsetName(this.ts,{format:"long",locale:this.locale}):null}get isOffsetFixed(){return this.isValid?this.zone.isUniversal:null}get isInDST(){return!this.isOffsetFixed&&(this.offset>this.set({month:1,day:1}).offset||this.offset>this.set({month:5}).offset)}getPossibleOffsets(){if(!this.isValid||this.isOffsetFixed)return[this];let e=nr(this.c),t=this.zone.offset(e-864e5),a=this.zone.offset(e+864e5),i=this.zone.offset(e-6e4*t),n=this.zone.offset(e-6e4*a);if(i===n)return[this];let o=e-6e4*i,s=e-6e4*n,r=o6(o,i),p=o6(s,n);return r.hour===p.hour&&r.minute===p.minute&&r.second===p.second&&r.millisecond===p.millisecond?[o4(this,{ts:o}),o4(this,{ts:s})]:[this]}get isInLeapYear(){return nn(this.year)}get daysInMonth(){return ns(this.year,this.month)}get daysInYear(){return this.isValid?no(this.year):NaN}get weeksInWeekYear(){return this.isValid?np(this.weekYear):NaN}resolvedLocaleOptions(e={}){let{locale:t,numberingSystem:a,calendar:i}=nV.create(this.loc.clone(e),e).resolvedOptions(this);return{locale:t,numberingSystem:a,outputCalendar:i}}toUTC(e=0,t={}){return this.setZone(iK.instance(e),t)}toLocal(){return this.setZone(i0.defaultZone)}setZone(e,{keepLocalTime:t=!1,keepCalendarTime:a=!1}={}){if((e=iz(e,i0.defaultZone)).equals(this.zone))return this;{if(!e.isValid)return sc.invalid(o0(e));let n=this.ts;if(t||a){var i;let t=e.offset(this.ts),a=this.toObject();[n]=(i=e,o9(nr(a),t,i))}return o4(this,{ts:n,zone:e})}}reconfigure({locale:e,numberingSystem:t,outputCalendar:a}={}){return o4(this,{loc:this.loc.clone({locale:e,numberingSystem:t,outputCalendar:a})})}setLocale(e){return this.reconfigure({locale:e})}set(e){var t,a,i;let n;if(!this.isValid)return this;let o=nm(e,sr),s=!i2(o.weekYear)||!i2(o.weekNumber)||!i2(o.weekday),r=!i2(o.ordinal),p=!i2(o.year),l=!i2(o.month)||!i2(o.day),d=o.weekYear||o.weekNumber;if((p||l||r)&&d)throw new a6("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(l&&r)throw new a6("Can't mix ordinal dates with month/day");s?n=oP({...oj(this.c),...o}):i2(o.ordinal)?(n={...this.toObject(),...o},i2(o.day)&&(n.day=Math.min(ns(n.year,n.month),n.day))):n=oQ({...oM(this.c),...o});let[c,u]=(t=n,a=this.o,i=this.zone,o9(nr(t),a,i));return o4(this,{ts:c,o:u})}plus(e){return this.isValid?o4(this,o3(this,oC.fromDurationLike(e))):this}minus(e){return this.isValid?o4(this,o3(this,oC.fromDurationLike(e).negate())):this}startOf(e){if(!this.isValid)return this;let t={},a=oC.normalizeUnit(e);switch(a){case"years":t.month=1;case"quarters":case"months":t.day=1;case"weeks":case"days":t.hour=0;case"hours":t.minute=0;case"minutes":t.second=0;case"seconds":t.millisecond=0}if("weeks"===a&&(t.weekday=1),"quarters"===a){let e=Math.ceil(this.month/3);t.month=(e-1)*3+1}return this.set(t)}endOf(e){return this.isValid?this.plus({[e]:1}).startOf(e).minus(1):this}toFormat(e,t={}){return this.isValid?nV.create(this.loc.redefaultToEN(t)).formatDateTimeFromString(this,e):o1}toLocaleString(e=ia,t={}){return this.isValid?nV.create(this.loc.clone(t),e).formatDateTime(this):o1}toLocaleParts(e={}){return this.isValid?nV.create(this.loc.clone(e),e).formatDateTimeParts(this):[]}toISO({format:e="extended",suppressSeconds:t=!1,suppressMilliseconds:a=!1,includeOffset:i=!0,extendedZone:n=!1}={}){if(!this.isValid)return null;let o="extended"===e;return o7(this,o)+"T"+se(this,o,t,a,i,n)}toISODate({format:e="extended"}={}){return this.isValid?o7(this,"extended"===e):null}toISOWeekDate(){return o8(this,"kkkk-'W'WW-c")}toISOTime({suppressMilliseconds:e=!1,suppressSeconds:t=!1,includeOffset:a=!0,includePrefix:i=!1,extendedZone:n=!1,format:o="extended"}={}){return this.isValid?(i?"T":"")+se(this,"extended"===o,t,e,a,n):null}toRFC2822(){return o8(this,"EEE, dd LLL yyyy HH:mm:ss ZZZ",!1)}toHTTP(){return o8(this.toUTC(),"EEE, dd LLL yyyy HH:mm:ss 'GMT'")}toSQLDate(){return this.isValid?o7(this,!0):null}toSQLTime({includeOffset:e=!0,includeZone:t=!1,includeOffsetSpace:a=!0}={}){let i="HH:mm:ss.SSS";return(t||e)&&(a&&(i+=" "),t?i+="z":e&&(i+="ZZ")),o8(this,i,!0)}toSQL(e={}){return this.isValid?`${this.toSQLDate()} ${this.toSQLTime(e)}`:null}toString(){return this.isValid?this.toISO():o1}valueOf(){return this.toMillis()}toMillis(){return this.isValid?this.ts:NaN}toSeconds(){return this.isValid?this.ts/1e3:NaN}toUnixInteger(){return this.isValid?Math.floor(this.ts/1e3):NaN}toJSON(){return this.toISO()}toBSON(){return this.toJSDate()}toObject(e={}){if(!this.isValid)return{};let t={...this.c};return e.includeConfig&&(t.outputCalendar=this.outputCalendar,t.numberingSystem=this.loc.numberingSystem,t.locale=this.loc.locale),t}toJSDate(){return new Date(this.isValid?this.ts:NaN)}diff(e,t="milliseconds",a={}){if(!this.isValid||!e.isValid)return oC.invalid("created by diffing an invalid DateTime");let i={locale:this.locale,numberingSystem:this.numberingSystem,...a},n=(Array.isArray(t)?t:[t]).map(oC.normalizeUnit),o=e.valueOf()>this.valueOf(),s=function(e,t,a,i){let[n,o,s,r]=function(e,t,a){let i,n;let o={},s=e;for(let[r,p]of[["years",(e,t)=>t.year-e.year],["quarters",(e,t)=>t.quarter-e.quarter+(t.year-e.year)*4],["months",(e,t)=>t.month-e.month+(t.year-e.year)*12],["weeks",(e,t)=>{let a=oA(e,t);return(a-a%7)/7}],["days",oA]])a.indexOf(r)>=0&&(i=r,o[r]=p(e,t),(n=s.plus(o))>t?(o[r]--,(e=s.plus(o))>t&&(n=e,o[r]--,e=s.plus(o))):e=n);return[e,o,n,i]}(e,t,a),p=t-n,l=a.filter(e=>["hours","minutes","seconds","milliseconds"].indexOf(e)>=0);0===l.length&&(s0?oC.fromMillis(p,i).shiftTo(...l).plus(d):d}(o?this:e,o?e:this,n,i);return o?s.negate():s}diffNow(e="milliseconds",t={}){return this.diff(sc.now(),e,t)}until(e){return this.isValid?ow.fromDateTimes(this,e):this}hasSame(e,t){if(!this.isValid)return!1;let a=e.valueOf(),i=this.setZone(e.zone,{keepLocalTime:!0});return i.startOf(t)<=a&&a<=i.endOf(t)}equals(e){return this.isValid&&e.isValid&&this.valueOf()===e.valueOf()&&this.zone.equals(e.zone)&&this.loc.equals(e.loc)}toRelative(e={}){if(!this.isValid)return null;let t=e.base||sc.fromObject({},{zone:this.zone}),a=e.padding?thise.valueOf(),Math.min)}static max(...e){if(!e.every(sc.isDateTime))throw new a5("max requires all arguments be DateTimes");return i3(e,e=>e.valueOf(),Math.max)}static fromFormatExplain(e,t,a={}){let{locale:i=null,numberingSystem:n=null}=a;return oX(iL.fromOpts({locale:i,numberingSystem:n,defaultToEN:!0}),e,t)}static fromStringExplain(e,t,a={}){return sc.fromFormatExplain(e,t,a)}static get DATE_SHORT(){return ia}static get DATE_MED(){return ii}static get DATE_MED_WITH_WEEKDAY(){return io}static get DATE_FULL(){return is}static get DATE_HUGE(){return ir}static get TIME_SIMPLE(){return ip}static get TIME_WITH_SECONDS(){return il}static get TIME_WITH_SHORT_OFFSET(){return id}static get TIME_WITH_LONG_OFFSET(){return ic}static get TIME_24_SIMPLE(){return iu}static get TIME_24_WITH_SECONDS(){return im}static get TIME_24_WITH_SHORT_OFFSET(){return ig}static get TIME_24_WITH_LONG_OFFSET(){return ih}static get DATETIME_SHORT(){return ib}static get DATETIME_SHORT_WITH_SECONDS(){return iv}static get DATETIME_MED(){return iI}static get DATETIME_MED_WITH_SECONDS(){return iC}static get DATETIME_MED_WITH_WEEKDAY(){return iy}static get DATETIME_FULL(){return iw}static get DATETIME_FULL_WITH_SECONDS(){return ix}static get DATETIME_HUGE(){return iA}static get DATETIME_HUGE_WITH_SECONDS(){return iG}}function su(e){if(sc.isDateTime(e))return e;if(e&&e.valueOf&&i4(e.valueOf()))return sc.fromJSDate(e);if(e&&"object"==typeof e)return sc.fromObject(e);throw new a5(`Unknown datetime argument: ${e}, of type ${typeof e}`)}var sm={};Object.defineProperty(sm,"__esModule",{value:!0}),sm.getLogFile=void 0;const sg=async e=>{let t=(0,A.join)((0,az.getMeticulousLocalDataDir)(),"logs");return await (0,N.mkdir)(t,{recursive:!0}),(0,A.join)(t,`${e}.log`)};sm.getLogFile=sg;const sh=()=>(0,E.createHash)("sha256").update((0,E.randomUUID)()).digest("hex").slice(0,8),sb=()=>new Promise((e,t)=>{(0,V.exec)("uname -a",{encoding:"utf-8"},(a,i)=>{if(a){t(a);return}e(i)})}),sf=()=>new Promise((e,t)=>{(0,V.exec)("npm config get",{encoding:"utf-8"},(a,i)=>{if(a){t(a);return}e(i)})});class sv{constructor(e,t,a,i){this.invocationId=e,this.logFilePath=t,this.logFile=a,this.writeStream=i}log(e){this.writeStream.write(e),this.writeStream.write("\n")}logObject(e){this.log(JSON.stringify(e,null,2))}async logStart(){console.log(`Recording detailed log file in ${this.logFilePath}`);let e=await sb().catch(e=>`Error: ${e}`),t=process.cwd(),a=process.argv,i=process.execArgv,n=(0,az.getMeticulousLocalDataDir)();this.log("Invocation:"),this.logObject({uname:e,cwd:t,argv:a,execArgv:i,meticulousLocalDataDir:n});let o=await sf().catch(e=>`Error: ${e}`);this.log("NPM config:"),this.logObject({npmConfig:o})}static async create(){let e=sv.genereteInvocationId(),t=await (0,sm.getLogFile)(e),a=await (0,N.open)(t,"ax"),i=a.createWriteStream({encoding:"utf-8"}),n=new sv(e,t,a,i);return await n.logStart(),n}static genereteInvocationId(){let e=sc.utc();return`${e.toISO()}_${sh()}`}}a1.DebugLogger=sv,Object.defineProperty(aK,"DebugLogger",{enumerable:!0,get:function(){return a1.DebugLogger}});var sI={};Object.defineProperty(sI,"__esModule",{value:!0}),sI.COMMON_CHROMIUM_FLAGS=sI.DEFAULT_SCREENSHOTTING_OPTIONS=sI.DEFAULT_EXECUTION_OPTIONS=sI.IS_METICULOUS_SUPER_USER=sI.BASE_SNIPPETS_URL=void 0,sI.BASE_SNIPPETS_URL="https://snippet.meticulous.ai/",sI.IS_METICULOUS_SUPER_USER=!!process.env.METICULOUS_SUPER_USER,sI.DEFAULT_EXECUTION_OPTIONS={headless:!0,devTools:!1,bypassCSP:!1,shiftTime:!0,networkStubbing:!0,skipPauses:!0,moveBeforeMouseEvent:!0,disableRemoteFonts:!1,noSandbox:!1,maxDurationMs:3e5,maxEventCount:null,essentialFeaturesOnly:!1,logPossibleNonDeterminism:!1},sI.DEFAULT_SCREENSHOTTING_OPTIONS={enabled:!0,storyboardOptions:{enabled:!0},diffOptions:{diffThreshold:1e-5,diffPixelThreshold:.01}},sI.COMMON_CHROMIUM_FLAGS=["--disable-features=Translate,WebFontsCacheAwareTimeoutAdaption","--disable-background-timer-throttling","--disable-renderer-backgrounding","--disable-backgrounding-occluded-windows","--disable-breakpad","--disable-client-side-phishing-detection","--disable-default-apps","--disable-dev-shm-usage","--disable-extensions","--disable-hang-monitor","--disable-ipc-flooding-protection","--disable-notifications","--disable-prompt-on-repost","--disable-sync","--no-first-run","--blink-settings=imageAnimationPolicy=2","--disable-smooth-scrolling"],Object.defineProperty(aK,"DEFAULT_EXECUTION_OPTIONS",{enumerable:!0,get:function(){return sI.DEFAULT_EXECUTION_OPTIONS}}),Object.defineProperty(aK,"DEFAULT_SCREENSHOTTING_OPTIONS",{enumerable:!0,get:function(){return sI.DEFAULT_SCREENSHOTTING_OPTIONS}}),Object.defineProperty(aK,"BASE_SNIPPETS_URL",{enumerable:!0,get:function(){return sI.BASE_SNIPPETS_URL}}),Object.defineProperty(aK,"COMMON_CHROMIUM_FLAGS",{enumerable:!0,get:function(){return sI.COMMON_CHROMIUM_FLAGS}}),Object.defineProperty(aK,"IS_METICULOUS_SUPER_USER",{enumerable:!0,get:function(){return sI.IS_METICULOUS_SUPER_USER}});var sC={};Object.defineProperty(sC,"__esModule",{value:!0}),sC.getMeticulousVersion=void 0;let sy="";const sw=async e=>{if(sy)return sy;let t=JSON.parse(await (0,N.readFile)(e,{encoding:"utf-8"})).version||"unknown";return sy=`sdk-v${t}`};sC.getMeticulousVersion=sw,Object.defineProperty(aK,"getMeticulousVersion",{enumerable:!0,get:function(){return sC.getMeticulousVersion}});var sx={},sA=sx&&sx.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(sx,"__esModule",{value:!0}),sx.getCommitSha=void 0;const sG=sA(X("7SZkG")),sB=()=>new Promise((e,t)=>{(0,V.exec)("git rev-parse HEAD",{encoding:"utf-8"},(a,i)=>{if(a){t(a);return}e(i)})}),sS=async e=>{if(e)return e;let t=sG.default.getLogger(aM.METICULOUS_LOGGER_NAME);try{return(await sB()).trim()}catch(e){if(e instanceof Error&&e.message.startsWith("Command failed"))return t.info("Notice: not running in a git repository"),"";return t.error(e),""}};sx.getCommitSha=sS,Object.defineProperty(aK,"getCommitSha",{enumerable:!0,get:function(){return sx.getCommitSha}});const sZ=aD(X("7SZkG"));aL.getApiToken=e=>{let t=sZ.default.getLogger(aK.METICULOUS_LOGGER_NAME);if(e)return e;if(process.env.METICULOUS_API_TOKEN)return process.env.METICULOUS_API_TOKEN;let a=(0,A.join)((0,w.homedir)(),".meticulous/config.json");if((0,y.existsSync)(a)){let e=JSON.parse((0,y.readFileSync)(a).toString("utf-8"));if(e.apiToken)return t.info(`Using apiToken from ${a}`),e.apiToken}return null},Object.defineProperty(aI,"getApiToken",{enumerable:!0,get:function(){return aL.getApiToken}});var s_={},sR=s_&&s_.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(s_,"__esModule",{value:!0}),s_.createClient=void 0;const sV=sR(X("5mM36")),sT=sR(X("6Kcit")),sE=sR(X("7SZkG"));s_.createClient=({apiToken:e})=>{let t=(0,aL.getApiToken)(e);t||(sE.default.getLogger(aK.METICULOUS_LOGGER_NAME).error("You must provide an API token by using the --apiToken parameter"),process.exit(1));let a=sV.default.create({baseURL:sN(),headers:{authorization:t},timeout:6e4});return(0,sT.default)(a,{retries:3}),a};const sN=()=>process.env.METICULOUS_API_URL?process.env.METICULOUS_API_URL:"https://app.meticulous.ai/api/";Object.defineProperty(aI,"createClient",{enumerable:!0,get:function(){return s_.createClient}});var sW={},sk=sW&&sW.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(sW,"__esModule",{value:!0}),sW.executeRemoteTestRun=void 0;var sH={};Object.defineProperty(sH,"__esModule",{value:!0}),sH.localtunnel=void 0;var sF={};Object.defineProperty(sF,"__esModule",{value:!0}),sF.localtunnel=void 0;var sU={},sY=sU&&sU.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(sU,"__esModule",{value:!0}),sU.Tunnel=void 0;const sX=sY(X("5mM36")),sO=sY(X("6Kcit"));var sL={},sD=sL&&sL.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a);var n=Object.getOwnPropertyDescriptor(t,a);(!n||("get"in n?!t.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,i,n)}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),sK=sL&&sL.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),sJ=sL&&sL.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&sD(t,e,a);return sK(t,e),t},sz=sL&&sL.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(sL,"__esModule",{value:!0}),sL.TunnelCluster=void 0;const sj=sz(v),sP=sJ(b),sM=sJ(f);var sQ={};Object.defineProperty(sQ,"__esModule",{value:!0}),sQ.HeaderHostTransformer=void 0;class sq extends B.Transform{constructor(e){super(e),this.host=e.host||"localhost",this.replaced=!1}_transform(e,t,a){a(null,this.replaced?e:e.toString().replace(/(\r\n[Hh]ost: )\S+/,(e,t)=>(this.replaced=!0,t+this.host)))}}sQ.HeaderHostTransformer=sq;class s$ extends sj.default{constructor(e){super(),this.logger=e.logger,this.opts=e}open(){let e;let t=this.opts,a=t.remoteHost,i=t.remotePort,n=t.localHost,o=t.localPort,s=t.localHttps?"https":"http",r=t.allowInvalidCert;this.logger.debug("establishing tunnel %s://%s:%s <> %s:%s",s,n,o,a,i),(e=t.useTls?sM.connect({host:a,port:i,rejectUnauthorized:!0}):sP.connect({host:a,port:i})).setKeepAlive(!0),e.on("error",t=>{this.logger.debug("got remote connection error",t.message),"ECONNREFUSED"===t.code&&this.emit("error",Error(`connection refused: ${a}:${i} (check your firewall settings)`)),e.destroy()});let p=()=>{let a;if(e.destroyed){this.logger.debug("remote destroyed"),this.emit("dead");return}if(this.logger.debug("connecting locally to %s://%s:%d",s,n,o),e.write(`AUTH ${t.tunnelPassphrase}`),e.pause(),t.localHttps){if(r)this.logger.debug("allowing invalid certificates");else{if(!t.localCert)throw Error("local_cert is required for https");if(!t.localKey)throw Error("local_key is required for https")}a=sM.connect({host:n,port:o,...r?{rejectUnauthorized:!1}:{cert:(0,y.readFileSync)(t.localCert),key:(0,y.readFileSync)(t.localKey),ca:t.localCa?[(0,y.readFileSync)(t.localCa)]:void 0}})}else a=sP.connect({host:n,port:o});let i=()=>{this.logger.debug("remote close"),this.emit("dead"),a.end()};e.once("close",i),a.once("error",t=>{if(this.logger.debug("local error %s",t.message),a.end(),e.removeListener("close",i),"ECONNREFUSED"!==t.code&&"ECONNRESET"!==t.code)return e.destroy();setTimeout(p,1e3)}),a.once("connect",()=>{this.logger.debug("connected locally"),e.resume();let i=e;t.localHost&&(this.logger.debug("transform Host header to %s",t.localHost),i=e.pipe(new sQ.HeaderHostTransformer({host:t.localHost}))),i.pipe(a).pipe(e),a.once("close",t=>{this.logger.debug("local connection closed [%s]",t),e.destroy()})})};e.on("data",e=>{let t=e.toString().match(/^(\w+) (\S+)/);t&&this.emit("request",{method:t[1],path:t[2]})});let l=t.useTls?"secureConnect":"connect";e.once(l,()=>{this.emit("open",e),p()})}}sL.TunnelCluster=s$;class s1 extends v.EventEmitter{constructor(e){super(),this.tunnelCluster=null,this.clientId=null,this.url=null,this.basicAuthUser=null,this.basicAuthPassword=null,this.logger=e.logger,this.opts=e,this.closed=!1,this.host=e.host||"https://tunnels.meticulous.ai"}_getInfo(e){let{id:t,port:a,url:i,max_conn_count:n,tunnel_passphrase:o,basic_auth_user:s,basic_auth_password:r}=e,{port:p,localHost:l}=this.opts,{localHttps:d,localCert:c,localKey:u,localCa:m,allowInvalidCert:g}=this.opts,h=new URL(this.host),b="https:"===h.protocol;return{name:t,url:i,maxConn:n||1,remoteHost:h.hostname,remotePort:a,useTls:b,tunnelPassphrase:o,basicAuthUser:s,basicAuthPassword:r,localPort:p,localHost:l,localHttps:d,localCert:c,localKey:u,localCa:m,allowInvalidCert:g}}_init(e){let t=this.opts,a=this._getInfo.bind(this),i={responseType:"json",headers:{Authorization:t.apiToken}},n=`${this.host}/`+(t.subdomain||"?new"),o=()=>{let t=sX.default.create({timeout:3e4});(0,sO.default)(t,{retries:3,shouldResetTimeout:!0}),t.get(n,i).then(t=>{let i=t.data;if(this.logger.debug("got tunnel information",t.data),200!==t.status)return e(Error(i&&i.error||"localtunnel server returned an error, please try again"));e(null,a(i))}).catch(e=>(this.logger.debug(`tunnel server offline: ${e.message}, retry 1s`),setTimeout(o,1e3)))};o()}_establish(e){this.setMaxListeners(e.maxConn+(v.EventEmitter.defaultMaxListeners||10)),this.tunnelCluster=new sL.TunnelCluster({...e,logger:this.logger}),this.tunnelCluster.once("open",()=>{this.emit("url",{url:e.url,basicAuthUser:e.basicAuthUser,basicAuthPassword:e.basicAuthPassword})}),this.tunnelCluster.on("error",e=>{this.logger.debug("got socket error",e.message),this.emit("error",e)});let t=0;this.tunnelCluster.on("open",e=>{t++,this.logger.debug("tunnel open [total: %d]",t);let a=()=>{e.destroy()};if(this.closed)return a();this.once("close",a),e.once("close",()=>{this.removeListener("close",a)})}),this.tunnelCluster.on("dead",()=>{t--,this.logger.debug("tunnel dead [total: %d]",t),!this.closed&&this.tunnelCluster&&this.tunnelCluster.open()}),this.tunnelCluster.on("request",e=>{this.emit("request",e)});for(let t=0;t{if(t||!a)return e(t||void 0);this.clientId=a.name,this.url=a.url,this.basicAuthUser=a.basicAuthUser,this.basicAuthPassword=a.basicAuthPassword,this._establish(a),e()})}close(){this.closed=!0,this.emit("close")}}sU.Tunnel=s1,sF.localtunnel=e=>{let t=new sU.Tunnel(e);return new Promise((e,a)=>t.open(i=>i?a(i):e(t)))},Object.defineProperty(sH,"localtunnel",{enumerable:!0,get:function(){return sF.localtunnel}});const s0=sk(X("7SZkG"));var s2={};Object.defineProperty(s2,"__esModule",{value:!0}),s2.getPort=void 0,s2.getPort=function(e){if(""===e.port)switch(e.protocol){case"http:":case"ws:":return 80;case"https:":case"wss:":return 443;case"ftp:":return 21;default:return -1}let t=parseInt(e.port,10);return isNaN(t)?-1:t};const s4=async({apiToken:e,appUrl:t,commitSha:a,onTunnelCreated:i,onTestRunCreated:n,onProgressUpdate:o,keepTunnelOpenPromise:s,environment:r})=>{let p,l;let d=s0.default.getLogger(aK.METICULOUS_LOGGER_NAME),c=(0,aI.getApiToken)(e);c||(d.error("You must provide an API token by using the --apiToken parameter"),process.exit(1));let u=(0,aI.createClient)({apiToken:c});try{p=new URL(t)}catch(e){throw Error(`Invalid app URL: ${t}`)}let m=(0,s2.getPort)(p);if(-1===m)throw Error(`Invalid app URL port: ${t}`);let g=await (0,sH.localtunnel)({logger:d,apiToken:c,localHost:p.hostname,port:m,localHttps:!1,allowInvalidCert:!1});if(d.debug("Creating test run"),!g.url||!g.basicAuthUser||!g.basicAuthPassword)throw Error("Either Tunnel URL, basic auth user or basic auth password were not set");null==i||i({url:g.url,basicAuthUser:g.basicAuthUser,basicAuthPassword:g.basicAuthPassword});let h=await (0,aI.executeSecureTunnelTestRun)({client:u,headSha:a,tunnelUrl:g.url,basicAuthUser:g.basicAuthUser,basicAuthPassword:g.basicAuthPassword,environment:r});if(!h)throw Error("Test run was not created");null==n||n(h);let b=(0,aK.defer)(),f=e=>{l&&clearInterval(l),s?s.then(()=>{g.close(),b.resolve(e)}):(g.close(),b.resolve(e))};return l=setInterval(async()=>{let e=await (0,aI.getTestRun)({client:u,testRunId:h.id});if(null==o||o(e),!aI.IN_PROGRESS_TEST_RUN_STATUS.includes(e.status)){f(e);return}},5e3),{testRun:await b.promise}};sW.executeRemoteTestRun=s4;var s9={},s6=A.resolve(__dirname,"../node_modules/@alwaysmeticulous/sentry/dist","index.js"),s3=s9&&s9.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a);var n=Object.getOwnPropertyDescriptor(t,a);(!n||("get"in n?!t.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,i,n)}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),s5=s9&&s9.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s8=s9&&s9.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&s3(t,e,a);return s5(t,e),t};Object.defineProperty(s9,"__esModule",{value:!0}),s9.initSentry=s9.SENTRY_FLUSH_TIMEOUT=void 0;const s7=s8(X("igDVI"));var re=X("aDQYo"),rt=X("9rcfq"),ra=X("jfDa9"),ri=X("050Gq"),rn=X("deYUe"),ro=X("9GA7E"),rs=X("ios84"),rr=X("fd5do"),rp=X("k2ErF"),rl=X("2gq4F"),rd=X("5NAaM"),ri=X("050Gq"),rc=X("iD1up"),rp=X("k2ErF"),rd=X("5NAaM"),ru=X("gd055");const rm=ru.GLOBAL_OBJ;var rg=X("goIvU"),rp=X("k2ErF"),rd=X("5NAaM");const rh=(e,t,a)=>{let i,n;return o=>{t.value>=0&&(o||a)&&((n=t.value-(i||0))||void 0===i)&&(i=t.value,t.delta=n,e(t))}},rb=()=>`v3-${Date.now()}-${Math.floor(Math.random()*(9e12-1))+1e12}`,rf=()=>{let e=rm.performance.timing,t=rm.performance.navigation.type,a={entryType:"navigation",startTime:0,type:2==t?"back_forward":1===t?"reload":"navigate"};for(let t in e)"navigationStart"!==t&&"toJSON"!==t&&(a[t]=Math.max(e[t]-e.navigationStart,0));return a},rv=()=>rm.__WEB_VITALS_POLYFILL__?rm.performance&&(performance.getEntriesByType&&performance.getEntriesByType("navigation")[0]||rf()):rm.performance&&performance.getEntriesByType&&performance.getEntriesByType("navigation")[0],rI=()=>{let e=rv();return e&&e.activationStart||0},rC=(e,t)=>{let a=rv(),i="navigate";return a&&(i=rm.document.prerendering||rI()>0?"prerender":a.type.replace(/_/g,"-")),{name:e,value:void 0===t?-1:t,rating:"good",delta:0,entries:[],id:rb(),navigationType:i}},ry=(e,t,a)=>{try{if(PerformanceObserver.supportedEntryTypes.includes(e)){let i=new PerformanceObserver(e=>{t(e.getEntries())});return i.observe(Object.assign({type:e,buffered:!0},a||{})),i}}catch(e){}},rw=(e,t)=>{let a=i=>{("pagehide"===i.type||"hidden"===rm.document.visibilityState)&&(e(i),t&&(removeEventListener("visibilitychange",a,!0),removeEventListener("pagehide",a,!0)))};addEventListener("visibilitychange",a,!0),addEventListener("pagehide",a,!0)};let rx=-1;const rA=()=>"hidden"!==rm.document.visibilityState||rm.document.prerendering?1/0:0,rG=()=>{rw(({timeStamp:e})=>{rx=e},!0)},rB=()=>(rx<0&&(rx=rA(),rG()),{get firstHiddenTime(){return rx}});let rS=0,rZ=1/0,r_=0;const rR=e=>{e.forEach(e=>{e.interactionId&&(rZ=Math.min(rZ,e.interactionId),rS=(r_=Math.max(r_,e.interactionId))?(r_-rZ)/7+1:0)})},rV=()=>t?rS:performance.interactionCount||0,rT=()=>{"interactionCount"in performance||t||(t=ry("event",rR,{type:"event",buffered:!0,durationThreshold:0}))},rE=()=>rV(),rN=[],rW={},rk=e=>{let t=rN[rN.length-1],a=rW[e.interactionId];if(a||rN.length<10||e.duration>t.latency){if(a)a.entries.push(e),a.latency=Math.max(a.latency,e.duration);else{let t={id:e.interactionId,latency:e.duration,entries:[e]};rW[t.id]=t,rN.push(t)}rN.sort((e,t)=>t.latency-e.latency),rN.splice(10).forEach(e=>{delete rW[e.id]})}},rH=()=>{let e=Math.min(rN.length-1,Math.floor(rE()/50));return rN[e]},rF={},rU={};X("4i5AO");var ri=X("050Gq"),rn=X("deYUe"),rY=X("7z6ft"),rX=(X("ibVDy"),X("fziSu"),X("7nqVO")),rc=X("iD1up"),rO=X("iYy7D"),rr=X("fd5do"),rp=X("k2ErF"),rL=X("6szME"),rd=X("5NAaM"),rn=X("deYUe"),rD=X("cCmfn"),rK=X("eCOpK"),rY=X("7z6ft"),ro=X("9GA7E"),rJ=X("b2ZPh"),rc=X("iD1up"),rz=X("3hDCQ"),rj=X("e4IUz"),rp=(X("aoHsm"),X("k2ErF")),ru=X("gd055");(0,ru.getGlobalObject)();var ru=X("gd055"),rP=X("hxO1L"),rM=X("jVURz"),rj=X("e4IUz"),ru=X("gd055"),rP=X("hxO1L");ru.GLOBAL_OBJ;var rQ=X("hSiIl"),rO=X("iYy7D"),rl=X("2gq4F"),rn=(X("c6AFW"),X("deYUe")),rD=X("cCmfn"),rK=X("eCOpK"),rY=X("7z6ft"),ro=X("9GA7E"),rJ=X("b2ZPh"),rc=X("iD1up"),rz=X("3hDCQ"),rQ=X("hSiIl"),rl=X("2gq4F"),rM=X("jVURz"),rj=X("e4IUz"),ru=(X("gd055"),X("gd055"));const rq=(0,ru.getGlobalObject)();var rP=X("hxO1L");const r$=ru.GLOBAL_OBJ;var rO=X("iYy7D"),rp=X("k2ErF"),rd=X("5NAaM");rs.TRACING_DEFAULTS;var r1=X("3SU1C"),ri=X("050Gq"),r0=X("2UNWp"),rY=X("7z6ft"),rs=X("ios84"),r2=X("5N1eW"),r4=X("kEOfe"),r9=X("k9pSf"),r6=X("cWSR5"),rX=X("7nqVO"),rJ=X("b2ZPh"),ra=X("jfDa9"),rL=X("6szME"),rl=X("2gq4F"),r3=X("6aON8");const r5=re.addExtensionMethods;ri.getActiveTransaction,ri.extractTraceparentData,rJ.spanStatusfromHttpCode,r3.Transaction,rX.Span,rY.hasTracingEnabled,rL.stripUrlQueryAndFragment,rl.TRACEPARENT_REGEXP,rs.IdleTransaction,ra.startIdleTransaction,rJ.SpanStatus,rt.Apollo,r1.Express,r0.GraphQL,r2.Mongo,r4.Mysql,r9.Postgres,r6.Prisma,("undefined"==typeof __SENTRY_TRACING__||__SENTRY_TRACING__)&&(0,re.addExtensionMethods)(),s9.SENTRY_FLUSH_TIMEOUT=oC.fromObject({seconds:1});const r8=()=>{var e;return parseFloat(null!==(e=process.env.METICULOUS_TELEMETRY_SAMPLE_RATE)&&void 0!==e?e:"1.0")},r7=async(e,t)=>(s7.init({dsn:"https://10c6a6c9f5434786b37fb81b01323798@o914390.ingest.sentry.io/6435232",release:e,tracesSampleRate:null!=t?t:r8(),environment:s6.endsWith(".ts")||aK.IS_METICULOUS_SUPER_USER?"development":"production"}),r5(),s7.getCurrentHub());s9.initSentry=r7;var pe=X("7SZkG"),pt={};pt=X("95REl");const pa=async e=>{let t=pt.operation({retries:7,factor:2,minTimeout:1e3}),a=new URL(e);return new Promise((i,n)=>{t.attempt(async()=>{if(await pi(a)){i();return}let o=Error(`Could not connect to '${e}'. Please check:
1. The server running at '${e}' has fully started by the time the Meticulous action starts. You may need to add a 'sleep 30' after starting the server to ensure that this is the case.
2. The server running at '${e}' is using tcp instead of tcp6. You can use 'netstat -tulpen' to see what addresses and ports it is bound to.
-`);t.retry(o)||n(t.mainError())})})},pZ=async e=>{try{let t=await p_(e);return 502!==t.status}catch(e){return!1}};async function p_(e){let t=new AbortController,a=setTimeout(()=>t.abort(),5e3),i=await fetch(e,{signal:t.signal});return clearTimeout(a),i}var pG=O("7SZkG");const pT="https://app.meticulous.ai/docs/github-actions-v2",pR=e=>pV(e).toLowerCase().includes("resource not accessible by integration")||e?.status===403,pV=e=>{let t=e?.message??"";return"string"==typeof t?t:""},pE=`Please check www.githubstatus.com, and that you have setup the action correctly, including with the correct permissions: see ${pT} for the correct setup.`;var pG=(O("7SZkG"),O("7SZkG"));const pN=()=>{F(pG).getLogger(aK.METICULOUS_LOGGER_NAME).setDefaultLevel(F(pG).levels.INFO)},pW=e=>{let t=F(pG).getLogger(aK.METICULOUS_LOGGER_NAME);switch((e||"").toLocaleLowerCase()){case"trace":t.setLevel(F(pG).levels.TRACE,!1);break;case"debug":t.setLevel(F(pG).levels.DEBUG,!1);break;case"info":t.setLevel(F(pG).levels.INFO,!1);break;case"warn":t.setLevel(F(pG).levels.WARN,!1);break;case"error":t.setLevel(F(pG).levels.ERROR,!1);break;case"silent":t.setLevel(F(pG).levels.SILENT,!1)}},pk=e=>e.slice(0,7),pH=oC.fromObject({seconds:10}),pF=oC.fromObject({seconds:5}),pU=async({context:e,octokit:t})=>{let{owner:a,repo:i}=e.repo,n=e.runId,{data:o}=await t.rest.actions.getWorkflowRun({owner:a,repo:i,run_id:n});return{workflowId:o.workflow_id}},pY=async({owner:e,repo:t,workflowId:a,ref:i,commitSha:n,octokit:o})=>{try{await o.rest.actions.createWorkflowDispatch({owner:e,repo:t,workflow_id:a,ref:i})}catch(t){let e=F(pG).getLogger(aK.METICULOUS_LOGGER_NAME);if((t?.message??"").includes("Workflow does not have 'workflow_dispatch' trigger")){e.error(`Could not trigger a workflow run on commit ${pk(n)} of the base branch (${i}) to compare against, because there was no Meticulous workflow with the 'workflow_dispatch' trigger on the ${i} branch. Visual snapshots of the new flows will be taken, but no comparisons will be made. If you haven't merged the PR to setup Meticulous in Github Actions to the ${i} branch yet then this is expected. Otherwise please check that Meticulous is running on the ${i} branch, that it has a 'workflow_dispatch' trigger, and has the appropiate permissions. See ${pT} for the correct setup.`),e.debug(t);return}if(pR(t)){e.error(`Missing permission to trigger a workflow run on the base branch (${i}). Visual snapshots of the new flows will be taken, but no comparisons will be made. Please add the 'actions: write' permission to your workflow YAML file: see ${pT} for the correct setup.`),e.debug(t);return}e.error(`Could not trigger a workflow run on commit ${pk(n)} of the base branch (${i}) to compare against. Visual snapshots of the new flows will be taken, but no comparisons will be made. Please check that Meticulous is running on the ${i} branch, that it has a 'workflow_dispatch' trigger, and has the appropiate permissions. See ${pT} for the correct setup.`,t);return}return await pD(pH),await pX({owner:e,repo:t,workflowId:a,commitSha:n,octokit:o})},pO=async({owner:e,repo:t,workflowRunId:a,octokit:i,timeout:n})=>{let o=F(pG).getLogger(aK.METICULOUS_LOGGER_NAME),s=null,r=sc.now();for(;(null==s||pL(s.status))&&sc.now().diff(r){let o=F(pG).getLogger(aK.METICULOUS_LOGGER_NAME),s=await n.rest.actions.listWorkflowRuns({owner:e,repo:t,workflow_id:a,head_sha:i});o.debug(`Workflow runs list: ${JSON.stringify(s.data,null,2)}`);let r=s.data.workflow_runs.find(e=>pL(e.status));if(null!=r)return{...r,workflowRunId:r.id}},pL=e=>["in_progress","queued","requested","waiting"].some(t=>t===e),pD=async e=>new Promise(t=>setTimeout(t,e.toMillis())),pK=oC.fromObject({minutes:30}),pJ=oC.fromObject({minutes:10}),pz=async(...e)=>{let t=F(pG).getLogger(aK.METICULOUS_LOGGER_NAME);try{return await pj(...e)}catch(i){t.error(i);let a=`Error while running tests on base ${e[0].base}. No diffs will be reported for this run.`;return t.warn(a),(0,L.warning)(a),{shaToCompareAgainst:null}}},pj=async({event:e,apiToken:t,base:a,context:i,useCloudReplayEnvironmentVersion:n,octokit:o})=>{let s=F(pG).getLogger(aK.METICULOUS_LOGGER_NAME),{owner:r,repo:p}=i.repo;if(!a)return{shaToCompareAgainst:null};let l=await (0,aI.getLatestTestRunResults)({client:(0,aI.createClient)({apiToken:t}),commitSha:a,...n?{useCloudReplayEnvironmentVersion:!0}:{logicalEnvironmentVersion:5}});if(null!=l)return s.info(`Tests already exist for commit ${a} (${l.id})`),{shaToCompareAgainst:a};let{workflowId:d}=await pU({context:i,octokit:o}),c=await pX({owner:r,repo:p,workflowId:d,commitSha:a,octokit:o});if(null!=c)return(s.info(`Waiting on workflow run on base commit (${a}) to compare against: ${c.html_url}`),"pull_request"===e.type)?(await pP({owner:r,repo:p,workflowRunId:c.workflowRunId,octokit:o,commitSha:a,timeout:pK}),{shaToCompareAgainst:a}):await pM({owner:r,repo:p,workflowRunId:c.workflowRunId,octokit:o,commitSha:a,timeout:pJ,logger:s});if("pull_request"!==e.type)return{shaToCompareAgainst:null};let u=e.payload.pull_request.base.ref;s.debug(JSON.stringify({base:a,baseRef:u},null,2));let m=await pQ({owner:r,repo:p,ref:u,octokit:o});if(s.debug(JSON.stringify({owner:r,repo:p,base:a,baseRef:u,currentBaseSha:m},null,2)),a!==m){let e=`Meticulous tests on base commit ${a} haven't started running so we have nothing to compare against.
+`);t.retry(o)||n(t.mainError())})})},pi=async e=>{try{let t=await pn(e);return 502!==t.status}catch(e){return!1}};async function pn(e){let t=new AbortController,a=setTimeout(()=>t.abort(),5e3),i=await fetch(e,{signal:t.signal});return clearTimeout(a),i}var pe=X("7SZkG");const po="https://app.meticulous.ai/docs/github-actions-v2",ps=e=>pr(e).toLowerCase().includes("resource not accessible by integration")||e?.status===403,pr=e=>{let t=e?.message??"";return"string"==typeof t?t:""},pp=`Please check www.githubstatus.com, and that you have setup the action correctly, including with the correct permissions: see ${po} for the correct setup.`;var pe=(X("7SZkG"),X("7SZkG"));const pl=()=>{F(pe).getLogger(aK.METICULOUS_LOGGER_NAME).setDefaultLevel(F(pe).levels.INFO)},pd=e=>{let t=F(pe).getLogger(aK.METICULOUS_LOGGER_NAME);switch((e||"").toLocaleLowerCase()){case"trace":t.setLevel(F(pe).levels.TRACE,!1);break;case"debug":t.setLevel(F(pe).levels.DEBUG,!1);break;case"info":t.setLevel(F(pe).levels.INFO,!1);break;case"warn":t.setLevel(F(pe).levels.WARN,!1);break;case"error":t.setLevel(F(pe).levels.ERROR,!1);break;case"silent":t.setLevel(F(pe).levels.SILENT,!1)}},pc=e=>e.slice(0,7),pu=oC.fromObject({seconds:10}),pm=oC.fromObject({seconds:5}),pg=async({context:e,octokit:t})=>{let{owner:a,repo:i}=e.repo,n=e.runId,{data:o}=await t.rest.actions.getWorkflowRun({owner:a,repo:i,run_id:n});return{workflowId:o.workflow_id}},ph=async({owner:e,repo:t,workflowId:a,ref:i,commitSha:n,octokit:o})=>{try{await o.rest.actions.createWorkflowDispatch({owner:e,repo:t,workflow_id:a,ref:i})}catch(t){let e=F(pe).getLogger(aK.METICULOUS_LOGGER_NAME);if((t?.message??"").includes("Workflow does not have 'workflow_dispatch' trigger")){e.error(`Could not trigger a workflow run on commit ${pc(n)} of the base branch (${i}) to compare against, because there was no Meticulous workflow with the 'workflow_dispatch' trigger on the ${i} branch. Visual snapshots of the new flows will be taken, but no comparisons will be made. If you haven't merged the PR to setup Meticulous in Github Actions to the ${i} branch yet then this is expected. Otherwise please check that Meticulous is running on the ${i} branch, that it has a 'workflow_dispatch' trigger, and has the appropiate permissions. See ${po} for the correct setup.`),e.debug(t);return}if(ps(t)){e.error(`Missing permission to trigger a workflow run on the base branch (${i}). Visual snapshots of the new flows will be taken, but no comparisons will be made. Please add the 'actions: write' permission to your workflow YAML file: see ${po} for the correct setup.`),e.debug(t);return}e.error(`Could not trigger a workflow run on commit ${pc(n)} of the base branch (${i}) to compare against. Visual snapshots of the new flows will be taken, but no comparisons will be made. Please check that Meticulous is running on the ${i} branch, that it has a 'workflow_dispatch' trigger, and has the appropiate permissions. See ${po} for the correct setup.`,t);return}return await pI(pu),await pf({owner:e,repo:t,workflowId:a,commitSha:n,octokit:o})},pb=async({owner:e,repo:t,workflowRunId:a,octokit:i,timeout:n})=>{let o=F(pe).getLogger(aK.METICULOUS_LOGGER_NAME),s=null,r=sc.now();for(;(null==s||pv(s.status))&&sc.now().diff(r){let o=F(pe).getLogger(aK.METICULOUS_LOGGER_NAME),s=await n.rest.actions.listWorkflowRuns({owner:e,repo:t,workflow_id:a,head_sha:i});o.debug(`Workflow runs list: ${JSON.stringify(s.data,null,2)}`);let r=s.data.workflow_runs.find(e=>pv(e.status));if(null!=r)return{...r,workflowRunId:r.id}},pv=e=>["in_progress","queued","requested","waiting"].some(t=>t===e),pI=async e=>new Promise(t=>setTimeout(t,e.toMillis())),pC=oC.fromObject({minutes:30}),py=oC.fromObject({minutes:10}),pw=async(...e)=>{let t=F(pe).getLogger(aK.METICULOUS_LOGGER_NAME);try{return await px(...e)}catch(i){t.error(i);let a=`Error while running tests on base ${e[0].base}. No diffs will be reported for this run.`;return t.warn(a),(0,L.warning)(a),{shaToCompareAgainst:null}}},px=async({event:e,apiToken:t,base:a,context:i,useCloudReplayEnvironmentVersion:n,octokit:o})=>{let s=F(pe).getLogger(aK.METICULOUS_LOGGER_NAME),{owner:r,repo:p}=i.repo;if(!a)return{shaToCompareAgainst:null};let l=await (0,aI.getLatestTestRunResults)({client:(0,aI.createClient)({apiToken:t}),commitSha:a,...n?{useCloudReplayEnvironmentVersion:!0}:{logicalEnvironmentVersion:5}});if(null!=l)return s.info(`Tests already exist for commit ${a} (${l.id})`),{shaToCompareAgainst:a};let{workflowId:d}=await pg({context:i,octokit:o}),c=await pf({owner:r,repo:p,workflowId:d,commitSha:a,octokit:o});if(null!=c)return(s.info(`Waiting on workflow run on base commit (${a}) to compare against: ${c.html_url}`),"pull_request"===e.type)?(await pA({owner:r,repo:p,workflowRunId:c.workflowRunId,octokit:o,commitSha:a,timeout:pC}),{shaToCompareAgainst:a}):await pG({owner:r,repo:p,workflowRunId:c.workflowRunId,octokit:o,commitSha:a,timeout:py,logger:s});if("pull_request"!==e.type)return{shaToCompareAgainst:null};let u=e.payload.pull_request.base.ref;s.debug(JSON.stringify({base:a,baseRef:u},null,2));let m=await pB({owner:r,repo:p,ref:u,octokit:o});if(s.debug(JSON.stringify({owner:r,repo:p,base:a,baseRef:u,currentBaseSha:m},null,2)),a!==m){let e=`Meticulous tests on base commit ${a} haven't started running so we have nothing to compare against.
In addition we were not able to trigger a run on ${a} since the '${u}' branch is now pointing to ${m}.
- Therefore no diffs will be reported for this run. Re-running the tests may fix this.`;return s.warn(e),(0,L.warning)(e),{shaToCompareAgainst:null}}let g=await pY({owner:r,repo:p,workflowId:d,ref:u,commitSha:a,octokit:o});if(null==g){let e=`Warning: Could not retrieve dispatched workflow run. Will not perform diffs against ${a}.`;return s.warn(e),(0,L.warning)(e),{shaToCompareAgainst:null}}return s.info(`Waiting on workflow run: ${g.html_url}`),await pP({owner:r,repo:p,workflowRunId:g.workflowRunId,octokit:o,commitSha:a,timeout:pK}),{shaToCompareAgainst:a}},pP=async({commitSha:e,...t})=>{let a=await pO(t);if(null==a||pL(a.status))throw Error(`Timed out while waiting for workflow run (${t.workflowRunId}) to complete.`);if("completed"!==a.status||"success"!==a.conclusion)throw Error(`Comparing against visual snapshots taken on ${e}, but the corresponding workflow run [${a.id}] did not complete successfully. See: ${a.html_url}`)},pM=async({commitSha:e,logger:t,...a})=>{let i=await pO(a);return null==i||pL(i.status)?(t.warn(`Timed out while waiting for workflow run (${a.workflowRunId}) to complete. Running without comparisons.`),{shaToCompareAgainst:null}):"completed"!==i.status||"success"!==i.conclusion?(t.warn(`Comparing against visual snapshots taken on ${e}, but the corresponding workflow run [${i.id}] did not complete successfully. See: ${i.html_url}. Running without comparisons.`),{shaToCompareAgainst:null}):{shaToCompareAgainst:e}},pQ=async({owner:e,repo:t,ref:a,octokit:i})=>{try{return(await i.rest.repos.getBranch({owner:e,repo:t,branch:a})).data.commit.sha}catch(e){if(pR(e))throw Error(`Missing permission to get the head commit of the branch '${a}'. This is required in order to correctly calculate the two commits to compare. Please add the 'contents: read' permission to your workflow YAML file: see ${pT} for the correct setup.`);throw F(pG).getLogger(aK.METICULOUS_LOGGER_NAME).error(`Unable to get head commit of branch '${a}'. This is required in order to correctly calculate the two commits to compare. ${pE}`),e}},pq=e=>e.substring(0,7);var pG=O("7SZkG");const p$=async(e,t)=>{if("pull_request"===e.type){let a=e.payload.pull_request.head.sha,i=e.payload.pull_request.base.sha,n=e.payload.pull_request.base.ref;return t.useDeploymentUrl?{base:await p0(a,i,n)??i,head:a}:{base:await p2(a,i)??i,head:a}}return"push"===e.type?{base:e.payload.before,head:e.payload.after}:"workflow_dispatch"===e.type?{base:null,head:eH.context.sha}:p1(e)},p1=e=>{throw Error("Unexpected event: "+JSON.stringify(e))},p0=(e,t,a)=>{let i=F(pG).getLogger(aK.METICULOUS_LOGGER_NAME);try{p4(),(0,R.execSync)(`git fetch origin ${e}`),(0,R.execSync)(`git fetch origin ${a}`);let n=(0,R.execSync)(`git merge-base ${e} origin/${a}`).toString().trim();if(!p9(n))return i.error(`Failed to get merge base of ${e} and ${a}: value returned by 'git merge-base' was not a valid git SHA ('${n}').Using the base of the pull request instead (${t}).`),null;return n}catch(n){return i.error(`Failed to get merge base of ${e} and ${a}. Error: ${n}. Using the base of the pull request instead (${t}).`),null}},p2=(e,t)=>{let a=process.env.GITHUB_SHA,i=F(pG).getLogger(aK.METICULOUS_LOGGER_NAME);if(null==a)return i.error(`No GITHUB_SHA environment var set, so can't work out true base of the merge commit. Using the base of the pull request instead (${t}).`),null;try{p4();let n=(0,R.execSync)("git rev-list --max-count=1 HEAD").toString().trim();if(n!==a)return i.info(`The head commit SHA (${n}) does not equal GITHUB_SHA environment variable (${a}).
+ Therefore no diffs will be reported for this run. Re-running the tests may fix this.`;return s.warn(e),(0,L.warning)(e),{shaToCompareAgainst:null}}let g=await ph({owner:r,repo:p,workflowId:d,ref:u,commitSha:a,octokit:o});if(null==g){let e=`Warning: Could not retrieve dispatched workflow run. Will not perform diffs against ${a}.`;return s.warn(e),(0,L.warning)(e),{shaToCompareAgainst:null}}return s.info(`Waiting on workflow run: ${g.html_url}`),await pA({owner:r,repo:p,workflowRunId:g.workflowRunId,octokit:o,commitSha:a,timeout:pC}),{shaToCompareAgainst:a}},pA=async({commitSha:e,...t})=>{let a=await pb(t);if(null==a||pv(a.status))throw Error(`Timed out while waiting for workflow run (${t.workflowRunId}) to complete.`);if("completed"!==a.status||"success"!==a.conclusion)throw Error(`Comparing against visual snapshots taken on ${e}, but the corresponding workflow run [${a.id}] did not complete successfully. See: ${a.html_url}`)},pG=async({commitSha:e,logger:t,...a})=>{let i=await pb(a);return null==i||pv(i.status)?(t.warn(`Timed out while waiting for workflow run (${a.workflowRunId}) to complete. Running without comparisons.`),{shaToCompareAgainst:null}):"completed"!==i.status||"success"!==i.conclusion?(t.warn(`Comparing against visual snapshots taken on ${e}, but the corresponding workflow run [${i.id}] did not complete successfully. See: ${i.html_url}. Running without comparisons.`),{shaToCompareAgainst:null}):{shaToCompareAgainst:e}},pB=async({owner:e,repo:t,ref:a,octokit:i})=>{try{return(await i.rest.repos.getBranch({owner:e,repo:t,branch:a})).data.commit.sha}catch(e){if(ps(e))throw Error(`Missing permission to get the head commit of the branch '${a}'. This is required in order to correctly calculate the two commits to compare. Please add the 'contents: read' permission to your workflow YAML file: see ${po} for the correct setup.`);throw F(pe).getLogger(aK.METICULOUS_LOGGER_NAME).error(`Unable to get head commit of branch '${a}'. This is required in order to correctly calculate the two commits to compare. ${pp}`),e}},pS=e=>e.substring(0,7);var pe=X("7SZkG");const pZ=async(e,t)=>{if("pull_request"===e.type){let a=e.payload.pull_request.head.sha,i=e.payload.pull_request.base.sha,n=e.payload.pull_request.base.ref;return t.useDeploymentUrl?{base:await pR(a,i,n)??i,head:a}:{base:await pV(a,i)??i,head:a}}return"push"===e.type?{base:e.payload.before,head:e.payload.after}:"workflow_dispatch"===e.type?{base:null,head:eH.context.sha}:p_(e)},p_=e=>{throw Error("Unexpected event: "+JSON.stringify(e))},pR=(e,t,a)=>{let i=F(pe).getLogger(aK.METICULOUS_LOGGER_NAME);try{pT(),(0,V.execSync)(`git fetch origin ${e}`),(0,V.execSync)(`git fetch origin ${a}`);let n=(0,V.execSync)(`git merge-base ${e} origin/${a}`).toString().trim();if(!pE(n))return i.error(`Failed to get merge base of ${e} and ${a}: value returned by 'git merge-base' was not a valid git SHA ('${n}').Using the base of the pull request instead (${t}).`),null;return n}catch(n){return i.error(`Failed to get merge base of ${e} and ${a}. Error: ${n}. Using the base of the pull request instead (${t}).`),null}},pV=(e,t)=>{let a=process.env.GITHUB_SHA,i=F(pe).getLogger(aK.METICULOUS_LOGGER_NAME);if(null==a)return i.error(`No GITHUB_SHA environment var set, so can't work out true base of the merge commit. Using the base of the pull request instead (${t}).`),null;try{pT();let n=(0,V.execSync)("git rev-list --max-count=1 HEAD").toString().trim();if(n!==a)return i.info(`The head commit SHA (${n}) does not equal GITHUB_SHA environment variable (${a}).
This is likely because a custom ref has been passed to the 'actions/checkout' action. We're assuming therefore
that the head commit SHA is not a temporary merge commit, but rather the head of the branch. Therefore we're
using the base of the pull request (${t}) to compare the visual snapshots against, and not the base
- of GitHub's temporary merge commit.`),null;let o=(0,R.execSync)(`git cat-file -p ${a}`).toString().split("\n").filter(e=>e.startsWith("parent ")).map(e=>e.substring(7).trim());if(2!==o.length)return i.error(`GITHUB_SHA (${a}) is not a merge commit, so can't work out true base of the merge commit. Using the base of the pull request instead.`),null;let s=o[0];if(o[1]!==e)return i.error(`The second parent (${o[1]}) of the GITHUB_SHA merge commit (${a}) is not equal to the head of the PR (${e}),
- so can not confidently determine the base of the merge commit to compare against. Using the base of the pull request instead (${t}).`),null;return s}catch(e){return i.error(`Error getting base of merge commit (${a}). Using the base of the pull request instead (${t}).`,e),null}},p4=()=>{(0,R.execSync)(`git config --global --add safe.directory "${process.cwd()}"`)},p9=e=>/^[a-f0-9]{40}$/.test(e),p6=(e,t)=>"push"===e?{type:"push",payload:t}:"pull_request"===e?{type:"pull_request",payload:t}:"workflow_dispatch"===e?{type:"workflow_dispatch",payload:t}:null,p3=e=>!!e&&"pull_request"===e.type&&e.payload.pull_request.title.toLowerCase().includes("[meticulous debug]");var pG=O("7SZkG");const p5=e=>{if(null==e)throw Error("github-token is required");try{return(0,eH.getOctokit)(e)}catch(e){throw F(pG).getLogger(aK.METICULOUS_LOGGER_NAME).error(e),Error("Error connecting to GitHub. Did you specify a valid 'github-token'?")}};var pG=O("7SZkG");const p8=e=>``,p7=async({octokit:e,event:t,owner:a,repo:i,body:n,shortHeadSha:o,testSuiteId:s,createIfDoesNotExist:r})=>{if("pull_request"===t.type)try{let p=await e.rest.issues.listComments({owner:a,repo:i,issue_number:t.payload.pull_request.number,per_page:1e3}),l=p8(s),d=p.data.find(e=>(e.body??"").indexOf(l)>-1),c=s?`Test suite: ${s}. `:"",u=`${n}
+ of GitHub's temporary merge commit.`),null;let o=(0,V.execSync)(`git cat-file -p ${a}`).toString().split("\n").filter(e=>e.startsWith("parent ")).map(e=>e.substring(7).trim());if(2!==o.length)return i.error(`GITHUB_SHA (${a}) is not a merge commit, so can't work out true base of the merge commit. Using the base of the pull request instead.`),null;let s=o[0];if(o[1]!==e)return i.error(`The second parent (${o[1]}) of the GITHUB_SHA merge commit (${a}) is not equal to the head of the PR (${e}),
+ so can not confidently determine the base of the merge commit to compare against. Using the base of the pull request instead (${t}).`),null;return s}catch(e){return i.error(`Error getting base of merge commit (${a}). Using the base of the pull request instead (${t}).`,e),null}},pT=()=>{(0,V.execSync)(`git config --global --add safe.directory "${process.cwd()}"`)},pE=e=>/^[a-f0-9]{40}$/.test(e),pN=(e,t)=>"push"===e?{type:"push",payload:t}:"pull_request"===e?{type:"pull_request",payload:t}:"workflow_dispatch"===e?{type:"workflow_dispatch",payload:t}:null,pW=e=>!!e&&"pull_request"===e.type&&e.payload.pull_request.title.toLowerCase().includes("[meticulous debug]");var pe=X("7SZkG");const pk=e=>{if(null==e)throw Error("github-token is required");try{return(0,eH.getOctokit)(e)}catch(e){throw F(pe).getLogger(aK.METICULOUS_LOGGER_NAME).error(e),Error("Error connecting to GitHub. Did you specify a valid 'github-token'?")}};var pe=X("7SZkG");const pH=e=>``,pF=async({octokit:e,event:t,owner:a,repo:i,body:n,shortHeadSha:o,testSuiteId:s,createIfDoesNotExist:r})=>{if("pull_request"===t.type)try{let p=await e.rest.issues.listComments({owner:a,repo:i,issue_number:t.payload.pull_request.number,per_page:1e3}),l=pH(s),d=p.data.find(e=>(e.body??"").indexOf(l)>-1),c=s?`Test suite: ${s}. `:"",u=`${n}
-${c}Last updated for commit ${o}. This comment will update as new commits are pushed.${l}`;null!=d?await e.rest.issues.updateComment({owner:a,repo:i,comment_id:d.id,body:u}):r&&await e.rest.issues.createComment({owner:a,repo:i,issue_number:t.payload.pull_request.number,body:u})}catch(e){if(pR(e))throw Error(`Missing permission to list and post comments to the pull request #${t.payload.pull_request.number}. Please add the 'pull-requests: write' permission to your workflow YAML file: see ${pT} for the correct setup.`);throw F(pG).getLogger(aK.METICULOUS_LOGGER_NAME).error(`Unable to post / update comment on PR #${t.payload.pull_request.number}. ${pE}`),e}},le=()=>({apiToken:(0,L.getInput)("api-token",{required:!0}),githubToken:(0,L.getInput)("github-token",{required:!0}),appUrl:(0,L.getInput)("app-url",{required:!0})}),lt=oC.fromObject({minutes:45});(async()=>{pN();let e=await (0,s9.initSentry)("report-diffs-action-cloud-compute-v1",1),t=e.startTransaction({name:"report-diffs-action.runMeticulousTestsActionInCloud",description:"Run Meticulous tests action (in cloud)",op:"report-diffs-action.runMeticulousTestsActionInCloud"});+(process.env.RUNNER_DEBUG??"0")&&pW("trace");let{apiToken:a,githubToken:i,appUrl:n}=le(),{payload:o}=eH.context,s=p6(eH.context.eventName,o),{owner:r,repo:p}=eH.context.repo,l=p3(s),d=p5(i),c=F(pG).getLogger(aK.METICULOUS_LOGGER_NAME);if(null==s){c.warn(`Running report-diffs-action is only supported for 'push', \
+${c}Last updated for commit ${o}. This comment will update as new commits are pushed.${l}`;null!=d?await e.rest.issues.updateComment({owner:a,repo:i,comment_id:d.id,body:u}):r&&await e.rest.issues.createComment({owner:a,repo:i,issue_number:t.payload.pull_request.number,body:u})}catch(e){if(ps(e))throw Error(`Missing permission to list and post comments to the pull request #${t.payload.pull_request.number}. Please add the 'pull-requests: write' permission to your workflow YAML file: see ${po} for the correct setup.`);throw F(pe).getLogger(aK.METICULOUS_LOGGER_NAME).error(`Unable to post / update comment on PR #${t.payload.pull_request.number}. ${pp}`),e}},pU=()=>({apiToken:(0,L.getInput)("api-token",{required:!0}),githubToken:(0,L.getInput)("github-token",{required:!0}),appUrl:(0,L.getInput)("app-url",{required:!0})}),pY=oC.fromObject({minutes:45});(async()=>{pl();let e=await (0,s9.initSentry)("report-diffs-action-cloud-compute-v1",1),t=e.startTransaction({name:"report-diffs-action.runMeticulousTestsActionInCloud",description:"Run Meticulous tests action (in cloud)",op:"report-diffs-action.runMeticulousTestsActionInCloud"});+(process.env.RUNNER_DEBUG??"0")&&pd("trace");let{apiToken:a,githubToken:i,appUrl:n}=pU(),{payload:o}=eH.context,s=pN(eH.context.eventName,o),{owner:r,repo:p}=eH.context.repo,l=pW(s),d=pk(i),c=F(pe).getLogger(aK.METICULOUS_LOGGER_NAME);if(null==s){c.warn(`Running report-diffs-action is only supported for 'push', \
'pull_request' and 'workflow_dispatch' events, but was triggered \
- on a '${eH.context.eventName}' event. Skipping execution.`);return}let{base:u,head:m}=await p$(s,{useDeploymentUrl:!1}),{shaToCompareAgainst:g}=await pz({event:s,apiToken:a,base:u,useCloudReplayEnvironmentVersion:!0,context:eH.context,octokit:d});null!=g&&"pull_request"===s.type?c.info(`Comparing visual snapshots for the commit head of this PR, ${pk(m)}, against ${pk(g)}`):null!=g?c.info(`Comparing visual snapshots for commit ${pk(m)} against commit ${pk(g)}}`):c.info(`Generating visual snapshots for commit ${pk(m)}`);try{await pB(n);let i=l?(0,aK.defer)():null,o=null,u=0,g=process.env.GITHUB_SHA;if(!g)throw Error("GITHUB_SHA is not set.");await (0,sW.executeRemoteTestRun)({apiToken:a,appUrl:n,commitSha:g,environment:"github-actions",onTunnelCreated:({url:e,basicAuthUser:t,basicAuthPassword:a})=>{c.info(`Secure tunnel to ${n} created: ${e}, user: ${t}, password: ${a}`),l&&p7({octokit:d,event:s,owner:r,repo:p,body:`\u{1F916} Meticulous is running in debug mode. Secure tunnel to ${n} created: ${e} user: \`${t}\` password: \`${a}\`.
+ on a '${eH.context.eventName}' event. Skipping execution.`);return}let{base:u,head:m}=await pZ(s,{useDeploymentUrl:!1}),{shaToCompareAgainst:g}=await pw({event:s,apiToken:a,base:u,useCloudReplayEnvironmentVersion:!0,context:eH.context,octokit:d});null!=g&&"pull_request"===s.type?c.info(`Comparing visual snapshots for the commit head of this PR, ${pc(m)}, against ${pc(g)}`):null!=g?c.info(`Comparing visual snapshots for commit ${pc(m)} against commit ${pc(g)}}`):c.info(`Generating visual snapshots for commit ${pc(m)}`);try{await pa(n);let i=l?(0,aK.defer)():null,o=null,u=0,g=process.env.GITHUB_SHA;if(!g)throw Error("GITHUB_SHA is not set.");await (0,sW.executeRemoteTestRun)({apiToken:a,appUrl:n,commitSha:g,environment:"github-actions",onTunnelCreated:({url:e,basicAuthUser:t,basicAuthPassword:a})=>{c.info(`Secure tunnel to ${n} created: ${e} user: ${t} password: ${a}`),l&&pF({octokit:d,event:s,owner:r,repo:p,body:`\u{1F916} Meticulous is running in debug mode. Secure tunnel to ${n} created: ${e} user: \`${t}\` password: \`${a}\`.
-Tunnel will be live for up to ${lt.toHuman()}. Cancel the workflow run to close the tunnel early.`,testSuiteId:"__meticulous_debug__",shortHeadSha:pq(m),createIfDoesNotExist:!0}).catch(e=>{c.error(e)})},onTestRunCreated:e=>{c.info(`Test run created: ${e.url}`)},onProgressUpdate:e=>{(0,aI.IN_PROGRESS_TEST_RUN_STATUS).includes(e.status)||!i||o||(c.info(`Test run execution completed. Keeping tunnel open for ${lt.toHuman()}`),o=setTimeout(()=>{i.resolve()},lt.as("milliseconds")));let t=e.configData.testCases?.length||0,a=e.resultData?.results?.length||0;a!=u&&t&&(c.info(`Executed ${a}/${t} test cases`),u=a)},...i?{keepTunnelOpenPromise:i.promise}:{}}),t.setStatus("ok"),t.finish(),await e.getClient()?.close(5e3),process.exit(0)}catch(i){let a=i instanceof Error?i.message:`${i}`;(0,L.setFailed)(a),t.setStatus("unknown_error"),t.finish(),await e.getClient()?.close(5e3),process.exit(1)}})().catch(e=>{let t=e instanceof Error?e.message:`${e}`;(0,L.setFailed)(t),process.exit(1)});
\ No newline at end of file
+Tunnel will be live for up to ${pY.toHuman()}. Cancel the workflow run to close the tunnel early.`,testSuiteId:"__meticulous_debug__",shortHeadSha:pS(m),createIfDoesNotExist:!0}).catch(e=>{c.error(e)})},onTestRunCreated:e=>{c.info(`Test run created: ${e.url}`)},onProgressUpdate:e=>{(0,aI.IN_PROGRESS_TEST_RUN_STATUS).includes(e.status)||!i||o||(c.info(`Test run execution completed. Keeping tunnel open for ${pY.toHuman()}`),o=setTimeout(()=>{i.resolve()},pY.as("milliseconds")));let t=e.configData.testCases?.length||0,a=e.resultData?.results?.length||0;a!=u&&t&&(c.info(`Executed ${a}/${t} test cases`),u=a)},...i?{keepTunnelOpenPromise:i.promise}:{}}),t.setStatus("ok"),t.finish(),await e.getClient()?.close(5e3),process.exit(0)}catch(i){let a=i instanceof Error?i.message:`${i}`;(0,L.setFailed)(a),t.setStatus("unknown_error"),t.finish(),await e.getClient()?.close(5e3),process.exit(1)}})().catch(e=>{let t=e instanceof Error?e.message:`${e}`;(0,L.setFailed)(t),process.exit(1)});
\ No newline at end of file
diff --git a/package.json b/package.json
index bfa037f5..160687ef 100644
--- a/package.json
+++ b/package.json
@@ -38,12 +38,12 @@
"dependencies": {
"@actions/core": "^1.10.0",
"@actions/github": "^5.1.1",
- "@alwaysmeticulous/client": "^2.122.0",
- "@alwaysmeticulous/common": "^2.122.0",
- "@alwaysmeticulous/remote-replay-launcher": "^2.123.0",
+ "@alwaysmeticulous/client": "^2.125.0",
+ "@alwaysmeticulous/common": "^2.125.0",
+ "@alwaysmeticulous/remote-replay-launcher": "^2.125.0",
"//": "Upgrading `replay-orchestrator-launcher`? Consider bumping the environment version `LOGICAL_ENVIRONMENT_VERSION` in `constants.ts` if the new version includes visible changes.",
- "@alwaysmeticulous/replay-orchestrator-launcher": "^2.122.1",
- "@alwaysmeticulous/sentry": "^2.121.0",
+ "@alwaysmeticulous/replay-orchestrator-launcher": "^2.125.0",
+ "@alwaysmeticulous/sentry": "^2.125.0",
"@sentry/node": "^7.107.0",
"lodash.debounce": "^4.0.8",
"loglevel": "^1.8.1",
@@ -51,8 +51,8 @@
"retry": "^0.13.1"
},
"devDependencies": {
- "@alwaysmeticulous/api": "^2.122.0",
- "@alwaysmeticulous/sdk-bundles-api": "^2.122.0",
+ "@alwaysmeticulous/api": "^2.124.0",
+ "@alwaysmeticulous/sdk-bundles-api": "^2.125.0",
"@parcel/packager-ts": "^2.12.0",
"@parcel/transformer-typescript-types": "^2.12.0",
"@types/jest": "^27.0.3",
@@ -63,7 +63,7 @@
"@typescript-eslint/eslint-plugin": "^5.62.0",
"@typescript-eslint/parser": "^5.62.0",
"eslint": "^8.56.0",
- "eslint-import-resolver-typescript": "^3.5.5",
+ "eslint-import-resolver-typescript": "^3.6.1",
"eslint-plugin-import": "^2.29.1",
"jest": "^27.4.5",
"parcel": "^2.12.0",
diff --git a/src/actions/cloud-compute/cloud-compute.ts b/src/actions/cloud-compute/cloud-compute.ts
index 3944f80e..f3b33a4a 100644
--- a/src/actions/cloud-compute/cloud-compute.ts
+++ b/src/actions/cloud-compute/cloud-compute.ts
@@ -101,7 +101,7 @@ export const runMeticulousTestsCloudComputeAction = async (): Promise => {
basicAuthPassword: string;
}) => {
logger.info(
- `Secure tunnel to ${appUrl} created: ${url}, user: ${basicAuthUser}, password: ${basicAuthPassword}`
+ `Secure tunnel to ${appUrl} created: ${url} user: ${basicAuthUser} password: ${basicAuthPassword}`
);
if (isDebugPRRun) {
diff --git a/src/actions/main/__tests__/get-inputs.spec.ts b/src/actions/main/__tests__/get-inputs.spec.ts
index efd67819..d6b3dbeb 100644
--- a/src/actions/main/__tests__/get-inputs.spec.ts
+++ b/src/actions/main/__tests__/get-inputs.spec.ts
@@ -13,6 +13,7 @@ const keys = [
"METICULOUS_TELEMETRY_SAMPLE_RATE",
"USE_DEPLOYMENT_URL",
"ALLOWED_ENVIRONMENTS",
+ "ADDITIONAL_PORTS",
];
const EXPECTED_DEFAULT_VALUES = {
@@ -28,6 +29,7 @@ const EXPECTED_DEFAULT_VALUES = {
parallelTasks: null,
testsFile: null,
testSuiteId: null,
+ additionalPorts: null,
};
describe("getMainActionInputs", () => {
diff --git a/src/actions/main/get-inputs.ts b/src/actions/main/get-inputs.ts
index c267d42c..e771f59e 100644
--- a/src/actions/main/get-inputs.ts
+++ b/src/actions/main/get-inputs.ts
@@ -62,6 +62,11 @@ export const getMainActionInputs = () => {
required: false,
type: "string-array",
});
+ const additionalPorts = getInputFromEnv({
+ name: "additional-ports",
+ required: false,
+ type: "string",
+ });
if (appUrl != null && appUrl != "" && useDeploymentUrl === true) {
throw new Error("Cannot use both app-url and use-deployment-url");
@@ -93,5 +98,6 @@ export const getMainActionInputs = () => {
useDeploymentUrl,
testSuiteId,
allowedEnvironments,
+ additionalPorts,
};
};
diff --git a/src/actions/main/main.ts b/src/actions/main/main.ts
index d37e3aeb..04c76331 100644
--- a/src/actions/main/main.ts
+++ b/src/actions/main/main.ts
@@ -60,6 +60,7 @@ export const runMeticulousTestsAction = async (): Promise => {
useDeploymentUrl,
allowedEnvironments,
testSuiteId,
+ additionalPorts,
} = getMainActionInputs();
const { payload } = context;
const event = getCodeChangeEvent(context.eventName, payload);
@@ -150,7 +151,12 @@ export const runMeticulousTestsAction = async (): Promise => {
: appUrl;
if (urlToTestAgainst != null) {
- spinUpProxyIfNeeded(urlToTestAgainst, appUrlAliasedToLocalhost, logger);
+ spinUpProxyIfNeeded(
+ urlToTestAgainst,
+ additionalPorts,
+ appUrlAliasedToLocalhost,
+ logger
+ );
await throwIfCannotConnectToOrigin(urlToTestAgainst);
}
diff --git a/src/actions/main/utils/proxy.ts b/src/actions/main/utils/proxy.ts
index 08263a45..30ca040a 100644
--- a/src/actions/main/utils/proxy.ts
+++ b/src/actions/main/utils/proxy.ts
@@ -11,21 +11,30 @@ export const DOCKER_BRIDGE_NETWORK_GATEWAY = "172.17.0.1";
// allowing auth to go ahead with HTTPS).
export const spinUpProxyIfNeeded = (
appUrl: string,
+ additionalPorts: string | null,
appUrlAliasedToLocalhost: boolean,
logger: Logger
): void => {
try {
const url = new URL(appUrl);
+ const ports = additionalPorts?.split(",") ?? [];
if (
appUrlAliasedToLocalhost ||
url.hostname === "localhost" ||
url.hostname === "127.0.0.1"
) {
- const defaultPortForProtocol = url.protocol === "https:" ? 443 : 80;
+ const defaultPortForProtocol = url.protocol === "https:" ? "443" : "80";
const port = url.port || defaultPortForProtocol;
- const nginxConfig = `
- events {}
- http {
+ if (!ports.includes(port)) {
+ ports.push(port);
+ }
+ }
+ if (ports.length > 0) {
+ const nginxConfig =
+ "events {}\nhttp {\n" +
+ ports
+ .map(
+ (port) => `
server {
listen ${port};
server_name ${
@@ -35,13 +44,17 @@ export const spinUpProxyIfNeeded = (
proxy_pass http://${DOCKER_BRIDGE_NETWORK_GATEWAY}:${port};
}
}
- }
- `;
+ `
+ )
+ .join("\n") +
+ "}\n";
mkdirSync("/etc/nginx", { recursive: true });
writeFileSync("/etc/nginx/nginx.conf", nginxConfig);
execSync("service nginx restart");
logger.info(
- `Successfully set up a proxy to host machine on port ${port}`
+ `Successfully set up a proxy to host machine on port(s): ${ports.join(
+ ","
+ )}`
);
}
} catch (error) {
diff --git a/tests/react-bmi-calculator/yarn.lock b/tests/react-bmi-calculator/yarn.lock
index 8f56d356..8ae281f3 100644
--- a/tests/react-bmi-calculator/yarn.lock
+++ b/tests/react-bmi-calculator/yarn.lock
@@ -2849,13 +2849,13 @@ bluebird@^3.5.5:
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
-body-parser@1.20.1:
- version "1.20.1"
- resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668"
- integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==
+body-parser@1.20.2:
+ version "1.20.2"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd"
+ integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==
dependencies:
bytes "3.1.2"
- content-type "~1.0.4"
+ content-type "~1.0.5"
debug "2.6.9"
depd "2.0.0"
destroy "1.2.0"
@@ -2863,7 +2863,7 @@ body-parser@1.20.1:
iconv-lite "0.4.24"
on-finished "2.4.1"
qs "6.11.0"
- raw-body "2.5.1"
+ raw-body "2.5.2"
type-is "~1.6.18"
unpipe "1.0.0"
@@ -3295,6 +3295,11 @@ content-type@~1.0.4:
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
+content-type@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918"
+ integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
+
convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f"
@@ -3305,10 +3310,10 @@ cookie-signature@1.0.6:
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
-cookie@0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
- integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
+cookie@0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051"
+ integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==
core-js-compat@^3.25.1:
version "3.26.1"
@@ -4302,16 +4307,16 @@ expect@^27.5.1:
jest-message-util "^27.5.1"
express@^4.17.3:
- version "4.18.2"
- resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59"
- integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==
+ version "4.19.2"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465"
+ integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==
dependencies:
accepts "~1.3.8"
array-flatten "1.1.1"
- body-parser "1.20.1"
+ body-parser "1.20.2"
content-disposition "0.5.4"
content-type "~1.0.4"
- cookie "0.5.0"
+ cookie "0.6.0"
cookie-signature "1.0.6"
debug "2.6.9"
depd "2.0.0"
@@ -7333,10 +7338,10 @@ range-parser@^1.2.1, range-parser@~1.2.1:
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
-raw-body@2.5.1:
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857"
- integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==
+raw-body@2.5.2:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a"
+ integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==
dependencies:
bytes "3.1.2"
http-errors "2.0.0"
diff --git a/yarn.lock b/yarn.lock
index 1ed9f988..db87568d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -32,46 +32,38 @@
dependencies:
tunnel "^0.0.6"
-"@alwaysmeticulous/api@^2.122.0":
- version "2.122.0"
- resolved "https://registry.yarnpkg.com/@alwaysmeticulous/api/-/api-2.122.0.tgz#006c0709be84bee885b986f6691e11111c9e0ab7"
- integrity sha512-MPRiJNHYpwPaM/AS3zXWHt4wqrjO0jvTcimi6n0fF9LhUNh+pHw2tVlnx8aH00eRspQ3SuqVsyYkrJzMM48Niw==
-
-"@alwaysmeticulous/client@^2.122.0":
- version "2.122.0"
- resolved "https://registry.yarnpkg.com/@alwaysmeticulous/client/-/client-2.122.0.tgz#0f8c65fad36f03e2ccf0ac55b03bf871cb8ab1a4"
- integrity sha512-YM7FdWSLcTvfhzo5cyahGPtfDOmz71pFECcIJIw7ech7TU1+bEnuUyR6MSycnuZsXare5Mr0x768fnxKY5ovbw==
- dependencies:
- "@alwaysmeticulous/api" "^2.122.0"
- "@alwaysmeticulous/common" "^2.122.0"
+"@alwaysmeticulous/api@^2.124.0":
+ version "2.124.0"
+ resolved "https://registry.yarnpkg.com/@alwaysmeticulous/api/-/api-2.124.0.tgz#be387dc8858aaa4538edd691459117d9975a2569"
+ integrity sha512-UuXDTzWcIVf7rJ1Hw/StscP1WkiVutpqxnvn7egrmDPqzy3c8rh5iO8uveyo+ODnqVB1nYxyW/s9SdjHRMelIw==
+
+"@alwaysmeticulous/client@^2.125.0":
+ version "2.125.0"
+ resolved "https://registry.yarnpkg.com/@alwaysmeticulous/client/-/client-2.125.0.tgz#382d28a59632f1e9a218aebaa637262077e0c92f"
+ integrity sha512-Wp72UWqmkNM0euB1VZMjhTF1ADms6z+65+IL4pXVWvUcYYIh/MZr/7MIZf+J+0aAeVOfJ7sZTlyjjZxY26c25g==
+ dependencies:
+ "@alwaysmeticulous/api" "^2.124.0"
+ "@alwaysmeticulous/common" "^2.125.0"
axios "^1.2.6"
axios-retry "^3.5.0"
loglevel "^1.8.0"
-"@alwaysmeticulous/common@^2.121.0":
- version "2.121.0"
- resolved "https://registry.yarnpkg.com/@alwaysmeticulous/common/-/common-2.121.0.tgz#992c191bf82cd6eef88f3157207f33e9d224f74d"
- integrity sha512-CBGtT8ybyFDzElcjS74i6OYv+Di0nMjCTP+UoY/tMr3xTdLhBWivs2VVziHyxwFSeWGXxNCvmJTCk3um2cWtyg==
+"@alwaysmeticulous/common@^2.125.0":
+ version "2.125.0"
+ resolved "https://registry.yarnpkg.com/@alwaysmeticulous/common/-/common-2.125.0.tgz#db6426f285892b86ffb59de8a1d28524c80d6970"
+ integrity sha512-0QFUlN8EQlu0OOt1TIQxW3FSGgvrDEpu0VG+vSWtiTBOdUXQ2oFKKNT4+r4sT9gnqqcY4h6hssHxINLp6+TUYQ==
dependencies:
loglevel "^1.8.0"
luxon "^3.2.1"
-"@alwaysmeticulous/common@^2.122.0":
- version "2.122.0"
- resolved "https://registry.yarnpkg.com/@alwaysmeticulous/common/-/common-2.122.0.tgz#cdf19c34e773949e7cd1aa52ca880e2dbc103c6a"
- integrity sha512-20YllRh7l17WfNn59/mK9xJ/vsxgjunM+R5Iw5knQ8lgU+RYXxlaqtQMr/q361AMZfHWioYO6OzJlXuHWVo/dA==
+"@alwaysmeticulous/downloading-helpers@^2.125.0":
+ version "2.125.0"
+ resolved "https://registry.yarnpkg.com/@alwaysmeticulous/downloading-helpers/-/downloading-helpers-2.125.0.tgz#17955edc51403a5c06075b099ed7d76239d6732b"
+ integrity sha512-0rI+Zzh6xEboQh5on9dsnvTC4aC4lBxhPIdZXlsA6uyyUQF/ey3uS0epY/707xPq160qfX7bcIxp8oVAfeaCGg==
dependencies:
- loglevel "^1.8.0"
- luxon "^3.2.1"
-
-"@alwaysmeticulous/downloading-helpers@^2.122.1":
- version "2.122.1"
- resolved "https://registry.yarnpkg.com/@alwaysmeticulous/downloading-helpers/-/downloading-helpers-2.122.1.tgz#df5154f8e80e87c94c731e93e35f60a57498fe7c"
- integrity sha512-ZCIc502Mo9LUpLdy1yUzuDzZdpwCHuvAdzBtOxmcDP67YsgI1rN84fxn01wmScRFrLRsKksGKvHePOQRxiAU4g==
- dependencies:
- "@alwaysmeticulous/api" "^2.122.0"
- "@alwaysmeticulous/client" "^2.122.0"
- "@alwaysmeticulous/common" "^2.122.0"
+ "@alwaysmeticulous/api" "^2.124.0"
+ "@alwaysmeticulous/client" "^2.125.0"
+ "@alwaysmeticulous/common" "^2.125.0"
axios "^1.2.6"
axios-retry "^3.5.0"
extract-zip "^2.0.1"
@@ -80,46 +72,46 @@
p-limit "^3.1.0"
proper-lockfile "^4.1.2"
-"@alwaysmeticulous/remote-replay-launcher@^2.123.0":
- version "2.123.0"
- resolved "https://registry.yarnpkg.com/@alwaysmeticulous/remote-replay-launcher/-/remote-replay-launcher-2.123.0.tgz#1e86e6faefb86d7c37d976e0fa30411332749744"
- integrity sha512-qDdIeU4dUywgVwp6yavBAdlFU6AAu70U3BPPuPXppqWT6TSXI/6B4HP9ygLvhdyNVYtLaxaIplyk8GwjQ6Xigg==
+"@alwaysmeticulous/remote-replay-launcher@^2.125.0":
+ version "2.125.0"
+ resolved "https://registry.yarnpkg.com/@alwaysmeticulous/remote-replay-launcher/-/remote-replay-launcher-2.125.0.tgz#b93aa99b6758e667eae14169515c26f83a5d3d47"
+ integrity sha512-Hmjmz0Kjuk+4t1+XI8AsyJlxlGLfsUGwesor7OKgE8CKkApWmPqgOvoJpJGh5NVgNWVtUfzP6ZgUiyI/WGirzw==
dependencies:
- "@alwaysmeticulous/client" "^2.122.0"
- "@alwaysmeticulous/common" "^2.122.0"
- "@alwaysmeticulous/tunnels-client" "^2.123.0"
+ "@alwaysmeticulous/client" "^2.125.0"
+ "@alwaysmeticulous/common" "^2.125.0"
+ "@alwaysmeticulous/tunnels-client" "^2.125.0"
loglevel "^1.8.0"
-"@alwaysmeticulous/replay-orchestrator-launcher@^2.122.1":
- version "2.122.1"
- resolved "https://registry.yarnpkg.com/@alwaysmeticulous/replay-orchestrator-launcher/-/replay-orchestrator-launcher-2.122.1.tgz#70d7df7138bd64fc95a2b4fe1b5df71dbf813ace"
- integrity sha512-qs4iFPm/J6IH+qXwCkR0TsBYl1jdH20NUYfQgGih4WZCNPvcD584m7fhjFTmoX1v05//K4+ziAeQicOTVmS2Jg==
+"@alwaysmeticulous/replay-orchestrator-launcher@^2.125.0":
+ version "2.125.0"
+ resolved "https://registry.yarnpkg.com/@alwaysmeticulous/replay-orchestrator-launcher/-/replay-orchestrator-launcher-2.125.0.tgz#b8b26b1a6ee7708c3e21dab88f285330d5900ea4"
+ integrity sha512-6ggreG0HYFrYGDqM6WmUI0oJP47FmPSDdXugrAt7d/F2HVEsvIlXbXcXz+ZHStBK8Tfs5RP6CzFrRyAdaIslzA==
dependencies:
- "@alwaysmeticulous/common" "^2.122.0"
- "@alwaysmeticulous/downloading-helpers" "^2.122.1"
- "@alwaysmeticulous/sdk-bundles-api" "^2.122.0"
+ "@alwaysmeticulous/common" "^2.125.0"
+ "@alwaysmeticulous/downloading-helpers" "^2.125.0"
+ "@alwaysmeticulous/sdk-bundles-api" "^2.125.0"
loglevel "^1.8.0"
puppeteer "21.9.0"
-"@alwaysmeticulous/sdk-bundles-api@^2.122.0":
- version "2.122.0"
- resolved "https://registry.yarnpkg.com/@alwaysmeticulous/sdk-bundles-api/-/sdk-bundles-api-2.122.0.tgz#6930f4ce19ab661511e5f03d0e5665feee538bfd"
- integrity sha512-tozwLNQVfZDfGQsMxj7q3N8316rKLaUB9byLjUf11B9CCTXa3m7pVovuyGkSRNv/jbNeegisgpGPstyhfBiBXg==
+"@alwaysmeticulous/sdk-bundles-api@^2.125.0":
+ version "2.125.0"
+ resolved "https://registry.yarnpkg.com/@alwaysmeticulous/sdk-bundles-api/-/sdk-bundles-api-2.125.0.tgz#6d46928d07d5980d825c123013c9c8841e8d68db"
+ integrity sha512-Uaau2VJzKLL7u89WGtfvjWSwSlJXfi+5EAKiglyRCMEV1bbnSwU8xP0nWbjdXAit6qg5CvHKDWyb/XYPeBZzaQ==
-"@alwaysmeticulous/sentry@^2.121.0":
- version "2.121.0"
- resolved "https://registry.yarnpkg.com/@alwaysmeticulous/sentry/-/sentry-2.121.0.tgz#ffddab0bd79460be348a5fa449b0d9a2a8c955a3"
- integrity sha512-QJDeD3eQ5cY5Nf5Mqo/kesYqj95j1uvLlbpMUtBc2mgeGINnfNXfneGjMlkId556px36L+uhchl/3mXoZx6MdQ==
+"@alwaysmeticulous/sentry@^2.125.0":
+ version "2.125.0"
+ resolved "https://registry.yarnpkg.com/@alwaysmeticulous/sentry/-/sentry-2.125.0.tgz#d3193c0425e0eabfada4b48ff3e85b70d9935cd2"
+ integrity sha512-VJFbYavhVMS5qBmI6DbE13QGajxwBq0NDh/sDxNbugojMf52Bji4L55wrDA3DIk3GRVCwGGdRpTWEESrcuekVA==
dependencies:
- "@alwaysmeticulous/common" "^2.121.0"
+ "@alwaysmeticulous/common" "^2.125.0"
"@sentry/node" "^7.107.0"
"@sentry/tracing" "^7.107.0"
luxon "^3.2.1"
-"@alwaysmeticulous/tunnels-client@^2.123.0":
- version "2.123.0"
- resolved "https://registry.yarnpkg.com/@alwaysmeticulous/tunnels-client/-/tunnels-client-2.123.0.tgz#d9df274ca0d57000963b73c3910d345837f37773"
- integrity sha512-24jGuOmC+Z6R+tflReuLjDNEehODPd84nZx4xJ0s4M556FDeXncBqNs7sP88koBpDdxMt4/vfsjVbPzGKbP3DA==
+"@alwaysmeticulous/tunnels-client@^2.125.0":
+ version "2.125.0"
+ resolved "https://registry.yarnpkg.com/@alwaysmeticulous/tunnels-client/-/tunnels-client-2.125.0.tgz#eb7147081529b4c2d56760ae6974a30a2c925a37"
+ integrity sha512-/2Ub9FAmweMMZCPq5CL30UhNr1sGIRETZWiRBcdCo6GlgVNxkR4JK5uiSVJdNEflBdQGR2ONKXLCym+5S2O1hg==
dependencies:
axios "^1.2.6"
axios-retry "^3.5.0"
@@ -1572,18 +1564,6 @@
"@parcel/utils" "2.12.0"
nullthrows "^1.1.1"
-"@pkgr/utils@^2.3.1":
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.3.1.tgz#0a9b06ffddee364d6642b3cd562ca76f55b34a03"
- integrity sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==
- dependencies:
- cross-spawn "^7.0.3"
- is-glob "^4.0.3"
- open "^8.4.0"
- picocolors "^1.0.0"
- tiny-glob "^0.2.9"
- tslib "^2.4.0"
-
"@puppeteer/browsers@1.9.1":
version "1.9.1"
resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-1.9.1.tgz#384ee8b09786f0e8f62b1925e4c492424cb549ee"
@@ -2699,11 +2679,6 @@ define-data-property@^1.0.1, define-data-property@^1.1.1:
gopd "^1.0.1"
has-property-descriptors "^1.0.0"
-define-lazy-prop@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
- integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
-
define-properties@^1.1.3, define-properties@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1"
@@ -3012,19 +2987,18 @@ eslint-import-resolver-node@^0.3.9:
is-core-module "^2.13.0"
resolve "^1.22.4"
-eslint-import-resolver-typescript@^3.5.5:
- version "3.5.5"
- resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz#0a9034ae7ed94b254a360fbea89187b60ea7456d"
- integrity sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==
+eslint-import-resolver-typescript@^3.6.1:
+ version "3.6.1"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz#7b983680edd3f1c5bce1a5829ae0bc2d57fe9efa"
+ integrity sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==
dependencies:
debug "^4.3.4"
enhanced-resolve "^5.12.0"
eslint-module-utils "^2.7.4"
+ fast-glob "^3.3.1"
get-tsconfig "^4.5.0"
- globby "^13.1.3"
is-core-module "^2.11.0"
is-glob "^4.0.3"
- synckit "^0.8.5"
eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0:
version "2.8.0"
@@ -3215,10 +3189,10 @@ fast-fifo@^1.1.0, fast-fifo@^1.2.0:
resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c"
integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==
-fast-glob@^3.2.11, fast-glob@^3.2.9:
- version "3.2.12"
- resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
- integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
+fast-glob@^3.2.9, fast-glob@^3.3.1:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
+ integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
dependencies:
"@nodelib/fs.stat" "^2.0.2"
"@nodelib/fs.walk" "^1.2.3"
@@ -3503,11 +3477,6 @@ globalthis@^1.0.3:
dependencies:
define-properties "^1.1.3"
-globalyzer@0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465"
- integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==
-
globby@^11.1.0:
version "11.1.0"
resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
@@ -3520,22 +3489,6 @@ globby@^11.1.0:
merge2 "^1.4.1"
slash "^3.0.0"
-globby@^13.1.3:
- version "13.1.3"
- resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.3.tgz#f62baf5720bcb2c1330c8d4ef222ee12318563ff"
- integrity sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==
- dependencies:
- dir-glob "^3.0.1"
- fast-glob "^3.2.11"
- ignore "^5.2.0"
- merge2 "^1.4.1"
- slash "^4.0.0"
-
-globrex@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098"
- integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==
-
gopd@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
@@ -3798,11 +3751,6 @@ is-date-object@^1.0.1:
dependencies:
has-tostringtag "^1.0.0"
-is-docker@^2.0.0, is-docker@^2.1.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
- integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
-
is-extglob@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
@@ -3920,13 +3868,6 @@ is-weakref@^1.0.2:
dependencies:
call-bind "^1.0.2"
-is-wsl@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
- integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
- dependencies:
- is-docker "^2.0.0"
-
isarray@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
@@ -4951,15 +4892,6 @@ onetime@^5.1.2:
dependencies:
mimic-fn "^2.1.0"
-open@^8.4.0:
- version "8.4.0"
- resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8"
- integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==
- dependencies:
- define-lazy-prop "^2.0.0"
- is-docker "^2.1.1"
- is-wsl "^2.2.0"
-
optionator@^0.8.1:
version "0.8.3"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
@@ -5535,11 +5467,6 @@ slash@^3.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
-slash@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
- integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
-
smart-buffer@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
@@ -5733,14 +5660,6 @@ symbol-tree@^3.2.4:
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
-synckit@^0.8.5:
- version "0.8.5"
- resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3"
- integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==
- dependencies:
- "@pkgr/utils" "^2.3.1"
- tslib "^2.5.0"
-
tapable@^2.2.0:
version "2.2.1"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
@@ -5806,14 +5725,6 @@ timsort@^0.3.0:
resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
integrity sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==
-tiny-glob@^0.2.9:
- version "0.2.9"
- resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2"
- integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==
- dependencies:
- globalyzer "0.1.0"
- globrex "^0.1.2"
-
tmpl@1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
@@ -5887,7 +5798,7 @@ tslib@^2.0.1:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
-tslib@^2.4.0, tslib@^2.5.0:
+tslib@^2.4.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==