@ilamy/calendar 1.3.1 → 1.3.2

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.
Files changed (2) hide show
  1. package/dist/index.js +6 -6
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
- import{RRule as ZX}from"rrule";import{RRule as C2}from"rrule";import W0 from"dayjs";import I2 from"dayjs/plugin/isBetween.js";import R2 from"dayjs/plugin/isSameOrAfter.js";import S2 from"dayjs/plugin/isSameOrBefore.js";import m2 from"dayjs/plugin/localeData.js";import b2 from"dayjs/plugin/minMax.js";import w2 from"dayjs/plugin/timezone.js";import H2 from"dayjs/plugin/utc.js";import T2 from"dayjs/plugin/weekday.js";import k2 from"dayjs/plugin/weekOfYear.js";W0.extend(T2);W0.extend(k2);W0.extend(R2);W0.extend(S2);W0.extend(I2);W0.extend(b2);W0.extend(w2);W0.extend(H2);W0.extend(m2);var F=W0;import{clsx as h2}from"clsx";import{twMerge as g2}from"tailwind-merge";function K(...P){return g2(h2(P))}function e0(P){if(P===void 0)return;if(F.isDayjs(P))return P;let f=F(P);return f.isValid()?f:void 0}var Sf=(P,f)=>{let $={...P};for(let Z of f)delete $[Z];return $};function TP(P){if(!P||!P.length)return[];return P.map((f)=>{return{...f,start:F.isDayjs(f.start)?f.start:F(f.start),end:F.isDayjs(f.end)?f.end:F(f.end)}})}var PP=(P)=>{return Boolean(P.rrule||P.recurrenceId||P.uid)},zf=({event:P,currentEvents:f,startDate:$,endDate:Z})=>{if(!P.rrule)return[];try{let X={...P.rrule,dtstart:P.rrule.dtstart||P.start.toDate()},z=new C2(X),q=f.filter((B)=>B.recurrenceId&&B.uid===P.uid),Q=P.end.diff(P.start),J=$.subtract(Q,"millisecond").toDate(),p=Z.toDate();return z.between(J,p,!0).map((B,A)=>{let _=F(B),Y=q.find((V)=>e0(V.recurrenceId)?.isSame(_));if(Y)return{...P,...Y};let N=P.end.diff(P.start),L=_.add(N,"millisecond"),W=`${P.id}_${A}`,O=P.uid||`${P.id}@ilamy.calendar`;return{...P,id:W,start:_,end:L,uid:O,rrule:void 0}}).filter((B)=>{if(P.exdates&&P.exdates.length>0){let Y=B.start.toISOString();if(P.exdates.includes(Y))return!1}return B.start.isSameOrBefore(Z)&&B.end.isSameOrAfter($)})}catch(X){throw Error(`Invalid RRULE options: ${JSON.stringify(P.rrule)}. Error: ${X instanceof Error?X.message:"Unknown error"}`)}},mf=({targetEvent:P,updates:f,currentEvents:$,scope:Z})=>{let X=[...$],z=X.findIndex((Q)=>{return(Q.uid||`${Q.id}@ilamy.calendar`)===P.uid&&Q.rrule&&!Q.recurrenceId});if(z===-1)throw Error("Base recurring event not found");let q=X[z];switch(Z){case"this":{let Q=P.start.toISOString(),p=[...q.exdates||[],Q],G={...q,exdates:p};X[z]=G;let U=`${P.id}_modified_${Date.now()}`,B={...Sf(P,["width","height","top","left","right"]),...f,id:U,recurrenceId:Q,uid:q.uid||`${q.id}@ilamy.calendar`,rrule:void 0};X.push(B);break}case"following":{let J=P.start.subtract(1,"day").endOf("day").toDate(),p={...q,rrule:{...q.rrule,until:J}};X[z]=p;let G=q.end.diff(q.start),U=f.start||P.start,B=f.end||U.add(G),A=`${q.id}_following`,_=`${A}@ilamy.calendar`,Y={...q,...f,rrule:{...q.rrule,...f.rrule,dtstart:U.toDate()},id:A,uid:_,start:U,end:B,recurrenceId:void 0};X.push(Y);break}case"all":{let Q={...q,...f};X[z]=Q;break}default:throw Error(`Invalid scope: ${Z}. Must be 'this', 'following', or 'all'`)}return X},bf=({targetEvent:P,currentEvents:f,scope:$})=>{let Z=[...f],X=Z.findIndex((q)=>{return(q.uid||`${q.id}@ilamy.calendar`)===P.uid&&q.rrule&&!q.recurrenceId});if(X===-1)throw Error("Base recurring event not found");let z=Z[X];switch($){case"this":{let q=P.start.toISOString(),J=[...z.exdates||[],q],p={...z,exdates:J};Z[X]=p;break}case"following":{let Q=P.start.subtract(1,"day").endOf("day").toDate(),J={...z,rrule:{...z.rrule,until:Q}};Z[X]=J;break}case"all":return Z.filter((Q)=>Q.uid!==P.uid);default:throw Error(`Invalid scope: ${$}. Must be 'this', 'following', or 'all'`)}return Z};import{AnimatePresence as D2,motion as y2}from"motion/react";import{jsx as wf}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,...p})=>wf(D2,{mode:"wait",children:wf(y2.div,{animate:"visible",className:K("inline-block w-full",Z),custom:{delay:$,direction:X},"data-testid":Q,exit:"exit",initial:"hidden",layout:z,layoutId:q,ref:J,variants:E2,...p,children:P},f)});D.displayName="AnimatedSection";import{DndContext as f1,MouseSensor as $1,pointerWithin as z1,TouchSensor as Z1,useSensor as uf,useSensors as J1}from"@dnd-kit/core";import{useRef as df,useState as X1}from"react";import{Slot as j2}from"@radix-ui/react-slot";import{cva as v2}from"class-variance-authority";import{jsx as x2}from"react/jsx-runtime";var kP=v2("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:K(kP({variant:f,size:$,className:P})),"data-slot":"button",...X})}import*as z0 from"@radix-ui/react-dialog";import{XIcon as i2}from"lucide-react";import{jsx as B0,jsxs as Zf}from"react/jsx-runtime";function fP({...P}){return B0(z0.Root,{"data-slot":"dialog",...P})}function o2({...P}){return B0(z0.Portal,{"data-slot":"dialog-portal",...P})}function l2({className:P,...f}){return B0(z0.Overlay,{className:K("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 Zf(o2,{"data-slot":"dialog-portal",children:[B0(l2,{}),Zf(z0.Content,{className:K("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,Zf(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:[B0(i2,{}),B0("span",{className:"sr-only",children:"Close"})]})]})]})}function zP({className:P,...f}){return B0("div",{className:K("flex flex-col gap-2 text-center sm:text-left",P),"data-slot":"dialog-header",...f})}function hP({className:P,...f}){return B0("div",{className:K("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",P),"data-slot":"dialog-footer",...f})}function ZP({className:P,...f}){return B0(z0.Title,{className:K("text-lg leading-none font-semibold",P),"data-slot":"dialog-title",...f})}function gP({className:P,...f}){return B0(z0.Description,{className:K("text-muted-foreground text-sm",P),"data-slot":"dialog-description",...f})}import{useContext as xf}from"react";import{createContext as c2,useContext as Hf}from"react";var JP=c2(void 0),U0=()=>{let P=Hf(JP);if(P===void 0)throw Error("useCalendarContext must be used within a CalendarProvider");return P},u2=()=>{let P=Hf(JP);if(P===void 0)throw Error("useIlamyCalendarContext must be used within a CalendarProvider");return{currentDate:P.currentDate,view:P.view,events:P.events,isEventFormOpen:P.isEventFormOpen,selectedEvent:P.selectedEvent,selectedDate:P.selectedDate,firstDayOfWeek:P.firstDayOfWeek,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,businessHours:P.businessHours}};import{createContext as d2,useContext as Tf}from"react";var XP=d2(void 0),x=()=>{let P=Tf(XP);if(P===void 0)throw Error("useResourceCalendarContext must be used within a ResourceCalendarProvider");return P},r2=()=>{let P=Tf(XP);if(P===void 0)throw Error("useIlamyResourceCalendarContext must be used within a ResourceCalendarProvider");return{currentDate:P.currentDate,view:P.view,events:P.events,resources:P.resources,isEventFormOpen:P.isEventFormOpen,selectedEvent:P.selectedEvent,selectedDate:P.selectedDate,firstDayOfWeek:P.firstDayOfWeek,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{useCallback as Q0,useMemo as a2,useState as Ef}from"react";import{useCallback as e,useEffect as Xf,useMemo as Df,useState as a0}from"react";var Jf={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 CP(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 kf(P){let f=P.daysInMonth();return Array.from({length:f},($,Z)=>P.startOf("month").add(Z,"day"))}function hf({referenceDate:P=F(),length:f=24}={}){return Array.from({length:f},($,Z)=>P.hour(Z).minute(0).second(0).millisecond(0))}var H0=1,gf=24,G0=24,qP=4,Cf="bg-secondary text-muted-foreground pointer-events-none",DP={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6};var yf={day:"day",week:"week",month:"month",year:"year"},yP=(P)=>{let{events:f=[],firstDayOfWeek:$=0,initialView:Z="month",initialDate:X=F(),businessHours:z,onEventAdd:q,onEventUpdate:Q,onEventDelete:J,onDateChange:p,onViewChange:G,locale:U,timezone:B,translations:A,translator:_}=P,[Y,N]=a0(X),[L,W]=a0(Z),[O,I]=a0(f),[V,w]=a0(!1),[T,C]=a0(null),[h,E]=a0(null),[i,l]=a0(U||"en"),R=Df(()=>{if(_)return _;if(A)return(M)=>A[M]||M;return(M)=>Jf[M]||M},[A,_]),d=e((M,k)=>{let c=[];for(let u of O)if(u.rrule)c.push(...zf({event:u,currentEvents:O,startDate:M,endDate:k}));else{let r0=u.start.isSameOrAfter(M)&&u.start.isSameOrBefore(k),$f=u.end.isSameOrAfter(M)&&u.end.isSameOrBefore(k),H=u.start.isBefore(M)&&u.end.isAfter(k);if(r0||$f||H)c.push(u)}return c},[O]),q0=e(()=>{if(L==="day")return{start:Y.startOf("day"),end:Y.endOf("day")};if(L==="year")return{start:Y.startOf("year"),end:Y.endOf("year")};if(L==="week"){let k=Z0(Y,$);return{start:k[0].startOf("day"),end:k[6].endOf("day")}}let M=CP(Y,$);return{start:M[0][0].startOf("day"),end:M[5][6].endOf("day")}},[Y,L,$]),b=Df(()=>{let{start:M,end:k}=q0();return d(M,k)},[d,q0]);Xf(()=>{if(f)I(f)},[f]),Xf(()=>{if(U)l(U),F.locale(U),N((M)=>M.locale(U))},[U]),Xf(()=>{if(B)F.tz.setDefault(B)},[B]);let M0=e((M)=>{N(M),p?.(M)},[p]),_0=e((M)=>{N((k)=>{let c=M===1?k.add(1,yf[L]):k.subtract(1,yf[L]);return p?.(c),c})},[L,p]),$0=e(()=>_0(1),[_0]),N0=e(()=>_0(-1),[_0]),r=e(()=>{let M=F();N(M),p?.(M)},[p]),o=e((M)=>{I((k)=>[...k,M]),q?.(M)},[q]),t0=e((M,k)=>{I((c)=>c.map((u)=>{if(u.id!==M)return u;let r0={...u,...k};return Q?.(r0),r0}))},[Q]),s0=e((M,k,c)=>{Q?.({...M,...k}),I(mf({targetEvent:M,updates:k,currentEvents:O,scope:c.scope}))},[O,Q]),c0=e((M,k)=>{J?.(M),I(bf({targetEvent:M,currentEvents:O,scope:k.scope}))},[O,J]),u0=e((M)=>{I((k)=>{let c=k.find((u)=>u.id===M);if(c)J?.(c);return k.filter((u)=>u.id!==M)})},[J]),d0=e((M)=>{if(M?.start)E(M.start);let k=M?.start??Y;C({title:R("newEvent"),start:k,end:M?.end??k.add(1,"hour"),resourceId:M?.resourceId,description:"",allDay:M?.allDay??!1}),w(!0)},[Y,R]),S=e(()=>{E(null),C(null),w(!1)},[]),L0=e((M)=>{W(M),G?.(M)},[G]),I0=e((M)=>{let k=M.uid;return O.find((c)=>(c.uid||`${c.id}@ilamy.calendar`)===k&&c.rrule)||null},[O]);return{currentDate:Y,view:L,events:b,rawEvents:O,isEventFormOpen:V,selectedEvent:T,selectedDate:h,firstDayOfWeek:$,dayMaxEvents:qP,currentLocale:i,businessHours:z,setCurrentDate:N,selectDate:M0,setView:L0,nextPeriod:$0,prevPeriod:N0,today:r,addEvent:o,updateEvent:t0,updateRecurringEvent:s0,deleteEvent:u0,deleteRecurringEvent:c0,openEventForm:d0,closeEventForm:S,setSelectedEvent:C,setIsEventFormOpen:w,setSelectedDate:E,getEventsForDateRange:d,findParentRecurringEvent:I0,t:R}};import{jsx as n2}from"react/jsx-runtime";var jf=(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:p,onEventAdd:G,onEventUpdate:U,onEventDelete:B,onDateChange:A,locale:_,timezone:Y,disableCellClick:N,disableEventClick:L,disableDragAndDrop:W,dayMaxEvents:O,eventSpacing:I,stickyViewHeader:V=!0,viewHeaderClassName:w="",headerComponent:T,headerClassName:C,translations:h,translator:E,renderResource:i,renderEventForm:l,businessHours:R,timeFormat:d="12-hour",classesOverride:q0,orientation:b="horizontal",renderCurrentTimeIndicator:M0,hideNonBusinessHours:_0=!1})=>{let[$0]=Ef($),[N0,r]=Ef(new Set($.map((H)=>H.id))),o=yP({events:f,firstDayOfWeek:Z,initialView:X,initialDate:z,businessHours:R,onEventAdd:G,onEventUpdate:U,onEventDelete:B,onDateChange:A,onViewChange:p,locale:_,timezone:Y,translations:h,translator:E}),t0=Q0((H)=>{r((s)=>{let w0=new Set(s);if(w0.has(H))w0.delete(H);else w0.add(H);return w0})},[]),s0=Q0((H)=>{r((s)=>new Set(s).add(H))},[]),c0=Q0((H)=>{r((s)=>{let w0=new Set(s);return w0.delete(H),w0})},[]),u0=Q0(()=>{r(new Set($0.map((H)=>H.id)))},[$0]),d0=Q0(()=>{r(new Set)},[]),S=Q0((H)=>{return o.events.filter((s)=>{if(s.resourceIds)return s.resourceIds.includes(H);return s.resourceId===H})},[o.events]),L0=Q0((H)=>{return o.events.filter((s)=>{return jf(s).some((M2)=>H.includes(M2))})},[o.events]),I0=Q0((H)=>{return $0.find((s)=>s.id===H)},[$0]),M=Q0(()=>{return $0.filter((H)=>N0.has(H.id))},[$0,N0]),k=Q0((H)=>{return Boolean(H.resourceIds&&H.resourceIds.length>1)},[]),c=Q0((H)=>{o.setSelectedEvent(H),o.setIsEventFormOpen(!0)},[o]),u=Q0((H)=>{if(L)return;if(Q)Q(H);else c(H)},[L,Q,c]),r0=Q0((H)=>{if(N)return;if(J)J(H);else{let s={title:o.t("newEvent"),start:H.start,end:H.end,description:"",allDay:!1};if(H.resourceId!==void 0)s.resourceId=H.resourceId;o.setSelectedEvent(s),o.setSelectedDate(H.start),o.setIsEventFormOpen(!0)}},[J,N,o]),$f=a2(()=>({...o,view:o.view,setView:o.setView,events:o.events,rawEvents:o.rawEvents,resources:$0,visibleResources:N0,toggleResourceVisibility:t0,showResource:s0,hideResource:c0,showAllResources:u0,hideAllResources:d0,getEventsForResource:S,getEventsForResources:L0,getResourceById:I0,getVisibleResources:M,isEventCrossResource:k,getEventResourceIds:jf,onEventClick:u,onCellClick:r0,headerComponent:T,headerClassName:C,renderEvent:q,renderResource:i,renderEventForm:l,locale:_,timezone:Y,disableCellClick:N,disableEventClick:L,disableDragAndDrop:W,dayMaxEvents:O,eventSpacing:I,stickyViewHeader:V,viewHeaderClassName:w,businessHours:R,timeFormat:d,classesOverride:q0,orientation:b,renderCurrentTimeIndicator:M0,hideNonBusinessHours:_0}),[o,$0,N0,t0,s0,c0,u0,d0,S,L0,I0,M,k,u,r0,q,i,l,_,Y,N,L,W,O,I,V,w,T,C,R,d,q0,b,M0,_0]);return n2(XP.Provider,{value:$f,children:P})};function m(P){let f=xf(XP),$=xf(JP);if(f)return P(f);if($)return P($);throw Error("useSmartCalendarContext must be used within a CalendarProvider or ResourceCalendarProvider")}import{jsx as p0,jsxs as n0}from"react/jsx-runtime";function NP({isOpen:P,onClose:f,onConfirm:$,operationType:Z,eventTitle:X}){let{t:z}=m((J)=>({t:J.t})),q=(J)=>{$(J),f()},Q=Z==="edit";return p0(fP,{onOpenChange:f,open:P,children:n0($P,{className:"max-w-md",children:[n0(zP,{children:[p0(ZP,{children:Q?z("editRecurringEvent"):z("deleteRecurringEvent")}),n0(gP,{children:['"',X,'"'," ",Q?z("editRecurringEventQuestion"):z("deleteRecurringEventQuestion")]})]}),n0("div",{className:"space-y-3",children:[p0(g,{className:"w-full justify-start h-auto p-4",onClick:()=>q("this"),variant:"outline",children:n0("div",{className:"text-left",children:[p0("div",{className:"font-medium",children:z("thisEvent")}),p0("div",{className:"text-sm text-muted-foreground",children:Q?z("onlyChangeThis"):z("onlyDeleteThis")})]})}),p0(g,{className:"w-full justify-start h-auto p-4",onClick:()=>q("following"),variant:"outline",children:n0("div",{className:"text-left",children:[p0("div",{className:"font-medium",children:z("thisAndFollowingEvents")}),p0("div",{className:"text-sm text-muted-foreground",children:Q?z("changeThisAndFuture"):z("deleteThisAndFuture")})]})}),p0(g,{className:"w-full justify-start h-auto p-4",onClick:()=>q("all"),variant:"outline",children:n0("div",{className:"text-left",children:[p0("div",{className:"font-medium",children:z("allEvents")}),p0("div",{className:"text-sm text-muted-foreground",children:Q?z("changeEntireSeries"):z("deleteEntireSeries")})]})})]}),p0(hP,{children:p0(g,{onClick:f,variant:"outline",children:z("cancel")})})]})})}var of=(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:U,hour:B=0,minute:A=0}=Z.data.current;Q=F(U).hour(B).minute(A)}else{let{date:U}=Z.data.current;Q=F(U)}let J=f.end.diff(f.start,"second"),p=Q.add(J,"second");if(p.isSame(p.startOf("day")))p=p.subtract(1,"day").endOf("day");let G={start:Q,end:p,resourceId:z,allDay:X?!1:q??f.allDay};return{activeEvent:f,updates:G}};import{DragOverlay as t2}from"@dnd-kit/core";import{snapCenterToCursor as s2}from"@dnd-kit/modifiers";import{useImperativeHandle as e2,useState as P1}from"react";import{jsx as lf}from"react/jsx-runtime";var cf=({ref:P})=>{let[f,$]=P1(null);return e2(P,()=>({setActiveEvent:$})),lf(t2,{modifiers:[s2],children:f&&lf("div",{className:K("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 rf,jsxs as af,Fragment as q1}from"react/jsx-runtime";function EP({children:P}){let f=df(null),$=df(null),{updateEvent:Z,updateRecurringEvent:X,disableDragAndDrop:z}=m((L)=>({updateEvent:L.updateEvent,updateRecurringEvent:L.updateRecurringEvent,disableDragAndDrop:L.disableDragAndDrop})),[q,Q]=X1({isOpen:!1,event:null,updates:null}),J=uf($1,{activationConstraint:{distance:2}}),p=uf(Z1,{activationConstraint:{delay:100,tolerance:5}}),G=J1(J,p),U=(L,W)=>{if(!L||!L.id)return;if(!W||Object.keys(W).length===0)return;if(PP(L))Q({isOpen:!0,event:L,updates:W});else Z(L.id,W)},B=(L)=>{if(!q.event||!q.updates){Q({isOpen:!1,event:null,updates:null});return}try{X(q.event,q.updates,{scope:L,eventDate:q.event.start})}catch{}finally{Q({isOpen:!1,event:null,updates:null})}},A=()=>{Q({isOpen:!1,event:null,updates:null})},_=(L)=>{let{active:W}=L;if(W.data.current?.type==="calendar-event")$.current?.setActiveEvent(W.data.current.event),f.current=W.data.current.event},Y=(L)=>{let W=of(L,f.current);if(W){let{activeEvent:O,updates:I}=W;U(O,I)}f.current=null,$.current?.setActiveEvent(null)},N=(L)=>{f.current=null};if(z)return P;return af(q1,{children:[af(f1,{collisionDetection:z1,onDragCancel:N,onDragEnd:Y,onDragStart:_,sensors:G,children:[P,rf(cf,{ref:$})]}),rf(NP,{eventTitle:q.event?.title||"",isOpen:q.isOpen,onClose:A,onConfirm:B,operationType:"edit"})]})}import{useEffect as D1,useState as y0}from"react";import*as jP from"@radix-ui/react-checkbox";import{CheckIcon as Q1}from"lucide-react";import{jsx as qf}from"react/jsx-runtime";function T0({className:P,...f}){return qf(jP.Root,{className:K("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:qf(jP.Indicator,{className:"flex items-center justify-center text-current transition-none","data-slot":"checkbox-indicator",children:qf(Q1,{className:"size-3.5"})})})}import{PopoverClose as L1}from"@radix-ui/react-popover";import{Calendar as G1}from"lucide-react";import{useEffect as A1,useRef as N1,useState as W1}from"react";import{ChevronDownIcon as p1,ChevronLeftIcon as Y1,ChevronRightIcon as _1}from"lucide-react";import*as vP from"react";import{DayPicker as U1,getDefaultClassNames as nf}from"react-day-picker";import{jsx as k0}from"react/jsx-runtime";function tf({className:P,classNames:f,showOutsideDays:$=!0,captionLayout:Z="label",buttonVariant:X="ghost",formatters:z,components:q,...Q}){let J=nf();return k0(U1,{captionLayout:Z,className:K("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:K("w-fit",J.root),months:K("flex gap-4 flex-col md:flex-row relative",J.months),month:K("flex flex-col w-full gap-4",J.month),nav:K("flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",J.nav),button_previous:K(kP({variant:X}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",J.button_previous),button_next:K(kP({variant:X}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",J.button_next),month_caption:K("flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)",J.month_caption),dropdowns:K("w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5",J.dropdowns),dropdown_root:K("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:K("absolute bg-popover inset-0 opacity-0",J.dropdown),caption_label:K("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:K("flex",J.weekdays),weekday:K("text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none",J.weekday),week:K("flex w-full mt-2",J.week),week_number_header:K("select-none w-(--cell-size)",J.week_number_header),week_number:K("text-[0.8rem] select-none text-muted-foreground",J.week_number),day:K("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:K("rounded-l-md bg-accent",J.range_start),range_middle:K("rounded-none",J.range_middle),range_end:K("rounded-r-md bg-accent",J.range_end),today:K("bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",J.today),outside:K("text-muted-foreground aria-selected:text-muted-foreground",J.outside),disabled:K("text-muted-foreground opacity-50",J.disabled),hidden:K("invisible",J.hidden),...f},components:{Root:({className:p,rootRef:G,...U})=>{return k0("div",{className:K(p),"data-slot":"calendar",ref:G,...U})},Chevron:({className:p,orientation:G,...U})=>{if(G==="left")return k0(Y1,{className:K("size-4",p),...U});if(G==="right")return k0(_1,{className:K("size-4",p),...U});return k0(p1,{className:K("size-4",p),...U})},DayButton:K1,WeekNumber:({children:p,...G})=>{return k0("td",{...G,children:k0("div",{className:"flex size-(--cell-size) items-center justify-center text-center",children:p})})},...q},formatters:{formatMonthDropdown:(p)=>p.toLocaleString("default",{month:"short"}),...z},showOutsideDays:$,...Q})}function K1({className:P,day:f,modifiers:$,...Z}){let X=nf(),z=vP.useRef(null);return vP.useEffect(()=>{if($.focused)z.current?.focus()},[$.focused]),k0(g,{className:K("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 xP}from"react/jsx-runtime";function h0({...P}){return xP(R0.Root,{"data-slot":"popover",...P})}function g0({...P}){return xP(R0.Trigger,{"data-slot":"popover-trigger",...P})}function C0({className:P,align:f="center",sideOffset:$=4,...Z}){return xP(R0.Portal,{children:xP(R0.Content,{align:f,className:K("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 QP,jsxs as Qf}from"react/jsx-runtime";function WP({date:P,closeOnSelect:f,onChange:$,label:Z="Pick a date",className:X,disabled:z}){let q=N1(null),[Q,J]=W1(P);A1(()=>{J(P)},[P]);let p=(G)=>{if(J(G),f)q.current?.click();$?.(G)};return QP("div",{className:X,children:Qf(h0,{children:[QP(g0,{asChild:!0,children:Qf(g,{className:K("data-[empty=true]:text-muted-foreground w-full justify-start text-left font-normal"),"data-empty":!P,variant:"outline",children:[QP(G1,{}),Q?F(Q).format("MMM D, YYYY"):QP("span",{children:Z})]})}),Qf(C0,{align:"start",className:"w-auto p-0",children:[QP(L1,{ref:q}),QP(tf,{captionLayout:"dropdown",defaultMonth:Q,disabled:z,mode:"single",onSelect:p,selected:Q})]})]})})}import{jsx as B1}from"react/jsx-runtime";function S0({className:P,type:f,...$}){return B1("input",{className:K("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 sf from"@radix-ui/react-label";import{jsx as O1}from"react/jsx-runtime";function a({className:P,...f}){return O1(sf.Root,{className:K("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 O0 from"@radix-ui/react-scroll-area";import{jsx as BP,jsxs as F1}from"react/jsx-runtime";function F0({className:P,children:f,viewPortProps:$,...Z}){return F1(O0.Root,{className:K("relative",P),"data-slot":"scroll-area",...Z,children:[BP(O0.Viewport,{...$,className:K("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}),BP(m0,{}),BP(O0.Corner,{})]})}function m0({className:P,orientation:f="vertical",...$}){return BP(O0.ScrollAreaScrollbar,{className:K("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:BP(O0.ScrollAreaThumb,{className:"bg-border relative flex-1 rounded-full","data-slot":"scroll-area-thumb"})})}import{Clock as M1}from"lucide-react";import{useEffect as I1,useRef as P5,useState as pf}from"react";import{useMemo as V1}from"react";function ef({timeFormat:P="12-hour",minTime:f="00:00",maxTime:$="23:45"}){return{timeOptions:V1(()=>{let z=[],[q,Q]=f.split(":").map(Number),[J,p]=$.split(":").map(Number),G=q*60+Q,U=J*60+p;for(let B=G;B<=U;B+=15){let A=Math.floor(B/60),_=B%60,Y=`${A.toString().padStart(2,"0")}:${_.toString().padStart(2,"0")}`;z.push(Y)}return z},[f,$]),formatTime:(z)=>{let[q,Q]=z.split(":").map(Number),J=q>=12?"PM":"AM",p=q===0?12:q>12?q-12:q;if(P==="24-hour")return`${q.toString().padStart(2,"0")}:${Q.toString().padStart(2,"0")}`;return`${p}:${Q.toString().padStart(2,"0")} ${J}`}}}import{jsx as D0,jsxs as Yf}from"react/jsx-runtime";var R1=(P)=>{P.stopPropagation()};function _f({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[p,G]=pf(!1),[U,B]=pf(""),A=P5(null),_=P5(null),[Y,N]=pf(0),{timeOptions:L,formatTime:W}=ef({timeFormat:X,minTime:$,maxTime:Z}),O=L.filter((w)=>{return W(w).toLowerCase().includes(U.toLowerCase())}),I=(w)=>{f(w),G(!1),B("")};I1(()=>{if(p){if(_.current)N(_.current.offsetWidth);setTimeout(()=>{A.current?.focus()},0)}},[p]);let V=P?W(P):z;return Yf(h0,{onOpenChange:G,open:p,children:[D0(g0,{asChild:!0,children:Yf(g,{"aria-controls":"time-picker-listbox","aria-expanded":p,className:K("w-full justify-start",q),"data-testid":`time-picker-${J}`,disabled:Q,ref:_,role:"combobox",variant:"outline",children:[D0(M1,{className:"mr-2 h-4 w-4"}),V]})}),Yf(C0,{align:"start",className:"p-0",style:{width:Y},children:[D0("div",{className:"p-2 border-b",children:D0(S0,{className:"h-8",onChange:(w)=>B(w.target.value),placeholder:"Search time...",ref:A,value:U})}),D0(F0,{className:"h-[200px]",onWheel:R1,children:D0("div",{className:"p-1",children:O.length===0?D0("div",{className:"py-6 text-center text-sm text-muted-foreground",children:"N/A"}):O.map((w)=>{let T=W(w);return D0("button",{className:K("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",w===P&&"bg-accent text-accent-foreground"),onClick:()=>I(w),type:"button",children:T},w)})})})]})]})}var f5={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6},pP=(P,f)=>{if(!f)return;if(!Array.isArray(f))return f;let $=P.day();return f.find((Z)=>{if(!Z.daysOfWeek)return!1;return Z.daysOfWeek.some((X)=>f5[X]===$)})},OP=(P,f)=>{if(!f)return!0;let $=pP(P,f);if(!$)return!1;if($.daysOfWeek)return $.daysOfWeek.some((Z)=>f5[Z]===P.day());return!0},$5=({date:P,hour:f,minute:$=0,businessHours:Z})=>{if(!OP(P,Z))return!1;if(!Z)return!0;if(f===void 0)return!0;let X=pP(P,Z);if(!X)return!1;let z=X.startTime??9,q=X.endTime??17,Q=f*60+$,J=z*60,p=q*60;if(Q<J||Q>=p)return!1;return!0};var Uf=(P,f,$)=>{let[Z,X]=f.split(":").map(Number),z=F(P).hour(Z).minute(X);return $?z.hour(0).minute(0):z},z5=(P,f,$)=>{let[Z,X]=f.split(":").map(Number),z=F(P).hour(Z).minute(X);return $?z.hour(23).minute(59):z},Kf=(P,f)=>{if(!f)return{min:"00:00",max:"23:59"};let $=F(P);if(!OP($,f))return{min:"00:00",max:"23:59"};let Z=pP($,f);if(!Z)return{min:"00:00",max:"23:59"};return{min:`${(Z.startTime??9).toString().padStart(2,"0")}:00`,max:`${((Z.endTime??17)-1).toString().padStart(2,"0")}:45`}};import{useEffect as H1,useMemo as T1,useState as L5}from"react";import{RRule as X0}from"rrule";import{jsx as iP}from"react/jsx-runtime";function Z5({className:P,...f}){return iP("div",{className:K("text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm",P),"data-slot":"card",...f})}function J5({className:P,...f}){return iP("div",{className:K("@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 iP("div",{className:K("leading-none font-semibold",P),"data-slot":"card-title",...f})}function q5({className:P,...f}){return iP("div",{className:K("p-4 pt-0",P),"data-slot":"card-content",...f})}import*as y from"@radix-ui/react-select";import{CheckIcon as S1,ChevronDownIcon as Q5,ChevronUpIcon as m1}from"lucide-react";import{jsx as P0,jsxs as Lf}from"react/jsx-runtime";function p5({...P}){return P0(y.Root,{"data-slot":"select",...P})}function Y5({...P}){return P0(y.Value,{"data-slot":"select-value",...P})}function _5({className:P,size:f="default",children:$,...Z}){return Lf(y.Trigger,{className:K("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:[$,P0(y.Icon,{asChild:!0,children:P0(Q5,{className:"size-4 opacity-50"})})]})}function U5({className:P,children:f,position:$="popper",align:Z="center",...X}){return P0(y.Portal,{children:Lf(y.Content,{align:Z,className:K("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:[P0(b1,{}),P0(y.Viewport,{className:K("p-1",$==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:f}),P0(w1,{})]})})}function K5({className:P,children:f,...$}){return Lf(y.Item,{className:K("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:[P0("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:P0(y.ItemIndicator,{children:P0(S1,{className:"size-4"})})}),P0(y.ItemText,{children:f})]})}function b1({className:P,...f}){return P0(y.ScrollUpButton,{className:K("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-up-button",...f,children:P0(m1,{className:"size-4"})})}function w1({className:P,...f}){return P0(y.ScrollDownButton,{className:K("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-down-button",...f,children:P0(Q5,{className:"size-4"})})}import{jsx as j,jsxs as J0}from"react/jsx-runtime";var Gf={DAILY:X0.DAILY,WEEKLY:X0.WEEKLY,MONTHLY:X0.MONTHLY,YEARLY:X0.YEARLY},k1=Object.fromEntries(Object.entries(Gf).map(([P,f])=>[f,P])),G5=[X0.SU,X0.MO,X0.TU,X0.WE,X0.TH,X0.FR,X0.SA],h1=["sun","mon","tue","wed","thu","fri","sat"],A5=(P)=>Math.max(1,Number.parseInt(P,10)||1),g1=(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")}},N5=({value:P,onChange:f})=>{let{t:$}=m((Y)=>({t:Y.t})),[Z,X]=L5(!!P),[z,q]=L5(()=>P||null),Q=T1(()=>h1.map((Y,N)=>({value:G5[N],label:$(Y)})),[$]);H1(()=>{if(X(!!P),P)q(P)},[P]);let J=(Y)=>{if(!z)return;let N={...z,...Y};q(N),f(Z?N:null)},p=(Y)=>{if(X(Y),!Y){f(null);return}if(z){f(z);return}let N={freq:X0.DAILY,interval:1};q(N),f(N)},G=(Y)=>{let N=z?.byweekday||[],L=G5[Y],W=N.includes(L)?N.filter((O)=>O!==L):[...N,L];J({byweekday:W.length?W:void 0})},U=(Y)=>{let N={count:void 0,until:void 0};if(Y==="count")N.count=z?.count||1;if(Y==="until")N.until=z?.until||F().add(1,"month").endOf("day").toDate();J(N)},B=z?.until?"until":z?.count?"count":"never",A=k1[z?.freq??X0.DAILY]||"DAILY",_=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:[j(T0,{checked:Z,"data-testid":"toggle-recurrence",id:"recurring",onCheckedChange:p}),j(X5,{className:"text-sm",children:$("repeat")})]}),Z&&P&&j("p",{className:"text-xs text-muted-foreground",children:g1(P,$)})]}),Z&&j(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:[j(a,{className:"text-xs",htmlFor:"frequency",children:$("repeats")}),J0(p5,{onValueChange:(Y)=>J({freq:Gf[Y]}),value:A,children:[j(_5,{className:"h-8","data-testid":"frequency-select",id:"frequency",children:j(Y5,{})}),j(U5,{children:Object.keys(Gf).map((Y)=>j(K5,{value:Y,children:$(Y.toLowerCase())},Y))})]})]}),J0("div",{children:[j(a,{className:"text-xs",htmlFor:"interval",children:$("every")}),j(S0,{className:"h-8",id:"interval",min:"1",onChange:(Y)=>J({interval:A5(Y.target.value)}),type:"number",value:z?.interval||1})]})]}),z?.freq===X0.WEEKLY&&J0("div",{children:[j(a,{className:"text-xs",children:$("repeatOn")}),j("div",{className:"flex flex-wrap gap-1 mt-1",children:Q.map((Y,N)=>J0("div",{className:"flex items-center space-x-1",children:[j(T0,{checked:_.includes(Y.value),id:`day-${N}`,onCheckedChange:()=>G(N)}),j(a,{className:"text-xs cursor-pointer",htmlFor:`day-${N}`,children:Y.label})]},Y.label))})]}),J0("div",{children:[j(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:[j(T0,{checked:B==="never",id:"never",onCheckedChange:()=>U("never")}),j(a,{className:"text-xs",htmlFor:"never",children:$("never")})]}),J0("div",{className:"flex items-center space-x-2",children:[j(T0,{checked:B==="count",id:"after",onCheckedChange:()=>U("count")}),j(a,{className:"text-xs",htmlFor:"after",children:$("after")}),B==="count"&&j(S0,{className:"h-6 w-16 text-xs","data-testid":"count-input",min:"1",onChange:(Y)=>J({count:A5(Y.target.value)}),type:"number",value:z?.count||1}),j("span",{className:"text-xs",children:$("occurrences")})]}),J0("div",{className:"flex items-center space-x-2",children:[j(T0,{checked:B==="until",id:"on",onCheckedChange:()=>U("until")}),j(a,{className:"text-xs",htmlFor:"on",children:$("on")}),B==="until"&&j(WP,{className:"h-6",date:z?.until,onChange:(Y)=>J({until:Y?F(Y).endOf("day").toDate():void 0})})]})]})]})]})})]})};import{useCallback as oP,useState as C1}from"react";function W5(P){let{updateRecurringEvent:f,deleteRecurringEvent:$}=m((p)=>({updateRecurringEvent:p.updateRecurringEvent,deleteRecurringEvent:p.deleteRecurringEvent})),[Z,X]=C1({isOpen:!1,operationType:"edit",event:null}),z=oP((p,G)=>{X({isOpen:!0,operationType:"edit",event:p,updates:G,onConfirm:(U)=>{f(p,G,{scope:U,eventDate:p.start})}})},[f]),q=oP((p)=>{X({isOpen:!0,operationType:"delete",event:p,onConfirm:(G)=>{$(p,{scope:G,eventDate:p.start})}})},[$]),Q=oP(()=>{X({isOpen:!1,operationType:"edit",event:null})},[]),J=oP((p)=>{if(Z.onConfirm)Z.onConfirm(p);Q(),P?.()},[Z,Q,P]);return{dialogState:Z,openEditDialog:z,openDeleteDialog:q,closeDialog:Q,handleConfirm:J}}import{jsx as v,jsxs as f0,Fragment as y1}from"react/jsx-runtime";var B5=[{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"}],O5=({selectedEvent:P,onClose:f,onUpdate:$,onDelete:Z,onAdd:X})=>{let{dialogState:z,openEditDialog:q,openDeleteDialog:Q,closeDialog:J,handleConfirm:p}=W5(f),{findParentRecurringEvent:G,t:U,businessHours:B,timeFormat:A}=m((S)=>({findParentRecurringEvent:S.findParentRecurringEvent,t:S.t,businessHours:S.businessHours,timeFormat:S.timeFormat})),_=P?.start??F(),Y=P?.end??F().add(1,"hour"),N=P?G(P):null,[L,W]=y0(_.toDate()),[O,I]=y0(Y.toDate()),[V,w]=y0(P?.allDay||!1),[T,C]=y0(P?.color||B5[0].value),[h,E]=y0(_.format("HH:mm")),[i,l]=y0(Y.format("HH:mm")),[R,d]=y0({title:P?.title||"",description:P?.description||"",location:P?.location||""}),[q0,b]=y0(()=>{return P?.rrule||N?.rrule||null}),M0=(S)=>{if(W(S),S&&F(S).isAfter(F(O)))I(S)},_0=(S)=>{if(I(S),S&&F(S).isBefore(F(L)))W(S)},$0=(S)=>{if(E(S),F(L).isSame(F(O),"day")&&S>i)l(S)},N0=(S)=>{if(l(S),F(L).isSame(F(O),"day")&&S<h)E(S)},r=(S)=>{let{name:L0,value:I0}=S.target;d((M)=>({...M,[L0]:I0}))};D1(()=>{if(V)l("23:59")},[V]);let o=(S)=>{S.preventDefault();let L0=Uf(L,h,V),I0=z5(O,i,V),M={id:P?.id||F().format("YYYYMMDDHHmmss"),title:R.title,start:L0,end:I0,resourceId:P?.resourceId,description:R.description,location:R.location,allDay:V,color:T,rrule:q0||void 0};if(P?.id&&PP(P)){q(P,{title:R.title,start:L0,end:I0,description:R.description,location:R.location,allDay:V,color:T,rrule:q0||void 0});return}if(P?.id)$?.(M);else X?.(M);f()},t0=()=>{if(P?.id){if(PP(P)){Q(P);return}Z?.(P),f()}},s0=(S)=>{if(!S){b(null);return}let L0=Uf(L,h,V);b({...S,dtstart:L0.toDate()})},c0=B?(S)=>!OP(F(S),B):void 0,u0=Kf(L,B),d0=Kf(O,B);return f0(y1,{children:[f0("form",{className:"flex flex-col flex-1 min-h-0",onSubmit:o,children:[v(F0,{className:"flex-1 min-h-0",children:f0("div",{className:"grid gap-3 sm:gap-4 p-1",children:[f0("div",{className:"grid gap-2",children:[v(a,{className:"text-xs sm:text-sm",htmlFor:"title",children:U("title")}),v(S0,{className:"h-8 text-sm sm:h-9",id:"title",name:"title",onChange:r,placeholder:U("eventTitlePlaceholder"),required:!0,value:R.title})]}),f0("div",{className:"grid gap-1 sm:gap-2",children:[v(a,{className:"text-xs sm:text-sm",htmlFor:"description",children:U("description")}),v(S0,{className:"h-8 text-sm sm:h-9",id:"description",name:"description",onChange:r,placeholder:U("eventDescriptionPlaceholder"),value:R.description})]}),f0("div",{className:"flex items-center space-x-2",children:[v(T0,{checked:V,id:"allDay",onCheckedChange:(S)=>w(S===!0)}),v(a,{className:"text-xs sm:text-sm",htmlFor:"allDay",children:U("allDay")})]}),f0("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[f0("div",{children:[v(a,{className:"text-xs sm:text-sm",children:U("startDate")}),v(WP,{className:"mt-1",closeOnSelect:!0,date:L,disabled:c0,onChange:M0})]}),f0("div",{children:[v(a,{className:"text-xs sm:text-sm",children:U("endDate")}),v(WP,{className:"mt-1",closeOnSelect:!0,date:O,disabled:c0,onChange:_0})]})]}),!V&&f0("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[f0("div",{children:[v(a,{className:"text-xs sm:text-sm",children:U("startTime")}),v(_f,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:u0.max,minTime:u0.min,name:"start-time",onChange:$0,timeFormat:A,value:h})]}),f0("div",{children:[v(a,{className:"text-xs sm:text-sm",children:U("endTime")}),v(_f,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:d0.max,minTime:d0.min,name:"end-time",onChange:N0,timeFormat:A,value:i})]})]}),f0("div",{className:"grid gap-1 sm:gap-2",children:[v(a,{className:"text-xs sm:text-sm",children:U("color")}),v("div",{className:"flex flex-wrap gap-2",children:B5.map((S)=>v(g,{"aria-label":S.label,className:K(`${S.value} h-6 w-6 rounded-full sm:h-8 sm:w-8`,T===S.value&&"ring-2 ring-black ring-offset-1 sm:ring-offset-2"),onClick:()=>C(S.value),type:"button",variant:"ghost"},S.value))})]}),f0("div",{className:"grid gap-1 sm:gap-2",children:[v(a,{className:"text-xs sm:text-sm",htmlFor:"location",children:U("location")}),v(S0,{className:"h-8 text-sm sm:h-9",id:"location",name:"location",onChange:r,placeholder:U("eventLocationPlaceholder"),value:R.location})]}),v(N5,{onChange:s0,value:q0})]})}),f0(hP,{className:"mt-4 shrink-0 flex flex-col-reverse gap-2 sm:flex-row sm:gap-0",children:[P?.id&&v(g,{className:"w-full sm:mr-auto sm:w-auto",onClick:t0,size:"sm",type:"button",variant:"destructive",children:U("delete")}),f0("div",{className:"flex w-full gap-2 sm:w-auto",children:[v(g,{className:"flex-1 sm:flex-none",onClick:f,size:"sm",type:"button",variant:"outline",children:U("cancel")}),v(g,{className:"flex-1 sm:flex-none",size:"sm",type:"submit",children:P?.id?U("update"):U("create")})]})]})]}),v(NP,{eventTitle:z.event?.title||"",isOpen:z.isOpen,onClose:J,onConfirm:p,operationType:z.operationType})]})};import{jsx as lP,jsxs as F5}from"react/jsx-runtime";var cP=()=>{let{t:P,selectedEvent:f,isEventFormOpen:$,closeEventForm:Z,addEvent:X,updateEvent:z,deleteEvent:q,renderEventForm:Q}=m((U)=>({t:U.t,selectedEvent:U.selectedEvent,isEventFormOpen:U.isEventFormOpen,closeEventForm:U.closeEventForm,addEvent:U.addEvent,updateEvent:U.updateEvent,deleteEvent:U.deleteEvent,renderEventForm:U.renderEventForm})),G={open:$,onClose:Z,selectedEvent:f,onAdd:X,onUpdate:(U)=>{z(U.id,U)},onDelete:(U)=>{q(U.id)}};if(Q)return Q(G);return lP(fP,{onOpenChange:Z,open:$,children:F5($P,{className:"flex flex-col h-[90vh] w-[90vw] max-w-[500px] p-4 sm:p-6 overflow-hidden gap-0",children:[F5(zP,{className:"mb-2 sm:mb-4 shrink-0",children:[lP(ZP,{className:"text-base sm:text-lg",children:f?.id?P("editEvent"):P("createEvent")}),lP(gP,{className:"text-xs sm:text-sm",children:f?.id?P("editEventDetails"):P("addNewEvent")})]}),lP(O5,{...G})]})})};import{Calendar as P4,Download as f4,Menu as $4,Plus as z4}from"lucide-react";import{useState as Z4}from"react";import{RRule as E1}from"rrule";var Af=`\r
2
- `,j1=["BEGIN:VTIMEZONE","TZID:UTC","BEGIN:STANDARD","DTSTART:19700101T000000","TZNAME:UTC","TZOFFSETFROM:+0000","TZOFFSETTO:+0000","END:STANDARD","END:VTIMEZONE"].join(Af),dP=(P)=>{return P.replaceAll("\\","\\\\").replaceAll(";","\\;").replaceAll(",","\\,").replaceAll(`
3
- `,"\\n").replaceAll("\r","")},uP=(P,f=!1)=>{return f?P.format("YYYYMMDD"):P.utc().format("YYYYMMDD[T]HHmmss[Z]")},V5=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},v1=(P)=>{try{return new E1(P).toString().split(`
4
- `).find(($)=>$.startsWith("RRULE:"))||""}catch{return""}},x1=(P)=>{let f=F().utc().format("YYYYMMDD[T]HHmmss[Z]"),$=P.allDay?";VALUE=DATE":"",Z=P.rrule?v1(P.rrule):"",X=P.exdates?.length?P.exdates.map((Q)=>uP(F(Q),P.allDay)).join(","):null,z=P.recurrenceId?uP(F(P.recurrenceId),P.allDay):null;return["BEGIN:VEVENT",`UID:${V5(P)}`,`DTSTART${$}:${uP(P.start,P.allDay)}`,`DTEND${$}:${uP(P.end,P.allDay)}`,`SUMMARY:${dP(P.title)}`,P.description&&`DESCRIPTION:${dP(P.description)}`,P.location&&`LOCATION:${dP(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(Af)},i1=(P)=>{let f=new Set;return P.filter(($)=>{let Z=V5($),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 $=dP(f),Z=i1(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(Af)},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 l1}from"lucide-react";import{useMemo as c1,useState as u1}from"react";import{jsx as t,jsxs as aP,Fragment as rP}from"react/jsx-runtime";var d1=["january","february","march","april","may","june","july","august","september","october","november","december"],r1=()=>{let{currentDate:P,view:f,setCurrentDate:$,t:Z,firstDayOfWeek:X}=m((L)=>({currentDate:L.currentDate,view:L.view,setCurrentDate:L.setCurrentDate,t:L.t,firstDayOfWeek:L.firstDayOfWeek})),[z,q]=u1(null),Q=c1(()=>d1.map((L)=>Z(L)),[Z]),J=P.year(),p=Array.from({length:11},(L,W)=>J-5+W),G=Z0(P,X),U=(L)=>{$(L),q(null)},B=()=>t(rP,{children:Q.map((L,W)=>t(g,{className:K("justify-start font-normal",P.month()===W&&"bg-primary/10"),onClick:()=>U(P.month(W)),variant:"ghost",children:L},L))}),A=()=>t(rP,{children:p.map((L)=>t(g,{className:K("justify-start font-normal",P.year()===L&&"bg-primary/10"),onClick:()=>U(P.year(L)),variant:"ghost",children:L},L))}),_=()=>t(rP,{children:Array.from({length:7},(L,W)=>{let O=P.subtract(3,"week").add(W,"week"),I=Z0(O,X),V=I[0],w=I[6],T=O.isSame(P,"week"),C=V.month()!==w.month();return t(g,{className:K("justify-start font-normal",T&&"bg-primary/10"),onClick:()=>U(V),variant:"ghost",children:aP("div",{className:"flex w-full items-center justify-between",children:[t("span",{children:`${V.format("MMM D")} - ${w.format("D")}`}),C&&t("span",{className:"ml-0.5 text-xs opacity-70",children:`${V.format("MMM")}-${w.format("MMM")}`})]})},V.format("YYYY-MM-DD"))})}),Y=()=>{let L=P.startOf("month"),W=P.daysInMonth();return t(rP,{children:Array.from({length:W},(O,I)=>{let V=L.date(I+1),w=V.isSame(P,"day"),T=V.isSame(F(),"day");return t(g,{className:K("justify-start font-normal",w&&"bg-primary/10"),onClick:()=>U(V),variant:"ghost",children:aP("div",{className:"flex w-full items-center justify-between",children:[t("span",{children:V.format("dddd, MMM D")}),T&&t("span",{className:"bg-primary text-primary-foreground rounded-sm px-1! text-xs",children:Z("today")})]})},V.format("YYYY-MM-DD"))})})};return[{id:"month",hidden:f==="year",title:P.format("MMMM"),render:B},{id:"year",hidden:!1,title:P.format("YYYY"),render:A},{id:"week",hidden:f!=="week",title:`${G[0].format("MMM D")} - ${G[6].format("MMM D")}`,render:_},{id:"day",hidden:f!=="day",title:P.format("dddd, D"),render:Y}].filter((L)=>!L.hidden).map((L)=>aP(h0,{onOpenChange:(W)=>q(W?L.id:null),open:z===L.id,children:[t(g0,{asChild:!0,children:aP(g,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",variant:"ghost",children:[t(D,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",transitionKey:`${L.id}-${P.format("YYYY-MM-DD")}`,children:L.title}),t(l1,{className:"h-4 w-4"})]})}),t(C0,{className:"w-40 p-0",children:t("div",{className:"flex max-h-60 flex-col overflow-auto",children:L.render()})})]},L.id))},I5=r1;import{ChevronLeft as a1,ChevronRight as n1}from"lucide-react";import{jsx as YP,jsxs as e1}from"react/jsx-runtime";var t1=["day","week","month","year"],s1=({currentView:P,onChange:f,variant:$="default",size:Z="sm",className:X,onToday:z,onNext:q,onPrevious:Q})=>{let{t:J,resources:p}=m((_)=>({t:_.t,resources:_.resources})),G=$==="grid",U=p&&p.length>0,B=(_)=>{return K(G?"w-full":"",P===_&&"bg-primary/80")},A=(_)=>{return P===_?"default":"outline"};return e1("div",{className:K(G?"grid grid-cols-2 gap-2":"flex gap-1",X),children:[YP(g,{onClick:Q,size:Z,variant:"outline",children:YP(a1,{className:"h-4 w-4"})}),YP(g,{onClick:q,size:Z,variant:"outline",children:YP(n1,{className:"h-4 w-4"})}),t1.map((_)=>{if(U&&_==="year")return null;return YP(g,{className:B(_),onClick:()=>f(_),size:Z,variant:A(_),children:J(_)},_)}),YP(g,{onClick:z,size:Z,variant:"outline",children:J("today")})]})},Nf=s1;import{jsx as n,jsxs as b0}from"react/jsx-runtime";var J4=({className:P=""})=>{let{view:f,setView:$,nextPeriod:Z,prevPeriod:X,today:z,openEventForm:q,headerComponent:Q,headerClassName:J,rawEvents:p,t:G}=m((L)=>({view:L.view,setView:L.setView,nextPeriod:L.nextPeriod,prevPeriod:L.prevPeriod,today:L.today,openEventForm:L.openEventForm,headerComponent:L.headerComponent,headerClassName:L.headerClassName,rawEvents:L.rawEvents,t:L.t})),[U,B]=Z4(!1),A=()=>B(!1),_=()=>{let L=`ilamy-calendar-${new Date().toISOString().split("T")[0]}.ics`;M5(p,L,"ilamy Calendar"),A()},Y=()=>b0(g,{className:"flex items-center gap-1",onClick:()=>q(),size:"sm",variant:"default",children:[n(z4,{className:"h-4 w-4"}),n("span",{className:"hidden @4xl:inline",children:G("new")})]}),N=({fullWidth:L=!1})=>b0(g,{className:K("flex items-center gap-1",L&&"w-full gap-2"),onClick:_,size:"sm",variant:"outline",children:[n(f4,{className:"h-4 w-4"}),L?`${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:K("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(P4,{className:"h-5 w-5"}),n(I5,{})]}),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(Nf,{className:"justify-end",currentView:f,onChange:$,onNext:Z,onPrevious:X,onToday:z,variant:"default"}),n(Y,{}),n(N,{})]}),b0("div",{className:"flex items-center justify-end gap-1 @md/base-header:hidden",children:[n(Y,{}),b0(h0,{onOpenChange:B,open:U,children:[n(g0,{asChild:!0,children:n(g,{size:"sm",variant:"outline",children:n($4,{className:"h-4 w-4"})})}),n(C0,{align:"end",className:"w-[240px] p-2",children:b0("div",{className:"space-y-2",children:[n(Nf,{currentView:f,onChange:(L)=>{$(L),A()},onNext:()=>{Z(),A()},onPrevious:()=>{X(),A()},onToday:()=>{z(),A()},variant:"grid"}),n("div",{className:"pt-2 border-t",children:n(N,{fullWidth:!0})})]})})]})]})]})]})})},FP=J4;import{memo as b4}from"react";import{memo as V4,useCallback as M4}from"react";import A4,{memo as N4,useMemo as W4}from"react";import{jsx as X4}from"react/jsx-runtime";var R5=({date:P,locale:f="en",className:$})=>{let Z=P.isSame(F(),"day");return X4("div",{className:K("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 U4,useState as S5}from"react";import{useDraggable as q4}from"@dnd-kit/core";import{memo as Q4}from"react";import{jsx as VP,jsxs as _4}from"react/jsx-runtime";var p4=(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}=m((_)=>({onEventClick:_.onEventClick,renderEvent:_.renderEvent,disableEventClick:_.disableEventClick,disableDragAndDrop:_.disableDragAndDrop})),{attributes:p,listeners:G,setNodeRef:U,isDragging:B}=q4({id:P,data:{event:f,type:"calendar-event"},disabled:X||J}),A=()=>{let _=f,Y=_.isTruncatedStart,N=_.isTruncatedEnd;return _4("div",{className:K(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",p4(Y,N)),style:{backgroundColor:f.backgroundColor,color:f.color},children:[Y&&VP("div",{className:"absolute left-0 top-0 bottom-0 w-0.5 bg-foreground/25"}),VP("p",{className:K("text-[10px] font-semibold sm:text-xs mt-0.5",Y&&"pl-1",N&&"pr-1"),children:f.title}),N&&VP("div",{className:"absolute right-0 top-0 bottom-0 w-0.5 bg-foreground/25"})]})};return VP(D,{className:K("truncate h-full w-full",X||J?Q?"cursor-default":"cursor-pointer":"cursor-grab",B&&!(X||J)&&"cursor-grabbing shadow-lg",$),layout:!0,layoutId:P,onClick:(_)=>{_.stopPropagation(),z(f)},ref:U,style:Z,transitionKey:P,...p,...G,children:q?q(f):VP(A,{})})}var _P=Q4(Y4,(P,f)=>{return P.elementId===f.elementId&&P.disableDrag===f.disableDrag&&P.className===f.className&&P.event===f.event});import{jsx as MP,jsxs as K4}from"react/jsx-runtime";var m5=({ref:P})=>{let[f,$]=S5(!1),[Z,X]=S5(null),{currentDate:z,firstDayOfWeek:q}=m((p)=>({currentDate:p.currentDate,firstDayOfWeek:p.firstDayOfWeek}));U4(P,()=>({open:()=>$(!0),close:()=>$(!1),setSelectedDayEvents:(p)=>X(p)}));let J=z.startOf("month").clone();while(J.day()!==q)J=J.subtract(1,"day");return MP(fP,{onOpenChange:$,open:f,children:K4($P,{className:"max-h-[80vh] max-w-md overflow-y-auto",children:[MP(zP,{children:MP(ZP,{children:Z?.day.format("MMMM D, YYYY")})}),MP("div",{className:"mt-4 space-y-3",children:Z?.events.map((p)=>{return MP(_P,{className:"relative my-1 h-[30px]",elementId:`all-events-dialog-event-$${p.id}`,event:p},p.id)})})]})})};import{useDroppable as L4}from"@dnd-kit/core";import{jsx as G4}from"react/jsx-runtime";function b5({id:P,type:f,date:$,hour:Z,minute:X,resourceId:z,allDay:q,children:Q,className:J,style:p,"data-testid":G,disabled:U=!1}){let{onCellClick:B,disableDragAndDrop:A,disableCellClick:_,classesOverride:Y}=m((O)=>({onCellClick:O.onCellClick,disableDragAndDrop:O.disableDragAndDrop,disableCellClick:O.disableCellClick,classesOverride:O.classesOverride})),{isOver:N,setNodeRef:L}=L4({id:P,data:{type:f,date:$,hour:Z,minute:X,resourceId:z,allDay:q},disabled:A||U}),W=(O)=>{if(O.stopPropagation(),_||U)return;let I=$.hour(Z??0).minute(X??0),V=I.clone();if(Z!==void 0&&X!==void 0)V=V.hour(Z).minute(X+15);else if(Z!==void 0)V=V.hour(Z+1).minute(0);else V=V.hour(23).minute(59);B({start:I,end:V,resourceId:z,allDay:q})};return G4("div",{className:K("droppable-cell",J,N&&!A&&!U&&"bg-accent",_||U?"cursor-default":"cursor-pointer",U&&(Y?.disabledCell||Cf)),"data-testid":G,onClick:W,ref:L,style:p,children:Q})}import{jsx as nP,jsxs as tP,Fragment as w5}from"react/jsx-runtime";var B4=({day:P,hour:f,minute:$,className:Z="",resourceId:X,gridType:z="day",shouldRenderEvents:q=!0,allDay:Q=!1,"data-testid":J,showDayNumber:p=!1,children:G})=>{let U=A4.useRef(null),{dayMaxEvents:B=0,getEventsForDateRange:A,currentDate:_,t:Y,getEventsForResource:N,businessHours:L,currentLocale:W,eventSpacing:O}=m((R)=>({dayMaxEvents:R.dayMaxEvents,getEventsForDateRange:R.getEventsForDateRange,currentDate:R.currentDate,firstDayOfWeek:R.firstDayOfWeek,t:R.t,getEventsForResource:R.getEventsForResource,businessHours:R.businessHours,currentLocale:R.currentLocale,eventSpacing:R.eventSpacing})),I=W4(()=>{if(!q)return[];let R=A(P.startOf(z),P.endOf(z));if(Q)R=R.filter((d)=>d.allDay);if(X){let d=N(X)??[];return R.filter((q0)=>d.some((b)=>String(b.id)===String(q0.id)))}return R},[P,X,A,N,z,q,Q]),V=(R,d)=>{U.current?.setSelectedDayEvents({day:R,events:d}),U.current?.open()},w=P.month()===_.month(),T=I.length-B,C=T>0,h=$5({date:P,hour:z==="hour"?P.hour():void 0,businessHours:L}),E=P.format("HH"),i=P.format("mm"),l=z==="hour"?`day-cell-${P.format("YYYY-MM-DD")}-${E}-${i}`:`day-cell-${P.format("YYYY-MM-DD")}`;return tP(w5,{children:[nP(b5,{allDay:Q,className:K("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||l,date:P,disabled:!h||!w,hour:f,id:`day-cell-${P.toISOString()}${X?`-resource-${X}`:""}`,minute:$,resourceId:X,type:"day-cell",children:tP("div",{className:"flex flex-col h-full w-full","data-testid":"grid-cell-content",style:{gap:`${O}px`},children:[p&&nP(R5,{date:P,locale:W}),q&&tP(w5,{children:[I.slice(0,B).map((R,d)=>nP("div",{className:"w-full shrink-0","data-testid":R?.title,style:{height:`${G0}px`}},`empty-${d}-${R.id}`)),C&&tP("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(),V(P,I)},onKeyDown:(R)=>{if(R.key==="Enter"||R.key===" ")R.preventDefault(),R.stopPropagation(),V(P,I)},role:"button",tabIndex:0,children:["+",T," ",Y("more")]})]}),G]})}),nP(m5,{ref:U})]})},IP=N4(B4);import{jsx as H5}from"react/jsx-runtime";var E0=({resource:P,className:f,children:$,"data-testid":Z})=>{let{renderResource:X}=x();return H5("div",{className:K("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):$??H5("div",{className:"text-sm font-medium truncate",children:P.title})})};import{memo as O4}from"react";import{useMemo as k5}from"react";var T5=({days:P,events:f,dayMaxEvents:$,dayNumberHeight:Z=gf,gridType:X="day",eventSpacing:z=H0})=>{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,p=f.filter((Y)=>Y.end.diff(Y.start,X)>0),G=f.filter((Y)=>Y.end.diff(Y.start,X)===0),U=[...p].sort((Y,N)=>{let L=Y.start.diff(N.start);if(L!==0)return L;return N.end.diff(N.start)-Y.end.diff(Y.start)}),B=[...G].sort((Y,N)=>Y.start.diff(N.start)),A=[];for(let Y=0;Y<$;Y++){A[Y]=[];for(let N=0;N<J;N++)A[Y][N]={taken:!1,event:null}}let _=[];for(let Y of U){let N=F.max(Y.start.startOf(X),q),L=X==="hour"?Y.end.subtract(1,"minute"):Y.end,W=F.min(L.startOf(X),Q),O=Math.max(0,N.diff(q,X)),I=Math.min(J-1,W.diff(q,X)),V=Y.start.startOf(X).isBefore(q),w=Y.end.startOf(X).isAfter(Q),T=!1,C=-1;for(let h=0;h<$;h++){let E=!0;for(let i=O;i<=I;i++)if(A[h][i].taken){E=!1;break}if(E){C=h;break}}if(C!==-1){for(let E=O;E<=I;E++)A[C][E]={taken:!0,event:Y};let h=I-O+1;_.push({left:O/J*100,width:h/J*100,top:Z+z+C*(G0+z),height:G0,position:C,...Y,isTruncatedStart:V,isTruncatedEnd:w}),T=!0}if(!T)for(let h=O+1;h<=I;h++){let E=-1;for(let i=0;i<$;i++){let l=!0;for(let R=h;R<=I;R++)if(A[i][R].taken){l=!1;break}if(l){E=i;break}}if(E!==-1){for(let l=h;l<=I;l++)A[E][l]={taken:!0,event:Y};let i=I-h+1;_.push({left:h/J*100,width:i/J*100,top:Z+z+E*(G0+z),height:G0,position:E,...Y,isTruncatedStart:!0,isTruncatedEnd:w}),T=!0;break}}}for(let Y of B){let N=F.max(Y.start.startOf(X),q),L=Math.max(0,Math.min(J-1,N.diff(q,X))),W=!1,O=!1,I=-1;for(let V=0;V<$;V++)if(!A[V][L].taken){I=V;break}if(I!==-1)A[I][L]={taken:!0,event:Y},_.push({left:L/J*100,width:1/J*100,top:Z+z+I*(G0+z),height:G0,position:I,...Y,isTruncatedStart:!1,isTruncatedEnd:!1})}return _};var h5=({days:P,allDay:f,dayNumberHeight:$,resourceId:Z,gridType:X})=>{let{getEventsForDateRange:z,dayMaxEvents:q,eventSpacing:Q,getEventsForResource:J}=m((A)=>({getEventsForDateRange:A.getEventsForDateRange,dayMaxEvents:A.dayMaxEvents,eventSpacing:A.eventSpacing,getEventsForResource:A.getEventsForResource})),p=P.at(0).startOf("day"),G=P.at(-1).endOf("day"),U=k5(()=>{let A=z(p,G);if(Z){let _=J(Z);A=A.filter((Y)=>_.some((N)=>String(N.id)===String(Y.id)))}if(f)A=A.filter((_)=>!!_.allDay===f);return A},[z,J,p,G,Z,f]);return k5(()=>{return T5({days:P,events:U,dayMaxEvents:q,dayNumberHeight:$,eventSpacing:Q,gridType:X})},[P,q,$,Q,U,X])};import{jsx as Wf}from"react/jsx-runtime";var F4=({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 Wf("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":X,children:Q.map((J)=>{let p=`${J.id}-${J.position}-${q.toISOString()}-${$??"no-resource"}`;return Wf("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:Wf(_P,{className:"h-full w-full shadow",elementId:p,event:J})},`${p}-wrapper`)})})},g5=O4(F4);import{jsx as j0,jsxs as Bf}from"react/jsx-runtime";var I4=({id:P,resource:f,gridType:$="day",variant:Z="resource",dayNumberHeight:X,className:z,columns:q=[],allDay:Q,showDayNumber:J=!1,isLastRow:p=!1})=>{let{renderResource:G}=m((_)=>({renderResource:_.renderResource})),U=Z==="resource",B=q.some((_)=>_.days),A=M4((_)=>{return j0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:j0(g5,{allDay:Q,"data-testid":`horizontal-events-${P}`,dayNumberHeight:X,days:_,gridType:$,resourceId:f?.id})})},[Q,X,$,P,f?.id]);return Bf("div",{className:K("flex flex-1 relative",z),"data-testid":`horizontal-row-${P}`,children:[U&&j0(E0,{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):j0("div",{className:"wrap-break-word text-sm",children:f?.title})}),Bf("div",{className:"relative flex-1 flex",children:[j0("div",{className:"flex w-full",children:q.map((_,Y)=>{if(_.day)return j0(IP,{allDay:Q,className:K("flex-1 w-20",p&&"border-b-0",_.className),day:_.day,gridType:$,hour:$==="hour"?_.day.hour():void 0,resourceId:f?.id,showDayNumber:J},_.day.toISOString());let N=Y===q.length-1;return Bf("div",{className:"flex relative w-full",children:[j0("div",{className:"flex w-full",children:_.days?.map((L)=>j0(IP,{allDay:Q,className:K("flex-1 w-20",p&&"border-b-0",!N&&"border-r!",_.className),day:L,gridType:$,hour:$==="hour"?L.hour():void 0,resourceId:f?.id,showDayNumber:J},L.toISOString()))}),A(_.days)]},_.id)})}),!B&&A(q.map((_)=>_.day).filter(Boolean))]})]})},sP=V4(I4);import{memo as R4}from"react";import{jsx as m4}from"react/jsx-runtime";var S4=({className:P})=>{let{t:f}=m(($)=>({t:$.t}));return m4("div",{className:K("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")})},UP=R4(S4);import{jsx as C5,jsxs as H4}from"react/jsx-runtime";var w4=({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:K("h-full min-h-12 border-r last:border-r-0",f?.cell)}));return H4("div",{className:K("flex w-full",f?.row),"data-testid":"all-day-row",children:[Z&&C5(UP,{className:f?.spacer}),C5(sP,{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"})]})},v0=b4(w4);import{memo as E4}from"react";import{memo as C4}from"react";import T4 from"dayjs";import{memo as k4}from"react";import{jsx as D5,Fragment as g4}from"react/jsx-runtime";var h4=({rangeStart:P,rangeEnd:f,now:$,resource:Z})=>{let{renderCurrentTimeIndicator:X,view:z}=m((U)=>({renderCurrentTimeIndicator:U.renderCurrentTimeIndicator,view:U.view})),q=$??T4();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 D5(g4,{children:X({currentTime:q,rangeStart:P,rangeEnd:f,progress:G,resource:Z,view:z})});return D5("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}%`}})},y5=k4(h4);import{useMemo as j5}from"react";var E5=({days:P,gridType:f="hour",events:$})=>{let Z=$.filter((U)=>!U.allDay).toSorted((U,B)=>U.start.diff(B.start));if(Z.length===0)return[];let X=P.at(0)||F(),z=P.length,q=f==="day",Q=[],J=[],p=null;for(let U of Z){if(p&&U.start.isSameOrAfter(p)){if(J.length>0)Q.push(J);J=[]}J.push(U),p=p?F.max(p,U.end):U.end}if(J.length>0)Q.push(J);let G=[];for(let U of Q){if(U.length===1){let N=U[0],L=N.start.diff(X,f,!0),W=N.end.diff(X,f,!0);if(q){if(L=Math.floor(L),W=Math.ceil(W),W<=L)W=L+1}if(L<0)L=0;if(W>z)W=z;let O=Math.max(0,W-L);if(O===0)continue;let I=L/z*100,V=O/z*100;G.push({...N,left:0,width:100,top:I,height:V});continue}let B=[...U].sort((N,L)=>{let W=N.end.diff(N.start,"minute"),O=L.end.diff(L.start,"minute");if(W!==O)return O-W;return N.start.diff(L.start)}),A=B.length,_;if(A===2)_=25;else if(A===3)_=50;else if(A===4)_=60;else _=70;let Y=A>1?_/(A-1):0;for(let N=0;N<B.length;N++){let L=B[N],W=L.start.diff(X,f,!0),O=L.end.diff(X,f,!0);if(q){if(W=Math.floor(W),O=Math.ceil(O),O<=W)O=W+1}if(W<0)W=0;if(O>z)O=z;let I=Math.max(0,O-W);if(I===0)continue;let V=W/z*100,w=I/z*100,T,C,h;if(N===0)T=0,C=100,h=1;else T=Y*N,C=100-T,h=N+1;G.push({...L,left:T,width:C,top:V,height:w,zIndex:h})}}return G};var v5=({days:P,gridType:f,resourceId:$})=>{let{getEventsForDateRange:Z,getEventsForResource:X}=m((p)=>({getEventsForDateRange:p.getEventsForDateRange,getEventsForResource:p.getEventsForResource})),z=P.at(0).startOf("day"),q=P.at(-1).endOf("day"),Q=j5(()=>{let p=Z(z,q);if($){let G=X($);p=p.filter((U)=>G.some((B)=>String(B.id)===String(U.id)))}return p.filter((G)=>!G.allDay)},[z,q,Z,$,X]);return j5(()=>{return E5({days:P,events:Q,gridType:f})},[P,f,Q])};import{jsx as Of,jsxs as y4}from"react/jsx-runtime";var D4=({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 y4("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":X,children:[q&&Q&&Of(y5,{rangeEnd:Q,rangeStart:q,resource:Z}),z.map((J,p)=>{let G=`event-${J.id}-${p}-${P.at(0).toISOString()}-${$??"no-resource"}`,U=J.end.diff(J.start,"minute")<=15;return Of("div",{className:"absolute",style:{left:`${J.left}%`,width:`calc(${J.width}% - var(--spacing) * 2)`,top:`${J.top}%`,height:`${J.height}%`},children:Of(_P,{className:K("pointer-events-auto absolute",{"[&_p]:text-[10px] [&_p]:mt-0":U}),elementId:G,event:J})},`${G}-wrapper`)})]})},x5=C4(D4);import{jsx as RP,jsxs as v4}from"react/jsx-runtime";var j4=({id:P,days:f,resourceId:$,resource:Z,"data-testid":X,gridType:z,className:q,renderCell:Q,noEvents:J,cellSlots:p=[60],isLastColumn:G})=>{return RP("div",{className:K("flex flex-col flex-1 items-center justify-center min-w-50 bg-background relative",q),"data-testid":X||`vertical-col-${P}`,children:v4("div",{className:"w-full relative grid",style:{gridTemplateRows:`repeat(${f.length}, minmax(0, 1fr))`},children:[f.map((U)=>{let B=U.format("HH"),A=U.format("YYYY-MM-DD");if(Q){let _=P==="time-col"?`vertical-time-${B}`:`vertical-cell-${A}-${B}-00${$?`-${$}`:""}`;return RP("div",{className:"h-[60px] border-b border-r","data-testid":_,children:Q(U)},`${A}-${B}`)}return p.map((_)=>{let Y=_===60?void 0:_,N=Y===void 0?"00":String(Y).padStart(2,"0"),L=`vertical-cell-${A}-${B}-${N}${$?`-${$}`:""}`;return RP(IP,{className:K("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":L,day:Y?U.minute(Y):U,gridType:z,hour:U.hour(),minute:Y,resourceId:$,shouldRenderEvents:!1},`${A}-${B}-${N}-${$||"no-resource"}`)})}),!J&&RP("div",{className:"absolute inset-0 z-10 pointer-events-none",children:RP(x5,{"data-testid":`vertical-events-${P}`,days:f,gridType:z,resource:Z,resourceId:$})})]})})},i5=E4(j4);import{memo as x4}from"react";import{jsx as o5,jsxs as o4}from"react/jsx-runtime";var i4=({children:P,classes:f,allDayRow:$})=>{let{stickyViewHeader:Z,viewHeaderClassName:X}=m((z)=>({stickyViewHeader:z.stickyViewHeader,viewHeaderClassName:z.viewHeaderClassName}));return o4("div",{className:K(Z&&"sticky top-0 z-21 bg-background",X),children:[o5("div",{className:K("h-12 border-b w-fit",f?.header),"data-testid":"vertical-grid-header",children:P}),$&&o5("div",{className:K("flex w-full border-b min-h-12 h-full",f?.allDay),"data-testid":"vertical-grid-all-day",children:$})]})},l5=x4(i4);import{jsx as SP,jsxs as u5}from"react/jsx-runtime";var c5="h-[calc(100%-3rem)]",V0=({columns:P,children:f,gridType:$="day",variant:Z="resource",classes:X,allDayRow:z,cellSlots:q})=>{let Q=Z==="resource",J=!Q,p=f&&SP(l5,{allDayRow:z,classes:{header:X?.header,allDay:X?.allDay},children:f});return u5("div",{className:"h-full","data-testid":"vertical-grid-container",children:[J&&p,u5(F0,{className:K("h-full",J&&"overflow-auto",J&&c5),"data-testid":"vertical-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[Q&&p,SP("div",{className:K("flex flex-1 w-fit",Q&&c5,X?.body),"data-testid":"vertical-grid-body",children:P.map((G,U)=>SP(i5,{...G,cellSlots:q,gridType:$,isLastColumn:U===P.length-1},`${G.id}-${U}`))}),SP(m0,{className:"z-30"})," ",SP(m0,{className:"z-30",orientation:"horizontal"})," "]})]})};function K0({referenceDate:P,businessHours:f,hideNonBusinessHours:$,allDates:Z=[P]}){let X=hf({referenceDate:P});if(!$||!f)return X;let z=24,q=0,Q=!1;for(let J of Z){let p=pP(J,f);if(p)Q=!0,z=Math.min(z,p.startTime??9),q=Math.max(q,p.endTime??17)}if(!Q)if($){if(Array.isArray(f))for(let J of f)z=Math.min(z,J.startTime??9),q=Math.max(q,J.endTime??17),Q=!0;else if(f)z=f.startTime??9,q=f.endTime??17,Q=!0;if(!Q)z=9,q=17}else return X;return X.filter((J)=>{let p=J.hour();return p>=z&&p<q})}import{jsx as KP,jsxs as c4}from"react/jsx-runtime";var l4=()=>{let{currentDate:P,currentLocale:f,timeFormat:$,t:Z,businessHours:X,hideNonBusinessHours:z}=U0(),q=P.isSame(F(),"day"),Q=K0({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())})},p={id:`day-col-${P.format("YYYY-MM-DD")}`,day:P,days:Q,className:"w-[calc(100%-4rem)] flex-1",gridType:"hour"};return KP(V0,{allDayRow:KP(v0,{days:[P]}),cellSlots:[0,15,30,45],classes:{header:"w-full",body:"w-full",allDay:"w-full"},columns:[J,p],gridType:"hour",variant:"regular",children:KP("div",{className:"flex h-full flex-1 justify-center items-center","data-testid":"day-view-header",children:c4(D,{className:K("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")})]})})})},d5=l4;import{useMemo as a4}from"react";import{memo as u4}from"react";import{jsx as r4}from"react/jsx-runtime";var d4=({children:P,className:f})=>{let{stickyViewHeader:$,viewHeaderClassName:Z}=m((X)=>({stickyViewHeader:X.stickyViewHeader,viewHeaderClassName:X.viewHeaderClassName}));return r4("div",{className:K("flex h-12 w-fit",$&&"sticky top-0 z-21 bg-background",f,Z),"data-testid":"horizontal-grid-header",children:P})},r5=u4(d4);import{jsx as LP,jsxs as n5}from"react/jsx-runtime";var a5="h-[calc(100%-3rem)]",eP=({rows:P,children:f,classes:$,allDay:Z,gridType:X,variant:z="resource",dayNumberHeight:q})=>{let{currentDate:Q}=m((U)=>({currentDate:U.currentDate})),J=z==="resource",p=!J,G=f&&LP(r5,{className:$?.header,children:f});return n5("div",{className:"h-full","data-testid":"horizontal-grid-container",children:[p&&G,n5(F0,{className:K("h-full",p&&"overflow-auto",p&&a5),"data-testid":"horizontal-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[J&&G,LP("div",{className:K("flex flex-1 w-fit",J&&a5,$?.body),"data-testid":"horizontal-grid-body",children:LP("div",{className:"relative w-full flex flex-col flex-1",children:P.map((U,B)=>LP(sP,{allDay:U.allDay??Z,dayNumberHeight:q,gridType:X,isLastRow:B===P.length-1,variant:z,...U},U.id))},Q.format("YYYY-MM"))}),LP(m0,{className:"z-30"}),LP(m0,{className:"z-30",orientation:"horizontal"})]})]})};import{jsx as Ff}from"react/jsx-runtime";var t5=({className:P})=>{let{firstDayOfWeek:f,stickyViewHeader:$,viewHeaderClassName:Z,currentDate:X}=U0(),z=Z0(X,f);return Ff("div",{className:K("flex w-full",$&&"sticky top-0 z-20",Z,P),"data-testid":"month-header",children:z.map((q,Q)=>Ff(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:Ff("span",{className:"text-sm capitalize",children:q.format("ddd")})},q.toISOString()))})};import{jsx as s5}from"react/jsx-runtime";var e5=()=>{let{currentDate:P,firstDayOfWeek:f}=U0(),Z=a4(()=>CP(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 s5(eP,{classes:{body:"w-full",header:"w-full"},rows:Z,variant:"regular",children:s5(t5,{className:"h-12"})})};import{useMemo as Vf}from"react";import{jsx as x0,jsxs as Mf}from"react/jsx-runtime";var P2="w-[calc((100%-4rem)/7)] min-w-[calc((100%-4rem)/7)] flex-1",f2="w-10 sm:w-16 min-w-10 sm:min-w-16 max-w-10 sm:max-w-16",n4=()=>{let{t:P,currentDate:f,firstDayOfWeek:$,selectDate:Z,openEventForm:X,currentLocale:z,timeFormat:q,businessHours:Q,hideNonBusinessHours:J}=U0(),p=Vf(()=>Z0(f,$),[f,$]),G=Vf(()=>K0({referenceDate:f,businessHours:Q,hideNonBusinessHours:J,allDates:p}),[f,Q,J,p]),U={id:"time-col",days:G,day:void 0,className:`shrink-0 ${f2} sticky left-0 bg-background z-20`,gridType:"hour",noEvents:!0,renderCell:(A)=>x0("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(A.toDate())})},B=Vf(()=>{return p.map((A)=>({id:`day-col-${A.format("YYYY-MM-DD")}`,day:A,label:A.format("D"),className:P2,days:G.map((_)=>A.hour(_.hour()).minute(0).second(0).millisecond(0)),value:A}))},[p,G]);return x0(V0,{allDayRow:x0(v0,{classes:{cell:P2,spacer:f2},days:p}),classes:{header:"w-full h-18",body:"h-[calc(100%-4.5rem)] w-full"},columns:[U,...B],gridType:"hour",variant:"regular",children:Mf("div",{className:"flex h-full flex-1","data-testid":"week-view-header",children:[x0("div",{className:"w-10 sm:w-16 h-full shrink-0 items-center justify-center border-r p-2 flex",children:Mf("div",{className:"flex flex-col items-center justify-center",children:[x0("span",{className:"text-muted-foreground text-xs",children:P("week")}),x0("span",{className:"font-medium",children:f.week()})]})}),p.map((A,_)=>{let Y=A.isSame(F(),"day"),N=`week-day-header-${A.toISOString()}`;return Mf(D,{className:K("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",Y&&"bg-primary/10 font-bold"),"data-testid":`week-day-header-${A.format("dddd").toLowerCase()}`,delay:_*0.05,onClick:()=>{Z(A),X({start:A})},transitionKey:N,children:[x0("div",{className:"text-xs sm:text-sm",children:A.format("ddd")}),x0("div",{className:K("mx-auto mt-1 flex h-5 w-5 items-center justify-center rounded-full text-xs",Y&&"bg-primary text-primary-foreground"),children:Intl.DateTimeFormat(z,{day:"numeric"}).format(A.toDate())})]},N)})]})})},$2=n4;import{jsx as i0,jsxs as mP}from"react/jsx-runtime";var t4=["S","M","T","W","T","F","S"],s4=["bg-primary","bg-blue-500","bg-green-500"],e4=42,P3=(P)=>{if(P===0)return"";let f=P>1?"s":"";return`${P} event${f}`},f3=()=>{let{currentDate:P,selectDate:f,events:$,setView:Z,getEventsForDateRange:X,t:z}=U0(),q=P.year(),Q=()=>{return Array.from({length:12},(_,Y)=>{let N=F().year(q).month(Y).startOf("month"),L=$.filter((W)=>W.start.year()===q&&W.start.month()===Y);return{date:N,name:N.format("MMMM"),eventCount:L.length,monthKey:N.format("MM")}})},J=(_)=>{let Y=_.startOf("month").startOf("week");return Array.from({length:e4},(N,L)=>{let W=Y.add(L,"day"),O=W.startOf("day"),I=W.endOf("day"),V=X(O,I);return{date:W,dayKey:W.format("YYYY-MM-DD"),isInCurrentMonth:W.month()===_.month(),isToday:W.isSame(F(),"day"),isSelected:W.isSame(P,"day"),eventCount:V.length}})},p=(_,Y,N)=>{N?.stopPropagation(),f(_),Z(Y)},G=(_)=>{let Y=_===1?z("event"):z("events");return`${_} ${Y}`},U=(_)=>{let N=_.isInCurrentMonth?"":"text-muted-foreground opacity-50",L=_.isToday?"bg-primary text-primary-foreground rounded-full":"",W=_.isSelected&&!_.isToday?"bg-muted rounded-full font-bold":"",O=_.eventCount>0&&!_.isToday&&!_.isSelected?"font-medium":"";return K("relative flex aspect-square w-full cursor-pointer flex-col items-center justify-center hover:bg-accent rounded-sm transition-colors duration-200",N,L,W,O)},B=(_,Y)=>{return K("h-[3px] w-[3px] rounded-full",Y?"bg-primary-foreground":_)},A=Q();return mP(F0,{className:"h-full","data-testid":"year-view",children:[i0("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:A.map((_,Y)=>{let N=J(_.date),L=Y*0.05;return mP("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-${_.monthKey}`,children:[mP(D,{className:"mb-2 flex items-center justify-between",delay:L,transitionKey:`month-${Y}`,children:[i0("button",{className:"text-lg font-medium hover:underline cursor-pointer","data-testid":`year-month-title-${_.monthKey}`,onClick:()=>p(_.date,"month"),type:"button",children:_.name}),_.eventCount>0&&i0("span",{className:"bg-primary text-primary-foreground rounded-full px-2 py-1 text-xs","data-testid":`year-month-event-count-${_.monthKey}`,children:G(_.eventCount)})]},`month-${Y}`),mP("div",{className:"grid grid-cols-7 gap-[1px] text-[0.6rem]","data-testid":`year-mini-calendar-${_.monthKey}`,children:[t4.map((W,O)=>i0("div",{className:"text-muted-foreground h-3 text-center",children:W},`header-${O}`)),N.map((W)=>{let O=`year-day-${_.date.format("YYYY-MM")}-${W.dayKey}`,I=W.eventCount>0,V=Math.min(W.eventCount,3),w=s4.slice(0,V);return mP("button",{className:U(W),"data-testid":O,onClick:(T)=>p(W.date,"day",T),title:P3(W.eventCount),type:"button",children:[i0("span",{className:"text-center leading-none",children:W.date.date()}),I&&i0("div",{className:K("absolute bottom-0 flex w-full justify-center space-x-[1px]",W.isToday&&"bottom-[1px]"),children:w.map((T)=>i0("span",{className:B(T,W.isToday)},T))})]},W.dayKey)})]})]},_.monthKey)})}),i0(m0,{className:"z-30"})]})},z2=f3;import{useCallback as If,useMemo as $3}from"react";import{jsx as z3}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:p,onEventUpdate:G,onEventDelete:U,onDateChange:B,locale:A,timezone:_,disableCellClick:Y,disableEventClick:N,disableDragAndDrop:L,dayMaxEvents:W,eventSpacing:O=H0,stickyViewHeader:I=!0,viewHeaderClassName:V="",headerComponent:w,headerClassName:T,businessHours:C,renderEventForm:h,translations:E,translator:i,timeFormat:l="12-hour",classesOverride:R,renderCurrentTimeIndicator:d,hideNonBusinessHours:q0=!1})=>{let b=yP({events:f,firstDayOfWeek:$,initialView:Z,initialDate:X,businessHours:C,onEventAdd:p,onEventUpdate:G,onEventDelete:U,onDateChange:B,onViewChange:J,locale:A,timezone:_,translations:E,translator:i}),M0=If((r)=>{b.setSelectedEvent(r),b.setIsEventFormOpen(!0)},[b]),_0=If((r)=>{if(N)return;if(q)q(r);else M0(r)},[N,q,M0]),$0=If((r)=>{if(Y)return;if(Q)Q(r);else b.openEventForm(r)},[Q,Y,b]),N0=$3(()=>({currentDate:b.currentDate,view:b.view,events:b.events,rawEvents:b.rawEvents,currentLocale:b.currentLocale,isEventFormOpen:b.isEventFormOpen,selectedEvent:b.selectedEvent,selectedDate:b.selectedDate,firstDayOfWeek:b.firstDayOfWeek,setCurrentDate:b.setCurrentDate,selectDate:b.selectDate,setView:b.setView,nextPeriod:b.nextPeriod,prevPeriod:b.prevPeriod,today:b.today,addEvent:b.addEvent,updateEvent:b.updateEvent,updateRecurringEvent:b.updateRecurringEvent,deleteEvent:b.deleteEvent,deleteRecurringEvent:b.deleteRecurringEvent,openEventForm:b.openEventForm,closeEventForm:b.closeEventForm,getEventsForDateRange:b.getEventsForDateRange,findParentRecurringEvent:b.findParentRecurringEvent,renderEvent:z,onEventClick:_0,onCellClick:$0,locale:A,timezone:_,disableCellClick:Y,disableEventClick:N,disableDragAndDrop:L,dayMaxEvents:W,eventSpacing:O,stickyViewHeader:I,viewHeaderClassName:V,headerComponent:w,headerClassName:T,businessHours:C,renderEventForm:h,t:b.t,timeFormat:l,classesOverride:R,renderCurrentTimeIndicator:d,hideNonBusinessHours:q0}),[b,z,_0,$0,A,_,Y,N,L,W,O,I,V,w,T,C,h,l,R,d,q0]);return z3(JP.Provider,{value:N0,children:P})};import{jsx as A0,jsxs as X3}from"react/jsx-runtime";var Z3=()=>{let{view:P,dayMaxEvents:f}=U0();return X3("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-calendar",children:[A0(FP,{className:"p-1"}),A0(EP,{children:A0(D,{className:"w-full h-[calc(100%-3.5rem)]",direction:"horizontal",transitionKey:P,children:A0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:A0(e5,{dayMaxEvents:f},"month"),week:A0($2,{},"week"),day:A0(d5,{},"day"),year:A0(z2,{},"year")}[P]})})}),A0(cP,{})]})},J3=({events:P,firstDayOfWeek:f="sunday",initialView:$="month",initialDate:Z,dayMaxEvents:X=qP,eventSpacing:z=H0,stickyViewHeader:q=!0,viewHeaderClassName:Q="",timeFormat:J="12-hour",hideNonBusinessHours:p=!1,...G})=>{return A0(Z2,{dayMaxEvents:X,eventSpacing:z,events:TP(P),firstDayOfWeek:DP[f],hideNonBusinessHours:p,initialDate:e0(Z),initialView:$,stickyViewHeader:q,timeFormat:J,viewHeaderClassName:Q,...G,children:A0(Z3,{})})};import{jsx as q3}from"react/jsx-runtime";var GP=({days:P,gridType:f="day",children:$,classes:Z})=>{let{getVisibleResources:X}=x(),z=X(),q=P.map((J)=>{let p=Array.isArray(J);return{id:`col-${p?J[0]?.format("YYYY-MM-DD"):J.toISOString()}`,day:p?void 0:J,days:p?J:void 0,className:Z?.cell,gridType:f}}),Q=z.map((J)=>({id:J.id,title:J.title,resource:J,columns:q}));return q3(eP,{classes:Z,dayNumberHeight:0,gridType:f,rows:Q,children:$})};import{jsx as bP,jsxs as Q3}from"react/jsx-runtime";var J2=()=>{let{currentDate:P,t:f,currentLocale:$,timeFormat:Z,businessHours:X,hideNonBusinessHours:z}=x(),q=K0({referenceDate:P,businessHours:X,hideNonBusinessHours:z,allDates:[P]});return Q3(GP,{classes:{header:"min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:q,gridType:"hour",children:[bP("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:bP("div",{className:"text-sm",children:f("resources")})}),bP("div",{className:"flex-1 flex flex-col",children:bP("div",{className:"flex h-12",children:q.map((Q,J)=>{let p=Q.isSame(F(),"hour"),G=`resource-day-header-${Q.toISOString()}`;return bP(D,{className:K("min-w-20 flex-1 border-b border-r last:border-r-0 flex items-center justify-center text-xs shrink-0",p&&"bg-blue-50 text-blue-600 font-medium"),"data-testid":`resource-day-time-label-${Q.format("HH")}`,delay:J*0.05,transitionKey:`${G}-motion`,children:Intl.DateTimeFormat($,{hour:"numeric",hour12:Z==="12-hour"}).format(Q.toDate())},`${G}-animated`)})})})]})};import{jsx as AP,jsxs as X2}from"react/jsx-runtime";var q2=()=>{let{currentDate:P,getVisibleResources:f,currentLocale:$,timeFormat:Z,businessHours:X,hideNonBusinessHours:z}=x(),q=f(),Q=K0({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)=>AP("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())})},p=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 AP(V0,{allDayRow:X2("div",{className:"flex w-full",children:[AP(UP,{}),q.map((G)=>AP(v0,{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,...p],"data-testid":"resource-day",gridType:"hour",children:X2("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[AP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),q.map((G)=>AP(E0,{className:"min-w-50 flex-1",resource:G},`resource-cell-${G.id}`))]})})};import{jsx as Q2}from"react/jsx-runtime";var p2=()=>{let{orientation:P}=x();if(P==="vertical")return Q2(q2,{});return Q2(J2,{})};import{useMemo as p3}from"react";import{jsx as Pf,jsxs as Y2}from"react/jsx-runtime";var _2=()=>{let{currentDate:P,t:f}=x(),$=p3(()=>{return kf(P)},[P]);return Y2(GP,{days:$,children:[Pf("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:Pf("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:[Pf("div",{className:"text-xs font-medium",children:Z.format("D")}),Pf("div",{className:"text-xs text-muted-foreground",children:Z.format("ddd")})]},`${z}-animated`)})]})};import{jsx as wP,jsxs as U2}from"react/jsx-runtime";var K2=()=>{let{currentDate:P,getVisibleResources:f}=x(),$=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)=>U2("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")})]})},q=$.map((Q)=>({id:`month-col-resource-${Q.id}`,day:void 0,resourceId:Q.id,days:X,gridType:"day"}));return wP(V0,{classes:{header:"w-full",body:"w-full"},columns:[z,...q],"data-testid":"resource-month-vertical-grid",children:U2("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"}),$.map((Q)=>wP(E0,{className:"min-w-50 flex-1",resource:Q},`resource-cell-${Q.id}`))]})})};import{jsx as L2}from"react/jsx-runtime";var G2=()=>{let{orientation:P}=x();if(P==="vertical")return L2(K2,{});return L2(_2,{})};import{useMemo as A2}from"react";import{jsx as o0,jsxs as Rf}from"react/jsx-runtime";var N2=()=>{let{currentDate:P,firstDayOfWeek:f,t:$,currentLocale:Z,timeFormat:X,businessHours:z,hideNonBusinessHours:q}=x(),Q=A2(()=>Z0(P,f),[P,f]),J=A2(()=>{return Q.map((p)=>K0({referenceDate:p,businessHours:z,hideNonBusinessHours:q}))},[Q,z,q]);return Rf(GP,{classes:{header:"h-24 min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:J,gridType:"hour",children:[o0("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:o0("div",{className:"text-sm",children:$("resources")})}),Rf("div",{className:"flex-1 flex flex-col",children:[o0("div",{className:"flex h-12",children:Q.map((p,G)=>{let U=p.isSame(F(),"day"),B=`resource-week-header-${p.toISOString()}-day`;return o0(D,{className:K("shrink-0 border-r last:border-r-0 border-b flex-1 flex items-center text-center font-medium",U&&"bg-blue-50 text-blue-600"),"data-testid":"resource-week-day-header",delay:G*0.05,transitionKey:`${B}-motion`,children:Rf("div",{className:"sticky left-1/2",children:[o0("div",{className:"text-sm",children:p.format("ddd")}),o0("div",{className:"text-xs text-muted-foreground",children:p.format("M/D")})]})},`${B}-animated`)})}),o0("div",{className:"flex h-12 border-b",children:J.flat().map((p,G)=>{let U=p.isSame(F(),"hour"),B=`resource-week-header-${p.toISOString()}-hour`;return o0(D,{className:K("min-w-20 flex-1 border-r flex items-center justify-center text-xs shrink-0",U&&"bg-blue-50 text-blue-600 font-medium"),"data-testid":`resource-week-time-label-${p.format("HH")}`,delay:G*0.005,transitionKey:`${B}-motion`,children:Intl.DateTimeFormat(Z,{hour:"numeric",hour12:X==="12-hour"}).format(p.toDate())},`${B}-animated`)})})]})]})};import{useMemo as ff}from"react";import{jsx as Y0,jsxs as HP}from"react/jsx-runtime";var W2=()=>{let{currentDate:P,getVisibleResources:f,firstDayOfWeek:$,currentLocale:Z,timeFormat:X,t:z,businessHours:q,hideNonBusinessHours:Q}=x(),J=f(),p=ff(()=>Z0(P,$),[P,$]),G=ff(()=>K0({referenceDate:P,businessHours:q,hideNonBusinessHours:Q,allDates:p}),[P,q,Q,p]),U=ff(()=>({id:"time-col",days:G,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:(A)=>Y0("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(A.toDate())})}),[G,Z,X]),B=ff(()=>J.flatMap((A)=>p.map((_)=>({id:`day-col-${_.format("YYYY-MM-DD")}-resource-${A.id}`,resourceId:A.id,resource:A,day:_,days:G.map((Y)=>_.hour(Y.hour()).minute(0).second(0).millisecond(0)),gridType:"hour"}))),[J,p,G]);return Y0(V0,{allDayRow:HP("div",{className:"flex",children:[Y0(UP,{}),J.map((A)=>Y0(v0,{classes:{cell:"min-w-50"},days:p,resource:A,showSpacer:!1},`resource-week-allday-row-${A.id}`))]}),classes:{header:"h-24"},columns:[U,...B],"data-testid":"resource-week",gridType:"hour",children:HP("div",{className:"flex-1 flex flex-col",children:[HP("div",{className:"flex h-12",children:[Y0("div",{className:"shrink-0 w-16 border-r z-20 bg-background sticky left-0",children:Y0("span",{className:"px-2 h-full w-full flex justify-center items-end text-xs text-muted-foreground",children:z("week")})}),J.map((A,_)=>{let Y=`resource-week-header-${A.id}-day`;return Y0(D,{className:K("shrink-0 border-r last:border-r-0 border-b flex items-center text-center font-medium w-[calc(7*var(--spacing)*50)]"),delay:_*0.05,transitionKey:`${Y}-motion`,children:Y0(E0,{className:"h-full w-full flex-1",resource:A,children:Y0("div",{className:"sticky left-1/2 text-sm font-medium truncate",children:A.title})})},`${Y}-animated`)})]}),HP("div",{className:"flex h-12",children:[Y0("div",{className:"shrink-0 w-16 border-r border-b z-20 bg-background sticky left-0",children:Y0("span",{className:"px-2 h-full w-full flex justify-center items-start font-medium",children:P.week()})}),B.map((A,_)=>{let Y=A.day,N=`resource-week-header-${Y.toISOString()}-hour-${A.resourceId}`;return HP(D,{className:K("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-${Y.format("HH")}`,delay:_*0.05,transitionKey:`${N}-motion`,children:[Y0("div",{className:"text-sm",children:Y.format("ddd")}),Y0("div",{className:"text-xs text-muted-foreground",children:Y.format("M/D")})]},`${N}-animated`)})]})]})})};import{jsx as B2}from"react/jsx-runtime";var O2=()=>{let{orientation:P}=x();if(P==="vertical")return B2(W2,{});return B2(N2,{})};import{jsx as l0,jsxs as Y3}from"react/jsx-runtime";var F2=()=>{let{view:P}=x();return Y3("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-resource-calendar",children:[l0(FP,{className:"p-1"}),l0(EP,{children:l0(D,{className:"w-full h-[calc(100%-3.5rem)] @container/calendar-body",direction:"horizontal",transitionKey:P,children:l0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:l0(G2,{},"month"),week:l0(O2,{},"week"),day:l0(p2,{},"day")}[P]})})}),l0(cP,{})]})};import{jsx as V2}from"react/jsx-runtime";var _3=({events:P=[],resources:f=[],firstDayOfWeek:$="sunday",initialView:Z="month",initialDate:X,disableDragAndDrop:z=!1,dayMaxEvents:q=qP,timeFormat:Q="12-hour",eventSpacing:J=H0,...p})=>{return V2(vf,{dayMaxEvents:q,disableDragAndDrop:z,eventSpacing:J,events:TP(P),firstDayOfWeek:DP[$],initialDate:e0(X),initialView:Z,resources:f,timeFormat:Q,...p,children:V2(F2,{})})};export{r2 as useIlamyResourceCalendarContext,u2 as useIlamyCalendarContext,PP as isRecurringEvent,zf as generateRecurringEvents,Jf as defaultTranslations,ZX as RRule,_3 as IlamyResourceCalendar,J3 as IlamyCalendar};
1
+ import{RRule as XX}from"rrule";import{RRule as D2}from"rrule";import W0 from"dayjs";import R2 from"dayjs/plugin/isBetween.js";import S2 from"dayjs/plugin/isSameOrAfter.js";import m2 from"dayjs/plugin/isSameOrBefore.js";import b2 from"dayjs/plugin/localeData.js";import w2 from"dayjs/plugin/minMax.js";import H2 from"dayjs/plugin/timezone.js";import T2 from"dayjs/plugin/utc.js";import k2 from"dayjs/plugin/weekday.js";import h2 from"dayjs/plugin/weekOfYear.js";W0.extend(k2);W0.extend(h2);W0.extend(S2);W0.extend(m2);W0.extend(R2);W0.extend(w2);W0.extend(H2);W0.extend(T2);W0.extend(b2);var F=W0;import{clsx as g2}from"clsx";import{twMerge as C2}from"tailwind-merge";function L(...P){return C2(g2(P))}function e0(P){if(P===void 0)return;if(F.isDayjs(P))return P;let f=F(P);return f.isValid()?f:void 0}var mf=(P,f)=>{let $={...P};for(let Z of f)delete $[Z];return $};function TP(P){if(!P||!P.length)return[];return P.map((f)=>{return{...f,start:F.isDayjs(f.start)?f.start:F(f.start),end:F.isDayjs(f.end)?f.end:F(f.end)}})}var kP=(P)=>{return new Date(Date.UTC(P.year(),P.month(),P.date(),P.hour(),P.minute(),P.second(),P.millisecond()))},y2=(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)},Zf=({event:P,currentEvents:f,startDate:$,endDate:Z})=>{if(!P.rrule)return[];try{let X=kP(P.start),z=P.rrule.until?kP(F(P.rrule.until)):void 0,q={...P.rrule,dtstart:X,until:z},Q=new D2(q),J=f.filter((Y)=>Y.recurrenceId&&Y.uid===P.uid),p=P.end.diff(P.start),G=kP($.subtract(p,"millisecond")),K=kP(Z);return Q.between(G,K,!0).map((Y,_)=>{let N=y2(Y,P.start),U=J.find((H)=>e0(H.recurrenceId)?.isSame(N));if(U)return{...P,...U};let W=P.end.diff(P.start),O=N.add(W,"millisecond"),I=`${P.id}_${_}`,V=P.uid||`${P.id}@ilamy.calendar`;return{...P,id:I,start:N,end:O,uid:V,rrule:void 0}}).filter((Y)=>{if(P.exdates&&P.exdates.length>0){let U=Y.start.toISOString();if(P.exdates.includes(U))return!1}return Y.start.isSameOrBefore(Z)&&Y.end.isSameOrAfter($)})}catch(X){throw Error(`Invalid RRULE options: ${JSON.stringify(P.rrule)}. Error: ${X instanceof Error?X.message:"Unknown error"}`)}},bf=({targetEvent:P,updates:f,currentEvents:$,scope:Z})=>{let X=[...$],z=X.findIndex((Q)=>{return(Q.uid||`${Q.id}@ilamy.calendar`)===P.uid&&Q.rrule&&!Q.recurrenceId});if(z===-1)throw Error("Base recurring event not found");let q=X[z];switch(Z){case"this":{let Q=P.start.toISOString(),p=[...q.exdates||[],Q],G={...q,exdates:p};X[z]=G;let K=`${P.id}_modified_${Date.now()}`,B={...mf(P,["width","height","top","left","right"]),...f,id:K,recurrenceId:Q,uid:q.uid||`${q.id}@ilamy.calendar`,rrule:void 0};X.push(B);break}case"following":{let J=P.start.subtract(1,"day").endOf("day").toDate(),p={...q,rrule:{...q.rrule,until:J}};X[z]=p;let G=q.end.diff(q.start),K=f.start||P.start,B=f.end||K.add(G),A=`${q.id}_following`,Y=`${A}@ilamy.calendar`,_={...q,...f,rrule:{...q.rrule,...f.rrule,dtstart:K.toDate()},id:A,uid:Y,start:K,end:B,recurrenceId:void 0};X.push(_);break}case"all":{let Q={...q,...f};X[z]=Q;break}default:throw Error(`Invalid scope: ${Z}. Must be 'this', 'following', or 'all'`)}return X},wf=({targetEvent:P,currentEvents:f,scope:$})=>{let Z=[...f],X=Z.findIndex((q)=>{return(q.uid||`${q.id}@ilamy.calendar`)===P.uid&&q.rrule&&!q.recurrenceId});if(X===-1)throw Error("Base recurring event not found");let z=Z[X];switch($){case"this":{let q=P.start.toISOString(),J=[...z.exdates||[],q],p={...z,exdates:J};Z[X]=p;break}case"following":{let Q=P.start.subtract(1,"day").endOf("day").toDate(),J={...z,rrule:{...z.rrule,until:Q}};Z[X]=J;break}case"all":return Z.filter((Q)=>Q.uid!==P.uid);default:throw Error(`Invalid scope: ${$}. Must be 'this', 'following', or 'all'`)}return Z};import{AnimatePresence as E2,motion as j2}from"motion/react";import{jsx as Hf}from"react/jsx-runtime";var x2={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,...p})=>Hf(E2,{mode:"wait",children:Hf(j2.div,{animate:"visible",className:L("inline-block w-full",Z),custom:{delay:$,direction:X},"data-testid":Q,exit:"exit",initial:"hidden",layout:z,layoutId:q,ref:J,variants:x2,...p,children:P},f)});D.displayName="AnimatedSection";import{DndContext as z1,MouseSensor as Z1,pointerWithin as J1,TouchSensor as X1,useSensor as df,useSensors as q1}from"@dnd-kit/core";import{useRef as rf,useState as Q1}from"react";import{Slot as v2}from"@radix-ui/react-slot";import{cva as i2}from"class-variance-authority";import{jsx as o2}from"react/jsx-runtime";var hP=i2("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 o2(Z?v2:"button",{className:L(hP({variant:f,size:$,className:P})),"data-slot":"button",...X})}import*as z0 from"@radix-ui/react-dialog";import{XIcon as l2}from"lucide-react";import{jsx as B0,jsxs as Jf}from"react/jsx-runtime";function fP({...P}){return B0(z0.Root,{"data-slot":"dialog",...P})}function c2({...P}){return B0(z0.Portal,{"data-slot":"dialog-portal",...P})}function u2({className:P,...f}){return B0(z0.Overlay,{className:L("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 Jf(c2,{"data-slot":"dialog-portal",children:[B0(u2,{}),Jf(z0.Content,{className:L("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,Jf(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:[B0(l2,{}),B0("span",{className:"sr-only",children:"Close"})]})]})]})}function zP({className:P,...f}){return B0("div",{className:L("flex flex-col gap-2 text-center sm:text-left",P),"data-slot":"dialog-header",...f})}function gP({className:P,...f}){return B0("div",{className:L("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",P),"data-slot":"dialog-footer",...f})}function ZP({className:P,...f}){return B0(z0.Title,{className:L("text-lg leading-none font-semibold",P),"data-slot":"dialog-title",...f})}function CP({className:P,...f}){return B0(z0.Description,{className:L("text-muted-foreground text-sm",P),"data-slot":"dialog-description",...f})}import{useContext as of}from"react";import{createContext as d2,useContext as Tf}from"react";var JP=d2(void 0),K0=()=>{let P=Tf(JP);if(P===void 0)throw Error("useCalendarContext must be used within a CalendarProvider");return P},r2=()=>{let P=Tf(JP);if(P===void 0)throw Error("useIlamyCalendarContext must be used within a CalendarProvider");return{currentDate:P.currentDate,view:P.view,events:P.events,isEventFormOpen:P.isEventFormOpen,selectedEvent:P.selectedEvent,selectedDate:P.selectedDate,firstDayOfWeek:P.firstDayOfWeek,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,businessHours:P.businessHours}};import{createContext as a2,useContext as kf}from"react";var XP=a2(void 0),v=()=>{let P=kf(XP);if(P===void 0)throw Error("useResourceCalendarContext must be used within a ResourceCalendarProvider");return P},n2=()=>{let P=kf(XP);if(P===void 0)throw Error("useIlamyResourceCalendarContext must be used within a ResourceCalendarProvider");return{currentDate:P.currentDate,view:P.view,events:P.events,resources:P.resources,isEventFormOpen:P.isEventFormOpen,selectedEvent:P.selectedEvent,selectedDate:P.selectedDate,firstDayOfWeek:P.firstDayOfWeek,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{useCallback as Q0,useMemo as t2,useState as jf}from"react";import{useCallback as e,useEffect as qf,useMemo as yf,useState as a0}from"react";var Xf={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 DP(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 hf(P){let f=P.daysInMonth();return Array.from({length:f},($,Z)=>P.startOf("month").add(Z,"day"))}function gf({referenceDate:P=F(),length:f=24}={}){return Array.from({length:f},($,Z)=>P.hour(Z).minute(0).second(0).millisecond(0))}var H0=1,Cf=24,G0=24,qP=4,Df="bg-secondary text-muted-foreground pointer-events-none",yP={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6};var Ef={day:"day",week:"week",month:"month",year:"year"},EP=(P)=>{let{events:f=[],firstDayOfWeek:$=0,initialView:Z="month",initialDate:X=F(),businessHours:z,onEventAdd:q,onEventUpdate:Q,onEventDelete:J,onDateChange:p,onViewChange:G,locale:K,timezone:B,translations:A,translator:Y}=P,[_,N]=a0(X),[U,W]=a0(Z),[O,I]=a0(f),[V,w]=a0(!1),[H,C]=a0(null),[h,E]=a0(null),[i,l]=a0(K||"en"),R=yf(()=>{if(Y)return Y;if(A)return(M)=>A[M]||M;return(M)=>Xf[M]||M},[A,Y]),d=e((M,k)=>{let c=[];for(let u of O)if(u.rrule)c.push(...Zf({event:u,currentEvents:O,startDate:M,endDate:k}));else{let r0=u.start.isSameOrAfter(M)&&u.start.isSameOrBefore(k),zf=u.end.isSameOrAfter(M)&&u.end.isSameOrBefore(k),T=u.start.isBefore(M)&&u.end.isAfter(k);if(r0||zf||T)c.push(u)}return c},[O]),q0=e(()=>{if(U==="day")return{start:_.startOf("day"),end:_.endOf("day")};if(U==="year")return{start:_.startOf("year"),end:_.endOf("year")};if(U==="week"){let k=Z0(_,$);return{start:k[0].startOf("day"),end:k[6].endOf("day")}}let M=DP(_,$);return{start:M[0][0].startOf("day"),end:M[5][6].endOf("day")}},[_,U,$]),b=yf(()=>{let{start:M,end:k}=q0();return d(M,k)},[d,q0]);qf(()=>{if(f)I(f)},[f]),qf(()=>{if(K)l(K),F.locale(K),N((M)=>M.locale(K))},[K]),qf(()=>{if(B)F.tz.setDefault(B)},[B]);let M0=e((M)=>{N(M),p?.(M)},[p]),_0=e((M)=>{N((k)=>{let c=M===1?k.add(1,Ef[U]):k.subtract(1,Ef[U]);return p?.(c),c})},[U,p]),$0=e(()=>_0(1),[_0]),N0=e(()=>_0(-1),[_0]),r=e(()=>{let M=F();N(M),p?.(M)},[p]),o=e((M)=>{I((k)=>[...k,M]),q?.(M)},[q]),t0=e((M,k)=>{I((c)=>c.map((u)=>{if(u.id!==M)return u;let r0={...u,...k};return Q?.(r0),r0}))},[Q]),s0=e((M,k,c)=>{Q?.({...M,...k}),I(bf({targetEvent:M,updates:k,currentEvents:O,scope:c.scope}))},[O,Q]),c0=e((M,k)=>{J?.(M),I(wf({targetEvent:M,currentEvents:O,scope:k.scope}))},[O,J]),u0=e((M)=>{I((k)=>{let c=k.find((u)=>u.id===M);if(c)J?.(c);return k.filter((u)=>u.id!==M)})},[J]),d0=e((M)=>{if(M?.start)E(M.start);let k=M?.start??_;C({title:R("newEvent"),start:k,end:M?.end??k.add(1,"hour"),resourceId:M?.resourceId,description:"",allDay:M?.allDay??!1}),w(!0)},[_,R]),S=e(()=>{E(null),C(null),w(!1)},[]),L0=e((M)=>{W(M),G?.(M)},[G]),I0=e((M)=>{let k=M.uid;return O.find((c)=>(c.uid||`${c.id}@ilamy.calendar`)===k&&c.rrule)||null},[O]);return{currentDate:_,view:U,events:b,rawEvents:O,isEventFormOpen:V,selectedEvent:H,selectedDate:h,firstDayOfWeek:$,dayMaxEvents:qP,currentLocale:i,businessHours:z,setCurrentDate:N,selectDate:M0,setView:L0,nextPeriod:$0,prevPeriod:N0,today:r,addEvent:o,updateEvent:t0,updateRecurringEvent:s0,deleteEvent:u0,deleteRecurringEvent:c0,openEventForm:d0,closeEventForm:S,setSelectedEvent:C,setIsEventFormOpen:w,setSelectedDate:E,getEventsForDateRange:d,findParentRecurringEvent:I0,t:R}};import{jsx as s2}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:p,onEventAdd:G,onEventUpdate:K,onEventDelete:B,onDateChange:A,locale:Y,timezone:_,disableCellClick:N,disableEventClick:U,disableDragAndDrop:W,dayMaxEvents:O,eventSpacing:I,stickyViewHeader:V=!0,viewHeaderClassName:w="",headerComponent:H,headerClassName:C,translations:h,translator:E,renderResource:i,renderEventForm:l,businessHours:R,timeFormat:d="12-hour",classesOverride:q0,orientation:b="horizontal",renderCurrentTimeIndicator:M0,hideNonBusinessHours:_0=!1})=>{let[$0]=jf($),[N0,r]=jf(new Set($.map((T)=>T.id))),o=EP({events:f,firstDayOfWeek:Z,initialView:X,initialDate:z,businessHours:R,onEventAdd:G,onEventUpdate:K,onEventDelete:B,onDateChange:A,onViewChange:p,locale:Y,timezone:_,translations:h,translator:E}),t0=Q0((T)=>{r((s)=>{let w0=new Set(s);if(w0.has(T))w0.delete(T);else w0.add(T);return w0})},[]),s0=Q0((T)=>{r((s)=>new Set(s).add(T))},[]),c0=Q0((T)=>{r((s)=>{let w0=new Set(s);return w0.delete(T),w0})},[]),u0=Q0(()=>{r(new Set($0.map((T)=>T.id)))},[$0]),d0=Q0(()=>{r(new Set)},[]),S=Q0((T)=>{return o.events.filter((s)=>{if(s.resourceIds)return s.resourceIds.includes(T);return s.resourceId===T})},[o.events]),L0=Q0((T)=>{return o.events.filter((s)=>{return xf(s).some((I2)=>T.includes(I2))})},[o.events]),I0=Q0((T)=>{return $0.find((s)=>s.id===T)},[$0]),M=Q0(()=>{return $0.filter((T)=>N0.has(T.id))},[$0,N0]),k=Q0((T)=>{return Boolean(T.resourceIds&&T.resourceIds.length>1)},[]),c=Q0((T)=>{o.setSelectedEvent(T),o.setIsEventFormOpen(!0)},[o]),u=Q0((T)=>{if(U)return;if(Q)Q(T);else c(T)},[U,Q,c]),r0=Q0((T)=>{if(N)return;if(J)J(T);else{let s={title:o.t("newEvent"),start:T.start,end:T.end,description:"",allDay:!1};if(T.resourceId!==void 0)s.resourceId=T.resourceId;o.setSelectedEvent(s),o.setSelectedDate(T.start),o.setIsEventFormOpen(!0)}},[J,N,o]),zf=t2(()=>({...o,view:o.view,setView:o.setView,events:o.events,rawEvents:o.rawEvents,resources:$0,visibleResources:N0,toggleResourceVisibility:t0,showResource:s0,hideResource:c0,showAllResources:u0,hideAllResources:d0,getEventsForResource:S,getEventsForResources:L0,getResourceById:I0,getVisibleResources:M,isEventCrossResource:k,getEventResourceIds:xf,onEventClick:u,onCellClick:r0,headerComponent:H,headerClassName:C,renderEvent:q,renderResource:i,renderEventForm:l,locale:Y,timezone:_,disableCellClick:N,disableEventClick:U,disableDragAndDrop:W,dayMaxEvents:O,eventSpacing:I,stickyViewHeader:V,viewHeaderClassName:w,businessHours:R,timeFormat:d,classesOverride:q0,orientation:b,renderCurrentTimeIndicator:M0,hideNonBusinessHours:_0}),[o,$0,N0,t0,s0,c0,u0,d0,S,L0,I0,M,k,u,r0,q,i,l,Y,_,N,U,W,O,I,V,w,H,C,R,d,q0,b,M0,_0]);return s2(XP.Provider,{value:zf,children:P})};function m(P){let f=of(XP),$=of(JP);if(f)return P(f);if($)return P($);throw Error("useSmartCalendarContext must be used within a CalendarProvider or ResourceCalendarProvider")}import{jsx as p0,jsxs as n0}from"react/jsx-runtime";function NP({isOpen:P,onClose:f,onConfirm:$,operationType:Z,eventTitle:X}){let{t:z}=m((J)=>({t:J.t})),q=(J)=>{$(J),f()},Q=Z==="edit";return p0(fP,{onOpenChange:f,open:P,children:n0($P,{className:"max-w-md",children:[n0(zP,{children:[p0(ZP,{children:Q?z("editRecurringEvent"):z("deleteRecurringEvent")}),n0(CP,{children:['"',X,'"'," ",Q?z("editRecurringEventQuestion"):z("deleteRecurringEventQuestion")]})]}),n0("div",{className:"space-y-3",children:[p0(g,{className:"w-full justify-start h-auto p-4",onClick:()=>q("this"),variant:"outline",children:n0("div",{className:"text-left",children:[p0("div",{className:"font-medium",children:z("thisEvent")}),p0("div",{className:"text-sm text-muted-foreground",children:Q?z("onlyChangeThis"):z("onlyDeleteThis")})]})}),p0(g,{className:"w-full justify-start h-auto p-4",onClick:()=>q("following"),variant:"outline",children:n0("div",{className:"text-left",children:[p0("div",{className:"font-medium",children:z("thisAndFollowingEvents")}),p0("div",{className:"text-sm text-muted-foreground",children:Q?z("changeThisAndFuture"):z("deleteThisAndFuture")})]})}),p0(g,{className:"w-full justify-start h-auto p-4",onClick:()=>q("all"),variant:"outline",children:n0("div",{className:"text-left",children:[p0("div",{className:"font-medium",children:z("allEvents")}),p0("div",{className:"text-sm text-muted-foreground",children:Q?z("changeEntireSeries"):z("deleteEntireSeries")})]})})]}),p0(gP,{children:p0(g,{onClick:f,variant:"outline",children:z("cancel")})})]})})}var lf=(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:B=0,minute:A=0}=Z.data.current;Q=F(K).hour(B).minute(A)}else{let{date:K}=Z.data.current;Q=F(K)}let J=f.end.diff(f.start,"second"),p=Q.add(J,"second");if(p.isSame(p.startOf("day")))p=p.subtract(1,"day").endOf("day");let G={start:Q,end:p,resourceId:z,allDay:X?!1:q??f.allDay};return{activeEvent:f,updates:G}};import{DragOverlay as e2}from"@dnd-kit/core";import{snapCenterToCursor as P1}from"@dnd-kit/modifiers";import{useImperativeHandle as f1,useState as $1}from"react";import{jsx as cf}from"react/jsx-runtime";var uf=({ref:P})=>{let[f,$]=$1(null);return f1(P,()=>({setActiveEvent:$})),cf(e2,{modifiers:[P1],children:f&&cf("div",{className:L("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 p1}from"react/jsx-runtime";function jP({children:P}){let f=rf(null),$=rf(null),{updateEvent:Z,updateRecurringEvent:X,disableDragAndDrop:z}=m((U)=>({updateEvent:U.updateEvent,updateRecurringEvent:U.updateRecurringEvent,disableDragAndDrop:U.disableDragAndDrop})),[q,Q]=Q1({isOpen:!1,event:null,updates:null}),J=df(Z1,{activationConstraint:{distance:2}}),p=df(X1,{activationConstraint:{delay:100,tolerance:5}}),G=q1(J,p),K=(U,W)=>{if(!U||!U.id)return;if(!W||Object.keys(W).length===0)return;if(PP(U))Q({isOpen:!0,event:U,updates:W});else Z(U.id,W)},B=(U)=>{if(!q.event||!q.updates){Q({isOpen:!1,event:null,updates:null});return}try{X(q.event,q.updates,{scope:U,eventDate:q.event.start})}catch{}finally{Q({isOpen:!1,event:null,updates:null})}},A=()=>{Q({isOpen:!1,event:null,updates:null})},Y=(U)=>{let{active:W}=U;if(W.data.current?.type==="calendar-event")$.current?.setActiveEvent(W.data.current.event),f.current=W.data.current.event},_=(U)=>{let W=lf(U,f.current);if(W){let{activeEvent:O,updates:I}=W;K(O,I)}f.current=null,$.current?.setActiveEvent(null)},N=(U)=>{f.current=null};if(z)return P;return nf(p1,{children:[nf(z1,{collisionDetection:J1,onDragCancel:N,onDragEnd:_,onDragStart:Y,sensors:G,children:[P,af(uf,{ref:$})]}),af(NP,{eventTitle:q.event?.title||"",isOpen:q.isOpen,onClose:A,onConfirm:B,operationType:"edit"})]})}import{useEffect as E1,useState as y0}from"react";import*as xP from"@radix-ui/react-checkbox";import{CheckIcon as Y1}from"lucide-react";import{jsx as Qf}from"react/jsx-runtime";function T0({className:P,...f}){return Qf(xP.Root,{className:L("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:Qf(xP.Indicator,{className:"flex items-center justify-center text-current transition-none","data-slot":"checkbox-indicator",children:Qf(Y1,{className:"size-3.5"})})})}import{PopoverClose as A1}from"@radix-ui/react-popover";import{Calendar as N1}from"lucide-react";import{useEffect as W1,useRef as B1,useState as O1}from"react";import{ChevronDownIcon as _1,ChevronLeftIcon as K1,ChevronRightIcon as U1}from"lucide-react";import*as vP from"react";import{DayPicker as L1,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(L1,{captionLayout:Z,className:L("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:L("w-fit",J.root),months:L("flex gap-4 flex-col md:flex-row relative",J.months),month:L("flex flex-col w-full gap-4",J.month),nav:L("flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",J.nav),button_previous:L(hP({variant:X}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",J.button_previous),button_next:L(hP({variant:X}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",J.button_next),month_caption:L("flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)",J.month_caption),dropdowns:L("w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5",J.dropdowns),dropdown_root:L("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:L("absolute bg-popover inset-0 opacity-0",J.dropdown),caption_label:L("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:L("flex",J.weekdays),weekday:L("text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none",J.weekday),week:L("flex w-full mt-2",J.week),week_number_header:L("select-none w-(--cell-size)",J.week_number_header),week_number:L("text-[0.8rem] select-none text-muted-foreground",J.week_number),day:L("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:L("rounded-l-md bg-accent",J.range_start),range_middle:L("rounded-none",J.range_middle),range_end:L("rounded-r-md bg-accent",J.range_end),today:L("bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",J.today),outside:L("text-muted-foreground aria-selected:text-muted-foreground",J.outside),disabled:L("text-muted-foreground opacity-50",J.disabled),hidden:L("invisible",J.hidden),...f},components:{Root:({className:p,rootRef:G,...K})=>{return k0("div",{className:L(p),"data-slot":"calendar",ref:G,...K})},Chevron:({className:p,orientation:G,...K})=>{if(G==="left")return k0(K1,{className:L("size-4",p),...K});if(G==="right")return k0(U1,{className:L("size-4",p),...K});return k0(_1,{className:L("size-4",p),...K})},DayButton:G1,WeekNumber:({children:p,...G})=>{return k0("td",{...G,children:k0("div",{className:"flex size-(--cell-size) items-center justify-center text-center",children:p})})},...q},formatters:{formatMonthDropdown:(p)=>p.toLocaleString("default",{month:"short"}),...z},showOutsideDays:$,...Q})}function G1({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:L("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 iP}from"react/jsx-runtime";function h0({...P}){return iP(R0.Root,{"data-slot":"popover",...P})}function g0({...P}){return iP(R0.Trigger,{"data-slot":"popover-trigger",...P})}function C0({className:P,align:f="center",sideOffset:$=4,...Z}){return iP(R0.Portal,{children:iP(R0.Content,{align:f,className:L("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 QP,jsxs as pf}from"react/jsx-runtime";function WP({date:P,closeOnSelect:f,onChange:$,label:Z="Pick a date",className:X,disabled:z}){let q=B1(null),[Q,J]=O1(P);W1(()=>{J(P)},[P]);let p=(G)=>{if(J(G),f)q.current?.click();$?.(G)};return QP("div",{className:X,children:pf(h0,{children:[QP(g0,{asChild:!0,children:pf(g,{className:L("data-[empty=true]:text-muted-foreground w-full justify-start text-left font-normal"),"data-empty":!P,variant:"outline",children:[QP(N1,{}),Q?F(Q).format("MMM D, YYYY"):QP("span",{children:Z})]})}),pf(C0,{align:"start",className:"w-auto p-0",children:[QP(A1,{ref:q}),QP(sf,{captionLayout:"dropdown",defaultMonth:Q,disabled:z,mode:"single",onSelect:p,selected:Q})]})]})})}import{jsx as F1}from"react/jsx-runtime";function S0({className:P,type:f,...$}){return F1("input",{className:L("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 V1}from"react/jsx-runtime";function a({className:P,...f}){return V1(ef.Root,{className:L("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 O0 from"@radix-ui/react-scroll-area";import{jsx as BP,jsxs as M1}from"react/jsx-runtime";function F0({className:P,children:f,viewPortProps:$,...Z}){return M1(O0.Root,{className:L("relative",P),"data-slot":"scroll-area",...Z,children:[BP(O0.Viewport,{...$,className:L("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}),BP(m0,{}),BP(O0.Corner,{})]})}function m0({className:P,orientation:f="vertical",...$}){return BP(O0.ScrollAreaScrollbar,{className:L("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:BP(O0.ScrollAreaThumb,{className:"bg-border relative flex-1 rounded-full","data-slot":"scroll-area-thumb"})})}import{Clock as R1}from"lucide-react";import{useEffect as S1,useRef as f5,useState as Yf}from"react";import{useMemo as I1}from"react";function P5({timeFormat:P="12-hour",minTime:f="00:00",maxTime:$="23:45"}){return{timeOptions:I1(()=>{let z=[],[q,Q]=f.split(":").map(Number),[J,p]=$.split(":").map(Number),G=q*60+Q,K=J*60+p;for(let B=G;B<=K;B+=15){let A=Math.floor(B/60),Y=B%60,_=`${A.toString().padStart(2,"0")}:${Y.toString().padStart(2,"0")}`;z.push(_)}return z},[f,$]),formatTime:(z)=>{let[q,Q]=z.split(":").map(Number),J=q>=12?"PM":"AM",p=q===0?12:q>12?q-12:q;if(P==="24-hour")return`${q.toString().padStart(2,"0")}:${Q.toString().padStart(2,"0")}`;return`${p}:${Q.toString().padStart(2,"0")} ${J}`}}}import{jsx as D0,jsxs as _f}from"react/jsx-runtime";var m1=(P)=>{P.stopPropagation()};function Kf({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[p,G]=Yf(!1),[K,B]=Yf(""),A=f5(null),Y=f5(null),[_,N]=Yf(0),{timeOptions:U,formatTime:W}=P5({timeFormat:X,minTime:$,maxTime:Z}),O=U.filter((w)=>{return W(w).toLowerCase().includes(K.toLowerCase())}),I=(w)=>{f(w),G(!1),B("")};S1(()=>{if(p){if(Y.current)N(Y.current.offsetWidth);setTimeout(()=>{A.current?.focus()},0)}},[p]);let V=P?W(P):z;return _f(h0,{onOpenChange:G,open:p,children:[D0(g0,{asChild:!0,children:_f(g,{"aria-controls":"time-picker-listbox","aria-expanded":p,className:L("w-full justify-start",q),"data-testid":`time-picker-${J}`,disabled:Q,ref:Y,role:"combobox",variant:"outline",children:[D0(R1,{className:"mr-2 h-4 w-4"}),V]})}),_f(C0,{align:"start",className:"p-0",style:{width:_},children:[D0("div",{className:"p-2 border-b",children:D0(S0,{className:"h-8",onChange:(w)=>B(w.target.value),placeholder:"Search time...",ref:A,value:K})}),D0(F0,{className:"h-[200px]",onWheel:m1,children:D0("div",{className:"p-1",children:O.length===0?D0("div",{className:"py-6 text-center text-sm text-muted-foreground",children:"N/A"}):O.map((w)=>{let H=W(w);return D0("button",{className:L("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",w===P&&"bg-accent text-accent-foreground"),onClick:()=>I(w),type:"button",children:H},w)})})})]})]})}var $5={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6},pP=(P,f)=>{if(!f)return;if(!Array.isArray(f))return f;let $=P.day();return f.find((Z)=>{if(!Z.daysOfWeek)return!1;return Z.daysOfWeek.some((X)=>$5[X]===$)})},OP=(P,f)=>{if(!f)return!0;let $=pP(P,f);if(!$)return!1;if($.daysOfWeek)return $.daysOfWeek.some((Z)=>$5[Z]===P.day());return!0},z5=({date:P,hour:f,minute:$=0,businessHours:Z})=>{if(!OP(P,Z))return!1;if(!Z)return!0;if(f===void 0)return!0;let X=pP(P,Z);if(!X)return!1;let z=X.startTime??9,q=X.endTime??17,Q=f*60+$,J=z*60,p=q*60;if(Q<J||Q>=p)return!1;return!0};var Uf=(P,f,$)=>{let[Z,X]=f.split(":").map(Number),z=F(P).hour(Z).minute(X);return $?z.hour(0).minute(0):z},Z5=(P,f,$)=>{let[Z,X]=f.split(":").map(Number),z=F(P).hour(Z).minute(X);return $?z.hour(23).minute(59):z},Lf=(P,f)=>{if(!f)return{min:"00:00",max:"23:59"};let $=F(P);if(!OP($,f))return{min:"00:00",max:"23:59"};let Z=pP($,f);if(!Z)return{min:"00:00",max:"23:59"};return{min:`${(Z.startTime??9).toString().padStart(2,"0")}:00`,max:`${((Z.endTime??17)-1).toString().padStart(2,"0")}:45`}};import{useEffect as k1,useMemo as h1,useState as G5}from"react";import{RRule as X0}from"rrule";import{jsx as oP}from"react/jsx-runtime";function J5({className:P,...f}){return oP("div",{className:L("text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm",P),"data-slot":"card",...f})}function X5({className:P,...f}){return oP("div",{className:L("@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 q5({className:P,...f}){return oP("div",{className:L("leading-none font-semibold",P),"data-slot":"card-title",...f})}function Q5({className:P,...f}){return oP("div",{className:L("p-4 pt-0",P),"data-slot":"card-content",...f})}import*as y from"@radix-ui/react-select";import{CheckIcon as b1,ChevronDownIcon as p5,ChevronUpIcon as w1}from"lucide-react";import{jsx as P0,jsxs as Gf}from"react/jsx-runtime";function Y5({...P}){return P0(y.Root,{"data-slot":"select",...P})}function _5({...P}){return P0(y.Value,{"data-slot":"select-value",...P})}function K5({className:P,size:f="default",children:$,...Z}){return Gf(y.Trigger,{className:L("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:[$,P0(y.Icon,{asChild:!0,children:P0(p5,{className:"size-4 opacity-50"})})]})}function U5({className:P,children:f,position:$="popper",align:Z="center",...X}){return P0(y.Portal,{children:Gf(y.Content,{align:Z,className:L("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:[P0(H1,{}),P0(y.Viewport,{className:L("p-1",$==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:f}),P0(T1,{})]})})}function L5({className:P,children:f,...$}){return Gf(y.Item,{className:L("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:[P0("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:P0(y.ItemIndicator,{children:P0(b1,{className:"size-4"})})}),P0(y.ItemText,{children:f})]})}function H1({className:P,...f}){return P0(y.ScrollUpButton,{className:L("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-up-button",...f,children:P0(w1,{className:"size-4"})})}function T1({className:P,...f}){return P0(y.ScrollDownButton,{className:L("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-down-button",...f,children:P0(p5,{className:"size-4"})})}import{jsx as j,jsxs as J0}from"react/jsx-runtime";var Af={DAILY:X0.DAILY,WEEKLY:X0.WEEKLY,MONTHLY:X0.MONTHLY,YEARLY:X0.YEARLY},g1=Object.fromEntries(Object.entries(Af).map(([P,f])=>[f,P])),A5=[X0.SU,X0.MO,X0.TU,X0.WE,X0.TH,X0.FR,X0.SA],C1=["sun","mon","tue","wed","thu","fri","sat"],N5=(P)=>Math.max(1,Number.parseInt(P,10)||1),D1=(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:$}=m((_)=>({t:_.t})),[Z,X]=G5(!!P),[z,q]=G5(()=>P||null),Q=h1(()=>C1.map((_,N)=>({value:A5[N],label:$(_)})),[$]);k1(()=>{if(X(!!P),P)q(P)},[P]);let J=(_)=>{if(!z)return;let N={...z,..._};q(N),f(Z?N:null)},p=(_)=>{if(X(_),!_){f(null);return}if(z){f(z);return}let N={freq:X0.DAILY,interval:1};q(N),f(N)},G=(_)=>{let N=z?.byweekday||[],U=A5[_],W=N.includes(U)?N.filter((O)=>O!==U):[...N,U];J({byweekday:W.length?W:void 0})},K=(_)=>{let N={count:void 0,until:void 0};if(_==="count")N.count=z?.count||1;if(_==="until")N.until=z?.until||F().add(1,"month").endOf("day").toDate();J(N)},B=z?.until?"until":z?.count?"count":"never",A=g1[z?.freq??X0.DAILY]||"DAILY",Y=Array.isArray(z?.byweekday)?z.byweekday:z?.byweekday?[z.byweekday]:[];return J0(J5,{"data-testid":"recurrence-editor",children:[J0(X5,{className:"pb-3",children:[J0("div",{className:"flex items-center space-x-2",children:[j(T0,{checked:Z,"data-testid":"toggle-recurrence",id:"recurring",onCheckedChange:p}),j(q5,{className:"text-sm",children:$("repeat")})]}),Z&&P&&j("p",{className:"text-xs text-muted-foreground",children:D1(P,$)})]}),Z&&j(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:[j(a,{className:"text-xs",htmlFor:"frequency",children:$("repeats")}),J0(Y5,{onValueChange:(_)=>J({freq:Af[_]}),value:A,children:[j(K5,{className:"h-8","data-testid":"frequency-select",id:"frequency",children:j(_5,{})}),j(U5,{children:Object.keys(Af).map((_)=>j(L5,{value:_,children:$(_.toLowerCase())},_))})]})]}),J0("div",{children:[j(a,{className:"text-xs",htmlFor:"interval",children:$("every")}),j(S0,{className:"h-8",id:"interval",min:"1",onChange:(_)=>J({interval:N5(_.target.value)}),type:"number",value:z?.interval||1})]})]}),z?.freq===X0.WEEKLY&&J0("div",{children:[j(a,{className:"text-xs",children:$("repeatOn")}),j("div",{className:"flex flex-wrap gap-1 mt-1",children:Q.map((_,N)=>J0("div",{className:"flex items-center space-x-1",children:[j(T0,{checked:Y.includes(_.value),id:`day-${N}`,onCheckedChange:()=>G(N)}),j(a,{className:"text-xs cursor-pointer",htmlFor:`day-${N}`,children:_.label})]},_.label))})]}),J0("div",{children:[j(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:[j(T0,{checked:B==="never",id:"never",onCheckedChange:()=>K("never")}),j(a,{className:"text-xs",htmlFor:"never",children:$("never")})]}),J0("div",{className:"flex items-center space-x-2",children:[j(T0,{checked:B==="count",id:"after",onCheckedChange:()=>K("count")}),j(a,{className:"text-xs",htmlFor:"after",children:$("after")}),B==="count"&&j(S0,{className:"h-6 w-16 text-xs","data-testid":"count-input",min:"1",onChange:(_)=>J({count:N5(_.target.value)}),type:"number",value:z?.count||1}),j("span",{className:"text-xs",children:$("occurrences")})]}),J0("div",{className:"flex items-center space-x-2",children:[j(T0,{checked:B==="until",id:"on",onCheckedChange:()=>K("until")}),j(a,{className:"text-xs",htmlFor:"on",children:$("on")}),B==="until"&&j(WP,{className:"h-6",date:z?.until,onChange:(_)=>J({until:_?F(_).endOf("day").toDate():void 0})})]})]})]})]})})]})};import{useCallback as lP,useState as y1}from"react";function B5(P){let{updateRecurringEvent:f,deleteRecurringEvent:$}=m((p)=>({updateRecurringEvent:p.updateRecurringEvent,deleteRecurringEvent:p.deleteRecurringEvent})),[Z,X]=y1({isOpen:!1,operationType:"edit",event:null}),z=lP((p,G)=>{X({isOpen:!0,operationType:"edit",event:p,updates:G,onConfirm:(K)=>{f(p,G,{scope:K,eventDate:p.start})}})},[f]),q=lP((p)=>{X({isOpen:!0,operationType:"delete",event:p,onConfirm:(G)=>{$(p,{scope:G,eventDate:p.start})}})},[$]),Q=lP(()=>{X({isOpen:!1,operationType:"edit",event:null})},[]),J=lP((p)=>{if(Z.onConfirm)Z.onConfirm(p);Q(),P?.()},[Z,Q,P]);return{dialogState:Z,openEditDialog:z,openDeleteDialog:q,closeDialog:Q,handleConfirm:J}}import{jsx as x,jsxs as f0,Fragment as j1}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:p}=B5(f),{findParentRecurringEvent:G,t:K,businessHours:B,timeFormat:A}=m((S)=>({findParentRecurringEvent:S.findParentRecurringEvent,t:S.t,businessHours:S.businessHours,timeFormat:S.timeFormat})),Y=P?.start??F(),_=P?.end??F().add(1,"hour"),N=P?G(P):null,[U,W]=y0(Y.toDate()),[O,I]=y0(_.toDate()),[V,w]=y0(P?.allDay||!1),[H,C]=y0(P?.color||O5[0].value),[h,E]=y0(Y.format("HH:mm")),[i,l]=y0(_.format("HH:mm")),[R,d]=y0({title:P?.title||"",description:P?.description||"",location:P?.location||""}),[q0,b]=y0(()=>{return P?.rrule||N?.rrule||null}),M0=(S)=>{if(W(S),S&&F(S).isAfter(F(O)))I(S)},_0=(S)=>{if(I(S),S&&F(S).isBefore(F(U)))W(S)},$0=(S)=>{if(E(S),F(U).isSame(F(O),"day")&&S>i)l(S)},N0=(S)=>{if(l(S),F(U).isSame(F(O),"day")&&S<h)E(S)},r=(S)=>{let{name:L0,value:I0}=S.target;d((M)=>({...M,[L0]:I0}))};E1(()=>{if(V)l("23:59")},[V]);let o=(S)=>{S.preventDefault();let L0=Uf(U,h,V),I0=Z5(O,i,V),M={id:P?.id||F().format("YYYYMMDDHHmmss"),title:R.title,start:L0,end:I0,resourceId:P?.resourceId,description:R.description,location:R.location,allDay:V,color:H,rrule:q0||void 0};if(P?.id&&PP(P)){q(P,{title:R.title,start:L0,end:I0,description:R.description,location:R.location,allDay:V,color:H,rrule:q0||void 0});return}if(P?.id)$?.(M);else X?.(M);f()},t0=()=>{if(P?.id){if(PP(P)){Q(P);return}Z?.(P),f()}},s0=(S)=>{if(!S){b(null);return}let L0=Uf(U,h,V);b({...S,dtstart:L0.toDate()})},c0=B?(S)=>!OP(F(S),B):void 0,u0=Lf(U,B),d0=Lf(O,B);return f0(j1,{children:[f0("form",{className:"flex flex-col flex-1 min-h-0",onSubmit:o,children:[x(F0,{className:"flex-1 min-h-0",children:f0("div",{className:"grid gap-3 sm:gap-4 p-1",children:[f0("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:R.title})]}),f0("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:R.description})]}),f0("div",{className:"flex items-center space-x-2",children:[x(T0,{checked:V,id:"allDay",onCheckedChange:(S)=>w(S===!0)}),x(a,{className:"text-xs sm:text-sm",htmlFor:"allDay",children:K("allDay")})]}),f0("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[f0("div",{children:[x(a,{className:"text-xs sm:text-sm",children:K("startDate")}),x(WP,{className:"mt-1",closeOnSelect:!0,date:U,disabled:c0,onChange:M0})]}),f0("div",{children:[x(a,{className:"text-xs sm:text-sm",children:K("endDate")}),x(WP,{className:"mt-1",closeOnSelect:!0,date:O,disabled:c0,onChange:_0})]})]}),!V&&f0("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[f0("div",{children:[x(a,{className:"text-xs sm:text-sm",children:K("startTime")}),x(Kf,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:u0.max,minTime:u0.min,name:"start-time",onChange:$0,timeFormat:A,value:h})]}),f0("div",{children:[x(a,{className:"text-xs sm:text-sm",children:K("endTime")}),x(Kf,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:d0.max,minTime:d0.min,name:"end-time",onChange:N0,timeFormat:A,value:i})]})]}),f0("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((S)=>x(g,{"aria-label":S.label,className:L(`${S.value} h-6 w-6 rounded-full sm:h-8 sm:w-8`,H===S.value&&"ring-2 ring-black ring-offset-1 sm:ring-offset-2"),onClick:()=>C(S.value),type:"button",variant:"ghost"},S.value))})]}),f0("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:R.location})]}),x(W5,{onChange:s0,value:q0})]})}),f0(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")}),f0("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(NP,{eventTitle:z.event?.title||"",isOpen:z.isOpen,onClose:J,onConfirm:p,operationType:z.operationType})]})};import{jsx as cP,jsxs as V5}from"react/jsx-runtime";var uP=()=>{let{t:P,selectedEvent:f,isEventFormOpen:$,closeEventForm:Z,addEvent:X,updateEvent:z,deleteEvent:q,renderEventForm:Q}=m((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 cP(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:[cP(ZP,{className:"text-base sm:text-lg",children:f?.id?P("editEvent"):P("createEvent")}),cP(CP,{className:"text-xs sm:text-sm",children:f?.id?P("editEventDetails"):P("addNewEvent")})]}),cP(F5,{...G})]})})};import{Calendar as $4,Download as z4,Menu as Z4,Plus as J4}from"lucide-react";import{useState as X4}from"react";import{RRule as x1}from"rrule";var Nf=`\r
2
+ `,v1=["BEGIN:VTIMEZONE","TZID:UTC","BEGIN:STANDARD","DTSTART:19700101T000000","TZNAME:UTC","TZOFFSETFROM:+0000","TZOFFSETTO:+0000","END:STANDARD","END:VTIMEZONE"].join(Nf),rP=(P)=>{return P.replaceAll("\\","\\\\").replaceAll(";","\\;").replaceAll(",","\\,").replaceAll(`
3
+ `,"\\n").replaceAll("\r","")},dP=(P,f=!1)=>{return f?P.format("YYYYMMDD"):P.utc().format("YYYYMMDD[T]HHmmss[Z]")},M5=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},i1=(P)=>{try{return new x1(P).toString().split(`
4
+ `).find(($)=>$.startsWith("RRULE:"))||""}catch{return""}},o1=(P)=>{let f=F().utc().format("YYYYMMDD[T]HHmmss[Z]"),$=P.allDay?";VALUE=DATE":"",Z=P.rrule?i1(P.rrule):"",X=P.exdates?.length?P.exdates.map((Q)=>dP(F(Q),P.allDay)).join(","):null,z=P.recurrenceId?dP(F(P.recurrenceId),P.allDay):null;return["BEGIN:VEVENT",`UID:${M5(P)}`,`DTSTART${$}:${dP(P.start,P.allDay)}`,`DTEND${$}:${dP(P.end,P.allDay)}`,`SUMMARY:${rP(P.title)}`,P.description&&`DESCRIPTION:${rP(P.description)}`,P.location&&`LOCATION:${rP(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(Nf)},l1=(P)=>{let f=new Set;return P.filter(($)=>{let Z=M5($),X=$.rrule&&!$.recurrenceId,z=$.recurrenceId&&!$.rrule;if(X)return f.add(Z),!0;if(z)return!0;return!$.rrule&&!$.recurrenceId&&!f.has(Z)})},c1=(P,f="ilamy Calendar")=>{let $=rP(f),Z=l1(P).map(o1);return["BEGIN:VCALENDAR","VERSION:2.0","PRODID:-//ilamy//ilamy Calendar//EN","CALSCALE:GREGORIAN","METHOD:PUBLISH",`X-WR-CALNAME:${$}`,`X-WR-CALDESC:Exported from ${$}`,v1,...Z,"END:VCALENDAR"].join(Nf)},I5=(P,f="calendar.ics",$="ilamy Calendar")=>{let Z=new Blob([c1(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 u1}from"lucide-react";import{useMemo as d1,useState as r1}from"react";import{jsx as t,jsxs as nP,Fragment as aP}from"react/jsx-runtime";var a1=["january","february","march","april","may","june","july","august","september","october","november","december"],n1=()=>{let{currentDate:P,view:f,setCurrentDate:$,t:Z,firstDayOfWeek:X}=m((U)=>({currentDate:U.currentDate,view:U.view,setCurrentDate:U.setCurrentDate,t:U.t,firstDayOfWeek:U.firstDayOfWeek})),[z,q]=r1(null),Q=d1(()=>a1.map((U)=>Z(U)),[Z]),J=P.year(),p=Array.from({length:11},(U,W)=>J-5+W),G=Z0(P,X),K=(U)=>{$(U),q(null)},B=()=>t(aP,{children:Q.map((U,W)=>t(g,{className:L("justify-start font-normal",P.month()===W&&"bg-primary/10"),onClick:()=>K(P.month(W)),variant:"ghost",children:U},U))}),A=()=>t(aP,{children:p.map((U)=>t(g,{className:L("justify-start font-normal",P.year()===U&&"bg-primary/10"),onClick:()=>K(P.year(U)),variant:"ghost",children:U},U))}),Y=()=>t(aP,{children:Array.from({length:7},(U,W)=>{let O=P.subtract(3,"week").add(W,"week"),I=Z0(O,X),V=I[0],w=I[6],H=O.isSame(P,"week"),C=V.month()!==w.month();return t(g,{className:L("justify-start font-normal",H&&"bg-primary/10"),onClick:()=>K(V),variant:"ghost",children:nP("div",{className:"flex w-full items-center justify-between",children:[t("span",{children:`${V.format("MMM D")} - ${w.format("D")}`}),C&&t("span",{className:"ml-0.5 text-xs opacity-70",children:`${V.format("MMM")}-${w.format("MMM")}`})]})},V.format("YYYY-MM-DD"))})}),_=()=>{let U=P.startOf("month"),W=P.daysInMonth();return t(aP,{children:Array.from({length:W},(O,I)=>{let V=U.date(I+1),w=V.isSame(P,"day"),H=V.isSame(F(),"day");return t(g,{className:L("justify-start font-normal",w&&"bg-primary/10"),onClick:()=>K(V),variant:"ghost",children:nP("div",{className:"flex w-full items-center justify-between",children:[t("span",{children:V.format("dddd, MMM D")}),H&&t("span",{className:"bg-primary text-primary-foreground rounded-sm px-1! text-xs",children:Z("today")})]})},V.format("YYYY-MM-DD"))})})};return[{id:"month",hidden:f==="year",title:P.format("MMMM"),render:B},{id:"year",hidden:!1,title:P.format("YYYY"),render:A},{id:"week",hidden:f!=="week",title:`${G[0].format("MMM D")} - ${G[6].format("MMM D")}`,render:Y},{id:"day",hidden:f!=="day",title:P.format("dddd, D"),render:_}].filter((U)=>!U.hidden).map((U)=>nP(h0,{onOpenChange:(W)=>q(W?U.id:null),open:z===U.id,children:[t(g0,{asChild:!0,children:nP(g,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",variant:"ghost",children:[t(D,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",transitionKey:`${U.id}-${P.format("YYYY-MM-DD")}`,children:U.title}),t(u1,{className:"h-4 w-4"})]})}),t(C0,{className:"w-40 p-0",children:t("div",{className:"flex max-h-60 flex-col overflow-auto",children:U.render()})})]},U.id))},R5=n1;import{ChevronLeft as t1,ChevronRight as s1}from"lucide-react";import{jsx as YP,jsxs as f4}from"react/jsx-runtime";var e1=["day","week","month","year"],P4=({currentView:P,onChange:f,variant:$="default",size:Z="sm",className:X,onToday:z,onNext:q,onPrevious:Q})=>{let{t:J,resources:p}=m((Y)=>({t:Y.t,resources:Y.resources})),G=$==="grid",K=p&&p.length>0,B=(Y)=>{return L(G?"w-full":"",P===Y&&"bg-primary/80")},A=(Y)=>{return P===Y?"default":"outline"};return f4("div",{className:L(G?"grid grid-cols-2 gap-2":"flex gap-1",X),children:[YP(g,{onClick:Q,size:Z,variant:"outline",children:YP(t1,{className:"h-4 w-4"})}),YP(g,{onClick:q,size:Z,variant:"outline",children:YP(s1,{className:"h-4 w-4"})}),e1.map((Y)=>{if(K&&Y==="year")return null;return YP(g,{className:B(Y),onClick:()=>f(Y),size:Z,variant:A(Y),children:J(Y)},Y)}),YP(g,{onClick:z,size:Z,variant:"outline",children:J("today")})]})},Wf=P4;import{jsx as n,jsxs as b0}from"react/jsx-runtime";var q4=({className:P=""})=>{let{view:f,setView:$,nextPeriod:Z,prevPeriod:X,today:z,openEventForm:q,headerComponent:Q,headerClassName:J,rawEvents:p,t:G}=m((U)=>({view:U.view,setView:U.setView,nextPeriod:U.nextPeriod,prevPeriod:U.prevPeriod,today:U.today,openEventForm:U.openEventForm,headerComponent:U.headerComponent,headerClassName:U.headerClassName,rawEvents:U.rawEvents,t:U.t})),[K,B]=X4(!1),A=()=>B(!1),Y=()=>{let U=`ilamy-calendar-${new Date().toISOString().split("T")[0]}.ics`;I5(p,U,"ilamy Calendar"),A()},_=()=>b0(g,{className:"flex items-center gap-1",onClick:()=>q(),size:"sm",variant:"default",children:[n(J4,{className:"h-4 w-4"}),n("span",{className:"hidden @4xl:inline",children:G("new")})]}),N=({fullWidth:U=!1})=>b0(g,{className:L("flex items-center gap-1",U&&"w-full gap-2"),onClick:Y,size:"sm",variant:"outline",children:[n(z4,{className:"h-4 w-4"}),U?`${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:L("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($4,{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(Wf,{className:"justify-end",currentView:f,onChange:$,onNext:Z,onPrevious:X,onToday:z,variant:"default"}),n(_,{}),n(N,{})]}),b0("div",{className:"flex items-center justify-end gap-1 @md/base-header:hidden",children:[n(_,{}),b0(h0,{onOpenChange:B,open:K,children:[n(g0,{asChild:!0,children:n(g,{size:"sm",variant:"outline",children:n(Z4,{className:"h-4 w-4"})})}),n(C0,{align:"end",className:"w-[240px] p-2",children:b0("div",{className:"space-y-2",children:[n(Wf,{currentView:f,onChange:(U)=>{$(U),A()},onNext:()=>{Z(),A()},onPrevious:()=>{X(),A()},onToday:()=>{z(),A()},variant:"grid"}),n("div",{className:"pt-2 border-t",children:n(N,{fullWidth:!0})})]})})]})]})]})]})})},FP=q4;import{memo as H4}from"react";import{memo as I4,useCallback as R4}from"react";import W4,{memo as B4,useMemo as O4}from"react";import{jsx as Q4}from"react/jsx-runtime";var S5=({date:P,locale:f="en",className:$})=>{let Z=P.isSame(F(),"day");return Q4("div",{className:L("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 L4,useState as m5}from"react";import{useDraggable as p4}from"@dnd-kit/core";import{memo as Y4}from"react";import{jsx as VP,jsxs as U4}from"react/jsx-runtime";var _4=(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 K4({elementId:P,event:f,className:$,style:Z,disableDrag:X=!1}){let{onEventClick:z,renderEvent:q,disableEventClick:Q,disableDragAndDrop:J}=m((Y)=>({onEventClick:Y.onEventClick,renderEvent:Y.renderEvent,disableEventClick:Y.disableEventClick,disableDragAndDrop:Y.disableDragAndDrop})),{attributes:p,listeners:G,setNodeRef:K,isDragging:B}=p4({id:P,data:{event:f,type:"calendar-event"},disabled:X||J}),A=()=>{let Y=f,_=Y.isTruncatedStart,N=Y.isTruncatedEnd;return U4("div",{className:L(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",_4(_,N)),style:{backgroundColor:f.backgroundColor,color:f.color},children:[_&&VP("div",{className:"absolute left-0 top-0 bottom-0 w-0.5 bg-foreground/25"}),VP("p",{className:L("text-[10px] font-semibold sm:text-xs mt-0.5",_&&"pl-1",N&&"pr-1"),children:f.title}),N&&VP("div",{className:"absolute right-0 top-0 bottom-0 w-0.5 bg-foreground/25"})]})};return VP(D,{className:L("truncate h-full w-full",X||J?Q?"cursor-default":"cursor-pointer":"cursor-grab",B&&!(X||J)&&"cursor-grabbing shadow-lg",$),layout:!0,layoutId:P,onClick:(Y)=>{Y.stopPropagation(),z(f)},ref:K,style:Z,transitionKey:P,...p,...G,children:q?q(f):VP(A,{})})}var _P=Y4(K4,(P,f)=>{return P.elementId===f.elementId&&P.disableDrag===f.disableDrag&&P.className===f.className&&P.event===f.event});import{jsx as MP,jsxs as G4}from"react/jsx-runtime";var b5=({ref:P})=>{let[f,$]=m5(!1),[Z,X]=m5(null),{currentDate:z,firstDayOfWeek:q}=m((p)=>({currentDate:p.currentDate,firstDayOfWeek:p.firstDayOfWeek}));L4(P,()=>({open:()=>$(!0),close:()=>$(!1),setSelectedDayEvents:(p)=>X(p)}));let J=z.startOf("month").clone();while(J.day()!==q)J=J.subtract(1,"day");return MP(fP,{onOpenChange:$,open:f,children:G4($P,{className:"max-h-[80vh] max-w-md overflow-y-auto",children:[MP(zP,{children:MP(ZP,{children:Z?.day.format("MMMM D, YYYY")})}),MP("div",{className:"mt-4 space-y-3",children:Z?.events.map((p)=>{return MP(_P,{className:"relative my-1 h-[30px]",elementId:`all-events-dialog-event-$${p.id}`,event:p},p.id)})})]})})};import{useDroppable as A4}from"@dnd-kit/core";import{jsx as N4}from"react/jsx-runtime";function w5({id:P,type:f,date:$,hour:Z,minute:X,resourceId:z,allDay:q,children:Q,className:J,style:p,"data-testid":G,disabled:K=!1}){let{onCellClick:B,disableDragAndDrop:A,disableCellClick:Y,classesOverride:_}=m((O)=>({onCellClick:O.onCellClick,disableDragAndDrop:O.disableDragAndDrop,disableCellClick:O.disableCellClick,classesOverride:O.classesOverride})),{isOver:N,setNodeRef:U}=A4({id:P,data:{type:f,date:$,hour:Z,minute:X,resourceId:z,allDay:q},disabled:A||K}),W=(O)=>{if(O.stopPropagation(),Y||K)return;let I=$.hour(Z??0).minute(X??0),V=I.clone();if(Z!==void 0&&X!==void 0)V=V.hour(Z).minute(X+15);else if(Z!==void 0)V=V.hour(Z+1).minute(0);else V=V.hour(23).minute(59);B({start:I,end:V,resourceId:z,allDay:q})};return N4("div",{className:L("droppable-cell",J,N&&!A&&!K&&"bg-accent",Y||K?"cursor-default":"cursor-pointer",K&&(_?.disabledCell||Df)),"data-testid":G,onClick:W,ref:U,style:p,children:Q})}import{jsx as tP,jsxs as sP,Fragment as H5}from"react/jsx-runtime";var F4=({day:P,hour:f,minute:$,className:Z="",resourceId:X,gridType:z="day",shouldRenderEvents:q=!0,allDay:Q=!1,"data-testid":J,showDayNumber:p=!1,children:G})=>{let K=W4.useRef(null),{dayMaxEvents:B=0,getEventsForDateRange:A,currentDate:Y,t:_,getEventsForResource:N,businessHours:U,currentLocale:W,eventSpacing:O}=m((R)=>({dayMaxEvents:R.dayMaxEvents,getEventsForDateRange:R.getEventsForDateRange,currentDate:R.currentDate,firstDayOfWeek:R.firstDayOfWeek,t:R.t,getEventsForResource:R.getEventsForResource,businessHours:R.businessHours,currentLocale:R.currentLocale,eventSpacing:R.eventSpacing})),I=O4(()=>{if(!q)return[];let R=A(P.startOf(z),P.endOf(z));if(Q)R=R.filter((d)=>d.allDay);if(X){let d=N(X)??[];return R.filter((q0)=>d.some((b)=>String(b.id)===String(q0.id)))}return R},[P,X,A,N,z,q,Q]),V=(R,d)=>{K.current?.setSelectedDayEvents({day:R,events:d}),K.current?.open()},w=P.month()===Y.month(),H=I.length-B,C=H>0,h=z5({date:P,hour:z==="hour"?P.hour():void 0,businessHours:U}),E=P.format("HH"),i=P.format("mm"),l=z==="hour"?`day-cell-${P.format("YYYY-MM-DD")}-${E}-${i}`:`day-cell-${P.format("YYYY-MM-DD")}`;return sP(H5,{children:[tP(w5,{allDay:Q,className:L("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||l,date:P,disabled:!h||!w,hour:f,id:`day-cell-${P.toISOString()}${X?`-resource-${X}`:""}`,minute:$,resourceId:X,type:"day-cell",children:sP("div",{className:"flex flex-col h-full w-full","data-testid":"grid-cell-content",style:{gap:`${O}px`},children:[p&&tP(S5,{date:P,locale:W}),q&&sP(H5,{children:[I.slice(0,B).map((R,d)=>tP("div",{className:"w-full shrink-0","data-testid":R?.title,style:{height:`${G0}px`}},`empty-${d}-${R.id}`)),C&&sP("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(),V(P,I)},onKeyDown:(R)=>{if(R.key==="Enter"||R.key===" ")R.preventDefault(),R.stopPropagation(),V(P,I)},role:"button",tabIndex:0,children:["+",H," ",_("more")]})]}),G]})}),tP(b5,{ref:K})]})},IP=B4(F4);import{jsx as T5}from"react/jsx-runtime";var E0=({resource:P,className:f,children:$,"data-testid":Z})=>{let{renderResource:X}=v();return T5("div",{className:L("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 V4}from"react";import{useMemo as h5}from"react";var k5=({days:P,events:f,dayMaxEvents:$,dayNumberHeight:Z=Cf,gridType:X="day",eventSpacing:z=H0})=>{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,p=f.filter((_)=>_.end.diff(_.start,X)>0),G=f.filter((_)=>_.end.diff(_.start,X)===0),K=[...p].sort((_,N)=>{let U=_.start.diff(N.start);if(U!==0)return U;return N.end.diff(N.start)-_.end.diff(_.start)}),B=[...G].sort((_,N)=>_.start.diff(N.start)),A=[];for(let _=0;_<$;_++){A[_]=[];for(let N=0;N<J;N++)A[_][N]={taken:!1,event:null}}let Y=[];for(let _ of K){let N=F.max(_.start.startOf(X),q),U=X==="hour"?_.end.subtract(1,"minute"):_.end,W=F.min(U.startOf(X),Q),O=Math.max(0,N.diff(q,X)),I=Math.min(J-1,W.diff(q,X)),V=_.start.startOf(X).isBefore(q),w=_.end.startOf(X).isAfter(Q),H=!1,C=-1;for(let h=0;h<$;h++){let E=!0;for(let i=O;i<=I;i++)if(A[h][i].taken){E=!1;break}if(E){C=h;break}}if(C!==-1){for(let E=O;E<=I;E++)A[C][E]={taken:!0,event:_};let h=I-O+1;Y.push({left:O/J*100,width:h/J*100,top:Z+z+C*(G0+z),height:G0,position:C,..._,isTruncatedStart:V,isTruncatedEnd:w}),H=!0}if(!H)for(let h=O+1;h<=I;h++){let E=-1;for(let i=0;i<$;i++){let l=!0;for(let R=h;R<=I;R++)if(A[i][R].taken){l=!1;break}if(l){E=i;break}}if(E!==-1){for(let l=h;l<=I;l++)A[E][l]={taken:!0,event:_};let i=I-h+1;Y.push({left:h/J*100,width:i/J*100,top:Z+z+E*(G0+z),height:G0,position:E,..._,isTruncatedStart:!0,isTruncatedEnd:w}),H=!0;break}}}for(let _ of B){let N=F.max(_.start.startOf(X),q),U=Math.max(0,Math.min(J-1,N.diff(q,X))),W=!1,O=!1,I=-1;for(let V=0;V<$;V++)if(!A[V][U].taken){I=V;break}if(I!==-1)A[I][U]={taken:!0,event:_},Y.push({left:U/J*100,width:1/J*100,top:Z+z+I*(G0+z),height:G0,position:I,..._,isTruncatedStart:!1,isTruncatedEnd:!1})}return Y};var g5=({days:P,allDay:f,dayNumberHeight:$,resourceId:Z,gridType:X})=>{let{getEventsForDateRange:z,dayMaxEvents:q,eventSpacing:Q,getEventsForResource:J}=m((A)=>({getEventsForDateRange:A.getEventsForDateRange,dayMaxEvents:A.dayMaxEvents,eventSpacing:A.eventSpacing,getEventsForResource:A.getEventsForResource})),p=P.at(0).startOf("day"),G=P.at(-1).endOf("day"),K=h5(()=>{let A=z(p,G);if(Z){let Y=J(Z);A=A.filter((_)=>Y.some((N)=>String(N.id)===String(_.id)))}if(f)A=A.filter((Y)=>!!Y.allDay===f);return A},[z,J,p,G,Z,f]);return h5(()=>{return k5({days:P,events:K,dayMaxEvents:q,dayNumberHeight:$,eventSpacing:Q,gridType:X})},[P,q,$,Q,K,X])};import{jsx as Bf}from"react/jsx-runtime";var M4=({days:P,gridType:f="day",resourceId:$,dayNumberHeight:Z,"data-testid":X,allDay:z})=>{let q=P.at(0).startOf("day"),Q=g5({days:P,gridType:f,resourceId:$,dayNumberHeight:Z,allDay:z});return Bf("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":X,children:Q.map((J)=>{let p=`${J.id}-${J.position}-${q.toISOString()}-${$??"no-resource"}`;return Bf("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:Bf(_P,{className:"h-full w-full shadow",elementId:p,event:J})},`${p}-wrapper`)})})},C5=V4(M4);import{jsx as j0,jsxs as Of}from"react/jsx-runtime";var S4=({id:P,resource:f,gridType:$="day",variant:Z="resource",dayNumberHeight:X,className:z,columns:q=[],allDay:Q,showDayNumber:J=!1,isLastRow:p=!1})=>{let{renderResource:G}=m((Y)=>({renderResource:Y.renderResource})),K=Z==="resource",B=q.some((Y)=>Y.days),A=R4((Y)=>{return j0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:j0(C5,{allDay:Q,"data-testid":`horizontal-events-${P}`,dayNumberHeight:X,days:Y,gridType:$,resourceId:f?.id})})},[Q,X,$,P,f?.id]);return Of("div",{className:L("flex flex-1 relative",z),"data-testid":`horizontal-row-${P}`,children:[K&&j0(E0,{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):j0("div",{className:"wrap-break-word text-sm",children:f?.title})}),Of("div",{className:"relative flex-1 flex",children:[j0("div",{className:"flex w-full",children:q.map((Y,_)=>{if(Y.day)return j0(IP,{allDay:Q,className:L("flex-1 w-20",p&&"border-b-0",Y.className),day:Y.day,gridType:$,hour:$==="hour"?Y.day.hour():void 0,resourceId:f?.id,showDayNumber:J},Y.day.toISOString());let N=_===q.length-1;return Of("div",{className:"flex relative w-full",children:[j0("div",{className:"flex w-full",children:Y.days?.map((U)=>j0(IP,{allDay:Q,className:L("flex-1 w-20",p&&"border-b-0",!N&&"border-r!",Y.className),day:U,gridType:$,hour:$==="hour"?U.hour():void 0,resourceId:f?.id,showDayNumber:J},U.toISOString()))}),A(Y.days)]},Y.id)})}),!B&&A(q.map((Y)=>Y.day).filter(Boolean))]})]})},eP=I4(S4);import{memo as m4}from"react";import{jsx as w4}from"react/jsx-runtime";var b4=({className:P})=>{let{t:f}=m(($)=>({t:$.t}));return w4("div",{className:L("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")})},KP=m4(b4);import{jsx as D5,jsxs as k4}from"react/jsx-runtime";var T4=({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:L("h-full min-h-12 border-r last:border-r-0",f?.cell)}));return k4("div",{className:L("flex w-full",f?.row),"data-testid":"all-day-row",children:[Z&&D5(KP,{className:f?.spacer}),D5(eP,{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=H4(T4);import{memo as x4}from"react";import{memo as y4}from"react";import h4 from"dayjs";import{memo as g4}from"react";import{jsx as y5,Fragment as D4}from"react/jsx-runtime";var C4=({rangeStart:P,rangeEnd:f,now:$,resource:Z})=>{let{renderCurrentTimeIndicator:X,view:z}=m((K)=>({renderCurrentTimeIndicator:K.renderCurrentTimeIndicator,view:K.view})),q=$??h4();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 y5(D4,{children:X({currentTime:q,rangeStart:P,rangeEnd:f,progress:G,resource:Z,view:z})});return y5("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}%`}})},E5=g4(C4);import{useMemo as x5}from"react";var j5=({days:P,gridType:f="hour",events:$})=>{let Z=$.filter((K)=>!K.allDay).toSorted((K,B)=>K.start.diff(B.start));if(Z.length===0)return[];let X=P.at(0)||F(),z=P.length,q=f==="day",Q=[],J=[],p=null;for(let K of Z){if(p&&K.start.isSameOrAfter(p)){if(J.length>0)Q.push(J);J=[]}J.push(K),p=p?F.max(p,K.end):K.end}if(J.length>0)Q.push(J);let G=[];for(let K of Q){if(K.length===1){let N=K[0],U=N.start.diff(X,f,!0),W=N.end.diff(X,f,!0);if(q){if(U=Math.floor(U),W=Math.ceil(W),W<=U)W=U+1}if(U<0)U=0;if(W>z)W=z;let O=Math.max(0,W-U);if(O===0)continue;let I=U/z*100,V=O/z*100;G.push({...N,left:0,width:100,top:I,height:V});continue}let B=[...K].sort((N,U)=>{let W=N.end.diff(N.start,"minute"),O=U.end.diff(U.start,"minute");if(W!==O)return O-W;return N.start.diff(U.start)}),A=B.length,Y;if(A===2)Y=25;else if(A===3)Y=50;else if(A===4)Y=60;else Y=70;let _=A>1?Y/(A-1):0;for(let N=0;N<B.length;N++){let U=B[N],W=U.start.diff(X,f,!0),O=U.end.diff(X,f,!0);if(q){if(W=Math.floor(W),O=Math.ceil(O),O<=W)O=W+1}if(W<0)W=0;if(O>z)O=z;let I=Math.max(0,O-W);if(I===0)continue;let V=W/z*100,w=I/z*100,H,C,h;if(N===0)H=0,C=100,h=1;else H=_*N,C=100-H,h=N+1;G.push({...U,left:H,width:C,top:V,height:w,zIndex:h})}}return G};var v5=({days:P,gridType:f,resourceId:$})=>{let{getEventsForDateRange:Z,getEventsForResource:X}=m((p)=>({getEventsForDateRange:p.getEventsForDateRange,getEventsForResource:p.getEventsForResource})),z=P.at(0).startOf("day"),q=P.at(-1).endOf("day"),Q=x5(()=>{let p=Z(z,q);if($){let G=X($);p=p.filter((K)=>G.some((B)=>String(B.id)===String(K.id)))}return p.filter((G)=>!G.allDay)},[z,q,Z,$,X]);return x5(()=>{return j5({days:P,events:Q,gridType:f})},[P,f,Q])};import{jsx as Ff,jsxs as j4}from"react/jsx-runtime";var E4=({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 j4("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":X,children:[q&&Q&&Ff(E5,{rangeEnd:Q,rangeStart:q,resource:Z}),z.map((J,p)=>{let G=`event-${J.id}-${p}-${P.at(0).toISOString()}-${$??"no-resource"}`,K=J.end.diff(J.start,"minute")<=15;return Ff("div",{className:"absolute",style:{left:`${J.left}%`,width:`calc(${J.width}% - var(--spacing) * 2)`,top:`${J.top}%`,height:`${J.height}%`},children:Ff(_P,{className:L("pointer-events-auto absolute",{"[&_p]:text-[10px] [&_p]:mt-0":K}),elementId:G,event:J})},`${G}-wrapper`)})]})},i5=y4(E4);import{jsx as RP,jsxs as i4}from"react/jsx-runtime";var v4=({id:P,days:f,resourceId:$,resource:Z,"data-testid":X,gridType:z,className:q,renderCell:Q,noEvents:J,cellSlots:p=[60],isLastColumn:G})=>{return RP("div",{className:L("flex flex-col flex-1 items-center justify-center min-w-50 bg-background relative",q),"data-testid":X||`vertical-col-${P}`,children:i4("div",{className:"w-full relative grid",style:{gridTemplateRows:`repeat(${f.length}, minmax(0, 1fr))`},children:[f.map((K)=>{let B=K.format("HH"),A=K.format("YYYY-MM-DD");if(Q){let Y=P==="time-col"?`vertical-time-${B}`:`vertical-cell-${A}-${B}-00${$?`-${$}`:""}`;return RP("div",{className:"h-[60px] border-b border-r","data-testid":Y,children:Q(K)},`${A}-${B}`)}return p.map((Y)=>{let _=Y===60?void 0:Y,N=_===void 0?"00":String(_).padStart(2,"0"),U=`vertical-cell-${A}-${B}-${N}${$?`-${$}`:""}`;return RP(IP,{className:L("hover:bg-accent relative z-10 h-[60px] cursor-pointer border-b",Y===60?"":"border-dashed h-[15px] min-h-[15px]",G?"border-r-0":"border-r"),"data-testid":U,day:_?K.minute(_):K,gridType:z,hour:K.hour(),minute:_,resourceId:$,shouldRenderEvents:!1},`${A}-${B}-${N}-${$||"no-resource"}`)})}),!J&&RP("div",{className:"absolute inset-0 z-10 pointer-events-none",children:RP(i5,{"data-testid":`vertical-events-${P}`,days:f,gridType:z,resource:Z,resourceId:$})})]})})},o5=x4(v4);import{memo as o4}from"react";import{jsx as l5,jsxs as c4}from"react/jsx-runtime";var l4=({children:P,classes:f,allDayRow:$})=>{let{stickyViewHeader:Z,viewHeaderClassName:X}=m((z)=>({stickyViewHeader:z.stickyViewHeader,viewHeaderClassName:z.viewHeaderClassName}));return c4("div",{className:L(Z&&"sticky top-0 z-21 bg-background",X),children:[l5("div",{className:L("h-12 border-b w-fit",f?.header),"data-testid":"vertical-grid-header",children:P}),$&&l5("div",{className:L("flex w-full border-b min-h-12 h-full",f?.allDay),"data-testid":"vertical-grid-all-day",children:$})]})},c5=o4(l4);import{jsx as SP,jsxs as d5}from"react/jsx-runtime";var u5="h-[calc(100%-3rem)]",V0=({columns:P,children:f,gridType:$="day",variant:Z="resource",classes:X,allDayRow:z,cellSlots:q})=>{let Q=Z==="resource",J=!Q,p=f&&SP(c5,{allDayRow:z,classes:{header:X?.header,allDay:X?.allDay},children:f});return d5("div",{className:"h-full","data-testid":"vertical-grid-container",children:[J&&p,d5(F0,{className:L("h-full",J&&"overflow-auto",J&&u5),"data-testid":"vertical-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[Q&&p,SP("div",{className:L("flex flex-1 w-fit",Q&&u5,X?.body),"data-testid":"vertical-grid-body",children:P.map((G,K)=>SP(o5,{...G,cellSlots:q,gridType:$,isLastColumn:K===P.length-1},`${G.id}-${K}`))}),SP(m0,{className:"z-30"})," ",SP(m0,{className:"z-30",orientation:"horizontal"})," "]})]})};function U0({referenceDate:P,businessHours:f,hideNonBusinessHours:$,allDates:Z=[P]}){let X=gf({referenceDate:P});if(!$||!f)return X;let z=24,q=0,Q=!1;for(let J of Z){let p=pP(J,f);if(p)Q=!0,z=Math.min(z,p.startTime??9),q=Math.max(q,p.endTime??17)}if(!Q)if($){if(Array.isArray(f))for(let J of f)z=Math.min(z,J.startTime??9),q=Math.max(q,J.endTime??17),Q=!0;else if(f)z=f.startTime??9,q=f.endTime??17,Q=!0;if(!Q)z=9,q=17}else return X;return X.filter((J)=>{let p=J.hour();return p>=z&&p<q})}import{jsx as UP,jsxs as d4}from"react/jsx-runtime";var u4=()=>{let{currentDate:P,currentLocale:f,timeFormat:$,t:Z,businessHours:X,hideNonBusinessHours:z}=K0(),q=P.isSame(F(),"day"),Q=U0({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)=>UP("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())})},p={id:`day-col-${P.format("YYYY-MM-DD")}`,day:P,days:Q,className:"w-[calc(100%-4rem)] flex-1",gridType:"hour"};return UP(V0,{allDayRow:UP(x0,{days:[P]}),cellSlots:[0,15,30,45],classes:{header:"w-full",body:"w-full",allDay:"w-full"},columns:[J,p],gridType:"hour",variant:"regular",children:UP("div",{className:"flex h-full flex-1 justify-center items-center","data-testid":"day-view-header",children:d4(D,{className:L("flex justify-center items-center text-center text-base font-semibold sm:text-xl",q&&"text-primary"),transitionKey:P.format("YYYY-MM-DD"),children:[UP("span",{className:"xs:inline hidden",children:P.format("dddd, ")}),P.format("MMMM D, YYYY"),q&&UP("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")})]})})})},r5=u4;import{useMemo as t4}from"react";import{memo as r4}from"react";import{jsx as n4}from"react/jsx-runtime";var a4=({children:P,className:f})=>{let{stickyViewHeader:$,viewHeaderClassName:Z}=m((X)=>({stickyViewHeader:X.stickyViewHeader,viewHeaderClassName:X.viewHeaderClassName}));return n4("div",{className:L("flex h-12 w-fit",$&&"sticky top-0 z-21 bg-background",f,Z),"data-testid":"horizontal-grid-header",children:P})},a5=r4(a4);import{jsx as LP,jsxs as t5}from"react/jsx-runtime";var n5="h-[calc(100%-3rem)]",Pf=({rows:P,children:f,classes:$,allDay:Z,gridType:X,variant:z="resource",dayNumberHeight:q})=>{let{currentDate:Q}=m((K)=>({currentDate:K.currentDate})),J=z==="resource",p=!J,G=f&&LP(a5,{className:$?.header,children:f});return t5("div",{className:"h-full","data-testid":"horizontal-grid-container",children:[p&&G,t5(F0,{className:L("h-full",p&&"overflow-auto",p&&n5),"data-testid":"horizontal-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[J&&G,LP("div",{className:L("flex flex-1 w-fit",J&&n5,$?.body),"data-testid":"horizontal-grid-body",children:LP("div",{className:"relative w-full flex flex-col flex-1",children:P.map((K,B)=>LP(eP,{allDay:K.allDay??Z,dayNumberHeight:q,gridType:X,isLastRow:B===P.length-1,variant:z,...K},K.id))},Q.format("YYYY-MM"))}),LP(m0,{className:"z-30"}),LP(m0,{className:"z-30",orientation:"horizontal"})]})]})};import{jsx as Vf}from"react/jsx-runtime";var s5=({className:P})=>{let{firstDayOfWeek:f,stickyViewHeader:$,viewHeaderClassName:Z,currentDate:X}=K0(),z=Z0(X,f);return Vf("div",{className:L("flex w-full",$&&"sticky top-0 z-20",Z,P),"data-testid":"month-header",children:z.map((q,Q)=>Vf(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:Vf("span",{className:"text-sm capitalize",children:q.format("ddd")})},q.toISOString()))})};import{jsx as e5}from"react/jsx-runtime";var P2=()=>{let{currentDate:P,firstDayOfWeek:f}=K0(),Z=t4(()=>DP(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 e5(Pf,{classes:{body:"w-full",header:"w-full"},rows:Z,variant:"regular",children:e5(s5,{className:"h-12"})})};import{useMemo as Mf}from"react";import{jsx as v0,jsxs as If}from"react/jsx-runtime";var f2="w-[calc((100%-4rem)/7)] min-w-[calc((100%-4rem)/7)] flex-1",$2="w-10 sm:w-16 min-w-10 sm:min-w-16 max-w-10 sm:max-w-16",s4=()=>{let{t:P,currentDate:f,firstDayOfWeek:$,selectDate:Z,openEventForm:X,currentLocale:z,timeFormat:q,businessHours:Q,hideNonBusinessHours:J}=K0(),p=Mf(()=>Z0(f,$),[f,$]),G=Mf(()=>U0({referenceDate:f,businessHours:Q,hideNonBusinessHours:J,allDates:p}),[f,Q,J,p]),K={id:"time-col",days:G,day:void 0,className:`shrink-0 ${$2} sticky left-0 bg-background z-20`,gridType:"hour",noEvents:!0,renderCell:(A)=>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(A.toDate())})},B=Mf(()=>{return p.map((A)=>({id:`day-col-${A.format("YYYY-MM-DD")}`,day:A,label:A.format("D"),className:f2,days:G.map((Y)=>A.hour(Y.hour()).minute(0).second(0).millisecond(0)),value:A}))},[p,G]);return v0(V0,{allDayRow:v0(x0,{classes:{cell:f2,spacer:$2},days:p}),classes:{header:"w-full h-18",body:"h-[calc(100%-4.5rem)] w-full"},columns:[K,...B],gridType:"hour",variant:"regular",children:If("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:If("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()})]})}),p.map((A,Y)=>{let _=A.isSame(F(),"day"),N=`week-day-header-${A.toISOString()}`;return If(D,{className:L("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",_&&"bg-primary/10 font-bold"),"data-testid":`week-day-header-${A.format("dddd").toLowerCase()}`,delay:Y*0.05,onClick:()=>{Z(A),X({start:A})},transitionKey:N,children:[v0("div",{className:"text-xs sm:text-sm",children:A.format("ddd")}),v0("div",{className:L("mx-auto mt-1 flex h-5 w-5 items-center justify-center rounded-full text-xs",_&&"bg-primary text-primary-foreground"),children:Intl.DateTimeFormat(z,{day:"numeric"}).format(A.toDate())})]},N)})]})})},z2=s4;import{jsx as i0,jsxs as mP}from"react/jsx-runtime";var e4=["S","M","T","W","T","F","S"],P3=["bg-primary","bg-blue-500","bg-green-500"],f3=42,$3=(P)=>{if(P===0)return"";let f=P>1?"s":"";return`${P} event${f}`},z3=()=>{let{currentDate:P,selectDate:f,events:$,setView:Z,getEventsForDateRange:X,t:z}=K0(),q=P.year(),Q=()=>{return Array.from({length:12},(Y,_)=>{let N=F().year(q).month(_).startOf("month"),U=$.filter((W)=>W.start.year()===q&&W.start.month()===_);return{date:N,name:N.format("MMMM"),eventCount:U.length,monthKey:N.format("MM")}})},J=(Y)=>{let _=Y.startOf("month").startOf("week");return Array.from({length:f3},(N,U)=>{let W=_.add(U,"day"),O=W.startOf("day"),I=W.endOf("day"),V=X(O,I);return{date:W,dayKey:W.format("YYYY-MM-DD"),isInCurrentMonth:W.month()===Y.month(),isToday:W.isSame(F(),"day"),isSelected:W.isSame(P,"day"),eventCount:V.length}})},p=(Y,_,N)=>{N?.stopPropagation(),f(Y),Z(_)},G=(Y)=>{let _=Y===1?z("event"):z("events");return`${Y} ${_}`},K=(Y)=>{let N=Y.isInCurrentMonth?"":"text-muted-foreground opacity-50",U=Y.isToday?"bg-primary text-primary-foreground rounded-full":"",W=Y.isSelected&&!Y.isToday?"bg-muted rounded-full font-bold":"",O=Y.eventCount>0&&!Y.isToday&&!Y.isSelected?"font-medium":"";return L("relative flex aspect-square w-full cursor-pointer flex-col items-center justify-center hover:bg-accent rounded-sm transition-colors duration-200",N,U,W,O)},B=(Y,_)=>{return L("h-[3px] w-[3px] rounded-full",_?"bg-primary-foreground":Y)},A=Q();return mP(F0,{className:"h-full","data-testid":"year-view",children:[i0("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:A.map((Y,_)=>{let N=J(Y.date),U=_*0.05;return mP("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-${Y.monthKey}`,children:[mP(D,{className:"mb-2 flex items-center justify-between",delay:U,transitionKey:`month-${_}`,children:[i0("button",{className:"text-lg font-medium hover:underline cursor-pointer","data-testid":`year-month-title-${Y.monthKey}`,onClick:()=>p(Y.date,"month"),type:"button",children:Y.name}),Y.eventCount>0&&i0("span",{className:"bg-primary text-primary-foreground rounded-full px-2 py-1 text-xs","data-testid":`year-month-event-count-${Y.monthKey}`,children:G(Y.eventCount)})]},`month-${_}`),mP("div",{className:"grid grid-cols-7 gap-[1px] text-[0.6rem]","data-testid":`year-mini-calendar-${Y.monthKey}`,children:[e4.map((W,O)=>i0("div",{className:"text-muted-foreground h-3 text-center",children:W},`header-${O}`)),N.map((W)=>{let O=`year-day-${Y.date.format("YYYY-MM")}-${W.dayKey}`,I=W.eventCount>0,V=Math.min(W.eventCount,3),w=P3.slice(0,V);return mP("button",{className:K(W),"data-testid":O,onClick:(H)=>p(W.date,"day",H),title:$3(W.eventCount),type:"button",children:[i0("span",{className:"text-center leading-none",children:W.date.date()}),I&&i0("div",{className:L("absolute bottom-0 flex w-full justify-center space-x-[1px]",W.isToday&&"bottom-[1px]"),children:w.map((H)=>i0("span",{className:B(H,W.isToday)},H))})]},W.dayKey)})]})]},Y.monthKey)})}),i0(m0,{className:"z-30"})]})},Z2=z3;import{useCallback as Rf,useMemo as Z3}from"react";import{jsx as J3}from"react/jsx-runtime";var J2=({children:P,events:f=[],firstDayOfWeek:$=0,initialView:Z="month",initialDate:X,renderEvent:z,onEventClick:q,onCellClick:Q,onViewChange:J,onEventAdd:p,onEventUpdate:G,onEventDelete:K,onDateChange:B,locale:A,timezone:Y,disableCellClick:_,disableEventClick:N,disableDragAndDrop:U,dayMaxEvents:W,eventSpacing:O=H0,stickyViewHeader:I=!0,viewHeaderClassName:V="",headerComponent:w,headerClassName:H,businessHours:C,renderEventForm:h,translations:E,translator:i,timeFormat:l="12-hour",classesOverride:R,renderCurrentTimeIndicator:d,hideNonBusinessHours:q0=!1})=>{let b=EP({events:f,firstDayOfWeek:$,initialView:Z,initialDate:X,businessHours:C,onEventAdd:p,onEventUpdate:G,onEventDelete:K,onDateChange:B,onViewChange:J,locale:A,timezone:Y,translations:E,translator:i}),M0=Rf((r)=>{b.setSelectedEvent(r),b.setIsEventFormOpen(!0)},[b]),_0=Rf((r)=>{if(N)return;if(q)q(r);else M0(r)},[N,q,M0]),$0=Rf((r)=>{if(_)return;if(Q)Q(r);else b.openEventForm(r)},[Q,_,b]),N0=Z3(()=>({currentDate:b.currentDate,view:b.view,events:b.events,rawEvents:b.rawEvents,currentLocale:b.currentLocale,isEventFormOpen:b.isEventFormOpen,selectedEvent:b.selectedEvent,selectedDate:b.selectedDate,firstDayOfWeek:b.firstDayOfWeek,setCurrentDate:b.setCurrentDate,selectDate:b.selectDate,setView:b.setView,nextPeriod:b.nextPeriod,prevPeriod:b.prevPeriod,today:b.today,addEvent:b.addEvent,updateEvent:b.updateEvent,updateRecurringEvent:b.updateRecurringEvent,deleteEvent:b.deleteEvent,deleteRecurringEvent:b.deleteRecurringEvent,openEventForm:b.openEventForm,closeEventForm:b.closeEventForm,getEventsForDateRange:b.getEventsForDateRange,findParentRecurringEvent:b.findParentRecurringEvent,renderEvent:z,onEventClick:_0,onCellClick:$0,locale:A,timezone:Y,disableCellClick:_,disableEventClick:N,disableDragAndDrop:U,dayMaxEvents:W,eventSpacing:O,stickyViewHeader:I,viewHeaderClassName:V,headerComponent:w,headerClassName:H,businessHours:C,renderEventForm:h,t:b.t,timeFormat:l,classesOverride:R,renderCurrentTimeIndicator:d,hideNonBusinessHours:q0}),[b,z,_0,$0,A,Y,_,N,U,W,O,I,V,w,H,C,h,l,R,d,q0]);return J3(JP.Provider,{value:N0,children:P})};import{jsx as A0,jsxs as Q3}from"react/jsx-runtime";var X3=()=>{let{view:P,dayMaxEvents:f}=K0();return Q3("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-calendar",children:[A0(FP,{className:"p-1"}),A0(jP,{children:A0(D,{className:"w-full h-[calc(100%-3.5rem)]",direction:"horizontal",transitionKey:P,children:A0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:A0(P2,{dayMaxEvents:f},"month"),week:A0(z2,{},"week"),day:A0(r5,{},"day"),year:A0(Z2,{},"year")}[P]})})}),A0(uP,{})]})},q3=({events:P,firstDayOfWeek:f="sunday",initialView:$="month",initialDate:Z,dayMaxEvents:X=qP,eventSpacing:z=H0,stickyViewHeader:q=!0,viewHeaderClassName:Q="",timeFormat:J="12-hour",hideNonBusinessHours:p=!1,...G})=>{return A0(J2,{dayMaxEvents:X,eventSpacing:z,events:TP(P),firstDayOfWeek:yP[f],hideNonBusinessHours:p,initialDate:e0(Z),initialView:$,stickyViewHeader:q,timeFormat:J,viewHeaderClassName:Q,...G,children:A0(X3,{})})};import{jsx as p3}from"react/jsx-runtime";var GP=({days:P,gridType:f="day",children:$,classes:Z})=>{let{getVisibleResources:X}=v(),z=X(),q=P.map((J)=>{let p=Array.isArray(J);return{id:`col-${p?J[0]?.format("YYYY-MM-DD"):J.toISOString()}`,day:p?void 0:J,days:p?J:void 0,className:Z?.cell,gridType:f}}),Q=z.map((J)=>({id:J.id,title:J.title,resource:J,columns:q}));return p3(Pf,{classes:Z,dayNumberHeight:0,gridType:f,rows:Q,children:$})};import{jsx as bP,jsxs as Y3}from"react/jsx-runtime";var X2=()=>{let{currentDate:P,t:f,currentLocale:$,timeFormat:Z,businessHours:X,hideNonBusinessHours:z}=v(),q=U0({referenceDate:P,businessHours:X,hideNonBusinessHours:z,allDates:[P]});return Y3(GP,{classes:{header:"min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:q,gridType:"hour",children:[bP("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:bP("div",{className:"text-sm",children:f("resources")})}),bP("div",{className:"flex-1 flex flex-col",children:bP("div",{className:"flex h-12",children:q.map((Q,J)=>{let p=Q.isSame(F(),"hour"),G=`resource-day-header-${Q.toISOString()}`;return bP(D,{className:L("min-w-20 flex-1 border-b border-r last:border-r-0 flex items-center justify-center text-xs shrink-0",p&&"bg-blue-50 text-blue-600 font-medium"),"data-testid":`resource-day-time-label-${Q.format("HH")}`,delay:J*0.05,transitionKey:`${G}-motion`,children:Intl.DateTimeFormat($,{hour:"numeric",hour12:Z==="12-hour"}).format(Q.toDate())},`${G}-animated`)})})})]})};import{jsx as AP,jsxs as q2}from"react/jsx-runtime";var Q2=()=>{let{currentDate:P,getVisibleResources:f,currentLocale:$,timeFormat:Z,businessHours:X,hideNonBusinessHours:z}=v(),q=f(),Q=U0({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)=>AP("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())})},p=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 AP(V0,{allDayRow:q2("div",{className:"flex w-full",children:[AP(KP,{}),q.map((G)=>AP(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,...p],"data-testid":"resource-day",gridType:"hour",children:q2("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[AP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),q.map((G)=>AP(E0,{className:"min-w-50 flex-1",resource:G},`resource-cell-${G.id}`))]})})};import{jsx as p2}from"react/jsx-runtime";var Y2=()=>{let{orientation:P}=v();if(P==="vertical")return p2(Q2,{});return p2(X2,{})};import{useMemo as _3}from"react";import{jsx as ff,jsxs as _2}from"react/jsx-runtime";var K2=()=>{let{currentDate:P,t:f}=v(),$=_3(()=>{return hf(P)},[P]);return _2(GP,{days:$,children:[ff("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:ff("div",{className:"text-sm",children:f("resources")})}),$.map((Z,X)=>{let z=`resource-month-header-${Z.toISOString()}`;return _2(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:[ff("div",{className:"text-xs font-medium",children:Z.format("D")}),ff("div",{className:"text-xs text-muted-foreground",children:Z.format("ddd")})]},`${z}-animated`)})]})};import{jsx as wP,jsxs as U2}from"react/jsx-runtime";var L2=()=>{let{currentDate:P,getVisibleResources:f}=v(),$=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)=>U2("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")})]})},q=$.map((Q)=>({id:`month-col-resource-${Q.id}`,day:void 0,resourceId:Q.id,days:X,gridType:"day"}));return wP(V0,{classes:{header:"w-full",body:"w-full"},columns:[z,...q],"data-testid":"resource-month-vertical-grid",children:U2("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"}),$.map((Q)=>wP(E0,{className:"min-w-50 flex-1",resource:Q},`resource-cell-${Q.id}`))]})})};import{jsx as G2}from"react/jsx-runtime";var A2=()=>{let{orientation:P}=v();if(P==="vertical")return G2(L2,{});return G2(K2,{})};import{useMemo as N2}from"react";import{jsx as o0,jsxs as Sf}from"react/jsx-runtime";var W2=()=>{let{currentDate:P,firstDayOfWeek:f,t:$,currentLocale:Z,timeFormat:X,businessHours:z,hideNonBusinessHours:q}=v(),Q=N2(()=>Z0(P,f),[P,f]),J=N2(()=>{return Q.map((p)=>U0({referenceDate:p,businessHours:z,hideNonBusinessHours:q}))},[Q,z,q]);return Sf(GP,{classes:{header:"h-24 min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:J,gridType:"hour",children:[o0("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:o0("div",{className:"text-sm",children:$("resources")})}),Sf("div",{className:"flex-1 flex flex-col",children:[o0("div",{className:"flex h-12",children:Q.map((p,G)=>{let K=p.isSame(F(),"day"),B=`resource-week-header-${p.toISOString()}-day`;return o0(D,{className:L("shrink-0 border-r last:border-r-0 border-b flex-1 flex items-center text-center font-medium",K&&"bg-blue-50 text-blue-600"),"data-testid":"resource-week-day-header",delay:G*0.05,transitionKey:`${B}-motion`,children:Sf("div",{className:"sticky left-1/2",children:[o0("div",{className:"text-sm",children:p.format("ddd")}),o0("div",{className:"text-xs text-muted-foreground",children:p.format("M/D")})]})},`${B}-animated`)})}),o0("div",{className:"flex h-12 border-b",children:J.flat().map((p,G)=>{let K=p.isSame(F(),"hour"),B=`resource-week-header-${p.toISOString()}-hour`;return o0(D,{className:L("min-w-20 flex-1 border-r flex items-center justify-center text-xs shrink-0",K&&"bg-blue-50 text-blue-600 font-medium"),"data-testid":`resource-week-time-label-${p.format("HH")}`,delay:G*0.005,transitionKey:`${B}-motion`,children:Intl.DateTimeFormat(Z,{hour:"numeric",hour12:X==="12-hour"}).format(p.toDate())},`${B}-animated`)})})]})]})};import{useMemo as $f}from"react";import{jsx as Y0,jsxs as HP}from"react/jsx-runtime";var B2=()=>{let{currentDate:P,getVisibleResources:f,firstDayOfWeek:$,currentLocale:Z,timeFormat:X,t:z,businessHours:q,hideNonBusinessHours:Q}=v(),J=f(),p=$f(()=>Z0(P,$),[P,$]),G=$f(()=>U0({referenceDate:P,businessHours:q,hideNonBusinessHours:Q,allDates:p}),[P,q,Q,p]),K=$f(()=>({id:"time-col",days:G,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:(A)=>Y0("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(A.toDate())})}),[G,Z,X]),B=$f(()=>J.flatMap((A)=>p.map((Y)=>({id:`day-col-${Y.format("YYYY-MM-DD")}-resource-${A.id}`,resourceId:A.id,resource:A,day:Y,days:G.map((_)=>Y.hour(_.hour()).minute(0).second(0).millisecond(0)),gridType:"hour"}))),[J,p,G]);return Y0(V0,{allDayRow:HP("div",{className:"flex",children:[Y0(KP,{}),J.map((A)=>Y0(x0,{classes:{cell:"min-w-50"},days:p,resource:A,showSpacer:!1},`resource-week-allday-row-${A.id}`))]}),classes:{header:"h-24"},columns:[K,...B],"data-testid":"resource-week",gridType:"hour",children:HP("div",{className:"flex-1 flex flex-col",children:[HP("div",{className:"flex h-12",children:[Y0("div",{className:"shrink-0 w-16 border-r z-20 bg-background sticky left-0",children:Y0("span",{className:"px-2 h-full w-full flex justify-center items-end text-xs text-muted-foreground",children:z("week")})}),J.map((A,Y)=>{let _=`resource-week-header-${A.id}-day`;return Y0(D,{className:L("shrink-0 border-r last:border-r-0 border-b flex items-center text-center font-medium w-[calc(7*var(--spacing)*50)]"),delay:Y*0.05,transitionKey:`${_}-motion`,children:Y0(E0,{className:"h-full w-full flex-1",resource:A,children:Y0("div",{className:"sticky left-1/2 text-sm font-medium truncate",children:A.title})})},`${_}-animated`)})]}),HP("div",{className:"flex h-12",children:[Y0("div",{className:"shrink-0 w-16 border-r border-b z-20 bg-background sticky left-0",children:Y0("span",{className:"px-2 h-full w-full flex justify-center items-start font-medium",children:P.week()})}),B.map((A,Y)=>{let _=A.day,N=`resource-week-header-${_.toISOString()}-hour-${A.resourceId}`;return HP(D,{className:L("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-${_.format("HH")}`,delay:Y*0.05,transitionKey:`${N}-motion`,children:[Y0("div",{className:"text-sm",children:_.format("ddd")}),Y0("div",{className:"text-xs text-muted-foreground",children:_.format("M/D")})]},`${N}-animated`)})]})]})})};import{jsx as O2}from"react/jsx-runtime";var F2=()=>{let{orientation:P}=v();if(P==="vertical")return O2(B2,{});return O2(W2,{})};import{jsx as l0,jsxs as K3}from"react/jsx-runtime";var V2=()=>{let{view:P}=v();return K3("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-resource-calendar",children:[l0(FP,{className:"p-1"}),l0(jP,{children:l0(D,{className:"w-full h-[calc(100%-3.5rem)] @container/calendar-body",direction:"horizontal",transitionKey:P,children:l0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:l0(A2,{},"month"),week:l0(F2,{},"week"),day:l0(Y2,{},"day")}[P]})})}),l0(uP,{})]})};import{jsx as M2}from"react/jsx-runtime";var U3=({events:P=[],resources:f=[],firstDayOfWeek:$="sunday",initialView:Z="month",initialDate:X,disableDragAndDrop:z=!1,dayMaxEvents:q=qP,timeFormat:Q="12-hour",eventSpacing:J=H0,...p})=>{return M2(vf,{dayMaxEvents:q,disableDragAndDrop:z,eventSpacing:J,events:TP(P),firstDayOfWeek:yP[$],initialDate:e0(X),initialView:Z,resources:f,timeFormat:Q,...p,children:M2(V2,{})})};export{n2 as useIlamyResourceCalendarContext,r2 as useIlamyCalendarContext,PP as isRecurringEvent,Zf as generateRecurringEvents,Xf as defaultTranslations,XX as RRule,U3 as IlamyResourceCalendar,q3 as IlamyCalendar};
5
5
 
6
- //# debugId=42D59003EDB6DC9E64756E2164756E21
7
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2luZGV4LnRzIiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlci50cyIsICJzcmMvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnLnRzIiwgInNyYy9saWIvdXRpbHMvaW5kZXgudHMiLCAic3JjL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uLnRzeCIsICJzcmMvY29tcG9uZW50cy9kcmFnLWFuZC1kcm9wL2NhbGVuZGFyLWRuZC1jb250ZXh0LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9idXR0b24udHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2RpYWxvZy50c3giLCAic3JjL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0LnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQudHMiLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dC50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9wcm92aWRlci50c3giLCAic3JjL2hvb2tzL3VzZS1jYWxlbmRhci1lbmdpbmUudHMiLCAic3JjL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdC50cyIsICJzcmMvbGliL3V0aWxzL2RhdGUtdXRpbHMudHMiLCAic3JjL2xpYi9jb25zdGFudHMudHMiLCAic3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cudHN4IiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvZG5kLXV0aWxzLnRzIiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvZXZlbnQtZHJhZy1vdmVybGF5LnRzeCIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0udHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2NoZWNrYm94LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9kYXRlLXBpY2tlci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvY2FsZW5kYXIudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL3BvcG92ZXIudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2lucHV0LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9sYWJlbC50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL3RpbWUtcGlja2VyLnRzeCIsICJzcmMvaG9va3MvdXNlLWF1dG9jb21wbGV0ZS10aW1lcGlja2VyLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3Vycy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvZXZlbnQtZm9ybS11dGlscy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdG9yL3JlY3VycmVuY2UtZWRpdG9yLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYXJkLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zZWxlY3QudHN4IiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucy50cyIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nLnRzeCIsICJzcmMvY29tcG9uZW50cy9oZWFkZXIvYmFzZS1oZWFkZXIudHN4IiwgInNyYy9saWIvdXRpbHMvZXhwb3J0LWljYWwudHMiLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3RpdGxlLWNvbnRlbnQudHN4IiwgInNyYy9jb21wb25lbnRzL2hlYWRlci92aWV3LWNvbnRyb2xzLnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdy50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1yb3cudHN4IiwgInNyYy9jb21wb25lbnRzL2dyaWQtY2VsbC50c3giLCAic3JjL2NvbXBvbmVudHMvZGF5LW51bWJlci50c3giLCAic3JjL2NvbXBvbmVudHMvYWxsLWV2ZW50cy1kaWFsb2cudHN4IiwgInNyYy9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQudHN4IiwgInNyYy9jb21wb25lbnRzL2Ryb3BwYWJsZS1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLWV2ZW50cy1sYXllci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZFdlZWtFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi13ZWVrLWV2ZW50cy50cyIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1jb2wudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1ldmVudHMtbGF5ZXIudHN4IiwgInNyYy9jb21wb25lbnRzL2N1cnJlbnQtdGltZS1pbmRpY2F0b3IudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi1kYXktZXZlbnRzLnRzIiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1oZWFkZXItY29udGFpbmVyLnRzeCIsICJzcmMvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2RheS12aWV3LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L21vbnRoLXZpZXcudHN4IiwgInNyYy9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQtaGVhZGVyLWNvbnRhaW5lci50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9tb250aC1oZWFkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy93ZWVrLXZpZXcudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3llYXItdmlldy95ZWFyLXZpZXcudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhci50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvcmVzb3VyY2UtZXZlbnQtZ3JpZC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvcmVzb3VyY2UtZGF5LWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L3Jlc291cmNlLWRheS12ZXJ0aWNhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvaW5kZXgudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvcmVzb3VyY2UtbW9udGgtaG9yaXpvbnRhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9yZXNvdXJjZS1tb250aC12ZXJ0aWNhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3Jlc291cmNlLXdlZWstaG9yaXpvbnRhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3Jlc291cmNlLXdlZWstdmVydGljYWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvcmVzb3VyY2UtY2FsZW5kYXItYm9keS50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIudHN4Il0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIi8vIE1haW4gY2FsZW5kYXIgY29tcG9uZW50c1xuXG4vLyBSZS1leHBvcnQgcnJ1bGUuanMgdHlwZXMgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSB7IEZyZXF1ZW5jeSwgV2Vla2RheSB9IGZyb20gJ3JydWxlJ1xuZXhwb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbi8vIEV4cG9ydCB0eXBlc1xuZXhwb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG4vLyBSUlVMRS1iYXNlZCByZWN1cnJlbmNlIHN5c3RlbVxuZXhwb3J0IHtcblx0Z2VuZXJhdGVSZWN1cnJpbmdFdmVudHMsXG5cdGlzUmVjdXJyaW5nRXZlbnQsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5leHBvcnQgdHlwZSB7IEV2ZW50Rm9ybVByb3BzIH0gZnJvbSAnLi9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybSdcbmV4cG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCwgV2Vla0RheXMgfSBmcm9tICcuL2NvbXBvbmVudHMvdHlwZXMnXG5leHBvcnQgeyBJbGFteUNhbGVuZGFyIH0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LWNhbGVuZGFyJ1xuZXhwb3J0IHR5cGUgeyBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB9IGZyb20gJy4vZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuLy8gUHVibGljIGNhbGVuZGFyIGNvbnRleHQgaG9va3NcbmV4cG9ydCB7IHVzZUlsYW15Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5leHBvcnQgdHlwZSB7XG5cdENlbGxDbGlja0luZm8sXG5cdElsYW15Q2FsZW5kYXJQcm9wcyxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcbn0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmV4cG9ydCB0eXBlIHsgSWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHMgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXInXG5leHBvcnQgeyBJbGFteVJlc291cmNlQ2FsZW5kYXIgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXInXG5leHBvcnQgdHlwZSB7IFVzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHRSZXR1cm4gfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmV4cG9ydCB7IHVzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbi8vIFJlc291cmNlIGNhbGVuZGFyIHR5cGVzXG5leHBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmV4cG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnMgfSBmcm9tICcuL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdCdcbi8vIFRyYW5zbGF0aW9uIHN5c3RlbVxuZXhwb3J0IHR5cGUge1xuXHRUcmFuc2xhdGlvbktleSxcblx0VHJhbnNsYXRpb25zLFxuXHRUcmFuc2xhdG9yRnVuY3Rpb24sXG59IGZyb20gJy4vbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmV4cG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3LCBUaW1lRm9ybWF0IH0gZnJvbSAnLi90eXBlcydcbiIsCiAgICAiaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cydcbmltcG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgb21pdEtleXMsIHNhZmVEYXRlIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBpc1JlY3VycmluZ0V2ZW50ID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG5cdHJldHVybiBCb29sZWFuKGV2ZW50LnJydWxlIHx8IGV2ZW50LnJlY3VycmVuY2VJZCB8fCBldmVudC51aWQpXG59XG5cbmludGVyZmFjZSBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzIHtcblx0ZXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0Y3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHN0YXJ0RGF0ZTogZGF5anMuRGF5anNcblx0ZW5kRGF0ZTogZGF5anMuRGF5anNcbn1cblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzID0gKHtcblx0ZXZlbnQsXG5cdGN1cnJlbnRFdmVudHMsXG5cdHN0YXJ0RGF0ZSxcblx0ZW5kRGF0ZSxcbn06IEdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzUHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHQvLyBJZiBub3QgYSByZWN1cnJpbmcgZXZlbnQsIHJldHVybiBlbXB0eSBhcnJheVxuXHRpZiAoIWV2ZW50LnJydWxlKSB7XG5cdFx0cmV0dXJuIFtdXG5cdH1cblxuXHR0cnkge1xuXHRcdC8vIENyZWF0ZSBydWxlIGZyb20gUlJ1bGVPcHRpb25zIGVuc3VyaW5nIGR0c3RhcnQgaXMgYWx3YXlzIHByb3ZpZGVkXG5cdFx0Ly8gSWYgZHRzdGFydCBpcyBtaXNzaW5nIGZyb20gdGhlIFJSVUxFLCB1c2UgdGhlIGV2ZW50J3Mgc3RhcnQgdGltZSBhcyBmYWxsYmFja1xuXHRcdGNvbnN0IHJ1bGVPcHRpb25zOiBSUnVsZU9wdGlvbnMgPSB7XG5cdFx0XHQuLi5ldmVudC5ycnVsZSxcblx0XHRcdGR0c3RhcnQ6IGV2ZW50LnJydWxlLmR0c3RhcnQgfHwgZXZlbnQuc3RhcnQudG9EYXRlKCksXG5cdFx0fVxuXHRcdGNvbnN0IHJ1bGUgPSBuZXcgUlJ1bGUocnVsZU9wdGlvbnMpXG5cblx0XHRjb25zdCBvdmVycmlkZXMgPSBjdXJyZW50RXZlbnRzLmZpbHRlcihcblx0XHRcdChlKSA9PiBlLnJlY3VycmVuY2VJZCAmJiBlLnVpZCA9PT0gZXZlbnQudWlkXG5cdFx0KVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIGV2ZW50IGR1cmF0aW9uIHRvIGV4cGFuZCBzZWFyY2ggd2luZG93IGZvciBldmVudHMgdGhhdCBzcGFuIHRoZSByYW5nZVxuXHRcdGNvbnN0IGV2ZW50RHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcblxuXHRcdC8vIEV4cGFuZCBzZWFyY2ggd2luZG93IGJhY2t3YXJkIGJ5IGV2ZW50IGR1cmF0aW9uIHRvIGNhdGNoIGV2ZW50cyB0aGF0IHN0YXJ0IGJlZm9yZVxuXHRcdC8vIHRoZSByYW5nZSBidXQgc3BhbiBpbnRvIGl0XG5cdFx0Y29uc3QgZXhwYW5kZWRTdGFydERhdGVUaW1lID0gc3RhcnREYXRlXG5cdFx0XHQuc3VidHJhY3QoZXZlbnREdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcblx0XHRcdC50b0RhdGUoKVxuXHRcdGNvbnN0IGVuZERhdGVUaW1lID0gZW5kRGF0ZS50b0RhdGUoKVxuXG5cdFx0Ly8gR2V0IGFsbCBvY2N1cnJlbmNlcyBpbiB0aGUgZXhwYW5kZWQgcmFuZ2Vcblx0XHRjb25zdCBvY2N1cnJlbmNlcyA9IHJ1bGUuYmV0d2VlbihleHBhbmRlZFN0YXJ0RGF0ZVRpbWUsIGVuZERhdGVUaW1lLCB0cnVlKVxuXG5cdFx0Ly8gQ29udmVydCBvY2N1cnJlbmNlcyB0byBDYWxlbmRhckV2ZW50IGluc3RhbmNlc1xuXHRcdGNvbnN0IHJlY3VycmluZ0V2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gb2NjdXJyZW5jZXNcblx0XHRcdC5tYXAoKG9jY3VycmVuY2UsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9jY3VycmVuY2VEYXRlID0gZGF5anMob2NjdXJyZW5jZSlcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmdPdmVycmlkZSA9IG92ZXJyaWRlcy5maW5kKChlKSA9PlxuXHRcdFx0XHRcdHNhZmVEYXRlKGUucmVjdXJyZW5jZUlkKT8uaXNTYW1lKG9jY3VycmVuY2VEYXRlKVxuXHRcdFx0XHQpXG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUncyBhbiBvdmVycmlkZSwgdXNlIGl0XG5cdFx0XHRcdGlmIChleGlzdGluZ092ZXJyaWRlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgLi4uZXZlbnQsIC4uLmV4aXN0aW5nT3ZlcnJpZGUgfVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSBkdXJhdGlvbiBmcm9tIHRoZSBvcmlnaW5hbCBldmVudFxuXHRcdFx0XHRjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gZXZlbnQuZW5kLmRpZmYoZXZlbnQuc3RhcnQpXG5cdFx0XHRcdGNvbnN0IG5ld0VuZFRpbWUgPSBvY2N1cnJlbmNlRGF0ZS5hZGQob3JpZ2luYWxEdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcblx0XHRcdFx0Y29uc3QgcmVjdXJyaW5nRXZlbnRJZCA9IGAke2V2ZW50LmlkfV8ke2luZGV4fWBcblx0XHRcdFx0Y29uc3QgcGFyZW50VUlEID0gZXZlbnQudWlkIHx8IGAke2V2ZW50LmlkfUBpbGFteS5jYWxlbmRhcmBcblxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIHJlY3VycmluZyBldmVudCBpbnN0YW5jZVxuXHRcdFx0XHRjb25zdCByZWN1cnJpbmdFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0XHRpZDogcmVjdXJyaW5nRXZlbnRJZCxcblx0XHRcdFx0XHRzdGFydDogb2NjdXJyZW5jZURhdGUsXG5cdFx0XHRcdFx0ZW5kOiBuZXdFbmRUaW1lLFxuXHRcdFx0XHRcdHVpZDogcGFyZW50VUlELCAvLyBTYW1lIFVJRCBhcyBwYXJlbnQgZm9yIHByb3BlciBncm91cGluZ1xuXHRcdFx0XHRcdHJydWxlOiB1bmRlZmluZWQsIC8vIEluc3RhbmNlIGV2ZW50cyBkb24ndCBoYXZlIFJSVUxFXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVjdXJyaW5nRXZlbnRcblx0XHRcdH0pXG5cdFx0XHQuZmlsdGVyKChyZWN1cnJpbmdFdmVudCkgPT4ge1xuXHRcdFx0XHQvLyBGaWx0ZXIgb3V0IEVYREFURSBleGNsdXNpb25zXG5cdFx0XHRcdGNvbnN0IGhhc0V4ZGF0ZXMgPSBldmVudC5leGRhdGVzICYmIGV2ZW50LmV4ZGF0ZXMubGVuZ3RoID4gMFxuXHRcdFx0XHRpZiAoaGFzRXhkYXRlcykge1xuXHRcdFx0XHRcdGNvbnN0IGV2ZW50U3RhcnRJU08gPSByZWN1cnJpbmdFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG5cdFx0XHRcdFx0Y29uc3QgaXNFeGNsdWRlZCA9IGV2ZW50LmV4ZGF0ZXMuaW5jbHVkZXMoZXZlbnRTdGFydElTTylcblx0XHRcdFx0XHRpZiAoaXNFeGNsdWRlZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRmlsdGVyIHRvIG9ubHkgaW5jbHVkZSBldmVudHMgdGhhdCBzcGFuIHRocm91Z2ggdGhlIG9yaWdpbmFsIHJlcXVlc3RlZCBkYXRlIHJhbmdlXG5cdFx0XHRcdC8vIEFuIGV2ZW50IHNwYW5zIHRoZSByYW5nZSBpZjogZXZlbnRfc3RhcnQgPCByYW5nZV9lbmQgQU5EIGV2ZW50X2VuZCA+IHJhbmdlX3N0YXJ0XG5cdFx0XHRcdC8vIFVzZSBpc1NhbWVPckJlZm9yZS9pc1NhbWVPckFmdGVyIHRvIGluY2x1ZGUgYm91bmRhcnkgY2FzZXNcblx0XHRcdFx0Y29uc3QgZXZlbnRTcGFuc1JhbmdlID1cblx0XHRcdFx0XHRyZWN1cnJpbmdFdmVudC5zdGFydC5pc1NhbWVPckJlZm9yZShlbmREYXRlKSAmJlxuXHRcdFx0XHRcdHJlY3VycmluZ0V2ZW50LmVuZC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSlcblxuXHRcdFx0XHRyZXR1cm4gZXZlbnRTcGFuc1JhbmdlXG5cdFx0XHR9KVxuXG5cdFx0cmV0dXJuIHJlY3VycmluZ0V2ZW50c1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIEhhbmRsZSBpbnZhbGlkIFJSVUxFIG9wdGlvbnNcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRgSW52YWxpZCBSUlVMRSBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KGV2ZW50LnJydWxlKX0uIEVycm9yOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcblx0XHQpXG5cdH1cbn1cblxuaW50ZXJmYWNlIFVwZGF0ZVJlY3VycmluZ0V2ZW50UHJvcHMge1xuXHR0YXJnZXRFdmVudDogQ2FsZW5kYXJFdmVudFxuXHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuXHR0YXJnZXRFdmVudCxcblx0dXBkYXRlcyxcblx0Y3VycmVudEV2ZW50cyxcblx0c2NvcGUsXG59OiBVcGRhdGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Y29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXG5cdC8vIEZpbmQgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50XG5cdGNvbnN0IGJhc2VFdmVudEluZGV4ID0gdXBkYXRlZEV2ZW50cy5maW5kSW5kZXgoKGUpID0+IHtcblx0XHRjb25zdCBwYXJlbnRVaWQgPSBlLnVpZCB8fCBgJHtlLmlkfUBpbGFteS5jYWxlbmRhcmBcblx0XHRyZXR1cm4gcGFyZW50VWlkID09PSB0YXJnZXRFdmVudC51aWQgJiYgZS5ycnVsZSAmJiAhZS5yZWN1cnJlbmNlSWRcblx0fSlcblxuXHRpZiAoYmFzZUV2ZW50SW5kZXggPT09IC0xKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdCYXNlIHJlY3VycmluZyBldmVudCBub3QgZm91bmQnKVxuXHR9XG5cblx0Y29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuXHRzd2l0Y2ggKHNjb3BlKSB7XG5cdFx0Y2FzZSAndGhpcyc6IHtcblx0XHRcdC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGJhc2UgZXZlbnQgYW5kIGNyZWF0ZSBzdGFuZGFsb25lIG1vZGlmaWVkIGV2ZW50XG5cdFx0XHRjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0Y29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cblx0XHRcdGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuXHRcdFx0Y29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHRleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuXG5cdFx0XHQvLyBDcmVhdGUgc3RhbmRhbG9uZSBtb2RpZmllZCBldmVudCB3aXRoIHJlY3VycmVuY2VJZFxuXHRcdFx0Y29uc3QgbW9kaWZpZWRFdmVudElkID0gYCR7dGFyZ2V0RXZlbnQuaWR9X21vZGlmaWVkXyR7RGF0ZS5ub3coKX1gXG5cdFx0XHRjb25zdCBtb2RpZmllZEV2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFRPRE86IGZpeCB0aGUgdHlwZXNcblx0XHRcdFx0Li4ub21pdEtleXModGFyZ2V0RXZlbnQsIFsnd2lkdGgnLCAnaGVpZ2h0JywgJ3RvcCcsICdsZWZ0JywgJ3JpZ2h0J10pLFxuXHRcdFx0XHQuLi51cGRhdGVzLFxuXHRcdFx0XHRpZDogbW9kaWZpZWRFdmVudElkLFxuXHRcdFx0XHRyZWN1cnJlbmNlSWQ6IHRhcmdldEV2ZW50U3RhcnRJU08sIC8vIFRoaXMgbWFya3MgaXQgYXMgYSBtb2RpZmllZCBpbnN0YW5jZVxuXHRcdFx0XHR1aWQ6IGJhc2VFdmVudC51aWQgfHwgYCR7YmFzZUV2ZW50LmlkfUBpbGFteS5jYWxlbmRhcmAsIC8vIEtlZXAgc2FtZSBVSUQgYXMgYmFzZSBldmVudCAoaUNhbGVuZGFyIHN0YW5kYXJkKVxuXHRcdFx0XHRycnVsZTogdW5kZWZpbmVkLCAvLyBTdGFuZGFsb25lIGV2ZW50cyBkb24ndCBoYXZlIFJSVUxFXG5cdFx0XHR9IGFzIENhbGVuZGFyRXZlbnRcblx0XHRcdHVwZGF0ZWRFdmVudHMucHVzaChtb2RpZmllZEV2ZW50KVxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdmb2xsb3dpbmcnOiB7XG5cdFx0XHQvLyBcIlRoaXMgYW5kIGZvbGxvd2luZ1wiIC0gVGVybWluYXRlIG9yaWdpbmFsIHNlcmllcyBhbmQgY3JlYXRlIG5ldyBzZXJpZXNcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSB0ZXJtaW5hdGlvbiBkYXRlOiBkYXkgYmVmb3JlIHRhcmdldCB3aXRoIGVuZCBvZiBkYXkgdGltZVxuXHRcdFx0Ly8gVGhpcyBlbnN1cmVzIHRoZSBsYXN0IG9jY3VycmVuY2UgYmVmb3JlIHRhcmdldCBpcyBpbmNsdWRlZCBpbiB0aGUgdGVybWluYXRlZCBzZXJpZXNcblx0XHRcdGNvbnN0IGRheUJlZm9yZVRhcmdldCA9IHRhcmdldEV2ZW50LnN0YXJ0LnN1YnRyYWN0KDEsICdkYXknKVxuXHRcdFx0Y29uc3QgdGVybWluYXRpb25EYXRlID0gZGF5QmVmb3JlVGFyZ2V0LmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXG5cdFx0XHQvLyBVcGRhdGUgb3JpZ2luYWwgc2VyaWVzIHdpdGggVU5USUwgdG8gZW5kIGJlZm9yZSB0YXJnZXQgZGF0ZVxuXHRcdFx0Y29uc3QgdGVybWluYXRlZEV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdHJydWxlOiB7XG5cdFx0XHRcdFx0Li4uYmFzZUV2ZW50LnJydWxlLFxuXHRcdFx0XHRcdHVudGlsOiB0ZXJtaW5hdGlvbkRhdGUsXG5cdFx0XHRcdH0sXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHRlcm1pbmF0ZWRFdmVudFxuXG5cdFx0XHQvLyBDcmVhdGUgbmV3IHNlcmllcyBzdGFydGluZyBmcm9tIHRhcmdldCBkYXRlXG5cdFx0XHRjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gYmFzZUV2ZW50LmVuZC5kaWZmKGJhc2VFdmVudC5zdGFydClcblx0XHRcdGNvbnN0IG5ld1Nlcmllc1N0YXJ0VGltZSA9IHVwZGF0ZXMuc3RhcnQgfHwgdGFyZ2V0RXZlbnQuc3RhcnRcblx0XHRcdGNvbnN0IG5ld1Nlcmllc0VuZFRpbWUgPVxuXHRcdFx0XHR1cGRhdGVzLmVuZCB8fCBuZXdTZXJpZXNTdGFydFRpbWUuYWRkKG9yaWdpbmFsRHVyYXRpb24pXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNJZCA9IGAke2Jhc2VFdmVudC5pZH1fZm9sbG93aW5nYFxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzVUlEID0gYCR7bmV3U2VyaWVzSWR9QGlsYW15LmNhbGVuZGFyYFxuXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHQuLi51cGRhdGVzLFxuXHRcdFx0XHRycnVsZToge1xuXHRcdFx0XHRcdC4uLmJhc2VFdmVudC5ycnVsZSxcblx0XHRcdFx0XHQuLi51cGRhdGVzLnJydWxlLFxuXHRcdFx0XHRcdGR0c3RhcnQ6IG5ld1Nlcmllc1N0YXJ0VGltZS50b0RhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0aWQ6IG5ld1Nlcmllc0lkLFxuXHRcdFx0XHR1aWQ6IG5ld1Nlcmllc1VJRCwgLy8gTmV3IFVJRCBmb3IgbmV3IHNlcmllc1xuXHRcdFx0XHRzdGFydDogbmV3U2VyaWVzU3RhcnRUaW1lLFxuXHRcdFx0XHRlbmQ6IG5ld1Nlcmllc0VuZFRpbWUsXG5cdFx0XHRcdHJlY3VycmVuY2VJZDogdW5kZWZpbmVkLCAvLyBUaGlzIGlzIGEgbmV3IGJhc2UgZXZlbnQsIG5vdCBhbiBpbnN0YW5jZVxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50cy5wdXNoKG5ld1Nlcmllc0V2ZW50KVxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdhbGwnOiB7XG5cdFx0XHQvLyBcIkFsbCBldmVudHNcIiAtIFVwZGF0ZSB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcblx0XHRcdGNvbnN0IHVwZGF0ZWRCYXNlRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0Li4udXBkYXRlcyxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG5cdFx0XHQpXG5cdH1cblxuXHRyZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuXG5pbnRlcmZhY2UgRGVsZXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG5cdHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgZGVsZXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuXHR0YXJnZXRFdmVudCxcblx0Y3VycmVudEV2ZW50cyxcblx0c2NvcGUsXG59OiBEZWxldGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Y29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXG5cdC8vIEZpbmQgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50XG5cdGNvbnN0IGJhc2VFdmVudEluZGV4ID0gdXBkYXRlZEV2ZW50cy5maW5kSW5kZXgoKGUpID0+IHtcblx0XHRjb25zdCBwYXJlbnRVaWQgPSBlLnVpZCB8fCBgJHtlLmlkfUBpbGFteS5jYWxlbmRhcmBcblx0XHRyZXR1cm4gcGFyZW50VWlkID09PSB0YXJnZXRFdmVudC51aWQgJiYgZS5ycnVsZSAmJiAhZS5yZWN1cnJlbmNlSWRcblx0fSlcblxuXHRpZiAoYmFzZUV2ZW50SW5kZXggPT09IC0xKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdCYXNlIHJlY3VycmluZyBldmVudCBub3QgZm91bmQnKVxuXHR9XG5cblx0Y29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuXHRzd2l0Y2ggKHNjb3BlKSB7XG5cdFx0Y2FzZSAndGhpcyc6IHtcblx0XHRcdC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGV4Y2x1ZGUgdGhpcyBvY2N1cnJlbmNlXG5cdFx0XHRjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0Y29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cblx0XHRcdGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuXHRcdFx0Y29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHsgLi4uYmFzZUV2ZW50LCBleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyB9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHVwZGF0ZWRCYXNlRXZlbnRcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y2FzZSAnZm9sbG93aW5nJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGFuZCBmb2xsb3dpbmdcIiAtIFRlcm1pbmF0ZSBzZXJpZXMgd2l0aCBVTlRJTCBiZWZvcmUgdGFyZ2V0IGRhdGVcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSB0ZXJtaW5hdGlvbiBkYXRlOiBkYXkgYmVmb3JlIHRhcmdldCB3aXRoIGVuZCBvZiBkYXkgdGltZVxuXHRcdFx0Ly8gVGhpcyBlbnN1cmVzIHRoZSBsYXN0IG9jY3VycmVuY2UgYmVmb3JlIHRhcmdldCBpcyBpbmNsdWRlZCBpbiB0aGUgdGVybWluYXRlZCBzZXJpZXNcblx0XHRcdGNvbnN0IGRheUJlZm9yZVRhcmdldCA9IHRhcmdldEV2ZW50LnN0YXJ0LnN1YnRyYWN0KDEsICdkYXknKVxuXHRcdFx0Y29uc3QgdGVybWluYXRpb25EYXRlID0gZGF5QmVmb3JlVGFyZ2V0LmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXG5cdFx0XHRjb25zdCB0ZXJtaW5hdGVkRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0cnJ1bGU6IHtcblx0XHRcdFx0XHQuLi5iYXNlRXZlbnQucnJ1bGUsXG5cdFx0XHRcdFx0dW50aWw6IHRlcm1pbmF0aW9uRGF0ZSxcblx0XHRcdFx0fSxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdGVybWluYXRlZEV2ZW50XG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGNhc2UgJ2FsbCc6IHtcblx0XHRcdC8vIFwiQWxsIGV2ZW50c1wiIC0gUmVtb3ZlIHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllc1xuXHRcdFx0Y29uc3QgZXZlbnRzV2l0aG91dFRhcmdldFNlcmllcyA9IHVwZGF0ZWRFdmVudHMuZmlsdGVyKFxuXHRcdFx0XHQoZSkgPT4gZS51aWQgIT09IHRhcmdldEV2ZW50LnVpZFxuXHRcdFx0KVxuXHRcdFx0cmV0dXJuIGV2ZW50c1dpdGhvdXRUYXJnZXRTZXJpZXNcblx0XHR9XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG5cdFx0XHQpXG5cdH1cblxuXHRyZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgaXNCZXR3ZWVuIGZyb20gJ2RheWpzL3BsdWdpbi9pc0JldHdlZW4uanMnXG5pbXBvcnQgaXNTYW1lT3JBZnRlciBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JBZnRlci5qcydcbmltcG9ydCBpc1NhbWVPckJlZm9yZSBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JCZWZvcmUuanMnXG5pbXBvcnQgbG9jYWxlRGF0YSBmcm9tICdkYXlqcy9wbHVnaW4vbG9jYWxlRGF0YS5qcydcbmltcG9ydCBtaW5NYXggZnJvbSAnZGF5anMvcGx1Z2luL21pbk1heC5qcydcbmltcG9ydCB0aW1lem9uZSBmcm9tICdkYXlqcy9wbHVnaW4vdGltZXpvbmUuanMnXG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMuanMnXG5pbXBvcnQgd2Vla2RheSBmcm9tICdkYXlqcy9wbHVnaW4vd2Vla2RheS5qcydcbmltcG9ydCB3ZWVrT2ZZZWFyIGZyb20gJ2RheWpzL3BsdWdpbi93ZWVrT2ZZZWFyLmpzJ1xuXG4vLyBFeHRlbmQgZGF5anMgd2l0aCBwbHVnaW5zXG5kYXlqcy5leHRlbmQod2Vla2RheSlcbmRheWpzLmV4dGVuZCh3ZWVrT2ZZZWFyKVxuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQWZ0ZXIpXG5kYXlqcy5leHRlbmQoaXNTYW1lT3JCZWZvcmUpXG5kYXlqcy5leHRlbmQoaXNCZXR3ZWVuKVxuZGF5anMuZXh0ZW5kKG1pbk1heClcbmRheWpzLmV4dGVuZCh0aW1lem9uZSlcbmRheWpzLmV4dGVuZCh1dGMpXG5kYXlqcy5leHRlbmQobG9jYWxlRGF0YSlcblxuZXhwb3J0IGRlZmF1bHQgZGF5anNcbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDbGFzc1ZhbHVlIH0gZnJvbSAnY2xzeCdcbmltcG9ydCB7IGNsc3ggfSBmcm9tICdjbHN4J1xuaW1wb3J0IHsgdHdNZXJnZSB9IGZyb20gJ3RhaWx3aW5kLW1lcmdlJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgZnVuY3Rpb24gY24oLi4uaW5wdXRzOiBDbGFzc1ZhbHVlW10pIHtcblx0cmV0dXJuIHR3TWVyZ2UoY2xzeChpbnB1dHMpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2FmZURhdGUoXG5cdGRhdGU6IGRheWpzLkRheWpzIHwgRGF0ZSB8IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogZGF5anMuRGF5anMgfCB1bmRlZmluZWQge1xuXHRpZiAoZGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZFxuXHR9XG5cdGlmIChkYXlqcy5pc0RheWpzKGRhdGUpKSB7XG5cdFx0cmV0dXJuIGRhdGVcblx0fVxuXHRjb25zdCBwYXJzZWREYXRlID0gZGF5anMoZGF0ZSlcblx0cmV0dXJuIHBhcnNlZERhdGUuaXNWYWxpZCgpID8gcGFyc2VkRGF0ZSA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgY29uc3Qgb21pdEtleXMgPSA8VCBleHRlbmRzIG9iamVjdCwgSyBleHRlbmRzIGtleW9mIFQ+KFxuXHRvYmo6IFQsXG5cdGtleXM6IEtbXVxuKTogT21pdDxULCBLPiA9PiB7XG5cdGNvbnN0IHJlc3VsdCA9IHsgLi4ub2JqIH1cblx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdGRlbGV0ZSByZXN1bHRba2V5XVxuXHR9XG5cdHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGNhbGVuZGFyIGV2ZW50cyBmcm9tIHB1YmxpYy1mYWNpbmcgZm9ybWF0IHRvIGludGVybmFsIGZvcm1hdC5cbiAqIENvbnZlcnRzIGZsZXhpYmxlIGRhdGUgdHlwZXMgKGRheWpzLCBEYXRlLCBzdHJpbmcpIHRvIHN0cmljdCBkYXlqcyBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBldmVudHMgLSBBcnJheSBvZiBjYWxlbmRhciBldmVudHMgd2l0aCBmbGV4aWJsZSBkYXRlIHR5cGVzXG4gKiBAcmV0dXJucyBOb3JtYWxpemVkIGFycmF5IG9mIGNhbGVuZGFyIGV2ZW50cyB3aXRoIGRheWpzIGRhdGVzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlZ3VsYXIgY2FsZW5kYXIgZXZlbnRzXG4gKiBjb25zdCBldmVudHMgPSBub3JtYWxpemVFdmVudHM8SWxhbXlDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4ocHJvcEV2ZW50cylcbiAqXG4gKiAvLyBSZXNvdXJjZSBjYWxlbmRhciBldmVudHNcbiAqIGNvbnN0IHJlc291cmNlRXZlbnRzID0gbm9ybWFsaXplRXZlbnRzPElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4ocHJvcEV2ZW50cylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUV2ZW50czxcblx0VElucHV0IGV4dGVuZHMge1xuXHRcdHN0YXJ0OiBkYXlqcy5EYXlqcyB8IERhdGUgfCBzdHJpbmdcblx0XHRlbmQ6IGRheWpzLkRheWpzIHwgRGF0ZSB8IHN0cmluZ1xuXHR9LFxuXHRUT3V0cHV0LFxuPihldmVudHM6IFRJbnB1dFtdIHwgdW5kZWZpbmVkKTogVE91dHB1dFtdIHtcblx0aWYgKCFldmVudHMgfHwgIWV2ZW50cy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gW11cblx0fVxuXG5cdHJldHVybiBldmVudHMubWFwKChldmVudCkgPT4ge1xuXHRcdHJldHVybiB7XG5cdFx0XHQuLi5ldmVudCxcblx0XHRcdHN0YXJ0OiBkYXlqcy5pc0RheWpzKGV2ZW50LnN0YXJ0KSA/IGV2ZW50LnN0YXJ0IDogZGF5anMoZXZlbnQuc3RhcnQpLFxuXHRcdFx0ZW5kOiBkYXlqcy5pc0RheWpzKGV2ZW50LmVuZCkgPyBldmVudC5lbmQgOiBkYXlqcyhldmVudC5lbmQpLFxuXHRcdH0gYXMgVE91dHB1dFxuXHR9KVxufVxuIiwKICAgICJpbXBvcnQge1xuXHRBbmltYXRlUHJlc2VuY2UsXG5cdHR5cGUgSFRNTE1vdGlvblByb3BzLFxuXHRtb3Rpb24sXG5cdHR5cGUgVmFyaWFudHMsXG59IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgQW5pbWF0ZWRTZWN0aW9uUHJvcHNcblx0ZXh0ZW5kcyBPbWl0PEhUTUxNb3Rpb25Qcm9wczwnZGl2Jz4sICdjaGlsZHJlbicgfCAnbGF5b3V0JyB8ICdsYXlvdXRJZCc+IHtcblx0Y2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxuXHR0cmFuc2l0aW9uS2V5OiBzdHJpbmdcblx0ZGVsYXk/OiBudW1iZXJcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGRpcmVjdGlvbj86ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCdcblx0bGF5b3V0PzogYm9vbGVhbiB8ICdwb3NpdGlvbicgfCAnc2l6ZScgfCAncHJlc2VydmUtYXNwZWN0J1xuXHRsYXlvdXRJZD86IHN0cmluZ1xuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG59XG5cbmNvbnN0IHZhcmlhbnRzOiBWYXJpYW50cyA9IHtcblx0aGlkZGVuOiAoeyBkaXJlY3Rpb24gfTogeyBkaXJlY3Rpb246ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgfSkgPT4gKHtcblx0XHRvcGFjaXR5OiAwLFxuXHRcdHg6IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gMTAgOiAwLFxuXHRcdHk6IGRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/IC0xMCA6IDAsXG5cdH0pLFxuXHR2aXNpYmxlOiAoeyBkZWxheSB9OiB7IGRlbGF5OiBudW1iZXIgfSkgPT4gKHtcblx0XHRvcGFjaXR5OiAxLFxuXHRcdHg6IDAsXG5cdFx0eTogMCxcblx0XHR0cmFuc2l0aW9uOiB7IGR1cmF0aW9uOiAwLjIsIGVhc2U6IFswLjQsIDAsIDAuMiwgMV0sIGRlbGF5IH0sXG5cdH0pLFxuXHRleGl0OiAoeyBkaXJlY3Rpb24gfTogeyBkaXJlY3Rpb246ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgfSkgPT4gKHtcblx0XHRvcGFjaXR5OiAwLFxuXHRcdHg6IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gLTEwIDogMCxcblx0XHR5OiBkaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcgPyAtMTAgOiAwLFxuXHRcdHRyYW5zaXRpb246IHsgZHVyYXRpb246IDAuMTUgfSxcblx0fSksXG59XG5cbmV4cG9ydCBjb25zdCBBbmltYXRlZFNlY3Rpb246IFJlYWN0LkZDPEFuaW1hdGVkU2VjdGlvblByb3BzPiA9ICh7XG5cdGNoaWxkcmVuLFxuXHR0cmFuc2l0aW9uS2V5LFxuXHRkZWxheSA9IDAsXG5cdGNsYXNzTmFtZSxcblx0ZGlyZWN0aW9uID0gJ3ZlcnRpY2FsJyxcblx0bGF5b3V0LFxuXHRsYXlvdXRJZCxcblx0J2RhdGEtdGVzdGlkJzogdGVzdElkLFxuXHRyZWYsXG5cdC4uLnByb3BzXG59KSA9PiAoXG5cdDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cblx0XHQ8bW90aW9uLmRpdlxuXHRcdFx0YW5pbWF0ZT1cInZpc2libGVcIlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignaW5saW5lLWJsb2NrIHctZnVsbCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRjdXN0b209e3sgZGVsYXksIGRpcmVjdGlvbiB9fVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e3Rlc3RJZH1cblx0XHRcdGV4aXQ9XCJleGl0XCJcblx0XHRcdGluaXRpYWw9XCJoaWRkZW5cIlxuXHRcdFx0a2V5PXt0cmFuc2l0aW9uS2V5fVxuXHRcdFx0bGF5b3V0PXtsYXlvdXR9XG5cdFx0XHRsYXlvdXRJZD17bGF5b3V0SWR9XG5cdFx0XHRyZWY9e3JlZn1cblx0XHRcdHZhcmlhbnRzPXt2YXJpYW50c31cblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9tb3Rpb24uZGl2PlxuXHQ8L0FuaW1hdGVQcmVzZW5jZT5cbilcblxuQW5pbWF0ZWRTZWN0aW9uLmRpc3BsYXlOYW1lID0gJ0FuaW1hdGVkU2VjdGlvbidcbiIsCiAgICAiaW1wb3J0IHR5cGUge1xuXHREcmFnQ2FuY2VsRXZlbnQsXG5cdERyYWdFbmRFdmVudCxcblx0RHJhZ1N0YXJ0RXZlbnQsXG59IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQge1xuXHREbmRDb250ZXh0LFxuXHRNb3VzZVNlbnNvcixcblx0cG9pbnRlcldpdGhpbixcblx0VG91Y2hTZW5zb3IsXG5cdHVzZVNlbnNvcixcblx0dXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXREaWFsb2cgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgaXNSZWN1cnJpbmdFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBnZXRVcGRhdGVkRXZlbnQgfSBmcm9tICcuL2RuZC11dGlscydcbmltcG9ydCB7IEV2ZW50RHJhZ092ZXJsYXkgfSBmcm9tICcuL2V2ZW50LWRyYWctb3ZlcmxheSdcblxuaW50ZXJmYWNlIENhbGVuZGFyRG5kQ29udGV4dFByb3BzIHtcblx0Y2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2FsZW5kYXJEbmRDb250ZXh0KHsgY2hpbGRyZW4gfTogQ2FsZW5kYXJEbmRDb250ZXh0UHJvcHMpIHtcblx0Y29uc3QgYWN0aXZlRXZlbnRSZWYgPSB1c2VSZWY8Q2FsZW5kYXJFdmVudD4obnVsbClcblx0Y29uc3QgZHJhZ092ZXJsYXlSZWYgPSB1c2VSZWY8e1xuXHRcdHNldEFjdGl2ZUV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0fT4obnVsbClcblxuXHRjb25zdCB7IHVwZGF0ZUV2ZW50LCB1cGRhdGVSZWN1cnJpbmdFdmVudCwgZGlzYWJsZURyYWdBbmREcm9wIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoe1xuXHRcdFx0dXBkYXRlRXZlbnQ6IGNvbnRleHQudXBkYXRlRXZlbnQsXG5cdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudDogY29udGV4dC51cGRhdGVSZWN1cnJpbmdFdmVudCxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcDogY29udGV4dC5kaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0fSkpXG5cblx0Ly8gU3RhdGUgZm9yIHJlY3VycmluZyBldmVudCBkaWFsb2dcblx0Y29uc3QgW3JlY3VycmluZ0RpYWxvZywgc2V0UmVjdXJyaW5nRGlhbG9nXSA9IHVzZVN0YXRlPHtcblx0XHRpc09wZW46IGJvb2xlYW5cblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+IHwgbnVsbFxuXHR9Pih7XG5cdFx0aXNPcGVuOiBmYWxzZSxcblx0XHRldmVudDogbnVsbCxcblx0XHR1cGRhdGVzOiBudWxsLFxuXHR9KVxuXG5cdC8vIENvbmZpZ3VyZSBzZW5zb3JzIHdpdGggcmVkdWNlZCBhY3RpdmF0aW9uIGNvbnN0cmFpbnRzIGZvciBlYXNpZXIgZHJhZ2dpbmdcblx0Y29uc3QgbW91c2VTZW5zb3IgPSB1c2VTZW5zb3IoTW91c2VTZW5zb3IsIHtcblx0XHQvLyBSZXF1aXJlIG1pbmltYWwgbW92ZW1lbnQgYmVmb3JlIGFjdGl2YXRpbmdcblx0XHRhY3RpdmF0aW9uQ29uc3RyYWludDoge1xuXHRcdFx0ZGlzdGFuY2U6IDIsXG5cdFx0fSxcblx0fSlcblxuXHRjb25zdCB0b3VjaFNlbnNvciA9IHVzZVNlbnNvcihUb3VjaFNlbnNvciwge1xuXHRcdC8vIFJlZHVjZSBkZWxheSBmb3IgdG91Y2ggZGV2aWNlc1xuXHRcdGFjdGl2YXRpb25Db25zdHJhaW50OiB7XG5cdFx0XHRkZWxheTogMTAwLFxuXHRcdFx0dG9sZXJhbmNlOiA1LFxuXHRcdH0sXG5cdH0pXG5cblx0Y29uc3Qgc2Vuc29ycyA9IHVzZVNlbnNvcnMobW91c2VTZW5zb3IsIHRvdWNoU2Vuc29yKVxuXG5cdC8vIEhlbHBlciBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBhY3R1YWwgZXZlbnQgdXBkYXRlXG5cdGNvbnN0IHBlcmZvcm1FdmVudFVwZGF0ZSA9IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdCkgPT4ge1xuXHRcdC8vIFZhbGlkYXRlIGlucHV0c1xuXHRcdGlmICghZXZlbnQgfHwgIWV2ZW50LmlkKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoIXVwZGF0ZXMgfHwgT2JqZWN0LmtleXModXBkYXRlcykubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoaXNSZWN1cnJpbmdFdmVudChldmVudCkpIHtcblx0XHRcdC8vIFNob3cgZGlhbG9nIGZvciByZWN1cnJpbmcgZXZlbnRzXG5cdFx0XHRzZXRSZWN1cnJpbmdEaWFsb2coe1xuXHRcdFx0XHRpc09wZW46IHRydWUsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHR1cGRhdGVzLFxuXHRcdFx0fSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRGlyZWN0bHkgdXBkYXRlIHJlZ3VsYXIgZXZlbnRzXG5cdFx0XHR1cGRhdGVFdmVudChldmVudC5pZCwgdXBkYXRlcylcblx0XHR9XG5cdH1cblxuXHQvLyBIYW5kbGUgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZyBjb25maXJtYXRpb25cblx0Y29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDb25maXJtID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0aWYgKCFyZWN1cnJpbmdEaWFsb2cuZXZlbnQgfHwgIXJlY3VycmluZ0RpYWxvZy51cGRhdGVzKSB7XG5cdFx0XHRzZXRSZWN1cnJpbmdEaWFsb2coeyBpc09wZW46IGZhbHNlLCBldmVudDogbnVsbCwgdXBkYXRlczogbnVsbCB9KVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50KHJlY3VycmluZ0RpYWxvZy5ldmVudCwgcmVjdXJyaW5nRGlhbG9nLnVwZGF0ZXMsIHtcblx0XHRcdFx0c2NvcGUsXG5cdFx0XHRcdGV2ZW50RGF0ZTogcmVjdXJyaW5nRGlhbG9nLmV2ZW50LnN0YXJ0LFxuXHRcdFx0fSlcblx0XHR9IGNhdGNoIHtcblx0XHRcdC8vIFNpbGVudGx5IGhhbmRsZSBlcnJvciBhbmQgcmVzZXQgZGlhbG9nIHN0YXRlXG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG5cdFx0fVxuXHR9XG5cblx0Ly8gSGFuZGxlIHJlY3VycmluZyBldmVudCBkaWFsb2cgY2xvc2Vcblx0Y29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDbG9zZSA9ICgpID0+IHtcblx0XHRzZXRSZWN1cnJpbmdEaWFsb2coeyBpc09wZW46IGZhbHNlLCBldmVudDogbnVsbCwgdXBkYXRlczogbnVsbCB9KVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ1N0YXJ0ID0gKGV2ZW50OiBEcmFnU3RhcnRFdmVudCkgPT4ge1xuXHRcdGNvbnN0IHsgYWN0aXZlIH0gPSBldmVudFxuXG5cdFx0Ly8gU2V0IHRoZSBhY3RpdmUgZXZlbnQgYmFzZWQgb24gdGhlIGV2ZW50IGRhdGFcblx0XHRpZiAoYWN0aXZlLmRhdGEuY3VycmVudD8udHlwZSA9PT0gJ2NhbGVuZGFyLWV2ZW50Jykge1xuXHRcdFx0ZHJhZ092ZXJsYXlSZWYuY3VycmVudD8uc2V0QWN0aXZlRXZlbnQoYWN0aXZlLmRhdGEuY3VycmVudC5ldmVudClcblx0XHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBhY3RpdmUuZGF0YS5jdXJyZW50LmV2ZW50XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ0VuZCA9IChldmVudDogRHJhZ0VuZEV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgdXBkYXRlZEV2ZW50ID0gZ2V0VXBkYXRlZEV2ZW50KGV2ZW50LCBhY3RpdmVFdmVudFJlZi5jdXJyZW50KVxuXHRcdGlmICh1cGRhdGVkRXZlbnQpIHtcblx0XHRcdGNvbnN0IHsgYWN0aXZlRXZlbnQsIHVwZGF0ZXMgfSA9IHVwZGF0ZWRFdmVudFxuXHRcdFx0cGVyZm9ybUV2ZW50VXBkYXRlKGFjdGl2ZUV2ZW50LCB1cGRhdGVzKVxuXHRcdH1cblxuXHRcdC8vIENsZWFyIHRoZSBhY3RpdmUgZXZlbnQgcmVmZXJlbmNlXG5cdFx0YWN0aXZlRXZlbnRSZWYuY3VycmVudCA9IG51bGxcblx0XHRkcmFnT3ZlcmxheVJlZi5jdXJyZW50Py5zZXRBY3RpdmVFdmVudChudWxsKVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ0NhbmNlbCA9IChfZXZlbnQ6IERyYWdDYW5jZWxFdmVudCkgPT4ge1xuXHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBudWxsXG5cdH1cblxuXHQvLyBJZiBkcmFnIGFuZCBkcm9wIGlzIGRpc2FibGVkLCBqdXN0IHJldHVybiBjaGlsZHJlbiB3aXRob3V0IERuZENvbnRleHRcblx0aWYgKGRpc2FibGVEcmFnQW5kRHJvcCkge1xuXHRcdHJldHVybiBjaGlsZHJlbiBhcyBSZWFjdC5SZWFjdEVsZW1lbnRcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxEbmRDb250ZXh0XG5cdFx0XHRcdGNvbGxpc2lvbkRldGVjdGlvbj17cG9pbnRlcldpdGhpbn1cblx0XHRcdFx0b25EcmFnQ2FuY2VsPXtoYW5kbGVEcmFnQ2FuY2VsfVxuXHRcdFx0XHRvbkRyYWdFbmQ9e2hhbmRsZURyYWdFbmR9XG5cdFx0XHRcdG9uRHJhZ1N0YXJ0PXtoYW5kbGVEcmFnU3RhcnR9XG5cdFx0XHRcdHNlbnNvcnM9e3NlbnNvcnN9XG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PEV2ZW50RHJhZ092ZXJsYXkgcmVmPXtkcmFnT3ZlcmxheVJlZn0gLz5cblx0XHRcdDwvRG5kQ29udGV4dD5cblxuXHRcdFx0ey8qIFJlY3VycmluZyBldmVudCBlZGl0IGRpYWxvZyAqL31cblx0XHRcdDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuXHRcdFx0XHRldmVudFRpdGxlPXtyZWN1cnJpbmdEaWFsb2cuZXZlbnQ/LnRpdGxlIHx8ICcnfVxuXHRcdFx0XHRpc09wZW49e3JlY3VycmluZ0RpYWxvZy5pc09wZW59XG5cdFx0XHRcdG9uQ2xvc2U9e2hhbmRsZVJlY3VycmluZ0V2ZW50Q2xvc2V9XG5cdFx0XHRcdG9uQ29uZmlybT17aGFuZGxlUmVjdXJyaW5nRXZlbnRDb25maXJtfVxuXHRcdFx0XHRvcGVyYXRpb25UeXBlPVwiZWRpdFwiXG5cdFx0XHQvPlxuXHRcdDwvPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IFNsb3QgfSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2xvdCdcbmltcG9ydCB0eXBlIHsgVmFyaWFudFByb3BzIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5J1xuaW1wb3J0IHsgY3ZhIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgYnV0dG9uVmFyaWFudHMgPSBjdmEoXG5cdFwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHdoaXRlc3BhY2Utbm93cmFwIHJvdW5kZWQtbWQgdGV4dC1zbSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWFsbCBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNCBzaHJpbmstMCBbJl9zdmddOnNocmluay0wIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmVcIixcblx0e1xuXHRcdHZhcmlhbnRzOiB7XG5cdFx0XHR2YXJpYW50OiB7XG5cdFx0XHRcdGRlZmF1bHQ6ICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXByaW1hcnkvOTAnLFxuXHRcdFx0XHRkZXN0cnVjdGl2ZTpcblx0XHRcdFx0XHQnYmctZGVzdHJ1Y3RpdmUgdGV4dC13aGl0ZSBob3ZlcjpiZy1kZXN0cnVjdGl2ZS85MCBmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazpmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvNDAgZGFyazpiZy1kZXN0cnVjdGl2ZS82MCcsXG5cdFx0XHRcdG91dGxpbmU6XG5cdFx0XHRcdFx0J2JvcmRlciBiZy1iYWNrZ3JvdW5kIHNoYWRvdy14cyBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmJnLWlucHV0LzMwIGRhcms6Ym9yZGVyLWlucHV0IGRhcms6aG92ZXI6YmctaW5wdXQvNTAnLFxuXHRcdFx0XHRzZWNvbmRhcnk6XG5cdFx0XHRcdFx0J2JnLXNlY29uZGFyeSB0ZXh0LXNlY29uZGFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXNlY29uZGFyeS84MCcsXG5cdFx0XHRcdGdob3N0OlxuXHRcdFx0XHRcdCdob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmhvdmVyOmJnLWFjY2VudC81MCcsXG5cdFx0XHRcdGxpbms6ICd0ZXh0LXByaW1hcnkgdW5kZXJsaW5lLW9mZnNldC00IGhvdmVyOnVuZGVybGluZScsXG5cdFx0XHR9LFxuXHRcdFx0c2l6ZToge1xuXHRcdFx0XHRkZWZhdWx0OiAnaC05IHB4LTQgcHktMiBoYXMtWz5zdmddOnB4LTMnLFxuXHRcdFx0XHRzbTogJ2gtOCByb3VuZGVkLW1kIGdhcC0xLjUgcHgtMyBoYXMtWz5zdmddOnB4LTIuNScsXG5cdFx0XHRcdGxnOiAnaC0xMCByb3VuZGVkLW1kIHB4LTYgaGFzLVs+c3ZnXTpweC00Jyxcblx0XHRcdFx0aWNvbjogJ3NpemUtOScsXG5cdFx0XHRcdCdpY29uLXNtJzogJ3NpemUtOCcsXG5cdFx0XHRcdCdpY29uLWxnJzogJ3NpemUtMTAnLFxuXHRcdFx0fSxcblx0XHR9LFxuXHRcdGRlZmF1bHRWYXJpYW50czoge1xuXHRcdFx0dmFyaWFudDogJ2RlZmF1bHQnLFxuXHRcdFx0c2l6ZTogJ2RlZmF1bHQnLFxuXHRcdH0sXG5cdH1cbilcblxuZnVuY3Rpb24gQnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHR2YXJpYW50LFxuXHRzaXplLFxuXHRhc0NoaWxkID0gZmFsc2UsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczwnYnV0dG9uJz4gJlxuXHRWYXJpYW50UHJvcHM8dHlwZW9mIGJ1dHRvblZhcmlhbnRzPiAmIHtcblx0XHRhc0NoaWxkPzogYm9vbGVhblxuXHR9KSB7XG5cdGNvbnN0IENvbXAgPSBhc0NoaWxkID8gU2xvdCA6ICdidXR0b24nXG5cblx0cmV0dXJuIChcblx0XHQ8Q29tcFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihidXR0b25WYXJpYW50cyh7IHZhcmlhbnQsIHNpemUsIGNsYXNzTmFtZSB9KSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJidXR0b25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHsgQnV0dG9uLCBidXR0b25WYXJpYW50cyB9XG4iLAogICAgImltcG9ydCAqIGFzIERpYWxvZ1ByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtZGlhbG9nJ1xuaW1wb3J0IHsgWEljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBEaWFsb2coe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cImRpYWxvZ1wiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nVHJpZ2dlcih7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlRyaWdnZXI+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwiZGlhbG9nLXRyaWdnZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ1BvcnRhbCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlBvcnRhbD4pIHtcblx0cmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Nsb3NlKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ2xvc2U+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLkNsb3NlIGRhdGEtc2xvdD1cImRpYWxvZy1jbG9zZVwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nT3ZlcmxheSh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuT3ZlcmxheT4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUHJpbWl0aXZlLk92ZXJsYXlcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBmaXhlZCBpbnNldC0wIHotNTAgYmctYmxhY2svNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctb3ZlcmxheVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dDb250ZW50KHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ29udGVudD4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIj5cblx0XHRcdDxEaWFsb2dPdmVybGF5IC8+XG5cdFx0XHQ8RGlhbG9nUHJpbWl0aXZlLkNvbnRlbnRcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnYmctYmFja2dyb3VuZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZml4ZWQgdG9wLVs1MCVdIGxlZnQtWzUwJV0gei01MCBncmlkIHctZnVsbCBtYXgtdy1bY2FsYygxMDAlLTJyZW0pXSB0cmFuc2xhdGUteC1bLTUwJV0gdHJhbnNsYXRlLXktWy01MCVdIGdhcC00IHJvdW5kZWQtbGcgYm9yZGVyIHAtNiBzaGFkb3ctbGcgZHVyYXRpb24tMjAwIHNtOm1heC13LWxnIG1heC1oLVs5MCVdJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWNvbnRlbnRcIlxuXHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PERpYWxvZ1ByaW1pdGl2ZS5DbG9zZSBjbGFzc05hbWU9XCJyaW5nLW9mZnNldC1iYWNrZ3JvdW5kIGZvY3VzOnJpbmctcmluZyBkYXRhLVtzdGF0ZT1vcGVuXTpiZy1hY2NlbnQgZGF0YS1bc3RhdGU9b3Blbl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGFic29sdXRlIHRvcC00IHJpZ2h0LTQgcm91bmRlZC14cyBvcGFjaXR5LTcwIHRyYW5zaXRpb24tb3BhY2l0eSBob3ZlcjpvcGFjaXR5LTEwMCBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1vZmZzZXQtMiBmb2N1czpvdXRsaW5lLWhpZGRlbiBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNFwiPlxuXHRcdFx0XHRcdDxYSWNvbiAvPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cblx0XHRcdFx0PC9EaWFsb2dQcmltaXRpdmUuQ2xvc2U+XG5cdFx0XHQ8L0RpYWxvZ1ByaW1pdGl2ZS5Db250ZW50PlxuXHRcdDwvRGlhbG9nUG9ydGFsPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0hlYWRlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LWNvbCBnYXAtMiB0ZXh0LWNlbnRlciBzbTp0ZXh0LWxlZnQnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWhlYWRlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dGb290ZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgc206ZmxleC1yb3cgc206anVzdGlmeS1lbmQnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctZm9vdGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ1RpdGxlKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5UaXRsZT4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUHJpbWl0aXZlLlRpdGxlXG5cdFx0XHRjbGFzc05hbWU9e2NuKCd0ZXh0LWxnIGxlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy10aXRsZVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dEZXNjcmlwdGlvbih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuRGVzY3JpcHRpb24+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20nLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWRlc2NyaXB0aW9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ2xvc2UsXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0Rlc2NyaXB0aW9uLFxuXHREaWFsb2dGb290ZXIsXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nT3ZlcmxheSxcblx0RGlhbG9nUG9ydGFsLFxuXHREaWFsb2dUaXRsZSxcblx0RGlhbG9nVHJpZ2dlcixcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcblxuLyoqXG4gKiBHZW5lcmljIGhvb2sgdGhhdCBkZXRlY3RzIHdoaWNoIGNhbGVuZGFyIGNvbnRleHQgaXMgYXZhaWxhYmxlIGFuZCByZXR1cm5zIHNlbGVjdGVkIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0PFQ+KHNlbGVjdG9yOiAoY29udGV4dCkgPT4gVCk6IFQge1xuXHQvLyBDaGVjayBib3RoIGNvbnRleHRzIHVzaW5nIHVzZUNvbnRleHQgZGlyZWN0bHkgKG5vIGhvb2tzKVxuXHRjb25zdCByZXNvdXJjZUNvbnRleHQgPSB1c2VDb250ZXh0KFJlc291cmNlQ2FsZW5kYXJDb250ZXh0KVxuXHRjb25zdCByZWd1bGFyQ29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuXG5cdGlmIChyZXNvdXJjZUNvbnRleHQpIHtcblx0XHRyZXR1cm4gc2VsZWN0b3IocmVzb3VyY2VDb250ZXh0KVxuXHR9XG5cblx0aWYgKHJlZ3VsYXJDb250ZXh0KSB7XG5cdFx0cmV0dXJuIHNlbGVjdG9yKHJlZ3VsYXJDb250ZXh0KVxuXHR9XG5cblx0Ly8gSWYgbmVpdGhlciBjb250ZXh0IGlzIGF2YWlsYWJsZSwgdGhyb3cgYW4gZXJyb3Jcblx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdCd1c2VTbWFydENhbGVuZGFyQ29udGV4dCBtdXN0IGJlIHVzZWQgd2l0aGluIGEgQ2FsZW5kYXJQcm92aWRlciBvciBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXInXG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBFdmVudEZvcm1Qcm9wcyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7XG5cdENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlLFxuXHRDZWxsQ2xpY2tJbmZvLFxuXHRSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdE9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25LZXkgfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldywgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJDb250ZXh0VHlwZSB7XG5cdGN1cnJlbnREYXRlOiBkYXlqcy5EYXlqc1xuXHR2aWV3OiBDYWxlbmRhclZpZXdcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmF3RXZlbnRzOiBDYWxlbmRhckV2ZW50W10gLy8gVW5wcm9jZXNzZWQgZXZlbnRzIGZvciBleHBvcnRcblx0aXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG5cdHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHNlbGVjdGVkRGF0ZTogZGF5anMuRGF5anMgfCBudWxsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIgLy8gMCBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cblx0c2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcblx0c2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0dG9kYXk6ICgpID0+IHZvaWRcblx0YWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHR1cGRhdGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnQ6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0ZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdG9wZW5FdmVudEZvcm06IChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG5cdGdldEV2ZW50c0ZvckRhdGVSYW5nZTogKFxuXHRcdHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsXG5cdFx0ZW5kRGF0ZTogZGF5anMuRGF5anNcblx0KSA9PiBDYWxlbmRhckV2ZW50W11cblx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0b25FdmVudENsaWNrOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DZWxsQ2xpY2s6IChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB2b2lkXG5cdGN1cnJlbnRMb2NhbGU/OiBzdHJpbmdcblx0ZGlzYWJsZUNlbGxDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZUV2ZW50Q2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVEcmFnQW5kRHJvcD86IGJvb2xlYW5cblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0ZXZlbnRTcGFjaW5nOiBudW1iZXJcblx0c3RpY2t5Vmlld0hlYWRlcjogYm9vbGVhblxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lOiBzdHJpbmdcblx0aGVhZGVyQ29tcG9uZW50PzogUmVhY3QuUmVhY3ROb2RlIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY29tcG9uZW50XG5cdGhlYWRlckNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNsYXNzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHJlbmRlckV2ZW50Rm9ybT86IChwcm9wczogRXZlbnRGb3JtUHJvcHMpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHQvLyBUcmFuc2xhdGlvbiBmdW5jdGlvblxuXHR0OiAoa2V5OiBUcmFuc2xhdGlvbktleSkgPT4gc3RyaW5nXG5cdHRpbWVGb3JtYXQ6IFRpbWVGb3JtYXRcblx0Y2xhc3Nlc092ZXJyaWRlPzogQ2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGVcblx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3I/OiAoXG5cdFx0cHJvcHM6IFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHNcblx0KSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBDYWxlbmRhckNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8Q2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4gPVxuXHRjcmVhdGVDb250ZXh0PENhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuZXhwb3J0IGNvbnN0IHVzZUNhbGVuZGFyQ29udGV4dCA9ICgpOiBDYWxlbmRhckNvbnRleHRUeXBlID0+IHtcblx0Y29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuXHRpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCd1c2VDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIENhbGVuZGFyUHJvdmlkZXInKVxuXHR9XG5cdHJldHVybiBjb250ZXh0XG59XG5cbi8qKlxuICogU2ltcGxpZmllZCBjYWxlbmRhciBjb250ZXh0IHR5cGUgZm9yIGV4dGVybmFsIHVzZVxuICogQ29udGFpbnMgb25seSB0aGUgbW9zdCBjb21tb25seSB1c2VkIGNhbGVuZGFyIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB7XG5cdHJlYWRvbmx5IGN1cnJlbnREYXRlOiBkYXlqcy5EYXlqc1xuXHRyZWFkb25seSB2aWV3OiBDYWxlbmRhclZpZXdcblx0cmVhZG9ubHkgZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmVhZG9ubHkgaXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG5cdHJlYWRvbmx5IHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHJlYWRvbmx5IHNlbGVjdGVkRGF0ZTogZGF5anMuRGF5anMgfCBudWxsXG5cdHJlYWRvbmx5IGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcblx0cmVhZG9ubHkgc2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRyZWFkb25seSBzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcblx0cmVhZG9ubHkgc2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRyZWFkb25seSBuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHJlYWRvbmx5IHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgdG9kYXk6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgYWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRyZWFkb25seSB1cGRhdGVFdmVudDogKFxuXHRcdGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcixcblx0XHRldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHQpID0+IHZvaWRcblx0cmVhZG9ubHkgZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0cmVhZG9ubHkgb3BlbkV2ZW50Rm9ybTogKGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0cmVhZG9ubHkgY2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgYnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbn1cblxuZXhwb3J0IGNvbnN0IHVzZUlsYW15Q2FsZW5kYXJDb250ZXh0ID0gKCk6IFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuID0+IHtcblx0Y29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuXHRpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0J3VzZUlsYW15Q2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBDYWxlbmRhclByb3ZpZGVyJ1xuXHRcdClcblx0fVxuXHRyZXR1cm4ge1xuXHRcdGN1cnJlbnREYXRlOiBjb250ZXh0LmN1cnJlbnREYXRlLFxuXHRcdHZpZXc6IGNvbnRleHQudmlldyxcblx0XHRldmVudHM6IGNvbnRleHQuZXZlbnRzLFxuXHRcdGlzRXZlbnRGb3JtT3BlbjogY29udGV4dC5pc0V2ZW50Rm9ybU9wZW4sXG5cdFx0c2VsZWN0ZWRFdmVudDogY29udGV4dC5zZWxlY3RlZEV2ZW50LFxuXHRcdHNlbGVjdGVkRGF0ZTogY29udGV4dC5zZWxlY3RlZERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWs6IGNvbnRleHQuZmlyc3REYXlPZldlZWssXG5cdFx0c2V0Q3VycmVudERhdGU6IGNvbnRleHQuc2V0Q3VycmVudERhdGUsXG5cdFx0c2VsZWN0RGF0ZTogY29udGV4dC5zZWxlY3REYXRlLFxuXHRcdHNldFZpZXc6IGNvbnRleHQuc2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kOiBjb250ZXh0Lm5leHRQZXJpb2QsXG5cdFx0cHJldlBlcmlvZDogY29udGV4dC5wcmV2UGVyaW9kLFxuXHRcdHRvZGF5OiBjb250ZXh0LnRvZGF5LFxuXHRcdGFkZEV2ZW50OiBjb250ZXh0LmFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50OiBjb250ZXh0LmRlbGV0ZUV2ZW50LFxuXHRcdG9wZW5FdmVudEZvcm06IGNvbnRleHQub3BlbkV2ZW50Rm9ybSxcblx0XHRjbG9zZUV2ZW50Rm9ybTogY29udGV4dC5jbG9zZUV2ZW50Rm9ybSxcblx0XHRidXNpbmVzc0hvdXJzOiBjb250ZXh0LmJ1c2luZXNzSG91cnMsXG5cdH0gYXMgY29uc3Rcbn1cbiIsCiAgICAiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNvbnRleHRUeXBlLFxuXHRVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybixcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgdHlwZSB7IENlbGxDbGlja0luZm8gfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlIGV4dGVuZHMgQ2FsZW5kYXJDb250ZXh0VHlwZSB7XG5cdC8vIFJlc291cmNlLXNwZWNpZmljIHN0YXRlXG5cdHJlc291cmNlczogUmVzb3VyY2VbXVxuXHR2aXNpYmxlUmVzb3VyY2VzOiBTZXQ8c3RyaW5nIHwgbnVtYmVyPlxuXG5cdC8vIFJlc291cmNlIHV0aWxpdGllc1xuXHRnZXRFdmVudHNGb3JSZXNvdXJjZTogKHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcikgPT4gQ2FsZW5kYXJFdmVudFtdXG5cdGdldEV2ZW50c0ZvclJlc291cmNlczogKHJlc291cmNlSWRzOiAoc3RyaW5nIHwgbnVtYmVyKVtdKSA9PiBDYWxlbmRhckV2ZW50W11cblx0Z2V0UmVzb3VyY2VCeUlkOiAocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBSZXNvdXJjZSB8IHVuZGVmaW5lZFxuXHRnZXRWaXNpYmxlUmVzb3VyY2VzOiAoKSA9PiBSZXNvdXJjZVtdXG5cblx0Ly8gQ3Jvc3MtcmVzb3VyY2UgZXZlbnQgdXRpbGl0aWVzXG5cdGlzRXZlbnRDcm9zc1Jlc291cmNlOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IGJvb2xlYW5cblx0Z2V0RXZlbnRSZXNvdXJjZUlkczogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiAoc3RyaW5nIHwgbnVtYmVyKVtdXG5cblx0Ly8gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIGZyb20gY2FsZW5kYXIgY29udGV4dFxuXHRvbkV2ZW50Q2xpY2s6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkNlbGxDbGljazogKGluZm86IENlbGxDbGlja0luZm8pID0+IHZvaWRcblx0cmVuZGVyUmVzb3VyY2U/OiAocmVzb3VyY2U6IFJlc291cmNlKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0b3JpZW50YXRpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCdcbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0OiBSZWFjdC5Db250ZXh0PFxuXHRSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWRcbj4gPSBjcmVhdGVDb250ZXh0PFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuXG5leHBvcnQgY29uc3QgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgPSAoKTogUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlID0+IHtcblx0Y29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoUmVzb3VyY2VDYWxlbmRhckNvbnRleHQpXG5cdGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHQndXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlcidcblx0XHQpXG5cdH1cblx0cmV0dXJuIGNvbnRleHRcbn1cblxuLyoqXG4gKiBTaW1wbGlmaWVkIHJlc291cmNlIGNhbGVuZGFyIGNvbnRleHQgdHlwZSBmb3IgZXh0ZXJuYWwgdXNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlSWxhbXlSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFJldHVyblxuXHRleHRlbmRzIFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuIHtcblx0cmVhZG9ubHkgZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmVhZG9ubHkgcmVzb3VyY2VzOiBSZXNvdXJjZVtdXG5cdHJlYWRvbmx5IGdldEV2ZW50c0ZvclJlc291cmNlOiAoXG5cdFx0cmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyXG5cdCkgPT4gQ2FsZW5kYXJFdmVudFtdXG59XG5cbmV4cG9ydCBjb25zdCB1c2VJbGFteVJlc291cmNlQ2FsZW5kYXJDb250ZXh0ID1cblx0KCk6IFVzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHRSZXR1cm4gPT4ge1xuXHRcdGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KFJlc291cmNlQ2FsZW5kYXJDb250ZXh0KVxuXHRcdGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0J3VzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlcidcblx0XHRcdClcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdGN1cnJlbnREYXRlOiBjb250ZXh0LmN1cnJlbnREYXRlLFxuXHRcdFx0dmlldzogY29udGV4dC52aWV3LFxuXHRcdFx0ZXZlbnRzOiBjb250ZXh0LmV2ZW50cyxcblx0XHRcdHJlc291cmNlczogY29udGV4dC5yZXNvdXJjZXMsXG5cdFx0XHRpc0V2ZW50Rm9ybU9wZW46IGNvbnRleHQuaXNFdmVudEZvcm1PcGVuLFxuXHRcdFx0c2VsZWN0ZWRFdmVudDogY29udGV4dC5zZWxlY3RlZEV2ZW50LFxuXHRcdFx0c2VsZWN0ZWREYXRlOiBjb250ZXh0LnNlbGVjdGVkRGF0ZSxcblx0XHRcdGZpcnN0RGF5T2ZXZWVrOiBjb250ZXh0LmZpcnN0RGF5T2ZXZWVrLFxuXHRcdFx0c2V0Q3VycmVudERhdGU6IGNvbnRleHQuc2V0Q3VycmVudERhdGUsXG5cdFx0XHRzZWxlY3REYXRlOiBjb250ZXh0LnNlbGVjdERhdGUsXG5cdFx0XHRzZXRWaWV3OiBjb250ZXh0LnNldFZpZXcsXG5cdFx0XHRuZXh0UGVyaW9kOiBjb250ZXh0Lm5leHRQZXJpb2QsXG5cdFx0XHRwcmV2UGVyaW9kOiBjb250ZXh0LnByZXZQZXJpb2QsXG5cdFx0XHR0b2RheTogY29udGV4dC50b2RheSxcblx0XHRcdGFkZEV2ZW50OiBjb250ZXh0LmFkZEV2ZW50LFxuXHRcdFx0dXBkYXRlRXZlbnQ6IGNvbnRleHQudXBkYXRlRXZlbnQsXG5cdFx0XHRkZWxldGVFdmVudDogY29udGV4dC5kZWxldGVFdmVudCxcblx0XHRcdG9wZW5FdmVudEZvcm06IGNvbnRleHQub3BlbkV2ZW50Rm9ybSxcblx0XHRcdGNsb3NlRXZlbnRGb3JtOiBjb250ZXh0LmNsb3NlRXZlbnRGb3JtLFxuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2U6IGNvbnRleHQuZ2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0XHRidXNpbmVzc0hvdXJzOiBjb250ZXh0LmJ1c2luZXNzSG91cnMsXG5cdFx0fSBhcyBjb25zdFxuXHR9XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyUHJvdmlkZXJQcm9wcyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9wcm92aWRlcidcbmltcG9ydCB0eXBlIHtcblx0Q2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGUsXG5cdENlbGxDbGlja0luZm8sXG5cdFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyRW5naW5lIH0gZnJvbSAnQC9ob29rcy91c2UtY2FsZW5kYXItZW5naW5lJ1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnXG5cbmNvbnN0IGdldEV2ZW50UmVzb3VyY2VJZHMgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0+IHtcblx0aWYgKGV2ZW50LnJlc291cmNlSWRzKSB7XG5cdFx0cmV0dXJuIGV2ZW50LnJlc291cmNlSWRzXG5cdH1cblx0aWYgKGV2ZW50LnJlc291cmNlSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBbZXZlbnQucmVzb3VyY2VJZF1cblx0fVxuXHRyZXR1cm4gW11cbn1cblxuaW50ZXJmYWNlIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlclByb3BzIGV4dGVuZHMgQ2FsZW5kYXJQcm92aWRlclByb3BzIHtcblx0ZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG5cdHJlc291cmNlcz86IFJlc291cmNlW11cblx0cmVuZGVyUmVzb3VyY2U/OiAocmVzb3VyY2U6IFJlc291cmNlKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlc092ZXJyaWRlPzogQ2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGVcblx0b3JpZW50YXRpb24/OiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yPzogKFxuXHRcdHByb3BzOiBSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzXG5cdCkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzPzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxcblx0UmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyUHJvcHNcbj4gPSAoe1xuXHRjaGlsZHJlbixcblx0ZXZlbnRzID0gW10sXG5cdHJlc291cmNlcyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9IDAsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdHJlbmRlckV2ZW50LFxuXHRvbkV2ZW50Q2xpY2ssXG5cdG9uQ2VsbENsaWNrLFxuXHRvblZpZXdDaGFuZ2UsXG5cdG9uRXZlbnRBZGQsXG5cdG9uRXZlbnRVcGRhdGUsXG5cdG9uRXZlbnREZWxldGUsXG5cdG9uRGF0ZUNoYW5nZSxcblx0bG9jYWxlLFxuXHR0aW1lem9uZSxcblx0ZGlzYWJsZUNlbGxDbGljayxcblx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0ZGF5TWF4RXZlbnRzLFxuXHRldmVudFNwYWNpbmcsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdGhlYWRlckNvbXBvbmVudCxcblx0aGVhZGVyQ2xhc3NOYW1lLFxuXHR0cmFuc2xhdGlvbnMsXG5cdHRyYW5zbGF0b3IsXG5cdHJlbmRlclJlc291cmNlLFxuXHRyZW5kZXJFdmVudEZvcm0sXG5cdGJ1c2luZXNzSG91cnMsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGNsYXNzZXNPdmVycmlkZSxcblx0b3JpZW50YXRpb24gPSAnaG9yaXpvbnRhbCcsXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3VycyA9IGZhbHNlLFxufSkgPT4ge1xuXHQvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuXHRjb25zdCBbY3VycmVudFJlc291cmNlc10gPSB1c2VTdGF0ZTxSZXNvdXJjZVtdPihyZXNvdXJjZXMpXG5cdGNvbnN0IFt2aXNpYmxlUmVzb3VyY2VzLCBzZXRWaXNpYmxlUmVzb3VyY2VzXSA9IHVzZVN0YXRlPFxuXHRcdFNldDxzdHJpbmcgfCBudW1iZXI+XG5cdD4obmV3IFNldChyZXNvdXJjZXMubWFwKChyKSA9PiByLmlkKSkpXG5cblx0Ly8gVXNlIHRoZSBjYWxlbmRhciBlbmdpbmVcblx0Y29uc3QgY2FsZW5kYXJFbmdpbmUgPSB1c2VDYWxlbmRhckVuZ2luZSh7XG5cdFx0ZXZlbnRzLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGluaXRpYWxWaWV3LFxuXHRcdGluaXRpYWxEYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0b25FdmVudEFkZCxcblx0XHRvbkV2ZW50VXBkYXRlLFxuXHRcdG9uRXZlbnREZWxldGUsXG5cdFx0b25EYXRlQ2hhbmdlLFxuXHRcdG9uVmlld0NoYW5nZTogb25WaWV3Q2hhbmdlLFxuXHRcdGxvY2FsZSxcblx0XHR0aW1lem9uZSxcblx0XHR0cmFuc2xhdGlvbnMsXG5cdFx0dHJhbnNsYXRvcixcblx0fSlcblxuXHQvLyBSZXNvdXJjZSB2aXNpYmlsaXR5XG5cdGNvbnN0IHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRcdHNldFZpc2libGVSZXNvdXJjZXMoKHByZXYpID0+IHtcblx0XHRcdFx0Y29uc3QgbmV3U2V0ID0gbmV3IFNldChwcmV2KVxuXHRcdFx0XHRpZiAobmV3U2V0LmhhcyhyZXNvdXJjZUlkKSkge1xuXHRcdFx0XHRcdG5ld1NldC5kZWxldGUocmVzb3VyY2VJZClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRuZXdTZXQuYWRkKHJlc291cmNlSWQpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG5ld1NldFxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtdXG5cdClcblxuXHRjb25zdCBzaG93UmVzb3VyY2UgPSB1c2VDYWxsYmFjaygocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG5cdFx0c2V0VmlzaWJsZVJlc291cmNlcygocHJldikgPT4gbmV3IFNldChwcmV2KS5hZGQocmVzb3VyY2VJZCkpXG5cdH0sIFtdKVxuXG5cdGNvbnN0IGhpZGVSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRzZXRWaXNpYmxlUmVzb3VyY2VzKChwcmV2KSA9PiB7XG5cdFx0XHRjb25zdCBuZXdTZXQgPSBuZXcgU2V0KHByZXYpXG5cdFx0XHRuZXdTZXQuZGVsZXRlKHJlc291cmNlSWQpXG5cdFx0XHRyZXR1cm4gbmV3U2V0XG5cdFx0fSlcblx0fSwgW10pXG5cblx0Y29uc3Qgc2hvd0FsbFJlc291cmNlcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzZXRWaXNpYmxlUmVzb3VyY2VzKG5ldyBTZXQoY3VycmVudFJlc291cmNlcy5tYXAoKHIpID0+IHIuaWQpKSlcblx0fSwgW2N1cnJlbnRSZXNvdXJjZXNdKVxuXG5cdGNvbnN0IGhpZGVBbGxSZXNvdXJjZXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c2V0VmlzaWJsZVJlc291cmNlcyhuZXcgU2V0KCkpXG5cdH0sIFtdKVxuXG5cdC8vIEV2ZW50IHV0aWxpdGllc1xuXHRjb25zdCBnZXRFdmVudHNGb3JSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRcdFx0cmV0dXJuIGNhbGVuZGFyRW5naW5lLmV2ZW50cy5maWx0ZXIoKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChldmVudC5yZXNvdXJjZUlkcykge1xuXHRcdFx0XHRcdHJldHVybiBldmVudC5yZXNvdXJjZUlkcy5pbmNsdWRlcyhyZXNvdXJjZUlkKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBldmVudC5yZXNvdXJjZUlkID09PSByZXNvdXJjZUlkXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lLmV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldEV2ZW50c0ZvclJlc291cmNlcyA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkczogKHN0cmluZyB8IG51bWJlcilbXSk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdFx0XHRyZXR1cm4gY2FsZW5kYXJFbmdpbmUuZXZlbnRzLmZpbHRlcigoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnRSZXNvdXJjZUlkcyA9IGdldEV2ZW50UmVzb3VyY2VJZHMoZXZlbnQpXG5cdFx0XHRcdHJldHVybiBldmVudFJlc291cmNlSWRzLnNvbWUoKGlkKSA9PiByZXNvdXJjZUlkcy5pbmNsdWRlcyhpZCkpXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lLmV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldFJlc291cmNlQnlJZCA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBSZXNvdXJjZSB8IHVuZGVmaW5lZCA9PiB7XG5cdFx0XHRyZXR1cm4gY3VycmVudFJlc291cmNlcy5maW5kKChyZXNvdXJjZSkgPT4gcmVzb3VyY2UuaWQgPT09IHJlc291cmNlSWQpXG5cdFx0fSxcblx0XHRbY3VycmVudFJlc291cmNlc11cblx0KVxuXG5cdGNvbnN0IGdldFZpc2libGVSZXNvdXJjZXMgPSB1c2VDYWxsYmFjaygoKTogUmVzb3VyY2VbXSA9PiB7XG5cdFx0cmV0dXJuIGN1cnJlbnRSZXNvdXJjZXMuZmlsdGVyKChyZXNvdXJjZSkgPT5cblx0XHRcdHZpc2libGVSZXNvdXJjZXMuaGFzKHJlc291cmNlLmlkKVxuXHRcdClcblx0fSwgW2N1cnJlbnRSZXNvdXJjZXMsIHZpc2libGVSZXNvdXJjZXNdKVxuXG5cdC8vIENyb3NzLXJlc291cmNlIGV2ZW50IHV0aWxpdGllc1xuXHRjb25zdCBpc0V2ZW50Q3Jvc3NSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKChldmVudDogQ2FsZW5kYXJFdmVudCk6IGJvb2xlYW4gPT4ge1xuXHRcdHJldHVybiBCb29sZWFuKGV2ZW50LnJlc291cmNlSWRzICYmIGV2ZW50LnJlc291cmNlSWRzLmxlbmd0aCA+IDEpXG5cdH0sIFtdKVxuXG5cdC8vIEN1c3RvbSBoYW5kbGVyc1xuXHRjb25zdCBlZGl0RXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRXZlbnQoZXZlbnQpXG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcblx0XHR9LFxuXHRcdFtjYWxlbmRhckVuZ2luZV1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZUV2ZW50Q2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGlmIChkaXNhYmxlRXZlbnRDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblx0XHRcdGlmIChvbkV2ZW50Q2xpY2spIHtcblx0XHRcdFx0b25FdmVudENsaWNrKGV2ZW50KVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWRpdEV2ZW50KGV2ZW50KVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W2Rpc2FibGVFdmVudENsaWNrLCBvbkV2ZW50Q2xpY2ssIGVkaXRFdmVudF1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZURhdGVDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUNlbGxDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9uQ2VsbENsaWNrKSB7XG5cdFx0XHRcdG9uQ2VsbENsaWNrKGluZm8pXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBuZXdFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0XHR0aXRsZTogY2FsZW5kYXJFbmdpbmUudCgnbmV3RXZlbnQnKSxcblx0XHRcdFx0XHRzdGFydDogaW5mby5zdGFydCxcblx0XHRcdFx0XHRlbmQ6IGluZm8uZW5kLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiAnJyxcblx0XHRcdFx0XHRhbGxEYXk6IGZhbHNlLFxuXHRcdFx0XHR9IGFzIENhbGVuZGFyRXZlbnRcblxuXHRcdFx0XHRpZiAoaW5mby5yZXNvdXJjZUlkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRuZXdFdmVudC5yZXNvdXJjZUlkID0gaW5mby5yZXNvdXJjZUlkXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KG5ld0V2ZW50KVxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZERhdGUoaW5mby5zdGFydClcblx0XHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbb25DZWxsQ2xpY2ssIGRpc2FibGVDZWxsQ2xpY2ssIGNhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Ly8gQ3JlYXRlIHRoZSBjb250ZXh0IHZhbHVlXG5cdGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdC4uLmNhbGVuZGFyRW5naW5lLFxuXHRcdFx0dmlldzogY2FsZW5kYXJFbmdpbmUudmlldyxcblx0XHRcdHNldFZpZXc6IGNhbGVuZGFyRW5naW5lLnNldFZpZXcsXG5cdFx0XHRldmVudHM6IGNhbGVuZGFyRW5naW5lLmV2ZW50cyxcblx0XHRcdHJhd0V2ZW50czogY2FsZW5kYXJFbmdpbmUucmF3RXZlbnRzLFxuXG5cdFx0XHQvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuXHRcdFx0cmVzb3VyY2VzOiBjdXJyZW50UmVzb3VyY2VzLFxuXHRcdFx0dmlzaWJsZVJlc291cmNlcyxcblx0XHRcdHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSxcblx0XHRcdHNob3dSZXNvdXJjZSxcblx0XHRcdGhpZGVSZXNvdXJjZSxcblx0XHRcdHNob3dBbGxSZXNvdXJjZXMsXG5cdFx0XHRoaWRlQWxsUmVzb3VyY2VzLFxuXG5cdFx0XHQvLyBSZXNvdXJjZSB1dGlsaXRpZXNcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2VzLFxuXHRcdFx0Z2V0UmVzb3VyY2VCeUlkLFxuXHRcdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblxuXHRcdFx0Ly8gQ3Jvc3MtcmVzb3VyY2UgZXZlbnQgdXRpbGl0aWVzXG5cdFx0XHRpc0V2ZW50Q3Jvc3NSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50UmVzb3VyY2VJZHMsXG5cblx0XHRcdC8vIE92ZXJyaWRlIGhhbmRsZXJzXG5cdFx0XHRvbkV2ZW50Q2xpY2s6IGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRvbkNlbGxDbGljazogaGFuZGxlRGF0ZUNsaWNrLFxuXG5cdFx0XHQvLyBQYXNzIHRocm91Z2ggaGVhZGVyIHByb3BzXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cblx0XHRcdC8vIFBhc3MgdGhyb3VnaCBvdGhlciBwcm9wc1xuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRyZW5kZXJSZXNvdXJjZSxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdG9yaWVudGF0aW9uLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHR9KSxcblx0XHRbXG5cdFx0XHRjYWxlbmRhckVuZ2luZSxcblx0XHRcdGN1cnJlbnRSZXNvdXJjZXMsXG5cdFx0XHR2aXNpYmxlUmVzb3VyY2VzLFxuXHRcdFx0dG9nZ2xlUmVzb3VyY2VWaXNpYmlsaXR5LFxuXHRcdFx0c2hvd1Jlc291cmNlLFxuXHRcdFx0aGlkZVJlc291cmNlLFxuXHRcdFx0c2hvd0FsbFJlc291cmNlcyxcblx0XHRcdGhpZGVBbGxSZXNvdXJjZXMsXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlcyxcblx0XHRcdGdldFJlc291cmNlQnlJZCxcblx0XHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdFx0XHRpc0V2ZW50Q3Jvc3NSZXNvdXJjZSxcblx0XHRcdGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRoYW5kbGVEYXRlQ2xpY2ssXG5cdFx0XHRyZW5kZXJFdmVudCxcblx0XHRcdHJlbmRlclJlc291cmNlLFxuXHRcdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHRcdFx0bG9jYWxlLFxuXHRcdFx0dGltZXpvbmUsXG5cdFx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0b3JpZW50YXRpb24sXG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdF1cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlQ2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvUmVzb3VyY2VDYWxlbmRhckNvbnRleHQuUHJvdmlkZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHtcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQgYXMgZGVsZXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxuXHRnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyxcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQgYXMgdXBkYXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxufSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZGVmYXVsdFRyYW5zbGF0aW9ucyB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy9kZWZhdWx0J1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnMsIFRyYW5zbGF0b3JGdW5jdGlvbiB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmltcG9ydCB7IGdldE1vbnRoV2Vla3MsIGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3IH0gZnJvbSAnQC90eXBlcydcbmltcG9ydCB7IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQgfSBmcm9tICcuLi9saWIvY29uc3RhbnRzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyRW5naW5lQ29uZmlnIHtcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuXHRpbml0aWFsVmlldz86IENhbGVuZGFyVmlld1xuXHRpbml0aWFsRGF0ZT86IGRheWpzLkRheWpzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdG9uRXZlbnRBZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudFVwZGF0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50RGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRGF0ZUNoYW5nZT86IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRvblZpZXdDaGFuZ2U/OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdGxvY2FsZT86IHN0cmluZ1xuXHR0aW1lem9uZT86IHN0cmluZ1xuXHR0cmFuc2xhdGlvbnM/OiBUcmFuc2xhdGlvbnNcblx0dHJhbnNsYXRvcj86IFRyYW5zbGF0b3JGdW5jdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyRW5naW5lUmV0dXJuIHtcblx0Y3VycmVudERhdGU6IGRheWpzLkRheWpzXG5cdHZpZXc6IENhbGVuZGFyVmlld1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRyYXdFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRpc0V2ZW50Rm9ybU9wZW46IGJvb2xlYW5cblx0c2VsZWN0ZWRFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0c2VsZWN0ZWREYXRlOiBkYXlqcy5EYXlqcyB8IG51bGxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuXHRkYXlNYXhFdmVudHM6IG51bWJlclxuXHRjdXJyZW50TG9jYWxlOiBzdHJpbmdcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0c2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcblx0c2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0dG9kYXk6ICgpID0+IHZvaWRcblx0YWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHR1cGRhdGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnQ6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0ZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdG9wZW5FdmVudEZvcm06IChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG5cdHNldFNlbGVjdGVkRXZlbnQ6IFJlYWN0LkRpc3BhdGNoPFJlYWN0LlNldFN0YXRlQWN0aW9uPENhbGVuZGFyRXZlbnQgfCBudWxsPj5cblx0c2V0SXNFdmVudEZvcm1PcGVuOiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxib29sZWFuPj5cblx0c2V0U2VsZWN0ZWREYXRlOiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxkYXlqcy5EYXlqcyB8IG51bGw+PlxuXHRnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IChcblx0XHRzdGFydERhdGU6IGRheWpzLkRheWpzLFxuXHRcdGVuZERhdGU6IGRheWpzLkRheWpzXG5cdCkgPT4gQ2FsZW5kYXJFdmVudFtdXG5cdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHR0OiAoa2V5OiBrZXlvZiBUcmFuc2xhdGlvbnMpID0+IHN0cmluZ1xufVxuXG5jb25zdCBWSUVXX1VOSVRTOiBSZWNvcmQ8Q2FsZW5kYXJWaWV3LCBkYXlqcy5NYW5pcHVsYXRlVHlwZT4gPSB7XG5cdGRheTogJ2RheScsXG5cdHdlZWs6ICd3ZWVrJyxcblx0bW9udGg6ICdtb250aCcsXG5cdHllYXI6ICd5ZWFyJyxcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNhbGVuZGFyRW5naW5lID0gKFxuXHRjb25maWc6IENhbGVuZGFyRW5naW5lQ29uZmlnXG4pOiBDYWxlbmRhckVuZ2luZVJldHVybiA9PiB7XG5cdGNvbnN0IHtcblx0XHRldmVudHMgPSBbXSxcblx0XHRmaXJzdERheU9mV2VlayA9IDAsXG5cdFx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRcdGluaXRpYWxEYXRlID0gZGF5anMoKSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdG9uRXZlbnRBZGQsXG5cdFx0b25FdmVudFVwZGF0ZSxcblx0XHRvbkV2ZW50RGVsZXRlLFxuXHRcdG9uRGF0ZUNoYW5nZSxcblx0XHRvblZpZXdDaGFuZ2UsXG5cdFx0bG9jYWxlLFxuXHRcdHRpbWV6b25lLFxuXHRcdHRyYW5zbGF0aW9ucyxcblx0XHR0cmFuc2xhdG9yLFxuXHR9ID0gY29uZmlnXG5cblx0Y29uc3QgW2N1cnJlbnREYXRlLCBzZXRDdXJyZW50RGF0ZV0gPSB1c2VTdGF0ZTxkYXlqcy5EYXlqcz4oaW5pdGlhbERhdGUpXG5cdGNvbnN0IFt2aWV3LCBzZXRWaWV3XSA9IHVzZVN0YXRlPENhbGVuZGFyVmlldz4oaW5pdGlhbFZpZXcpXG5cdGNvbnN0IFtjdXJyZW50RXZlbnRzLCBzZXRDdXJyZW50RXZlbnRzXSA9IHVzZVN0YXRlPENhbGVuZGFyRXZlbnRbXT4oZXZlbnRzKVxuXHRjb25zdCBbaXNFdmVudEZvcm1PcGVuLCBzZXRJc0V2ZW50Rm9ybU9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cdGNvbnN0IFtzZWxlY3RlZEV2ZW50LCBzZXRTZWxlY3RlZEV2ZW50XSA9IHVzZVN0YXRlPENhbGVuZGFyRXZlbnQgfCBudWxsPihudWxsKVxuXHRjb25zdCBbc2VsZWN0ZWREYXRlLCBzZXRTZWxlY3RlZERhdGVdID0gdXNlU3RhdGU8ZGF5anMuRGF5anMgfCBudWxsPihudWxsKVxuXHRjb25zdCBbY3VycmVudExvY2FsZSwgc2V0Q3VycmVudExvY2FsZV0gPSB1c2VTdGF0ZShsb2NhbGUgfHwgJ2VuJylcblxuXHRjb25zdCB0ID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKHRyYW5zbGF0b3IpIHtcblx0XHRcdHJldHVybiB0cmFuc2xhdG9yXG5cdFx0fVxuXHRcdGlmICh0cmFuc2xhdGlvbnMpIHtcblx0XHRcdHJldHVybiAoa2V5OiBrZXlvZiBUcmFuc2xhdGlvbnMpID0+IHRyYW5zbGF0aW9uc1trZXldIHx8IGtleVxuXHRcdH1cblx0XHRyZXR1cm4gKGtleToga2V5b2YgVHJhbnNsYXRpb25zKSA9PiBkZWZhdWx0VHJhbnNsYXRpb25zW2tleV0gfHwga2V5XG5cdH0sIFt0cmFuc2xhdGlvbnMsIHRyYW5zbGF0b3JdKVxuXG5cdGNvbnN0IGdldEV2ZW50c0ZvckRhdGVSYW5nZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChzdGFydERhdGU6IGRheWpzLkRheWpzLCBlbmREYXRlOiBkYXlqcy5EYXlqcyk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdFx0XHRjb25zdCBhbGxFdmVudHM6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cblx0XHRcdGZvciAoY29uc3QgZXZlbnQgb2YgY3VycmVudEV2ZW50cykge1xuXHRcdFx0XHRpZiAoZXZlbnQucnJ1bGUpIHtcblx0XHRcdFx0XHRhbGxFdmVudHMucHVzaChcblx0XHRcdFx0XHRcdC4uLmdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzKHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRFdmVudHMsXG5cdFx0XHRcdFx0XHRcdHN0YXJ0RGF0ZSxcblx0XHRcdFx0XHRcdFx0ZW5kRGF0ZSxcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IHN0YXJ0c0luUmFuZ2UgPVxuXHRcdFx0XHRcdFx0ZXZlbnQuc3RhcnQuaXNTYW1lT3JBZnRlcihzdGFydERhdGUpICYmXG5cdFx0XHRcdFx0XHRldmVudC5zdGFydC5pc1NhbWVPckJlZm9yZShlbmREYXRlKVxuXHRcdFx0XHRcdGNvbnN0IGVuZHNJblJhbmdlID1cblx0XHRcdFx0XHRcdGV2ZW50LmVuZC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSkgJiZcblx0XHRcdFx0XHRcdGV2ZW50LmVuZC5pc1NhbWVPckJlZm9yZShlbmREYXRlKVxuXHRcdFx0XHRcdGNvbnN0IHNwYW5zUmFuZ2UgPVxuXHRcdFx0XHRcdFx0ZXZlbnQuc3RhcnQuaXNCZWZvcmUoc3RhcnREYXRlKSAmJiBldmVudC5lbmQuaXNBZnRlcihlbmREYXRlKVxuXHRcdFx0XHRcdGlmIChzdGFydHNJblJhbmdlIHx8IGVuZHNJblJhbmdlIHx8IHNwYW5zUmFuZ2UpIHtcblx0XHRcdFx0XHRcdGFsbEV2ZW50cy5wdXNoKGV2ZW50KVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFsbEV2ZW50c1xuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHNdXG5cdClcblxuXHRjb25zdCBnZXRDdXJyZW50Vmlld1JhbmdlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdGlmICh2aWV3ID09PSAnZGF5Jykge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c3RhcnQ6IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ2RheScpLFxuXHRcdFx0XHRlbmQ6IGN1cnJlbnREYXRlLmVuZE9mKCdkYXknKSxcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHZpZXcgPT09ICd5ZWFyJykge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c3RhcnQ6IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ3llYXInKSxcblx0XHRcdFx0ZW5kOiBjdXJyZW50RGF0ZS5lbmRPZigneWVhcicpLFxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAodmlldyA9PT0gJ3dlZWsnKSB7XG5cdFx0XHRjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vlaylcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHN0YXJ0OiB3ZWVrRGF5c1swXS5zdGFydE9mKCdkYXknKSxcblx0XHRcdFx0ZW5kOiB3ZWVrRGF5c1s2XS5lbmRPZignZGF5JyksXG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIG1vbnRoIHZpZXdcblx0XHRjb25zdCB3ZWVrcyA9IGdldE1vbnRoV2Vla3MoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdHJldHVybiB7IHN0YXJ0OiB3ZWVrc1swXVswXS5zdGFydE9mKCdkYXknKSwgZW5kOiB3ZWVrc1s1XVs2XS5lbmRPZignZGF5JykgfVxuXHR9LCBbY3VycmVudERhdGUsIHZpZXcsIGZpcnN0RGF5T2ZXZWVrXSlcblxuXHRjb25zdCBwcm9jZXNzZWRFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IGdldEN1cnJlbnRWaWV3UmFuZ2UoKVxuXHRcdHJldHVybiBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uoc3RhcnQsIGVuZClcblx0fSwgW2dldEV2ZW50c0ZvckRhdGVSYW5nZSwgZ2V0Q3VycmVudFZpZXdSYW5nZV0pXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoZXZlbnRzKSB7XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKGV2ZW50cylcblx0XHR9XG5cdH0sIFtldmVudHNdKVxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChsb2NhbGUpIHtcblx0XHRcdHNldEN1cnJlbnRMb2NhbGUobG9jYWxlKVxuXHRcdFx0ZGF5anMubG9jYWxlKGxvY2FsZSlcblx0XHRcdHNldEN1cnJlbnREYXRlKChwcmV2RGF0ZSkgPT4gcHJldkRhdGUubG9jYWxlKGxvY2FsZSkpXG5cdFx0fVxuXHR9LCBbbG9jYWxlXSlcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAodGltZXpvbmUpIHtcblx0XHRcdGRheWpzLnR6LnNldERlZmF1bHQodGltZXpvbmUpXG5cdFx0fVxuXHR9LCBbdGltZXpvbmVdKVxuXG5cdGNvbnN0IHNlbGVjdERhdGUgPSB1c2VDYWxsYmFjayhcblx0XHQoZGF0ZTogZGF5anMuRGF5anMpID0+IHtcblx0XHRcdHNldEN1cnJlbnREYXRlKGRhdGUpXG5cdFx0XHRvbkRhdGVDaGFuZ2U/LihkYXRlKVxuXHRcdH0sXG5cdFx0W29uRGF0ZUNoYW5nZV1cblx0KVxuXG5cdGNvbnN0IG5hdmlnYXRlUGVyaW9kID0gdXNlQ2FsbGJhY2soXG5cdFx0KGRpcmVjdGlvbjogMSB8IC0xKSA9PiB7XG5cdFx0XHRzZXRDdXJyZW50RGF0ZSgocHJldikgPT4ge1xuXHRcdFx0XHRjb25zdCBuZXdEYXRlID1cblx0XHRcdFx0XHRkaXJlY3Rpb24gPT09IDFcblx0XHRcdFx0XHRcdD8gcHJldi5hZGQoMSwgVklFV19VTklUU1t2aWV3XSlcblx0XHRcdFx0XHRcdDogcHJldi5zdWJ0cmFjdCgxLCBWSUVXX1VOSVRTW3ZpZXddKVxuXHRcdFx0XHRvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuXHRcdFx0XHRyZXR1cm4gbmV3RGF0ZVxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFt2aWV3LCBvbkRhdGVDaGFuZ2VdXG5cdClcblxuXHRjb25zdCBuZXh0UGVyaW9kID0gdXNlQ2FsbGJhY2soKCkgPT4gbmF2aWdhdGVQZXJpb2QoMSksIFtuYXZpZ2F0ZVBlcmlvZF0pXG5cdGNvbnN0IHByZXZQZXJpb2QgPSB1c2VDYWxsYmFjaygoKSA9PiBuYXZpZ2F0ZVBlcmlvZCgtMSksIFtuYXZpZ2F0ZVBlcmlvZF0pXG5cblx0Y29uc3QgdG9kYXkgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0Y29uc3QgbmV3RGF0ZSA9IGRheWpzKClcblx0XHRzZXRDdXJyZW50RGF0ZShuZXdEYXRlKVxuXHRcdG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUpXG5cdH0sIFtvbkRhdGVDaGFuZ2VdKVxuXG5cdGNvbnN0IGFkZEV2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKChwcmV2KSA9PiBbLi4ucHJldiwgZXZlbnRdKVxuXHRcdFx0b25FdmVudEFkZD8uKGV2ZW50KVxuXHRcdH0sXG5cdFx0W29uRXZlbnRBZGRdXG5cdClcblxuXHRjb25zdCB1cGRhdGVFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+XG5cdFx0XHRcdHByZXYubWFwKChldmVudCkgPT4ge1xuXHRcdFx0XHRcdGlmIChldmVudC5pZCAhPT0gZXZlbnRJZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGV2ZW50XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IG5ld0V2ZW50ID0geyAuLi5ldmVudCwgLi4udXBkYXRlcyB9XG5cdFx0XHRcdFx0b25FdmVudFVwZGF0ZT8uKG5ld0V2ZW50KVxuXHRcdFx0XHRcdHJldHVybiBuZXdFdmVudFxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W29uRXZlbnRVcGRhdGVdXG5cdClcblxuXHRjb25zdCB1cGRhdGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChcblx0XHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50Pixcblx0XHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHRcdCkgPT4ge1xuXHRcdFx0b25FdmVudFVwZGF0ZT8uKHsgLi4uZXZlbnQsIC4uLnVwZGF0ZXMgfSlcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoXG5cdFx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50SW1wbCh7XG5cdFx0XHRcdFx0dGFyZ2V0RXZlbnQ6IGV2ZW50LFxuXHRcdFx0XHRcdHVwZGF0ZXMsXG5cdFx0XHRcdFx0Y3VycmVudEV2ZW50cyxcblx0XHRcdFx0XHRzY29wZTogb3B0aW9ucy5zY29wZSxcblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzLCBvbkV2ZW50VXBkYXRlXVxuXHQpXG5cblx0Y29uc3QgZGVsZXRlUmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQsIG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9ucykgPT4ge1xuXHRcdFx0b25FdmVudERlbGV0ZT8uKGV2ZW50KVxuXHRcdFx0c2V0Q3VycmVudEV2ZW50cyhcblx0XHRcdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnRJbXBsKHtcblx0XHRcdFx0XHR0YXJnZXRFdmVudDogZXZlbnQsXG5cdFx0XHRcdFx0Y3VycmVudEV2ZW50cyxcblx0XHRcdFx0XHRzY29wZTogb3B0aW9ucy5zY29wZSxcblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzLCBvbkV2ZW50RGVsZXRlXVxuXHQpXG5cblx0Y29uc3QgZGVsZXRlRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKChwcmV2KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50VG9EZWxldGUgPSBwcmV2LmZpbmQoKGUpID0+IGUuaWQgPT09IGV2ZW50SWQpXG5cdFx0XHRcdGlmIChldmVudFRvRGVsZXRlKSB7XG5cdFx0XHRcdFx0b25FdmVudERlbGV0ZT8uKGV2ZW50VG9EZWxldGUpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHByZXYuZmlsdGVyKChlKSA9PiBlLmlkICE9PSBldmVudElkKVxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtvbkV2ZW50RGVsZXRlXVxuXHQpXG5cblx0Y29uc3Qgb3BlbkV2ZW50Rm9ybSA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnREYXRhPy5zdGFydCkge1xuXHRcdFx0XHRzZXRTZWxlY3RlZERhdGUoZXZlbnREYXRhLnN0YXJ0KVxuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc3RhcnQgPSBldmVudERhdGE/LnN0YXJ0ID8/IGN1cnJlbnREYXRlXG5cdFx0XHRzZXRTZWxlY3RlZEV2ZW50KHtcblx0XHRcdFx0dGl0bGU6IHQoJ25ld0V2ZW50JyksXG5cdFx0XHRcdHN0YXJ0LFxuXHRcdFx0XHRlbmQ6IGV2ZW50RGF0YT8uZW5kID8/IHN0YXJ0LmFkZCgxLCAnaG91cicpLFxuXHRcdFx0XHRyZXNvdXJjZUlkOiBldmVudERhdGE/LnJlc291cmNlSWQsXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiAnJyxcblx0XHRcdFx0YWxsRGF5OiBldmVudERhdGE/LmFsbERheSA/PyBmYWxzZSxcblx0XHRcdH0gYXMgQ2FsZW5kYXJFdmVudClcblx0XHRcdHNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuXHRcdH0sXG5cdFx0W2N1cnJlbnREYXRlLCB0XVxuXHQpXG5cblx0Y29uc3QgY2xvc2VFdmVudEZvcm0gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c2V0U2VsZWN0ZWREYXRlKG51bGwpXG5cdFx0c2V0U2VsZWN0ZWRFdmVudChudWxsKVxuXHRcdHNldElzRXZlbnRGb3JtT3BlbihmYWxzZSlcblx0fSwgW10pXG5cblx0Y29uc3QgaGFuZGxlVmlld0NoYW5nZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChuZXdWaWV3OiBDYWxlbmRhclZpZXcpID0+IHtcblx0XHRcdHNldFZpZXcobmV3Vmlldylcblx0XHRcdG9uVmlld0NoYW5nZT8uKG5ld1ZpZXcpXG5cdFx0fSxcblx0XHRbb25WaWV3Q2hhbmdlXVxuXHQpXG5cblx0Y29uc3QgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KTogQ2FsZW5kYXJFdmVudCB8IG51bGwgPT4ge1xuXHRcdFx0Y29uc3QgdGFyZ2V0VUlEID0gZXZlbnQudWlkXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRjdXJyZW50RXZlbnRzLmZpbmQoXG5cdFx0XHRcdFx0KGUpID0+IChlLnVpZCB8fCBgJHtlLmlkfUBpbGFteS5jYWxlbmRhcmApID09PSB0YXJnZXRVSUQgJiYgZS5ycnVsZVxuXHRcdFx0XHQpIHx8IG51bGxcblx0XHRcdClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzXVxuXHQpXG5cblx0cmV0dXJuIHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHR2aWV3LFxuXHRcdGV2ZW50czogcHJvY2Vzc2VkRXZlbnRzLFxuXHRcdHJhd0V2ZW50czogY3VycmVudEV2ZW50cyxcblx0XHRpc0V2ZW50Rm9ybU9wZW4sXG5cdFx0c2VsZWN0ZWRFdmVudCxcblx0XHRzZWxlY3RlZERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0ZGF5TWF4RXZlbnRzOiBEQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRzZXRDdXJyZW50RGF0ZSxcblx0XHRzZWxlY3REYXRlLFxuXHRcdHNldFZpZXc6IGhhbmRsZVZpZXdDaGFuZ2UsXG5cdFx0bmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kLFxuXHRcdHRvZGF5LFxuXHRcdGFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50LFxuXHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50LFxuXHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdG9wZW5FdmVudEZvcm0sXG5cdFx0Y2xvc2VFdmVudEZvcm0sXG5cdFx0c2V0U2VsZWN0ZWRFdmVudCxcblx0XHRzZXRJc0V2ZW50Rm9ybU9wZW4sXG5cdFx0c2V0U2VsZWN0ZWREYXRlLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG5cdFx0dCxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0VHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbnMgPSB7XG5cdC8vIENvbW1vbiBhY3Rpb25zXG5cdHRvZGF5OiAnVG9kYXknLFxuXHRjcmVhdGU6ICdDcmVhdGUnLFxuXHRuZXc6ICdOZXcnLFxuXHR1cGRhdGU6ICdVcGRhdGUnLFxuXHRkZWxldGU6ICdEZWxldGUnLFxuXHRjYW5jZWw6ICdDYW5jZWwnLFxuXHRleHBvcnQ6ICdFeHBvcnQnLFxuXG5cdC8vIEV2ZW50IHJlbGF0ZWRcblx0ZXZlbnQ6ICdFdmVudCcsXG5cdGV2ZW50czogJ0V2ZW50cycsXG5cdG5ld0V2ZW50OiAnTmV3IEV2ZW50Jyxcblx0dGl0bGU6ICdUaXRsZScsXG5cdGRlc2NyaXB0aW9uOiAnRGVzY3JpcHRpb24nLFxuXHRsb2NhdGlvbjogJ0xvY2F0aW9uJyxcblx0YWxsRGF5OiAnQWxsIGRheScsXG5cdHN0YXJ0RGF0ZTogJ1N0YXJ0IERhdGUnLFxuXHRlbmREYXRlOiAnRW5kIERhdGUnLFxuXHRzdGFydFRpbWU6ICdTdGFydCBUaW1lJyxcblx0ZW5kVGltZTogJ0VuZCBUaW1lJyxcblx0Y29sb3I6ICdDb2xvcicsXG5cblx0Ly8gRXZlbnQgZm9ybVxuXHRjcmVhdGVFdmVudDogJ0NyZWF0ZSBFdmVudCcsXG5cdGVkaXRFdmVudDogJ0VkaXQgRXZlbnQnLFxuXHRhZGROZXdFdmVudDogJ0FkZCBhIG5ldyBldmVudCB0byB5b3VyIGNhbGVuZGFyJyxcblx0ZWRpdEV2ZW50RGV0YWlsczogJ0VkaXQgeW91ciBldmVudCBkZXRhaWxzJyxcblx0ZXZlbnRUaXRsZVBsYWNlaG9sZGVyOiAnRXZlbnQgdGl0bGUnLFxuXHRldmVudERlc2NyaXB0aW9uUGxhY2Vob2xkZXI6ICdFdmVudCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpJyxcblx0ZXZlbnRMb2NhdGlvblBsYWNlaG9sZGVyOiAnRXZlbnQgbG9jYXRpb24gKG9wdGlvbmFsKScsXG5cblx0Ly8gUmVjdXJyZW5jZVxuXHRyZXBlYXQ6ICdSZXBlYXQnLFxuXHRyZXBlYXRzOiAnUmVwZWF0cycsXG5cdGN1c3RvbVJlY3VycmVuY2U6ICdDdXN0b20gcmVjdXJyZW5jZScsXG5cdGRhaWx5OiAnRGFpbHknLFxuXHR3ZWVrbHk6ICdXZWVrbHknLFxuXHRtb250aGx5OiAnTW9udGhseScsXG5cdHllYXJseTogJ1llYXJseScsXG5cdGludGVydmFsOiAnSW50ZXJ2YWwnLFxuXHRyZXBlYXRPbjogJ1JlcGVhdCBvbicsXG5cdG5ldmVyOiAnTmV2ZXInLFxuXHRjb3VudDogJ0NvdW50Jyxcblx0ZXZlcnk6ICdFdmVyeScsXG5cdGVuZHM6ICdFbmRzJyxcblx0YWZ0ZXI6ICdBZnRlcicsXG5cdG9jY3VycmVuY2VzOiAnb2NjdXJyZW5jZXMnLFxuXHRvbjogJ09uJyxcblxuXHQvLyBSZWN1cnJlbmNlIGVkaXQgZGlhbG9nXG5cdGVkaXRSZWN1cnJpbmdFdmVudDogJ0VkaXQgcmVjdXJyaW5nIGV2ZW50Jyxcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6ICdEZWxldGUgcmVjdXJyaW5nIGV2ZW50Jyxcblx0ZWRpdFJlY3VycmluZ0V2ZW50UXVlc3Rpb246XG5cdFx0J2lzIGEgcmVjdXJyaW5nIGV2ZW50LiBIb3cgd291bGQgeW91IGxpa2UgdG8gZWRpdCBpdD8nLFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uOlxuXHRcdCdpcyBhIHJlY3VycmluZyBldmVudC4gSG93IHdvdWxkIHlvdSBsaWtlIHRvIGRlbGV0ZSBpdD8nLFxuXHR0aGlzRXZlbnQ6ICdUaGlzIGV2ZW50Jyxcblx0dGhpc0V2ZW50RGVzY3JpcHRpb246ICdPbmx5IGNoYW5nZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHR0aGlzQW5kRm9sbG93aW5nRXZlbnRzOiAnVGhpcyBhbmQgZm9sbG93aW5nIGV2ZW50cycsXG5cdHRoaXNBbmRGb2xsb3dpbmdFdmVudHNEZXNjcmlwdGlvbjogJ0VkaXQgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG5cdGFsbEV2ZW50czogJ0FsbCBldmVudHMnLFxuXHRhbGxFdmVudHNEZXNjcmlwdGlvbjogJ0VkaXQgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblx0b25seUNoYW5nZVRoaXM6ICdPbmx5IGNoYW5nZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHRjaGFuZ2VUaGlzQW5kRnV0dXJlOiAnQ2hhbmdlIHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRjaGFuZ2VFbnRpcmVTZXJpZXM6ICdDaGFuZ2UgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblx0b25seURlbGV0ZVRoaXM6ICdPbmx5IGRlbGV0ZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHRkZWxldGVUaGlzQW5kRnV0dXJlOiAnRGVsZXRlIHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRkZWxldGVFbnRpcmVTZXJpZXM6ICdEZWxldGUgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblxuXHQvLyBWaWV3IHR5cGVzXG5cdG1vbnRoOiAnTW9udGgnLFxuXHR3ZWVrOiAnV2VlaycsXG5cdGRheTogJ0RheScsXG5cdHllYXI6ICdZZWFyJyxcblx0bW9yZTogJ21vcmUnLFxuXG5cdC8vIFJlc291cmNlIGNhbGVuZGFyXG5cdHJlc291cmNlczogJ1Jlc291cmNlcycsXG5cdHJlc291cmNlOiAnUmVzb3VyY2UnLFxuXHR0aW1lOiAnVGltZScsXG5cdGRhdGU6ICdEYXRlJyxcblx0bm9SZXNvdXJjZXNWaXNpYmxlOiAnTm8gcmVzb3VyY2VzIHZpc2libGUnLFxuXHRhZGRSZXNvdXJjZXNPclNob3dFeGlzdGluZzogJ0FkZCByZXNvdXJjZXMgb3Igc2hvdyBleGlzdGluZyBvbmVzJyxcblxuXHQvLyBEYXlzIG9mIHdlZWtcblx0c3VuZGF5OiAnU3VuZGF5Jyxcblx0bW9uZGF5OiAnTW9uZGF5Jyxcblx0dHVlc2RheTogJ1R1ZXNkYXknLFxuXHR3ZWRuZXNkYXk6ICdXZWRuZXNkYXknLFxuXHR0aHVyc2RheTogJ1RodXJzZGF5Jyxcblx0ZnJpZGF5OiAnRnJpZGF5Jyxcblx0c2F0dXJkYXk6ICdTYXR1cmRheScsXG5cblx0Ly8gRGF5cyBzaG9ydFxuXHRzdW46ICdTdW4nLFxuXHRtb246ICdNb24nLFxuXHR0dWU6ICdUdWUnLFxuXHR3ZWQ6ICdXZWQnLFxuXHR0aHU6ICdUaHUnLFxuXHRmcmk6ICdGcmknLFxuXHRzYXQ6ICdTYXQnLFxuXG5cdC8vIE1vbnRoc1xuXHRqYW51YXJ5OiAnSmFudWFyeScsXG5cdGZlYnJ1YXJ5OiAnRmVicnVhcnknLFxuXHRtYXJjaDogJ01hcmNoJyxcblx0YXByaWw6ICdBcHJpbCcsXG5cdG1heTogJ01heScsXG5cdGp1bmU6ICdKdW5lJyxcblx0anVseTogJ0p1bHknLFxuXHRhdWd1c3Q6ICdBdWd1c3QnLFxuXHRzZXB0ZW1iZXI6ICdTZXB0ZW1iZXInLFxuXHRvY3RvYmVyOiAnT2N0b2JlcicsXG5cdG5vdmVtYmVyOiAnTm92ZW1iZXInLFxuXHRkZWNlbWJlcjogJ0RlY2VtYmVyJyxcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHdlZWsgZGF5cyBmb3IgYSBnaXZlbiBkYXRlIGFuZCBmaXJzdCBkYXkgb2Ygd2VlayBzZXR0aW5nLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBjdXJyZW50IGRhdGUgaXMgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCB3ZWVrLFxuICogZXZlbiB3aGVuIHRoZSBmaXJzdCBkYXkgb2Ygd2VlayBpcyBzZXQgdG8gYSBkYXkgYWZ0ZXIgdGhlIGN1cnJlbnQgZGF0ZS5cbiAqXG4gKiBAcGFyYW0gY3VycmVudERhdGUgLSBUaGUgcmVmZXJlbmNlIGRhdGUgZm9yIGNhbGN1bGF0aW5nIHRoZSB3ZWVrXG4gKiBAcGFyYW0gZmlyc3REYXlPZldlZWsgLSBUaGUgZGF5IG51bWJlciAoMC02KSByZXByZXNlbnRpbmcgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCA9IFN1bmRheSwgMSA9IE1vbmRheSwgZXRjLilcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIDcgZGF5anMgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHdlZWsgZGF5cywgc3RhcnRpbmcgZnJvbSBmaXJzdERheU9mV2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgd2VlayBzdGFydGluZyBmcm9tIE1vbmRheSBmb3IgY3VycmVudCBkYXRlXG4gKiBjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGRheWpzKCcyMDI1LTEwLTEzJyksIDEpXG4gKiAvLyBSZXR1cm5zOiBbTW9uIE9jdCAxMywgVHVlIE9jdCAxNCwgLi4uLCBTdW4gT2N0IDE5XVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgd2VlayBzdGFydGluZyBmcm9tIFdlZG5lc2RheSB3aGVuIGN1cnJlbnQgZGF0ZSBpcyBNb25kYXlcbiAqIGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoZGF5anMoJzIwMjUtMTAtMTMnKSwgMylcbiAqIC8vIFJldHVybnM6IFtXZWQgT2N0IDgsIFRodSBPY3QgOSwgLi4uLCBUdWUgT2N0IDE0XSAoaW5jbHVkZXMgTW9uZGF5IE9jdCAxMylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWtEYXlzKFxuXHRjdXJyZW50RGF0ZTogZGF5anMuRGF5anMsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbik6IGRheWpzLkRheWpzW10ge1xuXHRjb25zdCBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlXG5cdFx0LnN0YXJ0T2YoJ3dlZWsnKVxuXHRcdC5kYXkoZmlyc3REYXlPZldlZWspXG5cblx0Y29uc3QgYWRqdXN0ZWRTdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLmlzQmVmb3JlKHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlKVxuXHRcdD8gc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGUuc3VidHJhY3QoMSwgJ3dlZWsnKVxuXHRcdDogc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGVcblxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgZGF5SW5kZXgpID0+XG5cdFx0YWRqdXN0ZWRTdGFydE9mV2Vlay5hZGQoZGF5SW5kZXgsICdkYXknKVxuXHQpXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIDYgd2Vla3Mgb2YgZGF5cyBmb3IgYSBtb250aCBjYWxlbmRhciB2aWV3LlxuICogQWx3YXlzIHJldHVybnMgNDIgZGF5cyAoNiB3ZWVrcyDDlyA3IGRheXMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9udGhXZWVrcyhcblx0bW9udGhEYXRlOiBkYXlqcy5EYXlqcyxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuKTogZGF5anMuRGF5anNbXVtdIHtcblx0Y29uc3QgZmlyc3RXZWVrID0gZ2V0V2Vla0RheXMobW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJyksIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiA2IH0sIChfLCB3ZWVrSW5kZXgpID0+IHtcblx0XHRjb25zdCB3ZWVrU3RhcnQgPSBmaXJzdFdlZWtbMF0uYWRkKHdlZWtJbmRleCwgJ3dlZWsnKVxuXHRcdHJldHVybiBnZXRXZWVrRGF5cyh3ZWVrU3RhcnQsIGZpcnN0RGF5T2ZXZWVrKVxuXHR9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9udGhEYXlzKG1vbnRoRGF0ZTogZGF5anMuRGF5anMpOiBkYXlqcy5EYXlqc1tdIHtcblx0Y29uc3QgZGF5c0luTW9udGggPSBtb250aERhdGUuZGF5c0luTW9udGgoKVxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogZGF5c0luTW9udGggfSwgKF8sIGkpID0+XG5cdFx0bW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJykuYWRkKGksICdkYXknKVxuXHQpXG59XG5cbmludGVyZmFjZSBHZXREYXlIb3Vyc09wdGlvbnMge1xuXHRyZWZlcmVuY2VEYXRlPzogZGF5anMuRGF5anMgLy8gUmVmZXJlbmNlIGRhdGUgdG8gc2V0IHRoZSBob3VycyBvbiAoZGVmYXVsdCBpcyB0b2RheSlcblx0bGVuZ3RoPzogbnVtYmVyIC8vIE51bWJlciBvZiBob3VycyBpbiB0aGUgZGF5IChkZWZhdWx0IGlzIDI0KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF5SG91cnMoe1xuXHRyZWZlcmVuY2VEYXRlID0gZGF5anMoKSxcblx0bGVuZ3RoID0gMjQsXG59OiBHZXREYXlIb3Vyc09wdGlvbnMgPSB7fSk6IGRheWpzLkRheWpzW10ge1xuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aCB9LCAoXywgaSkgPT5cblx0XHRyZWZlcmVuY2VEYXRlLmhvdXIoaSkubWludXRlKDApLnNlY29uZCgwKS5taWxsaXNlY29uZCgwKVxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgV2Vla0RheXMgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5cbmV4cG9ydCBjb25zdCBHQVBfQkVUV0VFTl9FTEVNRU5UUyA9IDEgLy8gcHggKGdhcC0xKVxuZXhwb3J0IGNvbnN0IERBWV9OVU1CRVJfSEVJR0hUID0gMjQgLy8gcHggKGgtNilcbmV4cG9ydCBjb25zdCBFVkVOVF9CQVJfSEVJR0hUID0gMjQgLy8gcHggKGgtWzI0cHhdKVxuZXhwb3J0IGNvbnN0IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQgPSA0IC8vIERlZmF1bHQgbWF4IGV2ZW50cyBwZXIgZGF5XG5leHBvcnQgY29uc3QgRElTQUJMRURfQ0VMTF9DTEFTU05BTUUgPVxuXHQnYmctc2Vjb25kYXJ5IHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwb2ludGVyLWV2ZW50cy1ub25lJ1xuXG5leHBvcnQgY29uc3QgV0VFS19EQVlTX05VTUJFUl9NQVA6IFJlY29yZDxXZWVrRGF5cywgbnVtYmVyPiA9IHtcblx0c3VuZGF5OiAwLFxuXHRtb25kYXk6IDEsXG5cdHR1ZXNkYXk6IDIsXG5cdHdlZG5lc2RheTogMyxcblx0dGh1cnNkYXk6IDQsXG5cdGZyaWRheTogNSxcblx0c2F0dXJkYXk6IDYsXG59XG5cbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX1RPX1dFRUtfREFZUzogUmVjb3JkPG51bWJlciwgV2Vla0RheXM+ID0ge1xuXHQwOiAnc3VuZGF5Jyxcblx0MTogJ21vbmRheScsXG5cdDI6ICd0dWVzZGF5Jyxcblx0MzogJ3dlZG5lc2RheScsXG5cdDQ6ICd0aHVyc2RheScsXG5cdDU6ICdmcmlkYXknLFxuXHQ2OiAnc2F0dXJkYXknLFxufVxuIiwKICAgICJpbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHtcblx0RGlhbG9nLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dEZXNjcmlwdGlvbixcblx0RGlhbG9nRm9vdGVyLFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5pbnRlcmZhY2UgUmVjdXJyZW5jZUVkaXREaWFsb2dQcm9wcyB7XG5cdGlzT3BlbjogYm9vbGVhblxuXHRvbkNsb3NlOiAoKSA9PiB2b2lkXG5cdG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB2b2lkXG5cdG9wZXJhdGlvblR5cGU6ICdlZGl0JyB8ICdkZWxldGUnXG5cdGV2ZW50VGl0bGU6IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVjdXJyZW5jZUVkaXREaWFsb2coe1xuXHRpc09wZW4sXG5cdG9uQ2xvc2UsXG5cdG9uQ29uZmlybSxcblx0b3BlcmF0aW9uVHlwZSxcblx0ZXZlbnRUaXRsZSxcbn06IFJlY3VycmVuY2VFZGl0RGlhbG9nUHJvcHMpIHtcblx0Y29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHsgdDogY29udGV4dC50IH0pKVxuXG5cdGNvbnN0IGhhbmRsZVNjb3BlU2VsZWN0ID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0b25Db25maXJtKHNjb3BlKVxuXHRcdG9uQ2xvc2UoKVxuXHR9XG5cblx0Y29uc3QgaXNFZGl0ID0gb3BlcmF0aW9uVHlwZSA9PT0gJ2VkaXQnXG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17b25DbG9zZX0gb3Blbj17aXNPcGVufT5cblx0XHRcdDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cIm1heC13LW1kXCI+XG5cdFx0XHRcdDxEaWFsb2dIZWFkZXI+XG5cdFx0XHRcdFx0PERpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdFx0e2lzRWRpdCA/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudCcpIDogdCgnZGVsZXRlUmVjdXJyaW5nRXZlbnQnKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdDxEaWFsb2dEZXNjcmlwdGlvbj5cblx0XHRcdFx0XHRcdFwie2V2ZW50VGl0bGV9XCJ7JyAnfVxuXHRcdFx0XHRcdFx0e2lzRWRpdFxuXHRcdFx0XHRcdFx0XHQ/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJylcblx0XHRcdFx0XHRcdFx0OiB0KCdkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dEZXNjcmlwdGlvbj5cblx0XHRcdFx0PC9EaWFsb2dIZWFkZXI+XG5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTNcIj5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwganVzdGlmeS1zdGFydCBoLWF1dG8gcC00XCJcblx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNjb3BlU2VsZWN0KCd0aGlzJyl9XG5cdFx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPnt0KCd0aGlzRXZlbnQnKX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdHtpc0VkaXQgPyB0KCdvbmx5Q2hhbmdlVGhpcycpIDogdCgnb25seURlbGV0ZVRoaXMnKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ2ZvbGxvd2luZycpfVxuXHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgndGhpc0FuZEZvbGxvd2luZ0V2ZW50cycpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0e2lzRWRpdCA/IHQoJ2NoYW5nZVRoaXNBbmRGdXR1cmUnKSA6IHQoJ2RlbGV0ZVRoaXNBbmRGdXR1cmUnKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ2FsbCcpfVxuXHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgnYWxsRXZlbnRzJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0XHR7aXNFZGl0ID8gdCgnY2hhbmdlRW50aXJlU2VyaWVzJykgOiB0KCdkZWxldGVFbnRpcmVTZXJpZXMnKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0PERpYWxvZ0Zvb3Rlcj5cblx0XHRcdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uQ2xvc2V9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdFx0XHR7dCgnY2FuY2VsJyl9XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvRGlhbG9nRm9vdGVyPlxuXHRcdFx0PC9EaWFsb2dDb250ZW50PlxuXHRcdDwvRGlhbG9nPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgRHJhZ0VuZEV2ZW50IH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJy4uL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgZ2V0VXBkYXRlZEV2ZW50ID0gKFxuXHRldmVudDogRHJhZ0VuZEV2ZW50LFxuXHRhY3RpdmVFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcbikgPT4ge1xuXHRjb25zdCB7IGFjdGl2ZSwgb3ZlciB9ID0gZXZlbnRcblxuXHRpZiAoIWFjdGl2ZSB8fCAhb3ZlciB8fCAhYWN0aXZlRXZlbnQpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cblx0Y29uc3QgaXNUaW1lQ2VsbCA9IG92ZXIuZGF0YS5jdXJyZW50Py50eXBlID09PSAndGltZS1jZWxsJ1xuXHRjb25zdCB7IHJlc291cmNlSWQsIGFsbERheSB9ID0gb3Zlci5kYXRhLmN1cnJlbnQgfHwge31cblx0bGV0IG5ld1N0YXJ0XG5cblx0aWYgKGlzVGltZUNlbGwpIHtcblx0XHRjb25zdCB7IGRhdGUsIGhvdXIgPSAwLCBtaW51dGUgPSAwIH0gPSBvdmVyLmRhdGEuY3VycmVudFxuXG5cdFx0Ly8gQ3JlYXRlIG5ldyBzdGFydCB0aW1lIGJhc2VkIG9uIHRoZSBkcm9wIHRhcmdldFxuXHRcdG5ld1N0YXJ0ID0gZGF5anMoZGF0ZSkuaG91cihob3VyKS5taW51dGUobWludXRlKVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IHsgZGF0ZSB9ID0gb3Zlci5kYXRhLmN1cnJlbnRcblxuXHRcdG5ld1N0YXJ0ID0gZGF5anMoZGF0ZSlcblx0fVxuXG5cdGNvbnN0IGV2ZW50RHVyYXRpb24gPSBhY3RpdmVFdmVudC5lbmQuZGlmZihhY3RpdmVFdmVudC5zdGFydCwgJ3NlY29uZCcpXG5cblx0Ly8gQ3JlYXRlIG5ldyBlbmQgdGltZSBieSBhZGRpbmcgdGhlIG9yaWdpbmFsIGR1cmF0aW9uXG5cdGxldCBuZXdFbmQgPSBuZXdTdGFydC5hZGQoZXZlbnREdXJhdGlvbiwgJ3NlY29uZCcpXG5cblx0aWYgKG5ld0VuZC5pc1NhbWUobmV3RW5kLnN0YXJ0T2YoJ2RheScpKSkge1xuXHRcdC8vIElmIHRoZSBuZXcgZW5kIHRpbWUgaXMgYXQgbWlkbmlnaHQsIHNldCBpdCB0byAyNCBob3VycyBvZiBwYXJ0aWFsIGRheVxuXHRcdG5ld0VuZCA9IG5ld0VuZC5zdWJ0cmFjdCgxLCAnZGF5JykuZW5kT2YoJ2RheScpXG5cdH1cblxuXHQvLyBVcGRhdGUgdGhlIGV2ZW50IHdpdGggbmV3IHRpbWVzIGFuZCByZXNvdXJjZSBpZiBjaGFuZ2VkXG5cdGNvbnN0IHVwZGF0ZXMgPSB7XG5cdFx0c3RhcnQ6IG5ld1N0YXJ0LFxuXHRcdGVuZDogbmV3RW5kLFxuXHRcdHJlc291cmNlSWQsXG5cdFx0YWxsRGF5OiBpc1RpbWVDZWxsID8gZmFsc2UgOiAoYWxsRGF5ID8/IGFjdGl2ZUV2ZW50LmFsbERheSksXG5cdH1cblx0cmV0dXJuIHsgYWN0aXZlRXZlbnQsIHVwZGF0ZXMgfVxufVxuIiwKICAgICJpbXBvcnQgeyBEcmFnT3ZlcmxheSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgeyBzbmFwQ2VudGVyVG9DdXJzb3IgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi4vdHlwZXMnXG5cbmludGVyZmFjZSBFdmVudERyYWdPdmVybGF5UHJvcHMge1xuXHRyZWY6IFJlYWN0LlJlZjx7IHNldEFjdGl2ZUV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWQgfT5cbn1cblxuZXhwb3J0IGNvbnN0IEV2ZW50RHJhZ092ZXJsYXk6IFJlYWN0LkZDPEV2ZW50RHJhZ092ZXJsYXlQcm9wcz4gPSAoeyByZWYgfSkgPT4ge1xuXHRjb25zdCBbYWN0aXZlRXZlbnQsIHNldEFjdGl2ZUV2ZW50XSA9IHVzZVN0YXRlPENhbGVuZGFyRXZlbnQ+KG51bGwpXG5cblx0dXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG5cdFx0c2V0QWN0aXZlRXZlbnQsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PERyYWdPdmVybGF5IG1vZGlmaWVycz17W3NuYXBDZW50ZXJUb0N1cnNvcl19PlxuXHRcdFx0e2FjdGl2ZUV2ZW50ICYmIChcblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnY3Vyc29yLWdyYWIgdHJ1bmNhdGUgcm91bmRlZCBiZy1hbWJlci0yMDAgcC0yIHRleHQtWzEwcHhdIHNoYWRvdy1sZyBzbTp0ZXh0LXhzIHctMjAnLFxuXHRcdFx0XHRcdFx0YWN0aXZlRXZlbnQuYmFja2dyb3VuZENvbG9yIHx8ICdiZy1ibHVlLTUwMCcsXG5cdFx0XHRcdFx0XHRhY3RpdmVFdmVudC5jb2xvciB8fCAndGV4dC13aGl0ZSdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e2FjdGl2ZUV2ZW50Py50aXRsZX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpfVxuXHRcdDwvRHJhZ092ZXJsYXk+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgQ2hlY2tib3ggfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2hlY2tib3gnXG5pbXBvcnQgeyBEYXRlUGlja2VyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyJ1xuaW1wb3J0IHsgRGlhbG9nRm9vdGVyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RpYWxvZydcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2lucHV0J1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvbGFiZWwnXG5pbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgVGltZVBpY2tlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS90aW1lLXBpY2tlcidcbmltcG9ydCB7IGlzQnVzaW5lc3NEYXkgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2J1c2luZXNzLWhvdXJzJ1xuaW1wb3J0IHtcblx0YnVpbGREYXRlVGltZSxcblx0YnVpbGRFbmREYXRlVGltZSxcblx0Z2V0VGltZUNvbnN0cmFpbnRzLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2V2ZW50LWZvcm0tdXRpbHMnXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdERpYWxvZyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cnXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdG9yIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0b3IvcmVjdXJyZW5jZS1lZGl0b3InXG5pbXBvcnQgeyB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvaG9va3MvdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zJ1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyBpc1JlY3VycmluZ0V2ZW50IH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IENPTE9SX09QVElPTlMgPSBbXG5cdHtcblx0XHR2YWx1ZTogYGJnLWJsdWUtMTAwIHRleHQtYmx1ZS04MDBgLFxuXHRcdGxhYmVsOiAnQmx1ZScsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLWdyZWVuLTEwMCB0ZXh0LWdyZWVuLTgwMGAsXG5cdFx0bGFiZWw6ICdHcmVlbicsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXB1cnBsZS0xMDAgdGV4dC1wdXJwbGUtODAwYCxcblx0XHRsYWJlbDogJ1B1cnBsZScsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXJlZC0xMDAgdGV4dC1yZWQtODAwYCxcblx0XHRsYWJlbDogJ1JlZCcsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXllbGxvdy0xMDAgdGV4dC15ZWxsb3ctODAwYCxcblx0XHRsYWJlbDogJ1llbGxvdycsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXBpbmstMTAwIHRleHQtcGluay04MDBgLFxuXHRcdGxhYmVsOiAnUGluaycsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLWluZGlnby0xMDAgdGV4dC1pbmRpZ28tODAwYCxcblx0XHRsYWJlbDogJ0luZGlnbycsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLWFtYmVyLTEwMCB0ZXh0LWFtYmVyLTgwMGAsXG5cdFx0bGFiZWw6ICdBbWJlcicsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLWVtZXJhbGQtMTAwIHRleHQtZW1lcmFsZC04MDBgLFxuXHRcdGxhYmVsOiAnRW1lcmFsZCcsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXNreS0xMDAgdGV4dC1za3ktODAwYCxcblx0XHRsYWJlbDogJ1NreScsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXZpb2xldC0xMDAgdGV4dC12aW9sZXQtODAwYCxcblx0XHRsYWJlbDogJ1Zpb2xldCcsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXJvc2UtMTAwIHRleHQtcm9zZS04MDBgLFxuXHRcdGxhYmVsOiAnUm9zZScsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXRlYWwtMTAwIHRleHQtdGVhbC04MDBgLFxuXHRcdGxhYmVsOiAnVGVhbCcsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLW9yYW5nZS0xMDAgdGV4dC1vcmFuZ2UtODAwYCxcblx0XHRsYWJlbDogJ09yYW5nZScsXG5cdH0sXG5dXG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRGb3JtUHJvcHMge1xuXHRvcGVuPzogYm9vbGVhblxuXHRzZWxlY3RlZEV2ZW50PzogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0b25BZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25VcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25EZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DbG9zZTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgRXZlbnRGb3JtOiBSZWFjdC5GQzxFdmVudEZvcm1Qcm9wcz4gPSAoe1xuXHRzZWxlY3RlZEV2ZW50LFxuXHRvbkNsb3NlLFxuXHRvblVwZGF0ZSxcblx0b25EZWxldGUsXG5cdG9uQWRkLFxufSkgPT4ge1xuXHRjb25zdCB7XG5cdFx0ZGlhbG9nU3RhdGUsXG5cdFx0b3BlbkVkaXREaWFsb2csXG5cdFx0b3BlbkRlbGV0ZURpYWxvZyxcblx0XHRjbG9zZURpYWxvZyxcblx0XHRoYW5kbGVDb25maXJtLFxuXHR9ID0gdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zKG9uQ2xvc2UpXG5cblx0Y29uc3QgeyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsIHQsIGJ1c2luZXNzSG91cnMsIHRpbWVGb3JtYXQgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0XHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQuZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LFxuXHRcdFx0dDogY29udGV4dC50LFxuXHRcdFx0YnVzaW5lc3NIb3VyczogY29udGV4dC5idXNpbmVzc0hvdXJzLFxuXHRcdFx0dGltZUZvcm1hdDogY29udGV4dC50aW1lRm9ybWF0LFxuXHRcdH0pKVxuXG5cdGNvbnN0IHN0YXJ0ID0gc2VsZWN0ZWRFdmVudD8uc3RhcnQgPz8gZGF5anMoKVxuXHRjb25zdCBlbmQgPSBzZWxlY3RlZEV2ZW50Py5lbmQgPz8gZGF5anMoKS5hZGQoMSwgJ2hvdXInKVxuXG5cdC8vIEZpbmQgcGFyZW50IGV2ZW50IGlmIHRoaXMgaXMgYSByZWN1cnJpbmcgZXZlbnQgaW5zdGFuY2Vcblx0Y29uc3QgcGFyZW50RXZlbnQgPSBzZWxlY3RlZEV2ZW50XG5cdFx0PyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudClcblx0XHQ6IG51bGxcblxuXHQvLyBGb3JtIHN0YXRlXG5cdGNvbnN0IFtzdGFydERhdGUsIHNldFN0YXJ0RGF0ZV0gPSB1c2VTdGF0ZShzdGFydC50b0RhdGUoKSlcblx0Y29uc3QgW2VuZERhdGUsIHNldEVuZERhdGVdID0gdXNlU3RhdGUoZW5kLnRvRGF0ZSgpKVxuXHRjb25zdCBbaXNBbGxEYXksIHNldElzQWxsRGF5XSA9IHVzZVN0YXRlKHNlbGVjdGVkRXZlbnQ/LmFsbERheSB8fCBmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkQ29sb3IsIHNldFNlbGVjdGVkQ29sb3JdID0gdXNlU3RhdGUoXG5cdFx0c2VsZWN0ZWRFdmVudD8uY29sb3IgfHwgQ09MT1JfT1BUSU9OU1swXS52YWx1ZVxuXHQpXG5cblx0Ly8gVGltZSBzdGF0ZVxuXHRjb25zdCBbc3RhcnRUaW1lLCBzZXRTdGFydFRpbWVdID0gdXNlU3RhdGUoc3RhcnQuZm9ybWF0KCdISDptbScpKVxuXHRjb25zdCBbZW5kVGltZSwgc2V0RW5kVGltZV0gPSB1c2VTdGF0ZShlbmQuZm9ybWF0KCdISDptbScpKVxuXG5cdC8vIEluaXRpYWxpemUgZm9ybSB2YWx1ZXMgZnJvbSBzZWxlY3RlZCBldmVudCBvciBkZWZhdWx0c1xuXHRjb25zdCBbZm9ybVZhbHVlcywgc2V0Rm9ybVZhbHVlc10gPSB1c2VTdGF0ZSh7XG5cdFx0dGl0bGU6IHNlbGVjdGVkRXZlbnQ/LnRpdGxlIHx8ICcnLFxuXHRcdGRlc2NyaXB0aW9uOiBzZWxlY3RlZEV2ZW50Py5kZXNjcmlwdGlvbiB8fCAnJyxcblx0XHRsb2NhdGlvbjogc2VsZWN0ZWRFdmVudD8ubG9jYXRpb24gfHwgJycsXG5cdH0pXG5cblx0Ly8gUmVjdXJyZW5jZSBzdGF0ZSAtIHB1bGwgUlJVTEUgZnJvbSBwYXJlbnQgaWYgdGhpcyBpcyBhbiBpbnN0YW5jZVxuXHRjb25zdCBbcnJ1bGUsIHNldFJydWxlXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KCgpID0+IHtcblx0XHRjb25zdCBldmVudFJydWxlID0gc2VsZWN0ZWRFdmVudD8ucnJ1bGUgfHwgcGFyZW50RXZlbnQ/LnJydWxlXG5cdFx0cmV0dXJuIGV2ZW50UnJ1bGUgfHwgbnVsbFxuXHR9KVxuXG5cdC8vIENyZWF0ZSB3cmFwcGVyIGZ1bmN0aW9ucyB0byBmaXggVHlwZVNjcmlwdCBlcnJvcnMgd2l0aCBEYXRlUGlja2VyXG5cdGNvbnN0IGhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0c2V0U3RhcnREYXRlKGRhdGUpXG5cdFx0aWYgKGRhdGUgJiYgZGF5anMoZGF0ZSkuaXNBZnRlcihkYXlqcyhlbmREYXRlKSkpIHtcblx0XHRcdHNldEVuZERhdGUoZGF0ZSlcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVFbmREYXRlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcblx0XHRzZXRFbmREYXRlKGRhdGUpXG5cdFx0aWYgKGRhdGUgJiYgZGF5anMoZGF0ZSkuaXNCZWZvcmUoZGF5anMoc3RhcnREYXRlKSkpIHtcblx0XHRcdHNldFN0YXJ0RGF0ZShkYXRlKVxuXHRcdH1cblx0fVxuXG5cdC8vIFRpbWUgdmFsaWRhdGlvbiBoYW5kbGVycyAtIG9ubHkgdmFsaWRhdGUgd2hlbiBkYXRlcyBhcmUgdGhlIHNhbWVcblx0Y29uc3QgaGFuZGxlU3RhcnRUaW1lQ2hhbmdlID0gKHRpbWU6IHN0cmluZykgPT4ge1xuXHRcdHNldFN0YXJ0VGltZSh0aW1lKVxuXHRcdC8vIE9ubHkgdmFsaWRhdGUgaWYgc2FtZSBkYXlcblx0XHRpZiAoZGF5anMoc3RhcnREYXRlKS5pc1NhbWUoZGF5anMoZW5kRGF0ZSksICdkYXknKSAmJiB0aW1lID4gZW5kVGltZSkge1xuXHRcdFx0c2V0RW5kVGltZSh0aW1lKVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGhhbmRsZUVuZFRpbWVDaGFuZ2UgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0c2V0RW5kVGltZSh0aW1lKVxuXHRcdC8vIE9ubHkgdmFsaWRhdGUgaWYgc2FtZSBkYXlcblx0XHRpZiAoZGF5anMoc3RhcnREYXRlKS5pc1NhbWUoZGF5anMoZW5kRGF0ZSksICdkYXknKSAmJiB0aW1lIDwgc3RhcnRUaW1lKSB7XG5cdFx0XHRzZXRTdGFydFRpbWUodGltZSlcblx0XHR9XG5cdH1cblxuXHQvLyBVcGRhdGUgZm9ybSB2YWx1ZXMgd2hlbiBpbnB1dCBjaGFuZ2VzXG5cdGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gKFxuXHRcdGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PlxuXHQpID0+IHtcblx0XHRjb25zdCB7IG5hbWUsIHZhbHVlIH0gPSBlLnRhcmdldFxuXHRcdHNldEZvcm1WYWx1ZXMoKHByZXYpID0+ICh7IC4uLnByZXYsIFtuYW1lXTogdmFsdWUgfSkpXG5cdH1cblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdC8vIFJlc2V0IGVuZCB0aW1lIHdoZW4gYWxsIGRheSBpcyB0b2dnbGVkIHRvIG9uXG5cdFx0aWYgKGlzQWxsRGF5KSB7XG5cdFx0XHRzZXRFbmRUaW1lKCcyMzo1OScpXG5cdFx0fVxuXHR9LCBbaXNBbGxEYXldKVxuXG5cdGNvbnN0IGhhbmRsZVN1Ym1pdCA9IChlOiBSZWFjdC5Gb3JtRXZlbnQpID0+IHtcblx0XHRlLnByZXZlbnREZWZhdWx0KClcblxuXHRcdGNvbnN0IHN0YXJ0RGF0ZVRpbWUgPSBidWlsZERhdGVUaW1lKHN0YXJ0RGF0ZSwgc3RhcnRUaW1lLCBpc0FsbERheSlcblx0XHRjb25zdCBlbmREYXRlVGltZSA9IGJ1aWxkRW5kRGF0ZVRpbWUoZW5kRGF0ZSwgZW5kVGltZSwgaXNBbGxEYXkpXG5cblx0XHRjb25zdCBldmVudERhdGE6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRpZDogc2VsZWN0ZWRFdmVudD8uaWQgfHwgZGF5anMoKS5mb3JtYXQoJ1lZWVlNTURESEhtbXNzJyksXG5cdFx0XHR0aXRsZTogZm9ybVZhbHVlcy50aXRsZSxcblx0XHRcdHN0YXJ0OiBzdGFydERhdGVUaW1lLFxuXHRcdFx0ZW5kOiBlbmREYXRlVGltZSxcblx0XHRcdHJlc291cmNlSWQ6IHNlbGVjdGVkRXZlbnQ/LnJlc291cmNlSWQsXG5cdFx0XHRkZXNjcmlwdGlvbjogZm9ybVZhbHVlcy5kZXNjcmlwdGlvbixcblx0XHRcdGxvY2F0aW9uOiBmb3JtVmFsdWVzLmxvY2F0aW9uLFxuXHRcdFx0YWxsRGF5OiBpc0FsbERheSxcblx0XHRcdGNvbG9yOiBzZWxlY3RlZENvbG9yLFxuXHRcdFx0cnJ1bGU6IHJydWxlIHx8IHVuZGVmaW5lZCxcblx0XHR9XG5cblx0XHRpZiAoc2VsZWN0ZWRFdmVudD8uaWQgJiYgaXNSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KSkge1xuXHRcdFx0b3BlbkVkaXREaWFsb2coc2VsZWN0ZWRFdmVudCwge1xuXHRcdFx0XHR0aXRsZTogZm9ybVZhbHVlcy50aXRsZSxcblx0XHRcdFx0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG5cdFx0XHRcdGVuZDogZW5kRGF0ZVRpbWUsXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiBmb3JtVmFsdWVzLmRlc2NyaXB0aW9uLFxuXHRcdFx0XHRsb2NhdGlvbjogZm9ybVZhbHVlcy5sb2NhdGlvbixcblx0XHRcdFx0YWxsRGF5OiBpc0FsbERheSxcblx0XHRcdFx0Y29sb3I6IHNlbGVjdGVkQ29sb3IsXG5cdFx0XHRcdHJydWxlOiBycnVsZSB8fCB1bmRlZmluZWQsXG5cdFx0XHR9KVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0aWYgKHNlbGVjdGVkRXZlbnQ/LmlkKSB7XG5cdFx0XHRvblVwZGF0ZT8uKGV2ZW50RGF0YSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0b25BZGQ/LihldmVudERhdGEpXG5cdFx0fVxuXHRcdG9uQ2xvc2UoKVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRGVsZXRlID0gKCkgPT4ge1xuXHRcdGlmIChzZWxlY3RlZEV2ZW50Py5pZCkge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhpcyBpcyBhIHJlY3VycmluZyBldmVudFxuXHRcdFx0aWYgKGlzUmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudCkpIHtcblx0XHRcdFx0Ly8gU2hvdyByZWN1cnJpbmcgZXZlbnQgZGVsZXRlIGRpYWxvZ1xuXHRcdFx0XHRvcGVuRGVsZXRlRGlhbG9nKHNlbGVjdGVkRXZlbnQpXG5cdFx0XHRcdHJldHVybiAvLyBEb24ndCBjbG9zZSB0aGUgZm9ybSB5ZXQsIGxldCB0aGUgZGlhbG9nIGhhbmRsZSBpdFxuXHRcdFx0fVxuXHRcdFx0b25EZWxldGU/LihzZWxlY3RlZEV2ZW50KVxuXHRcdFx0b25DbG9zZSgpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlUlJ1bGVDaGFuZ2UgPSAobmV3UlJ1bGU6IFJSdWxlT3B0aW9ucyB8IG51bGwpID0+IHtcblx0XHRpZiAoIW5ld1JSdWxlKSB7XG5cdFx0XHRzZXRScnVsZShudWxsKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGNvbnN0IHN0YXJ0RGF0ZVRpbWUgPSBidWlsZERhdGVUaW1lKHN0YXJ0RGF0ZSwgc3RhcnRUaW1lLCBpc0FsbERheSlcblx0XHRzZXRScnVsZSh7IC4uLm5ld1JSdWxlLCBkdHN0YXJ0OiBzdGFydERhdGVUaW1lLnRvRGF0ZSgpIH0pXG5cdH1cblxuXHRjb25zdCBkaXNhYmxlZERhdGVNYXRjaGVyID0gYnVzaW5lc3NIb3Vyc1xuXHRcdD8gKGRhdGU6IERhdGUpID0+ICFpc0J1c2luZXNzRGF5KGRheWpzKGRhdGUpLCBidXNpbmVzc0hvdXJzKVxuXHRcdDogdW5kZWZpbmVkXG5cblx0Y29uc3Qgc3RhcnRDb25zdHJhaW50cyA9IGdldFRpbWVDb25zdHJhaW50cyhzdGFydERhdGUsIGJ1c2luZXNzSG91cnMpXG5cdGNvbnN0IGVuZENvbnN0cmFpbnRzID0gZ2V0VGltZUNvbnN0cmFpbnRzKGVuZERhdGUsIGJ1c2luZXNzSG91cnMpXG5cblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0PGZvcm0gY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBmbGV4LTEgbWluLWgtMFwiIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9PlxuXHRcdFx0XHQ8U2Nyb2xsQXJlYSBjbGFzc05hbWU9XCJmbGV4LTEgbWluLWgtMFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMyBzbTpnYXAtNCBwLTFcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMlwiPlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCIgaHRtbEZvcj1cInRpdGxlXCI+XG5cdFx0XHRcdFx0XHRcdFx0e3QoJ3RpdGxlJyl9XG5cdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0aWQ9XCJ0aXRsZVwiXG5cdFx0XHRcdFx0XHRcdFx0bmFtZT1cInRpdGxlXCJcblx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9e3QoJ2V2ZW50VGl0bGVQbGFjZWhvbGRlcicpfVxuXHRcdFx0XHRcdFx0XHRcdHJlcXVpcmVkXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2Zvcm1WYWx1ZXMudGl0bGV9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIiBodG1sRm9yPVwiZGVzY3JpcHRpb25cIj5cblx0XHRcdFx0XHRcdFx0XHR7dCgnZGVzY3JpcHRpb24nKX1cblx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRpZD1cImRlc2NyaXB0aW9uXCJcblx0XHRcdFx0XHRcdFx0XHRuYW1lPVwiZGVzY3JpcHRpb25cIlxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnZXZlbnREZXNjcmlwdGlvblBsYWNlaG9sZGVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2Zvcm1WYWx1ZXMuZGVzY3JpcHRpb259XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cblx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17aXNBbGxEYXl9XG5cdFx0XHRcdFx0XHRcdFx0aWQ9XCJhbGxEYXlcIlxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17KGNoZWNrZWQpID0+IHNldElzQWxsRGF5KGNoZWNrZWQgPT09IHRydWUpfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCIgaHRtbEZvcj1cImFsbERheVwiPlxuXHRcdFx0XHRcdFx0XHRcdHt0KCdhbGxEYXknKX1cblx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIgc206Z2FwLTRcIj5cblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ3N0YXJ0RGF0ZScpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PERhdGVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VPblNlbGVjdFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZT17c3RhcnREYXRlfVxuXHRcdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkRGF0ZU1hdGNoZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlU3RhcnREYXRlQ2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnZW5kRGF0ZScpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PERhdGVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VPblNlbGVjdFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZT17ZW5kRGF0ZX1cblx0XHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkPXtkaXNhYmxlZERhdGVNYXRjaGVyfVxuXHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZUVuZERhdGVDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0eyFpc0FsbERheSAmJiAoXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtMiBzbTpnYXAtNFwiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ3N0YXJ0VGltZScpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8VGltZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtdC0xIGgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1heFRpbWU9e3N0YXJ0Q29uc3RyYWludHMubWF4fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtaW5UaW1lPXtzdGFydENvbnN0cmFpbnRzLm1pbn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZT1cInN0YXJ0LXRpbWVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlU3RhcnRUaW1lQ2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17c3RhcnRUaW1lfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KCdlbmRUaW1lJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdDxUaW1lUGlja2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTEgaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4VGltZT17ZW5kQ29uc3RyYWludHMubWF4fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtaW5UaW1lPXtlbmRDb25zdHJhaW50cy5taW59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU9XCJlbmQtdGltZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVFbmRUaW1lQ2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17ZW5kVGltZX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KX1cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnY29sb3InKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0e0NPTE9SX09QVElPTlMubWFwKChjb2xvcikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcmlhLWxhYmVsPXtjb2xvci5sYWJlbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRgJHtjb2xvci52YWx1ZX0gaC02IHctNiByb3VuZGVkLWZ1bGwgc206aC04IHNtOnctOGAsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRDb2xvciA9PT0gY29sb3IudmFsdWUgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdyaW5nLTIgcmluZy1ibGFjayByaW5nLW9mZnNldC0xIHNtOnJpbmctb2Zmc2V0LTInXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17Y29sb3IudmFsdWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNldFNlbGVjdGVkQ29sb3IoY29sb3IudmFsdWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMSBzbTpnYXAtMlwiPlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCIgaHRtbEZvcj1cImxvY2F0aW9uXCI+XG5cdFx0XHRcdFx0XHRcdFx0e3QoJ2xvY2F0aW9uJyl9XG5cdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0aWQ9XCJsb2NhdGlvblwiXG5cdFx0XHRcdFx0XHRcdFx0bmFtZT1cImxvY2F0aW9uXCJcblx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9e3QoJ2V2ZW50TG9jYXRpb25QbGFjZWhvbGRlcicpfVxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtmb3JtVmFsdWVzLmxvY2F0aW9ufVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdHsvKiBSZWN1cnJlbmNlIFNlY3Rpb24gKi99XG5cdFx0XHRcdFx0XHQ8UmVjdXJyZW5jZUVkaXRvciBvbkNoYW5nZT17aGFuZGxlUlJ1bGVDaGFuZ2V9IHZhbHVlPXtycnVsZX0gLz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9TY3JvbGxBcmVhPlxuXG5cdFx0XHRcdDxEaWFsb2dGb290ZXIgY2xhc3NOYW1lPVwibXQtNCBzaHJpbmstMCBmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgc206ZmxleC1yb3cgc206Z2FwLTBcIj5cblx0XHRcdFx0XHR7c2VsZWN0ZWRFdmVudD8uaWQgJiYgKFxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgc206bXItYXV0byBzbTp3LWF1dG9cIlxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtoYW5kbGVEZWxldGV9XG5cdFx0XHRcdFx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZGVzdHJ1Y3RpdmVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7dCgnZGVsZXRlJyl9XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgZ2FwLTIgc206dy1hdXRvXCI+XG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXgtMSBzbTpmbGV4LW5vbmVcIlxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtvbkNsb3NlfVxuXHRcdFx0XHRcdFx0XHRzaXplPVwic21cIlxuXHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7dCgnY2FuY2VsJyl9XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdDxCdXR0b24gY2xhc3NOYW1lPVwiZmxleC0xIHNtOmZsZXgtbm9uZVwiIHNpemU9XCJzbVwiIHR5cGU9XCJzdWJtaXRcIj5cblx0XHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgndXBkYXRlJykgOiB0KCdjcmVhdGUnKX1cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0RpYWxvZ0Zvb3Rlcj5cblx0XHRcdDwvZm9ybT5cblxuXHRcdFx0ey8qIFJlY3VycmluZyBFdmVudCBFZGl0IERpYWxvZyAqL31cblx0XHRcdDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuXHRcdFx0XHRldmVudFRpdGxlPXtkaWFsb2dTdGF0ZS5ldmVudD8udGl0bGUgfHwgJyd9XG5cdFx0XHRcdGlzT3Blbj17ZGlhbG9nU3RhdGUuaXNPcGVufVxuXHRcdFx0XHRvbkNsb3NlPXtjbG9zZURpYWxvZ31cblx0XHRcdFx0b25Db25maXJtPXtoYW5kbGVDb25maXJtfVxuXHRcdFx0XHRvcGVyYXRpb25UeXBlPXtkaWFsb2dTdGF0ZS5vcGVyYXRpb25UeXBlfVxuXHRcdFx0Lz5cblx0XHQ8Lz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBDaGVja2JveFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtY2hlY2tib3gnXG5pbXBvcnQgeyBDaGVja0ljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDaGVja2JveCh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBDaGVja2JveFByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxDaGVja2JveFByaW1pdGl2ZS5Sb290XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQncGVlciBib3JkZXItaW5wdXQgZGFyazpiZy1pbnB1dC8zMCBkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1wcmltYXJ5IGRhdGEtW3N0YXRlPWNoZWNrZWRdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6ZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTpib3JkZXItcHJpbWFyeSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBzaXplLTQgc2hyaW5rLTAgcm91bmRlZC1bNHB4XSBib3JkZXIgc2hhZG93LXhzIHRyYW5zaXRpb24tc2hhZG93IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjaGVja2JveFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvclxuXHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWN1cnJlbnQgdHJhbnNpdGlvbi1ub25lXCJcblx0XHRcdFx0ZGF0YS1zbG90PVwiY2hlY2tib3gtaW5kaWNhdG9yXCJcblx0XHRcdD5cblx0XHRcdFx0PENoZWNrSWNvbiBjbGFzc05hbWU9XCJzaXplLTMuNVwiIC8+XG5cdFx0XHQ8L0NoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvcj5cblx0XHQ8L0NoZWNrYm94UHJpbWl0aXZlLlJvb3Q+XG5cdClcbn1cblxuZXhwb3J0IHsgQ2hlY2tib3ggfVxuIiwKICAgICJpbXBvcnQgeyBQb3BvdmVyQ2xvc2UgfSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtcG9wb3ZlcidcbmltcG9ydCB7IENhbGVuZGFyIGFzIENhbGVuZGFySWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBNYXRjaGVyIH0gZnJvbSAncmVhY3QtZGF5LXBpY2tlcidcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyBDYWxlbmRhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9jYWxlbmRhcidcbmltcG9ydCB7XG5cdFBvcG92ZXIsXG5cdFBvcG92ZXJDb250ZW50LFxuXHRQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3BvcG92ZXInXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgRGF0ZVBpY2tlclByb3BzIHtcblx0ZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZFxuXHRvbkNoYW5nZT86IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB2b2lkXG5cdGxhYmVsPzogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRjbG9zZU9uU2VsZWN0PzogYm9vbGVhblxuXHRkaXNhYmxlZD86IE1hdGNoZXIgfCBNYXRjaGVyW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERhdGVQaWNrZXIoe1xuXHRkYXRlLFxuXHRjbG9zZU9uU2VsZWN0LFxuXHRvbkNoYW5nZSxcblx0bGFiZWwgPSAnUGljayBhIGRhdGUnLFxuXHRjbGFzc05hbWUsXG5cdGRpc2FibGVkLFxufTogRGF0ZVBpY2tlclByb3BzKSB7XG5cdGNvbnN0IHBvcE92ZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsPihudWxsKVxuXHRjb25zdCBbc2VsZWN0ZWREYXRlLCBzZXRTZWxlY3RlZERhdGVdID0gdXNlU3RhdGU8RGF0ZSB8IHVuZGVmaW5lZD4oZGF0ZSlcblxuXHQvLyBTeW5jIGRhdGUgc3RhdGUgd2l0aCBkYXRlIHByb3Bcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRzZXRTZWxlY3RlZERhdGUoZGF0ZSlcblx0fSwgW2RhdGVdKVxuXG5cdGNvbnN0IGhhbmRsZURhdGVTZWxlY3QgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuXHRcdHNldFNlbGVjdGVkRGF0ZShkYXRlKVxuXHRcdGlmIChjbG9zZU9uU2VsZWN0KSB7XG5cdFx0XHRwb3BPdmVyUmVmLmN1cnJlbnQ/LmNsaWNrKClcblx0XHR9XG5cdFx0b25DaGFuZ2U/LihkYXRlKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cblx0XHRcdDxQb3BvdmVyPlxuXHRcdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHQnZGF0YS1bZW1wdHk9dHJ1ZV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHctZnVsbCBqdXN0aWZ5LXN0YXJ0IHRleHQtbGVmdCBmb250LW5vcm1hbCdcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRkYXRhLWVtcHR5PXshZGF0ZX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8Q2FsZW5kYXJJY29uIC8+XG5cdFx0XHRcdFx0XHR7c2VsZWN0ZWREYXRlID8gKFxuXHRcdFx0XHRcdFx0XHRkYXlqcyhzZWxlY3RlZERhdGUpLmZvcm1hdCgnTU1NIEQsIFlZWVknKVxuXHRcdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdFx0PHNwYW4+e2xhYmVsfTwvc3Bhbj5cblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvUG9wb3ZlclRyaWdnZXI+XG5cdFx0XHRcdDxQb3BvdmVyQ29udGVudCBhbGlnbj1cInN0YXJ0XCIgY2xhc3NOYW1lPVwidy1hdXRvIHAtMFwiPlxuXHRcdFx0XHRcdDxQb3BvdmVyQ2xvc2UgcmVmPXtwb3BPdmVyUmVmfSAvPlxuXHRcdFx0XHRcdDxDYWxlbmRhclxuXHRcdFx0XHRcdFx0Y2FwdGlvbkxheW91dD1cImRyb3Bkb3duXCJcblx0XHRcdFx0XHRcdGRlZmF1bHRNb250aD17c2VsZWN0ZWREYXRlfVxuXHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkfVxuXHRcdFx0XHRcdFx0bW9kZT1cInNpbmdsZVwiXG5cdFx0XHRcdFx0XHRvblNlbGVjdD17aGFuZGxlRGF0ZVNlbGVjdH1cblx0XHRcdFx0XHRcdHNlbGVjdGVkPXtzZWxlY3RlZERhdGV9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHRcdDwvUG9wb3Zlcj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQge1xuXHRDaGV2cm9uRG93bkljb24sXG5cdENoZXZyb25MZWZ0SWNvbixcblx0Q2hldnJvblJpZ2h0SWNvbixcbn0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IERheUJ1dHRvbiB9IGZyb20gJ3JlYWN0LWRheS1waWNrZXInXG5pbXBvcnQgeyBEYXlQaWNrZXIsIGdldERlZmF1bHRDbGFzc05hbWVzIH0gZnJvbSAncmVhY3QtZGF5LXBpY2tlcidcbmltcG9ydCB7IEJ1dHRvbiwgYnV0dG9uVmFyaWFudHMgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gQ2FsZW5kYXIoe1xuXHRjbGFzc05hbWUsXG5cdGNsYXNzTmFtZXMsXG5cdHNob3dPdXRzaWRlRGF5cyA9IHRydWUsXG5cdGNhcHRpb25MYXlvdXQgPSAnbGFiZWwnLFxuXHRidXR0b25WYXJpYW50ID0gJ2dob3N0Jyxcblx0Zm9ybWF0dGVycyxcblx0Y29tcG9uZW50cyxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEYXlQaWNrZXI+ICYge1xuXHRidXR0b25WYXJpYW50PzogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIEJ1dHRvbj5bJ3ZhcmlhbnQnXVxufSkge1xuXHRjb25zdCBkZWZhdWx0Q2xhc3NOYW1lcyA9IGdldERlZmF1bHRDbGFzc05hbWVzKClcblxuXHRyZXR1cm4gKFxuXHRcdDxEYXlQaWNrZXJcblx0XHRcdGNhcHRpb25MYXlvdXQ9e2NhcHRpb25MYXlvdXR9XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnYmctYmFja2dyb3VuZCBncm91cC9jYWxlbmRhciBwLTMgWy0tY2VsbC1zaXplOi0tc3BhY2luZyg4KV0gW1tkYXRhLXNsb3Q9Y2FyZC1jb250ZW50XV8mXTpiZy10cmFuc3BhcmVudCBbW2RhdGEtc2xvdD1wb3BvdmVyLWNvbnRlbnRdXyZdOmJnLXRyYW5zcGFyZW50Jyxcblx0XHRcdFx0U3RyaW5nLnJhd2BydGw6Kio6Wy5yZHAtYnV0dG9uXFxfbmV4dD5zdmddOnJvdGF0ZS0xODBgLFxuXHRcdFx0XHRTdHJpbmcucmF3YHJ0bDoqKjpbLnJkcC1idXR0b25cXF9wcmV2aW91cz5zdmddOnJvdGF0ZS0xODBgLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRjbGFzc05hbWVzPXt7XG5cdFx0XHRcdHJvb3Q6IGNuKCd3LWZpdCcsIGRlZmF1bHRDbGFzc05hbWVzLnJvb3QpLFxuXHRcdFx0XHRtb250aHM6IGNuKFxuXHRcdFx0XHRcdCdmbGV4IGdhcC00IGZsZXgtY29sIG1kOmZsZXgtcm93IHJlbGF0aXZlJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5tb250aHNcblx0XHRcdFx0KSxcblx0XHRcdFx0bW9udGg6IGNuKCdmbGV4IGZsZXgtY29sIHctZnVsbCBnYXAtNCcsIGRlZmF1bHRDbGFzc05hbWVzLm1vbnRoKSxcblx0XHRcdFx0bmF2OiBjbihcblx0XHRcdFx0XHQnZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdy1mdWxsIGFic29sdXRlIHRvcC0wIGluc2V0LXgtMCBqdXN0aWZ5LWJldHdlZW4nLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLm5hdlxuXHRcdFx0XHQpLFxuXHRcdFx0XHRidXR0b25fcHJldmlvdXM6IGNuKFxuXHRcdFx0XHRcdGJ1dHRvblZhcmlhbnRzKHsgdmFyaWFudDogYnV0dG9uVmFyaWFudCB9KSxcblx0XHRcdFx0XHQnc2l6ZS0oLS1jZWxsLXNpemUpIGFyaWEtZGlzYWJsZWQ6b3BhY2l0eS01MCBwLTAgc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmJ1dHRvbl9wcmV2aW91c1xuXHRcdFx0XHQpLFxuXHRcdFx0XHRidXR0b25fbmV4dDogY24oXG5cdFx0XHRcdFx0YnV0dG9uVmFyaWFudHMoeyB2YXJpYW50OiBidXR0b25WYXJpYW50IH0pLFxuXHRcdFx0XHRcdCdzaXplLSgtLWNlbGwtc2l6ZSkgYXJpYS1kaXNhYmxlZDpvcGFjaXR5LTUwIHAtMCBzZWxlY3Qtbm9uZScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuYnV0dG9uX25leHRcblx0XHRcdFx0KSxcblx0XHRcdFx0bW9udGhfY2FwdGlvbjogY24oXG5cdFx0XHRcdFx0J2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtKC0tY2VsbC1zaXplKSB3LWZ1bGwgcHgtKC0tY2VsbC1zaXplKScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMubW9udGhfY2FwdGlvblxuXHRcdFx0XHQpLFxuXHRcdFx0XHRkcm9wZG93bnM6IGNuKFxuXHRcdFx0XHRcdCd3LWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1zbSBmb250LW1lZGl1bSBqdXN0aWZ5LWNlbnRlciBoLSgtLWNlbGwtc2l6ZSkgZ2FwLTEuNScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25zXG5cdFx0XHRcdCksXG5cdFx0XHRcdGRyb3Bkb3duX3Jvb3Q6IGNuKFxuXHRcdFx0XHRcdCdyZWxhdGl2ZSBoYXMtZm9jdXM6Ym9yZGVyLXJpbmcgYm9yZGVyIGJvcmRlci1pbnB1dCBzaGFkb3cteHMgaGFzLWZvY3VzOnJpbmctcmluZy81MCBoYXMtZm9jdXM6cmluZy1bM3B4XSByb3VuZGVkLW1kJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5kcm9wZG93bl9yb290XG5cdFx0XHRcdCksXG5cdFx0XHRcdGRyb3Bkb3duOiBjbihcblx0XHRcdFx0XHQnYWJzb2x1dGUgYmctcG9wb3ZlciBpbnNldC0wIG9wYWNpdHktMCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25cblx0XHRcdFx0KSxcblx0XHRcdFx0Y2FwdGlvbl9sYWJlbDogY24oXG5cdFx0XHRcdFx0J3NlbGVjdC1ub25lIGZvbnQtbWVkaXVtJyxcblx0XHRcdFx0XHRjYXB0aW9uTGF5b3V0ID09PSAnbGFiZWwnXG5cdFx0XHRcdFx0XHQ/ICd0ZXh0LXNtJ1xuXHRcdFx0XHRcdFx0OiAncm91bmRlZC1tZCBwbC0yIHByLTEgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1zbSBoLTggWyY+c3ZnXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgWyY+c3ZnXTpzaXplLTMuNScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuY2FwdGlvbl9sYWJlbFxuXHRcdFx0XHQpLFxuXHRcdFx0XHR0YWJsZTogJ3ctZnVsbCBib3JkZXItY29sbGFwc2UnLFxuXHRcdFx0XHR3ZWVrZGF5czogY24oJ2ZsZXgnLCBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrZGF5cyksXG5cdFx0XHRcdHdlZWtkYXk6IGNuKFxuXHRcdFx0XHRcdCd0ZXh0LW11dGVkLWZvcmVncm91bmQgcm91bmRlZC1tZCBmbGV4LTEgZm9udC1ub3JtYWwgdGV4dC1bMC44cmVtXSBzZWxlY3Qtbm9uZScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMud2Vla2RheVxuXHRcdFx0XHQpLFxuXHRcdFx0XHR3ZWVrOiBjbignZmxleCB3LWZ1bGwgbXQtMicsIGRlZmF1bHRDbGFzc05hbWVzLndlZWspLFxuXHRcdFx0XHR3ZWVrX251bWJlcl9oZWFkZXI6IGNuKFxuXHRcdFx0XHRcdCdzZWxlY3Qtbm9uZSB3LSgtLWNlbGwtc2l6ZSknLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLndlZWtfbnVtYmVyX2hlYWRlclxuXHRcdFx0XHQpLFxuXHRcdFx0XHR3ZWVrX251bWJlcjogY24oXG5cdFx0XHRcdFx0J3RleHQtWzAuOHJlbV0gc2VsZWN0LW5vbmUgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrX251bWJlclxuXHRcdFx0XHQpLFxuXHRcdFx0XHRkYXk6IGNuKFxuXHRcdFx0XHRcdCdyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHAtMCB0ZXh0LWNlbnRlciBbJjpsYXN0LWNoaWxkW2RhdGEtc2VsZWN0ZWQ9dHJ1ZV1fYnV0dG9uXTpyb3VuZGVkLXItbWQgZ3JvdXAvZGF5IGFzcGVjdC1zcXVhcmUgc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRcdHByb3BzLnNob3dXZWVrTnVtYmVyXG5cdFx0XHRcdFx0XHQ/ICdbJjpudGgtY2hpbGQoMilbZGF0YS1zZWxlY3RlZD10cnVlXV9idXR0b25dOnJvdW5kZWQtbC1tZCdcblx0XHRcdFx0XHRcdDogJ1smOmZpcnN0LWNoaWxkW2RhdGEtc2VsZWN0ZWQ9dHJ1ZV1fYnV0dG9uXTpyb3VuZGVkLWwtbWQnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmRheVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRyYW5nZV9zdGFydDogY24oXG5cdFx0XHRcdFx0J3JvdW5kZWQtbC1tZCBiZy1hY2NlbnQnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX3N0YXJ0XG5cdFx0XHRcdCksXG5cdFx0XHRcdHJhbmdlX21pZGRsZTogY24oJ3JvdW5kZWQtbm9uZScsIGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX21pZGRsZSksXG5cdFx0XHRcdHJhbmdlX2VuZDogY24oJ3JvdW5kZWQtci1tZCBiZy1hY2NlbnQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5yYW5nZV9lbmQpLFxuXHRcdFx0XHR0b2RheTogY24oXG5cdFx0XHRcdFx0J2JnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIHJvdW5kZWQtbWQgZGF0YS1bc2VsZWN0ZWQ9dHJ1ZV06cm91bmRlZC1ub25lJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy50b2RheVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRvdXRzaWRlOiBjbihcblx0XHRcdFx0XHQndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGFyaWEtc2VsZWN0ZWQ6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5vdXRzaWRlXG5cdFx0XHRcdCksXG5cdFx0XHRcdGRpc2FibGVkOiBjbihcblx0XHRcdFx0XHQndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG9wYWNpdHktNTAnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmRpc2FibGVkXG5cdFx0XHRcdCksXG5cdFx0XHRcdGhpZGRlbjogY24oJ2ludmlzaWJsZScsIGRlZmF1bHRDbGFzc05hbWVzLmhpZGRlbiksXG5cdFx0XHRcdC4uLmNsYXNzTmFtZXMsXG5cdFx0XHR9fVxuXHRcdFx0Y29tcG9uZW50cz17e1xuXHRcdFx0XHRSb290OiAoeyBjbGFzc05hbWUsIHJvb3RSZWYsIC4uLnByb3BzIH0pID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKGNsYXNzTmFtZSl9XG5cdFx0XHRcdFx0XHRcdGRhdGEtc2xvdD1cImNhbGVuZGFyXCJcblx0XHRcdFx0XHRcdFx0cmVmPXtyb290UmVmfVxuXHRcdFx0XHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSxcblx0XHRcdFx0Q2hldnJvbjogKHsgY2xhc3NOYW1lLCBvcmllbnRhdGlvbiwgLi4ucHJvcHMgfSkgPT4ge1xuXHRcdFx0XHRcdGlmIChvcmllbnRhdGlvbiA9PT0gJ2xlZnQnKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8Q2hldnJvbkxlZnRJY29uIGNsYXNzTmFtZT17Y24oJ3NpemUtNCcsIGNsYXNzTmFtZSl9IHsuLi5wcm9wc30gLz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAob3JpZW50YXRpb24gPT09ICdyaWdodCcpIHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxDaGV2cm9uUmlnaHRJY29uXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX1cblx0XHRcdFx0XHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX0gey4uLnByb3BzfSAvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSxcblx0XHRcdFx0RGF5QnV0dG9uOiBDYWxlbmRhckRheUJ1dHRvbixcblx0XHRcdFx0V2Vla051bWJlcjogKHsgY2hpbGRyZW4sIC4uLnByb3BzIH0pID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PHRkIHsuLi5wcm9wc30+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBzaXplLSgtLWNlbGwtc2l6ZSkgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtY2VudGVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQuLi5jb21wb25lbnRzLFxuXHRcdFx0fX1cblx0XHRcdGZvcm1hdHRlcnM9e3tcblx0XHRcdFx0Zm9ybWF0TW9udGhEcm9wZG93bjogKGRhdGUpID0+XG5cdFx0XHRcdFx0ZGF0ZS50b0xvY2FsZVN0cmluZygnZGVmYXVsdCcsIHsgbW9udGg6ICdzaG9ydCcgfSksXG5cdFx0XHRcdC4uLmZvcm1hdHRlcnMsXG5cdFx0XHR9fVxuXHRcdFx0c2hvd091dHNpZGVEYXlzPXtzaG93T3V0c2lkZURheXN9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYWxlbmRhckRheUJ1dHRvbih7XG5cdGNsYXNzTmFtZSxcblx0ZGF5LFxuXHRtb2RpZmllcnMsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGF5QnV0dG9uPikge1xuXHRjb25zdCBkZWZhdWx0Q2xhc3NOYW1lcyA9IGdldERlZmF1bHRDbGFzc05hbWVzKClcblxuXHRjb25zdCByZWYgPSBSZWFjdC51c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+KG51bGwpXG5cdFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKG1vZGlmaWVycy5mb2N1c2VkKSB7XG5cdFx0XHRyZWYuY3VycmVudD8uZm9jdXMoKVxuXHRcdH1cblx0fSwgW21vZGlmaWVycy5mb2N1c2VkXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxCdXR0b25cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdkYXRhLVtzZWxlY3RlZC1zaW5nbGU9dHJ1ZV06YmctcHJpbWFyeSBkYXRhLVtzZWxlY3RlZC1zaW5nbGU9dHJ1ZV06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGF0YS1bcmFuZ2UtbWlkZGxlPXRydWVdOmJnLWFjY2VudCBkYXRhLVtyYW5nZS1taWRkbGU9dHJ1ZV06dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3JhbmdlLWVuZD10cnVlXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpib3JkZXItcmluZyBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpyaW5nLXJpbmcvNTAgZGFyazpob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGZsZXggYXNwZWN0LXNxdWFyZSBzaXplLWF1dG8gdy1mdWxsIG1pbi13LSgtLWNlbGwtc2l6ZSkgZmxleC1jb2wgZ2FwLTEgbGVhZGluZy1ub25lIGZvbnQtbm9ybWFsIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnJlbGF0aXZlIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnotMTAgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6cmluZy1bM3B4XSBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06cm91bmRlZC1tZCBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06cm91bmRlZC1yLW1kIGRhdGEtW3JhbmdlLW1pZGRsZT10cnVlXTpyb3VuZGVkLW5vbmUgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06cm91bmRlZC1tZCBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpyb3VuZGVkLWwtbWQgWyY+c3Bhbl06dGV4dC14cyBbJj5zcGFuXTpvcGFjaXR5LTcwJyxcblx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZGF5LFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLWRheT17ZGF5LmRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCl9XG5cdFx0XHRkYXRhLXJhbmdlLWVuZD17bW9kaWZpZXJzLnJhbmdlX2VuZH1cblx0XHRcdGRhdGEtcmFuZ2UtbWlkZGxlPXttb2RpZmllcnMucmFuZ2VfbWlkZGxlfVxuXHRcdFx0ZGF0YS1yYW5nZS1zdGFydD17bW9kaWZpZXJzLnJhbmdlX3N0YXJ0fVxuXHRcdFx0ZGF0YS1zZWxlY3RlZC1zaW5nbGU9e1xuXHRcdFx0XHRtb2RpZmllcnMuc2VsZWN0ZWQgJiZcblx0XHRcdFx0IW1vZGlmaWVycy5yYW5nZV9zdGFydCAmJlxuXHRcdFx0XHQhbW9kaWZpZXJzLnJhbmdlX2VuZCAmJlxuXHRcdFx0XHQhbW9kaWZpZXJzLnJhbmdlX21pZGRsZVxuXHRcdFx0fVxuXHRcdFx0cmVmPXtyZWZ9XG5cdFx0XHRzaXplPVwiaWNvblwiXG5cdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHsgQ2FsZW5kYXIsIENhbGVuZGFyRGF5QnV0dG9uIH1cbiIsCiAgICAiaW1wb3J0ICogYXMgUG9wb3ZlclByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtcG9wb3ZlcidcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFBvcG92ZXIoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwicG9wb3ZlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gUG9wb3ZlclRyaWdnZXIoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuVHJpZ2dlcj4pIHtcblx0cmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwicG9wb3Zlci10cmlnZ2VyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBQb3BvdmVyQ29udGVudCh7XG5cdGNsYXNzTmFtZSxcblx0YWxpZ24gPSAnY2VudGVyJyxcblx0c2lkZU9mZnNldCA9IDQsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5Db250ZW50Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxQb3BvdmVyUHJpbWl0aXZlLlBvcnRhbD5cblx0XHRcdDxQb3BvdmVyUHJpbWl0aXZlLkNvbnRlbnRcblx0XHRcdFx0YWxpZ249e2FsaWdufVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiB6LTUwIHctNzIgb3JpZ2luLSgtLXJhZGl4LXBvcG92ZXItY29udGVudC10cmFuc2Zvcm0tb3JpZ2luKSByb3VuZGVkLW1kIGJvcmRlciBwLTQgc2hhZG93LW1kIG91dGxpbmUtaGlkZGVuJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS1zbG90PVwicG9wb3Zlci1jb250ZW50XCJcblx0XHRcdFx0c2lkZU9mZnNldD17c2lkZU9mZnNldH1cblx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0Lz5cblx0XHQ8L1BvcG92ZXJQcmltaXRpdmUuUG9ydGFsPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJBbmNob3Ioe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yPikge1xuXHRyZXR1cm4gPFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yIGRhdGEtc2xvdD1cInBvcG92ZXItYW5jaG9yXCIgey4uLnByb3BzfSAvPlxufVxuXG5leHBvcnQgeyBQb3BvdmVyLCBQb3BvdmVyVHJpZ2dlciwgUG9wb3ZlckNvbnRlbnQsIFBvcG92ZXJBbmNob3IgfVxuIiwKICAgICJpbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBJbnB1dCh7IGNsYXNzTmFtZSwgdHlwZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2lucHV0Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8aW5wdXRcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmaWxlOnRleHQtZm9yZWdyb3VuZCBwbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQgc2VsZWN0aW9uOmJnLXByaW1hcnkgc2VsZWN0aW9uOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6YmctaW5wdXQvMzAgYm9yZGVyLWlucHV0IGZsZXggaC05IHctZnVsbCBtaW4tdy0wIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTMgcHktMSB0ZXh0LWJhc2Ugc2hhZG93LXhzIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmaWxlOmlubGluZS1mbGV4IGZpbGU6aC03IGZpbGU6Ym9yZGVyLTAgZmlsZTpiZy10cmFuc3BhcmVudCBmaWxlOnRleHQtc20gZmlsZTpmb250LW1lZGl1bSBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIG1kOnRleHQtc20nLFxuXHRcdFx0XHQnZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0nLFxuXHRcdFx0XHQnYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiaW5wdXRcIlxuXHRcdFx0dHlwZT17dHlwZX1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7IElucHV0IH1cbiIsCiAgICAiaW1wb3J0ICogYXMgTGFiZWxQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWxhYmVsJ1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gTGFiZWwoe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgTGFiZWxQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIChcblx0XHQ8TGFiZWxQcmltaXRpdmUuUm9vdFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc20gbGVhZGluZy1ub25lIGZvbnQtbWVkaXVtIHNlbGVjdC1ub25lIGdyb3VwLWRhdGEtW2Rpc2FibGVkPXRydWVdOnBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtZGF0YS1bZGlzYWJsZWQ9dHJ1ZV06b3BhY2l0eS01MCBwZWVyLWRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBwZWVyLWRpc2FibGVkOm9wYWNpdHktNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJsYWJlbFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgeyBMYWJlbCB9XG4iLAogICAgImltcG9ydCAqIGFzIFNjcm9sbEFyZWFQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXNjcm9sbC1hcmVhJ1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIFNjcm9sbEFyZWFQcm9wc1xuXHRleHRlbmRzIFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3Q+IHtcblx0dmlld1BvcnRQcm9wcz86IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlZpZXdwb3J0PlxufVxuXG5mdW5jdGlvbiBTY3JvbGxBcmVhKHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0dmlld1BvcnRQcm9wcyxcblx0Li4ucHJvcHNcbn06IFNjcm9sbEFyZWFQcm9wcykge1xuXHRyZXR1cm4gKFxuXHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3Rcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3JlbGF0aXZlJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydFxuXHRcdFx0XHR7Li4udmlld1BvcnRQcm9wc31cblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgc2l6ZS1mdWxsIHJvdW5kZWQtW2luaGVyaXRdIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTEnLFxuXHRcdFx0XHRcdHZpZXdQb3J0UHJvcHM/LmNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS12aWV3cG9ydFwiXG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cblx0XHRcdDxTY3JvbGxCYXIgLz5cblx0XHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLkNvcm5lciAvPlxuXHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNjcm9sbEJhcih7XG5cdGNsYXNzTmFtZSxcblx0b3JpZW50YXRpb24gPSAndmVydGljYWwnLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhcj4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCB0b3VjaC1ub25lIHAtcHggdHJhbnNpdGlvbi1jb2xvcnMgc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyAmJlxuXHRcdFx0XHRcdCdoLWZ1bGwgdy0yLjUgYm9yZGVyLWwgYm9yZGVyLWwtdHJhbnNwYXJlbnQnLFxuXHRcdFx0XHRvcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnICYmXG5cdFx0XHRcdFx0J2gtMi41IGZsZXgtY29sIGJvcmRlci10IGJvcmRlci10LXRyYW5zcGFyZW50Jyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtc2Nyb2xsYmFyXCJcblx0XHRcdG9yaWVudGF0aW9uPXtvcmllbnRhdGlvbn1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhVGh1bWJcblx0XHRcdFx0Y2xhc3NOYW1lPVwiYmctYm9yZGVyIHJlbGF0aXZlIGZsZXgtMSByb3VuZGVkLWZ1bGxcIlxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS10aHVtYlwiXG5cdFx0XHQvPlxuXHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyPlxuXHQpXG59XG5cbmV4cG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9XG4iLAogICAgImltcG9ydCB7IENsb2NrIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvaW5wdXQnXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IHVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXIgfSBmcm9tICdAL2hvb2tzL3VzZS1hdXRvY29tcGxldGUtdGltZXBpY2tlcidcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgdHlwZSB7IFRpbWVGb3JtYXQgfSBmcm9tICdAL3R5cGVzJ1xuXG5jb25zdCBoYW5kbGVXaGVlbCA9IChlOiBSZWFjdC5XaGVlbEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuXHQvLyBQcmV2ZW50IGV2ZW50IGZyb20gYnViYmxpbmcgdG8gcHJldmVudCBQb3BvdmVyIGZyb20gY2xvc2luZ1xuXHRlLnN0b3BQcm9wYWdhdGlvbigpXG59XG5cbmludGVyZmFjZSBUaW1lUGlja2VyUHJvcHMge1xuXHR2YWx1ZTogc3RyaW5nXG5cdG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZFxuXHRtaW5UaW1lPzogc3RyaW5nXG5cdG1heFRpbWU/OiBzdHJpbmdcblx0dGltZUZvcm1hdD86IFRpbWVGb3JtYXRcblx0cGxhY2Vob2xkZXI/OiBzdHJpbmdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGRpc2FibGVkPzogYm9vbGVhblxuXHRuYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUaW1lUGlja2VyKHtcblx0dmFsdWUsXG5cdG9uQ2hhbmdlLFxuXHRtaW5UaW1lID0gJzAwOjAwJyxcblx0bWF4VGltZSA9ICcyMzo0NScsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdHBsYWNlaG9sZGVyID0gJ1NlbGVjdCB0aW1lLi4uJyxcblx0Y2xhc3NOYW1lLFxuXHRkaXNhYmxlZCA9IGZhbHNlLFxuXHRuYW1lLFxufTogVGltZVBpY2tlclByb3BzKSB7XG5cdGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXHRjb25zdCBbc2VhcmNoLCBzZXRTZWFyY2hdID0gdXNlU3RhdGUoJycpXG5cdGNvbnN0IGlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpXG5cdGNvbnN0IHRyaWdnZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+KG51bGwpXG5cdGNvbnN0IFt0cmlnZ2VyV2lkdGgsIHNldFRyaWdnZXJXaWR0aF0gPSB1c2VTdGF0ZTxudW1iZXI+KDApXG5cblx0Y29uc3QgeyB0aW1lT3B0aW9ucywgZm9ybWF0VGltZSB9ID0gdXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlcih7XG5cdFx0dGltZUZvcm1hdCxcblx0XHRtaW5UaW1lLFxuXHRcdG1heFRpbWUsXG5cdH0pXG5cblx0Ly8gRmlsdGVyIHRpbWUgb3B0aW9ucyBiYXNlZCBvbiBzZWFyY2hcblx0Y29uc3QgZmlsdGVyZWRPcHRpb25zID0gdGltZU9wdGlvbnMuZmlsdGVyKCh0aW1lKSA9PiB7XG5cdFx0Y29uc3QgZm9ybWF0dGVkVGltZSA9IGZvcm1hdFRpbWUodGltZSlcblx0XHRyZXR1cm4gZm9ybWF0dGVkVGltZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaC50b0xvd2VyQ2FzZSgpKVxuXHR9KVxuXG5cdGNvbnN0IGhhbmRsZVNlbGVjdCA9ICh0aW1lOiBzdHJpbmcpID0+IHtcblx0XHRvbkNoYW5nZSh0aW1lKVxuXHRcdHNldE9wZW4oZmFsc2UpXG5cdFx0c2V0U2VhcmNoKCcnKVxuXHR9XG5cblx0Ly8gTWVhc3VyZSB0cmlnZ2VyIHdpZHRoIGFuZCBmb2N1cyBpbnB1dCB3aGVuIHBvcG92ZXIgb3BlbnNcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAob3Blbikge1xuXHRcdFx0aWYgKHRyaWdnZXJSZWYuY3VycmVudCkge1xuXHRcdFx0XHRzZXRUcmlnZ2VyV2lkdGgodHJpZ2dlclJlZi5jdXJyZW50Lm9mZnNldFdpZHRoKVxuXHRcdFx0fVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGlucHV0UmVmLmN1cnJlbnQ/LmZvY3VzKClcblx0XHRcdH0sIDApXG5cdFx0fVxuXHR9LCBbb3Blbl0pXG5cblx0Y29uc3QgY3VycmVudFRpbWVTdHJpbmcgPSB2YWx1ZSA/IGZvcm1hdFRpbWUodmFsdWUpIDogcGxhY2Vob2xkZXJcblxuXHRyZXR1cm4gKFxuXHRcdDxQb3BvdmVyIG9uT3BlbkNoYW5nZT17c2V0T3Blbn0gb3Blbj17b3Blbn0+XG5cdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGFyaWEtY29udHJvbHM9XCJ0aW1lLXBpY2tlci1saXN0Ym94XCJcblx0XHRcdFx0XHRhcmlhLWV4cGFuZGVkPXtvcGVufVxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ3ctZnVsbCBqdXN0aWZ5LXN0YXJ0JywgY2xhc3NOYW1lKX1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHRpbWUtcGlja2VyLSR7bmFtZX1gfVxuXHRcdFx0XHRcdGRpc2FibGVkPXtkaXNhYmxlZH1cblx0XHRcdFx0XHRyZWY9e3RyaWdnZXJSZWZ9XG5cdFx0XHRcdFx0cm9sZT1cImNvbWJvYm94XCJcblx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8Q2xvY2sgY2xhc3NOYW1lPVwibXItMiBoLTQgdy00XCIgLz5cblx0XHRcdFx0XHR7Y3VycmVudFRpbWVTdHJpbmd9XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9Qb3BvdmVyVHJpZ2dlcj5cblx0XHRcdDxQb3BvdmVyQ29udGVudFxuXHRcdFx0XHRhbGlnbj1cInN0YXJ0XCJcblx0XHRcdFx0Y2xhc3NOYW1lPVwicC0wXCJcblx0XHRcdFx0c3R5bGU9e3sgd2lkdGg6IHRyaWdnZXJXaWR0aCB9fVxuXHRcdFx0PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInAtMiBib3JkZXItYlwiPlxuXHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04XCJcblx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZSkgPT4gc2V0U2VhcmNoKGUudGFyZ2V0LnZhbHVlKX1cblx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPVwiU2VhcmNoIHRpbWUuLi5cIlxuXHRcdFx0XHRcdFx0cmVmPXtpbnB1dFJlZn1cblx0XHRcdFx0XHRcdHZhbHVlPXtzZWFyY2h9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxTY3JvbGxBcmVhIGNsYXNzTmFtZT1cImgtWzIwMHB4XVwiIG9uV2hlZWw9e2hhbmRsZVdoZWVsfT5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInAtMVwiPlxuXHRcdFx0XHRcdFx0e2ZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPT09IDAgPyAoXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicHktNiB0ZXh0LWNlbnRlciB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdE4vQVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdCkgOiAoXG5cdFx0XHRcdFx0XHRcdGZpbHRlcmVkT3B0aW9ucy5tYXAoKHRpbWUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB0aW1lU3RyaW5nID0gZm9ybWF0VGltZSh0aW1lKVxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlzU2VsZWN0ZWQgPSB0aW1lID09PSB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3JlbGF0aXZlIGZsZXggdy1mdWxsIGN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lIGl0ZW1zLWNlbnRlciByb3VuZGVkLXNtIHB4LTIgcHktMS41IHRleHQtc20gb3V0bGluZS1ub25lIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpc1NlbGVjdGVkICYmICdiZy1hY2NlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCdcblx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXt0aW1lfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3QodGltZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dGltZVN0cmluZ31cblx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvU2Nyb2xsQXJlYT5cblx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0PC9Qb3BvdmVyPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5cbmludGVyZmFjZSBVc2VBdXRvY29tcGxldGVUaW1lcGlja2VyUHJvcHMge1xuXHR0aW1lRm9ybWF0PzogVGltZUZvcm1hdFxuXHRtaW5UaW1lPzogc3RyaW5nXG5cdG1heFRpbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXIoe1xuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRtaW5UaW1lID0gJzAwOjAwJyxcblx0bWF4VGltZSA9ICcyMzo0NScsXG59OiBVc2VBdXRvY29tcGxldGVUaW1lcGlja2VyUHJvcHMpIHtcblx0Ly8gR2VuZXJhdGUgdGltZSBvcHRpb25zICgxNS1taW51dGUgaW50ZXJ2YWxzKSB3aXRoaW4gbWluL21heCByYW5nZVxuXHRjb25zdCB0aW1lT3B0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGNvbnN0IHRpbWVzOiBzdHJpbmdbXSA9IFtdXG5cdFx0Y29uc3QgW21pbkhvdXIsIG1pbk1pbnV0ZV0gPSBtaW5UaW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblx0XHRjb25zdCBbbWF4SG91ciwgbWF4TWludXRlXSA9IG1heFRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXG5cdFx0Y29uc3QgbWluVG90YWxNaW51dGVzID0gbWluSG91ciAqIDYwICsgbWluTWludXRlXG5cdFx0Y29uc3QgbWF4VG90YWxNaW51dGVzID0gbWF4SG91ciAqIDYwICsgbWF4TWludXRlXG5cblx0XHRmb3IgKFxuXHRcdFx0bGV0IHRvdGFsTWludXRlcyA9IG1pblRvdGFsTWludXRlcztcblx0XHRcdHRvdGFsTWludXRlcyA8PSBtYXhUb3RhbE1pbnV0ZXM7XG5cdFx0XHR0b3RhbE1pbnV0ZXMgKz0gMTVcblx0XHQpIHtcblx0XHRcdGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcih0b3RhbE1pbnV0ZXMgLyA2MClcblx0XHRcdGNvbnN0IG1pbnV0ZXMgPSB0b3RhbE1pbnV0ZXMgJSA2MFxuXG5cdFx0XHRjb25zdCB0aW1lU3RyaW5nID0gYCR7aG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWBcblx0XHRcdHRpbWVzLnB1c2godGltZVN0cmluZylcblx0XHR9XG5cblx0XHRyZXR1cm4gdGltZXNcblx0fSwgW21pblRpbWUsIG1heFRpbWVdKVxuXG5cdGNvbnN0IGZvcm1hdFRpbWUgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0Y29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRcdGNvbnN0IHBlcmlvZCA9IGhvdXJzID49IDEyID8gJ1BNJyA6ICdBTSdcblx0XHRjb25zdCBkaXNwbGF5SG91cnMgPSBob3VycyA9PT0gMCA/IDEyIDogaG91cnMgPiAxMiA/IGhvdXJzIC0gMTIgOiBob3Vyc1xuXG5cdFx0aWYgKHRpbWVGb3JtYXQgPT09ICcyNC1ob3VyJykge1xuXHRcdFx0cmV0dXJuIGAke2hvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06JHttaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGAke2Rpc3BsYXlIb3Vyc306JHttaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX0gJHtwZXJpb2R9YFxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHR0aW1lT3B0aW9ucyxcblx0XHRmb3JtYXRUaW1lLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgV2Vla0RheXMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuY29uc3QgREFZX1RPX05VTUJFUjogUmVjb3JkPFdlZWtEYXlzLCBudW1iZXI+ID0ge1xuXHRzdW5kYXk6IDAsXG5cdG1vbmRheTogMSxcblx0dHVlc2RheTogMixcblx0d2VkbmVzZGF5OiAzLFxuXHR0aHVyc2RheTogNCxcblx0ZnJpZGF5OiA1LFxuXHRzYXR1cmRheTogNixcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgYXBwcm9wcmlhdGUgYnVzaW5lc3MgaG91cnMgY29uZmlndXJhdGlvbiBmb3IgYSBnaXZlbiBkYXRlLlxuICogSWYgYnVzaW5lc3NIb3VycyBpcyBhbiBhcnJheSwgZmluZHMgdGhlIGZpcnN0IGNvbmZpZyB0aGF0IGluY2x1ZGVzIHRoZSBkYXRlJ3MgZGF5IG9mIHdlZWsuXG4gKiBJZiBidXNpbmVzc0hvdXJzIGlzIGEgc2luZ2xlIG9iamVjdCwgcmV0dXJucyBpdCBhcy1pcy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSBUaGUgZGF0ZSB0byBmaW5kIGJ1c2luZXNzIGhvdXJzIGZvclxuICogQHBhcmFtIGJ1c2luZXNzSG91cnMgVGhlIGJ1c2luZXNzIGhvdXJzIGNvbmZpZ3VyYXRpb24gKHNpbmdsZSBvciBhcnJheSlcbiAqIEByZXR1cm5zIFRoZSBtYXRjaGluZyBCdXNpbmVzc0hvdXJzIGNvbmZpZyBvciB1bmRlZmluZWQgaWYgbm8gbWF0Y2ggZm91bmRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEJ1c2luZXNzSG91cnNGb3JEYXRlID0gKFxuXHRkYXRlOiBkYXlqcy5EYXlqcyxcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbik6IEJ1c2luZXNzSG91cnMgfCB1bmRlZmluZWQgPT4ge1xuXHRpZiAoIWJ1c2luZXNzSG91cnMpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkXG5cdH1cblxuXHQvLyBJZiBzaW5nbGUgb2JqZWN0LCByZXR1cm4gaXRcblx0aWYgKCFBcnJheS5pc0FycmF5KGJ1c2luZXNzSG91cnMpKSB7XG5cdFx0cmV0dXJuIGJ1c2luZXNzSG91cnNcblx0fVxuXG5cdC8vIElmIGFycmF5LCBmaW5kIHRoZSBjb25maWcgdGhhdCBhcHBsaWVzIHRvIHRoaXMgZGF5XG5cdGNvbnN0IGRheU9mV2VlayA9IGRhdGUuZGF5KClcblx0cmV0dXJuIGJ1c2luZXNzSG91cnMuZmluZCgoY29uZmlnKSA9PiB7XG5cdFx0aWYgKCFjb25maWcuZGF5c09mV2Vlaykge1xuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0fVxuXHRcdHJldHVybiBjb25maWcuZGF5c09mV2Vlay5zb21lKChkKSA9PiBEQVlfVE9fTlVNQkVSW2RdID09PSBkYXlPZldlZWspXG5cdH0pXG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgc3BlY2lmaWMgZGF0ZSBpcyBhIGJ1c2luZXNzIGRheS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSBUaGUgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIGJ1c2luZXNzSG91cnMgVGhlIGJ1c2luZXNzIGhvdXJzIGNvbmZpZ3VyYXRpb24gKHNpbmdsZSBvciBhcnJheSlcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGRhdGUgaXMgYSBidXNpbmVzcyBkYXksIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgY29uc3QgaXNCdXNpbmVzc0RheSA9IChcblx0ZGF0ZTogZGF5anMuRGF5anMsXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG4pOiBib29sZWFuID0+IHtcblx0aWYgKCFidXNpbmVzc0hvdXJzKSB7XG5cdFx0cmV0dXJuIHRydWVcblx0fVxuXG5cdGNvbnN0IGNvbmZpZyA9IGdldEJ1c2luZXNzSG91cnNGb3JEYXRlKGRhdGUsIGJ1c2luZXNzSG91cnMpXG5cdGlmICghY29uZmlnKSB7XG5cdFx0cmV0dXJuIGZhbHNlXG5cdH1cblxuXHQvLyBDaGVjayBkYXkgb2Ygd2Vla1xuXHRpZiAoY29uZmlnLmRheXNPZldlZWspIHtcblx0XHRyZXR1cm4gY29uZmlnLmRheXNPZldlZWsuc29tZSgoZCkgPT4gREFZX1RPX05VTUJFUltkXSA9PT0gZGF0ZS5kYXkoKSlcblx0fVxuXG5cdHJldHVybiB0cnVlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXNCdXNpbmVzc0hvdXJPcHRpb25zIHtcblx0ZGF0ZTogZGF5anMuRGF5anNcblx0aG91cj86IG51bWJlclxuXHRtaW51dGU/OiBudW1iZXJcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBzcGVjaWZpYyBob3VyIG9uIGEgc3BlY2lmaWMgZGF0ZSBpcyB3aXRoaW4gYnVzaW5lc3MgaG91cnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIGNoZWNraW5nIGJ1c2luZXNzIGhvdXJzXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0aW1lIGlzIHdpdGhpbiBidXNpbmVzcyBob3VycywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0J1c2luZXNzSG91ciA9ICh7XG5cdGRhdGUsXG5cdGhvdXIsXG5cdG1pbnV0ZSA9IDAsXG5cdGJ1c2luZXNzSG91cnMsXG59OiBJc0J1c2luZXNzSG91ck9wdGlvbnMpOiBib29sZWFuID0+IHtcblx0Ly8gRmlyc3QgY2hlY2sgaWYgaXQncyBhIGJ1c2luZXNzIGRheVxuXHRpZiAoIWlzQnVzaW5lc3NEYXkoZGF0ZSwgYnVzaW5lc3NIb3VycykpIHtcblx0XHRyZXR1cm4gZmFsc2Vcblx0fVxuXG5cdC8vIElmIGJ1c2luZXNzIGhvdXJzIGFyZSBub3QgY29uZmlndXJlZCwgY29uc2lkZXIgZXZlcnl0aGluZyBhcyBcImJ1c2luZXNzIGhvdXJzXCJcblx0aWYgKCFidXNpbmVzc0hvdXJzKSB7XG5cdFx0cmV0dXJuIHRydWVcblx0fVxuXG5cdC8vIElmIGhvdXIgaXMgbm90IHByb3ZpZGVkLCB3ZSBhc3N1bWUgdGhlIHVzZXIgb25seSBjYXJlcyBhYm91dCB0aGUgZGF5XG5cdC8vIFNpbmNlIHdlIGFscmVhZHkgcGFzc2VkIGlzQnVzaW5lc3NEYXkgY2hlY2ssIHdlIHJldHVybiB0cnVlXG5cdGlmIChob3VyID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cblx0Y29uc3QgY29uZmlnID0gZ2V0QnVzaW5lc3NIb3Vyc0ZvckRhdGUoZGF0ZSwgYnVzaW5lc3NIb3Vycylcblx0aWYgKCFjb25maWcpIHtcblx0XHRyZXR1cm4gZmFsc2Vcblx0fVxuXG5cdC8vIENoZWNrIHRpbWVcblx0Ly8gc3RhcnRUaW1lIGFuZCBlbmRUaW1lIGFyZSBudW1iZXJzICgwLTI0KVxuXHQvLyBXZSB0cmVhdCB0aGVtIGFzIGV4YWN0IGhvdXJzLiBlLmcuIDkgbWVhbnMgMDk6MDAuXG5cdGNvbnN0IHN0YXJ0SCA9IGNvbmZpZy5zdGFydFRpbWUgPz8gOVxuXHRjb25zdCBlbmRIID0gY29uZmlnLmVuZFRpbWUgPz8gMTdcblxuXHRjb25zdCBjdXJyZW50TWludXRlcyA9IGhvdXIgKiA2MCArIG1pbnV0ZVxuXHRjb25zdCBzdGFydE1pbnV0ZXMgPSBzdGFydEggKiA2MFxuXHRjb25zdCBlbmRNaW51dGVzID0gZW5kSCAqIDYwXG5cblx0aWYgKGN1cnJlbnRNaW51dGVzIDwgc3RhcnRNaW51dGVzIHx8IGN1cnJlbnRNaW51dGVzID49IGVuZE1pbnV0ZXMpIHtcblx0XHRyZXR1cm4gZmFsc2Vcblx0fVxuXG5cdHJldHVybiB0cnVlXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7XG5cdGdldEJ1c2luZXNzSG91cnNGb3JEYXRlLFxuXHRpc0J1c2luZXNzRGF5LFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2J1c2luZXNzLWhvdXJzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgY29uc3QgYnVpbGREYXRlVGltZSA9IChcblx0ZGF0ZTogRGF0ZSxcblx0dGltZTogc3RyaW5nLFxuXHRpc0FsbERheTogYm9vbGVhblxuKTogZGF5anMuRGF5anMgPT4ge1xuXHRjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cdGNvbnN0IGJhc2UgPSBkYXlqcyhkYXRlKS5ob3VyKGhvdXJzKS5taW51dGUobWludXRlcylcblx0cmV0dXJuIGlzQWxsRGF5ID8gYmFzZS5ob3VyKDApLm1pbnV0ZSgwKSA6IGJhc2Vcbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkRW5kRGF0ZVRpbWUgPSAoXG5cdGRhdGU6IERhdGUsXG5cdHRpbWU6IHN0cmluZyxcblx0aXNBbGxEYXk6IGJvb2xlYW5cbik6IGRheWpzLkRheWpzID0+IHtcblx0Y29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRjb25zdCBiYXNlID0gZGF5anMoZGF0ZSkuaG91cihob3VycykubWludXRlKG1pbnV0ZXMpXG5cdHJldHVybiBpc0FsbERheSA/IGJhc2UuaG91cigyMykubWludXRlKDU5KSA6IGJhc2Vcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRpbWVDb25zdHJhaW50cyA9IChcblx0ZGF0ZTogRGF0ZSxcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbikgPT4ge1xuXHRpZiAoIWJ1c2luZXNzSG91cnMpIHJldHVybiB7IG1pbjogJzAwOjAwJywgbWF4OiAnMjM6NTknIH1cblxuXHRjb25zdCBkYXlqc0RhdGUgPSBkYXlqcyhkYXRlKVxuXHRpZiAoIWlzQnVzaW5lc3NEYXkoZGF5anNEYXRlLCBidXNpbmVzc0hvdXJzKSkge1xuXHRcdHJldHVybiB7IG1pbjogJzAwOjAwJywgbWF4OiAnMjM6NTknIH1cblx0fVxuXG5cdGNvbnN0IGNvbmZpZyA9IGdldEJ1c2luZXNzSG91cnNGb3JEYXRlKGRheWpzRGF0ZSwgYnVzaW5lc3NIb3Vycylcblx0aWYgKCFjb25maWcpIHJldHVybiB7IG1pbjogJzAwOjAwJywgbWF4OiAnMjM6NTknIH1cblxuXHRyZXR1cm4ge1xuXHRcdG1pbjogYCR7KGNvbmZpZy5zdGFydFRpbWUgPz8gOSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfTowMGAsXG5cdFx0bWF4OiBgJHsoKGNvbmZpZy5lbmRUaW1lID8/IDE3KSAtIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06NDVgLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgV2Vla2RheSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IENhcmQsIENhcmRDb250ZW50LCBDYXJkSGVhZGVyLCBDYXJkVGl0bGUgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2FyZCdcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NoZWNrYm94J1xuaW1wb3J0IHsgRGF0ZVBpY2tlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9kYXRlLXBpY2tlcidcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2lucHV0J1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvbGFiZWwnXG5pbXBvcnQge1xuXHRTZWxlY3QsXG5cdFNlbGVjdENvbnRlbnQsXG5cdFNlbGVjdEl0ZW0sXG5cdFNlbGVjdFRyaWdnZXIsXG5cdFNlbGVjdFZhbHVlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2VsZWN0J1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmNvbnN0IEZSRVFfTUFQID0ge1xuXHREQUlMWTogUlJ1bGUuREFJTFksXG5cdFdFRUtMWTogUlJ1bGUuV0VFS0xZLFxuXHRNT05USExZOiBSUnVsZS5NT05USExZLFxuXHRZRUFSTFk6IFJSdWxlLllFQVJMWSxcbn0gYXMgY29uc3RcbmNvbnN0IEZSRVFfVE9fU1RSID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuXHRPYmplY3QuZW50cmllcyhGUkVRX01BUCkubWFwKChbaywgdl0pID0+IFt2LCBrXSlcbikgYXMgUmVjb3JkPG51bWJlciwgc3RyaW5nPlxuY29uc3QgV0VFS0RBWVMgPSBbXG5cdFJSdWxlLlNVLFxuXHRSUnVsZS5NTyxcblx0UlJ1bGUuVFUsXG5cdFJSdWxlLldFLFxuXHRSUnVsZS5USCxcblx0UlJ1bGUuRlIsXG5cdFJSdWxlLlNBLFxuXVxuY29uc3QgREFZX0tFWVMgPSBbJ3N1bicsICdtb24nLCAndHVlJywgJ3dlZCcsICd0aHUnLCAnZnJpJywgJ3NhdCddXG5jb25zdCBwYXJzZU51bSA9ICh2OiBzdHJpbmcpID0+IE1hdGgubWF4KDEsIE51bWJlci5wYXJzZUludCh2LCAxMCkgfHwgMSlcblxuY29uc3QgZ2V0RGVzY3JpcHRpb24gPSAoXG5cdG9wdHM6IFJSdWxlT3B0aW9ucyB8IG51bGwsXG5cdHQ6IChrOiBzdHJpbmcpID0+IHN0cmluZ1xuKSA9PiB7XG5cdGlmICghb3B0cykge1xuXHRcdHJldHVybiB0KCdjdXN0b21SZWN1cnJlbmNlJylcblx0fVxuXHR0cnkge1xuXHRcdGNvbnN0IHRleHQgPSBuZXcgUlJ1bGUob3B0cykudG9UZXh0KClcblx0XHRyZXR1cm4gdGV4dCAmJiAhdGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdlcnJvcicpXG5cdFx0XHQ/IHRleHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0ZXh0LnNsaWNlKDEpXG5cdFx0XHQ6IHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gdCgnY3VzdG9tUmVjdXJyZW5jZScpXG5cdH1cbn1cblxuaW50ZXJmYWNlIFByb3BzIHtcblx0dmFsdWU/OiBSUnVsZU9wdGlvbnMgfCBudWxsXG5cdG9uQ2hhbmdlOiAodjogUlJ1bGVPcHRpb25zIHwgbnVsbCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgUmVjdXJyZW5jZUVkaXRvcjogUmVhY3QuRkM8UHJvcHM+ID0gKHsgdmFsdWUsIG9uQ2hhbmdlIH0pID0+IHtcblx0Y29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoeyB0OiBjdHgudCB9KSlcblx0Y29uc3QgW3Nob3csIHNldFNob3ddID0gdXNlU3RhdGUoISF2YWx1ZSlcblx0Y29uc3QgW29wdHMsIHNldE9wdHNdID0gdXNlU3RhdGU8UlJ1bGVPcHRpb25zIHwgbnVsbD4oKCkgPT4gdmFsdWUgfHwgbnVsbClcblxuXHRjb25zdCB3ZWVrRGF5cyA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gREFZX0tFWVMubWFwKChrLCBpKSA9PiAoeyB2YWx1ZTogV0VFS0RBWVNbaV0sIGxhYmVsOiB0KGspIH0pKSxcblx0XHRbdF1cblx0KVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0c2V0U2hvdyghIXZhbHVlKVxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0c2V0T3B0cyh2YWx1ZSlcblx0XHR9XG5cdH0sIFt2YWx1ZV0pXG5cblx0Y29uc3QgdXBkYXRlID0gKHU6IFBhcnRpYWw8UlJ1bGVPcHRpb25zPikgPT4ge1xuXHRcdGlmICghb3B0cykge1xuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGNvbnN0IG5leHQgPSB7IC4uLm9wdHMsIC4uLnUgfVxuXHRcdHNldE9wdHMobmV4dClcblx0XHRvbkNoYW5nZShzaG93ID8gbmV4dCA6IG51bGwpXG5cdH1cblxuXHRjb25zdCB0b2dnbGUgPSAoY2hlY2tlZDogYm9vbGVhbikgPT4ge1xuXHRcdHNldFNob3coY2hlY2tlZClcblx0XHRpZiAoIWNoZWNrZWQpIHtcblx0XHRcdG9uQ2hhbmdlKG51bGwpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0aWYgKG9wdHMpIHtcblx0XHRcdG9uQ2hhbmdlKG9wdHMpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0Y29uc3QgZGVmID0geyBmcmVxOiBSUnVsZS5EQUlMWSwgaW50ZXJ2YWw6IDEgfSBhcyBSUnVsZU9wdGlvbnNcblx0XHRzZXRPcHRzKGRlZilcblx0XHRvbkNoYW5nZShkZWYpXG5cdH1cblxuXHRjb25zdCB0b2dnbGVEYXkgPSAoaTogbnVtYmVyKSA9PiB7XG5cdFx0Y29uc3QgY3VyciA9IChvcHRzPy5ieXdlZWtkYXkgYXMgV2Vla2RheVtdKSB8fCBbXVxuXHRcdGNvbnN0IGRheSA9IFdFRUtEQVlTW2ldXG5cdFx0Y29uc3QgbmV4dCA9IGN1cnIuaW5jbHVkZXMoZGF5KVxuXHRcdFx0PyBjdXJyLmZpbHRlcigoZCkgPT4gZCAhPT0gZGF5KVxuXHRcdFx0OiBbLi4uY3VyciwgZGF5XVxuXHRcdHVwZGF0ZSh7IGJ5d2Vla2RheTogbmV4dC5sZW5ndGggPyBuZXh0IDogdW5kZWZpbmVkIH0pXG5cdH1cblxuXHRjb25zdCBzZXRFbmRUeXBlID0gKHR5cGU6ICduZXZlcicgfCAnY291bnQnIHwgJ3VudGlsJykgPT4ge1xuXHRcdGNvbnN0IHU6IFBhcnRpYWw8UlJ1bGVPcHRpb25zPiA9IHsgY291bnQ6IHVuZGVmaW5lZCwgdW50aWw6IHVuZGVmaW5lZCB9XG5cdFx0aWYgKHR5cGUgPT09ICdjb3VudCcpIHtcblx0XHRcdHUuY291bnQgPSBvcHRzPy5jb3VudCB8fCAxXG5cdFx0fVxuXHRcdGlmICh0eXBlID09PSAndW50aWwnKSB7XG5cdFx0XHR1LnVudGlsID0gb3B0cz8udW50aWwgfHwgZGF5anMoKS5hZGQoMSwgJ21vbnRoJykuZW5kT2YoJ2RheScpLnRvRGF0ZSgpXG5cdFx0fVxuXHRcdHVwZGF0ZSh1KVxuXHR9XG5cblx0Y29uc3QgZW5kVHlwZSA9IG9wdHM/LnVudGlsID8gJ3VudGlsJyA6IG9wdHM/LmNvdW50ID8gJ2NvdW50JyA6ICduZXZlcidcblx0Y29uc3QgZnJlcSA9IEZSRVFfVE9fU1RSW29wdHM/LmZyZXEgPz8gUlJ1bGUuREFJTFldIHx8ICdEQUlMWSdcblx0Y29uc3QgYnl3ZWVrZGF5ID0gQXJyYXkuaXNBcnJheShvcHRzPy5ieXdlZWtkYXkpXG5cdFx0PyBvcHRzLmJ5d2Vla2RheVxuXHRcdDogb3B0cz8uYnl3ZWVrZGF5XG5cdFx0XHQ/IFtvcHRzLmJ5d2Vla2RheV1cblx0XHRcdDogW11cblxuXHRyZXR1cm4gKFxuXHRcdDxDYXJkIGRhdGEtdGVzdGlkPVwicmVjdXJyZW5jZS1lZGl0b3JcIj5cblx0XHRcdDxDYXJkSGVhZGVyIGNsYXNzTmFtZT1cInBiLTNcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cblx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdGNoZWNrZWQ9e3Nob3d9XG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cInRvZ2dsZS1yZWN1cnJlbmNlXCJcblx0XHRcdFx0XHRcdGlkPVwicmVjdXJyaW5nXCJcblx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17dG9nZ2xlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PENhcmRUaXRsZSBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e3QoJ3JlcGVhdCcpfTwvQ2FyZFRpdGxlPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0e3Nob3cgJiYgdmFsdWUgJiYgKFxuXHRcdFx0XHRcdDxwIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHR7Z2V0RGVzY3JpcHRpb24odmFsdWUsIHQpfVxuXHRcdFx0XHRcdDwvcD5cblx0XHRcdFx0KX1cblx0XHRcdDwvQ2FyZEhlYWRlcj5cblxuXHRcdFx0e3Nob3cgJiYgKFxuXHRcdFx0XHQ8Q2FyZENvbnRlbnQgY2xhc3NOYW1lPVwicHQtMFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS00XCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTRcIj5cblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9XCJmcmVxdWVuY3lcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHt0KCdyZXBlYXRzJyl9XG5cdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0XG5cdFx0XHRcdFx0XHRcdFx0XHRvblZhbHVlQ2hhbmdlPXsoZikgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlKHsgZnJlcTogRlJFUV9NQVBbZiBhcyBrZXlvZiB0eXBlb2YgRlJFUV9NQVBdIH0pXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17ZnJlcX1cblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0VHJpZ2dlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLThcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImZyZXF1ZW5jeS1zZWxlY3RcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImZyZXF1ZW5jeVwiXG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RWYWx1ZSAvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC9TZWxlY3RUcmlnZ2VyPlxuXHRcdFx0XHRcdFx0XHRcdFx0PFNlbGVjdENvbnRlbnQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtPYmplY3Qua2V5cyhGUkVRX01BUCkubWFwKChmKSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PFNlbGVjdEl0ZW0ga2V5PXtmfSB2YWx1ZT17Zn0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7dChmLnRvTG93ZXJDYXNlKCkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0SXRlbT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdENvbnRlbnQ+XG5cdFx0XHRcdFx0XHRcdFx0PC9TZWxlY3Q+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCIgaHRtbEZvcj1cImludGVydmFsXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7dCgnZXZlcnknKX1cblx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04XCJcblx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW50ZXJ2YWxcIlxuXHRcdFx0XHRcdFx0XHRcdFx0bWluPVwiMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17KGUpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7IGludGVydmFsOiBwYXJzZU51bShlLnRhcmdldC52YWx1ZSkgfSlcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJudW1iZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e29wdHM/LmludGVydmFsIHx8IDF9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0e29wdHM/LmZyZXEgPT09IFJSdWxlLldFRUtMWSAmJiAoXG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIj57dCgncmVwZWF0T24nKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTEgbXQtMVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e3dlZWtEYXlzLm1hcCgoZCwgaSkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMVwiIGtleT17ZC5sYWJlbH0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjaGVja2VkPXtieXdlZWtkYXkuaW5jbHVkZXMoZC52YWx1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17YGRheS0ke2l9YH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gdG9nZ2xlRGF5KGkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LXhzIGN1cnNvci1wb2ludGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGh0bWxGb3I9e2BkYXktJHtpfWB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e2QubGFiZWx9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQpfVxuXG5cdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdlbmRzJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTIgbXQtMVwiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17ZW5kVHlwZSA9PT0gJ25ldmVyJ31cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJuZXZlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gc2V0RW5kVHlwZSgnbmV2ZXInKX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9XCJuZXZlclwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dCgnbmV2ZXInKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjaGVja2VkPXtlbmRUeXBlID09PSAnY291bnQnfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImFmdGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoKSA9PiBzZXRFbmRUeXBlKCdjb3VudCcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCIgaHRtbEZvcj1cImFmdGVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0KCdhZnRlcicpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdHtlbmRUeXBlID09PSAnY291bnQnICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC02IHctMTYgdGV4dC14c1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJjb3VudC1pbnB1dFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWluPVwiMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhlKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlKHsgY291bnQ6IHBhcnNlTnVtKGUudGFyZ2V0LnZhbHVlKSB9KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwibnVtYmVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17b3B0cz8uY291bnQgfHwgMX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ29jY3VycmVuY2VzJyl9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17ZW5kVHlwZSA9PT0gJ3VudGlsJ31cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gc2V0RW5kVHlwZSgndW50aWwnKX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9XCJvblwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dCgnb24nKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHR7ZW5kVHlwZSA9PT0gJ3VudGlsJyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxEYXRlUGlja2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC02XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRlPXtvcHRzPy51bnRpbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17KGQpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGUoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bnRpbDogZCA/IGRheWpzKGQpLmVuZE9mKCdkYXknKS50b0RhdGUoKSA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9DYXJkQ29udGVudD5cblx0XHRcdCl9XG5cdFx0PC9DYXJkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIENhcmQoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCd0ZXh0LWNhcmQtZm9yZWdyb3VuZCBmbGV4IGZsZXgtY29sIGdhcC02IHJvdW5kZWQteGwgYm9yZGVyIHNoYWRvdy1zbScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmRcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZEhlYWRlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J0Bjb250YWluZXIvY2FyZC1oZWFkZXIgZ3JpZCBhdXRvLXJvd3MtbWluIGdyaWQtcm93cy1bYXV0b19hdXRvXSBpdGVtcy1zdGFydCBnYXAtMS41IHAtNCBwYi0wIGhhcy1kYXRhLVtzbG90PWNhcmQtYWN0aW9uXTpncmlkLWNvbHMtWzFmcl9hdXRvXScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtaGVhZGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRUaXRsZSh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignbGVhZGluZy1ub25lIGZvbnQtc2VtaWJvbGQnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC10aXRsZVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkRGVzY3JpcHRpb24oeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXNtJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtZGVzY3JpcHRpb25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZEFjdGlvbih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2NvbC1zdGFydC0yIHJvdy1zcGFuLTIgcm93LXN0YXJ0LTEgc2VsZi1zdGFydCBqdXN0aWZ5LXNlbGYtZW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC1hY3Rpb25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZENvbnRlbnQoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3AtNCBwdC0wJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtY29udGVudFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkRm9vdGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdmbGV4IGl0ZW1zLWNlbnRlciBweC02IFsuYm9yZGVyLXRdOnB0LTYnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC1mb290ZXJcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHtcblx0Q2FyZCxcblx0Q2FyZEhlYWRlcixcblx0Q2FyZEZvb3Rlcixcblx0Q2FyZFRpdGxlLFxuXHRDYXJkQWN0aW9uLFxuXHRDYXJkRGVzY3JpcHRpb24sXG5cdENhcmRDb250ZW50LFxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBTZWxlY3RQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXNlbGVjdCdcbmltcG9ydCB7IENoZWNrSWNvbiwgQ2hldnJvbkRvd25JY29uLCBDaGV2cm9uVXBJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gU2VsZWN0KHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuUm9vdCBkYXRhLXNsb3Q9XCJzZWxlY3RcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdEdyb3VwKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuR3JvdXA+KSB7XG5cdHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLkdyb3VwIGRhdGEtc2xvdD1cInNlbGVjdC1ncm91cFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0VmFsdWUoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5WYWx1ZT4pIHtcblx0cmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuVmFsdWUgZGF0YS1zbG90PVwic2VsZWN0LXZhbHVlXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RUcmlnZ2VyKHtcblx0Y2xhc3NOYW1lLFxuXHRzaXplID0gJ2RlZmF1bHQnLFxuXHRjaGlsZHJlbixcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuVHJpZ2dlcj4gJiB7XG5cdHNpemU/OiAnc20nIHwgJ2RlZmF1bHQnXG59KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5UcmlnZ2VyXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcImJvcmRlci1pbnB1dCBkYXRhLVtwbGFjZWhvbGRlcl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIFsmX3N2Zzpub3QoW2NsYXNzKj0ndGV4dC0nXSldOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBkYXJrOmJnLWlucHV0LzMwIGRhcms6aG92ZXI6YmctaW5wdXQvNTAgZmxleCB3LWZpdCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTMgcHktMiB0ZXh0LXNtIHdoaXRlc3BhY2Utbm93cmFwIHNoYWRvdy14cyB0cmFuc2l0aW9uLVtjb2xvcixib3gtc2hhZG93XSBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIGRhdGEtW3NpemU9ZGVmYXVsdF06aC05IGRhdGEtW3NpemU9c21dOmgtOCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpsaW5lLWNsYW1wLTEgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06ZmxleCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTppdGVtcy1jZW50ZXIgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06Z2FwLTIgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCIsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2l6ZT17c2l6ZX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC10cmlnZ2VyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLkljb24gYXNDaGlsZD5cblx0XHRcdFx0PENoZXZyb25Eb3duSWNvbiBjbGFzc05hbWU9XCJzaXplLTQgb3BhY2l0eS01MFwiIC8+XG5cdFx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5JY29uPlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLlRyaWdnZXI+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0Q29udGVudCh7XG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdHBvc2l0aW9uID0gJ3BvcHBlcicsXG5cdGFsaWduID0gJ2NlbnRlcicsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkNvbnRlbnQ+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5Qb3J0YWw+XG5cdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLkNvbnRlbnRcblx0XHRcdFx0YWxpZ249e2FsaWdufVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiByZWxhdGl2ZSB6LTUwIG1heC1oLSgtLXJhZGl4LXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHQpIG1pbi13LVs4cmVtXSBvcmlnaW4tKC0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbikgb3ZlcmZsb3cteC1oaWRkZW4gb3ZlcmZsb3cteS1hdXRvIHJvdW5kZWQtbWQgYm9yZGVyIHNoYWRvdy1tZCcsXG5cdFx0XHRcdFx0cG9zaXRpb24gPT09ICdwb3BwZXInICYmXG5cdFx0XHRcdFx0XHQnZGF0YS1bc2lkZT1ib3R0b21dOnRyYW5zbGF0ZS15LTEgZGF0YS1bc2lkZT1sZWZ0XTotdHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXJpZ2h0XTp0cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9dG9wXTotdHJhbnNsYXRlLXktMScsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1jb250ZW50XCJcblx0XHRcdFx0cG9zaXRpb249e3Bvc2l0aW9ufVxuXHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHQ+XG5cdFx0XHRcdDxTZWxlY3RTY3JvbGxVcEJ1dHRvbiAvPlxuXHRcdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLlZpZXdwb3J0XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdwLTEnLFxuXHRcdFx0XHRcdFx0cG9zaXRpb24gPT09ICdwb3BwZXInICYmXG5cdFx0XHRcdFx0XHRcdCdoLVt2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci1oZWlnaHQpXSB3LWZ1bGwgbWluLXctW3ZhcigtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLXdpZHRoKV0gc2Nyb2xsLW15LTEnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PC9TZWxlY3RQcmltaXRpdmUuVmlld3BvcnQ+XG5cdFx0XHRcdDxTZWxlY3RTY3JvbGxEb3duQnV0dG9uIC8+XG5cdFx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5Db250ZW50PlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLlBvcnRhbD5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RMYWJlbCh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuTGFiZWw+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5MYWJlbFxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHB4LTIgcHktMS41IHRleHQteHMnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LWxhYmVsXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdEl0ZW0oe1xuXHRjbGFzc05hbWUsXG5cdGNoaWxkcmVuLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5JdGVtPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuSXRlbVxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XCJmb2N1czpiZy1hY2NlbnQgZm9jdXM6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBbJl9zdmc6bm90KFtjbGFzcyo9J3RleHQtJ10pXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgcmVsYXRpdmUgZmxleCB3LWZ1bGwgY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtc20gcHktMS41IHByLTggcGwtMiB0ZXh0LXNtIG91dGxpbmUtaGlkZGVuIHNlbGVjdC1ub25lIGRhdGEtW2Rpc2FibGVkXTpwb2ludGVyLWV2ZW50cy1ub25lIGRhdGEtW2Rpc2FibGVkXTpvcGFjaXR5LTUwIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNCAqOltzcGFuXTpsYXN0OmZsZXggKjpbc3Bhbl06bGFzdDppdGVtcy1jZW50ZXIgKjpbc3Bhbl06bGFzdDpnYXAtMlwiLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3QtaXRlbVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtMiBmbGV4IHNpemUtMy41IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuXHRcdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLkl0ZW1JbmRpY2F0b3I+XG5cdFx0XHRcdFx0PENoZWNrSWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuXHRcdFx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5JdGVtSW5kaWNhdG9yPlxuXHRcdFx0PC9zcGFuPlxuXHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5JdGVtVGV4dD57Y2hpbGRyZW59PC9TZWxlY3RQcmltaXRpdmUuSXRlbVRleHQ+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuSXRlbT5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTZXBhcmF0b3Ioe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlNlcGFyYXRvcj4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlNlcGFyYXRvclxuXHRcdFx0Y2xhc3NOYW1lPXtjbignYmctYm9yZGVyIHBvaW50ZXItZXZlbnRzLW5vbmUgLW14LTEgbXktMSBoLXB4JywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1zZXBhcmF0b3JcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0U2Nyb2xsVXBCdXR0b24oe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuU2Nyb2xsVXBCdXR0b25cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0xJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXNjcm9sbC11cC1idXR0b25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxDaGV2cm9uVXBJY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuU2Nyb2xsVXBCdXR0b24+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0U2Nyb2xsRG93bkJ1dHRvbih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvbj4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlNjcm9sbERvd25CdXR0b25cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0xJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXNjcm9sbC1kb3duLWJ1dHRvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENoZXZyb25Eb3duSWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLlNjcm9sbERvd25CdXR0b24+XG5cdClcbn1cblxuZXhwb3J0IHtcblx0U2VsZWN0LFxuXHRTZWxlY3RDb250ZW50LFxuXHRTZWxlY3RHcm91cCxcblx0U2VsZWN0SXRlbSxcblx0U2VsZWN0TGFiZWwsXG5cdFNlbGVjdFNjcm9sbERvd25CdXR0b24sXG5cdFNlbGVjdFNjcm9sbFVwQnV0dG9uLFxuXHRTZWxlY3RTZXBhcmF0b3IsXG5cdFNlbGVjdFRyaWdnZXIsXG5cdFNlbGVjdFZhbHVlLFxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRTY29wZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlY3VycmluZ0V2ZW50QWN0aW9ucyhvbkNvbXBsZXRlPzogKCkgPT4gdm9pZCkge1xuXHRjb25zdCB7IHVwZGF0ZVJlY3VycmluZ0V2ZW50LCBkZWxldGVSZWN1cnJpbmdFdmVudCB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiBjb250ZXh0LnVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQuZGVsZXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0fSkpXG5cblx0Y29uc3QgW2RpYWxvZ1N0YXRlLCBzZXREaWFsb2dTdGF0ZV0gPSB1c2VTdGF0ZTx7XG5cdFx0aXNPcGVuOiBib29sZWFuXG5cdFx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnIHwgJ2RlbGV0ZSdcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0XHR1cGRhdGVzPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHRcdG9uQ29uZmlybT86IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4gdm9pZFxuXHR9Pih7XG5cdFx0aXNPcGVuOiBmYWxzZSxcblx0XHRvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG5cdFx0ZXZlbnQ6IG51bGwsXG5cdH0pXG5cblx0Y29uc3Qgb3BlbkVkaXREaWFsb2cgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQsIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdHNldERpYWxvZ1N0YXRlKHtcblx0XHRcdFx0aXNPcGVuOiB0cnVlLFxuXHRcdFx0XHRvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHR1cGRhdGVzLFxuXHRcdFx0XHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdFx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB1cGRhdGVzLCB7XG5cdFx0XHRcdFx0XHRzY29wZSxcblx0XHRcdFx0XHRcdGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSxcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbdXBkYXRlUmVjdXJyaW5nRXZlbnRdXG5cdClcblxuXHRjb25zdCBvcGVuRGVsZXRlRGlhbG9nID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRzZXREaWFsb2dTdGF0ZSh7XG5cdFx0XHRcdGlzT3BlbjogdHJ1ZSxcblx0XHRcdFx0b3BlcmF0aW9uVHlwZTogJ2RlbGV0ZScsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdFx0XHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB7XG5cdFx0XHRcdFx0XHRzY29wZSxcblx0XHRcdFx0XHRcdGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSxcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbZGVsZXRlUmVjdXJyaW5nRXZlbnRdXG5cdClcblxuXHRjb25zdCBjbG9zZURpYWxvZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzZXREaWFsb2dTdGF0ZSh7XG5cdFx0XHRpc09wZW46IGZhbHNlLFxuXHRcdFx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnLFxuXHRcdFx0ZXZlbnQ6IG51bGwsXG5cdFx0fSlcblx0fSwgW10pXG5cblx0Y29uc3QgaGFuZGxlQ29uZmlybSA9IHVzZUNhbGxiYWNrKFxuXHRcdChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdFx0aWYgKGRpYWxvZ1N0YXRlLm9uQ29uZmlybSkge1xuXHRcdFx0XHRkaWFsb2dTdGF0ZS5vbkNvbmZpcm0oc2NvcGUpXG5cdFx0XHR9XG5cdFx0XHRjbG9zZURpYWxvZygpXG5cdFx0XHQvLyBDYWxsIG9uQ29tcGxldGUgdG8gY2xvc2UgdGhlIHBhcmVudCBmb3JtXG5cdFx0XHRvbkNvbXBsZXRlPy4oKVxuXHRcdH0sXG5cdFx0W2RpYWxvZ1N0YXRlLCBjbG9zZURpYWxvZywgb25Db21wbGV0ZV1cblx0KVxuXG5cdHJldHVybiB7XG5cdFx0ZGlhbG9nU3RhdGUsXG5cdFx0b3BlbkVkaXREaWFsb2csXG5cdFx0b3BlbkRlbGV0ZURpYWxvZyxcblx0XHRjbG9zZURpYWxvZyxcblx0XHRoYW5kbGVDb25maXJtLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ29udGVudCxcblx0RGlhbG9nRGVzY3JpcHRpb24sXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nVGl0bGUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9kaWFsb2cnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IEV2ZW50Rm9ybSB9IGZyb20gJy4vZXZlbnQtZm9ybSdcblxuZXhwb3J0IGNvbnN0IEV2ZW50Rm9ybURpYWxvZyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdHQsXG5cdFx0c2VsZWN0ZWRFdmVudCxcblx0XHRpc0V2ZW50Rm9ybU9wZW4sXG5cdFx0Y2xvc2VFdmVudEZvcm0sXG5cdFx0YWRkRXZlbnQsXG5cdFx0dXBkYXRlRXZlbnQsXG5cdFx0ZGVsZXRlRXZlbnQsXG5cdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0dDogY29udGV4dC50LFxuXHRcdHNlbGVjdGVkRXZlbnQ6IGNvbnRleHQuc2VsZWN0ZWRFdmVudCxcblx0XHRpc0V2ZW50Rm9ybU9wZW46IGNvbnRleHQuaXNFdmVudEZvcm1PcGVuLFxuXHRcdGNsb3NlRXZlbnRGb3JtOiBjb250ZXh0LmNsb3NlRXZlbnRGb3JtLFxuXHRcdGFkZEV2ZW50OiBjb250ZXh0LmFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50OiBjb250ZXh0LmRlbGV0ZUV2ZW50LFxuXHRcdHJlbmRlckV2ZW50Rm9ybTogY29udGV4dC5yZW5kZXJFdmVudEZvcm0sXG5cdH0pKVxuXG5cdGNvbnN0IGhhbmRsZU9uVXBkYXRlID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0dXBkYXRlRXZlbnQoZXZlbnQuaWQsIGV2ZW50KVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlT25EZWxldGUgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRkZWxldGVFdmVudChldmVudC5pZClcblx0fVxuXG5cdGNvbnN0IGV2ZW50Rm9ybVByb3BzID0ge1xuXHRcdG9wZW46IGlzRXZlbnRGb3JtT3Blbixcblx0XHRvbkNsb3NlOiBjbG9zZUV2ZW50Rm9ybSxcblx0XHRzZWxlY3RlZEV2ZW50LFxuXHRcdG9uQWRkOiBhZGRFdmVudCxcblx0XHRvblVwZGF0ZTogaGFuZGxlT25VcGRhdGUsXG5cdFx0b25EZWxldGU6IGhhbmRsZU9uRGVsZXRlLFxuXHR9XG5cblx0aWYgKHJlbmRlckV2ZW50Rm9ybSkge1xuXHRcdHJldHVybiByZW5kZXJFdmVudEZvcm0oZXZlbnRGb3JtUHJvcHMpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2cgb25PcGVuQ2hhbmdlPXtjbG9zZUV2ZW50Rm9ybX0gb3Blbj17aXNFdmVudEZvcm1PcGVufT5cblx0XHRcdDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1bOTB2aF0gdy1bOTB2d10gbWF4LXctWzUwMHB4XSBwLTQgc206cC02IG92ZXJmbG93LWhpZGRlbiBnYXAtMFwiPlxuXHRcdFx0XHQ8RGlhbG9nSGVhZGVyIGNsYXNzTmFtZT1cIm1iLTIgc206bWItNCBzaHJpbmstMFwiPlxuXHRcdFx0XHRcdDxEaWFsb2dUaXRsZSBjbGFzc05hbWU9XCJ0ZXh0LWJhc2Ugc206dGV4dC1sZ1wiPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgnZWRpdEV2ZW50JykgOiB0KCdjcmVhdGVFdmVudCcpfVxuXHRcdFx0XHRcdDwvRGlhbG9nVGl0bGU+XG5cdFx0XHRcdFx0PERpYWxvZ0Rlc2NyaXB0aW9uIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgnZWRpdEV2ZW50RGV0YWlscycpIDogdCgnYWRkTmV3RXZlbnQnKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ0Rlc2NyaXB0aW9uPlxuXHRcdFx0XHQ8L0RpYWxvZ0hlYWRlcj5cblxuXHRcdFx0XHQ8RXZlbnRGb3JtIHsuLi5ldmVudEZvcm1Qcm9wc30gLz5cblx0XHRcdDwvRGlhbG9nQ29udGVudD5cblx0XHQ8L0RpYWxvZz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBDYWxlbmRhciBhcyBDYWxlbmRhckljb24sIERvd25sb2FkLCBNZW51LCBQbHVzIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7XG5cdFBvcG92ZXIsXG5cdFBvcG92ZXJDb250ZW50LFxuXHRQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3BvcG92ZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZG93bmxvYWRJQ2FsZW5kYXIgfSBmcm9tICdAL2xpYi91dGlscy9leHBvcnQtaWNhbCdcbmltcG9ydCBUaXRsZUNvbnRlbnQgZnJvbSAnLi90aXRsZS1jb250ZW50J1xuaW1wb3J0IFZpZXdDb250cm9scyBmcm9tICcuL3ZpZXctY29udHJvbHMnXG5cbmludGVyZmFjZSBIZWFkZXJQcm9wcyB7XG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBIZWFkZXI6IFJlYWN0LkZDPEhlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSA9ICcnIH0pID0+IHtcblx0Y29uc3Qge1xuXHRcdHZpZXcsXG5cdFx0c2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2QsXG5cdFx0dG9kYXksXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRcdHJhd0V2ZW50cyxcblx0XHR0LFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGN0eCkgPT4gKHtcblx0XHR2aWV3OiBjdHgudmlldyxcblx0XHRzZXRWaWV3OiBjdHguc2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kOiBjdHgubmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kOiBjdHgucHJldlBlcmlvZCxcblx0XHR0b2RheTogY3R4LnRvZGF5LFxuXHRcdG9wZW5FdmVudEZvcm06IGN0eC5vcGVuRXZlbnRGb3JtLFxuXHRcdGhlYWRlckNvbXBvbmVudDogY3R4LmhlYWRlckNvbXBvbmVudCxcblx0XHRoZWFkZXJDbGFzc05hbWU6IGN0eC5oZWFkZXJDbGFzc05hbWUsXG5cdFx0cmF3RXZlbnRzOiBjdHgucmF3RXZlbnRzLFxuXHRcdHQ6IGN0eC50LFxuXHR9KSlcblxuXHRjb25zdCBbbW9iaWxlTWVudU9wZW4sIHNldE1vYmlsZU1lbnVPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG5cdGNvbnN0IGNsb3NlTW9iaWxlTWVudSA9ICgpID0+IHNldE1vYmlsZU1lbnVPcGVuKGZhbHNlKVxuXG5cdGNvbnN0IGhhbmRsZUV4cG9ydCA9ICgpID0+IHtcblx0XHRjb25zdCBmaWxlbmFtZSA9IGBpbGFteS1jYWxlbmRhci0ke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdfS5pY3NgXG5cdFx0ZG93bmxvYWRJQ2FsZW5kYXIocmF3RXZlbnRzLCBmaWxlbmFtZSwgJ2lsYW15IENhbGVuZGFyJylcblx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHR9XG5cblx0Y29uc3QgTmV3RXZlbnRCdXR0b24gPSAoKSA9PiAoXG5cdFx0PEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuXHRcdFx0b25DbGljaz17KCkgPT4gb3BlbkV2ZW50Rm9ybSgpfVxuXHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdHZhcmlhbnQ9XCJkZWZhdWx0XCJcblx0XHQ+XG5cdFx0XHQ8UGx1cyBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsOmlubGluZVwiPnt0KCduZXcnKX08L3NwYW4+XG5cdFx0PC9CdXR0b24+XG5cdClcblxuXHRjb25zdCBFeHBvcnRCdXR0b24gPSAoeyBmdWxsV2lkdGggPSBmYWxzZSB9OiB7IGZ1bGxXaWR0aD86IGJvb2xlYW4gfSkgPT4gKFxuXHRcdDxCdXR0b25cblx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0xJywgZnVsbFdpZHRoICYmICd3LWZ1bGwgZ2FwLTInKX1cblx0XHRcdG9uQ2xpY2s9e2hhbmRsZUV4cG9ydH1cblx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0PlxuXHRcdFx0PERvd25sb2FkIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0e2Z1bGxXaWR0aCA/IChcblx0XHRcdFx0YCR7dCgnZXhwb3J0Jyl9IENhbGVuZGFyICguaWNzKWBcblx0XHRcdCkgOiAoXG5cdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsL2Jhc2UtaGVhZGVyOmlubGluZVwiPnt0KCdleHBvcnQnKX08L3NwYW4+XG5cdFx0XHQpfVxuXHRcdDwvQnV0dG9uPlxuXHQpXG5cblx0aWYgKGhlYWRlckNvbXBvbmVudCkge1xuXHRcdHJldHVybiBoZWFkZXJDb21wb25lbnRcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiQGNvbnRhaW5lci9iYXNlLWhlYWRlciB3LWZ1bGxcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnZmxleCBqdXN0aWZ5LWNlbnRlciBAMnhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktYmV0d2VlbiBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0yJyxcblx0XHRcdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRcdFx0aGVhZGVyQ2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1zdGFydFwiPlxuXHRcdFx0XHRcdDxDYWxlbmRhckljb24gY2xhc3NOYW1lPVwiaC01IHctNVwiIC8+XG5cdFx0XHRcdFx0PFRpdGxlQ29udGVudCAvPlxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGp1c3RpZnktc3RhcnQgQHhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktY2VudGVyIGdhcC0xIEA0eGwvYmFzZS1oZWFkZXI6anVzdGlmeS1lbmQgb3ZlcmZsb3cteC1hdXRvXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gQG1kL2Jhc2UtaGVhZGVyOmZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgZ2FwLTFcIj5cblx0XHRcdFx0XHRcdDxWaWV3Q29udHJvbHNcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwianVzdGlmeS1lbmRcIlxuXHRcdFx0XHRcdFx0XHRjdXJyZW50Vmlldz17dmlld31cblx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e3NldFZpZXd9XG5cdFx0XHRcdFx0XHRcdG9uTmV4dD17bmV4dFBlcmlvZH1cblx0XHRcdFx0XHRcdFx0b25QcmV2aW91cz17cHJldlBlcmlvZH1cblx0XHRcdFx0XHRcdFx0b25Ub2RheT17dG9kYXl9XG5cdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJkZWZhdWx0XCJcblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8TmV3RXZlbnRCdXR0b24gLz5cblx0XHRcdFx0XHRcdDxFeHBvcnRCdXR0b24gLz5cblx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTEgQG1kL2Jhc2UtaGVhZGVyOmhpZGRlblwiPlxuXHRcdFx0XHRcdFx0PE5ld0V2ZW50QnV0dG9uIC8+XG5cdFx0XHRcdFx0XHQ8UG9wb3ZlciBvbk9wZW5DaGFuZ2U9e3NldE1vYmlsZU1lbnVPcGVufSBvcGVuPXttb2JpbGVNZW51T3Blbn0+XG5cdFx0XHRcdFx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHRcdFx0XHRcdDxCdXR0b24gc2l6ZT1cInNtXCIgdmFyaWFudD1cIm91dGxpbmVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxNZW51IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0XHRcdFx0XHQ8UG9wb3ZlckNvbnRlbnQgYWxpZ249XCJlbmRcIiBjbGFzc05hbWU9XCJ3LVsyNDBweF0gcC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxWaWV3Q29udHJvbHNcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudFZpZXc9e3ZpZXd9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsodikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNldFZpZXcodilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbk5leHQ9eygpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuZXh0UGVyaW9kKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvblByZXZpb3VzPXsoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJldlBlcmlvZCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VNb2JpbGVNZW51KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25Ub2RheT17KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvZGF5KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZ3JpZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJwdC0yIGJvcmRlci10XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxFeHBvcnRCdXR0b24gZnVsbFdpZHRoIC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHRcdFx0XHRcdDwvUG9wb3Zlcj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgZGVmYXVsdCBIZWFkZXJcbiIsCiAgICAiaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuY29uc3QgQ1JMRiA9ICdcXHJcXG4nXG5cbmNvbnN0IFVUQ19WVElNRVpPTkUgPSBbXG5cdCdCRUdJTjpWVElNRVpPTkUnLFxuXHQnVFpJRDpVVEMnLFxuXHQnQkVHSU46U1RBTkRBUkQnLFxuXHQnRFRTVEFSVDoxOTcwMDEwMVQwMDAwMDAnLFxuXHQnVFpOQU1FOlVUQycsXG5cdCdUWk9GRlNFVEZST006KzAwMDAnLFxuXHQnVFpPRkZTRVRUTzorMDAwMCcsXG5cdCdFTkQ6U1RBTkRBUkQnLFxuXHQnRU5EOlZUSU1FWk9ORScsXG5dLmpvaW4oQ1JMRilcblxuY29uc3QgZXNjYXBlVGV4dCA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gdGV4dFxuXHRcdC5yZXBsYWNlQWxsKCdcXFxcJywgJ1xcXFxcXFxcJylcblx0XHQucmVwbGFjZUFsbCgnOycsICdcXFxcOycpXG5cdFx0LnJlcGxhY2VBbGwoJywnLCAnXFxcXCwnKVxuXHRcdC5yZXBsYWNlQWxsKCdcXG4nLCAnXFxcXG4nKVxuXHRcdC5yZXBsYWNlQWxsKCdcXHInLCAnJylcbn1cblxuY29uc3QgZm9ybWF0RGF0ZSA9IChkYXRlOiBkYXlqcy5EYXlqcywgaXNBbGxEYXkgPSBmYWxzZSk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBpc0FsbERheVxuXHRcdD8gZGF0ZS5mb3JtYXQoJ1lZWVlNTUREJylcblx0XHQ6IGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG59XG5cbmNvbnN0IGdldFVJRCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG5jb25zdCBmb3JtYXRSUnVsZSA9IChycnVsZU9wdGlvbnM6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuXHR0cnkge1xuXHRcdGNvbnN0IHJydWxlU3RyaW5nID0gbmV3IFJSdWxlKFxuXHRcdFx0cnJ1bGVPcHRpb25zIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgUlJ1bGU+WzBdXG5cdFx0KS50b1N0cmluZygpXG5cdFx0cmV0dXJuIChcblx0XHRcdHJydWxlU3RyaW5nLnNwbGl0KCdcXG4nKS5maW5kKChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoJ1JSVUxFOicpKSB8fCAnJ1xuXHRcdClcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuICcnXG5cdH1cbn1cblxuY29uc3QgY29udmVydEV2ZW50VG9WRXZlbnQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuXHRjb25zdCB0aW1lc3RhbXAgPSBkYXlqcygpLnV0YygpLmZvcm1hdCgnWVlZWU1NRERbVF1ISG1tc3NbWl0nKVxuXHRjb25zdCBkYXRlUGFyYW0gPSBldmVudC5hbGxEYXkgPyAnO1ZBTFVFPURBVEUnIDogJydcblx0Y29uc3QgcnJ1bGUgPSBldmVudC5ycnVsZSA/IGZvcm1hdFJSdWxlKGV2ZW50LnJydWxlKSA6ICcnXG5cblx0Y29uc3QgZXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXM/Lmxlbmd0aFxuXHRcdD8gZXZlbnQuZXhkYXRlcy5tYXAoKGQpID0+IGZvcm1hdERhdGUoZGF5anMoZCksIGV2ZW50LmFsbERheSkpLmpvaW4oJywnKVxuXHRcdDogbnVsbFxuXG5cdGNvbnN0IHJlY3VycmVuY2VJZCA9IGV2ZW50LnJlY3VycmVuY2VJZFxuXHRcdD8gZm9ybWF0RGF0ZShkYXlqcyhldmVudC5yZWN1cnJlbmNlSWQpLCBldmVudC5hbGxEYXkpXG5cdFx0OiBudWxsXG5cblx0Y29uc3QgbGluZXMgPSBbXG5cdFx0J0JFR0lOOlZFVkVOVCcsXG5cdFx0YFVJRDoke2dldFVJRChldmVudCl9YCxcblx0XHRgRFRTVEFSVCR7ZGF0ZVBhcmFtfToke2Zvcm1hdERhdGUoZXZlbnQuc3RhcnQsIGV2ZW50LmFsbERheSl9YCxcblx0XHRgRFRFTkQke2RhdGVQYXJhbX06JHtmb3JtYXREYXRlKGV2ZW50LmVuZCwgZXZlbnQuYWxsRGF5KX1gLFxuXHRcdGBTVU1NQVJZOiR7ZXNjYXBlVGV4dChldmVudC50aXRsZSl9YCxcblx0XHRldmVudC5kZXNjcmlwdGlvbiAmJiBgREVTQ1JJUFRJT046JHtlc2NhcGVUZXh0KGV2ZW50LmRlc2NyaXB0aW9uKX1gLFxuXHRcdGV2ZW50LmxvY2F0aW9uICYmIGBMT0NBVElPTjoke2VzY2FwZVRleHQoZXZlbnQubG9jYXRpb24pfWAsXG5cdFx0cnJ1bGUsXG5cdFx0ZXhkYXRlcyAmJiBgRVhEQVRFOiR7ZXhkYXRlc31gLFxuXHRcdHJlY3VycmVuY2VJZCAmJiBgUkVDVVJSRU5DRS1JRDoke3JlY3VycmVuY2VJZH1gLFxuXHRcdGBEVFNUQU1QOiR7dGltZXN0YW1wfWAsXG5cdFx0YENSRUFURUQ6JHt0aW1lc3RhbXB9YCxcblx0XHRgTEFTVC1NT0RJRklFRDoke3RpbWVzdGFtcH1gLFxuXHRcdCdTVEFUVVM6Q09ORklSTUVEJyxcblx0XHQnU0VRVUVOQ0U6MCcsXG5cdFx0J1RSQU5TUDpPUEFRVUUnLFxuXHRcdCdFTkQ6VkVWRU5UJyxcblx0XVxuXG5cdHJldHVybiBsaW5lcy5maWx0ZXIoQm9vbGVhbikuam9pbihDUkxGKVxufVxuXG5jb25zdCBmaWx0ZXJFdmVudHMgPSAoZXZlbnRzOiBDYWxlbmRhckV2ZW50W10pOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRjb25zdCBzZWVuVUlEcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cblx0cmV0dXJuIGV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgdWlkID0gZ2V0VUlEKGV2ZW50KVxuXHRcdGNvbnN0IGlzQmFzZVJlY3VycmluZyA9IGV2ZW50LnJydWxlICYmICFldmVudC5yZWN1cnJlbmNlSWRcblx0XHRjb25zdCBpc01vZGlmaWVkSW5zdGFuY2UgPSBldmVudC5yZWN1cnJlbmNlSWQgJiYgIWV2ZW50LnJydWxlXG5cblx0XHRpZiAoaXNCYXNlUmVjdXJyaW5nKSB7XG5cdFx0XHRzZWVuVUlEcy5hZGQodWlkKVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0aWYgKGlzTW9kaWZpZWRJbnN0YW5jZSkge1xuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0cmV0dXJuICFldmVudC5ycnVsZSAmJiAhZXZlbnQucmVjdXJyZW5jZUlkICYmICFzZWVuVUlEcy5oYXModWlkKVxuXHR9KVxufVxuXG5leHBvcnQgY29uc3QgZXhwb3J0VG9JQ2FsZW5kYXIgPSAoXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdLFxuXHRjYWxlbmRhck5hbWUgPSAnaWxhbXkgQ2FsZW5kYXInXG4pOiBzdHJpbmcgPT4ge1xuXHRjb25zdCBuYW1lID0gZXNjYXBlVGV4dChjYWxlbmRhck5hbWUpXG5cdGNvbnN0IHZldmVudFN0cmluZ3MgPSBmaWx0ZXJFdmVudHMoZXZlbnRzKS5tYXAoY29udmVydEV2ZW50VG9WRXZlbnQpXG5cblx0cmV0dXJuIFtcblx0XHQnQkVHSU46VkNBTEVOREFSJyxcblx0XHQnVkVSU0lPTjoyLjAnLFxuXHRcdCdQUk9ESUQ6LS8vaWxhbXkvL2lsYW15IENhbGVuZGFyLy9FTicsXG5cdFx0J0NBTFNDQUxFOkdSRUdPUklBTicsXG5cdFx0J01FVEhPRDpQVUJMSVNIJyxcblx0XHRgWC1XUi1DQUxOQU1FOiR7bmFtZX1gLFxuXHRcdGBYLVdSLUNBTERFU0M6RXhwb3J0ZWQgZnJvbSAke25hbWV9YCxcblx0XHRVVENfVlRJTUVaT05FLFxuXHRcdC4uLnZldmVudFN0cmluZ3MsXG5cdFx0J0VORDpWQ0FMRU5EQVInLFxuXHRdLmpvaW4oQ1JMRilcbn1cblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkSUNhbGVuZGFyID0gKFxuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcblx0ZmlsZW5hbWUgPSAnY2FsZW5kYXIuaWNzJyxcblx0Y2FsZW5kYXJOYW1lID0gJ2lsYW15IENhbGVuZGFyJ1xuKTogdm9pZCA9PiB7XG5cdGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZXhwb3J0VG9JQ2FsZW5kYXIoZXZlbnRzLCBjYWxlbmRhck5hbWUpXSwge1xuXHRcdHR5cGU6ICd0ZXh0L2NhbGVuZGFyO2NoYXJzZXQ9dXRmLTgnLFxuXHR9KVxuXHRjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpXG5cdGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IGZpbGVuYW1lLmVuZHNXaXRoKCcuaWNzJylcblx0XHQ/IGZpbGVuYW1lXG5cdFx0OiBgJHtmaWxlbmFtZX0uaWNzYFxuXG5cdGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcblx0bGluay5ocmVmID0gdXJsXG5cdGxpbmsuZG93bmxvYWQgPSBub3JtYWxpemVkRmlsZW5hbWVcblxuXHRkb2N1bWVudC5ib2R5LmFwcGVuZChsaW5rKVxuXHRsaW5rLmNsaWNrKClcblx0bGluay5yZW1vdmUoKVxuXHRVUkwucmV2b2tlT2JqZWN0VVJMKHVybClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ2hldnJvbkRvd24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuY29uc3QgTU9OVEhfS0VZUyA9IFtcblx0J2phbnVhcnknLFxuXHQnZmVicnVhcnknLFxuXHQnbWFyY2gnLFxuXHQnYXByaWwnLFxuXHQnbWF5Jyxcblx0J2p1bmUnLFxuXHQnanVseScsXG5cdCdhdWd1c3QnLFxuXHQnc2VwdGVtYmVyJyxcblx0J29jdG9iZXInLFxuXHQnbm92ZW1iZXInLFxuXHQnZGVjZW1iZXInLFxuXSBhcyBjb25zdFxuXG5jb25zdCBUaXRsZUNvbnRlbnQgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHZpZXcsIHNldEN1cnJlbnREYXRlLCB0LCBmaXJzdERheU9mV2VlayB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdFx0Y3VycmVudERhdGU6IGN0eC5jdXJyZW50RGF0ZSxcblx0XHRcdHZpZXc6IGN0eC52aWV3LFxuXHRcdFx0c2V0Q3VycmVudERhdGU6IGN0eC5zZXRDdXJyZW50RGF0ZSxcblx0XHRcdHQ6IGN0eC50LFxuXHRcdFx0Zmlyc3REYXlPZldlZWs6IGN0eC5maXJzdERheU9mV2Vlayxcblx0XHR9KSlcblxuXHRjb25zdCBbb3BlblBvcG92ZXIsIHNldE9wZW5Qb3BvdmVyXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG5cblx0Y29uc3QgbW9udGhzID0gdXNlTWVtbygoKSA9PiBNT05USF9LRVlTLm1hcCgoa2V5KSA9PiB0KGtleSkpLCBbdF0pXG5cdGNvbnN0IGN1cnJlbnRZZWFyID0gY3VycmVudERhdGUueWVhcigpXG5cdGNvbnN0IHllYXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTEgfSwgKF8sIGkpID0+IGN1cnJlbnRZZWFyIC0gNSArIGkpXG5cdGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdGNvbnN0IHNlbGVjdERhdGUgPSAoZGF0ZTogZGF5anMuRGF5anMpID0+IHtcblx0XHRzZXRDdXJyZW50RGF0ZShkYXRlKVxuXHRcdHNldE9wZW5Qb3BvdmVyKG51bGwpXG5cdH1cblxuXHRjb25zdCByZW5kZXJNb250aENvbnRlbnQgPSAoKSA9PiAoXG5cdFx0PD5cblx0XHRcdHttb250aHMubWFwKChtb250aCwgaW5kZXgpID0+IChcblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG5cdFx0XHRcdFx0XHRjdXJyZW50RGF0ZS5tb250aCgpID09PSBpbmRleCAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGtleT17bW9udGh9XG5cdFx0XHRcdFx0b25DbGljaz17KCkgPT4gc2VsZWN0RGF0ZShjdXJyZW50RGF0ZS5tb250aChpbmRleCkpfVxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7bW9udGh9XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0KSl9XG5cdFx0PC8+XG5cdClcblxuXHRjb25zdCByZW5kZXJZZWFyQ29udGVudCA9ICgpID0+IChcblx0XHQ8PlxuXHRcdFx0e3llYXJzLm1hcCgoeWVhcikgPT4gKFxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdGN1cnJlbnREYXRlLnllYXIoKSA9PT0geWVhciAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGtleT17eWVhcn1cblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZWxlY3REYXRlKGN1cnJlbnREYXRlLnllYXIoeWVhcikpfVxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7eWVhcn1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQpKX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlcldlZWtDb250ZW50ID0gKCkgPT4gKFxuXHRcdDw+XG5cdFx0XHR7QXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgaSkgPT4ge1xuXHRcdFx0XHRjb25zdCB3ZWVrRGF0ZSA9IGN1cnJlbnREYXRlLnN1YnRyYWN0KDMsICd3ZWVrJykuYWRkKGksICd3ZWVrJylcblx0XHRcdFx0Y29uc3QgZGF5cyA9IGdldFdlZWtEYXlzKHdlZWtEYXRlLCBmaXJzdERheU9mV2Vlaylcblx0XHRcdFx0Y29uc3Qgc3RhcnQgPSBkYXlzWzBdXG5cdFx0XHRcdGNvbnN0IGVuZCA9IGRheXNbNl1cblx0XHRcdFx0Y29uc3QgaXNDdXJyZW50V2VlayA9IHdlZWtEYXRlLmlzU2FtZShjdXJyZW50RGF0ZSwgJ3dlZWsnKVxuXHRcdFx0XHRjb25zdCBjcm9zc2VzTW9udGggPSBzdGFydC5tb250aCgpICE9PSBlbmQubW9udGgoKVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0XHRpc0N1cnJlbnRXZWVrICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdGtleT17c3RhcnQuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZWxlY3REYXRlKHN0YXJ0KX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG5cdFx0XHRcdFx0XHRcdDxzcGFuPntgJHtzdGFydC5mb3JtYXQoJ01NTSBEJyl9IC0gJHtlbmQuZm9ybWF0KCdEJyl9YH08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdHtjcm9zc2VzTW9udGggJiYgKFxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cIm1sLTAuNSB0ZXh0LXhzIG9wYWNpdHktNzBcIj57YCR7c3RhcnQuZm9ybWF0KCdNTU0nKX0tJHtlbmQuZm9ybWF0KCdNTU0nKX1gfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlckRheUNvbnRlbnQgPSAoKSA9PiB7XG5cdFx0Y29uc3QgZmlyc3REYXkgPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cdFx0Y29uc3QgZGF5c0luTW9udGggPSBjdXJyZW50RGF0ZS5kYXlzSW5Nb250aCgpXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PD5cblx0XHRcdFx0e0FycmF5LmZyb20oeyBsZW5ndGg6IGRheXNJbk1vbnRoIH0sIChfLCBpKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZGF5ID0gZmlyc3REYXkuZGF0ZShpICsgMSlcblx0XHRcdFx0XHRjb25zdCBpc0N1cnJlbnREYXkgPSBkYXkuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5Jylcblx0XHRcdFx0XHRjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5JylcblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0XHRcdGlzQ3VycmVudERheSAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0a2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNlbGVjdERhdGUoZGF5KX1cblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4+e2RheS5mb3JtYXQoJ2RkZGQsIE1NTSBEJyl9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdHtpc1RvZGF5ICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1zbSBweC0xISB0ZXh0LXhzXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0KCd0b2RheScpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KX1cblx0XHRcdDwvPlxuXHRcdClcblx0fVxuXG5cdGNvbnN0IHBvcG92ZXJzID0gW1xuXHRcdHtcblx0XHRcdGlkOiAnbW9udGgnLFxuXHRcdFx0aGlkZGVuOiB2aWV3ID09PSAneWVhcicsXG5cdFx0XHR0aXRsZTogY3VycmVudERhdGUuZm9ybWF0KCdNTU1NJyksXG5cdFx0XHRyZW5kZXI6IHJlbmRlck1vbnRoQ29udGVudCxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiAneWVhcicsXG5cdFx0XHRoaWRkZW46IGZhbHNlLFxuXHRcdFx0dGl0bGU6IGN1cnJlbnREYXRlLmZvcm1hdCgnWVlZWScpLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJZZWFyQ29udGVudCxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiAnd2VlaycsXG5cdFx0XHRoaWRkZW46IHZpZXcgIT09ICd3ZWVrJyxcblx0XHRcdHRpdGxlOiBgJHt3ZWVrRGF5c1swXS5mb3JtYXQoJ01NTSBEJyl9IC0gJHt3ZWVrRGF5c1s2XS5mb3JtYXQoJ01NTSBEJyl9YCxcblx0XHRcdHJlbmRlcjogcmVuZGVyV2Vla0NvbnRlbnQsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogJ2RheScsXG5cdFx0XHRoaWRkZW46IHZpZXcgIT09ICdkYXknLFxuXHRcdFx0dGl0bGU6IGN1cnJlbnREYXRlLmZvcm1hdCgnZGRkZCwgRCcpLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJEYXlDb250ZW50LFxuXHRcdH0sXG5cdF1cblxuXHRyZXR1cm4gcG9wb3ZlcnNcblx0XHQuZmlsdGVyKChwKSA9PiAhcC5oaWRkZW4pXG5cdFx0Lm1hcCgocG9wb3ZlcikgPT4gKFxuXHRcdFx0PFBvcG92ZXJcblx0XHRcdFx0a2V5PXtwb3BvdmVyLmlkfVxuXHRcdFx0XHRvbk9wZW5DaGFuZ2U9eyhvcGVuKSA9PiBzZXRPcGVuUG9wb3ZlcihvcGVuID8gcG9wb3Zlci5pZCA6IG51bGwpfVxuXHRcdFx0XHRvcGVuPXtvcGVuUG9wb3ZlciA9PT0gcG9wb3Zlci5pZH1cblx0XHRcdD5cblx0XHRcdFx0PFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcHgtMSEgZm9udC1zZW1pYm9sZFwiXG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImNhbGVuZGFyLW1vbnRoLWJ1dHRvblwiXG5cdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcHgtMSEgZm9udC1zZW1pYm9sZFwiXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItbW9udGgtYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17YCR7cG9wb3Zlci5pZH0tJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7cG9wb3Zlci50aXRsZX1cblx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHRcdFx0PENoZXZyb25Eb3duIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0XHQ8UG9wb3ZlckNvbnRlbnQgY2xhc3NOYW1lPVwidy00MCBwLTBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggbWF4LWgtNjAgZmxleC1jb2wgb3ZlcmZsb3ctYXV0b1wiPlxuXHRcdFx0XHRcdFx0e3BvcG92ZXIucmVuZGVyKCl9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0XHQ8L1BvcG92ZXI+XG5cdFx0KSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGl0bGVDb250ZW50XG4iLAogICAgImltcG9ydCB7IENoZXZyb25MZWZ0LCBDaGV2cm9uUmlnaHQgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG50eXBlIFZpZXdUeXBlID0gJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInXG5jb25zdCBBVkFJTEFCTEVfVklFV1M6IFZpZXdUeXBlW10gPSBbJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXVxuXG5pbnRlcmZhY2UgVmlld0NvbnRyb2xzUHJvcHMge1xuXHRjdXJyZW50VmlldzogVmlld1R5cGVcblx0b25DaGFuZ2U6ICh2aWV3OiBWaWV3VHlwZSkgPT4gdm9pZFxuXHRvblRvZGF5PzogKCkgPT4gdm9pZFxuXHRvbk5leHQ/OiAoKSA9PiB2b2lkXG5cdG9uUHJldmlvdXM/OiAoKSA9PiB2b2lkXG5cdHZhcmlhbnQ/OiAnZGVmYXVsdCcgfCAnZ3JpZCdcblx0c2l6ZT86ICdzbScgfCAnZGVmYXVsdCdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IFZpZXdDb250cm9sczogUmVhY3QuRkM8Vmlld0NvbnRyb2xzUHJvcHM+ID0gKHtcblx0Y3VycmVudFZpZXcsXG5cdG9uQ2hhbmdlLFxuXHR2YXJpYW50ID0gJ2RlZmF1bHQnLFxuXHRzaXplID0gJ3NtJyxcblx0Y2xhc3NOYW1lLFxuXHRvblRvZGF5LFxuXHRvbk5leHQsXG5cdG9uUHJldmlvdXMsXG59KSA9PiB7XG5cdGNvbnN0IHsgdCwgcmVzb3VyY2VzIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHR0OiBjb250ZXh0LnQsXG5cdFx0cmVzb3VyY2VzOiBjb250ZXh0LnJlc291cmNlcyxcblx0fSkpXG5cdGNvbnN0IGlzR3JpZCA9IHZhcmlhbnQgPT09ICdncmlkJ1xuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSByZXNvdXJjZXMgJiYgcmVzb3VyY2VzLmxlbmd0aCA+IDBcblxuXHQvLyBFeHRyYWN0IGNvbW1vbiBidXR0b24gY2xhc3NOYW1lIGxvZ2ljIHRvIGEgZnVuY3Rpb25cblx0Y29uc3QgZ2V0QnV0dG9uQ2xhc3NOYW1lID0gKHZpZXdUeXBlOiBWaWV3VHlwZSkgPT4ge1xuXHRcdHJldHVybiBjbihcblx0XHRcdC8vIEJhc2Ugd2lkdGggZm9yIGdyaWQgbGF5b3V0XG5cdFx0XHRpc0dyaWQgPyAndy1mdWxsJyA6ICcnLFxuXHRcdFx0Ly8gQWN0aXZlIHZpZXcgc3R5bGluZ1xuXHRcdFx0Y3VycmVudFZpZXcgPT09IHZpZXdUeXBlICYmICdiZy1wcmltYXJ5LzgwJ1xuXHRcdClcblx0fVxuXG5cdGNvbnN0IGdldEJ0blZhcmlhbnQgPSAodmlld1R5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0cmV0dXJuIGN1cnJlbnRWaWV3ID09PSB2aWV3VHlwZSA/ICdkZWZhdWx0JyA6ICdvdXRsaW5lJ1xuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRpc0dyaWQgPyAnZ3JpZCBncmlkLWNvbHMtMiBnYXAtMicgOiAnZmxleCBnYXAtMScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uUHJldmlvdXN9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdDxDaGV2cm9uTGVmdCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvbk5leHR9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdDxDaGV2cm9uUmlnaHQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0e0FWQUlMQUJMRV9WSUVXUy5tYXAoKHR5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0XHRcdGlmIChpc1Jlc291cmNlQ2FsZW5kYXIgJiYgdHlwZSA9PT0gJ3llYXInKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGxcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUodHlwZSl9XG5cdFx0XHRcdFx0XHRrZXk9e3R5cGV9XG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSh0eXBlKX1cblx0XHRcdFx0XHRcdHNpemU9e3NpemV9XG5cdFx0XHRcdFx0XHR2YXJpYW50PXtnZXRCdG5WYXJpYW50KHR5cGUpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHt0KHR5cGUpfVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvblRvZGF5fSBzaXplPXtzaXplfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHR7dCgndG9kYXknKX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZXdDb250cm9sc1xuIiwKICAgICJpbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdkYXlqcydcbmltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkUm93IH0gZnJvbSAnQC9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQtcm93J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgQWxsRGF5Q2VsbCB9IGZyb20gJy4vYWxsLWRheS1jZWxsJ1xuXG5pbnRlcmZhY2UgQWxsRGF5Um93UHJvcHMge1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdXG5cdGNsYXNzZXM/OiB7IHJvdz86IHN0cmluZzsgY2VsbD86IHN0cmluZzsgc3BhY2VyPzogc3RyaW5nIH1cblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRzaG93U3BhY2VyPzogYm9vbGVhblxufVxuXG5jb25zdCBOb01lbW9BbGxEYXlSb3c6IFJlYWN0LkZDPEFsbERheVJvd1Byb3BzPiA9ICh7XG5cdGRheXMsXG5cdGNsYXNzZXMsXG5cdHJlc291cmNlLFxuXHRzaG93U3BhY2VyID0gdHJ1ZSxcbn0pID0+IHtcblx0Y29uc3QgY29sdW1ucyA9IGRheXMubWFwKChkYXksIGluZGV4KSA9PiAoe1xuXHRcdGlkOiBgYWxsZGF5LWNvbC0ke2RheS50b0lTT1N0cmluZygpfS0ke2luZGV4fWAsXG5cdFx0ZGF5LFxuXHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0XHRjbGFzc05hbWU6IGNuKCdoLWZ1bGwgbWluLWgtMTIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wJywgY2xhc3Nlcz8uY2VsbCksXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9e2NuKCdmbGV4IHctZnVsbCcsIGNsYXNzZXM/LnJvdyl9IGRhdGEtdGVzdGlkPVwiYWxsLWRheS1yb3dcIj5cblx0XHRcdHsvKiBUaW1lIGNvbCBzcGFjZXIgKi99XG5cdFx0XHR7c2hvd1NwYWNlciAmJiA8QWxsRGF5Q2VsbCBjbGFzc05hbWU9e2NsYXNzZXM/LnNwYWNlcn0gLz59XG5cblx0XHRcdHsvKiBEYXkgYWxsIGRheSBjZWxsICovfVxuXHRcdFx0PEhvcml6b250YWxHcmlkUm93XG5cdFx0XHRcdGFsbERheVxuXHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4LTEgbWluLWgtZml0XCJcblx0XHRcdFx0Y29sdW1ucz17Y29sdW1uc31cblx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXswfVxuXHRcdFx0XHRncmlkVHlwZT1cImRheVwiXG5cdFx0XHRcdGlkPXtgYWxsLWRheS1yb3ctJHtyZXNvdXJjZT8uaWQgPz8gJ21haW4nfWB9XG5cdFx0XHRcdGlzTGFzdFJvd1xuXHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHRcdC8+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEFsbERheVJvdyA9IG1lbW8oTm9NZW1vQWxsRGF5Um93KVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IG1lbW8sIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEdyaWRDZWxsIH0gZnJvbSAnLi4vZ3JpZC1jZWxsJ1xuaW1wb3J0IHsgUmVzb3VyY2VDZWxsIH0gZnJvbSAnLi4vcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXIgfSBmcm9tICcuL2hvcml6b250YWwtZ3JpZC1ldmVudHMtbGF5ZXInXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZENvbHVtbiB7XG5cdGlkOiBzdHJpbmdcblx0ZGF5PzogZGF5anMuRGF5anNcblx0ZGF5cz86IGRheWpzLkRheWpzW11cblx0Z3JpZFR5cGU6ICdkYXknIHwgJ2hvdXInXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRyZW5kZXJDZWxsPzogKHJvdzogSG9yaXpvbnRhbEdyaWRSb3dQcm9wcykgPT4gUmVhY3QuUmVhY3ROb2RlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRSb3dQcm9wcyB7XG5cdGlkOiBzdHJpbmcgfCBudW1iZXJcblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHZhcmlhbnQ/OiAncmVndWxhcicgfCAncmVzb3VyY2UnXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0Y29sdW1ucz86IEhvcml6b250YWxHcmlkQ29sdW1uW11cblx0YWxsRGF5PzogYm9vbGVhblxuXHRzaG93RGF5TnVtYmVyPzogYm9vbGVhblxuXHRpc0xhc3RSb3c/OiBib29sZWFuXG59XG5cbmNvbnN0IE5vTWVtb0hvcml6b250YWxHcmlkUm93OiBSZWFjdC5GQzxIb3Jpem9udGFsR3JpZFJvd1Byb3BzPiA9ICh7XG5cdGlkLFxuXHRyZXNvdXJjZSxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0dmFyaWFudCA9ICdyZXNvdXJjZScsXG5cdGRheU51bWJlckhlaWdodCxcblx0Y2xhc3NOYW1lLFxuXHRjb2x1bW5zID0gW10sXG5cdGFsbERheSxcblx0c2hvd0RheU51bWJlciA9IGZhbHNlLFxuXHRpc0xhc3RSb3cgPSBmYWxzZSxcbn0pID0+IHtcblx0Y29uc3QgeyByZW5kZXJSZXNvdXJjZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKHN0YXRlKSA9PiAoe1xuXHRcdHJlbmRlclJlc291cmNlOiBzdGF0ZS5yZW5kZXJSZXNvdXJjZSxcblx0fSkpXG5cblx0Y29uc3QgaXNSZXNvdXJjZUNhbGVuZGFyID0gdmFyaWFudCA9PT0gJ3Jlc291cmNlJ1xuXHRjb25zdCBpc0dyb3VwZWQgPSBjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLmRheXMpXG5cblx0Y29uc3QgcmVuZGVyRXZlbnRzTGF5ZXIgPSB1c2VDYWxsYmFjayhcblx0XHQoZGF5czogZGF5anMuRGF5anNbXSkgPT4ge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuXHRcdFx0XHRcdDxIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyXG5cdFx0XHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgaG9yaXpvbnRhbC1ldmVudHMtJHtpZH1gfVxuXHRcdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXtkYXlOdW1iZXJIZWlnaHR9XG5cdFx0XHRcdFx0XHRkYXlzPXtkYXlzfVxuXHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2U/LmlkfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2FsbERheSwgZGF5TnVtYmVySGVpZ2h0LCBncmlkVHlwZSwgaWQsIHJlc291cmNlPy5pZF1cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LTEgcmVsYXRpdmUnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2Bob3Jpem9udGFsLXJvdy0ke2lkfWB9XG5cdFx0PlxuXHRcdFx0e2lzUmVzb3VyY2VDYWxlbmRhciAmJiAoXG5cdFx0XHRcdDxSZXNvdXJjZUNlbGxcblx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAgaC1mdWxsXCJcblx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YGhvcml6b250YWwtcm93LWxhYmVsLSR7cmVzb3VyY2U/LmlkfWB9XG5cdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3JlbmRlclJlc291cmNlID8gKFxuXHRcdFx0XHRcdFx0cmVuZGVyUmVzb3VyY2UocmVzb3VyY2UpXG5cdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwid3JhcC1icmVhay13b3JkIHRleHQtc21cIj57cmVzb3VyY2U/LnRpdGxlfTwvZGl2PlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdDwvUmVzb3VyY2VDZWxsPlxuXHRcdFx0KX1cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleC0xIGZsZXhcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbFwiPlxuXHRcdFx0XHRcdHtjb2x1bW5zLm1hcCgoY29sLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGNvbC5kYXkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0XHRcdGFsbERheT17YWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0J2ZsZXgtMSB3LTIwJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXNMYXN0Um93ICYmICdib3JkZXItYi0wJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29sLmNsYXNzTmFtZVxuXHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdGRheT17Y29sLmRheX1cblx0XHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRcdGhvdXI9e2dyaWRUeXBlID09PSAnaG91cicgPyBjb2wuZGF5LmhvdXIoKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdFx0XHRcdGtleT17Y29sLmRheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2U/LmlkfVxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0RheU51bWJlcj17c2hvd0RheU51bWJlcn1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGlzTGFzdENvbCA9IGluZGV4ID09PSBjb2x1bW5zLmxlbmd0aCAtIDFcblxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHJlbGF0aXZlIHctZnVsbFwiIGtleT17Y29sLmlkfT5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7Y29sLmRheXM/Lm1hcCgoZGF5KSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxHcmlkQ2VsbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsbERheT17YWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnZmxleC0xIHctMjAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXNMYXN0Um93ICYmICdib3JkZXItYi0wJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCFpc0xhc3RDb2wgJiYgJ2JvcmRlci1yIScsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb2wuY2xhc3NOYW1lXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXk9e2RheX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aG91cj17Z3JpZFR5cGUgPT09ICdob3VyJyA/IGRheS5ob3VyKCkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtkYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZT8uaWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0RheU51bWJlcj17c2hvd0RheU51bWJlcn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHRcdFx0e3JlbmRlckV2ZW50c0xheWVyKGNvbC5kYXlzKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBFdmVudHMgbGF5ZXIgcG9zaXRpb25lZCBhYnNvbHV0ZWx5IG92ZXIgdGhlIHJvdyAqL31cblx0XHRcdFx0eyFpc0dyb3VwZWQgJiZcblx0XHRcdFx0XHRyZW5kZXJFdmVudHNMYXllcihjb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wuZGF5KS5maWx0ZXIoQm9vbGVhbikpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkUm93ID0gbWVtbyhOb01lbW9Ib3Jpem9udGFsR3JpZFJvdylcbiIsCiAgICAiaW1wb3J0IFJlYWN0LCB7IG1lbW8sIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IERheU51bWJlciB9IGZyb20gJ0AvY29tcG9uZW50cy9kYXktbnVtYmVyJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgaXNCdXNpbmVzc0hvdXIgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2J1c2luZXNzLWhvdXJzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBFVkVOVF9CQVJfSEVJR0hUIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB0eXBlIHsgU2VsZWN0ZWREYXlFdmVudHMgfSBmcm9tICcuL2FsbC1ldmVudHMtZGlhbG9nJ1xuaW1wb3J0IHsgQWxsRXZlbnREaWFsb2cgfSBmcm9tICcuL2FsbC1ldmVudHMtZGlhbG9nJ1xuaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJy4vZHJvcHBhYmxlLWNlbGwnXG5cbmludGVyZmFjZSBHcmlkUHJvcHMge1xuXHRkYXk6IGRheWpzLkRheWpzXG5cdGhvdXI/OiBudW1iZXIgLy8gT3B0aW9uYWwgaG91ciBmb3IgaG91ci1iYXNlZCBncmlkc1xuXHRtaW51dGU/OiBudW1iZXIgLy8gT3B0aW9uYWwgbWludXRlIGZvciBtb3JlIGdyYW51bGFyIHRpbWUgc2xvdHNcblx0ZGF5TWF4RXZlbnRzPzogbnVtYmVyXG5cdGNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjbGFzc05hbWUgZm9yIGN1c3RvbSBzdHlsaW5nXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXIgLy8gT3B0aW9uYWwgcmVzb3VyY2UgSUQgZm9yIHJlc291cmNlLXNwZWNpZmljIGRheSBjZWxsc1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInIC8vIEZ1dHVyZSB1c2UgZm9yIGRpZmZlcmVudCBncmlkIHR5cGVzXG5cdHNob3VsZFJlbmRlckV2ZW50cz86IGJvb2xlYW4gLy8gRmxhZyB0byBkZXRlcm1pbmUgaWYgZXZlbnRzIHNob3VsZCBiZSByZW5kZXJlZFxuXHRhbGxEYXk/OiBib29sZWFuIC8vIEZsYWcgdG8gaW5kaWNhdGUgaWYgdGhpcyBpcyBhbiBhbGwtZGF5IGNlbGxcblx0c2hvd0RheU51bWJlcj86IGJvb2xlYW4gLy8gRmxhZyB0byBzaG93IG9yIGhpZGUgdGhlIGRheSBudW1iZXJcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5jb25zdCBOb01lbW9HcmlkQ2VsbDogUmVhY3QuRkM8R3JpZFByb3BzPiA9ICh7XG5cdGRheSxcblx0aG91cixcblx0bWludXRlLFxuXHRjbGFzc05hbWUgPSAnJyxcblx0cmVzb3VyY2VJZCxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0c2hvdWxkUmVuZGVyRXZlbnRzID0gdHJ1ZSxcblx0YWxsRGF5ID0gZmFsc2UsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG5cdHNob3dEYXlOdW1iZXIgPSBmYWxzZSxcblx0Y2hpbGRyZW4sXG59KSA9PiB7XG5cdGNvbnN0IGFsbEV2ZW50c0RpYWxvZ1JlZiA9IFJlYWN0LnVzZVJlZjx7XG5cdFx0b3BlbjogKCkgPT4gdm9pZFxuXHRcdGNsb3NlOiAoKSA9PiB2b2lkXG5cdFx0c2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG5cdH0+KG51bGwpXG5cdGNvbnN0IHtcblx0XHRkYXlNYXhFdmVudHMgPSAwLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRjdXJyZW50RGF0ZSxcblx0XHR0LFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHRldmVudFNwYWNpbmcsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoc3RhdGUpID0+ICh7XG5cdFx0ZGF5TWF4RXZlbnRzOiBzdGF0ZS5kYXlNYXhFdmVudHMsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiBzdGF0ZS5nZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0Y3VycmVudERhdGU6IHN0YXRlLmN1cnJlbnREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrOiBzdGF0ZS5maXJzdERheU9mV2Vlayxcblx0XHR0OiBzdGF0ZS50LFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlOiBzdGF0ZS5nZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRidXNpbmVzc0hvdXJzOiBzdGF0ZS5idXNpbmVzc0hvdXJzLFxuXHRcdGN1cnJlbnRMb2NhbGU6IHN0YXRlLmN1cnJlbnRMb2NhbGUsXG5cdFx0ZXZlbnRTcGFjaW5nOiBzdGF0ZS5ldmVudFNwYWNpbmcsXG5cdH0pKVxuXG5cdGNvbnN0IHRvZGF5RXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKCFzaG91bGRSZW5kZXJFdmVudHMpIHtcblx0XHRcdHJldHVybiBbXVxuXHRcdH1cblxuXHRcdGxldCB0b2RheUV2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShcblx0XHRcdGRheS5zdGFydE9mKGdyaWRUeXBlKSxcblx0XHRcdGRheS5lbmRPZihncmlkVHlwZSlcblx0XHQpXG5cblx0XHRpZiAoYWxsRGF5KSB7XG5cdFx0XHR0b2RheUV2ZW50cyA9IHRvZGF5RXZlbnRzLmZpbHRlcigoZSkgPT4gZS5hbGxEYXkpXG5cdFx0fVxuXG5cdFx0aWYgKHJlc291cmNlSWQpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlRXZlbnRzID0gZ2V0RXZlbnRzRm9yUmVzb3VyY2UocmVzb3VyY2VJZCkgPz8gW11cblxuXHRcdFx0cmV0dXJuIHRvZGF5RXZlbnRzLmZpbHRlcigoZXZlbnQpID0+XG5cdFx0XHRcdHJlc291cmNlRXZlbnRzLnNvbWUoKHJlKSA9PiBTdHJpbmcocmUuaWQpID09PSBTdHJpbmcoZXZlbnQuaWQpKVxuXHRcdFx0KVxuXHRcdH1cblxuXHRcdHJldHVybiB0b2RheUV2ZW50c1xuXHR9LCBbXG5cdFx0ZGF5LFxuXHRcdHJlc291cmNlSWQsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdGdyaWRUeXBlLFxuXHRcdHNob3VsZFJlbmRlckV2ZW50cyxcblx0XHRhbGxEYXksXG5cdF0pXG5cblx0Ly8gSGFuZGxlciBmb3Igc2hvd2luZyBhbGwgZXZlbnRzIGluIGEgZGlhbG9nXG5cdGNvbnN0IHNob3dBbGxFdmVudHMgPSAoZGF5OiBkYXlqcy5EYXlqcywgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10pID0+IHtcblx0XHRhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8uc2V0U2VsZWN0ZWREYXlFdmVudHMoe1xuXHRcdFx0ZGF5LFxuXHRcdFx0ZXZlbnRzLFxuXHRcdH0pXG5cdFx0YWxsRXZlbnRzRGlhbG9nUmVmLmN1cnJlbnQ/Lm9wZW4oKVxuXHR9XG5cblx0Y29uc3QgaXNDdXJyZW50TW9udGggPSBkYXkubW9udGgoKSA9PT0gY3VycmVudERhdGUubW9udGgoKVxuXG5cdGNvbnN0IGhpZGRlbkV2ZW50c0NvdW50ID0gdG9kYXlFdmVudHMubGVuZ3RoIC0gZGF5TWF4RXZlbnRzXG5cdGNvbnN0IGhhc0hpZGRlbkV2ZW50cyA9IGhpZGRlbkV2ZW50c0NvdW50ID4gMFxuXG5cdGNvbnN0IGlzQnVzaW5lc3MgPSBpc0J1c2luZXNzSG91cih7XG5cdFx0ZGF0ZTogZGF5LFxuXHRcdGhvdXI6IGdyaWRUeXBlID09PSAnaG91cicgPyBkYXkuaG91cigpIDogdW5kZWZpbmVkLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdH0pXG5cblx0Y29uc3QgaG91clN0ciA9IGRheS5mb3JtYXQoJ0hIJylcblx0Y29uc3QgbW0gPSBkYXkuZm9ybWF0KCdtbScpXG5cdGNvbnN0IGRhdGVUZXN0SWRCYXNlID1cblx0XHRncmlkVHlwZSA9PT0gJ2hvdXInXG5cdFx0XHQ/IGBkYXktY2VsbC0ke2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX0tJHtob3VyU3RyfS0ke21tfWBcblx0XHRcdDogYGRheS1jZWxsLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWBcblxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8RHJvcHBhYmxlQ2VsbFxuXHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnY3Vyc29yLXBvaW50ZXIgb3ZlcmZsb3ctY2xpcCBwLTEgaG92ZXI6YmctYWNjZW50IG1pbi1oLVs2MHB4XSByZWxhdGl2ZSBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgb25seTpib3JkZXItciBib3JkZXItYicsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkIHx8IGRhdGVUZXN0SWRCYXNlfVxuXHRcdFx0XHRkYXRlPXtkYXl9XG5cdFx0XHRcdGRpc2FibGVkPXshaXNCdXNpbmVzcyB8fCAhaXNDdXJyZW50TW9udGh9XG5cdFx0XHRcdGhvdXI9e2hvdXJ9XG5cdFx0XHRcdGlkPXtgZGF5LWNlbGwtJHtkYXkudG9JU09TdHJpbmcoKX0ke3Jlc291cmNlSWQgPyBgLXJlc291cmNlLSR7cmVzb3VyY2VJZH1gIDogJyd9YH1cblx0XHRcdFx0bWludXRlPXttaW51dGV9XG5cdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlSWR9XG5cdFx0XHRcdHR5cGU9XCJkYXktY2VsbFwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGgtZnVsbCB3LWZ1bGxcIlxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiZ3JpZC1jZWxsLWNvbnRlbnRcIlxuXHRcdFx0XHRcdHN0eWxlPXt7IGdhcDogYCR7ZXZlbnRTcGFjaW5nfXB4YCB9fVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3Nob3dEYXlOdW1iZXIgJiYgPERheU51bWJlciBkYXRlPXtkYXl9IGxvY2FsZT17Y3VycmVudExvY2FsZX0gLz59XG5cblx0XHRcdFx0XHR7c2hvdWxkUmVuZGVyRXZlbnRzICYmIChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdHsvKiBSZW5kZXIgcGxhY2Vob2xkZXJzIGZvciBldmVudHMgdGhhdCBvY2N1ciB0b2RheSBzbyB0aGF0IHRoZSBjZWxsIGhlaWdodCBpcyBhY2NvcmRpbmcgdG8gZGF5TWF4RXZlbnRzLiAqL31cblx0XHRcdFx0XHRcdFx0e3RvZGF5RXZlbnRzLnNsaWNlKDAsIGRheU1heEV2ZW50cykubWFwKChldmVudCwgcm93SW5kZXgpID0+IChcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgc2hyaW5rLTBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2V2ZW50Py50aXRsZX1cblx0XHRcdFx0XHRcdFx0XHRcdGtleT17YGVtcHR5LSR7cm93SW5kZXh9LSR7ZXZlbnQuaWR9YH1cblx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlPXt7IGhlaWdodDogYCR7RVZFTlRfQkFSX0hFSUdIVH1weGAgfX1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQpKX1cblxuXHRcdFx0XHRcdFx0XHR7LyogU2hvdyBtb3JlIGV2ZW50cyBidXR0b24gd2l0aCBhY2N1cmF0ZSBjb3VudCAqL31cblx0XHRcdFx0XHRcdFx0e2hhc0hpZGRlbkV2ZW50cyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGhvdmVyOnRleHQtZm9yZWdyb3VuZCBjdXJzb3ItcG9pbnRlciB0ZXh0LVsxMHB4XSB3aGl0ZXNwYWNlLW5vd3JhcCBzbTp0ZXh0LXhzIHNocmluay0wIG10LTFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dBbGxFdmVudHMoZGF5LCB0b2RheUV2ZW50cylcblx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRvbktleURvd249eyhlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChlLmtleSA9PT0gJ0VudGVyJyB8fCBlLmtleSA9PT0gJyAnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dBbGxFdmVudHMoZGF5LCB0b2RheUV2ZW50cylcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdHJvbGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci10YWctb3Zlci1yb2xlXG5cdFx0XHRcdFx0XHRcdFx0XHR0YWJJbmRleD17MH1cblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHQre2hpZGRlbkV2ZW50c0NvdW50fSB7dCgnbW9yZScpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9Ecm9wcGFibGVDZWxsPlxuXG5cdFx0XHR7LyogRGlhbG9nIGZvciBzaG93aW5nIGFsbCBldmVudHMgKi99XG5cdFx0XHQ8QWxsRXZlbnREaWFsb2cgcmVmPXthbGxFdmVudHNEaWFsb2dSZWZ9IC8+XG5cdFx0PC8+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEdyaWRDZWxsID0gbWVtbyhOb01lbW9HcmlkQ2VsbCkgYXMgdHlwZW9mIE5vTWVtb0dyaWRDZWxsXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIERheU51bWJlclByb3BzIHtcblx0ZGF0ZTogZGF5anMuRGF5anNcblx0bG9jYWxlPzogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGRheSBudW1iZXIgZm9yIGEgY2FsZW5kYXIgY2VsbCwgaGlnaGxpZ2h0aW5nICd0b2RheScgd2l0aCBhIHByaW1hcnkgYmFja2dyb3VuZC5cbiAqL1xuZXhwb3J0IGNvbnN0IERheU51bWJlcjogUmVhY3QuRkM8RGF5TnVtYmVyUHJvcHM+ID0gKHtcblx0ZGF0ZSxcblx0bG9jYWxlID0gJ2VuJyxcblx0Y2xhc3NOYW1lLFxufSkgPT4ge1xuXHRjb25zdCBpc1RvZGF5ID0gZGF0ZS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cyBzaHJpbmstMCcsXG5cdFx0XHRcdGlzVG9kYXkgJiYgJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZm9udC1tZWRpdW0nLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17XG5cdFx0XHRcdGlzVG9kYXkgPyAnZGF5LW51bWJlci10b2RheScgOiBgZGF5LW51bWJlci0ke2RhdGUuZm9ybWF0KCdEJyl9YFxuXHRcdFx0fVxuXHRcdD5cblx0XHRcdHtJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwgeyBkYXk6ICdudW1lcmljJyB9KS5mb3JtYXQoZGF0ZS50b0RhdGUoKSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VJbXBlcmF0aXZlSGFuZGxlLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ29udGVudCxcblx0RGlhbG9nSGVhZGVyLFxuXHREaWFsb2dUaXRsZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RpYWxvZydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RlZERheUV2ZW50cyB7XG5cdGRheTogZGF5anMuRGF5anNcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbn1cblxuaW50ZXJmYWNlIEFsbEV2ZW50RGlhbG9nUHJvcHMge1xuXHRyZWY6IFJlYWN0LlJlZjx7XG5cdFx0b3BlbjogKCkgPT4gdm9pZFxuXHRcdGNsb3NlOiAoKSA9PiB2b2lkXG5cdFx0c2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG5cdH0+XG59XG5cbmV4cG9ydCBjb25zdCBBbGxFdmVudERpYWxvZzogUmVhY3QuRkM8QWxsRXZlbnREaWFsb2dQcm9wcz4gPSAoeyByZWYgfSkgPT4ge1xuXHRjb25zdCBbZGlhbG9nT3Blbiwgc2V0RGlhbG9nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkRGF5RXZlbnRzLCBzZXRTZWxlY3RlZERheUV2ZW50c10gPVxuXHRcdHVzZVN0YXRlPFNlbGVjdGVkRGF5RXZlbnRzIHwgbnVsbD4obnVsbClcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWsgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChzdGF0ZSkgPT4gKHtcblx0XHRjdXJyZW50RGF0ZTogc3RhdGUuY3VycmVudERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWs6IHN0YXRlLmZpcnN0RGF5T2ZXZWVrLFxuXHR9KSlcblxuXHR1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcblx0XHRvcGVuOiAoKSA9PiBzZXREaWFsb2dPcGVuKHRydWUpLFxuXHRcdGNsb3NlOiAoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKSxcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+XG5cdFx0XHRzZXRTZWxlY3RlZERheUV2ZW50cyhkYXlFdmVudHMpLFxuXHR9KSlcblxuXHQvLyBHZXQgc3RhcnQgZGF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9udGggdmlldyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuXHRjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cblx0Ly8gQ2FsY3VsYXRlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGNhbGVuZGFyIGdyaWQgY29ycmVjdGx5XG5cdC8vIEZpbmQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIChlLmcuIFN1bmRheSBvciBNb25kYXkpIHRoYXQgY29tZXMgYmVmb3JlIG9yIG9uIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoXG5cdGxldCBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGZpcnN0RGF5T2ZNb250aC5jbG9uZSgpXG5cdHdoaWxlIChhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5kYXkoKSAhPT0gZmlyc3REYXlPZldlZWspIHtcblx0XHRhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLnN1YnRyYWN0KDEsICdkYXknKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17c2V0RGlhbG9nT3Blbn0gb3Blbj17ZGlhbG9nT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtaC1bODB2aF0gbWF4LXctbWQgb3ZlcmZsb3cteS1hdXRvXCI+XG5cdFx0XHRcdDxEaWFsb2dIZWFkZXI+XG5cdFx0XHRcdFx0PERpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRGF5RXZlbnRzPy5kYXkuZm9ybWF0KCdNTU1NIEQsIFlZWVknKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHQ8L0RpYWxvZ0hlYWRlcj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJtdC00IHNwYWNlLXktM1wiPlxuXHRcdFx0XHRcdHtzZWxlY3RlZERheUV2ZW50cz8uZXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxEcmFnZ2FibGVFdmVudFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIG15LTEgaC1bMzBweF1cIiAvLyBVc2UgZXZlbnQgSUQgZm9yIHVuaXF1ZSBpZGVudGlmaWNhdGlvblxuXHRcdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17YGFsbC1ldmVudHMtZGlhbG9nLWV2ZW50LSQke2V2ZW50LmlkfWB9XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQ9e2V2ZW50fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17ZXZlbnQuaWR9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9EaWFsb2dDb250ZW50PlxuXHRcdDwvRGlhbG9nPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZURyYWdnYWJsZSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgdHlwZSB7IENTU1Byb3BlcnRpZXMgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBnZXRCb3JkZXJSYWRpdXNDbGFzcyA9IChcblx0aXNUcnVuY2F0ZWRTdGFydDogYm9vbGVhbixcblx0aXNUcnVuY2F0ZWRFbmQ6IGJvb2xlYW5cbikgPT4ge1xuXHRpZiAoaXNUcnVuY2F0ZWRTdGFydCAmJiBpc1RydW5jYXRlZEVuZCkge1xuXHRcdHJldHVybiAncm91bmRlZC1ub25lJ1xuXHR9XG5cdGlmIChpc1RydW5jYXRlZFN0YXJ0KSB7XG5cdFx0cmV0dXJuICdyb3VuZGVkLXItbWQgcm91bmRlZC1sLW5vbmUnXG5cdH1cblx0aWYgKGlzVHJ1bmNhdGVkRW5kKSB7XG5cdFx0cmV0dXJuICdyb3VuZGVkLWwtbWQgcm91bmRlZC1yLW5vbmUnXG5cdH1cblx0cmV0dXJuICdyb3VuZGVkLW1kJ1xufVxuXG5mdW5jdGlvbiBEcmFnZ2FibGVFdmVudFVubWVtb2l6ZWQoe1xuXHRlbGVtZW50SWQsXG5cdGV2ZW50LFxuXHRjbGFzc05hbWUsXG5cdHN0eWxlLFxuXHRkaXNhYmxlRHJhZyA9IGZhbHNlLFxufToge1xuXHRlbGVtZW50SWQ6IHN0cmluZ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0c3R5bGU/OiBDU1NQcm9wZXJ0aWVzXG5cdGV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGRpc2FibGVEcmFnPzogYm9vbGVhblxufSkge1xuXHRjb25zdCB7IG9uRXZlbnRDbGljaywgcmVuZGVyRXZlbnQsIGRpc2FibGVFdmVudENsaWNrLCBkaXNhYmxlRHJhZ0FuZERyb3AgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKHN0YXRlKSA9PiAoe1xuXHRcdFx0b25FdmVudENsaWNrOiBzdGF0ZS5vbkV2ZW50Q2xpY2ssXG5cdFx0XHRyZW5kZXJFdmVudDogc3RhdGUucmVuZGVyRXZlbnQsXG5cdFx0XHRkaXNhYmxlRXZlbnRDbGljazogc3RhdGUuZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3A6IHN0YXRlLmRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHR9KSlcblxuXHRjb25zdCB7IGF0dHJpYnV0ZXMsIGxpc3RlbmVycywgc2V0Tm9kZVJlZiwgaXNEcmFnZ2luZyB9ID0gdXNlRHJhZ2dhYmxlKHtcblx0XHRpZDogZWxlbWVudElkLFxuXHRcdGRhdGE6IHtcblx0XHRcdGV2ZW50LFxuXHRcdFx0dHlwZTogJ2NhbGVuZGFyLWV2ZW50Jyxcblx0XHR9LFxuXHRcdGRpc2FibGVkOiBkaXNhYmxlRHJhZyB8fCBkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdH0pXG5cblx0Ly8gRGVmYXVsdCBldmVudCBjb250ZW50IHRvIHJlbmRlciBpZiBjdXN0b20gcmVuZGVyRXZlbnQgaXMgbm90IHByb3ZpZGVkXG5cdGNvbnN0IERlZmF1bHRFdmVudENvbnRlbnQgPSAoKSA9PiB7XG5cdFx0Ly8gQ2hlY2sgaWYgdGhpcyBldmVudCBoYXMgdHJ1bmNhdGlvbiBpbmZvcm1hdGlvblxuXHRcdGNvbnN0IGVuaGFuY2VkRXZlbnQgPSBldmVudCBhcyB1bmtub3duIGFzIHtcblx0XHRcdGlzVHJ1bmNhdGVkU3RhcnQ/OiBib29sZWFuXG5cdFx0XHRpc1RydW5jYXRlZEVuZD86IGJvb2xlYW5cblx0XHR9XG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRTdGFydCA9IGVuaGFuY2VkRXZlbnQuaXNUcnVuY2F0ZWRTdGFydFxuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkRW5kID0gZW5oYW5jZWRFdmVudC5pc1RydW5jYXRlZEVuZFxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRldmVudC5iYWNrZ3JvdW5kQ29sb3IgfHwgJ2JnLWJsdWUtNTAwJyxcblx0XHRcdFx0XHRldmVudC5jb2xvciB8fCAndGV4dC13aGl0ZScsXG5cdFx0XHRcdFx0J2gtZnVsbCB3LWZ1bGwgcHgtMSBib3JkZXItWzEuNXB4XSBib3JkZXItY2FyZCB0ZXh0LWxlZnQgb3ZlcmZsb3ctY2xpcCByZWxhdGl2ZScsXG5cdFx0XHRcdFx0Z2V0Qm9yZGVyUmFkaXVzQ2xhc3MoaXNUcnVuY2F0ZWRTdGFydCwgaXNUcnVuY2F0ZWRFbmQpXG5cdFx0XHRcdCl9XG5cdFx0XHRcdHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogZXZlbnQuYmFja2dyb3VuZENvbG9yLCBjb2xvcjogZXZlbnQuY29sb3IgfX1cblx0XHRcdD5cblx0XHRcdFx0ey8qIExlZnQgY29udGludWF0aW9uIGluZGljYXRvciAqL31cblx0XHRcdFx0e2lzVHJ1bmNhdGVkU3RhcnQgJiYgKFxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgbGVmdC0wIHRvcC0wIGJvdHRvbS0wIHctMC41IGJnLWZvcmVncm91bmQvMjVcIj48L2Rpdj5cblx0XHRcdFx0KX1cblxuXHRcdFx0XHR7LyogRXZlbnQgdGl0bGUgKi99XG5cdFx0XHRcdDxwXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCd0ZXh0LVsxMHB4XSBmb250LXNlbWlib2xkIHNtOnRleHQteHMgbXQtMC41Jyxcblx0XHRcdFx0XHRcdC8vIEFkZCBzbGlnaHQgcGFkZGluZyB0byBhdm9pZCBvdmVybGFwIHdpdGggaW5kaWNhdG9yc1xuXHRcdFx0XHRcdFx0aXNUcnVuY2F0ZWRTdGFydCAmJiAncGwtMScsXG5cdFx0XHRcdFx0XHRpc1RydW5jYXRlZEVuZCAmJiAncHItMSdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e2V2ZW50LnRpdGxlfVxuXHRcdFx0XHQ8L3A+XG5cblx0XHRcdFx0ey8qIFJpZ2h0IGNvbnRpbnVhdGlvbiBpbmRpY2F0b3IgKi99XG5cdFx0XHRcdHtpc1RydW5jYXRlZEVuZCAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0wIHRvcC0wIGJvdHRvbS0wIHctMC41IGJnLWZvcmVncm91bmQvMjVcIj48L2Rpdj5cblx0XHRcdFx0KX1cblx0XHRcdDwvZGl2PlxuXHRcdClcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J3RydW5jYXRlIGgtZnVsbCB3LWZ1bGwnLFxuXHRcdFx0XHRkaXNhYmxlRHJhZyB8fCBkaXNhYmxlRHJhZ0FuZERyb3Bcblx0XHRcdFx0XHQ/IGRpc2FibGVFdmVudENsaWNrXG5cdFx0XHRcdFx0XHQ/ICdjdXJzb3ItZGVmYXVsdCdcblx0XHRcdFx0XHRcdDogJ2N1cnNvci1wb2ludGVyJ1xuXHRcdFx0XHRcdDogJ2N1cnNvci1ncmFiJyxcblx0XHRcdFx0aXNEcmFnZ2luZyAmJlxuXHRcdFx0XHRcdCEoZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wKSAmJlxuXHRcdFx0XHRcdCdjdXJzb3ItZ3JhYmJpbmcgc2hhZG93LWxnJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0bGF5b3V0PXt0cnVlfVxuXHRcdFx0bGF5b3V0SWQ9e2VsZW1lbnRJZH1cblx0XHRcdG9uQ2xpY2s9eyhlKSA9PiB7XG5cdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdFx0b25FdmVudENsaWNrKGV2ZW50KVxuXHRcdFx0fX1cblx0XHRcdHJlZj17c2V0Tm9kZVJlZn1cblx0XHRcdHN0eWxlPXtzdHlsZX1cblx0XHRcdHRyYW5zaXRpb25LZXk9e2VsZW1lbnRJZH1cblx0XHRcdHsuLi5hdHRyaWJ1dGVzfVxuXHRcdFx0ey4uLmxpc3RlbmVyc31cblx0XHQ+XG5cdFx0XHR7LyogVXNlIGN1c3RvbSByZW5kZXJFdmVudCBmcm9tIGNvbnRleHQgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlIGRlZmF1bHQgKi99XG5cdFx0XHR7cmVuZGVyRXZlbnQgPyByZW5kZXJFdmVudChldmVudCkgOiA8RGVmYXVsdEV2ZW50Q29udGVudCAvPn1cblx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgRHJhZ2dhYmxlRXZlbnQgPSBtZW1vKFxuXHREcmFnZ2FibGVFdmVudFVubWVtb2l6ZWQsXG5cdChwcmV2UHJvcHMsIG5leHRQcm9wcykgPT4ge1xuXHRcdC8vIENvbXBhcmUgdGhlIGVzc2VudGlhbCBwcm9wcyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcblx0XHRyZXR1cm4gKFxuXHRcdFx0cHJldlByb3BzLmVsZW1lbnRJZCA9PT0gbmV4dFByb3BzLmVsZW1lbnRJZCAmJlxuXHRcdFx0cHJldlByb3BzLmRpc2FibGVEcmFnID09PSBuZXh0UHJvcHMuZGlzYWJsZURyYWcgJiZcblx0XHRcdHByZXZQcm9wcy5jbGFzc05hbWUgPT09IG5leHRQcm9wcy5jbGFzc05hbWUgJiZcblx0XHRcdHByZXZQcm9wcy5ldmVudCA9PT0gbmV4dFByb3BzLmV2ZW50XG5cdFx0KVxuXHR9XG4pXG4iLAogICAgIi8vIG94bGludC1kaXNhYmxlIG5vLW5lZ2F0ZWQtY29uZGl0aW9uXG5cbmltcG9ydCB7IHVzZURyb3BwYWJsZSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgRElTQUJMRURfQ0VMTF9DTEFTU05BTUUgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgRHJvcHBhYmxlQ2VsbFByb3BzIHtcblx0aWQ6IHN0cmluZ1xuXHR0eXBlOiAnZGF5LWNlbGwnIHwgJ3RpbWUtY2VsbCdcblx0ZGF0ZTogZGF5anMuRGF5anNcblx0aG91cj86IG51bWJlclxuXHRtaW51dGU/OiBudW1iZXJcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRhbGxEYXk/OiBib29sZWFuXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xuXHRkaXNhYmxlZD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERyb3BwYWJsZUNlbGwoe1xuXHRpZCxcblx0dHlwZSxcblx0ZGF0ZSxcblx0aG91cixcblx0bWludXRlLFxuXHRyZXNvdXJjZUlkLFxuXHRhbGxEYXksXG5cdGNoaWxkcmVuLFxuXHRjbGFzc05hbWUsXG5cdHN0eWxlLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxuXHRkaXNhYmxlZCA9IGZhbHNlLFxufTogRHJvcHBhYmxlQ2VsbFByb3BzKSB7XG5cdGNvbnN0IHsgb25DZWxsQ2xpY2ssIGRpc2FibGVEcmFnQW5kRHJvcCwgZGlzYWJsZUNlbGxDbGljaywgY2xhc3Nlc092ZXJyaWRlIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChzdGF0ZSkgPT4gKHtcblx0XHRcdG9uQ2VsbENsaWNrOiBzdGF0ZS5vbkNlbGxDbGljayxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcDogc3RhdGUuZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljazogc3RhdGUuZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGNsYXNzZXNPdmVycmlkZTogc3RhdGUuY2xhc3Nlc092ZXJyaWRlLFxuXHRcdH0pKVxuXG5cdGNvbnN0IHsgaXNPdmVyLCBzZXROb2RlUmVmIH0gPSB1c2VEcm9wcGFibGUoe1xuXHRcdGlkLFxuXHRcdGRhdGE6IHtcblx0XHRcdHR5cGUsXG5cdFx0XHRkYXRlLFxuXHRcdFx0aG91cixcblx0XHRcdG1pbnV0ZSxcblx0XHRcdHJlc291cmNlSWQsXG5cdFx0XHRhbGxEYXksXG5cdFx0fSxcblx0XHRkaXNhYmxlZDogZGlzYWJsZURyYWdBbmREcm9wIHx8IGRpc2FibGVkLFxuXHR9KVxuXG5cdGNvbnN0IGhhbmRsZUNlbGxDbGljayA9IChlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXG5cdFx0aWYgKGRpc2FibGVDZWxsQ2xpY2sgfHwgZGlzYWJsZWQpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGNvbnN0IHN0YXJ0ID0gZGF0ZS5ob3VyKGhvdXIgPz8gMCkubWludXRlKG1pbnV0ZSA/PyAwKVxuXHRcdGxldCBlbmQgPSBzdGFydC5jbG9uZSgpXG5cdFx0aWYgKGhvdXIgIT09IHVuZGVmaW5lZCAmJiBtaW51dGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZW5kID0gZW5kLmhvdXIoaG91cikubWludXRlKG1pbnV0ZSArIDE1KSAvLyBkYXkgdmlldyB0aW1lIHNsb3RzIGFyZSAxNSBtaW51dGVzXG5cdFx0fSBlbHNlIGlmIChob3VyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGVuZCA9IGVuZC5ob3VyKGhvdXIgKyAxKS5taW51dGUoMCkgLy8gd2VlayB2aWV3IHRpbWUgc2xvdHMgYXJlIDEgaG91clxuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbmQgPSBlbmQuaG91cigyMykubWludXRlKDU5KSAvLyBtb250aCB2aWV3IGZ1bGwgZGF5XG5cdFx0fVxuXG5cdFx0b25DZWxsQ2xpY2soeyBzdGFydCwgZW5kLCByZXNvdXJjZUlkLCBhbGxEYXkgfSlcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0Ly8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHNcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZHJvcHBhYmxlLWNlbGwnLFxuXHRcdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRcdGlzT3ZlciAmJiAhZGlzYWJsZURyYWdBbmREcm9wICYmICFkaXNhYmxlZCAmJiAnYmctYWNjZW50Jyxcblx0XHRcdFx0ZGlzYWJsZUNlbGxDbGljayB8fCBkaXNhYmxlZCA/ICdjdXJzb3ItZGVmYXVsdCcgOiAnY3Vyc29yLXBvaW50ZXInLFxuXHRcdFx0XHRkaXNhYmxlZCAmJiAoY2xhc3Nlc092ZXJyaWRlPy5kaXNhYmxlZENlbGwgfHwgRElTQUJMRURfQ0VMTF9DTEFTU05BTUUpXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG5cdFx0XHRvbkNsaWNrPXtoYW5kbGVDZWxsQ2xpY2t9XG5cdFx0XHRyZWY9e3NldE5vZGVSZWZ9XG5cdFx0XHRzdHlsZT17c3R5bGV9XG5cdFx0PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgUmVzb3VyY2VDZWxsUHJvcHMge1xuXHRyZXNvdXJjZTogUmVzb3VyY2Vcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlQ2VsbDogUmVhY3QuRkM8UmVzb3VyY2VDZWxsUHJvcHM+ID0gKHtcblx0cmVzb3VyY2UsXG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG59KSA9PiB7XG5cdGNvbnN0IHsgcmVuZGVyUmVzb3VyY2UgfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG5cdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRjb2xvcjogcmVzb3VyY2UuY29sb3IsXG5cdFx0XHRcdGJhY2tncm91bmRDb2xvcjogcmVzb3VyY2UuYmFja2dyb3VuZENvbG9yLFxuXHRcdFx0fX1cblx0XHQ+XG5cdFx0XHR7cmVuZGVyUmVzb3VyY2Vcblx0XHRcdFx0PyByZW5kZXJSZXNvdXJjZShyZXNvdXJjZSlcblx0XHRcdFx0OiAoY2hpbGRyZW4gPz8gKFxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRydW5jYXRlXCI+e3Jlc291cmNlLnRpdGxlfTwvZGl2PlxuXHRcdFx0XHRcdCkpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgeyB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWRXZWVrRXZlbnRzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBFVkVOVF9CQVJfSEVJR0hUIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJQcm9wcyB7XG5cdGRheXM6IGRheWpzLkRheWpzW11cblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdGFsbERheT86IGJvb2xlYW5cbn1cblxuY29uc3QgTm9NZW1vSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllcjogUmVhY3QuRkM8XG5cdEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJQcm9wc1xuPiA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHJlc291cmNlSWQsXG5cdGRheU51bWJlckhlaWdodCxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcblx0YWxsRGF5LFxufSkgPT4ge1xuXHRjb25zdCB3ZWVrU3RhcnQgPSBkYXlzLmF0KDApLnN0YXJ0T2YoJ2RheScpXG5cblx0Y29uc3QgcHJvY2Vzc2VkV2Vla0V2ZW50cyA9IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMoe1xuXHRcdGRheXMsXG5cdFx0Z3JpZFR5cGUsXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRkYXlOdW1iZXJIZWlnaHQsXG5cdFx0YWxsRGF5LFxuXHR9KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBwb2ludGVyLWV2ZW50cy1ub25lIHotMTAgb3ZlcmZsb3ctY2xpcFwiXG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHQ+XG5cdFx0XHR7cHJvY2Vzc2VkV2Vla0V2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50S2V5ID0gYCR7ZXZlbnQuaWR9LSR7ZXZlbnQucG9zaXRpb259LSR7d2Vla1N0YXJ0LnRvSVNPU3RyaW5nKCl9LSR7cmVzb3VyY2VJZCA/PyAnbm8tcmVzb3VyY2UnfWBcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImFic29sdXRlIHotMTAgcG9pbnRlci1ldmVudHMtYXV0byBvdmVyZmxvdy1jbGlwXCJcblx0XHRcdFx0XHRcdGRhdGEtbGVmdD17ZXZlbnQubGVmdH1cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgaG9yaXpvbnRhbC1ldmVudC0ke2V2ZW50LmlkfWB9XG5cdFx0XHRcdFx0XHRkYXRhLXRvcD17ZXZlbnQudG9wfVxuXHRcdFx0XHRcdFx0ZGF0YS13aWR0aD17ZXZlbnQud2lkdGh9XG5cdFx0XHRcdFx0XHRrZXk9e2Ake2V2ZW50S2V5fS13cmFwcGVyYH1cblx0XHRcdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0XHRcdGxlZnQ6IGBjYWxjKCR7ZXZlbnQubGVmdH0lICsgdmFyKC0tc3BhY2luZykgKiAwLjI1KWAsXG5cdFx0XHRcdFx0XHRcdHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDEpYCxcblx0XHRcdFx0XHRcdFx0dG9wOiBgJHtldmVudC50b3B9cHhgLFxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IGAke0VWRU5UX0JBUl9IRUlHSFR9cHhgLFxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8RHJhZ2dhYmxlRXZlbnRcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC1mdWxsIHctZnVsbCBzaGFkb3dcIlxuXHRcdFx0XHRcdFx0XHRlbGVtZW50SWQ9e2V2ZW50S2V5fVxuXHRcdFx0XHRcdFx0XHRldmVudD17ZXZlbnR9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllciA9IG1lbW8oTm9NZW1vSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllcilcbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBnZXRQb3NpdGlvbmVkRXZlbnRzIH0gZnJvbSAnQC9saWIvdXRpbHMvcG9zaXRpb24td2Vlay1ldmVudHMnXG5cbmludGVyZmFjZSBVc2VQcm9jZXNzZWRXZWVrRXZlbnRzUHJvcHMge1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdXG5cdGFsbERheT86IGJvb2xlYW5cblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xufVxuXG5leHBvcnQgY29uc3QgdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGFsbERheSxcblx0ZGF5TnVtYmVySGVpZ2h0LFxuXHRyZXNvdXJjZUlkLFxuXHRncmlkVHlwZSxcbn06IFVzZVByb2Nlc3NlZFdlZWtFdmVudHNQcm9wcykgPT4ge1xuXHRjb25zdCB7XG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGRheU1heEV2ZW50cyxcblx0XHRldmVudFNwYWNpbmcsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoc3RhdGUpID0+ICh7XG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiBzdGF0ZS5nZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0ZGF5TWF4RXZlbnRzOiBzdGF0ZS5kYXlNYXhFdmVudHMsXG5cdFx0ZXZlbnRTcGFjaW5nOiBzdGF0ZS5ldmVudFNwYWNpbmcsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2U6IHN0YXRlLmdldEV2ZW50c0ZvclJlc291cmNlLFxuXHR9KSlcblxuXHRjb25zdCB3ZWVrU3RhcnQgPSBkYXlzLmF0KDApLnN0YXJ0T2YoJ2RheScpXG5cdGNvbnN0IHdlZWtFbmQgPSBkYXlzLmF0KC0xKS5lbmRPZignZGF5JylcblxuXHRjb25zdCBldmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRsZXQgd2Vla0V2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZSh3ZWVrU3RhcnQsIHdlZWtFbmQpXG5cdFx0aWYgKHJlc291cmNlSWQpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlRXZlbnRzID0gZ2V0RXZlbnRzRm9yUmVzb3VyY2UocmVzb3VyY2VJZClcblx0XHRcdHdlZWtFdmVudHMgPSB3ZWVrRXZlbnRzLmZpbHRlcigoZXZlbnQpID0+XG5cdFx0XHRcdHJlc291cmNlRXZlbnRzLnNvbWUoKGUpID0+IFN0cmluZyhlLmlkKSA9PT0gU3RyaW5nKGV2ZW50LmlkKSlcblx0XHRcdClcblx0XHR9XG5cblx0XHRpZiAoYWxsRGF5KSB7XG5cdFx0XHR3ZWVrRXZlbnRzID0gd2Vla0V2ZW50cy5maWx0ZXIoKGUpID0+ICEhZS5hbGxEYXkgPT09IGFsbERheSlcblx0XHR9XG5cblx0XHRyZXR1cm4gd2Vla0V2ZW50c1xuXHR9LCBbXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdHdlZWtTdGFydCxcblx0XHR3ZWVrRW5kLFxuXHRcdHJlc291cmNlSWQsXG5cdFx0YWxsRGF5LFxuXHRdKVxuXG5cdC8vIEdldCBhbGwgZXZlbnRzIHRoYXQgaW50ZXJzZWN0IHdpdGggdGhpcyB3ZWVrXG5cdGNvbnN0IHBvc2l0aW9uZWRFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRyZXR1cm4gZ2V0UG9zaXRpb25lZEV2ZW50cyh7XG5cdFx0XHRkYXlzLFxuXHRcdFx0ZXZlbnRzLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZGF5TnVtYmVySGVpZ2h0LFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0Z3JpZFR5cGUsXG5cdFx0fSlcblx0fSwgW2RheXMsIGRheU1heEV2ZW50cywgZGF5TnVtYmVySGVpZ2h0LCBldmVudFNwYWNpbmcsIGV2ZW50cywgZ3JpZFR5cGVdKVxuXG5cdHJldHVybiBwb3NpdGlvbmVkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7XG5cdERBWV9OVU1CRVJfSEVJR0hULFxuXHRFVkVOVF9CQVJfSEVJR0hULFxuXHRHQVBfQkVUV0VFTl9FTEVNRU5UUyxcbn0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuXG5pbnRlcmZhY2UgUG9zaXRpb25lZEV2ZW50IGV4dGVuZHMgQ2FsZW5kYXJFdmVudCB7XG5cdGxlZnQ6IG51bWJlciAvLyBMZWZ0IHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0d2lkdGg6IG51bWJlciAvLyBXaWR0aCBpbiBwZXJjZW50YWdlXG5cdHRvcDogbnVtYmVyIC8vIFRvcCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdGhlaWdodDogbnVtYmVyIC8vIEhlaWdodCBpbiBwZXJjZW50YWdlXG5cdHBvc2l0aW9uOiBudW1iZXIgLy8gUG9zaXRpb24gaW4gdGhlIHJvdyAoMCBmb3IgZmlyc3QsIDEgZm9yIHNlY29uZCwgZXRjLilcblx0aXNUcnVuY2F0ZWRTdGFydDogYm9vbGVhbiAvLyBXaGV0aGVyIHRoZSBldmVudCBpcyB0cnVuY2F0ZWQgYXQgdGhlIHN0YXJ0XG5cdGlzVHJ1bmNhdGVkRW5kOiBib29sZWFuIC8vIFdoZXRoZXIgdGhlIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgZW5kXG59XG5cbmludGVyZmFjZSBHZXRQb3NpdGlvbmVkRXZlbnRzUHJvcHMge1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInIC8vIEZ1dHVyZSB1c2UgZm9yIGRpZmZlcmVudCBncmlkIHR5cGVzXG5cdGV2ZW50U3BhY2luZz86IG51bWJlciAvLyBDdXN0b20gdmVydGljYWwgc3BhY2luZyBiZXR3ZWVuIGV2ZW50cyAoZGVmYXVsdHMgdG8gR0FQX0JFVFdFRU5fRUxFTUVOVFMpXG59XG5cbmV4cG9ydCBjb25zdCBnZXRQb3NpdGlvbmVkRXZlbnRzID0gKHtcblx0ZGF5cyxcblx0ZXZlbnRzLFxuXHRkYXlNYXhFdmVudHMsXG5cdGRheU51bWJlckhlaWdodCA9IERBWV9OVU1CRVJfSEVJR0hULFxuXHRncmlkVHlwZSA9ICdkYXknLFxuXHRldmVudFNwYWNpbmcgPSBHQVBfQkVUV0VFTl9FTEVNRU5UUyxcbn06IEdldFBvc2l0aW9uZWRFdmVudHNQcm9wcykgPT4ge1xuXHQvLyBGb3IgaG91ci1iYXNlZCBncmlkcywgdXNlIGFjdHVhbCBmaXJzdC9sYXN0IGhvdXJzIGZyb20gZGF5cyBhcnJheVxuXHQvLyBGb3IgZGF5LWJhc2VkIGdyaWRzLCB1c2Ugc3RhcnQvZW5kIG9mIGRheSB0byBjYXB0dXJlIGFsbCBldmVudHNcblx0Y29uc3QgZmlyc3REYXkgPVxuXHRcdGdyaWRUeXBlID09PSAnaG91cicgPyBkYXlzLmF0KDApLnN0YXJ0T2YoJ2hvdXInKSA6IGRheXMuYXQoMCkuc3RhcnRPZignZGF5Jylcblx0Y29uc3QgbGFzdERheSA9XG5cdFx0Z3JpZFR5cGUgPT09ICdob3VyJyA/IGRheXMuYXQoLTEpLmVuZE9mKCdob3VyJykgOiBkYXlzLmF0KC0xKS5lbmRPZignZGF5Jylcblx0Y29uc3QgZGF5Q291bnQgPSBkYXlzLmxlbmd0aFxuXG5cdC8vIFNlcGFyYXRlIG11bHRpLWRheSBhbmQgc2luZ2xlLWRheSBldmVudHNcblx0Y29uc3QgbXVsdGlEYXlFdmVudHMgPSBldmVudHMuZmlsdGVyKChlKSA9PiBlLmVuZC5kaWZmKGUuc3RhcnQsIGdyaWRUeXBlKSA+IDApXG5cdGNvbnN0IHNpbmdsZURheUV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoXG5cdFx0KGUpID0+IGUuZW5kLmRpZmYoZS5zdGFydCwgZ3JpZFR5cGUpID09PSAwXG5cdClcblxuXHQvLyBTb3J0IG11bHRpLWRheSBldmVudHMgYnkgc3RhcnQgZGF0ZSwgdGhlbiBieSBkdXJhdGlvblxuXHRjb25zdCBzb3J0ZWRNdWx0aURheSA9IFsuLi5tdWx0aURheUV2ZW50c10uc29ydCgoYSwgYikgPT4ge1xuXHRcdGNvbnN0IHN0YXJ0RGlmZiA9IGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuXHRcdGlmIChzdGFydERpZmYgIT09IDApIHtcblx0XHRcdHJldHVybiBzdGFydERpZmZcblx0XHR9XG5cdFx0cmV0dXJuIGIuZW5kLmRpZmYoYi5zdGFydCkgLSBhLmVuZC5kaWZmKGEuc3RhcnQpIC8vIExvbmdlciBldmVudHMgZmlyc3Rcblx0fSlcblxuXHQvLyBTb3J0IHNpbmdsZS1kYXkgZXZlbnRzIGJ5IHN0YXJ0IHRpbWVcblx0Y29uc3Qgc29ydGVkU2luZ2xlRGF5ID0gWy4uLnNpbmdsZURheUV2ZW50c10uc29ydCgoYSwgYikgPT5cblx0XHRhLnN0YXJ0LmRpZmYoYi5zdGFydClcblx0KVxuXG5cdC8vIENyZWF0ZSBkYXlDb3VudCB4IGRheU1heEV2ZW50cyBncmlkIHdpdGggZmxhZ3Ncblx0Y29uc3QgZ3JpZDogeyB0YWtlbjogYm9vbGVhbjsgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsIH1bXVtdID0gW11cblx0Zm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuXHRcdGdyaWRbcm93XSA9IFtdXG5cdFx0Zm9yIChsZXQgY29sID0gMDsgY29sIDwgZGF5Q291bnQ7IGNvbCsrKSB7XG5cdFx0XHRncmlkW3Jvd11bY29sXSA9IHsgdGFrZW46IGZhbHNlLCBldmVudDogbnVsbCB9XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgcHJvY2Vzc2VkRXZlbnRzOiBQb3NpdGlvbmVkRXZlbnRbXSA9IFtdXG5cblx0Ly8gU3RlcCAxOiBBc3NpZ24gcG9zaXRpb25zIHRvIG11bHRpLWRheSBldmVudHMgZmlyc3Rcblx0Zm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRNdWx0aURheSkge1xuXHRcdGNvbnN0IGV2ZW50U3RhcnQgPSBkYXlqcy5tYXgoZXZlbnQuc3RhcnQuc3RhcnRPZihncmlkVHlwZSksIGZpcnN0RGF5KVxuXHRcdGNvbnN0IGFkanVzdGVkRW5kID1cblx0XHRcdGdyaWRUeXBlID09PSAnaG91cicgPyBldmVudC5lbmQuc3VidHJhY3QoMSwgJ21pbnV0ZScpIDogZXZlbnQuZW5kXG5cdFx0Y29uc3QgZXZlbnRFbmQgPSBkYXlqcy5taW4oYWRqdXN0ZWRFbmQuc3RhcnRPZihncmlkVHlwZSksIGxhc3REYXkpXG5cdFx0Y29uc3Qgc3RhcnRDb2wgPSBNYXRoLm1heCgwLCBldmVudFN0YXJ0LmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblx0XHRjb25zdCBlbmRDb2wgPSBNYXRoLm1pbihkYXlDb3VudCAtIDEsIGV2ZW50RW5kLmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblxuXHRcdC8vIERldGVjdCBpZiBldmVudCBpcyB0cnVuY2F0ZWQgYXQgdGhlIGJvdW5kYXJpZXNcblx0XHRjb25zdCBpc1RydW5jYXRlZFN0YXJ0ID0gZXZlbnQuc3RhcnQuc3RhcnRPZihncmlkVHlwZSkuaXNCZWZvcmUoZmlyc3REYXkpXG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRFbmQgPSBldmVudC5lbmQuc3RhcnRPZihncmlkVHlwZSkuaXNBZnRlcihsYXN0RGF5KVxuXG5cdFx0Ly8gVHJ5IHRvIHBsYWNlIHRoZSBldmVudCBzdGFydGluZyBmcm9tIGl0cyBvcmlnaW5hbCBzdGFydCBjb2x1bW5cblx0XHRsZXQgcGxhY2VkU3VjY2Vzc2Z1bGx5ID0gZmFsc2VcblxuXHRcdC8vIEZpcnN0IHRyeTogcGxhY2UgZnJvbSBvcmlnaW5hbCBzdGFydCBwb3NpdGlvblxuXHRcdGxldCBhc3NpZ25lZFJvdyA9IC0xXG5cdFx0Zm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuXHRcdFx0bGV0IGNhblBsYWNlID0gdHJ1ZVxuXHRcdFx0Zm9yIChsZXQgY29sID0gc3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG5cdFx0XHRcdGlmIChncmlkW3Jvd11bY29sXS50YWtlbikge1xuXHRcdFx0XHRcdGNhblBsYWNlID0gZmFsc2Vcblx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoY2FuUGxhY2UpIHtcblx0XHRcdFx0YXNzaWduZWRSb3cgPSByb3dcblx0XHRcdFx0YnJlYWtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBmb3VuZCBhIHJvdywgYXNzaWduIHRoZSBldmVudCB0byBhbGwgaXRzIGNvbHVtbnNcblx0XHRpZiAoYXNzaWduZWRSb3cgIT09IC0xKSB7XG5cdFx0XHRmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdFx0Z3JpZFthc3NpZ25lZFJvd11bY29sXSA9IHsgdGFrZW46IHRydWUsIGV2ZW50IH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQ3JlYXRlIHBvc2l0aW9uIGRhdGEgZm9yIHJlbmRlcmluZ1xuXHRcdFx0Y29uc3Qgc3BhbkRheXMgPSBlbmRDb2wgLSBzdGFydENvbCArIDFcblx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcblx0XHRcdFx0bGVmdDogKHN0YXJ0Q29sIC8gZGF5Q291bnQpICogMTAwLFxuXHRcdFx0XHR3aWR0aDogKHNwYW5EYXlzIC8gZGF5Q291bnQpICogMTAwLFxuXHRcdFx0XHR0b3A6XG5cdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0ICtcblx0XHRcdFx0XHRldmVudFNwYWNpbmcgK1xuXHRcdFx0XHRcdGFzc2lnbmVkUm93ICogKEVWRU5UX0JBUl9IRUlHSFQgKyBldmVudFNwYWNpbmcpLFxuXHRcdFx0XHRoZWlnaHQ6IEVWRU5UX0JBUl9IRUlHSFQsXG5cdFx0XHRcdHBvc2l0aW9uOiBhc3NpZ25lZFJvdyxcblx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdGlzVHJ1bmNhdGVkU3RhcnQsXG5cdFx0XHRcdGlzVHJ1bmNhdGVkRW5kLFxuXHRcdFx0fSBhcyBQb3NpdGlvbmVkRXZlbnQpXG5cdFx0XHRwbGFjZWRTdWNjZXNzZnVsbHkgPSB0cnVlXG5cdFx0fVxuXG5cdFx0Ly8gSWYgY291bGRuJ3QgcGxhY2UgYXQgb3JpZ2luYWwgcG9zaXRpb24sIHRyeSB0cnVuY2F0ZWQgdmVyc2lvbnMgc3RhcnRpbmcgZnJvbSBsYXRlciBkYXlzXG5cdFx0aWYgKCFwbGFjZWRTdWNjZXNzZnVsbHkpIHtcblx0XHRcdGZvciAoXG5cdFx0XHRcdGxldCB0cnlTdGFydENvbCA9IHN0YXJ0Q29sICsgMTtcblx0XHRcdFx0dHJ5U3RhcnRDb2wgPD0gZW5kQ29sO1xuXHRcdFx0XHR0cnlTdGFydENvbCsrXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gVHJ5IHRvIHBsYWNlIHRoZSB0cnVuY2F0ZWQgZXZlbnQgc3RhcnRpbmcgZnJvbSB0aGlzIGNvbHVtblxuXHRcdFx0XHRsZXQgdHJ1bmNhdGVkQXNzaWduZWRSb3cgPSAtMVxuXHRcdFx0XHRmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG5cdFx0XHRcdFx0bGV0IGNhblBsYWNlID0gdHJ1ZVxuXHRcdFx0XHRcdGZvciAobGV0IGNvbCA9IHRyeVN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuXHRcdFx0XHRcdFx0aWYgKGdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG5cdFx0XHRcdFx0XHRcdGNhblBsYWNlID0gZmFsc2Vcblx0XHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGNhblBsYWNlKSB7XG5cdFx0XHRcdFx0XHR0cnVuY2F0ZWRBc3NpZ25lZFJvdyA9IHJvd1xuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB3ZSBmb3VuZCBhIHJvdyBmb3IgdGhlIHRydW5jYXRlZCB2ZXJzaW9uLCBwbGFjZSBpdFxuXHRcdFx0XHRpZiAodHJ1bmNhdGVkQXNzaWduZWRSb3cgIT09IC0xKSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgY29sID0gdHJ5U3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG5cdFx0XHRcdFx0XHRncmlkW3RydW5jYXRlZEFzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIENyZWF0ZSBwb3NpdGlvbiBkYXRhIGZvciB0aGUgdHJ1bmNhdGVkIHJlbmRlcmluZ1xuXHRcdFx0XHRcdGNvbnN0IHRydW5jYXRlZFNwYW5EYXlzID0gZW5kQ29sIC0gdHJ5U3RhcnRDb2wgKyAxXG5cdFx0XHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuXHRcdFx0XHRcdFx0bGVmdDogKHRyeVN0YXJ0Q29sIC8gZGF5Q291bnQpICogMTAwLFxuXHRcdFx0XHRcdFx0d2lkdGg6ICh0cnVuY2F0ZWRTcGFuRGF5cyAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdFx0XHRcdHRvcDpcblx0XHRcdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0ICtcblx0XHRcdFx0XHRcdFx0ZXZlbnRTcGFjaW5nICtcblx0XHRcdFx0XHRcdFx0dHJ1bmNhdGVkQXNzaWduZWRSb3cgKiAoRVZFTlRfQkFSX0hFSUdIVCArIGV2ZW50U3BhY2luZyksXG5cdFx0XHRcdFx0XHRoZWlnaHQ6IEVWRU5UX0JBUl9IRUlHSFQsXG5cdFx0XHRcdFx0XHRwb3NpdGlvbjogdHJ1bmNhdGVkQXNzaWduZWRSb3csXG5cdFx0XHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0XHRcdGlzVHJ1bmNhdGVkU3RhcnQ6IHRydWUsIC8vIEFsd2F5cyB0cnVuY2F0ZWQgYXQgc3RhcnQgd2hlbiB1c2luZyB0aGlzIGZhbGxiYWNrIGxvZ2ljXG5cdFx0XHRcdFx0XHRpc1RydW5jYXRlZEVuZCxcblx0XHRcdFx0XHR9IGFzIFBvc2l0aW9uZWRFdmVudClcblx0XHRcdFx0XHRwbGFjZWRTdWNjZXNzZnVsbHkgPSB0cnVlXG5cdFx0XHRcdFx0YnJlYWsgLy8gU3VjY2Vzc2Z1bGx5IHBsYWNlZCwgc3RvcCB0cnlpbmcgb3RoZXIgc3RhcnQgcG9zaXRpb25zXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTdGVwIDI6IEZpbGwgZ2FwcyB3aXRoIHNpbmdsZS1kYXkgZXZlbnRzXG5cdGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkU2luZ2xlRGF5KSB7XG5cdFx0Y29uc3QgZXZlbnRTdGFydCA9IGRheWpzLm1heChldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKSwgZmlyc3REYXkpXG5cdFx0Ly8gQ2xhbXAgY29sIHRvIHZhbGlkIGdyaWQgYm91bmRzIHRvIHByZXZlbnQgYWNjZXNzaW5nIHVuZGVmaW5lZCBncmlkIHBvc2l0aW9uc1xuXHRcdGNvbnN0IGNvbCA9IE1hdGgubWF4KFxuXHRcdFx0MCxcblx0XHRcdE1hdGgubWluKGRheUNvdW50IC0gMSwgZXZlbnRTdGFydC5kaWZmKGZpcnN0RGF5LCBncmlkVHlwZSkpXG5cdFx0KVxuXG5cdFx0Ly8gU2luZ2xlLWRheSBldmVudHMgYXJlIG5vdCB0cnVuY2F0ZWQgYnkgZGVmaW5pdGlvblxuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBmYWxzZVxuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkRW5kID0gZmFsc2VcblxuXHRcdC8vIEZpbmQgdGhlIGZpcnN0IGF2YWlsYWJsZSByb3cgaW4gdGhpcyBjb2x1bW5cblx0XHRsZXQgYXNzaWduZWRSb3cgPSAtMVxuXHRcdGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGRheU1heEV2ZW50czsgcm93KyspIHtcblx0XHRcdGlmICghZ3JpZFtyb3ddW2NvbF0udGFrZW4pIHtcblx0XHRcdFx0YXNzaWduZWRSb3cgPSByb3dcblx0XHRcdFx0YnJlYWtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBmb3VuZCBhIHJvdywgYXNzaWduIHRoZSBldmVudFxuXHRcdGlmIChhc3NpZ25lZFJvdyAhPT0gLTEpIHtcblx0XHRcdGdyaWRbYXNzaWduZWRSb3ddW2NvbF0gPSB7IHRha2VuOiB0cnVlLCBldmVudCB9XG5cblx0XHRcdC8vIENyZWF0ZSBwb3NpdGlvbiBkYXRhIGZvciByZW5kZXJpbmdcblx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcblx0XHRcdFx0bGVmdDogKGNvbCAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdFx0d2lkdGg6ICgxIC8gZGF5Q291bnQpICogMTAwLFxuXHRcdFx0XHR0b3A6XG5cdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0ICtcblx0XHRcdFx0XHRldmVudFNwYWNpbmcgK1xuXHRcdFx0XHRcdGFzc2lnbmVkUm93ICogKEVWRU5UX0JBUl9IRUlHSFQgKyBldmVudFNwYWNpbmcpLFxuXHRcdFx0XHRoZWlnaHQ6IEVWRU5UX0JBUl9IRUlHSFQsXG5cdFx0XHRcdHBvc2l0aW9uOiBhc3NpZ25lZFJvdyxcblx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdGlzVHJ1bmNhdGVkU3RhcnQsXG5cdFx0XHRcdGlzVHJ1bmNhdGVkRW5kLFxuXHRcdFx0fSBhcyBQb3NpdGlvbmVkRXZlbnQpXG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHByb2Nlc3NlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgQWxsRGF5Q2VsbFByb3BzIHtcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IE5vTWVtb0FsbERheUNlbGw6IFJlYWN0LkZDPEFsbERheUNlbGxQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuXHRjb25zdCB7IHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChzdGF0ZSkgPT4gKHsgdDogc3RhdGUudCB9KSlcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQndy0xNiBib3JkZXItciBzaHJpbmstMCBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBzbTp0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHR7dCgnYWxsRGF5Jyl9XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEFsbERheUNlbGwgPSBtZW1vKE5vTWVtb0FsbERheUNlbGwpXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBHcmlkQ2VsbCB9IGZyb20gJy4uL2dyaWQtY2VsbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyIH0gZnJvbSAnLi92ZXJ0aWNhbC1ncmlkLWV2ZW50cy1sYXllcidcblxuZXhwb3J0IGludGVyZmFjZSBWZXJ0aWNhbEdyaWRDb2xQcm9wcyB7XG5cdGlkOiBzdHJpbmdcblx0ZGF5OiBkYXlqcy5EYXlqc1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdHJlc291cmNlPzogUmVzb3VyY2Vcblx0ZGF5czogZGF5anMuRGF5anNbXSAvLyBUaGUgc3BlY2lmaWMgZGF5IHRoaXMgY29sdW1uIHJlcHJlc2VudHNcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRyZW5kZXJIZWFkZXI/OiAoKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0cmVuZGVyQ2VsbD86IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdG5vRXZlbnRzPzogYm9vbGVhblxuXHQvKiogT3B0aW9uYWwgYXJyYXkgb2YgbWludXRlIHNsb3RzIGJ5IHdoaWNoIHRoZSBob3VyIGlzIGRpdmlkZWRcblx0ICogZS5nLiwgWzAsIDE1LCAzMCwgNDVdIGZvciBxdWFydGVyLWhvdXIgc2xvdHNcblx0ICovXG5cdGNlbGxTbG90cz86IG51bWJlcltdXG5cdC8qKiBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgY29sdW1uIGluIHRoZSBncmlkICovXG5cdGlzTGFzdENvbHVtbj86IGJvb2xlYW5cbn1cblxuY29uc3QgTm9NZW1vVmVydGljYWxHcmlkQ29sOiBSZWFjdC5GQzxWZXJ0aWNhbEdyaWRDb2xQcm9wcz4gPSAoe1xuXHRpZCxcblx0ZGF5cyxcblx0cmVzb3VyY2VJZCxcblx0cmVzb3VyY2UsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG5cdGdyaWRUeXBlLFxuXHRjbGFzc05hbWUsXG5cdHJlbmRlckNlbGwsXG5cdG5vRXZlbnRzLFxuXHRjZWxsU2xvdHMgPSBbNjBdLCAvLyBEZWZhdWx0IHRvIGZ1bGwgaG91ciBzbG90c1xuXHRpc0xhc3RDb2x1bW4sXG59KSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggZmxleC1jb2wgZmxleC0xIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtaW4tdy01MCBiZy1iYWNrZ3JvdW5kIHJlbGF0aXZlJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWQgfHwgYHZlcnRpY2FsLWNvbC0ke2lkfWB9XG5cdFx0PlxuXHRcdFx0ey8qIFRpbWUgc2xvdHMgKi99XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCByZWxhdGl2ZSBncmlkXCJcblx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRncmlkVGVtcGxhdGVSb3dzOiBgcmVwZWF0KCR7ZGF5cy5sZW5ndGh9LCBtaW5tYXgoMCwgMWZyKSlgLFxuXHRcdFx0XHR9fVxuXHRcdFx0PlxuXHRcdFx0XHR7ZGF5cy5tYXAoKGRheSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGhvdXJTdHIgPSBkYXkuZm9ybWF0KCdISCcpXG5cdFx0XHRcdFx0Y29uc3QgZGF0ZVN0ciA9IGRheS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXG5cdFx0XHRcdFx0aWYgKHJlbmRlckNlbGwpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHRlc3RJZCA9XG5cdFx0XHRcdFx0XHRcdGlkID09PSAndGltZS1jb2wnXG5cdFx0XHRcdFx0XHRcdFx0PyBgdmVydGljYWwtdGltZS0ke2hvdXJTdHJ9YFxuXHRcdFx0XHRcdFx0XHRcdDogYHZlcnRpY2FsLWNlbGwtJHtkYXRlU3RyfS0ke2hvdXJTdHJ9LTAwJHtyZXNvdXJjZUlkID8gYC0ke3Jlc291cmNlSWR9YCA6ICcnfWBcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLVs2MHB4XSBib3JkZXItYiBib3JkZXItclwiXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e3Rlc3RJZH1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2Ake2RhdGVTdHJ9LSR7aG91clN0cn1gfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e3JlbmRlckNlbGwoZGF5KX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGNlbGxTbG90cy5tYXAoKG1pbnV0ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgbSA9IG1pbnV0ZSA9PT0gNjAgPyB1bmRlZmluZWQgOiBtaW51dGVcblx0XHRcdFx0XHRcdGNvbnN0IG1tID0gbSA9PT0gdW5kZWZpbmVkID8gJzAwJyA6IFN0cmluZyhtKS5wYWRTdGFydCgyLCAnMCcpXG5cdFx0XHRcdFx0XHRjb25zdCB0ZXN0SWQgPSBgdmVydGljYWwtY2VsbC0ke2RhdGVTdHJ9LSR7aG91clN0cn0tJHttbX0ke3Jlc291cmNlSWQgPyBgLSR7cmVzb3VyY2VJZH1gIDogJyd9YFxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J2hvdmVyOmJnLWFjY2VudCByZWxhdGl2ZSB6LTEwIGgtWzYwcHhdIGN1cnNvci1wb2ludGVyIGJvcmRlci1iJyxcblx0XHRcdFx0XHRcdFx0XHRcdG1pbnV0ZSA9PT0gNjAgPyAnJyA6ICdib3JkZXItZGFzaGVkIGgtWzE1cHhdIG1pbi1oLVsxNXB4XScsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RDb2x1bW4gPyAnYm9yZGVyLXItMCcgOiAnYm9yZGVyLXInXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17dGVzdElkfVxuXHRcdFx0XHRcdFx0XHRcdGRheT17bSA/IGRheS5taW51dGUobSkgOiBkYXl9XG5cdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdGhvdXI9e2RheS5ob3VyKCl9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtkYXRlU3RyfS0ke2hvdXJTdHJ9LSR7bW19LSR7cmVzb3VyY2VJZCB8fCAnbm8tcmVzb3VyY2UnfWB9XG5cdFx0XHRcdFx0XHRcdFx0bWludXRlPXttfVxuXHRcdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlSWR9IC8vIEV2ZW50cyBhcmUgcmVuZGVyZWQgaW4gYSBzZXBhcmF0ZSBsYXllclxuXHRcdFx0XHRcdFx0XHRcdHNob3VsZFJlbmRlckV2ZW50cz17ZmFsc2V9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSl9XG5cblx0XHRcdFx0ey8qIEV2ZW50IGJsb2NrcyBsYXllciAqL31cblx0XHRcdFx0eyFub0V2ZW50cyAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuXHRcdFx0XHRcdFx0PFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgdmVydGljYWwtZXZlbnRzLSR7aWR9YH1cblx0XHRcdFx0XHRcdFx0ZGF5cz17ZGF5c31cblx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlSWR9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsR3JpZENvbCA9IG1lbW8oXG5cdE5vTWVtb1ZlcnRpY2FsR3JpZENvbFxuKSBhcyB0eXBlb2YgTm9NZW1vVmVydGljYWxHcmlkQ29sXG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEN1cnJlbnRUaW1lSW5kaWNhdG9yIH0gZnJvbSAnQC9jb21wb25lbnRzL2N1cnJlbnQtdGltZS1pbmRpY2F0b3InXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHsgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyUHJvcHMge1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdGRheXM6IGRheWpzLkRheWpzW10gLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGxheWVyIHJlcHJlc2VudHNcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRyZXNvdXJjZT86IFJlc291cmNlXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcbn1cblxuY29uc3QgTm9NZW1vVmVydGljYWxHcmlkRXZlbnRzTGF5ZXI6IFJlYWN0LkZDPFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyUHJvcHM+ID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUgPSAnaG91cicsXG5cdHJlc291cmNlSWQsXG5cdHJlc291cmNlLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxufSkgPT4ge1xuXHRjb25zdCB0b2RheUV2ZW50cyA9IHVzZVByb2Nlc3NlZERheUV2ZW50cyh7IGRheXMsIGdyaWRUeXBlLCByZXNvdXJjZUlkIH0pXG5cdGNvbnN0IHJhbmdlU3RhcnQgPSBkYXlzLmF0KDApXG5cdGNvbnN0IHJhbmdlRW5kID0gZGF5cy5hdCgtMSk/LmFkZCgxLCBncmlkVHlwZSlcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGwgcG9pbnRlci1ldmVudHMtbm9uZSB6LTEwIG92ZXJmbG93LWNsaXBcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG5cdFx0PlxuXHRcdFx0e3JhbmdlU3RhcnQgJiYgcmFuZ2VFbmQgJiYgKFxuXHRcdFx0XHQ8Q3VycmVudFRpbWVJbmRpY2F0b3Jcblx0XHRcdFx0XHRyYW5nZUVuZD17cmFuZ2VFbmR9XG5cdFx0XHRcdFx0cmFuZ2VTdGFydD17cmFuZ2VTdGFydH1cblx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdC8+XG5cdFx0XHQpfVxuXHRcdFx0e3RvZGF5RXZlbnRzLm1hcCgoZXZlbnQsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50S2V5ID0gYGV2ZW50LSR7ZXZlbnQuaWR9LSR7aW5kZXh9LSR7ZGF5cy5hdCgwKS50b0lTT1N0cmluZygpfS0ke3Jlc291cmNlSWQgPz8gJ25vLXJlc291cmNlJ31gXG5cdFx0XHRcdGNvbnN0IGlzU2hvcnRFdmVudCA9IGV2ZW50LmVuZC5kaWZmKGV2ZW50LnN0YXJ0LCAnbWludXRlJykgPD0gMTVcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImFic29sdXRlXCJcblx0XHRcdFx0XHRcdGtleT17YCR7ZXZlbnRLZXl9LXdyYXBwZXJgfVxuXHRcdFx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRcdFx0bGVmdDogYCR7ZXZlbnQubGVmdH0lYCxcblx0XHRcdFx0XHRcdFx0d2lkdGg6IGBjYWxjKCR7ZXZlbnQud2lkdGh9JSAtIHZhcigtLXNwYWNpbmcpICogMilgLFxuXHRcdFx0XHRcdFx0XHR0b3A6IGAke2V2ZW50LnRvcH0lYCxcblx0XHRcdFx0XHRcdFx0aGVpZ2h0OiBgJHtldmVudC5oZWlnaHR9JWAsXG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxEcmFnZ2FibGVFdmVudFxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKCdwb2ludGVyLWV2ZW50cy1hdXRvIGFic29sdXRlJywge1xuXHRcdFx0XHRcdFx0XHRcdCdbJl9wXTp0ZXh0LVsxMHB4XSBbJl9wXTptdC0wJzogaXNTaG9ydEV2ZW50LFxuXHRcdFx0XHRcdFx0XHR9KX1cblx0XHRcdFx0XHRcdFx0ZWxlbWVudElkPXtldmVudEtleX1cblx0XHRcdFx0XHRcdFx0ZXZlbnQ9e2V2ZW50fVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyID0gbWVtbyhOb01lbW9WZXJ0aWNhbEdyaWRFdmVudHNMYXllcilcbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmludGVyZmFjZSBDdXJyZW50VGltZUluZGljYXRvclByb3BzIHtcblx0LyoqIFRoZSBzdGFydCBkYXRlL3RpbWUgb2YgdGhlIGNvbnRhaW5lcidzIHRpbWVsaW5lIChlLmcuLCB0b3Agb2YgdGhlIGNvbHVtbikgKi9cblx0cmFuZ2VTdGFydDogZGF5anMuRGF5anNcblx0LyoqIFRoZSBlbmQgZGF0ZS90aW1lIG9mIHRoZSBjb250YWluZXIncyB0aW1lbGluZSAoZS5nLiwgYm90dG9tIG9mIHRoZSBjb2x1bW4pICovXG5cdHJhbmdlRW5kOiBkYXlqcy5EYXlqc1xuXHQvKiogT3B0aW9uYWwgcmVmZXJlbmNlIHRpbWUgZm9yIFwibm93XCIgKHVzZWZ1bCBmb3IgdGVzdGluZykgKi9cblx0bm93PzogZGF5anMuRGF5anNcblx0LyoqIFRoZSByZXNvdXJjZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb2x1bW4gKG9wdGlvbmFsKSAqL1xuXHRyZXNvdXJjZT86IFJlc291cmNlXG59XG5cbi8qKlxuICogUmVuZGVycyBhIGhvcml6b250YWwgcmVkIGxpbmUgaW5kaWNhdGluZyB0aGUgY3VycmVudCB0aW1lIHJlbGF0aXZlIHRvIGEgdmVydGljYWwgY29udGFpbmVyJ3MgdGltZWxpbmUuXG4gKiBUaGUgaW5kaWNhdG9yIGhhbmRsZXMgaXRzIG93biB2aXNpYmlsaXR5IGJhc2VkIG9uIHdoZXRoZXIgJ25vdycgZmFsbHMgd2l0aGluIHRoZSBwcm92aWRlZCByYW5nZS5cbiAqIFN1cHBvcnRzIGN1c3RvbSByZW5kZXJpbmcgdmlhIHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yIGZyb20gY29udGV4dC5cbiAqL1xuY29uc3QgTm9NZW1vQ3VycmVudFRpbWVJbmRpY2F0b3IgPSAoe1xuXHRyYW5nZVN0YXJ0LFxuXHRyYW5nZUVuZCxcblx0bm93OiBwcm9wTm93LFxuXHRyZXNvdXJjZSxcbn06IEN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMpID0+IHtcblx0Ly8gR2V0IHJlbmRlciBmdW5jdGlvbiBhbmQgY3VycmVudCB2aWV3IGZyb20gY29udGV4dFxuXHRjb25zdCB7IHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLCB2aWV3IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dChcblx0XHQoc3RhdGUpID0+ICh7XG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcjogc3RhdGUucmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHR2aWV3OiBzdGF0ZS52aWV3LFxuXHRcdH0pXG5cdClcblxuXHRjb25zdCBub3cgPSBwcm9wTm93ID8/IGRheWpzKClcblxuXHQvLyBDaGVjayBpZiBjdXJyZW50IHRpbWUgZmFsbHMgd2l0aGluIHRoaXMgcmFuZ2Vcblx0Y29uc3QgaXNXaXRoaW5SYW5nZSA9IG5vdy5pc1NhbWVPckFmdGVyKHJhbmdlU3RhcnQpICYmIG5vdy5pc0JlZm9yZShyYW5nZUVuZClcblxuXHRpZiAoIWlzV2l0aGluUmFuZ2UpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cblx0Y29uc3QgdG90YWxEdXJhdGlvbiA9IHJhbmdlRW5kLmRpZmYocmFuZ2VTdGFydCwgJ21pbnV0ZScpXG5cdGNvbnN0IG1pbnV0ZXNGcm9tU3RhcnQgPSBub3cuZGlmZihyYW5nZVN0YXJ0LCAnbWludXRlJylcblx0Y29uc3QgcHJvZ3Jlc3MgPSAobWludXRlc0Zyb21TdGFydCAvIHRvdGFsRHVyYXRpb24pICogMTAwXG5cblx0Ly8gSWYgY3VzdG9tIHJlbmRlciBmdW5jdGlvbiBpcyBwcm92aWRlZCB2aWEgY29udGV4dCwgdXNlIGl0XG5cdGlmIChyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcikge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8PlxuXHRcdFx0XHR7cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3Ioe1xuXHRcdFx0XHRcdGN1cnJlbnRUaW1lOiBub3csXG5cdFx0XHRcdFx0cmFuZ2VTdGFydCxcblx0XHRcdFx0XHRyYW5nZUVuZCxcblx0XHRcdFx0XHRwcm9ncmVzcyxcblx0XHRcdFx0XHRyZXNvdXJjZSxcblx0XHRcdFx0XHR2aWV3LFxuXHRcdFx0XHR9KX1cblx0XHRcdDwvPlxuXHRcdClcblx0fVxuXG5cdC8vIERlZmF1bHQgaW5kaWNhdG9yIHJlbmRlcmluZ1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImFic29sdXRlIGxlZnQtMCByaWdodC0wIGgtMC41IGJnLXJlZC01MDAgei01MCBwb2ludGVyLWV2ZW50cy1ub25lXCJcblx0XHRcdGRhdGEtdGVzdGlkPVwiY3VycmVudC10aW1lLWluZGljYXRvclwiXG5cdFx0XHRzdHlsZT17e1xuXHRcdFx0XHR0b3A6IGAke3Byb2dyZXNzfSVgLFxuXHRcdFx0fX1cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBDdXJyZW50VGltZUluZGljYXRvciA9IG1lbW8oTm9NZW1vQ3VycmVudFRpbWVJbmRpY2F0b3IpXG4iLAogICAgImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHtcblx0Z2V0UG9zaXRpb25lZERheUV2ZW50cyxcblx0dHlwZSBQb3NpdGlvbmVkRXZlbnQsXG59IGZyb20gJ0AvbGliL3V0aWxzL3Bvc2l0aW9uLWRheS1ldmVudHMnXG5cbmludGVyZmFjZSBVc2VQcm9jZXNzZWREYXlFdmVudHNQcm9wcyB7XG5cdGRheXM6IGRheWpzLkRheWpzW10gLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGNvbHVtbiByZXByZXNlbnRzXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUsXG5cdHJlc291cmNlSWQsXG59OiBVc2VQcm9jZXNzZWREYXlFdmVudHNQcm9wcykgPT4ge1xuXHRjb25zdCB7IGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgZ2V0RXZlbnRzRm9yUmVzb3VyY2UgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKHN0YXRlKSA9PiAoe1xuXHRcdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiBzdGF0ZS5nZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZTogc3RhdGUuZ2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0fSkpXG5cdGNvbnN0IGRheVN0YXJ0ID0gZGF5cy5hdCgwKS5zdGFydE9mKCdkYXknKVxuXHRjb25zdCBkYXlFbmQgPSBkYXlzLmF0KC0xKS5lbmRPZignZGF5JylcblxuXHRjb25zdCBldmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRsZXQgZGF5RXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKGRheVN0YXJ0LCBkYXlFbmQpXG5cdFx0aWYgKHJlc291cmNlSWQpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlRXZlbnRzID0gZ2V0RXZlbnRzRm9yUmVzb3VyY2UocmVzb3VyY2VJZClcblx0XHRcdGRheUV2ZW50cyA9IGRheUV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PlxuXHRcdFx0XHRyZXNvdXJjZUV2ZW50cy5zb21lKChyZSkgPT4gU3RyaW5nKHJlLmlkKSA9PT0gU3RyaW5nKGV2ZW50LmlkKSlcblx0XHRcdClcblx0XHR9XG5cblx0XHQvLyBWZXJ0aWNhbCBncmlkcyAoRGF5L1dlZWsvUmVzb3VyY2UgVmVydGljYWwpIG5ldmVyIHJlbmRlciBhbGwtZGF5IGV2ZW50c1xuXHRcdC8vIGFzIHRob3NlIGFyZSBoYW5kbGVkIGJ5IHRoZSBhbGwtZGF5LXJvdyBvciBhcmUgbm90IGFwcHJvcHJpYXRlIGZvciB0aGUgdGltZSBncmlkLlxuXHRcdHJldHVybiBkYXlFdmVudHMuZmlsdGVyKChlKSA9PiAhZS5hbGxEYXkpXG5cdH0sIFtcblx0XHRkYXlTdGFydCxcblx0XHRkYXlFbmQsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdHJlc291cmNlSWQsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdF0pXG5cblx0Y29uc3QgdG9kYXlFdmVudHMgPSB1c2VNZW1vPFBvc2l0aW9uZWRFdmVudFtdPigoKSA9PiB7XG5cdFx0cmV0dXJuIGdldFBvc2l0aW9uZWREYXlFdmVudHMoe1xuXHRcdFx0ZGF5cyxcblx0XHRcdGV2ZW50cyxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdH0pXG5cdH0sIFtkYXlzLCBncmlkVHlwZSwgZXZlbnRzXSlcblxuXHRyZXR1cm4gdG9kYXlFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBvc2l0aW9uZWRFdmVudCBleHRlbmRzIENhbGVuZGFyRXZlbnQge1xuXHRsZWZ0OiBudW1iZXIgLy8gTGVmdCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdHdpZHRoOiBudW1iZXIgLy8gV2lkdGggaW4gcGVyY2VudGFnZVxuXHR0b3A6IG51bWJlciAvLyBUb3AgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuXHRoZWlnaHQ6IG51bWJlciAvLyBIZWlnaHQgaW4gcGVyY2VudGFnZVxuXHR6SW5kZXg/OiBudW1iZXIgLy8gWi1pbmRleCBmb3IgbGF5ZXJpbmcgb3ZlcmxhcHBpbmcgZXZlbnRzXG59XG5cbmludGVyZmFjZSBHZXRQb3NpdGlvbmVkRGF5RXZlbnRzUGFyYW1zIHtcblx0ZGF5czogZGF5anMuRGF5anNbXVxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInIHwgJ21pbnV0ZSdcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbn1cblxuZXhwb3J0IGNvbnN0IGdldFBvc2l0aW9uZWREYXlFdmVudHMgPSAoe1xuXHRkYXlzLFxuXHRncmlkVHlwZSA9ICdob3VyJyxcblx0ZXZlbnRzLFxufTogR2V0UG9zaXRpb25lZERheUV2ZW50c1BhcmFtcyk6IFBvc2l0aW9uZWRFdmVudFtdID0+IHtcblx0Ly8gRmlsdGVyIG91dCBhbGwtZGF5IGV2ZW50cyBhbmQgc29ydCBieSBzdGFydCB0aW1lXG5cdGNvbnN0IHNvcnRlZEV2ZW50cyA9IGV2ZW50c1xuXHRcdC5maWx0ZXIoKGUpID0+ICFlLmFsbERheSlcblx0XHQudG9Tb3J0ZWQoKGEsIGIpID0+IGEuc3RhcnQuZGlmZihiLnN0YXJ0KSlcblxuXHRpZiAoc29ydGVkRXZlbnRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBbXVxuXHR9XG5cblx0Ly8gRGV0ZXJtaW5lIGdyaWQgYm91bmRhcmllcyBhbmQgbWV0cmljc1xuXHQvLyBVc2UgZXhwbGljaXQgc3RhcnRPZiB0byBlbnN1cmUgd2UgYXJlIGFuY2hvcmVkIHRvIHRoZSBncmlkIHVuaXQgYm91bmRhcmllc1xuXHQvLyBUaGlzIHByZXZlbnRzIG9mZnNldHMgaWYgdGhlIGdyaWQgZGF5cyBhcmUgbm90IG5vcm1hbGl6ZWRcblx0Y29uc3QgZ3JpZFN0YXJ0ID0gZGF5cy5hdCgwKSB8fCBkYXlqcygpXG5cdGNvbnN0IHRvdGFsVW5pdHMgPSBkYXlzLmxlbmd0aFxuXHRjb25zdCBpc0Rpc2NyZXRlID0gZ3JpZFR5cGUgPT09ICdkYXknXG5cblx0Ly8gU3RlcCAxOiBHcm91cCBldmVudHMgaW50byBjbHVzdGVycyBvZiBvdmVybGFwcGluZyBldmVudHNcblx0Y29uc3QgY2x1c3RlcnM6IENhbGVuZGFyRXZlbnRbXVtdID0gW11cblx0bGV0IGN1cnJlbnRDbHVzdGVyOiBDYWxlbmRhckV2ZW50W10gPSBbXVxuXHRsZXQgbGFzdEV2ZW50RW5kOiBkYXlqcy5EYXlqcyB8IG51bGwgPSBudWxsXG5cdGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkRXZlbnRzKSB7XG5cdFx0aWYgKGxhc3RFdmVudEVuZCAmJiBldmVudC5zdGFydC5pc1NhbWVPckFmdGVyKGxhc3RFdmVudEVuZCkpIHtcblx0XHRcdGlmIChjdXJyZW50Q2x1c3Rlci5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNsdXN0ZXJzLnB1c2goY3VycmVudENsdXN0ZXIpXG5cdFx0XHR9XG5cdFx0XHRjdXJyZW50Q2x1c3RlciA9IFtdXG5cdFx0fVxuXHRcdGN1cnJlbnRDbHVzdGVyLnB1c2goZXZlbnQpXG5cdFx0bGFzdEV2ZW50RW5kID0gbGFzdEV2ZW50RW5kID8gZGF5anMubWF4KGxhc3RFdmVudEVuZCwgZXZlbnQuZW5kKSA6IGV2ZW50LmVuZFxuXHR9XG5cdGlmIChjdXJyZW50Q2x1c3Rlci5sZW5ndGggPiAwKSB7XG5cdFx0Y2x1c3RlcnMucHVzaChjdXJyZW50Q2x1c3Rlcilcblx0fVxuXG5cdC8vIFN0ZXAgMjogRm9yIGVhY2ggY2x1c3RlciwgdXNlIGEgbW9yZSBpbnRlbGxpZ2VudCBjb2x1bW4gYXNzaWdubWVudFxuXHRjb25zdCBwcm9jZXNzZWRFdmVudHM6IFBvc2l0aW9uZWRFdmVudFtdID0gW11cblx0Zm9yIChjb25zdCBjbHVzdGVyIG9mIGNsdXN0ZXJzKSB7XG5cdFx0aWYgKGNsdXN0ZXIubGVuZ3RoID09PSAxKSB7XG5cdFx0XHQvLyBTaW5nbGUgZXZlbnQgdGFrZXMgZnVsbCB3aWR0aFxuXHRcdFx0Y29uc3QgZXZlbnQgPSBjbHVzdGVyWzBdXG5cblx0XHRcdGxldCBzdGFydFRpbWUgPSBldmVudC5zdGFydC5kaWZmKGdyaWRTdGFydCwgZ3JpZFR5cGUsIHRydWUpXG5cdFx0XHRsZXQgZW5kVGltZSA9IGV2ZW50LmVuZC5kaWZmKGdyaWRTdGFydCwgZ3JpZFR5cGUsIHRydWUpXG5cblx0XHRcdGlmIChpc0Rpc2NyZXRlKSB7XG5cdFx0XHRcdHN0YXJ0VGltZSA9IE1hdGguZmxvb3Ioc3RhcnRUaW1lKVxuXHRcdFx0XHRlbmRUaW1lID0gTWF0aC5jZWlsKGVuZFRpbWUpXG5cdFx0XHRcdC8vIEVuc3VyZSBhdCBsZWFzdCAxIHVuaXQgZHVyYXRpb24gZm9yIGRpc2NyZXRlIGV2ZW50c1xuXHRcdFx0XHRpZiAoZW5kVGltZSA8PSBzdGFydFRpbWUpIHtcblx0XHRcdFx0XHRlbmRUaW1lID0gc3RhcnRUaW1lICsgMVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsYW1wIHRvIGdyaWQgYm91bmRhcmllc1xuXHRcdFx0aWYgKHN0YXJ0VGltZSA8IDApIHN0YXJ0VGltZSA9IDBcblx0XHRcdGlmIChlbmRUaW1lID4gdG90YWxVbml0cykgZW5kVGltZSA9IHRvdGFsVW5pdHNcblxuXHRcdFx0Y29uc3QgdG90YWxEdXJhdGlvbiA9IE1hdGgubWF4KDAsIGVuZFRpbWUgLSBzdGFydFRpbWUpXG5cblx0XHRcdC8vIFNraXAgZXZlbnRzIHRoYXQgYXJlIGNvbXBsZXRlbHkgb3V0c2lkZSB0aGUgZ3JpZFxuXHRcdFx0aWYgKHRvdGFsRHVyYXRpb24gPT09IDApIGNvbnRpbnVlXG5cblx0XHRcdGNvbnN0IHRvcCA9IChzdGFydFRpbWUgLyB0b3RhbFVuaXRzKSAqIDEwMFxuXHRcdFx0Y29uc3QgaGVpZ2h0ID0gKHRvdGFsRHVyYXRpb24gLyB0b3RhbFVuaXRzKSAqIDEwMFxuXG5cdFx0XHRwcm9jZXNzZWRFdmVudHMucHVzaCh7IC4uLmV2ZW50LCBsZWZ0OiAwLCB3aWR0aDogMTAwLCB0b3AsIGhlaWdodCB9KVxuXHRcdFx0Y29udGludWVcblx0XHR9XG5cblx0XHQvLyBNdWx0aXBsZSBldmVudHMgLSB1c2UgbGF5ZXJlZCBwb3NpdGlvbmluZyBhcHByb2FjaFxuXHRcdC8vIFNvcnQgYnkgZHVyYXRpb24gKGxvbmdlc3QgZmlyc3QpLCB0aGVuIGJ5IHN0YXJ0IHRpbWVcblx0XHRjb25zdCBzb3J0ZWRDbHVzdGVyID0gWy4uLmNsdXN0ZXJdLnNvcnQoKGEsIGIpID0+IHtcblx0XHRcdGNvbnN0IGFEdXJhdGlvbiA9IGEuZW5kLmRpZmYoYS5zdGFydCwgJ21pbnV0ZScpXG5cdFx0XHRjb25zdCBiRHVyYXRpb24gPSBiLmVuZC5kaWZmKGIuc3RhcnQsICdtaW51dGUnKVxuXG5cdFx0XHQvLyBMb25nZXIgZXZlbnRzIGZpcnN0XG5cdFx0XHRpZiAoYUR1cmF0aW9uICE9PSBiRHVyYXRpb24pIHtcblx0XHRcdFx0cmV0dXJuIGJEdXJhdGlvbiAtIGFEdXJhdGlvblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBzYW1lIGR1cmF0aW9uLCBlYXJsaWVyIHN0YXJ0IHRpbWUgZmlyc3Rcblx0XHRcdHJldHVybiBhLnN0YXJ0LmRpZmYoYi5zdGFydClcblx0XHR9KVxuXG5cdFx0Ly8gUHJvY2VzcyBldmVudHMgd2l0aCBsYXllcmVkIHBvc2l0aW9uaW5nXG5cdFx0Y29uc3QgdG90YWxFdmVudHMgPSBzb3J0ZWRDbHVzdGVyLmxlbmd0aFxuXG5cdFx0Ly8gQ2FsY3VsYXRlIGR5bmFtaWMgb2Zmc2V0IGJhc2VkIG9uIG51bWJlciBvZiBvdmVybGFwcGluZyBldmVudHNcblx0XHQvLyBGZXdlciBldmVudHMgPSBsYXJnZXIgaW5kaXZpZHVhbCBvZmZzZXRzLCBtb3JlIGV2ZW50cyA9IHNtYWxsZXIgb2Zmc2V0c1xuXHRcdGxldCBtYXhPZmZzZXQ6IG51bWJlclxuXHRcdGlmICh0b3RhbEV2ZW50cyA9PT0gMikge1xuXHRcdFx0bWF4T2Zmc2V0ID0gMjUgLy8gMjUlIG9mZnNldCBmb3IgMiBldmVudHNcblx0XHR9IGVsc2UgaWYgKHRvdGFsRXZlbnRzID09PSAzKSB7XG5cdFx0XHRtYXhPZmZzZXQgPSA1MCAvLyA1MCUgdG90YWwgZm9yIDMgZXZlbnRzICgyNSUgZWFjaClcblx0XHR9IGVsc2UgaWYgKHRvdGFsRXZlbnRzID09PSA0KSB7XG5cdFx0XHRtYXhPZmZzZXQgPSA2MCAvLyA2MCUgdG90YWwgZm9yIDQgZXZlbnRzICgyMCUgZWFjaClcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF4T2Zmc2V0ID0gNzAgLy8gNzAlIHRvdGFsIGZvciA1KyBldmVudHNcblx0XHR9XG5cblx0XHRjb25zdCBvZmZzZXRQZXJFdmVudCA9IHRvdGFsRXZlbnRzID4gMSA/IG1heE9mZnNldCAvICh0b3RhbEV2ZW50cyAtIDEpIDogMFxuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRDbHVzdGVyLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBldmVudCA9IHNvcnRlZENsdXN0ZXJbaV1cblxuXHRcdFx0bGV0IHN0YXJ0VGltZSA9IGV2ZW50LnN0YXJ0LmRpZmYoZ3JpZFN0YXJ0LCBncmlkVHlwZSwgdHJ1ZSlcblx0XHRcdGxldCBlbmRUaW1lID0gZXZlbnQuZW5kLmRpZmYoZ3JpZFN0YXJ0LCBncmlkVHlwZSwgdHJ1ZSlcblxuXHRcdFx0aWYgKGlzRGlzY3JldGUpIHtcblx0XHRcdFx0c3RhcnRUaW1lID0gTWF0aC5mbG9vcihzdGFydFRpbWUpXG5cdFx0XHRcdGVuZFRpbWUgPSBNYXRoLmNlaWwoZW5kVGltZSlcblx0XHRcdFx0aWYgKGVuZFRpbWUgPD0gc3RhcnRUaW1lKSB7XG5cdFx0XHRcdFx0ZW5kVGltZSA9IHN0YXJ0VGltZSArIDFcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBDbGFtcCB0byBncmlkIGJvdW5kYXJpZXNcblx0XHRcdGlmIChzdGFydFRpbWUgPCAwKSBzdGFydFRpbWUgPSAwXG5cdFx0XHRpZiAoZW5kVGltZSA+IHRvdGFsVW5pdHMpIGVuZFRpbWUgPSB0b3RhbFVuaXRzXG5cblx0XHRcdGNvbnN0IHRvdGFsRHVyYXRpb24gPSBNYXRoLm1heCgwLCBlbmRUaW1lIC0gc3RhcnRUaW1lKVxuXG5cdFx0XHRpZiAodG90YWxEdXJhdGlvbiA9PT0gMCkgY29udGludWVcblxuXHRcdFx0Y29uc3QgdG9wID0gKHN0YXJ0VGltZSAvIHRvdGFsVW5pdHMpICogMTAwXG5cdFx0XHRjb25zdCBoZWlnaHQgPSAodG90YWxEdXJhdGlvbiAvIHRvdGFsVW5pdHMpICogMTAwXG5cblx0XHRcdC8vIENhbGN1bGF0ZSBwb3NpdGlvbmluZyBiYXNlZCBvbiBsYXllciBhbmQgdG90YWwgZXZlbnRzXG5cdFx0XHRsZXQgbGVmdDogbnVtYmVyXG5cdFx0XHRsZXQgd2lkdGg6IG51bWJlclxuXHRcdFx0bGV0IHpJbmRleDogbnVtYmVyXG5cblx0XHRcdGlmIChpID09PSAwKSB7XG5cdFx0XHRcdC8vIEZpcnN0IGV2ZW50IChsb25nZXN0KSB0YWtlcyBmdWxsIHdpZHRoIGF0IGJvdHRvbVxuXHRcdFx0XHRsZWZ0ID0gMFxuXHRcdFx0XHR3aWR0aCA9IDEwMFxuXHRcdFx0XHR6SW5kZXggPSAxXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBTdWJzZXF1ZW50IGV2ZW50cyBhcmUgb2Zmc2V0IGR5bmFtaWNhbGx5IGJhc2VkIG9uIHRvdGFsIGV2ZW50IGNvdW50XG5cdFx0XHRcdGxlZnQgPSBvZmZzZXRQZXJFdmVudCAqIGlcblx0XHRcdFx0d2lkdGggPSAxMDAgLSBsZWZ0IC8vIFJlbWFpbmluZyB3aWR0aFxuXHRcdFx0XHR6SW5kZXggPSBpICsgMSAvLyBIaWdoZXIgei1pbmRleCBmb3IgZXZlbnRzIG9uIHRvcFxuXHRcdFx0fVxuXG5cdFx0XHRwcm9jZXNzZWRFdmVudHMucHVzaCh7XG5cdFx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0XHRsZWZ0LFxuXHRcdFx0XHR3aWR0aCxcblx0XHRcdFx0dG9wLFxuXHRcdFx0XHRoZWlnaHQsXG5cdFx0XHRcdHpJbmRleCxcblx0XHRcdH0pXG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHByb2Nlc3NlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXJQcm9wcyB7XG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzZXM/OiB7IGhlYWRlcj86IHN0cmluZzsgYWxsRGF5Pzogc3RyaW5nIH1cblx0YWxsRGF5Um93PzogUmVhY3QuUmVhY3ROb2RlXG59XG5cbmNvbnN0IE5vTWVtb1ZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lcjogUmVhY3QuRkM8XG5cdFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lclByb3BzXG4+ID0gKHsgY2hpbGRyZW4sIGNsYXNzZXMsIGFsbERheVJvdyB9KSA9PiB7XG5cdGNvbnN0IHsgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoXG5cdFx0KHN0YXRlKSA9PiAoe1xuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcjogc3RhdGUuc3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWU6IHN0YXRlLnZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0fSlcblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0c3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMjEgYmctYmFja2dyb3VuZCcsIC8vIFotaW5kZXggYWJvdmUgdGhlIGxlZnQgc3RpY2t5IHJlc291cmNlIGNvbHVtblxuXHRcdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdD5cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbignaC0xMiBib3JkZXItYiB3LWZpdCcsIGNsYXNzZXM/LmhlYWRlcil9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1oZWFkZXJcIlxuXHRcdFx0PlxuXHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdHsvKiBBbGwtZGF5IHJvdyAqL31cblx0XHRcdHthbGxEYXlSb3cgJiYgKFxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdmbGV4IHctZnVsbCBib3JkZXItYiBtaW4taC0xMiBoLWZ1bGwnLFxuXHRcdFx0XHRcdFx0Y2xhc3Nlcz8uYWxsRGF5XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtYWxsLWRheVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7YWxsRGF5Um93fVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCl9XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lciA9IG1lbW8oXG5cdE5vTWVtb1ZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lclxuKVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWRDb2wsIHR5cGUgVmVydGljYWxHcmlkQ29sUHJvcHMgfSBmcm9tICcuL3ZlcnRpY2FsLWdyaWQtY29sJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyIH0gZnJvbSAnLi92ZXJ0aWNhbC1ncmlkLWhlYWRlci1jb250YWluZXInXG5cbmNvbnN0IEJPRFlfSEVJR0hUID0gJ2gtW2NhbGMoMTAwJS0zcmVtKV0nXG5cbmludGVyZmFjZSBWZXJ0aWNhbEdyaWRQcm9wcyB7XG5cdGNvbHVtbnM6IFZlcnRpY2FsR3JpZENvbFByb3BzW11cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHR2YXJpYW50PzogJ3JlZ3VsYXInIHwgJ3Jlc291cmNlJ1xuXHRjbGFzc2VzPzogeyBoZWFkZXI/OiBzdHJpbmc7IGJvZHk/OiBzdHJpbmc7IGFsbERheT86IHN0cmluZyB9XG5cdGFsbERheVJvdz86IFJlYWN0LlJlYWN0Tm9kZVxuXHQvKipcblx0ICogT3B0aW9uYWwgYXJyYXkgb2YgbWludXRlIHNsb3RzIGJ5IHdoaWNoIHRoZSBob3VyIGlzIGRpdmlkZWRcblx0ICogZS5nLiwgWzAsIDE1LCAzMCwgNDVdIGZvciBxdWFydGVyLWhvdXIgc2xvdHNcblx0ICovXG5cdGNlbGxTbG90cz86IG51bWJlcltdXG59XG5cbmV4cG9ydCBjb25zdCBWZXJ0aWNhbEdyaWQ6IFJlYWN0LkZDPFZlcnRpY2FsR3JpZFByb3BzPiA9ICh7XG5cdGNvbHVtbnMsXG5cdGNoaWxkcmVuLFxuXHRncmlkVHlwZSA9ICdkYXknLFxuXHR2YXJpYW50ID0gJ3Jlc291cmNlJyxcblx0Y2xhc3Nlcyxcblx0YWxsRGF5Um93LFxuXHRjZWxsU2xvdHMsXG59KSA9PiB7XG5cdGNvbnN0IGlzUmVzb3VyY2VDYWxlbmRhciA9IHZhcmlhbnQgPT09ICdyZXNvdXJjZSdcblx0Y29uc3QgaXNSZWd1bGFyQ2FsZW5kYXIgPSAhaXNSZXNvdXJjZUNhbGVuZGFyXG5cblx0Y29uc3QgaGVhZGVyID0gY2hpbGRyZW4gJiYgKFxuXHRcdDxWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXJcblx0XHRcdGFsbERheVJvdz17YWxsRGF5Um93fVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6IGNsYXNzZXM/LmhlYWRlciwgYWxsRGF5OiBjbGFzc2VzPy5hbGxEYXkgfX1cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9WZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXI+XG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiaC1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLWNvbnRhaW5lclwiPlxuXHRcdFx0ey8qIGhlYWRlciByb3cgKi99XG5cdFx0XHR7aXNSZWd1bGFyQ2FsZW5kYXIgJiYgaGVhZGVyfVxuXG5cdFx0XHQ8U2Nyb2xsQXJlYVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdoLWZ1bGwnLFxuXHRcdFx0XHRcdGlzUmVndWxhckNhbGVuZGFyICYmICdvdmVyZmxvdy1hdXRvJyxcblx0XHRcdFx0XHRpc1JlZ3VsYXJDYWxlbmRhciAmJiBCT0RZX0hFSUdIVCAvLyBzY3JvbGwgYXJlYSBiZWNvbWVzIGJvZHkgaW4gcmVndWxhciBjYWxlbmRhclxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtc2Nyb2xsXCJcblx0XHRcdFx0dmlld1BvcnRQcm9wcz17eyBjbGFzc05hbWU6ICcqOmZsZXghICo6ZmxleC1jb2whICo6bWluLWgtZnVsbCcgfX1cblx0XHRcdD5cblx0XHRcdFx0ey8qIGhlYWRlciByb3cgZm9yIHJlc291cmNlIGNhbGVuZGFyIGluc2lkZSBzY3JvbGwgYXJlYSAqL31cblx0XHRcdFx0e2lzUmVzb3VyY2VDYWxlbmRhciAmJiBoZWFkZXJ9XG5cdFx0XHRcdHsvKiBDYWxlbmRhciBhcmVhIHdpdGggc2Nyb2xsICovfVxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdmbGV4IGZsZXgtMSB3LWZpdCcsXG5cdFx0XHRcdFx0XHRpc1Jlc291cmNlQ2FsZW5kYXIgJiYgQk9EWV9IRUlHSFQsXG5cdFx0XHRcdFx0XHRjbGFzc2VzPy5ib2R5XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtYm9keVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7LyogRGF5IGNvbHVtbnMgd2l0aCB0aW1lIHNsb3RzICovfVxuXHRcdFx0XHRcdHtjb2x1bW5zLm1hcCgoY29sdW1uLCBpbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0PFZlcnRpY2FsR3JpZENvbFxuXHRcdFx0XHRcdFx0XHRrZXk9e2Ake2NvbHVtbi5pZH0tJHtpbmRleH1gfVxuXHRcdFx0XHRcdFx0XHR7Li4uY29sdW1ufVxuXHRcdFx0XHRcdFx0XHRjZWxsU2xvdHM9e2NlbGxTbG90c31cblx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRpc0xhc3RDb2x1bW49e2luZGV4ID09PSBjb2x1bW5zLmxlbmd0aCAtIDF9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCkpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgLz4gey8qIHZlcnRpY2FsIHNjcm9sbGJhciAqL31cblx0XHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgb3JpZW50YXRpb249XCJob3Jpem9udGFsXCIgLz57JyAnfVxuXHRcdFx0XHR7LyogaG9yaXpvbnRhbCBzY3JvbGxiYXIgKi99XG5cdFx0XHQ8L1Njcm9sbEFyZWE+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBnZXREYXlIb3VycyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBnZXRCdXNpbmVzc0hvdXJzRm9yRGF0ZSB9IGZyb20gJy4vYnVzaW5lc3MtaG91cnMnXG5cbmludGVyZmFjZSBHZXRWaWV3SG91cnNPcHRpb25zIHtcblx0cmVmZXJlbmNlRGF0ZTogZGF5anMuRGF5anNcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG5cdC8qKlxuXHQgKiBGb3Igdmlld3Mgd2l0aCBtdWx0aXBsZSBkYXlzIChsaWtlIFdlZWtWaWV3KSwgd2UgbWlnaHQgd2FudCB0byBzaG93XG5cdCAqIHRoZSB1bmlvbiBvZiBhbGwgYnVzaW5lc3MgaG91cnMgYWNyb3NzIHRob3NlIGRheXMuXG5cdCAqL1xuXHRhbGxEYXRlcz86IGRheWpzLkRheWpzW11cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGxpc3Qgb2YgaG91cnMgdG8gZGlzcGxheSBpbiB0aGUgY2FsZW5kYXIgdmlldy5cbiAqIElmIGhpZGVOb25CdXNpbmVzc0hvdXJzIGlzIHRydWUsIGl0IGZpbHRlcnMgdGhlIGhvdXJzIGJhc2VkIG9uIGJ1c2luZXNzSG91cnMgY29uZmlndXJhdGlvbi5cbiAqIEZvciBtdWx0aXBsZSBkYXRlcywgaXQgdGFrZXMgdGhlIGVhcmxpZXN0IHN0YXJ0IGFuZCBsYXRlc3QgZW5kIGFjcm9zcyBhbGwgZGF0ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3SG91cnMoe1xuXHRyZWZlcmVuY2VEYXRlLFxuXHRidXNpbmVzc0hvdXJzLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0YWxsRGF0ZXMgPSBbcmVmZXJlbmNlRGF0ZV0sXG59OiBHZXRWaWV3SG91cnNPcHRpb25zKTogZGF5anMuRGF5anNbXSB7XG5cdGNvbnN0IGFsbEhvdXJzID0gZ2V0RGF5SG91cnMoeyByZWZlcmVuY2VEYXRlIH0pXG5cblx0aWYgKCFoaWRlTm9uQnVzaW5lc3NIb3VycyB8fCAhYnVzaW5lc3NIb3Vycykge1xuXHRcdHJldHVybiBhbGxIb3Vyc1xuXHR9XG5cblx0bGV0IG1pblN0YXJ0ID0gMjRcblx0bGV0IG1heEVuZCA9IDBcblx0bGV0IGhhc0J1c2luZXNzSG91cnMgPSBmYWxzZVxuXG5cdGZvciAoY29uc3QgZGF0ZSBvZiBhbGxEYXRlcykge1xuXHRcdGNvbnN0IGNvbmZpZyA9IGdldEJ1c2luZXNzSG91cnNGb3JEYXRlKGRhdGUsIGJ1c2luZXNzSG91cnMpXG5cdFx0aWYgKGNvbmZpZykge1xuXHRcdFx0aGFzQnVzaW5lc3NIb3VycyA9IHRydWVcblx0XHRcdG1pblN0YXJ0ID0gTWF0aC5taW4obWluU3RhcnQsIGNvbmZpZy5zdGFydFRpbWUgPz8gOSlcblx0XHRcdG1heEVuZCA9IE1hdGgubWF4KG1heEVuZCwgY29uZmlnLmVuZFRpbWUgPz8gMTcpXG5cdFx0fVxuXHR9XG5cblx0Ly8gSWYgbm8gYnVzaW5lc3MgaG91cnMgYXJlIGRlZmluZWQgZm9yIGFueSBvZiB0aGUgZGF0ZXNcblx0aWYgKCFoYXNCdXNpbmVzc0hvdXJzKSB7XG5cdFx0aWYgKGhpZGVOb25CdXNpbmVzc0hvdXJzKSB7XG5cdFx0XHQvLyBJZiBoaWRpbmcgbm9uLWJ1c2luZXNzIGhvdXJzLCB0cnkgdG8gZmluZCBhIGdsb2JhbCByYW5nZSBmcm9tIEFMTCBidXNpbmVzcyBob3Vyc1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYnVzaW5lc3NIb3VycykpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBjb25maWcgb2YgYnVzaW5lc3NIb3Vycykge1xuXHRcdFx0XHRcdG1pblN0YXJ0ID0gTWF0aC5taW4obWluU3RhcnQsIGNvbmZpZy5zdGFydFRpbWUgPz8gOSlcblx0XHRcdFx0XHRtYXhFbmQgPSBNYXRoLm1heChtYXhFbmQsIGNvbmZpZy5lbmRUaW1lID8/IDE3KVxuXHRcdFx0XHRcdGhhc0J1c2luZXNzSG91cnMgPSB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYnVzaW5lc3NIb3Vycykge1xuXHRcdFx0XHRtaW5TdGFydCA9IGJ1c2luZXNzSG91cnMuc3RhcnRUaW1lID8/IDlcblx0XHRcdFx0bWF4RW5kID0gYnVzaW5lc3NIb3Vycy5lbmRUaW1lID8/IDE3XG5cdFx0XHRcdGhhc0J1c2luZXNzSG91cnMgPSB0cnVlXG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHN0aWxsIG5vIGJ1c2luZXNzIGhvdXJzICh0aG91Z2ggdW5saWtlbHkgaWYgYnVzaW5lc3NIb3VycyBleGlzdHMpLCBmYWxsYmFjayB0byBkZWZhdWx0XG5cdFx0XHRpZiAoIWhhc0J1c2luZXNzSG91cnMpIHtcblx0XHRcdFx0bWluU3RhcnQgPSA5XG5cdFx0XHRcdG1heEVuZCA9IDE3XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vdCBoaWRpbmcsIHNob3cgZnVsbCBkYXlcblx0XHRcdHJldHVybiBhbGxIb3Vyc1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiBob3VycyB3aXRoaW4gdGhlIHJhbmdlIFttaW5TdGFydCwgbWF4RW5kKVxuXHRyZXR1cm4gYWxsSG91cnMuZmlsdGVyKChoKSA9PiB7XG5cdFx0Y29uc3QgaG91ciA9IGguaG91cigpXG5cdFx0cmV0dXJuIGhvdXIgPj0gbWluU3RhcnQgJiYgaG91ciA8IG1heEVuZFxuXHR9KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbGxEYXlSb3cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgZ2V0Vmlld0hvdXJzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgRGF5VmlldyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0dGltZUZvcm1hdCxcblx0XHR0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCBpc1RvZGF5ID0gY3VycmVudERhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXHRjb25zdCBob3VycyA9IGdldFZpZXdIb3Vycyh7XG5cdFx0cmVmZXJlbmNlRGF0ZTogY3VycmVudERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRhbGxEYXRlczogW2N1cnJlbnREYXRlXSxcblx0fSlcblxuXHRjb25zdCBmaXJzdENvbCA9IHtcblx0XHRpZDogJ3RpbWUtY29sJyxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRkYXlzOiBob3Vycyxcblx0XHRjbGFzc05hbWU6XG5cdFx0XHQnc2hyaW5rLTAgdy0xNiBtaW4tdy0xNiBtYXgtdy0xNiBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCcsXG5cdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0XHRub0V2ZW50czogdHJ1ZSxcblx0XHRyZW5kZXJDZWxsOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHAtMiB0ZXh0LXJpZ2h0IHRleHQtWzEwcHhdIHNtOnRleHQteHMgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cblx0XHRcdFx0e0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuXHRcdFx0XHRcdGhvdXI6ICdudW1lcmljJyxcblx0XHRcdFx0XHRob3VyMTI6IHRpbWVGb3JtYXQgPT09ICcxMi1ob3VyJyxcblx0XHRcdFx0fSkuZm9ybWF0KGRhdGUudG9EYXRlKCkpfVxuXHRcdFx0PC9kaXY+XG5cdFx0KSxcblx0fVxuXG5cdGNvbnN0IGNvbHVtbnMgPSB7XG5cdFx0aWQ6IGBkYXktY29sLSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9YCxcblx0XHRkYXk6IGN1cnJlbnREYXRlLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGNsYXNzTmFtZTogJ3ctW2NhbGMoMTAwJS00cmVtKV0gZmxleC0xJyxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8VmVydGljYWxHcmlkXG5cdFx0XHRhbGxEYXlSb3c9ezxBbGxEYXlSb3cgZGF5cz17W2N1cnJlbnREYXRlXX0gLz59XG5cdFx0XHRjZWxsU2xvdHM9e1swLCAxNSwgMzAsIDQ1XX1cblx0XHRcdGNsYXNzZXM9e3sgaGVhZGVyOiAndy1mdWxsJywgYm9keTogJ3ctZnVsbCcsIGFsbERheTogJ3ctZnVsbCcgfX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgY29sdW1uc119XG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdFx0dmFyaWFudD1cInJlZ3VsYXJcIlxuXHRcdD5cblx0XHRcdHsvKiBIZWFkZXIgKi99XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17J2ZsZXggaC1mdWxsIGZsZXgtMSBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXInfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cImRheS12aWV3LWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2ZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHRleHQtY2VudGVyIHRleHQtYmFzZSBmb250LXNlbWlib2xkIHNtOnRleHQteGwnLFxuXHRcdFx0XHRcdFx0aXNUb2RheSAmJiAndGV4dC1wcmltYXJ5J1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ4czppbmxpbmUgaGlkZGVuXCI+XG5cdFx0XHRcdFx0XHR7Y3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCAnKX1cblx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0e2N1cnJlbnREYXRlLmZvcm1hdCgnTU1NTSBELCBZWVlZJyl9XG5cdFx0XHRcdFx0e2lzVG9kYXkgJiYgKFxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBtbC0yIHJvdW5kZWQtZnVsbCBweC0xIHB5LTAuNSB0ZXh0LXhzIHNtOnB4LTIgc206dGV4dC1zbVwiPlxuXHRcdFx0XHRcdFx0XHR7dCgndG9kYXknKX1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IERheVZpZXdcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBnZXRNb250aFdlZWtzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IE1vbnRoSGVhZGVyIH0gZnJvbSAnLi9tb250aC1oZWFkZXInXG5pbXBvcnQgdHlwZSB7IE1vbnRoVmlld1Byb3BzIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGNvbnN0IE1vbnRoVmlldzogUmVhY3QuRkM8TW9udGhWaWV3UHJvcHM+ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB3ZWVrcyA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gZ2V0TW9udGhXZWVrcyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspLFxuXHRcdFtjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCByb3dzID0gd2Vla3MubWFwKChkYXlzLCB3ZWVrSW5kZXgpID0+ICh7XG5cdFx0aWQ6IGB3ZWVrLSR7d2Vla0luZGV4fWAsXG5cdFx0Y29sdW1uczogZGF5cy5tYXAoKGRheSkgPT4gKHtcblx0XHRcdGlkOiBgY29sLSR7ZGF5LnRvSVNPU3RyaW5nKCl9YCxcblx0XHRcdGRheSxcblx0XHRcdGNsYXNzTmFtZTogJ3ctYXV0bycsXG5cdFx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdFx0fSkpLFxuXHRcdGNsYXNzTmFtZTogJ2ZsZXgtMScsXG5cdFx0c2hvd0RheU51bWJlcjogdHJ1ZSxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8SG9yaXpvbnRhbEdyaWRcblx0XHRcdGNsYXNzZXM9e3sgYm9keTogJ3ctZnVsbCcsIGhlYWRlcjogJ3ctZnVsbCcgfX1cblx0XHRcdHJvd3M9e3Jvd3N9XG5cdFx0XHR2YXJpYW50PVwicmVndWxhclwiXG5cdFx0PlxuXHRcdFx0PE1vbnRoSGVhZGVyIGNsYXNzTmFtZT1cImgtMTJcIiAvPlxuXHRcdDwvSG9yaXpvbnRhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHMge1xuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgTm9NZW1vSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXIgPSAoe1xuXHRjaGlsZHJlbixcblx0Y2xhc3NOYW1lLFxufTogSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXJQcm9wcykgPT4ge1xuXHRjb25zdCB7IHN0aWNreVZpZXdIZWFkZXIsIHZpZXdIZWFkZXJDbGFzc05hbWUgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KFxuXHRcdChzdGF0ZSkgPT4gKHtcblx0XHRcdHN0aWNreVZpZXdIZWFkZXI6IHN0YXRlLnN0aWNreVZpZXdIZWFkZXIsXG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lOiBzdGF0ZS52aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdH0pXG5cdClcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBoLTEyIHctZml0Jyxcblx0XHRcdFx0c3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMjEgYmctYmFja2dyb3VuZCcsXG5cdFx0XHRcdGNsYXNzTmFtZSxcblx0XHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtdGVzdGlkPVwiaG9yaXpvbnRhbC1ncmlkLWhlYWRlclwiXG5cdFx0PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciA9IG1lbW8oXG5cdE5vTWVtb0hvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyXG4pXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyIH0gZnJvbSAnLi9ob3Jpem9udGFsLWdyaWQtaGVhZGVyLWNvbnRhaW5lcidcbmltcG9ydCB7XG5cdEhvcml6b250YWxHcmlkUm93LFxuXHR0eXBlIEhvcml6b250YWxHcmlkUm93UHJvcHMsXG59IGZyb20gJy4vaG9yaXpvbnRhbC1ncmlkLXJvdydcblxuY29uc3QgQk9EWV9IRUlHSFQgPSAnaC1bY2FsYygxMDAlLTNyZW0pXSdcblxuaW50ZXJmYWNlIEhvcml6b250YWxHcmlkUHJvcHMge1xuXHRyb3dzOiBIb3Jpem9udGFsR3JpZFJvd1Byb3BzW11cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBib2R5Pzogc3RyaW5nIH1cblx0YWxsRGF5PzogYm9vbGVhblxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHZhcmlhbnQ/OiAncmVndWxhcicgfCAncmVzb3VyY2UnXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWQ6IFJlYWN0LkZDPEhvcml6b250YWxHcmlkUHJvcHM+ID0gKHtcblx0cm93cyxcblx0Y2hpbGRyZW4sXG5cdGNsYXNzZXMsXG5cdGFsbERheTogdG9wTGV2ZWxBbGxEYXksXG5cdGdyaWRUeXBlLFxuXHR2YXJpYW50ID0gJ3Jlc291cmNlJyxcblx0ZGF5TnVtYmVySGVpZ2h0LFxufSkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoc3RhdGUpID0+ICh7XG5cdFx0Y3VycmVudERhdGU6IHN0YXRlLmN1cnJlbnREYXRlLFxuXHR9KSlcblxuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSB2YXJpYW50ID09PSAncmVzb3VyY2UnXG5cdGNvbnN0IGlzUmVndWxhckNhbGVuZGFyID0gIWlzUmVzb3VyY2VDYWxlbmRhclxuXG5cdGNvbnN0IGhlYWRlciA9IGNoaWxkcmVuICYmIChcblx0XHQ8SG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXIgY2xhc3NOYW1lPXtjbGFzc2VzPy5oZWFkZXJ9PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXI+XG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiaC1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtY29udGFpbmVyXCI+XG5cdFx0XHR7LyoqXG5cdFx0XHQgKiBoZWFkZXIgcm93IGlzIHJlbmRlcmVkIG91dHNpZGUgc2Nyb2xsIGFyZWEgZm9yIHJlZ3VsYXIgY2FsZW5kYXJcblx0XHRcdCAqL31cblx0XHRcdHtpc1JlZ3VsYXJDYWxlbmRhciAmJiBoZWFkZXJ9XG5cblx0XHRcdDxTY3JvbGxBcmVhXG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2gtZnVsbCcsXG5cdFx0XHRcdFx0aXNSZWd1bGFyQ2FsZW5kYXIgJiYgJ292ZXJmbG93LWF1dG8nLFxuXHRcdFx0XHRcdGlzUmVndWxhckNhbGVuZGFyICYmIEJPRFlfSEVJR0hUIC8vIHNjcm9sbCBhcmVhIGJlY29tZXMgYm9keSBpbiByZWd1bGFyIGNhbGVuZGFyXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwiaG9yaXpvbnRhbC1ncmlkLXNjcm9sbFwiXG5cdFx0XHRcdHZpZXdQb3J0UHJvcHM9e3sgY2xhc3NOYW1lOiAnKjpmbGV4ISAqOmZsZXgtY29sISAqOm1pbi1oLWZ1bGwnIH19XG5cdFx0XHQ+XG5cdFx0XHRcdHsvKipcblx0XHRcdFx0ICogaGVhZGVyIHJvdyBmb3IgcmVzb3VyY2UgY2FsZW5kYXIgaW5zaWRlIHNjcm9sbCBhcmVhXG5cdFx0XHRcdCAqICovfVxuXHRcdFx0XHR7aXNSZXNvdXJjZUNhbGVuZGFyICYmIGhlYWRlcn1cblxuXHRcdFx0XHR7LyogQ2FsZW5kYXIgYXJlYSB3aXRoIHNjcm9sbCAqL31cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnZmxleCBmbGV4LTEgdy1maXQnLFxuXHRcdFx0XHRcdFx0aXNSZXNvdXJjZUNhbGVuZGFyICYmIEJPRFlfSEVJR0hULCAvLyB0aGlzIGJlY29tZXMgYm9keSBpbiByZXNvdXJjZSBjYWxlbmRhclxuXHRcdFx0XHRcdFx0Y2xhc3Nlcz8uYm9keVxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtYm9keVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgZmxleCBmbGV4LWNvbCBmbGV4LTFcIlxuXHRcdFx0XHRcdFx0a2V5PXtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0nKX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7cm93cy5tYXAoKHJvdywgaW5kZXgpID0+IChcblx0XHRcdFx0XHRcdFx0PEhvcml6b250YWxHcmlkUm93XG5cdFx0XHRcdFx0XHRcdFx0YWxsRGF5PXtyb3cuYWxsRGF5ID8/IHRvcExldmVsQWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdGRheU51bWJlckhlaWdodD17ZGF5TnVtYmVySGVpZ2h0fVxuXHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3c9e2luZGV4ID09PSByb3dzLmxlbmd0aCAtIDF9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtyb3cuaWR9XG5cdFx0XHRcdFx0XHRcdFx0dmFyaWFudD17dmFyaWFudH1cblx0XHRcdFx0XHRcdFx0XHR7Li4ucm93fVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIC8+XG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIG9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiIC8+XG5cdFx0XHQ8L1Njcm9sbEFyZWE+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5pbnRlcmZhY2UgTW9udGhIZWFkZXJQcm9wcyB7XG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgTW9udGhIZWFkZXI6IFJlYWN0LkZDPE1vbnRoSGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcblx0Y29uc3QgeyBmaXJzdERheU9mV2Vlaywgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSwgY3VycmVudERhdGUgfSA9XG5cdFx0dXNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHQvLyBSZW9yZGVyIHdlZWsgZGF5cyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuXHRjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaylcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IHctZnVsbCcsXG5cdFx0XHRcdHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIwJyxcblx0XHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJtb250aC1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdHt3ZWVrRGF5cy5tYXAoKHdlZWtEYXksIGluZGV4KSA9PiAoXG5cdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRjbGFzc05hbWU9XCJweS0yIHRleHQtY2VudGVyIGZvbnQtbWVkaXVtIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBib3JkZXItYiBmbGV4LTFcIlxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgd2Vla2RheS1oZWFkZXItJHt3ZWVrRGF5LmZvcm1hdCgnZGRkJykudG9Mb3dlckNhc2UoKX1gfVxuXHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0a2V5PXt3ZWVrRGF5LnRvSVNPU3RyaW5nKCl9XG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17d2Vla0RheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSBjYXBpdGFsaXplXCI+e3dlZWtEYXkuZm9ybWF0KCdkZGQnKX08L3NwYW4+XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0KSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbGxEYXlSb3cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgZ2V0Vmlld0hvdXJzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuY29uc3QgQ0VMTF9DTEFTUyA9ICd3LVtjYWxjKCgxMDAlLTRyZW0pLzcpXSBtaW4tdy1bY2FsYygoMTAwJS00cmVtKS83KV0gZmxleC0xJ1xuY29uc3QgTEVGVF9DT0xfV0lEVEggPSAndy0xMCBzbTp3LTE2IG1pbi13LTEwIHNtOm1pbi13LTE2IG1heC13LTEwIHNtOm1heC13LTE2J1xuXG5jb25zdCBXZWVrVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHR0LFxuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdHNlbGVjdERhdGUsXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHRjdXJyZW50TG9jYWxlLFxuXHRcdHRpbWVGb3JtYXQsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0fSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IGhvdXJzID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0Z2V0Vmlld0hvdXJzKHtcblx0XHRcdFx0cmVmZXJlbmNlRGF0ZTogY3VycmVudERhdGUsXG5cdFx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRhbGxEYXRlczogd2Vla0RheXMsXG5cdFx0XHR9KSxcblx0XHRbY3VycmVudERhdGUsIGJ1c2luZXNzSG91cnMsIGhpZGVOb25CdXNpbmVzc0hvdXJzLCB3ZWVrRGF5c11cblx0KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiAndGltZS1jb2wnLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGNsYXNzTmFtZTogYHNocmluay0wICR7TEVGVF9DT0xfV0lEVEh9IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwYCxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdGhvdXIxMjogdGltZUZvcm1hdCA9PT0gJzEyLWhvdXInLFxuXHRcdFx0XHR9KS5mb3JtYXQoZGF0ZS50b0RhdGUoKSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Ly8gR2VuZXJhdGUgd2VlayBkYXlzXG5cdGNvbnN0IGNvbHVtbnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRyZXR1cm4gd2Vla0RheXMubWFwKChkYXkpID0+ICh7XG5cdFx0XHRpZDogYGRheS1jb2wtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YCxcblx0XHRcdGRheSxcblx0XHRcdGxhYmVsOiBkYXkuZm9ybWF0KCdEJyksXG5cdFx0XHRjbGFzc05hbWU6IENFTExfQ0xBU1MsXG5cdFx0XHRkYXlzOiBob3Vycy5tYXAoKGgpID0+XG5cdFx0XHRcdGRheS5ob3VyKGguaG91cigpKS5taW51dGUoMCkuc2Vjb25kKDApLm1pbGxpc2Vjb25kKDApXG5cdFx0XHQpLFxuXHRcdFx0dmFsdWU6IGRheSxcblx0XHR9KSlcblx0fSwgW3dlZWtEYXlzLCBob3Vyc10pXG5cblx0cmV0dXJuIChcblx0XHQ8VmVydGljYWxHcmlkXG5cdFx0XHRhbGxEYXlSb3c9e1xuXHRcdFx0XHQ8QWxsRGF5Um93XG5cdFx0XHRcdFx0Y2xhc3Nlcz17eyBjZWxsOiBDRUxMX0NMQVNTLCBzcGFjZXI6IExFRlRfQ09MX1dJRFRIIH19XG5cdFx0XHRcdFx0ZGF5cz17d2Vla0RheXN9XG5cdFx0XHRcdC8+XG5cdFx0XHR9XG5cdFx0XHRjbGFzc2VzPXt7IGhlYWRlcjogJ3ctZnVsbCBoLTE4JywgYm9keTogJ2gtW2NhbGMoMTAwJS00LjVyZW0pXSB3LWZ1bGwnIH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIC4uLmNvbHVtbnNdfVxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT17J2ZsZXggaC1mdWxsIGZsZXgtMSd9IGRhdGEtdGVzdGlkPVwid2Vlay12aWV3LWhlYWRlclwiPlxuXHRcdFx0XHR7LyogQ29ybmVyIGNlbGwgd2l0aCB3ZWVrIG51bWJlciAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTEwIHNtOnctMTYgaC1mdWxsIHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItciBwLTIgZmxleFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXhzXCI+e3QoJ3dlZWsnKX08L3NwYW4+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPntjdXJyZW50RGF0ZS53ZWVrKCl9PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHR7LyogRGF5IGhlYWRlciBjZWxscyAqL31cblx0XHRcdFx0e3dlZWtEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGlzVG9kYXkgPSBkYXkuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXHRcdFx0XHRcdGNvbnN0IGtleSA9IGB3ZWVrLWRheS1oZWFkZXItJHtkYXkudG9JU09TdHJpbmcoKX1gXG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdCdob3ZlcjpiZy1hY2NlbnQgZmxleC0xIGZsZXggZmxleC1jb2wganVzdGlmeS1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgcC0xIHRleHQtY2VudGVyIHNtOnAtMiBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgdy01MCBoLWZ1bGwnLFxuXHRcdFx0XHRcdFx0XHRcdGlzVG9kYXkgJiYgJ2JnLXByaW1hcnkvMTAgZm9udC1ib2xkJ1xuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHdlZWstZGF5LWhlYWRlci0ke2RheS5mb3JtYXQoJ2RkZGQnKS50b0xvd2VyQ2FzZSgpfWB9XG5cdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRcdGtleT17a2V5fVxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZWN0RGF0ZShkYXkpXG5cdFx0XHRcdFx0XHRcdFx0b3BlbkV2ZW50Rm9ybSh7IHN0YXJ0OiBkYXkgfSlcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17a2V5fVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPntkYXkuZm9ybWF0KCdkZGQnKX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHQnbXgtYXV0byBtdC0xIGZsZXggaC01IHctNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIHRleHQteHMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNUb2RheSAmJiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCdcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGF5OiAnbnVtZXJpYycsXG5cdFx0XHRcdFx0XHRcdFx0fSkuZm9ybWF0KGRheS50b0RhdGUoKSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFdlZWtWaWV3XG4iLAogICAgImltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBTY3JvbGxBcmVhLCBTY3JvbGxCYXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IERBWV9IRUFERVJfTkFNRVMgPSBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXVxuY29uc3QgRVZFTlRfRE9UX0NPTE9SUyA9IFsnYmctcHJpbWFyeScsICdiZy1ibHVlLTUwMCcsICdiZy1ncmVlbi01MDAnXVxuY29uc3QgREFZU19JTl9NSU5JX0NBTEVOREFSID0gNDJcblxuY29uc3QgZ2V0RGF5VG9vbHRpcCA9IChldmVudENvdW50OiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuXHRpZiAoZXZlbnRDb3VudCA9PT0gMCkge1xuXHRcdHJldHVybiAnJ1xuXHR9XG5cdGNvbnN0IHBsdXJhbCA9IGV2ZW50Q291bnQgPiAxID8gJ3MnIDogJydcblx0cmV0dXJuIGAke2V2ZW50Q291bnR9IGV2ZW50JHtwbHVyYWx9YFxufVxuXG5pbnRlcmZhY2UgTW9udGhEYXRhIHtcblx0ZGF0ZTogZGF5anMuRGF5anNcblx0bmFtZTogc3RyaW5nXG5cdGV2ZW50Q291bnQ6IG51bWJlclxuXHRtb250aEtleTogc3RyaW5nXG59XG5cbmludGVyZmFjZSBEYXlEYXRhIHtcblx0ZGF0ZTogZGF5anMuRGF5anNcblx0ZGF5S2V5OiBzdHJpbmdcblx0aXNJbkN1cnJlbnRNb250aDogYm9vbGVhblxuXHRpc1RvZGF5OiBib29sZWFuXG5cdGlzU2VsZWN0ZWQ6IGJvb2xlYW5cblx0ZXZlbnRDb3VudDogbnVtYmVyXG59XG5cbmNvbnN0IFllYXJWaWV3ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBzZWxlY3REYXRlLCBldmVudHMsIHNldFZpZXcsIGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgdCB9ID1cblx0XHR1c2VDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCBjdXJyZW50WWVhciA9IGN1cnJlbnREYXRlLnllYXIoKVxuXG5cdGNvbnN0IGdlbmVyYXRlTW9udGhzRGF0YSA9ICgpOiBNb250aERhdGFbXSA9PiB7XG5cdFx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDEyIH0sIChfLCBtb250aEluZGV4KSA9PiB7XG5cdFx0XHRjb25zdCBtb250aERhdGUgPSBkYXlqcygpXG5cdFx0XHRcdC55ZWFyKGN1cnJlbnRZZWFyKVxuXHRcdFx0XHQubW9udGgobW9udGhJbmRleClcblx0XHRcdFx0LnN0YXJ0T2YoJ21vbnRoJylcblx0XHRcdGNvbnN0IGV2ZW50c0luTW9udGggPSBldmVudHMuZmlsdGVyKFxuXHRcdFx0XHQoZXZlbnQpID0+XG5cdFx0XHRcdFx0ZXZlbnQuc3RhcnQueWVhcigpID09PSBjdXJyZW50WWVhciAmJlxuXHRcdFx0XHRcdGV2ZW50LnN0YXJ0Lm1vbnRoKCkgPT09IG1vbnRoSW5kZXhcblx0XHRcdClcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZGF0ZTogbW9udGhEYXRlLFxuXHRcdFx0XHRuYW1lOiBtb250aERhdGUuZm9ybWF0KCdNTU1NJyksXG5cdFx0XHRcdGV2ZW50Q291bnQ6IGV2ZW50c0luTW9udGgubGVuZ3RoLFxuXHRcdFx0XHRtb250aEtleTogbW9udGhEYXRlLmZvcm1hdCgnTU0nKSxcblx0XHRcdH1cblx0XHR9KVxuXHR9XG5cblx0Y29uc3QgZ2VuZXJhdGVEYXlzRm9yTW9udGggPSAobW9udGhEYXRlOiBkYXlqcy5EYXlqcyk6IERheURhdGFbXSA9PiB7XG5cdFx0Y29uc3QgZmlyc3REYXlPZkNhbGVuZGFyID0gbW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJykuc3RhcnRPZignd2VlaycpXG5cblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogREFZU19JTl9NSU5JX0NBTEVOREFSIH0sIChfLCBkYXlJbmRleCkgPT4ge1xuXHRcdFx0Y29uc3QgZGF5RGF0ZSA9IGZpcnN0RGF5T2ZDYWxlbmRhci5hZGQoZGF5SW5kZXgsICdkYXknKVxuXHRcdFx0Y29uc3QgZGF5U3RhcnQgPSBkYXlEYXRlLnN0YXJ0T2YoJ2RheScpXG5cdFx0XHRjb25zdCBkYXlFbmQgPSBkYXlEYXRlLmVuZE9mKCdkYXknKVxuXHRcdFx0Y29uc3QgZXZlbnRzT25EYXkgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoZGF5U3RhcnQsIGRheUVuZClcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZGF0ZTogZGF5RGF0ZSxcblx0XHRcdFx0ZGF5S2V5OiBkYXlEYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpLFxuXHRcdFx0XHRpc0luQ3VycmVudE1vbnRoOiBkYXlEYXRlLm1vbnRoKCkgPT09IG1vbnRoRGF0ZS5tb250aCgpLFxuXHRcdFx0XHRpc1RvZGF5OiBkYXlEYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5JyksXG5cdFx0XHRcdGlzU2VsZWN0ZWQ6IGRheURhdGUuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5JyksXG5cdFx0XHRcdGV2ZW50Q291bnQ6IGV2ZW50c09uRGF5Lmxlbmd0aCxcblx0XHRcdH1cblx0XHR9KVxuXHR9XG5cblx0Y29uc3QgbmF2aWdhdGVUb0RhdGUgPSAoXG5cdFx0ZGF0ZTogZGF5anMuRGF5anMsXG5cdFx0dmlldzogJ21vbnRoJyB8ICdkYXknLFxuXHRcdGV2ZW50PzogUmVhY3QuTW91c2VFdmVudFxuXHQpID0+IHtcblx0XHRldmVudD8uc3RvcFByb3BhZ2F0aW9uKClcblx0XHRzZWxlY3REYXRlKGRhdGUpXG5cdFx0c2V0Vmlldyh2aWV3KVxuXHR9XG5cblx0Y29uc3QgZ2V0RXZlbnRDb3VudExhYmVsID0gKGNvdW50OiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuXHRcdGNvbnN0IGV2ZW50V29yZCA9IGNvdW50ID09PSAxID8gdCgnZXZlbnQnKSA6IHQoJ2V2ZW50cycpXG5cdFx0cmV0dXJuIGAke2NvdW50fSAke2V2ZW50V29yZH1gXG5cdH1cblxuXHRjb25zdCBnZXREYXlDbGFzc05hbWUgPSAoZGF5OiBEYXlEYXRhKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCBiYXNlQ2xhc3MgPVxuXHRcdFx0J3JlbGF0aXZlIGZsZXggYXNwZWN0LXNxdWFyZSB3LWZ1bGwgY3Vyc29yLXBvaW50ZXIgZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGhvdmVyOmJnLWFjY2VudCByb3VuZGVkLXNtIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTIwMCdcblx0XHRjb25zdCBvdXRzaWRlTW9udGhDbGFzcyA9IGRheS5pc0luQ3VycmVudE1vbnRoXG5cdFx0XHQ/ICcnXG5cdFx0XHQ6ICd0ZXh0LW11dGVkLWZvcmVncm91bmQgb3BhY2l0eS01MCdcblx0XHRjb25zdCB0b2RheUNsYXNzID0gZGF5LmlzVG9kYXlcblx0XHRcdD8gJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1mdWxsJ1xuXHRcdFx0OiAnJ1xuXHRcdGNvbnN0IHNlbGVjdGVkQ2xhc3MgPVxuXHRcdFx0ZGF5LmlzU2VsZWN0ZWQgJiYgIWRheS5pc1RvZGF5ID8gJ2JnLW11dGVkIHJvdW5kZWQtZnVsbCBmb250LWJvbGQnIDogJydcblx0XHRjb25zdCBoYXNFdmVudHNDbGFzcyA9XG5cdFx0XHRkYXkuZXZlbnRDb3VudCA+IDAgJiYgIWRheS5pc1RvZGF5ICYmICFkYXkuaXNTZWxlY3RlZCA/ICdmb250LW1lZGl1bScgOiAnJ1xuXG5cdFx0cmV0dXJuIGNuKFxuXHRcdFx0YmFzZUNsYXNzLFxuXHRcdFx0b3V0c2lkZU1vbnRoQ2xhc3MsXG5cdFx0XHR0b2RheUNsYXNzLFxuXHRcdFx0c2VsZWN0ZWRDbGFzcyxcblx0XHRcdGhhc0V2ZW50c0NsYXNzXG5cdFx0KVxuXHR9XG5cblx0Y29uc3QgZ2V0RXZlbnREb3RDbGFzc05hbWUgPSAoY29sb3I6IHN0cmluZywgaXNUb2RheTogYm9vbGVhbik6IHN0cmluZyA9PiB7XG5cdFx0Y29uc3QgZG90Q29sb3IgPSBpc1RvZGF5ID8gJ2JnLXByaW1hcnktZm9yZWdyb3VuZCcgOiBjb2xvclxuXHRcdHJldHVybiBjbignaC1bM3B4XSB3LVszcHhdIHJvdW5kZWQtZnVsbCcsIGRvdENvbG9yKVxuXHR9XG5cblx0Y29uc3QgbW9udGhzRGF0YSA9IGdlbmVyYXRlTW9udGhzRGF0YSgpXG5cblx0cmV0dXJuIChcblx0XHQ8U2Nyb2xsQXJlYSBjbGFzc05hbWU9XCJoLWZ1bGxcIiBkYXRhLXRlc3RpZD1cInllYXItdmlld1wiPlxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9XCJncmlkIGF1dG8tcm93cy1mciBncmlkLWNvbHMtMSBnYXAtNCBwLTQgc206Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIlxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInllYXItZ3JpZFwiXG5cdFx0XHQ+XG5cdFx0XHRcdHttb250aHNEYXRhLm1hcCgobW9udGgsIG1vbnRoSW5kZXgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBkYXlzSW5Nb250aCA9IGdlbmVyYXRlRGF5c0Zvck1vbnRoKG1vbnRoLmRhdGUpXG5cdFx0XHRcdFx0Y29uc3QgYW5pbWF0aW9uRGVsYXkgPSBtb250aEluZGV4ICogMC4wNVxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaG92ZXI6Ym9yZGVyLXByaW1hcnkgZmxleCBmbGV4LWNvbCByb3VuZGVkLWxnIGJvcmRlciBwLTMgdGV4dC1sZWZ0IHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBob3ZlcjpzaGFkb3ctbWRcIlxuXHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHllYXItbW9udGgtJHttb250aC5tb250aEtleX1gfVxuXHRcdFx0XHRcdFx0XHRrZXk9e21vbnRoLm1vbnRoS2V5fVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWItMiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIlxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5PXthbmltYXRpb25EZWxheX1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2Btb250aC0ke21vbnRoSW5kZXh9YH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgbW9udGgtJHttb250aEluZGV4fWB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtbWVkaXVtIGhvdmVyOnVuZGVybGluZSBjdXJzb3ItcG9pbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHllYXItbW9udGgtdGl0bGUtJHttb250aC5tb250aEtleX1gfVxuXHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gbmF2aWdhdGVUb0RhdGUobW9udGguZGF0ZSwgJ21vbnRoJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHR7bW9udGgubmFtZX1cblx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cblxuXHRcdFx0XHRcdFx0XHRcdHttb250aC5ldmVudENvdW50ID4gMCAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtZnVsbCBweC0yIHB5LTEgdGV4dC14c1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgeWVhci1tb250aC1ldmVudC1jb3VudC0ke21vbnRoLm1vbnRoS2V5fWB9XG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtnZXRFdmVudENvdW50TGFiZWwobW9udGguZXZlbnRDb3VudCl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cblx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTcgZ2FwLVsxcHhdIHRleHQtWzAuNnJlbV1cIlxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgeWVhci1taW5pLWNhbGVuZGFyLSR7bW9udGgubW9udGhLZXl9YH1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHtEQVlfSEVBREVSX05BTUVTLm1hcCgoZGF5TmFtZSwgaGVhZGVySW5kZXgpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGgtMyB0ZXh0LWNlbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17YGhlYWRlci0ke2hlYWRlckluZGV4fWB9XG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtkYXlOYW1lfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cblx0XHRcdFx0XHRcdFx0XHR7ZGF5c0luTW9udGgubWFwKChkYXkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGRheVRlc3RJZCA9IGB5ZWFyLWRheS0ke21vbnRoLmRhdGUuZm9ybWF0KCdZWVlZLU1NJyl9LSR7ZGF5LmRheUtleX1gXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBoYXNFdmVudHMgPSBkYXkuZXZlbnRDb3VudCA+IDBcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHZpc2libGVEb3RDb3VudCA9IE1hdGgubWluKGRheS5ldmVudENvdW50LCAzKVxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgdmlzaWJsZURvdENvbG9ycyA9IEVWRU5UX0RPVF9DT0xPUlMuc2xpY2UoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGVEb3RDb3VudFxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXREYXlDbGFzc05hbWUoZGF5KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17ZGF5VGVzdElkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17ZGF5LmRheUtleX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoZSkgPT4gbmF2aWdhdGVUb0RhdGUoZGF5LmRhdGUsICdkYXknLCBlKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT17Z2V0RGF5VG9vbHRpcChkYXkuZXZlbnRDb3VudCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciBsZWFkaW5nLW5vbmVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtkYXkuZGF0ZS5kYXRlKCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e2hhc0V2ZW50cyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2Fic29sdXRlIGJvdHRvbS0wIGZsZXggdy1mdWxsIGp1c3RpZnktY2VudGVyIHNwYWNlLXgtWzFweF0nLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRheS5pc1RvZGF5ICYmICdib3R0b20tWzFweF0nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt2aXNpYmxlRG90Q29sb3JzLm1hcCgoZG90Q29sb3IpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXRFdmVudERvdENsYXNzTmFtZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZG90Q29sb3IsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRheS5pc1RvZGF5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtkb3RDb2xvcn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdH0pfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIC8+XG5cdFx0PC9TY3JvbGxBcmVhPlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFllYXJWaWV3XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEV2ZW50Rm9ybVByb3BzIH0gZnJvbSAnQC9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybSdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHtcblx0Q2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGUsXG5cdENlbGxDbGlja0luZm8sXG5cdFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckVuZ2luZSB9IGZyb20gJ0AvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZSdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgR0FQX0JFVFdFRU5fRUxFTUVOVFMgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucywgVHJhbnNsYXRvckZ1bmN0aW9uIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhclZpZXcsIFRpbWVGb3JtYXQgfSBmcm9tICdAL3R5cGVzJ1xuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0J1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyUHJvdmlkZXJQcm9wcyB7XG5cdGNoaWxkcmVuOiBSZWFjdE5vZGVcblx0ZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG5cdGZpcnN0RGF5T2ZXZWVrPzogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG5cdGluaXRpYWxWaWV3PzogQ2FsZW5kYXJWaWV3XG5cdGluaXRpYWxEYXRlPzogZGF5anMuRGF5anNcblx0cmVuZGVyRXZlbnQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IFJlYWN0Tm9kZVxuXHRvbkV2ZW50Q2xpY2s/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DZWxsQ2xpY2s/OiAoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4gdm9pZFxuXHRvblZpZXdDaGFuZ2U/OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdG9uRXZlbnRBZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudFVwZGF0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50RGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRGF0ZUNoYW5nZT86IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRsb2NhbGU/OiBzdHJpbmdcblx0dGltZXpvbmU/OiBzdHJpbmdcblx0ZGlzYWJsZUNlbGxDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZUV2ZW50Q2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVEcmFnQW5kRHJvcD86IGJvb2xlYW5cblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0ZXZlbnRTcGFjaW5nPzogbnVtYmVyXG5cdHN0aWNreVZpZXdIZWFkZXI/OiBib29sZWFuXG5cdHZpZXdIZWFkZXJDbGFzc05hbWU/OiBzdHJpbmdcblx0aGVhZGVyQ29tcG9uZW50PzogUmVhY3ROb2RlIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY29tcG9uZW50XG5cdGhlYWRlckNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNsYXNzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHJlbmRlckV2ZW50Rm9ybT86IChwcm9wczogRXZlbnRGb3JtUHJvcHMpID0+IFJlYWN0Tm9kZVxuXHQvLyBUcmFuc2xhdGlvbiBvcHRpb25zIC0gcHJvdmlkZSBlaXRoZXIgdHJhbnNsYXRpb25zIG9iamVjdCBPUiB0cmFuc2xhdG9yIGZ1bmN0aW9uXG5cdHRyYW5zbGF0aW9ucz86IFRyYW5zbGF0aW9uc1xuXHR0cmFuc2xhdG9yPzogVHJhbnNsYXRvckZ1bmN0aW9uXG5cdHRpbWVGb3JtYXQ/OiBUaW1lRm9ybWF0XG5cdGNsYXNzZXNPdmVycmlkZT86IENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yPzogKFxuXHRcdHByb3BzOiBSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzXG5cdCkgPT4gUmVhY3ROb2RlXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzPzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgQ2FsZW5kYXJQcm92aWRlcjogUmVhY3QuRkM8Q2FsZW5kYXJQcm92aWRlclByb3BzPiA9ICh7XG5cdGNoaWxkcmVuLFxuXHRldmVudHMgPSBbXSxcblx0Zmlyc3REYXlPZldlZWsgPSAwLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRyZW5kZXJFdmVudCxcblx0b25FdmVudENsaWNrLFxuXHRvbkNlbGxDbGljayxcblx0b25WaWV3Q2hhbmdlLFxuXHRvbkV2ZW50QWRkLFxuXHRvbkV2ZW50VXBkYXRlLFxuXHRvbkV2ZW50RGVsZXRlLFxuXHRvbkRhdGVDaGFuZ2UsXG5cdGxvY2FsZSxcblx0dGltZXpvbmUsXG5cdGRpc2FibGVDZWxsQ2xpY2ssXG5cdGRpc2FibGVFdmVudENsaWNrLFxuXHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdGRheU1heEV2ZW50cyxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdGhlYWRlckNvbXBvbmVudCxcblx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRidXNpbmVzc0hvdXJzLFxuXHRyZW5kZXJFdmVudEZvcm0sXG5cdHRyYW5zbGF0aW9ucyxcblx0dHJhbnNsYXRvcixcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0aGlkZU5vbkJ1c2luZXNzSG91cnMgPSBmYWxzZSxcbn0pID0+IHtcblx0Ly8gVXNlIHRoZSBjYWxlbmRhciBlbmdpbmVcblx0Y29uc3QgY2FsZW5kYXJFbmdpbmUgPSB1c2VDYWxlbmRhckVuZ2luZSh7XG5cdFx0ZXZlbnRzLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGluaXRpYWxWaWV3LFxuXHRcdGluaXRpYWxEYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0b25FdmVudEFkZCxcblx0XHRvbkV2ZW50VXBkYXRlLFxuXHRcdG9uRXZlbnREZWxldGUsXG5cdFx0b25EYXRlQ2hhbmdlLFxuXHRcdG9uVmlld0NoYW5nZSxcblx0XHRsb2NhbGUsXG5cdFx0dGltZXpvbmUsXG5cdFx0dHJhbnNsYXRpb25zLFxuXHRcdHRyYW5zbGF0b3IsXG5cdH0pXG5cblx0Y29uc3QgZWRpdEV2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KGV2ZW50KVxuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0fSxcblx0XHRbY2FsZW5kYXJFbmdpbmVdXG5cdClcblxuXHQvLyBDdXN0b20gaGFuZGxlcnMgdGhhdCBjYWxsIGV4dGVybmFsIGNhbGxiYWNrc1xuXHRjb25zdCBoYW5kbGVFdmVudENsaWNrID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUV2ZW50Q2xpY2spIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cdFx0XHRpZiAob25FdmVudENsaWNrKSB7XG5cdFx0XHRcdG9uRXZlbnRDbGljayhldmVudClcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVkaXRFdmVudChldmVudClcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtkaXNhYmxlRXZlbnRDbGljaywgb25FdmVudENsaWNrLCBlZGl0RXZlbnRdXG5cdClcblxuXHRjb25zdCBoYW5kbGVEYXRlQ2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4ge1xuXHRcdFx0aWYgKGRpc2FibGVDZWxsQ2xpY2spIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cblx0XHRcdGlmIChvbkNlbGxDbGljaykge1xuXHRcdFx0XHRvbkNlbGxDbGljayhpbmZvKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2FsZW5kYXJFbmdpbmUub3BlbkV2ZW50Rm9ybShpbmZvKVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W29uQ2VsbENsaWNrLCBkaXNhYmxlQ2VsbENsaWNrLCBjYWxlbmRhckVuZ2luZV1cblx0KVxuXG5cdC8vIENyZWF0ZSB0aGUgY29udGV4dCB2YWx1ZVxuXHRjb25zdCBjb250ZXh0VmFsdWUgPSB1c2VNZW1vKFxuXHRcdCgpID0+ICh7XG5cdFx0XHRjdXJyZW50RGF0ZTogY2FsZW5kYXJFbmdpbmUuY3VycmVudERhdGUsXG5cdFx0XHR2aWV3OiBjYWxlbmRhckVuZ2luZS52aWV3LFxuXHRcdFx0ZXZlbnRzOiBjYWxlbmRhckVuZ2luZS5ldmVudHMsXG5cdFx0XHRyYXdFdmVudHM6IGNhbGVuZGFyRW5naW5lLnJhd0V2ZW50cyxcblx0XHRcdGN1cnJlbnRMb2NhbGU6IGNhbGVuZGFyRW5naW5lLmN1cnJlbnRMb2NhbGUsXG5cdFx0XHRpc0V2ZW50Rm9ybU9wZW46IGNhbGVuZGFyRW5naW5lLmlzRXZlbnRGb3JtT3Blbixcblx0XHRcdHNlbGVjdGVkRXZlbnQ6IGNhbGVuZGFyRW5naW5lLnNlbGVjdGVkRXZlbnQsXG5cdFx0XHRzZWxlY3RlZERhdGU6IGNhbGVuZGFyRW5naW5lLnNlbGVjdGVkRGF0ZSxcblx0XHRcdGZpcnN0RGF5T2ZXZWVrOiBjYWxlbmRhckVuZ2luZS5maXJzdERheU9mV2Vlayxcblx0XHRcdHNldEN1cnJlbnREYXRlOiBjYWxlbmRhckVuZ2luZS5zZXRDdXJyZW50RGF0ZSxcblx0XHRcdHNlbGVjdERhdGU6IGNhbGVuZGFyRW5naW5lLnNlbGVjdERhdGUsXG5cdFx0XHRzZXRWaWV3OiBjYWxlbmRhckVuZ2luZS5zZXRWaWV3LFxuXHRcdFx0bmV4dFBlcmlvZDogY2FsZW5kYXJFbmdpbmUubmV4dFBlcmlvZCxcblx0XHRcdHByZXZQZXJpb2Q6IGNhbGVuZGFyRW5naW5lLnByZXZQZXJpb2QsXG5cdFx0XHR0b2RheTogY2FsZW5kYXJFbmdpbmUudG9kYXksXG5cdFx0XHRhZGRFdmVudDogY2FsZW5kYXJFbmdpbmUuYWRkRXZlbnQsXG5cdFx0XHR1cGRhdGVFdmVudDogY2FsZW5kYXJFbmdpbmUudXBkYXRlRXZlbnQsXG5cdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudDogY2FsZW5kYXJFbmdpbmUudXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0XHRkZWxldGVFdmVudDogY2FsZW5kYXJFbmdpbmUuZGVsZXRlRXZlbnQsXG5cdFx0XHRkZWxldGVSZWN1cnJpbmdFdmVudDogY2FsZW5kYXJFbmdpbmUuZGVsZXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0XHRvcGVuRXZlbnRGb3JtOiBjYWxlbmRhckVuZ2luZS5vcGVuRXZlbnRGb3JtLFxuXHRcdFx0Y2xvc2VFdmVudEZvcm06IGNhbGVuZGFyRW5naW5lLmNsb3NlRXZlbnRGb3JtLFxuXHRcdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiBjYWxlbmRhckVuZ2luZS5nZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0XHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IGNhbGVuZGFyRW5naW5lLmZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHRcdHJlbmRlckV2ZW50LFxuXHRcdFx0b25FdmVudENsaWNrOiBoYW5kbGVFdmVudENsaWNrLFxuXHRcdFx0b25DZWxsQ2xpY2s6IGhhbmRsZURhdGVDbGljayxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHRcdFx0dDogY2FsZW5kYXJFbmdpbmUudCxcblx0XHRcdHRpbWVGb3JtYXQsXG5cdFx0XHRjbGFzc2VzT3ZlcnJpZGUsXG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdH0pLFxuXHRcdFtcblx0XHRcdGNhbGVuZGFyRW5naW5lLFxuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRoYW5kbGVFdmVudENsaWNrLFxuXHRcdFx0aGFuZGxlRGF0ZUNsaWNrLFxuXHRcdFx0bG9jYWxlLFxuXHRcdFx0dGltZXpvbmUsXG5cdFx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRdXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxDYWxlbmRhckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRWYWx1ZX0+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9DYWxlbmRhckNvbnRleHQuUHJvdmlkZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgQ2FsZW5kYXJEbmRDb250ZXh0IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQnXG5pbXBvcnQgeyBFdmVudEZvcm1EaWFsb2cgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtLWRpYWxvZydcbmltcG9ydCB7IEhlYWRlciB9IGZyb20gJ0AvY29tcG9uZW50cy9oZWFkZXInXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgRGF5VmlldyBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvZGF5LXZpZXcnXG5pbXBvcnQgeyBNb250aFZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9tb250aC12aWV3J1xuaW1wb3J0IFdlZWtWaWV3IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvd2Vlay12aWV3J1xuaW1wb3J0IFllYXJWaWV3IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy95ZWFyLXZpZXcveWVhci12aWV3J1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBDYWxlbmRhclByb3ZpZGVyIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyJ1xuLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWR1cGxpY2F0ZXNcbmltcG9ydCAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7XG5cdElsYW15Q2FsZW5kYXJQcm9wRXZlbnQsXG5cdElsYW15Q2FsZW5kYXJQcm9wcyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB7XG5cdERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRXRUVLX0RBWVNfTlVNQkVSX01BUCxcbn0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgbm9ybWFsaXplRXZlbnRzLCBzYWZlRGF0ZSB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBDYWxlbmRhckNvbnRlbnQ6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IHZpZXcsIGRheU1heEV2ZW50cyB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB2aWV3TWFwID0ge1xuXHRcdG1vbnRoOiA8TW9udGhWaWV3IGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfSBrZXk9XCJtb250aFwiIC8+LFxuXHRcdHdlZWs6IDxXZWVrVmlldyBrZXk9XCJ3ZWVrXCIgLz4sXG5cdFx0ZGF5OiA8RGF5VmlldyBrZXk9XCJkYXlcIiAvPixcblx0XHR5ZWFyOiA8WWVhclZpZXcga2V5PVwieWVhclwiIC8+LFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiIGRhdGEtdGVzdGlkPVwiaWxhbXktY2FsZW5kYXJcIj5cblx0XHRcdDxIZWFkZXIgY2xhc3NOYW1lPVwicC0xXCIgLz5cblx0XHRcdHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZVByZXNlbmNlIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuXHRcdFx0PENhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBoLVtjYWxjKDEwMCUtMy41cmVtKV1cIlxuXHRcdFx0XHRcdGRpcmVjdGlvbj1cImhvcml6b250YWxcIlxuXHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e3ZpZXd9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImJvcmRlciBoLWZ1bGwgdy1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1ib2R5XCI+XG5cdFx0XHRcdFx0XHR7dmlld01hcFt2aWV3XX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHQ8L0NhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdDxFdmVudEZvcm1EaWFsb2cgLz5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgSWxhbXlDYWxlbmRhcjogUmVhY3QuRkM8SWxhbXlDYWxlbmRhclByb3BzPiA9ICh7XG5cdGV2ZW50cyxcblx0Zmlyc3REYXlPZldlZWsgPSAnc3VuZGF5Jyxcblx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRpbml0aWFsRGF0ZSxcblx0ZGF5TWF4RXZlbnRzID0gREFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzID0gZmFsc2UsXG5cdC4uLnByb3BzXG59KSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PENhbGVuZGFyUHJvdmlkZXJcblx0XHRcdGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfVxuXHRcdFx0ZXZlbnRTcGFjaW5nPXtldmVudFNwYWNpbmd9XG5cdFx0XHRldmVudHM9e25vcm1hbGl6ZUV2ZW50czxJbGFteUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50PihldmVudHMpfVxuXHRcdFx0Zmlyc3REYXlPZldlZWs9e1dFRUtfREFZU19OVU1CRVJfTUFQW2ZpcnN0RGF5T2ZXZWVrXX1cblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzPXtoaWRlTm9uQnVzaW5lc3NIb3Vyc31cblx0XHRcdGluaXRpYWxEYXRlPXtzYWZlRGF0ZShpbml0aWFsRGF0ZSl9XG5cdFx0XHRpbml0aWFsVmlldz17aW5pdGlhbFZpZXd9XG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyPXtzdGlja3lWaWV3SGVhZGVyfVxuXHRcdFx0dGltZUZvcm1hdD17dGltZUZvcm1hdH1cblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWU9e3ZpZXdIZWFkZXJDbGFzc05hbWV9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENhbGVuZGFyQ29udGVudCAvPlxuXHRcdDwvQ2FsZW5kYXJQcm92aWRlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgUmVzb3VyY2VFdmVudEdyaWRQcm9wcyB7XG5cdC8qKlxuXHQgKiBBcnJheSBvZiBkYXlzIHRvIGRpc3BsYXkgaW4gdGhlIGdyaWRcblx0ICovXG5cdGRheXM6IGRheWpzLkRheWpzW10gfCBkYXlqcy5EYXlqc1tdW11cblx0LyoqIFRoZSB0eXBlIG9mIGdyaWQgdG8gZGlzcGxheSAtICdkYXknIGZvciBkYXkgdmlldywgJ2hvdXInIGZvciB3ZWVrIHZpZXdcblx0ICogKGFmZmVjdHMgZXZlbnQgcG9zaXRpb25pbmcgbG9naWMpXG5cdCAqL1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdC8qKlxuXHQgKiBDaGlsZHJlbiB3aWxsIGJlIHJlbmRlcmVkIGFzIGhlYWRlcnMgYWJvdmUgdGhlIGdyaWRcblx0ICogKGUuZy4sIGZvciBkYXkgbmFtZXMgaW4gbW9udGggdmlldylcblx0ICovXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzZXM/OiB7IGhlYWRlcj86IHN0cmluZzsgYm9keT86IHN0cmluZzsgc2Nyb2xsPzogc3RyaW5nOyBjZWxsPzogc3RyaW5nIH1cbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlRXZlbnRHcmlkOiBSZWFjdC5GQzxSZXNvdXJjZUV2ZW50R3JpZFByb3BzPiA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdGNoaWxkcmVuLFxuXHRjbGFzc2VzLFxufSkgPT4ge1xuXHRjb25zdCB7IGdldFZpc2libGVSZXNvdXJjZXMgfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB2aXNpYmxlUmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cblx0Y29uc3QgY29sdW1ucyA9IGRheXMubWFwKChkYXkpID0+IHtcblx0XHRjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShkYXkpXG5cdFx0cmV0dXJuIHtcblx0XHRcdGlkOiBgY29sLSR7aXNBcnJheSA/IGRheVswXT8uZm9ybWF0KCdZWVlZLU1NLUREJykgOiBkYXkudG9JU09TdHJpbmcoKX1gLFxuXHRcdFx0ZGF5OiBpc0FycmF5ID8gdW5kZWZpbmVkIDogZGF5LFxuXHRcdFx0ZGF5czogaXNBcnJheSA/IGRheSA6IHVuZGVmaW5lZCxcblx0XHRcdGNsYXNzTmFtZTogY2xhc3Nlcz8uY2VsbCxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdH1cblx0fSlcblxuXHRjb25zdCByb3dzID0gdmlzaWJsZVJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdGlkOiByZXNvdXJjZS5pZCxcblx0XHR0aXRsZTogcmVzb3VyY2UudGl0bGUsXG5cdFx0cmVzb3VyY2U6IHJlc291cmNlLFxuXHRcdGNvbHVtbnMsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PEhvcml6b250YWxHcmlkXG5cdFx0XHRjbGFzc2VzPXtjbGFzc2VzfVxuXHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXswfVxuXHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0cm93cz17cm93c31cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9Ib3Jpem9udGFsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlIb3Jpem9udGFsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdHQsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHR0aW1lRm9ybWF0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdH0gPSB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0Ly8gR2VuZXJhdGUgdGltZSBjb2x1bW5zIChob3VybHkgc2xvdHMpXG5cdGNvbnN0IGRheUhvdXJzID0gZ2V0Vmlld0hvdXJzKHtcblx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGFsbERhdGVzOiBbY3VycmVudERhdGVdLFxuXHR9KVxuXG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlRXZlbnRHcmlkXG5cdFx0XHRjbGFzc2VzPXt7XG5cdFx0XHRcdGhlYWRlcjogJ21pbi13LWZ1bGwnLFxuXHRcdFx0XHRib2R5OiAnbWluLXctZnVsbCcsXG5cdFx0XHRcdGNlbGw6ICdtaW4tdy0yMCBmbGV4LTEnLFxuXHRcdFx0fX1cblx0XHRcdGRheXM9e2RheUhvdXJzfVxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctMjAgc206dy00MCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVzb3VyY2VzJyl9PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgZmxleCBmbGV4LWNvbFwiPlxuXHRcdFx0XHR7LyogVGltZSBoZWFkZXIgcm93ICovfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMlwiPlxuXHRcdFx0XHRcdHtkYXlIb3Vycy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGlzTm93SG91ciA9IGNvbC5pc1NhbWUoZGF5anMoKSwgJ2hvdXInKVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLWRheS1oZWFkZXItJHtjb2wudG9JU09TdHJpbmcoKX1gXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J21pbi13LTIwIGZsZXgtMSBib3JkZXItYiBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC14cyBzaHJpbmstMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc05vd0hvdXIgJiYgJ2JnLWJsdWUtNTAgdGV4dC1ibHVlLTYwMCBmb250LW1lZGl1bSdcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgcmVzb3VyY2UtZGF5LXRpbWUtbGFiZWwtJHtjb2wuZm9ybWF0KCdISCcpfWB9XG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2Ake2tleX0tYW5pbWF0ZWRgfVxuXHRcdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2Ake2tleX0tbW90aW9uYH1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcblx0XHRcdFx0XHRcdFx0XHRcdGhvdXI6ICdudW1lcmljJyxcblx0XHRcdFx0XHRcdFx0XHRcdGhvdXIxMjogdGltZUZvcm1hdCA9PT0gJzEyLWhvdXInLFxuXHRcdFx0XHRcdFx0XHRcdH0pLmZvcm1hdChjb2wudG9EYXRlKCkpfVxuXHRcdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1Jlc291cmNlRXZlbnRHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQWxsRGF5Q2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LWNlbGwnXG5pbXBvcnQgeyBBbGxEYXlSb3cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlWZXJ0aWNhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRnZXRWaXNpYmxlUmVzb3VyY2VzLFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0dGltZUZvcm1hdCxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHR9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHJlc291cmNlcyA9IGdldFZpc2libGVSZXNvdXJjZXMoKVxuXHRjb25zdCBob3VycyA9IGdldFZpZXdIb3Vycyh7XG5cdFx0cmVmZXJlbmNlRGF0ZTogY3VycmVudERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRhbGxEYXRlczogW2N1cnJlbnREYXRlXSxcblx0fSlcblxuXHRjb25zdCBmaXJzdENvbCA9IHtcblx0XHRpZDogJ3RpbWUtY29sJyxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRkYXlzOiBob3Vycyxcblx0XHRjbGFzc05hbWU6XG5cdFx0XHQnc2hyaW5rLTAgdy0xNiBtaW4tdy0xNiBtYXgtdy0xNiBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCcsXG5cdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0XHRub0V2ZW50czogdHJ1ZSxcblx0XHRyZW5kZXJDZWxsOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHAtMiB0ZXh0LXJpZ2h0IHRleHQtWzEwcHhdIHNtOnRleHQteHMgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cblx0XHRcdFx0e0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuXHRcdFx0XHRcdGhvdXI6ICdudW1lcmljJyxcblx0XHRcdFx0XHRob3VyMTI6IHRpbWVGb3JtYXQgPT09ICcxMi1ob3VyJyxcblx0XHRcdFx0fSkuZm9ybWF0KGRhdGUudG9EYXRlKCkpfVxuXHRcdFx0PC9kaXY+XG5cdFx0KSxcblx0fVxuXG5cdGNvbnN0IGNvbHVtbnMgPSByZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKHtcblx0XHRpZDogYGRheS1jb2wtJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX0tcmVzb3VyY2UtJHtyZXNvdXJjZS5pZH1gLFxuXHRcdHJlc291cmNlSWQ6IHJlc291cmNlLmlkLFxuXHRcdHJlc291cmNlLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGRheTogY3VycmVudERhdGUsXG5cdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8VmVydGljYWxHcmlkXG5cdFx0XHRhbGxEYXlSb3c9e1xuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsXCI+XG5cdFx0XHRcdFx0PEFsbERheUNlbGwgLz5cblx0XHRcdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+IChcblx0XHRcdFx0XHRcdDxBbGxEYXlSb3dcblx0XHRcdFx0XHRcdFx0Y2xhc3Nlcz17eyBjZWxsOiAnbWluLXctNTAnIH19XG5cdFx0XHRcdFx0XHRcdGRheXM9e1tjdXJyZW50RGF0ZV19XG5cdFx0XHRcdFx0XHRcdGtleT17YHJlc291cmNlLWFsbGRheS1yb3ctJHtyZXNvdXJjZS5pZH1gfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRcdHNob3dTcGFjZXI9e2ZhbHNlfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHR9XG5cdFx0XHRjZWxsU2xvdHM9e1swLCAxNSwgMzAsIDQ1XX1cblx0XHRcdGNsYXNzZXM9e3sgYm9keTogJ3ctZnVsbCcsIGhlYWRlcjogJ3ctZnVsbCcgfX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgLi4uY29sdW1uc119XG5cdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLWRheVwiXG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdD5cblx0XHRcdHsvKiBIZWFkZXIgKi99XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17J2ZsZXggYm9yZGVyLWIgaC0xMiBmbGV4LTEnfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLW1vbnRoLWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic2hyaW5rLTAgYm9yZGVyLXIgdy0xNiBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiIC8+XG5cdFx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKFxuXHRcdFx0XHRcdDxSZXNvdXJjZUNlbGxcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm1pbi13LTUwIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRrZXk9e2ByZXNvdXJjZS1jZWxsLSR7cmVzb3VyY2UuaWR9YH1cblx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpKX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZURheUhvcml6b250YWwgfSBmcm9tICcuL3Jlc291cmNlLWRheS1ob3Jpem9udGFsJ1xuaW1wb3J0IHsgUmVzb3VyY2VEYXlWZXJ0aWNhbCB9IGZyb20gJy4vcmVzb3VyY2UtZGF5LXZlcnRpY2FsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBvcmllbnRhdGlvbiB9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGlmIChvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuXHRcdHJldHVybiA8UmVzb3VyY2VEYXlWZXJ0aWNhbCAvPlxuXHR9XG5cblx0cmV0dXJuIDxSZXNvdXJjZURheUhvcml6b250YWwgLz5cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgUmVzb3VyY2VFdmVudEdyaWQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvcmVzb3VyY2UtZXZlbnQtZ3JpZCdcbmltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBnZXRNb250aERheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VNb250aEhvcml6b250YWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB0IH0gPSB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0Ly8gR2VuZXJhdGUgY2FsZW5kYXIgZ3JpZCAtIGRheXMgb2YgdGhlIG1vbnRoXG5cdGNvbnN0IG1vbnRoRGF5cyA9IHVzZU1lbW88ZGF5anMuRGF5anNbXT4oKCkgPT4ge1xuXHRcdHJldHVybiBnZXRNb250aERheXMoY3VycmVudERhdGUpXG5cdH0sIFtjdXJyZW50RGF0ZV0pXG5cblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VFdmVudEdyaWQgZGF5cz17bW9udGhEYXlzfT5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidy0yMCBzbTp3LTQwIGJvcmRlci1iIGJvcmRlci1yIHNocmluay0wIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXNvdXJjZXMnKX08L2Rpdj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHR7bW9udGhEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBrZXkgPSBgcmVzb3VyY2UtbW9udGgtaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9YFxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy0yMCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBmbGV4LWNvbFwiXG5cdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2Ake2tleX0tbW90aW9uYH1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1tZWRpdW1cIj57ZGF5LmZvcm1hdCgnRCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnZGRkJyl9XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJlc291cmNlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZU1vbnRoVmVydGljYWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBnZXRWaXNpYmxlUmVzb3VyY2VzIH0gPSB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgcmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cdGNvbnN0IHN0YXJ0T2ZNb250aCA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcblx0Y29uc3QgZGF5c0luTW9udGggPSBBcnJheS5mcm9tKFxuXHRcdHsgbGVuZ3RoOiBjdXJyZW50RGF0ZS5kYXlzSW5Nb250aCgpIH0sXG5cdFx0KF8sIGkpID0+IHN0YXJ0T2ZNb250aC5hZGQoaSwgJ2RheScpXG5cdClcblxuXHRjb25zdCBmaXJzdENvbCA9IHtcblx0XHRpZDogJ2RhdGUtY29sJyxcblx0XHRkYXlzOiBkYXlzSW5Nb250aCxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRjbGFzc05hbWU6XG5cdFx0XHQnc2hyaW5rLTAgdy0xNiBtaW4tdy0xNiBtYXgtdy0xNiBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCcsXG5cdFx0Z3JpZFR5cGU6ICdkYXknIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHQ8c3Bhbj57ZGF0ZS5mb3JtYXQoJ0QnKX08L3NwYW4+XG5cdFx0XHRcdDxzcGFuPntkYXRlLmZvcm1hdCgnZGRkJyl9PC9zcGFuPlxuXHRcdFx0PC9kaXY+XG5cdFx0KSxcblx0fVxuXG5cdGNvbnN0IGNvbHVtbnMgPSByZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKHtcblx0XHRpZDogYG1vbnRoLWNvbC1yZXNvdXJjZS0ke3Jlc291cmNlLmlkfWAsXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0cmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG5cdFx0ZGF5czogZGF5c0luTW9udGgsXG5cdFx0Z3JpZFR5cGU6ICdkYXknIGFzIGNvbnN0LFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGNsYXNzZXM9e3sgaGVhZGVyOiAndy1mdWxsJywgYm9keTogJ3ctZnVsbCcgfX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgLi4uY29sdW1uc119XG5cdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLW1vbnRoLXZlcnRpY2FsLWdyaWRcIlxuXHRcdD5cblx0XHRcdHsvKiBIZWFkZXIgKi99XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17J2ZsZXggYm9yZGVyLWIgaC0xMiBmbGV4LTEnfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLW1vbnRoLWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic2hyaW5rLTAgYm9yZGVyLXIgdy0xNiBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiIC8+XG5cdFx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKFxuXHRcdFx0XHRcdDxSZXNvdXJjZUNlbGxcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm1pbi13LTUwIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRrZXk9e2ByZXNvdXJjZS1jZWxsLSR7cmVzb3VyY2UuaWR9YH1cblx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpKX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbCB9IGZyb20gJy4vcmVzb3VyY2UtbW9udGgtaG9yaXpvbnRhbCdcbmltcG9ydCB7IFJlc291cmNlTW9udGhWZXJ0aWNhbCB9IGZyb20gJy4vcmVzb3VyY2UtbW9udGgtdmVydGljYWwnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZU1vbnRoVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgb3JpZW50YXRpb24gfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRpZiAob3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcpIHtcblx0XHRyZXR1cm4gPFJlc291cmNlTW9udGhWZXJ0aWNhbCAvPlxuXHR9XG5cblx0cmV0dXJuIDxSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbCAvPlxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrSG9yaXpvbnRhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHR0LFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0dGltZUZvcm1hdCxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHR9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdC8vIEdlbmVyYXRlIHdlZWsgZGF5c1xuXHRjb25zdCB3ZWVrRGF5cyA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKSxcblx0XHRbY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrXVxuXHQpXG5cblx0Ly8gR2VuZXJhdGUgdGltZSBjb2x1bW5zIChob3VybHkgc2xvdHMpXG5cdGNvbnN0IHdlZWtIb3VycyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdHJldHVybiB3ZWVrRGF5cy5tYXAoKGRheSkgPT5cblx0XHRcdGdldFZpZXdIb3Vycyh7XG5cdFx0XHRcdHJlZmVyZW5jZURhdGU6IGRheSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHR9KVxuXHRcdClcblx0fSwgW3dlZWtEYXlzLCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3Vyc10pXG5cblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VFdmVudEdyaWRcblx0XHRcdGNsYXNzZXM9e3tcblx0XHRcdFx0aGVhZGVyOiAnaC0yNCBtaW4tdy1mdWxsJyxcblx0XHRcdFx0Ym9keTogJ21pbi13LWZ1bGwnLFxuXHRcdFx0XHRjZWxsOiAnbWluLXctMjAgZmxleC0xJyxcblx0XHRcdH19XG5cdFx0XHRkYXlzPXt3ZWVrSG91cnN9XG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidy0yMCBzbTp3LTQwIGJvcmRlci1iIGJvcmRlci1yIHNocmluay0wIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXNvdXJjZXMnKX08L2Rpdj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBmbGV4IGZsZXgtY29sXCI+XG5cdFx0XHRcdHsvKiBEYXkgaGVhZGVyIHJvdyAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTJcIj5cblx0XHRcdFx0XHR7d2Vla0RheXMubWFwKChkYXksIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5Jylcblx0XHRcdFx0XHRcdGNvbnN0IGtleSA9IGByZXNvdXJjZS13ZWVrLWhlYWRlci0ke2RheS50b0lTT1N0cmluZygpfS1kYXlgXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J3Nocmluay0wIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBib3JkZXItYiBmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXIgZm9udC1tZWRpdW0nLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNUb2RheSAmJiAnYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS13ZWVrLWRheS1oZWFkZXJcIlxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInN0aWNreSBsZWZ0LTEvMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnTS9EJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBUaW1lIGhlYWRlciByb3cgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyIGJvcmRlci1iXCI+XG5cdFx0XHRcdFx0e3dlZWtIb3Vycy5mbGF0KCkubWFwKChjb2wsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpc05vd0hvdXIgPSBjb2wuaXNTYW1lKGRheWpzKCksICdob3VyJylcblx0XHRcdFx0XHRcdGNvbnN0IGtleSA9IGByZXNvdXJjZS13ZWVrLWhlYWRlci0ke2NvbC50b0lTT1N0cmluZygpfS1ob3VyYFxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdtaW4tdy0yMCBmbGV4LTEgYm9yZGVyLXIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC14cyBzaHJpbmstMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc05vd0hvdXIgJiYgJ2JnLWJsdWUtNTAgdGV4dC1ibHVlLTYwMCBmb250LW1lZGl1bSdcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgcmVzb3VyY2Utd2Vlay10aW1lLWxhYmVsLSR7Y29sLmZvcm1hdCgnSEgnKX1gfVxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDA1fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17YCR7a2V5fS1hbmltYXRlZGB9XG5cdFx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17YCR7a2V5fS1tb3Rpb25gfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuXHRcdFx0XHRcdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0aG91cjEyOiB0aW1lRm9ybWF0ID09PSAnMTItaG91cicsXG5cdFx0XHRcdFx0XHRcdFx0fSkuZm9ybWF0KGNvbC50b0RhdGUoKSl9XG5cdFx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH0pfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvUmVzb3VyY2VFdmVudEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbGxEYXlDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktY2VsbCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlV2Vla1ZlcnRpY2FsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHR0aW1lRm9ybWF0LFxuXHRcdHQsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0fSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCByZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblx0Ly8gR2VuZXJhdGUgd2VlayBkYXlzXG5cdGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspLFxuXHRcdFtjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCBob3VycyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdGdldFZpZXdIb3Vycyh7XG5cdFx0XHRcdHJlZmVyZW5jZURhdGU6IGN1cnJlbnREYXRlLFxuXHRcdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0YWxsRGF0ZXM6IHdlZWtEYXlzLFxuXHRcdFx0fSksXG5cdFx0W2N1cnJlbnREYXRlLCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3Vycywgd2Vla0RheXNdXG5cdClcblxuXHRjb25zdCBmaXJzdENvbCA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdGlkOiAndGltZS1jb2wnLFxuXHRcdFx0ZGF5czogaG91cnMsXG5cdFx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRcdGNsYXNzTmFtZTpcblx0XHRcdFx0J3Nocmluay0wIHctMTYgbWluLXctMTYgbWF4LXctMTYgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAnLFxuXHRcdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0XHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdFx0cmVuZGVyQ2VsbDogKGRhdGU6IGRheWpzLkRheWpzKSA9PiAoXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHAtMiB0ZXh0LXJpZ2h0IHRleHQtWzEwcHhdIHNtOnRleHQteHMgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cblx0XHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0XHRob3VyOiAnbnVtZXJpYycsXG5cdFx0XHRcdFx0XHRob3VyMTI6IHRpbWVGb3JtYXQgPT09ICcxMi1ob3VyJyxcblx0XHRcdFx0XHR9KS5mb3JtYXQoZGF0ZS50b0RhdGUoKSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KSxcblx0XHR9KSxcblx0XHRbaG91cnMsIGN1cnJlbnRMb2NhbGUsIHRpbWVGb3JtYXRdXG5cdClcblxuXHRjb25zdCBjb2x1bW5zID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0cmVzb3VyY2VzLmZsYXRNYXAoKHJlc291cmNlKSA9PlxuXHRcdFx0XHR3ZWVrRGF5cy5tYXAoKGRheSkgPT4gKHtcblx0XHRcdFx0XHRpZDogYGRheS1jb2wtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9LXJlc291cmNlLSR7cmVzb3VyY2UuaWR9YCxcblx0XHRcdFx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRcdFx0XHRyZXNvdXJjZSxcblx0XHRcdFx0XHRkYXksXG5cdFx0XHRcdFx0ZGF5czogaG91cnMubWFwKChoKSA9PlxuXHRcdFx0XHRcdFx0ZGF5LmhvdXIoaC5ob3VyKCkpLm1pbnV0ZSgwKS5zZWNvbmQoMCkubWlsbGlzZWNvbmQoMClcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0XHRcdH0pKVxuXHRcdFx0KSxcblx0XHRbcmVzb3VyY2VzLCB3ZWVrRGF5cywgaG91cnNdXG5cdClcblx0cmV0dXJuIChcblx0XHQ8VmVydGljYWxHcmlkXG5cdFx0XHRhbGxEYXlSb3c9e1xuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXhcIj5cblx0XHRcdFx0XHQ8QWxsRGF5Q2VsbCAvPlxuXHRcdFx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKFxuXHRcdFx0XHRcdFx0PEFsbERheVJvd1xuXHRcdFx0XHRcdFx0XHRjbGFzc2VzPXt7IGNlbGw6ICdtaW4tdy01MCcgfX1cblx0XHRcdFx0XHRcdFx0ZGF5cz17d2Vla0RheXN9XG5cdFx0XHRcdFx0XHRcdGtleT17YHJlc291cmNlLXdlZWstYWxsZGF5LXJvdy0ke3Jlc291cmNlLmlkfWB9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHRcdFx0c2hvd1NwYWNlcj17ZmFsc2V9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCkpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdH1cblx0XHRcdGNsYXNzZXM9e3sgaGVhZGVyOiAnaC0yNCcgfX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgLi4uY29sdW1uc119XG5cdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLXdlZWtcIlxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBmbGV4IGZsZXgtY29sXCI+XG5cdFx0XHRcdHsvKiBSZXNvdXJjZSBoZWFkZXIgcm93ICovfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMlwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic2hyaW5rLTAgdy0xNiBib3JkZXItciB6LTIwIGJnLWJhY2tncm91bmQgc3RpY2t5IGxlZnQtMFwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwicHgtMiBoLWZ1bGwgdy1mdWxsIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtZW5kIHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdHt0KCd3ZWVrJyl9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7cmVzb3VyY2UuaWR9LWRheWBcblxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHQnc2hyaW5rLTAgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXggaXRlbXMtY2VudGVyIHRleHQtY2VudGVyIGZvbnQtbWVkaXVtIHctW2NhbGMoNyp2YXIoLS1zcGFjaW5nKSo1MCldJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2Ake2tleX0tYW5pbWF0ZWRgfVxuXHRcdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2Ake2tleX0tbW90aW9uYH1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdDxSZXNvdXJjZUNlbGxcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtZnVsbCB3LWZ1bGwgZmxleC0xXCJcblx0XHRcdFx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInN0aWNreSBsZWZ0LTEvMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRydW5jYXRlXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtyZXNvdXJjZS50aXRsZX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDwvUmVzb3VyY2VDZWxsPlxuXHRcdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0ey8qIERhdGUgaGVhZGVyIHJvdyAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTJcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNocmluay0wIHctMTYgYm9yZGVyLXIgYm9yZGVyLWIgei0yMCBiZy1iYWNrZ3JvdW5kIHN0aWNreSBsZWZ0LTBcIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInB4LTIgaC1mdWxsIHctZnVsbCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLXN0YXJ0IGZvbnQtbWVkaXVtXCI+XG5cdFx0XHRcdFx0XHRcdHtjdXJyZW50RGF0ZS53ZWVrKCl9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0e2NvbHVtbnMubWFwKChjb2wsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBkYXkgPSBjb2wuZGF5XG5cdFx0XHRcdFx0XHRjb25zdCBrZXkgPSBgcmVzb3VyY2Utd2Vlay1oZWFkZXItJHtkYXkudG9JU09TdHJpbmcoKX0taG91ci0ke2NvbC5yZXNvdXJjZUlkfWBcblxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHQndy01MCBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgYm9yZGVyLWIgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC14cyBzaHJpbmstMCBiZy1iYWNrZ3JvdW5kJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2ByZXNvdXJjZS13ZWVrLXRpbWUtbGFiZWwtJHtkYXkuZm9ybWF0KCdISCcpfWB9XG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2Ake2tleX0tYW5pbWF0ZWRgfVxuXHRcdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2Ake2tleX0tbW90aW9uYH1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbVwiPntkYXkuZm9ybWF0KCdkZGQnKX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnTS9EJyl9XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH0pfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtIb3Jpem9udGFsIH0gZnJvbSAnLi9yZXNvdXJjZS13ZWVrLWhvcml6b250YWwnXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtWZXJ0aWNhbCB9IGZyb20gJy4vcmVzb3VyY2Utd2Vlay12ZXJ0aWNhbCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlV2Vla1ZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IG9yaWVudGF0aW9uIH0gPSB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKG9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XG5cdFx0cmV0dXJuIDxSZXNvdXJjZVdlZWtWZXJ0aWNhbCAvPlxuXHR9XG5cblx0cmV0dXJuIDxSZXNvdXJjZVdlZWtIb3Jpem9udGFsIC8+XG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IENhbGVuZGFyRG5kQ29udGV4dCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnLWFuZC1kcm9wL2NhbGVuZGFyLWRuZC1jb250ZXh0J1xuaW1wb3J0IHsgRXZlbnRGb3JtRGlhbG9nIH0gZnJvbSAnQC9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS1kaWFsb2cnXG5pbXBvcnQgeyBIZWFkZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvaGVhZGVyJ1xuaW1wb3J0IHsgUmVzb3VyY2VEYXlWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3J1xuaW1wb3J0IHsgUmVzb3VyY2VNb250aFZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldydcbmltcG9ydCB7IFJlc291cmNlV2Vla1ZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3J1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNhbGVuZGFyQm9keTogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgdmlldyB9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHZpZXdNYXAgPSB7XG5cdFx0bW9udGg6IDxSZXNvdXJjZU1vbnRoVmlldyBrZXk9XCJtb250aFwiIC8+LFxuXHRcdHdlZWs6IDxSZXNvdXJjZVdlZWtWaWV3IGtleT1cIndlZWtcIiAvPixcblx0XHRkYXk6IDxSZXNvdXJjZURheVZpZXcga2V5PVwiZGF5XCIgLz4sXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImlsYW15LXJlc291cmNlLWNhbGVuZGFyXCJcblx0XHQ+XG5cdFx0XHQ8SGVhZGVyIGNsYXNzTmFtZT1cInAtMVwiIC8+XG5cblx0XHRcdHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZWRTZWN0aW9uIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuXHRcdFx0PENhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBoLVtjYWxjKDEwMCUtMy41cmVtKV0gQGNvbnRhaW5lci9jYWxlbmRhci1ib2R5XCJcblx0XHRcdFx0XHRkaXJlY3Rpb249XCJob3Jpem9udGFsXCJcblx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXt2aWV3fVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJib3JkZXIgaC1mdWxsIHctZnVsbFwiIGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItYm9keVwiPlxuXHRcdFx0XHRcdFx0e3ZpZXdNYXBbdmlld119XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0PC9DYWxlbmRhckRuZENvbnRleHQ+XG5cblx0XHRcdHsvKiBFdmVudCBGb3JtIERpYWxvZyAqL31cblx0XHRcdDxFdmVudEZvcm1EaWFsb2cgLz5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJQcm92aWRlciB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHtcblx0SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcEV2ZW50LFxuXHRJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wcyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7XG5cdERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRXRUVLX0RBWVNfTlVNQkVSX01BUCxcbn0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgbm9ybWFsaXplRXZlbnRzLCBzYWZlRGF0ZSB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhckJvZHkgfSBmcm9tICcuL3Jlc291cmNlLWNhbGVuZGFyLWJvZHknXG5cbmV4cG9ydCBjb25zdCBJbGFteVJlc291cmNlQ2FsZW5kYXI6IFJlYWN0LkZDPElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BzPiA9ICh7XG5cdGV2ZW50cyA9IFtdLFxuXHRyZXNvdXJjZXMgPSBbXSxcblx0Zmlyc3REYXlPZldlZWsgPSAnc3VuZGF5Jyxcblx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRpbml0aWFsRGF0ZSxcblx0ZGlzYWJsZURyYWdBbmREcm9wID0gZmFsc2UsXG5cdGRheU1heEV2ZW50cyA9IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGV2ZW50U3BhY2luZyA9IEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHQuLi5wcm9wc1xufSkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXJcblx0XHRcdGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfVxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wPXtkaXNhYmxlRHJhZ0FuZERyb3B9XG5cdFx0XHRldmVudFNwYWNpbmc9e2V2ZW50U3BhY2luZ31cblx0XHRcdGV2ZW50cz17bm9ybWFsaXplRXZlbnRzPElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4oXG5cdFx0XHRcdGV2ZW50c1xuXHRcdFx0KX1cblx0XHRcdGZpcnN0RGF5T2ZXZWVrPXtXRUVLX0RBWVNfTlVNQkVSX01BUFtmaXJzdERheU9mV2Vla119XG5cdFx0XHRpbml0aWFsRGF0ZT17c2FmZURhdGUoaW5pdGlhbERhdGUpfVxuXHRcdFx0aW5pdGlhbFZpZXc9e2luaXRpYWxWaWV3fVxuXHRcdFx0cmVzb3VyY2VzPXtyZXNvdXJjZXN9XG5cdFx0XHR0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxSZXNvdXJjZUNhbGVuZGFyQm9k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LFNBQ0UsRUFBWSxLQUFLLEVBQ2pCLEVBQ0QsRUFDRCxFQUFRLElBQUksQ0FBQyxFQUFLLElBQVUsQ0FDNUIsSUFBTSxFQUFNLEVBQUksSUFDVixFQUFNLHdCQUF3QixFQUFJLFlBQVksVUFBVSxFQUFJLGFBRWxFLE9BQ0MsR0FhRSxFQWJGLENBQ0MsVUFBVyxFQUNWLGlIQUNELEVBQ0EsY0FBYSw0QkFBNEIsRUFBSSxPQUFPLElBQUksSUFDeEQsTUFBTyxFQUFRLEtBRWYsY0FBZSxHQUFHLFdBUG5CLFNBYUUsQ0FKRCxHQUE4QyxNQUE5QyxDQUFLLFVBQVUsVUFBZixTQUEwQixFQUFJLE9BQU8sS0FBSyxFQUFJLEVBQzlDLEdBRUUsTUFGRixDQUFLLFVBQVUsZ0NBQWYsU0FDRSxFQUFJLE9BQU8sS0FBSyxFQUNoQixJQU5HLEdBQUcsWUFPUCxFQUVILEdBQ0EsR0FDRCxFQUNELDRDQy9KRyxJQUFNLEdBQTZCLElBQU0sQ0FDL0MsSUFBUSxlQUFnQixFQUEyQixFQUVuRCxHQUFJLElBQWdCLFdBQ25CLE9BQU8sR0FBQyxHQUFELEVBQXNCLEVBRzlCLE9BQU8sR0FBQyxHQUFELEVBQXdCLHVEQ0Z6QixJQUFNLEdBQWlDLElBQU0sQ0FDbkQsSUFBUSxRQUFTLEVBQTJCLEVBUTVDLE9BQ0MsR0FxQkUsTUFyQkYsQ0FDQyxVQUFVLDhCQUNWLGNBQVksMEJBRmIsU0FxQkUsQ0FqQkQsR0FBQyxHQUFELENBQVEsVUFBVSxNQUFNLEVBR3hCLEdBVUUsR0FWRixVQUNDLEdBUUUsRUFSRixDQUNDLFVBQVUsd0RBQ1YsVUFBVSxhQUNWLGNBQWUsRUFIaEIsU0FLQyxHQUVFLE1BRkYsQ0FBSyxVQUFVLHVCQUF1QixjQUFZLGdCQUFsRCxTQXBCWSxDQUNmLE1BQU8sR0FBQyxHQUFELEdBQXVCLE9BQVEsRUFDdEMsS0FBTSxHQUFDLEdBQUQsR0FBc0IsTUFBTyxFQUNuQyxJQUFLLEdBQUMsR0FBRCxHQUFxQixLQUFNLENBQ2pDLEVBaUJjLEdBQ1IsRUFDRCxFQUNELEVBR0YsR0FBQyxHQUFELEVBQWlCLEdBQ2hCLDRDQzFCRyxJQUFNLEdBQThELEVBQzFFLFNBQVMsQ0FBQyxFQUNWLFlBQVksQ0FBQyxFQUNiLGlCQUFpQixTQUNqQixjQUFjLFFBQ2QsY0FDQSxxQkFBcUIsR0FDckIsZUFBZSxHQUNmLGFBQWEsVUFDYixlQUFlLE1BQ1osS0FDRSxDQUNMLE9BQ0MsR0FlRSxHQWZGLENBQ0MsYUFBYyxFQUNkLG1CQUFvQixFQUNwQixhQUFjLEVBQ2QsT0FBUSxHQUNQLENBQ0QsRUFDQSxlQUFnQixHQUFxQixHQUNyQyxZQUFhLEdBQVMsQ0FBVyxFQUNqQyxZQUFhLEVBQ2IsVUFBVyxFQUNYLFdBQVksS0FDUixFQVpMLFNBY0MsR0FBQyxHQUFELEVBQXNCLEVBQ3JCIiwKICAiZGVidWdJZCI6ICI0MkQ1OTAwM0VEQjZEQzlFNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
6
+ //# debugId=E58B077E9DDB781F64756E2164756E21
7
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2luZGV4LnRzIiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlci50cyIsICJzcmMvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnLnRzIiwgInNyYy9saWIvdXRpbHMvaW5kZXgudHMiLCAic3JjL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uLnRzeCIsICJzcmMvY29tcG9uZW50cy9kcmFnLWFuZC1kcm9wL2NhbGVuZGFyLWRuZC1jb250ZXh0LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9idXR0b24udHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2RpYWxvZy50c3giLCAic3JjL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0LnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQudHMiLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dC50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9wcm92aWRlci50c3giLCAic3JjL2hvb2tzL3VzZS1jYWxlbmRhci1lbmdpbmUudHMiLCAic3JjL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdC50cyIsICJzcmMvbGliL3V0aWxzL2RhdGUtdXRpbHMudHMiLCAic3JjL2xpYi9jb25zdGFudHMudHMiLCAic3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cudHN4IiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvZG5kLXV0aWxzLnRzIiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvZXZlbnQtZHJhZy1vdmVybGF5LnRzeCIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0udHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2NoZWNrYm94LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9kYXRlLXBpY2tlci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvY2FsZW5kYXIudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL3BvcG92ZXIudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2lucHV0LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9sYWJlbC50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL3RpbWUtcGlja2VyLnRzeCIsICJzcmMvaG9va3MvdXNlLWF1dG9jb21wbGV0ZS10aW1lcGlja2VyLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3Vycy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvZXZlbnQtZm9ybS11dGlscy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdG9yL3JlY3VycmVuY2UtZWRpdG9yLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYXJkLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zZWxlY3QudHN4IiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucy50cyIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nLnRzeCIsICJzcmMvY29tcG9uZW50cy9oZWFkZXIvYmFzZS1oZWFkZXIudHN4IiwgInNyYy9saWIvdXRpbHMvZXhwb3J0LWljYWwudHMiLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3RpdGxlLWNvbnRlbnQudHN4IiwgInNyYy9jb21wb25lbnRzL2hlYWRlci92aWV3LWNvbnRyb2xzLnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdy50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1yb3cudHN4IiwgInNyYy9jb21wb25lbnRzL2dyaWQtY2VsbC50c3giLCAic3JjL2NvbXBvbmVudHMvZGF5LW51bWJlci50c3giLCAic3JjL2NvbXBvbmVudHMvYWxsLWV2ZW50cy1kaWFsb2cudHN4IiwgInNyYy9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQudHN4IiwgInNyYy9jb21wb25lbnRzL2Ryb3BwYWJsZS1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLWV2ZW50cy1sYXllci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZFdlZWtFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi13ZWVrLWV2ZW50cy50cyIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1jb2wudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1ldmVudHMtbGF5ZXIudHN4IiwgInNyYy9jb21wb25lbnRzL2N1cnJlbnQtdGltZS1pbmRpY2F0b3IudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi1kYXktZXZlbnRzLnRzIiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1oZWFkZXItY29udGFpbmVyLnRzeCIsICJzcmMvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2RheS12aWV3LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L21vbnRoLXZpZXcudHN4IiwgInNyYy9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQtaGVhZGVyLWNvbnRhaW5lci50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9tb250aC1oZWFkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy93ZWVrLXZpZXcudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3llYXItdmlldy95ZWFyLXZpZXcudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhci50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvcmVzb3VyY2UtZXZlbnQtZ3JpZC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvcmVzb3VyY2UtZGF5LWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L3Jlc291cmNlLWRheS12ZXJ0aWNhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvaW5kZXgudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvcmVzb3VyY2UtbW9udGgtaG9yaXpvbnRhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9yZXNvdXJjZS1tb250aC12ZXJ0aWNhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3Jlc291cmNlLXdlZWstaG9yaXpvbnRhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3Jlc291cmNlLXdlZWstdmVydGljYWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvcmVzb3VyY2UtY2FsZW5kYXItYm9keS50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIudHN4Il0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIi8vIE1haW4gY2FsZW5kYXIgY29tcG9uZW50c1xuXG4vLyBSZS1leHBvcnQgcnJ1bGUuanMgdHlwZXMgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSB7IEZyZXF1ZW5jeSwgV2Vla2RheSB9IGZyb20gJ3JydWxlJ1xuZXhwb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbi8vIEV4cG9ydCB0eXBlc1xuZXhwb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG4vLyBSUlVMRS1iYXNlZCByZWN1cnJlbmNlIHN5c3RlbVxuZXhwb3J0IHtcblx0Z2VuZXJhdGVSZWN1cnJpbmdFdmVudHMsXG5cdGlzUmVjdXJyaW5nRXZlbnQsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5leHBvcnQgdHlwZSB7IEV2ZW50Rm9ybVByb3BzIH0gZnJvbSAnLi9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybSdcbmV4cG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCwgV2Vla0RheXMgfSBmcm9tICcuL2NvbXBvbmVudHMvdHlwZXMnXG5leHBvcnQgeyBJbGFteUNhbGVuZGFyIH0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LWNhbGVuZGFyJ1xuZXhwb3J0IHR5cGUgeyBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB9IGZyb20gJy4vZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuLy8gUHVibGljIGNhbGVuZGFyIGNvbnRleHQgaG9va3NcbmV4cG9ydCB7IHVzZUlsYW15Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5leHBvcnQgdHlwZSB7XG5cdENlbGxDbGlja0luZm8sXG5cdElsYW15Q2FsZW5kYXJQcm9wcyxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcbn0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmV4cG9ydCB0eXBlIHsgSWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHMgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXInXG5leHBvcnQgeyBJbGFteVJlc291cmNlQ2FsZW5kYXIgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXInXG5leHBvcnQgdHlwZSB7IFVzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHRSZXR1cm4gfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmV4cG9ydCB7IHVzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbi8vIFJlc291cmNlIGNhbGVuZGFyIHR5cGVzXG5leHBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmV4cG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnMgfSBmcm9tICcuL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdCdcbi8vIFRyYW5zbGF0aW9uIHN5c3RlbVxuZXhwb3J0IHR5cGUge1xuXHRUcmFuc2xhdGlvbktleSxcblx0VHJhbnNsYXRpb25zLFxuXHRUcmFuc2xhdG9yRnVuY3Rpb24sXG59IGZyb20gJy4vbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmV4cG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3LCBUaW1lRm9ybWF0IH0gZnJvbSAnLi90eXBlcydcbiIsCiAgICAiaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cydcbmltcG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgb21pdEtleXMsIHNhZmVEYXRlIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbi8qKlxuICogQ29udmVydHMgYSBEYXlqcyBvYmplY3QgdG8gYSBcIkZsb2F0aW5nIFRpbWVcIiBEYXRlIHJlcHJlc2VudGF0aW9uLlxuICogSW4gRmxvYXRpbmcgVGltZSwgd2UgdXNlIGEgVVRDIERhdGUgb2JqZWN0IGJ1dCBzZXQgaXRzIFVUQyBjb21wb25lbnRzXG4gKiB0byBtYXRjaCB0aGUgbG9jYWwgY29tcG9uZW50cyBvZiB0aGUgdXNlcidzIGRhdGUuXG4gKlxuICogVGhpcyBpcyBlc3NlbnRpYWwgZm9yIFJSdWxlIGV2YWx1YXRpb24gYmVjYXVzZSBpdCBlbnN1cmVzIHRoYXQgYSBydWxlXG4gKiBsaWtlIFwiRXZlcnkgV2VkbmVzZGF5XCIgcmVmZXJzIHRvIHRoZSB1c2VyJ3MgbG9jYWwgV2VkbmVzZGF5LCBldmVuIGlmXG4gKiB0aGF0IHRpbWUgZmFsbHMgb24gYSBUaHVyc2RheSBpbiBhY3R1YWwgVVRDLlxuICovXG5jb25zdCB0b0Zsb2F0aW5nRGF0ZSA9IChkOiBkYXlqcy5EYXlqcyk6IERhdGUgPT4ge1xuXHRyZXR1cm4gbmV3IERhdGUoXG5cdFx0RGF0ZS5VVEMoXG5cdFx0XHRkLnllYXIoKSxcblx0XHRcdGQubW9udGgoKSxcblx0XHRcdGQuZGF0ZSgpLFxuXHRcdFx0ZC5ob3VyKCksXG5cdFx0XHRkLm1pbnV0ZSgpLFxuXHRcdFx0ZC5zZWNvbmQoKSxcblx0XHRcdGQubWlsbGlzZWNvbmQoKVxuXHRcdClcblx0KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgXCJGbG9hdGluZyBUaW1lXCIgRGF0ZSBiYWNrIHRvIGEgRGF5anMgb2JqZWN0IGluIHRoZSBvcmlnaW5hbCBjb250ZXh0LlxuICogSXQgdGFrZXMgdGhlIFlNREhNUyBjb21wb25lbnRzIGZyb20gdGhlIFVUQyBEYXRlIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlXG4gKiByZWZlcmVuY2UgRGF5anMgb2JqZWN0IChwcmVzZXJ2aW5nIGl0cyB0aW1lem9uZS9sb2NhbGUpLlxuICovXG5jb25zdCBmcm9tRmxvYXRpbmdEYXRlID0gKGRhdGU6IERhdGUsIHJlZmVyZW5jZTogZGF5anMuRGF5anMpOiBkYXlqcy5EYXlqcyA9PiB7XG5cdHJldHVybiByZWZlcmVuY2Vcblx0XHQueWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkpXG5cdFx0Lm1vbnRoKGRhdGUuZ2V0VVRDTW9udGgoKSlcblx0XHQuZGF0ZShkYXRlLmdldFVUQ0RhdGUoKSlcblx0XHQuaG91cihkYXRlLmdldFVUQ0hvdXJzKCkpXG5cdFx0Lm1pbnV0ZShkYXRlLmdldFVUQ01pbnV0ZXMoKSlcblx0XHQuc2Vjb25kKGRhdGUuZ2V0VVRDU2Vjb25kcygpKVxuXHRcdC5taWxsaXNlY29uZChkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpKVxufVxuXG5leHBvcnQgY29uc3QgaXNSZWN1cnJpbmdFdmVudCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IGJvb2xlYW4gPT4ge1xuXHRyZXR1cm4gQm9vbGVhbihldmVudC5ycnVsZSB8fCBldmVudC5yZWN1cnJlbmNlSWQgfHwgZXZlbnQudWlkKVxufVxuXG5pbnRlcmZhY2UgR2VuZXJhdGVSZWN1cnJpbmdFdmVudHNQcm9wcyB7XG5cdGV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzdGFydERhdGU6IGRheWpzLkRheWpzXG5cdGVuZERhdGU6IGRheWpzLkRheWpzXG59XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyA9ICh7XG5cdGV2ZW50LFxuXHRjdXJyZW50RXZlbnRzLFxuXHRzdGFydERhdGUsXG5cdGVuZERhdGUsXG59OiBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Ly8gSWYgbm90IGEgcmVjdXJyaW5nIGV2ZW50LCByZXR1cm4gZW1wdHkgYXJyYXlcblx0aWYgKCFldmVudC5ycnVsZSkge1xuXHRcdHJldHVybiBbXVxuXHR9XG5cblx0dHJ5IHtcblx0XHQvLyBEVFNUQVJUIGFuZCBTRUFSQ0ggV0lORE9XIFRSQU5TRk9STUFUSU9OXG5cdFx0Ly8gVHJhbnNmb3JtIGFsbCBkYXRlcyB0byBcImZsb2F0aW5nIHRpbWVcIiAoVVRDIHdpdGggbG9jYWwgY29tcG9uZW50cylcblx0XHQvLyBUaGlzIGVuc3VyZXMgUlJ1bGUgZXZhbHVhdGVzIFwiV2VkbmVzZGF5XCIgYXMgdGhlIHVzZXIncyBsb2NhbCBXZWRuZXNkYXlcblx0XHRjb25zdCBmbG9hdGluZ1N0YXJ0ID0gdG9GbG9hdGluZ0RhdGUoZXZlbnQuc3RhcnQpXG5cdFx0Y29uc3QgZmxvYXRpbmdVbnRpbCA9IGV2ZW50LnJydWxlLnVudGlsXG5cdFx0XHQ/IHRvRmxvYXRpbmdEYXRlKGRheWpzKGV2ZW50LnJydWxlLnVudGlsKSlcblx0XHRcdDogdW5kZWZpbmVkXG5cblx0XHRjb25zdCBydWxlT3B0aW9uczogUlJ1bGVPcHRpb25zID0ge1xuXHRcdFx0Li4uZXZlbnQucnJ1bGUsXG5cdFx0XHRkdHN0YXJ0OiBmbG9hdGluZ1N0YXJ0LFxuXHRcdFx0dW50aWw6IGZsb2F0aW5nVW50aWwsXG5cdFx0fVxuXHRcdGNvbnN0IHJ1bGUgPSBuZXcgUlJ1bGUocnVsZU9wdGlvbnMpXG5cblx0XHRjb25zdCBvdmVycmlkZXMgPSBjdXJyZW50RXZlbnRzLmZpbHRlcihcblx0XHRcdChlKSA9PiBlLnJlY3VycmVuY2VJZCAmJiBlLnVpZCA9PT0gZXZlbnQudWlkXG5cdFx0KVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIGV2ZW50IGR1cmF0aW9uIHRvIGV4cGFuZCBzZWFyY2ggd2luZG93IGZvciBldmVudHMgdGhhdCBzcGFuIHRoZSByYW5nZVxuXHRcdGNvbnN0IGV2ZW50RHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcblxuXHRcdC8vIEV4cGFuZCBzZWFyY2ggd2luZG93IGJhY2t3YXJkIGJ5IGV2ZW50IGR1cmF0aW9uIHRvIGNhdGNoIGV2ZW50cyB0aGF0IHN0YXJ0IGJlZm9yZVxuXHRcdC8vIHRoZSByYW5nZSBidXQgc3BhbiBpbnRvIGl0XG5cdFx0Y29uc3QgZXhwYW5kZWRTdGFydERhdGVUaW1lID0gdG9GbG9hdGluZ0RhdGUoXG5cdFx0XHRzdGFydERhdGUuc3VidHJhY3QoZXZlbnREdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcblx0XHQpXG5cdFx0Y29uc3QgZW5kRGF0ZVRpbWUgPSB0b0Zsb2F0aW5nRGF0ZShlbmREYXRlKVxuXG5cdFx0Ly8gR2V0IGFsbCBvY2N1cnJlbmNlcyBpbiB0aGUgZXhwYW5kZWQgcmFuZ2Vcblx0XHRjb25zdCBvY2N1cnJlbmNlcyA9IHJ1bGUuYmV0d2VlbihleHBhbmRlZFN0YXJ0RGF0ZVRpbWUsIGVuZERhdGVUaW1lLCB0cnVlKVxuXG5cdFx0Ly8gQ29udmVydCBvY2N1cnJlbmNlcyB0byBDYWxlbmRhckV2ZW50IGluc3RhbmNlc1xuXHRcdGNvbnN0IHJlY3VycmluZ0V2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gb2NjdXJyZW5jZXNcblx0XHRcdC5tYXAoKG9jY3VycmVuY2UsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9jY3VycmVuY2VEYXRlID0gZnJvbUZsb2F0aW5nRGF0ZShvY2N1cnJlbmNlLCBldmVudC5zdGFydClcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmdPdmVycmlkZSA9IG92ZXJyaWRlcy5maW5kKChlKSA9PlxuXHRcdFx0XHRcdHNhZmVEYXRlKGUucmVjdXJyZW5jZUlkKT8uaXNTYW1lKG9jY3VycmVuY2VEYXRlKVxuXHRcdFx0XHQpXG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUncyBhbiBvdmVycmlkZSwgdXNlIGl0XG5cdFx0XHRcdGlmIChleGlzdGluZ092ZXJyaWRlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgLi4uZXZlbnQsIC4uLmV4aXN0aW5nT3ZlcnJpZGUgfVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSBkdXJhdGlvbiBmcm9tIHRoZSBvcmlnaW5hbCBldmVudFxuXHRcdFx0XHRjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gZXZlbnQuZW5kLmRpZmYoZXZlbnQuc3RhcnQpXG5cdFx0XHRcdGNvbnN0IG5ld0VuZFRpbWUgPSBvY2N1cnJlbmNlRGF0ZS5hZGQob3JpZ2luYWxEdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcblx0XHRcdFx0Y29uc3QgcmVjdXJyaW5nRXZlbnRJZCA9IGAke2V2ZW50LmlkfV8ke2luZGV4fWBcblx0XHRcdFx0Y29uc3QgcGFyZW50VUlEID0gZXZlbnQudWlkIHx8IGAke2V2ZW50LmlkfUBpbGFteS5jYWxlbmRhcmBcblxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIHJlY3VycmluZyBldmVudCBpbnN0YW5jZVxuXHRcdFx0XHRjb25zdCByZWN1cnJpbmdFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0XHRpZDogcmVjdXJyaW5nRXZlbnRJZCxcblx0XHRcdFx0XHRzdGFydDogb2NjdXJyZW5jZURhdGUsXG5cdFx0XHRcdFx0ZW5kOiBuZXdFbmRUaW1lLFxuXHRcdFx0XHRcdHVpZDogcGFyZW50VUlELCAvLyBTYW1lIFVJRCBhcyBwYXJlbnQgZm9yIHByb3BlciBncm91cGluZ1xuXHRcdFx0XHRcdHJydWxlOiB1bmRlZmluZWQsIC8vIEluc3RhbmNlIGV2ZW50cyBkb24ndCBoYXZlIFJSVUxFXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVjdXJyaW5nRXZlbnRcblx0XHRcdH0pXG5cdFx0XHQuZmlsdGVyKChyZWN1cnJpbmdFdmVudCkgPT4ge1xuXHRcdFx0XHQvLyBGaWx0ZXIgb3V0IEVYREFURSBleGNsdXNpb25zXG5cdFx0XHRcdGNvbnN0IGhhc0V4ZGF0ZXMgPSBldmVudC5leGRhdGVzICYmIGV2ZW50LmV4ZGF0ZXMubGVuZ3RoID4gMFxuXHRcdFx0XHRpZiAoaGFzRXhkYXRlcykge1xuXHRcdFx0XHRcdGNvbnN0IGV2ZW50U3RhcnRJU08gPSByZWN1cnJpbmdFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG5cdFx0XHRcdFx0Y29uc3QgaXNFeGNsdWRlZCA9IGV2ZW50LmV4ZGF0ZXMuaW5jbHVkZXMoZXZlbnRTdGFydElTTylcblx0XHRcdFx0XHRpZiAoaXNFeGNsdWRlZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRmlsdGVyIHRvIG9ubHkgaW5jbHVkZSBldmVudHMgdGhhdCBzcGFuIHRocm91Z2ggdGhlIG9yaWdpbmFsIHJlcXVlc3RlZCBkYXRlIHJhbmdlXG5cdFx0XHRcdC8vIEFuIGV2ZW50IHNwYW5zIHRoZSByYW5nZSBpZjogZXZlbnRfc3RhcnQgPCByYW5nZV9lbmQgQU5EIGV2ZW50X2VuZCA+IHJhbmdlX3N0YXJ0XG5cdFx0XHRcdC8vIFVzZSBpc1NhbWVPckJlZm9yZS9pc1NhbWVPckFmdGVyIHRvIGluY2x1ZGUgYm91bmRhcnkgY2FzZXNcblx0XHRcdFx0Y29uc3QgZXZlbnRTcGFuc1JhbmdlID1cblx0XHRcdFx0XHRyZWN1cnJpbmdFdmVudC5zdGFydC5pc1NhbWVPckJlZm9yZShlbmREYXRlKSAmJlxuXHRcdFx0XHRcdHJlY3VycmluZ0V2ZW50LmVuZC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSlcblxuXHRcdFx0XHRyZXR1cm4gZXZlbnRTcGFuc1JhbmdlXG5cdFx0XHR9KVxuXG5cdFx0cmV0dXJuIHJlY3VycmluZ0V2ZW50c1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIEhhbmRsZSBpbnZhbGlkIFJSVUxFIG9wdGlvbnNcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRgSW52YWxpZCBSUlVMRSBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KGV2ZW50LnJydWxlKX0uIEVycm9yOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcblx0XHQpXG5cdH1cbn1cblxuaW50ZXJmYWNlIFVwZGF0ZVJlY3VycmluZ0V2ZW50UHJvcHMge1xuXHR0YXJnZXRFdmVudDogQ2FsZW5kYXJFdmVudFxuXHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuXHR0YXJnZXRFdmVudCxcblx0dXBkYXRlcyxcblx0Y3VycmVudEV2ZW50cyxcblx0c2NvcGUsXG59OiBVcGRhdGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Y29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXG5cdC8vIEZpbmQgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50XG5cdGNvbnN0IGJhc2VFdmVudEluZGV4ID0gdXBkYXRlZEV2ZW50cy5maW5kSW5kZXgoKGUpID0+IHtcblx0XHRjb25zdCBwYXJlbnRVaWQgPSBlLnVpZCB8fCBgJHtlLmlkfUBpbGFteS5jYWxlbmRhcmBcblx0XHRyZXR1cm4gcGFyZW50VWlkID09PSB0YXJnZXRFdmVudC51aWQgJiYgZS5ycnVsZSAmJiAhZS5yZWN1cnJlbmNlSWRcblx0fSlcblxuXHRpZiAoYmFzZUV2ZW50SW5kZXggPT09IC0xKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdCYXNlIHJlY3VycmluZyBldmVudCBub3QgZm91bmQnKVxuXHR9XG5cblx0Y29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuXHRzd2l0Y2ggKHNjb3BlKSB7XG5cdFx0Y2FzZSAndGhpcyc6IHtcblx0XHRcdC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGJhc2UgZXZlbnQgYW5kIGNyZWF0ZSBzdGFuZGFsb25lIG1vZGlmaWVkIGV2ZW50XG5cdFx0XHRjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0Y29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cblx0XHRcdGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuXHRcdFx0Y29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHRleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuXG5cdFx0XHQvLyBDcmVhdGUgc3RhbmRhbG9uZSBtb2RpZmllZCBldmVudCB3aXRoIHJlY3VycmVuY2VJZFxuXHRcdFx0Y29uc3QgbW9kaWZpZWRFdmVudElkID0gYCR7dGFyZ2V0RXZlbnQuaWR9X21vZGlmaWVkXyR7RGF0ZS5ub3coKX1gXG5cdFx0XHRjb25zdCBtb2RpZmllZEV2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFRPRE86IGZpeCB0aGUgdHlwZXNcblx0XHRcdFx0Li4ub21pdEtleXModGFyZ2V0RXZlbnQsIFsnd2lkdGgnLCAnaGVpZ2h0JywgJ3RvcCcsICdsZWZ0JywgJ3JpZ2h0J10pLFxuXHRcdFx0XHQuLi51cGRhdGVzLFxuXHRcdFx0XHRpZDogbW9kaWZpZWRFdmVudElkLFxuXHRcdFx0XHRyZWN1cnJlbmNlSWQ6IHRhcmdldEV2ZW50U3RhcnRJU08sIC8vIFRoaXMgbWFya3MgaXQgYXMgYSBtb2RpZmllZCBpbnN0YW5jZVxuXHRcdFx0XHR1aWQ6IGJhc2VFdmVudC51aWQgfHwgYCR7YmFzZUV2ZW50LmlkfUBpbGFteS5jYWxlbmRhcmAsIC8vIEtlZXAgc2FtZSBVSUQgYXMgYmFzZSBldmVudCAoaUNhbGVuZGFyIHN0YW5kYXJkKVxuXHRcdFx0XHRycnVsZTogdW5kZWZpbmVkLCAvLyBTdGFuZGFsb25lIGV2ZW50cyBkb24ndCBoYXZlIFJSVUxFXG5cdFx0XHR9IGFzIENhbGVuZGFyRXZlbnRcblx0XHRcdHVwZGF0ZWRFdmVudHMucHVzaChtb2RpZmllZEV2ZW50KVxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdmb2xsb3dpbmcnOiB7XG5cdFx0XHQvLyBcIlRoaXMgYW5kIGZvbGxvd2luZ1wiIC0gVGVybWluYXRlIG9yaWdpbmFsIHNlcmllcyBhbmQgY3JlYXRlIG5ldyBzZXJpZXNcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSB0ZXJtaW5hdGlvbiBkYXRlOiBkYXkgYmVmb3JlIHRhcmdldCB3aXRoIGVuZCBvZiBkYXkgdGltZVxuXHRcdFx0Ly8gVGhpcyBlbnN1cmVzIHRoZSBsYXN0IG9jY3VycmVuY2UgYmVmb3JlIHRhcmdldCBpcyBpbmNsdWRlZCBpbiB0aGUgdGVybWluYXRlZCBzZXJpZXNcblx0XHRcdGNvbnN0IGRheUJlZm9yZVRhcmdldCA9IHRhcmdldEV2ZW50LnN0YXJ0LnN1YnRyYWN0KDEsICdkYXknKVxuXHRcdFx0Y29uc3QgdGVybWluYXRpb25EYXRlID0gZGF5QmVmb3JlVGFyZ2V0LmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXG5cdFx0XHQvLyBVcGRhdGUgb3JpZ2luYWwgc2VyaWVzIHdpdGggVU5USUwgdG8gZW5kIGJlZm9yZSB0YXJnZXQgZGF0ZVxuXHRcdFx0Y29uc3QgdGVybWluYXRlZEV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdHJydWxlOiB7XG5cdFx0XHRcdFx0Li4uYmFzZUV2ZW50LnJydWxlLFxuXHRcdFx0XHRcdHVudGlsOiB0ZXJtaW5hdGlvbkRhdGUsXG5cdFx0XHRcdH0sXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHRlcm1pbmF0ZWRFdmVudFxuXG5cdFx0XHQvLyBDcmVhdGUgbmV3IHNlcmllcyBzdGFydGluZyBmcm9tIHRhcmdldCBkYXRlXG5cdFx0XHRjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gYmFzZUV2ZW50LmVuZC5kaWZmKGJhc2VFdmVudC5zdGFydClcblx0XHRcdGNvbnN0IG5ld1Nlcmllc1N0YXJ0VGltZSA9IHVwZGF0ZXMuc3RhcnQgfHwgdGFyZ2V0RXZlbnQuc3RhcnRcblx0XHRcdGNvbnN0IG5ld1Nlcmllc0VuZFRpbWUgPVxuXHRcdFx0XHR1cGRhdGVzLmVuZCB8fCBuZXdTZXJpZXNTdGFydFRpbWUuYWRkKG9yaWdpbmFsRHVyYXRpb24pXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNJZCA9IGAke2Jhc2VFdmVudC5pZH1fZm9sbG93aW5nYFxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzVUlEID0gYCR7bmV3U2VyaWVzSWR9QGlsYW15LmNhbGVuZGFyYFxuXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHQuLi51cGRhdGVzLFxuXHRcdFx0XHRycnVsZToge1xuXHRcdFx0XHRcdC4uLmJhc2VFdmVudC5ycnVsZSxcblx0XHRcdFx0XHQuLi51cGRhdGVzLnJydWxlLFxuXHRcdFx0XHRcdGR0c3RhcnQ6IG5ld1Nlcmllc1N0YXJ0VGltZS50b0RhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0aWQ6IG5ld1Nlcmllc0lkLFxuXHRcdFx0XHR1aWQ6IG5ld1Nlcmllc1VJRCwgLy8gTmV3IFVJRCBmb3IgbmV3IHNlcmllc1xuXHRcdFx0XHRzdGFydDogbmV3U2VyaWVzU3RhcnRUaW1lLFxuXHRcdFx0XHRlbmQ6IG5ld1Nlcmllc0VuZFRpbWUsXG5cdFx0XHRcdHJlY3VycmVuY2VJZDogdW5kZWZpbmVkLCAvLyBUaGlzIGlzIGEgbmV3IGJhc2UgZXZlbnQsIG5vdCBhbiBpbnN0YW5jZVxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50cy5wdXNoKG5ld1Nlcmllc0V2ZW50KVxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdhbGwnOiB7XG5cdFx0XHQvLyBcIkFsbCBldmVudHNcIiAtIFVwZGF0ZSB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcblx0XHRcdGNvbnN0IHVwZGF0ZWRCYXNlRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0Li4udXBkYXRlcyxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG5cdFx0XHQpXG5cdH1cblxuXHRyZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuXG5pbnRlcmZhY2UgRGVsZXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG5cdHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgZGVsZXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuXHR0YXJnZXRFdmVudCxcblx0Y3VycmVudEV2ZW50cyxcblx0c2NvcGUsXG59OiBEZWxldGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Y29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXG5cdC8vIEZpbmQgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50XG5cdGNvbnN0IGJhc2VFdmVudEluZGV4ID0gdXBkYXRlZEV2ZW50cy5maW5kSW5kZXgoKGUpID0+IHtcblx0XHRjb25zdCBwYXJlbnRVaWQgPSBlLnVpZCB8fCBgJHtlLmlkfUBpbGFteS5jYWxlbmRhcmBcblx0XHRyZXR1cm4gcGFyZW50VWlkID09PSB0YXJnZXRFdmVudC51aWQgJiYgZS5ycnVsZSAmJiAhZS5yZWN1cnJlbmNlSWRcblx0fSlcblxuXHRpZiAoYmFzZUV2ZW50SW5kZXggPT09IC0xKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdCYXNlIHJlY3VycmluZyBldmVudCBub3QgZm91bmQnKVxuXHR9XG5cblx0Y29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuXHRzd2l0Y2ggKHNjb3BlKSB7XG5cdFx0Y2FzZSAndGhpcyc6IHtcblx0XHRcdC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGV4Y2x1ZGUgdGhpcyBvY2N1cnJlbmNlXG5cdFx0XHRjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0Y29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cblx0XHRcdGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuXHRcdFx0Y29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHsgLi4uYmFzZUV2ZW50LCBleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyB9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHVwZGF0ZWRCYXNlRXZlbnRcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y2FzZSAnZm9sbG93aW5nJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGFuZCBmb2xsb3dpbmdcIiAtIFRlcm1pbmF0ZSBzZXJpZXMgd2l0aCBVTlRJTCBiZWZvcmUgdGFyZ2V0IGRhdGVcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSB0ZXJtaW5hdGlvbiBkYXRlOiBkYXkgYmVmb3JlIHRhcmdldCB3aXRoIGVuZCBvZiBkYXkgdGltZVxuXHRcdFx0Ly8gVGhpcyBlbnN1cmVzIHRoZSBsYXN0IG9jY3VycmVuY2UgYmVmb3JlIHRhcmdldCBpcyBpbmNsdWRlZCBpbiB0aGUgdGVybWluYXRlZCBzZXJpZXNcblx0XHRcdGNvbnN0IGRheUJlZm9yZVRhcmdldCA9IHRhcmdldEV2ZW50LnN0YXJ0LnN1YnRyYWN0KDEsICdkYXknKVxuXHRcdFx0Y29uc3QgdGVybWluYXRpb25EYXRlID0gZGF5QmVmb3JlVGFyZ2V0LmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXG5cdFx0XHRjb25zdCB0ZXJtaW5hdGVkRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0cnJ1bGU6IHtcblx0XHRcdFx0XHQuLi5iYXNlRXZlbnQucnJ1bGUsXG5cdFx0XHRcdFx0dW50aWw6IHRlcm1pbmF0aW9uRGF0ZSxcblx0XHRcdFx0fSxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdGVybWluYXRlZEV2ZW50XG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGNhc2UgJ2FsbCc6IHtcblx0XHRcdC8vIFwiQWxsIGV2ZW50c1wiIC0gUmVtb3ZlIHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllc1xuXHRcdFx0Y29uc3QgZXZlbnRzV2l0aG91dFRhcmdldFNlcmllcyA9IHVwZGF0ZWRFdmVudHMuZmlsdGVyKFxuXHRcdFx0XHQoZSkgPT4gZS51aWQgIT09IHRhcmdldEV2ZW50LnVpZFxuXHRcdFx0KVxuXHRcdFx0cmV0dXJuIGV2ZW50c1dpdGhvdXRUYXJnZXRTZXJpZXNcblx0XHR9XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG5cdFx0XHQpXG5cdH1cblxuXHRyZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgaXNCZXR3ZWVuIGZyb20gJ2RheWpzL3BsdWdpbi9pc0JldHdlZW4uanMnXG5pbXBvcnQgaXNTYW1lT3JBZnRlciBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JBZnRlci5qcydcbmltcG9ydCBpc1NhbWVPckJlZm9yZSBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JCZWZvcmUuanMnXG5pbXBvcnQgbG9jYWxlRGF0YSBmcm9tICdkYXlqcy9wbHVnaW4vbG9jYWxlRGF0YS5qcydcbmltcG9ydCBtaW5NYXggZnJvbSAnZGF5anMvcGx1Z2luL21pbk1heC5qcydcbmltcG9ydCB0aW1lem9uZSBmcm9tICdkYXlqcy9wbHVnaW4vdGltZXpvbmUuanMnXG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMuanMnXG5pbXBvcnQgd2Vla2RheSBmcm9tICdkYXlqcy9wbHVnaW4vd2Vla2RheS5qcydcbmltcG9ydCB3ZWVrT2ZZZWFyIGZyb20gJ2RheWpzL3BsdWdpbi93ZWVrT2ZZZWFyLmpzJ1xuXG4vLyBFeHRlbmQgZGF5anMgd2l0aCBwbHVnaW5zXG5kYXlqcy5leHRlbmQod2Vla2RheSlcbmRheWpzLmV4dGVuZCh3ZWVrT2ZZZWFyKVxuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQWZ0ZXIpXG5kYXlqcy5leHRlbmQoaXNTYW1lT3JCZWZvcmUpXG5kYXlqcy5leHRlbmQoaXNCZXR3ZWVuKVxuZGF5anMuZXh0ZW5kKG1pbk1heClcbmRheWpzLmV4dGVuZCh0aW1lem9uZSlcbmRheWpzLmV4dGVuZCh1dGMpXG5kYXlqcy5leHRlbmQobG9jYWxlRGF0YSlcblxuZXhwb3J0IGRlZmF1bHQgZGF5anNcbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDbGFzc1ZhbHVlIH0gZnJvbSAnY2xzeCdcbmltcG9ydCB7IGNsc3ggfSBmcm9tICdjbHN4J1xuaW1wb3J0IHsgdHdNZXJnZSB9IGZyb20gJ3RhaWx3aW5kLW1lcmdlJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgZnVuY3Rpb24gY24oLi4uaW5wdXRzOiBDbGFzc1ZhbHVlW10pIHtcblx0cmV0dXJuIHR3TWVyZ2UoY2xzeChpbnB1dHMpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2FmZURhdGUoXG5cdGRhdGU6IGRheWpzLkRheWpzIHwgRGF0ZSB8IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogZGF5anMuRGF5anMgfCB1bmRlZmluZWQge1xuXHRpZiAoZGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZFxuXHR9XG5cdGlmIChkYXlqcy5pc0RheWpzKGRhdGUpKSB7XG5cdFx0cmV0dXJuIGRhdGVcblx0fVxuXHRjb25zdCBwYXJzZWREYXRlID0gZGF5anMoZGF0ZSlcblx0cmV0dXJuIHBhcnNlZERhdGUuaXNWYWxpZCgpID8gcGFyc2VkRGF0ZSA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgY29uc3Qgb21pdEtleXMgPSA8VCBleHRlbmRzIG9iamVjdCwgSyBleHRlbmRzIGtleW9mIFQ+KFxuXHRvYmo6IFQsXG5cdGtleXM6IEtbXVxuKTogT21pdDxULCBLPiA9PiB7XG5cdGNvbnN0IHJlc3VsdCA9IHsgLi4ub2JqIH1cblx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdGRlbGV0ZSByZXN1bHRba2V5XVxuXHR9XG5cdHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGNhbGVuZGFyIGV2ZW50cyBmcm9tIHB1YmxpYy1mYWNpbmcgZm9ybWF0IHRvIGludGVybmFsIGZvcm1hdC5cbiAqIENvbnZlcnRzIGZsZXhpYmxlIGRhdGUgdHlwZXMgKGRheWpzLCBEYXRlLCBzdHJpbmcpIHRvIHN0cmljdCBkYXlqcyBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBldmVudHMgLSBBcnJheSBvZiBjYWxlbmRhciBldmVudHMgd2l0aCBmbGV4aWJsZSBkYXRlIHR5cGVzXG4gKiBAcmV0dXJucyBOb3JtYWxpemVkIGFycmF5IG9mIGNhbGVuZGFyIGV2ZW50cyB3aXRoIGRheWpzIGRhdGVzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlZ3VsYXIgY2FsZW5kYXIgZXZlbnRzXG4gKiBjb25zdCBldmVudHMgPSBub3JtYWxpemVFdmVudHM8SWxhbXlDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4ocHJvcEV2ZW50cylcbiAqXG4gKiAvLyBSZXNvdXJjZSBjYWxlbmRhciBldmVudHNcbiAqIGNvbnN0IHJlc291cmNlRXZlbnRzID0gbm9ybWFsaXplRXZlbnRzPElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4ocHJvcEV2ZW50cylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUV2ZW50czxcblx0VElucHV0IGV4dGVuZHMge1xuXHRcdHN0YXJ0OiBkYXlqcy5EYXlqcyB8IERhdGUgfCBzdHJpbmdcblx0XHRlbmQ6IGRheWpzLkRheWpzIHwgRGF0ZSB8IHN0cmluZ1xuXHR9LFxuXHRUT3V0cHV0LFxuPihldmVudHM6IFRJbnB1dFtdIHwgdW5kZWZpbmVkKTogVE91dHB1dFtdIHtcblx0aWYgKCFldmVudHMgfHwgIWV2ZW50cy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gW11cblx0fVxuXG5cdHJldHVybiBldmVudHMubWFwKChldmVudCkgPT4ge1xuXHRcdHJldHVybiB7XG5cdFx0XHQuLi5ldmVudCxcblx0XHRcdHN0YXJ0OiBkYXlqcy5pc0RheWpzKGV2ZW50LnN0YXJ0KSA/IGV2ZW50LnN0YXJ0IDogZGF5anMoZXZlbnQuc3RhcnQpLFxuXHRcdFx0ZW5kOiBkYXlqcy5pc0RheWpzKGV2ZW50LmVuZCkgPyBldmVudC5lbmQgOiBkYXlqcyhldmVudC5lbmQpLFxuXHRcdH0gYXMgVE91dHB1dFxuXHR9KVxufVxuIiwKICAgICJpbXBvcnQge1xuXHRBbmltYXRlUHJlc2VuY2UsXG5cdHR5cGUgSFRNTE1vdGlvblByb3BzLFxuXHRtb3Rpb24sXG5cdHR5cGUgVmFyaWFudHMsXG59IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgQW5pbWF0ZWRTZWN0aW9uUHJvcHNcblx0ZXh0ZW5kcyBPbWl0PEhUTUxNb3Rpb25Qcm9wczwnZGl2Jz4sICdjaGlsZHJlbicgfCAnbGF5b3V0JyB8ICdsYXlvdXRJZCc+IHtcblx0Y2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxuXHR0cmFuc2l0aW9uS2V5OiBzdHJpbmdcblx0ZGVsYXk/OiBudW1iZXJcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGRpcmVjdGlvbj86ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCdcblx0bGF5b3V0PzogYm9vbGVhbiB8ICdwb3NpdGlvbicgfCAnc2l6ZScgfCAncHJlc2VydmUtYXNwZWN0J1xuXHRsYXlvdXRJZD86IHN0cmluZ1xuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG59XG5cbmNvbnN0IHZhcmlhbnRzOiBWYXJpYW50cyA9IHtcblx0aGlkZGVuOiAoeyBkaXJlY3Rpb24gfTogeyBkaXJlY3Rpb246ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgfSkgPT4gKHtcblx0XHRvcGFjaXR5OiAwLFxuXHRcdHg6IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gMTAgOiAwLFxuXHRcdHk6IGRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/IC0xMCA6IDAsXG5cdH0pLFxuXHR2aXNpYmxlOiAoeyBkZWxheSB9OiB7IGRlbGF5OiBudW1iZXIgfSkgPT4gKHtcblx0XHRvcGFjaXR5OiAxLFxuXHRcdHg6IDAsXG5cdFx0eTogMCxcblx0XHR0cmFuc2l0aW9uOiB7IGR1cmF0aW9uOiAwLjIsIGVhc2U6IFswLjQsIDAsIDAuMiwgMV0sIGRlbGF5IH0sXG5cdH0pLFxuXHRleGl0OiAoeyBkaXJlY3Rpb24gfTogeyBkaXJlY3Rpb246ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgfSkgPT4gKHtcblx0XHRvcGFjaXR5OiAwLFxuXHRcdHg6IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gLTEwIDogMCxcblx0XHR5OiBkaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcgPyAtMTAgOiAwLFxuXHRcdHRyYW5zaXRpb246IHsgZHVyYXRpb246IDAuMTUgfSxcblx0fSksXG59XG5cbmV4cG9ydCBjb25zdCBBbmltYXRlZFNlY3Rpb246IFJlYWN0LkZDPEFuaW1hdGVkU2VjdGlvblByb3BzPiA9ICh7XG5cdGNoaWxkcmVuLFxuXHR0cmFuc2l0aW9uS2V5LFxuXHRkZWxheSA9IDAsXG5cdGNsYXNzTmFtZSxcblx0ZGlyZWN0aW9uID0gJ3ZlcnRpY2FsJyxcblx0bGF5b3V0LFxuXHRsYXlvdXRJZCxcblx0J2RhdGEtdGVzdGlkJzogdGVzdElkLFxuXHRyZWYsXG5cdC4uLnByb3BzXG59KSA9PiAoXG5cdDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cblx0XHQ8bW90aW9uLmRpdlxuXHRcdFx0YW5pbWF0ZT1cInZpc2libGVcIlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignaW5saW5lLWJsb2NrIHctZnVsbCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRjdXN0b209e3sgZGVsYXksIGRpcmVjdGlvbiB9fVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e3Rlc3RJZH1cblx0XHRcdGV4aXQ9XCJleGl0XCJcblx0XHRcdGluaXRpYWw9XCJoaWRkZW5cIlxuXHRcdFx0a2V5PXt0cmFuc2l0aW9uS2V5fVxuXHRcdFx0bGF5b3V0PXtsYXlvdXR9XG5cdFx0XHRsYXlvdXRJZD17bGF5b3V0SWR9XG5cdFx0XHRyZWY9e3JlZn1cblx0XHRcdHZhcmlhbnRzPXt2YXJpYW50c31cblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9tb3Rpb24uZGl2PlxuXHQ8L0FuaW1hdGVQcmVzZW5jZT5cbilcblxuQW5pbWF0ZWRTZWN0aW9uLmRpc3BsYXlOYW1lID0gJ0FuaW1hdGVkU2VjdGlvbidcbiIsCiAgICAiaW1wb3J0IHR5cGUge1xuXHREcmFnQ2FuY2VsRXZlbnQsXG5cdERyYWdFbmRFdmVudCxcblx0RHJhZ1N0YXJ0RXZlbnQsXG59IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQge1xuXHREbmRDb250ZXh0LFxuXHRNb3VzZVNlbnNvcixcblx0cG9pbnRlcldpdGhpbixcblx0VG91Y2hTZW5zb3IsXG5cdHVzZVNlbnNvcixcblx0dXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXREaWFsb2cgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgaXNSZWN1cnJpbmdFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBnZXRVcGRhdGVkRXZlbnQgfSBmcm9tICcuL2RuZC11dGlscydcbmltcG9ydCB7IEV2ZW50RHJhZ092ZXJsYXkgfSBmcm9tICcuL2V2ZW50LWRyYWctb3ZlcmxheSdcblxuaW50ZXJmYWNlIENhbGVuZGFyRG5kQ29udGV4dFByb3BzIHtcblx0Y2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2FsZW5kYXJEbmRDb250ZXh0KHsgY2hpbGRyZW4gfTogQ2FsZW5kYXJEbmRDb250ZXh0UHJvcHMpIHtcblx0Y29uc3QgYWN0aXZlRXZlbnRSZWYgPSB1c2VSZWY8Q2FsZW5kYXJFdmVudD4obnVsbClcblx0Y29uc3QgZHJhZ092ZXJsYXlSZWYgPSB1c2VSZWY8e1xuXHRcdHNldEFjdGl2ZUV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0fT4obnVsbClcblxuXHRjb25zdCB7IHVwZGF0ZUV2ZW50LCB1cGRhdGVSZWN1cnJpbmdFdmVudCwgZGlzYWJsZURyYWdBbmREcm9wIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoe1xuXHRcdFx0dXBkYXRlRXZlbnQ6IGNvbnRleHQudXBkYXRlRXZlbnQsXG5cdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudDogY29udGV4dC51cGRhdGVSZWN1cnJpbmdFdmVudCxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcDogY29udGV4dC5kaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0fSkpXG5cblx0Ly8gU3RhdGUgZm9yIHJlY3VycmluZyBldmVudCBkaWFsb2dcblx0Y29uc3QgW3JlY3VycmluZ0RpYWxvZywgc2V0UmVjdXJyaW5nRGlhbG9nXSA9IHVzZVN0YXRlPHtcblx0XHRpc09wZW46IGJvb2xlYW5cblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+IHwgbnVsbFxuXHR9Pih7XG5cdFx0aXNPcGVuOiBmYWxzZSxcblx0XHRldmVudDogbnVsbCxcblx0XHR1cGRhdGVzOiBudWxsLFxuXHR9KVxuXG5cdC8vIENvbmZpZ3VyZSBzZW5zb3JzIHdpdGggcmVkdWNlZCBhY3RpdmF0aW9uIGNvbnN0cmFpbnRzIGZvciBlYXNpZXIgZHJhZ2dpbmdcblx0Y29uc3QgbW91c2VTZW5zb3IgPSB1c2VTZW5zb3IoTW91c2VTZW5zb3IsIHtcblx0XHQvLyBSZXF1aXJlIG1pbmltYWwgbW92ZW1lbnQgYmVmb3JlIGFjdGl2YXRpbmdcblx0XHRhY3RpdmF0aW9uQ29uc3RyYWludDoge1xuXHRcdFx0ZGlzdGFuY2U6IDIsXG5cdFx0fSxcblx0fSlcblxuXHRjb25zdCB0b3VjaFNlbnNvciA9IHVzZVNlbnNvcihUb3VjaFNlbnNvciwge1xuXHRcdC8vIFJlZHVjZSBkZWxheSBmb3IgdG91Y2ggZGV2aWNlc1xuXHRcdGFjdGl2YXRpb25Db25zdHJhaW50OiB7XG5cdFx0XHRkZWxheTogMTAwLFxuXHRcdFx0dG9sZXJhbmNlOiA1LFxuXHRcdH0sXG5cdH0pXG5cblx0Y29uc3Qgc2Vuc29ycyA9IHVzZVNlbnNvcnMobW91c2VTZW5zb3IsIHRvdWNoU2Vuc29yKVxuXG5cdC8vIEhlbHBlciBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBhY3R1YWwgZXZlbnQgdXBkYXRlXG5cdGNvbnN0IHBlcmZvcm1FdmVudFVwZGF0ZSA9IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdCkgPT4ge1xuXHRcdC8vIFZhbGlkYXRlIGlucHV0c1xuXHRcdGlmICghZXZlbnQgfHwgIWV2ZW50LmlkKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoIXVwZGF0ZXMgfHwgT2JqZWN0LmtleXModXBkYXRlcykubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoaXNSZWN1cnJpbmdFdmVudChldmVudCkpIHtcblx0XHRcdC8vIFNob3cgZGlhbG9nIGZvciByZWN1cnJpbmcgZXZlbnRzXG5cdFx0XHRzZXRSZWN1cnJpbmdEaWFsb2coe1xuXHRcdFx0XHRpc09wZW46IHRydWUsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHR1cGRhdGVzLFxuXHRcdFx0fSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRGlyZWN0bHkgdXBkYXRlIHJlZ3VsYXIgZXZlbnRzXG5cdFx0XHR1cGRhdGVFdmVudChldmVudC5pZCwgdXBkYXRlcylcblx0XHR9XG5cdH1cblxuXHQvLyBIYW5kbGUgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZyBjb25maXJtYXRpb25cblx0Y29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDb25maXJtID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0aWYgKCFyZWN1cnJpbmdEaWFsb2cuZXZlbnQgfHwgIXJlY3VycmluZ0RpYWxvZy51cGRhdGVzKSB7XG5cdFx0XHRzZXRSZWN1cnJpbmdEaWFsb2coeyBpc09wZW46IGZhbHNlLCBldmVudDogbnVsbCwgdXBkYXRlczogbnVsbCB9KVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50KHJlY3VycmluZ0RpYWxvZy5ldmVudCwgcmVjdXJyaW5nRGlhbG9nLnVwZGF0ZXMsIHtcblx0XHRcdFx0c2NvcGUsXG5cdFx0XHRcdGV2ZW50RGF0ZTogcmVjdXJyaW5nRGlhbG9nLmV2ZW50LnN0YXJ0LFxuXHRcdFx0fSlcblx0XHR9IGNhdGNoIHtcblx0XHRcdC8vIFNpbGVudGx5IGhhbmRsZSBlcnJvciBhbmQgcmVzZXQgZGlhbG9nIHN0YXRlXG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG5cdFx0fVxuXHR9XG5cblx0Ly8gSGFuZGxlIHJlY3VycmluZyBldmVudCBkaWFsb2cgY2xvc2Vcblx0Y29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDbG9zZSA9ICgpID0+IHtcblx0XHRzZXRSZWN1cnJpbmdEaWFsb2coeyBpc09wZW46IGZhbHNlLCBldmVudDogbnVsbCwgdXBkYXRlczogbnVsbCB9KVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ1N0YXJ0ID0gKGV2ZW50OiBEcmFnU3RhcnRFdmVudCkgPT4ge1xuXHRcdGNvbnN0IHsgYWN0aXZlIH0gPSBldmVudFxuXG5cdFx0Ly8gU2V0IHRoZSBhY3RpdmUgZXZlbnQgYmFzZWQgb24gdGhlIGV2ZW50IGRhdGFcblx0XHRpZiAoYWN0aXZlLmRhdGEuY3VycmVudD8udHlwZSA9PT0gJ2NhbGVuZGFyLWV2ZW50Jykge1xuXHRcdFx0ZHJhZ092ZXJsYXlSZWYuY3VycmVudD8uc2V0QWN0aXZlRXZlbnQoYWN0aXZlLmRhdGEuY3VycmVudC5ldmVudClcblx0XHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBhY3RpdmUuZGF0YS5jdXJyZW50LmV2ZW50XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ0VuZCA9IChldmVudDogRHJhZ0VuZEV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgdXBkYXRlZEV2ZW50ID0gZ2V0VXBkYXRlZEV2ZW50KGV2ZW50LCBhY3RpdmVFdmVudFJlZi5jdXJyZW50KVxuXHRcdGlmICh1cGRhdGVkRXZlbnQpIHtcblx0XHRcdGNvbnN0IHsgYWN0aXZlRXZlbnQsIHVwZGF0ZXMgfSA9IHVwZGF0ZWRFdmVudFxuXHRcdFx0cGVyZm9ybUV2ZW50VXBkYXRlKGFjdGl2ZUV2ZW50LCB1cGRhdGVzKVxuXHRcdH1cblxuXHRcdC8vIENsZWFyIHRoZSBhY3RpdmUgZXZlbnQgcmVmZXJlbmNlXG5cdFx0YWN0aXZlRXZlbnRSZWYuY3VycmVudCA9IG51bGxcblx0XHRkcmFnT3ZlcmxheVJlZi5jdXJyZW50Py5zZXRBY3RpdmVFdmVudChudWxsKVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ0NhbmNlbCA9IChfZXZlbnQ6IERyYWdDYW5jZWxFdmVudCkgPT4ge1xuXHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBudWxsXG5cdH1cblxuXHQvLyBJZiBkcmFnIGFuZCBkcm9wIGlzIGRpc2FibGVkLCBqdXN0IHJldHVybiBjaGlsZHJlbiB3aXRob3V0IERuZENvbnRleHRcblx0aWYgKGRpc2FibGVEcmFnQW5kRHJvcCkge1xuXHRcdHJldHVybiBjaGlsZHJlbiBhcyBSZWFjdC5SZWFjdEVsZW1lbnRcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxEbmRDb250ZXh0XG5cdFx0XHRcdGNvbGxpc2lvbkRldGVjdGlvbj17cG9pbnRlcldpdGhpbn1cblx0XHRcdFx0b25EcmFnQ2FuY2VsPXtoYW5kbGVEcmFnQ2FuY2VsfVxuXHRcdFx0XHRvbkRyYWdFbmQ9e2hhbmRsZURyYWdFbmR9XG5cdFx0XHRcdG9uRHJhZ1N0YXJ0PXtoYW5kbGVEcmFnU3RhcnR9XG5cdFx0XHRcdHNlbnNvcnM9e3NlbnNvcnN9XG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PEV2ZW50RHJhZ092ZXJsYXkgcmVmPXtkcmFnT3ZlcmxheVJlZn0gLz5cblx0XHRcdDwvRG5kQ29udGV4dD5cblxuXHRcdFx0ey8qIFJlY3VycmluZyBldmVudCBlZGl0IGRpYWxvZyAqL31cblx0XHRcdDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuXHRcdFx0XHRldmVudFRpdGxlPXtyZWN1cnJpbmdEaWFsb2cuZXZlbnQ/LnRpdGxlIHx8ICcnfVxuXHRcdFx0XHRpc09wZW49e3JlY3VycmluZ0RpYWxvZy5pc09wZW59XG5cdFx0XHRcdG9uQ2xvc2U9e2hhbmRsZVJlY3VycmluZ0V2ZW50Q2xvc2V9XG5cdFx0XHRcdG9uQ29uZmlybT17aGFuZGxlUmVjdXJyaW5nRXZlbnRDb25maXJtfVxuXHRcdFx0XHRvcGVyYXRpb25UeXBlPVwiZWRpdFwiXG5cdFx0XHQvPlxuXHRcdDwvPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IFNsb3QgfSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2xvdCdcbmltcG9ydCB0eXBlIHsgVmFyaWFudFByb3BzIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5J1xuaW1wb3J0IHsgY3ZhIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgYnV0dG9uVmFyaWFudHMgPSBjdmEoXG5cdFwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHdoaXRlc3BhY2Utbm93cmFwIHJvdW5kZWQtbWQgdGV4dC1zbSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWFsbCBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNCBzaHJpbmstMCBbJl9zdmddOnNocmluay0wIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmVcIixcblx0e1xuXHRcdHZhcmlhbnRzOiB7XG5cdFx0XHR2YXJpYW50OiB7XG5cdFx0XHRcdGRlZmF1bHQ6ICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXByaW1hcnkvOTAnLFxuXHRcdFx0XHRkZXN0cnVjdGl2ZTpcblx0XHRcdFx0XHQnYmctZGVzdHJ1Y3RpdmUgdGV4dC13aGl0ZSBob3ZlcjpiZy1kZXN0cnVjdGl2ZS85MCBmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazpmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvNDAgZGFyazpiZy1kZXN0cnVjdGl2ZS82MCcsXG5cdFx0XHRcdG91dGxpbmU6XG5cdFx0XHRcdFx0J2JvcmRlciBiZy1iYWNrZ3JvdW5kIHNoYWRvdy14cyBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmJnLWlucHV0LzMwIGRhcms6Ym9yZGVyLWlucHV0IGRhcms6aG92ZXI6YmctaW5wdXQvNTAnLFxuXHRcdFx0XHRzZWNvbmRhcnk6XG5cdFx0XHRcdFx0J2JnLXNlY29uZGFyeSB0ZXh0LXNlY29uZGFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXNlY29uZGFyeS84MCcsXG5cdFx0XHRcdGdob3N0OlxuXHRcdFx0XHRcdCdob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmhvdmVyOmJnLWFjY2VudC81MCcsXG5cdFx0XHRcdGxpbms6ICd0ZXh0LXByaW1hcnkgdW5kZXJsaW5lLW9mZnNldC00IGhvdmVyOnVuZGVybGluZScsXG5cdFx0XHR9LFxuXHRcdFx0c2l6ZToge1xuXHRcdFx0XHRkZWZhdWx0OiAnaC05IHB4LTQgcHktMiBoYXMtWz5zdmddOnB4LTMnLFxuXHRcdFx0XHRzbTogJ2gtOCByb3VuZGVkLW1kIGdhcC0xLjUgcHgtMyBoYXMtWz5zdmddOnB4LTIuNScsXG5cdFx0XHRcdGxnOiAnaC0xMCByb3VuZGVkLW1kIHB4LTYgaGFzLVs+c3ZnXTpweC00Jyxcblx0XHRcdFx0aWNvbjogJ3NpemUtOScsXG5cdFx0XHRcdCdpY29uLXNtJzogJ3NpemUtOCcsXG5cdFx0XHRcdCdpY29uLWxnJzogJ3NpemUtMTAnLFxuXHRcdFx0fSxcblx0XHR9LFxuXHRcdGRlZmF1bHRWYXJpYW50czoge1xuXHRcdFx0dmFyaWFudDogJ2RlZmF1bHQnLFxuXHRcdFx0c2l6ZTogJ2RlZmF1bHQnLFxuXHRcdH0sXG5cdH1cbilcblxuZnVuY3Rpb24gQnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHR2YXJpYW50LFxuXHRzaXplLFxuXHRhc0NoaWxkID0gZmFsc2UsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczwnYnV0dG9uJz4gJlxuXHRWYXJpYW50UHJvcHM8dHlwZW9mIGJ1dHRvblZhcmlhbnRzPiAmIHtcblx0XHRhc0NoaWxkPzogYm9vbGVhblxuXHR9KSB7XG5cdGNvbnN0IENvbXAgPSBhc0NoaWxkID8gU2xvdCA6ICdidXR0b24nXG5cblx0cmV0dXJuIChcblx0XHQ8Q29tcFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihidXR0b25WYXJpYW50cyh7IHZhcmlhbnQsIHNpemUsIGNsYXNzTmFtZSB9KSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJidXR0b25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHsgQnV0dG9uLCBidXR0b25WYXJpYW50cyB9XG4iLAogICAgImltcG9ydCAqIGFzIERpYWxvZ1ByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtZGlhbG9nJ1xuaW1wb3J0IHsgWEljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBEaWFsb2coe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cImRpYWxvZ1wiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nVHJpZ2dlcih7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlRyaWdnZXI+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwiZGlhbG9nLXRyaWdnZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ1BvcnRhbCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlBvcnRhbD4pIHtcblx0cmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Nsb3NlKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ2xvc2U+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLkNsb3NlIGRhdGEtc2xvdD1cImRpYWxvZy1jbG9zZVwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nT3ZlcmxheSh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuT3ZlcmxheT4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUHJpbWl0aXZlLk92ZXJsYXlcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBmaXhlZCBpbnNldC0wIHotNTAgYmctYmxhY2svNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctb3ZlcmxheVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dDb250ZW50KHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ29udGVudD4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIj5cblx0XHRcdDxEaWFsb2dPdmVybGF5IC8+XG5cdFx0XHQ8RGlhbG9nUHJpbWl0aXZlLkNvbnRlbnRcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnYmctYmFja2dyb3VuZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZml4ZWQgdG9wLVs1MCVdIGxlZnQtWzUwJV0gei01MCBncmlkIHctZnVsbCBtYXgtdy1bY2FsYygxMDAlLTJyZW0pXSB0cmFuc2xhdGUteC1bLTUwJV0gdHJhbnNsYXRlLXktWy01MCVdIGdhcC00IHJvdW5kZWQtbGcgYm9yZGVyIHAtNiBzaGFkb3ctbGcgZHVyYXRpb24tMjAwIHNtOm1heC13LWxnIG1heC1oLVs5MCVdJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWNvbnRlbnRcIlxuXHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PERpYWxvZ1ByaW1pdGl2ZS5DbG9zZSBjbGFzc05hbWU9XCJyaW5nLW9mZnNldC1iYWNrZ3JvdW5kIGZvY3VzOnJpbmctcmluZyBkYXRhLVtzdGF0ZT1vcGVuXTpiZy1hY2NlbnQgZGF0YS1bc3RhdGU9b3Blbl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGFic29sdXRlIHRvcC00IHJpZ2h0LTQgcm91bmRlZC14cyBvcGFjaXR5LTcwIHRyYW5zaXRpb24tb3BhY2l0eSBob3ZlcjpvcGFjaXR5LTEwMCBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1vZmZzZXQtMiBmb2N1czpvdXRsaW5lLWhpZGRlbiBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNFwiPlxuXHRcdFx0XHRcdDxYSWNvbiAvPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cblx0XHRcdFx0PC9EaWFsb2dQcmltaXRpdmUuQ2xvc2U+XG5cdFx0XHQ8L0RpYWxvZ1ByaW1pdGl2ZS5Db250ZW50PlxuXHRcdDwvRGlhbG9nUG9ydGFsPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0hlYWRlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LWNvbCBnYXAtMiB0ZXh0LWNlbnRlciBzbTp0ZXh0LWxlZnQnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWhlYWRlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dGb290ZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgc206ZmxleC1yb3cgc206anVzdGlmeS1lbmQnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctZm9vdGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ1RpdGxlKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5UaXRsZT4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUHJpbWl0aXZlLlRpdGxlXG5cdFx0XHRjbGFzc05hbWU9e2NuKCd0ZXh0LWxnIGxlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy10aXRsZVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dEZXNjcmlwdGlvbih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuRGVzY3JpcHRpb24+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20nLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWRlc2NyaXB0aW9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ2xvc2UsXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0Rlc2NyaXB0aW9uLFxuXHREaWFsb2dGb290ZXIsXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nT3ZlcmxheSxcblx0RGlhbG9nUG9ydGFsLFxuXHREaWFsb2dUaXRsZSxcblx0RGlhbG9nVHJpZ2dlcixcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcblxuLyoqXG4gKiBHZW5lcmljIGhvb2sgdGhhdCBkZXRlY3RzIHdoaWNoIGNhbGVuZGFyIGNvbnRleHQgaXMgYXZhaWxhYmxlIGFuZCByZXR1cm5zIHNlbGVjdGVkIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0PFQ+KHNlbGVjdG9yOiAoY29udGV4dCkgPT4gVCk6IFQge1xuXHQvLyBDaGVjayBib3RoIGNvbnRleHRzIHVzaW5nIHVzZUNvbnRleHQgZGlyZWN0bHkgKG5vIGhvb2tzKVxuXHRjb25zdCByZXNvdXJjZUNvbnRleHQgPSB1c2VDb250ZXh0KFJlc291cmNlQ2FsZW5kYXJDb250ZXh0KVxuXHRjb25zdCByZWd1bGFyQ29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuXG5cdGlmIChyZXNvdXJjZUNvbnRleHQpIHtcblx0XHRyZXR1cm4gc2VsZWN0b3IocmVzb3VyY2VDb250ZXh0KVxuXHR9XG5cblx0aWYgKHJlZ3VsYXJDb250ZXh0KSB7XG5cdFx0cmV0dXJuIHNlbGVjdG9yKHJlZ3VsYXJDb250ZXh0KVxuXHR9XG5cblx0Ly8gSWYgbmVpdGhlciBjb250ZXh0IGlzIGF2YWlsYWJsZSwgdGhyb3cgYW4gZXJyb3Jcblx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdCd1c2VTbWFydENhbGVuZGFyQ29udGV4dCBtdXN0IGJlIHVzZWQgd2l0aGluIGEgQ2FsZW5kYXJQcm92aWRlciBvciBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXInXG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBFdmVudEZvcm1Qcm9wcyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7XG5cdENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlLFxuXHRDZWxsQ2xpY2tJbmZvLFxuXHRSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdE9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25LZXkgfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldywgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJDb250ZXh0VHlwZSB7XG5cdGN1cnJlbnREYXRlOiBkYXlqcy5EYXlqc1xuXHR2aWV3OiBDYWxlbmRhclZpZXdcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmF3RXZlbnRzOiBDYWxlbmRhckV2ZW50W10gLy8gVW5wcm9jZXNzZWQgZXZlbnRzIGZvciBleHBvcnRcblx0aXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG5cdHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHNlbGVjdGVkRGF0ZTogZGF5anMuRGF5anMgfCBudWxsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIgLy8gMCBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cblx0c2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcblx0c2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0dG9kYXk6ICgpID0+IHZvaWRcblx0YWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHR1cGRhdGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnQ6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0ZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdG9wZW5FdmVudEZvcm06IChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG5cdGdldEV2ZW50c0ZvckRhdGVSYW5nZTogKFxuXHRcdHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsXG5cdFx0ZW5kRGF0ZTogZGF5anMuRGF5anNcblx0KSA9PiBDYWxlbmRhckV2ZW50W11cblx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0b25FdmVudENsaWNrOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DZWxsQ2xpY2s6IChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB2b2lkXG5cdGN1cnJlbnRMb2NhbGU/OiBzdHJpbmdcblx0ZGlzYWJsZUNlbGxDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZUV2ZW50Q2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVEcmFnQW5kRHJvcD86IGJvb2xlYW5cblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0ZXZlbnRTcGFjaW5nOiBudW1iZXJcblx0c3RpY2t5Vmlld0hlYWRlcjogYm9vbGVhblxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lOiBzdHJpbmdcblx0aGVhZGVyQ29tcG9uZW50PzogUmVhY3QuUmVhY3ROb2RlIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY29tcG9uZW50XG5cdGhlYWRlckNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNsYXNzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHJlbmRlckV2ZW50Rm9ybT86IChwcm9wczogRXZlbnRGb3JtUHJvcHMpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHQvLyBUcmFuc2xhdGlvbiBmdW5jdGlvblxuXHR0OiAoa2V5OiBUcmFuc2xhdGlvbktleSkgPT4gc3RyaW5nXG5cdHRpbWVGb3JtYXQ6IFRpbWVGb3JtYXRcblx0Y2xhc3Nlc092ZXJyaWRlPzogQ2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGVcblx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3I/OiAoXG5cdFx0cHJvcHM6IFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHNcblx0KSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBDYWxlbmRhckNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8Q2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4gPVxuXHRjcmVhdGVDb250ZXh0PENhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuZXhwb3J0IGNvbnN0IHVzZUNhbGVuZGFyQ29udGV4dCA9ICgpOiBDYWxlbmRhckNvbnRleHRUeXBlID0+IHtcblx0Y29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuXHRpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCd1c2VDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIENhbGVuZGFyUHJvdmlkZXInKVxuXHR9XG5cdHJldHVybiBjb250ZXh0XG59XG5cbi8qKlxuICogU2ltcGxpZmllZCBjYWxlbmRhciBjb250ZXh0IHR5cGUgZm9yIGV4dGVybmFsIHVzZVxuICogQ29udGFpbnMgb25seSB0aGUgbW9zdCBjb21tb25seSB1c2VkIGNhbGVuZGFyIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB7XG5cdHJlYWRvbmx5IGN1cnJlbnREYXRlOiBkYXlqcy5EYXlqc1xuXHRyZWFkb25seSB2aWV3OiBDYWxlbmRhclZpZXdcblx0cmVhZG9ubHkgZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmVhZG9ubHkgaXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG5cdHJlYWRvbmx5IHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHJlYWRvbmx5IHNlbGVjdGVkRGF0ZTogZGF5anMuRGF5anMgfCBudWxsXG5cdHJlYWRvbmx5IGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcblx0cmVhZG9ubHkgc2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRyZWFkb25seSBzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcblx0cmVhZG9ubHkgc2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRyZWFkb25seSBuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHJlYWRvbmx5IHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgdG9kYXk6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgYWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRyZWFkb25seSB1cGRhdGVFdmVudDogKFxuXHRcdGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcixcblx0XHRldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHQpID0+IHZvaWRcblx0cmVhZG9ubHkgZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0cmVhZG9ubHkgb3BlbkV2ZW50Rm9ybTogKGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0cmVhZG9ubHkgY2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgYnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbn1cblxuZXhwb3J0IGNvbnN0IHVzZUlsYW15Q2FsZW5kYXJDb250ZXh0ID0gKCk6IFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuID0+IHtcblx0Y29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuXHRpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0J3VzZUlsYW15Q2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBDYWxlbmRhclByb3ZpZGVyJ1xuXHRcdClcblx0fVxuXHRyZXR1cm4ge1xuXHRcdGN1cnJlbnREYXRlOiBjb250ZXh0LmN1cnJlbnREYXRlLFxuXHRcdHZpZXc6IGNvbnRleHQudmlldyxcblx0XHRldmVudHM6IGNvbnRleHQuZXZlbnRzLFxuXHRcdGlzRXZlbnRGb3JtT3BlbjogY29udGV4dC5pc0V2ZW50Rm9ybU9wZW4sXG5cdFx0c2VsZWN0ZWRFdmVudDogY29udGV4dC5zZWxlY3RlZEV2ZW50LFxuXHRcdHNlbGVjdGVkRGF0ZTogY29udGV4dC5zZWxlY3RlZERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWs6IGNvbnRleHQuZmlyc3REYXlPZldlZWssXG5cdFx0c2V0Q3VycmVudERhdGU6IGNvbnRleHQuc2V0Q3VycmVudERhdGUsXG5cdFx0c2VsZWN0RGF0ZTogY29udGV4dC5zZWxlY3REYXRlLFxuXHRcdHNldFZpZXc6IGNvbnRleHQuc2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kOiBjb250ZXh0Lm5leHRQZXJpb2QsXG5cdFx0cHJldlBlcmlvZDogY29udGV4dC5wcmV2UGVyaW9kLFxuXHRcdHRvZGF5OiBjb250ZXh0LnRvZGF5LFxuXHRcdGFkZEV2ZW50OiBjb250ZXh0LmFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50OiBjb250ZXh0LmRlbGV0ZUV2ZW50LFxuXHRcdG9wZW5FdmVudEZvcm06IGNvbnRleHQub3BlbkV2ZW50Rm9ybSxcblx0XHRjbG9zZUV2ZW50Rm9ybTogY29udGV4dC5jbG9zZUV2ZW50Rm9ybSxcblx0XHRidXNpbmVzc0hvdXJzOiBjb250ZXh0LmJ1c2luZXNzSG91cnMsXG5cdH0gYXMgY29uc3Rcbn1cbiIsCiAgICAiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNvbnRleHRUeXBlLFxuXHRVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybixcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgdHlwZSB7IENlbGxDbGlja0luZm8gfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlIGV4dGVuZHMgQ2FsZW5kYXJDb250ZXh0VHlwZSB7XG5cdC8vIFJlc291cmNlLXNwZWNpZmljIHN0YXRlXG5cdHJlc291cmNlczogUmVzb3VyY2VbXVxuXHR2aXNpYmxlUmVzb3VyY2VzOiBTZXQ8c3RyaW5nIHwgbnVtYmVyPlxuXG5cdC8vIFJlc291cmNlIHV0aWxpdGllc1xuXHRnZXRFdmVudHNGb3JSZXNvdXJjZTogKHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcikgPT4gQ2FsZW5kYXJFdmVudFtdXG5cdGdldEV2ZW50c0ZvclJlc291cmNlczogKHJlc291cmNlSWRzOiAoc3RyaW5nIHwgbnVtYmVyKVtdKSA9PiBDYWxlbmRhckV2ZW50W11cblx0Z2V0UmVzb3VyY2VCeUlkOiAocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBSZXNvdXJjZSB8IHVuZGVmaW5lZFxuXHRnZXRWaXNpYmxlUmVzb3VyY2VzOiAoKSA9PiBSZXNvdXJjZVtdXG5cblx0Ly8gQ3Jvc3MtcmVzb3VyY2UgZXZlbnQgdXRpbGl0aWVzXG5cdGlzRXZlbnRDcm9zc1Jlc291cmNlOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IGJvb2xlYW5cblx0Z2V0RXZlbnRSZXNvdXJjZUlkczogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiAoc3RyaW5nIHwgbnVtYmVyKVtdXG5cblx0Ly8gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIGZyb20gY2FsZW5kYXIgY29udGV4dFxuXHRvbkV2ZW50Q2xpY2s6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkNlbGxDbGljazogKGluZm86IENlbGxDbGlja0luZm8pID0+IHZvaWRcblx0cmVuZGVyUmVzb3VyY2U/OiAocmVzb3VyY2U6IFJlc291cmNlKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0b3JpZW50YXRpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCdcbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0OiBSZWFjdC5Db250ZXh0PFxuXHRSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWRcbj4gPSBjcmVhdGVDb250ZXh0PFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuXG5leHBvcnQgY29uc3QgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgPSAoKTogUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlID0+IHtcblx0Y29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoUmVzb3VyY2VDYWxlbmRhckNvbnRleHQpXG5cdGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHQndXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlcidcblx0XHQpXG5cdH1cblx0cmV0dXJuIGNvbnRleHRcbn1cblxuLyoqXG4gKiBTaW1wbGlmaWVkIHJlc291cmNlIGNhbGVuZGFyIGNvbnRleHQgdHlwZSBmb3IgZXh0ZXJuYWwgdXNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlSWxhbXlSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFJldHVyblxuXHRleHRlbmRzIFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuIHtcblx0cmVhZG9ubHkgZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmVhZG9ubHkgcmVzb3VyY2VzOiBSZXNvdXJjZVtdXG5cdHJlYWRvbmx5IGdldEV2ZW50c0ZvclJlc291cmNlOiAoXG5cdFx0cmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyXG5cdCkgPT4gQ2FsZW5kYXJFdmVudFtdXG59XG5cbmV4cG9ydCBjb25zdCB1c2VJbGFteVJlc291cmNlQ2FsZW5kYXJDb250ZXh0ID1cblx0KCk6IFVzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHRSZXR1cm4gPT4ge1xuXHRcdGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KFJlc291cmNlQ2FsZW5kYXJDb250ZXh0KVxuXHRcdGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0J3VzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlcidcblx0XHRcdClcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdGN1cnJlbnREYXRlOiBjb250ZXh0LmN1cnJlbnREYXRlLFxuXHRcdFx0dmlldzogY29udGV4dC52aWV3LFxuXHRcdFx0ZXZlbnRzOiBjb250ZXh0LmV2ZW50cyxcblx0XHRcdHJlc291cmNlczogY29udGV4dC5yZXNvdXJjZXMsXG5cdFx0XHRpc0V2ZW50Rm9ybU9wZW46IGNvbnRleHQuaXNFdmVudEZvcm1PcGVuLFxuXHRcdFx0c2VsZWN0ZWRFdmVudDogY29udGV4dC5zZWxlY3RlZEV2ZW50LFxuXHRcdFx0c2VsZWN0ZWREYXRlOiBjb250ZXh0LnNlbGVjdGVkRGF0ZSxcblx0XHRcdGZpcnN0RGF5T2ZXZWVrOiBjb250ZXh0LmZpcnN0RGF5T2ZXZWVrLFxuXHRcdFx0c2V0Q3VycmVudERhdGU6IGNvbnRleHQuc2V0Q3VycmVudERhdGUsXG5cdFx0XHRzZWxlY3REYXRlOiBjb250ZXh0LnNlbGVjdERhdGUsXG5cdFx0XHRzZXRWaWV3OiBjb250ZXh0LnNldFZpZXcsXG5cdFx0XHRuZXh0UGVyaW9kOiBjb250ZXh0Lm5leHRQZXJpb2QsXG5cdFx0XHRwcmV2UGVyaW9kOiBjb250ZXh0LnByZXZQZXJpb2QsXG5cdFx0XHR0b2RheTogY29udGV4dC50b2RheSxcblx0XHRcdGFkZEV2ZW50OiBjb250ZXh0LmFkZEV2ZW50LFxuXHRcdFx0dXBkYXRlRXZlbnQ6IGNvbnRleHQudXBkYXRlRXZlbnQsXG5cdFx0XHRkZWxldGVFdmVudDogY29udGV4dC5kZWxldGVFdmVudCxcblx0XHRcdG9wZW5FdmVudEZvcm06IGNvbnRleHQub3BlbkV2ZW50Rm9ybSxcblx0XHRcdGNsb3NlRXZlbnRGb3JtOiBjb250ZXh0LmNsb3NlRXZlbnRGb3JtLFxuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2U6IGNvbnRleHQuZ2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0XHRidXNpbmVzc0hvdXJzOiBjb250ZXh0LmJ1c2luZXNzSG91cnMsXG5cdFx0fSBhcyBjb25zdFxuXHR9XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyUHJvdmlkZXJQcm9wcyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9wcm92aWRlcidcbmltcG9ydCB0eXBlIHtcblx0Q2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGUsXG5cdENlbGxDbGlja0luZm8sXG5cdFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyRW5naW5lIH0gZnJvbSAnQC9ob29rcy91c2UtY2FsZW5kYXItZW5naW5lJ1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnXG5cbmNvbnN0IGdldEV2ZW50UmVzb3VyY2VJZHMgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0+IHtcblx0aWYgKGV2ZW50LnJlc291cmNlSWRzKSB7XG5cdFx0cmV0dXJuIGV2ZW50LnJlc291cmNlSWRzXG5cdH1cblx0aWYgKGV2ZW50LnJlc291cmNlSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBbZXZlbnQucmVzb3VyY2VJZF1cblx0fVxuXHRyZXR1cm4gW11cbn1cblxuaW50ZXJmYWNlIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlclByb3BzIGV4dGVuZHMgQ2FsZW5kYXJQcm92aWRlclByb3BzIHtcblx0ZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG5cdHJlc291cmNlcz86IFJlc291cmNlW11cblx0cmVuZGVyUmVzb3VyY2U/OiAocmVzb3VyY2U6IFJlc291cmNlKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlc092ZXJyaWRlPzogQ2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGVcblx0b3JpZW50YXRpb24/OiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yPzogKFxuXHRcdHByb3BzOiBSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzXG5cdCkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzPzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxcblx0UmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyUHJvcHNcbj4gPSAoe1xuXHRjaGlsZHJlbixcblx0ZXZlbnRzID0gW10sXG5cdHJlc291cmNlcyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9IDAsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdHJlbmRlckV2ZW50LFxuXHRvbkV2ZW50Q2xpY2ssXG5cdG9uQ2VsbENsaWNrLFxuXHRvblZpZXdDaGFuZ2UsXG5cdG9uRXZlbnRBZGQsXG5cdG9uRXZlbnRVcGRhdGUsXG5cdG9uRXZlbnREZWxldGUsXG5cdG9uRGF0ZUNoYW5nZSxcblx0bG9jYWxlLFxuXHR0aW1lem9uZSxcblx0ZGlzYWJsZUNlbGxDbGljayxcblx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0ZGF5TWF4RXZlbnRzLFxuXHRldmVudFNwYWNpbmcsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdGhlYWRlckNvbXBvbmVudCxcblx0aGVhZGVyQ2xhc3NOYW1lLFxuXHR0cmFuc2xhdGlvbnMsXG5cdHRyYW5zbGF0b3IsXG5cdHJlbmRlclJlc291cmNlLFxuXHRyZW5kZXJFdmVudEZvcm0sXG5cdGJ1c2luZXNzSG91cnMsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGNsYXNzZXNPdmVycmlkZSxcblx0b3JpZW50YXRpb24gPSAnaG9yaXpvbnRhbCcsXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3VycyA9IGZhbHNlLFxufSkgPT4ge1xuXHQvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuXHRjb25zdCBbY3VycmVudFJlc291cmNlc10gPSB1c2VTdGF0ZTxSZXNvdXJjZVtdPihyZXNvdXJjZXMpXG5cdGNvbnN0IFt2aXNpYmxlUmVzb3VyY2VzLCBzZXRWaXNpYmxlUmVzb3VyY2VzXSA9IHVzZVN0YXRlPFxuXHRcdFNldDxzdHJpbmcgfCBudW1iZXI+XG5cdD4obmV3IFNldChyZXNvdXJjZXMubWFwKChyKSA9PiByLmlkKSkpXG5cblx0Ly8gVXNlIHRoZSBjYWxlbmRhciBlbmdpbmVcblx0Y29uc3QgY2FsZW5kYXJFbmdpbmUgPSB1c2VDYWxlbmRhckVuZ2luZSh7XG5cdFx0ZXZlbnRzLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGluaXRpYWxWaWV3LFxuXHRcdGluaXRpYWxEYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0b25FdmVudEFkZCxcblx0XHRvbkV2ZW50VXBkYXRlLFxuXHRcdG9uRXZlbnREZWxldGUsXG5cdFx0b25EYXRlQ2hhbmdlLFxuXHRcdG9uVmlld0NoYW5nZTogb25WaWV3Q2hhbmdlLFxuXHRcdGxvY2FsZSxcblx0XHR0aW1lem9uZSxcblx0XHR0cmFuc2xhdGlvbnMsXG5cdFx0dHJhbnNsYXRvcixcblx0fSlcblxuXHQvLyBSZXNvdXJjZSB2aXNpYmlsaXR5XG5cdGNvbnN0IHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRcdHNldFZpc2libGVSZXNvdXJjZXMoKHByZXYpID0+IHtcblx0XHRcdFx0Y29uc3QgbmV3U2V0ID0gbmV3IFNldChwcmV2KVxuXHRcdFx0XHRpZiAobmV3U2V0LmhhcyhyZXNvdXJjZUlkKSkge1xuXHRcdFx0XHRcdG5ld1NldC5kZWxldGUocmVzb3VyY2VJZClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRuZXdTZXQuYWRkKHJlc291cmNlSWQpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG5ld1NldFxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtdXG5cdClcblxuXHRjb25zdCBzaG93UmVzb3VyY2UgPSB1c2VDYWxsYmFjaygocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG5cdFx0c2V0VmlzaWJsZVJlc291cmNlcygocHJldikgPT4gbmV3IFNldChwcmV2KS5hZGQocmVzb3VyY2VJZCkpXG5cdH0sIFtdKVxuXG5cdGNvbnN0IGhpZGVSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRzZXRWaXNpYmxlUmVzb3VyY2VzKChwcmV2KSA9PiB7XG5cdFx0XHRjb25zdCBuZXdTZXQgPSBuZXcgU2V0KHByZXYpXG5cdFx0XHRuZXdTZXQuZGVsZXRlKHJlc291cmNlSWQpXG5cdFx0XHRyZXR1cm4gbmV3U2V0XG5cdFx0fSlcblx0fSwgW10pXG5cblx0Y29uc3Qgc2hvd0FsbFJlc291cmNlcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzZXRWaXNpYmxlUmVzb3VyY2VzKG5ldyBTZXQoY3VycmVudFJlc291cmNlcy5tYXAoKHIpID0+IHIuaWQpKSlcblx0fSwgW2N1cnJlbnRSZXNvdXJjZXNdKVxuXG5cdGNvbnN0IGhpZGVBbGxSZXNvdXJjZXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c2V0VmlzaWJsZVJlc291cmNlcyhuZXcgU2V0KCkpXG5cdH0sIFtdKVxuXG5cdC8vIEV2ZW50IHV0aWxpdGllc1xuXHRjb25zdCBnZXRFdmVudHNGb3JSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRcdFx0cmV0dXJuIGNhbGVuZGFyRW5naW5lLmV2ZW50cy5maWx0ZXIoKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChldmVudC5yZXNvdXJjZUlkcykge1xuXHRcdFx0XHRcdHJldHVybiBldmVudC5yZXNvdXJjZUlkcy5pbmNsdWRlcyhyZXNvdXJjZUlkKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBldmVudC5yZXNvdXJjZUlkID09PSByZXNvdXJjZUlkXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lLmV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldEV2ZW50c0ZvclJlc291cmNlcyA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkczogKHN0cmluZyB8IG51bWJlcilbXSk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdFx0XHRyZXR1cm4gY2FsZW5kYXJFbmdpbmUuZXZlbnRzLmZpbHRlcigoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnRSZXNvdXJjZUlkcyA9IGdldEV2ZW50UmVzb3VyY2VJZHMoZXZlbnQpXG5cdFx0XHRcdHJldHVybiBldmVudFJlc291cmNlSWRzLnNvbWUoKGlkKSA9PiByZXNvdXJjZUlkcy5pbmNsdWRlcyhpZCkpXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lLmV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldFJlc291cmNlQnlJZCA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBSZXNvdXJjZSB8IHVuZGVmaW5lZCA9PiB7XG5cdFx0XHRyZXR1cm4gY3VycmVudFJlc291cmNlcy5maW5kKChyZXNvdXJjZSkgPT4gcmVzb3VyY2UuaWQgPT09IHJlc291cmNlSWQpXG5cdFx0fSxcblx0XHRbY3VycmVudFJlc291cmNlc11cblx0KVxuXG5cdGNvbnN0IGdldFZpc2libGVSZXNvdXJjZXMgPSB1c2VDYWxsYmFjaygoKTogUmVzb3VyY2VbXSA9PiB7XG5cdFx0cmV0dXJuIGN1cnJlbnRSZXNvdXJjZXMuZmlsdGVyKChyZXNvdXJjZSkgPT5cblx0XHRcdHZpc2libGVSZXNvdXJjZXMuaGFzKHJlc291cmNlLmlkKVxuXHRcdClcblx0fSwgW2N1cnJlbnRSZXNvdXJjZXMsIHZpc2libGVSZXNvdXJjZXNdKVxuXG5cdC8vIENyb3NzLXJlc291cmNlIGV2ZW50IHV0aWxpdGllc1xuXHRjb25zdCBpc0V2ZW50Q3Jvc3NSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKChldmVudDogQ2FsZW5kYXJFdmVudCk6IGJvb2xlYW4gPT4ge1xuXHRcdHJldHVybiBCb29sZWFuKGV2ZW50LnJlc291cmNlSWRzICYmIGV2ZW50LnJlc291cmNlSWRzLmxlbmd0aCA+IDEpXG5cdH0sIFtdKVxuXG5cdC8vIEN1c3RvbSBoYW5kbGVyc1xuXHRjb25zdCBlZGl0RXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRXZlbnQoZXZlbnQpXG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcblx0XHR9LFxuXHRcdFtjYWxlbmRhckVuZ2luZV1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZUV2ZW50Q2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGlmIChkaXNhYmxlRXZlbnRDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblx0XHRcdGlmIChvbkV2ZW50Q2xpY2spIHtcblx0XHRcdFx0b25FdmVudENsaWNrKGV2ZW50KVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWRpdEV2ZW50KGV2ZW50KVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W2Rpc2FibGVFdmVudENsaWNrLCBvbkV2ZW50Q2xpY2ssIGVkaXRFdmVudF1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZURhdGVDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUNlbGxDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9uQ2VsbENsaWNrKSB7XG5cdFx0XHRcdG9uQ2VsbENsaWNrKGluZm8pXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBuZXdFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0XHR0aXRsZTogY2FsZW5kYXJFbmdpbmUudCgnbmV3RXZlbnQnKSxcblx0XHRcdFx0XHRzdGFydDogaW5mby5zdGFydCxcblx0XHRcdFx0XHRlbmQ6IGluZm8uZW5kLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiAnJyxcblx0XHRcdFx0XHRhbGxEYXk6IGZhbHNlLFxuXHRcdFx0XHR9IGFzIENhbGVuZGFyRXZlbnRcblxuXHRcdFx0XHRpZiAoaW5mby5yZXNvdXJjZUlkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRuZXdFdmVudC5yZXNvdXJjZUlkID0gaW5mby5yZXNvdXJjZUlkXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KG5ld0V2ZW50KVxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZERhdGUoaW5mby5zdGFydClcblx0XHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbb25DZWxsQ2xpY2ssIGRpc2FibGVDZWxsQ2xpY2ssIGNhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Ly8gQ3JlYXRlIHRoZSBjb250ZXh0IHZhbHVlXG5cdGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdC4uLmNhbGVuZGFyRW5naW5lLFxuXHRcdFx0dmlldzogY2FsZW5kYXJFbmdpbmUudmlldyxcblx0XHRcdHNldFZpZXc6IGNhbGVuZGFyRW5naW5lLnNldFZpZXcsXG5cdFx0XHRldmVudHM6IGNhbGVuZGFyRW5naW5lLmV2ZW50cyxcblx0XHRcdHJhd0V2ZW50czogY2FsZW5kYXJFbmdpbmUucmF3RXZlbnRzLFxuXG5cdFx0XHQvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuXHRcdFx0cmVzb3VyY2VzOiBjdXJyZW50UmVzb3VyY2VzLFxuXHRcdFx0dmlzaWJsZVJlc291cmNlcyxcblx0XHRcdHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSxcblx0XHRcdHNob3dSZXNvdXJjZSxcblx0XHRcdGhpZGVSZXNvdXJjZSxcblx0XHRcdHNob3dBbGxSZXNvdXJjZXMsXG5cdFx0XHRoaWRlQWxsUmVzb3VyY2VzLFxuXG5cdFx0XHQvLyBSZXNvdXJjZSB1dGlsaXRpZXNcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2VzLFxuXHRcdFx0Z2V0UmVzb3VyY2VCeUlkLFxuXHRcdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblxuXHRcdFx0Ly8gQ3Jvc3MtcmVzb3VyY2UgZXZlbnQgdXRpbGl0aWVzXG5cdFx0XHRpc0V2ZW50Q3Jvc3NSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50UmVzb3VyY2VJZHMsXG5cblx0XHRcdC8vIE92ZXJyaWRlIGhhbmRsZXJzXG5cdFx0XHRvbkV2ZW50Q2xpY2s6IGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRvbkNlbGxDbGljazogaGFuZGxlRGF0ZUNsaWNrLFxuXG5cdFx0XHQvLyBQYXNzIHRocm91Z2ggaGVhZGVyIHByb3BzXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cblx0XHRcdC8vIFBhc3MgdGhyb3VnaCBvdGhlciBwcm9wc1xuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRyZW5kZXJSZXNvdXJjZSxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdG9yaWVudGF0aW9uLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHR9KSxcblx0XHRbXG5cdFx0XHRjYWxlbmRhckVuZ2luZSxcblx0XHRcdGN1cnJlbnRSZXNvdXJjZXMsXG5cdFx0XHR2aXNpYmxlUmVzb3VyY2VzLFxuXHRcdFx0dG9nZ2xlUmVzb3VyY2VWaXNpYmlsaXR5LFxuXHRcdFx0c2hvd1Jlc291cmNlLFxuXHRcdFx0aGlkZVJlc291cmNlLFxuXHRcdFx0c2hvd0FsbFJlc291cmNlcyxcblx0XHRcdGhpZGVBbGxSZXNvdXJjZXMsXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlcyxcblx0XHRcdGdldFJlc291cmNlQnlJZCxcblx0XHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdFx0XHRpc0V2ZW50Q3Jvc3NSZXNvdXJjZSxcblx0XHRcdGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRoYW5kbGVEYXRlQ2xpY2ssXG5cdFx0XHRyZW5kZXJFdmVudCxcblx0XHRcdHJlbmRlclJlc291cmNlLFxuXHRcdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHRcdFx0bG9jYWxlLFxuXHRcdFx0dGltZXpvbmUsXG5cdFx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0b3JpZW50YXRpb24sXG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdF1cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlQ2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvUmVzb3VyY2VDYWxlbmRhckNvbnRleHQuUHJvdmlkZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHtcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQgYXMgZGVsZXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxuXHRnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyxcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQgYXMgdXBkYXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxufSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZGVmYXVsdFRyYW5zbGF0aW9ucyB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy9kZWZhdWx0J1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnMsIFRyYW5zbGF0b3JGdW5jdGlvbiB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmltcG9ydCB7IGdldE1vbnRoV2Vla3MsIGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3IH0gZnJvbSAnQC90eXBlcydcbmltcG9ydCB7IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQgfSBmcm9tICcuLi9saWIvY29uc3RhbnRzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyRW5naW5lQ29uZmlnIHtcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuXHRpbml0aWFsVmlldz86IENhbGVuZGFyVmlld1xuXHRpbml0aWFsRGF0ZT86IGRheWpzLkRheWpzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdG9uRXZlbnRBZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudFVwZGF0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50RGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRGF0ZUNoYW5nZT86IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRvblZpZXdDaGFuZ2U/OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdGxvY2FsZT86IHN0cmluZ1xuXHR0aW1lem9uZT86IHN0cmluZ1xuXHR0cmFuc2xhdGlvbnM/OiBUcmFuc2xhdGlvbnNcblx0dHJhbnNsYXRvcj86IFRyYW5zbGF0b3JGdW5jdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyRW5naW5lUmV0dXJuIHtcblx0Y3VycmVudERhdGU6IGRheWpzLkRheWpzXG5cdHZpZXc6IENhbGVuZGFyVmlld1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRyYXdFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRpc0V2ZW50Rm9ybU9wZW46IGJvb2xlYW5cblx0c2VsZWN0ZWRFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0c2VsZWN0ZWREYXRlOiBkYXlqcy5EYXlqcyB8IG51bGxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuXHRkYXlNYXhFdmVudHM6IG51bWJlclxuXHRjdXJyZW50TG9jYWxlOiBzdHJpbmdcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0c2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcblx0c2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0dG9kYXk6ICgpID0+IHZvaWRcblx0YWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHR1cGRhdGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnQ6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0ZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdG9wZW5FdmVudEZvcm06IChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG5cdHNldFNlbGVjdGVkRXZlbnQ6IFJlYWN0LkRpc3BhdGNoPFJlYWN0LlNldFN0YXRlQWN0aW9uPENhbGVuZGFyRXZlbnQgfCBudWxsPj5cblx0c2V0SXNFdmVudEZvcm1PcGVuOiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxib29sZWFuPj5cblx0c2V0U2VsZWN0ZWREYXRlOiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxkYXlqcy5EYXlqcyB8IG51bGw+PlxuXHRnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IChcblx0XHRzdGFydERhdGU6IGRheWpzLkRheWpzLFxuXHRcdGVuZERhdGU6IGRheWpzLkRheWpzXG5cdCkgPT4gQ2FsZW5kYXJFdmVudFtdXG5cdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHR0OiAoa2V5OiBrZXlvZiBUcmFuc2xhdGlvbnMpID0+IHN0cmluZ1xufVxuXG5jb25zdCBWSUVXX1VOSVRTOiBSZWNvcmQ8Q2FsZW5kYXJWaWV3LCBkYXlqcy5NYW5pcHVsYXRlVHlwZT4gPSB7XG5cdGRheTogJ2RheScsXG5cdHdlZWs6ICd3ZWVrJyxcblx0bW9udGg6ICdtb250aCcsXG5cdHllYXI6ICd5ZWFyJyxcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNhbGVuZGFyRW5naW5lID0gKFxuXHRjb25maWc6IENhbGVuZGFyRW5naW5lQ29uZmlnXG4pOiBDYWxlbmRhckVuZ2luZVJldHVybiA9PiB7XG5cdGNvbnN0IHtcblx0XHRldmVudHMgPSBbXSxcblx0XHRmaXJzdERheU9mV2VlayA9IDAsXG5cdFx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRcdGluaXRpYWxEYXRlID0gZGF5anMoKSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdG9uRXZlbnRBZGQsXG5cdFx0b25FdmVudFVwZGF0ZSxcblx0XHRvbkV2ZW50RGVsZXRlLFxuXHRcdG9uRGF0ZUNoYW5nZSxcblx0XHRvblZpZXdDaGFuZ2UsXG5cdFx0bG9jYWxlLFxuXHRcdHRpbWV6b25lLFxuXHRcdHRyYW5zbGF0aW9ucyxcblx0XHR0cmFuc2xhdG9yLFxuXHR9ID0gY29uZmlnXG5cblx0Y29uc3QgW2N1cnJlbnREYXRlLCBzZXRDdXJyZW50RGF0ZV0gPSB1c2VTdGF0ZTxkYXlqcy5EYXlqcz4oaW5pdGlhbERhdGUpXG5cdGNvbnN0IFt2aWV3LCBzZXRWaWV3XSA9IHVzZVN0YXRlPENhbGVuZGFyVmlldz4oaW5pdGlhbFZpZXcpXG5cdGNvbnN0IFtjdXJyZW50RXZlbnRzLCBzZXRDdXJyZW50RXZlbnRzXSA9IHVzZVN0YXRlPENhbGVuZGFyRXZlbnRbXT4oZXZlbnRzKVxuXHRjb25zdCBbaXNFdmVudEZvcm1PcGVuLCBzZXRJc0V2ZW50Rm9ybU9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cdGNvbnN0IFtzZWxlY3RlZEV2ZW50LCBzZXRTZWxlY3RlZEV2ZW50XSA9IHVzZVN0YXRlPENhbGVuZGFyRXZlbnQgfCBudWxsPihudWxsKVxuXHRjb25zdCBbc2VsZWN0ZWREYXRlLCBzZXRTZWxlY3RlZERhdGVdID0gdXNlU3RhdGU8ZGF5anMuRGF5anMgfCBudWxsPihudWxsKVxuXHRjb25zdCBbY3VycmVudExvY2FsZSwgc2V0Q3VycmVudExvY2FsZV0gPSB1c2VTdGF0ZShsb2NhbGUgfHwgJ2VuJylcblxuXHRjb25zdCB0ID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKHRyYW5zbGF0b3IpIHtcblx0XHRcdHJldHVybiB0cmFuc2xhdG9yXG5cdFx0fVxuXHRcdGlmICh0cmFuc2xhdGlvbnMpIHtcblx0XHRcdHJldHVybiAoa2V5OiBrZXlvZiBUcmFuc2xhdGlvbnMpID0+IHRyYW5zbGF0aW9uc1trZXldIHx8IGtleVxuXHRcdH1cblx0XHRyZXR1cm4gKGtleToga2V5b2YgVHJhbnNsYXRpb25zKSA9PiBkZWZhdWx0VHJhbnNsYXRpb25zW2tleV0gfHwga2V5XG5cdH0sIFt0cmFuc2xhdGlvbnMsIHRyYW5zbGF0b3JdKVxuXG5cdGNvbnN0IGdldEV2ZW50c0ZvckRhdGVSYW5nZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChzdGFydERhdGU6IGRheWpzLkRheWpzLCBlbmREYXRlOiBkYXlqcy5EYXlqcyk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdFx0XHRjb25zdCBhbGxFdmVudHM6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cblx0XHRcdGZvciAoY29uc3QgZXZlbnQgb2YgY3VycmVudEV2ZW50cykge1xuXHRcdFx0XHRpZiAoZXZlbnQucnJ1bGUpIHtcblx0XHRcdFx0XHRhbGxFdmVudHMucHVzaChcblx0XHRcdFx0XHRcdC4uLmdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzKHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRFdmVudHMsXG5cdFx0XHRcdFx0XHRcdHN0YXJ0RGF0ZSxcblx0XHRcdFx0XHRcdFx0ZW5kRGF0ZSxcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IHN0YXJ0c0luUmFuZ2UgPVxuXHRcdFx0XHRcdFx0ZXZlbnQuc3RhcnQuaXNTYW1lT3JBZnRlcihzdGFydERhdGUpICYmXG5cdFx0XHRcdFx0XHRldmVudC5zdGFydC5pc1NhbWVPckJlZm9yZShlbmREYXRlKVxuXHRcdFx0XHRcdGNvbnN0IGVuZHNJblJhbmdlID1cblx0XHRcdFx0XHRcdGV2ZW50LmVuZC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSkgJiZcblx0XHRcdFx0XHRcdGV2ZW50LmVuZC5pc1NhbWVPckJlZm9yZShlbmREYXRlKVxuXHRcdFx0XHRcdGNvbnN0IHNwYW5zUmFuZ2UgPVxuXHRcdFx0XHRcdFx0ZXZlbnQuc3RhcnQuaXNCZWZvcmUoc3RhcnREYXRlKSAmJiBldmVudC5lbmQuaXNBZnRlcihlbmREYXRlKVxuXHRcdFx0XHRcdGlmIChzdGFydHNJblJhbmdlIHx8IGVuZHNJblJhbmdlIHx8IHNwYW5zUmFuZ2UpIHtcblx0XHRcdFx0XHRcdGFsbEV2ZW50cy5wdXNoKGV2ZW50KVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFsbEV2ZW50c1xuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHNdXG5cdClcblxuXHRjb25zdCBnZXRDdXJyZW50Vmlld1JhbmdlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdGlmICh2aWV3ID09PSAnZGF5Jykge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c3RhcnQ6IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ2RheScpLFxuXHRcdFx0XHRlbmQ6IGN1cnJlbnREYXRlLmVuZE9mKCdkYXknKSxcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHZpZXcgPT09ICd5ZWFyJykge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c3RhcnQ6IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ3llYXInKSxcblx0XHRcdFx0ZW5kOiBjdXJyZW50RGF0ZS5lbmRPZigneWVhcicpLFxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAodmlldyA9PT0gJ3dlZWsnKSB7XG5cdFx0XHRjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vlaylcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHN0YXJ0OiB3ZWVrRGF5c1swXS5zdGFydE9mKCdkYXknKSxcblx0XHRcdFx0ZW5kOiB3ZWVrRGF5c1s2XS5lbmRPZignZGF5JyksXG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIG1vbnRoIHZpZXdcblx0XHRjb25zdCB3ZWVrcyA9IGdldE1vbnRoV2Vla3MoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdHJldHVybiB7IHN0YXJ0OiB3ZWVrc1swXVswXS5zdGFydE9mKCdkYXknKSwgZW5kOiB3ZWVrc1s1XVs2XS5lbmRPZignZGF5JykgfVxuXHR9LCBbY3VycmVudERhdGUsIHZpZXcsIGZpcnN0RGF5T2ZXZWVrXSlcblxuXHRjb25zdCBwcm9jZXNzZWRFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IGdldEN1cnJlbnRWaWV3UmFuZ2UoKVxuXHRcdHJldHVybiBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uoc3RhcnQsIGVuZClcblx0fSwgW2dldEV2ZW50c0ZvckRhdGVSYW5nZSwgZ2V0Q3VycmVudFZpZXdSYW5nZV0pXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoZXZlbnRzKSB7XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKGV2ZW50cylcblx0XHR9XG5cdH0sIFtldmVudHNdKVxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChsb2NhbGUpIHtcblx0XHRcdHNldEN1cnJlbnRMb2NhbGUobG9jYWxlKVxuXHRcdFx0ZGF5anMubG9jYWxlKGxvY2FsZSlcblx0XHRcdHNldEN1cnJlbnREYXRlKChwcmV2RGF0ZSkgPT4gcHJldkRhdGUubG9jYWxlKGxvY2FsZSkpXG5cdFx0fVxuXHR9LCBbbG9jYWxlXSlcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAodGltZXpvbmUpIHtcblx0XHRcdGRheWpzLnR6LnNldERlZmF1bHQodGltZXpvbmUpXG5cdFx0fVxuXHR9LCBbdGltZXpvbmVdKVxuXG5cdGNvbnN0IHNlbGVjdERhdGUgPSB1c2VDYWxsYmFjayhcblx0XHQoZGF0ZTogZGF5anMuRGF5anMpID0+IHtcblx0XHRcdHNldEN1cnJlbnREYXRlKGRhdGUpXG5cdFx0XHRvbkRhdGVDaGFuZ2U/LihkYXRlKVxuXHRcdH0sXG5cdFx0W29uRGF0ZUNoYW5nZV1cblx0KVxuXG5cdGNvbnN0IG5hdmlnYXRlUGVyaW9kID0gdXNlQ2FsbGJhY2soXG5cdFx0KGRpcmVjdGlvbjogMSB8IC0xKSA9PiB7XG5cdFx0XHRzZXRDdXJyZW50RGF0ZSgocHJldikgPT4ge1xuXHRcdFx0XHRjb25zdCBuZXdEYXRlID1cblx0XHRcdFx0XHRkaXJlY3Rpb24gPT09IDFcblx0XHRcdFx0XHRcdD8gcHJldi5hZGQoMSwgVklFV19VTklUU1t2aWV3XSlcblx0XHRcdFx0XHRcdDogcHJldi5zdWJ0cmFjdCgxLCBWSUVXX1VOSVRTW3ZpZXddKVxuXHRcdFx0XHRvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuXHRcdFx0XHRyZXR1cm4gbmV3RGF0ZVxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFt2aWV3LCBvbkRhdGVDaGFuZ2VdXG5cdClcblxuXHRjb25zdCBuZXh0UGVyaW9kID0gdXNlQ2FsbGJhY2soKCkgPT4gbmF2aWdhdGVQZXJpb2QoMSksIFtuYXZpZ2F0ZVBlcmlvZF0pXG5cdGNvbnN0IHByZXZQZXJpb2QgPSB1c2VDYWxsYmFjaygoKSA9PiBuYXZpZ2F0ZVBlcmlvZCgtMSksIFtuYXZpZ2F0ZVBlcmlvZF0pXG5cblx0Y29uc3QgdG9kYXkgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0Y29uc3QgbmV3RGF0ZSA9IGRheWpzKClcblx0XHRzZXRDdXJyZW50RGF0ZShuZXdEYXRlKVxuXHRcdG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUpXG5cdH0sIFtvbkRhdGVDaGFuZ2VdKVxuXG5cdGNvbnN0IGFkZEV2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKChwcmV2KSA9PiBbLi4ucHJldiwgZXZlbnRdKVxuXHRcdFx0b25FdmVudEFkZD8uKGV2ZW50KVxuXHRcdH0sXG5cdFx0W29uRXZlbnRBZGRdXG5cdClcblxuXHRjb25zdCB1cGRhdGVFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+XG5cdFx0XHRcdHByZXYubWFwKChldmVudCkgPT4ge1xuXHRcdFx0XHRcdGlmIChldmVudC5pZCAhPT0gZXZlbnRJZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGV2ZW50XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IG5ld0V2ZW50ID0geyAuLi5ldmVudCwgLi4udXBkYXRlcyB9XG5cdFx0XHRcdFx0b25FdmVudFVwZGF0ZT8uKG5ld0V2ZW50KVxuXHRcdFx0XHRcdHJldHVybiBuZXdFdmVudFxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W29uRXZlbnRVcGRhdGVdXG5cdClcblxuXHRjb25zdCB1cGRhdGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChcblx0XHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50Pixcblx0XHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHRcdCkgPT4ge1xuXHRcdFx0b25FdmVudFVwZGF0ZT8uKHsgLi4uZXZlbnQsIC4uLnVwZGF0ZXMgfSlcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoXG5cdFx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50SW1wbCh7XG5cdFx0XHRcdFx0dGFyZ2V0RXZlbnQ6IGV2ZW50LFxuXHRcdFx0XHRcdHVwZGF0ZXMsXG5cdFx0XHRcdFx0Y3VycmVudEV2ZW50cyxcblx0XHRcdFx0XHRzY29wZTogb3B0aW9ucy5zY29wZSxcblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzLCBvbkV2ZW50VXBkYXRlXVxuXHQpXG5cblx0Y29uc3QgZGVsZXRlUmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQsIG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9ucykgPT4ge1xuXHRcdFx0b25FdmVudERlbGV0ZT8uKGV2ZW50KVxuXHRcdFx0c2V0Q3VycmVudEV2ZW50cyhcblx0XHRcdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnRJbXBsKHtcblx0XHRcdFx0XHR0YXJnZXRFdmVudDogZXZlbnQsXG5cdFx0XHRcdFx0Y3VycmVudEV2ZW50cyxcblx0XHRcdFx0XHRzY29wZTogb3B0aW9ucy5zY29wZSxcblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzLCBvbkV2ZW50RGVsZXRlXVxuXHQpXG5cblx0Y29uc3QgZGVsZXRlRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKChwcmV2KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50VG9EZWxldGUgPSBwcmV2LmZpbmQoKGUpID0+IGUuaWQgPT09IGV2ZW50SWQpXG5cdFx0XHRcdGlmIChldmVudFRvRGVsZXRlKSB7XG5cdFx0XHRcdFx0b25FdmVudERlbGV0ZT8uKGV2ZW50VG9EZWxldGUpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHByZXYuZmlsdGVyKChlKSA9PiBlLmlkICE9PSBldmVudElkKVxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtvbkV2ZW50RGVsZXRlXVxuXHQpXG5cblx0Y29uc3Qgb3BlbkV2ZW50Rm9ybSA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnREYXRhPy5zdGFydCkge1xuXHRcdFx0XHRzZXRTZWxlY3RlZERhdGUoZXZlbnREYXRhLnN0YXJ0KVxuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc3RhcnQgPSBldmVudERhdGE/LnN0YXJ0ID8/IGN1cnJlbnREYXRlXG5cdFx0XHRzZXRTZWxlY3RlZEV2ZW50KHtcblx0XHRcdFx0dGl0bGU6IHQoJ25ld0V2ZW50JyksXG5cdFx0XHRcdHN0YXJ0LFxuXHRcdFx0XHRlbmQ6IGV2ZW50RGF0YT8uZW5kID8/IHN0YXJ0LmFkZCgxLCAnaG91cicpLFxuXHRcdFx0XHRyZXNvdXJjZUlkOiBldmVudERhdGE/LnJlc291cmNlSWQsXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiAnJyxcblx0XHRcdFx0YWxsRGF5OiBldmVudERhdGE/LmFsbERheSA/PyBmYWxzZSxcblx0XHRcdH0gYXMgQ2FsZW5kYXJFdmVudClcblx0XHRcdHNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuXHRcdH0sXG5cdFx0W2N1cnJlbnREYXRlLCB0XVxuXHQpXG5cblx0Y29uc3QgY2xvc2VFdmVudEZvcm0gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c2V0U2VsZWN0ZWREYXRlKG51bGwpXG5cdFx0c2V0U2VsZWN0ZWRFdmVudChudWxsKVxuXHRcdHNldElzRXZlbnRGb3JtT3BlbihmYWxzZSlcblx0fSwgW10pXG5cblx0Y29uc3QgaGFuZGxlVmlld0NoYW5nZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChuZXdWaWV3OiBDYWxlbmRhclZpZXcpID0+IHtcblx0XHRcdHNldFZpZXcobmV3Vmlldylcblx0XHRcdG9uVmlld0NoYW5nZT8uKG5ld1ZpZXcpXG5cdFx0fSxcblx0XHRbb25WaWV3Q2hhbmdlXVxuXHQpXG5cblx0Y29uc3QgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KTogQ2FsZW5kYXJFdmVudCB8IG51bGwgPT4ge1xuXHRcdFx0Y29uc3QgdGFyZ2V0VUlEID0gZXZlbnQudWlkXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRjdXJyZW50RXZlbnRzLmZpbmQoXG5cdFx0XHRcdFx0KGUpID0+IChlLnVpZCB8fCBgJHtlLmlkfUBpbGFteS5jYWxlbmRhcmApID09PSB0YXJnZXRVSUQgJiYgZS5ycnVsZVxuXHRcdFx0XHQpIHx8IG51bGxcblx0XHRcdClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzXVxuXHQpXG5cblx0cmV0dXJuIHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHR2aWV3LFxuXHRcdGV2ZW50czogcHJvY2Vzc2VkRXZlbnRzLFxuXHRcdHJhd0V2ZW50czogY3VycmVudEV2ZW50cyxcblx0XHRpc0V2ZW50Rm9ybU9wZW4sXG5cdFx0c2VsZWN0ZWRFdmVudCxcblx0XHRzZWxlY3RlZERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0ZGF5TWF4RXZlbnRzOiBEQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRzZXRDdXJyZW50RGF0ZSxcblx0XHRzZWxlY3REYXRlLFxuXHRcdHNldFZpZXc6IGhhbmRsZVZpZXdDaGFuZ2UsXG5cdFx0bmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kLFxuXHRcdHRvZGF5LFxuXHRcdGFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50LFxuXHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50LFxuXHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdG9wZW5FdmVudEZvcm0sXG5cdFx0Y2xvc2VFdmVudEZvcm0sXG5cdFx0c2V0U2VsZWN0ZWRFdmVudCxcblx0XHRzZXRJc0V2ZW50Rm9ybU9wZW4sXG5cdFx0c2V0U2VsZWN0ZWREYXRlLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG5cdFx0dCxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0VHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbnMgPSB7XG5cdC8vIENvbW1vbiBhY3Rpb25zXG5cdHRvZGF5OiAnVG9kYXknLFxuXHRjcmVhdGU6ICdDcmVhdGUnLFxuXHRuZXc6ICdOZXcnLFxuXHR1cGRhdGU6ICdVcGRhdGUnLFxuXHRkZWxldGU6ICdEZWxldGUnLFxuXHRjYW5jZWw6ICdDYW5jZWwnLFxuXHRleHBvcnQ6ICdFeHBvcnQnLFxuXG5cdC8vIEV2ZW50IHJlbGF0ZWRcblx0ZXZlbnQ6ICdFdmVudCcsXG5cdGV2ZW50czogJ0V2ZW50cycsXG5cdG5ld0V2ZW50OiAnTmV3IEV2ZW50Jyxcblx0dGl0bGU6ICdUaXRsZScsXG5cdGRlc2NyaXB0aW9uOiAnRGVzY3JpcHRpb24nLFxuXHRsb2NhdGlvbjogJ0xvY2F0aW9uJyxcblx0YWxsRGF5OiAnQWxsIGRheScsXG5cdHN0YXJ0RGF0ZTogJ1N0YXJ0IERhdGUnLFxuXHRlbmREYXRlOiAnRW5kIERhdGUnLFxuXHRzdGFydFRpbWU6ICdTdGFydCBUaW1lJyxcblx0ZW5kVGltZTogJ0VuZCBUaW1lJyxcblx0Y29sb3I6ICdDb2xvcicsXG5cblx0Ly8gRXZlbnQgZm9ybVxuXHRjcmVhdGVFdmVudDogJ0NyZWF0ZSBFdmVudCcsXG5cdGVkaXRFdmVudDogJ0VkaXQgRXZlbnQnLFxuXHRhZGROZXdFdmVudDogJ0FkZCBhIG5ldyBldmVudCB0byB5b3VyIGNhbGVuZGFyJyxcblx0ZWRpdEV2ZW50RGV0YWlsczogJ0VkaXQgeW91ciBldmVudCBkZXRhaWxzJyxcblx0ZXZlbnRUaXRsZVBsYWNlaG9sZGVyOiAnRXZlbnQgdGl0bGUnLFxuXHRldmVudERlc2NyaXB0aW9uUGxhY2Vob2xkZXI6ICdFdmVudCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpJyxcblx0ZXZlbnRMb2NhdGlvblBsYWNlaG9sZGVyOiAnRXZlbnQgbG9jYXRpb24gKG9wdGlvbmFsKScsXG5cblx0Ly8gUmVjdXJyZW5jZVxuXHRyZXBlYXQ6ICdSZXBlYXQnLFxuXHRyZXBlYXRzOiAnUmVwZWF0cycsXG5cdGN1c3RvbVJlY3VycmVuY2U6ICdDdXN0b20gcmVjdXJyZW5jZScsXG5cdGRhaWx5OiAnRGFpbHknLFxuXHR3ZWVrbHk6ICdXZWVrbHknLFxuXHRtb250aGx5OiAnTW9udGhseScsXG5cdHllYXJseTogJ1llYXJseScsXG5cdGludGVydmFsOiAnSW50ZXJ2YWwnLFxuXHRyZXBlYXRPbjogJ1JlcGVhdCBvbicsXG5cdG5ldmVyOiAnTmV2ZXInLFxuXHRjb3VudDogJ0NvdW50Jyxcblx0ZXZlcnk6ICdFdmVyeScsXG5cdGVuZHM6ICdFbmRzJyxcblx0YWZ0ZXI6ICdBZnRlcicsXG5cdG9jY3VycmVuY2VzOiAnb2NjdXJyZW5jZXMnLFxuXHRvbjogJ09uJyxcblxuXHQvLyBSZWN1cnJlbmNlIGVkaXQgZGlhbG9nXG5cdGVkaXRSZWN1cnJpbmdFdmVudDogJ0VkaXQgcmVjdXJyaW5nIGV2ZW50Jyxcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6ICdEZWxldGUgcmVjdXJyaW5nIGV2ZW50Jyxcblx0ZWRpdFJlY3VycmluZ0V2ZW50UXVlc3Rpb246XG5cdFx0J2lzIGEgcmVjdXJyaW5nIGV2ZW50LiBIb3cgd291bGQgeW91IGxpa2UgdG8gZWRpdCBpdD8nLFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uOlxuXHRcdCdpcyBhIHJlY3VycmluZyBldmVudC4gSG93IHdvdWxkIHlvdSBsaWtlIHRvIGRlbGV0ZSBpdD8nLFxuXHR0aGlzRXZlbnQ6ICdUaGlzIGV2ZW50Jyxcblx0dGhpc0V2ZW50RGVzY3JpcHRpb246ICdPbmx5IGNoYW5nZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHR0aGlzQW5kRm9sbG93aW5nRXZlbnRzOiAnVGhpcyBhbmQgZm9sbG93aW5nIGV2ZW50cycsXG5cdHRoaXNBbmRGb2xsb3dpbmdFdmVudHNEZXNjcmlwdGlvbjogJ0VkaXQgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG5cdGFsbEV2ZW50czogJ0FsbCBldmVudHMnLFxuXHRhbGxFdmVudHNEZXNjcmlwdGlvbjogJ0VkaXQgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblx0b25seUNoYW5nZVRoaXM6ICdPbmx5IGNoYW5nZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHRjaGFuZ2VUaGlzQW5kRnV0dXJlOiAnQ2hhbmdlIHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRjaGFuZ2VFbnRpcmVTZXJpZXM6ICdDaGFuZ2UgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblx0b25seURlbGV0ZVRoaXM6ICdPbmx5IGRlbGV0ZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHRkZWxldGVUaGlzQW5kRnV0dXJlOiAnRGVsZXRlIHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRkZWxldGVFbnRpcmVTZXJpZXM6ICdEZWxldGUgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblxuXHQvLyBWaWV3IHR5cGVzXG5cdG1vbnRoOiAnTW9udGgnLFxuXHR3ZWVrOiAnV2VlaycsXG5cdGRheTogJ0RheScsXG5cdHllYXI6ICdZZWFyJyxcblx0bW9yZTogJ21vcmUnLFxuXG5cdC8vIFJlc291cmNlIGNhbGVuZGFyXG5cdHJlc291cmNlczogJ1Jlc291cmNlcycsXG5cdHJlc291cmNlOiAnUmVzb3VyY2UnLFxuXHR0aW1lOiAnVGltZScsXG5cdGRhdGU6ICdEYXRlJyxcblx0bm9SZXNvdXJjZXNWaXNpYmxlOiAnTm8gcmVzb3VyY2VzIHZpc2libGUnLFxuXHRhZGRSZXNvdXJjZXNPclNob3dFeGlzdGluZzogJ0FkZCByZXNvdXJjZXMgb3Igc2hvdyBleGlzdGluZyBvbmVzJyxcblxuXHQvLyBEYXlzIG9mIHdlZWtcblx0c3VuZGF5OiAnU3VuZGF5Jyxcblx0bW9uZGF5OiAnTW9uZGF5Jyxcblx0dHVlc2RheTogJ1R1ZXNkYXknLFxuXHR3ZWRuZXNkYXk6ICdXZWRuZXNkYXknLFxuXHR0aHVyc2RheTogJ1RodXJzZGF5Jyxcblx0ZnJpZGF5OiAnRnJpZGF5Jyxcblx0c2F0dXJkYXk6ICdTYXR1cmRheScsXG5cblx0Ly8gRGF5cyBzaG9ydFxuXHRzdW46ICdTdW4nLFxuXHRtb246ICdNb24nLFxuXHR0dWU6ICdUdWUnLFxuXHR3ZWQ6ICdXZWQnLFxuXHR0aHU6ICdUaHUnLFxuXHRmcmk6ICdGcmknLFxuXHRzYXQ6ICdTYXQnLFxuXG5cdC8vIE1vbnRoc1xuXHRqYW51YXJ5OiAnSmFudWFyeScsXG5cdGZlYnJ1YXJ5OiAnRmVicnVhcnknLFxuXHRtYXJjaDogJ01hcmNoJyxcblx0YXByaWw6ICdBcHJpbCcsXG5cdG1heTogJ01heScsXG5cdGp1bmU6ICdKdW5lJyxcblx0anVseTogJ0p1bHknLFxuXHRhdWd1c3Q6ICdBdWd1c3QnLFxuXHRzZXB0ZW1iZXI6ICdTZXB0ZW1iZXInLFxuXHRvY3RvYmVyOiAnT2N0b2JlcicsXG5cdG5vdmVtYmVyOiAnTm92ZW1iZXInLFxuXHRkZWNlbWJlcjogJ0RlY2VtYmVyJyxcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHdlZWsgZGF5cyBmb3IgYSBnaXZlbiBkYXRlIGFuZCBmaXJzdCBkYXkgb2Ygd2VlayBzZXR0aW5nLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBjdXJyZW50IGRhdGUgaXMgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCB3ZWVrLFxuICogZXZlbiB3aGVuIHRoZSBmaXJzdCBkYXkgb2Ygd2VlayBpcyBzZXQgdG8gYSBkYXkgYWZ0ZXIgdGhlIGN1cnJlbnQgZGF0ZS5cbiAqXG4gKiBAcGFyYW0gY3VycmVudERhdGUgLSBUaGUgcmVmZXJlbmNlIGRhdGUgZm9yIGNhbGN1bGF0aW5nIHRoZSB3ZWVrXG4gKiBAcGFyYW0gZmlyc3REYXlPZldlZWsgLSBUaGUgZGF5IG51bWJlciAoMC02KSByZXByZXNlbnRpbmcgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCA9IFN1bmRheSwgMSA9IE1vbmRheSwgZXRjLilcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIDcgZGF5anMgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHdlZWsgZGF5cywgc3RhcnRpbmcgZnJvbSBmaXJzdERheU9mV2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgd2VlayBzdGFydGluZyBmcm9tIE1vbmRheSBmb3IgY3VycmVudCBkYXRlXG4gKiBjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGRheWpzKCcyMDI1LTEwLTEzJyksIDEpXG4gKiAvLyBSZXR1cm5zOiBbTW9uIE9jdCAxMywgVHVlIE9jdCAxNCwgLi4uLCBTdW4gT2N0IDE5XVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgd2VlayBzdGFydGluZyBmcm9tIFdlZG5lc2RheSB3aGVuIGN1cnJlbnQgZGF0ZSBpcyBNb25kYXlcbiAqIGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoZGF5anMoJzIwMjUtMTAtMTMnKSwgMylcbiAqIC8vIFJldHVybnM6IFtXZWQgT2N0IDgsIFRodSBPY3QgOSwgLi4uLCBUdWUgT2N0IDE0XSAoaW5jbHVkZXMgTW9uZGF5IE9jdCAxMylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWtEYXlzKFxuXHRjdXJyZW50RGF0ZTogZGF5anMuRGF5anMsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbik6IGRheWpzLkRheWpzW10ge1xuXHRjb25zdCBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlXG5cdFx0LnN0YXJ0T2YoJ3dlZWsnKVxuXHRcdC5kYXkoZmlyc3REYXlPZldlZWspXG5cblx0Y29uc3QgYWRqdXN0ZWRTdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLmlzQmVmb3JlKHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlKVxuXHRcdD8gc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGUuc3VidHJhY3QoMSwgJ3dlZWsnKVxuXHRcdDogc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGVcblxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgZGF5SW5kZXgpID0+XG5cdFx0YWRqdXN0ZWRTdGFydE9mV2Vlay5hZGQoZGF5SW5kZXgsICdkYXknKVxuXHQpXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIDYgd2Vla3Mgb2YgZGF5cyBmb3IgYSBtb250aCBjYWxlbmRhciB2aWV3LlxuICogQWx3YXlzIHJldHVybnMgNDIgZGF5cyAoNiB3ZWVrcyDDlyA3IGRheXMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9udGhXZWVrcyhcblx0bW9udGhEYXRlOiBkYXlqcy5EYXlqcyxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuKTogZGF5anMuRGF5anNbXVtdIHtcblx0Y29uc3QgZmlyc3RXZWVrID0gZ2V0V2Vla0RheXMobW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJyksIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiA2IH0sIChfLCB3ZWVrSW5kZXgpID0+IHtcblx0XHRjb25zdCB3ZWVrU3RhcnQgPSBmaXJzdFdlZWtbMF0uYWRkKHdlZWtJbmRleCwgJ3dlZWsnKVxuXHRcdHJldHVybiBnZXRXZWVrRGF5cyh3ZWVrU3RhcnQsIGZpcnN0RGF5T2ZXZWVrKVxuXHR9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9udGhEYXlzKG1vbnRoRGF0ZTogZGF5anMuRGF5anMpOiBkYXlqcy5EYXlqc1tdIHtcblx0Y29uc3QgZGF5c0luTW9udGggPSBtb250aERhdGUuZGF5c0luTW9udGgoKVxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogZGF5c0luTW9udGggfSwgKF8sIGkpID0+XG5cdFx0bW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJykuYWRkKGksICdkYXknKVxuXHQpXG59XG5cbmludGVyZmFjZSBHZXREYXlIb3Vyc09wdGlvbnMge1xuXHRyZWZlcmVuY2VEYXRlPzogZGF5anMuRGF5anMgLy8gUmVmZXJlbmNlIGRhdGUgdG8gc2V0IHRoZSBob3VycyBvbiAoZGVmYXVsdCBpcyB0b2RheSlcblx0bGVuZ3RoPzogbnVtYmVyIC8vIE51bWJlciBvZiBob3VycyBpbiB0aGUgZGF5IChkZWZhdWx0IGlzIDI0KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF5SG91cnMoe1xuXHRyZWZlcmVuY2VEYXRlID0gZGF5anMoKSxcblx0bGVuZ3RoID0gMjQsXG59OiBHZXREYXlIb3Vyc09wdGlvbnMgPSB7fSk6IGRheWpzLkRheWpzW10ge1xuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aCB9LCAoXywgaSkgPT5cblx0XHRyZWZlcmVuY2VEYXRlLmhvdXIoaSkubWludXRlKDApLnNlY29uZCgwKS5taWxsaXNlY29uZCgwKVxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgV2Vla0RheXMgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5cbmV4cG9ydCBjb25zdCBHQVBfQkVUV0VFTl9FTEVNRU5UUyA9IDEgLy8gcHggKGdhcC0xKVxuZXhwb3J0IGNvbnN0IERBWV9OVU1CRVJfSEVJR0hUID0gMjQgLy8gcHggKGgtNilcbmV4cG9ydCBjb25zdCBFVkVOVF9CQVJfSEVJR0hUID0gMjQgLy8gcHggKGgtWzI0cHhdKVxuZXhwb3J0IGNvbnN0IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQgPSA0IC8vIERlZmF1bHQgbWF4IGV2ZW50cyBwZXIgZGF5XG5leHBvcnQgY29uc3QgRElTQUJMRURfQ0VMTF9DTEFTU05BTUUgPVxuXHQnYmctc2Vjb25kYXJ5IHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwb2ludGVyLWV2ZW50cy1ub25lJ1xuXG5leHBvcnQgY29uc3QgV0VFS19EQVlTX05VTUJFUl9NQVA6IFJlY29yZDxXZWVrRGF5cywgbnVtYmVyPiA9IHtcblx0c3VuZGF5OiAwLFxuXHRtb25kYXk6IDEsXG5cdHR1ZXNkYXk6IDIsXG5cdHdlZG5lc2RheTogMyxcblx0dGh1cnNkYXk6IDQsXG5cdGZyaWRheTogNSxcblx0c2F0dXJkYXk6IDYsXG59XG5cbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX1RPX1dFRUtfREFZUzogUmVjb3JkPG51bWJlciwgV2Vla0RheXM+ID0ge1xuXHQwOiAnc3VuZGF5Jyxcblx0MTogJ21vbmRheScsXG5cdDI6ICd0dWVzZGF5Jyxcblx0MzogJ3dlZG5lc2RheScsXG5cdDQ6ICd0aHVyc2RheScsXG5cdDU6ICdmcmlkYXknLFxuXHQ2OiAnc2F0dXJkYXknLFxufVxuIiwKICAgICJpbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHtcblx0RGlhbG9nLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dEZXNjcmlwdGlvbixcblx0RGlhbG9nRm9vdGVyLFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5pbnRlcmZhY2UgUmVjdXJyZW5jZUVkaXREaWFsb2dQcm9wcyB7XG5cdGlzT3BlbjogYm9vbGVhblxuXHRvbkNsb3NlOiAoKSA9PiB2b2lkXG5cdG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB2b2lkXG5cdG9wZXJhdGlvblR5cGU6ICdlZGl0JyB8ICdkZWxldGUnXG5cdGV2ZW50VGl0bGU6IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVjdXJyZW5jZUVkaXREaWFsb2coe1xuXHRpc09wZW4sXG5cdG9uQ2xvc2UsXG5cdG9uQ29uZmlybSxcblx0b3BlcmF0aW9uVHlwZSxcblx0ZXZlbnRUaXRsZSxcbn06IFJlY3VycmVuY2VFZGl0RGlhbG9nUHJvcHMpIHtcblx0Y29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHsgdDogY29udGV4dC50IH0pKVxuXG5cdGNvbnN0IGhhbmRsZVNjb3BlU2VsZWN0ID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0b25Db25maXJtKHNjb3BlKVxuXHRcdG9uQ2xvc2UoKVxuXHR9XG5cblx0Y29uc3QgaXNFZGl0ID0gb3BlcmF0aW9uVHlwZSA9PT0gJ2VkaXQnXG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17b25DbG9zZX0gb3Blbj17aXNPcGVufT5cblx0XHRcdDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cIm1heC13LW1kXCI+XG5cdFx0XHRcdDxEaWFsb2dIZWFkZXI+XG5cdFx0XHRcdFx0PERpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdFx0e2lzRWRpdCA/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudCcpIDogdCgnZGVsZXRlUmVjdXJyaW5nRXZlbnQnKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdDxEaWFsb2dEZXNjcmlwdGlvbj5cblx0XHRcdFx0XHRcdFwie2V2ZW50VGl0bGV9XCJ7JyAnfVxuXHRcdFx0XHRcdFx0e2lzRWRpdFxuXHRcdFx0XHRcdFx0XHQ/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJylcblx0XHRcdFx0XHRcdFx0OiB0KCdkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dEZXNjcmlwdGlvbj5cblx0XHRcdFx0PC9EaWFsb2dIZWFkZXI+XG5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTNcIj5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwganVzdGlmeS1zdGFydCBoLWF1dG8gcC00XCJcblx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNjb3BlU2VsZWN0KCd0aGlzJyl9XG5cdFx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPnt0KCd0aGlzRXZlbnQnKX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdHtpc0VkaXQgPyB0KCdvbmx5Q2hhbmdlVGhpcycpIDogdCgnb25seURlbGV0ZVRoaXMnKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ2ZvbGxvd2luZycpfVxuXHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgndGhpc0FuZEZvbGxvd2luZ0V2ZW50cycpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0e2lzRWRpdCA/IHQoJ2NoYW5nZVRoaXNBbmRGdXR1cmUnKSA6IHQoJ2RlbGV0ZVRoaXNBbmRGdXR1cmUnKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ2FsbCcpfVxuXHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgnYWxsRXZlbnRzJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0XHR7aXNFZGl0ID8gdCgnY2hhbmdlRW50aXJlU2VyaWVzJykgOiB0KCdkZWxldGVFbnRpcmVTZXJpZXMnKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0PERpYWxvZ0Zvb3Rlcj5cblx0XHRcdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uQ2xvc2V9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdFx0XHR7dCgnY2FuY2VsJyl9XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvRGlhbG9nRm9vdGVyPlxuXHRcdFx0PC9EaWFsb2dDb250ZW50PlxuXHRcdDwvRGlhbG9nPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgRHJhZ0VuZEV2ZW50IH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJy4uL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgZ2V0VXBkYXRlZEV2ZW50ID0gKFxuXHRldmVudDogRHJhZ0VuZEV2ZW50LFxuXHRhY3RpdmVFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcbikgPT4ge1xuXHRjb25zdCB7IGFjdGl2ZSwgb3ZlciB9ID0gZXZlbnRcblxuXHRpZiAoIWFjdGl2ZSB8fCAhb3ZlciB8fCAhYWN0aXZlRXZlbnQpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cblx0Y29uc3QgaXNUaW1lQ2VsbCA9IG92ZXIuZGF0YS5jdXJyZW50Py50eXBlID09PSAndGltZS1jZWxsJ1xuXHRjb25zdCB7IHJlc291cmNlSWQsIGFsbERheSB9ID0gb3Zlci5kYXRhLmN1cnJlbnQgfHwge31cblx0bGV0IG5ld1N0YXJ0XG5cblx0aWYgKGlzVGltZUNlbGwpIHtcblx0XHRjb25zdCB7IGRhdGUsIGhvdXIgPSAwLCBtaW51dGUgPSAwIH0gPSBvdmVyLmRhdGEuY3VycmVudFxuXG5cdFx0Ly8gQ3JlYXRlIG5ldyBzdGFydCB0aW1lIGJhc2VkIG9uIHRoZSBkcm9wIHRhcmdldFxuXHRcdG5ld1N0YXJ0ID0gZGF5anMoZGF0ZSkuaG91cihob3VyKS5taW51dGUobWludXRlKVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IHsgZGF0ZSB9ID0gb3Zlci5kYXRhLmN1cnJlbnRcblxuXHRcdG5ld1N0YXJ0ID0gZGF5anMoZGF0ZSlcblx0fVxuXG5cdGNvbnN0IGV2ZW50RHVyYXRpb24gPSBhY3RpdmVFdmVudC5lbmQuZGlmZihhY3RpdmVFdmVudC5zdGFydCwgJ3NlY29uZCcpXG5cblx0Ly8gQ3JlYXRlIG5ldyBlbmQgdGltZSBieSBhZGRpbmcgdGhlIG9yaWdpbmFsIGR1cmF0aW9uXG5cdGxldCBuZXdFbmQgPSBuZXdTdGFydC5hZGQoZXZlbnREdXJhdGlvbiwgJ3NlY29uZCcpXG5cblx0aWYgKG5ld0VuZC5pc1NhbWUobmV3RW5kLnN0YXJ0T2YoJ2RheScpKSkge1xuXHRcdC8vIElmIHRoZSBuZXcgZW5kIHRpbWUgaXMgYXQgbWlkbmlnaHQsIHNldCBpdCB0byAyNCBob3VycyBvZiBwYXJ0aWFsIGRheVxuXHRcdG5ld0VuZCA9IG5ld0VuZC5zdWJ0cmFjdCgxLCAnZGF5JykuZW5kT2YoJ2RheScpXG5cdH1cblxuXHQvLyBVcGRhdGUgdGhlIGV2ZW50IHdpdGggbmV3IHRpbWVzIGFuZCByZXNvdXJjZSBpZiBjaGFuZ2VkXG5cdGNvbnN0IHVwZGF0ZXMgPSB7XG5cdFx0c3RhcnQ6IG5ld1N0YXJ0LFxuXHRcdGVuZDogbmV3RW5kLFxuXHRcdHJlc291cmNlSWQsXG5cdFx0YWxsRGF5OiBpc1RpbWVDZWxsID8gZmFsc2UgOiAoYWxsRGF5ID8/IGFjdGl2ZUV2ZW50LmFsbERheSksXG5cdH1cblx0cmV0dXJuIHsgYWN0aXZlRXZlbnQsIHVwZGF0ZXMgfVxufVxuIiwKICAgICJpbXBvcnQgeyBEcmFnT3ZlcmxheSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgeyBzbmFwQ2VudGVyVG9DdXJzb3IgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi4vdHlwZXMnXG5cbmludGVyZmFjZSBFdmVudERyYWdPdmVybGF5UHJvcHMge1xuXHRyZWY6IFJlYWN0LlJlZjx7IHNldEFjdGl2ZUV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWQgfT5cbn1cblxuZXhwb3J0IGNvbnN0IEV2ZW50RHJhZ092ZXJsYXk6IFJlYWN0LkZDPEV2ZW50RHJhZ092ZXJsYXlQcm9wcz4gPSAoeyByZWYgfSkgPT4ge1xuXHRjb25zdCBbYWN0aXZlRXZlbnQsIHNldEFjdGl2ZUV2ZW50XSA9IHVzZVN0YXRlPENhbGVuZGFyRXZlbnQ+KG51bGwpXG5cblx0dXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG5cdFx0c2V0QWN0aXZlRXZlbnQsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PERyYWdPdmVybGF5IG1vZGlmaWVycz17W3NuYXBDZW50ZXJUb0N1cnNvcl19PlxuXHRcdFx0e2FjdGl2ZUV2ZW50ICYmIChcblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnY3Vyc29yLWdyYWIgdHJ1bmNhdGUgcm91bmRlZCBiZy1hbWJlci0yMDAgcC0yIHRleHQtWzEwcHhdIHNoYWRvdy1sZyBzbTp0ZXh0LXhzIHctMjAnLFxuXHRcdFx0XHRcdFx0YWN0aXZlRXZlbnQuYmFja2dyb3VuZENvbG9yIHx8ICdiZy1ibHVlLTUwMCcsXG5cdFx0XHRcdFx0XHRhY3RpdmVFdmVudC5jb2xvciB8fCAndGV4dC13aGl0ZSdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e2FjdGl2ZUV2ZW50Py50aXRsZX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpfVxuXHRcdDwvRHJhZ092ZXJsYXk+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgQ2hlY2tib3ggfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2hlY2tib3gnXG5pbXBvcnQgeyBEYXRlUGlja2VyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyJ1xuaW1wb3J0IHsgRGlhbG9nRm9vdGVyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RpYWxvZydcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2lucHV0J1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvbGFiZWwnXG5pbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgVGltZVBpY2tlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS90aW1lLXBpY2tlcidcbmltcG9ydCB7IGlzQnVzaW5lc3NEYXkgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2J1c2luZXNzLWhvdXJzJ1xuaW1wb3J0IHtcblx0YnVpbGREYXRlVGltZSxcblx0YnVpbGRFbmREYXRlVGltZSxcblx0Z2V0VGltZUNvbnN0cmFpbnRzLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2V2ZW50LWZvcm0tdXRpbHMnXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdERpYWxvZyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cnXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdG9yIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0b3IvcmVjdXJyZW5jZS1lZGl0b3InXG5pbXBvcnQgeyB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvaG9va3MvdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zJ1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyBpc1JlY3VycmluZ0V2ZW50IH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IENPTE9SX09QVElPTlMgPSBbXG5cdHtcblx0XHR2YWx1ZTogYGJnLWJsdWUtMTAwIHRleHQtYmx1ZS04MDBgLFxuXHRcdGxhYmVsOiAnQmx1ZScsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLWdyZWVuLTEwMCB0ZXh0LWdyZWVuLTgwMGAsXG5cdFx0bGFiZWw6ICdHcmVlbicsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXB1cnBsZS0xMDAgdGV4dC1wdXJwbGUtODAwYCxcblx0XHRsYWJlbDogJ1B1cnBsZScsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXJlZC0xMDAgdGV4dC1yZWQtODAwYCxcblx0XHRsYWJlbDogJ1JlZCcsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXllbGxvdy0xMDAgdGV4dC15ZWxsb3ctODAwYCxcblx0XHRsYWJlbDogJ1llbGxvdycsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXBpbmstMTAwIHRleHQtcGluay04MDBgLFxuXHRcdGxhYmVsOiAnUGluaycsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLWluZGlnby0xMDAgdGV4dC1pbmRpZ28tODAwYCxcblx0XHRsYWJlbDogJ0luZGlnbycsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLWFtYmVyLTEwMCB0ZXh0LWFtYmVyLTgwMGAsXG5cdFx0bGFiZWw6ICdBbWJlcicsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLWVtZXJhbGQtMTAwIHRleHQtZW1lcmFsZC04MDBgLFxuXHRcdGxhYmVsOiAnRW1lcmFsZCcsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXNreS0xMDAgdGV4dC1za3ktODAwYCxcblx0XHRsYWJlbDogJ1NreScsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXZpb2xldC0xMDAgdGV4dC12aW9sZXQtODAwYCxcblx0XHRsYWJlbDogJ1Zpb2xldCcsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXJvc2UtMTAwIHRleHQtcm9zZS04MDBgLFxuXHRcdGxhYmVsOiAnUm9zZScsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXRlYWwtMTAwIHRleHQtdGVhbC04MDBgLFxuXHRcdGxhYmVsOiAnVGVhbCcsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLW9yYW5nZS0xMDAgdGV4dC1vcmFuZ2UtODAwYCxcblx0XHRsYWJlbDogJ09yYW5nZScsXG5cdH0sXG5dXG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRGb3JtUHJvcHMge1xuXHRvcGVuPzogYm9vbGVhblxuXHRzZWxlY3RlZEV2ZW50PzogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0b25BZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25VcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25EZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DbG9zZTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgRXZlbnRGb3JtOiBSZWFjdC5GQzxFdmVudEZvcm1Qcm9wcz4gPSAoe1xuXHRzZWxlY3RlZEV2ZW50LFxuXHRvbkNsb3NlLFxuXHRvblVwZGF0ZSxcblx0b25EZWxldGUsXG5cdG9uQWRkLFxufSkgPT4ge1xuXHRjb25zdCB7XG5cdFx0ZGlhbG9nU3RhdGUsXG5cdFx0b3BlbkVkaXREaWFsb2csXG5cdFx0b3BlbkRlbGV0ZURpYWxvZyxcblx0XHRjbG9zZURpYWxvZyxcblx0XHRoYW5kbGVDb25maXJtLFxuXHR9ID0gdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zKG9uQ2xvc2UpXG5cblx0Y29uc3QgeyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsIHQsIGJ1c2luZXNzSG91cnMsIHRpbWVGb3JtYXQgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0XHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQuZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LFxuXHRcdFx0dDogY29udGV4dC50LFxuXHRcdFx0YnVzaW5lc3NIb3VyczogY29udGV4dC5idXNpbmVzc0hvdXJzLFxuXHRcdFx0dGltZUZvcm1hdDogY29udGV4dC50aW1lRm9ybWF0LFxuXHRcdH0pKVxuXG5cdGNvbnN0IHN0YXJ0ID0gc2VsZWN0ZWRFdmVudD8uc3RhcnQgPz8gZGF5anMoKVxuXHRjb25zdCBlbmQgPSBzZWxlY3RlZEV2ZW50Py5lbmQgPz8gZGF5anMoKS5hZGQoMSwgJ2hvdXInKVxuXG5cdC8vIEZpbmQgcGFyZW50IGV2ZW50IGlmIHRoaXMgaXMgYSByZWN1cnJpbmcgZXZlbnQgaW5zdGFuY2Vcblx0Y29uc3QgcGFyZW50RXZlbnQgPSBzZWxlY3RlZEV2ZW50XG5cdFx0PyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudClcblx0XHQ6IG51bGxcblxuXHQvLyBGb3JtIHN0YXRlXG5cdGNvbnN0IFtzdGFydERhdGUsIHNldFN0YXJ0RGF0ZV0gPSB1c2VTdGF0ZShzdGFydC50b0RhdGUoKSlcblx0Y29uc3QgW2VuZERhdGUsIHNldEVuZERhdGVdID0gdXNlU3RhdGUoZW5kLnRvRGF0ZSgpKVxuXHRjb25zdCBbaXNBbGxEYXksIHNldElzQWxsRGF5XSA9IHVzZVN0YXRlKHNlbGVjdGVkRXZlbnQ/LmFsbERheSB8fCBmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkQ29sb3IsIHNldFNlbGVjdGVkQ29sb3JdID0gdXNlU3RhdGUoXG5cdFx0c2VsZWN0ZWRFdmVudD8uY29sb3IgfHwgQ09MT1JfT1BUSU9OU1swXS52YWx1ZVxuXHQpXG5cblx0Ly8gVGltZSBzdGF0ZVxuXHRjb25zdCBbc3RhcnRUaW1lLCBzZXRTdGFydFRpbWVdID0gdXNlU3RhdGUoc3RhcnQuZm9ybWF0KCdISDptbScpKVxuXHRjb25zdCBbZW5kVGltZSwgc2V0RW5kVGltZV0gPSB1c2VTdGF0ZShlbmQuZm9ybWF0KCdISDptbScpKVxuXG5cdC8vIEluaXRpYWxpemUgZm9ybSB2YWx1ZXMgZnJvbSBzZWxlY3RlZCBldmVudCBvciBkZWZhdWx0c1xuXHRjb25zdCBbZm9ybVZhbHVlcywgc2V0Rm9ybVZhbHVlc10gPSB1c2VTdGF0ZSh7XG5cdFx0dGl0bGU6IHNlbGVjdGVkRXZlbnQ/LnRpdGxlIHx8ICcnLFxuXHRcdGRlc2NyaXB0aW9uOiBzZWxlY3RlZEV2ZW50Py5kZXNjcmlwdGlvbiB8fCAnJyxcblx0XHRsb2NhdGlvbjogc2VsZWN0ZWRFdmVudD8ubG9jYXRpb24gfHwgJycsXG5cdH0pXG5cblx0Ly8gUmVjdXJyZW5jZSBzdGF0ZSAtIHB1bGwgUlJVTEUgZnJvbSBwYXJlbnQgaWYgdGhpcyBpcyBhbiBpbnN0YW5jZVxuXHRjb25zdCBbcnJ1bGUsIHNldFJydWxlXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KCgpID0+IHtcblx0XHRjb25zdCBldmVudFJydWxlID0gc2VsZWN0ZWRFdmVudD8ucnJ1bGUgfHwgcGFyZW50RXZlbnQ/LnJydWxlXG5cdFx0cmV0dXJuIGV2ZW50UnJ1bGUgfHwgbnVsbFxuXHR9KVxuXG5cdC8vIENyZWF0ZSB3cmFwcGVyIGZ1bmN0aW9ucyB0byBmaXggVHlwZVNjcmlwdCBlcnJvcnMgd2l0aCBEYXRlUGlja2VyXG5cdGNvbnN0IGhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0c2V0U3RhcnREYXRlKGRhdGUpXG5cdFx0aWYgKGRhdGUgJiYgZGF5anMoZGF0ZSkuaXNBZnRlcihkYXlqcyhlbmREYXRlKSkpIHtcblx0XHRcdHNldEVuZERhdGUoZGF0ZSlcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVFbmREYXRlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcblx0XHRzZXRFbmREYXRlKGRhdGUpXG5cdFx0aWYgKGRhdGUgJiYgZGF5anMoZGF0ZSkuaXNCZWZvcmUoZGF5anMoc3RhcnREYXRlKSkpIHtcblx0XHRcdHNldFN0YXJ0RGF0ZShkYXRlKVxuXHRcdH1cblx0fVxuXG5cdC8vIFRpbWUgdmFsaWRhdGlvbiBoYW5kbGVycyAtIG9ubHkgdmFsaWRhdGUgd2hlbiBkYXRlcyBhcmUgdGhlIHNhbWVcblx0Y29uc3QgaGFuZGxlU3RhcnRUaW1lQ2hhbmdlID0gKHRpbWU6IHN0cmluZykgPT4ge1xuXHRcdHNldFN0YXJ0VGltZSh0aW1lKVxuXHRcdC8vIE9ubHkgdmFsaWRhdGUgaWYgc2FtZSBkYXlcblx0XHRpZiAoZGF5anMoc3RhcnREYXRlKS5pc1NhbWUoZGF5anMoZW5kRGF0ZSksICdkYXknKSAmJiB0aW1lID4gZW5kVGltZSkge1xuXHRcdFx0c2V0RW5kVGltZSh0aW1lKVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGhhbmRsZUVuZFRpbWVDaGFuZ2UgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0c2V0RW5kVGltZSh0aW1lKVxuXHRcdC8vIE9ubHkgdmFsaWRhdGUgaWYgc2FtZSBkYXlcblx0XHRpZiAoZGF5anMoc3RhcnREYXRlKS5pc1NhbWUoZGF5anMoZW5kRGF0ZSksICdkYXknKSAmJiB0aW1lIDwgc3RhcnRUaW1lKSB7XG5cdFx0XHRzZXRTdGFydFRpbWUodGltZSlcblx0XHR9XG5cdH1cblxuXHQvLyBVcGRhdGUgZm9ybSB2YWx1ZXMgd2hlbiBpbnB1dCBjaGFuZ2VzXG5cdGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gKFxuXHRcdGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PlxuXHQpID0+IHtcblx0XHRjb25zdCB7IG5hbWUsIHZhbHVlIH0gPSBlLnRhcmdldFxuXHRcdHNldEZvcm1WYWx1ZXMoKHByZXYpID0+ICh7IC4uLnByZXYsIFtuYW1lXTogdmFsdWUgfSkpXG5cdH1cblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdC8vIFJlc2V0IGVuZCB0aW1lIHdoZW4gYWxsIGRheSBpcyB0b2dnbGVkIHRvIG9uXG5cdFx0aWYgKGlzQWxsRGF5KSB7XG5cdFx0XHRzZXRFbmRUaW1lKCcyMzo1OScpXG5cdFx0fVxuXHR9LCBbaXNBbGxEYXldKVxuXG5cdGNvbnN0IGhhbmRsZVN1Ym1pdCA9IChlOiBSZWFjdC5Gb3JtRXZlbnQpID0+IHtcblx0XHRlLnByZXZlbnREZWZhdWx0KClcblxuXHRcdGNvbnN0IHN0YXJ0RGF0ZVRpbWUgPSBidWlsZERhdGVUaW1lKHN0YXJ0RGF0ZSwgc3RhcnRUaW1lLCBpc0FsbERheSlcblx0XHRjb25zdCBlbmREYXRlVGltZSA9IGJ1aWxkRW5kRGF0ZVRpbWUoZW5kRGF0ZSwgZW5kVGltZSwgaXNBbGxEYXkpXG5cblx0XHRjb25zdCBldmVudERhdGE6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRpZDogc2VsZWN0ZWRFdmVudD8uaWQgfHwgZGF5anMoKS5mb3JtYXQoJ1lZWVlNTURESEhtbXNzJyksXG5cdFx0XHR0aXRsZTogZm9ybVZhbHVlcy50aXRsZSxcblx0XHRcdHN0YXJ0OiBzdGFydERhdGVUaW1lLFxuXHRcdFx0ZW5kOiBlbmREYXRlVGltZSxcblx0XHRcdHJlc291cmNlSWQ6IHNlbGVjdGVkRXZlbnQ/LnJlc291cmNlSWQsXG5cdFx0XHRkZXNjcmlwdGlvbjogZm9ybVZhbHVlcy5kZXNjcmlwdGlvbixcblx0XHRcdGxvY2F0aW9uOiBmb3JtVmFsdWVzLmxvY2F0aW9uLFxuXHRcdFx0YWxsRGF5OiBpc0FsbERheSxcblx0XHRcdGNvbG9yOiBzZWxlY3RlZENvbG9yLFxuXHRcdFx0cnJ1bGU6IHJydWxlIHx8IHVuZGVmaW5lZCxcblx0XHR9XG5cblx0XHRpZiAoc2VsZWN0ZWRFdmVudD8uaWQgJiYgaXNSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KSkge1xuXHRcdFx0b3BlbkVkaXREaWFsb2coc2VsZWN0ZWRFdmVudCwge1xuXHRcdFx0XHR0aXRsZTogZm9ybVZhbHVlcy50aXRsZSxcblx0XHRcdFx0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG5cdFx0XHRcdGVuZDogZW5kRGF0ZVRpbWUsXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiBmb3JtVmFsdWVzLmRlc2NyaXB0aW9uLFxuXHRcdFx0XHRsb2NhdGlvbjogZm9ybVZhbHVlcy5sb2NhdGlvbixcblx0XHRcdFx0YWxsRGF5OiBpc0FsbERheSxcblx0XHRcdFx0Y29sb3I6IHNlbGVjdGVkQ29sb3IsXG5cdFx0XHRcdHJydWxlOiBycnVsZSB8fCB1bmRlZmluZWQsXG5cdFx0XHR9KVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0aWYgKHNlbGVjdGVkRXZlbnQ/LmlkKSB7XG5cdFx0XHRvblVwZGF0ZT8uKGV2ZW50RGF0YSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0b25BZGQ/LihldmVudERhdGEpXG5cdFx0fVxuXHRcdG9uQ2xvc2UoKVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRGVsZXRlID0gKCkgPT4ge1xuXHRcdGlmIChzZWxlY3RlZEV2ZW50Py5pZCkge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhpcyBpcyBhIHJlY3VycmluZyBldmVudFxuXHRcdFx0aWYgKGlzUmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudCkpIHtcblx0XHRcdFx0Ly8gU2hvdyByZWN1cnJpbmcgZXZlbnQgZGVsZXRlIGRpYWxvZ1xuXHRcdFx0XHRvcGVuRGVsZXRlRGlhbG9nKHNlbGVjdGVkRXZlbnQpXG5cdFx0XHRcdHJldHVybiAvLyBEb24ndCBjbG9zZSB0aGUgZm9ybSB5ZXQsIGxldCB0aGUgZGlhbG9nIGhhbmRsZSBpdFxuXHRcdFx0fVxuXHRcdFx0b25EZWxldGU/LihzZWxlY3RlZEV2ZW50KVxuXHRcdFx0b25DbG9zZSgpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlUlJ1bGVDaGFuZ2UgPSAobmV3UlJ1bGU6IFJSdWxlT3B0aW9ucyB8IG51bGwpID0+IHtcblx0XHRpZiAoIW5ld1JSdWxlKSB7XG5cdFx0XHRzZXRScnVsZShudWxsKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGNvbnN0IHN0YXJ0RGF0ZVRpbWUgPSBidWlsZERhdGVUaW1lKHN0YXJ0RGF0ZSwgc3RhcnRUaW1lLCBpc0FsbERheSlcblx0XHRzZXRScnVsZSh7IC4uLm5ld1JSdWxlLCBkdHN0YXJ0OiBzdGFydERhdGVUaW1lLnRvRGF0ZSgpIH0pXG5cdH1cblxuXHRjb25zdCBkaXNhYmxlZERhdGVNYXRjaGVyID0gYnVzaW5lc3NIb3Vyc1xuXHRcdD8gKGRhdGU6IERhdGUpID0+ICFpc0J1c2luZXNzRGF5KGRheWpzKGRhdGUpLCBidXNpbmVzc0hvdXJzKVxuXHRcdDogdW5kZWZpbmVkXG5cblx0Y29uc3Qgc3RhcnRDb25zdHJhaW50cyA9IGdldFRpbWVDb25zdHJhaW50cyhzdGFydERhdGUsIGJ1c2luZXNzSG91cnMpXG5cdGNvbnN0IGVuZENvbnN0cmFpbnRzID0gZ2V0VGltZUNvbnN0cmFpbnRzKGVuZERhdGUsIGJ1c2luZXNzSG91cnMpXG5cblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0PGZvcm0gY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBmbGV4LTEgbWluLWgtMFwiIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9PlxuXHRcdFx0XHQ8U2Nyb2xsQXJlYSBjbGFzc05hbWU9XCJmbGV4LTEgbWluLWgtMFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMyBzbTpnYXAtNCBwLTFcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMlwiPlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCIgaHRtbEZvcj1cInRpdGxlXCI+XG5cdFx0XHRcdFx0XHRcdFx0e3QoJ3RpdGxlJyl9XG5cdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0aWQ9XCJ0aXRsZVwiXG5cdFx0XHRcdFx0XHRcdFx0bmFtZT1cInRpdGxlXCJcblx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9e3QoJ2V2ZW50VGl0bGVQbGFjZWhvbGRlcicpfVxuXHRcdFx0XHRcdFx0XHRcdHJlcXVpcmVkXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2Zvcm1WYWx1ZXMudGl0bGV9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIiBodG1sRm9yPVwiZGVzY3JpcHRpb25cIj5cblx0XHRcdFx0XHRcdFx0XHR7dCgnZGVzY3JpcHRpb24nKX1cblx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRpZD1cImRlc2NyaXB0aW9uXCJcblx0XHRcdFx0XHRcdFx0XHRuYW1lPVwiZGVzY3JpcHRpb25cIlxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnZXZlbnREZXNjcmlwdGlvblBsYWNlaG9sZGVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2Zvcm1WYWx1ZXMuZGVzY3JpcHRpb259XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cblx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17aXNBbGxEYXl9XG5cdFx0XHRcdFx0XHRcdFx0aWQ9XCJhbGxEYXlcIlxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17KGNoZWNrZWQpID0+IHNldElzQWxsRGF5KGNoZWNrZWQgPT09IHRydWUpfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCIgaHRtbEZvcj1cImFsbERheVwiPlxuXHRcdFx0XHRcdFx0XHRcdHt0KCdhbGxEYXknKX1cblx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIgc206Z2FwLTRcIj5cblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ3N0YXJ0RGF0ZScpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PERhdGVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VPblNlbGVjdFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZT17c3RhcnREYXRlfVxuXHRcdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkRGF0ZU1hdGNoZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlU3RhcnREYXRlQ2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnZW5kRGF0ZScpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PERhdGVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VPblNlbGVjdFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZT17ZW5kRGF0ZX1cblx0XHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkPXtkaXNhYmxlZERhdGVNYXRjaGVyfVxuXHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZUVuZERhdGVDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0eyFpc0FsbERheSAmJiAoXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtMiBzbTpnYXAtNFwiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ3N0YXJ0VGltZScpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8VGltZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtdC0xIGgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1heFRpbWU9e3N0YXJ0Q29uc3RyYWludHMubWF4fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtaW5UaW1lPXtzdGFydENvbnN0cmFpbnRzLm1pbn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZT1cInN0YXJ0LXRpbWVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlU3RhcnRUaW1lQ2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17c3RhcnRUaW1lfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KCdlbmRUaW1lJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdDxUaW1lUGlja2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTEgaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4VGltZT17ZW5kQ29uc3RyYWludHMubWF4fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtaW5UaW1lPXtlbmRDb25zdHJhaW50cy5taW59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU9XCJlbmQtdGltZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVFbmRUaW1lQ2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17ZW5kVGltZX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KX1cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnY29sb3InKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0e0NPTE9SX09QVElPTlMubWFwKChjb2xvcikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcmlhLWxhYmVsPXtjb2xvci5sYWJlbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRgJHtjb2xvci52YWx1ZX0gaC02IHctNiByb3VuZGVkLWZ1bGwgc206aC04IHNtOnctOGAsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRDb2xvciA9PT0gY29sb3IudmFsdWUgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdyaW5nLTIgcmluZy1ibGFjayByaW5nLW9mZnNldC0xIHNtOnJpbmctb2Zmc2V0LTInXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17Y29sb3IudmFsdWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNldFNlbGVjdGVkQ29sb3IoY29sb3IudmFsdWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMSBzbTpnYXAtMlwiPlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCIgaHRtbEZvcj1cImxvY2F0aW9uXCI+XG5cdFx0XHRcdFx0XHRcdFx0e3QoJ2xvY2F0aW9uJyl9XG5cdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0aWQ9XCJsb2NhdGlvblwiXG5cdFx0XHRcdFx0XHRcdFx0bmFtZT1cImxvY2F0aW9uXCJcblx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9e3QoJ2V2ZW50TG9jYXRpb25QbGFjZWhvbGRlcicpfVxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtmb3JtVmFsdWVzLmxvY2F0aW9ufVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdHsvKiBSZWN1cnJlbmNlIFNlY3Rpb24gKi99XG5cdFx0XHRcdFx0XHQ8UmVjdXJyZW5jZUVkaXRvciBvbkNoYW5nZT17aGFuZGxlUlJ1bGVDaGFuZ2V9IHZhbHVlPXtycnVsZX0gLz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9TY3JvbGxBcmVhPlxuXG5cdFx0XHRcdDxEaWFsb2dGb290ZXIgY2xhc3NOYW1lPVwibXQtNCBzaHJpbmstMCBmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgc206ZmxleC1yb3cgc206Z2FwLTBcIj5cblx0XHRcdFx0XHR7c2VsZWN0ZWRFdmVudD8uaWQgJiYgKFxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgc206bXItYXV0byBzbTp3LWF1dG9cIlxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtoYW5kbGVEZWxldGV9XG5cdFx0XHRcdFx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZGVzdHJ1Y3RpdmVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7dCgnZGVsZXRlJyl9XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgZ2FwLTIgc206dy1hdXRvXCI+XG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXgtMSBzbTpmbGV4LW5vbmVcIlxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtvbkNsb3NlfVxuXHRcdFx0XHRcdFx0XHRzaXplPVwic21cIlxuXHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7dCgnY2FuY2VsJyl9XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdDxCdXR0b24gY2xhc3NOYW1lPVwiZmxleC0xIHNtOmZsZXgtbm9uZVwiIHNpemU9XCJzbVwiIHR5cGU9XCJzdWJtaXRcIj5cblx0XHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgndXBkYXRlJykgOiB0KCdjcmVhdGUnKX1cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0RpYWxvZ0Zvb3Rlcj5cblx0XHRcdDwvZm9ybT5cblxuXHRcdFx0ey8qIFJlY3VycmluZyBFdmVudCBFZGl0IERpYWxvZyAqL31cblx0XHRcdDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuXHRcdFx0XHRldmVudFRpdGxlPXtkaWFsb2dTdGF0ZS5ldmVudD8udGl0bGUgfHwgJyd9XG5cdFx0XHRcdGlzT3Blbj17ZGlhbG9nU3RhdGUuaXNPcGVufVxuXHRcdFx0XHRvbkNsb3NlPXtjbG9zZURpYWxvZ31cblx0XHRcdFx0b25Db25maXJtPXtoYW5kbGVDb25maXJtfVxuXHRcdFx0XHRvcGVyYXRpb25UeXBlPXtkaWFsb2dTdGF0ZS5vcGVyYXRpb25UeXBlfVxuXHRcdFx0Lz5cblx0XHQ8Lz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBDaGVja2JveFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtY2hlY2tib3gnXG5pbXBvcnQgeyBDaGVja0ljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDaGVja2JveCh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBDaGVja2JveFByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxDaGVja2JveFByaW1pdGl2ZS5Sb290XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQncGVlciBib3JkZXItaW5wdXQgZGFyazpiZy1pbnB1dC8zMCBkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1wcmltYXJ5IGRhdGEtW3N0YXRlPWNoZWNrZWRdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6ZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTpib3JkZXItcHJpbWFyeSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBzaXplLTQgc2hyaW5rLTAgcm91bmRlZC1bNHB4XSBib3JkZXIgc2hhZG93LXhzIHRyYW5zaXRpb24tc2hhZG93IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjaGVja2JveFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvclxuXHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWN1cnJlbnQgdHJhbnNpdGlvbi1ub25lXCJcblx0XHRcdFx0ZGF0YS1zbG90PVwiY2hlY2tib3gtaW5kaWNhdG9yXCJcblx0XHRcdD5cblx0XHRcdFx0PENoZWNrSWNvbiBjbGFzc05hbWU9XCJzaXplLTMuNVwiIC8+XG5cdFx0XHQ8L0NoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvcj5cblx0XHQ8L0NoZWNrYm94UHJpbWl0aXZlLlJvb3Q+XG5cdClcbn1cblxuZXhwb3J0IHsgQ2hlY2tib3ggfVxuIiwKICAgICJpbXBvcnQgeyBQb3BvdmVyQ2xvc2UgfSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtcG9wb3ZlcidcbmltcG9ydCB7IENhbGVuZGFyIGFzIENhbGVuZGFySWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBNYXRjaGVyIH0gZnJvbSAncmVhY3QtZGF5LXBpY2tlcidcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyBDYWxlbmRhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9jYWxlbmRhcidcbmltcG9ydCB7XG5cdFBvcG92ZXIsXG5cdFBvcG92ZXJDb250ZW50LFxuXHRQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3BvcG92ZXInXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgRGF0ZVBpY2tlclByb3BzIHtcblx0ZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZFxuXHRvbkNoYW5nZT86IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB2b2lkXG5cdGxhYmVsPzogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRjbG9zZU9uU2VsZWN0PzogYm9vbGVhblxuXHRkaXNhYmxlZD86IE1hdGNoZXIgfCBNYXRjaGVyW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERhdGVQaWNrZXIoe1xuXHRkYXRlLFxuXHRjbG9zZU9uU2VsZWN0LFxuXHRvbkNoYW5nZSxcblx0bGFiZWwgPSAnUGljayBhIGRhdGUnLFxuXHRjbGFzc05hbWUsXG5cdGRpc2FibGVkLFxufTogRGF0ZVBpY2tlclByb3BzKSB7XG5cdGNvbnN0IHBvcE92ZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsPihudWxsKVxuXHRjb25zdCBbc2VsZWN0ZWREYXRlLCBzZXRTZWxlY3RlZERhdGVdID0gdXNlU3RhdGU8RGF0ZSB8IHVuZGVmaW5lZD4oZGF0ZSlcblxuXHQvLyBTeW5jIGRhdGUgc3RhdGUgd2l0aCBkYXRlIHByb3Bcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRzZXRTZWxlY3RlZERhdGUoZGF0ZSlcblx0fSwgW2RhdGVdKVxuXG5cdGNvbnN0IGhhbmRsZURhdGVTZWxlY3QgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuXHRcdHNldFNlbGVjdGVkRGF0ZShkYXRlKVxuXHRcdGlmIChjbG9zZU9uU2VsZWN0KSB7XG5cdFx0XHRwb3BPdmVyUmVmLmN1cnJlbnQ/LmNsaWNrKClcblx0XHR9XG5cdFx0b25DaGFuZ2U/LihkYXRlKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cblx0XHRcdDxQb3BvdmVyPlxuXHRcdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHQnZGF0YS1bZW1wdHk9dHJ1ZV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHctZnVsbCBqdXN0aWZ5LXN0YXJ0IHRleHQtbGVmdCBmb250LW5vcm1hbCdcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRkYXRhLWVtcHR5PXshZGF0ZX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8Q2FsZW5kYXJJY29uIC8+XG5cdFx0XHRcdFx0XHR7c2VsZWN0ZWREYXRlID8gKFxuXHRcdFx0XHRcdFx0XHRkYXlqcyhzZWxlY3RlZERhdGUpLmZvcm1hdCgnTU1NIEQsIFlZWVknKVxuXHRcdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdFx0PHNwYW4+e2xhYmVsfTwvc3Bhbj5cblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvUG9wb3ZlclRyaWdnZXI+XG5cdFx0XHRcdDxQb3BvdmVyQ29udGVudCBhbGlnbj1cInN0YXJ0XCIgY2xhc3NOYW1lPVwidy1hdXRvIHAtMFwiPlxuXHRcdFx0XHRcdDxQb3BvdmVyQ2xvc2UgcmVmPXtwb3BPdmVyUmVmfSAvPlxuXHRcdFx0XHRcdDxDYWxlbmRhclxuXHRcdFx0XHRcdFx0Y2FwdGlvbkxheW91dD1cImRyb3Bkb3duXCJcblx0XHRcdFx0XHRcdGRlZmF1bHRNb250aD17c2VsZWN0ZWREYXRlfVxuXHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkfVxuXHRcdFx0XHRcdFx0bW9kZT1cInNpbmdsZVwiXG5cdFx0XHRcdFx0XHRvblNlbGVjdD17aGFuZGxlRGF0ZVNlbGVjdH1cblx0XHRcdFx0XHRcdHNlbGVjdGVkPXtzZWxlY3RlZERhdGV9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHRcdDwvUG9wb3Zlcj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQge1xuXHRDaGV2cm9uRG93bkljb24sXG5cdENoZXZyb25MZWZ0SWNvbixcblx0Q2hldnJvblJpZ2h0SWNvbixcbn0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IERheUJ1dHRvbiB9IGZyb20gJ3JlYWN0LWRheS1waWNrZXInXG5pbXBvcnQgeyBEYXlQaWNrZXIsIGdldERlZmF1bHRDbGFzc05hbWVzIH0gZnJvbSAncmVhY3QtZGF5LXBpY2tlcidcbmltcG9ydCB7IEJ1dHRvbiwgYnV0dG9uVmFyaWFudHMgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gQ2FsZW5kYXIoe1xuXHRjbGFzc05hbWUsXG5cdGNsYXNzTmFtZXMsXG5cdHNob3dPdXRzaWRlRGF5cyA9IHRydWUsXG5cdGNhcHRpb25MYXlvdXQgPSAnbGFiZWwnLFxuXHRidXR0b25WYXJpYW50ID0gJ2dob3N0Jyxcblx0Zm9ybWF0dGVycyxcblx0Y29tcG9uZW50cyxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEYXlQaWNrZXI+ICYge1xuXHRidXR0b25WYXJpYW50PzogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIEJ1dHRvbj5bJ3ZhcmlhbnQnXVxufSkge1xuXHRjb25zdCBkZWZhdWx0Q2xhc3NOYW1lcyA9IGdldERlZmF1bHRDbGFzc05hbWVzKClcblxuXHRyZXR1cm4gKFxuXHRcdDxEYXlQaWNrZXJcblx0XHRcdGNhcHRpb25MYXlvdXQ9e2NhcHRpb25MYXlvdXR9XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnYmctYmFja2dyb3VuZCBncm91cC9jYWxlbmRhciBwLTMgWy0tY2VsbC1zaXplOi0tc3BhY2luZyg4KV0gW1tkYXRhLXNsb3Q9Y2FyZC1jb250ZW50XV8mXTpiZy10cmFuc3BhcmVudCBbW2RhdGEtc2xvdD1wb3BvdmVyLWNvbnRlbnRdXyZdOmJnLXRyYW5zcGFyZW50Jyxcblx0XHRcdFx0U3RyaW5nLnJhd2BydGw6Kio6Wy5yZHAtYnV0dG9uXFxfbmV4dD5zdmddOnJvdGF0ZS0xODBgLFxuXHRcdFx0XHRTdHJpbmcucmF3YHJ0bDoqKjpbLnJkcC1idXR0b25cXF9wcmV2aW91cz5zdmddOnJvdGF0ZS0xODBgLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRjbGFzc05hbWVzPXt7XG5cdFx0XHRcdHJvb3Q6IGNuKCd3LWZpdCcsIGRlZmF1bHRDbGFzc05hbWVzLnJvb3QpLFxuXHRcdFx0XHRtb250aHM6IGNuKFxuXHRcdFx0XHRcdCdmbGV4IGdhcC00IGZsZXgtY29sIG1kOmZsZXgtcm93IHJlbGF0aXZlJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5tb250aHNcblx0XHRcdFx0KSxcblx0XHRcdFx0bW9udGg6IGNuKCdmbGV4IGZsZXgtY29sIHctZnVsbCBnYXAtNCcsIGRlZmF1bHRDbGFzc05hbWVzLm1vbnRoKSxcblx0XHRcdFx0bmF2OiBjbihcblx0XHRcdFx0XHQnZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdy1mdWxsIGFic29sdXRlIHRvcC0wIGluc2V0LXgtMCBqdXN0aWZ5LWJldHdlZW4nLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLm5hdlxuXHRcdFx0XHQpLFxuXHRcdFx0XHRidXR0b25fcHJldmlvdXM6IGNuKFxuXHRcdFx0XHRcdGJ1dHRvblZhcmlhbnRzKHsgdmFyaWFudDogYnV0dG9uVmFyaWFudCB9KSxcblx0XHRcdFx0XHQnc2l6ZS0oLS1jZWxsLXNpemUpIGFyaWEtZGlzYWJsZWQ6b3BhY2l0eS01MCBwLTAgc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmJ1dHRvbl9wcmV2aW91c1xuXHRcdFx0XHQpLFxuXHRcdFx0XHRidXR0b25fbmV4dDogY24oXG5cdFx0XHRcdFx0YnV0dG9uVmFyaWFudHMoeyB2YXJpYW50OiBidXR0b25WYXJpYW50IH0pLFxuXHRcdFx0XHRcdCdzaXplLSgtLWNlbGwtc2l6ZSkgYXJpYS1kaXNhYmxlZDpvcGFjaXR5LTUwIHAtMCBzZWxlY3Qtbm9uZScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuYnV0dG9uX25leHRcblx0XHRcdFx0KSxcblx0XHRcdFx0bW9udGhfY2FwdGlvbjogY24oXG5cdFx0XHRcdFx0J2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtKC0tY2VsbC1zaXplKSB3LWZ1bGwgcHgtKC0tY2VsbC1zaXplKScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMubW9udGhfY2FwdGlvblxuXHRcdFx0XHQpLFxuXHRcdFx0XHRkcm9wZG93bnM6IGNuKFxuXHRcdFx0XHRcdCd3LWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1zbSBmb250LW1lZGl1bSBqdXN0aWZ5LWNlbnRlciBoLSgtLWNlbGwtc2l6ZSkgZ2FwLTEuNScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25zXG5cdFx0XHRcdCksXG5cdFx0XHRcdGRyb3Bkb3duX3Jvb3Q6IGNuKFxuXHRcdFx0XHRcdCdyZWxhdGl2ZSBoYXMtZm9jdXM6Ym9yZGVyLXJpbmcgYm9yZGVyIGJvcmRlci1pbnB1dCBzaGFkb3cteHMgaGFzLWZvY3VzOnJpbmctcmluZy81MCBoYXMtZm9jdXM6cmluZy1bM3B4XSByb3VuZGVkLW1kJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5kcm9wZG93bl9yb290XG5cdFx0XHRcdCksXG5cdFx0XHRcdGRyb3Bkb3duOiBjbihcblx0XHRcdFx0XHQnYWJzb2x1dGUgYmctcG9wb3ZlciBpbnNldC0wIG9wYWNpdHktMCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25cblx0XHRcdFx0KSxcblx0XHRcdFx0Y2FwdGlvbl9sYWJlbDogY24oXG5cdFx0XHRcdFx0J3NlbGVjdC1ub25lIGZvbnQtbWVkaXVtJyxcblx0XHRcdFx0XHRjYXB0aW9uTGF5b3V0ID09PSAnbGFiZWwnXG5cdFx0XHRcdFx0XHQ/ICd0ZXh0LXNtJ1xuXHRcdFx0XHRcdFx0OiAncm91bmRlZC1tZCBwbC0yIHByLTEgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1zbSBoLTggWyY+c3ZnXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgWyY+c3ZnXTpzaXplLTMuNScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuY2FwdGlvbl9sYWJlbFxuXHRcdFx0XHQpLFxuXHRcdFx0XHR0YWJsZTogJ3ctZnVsbCBib3JkZXItY29sbGFwc2UnLFxuXHRcdFx0XHR3ZWVrZGF5czogY24oJ2ZsZXgnLCBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrZGF5cyksXG5cdFx0XHRcdHdlZWtkYXk6IGNuKFxuXHRcdFx0XHRcdCd0ZXh0LW11dGVkLWZvcmVncm91bmQgcm91bmRlZC1tZCBmbGV4LTEgZm9udC1ub3JtYWwgdGV4dC1bMC44cmVtXSBzZWxlY3Qtbm9uZScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMud2Vla2RheVxuXHRcdFx0XHQpLFxuXHRcdFx0XHR3ZWVrOiBjbignZmxleCB3LWZ1bGwgbXQtMicsIGRlZmF1bHRDbGFzc05hbWVzLndlZWspLFxuXHRcdFx0XHR3ZWVrX251bWJlcl9oZWFkZXI6IGNuKFxuXHRcdFx0XHRcdCdzZWxlY3Qtbm9uZSB3LSgtLWNlbGwtc2l6ZSknLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLndlZWtfbnVtYmVyX2hlYWRlclxuXHRcdFx0XHQpLFxuXHRcdFx0XHR3ZWVrX251bWJlcjogY24oXG5cdFx0XHRcdFx0J3RleHQtWzAuOHJlbV0gc2VsZWN0LW5vbmUgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrX251bWJlclxuXHRcdFx0XHQpLFxuXHRcdFx0XHRkYXk6IGNuKFxuXHRcdFx0XHRcdCdyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHAtMCB0ZXh0LWNlbnRlciBbJjpsYXN0LWNoaWxkW2RhdGEtc2VsZWN0ZWQ9dHJ1ZV1fYnV0dG9uXTpyb3VuZGVkLXItbWQgZ3JvdXAvZGF5IGFzcGVjdC1zcXVhcmUgc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRcdHByb3BzLnNob3dXZWVrTnVtYmVyXG5cdFx0XHRcdFx0XHQ/ICdbJjpudGgtY2hpbGQoMilbZGF0YS1zZWxlY3RlZD10cnVlXV9idXR0b25dOnJvdW5kZWQtbC1tZCdcblx0XHRcdFx0XHRcdDogJ1smOmZpcnN0LWNoaWxkW2RhdGEtc2VsZWN0ZWQ9dHJ1ZV1fYnV0dG9uXTpyb3VuZGVkLWwtbWQnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmRheVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRyYW5nZV9zdGFydDogY24oXG5cdFx0XHRcdFx0J3JvdW5kZWQtbC1tZCBiZy1hY2NlbnQnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX3N0YXJ0XG5cdFx0XHRcdCksXG5cdFx0XHRcdHJhbmdlX21pZGRsZTogY24oJ3JvdW5kZWQtbm9uZScsIGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX21pZGRsZSksXG5cdFx0XHRcdHJhbmdlX2VuZDogY24oJ3JvdW5kZWQtci1tZCBiZy1hY2NlbnQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5yYW5nZV9lbmQpLFxuXHRcdFx0XHR0b2RheTogY24oXG5cdFx0XHRcdFx0J2JnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIHJvdW5kZWQtbWQgZGF0YS1bc2VsZWN0ZWQ9dHJ1ZV06cm91bmRlZC1ub25lJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy50b2RheVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRvdXRzaWRlOiBjbihcblx0XHRcdFx0XHQndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGFyaWEtc2VsZWN0ZWQ6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5vdXRzaWRlXG5cdFx0XHRcdCksXG5cdFx0XHRcdGRpc2FibGVkOiBjbihcblx0XHRcdFx0XHQndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG9wYWNpdHktNTAnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmRpc2FibGVkXG5cdFx0XHRcdCksXG5cdFx0XHRcdGhpZGRlbjogY24oJ2ludmlzaWJsZScsIGRlZmF1bHRDbGFzc05hbWVzLmhpZGRlbiksXG5cdFx0XHRcdC4uLmNsYXNzTmFtZXMsXG5cdFx0XHR9fVxuXHRcdFx0Y29tcG9uZW50cz17e1xuXHRcdFx0XHRSb290OiAoeyBjbGFzc05hbWUsIHJvb3RSZWYsIC4uLnByb3BzIH0pID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKGNsYXNzTmFtZSl9XG5cdFx0XHRcdFx0XHRcdGRhdGEtc2xvdD1cImNhbGVuZGFyXCJcblx0XHRcdFx0XHRcdFx0cmVmPXtyb290UmVmfVxuXHRcdFx0XHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSxcblx0XHRcdFx0Q2hldnJvbjogKHsgY2xhc3NOYW1lLCBvcmllbnRhdGlvbiwgLi4ucHJvcHMgfSkgPT4ge1xuXHRcdFx0XHRcdGlmIChvcmllbnRhdGlvbiA9PT0gJ2xlZnQnKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8Q2hldnJvbkxlZnRJY29uIGNsYXNzTmFtZT17Y24oJ3NpemUtNCcsIGNsYXNzTmFtZSl9IHsuLi5wcm9wc30gLz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAob3JpZW50YXRpb24gPT09ICdyaWdodCcpIHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxDaGV2cm9uUmlnaHRJY29uXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX1cblx0XHRcdFx0XHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX0gey4uLnByb3BzfSAvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSxcblx0XHRcdFx0RGF5QnV0dG9uOiBDYWxlbmRhckRheUJ1dHRvbixcblx0XHRcdFx0V2Vla051bWJlcjogKHsgY2hpbGRyZW4sIC4uLnByb3BzIH0pID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PHRkIHsuLi5wcm9wc30+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBzaXplLSgtLWNlbGwtc2l6ZSkgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtY2VudGVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQuLi5jb21wb25lbnRzLFxuXHRcdFx0fX1cblx0XHRcdGZvcm1hdHRlcnM9e3tcblx0XHRcdFx0Zm9ybWF0TW9udGhEcm9wZG93bjogKGRhdGUpID0+XG5cdFx0XHRcdFx0ZGF0ZS50b0xvY2FsZVN0cmluZygnZGVmYXVsdCcsIHsgbW9udGg6ICdzaG9ydCcgfSksXG5cdFx0XHRcdC4uLmZvcm1hdHRlcnMsXG5cdFx0XHR9fVxuXHRcdFx0c2hvd091dHNpZGVEYXlzPXtzaG93T3V0c2lkZURheXN9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYWxlbmRhckRheUJ1dHRvbih7XG5cdGNsYXNzTmFtZSxcblx0ZGF5LFxuXHRtb2RpZmllcnMsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGF5QnV0dG9uPikge1xuXHRjb25zdCBkZWZhdWx0Q2xhc3NOYW1lcyA9IGdldERlZmF1bHRDbGFzc05hbWVzKClcblxuXHRjb25zdCByZWYgPSBSZWFjdC51c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+KG51bGwpXG5cdFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKG1vZGlmaWVycy5mb2N1c2VkKSB7XG5cdFx0XHRyZWYuY3VycmVudD8uZm9jdXMoKVxuXHRcdH1cblx0fSwgW21vZGlmaWVycy5mb2N1c2VkXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxCdXR0b25cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdkYXRhLVtzZWxlY3RlZC1zaW5nbGU9dHJ1ZV06YmctcHJpbWFyeSBkYXRhLVtzZWxlY3RlZC1zaW5nbGU9dHJ1ZV06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGF0YS1bcmFuZ2UtbWlkZGxlPXRydWVdOmJnLWFjY2VudCBkYXRhLVtyYW5nZS1taWRkbGU9dHJ1ZV06dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3JhbmdlLWVuZD10cnVlXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpib3JkZXItcmluZyBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpyaW5nLXJpbmcvNTAgZGFyazpob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGZsZXggYXNwZWN0LXNxdWFyZSBzaXplLWF1dG8gdy1mdWxsIG1pbi13LSgtLWNlbGwtc2l6ZSkgZmxleC1jb2wgZ2FwLTEgbGVhZGluZy1ub25lIGZvbnQtbm9ybWFsIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnJlbGF0aXZlIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnotMTAgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6cmluZy1bM3B4XSBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06cm91bmRlZC1tZCBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06cm91bmRlZC1yLW1kIGRhdGEtW3JhbmdlLW1pZGRsZT10cnVlXTpyb3VuZGVkLW5vbmUgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06cm91bmRlZC1tZCBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpyb3VuZGVkLWwtbWQgWyY+c3Bhbl06dGV4dC14cyBbJj5zcGFuXTpvcGFjaXR5LTcwJyxcblx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZGF5LFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLWRheT17ZGF5LmRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCl9XG5cdFx0XHRkYXRhLXJhbmdlLWVuZD17bW9kaWZpZXJzLnJhbmdlX2VuZH1cblx0XHRcdGRhdGEtcmFuZ2UtbWlkZGxlPXttb2RpZmllcnMucmFuZ2VfbWlkZGxlfVxuXHRcdFx0ZGF0YS1yYW5nZS1zdGFydD17bW9kaWZpZXJzLnJhbmdlX3N0YXJ0fVxuXHRcdFx0ZGF0YS1zZWxlY3RlZC1zaW5nbGU9e1xuXHRcdFx0XHRtb2RpZmllcnMuc2VsZWN0ZWQgJiZcblx0XHRcdFx0IW1vZGlmaWVycy5yYW5nZV9zdGFydCAmJlxuXHRcdFx0XHQhbW9kaWZpZXJzLnJhbmdlX2VuZCAmJlxuXHRcdFx0XHQhbW9kaWZpZXJzLnJhbmdlX21pZGRsZVxuXHRcdFx0fVxuXHRcdFx0cmVmPXtyZWZ9XG5cdFx0XHRzaXplPVwiaWNvblwiXG5cdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHsgQ2FsZW5kYXIsIENhbGVuZGFyRGF5QnV0dG9uIH1cbiIsCiAgICAiaW1wb3J0ICogYXMgUG9wb3ZlclByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtcG9wb3ZlcidcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFBvcG92ZXIoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwicG9wb3ZlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gUG9wb3ZlclRyaWdnZXIoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuVHJpZ2dlcj4pIHtcblx0cmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwicG9wb3Zlci10cmlnZ2VyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBQb3BvdmVyQ29udGVudCh7XG5cdGNsYXNzTmFtZSxcblx0YWxpZ24gPSAnY2VudGVyJyxcblx0c2lkZU9mZnNldCA9IDQsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5Db250ZW50Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxQb3BvdmVyUHJpbWl0aXZlLlBvcnRhbD5cblx0XHRcdDxQb3BvdmVyUHJpbWl0aXZlLkNvbnRlbnRcblx0XHRcdFx0YWxpZ249e2FsaWdufVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiB6LTUwIHctNzIgb3JpZ2luLSgtLXJhZGl4LXBvcG92ZXItY29udGVudC10cmFuc2Zvcm0tb3JpZ2luKSByb3VuZGVkLW1kIGJvcmRlciBwLTQgc2hhZG93LW1kIG91dGxpbmUtaGlkZGVuJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS1zbG90PVwicG9wb3Zlci1jb250ZW50XCJcblx0XHRcdFx0c2lkZU9mZnNldD17c2lkZU9mZnNldH1cblx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0Lz5cblx0XHQ8L1BvcG92ZXJQcmltaXRpdmUuUG9ydGFsPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJBbmNob3Ioe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yPikge1xuXHRyZXR1cm4gPFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yIGRhdGEtc2xvdD1cInBvcG92ZXItYW5jaG9yXCIgey4uLnByb3BzfSAvPlxufVxuXG5leHBvcnQgeyBQb3BvdmVyLCBQb3BvdmVyVHJpZ2dlciwgUG9wb3ZlckNvbnRlbnQsIFBvcG92ZXJBbmNob3IgfVxuIiwKICAgICJpbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBJbnB1dCh7IGNsYXNzTmFtZSwgdHlwZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2lucHV0Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8aW5wdXRcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmaWxlOnRleHQtZm9yZWdyb3VuZCBwbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQgc2VsZWN0aW9uOmJnLXByaW1hcnkgc2VsZWN0aW9uOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6YmctaW5wdXQvMzAgYm9yZGVyLWlucHV0IGZsZXggaC05IHctZnVsbCBtaW4tdy0wIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTMgcHktMSB0ZXh0LWJhc2Ugc2hhZG93LXhzIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmaWxlOmlubGluZS1mbGV4IGZpbGU6aC03IGZpbGU6Ym9yZGVyLTAgZmlsZTpiZy10cmFuc3BhcmVudCBmaWxlOnRleHQtc20gZmlsZTpmb250LW1lZGl1bSBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIG1kOnRleHQtc20nLFxuXHRcdFx0XHQnZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0nLFxuXHRcdFx0XHQnYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiaW5wdXRcIlxuXHRcdFx0dHlwZT17dHlwZX1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7IElucHV0IH1cbiIsCiAgICAiaW1wb3J0ICogYXMgTGFiZWxQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWxhYmVsJ1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gTGFiZWwoe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgTGFiZWxQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIChcblx0XHQ8TGFiZWxQcmltaXRpdmUuUm9vdFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc20gbGVhZGluZy1ub25lIGZvbnQtbWVkaXVtIHNlbGVjdC1ub25lIGdyb3VwLWRhdGEtW2Rpc2FibGVkPXRydWVdOnBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtZGF0YS1bZGlzYWJsZWQ9dHJ1ZV06b3BhY2l0eS01MCBwZWVyLWRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBwZWVyLWRpc2FibGVkOm9wYWNpdHktNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJsYWJlbFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgeyBMYWJlbCB9XG4iLAogICAgImltcG9ydCAqIGFzIFNjcm9sbEFyZWFQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXNjcm9sbC1hcmVhJ1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIFNjcm9sbEFyZWFQcm9wc1xuXHRleHRlbmRzIFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3Q+IHtcblx0dmlld1BvcnRQcm9wcz86IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlZpZXdwb3J0PlxufVxuXG5mdW5jdGlvbiBTY3JvbGxBcmVhKHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0dmlld1BvcnRQcm9wcyxcblx0Li4ucHJvcHNcbn06IFNjcm9sbEFyZWFQcm9wcykge1xuXHRyZXR1cm4gKFxuXHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3Rcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3JlbGF0aXZlJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydFxuXHRcdFx0XHR7Li4udmlld1BvcnRQcm9wc31cblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgc2l6ZS1mdWxsIHJvdW5kZWQtW2luaGVyaXRdIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTEnLFxuXHRcdFx0XHRcdHZpZXdQb3J0UHJvcHM/LmNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS12aWV3cG9ydFwiXG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cblx0XHRcdDxTY3JvbGxCYXIgLz5cblx0XHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLkNvcm5lciAvPlxuXHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNjcm9sbEJhcih7XG5cdGNsYXNzTmFtZSxcblx0b3JpZW50YXRpb24gPSAndmVydGljYWwnLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhcj4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCB0b3VjaC1ub25lIHAtcHggdHJhbnNpdGlvbi1jb2xvcnMgc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyAmJlxuXHRcdFx0XHRcdCdoLWZ1bGwgdy0yLjUgYm9yZGVyLWwgYm9yZGVyLWwtdHJhbnNwYXJlbnQnLFxuXHRcdFx0XHRvcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnICYmXG5cdFx0XHRcdFx0J2gtMi41IGZsZXgtY29sIGJvcmRlci10IGJvcmRlci10LXRyYW5zcGFyZW50Jyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtc2Nyb2xsYmFyXCJcblx0XHRcdG9yaWVudGF0aW9uPXtvcmllbnRhdGlvbn1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhVGh1bWJcblx0XHRcdFx0Y2xhc3NOYW1lPVwiYmctYm9yZGVyIHJlbGF0aXZlIGZsZXgtMSByb3VuZGVkLWZ1bGxcIlxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS10aHVtYlwiXG5cdFx0XHQvPlxuXHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyPlxuXHQpXG59XG5cbmV4cG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9XG4iLAogICAgImltcG9ydCB7IENsb2NrIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvaW5wdXQnXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IHVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXIgfSBmcm9tICdAL2hvb2tzL3VzZS1hdXRvY29tcGxldGUtdGltZXBpY2tlcidcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgdHlwZSB7IFRpbWVGb3JtYXQgfSBmcm9tICdAL3R5cGVzJ1xuXG5jb25zdCBoYW5kbGVXaGVlbCA9IChlOiBSZWFjdC5XaGVlbEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuXHQvLyBQcmV2ZW50IGV2ZW50IGZyb20gYnViYmxpbmcgdG8gcHJldmVudCBQb3BvdmVyIGZyb20gY2xvc2luZ1xuXHRlLnN0b3BQcm9wYWdhdGlvbigpXG59XG5cbmludGVyZmFjZSBUaW1lUGlja2VyUHJvcHMge1xuXHR2YWx1ZTogc3RyaW5nXG5cdG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZFxuXHRtaW5UaW1lPzogc3RyaW5nXG5cdG1heFRpbWU/OiBzdHJpbmdcblx0dGltZUZvcm1hdD86IFRpbWVGb3JtYXRcblx0cGxhY2Vob2xkZXI/OiBzdHJpbmdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGRpc2FibGVkPzogYm9vbGVhblxuXHRuYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUaW1lUGlja2VyKHtcblx0dmFsdWUsXG5cdG9uQ2hhbmdlLFxuXHRtaW5UaW1lID0gJzAwOjAwJyxcblx0bWF4VGltZSA9ICcyMzo0NScsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdHBsYWNlaG9sZGVyID0gJ1NlbGVjdCB0aW1lLi4uJyxcblx0Y2xhc3NOYW1lLFxuXHRkaXNhYmxlZCA9IGZhbHNlLFxuXHRuYW1lLFxufTogVGltZVBpY2tlclByb3BzKSB7XG5cdGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXHRjb25zdCBbc2VhcmNoLCBzZXRTZWFyY2hdID0gdXNlU3RhdGUoJycpXG5cdGNvbnN0IGlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpXG5cdGNvbnN0IHRyaWdnZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+KG51bGwpXG5cdGNvbnN0IFt0cmlnZ2VyV2lkdGgsIHNldFRyaWdnZXJXaWR0aF0gPSB1c2VTdGF0ZTxudW1iZXI+KDApXG5cblx0Y29uc3QgeyB0aW1lT3B0aW9ucywgZm9ybWF0VGltZSB9ID0gdXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlcih7XG5cdFx0dGltZUZvcm1hdCxcblx0XHRtaW5UaW1lLFxuXHRcdG1heFRpbWUsXG5cdH0pXG5cblx0Ly8gRmlsdGVyIHRpbWUgb3B0aW9ucyBiYXNlZCBvbiBzZWFyY2hcblx0Y29uc3QgZmlsdGVyZWRPcHRpb25zID0gdGltZU9wdGlvbnMuZmlsdGVyKCh0aW1lKSA9PiB7XG5cdFx0Y29uc3QgZm9ybWF0dGVkVGltZSA9IGZvcm1hdFRpbWUodGltZSlcblx0XHRyZXR1cm4gZm9ybWF0dGVkVGltZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaC50b0xvd2VyQ2FzZSgpKVxuXHR9KVxuXG5cdGNvbnN0IGhhbmRsZVNlbGVjdCA9ICh0aW1lOiBzdHJpbmcpID0+IHtcblx0XHRvbkNoYW5nZSh0aW1lKVxuXHRcdHNldE9wZW4oZmFsc2UpXG5cdFx0c2V0U2VhcmNoKCcnKVxuXHR9XG5cblx0Ly8gTWVhc3VyZSB0cmlnZ2VyIHdpZHRoIGFuZCBmb2N1cyBpbnB1dCB3aGVuIHBvcG92ZXIgb3BlbnNcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAob3Blbikge1xuXHRcdFx0aWYgKHRyaWdnZXJSZWYuY3VycmVudCkge1xuXHRcdFx0XHRzZXRUcmlnZ2VyV2lkdGgodHJpZ2dlclJlZi5jdXJyZW50Lm9mZnNldFdpZHRoKVxuXHRcdFx0fVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGlucHV0UmVmLmN1cnJlbnQ/LmZvY3VzKClcblx0XHRcdH0sIDApXG5cdFx0fVxuXHR9LCBbb3Blbl0pXG5cblx0Y29uc3QgY3VycmVudFRpbWVTdHJpbmcgPSB2YWx1ZSA/IGZvcm1hdFRpbWUodmFsdWUpIDogcGxhY2Vob2xkZXJcblxuXHRyZXR1cm4gKFxuXHRcdDxQb3BvdmVyIG9uT3BlbkNoYW5nZT17c2V0T3Blbn0gb3Blbj17b3Blbn0+XG5cdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGFyaWEtY29udHJvbHM9XCJ0aW1lLXBpY2tlci1saXN0Ym94XCJcblx0XHRcdFx0XHRhcmlhLWV4cGFuZGVkPXtvcGVufVxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ3ctZnVsbCBqdXN0aWZ5LXN0YXJ0JywgY2xhc3NOYW1lKX1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHRpbWUtcGlja2VyLSR7bmFtZX1gfVxuXHRcdFx0XHRcdGRpc2FibGVkPXtkaXNhYmxlZH1cblx0XHRcdFx0XHRyZWY9e3RyaWdnZXJSZWZ9XG5cdFx0XHRcdFx0cm9sZT1cImNvbWJvYm94XCJcblx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8Q2xvY2sgY2xhc3NOYW1lPVwibXItMiBoLTQgdy00XCIgLz5cblx0XHRcdFx0XHR7Y3VycmVudFRpbWVTdHJpbmd9XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9Qb3BvdmVyVHJpZ2dlcj5cblx0XHRcdDxQb3BvdmVyQ29udGVudFxuXHRcdFx0XHRhbGlnbj1cInN0YXJ0XCJcblx0XHRcdFx0Y2xhc3NOYW1lPVwicC0wXCJcblx0XHRcdFx0c3R5bGU9e3sgd2lkdGg6IHRyaWdnZXJXaWR0aCB9fVxuXHRcdFx0PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInAtMiBib3JkZXItYlwiPlxuXHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04XCJcblx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZSkgPT4gc2V0U2VhcmNoKGUudGFyZ2V0LnZhbHVlKX1cblx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPVwiU2VhcmNoIHRpbWUuLi5cIlxuXHRcdFx0XHRcdFx0cmVmPXtpbnB1dFJlZn1cblx0XHRcdFx0XHRcdHZhbHVlPXtzZWFyY2h9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxTY3JvbGxBcmVhIGNsYXNzTmFtZT1cImgtWzIwMHB4XVwiIG9uV2hlZWw9e2hhbmRsZVdoZWVsfT5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInAtMVwiPlxuXHRcdFx0XHRcdFx0e2ZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPT09IDAgPyAoXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicHktNiB0ZXh0LWNlbnRlciB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdE4vQVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdCkgOiAoXG5cdFx0XHRcdFx0XHRcdGZpbHRlcmVkT3B0aW9ucy5tYXAoKHRpbWUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB0aW1lU3RyaW5nID0gZm9ybWF0VGltZSh0aW1lKVxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlzU2VsZWN0ZWQgPSB0aW1lID09PSB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3JlbGF0aXZlIGZsZXggdy1mdWxsIGN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lIGl0ZW1zLWNlbnRlciByb3VuZGVkLXNtIHB4LTIgcHktMS41IHRleHQtc20gb3V0bGluZS1ub25lIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpc1NlbGVjdGVkICYmICdiZy1hY2NlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCdcblx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXt0aW1lfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3QodGltZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dGltZVN0cmluZ31cblx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvU2Nyb2xsQXJlYT5cblx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0PC9Qb3BvdmVyPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5cbmludGVyZmFjZSBVc2VBdXRvY29tcGxldGVUaW1lcGlja2VyUHJvcHMge1xuXHR0aW1lRm9ybWF0PzogVGltZUZvcm1hdFxuXHRtaW5UaW1lPzogc3RyaW5nXG5cdG1heFRpbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXIoe1xuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRtaW5UaW1lID0gJzAwOjAwJyxcblx0bWF4VGltZSA9ICcyMzo0NScsXG59OiBVc2VBdXRvY29tcGxldGVUaW1lcGlja2VyUHJvcHMpIHtcblx0Ly8gR2VuZXJhdGUgdGltZSBvcHRpb25zICgxNS1taW51dGUgaW50ZXJ2YWxzKSB3aXRoaW4gbWluL21heCByYW5nZVxuXHRjb25zdCB0aW1lT3B0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGNvbnN0IHRpbWVzOiBzdHJpbmdbXSA9IFtdXG5cdFx0Y29uc3QgW21pbkhvdXIsIG1pbk1pbnV0ZV0gPSBtaW5UaW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblx0XHRjb25zdCBbbWF4SG91ciwgbWF4TWludXRlXSA9IG1heFRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXG5cdFx0Y29uc3QgbWluVG90YWxNaW51dGVzID0gbWluSG91ciAqIDYwICsgbWluTWludXRlXG5cdFx0Y29uc3QgbWF4VG90YWxNaW51dGVzID0gbWF4SG91ciAqIDYwICsgbWF4TWludXRlXG5cblx0XHRmb3IgKFxuXHRcdFx0bGV0IHRvdGFsTWludXRlcyA9IG1pblRvdGFsTWludXRlcztcblx0XHRcdHRvdGFsTWludXRlcyA8PSBtYXhUb3RhbE1pbnV0ZXM7XG5cdFx0XHR0b3RhbE1pbnV0ZXMgKz0gMTVcblx0XHQpIHtcblx0XHRcdGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcih0b3RhbE1pbnV0ZXMgLyA2MClcblx0XHRcdGNvbnN0IG1pbnV0ZXMgPSB0b3RhbE1pbnV0ZXMgJSA2MFxuXG5cdFx0XHRjb25zdCB0aW1lU3RyaW5nID0gYCR7aG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWBcblx0XHRcdHRpbWVzLnB1c2godGltZVN0cmluZylcblx0XHR9XG5cblx0XHRyZXR1cm4gdGltZXNcblx0fSwgW21pblRpbWUsIG1heFRpbWVdKVxuXG5cdGNvbnN0IGZvcm1hdFRpbWUgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0Y29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRcdGNvbnN0IHBlcmlvZCA9IGhvdXJzID49IDEyID8gJ1BNJyA6ICdBTSdcblx0XHRjb25zdCBkaXNwbGF5SG91cnMgPSBob3VycyA9PT0gMCA/IDEyIDogaG91cnMgPiAxMiA/IGhvdXJzIC0gMTIgOiBob3Vyc1xuXG5cdFx0aWYgKHRpbWVGb3JtYXQgPT09ICcyNC1ob3VyJykge1xuXHRcdFx0cmV0dXJuIGAke2hvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06JHttaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGAke2Rpc3BsYXlIb3Vyc306JHttaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX0gJHtwZXJpb2R9YFxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHR0aW1lT3B0aW9ucyxcblx0XHRmb3JtYXRUaW1lLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgV2Vla0RheXMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuY29uc3QgREFZX1RPX05VTUJFUjogUmVjb3JkPFdlZWtEYXlzLCBudW1iZXI+ID0ge1xuXHRzdW5kYXk6IDAsXG5cdG1vbmRheTogMSxcblx0dHVlc2RheTogMixcblx0d2VkbmVzZGF5OiAzLFxuXHR0aHVyc2RheTogNCxcblx0ZnJpZGF5OiA1LFxuXHRzYXR1cmRheTogNixcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgYXBwcm9wcmlhdGUgYnVzaW5lc3MgaG91cnMgY29uZmlndXJhdGlvbiBmb3IgYSBnaXZlbiBkYXRlLlxuICogSWYgYnVzaW5lc3NIb3VycyBpcyBhbiBhcnJheSwgZmluZHMgdGhlIGZpcnN0IGNvbmZpZyB0aGF0IGluY2x1ZGVzIHRoZSBkYXRlJ3MgZGF5IG9mIHdlZWsuXG4gKiBJZiBidXNpbmVzc0hvdXJzIGlzIGEgc2luZ2xlIG9iamVjdCwgcmV0dXJucyBpdCBhcy1pcy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSBUaGUgZGF0ZSB0byBmaW5kIGJ1c2luZXNzIGhvdXJzIGZvclxuICogQHBhcmFtIGJ1c2luZXNzSG91cnMgVGhlIGJ1c2luZXNzIGhvdXJzIGNvbmZpZ3VyYXRpb24gKHNpbmdsZSBvciBhcnJheSlcbiAqIEByZXR1cm5zIFRoZSBtYXRjaGluZyBCdXNpbmVzc0hvdXJzIGNvbmZpZyBvciB1bmRlZmluZWQgaWYgbm8gbWF0Y2ggZm91bmRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEJ1c2luZXNzSG91cnNGb3JEYXRlID0gKFxuXHRkYXRlOiBkYXlqcy5EYXlqcyxcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbik6IEJ1c2luZXNzSG91cnMgfCB1bmRlZmluZWQgPT4ge1xuXHRpZiAoIWJ1c2luZXNzSG91cnMpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkXG5cdH1cblxuXHQvLyBJZiBzaW5nbGUgb2JqZWN0LCByZXR1cm4gaXRcblx0aWYgKCFBcnJheS5pc0FycmF5KGJ1c2luZXNzSG91cnMpKSB7XG5cdFx0cmV0dXJuIGJ1c2luZXNzSG91cnNcblx0fVxuXG5cdC8vIElmIGFycmF5LCBmaW5kIHRoZSBjb25maWcgdGhhdCBhcHBsaWVzIHRvIHRoaXMgZGF5XG5cdGNvbnN0IGRheU9mV2VlayA9IGRhdGUuZGF5KClcblx0cmV0dXJuIGJ1c2luZXNzSG91cnMuZmluZCgoY29uZmlnKSA9PiB7XG5cdFx0aWYgKCFjb25maWcuZGF5c09mV2Vlaykge1xuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0fVxuXHRcdHJldHVybiBjb25maWcuZGF5c09mV2Vlay5zb21lKChkKSA9PiBEQVlfVE9fTlVNQkVSW2RdID09PSBkYXlPZldlZWspXG5cdH0pXG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgc3BlY2lmaWMgZGF0ZSBpcyBhIGJ1c2luZXNzIGRheS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSBUaGUgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIGJ1c2luZXNzSG91cnMgVGhlIGJ1c2luZXNzIGhvdXJzIGNvbmZpZ3VyYXRpb24gKHNpbmdsZSBvciBhcnJheSlcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGRhdGUgaXMgYSBidXNpbmVzcyBkYXksIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgY29uc3QgaXNCdXNpbmVzc0RheSA9IChcblx0ZGF0ZTogZGF5anMuRGF5anMsXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG4pOiBib29sZWFuID0+IHtcblx0aWYgKCFidXNpbmVzc0hvdXJzKSB7XG5cdFx0cmV0dXJuIHRydWVcblx0fVxuXG5cdGNvbnN0IGNvbmZpZyA9IGdldEJ1c2luZXNzSG91cnNGb3JEYXRlKGRhdGUsIGJ1c2luZXNzSG91cnMpXG5cdGlmICghY29uZmlnKSB7XG5cdFx0cmV0dXJuIGZhbHNlXG5cdH1cblxuXHQvLyBDaGVjayBkYXkgb2Ygd2Vla1xuXHRpZiAoY29uZmlnLmRheXNPZldlZWspIHtcblx0XHRyZXR1cm4gY29uZmlnLmRheXNPZldlZWsuc29tZSgoZCkgPT4gREFZX1RPX05VTUJFUltkXSA9PT0gZGF0ZS5kYXkoKSlcblx0fVxuXG5cdHJldHVybiB0cnVlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXNCdXNpbmVzc0hvdXJPcHRpb25zIHtcblx0ZGF0ZTogZGF5anMuRGF5anNcblx0aG91cj86IG51bWJlclxuXHRtaW51dGU/OiBudW1iZXJcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBzcGVjaWZpYyBob3VyIG9uIGEgc3BlY2lmaWMgZGF0ZSBpcyB3aXRoaW4gYnVzaW5lc3MgaG91cnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIGNoZWNraW5nIGJ1c2luZXNzIGhvdXJzXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0aW1lIGlzIHdpdGhpbiBidXNpbmVzcyBob3VycywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0J1c2luZXNzSG91ciA9ICh7XG5cdGRhdGUsXG5cdGhvdXIsXG5cdG1pbnV0ZSA9IDAsXG5cdGJ1c2luZXNzSG91cnMsXG59OiBJc0J1c2luZXNzSG91ck9wdGlvbnMpOiBib29sZWFuID0+IHtcblx0Ly8gRmlyc3QgY2hlY2sgaWYgaXQncyBhIGJ1c2luZXNzIGRheVxuXHRpZiAoIWlzQnVzaW5lc3NEYXkoZGF0ZSwgYnVzaW5lc3NIb3VycykpIHtcblx0XHRyZXR1cm4gZmFsc2Vcblx0fVxuXG5cdC8vIElmIGJ1c2luZXNzIGhvdXJzIGFyZSBub3QgY29uZmlndXJlZCwgY29uc2lkZXIgZXZlcnl0aGluZyBhcyBcImJ1c2luZXNzIGhvdXJzXCJcblx0aWYgKCFidXNpbmVzc0hvdXJzKSB7XG5cdFx0cmV0dXJuIHRydWVcblx0fVxuXG5cdC8vIElmIGhvdXIgaXMgbm90IHByb3ZpZGVkLCB3ZSBhc3N1bWUgdGhlIHVzZXIgb25seSBjYXJlcyBhYm91dCB0aGUgZGF5XG5cdC8vIFNpbmNlIHdlIGFscmVhZHkgcGFzc2VkIGlzQnVzaW5lc3NEYXkgY2hlY2ssIHdlIHJldHVybiB0cnVlXG5cdGlmIChob3VyID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cblx0Y29uc3QgY29uZmlnID0gZ2V0QnVzaW5lc3NIb3Vyc0ZvckRhdGUoZGF0ZSwgYnVzaW5lc3NIb3Vycylcblx0aWYgKCFjb25maWcpIHtcblx0XHRyZXR1cm4gZmFsc2Vcblx0fVxuXG5cdC8vIENoZWNrIHRpbWVcblx0Ly8gc3RhcnRUaW1lIGFuZCBlbmRUaW1lIGFyZSBudW1iZXJzICgwLTI0KVxuXHQvLyBXZSB0cmVhdCB0aGVtIGFzIGV4YWN0IGhvdXJzLiBlLmcuIDkgbWVhbnMgMDk6MDAuXG5cdGNvbnN0IHN0YXJ0SCA9IGNvbmZpZy5zdGFydFRpbWUgPz8gOVxuXHRjb25zdCBlbmRIID0gY29uZmlnLmVuZFRpbWUgPz8gMTdcblxuXHRjb25zdCBjdXJyZW50TWludXRlcyA9IGhvdXIgKiA2MCArIG1pbnV0ZVxuXHRjb25zdCBzdGFydE1pbnV0ZXMgPSBzdGFydEggKiA2MFxuXHRjb25zdCBlbmRNaW51dGVzID0gZW5kSCAqIDYwXG5cblx0aWYgKGN1cnJlbnRNaW51dGVzIDwgc3RhcnRNaW51dGVzIHx8IGN1cnJlbnRNaW51dGVzID49IGVuZE1pbnV0ZXMpIHtcblx0XHRyZXR1cm4gZmFsc2Vcblx0fVxuXG5cdHJldHVybiB0cnVlXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7XG5cdGdldEJ1c2luZXNzSG91cnNGb3JEYXRlLFxuXHRpc0J1c2luZXNzRGF5LFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2J1c2luZXNzLWhvdXJzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgY29uc3QgYnVpbGREYXRlVGltZSA9IChcblx0ZGF0ZTogRGF0ZSxcblx0dGltZTogc3RyaW5nLFxuXHRpc0FsbERheTogYm9vbGVhblxuKTogZGF5anMuRGF5anMgPT4ge1xuXHRjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cdGNvbnN0IGJhc2UgPSBkYXlqcyhkYXRlKS5ob3VyKGhvdXJzKS5taW51dGUobWludXRlcylcblx0cmV0dXJuIGlzQWxsRGF5ID8gYmFzZS5ob3VyKDApLm1pbnV0ZSgwKSA6IGJhc2Vcbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkRW5kRGF0ZVRpbWUgPSAoXG5cdGRhdGU6IERhdGUsXG5cdHRpbWU6IHN0cmluZyxcblx0aXNBbGxEYXk6IGJvb2xlYW5cbik6IGRheWpzLkRheWpzID0+IHtcblx0Y29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRjb25zdCBiYXNlID0gZGF5anMoZGF0ZSkuaG91cihob3VycykubWludXRlKG1pbnV0ZXMpXG5cdHJldHVybiBpc0FsbERheSA/IGJhc2UuaG91cigyMykubWludXRlKDU5KSA6IGJhc2Vcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRpbWVDb25zdHJhaW50cyA9IChcblx0ZGF0ZTogRGF0ZSxcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbikgPT4ge1xuXHRpZiAoIWJ1c2luZXNzSG91cnMpIHJldHVybiB7IG1pbjogJzAwOjAwJywgbWF4OiAnMjM6NTknIH1cblxuXHRjb25zdCBkYXlqc0RhdGUgPSBkYXlqcyhkYXRlKVxuXHRpZiAoIWlzQnVzaW5lc3NEYXkoZGF5anNEYXRlLCBidXNpbmVzc0hvdXJzKSkge1xuXHRcdHJldHVybiB7IG1pbjogJzAwOjAwJywgbWF4OiAnMjM6NTknIH1cblx0fVxuXG5cdGNvbnN0IGNvbmZpZyA9IGdldEJ1c2luZXNzSG91cnNGb3JEYXRlKGRheWpzRGF0ZSwgYnVzaW5lc3NIb3Vycylcblx0aWYgKCFjb25maWcpIHJldHVybiB7IG1pbjogJzAwOjAwJywgbWF4OiAnMjM6NTknIH1cblxuXHRyZXR1cm4ge1xuXHRcdG1pbjogYCR7KGNvbmZpZy5zdGFydFRpbWUgPz8gOSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfTowMGAsXG5cdFx0bWF4OiBgJHsoKGNvbmZpZy5lbmRUaW1lID8/IDE3KSAtIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06NDVgLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgV2Vla2RheSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IENhcmQsIENhcmRDb250ZW50LCBDYXJkSGVhZGVyLCBDYXJkVGl0bGUgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2FyZCdcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NoZWNrYm94J1xuaW1wb3J0IHsgRGF0ZVBpY2tlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9kYXRlLXBpY2tlcidcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2lucHV0J1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvbGFiZWwnXG5pbXBvcnQge1xuXHRTZWxlY3QsXG5cdFNlbGVjdENvbnRlbnQsXG5cdFNlbGVjdEl0ZW0sXG5cdFNlbGVjdFRyaWdnZXIsXG5cdFNlbGVjdFZhbHVlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2VsZWN0J1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmNvbnN0IEZSRVFfTUFQID0ge1xuXHREQUlMWTogUlJ1bGUuREFJTFksXG5cdFdFRUtMWTogUlJ1bGUuV0VFS0xZLFxuXHRNT05USExZOiBSUnVsZS5NT05USExZLFxuXHRZRUFSTFk6IFJSdWxlLllFQVJMWSxcbn0gYXMgY29uc3RcbmNvbnN0IEZSRVFfVE9fU1RSID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuXHRPYmplY3QuZW50cmllcyhGUkVRX01BUCkubWFwKChbaywgdl0pID0+IFt2LCBrXSlcbikgYXMgUmVjb3JkPG51bWJlciwgc3RyaW5nPlxuY29uc3QgV0VFS0RBWVMgPSBbXG5cdFJSdWxlLlNVLFxuXHRSUnVsZS5NTyxcblx0UlJ1bGUuVFUsXG5cdFJSdWxlLldFLFxuXHRSUnVsZS5USCxcblx0UlJ1bGUuRlIsXG5cdFJSdWxlLlNBLFxuXVxuY29uc3QgREFZX0tFWVMgPSBbJ3N1bicsICdtb24nLCAndHVlJywgJ3dlZCcsICd0aHUnLCAnZnJpJywgJ3NhdCddXG5jb25zdCBwYXJzZU51bSA9ICh2OiBzdHJpbmcpID0+IE1hdGgubWF4KDEsIE51bWJlci5wYXJzZUludCh2LCAxMCkgfHwgMSlcblxuY29uc3QgZ2V0RGVzY3JpcHRpb24gPSAoXG5cdG9wdHM6IFJSdWxlT3B0aW9ucyB8IG51bGwsXG5cdHQ6IChrOiBzdHJpbmcpID0+IHN0cmluZ1xuKSA9PiB7XG5cdGlmICghb3B0cykge1xuXHRcdHJldHVybiB0KCdjdXN0b21SZWN1cnJlbmNlJylcblx0fVxuXHR0cnkge1xuXHRcdGNvbnN0IHRleHQgPSBuZXcgUlJ1bGUob3B0cykudG9UZXh0KClcblx0XHRyZXR1cm4gdGV4dCAmJiAhdGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdlcnJvcicpXG5cdFx0XHQ/IHRleHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0ZXh0LnNsaWNlKDEpXG5cdFx0XHQ6IHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gdCgnY3VzdG9tUmVjdXJyZW5jZScpXG5cdH1cbn1cblxuaW50ZXJmYWNlIFByb3BzIHtcblx0dmFsdWU/OiBSUnVsZU9wdGlvbnMgfCBudWxsXG5cdG9uQ2hhbmdlOiAodjogUlJ1bGVPcHRpb25zIHwgbnVsbCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgUmVjdXJyZW5jZUVkaXRvcjogUmVhY3QuRkM8UHJvcHM+ID0gKHsgdmFsdWUsIG9uQ2hhbmdlIH0pID0+IHtcblx0Y29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoeyB0OiBjdHgudCB9KSlcblx0Y29uc3QgW3Nob3csIHNldFNob3ddID0gdXNlU3RhdGUoISF2YWx1ZSlcblx0Y29uc3QgW29wdHMsIHNldE9wdHNdID0gdXNlU3RhdGU8UlJ1bGVPcHRpb25zIHwgbnVsbD4oKCkgPT4gdmFsdWUgfHwgbnVsbClcblxuXHRjb25zdCB3ZWVrRGF5cyA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gREFZX0tFWVMubWFwKChrLCBpKSA9PiAoeyB2YWx1ZTogV0VFS0RBWVNbaV0sIGxhYmVsOiB0KGspIH0pKSxcblx0XHRbdF1cblx0KVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0c2V0U2hvdyghIXZhbHVlKVxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0c2V0T3B0cyh2YWx1ZSlcblx0XHR9XG5cdH0sIFt2YWx1ZV0pXG5cblx0Y29uc3QgdXBkYXRlID0gKHU6IFBhcnRpYWw8UlJ1bGVPcHRpb25zPikgPT4ge1xuXHRcdGlmICghb3B0cykge1xuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGNvbnN0IG5leHQgPSB7IC4uLm9wdHMsIC4uLnUgfVxuXHRcdHNldE9wdHMobmV4dClcblx0XHRvbkNoYW5nZShzaG93ID8gbmV4dCA6IG51bGwpXG5cdH1cblxuXHRjb25zdCB0b2dnbGUgPSAoY2hlY2tlZDogYm9vbGVhbikgPT4ge1xuXHRcdHNldFNob3coY2hlY2tlZClcblx0XHRpZiAoIWNoZWNrZWQpIHtcblx0XHRcdG9uQ2hhbmdlKG51bGwpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0aWYgKG9wdHMpIHtcblx0XHRcdG9uQ2hhbmdlKG9wdHMpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0Y29uc3QgZGVmID0geyBmcmVxOiBSUnVsZS5EQUlMWSwgaW50ZXJ2YWw6IDEgfSBhcyBSUnVsZU9wdGlvbnNcblx0XHRzZXRPcHRzKGRlZilcblx0XHRvbkNoYW5nZShkZWYpXG5cdH1cblxuXHRjb25zdCB0b2dnbGVEYXkgPSAoaTogbnVtYmVyKSA9PiB7XG5cdFx0Y29uc3QgY3VyciA9IChvcHRzPy5ieXdlZWtkYXkgYXMgV2Vla2RheVtdKSB8fCBbXVxuXHRcdGNvbnN0IGRheSA9IFdFRUtEQVlTW2ldXG5cdFx0Y29uc3QgbmV4dCA9IGN1cnIuaW5jbHVkZXMoZGF5KVxuXHRcdFx0PyBjdXJyLmZpbHRlcigoZCkgPT4gZCAhPT0gZGF5KVxuXHRcdFx0OiBbLi4uY3VyciwgZGF5XVxuXHRcdHVwZGF0ZSh7IGJ5d2Vla2RheTogbmV4dC5sZW5ndGggPyBuZXh0IDogdW5kZWZpbmVkIH0pXG5cdH1cblxuXHRjb25zdCBzZXRFbmRUeXBlID0gKHR5cGU6ICduZXZlcicgfCAnY291bnQnIHwgJ3VudGlsJykgPT4ge1xuXHRcdGNvbnN0IHU6IFBhcnRpYWw8UlJ1bGVPcHRpb25zPiA9IHsgY291bnQ6IHVuZGVmaW5lZCwgdW50aWw6IHVuZGVmaW5lZCB9XG5cdFx0aWYgKHR5cGUgPT09ICdjb3VudCcpIHtcblx0XHRcdHUuY291bnQgPSBvcHRzPy5jb3VudCB8fCAxXG5cdFx0fVxuXHRcdGlmICh0eXBlID09PSAndW50aWwnKSB7XG5cdFx0XHR1LnVudGlsID0gb3B0cz8udW50aWwgfHwgZGF5anMoKS5hZGQoMSwgJ21vbnRoJykuZW5kT2YoJ2RheScpLnRvRGF0ZSgpXG5cdFx0fVxuXHRcdHVwZGF0ZSh1KVxuXHR9XG5cblx0Y29uc3QgZW5kVHlwZSA9IG9wdHM/LnVudGlsID8gJ3VudGlsJyA6IG9wdHM/LmNvdW50ID8gJ2NvdW50JyA6ICduZXZlcidcblx0Y29uc3QgZnJlcSA9IEZSRVFfVE9fU1RSW29wdHM/LmZyZXEgPz8gUlJ1bGUuREFJTFldIHx8ICdEQUlMWSdcblx0Y29uc3QgYnl3ZWVrZGF5ID0gQXJyYXkuaXNBcnJheShvcHRzPy5ieXdlZWtkYXkpXG5cdFx0PyBvcHRzLmJ5d2Vla2RheVxuXHRcdDogb3B0cz8uYnl3ZWVrZGF5XG5cdFx0XHQ/IFtvcHRzLmJ5d2Vla2RheV1cblx0XHRcdDogW11cblxuXHRyZXR1cm4gKFxuXHRcdDxDYXJkIGRhdGEtdGVzdGlkPVwicmVjdXJyZW5jZS1lZGl0b3JcIj5cblx0XHRcdDxDYXJkSGVhZGVyIGNsYXNzTmFtZT1cInBiLTNcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cblx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdGNoZWNrZWQ9e3Nob3d9XG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cInRvZ2dsZS1yZWN1cnJlbmNlXCJcblx0XHRcdFx0XHRcdGlkPVwicmVjdXJyaW5nXCJcblx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17dG9nZ2xlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PENhcmRUaXRsZSBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e3QoJ3JlcGVhdCcpfTwvQ2FyZFRpdGxlPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0e3Nob3cgJiYgdmFsdWUgJiYgKFxuXHRcdFx0XHRcdDxwIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHR7Z2V0RGVzY3JpcHRpb24odmFsdWUsIHQpfVxuXHRcdFx0XHRcdDwvcD5cblx0XHRcdFx0KX1cblx0XHRcdDwvQ2FyZEhlYWRlcj5cblxuXHRcdFx0e3Nob3cgJiYgKFxuXHRcdFx0XHQ8Q2FyZENvbnRlbnQgY2xhc3NOYW1lPVwicHQtMFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS00XCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTRcIj5cblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9XCJmcmVxdWVuY3lcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHt0KCdyZXBlYXRzJyl9XG5cdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0XG5cdFx0XHRcdFx0XHRcdFx0XHRvblZhbHVlQ2hhbmdlPXsoZikgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlKHsgZnJlcTogRlJFUV9NQVBbZiBhcyBrZXlvZiB0eXBlb2YgRlJFUV9NQVBdIH0pXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17ZnJlcX1cblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0VHJpZ2dlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLThcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImZyZXF1ZW5jeS1zZWxlY3RcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImZyZXF1ZW5jeVwiXG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RWYWx1ZSAvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC9TZWxlY3RUcmlnZ2VyPlxuXHRcdFx0XHRcdFx0XHRcdFx0PFNlbGVjdENvbnRlbnQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtPYmplY3Qua2V5cyhGUkVRX01BUCkubWFwKChmKSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PFNlbGVjdEl0ZW0ga2V5PXtmfSB2YWx1ZT17Zn0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7dChmLnRvTG93ZXJDYXNlKCkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0SXRlbT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdENvbnRlbnQ+XG5cdFx0XHRcdFx0XHRcdFx0PC9TZWxlY3Q+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCIgaHRtbEZvcj1cImludGVydmFsXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7dCgnZXZlcnknKX1cblx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04XCJcblx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW50ZXJ2YWxcIlxuXHRcdFx0XHRcdFx0XHRcdFx0bWluPVwiMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17KGUpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7IGludGVydmFsOiBwYXJzZU51bShlLnRhcmdldC52YWx1ZSkgfSlcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJudW1iZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e29wdHM/LmludGVydmFsIHx8IDF9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0e29wdHM/LmZyZXEgPT09IFJSdWxlLldFRUtMWSAmJiAoXG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIj57dCgncmVwZWF0T24nKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTEgbXQtMVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e3dlZWtEYXlzLm1hcCgoZCwgaSkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMVwiIGtleT17ZC5sYWJlbH0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjaGVja2VkPXtieXdlZWtkYXkuaW5jbHVkZXMoZC52YWx1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17YGRheS0ke2l9YH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gdG9nZ2xlRGF5KGkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LXhzIGN1cnNvci1wb2ludGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGh0bWxGb3I9e2BkYXktJHtpfWB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e2QubGFiZWx9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQpfVxuXG5cdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdlbmRzJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTIgbXQtMVwiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17ZW5kVHlwZSA9PT0gJ25ldmVyJ31cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJuZXZlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gc2V0RW5kVHlwZSgnbmV2ZXInKX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9XCJuZXZlclwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dCgnbmV2ZXInKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjaGVja2VkPXtlbmRUeXBlID09PSAnY291bnQnfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImFmdGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoKSA9PiBzZXRFbmRUeXBlKCdjb3VudCcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCIgaHRtbEZvcj1cImFmdGVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0KCdhZnRlcicpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdHtlbmRUeXBlID09PSAnY291bnQnICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC02IHctMTYgdGV4dC14c1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJjb3VudC1pbnB1dFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWluPVwiMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhlKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlKHsgY291bnQ6IHBhcnNlTnVtKGUudGFyZ2V0LnZhbHVlKSB9KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwibnVtYmVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17b3B0cz8uY291bnQgfHwgMX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ29jY3VycmVuY2VzJyl9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17ZW5kVHlwZSA9PT0gJ3VudGlsJ31cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gc2V0RW5kVHlwZSgndW50aWwnKX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9XCJvblwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dCgnb24nKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHR7ZW5kVHlwZSA9PT0gJ3VudGlsJyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxEYXRlUGlja2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC02XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRlPXtvcHRzPy51bnRpbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17KGQpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGUoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bnRpbDogZCA/IGRheWpzKGQpLmVuZE9mKCdkYXknKS50b0RhdGUoKSA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9DYXJkQ29udGVudD5cblx0XHRcdCl9XG5cdFx0PC9DYXJkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIENhcmQoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCd0ZXh0LWNhcmQtZm9yZWdyb3VuZCBmbGV4IGZsZXgtY29sIGdhcC02IHJvdW5kZWQteGwgYm9yZGVyIHNoYWRvdy1zbScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmRcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZEhlYWRlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J0Bjb250YWluZXIvY2FyZC1oZWFkZXIgZ3JpZCBhdXRvLXJvd3MtbWluIGdyaWQtcm93cy1bYXV0b19hdXRvXSBpdGVtcy1zdGFydCBnYXAtMS41IHAtNCBwYi0wIGhhcy1kYXRhLVtzbG90PWNhcmQtYWN0aW9uXTpncmlkLWNvbHMtWzFmcl9hdXRvXScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtaGVhZGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRUaXRsZSh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignbGVhZGluZy1ub25lIGZvbnQtc2VtaWJvbGQnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC10aXRsZVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkRGVzY3JpcHRpb24oeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXNtJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtZGVzY3JpcHRpb25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZEFjdGlvbih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2NvbC1zdGFydC0yIHJvdy1zcGFuLTIgcm93LXN0YXJ0LTEgc2VsZi1zdGFydCBqdXN0aWZ5LXNlbGYtZW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC1hY3Rpb25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZENvbnRlbnQoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3AtNCBwdC0wJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtY29udGVudFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkRm9vdGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdmbGV4IGl0ZW1zLWNlbnRlciBweC02IFsuYm9yZGVyLXRdOnB0LTYnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC1mb290ZXJcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHtcblx0Q2FyZCxcblx0Q2FyZEhlYWRlcixcblx0Q2FyZEZvb3Rlcixcblx0Q2FyZFRpdGxlLFxuXHRDYXJkQWN0aW9uLFxuXHRDYXJkRGVzY3JpcHRpb24sXG5cdENhcmRDb250ZW50LFxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBTZWxlY3RQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXNlbGVjdCdcbmltcG9ydCB7IENoZWNrSWNvbiwgQ2hldnJvbkRvd25JY29uLCBDaGV2cm9uVXBJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gU2VsZWN0KHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuUm9vdCBkYXRhLXNsb3Q9XCJzZWxlY3RcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdEdyb3VwKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuR3JvdXA+KSB7XG5cdHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLkdyb3VwIGRhdGEtc2xvdD1cInNlbGVjdC1ncm91cFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0VmFsdWUoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5WYWx1ZT4pIHtcblx0cmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuVmFsdWUgZGF0YS1zbG90PVwic2VsZWN0LXZhbHVlXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RUcmlnZ2VyKHtcblx0Y2xhc3NOYW1lLFxuXHRzaXplID0gJ2RlZmF1bHQnLFxuXHRjaGlsZHJlbixcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuVHJpZ2dlcj4gJiB7XG5cdHNpemU/OiAnc20nIHwgJ2RlZmF1bHQnXG59KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5UcmlnZ2VyXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcImJvcmRlci1pbnB1dCBkYXRhLVtwbGFjZWhvbGRlcl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIFsmX3N2Zzpub3QoW2NsYXNzKj0ndGV4dC0nXSldOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBkYXJrOmJnLWlucHV0LzMwIGRhcms6aG92ZXI6YmctaW5wdXQvNTAgZmxleCB3LWZpdCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTMgcHktMiB0ZXh0LXNtIHdoaXRlc3BhY2Utbm93cmFwIHNoYWRvdy14cyB0cmFuc2l0aW9uLVtjb2xvcixib3gtc2hhZG93XSBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIGRhdGEtW3NpemU9ZGVmYXVsdF06aC05IGRhdGEtW3NpemU9c21dOmgtOCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpsaW5lLWNsYW1wLTEgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06ZmxleCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTppdGVtcy1jZW50ZXIgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06Z2FwLTIgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCIsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2l6ZT17c2l6ZX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC10cmlnZ2VyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLkljb24gYXNDaGlsZD5cblx0XHRcdFx0PENoZXZyb25Eb3duSWNvbiBjbGFzc05hbWU9XCJzaXplLTQgb3BhY2l0eS01MFwiIC8+XG5cdFx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5JY29uPlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLlRyaWdnZXI+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0Q29udGVudCh7XG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdHBvc2l0aW9uID0gJ3BvcHBlcicsXG5cdGFsaWduID0gJ2NlbnRlcicsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkNvbnRlbnQ+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5Qb3J0YWw+XG5cdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLkNvbnRlbnRcblx0XHRcdFx0YWxpZ249e2FsaWdufVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiByZWxhdGl2ZSB6LTUwIG1heC1oLSgtLXJhZGl4LXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHQpIG1pbi13LVs4cmVtXSBvcmlnaW4tKC0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbikgb3ZlcmZsb3cteC1oaWRkZW4gb3ZlcmZsb3cteS1hdXRvIHJvdW5kZWQtbWQgYm9yZGVyIHNoYWRvdy1tZCcsXG5cdFx0XHRcdFx0cG9zaXRpb24gPT09ICdwb3BwZXInICYmXG5cdFx0XHRcdFx0XHQnZGF0YS1bc2lkZT1ib3R0b21dOnRyYW5zbGF0ZS15LTEgZGF0YS1bc2lkZT1sZWZ0XTotdHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXJpZ2h0XTp0cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9dG9wXTotdHJhbnNsYXRlLXktMScsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1jb250ZW50XCJcblx0XHRcdFx0cG9zaXRpb249e3Bvc2l0aW9ufVxuXHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHQ+XG5cdFx0XHRcdDxTZWxlY3RTY3JvbGxVcEJ1dHRvbiAvPlxuXHRcdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLlZpZXdwb3J0XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdwLTEnLFxuXHRcdFx0XHRcdFx0cG9zaXRpb24gPT09ICdwb3BwZXInICYmXG5cdFx0XHRcdFx0XHRcdCdoLVt2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci1oZWlnaHQpXSB3LWZ1bGwgbWluLXctW3ZhcigtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLXdpZHRoKV0gc2Nyb2xsLW15LTEnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PC9TZWxlY3RQcmltaXRpdmUuVmlld3BvcnQ+XG5cdFx0XHRcdDxTZWxlY3RTY3JvbGxEb3duQnV0dG9uIC8+XG5cdFx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5Db250ZW50PlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLlBvcnRhbD5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RMYWJlbCh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuTGFiZWw+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5MYWJlbFxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHB4LTIgcHktMS41IHRleHQteHMnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LWxhYmVsXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdEl0ZW0oe1xuXHRjbGFzc05hbWUsXG5cdGNoaWxkcmVuLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5JdGVtPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuSXRlbVxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XCJmb2N1czpiZy1hY2NlbnQgZm9jdXM6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBbJl9zdmc6bm90KFtjbGFzcyo9J3RleHQtJ10pXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgcmVsYXRpdmUgZmxleCB3LWZ1bGwgY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtc20gcHktMS41IHByLTggcGwtMiB0ZXh0LXNtIG91dGxpbmUtaGlkZGVuIHNlbGVjdC1ub25lIGRhdGEtW2Rpc2FibGVkXTpwb2ludGVyLWV2ZW50cy1ub25lIGRhdGEtW2Rpc2FibGVkXTpvcGFjaXR5LTUwIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNCAqOltzcGFuXTpsYXN0OmZsZXggKjpbc3Bhbl06bGFzdDppdGVtcy1jZW50ZXIgKjpbc3Bhbl06bGFzdDpnYXAtMlwiLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3QtaXRlbVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtMiBmbGV4IHNpemUtMy41IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuXHRcdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLkl0ZW1JbmRpY2F0b3I+XG5cdFx0XHRcdFx0PENoZWNrSWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuXHRcdFx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5JdGVtSW5kaWNhdG9yPlxuXHRcdFx0PC9zcGFuPlxuXHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5JdGVtVGV4dD57Y2hpbGRyZW59PC9TZWxlY3RQcmltaXRpdmUuSXRlbVRleHQ+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuSXRlbT5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTZXBhcmF0b3Ioe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlNlcGFyYXRvcj4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlNlcGFyYXRvclxuXHRcdFx0Y2xhc3NOYW1lPXtjbignYmctYm9yZGVyIHBvaW50ZXItZXZlbnRzLW5vbmUgLW14LTEgbXktMSBoLXB4JywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1zZXBhcmF0b3JcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0U2Nyb2xsVXBCdXR0b24oe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuU2Nyb2xsVXBCdXR0b25cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0xJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXNjcm9sbC11cC1idXR0b25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxDaGV2cm9uVXBJY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuU2Nyb2xsVXBCdXR0b24+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0U2Nyb2xsRG93bkJ1dHRvbih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvbj4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlNjcm9sbERvd25CdXR0b25cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0xJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXNjcm9sbC1kb3duLWJ1dHRvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENoZXZyb25Eb3duSWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLlNjcm9sbERvd25CdXR0b24+XG5cdClcbn1cblxuZXhwb3J0IHtcblx0U2VsZWN0LFxuXHRTZWxlY3RDb250ZW50LFxuXHRTZWxlY3RHcm91cCxcblx0U2VsZWN0SXRlbSxcblx0U2VsZWN0TGFiZWwsXG5cdFNlbGVjdFNjcm9sbERvd25CdXR0b24sXG5cdFNlbGVjdFNjcm9sbFVwQnV0dG9uLFxuXHRTZWxlY3RTZXBhcmF0b3IsXG5cdFNlbGVjdFRyaWdnZXIsXG5cdFNlbGVjdFZhbHVlLFxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRTY29wZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlY3VycmluZ0V2ZW50QWN0aW9ucyhvbkNvbXBsZXRlPzogKCkgPT4gdm9pZCkge1xuXHRjb25zdCB7IHVwZGF0ZVJlY3VycmluZ0V2ZW50LCBkZWxldGVSZWN1cnJpbmdFdmVudCB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiBjb250ZXh0LnVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQuZGVsZXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0fSkpXG5cblx0Y29uc3QgW2RpYWxvZ1N0YXRlLCBzZXREaWFsb2dTdGF0ZV0gPSB1c2VTdGF0ZTx7XG5cdFx0aXNPcGVuOiBib29sZWFuXG5cdFx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnIHwgJ2RlbGV0ZSdcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0XHR1cGRhdGVzPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHRcdG9uQ29uZmlybT86IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4gdm9pZFxuXHR9Pih7XG5cdFx0aXNPcGVuOiBmYWxzZSxcblx0XHRvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG5cdFx0ZXZlbnQ6IG51bGwsXG5cdH0pXG5cblx0Y29uc3Qgb3BlbkVkaXREaWFsb2cgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQsIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdHNldERpYWxvZ1N0YXRlKHtcblx0XHRcdFx0aXNPcGVuOiB0cnVlLFxuXHRcdFx0XHRvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHR1cGRhdGVzLFxuXHRcdFx0XHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdFx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB1cGRhdGVzLCB7XG5cdFx0XHRcdFx0XHRzY29wZSxcblx0XHRcdFx0XHRcdGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSxcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbdXBkYXRlUmVjdXJyaW5nRXZlbnRdXG5cdClcblxuXHRjb25zdCBvcGVuRGVsZXRlRGlhbG9nID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRzZXREaWFsb2dTdGF0ZSh7XG5cdFx0XHRcdGlzT3BlbjogdHJ1ZSxcblx0XHRcdFx0b3BlcmF0aW9uVHlwZTogJ2RlbGV0ZScsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdFx0XHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB7XG5cdFx0XHRcdFx0XHRzY29wZSxcblx0XHRcdFx0XHRcdGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSxcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbZGVsZXRlUmVjdXJyaW5nRXZlbnRdXG5cdClcblxuXHRjb25zdCBjbG9zZURpYWxvZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzZXREaWFsb2dTdGF0ZSh7XG5cdFx0XHRpc09wZW46IGZhbHNlLFxuXHRcdFx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnLFxuXHRcdFx0ZXZlbnQ6IG51bGwsXG5cdFx0fSlcblx0fSwgW10pXG5cblx0Y29uc3QgaGFuZGxlQ29uZmlybSA9IHVzZUNhbGxiYWNrKFxuXHRcdChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdFx0aWYgKGRpYWxvZ1N0YXRlLm9uQ29uZmlybSkge1xuXHRcdFx0XHRkaWFsb2dTdGF0ZS5vbkNvbmZpcm0oc2NvcGUpXG5cdFx0XHR9XG5cdFx0XHRjbG9zZURpYWxvZygpXG5cdFx0XHQvLyBDYWxsIG9uQ29tcGxldGUgdG8gY2xvc2UgdGhlIHBhcmVudCBmb3JtXG5cdFx0XHRvbkNvbXBsZXRlPy4oKVxuXHRcdH0sXG5cdFx0W2RpYWxvZ1N0YXRlLCBjbG9zZURpYWxvZywgb25Db21wbGV0ZV1cblx0KVxuXG5cdHJldHVybiB7XG5cdFx0ZGlhbG9nU3RhdGUsXG5cdFx0b3BlbkVkaXREaWFsb2csXG5cdFx0b3BlbkRlbGV0ZURpYWxvZyxcblx0XHRjbG9zZURpYWxvZyxcblx0XHRoYW5kbGVDb25maXJtLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ29udGVudCxcblx0RGlhbG9nRGVzY3JpcHRpb24sXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nVGl0bGUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9kaWFsb2cnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IEV2ZW50Rm9ybSB9IGZyb20gJy4vZXZlbnQtZm9ybSdcblxuZXhwb3J0IGNvbnN0IEV2ZW50Rm9ybURpYWxvZyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdHQsXG5cdFx0c2VsZWN0ZWRFdmVudCxcblx0XHRpc0V2ZW50Rm9ybU9wZW4sXG5cdFx0Y2xvc2VFdmVudEZvcm0sXG5cdFx0YWRkRXZlbnQsXG5cdFx0dXBkYXRlRXZlbnQsXG5cdFx0ZGVsZXRlRXZlbnQsXG5cdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0dDogY29udGV4dC50LFxuXHRcdHNlbGVjdGVkRXZlbnQ6IGNvbnRleHQuc2VsZWN0ZWRFdmVudCxcblx0XHRpc0V2ZW50Rm9ybU9wZW46IGNvbnRleHQuaXNFdmVudEZvcm1PcGVuLFxuXHRcdGNsb3NlRXZlbnRGb3JtOiBjb250ZXh0LmNsb3NlRXZlbnRGb3JtLFxuXHRcdGFkZEV2ZW50OiBjb250ZXh0LmFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50OiBjb250ZXh0LmRlbGV0ZUV2ZW50LFxuXHRcdHJlbmRlckV2ZW50Rm9ybTogY29udGV4dC5yZW5kZXJFdmVudEZvcm0sXG5cdH0pKVxuXG5cdGNvbnN0IGhhbmRsZU9uVXBkYXRlID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0dXBkYXRlRXZlbnQoZXZlbnQuaWQsIGV2ZW50KVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlT25EZWxldGUgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRkZWxldGVFdmVudChldmVudC5pZClcblx0fVxuXG5cdGNvbnN0IGV2ZW50Rm9ybVByb3BzID0ge1xuXHRcdG9wZW46IGlzRXZlbnRGb3JtT3Blbixcblx0XHRvbkNsb3NlOiBjbG9zZUV2ZW50Rm9ybSxcblx0XHRzZWxlY3RlZEV2ZW50LFxuXHRcdG9uQWRkOiBhZGRFdmVudCxcblx0XHRvblVwZGF0ZTogaGFuZGxlT25VcGRhdGUsXG5cdFx0b25EZWxldGU6IGhhbmRsZU9uRGVsZXRlLFxuXHR9XG5cblx0aWYgKHJlbmRlckV2ZW50Rm9ybSkge1xuXHRcdHJldHVybiByZW5kZXJFdmVudEZvcm0oZXZlbnRGb3JtUHJvcHMpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2cgb25PcGVuQ2hhbmdlPXtjbG9zZUV2ZW50Rm9ybX0gb3Blbj17aXNFdmVudEZvcm1PcGVufT5cblx0XHRcdDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1bOTB2aF0gdy1bOTB2d10gbWF4LXctWzUwMHB4XSBwLTQgc206cC02IG92ZXJmbG93LWhpZGRlbiBnYXAtMFwiPlxuXHRcdFx0XHQ8RGlhbG9nSGVhZGVyIGNsYXNzTmFtZT1cIm1iLTIgc206bWItNCBzaHJpbmstMFwiPlxuXHRcdFx0XHRcdDxEaWFsb2dUaXRsZSBjbGFzc05hbWU9XCJ0ZXh0LWJhc2Ugc206dGV4dC1sZ1wiPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgnZWRpdEV2ZW50JykgOiB0KCdjcmVhdGVFdmVudCcpfVxuXHRcdFx0XHRcdDwvRGlhbG9nVGl0bGU+XG5cdFx0XHRcdFx0PERpYWxvZ0Rlc2NyaXB0aW9uIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgnZWRpdEV2ZW50RGV0YWlscycpIDogdCgnYWRkTmV3RXZlbnQnKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ0Rlc2NyaXB0aW9uPlxuXHRcdFx0XHQ8L0RpYWxvZ0hlYWRlcj5cblxuXHRcdFx0XHQ8RXZlbnRGb3JtIHsuLi5ldmVudEZvcm1Qcm9wc30gLz5cblx0XHRcdDwvRGlhbG9nQ29udGVudD5cblx0XHQ8L0RpYWxvZz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBDYWxlbmRhciBhcyBDYWxlbmRhckljb24sIERvd25sb2FkLCBNZW51LCBQbHVzIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7XG5cdFBvcG92ZXIsXG5cdFBvcG92ZXJDb250ZW50LFxuXHRQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3BvcG92ZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZG93bmxvYWRJQ2FsZW5kYXIgfSBmcm9tICdAL2xpYi91dGlscy9leHBvcnQtaWNhbCdcbmltcG9ydCBUaXRsZUNvbnRlbnQgZnJvbSAnLi90aXRsZS1jb250ZW50J1xuaW1wb3J0IFZpZXdDb250cm9scyBmcm9tICcuL3ZpZXctY29udHJvbHMnXG5cbmludGVyZmFjZSBIZWFkZXJQcm9wcyB7XG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBIZWFkZXI6IFJlYWN0LkZDPEhlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSA9ICcnIH0pID0+IHtcblx0Y29uc3Qge1xuXHRcdHZpZXcsXG5cdFx0c2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2QsXG5cdFx0dG9kYXksXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRcdHJhd0V2ZW50cyxcblx0XHR0LFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGN0eCkgPT4gKHtcblx0XHR2aWV3OiBjdHgudmlldyxcblx0XHRzZXRWaWV3OiBjdHguc2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kOiBjdHgubmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kOiBjdHgucHJldlBlcmlvZCxcblx0XHR0b2RheTogY3R4LnRvZGF5LFxuXHRcdG9wZW5FdmVudEZvcm06IGN0eC5vcGVuRXZlbnRGb3JtLFxuXHRcdGhlYWRlckNvbXBvbmVudDogY3R4LmhlYWRlckNvbXBvbmVudCxcblx0XHRoZWFkZXJDbGFzc05hbWU6IGN0eC5oZWFkZXJDbGFzc05hbWUsXG5cdFx0cmF3RXZlbnRzOiBjdHgucmF3RXZlbnRzLFxuXHRcdHQ6IGN0eC50LFxuXHR9KSlcblxuXHRjb25zdCBbbW9iaWxlTWVudU9wZW4sIHNldE1vYmlsZU1lbnVPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG5cdGNvbnN0IGNsb3NlTW9iaWxlTWVudSA9ICgpID0+IHNldE1vYmlsZU1lbnVPcGVuKGZhbHNlKVxuXG5cdGNvbnN0IGhhbmRsZUV4cG9ydCA9ICgpID0+IHtcblx0XHRjb25zdCBmaWxlbmFtZSA9IGBpbGFteS1jYWxlbmRhci0ke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdfS5pY3NgXG5cdFx0ZG93bmxvYWRJQ2FsZW5kYXIocmF3RXZlbnRzLCBmaWxlbmFtZSwgJ2lsYW15IENhbGVuZGFyJylcblx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHR9XG5cblx0Y29uc3QgTmV3RXZlbnRCdXR0b24gPSAoKSA9PiAoXG5cdFx0PEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuXHRcdFx0b25DbGljaz17KCkgPT4gb3BlbkV2ZW50Rm9ybSgpfVxuXHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdHZhcmlhbnQ9XCJkZWZhdWx0XCJcblx0XHQ+XG5cdFx0XHQ8UGx1cyBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsOmlubGluZVwiPnt0KCduZXcnKX08L3NwYW4+XG5cdFx0PC9CdXR0b24+XG5cdClcblxuXHRjb25zdCBFeHBvcnRCdXR0b24gPSAoeyBmdWxsV2lkdGggPSBmYWxzZSB9OiB7IGZ1bGxXaWR0aD86IGJvb2xlYW4gfSkgPT4gKFxuXHRcdDxCdXR0b25cblx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0xJywgZnVsbFdpZHRoICYmICd3LWZ1bGwgZ2FwLTInKX1cblx0XHRcdG9uQ2xpY2s9e2hhbmRsZUV4cG9ydH1cblx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0PlxuXHRcdFx0PERvd25sb2FkIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0e2Z1bGxXaWR0aCA/IChcblx0XHRcdFx0YCR7dCgnZXhwb3J0Jyl9IENhbGVuZGFyICguaWNzKWBcblx0XHRcdCkgOiAoXG5cdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsL2Jhc2UtaGVhZGVyOmlubGluZVwiPnt0KCdleHBvcnQnKX08L3NwYW4+XG5cdFx0XHQpfVxuXHRcdDwvQnV0dG9uPlxuXHQpXG5cblx0aWYgKGhlYWRlckNvbXBvbmVudCkge1xuXHRcdHJldHVybiBoZWFkZXJDb21wb25lbnRcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiQGNvbnRhaW5lci9iYXNlLWhlYWRlciB3LWZ1bGxcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnZmxleCBqdXN0aWZ5LWNlbnRlciBAMnhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktYmV0d2VlbiBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0yJyxcblx0XHRcdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRcdFx0aGVhZGVyQ2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1zdGFydFwiPlxuXHRcdFx0XHRcdDxDYWxlbmRhckljb24gY2xhc3NOYW1lPVwiaC01IHctNVwiIC8+XG5cdFx0XHRcdFx0PFRpdGxlQ29udGVudCAvPlxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGp1c3RpZnktc3RhcnQgQHhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktY2VudGVyIGdhcC0xIEA0eGwvYmFzZS1oZWFkZXI6anVzdGlmeS1lbmQgb3ZlcmZsb3cteC1hdXRvXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gQG1kL2Jhc2UtaGVhZGVyOmZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgZ2FwLTFcIj5cblx0XHRcdFx0XHRcdDxWaWV3Q29udHJvbHNcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwianVzdGlmeS1lbmRcIlxuXHRcdFx0XHRcdFx0XHRjdXJyZW50Vmlldz17dmlld31cblx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e3NldFZpZXd9XG5cdFx0XHRcdFx0XHRcdG9uTmV4dD17bmV4dFBlcmlvZH1cblx0XHRcdFx0XHRcdFx0b25QcmV2aW91cz17cHJldlBlcmlvZH1cblx0XHRcdFx0XHRcdFx0b25Ub2RheT17dG9kYXl9XG5cdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJkZWZhdWx0XCJcblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8TmV3RXZlbnRCdXR0b24gLz5cblx0XHRcdFx0XHRcdDxFeHBvcnRCdXR0b24gLz5cblx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTEgQG1kL2Jhc2UtaGVhZGVyOmhpZGRlblwiPlxuXHRcdFx0XHRcdFx0PE5ld0V2ZW50QnV0dG9uIC8+XG5cdFx0XHRcdFx0XHQ8UG9wb3ZlciBvbk9wZW5DaGFuZ2U9e3NldE1vYmlsZU1lbnVPcGVufSBvcGVuPXttb2JpbGVNZW51T3Blbn0+XG5cdFx0XHRcdFx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHRcdFx0XHRcdDxCdXR0b24gc2l6ZT1cInNtXCIgdmFyaWFudD1cIm91dGxpbmVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxNZW51IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0XHRcdFx0XHQ8UG9wb3ZlckNvbnRlbnQgYWxpZ249XCJlbmRcIiBjbGFzc05hbWU9XCJ3LVsyNDBweF0gcC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxWaWV3Q29udHJvbHNcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudFZpZXc9e3ZpZXd9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsodikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNldFZpZXcodilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbk5leHQ9eygpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuZXh0UGVyaW9kKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvblByZXZpb3VzPXsoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJldlBlcmlvZCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VNb2JpbGVNZW51KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25Ub2RheT17KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvZGF5KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZ3JpZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJwdC0yIGJvcmRlci10XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxFeHBvcnRCdXR0b24gZnVsbFdpZHRoIC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHRcdFx0XHRcdDwvUG9wb3Zlcj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgZGVmYXVsdCBIZWFkZXJcbiIsCiAgICAiaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuY29uc3QgQ1JMRiA9ICdcXHJcXG4nXG5cbmNvbnN0IFVUQ19WVElNRVpPTkUgPSBbXG5cdCdCRUdJTjpWVElNRVpPTkUnLFxuXHQnVFpJRDpVVEMnLFxuXHQnQkVHSU46U1RBTkRBUkQnLFxuXHQnRFRTVEFSVDoxOTcwMDEwMVQwMDAwMDAnLFxuXHQnVFpOQU1FOlVUQycsXG5cdCdUWk9GRlNFVEZST006KzAwMDAnLFxuXHQnVFpPRkZTRVRUTzorMDAwMCcsXG5cdCdFTkQ6U1RBTkRBUkQnLFxuXHQnRU5EOlZUSU1FWk9ORScsXG5dLmpvaW4oQ1JMRilcblxuY29uc3QgZXNjYXBlVGV4dCA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gdGV4dFxuXHRcdC5yZXBsYWNlQWxsKCdcXFxcJywgJ1xcXFxcXFxcJylcblx0XHQucmVwbGFjZUFsbCgnOycsICdcXFxcOycpXG5cdFx0LnJlcGxhY2VBbGwoJywnLCAnXFxcXCwnKVxuXHRcdC5yZXBsYWNlQWxsKCdcXG4nLCAnXFxcXG4nKVxuXHRcdC5yZXBsYWNlQWxsKCdcXHInLCAnJylcbn1cblxuY29uc3QgZm9ybWF0RGF0ZSA9IChkYXRlOiBkYXlqcy5EYXlqcywgaXNBbGxEYXkgPSBmYWxzZSk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBpc0FsbERheVxuXHRcdD8gZGF0ZS5mb3JtYXQoJ1lZWVlNTUREJylcblx0XHQ6IGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG59XG5cbmNvbnN0IGdldFVJRCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG5jb25zdCBmb3JtYXRSUnVsZSA9IChycnVsZU9wdGlvbnM6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuXHR0cnkge1xuXHRcdGNvbnN0IHJydWxlU3RyaW5nID0gbmV3IFJSdWxlKFxuXHRcdFx0cnJ1bGVPcHRpb25zIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgUlJ1bGU+WzBdXG5cdFx0KS50b1N0cmluZygpXG5cdFx0cmV0dXJuIChcblx0XHRcdHJydWxlU3RyaW5nLnNwbGl0KCdcXG4nKS5maW5kKChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoJ1JSVUxFOicpKSB8fCAnJ1xuXHRcdClcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuICcnXG5cdH1cbn1cblxuY29uc3QgY29udmVydEV2ZW50VG9WRXZlbnQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuXHRjb25zdCB0aW1lc3RhbXAgPSBkYXlqcygpLnV0YygpLmZvcm1hdCgnWVlZWU1NRERbVF1ISG1tc3NbWl0nKVxuXHRjb25zdCBkYXRlUGFyYW0gPSBldmVudC5hbGxEYXkgPyAnO1ZBTFVFPURBVEUnIDogJydcblx0Y29uc3QgcnJ1bGUgPSBldmVudC5ycnVsZSA/IGZvcm1hdFJSdWxlKGV2ZW50LnJydWxlKSA6ICcnXG5cblx0Y29uc3QgZXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXM/Lmxlbmd0aFxuXHRcdD8gZXZlbnQuZXhkYXRlcy5tYXAoKGQpID0+IGZvcm1hdERhdGUoZGF5anMoZCksIGV2ZW50LmFsbERheSkpLmpvaW4oJywnKVxuXHRcdDogbnVsbFxuXG5cdGNvbnN0IHJlY3VycmVuY2VJZCA9IGV2ZW50LnJlY3VycmVuY2VJZFxuXHRcdD8gZm9ybWF0RGF0ZShkYXlqcyhldmVudC5yZWN1cnJlbmNlSWQpLCBldmVudC5hbGxEYXkpXG5cdFx0OiBudWxsXG5cblx0Y29uc3QgbGluZXMgPSBbXG5cdFx0J0JFR0lOOlZFVkVOVCcsXG5cdFx0YFVJRDoke2dldFVJRChldmVudCl9YCxcblx0XHRgRFRTVEFSVCR7ZGF0ZVBhcmFtfToke2Zvcm1hdERhdGUoZXZlbnQuc3RhcnQsIGV2ZW50LmFsbERheSl9YCxcblx0XHRgRFRFTkQke2RhdGVQYXJhbX06JHtmb3JtYXREYXRlKGV2ZW50LmVuZCwgZXZlbnQuYWxsRGF5KX1gLFxuXHRcdGBTVU1NQVJZOiR7ZXNjYXBlVGV4dChldmVudC50aXRsZSl9YCxcblx0XHRldmVudC5kZXNjcmlwdGlvbiAmJiBgREVTQ1JJUFRJT046JHtlc2NhcGVUZXh0KGV2ZW50LmRlc2NyaXB0aW9uKX1gLFxuXHRcdGV2ZW50LmxvY2F0aW9uICYmIGBMT0NBVElPTjoke2VzY2FwZVRleHQoZXZlbnQubG9jYXRpb24pfWAsXG5cdFx0cnJ1bGUsXG5cdFx0ZXhkYXRlcyAmJiBgRVhEQVRFOiR7ZXhkYXRlc31gLFxuXHRcdHJlY3VycmVuY2VJZCAmJiBgUkVDVVJSRU5DRS1JRDoke3JlY3VycmVuY2VJZH1gLFxuXHRcdGBEVFNUQU1QOiR7dGltZXN0YW1wfWAsXG5cdFx0YENSRUFURUQ6JHt0aW1lc3RhbXB9YCxcblx0XHRgTEFTVC1NT0RJRklFRDoke3RpbWVzdGFtcH1gLFxuXHRcdCdTVEFUVVM6Q09ORklSTUVEJyxcblx0XHQnU0VRVUVOQ0U6MCcsXG5cdFx0J1RSQU5TUDpPUEFRVUUnLFxuXHRcdCdFTkQ6VkVWRU5UJyxcblx0XVxuXG5cdHJldHVybiBsaW5lcy5maWx0ZXIoQm9vbGVhbikuam9pbihDUkxGKVxufVxuXG5jb25zdCBmaWx0ZXJFdmVudHMgPSAoZXZlbnRzOiBDYWxlbmRhckV2ZW50W10pOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRjb25zdCBzZWVuVUlEcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cblx0cmV0dXJuIGV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgdWlkID0gZ2V0VUlEKGV2ZW50KVxuXHRcdGNvbnN0IGlzQmFzZVJlY3VycmluZyA9IGV2ZW50LnJydWxlICYmICFldmVudC5yZWN1cnJlbmNlSWRcblx0XHRjb25zdCBpc01vZGlmaWVkSW5zdGFuY2UgPSBldmVudC5yZWN1cnJlbmNlSWQgJiYgIWV2ZW50LnJydWxlXG5cblx0XHRpZiAoaXNCYXNlUmVjdXJyaW5nKSB7XG5cdFx0XHRzZWVuVUlEcy5hZGQodWlkKVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0aWYgKGlzTW9kaWZpZWRJbnN0YW5jZSkge1xuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0cmV0dXJuICFldmVudC5ycnVsZSAmJiAhZXZlbnQucmVjdXJyZW5jZUlkICYmICFzZWVuVUlEcy5oYXModWlkKVxuXHR9KVxufVxuXG5leHBvcnQgY29uc3QgZXhwb3J0VG9JQ2FsZW5kYXIgPSAoXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdLFxuXHRjYWxlbmRhck5hbWUgPSAnaWxhbXkgQ2FsZW5kYXInXG4pOiBzdHJpbmcgPT4ge1xuXHRjb25zdCBuYW1lID0gZXNjYXBlVGV4dChjYWxlbmRhck5hbWUpXG5cdGNvbnN0IHZldmVudFN0cmluZ3MgPSBmaWx0ZXJFdmVudHMoZXZlbnRzKS5tYXAoY29udmVydEV2ZW50VG9WRXZlbnQpXG5cblx0cmV0dXJuIFtcblx0XHQnQkVHSU46VkNBTEVOREFSJyxcblx0XHQnVkVSU0lPTjoyLjAnLFxuXHRcdCdQUk9ESUQ6LS8vaWxhbXkvL2lsYW15IENhbGVuZGFyLy9FTicsXG5cdFx0J0NBTFNDQUxFOkdSRUdPUklBTicsXG5cdFx0J01FVEhPRDpQVUJMSVNIJyxcblx0XHRgWC1XUi1DQUxOQU1FOiR7bmFtZX1gLFxuXHRcdGBYLVdSLUNBTERFU0M6RXhwb3J0ZWQgZnJvbSAke25hbWV9YCxcblx0XHRVVENfVlRJTUVaT05FLFxuXHRcdC4uLnZldmVudFN0cmluZ3MsXG5cdFx0J0VORDpWQ0FMRU5EQVInLFxuXHRdLmpvaW4oQ1JMRilcbn1cblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkSUNhbGVuZGFyID0gKFxuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcblx0ZmlsZW5hbWUgPSAnY2FsZW5kYXIuaWNzJyxcblx0Y2FsZW5kYXJOYW1lID0gJ2lsYW15IENhbGVuZGFyJ1xuKTogdm9pZCA9PiB7XG5cdGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZXhwb3J0VG9JQ2FsZW5kYXIoZXZlbnRzLCBjYWxlbmRhck5hbWUpXSwge1xuXHRcdHR5cGU6ICd0ZXh0L2NhbGVuZGFyO2NoYXJzZXQ9dXRmLTgnLFxuXHR9KVxuXHRjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpXG5cdGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IGZpbGVuYW1lLmVuZHNXaXRoKCcuaWNzJylcblx0XHQ/IGZpbGVuYW1lXG5cdFx0OiBgJHtmaWxlbmFtZX0uaWNzYFxuXG5cdGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcblx0bGluay5ocmVmID0gdXJsXG5cdGxpbmsuZG93bmxvYWQgPSBub3JtYWxpemVkRmlsZW5hbWVcblxuXHRkb2N1bWVudC5ib2R5LmFwcGVuZChsaW5rKVxuXHRsaW5rLmNsaWNrKClcblx0bGluay5yZW1vdmUoKVxuXHRVUkwucmV2b2tlT2JqZWN0VVJMKHVybClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ2hldnJvbkRvd24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuY29uc3QgTU9OVEhfS0VZUyA9IFtcblx0J2phbnVhcnknLFxuXHQnZmVicnVhcnknLFxuXHQnbWFyY2gnLFxuXHQnYXByaWwnLFxuXHQnbWF5Jyxcblx0J2p1bmUnLFxuXHQnanVseScsXG5cdCdhdWd1c3QnLFxuXHQnc2VwdGVtYmVyJyxcblx0J29jdG9iZXInLFxuXHQnbm92ZW1iZXInLFxuXHQnZGVjZW1iZXInLFxuXSBhcyBjb25zdFxuXG5jb25zdCBUaXRsZUNvbnRlbnQgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHZpZXcsIHNldEN1cnJlbnREYXRlLCB0LCBmaXJzdERheU9mV2VlayB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdFx0Y3VycmVudERhdGU6IGN0eC5jdXJyZW50RGF0ZSxcblx0XHRcdHZpZXc6IGN0eC52aWV3LFxuXHRcdFx0c2V0Q3VycmVudERhdGU6IGN0eC5zZXRDdXJyZW50RGF0ZSxcblx0XHRcdHQ6IGN0eC50LFxuXHRcdFx0Zmlyc3REYXlPZldlZWs6IGN0eC5maXJzdERheU9mV2Vlayxcblx0XHR9KSlcblxuXHRjb25zdCBbb3BlblBvcG92ZXIsIHNldE9wZW5Qb3BvdmVyXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG5cblx0Y29uc3QgbW9udGhzID0gdXNlTWVtbygoKSA9PiBNT05USF9LRVlTLm1hcCgoa2V5KSA9PiB0KGtleSkpLCBbdF0pXG5cdGNvbnN0IGN1cnJlbnRZZWFyID0gY3VycmVudERhdGUueWVhcigpXG5cdGNvbnN0IHllYXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTEgfSwgKF8sIGkpID0+IGN1cnJlbnRZZWFyIC0gNSArIGkpXG5cdGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdGNvbnN0IHNlbGVjdERhdGUgPSAoZGF0ZTogZGF5anMuRGF5anMpID0+IHtcblx0XHRzZXRDdXJyZW50RGF0ZShkYXRlKVxuXHRcdHNldE9wZW5Qb3BvdmVyKG51bGwpXG5cdH1cblxuXHRjb25zdCByZW5kZXJNb250aENvbnRlbnQgPSAoKSA9PiAoXG5cdFx0PD5cblx0XHRcdHttb250aHMubWFwKChtb250aCwgaW5kZXgpID0+IChcblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG5cdFx0XHRcdFx0XHRjdXJyZW50RGF0ZS5tb250aCgpID09PSBpbmRleCAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGtleT17bW9udGh9XG5cdFx0XHRcdFx0b25DbGljaz17KCkgPT4gc2VsZWN0RGF0ZShjdXJyZW50RGF0ZS5tb250aChpbmRleCkpfVxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7bW9udGh9XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0KSl9XG5cdFx0PC8+XG5cdClcblxuXHRjb25zdCByZW5kZXJZZWFyQ29udGVudCA9ICgpID0+IChcblx0XHQ8PlxuXHRcdFx0e3llYXJzLm1hcCgoeWVhcikgPT4gKFxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdGN1cnJlbnREYXRlLnllYXIoKSA9PT0geWVhciAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGtleT17eWVhcn1cblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZWxlY3REYXRlKGN1cnJlbnREYXRlLnllYXIoeWVhcikpfVxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7eWVhcn1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQpKX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlcldlZWtDb250ZW50ID0gKCkgPT4gKFxuXHRcdDw+XG5cdFx0XHR7QXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgaSkgPT4ge1xuXHRcdFx0XHRjb25zdCB3ZWVrRGF0ZSA9IGN1cnJlbnREYXRlLnN1YnRyYWN0KDMsICd3ZWVrJykuYWRkKGksICd3ZWVrJylcblx0XHRcdFx0Y29uc3QgZGF5cyA9IGdldFdlZWtEYXlzKHdlZWtEYXRlLCBmaXJzdERheU9mV2Vlaylcblx0XHRcdFx0Y29uc3Qgc3RhcnQgPSBkYXlzWzBdXG5cdFx0XHRcdGNvbnN0IGVuZCA9IGRheXNbNl1cblx0XHRcdFx0Y29uc3QgaXNDdXJyZW50V2VlayA9IHdlZWtEYXRlLmlzU2FtZShjdXJyZW50RGF0ZSwgJ3dlZWsnKVxuXHRcdFx0XHRjb25zdCBjcm9zc2VzTW9udGggPSBzdGFydC5tb250aCgpICE9PSBlbmQubW9udGgoKVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0XHRpc0N1cnJlbnRXZWVrICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdGtleT17c3RhcnQuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZWxlY3REYXRlKHN0YXJ0KX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG5cdFx0XHRcdFx0XHRcdDxzcGFuPntgJHtzdGFydC5mb3JtYXQoJ01NTSBEJyl9IC0gJHtlbmQuZm9ybWF0KCdEJyl9YH08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdHtjcm9zc2VzTW9udGggJiYgKFxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cIm1sLTAuNSB0ZXh0LXhzIG9wYWNpdHktNzBcIj57YCR7c3RhcnQuZm9ybWF0KCdNTU0nKX0tJHtlbmQuZm9ybWF0KCdNTU0nKX1gfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlckRheUNvbnRlbnQgPSAoKSA9PiB7XG5cdFx0Y29uc3QgZmlyc3REYXkgPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cdFx0Y29uc3QgZGF5c0luTW9udGggPSBjdXJyZW50RGF0ZS5kYXlzSW5Nb250aCgpXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PD5cblx0XHRcdFx0e0FycmF5LmZyb20oeyBsZW5ndGg6IGRheXNJbk1vbnRoIH0sIChfLCBpKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZGF5ID0gZmlyc3REYXkuZGF0ZShpICsgMSlcblx0XHRcdFx0XHRjb25zdCBpc0N1cnJlbnREYXkgPSBkYXkuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5Jylcblx0XHRcdFx0XHRjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5JylcblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0XHRcdGlzQ3VycmVudERheSAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0a2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNlbGVjdERhdGUoZGF5KX1cblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4+e2RheS5mb3JtYXQoJ2RkZGQsIE1NTSBEJyl9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdHtpc1RvZGF5ICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1zbSBweC0xISB0ZXh0LXhzXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0KCd0b2RheScpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KX1cblx0XHRcdDwvPlxuXHRcdClcblx0fVxuXG5cdGNvbnN0IHBvcG92ZXJzID0gW1xuXHRcdHtcblx0XHRcdGlkOiAnbW9udGgnLFxuXHRcdFx0aGlkZGVuOiB2aWV3ID09PSAneWVhcicsXG5cdFx0XHR0aXRsZTogY3VycmVudERhdGUuZm9ybWF0KCdNTU1NJyksXG5cdFx0XHRyZW5kZXI6IHJlbmRlck1vbnRoQ29udGVudCxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiAneWVhcicsXG5cdFx0XHRoaWRkZW46IGZhbHNlLFxuXHRcdFx0dGl0bGU6IGN1cnJlbnREYXRlLmZvcm1hdCgnWVlZWScpLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJZZWFyQ29udGVudCxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiAnd2VlaycsXG5cdFx0XHRoaWRkZW46IHZpZXcgIT09ICd3ZWVrJyxcblx0XHRcdHRpdGxlOiBgJHt3ZWVrRGF5c1swXS5mb3JtYXQoJ01NTSBEJyl9IC0gJHt3ZWVrRGF5c1s2XS5mb3JtYXQoJ01NTSBEJyl9YCxcblx0XHRcdHJlbmRlcjogcmVuZGVyV2Vla0NvbnRlbnQsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogJ2RheScsXG5cdFx0XHRoaWRkZW46IHZpZXcgIT09ICdkYXknLFxuXHRcdFx0dGl0bGU6IGN1cnJlbnREYXRlLmZvcm1hdCgnZGRkZCwgRCcpLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJEYXlDb250ZW50LFxuXHRcdH0sXG5cdF1cblxuXHRyZXR1cm4gcG9wb3ZlcnNcblx0XHQuZmlsdGVyKChwKSA9PiAhcC5oaWRkZW4pXG5cdFx0Lm1hcCgocG9wb3ZlcikgPT4gKFxuXHRcdFx0PFBvcG92ZXJcblx0XHRcdFx0a2V5PXtwb3BvdmVyLmlkfVxuXHRcdFx0XHRvbk9wZW5DaGFuZ2U9eyhvcGVuKSA9PiBzZXRPcGVuUG9wb3ZlcihvcGVuID8gcG9wb3Zlci5pZCA6IG51bGwpfVxuXHRcdFx0XHRvcGVuPXtvcGVuUG9wb3ZlciA9PT0gcG9wb3Zlci5pZH1cblx0XHRcdD5cblx0XHRcdFx0PFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcHgtMSEgZm9udC1zZW1pYm9sZFwiXG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImNhbGVuZGFyLW1vbnRoLWJ1dHRvblwiXG5cdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcHgtMSEgZm9udC1zZW1pYm9sZFwiXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItbW9udGgtYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17YCR7cG9wb3Zlci5pZH0tJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7cG9wb3Zlci50aXRsZX1cblx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHRcdFx0PENoZXZyb25Eb3duIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0XHQ8UG9wb3ZlckNvbnRlbnQgY2xhc3NOYW1lPVwidy00MCBwLTBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggbWF4LWgtNjAgZmxleC1jb2wgb3ZlcmZsb3ctYXV0b1wiPlxuXHRcdFx0XHRcdFx0e3BvcG92ZXIucmVuZGVyKCl9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0XHQ8L1BvcG92ZXI+XG5cdFx0KSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGl0bGVDb250ZW50XG4iLAogICAgImltcG9ydCB7IENoZXZyb25MZWZ0LCBDaGV2cm9uUmlnaHQgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG50eXBlIFZpZXdUeXBlID0gJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInXG5jb25zdCBBVkFJTEFCTEVfVklFV1M6IFZpZXdUeXBlW10gPSBbJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXVxuXG5pbnRlcmZhY2UgVmlld0NvbnRyb2xzUHJvcHMge1xuXHRjdXJyZW50VmlldzogVmlld1R5cGVcblx0b25DaGFuZ2U6ICh2aWV3OiBWaWV3VHlwZSkgPT4gdm9pZFxuXHRvblRvZGF5PzogKCkgPT4gdm9pZFxuXHRvbk5leHQ/OiAoKSA9PiB2b2lkXG5cdG9uUHJldmlvdXM/OiAoKSA9PiB2b2lkXG5cdHZhcmlhbnQ/OiAnZGVmYXVsdCcgfCAnZ3JpZCdcblx0c2l6ZT86ICdzbScgfCAnZGVmYXVsdCdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IFZpZXdDb250cm9sczogUmVhY3QuRkM8Vmlld0NvbnRyb2xzUHJvcHM+ID0gKHtcblx0Y3VycmVudFZpZXcsXG5cdG9uQ2hhbmdlLFxuXHR2YXJpYW50ID0gJ2RlZmF1bHQnLFxuXHRzaXplID0gJ3NtJyxcblx0Y2xhc3NOYW1lLFxuXHRvblRvZGF5LFxuXHRvbk5leHQsXG5cdG9uUHJldmlvdXMsXG59KSA9PiB7XG5cdGNvbnN0IHsgdCwgcmVzb3VyY2VzIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHR0OiBjb250ZXh0LnQsXG5cdFx0cmVzb3VyY2VzOiBjb250ZXh0LnJlc291cmNlcyxcblx0fSkpXG5cdGNvbnN0IGlzR3JpZCA9IHZhcmlhbnQgPT09ICdncmlkJ1xuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSByZXNvdXJjZXMgJiYgcmVzb3VyY2VzLmxlbmd0aCA+IDBcblxuXHQvLyBFeHRyYWN0IGNvbW1vbiBidXR0b24gY2xhc3NOYW1lIGxvZ2ljIHRvIGEgZnVuY3Rpb25cblx0Y29uc3QgZ2V0QnV0dG9uQ2xhc3NOYW1lID0gKHZpZXdUeXBlOiBWaWV3VHlwZSkgPT4ge1xuXHRcdHJldHVybiBjbihcblx0XHRcdC8vIEJhc2Ugd2lkdGggZm9yIGdyaWQgbGF5b3V0XG5cdFx0XHRpc0dyaWQgPyAndy1mdWxsJyA6ICcnLFxuXHRcdFx0Ly8gQWN0aXZlIHZpZXcgc3R5bGluZ1xuXHRcdFx0Y3VycmVudFZpZXcgPT09IHZpZXdUeXBlICYmICdiZy1wcmltYXJ5LzgwJ1xuXHRcdClcblx0fVxuXG5cdGNvbnN0IGdldEJ0blZhcmlhbnQgPSAodmlld1R5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0cmV0dXJuIGN1cnJlbnRWaWV3ID09PSB2aWV3VHlwZSA/ICdkZWZhdWx0JyA6ICdvdXRsaW5lJ1xuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRpc0dyaWQgPyAnZ3JpZCBncmlkLWNvbHMtMiBnYXAtMicgOiAnZmxleCBnYXAtMScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uUHJldmlvdXN9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdDxDaGV2cm9uTGVmdCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvbk5leHR9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdDxDaGV2cm9uUmlnaHQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0e0FWQUlMQUJMRV9WSUVXUy5tYXAoKHR5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0XHRcdGlmIChpc1Jlc291cmNlQ2FsZW5kYXIgJiYgdHlwZSA9PT0gJ3llYXInKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGxcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUodHlwZSl9XG5cdFx0XHRcdFx0XHRrZXk9e3R5cGV9XG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSh0eXBlKX1cblx0XHRcdFx0XHRcdHNpemU9e3NpemV9XG5cdFx0XHRcdFx0XHR2YXJpYW50PXtnZXRCdG5WYXJpYW50KHR5cGUpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHt0KHR5cGUpfVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvblRvZGF5fSBzaXplPXtzaXplfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHR7dCgndG9kYXknKX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZXdDb250cm9sc1xuIiwKICAgICJpbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdkYXlqcydcbmltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkUm93IH0gZnJvbSAnQC9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQtcm93J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgQWxsRGF5Q2VsbCB9IGZyb20gJy4vYWxsLWRheS1jZWxsJ1xuXG5pbnRlcmZhY2UgQWxsRGF5Um93UHJvcHMge1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdXG5cdGNsYXNzZXM/OiB7IHJvdz86IHN0cmluZzsgY2VsbD86IHN0cmluZzsgc3BhY2VyPzogc3RyaW5nIH1cblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRzaG93U3BhY2VyPzogYm9vbGVhblxufVxuXG5jb25zdCBOb01lbW9BbGxEYXlSb3c6IFJlYWN0LkZDPEFsbERheVJvd1Byb3BzPiA9ICh7XG5cdGRheXMsXG5cdGNsYXNzZXMsXG5cdHJlc291cmNlLFxuXHRzaG93U3BhY2VyID0gdHJ1ZSxcbn0pID0+IHtcblx0Y29uc3QgY29sdW1ucyA9IGRheXMubWFwKChkYXksIGluZGV4KSA9PiAoe1xuXHRcdGlkOiBgYWxsZGF5LWNvbC0ke2RheS50b0lTT1N0cmluZygpfS0ke2luZGV4fWAsXG5cdFx0ZGF5LFxuXHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0XHRjbGFzc05hbWU6IGNuKCdoLWZ1bGwgbWluLWgtMTIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wJywgY2xhc3Nlcz8uY2VsbCksXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9e2NuKCdmbGV4IHctZnVsbCcsIGNsYXNzZXM/LnJvdyl9IGRhdGEtdGVzdGlkPVwiYWxsLWRheS1yb3dcIj5cblx0XHRcdHsvKiBUaW1lIGNvbCBzcGFjZXIgKi99XG5cdFx0XHR7c2hvd1NwYWNlciAmJiA8QWxsRGF5Q2VsbCBjbGFzc05hbWU9e2NsYXNzZXM/LnNwYWNlcn0gLz59XG5cblx0XHRcdHsvKiBEYXkgYWxsIGRheSBjZWxsICovfVxuXHRcdFx0PEhvcml6b250YWxHcmlkUm93XG5cdFx0XHRcdGFsbERheVxuXHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4LTEgbWluLWgtZml0XCJcblx0XHRcdFx0Y29sdW1ucz17Y29sdW1uc31cblx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXswfVxuXHRcdFx0XHRncmlkVHlwZT1cImRheVwiXG5cdFx0XHRcdGlkPXtgYWxsLWRheS1yb3ctJHtyZXNvdXJjZT8uaWQgPz8gJ21haW4nfWB9XG5cdFx0XHRcdGlzTGFzdFJvd1xuXHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHRcdC8+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEFsbERheVJvdyA9IG1lbW8oTm9NZW1vQWxsRGF5Um93KVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IG1lbW8sIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEdyaWRDZWxsIH0gZnJvbSAnLi4vZ3JpZC1jZWxsJ1xuaW1wb3J0IHsgUmVzb3VyY2VDZWxsIH0gZnJvbSAnLi4vcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXIgfSBmcm9tICcuL2hvcml6b250YWwtZ3JpZC1ldmVudHMtbGF5ZXInXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZENvbHVtbiB7XG5cdGlkOiBzdHJpbmdcblx0ZGF5PzogZGF5anMuRGF5anNcblx0ZGF5cz86IGRheWpzLkRheWpzW11cblx0Z3JpZFR5cGU6ICdkYXknIHwgJ2hvdXInXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRyZW5kZXJDZWxsPzogKHJvdzogSG9yaXpvbnRhbEdyaWRSb3dQcm9wcykgPT4gUmVhY3QuUmVhY3ROb2RlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRSb3dQcm9wcyB7XG5cdGlkOiBzdHJpbmcgfCBudW1iZXJcblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHZhcmlhbnQ/OiAncmVndWxhcicgfCAncmVzb3VyY2UnXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0Y29sdW1ucz86IEhvcml6b250YWxHcmlkQ29sdW1uW11cblx0YWxsRGF5PzogYm9vbGVhblxuXHRzaG93RGF5TnVtYmVyPzogYm9vbGVhblxuXHRpc0xhc3RSb3c/OiBib29sZWFuXG59XG5cbmNvbnN0IE5vTWVtb0hvcml6b250YWxHcmlkUm93OiBSZWFjdC5GQzxIb3Jpem9udGFsR3JpZFJvd1Byb3BzPiA9ICh7XG5cdGlkLFxuXHRyZXNvdXJjZSxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0dmFyaWFudCA9ICdyZXNvdXJjZScsXG5cdGRheU51bWJlckhlaWdodCxcblx0Y2xhc3NOYW1lLFxuXHRjb2x1bW5zID0gW10sXG5cdGFsbERheSxcblx0c2hvd0RheU51bWJlciA9IGZhbHNlLFxuXHRpc0xhc3RSb3cgPSBmYWxzZSxcbn0pID0+IHtcblx0Y29uc3QgeyByZW5kZXJSZXNvdXJjZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKHN0YXRlKSA9PiAoe1xuXHRcdHJlbmRlclJlc291cmNlOiBzdGF0ZS5yZW5kZXJSZXNvdXJjZSxcblx0fSkpXG5cblx0Y29uc3QgaXNSZXNvdXJjZUNhbGVuZGFyID0gdmFyaWFudCA9PT0gJ3Jlc291cmNlJ1xuXHRjb25zdCBpc0dyb3VwZWQgPSBjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLmRheXMpXG5cblx0Y29uc3QgcmVuZGVyRXZlbnRzTGF5ZXIgPSB1c2VDYWxsYmFjayhcblx0XHQoZGF5czogZGF5anMuRGF5anNbXSkgPT4ge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuXHRcdFx0XHRcdDxIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyXG5cdFx0XHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgaG9yaXpvbnRhbC1ldmVudHMtJHtpZH1gfVxuXHRcdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXtkYXlOdW1iZXJIZWlnaHR9XG5cdFx0XHRcdFx0XHRkYXlzPXtkYXlzfVxuXHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2U/LmlkfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2FsbERheSwgZGF5TnVtYmVySGVpZ2h0LCBncmlkVHlwZSwgaWQsIHJlc291cmNlPy5pZF1cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LTEgcmVsYXRpdmUnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2Bob3Jpem9udGFsLXJvdy0ke2lkfWB9XG5cdFx0PlxuXHRcdFx0e2lzUmVzb3VyY2VDYWxlbmRhciAmJiAoXG5cdFx0XHRcdDxSZXNvdXJjZUNlbGxcblx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAgaC1mdWxsXCJcblx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YGhvcml6b250YWwtcm93LWxhYmVsLSR7cmVzb3VyY2U/LmlkfWB9XG5cdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3JlbmRlclJlc291cmNlID8gKFxuXHRcdFx0XHRcdFx0cmVuZGVyUmVzb3VyY2UocmVzb3VyY2UpXG5cdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwid3JhcC1icmVhay13b3JkIHRleHQtc21cIj57cmVzb3VyY2U/LnRpdGxlfTwvZGl2PlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdDwvUmVzb3VyY2VDZWxsPlxuXHRcdFx0KX1cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleC0xIGZsZXhcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbFwiPlxuXHRcdFx0XHRcdHtjb2x1bW5zLm1hcCgoY29sLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGNvbC5kYXkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0XHRcdGFsbERheT17YWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0J2ZsZXgtMSB3LTIwJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXNMYXN0Um93ICYmICdib3JkZXItYi0wJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29sLmNsYXNzTmFtZVxuXHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdGRheT17Y29sLmRheX1cblx0XHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRcdGhvdXI9e2dyaWRUeXBlID09PSAnaG91cicgPyBjb2wuZGF5LmhvdXIoKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdFx0XHRcdGtleT17Y29sLmRheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2U/LmlkfVxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0RheU51bWJlcj17c2hvd0RheU51bWJlcn1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGlzTGFzdENvbCA9IGluZGV4ID09PSBjb2x1bW5zLmxlbmd0aCAtIDFcblxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHJlbGF0aXZlIHctZnVsbFwiIGtleT17Y29sLmlkfT5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7Y29sLmRheXM/Lm1hcCgoZGF5KSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxHcmlkQ2VsbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsbERheT17YWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnZmxleC0xIHctMjAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXNMYXN0Um93ICYmICdib3JkZXItYi0wJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCFpc0xhc3RDb2wgJiYgJ2JvcmRlci1yIScsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb2wuY2xhc3NOYW1lXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXk9e2RheX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aG91cj17Z3JpZFR5cGUgPT09ICdob3VyJyA/IGRheS5ob3VyKCkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtkYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZT8uaWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0RheU51bWJlcj17c2hvd0RheU51bWJlcn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHRcdFx0e3JlbmRlckV2ZW50c0xheWVyKGNvbC5kYXlzKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBFdmVudHMgbGF5ZXIgcG9zaXRpb25lZCBhYnNvbHV0ZWx5IG92ZXIgdGhlIHJvdyAqL31cblx0XHRcdFx0eyFpc0dyb3VwZWQgJiZcblx0XHRcdFx0XHRyZW5kZXJFdmVudHNMYXllcihjb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wuZGF5KS5maWx0ZXIoQm9vbGVhbikpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkUm93ID0gbWVtbyhOb01lbW9Ib3Jpem9udGFsR3JpZFJvdylcbiIsCiAgICAiaW1wb3J0IFJlYWN0LCB7IG1lbW8sIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IERheU51bWJlciB9IGZyb20gJ0AvY29tcG9uZW50cy9kYXktbnVtYmVyJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgaXNCdXNpbmVzc0hvdXIgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2J1c2luZXNzLWhvdXJzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBFVkVOVF9CQVJfSEVJR0hUIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB0eXBlIHsgU2VsZWN0ZWREYXlFdmVudHMgfSBmcm9tICcuL2FsbC1ldmVudHMtZGlhbG9nJ1xuaW1wb3J0IHsgQWxsRXZlbnREaWFsb2cgfSBmcm9tICcuL2FsbC1ldmVudHMtZGlhbG9nJ1xuaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJy4vZHJvcHBhYmxlLWNlbGwnXG5cbmludGVyZmFjZSBHcmlkUHJvcHMge1xuXHRkYXk6IGRheWpzLkRheWpzXG5cdGhvdXI/OiBudW1iZXIgLy8gT3B0aW9uYWwgaG91ciBmb3IgaG91ci1iYXNlZCBncmlkc1xuXHRtaW51dGU/OiBudW1iZXIgLy8gT3B0aW9uYWwgbWludXRlIGZvciBtb3JlIGdyYW51bGFyIHRpbWUgc2xvdHNcblx0ZGF5TWF4RXZlbnRzPzogbnVtYmVyXG5cdGNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjbGFzc05hbWUgZm9yIGN1c3RvbSBzdHlsaW5nXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXIgLy8gT3B0aW9uYWwgcmVzb3VyY2UgSUQgZm9yIHJlc291cmNlLXNwZWNpZmljIGRheSBjZWxsc1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInIC8vIEZ1dHVyZSB1c2UgZm9yIGRpZmZlcmVudCBncmlkIHR5cGVzXG5cdHNob3VsZFJlbmRlckV2ZW50cz86IGJvb2xlYW4gLy8gRmxhZyB0byBkZXRlcm1pbmUgaWYgZXZlbnRzIHNob3VsZCBiZSByZW5kZXJlZFxuXHRhbGxEYXk/OiBib29sZWFuIC8vIEZsYWcgdG8gaW5kaWNhdGUgaWYgdGhpcyBpcyBhbiBhbGwtZGF5IGNlbGxcblx0c2hvd0RheU51bWJlcj86IGJvb2xlYW4gLy8gRmxhZyB0byBzaG93IG9yIGhpZGUgdGhlIGRheSBudW1iZXJcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5jb25zdCBOb01lbW9HcmlkQ2VsbDogUmVhY3QuRkM8R3JpZFByb3BzPiA9ICh7XG5cdGRheSxcblx0aG91cixcblx0bWludXRlLFxuXHRjbGFzc05hbWUgPSAnJyxcblx0cmVzb3VyY2VJZCxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0c2hvdWxkUmVuZGVyRXZlbnRzID0gdHJ1ZSxcblx0YWxsRGF5ID0gZmFsc2UsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG5cdHNob3dEYXlOdW1iZXIgPSBmYWxzZSxcblx0Y2hpbGRyZW4sXG59KSA9PiB7XG5cdGNvbnN0IGFsbEV2ZW50c0RpYWxvZ1JlZiA9IFJlYWN0LnVzZVJlZjx7XG5cdFx0b3BlbjogKCkgPT4gdm9pZFxuXHRcdGNsb3NlOiAoKSA9PiB2b2lkXG5cdFx0c2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG5cdH0+KG51bGwpXG5cdGNvbnN0IHtcblx0XHRkYXlNYXhFdmVudHMgPSAwLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRjdXJyZW50RGF0ZSxcblx0XHR0LFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHRldmVudFNwYWNpbmcsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoc3RhdGUpID0+ICh7XG5cdFx0ZGF5TWF4RXZlbnRzOiBzdGF0ZS5kYXlNYXhFdmVudHMsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiBzdGF0ZS5nZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0Y3VycmVudERhdGU6IHN0YXRlLmN1cnJlbnREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrOiBzdGF0ZS5maXJzdERheU9mV2Vlayxcblx0XHR0OiBzdGF0ZS50LFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlOiBzdGF0ZS5nZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRidXNpbmVzc0hvdXJzOiBzdGF0ZS5idXNpbmVzc0hvdXJzLFxuXHRcdGN1cnJlbnRMb2NhbGU6IHN0YXRlLmN1cnJlbnRMb2NhbGUsXG5cdFx0ZXZlbnRTcGFjaW5nOiBzdGF0ZS5ldmVudFNwYWNpbmcsXG5cdH0pKVxuXG5cdGNvbnN0IHRvZGF5RXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKCFzaG91bGRSZW5kZXJFdmVudHMpIHtcblx0XHRcdHJldHVybiBbXVxuXHRcdH1cblxuXHRcdGxldCB0b2RheUV2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShcblx0XHRcdGRheS5zdGFydE9mKGdyaWRUeXBlKSxcblx0XHRcdGRheS5lbmRPZihncmlkVHlwZSlcblx0XHQpXG5cblx0XHRpZiAoYWxsRGF5KSB7XG5cdFx0XHR0b2RheUV2ZW50cyA9IHRvZGF5RXZlbnRzLmZpbHRlcigoZSkgPT4gZS5hbGxEYXkpXG5cdFx0fVxuXG5cdFx0aWYgKHJlc291cmNlSWQpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlRXZlbnRzID0gZ2V0RXZlbnRzRm9yUmVzb3VyY2UocmVzb3VyY2VJZCkgPz8gW11cblxuXHRcdFx0cmV0dXJuIHRvZGF5RXZlbnRzLmZpbHRlcigoZXZlbnQpID0+XG5cdFx0XHRcdHJlc291cmNlRXZlbnRzLnNvbWUoKHJlKSA9PiBTdHJpbmcocmUuaWQpID09PSBTdHJpbmcoZXZlbnQuaWQpKVxuXHRcdFx0KVxuXHRcdH1cblxuXHRcdHJldHVybiB0b2RheUV2ZW50c1xuXHR9LCBbXG5cdFx0ZGF5LFxuXHRcdHJlc291cmNlSWQsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdGdyaWRUeXBlLFxuXHRcdHNob3VsZFJlbmRlckV2ZW50cyxcblx0XHRhbGxEYXksXG5cdF0pXG5cblx0Ly8gSGFuZGxlciBmb3Igc2hvd2luZyBhbGwgZXZlbnRzIGluIGEgZGlhbG9nXG5cdGNvbnN0IHNob3dBbGxFdmVudHMgPSAoZGF5OiBkYXlqcy5EYXlqcywgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10pID0+IHtcblx0XHRhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8uc2V0U2VsZWN0ZWREYXlFdmVudHMoe1xuXHRcdFx0ZGF5LFxuXHRcdFx0ZXZlbnRzLFxuXHRcdH0pXG5cdFx0YWxsRXZlbnRzRGlhbG9nUmVmLmN1cnJlbnQ/Lm9wZW4oKVxuXHR9XG5cblx0Y29uc3QgaXNDdXJyZW50TW9udGggPSBkYXkubW9udGgoKSA9PT0gY3VycmVudERhdGUubW9udGgoKVxuXG5cdGNvbnN0IGhpZGRlbkV2ZW50c0NvdW50ID0gdG9kYXlFdmVudHMubGVuZ3RoIC0gZGF5TWF4RXZlbnRzXG5cdGNvbnN0IGhhc0hpZGRlbkV2ZW50cyA9IGhpZGRlbkV2ZW50c0NvdW50ID4gMFxuXG5cdGNvbnN0IGlzQnVzaW5lc3MgPSBpc0J1c2luZXNzSG91cih7XG5cdFx0ZGF0ZTogZGF5LFxuXHRcdGhvdXI6IGdyaWRUeXBlID09PSAnaG91cicgPyBkYXkuaG91cigpIDogdW5kZWZpbmVkLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdH0pXG5cblx0Y29uc3QgaG91clN0ciA9IGRheS5mb3JtYXQoJ0hIJylcblx0Y29uc3QgbW0gPSBkYXkuZm9ybWF0KCdtbScpXG5cdGNvbnN0IGRhdGVUZXN0SWRCYXNlID1cblx0XHRncmlkVHlwZSA9PT0gJ2hvdXInXG5cdFx0XHQ/IGBkYXktY2VsbC0ke2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX0tJHtob3VyU3RyfS0ke21tfWBcblx0XHRcdDogYGRheS1jZWxsLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWBcblxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8RHJvcHBhYmxlQ2VsbFxuXHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnY3Vyc29yLXBvaW50ZXIgb3ZlcmZsb3ctY2xpcCBwLTEgaG92ZXI6YmctYWNjZW50IG1pbi1oLVs2MHB4XSByZWxhdGl2ZSBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgb25seTpib3JkZXItciBib3JkZXItYicsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkIHx8IGRhdGVUZXN0SWRCYXNlfVxuXHRcdFx0XHRkYXRlPXtkYXl9XG5cdFx0XHRcdGRpc2FibGVkPXshaXNCdXNpbmVzcyB8fCAhaXNDdXJyZW50TW9udGh9XG5cdFx0XHRcdGhvdXI9e2hvdXJ9XG5cdFx0XHRcdGlkPXtgZGF5LWNlbGwtJHtkYXkudG9JU09TdHJpbmcoKX0ke3Jlc291cmNlSWQgPyBgLXJlc291cmNlLSR7cmVzb3VyY2VJZH1gIDogJyd9YH1cblx0XHRcdFx0bWludXRlPXttaW51dGV9XG5cdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlSWR9XG5cdFx0XHRcdHR5cGU9XCJkYXktY2VsbFwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGgtZnVsbCB3LWZ1bGxcIlxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiZ3JpZC1jZWxsLWNvbnRlbnRcIlxuXHRcdFx0XHRcdHN0eWxlPXt7IGdhcDogYCR7ZXZlbnRTcGFjaW5nfXB4YCB9fVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3Nob3dEYXlOdW1iZXIgJiYgPERheU51bWJlciBkYXRlPXtkYXl9IGxvY2FsZT17Y3VycmVudExvY2FsZX0gLz59XG5cblx0XHRcdFx0XHR7c2hvdWxkUmVuZGVyRXZlbnRzICYmIChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdHsvKiBSZW5kZXIgcGxhY2Vob2xkZXJzIGZvciBldmVudHMgdGhhdCBvY2N1ciB0b2RheSBzbyB0aGF0IHRoZSBjZWxsIGhlaWdodCBpcyBhY2NvcmRpbmcgdG8gZGF5TWF4RXZlbnRzLiAqL31cblx0XHRcdFx0XHRcdFx0e3RvZGF5RXZlbnRzLnNsaWNlKDAsIGRheU1heEV2ZW50cykubWFwKChldmVudCwgcm93SW5kZXgpID0+IChcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgc2hyaW5rLTBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2V2ZW50Py50aXRsZX1cblx0XHRcdFx0XHRcdFx0XHRcdGtleT17YGVtcHR5LSR7cm93SW5kZXh9LSR7ZXZlbnQuaWR9YH1cblx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlPXt7IGhlaWdodDogYCR7RVZFTlRfQkFSX0hFSUdIVH1weGAgfX1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQpKX1cblxuXHRcdFx0XHRcdFx0XHR7LyogU2hvdyBtb3JlIGV2ZW50cyBidXR0b24gd2l0aCBhY2N1cmF0ZSBjb3VudCAqL31cblx0XHRcdFx0XHRcdFx0e2hhc0hpZGRlbkV2ZW50cyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGhvdmVyOnRleHQtZm9yZWdyb3VuZCBjdXJzb3ItcG9pbnRlciB0ZXh0LVsxMHB4XSB3aGl0ZXNwYWNlLW5vd3JhcCBzbTp0ZXh0LXhzIHNocmluay0wIG10LTFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dBbGxFdmVudHMoZGF5LCB0b2RheUV2ZW50cylcblx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRvbktleURvd249eyhlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChlLmtleSA9PT0gJ0VudGVyJyB8fCBlLmtleSA9PT0gJyAnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dBbGxFdmVudHMoZGF5LCB0b2RheUV2ZW50cylcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdHJvbGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci10YWctb3Zlci1yb2xlXG5cdFx0XHRcdFx0XHRcdFx0XHR0YWJJbmRleD17MH1cblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHQre2hpZGRlbkV2ZW50c0NvdW50fSB7dCgnbW9yZScpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9Ecm9wcGFibGVDZWxsPlxuXG5cdFx0XHR7LyogRGlhbG9nIGZvciBzaG93aW5nIGFsbCBldmVudHMgKi99XG5cdFx0XHQ8QWxsRXZlbnREaWFsb2cgcmVmPXthbGxFdmVudHNEaWFsb2dSZWZ9IC8+XG5cdFx0PC8+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEdyaWRDZWxsID0gbWVtbyhOb01lbW9HcmlkQ2VsbCkgYXMgdHlwZW9mIE5vTWVtb0dyaWRDZWxsXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIERheU51bWJlclByb3BzIHtcblx0ZGF0ZTogZGF5anMuRGF5anNcblx0bG9jYWxlPzogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGRheSBudW1iZXIgZm9yIGEgY2FsZW5kYXIgY2VsbCwgaGlnaGxpZ2h0aW5nICd0b2RheScgd2l0aCBhIHByaW1hcnkgYmFja2dyb3VuZC5cbiAqL1xuZXhwb3J0IGNvbnN0IERheU51bWJlcjogUmVhY3QuRkM8RGF5TnVtYmVyUHJvcHM+ID0gKHtcblx0ZGF0ZSxcblx0bG9jYWxlID0gJ2VuJyxcblx0Y2xhc3NOYW1lLFxufSkgPT4ge1xuXHRjb25zdCBpc1RvZGF5ID0gZGF0ZS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cyBzaHJpbmstMCcsXG5cdFx0XHRcdGlzVG9kYXkgJiYgJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZm9udC1tZWRpdW0nLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17XG5cdFx0XHRcdGlzVG9kYXkgPyAnZGF5LW51bWJlci10b2RheScgOiBgZGF5LW51bWJlci0ke2RhdGUuZm9ybWF0KCdEJyl9YFxuXHRcdFx0fVxuXHRcdD5cblx0XHRcdHtJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwgeyBkYXk6ICdudW1lcmljJyB9KS5mb3JtYXQoZGF0ZS50b0RhdGUoKSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VJbXBlcmF0aXZlSGFuZGxlLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ29udGVudCxcblx0RGlhbG9nSGVhZGVyLFxuXHREaWFsb2dUaXRsZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RpYWxvZydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RlZERheUV2ZW50cyB7XG5cdGRheTogZGF5anMuRGF5anNcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbn1cblxuaW50ZXJmYWNlIEFsbEV2ZW50RGlhbG9nUHJvcHMge1xuXHRyZWY6IFJlYWN0LlJlZjx7XG5cdFx0b3BlbjogKCkgPT4gdm9pZFxuXHRcdGNsb3NlOiAoKSA9PiB2b2lkXG5cdFx0c2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG5cdH0+XG59XG5cbmV4cG9ydCBjb25zdCBBbGxFdmVudERpYWxvZzogUmVhY3QuRkM8QWxsRXZlbnREaWFsb2dQcm9wcz4gPSAoeyByZWYgfSkgPT4ge1xuXHRjb25zdCBbZGlhbG9nT3Blbiwgc2V0RGlhbG9nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkRGF5RXZlbnRzLCBzZXRTZWxlY3RlZERheUV2ZW50c10gPVxuXHRcdHVzZVN0YXRlPFNlbGVjdGVkRGF5RXZlbnRzIHwgbnVsbD4obnVsbClcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWsgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChzdGF0ZSkgPT4gKHtcblx0XHRjdXJyZW50RGF0ZTogc3RhdGUuY3VycmVudERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWs6IHN0YXRlLmZpcnN0RGF5T2ZXZWVrLFxuXHR9KSlcblxuXHR1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcblx0XHRvcGVuOiAoKSA9PiBzZXREaWFsb2dPcGVuKHRydWUpLFxuXHRcdGNsb3NlOiAoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKSxcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+XG5cdFx0XHRzZXRTZWxlY3RlZERheUV2ZW50cyhkYXlFdmVudHMpLFxuXHR9KSlcblxuXHQvLyBHZXQgc3RhcnQgZGF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9udGggdmlldyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuXHRjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cblx0Ly8gQ2FsY3VsYXRlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGNhbGVuZGFyIGdyaWQgY29ycmVjdGx5XG5cdC8vIEZpbmQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIChlLmcuIFN1bmRheSBvciBNb25kYXkpIHRoYXQgY29tZXMgYmVmb3JlIG9yIG9uIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoXG5cdGxldCBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGZpcnN0RGF5T2ZNb250aC5jbG9uZSgpXG5cdHdoaWxlIChhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5kYXkoKSAhPT0gZmlyc3REYXlPZldlZWspIHtcblx0XHRhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLnN1YnRyYWN0KDEsICdkYXknKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17c2V0RGlhbG9nT3Blbn0gb3Blbj17ZGlhbG9nT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtaC1bODB2aF0gbWF4LXctbWQgb3ZlcmZsb3cteS1hdXRvXCI+XG5cdFx0XHRcdDxEaWFsb2dIZWFkZXI+XG5cdFx0XHRcdFx0PERpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRGF5RXZlbnRzPy5kYXkuZm9ybWF0KCdNTU1NIEQsIFlZWVknKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHQ8L0RpYWxvZ0hlYWRlcj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJtdC00IHNwYWNlLXktM1wiPlxuXHRcdFx0XHRcdHtzZWxlY3RlZERheUV2ZW50cz8uZXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxEcmFnZ2FibGVFdmVudFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIG15LTEgaC1bMzBweF1cIiAvLyBVc2UgZXZlbnQgSUQgZm9yIHVuaXF1ZSBpZGVudGlmaWNhdGlvblxuXHRcdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17YGFsbC1ldmVudHMtZGlhbG9nLWV2ZW50LSQke2V2ZW50LmlkfWB9XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQ9e2V2ZW50fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17ZXZlbnQuaWR9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9EaWFsb2dDb250ZW50PlxuXHRcdDwvRGlhbG9nPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZURyYWdnYWJsZSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgdHlwZSB7IENTU1Byb3BlcnRpZXMgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBnZXRCb3JkZXJSYWRpdXNDbGFzcyA9IChcblx0aXNUcnVuY2F0ZWRTdGFydDogYm9vbGVhbixcblx0aXNUcnVuY2F0ZWRFbmQ6IGJvb2xlYW5cbikgPT4ge1xuXHRpZiAoaXNUcnVuY2F0ZWRTdGFydCAmJiBpc1RydW5jYXRlZEVuZCkge1xuXHRcdHJldHVybiAncm91bmRlZC1ub25lJ1xuXHR9XG5cdGlmIChpc1RydW5jYXRlZFN0YXJ0KSB7XG5cdFx0cmV0dXJuICdyb3VuZGVkLXItbWQgcm91bmRlZC1sLW5vbmUnXG5cdH1cblx0aWYgKGlzVHJ1bmNhdGVkRW5kKSB7XG5cdFx0cmV0dXJuICdyb3VuZGVkLWwtbWQgcm91bmRlZC1yLW5vbmUnXG5cdH1cblx0cmV0dXJuICdyb3VuZGVkLW1kJ1xufVxuXG5mdW5jdGlvbiBEcmFnZ2FibGVFdmVudFVubWVtb2l6ZWQoe1xuXHRlbGVtZW50SWQsXG5cdGV2ZW50LFxuXHRjbGFzc05hbWUsXG5cdHN0eWxlLFxuXHRkaXNhYmxlRHJhZyA9IGZhbHNlLFxufToge1xuXHRlbGVtZW50SWQ6IHN0cmluZ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0c3R5bGU/OiBDU1NQcm9wZXJ0aWVzXG5cdGV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGRpc2FibGVEcmFnPzogYm9vbGVhblxufSkge1xuXHRjb25zdCB7IG9uRXZlbnRDbGljaywgcmVuZGVyRXZlbnQsIGRpc2FibGVFdmVudENsaWNrLCBkaXNhYmxlRHJhZ0FuZERyb3AgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKHN0YXRlKSA9PiAoe1xuXHRcdFx0b25FdmVudENsaWNrOiBzdGF0ZS5vbkV2ZW50Q2xpY2ssXG5cdFx0XHRyZW5kZXJFdmVudDogc3RhdGUucmVuZGVyRXZlbnQsXG5cdFx0XHRkaXNhYmxlRXZlbnRDbGljazogc3RhdGUuZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3A6IHN0YXRlLmRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHR9KSlcblxuXHRjb25zdCB7IGF0dHJpYnV0ZXMsIGxpc3RlbmVycywgc2V0Tm9kZVJlZiwgaXNEcmFnZ2luZyB9ID0gdXNlRHJhZ2dhYmxlKHtcblx0XHRpZDogZWxlbWVudElkLFxuXHRcdGRhdGE6IHtcblx0XHRcdGV2ZW50LFxuXHRcdFx0dHlwZTogJ2NhbGVuZGFyLWV2ZW50Jyxcblx0XHR9LFxuXHRcdGRpc2FibGVkOiBkaXNhYmxlRHJhZyB8fCBkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdH0pXG5cblx0Ly8gRGVmYXVsdCBldmVudCBjb250ZW50IHRvIHJlbmRlciBpZiBjdXN0b20gcmVuZGVyRXZlbnQgaXMgbm90IHByb3ZpZGVkXG5cdGNvbnN0IERlZmF1bHRFdmVudENvbnRlbnQgPSAoKSA9PiB7XG5cdFx0Ly8gQ2hlY2sgaWYgdGhpcyBldmVudCBoYXMgdHJ1bmNhdGlvbiBpbmZvcm1hdGlvblxuXHRcdGNvbnN0IGVuaGFuY2VkRXZlbnQgPSBldmVudCBhcyB1bmtub3duIGFzIHtcblx0XHRcdGlzVHJ1bmNhdGVkU3RhcnQ/OiBib29sZWFuXG5cdFx0XHRpc1RydW5jYXRlZEVuZD86IGJvb2xlYW5cblx0XHR9XG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRTdGFydCA9IGVuaGFuY2VkRXZlbnQuaXNUcnVuY2F0ZWRTdGFydFxuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkRW5kID0gZW5oYW5jZWRFdmVudC5pc1RydW5jYXRlZEVuZFxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRldmVudC5iYWNrZ3JvdW5kQ29sb3IgfHwgJ2JnLWJsdWUtNTAwJyxcblx0XHRcdFx0XHRldmVudC5jb2xvciB8fCAndGV4dC13aGl0ZScsXG5cdFx0XHRcdFx0J2gtZnVsbCB3LWZ1bGwgcHgtMSBib3JkZXItWzEuNXB4XSBib3JkZXItY2FyZCB0ZXh0LWxlZnQgb3ZlcmZsb3ctY2xpcCByZWxhdGl2ZScsXG5cdFx0XHRcdFx0Z2V0Qm9yZGVyUmFkaXVzQ2xhc3MoaXNUcnVuY2F0ZWRTdGFydCwgaXNUcnVuY2F0ZWRFbmQpXG5cdFx0XHRcdCl9XG5cdFx0XHRcdHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogZXZlbnQuYmFja2dyb3VuZENvbG9yLCBjb2xvcjogZXZlbnQuY29sb3IgfX1cblx0XHRcdD5cblx0XHRcdFx0ey8qIExlZnQgY29udGludWF0aW9uIGluZGljYXRvciAqL31cblx0XHRcdFx0e2lzVHJ1bmNhdGVkU3RhcnQgJiYgKFxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgbGVmdC0wIHRvcC0wIGJvdHRvbS0wIHctMC41IGJnLWZvcmVncm91bmQvMjVcIj48L2Rpdj5cblx0XHRcdFx0KX1cblxuXHRcdFx0XHR7LyogRXZlbnQgdGl0bGUgKi99XG5cdFx0XHRcdDxwXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCd0ZXh0LVsxMHB4XSBmb250LXNlbWlib2xkIHNtOnRleHQteHMgbXQtMC41Jyxcblx0XHRcdFx0XHRcdC8vIEFkZCBzbGlnaHQgcGFkZGluZyB0byBhdm9pZCBvdmVybGFwIHdpdGggaW5kaWNhdG9yc1xuXHRcdFx0XHRcdFx0aXNUcnVuY2F0ZWRTdGFydCAmJiAncGwtMScsXG5cdFx0XHRcdFx0XHRpc1RydW5jYXRlZEVuZCAmJiAncHItMSdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e2V2ZW50LnRpdGxlfVxuXHRcdFx0XHQ8L3A+XG5cblx0XHRcdFx0ey8qIFJpZ2h0IGNvbnRpbnVhdGlvbiBpbmRpY2F0b3IgKi99XG5cdFx0XHRcdHtpc1RydW5jYXRlZEVuZCAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0wIHRvcC0wIGJvdHRvbS0wIHctMC41IGJnLWZvcmVncm91bmQvMjVcIj48L2Rpdj5cblx0XHRcdFx0KX1cblx0XHRcdDwvZGl2PlxuXHRcdClcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J3RydW5jYXRlIGgtZnVsbCB3LWZ1bGwnLFxuXHRcdFx0XHRkaXNhYmxlRHJhZyB8fCBkaXNhYmxlRHJhZ0FuZERyb3Bcblx0XHRcdFx0XHQ/IGRpc2FibGVFdmVudENsaWNrXG5cdFx0XHRcdFx0XHQ/ICdjdXJzb3ItZGVmYXVsdCdcblx0XHRcdFx0XHRcdDogJ2N1cnNvci1wb2ludGVyJ1xuXHRcdFx0XHRcdDogJ2N1cnNvci1ncmFiJyxcblx0XHRcdFx0aXNEcmFnZ2luZyAmJlxuXHRcdFx0XHRcdCEoZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wKSAmJlxuXHRcdFx0XHRcdCdjdXJzb3ItZ3JhYmJpbmcgc2hhZG93LWxnJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0bGF5b3V0PXt0cnVlfVxuXHRcdFx0bGF5b3V0SWQ9e2VsZW1lbnRJZH1cblx0XHRcdG9uQ2xpY2s9eyhlKSA9PiB7XG5cdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdFx0b25FdmVudENsaWNrKGV2ZW50KVxuXHRcdFx0fX1cblx0XHRcdHJlZj17c2V0Tm9kZVJlZn1cblx0XHRcdHN0eWxlPXtzdHlsZX1cblx0XHRcdHRyYW5zaXRpb25LZXk9e2VsZW1lbnRJZH1cblx0XHRcdHsuLi5hdHRyaWJ1dGVzfVxuXHRcdFx0ey4uLmxpc3RlbmVyc31cblx0XHQ+XG5cdFx0XHR7LyogVXNlIGN1c3RvbSByZW5kZXJFdmVudCBmcm9tIGNvbnRleHQgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlIGRlZmF1bHQgKi99XG5cdFx0XHR7cmVuZGVyRXZlbnQgPyByZW5kZXJFdmVudChldmVudCkgOiA8RGVmYXVsdEV2ZW50Q29udGVudCAvPn1cblx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgRHJhZ2dhYmxlRXZlbnQgPSBtZW1vKFxuXHREcmFnZ2FibGVFdmVudFVubWVtb2l6ZWQsXG5cdChwcmV2UHJvcHMsIG5leHRQcm9wcykgPT4ge1xuXHRcdC8vIENvbXBhcmUgdGhlIGVzc2VudGlhbCBwcm9wcyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcblx0XHRyZXR1cm4gKFxuXHRcdFx0cHJldlByb3BzLmVsZW1lbnRJZCA9PT0gbmV4dFByb3BzLmVsZW1lbnRJZCAmJlxuXHRcdFx0cHJldlByb3BzLmRpc2FibGVEcmFnID09PSBuZXh0UHJvcHMuZGlzYWJsZURyYWcgJiZcblx0XHRcdHByZXZQcm9wcy5jbGFzc05hbWUgPT09IG5leHRQcm9wcy5jbGFzc05hbWUgJiZcblx0XHRcdHByZXZQcm9wcy5ldmVudCA9PT0gbmV4dFByb3BzLmV2ZW50XG5cdFx0KVxuXHR9XG4pXG4iLAogICAgIi8vIG94bGludC1kaXNhYmxlIG5vLW5lZ2F0ZWQtY29uZGl0aW9uXG5cbmltcG9ydCB7IHVzZURyb3BwYWJsZSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgRElTQUJMRURfQ0VMTF9DTEFTU05BTUUgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgRHJvcHBhYmxlQ2VsbFByb3BzIHtcblx0aWQ6IHN0cmluZ1xuXHR0eXBlOiAnZGF5LWNlbGwnIHwgJ3RpbWUtY2VsbCdcblx0ZGF0ZTogZGF5anMuRGF5anNcblx0aG91cj86IG51bWJlclxuXHRtaW51dGU/OiBudW1iZXJcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRhbGxEYXk/OiBib29sZWFuXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xuXHRkaXNhYmxlZD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERyb3BwYWJsZUNlbGwoe1xuXHRpZCxcblx0dHlwZSxcblx0ZGF0ZSxcblx0aG91cixcblx0bWludXRlLFxuXHRyZXNvdXJjZUlkLFxuXHRhbGxEYXksXG5cdGNoaWxkcmVuLFxuXHRjbGFzc05hbWUsXG5cdHN0eWxlLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxuXHRkaXNhYmxlZCA9IGZhbHNlLFxufTogRHJvcHBhYmxlQ2VsbFByb3BzKSB7XG5cdGNvbnN0IHsgb25DZWxsQ2xpY2ssIGRpc2FibGVEcmFnQW5kRHJvcCwgZGlzYWJsZUNlbGxDbGljaywgY2xhc3Nlc092ZXJyaWRlIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChzdGF0ZSkgPT4gKHtcblx0XHRcdG9uQ2VsbENsaWNrOiBzdGF0ZS5vbkNlbGxDbGljayxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcDogc3RhdGUuZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljazogc3RhdGUuZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGNsYXNzZXNPdmVycmlkZTogc3RhdGUuY2xhc3Nlc092ZXJyaWRlLFxuXHRcdH0pKVxuXG5cdGNvbnN0IHsgaXNPdmVyLCBzZXROb2RlUmVmIH0gPSB1c2VEcm9wcGFibGUoe1xuXHRcdGlkLFxuXHRcdGRhdGE6IHtcblx0XHRcdHR5cGUsXG5cdFx0XHRkYXRlLFxuXHRcdFx0aG91cixcblx0XHRcdG1pbnV0ZSxcblx0XHRcdHJlc291cmNlSWQsXG5cdFx0XHRhbGxEYXksXG5cdFx0fSxcblx0XHRkaXNhYmxlZDogZGlzYWJsZURyYWdBbmREcm9wIHx8IGRpc2FibGVkLFxuXHR9KVxuXG5cdGNvbnN0IGhhbmRsZUNlbGxDbGljayA9IChlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXG5cdFx0aWYgKGRpc2FibGVDZWxsQ2xpY2sgfHwgZGlzYWJsZWQpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGNvbnN0IHN0YXJ0ID0gZGF0ZS5ob3VyKGhvdXIgPz8gMCkubWludXRlKG1pbnV0ZSA/PyAwKVxuXHRcdGxldCBlbmQgPSBzdGFydC5jbG9uZSgpXG5cdFx0aWYgKGhvdXIgIT09IHVuZGVmaW5lZCAmJiBtaW51dGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZW5kID0gZW5kLmhvdXIoaG91cikubWludXRlKG1pbnV0ZSArIDE1KSAvLyBkYXkgdmlldyB0aW1lIHNsb3RzIGFyZSAxNSBtaW51dGVzXG5cdFx0fSBlbHNlIGlmIChob3VyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGVuZCA9IGVuZC5ob3VyKGhvdXIgKyAxKS5taW51dGUoMCkgLy8gd2VlayB2aWV3IHRpbWUgc2xvdHMgYXJlIDEgaG91clxuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbmQgPSBlbmQuaG91cigyMykubWludXRlKDU5KSAvLyBtb250aCB2aWV3IGZ1bGwgZGF5XG5cdFx0fVxuXG5cdFx0b25DZWxsQ2xpY2soeyBzdGFydCwgZW5kLCByZXNvdXJjZUlkLCBhbGxEYXkgfSlcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0Ly8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHNcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZHJvcHBhYmxlLWNlbGwnLFxuXHRcdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRcdGlzT3ZlciAmJiAhZGlzYWJsZURyYWdBbmREcm9wICYmICFkaXNhYmxlZCAmJiAnYmctYWNjZW50Jyxcblx0XHRcdFx0ZGlzYWJsZUNlbGxDbGljayB8fCBkaXNhYmxlZCA/ICdjdXJzb3ItZGVmYXVsdCcgOiAnY3Vyc29yLXBvaW50ZXInLFxuXHRcdFx0XHRkaXNhYmxlZCAmJiAoY2xhc3Nlc092ZXJyaWRlPy5kaXNhYmxlZENlbGwgfHwgRElTQUJMRURfQ0VMTF9DTEFTU05BTUUpXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG5cdFx0XHRvbkNsaWNrPXtoYW5kbGVDZWxsQ2xpY2t9XG5cdFx0XHRyZWY9e3NldE5vZGVSZWZ9XG5cdFx0XHRzdHlsZT17c3R5bGV9XG5cdFx0PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgUmVzb3VyY2VDZWxsUHJvcHMge1xuXHRyZXNvdXJjZTogUmVzb3VyY2Vcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlQ2VsbDogUmVhY3QuRkM8UmVzb3VyY2VDZWxsUHJvcHM+ID0gKHtcblx0cmVzb3VyY2UsXG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG59KSA9PiB7XG5cdGNvbnN0IHsgcmVuZGVyUmVzb3VyY2UgfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG5cdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRjb2xvcjogcmVzb3VyY2UuY29sb3IsXG5cdFx0XHRcdGJhY2tncm91bmRDb2xvcjogcmVzb3VyY2UuYmFja2dyb3VuZENvbG9yLFxuXHRcdFx0fX1cblx0XHQ+XG5cdFx0XHR7cmVuZGVyUmVzb3VyY2Vcblx0XHRcdFx0PyByZW5kZXJSZXNvdXJjZShyZXNvdXJjZSlcblx0XHRcdFx0OiAoY2hpbGRyZW4gPz8gKFxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRydW5jYXRlXCI+e3Jlc291cmNlLnRpdGxlfTwvZGl2PlxuXHRcdFx0XHRcdCkpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgeyB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWRXZWVrRXZlbnRzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBFVkVOVF9CQVJfSEVJR0hUIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJQcm9wcyB7XG5cdGRheXM6IGRheWpzLkRheWpzW11cblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdGFsbERheT86IGJvb2xlYW5cbn1cblxuY29uc3QgTm9NZW1vSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllcjogUmVhY3QuRkM8XG5cdEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJQcm9wc1xuPiA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHJlc291cmNlSWQsXG5cdGRheU51bWJlckhlaWdodCxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcblx0YWxsRGF5LFxufSkgPT4ge1xuXHRjb25zdCB3ZWVrU3RhcnQgPSBkYXlzLmF0KDApLnN0YXJ0T2YoJ2RheScpXG5cblx0Y29uc3QgcHJvY2Vzc2VkV2Vla0V2ZW50cyA9IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMoe1xuXHRcdGRheXMsXG5cdFx0Z3JpZFR5cGUsXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRkYXlOdW1iZXJIZWlnaHQsXG5cdFx0YWxsRGF5LFxuXHR9KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBwb2ludGVyLWV2ZW50cy1ub25lIHotMTAgb3ZlcmZsb3ctY2xpcFwiXG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHQ+XG5cdFx0XHR7cHJvY2Vzc2VkV2Vla0V2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50S2V5ID0gYCR7ZXZlbnQuaWR9LSR7ZXZlbnQucG9zaXRpb259LSR7d2Vla1N0YXJ0LnRvSVNPU3RyaW5nKCl9LSR7cmVzb3VyY2VJZCA/PyAnbm8tcmVzb3VyY2UnfWBcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImFic29sdXRlIHotMTAgcG9pbnRlci1ldmVudHMtYXV0byBvdmVyZmxvdy1jbGlwXCJcblx0XHRcdFx0XHRcdGRhdGEtbGVmdD17ZXZlbnQubGVmdH1cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgaG9yaXpvbnRhbC1ldmVudC0ke2V2ZW50LmlkfWB9XG5cdFx0XHRcdFx0XHRkYXRhLXRvcD17ZXZlbnQudG9wfVxuXHRcdFx0XHRcdFx0ZGF0YS13aWR0aD17ZXZlbnQud2lkdGh9XG5cdFx0XHRcdFx0XHRrZXk9e2Ake2V2ZW50S2V5fS13cmFwcGVyYH1cblx0XHRcdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0XHRcdGxlZnQ6IGBjYWxjKCR7ZXZlbnQubGVmdH0lICsgdmFyKC0tc3BhY2luZykgKiAwLjI1KWAsXG5cdFx0XHRcdFx0XHRcdHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDEpYCxcblx0XHRcdFx0XHRcdFx0dG9wOiBgJHtldmVudC50b3B9cHhgLFxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IGAke0VWRU5UX0JBUl9IRUlHSFR9cHhgLFxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8RHJhZ2dhYmxlRXZlbnRcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC1mdWxsIHctZnVsbCBzaGFkb3dcIlxuXHRcdFx0XHRcdFx0XHRlbGVtZW50SWQ9e2V2ZW50S2V5fVxuXHRcdFx0XHRcdFx0XHRldmVudD17ZXZlbnR9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllciA9IG1lbW8oTm9NZW1vSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllcilcbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBnZXRQb3NpdGlvbmVkRXZlbnRzIH0gZnJvbSAnQC9saWIvdXRpbHMvcG9zaXRpb24td2Vlay1ldmVudHMnXG5cbmludGVyZmFjZSBVc2VQcm9jZXNzZWRXZWVrRXZlbnRzUHJvcHMge1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdXG5cdGFsbERheT86IGJvb2xlYW5cblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xufVxuXG5leHBvcnQgY29uc3QgdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGFsbERheSxcblx0ZGF5TnVtYmVySGVpZ2h0LFxuXHRyZXNvdXJjZUlkLFxuXHRncmlkVHlwZSxcbn06IFVzZVByb2Nlc3NlZFdlZWtFdmVudHNQcm9wcykgPT4ge1xuXHRjb25zdCB7XG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGRheU1heEV2ZW50cyxcblx0XHRldmVudFNwYWNpbmcsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoc3RhdGUpID0+ICh7XG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiBzdGF0ZS5nZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0ZGF5TWF4RXZlbnRzOiBzdGF0ZS5kYXlNYXhFdmVudHMsXG5cdFx0ZXZlbnRTcGFjaW5nOiBzdGF0ZS5ldmVudFNwYWNpbmcsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2U6IHN0YXRlLmdldEV2ZW50c0ZvclJlc291cmNlLFxuXHR9KSlcblxuXHRjb25zdCB3ZWVrU3RhcnQgPSBkYXlzLmF0KDApLnN0YXJ0T2YoJ2RheScpXG5cdGNvbnN0IHdlZWtFbmQgPSBkYXlzLmF0KC0xKS5lbmRPZignZGF5JylcblxuXHRjb25zdCBldmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRsZXQgd2Vla0V2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZSh3ZWVrU3RhcnQsIHdlZWtFbmQpXG5cdFx0aWYgKHJlc291cmNlSWQpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlRXZlbnRzID0gZ2V0RXZlbnRzRm9yUmVzb3VyY2UocmVzb3VyY2VJZClcblx0XHRcdHdlZWtFdmVudHMgPSB3ZWVrRXZlbnRzLmZpbHRlcigoZXZlbnQpID0+XG5cdFx0XHRcdHJlc291cmNlRXZlbnRzLnNvbWUoKGUpID0+IFN0cmluZyhlLmlkKSA9PT0gU3RyaW5nKGV2ZW50LmlkKSlcblx0XHRcdClcblx0XHR9XG5cblx0XHRpZiAoYWxsRGF5KSB7XG5cdFx0XHR3ZWVrRXZlbnRzID0gd2Vla0V2ZW50cy5maWx0ZXIoKGUpID0+ICEhZS5hbGxEYXkgPT09IGFsbERheSlcblx0XHR9XG5cblx0XHRyZXR1cm4gd2Vla0V2ZW50c1xuXHR9LCBbXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdHdlZWtTdGFydCxcblx0XHR3ZWVrRW5kLFxuXHRcdHJlc291cmNlSWQsXG5cdFx0YWxsRGF5LFxuXHRdKVxuXG5cdC8vIEdldCBhbGwgZXZlbnRzIHRoYXQgaW50ZXJzZWN0IHdpdGggdGhpcyB3ZWVrXG5cdGNvbnN0IHBvc2l0aW9uZWRFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRyZXR1cm4gZ2V0UG9zaXRpb25lZEV2ZW50cyh7XG5cdFx0XHRkYXlzLFxuXHRcdFx0ZXZlbnRzLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZGF5TnVtYmVySGVpZ2h0LFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0Z3JpZFR5cGUsXG5cdFx0fSlcblx0fSwgW2RheXMsIGRheU1heEV2ZW50cywgZGF5TnVtYmVySGVpZ2h0LCBldmVudFNwYWNpbmcsIGV2ZW50cywgZ3JpZFR5cGVdKVxuXG5cdHJldHVybiBwb3NpdGlvbmVkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7XG5cdERBWV9OVU1CRVJfSEVJR0hULFxuXHRFVkVOVF9CQVJfSEVJR0hULFxuXHRHQVBfQkVUV0VFTl9FTEVNRU5UUyxcbn0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuXG5pbnRlcmZhY2UgUG9zaXRpb25lZEV2ZW50IGV4dGVuZHMgQ2FsZW5kYXJFdmVudCB7XG5cdGxlZnQ6IG51bWJlciAvLyBMZWZ0IHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0d2lkdGg6IG51bWJlciAvLyBXaWR0aCBpbiBwZXJjZW50YWdlXG5cdHRvcDogbnVtYmVyIC8vIFRvcCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdGhlaWdodDogbnVtYmVyIC8vIEhlaWdodCBpbiBwZXJjZW50YWdlXG5cdHBvc2l0aW9uOiBudW1iZXIgLy8gUG9zaXRpb24gaW4gdGhlIHJvdyAoMCBmb3IgZmlyc3QsIDEgZm9yIHNlY29uZCwgZXRjLilcblx0aXNUcnVuY2F0ZWRTdGFydDogYm9vbGVhbiAvLyBXaGV0aGVyIHRoZSBldmVudCBpcyB0cnVuY2F0ZWQgYXQgdGhlIHN0YXJ0XG5cdGlzVHJ1bmNhdGVkRW5kOiBib29sZWFuIC8vIFdoZXRoZXIgdGhlIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgZW5kXG59XG5cbmludGVyZmFjZSBHZXRQb3NpdGlvbmVkRXZlbnRzUHJvcHMge1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInIC8vIEZ1dHVyZSB1c2UgZm9yIGRpZmZlcmVudCBncmlkIHR5cGVzXG5cdGV2ZW50U3BhY2luZz86IG51bWJlciAvLyBDdXN0b20gdmVydGljYWwgc3BhY2luZyBiZXR3ZWVuIGV2ZW50cyAoZGVmYXVsdHMgdG8gR0FQX0JFVFdFRU5fRUxFTUVOVFMpXG59XG5cbmV4cG9ydCBjb25zdCBnZXRQb3NpdGlvbmVkRXZlbnRzID0gKHtcblx0ZGF5cyxcblx0ZXZlbnRzLFxuXHRkYXlNYXhFdmVudHMsXG5cdGRheU51bWJlckhlaWdodCA9IERBWV9OVU1CRVJfSEVJR0hULFxuXHRncmlkVHlwZSA9ICdkYXknLFxuXHRldmVudFNwYWNpbmcgPSBHQVBfQkVUV0VFTl9FTEVNRU5UUyxcbn06IEdldFBvc2l0aW9uZWRFdmVudHNQcm9wcykgPT4ge1xuXHQvLyBGb3IgaG91ci1iYXNlZCBncmlkcywgdXNlIGFjdHVhbCBmaXJzdC9sYXN0IGhvdXJzIGZyb20gZGF5cyBhcnJheVxuXHQvLyBGb3IgZGF5LWJhc2VkIGdyaWRzLCB1c2Ugc3RhcnQvZW5kIG9mIGRheSB0byBjYXB0dXJlIGFsbCBldmVudHNcblx0Y29uc3QgZmlyc3REYXkgPVxuXHRcdGdyaWRUeXBlID09PSAnaG91cicgPyBkYXlzLmF0KDApLnN0YXJ0T2YoJ2hvdXInKSA6IGRheXMuYXQoMCkuc3RhcnRPZignZGF5Jylcblx0Y29uc3QgbGFzdERheSA9XG5cdFx0Z3JpZFR5cGUgPT09ICdob3VyJyA/IGRheXMuYXQoLTEpLmVuZE9mKCdob3VyJykgOiBkYXlzLmF0KC0xKS5lbmRPZignZGF5Jylcblx0Y29uc3QgZGF5Q291bnQgPSBkYXlzLmxlbmd0aFxuXG5cdC8vIFNlcGFyYXRlIG11bHRpLWRheSBhbmQgc2luZ2xlLWRheSBldmVudHNcblx0Y29uc3QgbXVsdGlEYXlFdmVudHMgPSBldmVudHMuZmlsdGVyKChlKSA9PiBlLmVuZC5kaWZmKGUuc3RhcnQsIGdyaWRUeXBlKSA+IDApXG5cdGNvbnN0IHNpbmdsZURheUV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoXG5cdFx0KGUpID0+IGUuZW5kLmRpZmYoZS5zdGFydCwgZ3JpZFR5cGUpID09PSAwXG5cdClcblxuXHQvLyBTb3J0IG11bHRpLWRheSBldmVudHMgYnkgc3RhcnQgZGF0ZSwgdGhlbiBieSBkdXJhdGlvblxuXHRjb25zdCBzb3J0ZWRNdWx0aURheSA9IFsuLi5tdWx0aURheUV2ZW50c10uc29ydCgoYSwgYikgPT4ge1xuXHRcdGNvbnN0IHN0YXJ0RGlmZiA9IGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuXHRcdGlmIChzdGFydERpZmYgIT09IDApIHtcblx0XHRcdHJldHVybiBzdGFydERpZmZcblx0XHR9XG5cdFx0cmV0dXJuIGIuZW5kLmRpZmYoYi5zdGFydCkgLSBhLmVuZC5kaWZmKGEuc3RhcnQpIC8vIExvbmdlciBldmVudHMgZmlyc3Rcblx0fSlcblxuXHQvLyBTb3J0IHNpbmdsZS1kYXkgZXZlbnRzIGJ5IHN0YXJ0IHRpbWVcblx0Y29uc3Qgc29ydGVkU2luZ2xlRGF5ID0gWy4uLnNpbmdsZURheUV2ZW50c10uc29ydCgoYSwgYikgPT5cblx0XHRhLnN0YXJ0LmRpZmYoYi5zdGFydClcblx0KVxuXG5cdC8vIENyZWF0ZSBkYXlDb3VudCB4IGRheU1heEV2ZW50cyBncmlkIHdpdGggZmxhZ3Ncblx0Y29uc3QgZ3JpZDogeyB0YWtlbjogYm9vbGVhbjsgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsIH1bXVtdID0gW11cblx0Zm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuXHRcdGdyaWRbcm93XSA9IFtdXG5cdFx0Zm9yIChsZXQgY29sID0gMDsgY29sIDwgZGF5Q291bnQ7IGNvbCsrKSB7XG5cdFx0XHRncmlkW3Jvd11bY29sXSA9IHsgdGFrZW46IGZhbHNlLCBldmVudDogbnVsbCB9XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgcHJvY2Vzc2VkRXZlbnRzOiBQb3NpdGlvbmVkRXZlbnRbXSA9IFtdXG5cblx0Ly8gU3RlcCAxOiBBc3NpZ24gcG9zaXRpb25zIHRvIG11bHRpLWRheSBldmVudHMgZmlyc3Rcblx0Zm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRNdWx0aURheSkge1xuXHRcdGNvbnN0IGV2ZW50U3RhcnQgPSBkYXlqcy5tYXgoZXZlbnQuc3RhcnQuc3RhcnRPZihncmlkVHlwZSksIGZpcnN0RGF5KVxuXHRcdGNvbnN0IGFkanVzdGVkRW5kID1cblx0XHRcdGdyaWRUeXBlID09PSAnaG91cicgPyBldmVudC5lbmQuc3VidHJhY3QoMSwgJ21pbnV0ZScpIDogZXZlbnQuZW5kXG5cdFx0Y29uc3QgZXZlbnRFbmQgPSBkYXlqcy5taW4oYWRqdXN0ZWRFbmQuc3RhcnRPZihncmlkVHlwZSksIGxhc3REYXkpXG5cdFx0Y29uc3Qgc3RhcnRDb2wgPSBNYXRoLm1heCgwLCBldmVudFN0YXJ0LmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblx0XHRjb25zdCBlbmRDb2wgPSBNYXRoLm1pbihkYXlDb3VudCAtIDEsIGV2ZW50RW5kLmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblxuXHRcdC8vIERldGVjdCBpZiBldmVudCBpcyB0cnVuY2F0ZWQgYXQgdGhlIGJvdW5kYXJpZXNcblx0XHRjb25zdCBpc1RydW5jYXRlZFN0YXJ0ID0gZXZlbnQuc3RhcnQuc3RhcnRPZihncmlkVHlwZSkuaXNCZWZvcmUoZmlyc3REYXkpXG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRFbmQgPSBldmVudC5lbmQuc3RhcnRPZihncmlkVHlwZSkuaXNBZnRlcihsYXN0RGF5KVxuXG5cdFx0Ly8gVHJ5IHRvIHBsYWNlIHRoZSBldmVudCBzdGFydGluZyBmcm9tIGl0cyBvcmlnaW5hbCBzdGFydCBjb2x1bW5cblx0XHRsZXQgcGxhY2VkU3VjY2Vzc2Z1bGx5ID0gZmFsc2VcblxuXHRcdC8vIEZpcnN0IHRyeTogcGxhY2UgZnJvbSBvcmlnaW5hbCBzdGFydCBwb3NpdGlvblxuXHRcdGxldCBhc3NpZ25lZFJvdyA9IC0xXG5cdFx0Zm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuXHRcdFx0bGV0IGNhblBsYWNlID0gdHJ1ZVxuXHRcdFx0Zm9yIChsZXQgY29sID0gc3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG5cdFx0XHRcdGlmIChncmlkW3Jvd11bY29sXS50YWtlbikge1xuXHRcdFx0XHRcdGNhblBsYWNlID0gZmFsc2Vcblx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoY2FuUGxhY2UpIHtcblx0XHRcdFx0YXNzaWduZWRSb3cgPSByb3dcblx0XHRcdFx0YnJlYWtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBmb3VuZCBhIHJvdywgYXNzaWduIHRoZSBldmVudCB0byBhbGwgaXRzIGNvbHVtbnNcblx0XHRpZiAoYXNzaWduZWRSb3cgIT09IC0xKSB7XG5cdFx0XHRmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdFx0Z3JpZFthc3NpZ25lZFJvd11bY29sXSA9IHsgdGFrZW46IHRydWUsIGV2ZW50IH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQ3JlYXRlIHBvc2l0aW9uIGRhdGEgZm9yIHJlbmRlcmluZ1xuXHRcdFx0Y29uc3Qgc3BhbkRheXMgPSBlbmRDb2wgLSBzdGFydENvbCArIDFcblx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcblx0XHRcdFx0bGVmdDogKHN0YXJ0Q29sIC8gZGF5Q291bnQpICogMTAwLFxuXHRcdFx0XHR3aWR0aDogKHNwYW5EYXlzIC8gZGF5Q291bnQpICogMTAwLFxuXHRcdFx0XHR0b3A6XG5cdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0ICtcblx0XHRcdFx0XHRldmVudFNwYWNpbmcgK1xuXHRcdFx0XHRcdGFzc2lnbmVkUm93ICogKEVWRU5UX0JBUl9IRUlHSFQgKyBldmVudFNwYWNpbmcpLFxuXHRcdFx0XHRoZWlnaHQ6IEVWRU5UX0JBUl9IRUlHSFQsXG5cdFx0XHRcdHBvc2l0aW9uOiBhc3NpZ25lZFJvdyxcblx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdGlzVHJ1bmNhdGVkU3RhcnQsXG5cdFx0XHRcdGlzVHJ1bmNhdGVkRW5kLFxuXHRcdFx0fSBhcyBQb3NpdGlvbmVkRXZlbnQpXG5cdFx0XHRwbGFjZWRTdWNjZXNzZnVsbHkgPSB0cnVlXG5cdFx0fVxuXG5cdFx0Ly8gSWYgY291bGRuJ3QgcGxhY2UgYXQgb3JpZ2luYWwgcG9zaXRpb24sIHRyeSB0cnVuY2F0ZWQgdmVyc2lvbnMgc3RhcnRpbmcgZnJvbSBsYXRlciBkYXlzXG5cdFx0aWYgKCFwbGFjZWRTdWNjZXNzZnVsbHkpIHtcblx0XHRcdGZvciAoXG5cdFx0XHRcdGxldCB0cnlTdGFydENvbCA9IHN0YXJ0Q29sICsgMTtcblx0XHRcdFx0dHJ5U3RhcnRDb2wgPD0gZW5kQ29sO1xuXHRcdFx0XHR0cnlTdGFydENvbCsrXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gVHJ5IHRvIHBsYWNlIHRoZSB0cnVuY2F0ZWQgZXZlbnQgc3RhcnRpbmcgZnJvbSB0aGlzIGNvbHVtblxuXHRcdFx0XHRsZXQgdHJ1bmNhdGVkQXNzaWduZWRSb3cgPSAtMVxuXHRcdFx0XHRmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG5cdFx0XHRcdFx0bGV0IGNhblBsYWNlID0gdHJ1ZVxuXHRcdFx0XHRcdGZvciAobGV0IGNvbCA9IHRyeVN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuXHRcdFx0XHRcdFx0aWYgKGdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG5cdFx0XHRcdFx0XHRcdGNhblBsYWNlID0gZmFsc2Vcblx0XHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGNhblBsYWNlKSB7XG5cdFx0XHRcdFx0XHR0cnVuY2F0ZWRBc3NpZ25lZFJvdyA9IHJvd1xuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB3ZSBmb3VuZCBhIHJvdyBmb3IgdGhlIHRydW5jYXRlZCB2ZXJzaW9uLCBwbGFjZSBpdFxuXHRcdFx0XHRpZiAodHJ1bmNhdGVkQXNzaWduZWRSb3cgIT09IC0xKSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgY29sID0gdHJ5U3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG5cdFx0XHRcdFx0XHRncmlkW3RydW5jYXRlZEFzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIENyZWF0ZSBwb3NpdGlvbiBkYXRhIGZvciB0aGUgdHJ1bmNhdGVkIHJlbmRlcmluZ1xuXHRcdFx0XHRcdGNvbnN0IHRydW5jYXRlZFNwYW5EYXlzID0gZW5kQ29sIC0gdHJ5U3RhcnRDb2wgKyAxXG5cdFx0XHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuXHRcdFx0XHRcdFx0bGVmdDogKHRyeVN0YXJ0Q29sIC8gZGF5Q291bnQpICogMTAwLFxuXHRcdFx0XHRcdFx0d2lkdGg6ICh0cnVuY2F0ZWRTcGFuRGF5cyAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdFx0XHRcdHRvcDpcblx0XHRcdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0ICtcblx0XHRcdFx0XHRcdFx0ZXZlbnRTcGFjaW5nICtcblx0XHRcdFx0XHRcdFx0dHJ1bmNhdGVkQXNzaWduZWRSb3cgKiAoRVZFTlRfQkFSX0hFSUdIVCArIGV2ZW50U3BhY2luZyksXG5cdFx0XHRcdFx0XHRoZWlnaHQ6IEVWRU5UX0JBUl9IRUlHSFQsXG5cdFx0XHRcdFx0XHRwb3NpdGlvbjogdHJ1bmNhdGVkQXNzaWduZWRSb3csXG5cdFx0XHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0XHRcdGlzVHJ1bmNhdGVkU3RhcnQ6IHRydWUsIC8vIEFsd2F5cyB0cnVuY2F0ZWQgYXQgc3RhcnQgd2hlbiB1c2luZyB0aGlzIGZhbGxiYWNrIGxvZ2ljXG5cdFx0XHRcdFx0XHRpc1RydW5jYXRlZEVuZCxcblx0XHRcdFx0XHR9IGFzIFBvc2l0aW9uZWRFdmVudClcblx0XHRcdFx0XHRwbGFjZWRTdWNjZXNzZnVsbHkgPSB0cnVlXG5cdFx0XHRcdFx0YnJlYWsgLy8gU3VjY2Vzc2Z1bGx5IHBsYWNlZCwgc3RvcCB0cnlpbmcgb3RoZXIgc3RhcnQgcG9zaXRpb25zXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTdGVwIDI6IEZpbGwgZ2FwcyB3aXRoIHNpbmdsZS1kYXkgZXZlbnRzXG5cdGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkU2luZ2xlRGF5KSB7XG5cdFx0Y29uc3QgZXZlbnRTdGFydCA9IGRheWpzLm1heChldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKSwgZmlyc3REYXkpXG5cdFx0Ly8gQ2xhbXAgY29sIHRvIHZhbGlkIGdyaWQgYm91bmRzIHRvIHByZXZlbnQgYWNjZXNzaW5nIHVuZGVmaW5lZCBncmlkIHBvc2l0aW9uc1xuXHRcdGNvbnN0IGNvbCA9IE1hdGgubWF4KFxuXHRcdFx0MCxcblx0XHRcdE1hdGgubWluKGRheUNvdW50IC0gMSwgZXZlbnRTdGFydC5kaWZmKGZpcnN0RGF5LCBncmlkVHlwZSkpXG5cdFx0KVxuXG5cdFx0Ly8gU2luZ2xlLWRheSBldmVudHMgYXJlIG5vdCB0cnVuY2F0ZWQgYnkgZGVmaW5pdGlvblxuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBmYWxzZVxuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkRW5kID0gZmFsc2VcblxuXHRcdC8vIEZpbmQgdGhlIGZpcnN0IGF2YWlsYWJsZSByb3cgaW4gdGhpcyBjb2x1bW5cblx0XHRsZXQgYXNzaWduZWRSb3cgPSAtMVxuXHRcdGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGRheU1heEV2ZW50czsgcm93KyspIHtcblx0XHRcdGlmICghZ3JpZFtyb3ddW2NvbF0udGFrZW4pIHtcblx0XHRcdFx0YXNzaWduZWRSb3cgPSByb3dcblx0XHRcdFx0YnJlYWtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBmb3VuZCBhIHJvdywgYXNzaWduIHRoZSBldmVudFxuXHRcdGlmIChhc3NpZ25lZFJvdyAhPT0gLTEpIHtcblx0XHRcdGdyaWRbYXNzaWduZWRSb3ddW2NvbF0gPSB7IHRha2VuOiB0cnVlLCBldmVudCB9XG5cblx0XHRcdC8vIENyZWF0ZSBwb3NpdGlvbiBkYXRhIGZvciByZW5kZXJpbmdcblx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcblx0XHRcdFx0bGVmdDogKGNvbCAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdFx0d2lkdGg6ICgxIC8gZGF5Q291bnQpICogMTAwLFxuXHRcdFx0XHR0b3A6XG5cdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0ICtcblx0XHRcdFx0XHRldmVudFNwYWNpbmcgK1xuXHRcdFx0XHRcdGFzc2lnbmVkUm93ICogKEVWRU5UX0JBUl9IRUlHSFQgKyBldmVudFNwYWNpbmcpLFxuXHRcdFx0XHRoZWlnaHQ6IEVWRU5UX0JBUl9IRUlHSFQsXG5cdFx0XHRcdHBvc2l0aW9uOiBhc3NpZ25lZFJvdyxcblx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdGlzVHJ1bmNhdGVkU3RhcnQsXG5cdFx0XHRcdGlzVHJ1bmNhdGVkRW5kLFxuXHRcdFx0fSBhcyBQb3NpdGlvbmVkRXZlbnQpXG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHByb2Nlc3NlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgQWxsRGF5Q2VsbFByb3BzIHtcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IE5vTWVtb0FsbERheUNlbGw6IFJlYWN0LkZDPEFsbERheUNlbGxQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuXHRjb25zdCB7IHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChzdGF0ZSkgPT4gKHsgdDogc3RhdGUudCB9KSlcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQndy0xNiBib3JkZXItciBzaHJpbmstMCBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBzbTp0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHR7dCgnYWxsRGF5Jyl9XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEFsbERheUNlbGwgPSBtZW1vKE5vTWVtb0FsbERheUNlbGwpXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBHcmlkQ2VsbCB9IGZyb20gJy4uL2dyaWQtY2VsbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyIH0gZnJvbSAnLi92ZXJ0aWNhbC1ncmlkLWV2ZW50cy1sYXllcidcblxuZXhwb3J0IGludGVyZmFjZSBWZXJ0aWNhbEdyaWRDb2xQcm9wcyB7XG5cdGlkOiBzdHJpbmdcblx0ZGF5OiBkYXlqcy5EYXlqc1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdHJlc291cmNlPzogUmVzb3VyY2Vcblx0ZGF5czogZGF5anMuRGF5anNbXSAvLyBUaGUgc3BlY2lmaWMgZGF5IHRoaXMgY29sdW1uIHJlcHJlc2VudHNcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRyZW5kZXJIZWFkZXI/OiAoKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0cmVuZGVyQ2VsbD86IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdG5vRXZlbnRzPzogYm9vbGVhblxuXHQvKiogT3B0aW9uYWwgYXJyYXkgb2YgbWludXRlIHNsb3RzIGJ5IHdoaWNoIHRoZSBob3VyIGlzIGRpdmlkZWRcblx0ICogZS5nLiwgWzAsIDE1LCAzMCwgNDVdIGZvciBxdWFydGVyLWhvdXIgc2xvdHNcblx0ICovXG5cdGNlbGxTbG90cz86IG51bWJlcltdXG5cdC8qKiBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgY29sdW1uIGluIHRoZSBncmlkICovXG5cdGlzTGFzdENvbHVtbj86IGJvb2xlYW5cbn1cblxuY29uc3QgTm9NZW1vVmVydGljYWxHcmlkQ29sOiBSZWFjdC5GQzxWZXJ0aWNhbEdyaWRDb2xQcm9wcz4gPSAoe1xuXHRpZCxcblx0ZGF5cyxcblx0cmVzb3VyY2VJZCxcblx0cmVzb3VyY2UsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG5cdGdyaWRUeXBlLFxuXHRjbGFzc05hbWUsXG5cdHJlbmRlckNlbGwsXG5cdG5vRXZlbnRzLFxuXHRjZWxsU2xvdHMgPSBbNjBdLCAvLyBEZWZhdWx0IHRvIGZ1bGwgaG91ciBzbG90c1xuXHRpc0xhc3RDb2x1bW4sXG59KSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggZmxleC1jb2wgZmxleC0xIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtaW4tdy01MCBiZy1iYWNrZ3JvdW5kIHJlbGF0aXZlJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWQgfHwgYHZlcnRpY2FsLWNvbC0ke2lkfWB9XG5cdFx0PlxuXHRcdFx0ey8qIFRpbWUgc2xvdHMgKi99XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCByZWxhdGl2ZSBncmlkXCJcblx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRncmlkVGVtcGxhdGVSb3dzOiBgcmVwZWF0KCR7ZGF5cy5sZW5ndGh9LCBtaW5tYXgoMCwgMWZyKSlgLFxuXHRcdFx0XHR9fVxuXHRcdFx0PlxuXHRcdFx0XHR7ZGF5cy5tYXAoKGRheSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGhvdXJTdHIgPSBkYXkuZm9ybWF0KCdISCcpXG5cdFx0XHRcdFx0Y29uc3QgZGF0ZVN0ciA9IGRheS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXG5cdFx0XHRcdFx0aWYgKHJlbmRlckNlbGwpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHRlc3RJZCA9XG5cdFx0XHRcdFx0XHRcdGlkID09PSAndGltZS1jb2wnXG5cdFx0XHRcdFx0XHRcdFx0PyBgdmVydGljYWwtdGltZS0ke2hvdXJTdHJ9YFxuXHRcdFx0XHRcdFx0XHRcdDogYHZlcnRpY2FsLWNlbGwtJHtkYXRlU3RyfS0ke2hvdXJTdHJ9LTAwJHtyZXNvdXJjZUlkID8gYC0ke3Jlc291cmNlSWR9YCA6ICcnfWBcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLVs2MHB4XSBib3JkZXItYiBib3JkZXItclwiXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e3Rlc3RJZH1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2Ake2RhdGVTdHJ9LSR7aG91clN0cn1gfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e3JlbmRlckNlbGwoZGF5KX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGNlbGxTbG90cy5tYXAoKG1pbnV0ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgbSA9IG1pbnV0ZSA9PT0gNjAgPyB1bmRlZmluZWQgOiBtaW51dGVcblx0XHRcdFx0XHRcdGNvbnN0IG1tID0gbSA9PT0gdW5kZWZpbmVkID8gJzAwJyA6IFN0cmluZyhtKS5wYWRTdGFydCgyLCAnMCcpXG5cdFx0XHRcdFx0XHRjb25zdCB0ZXN0SWQgPSBgdmVydGljYWwtY2VsbC0ke2RhdGVTdHJ9LSR7aG91clN0cn0tJHttbX0ke3Jlc291cmNlSWQgPyBgLSR7cmVzb3VyY2VJZH1gIDogJyd9YFxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J2hvdmVyOmJnLWFjY2VudCByZWxhdGl2ZSB6LTEwIGgtWzYwcHhdIGN1cnNvci1wb2ludGVyIGJvcmRlci1iJyxcblx0XHRcdFx0XHRcdFx0XHRcdG1pbnV0ZSA9PT0gNjAgPyAnJyA6ICdib3JkZXItZGFzaGVkIGgtWzE1cHhdIG1pbi1oLVsxNXB4XScsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RDb2x1bW4gPyAnYm9yZGVyLXItMCcgOiAnYm9yZGVyLXInXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17dGVzdElkfVxuXHRcdFx0XHRcdFx0XHRcdGRheT17bSA/IGRheS5taW51dGUobSkgOiBkYXl9XG5cdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdGhvdXI9e2RheS5ob3VyKCl9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtkYXRlU3RyfS0ke2hvdXJTdHJ9LSR7bW19LSR7cmVzb3VyY2VJZCB8fCAnbm8tcmVzb3VyY2UnfWB9XG5cdFx0XHRcdFx0XHRcdFx0bWludXRlPXttfVxuXHRcdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlSWR9IC8vIEV2ZW50cyBhcmUgcmVuZGVyZWQgaW4gYSBzZXBhcmF0ZSBsYXllclxuXHRcdFx0XHRcdFx0XHRcdHNob3VsZFJlbmRlckV2ZW50cz17ZmFsc2V9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSl9XG5cblx0XHRcdFx0ey8qIEV2ZW50IGJsb2NrcyBsYXllciAqL31cblx0XHRcdFx0eyFub0V2ZW50cyAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuXHRcdFx0XHRcdFx0PFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgdmVydGljYWwtZXZlbnRzLSR7aWR9YH1cblx0XHRcdFx0XHRcdFx0ZGF5cz17ZGF5c31cblx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlSWR9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsR3JpZENvbCA9IG1lbW8oXG5cdE5vTWVtb1ZlcnRpY2FsR3JpZENvbFxuKSBhcyB0eXBlb2YgTm9NZW1vVmVydGljYWxHcmlkQ29sXG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEN1cnJlbnRUaW1lSW5kaWNhdG9yIH0gZnJvbSAnQC9jb21wb25lbnRzL2N1cnJlbnQtdGltZS1pbmRpY2F0b3InXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHsgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyUHJvcHMge1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdGRheXM6IGRheWpzLkRheWpzW10gLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGxheWVyIHJlcHJlc2VudHNcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRyZXNvdXJjZT86IFJlc291cmNlXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcbn1cblxuY29uc3QgTm9NZW1vVmVydGljYWxHcmlkRXZlbnRzTGF5ZXI6IFJlYWN0LkZDPFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyUHJvcHM+ID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUgPSAnaG91cicsXG5cdHJlc291cmNlSWQsXG5cdHJlc291cmNlLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxufSkgPT4ge1xuXHRjb25zdCB0b2RheUV2ZW50cyA9IHVzZVByb2Nlc3NlZERheUV2ZW50cyh7IGRheXMsIGdyaWRUeXBlLCByZXNvdXJjZUlkIH0pXG5cdGNvbnN0IHJhbmdlU3RhcnQgPSBkYXlzLmF0KDApXG5cdGNvbnN0IHJhbmdlRW5kID0gZGF5cy5hdCgtMSk/LmFkZCgxLCBncmlkVHlwZSlcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGwgcG9pbnRlci1ldmVudHMtbm9uZSB6LTEwIG92ZXJmbG93LWNsaXBcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG5cdFx0PlxuXHRcdFx0e3JhbmdlU3RhcnQgJiYgcmFuZ2VFbmQgJiYgKFxuXHRcdFx0XHQ8Q3VycmVudFRpbWVJbmRpY2F0b3Jcblx0XHRcdFx0XHRyYW5nZUVuZD17cmFuZ2VFbmR9XG5cdFx0XHRcdFx0cmFuZ2VTdGFydD17cmFuZ2VTdGFydH1cblx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdC8+XG5cdFx0XHQpfVxuXHRcdFx0e3RvZGF5RXZlbnRzLm1hcCgoZXZlbnQsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50S2V5ID0gYGV2ZW50LSR7ZXZlbnQuaWR9LSR7aW5kZXh9LSR7ZGF5cy5hdCgwKS50b0lTT1N0cmluZygpfS0ke3Jlc291cmNlSWQgPz8gJ25vLXJlc291cmNlJ31gXG5cdFx0XHRcdGNvbnN0IGlzU2hvcnRFdmVudCA9IGV2ZW50LmVuZC5kaWZmKGV2ZW50LnN0YXJ0LCAnbWludXRlJykgPD0gMTVcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImFic29sdXRlXCJcblx0XHRcdFx0XHRcdGtleT17YCR7ZXZlbnRLZXl9LXdyYXBwZXJgfVxuXHRcdFx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRcdFx0bGVmdDogYCR7ZXZlbnQubGVmdH0lYCxcblx0XHRcdFx0XHRcdFx0d2lkdGg6IGBjYWxjKCR7ZXZlbnQud2lkdGh9JSAtIHZhcigtLXNwYWNpbmcpICogMilgLFxuXHRcdFx0XHRcdFx0XHR0b3A6IGAke2V2ZW50LnRvcH0lYCxcblx0XHRcdFx0XHRcdFx0aGVpZ2h0OiBgJHtldmVudC5oZWlnaHR9JWAsXG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxEcmFnZ2FibGVFdmVudFxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKCdwb2ludGVyLWV2ZW50cy1hdXRvIGFic29sdXRlJywge1xuXHRcdFx0XHRcdFx0XHRcdCdbJl9wXTp0ZXh0LVsxMHB4XSBbJl9wXTptdC0wJzogaXNTaG9ydEV2ZW50LFxuXHRcdFx0XHRcdFx0XHR9KX1cblx0XHRcdFx0XHRcdFx0ZWxlbWVudElkPXtldmVudEtleX1cblx0XHRcdFx0XHRcdFx0ZXZlbnQ9e2V2ZW50fVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyID0gbWVtbyhOb01lbW9WZXJ0aWNhbEdyaWRFdmVudHNMYXllcilcbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmludGVyZmFjZSBDdXJyZW50VGltZUluZGljYXRvclByb3BzIHtcblx0LyoqIFRoZSBzdGFydCBkYXRlL3RpbWUgb2YgdGhlIGNvbnRhaW5lcidzIHRpbWVsaW5lIChlLmcuLCB0b3Agb2YgdGhlIGNvbHVtbikgKi9cblx0cmFuZ2VTdGFydDogZGF5anMuRGF5anNcblx0LyoqIFRoZSBlbmQgZGF0ZS90aW1lIG9mIHRoZSBjb250YWluZXIncyB0aW1lbGluZSAoZS5nLiwgYm90dG9tIG9mIHRoZSBjb2x1bW4pICovXG5cdHJhbmdlRW5kOiBkYXlqcy5EYXlqc1xuXHQvKiogT3B0aW9uYWwgcmVmZXJlbmNlIHRpbWUgZm9yIFwibm93XCIgKHVzZWZ1bCBmb3IgdGVzdGluZykgKi9cblx0bm93PzogZGF5anMuRGF5anNcblx0LyoqIFRoZSByZXNvdXJjZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb2x1bW4gKG9wdGlvbmFsKSAqL1xuXHRyZXNvdXJjZT86IFJlc291cmNlXG59XG5cbi8qKlxuICogUmVuZGVycyBhIGhvcml6b250YWwgcmVkIGxpbmUgaW5kaWNhdGluZyB0aGUgY3VycmVudCB0aW1lIHJlbGF0aXZlIHRvIGEgdmVydGljYWwgY29udGFpbmVyJ3MgdGltZWxpbmUuXG4gKiBUaGUgaW5kaWNhdG9yIGhhbmRsZXMgaXRzIG93biB2aXNpYmlsaXR5IGJhc2VkIG9uIHdoZXRoZXIgJ25vdycgZmFsbHMgd2l0aGluIHRoZSBwcm92aWRlZCByYW5nZS5cbiAqIFN1cHBvcnRzIGN1c3RvbSByZW5kZXJpbmcgdmlhIHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yIGZyb20gY29udGV4dC5cbiAqL1xuY29uc3QgTm9NZW1vQ3VycmVudFRpbWVJbmRpY2F0b3IgPSAoe1xuXHRyYW5nZVN0YXJ0LFxuXHRyYW5nZUVuZCxcblx0bm93OiBwcm9wTm93LFxuXHRyZXNvdXJjZSxcbn06IEN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMpID0+IHtcblx0Ly8gR2V0IHJlbmRlciBmdW5jdGlvbiBhbmQgY3VycmVudCB2aWV3IGZyb20gY29udGV4dFxuXHRjb25zdCB7IHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLCB2aWV3IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dChcblx0XHQoc3RhdGUpID0+ICh7XG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcjogc3RhdGUucmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHR2aWV3OiBzdGF0ZS52aWV3LFxuXHRcdH0pXG5cdClcblxuXHRjb25zdCBub3cgPSBwcm9wTm93ID8/IGRheWpzKClcblxuXHQvLyBDaGVjayBpZiBjdXJyZW50IHRpbWUgZmFsbHMgd2l0aGluIHRoaXMgcmFuZ2Vcblx0Y29uc3QgaXNXaXRoaW5SYW5nZSA9IG5vdy5pc1NhbWVPckFmdGVyKHJhbmdlU3RhcnQpICYmIG5vdy5pc0JlZm9yZShyYW5nZUVuZClcblxuXHRpZiAoIWlzV2l0aGluUmFuZ2UpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cblx0Y29uc3QgdG90YWxEdXJhdGlvbiA9IHJhbmdlRW5kLmRpZmYocmFuZ2VTdGFydCwgJ21pbnV0ZScpXG5cdGNvbnN0IG1pbnV0ZXNGcm9tU3RhcnQgPSBub3cuZGlmZihyYW5nZVN0YXJ0LCAnbWludXRlJylcblx0Y29uc3QgcHJvZ3Jlc3MgPSAobWludXRlc0Zyb21TdGFydCAvIHRvdGFsRHVyYXRpb24pICogMTAwXG5cblx0Ly8gSWYgY3VzdG9tIHJlbmRlciBmdW5jdGlvbiBpcyBwcm92aWRlZCB2aWEgY29udGV4dCwgdXNlIGl0XG5cdGlmIChyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcikge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8PlxuXHRcdFx0XHR7cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3Ioe1xuXHRcdFx0XHRcdGN1cnJlbnRUaW1lOiBub3csXG5cdFx0XHRcdFx0cmFuZ2VTdGFydCxcblx0XHRcdFx0XHRyYW5nZUVuZCxcblx0XHRcdFx0XHRwcm9ncmVzcyxcblx0XHRcdFx0XHRyZXNvdXJjZSxcblx0XHRcdFx0XHR2aWV3LFxuXHRcdFx0XHR9KX1cblx0XHRcdDwvPlxuXHRcdClcblx0fVxuXG5cdC8vIERlZmF1bHQgaW5kaWNhdG9yIHJlbmRlcmluZ1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImFic29sdXRlIGxlZnQtMCByaWdodC0wIGgtMC41IGJnLXJlZC01MDAgei01MCBwb2ludGVyLWV2ZW50cy1ub25lXCJcblx0XHRcdGRhdGEtdGVzdGlkPVwiY3VycmVudC10aW1lLWluZGljYXRvclwiXG5cdFx0XHRzdHlsZT17e1xuXHRcdFx0XHR0b3A6IGAke3Byb2dyZXNzfSVgLFxuXHRcdFx0fX1cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBDdXJyZW50VGltZUluZGljYXRvciA9IG1lbW8oTm9NZW1vQ3VycmVudFRpbWVJbmRpY2F0b3IpXG4iLAogICAgImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHtcblx0Z2V0UG9zaXRpb25lZERheUV2ZW50cyxcblx0dHlwZSBQb3NpdGlvbmVkRXZlbnQsXG59IGZyb20gJ0AvbGliL3V0aWxzL3Bvc2l0aW9uLWRheS1ldmVudHMnXG5cbmludGVyZmFjZSBVc2VQcm9jZXNzZWREYXlFdmVudHNQcm9wcyB7XG5cdGRheXM6IGRheWpzLkRheWpzW10gLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGNvbHVtbiByZXByZXNlbnRzXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUsXG5cdHJlc291cmNlSWQsXG59OiBVc2VQcm9jZXNzZWREYXlFdmVudHNQcm9wcykgPT4ge1xuXHRjb25zdCB7IGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgZ2V0RXZlbnRzRm9yUmVzb3VyY2UgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKHN0YXRlKSA9PiAoe1xuXHRcdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiBzdGF0ZS5nZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZTogc3RhdGUuZ2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0fSkpXG5cdGNvbnN0IGRheVN0YXJ0ID0gZGF5cy5hdCgwKS5zdGFydE9mKCdkYXknKVxuXHRjb25zdCBkYXlFbmQgPSBkYXlzLmF0KC0xKS5lbmRPZignZGF5JylcblxuXHRjb25zdCBldmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRsZXQgZGF5RXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKGRheVN0YXJ0LCBkYXlFbmQpXG5cdFx0aWYgKHJlc291cmNlSWQpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlRXZlbnRzID0gZ2V0RXZlbnRzRm9yUmVzb3VyY2UocmVzb3VyY2VJZClcblx0XHRcdGRheUV2ZW50cyA9IGRheUV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PlxuXHRcdFx0XHRyZXNvdXJjZUV2ZW50cy5zb21lKChyZSkgPT4gU3RyaW5nKHJlLmlkKSA9PT0gU3RyaW5nKGV2ZW50LmlkKSlcblx0XHRcdClcblx0XHR9XG5cblx0XHQvLyBWZXJ0aWNhbCBncmlkcyAoRGF5L1dlZWsvUmVzb3VyY2UgVmVydGljYWwpIG5ldmVyIHJlbmRlciBhbGwtZGF5IGV2ZW50c1xuXHRcdC8vIGFzIHRob3NlIGFyZSBoYW5kbGVkIGJ5IHRoZSBhbGwtZGF5LXJvdyBvciBhcmUgbm90IGFwcHJvcHJpYXRlIGZvciB0aGUgdGltZSBncmlkLlxuXHRcdHJldHVybiBkYXlFdmVudHMuZmlsdGVyKChlKSA9PiAhZS5hbGxEYXkpXG5cdH0sIFtcblx0XHRkYXlTdGFydCxcblx0XHRkYXlFbmQsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdHJlc291cmNlSWQsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdF0pXG5cblx0Y29uc3QgdG9kYXlFdmVudHMgPSB1c2VNZW1vPFBvc2l0aW9uZWRFdmVudFtdPigoKSA9PiB7XG5cdFx0cmV0dXJuIGdldFBvc2l0aW9uZWREYXlFdmVudHMoe1xuXHRcdFx0ZGF5cyxcblx0XHRcdGV2ZW50cyxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdH0pXG5cdH0sIFtkYXlzLCBncmlkVHlwZSwgZXZlbnRzXSlcblxuXHRyZXR1cm4gdG9kYXlFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBvc2l0aW9uZWRFdmVudCBleHRlbmRzIENhbGVuZGFyRXZlbnQge1xuXHRsZWZ0OiBudW1iZXIgLy8gTGVmdCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdHdpZHRoOiBudW1iZXIgLy8gV2lkdGggaW4gcGVyY2VudGFnZVxuXHR0b3A6IG51bWJlciAvLyBUb3AgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuXHRoZWlnaHQ6IG51bWJlciAvLyBIZWlnaHQgaW4gcGVyY2VudGFnZVxuXHR6SW5kZXg/OiBudW1iZXIgLy8gWi1pbmRleCBmb3IgbGF5ZXJpbmcgb3ZlcmxhcHBpbmcgZXZlbnRzXG59XG5cbmludGVyZmFjZSBHZXRQb3NpdGlvbmVkRGF5RXZlbnRzUGFyYW1zIHtcblx0ZGF5czogZGF5anMuRGF5anNbXVxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInIHwgJ21pbnV0ZSdcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbn1cblxuZXhwb3J0IGNvbnN0IGdldFBvc2l0aW9uZWREYXlFdmVudHMgPSAoe1xuXHRkYXlzLFxuXHRncmlkVHlwZSA9ICdob3VyJyxcblx0ZXZlbnRzLFxufTogR2V0UG9zaXRpb25lZERheUV2ZW50c1BhcmFtcyk6IFBvc2l0aW9uZWRFdmVudFtdID0+IHtcblx0Ly8gRmlsdGVyIG91dCBhbGwtZGF5IGV2ZW50cyBhbmQgc29ydCBieSBzdGFydCB0aW1lXG5cdGNvbnN0IHNvcnRlZEV2ZW50cyA9IGV2ZW50c1xuXHRcdC5maWx0ZXIoKGUpID0+ICFlLmFsbERheSlcblx0XHQudG9Tb3J0ZWQoKGEsIGIpID0+IGEuc3RhcnQuZGlmZihiLnN0YXJ0KSlcblxuXHRpZiAoc29ydGVkRXZlbnRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBbXVxuXHR9XG5cblx0Ly8gRGV0ZXJtaW5lIGdyaWQgYm91bmRhcmllcyBhbmQgbWV0cmljc1xuXHQvLyBVc2UgZXhwbGljaXQgc3RhcnRPZiB0byBlbnN1cmUgd2UgYXJlIGFuY2hvcmVkIHRvIHRoZSBncmlkIHVuaXQgYm91bmRhcmllc1xuXHQvLyBUaGlzIHByZXZlbnRzIG9mZnNldHMgaWYgdGhlIGdyaWQgZGF5cyBhcmUgbm90IG5vcm1hbGl6ZWRcblx0Y29uc3QgZ3JpZFN0YXJ0ID0gZGF5cy5hdCgwKSB8fCBkYXlqcygpXG5cdGNvbnN0IHRvdGFsVW5pdHMgPSBkYXlzLmxlbmd0aFxuXHRjb25zdCBpc0Rpc2NyZXRlID0gZ3JpZFR5cGUgPT09ICdkYXknXG5cblx0Ly8gU3RlcCAxOiBHcm91cCBldmVudHMgaW50byBjbHVzdGVycyBvZiBvdmVybGFwcGluZyBldmVudHNcblx0Y29uc3QgY2x1c3RlcnM6IENhbGVuZGFyRXZlbnRbXVtdID0gW11cblx0bGV0IGN1cnJlbnRDbHVzdGVyOiBDYWxlbmRhckV2ZW50W10gPSBbXVxuXHRsZXQgbGFzdEV2ZW50RW5kOiBkYXlqcy5EYXlqcyB8IG51bGwgPSBudWxsXG5cdGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkRXZlbnRzKSB7XG5cdFx0aWYgKGxhc3RFdmVudEVuZCAmJiBldmVudC5zdGFydC5pc1NhbWVPckFmdGVyKGxhc3RFdmVudEVuZCkpIHtcblx0XHRcdGlmIChjdXJyZW50Q2x1c3Rlci5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNsdXN0ZXJzLnB1c2goY3VycmVudENsdXN0ZXIpXG5cdFx0XHR9XG5cdFx0XHRjdXJyZW50Q2x1c3RlciA9IFtdXG5cdFx0fVxuXHRcdGN1cnJlbnRDbHVzdGVyLnB1c2goZXZlbnQpXG5cdFx0bGFzdEV2ZW50RW5kID0gbGFzdEV2ZW50RW5kID8gZGF5anMubWF4KGxhc3RFdmVudEVuZCwgZXZlbnQuZW5kKSA6IGV2ZW50LmVuZFxuXHR9XG5cdGlmIChjdXJyZW50Q2x1c3Rlci5sZW5ndGggPiAwKSB7XG5cdFx0Y2x1c3RlcnMucHVzaChjdXJyZW50Q2x1c3Rlcilcblx0fVxuXG5cdC8vIFN0ZXAgMjogRm9yIGVhY2ggY2x1c3RlciwgdXNlIGEgbW9yZSBpbnRlbGxpZ2VudCBjb2x1bW4gYXNzaWdubWVudFxuXHRjb25zdCBwcm9jZXNzZWRFdmVudHM6IFBvc2l0aW9uZWRFdmVudFtdID0gW11cblx0Zm9yIChjb25zdCBjbHVzdGVyIG9mIGNsdXN0ZXJzKSB7XG5cdFx0aWYgKGNsdXN0ZXIubGVuZ3RoID09PSAxKSB7XG5cdFx0XHQvLyBTaW5nbGUgZXZlbnQgdGFrZXMgZnVsbCB3aWR0aFxuXHRcdFx0Y29uc3QgZXZlbnQgPSBjbHVzdGVyWzBdXG5cblx0XHRcdGxldCBzdGFydFRpbWUgPSBldmVudC5zdGFydC5kaWZmKGdyaWRTdGFydCwgZ3JpZFR5cGUsIHRydWUpXG5cdFx0XHRsZXQgZW5kVGltZSA9IGV2ZW50LmVuZC5kaWZmKGdyaWRTdGFydCwgZ3JpZFR5cGUsIHRydWUpXG5cblx0XHRcdGlmIChpc0Rpc2NyZXRlKSB7XG5cdFx0XHRcdHN0YXJ0VGltZSA9IE1hdGguZmxvb3Ioc3RhcnRUaW1lKVxuXHRcdFx0XHRlbmRUaW1lID0gTWF0aC5jZWlsKGVuZFRpbWUpXG5cdFx0XHRcdC8vIEVuc3VyZSBhdCBsZWFzdCAxIHVuaXQgZHVyYXRpb24gZm9yIGRpc2NyZXRlIGV2ZW50c1xuXHRcdFx0XHRpZiAoZW5kVGltZSA8PSBzdGFydFRpbWUpIHtcblx0XHRcdFx0XHRlbmRUaW1lID0gc3RhcnRUaW1lICsgMVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsYW1wIHRvIGdyaWQgYm91bmRhcmllc1xuXHRcdFx0aWYgKHN0YXJ0VGltZSA8IDApIHN0YXJ0VGltZSA9IDBcblx0XHRcdGlmIChlbmRUaW1lID4gdG90YWxVbml0cykgZW5kVGltZSA9IHRvdGFsVW5pdHNcblxuXHRcdFx0Y29uc3QgdG90YWxEdXJhdGlvbiA9IE1hdGgubWF4KDAsIGVuZFRpbWUgLSBzdGFydFRpbWUpXG5cblx0XHRcdC8vIFNraXAgZXZlbnRzIHRoYXQgYXJlIGNvbXBsZXRlbHkgb3V0c2lkZSB0aGUgZ3JpZFxuXHRcdFx0aWYgKHRvdGFsRHVyYXRpb24gPT09IDApIGNvbnRpbnVlXG5cblx0XHRcdGNvbnN0IHRvcCA9IChzdGFydFRpbWUgLyB0b3RhbFVuaXRzKSAqIDEwMFxuXHRcdFx0Y29uc3QgaGVpZ2h0ID0gKHRvdGFsRHVyYXRpb24gLyB0b3RhbFVuaXRzKSAqIDEwMFxuXG5cdFx0XHRwcm9jZXNzZWRFdmVudHMucHVzaCh7IC4uLmV2ZW50LCBsZWZ0OiAwLCB3aWR0aDogMTAwLCB0b3AsIGhlaWdodCB9KVxuXHRcdFx0Y29udGludWVcblx0XHR9XG5cblx0XHQvLyBNdWx0aXBsZSBldmVudHMgLSB1c2UgbGF5ZXJlZCBwb3NpdGlvbmluZyBhcHByb2FjaFxuXHRcdC8vIFNvcnQgYnkgZHVyYXRpb24gKGxvbmdlc3QgZmlyc3QpLCB0aGVuIGJ5IHN0YXJ0IHRpbWVcblx0XHRjb25zdCBzb3J0ZWRDbHVzdGVyID0gWy4uLmNsdXN0ZXJdLnNvcnQoKGEsIGIpID0+IHtcblx0XHRcdGNvbnN0IGFEdXJhdGlvbiA9IGEuZW5kLmRpZmYoYS5zdGFydCwgJ21pbnV0ZScpXG5cdFx0XHRjb25zdCBiRHVyYXRpb24gPSBiLmVuZC5kaWZmKGIuc3RhcnQsICdtaW51dGUnKVxuXG5cdFx0XHQvLyBMb25nZXIgZXZlbnRzIGZpcnN0XG5cdFx0XHRpZiAoYUR1cmF0aW9uICE9PSBiRHVyYXRpb24pIHtcblx0XHRcdFx0cmV0dXJuIGJEdXJhdGlvbiAtIGFEdXJhdGlvblxuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBzYW1lIGR1cmF0aW9uLCBlYXJsaWVyIHN0YXJ0IHRpbWUgZmlyc3Rcblx0XHRcdHJldHVybiBhLnN0YXJ0LmRpZmYoYi5zdGFydClcblx0XHR9KVxuXG5cdFx0Ly8gUHJvY2VzcyBldmVudHMgd2l0aCBsYXllcmVkIHBvc2l0aW9uaW5nXG5cdFx0Y29uc3QgdG90YWxFdmVudHMgPSBzb3J0ZWRDbHVzdGVyLmxlbmd0aFxuXG5cdFx0Ly8gQ2FsY3VsYXRlIGR5bmFtaWMgb2Zmc2V0IGJhc2VkIG9uIG51bWJlciBvZiBvdmVybGFwcGluZyBldmVudHNcblx0XHQvLyBGZXdlciBldmVudHMgPSBsYXJnZXIgaW5kaXZpZHVhbCBvZmZzZXRzLCBtb3JlIGV2ZW50cyA9IHNtYWxsZXIgb2Zmc2V0c1xuXHRcdGxldCBtYXhPZmZzZXQ6IG51bWJlclxuXHRcdGlmICh0b3RhbEV2ZW50cyA9PT0gMikge1xuXHRcdFx0bWF4T2Zmc2V0ID0gMjUgLy8gMjUlIG9mZnNldCBmb3IgMiBldmVudHNcblx0XHR9IGVsc2UgaWYgKHRvdGFsRXZlbnRzID09PSAzKSB7XG5cdFx0XHRtYXhPZmZzZXQgPSA1MCAvLyA1MCUgdG90YWwgZm9yIDMgZXZlbnRzICgyNSUgZWFjaClcblx0XHR9IGVsc2UgaWYgKHRvdGFsRXZlbnRzID09PSA0KSB7XG5cdFx0XHRtYXhPZmZzZXQgPSA2MCAvLyA2MCUgdG90YWwgZm9yIDQgZXZlbnRzICgyMCUgZWFjaClcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF4T2Zmc2V0ID0gNzAgLy8gNzAlIHRvdGFsIGZvciA1KyBldmVudHNcblx0XHR9XG5cblx0XHRjb25zdCBvZmZzZXRQZXJFdmVudCA9IHRvdGFsRXZlbnRzID4gMSA/IG1heE9mZnNldCAvICh0b3RhbEV2ZW50cyAtIDEpIDogMFxuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRDbHVzdGVyLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBldmVudCA9IHNvcnRlZENsdXN0ZXJbaV1cblxuXHRcdFx0bGV0IHN0YXJ0VGltZSA9IGV2ZW50LnN0YXJ0LmRpZmYoZ3JpZFN0YXJ0LCBncmlkVHlwZSwgdHJ1ZSlcblx0XHRcdGxldCBlbmRUaW1lID0gZXZlbnQuZW5kLmRpZmYoZ3JpZFN0YXJ0LCBncmlkVHlwZSwgdHJ1ZSlcblxuXHRcdFx0aWYgKGlzRGlzY3JldGUpIHtcblx0XHRcdFx0c3RhcnRUaW1lID0gTWF0aC5mbG9vcihzdGFydFRpbWUpXG5cdFx0XHRcdGVuZFRpbWUgPSBNYXRoLmNlaWwoZW5kVGltZSlcblx0XHRcdFx0aWYgKGVuZFRpbWUgPD0gc3RhcnRUaW1lKSB7XG5cdFx0XHRcdFx0ZW5kVGltZSA9IHN0YXJ0VGltZSArIDFcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBDbGFtcCB0byBncmlkIGJvdW5kYXJpZXNcblx0XHRcdGlmIChzdGFydFRpbWUgPCAwKSBzdGFydFRpbWUgPSAwXG5cdFx0XHRpZiAoZW5kVGltZSA+IHRvdGFsVW5pdHMpIGVuZFRpbWUgPSB0b3RhbFVuaXRzXG5cblx0XHRcdGNvbnN0IHRvdGFsRHVyYXRpb24gPSBNYXRoLm1heCgwLCBlbmRUaW1lIC0gc3RhcnRUaW1lKVxuXG5cdFx0XHRpZiAodG90YWxEdXJhdGlvbiA9PT0gMCkgY29udGludWVcblxuXHRcdFx0Y29uc3QgdG9wID0gKHN0YXJ0VGltZSAvIHRvdGFsVW5pdHMpICogMTAwXG5cdFx0XHRjb25zdCBoZWlnaHQgPSAodG90YWxEdXJhdGlvbiAvIHRvdGFsVW5pdHMpICogMTAwXG5cblx0XHRcdC8vIENhbGN1bGF0ZSBwb3NpdGlvbmluZyBiYXNlZCBvbiBsYXllciBhbmQgdG90YWwgZXZlbnRzXG5cdFx0XHRsZXQgbGVmdDogbnVtYmVyXG5cdFx0XHRsZXQgd2lkdGg6IG51bWJlclxuXHRcdFx0bGV0IHpJbmRleDogbnVtYmVyXG5cblx0XHRcdGlmIChpID09PSAwKSB7XG5cdFx0XHRcdC8vIEZpcnN0IGV2ZW50IChsb25nZXN0KSB0YWtlcyBmdWxsIHdpZHRoIGF0IGJvdHRvbVxuXHRcdFx0XHRsZWZ0ID0gMFxuXHRcdFx0XHR3aWR0aCA9IDEwMFxuXHRcdFx0XHR6SW5kZXggPSAxXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBTdWJzZXF1ZW50IGV2ZW50cyBhcmUgb2Zmc2V0IGR5bmFtaWNhbGx5IGJhc2VkIG9uIHRvdGFsIGV2ZW50IGNvdW50XG5cdFx0XHRcdGxlZnQgPSBvZmZzZXRQZXJFdmVudCAqIGlcblx0XHRcdFx0d2lkdGggPSAxMDAgLSBsZWZ0IC8vIFJlbWFpbmluZyB3aWR0aFxuXHRcdFx0XHR6SW5kZXggPSBpICsgMSAvLyBIaWdoZXIgei1pbmRleCBmb3IgZXZlbnRzIG9uIHRvcFxuXHRcdFx0fVxuXG5cdFx0XHRwcm9jZXNzZWRFdmVudHMucHVzaCh7XG5cdFx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0XHRsZWZ0LFxuXHRcdFx0XHR3aWR0aCxcblx0XHRcdFx0dG9wLFxuXHRcdFx0XHRoZWlnaHQsXG5cdFx0XHRcdHpJbmRleCxcblx0XHRcdH0pXG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHByb2Nlc3NlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXJQcm9wcyB7XG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzZXM/OiB7IGhlYWRlcj86IHN0cmluZzsgYWxsRGF5Pzogc3RyaW5nIH1cblx0YWxsRGF5Um93PzogUmVhY3QuUmVhY3ROb2RlXG59XG5cbmNvbnN0IE5vTWVtb1ZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lcjogUmVhY3QuRkM8XG5cdFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lclByb3BzXG4+ID0gKHsgY2hpbGRyZW4sIGNsYXNzZXMsIGFsbERheVJvdyB9KSA9PiB7XG5cdGNvbnN0IHsgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoXG5cdFx0KHN0YXRlKSA9PiAoe1xuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcjogc3RhdGUuc3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWU6IHN0YXRlLnZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0fSlcblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0c3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMjEgYmctYmFja2dyb3VuZCcsIC8vIFotaW5kZXggYWJvdmUgdGhlIGxlZnQgc3RpY2t5IHJlc291cmNlIGNvbHVtblxuXHRcdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdD5cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbignaC0xMiBib3JkZXItYiB3LWZpdCcsIGNsYXNzZXM/LmhlYWRlcil9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1oZWFkZXJcIlxuXHRcdFx0PlxuXHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdHsvKiBBbGwtZGF5IHJvdyAqL31cblx0XHRcdHthbGxEYXlSb3cgJiYgKFxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdmbGV4IHctZnVsbCBib3JkZXItYiBtaW4taC0xMiBoLWZ1bGwnLFxuXHRcdFx0XHRcdFx0Y2xhc3Nlcz8uYWxsRGF5XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtYWxsLWRheVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7YWxsRGF5Um93fVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCl9XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lciA9IG1lbW8oXG5cdE5vTWVtb1ZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lclxuKVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWRDb2wsIHR5cGUgVmVydGljYWxHcmlkQ29sUHJvcHMgfSBmcm9tICcuL3ZlcnRpY2FsLWdyaWQtY29sJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyIH0gZnJvbSAnLi92ZXJ0aWNhbC1ncmlkLWhlYWRlci1jb250YWluZXInXG5cbmNvbnN0IEJPRFlfSEVJR0hUID0gJ2gtW2NhbGMoMTAwJS0zcmVtKV0nXG5cbmludGVyZmFjZSBWZXJ0aWNhbEdyaWRQcm9wcyB7XG5cdGNvbHVtbnM6IFZlcnRpY2FsR3JpZENvbFByb3BzW11cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHR2YXJpYW50PzogJ3JlZ3VsYXInIHwgJ3Jlc291cmNlJ1xuXHRjbGFzc2VzPzogeyBoZWFkZXI/OiBzdHJpbmc7IGJvZHk/OiBzdHJpbmc7IGFsbERheT86IHN0cmluZyB9XG5cdGFsbERheVJvdz86IFJlYWN0LlJlYWN0Tm9kZVxuXHQvKipcblx0ICogT3B0aW9uYWwgYXJyYXkgb2YgbWludXRlIHNsb3RzIGJ5IHdoaWNoIHRoZSBob3VyIGlzIGRpdmlkZWRcblx0ICogZS5nLiwgWzAsIDE1LCAzMCwgNDVdIGZvciBxdWFydGVyLWhvdXIgc2xvdHNcblx0ICovXG5cdGNlbGxTbG90cz86IG51bWJlcltdXG59XG5cbmV4cG9ydCBjb25zdCBWZXJ0aWNhbEdyaWQ6IFJlYWN0LkZDPFZlcnRpY2FsR3JpZFByb3BzPiA9ICh7XG5cdGNvbHVtbnMsXG5cdGNoaWxkcmVuLFxuXHRncmlkVHlwZSA9ICdkYXknLFxuXHR2YXJpYW50ID0gJ3Jlc291cmNlJyxcblx0Y2xhc3Nlcyxcblx0YWxsRGF5Um93LFxuXHRjZWxsU2xvdHMsXG59KSA9PiB7XG5cdGNvbnN0IGlzUmVzb3VyY2VDYWxlbmRhciA9IHZhcmlhbnQgPT09ICdyZXNvdXJjZSdcblx0Y29uc3QgaXNSZWd1bGFyQ2FsZW5kYXIgPSAhaXNSZXNvdXJjZUNhbGVuZGFyXG5cblx0Y29uc3QgaGVhZGVyID0gY2hpbGRyZW4gJiYgKFxuXHRcdDxWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXJcblx0XHRcdGFsbERheVJvdz17YWxsRGF5Um93fVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6IGNsYXNzZXM/LmhlYWRlciwgYWxsRGF5OiBjbGFzc2VzPy5hbGxEYXkgfX1cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9WZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXI+XG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiaC1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLWNvbnRhaW5lclwiPlxuXHRcdFx0ey8qIGhlYWRlciByb3cgKi99XG5cdFx0XHR7aXNSZWd1bGFyQ2FsZW5kYXIgJiYgaGVhZGVyfVxuXG5cdFx0XHQ8U2Nyb2xsQXJlYVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdoLWZ1bGwnLFxuXHRcdFx0XHRcdGlzUmVndWxhckNhbGVuZGFyICYmICdvdmVyZmxvdy1hdXRvJyxcblx0XHRcdFx0XHRpc1JlZ3VsYXJDYWxlbmRhciAmJiBCT0RZX0hFSUdIVCAvLyBzY3JvbGwgYXJlYSBiZWNvbWVzIGJvZHkgaW4gcmVndWxhciBjYWxlbmRhclxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtc2Nyb2xsXCJcblx0XHRcdFx0dmlld1BvcnRQcm9wcz17eyBjbGFzc05hbWU6ICcqOmZsZXghICo6ZmxleC1jb2whICo6bWluLWgtZnVsbCcgfX1cblx0XHRcdD5cblx0XHRcdFx0ey8qIGhlYWRlciByb3cgZm9yIHJlc291cmNlIGNhbGVuZGFyIGluc2lkZSBzY3JvbGwgYXJlYSAqL31cblx0XHRcdFx0e2lzUmVzb3VyY2VDYWxlbmRhciAmJiBoZWFkZXJ9XG5cdFx0XHRcdHsvKiBDYWxlbmRhciBhcmVhIHdpdGggc2Nyb2xsICovfVxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdmbGV4IGZsZXgtMSB3LWZpdCcsXG5cdFx0XHRcdFx0XHRpc1Jlc291cmNlQ2FsZW5kYXIgJiYgQk9EWV9IRUlHSFQsXG5cdFx0XHRcdFx0XHRjbGFzc2VzPy5ib2R5XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtYm9keVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7LyogRGF5IGNvbHVtbnMgd2l0aCB0aW1lIHNsb3RzICovfVxuXHRcdFx0XHRcdHtjb2x1bW5zLm1hcCgoY29sdW1uLCBpbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0PFZlcnRpY2FsR3JpZENvbFxuXHRcdFx0XHRcdFx0XHRrZXk9e2Ake2NvbHVtbi5pZH0tJHtpbmRleH1gfVxuXHRcdFx0XHRcdFx0XHR7Li4uY29sdW1ufVxuXHRcdFx0XHRcdFx0XHRjZWxsU2xvdHM9e2NlbGxTbG90c31cblx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRpc0xhc3RDb2x1bW49e2luZGV4ID09PSBjb2x1bW5zLmxlbmd0aCAtIDF9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCkpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgLz4gey8qIHZlcnRpY2FsIHNjcm9sbGJhciAqL31cblx0XHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgb3JpZW50YXRpb249XCJob3Jpem9udGFsXCIgLz57JyAnfVxuXHRcdFx0XHR7LyogaG9yaXpvbnRhbCBzY3JvbGxiYXIgKi99XG5cdFx0XHQ8L1Njcm9sbEFyZWE+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBnZXREYXlIb3VycyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBnZXRCdXNpbmVzc0hvdXJzRm9yRGF0ZSB9IGZyb20gJy4vYnVzaW5lc3MtaG91cnMnXG5cbmludGVyZmFjZSBHZXRWaWV3SG91cnNPcHRpb25zIHtcblx0cmVmZXJlbmNlRGF0ZTogZGF5anMuRGF5anNcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG5cdC8qKlxuXHQgKiBGb3Igdmlld3Mgd2l0aCBtdWx0aXBsZSBkYXlzIChsaWtlIFdlZWtWaWV3KSwgd2UgbWlnaHQgd2FudCB0byBzaG93XG5cdCAqIHRoZSB1bmlvbiBvZiBhbGwgYnVzaW5lc3MgaG91cnMgYWNyb3NzIHRob3NlIGRheXMuXG5cdCAqL1xuXHRhbGxEYXRlcz86IGRheWpzLkRheWpzW11cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGxpc3Qgb2YgaG91cnMgdG8gZGlzcGxheSBpbiB0aGUgY2FsZW5kYXIgdmlldy5cbiAqIElmIGhpZGVOb25CdXNpbmVzc0hvdXJzIGlzIHRydWUsIGl0IGZpbHRlcnMgdGhlIGhvdXJzIGJhc2VkIG9uIGJ1c2luZXNzSG91cnMgY29uZmlndXJhdGlvbi5cbiAqIEZvciBtdWx0aXBsZSBkYXRlcywgaXQgdGFrZXMgdGhlIGVhcmxpZXN0IHN0YXJ0IGFuZCBsYXRlc3QgZW5kIGFjcm9zcyBhbGwgZGF0ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3SG91cnMoe1xuXHRyZWZlcmVuY2VEYXRlLFxuXHRidXNpbmVzc0hvdXJzLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0YWxsRGF0ZXMgPSBbcmVmZXJlbmNlRGF0ZV0sXG59OiBHZXRWaWV3SG91cnNPcHRpb25zKTogZGF5anMuRGF5anNbXSB7XG5cdGNvbnN0IGFsbEhvdXJzID0gZ2V0RGF5SG91cnMoeyByZWZlcmVuY2VEYXRlIH0pXG5cblx0aWYgKCFoaWRlTm9uQnVzaW5lc3NIb3VycyB8fCAhYnVzaW5lc3NIb3Vycykge1xuXHRcdHJldHVybiBhbGxIb3Vyc1xuXHR9XG5cblx0bGV0IG1pblN0YXJ0ID0gMjRcblx0bGV0IG1heEVuZCA9IDBcblx0bGV0IGhhc0J1c2luZXNzSG91cnMgPSBmYWxzZVxuXG5cdGZvciAoY29uc3QgZGF0ZSBvZiBhbGxEYXRlcykge1xuXHRcdGNvbnN0IGNvbmZpZyA9IGdldEJ1c2luZXNzSG91cnNGb3JEYXRlKGRhdGUsIGJ1c2luZXNzSG91cnMpXG5cdFx0aWYgKGNvbmZpZykge1xuXHRcdFx0aGFzQnVzaW5lc3NIb3VycyA9IHRydWVcblx0XHRcdG1pblN0YXJ0ID0gTWF0aC5taW4obWluU3RhcnQsIGNvbmZpZy5zdGFydFRpbWUgPz8gOSlcblx0XHRcdG1heEVuZCA9IE1hdGgubWF4KG1heEVuZCwgY29uZmlnLmVuZFRpbWUgPz8gMTcpXG5cdFx0fVxuXHR9XG5cblx0Ly8gSWYgbm8gYnVzaW5lc3MgaG91cnMgYXJlIGRlZmluZWQgZm9yIGFueSBvZiB0aGUgZGF0ZXNcblx0aWYgKCFoYXNCdXNpbmVzc0hvdXJzKSB7XG5cdFx0aWYgKGhpZGVOb25CdXNpbmVzc0hvdXJzKSB7XG5cdFx0XHQvLyBJZiBoaWRpbmcgbm9uLWJ1c2luZXNzIGhvdXJzLCB0cnkgdG8gZmluZCBhIGdsb2JhbCByYW5nZSBmcm9tIEFMTCBidXNpbmVzcyBob3Vyc1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYnVzaW5lc3NIb3VycykpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBjb25maWcgb2YgYnVzaW5lc3NIb3Vycykge1xuXHRcdFx0XHRcdG1pblN0YXJ0ID0gTWF0aC5taW4obWluU3RhcnQsIGNvbmZpZy5zdGFydFRpbWUgPz8gOSlcblx0XHRcdFx0XHRtYXhFbmQgPSBNYXRoLm1heChtYXhFbmQsIGNvbmZpZy5lbmRUaW1lID8/IDE3KVxuXHRcdFx0XHRcdGhhc0J1c2luZXNzSG91cnMgPSB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYnVzaW5lc3NIb3Vycykge1xuXHRcdFx0XHRtaW5TdGFydCA9IGJ1c2luZXNzSG91cnMuc3RhcnRUaW1lID8/IDlcblx0XHRcdFx0bWF4RW5kID0gYnVzaW5lc3NIb3Vycy5lbmRUaW1lID8/IDE3XG5cdFx0XHRcdGhhc0J1c2luZXNzSG91cnMgPSB0cnVlXG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHN0aWxsIG5vIGJ1c2luZXNzIGhvdXJzICh0aG91Z2ggdW5saWtlbHkgaWYgYnVzaW5lc3NIb3VycyBleGlzdHMpLCBmYWxsYmFjayB0byBkZWZhdWx0XG5cdFx0XHRpZiAoIWhhc0J1c2luZXNzSG91cnMpIHtcblx0XHRcdFx0bWluU3RhcnQgPSA5XG5cdFx0XHRcdG1heEVuZCA9IDE3XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vdCBoaWRpbmcsIHNob3cgZnVsbCBkYXlcblx0XHRcdHJldHVybiBhbGxIb3Vyc1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiBob3VycyB3aXRoaW4gdGhlIHJhbmdlIFttaW5TdGFydCwgbWF4RW5kKVxuXHRyZXR1cm4gYWxsSG91cnMuZmlsdGVyKChoKSA9PiB7XG5cdFx0Y29uc3QgaG91ciA9IGguaG91cigpXG5cdFx0cmV0dXJuIGhvdXIgPj0gbWluU3RhcnQgJiYgaG91ciA8IG1heEVuZFxuXHR9KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbGxEYXlSb3cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgZ2V0Vmlld0hvdXJzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgRGF5VmlldyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0dGltZUZvcm1hdCxcblx0XHR0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCBpc1RvZGF5ID0gY3VycmVudERhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXHRjb25zdCBob3VycyA9IGdldFZpZXdIb3Vycyh7XG5cdFx0cmVmZXJlbmNlRGF0ZTogY3VycmVudERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRhbGxEYXRlczogW2N1cnJlbnREYXRlXSxcblx0fSlcblxuXHRjb25zdCBmaXJzdENvbCA9IHtcblx0XHRpZDogJ3RpbWUtY29sJyxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRkYXlzOiBob3Vycyxcblx0XHRjbGFzc05hbWU6XG5cdFx0XHQnc2hyaW5rLTAgdy0xNiBtaW4tdy0xNiBtYXgtdy0xNiBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCcsXG5cdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0XHRub0V2ZW50czogdHJ1ZSxcblx0XHRyZW5kZXJDZWxsOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHAtMiB0ZXh0LXJpZ2h0IHRleHQtWzEwcHhdIHNtOnRleHQteHMgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cblx0XHRcdFx0e0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuXHRcdFx0XHRcdGhvdXI6ICdudW1lcmljJyxcblx0XHRcdFx0XHRob3VyMTI6IHRpbWVGb3JtYXQgPT09ICcxMi1ob3VyJyxcblx0XHRcdFx0fSkuZm9ybWF0KGRhdGUudG9EYXRlKCkpfVxuXHRcdFx0PC9kaXY+XG5cdFx0KSxcblx0fVxuXG5cdGNvbnN0IGNvbHVtbnMgPSB7XG5cdFx0aWQ6IGBkYXktY29sLSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9YCxcblx0XHRkYXk6IGN1cnJlbnREYXRlLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGNsYXNzTmFtZTogJ3ctW2NhbGMoMTAwJS00cmVtKV0gZmxleC0xJyxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8VmVydGljYWxHcmlkXG5cdFx0XHRhbGxEYXlSb3c9ezxBbGxEYXlSb3cgZGF5cz17W2N1cnJlbnREYXRlXX0gLz59XG5cdFx0XHRjZWxsU2xvdHM9e1swLCAxNSwgMzAsIDQ1XX1cblx0XHRcdGNsYXNzZXM9e3sgaGVhZGVyOiAndy1mdWxsJywgYm9keTogJ3ctZnVsbCcsIGFsbERheTogJ3ctZnVsbCcgfX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgY29sdW1uc119XG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdFx0dmFyaWFudD1cInJlZ3VsYXJcIlxuXHRcdD5cblx0XHRcdHsvKiBIZWFkZXIgKi99XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17J2ZsZXggaC1mdWxsIGZsZXgtMSBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXInfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cImRheS12aWV3LWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2ZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHRleHQtY2VudGVyIHRleHQtYmFzZSBmb250LXNlbWlib2xkIHNtOnRleHQteGwnLFxuXHRcdFx0XHRcdFx0aXNUb2RheSAmJiAndGV4dC1wcmltYXJ5J1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ4czppbmxpbmUgaGlkZGVuXCI+XG5cdFx0XHRcdFx0XHR7Y3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCAnKX1cblx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0e2N1cnJlbnREYXRlLmZvcm1hdCgnTU1NTSBELCBZWVlZJyl9XG5cdFx0XHRcdFx0e2lzVG9kYXkgJiYgKFxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBtbC0yIHJvdW5kZWQtZnVsbCBweC0xIHB5LTAuNSB0ZXh0LXhzIHNtOnB4LTIgc206dGV4dC1zbVwiPlxuXHRcdFx0XHRcdFx0XHR7dCgndG9kYXknKX1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IERheVZpZXdcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBnZXRNb250aFdlZWtzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IE1vbnRoSGVhZGVyIH0gZnJvbSAnLi9tb250aC1oZWFkZXInXG5pbXBvcnQgdHlwZSB7IE1vbnRoVmlld1Byb3BzIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGNvbnN0IE1vbnRoVmlldzogUmVhY3QuRkM8TW9udGhWaWV3UHJvcHM+ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB3ZWVrcyA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gZ2V0TW9udGhXZWVrcyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspLFxuXHRcdFtjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCByb3dzID0gd2Vla3MubWFwKChkYXlzLCB3ZWVrSW5kZXgpID0+ICh7XG5cdFx0aWQ6IGB3ZWVrLSR7d2Vla0luZGV4fWAsXG5cdFx0Y29sdW1uczogZGF5cy5tYXAoKGRheSkgPT4gKHtcblx0XHRcdGlkOiBgY29sLSR7ZGF5LnRvSVNPU3RyaW5nKCl9YCxcblx0XHRcdGRheSxcblx0XHRcdGNsYXNzTmFtZTogJ3ctYXV0bycsXG5cdFx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdFx0fSkpLFxuXHRcdGNsYXNzTmFtZTogJ2ZsZXgtMScsXG5cdFx0c2hvd0RheU51bWJlcjogdHJ1ZSxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8SG9yaXpvbnRhbEdyaWRcblx0XHRcdGNsYXNzZXM9e3sgYm9keTogJ3ctZnVsbCcsIGhlYWRlcjogJ3ctZnVsbCcgfX1cblx0XHRcdHJvd3M9e3Jvd3N9XG5cdFx0XHR2YXJpYW50PVwicmVndWxhclwiXG5cdFx0PlxuXHRcdFx0PE1vbnRoSGVhZGVyIGNsYXNzTmFtZT1cImgtMTJcIiAvPlxuXHRcdDwvSG9yaXpvbnRhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHMge1xuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgTm9NZW1vSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXIgPSAoe1xuXHRjaGlsZHJlbixcblx0Y2xhc3NOYW1lLFxufTogSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXJQcm9wcykgPT4ge1xuXHRjb25zdCB7IHN0aWNreVZpZXdIZWFkZXIsIHZpZXdIZWFkZXJDbGFzc05hbWUgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KFxuXHRcdChzdGF0ZSkgPT4gKHtcblx0XHRcdHN0aWNreVZpZXdIZWFkZXI6IHN0YXRlLnN0aWNreVZpZXdIZWFkZXIsXG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lOiBzdGF0ZS52aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdH0pXG5cdClcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBoLTEyIHctZml0Jyxcblx0XHRcdFx0c3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMjEgYmctYmFja2dyb3VuZCcsXG5cdFx0XHRcdGNsYXNzTmFtZSxcblx0XHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtdGVzdGlkPVwiaG9yaXpvbnRhbC1ncmlkLWhlYWRlclwiXG5cdFx0PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciA9IG1lbW8oXG5cdE5vTWVtb0hvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyXG4pXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyIH0gZnJvbSAnLi9ob3Jpem9udGFsLWdyaWQtaGVhZGVyLWNvbnRhaW5lcidcbmltcG9ydCB7XG5cdEhvcml6b250YWxHcmlkUm93LFxuXHR0eXBlIEhvcml6b250YWxHcmlkUm93UHJvcHMsXG59IGZyb20gJy4vaG9yaXpvbnRhbC1ncmlkLXJvdydcblxuY29uc3QgQk9EWV9IRUlHSFQgPSAnaC1bY2FsYygxMDAlLTNyZW0pXSdcblxuaW50ZXJmYWNlIEhvcml6b250YWxHcmlkUHJvcHMge1xuXHRyb3dzOiBIb3Jpem9udGFsR3JpZFJvd1Byb3BzW11cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBib2R5Pzogc3RyaW5nIH1cblx0YWxsRGF5PzogYm9vbGVhblxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHZhcmlhbnQ/OiAncmVndWxhcicgfCAncmVzb3VyY2UnXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWQ6IFJlYWN0LkZDPEhvcml6b250YWxHcmlkUHJvcHM+ID0gKHtcblx0cm93cyxcblx0Y2hpbGRyZW4sXG5cdGNsYXNzZXMsXG5cdGFsbERheTogdG9wTGV2ZWxBbGxEYXksXG5cdGdyaWRUeXBlLFxuXHR2YXJpYW50ID0gJ3Jlc291cmNlJyxcblx0ZGF5TnVtYmVySGVpZ2h0LFxufSkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoc3RhdGUpID0+ICh7XG5cdFx0Y3VycmVudERhdGU6IHN0YXRlLmN1cnJlbnREYXRlLFxuXHR9KSlcblxuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSB2YXJpYW50ID09PSAncmVzb3VyY2UnXG5cdGNvbnN0IGlzUmVndWxhckNhbGVuZGFyID0gIWlzUmVzb3VyY2VDYWxlbmRhclxuXG5cdGNvbnN0IGhlYWRlciA9IGNoaWxkcmVuICYmIChcblx0XHQ8SG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXIgY2xhc3NOYW1lPXtjbGFzc2VzPy5oZWFkZXJ9PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXI+XG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiaC1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtY29udGFpbmVyXCI+XG5cdFx0XHR7LyoqXG5cdFx0XHQgKiBoZWFkZXIgcm93IGlzIHJlbmRlcmVkIG91dHNpZGUgc2Nyb2xsIGFyZWEgZm9yIHJlZ3VsYXIgY2FsZW5kYXJcblx0XHRcdCAqL31cblx0XHRcdHtpc1JlZ3VsYXJDYWxlbmRhciAmJiBoZWFkZXJ9XG5cblx0XHRcdDxTY3JvbGxBcmVhXG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2gtZnVsbCcsXG5cdFx0XHRcdFx0aXNSZWd1bGFyQ2FsZW5kYXIgJiYgJ292ZXJmbG93LWF1dG8nLFxuXHRcdFx0XHRcdGlzUmVndWxhckNhbGVuZGFyICYmIEJPRFlfSEVJR0hUIC8vIHNjcm9sbCBhcmVhIGJlY29tZXMgYm9keSBpbiByZWd1bGFyIGNhbGVuZGFyXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwiaG9yaXpvbnRhbC1ncmlkLXNjcm9sbFwiXG5cdFx0XHRcdHZpZXdQb3J0UHJvcHM9e3sgY2xhc3NOYW1lOiAnKjpmbGV4ISAqOmZsZXgtY29sISAqOm1pbi1oLWZ1bGwnIH19XG5cdFx0XHQ+XG5cdFx0XHRcdHsvKipcblx0XHRcdFx0ICogaGVhZGVyIHJvdyBmb3IgcmVzb3VyY2UgY2FsZW5kYXIgaW5zaWRlIHNjcm9sbCBhcmVhXG5cdFx0XHRcdCAqICovfVxuXHRcdFx0XHR7aXNSZXNvdXJjZUNhbGVuZGFyICYmIGhlYWRlcn1cblxuXHRcdFx0XHR7LyogQ2FsZW5kYXIgYXJlYSB3aXRoIHNjcm9sbCAqL31cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnZmxleCBmbGV4LTEgdy1maXQnLFxuXHRcdFx0XHRcdFx0aXNSZXNvdXJjZUNhbGVuZGFyICYmIEJPRFlfSEVJR0hULCAvLyB0aGlzIGJlY29tZXMgYm9keSBpbiByZXNvdXJjZSBjYWxlbmRhclxuXHRcdFx0XHRcdFx0Y2xhc3Nlcz8uYm9keVxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtYm9keVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgZmxleCBmbGV4LWNvbCBmbGV4LTFcIlxuXHRcdFx0XHRcdFx0a2V5PXtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0nKX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7cm93cy5tYXAoKHJvdywgaW5kZXgpID0+IChcblx0XHRcdFx0XHRcdFx0PEhvcml6b250YWxHcmlkUm93XG5cdFx0XHRcdFx0XHRcdFx0YWxsRGF5PXtyb3cuYWxsRGF5ID8/IHRvcExldmVsQWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdGRheU51bWJlckhlaWdodD17ZGF5TnVtYmVySGVpZ2h0fVxuXHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3c9e2luZGV4ID09PSByb3dzLmxlbmd0aCAtIDF9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtyb3cuaWR9XG5cdFx0XHRcdFx0XHRcdFx0dmFyaWFudD17dmFyaWFudH1cblx0XHRcdFx0XHRcdFx0XHR7Li4ucm93fVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIC8+XG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIG9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiIC8+XG5cdFx0XHQ8L1Njcm9sbEFyZWE+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5pbnRlcmZhY2UgTW9udGhIZWFkZXJQcm9wcyB7XG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgTW9udGhIZWFkZXI6IFJlYWN0LkZDPE1vbnRoSGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcblx0Y29uc3QgeyBmaXJzdERheU9mV2Vlaywgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSwgY3VycmVudERhdGUgfSA9XG5cdFx0dXNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHQvLyBSZW9yZGVyIHdlZWsgZGF5cyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuXHRjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaylcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IHctZnVsbCcsXG5cdFx0XHRcdHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIwJyxcblx0XHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJtb250aC1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdHt3ZWVrRGF5cy5tYXAoKHdlZWtEYXksIGluZGV4KSA9PiAoXG5cdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRjbGFzc05hbWU9XCJweS0yIHRleHQtY2VudGVyIGZvbnQtbWVkaXVtIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBib3JkZXItYiBmbGV4LTFcIlxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgd2Vla2RheS1oZWFkZXItJHt3ZWVrRGF5LmZvcm1hdCgnZGRkJykudG9Mb3dlckNhc2UoKX1gfVxuXHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0a2V5PXt3ZWVrRGF5LnRvSVNPU3RyaW5nKCl9XG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17d2Vla0RheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSBjYXBpdGFsaXplXCI+e3dlZWtEYXkuZm9ybWF0KCdkZGQnKX08L3NwYW4+XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0KSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbGxEYXlSb3cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgZ2V0Vmlld0hvdXJzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuY29uc3QgQ0VMTF9DTEFTUyA9ICd3LVtjYWxjKCgxMDAlLTRyZW0pLzcpXSBtaW4tdy1bY2FsYygoMTAwJS00cmVtKS83KV0gZmxleC0xJ1xuY29uc3QgTEVGVF9DT0xfV0lEVEggPSAndy0xMCBzbTp3LTE2IG1pbi13LTEwIHNtOm1pbi13LTE2IG1heC13LTEwIHNtOm1heC13LTE2J1xuXG5jb25zdCBXZWVrVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHR0LFxuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdHNlbGVjdERhdGUsXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHRjdXJyZW50TG9jYWxlLFxuXHRcdHRpbWVGb3JtYXQsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0fSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IGhvdXJzID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0Z2V0Vmlld0hvdXJzKHtcblx0XHRcdFx0cmVmZXJlbmNlRGF0ZTogY3VycmVudERhdGUsXG5cdFx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRhbGxEYXRlczogd2Vla0RheXMsXG5cdFx0XHR9KSxcblx0XHRbY3VycmVudERhdGUsIGJ1c2luZXNzSG91cnMsIGhpZGVOb25CdXNpbmVzc0hvdXJzLCB3ZWVrRGF5c11cblx0KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiAndGltZS1jb2wnLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGNsYXNzTmFtZTogYHNocmluay0wICR7TEVGVF9DT0xfV0lEVEh9IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwYCxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdGhvdXIxMjogdGltZUZvcm1hdCA9PT0gJzEyLWhvdXInLFxuXHRcdFx0XHR9KS5mb3JtYXQoZGF0ZS50b0RhdGUoKSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Ly8gR2VuZXJhdGUgd2VlayBkYXlzXG5cdGNvbnN0IGNvbHVtbnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRyZXR1cm4gd2Vla0RheXMubWFwKChkYXkpID0+ICh7XG5cdFx0XHRpZDogYGRheS1jb2wtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YCxcblx0XHRcdGRheSxcblx0XHRcdGxhYmVsOiBkYXkuZm9ybWF0KCdEJyksXG5cdFx0XHRjbGFzc05hbWU6IENFTExfQ0xBU1MsXG5cdFx0XHRkYXlzOiBob3Vycy5tYXAoKGgpID0+XG5cdFx0XHRcdGRheS5ob3VyKGguaG91cigpKS5taW51dGUoMCkuc2Vjb25kKDApLm1pbGxpc2Vjb25kKDApXG5cdFx0XHQpLFxuXHRcdFx0dmFsdWU6IGRheSxcblx0XHR9KSlcblx0fSwgW3dlZWtEYXlzLCBob3Vyc10pXG5cblx0cmV0dXJuIChcblx0XHQ8VmVydGljYWxHcmlkXG5cdFx0XHRhbGxEYXlSb3c9e1xuXHRcdFx0XHQ8QWxsRGF5Um93XG5cdFx0XHRcdFx0Y2xhc3Nlcz17eyBjZWxsOiBDRUxMX0NMQVNTLCBzcGFjZXI6IExFRlRfQ09MX1dJRFRIIH19XG5cdFx0XHRcdFx0ZGF5cz17d2Vla0RheXN9XG5cdFx0XHRcdC8+XG5cdFx0XHR9XG5cdFx0XHRjbGFzc2VzPXt7IGhlYWRlcjogJ3ctZnVsbCBoLTE4JywgYm9keTogJ2gtW2NhbGMoMTAwJS00LjVyZW0pXSB3LWZ1bGwnIH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIC4uLmNvbHVtbnNdfVxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT17J2ZsZXggaC1mdWxsIGZsZXgtMSd9IGRhdGEtdGVzdGlkPVwid2Vlay12aWV3LWhlYWRlclwiPlxuXHRcdFx0XHR7LyogQ29ybmVyIGNlbGwgd2l0aCB3ZWVrIG51bWJlciAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTEwIHNtOnctMTYgaC1mdWxsIHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItciBwLTIgZmxleFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXhzXCI+e3QoJ3dlZWsnKX08L3NwYW4+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPntjdXJyZW50RGF0ZS53ZWVrKCl9PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHR7LyogRGF5IGhlYWRlciBjZWxscyAqL31cblx0XHRcdFx0e3dlZWtEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGlzVG9kYXkgPSBkYXkuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXHRcdFx0XHRcdGNvbnN0IGtleSA9IGB3ZWVrLWRheS1oZWFkZXItJHtkYXkudG9JU09TdHJpbmcoKX1gXG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdCdob3ZlcjpiZy1hY2NlbnQgZmxleC0xIGZsZXggZmxleC1jb2wganVzdGlmeS1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgcC0xIHRleHQtY2VudGVyIHNtOnAtMiBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgdy01MCBoLWZ1bGwnLFxuXHRcdFx0XHRcdFx0XHRcdGlzVG9kYXkgJiYgJ2JnLXByaW1hcnkvMTAgZm9udC1ib2xkJ1xuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHdlZWstZGF5LWhlYWRlci0ke2RheS5mb3JtYXQoJ2RkZGQnKS50b0xvd2VyQ2FzZSgpfWB9XG5cdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRcdGtleT17a2V5fVxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZWN0RGF0ZShkYXkpXG5cdFx0XHRcdFx0XHRcdFx0b3BlbkV2ZW50Rm9ybSh7IHN0YXJ0OiBkYXkgfSlcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17a2V5fVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPntkYXkuZm9ybWF0KCdkZGQnKX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHQnbXgtYXV0byBtdC0xIGZsZXggaC01IHctNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIHRleHQteHMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNUb2RheSAmJiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCdcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGF5OiAnbnVtZXJpYycsXG5cdFx0XHRcdFx0XHRcdFx0fSkuZm9ybWF0KGRheS50b0RhdGUoKSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFdlZWtWaWV3XG4iLAogICAgImltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBTY3JvbGxBcmVhLCBTY3JvbGxCYXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IERBWV9IRUFERVJfTkFNRVMgPSBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXVxuY29uc3QgRVZFTlRfRE9UX0NPTE9SUyA9IFsnYmctcHJpbWFyeScsICdiZy1ibHVlLTUwMCcsICdiZy1ncmVlbi01MDAnXVxuY29uc3QgREFZU19JTl9NSU5JX0NBTEVOREFSID0gNDJcblxuY29uc3QgZ2V0RGF5VG9vbHRpcCA9IChldmVudENvdW50OiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuXHRpZiAoZXZlbnRDb3VudCA9PT0gMCkge1xuXHRcdHJldHVybiAnJ1xuXHR9XG5cdGNvbnN0IHBsdXJhbCA9IGV2ZW50Q291bnQgPiAxID8gJ3MnIDogJydcblx0cmV0dXJuIGAke2V2ZW50Q291bnR9IGV2ZW50JHtwbHVyYWx9YFxufVxuXG5pbnRlcmZhY2UgTW9udGhEYXRhIHtcblx0ZGF0ZTogZGF5anMuRGF5anNcblx0bmFtZTogc3RyaW5nXG5cdGV2ZW50Q291bnQ6IG51bWJlclxuXHRtb250aEtleTogc3RyaW5nXG59XG5cbmludGVyZmFjZSBEYXlEYXRhIHtcblx0ZGF0ZTogZGF5anMuRGF5anNcblx0ZGF5S2V5OiBzdHJpbmdcblx0aXNJbkN1cnJlbnRNb250aDogYm9vbGVhblxuXHRpc1RvZGF5OiBib29sZWFuXG5cdGlzU2VsZWN0ZWQ6IGJvb2xlYW5cblx0ZXZlbnRDb3VudDogbnVtYmVyXG59XG5cbmNvbnN0IFllYXJWaWV3ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBzZWxlY3REYXRlLCBldmVudHMsIHNldFZpZXcsIGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgdCB9ID1cblx0XHR1c2VDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCBjdXJyZW50WWVhciA9IGN1cnJlbnREYXRlLnllYXIoKVxuXG5cdGNvbnN0IGdlbmVyYXRlTW9udGhzRGF0YSA9ICgpOiBNb250aERhdGFbXSA9PiB7XG5cdFx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDEyIH0sIChfLCBtb250aEluZGV4KSA9PiB7XG5cdFx0XHRjb25zdCBtb250aERhdGUgPSBkYXlqcygpXG5cdFx0XHRcdC55ZWFyKGN1cnJlbnRZZWFyKVxuXHRcdFx0XHQubW9udGgobW9udGhJbmRleClcblx0XHRcdFx0LnN0YXJ0T2YoJ21vbnRoJylcblx0XHRcdGNvbnN0IGV2ZW50c0luTW9udGggPSBldmVudHMuZmlsdGVyKFxuXHRcdFx0XHQoZXZlbnQpID0+XG5cdFx0XHRcdFx0ZXZlbnQuc3RhcnQueWVhcigpID09PSBjdXJyZW50WWVhciAmJlxuXHRcdFx0XHRcdGV2ZW50LnN0YXJ0Lm1vbnRoKCkgPT09IG1vbnRoSW5kZXhcblx0XHRcdClcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZGF0ZTogbW9udGhEYXRlLFxuXHRcdFx0XHRuYW1lOiBtb250aERhdGUuZm9ybWF0KCdNTU1NJyksXG5cdFx0XHRcdGV2ZW50Q291bnQ6IGV2ZW50c0luTW9udGgubGVuZ3RoLFxuXHRcdFx0XHRtb250aEtleTogbW9udGhEYXRlLmZvcm1hdCgnTU0nKSxcblx0XHRcdH1cblx0XHR9KVxuXHR9XG5cblx0Y29uc3QgZ2VuZXJhdGVEYXlzRm9yTW9udGggPSAobW9udGhEYXRlOiBkYXlqcy5EYXlqcyk6IERheURhdGFbXSA9PiB7XG5cdFx0Y29uc3QgZmlyc3REYXlPZkNhbGVuZGFyID0gbW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJykuc3RhcnRPZignd2VlaycpXG5cblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogREFZU19JTl9NSU5JX0NBTEVOREFSIH0sIChfLCBkYXlJbmRleCkgPT4ge1xuXHRcdFx0Y29uc3QgZGF5RGF0ZSA9IGZpcnN0RGF5T2ZDYWxlbmRhci5hZGQoZGF5SW5kZXgsICdkYXknKVxuXHRcdFx0Y29uc3QgZGF5U3RhcnQgPSBkYXlEYXRlLnN0YXJ0T2YoJ2RheScpXG5cdFx0XHRjb25zdCBkYXlFbmQgPSBkYXlEYXRlLmVuZE9mKCdkYXknKVxuXHRcdFx0Y29uc3QgZXZlbnRzT25EYXkgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoZGF5U3RhcnQsIGRheUVuZClcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZGF0ZTogZGF5RGF0ZSxcblx0XHRcdFx0ZGF5S2V5OiBkYXlEYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpLFxuXHRcdFx0XHRpc0luQ3VycmVudE1vbnRoOiBkYXlEYXRlLm1vbnRoKCkgPT09IG1vbnRoRGF0ZS5tb250aCgpLFxuXHRcdFx0XHRpc1RvZGF5OiBkYXlEYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5JyksXG5cdFx0XHRcdGlzU2VsZWN0ZWQ6IGRheURhdGUuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5JyksXG5cdFx0XHRcdGV2ZW50Q291bnQ6IGV2ZW50c09uRGF5Lmxlbmd0aCxcblx0XHRcdH1cblx0XHR9KVxuXHR9XG5cblx0Y29uc3QgbmF2aWdhdGVUb0RhdGUgPSAoXG5cdFx0ZGF0ZTogZGF5anMuRGF5anMsXG5cdFx0dmlldzogJ21vbnRoJyB8ICdkYXknLFxuXHRcdGV2ZW50PzogUmVhY3QuTW91c2VFdmVudFxuXHQpID0+IHtcblx0XHRldmVudD8uc3RvcFByb3BhZ2F0aW9uKClcblx0XHRzZWxlY3REYXRlKGRhdGUpXG5cdFx0c2V0Vmlldyh2aWV3KVxuXHR9XG5cblx0Y29uc3QgZ2V0RXZlbnRDb3VudExhYmVsID0gKGNvdW50OiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuXHRcdGNvbnN0IGV2ZW50V29yZCA9IGNvdW50ID09PSAxID8gdCgnZXZlbnQnKSA6IHQoJ2V2ZW50cycpXG5cdFx0cmV0dXJuIGAke2NvdW50fSAke2V2ZW50V29yZH1gXG5cdH1cblxuXHRjb25zdCBnZXREYXlDbGFzc05hbWUgPSAoZGF5OiBEYXlEYXRhKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCBiYXNlQ2xhc3MgPVxuXHRcdFx0J3JlbGF0aXZlIGZsZXggYXNwZWN0LXNxdWFyZSB3LWZ1bGwgY3Vyc29yLXBvaW50ZXIgZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGhvdmVyOmJnLWFjY2VudCByb3VuZGVkLXNtIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTIwMCdcblx0XHRjb25zdCBvdXRzaWRlTW9udGhDbGFzcyA9IGRheS5pc0luQ3VycmVudE1vbnRoXG5cdFx0XHQ/ICcnXG5cdFx0XHQ6ICd0ZXh0LW11dGVkLWZvcmVncm91bmQgb3BhY2l0eS01MCdcblx0XHRjb25zdCB0b2RheUNsYXNzID0gZGF5LmlzVG9kYXlcblx0XHRcdD8gJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1mdWxsJ1xuXHRcdFx0OiAnJ1xuXHRcdGNvbnN0IHNlbGVjdGVkQ2xhc3MgPVxuXHRcdFx0ZGF5LmlzU2VsZWN0ZWQgJiYgIWRheS5pc1RvZGF5ID8gJ2JnLW11dGVkIHJvdW5kZWQtZnVsbCBmb250LWJvbGQnIDogJydcblx0XHRjb25zdCBoYXNFdmVudHNDbGFzcyA9XG5cdFx0XHRkYXkuZXZlbnRDb3VudCA+IDAgJiYgIWRheS5pc1RvZGF5ICYmICFkYXkuaXNTZWxlY3RlZCA/ICdmb250LW1lZGl1bScgOiAnJ1xuXG5cdFx0cmV0dXJuIGNuKFxuXHRcdFx0YmFzZUNsYXNzLFxuXHRcdFx0b3V0c2lkZU1vbnRoQ2xhc3MsXG5cdFx0XHR0b2RheUNsYXNzLFxuXHRcdFx0c2VsZWN0ZWRDbGFzcyxcblx0XHRcdGhhc0V2ZW50c0NsYXNzXG5cdFx0KVxuXHR9XG5cblx0Y29uc3QgZ2V0RXZlbnREb3RDbGFzc05hbWUgPSAoY29sb3I6IHN0cmluZywgaXNUb2RheTogYm9vbGVhbik6IHN0cmluZyA9PiB7XG5cdFx0Y29uc3QgZG90Q29sb3IgPSBpc1RvZGF5ID8gJ2JnLXByaW1hcnktZm9yZWdyb3VuZCcgOiBjb2xvclxuXHRcdHJldHVybiBjbignaC1bM3B4XSB3LVszcHhdIHJvdW5kZWQtZnVsbCcsIGRvdENvbG9yKVxuXHR9XG5cblx0Y29uc3QgbW9udGhzRGF0YSA9IGdlbmVyYXRlTW9udGhzRGF0YSgpXG5cblx0cmV0dXJuIChcblx0XHQ8U2Nyb2xsQXJlYSBjbGFzc05hbWU9XCJoLWZ1bGxcIiBkYXRhLXRlc3RpZD1cInllYXItdmlld1wiPlxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9XCJncmlkIGF1dG8tcm93cy1mciBncmlkLWNvbHMtMSBnYXAtNCBwLTQgc206Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIlxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInllYXItZ3JpZFwiXG5cdFx0XHQ+XG5cdFx0XHRcdHttb250aHNEYXRhLm1hcCgobW9udGgsIG1vbnRoSW5kZXgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBkYXlzSW5Nb250aCA9IGdlbmVyYXRlRGF5c0Zvck1vbnRoKG1vbnRoLmRhdGUpXG5cdFx0XHRcdFx0Y29uc3QgYW5pbWF0aW9uRGVsYXkgPSBtb250aEluZGV4ICogMC4wNVxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaG92ZXI6Ym9yZGVyLXByaW1hcnkgZmxleCBmbGV4LWNvbCByb3VuZGVkLWxnIGJvcmRlciBwLTMgdGV4dC1sZWZ0IHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBob3ZlcjpzaGFkb3ctbWRcIlxuXHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHllYXItbW9udGgtJHttb250aC5tb250aEtleX1gfVxuXHRcdFx0XHRcdFx0XHRrZXk9e21vbnRoLm1vbnRoS2V5fVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWItMiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIlxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5PXthbmltYXRpb25EZWxheX1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2Btb250aC0ke21vbnRoSW5kZXh9YH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgbW9udGgtJHttb250aEluZGV4fWB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtbWVkaXVtIGhvdmVyOnVuZGVybGluZSBjdXJzb3ItcG9pbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHllYXItbW9udGgtdGl0bGUtJHttb250aC5tb250aEtleX1gfVxuXHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gbmF2aWdhdGVUb0RhdGUobW9udGguZGF0ZSwgJ21vbnRoJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHR7bW9udGgubmFtZX1cblx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cblxuXHRcdFx0XHRcdFx0XHRcdHttb250aC5ldmVudENvdW50ID4gMCAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtZnVsbCBweC0yIHB5LTEgdGV4dC14c1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgeWVhci1tb250aC1ldmVudC1jb3VudC0ke21vbnRoLm1vbnRoS2V5fWB9XG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtnZXRFdmVudENvdW50TGFiZWwobW9udGguZXZlbnRDb3VudCl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cblx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTcgZ2FwLVsxcHhdIHRleHQtWzAuNnJlbV1cIlxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgeWVhci1taW5pLWNhbGVuZGFyLSR7bW9udGgubW9udGhLZXl9YH1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHtEQVlfSEVBREVSX05BTUVTLm1hcCgoZGF5TmFtZSwgaGVhZGVySW5kZXgpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGgtMyB0ZXh0LWNlbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17YGhlYWRlci0ke2hlYWRlckluZGV4fWB9XG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtkYXlOYW1lfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cblx0XHRcdFx0XHRcdFx0XHR7ZGF5c0luTW9udGgubWFwKChkYXkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGRheVRlc3RJZCA9IGB5ZWFyLWRheS0ke21vbnRoLmRhdGUuZm9ybWF0KCdZWVlZLU1NJyl9LSR7ZGF5LmRheUtleX1gXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBoYXNFdmVudHMgPSBkYXkuZXZlbnRDb3VudCA+IDBcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHZpc2libGVEb3RDb3VudCA9IE1hdGgubWluKGRheS5ldmVudENvdW50LCAzKVxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgdmlzaWJsZURvdENvbG9ycyA9IEVWRU5UX0RPVF9DT0xPUlMuc2xpY2UoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGVEb3RDb3VudFxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXREYXlDbGFzc05hbWUoZGF5KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17ZGF5VGVzdElkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17ZGF5LmRheUtleX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoZSkgPT4gbmF2aWdhdGVUb0RhdGUoZGF5LmRhdGUsICdkYXknLCBlKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT17Z2V0RGF5VG9vbHRpcChkYXkuZXZlbnRDb3VudCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciBsZWFkaW5nLW5vbmVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtkYXkuZGF0ZS5kYXRlKCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e2hhc0V2ZW50cyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2Fic29sdXRlIGJvdHRvbS0wIGZsZXggdy1mdWxsIGp1c3RpZnktY2VudGVyIHNwYWNlLXgtWzFweF0nLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRheS5pc1RvZGF5ICYmICdib3R0b20tWzFweF0nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt2aXNpYmxlRG90Q29sb3JzLm1hcCgoZG90Q29sb3IpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXRFdmVudERvdENsYXNzTmFtZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZG90Q29sb3IsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRheS5pc1RvZGF5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtkb3RDb2xvcn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdH0pfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIC8+XG5cdFx0PC9TY3JvbGxBcmVhPlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFllYXJWaWV3XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEV2ZW50Rm9ybVByb3BzIH0gZnJvbSAnQC9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybSdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHtcblx0Q2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGUsXG5cdENlbGxDbGlja0luZm8sXG5cdFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckVuZ2luZSB9IGZyb20gJ0AvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZSdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgR0FQX0JFVFdFRU5fRUxFTUVOVFMgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucywgVHJhbnNsYXRvckZ1bmN0aW9uIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhclZpZXcsIFRpbWVGb3JtYXQgfSBmcm9tICdAL3R5cGVzJ1xuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0J1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyUHJvdmlkZXJQcm9wcyB7XG5cdGNoaWxkcmVuOiBSZWFjdE5vZGVcblx0ZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG5cdGZpcnN0RGF5T2ZXZWVrPzogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG5cdGluaXRpYWxWaWV3PzogQ2FsZW5kYXJWaWV3XG5cdGluaXRpYWxEYXRlPzogZGF5anMuRGF5anNcblx0cmVuZGVyRXZlbnQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IFJlYWN0Tm9kZVxuXHRvbkV2ZW50Q2xpY2s/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DZWxsQ2xpY2s/OiAoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4gdm9pZFxuXHRvblZpZXdDaGFuZ2U/OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdG9uRXZlbnRBZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudFVwZGF0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50RGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRGF0ZUNoYW5nZT86IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRsb2NhbGU/OiBzdHJpbmdcblx0dGltZXpvbmU/OiBzdHJpbmdcblx0ZGlzYWJsZUNlbGxDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZUV2ZW50Q2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVEcmFnQW5kRHJvcD86IGJvb2xlYW5cblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0ZXZlbnRTcGFjaW5nPzogbnVtYmVyXG5cdHN0aWNreVZpZXdIZWFkZXI/OiBib29sZWFuXG5cdHZpZXdIZWFkZXJDbGFzc05hbWU/OiBzdHJpbmdcblx0aGVhZGVyQ29tcG9uZW50PzogUmVhY3ROb2RlIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY29tcG9uZW50XG5cdGhlYWRlckNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNsYXNzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHJlbmRlckV2ZW50Rm9ybT86IChwcm9wczogRXZlbnRGb3JtUHJvcHMpID0+IFJlYWN0Tm9kZVxuXHQvLyBUcmFuc2xhdGlvbiBvcHRpb25zIC0gcHJvdmlkZSBlaXRoZXIgdHJhbnNsYXRpb25zIG9iamVjdCBPUiB0cmFuc2xhdG9yIGZ1bmN0aW9uXG5cdHRyYW5zbGF0aW9ucz86IFRyYW5zbGF0aW9uc1xuXHR0cmFuc2xhdG9yPzogVHJhbnNsYXRvckZ1bmN0aW9uXG5cdHRpbWVGb3JtYXQ/OiBUaW1lRm9ybWF0XG5cdGNsYXNzZXNPdmVycmlkZT86IENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yPzogKFxuXHRcdHByb3BzOiBSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzXG5cdCkgPT4gUmVhY3ROb2RlXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzPzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgQ2FsZW5kYXJQcm92aWRlcjogUmVhY3QuRkM8Q2FsZW5kYXJQcm92aWRlclByb3BzPiA9ICh7XG5cdGNoaWxkcmVuLFxuXHRldmVudHMgPSBbXSxcblx0Zmlyc3REYXlPZldlZWsgPSAwLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRyZW5kZXJFdmVudCxcblx0b25FdmVudENsaWNrLFxuXHRvbkNlbGxDbGljayxcblx0b25WaWV3Q2hhbmdlLFxuXHRvbkV2ZW50QWRkLFxuXHRvbkV2ZW50VXBkYXRlLFxuXHRvbkV2ZW50RGVsZXRlLFxuXHRvbkRhdGVDaGFuZ2UsXG5cdGxvY2FsZSxcblx0dGltZXpvbmUsXG5cdGRpc2FibGVDZWxsQ2xpY2ssXG5cdGRpc2FibGVFdmVudENsaWNrLFxuXHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdGRheU1heEV2ZW50cyxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdGhlYWRlckNvbXBvbmVudCxcblx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRidXNpbmVzc0hvdXJzLFxuXHRyZW5kZXJFdmVudEZvcm0sXG5cdHRyYW5zbGF0aW9ucyxcblx0dHJhbnNsYXRvcixcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0aGlkZU5vbkJ1c2luZXNzSG91cnMgPSBmYWxzZSxcbn0pID0+IHtcblx0Ly8gVXNlIHRoZSBjYWxlbmRhciBlbmdpbmVcblx0Y29uc3QgY2FsZW5kYXJFbmdpbmUgPSB1c2VDYWxlbmRhckVuZ2luZSh7XG5cdFx0ZXZlbnRzLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGluaXRpYWxWaWV3LFxuXHRcdGluaXRpYWxEYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0b25FdmVudEFkZCxcblx0XHRvbkV2ZW50VXBkYXRlLFxuXHRcdG9uRXZlbnREZWxldGUsXG5cdFx0b25EYXRlQ2hhbmdlLFxuXHRcdG9uVmlld0NoYW5nZSxcblx0XHRsb2NhbGUsXG5cdFx0dGltZXpvbmUsXG5cdFx0dHJhbnNsYXRpb25zLFxuXHRcdHRyYW5zbGF0b3IsXG5cdH0pXG5cblx0Y29uc3QgZWRpdEV2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KGV2ZW50KVxuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0fSxcblx0XHRbY2FsZW5kYXJFbmdpbmVdXG5cdClcblxuXHQvLyBDdXN0b20gaGFuZGxlcnMgdGhhdCBjYWxsIGV4dGVybmFsIGNhbGxiYWNrc1xuXHRjb25zdCBoYW5kbGVFdmVudENsaWNrID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUV2ZW50Q2xpY2spIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cdFx0XHRpZiAob25FdmVudENsaWNrKSB7XG5cdFx0XHRcdG9uRXZlbnRDbGljayhldmVudClcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVkaXRFdmVudChldmVudClcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtkaXNhYmxlRXZlbnRDbGljaywgb25FdmVudENsaWNrLCBlZGl0RXZlbnRdXG5cdClcblxuXHRjb25zdCBoYW5kbGVEYXRlQ2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4ge1xuXHRcdFx0aWYgKGRpc2FibGVDZWxsQ2xpY2spIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cblx0XHRcdGlmIChvbkNlbGxDbGljaykge1xuXHRcdFx0XHRvbkNlbGxDbGljayhpbmZvKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2FsZW5kYXJFbmdpbmUub3BlbkV2ZW50Rm9ybShpbmZvKVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W29uQ2VsbENsaWNrLCBkaXNhYmxlQ2VsbENsaWNrLCBjYWxlbmRhckVuZ2luZV1cblx0KVxuXG5cdC8vIENyZWF0ZSB0aGUgY29udGV4dCB2YWx1ZVxuXHRjb25zdCBjb250ZXh0VmFsdWUgPSB1c2VNZW1vKFxuXHRcdCgpID0+ICh7XG5cdFx0XHRjdXJyZW50RGF0ZTogY2FsZW5kYXJFbmdpbmUuY3VycmVudERhdGUsXG5cdFx0XHR2aWV3OiBjYWxlbmRhckVuZ2luZS52aWV3LFxuXHRcdFx0ZXZlbnRzOiBjYWxlbmRhckVuZ2luZS5ldmVudHMsXG5cdFx0XHRyYXdFdmVudHM6IGNhbGVuZGFyRW5naW5lLnJhd0V2ZW50cyxcblx0XHRcdGN1cnJlbnRMb2NhbGU6IGNhbGVuZGFyRW5naW5lLmN1cnJlbnRMb2NhbGUsXG5cdFx0XHRpc0V2ZW50Rm9ybU9wZW46IGNhbGVuZGFyRW5naW5lLmlzRXZlbnRGb3JtT3Blbixcblx0XHRcdHNlbGVjdGVkRXZlbnQ6IGNhbGVuZGFyRW5naW5lLnNlbGVjdGVkRXZlbnQsXG5cdFx0XHRzZWxlY3RlZERhdGU6IGNhbGVuZGFyRW5naW5lLnNlbGVjdGVkRGF0ZSxcblx0XHRcdGZpcnN0RGF5T2ZXZWVrOiBjYWxlbmRhckVuZ2luZS5maXJzdERheU9mV2Vlayxcblx0XHRcdHNldEN1cnJlbnREYXRlOiBjYWxlbmRhckVuZ2luZS5zZXRDdXJyZW50RGF0ZSxcblx0XHRcdHNlbGVjdERhdGU6IGNhbGVuZGFyRW5naW5lLnNlbGVjdERhdGUsXG5cdFx0XHRzZXRWaWV3OiBjYWxlbmRhckVuZ2luZS5zZXRWaWV3LFxuXHRcdFx0bmV4dFBlcmlvZDogY2FsZW5kYXJFbmdpbmUubmV4dFBlcmlvZCxcblx0XHRcdHByZXZQZXJpb2Q6IGNhbGVuZGFyRW5naW5lLnByZXZQZXJpb2QsXG5cdFx0XHR0b2RheTogY2FsZW5kYXJFbmdpbmUudG9kYXksXG5cdFx0XHRhZGRFdmVudDogY2FsZW5kYXJFbmdpbmUuYWRkRXZlbnQsXG5cdFx0XHR1cGRhdGVFdmVudDogY2FsZW5kYXJFbmdpbmUudXBkYXRlRXZlbnQsXG5cdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudDogY2FsZW5kYXJFbmdpbmUudXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0XHRkZWxldGVFdmVudDogY2FsZW5kYXJFbmdpbmUuZGVsZXRlRXZlbnQsXG5cdFx0XHRkZWxldGVSZWN1cnJpbmdFdmVudDogY2FsZW5kYXJFbmdpbmUuZGVsZXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0XHRvcGVuRXZlbnRGb3JtOiBjYWxlbmRhckVuZ2luZS5vcGVuRXZlbnRGb3JtLFxuXHRcdFx0Y2xvc2VFdmVudEZvcm06IGNhbGVuZGFyRW5naW5lLmNsb3NlRXZlbnRGb3JtLFxuXHRcdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiBjYWxlbmRhckVuZ2luZS5nZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0XHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IGNhbGVuZGFyRW5naW5lLmZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHRcdHJlbmRlckV2ZW50LFxuXHRcdFx0b25FdmVudENsaWNrOiBoYW5kbGVFdmVudENsaWNrLFxuXHRcdFx0b25DZWxsQ2xpY2s6IGhhbmRsZURhdGVDbGljayxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHRcdFx0dDogY2FsZW5kYXJFbmdpbmUudCxcblx0XHRcdHRpbWVGb3JtYXQsXG5cdFx0XHRjbGFzc2VzT3ZlcnJpZGUsXG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdH0pLFxuXHRcdFtcblx0XHRcdGNhbGVuZGFyRW5naW5lLFxuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRoYW5kbGVFdmVudENsaWNrLFxuXHRcdFx0aGFuZGxlRGF0ZUNsaWNrLFxuXHRcdFx0bG9jYWxlLFxuXHRcdFx0dGltZXpvbmUsXG5cdFx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRdXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxDYWxlbmRhckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRWYWx1ZX0+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9DYWxlbmRhckNvbnRleHQuUHJvdmlkZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgQ2FsZW5kYXJEbmRDb250ZXh0IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQnXG5pbXBvcnQgeyBFdmVudEZvcm1EaWFsb2cgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtLWRpYWxvZydcbmltcG9ydCB7IEhlYWRlciB9IGZyb20gJ0AvY29tcG9uZW50cy9oZWFkZXInXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgRGF5VmlldyBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvZGF5LXZpZXcnXG5pbXBvcnQgeyBNb250aFZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9tb250aC12aWV3J1xuaW1wb3J0IFdlZWtWaWV3IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvd2Vlay12aWV3J1xuaW1wb3J0IFllYXJWaWV3IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy95ZWFyLXZpZXcveWVhci12aWV3J1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBDYWxlbmRhclByb3ZpZGVyIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyJ1xuLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWR1cGxpY2F0ZXNcbmltcG9ydCAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7XG5cdElsYW15Q2FsZW5kYXJQcm9wRXZlbnQsXG5cdElsYW15Q2FsZW5kYXJQcm9wcyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB7XG5cdERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRXRUVLX0RBWVNfTlVNQkVSX01BUCxcbn0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgbm9ybWFsaXplRXZlbnRzLCBzYWZlRGF0ZSB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBDYWxlbmRhckNvbnRlbnQ6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IHZpZXcsIGRheU1heEV2ZW50cyB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB2aWV3TWFwID0ge1xuXHRcdG1vbnRoOiA8TW9udGhWaWV3IGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfSBrZXk9XCJtb250aFwiIC8+LFxuXHRcdHdlZWs6IDxXZWVrVmlldyBrZXk9XCJ3ZWVrXCIgLz4sXG5cdFx0ZGF5OiA8RGF5VmlldyBrZXk9XCJkYXlcIiAvPixcblx0XHR5ZWFyOiA8WWVhclZpZXcga2V5PVwieWVhclwiIC8+LFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiIGRhdGEtdGVzdGlkPVwiaWxhbXktY2FsZW5kYXJcIj5cblx0XHRcdDxIZWFkZXIgY2xhc3NOYW1lPVwicC0xXCIgLz5cblx0XHRcdHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZVByZXNlbmNlIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuXHRcdFx0PENhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBoLVtjYWxjKDEwMCUtMy41cmVtKV1cIlxuXHRcdFx0XHRcdGRpcmVjdGlvbj1cImhvcml6b250YWxcIlxuXHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e3ZpZXd9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImJvcmRlciBoLWZ1bGwgdy1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1ib2R5XCI+XG5cdFx0XHRcdFx0XHR7dmlld01hcFt2aWV3XX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHQ8L0NhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdDxFdmVudEZvcm1EaWFsb2cgLz5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgSWxhbXlDYWxlbmRhcjogUmVhY3QuRkM8SWxhbXlDYWxlbmRhclByb3BzPiA9ICh7XG5cdGV2ZW50cyxcblx0Zmlyc3REYXlPZldlZWsgPSAnc3VuZGF5Jyxcblx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRpbml0aWFsRGF0ZSxcblx0ZGF5TWF4RXZlbnRzID0gREFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzID0gZmFsc2UsXG5cdC4uLnByb3BzXG59KSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PENhbGVuZGFyUHJvdmlkZXJcblx0XHRcdGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfVxuXHRcdFx0ZXZlbnRTcGFjaW5nPXtldmVudFNwYWNpbmd9XG5cdFx0XHRldmVudHM9e25vcm1hbGl6ZUV2ZW50czxJbGFteUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50PihldmVudHMpfVxuXHRcdFx0Zmlyc3REYXlPZldlZWs9e1dFRUtfREFZU19OVU1CRVJfTUFQW2ZpcnN0RGF5T2ZXZWVrXX1cblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzPXtoaWRlTm9uQnVzaW5lc3NIb3Vyc31cblx0XHRcdGluaXRpYWxEYXRlPXtzYWZlRGF0ZShpbml0aWFsRGF0ZSl9XG5cdFx0XHRpbml0aWFsVmlldz17aW5pdGlhbFZpZXd9XG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyPXtzdGlja3lWaWV3SGVhZGVyfVxuXHRcdFx0dGltZUZvcm1hdD17dGltZUZvcm1hdH1cblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWU9e3ZpZXdIZWFkZXJDbGFzc05hbWV9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENhbGVuZGFyQ29udGVudCAvPlxuXHRcdDwvQ2FsZW5kYXJQcm92aWRlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgUmVzb3VyY2VFdmVudEdyaWRQcm9wcyB7XG5cdC8qKlxuXHQgKiBBcnJheSBvZiBkYXlzIHRvIGRpc3BsYXkgaW4gdGhlIGdyaWRcblx0ICovXG5cdGRheXM6IGRheWpzLkRheWpzW10gfCBkYXlqcy5EYXlqc1tdW11cblx0LyoqIFRoZSB0eXBlIG9mIGdyaWQgdG8gZGlzcGxheSAtICdkYXknIGZvciBkYXkgdmlldywgJ2hvdXInIGZvciB3ZWVrIHZpZXdcblx0ICogKGFmZmVjdHMgZXZlbnQgcG9zaXRpb25pbmcgbG9naWMpXG5cdCAqL1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdC8qKlxuXHQgKiBDaGlsZHJlbiB3aWxsIGJlIHJlbmRlcmVkIGFzIGhlYWRlcnMgYWJvdmUgdGhlIGdyaWRcblx0ICogKGUuZy4sIGZvciBkYXkgbmFtZXMgaW4gbW9udGggdmlldylcblx0ICovXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzZXM/OiB7IGhlYWRlcj86IHN0cmluZzsgYm9keT86IHN0cmluZzsgc2Nyb2xsPzogc3RyaW5nOyBjZWxsPzogc3RyaW5nIH1cbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlRXZlbnRHcmlkOiBSZWFjdC5GQzxSZXNvdXJjZUV2ZW50R3JpZFByb3BzPiA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdGNoaWxkcmVuLFxuXHRjbGFzc2VzLFxufSkgPT4ge1xuXHRjb25zdCB7IGdldFZpc2libGVSZXNvdXJjZXMgfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB2aXNpYmxlUmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cblx0Y29uc3QgY29sdW1ucyA9IGRheXMubWFwKChkYXkpID0+IHtcblx0XHRjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShkYXkpXG5cdFx0cmV0dXJuIHtcblx0XHRcdGlkOiBgY29sLSR7aXNBcnJheSA/IGRheVswXT8uZm9ybWF0KCdZWVlZLU1NLUREJykgOiBkYXkudG9JU09TdHJpbmcoKX1gLFxuXHRcdFx0ZGF5OiBpc0FycmF5ID8gdW5kZWZpbmVkIDogZGF5LFxuXHRcdFx0ZGF5czogaXNBcnJheSA/IGRheSA6IHVuZGVmaW5lZCxcblx0XHRcdGNsYXNzTmFtZTogY2xhc3Nlcz8uY2VsbCxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdH1cblx0fSlcblxuXHRjb25zdCByb3dzID0gdmlzaWJsZVJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdGlkOiByZXNvdXJjZS5pZCxcblx0XHR0aXRsZTogcmVzb3VyY2UudGl0bGUsXG5cdFx0cmVzb3VyY2U6IHJlc291cmNlLFxuXHRcdGNvbHVtbnMsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PEhvcml6b250YWxHcmlkXG5cdFx0XHRjbGFzc2VzPXtjbGFzc2VzfVxuXHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXswfVxuXHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0cm93cz17cm93c31cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9Ib3Jpem9udGFsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlIb3Jpem9udGFsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdHQsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHR0aW1lRm9ybWF0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdH0gPSB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0Ly8gR2VuZXJhdGUgdGltZSBjb2x1bW5zIChob3VybHkgc2xvdHMpXG5cdGNvbnN0IGRheUhvdXJzID0gZ2V0Vmlld0hvdXJzKHtcblx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGFsbERhdGVzOiBbY3VycmVudERhdGVdLFxuXHR9KVxuXG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlRXZlbnRHcmlkXG5cdFx0XHRjbGFzc2VzPXt7XG5cdFx0XHRcdGhlYWRlcjogJ21pbi13LWZ1bGwnLFxuXHRcdFx0XHRib2R5OiAnbWluLXctZnVsbCcsXG5cdFx0XHRcdGNlbGw6ICdtaW4tdy0yMCBmbGV4LTEnLFxuXHRcdFx0fX1cblx0XHRcdGRheXM9e2RheUhvdXJzfVxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctMjAgc206dy00MCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVzb3VyY2VzJyl9PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgZmxleCBmbGV4LWNvbFwiPlxuXHRcdFx0XHR7LyogVGltZSBoZWFkZXIgcm93ICovfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMlwiPlxuXHRcdFx0XHRcdHtkYXlIb3Vycy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGlzTm93SG91ciA9IGNvbC5pc1NhbWUoZGF5anMoKSwgJ2hvdXInKVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLWRheS1oZWFkZXItJHtjb2wudG9JU09TdHJpbmcoKX1gXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J21pbi13LTIwIGZsZXgtMSBib3JkZXItYiBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC14cyBzaHJpbmstMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc05vd0hvdXIgJiYgJ2JnLWJsdWUtNTAgdGV4dC1ibHVlLTYwMCBmb250LW1lZGl1bSdcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgcmVzb3VyY2UtZGF5LXRpbWUtbGFiZWwtJHtjb2wuZm9ybWF0KCdISCcpfWB9XG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2Ake2tleX0tYW5pbWF0ZWRgfVxuXHRcdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2Ake2tleX0tbW90aW9uYH1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcblx0XHRcdFx0XHRcdFx0XHRcdGhvdXI6ICdudW1lcmljJyxcblx0XHRcdFx0XHRcdFx0XHRcdGhvdXIxMjogdGltZUZvcm1hdCA9PT0gJzEyLWhvdXInLFxuXHRcdFx0XHRcdFx0XHRcdH0pLmZvcm1hdChjb2wudG9EYXRlKCkpfVxuXHRcdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1Jlc291cmNlRXZlbnRHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQWxsRGF5Q2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LWNlbGwnXG5pbXBvcnQgeyBBbGxEYXlSb3cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlWZXJ0aWNhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRnZXRWaXNpYmxlUmVzb3VyY2VzLFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0dGltZUZvcm1hdCxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHR9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHJlc291cmNlcyA9IGdldFZpc2libGVSZXNvdXJjZXMoKVxuXHRjb25zdCBob3VycyA9IGdldFZpZXdIb3Vycyh7XG5cdFx0cmVmZXJlbmNlRGF0ZTogY3VycmVudERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRhbGxEYXRlczogW2N1cnJlbnREYXRlXSxcblx0fSlcblxuXHRjb25zdCBmaXJzdENvbCA9IHtcblx0XHRpZDogJ3RpbWUtY29sJyxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRkYXlzOiBob3Vycyxcblx0XHRjbGFzc05hbWU6XG5cdFx0XHQnc2hyaW5rLTAgdy0xNiBtaW4tdy0xNiBtYXgtdy0xNiBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCcsXG5cdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0XHRub0V2ZW50czogdHJ1ZSxcblx0XHRyZW5kZXJDZWxsOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHAtMiB0ZXh0LXJpZ2h0IHRleHQtWzEwcHhdIHNtOnRleHQteHMgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cblx0XHRcdFx0e0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuXHRcdFx0XHRcdGhvdXI6ICdudW1lcmljJyxcblx0XHRcdFx0XHRob3VyMTI6IHRpbWVGb3JtYXQgPT09ICcxMi1ob3VyJyxcblx0XHRcdFx0fSkuZm9ybWF0KGRhdGUudG9EYXRlKCkpfVxuXHRcdFx0PC9kaXY+XG5cdFx0KSxcblx0fVxuXG5cdGNvbnN0IGNvbHVtbnMgPSByZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKHtcblx0XHRpZDogYGRheS1jb2wtJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX0tcmVzb3VyY2UtJHtyZXNvdXJjZS5pZH1gLFxuXHRcdHJlc291cmNlSWQ6IHJlc291cmNlLmlkLFxuXHRcdHJlc291cmNlLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGRheTogY3VycmVudERhdGUsXG5cdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8VmVydGljYWxHcmlkXG5cdFx0XHRhbGxEYXlSb3c9e1xuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsXCI+XG5cdFx0XHRcdFx0PEFsbERheUNlbGwgLz5cblx0XHRcdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+IChcblx0XHRcdFx0XHRcdDxBbGxEYXlSb3dcblx0XHRcdFx0XHRcdFx0Y2xhc3Nlcz17eyBjZWxsOiAnbWluLXctNTAnIH19XG5cdFx0XHRcdFx0XHRcdGRheXM9e1tjdXJyZW50RGF0ZV19XG5cdFx0XHRcdFx0XHRcdGtleT17YHJlc291cmNlLWFsbGRheS1yb3ctJHtyZXNvdXJjZS5pZH1gfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRcdHNob3dTcGFjZXI9e2ZhbHNlfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHR9XG5cdFx0XHRjZWxsU2xvdHM9e1swLCAxNSwgMzAsIDQ1XX1cblx0XHRcdGNsYXNzZXM9e3sgYm9keTogJ3ctZnVsbCcsIGhlYWRlcjogJ3ctZnVsbCcgfX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgLi4uY29sdW1uc119XG5cdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLWRheVwiXG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdD5cblx0XHRcdHsvKiBIZWFkZXIgKi99XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17J2ZsZXggYm9yZGVyLWIgaC0xMiBmbGV4LTEnfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLW1vbnRoLWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic2hyaW5rLTAgYm9yZGVyLXIgdy0xNiBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiIC8+XG5cdFx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKFxuXHRcdFx0XHRcdDxSZXNvdXJjZUNlbGxcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm1pbi13LTUwIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRrZXk9e2ByZXNvdXJjZS1jZWxsLSR7cmVzb3VyY2UuaWR9YH1cblx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpKX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZURheUhvcml6b250YWwgfSBmcm9tICcuL3Jlc291cmNlLWRheS1ob3Jpem9udGFsJ1xuaW1wb3J0IHsgUmVzb3VyY2VEYXlWZXJ0aWNhbCB9IGZyb20gJy4vcmVzb3VyY2UtZGF5LXZlcnRpY2FsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBvcmllbnRhdGlvbiB9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGlmIChvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuXHRcdHJldHVybiA8UmVzb3VyY2VEYXlWZXJ0aWNhbCAvPlxuXHR9XG5cblx0cmV0dXJuIDxSZXNvdXJjZURheUhvcml6b250YWwgLz5cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgUmVzb3VyY2VFdmVudEdyaWQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvcmVzb3VyY2UtZXZlbnQtZ3JpZCdcbmltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBnZXRNb250aERheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VNb250aEhvcml6b250YWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB0IH0gPSB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0Ly8gR2VuZXJhdGUgY2FsZW5kYXIgZ3JpZCAtIGRheXMgb2YgdGhlIG1vbnRoXG5cdGNvbnN0IG1vbnRoRGF5cyA9IHVzZU1lbW88ZGF5anMuRGF5anNbXT4oKCkgPT4ge1xuXHRcdHJldHVybiBnZXRNb250aERheXMoY3VycmVudERhdGUpXG5cdH0sIFtjdXJyZW50RGF0ZV0pXG5cblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VFdmVudEdyaWQgZGF5cz17bW9udGhEYXlzfT5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidy0yMCBzbTp3LTQwIGJvcmRlci1iIGJvcmRlci1yIHNocmluay0wIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXNvdXJjZXMnKX08L2Rpdj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHR7bW9udGhEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBrZXkgPSBgcmVzb3VyY2UtbW9udGgtaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9YFxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy0yMCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBmbGV4LWNvbFwiXG5cdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2Ake2tleX0tbW90aW9uYH1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1tZWRpdW1cIj57ZGF5LmZvcm1hdCgnRCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnZGRkJyl9XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJlc291cmNlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZU1vbnRoVmVydGljYWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBnZXRWaXNpYmxlUmVzb3VyY2VzIH0gPSB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgcmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cdGNvbnN0IHN0YXJ0T2ZNb250aCA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcblx0Y29uc3QgZGF5c0luTW9udGggPSBBcnJheS5mcm9tKFxuXHRcdHsgbGVuZ3RoOiBjdXJyZW50RGF0ZS5kYXlzSW5Nb250aCgpIH0sXG5cdFx0KF8sIGkpID0+IHN0YXJ0T2ZNb250aC5hZGQoaSwgJ2RheScpXG5cdClcblxuXHRjb25zdCBmaXJzdENvbCA9IHtcblx0XHRpZDogJ2RhdGUtY29sJyxcblx0XHRkYXlzOiBkYXlzSW5Nb250aCxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRjbGFzc05hbWU6XG5cdFx0XHQnc2hyaW5rLTAgdy0xNiBtaW4tdy0xNiBtYXgtdy0xNiBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCcsXG5cdFx0Z3JpZFR5cGU6ICdkYXknIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHQ8c3Bhbj57ZGF0ZS5mb3JtYXQoJ0QnKX08L3NwYW4+XG5cdFx0XHRcdDxzcGFuPntkYXRlLmZvcm1hdCgnZGRkJyl9PC9zcGFuPlxuXHRcdFx0PC9kaXY+XG5cdFx0KSxcblx0fVxuXG5cdGNvbnN0IGNvbHVtbnMgPSByZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKHtcblx0XHRpZDogYG1vbnRoLWNvbC1yZXNvdXJjZS0ke3Jlc291cmNlLmlkfWAsXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0cmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG5cdFx0ZGF5czogZGF5c0luTW9udGgsXG5cdFx0Z3JpZFR5cGU6ICdkYXknIGFzIGNvbnN0LFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGNsYXNzZXM9e3sgaGVhZGVyOiAndy1mdWxsJywgYm9keTogJ3ctZnVsbCcgfX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgLi4uY29sdW1uc119XG5cdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLW1vbnRoLXZlcnRpY2FsLWdyaWRcIlxuXHRcdD5cblx0XHRcdHsvKiBIZWFkZXIgKi99XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17J2ZsZXggYm9yZGVyLWIgaC0xMiBmbGV4LTEnfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLW1vbnRoLWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic2hyaW5rLTAgYm9yZGVyLXIgdy0xNiBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiIC8+XG5cdFx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKFxuXHRcdFx0XHRcdDxSZXNvdXJjZUNlbGxcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm1pbi13LTUwIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRrZXk9e2ByZXNvdXJjZS1jZWxsLSR7cmVzb3VyY2UuaWR9YH1cblx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpKX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbCB9IGZyb20gJy4vcmVzb3VyY2UtbW9udGgtaG9yaXpvbnRhbCdcbmltcG9ydCB7IFJlc291cmNlTW9udGhWZXJ0aWNhbCB9IGZyb20gJy4vcmVzb3VyY2UtbW9udGgtdmVydGljYWwnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZU1vbnRoVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgb3JpZW50YXRpb24gfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRpZiAob3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcpIHtcblx0XHRyZXR1cm4gPFJlc291cmNlTW9udGhWZXJ0aWNhbCAvPlxuXHR9XG5cblx0cmV0dXJuIDxSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbCAvPlxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrSG9yaXpvbnRhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHR0LFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0dGltZUZvcm1hdCxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHR9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdC8vIEdlbmVyYXRlIHdlZWsgZGF5c1xuXHRjb25zdCB3ZWVrRGF5cyA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKSxcblx0XHRbY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrXVxuXHQpXG5cblx0Ly8gR2VuZXJhdGUgdGltZSBjb2x1bW5zIChob3VybHkgc2xvdHMpXG5cdGNvbnN0IHdlZWtIb3VycyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdHJldHVybiB3ZWVrRGF5cy5tYXAoKGRheSkgPT5cblx0XHRcdGdldFZpZXdIb3Vycyh7XG5cdFx0XHRcdHJlZmVyZW5jZURhdGU6IGRheSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHR9KVxuXHRcdClcblx0fSwgW3dlZWtEYXlzLCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3Vyc10pXG5cblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VFdmVudEdyaWRcblx0XHRcdGNsYXNzZXM9e3tcblx0XHRcdFx0aGVhZGVyOiAnaC0yNCBtaW4tdy1mdWxsJyxcblx0XHRcdFx0Ym9keTogJ21pbi13LWZ1bGwnLFxuXHRcdFx0XHRjZWxsOiAnbWluLXctMjAgZmxleC0xJyxcblx0XHRcdH19XG5cdFx0XHRkYXlzPXt3ZWVrSG91cnN9XG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidy0yMCBzbTp3LTQwIGJvcmRlci1iIGJvcmRlci1yIHNocmluay0wIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXNvdXJjZXMnKX08L2Rpdj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBmbGV4IGZsZXgtY29sXCI+XG5cdFx0XHRcdHsvKiBEYXkgaGVhZGVyIHJvdyAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTJcIj5cblx0XHRcdFx0XHR7d2Vla0RheXMubWFwKChkYXksIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5Jylcblx0XHRcdFx0XHRcdGNvbnN0IGtleSA9IGByZXNvdXJjZS13ZWVrLWhlYWRlci0ke2RheS50b0lTT1N0cmluZygpfS1kYXlgXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J3Nocmluay0wIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBib3JkZXItYiBmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXIgZm9udC1tZWRpdW0nLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNUb2RheSAmJiAnYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS13ZWVrLWRheS1oZWFkZXJcIlxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInN0aWNreSBsZWZ0LTEvMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnTS9EJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBUaW1lIGhlYWRlciByb3cgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyIGJvcmRlci1iXCI+XG5cdFx0XHRcdFx0e3dlZWtIb3Vycy5mbGF0KCkubWFwKChjb2wsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpc05vd0hvdXIgPSBjb2wuaXNTYW1lKGRheWpzKCksICdob3VyJylcblx0XHRcdFx0XHRcdGNvbnN0IGtleSA9IGByZXNvdXJjZS13ZWVrLWhlYWRlci0ke2NvbC50b0lTT1N0cmluZygpfS1ob3VyYFxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdtaW4tdy0yMCBmbGV4LTEgYm9yZGVyLXIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC14cyBzaHJpbmstMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc05vd0hvdXIgJiYgJ2JnLWJsdWUtNTAgdGV4dC1ibHVlLTYwMCBmb250LW1lZGl1bSdcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgcmVzb3VyY2Utd2Vlay10aW1lLWxhYmVsLSR7Y29sLmZvcm1hdCgnSEgnKX1gfVxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDA1fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17YCR7a2V5fS1hbmltYXRlZGB9XG5cdFx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17YCR7a2V5fS1tb3Rpb25gfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuXHRcdFx0XHRcdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0aG91cjEyOiB0aW1lRm9ybWF0ID09PSAnMTItaG91cicsXG5cdFx0XHRcdFx0XHRcdFx0fSkuZm9ybWF0KGNvbC50b0RhdGUoKSl9XG5cdFx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH0pfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvUmVzb3VyY2VFdmVudEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbGxEYXlDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktY2VsbCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlV2Vla1ZlcnRpY2FsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHR0aW1lRm9ybWF0LFxuXHRcdHQsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0fSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCByZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblx0Ly8gR2VuZXJhdGUgd2VlayBkYXlzXG5cdGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspLFxuXHRcdFtjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCBob3VycyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdGdldFZpZXdIb3Vycyh7XG5cdFx0XHRcdHJlZmVyZW5jZURhdGU6IGN1cnJlbnREYXRlLFxuXHRcdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0YWxsRGF0ZXM6IHdlZWtEYXlzLFxuXHRcdFx0fSksXG5cdFx0W2N1cnJlbnREYXRlLCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3Vycywgd2Vla0RheXNdXG5cdClcblxuXHRjb25zdCBmaXJzdENvbCA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdGlkOiAndGltZS1jb2wnLFxuXHRcdFx0ZGF5czogaG91cnMsXG5cdFx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRcdGNsYXNzTmFtZTpcblx0XHRcdFx0J3Nocmluay0wIHctMTYgbWluLXctMTYgbWF4LXctMTYgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAnLFxuXHRcdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0XHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdFx0cmVuZGVyQ2VsbDogKGRhdGU6IGRheWpzLkRheWpzKSA9PiAoXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHAtMiB0ZXh0LXJpZ2h0IHRleHQtWzEwcHhdIHNtOnRleHQteHMgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cblx0XHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0XHRob3VyOiAnbnVtZXJpYycsXG5cdFx0XHRcdFx0XHRob3VyMTI6IHRpbWVGb3JtYXQgPT09ICcxMi1ob3VyJyxcblx0XHRcdFx0XHR9KS5mb3JtYXQoZGF0ZS50b0RhdGUoKSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KSxcblx0XHR9KSxcblx0XHRbaG91cnMsIGN1cnJlbnRMb2NhbGUsIHRpbWVGb3JtYXRdXG5cdClcblxuXHRjb25zdCBjb2x1bW5zID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0cmVzb3VyY2VzLmZsYXRNYXAoKHJlc291cmNlKSA9PlxuXHRcdFx0XHR3ZWVrRGF5cy5tYXAoKGRheSkgPT4gKHtcblx0XHRcdFx0XHRpZDogYGRheS1jb2wtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9LXJlc291cmNlLSR7cmVzb3VyY2UuaWR9YCxcblx0XHRcdFx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRcdFx0XHRyZXNvdXJjZSxcblx0XHRcdFx0XHRkYXksXG5cdFx0XHRcdFx0ZGF5czogaG91cnMubWFwKChoKSA9PlxuXHRcdFx0XHRcdFx0ZGF5LmhvdXIoaC5ob3VyKCkpLm1pbnV0ZSgwKS5zZWNvbmQoMCkubWlsbGlzZWNvbmQoMClcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0XHRcdH0pKVxuXHRcdFx0KSxcblx0XHRbcmVzb3VyY2VzLCB3ZWVrRGF5cywgaG91cnNdXG5cdClcblx0cmV0dXJuIChcblx0XHQ8VmVydGljYWxHcmlkXG5cdFx0XHRhbGxEYXlSb3c9e1xuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXhcIj5cblx0XHRcdFx0XHQ8QWxsRGF5Q2VsbCAvPlxuXHRcdFx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKFxuXHRcdFx0XHRcdFx0PEFsbERheVJvd1xuXHRcdFx0XHRcdFx0XHRjbGFzc2VzPXt7IGNlbGw6ICdtaW4tdy01MCcgfX1cblx0XHRcdFx0XHRcdFx0ZGF5cz17d2Vla0RheXN9XG5cdFx0XHRcdFx0XHRcdGtleT17YHJlc291cmNlLXdlZWstYWxsZGF5LXJvdy0ke3Jlc291cmNlLmlkfWB9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHRcdFx0c2hvd1NwYWNlcj17ZmFsc2V9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCkpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdH1cblx0XHRcdGNsYXNzZXM9e3sgaGVhZGVyOiAnaC0yNCcgfX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgLi4uY29sdW1uc119XG5cdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLXdlZWtcIlxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBmbGV4IGZsZXgtY29sXCI+XG5cdFx0XHRcdHsvKiBSZXNvdXJjZSBoZWFkZXIgcm93ICovfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMlwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic2hyaW5rLTAgdy0xNiBib3JkZXItciB6LTIwIGJnLWJhY2tncm91bmQgc3RpY2t5IGxlZnQtMFwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwicHgtMiBoLWZ1bGwgdy1mdWxsIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtZW5kIHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdHt0KCd3ZWVrJyl9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7cmVzb3VyY2UuaWR9LWRheWBcblxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHQnc2hyaW5rLTAgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXggaXRlbXMtY2VudGVyIHRleHQtY2VudGVyIGZvbnQtbWVkaXVtIHctW2NhbGMoNyp2YXIoLS1zcGFjaW5nKSo1MCldJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2Ake2tleX0tYW5pbWF0ZWRgfVxuXHRcdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2Ake2tleX0tbW90aW9uYH1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdDxSZXNvdXJjZUNlbGxcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtZnVsbCB3LWZ1bGwgZmxleC0xXCJcblx0XHRcdFx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInN0aWNreSBsZWZ0LTEvMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRydW5jYXRlXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtyZXNvdXJjZS50aXRsZX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDwvUmVzb3VyY2VDZWxsPlxuXHRcdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0ey8qIERhdGUgaGVhZGVyIHJvdyAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTJcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNocmluay0wIHctMTYgYm9yZGVyLXIgYm9yZGVyLWIgei0yMCBiZy1iYWNrZ3JvdW5kIHN0aWNreSBsZWZ0LTBcIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInB4LTIgaC1mdWxsIHctZnVsbCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLXN0YXJ0IGZvbnQtbWVkaXVtXCI+XG5cdFx0XHRcdFx0XHRcdHtjdXJyZW50RGF0ZS53ZWVrKCl9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0e2NvbHVtbnMubWFwKChjb2wsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBkYXkgPSBjb2wuZGF5XG5cdFx0XHRcdFx0XHRjb25zdCBrZXkgPSBgcmVzb3VyY2Utd2Vlay1oZWFkZXItJHtkYXkudG9JU09TdHJpbmcoKX0taG91ci0ke2NvbC5yZXNvdXJjZUlkfWBcblxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHQndy01MCBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgYm9yZGVyLWIgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC14cyBzaHJpbmstMCBiZy1iYWNrZ3JvdW5kJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2ByZXNvdXJjZS13ZWVrLXRpbWUtbGFiZWwtJHtkYXkuZm9ybWF0KCdISCcpfWB9XG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2Ake2tleX0tYW5pbWF0ZWRgfVxuXHRcdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2Ake2tleX0tbW90aW9uYH1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbVwiPntkYXkuZm9ybWF0KCdkZGQnKX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnTS9EJyl9XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH0pfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtIb3Jpem9udGFsIH0gZnJvbSAnLi9yZXNvdXJjZS13ZWVrLWhvcml6b250YWwnXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtWZXJ0aWNhbCB9IGZyb20gJy4vcmVzb3VyY2Utd2Vlay12ZXJ0aWNhbCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlV2Vla1ZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IG9yaWVudGF0aW9uIH0gPSB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKG9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XG5cdFx0cmV0dXJuIDxSZXNvdXJjZVdlZWtWZXJ0aWNhbCAvPlxuXHR9XG5cblx0cmV0dXJuIDxSZXNvdXJjZVdlZWtIb3Jpem9udGFsIC8+XG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IENhbGVuZGFyRG5kQ29udGV4dCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnLWFuZC1kcm9wL2NhbGVuZGFyLWRuZC1jb250ZXh0J1xuaW1wb3J0IHsgRXZlbnRGb3JtRGlhbG9nIH0gZnJvbSAnQC9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS1kaWFsb2cnXG5pbXBvcnQgeyBIZWFkZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvaGVhZGVyJ1xuaW1wb3J0IHsgUmVzb3VyY2VEYXlWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3J1xuaW1wb3J0IHsgUmVzb3VyY2VNb250aFZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldydcbmltcG9ydCB7IFJlc291cmNlV2Vla1ZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3J1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNhbGVuZGFyQm9keTogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgdmlldyB9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHZpZXdNYXAgPSB7XG5cdFx0bW9udGg6IDxSZXNvdXJjZU1vbnRoVmlldyBrZXk9XCJtb250aFwiIC8+LFxuXHRcdHdlZWs6IDxSZXNvdXJjZVdlZWtWaWV3IGtleT1cIndlZWtcIiAvPixcblx0XHRkYXk6IDxSZXNvdXJjZURheVZpZXcga2V5PVwiZGF5XCIgLz4sXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImlsYW15LXJlc291cmNlLWNhbGVuZGFyXCJcblx0XHQ+XG5cdFx0XHQ8SGVhZGVyIGNsYXNzTmFtZT1cInAtMVwiIC8+XG5cblx0XHRcdHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZWRTZWN0aW9uIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuXHRcdFx0PENhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBoLVtjYWxjKDEwMCUtMy41cmVtKV0gQGNvbnRhaW5lci9jYWxlbmRhci1ib2R5XCJcblx0XHRcdFx0XHRkaXJlY3Rpb249XCJob3Jpem9udGFsXCJcblx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXt2aWV3fVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJib3JkZXIgaC1mdWxsIHctZnVsbFwiIGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItYm9keVwiPlxuXHRcdFx0XHRcdFx0e3ZpZXdNYXBbdmlld119XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0PC9DYWxlbmRhckRuZENvbnRleHQ+XG5cblx0XHRcdHsvKiBFdmVudCBGb3JtIERpYWxvZyAqL31cblx0XHRcdDxFdmVudEZvcm1EaWFsb2cgLz5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJQcm92aWRlciB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHtcblx0SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcEV2ZW50LFxuXHRJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wcyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7XG5cdERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRXRUVLX0RBWVNfTlVNQkVSX01BUCxcbn0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgbm9ybWFsaXplRXZlbnRzLCBzYWZlRGF0ZSB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhckJvZHkgfSBmcm9tICcuL3Jlc291cmNlLWNhbGVuZGFyLWJvZHknXG5cbmV4cG9ydCBjb25zdCBJbGFteVJlc291cmNlQ2FsZW5kYXI6IFJlYWN0LkZDPElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BzPiA9ICh7XG5cdGV2ZW50cyA9IFtdLFxuXHRyZXNvdXJjZXMgPSBbXSxcblx0Zmlyc3REYXlPZldlZWsgPSAnc3VuZGF5Jyxcblx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRpbml0aWFsRGF0ZSxcblx0ZGlzYWJsZURyYWdBbmREcm9wID0gZmFsc2UsXG5cdGRheU1heEV2ZW50cyA9IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGV2ZW50U3BhY2luZyA9IEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHQuLi5wcm9wc1xufSkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXJcblx0XHRcdGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfVxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wPXtkaXNhYmxlRHJhZ0FuZERyb3B9XG5cdFx0XHRldmVudFNwYWNpbmc9e2V2ZW50U3BhY2luZ31cblx0XHRcdGV2ZW50cz17bm9ybWFsaXplRXZlbnRzPElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4oXG5cdFx0XHRcdGV2ZW50c1xuXHRcdFx0KX1cblx0XHRcdGZpcnN0RGF5T2ZXZWVrPXtXRUVLX0RBWVNfTlVNQkVSX01BUFtmaXJzdERheU9mV2Vla119XG5cdFx0XHRpbml0aWFsRGF0ZT17c2FmZURhdGUoaW5pdGlhbERhdGUpfVxuXHRcdFx0aW5pdGlhbFZpZXc9e2luaXRpYWxWaWV3fVxuXHRcdFx0cmVzb3VyY2VzPXtyZXNvdXJjZXN9XG5cdFx0XHR0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxSZXNvdXJjZUNhbGVuZGFyQm9keSAvPlxuXHRcdDwvUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyPlxuXHQpXG59XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiQUFJQSxnQkFBUyxlQ0pULGdCQUFTLGVDQVQsc0JBQ0EsMENBQ0EsOENBQ0EsK0NBQ0EsMkNBQ0EsdUNBQ0EseUNBQ0Esb0NBQ0Esd0NBQ0EsMkNBR0EsR0FBTSxPQUFPLEVBQU8sRUFDcEIsR0FBTSxPQUFPLEVBQVUsRUFDdkIsR0FBTSxPQUFPLEVBQWEsRUFDMUIsR0FBTSxPQUFPLEVBQWMsRUFDM0IsR0FBTSxPQUFPLEVBQVMsRUFDdEIsR0FBTSxPQUFPLEVBQU0sRUFDbkIsR0FBTSxPQUFPLEVBQVEsRUFDckIsR0FBTSxPQUFPLEVBQUcs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LE1BQU8sR0FBQyxHQUFELEdBQXVCLE9BQVEsRUFDdEMsS0FBTSxHQUFDLEdBQUQsR0FBc0IsTUFBTyxFQUNuQyxJQUFLLEdBQUMsR0FBRCxHQUFxQixLQUFNLENBQ2pDLEVBaUJjLEdBQ1IsRUFDRCxFQUNELEVBR0YsR0FBQyxHQUFELEVBQWlCLEdBQ2hCLDRDQzFCRyxJQUFNLEdBQThELEVBQzFFLFNBQVMsQ0FBQyxFQUNWLFlBQVksQ0FBQyxFQUNiLGlCQUFpQixTQUNqQixjQUFjLFFBQ2QsY0FDQSxxQkFBcUIsR0FDckIsZUFBZSxHQUNmLGFBQWEsVUFDYixlQUFlLE1BQ1osS0FDRSxDQUNMLE9BQ0MsR0FlRSxHQWZGLENBQ0MsYUFBYyxFQUNkLG1CQUFvQixFQUNwQixhQUFjLEVBQ2QsT0FBUSxHQUNQLENBQ0QsRUFDQSxlQUFnQixHQUFxQixHQUNyQyxZQUFhLEdBQVMsQ0FBVyxFQUNqQyxZQUFhLEVBQ2IsVUFBVyxFQUNYLFdBQVksS0FDUixFQVpMLFNBY0MsR0FBQyxHQUFELEVBQXNCLEVBQ3JCIiwKICAiZGVidWdJZCI6ICJFNThCMDc3RTlEREI3ODFGNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==