@ilamy/calendar 1.4.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
- import{RRule as $X}from"rrule";import{RRule as g2}from"rrule";import W0 from"dayjs";import B2 from"dayjs/plugin/isBetween.js";import M2 from"dayjs/plugin/isSameOrAfter.js";import R2 from"dayjs/plugin/isSameOrBefore.js";import S2 from"dayjs/plugin/localeData.js";import I2 from"dayjs/plugin/minMax.js";import b2 from"dayjs/plugin/timezone.js";import w2 from"dayjs/plugin/utc.js";import m2 from"dayjs/plugin/weekday.js";import H2 from"dayjs/plugin/weekOfYear.js";W0.extend(m2);W0.extend(H2);W0.extend(M2);W0.extend(R2);W0.extend(B2);W0.extend(I2);W0.extend(b2);W0.extend(w2);W0.extend(S2);var V=W0;import{clsx as T2}from"clsx";import{twMerge as k2}from"tailwind-merge";function U(...P){return k2(T2(P))}function e0(P){if(P===void 0)return;if(V.isDayjs(P))return P;let f=V(P);return f.isValid()?f:void 0}var mf=(P,f)=>{let $={...P};for(let Z of f)delete $[Z];return $};function HP(P){if(!P||!P.length)return[];return P.map((f)=>{return{...f,start:V.isDayjs(f.start)?f.start:V(f.start),end:V.isDayjs(f.end)?f.end:V(f.end)}})}var TP=(P)=>{return new Date(Date.UTC(P.year(),P.month(),P.date(),P.hour(),P.minute(),P.second(),P.millisecond()))},h2=(P,f)=>{return f.year(P.getUTCFullYear()).month(P.getUTCMonth()).date(P.getUTCDate()).hour(P.getUTCHours()).minute(P.getUTCMinutes()).second(P.getUTCSeconds()).millisecond(P.getUTCMilliseconds())},PP=(P)=>{return Boolean(P.rrule||P.recurrenceId||P.uid)},N0=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},Jf=({event:P,currentEvents:f,startDate:$,endDate:Z})=>{if(!P.rrule)return[];try{let X=TP(P.start),z=P.rrule.until?TP(V(P.rrule.until)):void 0,q={...P.rrule,dtstart:X,until:z},Q=new g2(q),J=N0(P),Y=f.filter((_)=>_.recurrenceId&&N0(_)===J),G=P.end.diff(P.start),K=TP($.subtract(G,"millisecond")),N=TP(Z);return Q.between(K,N,!0).map((_,L)=>{let p=h2(_,P.start),W=Y.find((k)=>e0(k.recurrenceId)?.isSame(p));if(W)return{...P,...W};let B=P.end.diff(P.start),R=p.add(B,"millisecond"),b=`${P.id}_${L}`,I=N0(P);return{...P,id:b,start:p,end:R,uid:I,rrule:void 0}}).filter((_)=>{if(P.exdates&&P.exdates.length>0){let W=_.start.toISOString();if(P.exdates.includes(W))return!1}return _.start.isSameOrBefore(Z)&&_.end.isSameOrAfter($)})}catch(X){throw Error(`Invalid RRULE options: ${JSON.stringify(P.rrule)}. Error: ${X instanceof Error?X.message:"Unknown error"}`)}},Hf=({targetEvent:P,updates:f,currentEvents:$,scope:Z})=>{let X=[...$],z=N0(P),q=X.findIndex((J)=>{return N0(J)===z&&J.rrule&&!J.recurrenceId});if(q===-1)throw Error("Base recurring event not found");let Q=X[q];switch(Z){case"this":{let J=P.start.toISOString(),G=[...Q.exdates||[],J],K={...Q,exdates:G};X[q]=K;let N=`${P.id}_modified_${Date.now()}`,O={...mf(P,["width","height","top","left","right"]),...f,id:N,recurrenceId:J,uid:N0(Q),rrule:void 0};X.push(O);break}case"following":{let Y=P.start.subtract(1,"day").endOf("day").toDate(),G={...Q,rrule:{...Q.rrule,until:Y}};X[q]=G;let K=Q.end.diff(Q.start),N=f.start||P.start,O=f.end||N.add(K),A=`${Q.id}_following`,_=`${A}@ilamy.calendar`,L={...Q,...f,rrule:{...Q.rrule,...f.rrule,dtstart:N.toDate()},id:A,uid:_,start:N,end:O,recurrenceId:void 0};X.push(L);break}case"all":{let J={...Q,...f};X[q]=J;break}default:throw Error(`Invalid scope: ${Z}. Must be 'this', 'following', or 'all'`)}return X},Tf=({targetEvent:P,currentEvents:f,scope:$})=>{let Z=[...f],X=N0(P),z=Z.findIndex((Q)=>{return N0(Q)===X&&Q.rrule&&!Q.recurrenceId});if(z===-1)throw Error("Base recurring event not found");let q=Z[z];switch($){case"this":{let Q=P.start.toISOString(),Y=[...q.exdates||[],Q],G={...q,exdates:Y};Z[z]=G;break}case"following":{let J=P.start.subtract(1,"day").endOf("day").toDate(),Y={...q,rrule:{...q.rrule,until:J}};Z[z]=Y;break}case"all":{let Q=N0(P);return Z.filter((Y)=>N0(Y)!==Q)}default:throw Error(`Invalid scope: ${$}. Must be 'this', 'following', or 'all'`)}return Z};import{AnimatePresence as C2,motion as D2}from"motion/react";import{jsx as kf}from"react/jsx-runtime";var E2={hidden:({direction:P})=>({opacity:0,x:P==="horizontal"?10:0,y:P==="vertical"?-10:0}),visible:({delay:P})=>({opacity:1,x:0,y:0,transition:{duration:0.2,ease:[0.4,0,0.2,1],delay:P}}),exit:({direction:P})=>({opacity:0,x:P==="horizontal"?-10:0,y:P==="vertical"?-10:0,transition:{duration:0.15}})},D=({children:P,transitionKey:f,delay:$=0,className:Z,direction:X="vertical",layout:z,layoutId:q,"data-testid":Q,ref:J,...Y})=>kf(C2,{mode:"wait",children:kf(D2.div,{animate:"visible",className:U("inline-block w-full",Z),custom:{delay:$,direction:X},"data-testid":Q,exit:"exit",initial:"hidden",layout:z,layoutId:q,ref:J,variants:E2,...Y,children:P},f)});D.displayName="AnimatedSection";import{DndContext as e2,MouseSensor as P1,pointerWithin as f1,TouchSensor as $1,useSensor as df,useSensors as z1}from"@dnd-kit/core";import{useRef as rf,useState as Z1}from"react";import{Slot as j2}from"@radix-ui/react-slot";import{cva as y2}from"class-variance-authority";import{jsx as x2}from"react/jsx-runtime";var kP=y2("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function g({className:P,variant:f,size:$,asChild:Z=!1,...X}){return x2(Z?j2:"button",{className:U(kP({variant:f,size:$,className:P})),"data-slot":"button",...X})}import*as z0 from"@radix-ui/react-dialog";import{XIcon as v2}from"lucide-react";import{jsx as O0,jsxs as Xf}from"react/jsx-runtime";function fP({...P}){return O0(z0.Root,{"data-slot":"dialog",...P})}function o2({...P}){return O0(z0.Portal,{"data-slot":"dialog-portal",...P})}function i2({className:P,...f}){return O0(z0.Overlay,{className:U("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",P),"data-slot":"dialog-overlay",...f})}function $P({className:P,children:f,...$}){return Xf(o2,{"data-slot":"dialog-portal",children:[O0(i2,{}),Xf(z0.Content,{className:U("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg max-h-[90%]",P),"data-slot":"dialog-content",...$,children:[f,Xf(z0.Close,{className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[O0(v2,{}),O0("span",{className:"sr-only",children:"Close"})]})]})]})}function zP({className:P,...f}){return O0("div",{className:U("flex flex-col gap-2 text-center sm:text-left",P),"data-slot":"dialog-header",...f})}function gP({className:P,...f}){return O0("div",{className:U("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",P),"data-slot":"dialog-footer",...f})}function ZP({className:P,...f}){return O0(z0.Title,{className:U("text-lg leading-none font-semibold",P),"data-slot":"dialog-title",...f})}function hP({className:P,...f}){return O0(z0.Description,{className:U("text-muted-foreground text-sm",P),"data-slot":"dialog-description",...f})}import{useContext as of}from"react";import{createContext as c2}from"react";var CP=c2(void 0);import{createContext as l2}from"react";var DP=l2(void 0);import{useCallback as Y0,useMemo as u2,useState as yf}from"react";import{useCallback as P0,useEffect as Qf,useMemo as Ef,useState as a0}from"react";var qf={today:"Today",create:"Create",new:"New",update:"Update",delete:"Delete",cancel:"Cancel",export:"Export",event:"Event",events:"Events",newEvent:"New Event",title:"Title",description:"Description",location:"Location",allDay:"All day",startDate:"Start Date",endDate:"End Date",startTime:"Start Time",endTime:"End Time",color:"Color",createEvent:"Create Event",editEvent:"Edit Event",addNewEvent:"Add a new event to your calendar",editEventDetails:"Edit your event details",eventTitlePlaceholder:"Event title",eventDescriptionPlaceholder:"Event description (optional)",eventLocationPlaceholder:"Event location (optional)",repeat:"Repeat",repeats:"Repeats",customRecurrence:"Custom recurrence",daily:"Daily",weekly:"Weekly",monthly:"Monthly",yearly:"Yearly",interval:"Interval",repeatOn:"Repeat on",never:"Never",count:"Count",every:"Every",ends:"Ends",after:"After",occurrences:"occurrences",on:"On",editRecurringEvent:"Edit recurring event",deleteRecurringEvent:"Delete recurring event",editRecurringEventQuestion:"is a recurring event. How would you like to edit it?",deleteRecurringEventQuestion:"is a recurring event. How would you like to delete it?",thisEvent:"This event",thisEventDescription:"Only change this specific occurrence",thisAndFollowingEvents:"This and following events",thisAndFollowingEventsDescription:"Edit this and all future occurrences",allEvents:"All events",allEventsDescription:"Edit the entire recurring series",onlyChangeThis:"Only change this specific occurrence",changeThisAndFuture:"Change this and all future occurrences",changeEntireSeries:"Change the entire recurring series",onlyDeleteThis:"Only delete this specific occurrence",deleteThisAndFuture:"Delete this and all future occurrences",deleteEntireSeries:"Delete the entire recurring series",month:"Month",week:"Week",day:"Day",year:"Year",more:"more",resources:"Resources",resource:"Resource",time:"Time",date:"Date",noResourcesVisible:"No resources visible",addResourcesOrShowExisting:"Add resources or show existing ones",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat",january:"January",february:"February",march:"March",april:"April",may:"May",june:"June",july:"July",august:"August",september:"September",october:"October",november:"November",december:"December"};function Z0(P,f){let $=P.startOf("week").day(f),Z=P.isBefore($)?$.subtract(1,"week"):$;return Array.from({length:7},(X,z)=>Z.add(z,"day"))}function EP(P,f){let $=Z0(P.startOf("month"),f);return Array.from({length:6},(Z,X)=>{let z=$[0].add(X,"week");return Z0(z,f)})}function gf(P){let f=P.daysInMonth();return Array.from({length:f},($,Z)=>P.startOf("month").add(Z,"day"))}function hf({referenceDate:P=V(),length:f=24}={}){let $=P.startOf("day");return Array.from({length:f},(Z,X)=>$.hour(X).minute(0).second(0).millisecond(0))}var m0=1,Cf=24,G0=24,JP=4,Df="bg-secondary text-muted-foreground pointer-events-none",H0={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6};var jf={day:"day",week:"week",month:"month",year:"year"},jP=(P)=>{let{events:f=[],firstDayOfWeek:$=0,initialView:Z="month",initialDate:X=V(),businessHours:z,onEventAdd:q,onEventUpdate:Q,onEventDelete:J,onDateChange:Y,onViewChange:G,locale:K,timezone:N,translations:O,translator:A}=P,[_,L]=a0(X),[p,W]=a0(Z),[B,R]=a0(f),[b,I]=a0(!1),[T,k]=a0(null),[h,C]=a0(null),[v,c]=a0(K||"en"),l=Ef(()=>{if(A)return A;if(O)return(M)=>O[M]||M;return(M)=>qf[M]||M},[O,A]),o=P0((M,m)=>{let j=[];for(let d of B)if(d.rrule)j.push(...Jf({event:d,currentEvents:B,startDate:M,endDate:m}));else{let r0=d.start.isSameOrAfter(M)&&d.start.isSameOrBefore(m),mP=d.end.isSameOrAfter(M)&&d.end.isSameOrBefore(m),Zf=d.start.isBefore(M)&&d.end.isAfter(m);if(r0||mP||Zf)j.push(d)}return j},[B]),p0=P0(()=>{if(p==="day")return{start:_.startOf("day"),end:_.endOf("day")};if(p==="year")return{start:_.startOf("year"),end:_.endOf("year")};if(p==="week"){let m=Z0(_,$);return{start:m[0].startOf("day"),end:m[6].endOf("day")}}let M=EP(_,$);return{start:M[0][0].startOf("day"),end:M[5][6].endOf("day")}},[_,p,$]),Q0=Ef(()=>{let{start:M,end:m}=p0();return o(M,m)},[o,p0]);Qf(()=>{if(f)R(f)},[f]),Qf(()=>{if(K)c(K),V.locale(K),L((M)=>M.locale(K))},[K]),Qf(()=>{if(N)V.tz.setDefault(N)},[N]);let S=P0((M)=>{L(M),Y?.(M)},[Y]),u=P0((M)=>{L((m)=>{let j=M===1?m.add(1,jf[p]):m.subtract(1,jf[p]);return Y?.(j),j})},[p,Y]),U0=P0(()=>u(1),[u]),t=P0(()=>u(-1),[u]),A0=P0(()=>{let M=V();L(M),Y?.(M)},[Y]),r=P0((M)=>{R((m)=>[...m,M]),q?.(M)},[q]),i=P0((M,m)=>{R((j)=>j.map((d)=>{if(d.id!==M)return d;let r0={...d,...m};return Q?.(r0),r0}))},[Q]),t0=P0((M,m,j)=>{Q?.({...M,...m}),R(Hf({targetEvent:M,updates:m,currentEvents:B,scope:j.scope}))},[B,Q]),s0=P0((M,m)=>{J?.(M),R(Tf({targetEvent:M,currentEvents:B,scope:m.scope}))},[B,J]),M0=P0((M)=>{R((m)=>{let j=m.find((d)=>d.id===M);if(j)J?.(j);return m.filter((d)=>d.id!==M)})},[J]),l0=P0((M)=>{if(M?.start)C(M.start);let m=M?.start??_;k({title:l("newEvent"),start:m,end:M?.end??m.add(1,"hour"),resourceId:M?.resourceId,description:"",allDay:M?.allDay??!1}),I(!0)},[_,l]),u0=P0(()=>{C(null),k(null),I(!1)},[]),d0=P0((M)=>{W(M),G?.(M)},[G]),w=P0((M)=>{let m=M.uid;return B.find((j)=>(j.uid||`${j.id}@ilamy.calendar`)===m&&j.rrule)||null},[B]);return{currentDate:_,view:p,events:Q0,rawEvents:B,isEventFormOpen:b,selectedEvent:T,selectedDate:h,firstDayOfWeek:$,dayMaxEvents:JP,currentLocale:v,businessHours:z,setCurrentDate:L,selectDate:S,setView:d0,nextPeriod:U0,prevPeriod:t,today:A0,addEvent:r,updateEvent:i,updateRecurringEvent:t0,deleteEvent:M0,deleteRecurringEvent:s0,openEventForm:l0,closeEventForm:u0,setSelectedEvent:k,setIsEventFormOpen:I,setSelectedDate:C,getEventsForDateRange:o,findParentRecurringEvent:w,t:l}};import{jsx as d2}from"react/jsx-runtime";var xf=(P)=>{if(P.resourceIds)return P.resourceIds;if(P.resourceId!==void 0)return[P.resourceId];return[]},vf=({children:P,events:f=[],resources:$=[],firstDayOfWeek:Z=0,initialView:X="month",initialDate:z,renderEvent:q,onEventClick:Q,onCellClick:J,onViewChange:Y,onEventAdd:G,onEventUpdate:K,onEventDelete:N,onDateChange:O,locale:A,timezone:_,disableCellClick:L,disableEventClick:p,disableDragAndDrop:W,dayMaxEvents:B,eventSpacing:R,stickyViewHeader:b=!0,viewHeaderClassName:I="",headerComponent:T,headerClassName:k,translations:h,translator:C,renderResource:v,renderEventForm:c,businessHours:l,timeFormat:o="12-hour",classesOverride:p0,orientation:Q0="horizontal",renderCurrentTimeIndicator:S,hideNonBusinessHours:u=!1,hiddenDays:U0})=>{let[t]=yf($),[A0,r]=yf(new Set($.map((H)=>H.id))),i=jP({events:f,firstDayOfWeek:Z,initialView:X,initialDate:z,businessHours:l,onEventAdd:G,onEventUpdate:K,onEventDelete:N,onDateChange:O,onViewChange:Y,locale:A,timezone:_,translations:h,translator:C}),t0=Y0((H)=>{r((e)=>{let w0=new Set(e);if(w0.has(H))w0.delete(H);else w0.add(H);return w0})},[]),s0=Y0((H)=>{r((e)=>new Set(e).add(H))},[]),M0=Y0((H)=>{r((e)=>{let w0=new Set(e);return w0.delete(H),w0})},[]),l0=Y0(()=>{r(new Set(t.map((H)=>H.id)))},[t]),u0=Y0(()=>{r(new Set)},[]),d0=Y0((H)=>{return i.events.filter((e)=>{if(e.resourceIds)return e.resourceIds.includes(H);return e.resourceId===H})},[i.events]),w=Y0((H)=>{return i.events.filter((e)=>{return xf(e).some((V2)=>H.includes(V2))})},[i.events]),M=Y0((H)=>{return t.find((e)=>e.id===H)},[t]),m=Y0(()=>{return t.filter((H)=>A0.has(H.id))},[t,A0]),j=Y0((H)=>{return Boolean(H.resourceIds&&H.resourceIds.length>1)},[]),d=Y0((H)=>{i.setSelectedEvent(H),i.setIsEventFormOpen(!0)},[i]),r0=Y0((H)=>{if(p)return;if(Q)Q(H);else d(H)},[p,Q,d]),mP=Y0((H)=>{if(L)return;if(J)J(H);else{let e={title:i.t("newEvent"),start:H.start,end:H.end,description:"",allDay:!1};if(H.resourceId!==void 0)e.resourceId=H.resourceId;i.setSelectedEvent(e),i.setSelectedDate(H.start),i.setIsEventFormOpen(!0)}},[J,L,i]),Zf=u2(()=>({...i,view:i.view,setView:i.setView,events:i.events,rawEvents:i.rawEvents,resources:t,visibleResources:A0,toggleResourceVisibility:t0,showResource:s0,hideResource:M0,showAllResources:l0,hideAllResources:u0,getEventsForResource:d0,getEventsForResources:w,getResourceById:M,getVisibleResources:m,isEventCrossResource:j,getEventResourceIds:xf,onEventClick:r0,onCellClick:mP,headerComponent:T,headerClassName:k,renderEvent:q,renderResource:v,renderEventForm:c,locale:A,timezone:_,disableCellClick:L,disableEventClick:p,disableDragAndDrop:W,dayMaxEvents:B,eventSpacing:R,stickyViewHeader:b,viewHeaderClassName:I,businessHours:l,timeFormat:o,classesOverride:p0,orientation:Q0,renderCurrentTimeIndicator:S,hideNonBusinessHours:u,hiddenDays:U0}),[i,t,A0,t0,s0,M0,l0,u0,d0,w,M,m,j,r0,mP,q,v,c,A,_,L,p,W,B,R,b,I,T,k,l,o,p0,Q0,S,u,U0]);return d2(DP.Provider,{value:Zf,children:P})};function F(P){let f=of(DP),$=of(CP),Z=f||$;if(!Z)throw Error("useSmartCalendarContext must be used within a CalendarProvider or ResourceCalendarProvider");return P?P(Z):Z}function r2(){let P=F();return{currentDate:P.currentDate,view:P.view,events:P.events,isEventFormOpen:P.isEventFormOpen,selectedEvent:P.selectedEvent,selectedDate:P.selectedDate,firstDayOfWeek:P.firstDayOfWeek,resources:P.resources||[],setCurrentDate:P.setCurrentDate,selectDate:P.selectDate,setView:P.setView,nextPeriod:P.nextPeriod,prevPeriod:P.prevPeriod,today:P.today,addEvent:P.addEvent,updateEvent:P.updateEvent,deleteEvent:P.deleteEvent,openEventForm:P.openEventForm,closeEventForm:P.closeEventForm,getEventsForResource:P.getEventsForResource,businessHours:P.businessHours}}import{jsx as _0,jsxs as n0}from"react/jsx-runtime";function LP({isOpen:P,onClose:f,onConfirm:$,operationType:Z,eventTitle:X}){let{t:z}=F((J)=>({t:J.t})),q=(J)=>{$(J),f()},Q=Z==="edit";return _0(fP,{onOpenChange:f,open:P,children:n0($P,{className:"max-w-md",children:[n0(zP,{children:[_0(ZP,{children:Q?z("editRecurringEvent"):z("deleteRecurringEvent")}),n0(hP,{children:['"',X,'"'," ",Q?z("editRecurringEventQuestion"):z("deleteRecurringEventQuestion")]})]}),n0("div",{className:"space-y-3",children:[_0(g,{className:"w-full justify-start h-auto p-4",onClick:()=>q("this"),variant:"outline",children:n0("div",{className:"text-left",children:[_0("div",{className:"font-medium",children:z("thisEvent")}),_0("div",{className:"text-sm text-muted-foreground",children:Q?z("onlyChangeThis"):z("onlyDeleteThis")})]})}),_0(g,{className:"w-full justify-start h-auto p-4",onClick:()=>q("following"),variant:"outline",children:n0("div",{className:"text-left",children:[_0("div",{className:"font-medium",children:z("thisAndFollowingEvents")}),_0("div",{className:"text-sm text-muted-foreground",children:Q?z("changeThisAndFuture"):z("deleteThisAndFuture")})]})}),_0(g,{className:"w-full justify-start h-auto p-4",onClick:()=>q("all"),variant:"outline",children:n0("div",{className:"text-left",children:[_0("div",{className:"font-medium",children:z("allEvents")}),_0("div",{className:"text-sm text-muted-foreground",children:Q?z("changeEntireSeries"):z("deleteEntireSeries")})]})})]}),_0(gP,{children:_0(g,{onClick:f,variant:"outline",children:z("cancel")})})]})})}var cf=(P,f)=>{let{active:$,over:Z}=P;if(!$||!Z||!f)return null;let X=Z.data.current?.type==="time-cell",{resourceId:z,allDay:q}=Z.data.current||{},Q;if(X){let{date:K,hour:N=0,minute:O=0}=Z.data.current;Q=V(K).hour(N).minute(O)}else{let{date:K}=Z.data.current;Q=V(K)}let J=f.end.diff(f.start,"second"),Y=Q.add(J,"second");if(Y.isSame(Y.startOf("day")))Y=Y.subtract(1,"day").endOf("day");let G={start:Q,end:Y,resourceId:z,allDay:X?!1:q??f.allDay};return{activeEvent:f,updates:G}};import{DragOverlay as a2}from"@dnd-kit/core";import{snapCenterToCursor as n2}from"@dnd-kit/modifiers";import{useImperativeHandle as t2,useState as s2}from"react";import{jsx as lf}from"react/jsx-runtime";var uf=({ref:P})=>{let[f,$]=s2(null);return t2(P,()=>({setActiveEvent:$})),lf(a2,{modifiers:[n2],children:f&&lf("div",{className:U("cursor-grab truncate rounded bg-amber-200 p-2 text-[10px] shadow-lg sm:text-xs w-20",f.backgroundColor||"bg-blue-500",f.color||"text-white"),children:f?.title})})};import{jsx as af,jsxs as nf,Fragment as J1}from"react/jsx-runtime";function yP({children:P}){let f=rf(null),$=rf(null),{updateEvent:Z,updateRecurringEvent:X,disableDragAndDrop:z}=F((p)=>({updateEvent:p.updateEvent,updateRecurringEvent:p.updateRecurringEvent,disableDragAndDrop:p.disableDragAndDrop})),[q,Q]=Z1({isOpen:!1,event:null,updates:null}),J=df(P1,{activationConstraint:{distance:2}}),Y=df($1,{activationConstraint:{delay:100,tolerance:5}}),G=z1(J,Y),K=(p,W)=>{if(!p||!p.id)return;if(!W||Object.keys(W).length===0)return;if(PP(p))Q({isOpen:!0,event:p,updates:W});else Z(p.id,W)},N=(p)=>{if(!q.event||!q.updates){Q({isOpen:!1,event:null,updates:null});return}try{X(q.event,q.updates,{scope:p,eventDate:q.event.start})}catch{}finally{Q({isOpen:!1,event:null,updates:null})}},O=()=>{Q({isOpen:!1,event:null,updates:null})},A=(p)=>{let{active:W}=p;if(W.data.current?.type==="calendar-event")$.current?.setActiveEvent(W.data.current.event),f.current=W.data.current.event},_=(p)=>{let W=cf(p,f.current);if(W){let{activeEvent:B,updates:R}=W;K(B,R)}f.current=null,$.current?.setActiveEvent(null)},L=(p)=>{f.current=null};if(z)return P;return nf(J1,{children:[nf(e2,{collisionDetection:f1,onDragCancel:L,onDragEnd:_,onDragStart:A,sensors:G,children:[P,af(uf,{ref:$})]}),af(LP,{eventTitle:q.event?.title||"",isOpen:q.isOpen,onClose:O,onConfirm:N,operationType:"edit"})]})}import{useEffect as h1,useMemo as C1,useState as E0}from"react";import*as xP from"@radix-ui/react-checkbox";import{CheckIcon as X1}from"lucide-react";import{jsx as Yf}from"react/jsx-runtime";function T0({className:P,...f}){return Yf(xP.Root,{className:U("peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",P),"data-slot":"checkbox",...f,children:Yf(xP.Indicator,{className:"flex items-center justify-center text-current transition-none","data-slot":"checkbox-indicator",children:Yf(X1,{className:"size-3.5"})})})}import{PopoverClose as p1}from"@radix-ui/react-popover";import{Calendar as U1}from"lucide-react";import{useEffect as G1,useRef as L1,useState as A1}from"react";import{ChevronDownIcon as q1,ChevronLeftIcon as Q1,ChevronRightIcon as Y1}from"lucide-react";import*as vP from"react";import{DayPicker as _1,getDefaultClassNames as tf}from"react-day-picker";import{jsx as k0}from"react/jsx-runtime";function sf({className:P,classNames:f,showOutsideDays:$=!0,captionLayout:Z="label",buttonVariant:X="ghost",formatters:z,components:q,...Q}){let J=tf();return k0(_1,{captionLayout:Z,className:U("bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,P),classNames:{root:U("w-fit",J.root),months:U("flex gap-4 flex-col md:flex-row relative",J.months),month:U("flex flex-col w-full gap-4",J.month),nav:U("flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",J.nav),button_previous:U(kP({variant:X}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",J.button_previous),button_next:U(kP({variant:X}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",J.button_next),month_caption:U("flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)",J.month_caption),dropdowns:U("w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5",J.dropdowns),dropdown_root:U("relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md",J.dropdown_root),dropdown:U("absolute bg-popover inset-0 opacity-0",J.dropdown),caption_label:U("select-none font-medium",Z==="label"?"text-sm":"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5",J.caption_label),table:"w-full border-collapse",weekdays:U("flex",J.weekdays),weekday:U("text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none",J.weekday),week:U("flex w-full mt-2",J.week),week_number_header:U("select-none w-(--cell-size)",J.week_number_header),week_number:U("text-[0.8rem] select-none text-muted-foreground",J.week_number),day:U("relative w-full h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none",Q.showWeekNumber?"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md":"[&:first-child[data-selected=true]_button]:rounded-l-md",J.day),range_start:U("rounded-l-md bg-accent",J.range_start),range_middle:U("rounded-none",J.range_middle),range_end:U("rounded-r-md bg-accent",J.range_end),today:U("bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",J.today),outside:U("text-muted-foreground aria-selected:text-muted-foreground",J.outside),disabled:U("text-muted-foreground opacity-50",J.disabled),hidden:U("invisible",J.hidden),...f},components:{Root:({className:Y,rootRef:G,...K})=>{return k0("div",{className:U(Y),"data-slot":"calendar",ref:G,...K})},Chevron:({className:Y,orientation:G,...K})=>{if(G==="left")return k0(Q1,{className:U("size-4",Y),...K});if(G==="right")return k0(Y1,{className:U("size-4",Y),...K});return k0(q1,{className:U("size-4",Y),...K})},DayButton:K1,WeekNumber:({children:Y,...G})=>{return k0("td",{...G,children:k0("div",{className:"flex size-(--cell-size) items-center justify-center text-center",children:Y})})},...q},formatters:{formatMonthDropdown:(Y)=>Y.toLocaleString("default",{month:"short"}),...z},showOutsideDays:$,...Q})}function K1({className:P,day:f,modifiers:$,...Z}){let X=tf(),z=vP.useRef(null);return vP.useEffect(()=>{if($.focused)z.current?.focus()},[$.focused]),k0(g,{className:U("data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70",X.day,P),"data-day":f.date.toLocaleDateString(),"data-range-end":$.range_end,"data-range-middle":$.range_middle,"data-range-start":$.range_start,"data-selected-single":$.selected&&!$.range_start&&!$.range_end&&!$.range_middle,ref:z,size:"icon",variant:"ghost",...Z})}import*as R0 from"@radix-ui/react-popover";import{jsx as oP}from"react/jsx-runtime";function g0({...P}){return oP(R0.Root,{"data-slot":"popover",...P})}function h0({...P}){return oP(R0.Trigger,{"data-slot":"popover-trigger",...P})}function C0({className:P,align:f="center",sideOffset:$=4,...Z}){return oP(R0.Portal,{children:oP(R0.Content,{align:f,className:U("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",P),"data-slot":"popover-content",sideOffset:$,...Z})})}import{jsx as XP,jsxs as _f}from"react/jsx-runtime";function AP({date:P,closeOnSelect:f,onChange:$,label:Z="Pick a date",className:X,disabled:z}){let q=L1(null),[Q,J]=A1(P);G1(()=>{J(P)},[P]);let Y=(G)=>{if(J(G),f)q.current?.click();$?.(G)};return XP("div",{className:X,children:_f(g0,{children:[XP(h0,{asChild:!0,children:_f(g,{className:U("data-[empty=true]:text-muted-foreground w-full justify-start text-left font-normal"),"data-empty":!P,variant:"outline",children:[XP(U1,{}),Q?V(Q).format("MMM D, YYYY"):XP("span",{children:Z})]})}),_f(C0,{align:"start",className:"w-auto p-0",children:[XP(p1,{ref:q}),XP(sf,{captionLayout:"dropdown",defaultMonth:Q,disabled:z,mode:"single",onSelect:Y,selected:Q})]})]})})}import{jsx as W1}from"react/jsx-runtime";function S0({className:P,type:f,...$}){return W1("input",{className:U("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",P),"data-slot":"input",type:f,...$})}import*as ef from"@radix-ui/react-label";import{jsx as N1}from"react/jsx-runtime";function a({className:P,...f}){return N1(ef.Root,{className:U("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",P),"data-slot":"label",...f})}import*as F0 from"@radix-ui/react-scroll-area";import{jsx as WP,jsxs as O1}from"react/jsx-runtime";function V0({className:P,children:f,viewPortProps:$,...Z}){return O1(F0.Root,{className:U("relative",P),"data-slot":"scroll-area",...Z,children:[WP(F0.Viewport,{...$,className:U("focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",$?.className),"data-slot":"scroll-area-viewport",children:f}),WP(I0,{}),WP(F0.Corner,{})]})}function I0({className:P,orientation:f="vertical",...$}){return WP(F0.ScrollAreaScrollbar,{className:U("flex touch-none p-px transition-colors select-none",f==="vertical"&&"h-full w-2.5 border-l border-l-transparent",f==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent",P),"data-slot":"scroll-area-scrollbar",orientation:f,...$,children:WP(F0.ScrollAreaThumb,{className:"bg-border relative flex-1 rounded-full","data-slot":"scroll-area-thumb"})})}import{Clock as V1}from"lucide-react";import{useEffect as B1,useRef as f5,useState as Kf}from"react";import{useMemo as F1}from"react";function P5({timeFormat:P="12-hour",minTime:f="00:00",maxTime:$="23:45"}){return{timeOptions:F1(()=>{let z=[],[q,Q]=f.split(":").map(Number),[J,Y]=$.split(":").map(Number),G=q*60+Q,K=J*60+Y;for(let N=G;N<=K;N+=15){let O=Math.floor(N/60),A=N%60,_=`${O.toString().padStart(2,"0")}:${A.toString().padStart(2,"0")}`;z.push(_)}return z},[f,$]),formatTime:(z)=>{let[q,Q]=z.split(":").map(Number),J=q>=12?"PM":"AM",Y=q===0?12:q>12?q-12:q;if(P==="24-hour")return`${q.toString().padStart(2,"0")}:${Q.toString().padStart(2,"0")}`;return`${Y}:${Q.toString().padStart(2,"0")} ${J}`}}}import{jsx as D0,jsxs as pf}from"react/jsx-runtime";var M1=(P)=>{P.stopPropagation()};function Uf({value:P,onChange:f,minTime:$="00:00",maxTime:Z="23:45",timeFormat:X="12-hour",placeholder:z="Select time...",className:q,disabled:Q=!1,name:J}){let[Y,G]=Kf(!1),[K,N]=Kf(""),O=f5(null),A=f5(null),[_,L]=Kf(0),{timeOptions:p,formatTime:W}=P5({timeFormat:X,minTime:$,maxTime:Z}),B=p.filter((I)=>{return W(I).toLowerCase().includes(K.toLowerCase())}),R=(I)=>{f(I),G(!1),N("")};B1(()=>{if(Y){if(A.current)L(A.current.offsetWidth);setTimeout(()=>{O.current?.focus()},0)}},[Y]);let b=P?W(P):z;return pf(g0,{onOpenChange:G,open:Y,children:[D0(h0,{asChild:!0,children:pf(g,{"aria-controls":"time-picker-listbox","aria-expanded":Y,className:U("w-full justify-start",q),"data-testid":`time-picker-${J}`,disabled:Q,ref:A,role:"combobox",variant:"outline",children:[D0(V1,{className:"mr-2 h-4 w-4"}),b]})}),pf(C0,{align:"start",className:"p-0",style:{width:_},children:[D0("div",{className:"p-2 border-b",children:D0(S0,{className:"h-8",onChange:(I)=>N(I.target.value),placeholder:"Search time...",ref:O,value:K})}),D0(V0,{className:"h-[200px]",onWheel:M1,children:D0("div",{className:"p-1",children:B.length===0?D0("div",{className:"py-6 text-center text-sm text-muted-foreground",children:"N/A"}):B.map((I)=>{let T=W(I);return D0("button",{className:U("relative flex w-full cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground",I===P&&"bg-accent text-accent-foreground"),onClick:()=>R(I),type:"button",children:T},I)})})})]})]})}var Gf=(P,f)=>{if(!f)return!0;let $=!1;return qP(f,{date:P,onMatch:()=>{$=!0}}),$},$5=({date:P,hour:f,minute:$=0,businessHours:Z})=>{if(!Z)return!0;if(f===void 0)return Gf(P,Z);let X=!1,z=f*60+$;return qP(Z,{date:P,onMatch:(q)=>{let Q=q.startTime??9,J=q.endTime??17,Y=Q*60,G=J*60;if(z>=Y&&z<G)X=!0}}),X},qP=(P,f)=>{let{date:$,onMatch:Z}=f;if(!P)return;let X=Array.isArray(P)?P:[P];for(let z of X)if($&&z.daysOfWeek){let q=$.day();if(z.daysOfWeek.some((Q)=>H0[Q]===q))Z(z)}else Z(z)},iP=(P)=>{let{allDates:f,businessHours:$,resourceBusinessHours:Z=[],hideNonBusinessHours:X}=P,z=24,q=0,Q=!1,J=(Y)=>{Q=!0,z=Math.min(z,Y.startTime??9),q=Math.max(q,Y.endTime??17)};for(let Y of f){qP($,{date:Y,onMatch:J});for(let G of Z)qP(G,{date:Y,onMatch:J})}if(!Q&&X){qP($,{onMatch:J});for(let Y of Z)qP(Y,{onMatch:J});if(!Q)z=9,q=17,Q=!0}return{minStart:z,maxEnd:q,hasBusinessHours:Q}};var Lf=(P,f,$)=>{let[Z,X]=f.split(":").map(Number),z=V(P).hour(Z).minute(X);return $?z.hour(0).minute(0):z},z5=(P,f,$)=>{let[Z,X]=f.split(":").map(Number),z=V(P).hour(Z).minute(X);return $?z.hour(23).minute(59):z},Af=(P,f)=>{if(!f)return{min:"00:00",max:"23:59"};let $=V(P),{minStart:Z,maxEnd:X,hasBusinessHours:z}=iP({allDates:[$],businessHours:f,hideNonBusinessHours:!1});if(!z)return{min:"00:00",max:"23:59"};return{min:`${Z.toString().padStart(2,"0")}:00`,max:`${(X-1).toString().padStart(2,"0")}:45`}};import{useEffect as w1,useMemo as m1,useState as G5}from"react";import{RRule as X0}from"rrule";import{jsx as cP}from"react/jsx-runtime";function Z5({className:P,...f}){return cP("div",{className:U("text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm",P),"data-slot":"card",...f})}function J5({className:P,...f}){return cP("div",{className:U("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 p-4 pb-0 has-data-[slot=card-action]:grid-cols-[1fr_auto]",P),"data-slot":"card-header",...f})}function X5({className:P,...f}){return cP("div",{className:U("leading-none font-semibold",P),"data-slot":"card-title",...f})}function q5({className:P,...f}){return cP("div",{className:U("p-4 pt-0",P),"data-slot":"card-content",...f})}import*as E from"@radix-ui/react-select";import{CheckIcon as R1,ChevronDownIcon as Q5,ChevronUpIcon as S1}from"lucide-react";import{jsx as f0,jsxs as Wf}from"react/jsx-runtime";function Y5({...P}){return f0(E.Root,{"data-slot":"select",...P})}function _5({...P}){return f0(E.Value,{"data-slot":"select-value",...P})}function K5({className:P,size:f="default",children:$,...Z}){return Wf(E.Trigger,{className:U("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",P),"data-size":f,"data-slot":"select-trigger",...Z,children:[$,f0(E.Icon,{asChild:!0,children:f0(Q5,{className:"size-4 opacity-50"})})]})}function p5({className:P,children:f,position:$="popper",align:Z="center",...X}){return f0(E.Portal,{children:Wf(E.Content,{align:Z,className:U("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",$==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",P),"data-slot":"select-content",position:$,...X,children:[f0(I1,{}),f0(E.Viewport,{className:U("p-1",$==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:f}),f0(b1,{})]})})}function U5({className:P,children:f,...$}){return Wf(E.Item,{className:U("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",P),"data-slot":"select-item",...$,children:[f0("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:f0(E.ItemIndicator,{children:f0(R1,{className:"size-4"})})}),f0(E.ItemText,{children:f})]})}function I1({className:P,...f}){return f0(E.ScrollUpButton,{className:U("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-up-button",...f,children:f0(S1,{className:"size-4"})})}function b1({className:P,...f}){return f0(E.ScrollDownButton,{className:U("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-down-button",...f,children:f0(Q5,{className:"size-4"})})}import{jsx as y,jsxs as J0}from"react/jsx-runtime";var Nf={DAILY:X0.DAILY,WEEKLY:X0.WEEKLY,MONTHLY:X0.MONTHLY,YEARLY:X0.YEARLY},H1=Object.fromEntries(Object.entries(Nf).map(([P,f])=>[f,P])),L5=[X0.SU,X0.MO,X0.TU,X0.WE,X0.TH,X0.FR,X0.SA],T1=["sun","mon","tue","wed","thu","fri","sat"],A5=(P)=>Math.max(1,Number.parseInt(P,10)||1),k1=(P,f)=>{if(!P)return f("customRecurrence");try{let $=new X0(P).toText();return $&&!$.toLowerCase().includes("error")?$.charAt(0).toUpperCase()+$.slice(1):f("customRecurrence")}catch{return f("customRecurrence")}},W5=({value:P,onChange:f})=>{let{t:$}=F((_)=>({t:_.t})),[Z,X]=G5(!!P),[z,q]=G5(()=>P||null),Q=m1(()=>T1.map((_,L)=>({value:L5[L],label:$(_)})),[$]);w1(()=>{if(X(!!P),P)q(P)},[P]);let J=(_)=>{if(!z)return;let L={...z,..._};q(L),f(Z?L:null)},Y=(_)=>{if(X(_),!_){f(null);return}if(z){f(z);return}let L={freq:X0.DAILY,interval:1};q(L),f(L)},G=(_)=>{let L=z?.byweekday||[],p=L5[_],W=L.includes(p)?L.filter((B)=>B!==p):[...L,p];J({byweekday:W.length?W:void 0})},K=(_)=>{let L={count:void 0,until:void 0};if(_==="count")L.count=z?.count||1;if(_==="until")L.until=z?.until||V().add(1,"month").endOf("day").toDate();J(L)},N=z?.until?"until":z?.count?"count":"never",O=H1[z?.freq??X0.DAILY]||"DAILY",A=Array.isArray(z?.byweekday)?z.byweekday:z?.byweekday?[z.byweekday]:[];return J0(Z5,{"data-testid":"recurrence-editor",children:[J0(J5,{className:"pb-3",children:[J0("div",{className:"flex items-center space-x-2",children:[y(T0,{checked:Z,"data-testid":"toggle-recurrence",id:"recurring",onCheckedChange:Y}),y(X5,{className:"text-sm",children:$("repeat")})]}),Z&&P&&y("p",{className:"text-xs text-muted-foreground",children:k1(P,$)})]}),Z&&y(q5,{className:"pt-0",children:J0("div",{className:"space-y-4",children:[J0("div",{className:"grid grid-cols-2 gap-4",children:[J0("div",{children:[y(a,{className:"text-xs",htmlFor:"frequency",children:$("repeats")}),J0(Y5,{onValueChange:(_)=>J({freq:Nf[_]}),value:O,children:[y(K5,{className:"h-8","data-testid":"frequency-select",id:"frequency",children:y(_5,{})}),y(p5,{children:Object.keys(Nf).map((_)=>y(U5,{value:_,children:$(_.toLowerCase())},_))})]})]}),J0("div",{children:[y(a,{className:"text-xs",htmlFor:"interval",children:$("every")}),y(S0,{className:"h-8",id:"interval",min:"1",onChange:(_)=>J({interval:A5(_.target.value)}),type:"number",value:z?.interval||1})]})]}),z?.freq===X0.WEEKLY&&J0("div",{children:[y(a,{className:"text-xs",children:$("repeatOn")}),y("div",{className:"flex flex-wrap gap-1 mt-1",children:Q.map((_,L)=>J0("div",{className:"flex items-center space-x-1",children:[y(T0,{checked:A.includes(_.value),id:`day-${L}`,onCheckedChange:()=>G(L)}),y(a,{className:"text-xs cursor-pointer",htmlFor:`day-${L}`,children:_.label})]},_.label))})]}),J0("div",{children:[y(a,{className:"text-xs",children:$("ends")}),J0("div",{className:"space-y-2 mt-1",children:[J0("div",{className:"flex items-center space-x-2",children:[y(T0,{checked:N==="never",id:"never",onCheckedChange:()=>K("never")}),y(a,{className:"text-xs",htmlFor:"never",children:$("never")})]}),J0("div",{className:"flex items-center space-x-2",children:[y(T0,{checked:N==="count",id:"after",onCheckedChange:()=>K("count")}),y(a,{className:"text-xs",htmlFor:"after",children:$("after")}),N==="count"&&y(S0,{className:"h-6 w-16 text-xs","data-testid":"count-input",min:"1",onChange:(_)=>J({count:A5(_.target.value)}),type:"number",value:z?.count||1}),y("span",{className:"text-xs",children:$("occurrences")})]}),J0("div",{className:"flex items-center space-x-2",children:[y(T0,{checked:N==="until",id:"on",onCheckedChange:()=>K("until")}),y(a,{className:"text-xs",htmlFor:"on",children:$("on")}),N==="until"&&y(AP,{className:"h-6",date:z?.until,onChange:(_)=>J({until:_?V(_).endOf("day").toDate():void 0})})]})]})]})]})})]})};import{useCallback as lP,useState as g1}from"react";function N5(P){let{updateRecurringEvent:f,deleteRecurringEvent:$}=F((Y)=>({updateRecurringEvent:Y.updateRecurringEvent,deleteRecurringEvent:Y.deleteRecurringEvent})),[Z,X]=g1({isOpen:!1,operationType:"edit",event:null}),z=lP((Y,G)=>{X({isOpen:!0,operationType:"edit",event:Y,updates:G,onConfirm:(K)=>{f(Y,G,{scope:K,eventDate:Y.start})}})},[f]),q=lP((Y)=>{X({isOpen:!0,operationType:"delete",event:Y,onConfirm:(G)=>{$(Y,{scope:G,eventDate:Y.start})}})},[$]),Q=lP(()=>{X({isOpen:!1,operationType:"edit",event:null})},[]),J=lP((Y)=>{if(Z.onConfirm)Z.onConfirm(Y);Q(),P?.()},[Z,Q,P]);return{dialogState:Z,openEditDialog:z,openDeleteDialog:q,closeDialog:Q,handleConfirm:J}}import{jsx as x,jsxs as $0,Fragment as D1}from"react/jsx-runtime";var O5=[{value:"bg-blue-100 text-blue-800",label:"Blue"},{value:"bg-green-100 text-green-800",label:"Green"},{value:"bg-purple-100 text-purple-800",label:"Purple"},{value:"bg-red-100 text-red-800",label:"Red"},{value:"bg-yellow-100 text-yellow-800",label:"Yellow"},{value:"bg-pink-100 text-pink-800",label:"Pink"},{value:"bg-indigo-100 text-indigo-800",label:"Indigo"},{value:"bg-amber-100 text-amber-800",label:"Amber"},{value:"bg-emerald-100 text-emerald-800",label:"Emerald"},{value:"bg-sky-100 text-sky-800",label:"Sky"},{value:"bg-violet-100 text-violet-800",label:"Violet"},{value:"bg-rose-100 text-rose-800",label:"Rose"},{value:"bg-teal-100 text-teal-800",label:"Teal"},{value:"bg-orange-100 text-orange-800",label:"Orange"}],F5=({selectedEvent:P,onClose:f,onUpdate:$,onDelete:Z,onAdd:X})=>{let{dialogState:z,openEditDialog:q,openDeleteDialog:Q,closeDialog:J,handleConfirm:Y}=N5(f),{findParentRecurringEvent:G,t:K,businessHours:N,timeFormat:O,getResourceById:A}=F((w)=>({findParentRecurringEvent:w.findParentRecurringEvent,t:w.t,businessHours:w.businessHours,timeFormat:w.timeFormat,getResourceById:w.getResourceById})),_=P?.start??V(),L=P?.end??V().add(1,"hour"),p=P?G(P):null,[W,B]=E0(_.toDate()),[R,b]=E0(L.toDate()),[I,T]=E0(P?.allDay||!1),[k,h]=E0(P?.color||O5[0].value),[C,v]=E0(_.format("HH:mm")),[c,l]=E0(L.format("HH:mm")),[o,p0]=E0({title:P?.title||"",description:P?.description||"",location:P?.location||""}),[Q0,S]=E0(()=>{return P?.rrule||p?.rrule||null}),u=(w)=>{if(B(w),w&&V(w).isAfter(V(R)))b(w)},U0=(w)=>{if(b(w),w&&V(w).isBefore(V(W)))B(w)},t=(w)=>{if(v(w),V(W).isSame(V(R),"day")&&w>c)l(w)},A0=(w)=>{if(l(w),V(W).isSame(V(R),"day")&&w<C)v(w)},r=(w)=>{let{name:M,value:m}=w.target;p0((j)=>({...j,[M]:m}))};h1(()=>{if(I)l("23:59")},[I]);let i=(w)=>{w.preventDefault();let M=Lf(W,C,I),m=z5(R,c,I),j={id:P?.id||V().format("YYYYMMDDHHmmss"),title:o.title,start:M,end:m,resourceId:P?.resourceId,description:o.description,location:o.location,allDay:I,color:k,rrule:Q0||void 0};if(P?.id&&PP(P)){q(P,{title:o.title,start:M,end:m,description:o.description,location:o.location,allDay:I,color:k,rrule:Q0||void 0});return}if(P?.id)$?.(j);else X?.(j);f()},t0=()=>{if(P?.id){if(PP(P)){Q(P);return}Z?.(P),f()}},s0=(w)=>{if(!w){S(null);return}let M=Lf(W,C,I);S({...w,dtstart:M.toDate()})},M0=C1(()=>{let w=P?.resourceId;if(w&&A){let M=A(w);if(M?.businessHours)return M.businessHours}return N},[P?.resourceId,A,N]),l0=M0?(w)=>!Gf(V(w),M0):void 0,u0=Af(W,M0),d0=Af(R,M0);return $0(D1,{children:[$0("form",{className:"flex flex-col flex-1 min-h-0",onSubmit:i,children:[x(V0,{className:"flex-1 min-h-0",children:$0("div",{className:"grid gap-3 sm:gap-4 p-1",children:[$0("div",{className:"grid gap-2",children:[x(a,{className:"text-xs sm:text-sm",htmlFor:"title",children:K("title")}),x(S0,{className:"h-8 text-sm sm:h-9",id:"title",name:"title",onChange:r,placeholder:K("eventTitlePlaceholder"),required:!0,value:o.title})]}),$0("div",{className:"grid gap-1 sm:gap-2",children:[x(a,{className:"text-xs sm:text-sm",htmlFor:"description",children:K("description")}),x(S0,{className:"h-8 text-sm sm:h-9",id:"description",name:"description",onChange:r,placeholder:K("eventDescriptionPlaceholder"),value:o.description})]}),$0("div",{className:"flex items-center space-x-2",children:[x(T0,{checked:I,id:"allDay",onCheckedChange:(w)=>T(w===!0)}),x(a,{className:"text-xs sm:text-sm",htmlFor:"allDay",children:K("allDay")})]}),$0("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[$0("div",{children:[x(a,{className:"text-xs sm:text-sm",children:K("startDate")}),x(AP,{className:"mt-1",closeOnSelect:!0,date:W,disabled:l0,onChange:u})]}),$0("div",{children:[x(a,{className:"text-xs sm:text-sm",children:K("endDate")}),x(AP,{className:"mt-1",closeOnSelect:!0,date:R,disabled:l0,onChange:U0})]})]}),!I&&$0("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[$0("div",{children:[x(a,{className:"text-xs sm:text-sm",children:K("startTime")}),x(Uf,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:u0.max,minTime:u0.min,name:"start-time",onChange:t,timeFormat:O,value:C})]}),$0("div",{children:[x(a,{className:"text-xs sm:text-sm",children:K("endTime")}),x(Uf,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:d0.max,minTime:d0.min,name:"end-time",onChange:A0,timeFormat:O,value:c})]})]}),$0("div",{className:"grid gap-1 sm:gap-2",children:[x(a,{className:"text-xs sm:text-sm",children:K("color")}),x("div",{className:"flex flex-wrap gap-2",children:O5.map((w)=>x(g,{"aria-label":w.label,className:U(`${w.value} h-6 w-6 rounded-full sm:h-8 sm:w-8`,k===w.value&&"ring-2 ring-black ring-offset-1 sm:ring-offset-2"),onClick:()=>h(w.value),type:"button",variant:"ghost"},w.value))})]}),$0("div",{className:"grid gap-1 sm:gap-2",children:[x(a,{className:"text-xs sm:text-sm",htmlFor:"location",children:K("location")}),x(S0,{className:"h-8 text-sm sm:h-9",id:"location",name:"location",onChange:r,placeholder:K("eventLocationPlaceholder"),value:o.location})]}),x(W5,{onChange:s0,value:Q0})]})}),$0(gP,{className:"mt-4 shrink-0 flex flex-col-reverse gap-2 sm:flex-row sm:gap-0",children:[P?.id&&x(g,{className:"w-full sm:mr-auto sm:w-auto",onClick:t0,size:"sm",type:"button",variant:"destructive",children:K("delete")}),$0("div",{className:"flex w-full gap-2 sm:w-auto",children:[x(g,{className:"flex-1 sm:flex-none",onClick:f,size:"sm",type:"button",variant:"outline",children:K("cancel")}),x(g,{className:"flex-1 sm:flex-none",size:"sm",type:"submit",children:P?.id?K("update"):K("create")})]})]})]}),x(LP,{eventTitle:z.event?.title||"",isOpen:z.isOpen,onClose:J,onConfirm:Y,operationType:z.operationType})]})};import{jsx as uP,jsxs as V5}from"react/jsx-runtime";var dP=()=>{let{t:P,selectedEvent:f,isEventFormOpen:$,closeEventForm:Z,addEvent:X,updateEvent:z,deleteEvent:q,renderEventForm:Q}=F((K)=>({t:K.t,selectedEvent:K.selectedEvent,isEventFormOpen:K.isEventFormOpen,closeEventForm:K.closeEventForm,addEvent:K.addEvent,updateEvent:K.updateEvent,deleteEvent:K.deleteEvent,renderEventForm:K.renderEventForm})),G={open:$,onClose:Z,selectedEvent:f,onAdd:X,onUpdate:(K)=>{z(K.id,K)},onDelete:(K)=>{q(K.id)}};if(Q)return Q(G);return uP(fP,{onOpenChange:Z,open:$,children:V5($P,{className:"flex flex-col h-[90vh] w-[90vw] max-w-[500px] p-4 sm:p-6 overflow-hidden gap-0",children:[V5(zP,{className:"mb-2 sm:mb-4 shrink-0",children:[uP(ZP,{className:"text-base sm:text-lg",children:f?.id?P("editEvent"):P("createEvent")}),uP(hP,{className:"text-xs sm:text-sm",children:f?.id?P("editEventDetails"):P("addNewEvent")})]}),uP(F5,{...G})]})})};import{Calendar as e1,Download as P4,Menu as f4,Plus as $4}from"lucide-react";import{useState as z4}from"react";import{RRule as E1}from"rrule";var Of=`\r
2
- `,j1=["BEGIN:VTIMEZONE","TZID:UTC","BEGIN:STANDARD","DTSTART:19700101T000000","TZNAME:UTC","TZOFFSETFROM:+0000","TZOFFSETTO:+0000","END:STANDARD","END:VTIMEZONE"].join(Of),aP=(P)=>{return P.replaceAll("\\","\\\\").replaceAll(";","\\;").replaceAll(",","\\,").replaceAll(`
3
- `,"\\n").replaceAll("\r","")},rP=(P,f=!1)=>{return f?P.format("YYYYMMDD"):P.utc().format("YYYYMMDD[T]HHmmss[Z]")},B5=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},y1=(P)=>{try{return new E1(P).toString().split(`
4
- `).find(($)=>$.startsWith("RRULE:"))||""}catch{return""}},x1=(P)=>{let f=V().utc().format("YYYYMMDD[T]HHmmss[Z]"),$=P.allDay?";VALUE=DATE":"",Z=P.rrule?y1(P.rrule):"",X=P.exdates?.length?P.exdates.map((Q)=>rP(V(Q),P.allDay)).join(","):null,z=P.recurrenceId?rP(V(P.recurrenceId),P.allDay):null;return["BEGIN:VEVENT",`UID:${B5(P)}`,`DTSTART${$}:${rP(P.start,P.allDay)}`,`DTEND${$}:${rP(P.end,P.allDay)}`,`SUMMARY:${aP(P.title)}`,P.description&&`DESCRIPTION:${aP(P.description)}`,P.location&&`LOCATION:${aP(P.location)}`,Z,X&&`EXDATE:${X}`,z&&`RECURRENCE-ID:${z}`,`DTSTAMP:${f}`,`CREATED:${f}`,`LAST-MODIFIED:${f}`,"STATUS:CONFIRMED","SEQUENCE:0","TRANSP:OPAQUE","END:VEVENT"].filter(Boolean).join(Of)},v1=(P)=>{let f=new Set;return P.filter(($)=>{let Z=B5($),X=$.rrule&&!$.recurrenceId,z=$.recurrenceId&&!$.rrule;if(X)return f.add(Z),!0;if(z)return!0;return!$.rrule&&!$.recurrenceId&&!f.has(Z)})},o1=(P,f="ilamy Calendar")=>{let $=aP(f),Z=v1(P).map(x1);return["BEGIN:VCALENDAR","VERSION:2.0","PRODID:-//ilamy//ilamy Calendar//EN","CALSCALE:GREGORIAN","METHOD:PUBLISH",`X-WR-CALNAME:${$}`,`X-WR-CALDESC:Exported from ${$}`,j1,...Z,"END:VCALENDAR"].join(Of)},M5=(P,f="calendar.ics",$="ilamy Calendar")=>{let Z=new Blob([o1(P,$)],{type:"text/calendar;charset=utf-8"}),X=URL.createObjectURL(Z),z=f.endsWith(".ics")?f:`${f}.ics`,q=document.createElement("a");q.href=X,q.download=z,document.body.append(q),q.click(),q.remove(),URL.revokeObjectURL(X)};import{ChevronDown as i1}from"lucide-react";import{useMemo as c1,useState as l1}from"react";import{jsx as s,jsxs as tP,Fragment as nP}from"react/jsx-runtime";var u1=["january","february","march","april","may","june","july","august","september","october","november","december"],d1=()=>{let{currentDate:P,view:f,setCurrentDate:$,t:Z,firstDayOfWeek:X}=F((p)=>({currentDate:p.currentDate,view:p.view,setCurrentDate:p.setCurrentDate,t:p.t,firstDayOfWeek:p.firstDayOfWeek})),[z,q]=l1(null),Q=c1(()=>u1.map((p)=>Z(p)),[Z]),J=P.year(),Y=Array.from({length:11},(p,W)=>J-5+W),G=Z0(P,X),K=(p)=>{$(p),q(null)},N=()=>s(nP,{children:Q.map((p,W)=>s(g,{className:U("justify-start font-normal",P.month()===W&&"bg-primary/10"),onClick:()=>K(P.month(W)),variant:"ghost",children:p},p))}),O=()=>s(nP,{children:Y.map((p)=>s(g,{className:U("justify-start font-normal",P.year()===p&&"bg-primary/10"),onClick:()=>K(P.year(p)),variant:"ghost",children:p},p))}),A=()=>s(nP,{children:Array.from({length:7},(p,W)=>{let B=P.subtract(3,"week").add(W,"week"),R=Z0(B,X),b=R[0],I=R[6],T=B.isSame(P,"week"),k=b.month()!==I.month();return s(g,{className:U("justify-start font-normal",T&&"bg-primary/10"),onClick:()=>K(b),variant:"ghost",children:tP("div",{className:"flex w-full items-center justify-between",children:[s("span",{children:`${b.format("MMM D")} - ${I.format("D")}`}),k&&s("span",{className:"ml-0.5 text-xs opacity-70",children:`${b.format("MMM")}-${I.format("MMM")}`})]})},b.format("YYYY-MM-DD"))})}),_=()=>{let p=P.startOf("month"),W=P.daysInMonth();return s(nP,{children:Array.from({length:W},(B,R)=>{let b=p.date(R+1),I=b.isSame(P,"day"),T=b.isSame(V(),"day");return s(g,{className:U("justify-start font-normal",I&&"bg-primary/10"),onClick:()=>K(b),variant:"ghost",children:tP("div",{className:"flex w-full items-center justify-between",children:[s("span",{children:b.format("dddd, MMM D")}),T&&s("span",{className:"bg-primary text-primary-foreground rounded-sm px-1! text-xs",children:Z("today")})]})},b.format("YYYY-MM-DD"))})})};return[{id:"month",hidden:f==="year",title:P.format("MMMM"),render:N},{id:"year",hidden:!1,title:P.format("YYYY"),render:O},{id:"week",hidden:f!=="week",title:`${G[0].format("MMM D")} - ${G[6].format("MMM D")}`,render:A},{id:"day",hidden:f!=="day",title:P.format("dddd, D"),render:_}].filter((p)=>!p.hidden).map((p)=>tP(g0,{onOpenChange:(W)=>q(W?p.id:null),open:z===p.id,children:[s(h0,{asChild:!0,children:tP(g,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",variant:"ghost",children:[s(D,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",transitionKey:`${p.id}-${P.format("YYYY-MM-DD")}`,children:p.title}),s(i1,{className:"h-4 w-4"})]})}),s(C0,{className:"w-40 p-0",children:s("div",{className:"flex max-h-60 flex-col overflow-auto",children:p.render()})})]},p.id))},R5=d1;import{ChevronLeft as r1,ChevronRight as a1}from"lucide-react";import{jsx as QP,jsxs as s1}from"react/jsx-runtime";var n1=["day","week","month","year"],t1=({currentView:P,onChange:f,variant:$="default",size:Z="sm",className:X,onToday:z,onNext:q,onPrevious:Q})=>{let{t:J,resources:Y}=F((A)=>({t:A.t,resources:A.resources})),G=$==="grid",K=Y&&Y.length>0,N=(A)=>{return U(G?"w-full":"",P===A&&"bg-primary/80")},O=(A)=>{return P===A?"default":"outline"};return s1("div",{className:U(G?"grid grid-cols-2 gap-2":"flex gap-1",X),children:[QP(g,{onClick:Q,size:Z,variant:"outline",children:QP(r1,{className:"h-4 w-4"})}),QP(g,{onClick:q,size:Z,variant:"outline",children:QP(a1,{className:"h-4 w-4"})}),n1.map((A)=>{if(K&&A==="year")return null;return QP(g,{className:N(A),onClick:()=>f(A),size:Z,variant:O(A),children:J(A)},A)}),QP(g,{onClick:z,size:Z,variant:"outline",children:J("today")})]})},Ff=t1;import{jsx as n,jsxs as b0}from"react/jsx-runtime";var Z4=({className:P=""})=>{let{view:f,setView:$,nextPeriod:Z,prevPeriod:X,today:z,openEventForm:q,headerComponent:Q,headerClassName:J,rawEvents:Y,t:G}=F((p)=>({view:p.view,setView:p.setView,nextPeriod:p.nextPeriod,prevPeriod:p.prevPeriod,today:p.today,openEventForm:p.openEventForm,headerComponent:p.headerComponent,headerClassName:p.headerClassName,rawEvents:p.rawEvents,t:p.t})),[K,N]=z4(!1),O=()=>N(!1),A=()=>{let p=`ilamy-calendar-${new Date().toISOString().split("T")[0]}.ics`;M5(Y,p,"ilamy Calendar"),O()},_=()=>b0(g,{className:"flex items-center gap-1",onClick:()=>q(),size:"sm",variant:"default",children:[n($4,{className:"h-4 w-4"}),n("span",{className:"hidden @4xl:inline",children:G("new")})]}),L=({fullWidth:p=!1})=>b0(g,{className:U("flex items-center gap-1",p&&"w-full gap-2"),onClick:A,size:"sm",variant:"outline",children:[n(P4,{className:"h-4 w-4"}),p?`${G("export")} Calendar (.ics)`:n("span",{className:"hidden @4xl/base-header:inline",children:G("export")})]});if(Q)return Q;return n("div",{className:"@container/base-header w-full","data-testid":"calendar-header",children:b0("div",{className:U("flex justify-center @2xl/base-header:justify-between flex-wrap items-center gap-2",P,J),children:[b0("div",{className:"flex flex-wrap items-center justify-center gap-1 @2xl/base-header:justify-start",children:[n(e1,{className:"h-5 w-5"}),n(R5,{})]}),b0("div",{className:"flex flex-wrap justify-start @xl/base-header:justify-center gap-1 @4xl/base-header:justify-end overflow-x-auto",children:[b0("div",{className:"hidden @md/base-header:flex items-center justify-start gap-1",children:[n(Ff,{className:"justify-end",currentView:f,onChange:$,onNext:Z,onPrevious:X,onToday:z,variant:"default"}),n(_,{}),n(L,{})]}),b0("div",{className:"flex items-center justify-end gap-1 @md/base-header:hidden",children:[n(_,{}),b0(g0,{onOpenChange:N,open:K,children:[n(h0,{asChild:!0,children:n(g,{size:"sm",variant:"outline",children:n(f4,{className:"h-4 w-4"})})}),n(C0,{align:"end",className:"w-[240px] p-2",children:b0("div",{className:"space-y-2",children:[n(Ff,{currentView:f,onChange:(p)=>{$(p),O()},onNext:()=>{Z(),O()},onPrevious:()=>{X(),O()},onToday:()=>{z(),O()},variant:"grid"}),n("div",{className:"pt-2 border-t",children:n(L,{fullWidth:!0})})]})})]})]})]})]})})},NP=Z4;import{memo as I4}from"react";import{memo as F4,useCallback as V4}from"react";import L4,{memo as A4,useMemo as m5}from"react";import{jsx as J4}from"react/jsx-runtime";var S5=({date:P,locale:f="en",className:$})=>{let Z=P.isSame(V(),"day");return J4("div",{className:U("flex h-5 w-5 items-center justify-center rounded-full text-xs shrink-0",Z&&"bg-primary text-primary-foreground font-medium",$),"data-testid":Z?"day-number-today":`day-number-${P.format("D")}`,children:Intl.DateTimeFormat(f,{day:"numeric"}).format(P.toDate())})};import{useImperativeHandle as K4,useState as I5}from"react";import{useDraggable as X4}from"@dnd-kit/core";import{memo as q4}from"react";import{jsx as OP,jsxs as _4}from"react/jsx-runtime";var Q4=(P,f)=>{if(P&&f)return"rounded-none";if(P)return"rounded-r-md rounded-l-none";if(f)return"rounded-l-md rounded-r-none";return"rounded-md"};function Y4({elementId:P,event:f,className:$,style:Z,disableDrag:X=!1}){let{onEventClick:z,renderEvent:q,disableEventClick:Q,disableDragAndDrop:J}=F(),{attributes:Y,listeners:G,setNodeRef:K,isDragging:N}=X4({id:P,data:{event:f,type:"calendar-event"},disabled:X||J}),O=()=>{let A=f,_=A.isTruncatedStart,L=A.isTruncatedEnd;return _4("div",{className:U(f.backgroundColor||"bg-blue-500",f.color||"text-white","h-full w-full px-1 border-[1.5px] border-card text-left overflow-clip relative",Q4(_,L)),style:{backgroundColor:f.backgroundColor,color:f.color},children:[_&&OP("div",{className:"absolute left-0 top-0 bottom-0 w-0.5 bg-foreground/25"}),OP("p",{className:U("text-[10px] font-semibold sm:text-xs mt-0.5",_&&"pl-1",L&&"pr-1"),children:f.title}),L&&OP("div",{className:"absolute right-0 top-0 bottom-0 w-0.5 bg-foreground/25"})]})};return OP(D,{className:U("truncate h-full w-full",X||J?Q?"cursor-default":"cursor-pointer":"cursor-grab",N&&!(X||J)&&"cursor-grabbing shadow-lg",$),layout:!0,layoutId:P,onClick:(A)=>{A.stopPropagation(),z(f)},ref:K,style:Z,transitionKey:P,...Y,...G,children:q?q(f):OP(O,{})})}var YP=q4(Y4,(P,f)=>{return P.elementId===f.elementId&&P.disableDrag===f.disableDrag&&P.className===f.className&&P.event===f.event});import{jsx as FP,jsxs as p4}from"react/jsx-runtime";var b5=({ref:P})=>{let[f,$]=I5(!1),[Z,X]=I5(null),{currentDate:z,firstDayOfWeek:q}=F();K4(P,()=>({open:()=>$(!0),close:()=>$(!1),setSelectedDayEvents:(Y)=>X(Y)}));let J=z.startOf("month").clone();while(J.day()!==q)J=J.subtract(1,"day");return FP(fP,{onOpenChange:$,open:f,children:p4($P,{className:"max-h-[80vh] max-w-md overflow-y-auto",children:[FP(zP,{children:FP(ZP,{children:Z?.day.format("MMMM D, YYYY")})}),FP("div",{className:"mt-4 space-y-3",children:Z?.events.map((Y)=>{return FP(YP,{className:"relative my-1 h-[30px]",elementId:`all-events-dialog-event-$${Y.id}`,event:Y},Y.id)})})]})})};import{useDroppable as U4}from"@dnd-kit/core";import{jsx as G4}from"react/jsx-runtime";function w5({id:P,type:f,date:$,hour:Z,minute:X,resourceId:z,allDay:q,children:Q,className:J,style:Y,"data-testid":G,disabled:K=!1}){let{onCellClick:N,disableDragAndDrop:O,disableCellClick:A,classesOverride:_,view:L}=F(),{isOver:p,setNodeRef:W}=U4({id:P,data:{type:f,date:$,hour:Z,minute:X,resourceId:z,allDay:q},disabled:O||K}),B=(R)=>{if(R.stopPropagation(),A||K)return;let b=$.hour(Z??0).minute(X??0),I=b.clone();if(Z!==void 0&&X!==void 0)I=I.hour(Z).minute(X+15);else if(Z!==void 0)I=I.hour(Z+1).minute(0);else I=I.hour(23).minute(59);N({start:b,end:I,resourceId:z,allDay:q})};return G4("div",{className:U("droppable-cell",J,p&&!O&&!K&&"bg-accent",A||K?"cursor-default":"cursor-pointer",K&&(_?.disabledCell||Df)),"data-disabled":K.toString(),"data-testid":G,"data-view":L,onClick:B,ref:W,style:Y,children:Q})}import{jsx as sP,jsxs as eP,Fragment as H5}from"react/jsx-runtime";var W4=({day:P,hour:f,minute:$,className:Z="",resourceId:X,gridType:z="day",shouldRenderEvents:q=!0,allDay:Q=!1,"data-testid":J,showDayNumber:Y=!1,children:G})=>{let K=L4.useRef(null),{dayMaxEvents:N=0,getEventsForDateRange:O,currentDate:A,t:_,getEventsForResource:L,businessHours:p,currentLocale:W,eventSpacing:B,getResourceById:R}=F(),b=m5(()=>{if(!q)return[];let S=O(P.startOf(z),P.endOf(z));if(Q)S=S.filter((u)=>u.allDay);if(X){let u=L(X)??[];return S.filter((U0)=>u.some((t)=>String(t.id)===String(U0.id)))}return S},[P,X,O,L,z,q,Q]),I=(S,u)=>{K.current?.setSelectedDayEvents({day:S,events:u}),K.current?.open()},T=P.month()===A.month(),k=b.length-N,h=k>0,C=m5(()=>{if(X&&R){let S=R(X);if(S?.businessHours)return S.businessHours}return p},[X,R,p]),v=$5({date:P,hour:z==="hour"?P.hour():void 0,businessHours:C}),c=P.format("HH"),l=P.format("mm"),o=`day-cell-${P.format("YYYY-MM-DD")}`,p0=z==="hour"?`${o}-${c}-${l}`:o,Q0=`day-cell-${P.toISOString()}${Q?"-allday":""}${X?`-resource-${X}`:""}`;return eP(H5,{children:[sP(w5,{allDay:Q,className:U("cursor-pointer overflow-clip p-1 hover:bg-accent min-h-[60px] relative border-r last:border-r-0 only:border-r border-b",Z),"data-testid":J||p0,date:P,disabled:!v||!T,hour:f,id:Q0,minute:$,resourceId:X,type:"day-cell",children:eP("div",{className:"flex flex-col h-full w-full","data-testid":"grid-cell-content",style:{gap:`${B}px`},children:[Y&&sP(S5,{date:P,locale:W}),q&&eP(H5,{children:[b.slice(0,N).map((S,u)=>sP("div",{className:"w-full shrink-0","data-testid":S?.title,style:{height:`${G0}px`}},`empty-${u}-${S.id}`)),h&&eP("div",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs shrink-0 mt-1",onClick:(S)=>{S.stopPropagation(),I(P,b)},onKeyDown:(S)=>{if(S.key==="Enter"||S.key===" ")S.preventDefault(),S.stopPropagation(),I(P,b)},role:"button",tabIndex:0,children:["+",k," ",_("more")]})]}),G]})}),sP(b5,{ref:K})]})},VP=A4(W4);import{jsx as T5}from"react/jsx-runtime";var j0=({resource:P,className:f,children:$,"data-testid":Z})=>{let{renderResource:X}=F();return T5("div",{className:U("flex items-center justify-center p-2 border-r last:border-r-0",f),"data-testid":Z,style:{color:P.color,backgroundColor:P.backgroundColor},children:X?X(P):$??T5("div",{className:"text-sm font-medium truncate",children:P.title})})};import{memo as N4}from"react";import{useMemo as g5}from"react";var k5=({days:P,events:f,dayMaxEvents:$,dayNumberHeight:Z=Cf,gridType:X="day",eventSpacing:z=m0})=>{let q=X==="hour"?P.at(0).startOf("hour"):P.at(0).startOf("day"),Q=X==="hour"?P.at(-1).endOf("hour"):P.at(-1).endOf("day"),J=P.length,Y=f.filter((_)=>_.end.diff(_.start,X)>0),G=f.filter((_)=>_.end.diff(_.start,X)===0),K=[...Y].sort((_,L)=>{let p=_.start.diff(L.start);if(p!==0)return p;return L.end.diff(L.start)-_.end.diff(_.start)}),N=[...G].sort((_,L)=>_.start.diff(L.start)),O=[];for(let _=0;_<$;_++){O[_]=[];for(let L=0;L<J;L++)O[_][L]={taken:!1,event:null}}let A=[];for(let _ of K){let L=V.max(_.start.startOf(X),q),p=X==="hour"?_.end.subtract(1,"minute"):_.end,W=V.min(p.startOf(X),Q),B=Math.max(0,L.diff(q,X)),R=Math.min(J-1,W.diff(q,X)),b=_.start.startOf(X).isBefore(q),I=_.end.startOf(X).isAfter(Q),T=!1,k=-1;for(let h=0;h<$;h++){let C=!0;for(let v=B;v<=R;v++)if(O[h][v].taken){C=!1;break}if(C){k=h;break}}if(k!==-1){for(let C=B;C<=R;C++)O[k][C]={taken:!0,event:_};let h=R-B+1;A.push({left:B/J*100,width:h/J*100,top:Z+z+k*(G0+z),height:G0,position:k,..._,isTruncatedStart:b,isTruncatedEnd:I}),T=!0}if(!T)for(let h=B+1;h<=R;h++){let C=-1;for(let v=0;v<$;v++){let c=!0;for(let l=h;l<=R;l++)if(O[v][l].taken){c=!1;break}if(c){C=v;break}}if(C!==-1){for(let c=h;c<=R;c++)O[C][c]={taken:!0,event:_};let v=R-h+1;A.push({left:h/J*100,width:v/J*100,top:Z+z+C*(G0+z),height:G0,position:C,..._,isTruncatedStart:!0,isTruncatedEnd:I}),T=!0;break}}}for(let _ of N){let L=V.max(_.start.startOf(X),q),p=Math.max(0,Math.min(J-1,L.diff(q,X))),W=!1,B=!1,R=-1;for(let b=0;b<$;b++)if(!O[b][p].taken){R=b;break}if(R!==-1)O[R][p]={taken:!0,event:_},A.push({left:p/J*100,width:1/J*100,top:Z+z+R*(G0+z),height:G0,position:R,..._,isTruncatedStart:!1,isTruncatedEnd:!1})}return A};var h5=({days:P,allDay:f,dayNumberHeight:$,resourceId:Z,gridType:X})=>{let{getEventsForDateRange:z,dayMaxEvents:q,eventSpacing:Q,getEventsForResource:J}=F(),Y=P.at(0).startOf("day"),G=P.at(-1).endOf("day"),K=g5(()=>{let O=z(Y,G);if(Z){let A=J(Z);O=O.filter((_)=>A.some((L)=>String(L.id)===String(_.id)))}if(f)O=O.filter((A)=>!!A.allDay===f);return O},[z,J,Y,G,Z,f]);return g5(()=>{return k5({days:P,events:K,dayMaxEvents:q,dayNumberHeight:$,eventSpacing:Q,gridType:X})},[P,q,$,Q,K,X])};import{jsx as Vf}from"react/jsx-runtime";var O4=({days:P,gridType:f="day",resourceId:$,dayNumberHeight:Z,"data-testid":X,allDay:z})=>{let q=P.at(0).startOf("day"),Q=h5({days:P,gridType:f,resourceId:$,dayNumberHeight:Z,allDay:z});return Vf("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":X,children:Q.map((J)=>{let Y=`${J.id}-${J.position}-${q.toISOString()}-${$??"no-resource"}`;return Vf("div",{className:"absolute z-10 pointer-events-auto overflow-clip","data-left":J.left,"data-testid":`horizontal-event-${J.id}`,"data-top":J.top,"data-width":J.width,style:{left:`calc(${J.left}% + var(--spacing) * 0.25)`,width:`calc(${J.width}% - var(--spacing) * 1)`,top:`${J.top}px`,height:`${G0}px`},children:Vf(YP,{className:"h-full w-full shadow",elementId:Y,event:J})},`${Y}-wrapper`)})})},C5=N4(O4);import{jsx as y0,jsxs as Bf}from"react/jsx-runtime";var B4=({id:P,resource:f,gridType:$="day",variant:Z="resource",dayNumberHeight:X,className:z,columns:q=[],allDay:Q,showDayNumber:J=!1,isLastRow:Y=!1})=>{let{renderResource:G}=F(),K=Z==="resource",N=q.some((A)=>A.days),O=V4((A)=>{return y0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:y0(C5,{allDay:Q,"data-testid":`horizontal-events-${P}`,dayNumberHeight:X,days:A,gridType:$,resourceId:f?.id})})},[Q,X,$,P,f?.id]);return Bf("div",{className:U("flex flex-1 relative",z),"data-testid":`horizontal-row-${P}`,children:[K&&y0(j0,{className:"w-20 sm:w-40 sticky left-0 bg-background z-20 h-full","data-testid":`horizontal-row-label-${f?.id}`,resource:f,children:G?G(f):y0("div",{className:"wrap-break-word text-sm",children:f?.title})}),Bf("div",{className:"relative flex-1 flex",children:[y0("div",{className:"flex w-full",children:q.map((A,_)=>{if(A.day)return y0(VP,{allDay:Q,className:U("flex-1 w-20",Y&&"border-b-0",A.className),day:A.day,gridType:$,hour:$==="hour"?A.day.hour():void 0,resourceId:f?.id,showDayNumber:J},A.day.toISOString());let L=_===q.length-1;return Bf("div",{className:"flex relative w-full",children:[y0("div",{className:"flex w-full",children:A.days?.map((p)=>y0(VP,{allDay:Q,className:U("flex-1 w-20",Y&&"border-b-0",!L&&"border-r!",A.className),day:p,gridType:$,hour:$==="hour"?p.hour():void 0,resourceId:f?.id,showDayNumber:J},p.toISOString()))}),O(A.days)]},A.id)})}),!N&&O(q.map((A)=>A.day).filter(Boolean))]})]})},Pf=F4(B4);import{memo as M4}from"react";import{jsx as S4}from"react/jsx-runtime";var R4=({className:P})=>{let{t:f}=F();return S4("div",{className:U("w-16 border-r shrink-0 sticky left-0 bg-background z-20 flex items-center justify-center sm:text-xs text-muted-foreground",P),children:f("allDay")})},_P=M4(R4);import{jsx as D5,jsxs as w4}from"react/jsx-runtime";var b4=({days:P,classes:f,resource:$,showSpacer:Z=!0})=>{let X=P.map((z,q)=>({id:`allday-col-${z.toISOString()}-${q}`,day:z,gridType:"day",className:U("h-full min-h-12 border-r last:border-r-0",f?.cell)}));return w4("div",{className:U("flex w-full",f?.row),"data-testid":"all-day-row",children:[Z&&D5(_P,{className:f?.spacer}),D5(Pf,{allDay:!0,className:"flex-1 min-h-fit",columns:X,dayNumberHeight:0,gridType:"day",id:`all-day-row-${$?.id??"main"}`,isLastRow:!0,resource:$,variant:"regular"})]})},x0=I4(b4);import{memo as D4}from"react";import{memo as g4}from"react";import m4 from"dayjs";import{memo as H4}from"react";import{jsx as E5,Fragment as k4}from"react/jsx-runtime";var T4=({rangeStart:P,rangeEnd:f,now:$,resource:Z})=>{let{renderCurrentTimeIndicator:X,view:z}=F((K)=>({renderCurrentTimeIndicator:K.renderCurrentTimeIndicator,view:K.view})),q=$??m4();if(!(q.isSameOrAfter(P)&&q.isBefore(f)))return null;let J=f.diff(P,"minute"),G=q.diff(P,"minute")/J*100;if(X)return E5(k4,{children:X({currentTime:q,rangeStart:P,rangeEnd:f,progress:G,resource:Z,view:z})});return E5("div",{className:"absolute left-0 right-0 h-0.5 bg-red-500 z-50 pointer-events-none","data-testid":"current-time-indicator",style:{top:`${G}%`}})},j5=H4(T4);import{useMemo as x5}from"react";var y5=({days:P,gridType:f="hour",events:$})=>{let Z=$.filter((K)=>!K.allDay).toSorted((K,N)=>K.start.diff(N.start));if(Z.length===0)return[];let X=P.at(0)||V(),z=P.length,q=f==="day",Q=[],J=[],Y=null;for(let K of Z){if(Y&&K.start.isSameOrAfter(Y)){if(J.length>0)Q.push(J);J=[]}J.push(K),Y=Y?V.max(Y,K.end):K.end}if(J.length>0)Q.push(J);let G=[];for(let K of Q){if(K.length===1){let L=K[0],p=L.start.diff(X,f,!0),W=L.end.diff(X,f,!0);if(q){if(p=Math.floor(p),W=Math.ceil(W),W<=p)W=p+1}if(p<0)p=0;if(W>z)W=z;let B=Math.max(0,W-p);if(B===0)continue;let R=p/z*100,b=B/z*100;G.push({...L,left:0,width:100,top:R,height:b});continue}let N=[...K].sort((L,p)=>{let W=L.end.diff(L.start,"minute"),B=p.end.diff(p.start,"minute");if(W!==B)return B-W;return L.start.diff(p.start)}),O=N.length,A;if(O===2)A=25;else if(O===3)A=50;else if(O===4)A=60;else A=70;let _=O>1?A/(O-1):0;for(let L=0;L<N.length;L++){let p=N[L],W=p.start.diff(X,f,!0),B=p.end.diff(X,f,!0);if(q){if(W=Math.floor(W),B=Math.ceil(B),B<=W)B=W+1}if(W<0)W=0;if(B>z)B=z;let R=Math.max(0,B-W);if(R===0)continue;let b=W/z*100,I=R/z*100,T,k,h;if(L===0)T=0,k=100,h=1;else T=_*L,k=100-T,h=L+1;G.push({...p,left:T,width:k,top:b,height:I,zIndex:h})}}return G};var v5=({days:P,gridType:f,resourceId:$})=>{let{getEventsForDateRange:Z,getEventsForResource:X}=F(),z=P.at(0).startOf("day"),q=P.at(-1).endOf("day"),Q=x5(()=>{let Y=Z(z,q);if($){let G=X($);Y=Y.filter((K)=>G.some((N)=>String(N.id)===String(K.id)))}return Y.filter((G)=>!G.allDay)},[z,q,Z,$,X]);return x5(()=>{return y5({days:P,events:Q,gridType:f})},[P,f,Q])};import{jsx as Mf,jsxs as C4}from"react/jsx-runtime";var h4=({days:P,gridType:f="hour",resourceId:$,resource:Z,"data-testid":X})=>{let z=v5({days:P,gridType:f,resourceId:$}),q=P.at(0),Q=P.at(-1)?.add(1,f);return C4("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":X,children:[q&&Q&&Mf(j5,{rangeEnd:Q,rangeStart:q,resource:Z}),z.map((J,Y)=>{let G=`event-${J.id}-${Y}-${P.at(0).toISOString()}-${$??"no-resource"}`,K=J.end.diff(J.start,"minute")<=15;return Mf("div",{className:"absolute",style:{left:`${J.left}%`,width:`calc(${J.width}% - var(--spacing) * 2)`,top:`${J.top}%`,height:`${J.height}%`},children:Mf(YP,{className:U("pointer-events-auto",{"[&_p]:text-[10px] [&_p]:mt-0":K}),elementId:G,event:J})},`${G}-wrapper`)})]})},o5=g4(h4);import{jsx as BP,jsxs as j4}from"react/jsx-runtime";var E4=({id:P,days:f,resourceId:$,resource:Z,"data-testid":X,gridType:z,className:q,renderCell:Q,noEvents:J,cellSlots:Y=[60],isLastColumn:G})=>{return BP("div",{className:U("flex flex-col flex-1 items-center justify-center min-w-50 bg-background relative",q),"data-testid":X||`vertical-col-${P}`,children:j4("div",{className:"w-full relative grid",style:{gridTemplateRows:`repeat(${f.length}, minmax(0, 1fr))`},children:[f.map((K,N)=>{let O=K.format("HH"),A=K.format("YYYY-MM-DD");if(Q){let _=P==="time-col"?`vertical-time-${O}`:`vertical-cell-${A}-${O}-00${$?`-${$}`:""}`;return BP("div",{className:"h-[60px] border-b border-r","data-testid":_,children:Q(K)},`${P}-${N}-${O}`)}return Y.map((_)=>{let L=_===60?void 0:_,p=L===void 0?"00":String(L).padStart(2,"0"),W=`vertical-cell-${A}-${O}-${p}${$?`-${$}`:""}`;return BP(VP,{className:U("hover:bg-accent relative z-10 h-[60px] cursor-pointer border-b",_===60?"":"border-dashed h-[15px] min-h-[15px]",G?"border-r-0":"border-r"),"data-testid":W,day:L?K.minute(L):K,gridType:z,hour:K.hour(),minute:L,resourceId:$,shouldRenderEvents:!1},`${P}-${N}-${p}`)})}),!J&&BP("div",{className:"absolute inset-0 z-10 pointer-events-none",children:BP(o5,{"data-testid":`vertical-events-${P}`,days:f,gridType:z,resource:Z,resourceId:$})})]})})},i5=D4(E4);import{memo as y4}from"react";import{jsx as c5,jsxs as v4}from"react/jsx-runtime";var x4=({children:P,classes:f,allDayRow:$})=>{let{stickyViewHeader:Z,viewHeaderClassName:X}=F((z)=>({stickyViewHeader:z.stickyViewHeader,viewHeaderClassName:z.viewHeaderClassName}));return v4("div",{className:U(Z&&"sticky top-0 z-21 bg-background",X),children:[c5("div",{className:U("h-12 border-b w-fit",f?.header),"data-testid":"vertical-grid-header",children:P}),$&&c5("div",{className:U("flex w-full border-b min-h-12",f?.allDay),"data-testid":"vertical-grid-all-day",children:$})]})},l5=y4(x4);import{jsx as MP,jsxs as u5}from"react/jsx-runtime";var B0=({columns:P,children:f,gridType:$="day",variant:Z="resource",classes:X,allDayRow:z,cellSlots:q,style:Q})=>{let J=Z==="resource",Y=!J,G=f&&MP(l5,{allDayRow:z,classes:{header:X?.header,allDay:X?.allDay},children:f});return u5("div",{className:"h-full flex flex-col","data-testid":"vertical-grid-container",style:Q,children:[Y&&G,u5(V0,{className:U("h-full",Y&&"overflow-auto"),"data-testid":"vertical-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[J&&G,MP("div",{className:U("flex flex-1 w-fit",X?.body),"data-testid":"vertical-grid-body",children:P.map((K,N)=>MP(i5,{...K,cellSlots:q,gridType:$,isLastColumn:N===P.length-1},`${K.id}-${N}`))}),MP(I0,{className:"z-30"})," ",MP(I0,{className:"z-30",orientation:"horizontal"})," "]})]})};function q0({referenceDate:P,businessHours:f,hideNonBusinessHours:$,allDates:Z=[P],resourceBusinessHours:X=[]}){let z=hf({referenceDate:P}),q=!!f||X.length>0;if(!($&&q))return z;let{minStart:J,maxEnd:Y,hasBusinessHours:G}=iP({allDates:Z,businessHours:f,resourceBusinessHours:X,hideNonBusinessHours:$});if(!G)return z;return z.filter((K)=>{let N=K.hour();return N>=J&&N<Y})}import{jsx as KP,jsxs as o4}from"react/jsx-runtime";var d5=()=>{let{currentDate:P,currentLocale:f,timeFormat:$,t:Z,businessHours:X,hideNonBusinessHours:z}=F(),q=P.isSame(V(),"day"),Q=q0({referenceDate:P,businessHours:X,hideNonBusinessHours:z,allDates:[P]}),J={id:"time-col",day:void 0,days:Q,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(G)=>KP("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Intl.DateTimeFormat(f,{hour:"numeric",hour12:$==="12-hour"}).format(G.toDate())})},Y={id:`day-col-${P.format("YYYY-MM-DD")}`,day:P,days:Q,className:"w-[calc(100%-4rem)] flex-1",gridType:"hour"};return KP(B0,{allDayRow:KP(x0,{days:[P]}),cellSlots:[0,15,30,45],classes:{header:"w-full",body:"w-full",allDay:"w-full"},columns:[J,Y],gridType:"hour",variant:"regular",children:KP("div",{className:"flex flex-1 justify-center items-center min-h-12","data-testid":"day-view-header",children:o4(D,{className:U("flex justify-center items-center text-center text-base font-semibold sm:text-xl",q&&"text-primary"),transitionKey:P.format("YYYY-MM-DD"),children:[KP("span",{className:"xs:inline hidden",children:P.format("dddd, ")}),P.format("MMMM D, YYYY"),q&&KP("span",{className:"bg-primary text-primary-foreground ml-2 rounded-full px-1 py-0.5 text-xs sm:px-2 sm:text-sm",children:Z("today")})]})})})};import{useMemo as u4}from"react";import{memo as i4}from"react";import{jsx as l4}from"react/jsx-runtime";var c4=({children:P,className:f})=>{let{stickyViewHeader:$,viewHeaderClassName:Z}=F((X)=>({stickyViewHeader:X.stickyViewHeader,viewHeaderClassName:X.viewHeaderClassName}));return l4("div",{className:U("flex h-12 w-fit",$&&"sticky top-0 z-21 bg-background",f,Z),"data-testid":"horizontal-grid-header",children:P})},r5=i4(c4);import{jsx as pP,jsxs as a5}from"react/jsx-runtime";var ff=({rows:P,children:f,classes:$,allDay:Z,gridType:X,variant:z="resource",dayNumberHeight:q})=>{let{currentDate:Q}=F(),J=z==="resource",Y=!J,G=f&&pP(r5,{className:$?.header,children:f});return a5("div",{className:"h-full flex flex-col","data-testid":"horizontal-grid-container",children:[Y&&G,a5(V0,{className:U("h-full",Y&&"overflow-auto"),"data-testid":"horizontal-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[J&&G,pP("div",{className:U("flex flex-1 w-fit",$?.body),"data-testid":"horizontal-grid-body",children:pP("div",{className:"relative w-full flex flex-col flex-1",children:P.map((K,N)=>pP(Pf,{allDay:K.allDay??Z,dayNumberHeight:q,gridType:X,isLastRow:N===P.length-1,variant:z,...K},K.id))},Q.format("YYYY-MM"))}),pP(I0,{className:"z-30"}),pP(I0,{className:"z-30",orientation:"horizontal"})]})]})};import{jsx as Rf}from"react/jsx-runtime";var n5=({className:P})=>{let{firstDayOfWeek:f,stickyViewHeader:$,viewHeaderClassName:Z,currentDate:X}=F(),z=Z0(X,f);return Rf("div",{className:U("flex w-full",$&&"sticky top-0 z-20",Z,P),"data-testid":"month-header",children:z.map((q,Q)=>Rf(D,{className:"py-2 text-center font-medium border-r last:border-r-0 border-b flex-1","data-testid":`weekday-header-${q.format("ddd").toLowerCase()}`,delay:Q*0.05,transitionKey:q.toISOString(),children:Rf("span",{className:"text-sm capitalize",children:q.format("ddd")})},q.toISOString()))})};import{jsx as t5}from"react/jsx-runtime";var s5=()=>{let{currentDate:P,firstDayOfWeek:f}=F(),Z=u4(()=>EP(P,f),[P,f]).map((X,z)=>({id:`week-${z}`,columns:X.map((q)=>({id:`col-${q.toISOString()}`,day:q,className:"w-auto",gridType:"day"})),className:"flex-1",showDayNumber:!0}));return t5(ff,{classes:{body:"w-full",header:"w-full"},rows:Z,variant:"regular",children:t5(n5,{className:"h-12"})})};import{useMemo as $f}from"react";import{jsx as v0,jsxs as Sf}from"react/jsx-runtime";var e5="w-[calc((100%-4rem)/var(--visible-days))] min-w-[calc((100%-4rem)/var(--visible-days))] flex-1",P2="w-10 sm:w-16 min-w-10 sm:min-w-16 max-w-10 sm:max-w-16",f2=()=>{let{t:P,currentDate:f,firstDayOfWeek:$,selectDate:Z,openEventForm:X,currentLocale:z,timeFormat:q,businessHours:Q,hideNonBusinessHours:J,hiddenDays:Y}=F(),G=$f(()=>Z0(f,$),[f,$]),K=$f(()=>Y?G.filter((L)=>!Y.has(L.day())):G,[G,Y]),O={id:"time-col",days:$f(()=>q0({referenceDate:f,businessHours:Q,hideNonBusinessHours:J,allDates:G}),[f,Q,J,G]),day:void 0,className:`shrink-0 ${P2} sticky left-0 bg-background z-20`,gridType:"hour",noEvents:!0,renderCell:(L)=>v0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Intl.DateTimeFormat(z,{hour:"numeric",hour12:q==="12-hour"}).format(L.toDate())})},A=$f(()=>{return K.map((L)=>({id:`day-col-${L.format("YYYY-MM-DD")}`,day:L,label:L.format("D"),className:e5,days:q0({referenceDate:L,businessHours:Q,hideNonBusinessHours:J,allDates:G}),value:L}))},[G,Q,J,K.map]),_={"--visible-days":K.length};return v0(B0,{allDayRow:v0(x0,{classes:{cell:e5,spacer:P2},days:K}),classes:{header:"w-full h-18",body:"w-full"},columns:[O,...A],gridType:"hour",style:_,variant:"regular",children:Sf("div",{className:"flex h-full flex-1","data-testid":"week-view-header",children:[v0("div",{className:"w-10 sm:w-16 h-full shrink-0 items-center justify-center border-r p-2 flex",children:Sf("div",{className:"flex flex-col items-center justify-center",children:[v0("span",{className:"text-muted-foreground text-xs",children:P("week")}),v0("span",{className:"font-medium",children:f.week()})]})}),K.map((L,p)=>{let W=L.isSame(V(),"day"),B=`week-day-header-${L.toISOString()}`;return Sf(D,{className:U("hover:bg-accent flex-1 flex flex-col justify-center cursor-pointer p-1 text-center sm:p-2 border-r last:border-r-0 w-50 h-full",W&&"bg-primary/10 font-bold"),"data-testid":`week-day-header-${L.format("dddd").toLowerCase()}`,delay:p*0.05,onClick:()=>{Z(L),X({start:L})},transitionKey:B,children:[v0("div",{className:"text-xs sm:text-sm",children:L.format("ddd")}),v0("div",{className:U("mx-auto mt-1 flex h-5 w-5 items-center justify-center rounded-full text-xs",W&&"bg-primary text-primary-foreground"),children:Intl.DateTimeFormat(z,{day:"numeric"}).format(L.toDate())})]},B)})]})})};import{jsx as o0,jsxs as RP}from"react/jsx-runtime";var d4=["S","M","T","W","T","F","S"],r4=["bg-primary","bg-blue-500","bg-green-500"],a4=42,n4=(P)=>{if(P===0)return"";let f=P>1?"s":"";return`${P} event${f}`},$2=()=>{let{currentDate:P,selectDate:f,events:$,setView:Z,getEventsForDateRange:X,t:z}=F(),q=P.year(),Q=()=>{return Array.from({length:12},(A,_)=>{let L=V().year(q).month(_).startOf("month"),p=$.filter((W)=>W.start.year()===q&&W.start.month()===_);return{date:L,name:L.format("MMMM"),eventCount:p.length,monthKey:L.format("MM")}})},J=(A)=>{let _=A.startOf("month").startOf("week");return Array.from({length:a4},(L,p)=>{let W=_.add(p,"day"),B=W.startOf("day"),R=W.endOf("day"),b=X(B,R);return{date:W,dayKey:W.format("YYYY-MM-DD"),isInCurrentMonth:W.month()===A.month(),isToday:W.isSame(V(),"day"),isSelected:W.isSame(P,"day"),eventCount:b.length}})},Y=(A,_,L)=>{L?.stopPropagation(),f(A),Z(_)},G=(A)=>{let _=A===1?z("event"):z("events");return`${A} ${_}`},K=(A)=>{let L=A.isInCurrentMonth?"":"text-muted-foreground opacity-50",p=A.isToday?"bg-primary text-primary-foreground rounded-full":"",W=A.isSelected&&!A.isToday?"bg-muted rounded-full font-bold":"",B=A.eventCount>0&&!A.isToday&&!A.isSelected?"font-medium":"";return U("relative flex aspect-square w-full cursor-pointer flex-col items-center justify-center hover:bg-accent rounded-sm transition-colors duration-200",L,p,W,B)},N=(A,_)=>{return U("h-[3px] w-[3px] rounded-full",_?"bg-primary-foreground":A)},O=Q();return RP(V0,{className:"h-full","data-testid":"year-view",children:[o0("div",{className:"grid auto-rows-fr grid-cols-1 gap-4 p-4 sm:grid-cols-2 lg:grid-cols-3","data-testid":"year-grid",children:O.map((A,_)=>{let L=J(A.date),p=_*0.05;return RP("div",{className:"hover:border-primary flex flex-col rounded-lg border p-3 text-left transition-all duration-200 hover:shadow-md","data-testid":`year-month-${A.monthKey}`,children:[RP(D,{className:"mb-2 flex items-center justify-between",delay:p,transitionKey:`month-${A.monthKey}`,children:[o0("button",{className:"text-lg font-medium hover:underline cursor-pointer","data-testid":`year-month-title-${A.monthKey}`,onClick:()=>Y(A.date,"month"),type:"button",children:A.name}),A.eventCount>0&&o0("span",{className:"bg-primary text-primary-foreground rounded-full px-2 py-1 text-xs","data-testid":`year-month-event-count-${A.monthKey}`,children:G(A.eventCount)})]},`month-${A.monthKey}`),RP("div",{className:"grid grid-cols-7 gap-[1px] text-[0.6rem]","data-testid":`year-mini-calendar-${A.monthKey}`,children:[d4.map((W)=>o0("div",{className:"text-muted-foreground h-3 text-center",children:W},`header-${W}`)),L.map((W)=>{let B=`year-day-${A.date.format("YYYY-MM")}-${W.dayKey}`,R=W.eventCount>0,b=Math.min(W.eventCount,3),I=r4.slice(0,b);return RP("button",{className:K(W),"data-testid":B,onClick:(T)=>Y(W.date,"day",T),title:n4(W.eventCount),type:"button",children:[o0("span",{className:"text-center leading-none",children:W.date.date()}),R&&o0("div",{className:U("absolute bottom-0 flex w-full justify-center space-x-[1px]",W.isToday&&"bottom-[1px]"),children:I.map((T)=>o0("span",{className:N(T,W.isToday)},T))})]},W.dayKey)})]})]},A.monthKey)})}),o0(I0,{className:"z-30"})]})};import{useCallback as If,useMemo as t4}from"react";import{jsx as s4}from"react/jsx-runtime";var z2=({children:P,events:f=[],firstDayOfWeek:$=0,initialView:Z="month",initialDate:X,renderEvent:z,onEventClick:q,onCellClick:Q,onViewChange:J,onEventAdd:Y,onEventUpdate:G,onEventDelete:K,onDateChange:N,locale:O,timezone:A,disableCellClick:_,disableEventClick:L,disableDragAndDrop:p,dayMaxEvents:W,eventSpacing:B=m0,stickyViewHeader:R=!0,viewHeaderClassName:b="",headerComponent:I,headerClassName:T,businessHours:k,renderEventForm:h,translations:C,translator:v,timeFormat:c="12-hour",classesOverride:l,renderCurrentTimeIndicator:o,hideNonBusinessHours:p0=!1,hiddenDays:Q0})=>{let S=jP({events:f,firstDayOfWeek:$,initialView:Z,initialDate:X,businessHours:k,onEventAdd:Y,onEventUpdate:G,onEventDelete:K,onDateChange:N,onViewChange:J,locale:O,timezone:A,translations:C,translator:v}),u=If((r)=>{S.setSelectedEvent(r),S.setIsEventFormOpen(!0)},[S]),U0=If((r)=>{if(L)return;if(q)q(r);else u(r)},[L,q,u]),t=If((r)=>{if(_)return;if(Q)Q(r);else S.openEventForm(r)},[Q,_,S]),A0=t4(()=>({currentDate:S.currentDate,view:S.view,events:S.events,rawEvents:S.rawEvents,currentLocale:S.currentLocale,isEventFormOpen:S.isEventFormOpen,selectedEvent:S.selectedEvent,selectedDate:S.selectedDate,firstDayOfWeek:S.firstDayOfWeek,setCurrentDate:S.setCurrentDate,selectDate:S.selectDate,setView:S.setView,nextPeriod:S.nextPeriod,prevPeriod:S.prevPeriod,today:S.today,addEvent:S.addEvent,updateEvent:S.updateEvent,updateRecurringEvent:S.updateRecurringEvent,deleteEvent:S.deleteEvent,deleteRecurringEvent:S.deleteRecurringEvent,openEventForm:S.openEventForm,closeEventForm:S.closeEventForm,getEventsForDateRange:S.getEventsForDateRange,findParentRecurringEvent:S.findParentRecurringEvent,renderEvent:z,onEventClick:U0,onCellClick:t,locale:O,timezone:A,disableCellClick:_,disableEventClick:L,disableDragAndDrop:p,dayMaxEvents:W,eventSpacing:B,stickyViewHeader:R,viewHeaderClassName:b,headerComponent:I,headerClassName:T,businessHours:k,renderEventForm:h,t:S.t,timeFormat:c,classesOverride:l,renderCurrentTimeIndicator:o,hideNonBusinessHours:p0,hiddenDays:Q0}),[S,z,U0,t,O,A,_,L,p,W,B,R,b,I,T,k,h,c,l,o,p0,Q0]);return s4(CP.Provider,{value:A0,children:P})};import{jsx as L0,jsxs as $3}from"react/jsx-runtime";var e4=()=>{let{view:P,dayMaxEvents:f}=F();return $3("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-calendar",children:[L0(NP,{className:"p-1"}),L0(yP,{children:L0(D,{className:"w-full h-[calc(100%-3.5rem)]",direction:"horizontal",transitionKey:P,children:L0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:L0(s5,{dayMaxEvents:f},"month"),week:L0(f2,{},"week"),day:L0(d5,{},"day"),year:L0($2,{},"year")}[P]})})}),L0(dP,{})]})},P3=(P)=>{if(!P||P.length===0)return;return new Set(P.map((f)=>H0[f]))},f3=({events:P,firstDayOfWeek:f="sunday",initialView:$="month",initialDate:Z,dayMaxEvents:X=JP,eventSpacing:z=m0,stickyViewHeader:q=!0,viewHeaderClassName:Q="",timeFormat:J="12-hour",hideNonBusinessHours:Y=!1,hiddenDays:G,...K})=>{return L0(z2,{dayMaxEvents:X,eventSpacing:z,events:HP(P),firstDayOfWeek:H0[f],hiddenDays:P3(G),hideNonBusinessHours:Y,initialDate:e0(Z),initialView:$,stickyViewHeader:q,timeFormat:J,viewHeaderClassName:Q,...K,children:L0(e4,{})})};import{jsx as z3}from"react/jsx-runtime";var UP=({days:P,gridType:f="day",children:$,classes:Z})=>{let{getVisibleResources:X}=F(),z=X(),q=P.map((J)=>{let Y=Array.isArray(J);return{id:`col-${Y?J[0]?.format("YYYY-MM-DD"):J.toISOString()}`,day:Y?void 0:J,days:Y?J:void 0,className:Z?.cell,gridType:f}}),Q=z.map((J)=>({id:J.id,title:J.title,resource:J,columns:q}));return z3(ff,{classes:Z,dayNumberHeight:0,gridType:f,rows:Q,children:$})};import{jsx as SP,jsxs as Z3}from"react/jsx-runtime";var Z2=()=>{let{currentDate:P,t:f,currentLocale:$,timeFormat:Z,businessHours:X,hideNonBusinessHours:z,getVisibleResources:q}=F(),Q=q(),J=q0({referenceDate:P,businessHours:X,hideNonBusinessHours:z,allDates:[P],resourceBusinessHours:Q.map((Y)=>Y.businessHours).filter(Boolean)});return Z3(UP,{classes:{header:"min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:J,gridType:"hour",children:[SP("div",{className:"w-20 sm:w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:SP("div",{className:"text-sm",children:f("resources")})}),SP("div",{className:"flex-1 flex flex-col",children:SP("div",{className:"flex h-12",children:J.map((Y,G)=>{let K=Y.isSame(V(),"hour"),N=`resource-day-header-${Y.toISOString()}`;return SP(D,{className:U("min-w-20 flex-1 border-b border-r last:border-r-0 flex items-center justify-center text-xs shrink-0",K&&"bg-blue-50 text-blue-600 font-medium"),"data-testid":`resource-day-time-label-${Y.format("HH")}`,delay:G*0.05,transitionKey:`${N}-motion`,children:Intl.DateTimeFormat($,{hour:"numeric",hour12:Z==="12-hour"}).format(Y.toDate())},`${N}-animated`)})})})]})};import{jsx as GP,jsxs as J2}from"react/jsx-runtime";var X2=()=>{let{currentDate:P,getVisibleResources:f,currentLocale:$,timeFormat:Z,businessHours:X,hideNonBusinessHours:z}=F(),q=f(),Q=q0({referenceDate:P,businessHours:X,hideNonBusinessHours:z,allDates:[P],resourceBusinessHours:q.map((G)=>G.businessHours).filter(Boolean)}),J={id:"time-col",day:void 0,days:Q,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(G)=>GP("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Intl.DateTimeFormat($,{hour:"numeric",hour12:Z==="12-hour"}).format(G.toDate())})},Y=q.map((G)=>({id:`day-col-${P.format("YYYY-MM-DD")}-resource-${G.id}`,resourceId:G.id,resource:G,days:Q,day:P,gridType:"hour"}));return GP(B0,{allDayRow:J2("div",{className:"flex w-full",children:[GP(_P,{}),q.map((G)=>GP(x0,{classes:{cell:"min-w-50"},days:[P],resource:G,showSpacer:!1},`resource-allday-row-${G.id}`))]}),cellSlots:[0,15,30,45],classes:{body:"w-full",header:"w-full"},columns:[J,...Y],"data-testid":"resource-day",gridType:"hour",children:J2("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[GP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),q.map((G)=>GP(j0,{className:"min-w-50 flex-1",resource:G},`resource-cell-${G.id}`))]})})};import{jsx as q2}from"react/jsx-runtime";var Q2=()=>{let{orientation:P}=F();if(P==="vertical")return q2(X2,{});return q2(Z2,{})};import{useMemo as J3}from"react";import{jsx as zf,jsxs as Y2}from"react/jsx-runtime";var _2=()=>{let{currentDate:P,t:f}=F(),$=J3(()=>{return gf(P)},[P]);return Y2(UP,{days:$,children:[zf("div",{className:"w-20 sm:w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:zf("div",{className:"text-sm",children:f("resources")})}),$.map((Z,X)=>{let z=`resource-month-header-${Z.toISOString()}`;return Y2(D,{className:"w-20 border-b border-r shrink-0 flex items-center justify-center flex-col",delay:X*0.05,transitionKey:`${z}-motion`,children:[zf("div",{className:"text-xs font-medium",children:Z.format("D")}),zf("div",{className:"text-xs text-muted-foreground",children:Z.format("ddd")})]},`${z}-animated`)})]})};import{jsx as IP,jsxs as K2}from"react/jsx-runtime";var p2=()=>{let{currentDate:P,getVisibleResources:f}=F(),$=f(),Z=P.startOf("month"),X=Array.from({length:P.daysInMonth()},(Q,J)=>Z.add(J,"day")),z={id:"date-col",days:X,day:void 0,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"day",noEvents:!0,renderCell:(Q)=>K2("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:[IP("span",{children:Q.format("D")}),IP("span",{children:Q.format("ddd")})]})},q=$.map((Q)=>({id:`month-col-resource-${Q.id}`,day:void 0,resourceId:Q.id,days:X,gridType:"day"}));return IP(B0,{classes:{header:"w-full",body:"w-full"},columns:[z,...q],"data-testid":"resource-month-vertical-grid",children:K2("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[IP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),$.map((Q)=>IP(j0,{className:"min-w-50 flex-1",resource:Q},`resource-cell-${Q.id}`))]})})};import{jsx as U2}from"react/jsx-runtime";var G2=()=>{let{orientation:P}=F();if(P==="vertical")return U2(p2,{});return U2(_2,{})};import{useMemo as bf}from"react";import{jsx as i0,jsxs as wf}from"react/jsx-runtime";var L2=()=>{let{currentDate:P,firstDayOfWeek:f,t:$,currentLocale:Z,timeFormat:X,businessHours:z,hideNonBusinessHours:q,getVisibleResources:Q}=F(),J=Q(),Y=bf(()=>Z0(P,f),[P,f]),G=bf(()=>J.map((N)=>N.businessHours).filter(Boolean),[J]),K=bf(()=>{return Y.map((N)=>q0({referenceDate:N,businessHours:z,hideNonBusinessHours:q,resourceBusinessHours:G}))},[Y,z,q,G]);return wf(UP,{classes:{header:"h-24 min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:K,gridType:"hour",children:[i0("div",{className:"w-20 sm:w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:i0("div",{className:"text-sm",children:$("resources")})}),wf("div",{className:"flex-1 flex flex-col",children:[i0("div",{className:"flex h-12",children:Y.map((N,O)=>{let A=N.isSame(V(),"day"),_=`resource-week-header-${N.toISOString()}-day`;return i0(D,{className:U("shrink-0 border-r last:border-r-0 border-b flex-1 flex items-center text-center font-medium",A&&"bg-blue-50 text-blue-600"),"data-testid":"resource-week-day-header",delay:O*0.05,transitionKey:`${_}-motion`,children:wf("div",{className:"sticky left-1/2",children:[i0("div",{className:"text-sm",children:N.format("ddd")}),i0("div",{className:"text-xs text-muted-foreground",children:N.format("M/D")})]})},`${_}-animated`)})}),i0("div",{className:"flex h-12 border-b",children:K.flat().map((N,O)=>{let A=N.isSame(V(),"hour"),_=`resource-week-header-${N.toISOString()}-hour`;return i0(D,{className:U("min-w-20 flex-1 border-r flex items-center justify-center text-xs shrink-0",A&&"bg-blue-50 text-blue-600 font-medium"),"data-testid":`resource-week-time-label-${N.format("HH")}`,delay:O*0.005,transitionKey:`${_}-motion`,children:Intl.DateTimeFormat(Z,{hour:"numeric",hour12:X==="12-hour"}).format(N.toDate())},`${_}-animated`)})})]})]})};import{useMemo as bP}from"react";import{jsx as K0,jsxs as wP}from"react/jsx-runtime";var A2=()=>{let{currentDate:P,getVisibleResources:f,firstDayOfWeek:$,currentLocale:Z,timeFormat:X,t:z,businessHours:q,hideNonBusinessHours:Q,hiddenDays:J}=F(),Y=f(),G=bP(()=>Z0(P,$),[P,$]),K=bP(()=>J?G.filter((_)=>!J.has(_.day())):G,[G,J]),N=bP(()=>q0({referenceDate:P,businessHours:q,hideNonBusinessHours:Q,allDates:G,resourceBusinessHours:Y.map((_)=>_.businessHours).filter(Boolean)}),[P,q,Q,G,Y]),O=bP(()=>({id:"time-col",days:N,day:void 0,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(_)=>K0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Intl.DateTimeFormat(Z,{hour:"numeric",hour12:X==="12-hour"}).format(_.toDate())})}),[N,Z,X]),A=bP(()=>Y.flatMap((_)=>K.map((L)=>({id:`day-col-${L.format("YYYY-MM-DD")}-resource-${_.id}`,resourceId:_.id,resource:_,day:L,days:q0({referenceDate:L,businessHours:q,hideNonBusinessHours:Q,allDates:G,resourceBusinessHours:Y.map((p)=>p.businessHours).filter(Boolean)}),gridType:"hour"}))),[Y,G,q,Q,K.map]);return K0(B0,{allDayRow:wP("div",{className:"flex",children:[K0(_P,{}),Y.map((_)=>K0(x0,{classes:{cell:"min-w-50"},days:K,resource:_,showSpacer:!1},`resource-week-allday-row-${_.id}`))]}),classes:{header:"h-24"},columns:[O,...A],"data-testid":"resource-week",gridType:"hour",children:wP("div",{className:"flex-1 flex flex-col",children:[wP("div",{className:"flex h-12",children:[K0("div",{className:"shrink-0 w-16 border-r z-20 bg-background sticky left-0",children:K0("span",{className:"px-2 h-full w-full flex justify-center items-end text-xs text-muted-foreground",children:z("week")})}),Y.map((_,L)=>{let p=`resource-week-header-${_.id}-day`;return K0(D,{className:U("shrink-0 border-r last:border-r-0 border-b flex items-center text-center font-medium"),delay:L*0.05,style:{width:`calc(${K.length} * var(--spacing) * 50)`},transitionKey:`${p}-motion`,children:K0(j0,{className:"h-full w-full flex-1",resource:_,children:K0("div",{className:"sticky left-1/2 text-sm font-medium truncate",children:_.title})})},`${p}-animated`)})]}),wP("div",{className:"flex h-12",children:[K0("div",{className:"shrink-0 w-16 border-r border-b z-20 bg-background sticky left-0",children:K0("span",{className:"px-2 h-full w-full flex justify-center items-start font-medium",children:P.week()})}),A.map((_,L)=>{let p=_.day,W=`resource-week-header-${p.toISOString()}-hour-${_.resourceId}`;return wP(D,{className:U("w-50 border-r last:border-r-0 border-b flex flex-col items-center justify-center text-xs shrink-0 bg-background"),"data-testid":`resource-week-time-label-${p.format("HH")}`,delay:L*0.05,transitionKey:`${W}-motion`,children:[K0("div",{className:"text-sm",children:p.format("ddd")}),K0("div",{className:"text-xs text-muted-foreground",children:p.format("M/D")})]},`${W}-animated`)})]})]})})};import{jsx as W2}from"react/jsx-runtime";var N2=()=>{let{orientation:P}=F();if(P==="vertical")return W2(A2,{});return W2(L2,{})};import{jsx as c0,jsxs as X3}from"react/jsx-runtime";var O2=()=>{let{view:P}=F();return X3("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-resource-calendar",children:[c0(NP,{className:"p-1"}),c0(yP,{children:c0(D,{className:"w-full h-[calc(100%-3.5rem)] @container/calendar-body",direction:"horizontal",transitionKey:P,children:c0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:c0(G2,{},"month"),week:c0(N2,{},"week"),day:c0(Q2,{},"day")}[P]})})}),c0(dP,{})]})};import{jsx as F2}from"react/jsx-runtime";var q3=(P)=>{if(!P||P.length===0)return;return new Set(P.map((f)=>H0[f]))},Q3=({events:P=[],resources:f=[],firstDayOfWeek:$="sunday",initialView:Z="month",initialDate:X,disableDragAndDrop:z=!1,dayMaxEvents:q=JP,timeFormat:Q="12-hour",eventSpacing:J=m0,hiddenDays:Y,...G})=>{return F2(vf,{dayMaxEvents:q,disableDragAndDrop:z,eventSpacing:J,events:HP(P),firstDayOfWeek:H0[$],hiddenDays:q3(Y),initialDate:e0(X),initialView:Z,resources:f,timeFormat:Q,...G,children:F2(O2,{})})};export{r2 as useIlamyCalendarContext,PP as isRecurringEvent,Jf as generateRecurringEvents,qf as defaultTranslations,$X as RRule,Q3 as IlamyResourceCalendar,f3 as IlamyCalendar};
1
+ import{RRule as Vq}from"rrule";import{AnimatePresence as c1,motion as o1}from"motion/react";import{clsx as y1}from"clsx";import{twMerge as v1}from"tailwind-merge";import N0 from"dayjs";import H1 from"dayjs/plugin/isBetween.js";import m1 from"dayjs/plugin/isSameOrAfter.js";import k1 from"dayjs/plugin/isSameOrBefore.js";import h1 from"dayjs/plugin/localeData.js";import g1 from"dayjs/plugin/minMax.js";import C1 from"dayjs/plugin/timezone.js";import D1 from"dayjs/plugin/utc.js";import E1 from"dayjs/plugin/weekday.js";import j1 from"dayjs/plugin/weekOfYear.js";var D5,x1=(P,$,Z)=>{let q=$.prototype,X=Z.tz.setDefault;Z.tz.setDefault=(J)=>{return D5=J,X(J)};let{startOf:f,endOf:Y}=q;function Q(J,K){let L=J.$x?.$timezone||D5;if(!L)return K;let z=Z.tz(K.format("YYYY-MM-DDTHH:mm:ss"),L).utcOffset();if(K.utcOffset()!==z)return K.tz(L,!0);return K}q.startOf=function(J,K){let L=f.call(this,J,K);return Q(this,L)},q.endOf=Y};N0.extend(E1);N0.extend(j1);N0.extend(m1);N0.extend(k1);N0.extend(H1);N0.extend(g1);N0.extend(C1);N0.extend(D1);N0.extend(h1);N0.extend(x1);var E5=(...P)=>{return N0.tz(...P)};Object.assign(E5,N0);var M=E5;function U(...P){return v1(y1(P))}function JP(P){if(P===void 0)return;if(M.isDayjs(P))return P;let $=M(P);return $.isValid()?$:void 0}var j5=(P,$)=>{let Z={...P};for(let q of $)delete Z[q];return Z};function hP(P){if(!P||!P.length)return[];return P.map(($)=>{return{...$,start:M.isDayjs($.start)?$.start:M($.start),end:M.isDayjs($.end)?$.end:M($.end)}})}import{jsx as x5}from"react/jsx-runtime";var i1={hidden:({direction:P})=>({opacity:0,x:P==="horizontal"?10:0,y:P==="vertical"?-10:0}),visible:({delay:P})=>({opacity:1,x:0,y:0,transition:{duration:0.2,ease:[0.4,0,0.2,1],delay:P}}),exit:({direction:P})=>({opacity:0,x:P==="horizontal"?-10:0,y:P==="vertical"?-10:0,transition:{duration:0.15}})},C=({children:P,transitionKey:$,delay:Z=0,className:q,direction:X="vertical",layout:f,layoutId:Y,"data-testid":Q,ref:J,...K})=>x5(c1,{mode:"wait",children:x5(o1.div,{animate:"visible",className:U("inline-block w-full",q),custom:{delay:Z,direction:X},"data-testid":Q,exit:"exit",initial:"hidden",layout:f,layoutId:Y,ref:J,variants:i1,...K,children:P},$)});C.displayName="AnimatedSection";import{DndContext as Y4,MouseSensor as _4,pointerWithin as K4,TouchSensor as z4,useSensor as $2,useSensors as U4}from"@dnd-kit/core";import{useRef as Z2,useState as L4}from"react";import{Slot as l1}from"@radix-ui/react-slot";import{cva as u1}from"class-variance-authority";import{jsx as d1}from"react/jsx-runtime";var gP=u1("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function k({className:P,variant:$,size:Z,asChild:q=!1,...X}){return d1(q?l1:"button",{className:U(gP({variant:$,size:Z,className:P})),"data-slot":"button",...X})}import*as Q0 from"@radix-ui/react-dialog";import{XIcon as r1}from"lucide-react";import{jsx as M0,jsxs as Q5}from"react/jsx-runtime";function XP({...P}){return M0(Q0.Root,{"data-slot":"dialog",...P})}function a1({...P}){return M0(Q0.Portal,{"data-slot":"dialog-portal",...P})}function n1({className:P,...$}){return M0(Q0.Overlay,{className:U("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",P),"data-slot":"dialog-overlay",...$})}function qP({className:P,children:$,...Z}){return Q5(a1,{"data-slot":"dialog-portal",children:[M0(n1,{}),Q5(Q0.Content,{className:U("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg max-h-[90%]",P),"data-slot":"dialog-content",...Z,children:[$,Q5(Q0.Close,{className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[M0(r1,{}),M0("span",{className:"sr-only",children:"Close"})]})]})]})}function QP({className:P,...$}){return M0("div",{className:U("flex flex-col gap-2 text-center sm:text-left",P),"data-slot":"dialog-header",...$})}function CP({className:P,...$}){return M0("div",{className:U("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",P),"data-slot":"dialog-footer",...$})}function YP({className:P,...$}){return M0(Q0.Title,{className:U("text-lg leading-none font-semibold",P),"data-slot":"dialog-title",...$})}function DP({className:P,...$}){return M0(Q0.Description,{className:U("text-muted-foreground text-sm",P),"data-slot":"dialog-description",...$})}import{useContext as t5}from"react";import{createContext as t1}from"react";var EP=t1(void 0);import{createContext as s1}from"react";var jP=s1(void 0);import{useCallback as A0,useMemo as $4,useState as r5}from"react";import{useCallback as e,useEffect as K5,useMemo as u5,useRef as z5,useState as e0}from"react";import{RRule as e1}from"rrule";var xP=(P)=>{return new Date(Date.UTC(P.year(),P.month(),P.date(),P.hour(),P.minute(),P.second(),P.millisecond()))},P4=(P,$)=>{return $.year(P.getUTCFullYear()).month(P.getUTCMonth()).date(P.getUTCDate()).hour(P.getUTCHours()).minute(P.getUTCMinutes()).second(P.getUTCSeconds()).millisecond(P.getUTCMilliseconds())},_P=(P)=>{return Boolean(P.rrule||P.recurrenceId||P.uid)},R0=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},Y5=({event:P,currentEvents:$,startDate:Z,endDate:q})=>{if(!P.rrule)return[];try{let X=xP(P.start),f=P.rrule.until?xP(M(P.rrule.until)):void 0,Y={...P.rrule,dtstart:X,until:f},Q=new e1(Y),J=R0(P),K=$.filter((A)=>A.recurrenceId&&R0(A)===J),L=P.end.diff(P.start),z=xP(Z.subtract(L,"millisecond")),p=xP(q);return Q.between(z,p,!0).map((A,W)=>{let _=P4(A,P.start),N=K.find((h)=>JP(h.recurrenceId)?.isSame(_));if(N)return{...P,...N};let O=P.end.diff(P.start),S=_.add(O,"millisecond"),b=`${P.id}_${W}`,B=R0(P);return{...P,id:b,start:_,end:S,uid:B,rrule:void 0}}).filter((A)=>{if(P.exdates&&P.exdates.length>0){let N=A.start.toISOString();if(P.exdates?.includes(N))return!1}return A.start.isSameOrBefore(q)&&A.end.isSameOrAfter(Z)})}catch(X){throw Error(`Invalid RRULE options: ${JSON.stringify(P.rrule)}. Error: ${X instanceof Error?X.message:"Unknown error"}`)}},y5=({targetEvent:P,updates:$,currentEvents:Z,scope:q})=>{let X=[...Z],f=R0(P),Y=X.findIndex((J)=>{return R0(J)===f&&J.rrule&&!J.recurrenceId});if(Y===-1)throw Error("Base recurring event not found");let Q=X[Y];switch(q){case"this":{let J=P.start.toISOString(),L=[...Q.exdates||[],J],z={...Q,exdates:L};X[Y]=z;let p=`${P.id}_modified_${Date.now()}`,F={...j5(P,["width","height","top","left","right"]),...$,id:p,recurrenceId:J,uid:R0(Q),rrule:void 0};X.push(F);break}case"following":{let K=P.start.subtract(1,"day").endOf("day").toDate(),L={...Q,rrule:{...Q.rrule,until:K}};X[Y]=L;let z=Q.end.diff(Q.start),p=$.start||P.start,F=$.end||p.add(z),G=`${Q.id}_following`,A=`${G}@ilamy.calendar`,W={...Q,...$,rrule:{...Q.rrule,...$.rrule,dtstart:p.toDate()},id:G,uid:A,start:p,end:F,recurrenceId:void 0};X.push(W);break}case"all":{let J={...Q,...$};X[Y]=J;break}default:throw Error(`Invalid scope: ${q}. Must be 'this', 'following', or 'all'`)}return X},v5=({targetEvent:P,currentEvents:$,scope:Z})=>{let q=[...$],X=R0(P),f=q.findIndex((Q)=>{return R0(Q)===X&&Q.rrule&&!Q.recurrenceId});if(f===-1)throw Error("Base recurring event not found");let Y=q[f];switch(Z){case"this":{let Q=P.start.toISOString(),K=[...Y.exdates||[],Q],L={...Y,exdates:K};q[f]=L;break}case"following":{let J=P.start.subtract(1,"day").endOf("day").toDate(),K={...Y,rrule:{...Y.rrule,until:J}};q[f]=K;break}case"all":{let Q=R0(P);return q.filter((K)=>R0(K)!==Q)}default:throw Error(`Invalid scope: ${Z}. Must be 'this', 'following', or 'all'`)}return q};var _5={today:"Today",create:"Create",new:"New",update:"Update",delete:"Delete",cancel:"Cancel",export:"Export",event:"Event",events:"Events",newEvent:"New Event",title:"Title",description:"Description",location:"Location",allDay:"All day",startDate:"Start Date",endDate:"End Date",startTime:"Start Time",endTime:"End Time",color:"Color",createEvent:"Create Event",editEvent:"Edit Event",addNewEvent:"Add a new event to your calendar",editEventDetails:"Edit your event details",eventTitlePlaceholder:"Event title",eventDescriptionPlaceholder:"Event description (optional)",eventLocationPlaceholder:"Event location (optional)",repeat:"Repeat",repeats:"Repeats",customRecurrence:"Custom recurrence",daily:"Daily",weekly:"Weekly",monthly:"Monthly",yearly:"Yearly",interval:"Interval",repeatOn:"Repeat on",never:"Never",count:"Count",every:"Every",ends:"Ends",after:"After",occurrences:"occurrences",on:"On",editRecurringEvent:"Edit recurring event",deleteRecurringEvent:"Delete recurring event",editRecurringEventQuestion:"is a recurring event. How would you like to edit it?",deleteRecurringEventQuestion:"is a recurring event. How would you like to delete it?",thisEvent:"This event",thisEventDescription:"Only change this specific occurrence",thisAndFollowingEvents:"This and following events",thisAndFollowingEventsDescription:"Edit this and all future occurrences",allEvents:"All events",allEventsDescription:"Edit the entire recurring series",onlyChangeThis:"Only change this specific occurrence",changeThisAndFuture:"Change this and all future occurrences",changeEntireSeries:"Change the entire recurring series",onlyDeleteThis:"Only delete this specific occurrence",deleteThisAndFuture:"Delete this and all future occurrences",deleteEntireSeries:"Delete the entire recurring series",month:"Month",week:"Week",day:"Day",year:"Year",more:"more",resources:"Resources",resource:"Resource",time:"Time",date:"Date",noResourcesVisible:"No resources visible",addResourcesOrShowExisting:"Add resources or show existing ones",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat",january:"January",february:"February",march:"March",april:"April",may:"May",june:"June",july:"July",august:"August",september:"September",october:"October",november:"November",december:"December"};function Y0(P,$){let Z=P.startOf("week").day($),q=P.isBefore(Z)?Z.subtract(1,"week"):Z;return Array.from({length:7},(X,f)=>q.add(f,"day"))}function yP(P,$){let Z=Y0(P.startOf("month"),$);return Array.from({length:6},(q,X)=>{let f=Z[0].add(X,"week");return Y0(f,$)})}function c5(P){let $=P.daysInMonth(),Z=P.startOf("month");return Array.from({length:$},(q,X)=>Z.add(X,"day"))}function o5({referenceDate:P=M(),length:$=24}={}){let Z=P.startOf("day");return Array.from({length:$},(q,X)=>Z.hour(X).minute(0).second(0).millisecond(0))}var E0=1,i5=24,F0=24,KP=4,l5="bg-secondary text-muted-foreground pointer-events-none",j0={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6};var d5={day:"day",week:"week",month:"month",year:"year"},U5=(P,$,Z)=>{if($==="day")return{start:P.startOf("day"),end:P.endOf("day")};if($==="year")return{start:P.startOf("year"),end:P.endOf("year")};if($==="week"){let X=Y0(P,Z);return{start:X[0].startOf("day"),end:X[6].endOf("day")}}let q=yP(P,Z);return{start:q[0][0].startOf("day"),end:q[5][6].endOf("day")}},vP=(P)=>{let{events:$=[],firstDayOfWeek:Z=0,initialView:q="month",initialDate:X=M(),businessHours:f,onEventAdd:Y,onEventUpdate:Q,onEventDelete:J,onDateChange:K,onViewChange:L,locale:z,timezone:p,translations:F,translator:G}=P,[A,W]=e0(M.isDayjs(X)?X:M(X)),[_,N]=e0(q),[O,S]=e0($),[b,B]=e0(!1),[H,h]=e0(null),[o,l]=e0(null),[x,E]=e0(z||"en"),j=z5($),g=z5(p),a=z5(z),X0=u5(()=>{if(G)return G;if(F)return(I)=>F[I]||I;return(I)=>_5[I]||I},[F,G]),z0=e((I,m)=>{let u=[];for(let Z0 of O)if(Z0.rrule)u.push(...Y5({event:Z0,currentEvents:O,startDate:I,endDate:m}));else{let w=Z0.start.isSameOrAfter(I)&&Z0.start.isSameOrBefore(m),i=Z0.end.isSameOrAfter(I)&&Z0.end.isSameOrBefore(m),B0=Z0.start.isBefore(I)&&Z0.end.isAfter(m);if(w||i||B0)u.push(Z0)}return u},[O]),R=e(()=>{return U5(A,_,Z)},[A,_,Z]),n=u5(()=>{let{start:I,end:m}=R();return z0(I,m)},[z0,R]);K5(()=>{if($!==j.current)S($),j.current=$},[$]),K5(()=>{if(z&&z!==a.current)E(z),M.locale(z),W((I)=>I.locale(z)),a.current=z},[z]),K5(()=>{if(p&&p!==g.current)M.tz.setDefault(p),W((I)=>I.tz(p)),S((I)=>I.map((m)=>({...m,start:m.start.tz(p),end:m.end.tz(p)}))),g.current=p},[p]);let $0=e((I)=>{W(I);let m=U5(I,_,Z);K?.(I,m)},[K,_,Z]),t=e((I)=>$0(I),[$0]),q0=e((I)=>{let m=I===1?A.add(1,d5[_]):A.subtract(1,d5[_]);$0(m)},[A,_,$0]),s=e(()=>q0(1),[q0]),c=e(()=>q0(-1),[q0]),fP=e(()=>$0(M()),[$0]),T0=e((I)=>{S((m)=>[...m,I]),Y?.(I)},[Y]),n0=e((I,m)=>{let u=O.find((w)=>w.id===I);if(!u)return;let Z0={...u,...m};S((w)=>w.map((i)=>i.id===I?Z0:i)),Q?.(Z0)},[O,Q]),t0=e((I,m,u)=>{Q?.({...I,...m}),S(y5({targetEvent:I,updates:m,currentEvents:O,scope:u.scope}))},[O,Q]),s0=e((I,m)=>{J?.(I),S(v5({targetEvent:I,currentEvents:O,scope:m.scope}))},[O,J]),T=e((I)=>{let m=O.find((u)=>u.id===I);if(!m)return;S((u)=>u.filter((Z0)=>Z0.id!==I)),J?.(m)},[O,J]),U0=e((I)=>{if(I?.start)l(I.start);let m=I?.start??A;h({title:X0("newEvent"),start:m,end:I?.end??m.add(1,"hour"),resourceId:I?.resourceId,description:"",allDay:I?.allDay??!1}),B(!0)},[A,X0]),w0=e(()=>{l(null),h(null),B(!1)},[]),H0=e((I)=>{N(I),L?.(I);let m=U5(A,I,Z);K?.(A,m)},[L,K,A,Z]),kP=e((I)=>{let m=I.uid;return O.find((u)=>(u.uid||`${u.id}@ilamy.calendar`)===m&&u.rrule)||null},[O]);return{currentDate:A,view:_,events:n,rawEvents:O,isEventFormOpen:b,selectedEvent:H,selectedDate:o,firstDayOfWeek:Z,dayMaxEvents:KP,currentLocale:x,businessHours:f,setCurrentDate:W,selectDate:t,setView:H0,nextPeriod:s,prevPeriod:c,today:fP,addEvent:T0,updateEvent:n0,updateRecurringEvent:t0,deleteEvent:T,deleteRecurringEvent:s0,openEventForm:U0,closeEventForm:w0,setSelectedEvent:h,setIsEventFormOpen:B,setSelectedDate:l,getEventsForDateRange:z0,findParentRecurringEvent:kP,t:X0}};import{jsx as Z4}from"react/jsx-runtime";var a5=(P)=>{if(P.resourceIds)return P.resourceIds;if(P.resourceId!==void 0)return[P.resourceId];return[]},n5=({children:P,events:$=[],resources:Z=[],firstDayOfWeek:q=0,initialView:X="month",initialDate:f,renderEvent:Y,onEventClick:Q,onCellClick:J,onViewChange:K,onEventAdd:L,onEventUpdate:z,onEventDelete:p,onDateChange:F,locale:G,timezone:A,disableCellClick:W,disableEventClick:_,disableDragAndDrop:N,dayMaxEvents:O,eventSpacing:S=1,stickyViewHeader:b=!0,viewHeaderClassName:B="",headerComponent:H,headerClassName:h,translations:o,translator:l,renderResource:x,renderEventForm:E,businessHours:j,timeFormat:g="12-hour",classesOverride:a,orientation:X0="horizontal",renderCurrentTimeIndicator:z0,renderHour:R,hideNonBusinessHours:n=!1,hiddenDays:$0})=>{let[t]=r5(Z),[q0,s]=r5(new Set(Z.map((w)=>w.id))),c=vP({events:$,firstDayOfWeek:q,initialView:X,initialDate:f,businessHours:j,onEventAdd:L,onEventUpdate:z,onEventDelete:p,onDateChange:F,onViewChange:K,locale:G,timezone:A,translations:o,translator:l}),fP=A0((w)=>{s((i)=>{let B0=new Set(i);if(B0.has(w))B0.delete(w);else B0.add(w);return B0})},[]),T0=A0((w)=>{s((i)=>new Set(i).add(w))},[]),n0=A0((w)=>{s((i)=>{let B0=new Set(i);return B0.delete(w),B0})},[]),t0=A0(()=>{s(new Set(t.map((w)=>w.id)))},[t]),s0=A0(()=>{s(new Set)},[]),T=A0((w)=>{return c.events.filter((i)=>{if(i.resourceIds)return i.resourceIds.includes(w);return i.resourceId===w})},[c.events]),U0=A0((w)=>{return c.events.filter((i)=>{return a5(i).some((w1)=>w.includes(w1))})},[c.events]),w0=A0((w)=>{return t.find((i)=>i.id===w)},[t]),H0=A0(()=>{return t.filter((w)=>q0.has(w.id))},[t,q0]),kP=A0((w)=>{return Boolean(w.resourceIds&&w.resourceIds.length>1)},[]),I=A0((w)=>{c.setSelectedEvent(w),c.setIsEventFormOpen(!0)},[c]),m=A0((w)=>{if(_)return;if(Q)Q(w);else I(w)},[_,Q,I]),u=A0((w)=>{if(W)return;if(J)J(w);else{let i={title:c.t("newEvent"),start:w.start,end:w.end,description:"",allDay:!1};if(w.resourceId!==void 0)i.resourceId=w.resourceId;c.setSelectedEvent(i),c.setSelectedDate(w.start),c.setIsEventFormOpen(!0)}},[J,W,c]),Z0=$4(()=>({...c,view:c.view,setView:c.setView,events:c.events,rawEvents:c.rawEvents,resources:t,visibleResources:q0,toggleResourceVisibility:fP,showResource:T0,hideResource:n0,showAllResources:t0,hideAllResources:s0,getEventsForResource:T,getEventsForResources:U0,getResourceById:w0,getVisibleResources:H0,isEventCrossResource:kP,getEventResourceIds:a5,onEventClick:m,onCellClick:u,headerComponent:H,headerClassName:h,renderEvent:Y,renderResource:x,renderEventForm:E,locale:G,timezone:A,disableCellClick:W,disableEventClick:_,disableDragAndDrop:N,dayMaxEvents:O,eventSpacing:S,stickyViewHeader:b,viewHeaderClassName:B,businessHours:j,timeFormat:g,classesOverride:a,orientation:X0,renderCurrentTimeIndicator:z0,renderHour:R,hideNonBusinessHours:n,hiddenDays:$0}),[c,t,q0,fP,T0,n0,t0,s0,T,U0,w0,H0,kP,m,u,Y,x,E,G,A,W,_,N,O,S,b,B,H,h,j,g,a,X0,z0,R,n,$0]);return Z4(jP.Provider,{value:Z0,children:P})};function V(P){let $=t5(jP),Z=t5(EP),q=$||Z;if(!q)throw Error("useSmartCalendarContext must be used within a CalendarProvider or ResourceCalendarProvider");return P?P(q):q}function f4(){let P=V();return{currentDate:P.currentDate,view:P.view,events:P.events,isEventFormOpen:P.isEventFormOpen,selectedEvent:P.selectedEvent,selectedDate:P.selectedDate,firstDayOfWeek:P.firstDayOfWeek,resources:P.resources||[],setCurrentDate:P.setCurrentDate,selectDate:P.selectDate,setView:P.setView,nextPeriod:P.nextPeriod,prevPeriod:P.prevPeriod,today:P.today,addEvent:P.addEvent,updateEvent:P.updateEvent,deleteEvent:P.deleteEvent,openEventForm:P.openEventForm,closeEventForm:P.closeEventForm,getEventsForResource:P.getEventsForResource,businessHours:P.businessHours}}import{jsx as W0,jsxs as PP}from"react/jsx-runtime";function FP({isOpen:P,onClose:$,onConfirm:Z,operationType:q,eventTitle:X}){let{t:f}=V((J)=>({t:J.t})),Y=(J)=>{Z(J),$()},Q=q==="edit";return W0(XP,{onOpenChange:$,open:P,children:PP(qP,{className:"max-w-md",children:[PP(QP,{children:[W0(YP,{children:Q?f("editRecurringEvent"):f("deleteRecurringEvent")}),PP(DP,{children:['"',X,'"'," ",Q?f("editRecurringEventQuestion"):f("deleteRecurringEventQuestion")]})]}),PP("div",{className:"space-y-3",children:[W0(k,{className:"w-full justify-start h-auto p-4",onClick:()=>Y("this"),variant:"outline",children:PP("div",{className:"text-left",children:[W0("div",{className:"font-medium",children:f("thisEvent")}),W0("div",{className:"text-sm text-muted-foreground",children:Q?f("onlyChangeThis"):f("onlyDeleteThis")})]})}),W0(k,{className:"w-full justify-start h-auto p-4",onClick:()=>Y("following"),variant:"outline",children:PP("div",{className:"text-left",children:[W0("div",{className:"font-medium",children:f("thisAndFollowingEvents")}),W0("div",{className:"text-sm text-muted-foreground",children:Q?f("changeThisAndFuture"):f("deleteThisAndFuture")})]})}),W0(k,{className:"w-full justify-start h-auto p-4",onClick:()=>Y("all"),variant:"outline",children:PP("div",{className:"text-left",children:[W0("div",{className:"font-medium",children:f("allEvents")}),W0("div",{className:"text-sm text-muted-foreground",children:Q?f("changeEntireSeries"):f("deleteEntireSeries")})]})})]}),W0(CP,{children:W0(k,{onClick:$,variant:"outline",children:f("cancel")})})]})})}var s5=(P,$)=>{let{active:Z,over:q}=P;if(!Z||!q||!$)return null;let X=q.data.current||{},f=X.type==="time-cell",{resourceId:Y,allDay:Q}=X,J;if(f){let{date:p,hour:F=0,minute:G=0}=X;J=M(p).hour(F).minute(G)}else{let{date:p}=X;J=M(p)}let K=$.end.diff($.start,"second"),L=J.add(K,"second");if(L.isSame(L.startOf("day")))L=L.subtract(1,"day").endOf("day");let z={start:J,end:L,resourceId:Y,allDay:f?!1:Q??$.allDay};return{activeEvent:$,updates:z}};import{DragOverlay as J4}from"@dnd-kit/core";import{snapCenterToCursor as X4}from"@dnd-kit/modifiers";import{useImperativeHandle as q4,useState as Q4}from"react";import{jsx as e5}from"react/jsx-runtime";var P2=({ref:P})=>{let[$,Z]=Q4(null);return q4(P,()=>({setActiveEvent:Z})),e5(J4,{modifiers:[X4],children:$&&e5("div",{className:U("cursor-grab truncate rounded bg-amber-200 p-2 text-[10px] shadow-lg sm:text-xs w-20",$.backgroundColor||"bg-blue-500",$.color||"text-white"),children:$?.title})})};import{jsx as f2,jsxs as J2,Fragment as G4}from"react/jsx-runtime";function cP({children:P}){let $=Z2(null),Z=Z2(null),{updateEvent:q,updateRecurringEvent:X,disableDragAndDrop:f}=V((_)=>({updateEvent:_.updateEvent,updateRecurringEvent:_.updateRecurringEvent,disableDragAndDrop:_.disableDragAndDrop})),[Y,Q]=L4({isOpen:!1,event:null,updates:null}),J=$2(_4,{activationConstraint:{distance:2}}),K=$2(z4,{activationConstraint:{delay:100,tolerance:5}}),L=U4(J,K),z=(_,N)=>{if(!_||!_.id)return;if(!N||Object.keys(N).length===0)return;if(_P(_))Q({isOpen:!0,event:_,updates:N});else q(_.id,N)},p=(_)=>{if(!Y.event||!Y.updates){Q({isOpen:!1,event:null,updates:null});return}try{X(Y.event,Y.updates,{scope:_,eventDate:Y.event.start})}catch{}finally{Q({isOpen:!1,event:null,updates:null})}},F=()=>{Q({isOpen:!1,event:null,updates:null})},G=(_)=>{let{active:N}=_;if(N.data.current?.type==="calendar-event")Z.current?.setActiveEvent(N.data.current.event),$.current=N.data.current.event},A=(_)=>{let N=s5(_,$.current);if(N){let{activeEvent:O,updates:S}=N;z(O,S)}$.current=null,Z.current?.setActiveEvent(null)},W=(_)=>{$.current=null};if(f)return P;return J2(G4,{children:[J2(Y4,{collisionDetection:K4,onDragCancel:W,onDragEnd:A,onDragStart:G,sensors:L,children:[P,f2(P2,{ref:Z})]}),f2(FP,{eventTitle:Y.event?.title||"",isOpen:Y.isOpen,onClose:F,onConfirm:p,operationType:"edit"})]})}import{useEffect as o4,useMemo as i4,useState as l0}from"react";import*as oP from"@radix-ui/react-checkbox";import{CheckIcon as A4}from"lucide-react";import{jsx as L5}from"react/jsx-runtime";function x0({className:P,...$}){return L5(oP.Root,{className:U("peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",P),"data-slot":"checkbox",...$,children:L5(oP.Indicator,{className:"flex items-center justify-center text-current transition-none","data-slot":"checkbox-indicator",children:L5(A4,{className:"size-3.5"})})})}import{PopoverClose as O4}from"@radix-ui/react-popover";import{Calendar as B4}from"lucide-react";import{useEffect as M4,useRef as R4,useState as I4}from"react";import{ChevronDownIcon as W4,ChevronLeftIcon as N4,ChevronRightIcon as p4}from"lucide-react";import*as iP from"react";import{DayPicker as F4,getDefaultClassNames as X2}from"react-day-picker";import{jsx as y0}from"react/jsx-runtime";function q2({className:P,classNames:$,showOutsideDays:Z=!0,captionLayout:q="label",buttonVariant:X="ghost",formatters:f,components:Y,...Q}){let J=X2();return y0(F4,{captionLayout:q,className:U("bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,P),classNames:{root:U("w-fit",J.root),months:U("flex gap-4 flex-col md:flex-row relative",J.months),month:U("flex flex-col w-full gap-4",J.month),nav:U("flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",J.nav),button_previous:U(gP({variant:X}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",J.button_previous),button_next:U(gP({variant:X}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",J.button_next),month_caption:U("flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)",J.month_caption),dropdowns:U("w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5",J.dropdowns),dropdown_root:U("relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md",J.dropdown_root),dropdown:U("absolute bg-popover inset-0 opacity-0",J.dropdown),caption_label:U("select-none font-medium",q==="label"?"text-sm":"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5",J.caption_label),table:"w-full border-collapse",weekdays:U("flex",J.weekdays),weekday:U("text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none",J.weekday),week:U("flex w-full mt-2",J.week),week_number_header:U("select-none w-(--cell-size)",J.week_number_header),week_number:U("text-[0.8rem] select-none text-muted-foreground",J.week_number),day:U("relative w-full h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none",Q.showWeekNumber?"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md":"[&:first-child[data-selected=true]_button]:rounded-l-md",J.day),range_start:U("rounded-l-md bg-accent",J.range_start),range_middle:U("rounded-none",J.range_middle),range_end:U("rounded-r-md bg-accent",J.range_end),today:U("bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",J.today),outside:U("text-muted-foreground aria-selected:text-muted-foreground",J.outside),disabled:U("text-muted-foreground opacity-50",J.disabled),hidden:U("invisible",J.hidden),...$},components:{Root:({className:K,rootRef:L,...z})=>{return y0("div",{className:U(K),"data-slot":"calendar",ref:L,...z})},Chevron:({className:K,orientation:L,...z})=>{if(L==="left")return y0(N4,{className:U("size-4",K),...z});if(L==="right")return y0(p4,{className:U("size-4",K),...z});return y0(W4,{className:U("size-4",K),...z})},DayButton:V4,WeekNumber:({children:K,...L})=>{return y0("td",{...L,children:y0("div",{className:"flex size-(--cell-size) items-center justify-center text-center",children:K})})},...Y},formatters:{formatMonthDropdown:(K)=>K.toLocaleString("default",{month:"short"}),...f},showOutsideDays:Z,...Q})}function V4({className:P,day:$,modifiers:Z,...q}){let X=X2(),f=iP.useRef(null);return iP.useEffect(()=>{if(Z.focused)f.current?.focus()},[Z.focused]),y0(k,{className:U("data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70",X.day,P),"data-day":$.date.toLocaleDateString(),"data-range-end":Z.range_end,"data-range-middle":Z.range_middle,"data-range-start":Z.range_start,"data-selected-single":Z.selected&&!Z.range_start&&!Z.range_end&&!Z.range_middle,ref:f,size:"icon",variant:"ghost",...q})}import*as m0 from"@radix-ui/react-popover";import{jsx as lP}from"react/jsx-runtime";function v0({...P}){return lP(m0.Root,{"data-slot":"popover",...P})}function c0({...P}){return lP(m0.Trigger,{"data-slot":"popover-trigger",...P})}function o0({className:P,align:$="center",sideOffset:Z=4,...q}){return lP(m0.Portal,{children:lP(m0.Content,{align:$,className:U("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",P),"data-slot":"popover-content",sideOffset:Z,...q})})}import{jsx as zP,jsxs as G5}from"react/jsx-runtime";function VP({date:P,closeOnSelect:$,onChange:Z,label:q="Pick a date",className:X,disabled:f}){let Y=R4(null),[Q,J]=I4(P);M4(()=>{J(P)},[P]);let K=(L)=>{if(J(L),$)Y.current?.click();Z?.(L)};return zP("div",{className:X,children:G5(v0,{children:[zP(c0,{asChild:!0,children:G5(k,{className:U("data-[empty=true]:text-muted-foreground w-full justify-start text-left font-normal"),"data-empty":!P,variant:"outline",children:[zP(B4,{}),Q?M(Q).format("MMM D, YYYY"):zP("span",{children:q})]})}),G5(o0,{align:"start",className:"w-auto p-0",children:[zP(O4,{ref:Y}),zP(q2,{captionLayout:"dropdown",defaultMonth:Q,disabled:f,mode:"single",onSelect:K,selected:Q})]})]})})}import{jsx as S4}from"react/jsx-runtime";function k0({className:P,type:$,...Z}){return S4("input",{className:U("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",P),"data-slot":"input",type:$,...Z})}import*as Q2 from"@radix-ui/react-label";import{jsx as b4}from"react/jsx-runtime";function d({className:P,...$}){return b4(Q2.Root,{className:U("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",P),"data-slot":"label",...$})}import*as I0 from"@radix-ui/react-scroll-area";import{jsx as OP,jsxs as T4}from"react/jsx-runtime";function S0({className:P,children:$,viewPortProps:Z,...q}){return T4(I0.Root,{className:U("relative",P),"data-slot":"scroll-area",...q,children:[OP(I0.Viewport,{...Z,className:U("focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",Z?.className),"data-slot":"scroll-area-viewport",children:$}),OP(h0,{}),OP(I0.Corner,{})]})}function h0({className:P,orientation:$="vertical",...Z}){return OP(I0.ScrollAreaScrollbar,{className:U("flex touch-none p-px transition-colors select-none",$==="vertical"&&"h-full w-2.5 border-l border-l-transparent",$==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent",P),"data-slot":"scroll-area-scrollbar",orientation:$,...Z,children:OP(I0.ScrollAreaThumb,{className:"bg-border relative flex-1 rounded-full","data-slot":"scroll-area-thumb"})})}import{Clock as H4}from"lucide-react";import{useEffect as m4,useRef as _2,useState as A5}from"react";import{useMemo as w4}from"react";function Y2({timeFormat:P="12-hour",minTime:$="00:00",maxTime:Z="23:45"}){return{timeOptions:w4(()=>{let f=[],[Y,Q]=$.split(":").map(Number),[J,K]=Z.split(":").map(Number),L=Y*60+Q,z=J*60+K;for(let p=L;p<=z;p+=15){let F=Math.floor(p/60),G=p%60,A=`${F.toString().padStart(2,"0")}:${G.toString().padStart(2,"0")}`;f.push(A)}return f},[$,Z]),formatTime:(f)=>{let[Y,Q]=f.split(":").map(Number),J=Y>=12?"PM":"AM",K=Y===0?12:Y>12?Y-12:Y;if(P==="24-hour")return`${Y.toString().padStart(2,"0")}:${Q.toString().padStart(2,"0")}`;return`${K}:${Q.toString().padStart(2,"0")} ${J}`}}}import{jsx as i0,jsxs as W5}from"react/jsx-runtime";var k4=(P)=>{P.stopPropagation()};function N5({value:P,onChange:$,minTime:Z="00:00",maxTime:q="23:45",timeFormat:X="12-hour",placeholder:f="Select time...",className:Y,disabled:Q=!1,name:J}){let[K,L]=A5(!1),[z,p]=A5(""),F=_2(null),G=_2(null),[A,W]=A5(0),{timeOptions:_,formatTime:N}=Y2({timeFormat:X,minTime:Z,maxTime:q}),O=_.filter((B)=>{return N(B).toLowerCase().includes(z.toLowerCase())}),S=(B)=>{$(B),L(!1),p("")};m4(()=>{if(K){if(G.current)W(G.current.offsetWidth);setTimeout(()=>{F.current?.focus()},0)}},[K]);let b=P?N(P):f;return W5(v0,{onOpenChange:L,open:K,children:[i0(c0,{asChild:!0,children:W5(k,{"aria-controls":"time-picker-listbox","aria-expanded":K,className:U("w-full justify-start",Y),"data-testid":`time-picker-${J}`,disabled:Q,ref:G,role:"combobox",variant:"outline",children:[i0(H4,{className:"mr-2 h-4 w-4"}),b]})}),W5(o0,{align:"start",className:"p-0",style:{width:A},children:[i0("div",{className:"p-2 border-b",children:i0(k0,{className:"h-8",onChange:(B)=>p(B.target.value),placeholder:"Search time...",ref:F,value:z})}),i0(S0,{className:"h-[200px]",onWheel:k4,children:i0("div",{className:"p-1",children:O.length===0?i0("div",{className:"py-6 text-center text-sm text-muted-foreground",children:"N/A"}):O.map((B)=>{let H=N(B);return i0("button",{className:U("relative flex w-full cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground",B===P&&"bg-accent text-accent-foreground"),onClick:()=>S(B),type:"button",children:H},B)})})})]})]})}var p5=(P,$)=>{if(!$)return!0;let Z=!1;return UP($,{date:P,onMatch:()=>{Z=!0}}),Z},K2=({date:P,hour:$,minute:Z=0,businessHours:q})=>{if(!q)return!0;if($===void 0)return p5(P,q);let X=!1,f=$*60+Z;return UP(q,{date:P,onMatch:(Y)=>{let Q=Y.startTime??9,J=Y.endTime??17,K=Q*60,L=J*60;if(f>=K&&f<L)X=!0}}),X},UP=(P,$)=>{let{date:Z,onMatch:q}=$;if(!P)return;let X=Array.isArray(P)?P:[P];for(let f of X)if(Z&&f.daysOfWeek){let Y=Z.day();if(f.daysOfWeek.some((Q)=>j0[Q]===Y))q(f)}else q(f)},uP=(P)=>{let{allDates:$,businessHours:Z,resourceBusinessHours:q=[],hideNonBusinessHours:X}=P,f=24,Y=0,Q=!1,J=(K)=>{Q=!0,f=Math.min(f,K.startTime??9),Y=Math.max(Y,K.endTime??17)};for(let K of $){UP(Z,{date:K,onMatch:J});for(let L of q)UP(L,{date:K,onMatch:J})}if(!Q&&X){UP(Z,{onMatch:J});for(let K of q)UP(K,{onMatch:J});if(!Q)f=9,Y=17,Q=!0}return{minStart:f,maxEnd:Y,hasBusinessHours:Q}};var F5=(P,$,Z)=>{let[q,X]=$.split(":").map(Number),f=M(P).hour(q).minute(X);return Z?f.hour(0).minute(0):f},z2=(P,$,Z)=>{let[q,X]=$.split(":").map(Number),f=M(P).hour(q).minute(X);return Z?f.hour(23).minute(59):f},V5=(P,$)=>{if(!$)return{min:"00:00",max:"23:59"};let Z=M(P),{minStart:q,maxEnd:X,hasBusinessHours:f}=uP({allDates:[Z],businessHours:$,hideNonBusinessHours:!1});if(!f)return{min:"00:00",max:"23:59"};return{min:`${q.toString().padStart(2,"0")}:00`,max:`${(X-1).toString().padStart(2,"0")}:45`}};import{useEffect as E4,useMemo as j4,useState as B2}from"react";import{RRule as K0}from"rrule";import{jsx as dP}from"react/jsx-runtime";function U2({className:P,...$}){return dP("div",{className:U("text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm",P),"data-slot":"card",...$})}function L2({className:P,...$}){return dP("div",{className:U("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 p-4 pb-0 has-data-[slot=card-action]:grid-cols-[1fr_auto]",P),"data-slot":"card-header",...$})}function G2({className:P,...$}){return dP("div",{className:U("leading-none font-semibold",P),"data-slot":"card-title",...$})}function A2({className:P,...$}){return dP("div",{className:U("p-4 pt-0",P),"data-slot":"card-content",...$})}import*as D from"@radix-ui/react-select";import{CheckIcon as h4,ChevronDownIcon as W2,ChevronUpIcon as g4}from"lucide-react";import{jsx as f0,jsxs as O5}from"react/jsx-runtime";function N2({...P}){return f0(D.Root,{"data-slot":"select",...P})}function p2({...P}){return f0(D.Value,{"data-slot":"select-value",...P})}function F2({className:P,size:$="default",children:Z,...q}){return O5(D.Trigger,{className:U("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",P),"data-size":$,"data-slot":"select-trigger",...q,children:[Z,f0(D.Icon,{asChild:!0,children:f0(W2,{className:"size-4 opacity-50"})})]})}function V2({className:P,children:$,position:Z="popper",align:q="center",...X}){return f0(D.Portal,{children:O5(D.Content,{align:q,className:U("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",Z==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",P),"data-slot":"select-content",position:Z,...X,children:[f0(C4,{}),f0(D.Viewport,{className:U("p-1",Z==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:$}),f0(D4,{})]})})}function O2({className:P,children:$,...Z}){return O5(D.Item,{className:U("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",P),"data-slot":"select-item",...Z,children:[f0("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:f0(D.ItemIndicator,{children:f0(h4,{className:"size-4"})})}),f0(D.ItemText,{children:$})]})}function C4({className:P,...$}){return f0(D.ScrollUpButton,{className:U("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-up-button",...$,children:f0(g4,{className:"size-4"})})}function D4({className:P,...$}){return f0(D.ScrollDownButton,{className:U("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-down-button",...$,children:f0(W2,{className:"size-4"})})}import{jsx as y,jsxs as _0}from"react/jsx-runtime";var B5={DAILY:K0.DAILY,WEEKLY:K0.WEEKLY,MONTHLY:K0.MONTHLY,YEARLY:K0.YEARLY},x4=Object.fromEntries(Object.entries(B5).map(([P,$])=>[$,P])),M2=[K0.SU,K0.MO,K0.TU,K0.WE,K0.TH,K0.FR,K0.SA],y4=["sun","mon","tue","wed","thu","fri","sat"],R2=(P)=>Math.max(1,Number.parseInt(P,10)||1),v4=(P,$)=>{if(!P)return $("customRecurrence");try{let Z=new K0(P).toText();return Z&&!Z.toLowerCase().includes("error")?Z.charAt(0).toUpperCase()+Z.slice(1):$("customRecurrence")}catch{return $("customRecurrence")}},I2=({value:P,onChange:$})=>{let{t:Z}=V((A)=>({t:A.t})),[q,X]=B2(!!P),[f,Y]=B2(()=>P||null),Q=j4(()=>y4.map((A,W)=>({value:M2[W],label:Z(A)})),[Z]);E4(()=>{if(X(!!P),P)Y(P)},[P]);let J=(A)=>{if(!f)return;let W={...f,...A};Y(W),$(q?W:null)},K=(A)=>{if(X(A),!A){$(null);return}if(f){$(f);return}let W={freq:K0.DAILY,interval:1};Y(W),$(W)},L=(A)=>{let W=f?.byweekday||[],_=M2[A],N=W.includes(_)?W.filter((O)=>O!==_):[...W,_];J({byweekday:N.length?N:void 0})},z=(A)=>{let W={count:void 0,until:void 0};if(A==="count")W.count=f?.count||1;if(A==="until")W.until=f?.until||M().add(1,"month").endOf("day").toDate();J(W)},p=f?.until?"until":f?.count?"count":"never",F=x4[f?.freq??K0.DAILY]||"DAILY",G=Array.isArray(f?.byweekday)?f.byweekday:f?.byweekday?[f.byweekday]:[];return _0(U2,{"data-testid":"recurrence-editor",children:[_0(L2,{className:"pb-3",children:[_0("div",{className:"flex items-center space-x-2",children:[y(x0,{checked:q,"data-testid":"toggle-recurrence",id:"recurring",onCheckedChange:K}),y(G2,{className:"text-sm",children:Z("repeat")})]}),q&&P&&y("p",{className:"text-xs text-muted-foreground",children:v4(P,Z)})]}),q&&y(A2,{className:"pt-0",children:_0("div",{className:"space-y-4",children:[_0("div",{className:"grid grid-cols-2 gap-4",children:[_0("div",{children:[y(d,{className:"text-xs",htmlFor:"frequency",children:Z("repeats")}),_0(N2,{onValueChange:(A)=>J({freq:B5[A]}),value:F,children:[y(F2,{className:"h-8","data-testid":"frequency-select",id:"frequency",children:y(p2,{})}),y(V2,{children:Object.keys(B5).map((A)=>y(O2,{value:A,children:Z(A.toLowerCase())},A))})]})]}),_0("div",{children:[y(d,{className:"text-xs",htmlFor:"interval",children:Z("every")}),y(k0,{className:"h-8",id:"interval",min:"1",onChange:(A)=>J({interval:R2(A.target.value)}),type:"number",value:f?.interval||1})]})]}),f?.freq===K0.WEEKLY&&_0("div",{children:[y(d,{className:"text-xs",children:Z("repeatOn")}),y("div",{className:"flex flex-wrap gap-1 mt-1",children:Q.map((A,W)=>_0("div",{className:"flex items-center space-x-1",children:[y(x0,{checked:G.includes(A.value),id:`day-${W}`,onCheckedChange:()=>L(W)}),y(d,{className:"text-xs cursor-pointer",htmlFor:`day-${W}`,children:A.label})]},A.label))})]}),_0("div",{children:[y(d,{className:"text-xs",children:Z("ends")}),_0("div",{className:"space-y-2 mt-1",children:[_0("div",{className:"flex items-center space-x-2",children:[y(x0,{checked:p==="never",id:"never",onCheckedChange:()=>z("never")}),y(d,{className:"text-xs",htmlFor:"never",children:Z("never")})]}),_0("div",{className:"flex items-center space-x-2",children:[y(x0,{checked:p==="count",id:"after",onCheckedChange:()=>z("count")}),y(d,{className:"text-xs",htmlFor:"after",children:Z("after")}),p==="count"&&y(k0,{className:"h-6 w-16 text-xs","data-testid":"count-input",min:"1",onChange:(A)=>J({count:R2(A.target.value)}),type:"number",value:f?.count||1}),y("span",{className:"text-xs",children:Z("occurrences")})]}),_0("div",{className:"flex items-center space-x-2",children:[y(x0,{checked:p==="until",id:"on",onCheckedChange:()=>z("until")}),y(d,{className:"text-xs",htmlFor:"on",children:Z("on")}),p==="until"&&y(VP,{className:"h-6",date:f?.until??void 0,onChange:(A)=>J({until:A?M(A).endOf("day").toDate():void 0})})]})]})]})]})})]})};import{useCallback as rP,useState as c4}from"react";function S2(P){let{updateRecurringEvent:$,deleteRecurringEvent:Z}=V((K)=>({updateRecurringEvent:K.updateRecurringEvent,deleteRecurringEvent:K.deleteRecurringEvent})),[q,X]=c4({isOpen:!1,operationType:"edit",event:null}),f=rP((K,L)=>{X({isOpen:!0,operationType:"edit",event:K,updates:L,onConfirm:(z)=>{$(K,L,{scope:z,eventDate:K.start})}})},[$]),Y=rP((K)=>{X({isOpen:!0,operationType:"delete",event:K,onConfirm:(L)=>{Z(K,{scope:L,eventDate:K.start})}})},[Z]),Q=rP(()=>{X({isOpen:!1,operationType:"edit",event:null})},[]),J=rP((K)=>{if(q.onConfirm)q.onConfirm(K);Q(),P?.()},[q,Q,P]);return{dialogState:q,openEditDialog:f,openDeleteDialog:Y,closeDialog:Q,handleConfirm:J}}import{jsx as v,jsxs as J0,Fragment as l4}from"react/jsx-runtime";var b2=[{value:"bg-blue-100 text-blue-800",label:"Blue"},{value:"bg-green-100 text-green-800",label:"Green"},{value:"bg-purple-100 text-purple-800",label:"Purple"},{value:"bg-red-100 text-red-800",label:"Red"},{value:"bg-yellow-100 text-yellow-800",label:"Yellow"},{value:"bg-pink-100 text-pink-800",label:"Pink"},{value:"bg-indigo-100 text-indigo-800",label:"Indigo"},{value:"bg-amber-100 text-amber-800",label:"Amber"},{value:"bg-emerald-100 text-emerald-800",label:"Emerald"},{value:"bg-sky-100 text-sky-800",label:"Sky"},{value:"bg-violet-100 text-violet-800",label:"Violet"},{value:"bg-rose-100 text-rose-800",label:"Rose"},{value:"bg-teal-100 text-teal-800",label:"Teal"},{value:"bg-orange-100 text-orange-800",label:"Orange"}],T2=({selectedEvent:P,onClose:$,onUpdate:Z,onDelete:q,onAdd:X})=>{let{dialogState:f,openEditDialog:Y,openDeleteDialog:Q,closeDialog:J,handleConfirm:K}=S2($),{findParentRecurringEvent:L,t:z,businessHours:p,timeFormat:F,getResourceById:G}=V((T)=>({findParentRecurringEvent:T.findParentRecurringEvent,t:T.t,businessHours:T.businessHours,timeFormat:T.timeFormat,getResourceById:T.getResourceById})),A=P?.start??M(),W=P?.end??M().add(1,"hour"),_=P?L(P):null,[N,O]=l0(A.toDate()),[S,b]=l0(W.toDate()),[B,H]=l0(P?.allDay||!1),[h,o]=l0(P?.color||b2[0].value),[l,x]=l0(A.format("HH:mm")),[E,j]=l0(W.format("HH:mm")),[g,a]=l0({title:P?.title||"",description:P?.description||"",location:P?.location||""}),[X0,z0]=l0(()=>{return P?.rrule||_?.rrule||null}),R=(T)=>{if(!T)return;if(O(T),M(T).isAfter(M(S)))b(T)},n=(T)=>{if(!T)return;if(b(T),T&&M(T).isBefore(M(N)))O(T)},$0=(T)=>{if(x(T),M(N).isSame(M(S),"day")&&T>E)j(T)},t=(T)=>{if(j(T),M(N).isSame(M(S),"day")&&T<l)x(T)},q0=(T)=>{let{name:U0,value:w0}=T.target;a((H0)=>({...H0,[U0]:w0}))};o4(()=>{if(B)j("23:59")},[B]);let s=(T)=>{T.preventDefault();let U0=F5(N,l,B),w0=z2(S,E,B),H0={id:P?.id||M().format("YYYYMMDDHHmmss"),title:g.title,start:U0,end:w0,resourceId:P?.resourceId,description:g.description,location:g.location,allDay:B,color:h,rrule:X0||void 0};if(P?.id&&_P(P)){Y(P,{title:g.title,start:U0,end:w0,description:g.description,location:g.location,allDay:B,color:h,rrule:X0||void 0});return}if(P?.id)Z?.(H0);else X?.(H0);$()},c=()=>{if(P?.id){if(_P(P)){Q(P);return}q?.(P),$()}},fP=(T)=>{if(!T){z0(null);return}let U0=F5(N,l,B);z0({...T,dtstart:U0.toDate()})},T0=i4(()=>{let T=P?.resourceId;if(T&&G){let U0=G(T);if(U0?.businessHours)return U0.businessHours}return p},[P?.resourceId,G,p]),n0=T0?(T)=>!p5(M(T),T0):void 0,t0=V5(N,T0),s0=V5(S,T0);return J0(l4,{children:[J0("form",{className:"flex flex-col flex-1 min-h-0",onSubmit:s,children:[v(S0,{className:"flex-1 min-h-0",children:J0("div",{className:"grid gap-3 sm:gap-4 p-1",children:[J0("div",{className:"grid gap-2",children:[v(d,{className:"text-xs sm:text-sm",htmlFor:"title",children:z("title")}),v(k0,{className:"h-8 text-sm sm:h-9",id:"title",name:"title",onChange:q0,placeholder:z("eventTitlePlaceholder"),required:!0,value:g.title})]}),J0("div",{className:"grid gap-1 sm:gap-2",children:[v(d,{className:"text-xs sm:text-sm",htmlFor:"description",children:z("description")}),v(k0,{className:"h-8 text-sm sm:h-9",id:"description",name:"description",onChange:q0,placeholder:z("eventDescriptionPlaceholder"),value:g.description})]}),J0("div",{className:"flex items-center space-x-2",children:[v(x0,{checked:B,id:"allDay",onCheckedChange:(T)=>H(T===!0)}),v(d,{className:"text-xs sm:text-sm",htmlFor:"allDay",children:z("allDay")})]}),J0("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[J0("div",{children:[v(d,{className:"text-xs sm:text-sm",children:z("startDate")}),v(VP,{className:"mt-1",closeOnSelect:!0,date:N,disabled:n0,onChange:R})]}),J0("div",{children:[v(d,{className:"text-xs sm:text-sm",children:z("endDate")}),v(VP,{className:"mt-1",closeOnSelect:!0,date:S,disabled:n0,onChange:n})]})]}),!B&&J0("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[J0("div",{children:[v(d,{className:"text-xs sm:text-sm",children:z("startTime")}),v(N5,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:t0.max,minTime:t0.min,name:"start-time",onChange:$0,timeFormat:F,value:l})]}),J0("div",{children:[v(d,{className:"text-xs sm:text-sm",children:z("endTime")}),v(N5,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:s0.max,minTime:s0.min,name:"end-time",onChange:t,timeFormat:F,value:E})]})]}),J0("div",{className:"grid gap-1 sm:gap-2",children:[v(d,{className:"text-xs sm:text-sm",children:z("color")}),v("div",{className:"flex flex-wrap gap-2",children:b2.map((T)=>v(k,{"aria-label":T.label,className:U(`${T.value} h-6 w-6 rounded-full sm:h-8 sm:w-8`,h===T.value&&"ring-2 ring-black ring-offset-1 sm:ring-offset-2"),onClick:()=>o(T.value),type:"button",variant:"ghost"},T.value))})]}),J0("div",{className:"grid gap-1 sm:gap-2",children:[v(d,{className:"text-xs sm:text-sm",htmlFor:"location",children:z("location")}),v(k0,{className:"h-8 text-sm sm:h-9",id:"location",name:"location",onChange:q0,placeholder:z("eventLocationPlaceholder"),value:g.location})]}),v(I2,{onChange:fP,value:X0})]})}),J0(CP,{className:"mt-4 shrink-0 flex flex-col-reverse gap-2 sm:flex-row sm:gap-0",children:[P?.id&&v(k,{className:"w-full sm:mr-auto sm:w-auto",onClick:c,size:"sm",type:"button",variant:"destructive",children:z("delete")}),J0("div",{className:"flex w-full gap-2 sm:w-auto",children:[v(k,{className:"flex-1 sm:flex-none",onClick:$,size:"sm",type:"button",variant:"outline",children:z("cancel")}),v(k,{className:"flex-1 sm:flex-none",size:"sm",type:"submit",children:P?.id?z("update"):z("create")})]})]})]}),v(FP,{eventTitle:f.event?.title||"",isOpen:f.isOpen,onClose:J,onConfirm:K,operationType:f.operationType})]})};import{jsx as aP,jsxs as w2}from"react/jsx-runtime";var nP=()=>{let{t:P,selectedEvent:$,isEventFormOpen:Z,closeEventForm:q,addEvent:X,updateEvent:f,deleteEvent:Y,renderEventForm:Q}=V((z)=>({t:z.t,selectedEvent:z.selectedEvent,isEventFormOpen:z.isEventFormOpen,closeEventForm:z.closeEventForm,addEvent:z.addEvent,updateEvent:z.updateEvent,deleteEvent:z.deleteEvent,renderEventForm:z.renderEventForm})),L={open:Z,onClose:q,selectedEvent:$,onAdd:X,onUpdate:(z)=>{f(z.id,z)},onDelete:(z)=>{Y(z.id)}};if(Q)return Q(L);return aP(XP,{onOpenChange:q,open:Z,children:w2(qP,{className:"flex flex-col h-[90vh] w-[90vw] max-w-[500px] p-4 sm:p-6 overflow-hidden gap-0",children:[w2(QP,{className:"mb-2 sm:mb-4 shrink-0",children:[aP(YP,{className:"text-base sm:text-lg",children:$?.id?P("editEvent"):P("createEvent")}),aP(DP,{className:"text-xs sm:text-sm",children:$?.id?P("editEventDetails"):P("addNewEvent")})]}),aP(T2,{...L})]})})};import{Calendar as Y3,Download as _3,Menu as K3,Plus as z3}from"lucide-react";import{useState as U3}from"react";import{RRule as u4}from"rrule";var M5=`\r
2
+ `,d4=["BEGIN:VTIMEZONE","TZID:UTC","BEGIN:STANDARD","DTSTART:19700101T000000","TZNAME:UTC","TZOFFSETFROM:+0000","TZOFFSETTO:+0000","END:STANDARD","END:VTIMEZONE"].join(M5),sP=(P)=>{return P.replaceAll("\\","\\\\").replaceAll(";","\\;").replaceAll(",","\\,").replaceAll(`
3
+ `,"\\n").replaceAll("\r","")},tP=(P,$=!1)=>{return $?P.format("YYYYMMDD"):P.utc().format("YYYYMMDD[T]HHmmss[Z]")},H2=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},r4=(P)=>{try{return new u4(P).toString().split(`
4
+ `).find((Z)=>Z.startsWith("RRULE:"))||""}catch{return""}},a4=(P)=>{let $=M().utc().format("YYYYMMDD[T]HHmmss[Z]"),Z=P.allDay?";VALUE=DATE":"",q=P.rrule?r4(P.rrule):"",X=P.exdates?.length?P.exdates.map((Q)=>tP(M(Q),P.allDay)).join(","):null,f=P.recurrenceId?tP(M(P.recurrenceId),P.allDay):null;return["BEGIN:VEVENT",`UID:${H2(P)}`,`DTSTART${Z}:${tP(P.start,P.allDay)}`,`DTEND${Z}:${tP(P.end,P.allDay)}`,`SUMMARY:${sP(P.title)}`,P.description&&`DESCRIPTION:${sP(P.description)}`,P.location&&`LOCATION:${sP(P.location)}`,q,X&&`EXDATE:${X}`,f&&`RECURRENCE-ID:${f}`,`DTSTAMP:${$}`,`CREATED:${$}`,`LAST-MODIFIED:${$}`,"STATUS:CONFIRMED","SEQUENCE:0","TRANSP:OPAQUE","END:VEVENT"].filter(Boolean).join(M5)},n4=(P)=>{let $=new Set;return P.filter((Z)=>{let q=H2(Z),X=Z.rrule&&!Z.recurrenceId,f=Z.recurrenceId&&!Z.rrule;if(X)return $.add(q),!0;if(f)return!0;return!Z.rrule&&!Z.recurrenceId&&!$.has(q)})},t4=(P,$="ilamy Calendar")=>{let Z=sP($),q=n4(P).map(a4);return["BEGIN:VCALENDAR","VERSION:2.0","PRODID:-//ilamy//ilamy Calendar//EN","CALSCALE:GREGORIAN","METHOD:PUBLISH",`X-WR-CALNAME:${Z}`,`X-WR-CALDESC:Exported from ${Z}`,d4,...q,"END:VCALENDAR"].join(M5)},m2=(P,$="calendar.ics",Z="ilamy Calendar")=>{let q=new Blob([t4(P,Z)],{type:"text/calendar;charset=utf-8"}),X=URL.createObjectURL(q),f=$.endsWith(".ics")?$:`${$}.ics`,Y=document.createElement("a");Y.href=X,Y.download=f,document.body.append(Y),Y.click(),Y.remove(),URL.revokeObjectURL(X)};import{ChevronDown as s4}from"lucide-react";import{useMemo as e4,useState as P3}from"react";import{jsx as P0,jsxs as P5,Fragment as eP}from"react/jsx-runtime";var $3=["january","february","march","april","may","june","july","august","september","october","november","december"],Z3=()=>{let{currentDate:P,view:$,selectDate:Z,t:q,firstDayOfWeek:X}=V((_)=>({currentDate:_.currentDate,view:_.view,selectDate:_.selectDate,t:_.t,firstDayOfWeek:_.firstDayOfWeek})),[f,Y]=P3(null),Q=e4(()=>$3.map((_)=>q(_)),[q]),J=P.year(),K=Array.from({length:11},(_,N)=>J-5+N),L=Y0(P,X),z=(_)=>{Z(_),Y(null)},p=()=>P0(eP,{children:Q.map((_,N)=>P0(k,{className:U("justify-start font-normal",P.month()===N&&"bg-primary/10"),onClick:()=>z(P.month(N)),variant:"ghost",children:_},_))}),F=()=>P0(eP,{children:K.map((_)=>P0(k,{className:U("justify-start font-normal",P.year()===_&&"bg-primary/10"),onClick:()=>z(P.year(_)),variant:"ghost",children:_},_))}),G=()=>P0(eP,{children:Array.from({length:7},(_,N)=>{let O=P.subtract(3,"week").add(N,"week"),S=Y0(O,X),b=S[0],B=S[6],H=O.isSame(P,"week"),h=b.month()!==B.month();return P0(k,{className:U("justify-start font-normal",H&&"bg-primary/10"),onClick:()=>z(b),variant:"ghost",children:P5("div",{className:"flex w-full items-center justify-between",children:[P0("span",{children:`${b.format("MMM D")} - ${B.format("D")}`}),h&&P0("span",{className:"ml-0.5 text-xs opacity-70",children:`${b.format("MMM")}-${B.format("MMM")}`})]})},b.format("YYYY-MM-DD"))})}),A=()=>{let _=P.startOf("month"),N=P.daysInMonth();return P0(eP,{children:Array.from({length:N},(O,S)=>{let b=_.date(S+1),B=b.isSame(P,"day"),H=b.isSame(M(),"day");return P0(k,{className:U("justify-start font-normal",B&&"bg-primary/10"),onClick:()=>z(b),variant:"ghost",children:P5("div",{className:"flex w-full items-center justify-between",children:[P0("span",{children:b.format("dddd, MMM D")}),H&&P0("span",{className:"bg-primary text-primary-foreground rounded-sm px-1! text-xs",children:q("today")})]})},b.format("YYYY-MM-DD"))})})};return[{id:"month",hidden:$==="year",title:P.format("MMMM"),render:p},{id:"year",hidden:!1,title:P.format("YYYY"),render:F},{id:"week",hidden:$!=="week",title:`${L[0].format("MMM D")} - ${L[6].format("MMM D")}`,render:G},{id:"day",hidden:$!=="day",title:P.format("dddd, D"),render:A}].filter((_)=>!_.hidden).map((_)=>P5(v0,{onOpenChange:(N)=>Y(N?_.id:null),open:f===_.id,children:[P0(c0,{asChild:!0,children:P5(k,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",variant:"ghost",children:[P0(C,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",transitionKey:`${_.id}-${P.format("YYYY-MM-DD")}`,children:_.title}),P0(s4,{className:"h-4 w-4"})]})}),P0(o0,{className:"w-40 p-0",children:P0("div",{className:"flex max-h-60 flex-col overflow-auto",children:_.render()})})]},_.id))},k2=Z3;import{ChevronLeft as f3,ChevronRight as J3}from"lucide-react";import{jsx as LP,jsxs as Q3}from"react/jsx-runtime";var X3=["day","week","month","year"],q3=({currentView:P,onChange:$,variant:Z="default",size:q="sm",className:X,onToday:f,onNext:Y,onPrevious:Q})=>{let{t:J,resources:K}=V((G)=>({t:G.t,resources:G.resources})),L=Z==="grid",z=K&&K.length>0,p=(G)=>{return U(L?"w-full":"",P===G&&"bg-primary/80")},F=(G)=>{return P===G?"default":"outline"};return Q3("div",{className:U(L?"grid grid-cols-2 gap-2":"flex gap-1",X),children:[LP(k,{onClick:Q,size:q,variant:"outline",children:LP(f3,{className:"h-4 w-4"})}),LP(k,{onClick:Y,size:q,variant:"outline",children:LP(J3,{className:"h-4 w-4"})}),X3.map((G)=>{if(z&&G==="year")return null;return LP(k,{className:p(G),onClick:()=>$(G),size:q,variant:F(G),children:J(G)},G)}),LP(k,{onClick:f,size:q,variant:"outline",children:J("today")})]})},R5=q3;import{jsx as r,jsxs as g0}from"react/jsx-runtime";var L3=({className:P=""})=>{let{view:$,setView:Z,nextPeriod:q,prevPeriod:X,today:f,openEventForm:Y,headerComponent:Q,headerClassName:J,rawEvents:K,t:L}=V((_)=>({view:_.view,setView:_.setView,nextPeriod:_.nextPeriod,prevPeriod:_.prevPeriod,today:_.today,openEventForm:_.openEventForm,headerComponent:_.headerComponent,headerClassName:_.headerClassName,rawEvents:_.rawEvents,t:_.t})),[z,p]=U3(!1),F=()=>p(!1),G=()=>{let _=`ilamy-calendar-${new Date().toISOString().split("T")[0]}.ics`;m2(K,_,"ilamy Calendar"),F()},A=()=>g0(k,{className:"flex items-center gap-1",onClick:()=>Y(),size:"sm",variant:"default",children:[r(z3,{className:"h-4 w-4"}),r("span",{className:"hidden @4xl:inline",children:L("new")})]}),W=({fullWidth:_=!1})=>g0(k,{className:U("flex items-center gap-1",_&&"w-full gap-2"),onClick:G,size:"sm",variant:"outline",children:[r(_3,{className:"h-4 w-4"}),_?`${L("export")} Calendar (.ics)`:r("span",{className:"hidden @4xl/base-header:inline",children:L("export")})]});if(Q)return Q;return r("div",{className:"@container/base-header w-full","data-testid":"calendar-header",children:g0("div",{className:U("flex justify-center @2xl/base-header:justify-between flex-wrap items-center gap-2",P,J),children:[g0("div",{className:"flex flex-wrap items-center justify-center gap-1 @2xl/base-header:justify-start",children:[r(Y3,{className:"h-5 w-5"}),r(k2,{})]}),g0("div",{className:"flex flex-wrap justify-start @xl/base-header:justify-center gap-1 @4xl/base-header:justify-end overflow-x-auto",children:[g0("div",{className:"hidden @md/base-header:flex items-center justify-start gap-1",children:[r(R5,{className:"justify-end",currentView:$,onChange:Z,onNext:q,onPrevious:X,onToday:f,variant:"default"}),r(A,{}),r(W,{})]}),g0("div",{className:"flex items-center justify-end gap-1 @md/base-header:hidden",children:[r(A,{}),g0(v0,{onOpenChange:p,open:z,children:[r(c0,{asChild:!0,children:r(k,{size:"sm",variant:"outline",children:r(K3,{className:"h-4 w-4"})})}),r(o0,{align:"end",className:"w-[240px] p-2",children:g0("div",{className:"space-y-2",children:[r(R5,{currentView:$,onChange:(_)=>{Z(_),F()},onNext:()=>{q(),F()},onPrevious:()=>{X(),F()},onToday:()=>{f(),F()},variant:"grid"}),r("div",{className:"pt-2 border-t",children:r(W,{fullWidth:!0})})]})})]})]})]})]})})},BP=L3;import{memo as C3}from"react";import{memo as v2,useMemo as w3}from"react";import{useMemo as I5}from"react";var h2=({days:P,events:$,dayMaxEvents:Z,dayNumberHeight:q=i5,gridType:X="day",eventSpacing:f=E0})=>{let Y=P.at(0),Q=P.at(-1);if(!Y||!Q)return[];let J=X==="hour"?Y.startOf("hour"):Y.startOf("day"),K=X==="hour"?Q.endOf("hour"):Q.endOf("day"),L=P.length,z=$.filter((_)=>_.end.diff(_.start,X)>0),p=$.filter((_)=>_.end.diff(_.start,X)===0),F=[...z].sort((_,N)=>{let O=_.start.diff(N.start);if(O!==0)return O;return N.end.diff(N.start)-_.end.diff(_.start)}),G=[...p].sort((_,N)=>_.start.diff(N.start)),A=[];for(let _=0;_<Z;_++){A[_]=[];for(let N=0;N<L;N++)A[_][N]={taken:!1,event:null}}let W=[];for(let _ of F){let N=M.max(_.start.startOf(X),J),O=X==="hour"?_.end.subtract(1,"minute"):_.end,S=M.min(O.startOf(X),K),b=Math.max(0,N.diff(J,X)),B=Math.min(L-1,S.diff(J,X)),H=_.start.startOf(X).isBefore(J),h=_.end.startOf(X).isAfter(K),o=!1,l=-1;for(let x=0;x<Z;x++){let E=!0;for(let j=b;j<=B;j++)if(A[x][j].taken){E=!1;break}if(E){l=x;break}}if(l!==-1){for(let E=b;E<=B;E++)A[l][E]={taken:!0,event:_};let x=B-b+1;W.push({left:b/L*100,width:x/L*100,top:q+f+l*(F0+f),height:F0,position:l,..._,isTruncatedStart:H,isTruncatedEnd:h}),o=!0}if(!o)for(let x=b+1;x<=B;x++){let E=-1;for(let j=0;j<Z;j++){let g=!0;for(let a=x;a<=B;a++)if(A[j][a].taken){g=!1;break}if(g){E=j;break}}if(E!==-1){for(let g=x;g<=B;g++)A[E][g]={taken:!0,event:_};let j=B-x+1;W.push({left:x/L*100,width:j/L*100,top:q+f+E*(F0+f),height:F0,position:E,..._,isTruncatedStart:!0,isTruncatedEnd:h}),o=!0;break}}}for(let _ of G){let N=M.max(_.start.startOf(X),J),O=Math.max(0,Math.min(L-1,N.diff(J,X))),S=!1,b=!1,B=-1;for(let H=0;H<Z;H++)if(!A[H][O].taken){B=H;break}if(B!==-1)A[B][O]={taken:!0,event:_},W.push({left:O/L*100,width:1/L*100,top:q+f+B*(F0+f),height:F0,position:B,..._,isTruncatedStart:!1,isTruncatedEnd:!1})}return W};var S5=({days:P,allDay:$,dayNumberHeight:Z,resourceId:q,gridType:X})=>{let{getEventsForDateRange:f,dayMaxEvents:Y,eventSpacing:Q,getEventsForResource:J}=V(),K=P.at(0),L=P.at(-1),z=K?.startOf("day"),p=L?.endOf("day"),F=I5(()=>{if(!z||!p)return[];let W=f(z,p);if(q){let _=J(q);W=W.filter((N)=>_.some((O)=>String(O.id)===String(N.id)))}if($)W=W.filter((_)=>!!_.allDay===$);return W},[f,J,z,p,q,$]),G=I5(()=>{let W=new Map;for(let _ of P){let N=_.format("YYYY-MM-DD"),O=_.startOf("day"),S=_.endOf("day"),b=F.filter((B)=>{let H=B.start.isSameOrAfter(O)&&B.start.isSameOrBefore(S),h=B.end.isSameOrAfter(O)&&B.end.isSameOrBefore(S),o=B.start.isBefore(O)&&B.end.isAfter(S);return H||h||o});W.set(N,b)}return W},[P,F]);return{positionedEvents:I5(()=>{return h2({days:P,events:F,dayMaxEvents:Y,dayNumberHeight:Z,eventSpacing:Q,gridType:X})},[P,Y,Z,Q,F,X]),dayEventsMap:G}};import R3,{memo as I3,useMemo as j2}from"react";import{jsx as G3}from"react/jsx-runtime";var g2=({date:P,locale:$="en",className:Z})=>{let q=P.isSame(M(),"day");return G3("div",{className:U("flex h-5 w-5 items-center justify-center rounded-full text-xs shrink-0",q&&"bg-primary text-primary-foreground font-medium",Z),"data-testid":q?"day-number-today":`day-number-${P.format("D")}`,children:P.format("D")})};import{useImperativeHandle as V3,useState as C2}from"react";import{useDraggable as A3}from"@dnd-kit/core";import{memo as W3}from"react";import{jsx as MP,jsxs as F3}from"react/jsx-runtime";var N3=(P,$)=>{if(P&&$)return"rounded-none";if(P)return"rounded-r-md rounded-l-none";if($)return"rounded-l-md rounded-r-none";return"rounded-md"};function p3({elementId:P,event:$,className:Z,style:q,disableDrag:X=!1}){let{onEventClick:f,renderEvent:Y,disableEventClick:Q,disableDragAndDrop:J}=V(),{attributes:K,listeners:L,setNodeRef:z,isDragging:p}=A3({id:P,data:{event:$,type:"calendar-event"},disabled:X||J}),F=()=>{let G=$,A=G.isTruncatedStart,W=G.isTruncatedEnd;return F3("div",{className:U($.backgroundColor||"bg-blue-500",$.color||"text-white","h-full w-full px-1 border-[1.5px] border-card text-left overflow-clip relative",N3(Boolean(A),Boolean(W))),style:{backgroundColor:$.backgroundColor,color:$.color},children:[A&&MP("div",{className:"absolute left-0 top-0 bottom-0 w-0.5 bg-foreground/25"}),MP("p",{className:U("text-[10px] font-semibold sm:text-xs mt-0.5",A&&"pl-1",W&&"pr-1"),children:$.title}),W&&MP("div",{className:"absolute right-0 top-0 bottom-0 w-0.5 bg-foreground/25"})]})};return MP(C,{className:U("truncate h-full w-full",X||J?Q?"cursor-default":"cursor-pointer":"cursor-grab",p&&!(X||J)&&"cursor-grabbing shadow-lg",Z),layout:!0,layoutId:P,onClick:(G)=>{G.stopPropagation(),f($)},ref:z,style:q,transitionKey:P,...K,...L,children:Y?Y($):MP(F,{})})}var GP=W3(p3,(P,$)=>{return P.elementId===$.elementId&&P.disableDrag===$.disableDrag&&P.className===$.className&&P.event===$.event});import{jsx as RP,jsxs as O3}from"react/jsx-runtime";var D2=({ref:P})=>{let[$,Z]=C2(!1),[q,X]=C2(null),{currentDate:f,firstDayOfWeek:Y}=V();V3(P,()=>({open:()=>Z(!0),close:()=>Z(!1),setSelectedDayEvents:(K)=>X(K)}));let J=f.startOf("month").clone();while(J.day()!==Y)J=J.subtract(1,"day");return RP(XP,{onOpenChange:Z,open:$,children:O3(qP,{className:"max-h-[80vh] max-w-md overflow-y-auto",children:[RP(QP,{children:RP(YP,{children:q?.day.format("MMMM D, YYYY")})}),RP("div",{className:"mt-4 space-y-3",children:q?.events.map((K)=>{return RP(GP,{className:"relative my-1 h-[30px]",elementId:`all-events-dialog-event-$${K.id}`,event:K},K.id)})})]})})};import{useDroppable as B3}from"@dnd-kit/core";import{jsx as M3}from"react/jsx-runtime";function E2({id:P,type:$,date:Z,hour:q,minute:X,resourceId:f,allDay:Y,children:Q,className:J,style:K,"data-testid":L,disabled:z=!1}){let{onCellClick:p,disableDragAndDrop:F,disableCellClick:G,classesOverride:A,view:W}=V(),{isOver:_,setNodeRef:N}=B3({id:P,data:{type:$,date:Z,hour:q,minute:X,resourceId:f,allDay:Y},disabled:F||z}),O=(S)=>{if(S.stopPropagation(),G||z)return;let b=Z.hour(q??0).minute(X??0),B=b.clone();if(q!==void 0&&X!==void 0)B=B.hour(q).minute(X+15);else if(q!==void 0)B=B.hour(q+1).minute(0);else B=B.hour(23).minute(59);p({start:b,end:B,resourceId:f,allDay:Y})};return M3("div",{className:U("droppable-cell",J,_&&!F&&!z&&"bg-accent",G||z?"cursor-default":"cursor-pointer",z&&(A?.disabledCell||l5)),"data-disabled":z.toString(),"data-testid":L,"data-view":W,onClick:O,ref:N,style:K,children:Q})}import{jsx as $5,jsxs as Z5,Fragment as x2}from"react/jsx-runtime";var S3=({day:P,hour:$,minute:Z,className:q="",resourceId:X,gridType:f="day",shouldRenderEvents:Y=!0,allDay:Q=!1,precomputedEvents:J,"data-testid":K,showDayNumber:L=!1,children:z})=>{let p=R3.useRef(null),{dayMaxEvents:F=0,getEventsForDateRange:G,currentDate:A,t:W,getEventsForResource:_,businessHours:N,currentLocale:O,eventSpacing:S,getResourceById:b}=V(),B=j2(()=>{if(!Y)return[];if(J)return J;let R=G(P.startOf(f),P.endOf(f));if(Q)R=R.filter((n)=>n.allDay);if(X){let n=_(X)??[];return R.filter(($0)=>n.some((t)=>String(t.id)===String($0.id)))}return R},[J,P,X,G,_,f,Y,Q]),H=(R,n)=>{p.current?.setSelectedDayEvents({day:R,events:n}),p.current?.open()},h=P.month()===A.month(),o=B.length-F,l=o>0,x=j2(()=>{if(X&&b){let R=b(X);if(R?.businessHours)return R.businessHours}return N},[X,b,N]),E=K2({date:P,hour:f==="hour"?P.hour():void 0,businessHours:x}),j=P.format("HH"),g=P.format("mm"),a=`day-cell-${P.format("YYYY-MM-DD")}`,X0=f==="hour"?`${a}-${j}-${g}`:a,z0=`day-cell-${P.toISOString()}${Q?"-allday":""}${X?`-resource-${X}`:""}`;return Z5(x2,{children:[$5(E2,{allDay:Q,className:U("cursor-pointer overflow-clip p-1 hover:bg-accent min-h-[60px] relative border-r last:border-r-0 only:border-r border-b",q),"data-testid":K||X0,date:P,disabled:!E||!h,hour:$,id:z0,minute:Z,resourceId:X,type:"day-cell",children:Z5("div",{className:"flex flex-col h-full w-full","data-testid":"grid-cell-content",style:{gap:`${S}px`},children:[L&&$5(g2,{date:P,locale:O}),Y&&Z5(x2,{children:[B.slice(0,F).map((R,n)=>$5("div",{className:"w-full shrink-0","data-testid":R?.title,style:{height:`${F0}px`}},`empty-${n}-${R.id}`)),l&&Z5("div",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs shrink-0 mt-1",onClick:(R)=>{R.stopPropagation(),H(P,B)},onKeyDown:(R)=>{if(R.key==="Enter"||R.key===" ")R.preventDefault(),R.stopPropagation(),H(P,B)},role:"button",tabIndex:0,children:["+",o," ",W("more")]})]}),z]})}),$5(D2,{ref:p})]})},IP=I3(S3);import{jsx as y2}from"react/jsx-runtime";var u0=({resource:P,className:$,children:Z,"data-testid":q})=>{let{renderResource:X}=V();return y2("div",{className:U("flex items-center justify-center p-2 border-r last:border-r-0",$),"data-testid":q,style:{color:P.color,backgroundColor:P.backgroundColor},children:X?X(P):Z??y2("div",{className:"text-sm font-medium truncate",children:P.title})})};import{memo as b3}from"react";import{jsx as b5}from"react/jsx-runtime";var T3=({days:P,resourceId:$,"data-testid":Z,positionedEvents:q})=>{let X=P.at(0)?.startOf("day");return b5("div",{className:"absolute inset-0 pointer-events-none z-10 overflow-clip","data-testid":Z,children:q.map((f)=>{let Y=`${f.id}-${f.position}-${X?.toISOString()}-${$??"no-resource"}`;return b5("div",{className:"absolute z-10 pointer-events-auto overflow-clip","data-left":f.left,"data-testid":`horizontal-event-${f.id}`,"data-top":f.top,"data-width":f.width,style:{left:`calc(${f.left}% + var(--spacing) * 0.25)`,width:`calc(${f.width}% - var(--spacing) * 1)`,top:`${f.top}px`,height:`${F0}px`},children:b5(GP,{className:"h-full w-full shadow",elementId:Y,event:f})},`${Y}-wrapper`)})})},T5=b3(T3);import{jsx as V0,jsxs as w5}from"react/jsx-runtime";var H3=({id:P,resource:$,gridType:Z="day",variant:q="resource",dayNumberHeight:X,className:f,columns:Y=[],allDay:Q,showDayNumber:J=!1,isLastRow:K=!1})=>{let{renderResource:L}=V(),z=q==="resource",p=Y.some((W)=>W.days),F=w3(()=>{if(p)return[];return Y.map((W)=>W.day).filter((W)=>Boolean(W))},[Y,p]),{positionedEvents:G,dayEventsMap:A}=S5({days:F,gridType:Z,resourceId:$?.id,dayNumberHeight:X,allDay:Q});return w5("div",{className:U("flex flex-1 relative",f),"data-testid":`horizontal-row-${P}`,children:[z&&$&&V0(u0,{className:"w-20 sm:w-40 sticky left-0 bg-background z-20 h-full","data-testid":`horizontal-row-label-${$.id}`,resource:$,children:L?L($):V0("div",{className:"wrap-break-word text-sm",children:$.title})}),w5("div",{className:"relative flex-1 flex",children:[V0("div",{className:"flex w-full",children:Y.map((W,_)=>{if(W.days)return V0(m3,{allDay:Q,col:W,dayNumberHeight:X,gridType:Z,id:P,isLastCol:_===Y.length-1,isLastRow:K,resourceId:$?.id,showDayNumber:J},W.id);return W.day?V0(IP,{allDay:Q,className:U("flex-1 w-20",K&&"border-b-0",W.className),day:W.day,gridType:Z,hour:Z==="hour"?W.day.hour():void 0,precomputedEvents:A.get(W.day.format("YYYY-MM-DD")),resourceId:$?.id,showDayNumber:J},W.day.toISOString()):null})}),!p&&V0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:V0(T5,{"data-testid":`horizontal-events-${P}`,days:F,positionedEvents:G,resourceId:$?.id})})]})]})},m3=v2(({col:P,gridType:$="day",allDay:Z,resourceId:q,dayNumberHeight:X,showDayNumber:f,isLastRow:Y,isLastCol:Q,id:J})=>{let K=P.days??[],{positionedEvents:L}=S5({days:K,gridType:$,resourceId:q,dayNumberHeight:X,allDay:Z});return w5("div",{className:"flex relative w-full",children:[V0("div",{className:"flex w-full",children:K.map((z)=>V0(IP,{allDay:Z,className:U("flex-1 w-20",Y&&"border-b-0",!Q&&"border-r!",P.className),day:z,gridType:$,hour:$==="hour"?z.hour():void 0,resourceId:q,showDayNumber:f},z.toISOString()))}),V0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:V0(T5,{"data-testid":`horizontal-events-${J}`,days:K,positionedEvents:L,resourceId:q})})]})}),f5=v2(H3);import{memo as k3}from"react";import{jsx as g3}from"react/jsx-runtime";var h3=({className:P})=>{let{t:$}=V();return g3("div",{className:U("w-16 border-r shrink-0 sticky left-0 bg-background z-20 flex items-center justify-center sm:text-xs text-muted-foreground",P),children:$("allDay")})},AP=k3(h3);import{jsx as c2,jsxs as E3}from"react/jsx-runtime";var D3=({days:P,classes:$,resource:Z,showSpacer:q=!0})=>{let X=P.map((f,Y)=>({id:`allday-col-${f.toISOString()}-${Y}`,day:f,gridType:"day",className:U("h-full min-h-12 border-r last:border-r-0",$?.cell)}));return E3("div",{className:U("flex w-full",$?.row),"data-testid":"all-day-row",children:[q&&c2(AP,{className:$?.spacer}),c2(f5,{allDay:!0,className:"flex-1 min-h-fit",columns:X,dayNumberHeight:0,gridType:"day",id:`all-day-row-${Z?.id??"main"}`,isLastRow:!0,resource:Z,variant:"regular"})]})},d0=C3(D3);import{jsx as i2,Fragment as o2}from"react/jsx-runtime";var p0=({date:P})=>{let{renderHour:$,timeFormat:Z}=V();if($)return i2(o2,{children:$(P)});return i2(o2,{children:P.format(Z==="12-hour"?"h A":"H")})};import{memo as i3}from"react";import{memo as v3}from"react";import{memo as j3}from"react";import{jsx as l2,Fragment as y3}from"react/jsx-runtime";var x3=({rangeStart:P,rangeEnd:$,now:Z,resource:q})=>{let{renderCurrentTimeIndicator:X,view:f}=V((z)=>({renderCurrentTimeIndicator:z.renderCurrentTimeIndicator,view:z.view})),Y=Z??M();if(!(Y.isSameOrAfter(P)&&Y.isBefore($)))return null;let J=$.diff(P,"minute"),L=Y.diff(P,"minute")/J*100;if(X)return l2(y3,{children:X({currentTime:Y,rangeStart:P,rangeEnd:$,progress:L,resource:q,view:f})});return l2("div",{className:"absolute left-0 right-0 h-0.5 bg-red-500 z-50 pointer-events-none","data-testid":"current-time-indicator",style:{top:`${L}%`}})},u2=j3(x3);import{useMemo as r2}from"react";var d2=({days:P,gridType:$="hour",events:Z})=>{let q=Z.filter((z)=>!z.allDay).toSorted((z,p)=>z.start.diff(p.start));if(q.length===0)return[];let X=P.at(0)||M(),f=P.length,Y=$==="day",Q=[],J=[],K=null;for(let z of q){if(K&&z.start.isSameOrAfter(K)){if(J.length>0)Q.push(J);J=[]}J.push(z),K=K?M.max(K,z.end):z.end}if(J.length>0)Q.push(J);let L=[];for(let z of Q){if(z.length===1){let W=z[0],_=W.start.diff(X,$,!0),N=W.end.diff(X,$,!0);if(Y){if(_=Math.floor(_),N=Math.ceil(N),N<=_)N=_+1}if(_<0)_=0;if(N>f)N=f;let O=Math.max(0,N-_);if(O===0)continue;let S=_/f*100,b=O/f*100;L.push({...W,left:0,width:100,top:S,height:b});continue}let p=[...z].sort((W,_)=>{let N=W.end.diff(W.start,"minute"),O=_.end.diff(_.start,"minute");if(N!==O)return O-N;return W.start.diff(_.start)}),F=p.length,G;if(F===2)G=25;else if(F===3)G=50;else if(F===4)G=60;else G=70;let A=F>1?G/(F-1):0;for(let W=0;W<p.length;W++){let _=p[W],N=_.start.diff(X,$,!0),O=_.end.diff(X,$,!0);if(Y){if(N=Math.floor(N),O=Math.ceil(O),O<=N)O=N+1}if(N<0)N=0;if(O>f)O=f;let S=Math.max(0,O-N);if(S===0)continue;let b=N/f*100,B=S/f*100,H,h,o;if(W===0)H=0,h=100,o=1;else H=A*W,h=100-H,o=W+1;L.push({..._,left:H,width:h,top:b,height:B,zIndex:o})}}return L};var a2=({days:P,gridType:$,resourceId:Z})=>{let{getEventsForDateRange:q,getEventsForResource:X}=V(),f=P.at(0),Y=P.at(-1),Q=f?.startOf("day"),J=Y?.endOf("day"),K=r2(()=>{if(!Q||!J)return[];let z=q(Q,J);if(Z){let p=X(Z);z=z.filter((F)=>p.some((G)=>String(G.id)===String(F.id)))}return z.filter((p)=>!p.allDay)},[Q,J,q,Z,X]);return r2(()=>{return d2({days:P,events:K,gridType:$})},[P,$,K])};import{jsx as H5,jsxs as o3}from"react/jsx-runtime";var c3=({days:P,gridType:$="hour",resourceId:Z,resource:q,"data-testid":X})=>{let f=a2({days:P,gridType:$,resourceId:Z}),Y=P.at(0),Q=P.at(-1)?.add(1,$);return o3("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":X,children:[Y&&Q&&H5(u2,{rangeEnd:Q,rangeStart:Y,resource:q}),f.map((J,K)=>{let L=`event-${J.id}-${K}-${P.at(0)?.toISOString()}-${Z??"no-resource"}`,z=J.end.diff(J.start,"minute")<=15;return H5("div",{className:"absolute",style:{left:`${J.left}%`,width:`calc(${J.width}% - var(--spacing) * 2)`,top:`${J.top}%`,height:`${J.height}%`},children:H5(GP,{className:U("pointer-events-auto",{"[&_p]:text-[10px] [&_p]:mt-0":z}),elementId:L,event:J})},`${L}-wrapper`)})]})},n2=v3(c3);import{jsx as SP,jsxs as u3}from"react/jsx-runtime";var l3=({id:P,days:$,resourceId:Z,resource:q,"data-testid":X,gridType:f,className:Y,renderCell:Q,noEvents:J,cellSlots:K=[60],isLastColumn:L})=>{return SP("div",{className:U("flex flex-col flex-1 items-center justify-center min-w-50 bg-background relative",Y),"data-testid":X||`vertical-col-${P}`,children:u3("div",{className:"w-full relative grid",style:{gridTemplateRows:`repeat(${$.length}, minmax(0, 1fr))`},children:[$.map((z,p)=>{let F=z.format("HH"),G=z.format("YYYY-MM-DD");if(Q){let A=P==="time-col"?`vertical-time-${F}`:`vertical-cell-${G}-${F}-00${Z?`-${Z}`:""}`;return SP("div",{className:"h-[60px] border-b border-r","data-testid":A,children:Q(z)},`${P}-${p}-${F}`)}return K.map((A)=>{let W=A===60?void 0:A,_=W===void 0?"00":String(W).padStart(2,"0"),N=`vertical-cell-${G}-${F}-${_}${Z?`-${Z}`:""}`;return SP(IP,{className:U("hover:bg-accent relative z-10 h-[60px] cursor-pointer border-b",A===60?"":"border-dashed h-[15px] min-h-[15px]",L?"border-r-0":"border-r"),"data-testid":N,day:W?z.minute(W):z,gridType:f,hour:z.hour(),minute:W,resourceId:Z,shouldRenderEvents:!1},`${P}-${p}-${_}`)})}),!J&&SP("div",{className:"absolute inset-0 z-10 pointer-events-none",children:SP(n2,{"data-testid":`vertical-events-${P}`,days:$,gridType:f,resource:q,resourceId:Z})})]})})},t2=i3(l3);import{memo as d3}from"react";import{jsx as s2,jsxs as a3}from"react/jsx-runtime";var r3=({children:P,classes:$,allDayRow:Z})=>{let{stickyViewHeader:q,viewHeaderClassName:X}=V((f)=>({stickyViewHeader:f.stickyViewHeader,viewHeaderClassName:f.viewHeaderClassName}));return a3("div",{className:U(q&&"sticky top-0 z-21 bg-background",X),children:[s2("div",{className:U("h-12 border-b w-fit",$?.header),"data-testid":"vertical-grid-header",children:P}),Z&&s2("div",{className:U("flex w-full border-b min-h-12",$?.allDay),"data-testid":"vertical-grid-all-day",children:Z})]})},e2=d3(r3);import{jsx as bP,jsxs as P1}from"react/jsx-runtime";var b0=({columns:P,children:$,gridType:Z="day",variant:q="resource",classes:X,allDayRow:f,cellSlots:Y,style:Q})=>{let J=q==="resource",K=!J,L=$&&bP(e2,{allDayRow:f,classes:{header:X?.header,allDay:X?.allDay},children:$});return P1("div",{className:"h-full flex flex-col","data-testid":"vertical-grid-container",style:Q,children:[K&&L,P1(S0,{className:U("h-full",K&&"overflow-auto"),"data-testid":"vertical-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[J&&L,bP("div",{className:U("flex flex-1 w-fit",X?.body),"data-testid":"vertical-grid-body",children:P.map((z,p)=>bP(t2,{...z,cellSlots:Y,gridType:Z,isLastColumn:p===P.length-1},`${z.id}-${p}`))}),bP(h0,{className:"z-30"})," ",bP(h0,{className:"z-30",orientation:"horizontal"})," "]})]})};function L0({referenceDate:P,businessHours:$,hideNonBusinessHours:Z,allDates:q=[P],resourceBusinessHours:X=[]}){let f=o5({referenceDate:P}),Y=!!$||X.length>0;if(!(Z&&Y))return f;let{minStart:J,maxEnd:K,hasBusinessHours:L}=uP({allDates:q,businessHours:$,resourceBusinessHours:X,hideNonBusinessHours:Z});if(!L)return f;return f.filter((z)=>{let p=z.hour();return p>=J&&p<K})}import{jsx as $P,jsxs as n3}from"react/jsx-runtime";var $1=()=>{let{currentDate:P,t:$,businessHours:Z,hideNonBusinessHours:q}=V(),X=P.isSame(M(),"day"),f=L0({referenceDate:P,businessHours:Z,hideNonBusinessHours:q,allDates:[P]}),Y={id:"time-col",day:void 0,days:f,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(J)=>$P("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:$P(p0,{date:J})})},Q={id:`day-col-${P.format("YYYY-MM-DD")}`,day:P,days:f,className:"w-[calc(100%-4rem)] flex-1",gridType:"hour"};return $P(b0,{allDayRow:$P(d0,{days:[P]}),cellSlots:[0,15,30,45],classes:{header:"w-full",body:"w-full",allDay:"w-full"},columns:[Y,Q],gridType:"hour",variant:"regular",children:$P("div",{className:"flex flex-1 justify-center items-center min-h-12","data-testid":"day-view-header",children:n3(C,{className:U("flex justify-center items-center text-center text-base font-semibold sm:text-xl",X&&"text-primary"),transitionKey:P.format("YYYY-MM-DD"),children:[$P("span",{className:"xs:inline hidden",children:P.format("dddd, ")}),P.format("MMMM D, YYYY"),X&&$P("span",{className:"bg-primary text-primary-foreground ml-2 rounded-full px-1 py-0.5 text-xs sm:px-2 sm:text-sm",children:$("today")})]})})})};import{useMemo as P$}from"react";import{memo as t3}from"react";import{jsx as e3}from"react/jsx-runtime";var s3=({children:P,className:$})=>{let{stickyViewHeader:Z,viewHeaderClassName:q}=V((X)=>({stickyViewHeader:X.stickyViewHeader,viewHeaderClassName:X.viewHeaderClassName}));return e3("div",{className:U("flex h-12 w-fit",Z&&"sticky top-0 z-21 bg-background",$,q),"data-testid":"horizontal-grid-header",children:P})},Z1=t3(s3);import{jsx as WP,jsxs as f1}from"react/jsx-runtime";var J5=({rows:P,children:$,classes:Z,allDay:q,gridType:X,variant:f="resource",dayNumberHeight:Y})=>{let{currentDate:Q}=V(),J=f==="resource",K=!J,L=$&&WP(Z1,{className:Z?.header,children:$});return f1("div",{className:"h-full flex flex-col","data-testid":"horizontal-grid-container",children:[K&&L,f1(S0,{className:U("h-full",K&&"overflow-auto"),"data-testid":"horizontal-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[J&&L,WP("div",{className:U("flex flex-1 w-fit",Z?.body),"data-testid":"horizontal-grid-body",children:WP("div",{className:"relative w-full flex flex-col flex-1",children:P.map((z,p)=>WP(f5,{allDay:z.allDay??q,dayNumberHeight:Y,gridType:X,isLastRow:p===P.length-1,variant:f,...z},z.id))},Q.format("YYYY-MM"))}),WP(h0,{className:"z-30"}),WP(h0,{className:"z-30",orientation:"horizontal"})]})]})};import{jsx as m5}from"react/jsx-runtime";var J1=({className:P})=>{let{firstDayOfWeek:$,stickyViewHeader:Z,viewHeaderClassName:q,currentDate:X}=V(),f=Y0(X,$);return m5("div",{className:U("flex w-full",Z&&"sticky top-0 z-20",q,P),"data-testid":"month-header",children:f.map((Y,Q)=>m5(C,{className:"py-2 text-center font-medium border-r last:border-r-0 border-b flex-1","data-testid":`weekday-header-${Y.format("ddd").toLowerCase()}`,delay:Q*0.05,transitionKey:Y.toISOString(),children:m5("span",{className:"text-sm capitalize",children:Y.format("ddd")})},Y.toISOString()))})};import{jsx as X1}from"react/jsx-runtime";var q1=()=>{let{currentDate:P,firstDayOfWeek:$}=V(),q=P$(()=>yP(P,$),[P,$]).map((X,f)=>({id:`week-${f}`,columns:X.map((Y)=>({id:`col-${Y.toISOString()}`,day:Y,className:"w-auto",gridType:"day"})),className:"flex-1",showDayNumber:!0}));return X1(J5,{classes:{body:"w-full",header:"w-full"},rows:q,variant:"regular",children:X1(J1,{className:"h-12"})})};import{useMemo as X5}from"react";import{jsx as C0,jsxs as k5}from"react/jsx-runtime";var Q1="w-[calc((100%-4rem)/var(--visible-days))] min-w-[calc((100%-4rem)/var(--visible-days))] flex-1",Y1="w-10 sm:w-16 min-w-10 sm:min-w-16 max-w-10 sm:max-w-16",_1=()=>{let{t:P,currentDate:$,firstDayOfWeek:Z,selectDate:q,openEventForm:X,businessHours:f,hideNonBusinessHours:Y,hiddenDays:Q}=V(),J=X5(()=>Y0($,Z),[$,Z]),K=X5(()=>Q?J.filter((G)=>!Q.has(G.day())):J,[J,Q]),z={id:"time-col",days:X5(()=>L0({referenceDate:$,businessHours:f,hideNonBusinessHours:Y,allDates:J}),[$,f,Y,J]),day:void 0,className:`shrink-0 ${Y1} sticky left-0 bg-background z-20`,gridType:"hour",noEvents:!0,renderCell:(G)=>C0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:C0(p0,{date:G})})},p=X5(()=>{return K.map((G)=>({id:`day-col-${G.format("YYYY-MM-DD")}`,day:G,label:G.format("D"),className:Q1,days:L0({referenceDate:G,businessHours:f,hideNonBusinessHours:Y,allDates:J}),value:G}))},[J,f,Y,K.map]),F={"--visible-days":K.length};return C0(b0,{allDayRow:C0(d0,{classes:{cell:Q1,spacer:Y1},days:K}),classes:{header:"w-full h-18",body:"w-full"},columns:[z,...p],gridType:"hour",style:F,variant:"regular",children:k5("div",{className:"flex h-full flex-1","data-testid":"week-view-header",children:[C0("div",{className:"w-10 sm:w-16 h-full shrink-0 items-center justify-center border-r p-2 flex",children:k5("div",{className:"flex flex-col items-center justify-center",children:[C0("span",{className:"text-muted-foreground text-xs",children:P("week")}),C0("span",{className:"font-medium",children:$.week()})]})}),K.map((G,A)=>{let W=G.isSame(M(),"day"),_=`week-day-header-${G.toISOString()}`;return k5(C,{className:U("hover:bg-accent flex-1 flex flex-col justify-center cursor-pointer p-1 text-center sm:p-2 border-r last:border-r-0 w-50 h-full",W&&"bg-primary/10 font-bold"),"data-testid":`week-day-header-${G.format("dddd").toLowerCase()}`,delay:A*0.05,onClick:()=>{q(G),X({start:G})},transitionKey:_,children:[C0("div",{className:"text-xs sm:text-sm",children:G.format("ddd")}),C0("div",{className:U("mx-auto mt-1 flex h-5 w-5 items-center justify-center rounded-full text-xs",W&&"bg-primary text-primary-foreground"),children:G.format("D")})]},_)})]})})};import{jsx as r0,jsxs as TP}from"react/jsx-runtime";var $$=[{id:"sun",label:"S"},{id:"mon",label:"M"},{id:"tue",label:"T"},{id:"wed",label:"W"},{id:"thu",label:"T"},{id:"fri",label:"F"},{id:"sat",label:"S"}],Z$=["bg-primary","bg-blue-500","bg-green-500"],f$=42,J$=(P)=>{if(P===0)return"";let $=P>1?"s":"";return`${P} event${$}`},K1=()=>{let{currentDate:P,selectDate:$,events:Z,setView:q,getEventsForDateRange:X,t:f}=V(),Y=P.year(),Q=()=>{return Array.from({length:12},(G,A)=>{let W=M().year(Y).month(A).startOf("month"),_=Z.filter((N)=>N.start.year()===Y&&N.start.month()===A);return{date:W,name:W.format("MMMM"),eventCount:_.length,monthKey:W.format("MM")}})},J=(G)=>{let A=G.startOf("month").startOf("week");return Array.from({length:f$},(W,_)=>{let N=A.add(_,"day"),O=N.startOf("day"),S=N.endOf("day"),b=X(O,S);return{date:N,dayKey:N.format("YYYY-MM-DD"),isInCurrentMonth:N.month()===G.month(),isToday:N.isSame(M(),"day"),isSelected:N.isSame(P,"day"),eventCount:b.length}})},K=(G,A,W)=>{W?.stopPropagation(),$(G),q(A)},L=(G)=>{let A=G===1?f("event"):f("events");return`${G} ${A}`},z=(G)=>{let W=G.isInCurrentMonth?"":"text-muted-foreground opacity-50",_=G.isToday?"bg-primary text-primary-foreground rounded-full":"",N=G.isSelected&&!G.isToday?"bg-muted rounded-full font-bold":"",O=G.eventCount>0&&!G.isToday&&!G.isSelected?"font-medium":"";return U("relative flex aspect-square w-full cursor-pointer flex-col items-center justify-center hover:bg-accent rounded-sm transition-colors duration-200",W,_,N,O)},p=(G,A)=>{return U("h-[3px] w-[3px] rounded-full",A?"bg-primary-foreground":G)},F=Q();return TP(S0,{className:"h-full","data-testid":"year-view",children:[r0("div",{className:"grid auto-rows-fr grid-cols-1 gap-4 p-4 sm:grid-cols-2 lg:grid-cols-3","data-testid":"year-grid",children:F.map((G,A)=>{let W=J(G.date),_=A*0.05;return TP("div",{className:"hover:border-primary flex flex-col rounded-lg border p-3 text-left transition-all duration-200 hover:shadow-md","data-testid":`year-month-${G.monthKey}`,children:[TP(C,{className:"mb-2 flex items-center justify-between",delay:_,transitionKey:`month-${G.monthKey}`,children:[r0("button",{className:"text-lg font-medium hover:underline cursor-pointer","data-testid":`year-month-title-${G.monthKey}`,onClick:()=>K(G.date,"month"),type:"button",children:G.name}),G.eventCount>0&&r0("span",{className:"bg-primary text-primary-foreground rounded-full px-2 py-1 text-xs","data-testid":`year-month-event-count-${G.monthKey}`,children:L(G.eventCount)})]},`month-${G.monthKey}`),TP("div",{className:"grid grid-cols-7 gap-[1px] text-[0.6rem]","data-testid":`year-mini-calendar-${G.monthKey}`,children:[$$.map((N)=>r0("div",{className:"text-muted-foreground h-3 text-center",children:N.label},`header-${G.monthKey}-${N.id}`)),W.map((N)=>{let O=`year-day-${G.date.format("YYYY-MM")}-${N.dayKey}`,S=N.eventCount>0,b=Math.min(N.eventCount,3),B=Z$.slice(0,b);return TP("button",{className:z(N),"data-testid":O,onClick:(H)=>K(N.date,"day",H),title:J$(N.eventCount),type:"button",children:[r0("span",{className:"text-center leading-none",children:N.date.date()}),S&&r0("div",{className:U("absolute bottom-0 flex w-full justify-center space-x-[1px]",N.isToday&&"bottom-[1px]"),children:B.map((H)=>r0("span",{className:p(H,N.isToday)},H))})]},N.dayKey)})]})]},G.monthKey)})}),r0(h0,{className:"z-30"})]})};import{useCallback as h5,useMemo as X$}from"react";import{jsx as q$}from"react/jsx-runtime";var z1=({children:P,events:$=[],firstDayOfWeek:Z=0,initialView:q="month",initialDate:X,renderEvent:f,onEventClick:Y,onCellClick:Q,onViewChange:J,onEventAdd:K,onEventUpdate:L,onEventDelete:z,onDateChange:p,locale:F,timezone:G,disableCellClick:A,disableEventClick:W,disableDragAndDrop:_,dayMaxEvents:N,eventSpacing:O=E0,stickyViewHeader:S=!0,viewHeaderClassName:b="",headerComponent:B,headerClassName:H,businessHours:h,renderEventForm:o,translations:l,translator:x,timeFormat:E="12-hour",classesOverride:j,renderCurrentTimeIndicator:g,renderHour:a,hideNonBusinessHours:X0=!1,hiddenDays:z0})=>{let R=vP({events:$,firstDayOfWeek:Z,initialView:q,initialDate:X,businessHours:h,onEventAdd:K,onEventUpdate:L,onEventDelete:z,onDateChange:p,onViewChange:J,locale:F,timezone:G,translations:l,translator:x}),n=h5((s)=>{R.setSelectedEvent(s),R.setIsEventFormOpen(!0)},[R]),$0=h5((s)=>{if(W)return;if(Y)Y(s);else n(s)},[W,Y,n]),t=h5((s)=>{if(A)return;if(Q)Q(s);else R.openEventForm(s)},[Q,A,R]),q0=X$(()=>({currentDate:R.currentDate,view:R.view,events:R.events,rawEvents:R.rawEvents,currentLocale:R.currentLocale,isEventFormOpen:R.isEventFormOpen,selectedEvent:R.selectedEvent,selectedDate:R.selectedDate,firstDayOfWeek:R.firstDayOfWeek,setCurrentDate:R.setCurrentDate,selectDate:R.selectDate,setView:R.setView,nextPeriod:R.nextPeriod,prevPeriod:R.prevPeriod,today:R.today,addEvent:R.addEvent,updateEvent:R.updateEvent,updateRecurringEvent:R.updateRecurringEvent,deleteEvent:R.deleteEvent,deleteRecurringEvent:R.deleteRecurringEvent,openEventForm:R.openEventForm,closeEventForm:R.closeEventForm,getEventsForDateRange:R.getEventsForDateRange,findParentRecurringEvent:R.findParentRecurringEvent,renderEvent:f,onEventClick:$0,onCellClick:t,locale:F,timezone:G,disableCellClick:A,disableEventClick:W,disableDragAndDrop:_,dayMaxEvents:N,eventSpacing:O,stickyViewHeader:S,viewHeaderClassName:b,headerComponent:B,headerClassName:H,businessHours:h,renderEventForm:o,t:R.t,timeFormat:E,classesOverride:j,renderCurrentTimeIndicator:g,renderHour:a,hideNonBusinessHours:X0,hiddenDays:z0}),[R,f,$0,t,F,G,A,W,_,N,O,S,b,B,H,h,o,E,j,g,a,X0,z0]);return q$(EP.Provider,{value:q0,children:P})};import{jsx as O0,jsxs as K$}from"react/jsx-runtime";var Q$=()=>{let{view:P,dayMaxEvents:$}=V();return K$("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-calendar",children:[O0(BP,{className:"p-1"}),O0(cP,{children:O0(C,{className:"w-full h-[calc(100%-3.5rem)]",direction:"horizontal",transitionKey:P,children:O0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:O0(q1,{dayMaxEvents:$},"month"),week:O0(_1,{},"week"),day:O0($1,{},"day"),year:O0(K1,{},"year")}[P]})})}),O0(nP,{})]})},Y$=(P)=>{if(!P||P.length===0)return;return new Set(P.map(($)=>j0[$]))},_$=({events:P,firstDayOfWeek:$="sunday",initialView:Z="month",initialDate:q,dayMaxEvents:X=KP,eventSpacing:f=E0,stickyViewHeader:Y=!0,viewHeaderClassName:Q="",timeFormat:J="12-hour",hideNonBusinessHours:K=!1,hiddenDays:L,...z})=>{return O0(z1,{dayMaxEvents:X,eventSpacing:f,events:hP(P),firstDayOfWeek:j0[$],hiddenDays:Y$(L),hideNonBusinessHours:K,initialDate:JP(q),initialView:Z,stickyViewHeader:Y,timeFormat:J,viewHeaderClassName:Q,...z,children:O0(Q$,{})})};import{jsx as z$}from"react/jsx-runtime";var NP=({days:P,gridType:$="day",children:Z,classes:q})=>{let{getVisibleResources:X}=V(),f=X(),Y=P.map((J)=>{let K=Array.isArray(J);return{id:`col-${K?J[0]?.format("YYYY-MM-DD"):J.toISOString()}`,day:K?void 0:J,days:K?J:void 0,className:q?.cell,gridType:$}}),Q=f.map((J)=>({id:J.id,title:J.title,resource:J,columns:Y}));return z$(J5,{classes:q,dayNumberHeight:0,gridType:$,rows:Q,children:Z})};import{jsx as pP,jsxs as U$}from"react/jsx-runtime";var U1=()=>{let{currentDate:P,t:$,businessHours:Z,hideNonBusinessHours:q,getVisibleResources:X}=V(),f=X(),Y=L0({referenceDate:P,businessHours:Z,hideNonBusinessHours:q,allDates:[P],resourceBusinessHours:f.map((Q)=>Q.businessHours).filter(Boolean)});return U$(NP,{classes:{header:"min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:Y,gridType:"hour",children:[pP("div",{className:"w-20 sm:w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:pP("div",{className:"text-sm",children:$("resources")})}),pP("div",{className:"flex-1 flex flex-col",children:pP("div",{className:"flex h-12",children:Y.map((Q,J)=>{let K=Q.isSame(M(),"hour"),L=`resource-day-header-${Q.toISOString()}`;return pP(C,{className:U("min-w-20 flex-1 border-b border-r last:border-r-0 flex items-center justify-center text-xs shrink-0",K&&"bg-blue-50 text-blue-600 font-medium"),"data-testid":`resource-day-time-label-${Q.format("HH")}`,delay:J*0.05,transitionKey:`${L}-motion`,children:pP(p0,{date:Q})},`${L}-animated`)})})})]})};import{jsx as ZP,jsxs as L1}from"react/jsx-runtime";var G1=()=>{let{currentDate:P,getVisibleResources:$,businessHours:Z,hideNonBusinessHours:q}=V(),X=$(),f=L0({referenceDate:P,businessHours:Z,hideNonBusinessHours:q,allDates:[P],resourceBusinessHours:X.map((J)=>J.businessHours).filter(Boolean)}),Y={id:"time-col",day:void 0,days:f,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(J)=>ZP("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:ZP(p0,{date:J})})},Q=X.map((J)=>({id:`day-col-${P.format("YYYY-MM-DD")}-resource-${J.id}`,resourceId:J.id,resource:J,days:f,day:P,gridType:"hour"}));return ZP(b0,{allDayRow:L1("div",{className:"flex w-full",children:[ZP(AP,{}),X.map((J)=>ZP(d0,{classes:{cell:"min-w-50"},days:[P],resource:J,showSpacer:!1},`resource-allday-row-${J.id}`))]}),cellSlots:[0,15,30,45],classes:{body:"w-full",header:"w-full"},columns:[Y,...Q],"data-testid":"resource-day",gridType:"hour",children:L1("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[ZP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),X.map((J)=>ZP(u0,{className:"min-w-50 flex-1",resource:J},`resource-cell-${J.id}`))]})})};import{jsx as A1}from"react/jsx-runtime";var W1=()=>{let{orientation:P}=V();if(P==="vertical")return A1(G1,{});return A1(U1,{})};import{useMemo as L$}from"react";import{jsx as q5,jsxs as N1}from"react/jsx-runtime";var p1=()=>{let{currentDate:P,t:$}=V(),Z=L$(()=>{return c5(P)},[P]);return N1(NP,{days:Z,children:[q5("div",{className:"w-20 sm:w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:q5("div",{className:"text-sm",children:$("resources")})}),Z.map((q,X)=>{let f=`resource-month-header-${q.toISOString()}`;return N1(C,{className:"w-20 border-b border-r shrink-0 flex items-center justify-center flex-col",delay:X*0.05,transitionKey:`${f}-motion`,children:[q5("div",{className:"text-xs font-medium",children:q.format("D")}),q5("div",{className:"text-xs text-muted-foreground",children:q.format("ddd")})]},`${f}-animated`)})]})};import{jsx as wP,jsxs as F1}from"react/jsx-runtime";var V1=()=>{let{currentDate:P,getVisibleResources:$}=V(),Z=$(),q=P.startOf("month"),X=Array.from({length:P.daysInMonth()},(Q,J)=>q.add(J,"day")),f={id:"date-col",days:X,day:void 0,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"day",noEvents:!0,renderCell:(Q)=>F1("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:[wP("span",{children:Q.format("D")}),wP("span",{children:Q.format("ddd")})]})},Y=Z.map((Q)=>({id:`month-col-resource-${Q.id}`,day:void 0,resourceId:Q.id,days:X,gridType:"day"}));return wP(b0,{classes:{header:"w-full",body:"w-full"},columns:[f,...Y],"data-testid":"resource-month-vertical-grid",children:F1("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[wP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),Z.map((Q)=>wP(u0,{className:"min-w-50 flex-1",resource:Q},`resource-cell-${Q.id}`))]})})};import{jsx as O1}from"react/jsx-runtime";var B1=()=>{let{orientation:P}=V();if(P==="vertical")return O1(V1,{});return O1(p1,{})};import{useMemo as g5}from"react";import{jsx as D0,jsxs as C5}from"react/jsx-runtime";var M1=()=>{let{currentDate:P,firstDayOfWeek:$,t:Z,businessHours:q,hideNonBusinessHours:X,getVisibleResources:f}=V(),Y=f(),Q=g5(()=>Y0(P,$),[P,$]),J=g5(()=>Y.map((L)=>L.businessHours).filter(Boolean),[Y]),K=g5(()=>{return Q.map((L)=>L0({referenceDate:L,businessHours:q,hideNonBusinessHours:X,resourceBusinessHours:J}))},[Q,q,X,J]);return C5(NP,{classes:{header:"h-24 min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:K,gridType:"hour",children:[D0("div",{className:"w-20 sm:w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:D0("div",{className:"text-sm",children:Z("resources")})}),C5("div",{className:"flex-1 flex flex-col",children:[D0("div",{className:"flex h-12",children:Q.map((L,z)=>{let p=L.isSame(M(),"day"),F=`resource-week-header-${L.toISOString()}-day`;return D0(C,{className:U("shrink-0 border-r last:border-r-0 border-b flex-1 flex items-center text-center font-medium",p&&"bg-blue-50 text-blue-600"),"data-testid":"resource-week-day-header",delay:z*0.05,transitionKey:`${F}-motion`,children:C5("div",{className:"sticky left-1/2",children:[D0("div",{className:"text-sm",children:L.format("ddd")}),D0("div",{className:"text-xs text-muted-foreground",children:L.format("M/D")})]})},`${F}-animated`)})}),D0("div",{className:"flex h-12 border-b",children:K.flat().map((L,z)=>{let p=L.isSame(M(),"hour"),F=`resource-week-header-${L.toISOString()}-hour-${z}`;return D0(C,{className:U("min-w-20 flex-1 border-r flex items-center justify-center text-xs shrink-0",p&&"bg-blue-50 text-blue-600 font-medium"),"data-testid":`resource-week-time-label-${L.format("HH")}`,delay:z*0.005,transitionKey:`${F}-motion`,children:D0(p0,{date:L})},`${F}-animated`)})})]})]})};import{useMemo as HP}from"react";import{jsx as G0,jsxs as mP}from"react/jsx-runtime";var R1=()=>{let{currentDate:P,getVisibleResources:$,firstDayOfWeek:Z,t:q,businessHours:X,hideNonBusinessHours:f,hiddenDays:Y}=V(),Q=$(),J=HP(()=>Y0(P,Z),[P,Z]),K=HP(()=>Y?J.filter((F)=>!Y.has(F.day())):J,[J,Y]),L=HP(()=>L0({referenceDate:P,businessHours:X,hideNonBusinessHours:f,allDates:J,resourceBusinessHours:Q.map((F)=>F.businessHours).filter(Boolean)}),[P,X,f,J,Q]),z=HP(()=>({id:"time-col",days:L,day:void 0,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(F)=>G0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:G0(p0,{date:F})})}),[L]),p=HP(()=>Q.flatMap((F)=>K.map((G)=>({id:`day-col-${G.format("YYYY-MM-DD")}-resource-${F.id}`,resourceId:F.id,resource:F,day:G,days:L0({referenceDate:G,businessHours:X,hideNonBusinessHours:f,allDates:J,resourceBusinessHours:Q.map((A)=>A.businessHours).filter(Boolean)}),gridType:"hour"}))),[Q,J,X,f,K.map]);return G0(b0,{allDayRow:mP("div",{className:"flex",children:[G0(AP,{}),Q.map((F)=>G0(d0,{classes:{cell:"min-w-50"},days:K,resource:F,showSpacer:!1},`resource-week-allday-row-${F.id}`))]}),classes:{header:"h-24"},columns:[z,...p],"data-testid":"resource-week",gridType:"hour",children:mP("div",{className:"flex-1 flex flex-col",children:[mP("div",{className:"flex h-12",children:[G0("div",{className:"shrink-0 w-16 border-r z-20 bg-background sticky left-0",children:G0("span",{className:"px-2 h-full w-full flex justify-center items-end text-xs text-muted-foreground",children:q("week")})}),Q.map((F,G)=>{let A=`resource-week-header-${F.id}-day`;return G0(C,{className:U("shrink-0 border-r last:border-r-0 border-b flex items-center text-center font-medium"),delay:G*0.05,style:{width:`calc(${K.length} * var(--spacing) * 50)`},transitionKey:`${A}-motion`,children:G0(u0,{className:"h-full w-full flex-1",resource:F,children:G0("div",{className:"sticky left-1/2 text-sm font-medium truncate",children:F.title})})},`${A}-animated`)})]}),mP("div",{className:"flex h-12",children:[G0("div",{className:"shrink-0 w-16 border-r border-b z-20 bg-background sticky left-0",children:G0("span",{className:"px-2 h-full w-full flex justify-center items-start font-medium",children:P.week()})}),p.map((F,G)=>{let A=F.day,W=`resource-week-header-${A.toISOString()}-hour-${F.resourceId}`;return mP(C,{className:U("w-50 border-r last:border-r-0 border-b flex flex-col items-center justify-center text-xs shrink-0 bg-background"),"data-testid":`resource-week-time-label-${A.format("HH")}`,delay:G*0.05,transitionKey:`${W}-motion`,children:[G0("div",{className:"text-sm",children:A.format("ddd")}),G0("div",{className:"text-xs text-muted-foreground",children:A.format("M/D")})]},`${W}-animated`)})]})]})})};import{jsx as I1}from"react/jsx-runtime";var S1=()=>{let{orientation:P}=V();if(P==="vertical")return I1(R1,{});return I1(M1,{})};import{jsx as a0,jsxs as G$}from"react/jsx-runtime";var b1=()=>{let{view:P}=V();return G$("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-resource-calendar",children:[a0(BP,{className:"p-1"}),a0(cP,{children:a0(C,{className:"w-full h-[calc(100%-3.5rem)] @container/calendar-body",direction:"horizontal",transitionKey:P,children:a0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:a0(B1,{},"month"),week:a0(S1,{},"week"),day:a0(W1,{},"day")}[P]})})}),a0(nP,{})]})};import{jsx as T1}from"react/jsx-runtime";var A$=(P)=>{if(!P||P.length===0)return;return new Set(P.map(($)=>j0[$]))},W$=({events:P=[],resources:$=[],firstDayOfWeek:Z="sunday",initialView:q="month",initialDate:X,disableDragAndDrop:f=!1,dayMaxEvents:Y=KP,timeFormat:Q="12-hour",eventSpacing:J=E0,hiddenDays:K,...L})=>{return T1(n5,{dayMaxEvents:Y,disableDragAndDrop:f,eventSpacing:J,events:hP(P),firstDayOfWeek:j0[Z],hiddenDays:A$(K),initialDate:JP(X),initialView:q,resources:$,timeFormat:Q,...L,children:T1(b1,{})})};export{f4 as useIlamyCalendarContext,_P as isRecurringEvent,Y5 as generateRecurringEvents,_5 as defaultTranslations,Vq as RRule,W$ as IlamyResourceCalendar,_$ as IlamyCalendar};
5
5
 
6
- //# debugId=09A0A7E8DE9AE92464756E2164756E21
7
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2luZGV4LnRzIiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlci50cyIsICJzcmMvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnLnRzIiwgInNyYy9saWIvdXRpbHMvaW5kZXgudHMiLCAic3JjL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uLnRzeCIsICJzcmMvY29tcG9uZW50cy9kcmFnLWFuZC1kcm9wL2NhbGVuZGFyLWRuZC1jb250ZXh0LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9idXR0b24udHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2RpYWxvZy50c3giLCAic3JjL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0LnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQudHMiLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dC50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9wcm92aWRlci50c3giLCAic3JjL2hvb2tzL3VzZS1jYWxlbmRhci1lbmdpbmUudHMiLCAic3JjL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdC50cyIsICJzcmMvbGliL3V0aWxzL2RhdGUtdXRpbHMudHMiLCAic3JjL2xpYi9jb25zdGFudHMudHMiLCAic3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cudHN4IiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvZG5kLXV0aWxzLnRzIiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvZXZlbnQtZHJhZy1vdmVybGF5LnRzeCIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0udHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2NoZWNrYm94LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9kYXRlLXBpY2tlci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvY2FsZW5kYXIudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL3BvcG92ZXIudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2lucHV0LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9sYWJlbC50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL3RpbWUtcGlja2VyLnRzeCIsICJzcmMvaG9va3MvdXNlLWF1dG9jb21wbGV0ZS10aW1lcGlja2VyLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3Vycy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvZXZlbnQtZm9ybS11dGlscy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdG9yL3JlY3VycmVuY2UtZWRpdG9yLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYXJkLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zZWxlY3QudHN4IiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucy50cyIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nLnRzeCIsICJzcmMvY29tcG9uZW50cy9oZWFkZXIvYmFzZS1oZWFkZXIudHN4IiwgInNyYy9saWIvdXRpbHMvZXhwb3J0LWljYWwudHMiLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3RpdGxlLWNvbnRlbnQudHN4IiwgInNyYy9jb21wb25lbnRzL2hlYWRlci92aWV3LWNvbnRyb2xzLnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdy50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1yb3cudHN4IiwgInNyYy9jb21wb25lbnRzL2dyaWQtY2VsbC50c3giLCAic3JjL2NvbXBvbmVudHMvZGF5LW51bWJlci50c3giLCAic3JjL2NvbXBvbmVudHMvYWxsLWV2ZW50cy1kaWFsb2cudHN4IiwgInNyYy9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQudHN4IiwgInNyYy9jb21wb25lbnRzL2Ryb3BwYWJsZS1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLWV2ZW50cy1sYXllci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZFdlZWtFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi13ZWVrLWV2ZW50cy50cyIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1jb2wudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1ldmVudHMtbGF5ZXIudHN4IiwgInNyYy9jb21wb25lbnRzL2N1cnJlbnQtdGltZS1pbmRpY2F0b3IudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi1kYXktZXZlbnRzLnRzIiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1oZWFkZXItY29udGFpbmVyLnRzeCIsICJzcmMvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2RheS12aWV3LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L21vbnRoLXZpZXcudHN4IiwgInNyYy9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQtaGVhZGVyLWNvbnRhaW5lci50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9tb250aC1oZWFkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy93ZWVrLXZpZXcudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3llYXItdmlldy95ZWFyLXZpZXcudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhci50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvcmVzb3VyY2UtZXZlbnQtZ3JpZC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvcmVzb3VyY2UtZGF5LWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L3Jlc291cmNlLWRheS12ZXJ0aWNhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvaW5kZXgudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvcmVzb3VyY2UtbW9udGgtaG9yaXpvbnRhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9yZXNvdXJjZS1tb250aC12ZXJ0aWNhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3Jlc291cmNlLXdlZWstaG9yaXpvbnRhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3Jlc291cmNlLXdlZWstdmVydGljYWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvcmVzb3VyY2UtY2FsZW5kYXItYm9keS50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIudHN4Il0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIi8vIE1haW4gY2FsZW5kYXIgY29tcG9uZW50c1xuXG4vLyBSZS1leHBvcnQgcnJ1bGUuanMgdHlwZXMgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSB7IEZyZXF1ZW5jeSwgV2Vla2RheSB9IGZyb20gJ3JydWxlJ1xuZXhwb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbi8vIEV4cG9ydCB0eXBlc1xuZXhwb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG4vLyBSUlVMRS1iYXNlZCByZWN1cnJlbmNlIHN5c3RlbVxuZXhwb3J0IHtcblx0Z2VuZXJhdGVSZWN1cnJpbmdFdmVudHMsXG5cdGlzUmVjdXJyaW5nRXZlbnQsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5leHBvcnQgdHlwZSB7IEV2ZW50Rm9ybVByb3BzIH0gZnJvbSAnLi9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybSdcbmV4cG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCwgV2Vla0RheXMgfSBmcm9tICcuL2NvbXBvbmVudHMvdHlwZXMnXG5leHBvcnQgeyBJbGFteUNhbGVuZGFyIH0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LWNhbGVuZGFyJ1xuZXhwb3J0IHR5cGUge1xuXHRDZWxsQ2xpY2tJbmZvLFxuXHRJbGFteUNhbGVuZGFyUHJvcHMsXG5cdFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMsXG59IGZyb20gJy4vZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5leHBvcnQgdHlwZSB7IElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BzIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LXJlc291cmNlLWNhbGVuZGFyJ1xuZXhwb3J0IHsgSWxhbXlSZXNvdXJjZUNhbGVuZGFyIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LXJlc291cmNlLWNhbGVuZGFyL2lsYW15LXJlc291cmNlLWNhbGVuZGFyJ1xuLy8gUmVzb3VyY2UgY2FsZW5kYXIgdHlwZXNcbmV4cG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuLy8gUHVibGljIGNhbGVuZGFyIGNvbnRleHQgaG9va3NcbmV4cG9ydCB7XG5cdHR5cGUgVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4sXG5cdHVzZUlsYW15Q2FsZW5kYXJDb250ZXh0LFxufSBmcm9tICcuL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuZXhwb3J0IHsgZGVmYXVsdFRyYW5zbGF0aW9ucyB9IGZyb20gJy4vbGliL3RyYW5zbGF0aW9ucy9kZWZhdWx0J1xuLy8gVHJhbnNsYXRpb24gc3lzdGVtXG5leHBvcnQgdHlwZSB7XG5cdFRyYW5zbGF0aW9uS2V5LFxuXHRUcmFuc2xhdGlvbnMsXG5cdFRyYW5zbGF0b3JGdW5jdGlvbixcbn0gZnJvbSAnLi9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBDYWxlbmRhclZpZXcsIFRpbWVGb3JtYXQgfSBmcm9tICcuL3R5cGVzJ1xuIiwKICAgICJpbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBvbWl0S2V5cywgc2FmZURhdGUgfSBmcm9tICdAL2xpYi91dGlscydcblxuLyoqXG4gKiBDb252ZXJ0cyBhIERheWpzIG9iamVjdCB0byBhIFwiRmxvYXRpbmcgVGltZVwiIERhdGUgcmVwcmVzZW50YXRpb24uXG4gKiBJbiBGbG9hdGluZyBUaW1lLCB3ZSB1c2UgYSBVVEMgRGF0ZSBvYmplY3QgYnV0IHNldCBpdHMgVVRDIGNvbXBvbmVudHNcbiAqIHRvIG1hdGNoIHRoZSBsb2NhbCBjb21wb25lbnRzIG9mIHRoZSB1c2VyJ3MgZGF0ZS5cbiAqXG4gKiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgUlJ1bGUgZXZhbHVhdGlvbiBiZWNhdXNlIGl0IGVuc3VyZXMgdGhhdCBhIHJ1bGVcbiAqIGxpa2UgXCJFdmVyeSBXZWRuZXNkYXlcIiByZWZlcnMgdG8gdGhlIHVzZXIncyBsb2NhbCBXZWRuZXNkYXksIGV2ZW4gaWZcbiAqIHRoYXQgdGltZSBmYWxscyBvbiBhIFRodXJzZGF5IGluIGFjdHVhbCBVVEMuXG4gKi9cbmNvbnN0IHRvRmxvYXRpbmdEYXRlID0gKGQ6IGRheWpzLkRheWpzKTogRGF0ZSA9PiB7XG5cdHJldHVybiBuZXcgRGF0ZShcblx0XHREYXRlLlVUQyhcblx0XHRcdGQueWVhcigpLFxuXHRcdFx0ZC5tb250aCgpLFxuXHRcdFx0ZC5kYXRlKCksXG5cdFx0XHRkLmhvdXIoKSxcblx0XHRcdGQubWludXRlKCksXG5cdFx0XHRkLnNlY29uZCgpLFxuXHRcdFx0ZC5taWxsaXNlY29uZCgpXG5cdFx0KVxuXHQpXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBcIkZsb2F0aW5nIFRpbWVcIiBEYXRlIGJhY2sgdG8gYSBEYXlqcyBvYmplY3QgaW4gdGhlIG9yaWdpbmFsIGNvbnRleHQuXG4gKiBJdCB0YWtlcyB0aGUgWU1ESE1TIGNvbXBvbmVudHMgZnJvbSB0aGUgVVRDIERhdGUgYW5kIGFwcGxpZXMgdGhlbSB0byB0aGVcbiAqIHJlZmVyZW5jZSBEYXlqcyBvYmplY3QgKHByZXNlcnZpbmcgaXRzIHRpbWV6b25lL2xvY2FsZSkuXG4gKi9cbmNvbnN0IGZyb21GbG9hdGluZ0RhdGUgPSAoZGF0ZTogRGF0ZSwgcmVmZXJlbmNlOiBkYXlqcy5EYXlqcyk6IGRheWpzLkRheWpzID0+IHtcblx0cmV0dXJuIHJlZmVyZW5jZVxuXHRcdC55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSlcblx0XHQubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKVxuXHRcdC5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKVxuXHRcdC5ob3VyKGRhdGUuZ2V0VVRDSG91cnMoKSlcblx0XHQubWludXRlKGRhdGUuZ2V0VVRDTWludXRlcygpKVxuXHRcdC5zZWNvbmQoZGF0ZS5nZXRVVENTZWNvbmRzKCkpXG5cdFx0Lm1pbGxpc2Vjb25kKGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpXG59XG5cbmV4cG9ydCBjb25zdCBpc1JlY3VycmluZ0V2ZW50ID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG5cdHJldHVybiBCb29sZWFuKGV2ZW50LnJydWxlIHx8IGV2ZW50LnJlY3VycmVuY2VJZCB8fCBldmVudC51aWQpXG59XG5cbi8qKlxuICogQ29uc2lzdGVudGx5IGRlcml2ZXMgYSBwYXJlbnQgVUlEIGZyb20gYW4gZXZlbnQuXG4gKiBVc2VzIHRoZSBleHBsaWNpdCBgdWlkYCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxscyBiYWNrIHRvIGAke2lkfUBpbGFteS5jYWxlbmRhcmAuXG4gKi9cbmNvbnN0IGdldEV2ZW50UGFyZW50VUlEID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogc3RyaW5nID0+IHtcblx0cmV0dXJuIGV2ZW50LnVpZCB8fCBgJHtldmVudC5pZH1AaWxhbXkuY2FsZW5kYXJgXG59XG5cbmludGVyZmFjZSBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzIHtcblx0ZXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0Y3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHN0YXJ0RGF0ZTogZGF5anMuRGF5anNcblx0ZW5kRGF0ZTogZGF5anMuRGF5anNcbn1cblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzID0gKHtcblx0ZXZlbnQsXG5cdGN1cnJlbnRFdmVudHMsXG5cdHN0YXJ0RGF0ZSxcblx0ZW5kRGF0ZSxcbn06IEdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzUHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHQvLyBJZiBub3QgYSByZWN1cnJpbmcgZXZlbnQsIHJldHVybiBlbXB0eSBhcnJheVxuXHRpZiAoIWV2ZW50LnJydWxlKSB7XG5cdFx0cmV0dXJuIFtdXG5cdH1cblxuXHR0cnkge1xuXHRcdC8vIERUU1RBUlQgYW5kIFNFQVJDSCBXSU5ET1cgVFJBTlNGT1JNQVRJT05cblx0XHQvLyBUcmFuc2Zvcm0gYWxsIGRhdGVzIHRvIFwiZmxvYXRpbmcgdGltZVwiIChVVEMgd2l0aCBsb2NhbCBjb21wb25lbnRzKVxuXHRcdC8vIFRoaXMgZW5zdXJlcyBSUnVsZSBldmFsdWF0ZXMgXCJXZWRuZXNkYXlcIiBhcyB0aGUgdXNlcidzIGxvY2FsIFdlZG5lc2RheVxuXHRcdGNvbnN0IGZsb2F0aW5nU3RhcnQgPSB0b0Zsb2F0aW5nRGF0ZShldmVudC5zdGFydClcblx0XHRjb25zdCBmbG9hdGluZ1VudGlsID0gZXZlbnQucnJ1bGUudW50aWxcblx0XHRcdD8gdG9GbG9hdGluZ0RhdGUoZGF5anMoZXZlbnQucnJ1bGUudW50aWwpKVxuXHRcdFx0OiB1bmRlZmluZWRcblxuXHRcdGNvbnN0IHJ1bGVPcHRpb25zOiBSUnVsZU9wdGlvbnMgPSB7XG5cdFx0XHQuLi5ldmVudC5ycnVsZSxcblx0XHRcdGR0c3RhcnQ6IGZsb2F0aW5nU3RhcnQsXG5cdFx0XHR1bnRpbDogZmxvYXRpbmdVbnRpbCxcblx0XHR9XG5cdFx0Y29uc3QgcnVsZSA9IG5ldyBSUnVsZShydWxlT3B0aW9ucylcblxuXHRcdGNvbnN0IHBhcmVudFVpZCA9IGdldEV2ZW50UGFyZW50VUlEKGV2ZW50KVxuXHRcdGNvbnN0IG92ZXJyaWRlcyA9IGN1cnJlbnRFdmVudHMuZmlsdGVyKFxuXHRcdFx0KGUpID0+IGUucmVjdXJyZW5jZUlkICYmIGdldEV2ZW50UGFyZW50VUlEKGUpID09PSBwYXJlbnRVaWRcblx0XHQpXG5cblx0XHQvLyBDYWxjdWxhdGUgZXZlbnQgZHVyYXRpb24gdG8gZXhwYW5kIHNlYXJjaCB3aW5kb3cgZm9yIGV2ZW50cyB0aGF0IHNwYW4gdGhlIHJhbmdlXG5cdFx0Y29uc3QgZXZlbnREdXJhdGlvbiA9IGV2ZW50LmVuZC5kaWZmKGV2ZW50LnN0YXJ0KVxuXG5cdFx0Ly8gRXhwYW5kIHNlYXJjaCB3aW5kb3cgYmFja3dhcmQgYnkgZXZlbnQgZHVyYXRpb24gdG8gY2F0Y2ggZXZlbnRzIHRoYXQgc3RhcnQgYmVmb3JlXG5cdFx0Ly8gdGhlIHJhbmdlIGJ1dCBzcGFuIGludG8gaXRcblx0XHRjb25zdCBleHBhbmRlZFN0YXJ0RGF0ZVRpbWUgPSB0b0Zsb2F0aW5nRGF0ZShcblx0XHRcdHN0YXJ0RGF0ZS5zdWJ0cmFjdChldmVudER1cmF0aW9uLCAnbWlsbGlzZWNvbmQnKVxuXHRcdClcblx0XHRjb25zdCBlbmREYXRlVGltZSA9IHRvRmxvYXRpbmdEYXRlKGVuZERhdGUpXG5cblx0XHQvLyBHZXQgYWxsIG9jY3VycmVuY2VzIGluIHRoZSBleHBhbmRlZCByYW5nZVxuXHRcdGNvbnN0IG9jY3VycmVuY2VzID0gcnVsZS5iZXR3ZWVuKGV4cGFuZGVkU3RhcnREYXRlVGltZSwgZW5kRGF0ZVRpbWUsIHRydWUpXG5cblx0XHQvLyBDb252ZXJ0IG9jY3VycmVuY2VzIHRvIENhbGVuZGFyRXZlbnQgaW5zdGFuY2VzXG5cdFx0Y29uc3QgcmVjdXJyaW5nRXZlbnRzOiBDYWxlbmRhckV2ZW50W10gPSBvY2N1cnJlbmNlc1xuXHRcdFx0Lm1hcCgob2NjdXJyZW5jZSwgaW5kZXgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb2NjdXJyZW5jZURhdGUgPSBmcm9tRmxvYXRpbmdEYXRlKG9jY3VycmVuY2UsIGV2ZW50LnN0YXJ0KVxuXHRcdFx0XHRjb25zdCBleGlzdGluZ092ZXJyaWRlID0gb3ZlcnJpZGVzLmZpbmQoKGUpID0+XG5cdFx0XHRcdFx0c2FmZURhdGUoZS5yZWN1cnJlbmNlSWQpPy5pc1NhbWUob2NjdXJyZW5jZURhdGUpXG5cdFx0XHRcdClcblxuXHRcdFx0XHQvLyBJZiB0aGVyZSdzIGFuIG92ZXJyaWRlLCB1c2UgaXRcblx0XHRcdFx0aWYgKGV4aXN0aW5nT3ZlcnJpZGUpIHtcblx0XHRcdFx0XHRyZXR1cm4geyAuLi5ldmVudCwgLi4uZXhpc3RpbmdPdmVycmlkZSB9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDYWxjdWxhdGUgdGhlIGR1cmF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIGV2ZW50XG5cdFx0XHRcdGNvbnN0IG9yaWdpbmFsRHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcblx0XHRcdFx0Y29uc3QgbmV3RW5kVGltZSA9IG9jY3VycmVuY2VEYXRlLmFkZChvcmlnaW5hbER1cmF0aW9uLCAnbWlsbGlzZWNvbmQnKVxuXHRcdFx0XHRjb25zdCByZWN1cnJpbmdFdmVudElkID0gYCR7ZXZlbnQuaWR9XyR7aW5kZXh9YFxuXHRcdFx0XHRjb25zdCBwYXJlbnRVSUQgPSBnZXRFdmVudFBhcmVudFVJRChldmVudClcblxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIHJlY3VycmluZyBldmVudCBpbnN0YW5jZVxuXHRcdFx0XHRjb25zdCByZWN1cnJpbmdFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0XHRpZDogcmVjdXJyaW5nRXZlbnRJZCxcblx0XHRcdFx0XHRzdGFydDogb2NjdXJyZW5jZURhdGUsXG5cdFx0XHRcdFx0ZW5kOiBuZXdFbmRUaW1lLFxuXHRcdFx0XHRcdHVpZDogcGFyZW50VUlELCAvLyBTYW1lIFVJRCBhcyBwYXJlbnQgZm9yIHByb3BlciBncm91cGluZ1xuXHRcdFx0XHRcdHJydWxlOiB1bmRlZmluZWQsIC8vIEluc3RhbmNlIGV2ZW50cyBkb24ndCBoYXZlIFJSVUxFXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVjdXJyaW5nRXZlbnRcblx0XHRcdH0pXG5cdFx0XHQuZmlsdGVyKChyZWN1cnJpbmdFdmVudCkgPT4ge1xuXHRcdFx0XHQvLyBGaWx0ZXIgb3V0IEVYREFURSBleGNsdXNpb25zXG5cdFx0XHRcdGNvbnN0IGhhc0V4ZGF0ZXMgPSBldmVudC5leGRhdGVzICYmIGV2ZW50LmV4ZGF0ZXMubGVuZ3RoID4gMFxuXHRcdFx0XHRpZiAoaGFzRXhkYXRlcykge1xuXHRcdFx0XHRcdGNvbnN0IGV2ZW50U3RhcnRJU08gPSByZWN1cnJpbmdFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG5cdFx0XHRcdFx0Y29uc3QgaXNFeGNsdWRlZCA9IGV2ZW50LmV4ZGF0ZXMuaW5jbHVkZXMoZXZlbnRTdGFydElTTylcblx0XHRcdFx0XHRpZiAoaXNFeGNsdWRlZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRmlsdGVyIHRvIG9ubHkgaW5jbHVkZSBldmVudHMgdGhhdCBzcGFuIHRocm91Z2ggdGhlIG9yaWdpbmFsIHJlcXVlc3RlZCBkYXRlIHJhbmdlXG5cdFx0XHRcdC8vIEFuIGV2ZW50IHNwYW5zIHRoZSByYW5nZSBpZjogZXZlbnRfc3RhcnQgPCByYW5nZV9lbmQgQU5EIGV2ZW50X2VuZCA+IHJhbmdlX3N0YXJ0XG5cdFx0XHRcdC8vIFVzZSBpc1NhbWVPckJlZm9yZS9pc1NhbWVPckFmdGVyIHRvIGluY2x1ZGUgYm91bmRhcnkgY2FzZXNcblx0XHRcdFx0Y29uc3QgZXZlbnRTcGFuc1JhbmdlID1cblx0XHRcdFx0XHRyZWN1cnJpbmdFdmVudC5zdGFydC5pc1NhbWVPckJlZm9yZShlbmREYXRlKSAmJlxuXHRcdFx0XHRcdHJlY3VycmluZ0V2ZW50LmVuZC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSlcblxuXHRcdFx0XHRyZXR1cm4gZXZlbnRTcGFuc1JhbmdlXG5cdFx0XHR9KVxuXG5cdFx0cmV0dXJuIHJlY3VycmluZ0V2ZW50c1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIEhhbmRsZSBpbnZhbGlkIFJSVUxFIG9wdGlvbnNcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRgSW52YWxpZCBSUlVMRSBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KGV2ZW50LnJydWxlKX0uIEVycm9yOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcblx0XHQpXG5cdH1cbn1cblxuaW50ZXJmYWNlIFVwZGF0ZVJlY3VycmluZ0V2ZW50UHJvcHMge1xuXHR0YXJnZXRFdmVudDogQ2FsZW5kYXJFdmVudFxuXHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuXHR0YXJnZXRFdmVudCxcblx0dXBkYXRlcyxcblx0Y3VycmVudEV2ZW50cyxcblx0c2NvcGUsXG59OiBVcGRhdGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Y29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXG5cdC8vIEZpbmQgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50XG5cdGNvbnN0IHRhcmdldFVpZCA9IGdldEV2ZW50UGFyZW50VUlEKHRhcmdldEV2ZW50KVxuXHRjb25zdCBiYXNlRXZlbnRJbmRleCA9IHVwZGF0ZWRFdmVudHMuZmluZEluZGV4KChlKSA9PiB7XG5cdFx0cmV0dXJuIGdldEV2ZW50UGFyZW50VUlEKGUpID09PSB0YXJnZXRVaWQgJiYgZS5ycnVsZSAmJiAhZS5yZWN1cnJlbmNlSWRcblx0fSlcblxuXHRpZiAoYmFzZUV2ZW50SW5kZXggPT09IC0xKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdCYXNlIHJlY3VycmluZyBldmVudCBub3QgZm91bmQnKVxuXHR9XG5cblx0Y29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuXHRzd2l0Y2ggKHNjb3BlKSB7XG5cdFx0Y2FzZSAndGhpcyc6IHtcblx0XHRcdC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGJhc2UgZXZlbnQgYW5kIGNyZWF0ZSBzdGFuZGFsb25lIG1vZGlmaWVkIGV2ZW50XG5cdFx0XHRjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0Y29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cblx0XHRcdGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuXHRcdFx0Y29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHRleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuXG5cdFx0XHQvLyBDcmVhdGUgc3RhbmRhbG9uZSBtb2RpZmllZCBldmVudCB3aXRoIHJlY3VycmVuY2VJZFxuXHRcdFx0Y29uc3QgbW9kaWZpZWRFdmVudElkID0gYCR7dGFyZ2V0RXZlbnQuaWR9X21vZGlmaWVkXyR7RGF0ZS5ub3coKX1gXG5cdFx0XHRjb25zdCBtb2RpZmllZEV2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFRPRE86IGZpeCB0aGUgdHlwZXNcblx0XHRcdFx0Li4ub21pdEtleXModGFyZ2V0RXZlbnQsIFsnd2lkdGgnLCAnaGVpZ2h0JywgJ3RvcCcsICdsZWZ0JywgJ3JpZ2h0J10pLFxuXHRcdFx0XHQuLi51cGRhdGVzLFxuXHRcdFx0XHRpZDogbW9kaWZpZWRFdmVudElkLFxuXHRcdFx0XHRyZWN1cnJlbmNlSWQ6IHRhcmdldEV2ZW50U3RhcnRJU08sIC8vIFRoaXMgbWFya3MgaXQgYXMgYSBtb2RpZmllZCBpbnN0YW5jZVxuXHRcdFx0XHR1aWQ6IGdldEV2ZW50UGFyZW50VUlEKGJhc2VFdmVudCksIC8vIEtlZXAgc2FtZSBVSUQgYXMgYmFzZSBldmVudCAoaUNhbGVuZGFyIHN0YW5kYXJkKVxuXHRcdFx0XHRycnVsZTogdW5kZWZpbmVkLCAvLyBTdGFuZGFsb25lIGV2ZW50cyBkb24ndCBoYXZlIFJSVUxFXG5cdFx0XHR9IGFzIENhbGVuZGFyRXZlbnRcblx0XHRcdHVwZGF0ZWRFdmVudHMucHVzaChtb2RpZmllZEV2ZW50KVxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdmb2xsb3dpbmcnOiB7XG5cdFx0XHQvLyBcIlRoaXMgYW5kIGZvbGxvd2luZ1wiIC0gVGVybWluYXRlIG9yaWdpbmFsIHNlcmllcyBhbmQgY3JlYXRlIG5ldyBzZXJpZXNcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSB0ZXJtaW5hdGlvbiBkYXRlOiBkYXkgYmVmb3JlIHRhcmdldCB3aXRoIGVuZCBvZiBkYXkgdGltZVxuXHRcdFx0Ly8gVGhpcyBlbnN1cmVzIHRoZSBsYXN0IG9jY3VycmVuY2UgYmVmb3JlIHRhcmdldCBpcyBpbmNsdWRlZCBpbiB0aGUgdGVybWluYXRlZCBzZXJpZXNcblx0XHRcdGNvbnN0IGRheUJlZm9yZVRhcmdldCA9IHRhcmdldEV2ZW50LnN0YXJ0LnN1YnRyYWN0KDEsICdkYXknKVxuXHRcdFx0Y29uc3QgdGVybWluYXRpb25EYXRlID0gZGF5QmVmb3JlVGFyZ2V0LmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXG5cdFx0XHQvLyBVcGRhdGUgb3JpZ2luYWwgc2VyaWVzIHdpdGggVU5USUwgdG8gZW5kIGJlZm9yZSB0YXJnZXQgZGF0ZVxuXHRcdFx0Y29uc3QgdGVybWluYXRlZEV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdHJydWxlOiB7XG5cdFx0XHRcdFx0Li4uYmFzZUV2ZW50LnJydWxlLFxuXHRcdFx0XHRcdHVudGlsOiB0ZXJtaW5hdGlvbkRhdGUsXG5cdFx0XHRcdH0sXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHRlcm1pbmF0ZWRFdmVudFxuXG5cdFx0XHQvLyBDcmVhdGUgbmV3IHNlcmllcyBzdGFydGluZyBmcm9tIHRhcmdldCBkYXRlXG5cdFx0XHRjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gYmFzZUV2ZW50LmVuZC5kaWZmKGJhc2VFdmVudC5zdGFydClcblx0XHRcdGNvbnN0IG5ld1Nlcmllc1N0YXJ0VGltZSA9IHVwZGF0ZXMuc3RhcnQgfHwgdGFyZ2V0RXZlbnQuc3RhcnRcblx0XHRcdGNvbnN0IG5ld1Nlcmllc0VuZFRpbWUgPVxuXHRcdFx0XHR1cGRhdGVzLmVuZCB8fCBuZXdTZXJpZXNTdGFydFRpbWUuYWRkKG9yaWdpbmFsRHVyYXRpb24pXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNJZCA9IGAke2Jhc2VFdmVudC5pZH1fZm9sbG93aW5nYFxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzVUlEID0gYCR7bmV3U2VyaWVzSWR9QGlsYW15LmNhbGVuZGFyYFxuXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHQuLi51cGRhdGVzLFxuXHRcdFx0XHRycnVsZToge1xuXHRcdFx0XHRcdC4uLmJhc2VFdmVudC5ycnVsZSxcblx0XHRcdFx0XHQuLi51cGRhdGVzLnJydWxlLFxuXHRcdFx0XHRcdGR0c3RhcnQ6IG5ld1Nlcmllc1N0YXJ0VGltZS50b0RhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0aWQ6IG5ld1Nlcmllc0lkLFxuXHRcdFx0XHR1aWQ6IG5ld1Nlcmllc1VJRCwgLy8gTmV3IFVJRCBmb3IgbmV3IHNlcmllc1xuXHRcdFx0XHRzdGFydDogbmV3U2VyaWVzU3RhcnRUaW1lLFxuXHRcdFx0XHRlbmQ6IG5ld1Nlcmllc0VuZFRpbWUsXG5cdFx0XHRcdHJlY3VycmVuY2VJZDogdW5kZWZpbmVkLCAvLyBUaGlzIGlzIGEgbmV3IGJhc2UgZXZlbnQsIG5vdCBhbiBpbnN0YW5jZVxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50cy5wdXNoKG5ld1Nlcmllc0V2ZW50KVxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdhbGwnOiB7XG5cdFx0XHQvLyBcIkFsbCBldmVudHNcIiAtIFVwZGF0ZSB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcblx0XHRcdGNvbnN0IHVwZGF0ZWRCYXNlRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0Li4udXBkYXRlcyxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG5cdFx0XHQpXG5cdH1cblxuXHRyZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuXG5pbnRlcmZhY2UgRGVsZXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG5cdHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgZGVsZXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuXHR0YXJnZXRFdmVudCxcblx0Y3VycmVudEV2ZW50cyxcblx0c2NvcGUsXG59OiBEZWxldGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Y29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXG5cdC8vIEZpbmQgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50XG5cdGNvbnN0IHRhcmdldFVpZCA9IGdldEV2ZW50UGFyZW50VUlEKHRhcmdldEV2ZW50KVxuXHRjb25zdCBiYXNlRXZlbnRJbmRleCA9IHVwZGF0ZWRFdmVudHMuZmluZEluZGV4KChlKSA9PiB7XG5cdFx0cmV0dXJuIGdldEV2ZW50UGFyZW50VUlEKGUpID09PSB0YXJnZXRVaWQgJiYgZS5ycnVsZSAmJiAhZS5yZWN1cnJlbmNlSWRcblx0fSlcblxuXHRpZiAoYmFzZUV2ZW50SW5kZXggPT09IC0xKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdCYXNlIHJlY3VycmluZyBldmVudCBub3QgZm91bmQnKVxuXHR9XG5cblx0Y29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuXHRzd2l0Y2ggKHNjb3BlKSB7XG5cdFx0Y2FzZSAndGhpcyc6IHtcblx0XHRcdC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGV4Y2x1ZGUgdGhpcyBvY2N1cnJlbmNlXG5cdFx0XHRjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0Y29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cblx0XHRcdGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuXHRcdFx0Y29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHsgLi4uYmFzZUV2ZW50LCBleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyB9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHVwZGF0ZWRCYXNlRXZlbnRcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y2FzZSAnZm9sbG93aW5nJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGFuZCBmb2xsb3dpbmdcIiAtIFRlcm1pbmF0ZSBzZXJpZXMgd2l0aCBVTlRJTCBiZWZvcmUgdGFyZ2V0IGRhdGVcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSB0ZXJtaW5hdGlvbiBkYXRlOiBkYXkgYmVmb3JlIHRhcmdldCB3aXRoIGVuZCBvZiBkYXkgdGltZVxuXHRcdFx0Ly8gVGhpcyBlbnN1cmVzIHRoZSBsYXN0IG9jY3VycmVuY2UgYmVmb3JlIHRhcmdldCBpcyBpbmNsdWRlZCBpbiB0aGUgdGVybWluYXRlZCBzZXJpZXNcblx0XHRcdGNvbnN0IGRheUJlZm9yZVRhcmdldCA9IHRhcmdldEV2ZW50LnN0YXJ0LnN1YnRyYWN0KDEsICdkYXknKVxuXHRcdFx0Y29uc3QgdGVybWluYXRpb25EYXRlID0gZGF5QmVmb3JlVGFyZ2V0LmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXG5cdFx0XHRjb25zdCB0ZXJtaW5hdGVkRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0cnJ1bGU6IHtcblx0XHRcdFx0XHQuLi5iYXNlRXZlbnQucnJ1bGUsXG5cdFx0XHRcdFx0dW50aWw6IHRlcm1pbmF0aW9uRGF0ZSxcblx0XHRcdFx0fSxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdGVybWluYXRlZEV2ZW50XG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGNhc2UgJ2FsbCc6IHtcblx0XHRcdC8vIFwiQWxsIGV2ZW50c1wiIC0gUmVtb3ZlIHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllc1xuXHRcdFx0Y29uc3QgdGFyZ2V0VWlkID0gZ2V0RXZlbnRQYXJlbnRVSUQodGFyZ2V0RXZlbnQpXG5cdFx0XHRjb25zdCBldmVudHNXaXRob3V0VGFyZ2V0U2VyaWVzID0gdXBkYXRlZEV2ZW50cy5maWx0ZXIoXG5cdFx0XHRcdChlKSA9PiBnZXRFdmVudFBhcmVudFVJRChlKSAhPT0gdGFyZ2V0VWlkXG5cdFx0XHQpXG5cdFx0XHRyZXR1cm4gZXZlbnRzV2l0aG91dFRhcmdldFNlcmllc1xuXHRcdH1cblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdGBJbnZhbGlkIHNjb3BlOiAke3Njb3BlfS4gTXVzdCBiZSAndGhpcycsICdmb2xsb3dpbmcnLCBvciAnYWxsJ2Bcblx0XHRcdClcblx0fVxuXG5cdHJldHVybiB1cGRhdGVkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcbmltcG9ydCBpc0JldHdlZW4gZnJvbSAnZGF5anMvcGx1Z2luL2lzQmV0d2Vlbi5qcydcbmltcG9ydCBpc1NhbWVPckFmdGVyIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckFmdGVyLmpzJ1xuaW1wb3J0IGlzU2FtZU9yQmVmb3JlIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckJlZm9yZS5qcydcbmltcG9ydCBsb2NhbGVEYXRhIGZyb20gJ2RheWpzL3BsdWdpbi9sb2NhbGVEYXRhLmpzJ1xuaW1wb3J0IG1pbk1heCBmcm9tICdkYXlqcy9wbHVnaW4vbWluTWF4LmpzJ1xuaW1wb3J0IHRpbWV6b25lIGZyb20gJ2RheWpzL3BsdWdpbi90aW1lem9uZS5qcydcbmltcG9ydCB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yy5qcydcbmltcG9ydCB3ZWVrZGF5IGZyb20gJ2RheWpzL3BsdWdpbi93ZWVrZGF5LmpzJ1xuaW1wb3J0IHdlZWtPZlllYXIgZnJvbSAnZGF5anMvcGx1Z2luL3dlZWtPZlllYXIuanMnXG5cbi8vIEV4dGVuZCBkYXlqcyB3aXRoIHBsdWdpbnNcbmRheWpzLmV4dGVuZCh3ZWVrZGF5KVxuZGF5anMuZXh0ZW5kKHdlZWtPZlllYXIpXG5kYXlqcy5leHRlbmQoaXNTYW1lT3JBZnRlcilcbmRheWpzLmV4dGVuZChpc1NhbWVPckJlZm9yZSlcbmRheWpzLmV4dGVuZChpc0JldHdlZW4pXG5kYXlqcy5leHRlbmQobWluTWF4KVxuZGF5anMuZXh0ZW5kKHRpbWV6b25lKVxuZGF5anMuZXh0ZW5kKHV0YylcbmRheWpzLmV4dGVuZChsb2NhbGVEYXRhKVxuXG5leHBvcnQgZGVmYXVsdCBkYXlqc1xuIiwKICAgICJpbXBvcnQgdHlwZSB7IENsYXNzVmFsdWUgfSBmcm9tICdjbHN4J1xuaW1wb3J0IHsgY2xzeCB9IGZyb20gJ2Nsc3gnXG5pbXBvcnQgeyB0d01lcmdlIH0gZnJvbSAndGFpbHdpbmQtbWVyZ2UnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmV4cG9ydCBmdW5jdGlvbiBjbiguLi5pbnB1dHM6IENsYXNzVmFsdWVbXSkge1xuXHRyZXR1cm4gdHdNZXJnZShjbHN4KGlucHV0cykpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYWZlRGF0ZShcblx0ZGF0ZTogZGF5anMuRGF5anMgfCBEYXRlIHwgc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBkYXlqcy5EYXlqcyB8IHVuZGVmaW5lZCB7XG5cdGlmIChkYXRlID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkXG5cdH1cblx0aWYgKGRheWpzLmlzRGF5anMoZGF0ZSkpIHtcblx0XHRyZXR1cm4gZGF0ZVxuXHR9XG5cdGNvbnN0IHBhcnNlZERhdGUgPSBkYXlqcyhkYXRlKVxuXHRyZXR1cm4gcGFyc2VkRGF0ZS5pc1ZhbGlkKCkgPyBwYXJzZWREYXRlIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBjb25zdCBvbWl0S2V5cyA9IDxUIGV4dGVuZHMgb2JqZWN0LCBLIGV4dGVuZHMga2V5b2YgVD4oXG5cdG9iajogVCxcblx0a2V5czogS1tdXG4pOiBPbWl0PFQsIEs+ID0+IHtcblx0Y29uc3QgcmVzdWx0ID0geyAuLi5vYmogfVxuXHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0ZGVsZXRlIHJlc3VsdFtrZXldXG5cdH1cblx0cmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgY2FsZW5kYXIgZXZlbnRzIGZyb20gcHVibGljLWZhY2luZyBmb3JtYXQgdG8gaW50ZXJuYWwgZm9ybWF0LlxuICogQ29udmVydHMgZmxleGlibGUgZGF0ZSB0eXBlcyAoZGF5anMsIERhdGUsIHN0cmluZykgdG8gc3RyaWN0IGRheWpzIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIGV2ZW50cyAtIEFycmF5IG9mIGNhbGVuZGFyIGV2ZW50cyB3aXRoIGZsZXhpYmxlIGRhdGUgdHlwZXNcbiAqIEByZXR1cm5zIE5vcm1hbGl6ZWQgYXJyYXkgb2YgY2FsZW5kYXIgZXZlbnRzIHdpdGggZGF5anMgZGF0ZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVndWxhciBjYWxlbmRhciBldmVudHNcbiAqIGNvbnN0IGV2ZW50cyA9IG5vcm1hbGl6ZUV2ZW50czxJbGFteUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50Pihwcm9wRXZlbnRzKVxuICpcbiAqIC8vIFJlc291cmNlIGNhbGVuZGFyIGV2ZW50c1xuICogY29uc3QgcmVzb3VyY2VFdmVudHMgPSBub3JtYWxpemVFdmVudHM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50Pihwcm9wRXZlbnRzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplRXZlbnRzPFxuXHRUSW5wdXQgZXh0ZW5kcyB7XG5cdFx0c3RhcnQ6IGRheWpzLkRheWpzIHwgRGF0ZSB8IHN0cmluZ1xuXHRcdGVuZDogZGF5anMuRGF5anMgfCBEYXRlIHwgc3RyaW5nXG5cdH0sXG5cdFRPdXRwdXQsXG4+KGV2ZW50czogVElucHV0W10gfCB1bmRlZmluZWQpOiBUT3V0cHV0W10ge1xuXHRpZiAoIWV2ZW50cyB8fCAhZXZlbnRzLmxlbmd0aCkge1xuXHRcdHJldHVybiBbXVxuXHR9XG5cblx0cmV0dXJuIGV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0c3RhcnQ6IGRheWpzLmlzRGF5anMoZXZlbnQuc3RhcnQpID8gZXZlbnQuc3RhcnQgOiBkYXlqcyhldmVudC5zdGFydCksXG5cdFx0XHRlbmQ6IGRheWpzLmlzRGF5anMoZXZlbnQuZW5kKSA/IGV2ZW50LmVuZCA6IGRheWpzKGV2ZW50LmVuZCksXG5cdFx0fSBhcyBUT3V0cHV0XG5cdH0pXG59XG4iLAogICAgImltcG9ydCB7XG5cdEFuaW1hdGVQcmVzZW5jZSxcblx0dHlwZSBIVE1MTW90aW9uUHJvcHMsXG5cdG1vdGlvbixcblx0dHlwZSBWYXJpYW50cyxcbn0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBBbmltYXRlZFNlY3Rpb25Qcm9wc1xuXHRleHRlbmRzIE9taXQ8SFRNTE1vdGlvblByb3BzPCdkaXYnPiwgJ2NoaWxkcmVuJyB8ICdsYXlvdXQnIHwgJ2xheW91dElkJz4ge1xuXHRjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG5cdHRyYW5zaXRpb25LZXk6IHN0cmluZ1xuXHRkZWxheT86IG51bWJlclxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0ZGlyZWN0aW9uPzogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJ1xuXHRsYXlvdXQ/OiBib29sZWFuIHwgJ3Bvc2l0aW9uJyB8ICdzaXplJyB8ICdwcmVzZXJ2ZS1hc3BlY3QnXG5cdGxheW91dElkPzogc3RyaW5nXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcbn1cblxuY29uc3QgdmFyaWFudHM6IFZhcmlhbnRzID0ge1xuXHRoaWRkZW46ICh7IGRpcmVjdGlvbiB9OiB7IGRpcmVjdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB9KSA9PiAoe1xuXHRcdG9wYWNpdHk6IDAsXG5cdFx0eDogZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAxMCA6IDAsXG5cdFx0eTogZGlyZWN0aW9uID09PSAndmVydGljYWwnID8gLTEwIDogMCxcblx0fSksXG5cdHZpc2libGU6ICh7IGRlbGF5IH06IHsgZGVsYXk6IG51bWJlciB9KSA9PiAoe1xuXHRcdG9wYWNpdHk6IDEsXG5cdFx0eDogMCxcblx0XHR5OiAwLFxuXHRcdHRyYW5zaXRpb246IHsgZHVyYXRpb246IDAuMiwgZWFzZTogWzAuNCwgMCwgMC4yLCAxXSwgZGVsYXkgfSxcblx0fSksXG5cdGV4aXQ6ICh7IGRpcmVjdGlvbiB9OiB7IGRpcmVjdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB9KSA9PiAoe1xuXHRcdG9wYWNpdHk6IDAsXG5cdFx0eDogZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAtMTAgOiAwLFxuXHRcdHk6IGRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/IC0xMCA6IDAsXG5cdFx0dHJhbnNpdGlvbjogeyBkdXJhdGlvbjogMC4xNSB9LFxuXHR9KSxcbn1cblxuZXhwb3J0IGNvbnN0IEFuaW1hdGVkU2VjdGlvbjogUmVhY3QuRkM8QW5pbWF0ZWRTZWN0aW9uUHJvcHM+ID0gKHtcblx0Y2hpbGRyZW4sXG5cdHRyYW5zaXRpb25LZXksXG5cdGRlbGF5ID0gMCxcblx0Y2xhc3NOYW1lLFxuXHRkaXJlY3Rpb24gPSAndmVydGljYWwnLFxuXHRsYXlvdXQsXG5cdGxheW91dElkLFxuXHQnZGF0YS10ZXN0aWQnOiB0ZXN0SWQsXG5cdHJlZixcblx0Li4ucHJvcHNcbn0pID0+IChcblx0PEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuXHRcdDxtb3Rpb24uZGl2XG5cdFx0XHRhbmltYXRlPVwidmlzaWJsZVwiXG5cdFx0XHRjbGFzc05hbWU9e2NuKCdpbmxpbmUtYmxvY2sgdy1mdWxsJywgY2xhc3NOYW1lKX1cblx0XHRcdGN1c3RvbT17eyBkZWxheSwgZGlyZWN0aW9uIH19XG5cdFx0XHRkYXRhLXRlc3RpZD17dGVzdElkfVxuXHRcdFx0ZXhpdD1cImV4aXRcIlxuXHRcdFx0aW5pdGlhbD1cImhpZGRlblwiXG5cdFx0XHRrZXk9e3RyYW5zaXRpb25LZXl9XG5cdFx0XHRsYXlvdXQ9e2xheW91dH1cblx0XHRcdGxheW91dElkPXtsYXlvdXRJZH1cblx0XHRcdHJlZj17cmVmfVxuXHRcdFx0dmFyaWFudHM9e3ZhcmlhbnRzfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L21vdGlvbi5kaXY+XG5cdDwvQW5pbWF0ZVByZXNlbmNlPlxuKVxuXG5BbmltYXRlZFNlY3Rpb24uZGlzcGxheU5hbWUgPSAnQW5pbWF0ZWRTZWN0aW9uJ1xuIiwKICAgICJpbXBvcnQgdHlwZSB7XG5cdERyYWdDYW5jZWxFdmVudCxcblx0RHJhZ0VuZEV2ZW50LFxuXHREcmFnU3RhcnRFdmVudCxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7XG5cdERuZENvbnRleHQsXG5cdE1vdXNlU2Vuc29yLFxuXHRwb2ludGVyV2l0aGluLFxuXHRUb3VjaFNlbnNvcixcblx0dXNlU2Vuc29yLFxuXHR1c2VTZW5zb3JzLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdERpYWxvZyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyBpc1JlY3VycmluZ0V2ZW50IH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGdldFVwZGF0ZWRFdmVudCB9IGZyb20gJy4vZG5kLXV0aWxzJ1xuaW1wb3J0IHsgRXZlbnREcmFnT3ZlcmxheSB9IGZyb20gJy4vZXZlbnQtZHJhZy1vdmVybGF5J1xuXG5pbnRlcmZhY2UgQ2FsZW5kYXJEbmRDb250ZXh0UHJvcHMge1xuXHRjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDYWxlbmRhckRuZENvbnRleHQoeyBjaGlsZHJlbiB9OiBDYWxlbmRhckRuZENvbnRleHRQcm9wcykge1xuXHRjb25zdCBhY3RpdmVFdmVudFJlZiA9IHVzZVJlZjxDYWxlbmRhckV2ZW50PihudWxsKVxuXHRjb25zdCBkcmFnT3ZlcmxheVJlZiA9IHVzZVJlZjx7XG5cdFx0c2V0QWN0aXZlRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHR9PihudWxsKVxuXG5cdGNvbnN0IHsgdXBkYXRlRXZlbnQsIHVwZGF0ZVJlY3VycmluZ0V2ZW50LCBkaXNhYmxlRHJhZ0FuZERyb3AgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0XHR1cGRhdGVFdmVudDogY29udGV4dC51cGRhdGVFdmVudCxcblx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiBjb250ZXh0LnVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wOiBjb250ZXh0LmRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHR9KSlcblxuXHQvLyBTdGF0ZSBmb3IgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZ1xuXHRjb25zdCBbcmVjdXJyaW5nRGlhbG9nLCBzZXRSZWN1cnJpbmdEaWFsb2ddID0gdXNlU3RhdGU8e1xuXHRcdGlzT3BlbjogYm9vbGVhblxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4gfCBudWxsXG5cdH0+KHtcblx0XHRpc09wZW46IGZhbHNlLFxuXHRcdGV2ZW50OiBudWxsLFxuXHRcdHVwZGF0ZXM6IG51bGwsXG5cdH0pXG5cblx0Ly8gQ29uZmlndXJlIHNlbnNvcnMgd2l0aCByZWR1Y2VkIGFjdGl2YXRpb24gY29uc3RyYWludHMgZm9yIGVhc2llciBkcmFnZ2luZ1xuXHRjb25zdCBtb3VzZVNlbnNvciA9IHVzZVNlbnNvcihNb3VzZVNlbnNvciwge1xuXHRcdC8vIFJlcXVpcmUgbWluaW1hbCBtb3ZlbWVudCBiZWZvcmUgYWN0aXZhdGluZ1xuXHRcdGFjdGl2YXRpb25Db25zdHJhaW50OiB7XG5cdFx0XHRkaXN0YW5jZTogMixcblx0XHR9LFxuXHR9KVxuXG5cdGNvbnN0IHRvdWNoU2Vuc29yID0gdXNlU2Vuc29yKFRvdWNoU2Vuc29yLCB7XG5cdFx0Ly8gUmVkdWNlIGRlbGF5IGZvciB0b3VjaCBkZXZpY2VzXG5cdFx0YWN0aXZhdGlvbkNvbnN0cmFpbnQ6IHtcblx0XHRcdGRlbGF5OiAxMDAsXG5cdFx0XHR0b2xlcmFuY2U6IDUsXG5cdFx0fSxcblx0fSlcblxuXHRjb25zdCBzZW5zb3JzID0gdXNlU2Vuc29ycyhtb3VzZVNlbnNvciwgdG91Y2hTZW5zb3IpXG5cblx0Ly8gSGVscGVyIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBldmVudCB1cGRhdGVcblx0Y29uc3QgcGVyZm9ybUV2ZW50VXBkYXRlID0gKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cblx0KSA9PiB7XG5cdFx0Ly8gVmFsaWRhdGUgaW5wdXRzXG5cdFx0aWYgKCFldmVudCB8fCAhZXZlbnQuaWQpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGlmICghdXBkYXRlcyB8fCBPYmplY3Qua2V5cyh1cGRhdGVzKS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGlmIChpc1JlY3VycmluZ0V2ZW50KGV2ZW50KSkge1xuXHRcdFx0Ly8gU2hvdyBkaWFsb2cgZm9yIHJlY3VycmluZyBldmVudHNcblx0XHRcdHNldFJlY3VycmluZ0RpYWxvZyh7XG5cdFx0XHRcdGlzT3BlbjogdHJ1ZSxcblx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdHVwZGF0ZXMsXG5cdFx0XHR9KVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBEaXJlY3RseSB1cGRhdGUgcmVndWxhciBldmVudHNcblx0XHRcdHVwZGF0ZUV2ZW50KGV2ZW50LmlkLCB1cGRhdGVzKVxuXHRcdH1cblx0fVxuXG5cdC8vIEhhbmRsZSByZWN1cnJpbmcgZXZlbnQgZGlhbG9nIGNvbmZpcm1hdGlvblxuXHRjb25zdCBoYW5kbGVSZWN1cnJpbmdFdmVudENvbmZpcm0gPSAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcblx0XHRpZiAoIXJlY3VycmluZ0RpYWxvZy5ldmVudCB8fCAhcmVjdXJyaW5nRGlhbG9nLnVwZGF0ZXMpIHtcblx0XHRcdHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQocmVjdXJyaW5nRGlhbG9nLmV2ZW50LCByZWN1cnJpbmdEaWFsb2cudXBkYXRlcywge1xuXHRcdFx0XHRzY29wZSxcblx0XHRcdFx0ZXZlbnREYXRlOiByZWN1cnJpbmdEaWFsb2cuZXZlbnQuc3RhcnQsXG5cdFx0XHR9KVxuXHRcdH0gY2F0Y2gge1xuXHRcdFx0Ly8gU2lsZW50bHkgaGFuZGxlIGVycm9yIGFuZCByZXNldCBkaWFsb2cgc3RhdGVcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0c2V0UmVjdXJyaW5nRGlhbG9nKHsgaXNPcGVuOiBmYWxzZSwgZXZlbnQ6IG51bGwsIHVwZGF0ZXM6IG51bGwgfSlcblx0XHR9XG5cdH1cblxuXHQvLyBIYW5kbGUgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZyBjbG9zZVxuXHRjb25zdCBoYW5kbGVSZWN1cnJpbmdFdmVudENsb3NlID0gKCkgPT4ge1xuXHRcdHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG5cdH1cblxuXHRjb25zdCBoYW5kbGVEcmFnU3RhcnQgPSAoZXZlbnQ6IERyYWdTdGFydEV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgeyBhY3RpdmUgfSA9IGV2ZW50XG5cblx0XHQvLyBTZXQgdGhlIGFjdGl2ZSBldmVudCBiYXNlZCBvbiB0aGUgZXZlbnQgZGF0YVxuXHRcdGlmIChhY3RpdmUuZGF0YS5jdXJyZW50Py50eXBlID09PSAnY2FsZW5kYXItZXZlbnQnKSB7XG5cdFx0XHRkcmFnT3ZlcmxheVJlZi5jdXJyZW50Py5zZXRBY3RpdmVFdmVudChhY3RpdmUuZGF0YS5jdXJyZW50LmV2ZW50KVxuXHRcdFx0YWN0aXZlRXZlbnRSZWYuY3VycmVudCA9IGFjdGl2ZS5kYXRhLmN1cnJlbnQuZXZlbnRcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVEcmFnRW5kID0gKGV2ZW50OiBEcmFnRW5kRXZlbnQpID0+IHtcblx0XHRjb25zdCB1cGRhdGVkRXZlbnQgPSBnZXRVcGRhdGVkRXZlbnQoZXZlbnQsIGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQpXG5cdFx0aWYgKHVwZGF0ZWRFdmVudCkge1xuXHRcdFx0Y29uc3QgeyBhY3RpdmVFdmVudCwgdXBkYXRlcyB9ID0gdXBkYXRlZEV2ZW50XG5cdFx0XHRwZXJmb3JtRXZlbnRVcGRhdGUoYWN0aXZlRXZlbnQsIHVwZGF0ZXMpXG5cdFx0fVxuXG5cdFx0Ly8gQ2xlYXIgdGhlIGFjdGl2ZSBldmVudCByZWZlcmVuY2Vcblx0XHRhY3RpdmVFdmVudFJlZi5jdXJyZW50ID0gbnVsbFxuXHRcdGRyYWdPdmVybGF5UmVmLmN1cnJlbnQ/LnNldEFjdGl2ZUV2ZW50KG51bGwpXG5cdH1cblxuXHRjb25zdCBoYW5kbGVEcmFnQ2FuY2VsID0gKF9ldmVudDogRHJhZ0NhbmNlbEV2ZW50KSA9PiB7XG5cdFx0YWN0aXZlRXZlbnRSZWYuY3VycmVudCA9IG51bGxcblx0fVxuXG5cdC8vIElmIGRyYWcgYW5kIGRyb3AgaXMgZGlzYWJsZWQsIGp1c3QgcmV0dXJuIGNoaWxkcmVuIHdpdGhvdXQgRG5kQ29udGV4dFxuXHRpZiAoZGlzYWJsZURyYWdBbmREcm9wKSB7XG5cdFx0cmV0dXJuIGNoaWxkcmVuIGFzIFJlYWN0LlJlYWN0RWxlbWVudFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0PERuZENvbnRleHRcblx0XHRcdFx0Y29sbGlzaW9uRGV0ZWN0aW9uPXtwb2ludGVyV2l0aGlufVxuXHRcdFx0XHRvbkRyYWdDYW5jZWw9e2hhbmRsZURyYWdDYW5jZWx9XG5cdFx0XHRcdG9uRHJhZ0VuZD17aGFuZGxlRHJhZ0VuZH1cblx0XHRcdFx0b25EcmFnU3RhcnQ9e2hhbmRsZURyYWdTdGFydH1cblx0XHRcdFx0c2Vuc29ycz17c2Vuc29yc31cblx0XHRcdD5cblx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0XHQ8RXZlbnREcmFnT3ZlcmxheSByZWY9e2RyYWdPdmVybGF5UmVmfSAvPlxuXHRcdFx0PC9EbmRDb250ZXh0PlxuXG5cdFx0XHR7LyogUmVjdXJyaW5nIGV2ZW50IGVkaXQgZGlhbG9nICovfVxuXHRcdFx0PFJlY3VycmVuY2VFZGl0RGlhbG9nXG5cdFx0XHRcdGV2ZW50VGl0bGU9e3JlY3VycmluZ0RpYWxvZy5ldmVudD8udGl0bGUgfHwgJyd9XG5cdFx0XHRcdGlzT3Blbj17cmVjdXJyaW5nRGlhbG9nLmlzT3Blbn1cblx0XHRcdFx0b25DbG9zZT17aGFuZGxlUmVjdXJyaW5nRXZlbnRDbG9zZX1cblx0XHRcdFx0b25Db25maXJtPXtoYW5kbGVSZWN1cnJpbmdFdmVudENvbmZpcm19XG5cdFx0XHRcdG9wZXJhdGlvblR5cGU9XCJlZGl0XCJcblx0XHRcdC8+XG5cdFx0PC8+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgU2xvdCB9IGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zbG90J1xuaW1wb3J0IHR5cGUgeyBWYXJpYW50UHJvcHMgfSBmcm9tICdjbGFzcy12YXJpYW5jZS1hdXRob3JpdHknXG5pbXBvcnQgeyBjdmEgfSBmcm9tICdjbGFzcy12YXJpYW5jZS1hdXRob3JpdHknXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBidXR0b25WYXJpYW50cyA9IGN2YShcblx0XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgd2hpdGVzcGFjZS1ub3dyYXAgcm91bmRlZC1tZCB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tYWxsIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6b3BhY2l0eS01MCBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00IHNocmluay0wIFsmX3N2Z106c2hyaW5rLTAgb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZVwiLFxuXHR7XG5cdFx0dmFyaWFudHM6IHtcblx0XHRcdHZhcmlhbnQ6IHtcblx0XHRcdFx0ZGVmYXVsdDogJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgaG92ZXI6YmctcHJpbWFyeS85MCcsXG5cdFx0XHRcdGRlc3RydWN0aXZlOlxuXHRcdFx0XHRcdCdiZy1kZXN0cnVjdGl2ZSB0ZXh0LXdoaXRlIGhvdmVyOmJnLWRlc3RydWN0aXZlLzkwIGZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS80MCBkYXJrOmJnLWRlc3RydWN0aXZlLzYwJyxcblx0XHRcdFx0b3V0bGluZTpcblx0XHRcdFx0XHQnYm9yZGVyIGJnLWJhY2tncm91bmQgc2hhZG93LXhzIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRhcms6YmctaW5wdXQvMzAgZGFyazpib3JkZXItaW5wdXQgZGFyazpob3ZlcjpiZy1pbnB1dC81MCcsXG5cdFx0XHRcdHNlY29uZGFyeTpcblx0XHRcdFx0XHQnYmctc2Vjb25kYXJ5IHRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmQgaG92ZXI6Ymctc2Vjb25kYXJ5LzgwJyxcblx0XHRcdFx0Z2hvc3Q6XG5cdFx0XHRcdFx0J2hvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRhcms6aG92ZXI6YmctYWNjZW50LzUwJyxcblx0XHRcdFx0bGluazogJ3RleHQtcHJpbWFyeSB1bmRlcmxpbmUtb2Zmc2V0LTQgaG92ZXI6dW5kZXJsaW5lJyxcblx0XHRcdH0sXG5cdFx0XHRzaXplOiB7XG5cdFx0XHRcdGRlZmF1bHQ6ICdoLTkgcHgtNCBweS0yIGhhcy1bPnN2Z106cHgtMycsXG5cdFx0XHRcdHNtOiAnaC04IHJvdW5kZWQtbWQgZ2FwLTEuNSBweC0zIGhhcy1bPnN2Z106cHgtMi41Jyxcblx0XHRcdFx0bGc6ICdoLTEwIHJvdW5kZWQtbWQgcHgtNiBoYXMtWz5zdmddOnB4LTQnLFxuXHRcdFx0XHRpY29uOiAnc2l6ZS05Jyxcblx0XHRcdFx0J2ljb24tc20nOiAnc2l6ZS04Jyxcblx0XHRcdFx0J2ljb24tbGcnOiAnc2l6ZS0xMCcsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0ZGVmYXVsdFZhcmlhbnRzOiB7XG5cdFx0XHR2YXJpYW50OiAnZGVmYXVsdCcsXG5cdFx0XHRzaXplOiAnZGVmYXVsdCcsXG5cdFx0fSxcblx0fVxuKVxuXG5mdW5jdGlvbiBCdXR0b24oe1xuXHRjbGFzc05hbWUsXG5cdHZhcmlhbnQsXG5cdHNpemUsXG5cdGFzQ2hpbGQgPSBmYWxzZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdidXR0b24nPiAmXG5cdFZhcmlhbnRQcm9wczx0eXBlb2YgYnV0dG9uVmFyaWFudHM+ICYge1xuXHRcdGFzQ2hpbGQ/OiBib29sZWFuXG5cdH0pIHtcblx0Y29uc3QgQ29tcCA9IGFzQ2hpbGQgPyBTbG90IDogJ2J1dHRvbidcblxuXHRyZXR1cm4gKFxuXHRcdDxDb21wXG5cdFx0XHRjbGFzc05hbWU9e2NuKGJ1dHRvblZhcmlhbnRzKHsgdmFyaWFudCwgc2l6ZSwgY2xhc3NOYW1lIH0pKX1cblx0XHRcdGRhdGEtc2xvdD1cImJ1dHRvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgeyBCdXR0b24sIGJ1dHRvblZhcmlhbnRzIH1cbiIsCiAgICAiaW1wb3J0ICogYXMgRGlhbG9nUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1kaWFsb2cnXG5pbXBvcnQgeyBYSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIERpYWxvZyh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlJvb3Q+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwiZGlhbG9nXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dUcmlnZ2VyKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuVHJpZ2dlcj4pIHtcblx0cmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuVHJpZ2dlciBkYXRhLXNsb3Q9XCJkaWFsb2ctdHJpZ2dlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nUG9ydGFsKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuUG9ydGFsPikge1xuXHRyZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5Qb3J0YWwgZGF0YS1zbG90PVwiZGlhbG9nLXBvcnRhbFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nQ2xvc2Uoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5DbG9zZT4pIHtcblx0cmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuQ2xvc2UgZGF0YS1zbG90PVwiZGlhbG9nLWNsb3NlXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dPdmVybGF5KHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5PdmVybGF5Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2dQcmltaXRpdmUuT3ZlcmxheVxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2RhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGZpeGVkIGluc2V0LTAgei01MCBiZy1ibGFjay81MCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy1vdmVybGF5XCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0NvbnRlbnQoe1xuXHRjbGFzc05hbWUsXG5cdGNoaWxkcmVuLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Db250ZW50Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2dQb3J0YWwgZGF0YS1zbG90PVwiZGlhbG9nLXBvcnRhbFwiPlxuXHRcdFx0PERpYWxvZ092ZXJsYXkgLz5cblx0XHRcdDxEaWFsb2dQcmltaXRpdmUuQ29udGVudFxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdiZy1iYWNrZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBmaXhlZCB0b3AtWzUwJV0gbGVmdC1bNTAlXSB6LTUwIGdyaWQgdy1mdWxsIG1heC13LVtjYWxjKDEwMCUtMnJlbSldIHRyYW5zbGF0ZS14LVstNTAlXSB0cmFuc2xhdGUteS1bLTUwJV0gZ2FwLTQgcm91bmRlZC1sZyBib3JkZXIgcC02IHNoYWRvdy1sZyBkdXJhdGlvbi0yMDAgc206bWF4LXctbGcgbWF4LWgtWzkwJV0nLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctY29udGVudFwiXG5cdFx0XHRcdHsuLi5wcm9wc31cblx0XHRcdD5cblx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0XHQ8RGlhbG9nUHJpbWl0aXZlLkNsb3NlIGNsYXNzTmFtZT1cInJpbmctb2Zmc2V0LWJhY2tncm91bmQgZm9jdXM6cmluZy1yaW5nIGRhdGEtW3N0YXRlPW9wZW5dOmJnLWFjY2VudCBkYXRhLVtzdGF0ZT1vcGVuXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgYWJzb2x1dGUgdG9wLTQgcmlnaHQtNCByb3VuZGVkLXhzIG9wYWNpdHktNzAgdHJhbnNpdGlvbi1vcGFjaXR5IGhvdmVyOm9wYWNpdHktMTAwIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLW9mZnNldC0yIGZvY3VzOm91dGxpbmUtaGlkZGVuIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCI+XG5cdFx0XHRcdFx0PFhJY29uIC8+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxuXHRcdFx0XHQ8L0RpYWxvZ1ByaW1pdGl2ZS5DbG9zZT5cblx0XHRcdDwvRGlhbG9nUHJpbWl0aXZlLkNvbnRlbnQ+XG5cdFx0PC9EaWFsb2dQb3J0YWw+XG5cdClcbn1cblxuZnVuY3Rpb24gRGlhbG9nSGVhZGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdmbGV4IGZsZXgtY29sIGdhcC0yIHRleHQtY2VudGVyIHNtOnRleHQtbGVmdCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctaGVhZGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Zvb3Rlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggZmxleC1jb2wtcmV2ZXJzZSBnYXAtMiBzbTpmbGV4LXJvdyBzbTpqdXN0aWZ5LWVuZCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy1mb290ZXJcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gRGlhbG9nVGl0bGUoe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlRpdGxlPikge1xuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2dQcmltaXRpdmUuVGl0bGVcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3RleHQtbGcgbGVhZGluZy1ub25lIGZvbnQtc2VtaWJvbGQnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLXRpdGxlXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Rlc2NyaXB0aW9uKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvbj4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUHJpbWl0aXZlLkRlc2NyaXB0aW9uXG5cdFx0XHRjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1zbScsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctZGVzY3JpcHRpb25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHtcblx0RGlhbG9nLFxuXHREaWFsb2dDbG9zZSxcblx0RGlhbG9nQ29udGVudCxcblx0RGlhbG9nRGVzY3JpcHRpb24sXG5cdERpYWxvZ0Zvb3Rlcixcblx0RGlhbG9nSGVhZGVyLFxuXHREaWFsb2dPdmVybGF5LFxuXHREaWFsb2dQb3J0YWwsXG5cdERpYWxvZ1RpdGxlLFxuXHREaWFsb2dUcmlnZ2VyLFxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldyB9IGZyb20gJ0AvdHlwZXMnXG5cbi8qKlxuICogRnVsbCBpbnRlcm5hbCBjb250ZXh0IHR5cGUgdXNlZCBieSBsaWJyYXJ5IGNvbXBvbmVudHMuXG4gKi9cbmV4cG9ydCB0eXBlIFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZSA9IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZVxuXG4vKipcbiAqIFB1YmxpY2x5IGV4cG9zZWQgY2FsZW5kYXIgY29udGV4dCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuIHtcblx0cmVhZG9ubHkgY3VycmVudERhdGU6IGRheWpzLkRheWpzXG5cdHJlYWRvbmx5IHZpZXc6IENhbGVuZGFyVmlld1xuXHRyZWFkb25seSBldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRyZWFkb25seSBpc0V2ZW50Rm9ybU9wZW46IGJvb2xlYW5cblx0cmVhZG9ubHkgc2VsZWN0ZWRFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0cmVhZG9ubHkgc2VsZWN0ZWREYXRlOiBkYXlqcy5EYXlqcyB8IG51bGxcblx0cmVhZG9ubHkgZmlyc3REYXlPZldlZWs6IG51bWJlclxuXHRyZWFkb25seSByZXNvdXJjZXM6IFJlc291cmNlW11cblx0cmVhZG9ubHkgc2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRyZWFkb25seSBzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcblx0cmVhZG9ubHkgc2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRyZWFkb25seSBuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHJlYWRvbmx5IHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgdG9kYXk6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgYWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRyZWFkb25seSB1cGRhdGVFdmVudDogKFxuXHRcdGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcixcblx0XHRldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHQpID0+IHZvaWRcblx0cmVhZG9ubHkgZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0cmVhZG9ubHkgb3BlbkV2ZW50Rm9ybTogKGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0cmVhZG9ubHkgY2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgZ2V0RXZlbnRzRm9yUmVzb3VyY2U6IChcblx0XHRyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXJcblx0KSA9PiBDYWxlbmRhckV2ZW50W11cblx0cmVhZG9ubHkgYnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBob29rIHRoYXQgcmV0dXJucyB0aGUgZnVsbCBjb250ZXh0LlxuICogVXNlZCBieSBpbnRlcm5hbCB2aWV3cywgaGVhZGVycywgYW5kIGdyaWQgY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KCk6IFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZVxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0PFQ+KFxuXHRzZWxlY3RvcjogKGNvbnRleHQ6IFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZSkgPT4gVFxuKTogVFxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0PFQ+KFxuXHRzZWxlY3Rvcj86IChjb250ZXh0OiBTbWFydENhbGVuZGFyQ29udGV4dFR5cGUpID0+IFRcbik6IFQgfCBTbWFydENhbGVuZGFyQ29udGV4dFR5cGUge1xuXHRjb25zdCByZXNvdXJjZUNvbnRleHQgPSB1c2VDb250ZXh0KFJlc291cmNlQ2FsZW5kYXJDb250ZXh0KVxuXHRjb25zdCByZWd1bGFyQ29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuXG5cdC8vIEluIHJlZ3VsYXIgY2FsZW5kYXJzLCByZXNvdXJjZS1zcGVjaWZpYyBmaWVsZHMgd2lsbCBiZSB1bmRlZmluZWQuXG5cdGNvbnN0IGNvbnRleHQgPSAocmVzb3VyY2VDb250ZXh0IHx8XG5cdFx0cmVndWxhckNvbnRleHQpIGFzIFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZVxuXG5cdGlmICghY29udGV4dCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdCd1c2VTbWFydENhbGVuZGFyQ29udGV4dCBtdXN0IGJlIHVzZWQgd2l0aGluIGEgQ2FsZW5kYXJQcm92aWRlciBvciBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXInXG5cdFx0KVxuXHR9XG5cblx0cmV0dXJuIHNlbGVjdG9yID8gc2VsZWN0b3IoY29udGV4dCkgOiBjb250ZXh0XG59XG5cbi8qKlxuICogUHVibGljIGhvb2sgZXhwb3J0ZWQgZm9yIGxpYnJhcnkgdXNlcnMuXG4gKiBSZXR1cm5zIGEgbGltaXRlZCBzZXQgb2YgY29tbW9ubHkgdXNlZCBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSWxhbXlDYWxlbmRhckNvbnRleHQoKTogVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4ge1xuXHRjb25zdCBjb250ZXh0ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdHJldHVybiB7XG5cdFx0Y3VycmVudERhdGU6IGNvbnRleHQuY3VycmVudERhdGUsXG5cdFx0dmlldzogY29udGV4dC52aWV3LFxuXHRcdGV2ZW50czogY29udGV4dC5ldmVudHMsXG5cdFx0aXNFdmVudEZvcm1PcGVuOiBjb250ZXh0LmlzRXZlbnRGb3JtT3Blbixcblx0XHRzZWxlY3RlZEV2ZW50OiBjb250ZXh0LnNlbGVjdGVkRXZlbnQsXG5cdFx0c2VsZWN0ZWREYXRlOiBjb250ZXh0LnNlbGVjdGVkRGF0ZSxcblx0XHRmaXJzdERheU9mV2VlazogY29udGV4dC5maXJzdERheU9mV2Vlayxcblx0XHRyZXNvdXJjZXM6IGNvbnRleHQucmVzb3VyY2VzIHx8IFtdLFxuXHRcdHNldEN1cnJlbnREYXRlOiBjb250ZXh0LnNldEN1cnJlbnREYXRlLFxuXHRcdHNlbGVjdERhdGU6IGNvbnRleHQuc2VsZWN0RGF0ZSxcblx0XHRzZXRWaWV3OiBjb250ZXh0LnNldFZpZXcsXG5cdFx0bmV4dFBlcmlvZDogY29udGV4dC5uZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2Q6IGNvbnRleHQucHJldlBlcmlvZCxcblx0XHR0b2RheTogY29udGV4dC50b2RheSxcblx0XHRhZGRFdmVudDogY29udGV4dC5hZGRFdmVudCxcblx0XHR1cGRhdGVFdmVudDogY29udGV4dC51cGRhdGVFdmVudCxcblx0XHRkZWxldGVFdmVudDogY29udGV4dC5kZWxldGVFdmVudCxcblx0XHRvcGVuRXZlbnRGb3JtOiBjb250ZXh0Lm9wZW5FdmVudEZvcm0sXG5cdFx0Y2xvc2VFdmVudEZvcm06IGNvbnRleHQuY2xvc2VFdmVudEZvcm0sXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2U6IGNvbnRleHQuZ2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0YnVzaW5lc3NIb3VyczogY29udGV4dC5idXNpbmVzc0hvdXJzLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRXZlbnRGb3JtUHJvcHMgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtJ1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNsYXNzZXNPdmVycmlkZSxcblx0Q2VsbENsaWNrSW5mbyxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0b3JGdW5jdGlvbiB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3LCBUaW1lRm9ybWF0IH0gZnJvbSAnQC90eXBlcydcblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhckNvbnRleHRUeXBlIHtcblx0Y3VycmVudERhdGU6IGRheWpzLkRheWpzXG5cdHZpZXc6IENhbGVuZGFyVmlld1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRyYXdFdmVudHM6IENhbGVuZGFyRXZlbnRbXSAvLyBVbnByb2Nlc3NlZCBldmVudHMgZm9yIGV4cG9ydFxuXHRpc0V2ZW50Rm9ybU9wZW46IGJvb2xlYW5cblx0c2VsZWN0ZWRFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0c2VsZWN0ZWREYXRlOiBkYXlqcy5EYXlqcyB8IG51bGxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlciAvLyAwIGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuXHRzZXRDdXJyZW50RGF0ZTogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG5cdHNlbGVjdERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRzZXRWaWV3OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdG5leHRQZXJpb2Q6ICgpID0+IHZvaWRcblx0cHJldlBlcmlvZDogKCkgPT4gdm9pZFxuXHR0b2RheTogKCkgPT4gdm9pZFxuXHRhZGRFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdHVwZGF0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHR1cGRhdGVSZWN1cnJpbmdFdmVudDogKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4sXG5cdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdCkgPT4gdm9pZFxuXHRkZWxldGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcikgPT4gdm9pZFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudDogKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0b3BlbkV2ZW50Rm9ybTogKGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0Y2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcblx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiAoXG5cdFx0c3RhcnREYXRlOiBkYXlqcy5EYXlqcyxcblx0XHRlbmREYXRlOiBkYXlqcy5EYXlqc1xuXHQpID0+IENhbGVuZGFyRXZlbnRbXVxuXHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0cmVuZGVyRXZlbnQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRvbkV2ZW50Q2xpY2s6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkNlbGxDbGljazogKGluZm86IENlbGxDbGlja0luZm8pID0+IHZvaWRcblx0Y3VycmVudExvY2FsZT86IHN0cmluZ1xuXHRkaXNhYmxlQ2VsbENsaWNrPzogYm9vbGVhblxuXHRkaXNhYmxlRXZlbnRDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZURyYWdBbmREcm9wPzogYm9vbGVhblxuXHRkYXlNYXhFdmVudHM6IG51bWJlclxuXHRldmVudFNwYWNpbmc6IG51bWJlclxuXHRzdGlja3lWaWV3SGVhZGVyOiBib29sZWFuXG5cdHZpZXdIZWFkZXJDbGFzc05hbWU6IHN0cmluZ1xuXHRoZWFkZXJDb21wb25lbnQ/OiBSZWFjdC5SZWFjdE5vZGUgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjb21wb25lbnRcblx0aGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY2xhc3Ncblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0cmVuZGVyRXZlbnRGb3JtPzogKHByb3BzOiBFdmVudEZvcm1Qcm9wcykgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdC8vIFRyYW5zbGF0aW9uIGZ1bmN0aW9uXG5cdHQ6IFRyYW5zbGF0b3JGdW5jdGlvblxuXHR0aW1lRm9ybWF0OiBUaW1lRm9ybWF0XG5cdGNsYXNzZXNPdmVycmlkZT86IENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yPzogKFxuXHRcdHByb3BzOiBSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzXG5cdCkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzPzogYm9vbGVhblxuXHRoaWRkZW5EYXlzPzogU2V0PG51bWJlcj5cbn1cblxuLy8gQ2FsZW5kYXJDb250ZXh0IGlzIGtlcHQgZm9yIGludGVybmFsIFByb3ZpZGVyIHVzYWdlXG5leHBvcnQgY29uc3QgQ2FsZW5kYXJDb250ZXh0OiBSZWFjdC5Db250ZXh0PENhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+ID1cblx0Y3JlYXRlQ29udGV4dDxDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4iLAogICAgImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJDb250ZXh0VHlwZSB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBDZWxsQ2xpY2tJbmZvIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSBleHRlbmRzIENhbGVuZGFyQ29udGV4dFR5cGUge1xuXHQvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuXHRyZXNvdXJjZXM6IFJlc291cmNlW11cblx0dmlzaWJsZVJlc291cmNlczogU2V0PHN0cmluZyB8IG51bWJlcj5cblxuXHQvLyBSZXNvdXJjZSB1dGlsaXRpZXNcblx0Z2V0RXZlbnRzRm9yUmVzb3VyY2U6IChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IENhbGVuZGFyRXZlbnRbXVxuXHRnZXRFdmVudHNGb3JSZXNvdXJjZXM6IChyZXNvdXJjZUlkczogKHN0cmluZyB8IG51bWJlcilbXSkgPT4gQ2FsZW5kYXJFdmVudFtdXG5cdGdldFJlc291cmNlQnlJZDogKHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcikgPT4gUmVzb3VyY2UgfCB1bmRlZmluZWRcblx0Z2V0VmlzaWJsZVJlc291cmNlczogKCkgPT4gUmVzb3VyY2VbXVxuXG5cdC8vIENyb3NzLXJlc291cmNlIGV2ZW50IHV0aWxpdGllc1xuXHRpc0V2ZW50Q3Jvc3NSZXNvdXJjZTogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBib29sZWFuXG5cdGdldEV2ZW50UmVzb3VyY2VJZHM6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gKHN0cmluZyB8IG51bWJlcilbXVxuXG5cdC8vIEFkZGl0aW9uYWwgcHJvcGVydGllcyBmcm9tIGNhbGVuZGFyIGNvbnRleHRcblx0b25FdmVudENsaWNrOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DZWxsQ2xpY2s6IChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB2b2lkXG5cdHJlbmRlclJlc291cmNlPzogKHJlc291cmNlOiBSZXNvdXJjZSkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdG9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnXG59XG5cbi8vIFJlc291cmNlQ2FsZW5kYXJDb250ZXh0IGlzIGtlcHQgZm9yIGludGVybmFsIFByb3ZpZGVyIHVzYWdlXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhckNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8XG5cdFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZFxuPiA9IGNyZWF0ZUNvbnRleHQ8UmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyUHJvdmlkZXJQcm9wcyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9wcm92aWRlcidcbmltcG9ydCB0eXBlIHtcblx0Q2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGUsXG5cdENlbGxDbGlja0luZm8sXG5cdFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyRW5naW5lIH0gZnJvbSAnQC9ob29rcy91c2UtY2FsZW5kYXItZW5naW5lJ1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnXG5cbmNvbnN0IGdldEV2ZW50UmVzb3VyY2VJZHMgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0+IHtcblx0aWYgKGV2ZW50LnJlc291cmNlSWRzKSB7XG5cdFx0cmV0dXJuIGV2ZW50LnJlc291cmNlSWRzXG5cdH1cblx0aWYgKGV2ZW50LnJlc291cmNlSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBbZXZlbnQucmVzb3VyY2VJZF1cblx0fVxuXHRyZXR1cm4gW11cbn1cblxuaW50ZXJmYWNlIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlclByb3BzIGV4dGVuZHMgQ2FsZW5kYXJQcm92aWRlclByb3BzIHtcblx0ZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG5cdHJlc291cmNlcz86IFJlc291cmNlW11cblx0cmVuZGVyUmVzb3VyY2U/OiAocmVzb3VyY2U6IFJlc291cmNlKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlc092ZXJyaWRlPzogQ2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGVcblx0b3JpZW50YXRpb24/OiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yPzogKFxuXHRcdHByb3BzOiBSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzXG5cdCkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzPzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxcblx0UmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyUHJvcHNcbj4gPSAoe1xuXHRjaGlsZHJlbixcblx0ZXZlbnRzID0gW10sXG5cdHJlc291cmNlcyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9IDAsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdHJlbmRlckV2ZW50LFxuXHRvbkV2ZW50Q2xpY2ssXG5cdG9uQ2VsbENsaWNrLFxuXHRvblZpZXdDaGFuZ2UsXG5cdG9uRXZlbnRBZGQsXG5cdG9uRXZlbnRVcGRhdGUsXG5cdG9uRXZlbnREZWxldGUsXG5cdG9uRGF0ZUNoYW5nZSxcblx0bG9jYWxlLFxuXHR0aW1lem9uZSxcblx0ZGlzYWJsZUNlbGxDbGljayxcblx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0ZGF5TWF4RXZlbnRzLFxuXHRldmVudFNwYWNpbmcsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdGhlYWRlckNvbXBvbmVudCxcblx0aGVhZGVyQ2xhc3NOYW1lLFxuXHR0cmFuc2xhdGlvbnMsXG5cdHRyYW5zbGF0b3IsXG5cdHJlbmRlclJlc291cmNlLFxuXHRyZW5kZXJFdmVudEZvcm0sXG5cdGJ1c2luZXNzSG91cnMsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGNsYXNzZXNPdmVycmlkZSxcblx0b3JpZW50YXRpb24gPSAnaG9yaXpvbnRhbCcsXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3VycyA9IGZhbHNlLFxuXHRoaWRkZW5EYXlzLFxufSkgPT4ge1xuXHQvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuXHRjb25zdCBbY3VycmVudFJlc291cmNlc10gPSB1c2VTdGF0ZTxSZXNvdXJjZVtdPihyZXNvdXJjZXMpXG5cdGNvbnN0IFt2aXNpYmxlUmVzb3VyY2VzLCBzZXRWaXNpYmxlUmVzb3VyY2VzXSA9IHVzZVN0YXRlPFxuXHRcdFNldDxzdHJpbmcgfCBudW1iZXI+XG5cdD4obmV3IFNldChyZXNvdXJjZXMubWFwKChyKSA9PiByLmlkKSkpXG5cblx0Ly8gVXNlIHRoZSBjYWxlbmRhciBlbmdpbmVcblx0Y29uc3QgY2FsZW5kYXJFbmdpbmUgPSB1c2VDYWxlbmRhckVuZ2luZSh7XG5cdFx0ZXZlbnRzLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGluaXRpYWxWaWV3LFxuXHRcdGluaXRpYWxEYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0b25FdmVudEFkZCxcblx0XHRvbkV2ZW50VXBkYXRlLFxuXHRcdG9uRXZlbnREZWxldGUsXG5cdFx0b25EYXRlQ2hhbmdlLFxuXHRcdG9uVmlld0NoYW5nZTogb25WaWV3Q2hhbmdlLFxuXHRcdGxvY2FsZSxcblx0XHR0aW1lem9uZSxcblx0XHR0cmFuc2xhdGlvbnMsXG5cdFx0dHJhbnNsYXRvcixcblx0fSlcblxuXHQvLyBSZXNvdXJjZSB2aXNpYmlsaXR5XG5cdGNvbnN0IHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRcdHNldFZpc2libGVSZXNvdXJjZXMoKHByZXYpID0+IHtcblx0XHRcdFx0Y29uc3QgbmV3U2V0ID0gbmV3IFNldChwcmV2KVxuXHRcdFx0XHRpZiAobmV3U2V0LmhhcyhyZXNvdXJjZUlkKSkge1xuXHRcdFx0XHRcdG5ld1NldC5kZWxldGUocmVzb3VyY2VJZClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRuZXdTZXQuYWRkKHJlc291cmNlSWQpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG5ld1NldFxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtdXG5cdClcblxuXHRjb25zdCBzaG93UmVzb3VyY2UgPSB1c2VDYWxsYmFjaygocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG5cdFx0c2V0VmlzaWJsZVJlc291cmNlcygocHJldikgPT4gbmV3IFNldChwcmV2KS5hZGQocmVzb3VyY2VJZCkpXG5cdH0sIFtdKVxuXG5cdGNvbnN0IGhpZGVSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRzZXRWaXNpYmxlUmVzb3VyY2VzKChwcmV2KSA9PiB7XG5cdFx0XHRjb25zdCBuZXdTZXQgPSBuZXcgU2V0KHByZXYpXG5cdFx0XHRuZXdTZXQuZGVsZXRlKHJlc291cmNlSWQpXG5cdFx0XHRyZXR1cm4gbmV3U2V0XG5cdFx0fSlcblx0fSwgW10pXG5cblx0Y29uc3Qgc2hvd0FsbFJlc291cmNlcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzZXRWaXNpYmxlUmVzb3VyY2VzKG5ldyBTZXQoY3VycmVudFJlc291cmNlcy5tYXAoKHIpID0+IHIuaWQpKSlcblx0fSwgW2N1cnJlbnRSZXNvdXJjZXNdKVxuXG5cdGNvbnN0IGhpZGVBbGxSZXNvdXJjZXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c2V0VmlzaWJsZVJlc291cmNlcyhuZXcgU2V0KCkpXG5cdH0sIFtdKVxuXG5cdC8vIEV2ZW50IHV0aWxpdGllc1xuXHRjb25zdCBnZXRFdmVudHNGb3JSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRcdFx0cmV0dXJuIGNhbGVuZGFyRW5naW5lLmV2ZW50cy5maWx0ZXIoKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChldmVudC5yZXNvdXJjZUlkcykge1xuXHRcdFx0XHRcdHJldHVybiBldmVudC5yZXNvdXJjZUlkcy5pbmNsdWRlcyhyZXNvdXJjZUlkKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBldmVudC5yZXNvdXJjZUlkID09PSByZXNvdXJjZUlkXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lLmV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldEV2ZW50c0ZvclJlc291cmNlcyA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkczogKHN0cmluZyB8IG51bWJlcilbXSk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdFx0XHRyZXR1cm4gY2FsZW5kYXJFbmdpbmUuZXZlbnRzLmZpbHRlcigoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnRSZXNvdXJjZUlkcyA9IGdldEV2ZW50UmVzb3VyY2VJZHMoZXZlbnQpXG5cdFx0XHRcdHJldHVybiBldmVudFJlc291cmNlSWRzLnNvbWUoKGlkKSA9PiByZXNvdXJjZUlkcy5pbmNsdWRlcyhpZCkpXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lLmV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldFJlc291cmNlQnlJZCA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBSZXNvdXJjZSB8IHVuZGVmaW5lZCA9PiB7XG5cdFx0XHRyZXR1cm4gY3VycmVudFJlc291cmNlcy5maW5kKChyZXNvdXJjZSkgPT4gcmVzb3VyY2UuaWQgPT09IHJlc291cmNlSWQpXG5cdFx0fSxcblx0XHRbY3VycmVudFJlc291cmNlc11cblx0KVxuXG5cdGNvbnN0IGdldFZpc2libGVSZXNvdXJjZXMgPSB1c2VDYWxsYmFjaygoKTogUmVzb3VyY2VbXSA9PiB7XG5cdFx0cmV0dXJuIGN1cnJlbnRSZXNvdXJjZXMuZmlsdGVyKChyZXNvdXJjZSkgPT5cblx0XHRcdHZpc2libGVSZXNvdXJjZXMuaGFzKHJlc291cmNlLmlkKVxuXHRcdClcblx0fSwgW2N1cnJlbnRSZXNvdXJjZXMsIHZpc2libGVSZXNvdXJjZXNdKVxuXG5cdC8vIENyb3NzLXJlc291cmNlIGV2ZW50IHV0aWxpdGllc1xuXHRjb25zdCBpc0V2ZW50Q3Jvc3NSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKChldmVudDogQ2FsZW5kYXJFdmVudCk6IGJvb2xlYW4gPT4ge1xuXHRcdHJldHVybiBCb29sZWFuKGV2ZW50LnJlc291cmNlSWRzICYmIGV2ZW50LnJlc291cmNlSWRzLmxlbmd0aCA+IDEpXG5cdH0sIFtdKVxuXG5cdC8vIEN1c3RvbSBoYW5kbGVyc1xuXHRjb25zdCBlZGl0RXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRXZlbnQoZXZlbnQpXG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcblx0XHR9LFxuXHRcdFtjYWxlbmRhckVuZ2luZV1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZUV2ZW50Q2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGlmIChkaXNhYmxlRXZlbnRDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblx0XHRcdGlmIChvbkV2ZW50Q2xpY2spIHtcblx0XHRcdFx0b25FdmVudENsaWNrKGV2ZW50KVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWRpdEV2ZW50KGV2ZW50KVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W2Rpc2FibGVFdmVudENsaWNrLCBvbkV2ZW50Q2xpY2ssIGVkaXRFdmVudF1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZURhdGVDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUNlbGxDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9uQ2VsbENsaWNrKSB7XG5cdFx0XHRcdG9uQ2VsbENsaWNrKGluZm8pXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBuZXdFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0XHR0aXRsZTogY2FsZW5kYXJFbmdpbmUudCgnbmV3RXZlbnQnKSxcblx0XHRcdFx0XHRzdGFydDogaW5mby5zdGFydCxcblx0XHRcdFx0XHRlbmQ6IGluZm8uZW5kLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiAnJyxcblx0XHRcdFx0XHRhbGxEYXk6IGZhbHNlLFxuXHRcdFx0XHR9IGFzIENhbGVuZGFyRXZlbnRcblxuXHRcdFx0XHRpZiAoaW5mby5yZXNvdXJjZUlkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRuZXdFdmVudC5yZXNvdXJjZUlkID0gaW5mby5yZXNvdXJjZUlkXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KG5ld0V2ZW50KVxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZERhdGUoaW5mby5zdGFydClcblx0XHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbb25DZWxsQ2xpY2ssIGRpc2FibGVDZWxsQ2xpY2ssIGNhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Ly8gQ3JlYXRlIHRoZSBjb250ZXh0IHZhbHVlXG5cdGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdC4uLmNhbGVuZGFyRW5naW5lLFxuXHRcdFx0dmlldzogY2FsZW5kYXJFbmdpbmUudmlldyxcblx0XHRcdHNldFZpZXc6IGNhbGVuZGFyRW5naW5lLnNldFZpZXcsXG5cdFx0XHRldmVudHM6IGNhbGVuZGFyRW5naW5lLmV2ZW50cyxcblx0XHRcdHJhd0V2ZW50czogY2FsZW5kYXJFbmdpbmUucmF3RXZlbnRzLFxuXG5cdFx0XHQvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuXHRcdFx0cmVzb3VyY2VzOiBjdXJyZW50UmVzb3VyY2VzLFxuXHRcdFx0dmlzaWJsZVJlc291cmNlcyxcblx0XHRcdHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSxcblx0XHRcdHNob3dSZXNvdXJjZSxcblx0XHRcdGhpZGVSZXNvdXJjZSxcblx0XHRcdHNob3dBbGxSZXNvdXJjZXMsXG5cdFx0XHRoaWRlQWxsUmVzb3VyY2VzLFxuXG5cdFx0XHQvLyBSZXNvdXJjZSB1dGlsaXRpZXNcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2VzLFxuXHRcdFx0Z2V0UmVzb3VyY2VCeUlkLFxuXHRcdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblxuXHRcdFx0Ly8gQ3Jvc3MtcmVzb3VyY2UgZXZlbnQgdXRpbGl0aWVzXG5cdFx0XHRpc0V2ZW50Q3Jvc3NSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50UmVzb3VyY2VJZHMsXG5cblx0XHRcdC8vIE92ZXJyaWRlIGhhbmRsZXJzXG5cdFx0XHRvbkV2ZW50Q2xpY2s6IGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRvbkNlbGxDbGljazogaGFuZGxlRGF0ZUNsaWNrLFxuXG5cdFx0XHQvLyBQYXNzIHRocm91Z2ggaGVhZGVyIHByb3BzXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cblx0XHRcdC8vIFBhc3MgdGhyb3VnaCBvdGhlciBwcm9wc1xuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRyZW5kZXJSZXNvdXJjZSxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdG9yaWVudGF0aW9uLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdGhpZGRlbkRheXMsXG5cdFx0fSksXG5cdFx0W1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUsXG5cdFx0XHRjdXJyZW50UmVzb3VyY2VzLFxuXHRcdFx0dmlzaWJsZVJlc291cmNlcyxcblx0XHRcdHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSxcblx0XHRcdHNob3dSZXNvdXJjZSxcblx0XHRcdGhpZGVSZXNvdXJjZSxcblx0XHRcdHNob3dBbGxSZXNvdXJjZXMsXG5cdFx0XHRoaWRlQWxsUmVzb3VyY2VzLFxuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZXMsXG5cdFx0XHRnZXRSZXNvdXJjZUJ5SWQsXG5cdFx0XHRnZXRWaXNpYmxlUmVzb3VyY2VzLFxuXHRcdFx0aXNFdmVudENyb3NzUmVzb3VyY2UsXG5cdFx0XHRoYW5kbGVFdmVudENsaWNrLFxuXHRcdFx0aGFuZGxlRGF0ZUNsaWNrLFxuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRyZW5kZXJSZXNvdXJjZSxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdG9yaWVudGF0aW9uLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdGhpZGRlbkRheXMsXG5cdFx0XVxuXHQpXG5cblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VDYWxlbmRhckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRWYWx1ZX0+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9SZXNvdXJjZUNhbGVuZGFyQ29udGV4dC5Qcm92aWRlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdE9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQge1xuXHRkZWxldGVSZWN1cnJpbmdFdmVudCBhcyBkZWxldGVSZWN1cnJpbmdFdmVudEltcGwsXG5cdGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzLFxuXHR1cGRhdGVSZWN1cnJpbmdFdmVudCBhcyB1cGRhdGVSZWN1cnJpbmdFdmVudEltcGwsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBkZWZhdWx0VHJhbnNsYXRpb25zIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL2RlZmF1bHQnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucywgVHJhbnNsYXRvckZ1bmN0aW9uIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHsgZ2V0TW9udGhXZWVrcywgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhclZpZXcgfSBmcm9tICdAL3R5cGVzJ1xuaW1wb3J0IHsgREFZX01BWF9FVkVOVFNfREVGQVVMVCB9IGZyb20gJy4uL2xpYi9jb25zdGFudHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJFbmdpbmVDb25maWcge1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG5cdGluaXRpYWxWaWV3PzogQ2FsZW5kYXJWaWV3XG5cdGluaXRpYWxEYXRlPzogZGF5anMuRGF5anNcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0b25FdmVudEFkZD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50VXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRXZlbnREZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25EYXRlQ2hhbmdlPzogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG5cdG9uVmlld0NoYW5nZT86ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcblx0bG9jYWxlPzogc3RyaW5nXG5cdHRpbWV6b25lPzogc3RyaW5nXG5cdHRyYW5zbGF0aW9ucz86IFRyYW5zbGF0aW9uc1xuXHR0cmFuc2xhdG9yPzogVHJhbnNsYXRvckZ1bmN0aW9uXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJFbmdpbmVSZXR1cm4ge1xuXHRjdXJyZW50RGF0ZTogZGF5anMuRGF5anNcblx0dmlldzogQ2FsZW5kYXJWaWV3XG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHJhd0V2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuXHRzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRzZWxlY3RlZERhdGU6IGRheWpzLkRheWpzIHwgbnVsbFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGN1cnJlbnRMb2NhbGU6IHN0cmluZ1xuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRzZXRDdXJyZW50RGF0ZTogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG5cdHNlbGVjdERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRzZXRWaWV3OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdG5leHRQZXJpb2Q6ICgpID0+IHZvaWRcblx0cHJldlBlcmlvZDogKCkgPT4gdm9pZFxuXHR0b2RheTogKCkgPT4gdm9pZFxuXHRhZGRFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdHVwZGF0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHR1cGRhdGVSZWN1cnJpbmdFdmVudDogKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4sXG5cdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdCkgPT4gdm9pZFxuXHRkZWxldGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcikgPT4gdm9pZFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudDogKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0b3BlbkV2ZW50Rm9ybTogKGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0Y2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcblx0c2V0U2VsZWN0ZWRFdmVudDogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248Q2FsZW5kYXJFdmVudCB8IG51bGw+PlxuXHRzZXRJc0V2ZW50Rm9ybU9wZW46IFJlYWN0LkRpc3BhdGNoPFJlYWN0LlNldFN0YXRlQWN0aW9uPGJvb2xlYW4+PlxuXHRzZXRTZWxlY3RlZERhdGU6IFJlYWN0LkRpc3BhdGNoPFJlYWN0LlNldFN0YXRlQWN0aW9uPGRheWpzLkRheWpzIHwgbnVsbD4+XG5cdGdldEV2ZW50c0ZvckRhdGVSYW5nZTogKFxuXHRcdHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsXG5cdFx0ZW5kRGF0ZTogZGF5anMuRGF5anNcblx0KSA9PiBDYWxlbmRhckV2ZW50W11cblx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHQ6IChrZXk6IGtleW9mIFRyYW5zbGF0aW9ucykgPT4gc3RyaW5nXG59XG5cbmNvbnN0IFZJRVdfVU5JVFM6IFJlY29yZDxDYWxlbmRhclZpZXcsIGRheWpzLk1hbmlwdWxhdGVUeXBlPiA9IHtcblx0ZGF5OiAnZGF5Jyxcblx0d2VlazogJ3dlZWsnLFxuXHRtb250aDogJ21vbnRoJyxcblx0eWVhcjogJ3llYXInLFxufVxuXG5leHBvcnQgY29uc3QgdXNlQ2FsZW5kYXJFbmdpbmUgPSAoXG5cdGNvbmZpZzogQ2FsZW5kYXJFbmdpbmVDb25maWdcbik6IENhbGVuZGFyRW5naW5lUmV0dXJuID0+IHtcblx0Y29uc3Qge1xuXHRcdGV2ZW50cyA9IFtdLFxuXHRcdGZpcnN0RGF5T2ZXZWVrID0gMCxcblx0XHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdFx0aW5pdGlhbERhdGUgPSBkYXlqcygpLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0b25FdmVudEFkZCxcblx0XHRvbkV2ZW50VXBkYXRlLFxuXHRcdG9uRXZlbnREZWxldGUsXG5cdFx0b25EYXRlQ2hhbmdlLFxuXHRcdG9uVmlld0NoYW5nZSxcblx0XHRsb2NhbGUsXG5cdFx0dGltZXpvbmUsXG5cdFx0dHJhbnNsYXRpb25zLFxuXHRcdHRyYW5zbGF0b3IsXG5cdH0gPSBjb25maWdcblxuXHRjb25zdCBbY3VycmVudERhdGUsIHNldEN1cnJlbnREYXRlXSA9IHVzZVN0YXRlPGRheWpzLkRheWpzPihpbml0aWFsRGF0ZSlcblx0Y29uc3QgW3ZpZXcsIHNldFZpZXddID0gdXNlU3RhdGU8Q2FsZW5kYXJWaWV3Pihpbml0aWFsVmlldylcblx0Y29uc3QgW2N1cnJlbnRFdmVudHMsIHNldEN1cnJlbnRFdmVudHNdID0gdXNlU3RhdGU8Q2FsZW5kYXJFdmVudFtdPihldmVudHMpXG5cdGNvbnN0IFtpc0V2ZW50Rm9ybU9wZW4sIHNldElzRXZlbnRGb3JtT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkRXZlbnQsIHNldFNlbGVjdGVkRXZlbnRdID0gdXNlU3RhdGU8Q2FsZW5kYXJFdmVudCB8IG51bGw+KG51bGwpXG5cdGNvbnN0IFtzZWxlY3RlZERhdGUsIHNldFNlbGVjdGVkRGF0ZV0gPSB1c2VTdGF0ZTxkYXlqcy5EYXlqcyB8IG51bGw+KG51bGwpXG5cdGNvbnN0IFtjdXJyZW50TG9jYWxlLCBzZXRDdXJyZW50TG9jYWxlXSA9IHVzZVN0YXRlKGxvY2FsZSB8fCAnZW4nKVxuXG5cdGNvbnN0IHQgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAodHJhbnNsYXRvcikge1xuXHRcdFx0cmV0dXJuIHRyYW5zbGF0b3Jcblx0XHR9XG5cdFx0aWYgKHRyYW5zbGF0aW9ucykge1xuXHRcdFx0cmV0dXJuIChrZXk6IGtleW9mIFRyYW5zbGF0aW9ucykgPT4gdHJhbnNsYXRpb25zW2tleV0gfHwga2V5XG5cdFx0fVxuXHRcdHJldHVybiAoa2V5OiBrZXlvZiBUcmFuc2xhdGlvbnMpID0+IGRlZmF1bHRUcmFuc2xhdGlvbnNba2V5XSB8fCBrZXlcblx0fSwgW3RyYW5zbGF0aW9ucywgdHJhbnNsYXRvcl0pXG5cblx0Y29uc3QgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlID0gdXNlQ2FsbGJhY2soXG5cdFx0KHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsIGVuZERhdGU6IGRheWpzLkRheWpzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0XHRcdGNvbnN0IGFsbEV2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gW11cblxuXHRcdFx0Zm9yIChjb25zdCBldmVudCBvZiBjdXJyZW50RXZlbnRzKSB7XG5cdFx0XHRcdGlmIChldmVudC5ycnVsZSkge1xuXHRcdFx0XHRcdGFsbEV2ZW50cy5wdXNoKFxuXHRcdFx0XHRcdFx0Li4uZ2VuZXJhdGVSZWN1cnJpbmdFdmVudHMoe1xuXHRcdFx0XHRcdFx0XHRldmVudCxcblx0XHRcdFx0XHRcdFx0Y3VycmVudEV2ZW50cyxcblx0XHRcdFx0XHRcdFx0c3RhcnREYXRlLFxuXHRcdFx0XHRcdFx0XHRlbmREYXRlLFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3RhcnRzSW5SYW5nZSA9XG5cdFx0XHRcdFx0XHRldmVudC5zdGFydC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSkgJiZcblx0XHRcdFx0XHRcdGV2ZW50LnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpXG5cdFx0XHRcdFx0Y29uc3QgZW5kc0luUmFuZ2UgPVxuXHRcdFx0XHRcdFx0ZXZlbnQuZW5kLmlzU2FtZU9yQWZ0ZXIoc3RhcnREYXRlKSAmJlxuXHRcdFx0XHRcdFx0ZXZlbnQuZW5kLmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpXG5cdFx0XHRcdFx0Y29uc3Qgc3BhbnNSYW5nZSA9XG5cdFx0XHRcdFx0XHRldmVudC5zdGFydC5pc0JlZm9yZShzdGFydERhdGUpICYmIGV2ZW50LmVuZC5pc0FmdGVyKGVuZERhdGUpXG5cdFx0XHRcdFx0aWYgKHN0YXJ0c0luUmFuZ2UgfHwgZW5kc0luUmFuZ2UgfHwgc3BhbnNSYW5nZSkge1xuXHRcdFx0XHRcdFx0YWxsRXZlbnRzLnB1c2goZXZlbnQpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYWxsRXZlbnRzXG5cdFx0fSxcblx0XHRbY3VycmVudEV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldEN1cnJlbnRWaWV3UmFuZ2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0aWYgKHZpZXcgPT09ICdkYXknKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzdGFydDogY3VycmVudERhdGUuc3RhcnRPZignZGF5JyksXG5cdFx0XHRcdGVuZDogY3VycmVudERhdGUuZW5kT2YoJ2RheScpLFxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAodmlldyA9PT0gJ3llYXInKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzdGFydDogY3VycmVudERhdGUuc3RhcnRPZigneWVhcicpLFxuXHRcdFx0XHRlbmQ6IGN1cnJlbnREYXRlLmVuZE9mKCd5ZWFyJyksXG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICh2aWV3ID09PSAnd2VlaycpIHtcblx0XHRcdGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c3RhcnQ6IHdlZWtEYXlzWzBdLnN0YXJ0T2YoJ2RheScpLFxuXHRcdFx0XHRlbmQ6IHdlZWtEYXlzWzZdLmVuZE9mKCdkYXknKSxcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gbW9udGggdmlld1xuXHRcdGNvbnN0IHdlZWtzID0gZ2V0TW9udGhXZWVrcyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspXG5cdFx0cmV0dXJuIHsgc3RhcnQ6IHdlZWtzWzBdWzBdLnN0YXJ0T2YoJ2RheScpLCBlbmQ6IHdlZWtzWzVdWzZdLmVuZE9mKCdkYXknKSB9XG5cdH0sIFtjdXJyZW50RGF0ZSwgdmlldywgZmlyc3REYXlPZldlZWtdKVxuXG5cdGNvbnN0IHByb2Nlc3NlZEV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gZ2V0Q3VycmVudFZpZXdSYW5nZSgpXG5cdFx0cmV0dXJuIGdldEV2ZW50c0ZvckRhdGVSYW5nZShzdGFydCwgZW5kKVxuXHR9LCBbZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCBnZXRDdXJyZW50Vmlld1JhbmdlXSlcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChldmVudHMpIHtcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoZXZlbnRzKVxuXHRcdH1cblx0fSwgW2V2ZW50c10pXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGxvY2FsZSkge1xuXHRcdFx0c2V0Q3VycmVudExvY2FsZShsb2NhbGUpXG5cdFx0XHRkYXlqcy5sb2NhbGUobG9jYWxlKVxuXHRcdFx0c2V0Q3VycmVudERhdGUoKHByZXZEYXRlKSA9PiBwcmV2RGF0ZS5sb2NhbGUobG9jYWxlKSlcblx0XHR9XG5cdH0sIFtsb2NhbGVdKVxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmICh0aW1lem9uZSkge1xuXHRcdFx0ZGF5anMudHouc2V0RGVmYXVsdCh0aW1lem9uZSlcblx0XHR9XG5cdH0sIFt0aW1lem9uZV0pXG5cblx0Y29uc3Qgc2VsZWN0RGF0ZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChkYXRlOiBkYXlqcy5EYXlqcykgPT4ge1xuXHRcdFx0c2V0Q3VycmVudERhdGUoZGF0ZSlcblx0XHRcdG9uRGF0ZUNoYW5nZT8uKGRhdGUpXG5cdFx0fSxcblx0XHRbb25EYXRlQ2hhbmdlXVxuXHQpXG5cblx0Y29uc3QgbmF2aWdhdGVQZXJpb2QgPSB1c2VDYWxsYmFjayhcblx0XHQoZGlyZWN0aW9uOiAxIHwgLTEpID0+IHtcblx0XHRcdHNldEN1cnJlbnREYXRlKChwcmV2KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG5ld0RhdGUgPVxuXHRcdFx0XHRcdGRpcmVjdGlvbiA9PT0gMVxuXHRcdFx0XHRcdFx0PyBwcmV2LmFkZCgxLCBWSUVXX1VOSVRTW3ZpZXddKVxuXHRcdFx0XHRcdFx0OiBwcmV2LnN1YnRyYWN0KDEsIFZJRVdfVU5JVFNbdmlld10pXG5cdFx0XHRcdG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUpXG5cdFx0XHRcdHJldHVybiBuZXdEYXRlXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W3ZpZXcsIG9uRGF0ZUNoYW5nZV1cblx0KVxuXG5cdGNvbnN0IG5leHRQZXJpb2QgPSB1c2VDYWxsYmFjaygoKSA9PiBuYXZpZ2F0ZVBlcmlvZCgxKSwgW25hdmlnYXRlUGVyaW9kXSlcblx0Y29uc3QgcHJldlBlcmlvZCA9IHVzZUNhbGxiYWNrKCgpID0+IG5hdmlnYXRlUGVyaW9kKC0xKSwgW25hdmlnYXRlUGVyaW9kXSlcblxuXHRjb25zdCB0b2RheSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRjb25zdCBuZXdEYXRlID0gZGF5anMoKVxuXHRcdHNldEN1cnJlbnREYXRlKG5ld0RhdGUpXG5cdFx0b25EYXRlQ2hhbmdlPy4obmV3RGF0ZSlcblx0fSwgW29uRGF0ZUNoYW5nZV0pXG5cblx0Y29uc3QgYWRkRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+IFsuLi5wcmV2LCBldmVudF0pXG5cdFx0XHRvbkV2ZW50QWRkPy4oZXZlbnQpXG5cdFx0fSxcblx0XHRbb25FdmVudEFkZF1cblx0KVxuXG5cdGNvbnN0IHVwZGF0ZUV2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlciwgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4ge1xuXHRcdFx0c2V0Q3VycmVudEV2ZW50cygocHJldikgPT5cblx0XHRcdFx0cHJldi5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50LmlkICE9PSBldmVudElkKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZXZlbnRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgbmV3RXZlbnQgPSB7IC4uLmV2ZW50LCAuLi51cGRhdGVzIH1cblx0XHRcdFx0XHRvbkV2ZW50VXBkYXRlPy4obmV3RXZlbnQpXG5cdFx0XHRcdFx0cmV0dXJuIG5ld0V2ZW50XG5cdFx0XHRcdH0pXG5cdFx0XHQpXG5cdFx0fSxcblx0XHRbb25FdmVudFVwZGF0ZV1cblx0KVxuXG5cdGNvbnN0IHVwZGF0ZVJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KFxuXHRcdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdFx0KSA9PiB7XG5cdFx0XHRvbkV2ZW50VXBkYXRlPy4oeyAuLi5ldmVudCwgLi4udXBkYXRlcyB9KVxuXHRcdFx0c2V0Q3VycmVudEV2ZW50cyhcblx0XHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnRJbXBsKHtcblx0XHRcdFx0XHR0YXJnZXRFdmVudDogZXZlbnQsXG5cdFx0XHRcdFx0dXBkYXRlcyxcblx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnRVcGRhdGVdXG5cdClcblxuXHRjb25zdCBkZWxldGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCwgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zKSA9PiB7XG5cdFx0XHRvbkV2ZW50RGVsZXRlPy4oZXZlbnQpXG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKFxuXHRcdFx0XHRkZWxldGVSZWN1cnJpbmdFdmVudEltcGwoe1xuXHRcdFx0XHRcdHRhcmdldEV2ZW50OiBldmVudCxcblx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnREZWxldGVdXG5cdClcblxuXHRjb25zdCBkZWxldGVFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnRUb0RlbGV0ZSA9IHByZXYuZmluZCgoZSkgPT4gZS5pZCA9PT0gZXZlbnRJZClcblx0XHRcdFx0aWYgKGV2ZW50VG9EZWxldGUpIHtcblx0XHRcdFx0XHRvbkV2ZW50RGVsZXRlPy4oZXZlbnRUb0RlbGV0ZSlcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcHJldi5maWx0ZXIoKGUpID0+IGUuaWQgIT09IGV2ZW50SWQpXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W29uRXZlbnREZWxldGVdXG5cdClcblxuXHRjb25zdCBvcGVuRXZlbnRGb3JtID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdGlmIChldmVudERhdGE/LnN0YXJ0KSB7XG5cdFx0XHRcdHNldFNlbGVjdGVkRGF0ZShldmVudERhdGEuc3RhcnQpXG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzdGFydCA9IGV2ZW50RGF0YT8uc3RhcnQgPz8gY3VycmVudERhdGVcblx0XHRcdHNldFNlbGVjdGVkRXZlbnQoe1xuXHRcdFx0XHR0aXRsZTogdCgnbmV3RXZlbnQnKSxcblx0XHRcdFx0c3RhcnQsXG5cdFx0XHRcdGVuZDogZXZlbnREYXRhPy5lbmQgPz8gc3RhcnQuYWRkKDEsICdob3VyJyksXG5cdFx0XHRcdHJlc291cmNlSWQ6IGV2ZW50RGF0YT8ucmVzb3VyY2VJZCxcblx0XHRcdFx0ZGVzY3JpcHRpb246ICcnLFxuXHRcdFx0XHRhbGxEYXk6IGV2ZW50RGF0YT8uYWxsRGF5ID8/IGZhbHNlLFxuXHRcdFx0fSBhcyBDYWxlbmRhckV2ZW50KVxuXHRcdFx0c2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0fSxcblx0XHRbY3VycmVudERhdGUsIHRdXG5cdClcblxuXHRjb25zdCBjbG9zZUV2ZW50Rm9ybSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzZXRTZWxlY3RlZERhdGUobnVsbClcblx0XHRzZXRTZWxlY3RlZEV2ZW50KG51bGwpXG5cdFx0c2V0SXNFdmVudEZvcm1PcGVuKGZhbHNlKVxuXHR9LCBbXSlcblxuXHRjb25zdCBoYW5kbGVWaWV3Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG5cdFx0KG5ld1ZpZXc6IENhbGVuZGFyVmlldykgPT4ge1xuXHRcdFx0c2V0VmlldyhuZXdWaWV3KVxuXHRcdFx0b25WaWV3Q2hhbmdlPy4obmV3Vmlldylcblx0XHR9LFxuXHRcdFtvblZpZXdDaGFuZ2VdXG5cdClcblxuXHRjb25zdCBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBDYWxlbmRhckV2ZW50IHwgbnVsbCA9PiB7XG5cdFx0XHRjb25zdCB0YXJnZXRVSUQgPSBldmVudC51aWRcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGN1cnJlbnRFdmVudHMuZmluZChcblx0XHRcdFx0XHQoZSkgPT4gKGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYCkgPT09IHRhcmdldFVJRCAmJiBlLnJydWxlXG5cdFx0XHRcdCkgfHwgbnVsbFxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHNdXG5cdClcblxuXHRyZXR1cm4ge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdHZpZXcsXG5cdFx0ZXZlbnRzOiBwcm9jZXNzZWRFdmVudHMsXG5cdFx0cmF3RXZlbnRzOiBjdXJyZW50RXZlbnRzLFxuXHRcdGlzRXZlbnRGb3JtT3Blbixcblx0XHRzZWxlY3RlZEV2ZW50LFxuXHRcdHNlbGVjdGVkRGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRkYXlNYXhFdmVudHM6IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdHNldEN1cnJlbnREYXRlLFxuXHRcdHNlbGVjdERhdGUsXG5cdFx0c2V0VmlldzogaGFuZGxlVmlld0NoYW5nZSxcblx0XHRuZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2QsXG5cdFx0dG9kYXksXG5cdFx0YWRkRXZlbnQsXG5cdFx0dXBkYXRlRXZlbnQsXG5cdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0ZGVsZXRlRXZlbnQsXG5cdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHRjbG9zZUV2ZW50Rm9ybSxcblx0XHRzZXRTZWxlY3RlZEV2ZW50LFxuXHRcdHNldElzRXZlbnRGb3JtT3Blbixcblx0XHRzZXRTZWxlY3RlZERhdGUsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHR0LFxuXHR9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRUcmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9ucyA9IHtcblx0Ly8gQ29tbW9uIGFjdGlvbnNcblx0dG9kYXk6ICdUb2RheScsXG5cdGNyZWF0ZTogJ0NyZWF0ZScsXG5cdG5ldzogJ05ldycsXG5cdHVwZGF0ZTogJ1VwZGF0ZScsXG5cdGRlbGV0ZTogJ0RlbGV0ZScsXG5cdGNhbmNlbDogJ0NhbmNlbCcsXG5cdGV4cG9ydDogJ0V4cG9ydCcsXG5cblx0Ly8gRXZlbnQgcmVsYXRlZFxuXHRldmVudDogJ0V2ZW50Jyxcblx0ZXZlbnRzOiAnRXZlbnRzJyxcblx0bmV3RXZlbnQ6ICdOZXcgRXZlbnQnLFxuXHR0aXRsZTogJ1RpdGxlJyxcblx0ZGVzY3JpcHRpb246ICdEZXNjcmlwdGlvbicsXG5cdGxvY2F0aW9uOiAnTG9jYXRpb24nLFxuXHRhbGxEYXk6ICdBbGwgZGF5Jyxcblx0c3RhcnREYXRlOiAnU3RhcnQgRGF0ZScsXG5cdGVuZERhdGU6ICdFbmQgRGF0ZScsXG5cdHN0YXJ0VGltZTogJ1N0YXJ0IFRpbWUnLFxuXHRlbmRUaW1lOiAnRW5kIFRpbWUnLFxuXHRjb2xvcjogJ0NvbG9yJyxcblxuXHQvLyBFdmVudCBmb3JtXG5cdGNyZWF0ZUV2ZW50OiAnQ3JlYXRlIEV2ZW50Jyxcblx0ZWRpdEV2ZW50OiAnRWRpdCBFdmVudCcsXG5cdGFkZE5ld0V2ZW50OiAnQWRkIGEgbmV3IGV2ZW50IHRvIHlvdXIgY2FsZW5kYXInLFxuXHRlZGl0RXZlbnREZXRhaWxzOiAnRWRpdCB5b3VyIGV2ZW50IGRldGFpbHMnLFxuXHRldmVudFRpdGxlUGxhY2Vob2xkZXI6ICdFdmVudCB0aXRsZScsXG5cdGV2ZW50RGVzY3JpcHRpb25QbGFjZWhvbGRlcjogJ0V2ZW50IGRlc2NyaXB0aW9uIChvcHRpb25hbCknLFxuXHRldmVudExvY2F0aW9uUGxhY2Vob2xkZXI6ICdFdmVudCBsb2NhdGlvbiAob3B0aW9uYWwpJyxcblxuXHQvLyBSZWN1cnJlbmNlXG5cdHJlcGVhdDogJ1JlcGVhdCcsXG5cdHJlcGVhdHM6ICdSZXBlYXRzJyxcblx0Y3VzdG9tUmVjdXJyZW5jZTogJ0N1c3RvbSByZWN1cnJlbmNlJyxcblx0ZGFpbHk6ICdEYWlseScsXG5cdHdlZWtseTogJ1dlZWtseScsXG5cdG1vbnRobHk6ICdNb250aGx5Jyxcblx0eWVhcmx5OiAnWWVhcmx5Jyxcblx0aW50ZXJ2YWw6ICdJbnRlcnZhbCcsXG5cdHJlcGVhdE9uOiAnUmVwZWF0IG9uJyxcblx0bmV2ZXI6ICdOZXZlcicsXG5cdGNvdW50OiAnQ291bnQnLFxuXHRldmVyeTogJ0V2ZXJ5Jyxcblx0ZW5kczogJ0VuZHMnLFxuXHRhZnRlcjogJ0FmdGVyJyxcblx0b2NjdXJyZW5jZXM6ICdvY2N1cnJlbmNlcycsXG5cdG9uOiAnT24nLFxuXG5cdC8vIFJlY3VycmVuY2UgZWRpdCBkaWFsb2dcblx0ZWRpdFJlY3VycmluZ0V2ZW50OiAnRWRpdCByZWN1cnJpbmcgZXZlbnQnLFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudDogJ0RlbGV0ZSByZWN1cnJpbmcgZXZlbnQnLFxuXHRlZGl0UmVjdXJyaW5nRXZlbnRRdWVzdGlvbjpcblx0XHQnaXMgYSByZWN1cnJpbmcgZXZlbnQuIEhvdyB3b3VsZCB5b3UgbGlrZSB0byBlZGl0IGl0PycsXG5cdGRlbGV0ZVJlY3VycmluZ0V2ZW50UXVlc3Rpb246XG5cdFx0J2lzIGEgcmVjdXJyaW5nIGV2ZW50LiBIb3cgd291bGQgeW91IGxpa2UgdG8gZGVsZXRlIGl0PycsXG5cdHRoaXNFdmVudDogJ1RoaXMgZXZlbnQnLFxuXHR0aGlzRXZlbnREZXNjcmlwdGlvbjogJ09ubHkgY2hhbmdlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG5cdHRoaXNBbmRGb2xsb3dpbmdFdmVudHM6ICdUaGlzIGFuZCBmb2xsb3dpbmcgZXZlbnRzJyxcblx0dGhpc0FuZEZvbGxvd2luZ0V2ZW50c0Rlc2NyaXB0aW9uOiAnRWRpdCB0aGlzIGFuZCBhbGwgZnV0dXJlIG9jY3VycmVuY2VzJyxcblx0YWxsRXZlbnRzOiAnQWxsIGV2ZW50cycsXG5cdGFsbEV2ZW50c0Rlc2NyaXB0aW9uOiAnRWRpdCB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuXHRvbmx5Q2hhbmdlVGhpczogJ09ubHkgY2hhbmdlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG5cdGNoYW5nZVRoaXNBbmRGdXR1cmU6ICdDaGFuZ2UgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG5cdGNoYW5nZUVudGlyZVNlcmllczogJ0NoYW5nZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuXHRvbmx5RGVsZXRlVGhpczogJ09ubHkgZGVsZXRlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG5cdGRlbGV0ZVRoaXNBbmRGdXR1cmU6ICdEZWxldGUgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG5cdGRlbGV0ZUVudGlyZVNlcmllczogJ0RlbGV0ZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuXG5cdC8vIFZpZXcgdHlwZXNcblx0bW9udGg6ICdNb250aCcsXG5cdHdlZWs6ICdXZWVrJyxcblx0ZGF5OiAnRGF5Jyxcblx0eWVhcjogJ1llYXInLFxuXHRtb3JlOiAnbW9yZScsXG5cblx0Ly8gUmVzb3VyY2UgY2FsZW5kYXJcblx0cmVzb3VyY2VzOiAnUmVzb3VyY2VzJyxcblx0cmVzb3VyY2U6ICdSZXNvdXJjZScsXG5cdHRpbWU6ICdUaW1lJyxcblx0ZGF0ZTogJ0RhdGUnLFxuXHRub1Jlc291cmNlc1Zpc2libGU6ICdObyByZXNvdXJjZXMgdmlzaWJsZScsXG5cdGFkZFJlc291cmNlc09yU2hvd0V4aXN0aW5nOiAnQWRkIHJlc291cmNlcyBvciBzaG93IGV4aXN0aW5nIG9uZXMnLFxuXG5cdC8vIERheXMgb2Ygd2Vla1xuXHRzdW5kYXk6ICdTdW5kYXknLFxuXHRtb25kYXk6ICdNb25kYXknLFxuXHR0dWVzZGF5OiAnVHVlc2RheScsXG5cdHdlZG5lc2RheTogJ1dlZG5lc2RheScsXG5cdHRodXJzZGF5OiAnVGh1cnNkYXknLFxuXHRmcmlkYXk6ICdGcmlkYXknLFxuXHRzYXR1cmRheTogJ1NhdHVyZGF5JyxcblxuXHQvLyBEYXlzIHNob3J0XG5cdHN1bjogJ1N1bicsXG5cdG1vbjogJ01vbicsXG5cdHR1ZTogJ1R1ZScsXG5cdHdlZDogJ1dlZCcsXG5cdHRodTogJ1RodScsXG5cdGZyaTogJ0ZyaScsXG5cdHNhdDogJ1NhdCcsXG5cblx0Ly8gTW9udGhzXG5cdGphbnVhcnk6ICdKYW51YXJ5Jyxcblx0ZmVicnVhcnk6ICdGZWJydWFyeScsXG5cdG1hcmNoOiAnTWFyY2gnLFxuXHRhcHJpbDogJ0FwcmlsJyxcblx0bWF5OiAnTWF5Jyxcblx0anVuZTogJ0p1bmUnLFxuXHRqdWx5OiAnSnVseScsXG5cdGF1Z3VzdDogJ0F1Z3VzdCcsXG5cdHNlcHRlbWJlcjogJ1NlcHRlbWJlcicsXG5cdG9jdG9iZXI6ICdPY3RvYmVyJyxcblx0bm92ZW1iZXI6ICdOb3ZlbWJlcicsXG5cdGRlY2VtYmVyOiAnRGVjZW1iZXInLFxufVxuIiwKICAgICJpbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgd2VlayBkYXlzIGZvciBhIGdpdmVuIGRhdGUgYW5kIGZpcnN0IGRheSBvZiB3ZWVrIHNldHRpbmcuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlIGN1cnJlbnQgZGF0ZSBpcyBhbHdheXMgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIHdlZWssXG4gKiBldmVuIHdoZW4gdGhlIGZpcnN0IGRheSBvZiB3ZWVrIGlzIHNldCB0byBhIGRheSBhZnRlciB0aGUgY3VycmVudCBkYXRlLlxuICpcbiAqIEBwYXJhbSBjdXJyZW50RGF0ZSAtIFRoZSByZWZlcmVuY2UgZGF0ZSBmb3IgY2FsY3VsYXRpbmcgdGhlIHdlZWtcbiAqIEBwYXJhbSBmaXJzdERheU9mV2VlayAtIFRoZSBkYXkgbnVtYmVyICgwLTYpIHJlcHJlc2VudGluZyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwID0gU3VuZGF5LCAxID0gTW9uZGF5LCBldGMuKVxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgNyBkYXlqcyBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgd2VlayBkYXlzLCBzdGFydGluZyBmcm9tIGZpcnN0RGF5T2ZXZWVrXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdldCB3ZWVrIHN0YXJ0aW5nIGZyb20gTW9uZGF5IGZvciBjdXJyZW50IGRhdGVcbiAqIGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoZGF5anMoJzIwMjUtMTAtMTMnKSwgMSlcbiAqIC8vIFJldHVybnM6IFtNb24gT2N0IDEzLCBUdWUgT2N0IDE0LCAuLi4sIFN1biBPY3QgMTldXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdldCB3ZWVrIHN0YXJ0aW5nIGZyb20gV2VkbmVzZGF5IHdoZW4gY3VycmVudCBkYXRlIGlzIE1vbmRheVxuICogY29uc3Qgd2Vla0RheXMgPSBnZXRXZWVrRGF5cyhkYXlqcygnMjAyNS0xMC0xMycpLCAzKVxuICogLy8gUmV0dXJuczogW1dlZCBPY3QgOCwgVGh1IE9jdCA5LCAuLi4sIFR1ZSBPY3QgMTRdIChpbmNsdWRlcyBNb25kYXkgT2N0IDEzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2Vla0RheXMoXG5cdGN1cnJlbnREYXRlOiBkYXlqcy5EYXlqcyxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuKTogZGF5anMuRGF5anNbXSB7XG5cdGNvbnN0IHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlID0gY3VycmVudERhdGVcblx0XHQuc3RhcnRPZignd2VlaycpXG5cdFx0LmRheShmaXJzdERheU9mV2VlaylcblxuXHRjb25zdCBhZGp1c3RlZFN0YXJ0T2ZXZWVrID0gY3VycmVudERhdGUuaXNCZWZvcmUoc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGUpXG5cdFx0PyBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZS5zdWJ0cmFjdCgxLCAnd2VlaycpXG5cdFx0OiBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZVxuXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiA3IH0sIChfLCBkYXlJbmRleCkgPT5cblx0XHRhZGp1c3RlZFN0YXJ0T2ZXZWVrLmFkZChkYXlJbmRleCwgJ2RheScpXG5cdClcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgNiB3ZWVrcyBvZiBkYXlzIGZvciBhIG1vbnRoIGNhbGVuZGFyIHZpZXcuXG4gKiBBbHdheXMgcmV0dXJucyA0MiBkYXlzICg2IHdlZWtzIMOXIDcgZGF5cykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb250aFdlZWtzKFxuXHRtb250aERhdGU6IGRheWpzLkRheWpzLFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG4pOiBkYXlqcy5EYXlqc1tdW10ge1xuXHRjb25zdCBmaXJzdFdlZWsgPSBnZXRXZWVrRGF5cyhtb250aERhdGUuc3RhcnRPZignbW9udGgnKSwgZmlyc3REYXlPZldlZWspXG5cblx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDYgfSwgKF8sIHdlZWtJbmRleCkgPT4ge1xuXHRcdGNvbnN0IHdlZWtTdGFydCA9IGZpcnN0V2Vla1swXS5hZGQod2Vla0luZGV4LCAnd2VlaycpXG5cdFx0cmV0dXJuIGdldFdlZWtEYXlzKHdlZWtTdGFydCwgZmlyc3REYXlPZldlZWspXG5cdH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb250aERheXMobW9udGhEYXRlOiBkYXlqcy5EYXlqcyk6IGRheWpzLkRheWpzW10ge1xuXHRjb25zdCBkYXlzSW5Nb250aCA9IG1vbnRoRGF0ZS5kYXlzSW5Nb250aCgpXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBkYXlzSW5Nb250aCB9LCAoXywgaSkgPT5cblx0XHRtb250aERhdGUuc3RhcnRPZignbW9udGgnKS5hZGQoaSwgJ2RheScpXG5cdClcbn1cblxuaW50ZXJmYWNlIEdldERheUhvdXJzT3B0aW9ucyB7XG5cdHJlZmVyZW5jZURhdGU/OiBkYXlqcy5EYXlqc1xuXHRsZW5ndGg/OiBudW1iZXJcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYW4gYXJyYXkgb2YgMjQgZGF5anMgb2JqZWN0cyByZXByZXNlbnRpbmcgaG91cmx5IHNsb3RzIGZvciBhIGRheS5cbiAqIFVzZXMgLmhvdXIoaSkgc28gZWFjaCByb3cgbWFwcyB0byBcInRoZSBob3VyIGxhYmVsZWQgaVwiIOKAlCBrZWVwaW5nIGdyaWQgcm93c1xuICogYWxpZ25lZCBhY3Jvc3MgY29sdW1ucyBpbiB3ZWVrIHZpZXdzLiBPbiBEU1Qgc3ByaW5nLWZvcndhcmQsIC5ob3VyKDIpIHJldHVybnNcbiAqIDMgQU0gKHRoZSBub24tZXhpc3RlbnQgaG91ciBpcyBjb2xsYXBzZWQpLCBidXQgdGhlIGdyaWQga2V5IGZpeCAoZGF5SW5kZXgpXG4gKiBhbmQgcGVyLWRheSBnZW5lcmF0aW9uIGluIHZpZXdzIGhhbmRsZSB0aGlzIGNvcnJlY3RseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERheUhvdXJzKHtcblx0cmVmZXJlbmNlRGF0ZSA9IGRheWpzKCksXG5cdGxlbmd0aCA9IDI0LFxufTogR2V0RGF5SG91cnNPcHRpb25zID0ge30pOiBkYXlqcy5EYXlqc1tdIHtcblx0Y29uc3Qgc3RhcnRPZkRheSA9IHJlZmVyZW5jZURhdGUuc3RhcnRPZignZGF5Jylcblx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGggfSwgKF8sIGkpID0+XG5cdFx0c3RhcnRPZkRheS5ob3VyKGkpLm1pbnV0ZSgwKS5zZWNvbmQoMCkubWlsbGlzZWNvbmQoMClcblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuXG5leHBvcnQgY29uc3QgR0FQX0JFVFdFRU5fRUxFTUVOVFMgPSAxIC8vIHB4IChnYXAtMSlcbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX0hFSUdIVCA9IDI0IC8vIHB4IChoLTYpXG5leHBvcnQgY29uc3QgRVZFTlRfQkFSX0hFSUdIVCA9IDI0IC8vIHB4IChoLVsyNHB4XSlcbmV4cG9ydCBjb25zdCBEQVlfTUFYX0VWRU5UU19ERUZBVUxUID0gNCAvLyBEZWZhdWx0IG1heCBldmVudHMgcGVyIGRheVxuZXhwb3J0IGNvbnN0IERJU0FCTEVEX0NFTExfQ0xBU1NOQU1FID1cblx0J2JnLXNlY29uZGFyeSB0ZXh0LW11dGVkLWZvcmVncm91bmQgcG9pbnRlci1ldmVudHMtbm9uZSdcblxuZXhwb3J0IGNvbnN0IFdFRUtfREFZU19OVU1CRVJfTUFQOiBSZWNvcmQ8V2Vla0RheXMsIG51bWJlcj4gPSB7XG5cdHN1bmRheTogMCxcblx0bW9uZGF5OiAxLFxuXHR0dWVzZGF5OiAyLFxuXHR3ZWRuZXNkYXk6IDMsXG5cdHRodXJzZGF5OiA0LFxuXHRmcmlkYXk6IDUsXG5cdHNhdHVyZGF5OiA2LFxufVxuXG5leHBvcnQgY29uc3QgREFZX05VTUJFUl9UT19XRUVLX0RBWVM6IFJlY29yZDxudW1iZXIsIFdlZWtEYXlzPiA9IHtcblx0MDogJ3N1bmRheScsXG5cdDE6ICdtb25kYXknLFxuXHQyOiAndHVlc2RheScsXG5cdDM6ICd3ZWRuZXNkYXknLFxuXHQ0OiAndGh1cnNkYXknLFxuXHQ1OiAnZnJpZGF5Jyxcblx0NjogJ3NhdHVyZGF5Jyxcbn1cbiIsCiAgICAiaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ29udGVudCxcblx0RGlhbG9nRGVzY3JpcHRpb24sXG5cdERpYWxvZ0Zvb3Rlcixcblx0RGlhbG9nSGVhZGVyLFxuXHREaWFsb2dUaXRsZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RpYWxvZydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRTY29wZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuaW50ZXJmYWNlIFJlY3VycmVuY2VFZGl0RGlhbG9nUHJvcHMge1xuXHRpc09wZW46IGJvb2xlYW5cblx0b25DbG9zZTogKCkgPT4gdm9pZFxuXHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4gdm9pZFxuXHRvcGVyYXRpb25UeXBlOiAnZWRpdCcgfCAnZGVsZXRlJ1xuXHRldmVudFRpdGxlOiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlY3VycmVuY2VFZGl0RGlhbG9nKHtcblx0aXNPcGVuLFxuXHRvbkNsb3NlLFxuXHRvbkNvbmZpcm0sXG5cdG9wZXJhdGlvblR5cGUsXG5cdGV2ZW50VGl0bGUsXG59OiBSZWN1cnJlbmNlRWRpdERpYWxvZ1Byb3BzKSB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7IHQ6IGNvbnRleHQudCB9KSlcblxuXHRjb25zdCBoYW5kbGVTY29wZVNlbGVjdCA9IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdG9uQ29uZmlybShzY29wZSlcblx0XHRvbkNsb3NlKClcblx0fVxuXG5cdGNvbnN0IGlzRWRpdCA9IG9wZXJhdGlvblR5cGUgPT09ICdlZGl0J1xuXG5cdHJldHVybiAoXG5cdFx0PERpYWxvZyBvbk9wZW5DaGFuZ2U9e29uQ2xvc2V9IG9wZW49e2lzT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtdy1tZFwiPlxuXHRcdFx0XHQ8RGlhbG9nSGVhZGVyPlxuXHRcdFx0XHRcdDxEaWFsb2dUaXRsZT5cblx0XHRcdFx0XHRcdHtpc0VkaXQgPyB0KCdlZGl0UmVjdXJyaW5nRXZlbnQnKSA6IHQoJ2RlbGV0ZVJlY3VycmluZ0V2ZW50Jyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dUaXRsZT5cblx0XHRcdFx0XHQ8RGlhbG9nRGVzY3JpcHRpb24+XG5cdFx0XHRcdFx0XHRcIntldmVudFRpdGxlfVwieycgJ31cblx0XHRcdFx0XHRcdHtpc0VkaXRcblx0XHRcdFx0XHRcdFx0PyB0KCdlZGl0UmVjdXJyaW5nRXZlbnRRdWVzdGlvbicpXG5cdFx0XHRcdFx0XHRcdDogdCgnZGVsZXRlUmVjdXJyaW5nRXZlbnRRdWVzdGlvbicpfVxuXHRcdFx0XHRcdDwvRGlhbG9nRGVzY3JpcHRpb24+XG5cdFx0XHRcdDwvRGlhbG9nSGVhZGVyPlxuXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0zXCI+XG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIGp1c3RpZnktc3RhcnQgaC1hdXRvIHAtNFwiXG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTY29wZVNlbGVjdCgndGhpcycpfVxuXHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgndGhpc0V2ZW50Jyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0XHR7aXNFZGl0ID8gdCgnb25seUNoYW5nZVRoaXMnKSA6IHQoJ29ubHlEZWxldGVUaGlzJyl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwganVzdGlmeS1zdGFydCBoLWF1dG8gcC00XCJcblx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNjb3BlU2VsZWN0KCdmb2xsb3dpbmcnKX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbGVmdFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e3QoJ3RoaXNBbmRGb2xsb3dpbmdFdmVudHMnKX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdHtpc0VkaXQgPyB0KCdjaGFuZ2VUaGlzQW5kRnV0dXJlJykgOiB0KCdkZWxldGVUaGlzQW5kRnV0dXJlJyl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwganVzdGlmeS1zdGFydCBoLWF1dG8gcC00XCJcblx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNjb3BlU2VsZWN0KCdhbGwnKX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbGVmdFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e3QoJ2FsbEV2ZW50cycpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0e2lzRWRpdCA/IHQoJ2NoYW5nZUVudGlyZVNlcmllcycpIDogdCgnZGVsZXRlRW50aXJlU2VyaWVzJyl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxEaWFsb2dGb290ZXI+XG5cdFx0XHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvbkNsb3NlfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHRcdFx0e3QoJ2NhbmNlbCcpfVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8L0RpYWxvZ0Zvb3Rlcj5cblx0XHRcdDwvRGlhbG9nQ29udGVudD5cblx0XHQ8L0RpYWxvZz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IERyYWdFbmRFdmVudCB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICcuLi90eXBlcydcblxuZXhwb3J0IGNvbnN0IGdldFVwZGF0ZWRFdmVudCA9IChcblx0ZXZlbnQ6IERyYWdFbmRFdmVudCxcblx0YWN0aXZlRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG4pID0+IHtcblx0Y29uc3QgeyBhY3RpdmUsIG92ZXIgfSA9IGV2ZW50XG5cblx0aWYgKCFhY3RpdmUgfHwgIW92ZXIgfHwgIWFjdGl2ZUV2ZW50KSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXG5cdGNvbnN0IGlzVGltZUNlbGwgPSBvdmVyLmRhdGEuY3VycmVudD8udHlwZSA9PT0gJ3RpbWUtY2VsbCdcblx0Y29uc3QgeyByZXNvdXJjZUlkLCBhbGxEYXkgfSA9IG92ZXIuZGF0YS5jdXJyZW50IHx8IHt9XG5cdGxldCBuZXdTdGFydFxuXG5cdGlmIChpc1RpbWVDZWxsKSB7XG5cdFx0Y29uc3QgeyBkYXRlLCBob3VyID0gMCwgbWludXRlID0gMCB9ID0gb3Zlci5kYXRhLmN1cnJlbnRcblxuXHRcdC8vIENyZWF0ZSBuZXcgc3RhcnQgdGltZSBiYXNlZCBvbiB0aGUgZHJvcCB0YXJnZXRcblx0XHRuZXdTdGFydCA9IGRheWpzKGRhdGUpLmhvdXIoaG91cikubWludXRlKG1pbnV0ZSlcblx0fSBlbHNlIHtcblx0XHRjb25zdCB7IGRhdGUgfSA9IG92ZXIuZGF0YS5jdXJyZW50XG5cblx0XHRuZXdTdGFydCA9IGRheWpzKGRhdGUpXG5cdH1cblxuXHRjb25zdCBldmVudER1cmF0aW9uID0gYWN0aXZlRXZlbnQuZW5kLmRpZmYoYWN0aXZlRXZlbnQuc3RhcnQsICdzZWNvbmQnKVxuXG5cdC8vIENyZWF0ZSBuZXcgZW5kIHRpbWUgYnkgYWRkaW5nIHRoZSBvcmlnaW5hbCBkdXJhdGlvblxuXHRsZXQgbmV3RW5kID0gbmV3U3RhcnQuYWRkKGV2ZW50RHVyYXRpb24sICdzZWNvbmQnKVxuXG5cdGlmIChuZXdFbmQuaXNTYW1lKG5ld0VuZC5zdGFydE9mKCdkYXknKSkpIHtcblx0XHQvLyBJZiB0aGUgbmV3IGVuZCB0aW1lIGlzIGF0IG1pZG5pZ2h0LCBzZXQgaXQgdG8gMjQgaG91cnMgb2YgcGFydGlhbCBkYXlcblx0XHRuZXdFbmQgPSBuZXdFbmQuc3VidHJhY3QoMSwgJ2RheScpLmVuZE9mKCdkYXknKVxuXHR9XG5cblx0Ly8gVXBkYXRlIHRoZSBldmVudCB3aXRoIG5ldyB0aW1lcyBhbmQgcmVzb3VyY2UgaWYgY2hhbmdlZFxuXHRjb25zdCB1cGRhdGVzID0ge1xuXHRcdHN0YXJ0OiBuZXdTdGFydCxcblx0XHRlbmQ6IG5ld0VuZCxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGFsbERheTogaXNUaW1lQ2VsbCA/IGZhbHNlIDogKGFsbERheSA/PyBhY3RpdmVFdmVudC5hbGxEYXkpLFxuXHR9XG5cdHJldHVybiB7IGFjdGl2ZUV2ZW50LCB1cGRhdGVzIH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgRHJhZ092ZXJsYXkgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHsgc25hcENlbnRlclRvQ3Vyc29yIH0gZnJvbSAnQGRuZC1raXQvbW9kaWZpZXJzJ1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VJbXBlcmF0aXZlSGFuZGxlLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJy4uL3R5cGVzJ1xuXG5pbnRlcmZhY2UgRXZlbnREcmFnT3ZlcmxheVByb3BzIHtcblx0cmVmOiBSZWFjdC5SZWY8eyBzZXRBY3RpdmVFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkIH0+XG59XG5cbmV4cG9ydCBjb25zdCBFdmVudERyYWdPdmVybGF5OiBSZWFjdC5GQzxFdmVudERyYWdPdmVybGF5UHJvcHM+ID0gKHsgcmVmIH0pID0+IHtcblx0Y29uc3QgW2FjdGl2ZUV2ZW50LCBzZXRBY3RpdmVFdmVudF0gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50PihudWxsKVxuXG5cdHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuXHRcdHNldEFjdGl2ZUV2ZW50LFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxEcmFnT3ZlcmxheSBtb2RpZmllcnM9e1tzbmFwQ2VudGVyVG9DdXJzb3JdfT5cblx0XHRcdHthY3RpdmVFdmVudCAmJiAoXG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2N1cnNvci1ncmFiIHRydW5jYXRlIHJvdW5kZWQgYmctYW1iZXItMjAwIHAtMiB0ZXh0LVsxMHB4XSBzaGFkb3ctbGcgc206dGV4dC14cyB3LTIwJyxcblx0XHRcdFx0XHRcdGFjdGl2ZUV2ZW50LmJhY2tncm91bmRDb2xvciB8fCAnYmctYmx1ZS01MDAnLFxuXHRcdFx0XHRcdFx0YWN0aXZlRXZlbnQuY29sb3IgfHwgJ3RleHQtd2hpdGUnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHthY3RpdmVFdmVudD8udGl0bGV9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KX1cblx0XHQ8L0RyYWdPdmVybGF5PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NoZWNrYm94J1xuaW1wb3J0IHsgRGF0ZVBpY2tlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9kYXRlLXBpY2tlcidcbmltcG9ydCB7IERpYWxvZ0Zvb3RlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9kaWFsb2cnXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9pbnB1dCdcbmltcG9ydCB7IExhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2xhYmVsJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IFRpbWVQaWNrZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvdGltZS1waWNrZXInXG5pbXBvcnQgeyBpc0J1c2luZXNzRGF5IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3VycydcbmltcG9ydCB7XG5cdGJ1aWxkRGF0ZVRpbWUsXG5cdGJ1aWxkRW5kRGF0ZVRpbWUsXG5cdGdldFRpbWVDb25zdHJhaW50cyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9ldmVudC1mb3JtLXV0aWxzJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXREaWFsb2cgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXRvciB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdG9yL3JlY3VycmVuY2UtZWRpdG9yJ1xuaW1wb3J0IHsgdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucydcbmltcG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgaXNSZWN1cnJpbmdFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBDT0xPUl9PUFRJT05TID0gW1xuXHR7XG5cdFx0dmFsdWU6IGBiZy1ibHVlLTEwMCB0ZXh0LWJsdWUtODAwYCxcblx0XHRsYWJlbDogJ0JsdWUnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1ncmVlbi0xMDAgdGV4dC1ncmVlbi04MDBgLFxuXHRcdGxhYmVsOiAnR3JlZW4nLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1wdXJwbGUtMTAwIHRleHQtcHVycGxlLTgwMGAsXG5cdFx0bGFiZWw6ICdQdXJwbGUnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1yZWQtMTAwIHRleHQtcmVkLTgwMGAsXG5cdFx0bGFiZWw6ICdSZWQnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy15ZWxsb3ctMTAwIHRleHQteWVsbG93LTgwMGAsXG5cdFx0bGFiZWw6ICdZZWxsb3cnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1waW5rLTEwMCB0ZXh0LXBpbmstODAwYCxcblx0XHRsYWJlbDogJ1BpbmsnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1pbmRpZ28tMTAwIHRleHQtaW5kaWdvLTgwMGAsXG5cdFx0bGFiZWw6ICdJbmRpZ28nLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1hbWJlci0xMDAgdGV4dC1hbWJlci04MDBgLFxuXHRcdGxhYmVsOiAnQW1iZXInLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1lbWVyYWxkLTEwMCB0ZXh0LWVtZXJhbGQtODAwYCxcblx0XHRsYWJlbDogJ0VtZXJhbGQnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1za3ktMTAwIHRleHQtc2t5LTgwMGAsXG5cdFx0bGFiZWw6ICdTa3knLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy12aW9sZXQtMTAwIHRleHQtdmlvbGV0LTgwMGAsXG5cdFx0bGFiZWw6ICdWaW9sZXQnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1yb3NlLTEwMCB0ZXh0LXJvc2UtODAwYCxcblx0XHRsYWJlbDogJ1Jvc2UnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy10ZWFsLTEwMCB0ZXh0LXRlYWwtODAwYCxcblx0XHRsYWJlbDogJ1RlYWwnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1vcmFuZ2UtMTAwIHRleHQtb3JhbmdlLTgwMGAsXG5cdFx0bGFiZWw6ICdPcmFuZ2UnLFxuXHR9LFxuXVxuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50Rm9ybVByb3BzIHtcblx0b3Blbj86IGJvb2xlYW5cblx0c2VsZWN0ZWRFdmVudD86IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdG9uQWRkPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uVXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uQ2xvc2U6ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IEV2ZW50Rm9ybTogUmVhY3QuRkM8RXZlbnRGb3JtUHJvcHM+ID0gKHtcblx0c2VsZWN0ZWRFdmVudCxcblx0b25DbG9zZSxcblx0b25VcGRhdGUsXG5cdG9uRGVsZXRlLFxuXHRvbkFkZCxcbn0pID0+IHtcblx0Y29uc3Qge1xuXHRcdGRpYWxvZ1N0YXRlLFxuXHRcdG9wZW5FZGl0RGlhbG9nLFxuXHRcdG9wZW5EZWxldGVEaWFsb2csXG5cdFx0Y2xvc2VEaWFsb2csXG5cdFx0aGFuZGxlQ29uZmlybSxcblx0fSA9IHVzZVJlY3VycmluZ0V2ZW50QWN0aW9ucyhvbkNsb3NlKVxuXG5cdGNvbnN0IHtcblx0XHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG5cdFx0dCxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdHRpbWVGb3JtYXQsXG5cdFx0Z2V0UmVzb3VyY2VCeUlkLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiBjb250ZXh0LmZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHR0OiBjb250ZXh0LnQsXG5cdFx0YnVzaW5lc3NIb3VyczogY29udGV4dC5idXNpbmVzc0hvdXJzLFxuXHRcdHRpbWVGb3JtYXQ6IGNvbnRleHQudGltZUZvcm1hdCxcblx0XHRnZXRSZXNvdXJjZUJ5SWQ6IGNvbnRleHQuZ2V0UmVzb3VyY2VCeUlkLFxuXHR9KSlcblxuXHRjb25zdCBzdGFydCA9IHNlbGVjdGVkRXZlbnQ/LnN0YXJ0ID8/IGRheWpzKClcblx0Y29uc3QgZW5kID0gc2VsZWN0ZWRFdmVudD8uZW5kID8/IGRheWpzKCkuYWRkKDEsICdob3VyJylcblxuXHQvLyBGaW5kIHBhcmVudCBldmVudCBpZiB0aGlzIGlzIGEgcmVjdXJyaW5nIGV2ZW50IGluc3RhbmNlXG5cdGNvbnN0IHBhcmVudEV2ZW50ID0gc2VsZWN0ZWRFdmVudFxuXHRcdD8gZmluZFBhcmVudFJlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpXG5cdFx0OiBudWxsXG5cblx0Ly8gRm9ybSBzdGF0ZVxuXHRjb25zdCBbc3RhcnREYXRlLCBzZXRTdGFydERhdGVdID0gdXNlU3RhdGUoc3RhcnQudG9EYXRlKCkpXG5cdGNvbnN0IFtlbmREYXRlLCBzZXRFbmREYXRlXSA9IHVzZVN0YXRlKGVuZC50b0RhdGUoKSlcblx0Y29uc3QgW2lzQWxsRGF5LCBzZXRJc0FsbERheV0gPSB1c2VTdGF0ZShzZWxlY3RlZEV2ZW50Py5hbGxEYXkgfHwgZmFsc2UpXG5cdGNvbnN0IFtzZWxlY3RlZENvbG9yLCBzZXRTZWxlY3RlZENvbG9yXSA9IHVzZVN0YXRlKFxuXHRcdHNlbGVjdGVkRXZlbnQ/LmNvbG9yIHx8IENPTE9SX09QVElPTlNbMF0udmFsdWVcblx0KVxuXG5cdC8vIFRpbWUgc3RhdGVcblx0Y29uc3QgW3N0YXJ0VGltZSwgc2V0U3RhcnRUaW1lXSA9IHVzZVN0YXRlKHN0YXJ0LmZvcm1hdCgnSEg6bW0nKSlcblx0Y29uc3QgW2VuZFRpbWUsIHNldEVuZFRpbWVdID0gdXNlU3RhdGUoZW5kLmZvcm1hdCgnSEg6bW0nKSlcblxuXHQvLyBJbml0aWFsaXplIGZvcm0gdmFsdWVzIGZyb20gc2VsZWN0ZWQgZXZlbnQgb3IgZGVmYXVsdHNcblx0Y29uc3QgW2Zvcm1WYWx1ZXMsIHNldEZvcm1WYWx1ZXNdID0gdXNlU3RhdGUoe1xuXHRcdHRpdGxlOiBzZWxlY3RlZEV2ZW50Py50aXRsZSB8fCAnJyxcblx0XHRkZXNjcmlwdGlvbjogc2VsZWN0ZWRFdmVudD8uZGVzY3JpcHRpb24gfHwgJycsXG5cdFx0bG9jYXRpb246IHNlbGVjdGVkRXZlbnQ/LmxvY2F0aW9uIHx8ICcnLFxuXHR9KVxuXG5cdC8vIFJlY3VycmVuY2Ugc3RhdGUgLSBwdWxsIFJSVUxFIGZyb20gcGFyZW50IGlmIHRoaXMgaXMgYW4gaW5zdGFuY2Vcblx0Y29uc3QgW3JydWxlLCBzZXRScnVsZV0gPSB1c2VTdGF0ZTxSUnVsZU9wdGlvbnMgfCBudWxsPigoKSA9PiB7XG5cdFx0Y29uc3QgZXZlbnRScnVsZSA9IHNlbGVjdGVkRXZlbnQ/LnJydWxlIHx8IHBhcmVudEV2ZW50Py5ycnVsZVxuXHRcdHJldHVybiBldmVudFJydWxlIHx8IG51bGxcblx0fSlcblxuXHQvLyBDcmVhdGUgd3JhcHBlciBmdW5jdGlvbnMgdG8gZml4IFR5cGVTY3JpcHQgZXJyb3JzIHdpdGggRGF0ZVBpY2tlclxuXHRjb25zdCBoYW5kbGVTdGFydERhdGVDaGFuZ2UgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuXHRcdHNldFN0YXJ0RGF0ZShkYXRlKVxuXHRcdGlmIChkYXRlICYmIGRheWpzKGRhdGUpLmlzQWZ0ZXIoZGF5anMoZW5kRGF0ZSkpKSB7XG5cdFx0XHRzZXRFbmREYXRlKGRhdGUpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRW5kRGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0c2V0RW5kRGF0ZShkYXRlKVxuXHRcdGlmIChkYXRlICYmIGRheWpzKGRhdGUpLmlzQmVmb3JlKGRheWpzKHN0YXJ0RGF0ZSkpKSB7XG5cdFx0XHRzZXRTdGFydERhdGUoZGF0ZSlcblx0XHR9XG5cdH1cblxuXHQvLyBUaW1lIHZhbGlkYXRpb24gaGFuZGxlcnMgLSBvbmx5IHZhbGlkYXRlIHdoZW4gZGF0ZXMgYXJlIHRoZSBzYW1lXG5cdGNvbnN0IGhhbmRsZVN0YXJ0VGltZUNoYW5nZSA9ICh0aW1lOiBzdHJpbmcpID0+IHtcblx0XHRzZXRTdGFydFRpbWUodGltZSlcblx0XHQvLyBPbmx5IHZhbGlkYXRlIGlmIHNhbWUgZGF5XG5cdFx0aWYgKGRheWpzKHN0YXJ0RGF0ZSkuaXNTYW1lKGRheWpzKGVuZERhdGUpLCAnZGF5JykgJiYgdGltZSA+IGVuZFRpbWUpIHtcblx0XHRcdHNldEVuZFRpbWUodGltZSlcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVFbmRUaW1lQ2hhbmdlID0gKHRpbWU6IHN0cmluZykgPT4ge1xuXHRcdHNldEVuZFRpbWUodGltZSlcblx0XHQvLyBPbmx5IHZhbGlkYXRlIGlmIHNhbWUgZGF5XG5cdFx0aWYgKGRheWpzKHN0YXJ0RGF0ZSkuaXNTYW1lKGRheWpzKGVuZERhdGUpLCAnZGF5JykgJiYgdGltZSA8IHN0YXJ0VGltZSkge1xuXHRcdFx0c2V0U3RhcnRUaW1lKHRpbWUpXG5cdFx0fVxuXHR9XG5cblx0Ly8gVXBkYXRlIGZvcm0gdmFsdWVzIHdoZW4gaW5wdXQgY2hhbmdlc1xuXHRjb25zdCBoYW5kbGVJbnB1dENoYW5nZSA9IChcblx0XHRlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD5cblx0KSA9PiB7XG5cdFx0Y29uc3QgeyBuYW1lLCB2YWx1ZSB9ID0gZS50YXJnZXRcblx0XHRzZXRGb3JtVmFsdWVzKChwcmV2KSA9PiAoeyAuLi5wcmV2LCBbbmFtZV06IHZhbHVlIH0pKVxuXHR9XG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHQvLyBSZXNldCBlbmQgdGltZSB3aGVuIGFsbCBkYXkgaXMgdG9nZ2xlZCB0byBvblxuXHRcdGlmIChpc0FsbERheSkge1xuXHRcdFx0c2V0RW5kVGltZSgnMjM6NTknKVxuXHRcdH1cblx0fSwgW2lzQWxsRGF5XSlcblxuXHRjb25zdCBoYW5kbGVTdWJtaXQgPSAoZTogUmVhY3QuRm9ybUV2ZW50KSA9PiB7XG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpXG5cblx0XHRjb25zdCBzdGFydERhdGVUaW1lID0gYnVpbGREYXRlVGltZShzdGFydERhdGUsIHN0YXJ0VGltZSwgaXNBbGxEYXkpXG5cdFx0Y29uc3QgZW5kRGF0ZVRpbWUgPSBidWlsZEVuZERhdGVUaW1lKGVuZERhdGUsIGVuZFRpbWUsIGlzQWxsRGF5KVxuXG5cdFx0Y29uc3QgZXZlbnREYXRhOiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0aWQ6IHNlbGVjdGVkRXZlbnQ/LmlkIHx8IGRheWpzKCkuZm9ybWF0KCdZWVlZTU1EREhIbW1zcycpLFxuXHRcdFx0dGl0bGU6IGZvcm1WYWx1ZXMudGl0bGUsXG5cdFx0XHRzdGFydDogc3RhcnREYXRlVGltZSxcblx0XHRcdGVuZDogZW5kRGF0ZVRpbWUsXG5cdFx0XHRyZXNvdXJjZUlkOiBzZWxlY3RlZEV2ZW50Py5yZXNvdXJjZUlkLFxuXHRcdFx0ZGVzY3JpcHRpb246IGZvcm1WYWx1ZXMuZGVzY3JpcHRpb24sXG5cdFx0XHRsb2NhdGlvbjogZm9ybVZhbHVlcy5sb2NhdGlvbixcblx0XHRcdGFsbERheTogaXNBbGxEYXksXG5cdFx0XHRjb2xvcjogc2VsZWN0ZWRDb2xvcixcblx0XHRcdHJydWxlOiBycnVsZSB8fCB1bmRlZmluZWQsXG5cdFx0fVxuXG5cdFx0aWYgKHNlbGVjdGVkRXZlbnQ/LmlkICYmIGlzUmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudCkpIHtcblx0XHRcdG9wZW5FZGl0RGlhbG9nKHNlbGVjdGVkRXZlbnQsIHtcblx0XHRcdFx0dGl0bGU6IGZvcm1WYWx1ZXMudGl0bGUsXG5cdFx0XHRcdHN0YXJ0OiBzdGFydERhdGVUaW1lLFxuXHRcdFx0XHRlbmQ6IGVuZERhdGVUaW1lLFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogZm9ybVZhbHVlcy5kZXNjcmlwdGlvbixcblx0XHRcdFx0bG9jYXRpb246IGZvcm1WYWx1ZXMubG9jYXRpb24sXG5cdFx0XHRcdGFsbERheTogaXNBbGxEYXksXG5cdFx0XHRcdGNvbG9yOiBzZWxlY3RlZENvbG9yLFxuXHRcdFx0XHRycnVsZTogcnJ1bGUgfHwgdW5kZWZpbmVkLFxuXHRcdFx0fSlcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGlmIChzZWxlY3RlZEV2ZW50Py5pZCkge1xuXHRcdFx0b25VcGRhdGU/LihldmVudERhdGEpXG5cdFx0fSBlbHNlIHtcblx0XHRcdG9uQWRkPy4oZXZlbnREYXRhKVxuXHRcdH1cblx0XHRvbkNsb3NlKClcblx0fVxuXG5cdGNvbnN0IGhhbmRsZURlbGV0ZSA9ICgpID0+IHtcblx0XHRpZiAoc2VsZWN0ZWRFdmVudD8uaWQpIHtcblx0XHRcdC8vIENoZWNrIGlmIHRoaXMgaXMgYSByZWN1cnJpbmcgZXZlbnRcblx0XHRcdGlmIChpc1JlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpKSB7XG5cdFx0XHRcdC8vIFNob3cgcmVjdXJyaW5nIGV2ZW50IGRlbGV0ZSBkaWFsb2dcblx0XHRcdFx0b3BlbkRlbGV0ZURpYWxvZyhzZWxlY3RlZEV2ZW50KVxuXHRcdFx0XHRyZXR1cm4gLy8gRG9uJ3QgY2xvc2UgdGhlIGZvcm0geWV0LCBsZXQgdGhlIGRpYWxvZyBoYW5kbGUgaXRcblx0XHRcdH1cblx0XHRcdG9uRGVsZXRlPy4oc2VsZWN0ZWRFdmVudClcblx0XHRcdG9uQ2xvc2UoKVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGhhbmRsZVJSdWxlQ2hhbmdlID0gKG5ld1JSdWxlOiBSUnVsZU9wdGlvbnMgfCBudWxsKSA9PiB7XG5cdFx0aWYgKCFuZXdSUnVsZSkge1xuXHRcdFx0c2V0UnJ1bGUobnVsbClcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRjb25zdCBzdGFydERhdGVUaW1lID0gYnVpbGREYXRlVGltZShzdGFydERhdGUsIHN0YXJ0VGltZSwgaXNBbGxEYXkpXG5cdFx0c2V0UnJ1bGUoeyAuLi5uZXdSUnVsZSwgZHRzdGFydDogc3RhcnREYXRlVGltZS50b0RhdGUoKSB9KVxuXHR9XG5cblx0Ly8gVXNlIHJlc291cmNlLXNwZWNpZmljIGJ1c2luZXNzIGhvdXJzIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGxiYWNrIHRvIGdsb2JhbFxuXHRjb25zdCBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0Y29uc3QgcmVzb3VyY2VJZCA9IHNlbGVjdGVkRXZlbnQ/LnJlc291cmNlSWRcblx0XHRpZiAocmVzb3VyY2VJZCAmJiBnZXRSZXNvdXJjZUJ5SWQpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlID0gZ2V0UmVzb3VyY2VCeUlkKHJlc291cmNlSWQpXG5cdFx0XHRpZiAocmVzb3VyY2U/LmJ1c2luZXNzSG91cnMpIHtcblx0XHRcdFx0cmV0dXJuIHJlc291cmNlLmJ1c2luZXNzSG91cnNcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGJ1c2luZXNzSG91cnNcblx0fSwgW3NlbGVjdGVkRXZlbnQ/LnJlc291cmNlSWQsIGdldFJlc291cmNlQnlJZCwgYnVzaW5lc3NIb3Vyc10pXG5cblx0Y29uc3QgZGlzYWJsZWREYXRlTWF0Y2hlciA9IGVmZmVjdGl2ZUJ1c2luZXNzSG91cnNcblx0XHQ/IChkYXRlOiBEYXRlKSA9PiAhaXNCdXNpbmVzc0RheShkYXlqcyhkYXRlKSwgZWZmZWN0aXZlQnVzaW5lc3NIb3Vycylcblx0XHQ6IHVuZGVmaW5lZFxuXG5cdGNvbnN0IHN0YXJ0Q29uc3RyYWludHMgPSBnZXRUaW1lQ29uc3RyYWludHMoc3RhcnREYXRlLCBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzKVxuXHRjb25zdCBlbmRDb25zdHJhaW50cyA9IGdldFRpbWVDb25zdHJhaW50cyhlbmREYXRlLCBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzKVxuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxmb3JtIGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZmxleC0xIG1pbi1oLTBcIiBvblN1Ym1pdD17aGFuZGxlU3VibWl0fT5cblx0XHRcdFx0PFNjcm9sbEFyZWEgY2xhc3NOYW1lPVwiZmxleC0xIG1pbi1oLTBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTMgc206Z2FwLTQgcC0xXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTJcIj5cblx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiIGh0bWxGb3I9XCJ0aXRsZVwiPlxuXHRcdFx0XHRcdFx0XHRcdHt0KCd0aXRsZScpfVxuXHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLTggdGV4dC1zbSBzbTpoLTlcIlxuXHRcdFx0XHRcdFx0XHRcdGlkPVwidGl0bGVcIlxuXHRcdFx0XHRcdFx0XHRcdG5hbWU9XCJ0aXRsZVwiXG5cdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPXt0KCdldmVudFRpdGxlUGxhY2Vob2xkZXInKX1cblx0XHRcdFx0XHRcdFx0XHRyZXF1aXJlZFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtmb3JtVmFsdWVzLnRpdGxlfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMSBzbTpnYXAtMlwiPlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCIgaHRtbEZvcj1cImRlc2NyaXB0aW9uXCI+XG5cdFx0XHRcdFx0XHRcdFx0e3QoJ2Rlc2NyaXB0aW9uJyl9XG5cdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0aWQ9XCJkZXNjcmlwdGlvblwiXG5cdFx0XHRcdFx0XHRcdFx0bmFtZT1cImRlc2NyaXB0aW9uXCJcblx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9e3QoJ2V2ZW50RGVzY3JpcHRpb25QbGFjZWhvbGRlcicpfVxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtmb3JtVmFsdWVzLmRlc2NyaXB0aW9ufVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2lzQWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdGlkPVwiYWxsRGF5XCJcblx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eyhjaGVja2VkKSA9PiBzZXRJc0FsbERheShjaGVja2VkID09PSB0cnVlKX1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiIGh0bWxGb3I9XCJhbGxEYXlcIj5cblx0XHRcdFx0XHRcdFx0XHR7dCgnYWxsRGF5Jyl9XG5cdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC0yIHNtOmdhcC00XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KCdzdGFydERhdGUnKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxEYXRlUGlja2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtdC0xXCJcblx0XHRcdFx0XHRcdFx0XHRcdGNsb3NlT25TZWxlY3Rcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGU9e3N0YXJ0RGF0ZX1cblx0XHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkPXtkaXNhYmxlZERhdGVNYXRjaGVyfVxuXHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZVN0YXJ0RGF0ZUNoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ2VuZERhdGUnKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxEYXRlUGlja2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtdC0xXCJcblx0XHRcdFx0XHRcdFx0XHRcdGNsb3NlT25TZWxlY3Rcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGU9e2VuZERhdGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRkaXNhYmxlZD17ZGlzYWJsZWREYXRlTWF0Y2hlcn1cblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVFbmREYXRlQ2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdHshaXNBbGxEYXkgJiYgKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIgc206Z2FwLTRcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KCdzdGFydFRpbWUnKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0PFRpbWVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibXQtMSBoLTggdGV4dC1zbSBzbTpoLTlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhUaW1lPXtzdGFydENvbnN0cmFpbnRzLm1heH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0bWluVGltZT17c3RhcnRDb25zdHJhaW50cy5taW59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU9XCJzdGFydC10aW1lXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZVN0YXJ0VGltZUNoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGltZUZvcm1hdD17dGltZUZvcm1hdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e3N0YXJ0VGltZX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnZW5kVGltZScpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8VGltZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtdC0xIGgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1heFRpbWU9e2VuZENvbnN0cmFpbnRzLm1heH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0bWluVGltZT17ZW5kQ29uc3RyYWludHMubWlufVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPVwiZW5kLXRpbWVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlRW5kVGltZUNoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGltZUZvcm1hdD17dGltZUZvcm1hdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2VuZFRpbWV9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdCl9XG5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMSBzbTpnYXAtMlwiPlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ2NvbG9yJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMlwiPlxuXHRcdFx0XHRcdFx0XHRcdHtDT0xPUl9PUFRJT05TLm1hcCgoY29sb3IpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYS1sYWJlbD17Y29sb3IubGFiZWx9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YCR7Y29sb3IudmFsdWV9IGgtNiB3LTYgcm91bmRlZC1mdWxsIHNtOmgtOCBzbTp3LThgLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNlbGVjdGVkQ29sb3IgPT09IGNvbG9yLnZhbHVlICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQncmluZy0yIHJpbmctYmxhY2sgcmluZy1vZmZzZXQtMSBzbTpyaW5nLW9mZnNldC0yJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2NvbG9yLnZhbHVlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZXRTZWxlY3RlZENvbG9yKGNvbG9yLnZhbHVlKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cblx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiIGh0bWxGb3I9XCJsb2NhdGlvblwiPlxuXHRcdFx0XHRcdFx0XHRcdHt0KCdsb2NhdGlvbicpfVxuXHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLTggdGV4dC1zbSBzbTpoLTlcIlxuXHRcdFx0XHRcdFx0XHRcdGlkPVwibG9jYXRpb25cIlxuXHRcdFx0XHRcdFx0XHRcdG5hbWU9XCJsb2NhdGlvblwiXG5cdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPXt0KCdldmVudExvY2F0aW9uUGxhY2Vob2xkZXInKX1cblx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17Zm9ybVZhbHVlcy5sb2NhdGlvbn1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHR7LyogUmVjdXJyZW5jZSBTZWN0aW9uICovfVxuXHRcdFx0XHRcdFx0PFJlY3VycmVuY2VFZGl0b3Igb25DaGFuZ2U9e2hhbmRsZVJSdWxlQ2hhbmdlfSB2YWx1ZT17cnJ1bGV9IC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvU2Nyb2xsQXJlYT5cblxuXHRcdFx0XHQ8RGlhbG9nRm9vdGVyIGNsYXNzTmFtZT1cIm10LTQgc2hyaW5rLTAgZmxleCBmbGV4LWNvbC1yZXZlcnNlIGdhcC0yIHNtOmZsZXgtcm93IHNtOmdhcC0wXCI+XG5cdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkICYmIChcblx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIHNtOm1yLWF1dG8gc206dy1hdXRvXCJcblx0XHRcdFx0XHRcdFx0b25DbGljaz17aGFuZGxlRGVsZXRlfVxuXHRcdFx0XHRcdFx0XHRzaXplPVwic21cIlxuXHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImRlc3RydWN0aXZlXCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3QoJ2RlbGV0ZScpfVxuXHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGdhcC0yIHNtOnctYXV0b1wiPlxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4LTEgc206ZmxleC1ub25lXCJcblx0XHRcdFx0XHRcdFx0b25DbGljaz17b25DbG9zZX1cblx0XHRcdFx0XHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3QoJ2NhbmNlbCcpfVxuXHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0XHQ8QnV0dG9uIGNsYXNzTmFtZT1cImZsZXgtMSBzbTpmbGV4LW5vbmVcIiBzaXplPVwic21cIiB0eXBlPVwic3VibWl0XCI+XG5cdFx0XHRcdFx0XHRcdHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ3VwZGF0ZScpIDogdCgnY3JlYXRlJyl9XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9EaWFsb2dGb290ZXI+XG5cdFx0XHQ8L2Zvcm0+XG5cblx0XHRcdHsvKiBSZWN1cnJpbmcgRXZlbnQgRWRpdCBEaWFsb2cgKi99XG5cdFx0XHQ8UmVjdXJyZW5jZUVkaXREaWFsb2dcblx0XHRcdFx0ZXZlbnRUaXRsZT17ZGlhbG9nU3RhdGUuZXZlbnQ/LnRpdGxlIHx8ICcnfVxuXHRcdFx0XHRpc09wZW49e2RpYWxvZ1N0YXRlLmlzT3Blbn1cblx0XHRcdFx0b25DbG9zZT17Y2xvc2VEaWFsb2d9XG5cdFx0XHRcdG9uQ29uZmlybT17aGFuZGxlQ29uZmlybX1cblx0XHRcdFx0b3BlcmF0aW9uVHlwZT17ZGlhbG9nU3RhdGUub3BlcmF0aW9uVHlwZX1cblx0XHRcdC8+XG5cdFx0PC8+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgQ2hlY2tib3hQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWNoZWNrYm94J1xuaW1wb3J0IHsgQ2hlY2tJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gQ2hlY2tib3goe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgQ2hlY2tib3hQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIChcblx0XHQ8Q2hlY2tib3hQcmltaXRpdmUuUm9vdFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J3BlZXIgYm9yZGVyLWlucHV0IGRhcms6YmctaW5wdXQvMzAgZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBkYXJrOmRhdGEtW3N0YXRlPWNoZWNrZWRdOmJnLXByaW1hcnkgZGF0YS1bc3RhdGU9Y2hlY2tlZF06Ym9yZGVyLXByaW1hcnkgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgc2l6ZS00IHNocmluay0wIHJvdW5kZWQtWzRweF0gYm9yZGVyIHNoYWRvdy14cyB0cmFuc2l0aW9uLXNoYWRvdyBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2hlY2tib3hcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxDaGVja2JveFByaW1pdGl2ZS5JbmRpY2F0b3Jcblx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1jdXJyZW50IHRyYW5zaXRpb24tbm9uZVwiXG5cdFx0XHRcdGRhdGEtc2xvdD1cImNoZWNrYm94LWluZGljYXRvclwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxDaGVja0ljb24gY2xhc3NOYW1lPVwic2l6ZS0zLjVcIiAvPlxuXHRcdFx0PC9DaGVja2JveFByaW1pdGl2ZS5JbmRpY2F0b3I+XG5cdFx0PC9DaGVja2JveFByaW1pdGl2ZS5Sb290PlxuXHQpXG59XG5cbmV4cG9ydCB7IENoZWNrYm94IH1cbiIsCiAgICAiaW1wb3J0IHsgUG9wb3ZlckNsb3NlIH0gZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXBvcG92ZXInXG5pbXBvcnQgeyBDYWxlbmRhciBhcyBDYWxlbmRhckljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgTWF0Y2hlciB9IGZyb20gJ3JlYWN0LWRheS1waWNrZXInXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgQ2FsZW5kYXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2FsZW5kYXInXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIERhdGVQaWNrZXJQcm9wcyB7XG5cdGRhdGU6IERhdGUgfCB1bmRlZmluZWRcblx0b25DaGFuZ2U/OiAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4gdm9pZFxuXHRsYWJlbD86IHN0cmluZ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0Y2xvc2VPblNlbGVjdD86IGJvb2xlYW5cblx0ZGlzYWJsZWQ/OiBNYXRjaGVyIHwgTWF0Y2hlcltdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEYXRlUGlja2VyKHtcblx0ZGF0ZSxcblx0Y2xvc2VPblNlbGVjdCxcblx0b25DaGFuZ2UsXG5cdGxhYmVsID0gJ1BpY2sgYSBkYXRlJyxcblx0Y2xhc3NOYW1lLFxuXHRkaXNhYmxlZCxcbn06IERhdGVQaWNrZXJQcm9wcykge1xuXHRjb25zdCBwb3BPdmVyUmVmID0gdXNlUmVmPEhUTUxCdXR0b25FbGVtZW50IHwgbnVsbD4obnVsbClcblx0Y29uc3QgW3NlbGVjdGVkRGF0ZSwgc2V0U2VsZWN0ZWREYXRlXSA9IHVzZVN0YXRlPERhdGUgfCB1bmRlZmluZWQ+KGRhdGUpXG5cblx0Ly8gU3luYyBkYXRlIHN0YXRlIHdpdGggZGF0ZSBwcm9wXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0c2V0U2VsZWN0ZWREYXRlKGRhdGUpXG5cdH0sIFtkYXRlXSlcblxuXHRjb25zdCBoYW5kbGVEYXRlU2VsZWN0ID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcblx0XHRzZXRTZWxlY3RlZERhdGUoZGF0ZSlcblx0XHRpZiAoY2xvc2VPblNlbGVjdCkge1xuXHRcdFx0cG9wT3ZlclJlZi5jdXJyZW50Py5jbGljaygpXG5cdFx0fVxuXHRcdG9uQ2hhbmdlPy4oZGF0ZSlcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG5cdFx0XHQ8UG9wb3Zlcj5cblx0XHRcdFx0PFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0J2RhdGEtW2VtcHR5PXRydWVdOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCB3LWZ1bGwganVzdGlmeS1zdGFydCB0ZXh0LWxlZnQgZm9udC1ub3JtYWwnXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0ZGF0YS1lbXB0eT17IWRhdGV9XG5cdFx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PENhbGVuZGFySWNvbiAvPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRGF0ZSA/IChcblx0XHRcdFx0XHRcdFx0ZGF5anMoc2VsZWN0ZWREYXRlKS5mb3JtYXQoJ01NTSBELCBZWVlZJylcblx0XHRcdFx0XHRcdCkgOiAoXG5cdFx0XHRcdFx0XHRcdDxzcGFuPntsYWJlbH08L3NwYW4+XG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0XHQ8UG9wb3ZlckNvbnRlbnQgYWxpZ249XCJzdGFydFwiIGNsYXNzTmFtZT1cInctYXV0byBwLTBcIj5cblx0XHRcdFx0XHQ8UG9wb3ZlckNsb3NlIHJlZj17cG9wT3ZlclJlZn0gLz5cblx0XHRcdFx0XHQ8Q2FsZW5kYXJcblx0XHRcdFx0XHRcdGNhcHRpb25MYXlvdXQ9XCJkcm9wZG93blwiXG5cdFx0XHRcdFx0XHRkZWZhdWx0TW9udGg9e3NlbGVjdGVkRGF0ZX1cblx0XHRcdFx0XHRcdGRpc2FibGVkPXtkaXNhYmxlZH1cblx0XHRcdFx0XHRcdG1vZGU9XCJzaW5nbGVcIlxuXHRcdFx0XHRcdFx0b25TZWxlY3Q9e2hhbmRsZURhdGVTZWxlY3R9XG5cdFx0XHRcdFx0XHRzZWxlY3RlZD17c2VsZWN0ZWREYXRlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0XHQ8L1BvcG92ZXI+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHtcblx0Q2hldnJvbkRvd25JY29uLFxuXHRDaGV2cm9uTGVmdEljb24sXG5cdENoZXZyb25SaWdodEljb24sXG59IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBEYXlCdXR0b24gfSBmcm9tICdyZWFjdC1kYXktcGlja2VyJ1xuaW1wb3J0IHsgRGF5UGlja2VyLCBnZXREZWZhdWx0Q2xhc3NOYW1lcyB9IGZyb20gJ3JlYWN0LWRheS1waWNrZXInXG5pbXBvcnQgeyBCdXR0b24sIGJ1dHRvblZhcmlhbnRzIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIENhbGVuZGFyKHtcblx0Y2xhc3NOYW1lLFxuXHRjbGFzc05hbWVzLFxuXHRzaG93T3V0c2lkZURheXMgPSB0cnVlLFxuXHRjYXB0aW9uTGF5b3V0ID0gJ2xhYmVsJyxcblx0YnV0dG9uVmFyaWFudCA9ICdnaG9zdCcsXG5cdGZvcm1hdHRlcnMsXG5cdGNvbXBvbmVudHMsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGF5UGlja2VyPiAmIHtcblx0YnV0dG9uVmFyaWFudD86IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBCdXR0b24+Wyd2YXJpYW50J11cbn0pIHtcblx0Y29uc3QgZGVmYXVsdENsYXNzTmFtZXMgPSBnZXREZWZhdWx0Q2xhc3NOYW1lcygpXG5cblx0cmV0dXJuIChcblx0XHQ8RGF5UGlja2VyXG5cdFx0XHRjYXB0aW9uTGF5b3V0PXtjYXB0aW9uTGF5b3V0fVxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2JnLWJhY2tncm91bmQgZ3JvdXAvY2FsZW5kYXIgcC0zIFstLWNlbGwtc2l6ZTotLXNwYWNpbmcoOCldIFtbZGF0YS1zbG90PWNhcmQtY29udGVudF1fJl06YmctdHJhbnNwYXJlbnQgW1tkYXRhLXNsb3Q9cG9wb3Zlci1jb250ZW50XV8mXTpiZy10cmFuc3BhcmVudCcsXG5cdFx0XHRcdFN0cmluZy5yYXdgcnRsOioqOlsucmRwLWJ1dHRvblxcX25leHQ+c3ZnXTpyb3RhdGUtMTgwYCxcblx0XHRcdFx0U3RyaW5nLnJhd2BydGw6Kio6Wy5yZHAtYnV0dG9uXFxfcHJldmlvdXM+c3ZnXTpyb3RhdGUtMTgwYCxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0Y2xhc3NOYW1lcz17e1xuXHRcdFx0XHRyb290OiBjbigndy1maXQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5yb290KSxcblx0XHRcdFx0bW9udGhzOiBjbihcblx0XHRcdFx0XHQnZmxleCBnYXAtNCBmbGV4LWNvbCBtZDpmbGV4LXJvdyByZWxhdGl2ZScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMubW9udGhzXG5cdFx0XHRcdCksXG5cdFx0XHRcdG1vbnRoOiBjbignZmxleCBmbGV4LWNvbCB3LWZ1bGwgZ2FwLTQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5tb250aCksXG5cdFx0XHRcdG5hdjogY24oXG5cdFx0XHRcdFx0J2ZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHctZnVsbCBhYnNvbHV0ZSB0b3AtMCBpbnNldC14LTAganVzdGlmeS1iZXR3ZWVuJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5uYXZcblx0XHRcdFx0KSxcblx0XHRcdFx0YnV0dG9uX3ByZXZpb3VzOiBjbihcblx0XHRcdFx0XHRidXR0b25WYXJpYW50cyh7IHZhcmlhbnQ6IGJ1dHRvblZhcmlhbnQgfSksXG5cdFx0XHRcdFx0J3NpemUtKC0tY2VsbC1zaXplKSBhcmlhLWRpc2FibGVkOm9wYWNpdHktNTAgcC0wIHNlbGVjdC1ub25lJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5idXR0b25fcHJldmlvdXNcblx0XHRcdFx0KSxcblx0XHRcdFx0YnV0dG9uX25leHQ6IGNuKFxuXHRcdFx0XHRcdGJ1dHRvblZhcmlhbnRzKHsgdmFyaWFudDogYnV0dG9uVmFyaWFudCB9KSxcblx0XHRcdFx0XHQnc2l6ZS0oLS1jZWxsLXNpemUpIGFyaWEtZGlzYWJsZWQ6b3BhY2l0eS01MCBwLTAgc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmJ1dHRvbl9uZXh0XG5cdFx0XHRcdCksXG5cdFx0XHRcdG1vbnRoX2NhcHRpb246IGNuKFxuXHRcdFx0XHRcdCdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBoLSgtLWNlbGwtc2l6ZSkgdy1mdWxsIHB4LSgtLWNlbGwtc2l6ZSknLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLm1vbnRoX2NhcHRpb25cblx0XHRcdFx0KSxcblx0XHRcdFx0ZHJvcGRvd25zOiBjbihcblx0XHRcdFx0XHQndy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIHRleHQtc20gZm9udC1tZWRpdW0ganVzdGlmeS1jZW50ZXIgaC0oLS1jZWxsLXNpemUpIGdhcC0xLjUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmRyb3Bkb3duc1xuXHRcdFx0XHQpLFxuXHRcdFx0XHRkcm9wZG93bl9yb290OiBjbihcblx0XHRcdFx0XHQncmVsYXRpdmUgaGFzLWZvY3VzOmJvcmRlci1yaW5nIGJvcmRlciBib3JkZXItaW5wdXQgc2hhZG93LXhzIGhhcy1mb2N1czpyaW5nLXJpbmcvNTAgaGFzLWZvY3VzOnJpbmctWzNweF0gcm91bmRlZC1tZCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25fcm9vdFxuXHRcdFx0XHQpLFxuXHRcdFx0XHRkcm9wZG93bjogY24oXG5cdFx0XHRcdFx0J2Fic29sdXRlIGJnLXBvcG92ZXIgaW5zZXQtMCBvcGFjaXR5LTAnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmRyb3Bkb3duXG5cdFx0XHRcdCksXG5cdFx0XHRcdGNhcHRpb25fbGFiZWw6IGNuKFxuXHRcdFx0XHRcdCdzZWxlY3Qtbm9uZSBmb250LW1lZGl1bScsXG5cdFx0XHRcdFx0Y2FwdGlvbkxheW91dCA9PT0gJ2xhYmVsJ1xuXHRcdFx0XHRcdFx0PyAndGV4dC1zbSdcblx0XHRcdFx0XHRcdDogJ3JvdW5kZWQtbWQgcGwtMiBwci0xIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHRleHQtc20gaC04IFsmPnN2Z106dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIFsmPnN2Z106c2l6ZS0zLjUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmNhcHRpb25fbGFiZWxcblx0XHRcdFx0KSxcblx0XHRcdFx0dGFibGU6ICd3LWZ1bGwgYm9yZGVyLWNvbGxhcHNlJyxcblx0XHRcdFx0d2Vla2RheXM6IGNuKCdmbGV4JywgZGVmYXVsdENsYXNzTmFtZXMud2Vla2RheXMpLFxuXHRcdFx0XHR3ZWVrZGF5OiBjbihcblx0XHRcdFx0XHQndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHJvdW5kZWQtbWQgZmxleC0xIGZvbnQtbm9ybWFsIHRleHQtWzAuOHJlbV0gc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLndlZWtkYXlcblx0XHRcdFx0KSxcblx0XHRcdFx0d2VlazogY24oJ2ZsZXggdy1mdWxsIG10LTInLCBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrKSxcblx0XHRcdFx0d2Vla19udW1iZXJfaGVhZGVyOiBjbihcblx0XHRcdFx0XHQnc2VsZWN0LW5vbmUgdy0oLS1jZWxsLXNpemUpJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrX251bWJlcl9oZWFkZXJcblx0XHRcdFx0KSxcblx0XHRcdFx0d2Vla19udW1iZXI6IGNuKFxuXHRcdFx0XHRcdCd0ZXh0LVswLjhyZW1dIHNlbGVjdC1ub25lIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMud2Vla19udW1iZXJcblx0XHRcdFx0KSxcblx0XHRcdFx0ZGF5OiBjbihcblx0XHRcdFx0XHQncmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBwLTAgdGV4dC1jZW50ZXIgWyY6bGFzdC1jaGlsZFtkYXRhLXNlbGVjdGVkPXRydWVdX2J1dHRvbl06cm91bmRlZC1yLW1kIGdyb3VwL2RheSBhc3BlY3Qtc3F1YXJlIHNlbGVjdC1ub25lJyxcblx0XHRcdFx0XHRwcm9wcy5zaG93V2Vla051bWJlclxuXHRcdFx0XHRcdFx0PyAnWyY6bnRoLWNoaWxkKDIpW2RhdGEtc2VsZWN0ZWQ9dHJ1ZV1fYnV0dG9uXTpyb3VuZGVkLWwtbWQnXG5cdFx0XHRcdFx0XHQ6ICdbJjpmaXJzdC1jaGlsZFtkYXRhLXNlbGVjdGVkPXRydWVdX2J1dHRvbl06cm91bmRlZC1sLW1kJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5kYXlcblx0XHRcdFx0KSxcblx0XHRcdFx0cmFuZ2Vfc3RhcnQ6IGNuKFxuXHRcdFx0XHRcdCdyb3VuZGVkLWwtbWQgYmctYWNjZW50Jyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5yYW5nZV9zdGFydFxuXHRcdFx0XHQpLFxuXHRcdFx0XHRyYW5nZV9taWRkbGU6IGNuKCdyb3VuZGVkLW5vbmUnLCBkZWZhdWx0Q2xhc3NOYW1lcy5yYW5nZV9taWRkbGUpLFxuXHRcdFx0XHRyYW5nZV9lbmQ6IGNuKCdyb3VuZGVkLXItbWQgYmctYWNjZW50JywgZGVmYXVsdENsYXNzTmFtZXMucmFuZ2VfZW5kKSxcblx0XHRcdFx0dG9kYXk6IGNuKFxuXHRcdFx0XHRcdCdiZy1hY2NlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCByb3VuZGVkLW1kIGRhdGEtW3NlbGVjdGVkPXRydWVdOnJvdW5kZWQtbm9uZScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMudG9kYXlcblx0XHRcdFx0KSxcblx0XHRcdFx0b3V0c2lkZTogY24oXG5cdFx0XHRcdFx0J3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBhcmlhLXNlbGVjdGVkOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMub3V0c2lkZVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRkaXNhYmxlZDogY24oXG5cdFx0XHRcdFx0J3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBvcGFjaXR5LTUwJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5kaXNhYmxlZFxuXHRcdFx0XHQpLFxuXHRcdFx0XHRoaWRkZW46IGNuKCdpbnZpc2libGUnLCBkZWZhdWx0Q2xhc3NOYW1lcy5oaWRkZW4pLFxuXHRcdFx0XHQuLi5jbGFzc05hbWVzLFxuXHRcdFx0fX1cblx0XHRcdGNvbXBvbmVudHM9e3tcblx0XHRcdFx0Um9vdDogKHsgY2xhc3NOYW1lLCByb290UmVmLCAuLi5wcm9wcyB9KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihjbGFzc05hbWUpfVxuXHRcdFx0XHRcdFx0XHRkYXRhLXNsb3Q9XCJjYWxlbmRhclwiXG5cdFx0XHRcdFx0XHRcdHJlZj17cm9vdFJlZn1cblx0XHRcdFx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdENoZXZyb246ICh7IGNsYXNzTmFtZSwgb3JpZW50YXRpb24sIC4uLnByb3BzIH0pID0+IHtcblx0XHRcdFx0XHRpZiAob3JpZW50YXRpb24gPT09ICdsZWZ0Jykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PENoZXZyb25MZWZ0SWNvbiBjbGFzc05hbWU9e2NuKCdzaXplLTQnLCBjbGFzc05hbWUpfSB7Li4ucHJvcHN9IC8+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKG9yaWVudGF0aW9uID09PSAncmlnaHQnKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8Q2hldnJvblJpZ2h0SWNvblxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ3NpemUtNCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRcdFx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8Q2hldnJvbkRvd25JY29uIGNsYXNzTmFtZT17Y24oJ3NpemUtNCcsIGNsYXNzTmFtZSl9IHsuLi5wcm9wc30gLz5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdERheUJ1dHRvbjogQ2FsZW5kYXJEYXlCdXR0b24sXG5cdFx0XHRcdFdlZWtOdW1iZXI6ICh7IGNoaWxkcmVuLCAuLi5wcm9wcyB9KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDx0ZCB7Li4ucHJvcHN9PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggc2l6ZS0oLS1jZWxsLXNpemUpIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWNlbnRlclwiPlxuXHRcdFx0XHRcdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSxcblx0XHRcdFx0Li4uY29tcG9uZW50cyxcblx0XHRcdH19XG5cdFx0XHRmb3JtYXR0ZXJzPXt7XG5cdFx0XHRcdGZvcm1hdE1vbnRoRHJvcGRvd246IChkYXRlKSA9PlxuXHRcdFx0XHRcdGRhdGUudG9Mb2NhbGVTdHJpbmcoJ2RlZmF1bHQnLCB7IG1vbnRoOiAnc2hvcnQnIH0pLFxuXHRcdFx0XHQuLi5mb3JtYXR0ZXJzLFxuXHRcdFx0fX1cblx0XHRcdHNob3dPdXRzaWRlRGF5cz17c2hvd091dHNpZGVEYXlzfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FsZW5kYXJEYXlCdXR0b24oe1xuXHRjbGFzc05hbWUsXG5cdGRheSxcblx0bW9kaWZpZXJzLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERheUJ1dHRvbj4pIHtcblx0Y29uc3QgZGVmYXVsdENsYXNzTmFtZXMgPSBnZXREZWZhdWx0Q2xhc3NOYW1lcygpXG5cblx0Y29uc3QgcmVmID0gUmVhY3QudXNlUmVmPEhUTUxCdXR0b25FbGVtZW50PihudWxsKVxuXHRSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChtb2RpZmllcnMuZm9jdXNlZCkge1xuXHRcdFx0cmVmLmN1cnJlbnQ/LmZvY3VzKClcblx0XHR9XG5cdH0sIFttb2RpZmllcnMuZm9jdXNlZF0pXG5cblx0cmV0dXJuIChcblx0XHQ8QnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZGF0YS1bc2VsZWN0ZWQtc2luZ2xlPXRydWVdOmJnLXByaW1hcnkgZGF0YS1bc2VsZWN0ZWQtc2luZ2xlPXRydWVdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhdGEtW3JhbmdlLW1pZGRsZT10cnVlXTpiZy1hY2NlbnQgZGF0YS1bcmFuZ2UtbWlkZGxlPXRydWVdOnRleHQtYWNjZW50LWZvcmVncm91bmQgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06YmctcHJpbWFyeSBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06YmctcHJpbWFyeSBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6Ym9yZGVyLXJpbmcgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6cmluZy1yaW5nLzUwIGRhcms6aG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBmbGV4IGFzcGVjdC1zcXVhcmUgc2l6ZS1hdXRvIHctZnVsbCBtaW4tdy0oLS1jZWxsLXNpemUpIGZsZXgtY29sIGdhcC0xIGxlYWRpbmctbm9uZSBmb250LW5vcm1hbCBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpyZWxhdGl2ZSBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTp6LTEwIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnJpbmctWzNweF0gZGF0YS1bcmFuZ2UtZW5kPXRydWVdOnJvdW5kZWQtbWQgZGF0YS1bcmFuZ2UtZW5kPXRydWVdOnJvdW5kZWQtci1tZCBkYXRhLVtyYW5nZS1taWRkbGU9dHJ1ZV06cm91bmRlZC1ub25lIGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOnJvdW5kZWQtbWQgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06cm91bmRlZC1sLW1kIFsmPnNwYW5dOnRleHQteHMgWyY+c3Bhbl06b3BhY2l0eS03MCcsXG5cdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmRheSxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1kYXk9e2RheS5kYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpfVxuXHRcdFx0ZGF0YS1yYW5nZS1lbmQ9e21vZGlmaWVycy5yYW5nZV9lbmR9XG5cdFx0XHRkYXRhLXJhbmdlLW1pZGRsZT17bW9kaWZpZXJzLnJhbmdlX21pZGRsZX1cblx0XHRcdGRhdGEtcmFuZ2Utc3RhcnQ9e21vZGlmaWVycy5yYW5nZV9zdGFydH1cblx0XHRcdGRhdGEtc2VsZWN0ZWQtc2luZ2xlPXtcblx0XHRcdFx0bW9kaWZpZXJzLnNlbGVjdGVkICYmXG5cdFx0XHRcdCFtb2RpZmllcnMucmFuZ2Vfc3RhcnQgJiZcblx0XHRcdFx0IW1vZGlmaWVycy5yYW5nZV9lbmQgJiZcblx0XHRcdFx0IW1vZGlmaWVycy5yYW5nZV9taWRkbGVcblx0XHRcdH1cblx0XHRcdHJlZj17cmVmfVxuXHRcdFx0c2l6ZT1cImljb25cIlxuXHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7IENhbGVuZGFyLCBDYWxlbmRhckRheUJ1dHRvbiB9XG4iLAogICAgImltcG9ydCAqIGFzIFBvcG92ZXJQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXBvcG92ZXInXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBQb3BvdmVyKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLlJvb3Q+KSB7XG5cdHJldHVybiA8UG9wb3ZlclByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cInBvcG92ZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJUcmlnZ2VyKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLlRyaWdnZXI+KSB7XG5cdHJldHVybiA8UG9wb3ZlclByaW1pdGl2ZS5UcmlnZ2VyIGRhdGEtc2xvdD1cInBvcG92ZXItdHJpZ2dlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gUG9wb3ZlckNvbnRlbnQoe1xuXHRjbGFzc05hbWUsXG5cdGFsaWduID0gJ2NlbnRlcicsXG5cdHNpZGVPZmZzZXQgPSA0LFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuQ29udGVudD4pIHtcblx0cmV0dXJuIChcblx0XHQ8UG9wb3ZlclByaW1pdGl2ZS5Qb3J0YWw+XG5cdFx0XHQ8UG9wb3ZlclByaW1pdGl2ZS5Db250ZW50XG5cdFx0XHRcdGFsaWduPXthbGlnbn1cblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnYmctcG9wb3ZlciB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIgei01MCB3LTcyIG9yaWdpbi0oLS1yYWRpeC1wb3BvdmVyLWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbikgcm91bmRlZC1tZCBib3JkZXIgcC00IHNoYWRvdy1tZCBvdXRsaW5lLWhpZGRlbicsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtc2xvdD1cInBvcG92ZXItY29udGVudFwiXG5cdFx0XHRcdHNpZGVPZmZzZXQ9e3NpZGVPZmZzZXR9XG5cdFx0XHRcdHsuLi5wcm9wc31cblx0XHRcdC8+XG5cdFx0PC9Qb3BvdmVyUHJpbWl0aXZlLlBvcnRhbD5cblx0KVxufVxuXG5mdW5jdGlvbiBQb3BvdmVyQW5jaG9yKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLkFuY2hvcj4pIHtcblx0cmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLkFuY2hvciBkYXRhLXNsb3Q9XCJwb3BvdmVyLWFuY2hvclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZXhwb3J0IHsgUG9wb3ZlciwgUG9wb3ZlclRyaWdnZXIsIFBvcG92ZXJDb250ZW50LCBQb3BvdmVyQW5jaG9yIH1cbiIsCiAgICAiaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gSW5wdXQoeyBjbGFzc05hbWUsIHR5cGUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdpbnB1dCc+KSB7XG5cdHJldHVybiAoXG5cdFx0PGlucHV0XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmlsZTp0ZXh0LWZvcmVncm91bmQgcGxhY2Vob2xkZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHNlbGVjdGlvbjpiZy1wcmltYXJ5IHNlbGVjdGlvbjp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBkYXJrOmJnLWlucHV0LzMwIGJvcmRlci1pbnB1dCBmbGV4IGgtOSB3LWZ1bGwgbWluLXctMCByb3VuZGVkLW1kIGJvcmRlciBiZy10cmFuc3BhcmVudCBweC0zIHB5LTEgdGV4dC1iYXNlIHNoYWRvdy14cyB0cmFuc2l0aW9uLVtjb2xvcixib3gtc2hhZG93XSBvdXRsaW5lLW5vbmUgZmlsZTppbmxpbmUtZmxleCBmaWxlOmgtNyBmaWxlOmJvcmRlci0wIGZpbGU6YmctdHJhbnNwYXJlbnQgZmlsZTp0ZXh0LXNtIGZpbGU6Zm9udC1tZWRpdW0gZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCBtZDp0ZXh0LXNtJyxcblx0XHRcdFx0J2ZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdJyxcblx0XHRcdFx0J2FyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImlucHV0XCJcblx0XHRcdHR5cGU9e3R5cGV9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgeyBJbnB1dCB9XG4iLAogICAgImltcG9ydCAqIGFzIExhYmVsUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1sYWJlbCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIExhYmVsKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIExhYmVsUHJpbWl0aXZlLlJvb3Q+KSB7XG5cdHJldHVybiAoXG5cdFx0PExhYmVsUHJpbWl0aXZlLlJvb3Rcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXNtIGxlYWRpbmctbm9uZSBmb250LW1lZGl1bSBzZWxlY3Qtbm9uZSBncm91cC1kYXRhLVtkaXNhYmxlZD10cnVlXTpwb2ludGVyLWV2ZW50cy1ub25lIGdyb3VwLWRhdGEtW2Rpc2FibGVkPXRydWVdOm9wYWNpdHktNTAgcGVlci1kaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgcGVlci1kaXNhYmxlZDpvcGFjaXR5LTUwJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwibGFiZWxcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHsgTGFiZWwgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBTY3JvbGxBcmVhUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zY3JvbGwtYXJlYSdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBTY3JvbGxBcmVhUHJvcHNcblx0ZXh0ZW5kcyBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PiB7XG5cdHZpZXdQb3J0UHJvcHM/OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cbn1cblxuZnVuY3Rpb24gU2Nyb2xsQXJlYSh7XG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdHZpZXdQb3J0UHJvcHMsXG5cdC4uLnByb3BzXG59OiBTY3JvbGxBcmVhUHJvcHMpIHtcblx0cmV0dXJuIChcblx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdyZWxhdGl2ZScsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PFNjcm9sbEFyZWFQcmltaXRpdmUuVmlld3BvcnRcblx0XHRcdFx0ey4uLnZpZXdQb3J0UHJvcHN9XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2ZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIHNpemUtZnVsbCByb3VuZGVkLVtpbmhlcml0XSB0cmFuc2l0aW9uLVtjb2xvcixib3gtc2hhZG93XSBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGZvY3VzLXZpc2libGU6b3V0bGluZS0xJyxcblx0XHRcdFx0XHR2aWV3UG9ydFByb3BzPy5jbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtdmlld3BvcnRcIlxuXHRcdFx0PlxuXHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHQ8L1Njcm9sbEFyZWFQcmltaXRpdmUuVmlld3BvcnQ+XG5cdFx0XHQ8U2Nyb2xsQmFyIC8+XG5cdFx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5Db3JuZXIgLz5cblx0XHQ8L1Njcm9sbEFyZWFQcmltaXRpdmUuUm9vdD5cblx0KVxufVxuXG5mdW5jdGlvbiBTY3JvbGxCYXIoe1xuXHRjbGFzc05hbWUsXG5cdG9yaWVudGF0aW9uID0gJ3ZlcnRpY2FsJyxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlNjcm9sbEFyZWFTY3JvbGxiYXI+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhclxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggdG91Y2gtbm9uZSBwLXB4IHRyYW5zaXRpb24tY29sb3JzIHNlbGVjdC1ub25lJyxcblx0XHRcdFx0b3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcgJiZcblx0XHRcdFx0XHQnaC1mdWxsIHctMi41IGJvcmRlci1sIGJvcmRlci1sLXRyYW5zcGFyZW50Jyxcblx0XHRcdFx0b3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyAmJlxuXHRcdFx0XHRcdCdoLTIuNSBmbGV4LWNvbCBib3JkZXItdCBib3JkZXItdC10cmFuc3BhcmVudCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhLXNjcm9sbGJhclwiXG5cdFx0XHRvcmllbnRhdGlvbj17b3JpZW50YXRpb259XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVRodW1iXG5cdFx0XHRcdGNsYXNzTmFtZT1cImJnLWJvcmRlciByZWxhdGl2ZSBmbGV4LTEgcm91bmRlZC1mdWxsXCJcblx0XHRcdFx0ZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtdGh1bWJcIlxuXHRcdFx0Lz5cblx0XHQ8L1Njcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhcj5cblx0KVxufVxuXG5leHBvcnQgeyBTY3JvbGxBcmVhLCBTY3JvbGxCYXIgfVxuIiwKICAgICJpbXBvcnQgeyBDbG9jayB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2lucHV0J1xuaW1wb3J0IHtcblx0UG9wb3Zlcixcblx0UG9wb3ZlckNvbnRlbnQsXG5cdFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyB1c2VBdXRvY29tcGxldGVUaW1lcGlja2VyIH0gZnJvbSAnQC9ob29rcy91c2UtYXV0b2NvbXBsZXRlLXRpbWVwaWNrZXInXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBUaW1lRm9ybWF0IH0gZnJvbSAnQC90eXBlcydcblxuY29uc3QgaGFuZGxlV2hlZWwgPSAoZTogUmVhY3QuV2hlZWxFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcblx0Ly8gUHJldmVudCBldmVudCBmcm9tIGJ1YmJsaW5nIHRvIHByZXZlbnQgUG9wb3ZlciBmcm9tIGNsb3Npbmdcblx0ZS5zdG9wUHJvcGFnYXRpb24oKVxufVxuXG5pbnRlcmZhY2UgVGltZVBpY2tlclByb3BzIHtcblx0dmFsdWU6IHN0cmluZ1xuXHRvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcblx0bWluVGltZT86IHN0cmluZ1xuXHRtYXhUaW1lPzogc3RyaW5nXG5cdHRpbWVGb3JtYXQ/OiBUaW1lRm9ybWF0XG5cdHBsYWNlaG9sZGVyPzogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRkaXNhYmxlZD86IGJvb2xlYW5cblx0bmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVGltZVBpY2tlcih7XG5cdHZhbHVlLFxuXHRvbkNoYW5nZSxcblx0bWluVGltZSA9ICcwMDowMCcsXG5cdG1heFRpbWUgPSAnMjM6NDUnLFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRwbGFjZWhvbGRlciA9ICdTZWxlY3QgdGltZS4uLicsXG5cdGNsYXNzTmFtZSxcblx0ZGlzYWJsZWQgPSBmYWxzZSxcblx0bmFtZSxcbn06IFRpbWVQaWNrZXJQcm9wcykge1xuXHRjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblx0Y29uc3QgW3NlYXJjaCwgc2V0U2VhcmNoXSA9IHVzZVN0YXRlKCcnKVxuXHRjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuXHRjb25zdCB0cmlnZ2VyUmVmID0gdXNlUmVmPEhUTUxCdXR0b25FbGVtZW50PihudWxsKVxuXHRjb25zdCBbdHJpZ2dlcldpZHRoLCBzZXRUcmlnZ2VyV2lkdGhdID0gdXNlU3RhdGU8bnVtYmVyPigwKVxuXG5cdGNvbnN0IHsgdGltZU9wdGlvbnMsIGZvcm1hdFRpbWUgfSA9IHVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXIoe1xuXHRcdHRpbWVGb3JtYXQsXG5cdFx0bWluVGltZSxcblx0XHRtYXhUaW1lLFxuXHR9KVxuXG5cdC8vIEZpbHRlciB0aW1lIG9wdGlvbnMgYmFzZWQgb24gc2VhcmNoXG5cdGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IHRpbWVPcHRpb25zLmZpbHRlcigodGltZSkgPT4ge1xuXHRcdGNvbnN0IGZvcm1hdHRlZFRpbWUgPSBmb3JtYXRUaW1lKHRpbWUpXG5cdFx0cmV0dXJuIGZvcm1hdHRlZFRpbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSlcblx0fSlcblxuXHRjb25zdCBoYW5kbGVTZWxlY3QgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0b25DaGFuZ2UodGltZSlcblx0XHRzZXRPcGVuKGZhbHNlKVxuXHRcdHNldFNlYXJjaCgnJylcblx0fVxuXG5cdC8vIE1lYXN1cmUgdHJpZ2dlciB3aWR0aCBhbmQgZm9jdXMgaW5wdXQgd2hlbiBwb3BvdmVyIG9wZW5zXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKG9wZW4pIHtcblx0XHRcdGlmICh0cmlnZ2VyUmVmLmN1cnJlbnQpIHtcblx0XHRcdFx0c2V0VHJpZ2dlcldpZHRoKHRyaWdnZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aClcblx0XHRcdH1cblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRpbnB1dFJlZi5jdXJyZW50Py5mb2N1cygpXG5cdFx0XHR9LCAwKVxuXHRcdH1cblx0fSwgW29wZW5dKVxuXG5cdGNvbnN0IGN1cnJlbnRUaW1lU3RyaW5nID0gdmFsdWUgPyBmb3JtYXRUaW1lKHZhbHVlKSA6IHBsYWNlaG9sZGVyXG5cblx0cmV0dXJuIChcblx0XHQ8UG9wb3ZlciBvbk9wZW5DaGFuZ2U9e3NldE9wZW59IG9wZW49e29wZW59PlxuXHRcdFx0PFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRhcmlhLWNvbnRyb2xzPVwidGltZS1waWNrZXItbGlzdGJveFwiXG5cdFx0XHRcdFx0YXJpYS1leHBhbmRlZD17b3Blbn1cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKCd3LWZ1bGwganVzdGlmeS1zdGFydCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B0aW1lLXBpY2tlci0ke25hbWV9YH1cblx0XHRcdFx0XHRkaXNhYmxlZD17ZGlzYWJsZWR9XG5cdFx0XHRcdFx0cmVmPXt0cmlnZ2VyUmVmfVxuXHRcdFx0XHRcdHJvbGU9XCJjb21ib2JveFwiXG5cdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PENsb2NrIGNsYXNzTmFtZT1cIm1yLTIgaC00IHctNFwiIC8+XG5cdFx0XHRcdFx0e2N1cnJlbnRUaW1lU3RyaW5nfVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvUG9wb3ZlclRyaWdnZXI+XG5cdFx0XHQ8UG9wb3ZlckNvbnRlbnRcblx0XHRcdFx0YWxpZ249XCJzdGFydFwiXG5cdFx0XHRcdGNsYXNzTmFtZT1cInAtMFwiXG5cdFx0XHRcdHN0eWxlPXt7IHdpZHRoOiB0cmlnZ2VyV2lkdGggfX1cblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJwLTIgYm9yZGVyLWJcIj5cblx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOFwiXG5cdFx0XHRcdFx0XHRvbkNoYW5nZT17KGUpID0+IHNldFNlYXJjaChlLnRhcmdldC52YWx1ZSl9XG5cdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj1cIlNlYXJjaCB0aW1lLi4uXCJcblx0XHRcdFx0XHRcdHJlZj17aW5wdXRSZWZ9XG5cdFx0XHRcdFx0XHR2YWx1ZT17c2VhcmNofVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8U2Nyb2xsQXJlYSBjbGFzc05hbWU9XCJoLVsyMDBweF1cIiBvbldoZWVsPXtoYW5kbGVXaGVlbH0+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJwLTFcIj5cblx0XHRcdFx0XHRcdHtmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09PSAwID8gKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInB5LTYgdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0XHROL0Fcblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQpIDogKFxuXHRcdFx0XHRcdFx0XHRmaWx0ZXJlZE9wdGlvbnMubWFwKCh0aW1lKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgdGltZVN0cmluZyA9IGZvcm1hdFRpbWUodGltZSlcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpc1NlbGVjdGVkID0gdGltZSA9PT0gdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdyZWxhdGl2ZSBmbGV4IHctZnVsbCBjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSBpdGVtcy1jZW50ZXIgcm91bmRlZC1zbSBweC0yIHB5LTEuNSB0ZXh0LXNtIG91dGxpbmUtbm9uZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXNTZWxlY3RlZCAmJiAnYmctYWNjZW50IHRleHQtYWNjZW50LWZvcmVncm91bmQnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17dGltZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0KHRpbWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3RpbWVTdHJpbmd9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L1Njcm9sbEFyZWE+XG5cdFx0XHQ8L1BvcG92ZXJDb250ZW50PlxuXHRcdDwvUG9wb3Zlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFRpbWVGb3JtYXQgfSBmcm9tICdAL3R5cGVzJ1xuXG5pbnRlcmZhY2UgVXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlclByb3BzIHtcblx0dGltZUZvcm1hdD86IFRpbWVGb3JtYXRcblx0bWluVGltZT86IHN0cmluZ1xuXHRtYXhUaW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VBdXRvY29tcGxldGVUaW1lcGlja2VyKHtcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0bWluVGltZSA9ICcwMDowMCcsXG5cdG1heFRpbWUgPSAnMjM6NDUnLFxufTogVXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlclByb3BzKSB7XG5cdC8vIEdlbmVyYXRlIHRpbWUgb3B0aW9ucyAoMTUtbWludXRlIGludGVydmFscykgd2l0aGluIG1pbi9tYXggcmFuZ2Vcblx0Y29uc3QgdGltZU9wdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRjb25zdCB0aW1lczogc3RyaW5nW10gPSBbXVxuXHRcdGNvbnN0IFttaW5Ib3VyLCBtaW5NaW51dGVdID0gbWluVGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cdFx0Y29uc3QgW21heEhvdXIsIG1heE1pbnV0ZV0gPSBtYXhUaW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblxuXHRcdGNvbnN0IG1pblRvdGFsTWludXRlcyA9IG1pbkhvdXIgKiA2MCArIG1pbk1pbnV0ZVxuXHRcdGNvbnN0IG1heFRvdGFsTWludXRlcyA9IG1heEhvdXIgKiA2MCArIG1heE1pbnV0ZVxuXG5cdFx0Zm9yIChcblx0XHRcdGxldCB0b3RhbE1pbnV0ZXMgPSBtaW5Ub3RhbE1pbnV0ZXM7XG5cdFx0XHR0b3RhbE1pbnV0ZXMgPD0gbWF4VG90YWxNaW51dGVzO1xuXHRcdFx0dG90YWxNaW51dGVzICs9IDE1XG5cdFx0KSB7XG5cdFx0XHRjb25zdCBob3VycyA9IE1hdGguZmxvb3IodG90YWxNaW51dGVzIC8gNjApXG5cdFx0XHRjb25zdCBtaW51dGVzID0gdG90YWxNaW51dGVzICUgNjBcblxuXHRcdFx0Y29uc3QgdGltZVN0cmluZyA9IGAke2hvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06JHttaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gXG5cdFx0XHR0aW1lcy5wdXNoKHRpbWVTdHJpbmcpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRpbWVzXG5cdH0sIFttaW5UaW1lLCBtYXhUaW1lXSlcblxuXHRjb25zdCBmb3JtYXRUaW1lID0gKHRpbWU6IHN0cmluZykgPT4ge1xuXHRcdGNvbnN0IFtob3VycywgbWludXRlc10gPSB0aW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblx0XHRjb25zdCBwZXJpb2QgPSBob3VycyA+PSAxMiA/ICdQTScgOiAnQU0nXG5cdFx0Y29uc3QgZGlzcGxheUhvdXJzID0gaG91cnMgPT09IDAgPyAxMiA6IGhvdXJzID4gMTIgPyBob3VycyAtIDEyIDogaG91cnNcblxuXHRcdGlmICh0aW1lRm9ybWF0ID09PSAnMjQtaG91cicpIHtcblx0XHRcdHJldHVybiBgJHtob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7bWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YFxuXHRcdH1cblxuXHRcdHJldHVybiBgJHtkaXNwbGF5SG91cnN9OiR7bWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9ICR7cGVyaW9kfWBcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0dGltZU9wdGlvbnMsXG5cdFx0Zm9ybWF0VGltZSxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IFdFRUtfREFZU19OVU1CRVJfTUFQIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHNwZWNpZmljIGRhdGUgaXMgYSBidXNpbmVzcyBkYXkuXG4gKlxuICogQHBhcmFtIGRhdGUgVGhlIGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSBidXNpbmVzc0hvdXJzIFRoZSBidXNpbmVzcyBob3VycyBjb25maWd1cmF0aW9uIChzaW5nbGUgb3IgYXJyYXkpXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBkYXRlIGlzIGEgYnVzaW5lc3MgZGF5LCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQnVzaW5lc3NEYXkgPSAoXG5cdGRhdGU6IGRheWpzLkRheWpzLFxuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuKTogYm9vbGVhbiA9PiB7XG5cdGlmICghYnVzaW5lc3NIb3Vycykge1xuXHRcdHJldHVybiB0cnVlXG5cdH1cblxuXHRsZXQgaGFzTWF0Y2ggPSBmYWxzZVxuXHRwcm9jZXNzQnVzaW5lc3NIb3VycyhidXNpbmVzc0hvdXJzLCB7XG5cdFx0ZGF0ZSxcblx0XHRvbk1hdGNoOiAoKSA9PiB7XG5cdFx0XHRoYXNNYXRjaCA9IHRydWVcblx0XHR9LFxuXHR9KVxuXG5cdHJldHVybiBoYXNNYXRjaFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElzQnVzaW5lc3NIb3VyT3B0aW9ucyB7XG5cdGRhdGU6IGRheWpzLkRheWpzXG5cdGhvdXI/OiBudW1iZXJcblx0bWludXRlPzogbnVtYmVyXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgc3BlY2lmaWMgaG91ciBvbiBhIHNwZWNpZmljIGRhdGUgaXMgd2l0aGluIGJ1c2luZXNzIGhvdXJzLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBjaGVja2luZyBidXNpbmVzcyBob3Vyc1xuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdGltZSBpcyB3aXRoaW4gYnVzaW5lc3MgaG91cnMsIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgY29uc3QgaXNCdXNpbmVzc0hvdXIgPSAoe1xuXHRkYXRlLFxuXHRob3VyLFxuXHRtaW51dGUgPSAwLFxuXHRidXNpbmVzc0hvdXJzLFxufTogSXNCdXNpbmVzc0hvdXJPcHRpb25zKTogYm9vbGVhbiA9PiB7XG5cdC8vIElmIGJ1c2luZXNzIGhvdXJzIGFyZSBub3QgY29uZmlndXJlZCwgY29uc2lkZXIgZXZlcnl0aGluZyBhcyBcImJ1c2luZXNzIGhvdXJzXCJcblx0aWYgKCFidXNpbmVzc0hvdXJzKSB7XG5cdFx0cmV0dXJuIHRydWVcblx0fVxuXG5cdC8vIElmIGhvdXIgaXMgbm90IHByb3ZpZGVkLCB3ZSBhc3N1bWUgdGhlIHVzZXIgb25seSBjYXJlcyBhYm91dCB0aGUgZGF5XG5cdGlmIChob3VyID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gaXNCdXNpbmVzc0RheShkYXRlLCBidXNpbmVzc0hvdXJzKVxuXHR9XG5cblx0bGV0IGlzSW5CdXNpbmVzc0hvdXIgPSBmYWxzZVxuXHRjb25zdCBjdXJyZW50TWludXRlcyA9IGhvdXIgKiA2MCArIG1pbnV0ZVxuXG5cdHByb2Nlc3NCdXNpbmVzc0hvdXJzKGJ1c2luZXNzSG91cnMsIHtcblx0XHRkYXRlLFxuXHRcdG9uTWF0Y2g6IChjb25maWcpID0+IHtcblx0XHRcdC8vIENoZWNrIHRpbWUgYWdhaW5zdCB0aGlzIHNwZWNpZmljIGNvbmZpZ1xuXHRcdFx0Ly8gc3RhcnRUaW1lIGFuZCBlbmRUaW1lIGFyZSBudW1iZXJzICgwLTI0KVxuXHRcdFx0Y29uc3Qgc3RhcnRIID0gY29uZmlnLnN0YXJ0VGltZSA/PyA5XG5cdFx0XHRjb25zdCBlbmRIID0gY29uZmlnLmVuZFRpbWUgPz8gMTdcblxuXHRcdFx0Y29uc3Qgc3RhcnRNaW51dGVzID0gc3RhcnRIICogNjBcblx0XHRcdGNvbnN0IGVuZE1pbnV0ZXMgPSBlbmRIICogNjBcblxuXHRcdFx0aWYgKGN1cnJlbnRNaW51dGVzID49IHN0YXJ0TWludXRlcyAmJiBjdXJyZW50TWludXRlcyA8IGVuZE1pbnV0ZXMpIHtcblx0XHRcdFx0aXNJbkJ1c2luZXNzSG91ciA9IHRydWVcblx0XHRcdH1cblx0XHR9LFxuXHR9KVxuXG5cdHJldHVybiBpc0luQnVzaW5lc3NIb3VyXG59XG5cbi8qKlxuICogSGVscGVyIHRvIHByb2Nlc3MgYSBidXNpbmVzcyBob3VycyBjb25maWd1cmF0aW9uIGFuZCB1cGRhdGUgdGhlIHJhbmdlLlxuICovXG5leHBvcnQgY29uc3QgcHJvY2Vzc0J1c2luZXNzSG91cnMgPSAoXG5cdGJoOiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdIHwgdW5kZWZpbmVkLFxuXHRvcHRpb25zOiB7XG5cdFx0ZGF0ZT86IGRheWpzLkRheWpzXG5cdFx0b25NYXRjaDogKGNvbmZpZzogQnVzaW5lc3NIb3VycykgPT4gdm9pZFxuXHR9XG4pID0+IHtcblx0Y29uc3QgeyBkYXRlLCBvbk1hdGNoIH0gPSBvcHRpb25zXG5cdGlmICghYmgpIHJldHVyblxuXG5cdGNvbnN0IGNvbmZpZ3MgPSBBcnJheS5pc0FycmF5KGJoKSA/IGJoIDogW2JoXVxuXG5cdGZvciAoY29uc3QgY29uZmlnIG9mIGNvbmZpZ3MpIHtcblx0XHRpZiAoZGF0ZSAmJiBjb25maWcuZGF5c09mV2Vlaykge1xuXHRcdFx0Y29uc3QgZGF5T2ZXZWVrID0gZGF0ZS5kYXkoKVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRjb25maWcuZGF5c09mV2Vlay5zb21lKChkKSA9PiBXRUVLX0RBWVNfTlVNQkVSX01BUFtkXSA9PT0gZGF5T2ZXZWVrKVxuXHRcdFx0KSB7XG5cdFx0XHRcdG9uTWF0Y2goY29uZmlnKVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvbk1hdGNoKGNvbmZpZylcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdXNpbmVzc0hvdXJzUmFuZ2Uge1xuXHRtaW5TdGFydDogbnVtYmVyXG5cdG1heEVuZDogbnVtYmVyXG5cdGhhc0J1c2luZXNzSG91cnM6IGJvb2xlYW5cbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSB1bmlvbiBvZiBidXNpbmVzcyBob3VycyByYW5nZXMgYWNyb3NzIG11bHRpcGxlIGRhdGVzIGFuZC9vciByZXNvdXJjZSBjb25maWd1cmF0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IGNhbGN1bGF0ZUJ1c2luZXNzSG91cnNSYW5nZSA9IChvcHRpb25zOiB7XG5cdGFsbERhdGVzOiBkYXlqcy5EYXlqc1tdXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHJlc291cmNlQnVzaW5lc3NIb3Vycz86IChCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdKVtdXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzPzogYm9vbGVhblxufSk6IEJ1c2luZXNzSG91cnNSYW5nZSA9PiB7XG5cdGNvbnN0IHtcblx0XHRhbGxEYXRlcyxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3VycyA9IFtdLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHR9ID0gb3B0aW9uc1xuXG5cdGxldCBtaW5TdGFydCA9IDI0XG5cdGxldCBtYXhFbmQgPSAwXG5cdGxldCBoYXNCdXNpbmVzc0hvdXJzID0gZmFsc2VcblxuXHRjb25zdCBvbk1hdGNoID0gKGNvbmZpZzogQnVzaW5lc3NIb3VycykgPT4ge1xuXHRcdGhhc0J1c2luZXNzSG91cnMgPSB0cnVlXG5cdFx0bWluU3RhcnQgPSBNYXRoLm1pbihtaW5TdGFydCwgY29uZmlnLnN0YXJ0VGltZSA/PyA5KVxuXHRcdG1heEVuZCA9IE1hdGgubWF4KG1heEVuZCwgY29uZmlnLmVuZFRpbWUgPz8gMTcpXG5cdH1cblxuXHQvLyBQcm9jZXNzIGdsb2JhbCBhbmQgcmVzb3VyY2UgYnVzaW5lc3MgaG91cnMgZm9yIGVhY2ggZGF0ZVxuXHRmb3IgKGNvbnN0IGRhdGUgb2YgYWxsRGF0ZXMpIHtcblx0XHRwcm9jZXNzQnVzaW5lc3NIb3VycyhidXNpbmVzc0hvdXJzLCB7IGRhdGUsIG9uTWF0Y2ggfSlcblx0XHRmb3IgKGNvbnN0IHJiaCBvZiByZXNvdXJjZUJ1c2luZXNzSG91cnMpIHtcblx0XHRcdHByb2Nlc3NCdXNpbmVzc0hvdXJzKHJiaCwgeyBkYXRlLCBvbk1hdGNoIH0pXG5cdFx0fVxuXHR9XG5cblx0Ly8gRmFsbGJhY2sgbG9naWMgaWYgbm8gYnVzaW5lc3MgaG91cnMgZm91bmQgZm9yIHNwZWNpZmljIGRhdGVzXG5cdGlmICghaGFzQnVzaW5lc3NIb3VycyAmJiBoaWRlTm9uQnVzaW5lc3NIb3Vycykge1xuXHRcdHByb2Nlc3NCdXNpbmVzc0hvdXJzKGJ1c2luZXNzSG91cnMsIHsgb25NYXRjaCB9KVxuXHRcdGZvciAoY29uc3QgcmJoIG9mIHJlc291cmNlQnVzaW5lc3NIb3Vycykge1xuXHRcdFx0cHJvY2Vzc0J1c2luZXNzSG91cnMocmJoLCB7IG9uTWF0Y2ggfSlcblx0XHR9XG5cblx0XHQvLyBGaW5hbCBmYWxsYmFjayB0byBkZWZhdWx0IDktMTcgaWYgc3RpbGwgbm90aGluZ1xuXHRcdGlmICghaGFzQnVzaW5lc3NIb3Vycykge1xuXHRcdFx0bWluU3RhcnQgPSA5XG5cdFx0XHRtYXhFbmQgPSAxN1xuXHRcdFx0aGFzQnVzaW5lc3NIb3VycyA9IHRydWVcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBtaW5TdGFydCwgbWF4RW5kLCBoYXNCdXNpbmVzc0hvdXJzIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3VycydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuZXhwb3J0IGNvbnN0IGJ1aWxkRGF0ZVRpbWUgPSAoXG5cdGRhdGU6IERhdGUsXG5cdHRpbWU6IHN0cmluZyxcblx0aXNBbGxEYXk6IGJvb2xlYW5cbik6IGRheWpzLkRheWpzID0+IHtcblx0Y29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRjb25zdCBiYXNlID0gZGF5anMoZGF0ZSkuaG91cihob3VycykubWludXRlKG1pbnV0ZXMpXG5cdHJldHVybiBpc0FsbERheSA/IGJhc2UuaG91cigwKS5taW51dGUoMCkgOiBiYXNlXG59XG5cbmV4cG9ydCBjb25zdCBidWlsZEVuZERhdGVUaW1lID0gKFxuXHRkYXRlOiBEYXRlLFxuXHR0aW1lOiBzdHJpbmcsXG5cdGlzQWxsRGF5OiBib29sZWFuXG4pOiBkYXlqcy5EYXlqcyA9PiB7XG5cdGNvbnN0IFtob3VycywgbWludXRlc10gPSB0aW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblx0Y29uc3QgYmFzZSA9IGRheWpzKGRhdGUpLmhvdXIoaG91cnMpLm1pbnV0ZShtaW51dGVzKVxuXHRyZXR1cm4gaXNBbGxEYXkgPyBiYXNlLmhvdXIoMjMpLm1pbnV0ZSg1OSkgOiBiYXNlXG59XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lQ29uc3RyYWludHMgPSAoXG5cdGRhdGU6IERhdGUsXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG4pID0+IHtcblx0aWYgKCFidXNpbmVzc0hvdXJzKSByZXR1cm4geyBtaW46ICcwMDowMCcsIG1heDogJzIzOjU5JyB9XG5cblx0Y29uc3QgZGF5anNEYXRlID0gZGF5anMoZGF0ZSlcblxuXHRjb25zdCB7IG1pblN0YXJ0LCBtYXhFbmQsIGhhc0J1c2luZXNzSG91cnMgfSA9IGNhbGN1bGF0ZUJ1c2luZXNzSG91cnNSYW5nZSh7XG5cdFx0YWxsRGF0ZXM6IFtkYXlqc0RhdGVdLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnM6IGZhbHNlLFxuXHR9KVxuXG5cdGlmICghaGFzQnVzaW5lc3NIb3Vycykge1xuXHRcdHJldHVybiB7IG1pbjogJzAwOjAwJywgbWF4OiAnMjM6NTknIH1cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bWluOiBgJHttaW5TdGFydC50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OjAwYCxcblx0XHRtYXg6IGAkeyhtYXhFbmQgLSAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OjQ1YCxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFdlZWtkYXkgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgeyBDYXJkLCBDYXJkQ29udGVudCwgQ2FyZEhlYWRlciwgQ2FyZFRpdGxlIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NhcmQnXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9jaGVja2JveCdcbmltcG9ydCB7IERhdGVQaWNrZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGF0ZS1waWNrZXInXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9pbnB1dCdcbmltcG9ydCB7IExhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2xhYmVsJ1xuaW1wb3J0IHtcblx0U2VsZWN0LFxuXHRTZWxlY3RDb250ZW50LFxuXHRTZWxlY3RJdGVtLFxuXHRTZWxlY3RUcmlnZ2VyLFxuXHRTZWxlY3RWYWx1ZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3NlbGVjdCdcbmltcG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5jb25zdCBGUkVRX01BUCA9IHtcblx0REFJTFk6IFJSdWxlLkRBSUxZLFxuXHRXRUVLTFk6IFJSdWxlLldFRUtMWSxcblx0TU9OVEhMWTogUlJ1bGUuTU9OVEhMWSxcblx0WUVBUkxZOiBSUnVsZS5ZRUFSTFksXG59IGFzIGNvbnN0XG5jb25zdCBGUkVRX1RPX1NUUiA9IE9iamVjdC5mcm9tRW50cmllcyhcblx0T2JqZWN0LmVudHJpZXMoRlJFUV9NQVApLm1hcCgoW2ssIHZdKSA9PiBbdiwga10pXG4pIGFzIFJlY29yZDxudW1iZXIsIHN0cmluZz5cbmNvbnN0IFdFRUtEQVlTID0gW1xuXHRSUnVsZS5TVSxcblx0UlJ1bGUuTU8sXG5cdFJSdWxlLlRVLFxuXHRSUnVsZS5XRSxcblx0UlJ1bGUuVEgsXG5cdFJSdWxlLkZSLFxuXHRSUnVsZS5TQSxcbl1cbmNvbnN0IERBWV9LRVlTID0gWydzdW4nLCAnbW9uJywgJ3R1ZScsICd3ZWQnLCAndGh1JywgJ2ZyaScsICdzYXQnXVxuY29uc3QgcGFyc2VOdW0gPSAodjogc3RyaW5nKSA9PiBNYXRoLm1heCgxLCBOdW1iZXIucGFyc2VJbnQodiwgMTApIHx8IDEpXG5cbmNvbnN0IGdldERlc2NyaXB0aW9uID0gKFxuXHRvcHRzOiBSUnVsZU9wdGlvbnMgfCBudWxsLFxuXHR0OiAoazogc3RyaW5nKSA9PiBzdHJpbmdcbikgPT4ge1xuXHRpZiAoIW9wdHMpIHtcblx0XHRyZXR1cm4gdCgnY3VzdG9tUmVjdXJyZW5jZScpXG5cdH1cblx0dHJ5IHtcblx0XHRjb25zdCB0ZXh0ID0gbmV3IFJSdWxlKG9wdHMpLnRvVGV4dCgpXG5cdFx0cmV0dXJuIHRleHQgJiYgIXRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZXJyb3InKVxuXHRcdFx0PyB0ZXh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGV4dC5zbGljZSgxKVxuXHRcdFx0OiB0KCdjdXN0b21SZWN1cnJlbmNlJylcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuXHR9XG59XG5cbmludGVyZmFjZSBQcm9wcyB7XG5cdHZhbHVlPzogUlJ1bGVPcHRpb25zIHwgbnVsbFxuXHRvbkNoYW5nZTogKHY6IFJSdWxlT3B0aW9ucyB8IG51bGwpID0+IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IFJlY3VycmVuY2VFZGl0b3I6IFJlYWN0LkZDPFByb3BzPiA9ICh7IHZhbHVlLCBvbkNoYW5nZSB9KSA9PiB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGN0eCkgPT4gKHsgdDogY3R4LnQgfSkpXG5cdGNvbnN0IFtzaG93LCBzZXRTaG93XSA9IHVzZVN0YXRlKCEhdmFsdWUpXG5cdGNvbnN0IFtvcHRzLCBzZXRPcHRzXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KCgpID0+IHZhbHVlIHx8IG51bGwpXG5cblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IERBWV9LRVlTLm1hcCgoaywgaSkgPT4gKHsgdmFsdWU6IFdFRUtEQVlTW2ldLCBsYWJlbDogdChrKSB9KSksXG5cdFx0W3RdXG5cdClcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdHNldFNob3coISF2YWx1ZSlcblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHNldE9wdHModmFsdWUpXG5cdFx0fVxuXHR9LCBbdmFsdWVdKVxuXG5cdGNvbnN0IHVwZGF0ZSA9ICh1OiBQYXJ0aWFsPFJSdWxlT3B0aW9ucz4pID0+IHtcblx0XHRpZiAoIW9wdHMpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRjb25zdCBuZXh0ID0geyAuLi5vcHRzLCAuLi51IH1cblx0XHRzZXRPcHRzKG5leHQpXG5cdFx0b25DaGFuZ2Uoc2hvdyA/IG5leHQgOiBudWxsKVxuXHR9XG5cblx0Y29uc3QgdG9nZ2xlID0gKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcblx0XHRzZXRTaG93KGNoZWNrZWQpXG5cdFx0aWYgKCFjaGVja2VkKSB7XG5cdFx0XHRvbkNoYW5nZShudWxsKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGlmIChvcHRzKSB7XG5cdFx0XHRvbkNoYW5nZShvcHRzKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGNvbnN0IGRlZiA9IHsgZnJlcTogUlJ1bGUuREFJTFksIGludGVydmFsOiAxIH0gYXMgUlJ1bGVPcHRpb25zXG5cdFx0c2V0T3B0cyhkZWYpXG5cdFx0b25DaGFuZ2UoZGVmKVxuXHR9XG5cblx0Y29uc3QgdG9nZ2xlRGF5ID0gKGk6IG51bWJlcikgPT4ge1xuXHRcdGNvbnN0IGN1cnIgPSAob3B0cz8uYnl3ZWVrZGF5IGFzIFdlZWtkYXlbXSkgfHwgW11cblx0XHRjb25zdCBkYXkgPSBXRUVLREFZU1tpXVxuXHRcdGNvbnN0IG5leHQgPSBjdXJyLmluY2x1ZGVzKGRheSlcblx0XHRcdD8gY3Vyci5maWx0ZXIoKGQpID0+IGQgIT09IGRheSlcblx0XHRcdDogWy4uLmN1cnIsIGRheV1cblx0XHR1cGRhdGUoeyBieXdlZWtkYXk6IG5leHQubGVuZ3RoID8gbmV4dCA6IHVuZGVmaW5lZCB9KVxuXHR9XG5cblx0Y29uc3Qgc2V0RW5kVHlwZSA9ICh0eXBlOiAnbmV2ZXInIHwgJ2NvdW50JyB8ICd1bnRpbCcpID0+IHtcblx0XHRjb25zdCB1OiBQYXJ0aWFsPFJSdWxlT3B0aW9ucz4gPSB7IGNvdW50OiB1bmRlZmluZWQsIHVudGlsOiB1bmRlZmluZWQgfVxuXHRcdGlmICh0eXBlID09PSAnY291bnQnKSB7XG5cdFx0XHR1LmNvdW50ID0gb3B0cz8uY291bnQgfHwgMVxuXHRcdH1cblx0XHRpZiAodHlwZSA9PT0gJ3VudGlsJykge1xuXHRcdFx0dS51bnRpbCA9IG9wdHM/LnVudGlsIHx8IGRheWpzKCkuYWRkKDEsICdtb250aCcpLmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXHRcdH1cblx0XHR1cGRhdGUodSlcblx0fVxuXG5cdGNvbnN0IGVuZFR5cGUgPSBvcHRzPy51bnRpbCA/ICd1bnRpbCcgOiBvcHRzPy5jb3VudCA/ICdjb3VudCcgOiAnbmV2ZXInXG5cdGNvbnN0IGZyZXEgPSBGUkVRX1RPX1NUUltvcHRzPy5mcmVxID8/IFJSdWxlLkRBSUxZXSB8fCAnREFJTFknXG5cdGNvbnN0IGJ5d2Vla2RheSA9IEFycmF5LmlzQXJyYXkob3B0cz8uYnl3ZWVrZGF5KVxuXHRcdD8gb3B0cy5ieXdlZWtkYXlcblx0XHQ6IG9wdHM/LmJ5d2Vla2RheVxuXHRcdFx0PyBbb3B0cy5ieXdlZWtkYXldXG5cdFx0XHQ6IFtdXG5cblx0cmV0dXJuIChcblx0XHQ8Q2FyZCBkYXRhLXRlc3RpZD1cInJlY3VycmVuY2UtZWRpdG9yXCI+XG5cdFx0XHQ8Q2FyZEhlYWRlciBjbGFzc05hbWU9XCJwYi0zXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRjaGVja2VkPXtzaG93fVxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ0b2dnbGUtcmVjdXJyZW5jZVwiXG5cdFx0XHRcdFx0XHRpZD1cInJlY3VycmluZ1wiXG5cdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9e3RvZ2dsZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDxDYXJkVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXBlYXQnKX08L0NhcmRUaXRsZT5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdHtzaG93ICYmIHZhbHVlICYmIChcblx0XHRcdFx0XHQ8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0e2dldERlc2NyaXB0aW9uKHZhbHVlLCB0KX1cblx0XHRcdFx0XHQ8L3A+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L0NhcmRIZWFkZXI+XG5cblx0XHRcdHtzaG93ICYmIChcblx0XHRcdFx0PENhcmRDb250ZW50IGNsYXNzTmFtZT1cInB0LTBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNFwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC00XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwiZnJlcXVlbmN5XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7dCgncmVwZWF0cycpfVxuXHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PFNlbGVjdFxuXHRcdFx0XHRcdFx0XHRcdFx0b25WYWx1ZUNoYW5nZT17KGYpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7IGZyZXE6IEZSRVFfTUFQW2YgYXMga2V5b2YgdHlwZW9mIEZSRVFfTUFQXSB9KVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2ZyZXF9XG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PFNlbGVjdFRyaWdnZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJmcmVxdWVuY3ktc2VsZWN0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJmcmVxdWVuY3lcIlxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0VmFsdWUgLz5cblx0XHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0VHJpZ2dlcj5cblx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RDb250ZW50PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7T2JqZWN0LmtleXMoRlJFUV9NQVApLm1hcCgoZikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RJdGVtIGtleT17Zn0gdmFsdWU9e2Z9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoZi50b0xvd2VyQ2FzZSgpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdEl0ZW0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9TZWxlY3RDb250ZW50PlxuXHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9XCJpbnRlcnZhbFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e3QoJ2V2ZXJ5Jyl9XG5cdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRpZD1cImludGVydmFsXCJcblx0XHRcdFx0XHRcdFx0XHRcdG1pbj1cIjFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhlKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGUoeyBpbnRlcnZhbDogcGFyc2VOdW0oZS50YXJnZXQudmFsdWUpIH0pXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwibnVtYmVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtvcHRzPy5pbnRlcnZhbCB8fCAxfVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdHtvcHRzPy5mcmVxID09PSBSUnVsZS5XRUVLTFkgJiYgKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ3JlcGVhdE9uJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0xIG10LTFcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHt3ZWVrRGF5cy5tYXAoKGQsIGkpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTFcIiBrZXk9e2QubGFiZWx9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17Ynl3ZWVrZGF5LmluY2x1ZGVzKGQudmFsdWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9e2BkYXktJHtpfWB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eygpID0+IHRvZ2dsZURheShpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC14cyBjdXJzb3ItcG9pbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRodG1sRm9yPXtgZGF5LSR7aX1gfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtkLmxhYmVsfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KX1cblxuXHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIj57dCgnZW5kcycpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yIG10LTFcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2VuZFR5cGUgPT09ICduZXZlcid9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwibmV2ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eygpID0+IHNldEVuZFR5cGUoJ25ldmVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwibmV2ZXJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ25ldmVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17ZW5kVHlwZSA9PT0gJ2NvdW50J31cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJhZnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gc2V0RW5kVHlwZSgnY291bnQnKX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9XCJhZnRlclwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dCgnYWZ0ZXInKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHR7ZW5kVHlwZSA9PT0gJ2NvdW50JyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtNiB3LTE2IHRleHQteHNcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiY291bnQtaW5wdXRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1pbj1cIjFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZSkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7IGNvdW50OiBwYXJzZU51bShlLnRhcmdldC52YWx1ZSkgfSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cIm51bWJlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e29wdHM/LmNvdW50IHx8IDF9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdvY2N1cnJlbmNlcycpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2VuZFR5cGUgPT09ICd1bnRpbCd9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwib25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eygpID0+IHNldEVuZFR5cGUoJ3VudGlsJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwib25cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ29uJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0e2VuZFR5cGUgPT09ICd1bnRpbCcgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8RGF0ZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtNlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZT17b3B0cz8udW50aWx9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhkKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW50aWw6IGQgPyBkYXlqcyhkKS5lbmRPZignZGF5JykudG9EYXRlKCkgOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvQ2FyZENvbnRlbnQ+XG5cdFx0XHQpfVxuXHRcdDwvQ2FyZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDYXJkKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQndGV4dC1jYXJkLWZvcmVncm91bmQgZmxleCBmbGV4LWNvbCBnYXAtNiByb3VuZGVkLXhsIGJvcmRlciBzaGFkb3ctc20nLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRIZWFkZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdAY29udGFpbmVyL2NhcmQtaGVhZGVyIGdyaWQgYXV0by1yb3dzLW1pbiBncmlkLXJvd3MtW2F1dG9fYXV0b10gaXRlbXMtc3RhcnQgZ2FwLTEuNSBwLTQgcGItMCBoYXMtZGF0YS1bc2xvdD1jYXJkLWFjdGlvbl06Z3JpZC1jb2xzLVsxZnJfYXV0b10nLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWhlYWRlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkVGl0bGUoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2xlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtdGl0bGVcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZERlc2NyaXB0aW9uKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1zbScsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWRlc2NyaXB0aW9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRBY3Rpb24oeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdjb2wtc3RhcnQtMiByb3ctc3Bhbi0yIHJvdy1zdGFydC0xIHNlbGYtc3RhcnQganVzdGlmeS1zZWxmLWVuZCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtYWN0aW9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRDb250ZW50KHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdwLTQgcHQtMCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWNvbnRlbnRcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZEZvb3Rlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBpdGVtcy1jZW50ZXIgcHgtNiBbLmJvcmRlci10XTpwdC02JywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtZm9vdGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7XG5cdENhcmQsXG5cdENhcmRIZWFkZXIsXG5cdENhcmRGb290ZXIsXG5cdENhcmRUaXRsZSxcblx0Q2FyZEFjdGlvbixcblx0Q2FyZERlc2NyaXB0aW9uLFxuXHRDYXJkQ29udGVudCxcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgU2VsZWN0UHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zZWxlY3QnXG5pbXBvcnQgeyBDaGVja0ljb24sIENoZXZyb25Eb3duSWNvbiwgQ2hldnJvblVwSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFNlbGVjdCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlJvb3Q+KSB7XG5cdHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwic2VsZWN0XCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RHcm91cCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkdyb3VwPikge1xuXHRyZXR1cm4gPFNlbGVjdFByaW1pdGl2ZS5Hcm91cCBkYXRhLXNsb3Q9XCJzZWxlY3QtZ3JvdXBcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdFZhbHVlKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuVmFsdWU+KSB7XG5cdHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLlZhbHVlIGRhdGEtc2xvdD1cInNlbGVjdC12YWx1ZVwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0VHJpZ2dlcih7XG5cdGNsYXNzTmFtZSxcblx0c2l6ZSA9ICdkZWZhdWx0Jyxcblx0Y2hpbGRyZW4sXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlRyaWdnZXI+ICYge1xuXHRzaXplPzogJ3NtJyB8ICdkZWZhdWx0J1xufSkge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuVHJpZ2dlclxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XCJib3JkZXItaW5wdXQgZGF0YS1bcGxhY2Vob2xkZXJdOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBbJl9zdmc6bm90KFtjbGFzcyo9J3RleHQtJ10pXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgZGFyazpiZy1pbnB1dC8zMCBkYXJrOmhvdmVyOmJnLWlucHV0LzUwIGZsZXggdy1maXQgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiByb3VuZGVkLW1kIGJvcmRlciBiZy10cmFuc3BhcmVudCBweC0zIHB5LTIgdGV4dC1zbSB3aGl0ZXNwYWNlLW5vd3JhcCBzaGFkb3cteHMgdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCBkYXRhLVtzaXplPWRlZmF1bHRdOmgtOSBkYXRhLVtzaXplPXNtXTpoLTggKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06bGluZS1jbGFtcC0xICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmZsZXggKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06aXRlbXMtY2VudGVyICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmdhcC0yIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNFwiLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNpemU9e3NpemV9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3QtdHJpZ2dlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5JY29uIGFzQ2hpbGQ+XG5cdFx0XHRcdDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPVwic2l6ZS00IG9wYWNpdHktNTBcIiAvPlxuXHRcdFx0PC9TZWxlY3RQcmltaXRpdmUuSWNvbj5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5UcmlnZ2VyPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdENvbnRlbnQoe1xuXHRjbGFzc05hbWUsXG5cdGNoaWxkcmVuLFxuXHRwb3NpdGlvbiA9ICdwb3BwZXInLFxuXHRhbGlnbiA9ICdjZW50ZXInLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5Db250ZW50Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuUG9ydGFsPlxuXHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5Db250ZW50XG5cdFx0XHRcdGFsaWduPXthbGlnbn1cblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnYmctcG9wb3ZlciB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIgcmVsYXRpdmUgei01MCBtYXgtaC0oLS1yYWRpeC1zZWxlY3QtY29udGVudC1hdmFpbGFibGUtaGVpZ2h0KSBtaW4tdy1bOHJlbV0gb3JpZ2luLSgtLXJhZGl4LXNlbGVjdC1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pIG92ZXJmbG93LXgtaGlkZGVuIG92ZXJmbG93LXktYXV0byByb3VuZGVkLW1kIGJvcmRlciBzaGFkb3ctbWQnLFxuXHRcdFx0XHRcdHBvc2l0aW9uID09PSAncG9wcGVyJyAmJlxuXHRcdFx0XHRcdFx0J2RhdGEtW3NpZGU9Ym90dG9tXTp0cmFuc2xhdGUteS0xIGRhdGEtW3NpZGU9bGVmdF06LXRyYW5zbGF0ZS14LTEgZGF0YS1bc2lkZT1yaWdodF06dHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXRvcF06LXRyYW5zbGF0ZS15LTEnLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3QtY29udGVudFwiXG5cdFx0XHRcdHBvc2l0aW9uPXtwb3NpdGlvbn1cblx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0PlxuXHRcdFx0XHQ8U2VsZWN0U2Nyb2xsVXBCdXR0b24gLz5cblx0XHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5WaWV3cG9ydFxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQncC0xJyxcblx0XHRcdFx0XHRcdHBvc2l0aW9uID09PSAncG9wcGVyJyAmJlxuXHRcdFx0XHRcdFx0XHQnaC1bdmFyKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItaGVpZ2h0KV0gdy1mdWxsIG1pbi13LVt2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci13aWR0aCldIHNjcm9sbC1teS0xJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdDwvU2VsZWN0UHJpbWl0aXZlLlZpZXdwb3J0PlxuXHRcdFx0XHQ8U2VsZWN0U2Nyb2xsRG93bkJ1dHRvbiAvPlxuXHRcdFx0PC9TZWxlY3RQcmltaXRpdmUuQ29udGVudD5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5Qb3J0YWw+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0TGFiZWwoe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkxhYmVsPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuTGFiZWxcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBweC0yIHB5LTEuNSB0ZXh0LXhzJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1sYWJlbFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RJdGVtKHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuSXRlbT4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLkl0ZW1cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFwiZm9jdXM6YmctYWNjZW50IGZvY3VzOnRleHQtYWNjZW50LWZvcmVncm91bmQgWyZfc3ZnOm5vdChbY2xhc3MqPSd0ZXh0LSddKV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHJlbGF0aXZlIGZsZXggdy1mdWxsIGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLXNtIHB5LTEuNSBwci04IHBsLTIgdGV4dC1zbSBvdXRsaW5lLWhpZGRlbiBzZWxlY3Qtbm9uZSBkYXRhLVtkaXNhYmxlZF06cG9pbnRlci1ldmVudHMtbm9uZSBkYXRhLVtkaXNhYmxlZF06b3BhY2l0eS01MCBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTQgKjpbc3Bhbl06bGFzdDpmbGV4ICo6W3NwYW5dOmxhc3Q6aXRlbXMtY2VudGVyICo6W3NwYW5dOmxhc3Q6Z2FwLTJcIixcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LWl0ZW1cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTIgZmxleCBzaXplLTMuNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cblx0XHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5JdGVtSW5kaWNhdG9yPlxuXHRcdFx0XHRcdDxDaGVja0ljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cblx0XHRcdFx0PC9TZWxlY3RQcmltaXRpdmUuSXRlbUluZGljYXRvcj5cblx0XHRcdDwvc3Bhbj5cblx0XHRcdDxTZWxlY3RQcmltaXRpdmUuSXRlbVRleHQ+e2NoaWxkcmVufTwvU2VsZWN0UHJpbWl0aXZlLkl0ZW1UZXh0PlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLkl0ZW0+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0U2VwYXJhdG9yKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TZXBhcmF0b3I+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5TZXBhcmF0b3Jcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2JnLWJvcmRlciBwb2ludGVyLWV2ZW50cy1ub25lIC1teC0xIG15LTEgaC1weCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3Qtc2VwYXJhdG9yXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNjcm9sbFVwQnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvbj4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1zY3JvbGwtdXAtYnV0dG9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8Q2hldnJvblVwSWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNjcm9sbERvd25CdXR0b24oe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlNjcm9sbERvd25CdXR0b24+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1zY3JvbGwtZG93bi1idXR0b25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uPlxuXHQpXG59XG5cbmV4cG9ydCB7XG5cdFNlbGVjdCxcblx0U2VsZWN0Q29udGVudCxcblx0U2VsZWN0R3JvdXAsXG5cdFNlbGVjdEl0ZW0sXG5cdFNlbGVjdExhYmVsLFxuXHRTZWxlY3RTY3JvbGxEb3duQnV0dG9uLFxuXHRTZWxlY3RTY3JvbGxVcEJ1dHRvbixcblx0U2VsZWN0U2VwYXJhdG9yLFxuXHRTZWxlY3RUcmlnZ2VyLFxuXHRTZWxlY3RWYWx1ZSxcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMob25Db21wbGV0ZT86ICgpID0+IHZvaWQpIHtcblx0Y29uc3QgeyB1cGRhdGVSZWN1cnJpbmdFdmVudCwgZGVsZXRlUmVjdXJyaW5nRXZlbnQgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudDogY29udGV4dC51cGRhdGVSZWN1cnJpbmdFdmVudCxcblx0XHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50OiBjb250ZXh0LmRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdH0pKVxuXG5cdGNvbnN0IFtkaWFsb2dTdGF0ZSwgc2V0RGlhbG9nU3RhdGVdID0gdXNlU3RhdGU8e1xuXHRcdGlzT3BlbjogYm9vbGVhblxuXHRcdG9wZXJhdGlvblR5cGU6ICdlZGl0JyB8ICdkZWxldGUnXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdFx0dXBkYXRlcz86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cblx0XHRvbkNvbmZpcm0/OiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHZvaWRcblx0fT4oe1xuXHRcdGlzT3BlbjogZmFsc2UsXG5cdFx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnLFxuXHRcdGV2ZW50OiBudWxsLFxuXHR9KVxuXG5cdGNvbnN0IG9wZW5FZGl0RGlhbG9nID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50LCB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG5cdFx0XHRzZXREaWFsb2dTdGF0ZSh7XG5cdFx0XHRcdGlzT3BlbjogdHJ1ZSxcblx0XHRcdFx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnLFxuXHRcdFx0XHRldmVudCxcblx0XHRcdFx0dXBkYXRlcyxcblx0XHRcdFx0b25Db25maXJtOiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcblx0XHRcdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudChldmVudCwgdXBkYXRlcywge1xuXHRcdFx0XHRcdFx0c2NvcGUsXG5cdFx0XHRcdFx0XHRldmVudERhdGU6IGV2ZW50LnN0YXJ0LFxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0sXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W3VwZGF0ZVJlY3VycmluZ0V2ZW50XVxuXHQpXG5cblx0Y29uc3Qgb3BlbkRlbGV0ZURpYWxvZyA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0c2V0RGlhbG9nU3RhdGUoe1xuXHRcdFx0XHRpc09wZW46IHRydWUsXG5cdFx0XHRcdG9wZXJhdGlvblR5cGU6ICdkZWxldGUnLFxuXHRcdFx0XHRldmVudCxcblx0XHRcdFx0b25Db25maXJtOiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcblx0XHRcdFx0XHRkZWxldGVSZWN1cnJpbmdFdmVudChldmVudCwge1xuXHRcdFx0XHRcdFx0c2NvcGUsXG5cdFx0XHRcdFx0XHRldmVudERhdGU6IGV2ZW50LnN0YXJ0LFxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0sXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W2RlbGV0ZVJlY3VycmluZ0V2ZW50XVxuXHQpXG5cblx0Y29uc3QgY2xvc2VEaWFsb2cgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c2V0RGlhbG9nU3RhdGUoe1xuXHRcdFx0aXNPcGVuOiBmYWxzZSxcblx0XHRcdG9wZXJhdGlvblR5cGU6ICdlZGl0Jyxcblx0XHRcdGV2ZW50OiBudWxsLFxuXHRcdH0pXG5cdH0sIFtdKVxuXG5cdGNvbnN0IGhhbmRsZUNvbmZpcm0gPSB1c2VDYWxsYmFjayhcblx0XHQoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcblx0XHRcdGlmIChkaWFsb2dTdGF0ZS5vbkNvbmZpcm0pIHtcblx0XHRcdFx0ZGlhbG9nU3RhdGUub25Db25maXJtKHNjb3BlKVxuXHRcdFx0fVxuXHRcdFx0Y2xvc2VEaWFsb2coKVxuXHRcdFx0Ly8gQ2FsbCBvbkNvbXBsZXRlIHRvIGNsb3NlIHRoZSBwYXJlbnQgZm9ybVxuXHRcdFx0b25Db21wbGV0ZT8uKClcblx0XHR9LFxuXHRcdFtkaWFsb2dTdGF0ZSwgY2xvc2VEaWFsb2csIG9uQ29tcGxldGVdXG5cdClcblxuXHRyZXR1cm4ge1xuXHRcdGRpYWxvZ1N0YXRlLFxuXHRcdG9wZW5FZGl0RGlhbG9nLFxuXHRcdG9wZW5EZWxldGVEaWFsb2csXG5cdFx0Y2xvc2VEaWFsb2csXG5cdFx0aGFuZGxlQ29uZmlybSxcblx0fVxufVxuIiwKICAgICJpbXBvcnQge1xuXHREaWFsb2csXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0Rlc2NyaXB0aW9uLFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBFdmVudEZvcm0gfSBmcm9tICcuL2V2ZW50LWZvcm0nXG5cbmV4cG9ydCBjb25zdCBFdmVudEZvcm1EaWFsb2cgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHR0LFxuXHRcdHNlbGVjdGVkRXZlbnQsXG5cdFx0aXNFdmVudEZvcm1PcGVuLFxuXHRcdGNsb3NlRXZlbnRGb3JtLFxuXHRcdGFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50LFxuXHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoe1xuXHRcdHQ6IGNvbnRleHQudCxcblx0XHRzZWxlY3RlZEV2ZW50OiBjb250ZXh0LnNlbGVjdGVkRXZlbnQsXG5cdFx0aXNFdmVudEZvcm1PcGVuOiBjb250ZXh0LmlzRXZlbnRGb3JtT3Blbixcblx0XHRjbG9zZUV2ZW50Rm9ybTogY29udGV4dC5jbG9zZUV2ZW50Rm9ybSxcblx0XHRhZGRFdmVudDogY29udGV4dC5hZGRFdmVudCxcblx0XHR1cGRhdGVFdmVudDogY29udGV4dC51cGRhdGVFdmVudCxcblx0XHRkZWxldGVFdmVudDogY29udGV4dC5kZWxldGVFdmVudCxcblx0XHRyZW5kZXJFdmVudEZvcm06IGNvbnRleHQucmVuZGVyRXZlbnRGb3JtLFxuXHR9KSlcblxuXHRjb25zdCBoYW5kbGVPblVwZGF0ZSA9IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdHVwZGF0ZUV2ZW50KGV2ZW50LmlkLCBldmVudClcblx0fVxuXG5cdGNvbnN0IGhhbmRsZU9uRGVsZXRlID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0ZGVsZXRlRXZlbnQoZXZlbnQuaWQpXG5cdH1cblxuXHRjb25zdCBldmVudEZvcm1Qcm9wcyA9IHtcblx0XHRvcGVuOiBpc0V2ZW50Rm9ybU9wZW4sXG5cdFx0b25DbG9zZTogY2xvc2VFdmVudEZvcm0sXG5cdFx0c2VsZWN0ZWRFdmVudCxcblx0XHRvbkFkZDogYWRkRXZlbnQsXG5cdFx0b25VcGRhdGU6IGhhbmRsZU9uVXBkYXRlLFxuXHRcdG9uRGVsZXRlOiBoYW5kbGVPbkRlbGV0ZSxcblx0fVxuXG5cdGlmIChyZW5kZXJFdmVudEZvcm0pIHtcblx0XHRyZXR1cm4gcmVuZGVyRXZlbnRGb3JtKGV2ZW50Rm9ybVByb3BzKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17Y2xvc2VFdmVudEZvcm19IG9wZW49e2lzRXZlbnRGb3JtT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGgtWzkwdmhdIHctWzkwdnddIG1heC13LVs1MDBweF0gcC00IHNtOnAtNiBvdmVyZmxvdy1oaWRkZW4gZ2FwLTBcIj5cblx0XHRcdFx0PERpYWxvZ0hlYWRlciBjbGFzc05hbWU9XCJtYi0yIHNtOm1iLTQgc2hyaW5rLTBcIj5cblx0XHRcdFx0XHQ8RGlhbG9nVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1iYXNlIHNtOnRleHQtbGdcIj5cblx0XHRcdFx0XHRcdHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ2VkaXRFdmVudCcpIDogdCgnY3JlYXRlRXZlbnQnKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdDxEaWFsb2dEZXNjcmlwdGlvbiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cblx0XHRcdFx0XHRcdHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ2VkaXRFdmVudERldGFpbHMnKSA6IHQoJ2FkZE5ld0V2ZW50Jyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dEZXNjcmlwdGlvbj5cblx0XHRcdFx0PC9EaWFsb2dIZWFkZXI+XG5cblx0XHRcdFx0PEV2ZW50Rm9ybSB7Li4uZXZlbnRGb3JtUHJvcHN9IC8+XG5cdFx0XHQ8L0RpYWxvZ0NvbnRlbnQ+XG5cdFx0PC9EaWFsb2c+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ2FsZW5kYXIgYXMgQ2FsZW5kYXJJY29uLCBEb3dubG9hZCwgTWVudSwgUGx1cyB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGRvd25sb2FkSUNhbGVuZGFyIH0gZnJvbSAnQC9saWIvdXRpbHMvZXhwb3J0LWljYWwnXG5pbXBvcnQgVGl0bGVDb250ZW50IGZyb20gJy4vdGl0bGUtY29udGVudCdcbmltcG9ydCBWaWV3Q29udHJvbHMgZnJvbSAnLi92aWV3LWNvbnRyb2xzJ1xuXG5pbnRlcmZhY2UgSGVhZGVyUHJvcHMge1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgSGVhZGVyOiBSZWFjdC5GQzxIZWFkZXJQcm9wcz4gPSAoeyBjbGFzc05hbWUgPSAnJyB9KSA9PiB7XG5cdGNvbnN0IHtcblx0XHR2aWV3LFxuXHRcdHNldFZpZXcsXG5cdFx0bmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kLFxuXHRcdHRvZGF5LFxuXHRcdG9wZW5FdmVudEZvcm0sXG5cdFx0aGVhZGVyQ29tcG9uZW50LFxuXHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRyYXdFdmVudHMsXG5cdFx0dCxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjdHgpID0+ICh7XG5cdFx0dmlldzogY3R4LnZpZXcsXG5cdFx0c2V0VmlldzogY3R4LnNldFZpZXcsXG5cdFx0bmV4dFBlcmlvZDogY3R4Lm5leHRQZXJpb2QsXG5cdFx0cHJldlBlcmlvZDogY3R4LnByZXZQZXJpb2QsXG5cdFx0dG9kYXk6IGN0eC50b2RheSxcblx0XHRvcGVuRXZlbnRGb3JtOiBjdHgub3BlbkV2ZW50Rm9ybSxcblx0XHRoZWFkZXJDb21wb25lbnQ6IGN0eC5oZWFkZXJDb21wb25lbnQsXG5cdFx0aGVhZGVyQ2xhc3NOYW1lOiBjdHguaGVhZGVyQ2xhc3NOYW1lLFxuXHRcdHJhd0V2ZW50czogY3R4LnJhd0V2ZW50cyxcblx0XHR0OiBjdHgudCxcblx0fSkpXG5cblx0Y29uc3QgW21vYmlsZU1lbnVPcGVuLCBzZXRNb2JpbGVNZW51T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblxuXHRjb25zdCBjbG9zZU1vYmlsZU1lbnUgPSAoKSA9PiBzZXRNb2JpbGVNZW51T3BlbihmYWxzZSlcblxuXHRjb25zdCBoYW5kbGVFeHBvcnQgPSAoKSA9PiB7XG5cdFx0Y29uc3QgZmlsZW5hbWUgPSBgaWxhbXktY2FsZW5kYXItJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXX0uaWNzYFxuXHRcdGRvd25sb2FkSUNhbGVuZGFyKHJhd0V2ZW50cywgZmlsZW5hbWUsICdpbGFteSBDYWxlbmRhcicpXG5cdFx0Y2xvc2VNb2JpbGVNZW51KClcblx0fVxuXG5cdGNvbnN0IE5ld0V2ZW50QnV0dG9uID0gKCkgPT4gKFxuXHRcdDxCdXR0b25cblx0XHRcdGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCJcblx0XHRcdG9uQ2xpY2s9eygpID0+IG9wZW5FdmVudEZvcm0oKX1cblx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHR2YXJpYW50PVwiZGVmYXVsdFwiXG5cdFx0PlxuXHRcdFx0PFBsdXMgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJoaWRkZW4gQDR4bDppbmxpbmVcIj57dCgnbmV3Jyl9PC9zcGFuPlxuXHRcdDwvQnV0dG9uPlxuXHQpXG5cblx0Y29uc3QgRXhwb3J0QnV0dG9uID0gKHsgZnVsbFdpZHRoID0gZmFsc2UgfTogeyBmdWxsV2lkdGg/OiBib29sZWFuIH0pID0+IChcblx0XHQ8QnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9e2NuKCdmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMScsIGZ1bGxXaWR0aCAmJiAndy1mdWxsIGdhcC0yJyl9XG5cdFx0XHRvbkNsaWNrPXtoYW5kbGVFeHBvcnR9XG5cdFx0XHRzaXplPVwic21cIlxuXHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdD5cblx0XHRcdDxEb3dubG9hZCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdHtmdWxsV2lkdGggPyAoXG5cdFx0XHRcdGAke3QoJ2V4cG9ydCcpfSBDYWxlbmRhciAoLmljcylgXG5cdFx0XHQpIDogKFxuXHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJoaWRkZW4gQDR4bC9iYXNlLWhlYWRlcjppbmxpbmVcIj57dCgnZXhwb3J0Jyl9PC9zcGFuPlxuXHRcdFx0KX1cblx0XHQ8L0J1dHRvbj5cblx0KVxuXG5cdGlmIChoZWFkZXJDb21wb25lbnQpIHtcblx0XHRyZXR1cm4gaGVhZGVyQ29tcG9uZW50XG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cIkBjb250YWluZXIvYmFzZS1oZWFkZXIgdy1mdWxsXCJcblx0XHRcdGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItaGVhZGVyXCJcblx0XHQ+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2ZsZXgganVzdGlmeS1jZW50ZXIgQDJ4bC9iYXNlLWhlYWRlcjpqdXN0aWZ5LWJldHdlZW4gZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtMicsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lLFxuXHRcdFx0XHRcdGhlYWRlckNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMSBAMnhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktc3RhcnRcIj5cblx0XHRcdFx0XHQ8Q2FsZW5kYXJJY29uIGNsYXNzTmFtZT1cImgtNSB3LTVcIiAvPlxuXHRcdFx0XHRcdDxUaXRsZUNvbnRlbnQgLz5cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBqdXN0aWZ5LXN0YXJ0IEB4bC9iYXNlLWhlYWRlcjpqdXN0aWZ5LWNlbnRlciBnYXAtMSBANHhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktZW5kIG92ZXJmbG93LXgtYXV0b1wiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIEBtZC9iYXNlLWhlYWRlcjpmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0IGdhcC0xXCI+XG5cdFx0XHRcdFx0XHQ8Vmlld0NvbnRyb2xzXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImp1c3RpZnktZW5kXCJcblx0XHRcdFx0XHRcdFx0Y3VycmVudFZpZXc9e3ZpZXd9XG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtzZXRWaWV3fVxuXHRcdFx0XHRcdFx0XHRvbk5leHQ9e25leHRQZXJpb2R9XG5cdFx0XHRcdFx0XHRcdG9uUHJldmlvdXM9e3ByZXZQZXJpb2R9XG5cdFx0XHRcdFx0XHRcdG9uVG9kYXk9e3RvZGF5fVxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZGVmYXVsdFwiXG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PE5ld0V2ZW50QnV0dG9uIC8+XG5cdFx0XHRcdFx0XHQ8RXhwb3J0QnV0dG9uIC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGdhcC0xIEBtZC9iYXNlLWhlYWRlcjpoaWRkZW5cIj5cblx0XHRcdFx0XHRcdDxOZXdFdmVudEJ1dHRvbiAvPlxuXHRcdFx0XHRcdFx0PFBvcG92ZXIgb25PcGVuQ2hhbmdlPXtzZXRNb2JpbGVNZW51T3Blbn0gb3Blbj17bW9iaWxlTWVudU9wZW59PlxuXHRcdFx0XHRcdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uIHNpemU9XCJzbVwiIHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TWVudSBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdFx0PC9Qb3BvdmVyVHJpZ2dlcj5cblx0XHRcdFx0XHRcdFx0PFBvcG92ZXJDb250ZW50IGFsaWduPVwiZW5kXCIgY2xhc3NOYW1lPVwidy1bMjQwcHhdIHAtMlwiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Vmlld0NvbnRyb2xzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRWaWV3PXt2aWV3fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17KHYpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzZXRWaWV3KHYpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VNb2JpbGVNZW51KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25OZXh0PXsoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bmV4dFBlcmlvZCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VNb2JpbGVNZW51KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25QcmV2aW91cz17KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXZQZXJpb2QoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsb3NlTW9iaWxlTWVudSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uVG9kYXk9eygpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b2RheSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VNb2JpbGVNZW51KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdyaWRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicHQtMiBib3JkZXItdFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8RXhwb3J0QnV0dG9uIGZ1bGxXaWR0aCAvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0XHRcdFx0XHQ8L1BvcG92ZXI+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGRlZmF1bHQgSGVhZGVyXG4iLAogICAgImltcG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmNvbnN0IENSTEYgPSAnXFxyXFxuJ1xuXG5jb25zdCBVVENfVlRJTUVaT05FID0gW1xuXHQnQkVHSU46VlRJTUVaT05FJyxcblx0J1RaSUQ6VVRDJyxcblx0J0JFR0lOOlNUQU5EQVJEJyxcblx0J0RUU1RBUlQ6MTk3MDAxMDFUMDAwMDAwJyxcblx0J1RaTkFNRTpVVEMnLFxuXHQnVFpPRkZTRVRGUk9NOiswMDAwJyxcblx0J1RaT0ZGU0VUVE86KzAwMDAnLFxuXHQnRU5EOlNUQU5EQVJEJyxcblx0J0VORDpWVElNRVpPTkUnLFxuXS5qb2luKENSTEYpXG5cbmNvbnN0IGVzY2FwZVRleHQgPSAodGV4dDogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0cmV0dXJuIHRleHRcblx0XHQucmVwbGFjZUFsbCgnXFxcXCcsICdcXFxcXFxcXCcpXG5cdFx0LnJlcGxhY2VBbGwoJzsnLCAnXFxcXDsnKVxuXHRcdC5yZXBsYWNlQWxsKCcsJywgJ1xcXFwsJylcblx0XHQucmVwbGFjZUFsbCgnXFxuJywgJ1xcXFxuJylcblx0XHQucmVwbGFjZUFsbCgnXFxyJywgJycpXG59XG5cbmNvbnN0IGZvcm1hdERhdGUgPSAoZGF0ZTogZGF5anMuRGF5anMsIGlzQWxsRGF5ID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gaXNBbGxEYXlcblx0XHQ/IGRhdGUuZm9ybWF0KCdZWVlZTU1ERCcpXG5cdFx0OiBkYXRlLnV0YygpLmZvcm1hdCgnWVlZWU1NRERbVF1ISG1tc3NbWl0nKVxufVxuXG5jb25zdCBnZXRVSUQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gZXZlbnQudWlkIHx8IGAke2V2ZW50LmlkfUBpbGFteS5jYWxlbmRhcmBcbn1cblxuY29uc3QgZm9ybWF0UlJ1bGUgPSAocnJ1bGVPcHRpb25zOiB1bmtub3duKTogc3RyaW5nID0+IHtcblx0dHJ5IHtcblx0XHRjb25zdCBycnVsZVN0cmluZyA9IG5ldyBSUnVsZShcblx0XHRcdHJydWxlT3B0aW9ucyBhcyBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIFJSdWxlPlswXVxuXHRcdCkudG9TdHJpbmcoKVxuXHRcdHJldHVybiAoXG5cdFx0XHRycnVsZVN0cmluZy5zcGxpdCgnXFxuJykuZmluZCgobGluZSkgPT4gbGluZS5zdGFydHNXaXRoKCdSUlVMRTonKSkgfHwgJydcblx0XHQpXG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiAnJ1xuXHR9XG59XG5cbmNvbnN0IGNvbnZlcnRFdmVudFRvVkV2ZW50ID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogc3RyaW5nID0+IHtcblx0Y29uc3QgdGltZXN0YW1wID0gZGF5anMoKS51dGMoKS5mb3JtYXQoJ1lZWVlNTUREW1RdSEhtbXNzW1pdJylcblx0Y29uc3QgZGF0ZVBhcmFtID0gZXZlbnQuYWxsRGF5ID8gJztWQUxVRT1EQVRFJyA6ICcnXG5cdGNvbnN0IHJydWxlID0gZXZlbnQucnJ1bGUgPyBmb3JtYXRSUnVsZShldmVudC5ycnVsZSkgOiAnJ1xuXG5cdGNvbnN0IGV4ZGF0ZXMgPSBldmVudC5leGRhdGVzPy5sZW5ndGhcblx0XHQ/IGV2ZW50LmV4ZGF0ZXMubWFwKChkKSA9PiBmb3JtYXREYXRlKGRheWpzKGQpLCBldmVudC5hbGxEYXkpKS5qb2luKCcsJylcblx0XHQ6IG51bGxcblxuXHRjb25zdCByZWN1cnJlbmNlSWQgPSBldmVudC5yZWN1cnJlbmNlSWRcblx0XHQ/IGZvcm1hdERhdGUoZGF5anMoZXZlbnQucmVjdXJyZW5jZUlkKSwgZXZlbnQuYWxsRGF5KVxuXHRcdDogbnVsbFxuXG5cdGNvbnN0IGxpbmVzID0gW1xuXHRcdCdCRUdJTjpWRVZFTlQnLFxuXHRcdGBVSUQ6JHtnZXRVSUQoZXZlbnQpfWAsXG5cdFx0YERUU1RBUlQke2RhdGVQYXJhbX06JHtmb3JtYXREYXRlKGV2ZW50LnN0YXJ0LCBldmVudC5hbGxEYXkpfWAsXG5cdFx0YERURU5EJHtkYXRlUGFyYW19OiR7Zm9ybWF0RGF0ZShldmVudC5lbmQsIGV2ZW50LmFsbERheSl9YCxcblx0XHRgU1VNTUFSWToke2VzY2FwZVRleHQoZXZlbnQudGl0bGUpfWAsXG5cdFx0ZXZlbnQuZGVzY3JpcHRpb24gJiYgYERFU0NSSVBUSU9OOiR7ZXNjYXBlVGV4dChldmVudC5kZXNjcmlwdGlvbil9YCxcblx0XHRldmVudC5sb2NhdGlvbiAmJiBgTE9DQVRJT046JHtlc2NhcGVUZXh0KGV2ZW50LmxvY2F0aW9uKX1gLFxuXHRcdHJydWxlLFxuXHRcdGV4ZGF0ZXMgJiYgYEVYREFURToke2V4ZGF0ZXN9YCxcblx0XHRyZWN1cnJlbmNlSWQgJiYgYFJFQ1VSUkVOQ0UtSUQ6JHtyZWN1cnJlbmNlSWR9YCxcblx0XHRgRFRTVEFNUDoke3RpbWVzdGFtcH1gLFxuXHRcdGBDUkVBVEVEOiR7dGltZXN0YW1wfWAsXG5cdFx0YExBU1QtTU9ESUZJRUQ6JHt0aW1lc3RhbXB9YCxcblx0XHQnU1RBVFVTOkNPTkZJUk1FRCcsXG5cdFx0J1NFUVVFTkNFOjAnLFxuXHRcdCdUUkFOU1A6T1BBUVVFJyxcblx0XHQnRU5EOlZFVkVOVCcsXG5cdF1cblxuXHRyZXR1cm4gbGluZXMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oQ1JMRilcbn1cblxuY29uc3QgZmlsdGVyRXZlbnRzID0gKGV2ZW50czogQ2FsZW5kYXJFdmVudFtdKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Y29uc3Qgc2VlblVJRHMgPSBuZXcgU2V0PHN0cmluZz4oKVxuXG5cdHJldHVybiBldmVudHMuZmlsdGVyKChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHVpZCA9IGdldFVJRChldmVudClcblx0XHRjb25zdCBpc0Jhc2VSZWN1cnJpbmcgPSBldmVudC5ycnVsZSAmJiAhZXZlbnQucmVjdXJyZW5jZUlkXG5cdFx0Y29uc3QgaXNNb2RpZmllZEluc3RhbmNlID0gZXZlbnQucmVjdXJyZW5jZUlkICYmICFldmVudC5ycnVsZVxuXG5cdFx0aWYgKGlzQmFzZVJlY3VycmluZykge1xuXHRcdFx0c2VlblVJRHMuYWRkKHVpZClcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0fVxuXHRcdGlmIChpc01vZGlmaWVkSW5zdGFuY2UpIHtcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0fVxuXHRcdHJldHVybiAhZXZlbnQucnJ1bGUgJiYgIWV2ZW50LnJlY3VycmVuY2VJZCAmJiAhc2VlblVJRHMuaGFzKHVpZClcblx0fSlcbn1cblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvSUNhbGVuZGFyID0gKFxuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcblx0Y2FsZW5kYXJOYW1lID0gJ2lsYW15IENhbGVuZGFyJ1xuKTogc3RyaW5nID0+IHtcblx0Y29uc3QgbmFtZSA9IGVzY2FwZVRleHQoY2FsZW5kYXJOYW1lKVxuXHRjb25zdCB2ZXZlbnRTdHJpbmdzID0gZmlsdGVyRXZlbnRzKGV2ZW50cykubWFwKGNvbnZlcnRFdmVudFRvVkV2ZW50KVxuXG5cdHJldHVybiBbXG5cdFx0J0JFR0lOOlZDQUxFTkRBUicsXG5cdFx0J1ZFUlNJT046Mi4wJyxcblx0XHQnUFJPRElEOi0vL2lsYW15Ly9pbGFteSBDYWxlbmRhci8vRU4nLFxuXHRcdCdDQUxTQ0FMRTpHUkVHT1JJQU4nLFxuXHRcdCdNRVRIT0Q6UFVCTElTSCcsXG5cdFx0YFgtV1ItQ0FMTkFNRToke25hbWV9YCxcblx0XHRgWC1XUi1DQUxERVNDOkV4cG9ydGVkIGZyb20gJHtuYW1lfWAsXG5cdFx0VVRDX1ZUSU1FWk9ORSxcblx0XHQuLi52ZXZlbnRTdHJpbmdzLFxuXHRcdCdFTkQ6VkNBTEVOREFSJyxcblx0XS5qb2luKENSTEYpXG59XG5cbmV4cG9ydCBjb25zdCBkb3dubG9hZElDYWxlbmRhciA9IChcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W10sXG5cdGZpbGVuYW1lID0gJ2NhbGVuZGFyLmljcycsXG5cdGNhbGVuZGFyTmFtZSA9ICdpbGFteSBDYWxlbmRhcidcbik6IHZvaWQgPT4ge1xuXHRjb25zdCBibG9iID0gbmV3IEJsb2IoW2V4cG9ydFRvSUNhbGVuZGFyKGV2ZW50cywgY2FsZW5kYXJOYW1lKV0sIHtcblx0XHR0eXBlOiAndGV4dC9jYWxlbmRhcjtjaGFyc2V0PXV0Zi04Jyxcblx0fSlcblx0Y29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKVxuXHRjb25zdCBub3JtYWxpemVkRmlsZW5hbWUgPSBmaWxlbmFtZS5lbmRzV2l0aCgnLmljcycpXG5cdFx0PyBmaWxlbmFtZVxuXHRcdDogYCR7ZmlsZW5hbWV9Lmljc2BcblxuXHRjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG5cdGxpbmsuaHJlZiA9IHVybFxuXHRsaW5rLmRvd25sb2FkID0gbm9ybWFsaXplZEZpbGVuYW1lXG5cblx0ZG9jdW1lbnQuYm9keS5hcHBlbmQobGluaylcblx0bGluay5jbGljaygpXG5cdGxpbmsucmVtb3ZlKClcblx0VVJMLnJldm9rZU9iamVjdFVSTCh1cmwpXG59XG4iLAogICAgImltcG9ydCB7IENoZXZyb25Eb3duIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHtcblx0UG9wb3Zlcixcblx0UG9wb3ZlckNvbnRlbnQsXG5cdFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmNvbnN0IE1PTlRIX0tFWVMgPSBbXG5cdCdqYW51YXJ5Jyxcblx0J2ZlYnJ1YXJ5Jyxcblx0J21hcmNoJyxcblx0J2FwcmlsJyxcblx0J21heScsXG5cdCdqdW5lJyxcblx0J2p1bHknLFxuXHQnYXVndXN0Jyxcblx0J3NlcHRlbWJlcicsXG5cdCdvY3RvYmVyJyxcblx0J25vdmVtYmVyJyxcblx0J2RlY2VtYmVyJyxcbl0gYXMgY29uc3RcblxuY29uc3QgVGl0bGVDb250ZW50ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB2aWV3LCBzZXRDdXJyZW50RGF0ZSwgdCwgZmlyc3REYXlPZldlZWsgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGN0eCkgPT4gKHtcblx0XHRcdGN1cnJlbnREYXRlOiBjdHguY3VycmVudERhdGUsXG5cdFx0XHR2aWV3OiBjdHgudmlldyxcblx0XHRcdHNldEN1cnJlbnREYXRlOiBjdHguc2V0Q3VycmVudERhdGUsXG5cdFx0XHR0OiBjdHgudCxcblx0XHRcdGZpcnN0RGF5T2ZXZWVrOiBjdHguZmlyc3REYXlPZldlZWssXG5cdFx0fSkpXG5cblx0Y29uc3QgW29wZW5Qb3BvdmVyLCBzZXRPcGVuUG9wb3Zlcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuXG5cdGNvbnN0IG1vbnRocyA9IHVzZU1lbW8oKCkgPT4gTU9OVEhfS0VZUy5tYXAoKGtleSkgPT4gdChrZXkpKSwgW3RdKVxuXHRjb25zdCBjdXJyZW50WWVhciA9IGN1cnJlbnREYXRlLnllYXIoKVxuXHRjb25zdCB5ZWFycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDExIH0sIChfLCBpKSA9PiBjdXJyZW50WWVhciAtIDUgKyBpKVxuXHRjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaylcblxuXHRjb25zdCBzZWxlY3REYXRlID0gKGRhdGU6IGRheWpzLkRheWpzKSA9PiB7XG5cdFx0c2V0Q3VycmVudERhdGUoZGF0ZSlcblx0XHRzZXRPcGVuUG9wb3ZlcihudWxsKVxuXHR9XG5cblx0Y29uc3QgcmVuZGVyTW9udGhDb250ZW50ID0gKCkgPT4gKFxuXHRcdDw+XG5cdFx0XHR7bW9udGhzLm1hcCgobW9udGgsIGluZGV4KSA9PiAoXG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0Y3VycmVudERhdGUubW9udGgoKSA9PT0gaW5kZXggJiYgJ2JnLXByaW1hcnkvMTAnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRrZXk9e21vbnRofVxuXHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNlbGVjdERhdGUoY3VycmVudERhdGUubW9udGgoaW5kZXgpKX1cblx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e21vbnRofVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdCkpfVxuXHRcdDwvPlxuXHQpXG5cblx0Y29uc3QgcmVuZGVyWWVhckNvbnRlbnQgPSAoKSA9PiAoXG5cdFx0PD5cblx0XHRcdHt5ZWFycy5tYXAoKHllYXIpID0+IChcblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG5cdFx0XHRcdFx0XHRjdXJyZW50RGF0ZS55ZWFyKCkgPT09IHllYXIgJiYgJ2JnLXByaW1hcnkvMTAnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRrZXk9e3llYXJ9XG5cdFx0XHRcdFx0b25DbGljaz17KCkgPT4gc2VsZWN0RGF0ZShjdXJyZW50RGF0ZS55ZWFyKHllYXIpKX1cblx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3llYXJ9XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0KSl9XG5cdFx0PC8+XG5cdClcblxuXHRjb25zdCByZW5kZXJXZWVrQ29udGVudCA9ICgpID0+IChcblx0XHQ8PlxuXHRcdFx0e0FycmF5LmZyb20oeyBsZW5ndGg6IDcgfSwgKF8sIGkpID0+IHtcblx0XHRcdFx0Y29uc3Qgd2Vla0RhdGUgPSBjdXJyZW50RGF0ZS5zdWJ0cmFjdCgzLCAnd2VlaycpLmFkZChpLCAnd2VlaycpXG5cdFx0XHRcdGNvbnN0IGRheXMgPSBnZXRXZWVrRGF5cyh3ZWVrRGF0ZSwgZmlyc3REYXlPZldlZWspXG5cdFx0XHRcdGNvbnN0IHN0YXJ0ID0gZGF5c1swXVxuXHRcdFx0XHRjb25zdCBlbmQgPSBkYXlzWzZdXG5cdFx0XHRcdGNvbnN0IGlzQ3VycmVudFdlZWsgPSB3ZWVrRGF0ZS5pc1NhbWUoY3VycmVudERhdGUsICd3ZWVrJylcblx0XHRcdFx0Y29uc3QgY3Jvc3Nlc01vbnRoID0gc3RhcnQubW9udGgoKSAhPT0gZW5kLm1vbnRoKClcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdFx0aXNDdXJyZW50V2VlayAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRrZXk9e3N0YXJ0LmZvcm1hdCgnWVlZWS1NTS1ERCcpfVxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gc2VsZWN0RGF0ZShzdGFydCl9XG5cdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj57YCR7c3RhcnQuZm9ybWF0KCdNTU0gRCcpfSAtICR7ZW5kLmZvcm1hdCgnRCcpfWB9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHR7Y3Jvc3Nlc01vbnRoICYmIChcblx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJtbC0wLjUgdGV4dC14cyBvcGFjaXR5LTcwXCI+e2Ake3N0YXJ0LmZvcm1hdCgnTU1NJyl9LSR7ZW5kLmZvcm1hdCgnTU1NJyl9YH08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC8+XG5cdClcblxuXHRjb25zdCByZW5kZXJEYXlDb250ZW50ID0gKCkgPT4ge1xuXHRcdGNvbnN0IGZpcnN0RGF5ID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuXHRcdGNvbnN0IGRheXNJbk1vbnRoID0gY3VycmVudERhdGUuZGF5c0luTW9udGgoKVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDw+XG5cdFx0XHRcdHtBcnJheS5mcm9tKHsgbGVuZ3RoOiBkYXlzSW5Nb250aCB9LCAoXywgaSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGRheSA9IGZpcnN0RGF5LmRhdGUoaSArIDEpXG5cdFx0XHRcdFx0Y29uc3QgaXNDdXJyZW50RGF5ID0gZGF5LmlzU2FtZShjdXJyZW50RGF0ZSwgJ2RheScpXG5cdFx0XHRcdFx0Y29uc3QgaXNUb2RheSA9IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdFx0XHRpc0N1cnJlbnREYXkgJiYgJ2JnLXByaW1hcnkvMTAnXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdGtleT17ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfVxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZWxlY3REYXRlKGRheSl9XG5cdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuPntkYXkuZm9ybWF0KCdkZGRkLCBNTU0gRCcpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHR7aXNUb2RheSAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtc20gcHgtMSEgdGV4dC14c1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dCgndG9kYXknKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSl9XG5cdFx0XHQ8Lz5cblx0XHQpXG5cdH1cblxuXHRjb25zdCBwb3BvdmVycyA9IFtcblx0XHR7XG5cdFx0XHRpZDogJ21vbnRoJyxcblx0XHRcdGhpZGRlbjogdmlldyA9PT0gJ3llYXInLFxuXHRcdFx0dGl0bGU6IGN1cnJlbnREYXRlLmZvcm1hdCgnTU1NTScpLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJNb250aENvbnRlbnQsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogJ3llYXInLFxuXHRcdFx0aGlkZGVuOiBmYWxzZSxcblx0XHRcdHRpdGxlOiBjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVknKSxcblx0XHRcdHJlbmRlcjogcmVuZGVyWWVhckNvbnRlbnQsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogJ3dlZWsnLFxuXHRcdFx0aGlkZGVuOiB2aWV3ICE9PSAnd2VlaycsXG5cdFx0XHR0aXRsZTogYCR7d2Vla0RheXNbMF0uZm9ybWF0KCdNTU0gRCcpfSAtICR7d2Vla0RheXNbNl0uZm9ybWF0KCdNTU0gRCcpfWAsXG5cdFx0XHRyZW5kZXI6IHJlbmRlcldlZWtDb250ZW50LFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6ICdkYXknLFxuXHRcdFx0aGlkZGVuOiB2aWV3ICE9PSAnZGF5Jyxcblx0XHRcdHRpdGxlOiBjdXJyZW50RGF0ZS5mb3JtYXQoJ2RkZGQsIEQnKSxcblx0XHRcdHJlbmRlcjogcmVuZGVyRGF5Q29udGVudCxcblx0XHR9LFxuXHRdXG5cblx0cmV0dXJuIHBvcG92ZXJzXG5cdFx0LmZpbHRlcigocCkgPT4gIXAuaGlkZGVuKVxuXHRcdC5tYXAoKHBvcG92ZXIpID0+IChcblx0XHRcdDxQb3BvdmVyXG5cdFx0XHRcdGtleT17cG9wb3Zlci5pZH1cblx0XHRcdFx0b25PcGVuQ2hhbmdlPXsob3BlbikgPT4gc2V0T3BlblBvcG92ZXIob3BlbiA/IHBvcG92ZXIuaWQgOiBudWxsKX1cblx0XHRcdFx0b3Blbj17b3BlblBvcG92ZXIgPT09IHBvcG92ZXIuaWR9XG5cdFx0XHQ+XG5cdFx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1tb250aC1idXR0b25cIlxuXHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuXHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImNhbGVuZGFyLW1vbnRoLWJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2Ake3BvcG92ZXIuaWR9LSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3BvcG92ZXIudGl0bGV9XG5cdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHRcdDxDaGV2cm9uRG93biBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0PC9Qb3BvdmVyVHJpZ2dlcj5cblx0XHRcdFx0PFBvcG92ZXJDb250ZW50IGNsYXNzTmFtZT1cInctNDAgcC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IG1heC1oLTYwIGZsZXgtY29sIG92ZXJmbG93LWF1dG9cIj5cblx0XHRcdFx0XHRcdHtwb3BvdmVyLnJlbmRlcigpfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L1BvcG92ZXJDb250ZW50PlxuXHRcdFx0PC9Qb3BvdmVyPlxuXHRcdCkpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFRpdGxlQ29udGVudFxuIiwKICAgICJpbXBvcnQgeyBDaGV2cm9uTGVmdCwgQ2hldnJvblJpZ2h0IH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxudHlwZSBWaWV3VHlwZSA9ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJ1xuY29uc3QgQVZBSUxBQkxFX1ZJRVdTOiBWaWV3VHlwZVtdID0gWydkYXknLCAnd2VlaycsICdtb250aCcsICd5ZWFyJ11cblxuaW50ZXJmYWNlIFZpZXdDb250cm9sc1Byb3BzIHtcblx0Y3VycmVudFZpZXc6IFZpZXdUeXBlXG5cdG9uQ2hhbmdlOiAodmlldzogVmlld1R5cGUpID0+IHZvaWRcblx0b25Ub2RheT86ICgpID0+IHZvaWRcblx0b25OZXh0PzogKCkgPT4gdm9pZFxuXHRvblByZXZpb3VzPzogKCkgPT4gdm9pZFxuXHR2YXJpYW50PzogJ2RlZmF1bHQnIHwgJ2dyaWQnXG5cdHNpemU/OiAnc20nIHwgJ2RlZmF1bHQnXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBWaWV3Q29udHJvbHM6IFJlYWN0LkZDPFZpZXdDb250cm9sc1Byb3BzPiA9ICh7XG5cdGN1cnJlbnRWaWV3LFxuXHRvbkNoYW5nZSxcblx0dmFyaWFudCA9ICdkZWZhdWx0Jyxcblx0c2l6ZSA9ICdzbScsXG5cdGNsYXNzTmFtZSxcblx0b25Ub2RheSxcblx0b25OZXh0LFxuXHRvblByZXZpb3VzLFxufSkgPT4ge1xuXHRjb25zdCB7IHQsIHJlc291cmNlcyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0dDogY29udGV4dC50LFxuXHRcdHJlc291cmNlczogY29udGV4dC5yZXNvdXJjZXMsXG5cdH0pKVxuXHRjb25zdCBpc0dyaWQgPSB2YXJpYW50ID09PSAnZ3JpZCdcblx0Y29uc3QgaXNSZXNvdXJjZUNhbGVuZGFyID0gcmVzb3VyY2VzICYmIHJlc291cmNlcy5sZW5ndGggPiAwXG5cblx0Ly8gRXh0cmFjdCBjb21tb24gYnV0dG9uIGNsYXNzTmFtZSBsb2dpYyB0byBhIGZ1bmN0aW9uXG5cdGNvbnN0IGdldEJ1dHRvbkNsYXNzTmFtZSA9ICh2aWV3VHlwZTogVmlld1R5cGUpID0+IHtcblx0XHRyZXR1cm4gY24oXG5cdFx0XHQvLyBCYXNlIHdpZHRoIGZvciBncmlkIGxheW91dFxuXHRcdFx0aXNHcmlkID8gJ3ctZnVsbCcgOiAnJyxcblx0XHRcdC8vIEFjdGl2ZSB2aWV3IHN0eWxpbmdcblx0XHRcdGN1cnJlbnRWaWV3ID09PSB2aWV3VHlwZSAmJiAnYmctcHJpbWFyeS84MCdcblx0XHQpXG5cdH1cblxuXHRjb25zdCBnZXRCdG5WYXJpYW50ID0gKHZpZXdUeXBlOiBWaWV3VHlwZSkgPT4ge1xuXHRcdHJldHVybiBjdXJyZW50VmlldyA9PT0gdmlld1R5cGUgPyAnZGVmYXVsdCcgOiAnb3V0bGluZSdcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0aXNHcmlkID8gJ2dyaWQgZ3JpZC1jb2xzLTIgZ2FwLTInIDogJ2ZsZXggZ2FwLTEnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0PlxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvblByZXZpb3VzfSBzaXplPXtzaXplfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHQ8Q2hldnJvbkxlZnQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDxCdXR0b24gb25DbGljaz17b25OZXh0fSBzaXplPXtzaXplfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHQ8Q2hldnJvblJpZ2h0IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0PC9CdXR0b24+XG5cblx0XHRcdHtBVkFJTEFCTEVfVklFV1MubWFwKCh0eXBlOiBWaWV3VHlwZSkgPT4ge1xuXHRcdFx0XHRpZiAoaXNSZXNvdXJjZUNhbGVuZGFyICYmIHR5cGUgPT09ICd5ZWFyJykge1xuXHRcdFx0XHRcdHJldHVybiBudWxsXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Z2V0QnV0dG9uQ2xhc3NOYW1lKHR5cGUpfVxuXHRcdFx0XHRcdFx0a2V5PXt0eXBlfVxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gb25DaGFuZ2UodHlwZSl9XG5cdFx0XHRcdFx0XHRzaXplPXtzaXplfVxuXHRcdFx0XHRcdFx0dmFyaWFudD17Z2V0QnRuVmFyaWFudCh0eXBlKX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7dCh0eXBlKX1cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cblx0XHRcdDxCdXR0b24gb25DbGljaz17b25Ub2RheX0gc2l6ZT17c2l6ZX0gdmFyaWFudD1cIm91dGxpbmVcIj5cblx0XHRcdFx0e3QoJ3RvZGF5Jyl9XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgZGVmYXVsdCBWaWV3Q29udHJvbHNcbiIsCiAgICAiaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZFJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLXJvdydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEFsbERheUNlbGwgfSBmcm9tICcuL2FsbC1kYXktY2VsbCdcblxuaW50ZXJmYWNlIEFsbERheVJvd1Byb3BzIHtcblx0ZGF5czogZGF5anMuRGF5anNbXVxuXHRjbGFzc2VzPzogeyByb3c/OiBzdHJpbmc7IGNlbGw/OiBzdHJpbmc7IHNwYWNlcj86IHN0cmluZyB9XG5cdHJlc291cmNlPzogUmVzb3VyY2Vcblx0c2hvd1NwYWNlcj86IGJvb2xlYW5cbn1cblxuY29uc3QgTm9NZW1vQWxsRGF5Um93OiBSZWFjdC5GQzxBbGxEYXlSb3dQcm9wcz4gPSAoe1xuXHRkYXlzLFxuXHRjbGFzc2VzLFxuXHRyZXNvdXJjZSxcblx0c2hvd1NwYWNlciA9IHRydWUsXG59KSA9PiB7XG5cdGNvbnN0IGNvbHVtbnMgPSBkYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4gKHtcblx0XHRpZDogYGFsbGRheS1jb2wtJHtkYXkudG9JU09TdHJpbmcoKX0tJHtpbmRleH1gLFxuXHRcdGRheSxcblx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdFx0Y2xhc3NOYW1lOiBjbignaC1mdWxsIG1pbi1oLTEyIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCcsIGNsYXNzZXM/LmNlbGwpLFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPXtjbignZmxleCB3LWZ1bGwnLCBjbGFzc2VzPy5yb3cpfSBkYXRhLXRlc3RpZD1cImFsbC1kYXktcm93XCI+XG5cdFx0XHR7LyogVGltZSBjb2wgc3BhY2VyICovfVxuXHRcdFx0e3Nob3dTcGFjZXIgJiYgPEFsbERheUNlbGwgY2xhc3NOYW1lPXtjbGFzc2VzPy5zcGFjZXJ9IC8+fVxuXG5cdFx0XHR7LyogRGF5IGFsbCBkYXkgY2VsbCAqL31cblx0XHRcdDxIb3Jpem9udGFsR3JpZFJvd1xuXHRcdFx0XHRhbGxEYXlcblx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleC0xIG1pbi1oLWZpdFwiXG5cdFx0XHRcdGNvbHVtbnM9e2NvbHVtbnN9XG5cdFx0XHRcdGRheU51bWJlckhlaWdodD17MH1cblx0XHRcdFx0Z3JpZFR5cGU9XCJkYXlcIlxuXHRcdFx0XHRpZD17YGFsbC1kYXktcm93LSR7cmVzb3VyY2U/LmlkID8/ICdtYWluJ31gfVxuXHRcdFx0XHRpc0xhc3RSb3dcblx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHR2YXJpYW50PVwicmVndWxhclwiXG5cdFx0XHQvPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBBbGxEYXlSb3cgPSBtZW1vKE5vTWVtb0FsbERheVJvdylcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBtZW1vLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBHcmlkQ2VsbCB9IGZyb20gJy4uL2dyaWQtY2VsbCdcbmltcG9ydCB7IFJlc291cmNlQ2VsbCB9IGZyb20gJy4uL3Jlc291cmNlLWNlbGwnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyIH0gZnJvbSAnLi9ob3Jpem9udGFsLWdyaWQtZXZlbnRzLWxheWVyJ1xuXG5pbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRDb2x1bW4ge1xuXHRpZDogc3RyaW5nXG5cdGRheT86IGRheWpzLkRheWpzXG5cdGRheXM/OiBkYXlqcy5EYXlqc1tdXG5cdGdyaWRUeXBlOiAnZGF5JyB8ICdob3VyJ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0cmVuZGVyQ2VsbD86IChyb3c6IEhvcml6b250YWxHcmlkUm93UHJvcHMpID0+IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhvcml6b250YWxHcmlkUm93UHJvcHMge1xuXHRpZDogc3RyaW5nIHwgbnVtYmVyXG5cdHJlc291cmNlPzogUmVzb3VyY2Vcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHR2YXJpYW50PzogJ3JlZ3VsYXInIHwgJ3Jlc291cmNlJ1xuXHRkYXlOdW1iZXJIZWlnaHQ/OiBudW1iZXJcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGNvbHVtbnM/OiBIb3Jpem9udGFsR3JpZENvbHVtbltdXG5cdGFsbERheT86IGJvb2xlYW5cblx0c2hvd0RheU51bWJlcj86IGJvb2xlYW5cblx0aXNMYXN0Um93PzogYm9vbGVhblxufVxuXG5jb25zdCBOb01lbW9Ib3Jpem9udGFsR3JpZFJvdzogUmVhY3QuRkM8SG9yaXpvbnRhbEdyaWRSb3dQcm9wcz4gPSAoe1xuXHRpZCxcblx0cmVzb3VyY2UsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHZhcmlhbnQgPSAncmVzb3VyY2UnLFxuXHRkYXlOdW1iZXJIZWlnaHQsXG5cdGNsYXNzTmFtZSxcblx0Y29sdW1ucyA9IFtdLFxuXHRhbGxEYXksXG5cdHNob3dEYXlOdW1iZXIgPSBmYWxzZSxcblx0aXNMYXN0Um93ID0gZmFsc2UsXG59KSA9PiB7XG5cdGNvbnN0IHsgcmVuZGVyUmVzb3VyY2UgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSB2YXJpYW50ID09PSAncmVzb3VyY2UnXG5cdGNvbnN0IGlzR3JvdXBlZCA9IGNvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wuZGF5cylcblxuXHRjb25zdCByZW5kZXJFdmVudHNMYXllciA9IHVzZUNhbGxiYWNrKFxuXHRcdChkYXlzOiBkYXlqcy5EYXlqc1tdKSA9PiB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgei0xMCBwb2ludGVyLWV2ZW50cy1ub25lXCI+XG5cdFx0XHRcdFx0PEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJcblx0XHRcdFx0XHRcdGFsbERheT17YWxsRGF5fVxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2Bob3Jpem9udGFsLWV2ZW50cy0ke2lkfWB9XG5cdFx0XHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQ9e2RheU51bWJlckhlaWdodH1cblx0XHRcdFx0XHRcdGRheXM9e2RheXN9XG5cdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZT8uaWR9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpXG5cdFx0fSxcblx0XHRbYWxsRGF5LCBkYXlOdW1iZXJIZWlnaHQsIGdyaWRUeXBlLCBpZCwgcmVzb3VyY2U/LmlkXVxuXHQpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdmbGV4IGZsZXgtMSByZWxhdGl2ZScsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXRlc3RpZD17YGhvcml6b250YWwtcm93LSR7aWR9YH1cblx0XHQ+XG5cdFx0XHR7aXNSZXNvdXJjZUNhbGVuZGFyICYmIChcblx0XHRcdFx0PFJlc291cmNlQ2VsbFxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInctMjAgc206dy00MCBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCBoLWZ1bGxcIlxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgaG9yaXpvbnRhbC1yb3ctbGFiZWwtJHtyZXNvdXJjZT8uaWR9YH1cblx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7cmVuZGVyUmVzb3VyY2UgPyAoXG5cdFx0XHRcdFx0XHRyZW5kZXJSZXNvdXJjZShyZXNvdXJjZSlcblx0XHRcdFx0XHQpIDogKFxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3cmFwLWJyZWFrLXdvcmQgdGV4dC1zbVwiPntyZXNvdXJjZT8udGl0bGV9PC9kaXY+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PC9SZXNvdXJjZUNlbGw+XG5cdFx0XHQpfVxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4LTEgZmxleFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsXCI+XG5cdFx0XHRcdFx0e2NvbHVtbnMubWFwKChjb2wsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoY29sLmRheSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdDxHcmlkQ2VsbFxuXHRcdFx0XHRcdFx0XHRcdFx0YWxsRGF5PXthbGxEYXl9XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQnZmxleC0xIHctMjAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3cgJiYgJ2JvcmRlci1iLTAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb2wuY2xhc3NOYW1lXG5cdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF5PXtjb2wuZGF5fVxuXHRcdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdFx0aG91cj17Z3JpZFR5cGUgPT09ICdob3VyJyA/IGNvbC5kYXkuaG91cigpIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtjb2wuZGF5LnRvSVNPU3RyaW5nKCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZT8uaWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93RGF5TnVtYmVyPXtzaG93RGF5TnVtYmVyfVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgaXNMYXN0Q29sID0gaW5kZXggPT09IGNvbHVtbnMubGVuZ3RoIC0gMVxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggcmVsYXRpdmUgdy1mdWxsXCIga2V5PXtjb2wuaWR9PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGxcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHtjb2wuZGF5cz8ubWFwKChkYXkpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PEdyaWRDZWxsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWxsRGF5PXthbGxEYXl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdmbGV4LTEgdy0yMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3cgJiYgJ2JvcmRlci1iLTAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0IWlzTGFzdENvbCAmJiAnYm9yZGVyLXIhJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbC5jbGFzc05hbWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRheT17ZGF5fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRob3VyPXtncmlkVHlwZSA9PT0gJ2hvdXInID8gZGF5LmhvdXIoKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2RheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlPy5pZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93RGF5TnVtYmVyPXtzaG93RGF5TnVtYmVyfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdFx0XHR7cmVuZGVyRXZlbnRzTGF5ZXIoY29sLmRheXMpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0ey8qIEV2ZW50cyBsYXllciBwb3NpdGlvbmVkIGFic29sdXRlbHkgb3ZlciB0aGUgcm93ICovfVxuXHRcdFx0XHR7IWlzR3JvdXBlZCAmJlxuXHRcdFx0XHRcdHJlbmRlckV2ZW50c0xheWVyKGNvbHVtbnMubWFwKChjb2wpID0+IGNvbC5kYXkpLmZpbHRlcihCb29sZWFuKSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWRSb3cgPSBtZW1vKE5vTWVtb0hvcml6b250YWxHcmlkUm93KVxuIiwKICAgICJpbXBvcnQgUmVhY3QsIHsgbWVtbywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgRGF5TnVtYmVyIH0gZnJvbSAnQC9jb21wb25lbnRzL2RheS1udW1iZXInXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBpc0J1c2luZXNzSG91ciB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEVWRU5UX0JBUl9IRUlHSFQgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBTZWxlY3RlZERheUV2ZW50cyB9IGZyb20gJy4vYWxsLWV2ZW50cy1kaWFsb2cnXG5pbXBvcnQgeyBBbGxFdmVudERpYWxvZyB9IGZyb20gJy4vYWxsLWV2ZW50cy1kaWFsb2cnXG5pbXBvcnQgeyBEcm9wcGFibGVDZWxsIH0gZnJvbSAnLi9kcm9wcGFibGUtY2VsbCdcblxuaW50ZXJmYWNlIEdyaWRQcm9wcyB7XG5cdGRheTogZGF5anMuRGF5anNcblx0aG91cj86IG51bWJlciAvLyBPcHRpb25hbCBob3VyIGZvciBob3VyLWJhc2VkIGdyaWRzXG5cdG1pbnV0ZT86IG51bWJlciAvLyBPcHRpb25hbCBtaW51dGUgZm9yIG1vcmUgZ3JhbnVsYXIgdGltZSBzbG90c1xuXHRkYXlNYXhFdmVudHM/OiBudW1iZXJcblx0Y2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGNsYXNzTmFtZSBmb3IgY3VzdG9tIHN0eWxpbmdcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlciAvLyBPcHRpb25hbCByZXNvdXJjZSBJRCBmb3IgcmVzb3VyY2Utc3BlY2lmaWMgZGF5IGNlbGxzXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cicgLy8gRnV0dXJlIHVzZSBmb3IgZGlmZmVyZW50IGdyaWQgdHlwZXNcblx0c2hvdWxkUmVuZGVyRXZlbnRzPzogYm9vbGVhbiAvLyBGbGFnIHRvIGRldGVybWluZSBpZiBldmVudHMgc2hvdWxkIGJlIHJlbmRlcmVkXG5cdGFsbERheT86IGJvb2xlYW4gLy8gRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGlzIGlzIGFuIGFsbC1kYXkgY2VsbFxuXHRzaG93RGF5TnVtYmVyPzogYm9vbGVhbiAvLyBGbGFnIHRvIHNob3cgb3IgaGlkZSB0aGUgZGF5IG51bWJlclxuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG59XG5cbmNvbnN0IE5vTWVtb0dyaWRDZWxsOiBSZWFjdC5GQzxHcmlkUHJvcHM+ID0gKHtcblx0ZGF5LFxuXHRob3VyLFxuXHRtaW51dGUsXG5cdGNsYXNzTmFtZSA9ICcnLFxuXHRyZXNvdXJjZUlkLFxuXHRncmlkVHlwZSA9ICdkYXknLFxuXHRzaG91bGRSZW5kZXJFdmVudHMgPSB0cnVlLFxuXHRhbGxEYXkgPSBmYWxzZSxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcblx0c2hvd0RheU51bWJlciA9IGZhbHNlLFxuXHRjaGlsZHJlbixcbn0pID0+IHtcblx0Y29uc3QgYWxsRXZlbnRzRGlhbG9nUmVmID0gUmVhY3QudXNlUmVmPHtcblx0XHRvcGVuOiAoKSA9PiB2b2lkXG5cdFx0Y2xvc2U6ICgpID0+IHZvaWRcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcblx0fT4obnVsbClcblx0Y29uc3Qge1xuXHRcdGRheU1heEV2ZW50cyA9IDAsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGN1cnJlbnREYXRlLFxuXHRcdHQsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRjdXJyZW50TG9jYWxlLFxuXHRcdGV2ZW50U3BhY2luZyxcblx0XHRnZXRSZXNvdXJjZUJ5SWQsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgdG9kYXlFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoIXNob3VsZFJlbmRlckV2ZW50cykge1xuXHRcdFx0cmV0dXJuIFtdXG5cdFx0fVxuXG5cdFx0bGV0IHRvZGF5RXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKFxuXHRcdFx0ZGF5LnN0YXJ0T2YoZ3JpZFR5cGUpLFxuXHRcdFx0ZGF5LmVuZE9mKGdyaWRUeXBlKVxuXHRcdClcblxuXHRcdGlmIChhbGxEYXkpIHtcblx0XHRcdHRvZGF5RXZlbnRzID0gdG9kYXlFdmVudHMuZmlsdGVyKChlKSA9PiBlLmFsbERheSlcblx0XHR9XG5cblx0XHRpZiAocmVzb3VyY2VJZCkge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VFdmVudHMgPSBnZXRFdmVudHNGb3JSZXNvdXJjZShyZXNvdXJjZUlkKSA/PyBbXVxuXG5cdFx0XHRyZXR1cm4gdG9kYXlFdmVudHMuZmlsdGVyKChldmVudCkgPT5cblx0XHRcdFx0cmVzb3VyY2VFdmVudHMuc29tZSgocmUpID0+IFN0cmluZyhyZS5pZCkgPT09IFN0cmluZyhldmVudC5pZCkpXG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRvZGF5RXZlbnRzXG5cdH0sIFtcblx0XHRkYXksXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0Z3JpZFR5cGUsXG5cdFx0c2hvdWxkUmVuZGVyRXZlbnRzLFxuXHRcdGFsbERheSxcblx0XSlcblxuXHQvLyBIYW5kbGVyIGZvciBzaG93aW5nIGFsbCBldmVudHMgaW4gYSBkaWFsb2dcblx0Y29uc3Qgc2hvd0FsbEV2ZW50cyA9IChkYXk6IGRheWpzLkRheWpzLCBldmVudHM6IENhbGVuZGFyRXZlbnRbXSkgPT4ge1xuXHRcdGFsbEV2ZW50c0RpYWxvZ1JlZi5jdXJyZW50Py5zZXRTZWxlY3RlZERheUV2ZW50cyh7XG5cdFx0XHRkYXksXG5cdFx0XHRldmVudHMsXG5cdFx0fSlcblx0XHRhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8ub3BlbigpXG5cdH1cblxuXHRjb25zdCBpc0N1cnJlbnRNb250aCA9IGRheS5tb250aCgpID09PSBjdXJyZW50RGF0ZS5tb250aCgpXG5cblx0Y29uc3QgaGlkZGVuRXZlbnRzQ291bnQgPSB0b2RheUV2ZW50cy5sZW5ndGggLSBkYXlNYXhFdmVudHNcblx0Y29uc3QgaGFzSGlkZGVuRXZlbnRzID0gaGlkZGVuRXZlbnRzQ291bnQgPiAwXG5cblx0Ly8gVXNlIHJlc291cmNlLXNwZWNpZmljIGJ1c2luZXNzIGhvdXJzIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGxiYWNrIHRvIGdsb2JhbFxuXHRjb25zdCBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKHJlc291cmNlSWQgJiYgZ2V0UmVzb3VyY2VCeUlkKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlQnlJZChyZXNvdXJjZUlkKVxuXHRcdFx0aWYgKHJlc291cmNlPy5idXNpbmVzc0hvdXJzKSB7XG5cdFx0XHRcdHJldHVybiByZXNvdXJjZS5idXNpbmVzc0hvdXJzXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBidXNpbmVzc0hvdXJzXG5cdH0sIFtyZXNvdXJjZUlkLCBnZXRSZXNvdXJjZUJ5SWQsIGJ1c2luZXNzSG91cnNdKVxuXG5cdGNvbnN0IGlzQnVzaW5lc3MgPSBpc0J1c2luZXNzSG91cih7XG5cdFx0ZGF0ZTogZGF5LFxuXHRcdGhvdXI6IGdyaWRUeXBlID09PSAnaG91cicgPyBkYXkuaG91cigpIDogdW5kZWZpbmVkLFxuXHRcdGJ1c2luZXNzSG91cnM6IGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMsXG5cdH0pXG5cblx0Y29uc3QgaG91clN0ciA9IGRheS5mb3JtYXQoJ0hIJylcblx0Y29uc3QgbW0gPSBkYXkuZm9ybWF0KCdtbScpXG5cdGNvbnN0IGJhc2VUZXN0SWQgPSBgZGF5LWNlbGwtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YFxuXHRjb25zdCB0ZXN0SWQgPVxuXHRcdGdyaWRUeXBlID09PSAnaG91cicgPyBgJHtiYXNlVGVzdElkfS0ke2hvdXJTdHJ9LSR7bW19YCA6IGJhc2VUZXN0SWRcblx0Ly8gRHJvcHBhYmxlIElEIG11c3QgdXNlIHRvSVNPU3RyaW5nKCkgKG5vdCBZWVlZLU1NLUREKSBzbyBlYWNoIHRpbWUgc2xvdFxuXHQvLyBnZXRzIGEgdW5pcXVlIElEIGluIEBkbmQta2l0J3MgcmVnaXN0cnkuIFlZWVktTU0tREQgc3RyaXBzIHRoZSB0aW1lLFxuXHQvLyBjYXVzaW5nIGFsbCBjZWxscyBvbiB0aGUgc2FtZSBkYXkgdG8gY29sbGlkZS5cblx0Y29uc3QgZHJvcHBhYmxlSWQgPSBgZGF5LWNlbGwtJHtkYXkudG9JU09TdHJpbmcoKX0ke2FsbERheSA/ICctYWxsZGF5JyA6ICcnfSR7cmVzb3VyY2VJZCA/IGAtcmVzb3VyY2UtJHtyZXNvdXJjZUlkfWAgOiAnJ31gXG5cblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0PERyb3BwYWJsZUNlbGxcblx0XHRcdFx0YWxsRGF5PXthbGxEYXl9XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2N1cnNvci1wb2ludGVyIG92ZXJmbG93LWNsaXAgcC0xIGhvdmVyOmJnLWFjY2VudCBtaW4taC1bNjBweF0gcmVsYXRpdmUgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIG9ubHk6Ym9yZGVyLXIgYm9yZGVyLWInLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZCB8fCB0ZXN0SWR9XG5cdFx0XHRcdGRhdGU9e2RheX1cblx0XHRcdFx0ZGlzYWJsZWQ9eyFpc0J1c2luZXNzIHx8ICFpc0N1cnJlbnRNb250aH1cblx0XHRcdFx0aG91cj17aG91cn1cblx0XHRcdFx0aWQ9e2Ryb3BwYWJsZUlkfVxuXHRcdFx0XHRtaW51dGU9e21pbnV0ZX1cblx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cblx0XHRcdFx0dHlwZT1cImRheS1jZWxsXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1mdWxsIHctZnVsbFwiXG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJncmlkLWNlbGwtY29udGVudFwiXG5cdFx0XHRcdFx0c3R5bGU9e3sgZ2FwOiBgJHtldmVudFNwYWNpbmd9cHhgIH19XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7c2hvd0RheU51bWJlciAmJiA8RGF5TnVtYmVyIGRhdGU9e2RheX0gbG9jYWxlPXtjdXJyZW50TG9jYWxlfSAvPn1cblxuXHRcdFx0XHRcdHtzaG91bGRSZW5kZXJFdmVudHMgJiYgKFxuXHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0ey8qIFJlbmRlciBwbGFjZWhvbGRlcnMgZm9yIGV2ZW50cyB0aGF0IG9jY3VyIHRvZGF5IHNvIHRoYXQgdGhlIGNlbGwgaGVpZ2h0IGlzIGFjY29yZGluZyB0byBkYXlNYXhFdmVudHMuICovfVxuXHRcdFx0XHRcdFx0XHR7dG9kYXlFdmVudHMuc2xpY2UoMCwgZGF5TWF4RXZlbnRzKS5tYXAoKGV2ZW50LCByb3dJbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBzaHJpbmstMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17ZXZlbnQ/LnRpdGxlfVxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtgZW1wdHktJHtyb3dJbmRleH0tJHtldmVudC5pZH1gfVxuXHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9e3sgaGVpZ2h0OiBgJHtFVkVOVF9CQVJfSEVJR0hUfXB4YCB9fVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdCkpfVxuXG5cdFx0XHRcdFx0XHRcdHsvKiBTaG93IG1vcmUgZXZlbnRzIGJ1dHRvbiB3aXRoIGFjY3VyYXRlIGNvdW50ICovfVxuXHRcdFx0XHRcdFx0XHR7aGFzSGlkZGVuRXZlbnRzICYmIChcblx0XHRcdFx0XHRcdFx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9hMTF5L3VzZVNlbWFudGljRWxlbWVudHM6IFVzaW5nIGRpdiBhcyBidXR0b25cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGN1cnNvci1wb2ludGVyIHRleHQtWzEwcHhdIHdoaXRlc3BhY2Utbm93cmFwIHNtOnRleHQteHMgc2hyaW5rLTAgbXQtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0FsbEV2ZW50cyhkYXksIHRvZGF5RXZlbnRzKVxuXHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdG9uS2V5RG93bj17KGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnICcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0FsbEV2ZW50cyhkYXksIHRvZGF5RXZlbnRzKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0cm9sZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHR0YWJJbmRleD17MH1cblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHQre2hpZGRlbkV2ZW50c0NvdW50fSB7dCgnbW9yZScpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9Ecm9wcGFibGVDZWxsPlxuXG5cdFx0XHR7LyogRGlhbG9nIGZvciBzaG93aW5nIGFsbCBldmVudHMgKi99XG5cdFx0XHQ8QWxsRXZlbnREaWFsb2cgcmVmPXthbGxFdmVudHNEaWFsb2dSZWZ9IC8+XG5cdFx0PC8+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEdyaWRDZWxsID0gbWVtbyhOb01lbW9HcmlkQ2VsbCkgYXMgdHlwZW9mIE5vTWVtb0dyaWRDZWxsXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIERheU51bWJlclByb3BzIHtcblx0ZGF0ZTogZGF5anMuRGF5anNcblx0bG9jYWxlPzogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGRheSBudW1iZXIgZm9yIGEgY2FsZW5kYXIgY2VsbCwgaGlnaGxpZ2h0aW5nICd0b2RheScgd2l0aCBhIHByaW1hcnkgYmFja2dyb3VuZC5cbiAqL1xuZXhwb3J0IGNvbnN0IERheU51bWJlcjogUmVhY3QuRkM8RGF5TnVtYmVyUHJvcHM+ID0gKHtcblx0ZGF0ZSxcblx0bG9jYWxlID0gJ2VuJyxcblx0Y2xhc3NOYW1lLFxufSkgPT4ge1xuXHRjb25zdCBpc1RvZGF5ID0gZGF0ZS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cyBzaHJpbmstMCcsXG5cdFx0XHRcdGlzVG9kYXkgJiYgJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZm9udC1tZWRpdW0nLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17XG5cdFx0XHRcdGlzVG9kYXkgPyAnZGF5LW51bWJlci10b2RheScgOiBgZGF5LW51bWJlci0ke2RhdGUuZm9ybWF0KCdEJyl9YFxuXHRcdFx0fVxuXHRcdD5cblx0XHRcdHtJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwgeyBkYXk6ICdudW1lcmljJyB9KS5mb3JtYXQoZGF0ZS50b0RhdGUoKSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VJbXBlcmF0aXZlSGFuZGxlLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ29udGVudCxcblx0RGlhbG9nSGVhZGVyLFxuXHREaWFsb2dUaXRsZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RpYWxvZydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RlZERheUV2ZW50cyB7XG5cdGRheTogZGF5anMuRGF5anNcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbn1cblxuaW50ZXJmYWNlIEFsbEV2ZW50RGlhbG9nUHJvcHMge1xuXHRyZWY6IFJlYWN0LlJlZjx7XG5cdFx0b3BlbjogKCkgPT4gdm9pZFxuXHRcdGNsb3NlOiAoKSA9PiB2b2lkXG5cdFx0c2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG5cdH0+XG59XG5cbmV4cG9ydCBjb25zdCBBbGxFdmVudERpYWxvZzogUmVhY3QuRkM8QWxsRXZlbnREaWFsb2dQcm9wcz4gPSAoeyByZWYgfSkgPT4ge1xuXHRjb25zdCBbZGlhbG9nT3Blbiwgc2V0RGlhbG9nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkRGF5RXZlbnRzLCBzZXRTZWxlY3RlZERheUV2ZW50c10gPVxuXHRcdHVzZVN0YXRlPFNlbGVjdGVkRGF5RXZlbnRzIHwgbnVsbD4obnVsbClcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWsgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHR1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcblx0XHRvcGVuOiAoKSA9PiBzZXREaWFsb2dPcGVuKHRydWUpLFxuXHRcdGNsb3NlOiAoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKSxcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+XG5cdFx0XHRzZXRTZWxlY3RlZERheUV2ZW50cyhkYXlFdmVudHMpLFxuXHR9KSlcblxuXHQvLyBHZXQgc3RhcnQgZGF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9udGggdmlldyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuXHRjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cblx0Ly8gQ2FsY3VsYXRlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGNhbGVuZGFyIGdyaWQgY29ycmVjdGx5XG5cdC8vIEZpbmQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIChlLmcuIFN1bmRheSBvciBNb25kYXkpIHRoYXQgY29tZXMgYmVmb3JlIG9yIG9uIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoXG5cdGxldCBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGZpcnN0RGF5T2ZNb250aC5jbG9uZSgpXG5cdHdoaWxlIChhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5kYXkoKSAhPT0gZmlyc3REYXlPZldlZWspIHtcblx0XHRhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLnN1YnRyYWN0KDEsICdkYXknKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17c2V0RGlhbG9nT3Blbn0gb3Blbj17ZGlhbG9nT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtaC1bODB2aF0gbWF4LXctbWQgb3ZlcmZsb3cteS1hdXRvXCI+XG5cdFx0XHRcdDxEaWFsb2dIZWFkZXI+XG5cdFx0XHRcdFx0PERpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRGF5RXZlbnRzPy5kYXkuZm9ybWF0KCdNTU1NIEQsIFlZWVknKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHQ8L0RpYWxvZ0hlYWRlcj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJtdC00IHNwYWNlLXktM1wiPlxuXHRcdFx0XHRcdHtzZWxlY3RlZERheUV2ZW50cz8uZXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxEcmFnZ2FibGVFdmVudFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIG15LTEgaC1bMzBweF1cIiAvLyBVc2UgZXZlbnQgSUQgZm9yIHVuaXF1ZSBpZGVudGlmaWNhdGlvblxuXHRcdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17YGFsbC1ldmVudHMtZGlhbG9nLWV2ZW50LSQke2V2ZW50LmlkfWB9XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQ9e2V2ZW50fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17ZXZlbnQuaWR9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9EaWFsb2dDb250ZW50PlxuXHRcdDwvRGlhbG9nPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZURyYWdnYWJsZSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgdHlwZSB7IENTU1Byb3BlcnRpZXMgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBnZXRCb3JkZXJSYWRpdXNDbGFzcyA9IChcblx0aXNUcnVuY2F0ZWRTdGFydDogYm9vbGVhbixcblx0aXNUcnVuY2F0ZWRFbmQ6IGJvb2xlYW5cbikgPT4ge1xuXHRpZiAoaXNUcnVuY2F0ZWRTdGFydCAmJiBpc1RydW5jYXRlZEVuZCkge1xuXHRcdHJldHVybiAncm91bmRlZC1ub25lJ1xuXHR9XG5cdGlmIChpc1RydW5jYXRlZFN0YXJ0KSB7XG5cdFx0cmV0dXJuICdyb3VuZGVkLXItbWQgcm91bmRlZC1sLW5vbmUnXG5cdH1cblx0aWYgKGlzVHJ1bmNhdGVkRW5kKSB7XG5cdFx0cmV0dXJuICdyb3VuZGVkLWwtbWQgcm91bmRlZC1yLW5vbmUnXG5cdH1cblx0cmV0dXJuICdyb3VuZGVkLW1kJ1xufVxuXG5mdW5jdGlvbiBEcmFnZ2FibGVFdmVudFVubWVtb2l6ZWQoe1xuXHRlbGVtZW50SWQsXG5cdGV2ZW50LFxuXHRjbGFzc05hbWUsXG5cdHN0eWxlLFxuXHRkaXNhYmxlRHJhZyA9IGZhbHNlLFxufToge1xuXHRlbGVtZW50SWQ6IHN0cmluZ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0c3R5bGU/OiBDU1NQcm9wZXJ0aWVzXG5cdGV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGRpc2FibGVEcmFnPzogYm9vbGVhblxufSkge1xuXHRjb25zdCB7IG9uRXZlbnRDbGljaywgcmVuZGVyRXZlbnQsIGRpc2FibGVFdmVudENsaWNrLCBkaXNhYmxlRHJhZ0FuZERyb3AgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHsgYXR0cmlidXRlcywgbGlzdGVuZXJzLCBzZXROb2RlUmVmLCBpc0RyYWdnaW5nIH0gPSB1c2VEcmFnZ2FibGUoe1xuXHRcdGlkOiBlbGVtZW50SWQsXG5cdFx0ZGF0YToge1xuXHRcdFx0ZXZlbnQsXG5cdFx0XHR0eXBlOiAnY2FsZW5kYXItZXZlbnQnLFxuXHRcdH0sXG5cdFx0ZGlzYWJsZWQ6IGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcCxcblx0fSlcblxuXHQvLyBEZWZhdWx0IGV2ZW50IGNvbnRlbnQgdG8gcmVuZGVyIGlmIGN1c3RvbSByZW5kZXJFdmVudCBpcyBub3QgcHJvdmlkZWRcblx0Y29uc3QgRGVmYXVsdEV2ZW50Q29udGVudCA9ICgpID0+IHtcblx0XHQvLyBDaGVjayBpZiB0aGlzIGV2ZW50IGhhcyB0cnVuY2F0aW9uIGluZm9ybWF0aW9uXG5cdFx0Y29uc3QgZW5oYW5jZWRFdmVudCA9IGV2ZW50IGFzIHVua25vd24gYXMge1xuXHRcdFx0aXNUcnVuY2F0ZWRTdGFydD86IGJvb2xlYW5cblx0XHRcdGlzVHJ1bmNhdGVkRW5kPzogYm9vbGVhblxuXHRcdH1cblx0XHRjb25zdCBpc1RydW5jYXRlZFN0YXJ0ID0gZW5oYW5jZWRFdmVudC5pc1RydW5jYXRlZFN0YXJ0XG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRFbmQgPSBlbmhhbmNlZEV2ZW50LmlzVHJ1bmNhdGVkRW5kXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdGV2ZW50LmJhY2tncm91bmRDb2xvciB8fCAnYmctYmx1ZS01MDAnLFxuXHRcdFx0XHRcdGV2ZW50LmNvbG9yIHx8ICd0ZXh0LXdoaXRlJyxcblx0XHRcdFx0XHQnaC1mdWxsIHctZnVsbCBweC0xIGJvcmRlci1bMS41cHhdIGJvcmRlci1jYXJkIHRleHQtbGVmdCBvdmVyZmxvdy1jbGlwIHJlbGF0aXZlJyxcblx0XHRcdFx0XHRnZXRCb3JkZXJSYWRpdXNDbGFzcyhpc1RydW5jYXRlZFN0YXJ0LCBpc1RydW5jYXRlZEVuZClcblx0XHRcdFx0KX1cblx0XHRcdFx0c3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBldmVudC5iYWNrZ3JvdW5kQ29sb3IsIGNvbG9yOiBldmVudC5jb2xvciB9fVxuXHRcdFx0PlxuXHRcdFx0XHR7LyogTGVmdCBjb250aW51YXRpb24gaW5kaWNhdG9yICovfVxuXHRcdFx0XHR7aXNUcnVuY2F0ZWRTdGFydCAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBsZWZ0LTAgdG9wLTAgYm90dG9tLTAgdy0wLjUgYmctZm9yZWdyb3VuZC8yNVwiPjwvZGl2PlxuXHRcdFx0XHQpfVxuXG5cdFx0XHRcdHsvKiBFdmVudCB0aXRsZSAqL31cblx0XHRcdFx0PHBcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J3RleHQtWzEwcHhdIGZvbnQtc2VtaWJvbGQgc206dGV4dC14cyBtdC0wLjUnLFxuXHRcdFx0XHRcdFx0Ly8gQWRkIHNsaWdodCBwYWRkaW5nIHRvIGF2b2lkIG92ZXJsYXAgd2l0aCBpbmRpY2F0b3JzXG5cdFx0XHRcdFx0XHRpc1RydW5jYXRlZFN0YXJ0ICYmICdwbC0xJyxcblx0XHRcdFx0XHRcdGlzVHJ1bmNhdGVkRW5kICYmICdwci0xJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7ZXZlbnQudGl0bGV9XG5cdFx0XHRcdDwvcD5cblxuXHRcdFx0XHR7LyogUmlnaHQgY29udGludWF0aW9uIGluZGljYXRvciAqL31cblx0XHRcdFx0e2lzVHJ1bmNhdGVkRW5kICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTAgdG9wLTAgYm90dG9tLTAgdy0wLjUgYmctZm9yZWdyb3VuZC8yNVwiPjwvZGl2PlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9kaXY+XG5cdFx0KVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQndHJ1bmNhdGUgaC1mdWxsIHctZnVsbCcsXG5cdFx0XHRcdGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcFxuXHRcdFx0XHRcdD8gZGlzYWJsZUV2ZW50Q2xpY2tcblx0XHRcdFx0XHRcdD8gJ2N1cnNvci1kZWZhdWx0J1xuXHRcdFx0XHRcdFx0OiAnY3Vyc29yLXBvaW50ZXInXG5cdFx0XHRcdFx0OiAnY3Vyc29yLWdyYWInLFxuXHRcdFx0XHRpc0RyYWdnaW5nICYmXG5cdFx0XHRcdFx0IShkaXNhYmxlRHJhZyB8fCBkaXNhYmxlRHJhZ0FuZERyb3ApICYmXG5cdFx0XHRcdFx0J2N1cnNvci1ncmFiYmluZyBzaGFkb3ctbGcnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRsYXlvdXQ9e3RydWV9XG5cdFx0XHRsYXlvdXRJZD17ZWxlbWVudElkfVxuXHRcdFx0b25DbGljaz17KGUpID0+IHtcblx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRvbkV2ZW50Q2xpY2soZXZlbnQpXG5cdFx0XHR9fVxuXHRcdFx0cmVmPXtzZXROb2RlUmVmfVxuXHRcdFx0c3R5bGU9e3N0eWxlfVxuXHRcdFx0dHJhbnNpdGlvbktleT17ZWxlbWVudElkfVxuXHRcdFx0ey4uLmF0dHJpYnV0ZXN9XG5cdFx0XHR7Li4ubGlzdGVuZXJzfVxuXHRcdD5cblx0XHRcdHsvKiBVc2UgY3VzdG9tIHJlbmRlckV2ZW50IGZyb20gY29udGV4dCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB1c2UgZGVmYXVsdCAqL31cblx0XHRcdHtyZW5kZXJFdmVudCA/IHJlbmRlckV2ZW50KGV2ZW50KSA6IDxEZWZhdWx0RXZlbnRDb250ZW50IC8+fVxuXHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBEcmFnZ2FibGVFdmVudCA9IG1lbW8oXG5cdERyYWdnYWJsZUV2ZW50VW5tZW1vaXplZCxcblx0KHByZXZQcm9wcywgbmV4dFByb3BzKSA9PiB7XG5cdFx0Ly8gQ29tcGFyZSB0aGUgZXNzZW50aWFsIHByb3BzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuXHRcdHJldHVybiAoXG5cdFx0XHRwcmV2UHJvcHMuZWxlbWVudElkID09PSBuZXh0UHJvcHMuZWxlbWVudElkICYmXG5cdFx0XHRwcmV2UHJvcHMuZGlzYWJsZURyYWcgPT09IG5leHRQcm9wcy5kaXNhYmxlRHJhZyAmJlxuXHRcdFx0cHJldlByb3BzLmNsYXNzTmFtZSA9PT0gbmV4dFByb3BzLmNsYXNzTmFtZSAmJlxuXHRcdFx0cHJldlByb3BzLmV2ZW50ID09PSBuZXh0UHJvcHMuZXZlbnRcblx0XHQpXG5cdH1cbilcbiIsCiAgICAiLy8gb3hsaW50LWRpc2FibGUgbm8tbmVnYXRlZC1jb25kaXRpb25cblxuaW1wb3J0IHsgdXNlRHJvcHBhYmxlIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBESVNBQkxFRF9DRUxMX0NMQVNTTkFNRSB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBEcm9wcGFibGVDZWxsUHJvcHMge1xuXHRpZDogc3RyaW5nXG5cdHR5cGU6ICdkYXktY2VsbCcgfCAndGltZS1jZWxsJ1xuXHRkYXRlOiBkYXlqcy5EYXlqc1xuXHRob3VyPzogbnVtYmVyXG5cdG1pbnV0ZT86IG51bWJlclxuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdGFsbERheT86IGJvb2xlYW5cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllc1xuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdGRpc2FibGVkPzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gRHJvcHBhYmxlQ2VsbCh7XG5cdGlkLFxuXHR0eXBlLFxuXHRkYXRlLFxuXHRob3VyLFxuXHRtaW51dGUsXG5cdHJlc291cmNlSWQsXG5cdGFsbERheSxcblx0Y2hpbGRyZW4sXG5cdGNsYXNzTmFtZSxcblx0c3R5bGUsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG5cdGRpc2FibGVkID0gZmFsc2UsXG59OiBEcm9wcGFibGVDZWxsUHJvcHMpIHtcblx0Y29uc3Qge1xuXHRcdG9uQ2VsbENsaWNrLFxuXHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHR2aWV3LFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHsgaXNPdmVyLCBzZXROb2RlUmVmIH0gPSB1c2VEcm9wcGFibGUoe1xuXHRcdGlkLFxuXHRcdGRhdGE6IHtcblx0XHRcdHR5cGUsXG5cdFx0XHRkYXRlLFxuXHRcdFx0aG91cixcblx0XHRcdG1pbnV0ZSxcblx0XHRcdHJlc291cmNlSWQsXG5cdFx0XHRhbGxEYXksXG5cdFx0fSxcblx0XHRkaXNhYmxlZDogZGlzYWJsZURyYWdBbmREcm9wIHx8IGRpc2FibGVkLFxuXHR9KVxuXG5cdGNvbnN0IGhhbmRsZUNlbGxDbGljayA9IChlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXG5cdFx0aWYgKGRpc2FibGVDZWxsQ2xpY2sgfHwgZGlzYWJsZWQpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGNvbnN0IHN0YXJ0ID0gZGF0ZS5ob3VyKGhvdXIgPz8gMCkubWludXRlKG1pbnV0ZSA/PyAwKVxuXHRcdGxldCBlbmQgPSBzdGFydC5jbG9uZSgpXG5cdFx0aWYgKGhvdXIgIT09IHVuZGVmaW5lZCAmJiBtaW51dGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZW5kID0gZW5kLmhvdXIoaG91cikubWludXRlKG1pbnV0ZSArIDE1KSAvLyBkYXkgdmlldyB0aW1lIHNsb3RzIGFyZSAxNSBtaW51dGVzXG5cdFx0fSBlbHNlIGlmIChob3VyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGVuZCA9IGVuZC5ob3VyKGhvdXIgKyAxKS5taW51dGUoMCkgLy8gd2VlayB2aWV3IHRpbWUgc2xvdHMgYXJlIDEgaG91clxuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbmQgPSBlbmQuaG91cigyMykubWludXRlKDU5KSAvLyBtb250aCB2aWV3IGZ1bGwgZGF5XG5cdFx0fVxuXG5cdFx0b25DZWxsQ2xpY2soeyBzdGFydCwgZW5kLCByZXNvdXJjZUlkLCBhbGxEYXkgfSlcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub1N0YXRpY0VsZW1lbnRJbnRlcmFjdGlvbnM6IFRoZSBjZWxsIGlzIGludGVyYWN0aXZlIGZvciBldmVudCBjcmVhdGlvblxuXHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvdXNlS2V5V2l0aENsaWNrRXZlbnRzOiBLZXkgZXZlbnRzIGFyZSBoYW5kbGVkIGJ5IHBhcmVudCBjb21wb25lbnRzXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2Ryb3BwYWJsZS1jZWxsJyxcblx0XHRcdFx0Y2xhc3NOYW1lLFxuXHRcdFx0XHRpc092ZXIgJiYgIWRpc2FibGVEcmFnQW5kRHJvcCAmJiAhZGlzYWJsZWQgJiYgJ2JnLWFjY2VudCcsXG5cdFx0XHRcdGRpc2FibGVDZWxsQ2xpY2sgfHwgZGlzYWJsZWQgPyAnY3Vyc29yLWRlZmF1bHQnIDogJ2N1cnNvci1wb2ludGVyJyxcblx0XHRcdFx0ZGlzYWJsZWQgJiYgKGNsYXNzZXNPdmVycmlkZT8uZGlzYWJsZWRDZWxsIHx8IERJU0FCTEVEX0NFTExfQ0xBU1NOQU1FKVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtZGlzYWJsZWQ9e2Rpc2FibGVkLnRvU3RyaW5nKCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHRcdGRhdGEtdmlldz17dmlld31cblx0XHRcdG9uQ2xpY2s9e2hhbmRsZUNlbGxDbGlja31cblx0XHRcdHJlZj17c2V0Tm9kZVJlZn1cblx0XHRcdHN0eWxlPXtzdHlsZX1cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgUmVzb3VyY2VDZWxsUHJvcHMge1xuXHRyZXNvdXJjZTogUmVzb3VyY2Vcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlQ2VsbDogUmVhY3QuRkM8UmVzb3VyY2VDZWxsUHJvcHM+ID0gKHtcblx0cmVzb3VyY2UsXG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG59KSA9PiB7XG5cdGNvbnN0IHsgcmVuZGVyUmVzb3VyY2UgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG5cdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRjb2xvcjogcmVzb3VyY2UuY29sb3IsXG5cdFx0XHRcdGJhY2tncm91bmRDb2xvcjogcmVzb3VyY2UuYmFja2dyb3VuZENvbG9yLFxuXHRcdFx0fX1cblx0XHQ+XG5cdFx0XHR7cmVuZGVyUmVzb3VyY2Vcblx0XHRcdFx0PyByZW5kZXJSZXNvdXJjZShyZXNvdXJjZSlcblx0XHRcdFx0OiAoY2hpbGRyZW4gPz8gKFxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRydW5jYXRlXCI+e3Jlc291cmNlLnRpdGxlfTwvZGl2PlxuXHRcdFx0XHRcdCkpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgeyB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWRXZWVrRXZlbnRzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBFVkVOVF9CQVJfSEVJR0hUIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJQcm9wcyB7XG5cdGRheXM6IGRheWpzLkRheWpzW11cblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdGFsbERheT86IGJvb2xlYW5cbn1cblxuY29uc3QgTm9NZW1vSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllcjogUmVhY3QuRkM8XG5cdEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJQcm9wc1xuPiA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHJlc291cmNlSWQsXG5cdGRheU51bWJlckhlaWdodCxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcblx0YWxsRGF5LFxufSkgPT4ge1xuXHRjb25zdCB3ZWVrU3RhcnQgPSBkYXlzLmF0KDApLnN0YXJ0T2YoJ2RheScpXG5cblx0Y29uc3QgcHJvY2Vzc2VkV2Vla0V2ZW50cyA9IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMoe1xuXHRcdGRheXMsXG5cdFx0Z3JpZFR5cGUsXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRkYXlOdW1iZXJIZWlnaHQsXG5cdFx0YWxsRGF5LFxuXHR9KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBwb2ludGVyLWV2ZW50cy1ub25lIHotMTAgb3ZlcmZsb3ctY2xpcFwiXG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHQ+XG5cdFx0XHR7cHJvY2Vzc2VkV2Vla0V2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50S2V5ID0gYCR7ZXZlbnQuaWR9LSR7ZXZlbnQucG9zaXRpb259LSR7d2Vla1N0YXJ0LnRvSVNPU3RyaW5nKCl9LSR7cmVzb3VyY2VJZCA/PyAnbm8tcmVzb3VyY2UnfWBcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImFic29sdXRlIHotMTAgcG9pbnRlci1ldmVudHMtYXV0byBvdmVyZmxvdy1jbGlwXCJcblx0XHRcdFx0XHRcdGRhdGEtbGVmdD17ZXZlbnQubGVmdH1cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgaG9yaXpvbnRhbC1ldmVudC0ke2V2ZW50LmlkfWB9XG5cdFx0XHRcdFx0XHRkYXRhLXRvcD17ZXZlbnQudG9wfVxuXHRcdFx0XHRcdFx0ZGF0YS13aWR0aD17ZXZlbnQud2lkdGh9XG5cdFx0XHRcdFx0XHRrZXk9e2Ake2V2ZW50S2V5fS13cmFwcGVyYH1cblx0XHRcdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0XHRcdGxlZnQ6IGBjYWxjKCR7ZXZlbnQubGVmdH0lICsgdmFyKC0tc3BhY2luZykgKiAwLjI1KWAsXG5cdFx0XHRcdFx0XHRcdHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDEpYCxcblx0XHRcdFx0XHRcdFx0dG9wOiBgJHtldmVudC50b3B9cHhgLFxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IGAke0VWRU5UX0JBUl9IRUlHSFR9cHhgLFxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8RHJhZ2dhYmxlRXZlbnRcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC1mdWxsIHctZnVsbCBzaGFkb3dcIlxuXHRcdFx0XHRcdFx0XHRlbGVtZW50SWQ9e2V2ZW50S2V5fVxuXHRcdFx0XHRcdFx0XHRldmVudD17ZXZlbnR9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllciA9IG1lbW8oTm9NZW1vSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllcilcbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBnZXRQb3NpdGlvbmVkRXZlbnRzIH0gZnJvbSAnQC9saWIvdXRpbHMvcG9zaXRpb24td2Vlay1ldmVudHMnXG5cbmludGVyZmFjZSBVc2VQcm9jZXNzZWRXZWVrRXZlbnRzUHJvcHMge1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdXG5cdGFsbERheT86IGJvb2xlYW5cblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xufVxuXG5leHBvcnQgY29uc3QgdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGFsbERheSxcblx0ZGF5TnVtYmVySGVpZ2h0LFxuXHRyZXNvdXJjZUlkLFxuXHRncmlkVHlwZSxcbn06IFVzZVByb2Nlc3NlZFdlZWtFdmVudHNQcm9wcykgPT4ge1xuXHRjb25zdCB7XG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGRheU1heEV2ZW50cyxcblx0XHRldmVudFNwYWNpbmcsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgd2Vla1N0YXJ0ID0gZGF5cy5hdCgwKS5zdGFydE9mKCdkYXknKVxuXHRjb25zdCB3ZWVrRW5kID0gZGF5cy5hdCgtMSkuZW5kT2YoJ2RheScpXG5cblx0Y29uc3QgZXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0bGV0IHdlZWtFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uod2Vla1N0YXJ0LCB3ZWVrRW5kKVxuXHRcdGlmIChyZXNvdXJjZUlkKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZUV2ZW50cyA9IGdldEV2ZW50c0ZvclJlc291cmNlKHJlc291cmNlSWQpXG5cdFx0XHR3ZWVrRXZlbnRzID0gd2Vla0V2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PlxuXHRcdFx0XHRyZXNvdXJjZUV2ZW50cy5zb21lKChlKSA9PiBTdHJpbmcoZS5pZCkgPT09IFN0cmluZyhldmVudC5pZCkpXG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0aWYgKGFsbERheSkge1xuXHRcdFx0d2Vla0V2ZW50cyA9IHdlZWtFdmVudHMuZmlsdGVyKChlKSA9PiAhIWUuYWxsRGF5ID09PSBhbGxEYXkpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHdlZWtFdmVudHNcblx0fSwgW1xuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHR3ZWVrU3RhcnQsXG5cdFx0d2Vla0VuZCxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGFsbERheSxcblx0XSlcblxuXHQvLyBHZXQgYWxsIGV2ZW50cyB0aGF0IGludGVyc2VjdCB3aXRoIHRoaXMgd2Vla1xuXHRjb25zdCBwb3NpdGlvbmVkRXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0cmV0dXJuIGdldFBvc2l0aW9uZWRFdmVudHMoe1xuXHRcdFx0ZGF5cyxcblx0XHRcdGV2ZW50cyxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGRheU51bWJlckhlaWdodCxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdH0pXG5cdH0sIFtkYXlzLCBkYXlNYXhFdmVudHMsIGRheU51bWJlckhlaWdodCwgZXZlbnRTcGFjaW5nLCBldmVudHMsIGdyaWRUeXBlXSlcblxuXHRyZXR1cm4gcG9zaXRpb25lZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQge1xuXHREQVlfTlVNQkVSX0hFSUdIVCxcblx0RVZFTlRfQkFSX0hFSUdIVCxcblx0R0FQX0JFVFdFRU5fRUxFTUVOVFMsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcblxuaW50ZXJmYWNlIFBvc2l0aW9uZWRFdmVudCBleHRlbmRzIENhbGVuZGFyRXZlbnQge1xuXHRsZWZ0OiBudW1iZXIgLy8gTGVmdCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdHdpZHRoOiBudW1iZXIgLy8gV2lkdGggaW4gcGVyY2VudGFnZVxuXHR0b3A6IG51bWJlciAvLyBUb3AgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuXHRoZWlnaHQ6IG51bWJlciAvLyBIZWlnaHQgaW4gcGVyY2VudGFnZVxuXHRwb3NpdGlvbjogbnVtYmVyIC8vIFBvc2l0aW9uIGluIHRoZSByb3cgKDAgZm9yIGZpcnN0LCAxIGZvciBzZWNvbmQsIGV0Yy4pXG5cdGlzVHJ1bmNhdGVkU3RhcnQ6IGJvb2xlYW4gLy8gV2hldGhlciB0aGUgZXZlbnQgaXMgdHJ1bmNhdGVkIGF0IHRoZSBzdGFydFxuXHRpc1RydW5jYXRlZEVuZDogYm9vbGVhbiAvLyBXaGV0aGVyIHRoZSBldmVudCBpcyB0cnVuY2F0ZWQgYXQgdGhlIGVuZFxufVxuXG5pbnRlcmZhY2UgR2V0UG9zaXRpb25lZEV2ZW50c1Byb3BzIHtcblx0ZGF5czogZGF5anMuRGF5anNbXVxuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRkYXlNYXhFdmVudHM6IG51bWJlclxuXHRkYXlOdW1iZXJIZWlnaHQ/OiBudW1iZXJcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJyAvLyBGdXR1cmUgdXNlIGZvciBkaWZmZXJlbnQgZ3JpZCB0eXBlc1xuXHRldmVudFNwYWNpbmc/OiBudW1iZXIgLy8gQ3VzdG9tIHZlcnRpY2FsIHNwYWNpbmcgYmV0d2VlbiBldmVudHMgKGRlZmF1bHRzIHRvIEdBUF9CRVRXRUVOX0VMRU1FTlRTKVxufVxuXG5leHBvcnQgY29uc3QgZ2V0UG9zaXRpb25lZEV2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGV2ZW50cyxcblx0ZGF5TWF4RXZlbnRzLFxuXHRkYXlOdW1iZXJIZWlnaHQgPSBEQVlfTlVNQkVSX0hFSUdIVCxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG59OiBHZXRQb3NpdGlvbmVkRXZlbnRzUHJvcHMpID0+IHtcblx0Ly8gRm9yIGhvdXItYmFzZWQgZ3JpZHMsIHVzZSBhY3R1YWwgZmlyc3QvbGFzdCBob3VycyBmcm9tIGRheXMgYXJyYXlcblx0Ly8gRm9yIGRheS1iYXNlZCBncmlkcywgdXNlIHN0YXJ0L2VuZCBvZiBkYXkgdG8gY2FwdHVyZSBhbGwgZXZlbnRzXG5cdGNvbnN0IGZpcnN0RGF5ID1cblx0XHRncmlkVHlwZSA9PT0gJ2hvdXInID8gZGF5cy5hdCgwKS5zdGFydE9mKCdob3VyJykgOiBkYXlzLmF0KDApLnN0YXJ0T2YoJ2RheScpXG5cdGNvbnN0IGxhc3REYXkgPVxuXHRcdGdyaWRUeXBlID09PSAnaG91cicgPyBkYXlzLmF0KC0xKS5lbmRPZignaG91cicpIDogZGF5cy5hdCgtMSkuZW5kT2YoJ2RheScpXG5cdGNvbnN0IGRheUNvdW50ID0gZGF5cy5sZW5ndGhcblxuXHQvLyBTZXBhcmF0ZSBtdWx0aS1kYXkgYW5kIHNpbmdsZS1kYXkgZXZlbnRzXG5cdGNvbnN0IG11bHRpRGF5RXZlbnRzID0gZXZlbnRzLmZpbHRlcigoZSkgPT4gZS5lbmQuZGlmZihlLnN0YXJ0LCBncmlkVHlwZSkgPiAwKVxuXHRjb25zdCBzaW5nbGVEYXlFdmVudHMgPSBldmVudHMuZmlsdGVyKFxuXHRcdChlKSA9PiBlLmVuZC5kaWZmKGUuc3RhcnQsIGdyaWRUeXBlKSA9PT0gMFxuXHQpXG5cblx0Ly8gU29ydCBtdWx0aS1kYXkgZXZlbnRzIGJ5IHN0YXJ0IGRhdGUsIHRoZW4gYnkgZHVyYXRpb25cblx0Y29uc3Qgc29ydGVkTXVsdGlEYXkgPSBbLi4ubXVsdGlEYXlFdmVudHNdLnNvcnQoKGEsIGIpID0+IHtcblx0XHRjb25zdCBzdGFydERpZmYgPSBhLnN0YXJ0LmRpZmYoYi5zdGFydClcblx0XHRpZiAoc3RhcnREaWZmICE9PSAwKSB7XG5cdFx0XHRyZXR1cm4gc3RhcnREaWZmXG5cdFx0fVxuXHRcdHJldHVybiBiLmVuZC5kaWZmKGIuc3RhcnQpIC0gYS5lbmQuZGlmZihhLnN0YXJ0KSAvLyBMb25nZXIgZXZlbnRzIGZpcnN0XG5cdH0pXG5cblx0Ly8gU29ydCBzaW5nbGUtZGF5IGV2ZW50cyBieSBzdGFydCB0aW1lXG5cdGNvbnN0IHNvcnRlZFNpbmdsZURheSA9IFsuLi5zaW5nbGVEYXlFdmVudHNdLnNvcnQoKGEsIGIpID0+XG5cdFx0YS5zdGFydC5kaWZmKGIuc3RhcnQpXG5cdClcblxuXHQvLyBDcmVhdGUgZGF5Q291bnQgeCBkYXlNYXhFdmVudHMgZ3JpZCB3aXRoIGZsYWdzXG5cdGNvbnN0IGdyaWQ6IHsgdGFrZW46IGJvb2xlYW47IGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbCB9W11bXSA9IFtdXG5cdGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGRheU1heEV2ZW50czsgcm93KyspIHtcblx0XHRncmlkW3Jvd10gPSBbXVxuXHRcdGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IGRheUNvdW50OyBjb2wrKykge1xuXHRcdFx0Z3JpZFtyb3ddW2NvbF0gPSB7IHRha2VuOiBmYWxzZSwgZXZlbnQ6IG51bGwgfVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHByb2Nlc3NlZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W10gPSBbXVxuXG5cdC8vIFN0ZXAgMTogQXNzaWduIHBvc2l0aW9ucyB0byBtdWx0aS1kYXkgZXZlbnRzIGZpcnN0XG5cdGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkTXVsdGlEYXkpIHtcblx0XHRjb25zdCBldmVudFN0YXJ0ID0gZGF5anMubWF4KGV2ZW50LnN0YXJ0LnN0YXJ0T2YoZ3JpZFR5cGUpLCBmaXJzdERheSlcblx0XHRjb25zdCBhZGp1c3RlZEVuZCA9XG5cdFx0XHRncmlkVHlwZSA9PT0gJ2hvdXInID8gZXZlbnQuZW5kLnN1YnRyYWN0KDEsICdtaW51dGUnKSA6IGV2ZW50LmVuZFxuXHRcdGNvbnN0IGV2ZW50RW5kID0gZGF5anMubWluKGFkanVzdGVkRW5kLnN0YXJ0T2YoZ3JpZFR5cGUpLCBsYXN0RGF5KVxuXHRcdGNvbnN0IHN0YXJ0Q29sID0gTWF0aC5tYXgoMCwgZXZlbnRTdGFydC5kaWZmKGZpcnN0RGF5LCBncmlkVHlwZSkpXG5cdFx0Y29uc3QgZW5kQ29sID0gTWF0aC5taW4oZGF5Q291bnQgLSAxLCBldmVudEVuZC5kaWZmKGZpcnN0RGF5LCBncmlkVHlwZSkpXG5cblx0XHQvLyBEZXRlY3QgaWYgZXZlbnQgaXMgdHJ1bmNhdGVkIGF0IHRoZSBib3VuZGFyaWVzXG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRTdGFydCA9IGV2ZW50LnN0YXJ0LnN0YXJ0T2YoZ3JpZFR5cGUpLmlzQmVmb3JlKGZpcnN0RGF5KVxuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkRW5kID0gZXZlbnQuZW5kLnN0YXJ0T2YoZ3JpZFR5cGUpLmlzQWZ0ZXIobGFzdERheSlcblxuXHRcdC8vIFRyeSB0byBwbGFjZSB0aGUgZXZlbnQgc3RhcnRpbmcgZnJvbSBpdHMgb3JpZ2luYWwgc3RhcnQgY29sdW1uXG5cdFx0bGV0IHBsYWNlZFN1Y2Nlc3NmdWxseSA9IGZhbHNlXG5cblx0XHQvLyBGaXJzdCB0cnk6IHBsYWNlIGZyb20gb3JpZ2luYWwgc3RhcnQgcG9zaXRpb25cblx0XHRsZXQgYXNzaWduZWRSb3cgPSAtMVxuXHRcdGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGRheU1heEV2ZW50czsgcm93KyspIHtcblx0XHRcdGxldCBjYW5QbGFjZSA9IHRydWVcblx0XHRcdGZvciAobGV0IGNvbCA9IHN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuXHRcdFx0XHRpZiAoZ3JpZFtyb3ddW2NvbF0udGFrZW4pIHtcblx0XHRcdFx0XHRjYW5QbGFjZSA9IGZhbHNlXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGNhblBsYWNlKSB7XG5cdFx0XHRcdGFzc2lnbmVkUm93ID0gcm93XG5cdFx0XHRcdGJyZWFrXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZm91bmQgYSByb3csIGFzc2lnbiB0aGUgZXZlbnQgdG8gYWxsIGl0cyBjb2x1bW5zXG5cdFx0aWYgKGFzc2lnbmVkUm93ICE9PSAtMSkge1xuXHRcdFx0Zm9yIChsZXQgY29sID0gc3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG5cdFx0XHRcdGdyaWRbYXNzaWduZWRSb3ddW2NvbF0gPSB7IHRha2VuOiB0cnVlLCBldmVudCB9XG5cdFx0XHR9XG5cblx0XHRcdC8vIENyZWF0ZSBwb3NpdGlvbiBkYXRhIGZvciByZW5kZXJpbmdcblx0XHRcdGNvbnN0IHNwYW5EYXlzID0gZW5kQ29sIC0gc3RhcnRDb2wgKyAxXG5cdFx0XHRwcm9jZXNzZWRFdmVudHMucHVzaCh7XG5cdFx0XHRcdGxlZnQ6IChzdGFydENvbCAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdFx0d2lkdGg6IChzcGFuRGF5cyAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdFx0dG9wOlxuXHRcdFx0XHRcdGRheU51bWJlckhlaWdodCArXG5cdFx0XHRcdFx0ZXZlbnRTcGFjaW5nICtcblx0XHRcdFx0XHRhc3NpZ25lZFJvdyAqIChFVkVOVF9CQVJfSEVJR0hUICsgZXZlbnRTcGFjaW5nKSxcblx0XHRcdFx0aGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuXHRcdFx0XHRwb3NpdGlvbjogYXNzaWduZWRSb3csXG5cdFx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0XHRpc1RydW5jYXRlZFN0YXJ0LFxuXHRcdFx0XHRpc1RydW5jYXRlZEVuZCxcblx0XHRcdH0gYXMgUG9zaXRpb25lZEV2ZW50KVxuXHRcdFx0cGxhY2VkU3VjY2Vzc2Z1bGx5ID0gdHJ1ZVxuXHRcdH1cblxuXHRcdC8vIElmIGNvdWxkbid0IHBsYWNlIGF0IG9yaWdpbmFsIHBvc2l0aW9uLCB0cnkgdHJ1bmNhdGVkIHZlcnNpb25zIHN0YXJ0aW5nIGZyb20gbGF0ZXIgZGF5c1xuXHRcdGlmICghcGxhY2VkU3VjY2Vzc2Z1bGx5KSB7XG5cdFx0XHRmb3IgKFxuXHRcdFx0XHRsZXQgdHJ5U3RhcnRDb2wgPSBzdGFydENvbCArIDE7XG5cdFx0XHRcdHRyeVN0YXJ0Q29sIDw9IGVuZENvbDtcblx0XHRcdFx0dHJ5U3RhcnRDb2wrK1xuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIFRyeSB0byBwbGFjZSB0aGUgdHJ1bmNhdGVkIGV2ZW50IHN0YXJ0aW5nIGZyb20gdGhpcyBjb2x1bW5cblx0XHRcdFx0bGV0IHRydW5jYXRlZEFzc2lnbmVkUm93ID0gLTFcblx0XHRcdFx0Zm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuXHRcdFx0XHRcdGxldCBjYW5QbGFjZSA9IHRydWVcblx0XHRcdFx0XHRmb3IgKGxldCBjb2wgPSB0cnlTdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdFx0XHRcdGlmIChncmlkW3Jvd11bY29sXS50YWtlbikge1xuXHRcdFx0XHRcdFx0XHRjYW5QbGFjZSA9IGZhbHNlXG5cdFx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChjYW5QbGFjZSkge1xuXHRcdFx0XHRcdFx0dHJ1bmNhdGVkQXNzaWduZWRSb3cgPSByb3dcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgd2UgZm91bmQgYSByb3cgZm9yIHRoZSB0cnVuY2F0ZWQgdmVyc2lvbiwgcGxhY2UgaXRcblx0XHRcdFx0aWYgKHRydW5jYXRlZEFzc2lnbmVkUm93ICE9PSAtMSkge1xuXHRcdFx0XHRcdGZvciAobGV0IGNvbCA9IHRyeVN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuXHRcdFx0XHRcdFx0Z3JpZFt0cnVuY2F0ZWRBc3NpZ25lZFJvd11bY29sXSA9IHsgdGFrZW46IHRydWUsIGV2ZW50IH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgdGhlIHRydW5jYXRlZCByZW5kZXJpbmdcblx0XHRcdFx0XHRjb25zdCB0cnVuY2F0ZWRTcGFuRGF5cyA9IGVuZENvbCAtIHRyeVN0YXJ0Q29sICsgMVxuXHRcdFx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcblx0XHRcdFx0XHRcdGxlZnQ6ICh0cnlTdGFydENvbCAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdFx0XHRcdHdpZHRoOiAodHJ1bmNhdGVkU3BhbkRheXMgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdFx0XHR0b3A6XG5cdFx0XHRcdFx0XHRcdGRheU51bWJlckhlaWdodCArXG5cdFx0XHRcdFx0XHRcdGV2ZW50U3BhY2luZyArXG5cdFx0XHRcdFx0XHRcdHRydW5jYXRlZEFzc2lnbmVkUm93ICogKEVWRU5UX0JBUl9IRUlHSFQgKyBldmVudFNwYWNpbmcpLFxuXHRcdFx0XHRcdFx0aGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuXHRcdFx0XHRcdFx0cG9zaXRpb246IHRydW5jYXRlZEFzc2lnbmVkUm93LFxuXHRcdFx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdFx0XHRpc1RydW5jYXRlZFN0YXJ0OiB0cnVlLCAvLyBBbHdheXMgdHJ1bmNhdGVkIGF0IHN0YXJ0IHdoZW4gdXNpbmcgdGhpcyBmYWxsYmFjayBsb2dpY1xuXHRcdFx0XHRcdFx0aXNUcnVuY2F0ZWRFbmQsXG5cdFx0XHRcdFx0fSBhcyBQb3NpdGlvbmVkRXZlbnQpXG5cdFx0XHRcdFx0cGxhY2VkU3VjY2Vzc2Z1bGx5ID0gdHJ1ZVxuXHRcdFx0XHRcdGJyZWFrIC8vIFN1Y2Nlc3NmdWxseSBwbGFjZWQsIHN0b3AgdHJ5aW5nIG90aGVyIHN0YXJ0IHBvc2l0aW9uc1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gU3RlcCAyOiBGaWxsIGdhcHMgd2l0aCBzaW5nbGUtZGF5IGV2ZW50c1xuXHRmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZFNpbmdsZURheSkge1xuXHRcdGNvbnN0IGV2ZW50U3RhcnQgPSBkYXlqcy5tYXgoZXZlbnQuc3RhcnQuc3RhcnRPZihncmlkVHlwZSksIGZpcnN0RGF5KVxuXHRcdC8vIENsYW1wIGNvbCB0byB2YWxpZCBncmlkIGJvdW5kcyB0byBwcmV2ZW50IGFjY2Vzc2luZyB1bmRlZmluZWQgZ3JpZCBwb3NpdGlvbnNcblx0XHRjb25zdCBjb2wgPSBNYXRoLm1heChcblx0XHRcdDAsXG5cdFx0XHRNYXRoLm1pbihkYXlDb3VudCAtIDEsIGV2ZW50U3RhcnQuZGlmZihmaXJzdERheSwgZ3JpZFR5cGUpKVxuXHRcdClcblxuXHRcdC8vIFNpbmdsZS1kYXkgZXZlbnRzIGFyZSBub3QgdHJ1bmNhdGVkIGJ5IGRlZmluaXRpb25cblx0XHRjb25zdCBpc1RydW5jYXRlZFN0YXJ0ID0gZmFsc2Vcblx0XHRjb25zdCBpc1RydW5jYXRlZEVuZCA9IGZhbHNlXG5cblx0XHQvLyBGaW5kIHRoZSBmaXJzdCBhdmFpbGFibGUgcm93IGluIHRoaXMgY29sdW1uXG5cdFx0bGV0IGFzc2lnbmVkUm93ID0gLTFcblx0XHRmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG5cdFx0XHRpZiAoIWdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG5cdFx0XHRcdGFzc2lnbmVkUm93ID0gcm93XG5cdFx0XHRcdGJyZWFrXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZm91bmQgYSByb3csIGFzc2lnbiB0aGUgZXZlbnRcblx0XHRpZiAoYXNzaWduZWRSb3cgIT09IC0xKSB7XG5cdFx0XHRncmlkW2Fzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuXG5cdFx0XHQvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgcmVuZGVyaW5nXG5cdFx0XHRwcm9jZXNzZWRFdmVudHMucHVzaCh7XG5cdFx0XHRcdGxlZnQ6IChjb2wgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdHdpZHRoOiAoMSAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdFx0dG9wOlxuXHRcdFx0XHRcdGRheU51bWJlckhlaWdodCArXG5cdFx0XHRcdFx0ZXZlbnRTcGFjaW5nICtcblx0XHRcdFx0XHRhc3NpZ25lZFJvdyAqIChFVkVOVF9CQVJfSEVJR0hUICsgZXZlbnRTcGFjaW5nKSxcblx0XHRcdFx0aGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuXHRcdFx0XHRwb3NpdGlvbjogYXNzaWduZWRSb3csXG5cdFx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0XHRpc1RydW5jYXRlZFN0YXJ0LFxuXHRcdFx0XHRpc1RydW5jYXRlZEVuZCxcblx0XHRcdH0gYXMgUG9zaXRpb25lZEV2ZW50KVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBwcm9jZXNzZWRFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIEFsbERheUNlbGxQcm9wcyB7XG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBOb01lbW9BbGxEYXlDZWxsOiBSZWFjdC5GQzxBbGxEYXlDZWxsUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcblx0Y29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J3ctMTYgYm9yZGVyLXIgc2hyaW5rLTAgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgc206dGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0PlxuXHRcdFx0e3QoJ2FsbERheScpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBBbGxEYXlDZWxsID0gbWVtbyhOb01lbW9BbGxEYXlDZWxsKVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgR3JpZENlbGwgfSBmcm9tICcuLi9ncmlkLWNlbGwnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWRFdmVudHNMYXllciB9IGZyb20gJy4vdmVydGljYWwtZ3JpZC1ldmVudHMtbGF5ZXInXG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVydGljYWxHcmlkQ29sUHJvcHMge1xuXHRpZDogc3RyaW5nXG5cdGRheTogZGF5anMuRGF5anNcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRyZXNvdXJjZT86IFJlc291cmNlXG5cdGRheXM6IGRheWpzLkRheWpzW10gLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGNvbHVtbiByZXByZXNlbnRzXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0cmVuZGVySGVhZGVyPzogKCkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdHJlbmRlckNlbGw/OiAoZGF0ZTogZGF5anMuRGF5anMpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRub0V2ZW50cz86IGJvb2xlYW5cblx0LyoqIE9wdGlvbmFsIGFycmF5IG9mIG1pbnV0ZSBzbG90cyBieSB3aGljaCB0aGUgaG91ciBpcyBkaXZpZGVkXG5cdCAqIGUuZy4sIFswLCAxNSwgMzAsIDQ1XSBmb3IgcXVhcnRlci1ob3VyIHNsb3RzXG5cdCAqL1xuXHRjZWxsU2xvdHM/OiBudW1iZXJbXVxuXHQvKiogV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNvbHVtbiBpbiB0aGUgZ3JpZCAqL1xuXHRpc0xhc3RDb2x1bW4/OiBib29sZWFuXG59XG5cbmNvbnN0IE5vTWVtb1ZlcnRpY2FsR3JpZENvbDogUmVhY3QuRkM8VmVydGljYWxHcmlkQ29sUHJvcHM+ID0gKHtcblx0aWQsXG5cdGRheXMsXG5cdHJlc291cmNlSWQsXG5cdHJlc291cmNlLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxuXHRncmlkVHlwZSxcblx0Y2xhc3NOYW1lLFxuXHRyZW5kZXJDZWxsLFxuXHRub0V2ZW50cyxcblx0Y2VsbFNsb3RzID0gWzYwXSwgLy8gRGVmYXVsdCB0byBmdWxsIGhvdXIgc2xvdHNcblx0aXNMYXN0Q29sdW1uLFxufSkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGZsZXgtY29sIGZsZXgtMSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWluLXctNTAgYmctYmFja2dyb3VuZCByZWxhdGl2ZScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkIHx8IGB2ZXJ0aWNhbC1jb2wtJHtpZH1gfVxuXHRcdD5cblx0XHRcdHsvKiBUaW1lIHNsb3RzICovfVxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgcmVsYXRpdmUgZ3JpZFwiXG5cdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0Z3JpZFRlbXBsYXRlUm93czogYHJlcGVhdCgke2RheXMubGVuZ3RofSwgbWlubWF4KDAsIDFmcikpYCxcblx0XHRcdFx0fX1cblx0XHRcdD5cblx0XHRcdFx0e2RheXMubWFwKChkYXksIGRheUluZGV4KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgaG91clN0ciA9IGRheS5mb3JtYXQoJ0hIJylcblx0XHRcdFx0XHRjb25zdCBkYXRlU3RyID0gZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpXG5cblx0XHRcdFx0XHRpZiAocmVuZGVyQ2VsbCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgdGVzdElkID1cblx0XHRcdFx0XHRcdFx0aWQgPT09ICd0aW1lLWNvbCdcblx0XHRcdFx0XHRcdFx0XHQ/IGB2ZXJ0aWNhbC10aW1lLSR7aG91clN0cn1gXG5cdFx0XHRcdFx0XHRcdFx0OiBgdmVydGljYWwtY2VsbC0ke2RhdGVTdHJ9LSR7aG91clN0cn0tMDAke3Jlc291cmNlSWQgPyBgLSR7cmVzb3VyY2VJZH1gIDogJyd9YFxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtWzYwcHhdIGJvcmRlci1iIGJvcmRlci1yXCJcblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17dGVzdElkfVxuXHRcdFx0XHRcdFx0XHRcdGtleT17YCR7aWR9LSR7ZGF5SW5kZXh9LSR7aG91clN0cn1gfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e3JlbmRlckNlbGwoZGF5KX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGNlbGxTbG90cy5tYXAoKG1pbnV0ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgbSA9IG1pbnV0ZSA9PT0gNjAgPyB1bmRlZmluZWQgOiBtaW51dGVcblx0XHRcdFx0XHRcdGNvbnN0IG1tID0gbSA9PT0gdW5kZWZpbmVkID8gJzAwJyA6IFN0cmluZyhtKS5wYWRTdGFydCgyLCAnMCcpXG5cdFx0XHRcdFx0XHRjb25zdCB0ZXN0SWQgPSBgdmVydGljYWwtY2VsbC0ke2RhdGVTdHJ9LSR7aG91clN0cn0tJHttbX0ke3Jlc291cmNlSWQgPyBgLSR7cmVzb3VyY2VJZH1gIDogJyd9YFxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J2hvdmVyOmJnLWFjY2VudCByZWxhdGl2ZSB6LTEwIGgtWzYwcHhdIGN1cnNvci1wb2ludGVyIGJvcmRlci1iJyxcblx0XHRcdFx0XHRcdFx0XHRcdG1pbnV0ZSA9PT0gNjAgPyAnJyA6ICdib3JkZXItZGFzaGVkIGgtWzE1cHhdIG1pbi1oLVsxNXB4XScsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RDb2x1bW4gPyAnYm9yZGVyLXItMCcgOiAnYm9yZGVyLXInXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17dGVzdElkfVxuXHRcdFx0XHRcdFx0XHRcdGRheT17bSA/IGRheS5taW51dGUobSkgOiBkYXl9XG5cdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdGhvdXI9e2RheS5ob3VyKCl9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtpZH0tJHtkYXlJbmRleH0tJHttbX1gfVxuXHRcdFx0XHRcdFx0XHRcdG1pbnV0ZT17bX1cblx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZUlkfSAvLyBFdmVudHMgYXJlIHJlbmRlcmVkIGluIGEgc2VwYXJhdGUgbGF5ZXJcblx0XHRcdFx0XHRcdFx0XHRzaG91bGRSZW5kZXJFdmVudHM9e2ZhbHNlfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0pfVxuXG5cdFx0XHRcdHsvKiBFdmVudCBibG9ja3MgbGF5ZXIgKi99XG5cdFx0XHRcdHshbm9FdmVudHMgJiYgKFxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCB6LTEwIHBvaW50ZXItZXZlbnRzLW5vbmVcIj5cblx0XHRcdFx0XHRcdDxWZXJ0aWNhbEdyaWRFdmVudHNMYXllclxuXHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHZlcnRpY2FsLWV2ZW50cy0ke2lkfWB9XG5cdFx0XHRcdFx0XHRcdGRheXM9e2RheXN9XG5cdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZUlkfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0KX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBWZXJ0aWNhbEdyaWRDb2wgPSBtZW1vKFxuXHROb01lbW9WZXJ0aWNhbEdyaWRDb2xcbikgYXMgdHlwZW9mIE5vTWVtb1ZlcnRpY2FsR3JpZENvbFxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDdXJyZW50VGltZUluZGljYXRvciB9IGZyb20gJ0AvY29tcG9uZW50cy9jdXJyZW50LXRpbWUtaW5kaWNhdG9yJ1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7IHVzZVByb2Nlc3NlZERheUV2ZW50cyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvaG9va3MvdXNlUHJvY2Vzc2VkRGF5RXZlbnRzJ1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBWZXJ0aWNhbEdyaWRFdmVudHNMYXllclByb3BzIHtcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBsYXllciByZXByZXNlbnRzXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG59XG5cbmNvbnN0IE5vTWVtb1ZlcnRpY2FsR3JpZEV2ZW50c0xheWVyOiBSZWFjdC5GQzxWZXJ0aWNhbEdyaWRFdmVudHNMYXllclByb3BzPiA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2hvdXInLFxuXHRyZXNvdXJjZUlkLFxuXHRyZXNvdXJjZSxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcbn0pID0+IHtcblx0Y29uc3QgdG9kYXlFdmVudHMgPSB1c2VQcm9jZXNzZWREYXlFdmVudHMoeyBkYXlzLCBncmlkVHlwZSwgcmVzb3VyY2VJZCB9KVxuXHRjb25zdCByYW5nZVN0YXJ0ID0gZGF5cy5hdCgwKVxuXHRjb25zdCByYW5nZUVuZCA9IGRheXMuYXQoLTEpPy5hZGQoMSwgZ3JpZFR5cGUpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHBvaW50ZXItZXZlbnRzLW5vbmUgei0xMCBvdmVyZmxvdy1jbGlwXCJcblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkfVxuXHRcdD5cblx0XHRcdHtyYW5nZVN0YXJ0ICYmIHJhbmdlRW5kICYmIChcblx0XHRcdFx0PEN1cnJlbnRUaW1lSW5kaWNhdG9yXG5cdFx0XHRcdFx0cmFuZ2VFbmQ9e3JhbmdlRW5kfVxuXHRcdFx0XHRcdHJhbmdlU3RhcnQ9e3JhbmdlU3RhcnR9XG5cdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHQvPlxuXHRcdFx0KX1cblx0XHRcdHt0b2RheUV2ZW50cy5tYXAoKGV2ZW50LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBldmVudEtleSA9IGBldmVudC0ke2V2ZW50LmlkfS0ke2luZGV4fS0ke2RheXMuYXQoMCkudG9JU09TdHJpbmcoKX0tJHtyZXNvdXJjZUlkID8/ICduby1yZXNvdXJjZSd9YFxuXHRcdFx0XHRjb25zdCBpc1Nob3J0RXZlbnQgPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydCwgJ21pbnV0ZScpIDw9IDE1XG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJhYnNvbHV0ZVwiXG5cdFx0XHRcdFx0XHRrZXk9e2Ake2V2ZW50S2V5fS13cmFwcGVyYH1cblx0XHRcdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0XHRcdGxlZnQ6IGAke2V2ZW50LmxlZnR9JWAsXG5cdFx0XHRcdFx0XHRcdHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDIpYCxcblx0XHRcdFx0XHRcdFx0dG9wOiBgJHtldmVudC50b3B9JWAsXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogYCR7ZXZlbnQuaGVpZ2h0fSVgLFxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8RHJhZ2dhYmxlRXZlbnRcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbigncG9pbnRlci1ldmVudHMtYXV0bycsIHtcblx0XHRcdFx0XHRcdFx0XHQnWyZfcF06dGV4dC1bMTBweF0gWyZfcF06bXQtMCc6IGlzU2hvcnRFdmVudCxcblx0XHRcdFx0XHRcdFx0fSl9XG5cdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17ZXZlbnRLZXl9XG5cdFx0XHRcdFx0XHRcdGV2ZW50PXtldmVudH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBWZXJ0aWNhbEdyaWRFdmVudHNMYXllciA9IG1lbW8oTm9NZW1vVmVydGljYWxHcmlkRXZlbnRzTGF5ZXIpXG4iLAogICAgImltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcbmltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5pbnRlcmZhY2UgQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyB7XG5cdC8qKiBUaGUgc3RhcnQgZGF0ZS90aW1lIG9mIHRoZSBjb250YWluZXIncyB0aW1lbGluZSAoZS5nLiwgdG9wIG9mIHRoZSBjb2x1bW4pICovXG5cdHJhbmdlU3RhcnQ6IGRheWpzLkRheWpzXG5cdC8qKiBUaGUgZW5kIGRhdGUvdGltZSBvZiB0aGUgY29udGFpbmVyJ3MgdGltZWxpbmUgKGUuZy4sIGJvdHRvbSBvZiB0aGUgY29sdW1uKSAqL1xuXHRyYW5nZUVuZDogZGF5anMuRGF5anNcblx0LyoqIE9wdGlvbmFsIHJlZmVyZW5jZSB0aW1lIGZvciBcIm5vd1wiICh1c2VmdWwgZm9yIHRlc3RpbmcpICovXG5cdG5vdz86IGRheWpzLkRheWpzXG5cdC8qKiBUaGUgcmVzb3VyY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29sdW1uIChvcHRpb25hbCkgKi9cblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBob3Jpem9udGFsIHJlZCBsaW5lIGluZGljYXRpbmcgdGhlIGN1cnJlbnQgdGltZSByZWxhdGl2ZSB0byBhIHZlcnRpY2FsIGNvbnRhaW5lcidzIHRpbWVsaW5lLlxuICogVGhlIGluZGljYXRvciBoYW5kbGVzIGl0cyBvd24gdmlzaWJpbGl0eSBiYXNlZCBvbiB3aGV0aGVyICdub3cnIGZhbGxzIHdpdGhpbiB0aGUgcHJvdmlkZWQgcmFuZ2UuXG4gKiBTdXBwb3J0cyBjdXN0b20gcmVuZGVyaW5nIHZpYSByZW5kZXJDdXJyZW50VGltZUluZGljYXRvciBmcm9tIGNvbnRleHQuXG4gKi9cbmNvbnN0IE5vTWVtb0N1cnJlbnRUaW1lSW5kaWNhdG9yID0gKHtcblx0cmFuZ2VTdGFydCxcblx0cmFuZ2VFbmQsXG5cdG5vdzogcHJvcE5vdyxcblx0cmVzb3VyY2UsXG59OiBDdXJyZW50VGltZUluZGljYXRvclByb3BzKSA9PiB7XG5cdC8vIEdldCByZW5kZXIgZnVuY3Rpb24gYW5kIGN1cnJlbnQgdmlldyBmcm9tIGNvbnRleHRcblx0Y29uc3QgeyByZW5kZXJDdXJyZW50VGltZUluZGljYXRvciwgdmlldyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoXG5cdFx0KHN0YXRlKSA9PiAoe1xuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3I6IHN0YXRlLnJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRcdFx0dmlldzogc3RhdGUudmlldyxcblx0XHR9KVxuXHQpXG5cblx0Y29uc3Qgbm93ID0gcHJvcE5vdyA/PyBkYXlqcygpXG5cblx0Ly8gQ2hlY2sgaWYgY3VycmVudCB0aW1lIGZhbGxzIHdpdGhpbiB0aGlzIHJhbmdlXG5cdGNvbnN0IGlzV2l0aGluUmFuZ2UgPSBub3cuaXNTYW1lT3JBZnRlcihyYW5nZVN0YXJ0KSAmJiBub3cuaXNCZWZvcmUocmFuZ2VFbmQpXG5cblx0aWYgKCFpc1dpdGhpblJhbmdlKSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXG5cdGNvbnN0IHRvdGFsRHVyYXRpb24gPSByYW5nZUVuZC5kaWZmKHJhbmdlU3RhcnQsICdtaW51dGUnKVxuXHRjb25zdCBtaW51dGVzRnJvbVN0YXJ0ID0gbm93LmRpZmYocmFuZ2VTdGFydCwgJ21pbnV0ZScpXG5cdGNvbnN0IHByb2dyZXNzID0gKG1pbnV0ZXNGcm9tU3RhcnQgLyB0b3RhbER1cmF0aW9uKSAqIDEwMFxuXG5cdC8vIElmIGN1c3RvbSByZW5kZXIgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdmlhIGNvbnRleHQsIHVzZSBpdFxuXHRpZiAocmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PD5cblx0XHRcdFx0e3JlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yKHtcblx0XHRcdFx0XHRjdXJyZW50VGltZTogbm93LFxuXHRcdFx0XHRcdHJhbmdlU3RhcnQsXG5cdFx0XHRcdFx0cmFuZ2VFbmQsXG5cdFx0XHRcdFx0cHJvZ3Jlc3MsXG5cdFx0XHRcdFx0cmVzb3VyY2UsXG5cdFx0XHRcdFx0dmlldyxcblx0XHRcdFx0fSl9XG5cdFx0XHQ8Lz5cblx0XHQpXG5cdH1cblxuXHQvLyBEZWZhdWx0IGluZGljYXRvciByZW5kZXJpbmdcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJhYnNvbHV0ZSBsZWZ0LTAgcmlnaHQtMCBoLTAuNSBiZy1yZWQtNTAwIHotNTAgcG9pbnRlci1ldmVudHMtbm9uZVwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImN1cnJlbnQtdGltZS1pbmRpY2F0b3JcIlxuXHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0dG9wOiBgJHtwcm9ncmVzc30lYCxcblx0XHRcdH19XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgQ3VycmVudFRpbWVJbmRpY2F0b3IgPSBtZW1vKE5vTWVtb0N1cnJlbnRUaW1lSW5kaWNhdG9yKVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7XG5cdGdldFBvc2l0aW9uZWREYXlFdmVudHMsXG5cdHR5cGUgUG9zaXRpb25lZEV2ZW50LFxufSBmcm9tICdAL2xpYi91dGlscy9wb3NpdGlvbi1kYXktZXZlbnRzJ1xuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkRGF5RXZlbnRzUHJvcHMge1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IHVzZVByb2Nlc3NlZERheUV2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlLFxuXHRyZXNvdXJjZUlkLFxufTogVXNlUHJvY2Vzc2VkRGF5RXZlbnRzUHJvcHMpID0+IHtcblx0Y29uc3QgeyBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIGdldEV2ZW50c0ZvclJlc291cmNlIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgZGF5U3RhcnQgPSBkYXlzLmF0KDApLnN0YXJ0T2YoJ2RheScpXG5cdGNvbnN0IGRheUVuZCA9IGRheXMuYXQoLTEpLmVuZE9mKCdkYXknKVxuXG5cdGNvbnN0IGV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGxldCBkYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoZGF5U3RhcnQsIGRheUVuZClcblx0XHRpZiAocmVzb3VyY2VJZCkge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VFdmVudHMgPSBnZXRFdmVudHNGb3JSZXNvdXJjZShyZXNvdXJjZUlkKVxuXHRcdFx0ZGF5RXZlbnRzID0gZGF5RXZlbnRzLmZpbHRlcigoZXZlbnQpID0+XG5cdFx0XHRcdHJlc291cmNlRXZlbnRzLnNvbWUoKHJlKSA9PiBTdHJpbmcocmUuaWQpID09PSBTdHJpbmcoZXZlbnQuaWQpKVxuXHRcdFx0KVxuXHRcdH1cblxuXHRcdC8vIFZlcnRpY2FsIGdyaWRzIChEYXkvV2Vlay9SZXNvdXJjZSBWZXJ0aWNhbCkgbmV2ZXIgcmVuZGVyIGFsbC1kYXkgZXZlbnRzXG5cdFx0Ly8gYXMgdGhvc2UgYXJlIGhhbmRsZWQgYnkgdGhlIGFsbC1kYXktcm93IG9yIGFyZSBub3QgYXBwcm9wcmlhdGUgZm9yIHRoZSB0aW1lIGdyaWQuXG5cdFx0cmV0dXJuIGRheUV2ZW50cy5maWx0ZXIoKGUpID0+ICFlLmFsbERheSlcblx0fSwgW1xuXHRcdGRheVN0YXJ0LFxuXHRcdGRheUVuZCxcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XSlcblxuXHRjb25zdCB0b2RheUV2ZW50cyA9IHVzZU1lbW88UG9zaXRpb25lZEV2ZW50W10+KCgpID0+IHtcblx0XHRyZXR1cm4gZ2V0UG9zaXRpb25lZERheUV2ZW50cyh7XG5cdFx0XHRkYXlzLFxuXHRcdFx0ZXZlbnRzLFxuXHRcdFx0Z3JpZFR5cGUsXG5cdFx0fSlcblx0fSwgW2RheXMsIGdyaWRUeXBlLCBldmVudHNdKVxuXG5cdHJldHVybiB0b2RheUV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpb25lZEV2ZW50IGV4dGVuZHMgQ2FsZW5kYXJFdmVudCB7XG5cdGxlZnQ6IG51bWJlciAvLyBMZWZ0IHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0d2lkdGg6IG51bWJlciAvLyBXaWR0aCBpbiBwZXJjZW50YWdlXG5cdHRvcDogbnVtYmVyIC8vIFRvcCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdGhlaWdodDogbnVtYmVyIC8vIEhlaWdodCBpbiBwZXJjZW50YWdlXG5cdHpJbmRleD86IG51bWJlciAvLyBaLWluZGV4IGZvciBsYXllcmluZyBvdmVybGFwcGluZyBldmVudHNcbn1cblxuaW50ZXJmYWNlIEdldFBvc2l0aW9uZWREYXlFdmVudHNQYXJhbXMge1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cicgfCAnbWludXRlJ1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxufVxuXG5leHBvcnQgY29uc3QgZ2V0UG9zaXRpb25lZERheUV2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2hvdXInLFxuXHRldmVudHMsXG59OiBHZXRQb3NpdGlvbmVkRGF5RXZlbnRzUGFyYW1zKTogUG9zaXRpb25lZEV2ZW50W10gPT4ge1xuXHQvLyBGaWx0ZXIgb3V0IGFsbC1kYXkgZXZlbnRzIGFuZCBzb3J0IGJ5IHN0YXJ0IHRpbWVcblx0Y29uc3Qgc29ydGVkRXZlbnRzID0gZXZlbnRzXG5cdFx0LmZpbHRlcigoZSkgPT4gIWUuYWxsRGF5KVxuXHRcdC50b1NvcnRlZCgoYSwgYikgPT4gYS5zdGFydC5kaWZmKGIuc3RhcnQpKVxuXG5cdGlmIChzb3J0ZWRFdmVudHMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIFtdXG5cdH1cblxuXHQvLyBEZXRlcm1pbmUgZ3JpZCBib3VuZGFyaWVzIGFuZCBtZXRyaWNzXG5cdC8vIFVzZSBleHBsaWNpdCBzdGFydE9mIHRvIGVuc3VyZSB3ZSBhcmUgYW5jaG9yZWQgdG8gdGhlIGdyaWQgdW5pdCBib3VuZGFyaWVzXG5cdC8vIFRoaXMgcHJldmVudHMgb2Zmc2V0cyBpZiB0aGUgZ3JpZCBkYXlzIGFyZSBub3Qgbm9ybWFsaXplZFxuXHRjb25zdCBncmlkU3RhcnQgPSBkYXlzLmF0KDApIHx8IGRheWpzKClcblx0Y29uc3QgdG90YWxVbml0cyA9IGRheXMubGVuZ3RoXG5cdGNvbnN0IGlzRGlzY3JldGUgPSBncmlkVHlwZSA9PT0gJ2RheSdcblxuXHQvLyBTdGVwIDE6IEdyb3VwIGV2ZW50cyBpbnRvIGNsdXN0ZXJzIG9mIG92ZXJsYXBwaW5nIGV2ZW50c1xuXHRjb25zdCBjbHVzdGVyczogQ2FsZW5kYXJFdmVudFtdW10gPSBbXVxuXHRsZXQgY3VycmVudENsdXN0ZXI6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cdGxldCBsYXN0RXZlbnRFbmQ6IGRheWpzLkRheWpzIHwgbnVsbCA9IG51bGxcblx0Zm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRFdmVudHMpIHtcblx0XHRpZiAobGFzdEV2ZW50RW5kICYmIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIobGFzdEV2ZW50RW5kKSkge1xuXHRcdFx0aWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y2x1c3RlcnMucHVzaChjdXJyZW50Q2x1c3Rlcilcblx0XHRcdH1cblx0XHRcdGN1cnJlbnRDbHVzdGVyID0gW11cblx0XHR9XG5cdFx0Y3VycmVudENsdXN0ZXIucHVzaChldmVudClcblx0XHRsYXN0RXZlbnRFbmQgPSBsYXN0RXZlbnRFbmQgPyBkYXlqcy5tYXgobGFzdEV2ZW50RW5kLCBldmVudC5lbmQpIDogZXZlbnQuZW5kXG5cdH1cblx0aWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcblx0XHRjbHVzdGVycy5wdXNoKGN1cnJlbnRDbHVzdGVyKVxuXHR9XG5cblx0Ly8gU3RlcCAyOiBGb3IgZWFjaCBjbHVzdGVyLCB1c2UgYSBtb3JlIGludGVsbGlnZW50IGNvbHVtbiBhc3NpZ25tZW50XG5cdGNvbnN0IHByb2Nlc3NlZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W10gPSBbXVxuXHRmb3IgKGNvbnN0IGNsdXN0ZXIgb2YgY2x1c3RlcnMpIHtcblx0XHRpZiAoY2x1c3Rlci5sZW5ndGggPT09IDEpIHtcblx0XHRcdC8vIFNpbmdsZSBldmVudCB0YWtlcyBmdWxsIHdpZHRoXG5cdFx0XHRjb25zdCBldmVudCA9IGNsdXN0ZXJbMF1cblxuXHRcdFx0bGV0IHN0YXJ0VGltZSA9IGV2ZW50LnN0YXJ0LmRpZmYoZ3JpZFN0YXJ0LCBncmlkVHlwZSwgdHJ1ZSlcblx0XHRcdGxldCBlbmRUaW1lID0gZXZlbnQuZW5kLmRpZmYoZ3JpZFN0YXJ0LCBncmlkVHlwZSwgdHJ1ZSlcblxuXHRcdFx0aWYgKGlzRGlzY3JldGUpIHtcblx0XHRcdFx0c3RhcnRUaW1lID0gTWF0aC5mbG9vcihzdGFydFRpbWUpXG5cdFx0XHRcdGVuZFRpbWUgPSBNYXRoLmNlaWwoZW5kVGltZSlcblx0XHRcdFx0Ly8gRW5zdXJlIGF0IGxlYXN0IDEgdW5pdCBkdXJhdGlvbiBmb3IgZGlzY3JldGUgZXZlbnRzXG5cdFx0XHRcdGlmIChlbmRUaW1lIDw9IHN0YXJ0VGltZSkge1xuXHRcdFx0XHRcdGVuZFRpbWUgPSBzdGFydFRpbWUgKyAxXG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2xhbXAgdG8gZ3JpZCBib3VuZGFyaWVzXG5cdFx0XHRpZiAoc3RhcnRUaW1lIDwgMCkgc3RhcnRUaW1lID0gMFxuXHRcdFx0aWYgKGVuZFRpbWUgPiB0b3RhbFVuaXRzKSBlbmRUaW1lID0gdG90YWxVbml0c1xuXG5cdFx0XHRjb25zdCB0b3RhbER1cmF0aW9uID0gTWF0aC5tYXgoMCwgZW5kVGltZSAtIHN0YXJ0VGltZSlcblxuXHRcdFx0Ly8gU2tpcCBldmVudHMgdGhhdCBhcmUgY29tcGxldGVseSBvdXRzaWRlIHRoZSBncmlkXG5cdFx0XHRpZiAodG90YWxEdXJhdGlvbiA9PT0gMCkgY29udGludWVcblxuXHRcdFx0Y29uc3QgdG9wID0gKHN0YXJ0VGltZSAvIHRvdGFsVW5pdHMpICogMTAwXG5cdFx0XHRjb25zdCBoZWlnaHQgPSAodG90YWxEdXJhdGlvbiAvIHRvdGFsVW5pdHMpICogMTAwXG5cblx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHsgLi4uZXZlbnQsIGxlZnQ6IDAsIHdpZHRoOiAxMDAsIHRvcCwgaGVpZ2h0IH0pXG5cdFx0XHRjb250aW51ZVxuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGV2ZW50cyAtIHVzZSBsYXllcmVkIHBvc2l0aW9uaW5nIGFwcHJvYWNoXG5cdFx0Ly8gU29ydCBieSBkdXJhdGlvbiAobG9uZ2VzdCBmaXJzdCksIHRoZW4gYnkgc3RhcnQgdGltZVxuXHRcdGNvbnN0IHNvcnRlZENsdXN0ZXIgPSBbLi4uY2x1c3Rlcl0uc29ydCgoYSwgYikgPT4ge1xuXHRcdFx0Y29uc3QgYUR1cmF0aW9uID0gYS5lbmQuZGlmZihhLnN0YXJ0LCAnbWludXRlJylcblx0XHRcdGNvbnN0IGJEdXJhdGlvbiA9IGIuZW5kLmRpZmYoYi5zdGFydCwgJ21pbnV0ZScpXG5cblx0XHRcdC8vIExvbmdlciBldmVudHMgZmlyc3Rcblx0XHRcdGlmIChhRHVyYXRpb24gIT09IGJEdXJhdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gYkR1cmF0aW9uIC0gYUR1cmF0aW9uXG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHNhbWUgZHVyYXRpb24sIGVhcmxpZXIgc3RhcnQgdGltZSBmaXJzdFxuXHRcdFx0cmV0dXJuIGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuXHRcdH0pXG5cblx0XHQvLyBQcm9jZXNzIGV2ZW50cyB3aXRoIGxheWVyZWQgcG9zaXRpb25pbmdcblx0XHRjb25zdCB0b3RhbEV2ZW50cyA9IHNvcnRlZENsdXN0ZXIubGVuZ3RoXG5cblx0XHQvLyBDYWxjdWxhdGUgZHluYW1pYyBvZmZzZXQgYmFzZWQgb24gbnVtYmVyIG9mIG92ZXJsYXBwaW5nIGV2ZW50c1xuXHRcdC8vIEZld2VyIGV2ZW50cyA9IGxhcmdlciBpbmRpdmlkdWFsIG9mZnNldHMsIG1vcmUgZXZlbnRzID0gc21hbGxlciBvZmZzZXRzXG5cdFx0bGV0IG1heE9mZnNldDogbnVtYmVyXG5cdFx0aWYgKHRvdGFsRXZlbnRzID09PSAyKSB7XG5cdFx0XHRtYXhPZmZzZXQgPSAyNSAvLyAyNSUgb2Zmc2V0IGZvciAyIGV2ZW50c1xuXHRcdH0gZWxzZSBpZiAodG90YWxFdmVudHMgPT09IDMpIHtcblx0XHRcdG1heE9mZnNldCA9IDUwIC8vIDUwJSB0b3RhbCBmb3IgMyBldmVudHMgKDI1JSBlYWNoKVxuXHRcdH0gZWxzZSBpZiAodG90YWxFdmVudHMgPT09IDQpIHtcblx0XHRcdG1heE9mZnNldCA9IDYwIC8vIDYwJSB0b3RhbCBmb3IgNCBldmVudHMgKDIwJSBlYWNoKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXhPZmZzZXQgPSA3MCAvLyA3MCUgdG90YWwgZm9yIDUrIGV2ZW50c1xuXHRcdH1cblxuXHRcdGNvbnN0IG9mZnNldFBlckV2ZW50ID0gdG90YWxFdmVudHMgPiAxID8gbWF4T2Zmc2V0IC8gKHRvdGFsRXZlbnRzIC0gMSkgOiAwXG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZENsdXN0ZXIubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGV2ZW50ID0gc29ydGVkQ2x1c3RlcltpXVxuXG5cdFx0XHRsZXQgc3RhcnRUaW1lID0gZXZlbnQuc3RhcnQuZGlmZihncmlkU3RhcnQsIGdyaWRUeXBlLCB0cnVlKVxuXHRcdFx0bGV0IGVuZFRpbWUgPSBldmVudC5lbmQuZGlmZihncmlkU3RhcnQsIGdyaWRUeXBlLCB0cnVlKVxuXG5cdFx0XHRpZiAoaXNEaXNjcmV0ZSkge1xuXHRcdFx0XHRzdGFydFRpbWUgPSBNYXRoLmZsb29yKHN0YXJ0VGltZSlcblx0XHRcdFx0ZW5kVGltZSA9IE1hdGguY2VpbChlbmRUaW1lKVxuXHRcdFx0XHRpZiAoZW5kVGltZSA8PSBzdGFydFRpbWUpIHtcblx0XHRcdFx0XHRlbmRUaW1lID0gc3RhcnRUaW1lICsgMVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsYW1wIHRvIGdyaWQgYm91bmRhcmllc1xuXHRcdFx0aWYgKHN0YXJ0VGltZSA8IDApIHN0YXJ0VGltZSA9IDBcblx0XHRcdGlmIChlbmRUaW1lID4gdG90YWxVbml0cykgZW5kVGltZSA9IHRvdGFsVW5pdHNcblxuXHRcdFx0Y29uc3QgdG90YWxEdXJhdGlvbiA9IE1hdGgubWF4KDAsIGVuZFRpbWUgLSBzdGFydFRpbWUpXG5cblx0XHRcdGlmICh0b3RhbER1cmF0aW9uID09PSAwKSBjb250aW51ZVxuXG5cdFx0XHRjb25zdCB0b3AgPSAoc3RhcnRUaW1lIC8gdG90YWxVbml0cykgKiAxMDBcblx0XHRcdGNvbnN0IGhlaWdodCA9ICh0b3RhbER1cmF0aW9uIC8gdG90YWxVbml0cykgKiAxMDBcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHBvc2l0aW9uaW5nIGJhc2VkIG9uIGxheWVyIGFuZCB0b3RhbCBldmVudHNcblx0XHRcdGxldCBsZWZ0OiBudW1iZXJcblx0XHRcdGxldCB3aWR0aDogbnVtYmVyXG5cdFx0XHRsZXQgekluZGV4OiBudW1iZXJcblxuXHRcdFx0aWYgKGkgPT09IDApIHtcblx0XHRcdFx0Ly8gRmlyc3QgZXZlbnQgKGxvbmdlc3QpIHRha2VzIGZ1bGwgd2lkdGggYXQgYm90dG9tXG5cdFx0XHRcdGxlZnQgPSAwXG5cdFx0XHRcdHdpZHRoID0gMTAwXG5cdFx0XHRcdHpJbmRleCA9IDFcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFN1YnNlcXVlbnQgZXZlbnRzIGFyZSBvZmZzZXQgZHluYW1pY2FsbHkgYmFzZWQgb24gdG90YWwgZXZlbnQgY291bnRcblx0XHRcdFx0bGVmdCA9IG9mZnNldFBlckV2ZW50ICogaVxuXHRcdFx0XHR3aWR0aCA9IDEwMCAtIGxlZnQgLy8gUmVtYWluaW5nIHdpZHRoXG5cdFx0XHRcdHpJbmRleCA9IGkgKyAxIC8vIEhpZ2hlciB6LWluZGV4IGZvciBldmVudHMgb24gdG9wXG5cdFx0XHR9XG5cblx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcblx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdGxlZnQsXG5cdFx0XHRcdHdpZHRoLFxuXHRcdFx0XHR0b3AsXG5cdFx0XHRcdGhlaWdodCxcblx0XHRcdFx0ekluZGV4LFxuXHRcdFx0fSlcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcHJvY2Vzc2VkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lclByb3BzIHtcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBhbGxEYXk/OiBzdHJpbmcgfVxuXHRhbGxEYXlSb3c/OiBSZWFjdC5SZWFjdE5vZGVcbn1cblxuY29uc3QgTm9NZW1vVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyOiBSZWFjdC5GQzxcblx0VmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHNcbj4gPSAoeyBjaGlsZHJlbiwgY2xhc3NlcywgYWxsRGF5Um93IH0pID0+IHtcblx0Y29uc3QgeyBzdGlja3lWaWV3SGVhZGVyLCB2aWV3SGVhZGVyQ2xhc3NOYW1lIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dChcblx0XHQoc3RhdGUpID0+ICh7XG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyOiBzdGF0ZS5zdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZTogc3RhdGUudmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHR9KVxuXHQpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMSBiZy1iYWNrZ3JvdW5kJywgLy8gWi1pbmRleCBhYm92ZSB0aGUgbGVmdCBzdGlja3kgcmVzb3VyY2UgY29sdW1uXG5cdFx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0PlxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKCdoLTEyIGJvcmRlci1iIHctZml0JywgY2xhc3Nlcz8uaGVhZGVyKX1cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDwvZGl2PlxuXHRcdFx0ey8qIEFsbC1kYXkgcm93ICovfVxuXHRcdFx0e2FsbERheVJvdyAmJiAoXG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKCdmbGV4IHctZnVsbCBib3JkZXItYiBtaW4taC0xMicsIGNsYXNzZXM/LmFsbERheSl9XG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLWFsbC1kYXlcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e2FsbERheVJvd31cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXIgPSBtZW1vKFxuXHROb01lbW9WZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXJcbilcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBTY3JvbGxBcmVhLCBTY3JvbGxCYXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkQ29sLCB0eXBlIFZlcnRpY2FsR3JpZENvbFByb3BzIH0gZnJvbSAnLi92ZXJ0aWNhbC1ncmlkLWNvbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lciB9IGZyb20gJy4vdmVydGljYWwtZ3JpZC1oZWFkZXItY29udGFpbmVyJ1xuXG5pbnRlcmZhY2UgVmVydGljYWxHcmlkUHJvcHMge1xuXHRjb2x1bW5zOiBWZXJ0aWNhbEdyaWRDb2xQcm9wc1tdXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0dmFyaWFudD86ICdyZWd1bGFyJyB8ICdyZXNvdXJjZSdcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBib2R5Pzogc3RyaW5nOyBhbGxEYXk/OiBzdHJpbmcgfVxuXHRhbGxEYXlSb3c/OiBSZWFjdC5SZWFjdE5vZGVcblx0LyoqXG5cdCAqIE9wdGlvbmFsIGFycmF5IG9mIG1pbnV0ZSBzbG90cyBieSB3aGljaCB0aGUgaG91ciBpcyBkaXZpZGVkXG5cdCAqIGUuZy4sIFswLCAxNSwgMzAsIDQ1XSBmb3IgcXVhcnRlci1ob3VyIHNsb3RzXG5cdCAqL1xuXHRjZWxsU2xvdHM/OiBudW1iZXJbXVxuXHRzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcbn1cblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsR3JpZDogUmVhY3QuRkM8VmVydGljYWxHcmlkUHJvcHM+ID0gKHtcblx0Y29sdW1ucyxcblx0Y2hpbGRyZW4sXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHZhcmlhbnQgPSAncmVzb3VyY2UnLFxuXHRjbGFzc2VzLFxuXHRhbGxEYXlSb3csXG5cdGNlbGxTbG90cyxcblx0c3R5bGUsXG59KSA9PiB7XG5cdGNvbnN0IGlzUmVzb3VyY2VDYWxlbmRhciA9IHZhcmlhbnQgPT09ICdyZXNvdXJjZSdcblx0Y29uc3QgaXNSZWd1bGFyQ2FsZW5kYXIgPSAhaXNSZXNvdXJjZUNhbGVuZGFyXG5cblx0Y29uc3QgaGVhZGVyID0gY2hpbGRyZW4gJiYgKFxuXHRcdDxWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXJcblx0XHRcdGFsbERheVJvdz17YWxsRGF5Um93fVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6IGNsYXNzZXM/LmhlYWRlciwgYWxsRGF5OiBjbGFzc2VzPy5hbGxEYXkgfX1cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9WZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXI+XG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImgtZnVsbCBmbGV4IGZsZXgtY29sXCJcblx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1jb250YWluZXJcIlxuXHRcdFx0c3R5bGU9e3N0eWxlfVxuXHRcdD5cblx0XHRcdHsvKiBoZWFkZXIgcm93ICovfVxuXHRcdFx0e2lzUmVndWxhckNhbGVuZGFyICYmIGhlYWRlcn1cblxuXHRcdFx0PFNjcm9sbEFyZWFcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbignaC1mdWxsJywgaXNSZWd1bGFyQ2FsZW5kYXIgJiYgJ292ZXJmbG93LWF1dG8nKX1cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLXNjcm9sbFwiXG5cdFx0XHRcdHZpZXdQb3J0UHJvcHM9e3sgY2xhc3NOYW1lOiAnKjpmbGV4ISAqOmZsZXgtY29sISAqOm1pbi1oLWZ1bGwnIH19XG5cdFx0XHQ+XG5cdFx0XHRcdHsvKiBoZWFkZXIgcm93IGZvciByZXNvdXJjZSBjYWxlbmRhciBpbnNpZGUgc2Nyb2xsIGFyZWEgKi99XG5cdFx0XHRcdHtpc1Jlc291cmNlQ2FsZW5kYXIgJiYgaGVhZGVyfVxuXHRcdFx0XHR7LyogQ2FsZW5kYXIgYXJlYSB3aXRoIHNjcm9sbCAqL31cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC0xIHctZml0JywgY2xhc3Nlcz8uYm9keSl9XG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLWJvZHlcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0ey8qIERheSBjb2x1bW5zIHdpdGggdGltZSBzbG90cyAqL31cblx0XHRcdFx0XHR7Y29sdW1ucy5tYXAoKGNvbHVtbiwgaW5kZXgpID0+IChcblx0XHRcdFx0XHRcdDxWZXJ0aWNhbEdyaWRDb2xcblx0XHRcdFx0XHRcdFx0a2V5PXtgJHtjb2x1bW4uaWR9LSR7aW5kZXh9YH1cblx0XHRcdFx0XHRcdFx0ey4uLmNvbHVtbn1cblx0XHRcdFx0XHRcdFx0Y2VsbFNsb3RzPXtjZWxsU2xvdHN9XG5cdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0aXNMYXN0Q29sdW1uPXtpbmRleCA9PT0gY29sdW1ucy5sZW5ndGggLSAxfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIC8+IHsvKiB2ZXJ0aWNhbCBzY3JvbGxiYXIgKi99XG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIG9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiIC8+eycgJ31cblx0XHRcdFx0ey8qIGhvcml6b250YWwgc2Nyb2xsYmFyICovfVxuXHRcdFx0PC9TY3JvbGxBcmVhPlxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZ2V0RGF5SG91cnMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsgY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlIH0gZnJvbSAnLi9idXNpbmVzcy1ob3VycydcblxuaW50ZXJmYWNlIEdldFZpZXdIb3Vyc09wdGlvbnMge1xuXHRyZWZlcmVuY2VEYXRlOiBkYXlqcy5EYXlqc1xuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycz86IGJvb2xlYW5cblx0LyoqXG5cdCAqIEZvciB2aWV3cyB3aXRoIG11bHRpcGxlIGRheXMgKGxpa2UgV2Vla1ZpZXcpLCB3ZSBtaWdodCB3YW50IHRvIHNob3dcblx0ICogdGhlIHVuaW9uIG9mIGFsbCBidXNpbmVzcyBob3VycyBhY3Jvc3MgdGhvc2UgZGF5cy5cblx0ICovXG5cdGFsbERhdGVzPzogZGF5anMuRGF5anNbXVxuXHQvKipcblx0ICogT3B0aW9uYWwgYWRkaXRpb25hbCBidXNpbmVzcyBob3VycyBjb25maWd1cmF0aW9ucyAoZS5nLiwgZnJvbSByZXNvdXJjZXMpLlxuXHQgKiBUaGVzZSB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZSBnbG9iYWwgYnVzaW5lc3NIb3VycyB3aGVuIGNhbGN1bGF0aW5nIHRoZSB2aXNpYmxlIHJhbmdlLlxuXHQgKi9cblx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzPzogKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW11cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGxpc3Qgb2YgaG91cnMgdG8gZGlzcGxheSBpbiB0aGUgY2FsZW5kYXIgdmlldy5cbiAqIElmIGhpZGVOb25CdXNpbmVzc0hvdXJzIGlzIHRydWUsIGl0IGZpbHRlcnMgdGhlIGhvdXJzIGJhc2VkIG9uIGJ1c2luZXNzSG91cnMgY29uZmlndXJhdGlvbi5cbiAqIEZvciBtdWx0aXBsZSBkYXRlcywgaXQgdGFrZXMgdGhlIGVhcmxpZXN0IHN0YXJ0IGFuZCBsYXRlc3QgZW5kIGFjcm9zcyBhbGwgZGF0ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3SG91cnMoe1xuXHRyZWZlcmVuY2VEYXRlLFxuXHRidXNpbmVzc0hvdXJzLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0YWxsRGF0ZXMgPSBbcmVmZXJlbmNlRGF0ZV0sXG5cdHJlc291cmNlQnVzaW5lc3NIb3VycyA9IFtdLFxufTogR2V0Vmlld0hvdXJzT3B0aW9ucyk6IGRheWpzLkRheWpzW10ge1xuXHRjb25zdCBob3VycyA9IGdldERheUhvdXJzKHsgcmVmZXJlbmNlRGF0ZSB9KVxuXG5cdGNvbnN0IGhhc0J1c2luZXNzSG91cnNDb25maWcgPVxuXHRcdCEhYnVzaW5lc3NIb3VycyB8fCByZXNvdXJjZUJ1c2luZXNzSG91cnMubGVuZ3RoID4gMFxuXHRjb25zdCBzaG91bGRGaWx0ZXJCeUJ1c2luZXNzSG91cnMgPVxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzICYmIGhhc0J1c2luZXNzSG91cnNDb25maWdcblxuXHRpZiAoIXNob3VsZEZpbHRlckJ5QnVzaW5lc3NIb3VycykgcmV0dXJuIGhvdXJzXG5cblx0Y29uc3QgeyBtaW5TdGFydCwgbWF4RW5kLCBoYXNCdXNpbmVzc0hvdXJzIH0gPSBjYWxjdWxhdGVCdXNpbmVzc0hvdXJzUmFuZ2Uoe1xuXHRcdGFsbERhdGVzLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHR9KVxuXG5cdGlmICghaGFzQnVzaW5lc3NIb3VycykgcmV0dXJuIGhvdXJzXG5cblx0cmV0dXJuIGhvdXJzLmZpbHRlcigoaCkgPT4ge1xuXHRcdGNvbnN0IGhvdXIgPSBoLmhvdXIoKVxuXHRcdHJldHVybiBob3VyID49IG1pblN0YXJ0ICYmIGhvdXIgPCBtYXhFbmRcblx0fSlcbn1cbiIsCiAgICAiaW1wb3J0IHsgQWxsRGF5Um93IH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgRGF5VmlldyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0dGltZUZvcm1hdCxcblx0XHR0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGlzVG9kYXkgPSBjdXJyZW50RGF0ZS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cdGNvbnN0IGhvdXJzID0gZ2V0Vmlld0hvdXJzKHtcblx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGFsbERhdGVzOiBbY3VycmVudERhdGVdLFxuXHR9KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiAndGltZS1jb2wnLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdGhvdXIxMjogdGltZUZvcm1hdCA9PT0gJzEyLWhvdXInLFxuXHRcdFx0XHR9KS5mb3JtYXQoZGF0ZS50b0RhdGUoKSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHtcblx0XHRpZDogYGRheS1jb2wtJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gLFxuXHRcdGRheTogY3VycmVudERhdGUsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0Y2xhc3NOYW1lOiAndy1bY2FsYygxMDAlLTRyZW0pXSBmbGV4LTEnLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17PEFsbERheVJvdyBkYXlzPXtbY3VycmVudERhdGVdfSAvPn1cblx0XHRcdGNlbGxTbG90cz17WzAsIDE1LCAzMCwgNDVdfVxuXHRcdFx0Y2xhc3Nlcz17e1xuXHRcdFx0XHRoZWFkZXI6ICd3LWZ1bGwnLFxuXHRcdFx0XHRib2R5OiAndy1mdWxsJyxcblx0XHRcdFx0YWxsRGF5OiAndy1mdWxsJyxcblx0XHRcdH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIGNvbHVtbnNdfVxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHQ+XG5cdFx0XHR7LyogSGVhZGVyICovfVxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9eydmbGV4IGZsZXgtMSBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgbWluLWgtMTInfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cImRheS12aWV3LWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2ZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHRleHQtY2VudGVyIHRleHQtYmFzZSBmb250LXNlbWlib2xkIHNtOnRleHQteGwnLFxuXHRcdFx0XHRcdFx0aXNUb2RheSAmJiAndGV4dC1wcmltYXJ5J1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ4czppbmxpbmUgaGlkZGVuXCI+XG5cdFx0XHRcdFx0XHR7Y3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCAnKX1cblx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0e2N1cnJlbnREYXRlLmZvcm1hdCgnTU1NTSBELCBZWVlZJyl9XG5cdFx0XHRcdFx0e2lzVG9kYXkgJiYgKFxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBtbC0yIHJvdW5kZWQtZnVsbCBweC0xIHB5LTAuNSB0ZXh0LXhzIHNtOnB4LTIgc206dGV4dC1zbVwiPlxuXHRcdFx0XHRcdFx0XHR7dCgndG9kYXknKX1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgSG9yaXpvbnRhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGdldE1vbnRoV2Vla3MgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsgTW9udGhIZWFkZXIgfSBmcm9tICcuL21vbnRoLWhlYWRlcidcbmltcG9ydCB0eXBlIHsgTW9udGhWaWV3UHJvcHMgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgTW9udGhWaWV3OiBSZWFjdC5GQzxNb250aFZpZXdQcm9wcz4gPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgd2Vla3MgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldE1vbnRoV2Vla3MoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKSxcblx0XHRbY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrXVxuXHQpXG5cblx0Y29uc3Qgcm93cyA9IHdlZWtzLm1hcCgoZGF5cywgd2Vla0luZGV4KSA9PiAoe1xuXHRcdGlkOiBgd2Vlay0ke3dlZWtJbmRleH1gLFxuXHRcdGNvbHVtbnM6IGRheXMubWFwKChkYXkpID0+ICh7XG5cdFx0XHRpZDogYGNvbC0ke2RheS50b0lTT1N0cmluZygpfWAsXG5cdFx0XHRkYXksXG5cdFx0XHRjbGFzc05hbWU6ICd3LWF1dG8nLFxuXHRcdFx0Z3JpZFR5cGU6ICdkYXknIGFzIGNvbnN0LFxuXHRcdH0pKSxcblx0XHRjbGFzc05hbWU6ICdmbGV4LTEnLFxuXHRcdHNob3dEYXlOdW1iZXI6IHRydWUsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PEhvcml6b250YWxHcmlkXG5cdFx0XHRjbGFzc2VzPXt7IGJvZHk6ICd3LWZ1bGwnLCBoZWFkZXI6ICd3LWZ1bGwnIH19XG5cdFx0XHRyb3dzPXtyb3dzfVxuXHRcdFx0dmFyaWFudD1cInJlZ3VsYXJcIlxuXHRcdD5cblx0XHRcdDxNb250aEhlYWRlciBjbGFzc05hbWU9XCJoLTEyXCIgLz5cblx0XHQ8L0hvcml6b250YWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lclByb3BzIHtcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IE5vTWVtb0hvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyID0gKHtcblx0Y2hpbGRyZW4sXG5cdGNsYXNzTmFtZSxcbn06IEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHMpID0+IHtcblx0Y29uc3QgeyBzdGlja3lWaWV3SGVhZGVyLCB2aWV3SGVhZGVyQ2xhc3NOYW1lIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dChcblx0XHQoc3RhdGUpID0+ICh7XG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyOiBzdGF0ZS5zdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZTogc3RhdGUudmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHR9KVxuXHQpXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaC0xMiB3LWZpdCcsXG5cdFx0XHRcdHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIxIGJnLWJhY2tncm91bmQnLFxuXHRcdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD1cImhvcml6b250YWwtZ3JpZC1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXIgPSBtZW1vKFxuXHROb01lbW9Ib3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lclxuKVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciB9IGZyb20gJy4vaG9yaXpvbnRhbC1ncmlkLWhlYWRlci1jb250YWluZXInXG5pbXBvcnQge1xuXHRIb3Jpem9udGFsR3JpZFJvdyxcblx0dHlwZSBIb3Jpem9udGFsR3JpZFJvd1Byb3BzLFxufSBmcm9tICcuL2hvcml6b250YWwtZ3JpZC1yb3cnXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZFByb3BzIHtcblx0cm93czogSG9yaXpvbnRhbEdyaWRSb3dQcm9wc1tdXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzZXM/OiB7IGhlYWRlcj86IHN0cmluZzsgYm9keT86IHN0cmluZyB9XG5cdGFsbERheT86IGJvb2xlYW5cblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHR2YXJpYW50PzogJ3JlZ3VsYXInIHwgJ3Jlc291cmNlJ1xuXHRkYXlOdW1iZXJIZWlnaHQ/OiBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkOiBSZWFjdC5GQzxIb3Jpem9udGFsR3JpZFByb3BzPiA9ICh7XG5cdHJvd3MsXG5cdGNoaWxkcmVuLFxuXHRjbGFzc2VzLFxuXHRhbGxEYXk6IHRvcExldmVsQWxsRGF5LFxuXHRncmlkVHlwZSxcblx0dmFyaWFudCA9ICdyZXNvdXJjZScsXG5cdGRheU51bWJlckhlaWdodCxcbn0pID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IGlzUmVzb3VyY2VDYWxlbmRhciA9IHZhcmlhbnQgPT09ICdyZXNvdXJjZSdcblx0Y29uc3QgaXNSZWd1bGFyQ2FsZW5kYXIgPSAhaXNSZXNvdXJjZUNhbGVuZGFyXG5cblx0Y29uc3QgaGVhZGVyID0gY2hpbGRyZW4gJiYgKFxuXHRcdDxIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciBjbGFzc05hbWU9e2NsYXNzZXM/LmhlYWRlcn0+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9Ib3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lcj5cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiaC1mdWxsIGZsZXggZmxleC1jb2xcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtY29udGFpbmVyXCJcblx0XHQ+XG5cdFx0XHR7LyoqXG5cdFx0XHQgKiBoZWFkZXIgcm93IGlzIHJlbmRlcmVkIG91dHNpZGUgc2Nyb2xsIGFyZWEgZm9yIHJlZ3VsYXIgY2FsZW5kYXJcblx0XHRcdCAqL31cblx0XHRcdHtpc1JlZ3VsYXJDYWxlbmRhciAmJiBoZWFkZXJ9XG5cblx0XHRcdDxTY3JvbGxBcmVhXG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2gtZnVsbCcsIGlzUmVndWxhckNhbGVuZGFyICYmICdvdmVyZmxvdy1hdXRvJyl9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwiaG9yaXpvbnRhbC1ncmlkLXNjcm9sbFwiXG5cdFx0XHRcdHZpZXdQb3J0UHJvcHM9e3sgY2xhc3NOYW1lOiAnKjpmbGV4ISAqOmZsZXgtY29sISAqOm1pbi1oLWZ1bGwnIH19XG5cdFx0XHQ+XG5cdFx0XHRcdHsvKipcblx0XHRcdFx0ICogaGVhZGVyIHJvdyBmb3IgcmVzb3VyY2UgY2FsZW5kYXIgaW5zaWRlIHNjcm9sbCBhcmVhXG5cdFx0XHRcdCAqICovfVxuXHRcdFx0XHR7aXNSZXNvdXJjZUNhbGVuZGFyICYmIGhlYWRlcn1cblxuXHRcdFx0XHR7LyogQ2FsZW5kYXIgYXJlYSB3aXRoIHNjcm9sbCAqL31cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC0xIHctZml0JywgY2xhc3Nlcz8uYm9keSl9XG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtYm9keVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgZmxleCBmbGV4LWNvbCBmbGV4LTFcIlxuXHRcdFx0XHRcdFx0a2V5PXtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0nKX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7cm93cy5tYXAoKHJvdywgaW5kZXgpID0+IChcblx0XHRcdFx0XHRcdFx0PEhvcml6b250YWxHcmlkUm93XG5cdFx0XHRcdFx0XHRcdFx0YWxsRGF5PXtyb3cuYWxsRGF5ID8/IHRvcExldmVsQWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdGRheU51bWJlckhlaWdodD17ZGF5TnVtYmVySGVpZ2h0fVxuXHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3c9e2luZGV4ID09PSByb3dzLmxlbmd0aCAtIDF9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtyb3cuaWR9XG5cdFx0XHRcdFx0XHRcdFx0dmFyaWFudD17dmFyaWFudH1cblx0XHRcdFx0XHRcdFx0XHR7Li4ucm93fVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIC8+XG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIG9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiIC8+XG5cdFx0XHQ8L1Njcm9sbEFyZWE+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuaW50ZXJmYWNlIE1vbnRoSGVhZGVyUHJvcHMge1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IE1vbnRoSGVhZGVyOiBSZWFjdC5GQzxNb250aEhlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG5cdGNvbnN0IHsgZmlyc3REYXlPZldlZWssIHN0aWNreVZpZXdIZWFkZXIsIHZpZXdIZWFkZXJDbGFzc05hbWUsIGN1cnJlbnREYXRlIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHQvLyBSZW9yZGVyIHdlZWsgZGF5cyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuXHRjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaylcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IHctZnVsbCcsXG5cdFx0XHRcdHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIwJyxcblx0XHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJtb250aC1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdHt3ZWVrRGF5cy5tYXAoKHdlZWtEYXksIGluZGV4KSA9PiAoXG5cdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRjbGFzc05hbWU9XCJweS0yIHRleHQtY2VudGVyIGZvbnQtbWVkaXVtIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBib3JkZXItYiBmbGV4LTFcIlxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgd2Vla2RheS1oZWFkZXItJHt3ZWVrRGF5LmZvcm1hdCgnZGRkJykudG9Mb3dlckNhc2UoKX1gfVxuXHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0a2V5PXt3ZWVrRGF5LnRvSVNPU3RyaW5nKCl9XG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17d2Vla0RheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSBjYXBpdGFsaXplXCI+e3dlZWtEYXkuZm9ybWF0KCdkZGQnKX08L3NwYW4+XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0KSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbGxEYXlSb3cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmNvbnN0IENFTExfQ0xBU1MgPVxuXHQndy1bY2FsYygoMTAwJS00cmVtKS92YXIoLS12aXNpYmxlLWRheXMpKV0gbWluLXctW2NhbGMoKDEwMCUtNHJlbSkvdmFyKC0tdmlzaWJsZS1kYXlzKSldIGZsZXgtMSdcbmNvbnN0IExFRlRfQ09MX1dJRFRIID0gJ3ctMTAgc206dy0xNiBtaW4tdy0xMCBzbTptaW4tdy0xNiBtYXgtdy0xMCBzbTptYXgtdy0xNidcblxuZXhwb3J0IGNvbnN0IFdlZWtWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdHQsXG5cdFx0Y3VycmVudERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0c2VsZWN0RGF0ZSxcblx0XHRvcGVuRXZlbnRGb3JtLFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0dGltZUZvcm1hdCxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGhpZGRlbkRheXMsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IHZpc2libGVEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0aGlkZGVuRGF5c1xuXHRcdFx0XHQ/IHdlZWtEYXlzLmZpbHRlcigoZGF5KSA9PiAhaGlkZGVuRGF5cy5oYXMoZGF5LmRheSgpKSlcblx0XHRcdFx0OiB3ZWVrRGF5cyxcblx0XHRbd2Vla0RheXMsIGhpZGRlbkRheXNdXG5cdClcblxuXHRjb25zdCBob3VycyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdGdldFZpZXdIb3Vycyh7XG5cdFx0XHRcdHJlZmVyZW5jZURhdGU6IGN1cnJlbnREYXRlLFxuXHRcdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0YWxsRGF0ZXM6IHdlZWtEYXlzLFxuXHRcdFx0fSksXG5cdFx0W2N1cnJlbnREYXRlLCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3Vycywgd2Vla0RheXNdXG5cdClcblxuXHRjb25zdCBmaXJzdENvbCA9IHtcblx0XHRpZDogJ3RpbWUtY29sJyxcblx0XHRkYXlzOiBob3Vycyxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRjbGFzc05hbWU6IGBzaHJpbmstMCAke0xFRlRfQ09MX1dJRFRIfSBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMGAsXG5cdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0XHRub0V2ZW50czogdHJ1ZSxcblx0XHRyZW5kZXJDZWxsOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHAtMiB0ZXh0LXJpZ2h0IHRleHQtWzEwcHhdIHNtOnRleHQteHMgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cblx0XHRcdFx0e0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuXHRcdFx0XHRcdGhvdXI6ICdudW1lcmljJyxcblx0XHRcdFx0XHRob3VyMTI6IHRpbWVGb3JtYXQgPT09ICcxMi1ob3VyJyxcblx0XHRcdFx0fSkuZm9ybWF0KGRhdGUudG9EYXRlKCkpfVxuXHRcdFx0PC9kaXY+XG5cdFx0KSxcblx0fVxuXG5cdC8vIEdlbmVyYXRlIHdlZWsgZGF5cyDigJQgZWFjaCBjb2x1bW4gZ2V0cyBpdHMgb3duIGhvdXJzIG9uIHRoZSBjb3JyZWN0IGRhdGVcblx0Y29uc3QgY29sdW1ucyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdHJldHVybiB2aXNpYmxlRGF5cy5tYXAoKGRheSkgPT4gKHtcblx0XHRcdGlkOiBgZGF5LWNvbC0ke2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gLFxuXHRcdFx0ZGF5LFxuXHRcdFx0bGFiZWw6IGRheS5mb3JtYXQoJ0QnKSxcblx0XHRcdGNsYXNzTmFtZTogQ0VMTF9DTEFTUyxcblx0XHRcdGRheXM6IGdldFZpZXdIb3Vycyh7XG5cdFx0XHRcdHJlZmVyZW5jZURhdGU6IGRheSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdH0pLFxuXHRcdFx0dmFsdWU6IGRheSxcblx0XHR9KSlcblx0fSwgW3dlZWtEYXlzLCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3VycywgdmlzaWJsZURheXMubWFwXSlcblxuXHRjb25zdCBjc3NWYXJzID0ge1xuXHRcdCctLXZpc2libGUtZGF5cyc6IHZpc2libGVEYXlzLmxlbmd0aCxcblx0fSBhcyBSZWFjdC5DU1NQcm9wZXJ0aWVzXG5cblx0cmV0dXJuIChcblx0XHQ8VmVydGljYWxHcmlkXG5cdFx0XHRhbGxEYXlSb3c9e1xuXHRcdFx0XHQ8QWxsRGF5Um93XG5cdFx0XHRcdFx0Y2xhc3Nlcz17eyBjZWxsOiBDRUxMX0NMQVNTLCBzcGFjZXI6IExFRlRfQ09MX1dJRFRIIH19XG5cdFx0XHRcdFx0ZGF5cz17dmlzaWJsZURheXN9XG5cdFx0XHRcdC8+XG5cdFx0XHR9XG5cdFx0XHRjbGFzc2VzPXt7IGhlYWRlcjogJ3ctZnVsbCBoLTE4JywgYm9keTogJ3ctZnVsbCcgfX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgLi4uY29sdW1uc119XG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdFx0c3R5bGU9e2Nzc1ZhcnN9XG5cdFx0XHR2YXJpYW50PVwicmVndWxhclwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9eydmbGV4IGgtZnVsbCBmbGV4LTEnfSBkYXRhLXRlc3RpZD1cIndlZWstdmlldy1oZWFkZXJcIj5cblx0XHRcdFx0ey8qIENvcm5lciBjZWxsIHdpdGggd2VlayBudW1iZXIgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidy0xMCBzbTp3LTE2IGgtZnVsbCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLXIgcC0yIGZsZXhcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC14c1wiPnt0KCd3ZWVrJyl9PC9zcGFuPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57Y3VycmVudERhdGUud2VlaygpfTwvc3Bhbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0ey8qIERheSBoZWFkZXIgY2VsbHMgKi99XG5cdFx0XHRcdHt2aXNpYmxlRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5Jylcblx0XHRcdFx0XHRjb25zdCBrZXkgPSBgd2Vlay1kYXktaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9YFxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHQnaG92ZXI6YmctYWNjZW50IGZsZXgtMSBmbGV4IGZsZXgtY29sIGp1c3RpZnktY2VudGVyIGN1cnNvci1wb2ludGVyIHAtMSB0ZXh0LWNlbnRlciBzbTpwLTIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIHctNTAgaC1mdWxsJyxcblx0XHRcdFx0XHRcdFx0XHRpc1RvZGF5ICYmICdiZy1wcmltYXJ5LzEwIGZvbnQtYm9sZCdcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B3ZWVrLWRheS1oZWFkZXItJHtkYXkuZm9ybWF0KCdkZGRkJykudG9Mb3dlckNhc2UoKX1gfVxuXHRcdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0XHRrZXk9e2tleX1cblx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHNlbGVjdERhdGUoZGF5KVxuXHRcdFx0XHRcdFx0XHRcdG9wZW5FdmVudEZvcm0oeyBzdGFydDogZGF5IH0pXG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2tleX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J214LWF1dG8gbXQtMSBmbGV4IGgtNSB3LTUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCB0ZXh0LXhzJyxcblx0XHRcdFx0XHRcdFx0XHRcdGlzVG9kYXkgJiYgJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQnXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcblx0XHRcdFx0XHRcdFx0XHRcdGRheTogJ251bWVyaWMnLFxuXHRcdFx0XHRcdFx0XHRcdH0pLmZvcm1hdChkYXkudG9EYXRlKCkpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgREFZX0hFQURFUl9OQU1FUyA9IFsnUycsICdNJywgJ1QnLCAnVycsICdUJywgJ0YnLCAnUyddXG5jb25zdCBFVkVOVF9ET1RfQ09MT1JTID0gWydiZy1wcmltYXJ5JywgJ2JnLWJsdWUtNTAwJywgJ2JnLWdyZWVuLTUwMCddXG5jb25zdCBEQVlTX0lOX01JTklfQ0FMRU5EQVIgPSA0MlxuXG5jb25zdCBnZXREYXlUb29sdGlwID0gKGV2ZW50Q291bnQ6IG51bWJlcik6IHN0cmluZyA9PiB7XG5cdGlmIChldmVudENvdW50ID09PSAwKSB7XG5cdFx0cmV0dXJuICcnXG5cdH1cblx0Y29uc3QgcGx1cmFsID0gZXZlbnRDb3VudCA+IDEgPyAncycgOiAnJ1xuXHRyZXR1cm4gYCR7ZXZlbnRDb3VudH0gZXZlbnQke3BsdXJhbH1gXG59XG5cbmludGVyZmFjZSBNb250aERhdGEge1xuXHRkYXRlOiBkYXlqcy5EYXlqc1xuXHRuYW1lOiBzdHJpbmdcblx0ZXZlbnRDb3VudDogbnVtYmVyXG5cdG1vbnRoS2V5OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIERheURhdGEge1xuXHRkYXRlOiBkYXlqcy5EYXlqc1xuXHRkYXlLZXk6IHN0cmluZ1xuXHRpc0luQ3VycmVudE1vbnRoOiBib29sZWFuXG5cdGlzVG9kYXk6IGJvb2xlYW5cblx0aXNTZWxlY3RlZDogYm9vbGVhblxuXHRldmVudENvdW50OiBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IFllYXJWaWV3ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBzZWxlY3REYXRlLCBldmVudHMsIHNldFZpZXcsIGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgdCB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGN1cnJlbnRZZWFyID0gY3VycmVudERhdGUueWVhcigpXG5cblx0Y29uc3QgZ2VuZXJhdGVNb250aHNEYXRhID0gKCk6IE1vbnRoRGF0YVtdID0+IHtcblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTIgfSwgKF8sIG1vbnRoSW5kZXgpID0+IHtcblx0XHRcdGNvbnN0IG1vbnRoRGF0ZSA9IGRheWpzKClcblx0XHRcdFx0LnllYXIoY3VycmVudFllYXIpXG5cdFx0XHRcdC5tb250aChtb250aEluZGV4KVxuXHRcdFx0XHQuc3RhcnRPZignbW9udGgnKVxuXHRcdFx0Y29uc3QgZXZlbnRzSW5Nb250aCA9IGV2ZW50cy5maWx0ZXIoXG5cdFx0XHRcdChldmVudCkgPT5cblx0XHRcdFx0XHRldmVudC5zdGFydC55ZWFyKCkgPT09IGN1cnJlbnRZZWFyICYmXG5cdFx0XHRcdFx0ZXZlbnQuc3RhcnQubW9udGgoKSA9PT0gbW9udGhJbmRleFxuXHRcdFx0KVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkYXRlOiBtb250aERhdGUsXG5cdFx0XHRcdG5hbWU6IG1vbnRoRGF0ZS5mb3JtYXQoJ01NTU0nKSxcblx0XHRcdFx0ZXZlbnRDb3VudDogZXZlbnRzSW5Nb250aC5sZW5ndGgsXG5cdFx0XHRcdG1vbnRoS2V5OiBtb250aERhdGUuZm9ybWF0KCdNTScpLFxuXHRcdFx0fVxuXHRcdH0pXG5cdH1cblxuXHRjb25zdCBnZW5lcmF0ZURheXNGb3JNb250aCA9IChtb250aERhdGU6IGRheWpzLkRheWpzKTogRGF5RGF0YVtdID0+IHtcblx0XHRjb25zdCBmaXJzdERheU9mQ2FsZW5kYXIgPSBtb250aERhdGUuc3RhcnRPZignbW9udGgnKS5zdGFydE9mKCd3ZWVrJylcblxuXHRcdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBEQVlTX0lOX01JTklfQ0FMRU5EQVIgfSwgKF8sIGRheUluZGV4KSA9PiB7XG5cdFx0XHRjb25zdCBkYXlEYXRlID0gZmlyc3REYXlPZkNhbGVuZGFyLmFkZChkYXlJbmRleCwgJ2RheScpXG5cdFx0XHRjb25zdCBkYXlTdGFydCA9IGRheURhdGUuc3RhcnRPZignZGF5Jylcblx0XHRcdGNvbnN0IGRheUVuZCA9IGRheURhdGUuZW5kT2YoJ2RheScpXG5cdFx0XHRjb25zdCBldmVudHNPbkRheSA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShkYXlTdGFydCwgZGF5RW5kKVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkYXRlOiBkYXlEYXRlLFxuXHRcdFx0XHRkYXlLZXk6IGRheURhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyksXG5cdFx0XHRcdGlzSW5DdXJyZW50TW9udGg6IGRheURhdGUubW9udGgoKSA9PT0gbW9udGhEYXRlLm1vbnRoKCksXG5cdFx0XHRcdGlzVG9kYXk6IGRheURhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKSxcblx0XHRcdFx0aXNTZWxlY3RlZDogZGF5RGF0ZS5pc1NhbWUoY3VycmVudERhdGUsICdkYXknKSxcblx0XHRcdFx0ZXZlbnRDb3VudDogZXZlbnRzT25EYXkubGVuZ3RoLFxuXHRcdFx0fVxuXHRcdH0pXG5cdH1cblxuXHRjb25zdCBuYXZpZ2F0ZVRvRGF0ZSA9IChcblx0XHRkYXRlOiBkYXlqcy5EYXlqcyxcblx0XHR2aWV3OiAnbW9udGgnIHwgJ2RheScsXG5cdFx0ZXZlbnQ/OiBSZWFjdC5Nb3VzZUV2ZW50XG5cdCkgPT4ge1xuXHRcdGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdHNlbGVjdERhdGUoZGF0ZSlcblx0XHRzZXRWaWV3KHZpZXcpXG5cdH1cblxuXHRjb25zdCBnZXRFdmVudENvdW50TGFiZWwgPSAoY291bnQ6IG51bWJlcik6IHN0cmluZyA9PiB7XG5cdFx0Y29uc3QgZXZlbnRXb3JkID0gY291bnQgPT09IDEgPyB0KCdldmVudCcpIDogdCgnZXZlbnRzJylcblx0XHRyZXR1cm4gYCR7Y291bnR9ICR7ZXZlbnRXb3JkfWBcblx0fVxuXG5cdGNvbnN0IGdldERheUNsYXNzTmFtZSA9IChkYXk6IERheURhdGEpOiBzdHJpbmcgPT4ge1xuXHRcdGNvbnN0IGJhc2VDbGFzcyA9XG5cdFx0XHQncmVsYXRpdmUgZmxleCBhc3BlY3Qtc3F1YXJlIHctZnVsbCBjdXJzb3ItcG9pbnRlciBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaG92ZXI6YmctYWNjZW50IHJvdW5kZWQtc20gdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMjAwJ1xuXHRcdGNvbnN0IG91dHNpZGVNb250aENsYXNzID0gZGF5LmlzSW5DdXJyZW50TW9udGhcblx0XHRcdD8gJydcblx0XHRcdDogJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBvcGFjaXR5LTUwJ1xuXHRcdGNvbnN0IHRvZGF5Q2xhc3MgPSBkYXkuaXNUb2RheVxuXHRcdFx0PyAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLWZ1bGwnXG5cdFx0XHQ6ICcnXG5cdFx0Y29uc3Qgc2VsZWN0ZWRDbGFzcyA9XG5cdFx0XHRkYXkuaXNTZWxlY3RlZCAmJiAhZGF5LmlzVG9kYXkgPyAnYmctbXV0ZWQgcm91bmRlZC1mdWxsIGZvbnQtYm9sZCcgOiAnJ1xuXHRcdGNvbnN0IGhhc0V2ZW50c0NsYXNzID1cblx0XHRcdGRheS5ldmVudENvdW50ID4gMCAmJiAhZGF5LmlzVG9kYXkgJiYgIWRheS5pc1NlbGVjdGVkID8gJ2ZvbnQtbWVkaXVtJyA6ICcnXG5cblx0XHRyZXR1cm4gY24oXG5cdFx0XHRiYXNlQ2xhc3MsXG5cdFx0XHRvdXRzaWRlTW9udGhDbGFzcyxcblx0XHRcdHRvZGF5Q2xhc3MsXG5cdFx0XHRzZWxlY3RlZENsYXNzLFxuXHRcdFx0aGFzRXZlbnRzQ2xhc3Ncblx0XHQpXG5cdH1cblxuXHRjb25zdCBnZXRFdmVudERvdENsYXNzTmFtZSA9IChjb2xvcjogc3RyaW5nLCBpc1RvZGF5OiBib29sZWFuKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCBkb3RDb2xvciA9IGlzVG9kYXkgPyAnYmctcHJpbWFyeS1mb3JlZ3JvdW5kJyA6IGNvbG9yXG5cdFx0cmV0dXJuIGNuKCdoLVszcHhdIHctWzNweF0gcm91bmRlZC1mdWxsJywgZG90Q29sb3IpXG5cdH1cblxuXHRjb25zdCBtb250aHNEYXRhID0gZ2VuZXJhdGVNb250aHNEYXRhKClcblxuXHRyZXR1cm4gKFxuXHRcdDxTY3JvbGxBcmVhIGNsYXNzTmFtZT1cImgtZnVsbFwiIGRhdGEtdGVzdGlkPVwieWVhci12aWV3XCI+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT1cImdyaWQgYXV0by1yb3dzLWZyIGdyaWQtY29scy0xIGdhcC00IHAtNCBzbTpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiXG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwieWVhci1ncmlkXCJcblx0XHRcdD5cblx0XHRcdFx0e21vbnRoc0RhdGEubWFwKChtb250aCwgbW9udGhJbmRleCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGRheXNJbk1vbnRoID0gZ2VuZXJhdGVEYXlzRm9yTW9udGgobW9udGguZGF0ZSlcblx0XHRcdFx0XHRjb25zdCBhbmltYXRpb25EZWxheSA9IG1vbnRoSW5kZXggKiAwLjA1XG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJob3Zlcjpib3JkZXItcHJpbWFyeSBmbGV4IGZsZXgtY29sIHJvdW5kZWQtbGcgYm9yZGVyIHAtMyB0ZXh0LWxlZnQgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwIGhvdmVyOnNoYWRvdy1tZFwiXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgeWVhci1tb250aC0ke21vbnRoLm1vbnRoS2V5fWB9XG5cdFx0XHRcdFx0XHRcdGtleT17bW9udGgubW9udGhLZXl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtYi0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiXG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2FuaW1hdGlvbkRlbGF5fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17YG1vbnRoLSR7bW9udGgubW9udGhLZXl9YH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgbW9udGgtJHttb250aC5tb250aEtleX1gfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC1sZyBmb250LW1lZGl1bSBob3Zlcjp1bmRlcmxpbmUgY3Vyc29yLXBvaW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B5ZWFyLW1vbnRoLXRpdGxlLSR7bW9udGgubW9udGhLZXl9YH1cblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IG5hdmlnYXRlVG9EYXRlKG1vbnRoLmRhdGUsICdtb250aCcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0e21vbnRoLm5hbWV9XG5cdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XG5cblx0XHRcdFx0XHRcdFx0XHR7bW9udGguZXZlbnRDb3VudCA+IDAgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLWZ1bGwgcHgtMiBweS0xIHRleHQteHNcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHllYXItbW9udGgtZXZlbnQtY291bnQtJHttb250aC5tb250aEtleX1gfVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7Z2V0RXZlbnRDb3VudExhYmVsKG1vbnRoLmV2ZW50Q291bnQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy03IGdhcC1bMXB4XSB0ZXh0LVswLjZyZW1dXCJcblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHllYXItbWluaS1jYWxlbmRhci0ke21vbnRoLm1vbnRoS2V5fWB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7REFZX0hFQURFUl9OQU1FUy5tYXAoKGRheU5hbWUpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGgtMyB0ZXh0LWNlbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17YGhlYWRlci0ke2RheU5hbWV9YH1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e2RheU5hbWV9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQpKX1cblxuXHRcdFx0XHRcdFx0XHRcdHtkYXlzSW5Nb250aC5tYXAoKGRheSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgZGF5VGVzdElkID0gYHllYXItZGF5LSR7bW9udGguZGF0ZS5mb3JtYXQoJ1lZWVktTU0nKX0tJHtkYXkuZGF5S2V5fWBcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGhhc0V2ZW50cyA9IGRheS5ldmVudENvdW50ID4gMFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgdmlzaWJsZURvdENvdW50ID0gTWF0aC5taW4oZGF5LmV2ZW50Q291bnQsIDMpXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB2aXNpYmxlRG90Q29sb3JzID0gRVZFTlRfRE9UX0NPTE9SUy5zbGljZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZURvdENvdW50XG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxidXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2dldERheUNsYXNzTmFtZShkYXkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtkYXlUZXN0SWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtkYXkuZGF5S2V5fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eyhlKSA9PiBuYXZpZ2F0ZVRvRGF0ZShkYXkuZGF0ZSwgJ2RheScsIGUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlPXtnZXREYXlUb29sdGlwKGRheS5ldmVudENvdW50KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInRleHQtY2VudGVyIGxlYWRpbmctbm9uZVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e2RheS5kYXRlLmRhdGUoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7aGFzRXZlbnRzICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnYWJzb2x1dGUgYm90dG9tLTAgZmxleCB3LWZ1bGwganVzdGlmeS1jZW50ZXIgc3BhY2UteC1bMXB4XScsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF5LmlzVG9kYXkgJiYgJ2JvdHRvbS1bMXB4XSdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3Zpc2libGVEb3RDb2xvcnMubWFwKChkb3RDb2xvcikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2dldEV2ZW50RG90Q2xhc3NOYW1lKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkb3RDb2xvcixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF5LmlzVG9kYXlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2RvdENvbG9yfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0fSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KX1cblx0XHRcdDwvZGl2PlxuXHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgLz5cblx0XHQ8L1Njcm9sbEFyZWE+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRXZlbnRGb3JtUHJvcHMgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtJ1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNsYXNzZXNPdmVycmlkZSxcblx0Q2VsbENsaWNrSW5mbyxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyRW5naW5lIH0gZnJvbSAnQC9ob29rcy91c2UtY2FsZW5kYXItZW5naW5lJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBHQVBfQkVUV0VFTl9FTEVNRU5UUyB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zLCBUcmFuc2xhdG9yRnVuY3Rpb24gfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldywgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5pbXBvcnQgeyBDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJQcm92aWRlclByb3BzIHtcblx0Y2hpbGRyZW46IFJlYWN0Tm9kZVxuXHRldmVudHM/OiBDYWxlbmRhckV2ZW50W11cblx0Zmlyc3REYXlPZldlZWs/OiBudW1iZXIgLy8gMCBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cblx0aW5pdGlhbFZpZXc/OiBDYWxlbmRhclZpZXdcblx0aW5pdGlhbERhdGU/OiBkYXlqcy5EYXlqc1xuXHRyZW5kZXJFdmVudD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gUmVhY3ROb2RlXG5cdG9uRXZlbnRDbGljaz86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkNlbGxDbGljaz86IChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB2b2lkXG5cdG9uVmlld0NoYW5nZT86ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcblx0b25FdmVudEFkZD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50VXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRXZlbnREZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25EYXRlQ2hhbmdlPzogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG5cdGxvY2FsZT86IHN0cmluZ1xuXHR0aW1lem9uZT86IHN0cmluZ1xuXHRkaXNhYmxlQ2VsbENsaWNrPzogYm9vbGVhblxuXHRkaXNhYmxlRXZlbnRDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZURyYWdBbmREcm9wPzogYm9vbGVhblxuXHRkYXlNYXhFdmVudHM6IG51bWJlclxuXHRldmVudFNwYWNpbmc/OiBudW1iZXJcblx0c3RpY2t5Vmlld0hlYWRlcj86IGJvb2xlYW5cblx0dmlld0hlYWRlckNsYXNzTmFtZT86IHN0cmluZ1xuXHRoZWFkZXJDb21wb25lbnQ/OiBSZWFjdE5vZGUgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjb21wb25lbnRcblx0aGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY2xhc3Ncblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0cmVuZGVyRXZlbnRGb3JtPzogKHByb3BzOiBFdmVudEZvcm1Qcm9wcykgPT4gUmVhY3ROb2RlXG5cdC8vIFRyYW5zbGF0aW9uIG9wdGlvbnMgLSBwcm92aWRlIGVpdGhlciB0cmFuc2xhdGlvbnMgb2JqZWN0IE9SIHRyYW5zbGF0b3IgZnVuY3Rpb25cblx0dHJhbnNsYXRpb25zPzogVHJhbnNsYXRpb25zXG5cdHRyYW5zbGF0b3I/OiBUcmFuc2xhdG9yRnVuY3Rpb25cblx0dGltZUZvcm1hdD86IFRpbWVGb3JtYXRcblx0Y2xhc3Nlc092ZXJyaWRlPzogQ2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGVcblx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3I/OiAoXG5cdFx0cHJvcHM6IFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHNcblx0KSA9PiBSZWFjdE5vZGVcblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG5cdGhpZGRlbkRheXM/OiBTZXQ8bnVtYmVyPlxufVxuXG5leHBvcnQgY29uc3QgQ2FsZW5kYXJQcm92aWRlcjogUmVhY3QuRkM8Q2FsZW5kYXJQcm92aWRlclByb3BzPiA9ICh7XG5cdGNoaWxkcmVuLFxuXHRldmVudHMgPSBbXSxcblx0Zmlyc3REYXlPZldlZWsgPSAwLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRyZW5kZXJFdmVudCxcblx0b25FdmVudENsaWNrLFxuXHRvbkNlbGxDbGljayxcblx0b25WaWV3Q2hhbmdlLFxuXHRvbkV2ZW50QWRkLFxuXHRvbkV2ZW50VXBkYXRlLFxuXHRvbkV2ZW50RGVsZXRlLFxuXHRvbkRhdGVDaGFuZ2UsXG5cdGxvY2FsZSxcblx0dGltZXpvbmUsXG5cdGRpc2FibGVDZWxsQ2xpY2ssXG5cdGRpc2FibGVFdmVudENsaWNrLFxuXHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdGRheU1heEV2ZW50cyxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdGhlYWRlckNvbXBvbmVudCxcblx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRidXNpbmVzc0hvdXJzLFxuXHRyZW5kZXJFdmVudEZvcm0sXG5cdHRyYW5zbGF0aW9ucyxcblx0dHJhbnNsYXRvcixcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0aGlkZU5vbkJ1c2luZXNzSG91cnMgPSBmYWxzZSxcblx0aGlkZGVuRGF5cyxcbn0pID0+IHtcblx0Ly8gVXNlIHRoZSBjYWxlbmRhciBlbmdpbmVcblx0Y29uc3QgY2FsZW5kYXJFbmdpbmUgPSB1c2VDYWxlbmRhckVuZ2luZSh7XG5cdFx0ZXZlbnRzLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGluaXRpYWxWaWV3LFxuXHRcdGluaXRpYWxEYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0b25FdmVudEFkZCxcblx0XHRvbkV2ZW50VXBkYXRlLFxuXHRcdG9uRXZlbnREZWxldGUsXG5cdFx0b25EYXRlQ2hhbmdlLFxuXHRcdG9uVmlld0NoYW5nZSxcblx0XHRsb2NhbGUsXG5cdFx0dGltZXpvbmUsXG5cdFx0dHJhbnNsYXRpb25zLFxuXHRcdHRyYW5zbGF0b3IsXG5cdH0pXG5cblx0Y29uc3QgZWRpdEV2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KGV2ZW50KVxuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0fSxcblx0XHRbY2FsZW5kYXJFbmdpbmVdXG5cdClcblxuXHQvLyBDdXN0b20gaGFuZGxlcnMgdGhhdCBjYWxsIGV4dGVybmFsIGNhbGxiYWNrc1xuXHRjb25zdCBoYW5kbGVFdmVudENsaWNrID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUV2ZW50Q2xpY2spIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cdFx0XHRpZiAob25FdmVudENsaWNrKSB7XG5cdFx0XHRcdG9uRXZlbnRDbGljayhldmVudClcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVkaXRFdmVudChldmVudClcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtkaXNhYmxlRXZlbnRDbGljaywgb25FdmVudENsaWNrLCBlZGl0RXZlbnRdXG5cdClcblxuXHRjb25zdCBoYW5kbGVEYXRlQ2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4ge1xuXHRcdFx0aWYgKGRpc2FibGVDZWxsQ2xpY2spIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cblx0XHRcdGlmIChvbkNlbGxDbGljaykge1xuXHRcdFx0XHRvbkNlbGxDbGljayhpbmZvKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2FsZW5kYXJFbmdpbmUub3BlbkV2ZW50Rm9ybShpbmZvKVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W29uQ2VsbENsaWNrLCBkaXNhYmxlQ2VsbENsaWNrLCBjYWxlbmRhckVuZ2luZV1cblx0KVxuXG5cdC8vIENyZWF0ZSB0aGUgY29udGV4dCB2YWx1ZVxuXHRjb25zdCBjb250ZXh0VmFsdWUgPSB1c2VNZW1vKFxuXHRcdCgpID0+ICh7XG5cdFx0XHRjdXJyZW50RGF0ZTogY2FsZW5kYXJFbmdpbmUuY3VycmVudERhdGUsXG5cdFx0XHR2aWV3OiBjYWxlbmRhckVuZ2luZS52aWV3LFxuXHRcdFx0ZXZlbnRzOiBjYWxlbmRhckVuZ2luZS5ldmVudHMsXG5cdFx0XHRyYXdFdmVudHM6IGNhbGVuZGFyRW5naW5lLnJhd0V2ZW50cyxcblx0XHRcdGN1cnJlbnRMb2NhbGU6IGNhbGVuZGFyRW5naW5lLmN1cnJlbnRMb2NhbGUsXG5cdFx0XHRpc0V2ZW50Rm9ybU9wZW46IGNhbGVuZGFyRW5naW5lLmlzRXZlbnRGb3JtT3Blbixcblx0XHRcdHNlbGVjdGVkRXZlbnQ6IGNhbGVuZGFyRW5naW5lLnNlbGVjdGVkRXZlbnQsXG5cdFx0XHRzZWxlY3RlZERhdGU6IGNhbGVuZGFyRW5naW5lLnNlbGVjdGVkRGF0ZSxcblx0XHRcdGZpcnN0RGF5T2ZXZWVrOiBjYWxlbmRhckVuZ2luZS5maXJzdERheU9mV2Vlayxcblx0XHRcdHNldEN1cnJlbnREYXRlOiBjYWxlbmRhckVuZ2luZS5zZXRDdXJyZW50RGF0ZSxcblx0XHRcdHNlbGVjdERhdGU6IGNhbGVuZGFyRW5naW5lLnNlbGVjdERhdGUsXG5cdFx0XHRzZXRWaWV3OiBjYWxlbmRhckVuZ2luZS5zZXRWaWV3LFxuXHRcdFx0bmV4dFBlcmlvZDogY2FsZW5kYXJFbmdpbmUubmV4dFBlcmlvZCxcblx0XHRcdHByZXZQZXJpb2Q6IGNhbGVuZGFyRW5naW5lLnByZXZQZXJpb2QsXG5cdFx0XHR0b2RheTogY2FsZW5kYXJFbmdpbmUudG9kYXksXG5cdFx0XHRhZGRFdmVudDogY2FsZW5kYXJFbmdpbmUuYWRkRXZlbnQsXG5cdFx0XHR1cGRhdGVFdmVudDogY2FsZW5kYXJFbmdpbmUudXBkYXRlRXZlbnQsXG5cdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudDogY2FsZW5kYXJFbmdpbmUudXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0XHRkZWxldGVFdmVudDogY2FsZW5kYXJFbmdpbmUuZGVsZXRlRXZlbnQsXG5cdFx0XHRkZWxldGVSZWN1cnJpbmdFdmVudDogY2FsZW5kYXJFbmdpbmUuZGVsZXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0XHRvcGVuRXZlbnRGb3JtOiBjYWxlbmRhckVuZ2luZS5vcGVuRXZlbnRGb3JtLFxuXHRcdFx0Y2xvc2VFdmVudEZvcm06IGNhbGVuZGFyRW5naW5lLmNsb3NlRXZlbnRGb3JtLFxuXHRcdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiBjYWxlbmRhckVuZ2luZS5nZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0XHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IGNhbGVuZGFyRW5naW5lLmZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHRcdHJlbmRlckV2ZW50LFxuXHRcdFx0b25FdmVudENsaWNrOiBoYW5kbGVFdmVudENsaWNrLFxuXHRcdFx0b25DZWxsQ2xpY2s6IGhhbmRsZURhdGVDbGljayxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHRcdFx0dDogY2FsZW5kYXJFbmdpbmUudCxcblx0XHRcdHRpbWVGb3JtYXQsXG5cdFx0XHRjbGFzc2VzT3ZlcnJpZGUsXG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0aGlkZGVuRGF5cyxcblx0XHR9KSxcblx0XHRbXG5cdFx0XHRjYWxlbmRhckVuZ2luZSxcblx0XHRcdHJlbmRlckV2ZW50LFxuXHRcdFx0aGFuZGxlRXZlbnRDbGljayxcblx0XHRcdGhhbmRsZURhdGVDbGljayxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRoaWRkZW5EYXlzLFxuXHRcdF1cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PENhbGVuZGFyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L0NhbGVuZGFyQ29udGV4dC5Qcm92aWRlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBDYWxlbmRhckRuZENvbnRleHQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9jYWxlbmRhci1kbmQtY29udGV4dCdcbmltcG9ydCB7IEV2ZW50Rm9ybURpYWxvZyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nJ1xuaW1wb3J0IHsgSGVhZGVyIH0gZnJvbSAnQC9jb21wb25lbnRzL2hlYWRlcidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IERheVZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvZGF5LXZpZXcnXG5pbXBvcnQgeyBNb250aFZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9tb250aC12aWV3J1xuaW1wb3J0IHsgV2Vla1ZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstdmlldydcbmltcG9ydCB7IFllYXJWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3llYXItdmlldy95ZWFyLXZpZXcnXG5pbXBvcnQgeyBDYWxlbmRhclByb3ZpZGVyIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWR1cGxpY2F0ZXNcbmltcG9ydCAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuXHRJbGFteUNhbGVuZGFyUHJvcEV2ZW50LFxuXHRJbGFteUNhbGVuZGFyUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQge1xuXHREQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0V0VFS19EQVlTX05VTUJFUl9NQVAsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IG5vcm1hbGl6ZUV2ZW50cywgc2FmZURhdGUgfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgQ2FsZW5kYXJDb250ZW50OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyB2aWV3LCBkYXlNYXhFdmVudHMgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB2aWV3TWFwID0ge1xuXHRcdG1vbnRoOiA8TW9udGhWaWV3IGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfSBrZXk9XCJtb250aFwiIC8+LFxuXHRcdHdlZWs6IDxXZWVrVmlldyBrZXk9XCJ3ZWVrXCIgLz4sXG5cdFx0ZGF5OiA8RGF5VmlldyBrZXk9XCJkYXlcIiAvPixcblx0XHR5ZWFyOiA8WWVhclZpZXcga2V5PVwieWVhclwiIC8+LFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiIGRhdGEtdGVzdGlkPVwiaWxhbXktY2FsZW5kYXJcIj5cblx0XHRcdDxIZWFkZXIgY2xhc3NOYW1lPVwicC0xXCIgLz5cblx0XHRcdHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZVByZXNlbmNlIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuXHRcdFx0PENhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBoLVtjYWxjKDEwMCUtMy41cmVtKV1cIlxuXHRcdFx0XHRcdGRpcmVjdGlvbj1cImhvcml6b250YWxcIlxuXHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e3ZpZXd9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImJvcmRlciBoLWZ1bGwgdy1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1ib2R5XCI+XG5cdFx0XHRcdFx0XHR7dmlld01hcFt2aWV3XX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHQ8L0NhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdDxFdmVudEZvcm1EaWFsb2cgLz5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5jb25zdCB0b0hpZGRlbkRheXNTZXQgPSAoaGlkZGVuRGF5cz86IFdlZWtEYXlzW10pOiBTZXQ8bnVtYmVyPiB8IHVuZGVmaW5lZCA9PiB7XG5cdGlmICghaGlkZGVuRGF5cyB8fCBoaWRkZW5EYXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZFxuXHRyZXR1cm4gbmV3IFNldChoaWRkZW5EYXlzLm1hcCgoZGF5KSA9PiBXRUVLX0RBWVNfTlVNQkVSX01BUFtkYXldKSlcbn1cblxuZXhwb3J0IGNvbnN0IElsYW15Q2FsZW5kYXI6IFJlYWN0LkZDPElsYW15Q2FsZW5kYXJQcm9wcz4gPSAoe1xuXHRldmVudHMsXG5cdGZpcnN0RGF5T2ZXZWVrID0gJ3N1bmRheScsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdGRheU1heEV2ZW50cyA9IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdGV2ZW50U3BhY2luZyA9IEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRzdGlja3lWaWV3SGVhZGVyID0gdHJ1ZSxcblx0dmlld0hlYWRlckNsYXNzTmFtZSA9ICcnLFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3VycyA9IGZhbHNlLFxuXHRoaWRkZW5EYXlzLFxuXHQuLi5wcm9wc1xufSkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxDYWxlbmRhclByb3ZpZGVyXG5cdFx0XHRkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c31cblx0XHRcdGV2ZW50U3BhY2luZz17ZXZlbnRTcGFjaW5nfVxuXHRcdFx0ZXZlbnRzPXtub3JtYWxpemVFdmVudHM8SWxhbXlDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4oZXZlbnRzKX1cblx0XHRcdGZpcnN0RGF5T2ZXZWVrPXtXRUVLX0RBWVNfTlVNQkVSX01BUFtmaXJzdERheU9mV2Vla119XG5cdFx0XHRoaWRkZW5EYXlzPXt0b0hpZGRlbkRheXNTZXQoaGlkZGVuRGF5cyl9XG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycz17aGlkZU5vbkJ1c2luZXNzSG91cnN9XG5cdFx0XHRpbml0aWFsRGF0ZT17c2FmZURhdGUoaW5pdGlhbERhdGUpfVxuXHRcdFx0aW5pdGlhbFZpZXc9e2luaXRpYWxWaWV3fVxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcj17c3RpY2t5Vmlld0hlYWRlcn1cblx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lPXt2aWV3SGVhZGVyQ2xhc3NOYW1lfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxDYWxlbmRhckNvbnRlbnQgLz5cblx0XHQ8L0NhbGVuZGFyUHJvdmlkZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmludGVyZmFjZSBSZXNvdXJjZUV2ZW50R3JpZFByb3BzIHtcblx0LyoqXG5cdCAqIEFycmF5IG9mIGRheXMgdG8gZGlzcGxheSBpbiB0aGUgZ3JpZFxuXHQgKi9cblx0ZGF5czogZGF5anMuRGF5anNbXSB8IGRheWpzLkRheWpzW11bXVxuXHQvKiogVGhlIHR5cGUgb2YgZ3JpZCB0byBkaXNwbGF5IC0gJ2RheScgZm9yIGRheSB2aWV3LCAnaG91cicgZm9yIHdlZWsgdmlld1xuXHQgKiAoYWZmZWN0cyBldmVudCBwb3NpdGlvbmluZyBsb2dpYylcblx0ICovXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0LyoqXG5cdCAqIENoaWxkcmVuIHdpbGwgYmUgcmVuZGVyZWQgYXMgaGVhZGVycyBhYm92ZSB0aGUgZ3JpZFxuXHQgKiAoZS5nLiwgZm9yIGRheSBuYW1lcyBpbiBtb250aCB2aWV3KVxuXHQgKi9cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBib2R5Pzogc3RyaW5nOyBzY3JvbGw/OiBzdHJpbmc7IGNlbGw/OiBzdHJpbmcgfVxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VFdmVudEdyaWQ6IFJlYWN0LkZDPFJlc291cmNlRXZlbnRHcmlkUHJvcHM+ID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0Y2hpbGRyZW4sXG5cdGNsYXNzZXMsXG59KSA9PiB7XG5cdGNvbnN0IHsgZ2V0VmlzaWJsZVJlc291cmNlcyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHZpc2libGVSZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblxuXHRjb25zdCBjb2x1bW5zID0gZGF5cy5tYXAoKGRheSkgPT4ge1xuXHRcdGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGRheSlcblx0XHRyZXR1cm4ge1xuXHRcdFx0aWQ6IGBjb2wtJHtpc0FycmF5ID8gZGF5WzBdPy5mb3JtYXQoJ1lZWVktTU0tREQnKSA6IGRheS50b0lTT1N0cmluZygpfWAsXG5cdFx0XHRkYXk6IGlzQXJyYXkgPyB1bmRlZmluZWQgOiBkYXksXG5cdFx0XHRkYXlzOiBpc0FycmF5ID8gZGF5IDogdW5kZWZpbmVkLFxuXHRcdFx0Y2xhc3NOYW1lOiBjbGFzc2VzPy5jZWxsLFxuXHRcdFx0Z3JpZFR5cGUsXG5cdFx0fVxuXHR9KVxuXG5cdGNvbnN0IHJvd3MgPSB2aXNpYmxlUmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+ICh7XG5cdFx0aWQ6IHJlc291cmNlLmlkLFxuXHRcdHRpdGxlOiByZXNvdXJjZS50aXRsZSxcblx0XHRyZXNvdXJjZTogcmVzb3VyY2UsXG5cdFx0Y29sdW1ucyxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8SG9yaXpvbnRhbEdyaWRcblx0XHRcdGNsYXNzZXM9e2NsYXNzZXN9XG5cdFx0XHRkYXlOdW1iZXJIZWlnaHQ9ezB9XG5cdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRyb3dzPXtyb3dzfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L0hvcml6b250YWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IFJlc291cmNlRXZlbnRHcmlkIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlIb3Jpem9udGFsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdHQsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHR0aW1lRm9ybWF0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCByZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblxuXHQvLyBHZW5lcmF0ZSB0aW1lIGNvbHVtbnMgKGhvdXJseSBzbG90cylcblx0Y29uc3QgZGF5SG91cnMgPSBnZXRWaWV3SG91cnMoe1xuXHRcdHJlZmVyZW5jZURhdGU6IGN1cnJlbnREYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0YWxsRGF0ZXM6IFtjdXJyZW50RGF0ZV0sXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzOiByZXNvdXJjZXNcblx0XHRcdC5tYXAoKHIpID0+IHIuYnVzaW5lc3NIb3Vycylcblx0XHRcdC5maWx0ZXIoQm9vbGVhbikgYXMgKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW10sXG5cdH0pXG5cblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VFdmVudEdyaWRcblx0XHRcdGNsYXNzZXM9e3tcblx0XHRcdFx0aGVhZGVyOiAnbWluLXctZnVsbCcsXG5cdFx0XHRcdGJvZHk6ICdtaW4tdy1mdWxsJyxcblx0XHRcdFx0Y2VsbDogJ21pbi13LTIwIGZsZXgtMScsXG5cdFx0XHR9fVxuXHRcdFx0ZGF5cz17ZGF5SG91cnN9XG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidy0yMCBzbTp3LTQwIGJvcmRlci1iIGJvcmRlci1yIHNocmluay0wIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXNvdXJjZXMnKX08L2Rpdj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBmbGV4IGZsZXgtY29sXCI+XG5cdFx0XHRcdHsvKiBUaW1lIGhlYWRlciByb3cgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHRcdFx0e2RheUhvdXJzLm1hcCgoY29sLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgaXNOb3dIb3VyID0gY29sLmlzU2FtZShkYXlqcygpLCAnaG91cicpXG5cdFx0XHRcdFx0XHRjb25zdCBrZXkgPSBgcmVzb3VyY2UtZGF5LWhlYWRlci0ke2NvbC50b0lTT1N0cmluZygpfWBcblxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHQnbWluLXctMjAgZmxleC0xIGJvcmRlci1iIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXhzIHNocmluay0wJyxcblx0XHRcdFx0XHRcdFx0XHRcdGlzTm93SG91ciAmJiAnYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwIGZvbnQtbWVkaXVtJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2ByZXNvdXJjZS1kYXktdGltZS1sYWJlbC0ke2NvbC5mb3JtYXQoJ0hIJyl9YH1cblx0XHRcdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17YCR7a2V5fS1hbmltYXRlZGB9XG5cdFx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17YCR7a2V5fS1tb3Rpb25gfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuXHRcdFx0XHRcdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0aG91cjEyOiB0aW1lRm9ybWF0ID09PSAnMTItaG91cicsXG5cdFx0XHRcdFx0XHRcdFx0fSkuZm9ybWF0KGNvbC50b0RhdGUoKSl9XG5cdFx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH0pfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvUmVzb3VyY2VFdmVudEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQWxsRGF5Q2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LWNlbGwnXG5pbXBvcnQgeyBBbGxEYXlSb3cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlRGF5VmVydGljYWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblx0XHRjdXJyZW50TG9jYWxlLFxuXHRcdHRpbWVGb3JtYXQsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCByZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblx0Y29uc3QgaG91cnMgPSBnZXRWaWV3SG91cnMoe1xuXHRcdHJlZmVyZW5jZURhdGU6IGN1cnJlbnREYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0YWxsRGF0ZXM6IFtjdXJyZW50RGF0ZV0sXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzOiByZXNvdXJjZXNcblx0XHRcdC5tYXAoKHIpID0+IHIuYnVzaW5lc3NIb3Vycylcblx0XHRcdC5maWx0ZXIoQm9vbGVhbikgYXMgKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW10sXG5cdH0pXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB7XG5cdFx0aWQ6ICd0aW1lLWNvbCcsXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0Y2xhc3NOYW1lOlxuXHRcdFx0J3Nocmluay0wIHctMTYgbWluLXctMTYgbWF4LXctMTYgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAnLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IGRheWpzLkRheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcblx0XHRcdFx0XHRob3VyOiAnbnVtZXJpYycsXG5cdFx0XHRcdFx0aG91cjEyOiB0aW1lRm9ybWF0ID09PSAnMTItaG91cicsXG5cdFx0XHRcdH0pLmZvcm1hdChkYXRlLnRvRGF0ZSgpKX1cblx0XHRcdDwvZGl2PlxuXHRcdCksXG5cdH1cblxuXHRjb25zdCBjb2x1bW5zID0gcmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+ICh7XG5cdFx0aWQ6IGBkYXktY29sLSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9LXJlc291cmNlLSR7cmVzb3VyY2UuaWR9YCxcblx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRyZXNvdXJjZSxcblx0XHRkYXlzOiBob3Vycyxcblx0XHRkYXk6IGN1cnJlbnREYXRlLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0YWxsRGF5Um93PXtcblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbFwiPlxuXHRcdFx0XHRcdDxBbGxEYXlDZWxsIC8+XG5cdFx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0XHQ8QWxsRGF5Um93XG5cdFx0XHRcdFx0XHRcdGNsYXNzZXM9e3sgY2VsbDogJ21pbi13LTUwJyB9fVxuXHRcdFx0XHRcdFx0XHRkYXlzPXtbY3VycmVudERhdGVdfVxuXHRcdFx0XHRcdFx0XHRrZXk9e2ByZXNvdXJjZS1hbGxkYXktcm93LSR7cmVzb3VyY2UuaWR9YH1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRzaG93U3BhY2VyPXtmYWxzZX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0fVxuXHRcdFx0Y2VsbFNsb3RzPXtbMCwgMTUsIDMwLCA0NV19XG5cdFx0XHRjbGFzc2VzPXt7IGJvZHk6ICd3LWZ1bGwnLCBoZWFkZXI6ICd3LWZ1bGwnIH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIC4uLmNvbHVtbnNdfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS1kYXlcIlxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHQ+XG5cdFx0XHR7LyogSGVhZGVyICovfVxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9eydmbGV4IGJvcmRlci1iIGgtMTIgZmxleC0xJ31cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS1tb250aC1oZWFkZXJcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNocmluay0wIGJvcmRlci1yIHctMTYgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIiAvPlxuXHRcdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+IChcblx0XHRcdFx0XHQ8UmVzb3VyY2VDZWxsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtaW4tdy01MCBmbGV4LTFcIlxuXHRcdFx0XHRcdFx0a2V5PXtgcmVzb3VyY2UtY2VsbC0ke3Jlc291cmNlLmlkfWB9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlRGF5SG9yaXpvbnRhbCB9IGZyb20gJy4vcmVzb3VyY2UtZGF5LWhvcml6b250YWwnXG5pbXBvcnQgeyBSZXNvdXJjZURheVZlcnRpY2FsIH0gZnJvbSAnLi9yZXNvdXJjZS1kYXktdmVydGljYWwnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZURheVZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IG9yaWVudGF0aW9uIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKG9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XG5cdFx0cmV0dXJuIDxSZXNvdXJjZURheVZlcnRpY2FsIC8+XG5cdH1cblxuXHRyZXR1cm4gPFJlc291cmNlRGF5SG9yaXpvbnRhbCAvPlxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBnZXRNb250aERheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VNb250aEhvcml6b250YWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Ly8gR2VuZXJhdGUgY2FsZW5kYXIgZ3JpZCAtIGRheXMgb2YgdGhlIG1vbnRoXG5cdGNvbnN0IG1vbnRoRGF5cyA9IHVzZU1lbW88ZGF5anMuRGF5anNbXT4oKCkgPT4ge1xuXHRcdHJldHVybiBnZXRNb250aERheXMoY3VycmVudERhdGUpXG5cdH0sIFtjdXJyZW50RGF0ZV0pXG5cblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VFdmVudEdyaWQgZGF5cz17bW9udGhEYXlzfT5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidy0yMCBzbTp3LTQwIGJvcmRlci1iIGJvcmRlci1yIHNocmluay0wIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXNvdXJjZXMnKX08L2Rpdj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHR7bW9udGhEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBrZXkgPSBgcmVzb3VyY2UtbW9udGgtaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9YFxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy0yMCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBmbGV4LWNvbFwiXG5cdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2Ake2tleX0tbW90aW9uYH1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1tZWRpdW1cIj57ZGF5LmZvcm1hdCgnRCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnZGRkJyl9XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJlc291cmNlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VNb250aFZlcnRpY2FsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgZ2V0VmlzaWJsZVJlc291cmNlcyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHJlc291cmNlcyA9IGdldFZpc2libGVSZXNvdXJjZXMoKVxuXHRjb25zdCBzdGFydE9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cdGNvbnN0IGRheXNJbk1vbnRoID0gQXJyYXkuZnJvbShcblx0XHR7IGxlbmd0aDogY3VycmVudERhdGUuZGF5c0luTW9udGgoKSB9LFxuXHRcdChfLCBpKSA9PiBzdGFydE9mTW9udGguYWRkKGksICdkYXknKVxuXHQpXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB7XG5cdFx0aWQ6ICdkYXRlLWNvbCcsXG5cdFx0ZGF5czogZGF5c0luTW9udGgsXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0Y2xhc3NOYW1lOlxuXHRcdFx0J3Nocmluay0wIHctMTYgbWluLXctMTYgbWF4LXctMTYgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAnLFxuXHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0XHRub0V2ZW50czogdHJ1ZSxcblx0XHRyZW5kZXJDZWxsOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHAtMiB0ZXh0LXJpZ2h0IHRleHQtWzEwcHhdIHNtOnRleHQteHMgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cblx0XHRcdFx0PHNwYW4+e2RhdGUuZm9ybWF0KCdEJyl9PC9zcGFuPlxuXHRcdFx0XHQ8c3Bhbj57ZGF0ZS5mb3JtYXQoJ2RkZCcpfTwvc3Bhbj5cblx0XHRcdDwvZGl2PlxuXHRcdCksXG5cdH1cblxuXHRjb25zdCBjb2x1bW5zID0gcmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+ICh7XG5cdFx0aWQ6IGBtb250aC1jb2wtcmVzb3VyY2UtJHtyZXNvdXJjZS5pZH1gLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdHJlc291cmNlSWQ6IHJlc291cmNlLmlkLFxuXHRcdGRheXM6IGRheXNJbk1vbnRoLFxuXHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8VmVydGljYWxHcmlkXG5cdFx0XHRjbGFzc2VzPXt7IGhlYWRlcjogJ3ctZnVsbCcsIGJvZHk6ICd3LWZ1bGwnIH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIC4uLmNvbHVtbnNdfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS1tb250aC12ZXJ0aWNhbC1ncmlkXCJcblx0XHQ+XG5cdFx0XHR7LyogSGVhZGVyICovfVxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9eydmbGV4IGJvcmRlci1iIGgtMTIgZmxleC0xJ31cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS1tb250aC1oZWFkZXJcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNocmluay0wIGJvcmRlci1yIHctMTYgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIiAvPlxuXHRcdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+IChcblx0XHRcdFx0XHQ8UmVzb3VyY2VDZWxsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtaW4tdy01MCBmbGV4LTFcIlxuXHRcdFx0XHRcdFx0a2V5PXtgcmVzb3VyY2UtY2VsbC0ke3Jlc291cmNlLmlkfWB9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlTW9udGhIb3Jpem9udGFsIH0gZnJvbSAnLi9yZXNvdXJjZS1tb250aC1ob3Jpem9udGFsJ1xuaW1wb3J0IHsgUmVzb3VyY2VNb250aFZlcnRpY2FsIH0gZnJvbSAnLi9yZXNvdXJjZS1tb250aC12ZXJ0aWNhbCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlTW9udGhWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBvcmllbnRhdGlvbiB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGlmIChvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuXHRcdHJldHVybiA8UmVzb3VyY2VNb250aFZlcnRpY2FsIC8+XG5cdH1cblxuXHRyZXR1cm4gPFJlc291cmNlTW9udGhIb3Jpem9udGFsIC8+XG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IFJlc291cmNlRXZlbnRHcmlkIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrSG9yaXpvbnRhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHR0LFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0dGltZUZvcm1hdCxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgcmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cblx0Ly8gR2VuZXJhdGUgd2VlayBkYXlzXG5cdGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspLFxuXHRcdFtjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHQvLyBSZXNvdXJjZS1zcGVjaWZpYyBidXNpbmVzcyBob3VycyBjb21iaW5lZFxuXHRjb25zdCByZXNvdXJjZUJ1c2luZXNzSG91cnMgPSB1c2VNZW1vKFxuXHRcdCgpID0+XG5cdFx0XHRyZXNvdXJjZXMubWFwKChyKSA9PiByLmJ1c2luZXNzSG91cnMpLmZpbHRlcihCb29sZWFuKSBhcyAoXG5cdFx0XHRcdHwgQnVzaW5lc3NIb3Vyc1xuXHRcdFx0XHR8IEJ1c2luZXNzSG91cnNbXVxuXHRcdFx0KVtdLFxuXHRcdFtyZXNvdXJjZXNdXG5cdClcblxuXHQvLyBHZW5lcmF0ZSB0aW1lIGNvbHVtbnMgKGhvdXJseSBzbG90cylcblx0Y29uc3Qgd2Vla0hvdXJzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0cmV0dXJuIHdlZWtEYXlzLm1hcCgoZGF5KSA9PlxuXHRcdFx0Z2V0Vmlld0hvdXJzKHtcblx0XHRcdFx0cmVmZXJlbmNlRGF0ZTogZGF5LFxuXHRcdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHRcdFx0fSlcblx0XHQpXG5cdH0sIFt3ZWVrRGF5cywgYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMsIHJlc291cmNlQnVzaW5lc3NIb3Vyc10pXG5cblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VFdmVudEdyaWRcblx0XHRcdGNsYXNzZXM9e3tcblx0XHRcdFx0aGVhZGVyOiAnaC0yNCBtaW4tdy1mdWxsJyxcblx0XHRcdFx0Ym9keTogJ21pbi13LWZ1bGwnLFxuXHRcdFx0XHRjZWxsOiAnbWluLXctMjAgZmxleC0xJyxcblx0XHRcdH19XG5cdFx0XHRkYXlzPXt3ZWVrSG91cnN9XG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidy0yMCBzbTp3LTQwIGJvcmRlci1iIGJvcmRlci1yIHNocmluay0wIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXNvdXJjZXMnKX08L2Rpdj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBmbGV4IGZsZXgtY29sXCI+XG5cdFx0XHRcdHsvKiBEYXkgaGVhZGVyIHJvdyAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTJcIj5cblx0XHRcdFx0XHR7d2Vla0RheXMubWFwKChkYXksIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5Jylcblx0XHRcdFx0XHRcdGNvbnN0IGtleSA9IGByZXNvdXJjZS13ZWVrLWhlYWRlci0ke2RheS50b0lTT1N0cmluZygpfS1kYXlgXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J3Nocmluay0wIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBib3JkZXItYiBmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXIgZm9udC1tZWRpdW0nLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNUb2RheSAmJiAnYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS13ZWVrLWRheS1oZWFkZXJcIlxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInN0aWNreSBsZWZ0LTEvMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnTS9EJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBUaW1lIGhlYWRlciByb3cgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyIGJvcmRlci1iXCI+XG5cdFx0XHRcdFx0e3dlZWtIb3Vycy5mbGF0KCkubWFwKChjb2wsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpc05vd0hvdXIgPSBjb2wuaXNTYW1lKGRheWpzKCksICdob3VyJylcblx0XHRcdFx0XHRcdGNvbnN0IGtleSA9IGByZXNvdXJjZS13ZWVrLWhlYWRlci0ke2NvbC50b0lTT1N0cmluZygpfS1ob3VyYFxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdtaW4tdy0yMCBmbGV4LTEgYm9yZGVyLXIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC14cyBzaHJpbmstMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc05vd0hvdXIgJiYgJ2JnLWJsdWUtNTAgdGV4dC1ibHVlLTYwMCBmb250LW1lZGl1bSdcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgcmVzb3VyY2Utd2Vlay10aW1lLWxhYmVsLSR7Y29sLmZvcm1hdCgnSEgnKX1gfVxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDA1fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17YCR7a2V5fS1hbmltYXRlZGB9XG5cdFx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17YCR7a2V5fS1tb3Rpb25gfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuXHRcdFx0XHRcdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0aG91cjEyOiB0aW1lRm9ybWF0ID09PSAnMTItaG91cicsXG5cdFx0XHRcdFx0XHRcdFx0fSkuZm9ybWF0KGNvbC50b0RhdGUoKSl9XG5cdFx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH0pfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvUmVzb3VyY2VFdmVudEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbGxEYXlDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktY2VsbCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVdlZWtWZXJ0aWNhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRnZXRWaXNpYmxlUmVzb3VyY2VzLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0dGltZUZvcm1hdCxcblx0XHR0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZGVuRGF5cyxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCByZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblx0Ly8gR2VuZXJhdGUgd2VlayBkYXlzXG5cdGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspLFxuXHRcdFtjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCB2aXNpYmxlRGF5cyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdGhpZGRlbkRheXNcblx0XHRcdFx0PyB3ZWVrRGF5cy5maWx0ZXIoKGRheSkgPT4gIWhpZGRlbkRheXMuaGFzKGRheS5kYXkoKSkpXG5cdFx0XHRcdDogd2Vla0RheXMsXG5cdFx0W3dlZWtEYXlzLCBoaWRkZW5EYXlzXVxuXHQpXG5cblx0Y29uc3QgaG91cnMgPSB1c2VNZW1vKFxuXHRcdCgpID0+XG5cdFx0XHRnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzOiByZXNvdXJjZXNcblx0XHRcdFx0XHQubWFwKChyKSA9PiByLmJ1c2luZXNzSG91cnMpXG5cdFx0XHRcdFx0LmZpbHRlcihCb29sZWFuKSBhcyAoQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSlbXSxcblx0XHRcdH0pLFxuXHRcdFtjdXJyZW50RGF0ZSwgYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMsIHdlZWtEYXlzLCByZXNvdXJjZXNdXG5cdClcblxuXHRjb25zdCBmaXJzdENvbCA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdGlkOiAndGltZS1jb2wnLFxuXHRcdFx0ZGF5czogaG91cnMsXG5cdFx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRcdGNsYXNzTmFtZTpcblx0XHRcdFx0J3Nocmluay0wIHctMTYgbWluLXctMTYgbWF4LXctMTYgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAnLFxuXHRcdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0XHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdFx0cmVuZGVyQ2VsbDogKGRhdGU6IGRheWpzLkRheWpzKSA9PiAoXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHAtMiB0ZXh0LXJpZ2h0IHRleHQtWzEwcHhdIHNtOnRleHQteHMgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cblx0XHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0XHRob3VyOiAnbnVtZXJpYycsXG5cdFx0XHRcdFx0XHRob3VyMTI6IHRpbWVGb3JtYXQgPT09ICcxMi1ob3VyJyxcblx0XHRcdFx0XHR9KS5mb3JtYXQoZGF0ZS50b0RhdGUoKSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KSxcblx0XHR9KSxcblx0XHRbaG91cnMsIGN1cnJlbnRMb2NhbGUsIHRpbWVGb3JtYXRdXG5cdClcblxuXHRjb25zdCBjb2x1bW5zID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0cmVzb3VyY2VzLmZsYXRNYXAoKHJlc291cmNlKSA9PlxuXHRcdFx0XHR2aXNpYmxlRGF5cy5tYXAoKGRheSkgPT4gKHtcblx0XHRcdFx0XHRpZDogYGRheS1jb2wtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9LXJlc291cmNlLSR7cmVzb3VyY2UuaWR9YCxcblx0XHRcdFx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRcdFx0XHRyZXNvdXJjZSxcblx0XHRcdFx0XHRkYXksXG5cdFx0XHRcdFx0ZGF5czogZ2V0Vmlld0hvdXJzKHtcblx0XHRcdFx0XHRcdHJlZmVyZW5jZURhdGU6IGRheSxcblx0XHRcdFx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdFx0XHRcdHJlc291cmNlQnVzaW5lc3NIb3VyczogcmVzb3VyY2VzXG5cdFx0XHRcdFx0XHRcdC5tYXAoKHIpID0+IHIuYnVzaW5lc3NIb3Vycylcblx0XHRcdFx0XHRcdFx0LmZpbHRlcihCb29sZWFuKSBhcyAoQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSlbXSxcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdFx0XHR9KSlcblx0XHRcdCksXG5cdFx0W3Jlc291cmNlcywgd2Vla0RheXMsIGJ1c2luZXNzSG91cnMsIGhpZGVOb25CdXNpbmVzc0hvdXJzLCB2aXNpYmxlRGF5cy5tYXBdXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleFwiPlxuXHRcdFx0XHRcdDxBbGxEYXlDZWxsIC8+XG5cdFx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0XHQ8QWxsRGF5Um93XG5cdFx0XHRcdFx0XHRcdGNsYXNzZXM9e3sgY2VsbDogJ21pbi13LTUwJyB9fVxuXHRcdFx0XHRcdFx0XHRkYXlzPXt2aXNpYmxlRGF5c31cblx0XHRcdFx0XHRcdFx0a2V5PXtgcmVzb3VyY2Utd2Vlay1hbGxkYXktcm93LSR7cmVzb3VyY2UuaWR9YH1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRzaG93U3BhY2VyPXtmYWxzZX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0fVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6ICdoLTI0JyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2Utd2Vla1wiXG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0ey8qIFJlc291cmNlIGhlYWRlciByb3cgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCB3LTE2IGJvcmRlci1yIHotMjAgYmctYmFja2dyb3VuZCBzdGlja3kgbGVmdC0wXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJweC0yIGgtZnVsbCB3LWZ1bGwgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1lbmQgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0e3QoJ3dlZWsnKX1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBrZXkgPSBgcmVzb3VyY2Utd2Vlay1oZWFkZXItJHtyZXNvdXJjZS5pZH0tZGF5YFxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdzaHJpbmstMCBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgYm9yZGVyLWIgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXIgZm9udC1tZWRpdW0nXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17YCR7a2V5fS1hbmltYXRlZGB9XG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRcdFx0XHRcdHdpZHRoOiBgY2FsYygke3Zpc2libGVEYXlzLmxlbmd0aH0gKiB2YXIoLS1zcGFjaW5nKSAqIDUwKWAsXG5cdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8UmVzb3VyY2VDZWxsXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLWZ1bGwgdy1mdWxsIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzdGlja3kgbGVmdC0xLzIgdGV4dC1zbSBmb250LW1lZGl1bSB0cnVuY2F0ZVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7cmVzb3VyY2UudGl0bGV9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8L1Jlc291cmNlQ2VsbD5cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBEYXRlIGhlYWRlciByb3cgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCB3LTE2IGJvcmRlci1yIGJvcmRlci1iIHotMjAgYmctYmFja2dyb3VuZCBzdGlja3kgbGVmdC0wXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJweC0yIGgtZnVsbCB3LWZ1bGwgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1zdGFydCBmb250LW1lZGl1bVwiPlxuXHRcdFx0XHRcdFx0XHR7Y3VycmVudERhdGUud2VlaygpfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdHtjb2x1bW5zLm1hcCgoY29sLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgZGF5ID0gY29sLmRheVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9LWhvdXItJHtjb2wucmVzb3VyY2VJZH1gXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J3ctNTAgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQteHMgc2hyaW5rLTAgYmctYmFja2dyb3VuZCdcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgcmVzb3VyY2Utd2Vlay10aW1lLWxhYmVsLSR7ZGF5LmZvcm1hdCgnSEgnKX1gfVxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e2RheS5mb3JtYXQoJ00vRCcpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlV2Vla0hvcml6b250YWwgfSBmcm9tICcuL3Jlc291cmNlLXdlZWstaG9yaXpvbnRhbCdcbmltcG9ydCB7IFJlc291cmNlV2Vla1ZlcnRpY2FsIH0gZnJvbSAnLi9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgb3JpZW50YXRpb24gfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRpZiAob3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcpIHtcblx0XHRyZXR1cm4gPFJlc291cmNlV2Vla1ZlcnRpY2FsIC8+XG5cdH1cblxuXHRyZXR1cm4gPFJlc291cmNlV2Vla0hvcml6b250YWwgLz5cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgQ2FsZW5kYXJEbmRDb250ZXh0IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQnXG5pbXBvcnQgeyBFdmVudEZvcm1EaWFsb2cgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtLWRpYWxvZydcbmltcG9ydCB7IEhlYWRlciB9IGZyb20gJ0AvY29tcG9uZW50cy9oZWFkZXInXG5pbXBvcnQgeyBSZXNvdXJjZURheVZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcnXG5pbXBvcnQgeyBSZXNvdXJjZU1vbnRoVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3J1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNhbGVuZGFyQm9keTogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgdmlldyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHZpZXdNYXAgPSB7XG5cdFx0bW9udGg6IDxSZXNvdXJjZU1vbnRoVmlldyBrZXk9XCJtb250aFwiIC8+LFxuXHRcdHdlZWs6IDxSZXNvdXJjZVdlZWtWaWV3IGtleT1cIndlZWtcIiAvPixcblx0XHRkYXk6IDxSZXNvdXJjZURheVZpZXcga2V5PVwiZGF5XCIgLz4sXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImlsYW15LXJlc291cmNlLWNhbGVuZGFyXCJcblx0XHQ+XG5cdFx0XHQ8SGVhZGVyIGNsYXNzTmFtZT1cInAtMVwiIC8+XG5cblx0XHRcdHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZWRTZWN0aW9uIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuXHRcdFx0PENhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBoLVtjYWxjKDEwMCUtMy41cmVtKV0gQGNvbnRhaW5lci9jYWxlbmRhci1ib2R5XCJcblx0XHRcdFx0XHRkaXJlY3Rpb249XCJob3Jpem9udGFsXCJcblx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXt2aWV3fVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJib3JkZXIgaC1mdWxsIHctZnVsbFwiIGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItYm9keVwiPlxuXHRcdFx0XHRcdFx0e3ZpZXdNYXBbdmlld119XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0PC9DYWxlbmRhckRuZENvbnRleHQ+XG5cblx0XHRcdHsvKiBFdmVudCBGb3JtIERpYWxvZyAqL31cblx0XHRcdDxFdmVudEZvcm1EaWFsb2cgLz5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCwgV2Vla0RheXMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXIgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7XG5cdElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCxcblx0SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQge1xuXHREQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0V0VFS19EQVlTX05VTUJFUl9NQVAsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IG5vcm1hbGl6ZUV2ZW50cywgc2FmZURhdGUgfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJCb2R5IH0gZnJvbSAnLi9yZXNvdXJjZS1jYWxlbmRhci1ib2R5J1xuXG5jb25zdCB0b0hpZGRlbkRheXNTZXQgPSAoaGlkZGVuRGF5cz86IFdlZWtEYXlzW10pOiBTZXQ8bnVtYmVyPiB8IHVuZGVmaW5lZCA9PiB7XG5cdGlmICghaGlkZGVuRGF5cyB8fCBoaWRkZW5EYXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZFxuXHRyZXR1cm4gbmV3IFNldChoaWRkZW5EYXlzLm1hcCgoZGF5KSA9PiBXRUVLX0RBWVNfTlVNQkVSX01BUFtkYXldKSlcbn1cblxuZXhwb3J0IGNvbnN0IElsYW15UmVzb3VyY2VDYWxlbmRhcjogUmVhY3QuRkM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHM+ID0gKHtcblx0ZXZlbnRzID0gW10sXG5cdHJlc291cmNlcyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9ICdzdW5kYXknLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRkaXNhYmxlRHJhZ0FuZERyb3AgPSBmYWxzZSxcblx0ZGF5TWF4RXZlbnRzID0gREFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdGhpZGRlbkRheXMsXG5cdC4uLnByb3BzXG59KSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlQ2FsZW5kYXJQcm92aWRlclxuXHRcdFx0ZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3A9e2Rpc2FibGVEcmFnQW5kRHJvcH1cblx0XHRcdGV2ZW50U3BhY2luZz17ZXZlbnRTcGFjaW5nfVxuXHRcdFx0ZXZlbnRzPXtub3JtYWxpemVFdmVudHM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50Pihcblx0XHRcdFx0ZXZlbnRzXG5cdFx0XHQpfVxuXHRcdFx0Zmlyc3REYXlPZldlZWs9e1dFRUtfREFZU19OVU1CRVJfTUFQW2ZpcnN0RGF5T2ZXZWVrXX1cblx0XHRcdGhpZGRlbkRheXM9e3RvSGlkZGVuRGF5c1NldChoaWRkZW5EYXlzKX1cblx0XHRcdGluaXRpYWxEYXRlPXtzYWZlRGF0ZShpbml0aWFsRGF0ZSl9XG5cdFx0XHRpbml0aWFsVmlldz17aW5pdGlhbFZpZXd9XG5cdFx0XHRyZXNvdXJjZXM9e3Jlc291cmNlc31cblx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PFJlc291cmNlQ2FsZW5kYXJCb2R5IC8+XG5cdFx0PC9SZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXI+XG5cdClcbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICJBQUlBLGdCQUFTLGVDSlQsZ0JBQVMsZUNBVCxzQkFDQSwwQ0FDQSw4Q0FDQSwrQ0FDQSwyQ0FDQSx1Q0FDQSx5Q0FDQSxvQ0FDQSx3Q0FDQSwyQ0FHQSxHQUFNLE9BQU8sRUFBTyxFQUNwQixHQUFNLE9BQU8sRUFBVSxFQUN2QixHQUFNLE9BQU8sRUFBYSxFQUMxQixHQUFNLE9BQU8sRUFBYyxFQUMzQixHQUFNLE9BQU8sRUFBUyxFQUN0QixHQUFNLE9BQU8sRUFBTSxFQUNuQixHQUFNLE9BQU8sRUFBUSxFQUNyQixHQUFNLE9BQU8sRUFBRyxFQUNoQixHQUFNLE9BQU8sRUFBVSxFQUV2QixJQUFlLEtDckJmLGVBQVMsY0FDVCxrQkFBUyx3QkFHRixTQUFTLENBQUUsSUFBSSxFQUFzQixDQUMzQyxPQUFPLEdBQVEsR0FBSyxDQUFNLENBQUMsRUFHckIsU0FBUyxFQUFRLENBQ3ZCLEVBQzBCLENBQzFCLEdBQUksSUFBUyxPQUNaLE9BRUQsR0FBSSxFQUFNLFFBQVEsQ0FBSSxFQUNyQixPQUFPLEVBRVIsSUFBTSxFQUFhLEVBQU0sQ0FBSSxFQUM3QixPQUFPLEVBQVcsUUFBUSxFQUFJLEVBQWEsT0FHckMsSUFB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QUNWLEVBQU0sd0JBQXdCLEVBQUksWUFBWSxVQUFVLEVBQUksYUFFbEUsT0FDQyxHQWFFLEVBYkYsQ0FDQyxVQUFXLEVBQ1YsaUhBQ0QsRUFDQSxjQUFhLDRCQUE0QixFQUFJLE9BQU8sSUFBSSxJQUN4RCxNQUFPLEVBQVEsS0FFZixjQUFlLEdBQUcsV0FQbkIsU0FhRSxDQUpELEdBQThDLE1BQTlDLENBQUssVUFBVSxVQUFmLFNBQTBCLEVBQUksT0FBTyxLQUFLLEVBQUksRUFDOUMsR0FFRSxNQUZGLENBQUssVUFBVSxnQ0FBZixTQUNFLEVBQUksT0FBTyxLQUFLLEVBQ2hCLElBTkcsR0FBRyxZQU9QLEVBRUgsR0FDQSxHQUNELEVBQ0QsNENDdExHLElBQU0sR0FBNkIsSUFBTSxDQUMvQyxJQUFRLGVBQWdCLEVBQXdCLEVBRWhELEdBQUksSUFBZ0IsV0FDbkIsT0FBTyxHQUFDLEdBQUQsRUFBc0IsRUFHOUIsT0FBTyxHQUFDLEdBQUQsRUFBd0IsdURDRnpCLElBQU0sR0FBaUMsSUFBTSxDQUNuRCxJQUFRLFFBQVMsRUFBd0IsRUFRekMsT0FDQyxHQXFCRSxNQXJCRixDQUNDLFVBQVUsOEJBQ1YsY0FBWSwwQkFGYixTQXFCRSxDQWpCRCxHQUFDLEdBQUQsQ0FBUSxVQUFVLE1BQU0sRUFHeEIsR0FVRSxHQVZGLFVBQ0MsR0FRRSxFQVJGLENBQ0MsVUFBVSx3REFDVixVQUFVLGFBQ1YsY0FBZSxFQUhoQixTQUtDLEdBRUUsTUFGRixDQUFLLFVBQVUsdUJBQXVCLGNBQVksZ0JBQWxELFNBcEJZLENBQ2YsTUFBTyxHQUFDLEdBQUQsR0FBdUIsT0FBUSxFQUN0QyxLQUFNLEdBQUMsR0FBRCxHQUFzQixNQUFPLEVBQ25DLElBQUssR0FBQyxHQUFELEdBQXFCLEtBQU0sQ0FDakMsRUFpQmMsR0FDUixFQUNELEVBQ0QsRUFHRixHQUFDLEdBQUQsRUFBaUIsR0FDaEIsNENDMUJKLElBQU0sR0FBa0IsQ0FBQyxJQUFxRCxDQUM3RSxHQUFJLENBQUMsR0FBYyxFQUFXLFNBQVcsRUFBRyxPQUM1QyxPQUFPLElBQUksSUFBSSxFQUFXLElBQUksQ0FBQyxJQUFRLEdBQXFCLEVBQUksQ0FBQyxHQUdyRCxHQUE4RCxFQUMxRSxTQUFTLENBQUMsRUFDVixZQUFZLENBQUMsRUFDYixpQkFBaUIsU0FDakIsY0FBYyxRQUNkLGNBQ0EscUJBQXFCLEdBQ3JCLGVBQWUsR0FDZixhQUFhLFVBQ2IsZUFBZSxHQUNmLGdCQUNHLEtBQ0UsQ0FDTCxPQUNDLEdBZ0JFLEdBaEJGLENBQ0MsYUFBYyxFQUNkLG1CQUFvQixFQUNwQixhQUFjLEVBQ2QsT0FBUSxHQUNQLENBQ0QsRUFDQSxlQUFnQixHQUFxQixHQUNyQyxXQUFZLEdBQWdCLENBQVUsRUFDdEMsWUFBYSxHQUFTLENBQVcsRUFDakMsWUFBYSxFQUNiLFVBQVcsRUFDWCxXQUFZLEtBQ1IsRUFiTCxTQWVDLEdBQUMsR0FBRCxFQUFzQixFQUNyQiIsCiAgImRlYnVnSWQiOiAiMDlBMEE3RThERTlBRTkyNDY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
6
+ //# debugId=12555A2DB09C331764756E2164756E21
7
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2luZGV4LnRzIiwgInNyYy9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbi50c3giLCAic3JjL2xpYi91dGlscy9pbmRleC50cyIsICJzcmMvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnLnRzIiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2J1dHRvbi50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvZGlhbG9nLnRzeCIsICJzcmMvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQudHMiLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dC50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9jb250ZXh0LnRzIiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICJzcmMvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZS50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXIudHMiLCAic3JjL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdC50cyIsICJzcmMvbGliL3V0aWxzL2RhdGUtdXRpbHMudHMiLCAic3JjL2xpYi9jb25zdGFudHMudHMiLCAic3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cudHN4IiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvZG5kLXV0aWxzLnRzIiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvZXZlbnQtZHJhZy1vdmVybGF5LnRzeCIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0udHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2NoZWNrYm94LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9kYXRlLXBpY2tlci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvY2FsZW5kYXIudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL3BvcG92ZXIudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2lucHV0LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9sYWJlbC50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL3RpbWUtcGlja2VyLnRzeCIsICJzcmMvaG9va3MvdXNlLWF1dG9jb21wbGV0ZS10aW1lcGlja2VyLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3Vycy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvZXZlbnQtZm9ybS11dGlscy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdG9yL3JlY3VycmVuY2UtZWRpdG9yLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYXJkLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zZWxlY3QudHN4IiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucy50cyIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nLnRzeCIsICJzcmMvY29tcG9uZW50cy9oZWFkZXIvYmFzZS1oZWFkZXIudHN4IiwgInNyYy9saWIvdXRpbHMvZXhwb3J0LWljYWwudHMiLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3RpdGxlLWNvbnRlbnQudHN4IiwgInNyYy9jb21wb25lbnRzL2hlYWRlci92aWV3LWNvbnRyb2xzLnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdy50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1yb3cudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWRXZWVrRXZlbnRzLnRzIiwgInNyYy9saWIvdXRpbHMvcG9zaXRpb24td2Vlay1ldmVudHMudHMiLCAic3JjL2NvbXBvbmVudHMvZ3JpZC1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9kYXktbnVtYmVyLnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZXZlbnRzLWRpYWxvZy50c3giLCAic3JjL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudC50c3giLCAic3JjL2NvbXBvbmVudHMvZHJvcHBhYmxlLWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL3Jlc291cmNlLWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQtZXZlbnRzLWxheWVyLnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL2hvdXItbGFiZWwvaG91ci1sYWJlbC50c3giLCAic3JjL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkLWNvbC50c3giLCAic3JjL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkLWV2ZW50cy1sYXllci50c3giLCAic3JjL2NvbXBvbmVudHMvY3VycmVudC10aW1lLWluZGljYXRvci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZERheUV2ZW50cy50cyIsICJzcmMvbGliL3V0aWxzL3Bvc2l0aW9uLWRheS1ldmVudHMudHMiLCAic3JjL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkLWhlYWRlci1jb250YWluZXIudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMudHMiLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvZGF5LXZpZXcudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvbW9udGgtdmlldy50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1oZWFkZXItY29udGFpbmVyLnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L21vbnRoLWhlYWRlci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstdmlldy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMveWVhci12aWV3L3llYXItdmlldy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvcHJvdmlkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LWNhbGVuZGFyLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9yZXNvdXJjZS1kYXktaG9yaXpvbnRhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvcmVzb3VyY2UtZGF5LXZlcnRpY2FsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9yZXNvdXJjZS1tb250aC1ob3Jpem9udGFsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L3Jlc291cmNlLW1vbnRoLXZlcnRpY2FsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L2luZGV4LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvcmVzb3VyY2Utd2Vlay1ob3Jpem9udGFsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvcmVzb3VyY2Utd2Vlay12ZXJ0aWNhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L2luZGV4LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci9yZXNvdXJjZS1jYWxlbmRhci1ib2R5LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci50c3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiLy8gUmUtZXhwb3J0IHJydWxlLmpzIHR5cGVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHR5cGUgeyBGcmVxdWVuY3ksIFdlZWtkYXkgfSBmcm9tICdycnVsZSdcbmV4cG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5leHBvcnQgdHlwZSB7IEV2ZW50Rm9ybVByb3BzIH0gZnJvbSAnLi9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybSdcbmV4cG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCwgV2Vla0RheXMgfSBmcm9tICcuL2NvbXBvbmVudHMvdHlwZXMnXG5leHBvcnQgeyBJbGFteUNhbGVuZGFyIH0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LWNhbGVuZGFyJ1xuZXhwb3J0IHR5cGUge1xuXHRDZWxsQ2xpY2tJbmZvLFxuXHRJbGFteUNhbGVuZGFyUHJvcHMsXG5cdFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMsXG59IGZyb20gJy4vZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG4vLyBFeHBvcnQgdHlwZXNcbmV4cG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnLi9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuLy8gUlJVTEUtYmFzZWQgcmVjdXJyZW5jZSBzeXN0ZW1cbmV4cG9ydCB7XG5cdGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzLFxuXHRpc1JlY3VycmluZ0V2ZW50LFxufSBmcm9tICcuL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuZXhwb3J0IHR5cGUgeyBJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wcyB9IGZyb20gJy4vZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhcidcbmV4cG9ydCB7IElsYW15UmVzb3VyY2VDYWxlbmRhciB9IGZyb20gJy4vZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci9pbGFteS1yZXNvdXJjZS1jYWxlbmRhcidcbi8vIFJlc291cmNlIGNhbGVuZGFyIHR5cGVzXG5leHBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbi8vIFB1YmxpYyBjYWxlbmRhciBjb250ZXh0IGhvb2tzXG5leHBvcnQge1xuXHR0eXBlIFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuLFxuXHR1c2VJbGFteUNhbGVuZGFyQ29udGV4dCxcbn0gZnJvbSAnLi9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmV4cG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnMgfSBmcm9tICcuL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdCdcbi8vIFRyYW5zbGF0aW9uIHN5c3RlbVxuZXhwb3J0IHR5cGUge1xuXHRUcmFuc2xhdGlvbktleSxcblx0VHJhbnNsYXRpb25zLFxuXHRUcmFuc2xhdG9yRnVuY3Rpb24sXG59IGZyb20gJy4vbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmV4cG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3LCBUaW1lRm9ybWF0IH0gZnJvbSAnLi90eXBlcydcbiIsCiAgICAiaW1wb3J0IHtcblx0QW5pbWF0ZVByZXNlbmNlLFxuXHR0eXBlIEhUTUxNb3Rpb25Qcm9wcyxcblx0bW90aW9uLFxuXHR0eXBlIFZhcmlhbnRzLFxufSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIEFuaW1hdGVkU2VjdGlvblByb3BzXG5cdGV4dGVuZHMgT21pdDxIVE1MTW90aW9uUHJvcHM8J2Rpdic+LCAnY2hpbGRyZW4nIHwgJ2xheW91dCcgfCAnbGF5b3V0SWQnPiB7XG5cdGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcblx0dHJhbnNpdGlvbktleTogc3RyaW5nXG5cdGRlbGF5PzogbnVtYmVyXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRkaXJlY3Rpb24/OiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnXG5cdGxheW91dD86IGJvb2xlYW4gfCAncG9zaXRpb24nIHwgJ3NpemUnIHwgJ3ByZXNlcnZlLWFzcGVjdCdcblx0bGF5b3V0SWQ/OiBzdHJpbmdcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5jb25zdCB2YXJpYW50czogVmFyaWFudHMgPSB7XG5cdGhpZGRlbjogKHsgZGlyZWN0aW9uIH06IHsgZGlyZWN0aW9uOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIH0pID0+ICh7XG5cdFx0b3BhY2l0eTogMCxcblx0XHR4OiBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/IDEwIDogMCxcblx0XHR5OiBkaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcgPyAtMTAgOiAwLFxuXHR9KSxcblx0dmlzaWJsZTogKHsgZGVsYXkgfTogeyBkZWxheTogbnVtYmVyIH0pID0+ICh7XG5cdFx0b3BhY2l0eTogMSxcblx0XHR4OiAwLFxuXHRcdHk6IDAsXG5cdFx0dHJhbnNpdGlvbjogeyBkdXJhdGlvbjogMC4yLCBlYXNlOiBbMC40LCAwLCAwLjIsIDFdLCBkZWxheSB9LFxuXHR9KSxcblx0ZXhpdDogKHsgZGlyZWN0aW9uIH06IHsgZGlyZWN0aW9uOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIH0pID0+ICh7XG5cdFx0b3BhY2l0eTogMCxcblx0XHR4OiBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/IC0xMCA6IDAsXG5cdFx0eTogZGlyZWN0aW9uID09PSAndmVydGljYWwnID8gLTEwIDogMCxcblx0XHR0cmFuc2l0aW9uOiB7IGR1cmF0aW9uOiAwLjE1IH0sXG5cdH0pLFxufVxuXG5leHBvcnQgY29uc3QgQW5pbWF0ZWRTZWN0aW9uOiBSZWFjdC5GQzxBbmltYXRlZFNlY3Rpb25Qcm9wcz4gPSAoe1xuXHRjaGlsZHJlbixcblx0dHJhbnNpdGlvbktleSxcblx0ZGVsYXkgPSAwLFxuXHRjbGFzc05hbWUsXG5cdGRpcmVjdGlvbiA9ICd2ZXJ0aWNhbCcsXG5cdGxheW91dCxcblx0bGF5b3V0SWQsXG5cdCdkYXRhLXRlc3RpZCc6IHRlc3RJZCxcblx0cmVmLFxuXHQuLi5wcm9wc1xufSkgPT4gKFxuXHQ8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG5cdFx0PG1vdGlvbi5kaXZcblx0XHRcdGFuaW1hdGU9XCJ2aXNpYmxlXCJcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2lubGluZS1ibG9jayB3LWZ1bGwnLCBjbGFzc05hbWUpfVxuXHRcdFx0Y3VzdG9tPXt7IGRlbGF5LCBkaXJlY3Rpb24gfX1cblx0XHRcdGRhdGEtdGVzdGlkPXt0ZXN0SWR9XG5cdFx0XHRleGl0PVwiZXhpdFwiXG5cdFx0XHRpbml0aWFsPVwiaGlkZGVuXCJcblx0XHRcdGtleT17dHJhbnNpdGlvbktleX1cblx0XHRcdGxheW91dD17bGF5b3V0fVxuXHRcdFx0bGF5b3V0SWQ9e2xheW91dElkfVxuXHRcdFx0cmVmPXtyZWZ9XG5cdFx0XHR2YXJpYW50cz17dmFyaWFudHN9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvbW90aW9uLmRpdj5cblx0PC9BbmltYXRlUHJlc2VuY2U+XG4pXG5cbkFuaW1hdGVkU2VjdGlvbi5kaXNwbGF5TmFtZSA9ICdBbmltYXRlZFNlY3Rpb24nXG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2xhc3NWYWx1ZSB9IGZyb20gJ2Nsc3gnXG5pbXBvcnQgeyBjbHN4IH0gZnJvbSAnY2xzeCdcbmltcG9ydCB7IHR3TWVyZ2UgfSBmcm9tICd0YWlsd2luZC1tZXJnZSdcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmV4cG9ydCBmdW5jdGlvbiBjbiguLi5pbnB1dHM6IENsYXNzVmFsdWVbXSkge1xuXHRyZXR1cm4gdHdNZXJnZShjbHN4KGlucHV0cykpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYWZlRGF0ZShcblx0ZGF0ZTogRGF5anMgfCBEYXRlIHwgc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBEYXlqcyB8IHVuZGVmaW5lZCB7XG5cdGlmIChkYXRlID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkXG5cdH1cblx0aWYgKGRheWpzLmlzRGF5anMoZGF0ZSkpIHtcblx0XHRyZXR1cm4gZGF0ZVxuXHR9XG5cdGNvbnN0IHBhcnNlZERhdGUgPSBkYXlqcyhkYXRlKVxuXHRyZXR1cm4gcGFyc2VkRGF0ZS5pc1ZhbGlkKCkgPyBwYXJzZWREYXRlIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBjb25zdCBvbWl0S2V5cyA9IDxUIGV4dGVuZHMgb2JqZWN0LCBLIGV4dGVuZHMga2V5b2YgVD4oXG5cdG9iajogVCxcblx0a2V5czogS1tdXG4pOiBPbWl0PFQsIEs+ID0+IHtcblx0Y29uc3QgcmVzdWx0ID0geyAuLi5vYmogfVxuXHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0ZGVsZXRlIHJlc3VsdFtrZXldXG5cdH1cblx0cmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgY2FsZW5kYXIgZXZlbnRzIGZyb20gcHVibGljLWZhY2luZyBmb3JtYXQgdG8gaW50ZXJuYWwgZm9ybWF0LlxuICogQ29udmVydHMgZmxleGlibGUgZGF0ZSB0eXBlcyAoZGF5anMsIERhdGUsIHN0cmluZykgdG8gc3RyaWN0IGRheWpzIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIGV2ZW50cyAtIEFycmF5IG9mIGNhbGVuZGFyIGV2ZW50cyB3aXRoIGZsZXhpYmxlIGRhdGUgdHlwZXNcbiAqIEByZXR1cm5zIE5vcm1hbGl6ZWQgYXJyYXkgb2YgY2FsZW5kYXIgZXZlbnRzIHdpdGggZGF5anMgZGF0ZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVndWxhciBjYWxlbmRhciBldmVudHNcbiAqIGNvbnN0IGV2ZW50cyA9IG5vcm1hbGl6ZUV2ZW50czxJbGFteUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50Pihwcm9wRXZlbnRzKVxuICpcbiAqIC8vIFJlc291cmNlIGNhbGVuZGFyIGV2ZW50c1xuICogY29uc3QgcmVzb3VyY2VFdmVudHMgPSBub3JtYWxpemVFdmVudHM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50Pihwcm9wRXZlbnRzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplRXZlbnRzPFxuXHRUSW5wdXQgZXh0ZW5kcyB7XG5cdFx0c3RhcnQ6IERheWpzIHwgRGF0ZSB8IHN0cmluZ1xuXHRcdGVuZDogRGF5anMgfCBEYXRlIHwgc3RyaW5nXG5cdH0sXG5cdFRPdXRwdXQsXG4+KGV2ZW50czogVElucHV0W10gfCB1bmRlZmluZWQpOiBUT3V0cHV0W10ge1xuXHRpZiAoIWV2ZW50cyB8fCAhZXZlbnRzLmxlbmd0aCkge1xuXHRcdHJldHVybiBbXVxuXHR9XG5cblx0cmV0dXJuIGV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0c3RhcnQ6IGRheWpzLmlzRGF5anMoZXZlbnQuc3RhcnQpID8gZXZlbnQuc3RhcnQgOiBkYXlqcyhldmVudC5zdGFydCksXG5cdFx0XHRlbmQ6IGRheWpzLmlzRGF5anMoZXZlbnQuZW5kKSA/IGV2ZW50LmVuZCA6IGRheWpzKGV2ZW50LmVuZCksXG5cdFx0fSBhcyBUT3V0cHV0XG5cdH0pXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgT3BVbml0VHlwZSBhcyBEYXlqc09wVW5pdFR5cGUsIFBsdWdpbkZ1bmMgfSBmcm9tICdkYXlqcydcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcbmltcG9ydCBpc0JldHdlZW4gZnJvbSAnZGF5anMvcGx1Z2luL2lzQmV0d2Vlbi5qcydcbmltcG9ydCBpc1NhbWVPckFmdGVyIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckFmdGVyLmpzJ1xuaW1wb3J0IGlzU2FtZU9yQmVmb3JlIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckJlZm9yZS5qcydcbmltcG9ydCBsb2NhbGVEYXRhIGZyb20gJ2RheWpzL3BsdWdpbi9sb2NhbGVEYXRhLmpzJ1xuaW1wb3J0IG1pbk1heCBmcm9tICdkYXlqcy9wbHVnaW4vbWluTWF4LmpzJ1xuaW1wb3J0IHRpbWV6b25lIGZyb20gJ2RheWpzL3BsdWdpbi90aW1lem9uZS5qcydcbmltcG9ydCB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yy5qcydcbmltcG9ydCB3ZWVrZGF5IGZyb20gJ2RheWpzL3BsdWdpbi93ZWVrZGF5LmpzJ1xuaW1wb3J0IHdlZWtPZlllYXIgZnJvbSAnZGF5anMvcGx1Z2luL3dlZWtPZlllYXIuanMnXG5cbi8qKlxuICogUGx1Z2luIHRoYXQgZml4ZXMgYSBkYXlqcy10aW1lem9uZSBidWcgd2hlcmUgLnN0YXJ0T2YoKSBhbmQgLmVuZE9mKCkgZHJvcFxuICogdGltZXpvbmUgaW5mbyB3aGVuIHRoZSBzeXN0ZW0ncyBsb2NhbCB0aW1lem9uZSBoYXMgYSBEU1QgdHJhbnNpdGlvbiBuZWFyXG4gKiB0aGUgdGFyZ2V0IGRhdGUuIEFmdGVyIGVhY2ggc3RhcnRPZi9lbmRPZiBjYWxsLCBpZiB0aGUgVVRDIG9mZnNldCBoYXNcbiAqIGRyaWZ0ZWQgZnJvbSB3aGF0IHRoZSB0aW1lem9uZSBleHBlY3RzLCByZS1hcHBseSB0aGUgdGltZXpvbmUgd2l0aFxuICoga2VlcExvY2FsVGltZT10cnVlIHRvIHJlc3RvcmUgdGhlIGNvcnJlY3Qgb2Zmc2V0LlxuICovXG5pbnRlcmZhY2UgRGF5anNJbnRlcm5hbCBleHRlbmRzIGRheWpzLkRheWpzIHtcblx0JHg6IHsgJHRpbWV6b25lPzogc3RyaW5nIH1cbn1cblxubGV0IGRlZmF1bHRUaW1lem9uZTogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbmNvbnN0IGZpeFRpbWV6b25lT2Zmc2V0OiBQbHVnaW5GdW5jID0gKF9vcHRpb24sIGRheWpzQ2xhc3MsIGRheWpzRmFjdG9yeSkgPT4ge1xuXHRjb25zdCBwcm90byA9IGRheWpzQ2xhc3MucHJvdG90eXBlXG5cblx0Ly8gSW50ZXJjZXB0IHNldERlZmF1bHQgdG8gdHJhY2sgdGhlIGNvbmZpZ3VyZWQgdGltZXpvbmVcblx0Y29uc3Qgb3JpZ2luYWxTZXREZWZhdWx0ID0gZGF5anNGYWN0b3J5LnR6LnNldERlZmF1bHRcblx0ZGF5anNGYWN0b3J5LnR6LnNldERlZmF1bHQgPSAodGltZXpvbmU/OiBzdHJpbmcpID0+IHtcblx0XHRkZWZhdWx0VGltZXpvbmUgPSB0aW1lem9uZVxuXHRcdHJldHVybiBvcmlnaW5hbFNldERlZmF1bHQodGltZXpvbmUpXG5cdH1cblxuXHR0eXBlIFN0YXJ0T2ZGbiA9ICh1bml0OiBEYXlqc09wVW5pdFR5cGUsIF9zdGFydE9mPzogYm9vbGVhbikgPT4gZGF5anMuRGF5anNcblx0Y29uc3Qgb3JpZ2luYWxTdGFydE9mID0gcHJvdG8uc3RhcnRPZiBhcyBTdGFydE9mRm5cblx0Y29uc3Qgb3JpZ2luYWxFbmRPZiA9IHByb3RvLmVuZE9mXG5cblx0ZnVuY3Rpb24gcmVzdG9yZVRpbWV6b25lKFxuXHRcdGluc3RhbmNlOiBkYXlqcy5EYXlqcyxcblx0XHRyZXN1bHQ6IGRheWpzLkRheWpzXG5cdCk6IGRheWpzLkRheWpzIHtcblx0XHRjb25zdCB0eiA9IChpbnN0YW5jZSBhcyBEYXlqc0ludGVybmFsKS4keD8uJHRpbWV6b25lIHx8IGRlZmF1bHRUaW1lem9uZVxuXHRcdGlmICghdHopIHJldHVybiByZXN1bHRcblxuXHRcdGNvbnN0IGV4cGVjdGVkT2Zmc2V0ID0gZGF5anNGYWN0b3J5XG5cdFx0XHQudHoocmVzdWx0LmZvcm1hdCgnWVlZWS1NTS1ERFRISDptbTpzcycpLCB0eilcblx0XHRcdC51dGNPZmZzZXQoKVxuXHRcdGlmIChyZXN1bHQudXRjT2Zmc2V0KCkgIT09IGV4cGVjdGVkT2Zmc2V0KSB7XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnR6KHR6LCB0cnVlKVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0XG5cdH1cblxuXHQvLyBkYXlqcydzIGVuZE9mIGNhbGxzIHN0YXJ0T2YodW5pdCwgZmFsc2UpIGludGVybmFsbHkg4oCUIHRoZSBzZWNvbmQgYXJnXG5cdC8vIChfc3RhcnRPZikgY29udHJvbHMgc3RhcnQtdnMtZW5kIGJlaGF2aW9yLiBXZSBtdXN0IGZvcndhcmQgaXQuXG5cdHByb3RvLnN0YXJ0T2YgPSBmdW5jdGlvbiAodW5pdDogRGF5anNPcFVuaXRUeXBlLCBfc3RhcnRPZj86IGJvb2xlYW4pIHtcblx0XHRjb25zdCByZXN1bHQgPSBvcmlnaW5hbFN0YXJ0T2YuY2FsbCh0aGlzLCB1bml0LCBfc3RhcnRPZilcblx0XHRyZXR1cm4gcmVzdG9yZVRpbWV6b25lKHRoaXMsIHJlc3VsdClcblx0fVxuXG5cdC8vIGVuZE9mIGRlbGVnYXRlcyB0byBzdGFydE9mKHVuaXQsIGZhbHNlKSwgc28gdGhlIHBhdGNoZWQgc3RhcnRPZiBoYW5kbGVzIGl0XG5cdHByb3RvLmVuZE9mID0gb3JpZ2luYWxFbmRPZlxufVxuXG4vLyBFeHRlbmQgZGF5anMgd2l0aCBwbHVnaW5zXG5kYXlqcy5leHRlbmQod2Vla2RheSlcbmRheWpzLmV4dGVuZCh3ZWVrT2ZZZWFyKVxuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQWZ0ZXIpXG5kYXlqcy5leHRlbmQoaXNTYW1lT3JCZWZvcmUpXG5kYXlqcy5leHRlbmQoaXNCZXR3ZWVuKVxuZGF5anMuZXh0ZW5kKG1pbk1heClcbmRheWpzLmV4dGVuZCh0aW1lem9uZSlcbmRheWpzLmV4dGVuZCh1dGMpXG5kYXlqcy5leHRlbmQobG9jYWxlRGF0YSlcbmRheWpzLmV4dGVuZChmaXhUaW1lem9uZU9mZnNldClcblxuLy8gQ3VzdG9tIGRheWpzIGNvbnN0cnVjdG9yIHRoYXQgYXV0b21hdGljYWxseSB1c2VzIC50eigpIGZvciBhbGwgaW5zdGFuY2VzLlxuLy8gVGhpcyBlbnN1cmVzIHRoYXQgZGF5anMoKSBjYWxscyB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZSBob25vciB0aGUgZGVmYXVsdFxuLy8gdGltZXpvbmUgc2V0IHZpYSBkYXlqcy50ei5zZXREZWZhdWx0KCkuXG5jb25zdCB0aW1lem9uZUF3YXJlRGF5anMgPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG5cdHJldHVybiAoZGF5anMgYXMgdW5rbm93biBhcyB7IHR6OiAoLi4uYTogdW5rbm93bltdKSA9PiBkYXlqcy5EYXlqcyB9KS50eihcblx0XHQuLi5hcmdzXG5cdClcbn1cblxuLy8gQXR0YWNoIGFsbCBzdGF0aWMgbWV0aG9kcyBhbmQgcHJvcGVydGllcyBmcm9tIHRoZSBvcmlnaW5hbCBkYXlqcyB0byBvdXIgd3JhcHBlci5cbi8vIFRoaXMgYWxsb3dzIHRoZSB3cmFwcGVyIHRvIGJlIHVzZWQgYXMgYSBkcm9wLWluIHJlcGxhY2VtZW50LlxuT2JqZWN0LmFzc2lnbih0aW1lem9uZUF3YXJlRGF5anMsIGRheWpzKVxuXG4vLyBFeHBvcnQgdGhlIERheWpzIHR5cGUgc2VwYXJhdGVseSBmb3IgdXNlIGFzIGEgdHlwZSBpbiBvdGhlciBmaWxlcy5cbi8vIEZpbGVzIHNob3VsZCB1c2UgJ2ltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSBcIkAvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnXCInXG5leHBvcnQgdHlwZSB7IERheWpzLCBNYW5pcHVsYXRlVHlwZSwgT3BVbml0VHlwZSB9IGZyb20gJ2RheWpzJ1xuZXhwb3J0IGRlZmF1bHQgdGltZXpvbmVBd2FyZURheWpzIGFzIHR5cGVvZiBkYXlqc1xuIiwKICAgICJpbXBvcnQgdHlwZSB7XG5cdERyYWdDYW5jZWxFdmVudCxcblx0RHJhZ0VuZEV2ZW50LFxuXHREcmFnU3RhcnRFdmVudCxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7XG5cdERuZENvbnRleHQsXG5cdE1vdXNlU2Vuc29yLFxuXHRwb2ludGVyV2l0aGluLFxuXHRUb3VjaFNlbnNvcixcblx0dXNlU2Vuc29yLFxuXHR1c2VTZW5zb3JzLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdERpYWxvZyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyBpc1JlY3VycmluZ0V2ZW50IH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGdldFVwZGF0ZWRFdmVudCB9IGZyb20gJy4vZG5kLXV0aWxzJ1xuaW1wb3J0IHsgRXZlbnREcmFnT3ZlcmxheSB9IGZyb20gJy4vZXZlbnQtZHJhZy1vdmVybGF5J1xuXG5pbnRlcmZhY2UgQ2FsZW5kYXJEbmRDb250ZXh0UHJvcHMge1xuXHRjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDYWxlbmRhckRuZENvbnRleHQoeyBjaGlsZHJlbiB9OiBDYWxlbmRhckRuZENvbnRleHRQcm9wcykge1xuXHRjb25zdCBhY3RpdmVFdmVudFJlZiA9IHVzZVJlZjxDYWxlbmRhckV2ZW50PihudWxsKVxuXHRjb25zdCBkcmFnT3ZlcmxheVJlZiA9IHVzZVJlZjx7XG5cdFx0c2V0QWN0aXZlRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGwpID0+IHZvaWRcblx0fT4obnVsbClcblxuXHRjb25zdCB7IHVwZGF0ZUV2ZW50LCB1cGRhdGVSZWN1cnJpbmdFdmVudCwgZGlzYWJsZURyYWdBbmREcm9wIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoe1xuXHRcdFx0dXBkYXRlRXZlbnQ6IGNvbnRleHQudXBkYXRlRXZlbnQsXG5cdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudDogY29udGV4dC51cGRhdGVSZWN1cnJpbmdFdmVudCxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcDogY29udGV4dC5kaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0fSkpXG5cblx0Ly8gU3RhdGUgZm9yIHJlY3VycmluZyBldmVudCBkaWFsb2dcblx0Y29uc3QgW3JlY3VycmluZ0RpYWxvZywgc2V0UmVjdXJyaW5nRGlhbG9nXSA9IHVzZVN0YXRlPHtcblx0XHRpc09wZW46IGJvb2xlYW5cblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+IHwgbnVsbFxuXHR9Pih7XG5cdFx0aXNPcGVuOiBmYWxzZSxcblx0XHRldmVudDogbnVsbCxcblx0XHR1cGRhdGVzOiBudWxsLFxuXHR9KVxuXG5cdC8vIENvbmZpZ3VyZSBzZW5zb3JzIHdpdGggcmVkdWNlZCBhY3RpdmF0aW9uIGNvbnN0cmFpbnRzIGZvciBlYXNpZXIgZHJhZ2dpbmdcblx0Y29uc3QgbW91c2VTZW5zb3IgPSB1c2VTZW5zb3IoTW91c2VTZW5zb3IsIHtcblx0XHQvLyBSZXF1aXJlIG1pbmltYWwgbW92ZW1lbnQgYmVmb3JlIGFjdGl2YXRpbmdcblx0XHRhY3RpdmF0aW9uQ29uc3RyYWludDoge1xuXHRcdFx0ZGlzdGFuY2U6IDIsXG5cdFx0fSxcblx0fSlcblxuXHRjb25zdCB0b3VjaFNlbnNvciA9IHVzZVNlbnNvcihUb3VjaFNlbnNvciwge1xuXHRcdC8vIFJlZHVjZSBkZWxheSBmb3IgdG91Y2ggZGV2aWNlc1xuXHRcdGFjdGl2YXRpb25Db25zdHJhaW50OiB7XG5cdFx0XHRkZWxheTogMTAwLFxuXHRcdFx0dG9sZXJhbmNlOiA1LFxuXHRcdH0sXG5cdH0pXG5cblx0Y29uc3Qgc2Vuc29ycyA9IHVzZVNlbnNvcnMobW91c2VTZW5zb3IsIHRvdWNoU2Vuc29yKVxuXG5cdC8vIEhlbHBlciBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBhY3R1YWwgZXZlbnQgdXBkYXRlXG5cdGNvbnN0IHBlcmZvcm1FdmVudFVwZGF0ZSA9IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdCkgPT4ge1xuXHRcdC8vIFZhbGlkYXRlIGlucHV0c1xuXHRcdGlmICghZXZlbnQgfHwgIWV2ZW50LmlkKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoIXVwZGF0ZXMgfHwgT2JqZWN0LmtleXModXBkYXRlcykubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoaXNSZWN1cnJpbmdFdmVudChldmVudCkpIHtcblx0XHRcdC8vIFNob3cgZGlhbG9nIGZvciByZWN1cnJpbmcgZXZlbnRzXG5cdFx0XHRzZXRSZWN1cnJpbmdEaWFsb2coe1xuXHRcdFx0XHRpc09wZW46IHRydWUsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHR1cGRhdGVzLFxuXHRcdFx0fSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRGlyZWN0bHkgdXBkYXRlIHJlZ3VsYXIgZXZlbnRzXG5cdFx0XHR1cGRhdGVFdmVudChldmVudC5pZCwgdXBkYXRlcylcblx0XHR9XG5cdH1cblxuXHQvLyBIYW5kbGUgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZyBjb25maXJtYXRpb25cblx0Y29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDb25maXJtID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0aWYgKCFyZWN1cnJpbmdEaWFsb2cuZXZlbnQgfHwgIXJlY3VycmluZ0RpYWxvZy51cGRhdGVzKSB7XG5cdFx0XHRzZXRSZWN1cnJpbmdEaWFsb2coeyBpc09wZW46IGZhbHNlLCBldmVudDogbnVsbCwgdXBkYXRlczogbnVsbCB9KVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50KHJlY3VycmluZ0RpYWxvZy5ldmVudCwgcmVjdXJyaW5nRGlhbG9nLnVwZGF0ZXMsIHtcblx0XHRcdFx0c2NvcGUsXG5cdFx0XHRcdGV2ZW50RGF0ZTogcmVjdXJyaW5nRGlhbG9nLmV2ZW50LnN0YXJ0LFxuXHRcdFx0fSlcblx0XHR9IGNhdGNoIHtcblx0XHRcdC8vIFNpbGVudGx5IGhhbmRsZSBlcnJvciBhbmQgcmVzZXQgZGlhbG9nIHN0YXRlXG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG5cdFx0fVxuXHR9XG5cblx0Ly8gSGFuZGxlIHJlY3VycmluZyBldmVudCBkaWFsb2cgY2xvc2Vcblx0Y29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDbG9zZSA9ICgpID0+IHtcblx0XHRzZXRSZWN1cnJpbmdEaWFsb2coeyBpc09wZW46IGZhbHNlLCBldmVudDogbnVsbCwgdXBkYXRlczogbnVsbCB9KVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ1N0YXJ0ID0gKGV2ZW50OiBEcmFnU3RhcnRFdmVudCkgPT4ge1xuXHRcdGNvbnN0IHsgYWN0aXZlIH0gPSBldmVudFxuXG5cdFx0Ly8gU2V0IHRoZSBhY3RpdmUgZXZlbnQgYmFzZWQgb24gdGhlIGV2ZW50IGRhdGFcblx0XHRpZiAoYWN0aXZlLmRhdGEuY3VycmVudD8udHlwZSA9PT0gJ2NhbGVuZGFyLWV2ZW50Jykge1xuXHRcdFx0ZHJhZ092ZXJsYXlSZWYuY3VycmVudD8uc2V0QWN0aXZlRXZlbnQoYWN0aXZlLmRhdGEuY3VycmVudC5ldmVudClcblx0XHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBhY3RpdmUuZGF0YS5jdXJyZW50LmV2ZW50XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ0VuZCA9IChldmVudDogRHJhZ0VuZEV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgdXBkYXRlZEV2ZW50ID0gZ2V0VXBkYXRlZEV2ZW50KGV2ZW50LCBhY3RpdmVFdmVudFJlZi5jdXJyZW50KVxuXHRcdGlmICh1cGRhdGVkRXZlbnQpIHtcblx0XHRcdGNvbnN0IHsgYWN0aXZlRXZlbnQsIHVwZGF0ZXMgfSA9IHVwZGF0ZWRFdmVudFxuXHRcdFx0cGVyZm9ybUV2ZW50VXBkYXRlKGFjdGl2ZUV2ZW50LCB1cGRhdGVzKVxuXHRcdH1cblxuXHRcdC8vIENsZWFyIHRoZSBhY3RpdmUgZXZlbnQgcmVmZXJlbmNlXG5cdFx0YWN0aXZlRXZlbnRSZWYuY3VycmVudCA9IG51bGxcblx0XHRkcmFnT3ZlcmxheVJlZi5jdXJyZW50Py5zZXRBY3RpdmVFdmVudChudWxsKVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ0NhbmNlbCA9IChfZXZlbnQ6IERyYWdDYW5jZWxFdmVudCkgPT4ge1xuXHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBudWxsXG5cdH1cblxuXHQvLyBJZiBkcmFnIGFuZCBkcm9wIGlzIGRpc2FibGVkLCBqdXN0IHJldHVybiBjaGlsZHJlbiB3aXRob3V0IERuZENvbnRleHRcblx0aWYgKGRpc2FibGVEcmFnQW5kRHJvcCkge1xuXHRcdHJldHVybiBjaGlsZHJlbiBhcyBSZWFjdC5SZWFjdEVsZW1lbnRcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxEbmRDb250ZXh0XG5cdFx0XHRcdGNvbGxpc2lvbkRldGVjdGlvbj17cG9pbnRlcldpdGhpbn1cblx0XHRcdFx0b25EcmFnQ2FuY2VsPXtoYW5kbGVEcmFnQ2FuY2VsfVxuXHRcdFx0XHRvbkRyYWdFbmQ9e2hhbmRsZURyYWdFbmR9XG5cdFx0XHRcdG9uRHJhZ1N0YXJ0PXtoYW5kbGVEcmFnU3RhcnR9XG5cdFx0XHRcdHNlbnNvcnM9e3NlbnNvcnN9XG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PEV2ZW50RHJhZ092ZXJsYXkgcmVmPXtkcmFnT3ZlcmxheVJlZn0gLz5cblx0XHRcdDwvRG5kQ29udGV4dD5cblxuXHRcdFx0ey8qIFJlY3VycmluZyBldmVudCBlZGl0IGRpYWxvZyAqL31cblx0XHRcdDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuXHRcdFx0XHRldmVudFRpdGxlPXtyZWN1cnJpbmdEaWFsb2cuZXZlbnQ/LnRpdGxlIHx8ICcnfVxuXHRcdFx0XHRpc09wZW49e3JlY3VycmluZ0RpYWxvZy5pc09wZW59XG5cdFx0XHRcdG9uQ2xvc2U9e2hhbmRsZVJlY3VycmluZ0V2ZW50Q2xvc2V9XG5cdFx0XHRcdG9uQ29uZmlybT17aGFuZGxlUmVjdXJyaW5nRXZlbnRDb25maXJtfVxuXHRcdFx0XHRvcGVyYXRpb25UeXBlPVwiZWRpdFwiXG5cdFx0XHQvPlxuXHRcdDwvPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IFNsb3QgfSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2xvdCdcbmltcG9ydCB0eXBlIHsgVmFyaWFudFByb3BzIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5J1xuaW1wb3J0IHsgY3ZhIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgYnV0dG9uVmFyaWFudHMgPSBjdmEoXG5cdFwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHdoaXRlc3BhY2Utbm93cmFwIHJvdW5kZWQtbWQgdGV4dC1zbSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWFsbCBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNCBzaHJpbmstMCBbJl9zdmddOnNocmluay0wIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmVcIixcblx0e1xuXHRcdHZhcmlhbnRzOiB7XG5cdFx0XHR2YXJpYW50OiB7XG5cdFx0XHRcdGRlZmF1bHQ6ICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXByaW1hcnkvOTAnLFxuXHRcdFx0XHRkZXN0cnVjdGl2ZTpcblx0XHRcdFx0XHQnYmctZGVzdHJ1Y3RpdmUgdGV4dC13aGl0ZSBob3ZlcjpiZy1kZXN0cnVjdGl2ZS85MCBmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazpmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvNDAgZGFyazpiZy1kZXN0cnVjdGl2ZS82MCcsXG5cdFx0XHRcdG91dGxpbmU6XG5cdFx0XHRcdFx0J2JvcmRlciBiZy1iYWNrZ3JvdW5kIHNoYWRvdy14cyBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmJnLWlucHV0LzMwIGRhcms6Ym9yZGVyLWlucHV0IGRhcms6aG92ZXI6YmctaW5wdXQvNTAnLFxuXHRcdFx0XHRzZWNvbmRhcnk6XG5cdFx0XHRcdFx0J2JnLXNlY29uZGFyeSB0ZXh0LXNlY29uZGFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXNlY29uZGFyeS84MCcsXG5cdFx0XHRcdGdob3N0OlxuXHRcdFx0XHRcdCdob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmhvdmVyOmJnLWFjY2VudC81MCcsXG5cdFx0XHRcdGxpbms6ICd0ZXh0LXByaW1hcnkgdW5kZXJsaW5lLW9mZnNldC00IGhvdmVyOnVuZGVybGluZScsXG5cdFx0XHR9LFxuXHRcdFx0c2l6ZToge1xuXHRcdFx0XHRkZWZhdWx0OiAnaC05IHB4LTQgcHktMiBoYXMtWz5zdmddOnB4LTMnLFxuXHRcdFx0XHRzbTogJ2gtOCByb3VuZGVkLW1kIGdhcC0xLjUgcHgtMyBoYXMtWz5zdmddOnB4LTIuNScsXG5cdFx0XHRcdGxnOiAnaC0xMCByb3VuZGVkLW1kIHB4LTYgaGFzLVs+c3ZnXTpweC00Jyxcblx0XHRcdFx0aWNvbjogJ3NpemUtOScsXG5cdFx0XHRcdCdpY29uLXNtJzogJ3NpemUtOCcsXG5cdFx0XHRcdCdpY29uLWxnJzogJ3NpemUtMTAnLFxuXHRcdFx0fSxcblx0XHR9LFxuXHRcdGRlZmF1bHRWYXJpYW50czoge1xuXHRcdFx0dmFyaWFudDogJ2RlZmF1bHQnLFxuXHRcdFx0c2l6ZTogJ2RlZmF1bHQnLFxuXHRcdH0sXG5cdH1cbilcblxuZnVuY3Rpb24gQnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHR2YXJpYW50LFxuXHRzaXplLFxuXHRhc0NoaWxkID0gZmFsc2UsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczwnYnV0dG9uJz4gJlxuXHRWYXJpYW50UHJvcHM8dHlwZW9mIGJ1dHRvblZhcmlhbnRzPiAmIHtcblx0XHRhc0NoaWxkPzogYm9vbGVhblxuXHR9KSB7XG5cdGNvbnN0IENvbXAgPSBhc0NoaWxkID8gU2xvdCA6ICdidXR0b24nXG5cblx0cmV0dXJuIChcblx0XHQ8Q29tcFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihidXR0b25WYXJpYW50cyh7IHZhcmlhbnQsIHNpemUsIGNsYXNzTmFtZSB9KSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJidXR0b25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHsgQnV0dG9uLCBidXR0b25WYXJpYW50cyB9XG4iLAogICAgImltcG9ydCAqIGFzIERpYWxvZ1ByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtZGlhbG9nJ1xuaW1wb3J0IHsgWEljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBEaWFsb2coe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cImRpYWxvZ1wiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nVHJpZ2dlcih7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlRyaWdnZXI+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwiZGlhbG9nLXRyaWdnZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ1BvcnRhbCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlBvcnRhbD4pIHtcblx0cmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Nsb3NlKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ2xvc2U+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLkNsb3NlIGRhdGEtc2xvdD1cImRpYWxvZy1jbG9zZVwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nT3ZlcmxheSh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuT3ZlcmxheT4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUHJpbWl0aXZlLk92ZXJsYXlcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBmaXhlZCBpbnNldC0wIHotNTAgYmctYmxhY2svNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctb3ZlcmxheVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dDb250ZW50KHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ29udGVudD4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIj5cblx0XHRcdDxEaWFsb2dPdmVybGF5IC8+XG5cdFx0XHQ8RGlhbG9nUHJpbWl0aXZlLkNvbnRlbnRcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnYmctYmFja2dyb3VuZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZml4ZWQgdG9wLVs1MCVdIGxlZnQtWzUwJV0gei01MCBncmlkIHctZnVsbCBtYXgtdy1bY2FsYygxMDAlLTJyZW0pXSB0cmFuc2xhdGUteC1bLTUwJV0gdHJhbnNsYXRlLXktWy01MCVdIGdhcC00IHJvdW5kZWQtbGcgYm9yZGVyIHAtNiBzaGFkb3ctbGcgZHVyYXRpb24tMjAwIHNtOm1heC13LWxnIG1heC1oLVs5MCVdJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWNvbnRlbnRcIlxuXHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PERpYWxvZ1ByaW1pdGl2ZS5DbG9zZSBjbGFzc05hbWU9XCJyaW5nLW9mZnNldC1iYWNrZ3JvdW5kIGZvY3VzOnJpbmctcmluZyBkYXRhLVtzdGF0ZT1vcGVuXTpiZy1hY2NlbnQgZGF0YS1bc3RhdGU9b3Blbl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGFic29sdXRlIHRvcC00IHJpZ2h0LTQgcm91bmRlZC14cyBvcGFjaXR5LTcwIHRyYW5zaXRpb24tb3BhY2l0eSBob3ZlcjpvcGFjaXR5LTEwMCBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1vZmZzZXQtMiBmb2N1czpvdXRsaW5lLWhpZGRlbiBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNFwiPlxuXHRcdFx0XHRcdDxYSWNvbiAvPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cblx0XHRcdFx0PC9EaWFsb2dQcmltaXRpdmUuQ2xvc2U+XG5cdFx0XHQ8L0RpYWxvZ1ByaW1pdGl2ZS5Db250ZW50PlxuXHRcdDwvRGlhbG9nUG9ydGFsPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0hlYWRlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LWNvbCBnYXAtMiB0ZXh0LWNlbnRlciBzbTp0ZXh0LWxlZnQnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWhlYWRlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dGb290ZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgc206ZmxleC1yb3cgc206anVzdGlmeS1lbmQnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctZm9vdGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ1RpdGxlKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5UaXRsZT4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUHJpbWl0aXZlLlRpdGxlXG5cdFx0XHRjbGFzc05hbWU9e2NuKCd0ZXh0LWxnIGxlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy10aXRsZVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dEZXNjcmlwdGlvbih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuRGVzY3JpcHRpb24+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20nLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWRlc2NyaXB0aW9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ2xvc2UsXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0Rlc2NyaXB0aW9uLFxuXHREaWFsb2dGb290ZXIsXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nT3ZlcmxheSxcblx0RGlhbG9nUG9ydGFsLFxuXHREaWFsb2dUaXRsZSxcblx0RGlhbG9nVHJpZ2dlcixcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3IH0gZnJvbSAnQC90eXBlcydcblxuLyoqXG4gKiBGdWxsIGludGVybmFsIGNvbnRleHQgdHlwZSB1c2VkIGJ5IGxpYnJhcnkgY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgU21hcnRDYWxlbmRhckNvbnRleHRUeXBlID0gUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlXG5cbi8qKlxuICogUHVibGljbHkgZXhwb3NlZCBjYWxlbmRhciBjb250ZXh0IHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4ge1xuXHRyZWFkb25seSBjdXJyZW50RGF0ZTogRGF5anNcblx0cmVhZG9ubHkgdmlldzogQ2FsZW5kYXJWaWV3XG5cdHJlYWRvbmx5IGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHJlYWRvbmx5IGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuXHRyZWFkb25seSBzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRyZWFkb25seSBzZWxlY3RlZERhdGU6IERheWpzIHwgbnVsbFxuXHRyZWFkb25seSBmaXJzdERheU9mV2VlazogbnVtYmVyXG5cdHJlYWRvbmx5IHJlc291cmNlczogUmVzb3VyY2VbXVxuXHRyZWFkb25seSBzZXRDdXJyZW50RGF0ZTogKGRhdGU6IERheWpzKSA9PiB2b2lkXG5cdHJlYWRvbmx5IHNlbGVjdERhdGU6IChkYXRlOiBEYXlqcykgPT4gdm9pZFxuXHRyZWFkb25seSBzZXRWaWV3OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdHJlYWRvbmx5IG5leHRQZXJpb2Q6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgcHJldlBlcmlvZDogKCkgPT4gdm9pZFxuXHRyZWFkb25seSB0b2RheTogKCkgPT4gdm9pZFxuXHRyZWFkb25seSBhZGRFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdHJlYWRvbmx5IHVwZGF0ZUV2ZW50OiAoXG5cdFx0ZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdCkgPT4gdm9pZFxuXHRyZWFkb25seSBkZWxldGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcikgPT4gdm9pZFxuXHRyZWFkb25seSBvcGVuRXZlbnRGb3JtOiAoZXZlbnREYXRhPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHRyZWFkb25seSBjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxuXHRyZWFkb25seSBnZXRFdmVudHNGb3JSZXNvdXJjZTogKFxuXHRcdHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlclxuXHQpID0+IENhbGVuZGFyRXZlbnRbXVxuXHRyZWFkb25seSBidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxufVxuXG4vKipcbiAqIEludGVybmFsIGhvb2sgdGhhdCByZXR1cm5zIHRoZSBmdWxsIGNvbnRleHQuXG4gKiBVc2VkIGJ5IGludGVybmFsIHZpZXdzLCBoZWFkZXJzLCBhbmQgZ3JpZCBjb21wb25lbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKTogU21hcnRDYWxlbmRhckNvbnRleHRUeXBlXG5leHBvcnQgZnVuY3Rpb24gdXNlU21hcnRDYWxlbmRhckNvbnRleHQ8VD4oXG5cdHNlbGVjdG9yOiAoY29udGV4dDogU21hcnRDYWxlbmRhckNvbnRleHRUeXBlKSA9PiBUXG4pOiBUXG5leHBvcnQgZnVuY3Rpb24gdXNlU21hcnRDYWxlbmRhckNvbnRleHQ8VD4oXG5cdHNlbGVjdG9yPzogKGNvbnRleHQ6IFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZSkgPT4gVFxuKTogVCB8IFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZSB7XG5cdGNvbnN0IHJlc291cmNlQ29udGV4dCA9IHVzZUNvbnRleHQoUmVzb3VyY2VDYWxlbmRhckNvbnRleHQpXG5cdGNvbnN0IHJlZ3VsYXJDb250ZXh0ID0gdXNlQ29udGV4dChDYWxlbmRhckNvbnRleHQpXG5cblx0Ly8gSW4gcmVndWxhciBjYWxlbmRhcnMsIHJlc291cmNlLXNwZWNpZmljIGZpZWxkcyB3aWxsIGJlIHVuZGVmaW5lZC5cblx0Y29uc3QgY29udGV4dCA9IChyZXNvdXJjZUNvbnRleHQgfHxcblx0XHRyZWd1bGFyQ29udGV4dCkgYXMgU21hcnRDYWxlbmRhckNvbnRleHRUeXBlXG5cblx0aWYgKCFjb250ZXh0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0J3VzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBDYWxlbmRhclByb3ZpZGVyIG9yIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlcidcblx0XHQpXG5cdH1cblxuXHRyZXR1cm4gc2VsZWN0b3IgPyBzZWxlY3Rvcihjb250ZXh0KSA6IGNvbnRleHRcbn1cblxuLyoqXG4gKiBQdWJsaWMgaG9vayBleHBvcnRlZCBmb3IgbGlicmFyeSB1c2Vycy5cbiAqIFJldHVybnMgYSBsaW1pdGVkIHNldCBvZiBjb21tb25seSB1c2VkIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VJbGFteUNhbGVuZGFyQ29udGV4dCgpOiBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB7XG5cdGNvbnN0IGNvbnRleHQgPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0cmV0dXJuIHtcblx0XHRjdXJyZW50RGF0ZTogY29udGV4dC5jdXJyZW50RGF0ZSxcblx0XHR2aWV3OiBjb250ZXh0LnZpZXcsXG5cdFx0ZXZlbnRzOiBjb250ZXh0LmV2ZW50cyxcblx0XHRpc0V2ZW50Rm9ybU9wZW46IGNvbnRleHQuaXNFdmVudEZvcm1PcGVuLFxuXHRcdHNlbGVjdGVkRXZlbnQ6IGNvbnRleHQuc2VsZWN0ZWRFdmVudCxcblx0XHRzZWxlY3RlZERhdGU6IGNvbnRleHQuc2VsZWN0ZWREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrOiBjb250ZXh0LmZpcnN0RGF5T2ZXZWVrLFxuXHRcdHJlc291cmNlczogY29udGV4dC5yZXNvdXJjZXMgfHwgW10sXG5cdFx0c2V0Q3VycmVudERhdGU6IGNvbnRleHQuc2V0Q3VycmVudERhdGUsXG5cdFx0c2VsZWN0RGF0ZTogY29udGV4dC5zZWxlY3REYXRlLFxuXHRcdHNldFZpZXc6IGNvbnRleHQuc2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kOiBjb250ZXh0Lm5leHRQZXJpb2QsXG5cdFx0cHJldlBlcmlvZDogY29udGV4dC5wcmV2UGVyaW9kLFxuXHRcdHRvZGF5OiBjb250ZXh0LnRvZGF5LFxuXHRcdGFkZEV2ZW50OiBjb250ZXh0LmFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50OiBjb250ZXh0LmRlbGV0ZUV2ZW50LFxuXHRcdG9wZW5FdmVudEZvcm06IGNvbnRleHQub3BlbkV2ZW50Rm9ybSxcblx0XHRjbG9zZUV2ZW50Rm9ybTogY29udGV4dC5jbG9zZUV2ZW50Rm9ybSxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZTogY29udGV4dC5nZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRidXNpbmVzc0hvdXJzOiBjb250ZXh0LmJ1c2luZXNzSG91cnMsXG5cdH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBFdmVudEZvcm1Qcm9wcyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7XG5cdENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlLFxuXHRDZWxsQ2xpY2tJbmZvLFxuXHRSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdE9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0b3JGdW5jdGlvbiB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3LCBUaW1lRm9ybWF0IH0gZnJvbSAnQC90eXBlcydcblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhckNvbnRleHRUeXBlIHtcblx0Y3VycmVudERhdGU6IERheWpzXG5cdHZpZXc6IENhbGVuZGFyVmlld1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRyYXdFdmVudHM6IENhbGVuZGFyRXZlbnRbXSAvLyBVbnByb2Nlc3NlZCBldmVudHMgZm9yIGV4cG9ydFxuXHRpc0V2ZW50Rm9ybU9wZW46IGJvb2xlYW5cblx0c2VsZWN0ZWRFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0c2VsZWN0ZWREYXRlOiBEYXlqcyB8IG51bGxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlciAvLyAwIGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuXHRzZXRDdXJyZW50RGF0ZTogKGRhdGU6IERheWpzKSA9PiB2b2lkXG5cdHNlbGVjdERhdGU6IChkYXRlOiBEYXlqcykgPT4gdm9pZFxuXHRzZXRWaWV3OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdG5leHRQZXJpb2Q6ICgpID0+IHZvaWRcblx0cHJldlBlcmlvZDogKCkgPT4gdm9pZFxuXHR0b2RheTogKCkgPT4gdm9pZFxuXHRhZGRFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdHVwZGF0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHR1cGRhdGVSZWN1cnJpbmdFdmVudDogKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4sXG5cdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdCkgPT4gdm9pZFxuXHRkZWxldGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcikgPT4gdm9pZFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudDogKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0b3BlbkV2ZW50Rm9ybTogKGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0Y2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcblx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiAoc3RhcnREYXRlOiBEYXlqcywgZW5kRGF0ZTogRGF5anMpID0+IENhbGVuZGFyRXZlbnRbXVxuXHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0cmVuZGVyRXZlbnQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRvbkV2ZW50Q2xpY2s6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkNlbGxDbGljazogKGluZm86IENlbGxDbGlja0luZm8pID0+IHZvaWRcblx0Y3VycmVudExvY2FsZT86IHN0cmluZ1xuXHRkaXNhYmxlQ2VsbENsaWNrPzogYm9vbGVhblxuXHRkaXNhYmxlRXZlbnRDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZURyYWdBbmREcm9wPzogYm9vbGVhblxuXHRkYXlNYXhFdmVudHM6IG51bWJlclxuXHRldmVudFNwYWNpbmc6IG51bWJlclxuXHRzdGlja3lWaWV3SGVhZGVyOiBib29sZWFuXG5cdHZpZXdIZWFkZXJDbGFzc05hbWU6IHN0cmluZ1xuXHRoZWFkZXJDb21wb25lbnQ/OiBSZWFjdC5SZWFjdE5vZGUgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjb21wb25lbnRcblx0aGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY2xhc3Ncblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0cmVuZGVyRXZlbnRGb3JtPzogKHByb3BzOiBFdmVudEZvcm1Qcm9wcykgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdC8vIFRyYW5zbGF0aW9uIGZ1bmN0aW9uXG5cdHQ6IFRyYW5zbGF0b3JGdW5jdGlvblxuXHR0aW1lRm9ybWF0OiBUaW1lRm9ybWF0XG5cdGNsYXNzZXNPdmVycmlkZT86IENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yPzogKFxuXHRcdHByb3BzOiBSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzXG5cdCkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdHJlbmRlckhvdXI/OiAoZGF0ZTogRGF5anMpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycz86IGJvb2xlYW5cblx0aGlkZGVuRGF5cz86IFNldDxudW1iZXI+XG59XG5cbi8vIENhbGVuZGFyQ29udGV4dCBpcyBrZXB0IGZvciBpbnRlcm5hbCBQcm92aWRlciB1c2FnZVxuZXhwb3J0IGNvbnN0IENhbGVuZGFyQ29udGV4dDogUmVhY3QuQ29udGV4dDxDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPiA9XG5cdGNyZWF0ZUNvbnRleHQ8Q2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuIiwKICAgICJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyQ29udGV4dFR5cGUgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB0eXBlIHsgQ2VsbENsaWNrSW5mbyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgZXh0ZW5kcyBDYWxlbmRhckNvbnRleHRUeXBlIHtcblx0Ly8gUmVzb3VyY2Utc3BlY2lmaWMgc3RhdGVcblx0cmVzb3VyY2VzOiBSZXNvdXJjZVtdXG5cdHZpc2libGVSZXNvdXJjZXM6IFNldDxzdHJpbmcgfCBudW1iZXI+XG5cblx0Ly8gUmVzb3VyY2UgdXRpbGl0aWVzXG5cdGdldEV2ZW50c0ZvclJlc291cmNlOiAocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBDYWxlbmRhckV2ZW50W11cblx0Z2V0RXZlbnRzRm9yUmVzb3VyY2VzOiAocmVzb3VyY2VJZHM6IChzdHJpbmcgfCBudW1iZXIpW10pID0+IENhbGVuZGFyRXZlbnRbXVxuXHRnZXRSZXNvdXJjZUJ5SWQ6IChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IFJlc291cmNlIHwgdW5kZWZpbmVkXG5cdGdldFZpc2libGVSZXNvdXJjZXM6ICgpID0+IFJlc291cmNlW11cblxuXHQvLyBDcm9zcy1yZXNvdXJjZSBldmVudCB1dGlsaXRpZXNcblx0aXNFdmVudENyb3NzUmVzb3VyY2U6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gYm9vbGVhblxuXHRnZXRFdmVudFJlc291cmNlSWRzOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IChzdHJpbmcgfCBudW1iZXIpW11cblxuXHQvLyBBZGRpdGlvbmFsIHByb3BlcnRpZXMgZnJvbSBjYWxlbmRhciBjb250ZXh0XG5cdG9uRXZlbnRDbGljazogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uQ2VsbENsaWNrOiAoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4gdm9pZFxuXHRyZW5kZXJSZXNvdXJjZT86IChyZXNvdXJjZTogUmVzb3VyY2UpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRvcmllbnRhdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJ1xufVxuXG4vLyBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCBpcyBrZXB0IGZvciBpbnRlcm5hbCBQcm92aWRlciB1c2FnZVxuZXhwb3J0IGNvbnN0IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0OiBSZWFjdC5Db250ZXh0PFxuXHRSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWRcbj4gPSBjcmVhdGVDb250ZXh0PFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhclByb3ZpZGVyUHJvcHMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvcHJvdmlkZXInXG5pbXBvcnQgdHlwZSB7XG5cdENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlLFxuXHRDZWxsQ2xpY2tJbmZvLFxuXHRSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckVuZ2luZSB9IGZyb20gJ0AvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZSdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0J1xuXG5jb25zdCBnZXRFdmVudFJlc291cmNlSWRzID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogKHN0cmluZyB8IG51bWJlcilbXSA9PiB7XG5cdGlmIChldmVudC5yZXNvdXJjZUlkcykge1xuXHRcdHJldHVybiBldmVudC5yZXNvdXJjZUlkc1xuXHR9XG5cdGlmIChldmVudC5yZXNvdXJjZUlkICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gW2V2ZW50LnJlc291cmNlSWRdXG5cdH1cblx0cmV0dXJuIFtdXG59XG5cbmludGVyZmFjZSBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXJQcm9wcyBleHRlbmRzIENhbGVuZGFyUHJvdmlkZXJQcm9wcyB7XG5cdGV2ZW50cz86IENhbGVuZGFyRXZlbnRbXVxuXHRyZXNvdXJjZXM/OiBSZXNvdXJjZVtdXG5cdHJlbmRlclJlc291cmNlPzogKHJlc291cmNlOiBSZXNvdXJjZSkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzZXNPdmVycmlkZT86IENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlXG5cdG9yaWVudGF0aW9uPzogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJ1xuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcj86IChcblx0XHRwcm9wczogUmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wc1xuXHQpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRyZW5kZXJIb3VyPzogKGRhdGU6IERheWpzKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXI6IFJlYWN0LkZDPFxuXHRSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXJQcm9wc1xuPiA9ICh7XG5cdGNoaWxkcmVuLFxuXHRldmVudHMgPSBbXSxcblx0cmVzb3VyY2VzID0gW10sXG5cdGZpcnN0RGF5T2ZXZWVrID0gMCxcblx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRpbml0aWFsRGF0ZSxcblx0cmVuZGVyRXZlbnQsXG5cdG9uRXZlbnRDbGljayxcblx0b25DZWxsQ2xpY2ssXG5cdG9uVmlld0NoYW5nZSxcblx0b25FdmVudEFkZCxcblx0b25FdmVudFVwZGF0ZSxcblx0b25FdmVudERlbGV0ZSxcblx0b25EYXRlQ2hhbmdlLFxuXHRsb2NhbGUsXG5cdHRpbWV6b25lLFxuXHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRkaXNhYmxlRXZlbnRDbGljayxcblx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRkYXlNYXhFdmVudHMsXG5cdGV2ZW50U3BhY2luZyA9IDEsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdGhlYWRlckNvbXBvbmVudCxcblx0aGVhZGVyQ2xhc3NOYW1lLFxuXHR0cmFuc2xhdGlvbnMsXG5cdHRyYW5zbGF0b3IsXG5cdHJlbmRlclJlc291cmNlLFxuXHRyZW5kZXJFdmVudEZvcm0sXG5cdGJ1c2luZXNzSG91cnMsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGNsYXNzZXNPdmVycmlkZSxcblx0b3JpZW50YXRpb24gPSAnaG9yaXpvbnRhbCcsXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRyZW5kZXJIb3VyLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3VycyA9IGZhbHNlLFxuXHRoaWRkZW5EYXlzLFxufSkgPT4ge1xuXHQvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuXHRjb25zdCBbY3VycmVudFJlc291cmNlc10gPSB1c2VTdGF0ZTxSZXNvdXJjZVtdPihyZXNvdXJjZXMpXG5cdGNvbnN0IFt2aXNpYmxlUmVzb3VyY2VzLCBzZXRWaXNpYmxlUmVzb3VyY2VzXSA9IHVzZVN0YXRlPFxuXHRcdFNldDxzdHJpbmcgfCBudW1iZXI+XG5cdD4obmV3IFNldChyZXNvdXJjZXMubWFwKChyKSA9PiByLmlkKSkpXG5cblx0Ly8gVXNlIHRoZSBjYWxlbmRhciBlbmdpbmVcblx0Y29uc3QgY2FsZW5kYXJFbmdpbmUgPSB1c2VDYWxlbmRhckVuZ2luZSh7XG5cdFx0ZXZlbnRzLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGluaXRpYWxWaWV3LFxuXHRcdGluaXRpYWxEYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0b25FdmVudEFkZCxcblx0XHRvbkV2ZW50VXBkYXRlLFxuXHRcdG9uRXZlbnREZWxldGUsXG5cdFx0b25EYXRlQ2hhbmdlLFxuXHRcdG9uVmlld0NoYW5nZTogb25WaWV3Q2hhbmdlLFxuXHRcdGxvY2FsZSxcblx0XHR0aW1lem9uZSxcblx0XHR0cmFuc2xhdGlvbnMsXG5cdFx0dHJhbnNsYXRvcixcblx0fSlcblxuXHQvLyBSZXNvdXJjZSB2aXNpYmlsaXR5XG5cdGNvbnN0IHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRcdHNldFZpc2libGVSZXNvdXJjZXMoKHByZXYpID0+IHtcblx0XHRcdFx0Y29uc3QgbmV3U2V0ID0gbmV3IFNldChwcmV2KVxuXHRcdFx0XHRpZiAobmV3U2V0LmhhcyhyZXNvdXJjZUlkKSkge1xuXHRcdFx0XHRcdG5ld1NldC5kZWxldGUocmVzb3VyY2VJZClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRuZXdTZXQuYWRkKHJlc291cmNlSWQpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG5ld1NldFxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtdXG5cdClcblxuXHRjb25zdCBzaG93UmVzb3VyY2UgPSB1c2VDYWxsYmFjaygocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG5cdFx0c2V0VmlzaWJsZVJlc291cmNlcygocHJldikgPT4gbmV3IFNldChwcmV2KS5hZGQocmVzb3VyY2VJZCkpXG5cdH0sIFtdKVxuXG5cdGNvbnN0IGhpZGVSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRzZXRWaXNpYmxlUmVzb3VyY2VzKChwcmV2KSA9PiB7XG5cdFx0XHRjb25zdCBuZXdTZXQgPSBuZXcgU2V0KHByZXYpXG5cdFx0XHRuZXdTZXQuZGVsZXRlKHJlc291cmNlSWQpXG5cdFx0XHRyZXR1cm4gbmV3U2V0XG5cdFx0fSlcblx0fSwgW10pXG5cblx0Y29uc3Qgc2hvd0FsbFJlc291cmNlcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzZXRWaXNpYmxlUmVzb3VyY2VzKG5ldyBTZXQoY3VycmVudFJlc291cmNlcy5tYXAoKHIpID0+IHIuaWQpKSlcblx0fSwgW2N1cnJlbnRSZXNvdXJjZXNdKVxuXG5cdGNvbnN0IGhpZGVBbGxSZXNvdXJjZXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c2V0VmlzaWJsZVJlc291cmNlcyhuZXcgU2V0KCkpXG5cdH0sIFtdKVxuXG5cdC8vIEV2ZW50IHV0aWxpdGllc1xuXHRjb25zdCBnZXRFdmVudHNGb3JSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRcdFx0cmV0dXJuIGNhbGVuZGFyRW5naW5lLmV2ZW50cy5maWx0ZXIoKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChldmVudC5yZXNvdXJjZUlkcykge1xuXHRcdFx0XHRcdHJldHVybiBldmVudC5yZXNvdXJjZUlkcy5pbmNsdWRlcyhyZXNvdXJjZUlkKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBldmVudC5yZXNvdXJjZUlkID09PSByZXNvdXJjZUlkXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lLmV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldEV2ZW50c0ZvclJlc291cmNlcyA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkczogKHN0cmluZyB8IG51bWJlcilbXSk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdFx0XHRyZXR1cm4gY2FsZW5kYXJFbmdpbmUuZXZlbnRzLmZpbHRlcigoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnRSZXNvdXJjZUlkcyA9IGdldEV2ZW50UmVzb3VyY2VJZHMoZXZlbnQpXG5cdFx0XHRcdHJldHVybiBldmVudFJlc291cmNlSWRzLnNvbWUoKGlkKSA9PiByZXNvdXJjZUlkcy5pbmNsdWRlcyhpZCkpXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lLmV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldFJlc291cmNlQnlJZCA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBSZXNvdXJjZSB8IHVuZGVmaW5lZCA9PiB7XG5cdFx0XHRyZXR1cm4gY3VycmVudFJlc291cmNlcy5maW5kKChyZXNvdXJjZSkgPT4gcmVzb3VyY2UuaWQgPT09IHJlc291cmNlSWQpXG5cdFx0fSxcblx0XHRbY3VycmVudFJlc291cmNlc11cblx0KVxuXG5cdGNvbnN0IGdldFZpc2libGVSZXNvdXJjZXMgPSB1c2VDYWxsYmFjaygoKTogUmVzb3VyY2VbXSA9PiB7XG5cdFx0cmV0dXJuIGN1cnJlbnRSZXNvdXJjZXMuZmlsdGVyKChyZXNvdXJjZSkgPT5cblx0XHRcdHZpc2libGVSZXNvdXJjZXMuaGFzKHJlc291cmNlLmlkKVxuXHRcdClcblx0fSwgW2N1cnJlbnRSZXNvdXJjZXMsIHZpc2libGVSZXNvdXJjZXNdKVxuXG5cdC8vIENyb3NzLXJlc291cmNlIGV2ZW50IHV0aWxpdGllc1xuXHRjb25zdCBpc0V2ZW50Q3Jvc3NSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKChldmVudDogQ2FsZW5kYXJFdmVudCk6IGJvb2xlYW4gPT4ge1xuXHRcdHJldHVybiBCb29sZWFuKGV2ZW50LnJlc291cmNlSWRzICYmIGV2ZW50LnJlc291cmNlSWRzLmxlbmd0aCA+IDEpXG5cdH0sIFtdKVxuXG5cdC8vIEN1c3RvbSBoYW5kbGVyc1xuXHRjb25zdCBlZGl0RXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRXZlbnQoZXZlbnQpXG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcblx0XHR9LFxuXHRcdFtjYWxlbmRhckVuZ2luZV1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZUV2ZW50Q2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGlmIChkaXNhYmxlRXZlbnRDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblx0XHRcdGlmIChvbkV2ZW50Q2xpY2spIHtcblx0XHRcdFx0b25FdmVudENsaWNrKGV2ZW50KVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWRpdEV2ZW50KGV2ZW50KVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W2Rpc2FibGVFdmVudENsaWNrLCBvbkV2ZW50Q2xpY2ssIGVkaXRFdmVudF1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZURhdGVDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUNlbGxDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9uQ2VsbENsaWNrKSB7XG5cdFx0XHRcdG9uQ2VsbENsaWNrKGluZm8pXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBuZXdFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0XHR0aXRsZTogY2FsZW5kYXJFbmdpbmUudCgnbmV3RXZlbnQnKSxcblx0XHRcdFx0XHRzdGFydDogaW5mby5zdGFydCxcblx0XHRcdFx0XHRlbmQ6IGluZm8uZW5kLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiAnJyxcblx0XHRcdFx0XHRhbGxEYXk6IGZhbHNlLFxuXHRcdFx0XHR9IGFzIENhbGVuZGFyRXZlbnRcblxuXHRcdFx0XHRpZiAoaW5mby5yZXNvdXJjZUlkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRuZXdFdmVudC5yZXNvdXJjZUlkID0gaW5mby5yZXNvdXJjZUlkXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KG5ld0V2ZW50KVxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZERhdGUoaW5mby5zdGFydClcblx0XHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbb25DZWxsQ2xpY2ssIGRpc2FibGVDZWxsQ2xpY2ssIGNhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Ly8gQ3JlYXRlIHRoZSBjb250ZXh0IHZhbHVlXG5cdGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdC4uLmNhbGVuZGFyRW5naW5lLFxuXHRcdFx0dmlldzogY2FsZW5kYXJFbmdpbmUudmlldyxcblx0XHRcdHNldFZpZXc6IGNhbGVuZGFyRW5naW5lLnNldFZpZXcsXG5cdFx0XHRldmVudHM6IGNhbGVuZGFyRW5naW5lLmV2ZW50cyxcblx0XHRcdHJhd0V2ZW50czogY2FsZW5kYXJFbmdpbmUucmF3RXZlbnRzLFxuXG5cdFx0XHQvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuXHRcdFx0cmVzb3VyY2VzOiBjdXJyZW50UmVzb3VyY2VzLFxuXHRcdFx0dmlzaWJsZVJlc291cmNlcyxcblx0XHRcdHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSxcblx0XHRcdHNob3dSZXNvdXJjZSxcblx0XHRcdGhpZGVSZXNvdXJjZSxcblx0XHRcdHNob3dBbGxSZXNvdXJjZXMsXG5cdFx0XHRoaWRlQWxsUmVzb3VyY2VzLFxuXG5cdFx0XHQvLyBSZXNvdXJjZSB1dGlsaXRpZXNcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2VzLFxuXHRcdFx0Z2V0UmVzb3VyY2VCeUlkLFxuXHRcdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblxuXHRcdFx0Ly8gQ3Jvc3MtcmVzb3VyY2UgZXZlbnQgdXRpbGl0aWVzXG5cdFx0XHRpc0V2ZW50Q3Jvc3NSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50UmVzb3VyY2VJZHMsXG5cblx0XHRcdC8vIE92ZXJyaWRlIGhhbmRsZXJzXG5cdFx0XHRvbkV2ZW50Q2xpY2s6IGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRvbkNlbGxDbGljazogaGFuZGxlRGF0ZUNsaWNrLFxuXG5cdFx0XHQvLyBQYXNzIHRocm91Z2ggaGVhZGVyIHByb3BzXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cblx0XHRcdC8vIFBhc3MgdGhyb3VnaCBvdGhlciBwcm9wc1xuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRyZW5kZXJSZXNvdXJjZSxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdG9yaWVudGF0aW9uLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRyZW5kZXJIb3VyLFxuXHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRoaWRkZW5EYXlzLFxuXHRcdH0pLFxuXHRcdFtcblx0XHRcdGNhbGVuZGFyRW5naW5lLFxuXHRcdFx0Y3VycmVudFJlc291cmNlcyxcblx0XHRcdHZpc2libGVSZXNvdXJjZXMsXG5cdFx0XHR0b2dnbGVSZXNvdXJjZVZpc2liaWxpdHksXG5cdFx0XHRzaG93UmVzb3VyY2UsXG5cdFx0XHRoaWRlUmVzb3VyY2UsXG5cdFx0XHRzaG93QWxsUmVzb3VyY2VzLFxuXHRcdFx0aGlkZUFsbFJlc291cmNlcyxcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2VzLFxuXHRcdFx0Z2V0UmVzb3VyY2VCeUlkLFxuXHRcdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblx0XHRcdGlzRXZlbnRDcm9zc1Jlc291cmNlLFxuXHRcdFx0aGFuZGxlRXZlbnRDbGljayxcblx0XHRcdGhhbmRsZURhdGVDbGljayxcblx0XHRcdHJlbmRlckV2ZW50LFxuXHRcdFx0cmVuZGVyUmVzb3VyY2UsXG5cdFx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdFx0XHRsb2NhbGUsXG5cdFx0XHR0aW1lem9uZSxcblx0XHRcdGRpc2FibGVDZWxsQ2xpY2ssXG5cdFx0XHRkaXNhYmxlRXZlbnRDbGljayxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdHN0aWNreVZpZXdIZWFkZXIsXG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0aGVhZGVyQ29tcG9uZW50LFxuXHRcdFx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdHRpbWVGb3JtYXQsXG5cdFx0XHRjbGFzc2VzT3ZlcnJpZGUsXG5cdFx0XHRvcmllbnRhdGlvbixcblx0XHRcdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRcdFx0cmVuZGVySG91cixcblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0aGlkZGVuRGF5cyxcblx0XHRdXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUNhbGVuZGFyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L1Jlc291cmNlQ2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHtcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQgYXMgZGVsZXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxuXHRnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyxcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQgYXMgdXBkYXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxufSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuaW1wb3J0IGRheWpzLCB7XG5cdHR5cGUgRGF5anMsXG5cdHR5cGUgTWFuaXB1bGF0ZVR5cGUsXG59IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZGVmYXVsdFRyYW5zbGF0aW9ucyB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy9kZWZhdWx0J1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnMsIFRyYW5zbGF0b3JGdW5jdGlvbiB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmltcG9ydCB7IGdldE1vbnRoV2Vla3MsIGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3IH0gZnJvbSAnQC90eXBlcydcbmltcG9ydCB7IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQgfSBmcm9tICcuLi9saWIvY29uc3RhbnRzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyRW5naW5lQ29uZmlnIHtcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuXHRpbml0aWFsVmlldz86IENhbGVuZGFyVmlld1xuXHRpbml0aWFsRGF0ZT86IERheWpzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdG9uRXZlbnRBZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudFVwZGF0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50RGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRGF0ZUNoYW5nZT86IChkYXRlOiBEYXlqcywgcmFuZ2U6IHsgc3RhcnQ6IERheWpzOyBlbmQ6IERheWpzIH0pID0+IHZvaWRcblx0b25WaWV3Q2hhbmdlPzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRsb2NhbGU/OiBzdHJpbmdcblx0dGltZXpvbmU/OiBzdHJpbmdcblx0dHJhbnNsYXRpb25zPzogVHJhbnNsYXRpb25zXG5cdHRyYW5zbGF0b3I/OiBUcmFuc2xhdG9yRnVuY3Rpb25cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhckVuZ2luZVJldHVybiB7XG5cdGN1cnJlbnREYXRlOiBEYXlqc1xuXHR2aWV3OiBDYWxlbmRhclZpZXdcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmF3RXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0aXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG5cdHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHNlbGVjdGVkRGF0ZTogRGF5anMgfCBudWxsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0Y3VycmVudExvY2FsZTogc3RyaW5nXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHNldEN1cnJlbnREYXRlOiAoZGF0ZTogRGF5anMpID0+IHZvaWRcblx0c2VsZWN0RGF0ZTogKGRhdGU6IERheWpzKSA9PiB2b2lkXG5cdHNldFZpZXc6ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcblx0bmV4dFBlcmlvZDogKCkgPT4gdm9pZFxuXHRwcmV2UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHRvZGF5OiAoKSA9PiB2b2lkXG5cdGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0dXBkYXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50Pixcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG5cdGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdCkgPT4gdm9pZFxuXHRvcGVuRXZlbnRGb3JtOiAoZXZlbnREYXRhPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHRjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxuXHRzZXRTZWxlY3RlZEV2ZW50OiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxDYWxlbmRhckV2ZW50IHwgbnVsbD4+XG5cdHNldElzRXZlbnRGb3JtT3BlbjogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248Ym9vbGVhbj4+XG5cdHNldFNlbGVjdGVkRGF0ZTogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248RGF5anMgfCBudWxsPj5cblx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiAoc3RhcnREYXRlOiBEYXlqcywgZW5kRGF0ZTogRGF5anMpID0+IENhbGVuZGFyRXZlbnRbXVxuXHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0dDogVHJhbnNsYXRvckZ1bmN0aW9uXG59XG5cbmNvbnN0IFZJRVdfVU5JVFM6IFJlY29yZDxDYWxlbmRhclZpZXcsIE1hbmlwdWxhdGVUeXBlPiA9IHtcblx0ZGF5OiAnZGF5Jyxcblx0d2VlazogJ3dlZWsnLFxuXHRtb250aDogJ21vbnRoJyxcblx0eWVhcjogJ3llYXInLFxufVxuXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlVmlld1JhbmdlID0gKFxuXHRkYXRlOiBEYXlqcyxcblx0dmlldzogQ2FsZW5kYXJWaWV3LFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG4pOiB7IHN0YXJ0OiBEYXlqczsgZW5kOiBEYXlqcyB9ID0+IHtcblx0aWYgKHZpZXcgPT09ICdkYXknKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHN0YXJ0OiBkYXRlLnN0YXJ0T2YoJ2RheScpLFxuXHRcdFx0ZW5kOiBkYXRlLmVuZE9mKCdkYXknKSxcblx0XHR9XG5cdH1cblx0aWYgKHZpZXcgPT09ICd5ZWFyJykge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzdGFydDogZGF0ZS5zdGFydE9mKCd5ZWFyJyksXG5cdFx0XHRlbmQ6IGRhdGUuZW5kT2YoJ3llYXInKSxcblx0XHR9XG5cdH1cblx0aWYgKHZpZXcgPT09ICd3ZWVrJykge1xuXHRcdGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoZGF0ZSwgZmlyc3REYXlPZldlZWspXG5cdFx0cmV0dXJuIHtcblx0XHRcdHN0YXJ0OiB3ZWVrRGF5c1swXS5zdGFydE9mKCdkYXknKSxcblx0XHRcdGVuZDogd2Vla0RheXNbNl0uZW5kT2YoJ2RheScpLFxuXHRcdH1cblx0fVxuXHQvLyBtb250aCB2aWV3XG5cdGNvbnN0IHdlZWtzID0gZ2V0TW9udGhXZWVrcyhkYXRlLCBmaXJzdERheU9mV2Vlaylcblx0cmV0dXJuIHsgc3RhcnQ6IHdlZWtzWzBdWzBdLnN0YXJ0T2YoJ2RheScpLCBlbmQ6IHdlZWtzWzVdWzZdLmVuZE9mKCdkYXknKSB9XG59XG5cbmV4cG9ydCBjb25zdCB1c2VDYWxlbmRhckVuZ2luZSA9IChcblx0Y29uZmlnOiBDYWxlbmRhckVuZ2luZUNvbmZpZ1xuKTogQ2FsZW5kYXJFbmdpbmVSZXR1cm4gPT4ge1xuXHRjb25zdCB7XG5cdFx0ZXZlbnRzID0gW10sXG5cdFx0Zmlyc3REYXlPZldlZWsgPSAwLFxuXHRcdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0XHRpbml0aWFsRGF0ZSA9IGRheWpzKCksXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRvbkV2ZW50QWRkLFxuXHRcdG9uRXZlbnRVcGRhdGUsXG5cdFx0b25FdmVudERlbGV0ZSxcblx0XHRvbkRhdGVDaGFuZ2UsXG5cdFx0b25WaWV3Q2hhbmdlLFxuXHRcdGxvY2FsZSxcblx0XHR0aW1lem9uZSxcblx0XHR0cmFuc2xhdGlvbnMsXG5cdFx0dHJhbnNsYXRvcixcblx0fSA9IGNvbmZpZ1xuXG5cdGNvbnN0IFtjdXJyZW50RGF0ZSwgc2V0Q3VycmVudERhdGVdID0gdXNlU3RhdGU8RGF5anM+KFxuXHRcdGRheWpzLmlzRGF5anMoaW5pdGlhbERhdGUpID8gaW5pdGlhbERhdGUgOiBkYXlqcyhpbml0aWFsRGF0ZSlcblx0KVxuXHRjb25zdCBbdmlldywgc2V0Vmlld10gPSB1c2VTdGF0ZTxDYWxlbmRhclZpZXc+KGluaXRpYWxWaWV3KVxuXHRjb25zdCBbY3VycmVudEV2ZW50cywgc2V0Q3VycmVudEV2ZW50c10gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50W10+KGV2ZW50cylcblx0Y29uc3QgW2lzRXZlbnRGb3JtT3Blbiwgc2V0SXNFdmVudEZvcm1PcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXHRjb25zdCBbc2VsZWN0ZWRFdmVudCwgc2V0U2VsZWN0ZWRFdmVudF0gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50IHwgbnVsbD4obnVsbClcblx0Y29uc3QgW3NlbGVjdGVkRGF0ZSwgc2V0U2VsZWN0ZWREYXRlXSA9IHVzZVN0YXRlPERheWpzIHwgbnVsbD4obnVsbClcblx0Y29uc3QgW2N1cnJlbnRMb2NhbGUsIHNldEN1cnJlbnRMb2NhbGVdID0gdXNlU3RhdGUobG9jYWxlIHx8ICdlbicpXG5cdGNvbnN0IGxhc3RFdmVudHNQcm9wID0gdXNlUmVmKGV2ZW50cylcblx0Y29uc3QgbGFzdFRpbWV6b25lUHJvcCA9IHVzZVJlZih0aW1lem9uZSlcblx0Y29uc3QgbGFzdExvY2FsZVByb3AgPSB1c2VSZWYobG9jYWxlKVxuXG5cdGNvbnN0IHQ6IFRyYW5zbGF0b3JGdW5jdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmICh0cmFuc2xhdG9yKSB7XG5cdFx0XHRyZXR1cm4gdHJhbnNsYXRvclxuXHRcdH1cblx0XHRpZiAodHJhbnNsYXRpb25zKSB7XG5cdFx0XHRyZXR1cm4gKGtleTogc3RyaW5nKSA9PiB0cmFuc2xhdGlvbnNba2V5IGFzIGtleW9mIFRyYW5zbGF0aW9uc10gfHwga2V5XG5cdFx0fVxuXHRcdHJldHVybiAoa2V5OiBzdHJpbmcpID0+XG5cdFx0XHRkZWZhdWx0VHJhbnNsYXRpb25zW2tleSBhcyBrZXlvZiBUcmFuc2xhdGlvbnNdIHx8IGtleVxuXHR9LCBbdHJhbnNsYXRpb25zLCB0cmFuc2xhdG9yXSlcblxuXHRjb25zdCBnZXRFdmVudHNGb3JEYXRlUmFuZ2UgPSB1c2VDYWxsYmFjayhcblx0XHQoc3RhcnREYXRlOiBEYXlqcywgZW5kRGF0ZTogRGF5anMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRcdFx0Y29uc3QgYWxsRXZlbnRzOiBDYWxlbmRhckV2ZW50W10gPSBbXVxuXG5cdFx0XHRmb3IgKGNvbnN0IGV2ZW50IG9mIGN1cnJlbnRFdmVudHMpIHtcblx0XHRcdFx0aWYgKGV2ZW50LnJydWxlKSB7XG5cdFx0XHRcdFx0YWxsRXZlbnRzLnB1c2goXG5cdFx0XHRcdFx0XHQuLi5nZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyh7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdFx0XHRzdGFydERhdGUsXG5cdFx0XHRcdFx0XHRcdGVuZERhdGUsXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBzdGFydHNJblJhbmdlID1cblx0XHRcdFx0XHRcdGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIoc3RhcnREYXRlKSAmJlxuXHRcdFx0XHRcdFx0ZXZlbnQuc3RhcnQuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSlcblx0XHRcdFx0XHRjb25zdCBlbmRzSW5SYW5nZSA9XG5cdFx0XHRcdFx0XHRldmVudC5lbmQuaXNTYW1lT3JBZnRlcihzdGFydERhdGUpICYmXG5cdFx0XHRcdFx0XHRldmVudC5lbmQuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSlcblx0XHRcdFx0XHRjb25zdCBzcGFuc1JhbmdlID1cblx0XHRcdFx0XHRcdGV2ZW50LnN0YXJ0LmlzQmVmb3JlKHN0YXJ0RGF0ZSkgJiYgZXZlbnQuZW5kLmlzQWZ0ZXIoZW5kRGF0ZSlcblx0XHRcdFx0XHRpZiAoc3RhcnRzSW5SYW5nZSB8fCBlbmRzSW5SYW5nZSB8fCBzcGFuc1JhbmdlKSB7XG5cdFx0XHRcdFx0XHRhbGxFdmVudHMucHVzaChldmVudClcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBhbGxFdmVudHNcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzXVxuXHQpXG5cblx0Y29uc3QgZ2V0Q3VycmVudFZpZXdSYW5nZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRyZXR1cm4gY2FsY3VsYXRlVmlld1JhbmdlKGN1cnJlbnREYXRlLCB2aWV3LCBmaXJzdERheU9mV2Vlaylcblx0fSwgW2N1cnJlbnREYXRlLCB2aWV3LCBmaXJzdERheU9mV2Vla10pXG5cblx0Y29uc3QgcHJvY2Vzc2VkRXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0Y29uc3QgeyBzdGFydCwgZW5kIH0gPSBnZXRDdXJyZW50Vmlld1JhbmdlKClcblx0XHRyZXR1cm4gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKHN0YXJ0LCBlbmQpXG5cdH0sIFtnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIGdldEN1cnJlbnRWaWV3UmFuZ2VdKVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGV2ZW50cyAhPT0gbGFzdEV2ZW50c1Byb3AuY3VycmVudCkge1xuXHRcdFx0c2V0Q3VycmVudEV2ZW50cyhldmVudHMpXG5cdFx0XHRsYXN0RXZlbnRzUHJvcC5jdXJyZW50ID0gZXZlbnRzXG5cdFx0fVxuXHR9LCBbZXZlbnRzXSlcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChsb2NhbGUgJiYgbG9jYWxlICE9PSBsYXN0TG9jYWxlUHJvcC5jdXJyZW50KSB7XG5cdFx0XHRzZXRDdXJyZW50TG9jYWxlKGxvY2FsZSlcblx0XHRcdGRheWpzLmxvY2FsZShsb2NhbGUpXG5cdFx0XHRzZXRDdXJyZW50RGF0ZSgocHJldkRhdGUpID0+IHByZXZEYXRlLmxvY2FsZShsb2NhbGUpKVxuXHRcdFx0bGFzdExvY2FsZVByb3AuY3VycmVudCA9IGxvY2FsZVxuXHRcdH1cblx0fSwgW2xvY2FsZV0pXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAodGltZXpvbmUgJiYgdGltZXpvbmUgIT09IGxhc3RUaW1lem9uZVByb3AuY3VycmVudCkge1xuXHRcdFx0ZGF5anMudHouc2V0RGVmYXVsdCh0aW1lem9uZSlcblx0XHRcdHNldEN1cnJlbnREYXRlKChwcmV2KSA9PiBwcmV2LnR6KHRpbWV6b25lKSlcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+XG5cdFx0XHRcdHByZXYubWFwKChlKSA9PiAoe1xuXHRcdFx0XHRcdC4uLmUsXG5cdFx0XHRcdFx0c3RhcnQ6IGUuc3RhcnQudHoodGltZXpvbmUpLFxuXHRcdFx0XHRcdGVuZDogZS5lbmQudHoodGltZXpvbmUpLFxuXHRcdFx0XHR9KSlcblx0XHRcdClcblx0XHRcdGxhc3RUaW1lem9uZVByb3AuY3VycmVudCA9IHRpbWV6b25lXG5cdFx0fVxuXHR9LCBbdGltZXpvbmVdKVxuXG5cdGNvbnN0IHVwZGF0ZURhdGVBbmROb3RpZnkgPSB1c2VDYWxsYmFjayhcblx0XHQobmV3RGF0ZTogRGF5anMpID0+IHtcblx0XHRcdHNldEN1cnJlbnREYXRlKG5ld0RhdGUpXG5cdFx0XHRjb25zdCByYW5nZSA9IGNhbGN1bGF0ZVZpZXdSYW5nZShuZXdEYXRlLCB2aWV3LCBmaXJzdERheU9mV2Vlaylcblx0XHRcdG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUsIHJhbmdlKVxuXHRcdH0sXG5cdFx0W29uRGF0ZUNoYW5nZSwgdmlldywgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCBzZWxlY3REYXRlID0gdXNlQ2FsbGJhY2soXG5cdFx0KGRhdGU6IERheWpzKSA9PiB1cGRhdGVEYXRlQW5kTm90aWZ5KGRhdGUpLFxuXHRcdFt1cGRhdGVEYXRlQW5kTm90aWZ5XVxuXHQpXG5cblx0Y29uc3QgbmF2aWdhdGVQZXJpb2QgPSB1c2VDYWxsYmFjayhcblx0XHQoZGlyZWN0aW9uOiAxIHwgLTEpID0+IHtcblx0XHRcdGNvbnN0IG5ld0RhdGUgPVxuXHRcdFx0XHRkaXJlY3Rpb24gPT09IDFcblx0XHRcdFx0XHQ/IGN1cnJlbnREYXRlLmFkZCgxLCBWSUVXX1VOSVRTW3ZpZXddKVxuXHRcdFx0XHRcdDogY3VycmVudERhdGUuc3VidHJhY3QoMSwgVklFV19VTklUU1t2aWV3XSlcblx0XHRcdHVwZGF0ZURhdGVBbmROb3RpZnkobmV3RGF0ZSlcblx0XHR9LFxuXHRcdFtjdXJyZW50RGF0ZSwgdmlldywgdXBkYXRlRGF0ZUFuZE5vdGlmeV1cblx0KVxuXG5cdGNvbnN0IG5leHRQZXJpb2QgPSB1c2VDYWxsYmFjaygoKSA9PiBuYXZpZ2F0ZVBlcmlvZCgxKSwgW25hdmlnYXRlUGVyaW9kXSlcblx0Y29uc3QgcHJldlBlcmlvZCA9IHVzZUNhbGxiYWNrKCgpID0+IG5hdmlnYXRlUGVyaW9kKC0xKSwgW25hdmlnYXRlUGVyaW9kXSlcblxuXHRjb25zdCB0b2RheSA9IHVzZUNhbGxiYWNrKFxuXHRcdCgpID0+IHVwZGF0ZURhdGVBbmROb3RpZnkoZGF5anMoKSksXG5cdFx0W3VwZGF0ZURhdGVBbmROb3RpZnldXG5cdClcblxuXHRjb25zdCBhZGRFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0c2V0Q3VycmVudEV2ZW50cygocHJldikgPT4gWy4uLnByZXYsIGV2ZW50XSlcblx0XHRcdG9uRXZlbnRBZGQ/LihldmVudClcblx0XHR9LFxuXHRcdFtvbkV2ZW50QWRkXVxuXHQpXG5cblx0Y29uc3QgdXBkYXRlRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLCB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG5cdFx0XHRjb25zdCBldmVudFRvVXBkYXRlID0gY3VycmVudEV2ZW50cy5maW5kKChldmVudCkgPT4gZXZlbnQuaWQgPT09IGV2ZW50SWQpXG5cdFx0XHRpZiAoIWV2ZW50VG9VcGRhdGUpIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG5ld0V2ZW50ID0geyAuLi5ldmVudFRvVXBkYXRlLCAuLi51cGRhdGVzIH1cblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+XG5cdFx0XHRcdHByZXYubWFwKChldmVudCkgPT4gKGV2ZW50LmlkID09PSBldmVudElkID8gbmV3RXZlbnQgOiBldmVudCkpXG5cdFx0XHQpXG5cdFx0XHRvbkV2ZW50VXBkYXRlPy4obmV3RXZlbnQpXG5cdFx0fSxcblx0XHRbY3VycmVudEV2ZW50cywgb25FdmVudFVwZGF0ZV1cblx0KVxuXG5cdGNvbnN0IHVwZGF0ZVJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KFxuXHRcdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdFx0KSA9PiB7XG5cdFx0XHRvbkV2ZW50VXBkYXRlPy4oeyAuLi5ldmVudCwgLi4udXBkYXRlcyB9KVxuXHRcdFx0c2V0Q3VycmVudEV2ZW50cyhcblx0XHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnRJbXBsKHtcblx0XHRcdFx0XHR0YXJnZXRFdmVudDogZXZlbnQsXG5cdFx0XHRcdFx0dXBkYXRlcyxcblx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnRVcGRhdGVdXG5cdClcblxuXHRjb25zdCBkZWxldGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCwgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zKSA9PiB7XG5cdFx0XHRvbkV2ZW50RGVsZXRlPy4oZXZlbnQpXG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKFxuXHRcdFx0XHRkZWxldGVSZWN1cnJpbmdFdmVudEltcGwoe1xuXHRcdFx0XHRcdHRhcmdldEV2ZW50OiBldmVudCxcblx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnREZWxldGVdXG5cdClcblxuXHRjb25zdCBkZWxldGVFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRcdGNvbnN0IGV2ZW50VG9EZWxldGUgPSBjdXJyZW50RXZlbnRzLmZpbmQoKGUpID0+IGUuaWQgPT09IGV2ZW50SWQpXG5cdFx0XHRpZiAoIWV2ZW50VG9EZWxldGUpIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+IHByZXYuZmlsdGVyKChlKSA9PiBlLmlkICE9PSBldmVudElkKSlcblx0XHRcdG9uRXZlbnREZWxldGU/LihldmVudFRvRGVsZXRlKVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnREZWxldGVdXG5cdClcblxuXHRjb25zdCBvcGVuRXZlbnRGb3JtID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdGlmIChldmVudERhdGE/LnN0YXJ0KSB7XG5cdFx0XHRcdHNldFNlbGVjdGVkRGF0ZShldmVudERhdGEuc3RhcnQpXG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzdGFydCA9IGV2ZW50RGF0YT8uc3RhcnQgPz8gY3VycmVudERhdGVcblx0XHRcdHNldFNlbGVjdGVkRXZlbnQoe1xuXHRcdFx0XHR0aXRsZTogdCgnbmV3RXZlbnQnKSxcblx0XHRcdFx0c3RhcnQsXG5cdFx0XHRcdGVuZDogZXZlbnREYXRhPy5lbmQgPz8gc3RhcnQuYWRkKDEsICdob3VyJyksXG5cdFx0XHRcdHJlc291cmNlSWQ6IGV2ZW50RGF0YT8ucmVzb3VyY2VJZCxcblx0XHRcdFx0ZGVzY3JpcHRpb246ICcnLFxuXHRcdFx0XHRhbGxEYXk6IGV2ZW50RGF0YT8uYWxsRGF5ID8/IGZhbHNlLFxuXHRcdFx0fSBhcyBDYWxlbmRhckV2ZW50KVxuXHRcdFx0c2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0fSxcblx0XHRbY3VycmVudERhdGUsIHRdXG5cdClcblxuXHRjb25zdCBjbG9zZUV2ZW50Rm9ybSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzZXRTZWxlY3RlZERhdGUobnVsbClcblx0XHRzZXRTZWxlY3RlZEV2ZW50KG51bGwpXG5cdFx0c2V0SXNFdmVudEZvcm1PcGVuKGZhbHNlKVxuXHR9LCBbXSlcblxuXHRjb25zdCBoYW5kbGVWaWV3Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG5cdFx0KG5ld1ZpZXc6IENhbGVuZGFyVmlldykgPT4ge1xuXHRcdFx0c2V0VmlldyhuZXdWaWV3KVxuXHRcdFx0b25WaWV3Q2hhbmdlPy4obmV3Vmlldylcblx0XHRcdC8vIFZpZXcgY2hhbmdlIGFmZmVjdHMgdmlzaWJsZSByYW5nZSDigJQgbm90aWZ5IGNvbnN1bWVyc1xuXHRcdFx0Y29uc3QgcmFuZ2UgPSBjYWxjdWxhdGVWaWV3UmFuZ2UoY3VycmVudERhdGUsIG5ld1ZpZXcsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdFx0b25EYXRlQ2hhbmdlPy4oY3VycmVudERhdGUsIHJhbmdlKVxuXHRcdH0sXG5cdFx0W29uVmlld0NoYW5nZSwgb25EYXRlQ2hhbmdlLCBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBDYWxlbmRhckV2ZW50IHwgbnVsbCA9PiB7XG5cdFx0XHRjb25zdCB0YXJnZXRVSUQgPSBldmVudC51aWRcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGN1cnJlbnRFdmVudHMuZmluZChcblx0XHRcdFx0XHQoZSkgPT4gKGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYCkgPT09IHRhcmdldFVJRCAmJiBlLnJydWxlXG5cdFx0XHRcdCkgfHwgbnVsbFxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHNdXG5cdClcblxuXHRyZXR1cm4ge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdHZpZXcsXG5cdFx0ZXZlbnRzOiBwcm9jZXNzZWRFdmVudHMsXG5cdFx0cmF3RXZlbnRzOiBjdXJyZW50RXZlbnRzLFxuXHRcdGlzRXZlbnRGb3JtT3Blbixcblx0XHRzZWxlY3RlZEV2ZW50LFxuXHRcdHNlbGVjdGVkRGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRkYXlNYXhFdmVudHM6IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdHNldEN1cnJlbnREYXRlLFxuXHRcdHNlbGVjdERhdGUsXG5cdFx0c2V0VmlldzogaGFuZGxlVmlld0NoYW5nZSxcblx0XHRuZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2QsXG5cdFx0dG9kYXksXG5cdFx0YWRkRXZlbnQsXG5cdFx0dXBkYXRlRXZlbnQsXG5cdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0ZGVsZXRlRXZlbnQsXG5cdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHRjbG9zZUV2ZW50Rm9ybSxcblx0XHRzZXRTZWxlY3RlZEV2ZW50LFxuXHRcdHNldElzRXZlbnRGb3JtT3Blbixcblx0XHRzZXRTZWxlY3RlZERhdGUsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHR0LFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBvbWl0S2V5cywgc2FmZURhdGUgfSBmcm9tICdAL2xpYi91dGlscydcblxuLyoqXG4gKiBDb252ZXJ0cyBhIERheWpzIG9iamVjdCB0byBhIFwiRmxvYXRpbmcgVGltZVwiIERhdGUgcmVwcmVzZW50YXRpb24uXG4gKiBJbiBGbG9hdGluZyBUaW1lLCB3ZSB1c2UgYSBVVEMgRGF0ZSBvYmplY3QgYnV0IHNldCBpdHMgVVRDIGNvbXBvbmVudHNcbiAqIHRvIG1hdGNoIHRoZSBsb2NhbCBjb21wb25lbnRzIG9mIHRoZSB1c2VyJ3MgZGF0ZS5cbiAqXG4gKiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgUlJ1bGUgZXZhbHVhdGlvbiBiZWNhdXNlIGl0IGVuc3VyZXMgdGhhdCBhIHJ1bGVcbiAqIGxpa2UgXCJFdmVyeSBXZWRuZXNkYXlcIiByZWZlcnMgdG8gdGhlIHVzZXIncyBsb2NhbCBXZWRuZXNkYXksIGV2ZW4gaWZcbiAqIHRoYXQgdGltZSBmYWxscyBvbiBhIFRodXJzZGF5IGluIGFjdHVhbCBVVEMuXG4gKi9cbmNvbnN0IHRvRmxvYXRpbmdEYXRlID0gKGQ6IERheWpzKTogRGF0ZSA9PiB7XG5cdHJldHVybiBuZXcgRGF0ZShcblx0XHREYXRlLlVUQyhcblx0XHRcdGQueWVhcigpLFxuXHRcdFx0ZC5tb250aCgpLFxuXHRcdFx0ZC5kYXRlKCksXG5cdFx0XHRkLmhvdXIoKSxcblx0XHRcdGQubWludXRlKCksXG5cdFx0XHRkLnNlY29uZCgpLFxuXHRcdFx0ZC5taWxsaXNlY29uZCgpXG5cdFx0KVxuXHQpXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBcIkZsb2F0aW5nIFRpbWVcIiBEYXRlIGJhY2sgdG8gYSBEYXlqcyBvYmplY3QgaW4gdGhlIG9yaWdpbmFsIGNvbnRleHQuXG4gKiBJdCB0YWtlcyB0aGUgWU1ESE1TIGNvbXBvbmVudHMgZnJvbSB0aGUgVVRDIERhdGUgYW5kIGFwcGxpZXMgdGhlbSB0byB0aGVcbiAqIHJlZmVyZW5jZSBEYXlqcyBvYmplY3QgKHByZXNlcnZpbmcgaXRzIHRpbWV6b25lL2xvY2FsZSkuXG4gKi9cbmNvbnN0IGZyb21GbG9hdGluZ0RhdGUgPSAoZGF0ZTogRGF0ZSwgcmVmZXJlbmNlOiBEYXlqcyk6IERheWpzID0+IHtcblx0cmV0dXJuIHJlZmVyZW5jZVxuXHRcdC55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSlcblx0XHQubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKVxuXHRcdC5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKVxuXHRcdC5ob3VyKGRhdGUuZ2V0VVRDSG91cnMoKSlcblx0XHQubWludXRlKGRhdGUuZ2V0VVRDTWludXRlcygpKVxuXHRcdC5zZWNvbmQoZGF0ZS5nZXRVVENTZWNvbmRzKCkpXG5cdFx0Lm1pbGxpc2Vjb25kKGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpXG59XG5cbmV4cG9ydCBjb25zdCBpc1JlY3VycmluZ0V2ZW50ID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG5cdHJldHVybiBCb29sZWFuKGV2ZW50LnJydWxlIHx8IGV2ZW50LnJlY3VycmVuY2VJZCB8fCBldmVudC51aWQpXG59XG5cbi8qKlxuICogQ29uc2lzdGVudGx5IGRlcml2ZXMgYSBwYXJlbnQgVUlEIGZyb20gYW4gZXZlbnQuXG4gKiBVc2VzIHRoZSBleHBsaWNpdCBgdWlkYCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxscyBiYWNrIHRvIGAke2lkfUBpbGFteS5jYWxlbmRhcmAuXG4gKi9cbmNvbnN0IGdldEV2ZW50UGFyZW50VUlEID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogc3RyaW5nID0+IHtcblx0cmV0dXJuIGV2ZW50LnVpZCB8fCBgJHtldmVudC5pZH1AaWxhbXkuY2FsZW5kYXJgXG59XG5cbmludGVyZmFjZSBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzIHtcblx0ZXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0Y3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHN0YXJ0RGF0ZTogRGF5anNcblx0ZW5kRGF0ZTogRGF5anNcbn1cblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzID0gKHtcblx0ZXZlbnQsXG5cdGN1cnJlbnRFdmVudHMsXG5cdHN0YXJ0RGF0ZSxcblx0ZW5kRGF0ZSxcbn06IEdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzUHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHQvLyBJZiBub3QgYSByZWN1cnJpbmcgZXZlbnQsIHJldHVybiBlbXB0eSBhcnJheVxuXHRpZiAoIWV2ZW50LnJydWxlKSB7XG5cdFx0cmV0dXJuIFtdXG5cdH1cblxuXHR0cnkge1xuXHRcdC8vIERUU1RBUlQgYW5kIFNFQVJDSCBXSU5ET1cgVFJBTlNGT1JNQVRJT05cblx0XHQvLyBUcmFuc2Zvcm0gYWxsIGRhdGVzIHRvIFwiZmxvYXRpbmcgdGltZVwiIChVVEMgd2l0aCBsb2NhbCBjb21wb25lbnRzKVxuXHRcdC8vIFRoaXMgZW5zdXJlcyBSUnVsZSBldmFsdWF0ZXMgXCJXZWRuZXNkYXlcIiBhcyB0aGUgdXNlcidzIGxvY2FsIFdlZG5lc2RheVxuXHRcdGNvbnN0IGZsb2F0aW5nU3RhcnQgPSB0b0Zsb2F0aW5nRGF0ZShldmVudC5zdGFydClcblx0XHRjb25zdCBmbG9hdGluZ1VudGlsID0gZXZlbnQucnJ1bGUudW50aWxcblx0XHRcdD8gdG9GbG9hdGluZ0RhdGUoZGF5anMoZXZlbnQucnJ1bGUudW50aWwpKVxuXHRcdFx0OiB1bmRlZmluZWRcblxuXHRcdGNvbnN0IHJ1bGVPcHRpb25zOiBSUnVsZU9wdGlvbnMgPSB7XG5cdFx0XHQuLi5ldmVudC5ycnVsZSxcblx0XHRcdGR0c3RhcnQ6IGZsb2F0aW5nU3RhcnQsXG5cdFx0XHR1bnRpbDogZmxvYXRpbmdVbnRpbCxcblx0XHR9XG5cdFx0Y29uc3QgcnVsZSA9IG5ldyBSUnVsZShydWxlT3B0aW9ucylcblxuXHRcdGNvbnN0IHBhcmVudFVpZCA9IGdldEV2ZW50UGFyZW50VUlEKGV2ZW50KVxuXHRcdGNvbnN0IG92ZXJyaWRlcyA9IGN1cnJlbnRFdmVudHMuZmlsdGVyKFxuXHRcdFx0KGUpID0+IGUucmVjdXJyZW5jZUlkICYmIGdldEV2ZW50UGFyZW50VUlEKGUpID09PSBwYXJlbnRVaWRcblx0XHQpXG5cblx0XHQvLyBDYWxjdWxhdGUgZXZlbnQgZHVyYXRpb24gdG8gZXhwYW5kIHNlYXJjaCB3aW5kb3cgZm9yIGV2ZW50cyB0aGF0IHNwYW4gdGhlIHJhbmdlXG5cdFx0Y29uc3QgZXZlbnREdXJhdGlvbiA9IGV2ZW50LmVuZC5kaWZmKGV2ZW50LnN0YXJ0KVxuXG5cdFx0Ly8gRXhwYW5kIHNlYXJjaCB3aW5kb3cgYmFja3dhcmQgYnkgZXZlbnQgZHVyYXRpb24gdG8gY2F0Y2ggZXZlbnRzIHRoYXQgc3RhcnQgYmVmb3JlXG5cdFx0Ly8gdGhlIHJhbmdlIGJ1dCBzcGFuIGludG8gaXRcblx0XHRjb25zdCBleHBhbmRlZFN0YXJ0RGF0ZVRpbWUgPSB0b0Zsb2F0aW5nRGF0ZShcblx0XHRcdHN0YXJ0RGF0ZS5zdWJ0cmFjdChldmVudER1cmF0aW9uLCAnbWlsbGlzZWNvbmQnKVxuXHRcdClcblx0XHRjb25zdCBlbmREYXRlVGltZSA9IHRvRmxvYXRpbmdEYXRlKGVuZERhdGUpXG5cblx0XHQvLyBHZXQgYWxsIG9jY3VycmVuY2VzIGluIHRoZSBleHBhbmRlZCByYW5nZVxuXHRcdGNvbnN0IG9jY3VycmVuY2VzID0gcnVsZS5iZXR3ZWVuKGV4cGFuZGVkU3RhcnREYXRlVGltZSwgZW5kRGF0ZVRpbWUsIHRydWUpXG5cblx0XHQvLyBDb252ZXJ0IG9jY3VycmVuY2VzIHRvIENhbGVuZGFyRXZlbnQgaW5zdGFuY2VzXG5cdFx0Y29uc3QgcmVjdXJyaW5nRXZlbnRzOiBDYWxlbmRhckV2ZW50W10gPSBvY2N1cnJlbmNlc1xuXHRcdFx0Lm1hcCgob2NjdXJyZW5jZSwgaW5kZXgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb2NjdXJyZW5jZURhdGUgPSBmcm9tRmxvYXRpbmdEYXRlKG9jY3VycmVuY2UsIGV2ZW50LnN0YXJ0KVxuXHRcdFx0XHRjb25zdCBleGlzdGluZ092ZXJyaWRlID0gb3ZlcnJpZGVzLmZpbmQoKGUpID0+XG5cdFx0XHRcdFx0c2FmZURhdGUoZS5yZWN1cnJlbmNlSWQpPy5pc1NhbWUob2NjdXJyZW5jZURhdGUpXG5cdFx0XHRcdClcblxuXHRcdFx0XHQvLyBJZiB0aGVyZSdzIGFuIG92ZXJyaWRlLCB1c2UgaXRcblx0XHRcdFx0aWYgKGV4aXN0aW5nT3ZlcnJpZGUpIHtcblx0XHRcdFx0XHRyZXR1cm4geyAuLi5ldmVudCwgLi4uZXhpc3RpbmdPdmVycmlkZSB9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDYWxjdWxhdGUgdGhlIGR1cmF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIGV2ZW50XG5cdFx0XHRcdGNvbnN0IG9yaWdpbmFsRHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcblx0XHRcdFx0Y29uc3QgbmV3RW5kVGltZSA9IG9jY3VycmVuY2VEYXRlLmFkZChvcmlnaW5hbER1cmF0aW9uLCAnbWlsbGlzZWNvbmQnKVxuXHRcdFx0XHRjb25zdCByZWN1cnJpbmdFdmVudElkID0gYCR7ZXZlbnQuaWR9XyR7aW5kZXh9YFxuXHRcdFx0XHRjb25zdCBwYXJlbnRVSUQgPSBnZXRFdmVudFBhcmVudFVJRChldmVudClcblxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIHJlY3VycmluZyBldmVudCBpbnN0YW5jZVxuXHRcdFx0XHRjb25zdCByZWN1cnJpbmdFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0XHRpZDogcmVjdXJyaW5nRXZlbnRJZCxcblx0XHRcdFx0XHRzdGFydDogb2NjdXJyZW5jZURhdGUsXG5cdFx0XHRcdFx0ZW5kOiBuZXdFbmRUaW1lLFxuXHRcdFx0XHRcdHVpZDogcGFyZW50VUlELCAvLyBTYW1lIFVJRCBhcyBwYXJlbnQgZm9yIHByb3BlciBncm91cGluZ1xuXHRcdFx0XHRcdHJydWxlOiB1bmRlZmluZWQsIC8vIEluc3RhbmNlIGV2ZW50cyBkb24ndCBoYXZlIFJSVUxFXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVjdXJyaW5nRXZlbnRcblx0XHRcdH0pXG5cdFx0XHQuZmlsdGVyKChyZWN1cnJpbmdFdmVudCkgPT4ge1xuXHRcdFx0XHQvLyBGaWx0ZXIgb3V0IEVYREFURSBleGNsdXNpb25zXG5cdFx0XHRcdGNvbnN0IGhhc0V4ZGF0ZXMgPSBldmVudC5leGRhdGVzICYmIGV2ZW50LmV4ZGF0ZXMubGVuZ3RoID4gMFxuXHRcdFx0XHRpZiAoaGFzRXhkYXRlcykge1xuXHRcdFx0XHRcdGNvbnN0IGV2ZW50U3RhcnRJU08gPSByZWN1cnJpbmdFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG5cdFx0XHRcdFx0Y29uc3QgaXNFeGNsdWRlZCA9IGV2ZW50LmV4ZGF0ZXM/LmluY2x1ZGVzKGV2ZW50U3RhcnRJU08pXG5cdFx0XHRcdFx0aWYgKGlzRXhjbHVkZWQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEZpbHRlciB0byBvbmx5IGluY2x1ZGUgZXZlbnRzIHRoYXQgc3BhbiB0aHJvdWdoIHRoZSBvcmlnaW5hbCByZXF1ZXN0ZWQgZGF0ZSByYW5nZVxuXHRcdFx0XHQvLyBBbiBldmVudCBzcGFucyB0aGUgcmFuZ2UgaWY6IGV2ZW50X3N0YXJ0IDwgcmFuZ2VfZW5kIEFORCBldmVudF9lbmQgPiByYW5nZV9zdGFydFxuXHRcdFx0XHQvLyBVc2UgaXNTYW1lT3JCZWZvcmUvaXNTYW1lT3JBZnRlciB0byBpbmNsdWRlIGJvdW5kYXJ5IGNhc2VzXG5cdFx0XHRcdGNvbnN0IGV2ZW50U3BhbnNSYW5nZSA9XG5cdFx0XHRcdFx0cmVjdXJyaW5nRXZlbnQuc3RhcnQuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSkgJiZcblx0XHRcdFx0XHRyZWN1cnJpbmdFdmVudC5lbmQuaXNTYW1lT3JBZnRlcihzdGFydERhdGUpXG5cblx0XHRcdFx0cmV0dXJuIGV2ZW50U3BhbnNSYW5nZVxuXHRcdFx0fSlcblxuXHRcdHJldHVybiByZWN1cnJpbmdFdmVudHNcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBIYW5kbGUgaW52YWxpZCBSUlVMRSBvcHRpb25zXG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0YEludmFsaWQgUlJVTEUgb3B0aW9uczogJHtKU09OLnN0cmluZ2lmeShldmVudC5ycnVsZSl9LiBFcnJvcjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG5cdFx0KVxuXHR9XG59XG5cbmludGVyZmFjZSBVcGRhdGVSZWN1cnJpbmdFdmVudFByb3BzIHtcblx0dGFyZ2V0RXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHRjdXJyZW50RXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0c2NvcGU6ICd0aGlzJyB8ICdmb2xsb3dpbmcnIHwgJ2FsbCdcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVJlY3VycmluZ0V2ZW50ID0gKHtcblx0dGFyZ2V0RXZlbnQsXG5cdHVwZGF0ZXMsXG5cdGN1cnJlbnRFdmVudHMsXG5cdHNjb3BlLFxufTogVXBkYXRlUmVjdXJyaW5nRXZlbnRQcm9wcyk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdGNvbnN0IHVwZGF0ZWRFdmVudHMgPSBbLi4uY3VycmVudEV2ZW50c11cblxuXHQvLyBGaW5kIHRoZSBiYXNlIHJlY3VycmluZyBldmVudFxuXHRjb25zdCB0YXJnZXRVaWQgPSBnZXRFdmVudFBhcmVudFVJRCh0YXJnZXRFdmVudClcblx0Y29uc3QgYmFzZUV2ZW50SW5kZXggPSB1cGRhdGVkRXZlbnRzLmZpbmRJbmRleCgoZSkgPT4ge1xuXHRcdHJldHVybiBnZXRFdmVudFBhcmVudFVJRChlKSA9PT0gdGFyZ2V0VWlkICYmIGUucnJ1bGUgJiYgIWUucmVjdXJyZW5jZUlkXG5cdH0pXG5cblx0aWYgKGJhc2VFdmVudEluZGV4ID09PSAtMSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignQmFzZSByZWN1cnJpbmcgZXZlbnQgbm90IGZvdW5kJylcblx0fVxuXG5cdGNvbnN0IGJhc2VFdmVudCA9IHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdXG5cblx0c3dpdGNoIChzY29wZSkge1xuXHRcdGNhc2UgJ3RoaXMnOiB7XG5cdFx0XHQvLyBcIlRoaXMgZXZlbnQgb25seVwiIC0gQWRkIEVYREFURSB0byBiYXNlIGV2ZW50IGFuZCBjcmVhdGUgc3RhbmRhbG9uZSBtb2RpZmllZCBldmVudFxuXHRcdFx0Y29uc3QgdGFyZ2V0RXZlbnRTdGFydElTTyA9IHRhcmdldEV2ZW50LnN0YXJ0LnRvSVNPU3RyaW5nKClcblx0XHRcdGNvbnN0IGV4aXN0aW5nRXhkYXRlcyA9IGJhc2VFdmVudC5leGRhdGVzIHx8IFtdXG5cdFx0XHRjb25zdCB1cGRhdGVkRXhkYXRlcyA9IFsuLi5leGlzdGluZ0V4ZGF0ZXMsIHRhcmdldEV2ZW50U3RhcnRJU09dXG5cblx0XHRcdGNvbnN0IHVwZGF0ZWRCYXNlRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0ZXhkYXRlczogdXBkYXRlZEV4ZGF0ZXMsXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHVwZGF0ZWRCYXNlRXZlbnRcblxuXHRcdFx0Ly8gQ3JlYXRlIHN0YW5kYWxvbmUgbW9kaWZpZWQgZXZlbnQgd2l0aCByZWN1cnJlbmNlSWRcblx0XHRcdGNvbnN0IG1vZGlmaWVkRXZlbnRJZCA9IGAke3RhcmdldEV2ZW50LmlkfV9tb2RpZmllZF8ke0RhdGUubm93KCl9YFxuXHRcdFx0Y29uc3QgbW9kaWZpZWRFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciBUT0RPOiBmaXggdGhlIHR5cGVzXG5cdFx0XHRcdC4uLm9taXRLZXlzKHRhcmdldEV2ZW50LCBbJ3dpZHRoJywgJ2hlaWdodCcsICd0b3AnLCAnbGVmdCcsICdyaWdodCddKSxcblx0XHRcdFx0Li4udXBkYXRlcyxcblx0XHRcdFx0aWQ6IG1vZGlmaWVkRXZlbnRJZCxcblx0XHRcdFx0cmVjdXJyZW5jZUlkOiB0YXJnZXRFdmVudFN0YXJ0SVNPLCAvLyBUaGlzIG1hcmtzIGl0IGFzIGEgbW9kaWZpZWQgaW5zdGFuY2Vcblx0XHRcdFx0dWlkOiBnZXRFdmVudFBhcmVudFVJRChiYXNlRXZlbnQpLCAvLyBLZWVwIHNhbWUgVUlEIGFzIGJhc2UgZXZlbnQgKGlDYWxlbmRhciBzdGFuZGFyZClcblx0XHRcdFx0cnJ1bGU6IHVuZGVmaW5lZCwgLy8gU3RhbmRhbG9uZSBldmVudHMgZG9uJ3QgaGF2ZSBSUlVMRVxuXHRcdFx0fSBhcyBDYWxlbmRhckV2ZW50XG5cdFx0XHR1cGRhdGVkRXZlbnRzLnB1c2gobW9kaWZpZWRFdmVudClcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y2FzZSAnZm9sbG93aW5nJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGFuZCBmb2xsb3dpbmdcIiAtIFRlcm1pbmF0ZSBvcmlnaW5hbCBzZXJpZXMgYW5kIGNyZWF0ZSBuZXcgc2VyaWVzXG5cblx0XHRcdC8vIENhbGN1bGF0ZSB0aGUgdGVybWluYXRpb24gZGF0ZTogZGF5IGJlZm9yZSB0YXJnZXQgd2l0aCBlbmQgb2YgZGF5IHRpbWVcblx0XHRcdC8vIFRoaXMgZW5zdXJlcyB0aGUgbGFzdCBvY2N1cnJlbmNlIGJlZm9yZSB0YXJnZXQgaXMgaW5jbHVkZWQgaW4gdGhlIHRlcm1pbmF0ZWQgc2VyaWVzXG5cdFx0XHRjb25zdCBkYXlCZWZvcmVUYXJnZXQgPSB0YXJnZXRFdmVudC5zdGFydC5zdWJ0cmFjdCgxLCAnZGF5Jylcblx0XHRcdGNvbnN0IHRlcm1pbmF0aW9uRGF0ZSA9IGRheUJlZm9yZVRhcmdldC5lbmRPZignZGF5JykudG9EYXRlKClcblxuXHRcdFx0Ly8gVXBkYXRlIG9yaWdpbmFsIHNlcmllcyB3aXRoIFVOVElMIHRvIGVuZCBiZWZvcmUgdGFyZ2V0IGRhdGVcblx0XHRcdGNvbnN0IHRlcm1pbmF0ZWRFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHRycnVsZToge1xuXHRcdFx0XHRcdC4uLmJhc2VFdmVudC5ycnVsZSxcblx0XHRcdFx0XHR1bnRpbDogdGVybWluYXRpb25EYXRlLFxuXHRcdFx0XHR9IGFzIFJSdWxlT3B0aW9ucyxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdGVybWluYXRlZEV2ZW50XG5cblx0XHRcdC8vIENyZWF0ZSBuZXcgc2VyaWVzIHN0YXJ0aW5nIGZyb20gdGFyZ2V0IGRhdGVcblx0XHRcdGNvbnN0IG9yaWdpbmFsRHVyYXRpb24gPSBiYXNlRXZlbnQuZW5kLmRpZmYoYmFzZUV2ZW50LnN0YXJ0KVxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzU3RhcnRUaW1lID0gdXBkYXRlcy5zdGFydCB8fCB0YXJnZXRFdmVudC5zdGFydFxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzRW5kVGltZSA9XG5cdFx0XHRcdHVwZGF0ZXMuZW5kIHx8IG5ld1Nlcmllc1N0YXJ0VGltZS5hZGQob3JpZ2luYWxEdXJhdGlvbilcblx0XHRcdGNvbnN0IG5ld1Nlcmllc0lkID0gYCR7YmFzZUV2ZW50LmlkfV9mb2xsb3dpbmdgXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNVSUQgPSBgJHtuZXdTZXJpZXNJZH1AaWxhbXkuY2FsZW5kYXJgXG5cblx0XHRcdGNvbnN0IG5ld1Nlcmllc0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdC4uLnVwZGF0ZXMsXG5cdFx0XHRcdHJydWxlOiB7XG5cdFx0XHRcdFx0Li4uYmFzZUV2ZW50LnJydWxlLFxuXHRcdFx0XHRcdC4uLnVwZGF0ZXMucnJ1bGUsXG5cdFx0XHRcdFx0ZHRzdGFydDogbmV3U2VyaWVzU3RhcnRUaW1lLnRvRGF0ZSgpLFxuXHRcdFx0XHR9IGFzIFJSdWxlT3B0aW9ucyxcblx0XHRcdFx0aWQ6IG5ld1Nlcmllc0lkLFxuXHRcdFx0XHR1aWQ6IG5ld1Nlcmllc1VJRCwgLy8gTmV3IFVJRCBmb3IgbmV3IHNlcmllc1xuXHRcdFx0XHRzdGFydDogbmV3U2VyaWVzU3RhcnRUaW1lLFxuXHRcdFx0XHRlbmQ6IG5ld1Nlcmllc0VuZFRpbWUsXG5cdFx0XHRcdHJlY3VycmVuY2VJZDogdW5kZWZpbmVkLCAvLyBUaGlzIGlzIGEgbmV3IGJhc2UgZXZlbnQsIG5vdCBhbiBpbnN0YW5jZVxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50cy5wdXNoKG5ld1Nlcmllc0V2ZW50KVxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdhbGwnOiB7XG5cdFx0XHQvLyBcIkFsbCBldmVudHNcIiAtIFVwZGF0ZSB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcblx0XHRcdGNvbnN0IHVwZGF0ZWRCYXNlRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0Li4udXBkYXRlcyxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG5cdFx0XHQpXG5cdH1cblxuXHRyZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuXG5pbnRlcmZhY2UgRGVsZXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG5cdHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgZGVsZXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuXHR0YXJnZXRFdmVudCxcblx0Y3VycmVudEV2ZW50cyxcblx0c2NvcGUsXG59OiBEZWxldGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Y29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXG5cdC8vIEZpbmQgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50XG5cdGNvbnN0IHRhcmdldFVpZCA9IGdldEV2ZW50UGFyZW50VUlEKHRhcmdldEV2ZW50KVxuXHRjb25zdCBiYXNlRXZlbnRJbmRleCA9IHVwZGF0ZWRFdmVudHMuZmluZEluZGV4KChlKSA9PiB7XG5cdFx0cmV0dXJuIGdldEV2ZW50UGFyZW50VUlEKGUpID09PSB0YXJnZXRVaWQgJiYgZS5ycnVsZSAmJiAhZS5yZWN1cnJlbmNlSWRcblx0fSlcblxuXHRpZiAoYmFzZUV2ZW50SW5kZXggPT09IC0xKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdCYXNlIHJlY3VycmluZyBldmVudCBub3QgZm91bmQnKVxuXHR9XG5cblx0Y29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuXHRzd2l0Y2ggKHNjb3BlKSB7XG5cdFx0Y2FzZSAndGhpcyc6IHtcblx0XHRcdC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGV4Y2x1ZGUgdGhpcyBvY2N1cnJlbmNlXG5cdFx0XHRjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0Y29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cblx0XHRcdGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuXHRcdFx0Y29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHsgLi4uYmFzZUV2ZW50LCBleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyB9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHVwZGF0ZWRCYXNlRXZlbnRcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y2FzZSAnZm9sbG93aW5nJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGFuZCBmb2xsb3dpbmdcIiAtIFRlcm1pbmF0ZSBzZXJpZXMgd2l0aCBVTlRJTCBiZWZvcmUgdGFyZ2V0IGRhdGVcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSB0ZXJtaW5hdGlvbiBkYXRlOiBkYXkgYmVmb3JlIHRhcmdldCB3aXRoIGVuZCBvZiBkYXkgdGltZVxuXHRcdFx0Ly8gVGhpcyBlbnN1cmVzIHRoZSBsYXN0IG9jY3VycmVuY2UgYmVmb3JlIHRhcmdldCBpcyBpbmNsdWRlZCBpbiB0aGUgdGVybWluYXRlZCBzZXJpZXNcblx0XHRcdGNvbnN0IGRheUJlZm9yZVRhcmdldCA9IHRhcmdldEV2ZW50LnN0YXJ0LnN1YnRyYWN0KDEsICdkYXknKVxuXHRcdFx0Y29uc3QgdGVybWluYXRpb25EYXRlID0gZGF5QmVmb3JlVGFyZ2V0LmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXG5cdFx0XHRjb25zdCB0ZXJtaW5hdGVkRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0cnJ1bGU6IHtcblx0XHRcdFx0XHQuLi5iYXNlRXZlbnQucnJ1bGUsXG5cdFx0XHRcdFx0dW50aWw6IHRlcm1pbmF0aW9uRGF0ZSxcblx0XHRcdFx0fSBhcyBSUnVsZU9wdGlvbnMsXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHRlcm1pbmF0ZWRFdmVudFxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdhbGwnOiB7XG5cdFx0XHQvLyBcIkFsbCBldmVudHNcIiAtIFJlbW92ZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXNcblx0XHRcdGNvbnN0IHRhcmdldFVpZCA9IGdldEV2ZW50UGFyZW50VUlEKHRhcmdldEV2ZW50KVxuXHRcdFx0Y29uc3QgZXZlbnRzV2l0aG91dFRhcmdldFNlcmllcyA9IHVwZGF0ZWRFdmVudHMuZmlsdGVyKFxuXHRcdFx0XHQoZSkgPT4gZ2V0RXZlbnRQYXJlbnRVSUQoZSkgIT09IHRhcmdldFVpZFxuXHRcdFx0KVxuXHRcdFx0cmV0dXJuIGV2ZW50c1dpdGhvdXRUYXJnZXRTZXJpZXNcblx0XHR9XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG5cdFx0XHQpXG5cdH1cblxuXHRyZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0VHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbnMgPSB7XG5cdC8vIENvbW1vbiBhY3Rpb25zXG5cdHRvZGF5OiAnVG9kYXknLFxuXHRjcmVhdGU6ICdDcmVhdGUnLFxuXHRuZXc6ICdOZXcnLFxuXHR1cGRhdGU6ICdVcGRhdGUnLFxuXHRkZWxldGU6ICdEZWxldGUnLFxuXHRjYW5jZWw6ICdDYW5jZWwnLFxuXHRleHBvcnQ6ICdFeHBvcnQnLFxuXG5cdC8vIEV2ZW50IHJlbGF0ZWRcblx0ZXZlbnQ6ICdFdmVudCcsXG5cdGV2ZW50czogJ0V2ZW50cycsXG5cdG5ld0V2ZW50OiAnTmV3IEV2ZW50Jyxcblx0dGl0bGU6ICdUaXRsZScsXG5cdGRlc2NyaXB0aW9uOiAnRGVzY3JpcHRpb24nLFxuXHRsb2NhdGlvbjogJ0xvY2F0aW9uJyxcblx0YWxsRGF5OiAnQWxsIGRheScsXG5cdHN0YXJ0RGF0ZTogJ1N0YXJ0IERhdGUnLFxuXHRlbmREYXRlOiAnRW5kIERhdGUnLFxuXHRzdGFydFRpbWU6ICdTdGFydCBUaW1lJyxcblx0ZW5kVGltZTogJ0VuZCBUaW1lJyxcblx0Y29sb3I6ICdDb2xvcicsXG5cblx0Ly8gRXZlbnQgZm9ybVxuXHRjcmVhdGVFdmVudDogJ0NyZWF0ZSBFdmVudCcsXG5cdGVkaXRFdmVudDogJ0VkaXQgRXZlbnQnLFxuXHRhZGROZXdFdmVudDogJ0FkZCBhIG5ldyBldmVudCB0byB5b3VyIGNhbGVuZGFyJyxcblx0ZWRpdEV2ZW50RGV0YWlsczogJ0VkaXQgeW91ciBldmVudCBkZXRhaWxzJyxcblx0ZXZlbnRUaXRsZVBsYWNlaG9sZGVyOiAnRXZlbnQgdGl0bGUnLFxuXHRldmVudERlc2NyaXB0aW9uUGxhY2Vob2xkZXI6ICdFdmVudCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpJyxcblx0ZXZlbnRMb2NhdGlvblBsYWNlaG9sZGVyOiAnRXZlbnQgbG9jYXRpb24gKG9wdGlvbmFsKScsXG5cblx0Ly8gUmVjdXJyZW5jZVxuXHRyZXBlYXQ6ICdSZXBlYXQnLFxuXHRyZXBlYXRzOiAnUmVwZWF0cycsXG5cdGN1c3RvbVJlY3VycmVuY2U6ICdDdXN0b20gcmVjdXJyZW5jZScsXG5cdGRhaWx5OiAnRGFpbHknLFxuXHR3ZWVrbHk6ICdXZWVrbHknLFxuXHRtb250aGx5OiAnTW9udGhseScsXG5cdHllYXJseTogJ1llYXJseScsXG5cdGludGVydmFsOiAnSW50ZXJ2YWwnLFxuXHRyZXBlYXRPbjogJ1JlcGVhdCBvbicsXG5cdG5ldmVyOiAnTmV2ZXInLFxuXHRjb3VudDogJ0NvdW50Jyxcblx0ZXZlcnk6ICdFdmVyeScsXG5cdGVuZHM6ICdFbmRzJyxcblx0YWZ0ZXI6ICdBZnRlcicsXG5cdG9jY3VycmVuY2VzOiAnb2NjdXJyZW5jZXMnLFxuXHRvbjogJ09uJyxcblxuXHQvLyBSZWN1cnJlbmNlIGVkaXQgZGlhbG9nXG5cdGVkaXRSZWN1cnJpbmdFdmVudDogJ0VkaXQgcmVjdXJyaW5nIGV2ZW50Jyxcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6ICdEZWxldGUgcmVjdXJyaW5nIGV2ZW50Jyxcblx0ZWRpdFJlY3VycmluZ0V2ZW50UXVlc3Rpb246XG5cdFx0J2lzIGEgcmVjdXJyaW5nIGV2ZW50LiBIb3cgd291bGQgeW91IGxpa2UgdG8gZWRpdCBpdD8nLFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uOlxuXHRcdCdpcyBhIHJlY3VycmluZyBldmVudC4gSG93IHdvdWxkIHlvdSBsaWtlIHRvIGRlbGV0ZSBpdD8nLFxuXHR0aGlzRXZlbnQ6ICdUaGlzIGV2ZW50Jyxcblx0dGhpc0V2ZW50RGVzY3JpcHRpb246ICdPbmx5IGNoYW5nZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHR0aGlzQW5kRm9sbG93aW5nRXZlbnRzOiAnVGhpcyBhbmQgZm9sbG93aW5nIGV2ZW50cycsXG5cdHRoaXNBbmRGb2xsb3dpbmdFdmVudHNEZXNjcmlwdGlvbjogJ0VkaXQgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG5cdGFsbEV2ZW50czogJ0FsbCBldmVudHMnLFxuXHRhbGxFdmVudHNEZXNjcmlwdGlvbjogJ0VkaXQgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblx0b25seUNoYW5nZVRoaXM6ICdPbmx5IGNoYW5nZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHRjaGFuZ2VUaGlzQW5kRnV0dXJlOiAnQ2hhbmdlIHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRjaGFuZ2VFbnRpcmVTZXJpZXM6ICdDaGFuZ2UgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblx0b25seURlbGV0ZVRoaXM6ICdPbmx5IGRlbGV0ZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHRkZWxldGVUaGlzQW5kRnV0dXJlOiAnRGVsZXRlIHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRkZWxldGVFbnRpcmVTZXJpZXM6ICdEZWxldGUgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblxuXHQvLyBWaWV3IHR5cGVzXG5cdG1vbnRoOiAnTW9udGgnLFxuXHR3ZWVrOiAnV2VlaycsXG5cdGRheTogJ0RheScsXG5cdHllYXI6ICdZZWFyJyxcblx0bW9yZTogJ21vcmUnLFxuXG5cdC8vIFJlc291cmNlIGNhbGVuZGFyXG5cdHJlc291cmNlczogJ1Jlc291cmNlcycsXG5cdHJlc291cmNlOiAnUmVzb3VyY2UnLFxuXHR0aW1lOiAnVGltZScsXG5cdGRhdGU6ICdEYXRlJyxcblx0bm9SZXNvdXJjZXNWaXNpYmxlOiAnTm8gcmVzb3VyY2VzIHZpc2libGUnLFxuXHRhZGRSZXNvdXJjZXNPclNob3dFeGlzdGluZzogJ0FkZCByZXNvdXJjZXMgb3Igc2hvdyBleGlzdGluZyBvbmVzJyxcblxuXHQvLyBEYXlzIG9mIHdlZWtcblx0c3VuZGF5OiAnU3VuZGF5Jyxcblx0bW9uZGF5OiAnTW9uZGF5Jyxcblx0dHVlc2RheTogJ1R1ZXNkYXknLFxuXHR3ZWRuZXNkYXk6ICdXZWRuZXNkYXknLFxuXHR0aHVyc2RheTogJ1RodXJzZGF5Jyxcblx0ZnJpZGF5OiAnRnJpZGF5Jyxcblx0c2F0dXJkYXk6ICdTYXR1cmRheScsXG5cblx0Ly8gRGF5cyBzaG9ydFxuXHRzdW46ICdTdW4nLFxuXHRtb246ICdNb24nLFxuXHR0dWU6ICdUdWUnLFxuXHR3ZWQ6ICdXZWQnLFxuXHR0aHU6ICdUaHUnLFxuXHRmcmk6ICdGcmknLFxuXHRzYXQ6ICdTYXQnLFxuXG5cdC8vIE1vbnRoc1xuXHRqYW51YXJ5OiAnSmFudWFyeScsXG5cdGZlYnJ1YXJ5OiAnRmVicnVhcnknLFxuXHRtYXJjaDogJ01hcmNoJyxcblx0YXByaWw6ICdBcHJpbCcsXG5cdG1heTogJ01heScsXG5cdGp1bmU6ICdKdW5lJyxcblx0anVseTogJ0p1bHknLFxuXHRhdWd1c3Q6ICdBdWd1c3QnLFxuXHRzZXB0ZW1iZXI6ICdTZXB0ZW1iZXInLFxuXHRvY3RvYmVyOiAnT2N0b2JlcicsXG5cdG5vdmVtYmVyOiAnTm92ZW1iZXInLFxuXHRkZWNlbWJlcjogJ0RlY2VtYmVyJyxcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSB3ZWVrIGRheXMgZm9yIGEgZ2l2ZW4gZGF0ZSBhbmQgZmlyc3QgZGF5IG9mIHdlZWsgc2V0dGluZy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCB0aGUgY3VycmVudCBkYXRlIGlzIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgd2VlayxcbiAqIGV2ZW4gd2hlbiB0aGUgZmlyc3QgZGF5IG9mIHdlZWsgaXMgc2V0IHRvIGEgZGF5IGFmdGVyIHRoZSBjdXJyZW50IGRhdGUuXG4gKlxuICogQHBhcmFtIGN1cnJlbnREYXRlIC0gVGhlIHJlZmVyZW5jZSBkYXRlIGZvciBjYWxjdWxhdGluZyB0aGUgd2Vla1xuICogQHBhcmFtIGZpcnN0RGF5T2ZXZWVrIC0gVGhlIGRheSBudW1iZXIgKDAtNikgcmVwcmVzZW50aW5nIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgKDAgPSBTdW5kYXksIDEgPSBNb25kYXksIGV0Yy4pXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiA3IGRheWpzIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSB3ZWVrIGRheXMsIHN0YXJ0aW5nIGZyb20gZmlyc3REYXlPZldlZWtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gR2V0IHdlZWsgc3RhcnRpbmcgZnJvbSBNb25kYXkgZm9yIGN1cnJlbnQgZGF0ZVxuICogY29uc3Qgd2Vla0RheXMgPSBnZXRXZWVrRGF5cyhkYXlqcygnMjAyNS0xMC0xMycpLCAxKVxuICogLy8gUmV0dXJuczogW01vbiBPY3QgMTMsIFR1ZSBPY3QgMTQsIC4uLiwgU3VuIE9jdCAxOV1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gR2V0IHdlZWsgc3RhcnRpbmcgZnJvbSBXZWRuZXNkYXkgd2hlbiBjdXJyZW50IGRhdGUgaXMgTW9uZGF5XG4gKiBjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGRheWpzKCcyMDI1LTEwLTEzJyksIDMpXG4gKiAvLyBSZXR1cm5zOiBbV2VkIE9jdCA4LCBUaHUgT2N0IDksIC4uLiwgVHVlIE9jdCAxNF0gKGluY2x1ZGVzIE1vbmRheSBPY3QgMTMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXZWVrRGF5cyhcblx0Y3VycmVudERhdGU6IERheWpzLFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG4pOiBEYXlqc1tdIHtcblx0Y29uc3Qgc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGUgPSBjdXJyZW50RGF0ZVxuXHRcdC5zdGFydE9mKCd3ZWVrJylcblx0XHQuZGF5KGZpcnN0RGF5T2ZXZWVrKVxuXG5cdGNvbnN0IGFkanVzdGVkU3RhcnRPZldlZWsgPSBjdXJyZW50RGF0ZS5pc0JlZm9yZShzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZSlcblx0XHQ/IHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlLnN1YnRyYWN0KDEsICd3ZWVrJylcblx0XHQ6IHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlXG5cblx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDcgfSwgKF8sIGRheUluZGV4KSA9PlxuXHRcdGFkanVzdGVkU3RhcnRPZldlZWsuYWRkKGRheUluZGV4LCAnZGF5Jylcblx0KVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyA2IHdlZWtzIG9mIGRheXMgZm9yIGEgbW9udGggY2FsZW5kYXIgdmlldy5cbiAqIEFsd2F5cyByZXR1cm5zIDQyIGRheXMgKDYgd2Vla3Mgw5cgNyBkYXlzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1vbnRoV2Vla3MoXG5cdG1vbnRoRGF0ZTogRGF5anMsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbik6IERheWpzW11bXSB7XG5cdGNvbnN0IGZpcnN0V2VlayA9IGdldFdlZWtEYXlzKG1vbnRoRGF0ZS5zdGFydE9mKCdtb250aCcpLCBmaXJzdERheU9mV2VlaylcblxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogNiB9LCAoXywgd2Vla0luZGV4KSA9PiB7XG5cdFx0Y29uc3Qgd2Vla1N0YXJ0ID0gZmlyc3RXZWVrWzBdLmFkZCh3ZWVrSW5kZXgsICd3ZWVrJylcblx0XHRyZXR1cm4gZ2V0V2Vla0RheXMod2Vla1N0YXJ0LCBmaXJzdERheU9mV2Vlaylcblx0fSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vbnRoRGF5cyhtb250aERhdGU6IERheWpzKTogRGF5anNbXSB7XG5cdGNvbnN0IGRheXNJbk1vbnRoID0gbW9udGhEYXRlLmRheXNJbk1vbnRoKClcblx0Y29uc3Qgc3RhcnRPZk1vbnRoID0gbW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJylcblx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IGRheXNJbk1vbnRoIH0sIChfLCBpKSA9PlxuXHRcdHN0YXJ0T2ZNb250aC5hZGQoaSwgJ2RheScpXG5cdClcbn1cblxuaW50ZXJmYWNlIEdldERheUhvdXJzT3B0aW9ucyB7XG5cdHJlZmVyZW5jZURhdGU/OiBEYXlqc1xuXHRsZW5ndGg/OiBudW1iZXJcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYW4gYXJyYXkgb2YgMjQgZGF5anMgb2JqZWN0cyByZXByZXNlbnRpbmcgaG91cmx5IHNsb3RzIGZvciBhIGRheS5cbiAqIFVzZXMgLmhvdXIoaSkgc28gZWFjaCByb3cgbWFwcyB0byBcInRoZSBob3VyIGxhYmVsZWQgaVwiIOKAlCBrZWVwaW5nIGdyaWQgcm93c1xuICogYWxpZ25lZCBhY3Jvc3MgY29sdW1ucyBpbiB3ZWVrIHZpZXdzLiBPbiBEU1Qgc3ByaW5nLWZvcndhcmQsIC5ob3VyKDIpIHJldHVybnNcbiAqIDMgQU0gKHRoZSBub24tZXhpc3RlbnQgaG91ciBpcyBjb2xsYXBzZWQpLCBidXQgdGhlIGdyaWQga2V5IGZpeCAoZGF5SW5kZXgpXG4gKiBhbmQgcGVyLWRheSBnZW5lcmF0aW9uIGluIHZpZXdzIGhhbmRsZSB0aGlzIGNvcnJlY3RseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERheUhvdXJzKHtcblx0cmVmZXJlbmNlRGF0ZSA9IGRheWpzKCksXG5cdGxlbmd0aCA9IDI0LFxufTogR2V0RGF5SG91cnNPcHRpb25zID0ge30pOiBEYXlqc1tdIHtcblx0Y29uc3Qgc3RhcnRPZkRheSA9IHJlZmVyZW5jZURhdGUuc3RhcnRPZignZGF5Jylcblx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGggfSwgKF8sIGkpID0+XG5cdFx0c3RhcnRPZkRheS5ob3VyKGkpLm1pbnV0ZSgwKS5zZWNvbmQoMCkubWlsbGlzZWNvbmQoMClcblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuXG5leHBvcnQgY29uc3QgR0FQX0JFVFdFRU5fRUxFTUVOVFMgPSAxIC8vIHB4IChnYXAtMSlcbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX0hFSUdIVCA9IDI0IC8vIHB4IChoLTYpXG5leHBvcnQgY29uc3QgRVZFTlRfQkFSX0hFSUdIVCA9IDI0IC8vIHB4IChoLVsyNHB4XSlcbmV4cG9ydCBjb25zdCBEQVlfTUFYX0VWRU5UU19ERUZBVUxUID0gNCAvLyBEZWZhdWx0IG1heCBldmVudHMgcGVyIGRheVxuZXhwb3J0IGNvbnN0IERJU0FCTEVEX0NFTExfQ0xBU1NOQU1FID1cblx0J2JnLXNlY29uZGFyeSB0ZXh0LW11dGVkLWZvcmVncm91bmQgcG9pbnRlci1ldmVudHMtbm9uZSdcblxuZXhwb3J0IGNvbnN0IFdFRUtfREFZU19OVU1CRVJfTUFQOiBSZWNvcmQ8V2Vla0RheXMsIG51bWJlcj4gPSB7XG5cdHN1bmRheTogMCxcblx0bW9uZGF5OiAxLFxuXHR0dWVzZGF5OiAyLFxuXHR3ZWRuZXNkYXk6IDMsXG5cdHRodXJzZGF5OiA0LFxuXHRmcmlkYXk6IDUsXG5cdHNhdHVyZGF5OiA2LFxufVxuXG5leHBvcnQgY29uc3QgREFZX05VTUJFUl9UT19XRUVLX0RBWVM6IFJlY29yZDxudW1iZXIsIFdlZWtEYXlzPiA9IHtcblx0MDogJ3N1bmRheScsXG5cdDE6ICdtb25kYXknLFxuXHQyOiAndHVlc2RheScsXG5cdDM6ICd3ZWRuZXNkYXknLFxuXHQ0OiAndGh1cnNkYXknLFxuXHQ1OiAnZnJpZGF5Jyxcblx0NjogJ3NhdHVyZGF5Jyxcbn1cbiIsCiAgICAiaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ29udGVudCxcblx0RGlhbG9nRGVzY3JpcHRpb24sXG5cdERpYWxvZ0Zvb3Rlcixcblx0RGlhbG9nSGVhZGVyLFxuXHREaWFsb2dUaXRsZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RpYWxvZydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRTY29wZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuaW50ZXJmYWNlIFJlY3VycmVuY2VFZGl0RGlhbG9nUHJvcHMge1xuXHRpc09wZW46IGJvb2xlYW5cblx0b25DbG9zZTogKCkgPT4gdm9pZFxuXHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4gdm9pZFxuXHRvcGVyYXRpb25UeXBlOiAnZWRpdCcgfCAnZGVsZXRlJ1xuXHRldmVudFRpdGxlOiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlY3VycmVuY2VFZGl0RGlhbG9nKHtcblx0aXNPcGVuLFxuXHRvbkNsb3NlLFxuXHRvbkNvbmZpcm0sXG5cdG9wZXJhdGlvblR5cGUsXG5cdGV2ZW50VGl0bGUsXG59OiBSZWN1cnJlbmNlRWRpdERpYWxvZ1Byb3BzKSB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7IHQ6IGNvbnRleHQudCB9KSlcblxuXHRjb25zdCBoYW5kbGVTY29wZVNlbGVjdCA9IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdG9uQ29uZmlybShzY29wZSlcblx0XHRvbkNsb3NlKClcblx0fVxuXG5cdGNvbnN0IGlzRWRpdCA9IG9wZXJhdGlvblR5cGUgPT09ICdlZGl0J1xuXG5cdHJldHVybiAoXG5cdFx0PERpYWxvZyBvbk9wZW5DaGFuZ2U9e29uQ2xvc2V9IG9wZW49e2lzT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtdy1tZFwiPlxuXHRcdFx0XHQ8RGlhbG9nSGVhZGVyPlxuXHRcdFx0XHRcdDxEaWFsb2dUaXRsZT5cblx0XHRcdFx0XHRcdHtpc0VkaXQgPyB0KCdlZGl0UmVjdXJyaW5nRXZlbnQnKSA6IHQoJ2RlbGV0ZVJlY3VycmluZ0V2ZW50Jyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dUaXRsZT5cblx0XHRcdFx0XHQ8RGlhbG9nRGVzY3JpcHRpb24+XG5cdFx0XHRcdFx0XHRcIntldmVudFRpdGxlfVwieycgJ31cblx0XHRcdFx0XHRcdHtpc0VkaXRcblx0XHRcdFx0XHRcdFx0PyB0KCdlZGl0UmVjdXJyaW5nRXZlbnRRdWVzdGlvbicpXG5cdFx0XHRcdFx0XHRcdDogdCgnZGVsZXRlUmVjdXJyaW5nRXZlbnRRdWVzdGlvbicpfVxuXHRcdFx0XHRcdDwvRGlhbG9nRGVzY3JpcHRpb24+XG5cdFx0XHRcdDwvRGlhbG9nSGVhZGVyPlxuXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0zXCI+XG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIGp1c3RpZnktc3RhcnQgaC1hdXRvIHAtNFwiXG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTY29wZVNlbGVjdCgndGhpcycpfVxuXHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgndGhpc0V2ZW50Jyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0XHR7aXNFZGl0ID8gdCgnb25seUNoYW5nZVRoaXMnKSA6IHQoJ29ubHlEZWxldGVUaGlzJyl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwganVzdGlmeS1zdGFydCBoLWF1dG8gcC00XCJcblx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNjb3BlU2VsZWN0KCdmb2xsb3dpbmcnKX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbGVmdFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e3QoJ3RoaXNBbmRGb2xsb3dpbmdFdmVudHMnKX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdHtpc0VkaXQgPyB0KCdjaGFuZ2VUaGlzQW5kRnV0dXJlJykgOiB0KCdkZWxldGVUaGlzQW5kRnV0dXJlJyl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwganVzdGlmeS1zdGFydCBoLWF1dG8gcC00XCJcblx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNjb3BlU2VsZWN0KCdhbGwnKX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbGVmdFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e3QoJ2FsbEV2ZW50cycpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0e2lzRWRpdCA/IHQoJ2NoYW5nZUVudGlyZVNlcmllcycpIDogdCgnZGVsZXRlRW50aXJlU2VyaWVzJyl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxEaWFsb2dGb290ZXI+XG5cdFx0XHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvbkNsb3NlfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHRcdFx0e3QoJ2NhbmNlbCcpfVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8L0RpYWxvZ0Zvb3Rlcj5cblx0XHRcdDwvRGlhbG9nQ29udGVudD5cblx0XHQ8L0RpYWxvZz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IERyYWdFbmRFdmVudCB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi4vdHlwZXMnXG5cbmludGVyZmFjZSBEcm9wQ2VsbERhdGEge1xuXHR0eXBlPzogc3RyaW5nXG5cdGRhdGU/OiBzdHJpbmdcblx0aG91cj86IG51bWJlclxuXHRtaW51dGU/OiBudW1iZXJcblx0cmVzb3VyY2VJZD86IHN0cmluZ1xuXHRhbGxEYXk/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBnZXRVcGRhdGVkRXZlbnQgPSAoXG5cdGV2ZW50OiBEcmFnRW5kRXZlbnQsXG5cdGFjdGl2ZUV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuKSA9PiB7XG5cdGNvbnN0IHsgYWN0aXZlLCBvdmVyIH0gPSBldmVudFxuXG5cdGlmICghYWN0aXZlIHx8ICFvdmVyIHx8ICFhY3RpdmVFdmVudCkge1xuXHRcdHJldHVybiBudWxsXG5cdH1cblxuXHRjb25zdCBkYXRhID0gKG92ZXIuZGF0YS5jdXJyZW50IHx8IHt9KSBhcyBEcm9wQ2VsbERhdGFcblx0Y29uc3QgaXNUaW1lQ2VsbCA9IGRhdGEudHlwZSA9PT0gJ3RpbWUtY2VsbCdcblx0Y29uc3QgeyByZXNvdXJjZUlkLCBhbGxEYXkgfSA9IGRhdGFcblx0bGV0IG5ld1N0YXJ0OiBEYXlqc1xuXG5cdGlmIChpc1RpbWVDZWxsKSB7XG5cdFx0Y29uc3QgeyBkYXRlLCBob3VyID0gMCwgbWludXRlID0gMCB9ID0gZGF0YVxuXG5cdFx0Ly8gQ3JlYXRlIG5ldyBzdGFydCB0aW1lIGJhc2VkIG9uIHRoZSBkcm9wIHRhcmdldFxuXHRcdG5ld1N0YXJ0ID0gZGF5anMoZGF0ZSkuaG91cihob3VyKS5taW51dGUobWludXRlKVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IHsgZGF0ZSB9ID0gZGF0YVxuXG5cdFx0bmV3U3RhcnQgPSBkYXlqcyhkYXRlKVxuXHR9XG5cblx0Y29uc3QgZXZlbnREdXJhdGlvbiA9IGFjdGl2ZUV2ZW50LmVuZC5kaWZmKGFjdGl2ZUV2ZW50LnN0YXJ0LCAnc2Vjb25kJylcblxuXHQvLyBDcmVhdGUgbmV3IGVuZCB0aW1lIGJ5IGFkZGluZyB0aGUgb3JpZ2luYWwgZHVyYXRpb25cblx0bGV0IG5ld0VuZCA9IG5ld1N0YXJ0LmFkZChldmVudER1cmF0aW9uLCAnc2Vjb25kJylcblxuXHRpZiAobmV3RW5kLmlzU2FtZShuZXdFbmQuc3RhcnRPZignZGF5JykpKSB7XG5cdFx0Ly8gSWYgdGhlIG5ldyBlbmQgdGltZSBpcyBhdCBtaWRuaWdodCwgc2V0IGl0IHRvIDI0IGhvdXJzIG9mIHBhcnRpYWwgZGF5XG5cdFx0bmV3RW5kID0gbmV3RW5kLnN1YnRyYWN0KDEsICdkYXknKS5lbmRPZignZGF5Jylcblx0fVxuXG5cdC8vIFVwZGF0ZSB0aGUgZXZlbnQgd2l0aCBuZXcgdGltZXMgYW5kIHJlc291cmNlIGlmIGNoYW5nZWRcblx0Y29uc3QgdXBkYXRlcyA9IHtcblx0XHRzdGFydDogbmV3U3RhcnQsXG5cdFx0ZW5kOiBuZXdFbmQsXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRhbGxEYXk6IGlzVGltZUNlbGwgPyBmYWxzZSA6IChhbGxEYXkgPz8gYWN0aXZlRXZlbnQuYWxsRGF5KSxcblx0fVxuXHRyZXR1cm4geyBhY3RpdmVFdmVudCwgdXBkYXRlcyB9XG59XG4iLAogICAgImltcG9ydCB7IERyYWdPdmVybGF5IH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7IHNuYXBDZW50ZXJUb0N1cnNvciB9IGZyb20gJ0BkbmQta2l0L21vZGlmaWVycydcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICcuLi90eXBlcydcblxuaW50ZXJmYWNlIEV2ZW50RHJhZ092ZXJsYXlQcm9wcyB7XG5cdHJlZjogUmVhY3QuUmVmPHsgc2V0QWN0aXZlRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZCB9PlxufVxuXG5leHBvcnQgY29uc3QgRXZlbnREcmFnT3ZlcmxheTogUmVhY3QuRkM8RXZlbnREcmFnT3ZlcmxheVByb3BzPiA9ICh7IHJlZiB9KSA9PiB7XG5cdGNvbnN0IFthY3RpdmVFdmVudCwgc2V0QWN0aXZlRXZlbnRdID0gdXNlU3RhdGU8Q2FsZW5kYXJFdmVudCB8IG51bGw+KG51bGwpXG5cblx0dXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG5cdFx0c2V0QWN0aXZlRXZlbnQsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PERyYWdPdmVybGF5IG1vZGlmaWVycz17W3NuYXBDZW50ZXJUb0N1cnNvcl19PlxuXHRcdFx0e2FjdGl2ZUV2ZW50ICYmIChcblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnY3Vyc29yLWdyYWIgdHJ1bmNhdGUgcm91bmRlZCBiZy1hbWJlci0yMDAgcC0yIHRleHQtWzEwcHhdIHNoYWRvdy1sZyBzbTp0ZXh0LXhzIHctMjAnLFxuXHRcdFx0XHRcdFx0YWN0aXZlRXZlbnQuYmFja2dyb3VuZENvbG9yIHx8ICdiZy1ibHVlLTUwMCcsXG5cdFx0XHRcdFx0XHRhY3RpdmVFdmVudC5jb2xvciB8fCAndGV4dC13aGl0ZSdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e2FjdGl2ZUV2ZW50Py50aXRsZX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpfVxuXHRcdDwvRHJhZ092ZXJsYXk+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgQ2hlY2tib3ggfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2hlY2tib3gnXG5pbXBvcnQgeyBEYXRlUGlja2VyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyJ1xuaW1wb3J0IHsgRGlhbG9nRm9vdGVyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RpYWxvZydcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2lucHV0J1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvbGFiZWwnXG5pbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgVGltZVBpY2tlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS90aW1lLXBpY2tlcidcbmltcG9ydCB7IGlzQnVzaW5lc3NEYXkgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2J1c2luZXNzLWhvdXJzJ1xuaW1wb3J0IHtcblx0YnVpbGREYXRlVGltZSxcblx0YnVpbGRFbmREYXRlVGltZSxcblx0Z2V0VGltZUNvbnN0cmFpbnRzLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2V2ZW50LWZvcm0tdXRpbHMnXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdERpYWxvZyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cnXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdG9yIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0b3IvcmVjdXJyZW5jZS1lZGl0b3InXG5pbXBvcnQgeyB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvaG9va3MvdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zJ1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyBpc1JlY3VycmluZ0V2ZW50IH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IENPTE9SX09QVElPTlMgPSBbXG5cdHtcblx0XHR2YWx1ZTogYGJnLWJsdWUtMTAwIHRleHQtYmx1ZS04MDBgLFxuXHRcdGxhYmVsOiAnQmx1ZScsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLWdyZWVuLTEwMCB0ZXh0LWdyZWVuLTgwMGAsXG5cdFx0bGFiZWw6ICdHcmVlbicsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXB1cnBsZS0xMDAgdGV4dC1wdXJwbGUtODAwYCxcblx0XHRsYWJlbDogJ1B1cnBsZScsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXJlZC0xMDAgdGV4dC1yZWQtODAwYCxcblx0XHRsYWJlbDogJ1JlZCcsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXllbGxvdy0xMDAgdGV4dC15ZWxsb3ctODAwYCxcblx0XHRsYWJlbDogJ1llbGxvdycsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXBpbmstMTAwIHRleHQtcGluay04MDBgLFxuXHRcdGxhYmVsOiAnUGluaycsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLWluZGlnby0xMDAgdGV4dC1pbmRpZ28tODAwYCxcblx0XHRsYWJlbDogJ0luZGlnbycsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLWFtYmVyLTEwMCB0ZXh0LWFtYmVyLTgwMGAsXG5cdFx0bGFiZWw6ICdBbWJlcicsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLWVtZXJhbGQtMTAwIHRleHQtZW1lcmFsZC04MDBgLFxuXHRcdGxhYmVsOiAnRW1lcmFsZCcsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXNreS0xMDAgdGV4dC1za3ktODAwYCxcblx0XHRsYWJlbDogJ1NreScsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXZpb2xldC0xMDAgdGV4dC12aW9sZXQtODAwYCxcblx0XHRsYWJlbDogJ1Zpb2xldCcsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXJvc2UtMTAwIHRleHQtcm9zZS04MDBgLFxuXHRcdGxhYmVsOiAnUm9zZScsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXRlYWwtMTAwIHRleHQtdGVhbC04MDBgLFxuXHRcdGxhYmVsOiAnVGVhbCcsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLW9yYW5nZS0xMDAgdGV4dC1vcmFuZ2UtODAwYCxcblx0XHRsYWJlbDogJ09yYW5nZScsXG5cdH0sXG5dXG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRGb3JtUHJvcHMge1xuXHRvcGVuPzogYm9vbGVhblxuXHRzZWxlY3RlZEV2ZW50PzogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0b25BZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25VcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25EZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DbG9zZTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgRXZlbnRGb3JtOiBSZWFjdC5GQzxFdmVudEZvcm1Qcm9wcz4gPSAoe1xuXHRzZWxlY3RlZEV2ZW50LFxuXHRvbkNsb3NlLFxuXHRvblVwZGF0ZSxcblx0b25EZWxldGUsXG5cdG9uQWRkLFxufSkgPT4ge1xuXHRjb25zdCB7XG5cdFx0ZGlhbG9nU3RhdGUsXG5cdFx0b3BlbkVkaXREaWFsb2csXG5cdFx0b3BlbkRlbGV0ZURpYWxvZyxcblx0XHRjbG9zZURpYWxvZyxcblx0XHRoYW5kbGVDb25maXJtLFxuXHR9ID0gdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zKG9uQ2xvc2UpXG5cblx0Y29uc3Qge1xuXHRcdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHR0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0dGltZUZvcm1hdCxcblx0XHRnZXRSZXNvdXJjZUJ5SWQsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQuZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LFxuXHRcdHQ6IGNvbnRleHQudCxcblx0XHRidXNpbmVzc0hvdXJzOiBjb250ZXh0LmJ1c2luZXNzSG91cnMsXG5cdFx0dGltZUZvcm1hdDogY29udGV4dC50aW1lRm9ybWF0LFxuXHRcdGdldFJlc291cmNlQnlJZDogY29udGV4dC5nZXRSZXNvdXJjZUJ5SWQsXG5cdH0pKVxuXG5cdGNvbnN0IHN0YXJ0ID0gc2VsZWN0ZWRFdmVudD8uc3RhcnQgPz8gZGF5anMoKVxuXHRjb25zdCBlbmQgPSBzZWxlY3RlZEV2ZW50Py5lbmQgPz8gZGF5anMoKS5hZGQoMSwgJ2hvdXInKVxuXG5cdC8vIEZpbmQgcGFyZW50IGV2ZW50IGlmIHRoaXMgaXMgYSByZWN1cnJpbmcgZXZlbnQgaW5zdGFuY2Vcblx0Y29uc3QgcGFyZW50RXZlbnQgPSBzZWxlY3RlZEV2ZW50XG5cdFx0PyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudClcblx0XHQ6IG51bGxcblxuXHQvLyBGb3JtIHN0YXRlXG5cdGNvbnN0IFtzdGFydERhdGUsIHNldFN0YXJ0RGF0ZV0gPSB1c2VTdGF0ZShzdGFydC50b0RhdGUoKSlcblx0Y29uc3QgW2VuZERhdGUsIHNldEVuZERhdGVdID0gdXNlU3RhdGUoZW5kLnRvRGF0ZSgpKVxuXHRjb25zdCBbaXNBbGxEYXksIHNldElzQWxsRGF5XSA9IHVzZVN0YXRlKHNlbGVjdGVkRXZlbnQ/LmFsbERheSB8fCBmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkQ29sb3IsIHNldFNlbGVjdGVkQ29sb3JdID0gdXNlU3RhdGUoXG5cdFx0c2VsZWN0ZWRFdmVudD8uY29sb3IgfHwgQ09MT1JfT1BUSU9OU1swXS52YWx1ZVxuXHQpXG5cblx0Ly8gVGltZSBzdGF0ZVxuXHRjb25zdCBbc3RhcnRUaW1lLCBzZXRTdGFydFRpbWVdID0gdXNlU3RhdGUoc3RhcnQuZm9ybWF0KCdISDptbScpKVxuXHRjb25zdCBbZW5kVGltZSwgc2V0RW5kVGltZV0gPSB1c2VTdGF0ZShlbmQuZm9ybWF0KCdISDptbScpKVxuXG5cdC8vIEluaXRpYWxpemUgZm9ybSB2YWx1ZXMgZnJvbSBzZWxlY3RlZCBldmVudCBvciBkZWZhdWx0c1xuXHRjb25zdCBbZm9ybVZhbHVlcywgc2V0Rm9ybVZhbHVlc10gPSB1c2VTdGF0ZSh7XG5cdFx0dGl0bGU6IHNlbGVjdGVkRXZlbnQ/LnRpdGxlIHx8ICcnLFxuXHRcdGRlc2NyaXB0aW9uOiBzZWxlY3RlZEV2ZW50Py5kZXNjcmlwdGlvbiB8fCAnJyxcblx0XHRsb2NhdGlvbjogc2VsZWN0ZWRFdmVudD8ubG9jYXRpb24gfHwgJycsXG5cdH0pXG5cblx0Ly8gUmVjdXJyZW5jZSBzdGF0ZSAtIHB1bGwgUlJVTEUgZnJvbSBwYXJlbnQgaWYgdGhpcyBpcyBhbiBpbnN0YW5jZVxuXHRjb25zdCBbcnJ1bGUsIHNldFJydWxlXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KCgpID0+IHtcblx0XHRjb25zdCBldmVudFJydWxlID0gc2VsZWN0ZWRFdmVudD8ucnJ1bGUgfHwgcGFyZW50RXZlbnQ/LnJydWxlXG5cdFx0cmV0dXJuIGV2ZW50UnJ1bGUgfHwgbnVsbFxuXHR9KVxuXG5cdC8vIENyZWF0ZSB3cmFwcGVyIGZ1bmN0aW9ucyB0byBmaXggVHlwZVNjcmlwdCBlcnJvcnMgd2l0aCBEYXRlUGlja2VyXG5cdGNvbnN0IGhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0aWYgKCFkYXRlKSByZXR1cm5cblx0XHRzZXRTdGFydERhdGUoZGF0ZSlcblx0XHRpZiAoZGF5anMoZGF0ZSkuaXNBZnRlcihkYXlqcyhlbmREYXRlKSkpIHtcblx0XHRcdHNldEVuZERhdGUoZGF0ZSlcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVFbmREYXRlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcblx0XHRpZiAoIWRhdGUpIHJldHVyblxuXHRcdHNldEVuZERhdGUoZGF0ZSlcblx0XHRpZiAoZGF0ZSAmJiBkYXlqcyhkYXRlKS5pc0JlZm9yZShkYXlqcyhzdGFydERhdGUpKSkge1xuXHRcdFx0c2V0U3RhcnREYXRlKGRhdGUpXG5cdFx0fVxuXHR9XG5cblx0Ly8gVGltZSB2YWxpZGF0aW9uIGhhbmRsZXJzIC0gb25seSB2YWxpZGF0ZSB3aGVuIGRhdGVzIGFyZSB0aGUgc2FtZVxuXHRjb25zdCBoYW5kbGVTdGFydFRpbWVDaGFuZ2UgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0c2V0U3RhcnRUaW1lKHRpbWUpXG5cdFx0Ly8gT25seSB2YWxpZGF0ZSBpZiBzYW1lIGRheVxuXHRcdGlmIChkYXlqcyhzdGFydERhdGUpLmlzU2FtZShkYXlqcyhlbmREYXRlKSwgJ2RheScpICYmIHRpbWUgPiBlbmRUaW1lKSB7XG5cdFx0XHRzZXRFbmRUaW1lKHRpbWUpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRW5kVGltZUNoYW5nZSA9ICh0aW1lOiBzdHJpbmcpID0+IHtcblx0XHRzZXRFbmRUaW1lKHRpbWUpXG5cdFx0Ly8gT25seSB2YWxpZGF0ZSBpZiBzYW1lIGRheVxuXHRcdGlmIChkYXlqcyhzdGFydERhdGUpLmlzU2FtZShkYXlqcyhlbmREYXRlKSwgJ2RheScpICYmIHRpbWUgPCBzdGFydFRpbWUpIHtcblx0XHRcdHNldFN0YXJ0VGltZSh0aW1lKVxuXHRcdH1cblx0fVxuXG5cdC8vIFVwZGF0ZSBmb3JtIHZhbHVlcyB3aGVuIGlucHV0IGNoYW5nZXNcblx0Y29uc3QgaGFuZGxlSW5wdXRDaGFuZ2UgPSAoXG5cdFx0ZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+XG5cdCkgPT4ge1xuXHRcdGNvbnN0IHsgbmFtZSwgdmFsdWUgfSA9IGUudGFyZ2V0XG5cdFx0c2V0Rm9ybVZhbHVlcygocHJldikgPT4gKHsgLi4ucHJldiwgW25hbWVdOiB2YWx1ZSB9KSlcblx0fVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0Ly8gUmVzZXQgZW5kIHRpbWUgd2hlbiBhbGwgZGF5IGlzIHRvZ2dsZWQgdG8gb25cblx0XHRpZiAoaXNBbGxEYXkpIHtcblx0XHRcdHNldEVuZFRpbWUoJzIzOjU5Jylcblx0XHR9XG5cdH0sIFtpc0FsbERheV0pXG5cblx0Y29uc3QgaGFuZGxlU3VibWl0ID0gKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuXHRcdGUucHJldmVudERlZmF1bHQoKVxuXG5cdFx0Y29uc3Qgc3RhcnREYXRlVGltZSA9IGJ1aWxkRGF0ZVRpbWUoc3RhcnREYXRlLCBzdGFydFRpbWUsIGlzQWxsRGF5KVxuXHRcdGNvbnN0IGVuZERhdGVUaW1lID0gYnVpbGRFbmREYXRlVGltZShlbmREYXRlLCBlbmRUaW1lLCBpc0FsbERheSlcblxuXHRcdGNvbnN0IGV2ZW50RGF0YTogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdGlkOiBzZWxlY3RlZEV2ZW50Py5pZCB8fCBkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKSxcblx0XHRcdHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuXHRcdFx0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG5cdFx0XHRlbmQ6IGVuZERhdGVUaW1lLFxuXHRcdFx0cmVzb3VyY2VJZDogc2VsZWN0ZWRFdmVudD8ucmVzb3VyY2VJZCxcblx0XHRcdGRlc2NyaXB0aW9uOiBmb3JtVmFsdWVzLmRlc2NyaXB0aW9uLFxuXHRcdFx0bG9jYXRpb246IGZvcm1WYWx1ZXMubG9jYXRpb24sXG5cdFx0XHRhbGxEYXk6IGlzQWxsRGF5LFxuXHRcdFx0Y29sb3I6IHNlbGVjdGVkQ29sb3IsXG5cdFx0XHRycnVsZTogcnJ1bGUgfHwgdW5kZWZpbmVkLFxuXHRcdH1cblxuXHRcdGlmIChzZWxlY3RlZEV2ZW50Py5pZCAmJiBpc1JlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpKSB7XG5cdFx0XHRvcGVuRWRpdERpYWxvZyhzZWxlY3RlZEV2ZW50LCB7XG5cdFx0XHRcdHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuXHRcdFx0XHRzdGFydDogc3RhcnREYXRlVGltZSxcblx0XHRcdFx0ZW5kOiBlbmREYXRlVGltZSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IGZvcm1WYWx1ZXMuZGVzY3JpcHRpb24sXG5cdFx0XHRcdGxvY2F0aW9uOiBmb3JtVmFsdWVzLmxvY2F0aW9uLFxuXHRcdFx0XHRhbGxEYXk6IGlzQWxsRGF5LFxuXHRcdFx0XHRjb2xvcjogc2VsZWN0ZWRDb2xvcixcblx0XHRcdFx0cnJ1bGU6IHJydWxlIHx8IHVuZGVmaW5lZCxcblx0XHRcdH0pXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoc2VsZWN0ZWRFdmVudD8uaWQpIHtcblx0XHRcdG9uVXBkYXRlPy4oZXZlbnREYXRhKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvbkFkZD8uKGV2ZW50RGF0YSlcblx0XHR9XG5cdFx0b25DbG9zZSgpXG5cdH1cblxuXHRjb25zdCBoYW5kbGVEZWxldGUgPSAoKSA9PiB7XG5cdFx0aWYgKHNlbGVjdGVkRXZlbnQ/LmlkKSB7XG5cdFx0XHQvLyBDaGVjayBpZiB0aGlzIGlzIGEgcmVjdXJyaW5nIGV2ZW50XG5cdFx0XHRpZiAoaXNSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KSkge1xuXHRcdFx0XHQvLyBTaG93IHJlY3VycmluZyBldmVudCBkZWxldGUgZGlhbG9nXG5cdFx0XHRcdG9wZW5EZWxldGVEaWFsb2coc2VsZWN0ZWRFdmVudClcblx0XHRcdFx0cmV0dXJuIC8vIERvbid0IGNsb3NlIHRoZSBmb3JtIHlldCwgbGV0IHRoZSBkaWFsb2cgaGFuZGxlIGl0XG5cdFx0XHR9XG5cdFx0XHRvbkRlbGV0ZT8uKHNlbGVjdGVkRXZlbnQpXG5cdFx0XHRvbkNsb3NlKClcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVSUnVsZUNoYW5nZSA9IChuZXdSUnVsZTogUlJ1bGVPcHRpb25zIHwgbnVsbCkgPT4ge1xuXHRcdGlmICghbmV3UlJ1bGUpIHtcblx0XHRcdHNldFJydWxlKG51bGwpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0Y29uc3Qgc3RhcnREYXRlVGltZSA9IGJ1aWxkRGF0ZVRpbWUoc3RhcnREYXRlLCBzdGFydFRpbWUsIGlzQWxsRGF5KVxuXHRcdHNldFJydWxlKHsgLi4ubmV3UlJ1bGUsIGR0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUudG9EYXRlKCkgfSlcblx0fVxuXG5cdC8vIFVzZSByZXNvdXJjZS1zcGVjaWZpYyBidXNpbmVzcyBob3VycyBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxsYmFjayB0byBnbG9iYWxcblx0Y29uc3QgZWZmZWN0aXZlQnVzaW5lc3NIb3VycyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGNvbnN0IHJlc291cmNlSWQgPSBzZWxlY3RlZEV2ZW50Py5yZXNvdXJjZUlkXG5cdFx0aWYgKHJlc291cmNlSWQgJiYgZ2V0UmVzb3VyY2VCeUlkKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlQnlJZChyZXNvdXJjZUlkKVxuXHRcdFx0aWYgKHJlc291cmNlPy5idXNpbmVzc0hvdXJzKSB7XG5cdFx0XHRcdHJldHVybiByZXNvdXJjZS5idXNpbmVzc0hvdXJzXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBidXNpbmVzc0hvdXJzXG5cdH0sIFtzZWxlY3RlZEV2ZW50Py5yZXNvdXJjZUlkLCBnZXRSZXNvdXJjZUJ5SWQsIGJ1c2luZXNzSG91cnNdKVxuXG5cdGNvbnN0IGRpc2FibGVkRGF0ZU1hdGNoZXIgPSBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzXG5cdFx0PyAoZGF0ZTogRGF0ZSkgPT4gIWlzQnVzaW5lc3NEYXkoZGF5anMoZGF0ZSksIGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMpXG5cdFx0OiB1bmRlZmluZWRcblxuXHRjb25zdCBzdGFydENvbnN0cmFpbnRzID0gZ2V0VGltZUNvbnN0cmFpbnRzKHN0YXJ0RGF0ZSwgZWZmZWN0aXZlQnVzaW5lc3NIb3Vycylcblx0Y29uc3QgZW5kQ29uc3RyYWludHMgPSBnZXRUaW1lQ29uc3RyYWludHMoZW5kRGF0ZSwgZWZmZWN0aXZlQnVzaW5lc3NIb3VycylcblxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8Zm9ybSBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGZsZXgtMSBtaW4taC0wXCIgb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0+XG5cdFx0XHRcdDxTY3JvbGxBcmVhIGNsYXNzTmFtZT1cImZsZXgtMSBtaW4taC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0zIHNtOmdhcC00IHAtMVwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIiBodG1sRm9yPVwidGl0bGVcIj5cblx0XHRcdFx0XHRcdFx0XHR7dCgndGl0bGUnKX1cblx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRpZD1cInRpdGxlXCJcblx0XHRcdFx0XHRcdFx0XHRuYW1lPVwidGl0bGVcIlxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnZXZlbnRUaXRsZVBsYWNlaG9sZGVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0cmVxdWlyZWRcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17Zm9ybVZhbHVlcy50aXRsZX1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cblx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiIGh0bWxGb3I9XCJkZXNjcmlwdGlvblwiPlxuXHRcdFx0XHRcdFx0XHRcdHt0KCdkZXNjcmlwdGlvbicpfVxuXHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLTggdGV4dC1zbSBzbTpoLTlcIlxuXHRcdFx0XHRcdFx0XHRcdGlkPVwiZGVzY3JpcHRpb25cIlxuXHRcdFx0XHRcdFx0XHRcdG5hbWU9XCJkZXNjcmlwdGlvblwiXG5cdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPXt0KCdldmVudERlc2NyaXB0aW9uUGxhY2Vob2xkZXInKX1cblx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17Zm9ybVZhbHVlcy5kZXNjcmlwdGlvbn1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRjaGVja2VkPXtpc0FsbERheX1cblx0XHRcdFx0XHRcdFx0XHRpZD1cImFsbERheVwiXG5cdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoY2hlY2tlZCkgPT4gc2V0SXNBbGxEYXkoY2hlY2tlZCA9PT0gdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIiBodG1sRm9yPVwiYWxsRGF5XCI+XG5cdFx0XHRcdFx0XHRcdFx0e3QoJ2FsbERheScpfVxuXHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtMiBzbTpnYXAtNFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnc3RhcnREYXRlJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8RGF0ZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibXQtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU9uU2VsZWN0XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRlPXtzdGFydERhdGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRkaXNhYmxlZD17ZGlzYWJsZWREYXRlTWF0Y2hlcn1cblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVTdGFydERhdGVDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KCdlbmREYXRlJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8RGF0ZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibXQtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU9uU2VsZWN0XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRlPXtlbmREYXRlfVxuXHRcdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkRGF0ZU1hdGNoZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlRW5kRGF0ZUNoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHR7IWlzQWxsRGF5ICYmIChcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC0yIHNtOmdhcC00XCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnc3RhcnRUaW1lJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdDxUaW1lUGlja2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTEgaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4VGltZT17c3RhcnRDb25zdHJhaW50cy5tYXh9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1pblRpbWU9e3N0YXJ0Q29uc3RyYWludHMubWlufVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPVwic3RhcnQtdGltZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVTdGFydFRpbWVDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtzdGFydFRpbWV9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ2VuZFRpbWUnKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0PFRpbWVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibXQtMSBoLTggdGV4dC1zbSBzbTpoLTlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhUaW1lPXtlbmRDb25zdHJhaW50cy5tYXh9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1pblRpbWU9e2VuZENvbnN0cmFpbnRzLm1pbn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZT1cImVuZC10aW1lXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZUVuZFRpbWVDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtlbmRUaW1lfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQpfVxuXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cblx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KCdjb2xvcicpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTJcIj5cblx0XHRcdFx0XHRcdFx0XHR7Q09MT1JfT1BUSU9OUy5tYXAoKGNvbG9yKSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFyaWEtbGFiZWw9e2NvbG9yLmxhYmVsfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGAke2NvbG9yLnZhbHVlfSBoLTYgdy02IHJvdW5kZWQtZnVsbCBzbTpoLTggc206dy04YCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzZWxlY3RlZENvbG9yID09PSBjb2xvci52YWx1ZSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3JpbmctMiByaW5nLWJsYWNrIHJpbmctb2Zmc2V0LTEgc206cmluZy1vZmZzZXQtMidcblx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtjb2xvci52YWx1ZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gc2V0U2VsZWN0ZWRDb2xvcihjb2xvci52YWx1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIiBodG1sRm9yPVwibG9jYXRpb25cIj5cblx0XHRcdFx0XHRcdFx0XHR7dCgnbG9jYXRpb24nKX1cblx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRpZD1cImxvY2F0aW9uXCJcblx0XHRcdFx0XHRcdFx0XHRuYW1lPVwibG9jYXRpb25cIlxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnZXZlbnRMb2NhdGlvblBsYWNlaG9sZGVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2Zvcm1WYWx1ZXMubG9jYXRpb259XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0ey8qIFJlY3VycmVuY2UgU2VjdGlvbiAqL31cblx0XHRcdFx0XHRcdDxSZWN1cnJlbmNlRWRpdG9yIG9uQ2hhbmdlPXtoYW5kbGVSUnVsZUNoYW5nZX0gdmFsdWU9e3JydWxlfSAvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L1Njcm9sbEFyZWE+XG5cblx0XHRcdFx0PERpYWxvZ0Zvb3RlciBjbGFzc05hbWU9XCJtdC00IHNocmluay0wIGZsZXggZmxleC1jb2wtcmV2ZXJzZSBnYXAtMiBzbTpmbGV4LXJvdyBzbTpnYXAtMFwiPlxuXHRcdFx0XHRcdHtzZWxlY3RlZEV2ZW50Py5pZCAmJiAoXG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBzbTptci1hdXRvIHNtOnctYXV0b1wiXG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9e2hhbmRsZURlbGV0ZX1cblx0XHRcdFx0XHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJkZXN0cnVjdGl2ZVwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdHt0KCdkZWxldGUnKX1cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBnYXAtMiBzbTp3LWF1dG9cIj5cblx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleC0xIHNtOmZsZXgtbm9uZVwiXG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9e29uQ2xvc2V9XG5cdFx0XHRcdFx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdHt0KCdjYW5jZWwnKX1cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdFx0PEJ1dHRvbiBjbGFzc05hbWU9XCJmbGV4LTEgc206ZmxleC1ub25lXCIgc2l6ZT1cInNtXCIgdHlwZT1cInN1Ym1pdFwiPlxuXHRcdFx0XHRcdFx0XHR7c2VsZWN0ZWRFdmVudD8uaWQgPyB0KCd1cGRhdGUnKSA6IHQoJ2NyZWF0ZScpfVxuXHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvRGlhbG9nRm9vdGVyPlxuXHRcdFx0PC9mb3JtPlxuXG5cdFx0XHR7LyogUmVjdXJyaW5nIEV2ZW50IEVkaXQgRGlhbG9nICovfVxuXHRcdFx0PFJlY3VycmVuY2VFZGl0RGlhbG9nXG5cdFx0XHRcdGV2ZW50VGl0bGU9e2RpYWxvZ1N0YXRlLmV2ZW50Py50aXRsZSB8fCAnJ31cblx0XHRcdFx0aXNPcGVuPXtkaWFsb2dTdGF0ZS5pc09wZW59XG5cdFx0XHRcdG9uQ2xvc2U9e2Nsb3NlRGlhbG9nfVxuXHRcdFx0XHRvbkNvbmZpcm09e2hhbmRsZUNvbmZpcm19XG5cdFx0XHRcdG9wZXJhdGlvblR5cGU9e2RpYWxvZ1N0YXRlLm9wZXJhdGlvblR5cGV9XG5cdFx0XHQvPlxuXHRcdDwvPlxuXHQpXG59XG4iLAogICAgImltcG9ydCAqIGFzIENoZWNrYm94UHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1jaGVja2JveCdcbmltcG9ydCB7IENoZWNrSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIENoZWNrYm94KHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIENoZWNrYm94UHJpbWl0aXZlLlJvb3Q+KSB7XG5cdHJldHVybiAoXG5cdFx0PENoZWNrYm94UHJpbWl0aXZlLlJvb3Rcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdwZWVyIGJvcmRlci1pbnB1dCBkYXJrOmJnLWlucHV0LzMwIGRhdGEtW3N0YXRlPWNoZWNrZWRdOmJnLXByaW1hcnkgZGF0YS1bc3RhdGU9Y2hlY2tlZF06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGFyazpkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1wcmltYXJ5IGRhdGEtW3N0YXRlPWNoZWNrZWRdOmJvcmRlci1wcmltYXJ5IGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlIHNpemUtNCBzaHJpbmstMCByb3VuZGVkLVs0cHhdIGJvcmRlciBzaGFkb3cteHMgdHJhbnNpdGlvbi1zaGFkb3cgb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImNoZWNrYm94XCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8Q2hlY2tib3hQcmltaXRpdmUuSW5kaWNhdG9yXG5cdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtY3VycmVudCB0cmFuc2l0aW9uLW5vbmVcIlxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJjaGVja2JveC1pbmRpY2F0b3JcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8Q2hlY2tJY29uIGNsYXNzTmFtZT1cInNpemUtMy41XCIgLz5cblx0XHRcdDwvQ2hlY2tib3hQcmltaXRpdmUuSW5kaWNhdG9yPlxuXHRcdDwvQ2hlY2tib3hQcmltaXRpdmUuUm9vdD5cblx0KVxufVxuXG5leHBvcnQgeyBDaGVja2JveCB9XG4iLAogICAgImltcG9ydCB7IFBvcG92ZXJDbG9zZSB9IGZyb20gJ0ByYWRpeC11aS9yZWFjdC1wb3BvdmVyJ1xuaW1wb3J0IHsgQ2FsZW5kYXIgYXMgQ2FsZW5kYXJJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IE1hdGNoZXIgfSBmcm9tICdyZWFjdC1kYXktcGlja2VyJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NhbGVuZGFyJ1xuaW1wb3J0IHtcblx0UG9wb3Zlcixcblx0UG9wb3ZlckNvbnRlbnQsXG5cdFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBEYXRlUGlja2VyUHJvcHMge1xuXHRkYXRlOiBEYXRlIHwgdW5kZWZpbmVkXG5cdG9uQ2hhbmdlPzogKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHZvaWRcblx0bGFiZWw/OiBzdHJpbmdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGNsb3NlT25TZWxlY3Q/OiBib29sZWFuXG5cdGRpc2FibGVkPzogTWF0Y2hlciB8IE1hdGNoZXJbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRGF0ZVBpY2tlcih7XG5cdGRhdGUsXG5cdGNsb3NlT25TZWxlY3QsXG5cdG9uQ2hhbmdlLFxuXHRsYWJlbCA9ICdQaWNrIGEgZGF0ZScsXG5cdGNsYXNzTmFtZSxcblx0ZGlzYWJsZWQsXG59OiBEYXRlUGlja2VyUHJvcHMpIHtcblx0Y29uc3QgcG9wT3ZlclJlZiA9IHVzZVJlZjxIVE1MQnV0dG9uRWxlbWVudCB8IG51bGw+KG51bGwpXG5cdGNvbnN0IFtzZWxlY3RlZERhdGUsIHNldFNlbGVjdGVkRGF0ZV0gPSB1c2VTdGF0ZTxEYXRlIHwgdW5kZWZpbmVkPihkYXRlKVxuXG5cdC8vIFN5bmMgZGF0ZSBzdGF0ZSB3aXRoIGRhdGUgcHJvcFxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdHNldFNlbGVjdGVkRGF0ZShkYXRlKVxuXHR9LCBbZGF0ZV0pXG5cblx0Y29uc3QgaGFuZGxlRGF0ZVNlbGVjdCA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0c2V0U2VsZWN0ZWREYXRlKGRhdGUpXG5cdFx0aWYgKGNsb3NlT25TZWxlY3QpIHtcblx0XHRcdHBvcE92ZXJSZWYuY3VycmVudD8uY2xpY2soKVxuXHRcdH1cblx0XHRvbkNoYW5nZT8uKGRhdGUpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuXHRcdFx0PFBvcG92ZXI+XG5cdFx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdCdkYXRhLVtlbXB0eT10cnVlXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgdy1mdWxsIGp1c3RpZnktc3RhcnQgdGV4dC1sZWZ0IGZvbnQtbm9ybWFsJ1xuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdGRhdGEtZW1wdHk9eyFkYXRlfVxuXHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxDYWxlbmRhckljb24gLz5cblx0XHRcdFx0XHRcdHtzZWxlY3RlZERhdGUgPyAoXG5cdFx0XHRcdFx0XHRcdGRheWpzKHNlbGVjdGVkRGF0ZSkuZm9ybWF0KCdNTU0gRCwgWVlZWScpXG5cdFx0XHRcdFx0XHQpIDogKFxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj57bGFiZWx9PC9zcGFuPlxuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0PC9Qb3BvdmVyVHJpZ2dlcj5cblx0XHRcdFx0PFBvcG92ZXJDb250ZW50IGFsaWduPVwic3RhcnRcIiBjbGFzc05hbWU9XCJ3LWF1dG8gcC0wXCI+XG5cdFx0XHRcdFx0PFBvcG92ZXJDbG9zZSByZWY9e3BvcE92ZXJSZWZ9IC8+XG5cdFx0XHRcdFx0PENhbGVuZGFyXG5cdFx0XHRcdFx0XHRjYXB0aW9uTGF5b3V0PVwiZHJvcGRvd25cIlxuXHRcdFx0XHRcdFx0ZGVmYXVsdE1vbnRoPXtzZWxlY3RlZERhdGV9XG5cdFx0XHRcdFx0XHRkaXNhYmxlZD17ZGlzYWJsZWR9XG5cdFx0XHRcdFx0XHRtb2RlPVwic2luZ2xlXCJcblx0XHRcdFx0XHRcdG9uU2VsZWN0PXtoYW5kbGVEYXRlU2VsZWN0fVxuXHRcdFx0XHRcdFx0c2VsZWN0ZWQ9e3NlbGVjdGVkRGF0ZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQ8L1BvcG92ZXJDb250ZW50PlxuXHRcdFx0PC9Qb3BvdmVyPlxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7XG5cdENoZXZyb25Eb3duSWNvbixcblx0Q2hldnJvbkxlZnRJY29uLFxuXHRDaGV2cm9uUmlnaHRJY29uLFxufSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRGF5QnV0dG9uIH0gZnJvbSAncmVhY3QtZGF5LXBpY2tlcidcbmltcG9ydCB7IERheVBpY2tlciwgZ2V0RGVmYXVsdENsYXNzTmFtZXMgfSBmcm9tICdyZWFjdC1kYXktcGlja2VyJ1xuaW1wb3J0IHsgQnV0dG9uLCBidXR0b25WYXJpYW50cyB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDYWxlbmRhcih7XG5cdGNsYXNzTmFtZSxcblx0Y2xhc3NOYW1lcyxcblx0c2hvd091dHNpZGVEYXlzID0gdHJ1ZSxcblx0Y2FwdGlvbkxheW91dCA9ICdsYWJlbCcsXG5cdGJ1dHRvblZhcmlhbnQgPSAnZ2hvc3QnLFxuXHRmb3JtYXR0ZXJzLFxuXHRjb21wb25lbnRzLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERheVBpY2tlcj4gJiB7XG5cdGJ1dHRvblZhcmlhbnQ/OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgQnV0dG9uPlsndmFyaWFudCddXG59KSB7XG5cdGNvbnN0IGRlZmF1bHRDbGFzc05hbWVzID0gZ2V0RGVmYXVsdENsYXNzTmFtZXMoKVxuXG5cdHJldHVybiAoXG5cdFx0PERheVBpY2tlclxuXHRcdFx0Y2FwdGlvbkxheW91dD17Y2FwdGlvbkxheW91dH1cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdiZy1iYWNrZ3JvdW5kIGdyb3VwL2NhbGVuZGFyIHAtMyBbLS1jZWxsLXNpemU6LS1zcGFjaW5nKDgpXSBbW2RhdGEtc2xvdD1jYXJkLWNvbnRlbnRdXyZdOmJnLXRyYW5zcGFyZW50IFtbZGF0YS1zbG90PXBvcG92ZXItY29udGVudF1fJl06YmctdHJhbnNwYXJlbnQnLFxuXHRcdFx0XHRTdHJpbmcucmF3YHJ0bDoqKjpbLnJkcC1idXR0b25cXF9uZXh0PnN2Z106cm90YXRlLTE4MGAsXG5cdFx0XHRcdFN0cmluZy5yYXdgcnRsOioqOlsucmRwLWJ1dHRvblxcX3ByZXZpb3VzPnN2Z106cm90YXRlLTE4MGAsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGNsYXNzTmFtZXM9e3tcblx0XHRcdFx0cm9vdDogY24oJ3ctZml0JywgZGVmYXVsdENsYXNzTmFtZXMucm9vdCksXG5cdFx0XHRcdG1vbnRoczogY24oXG5cdFx0XHRcdFx0J2ZsZXggZ2FwLTQgZmxleC1jb2wgbWQ6ZmxleC1yb3cgcmVsYXRpdmUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLm1vbnRoc1xuXHRcdFx0XHQpLFxuXHRcdFx0XHRtb250aDogY24oJ2ZsZXggZmxleC1jb2wgdy1mdWxsIGdhcC00JywgZGVmYXVsdENsYXNzTmFtZXMubW9udGgpLFxuXHRcdFx0XHRuYXY6IGNuKFxuXHRcdFx0XHRcdCdmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSB3LWZ1bGwgYWJzb2x1dGUgdG9wLTAgaW5zZXQteC0wIGp1c3RpZnktYmV0d2VlbicsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMubmF2XG5cdFx0XHRcdCksXG5cdFx0XHRcdGJ1dHRvbl9wcmV2aW91czogY24oXG5cdFx0XHRcdFx0YnV0dG9uVmFyaWFudHMoeyB2YXJpYW50OiBidXR0b25WYXJpYW50IH0pLFxuXHRcdFx0XHRcdCdzaXplLSgtLWNlbGwtc2l6ZSkgYXJpYS1kaXNhYmxlZDpvcGFjaXR5LTUwIHAtMCBzZWxlY3Qtbm9uZScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuYnV0dG9uX3ByZXZpb3VzXG5cdFx0XHRcdCksXG5cdFx0XHRcdGJ1dHRvbl9uZXh0OiBjbihcblx0XHRcdFx0XHRidXR0b25WYXJpYW50cyh7IHZhcmlhbnQ6IGJ1dHRvblZhcmlhbnQgfSksXG5cdFx0XHRcdFx0J3NpemUtKC0tY2VsbC1zaXplKSBhcmlhLWRpc2FibGVkOm9wYWNpdHktNTAgcC0wIHNlbGVjdC1ub25lJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5idXR0b25fbmV4dFxuXHRcdFx0XHQpLFxuXHRcdFx0XHRtb250aF9jYXB0aW9uOiBjbihcblx0XHRcdFx0XHQnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaC0oLS1jZWxsLXNpemUpIHctZnVsbCBweC0oLS1jZWxsLXNpemUpJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5tb250aF9jYXB0aW9uXG5cdFx0XHRcdCksXG5cdFx0XHRcdGRyb3Bkb3duczogY24oXG5cdFx0XHRcdFx0J3ctZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LXNtIGZvbnQtbWVkaXVtIGp1c3RpZnktY2VudGVyIGgtKC0tY2VsbC1zaXplKSBnYXAtMS41Jyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5kcm9wZG93bnNcblx0XHRcdFx0KSxcblx0XHRcdFx0ZHJvcGRvd25fcm9vdDogY24oXG5cdFx0XHRcdFx0J3JlbGF0aXZlIGhhcy1mb2N1czpib3JkZXItcmluZyBib3JkZXIgYm9yZGVyLWlucHV0IHNoYWRvdy14cyBoYXMtZm9jdXM6cmluZy1yaW5nLzUwIGhhcy1mb2N1czpyaW5nLVszcHhdIHJvdW5kZWQtbWQnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmRyb3Bkb3duX3Jvb3Rcblx0XHRcdFx0KSxcblx0XHRcdFx0ZHJvcGRvd246IGNuKFxuXHRcdFx0XHRcdCdhYnNvbHV0ZSBiZy1wb3BvdmVyIGluc2V0LTAgb3BhY2l0eS0wJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5kcm9wZG93blxuXHRcdFx0XHQpLFxuXHRcdFx0XHRjYXB0aW9uX2xhYmVsOiBjbihcblx0XHRcdFx0XHQnc2VsZWN0LW5vbmUgZm9udC1tZWRpdW0nLFxuXHRcdFx0XHRcdGNhcHRpb25MYXlvdXQgPT09ICdsYWJlbCdcblx0XHRcdFx0XHRcdD8gJ3RleHQtc20nXG5cdFx0XHRcdFx0XHQ6ICdyb3VuZGVkLW1kIHBsLTIgcHItMSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSB0ZXh0LXNtIGgtOCBbJj5zdmddOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBbJj5zdmddOnNpemUtMy41Jyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5jYXB0aW9uX2xhYmVsXG5cdFx0XHRcdCksXG5cdFx0XHRcdHRhYmxlOiAndy1mdWxsIGJvcmRlci1jb2xsYXBzZScsXG5cdFx0XHRcdHdlZWtkYXlzOiBjbignZmxleCcsIGRlZmF1bHRDbGFzc05hbWVzLndlZWtkYXlzKSxcblx0XHRcdFx0d2Vla2RheTogY24oXG5cdFx0XHRcdFx0J3RleHQtbXV0ZWQtZm9yZWdyb3VuZCByb3VuZGVkLW1kIGZsZXgtMSBmb250LW5vcm1hbCB0ZXh0LVswLjhyZW1dIHNlbGVjdC1ub25lJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrZGF5XG5cdFx0XHRcdCksXG5cdFx0XHRcdHdlZWs6IGNuKCdmbGV4IHctZnVsbCBtdC0yJywgZGVmYXVsdENsYXNzTmFtZXMud2VlayksXG5cdFx0XHRcdHdlZWtfbnVtYmVyX2hlYWRlcjogY24oXG5cdFx0XHRcdFx0J3NlbGVjdC1ub25lIHctKC0tY2VsbC1zaXplKScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMud2Vla19udW1iZXJfaGVhZGVyXG5cdFx0XHRcdCksXG5cdFx0XHRcdHdlZWtfbnVtYmVyOiBjbihcblx0XHRcdFx0XHQndGV4dC1bMC44cmVtXSBzZWxlY3Qtbm9uZSB0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLndlZWtfbnVtYmVyXG5cdFx0XHRcdCksXG5cdFx0XHRcdGRheTogY24oXG5cdFx0XHRcdFx0J3JlbGF0aXZlIHctZnVsbCBoLWZ1bGwgcC0wIHRleHQtY2VudGVyIFsmOmxhc3QtY2hpbGRbZGF0YS1zZWxlY3RlZD10cnVlXV9idXR0b25dOnJvdW5kZWQtci1tZCBncm91cC9kYXkgYXNwZWN0LXNxdWFyZSBzZWxlY3Qtbm9uZScsXG5cdFx0XHRcdFx0cHJvcHMuc2hvd1dlZWtOdW1iZXJcblx0XHRcdFx0XHRcdD8gJ1smOm50aC1jaGlsZCgyKVtkYXRhLXNlbGVjdGVkPXRydWVdX2J1dHRvbl06cm91bmRlZC1sLW1kJ1xuXHRcdFx0XHRcdFx0OiAnWyY6Zmlyc3QtY2hpbGRbZGF0YS1zZWxlY3RlZD10cnVlXV9idXR0b25dOnJvdW5kZWQtbC1tZCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZGF5XG5cdFx0XHRcdCksXG5cdFx0XHRcdHJhbmdlX3N0YXJ0OiBjbihcblx0XHRcdFx0XHQncm91bmRlZC1sLW1kIGJnLWFjY2VudCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMucmFuZ2Vfc3RhcnRcblx0XHRcdFx0KSxcblx0XHRcdFx0cmFuZ2VfbWlkZGxlOiBjbigncm91bmRlZC1ub25lJywgZGVmYXVsdENsYXNzTmFtZXMucmFuZ2VfbWlkZGxlKSxcblx0XHRcdFx0cmFuZ2VfZW5kOiBjbigncm91bmRlZC1yLW1kIGJnLWFjY2VudCcsIGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX2VuZCksXG5cdFx0XHRcdHRvZGF5OiBjbihcblx0XHRcdFx0XHQnYmctYWNjZW50IHRleHQtYWNjZW50LWZvcmVncm91bmQgcm91bmRlZC1tZCBkYXRhLVtzZWxlY3RlZD10cnVlXTpyb3VuZGVkLW5vbmUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLnRvZGF5XG5cdFx0XHRcdCksXG5cdFx0XHRcdG91dHNpZGU6IGNuKFxuXHRcdFx0XHRcdCd0ZXh0LW11dGVkLWZvcmVncm91bmQgYXJpYS1zZWxlY3RlZDp0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLm91dHNpZGVcblx0XHRcdFx0KSxcblx0XHRcdFx0ZGlzYWJsZWQ6IGNuKFxuXHRcdFx0XHRcdCd0ZXh0LW11dGVkLWZvcmVncm91bmQgb3BhY2l0eS01MCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZGlzYWJsZWRcblx0XHRcdFx0KSxcblx0XHRcdFx0aGlkZGVuOiBjbignaW52aXNpYmxlJywgZGVmYXVsdENsYXNzTmFtZXMuaGlkZGVuKSxcblx0XHRcdFx0Li4uY2xhc3NOYW1lcyxcblx0XHRcdH19XG5cdFx0XHRjb21wb25lbnRzPXt7XG5cdFx0XHRcdFJvb3Q6ICh7IGNsYXNzTmFtZSwgcm9vdFJlZiwgLi4ucHJvcHMgfSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oY2xhc3NOYW1lKX1cblx0XHRcdFx0XHRcdFx0ZGF0YS1zbG90PVwiY2FsZW5kYXJcIlxuXHRcdFx0XHRcdFx0XHRyZWY9e3Jvb3RSZWZ9XG5cdFx0XHRcdFx0XHRcdHsuLi5wcm9wc31cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRDaGV2cm9uOiAoeyBjbGFzc05hbWUsIG9yaWVudGF0aW9uLCAuLi5wcm9wcyB9KSA9PiB7XG5cdFx0XHRcdFx0aWYgKG9yaWVudGF0aW9uID09PSAnbGVmdCcpIHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxDaGV2cm9uTGVmdEljb24gY2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX0gey4uLnByb3BzfSAvPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChvcmllbnRhdGlvbiA9PT0gJ3JpZ2h0Jykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PENoZXZyb25SaWdodEljb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKCdzaXplLTQnLCBjbGFzc05hbWUpfVxuXHRcdFx0XHRcdFx0XHRcdHsuLi5wcm9wc31cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PENoZXZyb25Eb3duSWNvbiBjbGFzc05hbWU9e2NuKCdzaXplLTQnLCBjbGFzc05hbWUpfSB7Li4ucHJvcHN9IC8+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9LFxuXHRcdFx0XHREYXlCdXR0b246IENhbGVuZGFyRGF5QnV0dG9uLFxuXHRcdFx0XHRXZWVrTnVtYmVyOiAoeyBjaGlsZHJlbiwgLi4ucHJvcHMgfSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8dGQgey4uLnByb3BzfT5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHNpemUtKC0tY2VsbC1zaXplKSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1jZW50ZXJcIj5cblx0XHRcdFx0XHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC4uLmNvbXBvbmVudHMsXG5cdFx0XHR9fVxuXHRcdFx0Zm9ybWF0dGVycz17e1xuXHRcdFx0XHRmb3JtYXRNb250aERyb3Bkb3duOiAoZGF0ZSkgPT5cblx0XHRcdFx0XHRkYXRlLnRvTG9jYWxlU3RyaW5nKCdkZWZhdWx0JywgeyBtb250aDogJ3Nob3J0JyB9KSxcblx0XHRcdFx0Li4uZm9ybWF0dGVycyxcblx0XHRcdH19XG5cdFx0XHRzaG93T3V0c2lkZURheXM9e3Nob3dPdXRzaWRlRGF5c31cblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhbGVuZGFyRGF5QnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHRkYXksXG5cdG1vZGlmaWVycyxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEYXlCdXR0b24+KSB7XG5cdGNvbnN0IGRlZmF1bHRDbGFzc05hbWVzID0gZ2V0RGVmYXVsdENsYXNzTmFtZXMoKVxuXG5cdGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZjxIVE1MQnV0dG9uRWxlbWVudD4obnVsbClcblx0UmVhY3QudXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAobW9kaWZpZXJzLmZvY3VzZWQpIHtcblx0XHRcdHJlZi5jdXJyZW50Py5mb2N1cygpXG5cdFx0fVxuXHR9LCBbbW9kaWZpZXJzLmZvY3VzZWRdKVxuXG5cdHJldHVybiAoXG5cdFx0PEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2RhdGEtW3NlbGVjdGVkLXNpbmdsZT10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3NlbGVjdGVkLXNpbmdsZT10cnVlXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBkYXRhLVtyYW5nZS1taWRkbGU9dHJ1ZV06YmctYWNjZW50IGRhdGEtW3JhbmdlLW1pZGRsZT10cnVlXTp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOmJnLXByaW1hcnkgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGF0YS1bcmFuZ2UtZW5kPXRydWVdOmJnLXByaW1hcnkgZGF0YS1bcmFuZ2UtZW5kPXRydWVdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OmJvcmRlci1yaW5nIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnJpbmctcmluZy81MCBkYXJrOmhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZmxleCBhc3BlY3Qtc3F1YXJlIHNpemUtYXV0byB3LWZ1bGwgbWluLXctKC0tY2VsbC1zaXplKSBmbGV4LWNvbCBnYXAtMSBsZWFkaW5nLW5vbmUgZm9udC1ub3JtYWwgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6cmVsYXRpdmUgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6ei0xMCBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpyaW5nLVszcHhdIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpyb3VuZGVkLW1kIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpyb3VuZGVkLXItbWQgZGF0YS1bcmFuZ2UtbWlkZGxlPXRydWVdOnJvdW5kZWQtbm9uZSBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpyb3VuZGVkLW1kIGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOnJvdW5kZWQtbC1tZCBbJj5zcGFuXTp0ZXh0LXhzIFsmPnNwYW5dOm9wYWNpdHktNzAnLFxuXHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5kYXksXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtZGF5PXtkYXkuZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKX1cblx0XHRcdGRhdGEtcmFuZ2UtZW5kPXttb2RpZmllcnMucmFuZ2VfZW5kfVxuXHRcdFx0ZGF0YS1yYW5nZS1taWRkbGU9e21vZGlmaWVycy5yYW5nZV9taWRkbGV9XG5cdFx0XHRkYXRhLXJhbmdlLXN0YXJ0PXttb2RpZmllcnMucmFuZ2Vfc3RhcnR9XG5cdFx0XHRkYXRhLXNlbGVjdGVkLXNpbmdsZT17XG5cdFx0XHRcdG1vZGlmaWVycy5zZWxlY3RlZCAmJlxuXHRcdFx0XHQhbW9kaWZpZXJzLnJhbmdlX3N0YXJ0ICYmXG5cdFx0XHRcdCFtb2RpZmllcnMucmFuZ2VfZW5kICYmXG5cdFx0XHRcdCFtb2RpZmllcnMucmFuZ2VfbWlkZGxlXG5cdFx0XHR9XG5cdFx0XHRyZWY9e3JlZn1cblx0XHRcdHNpemU9XCJpY29uXCJcblx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgeyBDYWxlbmRhciwgQ2FsZW5kYXJEYXlCdXR0b24gfVxuIiwKICAgICJpbXBvcnQgKiBhcyBQb3BvdmVyUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1wb3BvdmVyJ1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gUG9wb3Zlcih7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gPFBvcG92ZXJQcmltaXRpdmUuUm9vdCBkYXRhLXNsb3Q9XCJwb3BvdmVyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBQb3BvdmVyVHJpZ2dlcih7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5UcmlnZ2VyPikge1xuXHRyZXR1cm4gPFBvcG92ZXJQcmltaXRpdmUuVHJpZ2dlciBkYXRhLXNsb3Q9XCJwb3BvdmVyLXRyaWdnZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJDb250ZW50KHtcblx0Y2xhc3NOYW1lLFxuXHRhbGlnbiA9ICdjZW50ZXInLFxuXHRzaWRlT2Zmc2V0ID0gNCxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLkNvbnRlbnQ+KSB7XG5cdHJldHVybiAoXG5cdFx0PFBvcG92ZXJQcmltaXRpdmUuUG9ydGFsPlxuXHRcdFx0PFBvcG92ZXJQcmltaXRpdmUuQ29udGVudFxuXHRcdFx0XHRhbGlnbj17YWxpZ259XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2JnLXBvcG92ZXIgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGRhdGEtW3NpZGU9Ym90dG9tXTpzbGlkZS1pbi1mcm9tLXRvcC0yIGRhdGEtW3NpZGU9bGVmdF06c2xpZGUtaW4tZnJvbS1yaWdodC0yIGRhdGEtW3NpZGU9cmlnaHRdOnNsaWRlLWluLWZyb20tbGVmdC0yIGRhdGEtW3NpZGU9dG9wXTpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yIHotNTAgdy03MiBvcmlnaW4tKC0tcmFkaXgtcG9wb3Zlci1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pIHJvdW5kZWQtbWQgYm9yZGVyIHAtNCBzaGFkb3ctbWQgb3V0bGluZS1oaWRkZW4nLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJwb3BvdmVyLWNvbnRlbnRcIlxuXHRcdFx0XHRzaWRlT2Zmc2V0PXtzaWRlT2Zmc2V0fVxuXHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHQvPlxuXHRcdDwvUG9wb3ZlclByaW1pdGl2ZS5Qb3J0YWw+XG5cdClcbn1cblxuZnVuY3Rpb24gUG9wb3ZlckFuY2hvcih7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5BbmNob3I+KSB7XG5cdHJldHVybiA8UG9wb3ZlclByaW1pdGl2ZS5BbmNob3IgZGF0YS1zbG90PVwicG9wb3Zlci1hbmNob3JcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmV4cG9ydCB7IFBvcG92ZXIsIFBvcG92ZXJBbmNob3IsIFBvcG92ZXJDb250ZW50LCBQb3BvdmVyVHJpZ2dlciB9XG4iLAogICAgImltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIElucHV0KHsgY2xhc3NOYW1lLCB0eXBlLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnaW5wdXQnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxpbnB1dFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZpbGU6dGV4dC1mb3JlZ3JvdW5kIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBzZWxlY3Rpb246YmctcHJpbWFyeSBzZWxlY3Rpb246dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGFyazpiZy1pbnB1dC8zMCBib3JkZXItaW5wdXQgZmxleCBoLTkgdy1mdWxsIG1pbi13LTAgcm91bmRlZC1tZCBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHgtMyBweS0xIHRleHQtYmFzZSBzaGFkb3cteHMgdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZpbGU6aW5saW5lLWZsZXggZmlsZTpoLTcgZmlsZTpib3JkZXItMCBmaWxlOmJnLXRyYW5zcGFyZW50IGZpbGU6dGV4dC1zbSBmaWxlOmZvbnQtbWVkaXVtIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAgbWQ6dGV4dC1zbScsXG5cdFx0XHRcdCdmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XScsXG5cdFx0XHRcdCdhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJpbnB1dFwiXG5cdFx0XHR0eXBlPXt0eXBlfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHsgSW5wdXQgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBMYWJlbFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtbGFiZWwnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBMYWJlbCh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBMYWJlbFByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxMYWJlbFByaW1pdGl2ZS5Sb290XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1zbSBsZWFkaW5nLW5vbmUgZm9udC1tZWRpdW0gc2VsZWN0LW5vbmUgZ3JvdXAtZGF0YS1bZGlzYWJsZWQ9dHJ1ZV06cG9pbnRlci1ldmVudHMtbm9uZSBncm91cC1kYXRhLVtkaXNhYmxlZD10cnVlXTpvcGFjaXR5LTUwIHBlZXItZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIHBlZXItZGlzYWJsZWQ6b3BhY2l0eS01MCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImxhYmVsXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7IExhYmVsIH1cbiIsCiAgICAiaW1wb3J0ICogYXMgU2Nyb2xsQXJlYVByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2Nyb2xsLWFyZWEnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgU2Nyb2xsQXJlYVByb3BzXG5cdGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuUm9vdD4ge1xuXHR2aWV3UG9ydFByb3BzPzogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuVmlld3BvcnQ+XG59XG5cbmZ1bmN0aW9uIFNjcm9sbEFyZWEoe1xuXHRjbGFzc05hbWUsXG5cdGNoaWxkcmVuLFxuXHR2aWV3UG9ydFByb3BzLFxuXHQuLi5wcm9wc1xufTogU2Nyb2xsQXJlYVByb3BzKSB7XG5cdHJldHVybiAoXG5cdFx0PFNjcm9sbEFyZWFQcmltaXRpdmUuUm9vdFxuXHRcdFx0Y2xhc3NOYW1lPXtjbigncmVsYXRpdmUnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2Nyb2xsLWFyZWFcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLlZpZXdwb3J0XG5cdFx0XHRcdHsuLi52aWV3UG9ydFByb3BzfVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBzaXplLWZ1bGwgcm91bmRlZC1baW5oZXJpdF0gdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMScsXG5cdFx0XHRcdFx0dmlld1BvcnRQcm9wcz8uY2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhLXZpZXdwb3J0XCJcblx0XHRcdD5cblx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0PC9TY3JvbGxBcmVhUHJpbWl0aXZlLlZpZXdwb3J0PlxuXHRcdFx0PFNjcm9sbEJhciAvPlxuXHRcdFx0PFNjcm9sbEFyZWFQcmltaXRpdmUuQ29ybmVyIC8+XG5cdFx0PC9TY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3Q+XG5cdClcbn1cblxuZnVuY3Rpb24gU2Nyb2xsQmFyKHtcblx0Y2xhc3NOYW1lLFxuXHRvcmllbnRhdGlvbiA9ICd2ZXJ0aWNhbCcsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLlNjcm9sbEFyZWFTY3JvbGxiYXJcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IHRvdWNoLW5vbmUgcC1weCB0cmFuc2l0aW9uLWNvbG9ycyBzZWxlY3Qtbm9uZScsXG5cdFx0XHRcdG9yaWVudGF0aW9uID09PSAndmVydGljYWwnICYmXG5cdFx0XHRcdFx0J2gtZnVsbCB3LTIuNSBib3JkZXItbCBib3JkZXItbC10cmFuc3BhcmVudCcsXG5cdFx0XHRcdG9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcgJiZcblx0XHRcdFx0XHQnaC0yLjUgZmxleC1jb2wgYm9yZGVyLXQgYm9yZGVyLXQtdHJhbnNwYXJlbnQnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS1zY3JvbGxiYXJcIlxuXHRcdFx0b3JpZW50YXRpb249e29yaWVudGF0aW9ufVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLlNjcm9sbEFyZWFUaHVtYlxuXHRcdFx0XHRjbGFzc05hbWU9XCJiZy1ib3JkZXIgcmVsYXRpdmUgZmxleC0xIHJvdW5kZWQtZnVsbFwiXG5cdFx0XHRcdGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhLXRodW1iXCJcblx0XHRcdC8+XG5cdFx0PC9TY3JvbGxBcmVhUHJpbWl0aXZlLlNjcm9sbEFyZWFTY3JvbGxiYXI+XG5cdClcbn1cblxuZXhwb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH1cbiIsCiAgICAiaW1wb3J0IHsgQ2xvY2sgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9pbnB1dCdcbmltcG9ydCB7XG5cdFBvcG92ZXIsXG5cdFBvcG92ZXJDb250ZW50LFxuXHRQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3BvcG92ZXInXG5pbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgdXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlciB9IGZyb20gJ0AvaG9va3MvdXNlLWF1dG9jb21wbGV0ZS10aW1lcGlja2VyJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB0eXBlIHsgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5cbmNvbnN0IGhhbmRsZVdoZWVsID0gKGU6IFJlYWN0LldoZWVsRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG5cdC8vIFByZXZlbnQgZXZlbnQgZnJvbSBidWJibGluZyB0byBwcmV2ZW50IFBvcG92ZXIgZnJvbSBjbG9zaW5nXG5cdGUuc3RvcFByb3BhZ2F0aW9uKClcbn1cblxuaW50ZXJmYWNlIFRpbWVQaWNrZXJQcm9wcyB7XG5cdHZhbHVlOiBzdHJpbmdcblx0b25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG5cdG1pblRpbWU/OiBzdHJpbmdcblx0bWF4VGltZT86IHN0cmluZ1xuXHR0aW1lRm9ybWF0PzogVGltZUZvcm1hdFxuXHRwbGFjZWhvbGRlcj86IHN0cmluZ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0ZGlzYWJsZWQ/OiBib29sZWFuXG5cdG5hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRpbWVQaWNrZXIoe1xuXHR2YWx1ZSxcblx0b25DaGFuZ2UsXG5cdG1pblRpbWUgPSAnMDA6MDAnLFxuXHRtYXhUaW1lID0gJzIzOjQ1Jyxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0cGxhY2Vob2xkZXIgPSAnU2VsZWN0IHRpbWUuLi4nLFxuXHRjbGFzc05hbWUsXG5cdGRpc2FibGVkID0gZmFsc2UsXG5cdG5hbWUsXG59OiBUaW1lUGlja2VyUHJvcHMpIHtcblx0Y29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cdGNvbnN0IFtzZWFyY2gsIHNldFNlYXJjaF0gPSB1c2VTdGF0ZSgnJylcblx0Y29uc3QgaW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbClcblx0Y29uc3QgdHJpZ2dlclJlZiA9IHVzZVJlZjxIVE1MQnV0dG9uRWxlbWVudD4obnVsbClcblx0Y29uc3QgW3RyaWdnZXJXaWR0aCwgc2V0VHJpZ2dlcldpZHRoXSA9IHVzZVN0YXRlPG51bWJlcj4oMClcblxuXHRjb25zdCB7IHRpbWVPcHRpb25zLCBmb3JtYXRUaW1lIH0gPSB1c2VBdXRvY29tcGxldGVUaW1lcGlja2VyKHtcblx0XHR0aW1lRm9ybWF0LFxuXHRcdG1pblRpbWUsXG5cdFx0bWF4VGltZSxcblx0fSlcblxuXHQvLyBGaWx0ZXIgdGltZSBvcHRpb25zIGJhc2VkIG9uIHNlYXJjaFxuXHRjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSB0aW1lT3B0aW9ucy5maWx0ZXIoKHRpbWUpID0+IHtcblx0XHRjb25zdCBmb3JtYXR0ZWRUaW1lID0gZm9ybWF0VGltZSh0aW1lKVxuXHRcdHJldHVybiBmb3JtYXR0ZWRUaW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoLnRvTG93ZXJDYXNlKCkpXG5cdH0pXG5cblx0Y29uc3QgaGFuZGxlU2VsZWN0ID0gKHRpbWU6IHN0cmluZykgPT4ge1xuXHRcdG9uQ2hhbmdlKHRpbWUpXG5cdFx0c2V0T3BlbihmYWxzZSlcblx0XHRzZXRTZWFyY2goJycpXG5cdH1cblxuXHQvLyBNZWFzdXJlIHRyaWdnZXIgd2lkdGggYW5kIGZvY3VzIGlucHV0IHdoZW4gcG9wb3ZlciBvcGVuc1xuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChvcGVuKSB7XG5cdFx0XHRpZiAodHJpZ2dlclJlZi5jdXJyZW50KSB7XG5cdFx0XHRcdHNldFRyaWdnZXJXaWR0aCh0cmlnZ2VyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGgpXG5cdFx0XHR9XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0aW5wdXRSZWYuY3VycmVudD8uZm9jdXMoKVxuXHRcdFx0fSwgMClcblx0XHR9XG5cdH0sIFtvcGVuXSlcblxuXHRjb25zdCBjdXJyZW50VGltZVN0cmluZyA9IHZhbHVlID8gZm9ybWF0VGltZSh2YWx1ZSkgOiBwbGFjZWhvbGRlclxuXG5cdHJldHVybiAoXG5cdFx0PFBvcG92ZXIgb25PcGVuQ2hhbmdlPXtzZXRPcGVufSBvcGVuPXtvcGVufT5cblx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0YXJpYS1jb250cm9scz1cInRpbWUtcGlja2VyLWxpc3Rib3hcIlxuXHRcdFx0XHRcdGFyaWEtZXhwYW5kZWQ9e29wZW59XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbigndy1mdWxsIGp1c3RpZnktc3RhcnQnLCBjbGFzc05hbWUpfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgdGltZS1waWNrZXItJHtuYW1lfWB9XG5cdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkfVxuXHRcdFx0XHRcdHJlZj17dHJpZ2dlclJlZn1cblx0XHRcdFx0XHRyb2xlPVwiY29tYm9ib3hcIlxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxDbG9jayBjbGFzc05hbWU9XCJtci0yIGgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdHtjdXJyZW50VGltZVN0cmluZ31cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0PFBvcG92ZXJDb250ZW50XG5cdFx0XHRcdGFsaWduPVwic3RhcnRcIlxuXHRcdFx0XHRjbGFzc05hbWU9XCJwLTBcIlxuXHRcdFx0XHRzdHlsZT17eyB3aWR0aDogdHJpZ2dlcldpZHRoIH19XG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicC0yIGJvcmRlci1iXCI+XG5cdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLThcIlxuXHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhlKSA9PiBzZXRTZWFyY2goZS50YXJnZXQudmFsdWUpfVxuXHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9XCJTZWFyY2ggdGltZS4uLlwiXG5cdFx0XHRcdFx0XHRyZWY9e2lucHV0UmVmfVxuXHRcdFx0XHRcdFx0dmFsdWU9e3NlYXJjaH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PFNjcm9sbEFyZWEgY2xhc3NOYW1lPVwiaC1bMjAwcHhdXCIgb25XaGVlbD17aGFuZGxlV2hlZWx9PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicC0xXCI+XG5cdFx0XHRcdFx0XHR7ZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMCA/IChcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJweS02IHRleHQtY2VudGVyIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0Ti9BXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdFx0ZmlsdGVyZWRPcHRpb25zLm1hcCgodGltZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHRpbWVTdHJpbmcgPSBmb3JtYXRUaW1lKHRpbWUpXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgaXNTZWxlY3RlZCA9IHRpbWUgPT09IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdDxidXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQncmVsYXRpdmUgZmxleCB3LWZ1bGwgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgaXRlbXMtY2VudGVyIHJvdW5kZWQtc20gcHgtMiBweS0xLjUgdGV4dC1zbSBvdXRsaW5lLW5vbmUgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlzU2VsZWN0ZWQgJiYgJ2JnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e3RpbWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdCh0aW1lKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0aW1lU3RyaW5nfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9TY3JvbGxBcmVhPlxuXHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHQ8L1BvcG92ZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBUaW1lRm9ybWF0IH0gZnJvbSAnQC90eXBlcydcblxuaW50ZXJmYWNlIFVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXJQcm9wcyB7XG5cdHRpbWVGb3JtYXQ/OiBUaW1lRm9ybWF0XG5cdG1pblRpbWU/OiBzdHJpbmdcblx0bWF4VGltZT86IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlcih7XG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdG1pblRpbWUgPSAnMDA6MDAnLFxuXHRtYXhUaW1lID0gJzIzOjQ1Jyxcbn06IFVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXJQcm9wcykge1xuXHQvLyBHZW5lcmF0ZSB0aW1lIG9wdGlvbnMgKDE1LW1pbnV0ZSBpbnRlcnZhbHMpIHdpdGhpbiBtaW4vbWF4IHJhbmdlXG5cdGNvbnN0IHRpbWVPcHRpb25zID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0Y29uc3QgdGltZXM6IHN0cmluZ1tdID0gW11cblx0XHRjb25zdCBbbWluSG91ciwgbWluTWludXRlXSA9IG1pblRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRcdGNvbnN0IFttYXhIb3VyLCBtYXhNaW51dGVdID0gbWF4VGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cblx0XHRjb25zdCBtaW5Ub3RhbE1pbnV0ZXMgPSBtaW5Ib3VyICogNjAgKyBtaW5NaW51dGVcblx0XHRjb25zdCBtYXhUb3RhbE1pbnV0ZXMgPSBtYXhIb3VyICogNjAgKyBtYXhNaW51dGVcblxuXHRcdGZvciAoXG5cdFx0XHRsZXQgdG90YWxNaW51dGVzID0gbWluVG90YWxNaW51dGVzO1xuXHRcdFx0dG90YWxNaW51dGVzIDw9IG1heFRvdGFsTWludXRlcztcblx0XHRcdHRvdGFsTWludXRlcyArPSAxNVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHRvdGFsTWludXRlcyAvIDYwKVxuXHRcdFx0Y29uc3QgbWludXRlcyA9IHRvdGFsTWludXRlcyAlIDYwXG5cblx0XHRcdGNvbnN0IHRpbWVTdHJpbmcgPSBgJHtob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7bWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YFxuXHRcdFx0dGltZXMucHVzaCh0aW1lU3RyaW5nKVxuXHRcdH1cblxuXHRcdHJldHVybiB0aW1lc1xuXHR9LCBbbWluVGltZSwgbWF4VGltZV0pXG5cblx0Y29uc3QgZm9ybWF0VGltZSA9ICh0aW1lOiBzdHJpbmcpID0+IHtcblx0XHRjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cdFx0Y29uc3QgcGVyaW9kID0gaG91cnMgPj0gMTIgPyAnUE0nIDogJ0FNJ1xuXHRcdGNvbnN0IGRpc3BsYXlIb3VycyA9IGhvdXJzID09PSAwID8gMTIgOiBob3VycyA+IDEyID8gaG91cnMgLSAxMiA6IGhvdXJzXG5cblx0XHRpZiAodGltZUZvcm1hdCA9PT0gJzI0LWhvdXInKSB7XG5cdFx0XHRyZXR1cm4gYCR7aG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWBcblx0XHR9XG5cblx0XHRyZXR1cm4gYCR7ZGlzcGxheUhvdXJzfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfSAke3BlcmlvZH1gXG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdHRpbWVPcHRpb25zLFxuXHRcdGZvcm1hdFRpbWUsXG5cdH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgV0VFS19EQVlTX05VTUJFUl9NQVAgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgc3BlY2lmaWMgZGF0ZSBpcyBhIGJ1c2luZXNzIGRheS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSBUaGUgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIGJ1c2luZXNzSG91cnMgVGhlIGJ1c2luZXNzIGhvdXJzIGNvbmZpZ3VyYXRpb24gKHNpbmdsZSBvciBhcnJheSlcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGRhdGUgaXMgYSBidXNpbmVzcyBkYXksIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgY29uc3QgaXNCdXNpbmVzc0RheSA9IChcblx0ZGF0ZTogRGF5anMsXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG4pOiBib29sZWFuID0+IHtcblx0aWYgKCFidXNpbmVzc0hvdXJzKSB7XG5cdFx0cmV0dXJuIHRydWVcblx0fVxuXG5cdGxldCBoYXNNYXRjaCA9IGZhbHNlXG5cdHByb2Nlc3NCdXNpbmVzc0hvdXJzKGJ1c2luZXNzSG91cnMsIHtcblx0XHRkYXRlLFxuXHRcdG9uTWF0Y2g6ICgpID0+IHtcblx0XHRcdGhhc01hdGNoID0gdHJ1ZVxuXHRcdH0sXG5cdH0pXG5cblx0cmV0dXJuIGhhc01hdGNoXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXNCdXNpbmVzc0hvdXJPcHRpb25zIHtcblx0ZGF0ZTogRGF5anNcblx0aG91cj86IG51bWJlclxuXHRtaW51dGU/OiBudW1iZXJcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBzcGVjaWZpYyBob3VyIG9uIGEgc3BlY2lmaWMgZGF0ZSBpcyB3aXRoaW4gYnVzaW5lc3MgaG91cnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIGNoZWNraW5nIGJ1c2luZXNzIGhvdXJzXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0aW1lIGlzIHdpdGhpbiBidXNpbmVzcyBob3VycywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0J1c2luZXNzSG91ciA9ICh7XG5cdGRhdGUsXG5cdGhvdXIsXG5cdG1pbnV0ZSA9IDAsXG5cdGJ1c2luZXNzSG91cnMsXG59OiBJc0J1c2luZXNzSG91ck9wdGlvbnMpOiBib29sZWFuID0+IHtcblx0Ly8gSWYgYnVzaW5lc3MgaG91cnMgYXJlIG5vdCBjb25maWd1cmVkLCBjb25zaWRlciBldmVyeXRoaW5nIGFzIFwiYnVzaW5lc3MgaG91cnNcIlxuXHRpZiAoIWJ1c2luZXNzSG91cnMpIHtcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cblx0Ly8gSWYgaG91ciBpcyBub3QgcHJvdmlkZWQsIHdlIGFzc3VtZSB0aGUgdXNlciBvbmx5IGNhcmVzIGFib3V0IHRoZSBkYXlcblx0aWYgKGhvdXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBpc0J1c2luZXNzRGF5KGRhdGUsIGJ1c2luZXNzSG91cnMpXG5cdH1cblxuXHRsZXQgaXNJbkJ1c2luZXNzSG91ciA9IGZhbHNlXG5cdGNvbnN0IGN1cnJlbnRNaW51dGVzID0gaG91ciAqIDYwICsgbWludXRlXG5cblx0cHJvY2Vzc0J1c2luZXNzSG91cnMoYnVzaW5lc3NIb3Vycywge1xuXHRcdGRhdGUsXG5cdFx0b25NYXRjaDogKGNvbmZpZykgPT4ge1xuXHRcdFx0Ly8gQ2hlY2sgdGltZSBhZ2FpbnN0IHRoaXMgc3BlY2lmaWMgY29uZmlnXG5cdFx0XHQvLyBzdGFydFRpbWUgYW5kIGVuZFRpbWUgYXJlIG51bWJlcnMgKDAtMjQpXG5cdFx0XHRjb25zdCBzdGFydEggPSBjb25maWcuc3RhcnRUaW1lID8/IDlcblx0XHRcdGNvbnN0IGVuZEggPSBjb25maWcuZW5kVGltZSA/PyAxN1xuXG5cdFx0XHRjb25zdCBzdGFydE1pbnV0ZXMgPSBzdGFydEggKiA2MFxuXHRcdFx0Y29uc3QgZW5kTWludXRlcyA9IGVuZEggKiA2MFxuXG5cdFx0XHRpZiAoY3VycmVudE1pbnV0ZXMgPj0gc3RhcnRNaW51dGVzICYmIGN1cnJlbnRNaW51dGVzIDwgZW5kTWludXRlcykge1xuXHRcdFx0XHRpc0luQnVzaW5lc3NIb3VyID0gdHJ1ZVxuXHRcdFx0fVxuXHRcdH0sXG5cdH0pXG5cblx0cmV0dXJuIGlzSW5CdXNpbmVzc0hvdXJcbn1cblxuLyoqXG4gKiBIZWxwZXIgdG8gcHJvY2VzcyBhIGJ1c2luZXNzIGhvdXJzIGNvbmZpZ3VyYXRpb24gYW5kIHVwZGF0ZSB0aGUgcmFuZ2UuXG4gKi9cbmV4cG9ydCBjb25zdCBwcm9jZXNzQnVzaW5lc3NIb3VycyA9IChcblx0Ymg6IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10gfCB1bmRlZmluZWQsXG5cdG9wdGlvbnM6IHtcblx0XHRkYXRlPzogRGF5anNcblx0XHRvbk1hdGNoOiAoY29uZmlnOiBCdXNpbmVzc0hvdXJzKSA9PiB2b2lkXG5cdH1cbikgPT4ge1xuXHRjb25zdCB7IGRhdGUsIG9uTWF0Y2ggfSA9IG9wdGlvbnNcblx0aWYgKCFiaCkgcmV0dXJuXG5cblx0Y29uc3QgY29uZmlncyA9IEFycmF5LmlzQXJyYXkoYmgpID8gYmggOiBbYmhdXG5cblx0Zm9yIChjb25zdCBjb25maWcgb2YgY29uZmlncykge1xuXHRcdGlmIChkYXRlICYmIGNvbmZpZy5kYXlzT2ZXZWVrKSB7XG5cdFx0XHRjb25zdCBkYXlPZldlZWsgPSBkYXRlLmRheSgpXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNvbmZpZy5kYXlzT2ZXZWVrLnNvbWUoKGQpID0+IFdFRUtfREFZU19OVU1CRVJfTUFQW2RdID09PSBkYXlPZldlZWspXG5cdFx0XHQpIHtcblx0XHRcdFx0b25NYXRjaChjb25maWcpXG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9uTWF0Y2goY29uZmlnKVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1c2luZXNzSG91cnNSYW5nZSB7XG5cdG1pblN0YXJ0OiBudW1iZXJcblx0bWF4RW5kOiBudW1iZXJcblx0aGFzQnVzaW5lc3NIb3VyczogYm9vbGVhblxufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHVuaW9uIG9mIGJ1c2luZXNzIGhvdXJzIHJhbmdlcyBhY3Jvc3MgbXVsdGlwbGUgZGF0ZXMgYW5kL29yIHJlc291cmNlIGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlID0gKG9wdGlvbnM6IHtcblx0YWxsRGF0ZXM6IERheWpzW11cblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzPzogKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW11cblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG59KTogQnVzaW5lc3NIb3Vyc1JhbmdlID0+IHtcblx0Y29uc3Qge1xuXHRcdGFsbERhdGVzLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzID0gW10sXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdH0gPSBvcHRpb25zXG5cblx0bGV0IG1pblN0YXJ0ID0gMjRcblx0bGV0IG1heEVuZCA9IDBcblx0bGV0IGhhc0J1c2luZXNzSG91cnMgPSBmYWxzZVxuXG5cdGNvbnN0IG9uTWF0Y2ggPSAoY29uZmlnOiBCdXNpbmVzc0hvdXJzKSA9PiB7XG5cdFx0aGFzQnVzaW5lc3NIb3VycyA9IHRydWVcblx0XHRtaW5TdGFydCA9IE1hdGgubWluKG1pblN0YXJ0LCBjb25maWcuc3RhcnRUaW1lID8/IDkpXG5cdFx0bWF4RW5kID0gTWF0aC5tYXgobWF4RW5kLCBjb25maWcuZW5kVGltZSA/PyAxNylcblx0fVxuXG5cdC8vIFByb2Nlc3MgZ2xvYmFsIGFuZCByZXNvdXJjZSBidXNpbmVzcyBob3VycyBmb3IgZWFjaCBkYXRlXG5cdGZvciAoY29uc3QgZGF0ZSBvZiBhbGxEYXRlcykge1xuXHRcdHByb2Nlc3NCdXNpbmVzc0hvdXJzKGJ1c2luZXNzSG91cnMsIHsgZGF0ZSwgb25NYXRjaCB9KVxuXHRcdGZvciAoY29uc3QgcmJoIG9mIHJlc291cmNlQnVzaW5lc3NIb3Vycykge1xuXHRcdFx0cHJvY2Vzc0J1c2luZXNzSG91cnMocmJoLCB7IGRhdGUsIG9uTWF0Y2ggfSlcblx0XHR9XG5cdH1cblxuXHQvLyBGYWxsYmFjayBsb2dpYyBpZiBubyBidXNpbmVzcyBob3VycyBmb3VuZCBmb3Igc3BlY2lmaWMgZGF0ZXNcblx0aWYgKCFoYXNCdXNpbmVzc0hvdXJzICYmIGhpZGVOb25CdXNpbmVzc0hvdXJzKSB7XG5cdFx0cHJvY2Vzc0J1c2luZXNzSG91cnMoYnVzaW5lc3NIb3VycywgeyBvbk1hdGNoIH0pXG5cdFx0Zm9yIChjb25zdCByYmggb2YgcmVzb3VyY2VCdXNpbmVzc0hvdXJzKSB7XG5cdFx0XHRwcm9jZXNzQnVzaW5lc3NIb3VycyhyYmgsIHsgb25NYXRjaCB9KVxuXHRcdH1cblxuXHRcdC8vIEZpbmFsIGZhbGxiYWNrIHRvIGRlZmF1bHQgOS0xNyBpZiBzdGlsbCBub3RoaW5nXG5cdFx0aWYgKCFoYXNCdXNpbmVzc0hvdXJzKSB7XG5cdFx0XHRtaW5TdGFydCA9IDlcblx0XHRcdG1heEVuZCA9IDE3XG5cdFx0XHRoYXNCdXNpbmVzc0hvdXJzID0gdHJ1ZVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IG1pblN0YXJ0LCBtYXhFbmQsIGhhc0J1c2luZXNzSG91cnMgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBjYWxjdWxhdGVCdXNpbmVzc0hvdXJzUmFuZ2UgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2J1c2luZXNzLWhvdXJzJ1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuZXhwb3J0IGNvbnN0IGJ1aWxkRGF0ZVRpbWUgPSAoXG5cdGRhdGU6IERhdGUsXG5cdHRpbWU6IHN0cmluZyxcblx0aXNBbGxEYXk6IGJvb2xlYW5cbik6IERheWpzID0+IHtcblx0Y29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRjb25zdCBiYXNlID0gZGF5anMoZGF0ZSkuaG91cihob3VycykubWludXRlKG1pbnV0ZXMpXG5cdHJldHVybiBpc0FsbERheSA/IGJhc2UuaG91cigwKS5taW51dGUoMCkgOiBiYXNlXG59XG5cbmV4cG9ydCBjb25zdCBidWlsZEVuZERhdGVUaW1lID0gKFxuXHRkYXRlOiBEYXRlLFxuXHR0aW1lOiBzdHJpbmcsXG5cdGlzQWxsRGF5OiBib29sZWFuXG4pOiBEYXlqcyA9PiB7XG5cdGNvbnN0IFtob3VycywgbWludXRlc10gPSB0aW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblx0Y29uc3QgYmFzZSA9IGRheWpzKGRhdGUpLmhvdXIoaG91cnMpLm1pbnV0ZShtaW51dGVzKVxuXHRyZXR1cm4gaXNBbGxEYXkgPyBiYXNlLmhvdXIoMjMpLm1pbnV0ZSg1OSkgOiBiYXNlXG59XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lQ29uc3RyYWludHMgPSAoXG5cdGRhdGU6IERhdGUsXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG4pID0+IHtcblx0aWYgKCFidXNpbmVzc0hvdXJzKSByZXR1cm4geyBtaW46ICcwMDowMCcsIG1heDogJzIzOjU5JyB9XG5cblx0Y29uc3QgZGF5anNEYXRlID0gZGF5anMoZGF0ZSlcblxuXHRjb25zdCB7IG1pblN0YXJ0LCBtYXhFbmQsIGhhc0J1c2luZXNzSG91cnMgfSA9IGNhbGN1bGF0ZUJ1c2luZXNzSG91cnNSYW5nZSh7XG5cdFx0YWxsRGF0ZXM6IFtkYXlqc0RhdGVdLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnM6IGZhbHNlLFxuXHR9KVxuXG5cdGlmICghaGFzQnVzaW5lc3NIb3Vycykge1xuXHRcdHJldHVybiB7IG1pbjogJzAwOjAwJywgbWF4OiAnMjM6NTknIH1cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bWluOiBgJHttaW5TdGFydC50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OjAwYCxcblx0XHRtYXg6IGAkeyhtYXhFbmQgLSAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OjQ1YCxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFdlZWtkYXkgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgeyBDYXJkLCBDYXJkQ29udGVudCwgQ2FyZEhlYWRlciwgQ2FyZFRpdGxlIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NhcmQnXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9jaGVja2JveCdcbmltcG9ydCB7IERhdGVQaWNrZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGF0ZS1waWNrZXInXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9pbnB1dCdcbmltcG9ydCB7IExhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2xhYmVsJ1xuaW1wb3J0IHtcblx0U2VsZWN0LFxuXHRTZWxlY3RDb250ZW50LFxuXHRTZWxlY3RJdGVtLFxuXHRTZWxlY3RUcmlnZ2VyLFxuXHRTZWxlY3RWYWx1ZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3NlbGVjdCdcbmltcG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5jb25zdCBGUkVRX01BUCA9IHtcblx0REFJTFk6IFJSdWxlLkRBSUxZLFxuXHRXRUVLTFk6IFJSdWxlLldFRUtMWSxcblx0TU9OVEhMWTogUlJ1bGUuTU9OVEhMWSxcblx0WUVBUkxZOiBSUnVsZS5ZRUFSTFksXG59IGFzIGNvbnN0XG5jb25zdCBGUkVRX1RPX1NUUiA9IE9iamVjdC5mcm9tRW50cmllcyhcblx0T2JqZWN0LmVudHJpZXMoRlJFUV9NQVApLm1hcCgoW2ssIHZdKSA9PiBbdiwga10pXG4pIGFzIFJlY29yZDxudW1iZXIsIHN0cmluZz5cbmNvbnN0IFdFRUtEQVlTID0gW1xuXHRSUnVsZS5TVSxcblx0UlJ1bGUuTU8sXG5cdFJSdWxlLlRVLFxuXHRSUnVsZS5XRSxcblx0UlJ1bGUuVEgsXG5cdFJSdWxlLkZSLFxuXHRSUnVsZS5TQSxcbl1cbmNvbnN0IERBWV9LRVlTID0gWydzdW4nLCAnbW9uJywgJ3R1ZScsICd3ZWQnLCAndGh1JywgJ2ZyaScsICdzYXQnXVxuY29uc3QgcGFyc2VOdW0gPSAodjogc3RyaW5nKSA9PiBNYXRoLm1heCgxLCBOdW1iZXIucGFyc2VJbnQodiwgMTApIHx8IDEpXG5cbmNvbnN0IGdldERlc2NyaXB0aW9uID0gKFxuXHRvcHRzOiBSUnVsZU9wdGlvbnMgfCBudWxsLFxuXHR0OiAoazogc3RyaW5nKSA9PiBzdHJpbmdcbikgPT4ge1xuXHRpZiAoIW9wdHMpIHtcblx0XHRyZXR1cm4gdCgnY3VzdG9tUmVjdXJyZW5jZScpXG5cdH1cblx0dHJ5IHtcblx0XHRjb25zdCB0ZXh0ID0gbmV3IFJSdWxlKG9wdHMpLnRvVGV4dCgpXG5cdFx0cmV0dXJuIHRleHQgJiYgIXRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZXJyb3InKVxuXHRcdFx0PyB0ZXh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGV4dC5zbGljZSgxKVxuXHRcdFx0OiB0KCdjdXN0b21SZWN1cnJlbmNlJylcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuXHR9XG59XG5cbmludGVyZmFjZSBQcm9wcyB7XG5cdHZhbHVlPzogUlJ1bGVPcHRpb25zIHwgbnVsbFxuXHRvbkNoYW5nZTogKHY6IFJSdWxlT3B0aW9ucyB8IG51bGwpID0+IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IFJlY3VycmVuY2VFZGl0b3I6IFJlYWN0LkZDPFByb3BzPiA9ICh7IHZhbHVlLCBvbkNoYW5nZSB9KSA9PiB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGN0eCkgPT4gKHsgdDogY3R4LnQgfSkpXG5cdGNvbnN0IFtzaG93LCBzZXRTaG93XSA9IHVzZVN0YXRlKCEhdmFsdWUpXG5cdGNvbnN0IFtvcHRzLCBzZXRPcHRzXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KCgpID0+IHZhbHVlIHx8IG51bGwpXG5cblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IERBWV9LRVlTLm1hcCgoaywgaSkgPT4gKHsgdmFsdWU6IFdFRUtEQVlTW2ldLCBsYWJlbDogdChrKSB9KSksXG5cdFx0W3RdXG5cdClcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdHNldFNob3coISF2YWx1ZSlcblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHNldE9wdHModmFsdWUpXG5cdFx0fVxuXHR9LCBbdmFsdWVdKVxuXG5cdGNvbnN0IHVwZGF0ZSA9ICh1OiBQYXJ0aWFsPFJSdWxlT3B0aW9ucz4pID0+IHtcblx0XHRpZiAoIW9wdHMpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRjb25zdCBuZXh0ID0geyAuLi5vcHRzLCAuLi51IH1cblx0XHRzZXRPcHRzKG5leHQpXG5cdFx0b25DaGFuZ2Uoc2hvdyA/IG5leHQgOiBudWxsKVxuXHR9XG5cblx0Y29uc3QgdG9nZ2xlID0gKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcblx0XHRzZXRTaG93KGNoZWNrZWQpXG5cdFx0aWYgKCFjaGVja2VkKSB7XG5cdFx0XHRvbkNoYW5nZShudWxsKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGlmIChvcHRzKSB7XG5cdFx0XHRvbkNoYW5nZShvcHRzKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGNvbnN0IGRlZiA9IHsgZnJlcTogUlJ1bGUuREFJTFksIGludGVydmFsOiAxIH0gYXMgUlJ1bGVPcHRpb25zXG5cdFx0c2V0T3B0cyhkZWYpXG5cdFx0b25DaGFuZ2UoZGVmKVxuXHR9XG5cblx0Y29uc3QgdG9nZ2xlRGF5ID0gKGk6IG51bWJlcikgPT4ge1xuXHRcdGNvbnN0IGN1cnIgPSAob3B0cz8uYnl3ZWVrZGF5IGFzIFdlZWtkYXlbXSkgfHwgW11cblx0XHRjb25zdCBkYXkgPSBXRUVLREFZU1tpXVxuXHRcdGNvbnN0IG5leHQgPSBjdXJyLmluY2x1ZGVzKGRheSlcblx0XHRcdD8gY3Vyci5maWx0ZXIoKGQpID0+IGQgIT09IGRheSlcblx0XHRcdDogWy4uLmN1cnIsIGRheV1cblx0XHR1cGRhdGUoeyBieXdlZWtkYXk6IG5leHQubGVuZ3RoID8gbmV4dCA6IHVuZGVmaW5lZCB9KVxuXHR9XG5cblx0Y29uc3Qgc2V0RW5kVHlwZSA9ICh0eXBlOiAnbmV2ZXInIHwgJ2NvdW50JyB8ICd1bnRpbCcpID0+IHtcblx0XHRjb25zdCB1OiBQYXJ0aWFsPFJSdWxlT3B0aW9ucz4gPSB7IGNvdW50OiB1bmRlZmluZWQsIHVudGlsOiB1bmRlZmluZWQgfVxuXHRcdGlmICh0eXBlID09PSAnY291bnQnKSB7XG5cdFx0XHR1LmNvdW50ID0gb3B0cz8uY291bnQgfHwgMVxuXHRcdH1cblx0XHRpZiAodHlwZSA9PT0gJ3VudGlsJykge1xuXHRcdFx0dS51bnRpbCA9IG9wdHM/LnVudGlsIHx8IGRheWpzKCkuYWRkKDEsICdtb250aCcpLmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXHRcdH1cblx0XHR1cGRhdGUodSlcblx0fVxuXG5cdGNvbnN0IGVuZFR5cGUgPSBvcHRzPy51bnRpbCA/ICd1bnRpbCcgOiBvcHRzPy5jb3VudCA/ICdjb3VudCcgOiAnbmV2ZXInXG5cdGNvbnN0IGZyZXEgPSBGUkVRX1RPX1NUUltvcHRzPy5mcmVxID8/IFJSdWxlLkRBSUxZXSB8fCAnREFJTFknXG5cdGNvbnN0IGJ5d2Vla2RheSA9IEFycmF5LmlzQXJyYXkob3B0cz8uYnl3ZWVrZGF5KVxuXHRcdD8gb3B0cy5ieXdlZWtkYXlcblx0XHQ6IG9wdHM/LmJ5d2Vla2RheVxuXHRcdFx0PyBbb3B0cy5ieXdlZWtkYXldXG5cdFx0XHQ6IFtdXG5cblx0cmV0dXJuIChcblx0XHQ8Q2FyZCBkYXRhLXRlc3RpZD1cInJlY3VycmVuY2UtZWRpdG9yXCI+XG5cdFx0XHQ8Q2FyZEhlYWRlciBjbGFzc05hbWU9XCJwYi0zXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRjaGVja2VkPXtzaG93fVxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ0b2dnbGUtcmVjdXJyZW5jZVwiXG5cdFx0XHRcdFx0XHRpZD1cInJlY3VycmluZ1wiXG5cdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9e3RvZ2dsZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDxDYXJkVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXBlYXQnKX08L0NhcmRUaXRsZT5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdHtzaG93ICYmIHZhbHVlICYmIChcblx0XHRcdFx0XHQ8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0e2dldERlc2NyaXB0aW9uKHZhbHVlLCB0KX1cblx0XHRcdFx0XHQ8L3A+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L0NhcmRIZWFkZXI+XG5cblx0XHRcdHtzaG93ICYmIChcblx0XHRcdFx0PENhcmRDb250ZW50IGNsYXNzTmFtZT1cInB0LTBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNFwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC00XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwiZnJlcXVlbmN5XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7dCgncmVwZWF0cycpfVxuXHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PFNlbGVjdFxuXHRcdFx0XHRcdFx0XHRcdFx0b25WYWx1ZUNoYW5nZT17KGYpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7IGZyZXE6IEZSRVFfTUFQW2YgYXMga2V5b2YgdHlwZW9mIEZSRVFfTUFQXSB9KVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2ZyZXF9XG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PFNlbGVjdFRyaWdnZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJmcmVxdWVuY3ktc2VsZWN0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJmcmVxdWVuY3lcIlxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0VmFsdWUgLz5cblx0XHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0VHJpZ2dlcj5cblx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RDb250ZW50PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7T2JqZWN0LmtleXMoRlJFUV9NQVApLm1hcCgoZikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RJdGVtIGtleT17Zn0gdmFsdWU9e2Z9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoZi50b0xvd2VyQ2FzZSgpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdEl0ZW0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9TZWxlY3RDb250ZW50PlxuXHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9XCJpbnRlcnZhbFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e3QoJ2V2ZXJ5Jyl9XG5cdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRpZD1cImludGVydmFsXCJcblx0XHRcdFx0XHRcdFx0XHRcdG1pbj1cIjFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhlKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGUoeyBpbnRlcnZhbDogcGFyc2VOdW0oZS50YXJnZXQudmFsdWUpIH0pXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwibnVtYmVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtvcHRzPy5pbnRlcnZhbCB8fCAxfVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdHtvcHRzPy5mcmVxID09PSBSUnVsZS5XRUVLTFkgJiYgKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ3JlcGVhdE9uJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0xIG10LTFcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHt3ZWVrRGF5cy5tYXAoKGQsIGkpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTFcIiBrZXk9e2QubGFiZWx9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17Ynl3ZWVrZGF5LmluY2x1ZGVzKGQudmFsdWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9e2BkYXktJHtpfWB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eygpID0+IHRvZ2dsZURheShpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC14cyBjdXJzb3ItcG9pbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRodG1sRm9yPXtgZGF5LSR7aX1gfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtkLmxhYmVsfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KX1cblxuXHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIj57dCgnZW5kcycpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yIG10LTFcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2VuZFR5cGUgPT09ICduZXZlcid9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwibmV2ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eygpID0+IHNldEVuZFR5cGUoJ25ldmVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwibmV2ZXJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ25ldmVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17ZW5kVHlwZSA9PT0gJ2NvdW50J31cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJhZnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gc2V0RW5kVHlwZSgnY291bnQnKX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9XCJhZnRlclwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dCgnYWZ0ZXInKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHR7ZW5kVHlwZSA9PT0gJ2NvdW50JyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtNiB3LTE2IHRleHQteHNcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiY291bnQtaW5wdXRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1pbj1cIjFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZSkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7IGNvdW50OiBwYXJzZU51bShlLnRhcmdldC52YWx1ZSkgfSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cIm51bWJlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e29wdHM/LmNvdW50IHx8IDF9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdvY2N1cnJlbmNlcycpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2VuZFR5cGUgPT09ICd1bnRpbCd9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwib25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eygpID0+IHNldEVuZFR5cGUoJ3VudGlsJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwib25cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ29uJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0e2VuZFR5cGUgPT09ICd1bnRpbCcgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8RGF0ZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtNlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZT17b3B0cz8udW50aWwgPz8gdW5kZWZpbmVkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZCkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVudGlsOiBkID8gZGF5anMoZCkuZW5kT2YoJ2RheScpLnRvRGF0ZSgpIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0NhcmRDb250ZW50PlxuXHRcdFx0KX1cblx0XHQ8L0NhcmQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gQ2FyZCh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J3RleHQtY2FyZC1mb3JlZ3JvdW5kIGZsZXggZmxleC1jb2wgZ2FwLTYgcm91bmRlZC14bCBib3JkZXIgc2hhZG93LXNtJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkSGVhZGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnQGNvbnRhaW5lci9jYXJkLWhlYWRlciBncmlkIGF1dG8tcm93cy1taW4gZ3JpZC1yb3dzLVthdXRvX2F1dG9dIGl0ZW1zLXN0YXJ0IGdhcC0xLjUgcC00IHBiLTAgaGFzLWRhdGEtW3Nsb3Q9Y2FyZC1hY3Rpb25dOmdyaWQtY29scy1bMWZyX2F1dG9dJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC1oZWFkZXJcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZFRpdGxlKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdsZWFkaW5nLW5vbmUgZm9udC1zZW1pYm9sZCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLXRpdGxlXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmREZXNjcmlwdGlvbih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20nLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC1kZXNjcmlwdGlvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkQWN0aW9uKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnY29sLXN0YXJ0LTIgcm93LXNwYW4tMiByb3ctc3RhcnQtMSBzZWxmLXN0YXJ0IGp1c3RpZnktc2VsZi1lbmQnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWFjdGlvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkQ29udGVudCh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbigncC00IHB0LTAnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC1jb250ZW50XCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRGb290ZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggaXRlbXMtY2VudGVyIHB4LTYgWy5ib3JkZXItdF06cHQtNicsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWZvb3RlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQge1xuXHRDYXJkLFxuXHRDYXJkQWN0aW9uLFxuXHRDYXJkQ29udGVudCxcblx0Q2FyZERlc2NyaXB0aW9uLFxuXHRDYXJkRm9vdGVyLFxuXHRDYXJkSGVhZGVyLFxuXHRDYXJkVGl0bGUsXG59XG4iLAogICAgImltcG9ydCAqIGFzIFNlbGVjdFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2VsZWN0J1xuaW1wb3J0IHsgQ2hlY2tJY29uLCBDaGV2cm9uRG93bkljb24sIENoZXZyb25VcEljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBTZWxlY3Qoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gPFNlbGVjdFByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cInNlbGVjdFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0R3JvdXAoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5Hcm91cD4pIHtcblx0cmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuR3JvdXAgZGF0YS1zbG90PVwic2VsZWN0LWdyb3VwXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RWYWx1ZSh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlZhbHVlPikge1xuXHRyZXR1cm4gPFNlbGVjdFByaW1pdGl2ZS5WYWx1ZSBkYXRhLXNsb3Q9XCJzZWxlY3QtdmFsdWVcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdFRyaWdnZXIoe1xuXHRjbGFzc05hbWUsXG5cdHNpemUgPSAnZGVmYXVsdCcsXG5cdGNoaWxkcmVuLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5UcmlnZ2VyPiAmIHtcblx0c2l6ZT86ICdzbScgfCAnZGVmYXVsdCdcbn0pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlRyaWdnZXJcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFwiYm9yZGVyLWlucHV0IGRhdGEtW3BsYWNlaG9sZGVyXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgWyZfc3ZnOm5vdChbY2xhc3MqPSd0ZXh0LSddKV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlIGRhcms6YmctaW5wdXQvMzAgZGFyazpob3ZlcjpiZy1pbnB1dC81MCBmbGV4IHctZml0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcm91bmRlZC1tZCBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHgtMyBweS0yIHRleHQtc20gd2hpdGVzcGFjZS1ub3dyYXAgc2hhZG93LXhzIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAgZGF0YS1bc2l6ZT1kZWZhdWx0XTpoLTkgZGF0YS1bc2l6ZT1zbV06aC04ICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmxpbmUtY2xhbXAtMSAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpmbGV4ICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOml0ZW1zLWNlbnRlciAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpnYXAtMiBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTRcIixcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zaXplPXtzaXplfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXRyaWdnZXJcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDxTZWxlY3RQcmltaXRpdmUuSWNvbiBhc0NoaWxkPlxuXHRcdFx0XHQ8Q2hldnJvbkRvd25JY29uIGNsYXNzTmFtZT1cInNpemUtNCBvcGFjaXR5LTUwXCIgLz5cblx0XHRcdDwvU2VsZWN0UHJpbWl0aXZlLkljb24+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuVHJpZ2dlcj5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RDb250ZW50KHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0cG9zaXRpb24gPSAncG9wcGVyJyxcblx0YWxpZ24gPSAnY2VudGVyJyxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuQ29udGVudD4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlBvcnRhbD5cblx0XHRcdDxTZWxlY3RQcmltaXRpdmUuQ29udGVudFxuXHRcdFx0XHRhbGlnbj17YWxpZ259XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2JnLXBvcG92ZXIgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGRhdGEtW3NpZGU9Ym90dG9tXTpzbGlkZS1pbi1mcm9tLXRvcC0yIGRhdGEtW3NpZGU9bGVmdF06c2xpZGUtaW4tZnJvbS1yaWdodC0yIGRhdGEtW3NpZGU9cmlnaHRdOnNsaWRlLWluLWZyb20tbGVmdC0yIGRhdGEtW3NpZGU9dG9wXTpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yIHJlbGF0aXZlIHotNTAgbWF4LWgtKC0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtYXZhaWxhYmxlLWhlaWdodCkgbWluLXctWzhyZW1dIG9yaWdpbi0oLS1yYWRpeC1zZWxlY3QtY29udGVudC10cmFuc2Zvcm0tb3JpZ2luKSBvdmVyZmxvdy14LWhpZGRlbiBvdmVyZmxvdy15LWF1dG8gcm91bmRlZC1tZCBib3JkZXIgc2hhZG93LW1kJyxcblx0XHRcdFx0XHRwb3NpdGlvbiA9PT0gJ3BvcHBlcicgJiZcblx0XHRcdFx0XHRcdCdkYXRhLVtzaWRlPWJvdHRvbV06dHJhbnNsYXRlLXktMSBkYXRhLVtzaWRlPWxlZnRdOi10cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9cmlnaHRdOnRyYW5zbGF0ZS14LTEgZGF0YS1bc2lkZT10b3BdOi10cmFuc2xhdGUteS0xJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LWNvbnRlbnRcIlxuXHRcdFx0XHRwb3NpdGlvbj17cG9zaXRpb259XG5cdFx0XHRcdHsuLi5wcm9wc31cblx0XHRcdD5cblx0XHRcdFx0PFNlbGVjdFNjcm9sbFVwQnV0dG9uIC8+XG5cdFx0XHRcdDxTZWxlY3RQcmltaXRpdmUuVmlld3BvcnRcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J3AtMScsXG5cdFx0XHRcdFx0XHRwb3NpdGlvbiA9PT0gJ3BvcHBlcicgJiZcblx0XHRcdFx0XHRcdFx0J2gtW3ZhcigtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLWhlaWdodCldIHctZnVsbCBtaW4tdy1bdmFyKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItd2lkdGgpXSBzY3JvbGwtbXktMSdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5WaWV3cG9ydD5cblx0XHRcdFx0PFNlbGVjdFNjcm9sbERvd25CdXR0b24gLz5cblx0XHRcdDwvU2VsZWN0UHJpbWl0aXZlLkNvbnRlbnQ+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuUG9ydGFsPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdExhYmVsKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5MYWJlbD4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLkxhYmVsXG5cdFx0XHRjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgcHgtMiBweS0xLjUgdGV4dC14cycsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3QtbGFiZWxcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0SXRlbSh7XG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkl0ZW0+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5JdGVtXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcImZvY3VzOmJnLWFjY2VudCBmb2N1czp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIFsmX3N2Zzpub3QoW2NsYXNzKj0ndGV4dC0nXSldOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCByZWxhdGl2ZSBmbGV4IHctZnVsbCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1zbSBweS0xLjUgcHItOCBwbC0yIHRleHQtc20gb3V0bGluZS1oaWRkZW4gc2VsZWN0LW5vbmUgZGF0YS1bZGlzYWJsZWRdOnBvaW50ZXItZXZlbnRzLW5vbmUgZGF0YS1bZGlzYWJsZWRdOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00ICo6W3NwYW5dOmxhc3Q6ZmxleCAqOltzcGFuXTpsYXN0Oml0ZW1zLWNlbnRlciAqOltzcGFuXTpsYXN0OmdhcC0yXCIsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1pdGVtXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0yIGZsZXggc2l6ZS0zLjUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG5cdFx0XHRcdDxTZWxlY3RQcmltaXRpdmUuSXRlbUluZGljYXRvcj5cblx0XHRcdFx0XHQ8Q2hlY2tJY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG5cdFx0XHRcdDwvU2VsZWN0UHJpbWl0aXZlLkl0ZW1JbmRpY2F0b3I+XG5cdFx0XHQ8L3NwYW4+XG5cdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLkl0ZW1UZXh0PntjaGlsZHJlbn08L1NlbGVjdFByaW1pdGl2ZS5JdGVtVGV4dD5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5JdGVtPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNlcGFyYXRvcih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2VwYXJhdG9yPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuU2VwYXJhdG9yXG5cdFx0XHRjbGFzc05hbWU9e2NuKCdiZy1ib3JkZXIgcG9pbnRlci1ldmVudHMtbm9uZSAtbXgtMSBteS0xIGgtcHgnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXNlcGFyYXRvclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTY3JvbGxVcEJ1dHRvbih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2Nyb2xsVXBCdXR0b24+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTEnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLXVwLWJ1dHRvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENoZXZyb25VcEljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvbj5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTY3JvbGxEb3duQnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTEnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLWRvd24tYnV0dG9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8Q2hldnJvbkRvd25JY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvbj5cblx0KVxufVxuXG5leHBvcnQge1xuXHRTZWxlY3QsXG5cdFNlbGVjdENvbnRlbnQsXG5cdFNlbGVjdEdyb3VwLFxuXHRTZWxlY3RJdGVtLFxuXHRTZWxlY3RMYWJlbCxcblx0U2VsZWN0U2Nyb2xsRG93bkJ1dHRvbixcblx0U2VsZWN0U2Nyb2xsVXBCdXR0b24sXG5cdFNlbGVjdFNlcGFyYXRvcixcblx0U2VsZWN0VHJpZ2dlcixcblx0U2VsZWN0VmFsdWUsXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zKG9uQ29tcGxldGU/OiAoKSA9PiB2b2lkKSB7XG5cdGNvbnN0IHsgdXBkYXRlUmVjdXJyaW5nRXZlbnQsIGRlbGV0ZVJlY3VycmluZ0V2ZW50IH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoe1xuXHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQudXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0XHRkZWxldGVSZWN1cnJpbmdFdmVudDogY29udGV4dC5kZWxldGVSZWN1cnJpbmdFdmVudCxcblx0XHR9KSlcblxuXHRjb25zdCBbZGlhbG9nU3RhdGUsIHNldERpYWxvZ1N0YXRlXSA9IHVzZVN0YXRlPHtcblx0XHRpc09wZW46IGJvb2xlYW5cblx0XHRvcGVyYXRpb25UeXBlOiAnZWRpdCcgfCAnZGVsZXRlJ1xuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRcdHVwZGF0ZXM/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdFx0b25Db25maXJtPzogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB2b2lkXG5cdH0+KHtcblx0XHRpc09wZW46IGZhbHNlLFxuXHRcdG9wZXJhdGlvblR5cGU6ICdlZGl0Jyxcblx0XHRldmVudDogbnVsbCxcblx0fSlcblxuXHRjb25zdCBvcGVuRWRpdERpYWxvZyA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCwgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4ge1xuXHRcdFx0c2V0RGlhbG9nU3RhdGUoe1xuXHRcdFx0XHRpc09wZW46IHRydWUsXG5cdFx0XHRcdG9wZXJhdGlvblR5cGU6ICdlZGl0Jyxcblx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdHVwZGF0ZXMsXG5cdFx0XHRcdG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0XHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQoZXZlbnQsIHVwZGF0ZXMsIHtcblx0XHRcdFx0XHRcdHNjb3BlLFxuXHRcdFx0XHRcdFx0ZXZlbnREYXRlOiBldmVudC5zdGFydCxcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9LFxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFt1cGRhdGVSZWN1cnJpbmdFdmVudF1cblx0KVxuXG5cdGNvbnN0IG9wZW5EZWxldGVEaWFsb2cgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdHNldERpYWxvZ1N0YXRlKHtcblx0XHRcdFx0aXNPcGVuOiB0cnVlLFxuXHRcdFx0XHRvcGVyYXRpb25UeXBlOiAnZGVsZXRlJyxcblx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0XHRcdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQoZXZlbnQsIHtcblx0XHRcdFx0XHRcdHNjb3BlLFxuXHRcdFx0XHRcdFx0ZXZlbnREYXRlOiBldmVudC5zdGFydCxcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9LFxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtkZWxldGVSZWN1cnJpbmdFdmVudF1cblx0KVxuXG5cdGNvbnN0IGNsb3NlRGlhbG9nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdHNldERpYWxvZ1N0YXRlKHtcblx0XHRcdGlzT3BlbjogZmFsc2UsXG5cdFx0XHRvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG5cdFx0XHRldmVudDogbnVsbCxcblx0XHR9KVxuXHR9LCBbXSlcblxuXHRjb25zdCBoYW5kbGVDb25maXJtID0gdXNlQ2FsbGJhY2soXG5cdFx0KHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0XHRpZiAoZGlhbG9nU3RhdGUub25Db25maXJtKSB7XG5cdFx0XHRcdGRpYWxvZ1N0YXRlLm9uQ29uZmlybShzY29wZSlcblx0XHRcdH1cblx0XHRcdGNsb3NlRGlhbG9nKClcblx0XHRcdC8vIENhbGwgb25Db21wbGV0ZSB0byBjbG9zZSB0aGUgcGFyZW50IGZvcm1cblx0XHRcdG9uQ29tcGxldGU/LigpXG5cdFx0fSxcblx0XHRbZGlhbG9nU3RhdGUsIGNsb3NlRGlhbG9nLCBvbkNvbXBsZXRlXVxuXHQpXG5cblx0cmV0dXJuIHtcblx0XHRkaWFsb2dTdGF0ZSxcblx0XHRvcGVuRWRpdERpYWxvZyxcblx0XHRvcGVuRGVsZXRlRGlhbG9nLFxuXHRcdGNsb3NlRGlhbG9nLFxuXHRcdGhhbmRsZUNvbmZpcm0sXG5cdH1cbn1cbiIsCiAgICAiaW1wb3J0IHtcblx0RGlhbG9nLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dEZXNjcmlwdGlvbixcblx0RGlhbG9nSGVhZGVyLFxuXHREaWFsb2dUaXRsZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RpYWxvZydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgRXZlbnRGb3JtIH0gZnJvbSAnLi9ldmVudC1mb3JtJ1xuXG5leHBvcnQgY29uc3QgRXZlbnRGb3JtRGlhbG9nID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0dCxcblx0XHRzZWxlY3RlZEV2ZW50LFxuXHRcdGlzRXZlbnRGb3JtT3Blbixcblx0XHRjbG9zZUV2ZW50Rm9ybSxcblx0XHRhZGRFdmVudCxcblx0XHR1cGRhdGVFdmVudCxcblx0XHRkZWxldGVFdmVudCxcblx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHR0OiBjb250ZXh0LnQsXG5cdFx0c2VsZWN0ZWRFdmVudDogY29udGV4dC5zZWxlY3RlZEV2ZW50LFxuXHRcdGlzRXZlbnRGb3JtT3BlbjogY29udGV4dC5pc0V2ZW50Rm9ybU9wZW4sXG5cdFx0Y2xvc2VFdmVudEZvcm06IGNvbnRleHQuY2xvc2VFdmVudEZvcm0sXG5cdFx0YWRkRXZlbnQ6IGNvbnRleHQuYWRkRXZlbnQsXG5cdFx0dXBkYXRlRXZlbnQ6IGNvbnRleHQudXBkYXRlRXZlbnQsXG5cdFx0ZGVsZXRlRXZlbnQ6IGNvbnRleHQuZGVsZXRlRXZlbnQsXG5cdFx0cmVuZGVyRXZlbnRGb3JtOiBjb250ZXh0LnJlbmRlckV2ZW50Rm9ybSxcblx0fSkpXG5cblx0Y29uc3QgaGFuZGxlT25VcGRhdGUgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHR1cGRhdGVFdmVudChldmVudC5pZCwgZXZlbnQpXG5cdH1cblxuXHRjb25zdCBoYW5kbGVPbkRlbGV0ZSA9IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdGRlbGV0ZUV2ZW50KGV2ZW50LmlkKVxuXHR9XG5cblx0Y29uc3QgZXZlbnRGb3JtUHJvcHMgPSB7XG5cdFx0b3BlbjogaXNFdmVudEZvcm1PcGVuLFxuXHRcdG9uQ2xvc2U6IGNsb3NlRXZlbnRGb3JtLFxuXHRcdHNlbGVjdGVkRXZlbnQsXG5cdFx0b25BZGQ6IGFkZEV2ZW50LFxuXHRcdG9uVXBkYXRlOiBoYW5kbGVPblVwZGF0ZSxcblx0XHRvbkRlbGV0ZTogaGFuZGxlT25EZWxldGUsXG5cdH1cblxuXHRpZiAocmVuZGVyRXZlbnRGb3JtKSB7XG5cdFx0cmV0dXJuIHJlbmRlckV2ZW50Rm9ybShldmVudEZvcm1Qcm9wcylcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PERpYWxvZyBvbk9wZW5DaGFuZ2U9e2Nsb3NlRXZlbnRGb3JtfSBvcGVuPXtpc0V2ZW50Rm9ybU9wZW59PlxuXHRcdFx0PERpYWxvZ0NvbnRlbnQgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBoLVs5MHZoXSB3LVs5MHZ3XSBtYXgtdy1bNTAwcHhdIHAtNCBzbTpwLTYgb3ZlcmZsb3ctaGlkZGVuIGdhcC0wXCI+XG5cdFx0XHRcdDxEaWFsb2dIZWFkZXIgY2xhc3NOYW1lPVwibWItMiBzbTptYi00IHNocmluay0wXCI+XG5cdFx0XHRcdFx0PERpYWxvZ1RpdGxlIGNsYXNzTmFtZT1cInRleHQtYmFzZSBzbTp0ZXh0LWxnXCI+XG5cdFx0XHRcdFx0XHR7c2VsZWN0ZWRFdmVudD8uaWQgPyB0KCdlZGl0RXZlbnQnKSA6IHQoJ2NyZWF0ZUV2ZW50Jyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dUaXRsZT5cblx0XHRcdFx0XHQ8RGlhbG9nRGVzY3JpcHRpb24gY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG5cdFx0XHRcdFx0XHR7c2VsZWN0ZWRFdmVudD8uaWQgPyB0KCdlZGl0RXZlbnREZXRhaWxzJykgOiB0KCdhZGROZXdFdmVudCcpfVxuXHRcdFx0XHRcdDwvRGlhbG9nRGVzY3JpcHRpb24+XG5cdFx0XHRcdDwvRGlhbG9nSGVhZGVyPlxuXG5cdFx0XHRcdDxFdmVudEZvcm0gey4uLmV2ZW50Rm9ybVByb3BzfSAvPlxuXHRcdFx0PC9EaWFsb2dDb250ZW50PlxuXHRcdDwvRGlhbG9nPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IENhbGVuZGFyIGFzIENhbGVuZGFySWNvbiwgRG93bmxvYWQsIE1lbnUsIFBsdXMgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHtcblx0UG9wb3Zlcixcblx0UG9wb3ZlckNvbnRlbnQsXG5cdFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBkb3dubG9hZElDYWxlbmRhciB9IGZyb20gJ0AvbGliL3V0aWxzL2V4cG9ydC1pY2FsJ1xuaW1wb3J0IFRpdGxlQ29udGVudCBmcm9tICcuL3RpdGxlLWNvbnRlbnQnXG5pbXBvcnQgVmlld0NvbnRyb2xzIGZyb20gJy4vdmlldy1jb250cm9scydcblxuaW50ZXJmYWNlIEhlYWRlclByb3BzIHtcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IEhlYWRlcjogUmVhY3QuRkM8SGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lID0gJycgfSkgPT4ge1xuXHRjb25zdCB7XG5cdFx0dmlldyxcblx0XHRzZXRWaWV3LFxuXHRcdG5leHRQZXJpb2QsXG5cdFx0cHJldlBlcmlvZCxcblx0XHR0b2RheSxcblx0XHRvcGVuRXZlbnRGb3JtLFxuXHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0cmF3RXZlbnRzLFxuXHRcdHQsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdHZpZXc6IGN0eC52aWV3LFxuXHRcdHNldFZpZXc6IGN0eC5zZXRWaWV3LFxuXHRcdG5leHRQZXJpb2Q6IGN0eC5uZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2Q6IGN0eC5wcmV2UGVyaW9kLFxuXHRcdHRvZGF5OiBjdHgudG9kYXksXG5cdFx0b3BlbkV2ZW50Rm9ybTogY3R4Lm9wZW5FdmVudEZvcm0sXG5cdFx0aGVhZGVyQ29tcG9uZW50OiBjdHguaGVhZGVyQ29tcG9uZW50LFxuXHRcdGhlYWRlckNsYXNzTmFtZTogY3R4LmhlYWRlckNsYXNzTmFtZSxcblx0XHRyYXdFdmVudHM6IGN0eC5yYXdFdmVudHMsXG5cdFx0dDogY3R4LnQsXG5cdH0pKVxuXG5cdGNvbnN0IFttb2JpbGVNZW51T3Blbiwgc2V0TW9iaWxlTWVudU9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cblx0Y29uc3QgY2xvc2VNb2JpbGVNZW51ID0gKCkgPT4gc2V0TW9iaWxlTWVudU9wZW4oZmFsc2UpXG5cblx0Y29uc3QgaGFuZGxlRXhwb3J0ID0gKCkgPT4ge1xuXHRcdGNvbnN0IGZpbGVuYW1lID0gYGlsYW15LWNhbGVuZGFyLSR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF19Lmljc2Bcblx0XHRkb3dubG9hZElDYWxlbmRhcihyYXdFdmVudHMsIGZpbGVuYW1lLCAnaWxhbXkgQ2FsZW5kYXInKVxuXHRcdGNsb3NlTW9iaWxlTWVudSgpXG5cdH1cblxuXHRjb25zdCBOZXdFdmVudEJ1dHRvbiA9ICgpID0+IChcblx0XHQ8QnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG5cdFx0XHRvbkNsaWNrPXsoKSA9PiBvcGVuRXZlbnRGb3JtKCl9XG5cdFx0XHRzaXplPVwic21cIlxuXHRcdFx0dmFyaWFudD1cImRlZmF1bHRcIlxuXHRcdD5cblx0XHRcdDxQbHVzIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIEA0eGw6aW5saW5lXCI+e3QoJ25ldycpfTwvc3Bhbj5cblx0XHQ8L0J1dHRvbj5cblx0KVxuXG5cdGNvbnN0IEV4cG9ydEJ1dHRvbiA9ICh7IGZ1bGxXaWR0aCA9IGZhbHNlIH06IHsgZnVsbFdpZHRoPzogYm9vbGVhbiB9KSA9PiAoXG5cdFx0PEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEnLCBmdWxsV2lkdGggJiYgJ3ctZnVsbCBnYXAtMicpfVxuXHRcdFx0b25DbGljaz17aGFuZGxlRXhwb3J0fVxuXHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHQ+XG5cdFx0XHQ8RG93bmxvYWQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHR7ZnVsbFdpZHRoID8gKFxuXHRcdFx0XHRgJHt0KCdleHBvcnQnKX0gQ2FsZW5kYXIgKC5pY3MpYFxuXHRcdFx0KSA6IChcblx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIEA0eGwvYmFzZS1oZWFkZXI6aW5saW5lXCI+e3QoJ2V4cG9ydCcpfTwvc3Bhbj5cblx0XHRcdCl9XG5cdFx0PC9CdXR0b24+XG5cdClcblxuXHRpZiAoaGVhZGVyQ29tcG9uZW50KSB7XG5cdFx0cmV0dXJuIGhlYWRlckNvbXBvbmVudFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJAY29udGFpbmVyL2Jhc2UtaGVhZGVyIHctZnVsbFwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImNhbGVuZGFyLWhlYWRlclwiXG5cdFx0PlxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdmbGV4IGp1c3RpZnktY2VudGVyIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1iZXR3ZWVuIGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTInLFxuXHRcdFx0XHRcdGNsYXNzTmFtZSxcblx0XHRcdFx0XHRoZWFkZXJDbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgQDJ4bC9iYXNlLWhlYWRlcjpqdXN0aWZ5LXN0YXJ0XCI+XG5cdFx0XHRcdFx0PENhbGVuZGFySWNvbiBjbGFzc05hbWU9XCJoLTUgdy01XCIgLz5cblx0XHRcdFx0XHQ8VGl0bGVDb250ZW50IC8+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAganVzdGlmeS1zdGFydCBAeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1jZW50ZXIgZ2FwLTEgQDR4bC9iYXNlLWhlYWRlcjpqdXN0aWZ5LWVuZCBvdmVyZmxvdy14LWF1dG9cIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBAbWQvYmFzZS1oZWFkZXI6ZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBnYXAtMVwiPlxuXHRcdFx0XHRcdFx0PFZpZXdDb250cm9sc1xuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJqdXN0aWZ5LWVuZFwiXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRWaWV3PXt2aWV3fVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17c2V0Vmlld31cblx0XHRcdFx0XHRcdFx0b25OZXh0PXtuZXh0UGVyaW9kfVxuXHRcdFx0XHRcdFx0XHRvblByZXZpb3VzPXtwcmV2UGVyaW9kfVxuXHRcdFx0XHRcdFx0XHRvblRvZGF5PXt0b2RheX1cblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImRlZmF1bHRcIlxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDxOZXdFdmVudEJ1dHRvbiAvPlxuXHRcdFx0XHRcdFx0PEV4cG9ydEJ1dHRvbiAvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBnYXAtMSBAbWQvYmFzZS1oZWFkZXI6aGlkZGVuXCI+XG5cdFx0XHRcdFx0XHQ8TmV3RXZlbnRCdXR0b24gLz5cblx0XHRcdFx0XHRcdDxQb3BvdmVyIG9uT3BlbkNoYW5nZT17c2V0TW9iaWxlTWVudU9wZW59IG9wZW49e21vYmlsZU1lbnVPcGVufT5cblx0XHRcdFx0XHRcdFx0PFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG5cdFx0XHRcdFx0XHRcdFx0PEJ1dHRvbiBzaXplPVwic21cIiB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PE1lbnUgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0XHRcdDwvUG9wb3ZlclRyaWdnZXI+XG5cdFx0XHRcdFx0XHRcdDxQb3BvdmVyQ29udGVudCBhbGlnbj1cImVuZFwiIGNsYXNzTmFtZT1cInctWzI0MHB4XSBwLTJcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PFZpZXdDb250cm9sc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50Vmlldz17dmlld31cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyh2KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2V0Vmlldyh2KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsb3NlTW9iaWxlTWVudSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uTmV4dD17KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5leHRQZXJpb2QoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsb3NlTW9iaWxlTWVudSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uUHJldmlvdXM9eygpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmV2UGVyaW9kKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvblRvZGF5PXsoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG9kYXkoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsb3NlTW9iaWxlTWVudSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJncmlkXCJcblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInB0LTIgYm9yZGVyLXRcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PEV4cG9ydEJ1dHRvbiBmdWxsV2lkdGggLz5cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L1BvcG92ZXJDb250ZW50PlxuXHRcdFx0XHRcdFx0PC9Qb3BvdmVyPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IEhlYWRlclxuIiwKICAgICJpbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuY29uc3QgQ1JMRiA9ICdcXHJcXG4nXG5cbmNvbnN0IFVUQ19WVElNRVpPTkUgPSBbXG5cdCdCRUdJTjpWVElNRVpPTkUnLFxuXHQnVFpJRDpVVEMnLFxuXHQnQkVHSU46U1RBTkRBUkQnLFxuXHQnRFRTVEFSVDoxOTcwMDEwMVQwMDAwMDAnLFxuXHQnVFpOQU1FOlVUQycsXG5cdCdUWk9GRlNFVEZST006KzAwMDAnLFxuXHQnVFpPRkZTRVRUTzorMDAwMCcsXG5cdCdFTkQ6U1RBTkRBUkQnLFxuXHQnRU5EOlZUSU1FWk9ORScsXG5dLmpvaW4oQ1JMRilcblxuY29uc3QgZXNjYXBlVGV4dCA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gdGV4dFxuXHRcdC5yZXBsYWNlQWxsKCdcXFxcJywgJ1xcXFxcXFxcJylcblx0XHQucmVwbGFjZUFsbCgnOycsICdcXFxcOycpXG5cdFx0LnJlcGxhY2VBbGwoJywnLCAnXFxcXCwnKVxuXHRcdC5yZXBsYWNlQWxsKCdcXG4nLCAnXFxcXG4nKVxuXHRcdC5yZXBsYWNlQWxsKCdcXHInLCAnJylcbn1cblxuY29uc3QgZm9ybWF0RGF0ZSA9IChkYXRlOiBEYXlqcywgaXNBbGxEYXkgPSBmYWxzZSk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBpc0FsbERheVxuXHRcdD8gZGF0ZS5mb3JtYXQoJ1lZWVlNTUREJylcblx0XHQ6IGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG59XG5cbmNvbnN0IGdldFVJRCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG5jb25zdCBmb3JtYXRSUnVsZSA9IChycnVsZU9wdGlvbnM6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuXHR0cnkge1xuXHRcdGNvbnN0IHJydWxlU3RyaW5nID0gbmV3IFJSdWxlKFxuXHRcdFx0cnJ1bGVPcHRpb25zIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgUlJ1bGU+WzBdXG5cdFx0KS50b1N0cmluZygpXG5cdFx0cmV0dXJuIChcblx0XHRcdHJydWxlU3RyaW5nLnNwbGl0KCdcXG4nKS5maW5kKChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoJ1JSVUxFOicpKSB8fCAnJ1xuXHRcdClcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuICcnXG5cdH1cbn1cblxuY29uc3QgY29udmVydEV2ZW50VG9WRXZlbnQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuXHRjb25zdCB0aW1lc3RhbXAgPSBkYXlqcygpLnV0YygpLmZvcm1hdCgnWVlZWU1NRERbVF1ISG1tc3NbWl0nKVxuXHRjb25zdCBkYXRlUGFyYW0gPSBldmVudC5hbGxEYXkgPyAnO1ZBTFVFPURBVEUnIDogJydcblx0Y29uc3QgcnJ1bGUgPSBldmVudC5ycnVsZSA/IGZvcm1hdFJSdWxlKGV2ZW50LnJydWxlKSA6ICcnXG5cblx0Y29uc3QgZXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXM/Lmxlbmd0aFxuXHRcdD8gZXZlbnQuZXhkYXRlcy5tYXAoKGQpID0+IGZvcm1hdERhdGUoZGF5anMoZCksIGV2ZW50LmFsbERheSkpLmpvaW4oJywnKVxuXHRcdDogbnVsbFxuXG5cdGNvbnN0IHJlY3VycmVuY2VJZCA9IGV2ZW50LnJlY3VycmVuY2VJZFxuXHRcdD8gZm9ybWF0RGF0ZShkYXlqcyhldmVudC5yZWN1cnJlbmNlSWQpLCBldmVudC5hbGxEYXkpXG5cdFx0OiBudWxsXG5cblx0Y29uc3QgbGluZXMgPSBbXG5cdFx0J0JFR0lOOlZFVkVOVCcsXG5cdFx0YFVJRDoke2dldFVJRChldmVudCl9YCxcblx0XHRgRFRTVEFSVCR7ZGF0ZVBhcmFtfToke2Zvcm1hdERhdGUoZXZlbnQuc3RhcnQsIGV2ZW50LmFsbERheSl9YCxcblx0XHRgRFRFTkQke2RhdGVQYXJhbX06JHtmb3JtYXREYXRlKGV2ZW50LmVuZCwgZXZlbnQuYWxsRGF5KX1gLFxuXHRcdGBTVU1NQVJZOiR7ZXNjYXBlVGV4dChldmVudC50aXRsZSl9YCxcblx0XHRldmVudC5kZXNjcmlwdGlvbiAmJiBgREVTQ1JJUFRJT046JHtlc2NhcGVUZXh0KGV2ZW50LmRlc2NyaXB0aW9uKX1gLFxuXHRcdGV2ZW50LmxvY2F0aW9uICYmIGBMT0NBVElPTjoke2VzY2FwZVRleHQoZXZlbnQubG9jYXRpb24pfWAsXG5cdFx0cnJ1bGUsXG5cdFx0ZXhkYXRlcyAmJiBgRVhEQVRFOiR7ZXhkYXRlc31gLFxuXHRcdHJlY3VycmVuY2VJZCAmJiBgUkVDVVJSRU5DRS1JRDoke3JlY3VycmVuY2VJZH1gLFxuXHRcdGBEVFNUQU1QOiR7dGltZXN0YW1wfWAsXG5cdFx0YENSRUFURUQ6JHt0aW1lc3RhbXB9YCxcblx0XHRgTEFTVC1NT0RJRklFRDoke3RpbWVzdGFtcH1gLFxuXHRcdCdTVEFUVVM6Q09ORklSTUVEJyxcblx0XHQnU0VRVUVOQ0U6MCcsXG5cdFx0J1RSQU5TUDpPUEFRVUUnLFxuXHRcdCdFTkQ6VkVWRU5UJyxcblx0XVxuXG5cdHJldHVybiBsaW5lcy5maWx0ZXIoQm9vbGVhbikuam9pbihDUkxGKVxufVxuXG5jb25zdCBmaWx0ZXJFdmVudHMgPSAoZXZlbnRzOiBDYWxlbmRhckV2ZW50W10pOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRjb25zdCBzZWVuVUlEcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cblx0cmV0dXJuIGV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgdWlkID0gZ2V0VUlEKGV2ZW50KVxuXHRcdGNvbnN0IGlzQmFzZVJlY3VycmluZyA9IGV2ZW50LnJydWxlICYmICFldmVudC5yZWN1cnJlbmNlSWRcblx0XHRjb25zdCBpc01vZGlmaWVkSW5zdGFuY2UgPSBldmVudC5yZWN1cnJlbmNlSWQgJiYgIWV2ZW50LnJydWxlXG5cblx0XHRpZiAoaXNCYXNlUmVjdXJyaW5nKSB7XG5cdFx0XHRzZWVuVUlEcy5hZGQodWlkKVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0aWYgKGlzTW9kaWZpZWRJbnN0YW5jZSkge1xuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0cmV0dXJuICFldmVudC5ycnVsZSAmJiAhZXZlbnQucmVjdXJyZW5jZUlkICYmICFzZWVuVUlEcy5oYXModWlkKVxuXHR9KVxufVxuXG5leHBvcnQgY29uc3QgZXhwb3J0VG9JQ2FsZW5kYXIgPSAoXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdLFxuXHRjYWxlbmRhck5hbWUgPSAnaWxhbXkgQ2FsZW5kYXInXG4pOiBzdHJpbmcgPT4ge1xuXHRjb25zdCBuYW1lID0gZXNjYXBlVGV4dChjYWxlbmRhck5hbWUpXG5cdGNvbnN0IHZldmVudFN0cmluZ3MgPSBmaWx0ZXJFdmVudHMoZXZlbnRzKS5tYXAoY29udmVydEV2ZW50VG9WRXZlbnQpXG5cblx0cmV0dXJuIFtcblx0XHQnQkVHSU46VkNBTEVOREFSJyxcblx0XHQnVkVSU0lPTjoyLjAnLFxuXHRcdCdQUk9ESUQ6LS8vaWxhbXkvL2lsYW15IENhbGVuZGFyLy9FTicsXG5cdFx0J0NBTFNDQUxFOkdSRUdPUklBTicsXG5cdFx0J01FVEhPRDpQVUJMSVNIJyxcblx0XHRgWC1XUi1DQUxOQU1FOiR7bmFtZX1gLFxuXHRcdGBYLVdSLUNBTERFU0M6RXhwb3J0ZWQgZnJvbSAke25hbWV9YCxcblx0XHRVVENfVlRJTUVaT05FLFxuXHRcdC4uLnZldmVudFN0cmluZ3MsXG5cdFx0J0VORDpWQ0FMRU5EQVInLFxuXHRdLmpvaW4oQ1JMRilcbn1cblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkSUNhbGVuZGFyID0gKFxuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcblx0ZmlsZW5hbWUgPSAnY2FsZW5kYXIuaWNzJyxcblx0Y2FsZW5kYXJOYW1lID0gJ2lsYW15IENhbGVuZGFyJ1xuKTogdm9pZCA9PiB7XG5cdGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZXhwb3J0VG9JQ2FsZW5kYXIoZXZlbnRzLCBjYWxlbmRhck5hbWUpXSwge1xuXHRcdHR5cGU6ICd0ZXh0L2NhbGVuZGFyO2NoYXJzZXQ9dXRmLTgnLFxuXHR9KVxuXHRjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpXG5cdGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IGZpbGVuYW1lLmVuZHNXaXRoKCcuaWNzJylcblx0XHQ/IGZpbGVuYW1lXG5cdFx0OiBgJHtmaWxlbmFtZX0uaWNzYFxuXG5cdGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcblx0bGluay5ocmVmID0gdXJsXG5cdGxpbmsuZG93bmxvYWQgPSBub3JtYWxpemVkRmlsZW5hbWVcblxuXHRkb2N1bWVudC5ib2R5LmFwcGVuZChsaW5rKVxuXHRsaW5rLmNsaWNrKClcblx0bGluay5yZW1vdmUoKVxuXHRVUkwucmV2b2tlT2JqZWN0VVJMKHVybClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ2hldnJvbkRvd24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmNvbnN0IE1PTlRIX0tFWVMgPSBbXG5cdCdqYW51YXJ5Jyxcblx0J2ZlYnJ1YXJ5Jyxcblx0J21hcmNoJyxcblx0J2FwcmlsJyxcblx0J21heScsXG5cdCdqdW5lJyxcblx0J2p1bHknLFxuXHQnYXVndXN0Jyxcblx0J3NlcHRlbWJlcicsXG5cdCdvY3RvYmVyJyxcblx0J25vdmVtYmVyJyxcblx0J2RlY2VtYmVyJyxcbl0gYXMgY29uc3RcblxuY29uc3QgVGl0bGVDb250ZW50ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB2aWV3LCBzZWxlY3REYXRlLCB0LCBmaXJzdERheU9mV2VlayB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdFx0Y3VycmVudERhdGU6IGN0eC5jdXJyZW50RGF0ZSxcblx0XHRcdHZpZXc6IGN0eC52aWV3LFxuXHRcdFx0c2VsZWN0RGF0ZTogY3R4LnNlbGVjdERhdGUsXG5cdFx0XHR0OiBjdHgudCxcblx0XHRcdGZpcnN0RGF5T2ZXZWVrOiBjdHguZmlyc3REYXlPZldlZWssXG5cdFx0fSkpXG5cblx0Y29uc3QgW29wZW5Qb3BvdmVyLCBzZXRPcGVuUG9wb3Zlcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuXG5cdGNvbnN0IG1vbnRocyA9IHVzZU1lbW8oKCkgPT4gTU9OVEhfS0VZUy5tYXAoKGtleSkgPT4gdChrZXkpKSwgW3RdKVxuXHRjb25zdCBjdXJyZW50WWVhciA9IGN1cnJlbnREYXRlLnllYXIoKVxuXHRjb25zdCB5ZWFycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDExIH0sIChfLCBpKSA9PiBjdXJyZW50WWVhciAtIDUgKyBpKVxuXHRjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaylcblxuXHRjb25zdCBoYW5kbGVTZWxlY3REYXRlID0gKGRhdGU6IERheWpzKSA9PiB7XG5cdFx0c2VsZWN0RGF0ZShkYXRlKVxuXHRcdHNldE9wZW5Qb3BvdmVyKG51bGwpXG5cdH1cblxuXHRjb25zdCByZW5kZXJNb250aENvbnRlbnQgPSAoKSA9PiAoXG5cdFx0PD5cblx0XHRcdHttb250aHMubWFwKChtb250aCwgaW5kZXgpID0+IChcblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG5cdFx0XHRcdFx0XHRjdXJyZW50RGF0ZS5tb250aCgpID09PSBpbmRleCAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGtleT17bW9udGh9XG5cdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0RGF0ZShjdXJyZW50RGF0ZS5tb250aChpbmRleCkpfVxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7bW9udGh9XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0KSl9XG5cdFx0PC8+XG5cdClcblxuXHRjb25zdCByZW5kZXJZZWFyQ29udGVudCA9ICgpID0+IChcblx0XHQ8PlxuXHRcdFx0e3llYXJzLm1hcCgoeWVhcikgPT4gKFxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdGN1cnJlbnREYXRlLnllYXIoKSA9PT0geWVhciAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGtleT17eWVhcn1cblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3REYXRlKGN1cnJlbnREYXRlLnllYXIoeWVhcikpfVxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7eWVhcn1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQpKX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlcldlZWtDb250ZW50ID0gKCkgPT4gKFxuXHRcdDw+XG5cdFx0XHR7QXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgaSkgPT4ge1xuXHRcdFx0XHRjb25zdCB3ZWVrRGF0ZSA9IGN1cnJlbnREYXRlLnN1YnRyYWN0KDMsICd3ZWVrJykuYWRkKGksICd3ZWVrJylcblx0XHRcdFx0Y29uc3QgZGF5cyA9IGdldFdlZWtEYXlzKHdlZWtEYXRlLCBmaXJzdERheU9mV2Vlaylcblx0XHRcdFx0Y29uc3Qgc3RhcnQgPSBkYXlzWzBdXG5cdFx0XHRcdGNvbnN0IGVuZCA9IGRheXNbNl1cblx0XHRcdFx0Y29uc3QgaXNDdXJyZW50V2VlayA9IHdlZWtEYXRlLmlzU2FtZShjdXJyZW50RGF0ZSwgJ3dlZWsnKVxuXHRcdFx0XHRjb25zdCBjcm9zc2VzTW9udGggPSBzdGFydC5tb250aCgpICE9PSBlbmQubW9udGgoKVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0XHRpc0N1cnJlbnRXZWVrICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdGtleT17c3RhcnQuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3REYXRlKHN0YXJ0KX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG5cdFx0XHRcdFx0XHRcdDxzcGFuPntgJHtzdGFydC5mb3JtYXQoJ01NTSBEJyl9IC0gJHtlbmQuZm9ybWF0KCdEJyl9YH08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdHtjcm9zc2VzTW9udGggJiYgKFxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cIm1sLTAuNSB0ZXh0LXhzIG9wYWNpdHktNzBcIj57YCR7c3RhcnQuZm9ybWF0KCdNTU0nKX0tJHtlbmQuZm9ybWF0KCdNTU0nKX1gfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlckRheUNvbnRlbnQgPSAoKSA9PiB7XG5cdFx0Y29uc3QgZmlyc3REYXkgPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cdFx0Y29uc3QgZGF5c0luTW9udGggPSBjdXJyZW50RGF0ZS5kYXlzSW5Nb250aCgpXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PD5cblx0XHRcdFx0e0FycmF5LmZyb20oeyBsZW5ndGg6IGRheXNJbk1vbnRoIH0sIChfLCBpKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZGF5ID0gZmlyc3REYXkuZGF0ZShpICsgMSlcblx0XHRcdFx0XHRjb25zdCBpc0N1cnJlbnREYXkgPSBkYXkuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5Jylcblx0XHRcdFx0XHRjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5JylcblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0XHRcdGlzQ3VycmVudERheSAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0a2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdERhdGUoZGF5KX1cblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4+e2RheS5mb3JtYXQoJ2RkZGQsIE1NTSBEJyl9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdHtpc1RvZGF5ICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1zbSBweC0xISB0ZXh0LXhzXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0KCd0b2RheScpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KX1cblx0XHRcdDwvPlxuXHRcdClcblx0fVxuXG5cdGNvbnN0IHBvcG92ZXJzID0gW1xuXHRcdHtcblx0XHRcdGlkOiAnbW9udGgnLFxuXHRcdFx0aGlkZGVuOiB2aWV3ID09PSAneWVhcicsXG5cdFx0XHR0aXRsZTogY3VycmVudERhdGUuZm9ybWF0KCdNTU1NJyksXG5cdFx0XHRyZW5kZXI6IHJlbmRlck1vbnRoQ29udGVudCxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiAneWVhcicsXG5cdFx0XHRoaWRkZW46IGZhbHNlLFxuXHRcdFx0dGl0bGU6IGN1cnJlbnREYXRlLmZvcm1hdCgnWVlZWScpLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJZZWFyQ29udGVudCxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiAnd2VlaycsXG5cdFx0XHRoaWRkZW46IHZpZXcgIT09ICd3ZWVrJyxcblx0XHRcdHRpdGxlOiBgJHt3ZWVrRGF5c1swXS5mb3JtYXQoJ01NTSBEJyl9IC0gJHt3ZWVrRGF5c1s2XS5mb3JtYXQoJ01NTSBEJyl9YCxcblx0XHRcdHJlbmRlcjogcmVuZGVyV2Vla0NvbnRlbnQsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogJ2RheScsXG5cdFx0XHRoaWRkZW46IHZpZXcgIT09ICdkYXknLFxuXHRcdFx0dGl0bGU6IGN1cnJlbnREYXRlLmZvcm1hdCgnZGRkZCwgRCcpLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJEYXlDb250ZW50LFxuXHRcdH0sXG5cdF1cblxuXHRyZXR1cm4gcG9wb3ZlcnNcblx0XHQuZmlsdGVyKChwKSA9PiAhcC5oaWRkZW4pXG5cdFx0Lm1hcCgocG9wb3ZlcikgPT4gKFxuXHRcdFx0PFBvcG92ZXJcblx0XHRcdFx0a2V5PXtwb3BvdmVyLmlkfVxuXHRcdFx0XHRvbk9wZW5DaGFuZ2U9eyhvcGVuKSA9PiBzZXRPcGVuUG9wb3ZlcihvcGVuID8gcG9wb3Zlci5pZCA6IG51bGwpfVxuXHRcdFx0XHRvcGVuPXtvcGVuUG9wb3ZlciA9PT0gcG9wb3Zlci5pZH1cblx0XHRcdD5cblx0XHRcdFx0PFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcHgtMSEgZm9udC1zZW1pYm9sZFwiXG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImNhbGVuZGFyLW1vbnRoLWJ1dHRvblwiXG5cdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcHgtMSEgZm9udC1zZW1pYm9sZFwiXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItbW9udGgtYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17YCR7cG9wb3Zlci5pZH0tJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7cG9wb3Zlci50aXRsZX1cblx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHRcdFx0PENoZXZyb25Eb3duIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0XHQ8UG9wb3ZlckNvbnRlbnQgY2xhc3NOYW1lPVwidy00MCBwLTBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggbWF4LWgtNjAgZmxleC1jb2wgb3ZlcmZsb3ctYXV0b1wiPlxuXHRcdFx0XHRcdFx0e3BvcG92ZXIucmVuZGVyKCl9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0XHQ8L1BvcG92ZXI+XG5cdFx0KSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGl0bGVDb250ZW50XG4iLAogICAgImltcG9ydCB7IENoZXZyb25MZWZ0LCBDaGV2cm9uUmlnaHQgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG50eXBlIFZpZXdUeXBlID0gJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInXG5jb25zdCBBVkFJTEFCTEVfVklFV1M6IFZpZXdUeXBlW10gPSBbJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXVxuXG5pbnRlcmZhY2UgVmlld0NvbnRyb2xzUHJvcHMge1xuXHRjdXJyZW50VmlldzogVmlld1R5cGVcblx0b25DaGFuZ2U6ICh2aWV3OiBWaWV3VHlwZSkgPT4gdm9pZFxuXHRvblRvZGF5PzogKCkgPT4gdm9pZFxuXHRvbk5leHQ/OiAoKSA9PiB2b2lkXG5cdG9uUHJldmlvdXM/OiAoKSA9PiB2b2lkXG5cdHZhcmlhbnQ/OiAnZGVmYXVsdCcgfCAnZ3JpZCdcblx0c2l6ZT86ICdzbScgfCAnZGVmYXVsdCdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IFZpZXdDb250cm9sczogUmVhY3QuRkM8Vmlld0NvbnRyb2xzUHJvcHM+ID0gKHtcblx0Y3VycmVudFZpZXcsXG5cdG9uQ2hhbmdlLFxuXHR2YXJpYW50ID0gJ2RlZmF1bHQnLFxuXHRzaXplID0gJ3NtJyxcblx0Y2xhc3NOYW1lLFxuXHRvblRvZGF5LFxuXHRvbk5leHQsXG5cdG9uUHJldmlvdXMsXG59KSA9PiB7XG5cdGNvbnN0IHsgdCwgcmVzb3VyY2VzIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHR0OiBjb250ZXh0LnQsXG5cdFx0cmVzb3VyY2VzOiBjb250ZXh0LnJlc291cmNlcyxcblx0fSkpXG5cdGNvbnN0IGlzR3JpZCA9IHZhcmlhbnQgPT09ICdncmlkJ1xuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSByZXNvdXJjZXMgJiYgcmVzb3VyY2VzLmxlbmd0aCA+IDBcblxuXHQvLyBFeHRyYWN0IGNvbW1vbiBidXR0b24gY2xhc3NOYW1lIGxvZ2ljIHRvIGEgZnVuY3Rpb25cblx0Y29uc3QgZ2V0QnV0dG9uQ2xhc3NOYW1lID0gKHZpZXdUeXBlOiBWaWV3VHlwZSkgPT4ge1xuXHRcdHJldHVybiBjbihcblx0XHRcdC8vIEJhc2Ugd2lkdGggZm9yIGdyaWQgbGF5b3V0XG5cdFx0XHRpc0dyaWQgPyAndy1mdWxsJyA6ICcnLFxuXHRcdFx0Ly8gQWN0aXZlIHZpZXcgc3R5bGluZ1xuXHRcdFx0Y3VycmVudFZpZXcgPT09IHZpZXdUeXBlICYmICdiZy1wcmltYXJ5LzgwJ1xuXHRcdClcblx0fVxuXG5cdGNvbnN0IGdldEJ0blZhcmlhbnQgPSAodmlld1R5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0cmV0dXJuIGN1cnJlbnRWaWV3ID09PSB2aWV3VHlwZSA/ICdkZWZhdWx0JyA6ICdvdXRsaW5lJ1xuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRpc0dyaWQgPyAnZ3JpZCBncmlkLWNvbHMtMiBnYXAtMicgOiAnZmxleCBnYXAtMScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uUHJldmlvdXN9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdDxDaGV2cm9uTGVmdCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvbk5leHR9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdDxDaGV2cm9uUmlnaHQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0e0FWQUlMQUJMRV9WSUVXUy5tYXAoKHR5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0XHRcdGlmIChpc1Jlc291cmNlQ2FsZW5kYXIgJiYgdHlwZSA9PT0gJ3llYXInKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGxcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUodHlwZSl9XG5cdFx0XHRcdFx0XHRrZXk9e3R5cGV9XG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSh0eXBlKX1cblx0XHRcdFx0XHRcdHNpemU9e3NpemV9XG5cdFx0XHRcdFx0XHR2YXJpYW50PXtnZXRCdG5WYXJpYW50KHR5cGUpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHt0KHR5cGUpfVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvblRvZGF5fSBzaXplPXtzaXplfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHR7dCgndG9kYXknKX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZXdDb250cm9sc1xuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZFJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLXJvdydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEFsbERheUNlbGwgfSBmcm9tICcuL2FsbC1kYXktY2VsbCdcblxuaW50ZXJmYWNlIEFsbERheVJvd1Byb3BzIHtcblx0ZGF5czogRGF5anNbXVxuXHRjbGFzc2VzPzogeyByb3c/OiBzdHJpbmc7IGNlbGw/OiBzdHJpbmc7IHNwYWNlcj86IHN0cmluZyB9XG5cdHJlc291cmNlPzogUmVzb3VyY2Vcblx0c2hvd1NwYWNlcj86IGJvb2xlYW5cbn1cblxuY29uc3QgTm9NZW1vQWxsRGF5Um93OiBSZWFjdC5GQzxBbGxEYXlSb3dQcm9wcz4gPSAoe1xuXHRkYXlzLFxuXHRjbGFzc2VzLFxuXHRyZXNvdXJjZSxcblx0c2hvd1NwYWNlciA9IHRydWUsXG59KSA9PiB7XG5cdGNvbnN0IGNvbHVtbnMgPSBkYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4gKHtcblx0XHRpZDogYGFsbGRheS1jb2wtJHtkYXkudG9JU09TdHJpbmcoKX0tJHtpbmRleH1gLFxuXHRcdGRheSxcblx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdFx0Y2xhc3NOYW1lOiBjbignaC1mdWxsIG1pbi1oLTEyIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCcsIGNsYXNzZXM/LmNlbGwpLFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPXtjbignZmxleCB3LWZ1bGwnLCBjbGFzc2VzPy5yb3cpfSBkYXRhLXRlc3RpZD1cImFsbC1kYXktcm93XCI+XG5cdFx0XHR7LyogVGltZSBjb2wgc3BhY2VyICovfVxuXHRcdFx0e3Nob3dTcGFjZXIgJiYgPEFsbERheUNlbGwgY2xhc3NOYW1lPXtjbGFzc2VzPy5zcGFjZXJ9IC8+fVxuXG5cdFx0XHR7LyogRGF5IGFsbCBkYXkgY2VsbCAqL31cblx0XHRcdDxIb3Jpem9udGFsR3JpZFJvd1xuXHRcdFx0XHRhbGxEYXlcblx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleC0xIG1pbi1oLWZpdFwiXG5cdFx0XHRcdGNvbHVtbnM9e2NvbHVtbnN9XG5cdFx0XHRcdGRheU51bWJlckhlaWdodD17MH1cblx0XHRcdFx0Z3JpZFR5cGU9XCJkYXlcIlxuXHRcdFx0XHRpZD17YGFsbC1kYXktcm93LSR7cmVzb3VyY2U/LmlkID8/ICdtYWluJ31gfVxuXHRcdFx0XHRpc0xhc3RSb3dcblx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHR2YXJpYW50PVwicmVndWxhclwiXG5cdFx0XHQvPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBBbGxEYXlSb3cgPSBtZW1vKE5vTWVtb0FsbERheVJvdylcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBtZW1vLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWRXZWVrRXZlbnRzJ1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgR3JpZENlbGwgfSBmcm9tICcuLi9ncmlkLWNlbGwnXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICcuLi9yZXNvdXJjZS1jZWxsJ1xuaW1wb3J0IHsgSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllciB9IGZyb20gJy4vaG9yaXpvbnRhbC1ncmlkLWV2ZW50cy1sYXllcidcblxuaW50ZXJmYWNlIEhvcml6b250YWxHcmlkQ29sdW1uIHtcblx0aWQ6IHN0cmluZ1xuXHRkYXk/OiBEYXlqc1xuXHRkYXlzPzogRGF5anNbXVxuXHRncmlkVHlwZTogJ2RheScgfCAnaG91cidcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdHJlbmRlckNlbGw/OiAocm93OiBIb3Jpem9udGFsR3JpZFJvd1Byb3BzKSA9PiBSZWFjdC5SZWFjdE5vZGVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIb3Jpem9udGFsR3JpZFJvd1Byb3BzIHtcblx0aWQ6IHN0cmluZyB8IG51bWJlclxuXHRyZXNvdXJjZT86IFJlc291cmNlXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0dmFyaWFudD86ICdyZWd1bGFyJyB8ICdyZXNvdXJjZSdcblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRjb2x1bW5zPzogSG9yaXpvbnRhbEdyaWRDb2x1bW5bXVxuXHRhbGxEYXk/OiBib29sZWFuXG5cdHNob3dEYXlOdW1iZXI/OiBib29sZWFuXG5cdGlzTGFzdFJvdz86IGJvb2xlYW5cbn1cblxuY29uc3QgTm9NZW1vSG9yaXpvbnRhbEdyaWRSb3c6IFJlYWN0LkZDPEhvcml6b250YWxHcmlkUm93UHJvcHM+ID0gKHtcblx0aWQsXG5cdHJlc291cmNlLFxuXHRncmlkVHlwZSA9ICdkYXknLFxuXHR2YXJpYW50ID0gJ3Jlc291cmNlJyxcblx0ZGF5TnVtYmVySGVpZ2h0LFxuXHRjbGFzc05hbWUsXG5cdGNvbHVtbnMgPSBbXSxcblx0YWxsRGF5LFxuXHRzaG93RGF5TnVtYmVyID0gZmFsc2UsXG5cdGlzTGFzdFJvdyA9IGZhbHNlLFxufSkgPT4ge1xuXHRjb25zdCB7IHJlbmRlclJlc291cmNlIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgaXNSZXNvdXJjZUNhbGVuZGFyID0gdmFyaWFudCA9PT0gJ3Jlc291cmNlJ1xuXHQvLyBGbGF0IGNvbHVtbnM6IGVhY2ggY29sdW1uIGhhcyBjb2wuZGF5IChyZWd1bGFyIG1vbnRoLCByZXNvdXJjZSBtb250aClcblx0Ly8gR3JvdXBlZCBjb2x1bW5zOiBlYWNoIGNvbHVtbiBoYXMgY29sLmRheXNbXSAocmVzb3VyY2Ugd2VlayBob3Jpem9udGFsKVxuXHRjb25zdCBpc0dyb3VwZWQgPSBjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLmRheXMpXG5cblx0Ly8gQ29sbGVjdCBhbGwgZGF5cyBmb3IgZmxhdCByb3dzXG5cdGNvbnN0IGZsYXREYXlzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKGlzR3JvdXBlZCkgcmV0dXJuIFtdXG5cdFx0cmV0dXJuIGNvbHVtbnMubWFwKChjb2wpID0+IGNvbC5kYXkpLmZpbHRlcigoZCk6IGQgaXMgRGF5anMgPT4gQm9vbGVhbihkKSlcblx0fSwgW2NvbHVtbnMsIGlzR3JvdXBlZF0pXG5cblx0Ly8gQ29tcHV0ZSBldmVudHMgb25jZSBhdCB0aGUgcm93IGxldmVsIOKAlCBzaGFyZWQgYmV0d2VlbiBHcmlkQ2VsbHMgYW5kIGV2ZW50cyBsYXllclxuXHRjb25zdCB7IHBvc2l0aW9uZWRFdmVudHMsIGRheUV2ZW50c01hcCB9ID0gdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyh7XG5cdFx0ZGF5czogZmxhdERheXMsXG5cdFx0Z3JpZFR5cGUsXG5cdFx0cmVzb3VyY2VJZDogcmVzb3VyY2U/LmlkLFxuXHRcdGRheU51bWJlckhlaWdodCxcblx0XHRhbGxEYXksXG5cdH0pXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdmbGV4IGZsZXgtMSByZWxhdGl2ZScsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXRlc3RpZD17YGhvcml6b250YWwtcm93LSR7aWR9YH1cblx0XHQ+XG5cdFx0XHR7aXNSZXNvdXJjZUNhbGVuZGFyICYmIHJlc291cmNlICYmIChcblx0XHRcdFx0PFJlc291cmNlQ2VsbFxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInctMjAgc206dy00MCBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCBoLWZ1bGxcIlxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgaG9yaXpvbnRhbC1yb3ctbGFiZWwtJHtyZXNvdXJjZS5pZH1gfVxuXHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHtyZW5kZXJSZXNvdXJjZSA/IChcblx0XHRcdFx0XHRcdHJlbmRlclJlc291cmNlKHJlc291cmNlKVxuXHRcdFx0XHRcdCkgOiAoXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIndyYXAtYnJlYWstd29yZCB0ZXh0LXNtXCI+e3Jlc291cmNlLnRpdGxlfTwvZGl2PlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdDwvUmVzb3VyY2VDZWxsPlxuXHRcdFx0KX1cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleC0xIGZsZXhcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbFwiPlxuXHRcdFx0XHRcdHtjb2x1bW5zLm1hcCgoY29sLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGNvbC5kYXlzKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0PEdyb3VwZWRDb2x1bW5cblx0XHRcdFx0XHRcdFx0XHRcdGFsbERheT17YWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sPXtjb2x9XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQ9e2RheU51bWJlckhlaWdodH1cblx0XHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRcdGlkPXtpZH1cblx0XHRcdFx0XHRcdFx0XHRcdGlzTGFzdENvbD17aW5kZXggPT09IGNvbHVtbnMubGVuZ3RoIC0gMX1cblx0XHRcdFx0XHRcdFx0XHRcdGlzTGFzdFJvdz17aXNMYXN0Um93fVxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtjb2wuaWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZT8uaWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93RGF5TnVtYmVyPXtzaG93RGF5TnVtYmVyfVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbC5kYXkgPyAoXG5cdFx0XHRcdFx0XHRcdDxHcmlkQ2VsbFxuXHRcdFx0XHRcdFx0XHRcdGFsbERheT17YWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHQnZmxleC0xIHctMjAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNMYXN0Um93ICYmICdib3JkZXItYi0wJyxcblx0XHRcdFx0XHRcdFx0XHRcdGNvbC5jbGFzc05hbWVcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdGRheT17Y29sLmRheX1cblx0XHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdFx0aG91cj17Z3JpZFR5cGUgPT09ICdob3VyJyA/IGNvbC5kYXkuaG91cigpIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdFx0XHRcdGtleT17Y29sLmRheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHRcdFx0XHRcdHByZWNvbXB1dGVkRXZlbnRzPXtkYXlFdmVudHNNYXAuZ2V0KFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sLmRheS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2U/LmlkfVxuXHRcdFx0XHRcdFx0XHRcdHNob3dEYXlOdW1iZXI9e3Nob3dEYXlOdW1iZXJ9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpIDogbnVsbFxuXHRcdFx0XHRcdH0pfVxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHR7LyogRXZlbnRzIGxheWVyIHBvc2l0aW9uZWQgYWJzb2x1dGVseSBvdmVyIHRoZSByb3cgKi99XG5cdFx0XHRcdHshaXNHcm91cGVkICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgei0xMCBwb2ludGVyLWV2ZW50cy1ub25lXCI+XG5cdFx0XHRcdFx0XHQ8SG9yaXpvbnRhbEdyaWRFdmVudHNMYXllclxuXHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YGhvcml6b250YWwtZXZlbnRzLSR7aWR9YH1cblx0XHRcdFx0XHRcdFx0ZGF5cz17ZmxhdERheXN9XG5cdFx0XHRcdFx0XHRcdHBvc2l0aW9uZWRFdmVudHM9e3Bvc2l0aW9uZWRFdmVudHN9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlPy5pZH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG4vKipcbiAqIEEgY29sdW1uIGNvbnRhaW5pbmcgbXVsdGlwbGUgZGF5cyAoZS5nLiwgb25lIGRheSdzIGhvdXJseSBzbG90cyBpbiByZXNvdXJjZSB3ZWVrIHZpZXcpLlxuICogTmVlZHMgaXRzIG93biB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzIGNhbGwgc2luY2UgZXZlbnRzIGFyZSBzY29wZWQgdG8gdGhpcyBkYXkgZ3JvdXAuXG4gKi9cbmNvbnN0IEdyb3VwZWRDb2x1bW4gPSBtZW1vKFxuXHQoe1xuXHRcdGNvbCxcblx0XHRncmlkVHlwZSA9ICdkYXknLFxuXHRcdGFsbERheSxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGRheU51bWJlckhlaWdodCxcblx0XHRzaG93RGF5TnVtYmVyLFxuXHRcdGlzTGFzdFJvdyxcblx0XHRpc0xhc3RDb2wsXG5cdFx0aWQsXG5cdH06IHtcblx0XHRjb2w6IEhvcml6b250YWxHcmlkQ29sdW1uXG5cdFx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRcdGFsbERheT86IGJvb2xlYW5cblx0XHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdFx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdFx0c2hvd0RheU51bWJlcjogYm9vbGVhblxuXHRcdGlzTGFzdFJvdzogYm9vbGVhblxuXHRcdGlzTGFzdENvbDogYm9vbGVhblxuXHRcdGlkOiBzdHJpbmcgfCBudW1iZXJcblx0fSkgPT4ge1xuXHRcdGNvbnN0IGRheXMgPSBjb2wuZGF5cyA/PyBbXVxuXHRcdGNvbnN0IHsgcG9zaXRpb25lZEV2ZW50cyB9ID0gdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyh7XG5cdFx0XHRkYXlzLFxuXHRcdFx0Z3JpZFR5cGUsXG5cdFx0XHRyZXNvdXJjZUlkLFxuXHRcdFx0ZGF5TnVtYmVySGVpZ2h0LFxuXHRcdFx0YWxsRGF5LFxuXHRcdH0pXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHJlbGF0aXZlIHctZnVsbFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsXCI+XG5cdFx0XHRcdFx0e2RheXMubWFwKChkYXkpID0+IChcblx0XHRcdFx0XHRcdDxHcmlkQ2VsbFxuXHRcdFx0XHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHQnZmxleC0xIHctMjAnLFxuXHRcdFx0XHRcdFx0XHRcdGlzTGFzdFJvdyAmJiAnYm9yZGVyLWItMCcsXG5cdFx0XHRcdFx0XHRcdFx0IWlzTGFzdENvbCAmJiAnYm9yZGVyLXIhJyxcblx0XHRcdFx0XHRcdFx0XHRjb2wuY2xhc3NOYW1lXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdGRheT17ZGF5fVxuXHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdGhvdXI9e2dyaWRUeXBlID09PSAnaG91cicgPyBkYXkuaG91cigpIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdFx0XHRrZXk9e2RheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZUlkfVxuXHRcdFx0XHRcdFx0XHRzaG93RGF5TnVtYmVyPXtzaG93RGF5TnVtYmVyfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuXHRcdFx0XHRcdDxIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyXG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YGhvcml6b250YWwtZXZlbnRzLSR7aWR9YH1cblx0XHRcdFx0XHRcdGRheXM9e2RheXN9XG5cdFx0XHRcdFx0XHRwb3NpdGlvbmVkRXZlbnRzPXtwb3NpdGlvbmVkRXZlbnRzfVxuXHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdClcblx0fVxuKVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWRSb3cgPSBtZW1vKE5vTWVtb0hvcml6b250YWxHcmlkUm93KVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQge1xuXHRnZXRQb3NpdGlvbmVkRXZlbnRzLFxuXHR0eXBlIFBvc2l0aW9uZWRFdmVudCxcbn0gZnJvbSAnQC9saWIvdXRpbHMvcG9zaXRpb24td2Vlay1ldmVudHMnXG5cbmludGVyZmFjZSBVc2VQcm9jZXNzZWRXZWVrRXZlbnRzUHJvcHMge1xuXHRkYXlzOiBEYXlqc1tdXG5cdGFsbERheT86IGJvb2xlYW5cblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NlZFdlZWtFdmVudHNSZXN1bHQge1xuXHRwb3NpdGlvbmVkRXZlbnRzOiBQb3NpdGlvbmVkRXZlbnRbXVxuXHRkYXlFdmVudHNNYXA6IE1hcDxzdHJpbmcsIENhbGVuZGFyRXZlbnRbXT5cbn1cblxuZXhwb3J0IGNvbnN0IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMgPSAoe1xuXHRkYXlzLFxuXHRhbGxEYXksXG5cdGRheU51bWJlckhlaWdodCxcblx0cmVzb3VyY2VJZCxcblx0Z3JpZFR5cGUsXG59OiBVc2VQcm9jZXNzZWRXZWVrRXZlbnRzUHJvcHMpOiBQcm9jZXNzZWRXZWVrRXZlbnRzUmVzdWx0ID0+IHtcblx0Y29uc3Qge1xuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRkYXlNYXhFdmVudHMsXG5cdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IGZpcnN0ID0gZGF5cy5hdCgwKVxuXHRjb25zdCBsYXN0ID0gZGF5cy5hdCgtMSlcblx0Y29uc3Qgd2Vla1N0YXJ0ID0gZmlyc3Q/LnN0YXJ0T2YoJ2RheScpXG5cdGNvbnN0IHdlZWtFbmQgPSBsYXN0Py5lbmRPZignZGF5JylcblxuXHRjb25zdCBldmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoIXdlZWtTdGFydCB8fCAhd2Vla0VuZCkgcmV0dXJuIFtdXG5cdFx0bGV0IHdlZWtFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uod2Vla1N0YXJ0LCB3ZWVrRW5kKVxuXHRcdGlmIChyZXNvdXJjZUlkKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZUV2ZW50cyA9IGdldEV2ZW50c0ZvclJlc291cmNlKHJlc291cmNlSWQpXG5cdFx0XHR3ZWVrRXZlbnRzID0gd2Vla0V2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PlxuXHRcdFx0XHRyZXNvdXJjZUV2ZW50cy5zb21lKChlKSA9PiBTdHJpbmcoZS5pZCkgPT09IFN0cmluZyhldmVudC5pZCkpXG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0aWYgKGFsbERheSkge1xuXHRcdFx0d2Vla0V2ZW50cyA9IHdlZWtFdmVudHMuZmlsdGVyKChlKSA9PiAhIWUuYWxsRGF5ID09PSBhbGxEYXkpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHdlZWtFdmVudHNcblx0fSwgW1xuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHR3ZWVrU3RhcnQsXG5cdFx0d2Vla0VuZCxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGFsbERheSxcblx0XSlcblxuXHRjb25zdCBkYXlFdmVudHNNYXAgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgQ2FsZW5kYXJFdmVudFtdPigpXG5cdFx0Zm9yIChjb25zdCBkYXkgb2YgZGF5cykge1xuXHRcdFx0Y29uc3Qga2V5ID0gZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpXG5cdFx0XHRjb25zdCBkYXlTdGFydCA9IGRheS5zdGFydE9mKCdkYXknKVxuXHRcdFx0Y29uc3QgZGF5RW5kID0gZGF5LmVuZE9mKCdkYXknKVxuXHRcdFx0Y29uc3QgZGF5RXZlbnRzID0gZXZlbnRzLmZpbHRlcigoZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBzdGFydHNJbkRheSA9XG5cdFx0XHRcdFx0ZS5zdGFydC5pc1NhbWVPckFmdGVyKGRheVN0YXJ0KSAmJiBlLnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGRheUVuZClcblx0XHRcdFx0Y29uc3QgZW5kc0luRGF5ID1cblx0XHRcdFx0XHRlLmVuZC5pc1NhbWVPckFmdGVyKGRheVN0YXJ0KSAmJiBlLmVuZC5pc1NhbWVPckJlZm9yZShkYXlFbmQpXG5cdFx0XHRcdGNvbnN0IHNwYW5zRGF5ID0gZS5zdGFydC5pc0JlZm9yZShkYXlTdGFydCkgJiYgZS5lbmQuaXNBZnRlcihkYXlFbmQpXG5cdFx0XHRcdHJldHVybiBzdGFydHNJbkRheSB8fCBlbmRzSW5EYXkgfHwgc3BhbnNEYXlcblx0XHRcdH0pXG5cdFx0XHRtYXAuc2V0KGtleSwgZGF5RXZlbnRzKVxuXHRcdH1cblx0XHRyZXR1cm4gbWFwXG5cdH0sIFtkYXlzLCBldmVudHNdKVxuXG5cdGNvbnN0IHBvc2l0aW9uZWRFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRyZXR1cm4gZ2V0UG9zaXRpb25lZEV2ZW50cyh7XG5cdFx0XHRkYXlzLFxuXHRcdFx0ZXZlbnRzLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZGF5TnVtYmVySGVpZ2h0LFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0Z3JpZFR5cGUsXG5cdFx0fSlcblx0fSwgW2RheXMsIGRheU1heEV2ZW50cywgZGF5TnVtYmVySGVpZ2h0LCBldmVudFNwYWNpbmcsIGV2ZW50cywgZ3JpZFR5cGVdKVxuXG5cdHJldHVybiB7IHBvc2l0aW9uZWRFdmVudHMsIGRheUV2ZW50c01hcCB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQge1xuXHREQVlfTlVNQkVSX0hFSUdIVCxcblx0RVZFTlRfQkFSX0hFSUdIVCxcblx0R0FQX0JFVFdFRU5fRUxFTUVOVFMsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcblxuZXhwb3J0IGludGVyZmFjZSBQb3NpdGlvbmVkRXZlbnQgZXh0ZW5kcyBDYWxlbmRhckV2ZW50IHtcblx0bGVmdDogbnVtYmVyIC8vIExlZnQgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuXHR3aWR0aDogbnVtYmVyIC8vIFdpZHRoIGluIHBlcmNlbnRhZ2Vcblx0dG9wOiBudW1iZXIgLy8gVG9wIHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0aGVpZ2h0OiBudW1iZXIgLy8gSGVpZ2h0IGluIHBlcmNlbnRhZ2Vcblx0cG9zaXRpb246IG51bWJlciAvLyBQb3NpdGlvbiBpbiB0aGUgcm93ICgwIGZvciBmaXJzdCwgMSBmb3Igc2Vjb25kLCBldGMuKVxuXHRpc1RydW5jYXRlZFN0YXJ0OiBib29sZWFuIC8vIFdoZXRoZXIgdGhlIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgc3RhcnRcblx0aXNUcnVuY2F0ZWRFbmQ6IGJvb2xlYW4gLy8gV2hldGhlciB0aGUgZXZlbnQgaXMgdHJ1bmNhdGVkIGF0IHRoZSBlbmRcbn1cblxuaW50ZXJmYWNlIEdldFBvc2l0aW9uZWRFdmVudHNQcm9wcyB7XG5cdGRheXM6IERheWpzW11cblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cicgLy8gRnV0dXJlIHVzZSBmb3IgZGlmZmVyZW50IGdyaWQgdHlwZXNcblx0ZXZlbnRTcGFjaW5nPzogbnVtYmVyIC8vIEN1c3RvbSB2ZXJ0aWNhbCBzcGFjaW5nIGJldHdlZW4gZXZlbnRzIChkZWZhdWx0cyB0byBHQVBfQkVUV0VFTl9FTEVNRU5UUylcbn1cblxuZXhwb3J0IGNvbnN0IGdldFBvc2l0aW9uZWRFdmVudHMgPSAoe1xuXHRkYXlzLFxuXHRldmVudHMsXG5cdGRheU1heEV2ZW50cyxcblx0ZGF5TnVtYmVySGVpZ2h0ID0gREFZX05VTUJFUl9IRUlHSFQsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdGV2ZW50U3BhY2luZyA9IEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxufTogR2V0UG9zaXRpb25lZEV2ZW50c1Byb3BzKSA9PiB7XG5cdC8vIEZvciBob3VyLWJhc2VkIGdyaWRzLCB1c2UgYWN0dWFsIGZpcnN0L2xhc3QgaG91cnMgZnJvbSBkYXlzIGFycmF5XG5cdC8vIEZvciBkYXktYmFzZWQgZ3JpZHMsIHVzZSBzdGFydC9lbmQgb2YgZGF5IHRvIGNhcHR1cmUgYWxsIGV2ZW50c1xuXHRjb25zdCBmaXJzdCA9IGRheXMuYXQoMClcblx0Y29uc3QgbGFzdCA9IGRheXMuYXQoLTEpXG5cdGlmICghZmlyc3QgfHwgIWxhc3QpIHJldHVybiBbXVxuXG5cdGNvbnN0IGZpcnN0RGF5ID1cblx0XHRncmlkVHlwZSA9PT0gJ2hvdXInID8gZmlyc3Quc3RhcnRPZignaG91cicpIDogZmlyc3Quc3RhcnRPZignZGF5Jylcblx0Y29uc3QgbGFzdERheSA9IGdyaWRUeXBlID09PSAnaG91cicgPyBsYXN0LmVuZE9mKCdob3VyJykgOiBsYXN0LmVuZE9mKCdkYXknKVxuXHRjb25zdCBkYXlDb3VudCA9IGRheXMubGVuZ3RoXG5cblx0Ly8gU2VwYXJhdGUgbXVsdGktZGF5IGFuZCBzaW5nbGUtZGF5IGV2ZW50c1xuXHRjb25zdCBtdWx0aURheUV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoKGUpID0+IGUuZW5kLmRpZmYoZS5zdGFydCwgZ3JpZFR5cGUpID4gMClcblx0Y29uc3Qgc2luZ2xlRGF5RXZlbnRzID0gZXZlbnRzLmZpbHRlcihcblx0XHQoZSkgPT4gZS5lbmQuZGlmZihlLnN0YXJ0LCBncmlkVHlwZSkgPT09IDBcblx0KVxuXG5cdC8vIFNvcnQgbXVsdGktZGF5IGV2ZW50cyBieSBzdGFydCBkYXRlLCB0aGVuIGJ5IGR1cmF0aW9uXG5cdGNvbnN0IHNvcnRlZE11bHRpRGF5ID0gWy4uLm11bHRpRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PiB7XG5cdFx0Y29uc3Qgc3RhcnREaWZmID0gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG5cdFx0aWYgKHN0YXJ0RGlmZiAhPT0gMCkge1xuXHRcdFx0cmV0dXJuIHN0YXJ0RGlmZlxuXHRcdH1cblx0XHRyZXR1cm4gYi5lbmQuZGlmZihiLnN0YXJ0KSAtIGEuZW5kLmRpZmYoYS5zdGFydCkgLy8gTG9uZ2VyIGV2ZW50cyBmaXJzdFxuXHR9KVxuXG5cdC8vIFNvcnQgc2luZ2xlLWRheSBldmVudHMgYnkgc3RhcnQgdGltZVxuXHRjb25zdCBzb3J0ZWRTaW5nbGVEYXkgPSBbLi4uc2luZ2xlRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PlxuXHRcdGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuXHQpXG5cblx0Ly8gQ3JlYXRlIGRheUNvdW50IHggZGF5TWF4RXZlbnRzIGdyaWQgd2l0aCBmbGFnc1xuXHRjb25zdCBncmlkOiB7IHRha2VuOiBib29sZWFuOyBldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGwgfVtdW10gPSBbXVxuXHRmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG5cdFx0Z3JpZFtyb3ddID0gW11cblx0XHRmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCBkYXlDb3VudDsgY29sKyspIHtcblx0XHRcdGdyaWRbcm93XVtjb2xdID0geyB0YWtlbjogZmFsc2UsIGV2ZW50OiBudWxsIH1cblx0XHR9XG5cdH1cblxuXHRjb25zdCBwcm9jZXNzZWRFdmVudHM6IFBvc2l0aW9uZWRFdmVudFtdID0gW11cblxuXHQvLyBTdGVwIDE6IEFzc2lnbiBwb3NpdGlvbnMgdG8gbXVsdGktZGF5IGV2ZW50cyBmaXJzdFxuXHRmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZE11bHRpRGF5KSB7XG5cdFx0Y29uc3QgZXZlbnRTdGFydCA9IGRheWpzLm1heChldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKSwgZmlyc3REYXkpXG5cdFx0Y29uc3QgYWRqdXN0ZWRFbmQgPVxuXHRcdFx0Z3JpZFR5cGUgPT09ICdob3VyJyA/IGV2ZW50LmVuZC5zdWJ0cmFjdCgxLCAnbWludXRlJykgOiBldmVudC5lbmRcblx0XHRjb25zdCBldmVudEVuZCA9IGRheWpzLm1pbihhZGp1c3RlZEVuZC5zdGFydE9mKGdyaWRUeXBlKSwgbGFzdERheSlcblx0XHRjb25zdCBzdGFydENvbCA9IE1hdGgubWF4KDAsIGV2ZW50U3RhcnQuZGlmZihmaXJzdERheSwgZ3JpZFR5cGUpKVxuXHRcdGNvbnN0IGVuZENvbCA9IE1hdGgubWluKGRheUNvdW50IC0gMSwgZXZlbnRFbmQuZGlmZihmaXJzdERheSwgZ3JpZFR5cGUpKVxuXG5cdFx0Ly8gRGV0ZWN0IGlmIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgYm91bmRhcmllc1xuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKS5pc0JlZm9yZShmaXJzdERheSlcblx0XHRjb25zdCBpc1RydW5jYXRlZEVuZCA9IGV2ZW50LmVuZC5zdGFydE9mKGdyaWRUeXBlKS5pc0FmdGVyKGxhc3REYXkpXG5cblx0XHQvLyBUcnkgdG8gcGxhY2UgdGhlIGV2ZW50IHN0YXJ0aW5nIGZyb20gaXRzIG9yaWdpbmFsIHN0YXJ0IGNvbHVtblxuXHRcdGxldCBwbGFjZWRTdWNjZXNzZnVsbHkgPSBmYWxzZVxuXG5cdFx0Ly8gRmlyc3QgdHJ5OiBwbGFjZSBmcm9tIG9yaWdpbmFsIHN0YXJ0IHBvc2l0aW9uXG5cdFx0bGV0IGFzc2lnbmVkUm93ID0gLTFcblx0XHRmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG5cdFx0XHRsZXQgY2FuUGxhY2UgPSB0cnVlXG5cdFx0XHRmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdFx0aWYgKGdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG5cdFx0XHRcdFx0Y2FuUGxhY2UgPSBmYWxzZVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChjYW5QbGFjZSkge1xuXHRcdFx0XHRhc3NpZ25lZFJvdyA9IHJvd1xuXHRcdFx0XHRicmVha1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIElmIHdlIGZvdW5kIGEgcm93LCBhc3NpZ24gdGhlIGV2ZW50IHRvIGFsbCBpdHMgY29sdW1uc1xuXHRcdGlmIChhc3NpZ25lZFJvdyAhPT0gLTEpIHtcblx0XHRcdGZvciAobGV0IGNvbCA9IHN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuXHRcdFx0XHRncmlkW2Fzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgcmVuZGVyaW5nXG5cdFx0XHRjb25zdCBzcGFuRGF5cyA9IGVuZENvbCAtIHN0YXJ0Q29sICsgMVxuXHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuXHRcdFx0XHRsZWZ0OiAoc3RhcnRDb2wgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdHdpZHRoOiAoc3BhbkRheXMgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdHRvcDpcblx0XHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQgK1xuXHRcdFx0XHRcdGV2ZW50U3BhY2luZyArXG5cdFx0XHRcdFx0YXNzaWduZWRSb3cgKiAoRVZFTlRfQkFSX0hFSUdIVCArIGV2ZW50U3BhY2luZyksXG5cdFx0XHRcdGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcblx0XHRcdFx0cG9zaXRpb246IGFzc2lnbmVkUm93LFxuXHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0aXNUcnVuY2F0ZWRTdGFydCxcblx0XHRcdFx0aXNUcnVuY2F0ZWRFbmQsXG5cdFx0XHR9IGFzIFBvc2l0aW9uZWRFdmVudClcblx0XHRcdHBsYWNlZFN1Y2Nlc3NmdWxseSA9IHRydWVcblx0XHR9XG5cblx0XHQvLyBJZiBjb3VsZG4ndCBwbGFjZSBhdCBvcmlnaW5hbCBwb3NpdGlvbiwgdHJ5IHRydW5jYXRlZCB2ZXJzaW9ucyBzdGFydGluZyBmcm9tIGxhdGVyIGRheXNcblx0XHRpZiAoIXBsYWNlZFN1Y2Nlc3NmdWxseSkge1xuXHRcdFx0Zm9yIChcblx0XHRcdFx0bGV0IHRyeVN0YXJ0Q29sID0gc3RhcnRDb2wgKyAxO1xuXHRcdFx0XHR0cnlTdGFydENvbCA8PSBlbmRDb2w7XG5cdFx0XHRcdHRyeVN0YXJ0Q29sKytcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBUcnkgdG8gcGxhY2UgdGhlIHRydW5jYXRlZCBldmVudCBzdGFydGluZyBmcm9tIHRoaXMgY29sdW1uXG5cdFx0XHRcdGxldCB0cnVuY2F0ZWRBc3NpZ25lZFJvdyA9IC0xXG5cdFx0XHRcdGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGRheU1heEV2ZW50czsgcm93KyspIHtcblx0XHRcdFx0XHRsZXQgY2FuUGxhY2UgPSB0cnVlXG5cdFx0XHRcdFx0Zm9yIChsZXQgY29sID0gdHJ5U3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG5cdFx0XHRcdFx0XHRpZiAoZ3JpZFtyb3ddW2NvbF0udGFrZW4pIHtcblx0XHRcdFx0XHRcdFx0Y2FuUGxhY2UgPSBmYWxzZVxuXHRcdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoY2FuUGxhY2UpIHtcblx0XHRcdFx0XHRcdHRydW5jYXRlZEFzc2lnbmVkUm93ID0gcm93XG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHdlIGZvdW5kIGEgcm93IGZvciB0aGUgdHJ1bmNhdGVkIHZlcnNpb24sIHBsYWNlIGl0XG5cdFx0XHRcdGlmICh0cnVuY2F0ZWRBc3NpZ25lZFJvdyAhPT0gLTEpIHtcblx0XHRcdFx0XHRmb3IgKGxldCBjb2wgPSB0cnlTdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdFx0XHRcdGdyaWRbdHJ1bmNhdGVkQXNzaWduZWRSb3ddW2NvbF0gPSB7IHRha2VuOiB0cnVlLCBldmVudCB9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIHBvc2l0aW9uIGRhdGEgZm9yIHRoZSB0cnVuY2F0ZWQgcmVuZGVyaW5nXG5cdFx0XHRcdFx0Y29uc3QgdHJ1bmNhdGVkU3BhbkRheXMgPSBlbmRDb2wgLSB0cnlTdGFydENvbCArIDFcblx0XHRcdFx0XHRwcm9jZXNzZWRFdmVudHMucHVzaCh7XG5cdFx0XHRcdFx0XHRsZWZ0OiAodHJ5U3RhcnRDb2wgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdFx0XHR3aWR0aDogKHRydW5jYXRlZFNwYW5EYXlzIC8gZGF5Q291bnQpICogMTAwLFxuXHRcdFx0XHRcdFx0dG9wOlxuXHRcdFx0XHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQgK1xuXHRcdFx0XHRcdFx0XHRldmVudFNwYWNpbmcgK1xuXHRcdFx0XHRcdFx0XHR0cnVuY2F0ZWRBc3NpZ25lZFJvdyAqIChFVkVOVF9CQVJfSEVJR0hUICsgZXZlbnRTcGFjaW5nKSxcblx0XHRcdFx0XHRcdGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiB0cnVuY2F0ZWRBc3NpZ25lZFJvdyxcblx0XHRcdFx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0XHRcdFx0aXNUcnVuY2F0ZWRTdGFydDogdHJ1ZSwgLy8gQWx3YXlzIHRydW5jYXRlZCBhdCBzdGFydCB3aGVuIHVzaW5nIHRoaXMgZmFsbGJhY2sgbG9naWNcblx0XHRcdFx0XHRcdGlzVHJ1bmNhdGVkRW5kLFxuXHRcdFx0XHRcdH0gYXMgUG9zaXRpb25lZEV2ZW50KVxuXHRcdFx0XHRcdHBsYWNlZFN1Y2Nlc3NmdWxseSA9IHRydWVcblx0XHRcdFx0XHRicmVhayAvLyBTdWNjZXNzZnVsbHkgcGxhY2VkLCBzdG9wIHRyeWluZyBvdGhlciBzdGFydCBwb3NpdGlvbnNcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFN0ZXAgMjogRmlsbCBnYXBzIHdpdGggc2luZ2xlLWRheSBldmVudHNcblx0Zm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRTaW5nbGVEYXkpIHtcblx0XHRjb25zdCBldmVudFN0YXJ0ID0gZGF5anMubWF4KGV2ZW50LnN0YXJ0LnN0YXJ0T2YoZ3JpZFR5cGUpLCBmaXJzdERheSlcblx0XHQvLyBDbGFtcCBjb2wgdG8gdmFsaWQgZ3JpZCBib3VuZHMgdG8gcHJldmVudCBhY2Nlc3NpbmcgdW5kZWZpbmVkIGdyaWQgcG9zaXRpb25zXG5cdFx0Y29uc3QgY29sID0gTWF0aC5tYXgoXG5cdFx0XHQwLFxuXHRcdFx0TWF0aC5taW4oZGF5Q291bnQgLSAxLCBldmVudFN0YXJ0LmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblx0XHQpXG5cblx0XHQvLyBTaW5nbGUtZGF5IGV2ZW50cyBhcmUgbm90IHRydW5jYXRlZCBieSBkZWZpbml0aW9uXG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRTdGFydCA9IGZhbHNlXG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRFbmQgPSBmYWxzZVxuXG5cdFx0Ly8gRmluZCB0aGUgZmlyc3QgYXZhaWxhYmxlIHJvdyBpbiB0aGlzIGNvbHVtblxuXHRcdGxldCBhc3NpZ25lZFJvdyA9IC0xXG5cdFx0Zm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuXHRcdFx0aWYgKCFncmlkW3Jvd11bY29sXS50YWtlbikge1xuXHRcdFx0XHRhc3NpZ25lZFJvdyA9IHJvd1xuXHRcdFx0XHRicmVha1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIElmIHdlIGZvdW5kIGEgcm93LCBhc3NpZ24gdGhlIGV2ZW50XG5cdFx0aWYgKGFzc2lnbmVkUm93ICE9PSAtMSkge1xuXHRcdFx0Z3JpZFthc3NpZ25lZFJvd11bY29sXSA9IHsgdGFrZW46IHRydWUsIGV2ZW50IH1cblxuXHRcdFx0Ly8gQ3JlYXRlIHBvc2l0aW9uIGRhdGEgZm9yIHJlbmRlcmluZ1xuXHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuXHRcdFx0XHRsZWZ0OiAoY29sIC8gZGF5Q291bnQpICogMTAwLFxuXHRcdFx0XHR3aWR0aDogKDEgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdHRvcDpcblx0XHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQgK1xuXHRcdFx0XHRcdGV2ZW50U3BhY2luZyArXG5cdFx0XHRcdFx0YXNzaWduZWRSb3cgKiAoRVZFTlRfQkFSX0hFSUdIVCArIGV2ZW50U3BhY2luZyksXG5cdFx0XHRcdGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcblx0XHRcdFx0cG9zaXRpb246IGFzc2lnbmVkUm93LFxuXHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0aXNUcnVuY2F0ZWRTdGFydCxcblx0XHRcdFx0aXNUcnVuY2F0ZWRFbmQsXG5cdFx0XHR9IGFzIFBvc2l0aW9uZWRFdmVudClcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcHJvY2Vzc2VkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCBSZWFjdCwgeyBtZW1vLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEYXlOdW1iZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvZGF5LW51bWJlcidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGlzQnVzaW5lc3NIb3VyIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3VycydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEVWRU5UX0JBUl9IRUlHSFQgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBTZWxlY3RlZERheUV2ZW50cyB9IGZyb20gJy4vYWxsLWV2ZW50cy1kaWFsb2cnXG5pbXBvcnQgeyBBbGxFdmVudERpYWxvZyB9IGZyb20gJy4vYWxsLWV2ZW50cy1kaWFsb2cnXG5pbXBvcnQgeyBEcm9wcGFibGVDZWxsIH0gZnJvbSAnLi9kcm9wcGFibGUtY2VsbCdcblxuaW50ZXJmYWNlIEdyaWRQcm9wcyB7XG5cdGRheTogRGF5anNcblx0aG91cj86IG51bWJlciAvLyBPcHRpb25hbCBob3VyIGZvciBob3VyLWJhc2VkIGdyaWRzXG5cdG1pbnV0ZT86IG51bWJlciAvLyBPcHRpb25hbCBtaW51dGUgZm9yIG1vcmUgZ3JhbnVsYXIgdGltZSBzbG90c1xuXHRkYXlNYXhFdmVudHM/OiBudW1iZXJcblx0Y2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGNsYXNzTmFtZSBmb3IgY3VzdG9tIHN0eWxpbmdcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlciAvLyBPcHRpb25hbCByZXNvdXJjZSBJRCBmb3IgcmVzb3VyY2Utc3BlY2lmaWMgZGF5IGNlbGxzXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cicgLy8gRnV0dXJlIHVzZSBmb3IgZGlmZmVyZW50IGdyaWQgdHlwZXNcblx0c2hvdWxkUmVuZGVyRXZlbnRzPzogYm9vbGVhbiAvLyBGbGFnIHRvIGRldGVybWluZSBpZiBldmVudHMgc2hvdWxkIGJlIHJlbmRlcmVkXG5cdGFsbERheT86IGJvb2xlYW4gLy8gRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGlzIGlzIGFuIGFsbC1kYXkgY2VsbFxuXHRzaG93RGF5TnVtYmVyPzogYm9vbGVhbiAvLyBGbGFnIHRvIHNob3cgb3IgaGlkZSB0aGUgZGF5IG51bWJlclxuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdHByZWNvbXB1dGVkRXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG59XG5cbmNvbnN0IE5vTWVtb0dyaWRDZWxsOiBSZWFjdC5GQzxHcmlkUHJvcHM+ID0gKHtcblx0ZGF5LFxuXHRob3VyLFxuXHRtaW51dGUsXG5cdGNsYXNzTmFtZSA9ICcnLFxuXHRyZXNvdXJjZUlkLFxuXHRncmlkVHlwZSA9ICdkYXknLFxuXHRzaG91bGRSZW5kZXJFdmVudHMgPSB0cnVlLFxuXHRhbGxEYXkgPSBmYWxzZSxcblx0cHJlY29tcHV0ZWRFdmVudHMsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG5cdHNob3dEYXlOdW1iZXIgPSBmYWxzZSxcblx0Y2hpbGRyZW4sXG59KSA9PiB7XG5cdGNvbnN0IGFsbEV2ZW50c0RpYWxvZ1JlZiA9IFJlYWN0LnVzZVJlZjx7XG5cdFx0b3BlbjogKCkgPT4gdm9pZFxuXHRcdGNsb3NlOiAoKSA9PiB2b2lkXG5cdFx0c2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG5cdH0+KG51bGwpXG5cdGNvbnN0IHtcblx0XHRkYXlNYXhFdmVudHMgPSAwLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRjdXJyZW50RGF0ZSxcblx0XHR0LFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHRldmVudFNwYWNpbmcsXG5cdFx0Z2V0UmVzb3VyY2VCeUlkLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHRvZGF5RXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKCFzaG91bGRSZW5kZXJFdmVudHMpIHtcblx0XHRcdHJldHVybiBbXVxuXHRcdH1cblxuXHRcdC8vIFVzZSBwcmUtY29tcHV0ZWQgZXZlbnRzIGZyb20gdGhlIHJvdyBsZXZlbCB3aGVuIGF2YWlsYWJsZVxuXHRcdGlmIChwcmVjb21wdXRlZEV2ZW50cykge1xuXHRcdFx0cmV0dXJuIHByZWNvbXB1dGVkRXZlbnRzXG5cdFx0fVxuXG5cdFx0bGV0IHRvZGF5RXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKFxuXHRcdFx0ZGF5LnN0YXJ0T2YoZ3JpZFR5cGUpLFxuXHRcdFx0ZGF5LmVuZE9mKGdyaWRUeXBlKVxuXHRcdClcblxuXHRcdGlmIChhbGxEYXkpIHtcblx0XHRcdHRvZGF5RXZlbnRzID0gdG9kYXlFdmVudHMuZmlsdGVyKChlKSA9PiBlLmFsbERheSlcblx0XHR9XG5cblx0XHRpZiAocmVzb3VyY2VJZCkge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VFdmVudHMgPSBnZXRFdmVudHNGb3JSZXNvdXJjZShyZXNvdXJjZUlkKSA/PyBbXVxuXG5cdFx0XHRyZXR1cm4gdG9kYXlFdmVudHMuZmlsdGVyKChldmVudCkgPT5cblx0XHRcdFx0cmVzb3VyY2VFdmVudHMuc29tZSgocmUpID0+IFN0cmluZyhyZS5pZCkgPT09IFN0cmluZyhldmVudC5pZCkpXG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRvZGF5RXZlbnRzXG5cdH0sIFtcblx0XHRwcmVjb21wdXRlZEV2ZW50cyxcblx0XHRkYXksXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0Z3JpZFR5cGUsXG5cdFx0c2hvdWxkUmVuZGVyRXZlbnRzLFxuXHRcdGFsbERheSxcblx0XSlcblxuXHQvLyBIYW5kbGVyIGZvciBzaG93aW5nIGFsbCBldmVudHMgaW4gYSBkaWFsb2dcblx0Y29uc3Qgc2hvd0FsbEV2ZW50cyA9IChkYXk6IERheWpzLCBldmVudHM6IENhbGVuZGFyRXZlbnRbXSkgPT4ge1xuXHRcdGFsbEV2ZW50c0RpYWxvZ1JlZi5jdXJyZW50Py5zZXRTZWxlY3RlZERheUV2ZW50cyh7XG5cdFx0XHRkYXksXG5cdFx0XHRldmVudHMsXG5cdFx0fSlcblx0XHRhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8ub3BlbigpXG5cdH1cblxuXHRjb25zdCBpc0N1cnJlbnRNb250aCA9IGRheS5tb250aCgpID09PSBjdXJyZW50RGF0ZS5tb250aCgpXG5cblx0Y29uc3QgaGlkZGVuRXZlbnRzQ291bnQgPSB0b2RheUV2ZW50cy5sZW5ndGggLSBkYXlNYXhFdmVudHNcblx0Y29uc3QgaGFzSGlkZGVuRXZlbnRzID0gaGlkZGVuRXZlbnRzQ291bnQgPiAwXG5cblx0Ly8gVXNlIHJlc291cmNlLXNwZWNpZmljIGJ1c2luZXNzIGhvdXJzIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGxiYWNrIHRvIGdsb2JhbFxuXHRjb25zdCBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKHJlc291cmNlSWQgJiYgZ2V0UmVzb3VyY2VCeUlkKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlQnlJZChyZXNvdXJjZUlkKVxuXHRcdFx0aWYgKHJlc291cmNlPy5idXNpbmVzc0hvdXJzKSB7XG5cdFx0XHRcdHJldHVybiByZXNvdXJjZS5idXNpbmVzc0hvdXJzXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBidXNpbmVzc0hvdXJzXG5cdH0sIFtyZXNvdXJjZUlkLCBnZXRSZXNvdXJjZUJ5SWQsIGJ1c2luZXNzSG91cnNdKVxuXG5cdGNvbnN0IGlzQnVzaW5lc3MgPSBpc0J1c2luZXNzSG91cih7XG5cdFx0ZGF0ZTogZGF5LFxuXHRcdGhvdXI6IGdyaWRUeXBlID09PSAnaG91cicgPyBkYXkuaG91cigpIDogdW5kZWZpbmVkLFxuXHRcdGJ1c2luZXNzSG91cnM6IGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMsXG5cdH0pXG5cblx0Y29uc3QgaG91clN0ciA9IGRheS5mb3JtYXQoJ0hIJylcblx0Y29uc3QgbW0gPSBkYXkuZm9ybWF0KCdtbScpXG5cdGNvbnN0IGJhc2VUZXN0SWQgPSBgZGF5LWNlbGwtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YFxuXHRjb25zdCB0ZXN0SWQgPVxuXHRcdGdyaWRUeXBlID09PSAnaG91cicgPyBgJHtiYXNlVGVzdElkfS0ke2hvdXJTdHJ9LSR7bW19YCA6IGJhc2VUZXN0SWRcblx0Ly8gRHJvcHBhYmxlIElEIG11c3QgdXNlIHRvSVNPU3RyaW5nKCkgKG5vdCBZWVlZLU1NLUREKSBzbyBlYWNoIHRpbWUgc2xvdFxuXHQvLyBnZXRzIGEgdW5pcXVlIElEIGluIEBkbmQta2l0J3MgcmVnaXN0cnkuIFlZWVktTU0tREQgc3RyaXBzIHRoZSB0aW1lLFxuXHQvLyBjYXVzaW5nIGFsbCBjZWxscyBvbiB0aGUgc2FtZSBkYXkgdG8gY29sbGlkZS5cblx0Y29uc3QgZHJvcHBhYmxlSWQgPSBgZGF5LWNlbGwtJHtkYXkudG9JU09TdHJpbmcoKX0ke2FsbERheSA/ICctYWxsZGF5JyA6ICcnfSR7cmVzb3VyY2VJZCA/IGAtcmVzb3VyY2UtJHtyZXNvdXJjZUlkfWAgOiAnJ31gXG5cblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0PERyb3BwYWJsZUNlbGxcblx0XHRcdFx0YWxsRGF5PXthbGxEYXl9XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2N1cnNvci1wb2ludGVyIG92ZXJmbG93LWNsaXAgcC0xIGhvdmVyOmJnLWFjY2VudCBtaW4taC1bNjBweF0gcmVsYXRpdmUgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIG9ubHk6Ym9yZGVyLXIgYm9yZGVyLWInLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZCB8fCB0ZXN0SWR9XG5cdFx0XHRcdGRhdGU9e2RheX1cblx0XHRcdFx0ZGlzYWJsZWQ9eyFpc0J1c2luZXNzIHx8ICFpc0N1cnJlbnRNb250aH1cblx0XHRcdFx0aG91cj17aG91cn1cblx0XHRcdFx0aWQ9e2Ryb3BwYWJsZUlkfVxuXHRcdFx0XHRtaW51dGU9e21pbnV0ZX1cblx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cblx0XHRcdFx0dHlwZT1cImRheS1jZWxsXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1mdWxsIHctZnVsbFwiXG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJncmlkLWNlbGwtY29udGVudFwiXG5cdFx0XHRcdFx0c3R5bGU9e3sgZ2FwOiBgJHtldmVudFNwYWNpbmd9cHhgIH19XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7c2hvd0RheU51bWJlciAmJiA8RGF5TnVtYmVyIGRhdGU9e2RheX0gbG9jYWxlPXtjdXJyZW50TG9jYWxlfSAvPn1cblxuXHRcdFx0XHRcdHtzaG91bGRSZW5kZXJFdmVudHMgJiYgKFxuXHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0ey8qIFJlbmRlciBwbGFjZWhvbGRlcnMgZm9yIGV2ZW50cyB0aGF0IG9jY3VyIHRvZGF5IHNvIHRoYXQgdGhlIGNlbGwgaGVpZ2h0IGlzIGFjY29yZGluZyB0byBkYXlNYXhFdmVudHMuICovfVxuXHRcdFx0XHRcdFx0XHR7dG9kYXlFdmVudHMuc2xpY2UoMCwgZGF5TWF4RXZlbnRzKS5tYXAoKGV2ZW50LCByb3dJbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBzaHJpbmstMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17ZXZlbnQ/LnRpdGxlfVxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtgZW1wdHktJHtyb3dJbmRleH0tJHtldmVudC5pZH1gfVxuXHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9e3sgaGVpZ2h0OiBgJHtFVkVOVF9CQVJfSEVJR0hUfXB4YCB9fVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdCkpfVxuXG5cdFx0XHRcdFx0XHRcdHsvKiBTaG93IG1vcmUgZXZlbnRzIGJ1dHRvbiB3aXRoIGFjY3VyYXRlIGNvdW50ICovfVxuXHRcdFx0XHRcdFx0XHR7aGFzSGlkZGVuRXZlbnRzICYmIChcblx0XHRcdFx0XHRcdFx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9hMTF5L3VzZVNlbWFudGljRWxlbWVudHM6IFVzaW5nIGRpdiBhcyBidXR0b25cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGN1cnNvci1wb2ludGVyIHRleHQtWzEwcHhdIHdoaXRlc3BhY2Utbm93cmFwIHNtOnRleHQteHMgc2hyaW5rLTAgbXQtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0FsbEV2ZW50cyhkYXksIHRvZGF5RXZlbnRzKVxuXHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdG9uS2V5RG93bj17KGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnICcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0FsbEV2ZW50cyhkYXksIHRvZGF5RXZlbnRzKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0cm9sZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHR0YWJJbmRleD17MH1cblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHQre2hpZGRlbkV2ZW50c0NvdW50fSB7dCgnbW9yZScpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9Ecm9wcGFibGVDZWxsPlxuXG5cdFx0XHR7LyogRGlhbG9nIGZvciBzaG93aW5nIGFsbCBldmVudHMgKi99XG5cdFx0XHQ8QWxsRXZlbnREaWFsb2cgcmVmPXthbGxFdmVudHNEaWFsb2dSZWZ9IC8+XG5cdFx0PC8+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEdyaWRDZWxsID0gbWVtbyhOb01lbW9HcmlkQ2VsbCkgYXMgdHlwZW9mIE5vTWVtb0dyaWRDZWxsXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBEYXlOdW1iZXJQcm9wcyB7XG5cdGRhdGU6IERheWpzXG5cdGxvY2FsZT86IHN0cmluZ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBkYXkgbnVtYmVyIGZvciBhIGNhbGVuZGFyIGNlbGwsIGhpZ2hsaWdodGluZyAndG9kYXknIHdpdGggYSBwcmltYXJ5IGJhY2tncm91bmQuXG4gKi9cbmV4cG9ydCBjb25zdCBEYXlOdW1iZXI6IFJlYWN0LkZDPERheU51bWJlclByb3BzPiA9ICh7XG5cdGRhdGUsXG5cdGxvY2FsZSA9ICdlbicsXG5cdGNsYXNzTmFtZSxcbn0pID0+IHtcblx0Y29uc3QgaXNUb2RheSA9IGRhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaC01IHctNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIHRleHQteHMgc2hyaW5rLTAnLFxuXHRcdFx0XHRpc1RvZGF5ICYmICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGZvbnQtbWVkaXVtJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e1xuXHRcdFx0XHRpc1RvZGF5ID8gJ2RheS1udW1iZXItdG9kYXknIDogYGRheS1udW1iZXItJHtkYXRlLmZvcm1hdCgnRCcpfWBcblx0XHRcdH1cblx0XHQ+XG5cdFx0XHR7ZGF0ZS5mb3JtYXQoJ0QnKX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHtcblx0RGlhbG9nLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RlZERheUV2ZW50cyB7XG5cdGRheTogRGF5anNcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbn1cblxuaW50ZXJmYWNlIEFsbEV2ZW50RGlhbG9nUHJvcHMge1xuXHRyZWY6IFJlYWN0LlJlZjx7XG5cdFx0b3BlbjogKCkgPT4gdm9pZFxuXHRcdGNsb3NlOiAoKSA9PiB2b2lkXG5cdFx0c2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG5cdH0+XG59XG5cbmV4cG9ydCBjb25zdCBBbGxFdmVudERpYWxvZzogUmVhY3QuRkM8QWxsRXZlbnREaWFsb2dQcm9wcz4gPSAoeyByZWYgfSkgPT4ge1xuXHRjb25zdCBbZGlhbG9nT3Blbiwgc2V0RGlhbG9nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkRGF5RXZlbnRzLCBzZXRTZWxlY3RlZERheUV2ZW50c10gPVxuXHRcdHVzZVN0YXRlPFNlbGVjdGVkRGF5RXZlbnRzIHwgbnVsbD4obnVsbClcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWsgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHR1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcblx0XHRvcGVuOiAoKSA9PiBzZXREaWFsb2dPcGVuKHRydWUpLFxuXHRcdGNsb3NlOiAoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKSxcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+XG5cdFx0XHRzZXRTZWxlY3RlZERheUV2ZW50cyhkYXlFdmVudHMpLFxuXHR9KSlcblxuXHQvLyBHZXQgc3RhcnQgZGF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9udGggdmlldyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuXHRjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cblx0Ly8gQ2FsY3VsYXRlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGNhbGVuZGFyIGdyaWQgY29ycmVjdGx5XG5cdC8vIEZpbmQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIChlLmcuIFN1bmRheSBvciBNb25kYXkpIHRoYXQgY29tZXMgYmVmb3JlIG9yIG9uIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoXG5cdGxldCBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGZpcnN0RGF5T2ZNb250aC5jbG9uZSgpXG5cdHdoaWxlIChhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5kYXkoKSAhPT0gZmlyc3REYXlPZldlZWspIHtcblx0XHRhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLnN1YnRyYWN0KDEsICdkYXknKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17c2V0RGlhbG9nT3Blbn0gb3Blbj17ZGlhbG9nT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtaC1bODB2aF0gbWF4LXctbWQgb3ZlcmZsb3cteS1hdXRvXCI+XG5cdFx0XHRcdDxEaWFsb2dIZWFkZXI+XG5cdFx0XHRcdFx0PERpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRGF5RXZlbnRzPy5kYXkuZm9ybWF0KCdNTU1NIEQsIFlZWVknKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHQ8L0RpYWxvZ0hlYWRlcj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJtdC00IHNwYWNlLXktM1wiPlxuXHRcdFx0XHRcdHtzZWxlY3RlZERheUV2ZW50cz8uZXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxEcmFnZ2FibGVFdmVudFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIG15LTEgaC1bMzBweF1cIiAvLyBVc2UgZXZlbnQgSUQgZm9yIHVuaXF1ZSBpZGVudGlmaWNhdGlvblxuXHRcdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17YGFsbC1ldmVudHMtZGlhbG9nLWV2ZW50LSQke2V2ZW50LmlkfWB9XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQ9e2V2ZW50fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17ZXZlbnQuaWR9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9EaWFsb2dDb250ZW50PlxuXHRcdDwvRGlhbG9nPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZURyYWdnYWJsZSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgdHlwZSB7IENTU1Byb3BlcnRpZXMgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBnZXRCb3JkZXJSYWRpdXNDbGFzcyA9IChcblx0aXNUcnVuY2F0ZWRTdGFydDogYm9vbGVhbixcblx0aXNUcnVuY2F0ZWRFbmQ6IGJvb2xlYW5cbikgPT4ge1xuXHRpZiAoaXNUcnVuY2F0ZWRTdGFydCAmJiBpc1RydW5jYXRlZEVuZCkge1xuXHRcdHJldHVybiAncm91bmRlZC1ub25lJ1xuXHR9XG5cdGlmIChpc1RydW5jYXRlZFN0YXJ0KSB7XG5cdFx0cmV0dXJuICdyb3VuZGVkLXItbWQgcm91bmRlZC1sLW5vbmUnXG5cdH1cblx0aWYgKGlzVHJ1bmNhdGVkRW5kKSB7XG5cdFx0cmV0dXJuICdyb3VuZGVkLWwtbWQgcm91bmRlZC1yLW5vbmUnXG5cdH1cblx0cmV0dXJuICdyb3VuZGVkLW1kJ1xufVxuXG5mdW5jdGlvbiBEcmFnZ2FibGVFdmVudFVubWVtb2l6ZWQoe1xuXHRlbGVtZW50SWQsXG5cdGV2ZW50LFxuXHRjbGFzc05hbWUsXG5cdHN0eWxlLFxuXHRkaXNhYmxlRHJhZyA9IGZhbHNlLFxufToge1xuXHRlbGVtZW50SWQ6IHN0cmluZ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0c3R5bGU/OiBDU1NQcm9wZXJ0aWVzXG5cdGV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGRpc2FibGVEcmFnPzogYm9vbGVhblxufSkge1xuXHRjb25zdCB7IG9uRXZlbnRDbGljaywgcmVuZGVyRXZlbnQsIGRpc2FibGVFdmVudENsaWNrLCBkaXNhYmxlRHJhZ0FuZERyb3AgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHsgYXR0cmlidXRlcywgbGlzdGVuZXJzLCBzZXROb2RlUmVmLCBpc0RyYWdnaW5nIH0gPSB1c2VEcmFnZ2FibGUoe1xuXHRcdGlkOiBlbGVtZW50SWQsXG5cdFx0ZGF0YToge1xuXHRcdFx0ZXZlbnQsXG5cdFx0XHR0eXBlOiAnY2FsZW5kYXItZXZlbnQnLFxuXHRcdH0sXG5cdFx0ZGlzYWJsZWQ6IGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcCxcblx0fSlcblxuXHQvLyBEZWZhdWx0IGV2ZW50IGNvbnRlbnQgdG8gcmVuZGVyIGlmIGN1c3RvbSByZW5kZXJFdmVudCBpcyBub3QgcHJvdmlkZWRcblx0Y29uc3QgRGVmYXVsdEV2ZW50Q29udGVudCA9ICgpID0+IHtcblx0XHQvLyBDaGVjayBpZiB0aGlzIGV2ZW50IGhhcyB0cnVuY2F0aW9uIGluZm9ybWF0aW9uXG5cdFx0Y29uc3QgZW5oYW5jZWRFdmVudCA9IGV2ZW50IGFzIHVua25vd24gYXMge1xuXHRcdFx0aXNUcnVuY2F0ZWRTdGFydD86IGJvb2xlYW5cblx0XHRcdGlzVHJ1bmNhdGVkRW5kPzogYm9vbGVhblxuXHRcdH1cblx0XHRjb25zdCBpc1RydW5jYXRlZFN0YXJ0ID0gZW5oYW5jZWRFdmVudC5pc1RydW5jYXRlZFN0YXJ0XG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRFbmQgPSBlbmhhbmNlZEV2ZW50LmlzVHJ1bmNhdGVkRW5kXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdGV2ZW50LmJhY2tncm91bmRDb2xvciB8fCAnYmctYmx1ZS01MDAnLFxuXHRcdFx0XHRcdGV2ZW50LmNvbG9yIHx8ICd0ZXh0LXdoaXRlJyxcblx0XHRcdFx0XHQnaC1mdWxsIHctZnVsbCBweC0xIGJvcmRlci1bMS41cHhdIGJvcmRlci1jYXJkIHRleHQtbGVmdCBvdmVyZmxvdy1jbGlwIHJlbGF0aXZlJyxcblx0XHRcdFx0XHRnZXRCb3JkZXJSYWRpdXNDbGFzcyhcblx0XHRcdFx0XHRcdEJvb2xlYW4oaXNUcnVuY2F0ZWRTdGFydCksXG5cdFx0XHRcdFx0XHRCb29sZWFuKGlzVHJ1bmNhdGVkRW5kKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KX1cblx0XHRcdFx0c3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBldmVudC5iYWNrZ3JvdW5kQ29sb3IsIGNvbG9yOiBldmVudC5jb2xvciB9fVxuXHRcdFx0PlxuXHRcdFx0XHR7LyogTGVmdCBjb250aW51YXRpb24gaW5kaWNhdG9yICovfVxuXHRcdFx0XHR7aXNUcnVuY2F0ZWRTdGFydCAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBsZWZ0LTAgdG9wLTAgYm90dG9tLTAgdy0wLjUgYmctZm9yZWdyb3VuZC8yNVwiPjwvZGl2PlxuXHRcdFx0XHQpfVxuXG5cdFx0XHRcdHsvKiBFdmVudCB0aXRsZSAqL31cblx0XHRcdFx0PHBcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J3RleHQtWzEwcHhdIGZvbnQtc2VtaWJvbGQgc206dGV4dC14cyBtdC0wLjUnLFxuXHRcdFx0XHRcdFx0Ly8gQWRkIHNsaWdodCBwYWRkaW5nIHRvIGF2b2lkIG92ZXJsYXAgd2l0aCBpbmRpY2F0b3JzXG5cdFx0XHRcdFx0XHRpc1RydW5jYXRlZFN0YXJ0ICYmICdwbC0xJyxcblx0XHRcdFx0XHRcdGlzVHJ1bmNhdGVkRW5kICYmICdwci0xJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7ZXZlbnQudGl0bGV9XG5cdFx0XHRcdDwvcD5cblxuXHRcdFx0XHR7LyogUmlnaHQgY29udGludWF0aW9uIGluZGljYXRvciAqL31cblx0XHRcdFx0e2lzVHJ1bmNhdGVkRW5kICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTAgdG9wLTAgYm90dG9tLTAgdy0wLjUgYmctZm9yZWdyb3VuZC8yNVwiPjwvZGl2PlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9kaXY+XG5cdFx0KVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQndHJ1bmNhdGUgaC1mdWxsIHctZnVsbCcsXG5cdFx0XHRcdGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcFxuXHRcdFx0XHRcdD8gZGlzYWJsZUV2ZW50Q2xpY2tcblx0XHRcdFx0XHRcdD8gJ2N1cnNvci1kZWZhdWx0J1xuXHRcdFx0XHRcdFx0OiAnY3Vyc29yLXBvaW50ZXInXG5cdFx0XHRcdFx0OiAnY3Vyc29yLWdyYWInLFxuXHRcdFx0XHRpc0RyYWdnaW5nICYmXG5cdFx0XHRcdFx0IShkaXNhYmxlRHJhZyB8fCBkaXNhYmxlRHJhZ0FuZERyb3ApICYmXG5cdFx0XHRcdFx0J2N1cnNvci1ncmFiYmluZyBzaGFkb3ctbGcnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRsYXlvdXQ9e3RydWV9XG5cdFx0XHRsYXlvdXRJZD17ZWxlbWVudElkfVxuXHRcdFx0b25DbGljaz17KGUpID0+IHtcblx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRvbkV2ZW50Q2xpY2soZXZlbnQpXG5cdFx0XHR9fVxuXHRcdFx0cmVmPXtzZXROb2RlUmVmfVxuXHRcdFx0c3R5bGU9e3N0eWxlfVxuXHRcdFx0dHJhbnNpdGlvbktleT17ZWxlbWVudElkfVxuXHRcdFx0ey4uLmF0dHJpYnV0ZXN9XG5cdFx0XHR7Li4ubGlzdGVuZXJzfVxuXHRcdD5cblx0XHRcdHsvKiBVc2UgY3VzdG9tIHJlbmRlckV2ZW50IGZyb20gY29udGV4dCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB1c2UgZGVmYXVsdCAqL31cblx0XHRcdHtyZW5kZXJFdmVudCA/IHJlbmRlckV2ZW50KGV2ZW50KSA6IDxEZWZhdWx0RXZlbnRDb250ZW50IC8+fVxuXHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBEcmFnZ2FibGVFdmVudCA9IG1lbW8oXG5cdERyYWdnYWJsZUV2ZW50VW5tZW1vaXplZCxcblx0KHByZXZQcm9wcywgbmV4dFByb3BzKSA9PiB7XG5cdFx0Ly8gQ29tcGFyZSB0aGUgZXNzZW50aWFsIHByb3BzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuXHRcdHJldHVybiAoXG5cdFx0XHRwcmV2UHJvcHMuZWxlbWVudElkID09PSBuZXh0UHJvcHMuZWxlbWVudElkICYmXG5cdFx0XHRwcmV2UHJvcHMuZGlzYWJsZURyYWcgPT09IG5leHRQcm9wcy5kaXNhYmxlRHJhZyAmJlxuXHRcdFx0cHJldlByb3BzLmNsYXNzTmFtZSA9PT0gbmV4dFByb3BzLmNsYXNzTmFtZSAmJlxuXHRcdFx0cHJldlByb3BzLmV2ZW50ID09PSBuZXh0UHJvcHMuZXZlbnRcblx0XHQpXG5cdH1cbilcbiIsCiAgICAiLy8gb3hsaW50LWRpc2FibGUgbm8tbmVnYXRlZC1jb25kaXRpb25cblxuaW1wb3J0IHsgdXNlRHJvcHBhYmxlIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgRElTQUJMRURfQ0VMTF9DTEFTU05BTUUgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgRHJvcHBhYmxlQ2VsbFByb3BzIHtcblx0aWQ6IHN0cmluZ1xuXHR0eXBlOiAnZGF5LWNlbGwnIHwgJ3RpbWUtY2VsbCdcblx0ZGF0ZTogRGF5anNcblx0aG91cj86IG51bWJlclxuXHRtaW51dGU/OiBudW1iZXJcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRhbGxEYXk/OiBib29sZWFuXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xuXHRkaXNhYmxlZD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERyb3BwYWJsZUNlbGwoe1xuXHRpZCxcblx0dHlwZSxcblx0ZGF0ZSxcblx0aG91cixcblx0bWludXRlLFxuXHRyZXNvdXJjZUlkLFxuXHRhbGxEYXksXG5cdGNoaWxkcmVuLFxuXHRjbGFzc05hbWUsXG5cdHN0eWxlLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxuXHRkaXNhYmxlZCA9IGZhbHNlLFxufTogRHJvcHBhYmxlQ2VsbFByb3BzKSB7XG5cdGNvbnN0IHtcblx0XHRvbkNlbGxDbGljayxcblx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRjbGFzc2VzT3ZlcnJpZGUsXG5cdFx0dmlldyxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB7IGlzT3Zlciwgc2V0Tm9kZVJlZiB9ID0gdXNlRHJvcHBhYmxlKHtcblx0XHRpZCxcblx0XHRkYXRhOiB7XG5cdFx0XHR0eXBlLFxuXHRcdFx0ZGF0ZSxcblx0XHRcdGhvdXIsXG5cdFx0XHRtaW51dGUsXG5cdFx0XHRyZXNvdXJjZUlkLFxuXHRcdFx0YWxsRGF5LFxuXHRcdH0sXG5cdFx0ZGlzYWJsZWQ6IGRpc2FibGVEcmFnQW5kRHJvcCB8fCBkaXNhYmxlZCxcblx0fSlcblxuXHRjb25zdCBoYW5kbGVDZWxsQ2xpY2sgPSAoZTogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuXHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblxuXHRcdGlmIChkaXNhYmxlQ2VsbENsaWNrIHx8IGRpc2FibGVkKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRjb25zdCBzdGFydCA9IGRhdGUuaG91cihob3VyID8/IDApLm1pbnV0ZShtaW51dGUgPz8gMClcblx0XHRsZXQgZW5kID0gc3RhcnQuY2xvbmUoKVxuXHRcdGlmIChob3VyICE9PSB1bmRlZmluZWQgJiYgbWludXRlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGVuZCA9IGVuZC5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGUgKyAxNSkgLy8gZGF5IHZpZXcgdGltZSBzbG90cyBhcmUgMTUgbWludXRlc1xuXHRcdH0gZWxzZSBpZiAoaG91ciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRlbmQgPSBlbmQuaG91cihob3VyICsgMSkubWludXRlKDApIC8vIHdlZWsgdmlldyB0aW1lIHNsb3RzIGFyZSAxIGhvdXJcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZW5kID0gZW5kLmhvdXIoMjMpLm1pbnV0ZSg1OSkgLy8gbW9udGggdmlldyBmdWxsIGRheVxuXHRcdH1cblxuXHRcdG9uQ2VsbENsaWNrKHsgc3RhcnQsIGVuZCwgcmVzb3VyY2VJZCwgYWxsRGF5IH0pXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvbm9TdGF0aWNFbGVtZW50SW50ZXJhY3Rpb25zOiBUaGUgY2VsbCBpcyBpbnRlcmFjdGl2ZSBmb3IgZXZlbnQgY3JlYXRpb25cblx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9hMTF5L3VzZUtleVdpdGhDbGlja0V2ZW50czogS2V5IGV2ZW50cyBhcmUgaGFuZGxlZCBieSBwYXJlbnQgY29tcG9uZW50c1xuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdkcm9wcGFibGUtY2VsbCcsXG5cdFx0XHRcdGNsYXNzTmFtZSxcblx0XHRcdFx0aXNPdmVyICYmICFkaXNhYmxlRHJhZ0FuZERyb3AgJiYgIWRpc2FibGVkICYmICdiZy1hY2NlbnQnLFxuXHRcdFx0XHRkaXNhYmxlQ2VsbENsaWNrIHx8IGRpc2FibGVkID8gJ2N1cnNvci1kZWZhdWx0JyA6ICdjdXJzb3ItcG9pbnRlcicsXG5cdFx0XHRcdGRpc2FibGVkICYmIChjbGFzc2VzT3ZlcnJpZGU/LmRpc2FibGVkQ2VsbCB8fCBESVNBQkxFRF9DRUxMX0NMQVNTTkFNRSlcblx0XHRcdCl9XG5cdFx0XHRkYXRhLWRpc2FibGVkPXtkaXNhYmxlZC50b1N0cmluZygpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG5cdFx0XHRkYXRhLXZpZXc9e3ZpZXd9XG5cdFx0XHRvbkNsaWNrPXtoYW5kbGVDZWxsQ2xpY2t9XG5cdFx0XHRyZWY9e3NldE5vZGVSZWZ9XG5cdFx0XHRzdHlsZT17c3R5bGV9XG5cdFx0PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIFJlc291cmNlQ2VsbFByb3BzIHtcblx0cmVzb3VyY2U6IFJlc291cmNlXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNlbGw6IFJlYWN0LkZDPFJlc291cmNlQ2VsbFByb3BzPiA9ICh7XG5cdHJlc291cmNlLFxuXHRjbGFzc05hbWUsXG5cdGNoaWxkcmVuLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxufSkgPT4ge1xuXHRjb25zdCB7IHJlbmRlclJlc291cmNlIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC0yIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkfVxuXHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0Y29sb3I6IHJlc291cmNlLmNvbG9yLFxuXHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IHJlc291cmNlLmJhY2tncm91bmRDb2xvcixcblx0XHRcdH19XG5cdFx0PlxuXHRcdFx0e3JlbmRlclJlc291cmNlXG5cdFx0XHRcdD8gcmVuZGVyUmVzb3VyY2UocmVzb3VyY2UpXG5cdFx0XHRcdDogKGNoaWxkcmVuID8/IChcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bSB0cnVuY2F0ZVwiPntyZXNvdXJjZS50aXRsZX08L2Rpdj5cblx0XHRcdFx0XHQpKX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgRVZFTlRfQkFSX0hFSUdIVCB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB0eXBlIHsgUG9zaXRpb25lZEV2ZW50IH0gZnJvbSAnQC9saWIvdXRpbHMvcG9zaXRpb24td2Vlay1ldmVudHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllclByb3BzIHtcblx0ZGF5czogRGF5anNbXVxuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcblx0cG9zaXRpb25lZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W11cbn1cblxuY29uc3QgTm9NZW1vSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllcjogUmVhY3QuRkM8XG5cdEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJQcm9wc1xuPiA9ICh7IGRheXMsIHJlc291cmNlSWQsICdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsIHBvc2l0aW9uZWRFdmVudHMgfSkgPT4ge1xuXHRjb25zdCB3ZWVrU3RhcnQgPSBkYXlzLmF0KDApPy5zdGFydE9mKCdkYXknKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCBwb2ludGVyLWV2ZW50cy1ub25lIHotMTAgb3ZlcmZsb3ctY2xpcFwiXG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHQ+XG5cdFx0XHR7cG9zaXRpb25lZEV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50S2V5ID0gYCR7ZXZlbnQuaWR9LSR7ZXZlbnQucG9zaXRpb259LSR7d2Vla1N0YXJ0Py50b0lTT1N0cmluZygpfS0ke3Jlc291cmNlSWQgPz8gJ25vLXJlc291cmNlJ31gXG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJhYnNvbHV0ZSB6LTEwIHBvaW50ZXItZXZlbnRzLWF1dG8gb3ZlcmZsb3ctY2xpcFwiXG5cdFx0XHRcdFx0XHRkYXRhLWxlZnQ9e2V2ZW50LmxlZnR9XG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YGhvcml6b250YWwtZXZlbnQtJHtldmVudC5pZH1gfVxuXHRcdFx0XHRcdFx0ZGF0YS10b3A9e2V2ZW50LnRvcH1cblx0XHRcdFx0XHRcdGRhdGEtd2lkdGg9e2V2ZW50LndpZHRofVxuXHRcdFx0XHRcdFx0a2V5PXtgJHtldmVudEtleX0td3JhcHBlcmB9XG5cdFx0XHRcdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRcdFx0XHRsZWZ0OiBgY2FsYygke2V2ZW50LmxlZnR9JSArIHZhcigtLXNwYWNpbmcpICogMC4yNSlgLFxuXHRcdFx0XHRcdFx0XHR3aWR0aDogYGNhbGMoJHtldmVudC53aWR0aH0lIC0gdmFyKC0tc3BhY2luZykgKiAxKWAsXG5cdFx0XHRcdFx0XHRcdHRvcDogYCR7ZXZlbnQudG9wfXB4YCxcblx0XHRcdFx0XHRcdFx0aGVpZ2h0OiBgJHtFVkVOVF9CQVJfSEVJR0hUfXB4YCxcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PERyYWdnYWJsZUV2ZW50XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtZnVsbCB3LWZ1bGwgc2hhZG93XCJcblx0XHRcdFx0XHRcdFx0ZWxlbWVudElkPXtldmVudEtleX1cblx0XHRcdFx0XHRcdFx0ZXZlbnQ9e2V2ZW50fVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXIgPSBtZW1vKE5vTWVtb0hvcml6b250YWxHcmlkRXZlbnRzTGF5ZXIpXG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBBbGxEYXlDZWxsUHJvcHMge1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgTm9NZW1vQWxsRGF5Q2VsbDogUmVhY3QuRkM8QWxsRGF5Q2VsbFByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCd3LTE2IGJvcmRlci1yIHNocmluay0wIHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHNtOnRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdD5cblx0XHRcdHt0KCdhbGxEYXknKX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgQWxsRGF5Q2VsbCA9IG1lbW8oTm9NZW1vQWxsRGF5Q2VsbClcbiIsCiAgICAiaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgSG91ckxhYmVsUHJvcHMge1xuXHRkYXRlOiBEYXlqc1xufVxuXG5leHBvcnQgY29uc3QgSG91ckxhYmVsOiBSZWFjdC5GQzxIb3VyTGFiZWxQcm9wcz4gPSAoeyBkYXRlIH0pID0+IHtcblx0Y29uc3QgeyByZW5kZXJIb3VyLCB0aW1lRm9ybWF0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKHJlbmRlckhvdXIpIHtcblx0XHRyZXR1cm4gPD57cmVuZGVySG91cihkYXRlKX08Lz5cblx0fVxuXG5cdHJldHVybiA8PntkYXRlLmZvcm1hdCh0aW1lRm9ybWF0ID09PSAnMTItaG91cicgPyAnaCBBJyA6ICdIJyl9PC8+XG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgR3JpZENlbGwgfSBmcm9tICcuLi9ncmlkLWNlbGwnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWRFdmVudHNMYXllciB9IGZyb20gJy4vdmVydGljYWwtZ3JpZC1ldmVudHMtbGF5ZXInXG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVydGljYWxHcmlkQ29sUHJvcHMge1xuXHRpZDogc3RyaW5nXG5cdGRheT86IERheWpzXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRkYXlzOiBEYXlqc1tdIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHJlbmRlckhlYWRlcj86ICgpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRyZW5kZXJDZWxsPzogKGRhdGU6IERheWpzKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0bm9FdmVudHM/OiBib29sZWFuXG5cdC8qKiBPcHRpb25hbCBhcnJheSBvZiBtaW51dGUgc2xvdHMgYnkgd2hpY2ggdGhlIGhvdXIgaXMgZGl2aWRlZFxuXHQgKiBlLmcuLCBbMCwgMTUsIDMwLCA0NV0gZm9yIHF1YXJ0ZXItaG91ciBzbG90c1xuXHQgKi9cblx0Y2VsbFNsb3RzPzogbnVtYmVyW11cblx0LyoqIFdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdCBjb2x1bW4gaW4gdGhlIGdyaWQgKi9cblx0aXNMYXN0Q29sdW1uPzogYm9vbGVhblxufVxuXG5jb25zdCBOb01lbW9WZXJ0aWNhbEdyaWRDb2w6IFJlYWN0LkZDPFZlcnRpY2FsR3JpZENvbFByb3BzPiA9ICh7XG5cdGlkLFxuXHRkYXlzLFxuXHRyZXNvdXJjZUlkLFxuXHRyZXNvdXJjZSxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcblx0Z3JpZFR5cGUsXG5cdGNsYXNzTmFtZSxcblx0cmVuZGVyQ2VsbCxcblx0bm9FdmVudHMsXG5cdGNlbGxTbG90cyA9IFs2MF0sIC8vIERlZmF1bHQgdG8gZnVsbCBob3VyIHNsb3RzXG5cdGlzTGFzdENvbHVtbixcbn0pID0+IHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBmbGV4LWNvbCBmbGV4LTEgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1pbi13LTUwIGJnLWJhY2tncm91bmQgcmVsYXRpdmUnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZCB8fCBgdmVydGljYWwtY29sLSR7aWR9YH1cblx0XHQ+XG5cdFx0XHR7LyogVGltZSBzbG90cyAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIHJlbGF0aXZlIGdyaWRcIlxuXHRcdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRcdGdyaWRUZW1wbGF0ZVJvd3M6IGByZXBlYXQoJHtkYXlzLmxlbmd0aH0sIG1pbm1heCgwLCAxZnIpKWAsXG5cdFx0XHRcdH19XG5cdFx0XHQ+XG5cdFx0XHRcdHtkYXlzLm1hcCgoZGF5LCBkYXlJbmRleCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGhvdXJTdHIgPSBkYXkuZm9ybWF0KCdISCcpXG5cdFx0XHRcdFx0Y29uc3QgZGF0ZVN0ciA9IGRheS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXG5cdFx0XHRcdFx0aWYgKHJlbmRlckNlbGwpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHRlc3RJZCA9XG5cdFx0XHRcdFx0XHRcdGlkID09PSAndGltZS1jb2wnXG5cdFx0XHRcdFx0XHRcdFx0PyBgdmVydGljYWwtdGltZS0ke2hvdXJTdHJ9YFxuXHRcdFx0XHRcdFx0XHRcdDogYHZlcnRpY2FsLWNlbGwtJHtkYXRlU3RyfS0ke2hvdXJTdHJ9LTAwJHtyZXNvdXJjZUlkID8gYC0ke3Jlc291cmNlSWR9YCA6ICcnfWBcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLVs2MHB4XSBib3JkZXItYiBib3JkZXItclwiXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e3Rlc3RJZH1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2Ake2lkfS0ke2RheUluZGV4fS0ke2hvdXJTdHJ9YH1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHtyZW5kZXJDZWxsKGRheSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBjZWxsU2xvdHMubWFwKChtaW51dGUpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IG0gPSBtaW51dGUgPT09IDYwID8gdW5kZWZpbmVkIDogbWludXRlXG5cdFx0XHRcdFx0XHRjb25zdCBtbSA9IG0gPT09IHVuZGVmaW5lZCA/ICcwMCcgOiBTdHJpbmcobSkucGFkU3RhcnQoMiwgJzAnKVxuXHRcdFx0XHRcdFx0Y29uc3QgdGVzdElkID0gYHZlcnRpY2FsLWNlbGwtJHtkYXRlU3RyfS0ke2hvdXJTdHJ9LSR7bW19JHtyZXNvdXJjZUlkID8gYC0ke3Jlc291cmNlSWR9YCA6ICcnfWBcblxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PEdyaWRDZWxsXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdob3ZlcjpiZy1hY2NlbnQgcmVsYXRpdmUgei0xMCBoLVs2MHB4XSBjdXJzb3ItcG9pbnRlciBib3JkZXItYicsXG5cdFx0XHRcdFx0XHRcdFx0XHRtaW51dGUgPT09IDYwID8gJycgOiAnYm9yZGVyLWRhc2hlZCBoLVsxNXB4XSBtaW4taC1bMTVweF0nLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNMYXN0Q29sdW1uID8gJ2JvcmRlci1yLTAnIDogJ2JvcmRlci1yJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e3Rlc3RJZH1cblx0XHRcdFx0XHRcdFx0XHRkYXk9e20gPyBkYXkubWludXRlKG0pIDogZGF5fVxuXHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRob3VyPXtkYXkuaG91cigpfVxuXHRcdFx0XHRcdFx0XHRcdGtleT17YCR7aWR9LSR7ZGF5SW5kZXh9LSR7bW19YH1cblx0XHRcdFx0XHRcdFx0XHRtaW51dGU9e219XG5cdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH0gLy8gRXZlbnRzIGFyZSByZW5kZXJlZCBpbiBhIHNlcGFyYXRlIGxheWVyXG5cdFx0XHRcdFx0XHRcdFx0c2hvdWxkUmVuZGVyRXZlbnRzPXtmYWxzZX1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9KX1cblxuXHRcdFx0XHR7LyogRXZlbnQgYmxvY2tzIGxheWVyICovfVxuXHRcdFx0XHR7IW5vRXZlbnRzICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgei0xMCBwb2ludGVyLWV2ZW50cy1ub25lXCI+XG5cdFx0XHRcdFx0XHQ8VmVydGljYWxHcmlkRXZlbnRzTGF5ZXJcblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B2ZXJ0aWNhbC1ldmVudHMtJHtpZH1gfVxuXHRcdFx0XHRcdFx0XHRkYXlzPXtkYXlzfVxuXHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgVmVydGljYWxHcmlkQ29sID0gbWVtbyhcblx0Tm9NZW1vVmVydGljYWxHcmlkQ29sXG4pIGFzIHR5cGVvZiBOb01lbW9WZXJ0aWNhbEdyaWRDb2xcbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ3VycmVudFRpbWVJbmRpY2F0b3IgfSBmcm9tICdAL2NvbXBvbmVudHMvY3VycmVudC10aW1lLWluZGljYXRvcidcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgeyB1c2VQcm9jZXNzZWREYXlFdmVudHMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZERheUV2ZW50cydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyUHJvcHMge1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdGRheXM6IERheWpzW10gLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGxheWVyIHJlcHJlc2VudHNcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRyZXNvdXJjZT86IFJlc291cmNlXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcbn1cblxuY29uc3QgTm9NZW1vVmVydGljYWxHcmlkRXZlbnRzTGF5ZXI6IFJlYWN0LkZDPFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyUHJvcHM+ID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUgPSAnaG91cicsXG5cdHJlc291cmNlSWQsXG5cdHJlc291cmNlLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxufSkgPT4ge1xuXHRjb25zdCB0b2RheUV2ZW50cyA9IHVzZVByb2Nlc3NlZERheUV2ZW50cyh7IGRheXMsIGdyaWRUeXBlLCByZXNvdXJjZUlkIH0pXG5cdGNvbnN0IHJhbmdlU3RhcnQgPSBkYXlzLmF0KDApXG5cdGNvbnN0IHJhbmdlRW5kID0gZGF5cy5hdCgtMSk/LmFkZCgxLCBncmlkVHlwZSlcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGwgcG9pbnRlci1ldmVudHMtbm9uZSB6LTEwIG92ZXJmbG93LWNsaXBcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG5cdFx0PlxuXHRcdFx0e3JhbmdlU3RhcnQgJiYgcmFuZ2VFbmQgJiYgKFxuXHRcdFx0XHQ8Q3VycmVudFRpbWVJbmRpY2F0b3Jcblx0XHRcdFx0XHRyYW5nZUVuZD17cmFuZ2VFbmR9XG5cdFx0XHRcdFx0cmFuZ2VTdGFydD17cmFuZ2VTdGFydH1cblx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdC8+XG5cdFx0XHQpfVxuXHRcdFx0e3RvZGF5RXZlbnRzLm1hcCgoZXZlbnQsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50S2V5ID0gYGV2ZW50LSR7ZXZlbnQuaWR9LSR7aW5kZXh9LSR7ZGF5cy5hdCgwKT8udG9JU09TdHJpbmcoKX0tJHtyZXNvdXJjZUlkID8/ICduby1yZXNvdXJjZSd9YFxuXHRcdFx0XHRjb25zdCBpc1Nob3J0RXZlbnQgPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydCwgJ21pbnV0ZScpIDw9IDE1XG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJhYnNvbHV0ZVwiXG5cdFx0XHRcdFx0XHRrZXk9e2Ake2V2ZW50S2V5fS13cmFwcGVyYH1cblx0XHRcdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0XHRcdGxlZnQ6IGAke2V2ZW50LmxlZnR9JWAsXG5cdFx0XHRcdFx0XHRcdHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDIpYCxcblx0XHRcdFx0XHRcdFx0dG9wOiBgJHtldmVudC50b3B9JWAsXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogYCR7ZXZlbnQuaGVpZ2h0fSVgLFxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8RHJhZ2dhYmxlRXZlbnRcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbigncG9pbnRlci1ldmVudHMtYXV0bycsIHtcblx0XHRcdFx0XHRcdFx0XHQnWyZfcF06dGV4dC1bMTBweF0gWyZfcF06bXQtMCc6IGlzU2hvcnRFdmVudCxcblx0XHRcdFx0XHRcdFx0fSl9XG5cdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17ZXZlbnRLZXl9XG5cdFx0XHRcdFx0XHRcdGV2ZW50PXtldmVudH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBWZXJ0aWNhbEdyaWRFdmVudHNMYXllciA9IG1lbW8oTm9NZW1vVmVydGljYWxHcmlkRXZlbnRzTGF5ZXIpXG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyB7XG5cdC8qKiBUaGUgc3RhcnQgZGF0ZS90aW1lIG9mIHRoZSBjb250YWluZXIncyB0aW1lbGluZSAoZS5nLiwgdG9wIG9mIHRoZSBjb2x1bW4pICovXG5cdHJhbmdlU3RhcnQ6IERheWpzXG5cdC8qKiBUaGUgZW5kIGRhdGUvdGltZSBvZiB0aGUgY29udGFpbmVyJ3MgdGltZWxpbmUgKGUuZy4sIGJvdHRvbSBvZiB0aGUgY29sdW1uKSAqL1xuXHRyYW5nZUVuZDogRGF5anNcblx0LyoqIE9wdGlvbmFsIHJlZmVyZW5jZSB0aW1lIGZvciBcIm5vd1wiICh1c2VmdWwgZm9yIHRlc3RpbmcpICovXG5cdG5vdz86IERheWpzXG5cdC8qKiBUaGUgcmVzb3VyY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29sdW1uIChvcHRpb25hbCkgKi9cblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBob3Jpem9udGFsIHJlZCBsaW5lIGluZGljYXRpbmcgdGhlIGN1cnJlbnQgdGltZSByZWxhdGl2ZSB0byBhIHZlcnRpY2FsIGNvbnRhaW5lcidzIHRpbWVsaW5lLlxuICogVGhlIGluZGljYXRvciBoYW5kbGVzIGl0cyBvd24gdmlzaWJpbGl0eSBiYXNlZCBvbiB3aGV0aGVyICdub3cnIGZhbGxzIHdpdGhpbiB0aGUgcHJvdmlkZWQgcmFuZ2UuXG4gKiBTdXBwb3J0cyBjdXN0b20gcmVuZGVyaW5nIHZpYSByZW5kZXJDdXJyZW50VGltZUluZGljYXRvciBmcm9tIGNvbnRleHQuXG4gKi9cbmNvbnN0IE5vTWVtb0N1cnJlbnRUaW1lSW5kaWNhdG9yID0gKHtcblx0cmFuZ2VTdGFydCxcblx0cmFuZ2VFbmQsXG5cdG5vdzogcHJvcE5vdyxcblx0cmVzb3VyY2UsXG59OiBDdXJyZW50VGltZUluZGljYXRvclByb3BzKSA9PiB7XG5cdC8vIEdldCByZW5kZXIgZnVuY3Rpb24gYW5kIGN1cnJlbnQgdmlldyBmcm9tIGNvbnRleHRcblx0Y29uc3QgeyByZW5kZXJDdXJyZW50VGltZUluZGljYXRvciwgdmlldyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoXG5cdFx0KHN0YXRlKSA9PiAoe1xuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3I6IHN0YXRlLnJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRcdFx0dmlldzogc3RhdGUudmlldyxcblx0XHR9KVxuXHQpXG5cblx0Y29uc3Qgbm93ID0gcHJvcE5vdyA/PyBkYXlqcygpXG5cblx0Ly8gQ2hlY2sgaWYgY3VycmVudCB0aW1lIGZhbGxzIHdpdGhpbiB0aGlzIHJhbmdlXG5cdGNvbnN0IGlzV2l0aGluUmFuZ2UgPSBub3cuaXNTYW1lT3JBZnRlcihyYW5nZVN0YXJ0KSAmJiBub3cuaXNCZWZvcmUocmFuZ2VFbmQpXG5cblx0aWYgKCFpc1dpdGhpblJhbmdlKSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXG5cdGNvbnN0IHRvdGFsRHVyYXRpb24gPSByYW5nZUVuZC5kaWZmKHJhbmdlU3RhcnQsICdtaW51dGUnKVxuXHRjb25zdCBtaW51dGVzRnJvbVN0YXJ0ID0gbm93LmRpZmYocmFuZ2VTdGFydCwgJ21pbnV0ZScpXG5cdGNvbnN0IHByb2dyZXNzID0gKG1pbnV0ZXNGcm9tU3RhcnQgLyB0b3RhbER1cmF0aW9uKSAqIDEwMFxuXG5cdC8vIElmIGN1c3RvbSByZW5kZXIgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdmlhIGNvbnRleHQsIHVzZSBpdFxuXHRpZiAocmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PD5cblx0XHRcdFx0e3JlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yKHtcblx0XHRcdFx0XHRjdXJyZW50VGltZTogbm93LFxuXHRcdFx0XHRcdHJhbmdlU3RhcnQsXG5cdFx0XHRcdFx0cmFuZ2VFbmQsXG5cdFx0XHRcdFx0cHJvZ3Jlc3MsXG5cdFx0XHRcdFx0cmVzb3VyY2UsXG5cdFx0XHRcdFx0dmlldyxcblx0XHRcdFx0fSl9XG5cdFx0XHQ8Lz5cblx0XHQpXG5cdH1cblxuXHQvLyBEZWZhdWx0IGluZGljYXRvciByZW5kZXJpbmdcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJhYnNvbHV0ZSBsZWZ0LTAgcmlnaHQtMCBoLTAuNSBiZy1yZWQtNTAwIHotNTAgcG9pbnRlci1ldmVudHMtbm9uZVwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImN1cnJlbnQtdGltZS1pbmRpY2F0b3JcIlxuXHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0dG9wOiBgJHtwcm9ncmVzc30lYCxcblx0XHRcdH19XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgQ3VycmVudFRpbWVJbmRpY2F0b3IgPSBtZW1vKE5vTWVtb0N1cnJlbnRUaW1lSW5kaWNhdG9yKVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQge1xuXHRnZXRQb3NpdGlvbmVkRGF5RXZlbnRzLFxuXHR0eXBlIFBvc2l0aW9uZWRFdmVudCxcbn0gZnJvbSAnQC9saWIvdXRpbHMvcG9zaXRpb24tZGF5LWV2ZW50cydcblxuaW50ZXJmYWNlIFVzZVByb2Nlc3NlZERheUV2ZW50c1Byb3BzIHtcblx0ZGF5czogRGF5anNbXSAvLyBUaGUgc3BlY2lmaWMgZGF5IHRoaXMgY29sdW1uIHJlcHJlc2VudHNcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9jZXNzZWREYXlFdmVudHMgPSAoe1xuXHRkYXlzLFxuXHRncmlkVHlwZSxcblx0cmVzb3VyY2VJZCxcbn06IFVzZVByb2Nlc3NlZERheUV2ZW50c1Byb3BzKSA9PiB7XG5cdGNvbnN0IHsgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCBnZXRFdmVudHNGb3JSZXNvdXJjZSB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGZpcnN0ID0gZGF5cy5hdCgwKVxuXHRjb25zdCBsYXN0ID0gZGF5cy5hdCgtMSlcblx0Y29uc3QgZGF5U3RhcnQgPSBmaXJzdD8uc3RhcnRPZignZGF5Jylcblx0Y29uc3QgZGF5RW5kID0gbGFzdD8uZW5kT2YoJ2RheScpXG5cblx0Y29uc3QgZXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKCFkYXlTdGFydCB8fCAhZGF5RW5kKSByZXR1cm4gW11cblx0XHRsZXQgZGF5RXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKGRheVN0YXJ0LCBkYXlFbmQpXG5cdFx0aWYgKHJlc291cmNlSWQpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlRXZlbnRzID0gZ2V0RXZlbnRzRm9yUmVzb3VyY2UocmVzb3VyY2VJZClcblx0XHRcdGRheUV2ZW50cyA9IGRheUV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PlxuXHRcdFx0XHRyZXNvdXJjZUV2ZW50cy5zb21lKChyZSkgPT4gU3RyaW5nKHJlLmlkKSA9PT0gU3RyaW5nKGV2ZW50LmlkKSlcblx0XHRcdClcblx0XHR9XG5cblx0XHQvLyBWZXJ0aWNhbCBncmlkcyAoRGF5L1dlZWsvUmVzb3VyY2UgVmVydGljYWwpIG5ldmVyIHJlbmRlciBhbGwtZGF5IGV2ZW50c1xuXHRcdC8vIGFzIHRob3NlIGFyZSBoYW5kbGVkIGJ5IHRoZSBhbGwtZGF5LXJvdyBvciBhcmUgbm90IGFwcHJvcHJpYXRlIGZvciB0aGUgdGltZSBncmlkLlxuXHRcdHJldHVybiBkYXlFdmVudHMuZmlsdGVyKChlKSA9PiAhZS5hbGxEYXkpXG5cdH0sIFtcblx0XHRkYXlTdGFydCxcblx0XHRkYXlFbmQsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdHJlc291cmNlSWQsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdF0pXG5cblx0Y29uc3QgdG9kYXlFdmVudHMgPSB1c2VNZW1vPFBvc2l0aW9uZWRFdmVudFtdPigoKSA9PiB7XG5cdFx0cmV0dXJuIGdldFBvc2l0aW9uZWREYXlFdmVudHMoe1xuXHRcdFx0ZGF5cyxcblx0XHRcdGV2ZW50cyxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdH0pXG5cdH0sIFtkYXlzLCBncmlkVHlwZSwgZXZlbnRzXSlcblxuXHRyZXR1cm4gdG9kYXlFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuZXhwb3J0IGludGVyZmFjZSBQb3NpdGlvbmVkRXZlbnQgZXh0ZW5kcyBDYWxlbmRhckV2ZW50IHtcblx0bGVmdDogbnVtYmVyIC8vIExlZnQgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuXHR3aWR0aDogbnVtYmVyIC8vIFdpZHRoIGluIHBlcmNlbnRhZ2Vcblx0dG9wOiBudW1iZXIgLy8gVG9wIHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0aGVpZ2h0OiBudW1iZXIgLy8gSGVpZ2h0IGluIHBlcmNlbnRhZ2Vcblx0ekluZGV4PzogbnVtYmVyIC8vIFotaW5kZXggZm9yIGxheWVyaW5nIG92ZXJsYXBwaW5nIGV2ZW50c1xufVxuXG5pbnRlcmZhY2UgR2V0UG9zaXRpb25lZERheUV2ZW50c1BhcmFtcyB7XG5cdGRheXM6IERheWpzW11cblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJyB8ICdtaW51dGUnXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG59XG5cbmV4cG9ydCBjb25zdCBnZXRQb3NpdGlvbmVkRGF5RXZlbnRzID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUgPSAnaG91cicsXG5cdGV2ZW50cyxcbn06IEdldFBvc2l0aW9uZWREYXlFdmVudHNQYXJhbXMpOiBQb3NpdGlvbmVkRXZlbnRbXSA9PiB7XG5cdC8vIEZpbHRlciBvdXQgYWxsLWRheSBldmVudHMgYW5kIHNvcnQgYnkgc3RhcnQgdGltZVxuXHRjb25zdCBzb3J0ZWRFdmVudHMgPSBldmVudHNcblx0XHQuZmlsdGVyKChlKSA9PiAhZS5hbGxEYXkpXG5cdFx0LnRvU29ydGVkKChhLCBiKSA9PiBhLnN0YXJ0LmRpZmYoYi5zdGFydCkpXG5cblx0aWYgKHNvcnRlZEV2ZW50cy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gW11cblx0fVxuXG5cdC8vIERldGVybWluZSBncmlkIGJvdW5kYXJpZXMgYW5kIG1ldHJpY3Ncblx0Ly8gVXNlIGV4cGxpY2l0IHN0YXJ0T2YgdG8gZW5zdXJlIHdlIGFyZSBhbmNob3JlZCB0byB0aGUgZ3JpZCB1bml0IGJvdW5kYXJpZXNcblx0Ly8gVGhpcyBwcmV2ZW50cyBvZmZzZXRzIGlmIHRoZSBncmlkIGRheXMgYXJlIG5vdCBub3JtYWxpemVkXG5cdGNvbnN0IGdyaWRTdGFydCA9IGRheXMuYXQoMCkgfHwgZGF5anMoKVxuXHRjb25zdCB0b3RhbFVuaXRzID0gZGF5cy5sZW5ndGhcblx0Y29uc3QgaXNEaXNjcmV0ZSA9IGdyaWRUeXBlID09PSAnZGF5J1xuXG5cdC8vIFN0ZXAgMTogR3JvdXAgZXZlbnRzIGludG8gY2x1c3RlcnMgb2Ygb3ZlcmxhcHBpbmcgZXZlbnRzXG5cdGNvbnN0IGNsdXN0ZXJzOiBDYWxlbmRhckV2ZW50W11bXSA9IFtdXG5cdGxldCBjdXJyZW50Q2x1c3RlcjogQ2FsZW5kYXJFdmVudFtdID0gW11cblx0bGV0IGxhc3RFdmVudEVuZDogRGF5anMgfCBudWxsID0gbnVsbFxuXHRmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZEV2ZW50cykge1xuXHRcdGlmIChsYXN0RXZlbnRFbmQgJiYgZXZlbnQuc3RhcnQuaXNTYW1lT3JBZnRlcihsYXN0RXZlbnRFbmQpKSB7XG5cdFx0XHRpZiAoY3VycmVudENsdXN0ZXIubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjbHVzdGVycy5wdXNoKGN1cnJlbnRDbHVzdGVyKVxuXHRcdFx0fVxuXHRcdFx0Y3VycmVudENsdXN0ZXIgPSBbXVxuXHRcdH1cblx0XHRjdXJyZW50Q2x1c3Rlci5wdXNoKGV2ZW50KVxuXHRcdGxhc3RFdmVudEVuZCA9IGxhc3RFdmVudEVuZCA/IGRheWpzLm1heChsYXN0RXZlbnRFbmQsIGV2ZW50LmVuZCkgOiBldmVudC5lbmRcblx0fVxuXHRpZiAoY3VycmVudENsdXN0ZXIubGVuZ3RoID4gMCkge1xuXHRcdGNsdXN0ZXJzLnB1c2goY3VycmVudENsdXN0ZXIpXG5cdH1cblxuXHQvLyBTdGVwIDI6IEZvciBlYWNoIGNsdXN0ZXIsIHVzZSBhIG1vcmUgaW50ZWxsaWdlbnQgY29sdW1uIGFzc2lnbm1lbnRcblx0Y29uc3QgcHJvY2Vzc2VkRXZlbnRzOiBQb3NpdGlvbmVkRXZlbnRbXSA9IFtdXG5cdGZvciAoY29uc3QgY2x1c3RlciBvZiBjbHVzdGVycykge1xuXHRcdGlmIChjbHVzdGVyLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0Ly8gU2luZ2xlIGV2ZW50IHRha2VzIGZ1bGwgd2lkdGhcblx0XHRcdGNvbnN0IGV2ZW50ID0gY2x1c3RlclswXVxuXG5cdFx0XHRsZXQgc3RhcnRUaW1lID0gZXZlbnQuc3RhcnQuZGlmZihncmlkU3RhcnQsIGdyaWRUeXBlLCB0cnVlKVxuXHRcdFx0bGV0IGVuZFRpbWUgPSBldmVudC5lbmQuZGlmZihncmlkU3RhcnQsIGdyaWRUeXBlLCB0cnVlKVxuXG5cdFx0XHRpZiAoaXNEaXNjcmV0ZSkge1xuXHRcdFx0XHRzdGFydFRpbWUgPSBNYXRoLmZsb29yKHN0YXJ0VGltZSlcblx0XHRcdFx0ZW5kVGltZSA9IE1hdGguY2VpbChlbmRUaW1lKVxuXHRcdFx0XHQvLyBFbnN1cmUgYXQgbGVhc3QgMSB1bml0IGR1cmF0aW9uIGZvciBkaXNjcmV0ZSBldmVudHNcblx0XHRcdFx0aWYgKGVuZFRpbWUgPD0gc3RhcnRUaW1lKSB7XG5cdFx0XHRcdFx0ZW5kVGltZSA9IHN0YXJ0VGltZSArIDFcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBDbGFtcCB0byBncmlkIGJvdW5kYXJpZXNcblx0XHRcdGlmIChzdGFydFRpbWUgPCAwKSBzdGFydFRpbWUgPSAwXG5cdFx0XHRpZiAoZW5kVGltZSA+IHRvdGFsVW5pdHMpIGVuZFRpbWUgPSB0b3RhbFVuaXRzXG5cblx0XHRcdGNvbnN0IHRvdGFsRHVyYXRpb24gPSBNYXRoLm1heCgwLCBlbmRUaW1lIC0gc3RhcnRUaW1lKVxuXG5cdFx0XHQvLyBTa2lwIGV2ZW50cyB0aGF0IGFyZSBjb21wbGV0ZWx5IG91dHNpZGUgdGhlIGdyaWRcblx0XHRcdGlmICh0b3RhbER1cmF0aW9uID09PSAwKSBjb250aW51ZVxuXG5cdFx0XHRjb25zdCB0b3AgPSAoc3RhcnRUaW1lIC8gdG90YWxVbml0cykgKiAxMDBcblx0XHRcdGNvbnN0IGhlaWdodCA9ICh0b3RhbER1cmF0aW9uIC8gdG90YWxVbml0cykgKiAxMDBcblxuXHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goeyAuLi5ldmVudCwgbGVmdDogMCwgd2lkdGg6IDEwMCwgdG9wLCBoZWlnaHQgfSlcblx0XHRcdGNvbnRpbnVlXG5cdFx0fVxuXG5cdFx0Ly8gTXVsdGlwbGUgZXZlbnRzIC0gdXNlIGxheWVyZWQgcG9zaXRpb25pbmcgYXBwcm9hY2hcblx0XHQvLyBTb3J0IGJ5IGR1cmF0aW9uIChsb25nZXN0IGZpcnN0KSwgdGhlbiBieSBzdGFydCB0aW1lXG5cdFx0Y29uc3Qgc29ydGVkQ2x1c3RlciA9IFsuLi5jbHVzdGVyXS5zb3J0KChhLCBiKSA9PiB7XG5cdFx0XHRjb25zdCBhRHVyYXRpb24gPSBhLmVuZC5kaWZmKGEuc3RhcnQsICdtaW51dGUnKVxuXHRcdFx0Y29uc3QgYkR1cmF0aW9uID0gYi5lbmQuZGlmZihiLnN0YXJ0LCAnbWludXRlJylcblxuXHRcdFx0Ly8gTG9uZ2VyIGV2ZW50cyBmaXJzdFxuXHRcdFx0aWYgKGFEdXJhdGlvbiAhPT0gYkR1cmF0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBiRHVyYXRpb24gLSBhRHVyYXRpb25cblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgc2FtZSBkdXJhdGlvbiwgZWFybGllciBzdGFydCB0aW1lIGZpcnN0XG5cdFx0XHRyZXR1cm4gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG5cdFx0fSlcblxuXHRcdC8vIFByb2Nlc3MgZXZlbnRzIHdpdGggbGF5ZXJlZCBwb3NpdGlvbmluZ1xuXHRcdGNvbnN0IHRvdGFsRXZlbnRzID0gc29ydGVkQ2x1c3Rlci5sZW5ndGhcblxuXHRcdC8vIENhbGN1bGF0ZSBkeW5hbWljIG9mZnNldCBiYXNlZCBvbiBudW1iZXIgb2Ygb3ZlcmxhcHBpbmcgZXZlbnRzXG5cdFx0Ly8gRmV3ZXIgZXZlbnRzID0gbGFyZ2VyIGluZGl2aWR1YWwgb2Zmc2V0cywgbW9yZSBldmVudHMgPSBzbWFsbGVyIG9mZnNldHNcblx0XHRsZXQgbWF4T2Zmc2V0OiBudW1iZXJcblx0XHRpZiAodG90YWxFdmVudHMgPT09IDIpIHtcblx0XHRcdG1heE9mZnNldCA9IDI1IC8vIDI1JSBvZmZzZXQgZm9yIDIgZXZlbnRzXG5cdFx0fSBlbHNlIGlmICh0b3RhbEV2ZW50cyA9PT0gMykge1xuXHRcdFx0bWF4T2Zmc2V0ID0gNTAgLy8gNTAlIHRvdGFsIGZvciAzIGV2ZW50cyAoMjUlIGVhY2gpXG5cdFx0fSBlbHNlIGlmICh0b3RhbEV2ZW50cyA9PT0gNCkge1xuXHRcdFx0bWF4T2Zmc2V0ID0gNjAgLy8gNjAlIHRvdGFsIGZvciA0IGV2ZW50cyAoMjAlIGVhY2gpXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1heE9mZnNldCA9IDcwIC8vIDcwJSB0b3RhbCBmb3IgNSsgZXZlbnRzXG5cdFx0fVxuXG5cdFx0Y29uc3Qgb2Zmc2V0UGVyRXZlbnQgPSB0b3RhbEV2ZW50cyA+IDEgPyBtYXhPZmZzZXQgLyAodG90YWxFdmVudHMgLSAxKSA6IDBcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkQ2x1c3Rlci5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgZXZlbnQgPSBzb3J0ZWRDbHVzdGVyW2ldXG5cblx0XHRcdGxldCBzdGFydFRpbWUgPSBldmVudC5zdGFydC5kaWZmKGdyaWRTdGFydCwgZ3JpZFR5cGUsIHRydWUpXG5cdFx0XHRsZXQgZW5kVGltZSA9IGV2ZW50LmVuZC5kaWZmKGdyaWRTdGFydCwgZ3JpZFR5cGUsIHRydWUpXG5cblx0XHRcdGlmIChpc0Rpc2NyZXRlKSB7XG5cdFx0XHRcdHN0YXJ0VGltZSA9IE1hdGguZmxvb3Ioc3RhcnRUaW1lKVxuXHRcdFx0XHRlbmRUaW1lID0gTWF0aC5jZWlsKGVuZFRpbWUpXG5cdFx0XHRcdGlmIChlbmRUaW1lIDw9IHN0YXJ0VGltZSkge1xuXHRcdFx0XHRcdGVuZFRpbWUgPSBzdGFydFRpbWUgKyAxXG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2xhbXAgdG8gZ3JpZCBib3VuZGFyaWVzXG5cdFx0XHRpZiAoc3RhcnRUaW1lIDwgMCkgc3RhcnRUaW1lID0gMFxuXHRcdFx0aWYgKGVuZFRpbWUgPiB0b3RhbFVuaXRzKSBlbmRUaW1lID0gdG90YWxVbml0c1xuXG5cdFx0XHRjb25zdCB0b3RhbER1cmF0aW9uID0gTWF0aC5tYXgoMCwgZW5kVGltZSAtIHN0YXJ0VGltZSlcblxuXHRcdFx0aWYgKHRvdGFsRHVyYXRpb24gPT09IDApIGNvbnRpbnVlXG5cblx0XHRcdGNvbnN0IHRvcCA9IChzdGFydFRpbWUgLyB0b3RhbFVuaXRzKSAqIDEwMFxuXHRcdFx0Y29uc3QgaGVpZ2h0ID0gKHRvdGFsRHVyYXRpb24gLyB0b3RhbFVuaXRzKSAqIDEwMFxuXG5cdFx0XHQvLyBDYWxjdWxhdGUgcG9zaXRpb25pbmcgYmFzZWQgb24gbGF5ZXIgYW5kIHRvdGFsIGV2ZW50c1xuXHRcdFx0bGV0IGxlZnQ6IG51bWJlclxuXHRcdFx0bGV0IHdpZHRoOiBudW1iZXJcblx0XHRcdGxldCB6SW5kZXg6IG51bWJlclxuXG5cdFx0XHRpZiAoaSA9PT0gMCkge1xuXHRcdFx0XHQvLyBGaXJzdCBldmVudCAobG9uZ2VzdCkgdGFrZXMgZnVsbCB3aWR0aCBhdCBib3R0b21cblx0XHRcdFx0bGVmdCA9IDBcblx0XHRcdFx0d2lkdGggPSAxMDBcblx0XHRcdFx0ekluZGV4ID0gMVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gU3Vic2VxdWVudCBldmVudHMgYXJlIG9mZnNldCBkeW5hbWljYWxseSBiYXNlZCBvbiB0b3RhbCBldmVudCBjb3VudFxuXHRcdFx0XHRsZWZ0ID0gb2Zmc2V0UGVyRXZlbnQgKiBpXG5cdFx0XHRcdHdpZHRoID0gMTAwIC0gbGVmdCAvLyBSZW1haW5pbmcgd2lkdGhcblx0XHRcdFx0ekluZGV4ID0gaSArIDEgLy8gSGlnaGVyIHotaW5kZXggZm9yIGV2ZW50cyBvbiB0b3Bcblx0XHRcdH1cblxuXHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuXHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0bGVmdCxcblx0XHRcdFx0d2lkdGgsXG5cdFx0XHRcdHRvcCxcblx0XHRcdFx0aGVpZ2h0LFxuXHRcdFx0XHR6SW5kZXgsXG5cdFx0XHR9KVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBwcm9jZXNzZWRFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHMge1xuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc2VzPzogeyBoZWFkZXI/OiBzdHJpbmc7IGFsbERheT86IHN0cmluZyB9XG5cdGFsbERheVJvdz86IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5jb25zdCBOb01lbW9WZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXI6IFJlYWN0LkZDPFxuXHRWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXJQcm9wc1xuPiA9ICh7IGNoaWxkcmVuLCBjbGFzc2VzLCBhbGxEYXlSb3cgfSkgPT4ge1xuXHRjb25zdCB7IHN0aWNreVZpZXdIZWFkZXIsIHZpZXdIZWFkZXJDbGFzc05hbWUgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KFxuXHRcdChzdGF0ZSkgPT4gKHtcblx0XHRcdHN0aWNreVZpZXdIZWFkZXI6IHN0YXRlLnN0aWNreVZpZXdIZWFkZXIsXG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lOiBzdGF0ZS52aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdH0pXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIxIGJnLWJhY2tncm91bmQnLCAvLyBaLWluZGV4IGFib3ZlIHRoZSBsZWZ0IHN0aWNreSByZXNvdXJjZSBjb2x1bW5cblx0XHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2gtMTIgYm9yZGVyLWIgdy1maXQnLCBjbGFzc2VzPy5oZWFkZXIpfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtaGVhZGVyXCJcblx0XHRcdD5cblx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0PC9kaXY+XG5cdFx0XHR7LyogQWxsLWRheSByb3cgKi99XG5cdFx0XHR7YWxsRGF5Um93ICYmIChcblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggdy1mdWxsIGJvcmRlci1iIG1pbi1oLTEyJywgY2xhc3Nlcz8uYWxsRGF5KX1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtYWxsLWRheVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7YWxsRGF5Um93fVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCl9XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lciA9IG1lbW8oXG5cdE5vTWVtb1ZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lclxuKVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWRDb2wsIHR5cGUgVmVydGljYWxHcmlkQ29sUHJvcHMgfSBmcm9tICcuL3ZlcnRpY2FsLWdyaWQtY29sJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyIH0gZnJvbSAnLi92ZXJ0aWNhbC1ncmlkLWhlYWRlci1jb250YWluZXInXG5cbmludGVyZmFjZSBWZXJ0aWNhbEdyaWRQcm9wcyB7XG5cdGNvbHVtbnM6IFZlcnRpY2FsR3JpZENvbFByb3BzW11cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHR2YXJpYW50PzogJ3JlZ3VsYXInIHwgJ3Jlc291cmNlJ1xuXHRjbGFzc2VzPzogeyBoZWFkZXI/OiBzdHJpbmc7IGJvZHk/OiBzdHJpbmc7IGFsbERheT86IHN0cmluZyB9XG5cdGFsbERheVJvdz86IFJlYWN0LlJlYWN0Tm9kZVxuXHQvKipcblx0ICogT3B0aW9uYWwgYXJyYXkgb2YgbWludXRlIHNsb3RzIGJ5IHdoaWNoIHRoZSBob3VyIGlzIGRpdmlkZWRcblx0ICogZS5nLiwgWzAsIDE1LCAzMCwgNDVdIGZvciBxdWFydGVyLWhvdXIgc2xvdHNcblx0ICovXG5cdGNlbGxTbG90cz86IG51bWJlcltdXG5cdHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllc1xufVxuXG5leHBvcnQgY29uc3QgVmVydGljYWxHcmlkOiBSZWFjdC5GQzxWZXJ0aWNhbEdyaWRQcm9wcz4gPSAoe1xuXHRjb2x1bW5zLFxuXHRjaGlsZHJlbixcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0dmFyaWFudCA9ICdyZXNvdXJjZScsXG5cdGNsYXNzZXMsXG5cdGFsbERheVJvdyxcblx0Y2VsbFNsb3RzLFxuXHRzdHlsZSxcbn0pID0+IHtcblx0Y29uc3QgaXNSZXNvdXJjZUNhbGVuZGFyID0gdmFyaWFudCA9PT0gJ3Jlc291cmNlJ1xuXHRjb25zdCBpc1JlZ3VsYXJDYWxlbmRhciA9ICFpc1Jlc291cmNlQ2FsZW5kYXJcblxuXHRjb25zdCBoZWFkZXIgPSBjaGlsZHJlbiAmJiAoXG5cdFx0PFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lclxuXHRcdFx0YWxsRGF5Um93PXthbGxEYXlSb3d9XG5cdFx0XHRjbGFzc2VzPXt7IGhlYWRlcjogY2xhc3Nlcz8uaGVhZGVyLCBhbGxEYXk6IGNsYXNzZXM/LmFsbERheSB9fVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L1ZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lcj5cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiaC1mdWxsIGZsZXggZmxleC1jb2xcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLWNvbnRhaW5lclwiXG5cdFx0XHRzdHlsZT17c3R5bGV9XG5cdFx0PlxuXHRcdFx0ey8qIGhlYWRlciByb3cgKi99XG5cdFx0XHR7aXNSZWd1bGFyQ2FsZW5kYXIgJiYgaGVhZGVyfVxuXG5cdFx0XHQ8U2Nyb2xsQXJlYVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKCdoLWZ1bGwnLCBpc1JlZ3VsYXJDYWxlbmRhciAmJiAnb3ZlcmZsb3ctYXV0bycpfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtc2Nyb2xsXCJcblx0XHRcdFx0dmlld1BvcnRQcm9wcz17eyBjbGFzc05hbWU6ICcqOmZsZXghICo6ZmxleC1jb2whICo6bWluLWgtZnVsbCcgfX1cblx0XHRcdD5cblx0XHRcdFx0ey8qIGhlYWRlciByb3cgZm9yIHJlc291cmNlIGNhbGVuZGFyIGluc2lkZSBzY3JvbGwgYXJlYSAqL31cblx0XHRcdFx0e2lzUmVzb3VyY2VDYWxlbmRhciAmJiBoZWFkZXJ9XG5cdFx0XHRcdHsvKiBDYWxlbmRhciBhcmVhIHdpdGggc2Nyb2xsICovfVxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LTEgdy1maXQnLCBjbGFzc2VzPy5ib2R5KX1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtYm9keVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7LyogRGF5IGNvbHVtbnMgd2l0aCB0aW1lIHNsb3RzICovfVxuXHRcdFx0XHRcdHtjb2x1bW5zLm1hcCgoY29sdW1uLCBpbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0PFZlcnRpY2FsR3JpZENvbFxuXHRcdFx0XHRcdFx0XHRrZXk9e2Ake2NvbHVtbi5pZH0tJHtpbmRleH1gfVxuXHRcdFx0XHRcdFx0XHR7Li4uY29sdW1ufVxuXHRcdFx0XHRcdFx0XHRjZWxsU2xvdHM9e2NlbGxTbG90c31cblx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRpc0xhc3RDb2x1bW49e2luZGV4ID09PSBjb2x1bW5zLmxlbmd0aCAtIDF9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCkpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgLz4gey8qIHZlcnRpY2FsIHNjcm9sbGJhciAqL31cblx0XHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgb3JpZW50YXRpb249XCJob3Jpem9udGFsXCIgLz57JyAnfVxuXHRcdFx0XHR7LyogaG9yaXpvbnRhbCBzY3JvbGxiYXIgKi99XG5cdFx0XHQ8L1Njcm9sbEFyZWE+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZ2V0RGF5SG91cnMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsgY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlIH0gZnJvbSAnLi9idXNpbmVzcy1ob3VycydcblxuaW50ZXJmYWNlIEdldFZpZXdIb3Vyc09wdGlvbnMge1xuXHRyZWZlcmVuY2VEYXRlOiBEYXlqc1xuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycz86IGJvb2xlYW5cblx0LyoqXG5cdCAqIEZvciB2aWV3cyB3aXRoIG11bHRpcGxlIGRheXMgKGxpa2UgV2Vla1ZpZXcpLCB3ZSBtaWdodCB3YW50IHRvIHNob3dcblx0ICogdGhlIHVuaW9uIG9mIGFsbCBidXNpbmVzcyBob3VycyBhY3Jvc3MgdGhvc2UgZGF5cy5cblx0ICovXG5cdGFsbERhdGVzPzogRGF5anNbXVxuXHQvKipcblx0ICogT3B0aW9uYWwgYWRkaXRpb25hbCBidXNpbmVzcyBob3VycyBjb25maWd1cmF0aW9ucyAoZS5nLiwgZnJvbSByZXNvdXJjZXMpLlxuXHQgKiBUaGVzZSB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZSBnbG9iYWwgYnVzaW5lc3NIb3VycyB3aGVuIGNhbGN1bGF0aW5nIHRoZSB2aXNpYmxlIHJhbmdlLlxuXHQgKi9cblx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzPzogKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW11cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGxpc3Qgb2YgaG91cnMgdG8gZGlzcGxheSBpbiB0aGUgY2FsZW5kYXIgdmlldy5cbiAqIElmIGhpZGVOb25CdXNpbmVzc0hvdXJzIGlzIHRydWUsIGl0IGZpbHRlcnMgdGhlIGhvdXJzIGJhc2VkIG9uIGJ1c2luZXNzSG91cnMgY29uZmlndXJhdGlvbi5cbiAqIEZvciBtdWx0aXBsZSBkYXRlcywgaXQgdGFrZXMgdGhlIGVhcmxpZXN0IHN0YXJ0IGFuZCBsYXRlc3QgZW5kIGFjcm9zcyBhbGwgZGF0ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3SG91cnMoe1xuXHRyZWZlcmVuY2VEYXRlLFxuXHRidXNpbmVzc0hvdXJzLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0YWxsRGF0ZXMgPSBbcmVmZXJlbmNlRGF0ZV0sXG5cdHJlc291cmNlQnVzaW5lc3NIb3VycyA9IFtdLFxufTogR2V0Vmlld0hvdXJzT3B0aW9ucyk6IERheWpzW10ge1xuXHRjb25zdCBob3VycyA9IGdldERheUhvdXJzKHsgcmVmZXJlbmNlRGF0ZSB9KVxuXG5cdGNvbnN0IGhhc0J1c2luZXNzSG91cnNDb25maWcgPVxuXHRcdCEhYnVzaW5lc3NIb3VycyB8fCByZXNvdXJjZUJ1c2luZXNzSG91cnMubGVuZ3RoID4gMFxuXHRjb25zdCBzaG91bGRGaWx0ZXJCeUJ1c2luZXNzSG91cnMgPVxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzICYmIGhhc0J1c2luZXNzSG91cnNDb25maWdcblxuXHRpZiAoIXNob3VsZEZpbHRlckJ5QnVzaW5lc3NIb3VycykgcmV0dXJuIGhvdXJzXG5cblx0Y29uc3QgeyBtaW5TdGFydCwgbWF4RW5kLCBoYXNCdXNpbmVzc0hvdXJzIH0gPSBjYWxjdWxhdGVCdXNpbmVzc0hvdXJzUmFuZ2Uoe1xuXHRcdGFsbERhdGVzLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHR9KVxuXG5cdGlmICghaGFzQnVzaW5lc3NIb3VycykgcmV0dXJuIGhvdXJzXG5cblx0cmV0dXJuIGhvdXJzLmZpbHRlcigoaCkgPT4ge1xuXHRcdGNvbnN0IGhvdXIgPSBoLmhvdXIoKVxuXHRcdHJldHVybiBob3VyID49IG1pblN0YXJ0ICYmIGhvdXIgPCBtYXhFbmRcblx0fSlcbn1cbiIsCiAgICAiaW1wb3J0IHsgQWxsRGF5Um93IH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IEhvdXJMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3VyLWxhYmVsL2hvdXItbGFiZWwnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkJ1xuaW1wb3J0IHsgZ2V0Vmlld0hvdXJzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBEYXlWaWV3ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB0LCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3VycyB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGlzVG9kYXkgPSBjdXJyZW50RGF0ZS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cdGNvbnN0IGhvdXJzID0gZ2V0Vmlld0hvdXJzKHtcblx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGFsbERhdGVzOiBbY3VycmVudERhdGVdLFxuXHR9KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiAndGltZS1jb2wnLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBEYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHQ8SG91ckxhYmVsIGRhdGU9e2RhdGV9IC8+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHtcblx0XHRpZDogYGRheS1jb2wtJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gLFxuXHRcdGRheTogY3VycmVudERhdGUsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0Y2xhc3NOYW1lOiAndy1bY2FsYygxMDAlLTRyZW0pXSBmbGV4LTEnLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17PEFsbERheVJvdyBkYXlzPXtbY3VycmVudERhdGVdfSAvPn1cblx0XHRcdGNlbGxTbG90cz17WzAsIDE1LCAzMCwgNDVdfVxuXHRcdFx0Y2xhc3Nlcz17e1xuXHRcdFx0XHRoZWFkZXI6ICd3LWZ1bGwnLFxuXHRcdFx0XHRib2R5OiAndy1mdWxsJyxcblx0XHRcdFx0YWxsRGF5OiAndy1mdWxsJyxcblx0XHRcdH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIGNvbHVtbnNdfVxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHQ+XG5cdFx0XHR7LyogSGVhZGVyICovfVxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9eydmbGV4IGZsZXgtMSBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgbWluLWgtMTInfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cImRheS12aWV3LWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2ZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHRleHQtY2VudGVyIHRleHQtYmFzZSBmb250LXNlbWlib2xkIHNtOnRleHQteGwnLFxuXHRcdFx0XHRcdFx0aXNUb2RheSAmJiAndGV4dC1wcmltYXJ5J1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ4czppbmxpbmUgaGlkZGVuXCI+XG5cdFx0XHRcdFx0XHR7Y3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCAnKX1cblx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0e2N1cnJlbnREYXRlLmZvcm1hdCgnTU1NTSBELCBZWVlZJyl9XG5cdFx0XHRcdFx0e2lzVG9kYXkgJiYgKFxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBtbC0yIHJvdW5kZWQtZnVsbCBweC0xIHB5LTAuNSB0ZXh0LXhzIHNtOnB4LTIgc206dGV4dC1zbVwiPlxuXHRcdFx0XHRcdFx0XHR7dCgndG9kYXknKX1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgSG9yaXpvbnRhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGdldE1vbnRoV2Vla3MgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsgTW9udGhIZWFkZXIgfSBmcm9tICcuL21vbnRoLWhlYWRlcidcbmltcG9ydCB0eXBlIHsgTW9udGhWaWV3UHJvcHMgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgTW9udGhWaWV3OiBSZWFjdC5GQzxNb250aFZpZXdQcm9wcz4gPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgd2Vla3MgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldE1vbnRoV2Vla3MoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKSxcblx0XHRbY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrXVxuXHQpXG5cblx0Y29uc3Qgcm93cyA9IHdlZWtzLm1hcCgoZGF5cywgd2Vla0luZGV4KSA9PiAoe1xuXHRcdGlkOiBgd2Vlay0ke3dlZWtJbmRleH1gLFxuXHRcdGNvbHVtbnM6IGRheXMubWFwKChkYXkpID0+ICh7XG5cdFx0XHRpZDogYGNvbC0ke2RheS50b0lTT1N0cmluZygpfWAsXG5cdFx0XHRkYXksXG5cdFx0XHRjbGFzc05hbWU6ICd3LWF1dG8nLFxuXHRcdFx0Z3JpZFR5cGU6ICdkYXknIGFzIGNvbnN0LFxuXHRcdH0pKSxcblx0XHRjbGFzc05hbWU6ICdmbGV4LTEnLFxuXHRcdHNob3dEYXlOdW1iZXI6IHRydWUsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PEhvcml6b250YWxHcmlkXG5cdFx0XHRjbGFzc2VzPXt7IGJvZHk6ICd3LWZ1bGwnLCBoZWFkZXI6ICd3LWZ1bGwnIH19XG5cdFx0XHRyb3dzPXtyb3dzfVxuXHRcdFx0dmFyaWFudD1cInJlZ3VsYXJcIlxuXHRcdD5cblx0XHRcdDxNb250aEhlYWRlciBjbGFzc05hbWU9XCJoLTEyXCIgLz5cblx0XHQ8L0hvcml6b250YWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lclByb3BzIHtcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IE5vTWVtb0hvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyID0gKHtcblx0Y2hpbGRyZW4sXG5cdGNsYXNzTmFtZSxcbn06IEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHMpID0+IHtcblx0Y29uc3QgeyBzdGlja3lWaWV3SGVhZGVyLCB2aWV3SGVhZGVyQ2xhc3NOYW1lIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dChcblx0XHQoc3RhdGUpID0+ICh7XG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyOiBzdGF0ZS5zdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZTogc3RhdGUudmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHR9KVxuXHQpXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaC0xMiB3LWZpdCcsXG5cdFx0XHRcdHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIxIGJnLWJhY2tncm91bmQnLFxuXHRcdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD1cImhvcml6b250YWwtZ3JpZC1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXIgPSBtZW1vKFxuXHROb01lbW9Ib3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lclxuKVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciB9IGZyb20gJy4vaG9yaXpvbnRhbC1ncmlkLWhlYWRlci1jb250YWluZXInXG5pbXBvcnQge1xuXHRIb3Jpem9udGFsR3JpZFJvdyxcblx0dHlwZSBIb3Jpem9udGFsR3JpZFJvd1Byb3BzLFxufSBmcm9tICcuL2hvcml6b250YWwtZ3JpZC1yb3cnXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZFByb3BzIHtcblx0cm93czogSG9yaXpvbnRhbEdyaWRSb3dQcm9wc1tdXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzZXM/OiB7IGhlYWRlcj86IHN0cmluZzsgYm9keT86IHN0cmluZyB9XG5cdGFsbERheT86IGJvb2xlYW5cblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHR2YXJpYW50PzogJ3JlZ3VsYXInIHwgJ3Jlc291cmNlJ1xuXHRkYXlOdW1iZXJIZWlnaHQ/OiBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkOiBSZWFjdC5GQzxIb3Jpem9udGFsR3JpZFByb3BzPiA9ICh7XG5cdHJvd3MsXG5cdGNoaWxkcmVuLFxuXHRjbGFzc2VzLFxuXHRhbGxEYXk6IHRvcExldmVsQWxsRGF5LFxuXHRncmlkVHlwZSxcblx0dmFyaWFudCA9ICdyZXNvdXJjZScsXG5cdGRheU51bWJlckhlaWdodCxcbn0pID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IGlzUmVzb3VyY2VDYWxlbmRhciA9IHZhcmlhbnQgPT09ICdyZXNvdXJjZSdcblx0Y29uc3QgaXNSZWd1bGFyQ2FsZW5kYXIgPSAhaXNSZXNvdXJjZUNhbGVuZGFyXG5cblx0Y29uc3QgaGVhZGVyID0gY2hpbGRyZW4gJiYgKFxuXHRcdDxIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciBjbGFzc05hbWU9e2NsYXNzZXM/LmhlYWRlcn0+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9Ib3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lcj5cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiaC1mdWxsIGZsZXggZmxleC1jb2xcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtY29udGFpbmVyXCJcblx0XHQ+XG5cdFx0XHR7LyoqXG5cdFx0XHQgKiBoZWFkZXIgcm93IGlzIHJlbmRlcmVkIG91dHNpZGUgc2Nyb2xsIGFyZWEgZm9yIHJlZ3VsYXIgY2FsZW5kYXJcblx0XHRcdCAqL31cblx0XHRcdHtpc1JlZ3VsYXJDYWxlbmRhciAmJiBoZWFkZXJ9XG5cblx0XHRcdDxTY3JvbGxBcmVhXG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2gtZnVsbCcsIGlzUmVndWxhckNhbGVuZGFyICYmICdvdmVyZmxvdy1hdXRvJyl9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwiaG9yaXpvbnRhbC1ncmlkLXNjcm9sbFwiXG5cdFx0XHRcdHZpZXdQb3J0UHJvcHM9e3sgY2xhc3NOYW1lOiAnKjpmbGV4ISAqOmZsZXgtY29sISAqOm1pbi1oLWZ1bGwnIH19XG5cdFx0XHQ+XG5cdFx0XHRcdHsvKipcblx0XHRcdFx0ICogaGVhZGVyIHJvdyBmb3IgcmVzb3VyY2UgY2FsZW5kYXIgaW5zaWRlIHNjcm9sbCBhcmVhXG5cdFx0XHRcdCAqICovfVxuXHRcdFx0XHR7aXNSZXNvdXJjZUNhbGVuZGFyICYmIGhlYWRlcn1cblxuXHRcdFx0XHR7LyogQ2FsZW5kYXIgYXJlYSB3aXRoIHNjcm9sbCAqL31cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC0xIHctZml0JywgY2xhc3Nlcz8uYm9keSl9XG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtYm9keVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgZmxleCBmbGV4LWNvbCBmbGV4LTFcIlxuXHRcdFx0XHRcdFx0a2V5PXtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0nKX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7cm93cy5tYXAoKHJvdywgaW5kZXgpID0+IChcblx0XHRcdFx0XHRcdFx0PEhvcml6b250YWxHcmlkUm93XG5cdFx0XHRcdFx0XHRcdFx0YWxsRGF5PXtyb3cuYWxsRGF5ID8/IHRvcExldmVsQWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdGRheU51bWJlckhlaWdodD17ZGF5TnVtYmVySGVpZ2h0fVxuXHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3c9e2luZGV4ID09PSByb3dzLmxlbmd0aCAtIDF9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtyb3cuaWR9XG5cdFx0XHRcdFx0XHRcdFx0dmFyaWFudD17dmFyaWFudH1cblx0XHRcdFx0XHRcdFx0XHR7Li4ucm93fVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIC8+XG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIG9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiIC8+XG5cdFx0XHQ8L1Njcm9sbEFyZWE+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuaW50ZXJmYWNlIE1vbnRoSGVhZGVyUHJvcHMge1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IE1vbnRoSGVhZGVyOiBSZWFjdC5GQzxNb250aEhlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG5cdGNvbnN0IHsgZmlyc3REYXlPZldlZWssIHN0aWNreVZpZXdIZWFkZXIsIHZpZXdIZWFkZXJDbGFzc05hbWUsIGN1cnJlbnREYXRlIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHQvLyBSZW9yZGVyIHdlZWsgZGF5cyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuXHRjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaylcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IHctZnVsbCcsXG5cdFx0XHRcdHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIwJyxcblx0XHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJtb250aC1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdHt3ZWVrRGF5cy5tYXAoKHdlZWtEYXksIGluZGV4KSA9PiAoXG5cdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRjbGFzc05hbWU9XCJweS0yIHRleHQtY2VudGVyIGZvbnQtbWVkaXVtIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBib3JkZXItYiBmbGV4LTFcIlxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgd2Vla2RheS1oZWFkZXItJHt3ZWVrRGF5LmZvcm1hdCgnZGRkJykudG9Mb3dlckNhc2UoKX1gfVxuXHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0a2V5PXt3ZWVrRGF5LnRvSVNPU3RyaW5nKCl9XG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17d2Vla0RheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSBjYXBpdGFsaXplXCI+e3dlZWtEYXkuZm9ybWF0KCdkZGQnKX08L3NwYW4+XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0KSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbGxEYXlSb3cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgSG91ckxhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvdXItbGFiZWwvaG91ci1sYWJlbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuY29uc3QgQ0VMTF9DTEFTUyA9XG5cdCd3LVtjYWxjKCgxMDAlLTRyZW0pL3ZhcigtLXZpc2libGUtZGF5cykpXSBtaW4tdy1bY2FsYygoMTAwJS00cmVtKS92YXIoLS12aXNpYmxlLWRheXMpKV0gZmxleC0xJ1xuY29uc3QgTEVGVF9DT0xfV0lEVEggPSAndy0xMCBzbTp3LTE2IG1pbi13LTEwIHNtOm1pbi13LTE2IG1heC13LTEwIHNtOm1heC13LTE2J1xuXG5leHBvcnQgY29uc3QgV2Vla1ZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0dCxcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRzZWxlY3REYXRlLFxuXHRcdG9wZW5FdmVudEZvcm0sXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRoaWRkZW5EYXlzLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspLFxuXHRcdFtjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCB2aXNpYmxlRGF5cyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdGhpZGRlbkRheXNcblx0XHRcdFx0PyB3ZWVrRGF5cy5maWx0ZXIoKGRheSkgPT4gIWhpZGRlbkRheXMuaGFzKGRheS5kYXkoKSkpXG5cdFx0XHRcdDogd2Vla0RheXMsXG5cdFx0W3dlZWtEYXlzLCBoaWRkZW5EYXlzXVxuXHQpXG5cblx0Y29uc3QgaG91cnMgPSB1c2VNZW1vKFxuXHRcdCgpID0+XG5cdFx0XHRnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdH0pLFxuXHRcdFtjdXJyZW50RGF0ZSwgYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMsIHdlZWtEYXlzXVxuXHQpXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB7XG5cdFx0aWQ6ICd0aW1lLWNvbCcsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0Y2xhc3NOYW1lOiBgc2hyaW5rLTAgJHtMRUZUX0NPTF9XSURUSH0gc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBgLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IERheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdDxIb3VyTGFiZWwgZGF0ZT17ZGF0ZX0gLz5cblx0XHRcdDwvZGl2PlxuXHRcdCksXG5cdH1cblxuXHQvLyBHZW5lcmF0ZSB3ZWVrIGRheXMg4oCUIGVhY2ggY29sdW1uIGdldHMgaXRzIG93biBob3VycyBvbiB0aGUgY29ycmVjdCBkYXRlXG5cdGNvbnN0IGNvbHVtbnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRyZXR1cm4gdmlzaWJsZURheXMubWFwKChkYXkpID0+ICh7XG5cdFx0XHRpZDogYGRheS1jb2wtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YCxcblx0XHRcdGRheSxcblx0XHRcdGxhYmVsOiBkYXkuZm9ybWF0KCdEJyksXG5cdFx0XHRjbGFzc05hbWU6IENFTExfQ0xBU1MsXG5cdFx0XHRkYXlzOiBnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBkYXksXG5cdFx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRhbGxEYXRlczogd2Vla0RheXMsXG5cdFx0XHR9KSxcblx0XHRcdHZhbHVlOiBkYXksXG5cdFx0fSkpXG5cdH0sIFt3ZWVrRGF5cywgYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMsIHZpc2libGVEYXlzLm1hcF0pXG5cblx0Y29uc3QgY3NzVmFycyA9IHtcblx0XHQnLS12aXNpYmxlLWRheXMnOiB2aXNpYmxlRGF5cy5sZW5ndGgsXG5cdH0gYXMgUmVhY3QuQ1NTUHJvcGVydGllc1xuXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0YWxsRGF5Um93PXtcblx0XHRcdFx0PEFsbERheVJvd1xuXHRcdFx0XHRcdGNsYXNzZXM9e3sgY2VsbDogQ0VMTF9DTEFTUywgc3BhY2VyOiBMRUZUX0NPTF9XSURUSCB9fVxuXHRcdFx0XHRcdGRheXM9e3Zpc2libGVEYXlzfVxuXHRcdFx0XHQvPlxuXHRcdFx0fVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6ICd3LWZ1bGwgaC0xOCcsIGJvZHk6ICd3LWZ1bGwnIH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIC4uLmNvbHVtbnNdfVxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHRcdHN0eWxlPXtjc3NWYXJzfVxuXHRcdFx0dmFyaWFudD1cInJlZ3VsYXJcIlxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPXsnZmxleCBoLWZ1bGwgZmxleC0xJ30gZGF0YS10ZXN0aWQ9XCJ3ZWVrLXZpZXctaGVhZGVyXCI+XG5cdFx0XHRcdHsvKiBDb3JuZXIgY2VsbCB3aXRoIHdlZWsgbnVtYmVyICovfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctMTAgc206dy0xNiBoLWZ1bGwgc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1yIHAtMiBmbGV4XCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQteHNcIj57dCgnd2VlaycpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e2N1cnJlbnREYXRlLndlZWsoKX08L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBEYXkgaGVhZGVyIGNlbGxzICovfVxuXHRcdFx0XHR7dmlzaWJsZURheXMubWFwKChkYXksIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgaXNUb2RheSA9IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHdlZWstZGF5LWhlYWRlci0ke2RheS50b0lTT1N0cmluZygpfWBcblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0J2hvdmVyOmJnLWFjY2VudCBmbGV4LTEgZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBjdXJzb3ItcG9pbnRlciBwLTEgdGV4dC1jZW50ZXIgc206cC0yIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCB3LTUwIGgtZnVsbCcsXG5cdFx0XHRcdFx0XHRcdFx0aXNUb2RheSAmJiAnYmctcHJpbWFyeS8xMCBmb250LWJvbGQnXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgd2Vlay1kYXktaGVhZGVyLSR7ZGF5LmZvcm1hdCgnZGRkZCcpLnRvTG93ZXJDYXNlKCl9YH1cblx0XHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRcdFx0a2V5PXtrZXl9XG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRzZWxlY3REYXRlKGRheSlcblx0XHRcdFx0XHRcdFx0XHRvcGVuRXZlbnRGb3JtKHsgc3RhcnQ6IGRheSB9KVxuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtrZXl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdteC1hdXRvIG10LTEgZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cycsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc1RvZGF5ICYmICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnRCcpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IERBWV9IRUFERVJfTkFNRVMgPSBbXG5cdHsgaWQ6ICdzdW4nLCBsYWJlbDogJ1MnIH0sXG5cdHsgaWQ6ICdtb24nLCBsYWJlbDogJ00nIH0sXG5cdHsgaWQ6ICd0dWUnLCBsYWJlbDogJ1QnIH0sXG5cdHsgaWQ6ICd3ZWQnLCBsYWJlbDogJ1cnIH0sXG5cdHsgaWQ6ICd0aHUnLCBsYWJlbDogJ1QnIH0sXG5cdHsgaWQ6ICdmcmknLCBsYWJlbDogJ0YnIH0sXG5cdHsgaWQ6ICdzYXQnLCBsYWJlbDogJ1MnIH0sXG5dXG5jb25zdCBFVkVOVF9ET1RfQ09MT1JTID0gWydiZy1wcmltYXJ5JywgJ2JnLWJsdWUtNTAwJywgJ2JnLWdyZWVuLTUwMCddXG5jb25zdCBEQVlTX0lOX01JTklfQ0FMRU5EQVIgPSA0MlxuXG5jb25zdCBnZXREYXlUb29sdGlwID0gKGV2ZW50Q291bnQ6IG51bWJlcik6IHN0cmluZyA9PiB7XG5cdGlmIChldmVudENvdW50ID09PSAwKSB7XG5cdFx0cmV0dXJuICcnXG5cdH1cblx0Y29uc3QgcGx1cmFsID0gZXZlbnRDb3VudCA+IDEgPyAncycgOiAnJ1xuXHRyZXR1cm4gYCR7ZXZlbnRDb3VudH0gZXZlbnQke3BsdXJhbH1gXG59XG5cbmludGVyZmFjZSBNb250aERhdGEge1xuXHRkYXRlOiBEYXlqc1xuXHRuYW1lOiBzdHJpbmdcblx0ZXZlbnRDb3VudDogbnVtYmVyXG5cdG1vbnRoS2V5OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIERheURhdGEge1xuXHRkYXRlOiBEYXlqc1xuXHRkYXlLZXk6IHN0cmluZ1xuXHRpc0luQ3VycmVudE1vbnRoOiBib29sZWFuXG5cdGlzVG9kYXk6IGJvb2xlYW5cblx0aXNTZWxlY3RlZDogYm9vbGVhblxuXHRldmVudENvdW50OiBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IFllYXJWaWV3ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBzZWxlY3REYXRlLCBldmVudHMsIHNldFZpZXcsIGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgdCB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGN1cnJlbnRZZWFyID0gY3VycmVudERhdGUueWVhcigpXG5cblx0Y29uc3QgZ2VuZXJhdGVNb250aHNEYXRhID0gKCk6IE1vbnRoRGF0YVtdID0+IHtcblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTIgfSwgKF8sIG1vbnRoSW5kZXgpID0+IHtcblx0XHRcdGNvbnN0IG1vbnRoRGF0ZSA9IGRheWpzKClcblx0XHRcdFx0LnllYXIoY3VycmVudFllYXIpXG5cdFx0XHRcdC5tb250aChtb250aEluZGV4KVxuXHRcdFx0XHQuc3RhcnRPZignbW9udGgnKVxuXHRcdFx0Y29uc3QgZXZlbnRzSW5Nb250aCA9IGV2ZW50cy5maWx0ZXIoXG5cdFx0XHRcdChldmVudCkgPT5cblx0XHRcdFx0XHRldmVudC5zdGFydC55ZWFyKCkgPT09IGN1cnJlbnRZZWFyICYmXG5cdFx0XHRcdFx0ZXZlbnQuc3RhcnQubW9udGgoKSA9PT0gbW9udGhJbmRleFxuXHRcdFx0KVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkYXRlOiBtb250aERhdGUsXG5cdFx0XHRcdG5hbWU6IG1vbnRoRGF0ZS5mb3JtYXQoJ01NTU0nKSxcblx0XHRcdFx0ZXZlbnRDb3VudDogZXZlbnRzSW5Nb250aC5sZW5ndGgsXG5cdFx0XHRcdG1vbnRoS2V5OiBtb250aERhdGUuZm9ybWF0KCdNTScpLFxuXHRcdFx0fVxuXHRcdH0pXG5cdH1cblxuXHRjb25zdCBnZW5lcmF0ZURheXNGb3JNb250aCA9IChtb250aERhdGU6IERheWpzKTogRGF5RGF0YVtdID0+IHtcblx0XHRjb25zdCBmaXJzdERheU9mQ2FsZW5kYXIgPSBtb250aERhdGUuc3RhcnRPZignbW9udGgnKS5zdGFydE9mKCd3ZWVrJylcblxuXHRcdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBEQVlTX0lOX01JTklfQ0FMRU5EQVIgfSwgKF8sIGRheUluZGV4KSA9PiB7XG5cdFx0XHRjb25zdCBkYXlEYXRlID0gZmlyc3REYXlPZkNhbGVuZGFyLmFkZChkYXlJbmRleCwgJ2RheScpXG5cdFx0XHRjb25zdCBkYXlTdGFydCA9IGRheURhdGUuc3RhcnRPZignZGF5Jylcblx0XHRcdGNvbnN0IGRheUVuZCA9IGRheURhdGUuZW5kT2YoJ2RheScpXG5cdFx0XHRjb25zdCBldmVudHNPbkRheSA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShkYXlTdGFydCwgZGF5RW5kKVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkYXRlOiBkYXlEYXRlLFxuXHRcdFx0XHRkYXlLZXk6IGRheURhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyksXG5cdFx0XHRcdGlzSW5DdXJyZW50TW9udGg6IGRheURhdGUubW9udGgoKSA9PT0gbW9udGhEYXRlLm1vbnRoKCksXG5cdFx0XHRcdGlzVG9kYXk6IGRheURhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKSxcblx0XHRcdFx0aXNTZWxlY3RlZDogZGF5RGF0ZS5pc1NhbWUoY3VycmVudERhdGUsICdkYXknKSxcblx0XHRcdFx0ZXZlbnRDb3VudDogZXZlbnRzT25EYXkubGVuZ3RoLFxuXHRcdFx0fVxuXHRcdH0pXG5cdH1cblxuXHRjb25zdCBuYXZpZ2F0ZVRvRGF0ZSA9IChcblx0XHRkYXRlOiBEYXlqcyxcblx0XHR2aWV3OiAnbW9udGgnIHwgJ2RheScsXG5cdFx0ZXZlbnQ/OiBSZWFjdC5Nb3VzZUV2ZW50XG5cdCkgPT4ge1xuXHRcdGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdHNlbGVjdERhdGUoZGF0ZSlcblx0XHRzZXRWaWV3KHZpZXcpXG5cdH1cblxuXHRjb25zdCBnZXRFdmVudENvdW50TGFiZWwgPSAoY291bnQ6IG51bWJlcik6IHN0cmluZyA9PiB7XG5cdFx0Y29uc3QgZXZlbnRXb3JkID0gY291bnQgPT09IDEgPyB0KCdldmVudCcpIDogdCgnZXZlbnRzJylcblx0XHRyZXR1cm4gYCR7Y291bnR9ICR7ZXZlbnRXb3JkfWBcblx0fVxuXG5cdGNvbnN0IGdldERheUNsYXNzTmFtZSA9IChkYXk6IERheURhdGEpOiBzdHJpbmcgPT4ge1xuXHRcdGNvbnN0IGJhc2VDbGFzcyA9XG5cdFx0XHQncmVsYXRpdmUgZmxleCBhc3BlY3Qtc3F1YXJlIHctZnVsbCBjdXJzb3ItcG9pbnRlciBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaG92ZXI6YmctYWNjZW50IHJvdW5kZWQtc20gdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMjAwJ1xuXHRcdGNvbnN0IG91dHNpZGVNb250aENsYXNzID0gZGF5LmlzSW5DdXJyZW50TW9udGhcblx0XHRcdD8gJydcblx0XHRcdDogJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBvcGFjaXR5LTUwJ1xuXHRcdGNvbnN0IHRvZGF5Q2xhc3MgPSBkYXkuaXNUb2RheVxuXHRcdFx0PyAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLWZ1bGwnXG5cdFx0XHQ6ICcnXG5cdFx0Y29uc3Qgc2VsZWN0ZWRDbGFzcyA9XG5cdFx0XHRkYXkuaXNTZWxlY3RlZCAmJiAhZGF5LmlzVG9kYXkgPyAnYmctbXV0ZWQgcm91bmRlZC1mdWxsIGZvbnQtYm9sZCcgOiAnJ1xuXHRcdGNvbnN0IGhhc0V2ZW50c0NsYXNzID1cblx0XHRcdGRheS5ldmVudENvdW50ID4gMCAmJiAhZGF5LmlzVG9kYXkgJiYgIWRheS5pc1NlbGVjdGVkID8gJ2ZvbnQtbWVkaXVtJyA6ICcnXG5cblx0XHRyZXR1cm4gY24oXG5cdFx0XHRiYXNlQ2xhc3MsXG5cdFx0XHRvdXRzaWRlTW9udGhDbGFzcyxcblx0XHRcdHRvZGF5Q2xhc3MsXG5cdFx0XHRzZWxlY3RlZENsYXNzLFxuXHRcdFx0aGFzRXZlbnRzQ2xhc3Ncblx0XHQpXG5cdH1cblxuXHRjb25zdCBnZXRFdmVudERvdENsYXNzTmFtZSA9IChjb2xvcjogc3RyaW5nLCBpc1RvZGF5OiBib29sZWFuKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCBkb3RDb2xvciA9IGlzVG9kYXkgPyAnYmctcHJpbWFyeS1mb3JlZ3JvdW5kJyA6IGNvbG9yXG5cdFx0cmV0dXJuIGNuKCdoLVszcHhdIHctWzNweF0gcm91bmRlZC1mdWxsJywgZG90Q29sb3IpXG5cdH1cblxuXHRjb25zdCBtb250aHNEYXRhID0gZ2VuZXJhdGVNb250aHNEYXRhKClcblxuXHRyZXR1cm4gKFxuXHRcdDxTY3JvbGxBcmVhIGNsYXNzTmFtZT1cImgtZnVsbFwiIGRhdGEtdGVzdGlkPVwieWVhci12aWV3XCI+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT1cImdyaWQgYXV0by1yb3dzLWZyIGdyaWQtY29scy0xIGdhcC00IHAtNCBzbTpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiXG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwieWVhci1ncmlkXCJcblx0XHRcdD5cblx0XHRcdFx0e21vbnRoc0RhdGEubWFwKChtb250aCwgbW9udGhJbmRleCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGRheXNJbk1vbnRoID0gZ2VuZXJhdGVEYXlzRm9yTW9udGgobW9udGguZGF0ZSlcblx0XHRcdFx0XHRjb25zdCBhbmltYXRpb25EZWxheSA9IG1vbnRoSW5kZXggKiAwLjA1XG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJob3Zlcjpib3JkZXItcHJpbWFyeSBmbGV4IGZsZXgtY29sIHJvdW5kZWQtbGcgYm9yZGVyIHAtMyB0ZXh0LWxlZnQgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwIGhvdmVyOnNoYWRvdy1tZFwiXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgeWVhci1tb250aC0ke21vbnRoLm1vbnRoS2V5fWB9XG5cdFx0XHRcdFx0XHRcdGtleT17bW9udGgubW9udGhLZXl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtYi0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiXG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2FuaW1hdGlvbkRlbGF5fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17YG1vbnRoLSR7bW9udGgubW9udGhLZXl9YH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgbW9udGgtJHttb250aC5tb250aEtleX1gfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC1sZyBmb250LW1lZGl1bSBob3Zlcjp1bmRlcmxpbmUgY3Vyc29yLXBvaW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B5ZWFyLW1vbnRoLXRpdGxlLSR7bW9udGgubW9udGhLZXl9YH1cblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IG5hdmlnYXRlVG9EYXRlKG1vbnRoLmRhdGUsICdtb250aCcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0e21vbnRoLm5hbWV9XG5cdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XG5cblx0XHRcdFx0XHRcdFx0XHR7bW9udGguZXZlbnRDb3VudCA+IDAgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLWZ1bGwgcHgtMiBweS0xIHRleHQteHNcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHllYXItbW9udGgtZXZlbnQtY291bnQtJHttb250aC5tb250aEtleX1gfVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7Z2V0RXZlbnRDb3VudExhYmVsKG1vbnRoLmV2ZW50Q291bnQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy03IGdhcC1bMXB4XSB0ZXh0LVswLjZyZW1dXCJcblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHllYXItbWluaS1jYWxlbmRhci0ke21vbnRoLm1vbnRoS2V5fWB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7REFZX0hFQURFUl9OQU1FUy5tYXAoKGRheSkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgaC0zIHRleHQtY2VudGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtgaGVhZGVyLSR7bW9udGgubW9udGhLZXl9LSR7ZGF5LmlkfWB9XG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtkYXkubGFiZWx9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQpKX1cblxuXHRcdFx0XHRcdFx0XHRcdHtkYXlzSW5Nb250aC5tYXAoKGRheSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgZGF5VGVzdElkID0gYHllYXItZGF5LSR7bW9udGguZGF0ZS5mb3JtYXQoJ1lZWVktTU0nKX0tJHtkYXkuZGF5S2V5fWBcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGhhc0V2ZW50cyA9IGRheS5ldmVudENvdW50ID4gMFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgdmlzaWJsZURvdENvdW50ID0gTWF0aC5taW4oZGF5LmV2ZW50Q291bnQsIDMpXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB2aXNpYmxlRG90Q29sb3JzID0gRVZFTlRfRE9UX0NPTE9SUy5zbGljZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZURvdENvdW50XG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxidXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2dldERheUNsYXNzTmFtZShkYXkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtkYXlUZXN0SWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtkYXkuZGF5S2V5fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eyhlKSA9PiBuYXZpZ2F0ZVRvRGF0ZShkYXkuZGF0ZSwgJ2RheScsIGUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlPXtnZXREYXlUb29sdGlwKGRheS5ldmVudENvdW50KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInRleHQtY2VudGVyIGxlYWRpbmctbm9uZVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e2RheS5kYXRlLmRhdGUoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7aGFzRXZlbnRzICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnYWJzb2x1dGUgYm90dG9tLTAgZmxleCB3LWZ1bGwganVzdGlmeS1jZW50ZXIgc3BhY2UteC1bMXB4XScsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF5LmlzVG9kYXkgJiYgJ2JvdHRvbS1bMXB4XSdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3Zpc2libGVEb3RDb2xvcnMubWFwKChkb3RDb2xvcikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2dldEV2ZW50RG90Q2xhc3NOYW1lKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkb3RDb2xvcixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF5LmlzVG9kYXlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2RvdENvbG9yfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0fSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KX1cblx0XHRcdDwvZGl2PlxuXHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgLz5cblx0XHQ8L1Njcm9sbEFyZWE+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRXZlbnRGb3JtUHJvcHMgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtJ1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNsYXNzZXNPdmVycmlkZSxcblx0Q2VsbENsaWNrSW5mbyxcblx0RGF0ZVJhbmdlLFxuXHRSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJFbmdpbmUgfSBmcm9tICdAL2hvb2tzL3VzZS1jYWxlbmRhci1lbmdpbmUnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBHQVBfQkVUV0VFTl9FTEVNRU5UUyB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zLCBUcmFuc2xhdG9yRnVuY3Rpb24gfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldywgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5pbXBvcnQgeyBDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJQcm92aWRlclByb3BzIHtcblx0Y2hpbGRyZW46IFJlYWN0Tm9kZVxuXHRldmVudHM/OiBDYWxlbmRhckV2ZW50W11cblx0Zmlyc3REYXlPZldlZWs/OiBudW1iZXIgLy8gMCBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cblx0aW5pdGlhbFZpZXc/OiBDYWxlbmRhclZpZXdcblx0aW5pdGlhbERhdGU/OiBEYXlqc1xuXHRyZW5kZXJFdmVudD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gUmVhY3ROb2RlXG5cdG9uRXZlbnRDbGljaz86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkNlbGxDbGljaz86IChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB2b2lkXG5cdG9uVmlld0NoYW5nZT86ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcblx0b25FdmVudEFkZD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50VXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRXZlbnREZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25EYXRlQ2hhbmdlPzogKGRhdGU6IERheWpzLCByYW5nZTogRGF0ZVJhbmdlKSA9PiB2b2lkXG5cdGxvY2FsZT86IHN0cmluZ1xuXHR0aW1lem9uZT86IHN0cmluZ1xuXHRkaXNhYmxlQ2VsbENsaWNrPzogYm9vbGVhblxuXHRkaXNhYmxlRXZlbnRDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZURyYWdBbmREcm9wPzogYm9vbGVhblxuXHRkYXlNYXhFdmVudHM6IG51bWJlclxuXHRldmVudFNwYWNpbmc/OiBudW1iZXJcblx0c3RpY2t5Vmlld0hlYWRlcj86IGJvb2xlYW5cblx0dmlld0hlYWRlckNsYXNzTmFtZT86IHN0cmluZ1xuXHRoZWFkZXJDb21wb25lbnQ/OiBSZWFjdE5vZGUgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjb21wb25lbnRcblx0aGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY2xhc3Ncblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0cmVuZGVyRXZlbnRGb3JtPzogKHByb3BzOiBFdmVudEZvcm1Qcm9wcykgPT4gUmVhY3ROb2RlXG5cdC8vIFRyYW5zbGF0aW9uIG9wdGlvbnMgLSBwcm92aWRlIGVpdGhlciB0cmFuc2xhdGlvbnMgb2JqZWN0IE9SIHRyYW5zbGF0b3IgZnVuY3Rpb25cblx0dHJhbnNsYXRpb25zPzogVHJhbnNsYXRpb25zXG5cdHRyYW5zbGF0b3I/OiBUcmFuc2xhdG9yRnVuY3Rpb25cblx0dGltZUZvcm1hdD86IFRpbWVGb3JtYXRcblx0Y2xhc3Nlc092ZXJyaWRlPzogQ2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGVcblx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3I/OiAoXG5cdFx0cHJvcHM6IFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHNcblx0KSA9PiBSZWFjdE5vZGVcblx0cmVuZGVySG91cj86IChkYXRlOiBEYXlqcykgPT4gUmVhY3ROb2RlXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzPzogYm9vbGVhblxuXHRoaWRkZW5EYXlzPzogU2V0PG51bWJlcj5cbn1cblxuZXhwb3J0IGNvbnN0IENhbGVuZGFyUHJvdmlkZXI6IFJlYWN0LkZDPENhbGVuZGFyUHJvdmlkZXJQcm9wcz4gPSAoe1xuXHRjaGlsZHJlbixcblx0ZXZlbnRzID0gW10sXG5cdGZpcnN0RGF5T2ZXZWVrID0gMCxcblx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRpbml0aWFsRGF0ZSxcblx0cmVuZGVyRXZlbnQsXG5cdG9uRXZlbnRDbGljayxcblx0b25DZWxsQ2xpY2ssXG5cdG9uVmlld0NoYW5nZSxcblx0b25FdmVudEFkZCxcblx0b25FdmVudFVwZGF0ZSxcblx0b25FdmVudERlbGV0ZSxcblx0b25EYXRlQ2hhbmdlLFxuXHRsb2NhbGUsXG5cdHRpbWV6b25lLFxuXHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRkaXNhYmxlRXZlbnRDbGljayxcblx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRkYXlNYXhFdmVudHMsXG5cdGV2ZW50U3BhY2luZyA9IEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRzdGlja3lWaWV3SGVhZGVyID0gdHJ1ZSxcblx0dmlld0hlYWRlckNsYXNzTmFtZSA9ICcnLFxuXHRoZWFkZXJDb21wb25lbnQsXG5cdGhlYWRlckNsYXNzTmFtZSxcblx0YnVzaW5lc3NIb3Vycyxcblx0cmVuZGVyRXZlbnRGb3JtLFxuXHR0cmFuc2xhdGlvbnMsXG5cdHRyYW5zbGF0b3IsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGNsYXNzZXNPdmVycmlkZSxcblx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdHJlbmRlckhvdXIsXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzID0gZmFsc2UsXG5cdGhpZGRlbkRheXMsXG59KSA9PiB7XG5cdC8vIFVzZSB0aGUgY2FsZW5kYXIgZW5naW5lXG5cdGNvbnN0IGNhbGVuZGFyRW5naW5lID0gdXNlQ2FsZW5kYXJFbmdpbmUoe1xuXHRcdGV2ZW50cyxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRpbml0aWFsVmlldyxcblx0XHRpbml0aWFsRGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdG9uRXZlbnRBZGQsXG5cdFx0b25FdmVudFVwZGF0ZSxcblx0XHRvbkV2ZW50RGVsZXRlLFxuXHRcdG9uRGF0ZUNoYW5nZSxcblx0XHRvblZpZXdDaGFuZ2UsXG5cdFx0bG9jYWxlLFxuXHRcdHRpbWV6b25lLFxuXHRcdHRyYW5zbGF0aW9ucyxcblx0XHR0cmFuc2xhdG9yLFxuXHR9KVxuXG5cdGNvbnN0IGVkaXRFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0U2VsZWN0ZWRFdmVudChldmVudClcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Ly8gQ3VzdG9tIGhhbmRsZXJzIHRoYXQgY2FsbCBleHRlcm5hbCBjYWxsYmFja3Ncblx0Y29uc3QgaGFuZGxlRXZlbnRDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0aWYgKGRpc2FibGVFdmVudENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdFx0aWYgKG9uRXZlbnRDbGljaykge1xuXHRcdFx0XHRvbkV2ZW50Q2xpY2soZXZlbnQpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlZGl0RXZlbnQoZXZlbnQpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbZGlzYWJsZUV2ZW50Q2xpY2ssIG9uRXZlbnRDbGljaywgZWRpdEV2ZW50XVxuXHQpXG5cblx0Y29uc3QgaGFuZGxlRGF0ZUNsaWNrID0gdXNlQ2FsbGJhY2soXG5cdFx0KGluZm86IENlbGxDbGlja0luZm8pID0+IHtcblx0XHRcdGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAob25DZWxsQ2xpY2spIHtcblx0XHRcdFx0b25DZWxsQ2xpY2soaW5mbylcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNhbGVuZGFyRW5naW5lLm9wZW5FdmVudEZvcm0oaW5mbylcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtvbkNlbGxDbGljaywgZGlzYWJsZUNlbGxDbGljaywgY2FsZW5kYXJFbmdpbmVdXG5cdClcblxuXHQvLyBDcmVhdGUgdGhlIGNvbnRleHQgdmFsdWVcblx0Y29uc3QgY29udGV4dFZhbHVlID0gdXNlTWVtbyhcblx0XHQoKSA9PiAoe1xuXHRcdFx0Y3VycmVudERhdGU6IGNhbGVuZGFyRW5naW5lLmN1cnJlbnREYXRlLFxuXHRcdFx0dmlldzogY2FsZW5kYXJFbmdpbmUudmlldyxcblx0XHRcdGV2ZW50czogY2FsZW5kYXJFbmdpbmUuZXZlbnRzLFxuXHRcdFx0cmF3RXZlbnRzOiBjYWxlbmRhckVuZ2luZS5yYXdFdmVudHMsXG5cdFx0XHRjdXJyZW50TG9jYWxlOiBjYWxlbmRhckVuZ2luZS5jdXJyZW50TG9jYWxlLFxuXHRcdFx0aXNFdmVudEZvcm1PcGVuOiBjYWxlbmRhckVuZ2luZS5pc0V2ZW50Rm9ybU9wZW4sXG5cdFx0XHRzZWxlY3RlZEV2ZW50OiBjYWxlbmRhckVuZ2luZS5zZWxlY3RlZEV2ZW50LFxuXHRcdFx0c2VsZWN0ZWREYXRlOiBjYWxlbmRhckVuZ2luZS5zZWxlY3RlZERhdGUsXG5cdFx0XHRmaXJzdERheU9mV2VlazogY2FsZW5kYXJFbmdpbmUuZmlyc3REYXlPZldlZWssXG5cdFx0XHRzZXRDdXJyZW50RGF0ZTogY2FsZW5kYXJFbmdpbmUuc2V0Q3VycmVudERhdGUsXG5cdFx0XHRzZWxlY3REYXRlOiBjYWxlbmRhckVuZ2luZS5zZWxlY3REYXRlLFxuXHRcdFx0c2V0VmlldzogY2FsZW5kYXJFbmdpbmUuc2V0Vmlldyxcblx0XHRcdG5leHRQZXJpb2Q6IGNhbGVuZGFyRW5naW5lLm5leHRQZXJpb2QsXG5cdFx0XHRwcmV2UGVyaW9kOiBjYWxlbmRhckVuZ2luZS5wcmV2UGVyaW9kLFxuXHRcdFx0dG9kYXk6IGNhbGVuZGFyRW5naW5lLnRvZGF5LFxuXHRcdFx0YWRkRXZlbnQ6IGNhbGVuZGFyRW5naW5lLmFkZEV2ZW50LFxuXHRcdFx0dXBkYXRlRXZlbnQ6IGNhbGVuZGFyRW5naW5lLnVwZGF0ZUV2ZW50LFxuXHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IGNhbGVuZGFyRW5naW5lLnVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdFx0ZGVsZXRlRXZlbnQ6IGNhbGVuZGFyRW5naW5lLmRlbGV0ZUV2ZW50LFxuXHRcdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IGNhbGVuZGFyRW5naW5lLmRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdFx0b3BlbkV2ZW50Rm9ybTogY2FsZW5kYXJFbmdpbmUub3BlbkV2ZW50Rm9ybSxcblx0XHRcdGNsb3NlRXZlbnRGb3JtOiBjYWxlbmRhckVuZ2luZS5jbG9zZUV2ZW50Rm9ybSxcblx0XHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZTogY2FsZW5kYXJFbmdpbmUuZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdFx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiBjYWxlbmRhckVuZ2luZS5maW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG5cdFx0XHRyZW5kZXJFdmVudCxcblx0XHRcdG9uRXZlbnRDbGljazogaGFuZGxlRXZlbnRDbGljayxcblx0XHRcdG9uQ2VsbENsaWNrOiBoYW5kbGVEYXRlQ2xpY2ssXG5cdFx0XHRsb2NhbGUsXG5cdFx0XHR0aW1lem9uZSxcblx0XHRcdGRpc2FibGVDZWxsQ2xpY2ssXG5cdFx0XHRkaXNhYmxlRXZlbnRDbGljayxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdHN0aWNreVZpZXdIZWFkZXIsXG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0aGVhZGVyQ29tcG9uZW50LFxuXHRcdFx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdHQ6IGNhbGVuZGFyRW5naW5lLnQsXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRyZW5kZXJIb3VyLFxuXHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRoaWRkZW5EYXlzLFxuXHRcdH0pLFxuXHRcdFtcblx0XHRcdGNhbGVuZGFyRW5naW5lLFxuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRoYW5kbGVFdmVudENsaWNrLFxuXHRcdFx0aGFuZGxlRGF0ZUNsaWNrLFxuXHRcdFx0bG9jYWxlLFxuXHRcdFx0dGltZXpvbmUsXG5cdFx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRyZW5kZXJIb3VyLFxuXHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRoaWRkZW5EYXlzLFxuXHRcdF1cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PENhbGVuZGFyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L0NhbGVuZGFyQ29udGV4dC5Qcm92aWRlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBDYWxlbmRhckRuZENvbnRleHQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9jYWxlbmRhci1kbmQtY29udGV4dCdcbmltcG9ydCB7IEV2ZW50Rm9ybURpYWxvZyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nJ1xuaW1wb3J0IHsgSGVhZGVyIH0gZnJvbSAnQC9jb21wb25lbnRzL2hlYWRlcidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IERheVZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvZGF5LXZpZXcnXG5pbXBvcnQgeyBNb250aFZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9tb250aC12aWV3J1xuaW1wb3J0IHsgV2Vla1ZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstdmlldydcbmltcG9ydCB7IFllYXJWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3llYXItdmlldy95ZWFyLXZpZXcnXG5pbXBvcnQgeyBDYWxlbmRhclByb3ZpZGVyIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWR1cGxpY2F0ZXNcbmltcG9ydCAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuXHRJbGFteUNhbGVuZGFyUHJvcEV2ZW50LFxuXHRJbGFteUNhbGVuZGFyUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQge1xuXHREQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0V0VFS19EQVlTX05VTUJFUl9NQVAsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IG5vcm1hbGl6ZUV2ZW50cywgc2FmZURhdGUgfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgQ2FsZW5kYXJDb250ZW50OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyB2aWV3LCBkYXlNYXhFdmVudHMgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB2aWV3TWFwID0ge1xuXHRcdG1vbnRoOiA8TW9udGhWaWV3IGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfSBrZXk9XCJtb250aFwiIC8+LFxuXHRcdHdlZWs6IDxXZWVrVmlldyBrZXk9XCJ3ZWVrXCIgLz4sXG5cdFx0ZGF5OiA8RGF5VmlldyBrZXk9XCJkYXlcIiAvPixcblx0XHR5ZWFyOiA8WWVhclZpZXcga2V5PVwieWVhclwiIC8+LFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiIGRhdGEtdGVzdGlkPVwiaWxhbXktY2FsZW5kYXJcIj5cblx0XHRcdDxIZWFkZXIgY2xhc3NOYW1lPVwicC0xXCIgLz5cblx0XHRcdHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZVByZXNlbmNlIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuXHRcdFx0PENhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBoLVtjYWxjKDEwMCUtMy41cmVtKV1cIlxuXHRcdFx0XHRcdGRpcmVjdGlvbj1cImhvcml6b250YWxcIlxuXHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e3ZpZXd9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImJvcmRlciBoLWZ1bGwgdy1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1ib2R5XCI+XG5cdFx0XHRcdFx0XHR7dmlld01hcFt2aWV3XX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHQ8L0NhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdDxFdmVudEZvcm1EaWFsb2cgLz5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5jb25zdCB0b0hpZGRlbkRheXNTZXQgPSAoaGlkZGVuRGF5cz86IFdlZWtEYXlzW10pOiBTZXQ8bnVtYmVyPiB8IHVuZGVmaW5lZCA9PiB7XG5cdGlmICghaGlkZGVuRGF5cyB8fCBoaWRkZW5EYXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZFxuXHRyZXR1cm4gbmV3IFNldChoaWRkZW5EYXlzLm1hcCgoZGF5KSA9PiBXRUVLX0RBWVNfTlVNQkVSX01BUFtkYXldKSlcbn1cblxuZXhwb3J0IGNvbnN0IElsYW15Q2FsZW5kYXI6IFJlYWN0LkZDPElsYW15Q2FsZW5kYXJQcm9wcz4gPSAoe1xuXHRldmVudHMsXG5cdGZpcnN0RGF5T2ZXZWVrID0gJ3N1bmRheScsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdGRheU1heEV2ZW50cyA9IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdGV2ZW50U3BhY2luZyA9IEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRzdGlja3lWaWV3SGVhZGVyID0gdHJ1ZSxcblx0dmlld0hlYWRlckNsYXNzTmFtZSA9ICcnLFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3VycyA9IGZhbHNlLFxuXHRoaWRkZW5EYXlzLFxuXHQuLi5wcm9wc1xufSkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxDYWxlbmRhclByb3ZpZGVyXG5cdFx0XHRkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c31cblx0XHRcdGV2ZW50U3BhY2luZz17ZXZlbnRTcGFjaW5nfVxuXHRcdFx0ZXZlbnRzPXtub3JtYWxpemVFdmVudHM8SWxhbXlDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4oZXZlbnRzKX1cblx0XHRcdGZpcnN0RGF5T2ZXZWVrPXtXRUVLX0RBWVNfTlVNQkVSX01BUFtmaXJzdERheU9mV2Vla119XG5cdFx0XHRoaWRkZW5EYXlzPXt0b0hpZGRlbkRheXNTZXQoaGlkZGVuRGF5cyl9XG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycz17aGlkZU5vbkJ1c2luZXNzSG91cnN9XG5cdFx0XHRpbml0aWFsRGF0ZT17c2FmZURhdGUoaW5pdGlhbERhdGUpfVxuXHRcdFx0aW5pdGlhbFZpZXc9e2luaXRpYWxWaWV3fVxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcj17c3RpY2t5Vmlld0hlYWRlcn1cblx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lPXt2aWV3SGVhZGVyQ2xhc3NOYW1lfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxDYWxlbmRhckNvbnRlbnQgLz5cblx0XHQ8L0NhbGVuZGFyUHJvdmlkZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgUmVzb3VyY2VFdmVudEdyaWRQcm9wcyB7XG5cdC8qKlxuXHQgKiBBcnJheSBvZiBkYXlzIHRvIGRpc3BsYXkgaW4gdGhlIGdyaWRcblx0ICovXG5cdGRheXM6IERheWpzW10gfCBEYXlqc1tdW11cblx0LyoqIFRoZSB0eXBlIG9mIGdyaWQgdG8gZGlzcGxheSAtICdkYXknIGZvciBkYXkgdmlldywgJ2hvdXInIGZvciB3ZWVrIHZpZXdcblx0ICogKGFmZmVjdHMgZXZlbnQgcG9zaXRpb25pbmcgbG9naWMpXG5cdCAqL1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdC8qKlxuXHQgKiBDaGlsZHJlbiB3aWxsIGJlIHJlbmRlcmVkIGFzIGhlYWRlcnMgYWJvdmUgdGhlIGdyaWRcblx0ICogKGUuZy4sIGZvciBkYXkgbmFtZXMgaW4gbW9udGggdmlldylcblx0ICovXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzZXM/OiB7IGhlYWRlcj86IHN0cmluZzsgYm9keT86IHN0cmluZzsgc2Nyb2xsPzogc3RyaW5nOyBjZWxsPzogc3RyaW5nIH1cbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlRXZlbnRHcmlkOiBSZWFjdC5GQzxSZXNvdXJjZUV2ZW50R3JpZFByb3BzPiA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdGNoaWxkcmVuLFxuXHRjbGFzc2VzLFxufSkgPT4ge1xuXHRjb25zdCB7IGdldFZpc2libGVSZXNvdXJjZXMgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB2aXNpYmxlUmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cblx0Y29uc3QgY29sdW1ucyA9IGRheXMubWFwKChkYXkpID0+IHtcblx0XHRjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShkYXkpXG5cdFx0cmV0dXJuIHtcblx0XHRcdGlkOiBgY29sLSR7aXNBcnJheSA/IGRheVswXT8uZm9ybWF0KCdZWVlZLU1NLUREJykgOiBkYXkudG9JU09TdHJpbmcoKX1gLFxuXHRcdFx0ZGF5OiBpc0FycmF5ID8gdW5kZWZpbmVkIDogZGF5LFxuXHRcdFx0ZGF5czogaXNBcnJheSA/IGRheSA6IHVuZGVmaW5lZCxcblx0XHRcdGNsYXNzTmFtZTogY2xhc3Nlcz8uY2VsbCxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdH1cblx0fSlcblxuXHRjb25zdCByb3dzID0gdmlzaWJsZVJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdGlkOiByZXNvdXJjZS5pZCxcblx0XHR0aXRsZTogcmVzb3VyY2UudGl0bGUsXG5cdFx0cmVzb3VyY2U6IHJlc291cmNlLFxuXHRcdGNvbHVtbnMsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PEhvcml6b250YWxHcmlkXG5cdFx0XHRjbGFzc2VzPXtjbGFzc2VzfVxuXHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXswfVxuXHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0cm93cz17cm93c31cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9Ib3Jpem9udGFsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBIb3VyTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvaG91ci1sYWJlbC9ob3VyLWxhYmVsJ1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgZ2V0Vmlld0hvdXJzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzJ1xuaW1wb3J0IHsgUmVzb3VyY2VFdmVudEdyaWQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvcmVzb3VyY2UtZXZlbnQtZ3JpZCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZURheUhvcml6b250YWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0dCxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IHJlc291cmNlcyA9IGdldFZpc2libGVSZXNvdXJjZXMoKVxuXHRjb25zdCBkYXlIb3VycyA9IGdldFZpZXdIb3Vycyh7XG5cdFx0cmVmZXJlbmNlRGF0ZTogY3VycmVudERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRhbGxEYXRlczogW2N1cnJlbnREYXRlXSxcblx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnM6IHJlc291cmNlc1xuXHRcdFx0Lm1hcCgocikgPT4gci5idXNpbmVzc0hvdXJzKVxuXHRcdFx0LmZpbHRlcihCb29sZWFuKSBhcyAoQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSlbXSxcblx0fSlcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUV2ZW50R3JpZFxuXHRcdFx0Y2xhc3Nlcz17e1xuXHRcdFx0XHRoZWFkZXI6ICdtaW4tdy1mdWxsJyxcblx0XHRcdFx0Ym9keTogJ21pbi13LWZ1bGwnLFxuXHRcdFx0XHRjZWxsOiAnbWluLXctMjAgZmxleC0xJyxcblx0XHRcdH19XG5cdFx0XHRkYXlzPXtkYXlIb3Vyc31cblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0ey8qIFRpbWUgaGVhZGVyIHJvdyAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTJcIj5cblx0XHRcdFx0XHR7ZGF5SG91cnMubWFwKChjb2wsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpc05vd0hvdXIgPSBjb2wuaXNTYW1lKGRheWpzKCksICdob3VyJylcblx0XHRcdFx0XHRcdGNvbnN0IGtleSA9IGByZXNvdXJjZS1kYXktaGVhZGVyLSR7Y29sLnRvSVNPU3RyaW5nKCl9YFxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdtaW4tdy0yMCBmbGV4LTEgYm9yZGVyLWIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQteHMgc2hyaW5rLTAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNOb3dIb3VyICYmICdiZy1ibHVlLTUwIHRleHQtYmx1ZS02MDAgZm9udC1tZWRpdW0nXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHJlc291cmNlLWRheS10aW1lLWxhYmVsLSR7Y29sLmZvcm1hdCgnSEgnKX1gfVxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8SG91ckxhYmVsIGRhdGU9e2NvbH0gLz5cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbGxEYXlDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktY2VsbCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IEhvdXJMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3VyLWxhYmVsL2hvdXItbGFiZWwnXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZURheVZlcnRpY2FsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCByZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblx0Y29uc3QgaG91cnMgPSBnZXRWaWV3SG91cnMoe1xuXHRcdHJlZmVyZW5jZURhdGU6IGN1cnJlbnREYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0YWxsRGF0ZXM6IFtjdXJyZW50RGF0ZV0sXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzOiByZXNvdXJjZXNcblx0XHRcdC5tYXAoKHIpID0+IHIuYnVzaW5lc3NIb3Vycylcblx0XHRcdC5maWx0ZXIoQm9vbGVhbikgYXMgKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW10sXG5cdH0pXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB7XG5cdFx0aWQ6ICd0aW1lLWNvbCcsXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0Y2xhc3NOYW1lOlxuXHRcdFx0J3Nocmluay0wIHctMTYgbWluLXctMTYgbWF4LXctMTYgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAnLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IERheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdDxIb3VyTGFiZWwgZGF0ZT17ZGF0ZX0gLz5cblx0XHRcdDwvZGl2PlxuXHRcdCksXG5cdH1cblxuXHRjb25zdCBjb2x1bW5zID0gcmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+ICh7XG5cdFx0aWQ6IGBkYXktY29sLSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9LXJlc291cmNlLSR7cmVzb3VyY2UuaWR9YCxcblx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRyZXNvdXJjZSxcblx0XHRkYXlzOiBob3Vycyxcblx0XHRkYXk6IGN1cnJlbnREYXRlLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0YWxsRGF5Um93PXtcblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbFwiPlxuXHRcdFx0XHRcdDxBbGxEYXlDZWxsIC8+XG5cdFx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0XHQ8QWxsRGF5Um93XG5cdFx0XHRcdFx0XHRcdGNsYXNzZXM9e3sgY2VsbDogJ21pbi13LTUwJyB9fVxuXHRcdFx0XHRcdFx0XHRkYXlzPXtbY3VycmVudERhdGVdfVxuXHRcdFx0XHRcdFx0XHRrZXk9e2ByZXNvdXJjZS1hbGxkYXktcm93LSR7cmVzb3VyY2UuaWR9YH1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRzaG93U3BhY2VyPXtmYWxzZX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0fVxuXHRcdFx0Y2VsbFNsb3RzPXtbMCwgMTUsIDMwLCA0NV19XG5cdFx0XHRjbGFzc2VzPXt7IGJvZHk6ICd3LWZ1bGwnLCBoZWFkZXI6ICd3LWZ1bGwnIH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIC4uLmNvbHVtbnNdfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS1kYXlcIlxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHQ+XG5cdFx0XHR7LyogSGVhZGVyICovfVxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9eydmbGV4IGJvcmRlci1iIGgtMTIgZmxleC0xJ31cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS1tb250aC1oZWFkZXJcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNocmluay0wIGJvcmRlci1yIHctMTYgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIiAvPlxuXHRcdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+IChcblx0XHRcdFx0XHQ8UmVzb3VyY2VDZWxsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtaW4tdy01MCBmbGV4LTFcIlxuXHRcdFx0XHRcdFx0a2V5PXtgcmVzb3VyY2UtY2VsbC0ke3Jlc291cmNlLmlkfWB9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlRGF5SG9yaXpvbnRhbCB9IGZyb20gJy4vcmVzb3VyY2UtZGF5LWhvcml6b250YWwnXG5pbXBvcnQgeyBSZXNvdXJjZURheVZlcnRpY2FsIH0gZnJvbSAnLi9yZXNvdXJjZS1kYXktdmVydGljYWwnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZURheVZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IG9yaWVudGF0aW9uIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKG9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XG5cdFx0cmV0dXJuIDxSZXNvdXJjZURheVZlcnRpY2FsIC8+XG5cdH1cblxuXHRyZXR1cm4gPFJlc291cmNlRGF5SG9yaXpvbnRhbCAvPlxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZ2V0TW9udGhEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlTW9udGhIb3Jpem9udGFsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdC8vIEdlbmVyYXRlIGNhbGVuZGFyIGdyaWQgLSBkYXlzIG9mIHRoZSBtb250aFxuXHRjb25zdCBtb250aERheXMgPSB1c2VNZW1vPERheWpzW10+KCgpID0+IHtcblx0XHRyZXR1cm4gZ2V0TW9udGhEYXlzKGN1cnJlbnREYXRlKVxuXHR9LCBbY3VycmVudERhdGVdKVxuXG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlRXZlbnRHcmlkIGRheXM9e21vbnRoRGF5c30+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctMjAgc206dy00MCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVzb3VyY2VzJyl9PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblxuXHRcdFx0e21vbnRoRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcblx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLW1vbnRoLWhlYWRlci0ke2RheS50b0lTT1N0cmluZygpfWBcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctMjAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZmxleC1jb2xcIlxuXHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRcdGtleT17YCR7a2V5fS1hbmltYXRlZGB9XG5cdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtbWVkaXVtXCI+e2RheS5mb3JtYXQoJ0QnKX08L2Rpdj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0e2RheS5mb3JtYXQoJ2RkZCcpfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvUmVzb3VyY2VFdmVudEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZU1vbnRoVmVydGljYWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBnZXRWaXNpYmxlUmVzb3VyY2VzIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgcmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cdGNvbnN0IHN0YXJ0T2ZNb250aCA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcblx0Y29uc3QgZGF5c0luTW9udGggPSBBcnJheS5mcm9tKFxuXHRcdHsgbGVuZ3RoOiBjdXJyZW50RGF0ZS5kYXlzSW5Nb250aCgpIH0sXG5cdFx0KF8sIGkpID0+IHN0YXJ0T2ZNb250aC5hZGQoaSwgJ2RheScpXG5cdClcblxuXHRjb25zdCBmaXJzdENvbCA9IHtcblx0XHRpZDogJ2RhdGUtY29sJyxcblx0XHRkYXlzOiBkYXlzSW5Nb250aCxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRjbGFzc05hbWU6XG5cdFx0XHQnc2hyaW5rLTAgdy0xNiBtaW4tdy0xNiBtYXgtdy0xNiBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCcsXG5cdFx0Z3JpZFR5cGU6ICdkYXknIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBEYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHQ8c3Bhbj57ZGF0ZS5mb3JtYXQoJ0QnKX08L3NwYW4+XG5cdFx0XHRcdDxzcGFuPntkYXRlLmZvcm1hdCgnZGRkJyl9PC9zcGFuPlxuXHRcdFx0PC9kaXY+XG5cdFx0KSxcblx0fVxuXG5cdGNvbnN0IGNvbHVtbnMgPSByZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKHtcblx0XHRpZDogYG1vbnRoLWNvbC1yZXNvdXJjZS0ke3Jlc291cmNlLmlkfWAsXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0cmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG5cdFx0ZGF5czogZGF5c0luTW9udGgsXG5cdFx0Z3JpZFR5cGU6ICdkYXknIGFzIGNvbnN0LFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGNsYXNzZXM9e3sgaGVhZGVyOiAndy1mdWxsJywgYm9keTogJ3ctZnVsbCcgfX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgLi4uY29sdW1uc119XG5cdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLW1vbnRoLXZlcnRpY2FsLWdyaWRcIlxuXHRcdD5cblx0XHRcdHsvKiBIZWFkZXIgKi99XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17J2ZsZXggYm9yZGVyLWIgaC0xMiBmbGV4LTEnfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLW1vbnRoLWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic2hyaW5rLTAgYm9yZGVyLXIgdy0xNiBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiIC8+XG5cdFx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKFxuXHRcdFx0XHRcdDxSZXNvdXJjZUNlbGxcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm1pbi13LTUwIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRrZXk9e2ByZXNvdXJjZS1jZWxsLSR7cmVzb3VyY2UuaWR9YH1cblx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpKX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgUmVzb3VyY2VNb250aEhvcml6b250YWwgfSBmcm9tICcuL3Jlc291cmNlLW1vbnRoLWhvcml6b250YWwnXG5pbXBvcnQgeyBSZXNvdXJjZU1vbnRoVmVydGljYWwgfSBmcm9tICcuL3Jlc291cmNlLW1vbnRoLXZlcnRpY2FsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VNb250aFZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IG9yaWVudGF0aW9uIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKG9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XG5cdFx0cmV0dXJuIDxSZXNvdXJjZU1vbnRoVmVydGljYWwgLz5cblx0fVxuXG5cdHJldHVybiA8UmVzb3VyY2VNb250aEhvcml6b250YWwgLz5cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgSG91ckxhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvdXItbGFiZWwvaG91ci1sYWJlbCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IFJlc291cmNlRXZlbnRHcmlkIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrSG9yaXpvbnRhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHR0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCByZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblxuXHQvLyBHZW5lcmF0ZSB3ZWVrIGRheXNcblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdC8vIFJlc291cmNlLXNwZWNpZmljIGJ1c2luZXNzIGhvdXJzIGNvbWJpbmVkXG5cdGNvbnN0IHJlc291cmNlQnVzaW5lc3NIb3VycyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdHJlc291cmNlcy5tYXAoKHIpID0+IHIuYnVzaW5lc3NIb3VycykuZmlsdGVyKEJvb2xlYW4pIGFzIChcblx0XHRcdFx0fCBCdXNpbmVzc0hvdXJzXG5cdFx0XHRcdHwgQnVzaW5lc3NIb3Vyc1tdXG5cdFx0XHQpW10sXG5cdFx0W3Jlc291cmNlc11cblx0KVxuXG5cdC8vIEdlbmVyYXRlIHRpbWUgY29sdW1ucyAoaG91cmx5IHNsb3RzKVxuXHRjb25zdCB3ZWVrSG91cnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRyZXR1cm4gd2Vla0RheXMubWFwKChkYXkpID0+XG5cdFx0XHRnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBkYXksXG5cdFx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnMsXG5cdFx0XHR9KVxuXHRcdClcblx0fSwgW3dlZWtEYXlzLCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3VycywgcmVzb3VyY2VCdXNpbmVzc0hvdXJzXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUV2ZW50R3JpZFxuXHRcdFx0Y2xhc3Nlcz17e1xuXHRcdFx0XHRoZWFkZXI6ICdoLTI0IG1pbi13LWZ1bGwnLFxuXHRcdFx0XHRib2R5OiAnbWluLXctZnVsbCcsXG5cdFx0XHRcdGNlbGw6ICdtaW4tdy0yMCBmbGV4LTEnLFxuXHRcdFx0fX1cblx0XHRcdGRheXM9e3dlZWtIb3Vyc31cblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0ey8qIERheSBoZWFkZXIgcm93ICovfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMlwiPlxuXHRcdFx0XHRcdHt3ZWVrRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGlzVG9kYXkgPSBkYXkuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9LWRheWBcblxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHQnc2hyaW5rLTAgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciBmb250LW1lZGl1bScsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc1RvZGF5ICYmICdiZy1ibHVlLTUwIHRleHQtYmx1ZS02MDAnXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLXdlZWstZGF5LWhlYWRlclwiXG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2Ake2tleX0tYW5pbWF0ZWRgfVxuXHRcdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2Ake2tleX0tbW90aW9uYH1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3RpY2t5IGxlZnQtMS8yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdNL0QnKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0ey8qIFRpbWUgaGVhZGVyIHJvdyAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTIgYm9yZGVyLWJcIj5cblx0XHRcdFx0XHR7d2Vla0hvdXJzLmZsYXQoKS5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGlzTm93SG91ciA9IGNvbC5pc1NhbWUoZGF5anMoKSwgJ2hvdXInKVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7Y29sLnRvSVNPU3RyaW5nKCl9LWhvdXItJHtpbmRleH1gXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J21pbi13LTIwIGZsZXgtMSBib3JkZXItciBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXhzIHNocmluay0wJyxcblx0XHRcdFx0XHRcdFx0XHRcdGlzTm93SG91ciAmJiAnYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwIGZvbnQtbWVkaXVtJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2ByZXNvdXJjZS13ZWVrLXRpbWUtbGFiZWwtJHtjb2wuZm9ybWF0KCdISCcpfWB9XG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wMDV9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8SG91ckxhYmVsIGRhdGU9e2NvbH0gLz5cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFsbERheUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1jZWxsJ1xuaW1wb3J0IHsgQWxsRGF5Um93IH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IEhvdXJMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3VyLWxhYmVsL2hvdXItbGFiZWwnXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmVydGljYWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHR0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZGVuRGF5cyxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCByZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblx0Ly8gR2VuZXJhdGUgd2VlayBkYXlzXG5cdGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspLFxuXHRcdFtjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCB2aXNpYmxlRGF5cyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdGhpZGRlbkRheXNcblx0XHRcdFx0PyB3ZWVrRGF5cy5maWx0ZXIoKGRheSkgPT4gIWhpZGRlbkRheXMuaGFzKGRheS5kYXkoKSkpXG5cdFx0XHRcdDogd2Vla0RheXMsXG5cdFx0W3dlZWtEYXlzLCBoaWRkZW5EYXlzXVxuXHQpXG5cblx0Y29uc3QgaG91cnMgPSB1c2VNZW1vKFxuXHRcdCgpID0+XG5cdFx0XHRnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzOiByZXNvdXJjZXNcblx0XHRcdFx0XHQubWFwKChyKSA9PiByLmJ1c2luZXNzSG91cnMpXG5cdFx0XHRcdFx0LmZpbHRlcihCb29sZWFuKSBhcyAoQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSlbXSxcblx0XHRcdH0pLFxuXHRcdFtjdXJyZW50RGF0ZSwgYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMsIHdlZWtEYXlzLCByZXNvdXJjZXNdXG5cdClcblxuXHRjb25zdCBmaXJzdENvbCA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdGlkOiAndGltZS1jb2wnLFxuXHRcdFx0ZGF5czogaG91cnMsXG5cdFx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRcdGNsYXNzTmFtZTpcblx0XHRcdFx0J3Nocmluay0wIHctMTYgbWluLXctMTYgbWF4LXctMTYgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAnLFxuXHRcdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0XHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdFx0cmVuZGVyQ2VsbDogKGRhdGU6IERheWpzKSA9PiAoXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHAtMiB0ZXh0LXJpZ2h0IHRleHQtWzEwcHhdIHNtOnRleHQteHMgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cblx0XHRcdFx0XHQ8SG91ckxhYmVsIGRhdGU9e2RhdGV9IC8+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KSxcblx0XHR9KSxcblx0XHRbaG91cnNdXG5cdClcblxuXHRjb25zdCBjb2x1bW5zID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0cmVzb3VyY2VzLmZsYXRNYXAoKHJlc291cmNlKSA9PlxuXHRcdFx0XHR2aXNpYmxlRGF5cy5tYXAoKGRheSkgPT4gKHtcblx0XHRcdFx0XHRpZDogYGRheS1jb2wtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9LXJlc291cmNlLSR7cmVzb3VyY2UuaWR9YCxcblx0XHRcdFx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRcdFx0XHRyZXNvdXJjZSxcblx0XHRcdFx0XHRkYXksXG5cdFx0XHRcdFx0ZGF5czogZ2V0Vmlld0hvdXJzKHtcblx0XHRcdFx0XHRcdHJlZmVyZW5jZURhdGU6IGRheSxcblx0XHRcdFx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdFx0XHRcdHJlc291cmNlQnVzaW5lc3NIb3VyczogcmVzb3VyY2VzXG5cdFx0XHRcdFx0XHRcdC5tYXAoKHIpID0+IHIuYnVzaW5lc3NIb3Vycylcblx0XHRcdFx0XHRcdFx0LmZpbHRlcihCb29sZWFuKSBhcyAoQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSlbXSxcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdFx0XHR9KSlcblx0XHRcdCksXG5cdFx0W3Jlc291cmNlcywgd2Vla0RheXMsIGJ1c2luZXNzSG91cnMsIGhpZGVOb25CdXNpbmVzc0hvdXJzLCB2aXNpYmxlRGF5cy5tYXBdXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleFwiPlxuXHRcdFx0XHRcdDxBbGxEYXlDZWxsIC8+XG5cdFx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0XHQ8QWxsRGF5Um93XG5cdFx0XHRcdFx0XHRcdGNsYXNzZXM9e3sgY2VsbDogJ21pbi13LTUwJyB9fVxuXHRcdFx0XHRcdFx0XHRkYXlzPXt2aXNpYmxlRGF5c31cblx0XHRcdFx0XHRcdFx0a2V5PXtgcmVzb3VyY2Utd2Vlay1hbGxkYXktcm93LSR7cmVzb3VyY2UuaWR9YH1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRzaG93U3BhY2VyPXtmYWxzZX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0fVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6ICdoLTI0JyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2Utd2Vla1wiXG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0ey8qIFJlc291cmNlIGhlYWRlciByb3cgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCB3LTE2IGJvcmRlci1yIHotMjAgYmctYmFja2dyb3VuZCBzdGlja3kgbGVmdC0wXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJweC0yIGgtZnVsbCB3LWZ1bGwgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1lbmQgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0e3QoJ3dlZWsnKX1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBrZXkgPSBgcmVzb3VyY2Utd2Vlay1oZWFkZXItJHtyZXNvdXJjZS5pZH0tZGF5YFxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdzaHJpbmstMCBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgYm9yZGVyLWIgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXIgZm9udC1tZWRpdW0nXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17YCR7a2V5fS1hbmltYXRlZGB9XG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRcdFx0XHRcdHdpZHRoOiBgY2FsYygke3Zpc2libGVEYXlzLmxlbmd0aH0gKiB2YXIoLS1zcGFjaW5nKSAqIDUwKWAsXG5cdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8UmVzb3VyY2VDZWxsXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLWZ1bGwgdy1mdWxsIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzdGlja3kgbGVmdC0xLzIgdGV4dC1zbSBmb250LW1lZGl1bSB0cnVuY2F0ZVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7cmVzb3VyY2UudGl0bGV9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8L1Jlc291cmNlQ2VsbD5cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBEYXRlIGhlYWRlciByb3cgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCB3LTE2IGJvcmRlci1yIGJvcmRlci1iIHotMjAgYmctYmFja2dyb3VuZCBzdGlja3kgbGVmdC0wXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJweC0yIGgtZnVsbCB3LWZ1bGwgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1zdGFydCBmb250LW1lZGl1bVwiPlxuXHRcdFx0XHRcdFx0XHR7Y3VycmVudERhdGUud2VlaygpfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdHtjb2x1bW5zLm1hcCgoY29sLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgZGF5ID0gY29sLmRheVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9LWhvdXItJHtjb2wucmVzb3VyY2VJZH1gXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J3ctNTAgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQteHMgc2hyaW5rLTAgYmctYmFja2dyb3VuZCdcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgcmVzb3VyY2Utd2Vlay10aW1lLWxhYmVsLSR7ZGF5LmZvcm1hdCgnSEgnKX1gfVxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e2RheS5mb3JtYXQoJ00vRCcpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlV2Vla0hvcml6b250YWwgfSBmcm9tICcuL3Jlc291cmNlLXdlZWstaG9yaXpvbnRhbCdcbmltcG9ydCB7IFJlc291cmNlV2Vla1ZlcnRpY2FsIH0gZnJvbSAnLi9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgb3JpZW50YXRpb24gfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRpZiAob3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcpIHtcblx0XHRyZXR1cm4gPFJlc291cmNlV2Vla1ZlcnRpY2FsIC8+XG5cdH1cblxuXHRyZXR1cm4gPFJlc291cmNlV2Vla0hvcml6b250YWwgLz5cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgQ2FsZW5kYXJEbmRDb250ZXh0IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQnXG5pbXBvcnQgeyBFdmVudEZvcm1EaWFsb2cgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtLWRpYWxvZydcbmltcG9ydCB7IEhlYWRlciB9IGZyb20gJ0AvY29tcG9uZW50cy9oZWFkZXInXG5pbXBvcnQgeyBSZXNvdXJjZURheVZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcnXG5pbXBvcnQgeyBSZXNvdXJjZU1vbnRoVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3J1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNhbGVuZGFyQm9keTogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgdmlldyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHZpZXdNYXA6IFJlY29yZDxzdHJpbmcsIFJlYWN0LlJlYWN0Tm9kZT4gPSB7XG5cdFx0bW9udGg6IDxSZXNvdXJjZU1vbnRoVmlldyBrZXk9XCJtb250aFwiIC8+LFxuXHRcdHdlZWs6IDxSZXNvdXJjZVdlZWtWaWV3IGtleT1cIndlZWtcIiAvPixcblx0XHRkYXk6IDxSZXNvdXJjZURheVZpZXcga2V5PVwiZGF5XCIgLz4sXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImlsYW15LXJlc291cmNlLWNhbGVuZGFyXCJcblx0XHQ+XG5cdFx0XHQ8SGVhZGVyIGNsYXNzTmFtZT1cInAtMVwiIC8+XG5cblx0XHRcdHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZWRTZWN0aW9uIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuXHRcdFx0PENhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBoLVtjYWxjKDEwMCUtMy41cmVtKV0gQGNvbnRhaW5lci9jYWxlbmRhci1ib2R5XCJcblx0XHRcdFx0XHRkaXJlY3Rpb249XCJob3Jpem9udGFsXCJcblx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXt2aWV3fVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJib3JkZXIgaC1mdWxsIHctZnVsbFwiIGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItYm9keVwiPlxuXHRcdFx0XHRcdFx0e3ZpZXdNYXBbdmlld119XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0PC9DYWxlbmRhckRuZENvbnRleHQ+XG5cblx0XHRcdHsvKiBFdmVudCBGb3JtIERpYWxvZyAqL31cblx0XHRcdDxFdmVudEZvcm1EaWFsb2cgLz5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCwgV2Vla0RheXMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXIgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7XG5cdElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCxcblx0SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQge1xuXHREQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0V0VFS19EQVlTX05VTUJFUl9NQVAsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IG5vcm1hbGl6ZUV2ZW50cywgc2FmZURhdGUgfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJCb2R5IH0gZnJvbSAnLi9yZXNvdXJjZS1jYWxlbmRhci1ib2R5J1xuXG5jb25zdCB0b0hpZGRlbkRheXNTZXQgPSAoaGlkZGVuRGF5cz86IFdlZWtEYXlzW10pOiBTZXQ8bnVtYmVyPiB8IHVuZGVmaW5lZCA9PiB7XG5cdGlmICghaGlkZGVuRGF5cyB8fCBoaWRkZW5EYXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZFxuXHRyZXR1cm4gbmV3IFNldChoaWRkZW5EYXlzLm1hcCgoZGF5KSA9PiBXRUVLX0RBWVNfTlVNQkVSX01BUFtkYXldKSlcbn1cblxuZXhwb3J0IGNvbnN0IElsYW15UmVzb3VyY2VDYWxlbmRhcjogUmVhY3QuRkM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHM+ID0gKHtcblx0ZXZlbnRzID0gW10sXG5cdHJlc291cmNlcyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9ICdzdW5kYXknLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRkaXNhYmxlRHJhZ0FuZERyb3AgPSBmYWxzZSxcblx0ZGF5TWF4RXZlbnRzID0gREFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdGhpZGRlbkRheXMsXG5cdC4uLnByb3BzXG59KSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlQ2FsZW5kYXJQcm92aWRlclxuXHRcdFx0ZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3A9e2Rpc2FibGVEcmFnQW5kRHJvcH1cblx0XHRcdGV2ZW50U3BhY2luZz17ZXZlbnRTcGFjaW5nfVxuXHRcdFx0ZXZlbnRzPXtub3JtYWxpemVFdmVudHM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50Pihcblx0XHRcdFx0ZXZlbnRzXG5cdFx0XHQpfVxuXHRcdFx0Zmlyc3REYXlPZldlZWs9e1dFRUtfREFZU19OVU1CRVJfTUFQW2ZpcnN0RGF5T2ZXZWVrXX1cblx0XHRcdGhpZGRlbkRheXM9e3RvSGlkZGVuRGF5c1NldChoaWRkZW5EYXlzKX1cblx0XHRcdGluaXRpYWxEYXRlPXtzYWZlRGF0ZShpbml0aWFsRGF0ZSl9XG5cdFx0XHRpbml0aWFsVmlldz17aW5pdGlhbFZpZXd9XG5cdFx0XHRyZXNvdXJjZXM9e3Jlc291cmNlc31cblx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PFJlc291cmNlQ2FsZW5kYXJCb2R5IC8+XG5cdFx0PC9SZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXI+XG5cdClcbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICJBQUVBLGdCQUFTLGVDRlQsMEJBQ0MsYUFFQSxzQkNGRCxlQUFTLGNBQ1Qsa0JBQVMsd0JDRFQsc0JBQ0EsMENBQ0EsOENBQ0Es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QUcsT0FDNUMsT0FBTyxJQUFJLElBQUksRUFBVyxJQUFJLENBQUMsSUFBUSxHQUFxQixFQUFJLENBQUMsR0FHckQsR0FBOEQsRUFDMUUsU0FBUyxDQUFDLEVBQ1YsWUFBWSxDQUFDLEVBQ2IsaUJBQWlCLFNBQ2pCLGNBQWMsUUFDZCxjQUNBLHFCQUFxQixHQUNyQixlQUFlLEdBQ2YsYUFBYSxVQUNiLGVBQWUsR0FDZixnQkFDRyxLQUNFLENBQ0wsT0FDQyxHQWdCRSxHQWhCRixDQUNDLGFBQWMsRUFDZCxtQkFBb0IsRUFDcEIsYUFBYyxFQUNkLE9BQVEsR0FDUCxDQUNELEVBQ0EsZUFBZ0IsR0FBcUIsR0FDckMsV0FBWSxHQUFnQixDQUFVLEVBQ3RDLFlBQWEsR0FBUyxDQUFXLEVBQ2pDLFlBQWEsRUFDYixVQUFXLEVBQ1gsV0FBWSxLQUNSLEVBYkwsU0FlQyxHQUFDLEdBQUQsRUFBc0IsRUFDckIiLAogICJkZWJ1Z0lkIjogIjEyNTU1QTJEQjA5QzMzMTc2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9