@ilamy/calendar 1.7.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
- import{RRule as EU}from"rrule";import{AnimatePresence as V4,motion as O4}from"motion/react";import{clsx as W4}from"clsx";import{twMerge as F4}from"tailwind-merge";import f0 from"dayjs";import q4 from"dayjs/plugin/isBetween.js";import U4 from"dayjs/plugin/isSameOrAfter.js";import z4 from"dayjs/plugin/isSameOrBefore.js";import _4 from"dayjs/plugin/localeData.js";import G4 from"dayjs/plugin/minMax.js";import K4 from"dayjs/plugin/timezone.js";import L4 from"dayjs/plugin/utc.js";import A4 from"dayjs/plugin/weekday.js";import N4 from"dayjs/plugin/weekOfYear.js";var X5,f4=(P,$,Z)=>{let J=$.prototype,X=Z.tz.setDefault;Z.tz.setDefault=(z)=>{return X5=z,X(z)};let{startOf:Q,endOf:Y}=J;function U(z,q){let L=z.$x?.$timezone||X5;if(!L)return q;let G=Z.tz(q.format("YYYY-MM-DDTHH:mm:ss"),L).utcOffset();if(q.utcOffset()!==G)return q.tz(L,!0);return q}J.startOf=function(z,q){let L=Q.call(this,z,q);return U(this,L)},J.endOf=Y};f0.extend(A4);f0.extend(N4);f0.extend(U4);f0.extend(z4);f0.extend(q4);f0.extend(G4);f0.extend(K4);f0.extend(L4);f0.extend(_4);f0.extend(f4);var Q5=(...P)=>{return f0.tz(...P)};Object.assign(Q5,f0);var S=Q5;var x0=1,Y5=24,I0=24,YP=4,q5="bg-secondary text-muted-foreground pointer-events-none",v0={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6};function N(...P){return F4(W4(P))}var EP=(P)=>{if(!P||P.length===0)return;return new Set(P.map(($)=>v0[$]))};function qP(P){if(P===void 0)return;if(S.isDayjs(P))return P;let $=S(P);return $.isValid()?$:void 0}var U5=(P,$)=>{let Z={...P};for(let J of $)delete Z[J];return Z};function DP(P){if(!P||!P.length)return[];return P.map(($)=>{return{...$,start:S.isDayjs($.start)?$.start:S($.start),end:S.isDayjs($.end)?$.end:S($.end)}})}import{jsx as z5}from"react/jsx-runtime";var B4={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}})},E=({children:P,transitionKey:$,delay:Z=0,className:J,direction:X="vertical",layout:Q,layoutId:Y,"data-testid":U,ref:z,...q})=>z5(V4,{mode:"wait",children:z5(O4.div,{animate:"visible",className:N("inline-block w-full",J),custom:{delay:Z,direction:X},"data-testid":U,exit:"exit",initial:"hidden",layout:Q,layoutId:Y,ref:z,variants:B4,...q,children:P},$)});E.displayName="AnimatedSection";import{DndContext as y4,MouseSensor as c4,pointerWithin as l4,TouchSensor as i4,useSensor as I5,useSensors as o4}from"@dnd-kit/core";import{useRef as S5,useState as u4}from"react";import{Slot as M4}from"@radix-ui/react-slot";import{cva as p4}from"class-variance-authority";import{jsx as S4}from"react/jsx-runtime";var I4=p4("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 C({className:P,variant:$,size:Z,asChild:J=!1,...X}){return S4(J?M4:"button",{className:N(I4({variant:$,size:Z,className:P})),"data-slot":"button",...X})}import*as Z0 from"@radix-ui/react-dialog";import{XIcon as R4}from"lucide-react";import{jsx as S0,jsxs as M2}from"react/jsx-runtime";function UP({...P}){return S0(Z0.Root,{"data-slot":"dialog",...P})}function T4({...P}){return S0(Z0.Portal,{"data-slot":"dialog-portal",...P})}function b4({className:P,...$}){return S0(Z0.Overlay,{className:N("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",P),"data-slot":"dialog-overlay",...$})}function zP({className:P,children:$,...Z}){return M2(T4,{"data-slot":"dialog-portal",children:[S0(b4,{}),M2(Z0.Content,{className:N("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg max-h-[90%]",P),"data-slot":"dialog-content",...Z,children:[$,M2(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:[S0(R4,{}),S0("span",{className:"sr-only",children:"Close"})]})]})]})}function _P({className:P,...$}){return S0("div",{className:N("flex flex-col gap-2 text-center sm:text-left",P),"data-slot":"dialog-header",...$})}function jP({className:P,...$}){return S0("div",{className:N("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",P),"data-slot":"dialog-footer",...$})}function GP({className:P,...$}){return S0(Z0.Title,{className:N("text-lg leading-none font-semibold",P),"data-slot":"dialog-title",...$})}function xP({className:P,...$}){return S0(Z0.Description,{className:N("text-muted-foreground text-sm",P),"data-slot":"dialog-description",...$})}import{useContext as O5}from"react";import{createContext as H4}from"react";var vP=H4(void 0);import{createContext as w4}from"react";var yP=w4(void 0);import{useCallback as Y0,useMemo as g4,useState as F5}from"react";import{useCallback as s,useEffect as S2,useMemo as f5,useRef as R2,useState as PP}from"react";import{RRule as m4}from"rrule";var cP=(P)=>{return new Date(Date.UTC(P.year(),P.month(),P.date(),P.hour(),P.minute(),P.second(),P.millisecond()))},k4=(P,$)=>{return $.year(P.getUTCFullYear()).month(P.getUTCMonth()).date(P.getUTCDate()).hour(P.getUTCHours()).minute(P.getUTCMinutes()).second(P.getUTCSeconds()).millisecond(P.getUTCMilliseconds())},KP=(P)=>{return Boolean(P.rrule||P.recurrenceId||P.uid)},y0=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},_5=(P,$)=>{let Z=y0($),J=P.findIndex((X)=>y0(X)===Z&&X.rrule&&!X.recurrenceId);if(J===-1)throw Error("Base recurring event not found");return J},G5=(P)=>P.start.subtract(1,"day").endOf("day").toDate(),p2=({event:P,currentEvents:$,startDate:Z,endDate:J})=>{if(!P.rrule)return[];try{let X=cP(P.start),Q=P.rrule.until?cP(S(P.rrule.until)):void 0,Y={...P.rrule,dtstart:X,until:Q},U=new m4(Y),z=y0(P),q=$.filter((_)=>_.recurrenceId&&y0(_)===z),L=P.end.diff(P.start),G=cP(Z.subtract(L,"millisecond")),W=cP(J);return U.between(G,W,!0).map((_,A)=>{let K=k4(_,P.start),F=q.find((k)=>qP(k.recurrenceId)?.isSame(K));if(F)return{...P,...F};let M=P.end.diff(P.start),p=K.add(M,"millisecond"),R=`${P.id}_${A}`,I=y0(P);return{...P,id:R,start:K,end:p,uid:I,rrule:void 0}}).filter((_)=>{if(P.exdates&&P.exdates.length>0){let F=_.start.toISOString();if(P.exdates?.includes(F))return!1}return _.start.isSameOrBefore(J)&&_.end.isSameOrAfter(Z)})}catch(X){throw Error(`Invalid RRULE options: ${JSON.stringify(P.rrule)}. Error: ${X instanceof Error?X.message:"Unknown error"}`)}},K5=({targetEvent:P,updates:$,currentEvents:Z,scope:J})=>{let X=[...Z],Q=_5(X,P),Y=X[Q];switch(J){case"this":{let U=P.start.toISOString(),q=[...Y.exdates||[],U],L={...Y,exdates:q};X[Q]=L;let G=`${P.id}_modified_${Date.now()}`,W={...U5(P,["width","height","top","left","right"]),...$,id:G,recurrenceId:U,uid:y0(Y),rrule:void 0};X.push(W);break}case"following":{let U=G5(P),z={...Y,rrule:{...Y.rrule,until:U}};X[Q]=z;let q=Y.end.diff(Y.start),L=$.start||P.start,G=$.end||L.add(q),W=`${Y.id}_following`,V=`${W}@ilamy.calendar`,f={...Y,...$,rrule:{...Y.rrule,...$.rrule,dtstart:L.toDate()},id:W,uid:V,start:L,end:G,recurrenceId:void 0};X.push(f);break}case"all":{let U={...Y,...$};X[Q]=U;break}default:throw Error(`Invalid scope: ${J}. Must be 'this', 'following', or 'all'`)}return X},L5=({targetEvent:P,currentEvents:$,scope:Z})=>{let J=[...$],X=_5(J,P),Q=J[X];switch(Z){case"this":{let Y=P.start.toISOString(),z=[...Q.exdates||[],Y],q={...Q,exdates:z};J[X]=q;break}case"following":{let Y={...Q,rrule:{...Q.rrule,until:G5(P)}};J[X]=Y;break}case"all":{let Y=y0(P);return J.filter((z)=>y0(z)!==Y)}default:throw Error(`Invalid scope: ${Z}. Must be 'this', 'following', or 'all'`)}return J};var I2={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",searchTime:"Search 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 t(P){return P.isSame(S(),"day")}function r(P){return P.format("YYYY-MM-DD")}function U0(P,$){let Z=P.startOf("week").day($),J=P.isBefore(Z)?Z.subtract(1,"week"):Z;return Array.from({length:7},(X,Q)=>J.add(Q,"day"))}function LP(P,$){let Z=U0(P.startOf("month"),$);return Array.from({length:6},(J,X)=>{let Q=Z[0].add(X,"week");return U0(Q,$)})}function A5(P){let $=P.daysInMonth(),Z=P.startOf("month");return Array.from({length:$},(J,X)=>Z.add(X,"day"))}function N5({referenceDate:P=S(),length:$=24}={}){let Z=P.startOf("day");return Array.from({length:$},(J,X)=>Z.hour(X).minute(0).second(0).millisecond(0))}function AP(P,$){let Z=new Set($.map((J)=>String(J.id)));return P.filter((J)=>Z.has(String(J.id)))}function lP(P,$,Z){let J=P.start.isSameOrAfter($)&&P.start.isSameOrBefore(Z),X=P.end.isSameOrAfter($)&&P.end.isSameOrBefore(Z),Q=P.start.isBefore($)&&P.end.isAfter(Z);return J||X||Q}var W5={day:"day",week:"week",month:"month",year:"year"},T2=(P,$,Z)=>{if($==="day"||$==="year")return{start:P.startOf($),end:P.endOf($)};if($==="week"){let X=U0(P,Z);return{start:X[0].startOf("day"),end:X[6].endOf("day")}}let J=LP(P,Z);return{start:J[0][0].startOf("day"),end:J[5][6].endOf("day")}},iP=(P)=>{let{events:$=[],firstDayOfWeek:Z=0,initialView:J="month",initialDate:X=S(),businessHours:Q,onEventAdd:Y,onEventUpdate:U,onEventDelete:z,onDateChange:q,onViewChange:L,locale:G,timezone:W,translations:V,translator:f}=P,[_,A]=PP(S.isDayjs(X)?X:S(X)),[K,F]=PP(J),[M,p]=PP($),[R,I]=PP(!1),[H,k]=PP(null),[D,u]=PP(null),[l,P0]=PP(G||"en"),j=R2($),g=R2(W),i=R2(G),K0=f5(()=>{if(f)return f;let b=V||I2;return(w)=>b[w]||w},[V,f]),F0=s((b,w)=>{let c=[];for(let A0 of M)if(A0.rrule)c.push(...p2({event:A0,currentEvents:M,startDate:b,endDate:w}));else if(lP(A0,b,w))c.push(A0);return c},[M]),M0=s(()=>{return T2(_,K,Z)},[_,K,Z]),m0=f5(()=>{let{start:b,end:w}=M0();return F0(b,w)},[F0,M0]);S2(()=>{if($!==j.current)p($),j.current=$},[$]),S2(()=>{if(G&&G!==i.current)P0(G),S.locale(G),A((b)=>b.locale(G)),i.current=G},[G]),S2(()=>{if(W&&W!==g.current)S.tz.setDefault(W),A((b)=>b.tz(W)),p((b)=>b.map((w)=>({...w,start:w.start.tz(W),end:w.end.tz(W)}))),g.current=W},[W]);let q0=s((b)=>{A(b);let w=T2(b,K,Z);q?.(b,w)},[q,K,Z]),X0=q0,L0=s((b)=>{let w=b===1?_.add(1,W5[K]):_.subtract(1,W5[K]);q0(w)},[_,K,q0]),k0=s(()=>L0(1),[L0]),g0=s(()=>L0(-1),[L0]),Q0=s(()=>q0(S()),[q0]),a=s((b)=>{p((w)=>[...w,b]),Y?.(b)},[Y]),e0=s((b,w)=>{let c=M.find((QP)=>QP.id===b);if(!c)return;let A0={...c,...w};p((QP)=>QP.map((SP)=>SP.id===b?A0:SP)),U?.(A0)},[M,U]),y=s((b,w,c)=>{U?.({...b,...w}),p(K5({targetEvent:b,updates:w,currentEvents:M,scope:c.scope}))},[M,U]),p0=s((b,w)=>{z?.(b),p(L5({targetEvent:b,currentEvents:M,scope:w.scope}))},[M,z]),XP=s((b)=>{let w=M.find((c)=>c.id===b);if(!w)return;p((c)=>c.filter((A0)=>A0.id!==b)),z?.(w)},[M,z]),T=s((b)=>{if(b?.start)u(b.start);let w=b?.start??_;k({title:K0("newEvent"),start:w,end:b?.end??w.add(1,"hour"),resourceId:b?.resourceId,description:"",allDay:b?.allDay??!1}),I(!0)},[_,K0]),d=s(()=>{u(null),k(null),I(!1)},[]),$0=s((b)=>{F(b),L?.(b);let w=T2(_,b,Z);q?.(_,w)},[L,q,_,Z]),V0=s((b)=>{let w=b.uid;return M.find((c)=>(c.uid||`${c.id}@ilamy.calendar`)===w&&c.rrule)||null},[M]);return{currentDate:_,view:K,events:m0,rawEvents:M,isEventFormOpen:R,selectedEvent:H,selectedDate:D,firstDayOfWeek:Z,dayMaxEvents:YP,currentLocale:l,businessHours:Q,setCurrentDate:A,selectDate:X0,setView:$0,nextPeriod:k0,prevPeriod:g0,today:Q0,addEvent:a,updateEvent:e0,updateRecurringEvent:y,deleteEvent:XP,deleteRecurringEvent:p0,openEventForm:T,closeEventForm:d,setSelectedEvent:k,setIsEventFormOpen:I,setSelectedDate:u,getEventsForDateRange:F0,findParentRecurringEvent:V0,t:K0}};import{jsx as C4}from"react/jsx-runtime";var b2=(P)=>{if(P.resourceIds)return P.resourceIds;if(P.resourceId!==void 0)return[P.resourceId];return[]},V5=({children:P,events:$=[],resources:Z=[],firstDayOfWeek:J=0,initialView:X="month",initialDate:Q,renderEvent:Y,onEventClick:U,onCellClick:z,onViewChange:q,onEventAdd:L,onEventUpdate:G,onEventDelete:W,onDateChange:V,locale:f,timezone:_,disableCellClick:A,disableEventClick:K,disableDragAndDrop:F,dayMaxEvents:M,eventSpacing:p=1,eventHeight:R=I0,stickyViewHeader:I=!0,viewHeaderClassName:H="",headerComponent:k,headerClassName:D,translations:u,translator:l,renderResource:P0,renderEventForm:j,businessHours:g,timeFormat:i="12-hour",classesOverride:K0,orientation:F0="horizontal",renderCurrentTimeIndicator:M0,renderHour:m0,hideNonBusinessHours:q0=!1,hiddenDays:X0,weekViewGranularity:L0="hourly",slotDuration:k0=60,scrollTime:g0})=>{let[Q0]=F5(Z),[a,e0]=F5(new Set(Z.map((m)=>m.id))),y=iP({events:$,firstDayOfWeek:J,initialView:X,initialDate:Q,businessHours:g,onEventAdd:L,onEventUpdate:G,onEventDelete:W,onDateChange:V,onViewChange:q,locale:f,timezone:_,translations:u,translator:l}),p0=Y0((m,N0)=>{e0((B2)=>{let hP=new Set(B2);if(m==="show"||m==="toggle"&&!hP.has(N0))hP.add(N0);else hP.delete(N0);return hP})},[]),XP=Y0((m)=>p0("show",m),[p0]),T=Y0((m)=>p0("hide",m),[p0]),d=Y0((m)=>p0("toggle",m),[p0]),$0=Y0(()=>e0(new Set(Q0.map((m)=>m.id))),[Q0]),V0=Y0(()=>e0(new Set),[]),b=Y0((m)=>y.events.filter((N0)=>b2(N0).includes(m)),[y.events]),w=Y0((m)=>y.events.filter((N0)=>b2(N0).some((B2)=>m.includes(B2))),[y.events]),c=Y0((m)=>{return Q0.find((N0)=>N0.id===m)},[Q0]),A0=Y0(()=>{return Q0.filter((m)=>a.has(m.id))},[Q0,a]),QP=Y0((m)=>{return Boolean(m.resourceIds&&m.resourceIds.length>1)},[]),SP=Y0((m)=>{y.setSelectedEvent(m),y.setIsEventFormOpen(!0)},[y]),Z5=Y0((m)=>{if(K)return;if(U)U(m);else SP(m)},[K,U,SP]),J5=Y0((m)=>{if(A)return;if(z)z(m);else{let N0={title:y.t("newEvent"),start:m.start,end:m.end,description:"",allDay:!1};if(m.resourceId!==void 0)N0.resourceId=m.resourceId;y.setSelectedEvent(N0),y.setSelectedDate(m.start),y.setIsEventFormOpen(!0)}},[z,A,y]),Y4=g4(()=>({...y,resources:Q0,visibleResources:a,toggleResourceVisibility:d,showResource:XP,hideResource:T,showAllResources:$0,hideAllResources:V0,getEventsForResource:b,getEventsForResources:w,getResourceById:c,getVisibleResources:A0,isEventCrossResource:QP,getEventResourceIds:b2,onEventClick:Z5,onCellClick:J5,renderEvent:Y,renderResource:P0,renderEventForm:j,headerComponent:k,headerClassName:D,locale:f,timezone:_,disableCellClick:A,disableEventClick:K,disableDragAndDrop:F,dayMaxEvents:M,eventSpacing:p,eventHeight:R,stickyViewHeader:I,viewHeaderClassName:H,businessHours:g,timeFormat:i,classesOverride:K0,orientation:F0,renderCurrentTimeIndicator:M0,renderHour:m0,hideNonBusinessHours:q0,hiddenDays:X0,weekViewGranularity:L0,slotDuration:k0,scrollTime:g0}),[y,Q0,a,d,XP,T,$0,V0,b,w,c,A0,QP,Z5,J5,Y,P0,j,f,_,A,K,F,M,p,R,I,H,k,D,g,i,K0,F0,M0,m0,q0,X0,L0,k0,g0]);return C4(yP.Provider,{value:Y4,children:P})};function B(P){let $=O5(yP),Z=O5(vP),J=$||Z;if(!J)throw Error("useSmartCalendarContext must be used within a CalendarProvider or ResourceCalendarProvider");return P?P(J):J}function h4(){let P=B();return{currentDate:P.currentDate,view:P.view,events:P.events,isEventFormOpen:P.isEventFormOpen,selectedEvent:P.selectedEvent,selectedDate:P.selectedDate,firstDayOfWeek:P.firstDayOfWeek,resources:P.resources||[],setCurrentDate:P.setCurrentDate,selectDate:P.selectDate,setView:P.setView,nextPeriod:P.nextPeriod,prevPeriod:P.prevPeriod,today:P.today,addEvent:P.addEvent,updateEvent:P.updateEvent,deleteEvent:P.deleteEvent,openEventForm:P.openEventForm,closeEventForm:P.closeEventForm,getEventsForResource:P.getEventsForResource,businessHours:P.businessHours}}import{jsx as c0,jsxs as oP}from"react/jsx-runtime";var E4=[{scope:"this",title:"thisEvent",editKey:"onlyChangeThis",deleteKey:"onlyDeleteThis"},{scope:"following",title:"thisAndFollowingEvents",editKey:"changeThisAndFuture",deleteKey:"deleteThisAndFuture"},{scope:"all",title:"allEvents",editKey:"changeEntireSeries",deleteKey:"deleteEntireSeries"}];function RP({isOpen:P,onClose:$,onConfirm:Z,operationType:J,eventTitle:X}){let{t:Q}=B((z)=>({t:z.t})),Y=(z)=>{Z(z),$()},U=J==="edit";return c0(UP,{onOpenChange:$,open:P,children:oP(zP,{className:"max-w-md",children:[oP(_P,{children:[c0(GP,{children:U?Q("editRecurringEvent"):Q("deleteRecurringEvent")}),oP(xP,{children:['"',X,'"'," ",U?Q("editRecurringEventQuestion"):Q("deleteRecurringEventQuestion")]})]}),c0("div",{className:"space-y-3",children:E4.map(({scope:z,title:q,editKey:L,deleteKey:G})=>c0(C,{className:"w-full justify-start h-auto p-4",onClick:()=>Y(z),variant:"outline",children:oP("div",{className:"text-left",children:[c0("div",{className:"font-medium",children:Q(q)}),c0("div",{className:"text-sm text-muted-foreground",children:Q(U?L:G)})]})},z))}),c0(jP,{children:c0(C,{onClick:$,variant:"outline",children:Q("cancel")})})]})})}var B5=(P,$)=>{let{active:Z,over:J}=P;if(!Z||!J||!$)return null;let X=J.data.current||{},Q=X.type==="time-cell",{resourceId:Y,allDay:U}=X,z;if(Q){let{date:W,hour:V=0,minute:f=0}=X;z=S(W).hour(V).minute(f)}else{let{date:W}=X;z=S(W)}let q=$.end.diff($.start,"second"),L=z.add(q,"second");if(L.isSame(L.startOf("day")))L=L.subtract(1,"day").endOf("day");let G={start:z,end:L,resourceId:Y,allDay:Q?!1:U??$.allDay};return{activeEvent:$,updates:G}};import{DragOverlay as D4}from"@dnd-kit/core";import{snapCenterToCursor as j4}from"@dnd-kit/modifiers";import{useImperativeHandle as x4,useState as v4}from"react";import{jsx as M5}from"react/jsx-runtime";var p5=({ref:P})=>{let[$,Z]=v4(null);return x4(P,()=>({setActiveEvent:Z})),M5(D4,{modifiers:[j4],children:$&&M5("div",{className:N("cursor-grab truncate rounded bg-amber-200 p-2 text-[10px] shadow-lg sm:text-xs w-20",$.backgroundColor||"bg-blue-500",$.color||"text-white"),children:$?.title})})};import{jsx as R5,jsxs as T5,Fragment as d4}from"react/jsx-runtime";var H2={isOpen:!1,event:null,updates:null};function uP({children:P}){let $=S5(null),Z=S5(null),{updateEvent:J,updateRecurringEvent:X,disableDragAndDrop:Q}=B((K)=>({updateEvent:K.updateEvent,updateRecurringEvent:K.updateRecurringEvent,disableDragAndDrop:K.disableDragAndDrop})),[Y,U]=u4({isOpen:!1,event:null,updates:null}),z=I5(c4,{activationConstraint:{distance:2}}),q=I5(i4,{activationConstraint:{delay:100,tolerance:5}}),L=o4(z,q),G=(K,F)=>{if(!K?.id||!F||Object.keys(F).length===0)return;if(KP(K))U({isOpen:!0,event:K,updates:F});else J(K.id,F)},W=(K)=>{if(!Y.event||!Y.updates){U(H2);return}try{X(Y.event,Y.updates,{scope:K,eventDate:Y.event.start})}catch{}finally{U(H2)}},V=()=>{U(H2)},f=(K)=>{let{active:F}=K;if(F.data.current?.type==="calendar-event")Z.current?.setActiveEvent(F.data.current.event),$.current=F.data.current.event},_=(K)=>{let F=B5(K,$.current);if(F){let{activeEvent:M,updates:p}=F;G(M,p)}$.current=null,Z.current?.setActiveEvent(null)},A=(K)=>{$.current=null};if(Q)return P;return T5(d4,{children:[T5(y4,{collisionDetection:l4,onDragCancel:A,onDragEnd:_,onDragStart:f,sensors:L,children:[P,R5(p5,{ref:Z})]}),R5(RP,{eventTitle:Y.event?.title||"",isOpen:Y.isOpen,onClose:V,onConfirm:W,operationType:"edit"})]})}import{useEffect as S$,useState as d0}from"react";import*as dP from"@radix-ui/react-checkbox";import{CheckIcon as r4}from"lucide-react";import{jsx as w2}from"react/jsx-runtime";function NP({className:P,...$}){return w2(dP.Root,{className:N("peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",P),"data-slot":"checkbox",...$,children:w2(dP.Indicator,{className:"flex items-center justify-center text-current transition-none","data-slot":"checkbox-indicator",children:w2(r4,{className:"size-3.5"})})})}import{PopoverClose as e4}from"@radix-ui/react-popover";import{Calendar as P$}from"lucide-react";import{useEffect as $$,useRef as Z$,useState as J$}from"react";import{ChevronLeftIcon as n4,ChevronRightIcon as a4}from"lucide-react";import{useState as t4}from"react";import{jsx as W0,jsxs as m2}from"react/jsx-runtime";var s4=["S","M","T","W","T","F","S"];function b5({selected:P,defaultMonth:$,onSelect:Z,disabled:J,firstDayOfWeek:X=0,className:Q}){let[Y,U]=t4(()=>S($??P??new Date).startOf("month")),z=LP(Y,X),q=P?S(P).format("YYYY-MM-DD"):void 0,L=Array.from({length:7},(G,W)=>s4[(X+W)%7]);return m2("div",{className:N("bg-background p-3 w-[280px]",Q),"data-slot":"calendar",children:[m2("div",{className:"flex items-center justify-between mb-2",children:[W0(C,{"aria-label":"Previous month",onClick:()=>U((G)=>G.subtract(1,"month")),size:"icon",variant:"ghost",children:W0(n4,{className:"size-4"})}),W0("div",{className:"text-sm font-medium select-none",children:Y.format("MMMM YYYY")}),W0(C,{"aria-label":"Next month",onClick:()=>U((G)=>G.add(1,"month")),size:"icon",variant:"ghost",children:W0(a4,{className:"size-4"})})]}),m2("table",{className:"w-full border-collapse",role:"grid",children:[W0("thead",{children:W0("tr",{children:L.map((G,W)=>W0("th",{className:"text-muted-foreground text-xs font-medium select-none py-1",children:G},W))})}),W0("tbody",{children:z.map((G,W)=>W0("tr",{children:G.map((V)=>{let f=!V.isSame(Y,"month"),_=V.format("YYYY-MM-DD")===q,A=J?.(V.toDate())??!1;return W0("td",{className:"p-0 text-center","data-disabled":A,"data-outside":f,"data-selected":_,role:"gridcell",tabIndex:-1,children:W0("button",{"aria-disabled":A,"aria-hidden":f,className:N("w-full aspect-square rounded-md text-sm select-none",!A&&"hover:bg-accent cursor-pointer",f&&"text-muted-foreground/50",t(V)&&!_&&"bg-accent text-accent-foreground",_&&"bg-primary text-primary-foreground font-medium",A&&"opacity-50 cursor-not-allowed"),"data-disabled":A,"data-selected":_,disabled:A||f,onClick:()=>Z?.(V.toDate()),tabIndex:f?-1:0,type:"button",children:V.format("D")})},V.toISOString())})},W))})]})]})}import*as C0 from"@radix-ui/react-popover";import{jsx as rP}from"react/jsx-runtime";function l0({...P}){return rP(C0.Root,{"data-slot":"popover",...P})}function i0({...P}){return rP(C0.Trigger,{"data-slot":"popover-trigger",...P})}function o0({className:P,align:$="center",sideOffset:Z=4,...J}){return rP(C0.Portal,{children:rP(C0.Content,{align:$,className:N("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,...J})})}import{jsx as fP,jsxs as k2}from"react/jsx-runtime";function nP({date:P,closeOnSelect:$,onChange:Z,label:J="Pick a date",className:X,disabled:Q}){let Y=Z$(null),[U,z]=J$(P);$$(()=>{z(P)},[P]);let q=(L)=>{if(z(L),$)Y.current?.click();Z?.(L)};return fP("div",{className:X,children:k2(l0,{children:[fP(i0,{asChild:!0,children:k2(C,{className:N("data-[empty=true]:text-muted-foreground w-full justify-start text-left font-normal"),"data-empty":!P,variant:"outline",children:[fP(P$,{}),U?S(U).format("MMM D, YYYY"):fP("span",{children:J})]})}),k2(o0,{align:"start",className:"w-auto p-0",children:[fP(e4,{ref:Y,style:{display:"none"}}),fP(b5,{defaultMonth:U,disabled:Q,onSelect:q,selected:U})]})]})})}import{jsx as X$}from"react/jsx-runtime";function $P({className:P,type:$,...Z}){return X$("input",{className:N("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",P),"data-slot":"input",type:$,...Z})}import*as H5 from"@radix-ui/react-label";import{jsx as Q$}from"react/jsx-runtime";function z0({className:P,...$}){return Q$(H5.Root,{className:N("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",P),"data-slot":"label",...$})}import*as R0 from"@radix-ui/react-scroll-area";import{jsx as TP,jsxs as Y$}from"react/jsx-runtime";function T0({className:P,children:$,viewPortProps:Z,...J}){return Y$(R0.Root,{className:N("relative",P),"data-slot":"scroll-area",...J,children:[TP(R0.Viewport,{...Z,className:N("focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",Z?.className),"data-slot":"scroll-area-viewport",children:$}),TP(h0,{}),TP(R0.Corner,{})]})}function h0({className:P,orientation:$="vertical",...Z}){return TP(R0.ScrollAreaScrollbar,{className:N("flex touch-none p-px transition-colors select-none",$==="vertical"&&"h-full w-2.5 border-l border-l-transparent",$==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent",P),"data-slot":"scroll-area-scrollbar",orientation:$,...Z,children:TP(R0.ScrollAreaThumb,{className:"bg-border relative flex-1 rounded-full","data-slot":"scroll-area-thumb"})})}import{Clock as z$}from"lucide-react";import{useEffect as _$,useRef as m5,useState as g2}from"react";import{useMemo as q$}from"react";function w5({timeFormat:P="12-hour",minTime:$="00:00",maxTime:Z="23:45"}){return{timeOptions:q$(()=>{let Q=[],[Y,U]=$.split(":").map(Number),[z,q]=Z.split(":").map(Number),L=Y*60+U,G=z*60+q;for(let W=L;W<=G;W+=15){let V=Math.floor(W/60),f=W%60,_=`${V.toString().padStart(2,"0")}:${f.toString().padStart(2,"0")}`;Q.push(_)}return Q},[$,Z]),formatTime:(Q)=>{let[Y,U]=Q.split(":").map(Number),z=Y>=12?"PM":"AM",q=Y===0?12:Y>12?Y-12:Y;if(P==="24-hour")return`${Y.toString().padStart(2,"0")}:${U.toString().padStart(2,"0")}`;return`${q}:${U.toString().padStart(2,"0")} ${z}`}}}var WP=(P)=>String(P).padStart(2,"0"),U$=(P)=>typeof P==="number"?WP(P):P,O={col:{time:"time-col",date:"date-col",day:(P,$)=>{let Z=`day-col-${r(P)}`;return $!=null?`${Z}-resource-${$}`:Z},resource:(P,$)=>`${P}-col-resource-${$}`,allDay:(P,$)=>`all-day-col-${r(P)}-${$}`},cell:{day:(P,$,Z=0)=>{let J=r(P);return $!=null?`day-cell-${J}-${WP($)}-${WP(Z)}`:`day-cell-${J}`},verticalTime:(P)=>`vertical-time-${WP(P)}`,vertical:(P,$,Z,J)=>{let X=`vertical-cell-${r(P)}-${WP($)}-${WP(Z)}`;return J!=null?`${X}-resource-${J}`:X}},container:{vertical:{col:(P)=>`vertical-col-${P}`},horizontal:{row:(P)=>`horizontal-row-${P}`,rowLabel:(P)=>`horizontal-row-label-${P}`,event:(P)=>`horizontal-event-${P}`},eventsLayer:(P,$)=>`${P}-events-${$}`},header:{resource:{weekDay:"resource-week-day-header",timeLabel:(P,$)=>`resource-${P}-time-label-${U$($)}`},weekday:(P,$)=>`${P}-header-weekday-${$.toLowerCase()}`,week:{day:(P)=>`week-header-day-${P.toISOString()}`,hour:(P,$)=>`week-header-hour-${P.toISOString()}-${$}`,resource:(P)=>`week-header-resource-${P}`},year:{month:(P,$)=>$?`year-month-${$}-${P}`:`year-month-${P}`,day:(P,$)=>`year-day-${P}-${$}`}},allDayRow:(P)=>`allday-row-${P??"main"}`,listKey:(...P)=>P.join("-"),dayNumber:(P)=>t(P)?"day-number-today":`day-number-${P.format("D")}`,timePicker:(P)=>`time-picker-${P??""}`,droppable:{dayCell:(P,$)=>{let Z=P.toISOString(),J=$?.allDay?"-allday":"",X=$?.resourceId!=null?`-resource-${$.resourceId}`:"";return`drop-day-cell-${Z}${J}${X}`}}};import{jsx as u0,jsxs as C2}from"react/jsx-runtime";var G$=(P)=>{P.stopPropagation()};function k5({value:P,onChange:$,minTime:Z="00:00",maxTime:J="23:45",timeFormat:X="12-hour",placeholder:Q="Select time...",className:Y,disabled:U=!1,name:z}){let[q,L]=g2(!1),[G,W]=g2(""),V=m5(null),f=m5(null),[_,A]=g2(0),{timeOptions:K,formatTime:F}=w5({timeFormat:X,minTime:Z,maxTime:J}),M=K.filter((I)=>{return F(I).toLowerCase().includes(G.toLowerCase())}),p=(I)=>{$(I),L(!1),W("")};_$(()=>{if(q){if(f.current)A(f.current.offsetWidth);setTimeout(()=>{V.current?.focus()},0)}},[q]);let R=P?F(P):Q;return C2(l0,{onOpenChange:L,open:q,children:[u0(i0,{asChild:!0,children:C2(C,{"aria-controls":"time-picker-listbox","aria-expanded":q,className:N("w-full justify-start",Y),"data-testid":O.timePicker(z),disabled:U,ref:f,role:"combobox",variant:"outline",children:[u0(z$,{className:"mr-2 h-4 w-4"}),R]})}),C2(o0,{align:"start",className:"p-0",style:{width:_},children:[u0("div",{className:"p-2 border-b",children:u0($P,{className:"h-8",onChange:(I)=>W(I.target.value),placeholder:"Search time...",ref:V,value:G})}),u0(T0,{className:"h-[200px]",onWheel:G$,children:u0("div",{className:"p-1",children:M.length===0?u0("div",{className:"py-6 text-center text-sm text-muted-foreground",children:"N/A"}):M.map((I)=>{let H=F(I);return u0("button",{className:N("relative flex w-full cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground",I===P&&"bg-accent text-accent-foreground"),onClick:()=>p(I),type:"button",children:H},I)})})})]})]})}var h2=(P,$)=>{if(!$)return!0;let Z=!1;return aP($,{date:P,onMatch:()=>{Z=!0}}),Z},g5=({date:P,hour:$,minute:Z=0,businessHours:J})=>{if(!J)return!0;if($===void 0)return h2(P,J);let X=!1,Q=$*60+Z;return aP(J,{date:P,onMatch:(Y)=>{let U=Y.startTime??9,z=Y.endTime??17,q=U*60,L=z*60;if(Q>=q&&Q<L)X=!0}}),X},aP=(P,$)=>{let{date:Z,onMatch:J}=$;if(!P)return;let X=Array.isArray(P)?P:[P];for(let Q of X)if(Z&&Q.daysOfWeek){let Y=Z.day();if(Q.daysOfWeek.some((U)=>v0[U]===Y))J(Q)}else J(Q)},tP=(P)=>{let{allDates:$,businessHours:Z,resourceBusinessHours:J=[],hideNonBusinessHours:X}=P,Q=24,Y=0,U=!1,z=(L)=>{U=!0,Q=Math.min(Q,L.startTime??9),Y=Math.max(Y,L.endTime??17)},q=(L)=>{aP(Z,{date:L,onMatch:z});for(let G of J)aP(G,{date:L,onMatch:z})};for(let L of $)q(L);if(!U&&X){if(q(),!U)Q=9,Y=17,U=!0}return{minStart:Q,maxEnd:Y,hasBusinessHours:U}};var E2=(P,$,Z)=>{let[J,X]=$.split(":").map(Number),Q=S(P).hour(J).minute(X);return Z?Q.hour(0).minute(0):Q},C5=(P,$,Z)=>{let[J,X]=$.split(":").map(Number),Q=S(P).hour(J).minute(X);return Z?Q.hour(23).minute(59):Q},D2=(P,$)=>{if(!$)return{min:"00:00",max:"23:59"};let Z=S(P),{minStart:J,maxEnd:X,hasBusinessHours:Q}=tP({allDates:[Z],businessHours:$,hideNonBusinessHours:!1});if(!Q)return{min:"00:00",max:"23:59"};return{min:`${J.toString().padStart(2,"0")}:00`,max:`${(X-1).toString().padStart(2,"0")}:45`}};import{useEffect as f$,useMemo as W$,useState as o5}from"react";import{RRule as J0}from"rrule";import{jsx as sP}from"react/jsx-runtime";function h5({className:P,...$}){return sP("div",{className:N("text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm",P),"data-slot":"card",...$})}function E5({className:P,...$}){return sP("div",{className:N("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 p-4 pb-0 has-data-[slot=card-action]:grid-cols-[1fr_auto]",P),"data-slot":"card-header",...$})}function D5({className:P,...$}){return sP("div",{className:N("leading-none font-semibold",P),"data-slot":"card-title",...$})}function j5({className:P,...$}){return sP("div",{className:N("p-4 pt-0",P),"data-slot":"card-content",...$})}import*as h from"@radix-ui/react-select";import{CheckIcon as K$,ChevronDownIcon as x5,ChevronUpIcon as L$}from"lucide-react";import{jsx as e,jsxs as j2}from"react/jsx-runtime";function v5({...P}){return e(h.Root,{"data-slot":"select",...P})}function y5({...P}){return e(h.Value,{"data-slot":"select-value",...P})}function c5({className:P,size:$="default",children:Z,...J}){return j2(h.Trigger,{className:N("border-input data-placeholder:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",P),"data-size":$,"data-slot":"select-trigger",...J,children:[Z,e(h.Icon,{asChild:!0,children:e(x5,{className:"size-4 opacity-50"})})]})}function l5({className:P,children:$,position:Z="popper",align:J="center",...X}){return e(h.Portal,{children:j2(h.Content,{align:J,className:N("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-32 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",Z==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",P),"data-slot":"select-content",position:Z,...X,children:[e(A$,{}),e(h.Viewport,{className:N("p-1",Z==="popper"&&"h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width) scroll-my-1"),children:$}),e(N$,{})]})})}function i5({className:P,children:$,...Z}){return j2(h.Item,{className:N("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",P),"data-slot":"select-item",...Z,children:[e("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:e(h.ItemIndicator,{children:e(K$,{className:"size-4"})})}),e(h.ItemText,{children:$})]})}function A$({className:P,...$}){return e(h.ScrollUpButton,{className:N("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-up-button",...$,children:e(L$,{className:"size-4"})})}function N$({className:P,...$}){return e(h.ScrollDownButton,{className:N("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-down-button",...$,children:e(x5,{className:"size-4"})})}import{jsx as x,jsxs as _0,Fragment as M$}from"react/jsx-runtime";var x2={DAILY:J0.DAILY,WEEKLY:J0.WEEKLY,MONTHLY:J0.MONTHLY,YEARLY:J0.YEARLY},F$=Object.fromEntries(Object.entries(x2).map(([P,$])=>[$,P])),u5=[J0.SU,J0.MO,J0.TU,J0.WE,J0.TH,J0.FR,J0.SA],V$=["sun","mon","tue","wed","thu","fri","sat"],O$=[{type:"never",id:"never",labelKey:"never"},{type:"count",id:"after",labelKey:"after"},{type:"until",id:"on",labelKey:"on"}],d5=(P)=>Math.max(1,Number.parseInt(P,10)||1),B$=(P,$)=>{if(!P)return $("customRecurrence");try{let Z=new J0(P).toText();return Z&&!Z.toLowerCase().includes("error")?Z.charAt(0).toUpperCase()+Z.slice(1):$("customRecurrence")}catch{return $("customRecurrence")}},r5=({value:P,onChange:$})=>{let{t:Z}=B((_)=>({t:_.t})),[J,X]=o5(!!P),[Q,Y]=o5(()=>P||null),U=W$(()=>V$.map((_,A)=>({value:u5[A],label:Z(_)})),[Z]);f$(()=>{if(X(!!P),P)Y(P)},[P]);let z=(_)=>{if(!Q)return;let A={...Q,..._};Y(A),$(J?A:null)},q=(_)=>{if(X(_),!_){$(null);return}if(Q){$(Q);return}let A={freq:J0.DAILY,interval:1};Y(A),$(A)},L=(_)=>{let A=Q?.byweekday||[],K=u5[_],F=A.includes(K)?A.filter((M)=>M!==K):[...A,K];z({byweekday:F.length?F:void 0})},G=(_)=>{let A={count:void 0,until:void 0};if(_==="count")A.count=Q?.count||1;if(_==="until")A.until=Q?.until||S().add(1,"month").endOf("day").toDate();z(A)},W=Q?.until?"until":Q?.count?"count":"never",V=F$[Q?.freq??J0.DAILY]||"DAILY",f=Array.isArray(Q?.byweekday)?Q.byweekday:Q?.byweekday?[Q.byweekday]:[];return _0(h5,{"data-testid":"recurrence-editor",children:[_0(E5,{className:"pb-3",children:[_0("div",{className:"flex items-center space-x-2",children:[x(NP,{checked:J,"data-testid":"toggle-recurrence",id:"recurring",onCheckedChange:q}),x(D5,{className:"text-sm",children:Z("repeat")})]}),J&&P&&x("p",{className:"text-xs text-muted-foreground",children:B$(P,Z)})]}),J&&x(j5,{className:"pt-0",children:_0("div",{className:"space-y-4",children:[_0("div",{className:"grid grid-cols-2 gap-4",children:[_0("div",{children:[x(z0,{className:"text-xs",htmlFor:"frequency",children:Z("repeats")}),_0(v5,{onValueChange:(_)=>z({freq:x2[_]}),value:V,children:[x(c5,{className:"h-8","data-testid":"frequency-select",id:"frequency",children:x(y5,{})}),x(l5,{children:Object.keys(x2).map((_)=>x(i5,{value:_,children:Z(_.toLowerCase())},_))})]})]}),_0("div",{children:[x(z0,{className:"text-xs",htmlFor:"interval",children:Z("every")}),x($P,{className:"h-8",id:"interval",min:"1",onChange:(_)=>z({interval:d5(_.target.value)}),type:"number",value:Q?.interval||1})]})]}),Q?.freq===J0.WEEKLY&&_0("div",{children:[x(z0,{className:"text-xs",children:Z("repeatOn")}),x("div",{className:"flex flex-wrap gap-1 mt-1",children:U.map((_,A)=>_0("div",{className:"flex items-center space-x-1",children:[x(NP,{checked:f.includes(_.value),id:O.listKey("day",A),onCheckedChange:()=>L(A)}),x(z0,{className:"text-xs cursor-pointer",htmlFor:O.listKey("day",A),children:_.label})]},_.label))})]}),_0("div",{children:[x(z0,{className:"text-xs",children:Z("ends")}),x("div",{className:"space-y-2 mt-1",children:O$.map(({type:_,id:A,labelKey:K})=>_0("div",{className:"flex items-center space-x-2",children:[x(NP,{checked:W===_,id:A,onCheckedChange:()=>G(_)}),x(z0,{className:"text-xs",htmlFor:A,children:Z(K)}),_==="count"&&W==="count"&&_0(M$,{children:[x($P,{className:"h-6 w-16 text-xs","data-testid":"count-input",min:"1",onChange:(F)=>z({count:d5(F.target.value)}),type:"number",value:Q?.count||1}),x("span",{className:"text-xs",children:Z("occurrences")})]}),_==="until"&&W==="until"&&x(nP,{className:"h-6",date:Q?.until??void 0,onChange:(F)=>z({until:F?S(F).endOf("day").toDate():void 0})})]},_))})]})]})})]})};import{useCallback as eP,useState as p$}from"react";var n5={isOpen:!1,operationType:"edit",event:null};function a5(P){let{updateRecurringEvent:$,deleteRecurringEvent:Z}=B((q)=>({updateRecurringEvent:q.updateRecurringEvent,deleteRecurringEvent:q.deleteRecurringEvent})),[J,X]=p$(n5),Q=eP((q,L)=>{X({isOpen:!0,operationType:"edit",event:q,updates:L,onConfirm:(G)=>{$(q,L,{scope:G,eventDate:q.start})}})},[$]),Y=eP((q)=>{X({isOpen:!0,operationType:"delete",event:q,onConfirm:(L)=>{Z(q,{scope:L,eventDate:q.start})}})},[Z]),U=eP(()=>X(n5),[]),z=eP((q)=>{if(J.onConfirm)J.onConfirm(q);U(),P?.()},[J,U,P]);return{dialogState:J,openEditDialog:Q,openDeleteDialog:Y,closeDialog:U,handleConfirm:z}}import{useMemo as I$}from"react";var P2=(P)=>{let{businessHours:$,getResourceById:Z}=B((J)=>({businessHours:J.businessHours,getResourceById:J.getResourceById}));return I$(()=>{if(P!=null&&Z){let J=Z(P);if(J?.businessHours)return J.businessHours}return $},[P,Z,$])};import{jsx as v,jsxs as b0,Fragment as R$}from"react/jsx-runtime";var t5=[{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"}],s5=({selectedEvent:P,onClose:$,onUpdate:Z,onDelete:J,onAdd:X})=>{let{dialogState:Q,openEditDialog:Y,openDeleteDialog:U,closeDialog:z,handleConfirm:q}=a5($),{findParentRecurringEvent:L,t:G,timeFormat:W}=B((T)=>({findParentRecurringEvent:T.findParentRecurringEvent,t:T.t,timeFormat:T.timeFormat})),V=P2(P?.resourceId),f=P?.start??S(),_=P?.end??S().add(1,"hour"),A=P?L(P):null,[K,F]=d0(f.toDate()),[M,p]=d0(_.toDate()),[R,I]=d0(P?.allDay||!1),[H,k]=d0(P?.color||t5[0].value),[D,u]=d0(f.format("HH:mm")),[l,P0]=d0(_.format("HH:mm")),[j,g]=d0({title:P?.title||"",description:P?.description||"",location:P?.location||""}),[i,K0]=d0(()=>{return P?.rrule||A?.rrule||null}),F0=(T)=>{if(!T)return;if(F(T),S(T).isAfter(S(M)))p(T)},M0=(T)=>{if(!T)return;if(p(T),T&&S(T).isBefore(S(K)))F(T)},m0=(T)=>{if(u(T),S(K).isSame(S(M),"day")&&T>l)P0(T)},q0=(T)=>{if(P0(T),S(K).isSame(S(M),"day")&&T<D)u(T)},X0=(T)=>{let{name:d,value:$0}=T.target;g((V0)=>({...V0,[d]:$0}))};S$(()=>{if(R)P0("23:59")},[R]);let L0=(T)=>{T.preventDefault();let d=E2(K,D,R),$0=C5(M,l,R),V0={id:P?.id||S().format("YYYYMMDDHHmmss"),title:j.title,start:d,end:$0,resourceId:P?.resourceId,description:j.description,location:j.location,allDay:R,color:H,rrule:i||void 0};if(P?.id&&KP(P)){Y(P,{title:j.title,start:d,end:$0,description:j.description,location:j.location,allDay:R,color:H,rrule:i||void 0});return}if(P?.id)Z?.(V0);else X?.(V0);$()},k0=()=>{if(P?.id){if(KP(P)){U(P);return}J?.(P),$()}},g0=(T)=>{if(!T){K0(null);return}let d=E2(K,D,R);K0({...T,dtstart:d.toDate()})},Q0=V?(T)=>!h2(S(T),V):void 0,a=D2(K,V),e0=D2(M,V),y=({name:T,placeholder:d,required:$0=!1})=>b0("div",{className:"grid gap-1 sm:gap-2",children:[v(z0,{className:"text-xs sm:text-sm",htmlFor:T,children:G(T)}),v($P,{className:"h-8 text-sm sm:h-9",id:T,name:T,onChange:X0,placeholder:d,required:$0,value:j[T]})]}),p0=[["startDate",K,F0],["endDate",M,M0]],XP=[["startTime","start-time",D,m0,a],["endTime","end-time",l,q0,e0]];return b0(R$,{children:[b0("form",{className:"flex flex-col flex-1 min-h-0",onSubmit:L0,children:[v(T0,{className:"flex-1 min-h-0",children:b0("div",{className:"grid gap-3 sm:gap-4 p-1",children:[v(y,{name:"title",placeholder:G("eventTitlePlaceholder"),required:!0}),v(y,{name:"description",placeholder:G("eventDescriptionPlaceholder")}),b0("div",{className:"flex items-center space-x-2",children:[v(NP,{checked:R,id:"allDay",onCheckedChange:(T)=>I(T===!0)}),v(z0,{className:"text-xs sm:text-sm",htmlFor:"allDay",children:G("allDay")})]}),v("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:p0.map(([T,d,$0])=>b0("div",{children:[v(z0,{className:"text-xs sm:text-sm",children:G(T)}),v(nP,{className:"mt-1",closeOnSelect:!0,date:d,disabled:Q0,onChange:$0})]},T))}),!R&&v("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:XP.map(([T,d,$0,V0,b])=>b0("div",{children:[v(z0,{className:"text-xs sm:text-sm",children:G(T)}),v(k5,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:b.max,minTime:b.min,name:d,onChange:V0,placeholder:G("searchTime"),timeFormat:W,value:$0})]},T))}),b0("div",{className:"grid gap-1 sm:gap-2",children:[v(z0,{className:"text-xs sm:text-sm",children:G("color")}),v("div",{className:"flex flex-wrap gap-2",children:t5.map((T)=>v(C,{"aria-label":T.label,className:N(`${T.value} h-6 w-6 rounded-full sm:h-8 sm:w-8`,H===T.value&&"ring-2 ring-black ring-offset-1 sm:ring-offset-2"),onClick:()=>k(T.value),type:"button",variant:"ghost"},T.value))})]}),v(y,{name:"location",placeholder:G("eventLocationPlaceholder")}),v(r5,{onChange:g0,value:i})]})}),b0(jP,{className:"mt-4 shrink-0 flex flex-col-reverse gap-2 sm:flex-row sm:gap-0",children:[P?.id&&v(C,{className:"w-full sm:mr-auto sm:w-auto",onClick:k0,size:"sm",type:"button",variant:"destructive",children:G("delete")}),b0("div",{className:"flex w-full gap-2 sm:w-auto",children:[v(C,{className:"flex-1 sm:flex-none",onClick:$,size:"sm",type:"button",variant:"outline",children:G("cancel")}),v(C,{className:"flex-1 sm:flex-none",size:"sm",type:"submit",children:P?.id?G("update"):G("create")})]})]})]}),v(RP,{eventTitle:Q.event?.title||"",isOpen:Q.isOpen,onClose:z,onConfirm:q,operationType:Q.operationType})]})};import{jsx as $2,jsxs as e5}from"react/jsx-runtime";var Z2=()=>{let{t:P,selectedEvent:$,isEventFormOpen:Z,closeEventForm:J,addEvent:X,updateEvent:Q,deleteEvent:Y,renderEventForm:U}=B((G)=>({t:G.t,selectedEvent:G.selectedEvent,isEventFormOpen:G.isEventFormOpen,closeEventForm:G.closeEventForm,addEvent:G.addEvent,updateEvent:G.updateEvent,deleteEvent:G.deleteEvent,renderEventForm:G.renderEventForm})),L={open:Z,onClose:J,selectedEvent:$,onAdd:X,onUpdate:(G)=>{Q(G.id,G)},onDelete:(G)=>{Y(G.id)}};if(U)return U(L);return $2(UP,{onOpenChange:J,open:Z,children:e5(zP,{className:"flex flex-col h-[90vh] w-[90vw] max-w-[500px] p-4 sm:p-6 overflow-hidden gap-0",children:[e5(_P,{className:"mb-2 sm:mb-4 shrink-0",children:[$2(GP,{className:"text-base sm:text-lg",children:$?.id?P("editEvent"):P("createEvent")}),$2(xP,{className:"text-xs sm:text-sm",children:$?.id?P("editEventDetails"):P("addNewEvent")})]}),$2(s5,{...L})]})})};import{Calendar as l$,Download as i$,Menu as o$,Plus as u$}from"lucide-react";import{useState as d$}from"react";import{RRule as T$}from"rrule";var v2=`\r
2
- `,b$=["BEGIN:VTIMEZONE","TZID:UTC","BEGIN:STANDARD","DTSTART:19700101T000000","TZNAME:UTC","TZOFFSETFROM:+0000","TZOFFSETTO:+0000","END:STANDARD","END:VTIMEZONE"].join(v2),X2=(P)=>{return P.replaceAll("\\","\\\\").replaceAll(";","\\;").replaceAll(",","\\,").replaceAll(`
3
- `,"\\n").replaceAll("\r","")},J2=(P,$=!1)=>{return $?P.format("YYYYMMDD"):P.utc().format("YYYYMMDD[T]HHmmss[Z]")},P1=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},H$=(P)=>{try{return new T$(P).toString().split(`
4
- `).find((Z)=>Z.startsWith("RRULE:"))||""}catch{return""}},w$=(P)=>{let $=S().utc().format("YYYYMMDD[T]HHmmss[Z]"),Z=P.allDay?";VALUE=DATE":"",J=P.rrule?H$(P.rrule):"",X=P.exdates?.length?P.exdates.map((U)=>J2(S(U),P.allDay)).join(","):null,Q=P.recurrenceId?J2(S(P.recurrenceId),P.allDay):null;return["BEGIN:VEVENT",`UID:${P1(P)}`,`DTSTART${Z}:${J2(P.start,P.allDay)}`,`DTEND${Z}:${J2(P.end,P.allDay)}`,`SUMMARY:${X2(P.title)}`,P.description&&`DESCRIPTION:${X2(P.description)}`,P.location&&`LOCATION:${X2(P.location)}`,J,X&&`EXDATE:${X}`,Q&&`RECURRENCE-ID:${Q}`,`DTSTAMP:${$}`,`CREATED:${$}`,`LAST-MODIFIED:${$}`,"STATUS:CONFIRMED","SEQUENCE:0","TRANSP:OPAQUE","END:VEVENT"].filter(Boolean).join(v2)},m$=(P)=>{let $=new Set;return P.filter((Z)=>{let J=P1(Z),X=Z.rrule&&!Z.recurrenceId,Q=Z.recurrenceId&&!Z.rrule;if(X)return $.add(J),!0;if(Q)return!0;return!Z.rrule&&!Z.recurrenceId&&!$.has(J)})},k$=(P,$="ilamy Calendar")=>{let Z=X2($),J=m$(P).map(w$);return["BEGIN:VCALENDAR","VERSION:2.0","PRODID:-//ilamy//ilamy Calendar//EN","CALSCALE:GREGORIAN","METHOD:PUBLISH",`X-WR-CALNAME:${Z}`,`X-WR-CALDESC:Exported from ${Z}`,b$,...J,"END:VCALENDAR"].join(v2)},$1=(P,$="calendar.ics",Z="ilamy Calendar")=>{let J=new Blob([k$(P,Z)],{type:"text/calendar;charset=utf-8"}),X=URL.createObjectURL(J),Q=$.endsWith(".ics")?$:`${$}.ics`,Y=document.createElement("a");Y.href=X,Y.download=Q,document.body.append(Y),Y.click(),Y.remove(),URL.revokeObjectURL(X)};import{ChevronDown as g$}from"lucide-react";import{useMemo as C$,useState as h$}from"react";import{jsx as n,jsxs as Y2,Fragment as Q2}from"react/jsx-runtime";var E$=["january","february","march","april","may","june","july","august","september","october","november","december"],D$=()=>{let{currentDate:P,view:$,selectDate:Z,t:J,firstDayOfWeek:X}=B((K)=>({currentDate:K.currentDate,view:K.view,selectDate:K.selectDate,t:K.t,firstDayOfWeek:K.firstDayOfWeek})),[Q,Y]=h$(null),U=C$(()=>E$.map((K)=>J(K)),[J]),z=P.year(),q=Array.from({length:11},(K,F)=>z-5+F),L=U0(P,X),G=(K)=>{Z(K),Y(null)},W=()=>n(Q2,{children:U.map((K,F)=>n(C,{className:N("justify-start font-normal",P.month()===F&&"bg-primary/10"),onClick:()=>G(P.month(F)),variant:"ghost",children:K},K))}),V=()=>n(Q2,{children:q.map((K)=>n(C,{className:N("justify-start font-normal",P.year()===K&&"bg-primary/10"),onClick:()=>G(P.year(K)),variant:"ghost",children:K},K))}),f=()=>n(Q2,{children:Array.from({length:7},(K,F)=>{let M=P.subtract(3,"week").add(F,"week"),p=U0(M,X),R=p[0],I=p[6],H=M.isSame(P,"week"),k=R.month()!==I.month();return n(C,{className:N("justify-start font-normal",H&&"bg-primary/10"),onClick:()=>G(R),variant:"ghost",children:Y2("div",{className:"flex w-full items-center justify-between",children:[n("span",{children:`${R.format("MMM D")} - ${I.format("D")}`}),k&&n("span",{className:"ml-0.5 text-xs opacity-70",children:`${R.format("MMM")}-${I.format("MMM")}`})]})},r(R))})}),_=()=>{let K=P.startOf("month"),F=P.daysInMonth();return n(Q2,{children:Array.from({length:F},(M,p)=>{let R=K.date(p+1),I=R.isSame(P,"day"),H=t(R);return n(C,{className:N("justify-start font-normal",I&&"bg-primary/10"),onClick:()=>G(R),variant:"ghost",children:Y2("div",{className:"flex w-full items-center justify-between",children:[n("span",{children:R.format("dddd, MMM D")}),H&&n("span",{className:"bg-primary text-primary-foreground rounded-sm px-1! text-xs",children:J("today")})]})},r(R))})})};return[{id:"month",hidden:$==="year",title:P.format("MMMM"),render:W},{id:"year",hidden:!1,title:P.format("YYYY"),render:V},{id:"week",hidden:$!=="week",title:`${L[0].format("MMM D")} - ${L[6].format("MMM D")}`,render:f},{id:"day",hidden:$!=="day",title:P.format("dddd, D"),render:_}].filter((K)=>!K.hidden).map((K)=>Y2(l0,{onOpenChange:(F)=>Y(F?K.id:null),open:Q===K.id,children:[n(i0,{asChild:!0,children:Y2(C,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",variant:"ghost",children:[n(E,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",transitionKey:O.listKey(K.id,r(P)),children:K.title}),n(g$,{className:"h-4 w-4"})]})}),n(o0,{className:"w-40 p-0",children:n("div",{className:"flex max-h-60 flex-col overflow-auto",children:K.render()})})]},K.id))},Z1=D$;import{ChevronLeft as j$,ChevronRight as x$}from"lucide-react";import{jsx as FP,jsxs as c$}from"react/jsx-runtime";var v$=["day","week","month","year"],y$=({currentView:P,onChange:$,variant:Z="default",size:J="sm",className:X,onToday:Q,onNext:Y,onPrevious:U})=>{let{t:z,resources:q}=B((f)=>({t:f.t,resources:f.resources})),L=Z==="grid",G=q&&q.length>0,W=(f)=>{return N(L?"w-full":"",P===f&&"bg-primary/80")},V=(f)=>{return P===f?"default":"outline"};return c$("div",{className:N(L?"grid grid-cols-2 gap-2":"flex gap-1",X),children:[FP(C,{onClick:U,size:J,variant:"outline",children:FP(j$,{className:"h-4 w-4"})}),FP(C,{onClick:Y,size:J,variant:"outline",children:FP(x$,{className:"h-4 w-4"})}),v$.map((f)=>{if(G&&f==="year")return null;return FP(C,{className:W(f),onClick:()=>$(f),size:J,variant:V(f),children:z(f)},f)}),FP(C,{onClick:Q,size:J,variant:"outline",children:z("today")})]})},y2=y$;import{jsx as o,jsxs as E0}from"react/jsx-runtime";var r$=({className:P=""})=>{let{view:$,setView:Z,nextPeriod:J,prevPeriod:X,today:Q,openEventForm:Y,headerComponent:U,headerClassName:z,rawEvents:q,t:L}=B((F)=>({view:F.view,setView:F.setView,nextPeriod:F.nextPeriod,prevPeriod:F.prevPeriod,today:F.today,openEventForm:F.openEventForm,headerComponent:F.headerComponent,headerClassName:F.headerClassName,rawEvents:F.rawEvents,t:F.t})),[G,W]=d$(!1),V=()=>W(!1),f=(F)=>(...M)=>{F(...M),V()},_=()=>{let F=`ilamy-calendar-${new Date().toISOString().split("T")[0]}.ics`;$1(q,F,"ilamy Calendar"),V()},A=()=>E0(C,{className:"flex items-center gap-1",onClick:()=>Y(),size:"sm",variant:"default",children:[o(u$,{className:"h-4 w-4"}),o("span",{className:"hidden @4xl:inline",children:L("new")})]}),K=({fullWidth:F=!1})=>E0(C,{className:N("flex items-center gap-1",F&&"w-full gap-2"),onClick:_,size:"sm",variant:"outline",children:[o(i$,{className:"h-4 w-4"}),F?`${L("export")} Calendar (.ics)`:o("span",{className:"hidden @4xl/base-header:inline",children:L("export")})]});if(U)return U;return o("div",{className:"@container/base-header w-full","data-testid":"calendar-header",children:E0("div",{className:N("flex justify-center @2xl/base-header:justify-between flex-wrap items-center gap-2",P,z),children:[E0("div",{className:"flex flex-wrap items-center justify-center gap-1 @2xl/base-header:justify-start",children:[o(l$,{className:"h-5 w-5"}),o(Z1,{})]}),E0("div",{className:"flex flex-wrap justify-start @xl/base-header:justify-center gap-1 @4xl/base-header:justify-end overflow-x-auto",children:[E0("div",{className:"hidden @md/base-header:flex items-center justify-start gap-1",children:[o(y2,{className:"justify-end",currentView:$,onChange:Z,onNext:J,onPrevious:X,onToday:Q,variant:"default"}),o(A,{}),o(K,{})]}),E0("div",{className:"flex items-center justify-end gap-1 @md/base-header:hidden",children:[o(A,{}),E0(l0,{onOpenChange:W,open:G,children:[o(i0,{asChild:!0,children:o(C,{size:"sm",variant:"outline",children:o(o$,{className:"h-4 w-4"})})}),o(o0,{align:"end",className:"w-[240px] p-2",children:E0("div",{className:"space-y-2",children:[o(y2,{currentView:$,onChange:f(Z),onNext:f(J),onPrevious:f(X),onToday:f(Q),variant:"grid"}),o("div",{className:"pt-2 border-t",children:o(K,{fullWidth:!0})})]})})]})]})]})]})})},bP=r$;import{memo as O9}from"react";import{memo as _1,useMemo as N9}from"react";import{useMemo as c2}from"react";var J1=({days:P,events:$,dayMaxEvents:Z,dayNumberHeight:J=Y5,gridType:X="day",eventSpacing:Q=x0,eventBarHeight:Y=I0})=>{let U=P.at(0),z=P.at(-1);if(!U||!z)return[];let q=X==="hour"?U.startOf("hour"):U.startOf("day"),L=X==="hour"?z.endOf("hour"):z.endOf("day"),G=P.length,W=$.filter((p)=>p.end.diff(p.start,X)>0),V=$.filter((p)=>p.end.diff(p.start,X)===0),f=[...W].sort((p,R)=>{let I=p.start.diff(R.start);if(I!==0)return I;return R.end.diff(R.start)-p.end.diff(p.start)}),_=[...V].sort((p,R)=>p.start.diff(R.start)),A=Array.from({length:Z},()=>Array.from({length:G},()=>({taken:!1,event:null}))),K=[],F=(p,R)=>{for(let I=0;I<Z;I++){let H=!0;for(let k=p;k<=R;k++)if(A[I][k].taken){H=!1;break}if(H)return I}return-1},M=(p,R,I,H,k,D)=>{for(let l=R;l<=I;l++)A[p][l]={taken:!0,event:H};let u=I-R+1;K.push({left:R/G*100,width:u/G*100,top:J+Q+p*(Y+Q),height:Y,position:p,...H,isTruncatedStart:k,isTruncatedEnd:D})};for(let p of f){let R=S.max(p.start.startOf(X),q),I=X==="hour"?p.end.subtract(1,"minute"):p.end,H=S.min(I.startOf(X),L),k=Math.max(0,R.diff(q,X)),D=Math.min(G-1,H.diff(q,X)),u=p.start.startOf(X).isBefore(q),l=p.end.startOf(X).isAfter(L),P0=F(k,D);if(P0!==-1){M(P0,k,D,p,u,l);continue}for(let j=k+1;j<=D;j++){let g=F(j,D);if(g!==-1){M(g,j,D,p,!0,l);break}}}for(let p of _){let R=S.max(p.start.startOf(X),q),I=Math.max(0,Math.min(G-1,R.diff(q,X))),H=F(I,I);if(H!==-1)M(H,I,I,p,!1,!1)}return K};var l2=({days:P,allDay:$,dayNumberHeight:Z,resourceId:J,gridType:X})=>{let{getEventsForDateRange:Q,dayMaxEvents:Y,eventSpacing:U,eventHeight:z,getEventsForResource:q}=B(),L=P.at(0),G=P.at(-1),W=L?.startOf("day"),V=G?.endOf("day"),f=c2(()=>{if(!W||!V)return[];let K=Q(W,V);if(J)K=AP(K,q(J));if($)K=K.filter((F)=>!!F.allDay===$);return K},[Q,q,W,V,J,$]),_=c2(()=>{let K=new Map;for(let F of P){let M=r(F),p=F.startOf("day"),R=F.endOf("day"),I=f.filter((H)=>lP(H,p,R));K.set(M,I)}return K},[P,f]);return{positionedEvents:c2(()=>{return J1({days:P,events:f,dayMaxEvents:Y,dayNumberHeight:Z,eventSpacing:U,eventBarHeight:z,gridType:X})},[P,Y,Z,U,z,f,X]),dayEventsMap:_}};import Q9,{memo as Y9,useMemo as q9}from"react";import{jsx as n$}from"react/jsx-runtime";var X1=({date:P,className:$})=>{let Z=t(P);return n$("div",{className:N("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":O.dayNumber(P),children:P.format("D")})};import{useImperativeHandle as $9,useState as Q1}from"react";import{useDraggable as a$}from"@dnd-kit/core";import{memo as t$}from"react";import{jsx as HP,jsxs as P9}from"react/jsx-runtime";var s$=(P,$)=>{if(P&&$)return"rounded-none";if(P)return"rounded-r-md rounded-l-none";if($)return"rounded-l-md rounded-r-none";return"rounded-md"};function e$({elementId:P,event:$,className:Z,style:J,disableDrag:X=!1}){let{onEventClick:Q,renderEvent:Y,disableEventClick:U,disableDragAndDrop:z}=B(),{attributes:q,listeners:L,setNodeRef:G,isDragging:W}=a$({id:P,data:{event:$,type:"calendar-event"},disabled:X||z}),V=()=>{let f=$,_=f.isTruncatedStart,A=f.isTruncatedEnd;return P9("div",{className:N($.backgroundColor||"bg-blue-500",$.color||"text-white","h-full w-full px-1 border-[1.5px] border-card text-left overflow-clip relative",s$(Boolean(_),Boolean(A))),style:{backgroundColor:$.backgroundColor,color:$.color},children:[_&&HP("div",{className:"absolute left-0 top-0 bottom-0 w-0.5 bg-foreground/25"}),HP("p",{className:N("text-[10px] font-semibold sm:text-xs mt-0.5",_&&"pl-1",A&&"pr-1"),children:$.title}),A&&HP("div",{className:"absolute right-0 top-0 bottom-0 w-0.5 bg-foreground/25"})]})};return HP(E,{className:N("truncate h-full w-full",X||z?U?"cursor-default":"cursor-pointer":"cursor-grab",W&&!(X||z)&&"cursor-grabbing shadow-lg",Z),layout:!0,layoutId:P,onClick:(f)=>{f.stopPropagation(),Q($)},ref:G,style:J,transitionKey:P,...q,...L,children:Y?Y($):HP(V,{})})}var VP=t$(e$,(P,$)=>{return P.elementId===$.elementId&&P.disableDrag===$.disableDrag&&P.className===$.className&&P.event===$.event});import{jsx as wP,jsxs as Z9}from"react/jsx-runtime";var Y1=({ref:P})=>{let[$,Z]=Q1(!1),[J,X]=Q1(null),{currentDate:Q,firstDayOfWeek:Y,eventHeight:U}=B();$9(P,()=>({open:()=>Z(!0),close:()=>Z(!1),setSelectedDayEvents:(L)=>X(L)}));let q=Q.startOf("month").clone();while(q.day()!==Y)q=q.subtract(1,"day");return wP(UP,{onOpenChange:Z,open:$,children:Z9(zP,{className:"max-h-[80vh] max-w-md overflow-y-auto",children:[wP(_P,{children:wP(GP,{children:J?.day.format("MMMM D, YYYY")})}),wP("div",{className:"mt-4 space-y-3",children:J?.events.map((L)=>{return wP(VP,{className:"relative my-1",elementId:`all-events-dialog-event-$${L.id}`,event:L,style:{height:`${U}px`}},L.id)})})]})})};import{useDroppable as J9}from"@dnd-kit/core";import{jsx as X9}from"react/jsx-runtime";function q1({id:P,type:$,date:Z,hour:J,minute:X,resourceId:Q,allDay:Y,children:U,className:z,style:q,"data-testid":L,disabled:G=!1}){let{onCellClick:W,disableDragAndDrop:V,disableCellClick:f,classesOverride:_,view:A}=B(),{isOver:K,setNodeRef:F}=J9({id:P,data:{type:$,date:Z,hour:J,minute:X,resourceId:Q,allDay:Y},disabled:V||G}),M=(p)=>{if(p.stopPropagation(),f||G)return;let R=Z.hour(J??0).minute(X??0),I=R.clone();if(J!==void 0&&X!==void 0)I=I.hour(J).minute(X+15);else if(J!==void 0)I=I.hour(J+1).minute(0);else I=I.hour(23).minute(59);W({start:R,end:I,resourceId:Q,allDay:Y})};return X9("div",{className:N("droppable-cell",z,K&&!V&&!G&&"bg-accent",f||G?"cursor-default":"cursor-pointer",G&&(_?.disabledCell||q5)),"data-disabled":G.toString(),"data-testid":L,"data-view":A,onClick:M,ref:F,style:q,children:U})}import{jsx as q2,jsxs as U2,Fragment as U1}from"react/jsx-runtime";var U9=({day:P,hour:$,minute:Z,className:J="",resourceId:X,gridType:Q="day",shouldRenderEvents:Y=!0,allDay:U=!1,precomputedEvents:z,"data-testid":q,showDayNumber:L=!1,children:G})=>{let W=Q9.useRef(null),{dayMaxEvents:V=0,getEventsForDateRange:f,currentDate:_,t:A,getEventsForResource:K,currentLocale:F,eventSpacing:M,eventHeight:p}=B(),R=P2(X),I=q9(()=>{if(!Y)return[];if(z)return z;let g=f(P.startOf(Q),P.endOf(Q));if(U)g=g.filter((i)=>i.allDay);if(X)return AP(g,K(X)??[]);return g},[z,P,X,f,K,Q,Y,U]),H=(g,i)=>{W.current?.setSelectedDayEvents({day:g,events:i}),W.current?.open()},k=P.month()===_.month(),D=I.length-V,u=D>0,l=g5({date:P,hour:Q==="hour"?P.hour():void 0,businessHours:R}),P0=Q==="hour"?O.cell.day(P,P.format("HH"),P.format("mm")):O.cell.day(P),j=O.droppable.dayCell(P,{allDay:U,resourceId:X});return U2(U1,{children:[q2(q1,{allDay:U,className:N("cursor-pointer overflow-clip p-1 hover:bg-accent min-h-[60px] relative border-r last:border-r-0 only:border-r border-b",J),"data-testid":q||P0,date:P,disabled:!l||!k,hour:$,id:j,minute:Z,resourceId:X,type:"day-cell",children:U2("div",{className:"flex flex-col h-full w-full","data-testid":"grid-cell-content",style:{gap:`${M}px`},children:[L&&q2(X1,{date:P,locale:F}),Y&&U2(U1,{children:[I.slice(0,V).map((g,i)=>q2("div",{className:"w-full shrink-0","data-testid":g?.title,style:{height:`${p}px`}},O.listKey("empty",i,g.id))),u&&U2("div",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs shrink-0 mt-1",onClick:(g)=>{g.stopPropagation(),H(P,I)},onKeyDown:(g)=>{if(g.key==="Enter"||g.key===" ")g.preventDefault(),g.stopPropagation(),H(P,I)},role:"button",tabIndex:0,children:["+",D," ",A("more")]})]}),G]})}),q2(Y1,{ref:W})]})},mP=Y9(U9);import{jsx as z1}from"react/jsx-runtime";var r0=({resource:P,className:$,children:Z,"data-testid":J})=>{let{renderResource:X}=B();return z1("div",{className:N("flex items-center justify-center p-2 border-r last:border-r-0",$),"data-testid":J,style:{color:P.color,backgroundColor:P.backgroundColor},children:X?X(P):Z??z1("div",{className:"text-sm font-medium truncate",children:P.title})})};import{memo as K9}from"react";import{memo as z9}from"react";import{jsx as i2,Fragment as G9}from"react/jsx-runtime";var _9=({rangeStart:P,rangeEnd:$,now:Z,resource:J,axis:X="vertical"})=>{let{renderCurrentTimeIndicator:Q,view:Y}=B((W)=>({renderCurrentTimeIndicator:W.renderCurrentTimeIndicator,view:W.view})),U=Z??S();if(!(U.isSameOrAfter(P)&&U.isBefore($)))return null;let q=$.diff(P,"minute"),G=U.diff(P,"minute")/q*100;if(Q)return i2(G9,{children:Q({currentTime:U,rangeStart:P,rangeEnd:$,progress:G,resource:J,view:Y,axis:X})});if(X==="horizontal")return i2("div",{className:"absolute top-0 bottom-0 w-0.5 bg-red-500 z-50 pointer-events-none","data-testid":"current-time-indicator",style:{left:`${G}%`}});return i2("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}%`}})},z2=z9(_9);import{jsx as o2,jsxs as A9}from"react/jsx-runtime";var L9=({gridType:P="day",days:$,resourceId:Z,resource:J,"data-testid":X,positionedEvents:Q})=>{let{eventHeight:Y}=B(),U=$.at(0)?.startOf("day"),z=$.at(0),q=$.at(-1)?.add(1,P),L=P==="hour"&&Boolean(z&&q);return A9("div",{className:"absolute inset-0 pointer-events-none z-10 overflow-clip","data-testid":X,children:[L&&z&&q&&o2(z2,{axis:"horizontal",rangeEnd:q,rangeStart:z,resource:J}),Q.map((G)=>{let W=`${G.id}-${G.position}-${U?.toISOString()}-${Z??"no-resource"}`;return o2("div",{className:"absolute z-10 pointer-events-auto overflow-clip","data-left":G.left,"data-testid":O.container.horizontal.event(G.id),"data-top":G.top,"data-width":G.width,style:{left:`calc(${G.left}% + var(--spacing) * 0.25)`,width:`calc(${G.width}% - var(--spacing) * 1)`,top:`${G.top}px`,height:`${Y}px`},children:o2(VP,{className:"h-full w-full shadow",elementId:W,event:G})},O.listKey(W,"wrapper"))})]})},u2=K9(L9);import{jsx as O0,jsxs as d2}from"react/jsx-runtime";var f9=({id:P,resource:$,gridType:Z="day",variant:J="resource",dayNumberHeight:X,className:Q,columns:Y=[],allDay:U,showDayNumber:z=!1,isLastRow:q=!1})=>{let{renderResource:L}=B(),G=J==="resource",W=Y.some((A)=>A.days),V=N9(()=>{if(W)return[];return Y.map((A)=>A.day).filter((A)=>Boolean(A))},[Y,W]),{positionedEvents:f,dayEventsMap:_}=l2({days:V,gridType:Z,resourceId:$?.id,dayNumberHeight:X,allDay:U});return d2("div",{className:N("flex flex-1 relative",Q),"data-testid":O.container.horizontal.row(P),children:[G&&$&&O0(r0,{className:"w-20 sm:w-40 sticky left-0 bg-background z-20 h-full","data-testid":O.container.horizontal.rowLabel($.id),resource:$,children:L?L($):O0("div",{className:"wrap-break-word text-sm",children:$.title})}),d2("div",{className:"relative flex-1 flex",children:[O0("div",{className:"flex w-full",children:Y.map((A,K)=>{if(A.days)return O0(W9,{allDay:U,col:A,dayNumberHeight:X,gridType:Z,id:P,isLastCol:K===Y.length-1,isLastRow:q,resource:$,resourceId:$?.id,showDayNumber:z},A.id);return A.day?O0(mP,{allDay:U,className:N("flex-1 w-20",q&&"border-b-0",A.className),day:A.day,gridType:Z,hour:Z==="hour"?A.day.hour():void 0,precomputedEvents:_.get(r(A.day)),resourceId:$?.id,showDayNumber:z},A.day.toISOString()):null})}),!W&&O0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:O0(u2,{"data-testid":O.container.eventsLayer("horizontal",P),days:V,gridType:Z,positionedEvents:f,resource:$,resourceId:$?.id})})]})]})},W9=_1(({col:P,gridType:$="day",allDay:Z,resource:J,resourceId:X,dayNumberHeight:Q,showDayNumber:Y,isLastRow:U,isLastCol:z,id:q})=>{let L=P.days??[],{positionedEvents:G}=l2({days:L,gridType:$,resourceId:X,dayNumberHeight:Q,allDay:Z});return d2("div",{className:"flex relative w-full",children:[O0("div",{className:"flex w-full",children:L.map((W)=>O0(mP,{allDay:Z,className:N("flex-1 w-20",U&&"border-b-0",!z&&"border-r!",P.className),day:W,gridType:$,hour:$==="hour"?W.hour():void 0,resourceId:X,showDayNumber:Y},W.toISOString()))}),O0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:O0(u2,{"data-testid":O.container.eventsLayer("horizontal",q),days:L,gridType:$,positionedEvents:G,resource:J,resourceId:X})})]})}),_2=_1(f9);import{memo as F9}from"react";import{jsx as G1}from"react/jsx-runtime";var V9=({className:P})=>{let{t:$}=B();return G1("div",{className:N("w-16 border-r shrink-0 sticky left-0 bg-background z-20 flex border-b items-center justify-center px-1 sm:text-xs text-muted-foreground",P),children:G1("span",{className:"truncate",children:$("allDay")})})},OP=F9(V9);import{jsx as K1,jsxs as M9}from"react/jsx-runtime";var B9=({days:P,classes:$,resource:Z,showSpacer:J=!0})=>{let X=P.map((Q,Y)=>({id:O.col.allDay(Q,Y),day:Q,gridType:"day",className:N("h-full min-h-12 border-r last:border-r-0",$?.cell)}));return M9("div",{className:N("flex w-full bg-background",$?.row),"data-testid":"all-day-row",children:[J&&K1(OP,{className:$?.spacer}),K1(_2,{allDay:!0,className:"flex-1 min-h-fit border-b",columns:X,dayNumberHeight:0,gridType:"day",id:O.allDayRow(Z?.id),isLastRow:!0,resource:Z,variant:"regular"})]})},n0=O9(B9);import{jsx as A1,Fragment as L1}from"react/jsx-runtime";var H0=({date:P})=>{let{renderHour:$,timeFormat:Z}=B();if($)return A1(L1,{children:$(P)});return A1(L1,{children:P.format(Z==="12-hour"?"h A":"H")})};import{useRef as x9}from"react";import{useEffect as p9,useRef as I9}from"react";var S9=/^(\d{1,2})(?::\d{1,2})?(?::\d{1,2})?$/,R9="[data-hour]",T9=(P)=>{let $=S9.exec(P);if(!$)return null;let Z=Number.parseInt($[1],10);return Z>=0&&Z<=23?Z:null},r2=(P)=>Number.parseInt(P.getAttribute("data-hour")??"",10),b9=(P,$)=>{let Z=P.at(0),J=P.at(-1);if(!Z||!J)return null;if($<=r2(Z))return Z;if($>=r2(J))return J;return P.find((X)=>r2(X)===$)??null},H9=(P,$,Z,J)=>{let X=$.getBoundingClientRect(),Q=Z.getBoundingClientRect();if(J==="horizontal"){P.scrollTo({left:X.left-Q.left,behavior:"auto"});return}P.scrollTo({top:X.top-Q.top,behavior:"auto"})},G2=({viewportRef:P,scrollTime:$,enabled:Z,scrollKey:J,axis:X="vertical"})=>{let Q=I9(null);p9(()=>{if(!Z||!$)return;if(Q.current===J)return;let Y=T9($);if(Y===null)return;let U=P.current;if(!U)return;let z=Array.from(U.querySelectorAll(R9)),q=z.at(0),L=b9(z,Y);if(!q||!L)return;H9(U,L,q,X),Q.current=J},[Z,$,J,P,X])};import{memo as g9}from"react";import{memo as w9}from"react";import{useMemo as f1}from"react";var N1=({days:P,gridType:$="hour",events:Z})=>{let J=Z.filter((V)=>!V.allDay).toSorted((V,f)=>V.start.diff(f.start));if(J.length===0)return[];let X=P.at(0)||S(),Q=P.length,Y=$==="day",U=[],z=[],q=null;for(let V of J){if(q&&V.start.isSameOrAfter(q)){if(z.length>0)U.push(z);z=[]}z.push(V),q=q?S.max(q,V.end):V.end}if(z.length>0)U.push(z);let L=(V)=>{let f=V.start.diff(X,$,!0),_=V.end.diff(X,$,!0);if(Y){if(f=Math.floor(f),_=Math.ceil(_),_<=f)_=f+1}if(f<0)f=0;if(_>Q)_=Q;let A=Math.max(0,_-f);if(A===0)return null;return{top:f/Q*100,height:A/Q*100}},G=(V)=>V===2?25:V===3?50:V===4?60:70,W=[];for(let V of U){if(V.length===1){let K=V[0],F=L(K);if(!F)continue;W.push({...K,left:0,width:100,...F});continue}let f=[...V].sort((K,F)=>{let M=F.end.diff(F.start,"minute")-K.end.diff(K.start,"minute");return M!==0?M:K.start.diff(F.start)}),_=f.length,A=_>1?G(_)/(_-1):0;for(let K=0;K<_;K++){let F=f[K],M=L(F);if(!M)continue;let p=K===0?0:A*K;W.push({...F,...M,left:p,width:100-p,zIndex:K+1})}}return W};var W1=({days:P,gridType:$,resourceId:Z})=>{let{getEventsForDateRange:J,getEventsForResource:X}=B(),Q=P.at(0),Y=P.at(-1),U=Q?.startOf("day"),z=Y?.endOf("day"),q=f1(()=>{if(!U||!z)return[];let G=J(U,z);if(Z)G=AP(G,X(Z));return G.filter((W)=>!W.allDay)},[U,z,J,Z,X]);return f1(()=>{return N1({days:P,events:q,gridType:$})},[P,$,q])};import{jsx as n2,jsxs as k9}from"react/jsx-runtime";var m9=({days:P,gridType:$="hour",resourceId:Z,resource:J,"data-testid":X})=>{let Q=W1({days:P,gridType:$,resourceId:Z}),Y=P.at(0),U=P.at(-1)?.add(1,$);return k9("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":X,children:[Y&&U&&n2(z2,{rangeEnd:U,rangeStart:Y,resource:J}),Q.map((z,q)=>{let L=`event-${z.id}-${q}-${P.at(0)?.toISOString()}-${Z??"no-resource"}`,G=z.end.diff(z.start,"minute")<=15;return n2("div",{className:"absolute",style:{left:`${z.left}%`,width:`calc(${z.width}% - var(--spacing) * 2)`,top:`${z.top}%`,height:`${z.height}%`},children:n2(VP,{className:N("pointer-events-auto",{"[&_p]:text-[10px] [&_p]:mt-0":G}),elementId:L,event:z})},O.listKey(L,"wrapper"))})]})},F1=w9(m9);import{jsx as BP,jsxs as h9}from"react/jsx-runtime";var C9=({id:P,days:$,resourceId:Z,resource:J,"data-testid":X,gridType:Q,className:Y,renderCell:U,noEvents:z,slotDurationMinutes:q=60,isLastColumn:L})=>{let G=Math.floor(60/q),W=Array.from({length:G},(f,_)=>_*q),V=W.length>1;return BP("div",{className:N("flex flex-col flex-1 items-center justify-center min-w-20 bg-background relative",Y),"data-testid":X||O.container.vertical.col(P),children:h9("div",{className:"w-full h-full relative grid",style:{gridTemplateRows:`repeat(${$.length}, minmax(0, 1fr))`},children:[$.map((f,_)=>{let A=f.format("HH");if(U){let K=P===O.col.time,F=K?O.cell.verticalTime(A):O.cell.vertical(f,A,"00",Z);return BP("div",{className:"min-h-[60px] border-b border-r","data-hour":K?A:void 0,"data-testid":F,children:U(f)},O.listKey(P,_,A))}return BP("div",{className:N("flex flex-col min-h-[60px]",L?"border-r-0":"border-r"),children:W.map((K)=>{let F=String(K).padStart(2,"0"),M=O.cell.vertical(f,A,F,Z);return BP(mP,{className:N("hover:bg-accent relative z-10 flex-1 min-h-0 cursor-pointer border-b border-r-0",V&&"border-dashed"),"data-testid":M,day:V?f.minute(K):f,gridType:Q,hour:f.hour(),minute:V?K:void 0,resourceId:Z,shouldRenderEvents:!1},O.listKey(P,_,F))})},O.listKey(P,_,A))}),!z&&BP("div",{className:"absolute inset-0 z-10 pointer-events-none",children:BP(F1,{"data-testid":O.container.eventsLayer("vertical",P),days:$,gridType:Q,resource:J,resourceId:Z})})]})})},V1=g9(C9);import{memo as E9}from"react";import{jsx as O1,jsxs as j9}from"react/jsx-runtime";var D9=({children:P,classes:$,allDayRow:Z,expandAllDayRow:J=!1})=>{let{stickyViewHeader:X,viewHeaderClassName:Q}=B((Y)=>({stickyViewHeader:Y.stickyViewHeader,viewHeaderClassName:Y.viewHeaderClassName}));return j9("div",{className:N(J&&"flex h-full flex-col",X&&"sticky top-0 z-21 bg-background",Q),children:[O1("div",{className:N("h-12 border-b min-w-full w-fit",$?.header),"data-testid":"vertical-grid-header",children:P}),Z&&O1("div",{className:N("flex w-full min-h-12",J&&"flex-1 overflow-hidden",$?.allDay),"data-testid":"vertical-grid-all-day",children:Z})]})},B1=E9(D9);import{jsx as MP,jsxs as M1}from"react/jsx-runtime";var w0=({columns:P,children:$,gridType:Z="day",variant:J="resource",classes:X,allDayRow:Q,slotDurationMinutes:Y,style:U})=>{let z=J==="resource",q=!z,L=P.every((K)=>!K.days?.length),{currentDate:G,view:W,scrollTime:V}=B(),f=x9(null);G2({viewportRef:f,scrollTime:V,enabled:Z==="hour"&&!L,scrollKey:`${W}-${G.format("YYYY-MM-DD")}`});let A=$&&MP(B1,{allDayRow:Q,classes:{header:X?.header,allDay:X?.allDay},expandAllDayRow:L,children:$});if(L&&A)return MP("div",{className:"h-full flex flex-col","data-testid":"vertical-grid-container",style:U,children:A});return M1("div",{className:"h-full flex flex-col","data-testid":"vertical-grid-container",style:U,children:[q&&A,M1(T0,{className:N("h-full",q&&"overflow-auto"),"data-testid":"vertical-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full",ref:f},children:[z&&A,MP("div",{className:N("flex flex-1 min-w-full w-fit",X?.body),"data-testid":"vertical-grid-body",children:P.map((K,F)=>MP(V1,{...K,gridType:Z,isLastColumn:F===P.length-1,slotDurationMinutes:Y},O.listKey(K.id,F)))}),MP(h0,{className:"z-30"})," ",MP(h0,{className:"z-30",orientation:"horizontal"})," "]})]})};function G0({referenceDate:P,businessHours:$,hideNonBusinessHours:Z,allDates:J=[P],resourceBusinessHours:X=[]}){let Q=N5({referenceDate:P}),Y=!!$||X.length>0;if(!(Z&&Y))return Q;let{minStart:z,maxEnd:q,hasBusinessHours:L}=tP({allDates:J,businessHours:$,resourceBusinessHours:X,hideNonBusinessHours:Z});if(!L)return Q;if(z>=q)return[];return Q.filter((G)=>{let W=G.hour();return W>=z&&W<q})}import{jsx as ZP,jsxs as v9}from"react/jsx-runtime";var p1=()=>{let{currentDate:P,t:$,businessHours:Z,hideNonBusinessHours:J,slotDuration:X}=B(),Q=t(P),Y=G0({referenceDate:P,businessHours:Z,hideNonBusinessHours:J,allDates:[P]}),U={id:O.col.time,day:void 0,days:Y,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(q)=>ZP("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:ZP(H0,{date:q})})},z={id:O.col.day(P),day:P,days:Y,className:"w-[calc(100%-4rem)] flex-1",gridType:"hour"};return ZP(w0,{allDayRow:ZP(n0,{days:[P]}),classes:{header:"w-full",body:"w-full",allDay:"w-full"},columns:[U,z],gridType:"hour",slotDurationMinutes:X,variant:"regular",children:ZP("div",{className:"flex flex-1 justify-center items-center min-h-12","data-testid":"day-view-header",children:v9(E,{className:N("flex justify-center items-center text-center text-base font-semibold sm:text-xl",Q&&"text-primary"),transitionKey:r(P),children:[ZP("span",{className:"xs:inline hidden",children:P.format("dddd, ")}),P.format("MMMM D, YYYY"),Q&&ZP("span",{className:"bg-primary text-primary-foreground ml-2 rounded-full px-1 py-0.5 text-xs sm:px-2 sm:text-sm",children:$("today")})]})})})};import{useMemo as o9}from"react";import{useRef as i9}from"react";import{memo as y9}from"react";import{jsx as l9}from"react/jsx-runtime";var c9=({children:P,className:$})=>{let{stickyViewHeader:Z,viewHeaderClassName:J}=B((X)=>({stickyViewHeader:X.stickyViewHeader,viewHeaderClassName:X.viewHeaderClassName}));return l9("div",{className:N("flex h-12 w-fit",Z&&"sticky top-0 z-21 bg-background",$,J),"data-testid":"horizontal-grid-header",children:P})},I1=y9(c9);import{jsx as pP,jsxs as S1}from"react/jsx-runtime";var K2=({rows:P,children:$,classes:Z,allDay:J,gridType:X,variant:Q="resource",dayNumberHeight:Y})=>{let{currentDate:U,view:z,scrollTime:q}=B(),L=i9(null),G=Q==="resource",W=!G;G2({viewportRef:L,scrollTime:q,enabled:X==="hour"&&G,scrollKey:`${z}-${U.format("YYYY-MM-DD")}`,axis:"horizontal"});let f=$&&pP(I1,{className:Z?.header,children:$});return S1("div",{className:"h-full flex flex-col","data-testid":"horizontal-grid-container",children:[W&&f,S1(T0,{className:N("h-full",W&&"overflow-auto"),"data-testid":"horizontal-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full",ref:L},children:[G&&f,pP("div",{className:N("flex flex-1 w-fit",Z?.body),"data-testid":"horizontal-grid-body",children:pP("div",{className:"relative w-full flex flex-col flex-1",children:P.map((_,A)=>pP(_2,{allDay:_.allDay??J,dayNumberHeight:Y,gridType:X,isLastRow:A===P.length-1,variant:Q,..._},_.id))},U.format("YYYY-MM"))}),pP(h0,{className:"z-30"}),pP(h0,{className:"z-30",orientation:"horizontal"})]})]})};import{jsx as a2}from"react/jsx-runtime";var R1=({className:P})=>{let{firstDayOfWeek:$,stickyViewHeader:Z,viewHeaderClassName:J,currentDate:X}=B(),Q=U0(X,$);return a2("div",{className:N("flex w-full",Z&&"sticky top-0 z-20",J,P),"data-testid":"month-header",children:Q.map((Y,U)=>a2(E,{className:"py-2 text-center font-medium border-r last:border-r-0 border-b flex-1","data-testid":O.header.weekday("month",Y.format("ddd")),delay:U*0.05,transitionKey:Y.toISOString(),children:a2("span",{className:"text-sm capitalize",children:Y.format("ddd")})},Y.toISOString()))})};import{jsx as T1}from"react/jsx-runtime";var b1=()=>{let{currentDate:P,firstDayOfWeek:$}=B(),J=o9(()=>LP(P,$),[P,$]).map((X,Q)=>({id:O.listKey("week",Q),columns:X.map((Y)=>({id:O.col.day(Y),day:Y,className:"w-auto",gridType:"day"})),className:"flex-1",showDayNumber:!0}));return T1(K2,{classes:{body:"w-full",header:"w-full"},rows:J,variant:"regular",children:T1(R1,{className:"h-12"})})};import{useMemo as L2}from"react";import{jsx as D0,jsxs as t2}from"react/jsx-runtime";var H1="w-[calc((100%-4rem)/var(--visible-days))] min-w-[calc((100%-4rem)/var(--visible-days))] flex-1",w1="w-10 sm:w-16 min-w-10 sm:min-w-16 max-w-10 sm:max-w-16",m1=()=>{let{t:P,currentDate:$,firstDayOfWeek:Z,selectDate:J,openEventForm:X,businessHours:Q,hideNonBusinessHours:Y,hiddenDays:U,slotDuration:z}=B(),q=L2(()=>U0($,Z),[$,Z]),L=L2(()=>U?q.filter((_)=>!U.has(_.day())):q,[q,U]),G=L2(()=>G0({referenceDate:$,businessHours:Q,hideNonBusinessHours:Y,allDates:q}),[$,Q,Y,q]),W={id:O.col.time,days:G,day:void 0,className:`shrink-0 ${w1} sticky left-0 bg-background z-20`,gridType:"hour",noEvents:!0,renderCell:(_)=>D0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:D0(H0,{date:_})})},V=L2(()=>{return L.map((_)=>({id:O.col.day(_),day:_,label:_.format("D"),className:H1,days:G0({referenceDate:_,businessHours:Q,hideNonBusinessHours:Y,allDates:q}),value:_}))},[q,Q,Y,L.map]),f={"--visible-days":L.length};return D0(w0,{allDayRow:D0(n0,{classes:{cell:H1,spacer:w1},days:L}),classes:{header:"w-full h-18",body:"w-full"},columns:[W,...V],gridType:"hour",slotDurationMinutes:z,style:f,variant:"regular",children:t2("div",{className:"flex h-full flex-1","data-testid":"week-view-header",children:[D0("div",{className:"w-10 sm:w-16 h-full shrink-0 items-center justify-center border-r p-2 flex",children:t2("div",{className:"flex flex-col items-center justify-center min-w-0 w-full",children:[D0("span",{className:"text-muted-foreground text-xs truncate w-full text-center",children:P("week")}),D0("span",{className:"font-medium truncate w-full text-center",children:$.week()})]})}),L.map((_,A)=>{let K=t(_),F=O.header.week.day(_);return t2(E,{className:N("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-20 h-full",K&&"bg-primary/10 font-bold"),"data-testid":O.header.weekday("week",_.format("dddd")),delay:A*0.05,onClick:()=>{J(_),X({start:_})},transitionKey:F,children:[D0("div",{className:"text-xs sm:text-sm",children:_.format("ddd")}),D0("div",{className:N("mx-auto mt-1 flex h-5 w-5 items-center justify-center rounded-full text-xs",K&&"bg-primary text-primary-foreground"),children:_.format("D")})]},F)})]})})};import{jsx as a0,jsxs as kP}from"react/jsx-runtime";var u9=[{id:"sun",label:"S"},{id:"mon",label:"M"},{id:"tue",label:"T"},{id:"wed",label:"W"},{id:"thu",label:"T"},{id:"fri",label:"F"},{id:"sat",label:"S"}],d9=["bg-primary","bg-blue-500","bg-green-500"],r9=42,k1=()=>{let{currentDate:P,selectDate:$,events:Z,setView:J,getEventsForDateRange:X,t:Q}=B(),Y=P.year(),U=()=>{return Array.from({length:12},(_,A)=>{let K=S().year(Y).month(A).startOf("month"),F=Z.filter((M)=>M.start.year()===Y&&M.start.month()===A);return{date:K,name:K.format("MMMM"),eventCount:F.length,monthKey:K.format("MM")}})},z=(_)=>{let A=_.startOf("month").startOf("week");return Array.from({length:r9},(K,F)=>{let M=A.add(F,"day"),p=M.startOf("day"),R=M.endOf("day"),I=X(p,R);return{date:M,dayKey:r(M),isInCurrentMonth:M.month()===_.month(),isToday:t(M),isSelected:M.isSame(P,"day"),eventCount:I.length}})},q=(_,A,K)=>{K?.stopPropagation(),$(_),J(A)},L=(_)=>{let A=_===1?Q("event"):Q("events");return`${_} ${A}`},G=(_)=>{let K=_.isInCurrentMonth?"":"text-muted-foreground opacity-50",F=_.isToday?"bg-primary text-primary-foreground rounded-full":"",M=_.isSelected&&!_.isToday?"bg-muted rounded-full font-bold":"",p=_.eventCount>0&&!_.isToday&&!_.isSelected?"font-medium":"";return N("relative flex aspect-square w-full cursor-pointer flex-col items-center justify-center hover:bg-accent rounded-sm transition-colors duration-200",K,F,M,p)},W=(_,A)=>{return N("h-[3px] w-[3px] rounded-full",A?"bg-primary-foreground":_)},V=U(),f=(_)=>{if(_===0)return"";return L(_)};return kP(T0,{className:"h-full","data-testid":"year-view",children:[a0("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:V.map((_,A)=>{let K=z(_.date),F=A*0.05;return kP("div",{className:"hover:border-primary flex flex-col rounded-lg border p-3 text-left transition-all duration-200 hover:shadow-md","data-testid":O.header.year.month(_.monthKey),children:[kP(E,{className:"mb-2 flex items-center justify-between",delay:F,transitionKey:O.listKey("month",_.monthKey),children:[a0("button",{className:"text-lg font-medium hover:underline cursor-pointer","data-testid":O.header.year.month(_.monthKey,"title"),onClick:()=>q(_.date,"month"),type:"button",children:_.name}),_.eventCount>0&&a0("span",{className:"bg-primary text-primary-foreground rounded-full px-2 py-1 text-xs","data-testid":O.header.year.month(_.monthKey,"count"),children:L(_.eventCount)})]},O.listKey("month",_.monthKey)),kP("div",{className:"grid grid-cols-7 gap-px text-[0.6rem]","data-testid":O.header.year.month(_.monthKey,"mini"),children:[u9.map((M)=>a0("div",{className:"text-muted-foreground h-3 text-center",children:M.label},O.listKey("header",_.monthKey,M.id))),K.map((M)=>{let p=O.header.year.day(_.date.format("YYYY-MM"),M.dayKey),R=M.eventCount>0,I=Math.min(M.eventCount,3),H=d9.slice(0,I);return kP("button",{className:G(M),"data-testid":p,onClick:(k)=>q(M.date,"day",k),title:f(M.eventCount),type:"button",children:[a0("span",{className:"text-center leading-none",children:M.date.date()}),R&&a0("div",{className:N("absolute bottom-0 flex w-full justify-center space-x-px",M.isToday&&"bottom-px"),children:H.map((k)=>a0("span",{className:W(k,M.isToday)},k))})]},M.dayKey)})]})]},_.monthKey)})}),a0(h0,{className:"z-30"})]})};import{useCallback as s2,useMemo as n9}from"react";import{jsx as a9}from"react/jsx-runtime";var g1=({children:P,events:$=[],firstDayOfWeek:Z=0,initialView:J="month",initialDate:X,renderEvent:Q,onEventClick:Y,onCellClick:U,onViewChange:z,onEventAdd:q,onEventUpdate:L,onEventDelete:G,onDateChange:W,locale:V,timezone:f,disableCellClick:_,disableEventClick:A,disableDragAndDrop:K,dayMaxEvents:F,eventSpacing:M=x0,eventHeight:p=I0,stickyViewHeader:R=!0,viewHeaderClassName:I="",headerComponent:H,headerClassName:k,businessHours:D,renderEventForm:u,translations:l,translator:P0,timeFormat:j="12-hour",classesOverride:g,renderCurrentTimeIndicator:i,renderHour:K0,hideNonBusinessHours:F0=!1,hiddenDays:M0,slotDuration:m0=60,scrollTime:q0})=>{let X0=iP({events:$,firstDayOfWeek:Z,initialView:J,initialDate:X,businessHours:D,onEventAdd:q,onEventUpdate:L,onEventDelete:G,onDateChange:W,onViewChange:z,locale:V,timezone:f,translations:l,translator:P0}),L0=s2((a)=>{X0.setSelectedEvent(a),X0.setIsEventFormOpen(!0)},[X0]),k0=s2((a)=>{if(A)return;if(Y)Y(a);else L0(a)},[A,Y,L0]),g0=s2((a)=>{if(_)return;if(U)U(a);else X0.openEventForm(a)},[U,_,X0]),Q0=n9(()=>({...X0,renderEvent:Q,onEventClick:k0,onCellClick:g0,locale:V,timezone:f,disableCellClick:_,disableEventClick:A,disableDragAndDrop:K,dayMaxEvents:F,eventSpacing:M,eventHeight:p,stickyViewHeader:R,viewHeaderClassName:I,headerComponent:H,headerClassName:k,businessHours:D,renderEventForm:u,timeFormat:j,classesOverride:g,renderCurrentTimeIndicator:i,renderHour:K0,hideNonBusinessHours:F0,hiddenDays:M0,slotDuration:m0,scrollTime:q0}),[X0,Q,k0,g0,V,f,_,A,K,F,M,p,R,I,H,k,D,u,j,g,i,K0,F0,M0,m0,q0]);return a9(vP.Provider,{value:Q0,children:P})};import{jsx as B0,jsxs as e9}from"react/jsx-runtime";var t9=()=>{let{view:P,dayMaxEvents:$}=B();return e9("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-calendar",children:[B0(bP,{className:"p-1"}),B0(uP,{children:B0(E,{className:"w-full h-[calc(100%-3.5rem)]",direction:"horizontal",transitionKey:P,children:B0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:B0(b1,{dayMaxEvents:$},"month"),week:B0(m1,{},"week"),day:B0(p1,{},"day"),year:B0(k1,{},"year")}[P]})})}),B0(Z2,{})]})},s9=({events:P,firstDayOfWeek:$="sunday",initialView:Z="month",initialDate:J,dayMaxEvents:X=YP,eventSpacing:Q=x0,eventHeight:Y=I0,stickyViewHeader:U=!0,viewHeaderClassName:z="",timeFormat:q="12-hour",hideNonBusinessHours:L=!1,hiddenDays:G,...W})=>{return B0(g1,{dayMaxEvents:X,eventHeight:Y,eventSpacing:Q,events:DP(P),firstDayOfWeek:v0[$],hiddenDays:EP(G),hideNonBusinessHours:L,initialDate:qP(J),initialView:Z,stickyViewHeader:U,timeFormat:q,viewHeaderClassName:z,...W,children:B0(t9,{})})};import{jsx as P3}from"react/jsx-runtime";var IP=({days:P,gridType:$="day",children:Z,classes:J})=>{let{getVisibleResources:X}=B(),Q=X(),Y=P.map((z)=>{let q=Array.isArray(z),L=q?z[0]:z;return{id:L?O.col.day(L):"day-col-unknown",day:q?void 0:z,days:q?z:void 0,className:J?.cell,gridType:$}}),U=Q.map((z)=>({id:z.id,title:z.title,resource:z,columns:Y}));return P3(K2,{classes:J,dayNumberHeight:0,gridType:$,rows:U,children:Z})};import{jsx as e2}from"react/jsx-runtime";var A2=({hours:P,view:$,delayStep:Z})=>e2("div",{className:"flex h-12 border-b",children:P.map((J,X)=>{let Q=J.isSame(S(),"hour"),Y=J.format("HH"),U=O.header.week.hour(J,X);return e2(E,{className:N("min-w-20 flex-1 border-r last:border-r-0 flex items-center justify-center text-xs shrink-0",Q&&"bg-blue-50 text-blue-600 font-medium"),"data-hour":Y,"data-testid":O.header.resource.timeLabel($,Y),delay:X*Z,transitionKey:O.listKey(U,"motion"),children:e2(H0,{date:J})},O.listKey(U,"animated"))})});import{jsx as N2,jsxs as $3}from"react/jsx-runtime";var C1=()=>{let{currentDate:P,t:$,businessHours:Z,hideNonBusinessHours:J,getVisibleResources:X}=B(),Q=X(),Y=G0({referenceDate:P,businessHours:Z,hideNonBusinessHours:J,allDates:[P],resourceBusinessHours:Q.map((U)=>U.businessHours).filter(Boolean)});return $3(IP,{classes:{header:"min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:Y,gridType:"hour",children:[N2("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:N2("div",{className:"text-sm truncate px-1 min-w-0",children:$("resources")})}),N2("div",{className:"flex-1 flex flex-col",children:N2(A2,{delayStep:0.05,hours:Y,view:"day"})})]})};import{jsx as JP,jsxs as h1}from"react/jsx-runtime";var E1=()=>{let{currentDate:P,getVisibleResources:$,businessHours:Z,hideNonBusinessHours:J,slotDuration:X}=B(),Q=$(),Y=G0({referenceDate:P,businessHours:Z,hideNonBusinessHours:J,allDates:[P],resourceBusinessHours:Q.map((q)=>q.businessHours).filter(Boolean)}),U={id:O.col.time,day:void 0,days:Y,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(q)=>JP("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:JP(H0,{date:q})})},z=Q.map((q)=>({id:O.col.day(P,q.id),resourceId:q.id,resource:q,days:Y,day:P,gridType:"hour"}));return JP(w0,{allDayRow:h1("div",{className:"flex w-full",children:[JP(OP,{}),Q.map((q)=>JP(n0,{classes:{cell:"min-w-20"},days:[P],resource:q,showSpacer:!1},O.allDayRow(q.id)))]}),classes:{body:"w-full",header:"w-full"},columns:[U,...z],"data-testid":"resource-day",gridType:"hour",slotDurationMinutes:X,children:h1("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[JP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),Q.map((q)=>JP(r0,{className:"min-w-20 flex-1",resource:q},O.listKey("resource-cell",q.id)))]})})};import{jsx as D1}from"react/jsx-runtime";var j1=()=>{let{orientation:P}=B();if(P==="vertical")return D1(E1,{});return D1(C1,{})};import{useMemo as Z3}from"react";import{jsx as f2,jsxs as x1}from"react/jsx-runtime";var v1=()=>{let{currentDate:P,t:$}=B(),Z=Z3(()=>{return A5(P)},[P]);return x1(IP,{days:Z,children:[f2("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:f2("div",{className:"text-sm truncate px-1 min-w-0",children:$("resources")})}),Z.map((J,X)=>{let Q=`resource-month-header-${J.toISOString()}`;return x1(E,{className:"w-20 border-b border-r shrink-0 flex items-center justify-center flex-col",delay:X*0.05,transitionKey:O.listKey(Q,"motion"),children:[f2("div",{className:"text-xs font-medium",children:J.format("D")}),f2("div",{className:"text-xs text-muted-foreground",children:J.format("ddd")})]},O.listKey(Q,"animated"))})]})};import{jsx as gP,jsxs as y1}from"react/jsx-runtime";var c1=()=>{let{currentDate:P,getVisibleResources:$}=B(),Z=$(),J=P.startOf("month"),X=Array.from({length:P.daysInMonth()},(U,z)=>J.add(z,"day")),Q={id:O.col.date,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:(U)=>y1("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:[gP("span",{children:U.format("D")}),gP("span",{children:U.format("ddd")})]})},Y=Z.map((U)=>({id:O.col.resource("month",U.id),day:void 0,resourceId:U.id,days:X,gridType:"day"}));return gP(w0,{classes:{header:"w-full",body:"w-full"},columns:[Q,...Y],"data-testid":"resource-month-vertical-grid",children:y1("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[gP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),Z.map((U)=>gP(r0,{className:"min-w-20 flex-1",resource:U},O.listKey("resource-cell",U.id)))]})})};import{jsx as l1}from"react/jsx-runtime";var i1=()=>{let{orientation:P}=B();if(P==="vertical")return l1(c1,{});return l1(v1,{})};import{useMemo as P5}from"react";function t0(){let{currentDate:P,firstDayOfWeek:$,getVisibleResources:Z,weekViewGranularity:J,businessHours:X,hideNonBusinessHours:Q,hiddenDays:Y}=B(),U=J==="hourly",z=Z(),q=P5(()=>U0(P,$),[P,$]),L=P5(()=>Y?q.filter((W)=>!Y.has(W.day())):q,[q,Y]),G=P5(()=>z.flatMap((W)=>W.businessHours?[W.businessHours]:[]),[z]);return{isHourly:U,resources:z,weekDays:q,visibleDays:L,currentDate:P,businessHours:X,hideNonBusinessHours:Q,resourceBusinessHours:G}}import{jsx as W2,jsxs as J3}from"react/jsx-runtime";var o1=({days:P})=>{let{weekViewGranularity:$}=B(),Z=$==="hourly";return W2("div",{className:"flex h-12",children:P.map((J,X)=>{let Q=t(J),Y=O.header.week.day(J);return W2(E,{className:N("shrink-0 border-r last:border-r-0 border-b flex-1 flex items-center text-center font-medium min-w-20",Q&&"bg-blue-50 text-blue-600"),"data-testid":O.header.resource.weekDay,delay:X*0.05,transitionKey:O.listKey(Y,"motion"),children:J3("div",{className:N(Z?"sticky left-1/2":"w-full text-center"),children:[W2("div",{className:"text-sm",children:J.format("ddd")}),W2("div",{className:"text-xs text-muted-foreground",children:J.format("M/D")})]})},O.listKey(Y,"animated"))})})};import{useMemo as X3}from"react";function u1(){let{isHourly:P,weekDays:$,businessHours:Z,hideNonBusinessHours:J,resourceBusinessHours:X}=t0();return{weekHours:X3(()=>{if(!P)return[];return $.map((Y)=>G0({referenceDate:Y,businessHours:Z,hideNonBusinessHours:J,resourceBusinessHours:X}))},[P,$,Z,J,X])}}import{jsx as F2,jsxs as d1}from"react/jsx-runtime";var r1=()=>{let{t:P}=B(),{isHourly:$,weekDays:Z}=t0(),{weekHours:J}=u1();return d1(IP,{classes:{header:N($?"h-24":"h-12","min-w-full"),body:"min-w-full",cell:"min-w-20 flex-1"},days:$?J:Z,gridType:$?"hour":"day",children:[F2("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:F2("div",{className:"text-sm truncate px-1 min-w-0",children:P("resources")})}),d1("div",{className:"flex-1 flex flex-col",children:[F2(o1,{days:Z}),$&&F2(A2,{delayStep:0.005,hours:J.flat(),view:"week"})]})]})};import{useMemo as P4}from"react";import{jsx as V2,jsxs as n1}from"react/jsx-runtime";var a1=({columns:P})=>{let{currentDate:$}=B();return n1("div",{className:"flex h-12",children:[V2("div",{className:"shrink-0 w-16 border-r border-b z-20 bg-background sticky left-0",children:V2("span",{className:"px-2 h-full w-full flex justify-center items-start font-medium",children:$.week()})}),P.map((Z,J)=>{let X=Z.day;if(!X)return null;let Q=O.header.week.hour(X,Z.resourceId??"");return n1(E,{className:N("min-w-20 flex-1 border-r last:border-r-0 border-b flex flex-col items-center justify-center text-xs shrink-0 bg-background"),"data-testid":O.header.resource.timeLabel("week",X.format("HH")),delay:J*0.05,transitionKey:O.listKey(Q,"motion"),children:[V2("div",{className:"text-sm",children:X.format("ddd")}),V2("div",{className:"text-xs text-muted-foreground",children:X.format("M/D")})]},O.listKey(Q,"animated"))})]})};import{jsx as CP,jsxs as t1}from"react/jsx-runtime";var s1=({resources:P})=>{let{weekViewGranularity:$,t:Z,currentDate:J}=B(),X=$==="hourly";return t1("div",{className:"flex h-12",children:[CP("div",{className:"shrink-0 w-16 border-r z-20 bg-background sticky left-0",children:t1("span",{className:N("px-2 h-full w-full flex flex-col justify-center text-xs text-muted-foreground text-center min-w-0",X?"justify-end":"justify-center border-b"),children:[CP("span",{className:"truncate w-full",children:Z("week")}),!X&&CP("span",{className:"font-medium text-foreground truncate w-full",children:J.week()})]})}),P.map((Q)=>{return CP(r0,{className:"min-w-20 flex-1 border-b",resource:Q,children:CP("div",{className:N("sticky text-sm font-medium truncate",X?"left-1/4":"left-1"),children:Q.title})},O.listKey("resource-cell",Q.id))})]})};import{useCallback as Q3,useMemo as O2}from"react";function e1(){let{isHourly:P,resources:$,weekDays:Z,visibleDays:J,currentDate:X,businessHours:Q,hideNonBusinessHours:Y,resourceBusinessHours:U}=t0(),z=Q3((V)=>{return G0({referenceDate:V,businessHours:Q,hideNonBusinessHours:Y,allDates:Z,resourceBusinessHours:U})},[Q,Y,Z,U]),q=O2(()=>z(X),[X,z]),L=O2(()=>$.flatMap((V)=>J.map((f)=>({id:O.col.day(f,V.id),className:"min-w-20 flex-1",resourceId:V.id,resource:V,day:f,days:z(f),gridType:"hour"}))),[$,J,z]),G=O2(()=>$.map((V)=>({id:O.col.resource("week",V.id),className:"min-w-20 flex-1",day:void 0,resourceId:V.id,resource:V,days:Z,gridType:"day"})),[$,Z]),W=O2(()=>{if(P)return L;return G},[P,L,G]);return{hours:q,columns:W}}import{jsx as j0,jsxs as $5,Fragment as Y3}from"react/jsx-runtime";var $4=()=>{let{isHourly:P,resources:$,weekDays:Z,visibleDays:J}=t0(),{hours:X,columns:Q}=e1(),{slotDuration:Y}=B(),U=P4(()=>({id:P?O.col.time:O.col.date,days:P?X:Z,day:void 0,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:P?"hour":"day",noEvents:!0,renderCell:(q)=>j0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:P?j0(H0,{date:q}):$5(Y3,{children:[j0("span",{children:q.format("ddd")}),j0("span",{children:q.format("M/D")})]})})}),[X,P,Z]),z=P4(()=>{if(!P)return;return $5("div",{className:"flex w-full",children:[j0(OP,{}),$.map((q)=>j0(n0,{classes:{cell:"min-w-20 flex-1 border-r!"},days:J,resource:q,showSpacer:!1},O.allDayRow(q.id)))]})},[P,$,J]);return j0(w0,{allDayRow:z,classes:{header:P?"h-24":"h-12"},columns:[U,...Q],"data-testid":"resource-week",gridType:P?"hour":"day",slotDurationMinutes:Y,children:$5("div",{className:"flex-1 flex flex-col",children:[j0(s1,{resources:$,visibleDays:J}),P&&j0(a1,{columns:Q})]})})};import{jsx as Z4}from"react/jsx-runtime";var J4=()=>{let{orientation:P}=B();if(P==="vertical")return Z4($4,{});return Z4(r1,{})};import{jsx as s0,jsxs as q3}from"react/jsx-runtime";var X4=()=>{let{view:P}=B();return q3("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-resource-calendar",children:[s0(bP,{className:"p-1"}),s0(uP,{children:s0(E,{className:"w-full h-[calc(100%-3.5rem)] @container/calendar-body",direction:"horizontal",transitionKey:P,children:s0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:s0(i1,{},"month"),week:s0(J4,{},"week"),day:s0(j1,{},"day")}[P]})})}),s0(Z2,{})]})};import{jsx as Q4}from"react/jsx-runtime";var U3=({events:P=[],resources:$=[],firstDayOfWeek:Z="sunday",initialView:J="month",initialDate:X,disableDragAndDrop:Q=!1,dayMaxEvents:Y=YP,timeFormat:U="12-hour",eventSpacing:z=x0,eventHeight:q=I0,hiddenDays:L,...G})=>{return Q4(V5,{dayMaxEvents:Y,disableDragAndDrop:Q,eventHeight:q,eventSpacing:z,events:DP(P),firstDayOfWeek:v0[Z],hiddenDays:EP(L),initialDate:qP(X),initialView:J,resources:$,timeFormat:U,...G,children:Q4(X4,{})})};export{h4 as useIlamyCalendarContext,KP as isRecurringEvent,p2 as generateRecurringEvents,I2 as defaultTranslations,EU as RRule,U3 as IlamyResourceCalendar,s9 as IlamyCalendar};
1
+ import{RRule as gU}from"rrule";import{AnimatePresence as N4,motion as V4}from"motion/react";import{clsx as L4}from"clsx";import{twMerge as A4}from"tailwind-merge";import Y0 from"dayjs";import Z4 from"dayjs/plugin/isBetween.js";import X4 from"dayjs/plugin/isSameOrAfter.js";import J4 from"dayjs/plugin/isSameOrBefore.js";import Q4 from"dayjs/plugin/localeData.js";import Y4 from"dayjs/plugin/localizedFormat.js";import q4 from"dayjs/plugin/minMax.js";import U4 from"dayjs/plugin/timezone.js";import z4 from"dayjs/plugin/utc.js";import _4 from"dayjs/plugin/weekday.js";import K4 from"dayjs/plugin/weekOfYear.js";var P5,G4=(P,$,Z)=>{let X=$.prototype,J=Z.tz.setDefault;Z.tz.setDefault=(_)=>{return P5=_,J(_)};let{startOf:Y,endOf:Q}=X;function q(_,z){let G=_.$x?.$timezone||P5;if(!G)return z;let K=Z.tz(z.format("YYYY-MM-DDTHH:mm:ss"),G).utcOffset();if(z.utcOffset()!==K)return z.tz(G,!0);return z}X.startOf=function(_,z){let G=Y.call(this,_,z);return q(this,G)},X.endOf=Q};Y0.extend(_4);Y0.extend(K4);Y0.extend(X4);Y0.extend(J4);Y0.extend(Z4);Y0.extend(q4);Y0.extend(U4);Y0.extend(z4);Y0.extend(Q4);Y0.extend(Y4);Y0.extend(G4);var $5=(...P)=>{return Y0.tz(...P)};Object.assign($5,Y0);var T=$5;var h0=1,Z5=24,F0=24,ZP=4,X5="bg-secondary text-muted-foreground pointer-events-none",E0={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6};function A(...P){return A4(L4(P))}var kP=(P)=>{if(!P||P.length===0)return;return new Set(P.map(($)=>E0[$]))};function XP(P){if(P===void 0)return;if(T.isDayjs(P))return P;let $=T(P);return $.isValid()?$:void 0}var J5=(P,$)=>{let Z={...P};for(let X of $)delete Z[X];return Z};function mP(P){if(!P||!P.length)return[];return P.map(($)=>{return{...$,start:T.isDayjs($.start)?$.start:T($.start),end:T.isDayjs($.end)?$.end:T($.end)}})}import{jsx as Q5}from"react/jsx-runtime";var W4={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:$,delay:Z=0,className:X,direction:J="vertical",layout:Y,layoutId:Q,"data-testid":q,ref:_,...z})=>Q5(N4,{mode:"wait",children:Q5(V4.div,{animate:"visible",className:A("inline-block w-full",X),custom:{delay:Z,direction:J},"data-testid":q,exit:"exit",initial:"hidden",layout:Y,layoutId:Q,ref:_,variants:W4,...z,children:P},$)});D.displayName="AnimatedSection";import{DndContext as j4,MouseSensor as x4,pointerWithin as v4,TouchSensor as y4,useSensor as B5,useSensors as c4}from"@dnd-kit/core";import{useRef as O5,useState as i4}from"react";import{Slot as F4}from"@radix-ui/react-slot";import{cva as M4}from"class-variance-authority";import{jsx as O4}from"react/jsx-runtime";var B4=M4("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:$,size:Z,asChild:X=!1,...J}){return O4(X?F4:"button",{className:A(B4({variant:$,size:Z,className:P})),"data-slot":"button",...J})}import*as $0 from"@radix-ui/react-dialog";import{XIcon as f4}from"lucide-react";import{jsx as M0,jsxs as V2}from"react/jsx-runtime";function JP({...P}){return M0($0.Root,{"data-slot":"dialog",...P})}function I4({...P}){return M0($0.Portal,{"data-slot":"dialog-portal",...P})}function R4({className:P,...$}){return M0($0.Overlay,{className:A("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",P),"data-slot":"dialog-overlay",...$})}function QP({className:P,children:$,...Z}){return V2(I4,{"data-slot":"dialog-portal",children:[M0(R4,{}),V2($0.Content,{className:A("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg max-h-[90%]",P),"data-slot":"dialog-content",...Z,children:[$,V2($0.Close,{className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[M0(f4,{}),M0("span",{className:"sr-only",children:"Close"})]})]})]})}function YP({className:P,...$}){return M0("div",{className:A("flex flex-col gap-2 text-center sm:text-left",P),"data-slot":"dialog-header",...$})}function gP({className:P,...$}){return M0("div",{className:A("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",P),"data-slot":"dialog-footer",...$})}function qP({className:P,...$}){return M0($0.Title,{className:A("text-lg leading-none font-semibold",P),"data-slot":"dialog-title",...$})}function CP({className:P,...$}){return M0($0.Description,{className:A("text-muted-foreground text-sm",P),"data-slot":"dialog-description",...$})}import{useContext as V5}from"react";import{createContext as S4}from"react";var hP=S4(void 0);import{createContext as p4}from"react";var EP=p4(void 0);import{useCallback as a0,useMemo as w4}from"react";import{useCallback as t,useEffect as M2,useMemo as L5,useRef as B2,useState as n0}from"react";import{RRule as T4}from"rrule";var DP=(P)=>{return new Date(Date.UTC(P.year(),P.month(),P.date(),P.hour(),P.minute(),P.second(),P.millisecond()))},H4=(P,$)=>{return $.year(P.getUTCFullYear()).month(P.getUTCMonth()).date(P.getUTCDate()).hour(P.getUTCHours()).minute(P.getUTCMinutes()).second(P.getUTCSeconds()).millisecond(P.getUTCMilliseconds())},UP=(P)=>{return Boolean(P.rrule||P.recurrenceId||P.uid)},D0=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},q5=(P,$)=>{let Z=D0($),X=P.findIndex((J)=>D0(J)===Z&&J.rrule&&!J.recurrenceId);if(X===-1)throw Error("Base recurring event not found");return X},U5=(P)=>P.start.subtract(1,"day").endOf("day").toDate(),Y5=(P,$)=>{let Z=$.diff($.startOf("day"),"millisecond");return P.startOf("day").add(Z,"millisecond")},b4=(P,$)=>{let Z=P.start;if($.start)Z=Y5(P.start,$.start);let X=P.end;if($.start&&$.end)X=Z.add($.end.diff($.start),"millisecond");else if($.start)X=Z.add(P.end.diff(P.start),"millisecond");else if($.end)X=Y5(P.end,$.end);let J=$.rrule??P.rrule,Y;if(J)Y={...J,dtstart:Z.toDate()};return{start:Z,end:X,rrule:Y}},W2=({event:P,currentEvents:$,startDate:Z,endDate:X})=>{if(!P.rrule)return[];try{let J=DP(P.start),Y=P.rrule.until?DP(T(P.rrule.until)):void 0,Q={...P.rrule,dtstart:J,until:Y},q=new T4(Q),_=D0(P),z=$.filter((f)=>f.recurrenceId&&D0(f)===_),G=P.end.diff(P.start),K=DP(Z.subtract(G,"millisecond")),V=DP(X);return q.between(K,V,!0).map((f,F)=>{let U=H4(f,P.start),L=z.find((k)=>XP(k.recurrenceId)?.isSame(U));if(L)return{...P,...L};let W=P.end.diff(P.start),I=U.add(W,"millisecond"),R=`${P.id}_${F}`,S=D0(P);return{...P,id:R,start:U,end:I,uid:S,rrule:void 0}}).filter((f)=>{if(P.exdates&&P.exdates.length>0){let L=f.start.toISOString();if(P.exdates?.includes(L))return!1}return f.start.isSameOrBefore(X)&&f.end.isSameOrAfter(Z)})}catch(J){throw Error(`Invalid RRULE options: ${JSON.stringify(P.rrule)}. Error: ${J instanceof Error?J.message:"Unknown error"}`)}},z5=({targetEvent:P,updates:$,currentEvents:Z,scope:X})=>{let J=[...Z],Y=q5(J,P),Q=J[Y];switch(X){case"this":{let q=P.start.toISOString(),z=[...Q.exdates||[],q],G={...Q,exdates:z};J[Y]=G;let K=`${P.id}_modified_${Date.now()}`,V={...J5(P,["width","height","top","left","right"]),...$,id:K,recurrenceId:q,uid:D0(Q),rrule:void 0};J.push(V);break}case"following":{let q=U5(P),_={...Q,rrule:{...Q.rrule,until:q}};J[Y]=_;let z=Q.end.diff(Q.start),G=$.start||P.start,K=$.end||G.add(z),V=`${Q.id}_following`,M=`${V}@ilamy.calendar`,N={...Q,...$,rrule:{...Q.rrule,...$.rrule,dtstart:G.toDate()},id:V,uid:M,start:G,end:K,recurrenceId:void 0};J.push(N);break}case"all":{let q=b4(Q,$);J[Y]={...Q,...$,start:q.start,end:q.end,rrule:q.rrule};break}default:throw Error(`Invalid scope: ${X}. Must be 'this', 'following', or 'all'`)}return J},_5=({targetEvent:P,currentEvents:$,scope:Z})=>{let X=[...$],J=q5(X,P),Y=X[J];switch(Z){case"this":{let Q=P.start.toISOString(),_=[...Y.exdates||[],Q],z={...Y,exdates:_};X[J]=z;break}case"following":{let Q={...Y,rrule:{...Y.rrule,until:U5(P)}};X[J]=Q;break}case"all":{let Q=D0(P);return X.filter((_)=>D0(_)!==Q)}default:throw Error(`Invalid scope: ${Z}. Must be 'this', 'following', or 'all'`)}return X};var F2={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",searchTime:"Search 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"};function u(P){return P.isSame(T(),"day")}function n(P){return P.format("YYYY-MM-DD")}function r(P,$){let Z=P.startOf("week").day($),X=P.isBefore(Z)?Z.subtract(1,"week"):Z;return Array.from({length:7},(J,Y)=>X.add(Y,"day"))}function zP(P,$){let Z=r(P.startOf("month"),$);return Array.from({length:6},(X,J)=>{let Y=Z[0].add(J,"week");return r(Y,$)})}function K5(P){let $=P.daysInMonth(),Z=P.startOf("month");return Array.from({length:$},(X,J)=>Z.add(J,"day"))}function G5({referenceDate:P=T(),length:$=24}={}){let Z=P.startOf("day");return Array.from({length:$},(X,J)=>Z.hour(J).minute(0).second(0).millisecond(0))}function _P(P,$){let Z=new Set($.map((X)=>String(X.id)));return P.filter((X)=>Z.has(String(X.id)))}function jP(P,$,Z){let X=P.start.isSameOrAfter($)&&P.start.isSameOrBefore(Z),J=P.end.isSameOrAfter($)&&P.end.isSameOrBefore(Z),Y=P.start.isBefore($)&&P.end.isAfter(Z);return X||J||Y}var A5={day:"day",week:"week",month:"month",year:"year"},O2=(P,$,Z)=>{if($==="day"||$==="year")return{start:P.startOf($),end:P.endOf($)};if($==="week"){let J=r(P,Z);return{start:J[0].startOf("day"),end:J[6].endOf("day")}}let X=zP(P,Z);return{start:X[0][0].startOf("day"),end:X[5][6].endOf("day")}},xP=(P)=>{let{events:$=[],firstDayOfWeek:Z=0,initialView:X="month",initialDate:J=T(),businessHours:Y,onEventAdd:Q,onEventUpdate:q,onEventDelete:_,onDateChange:z,onViewChange:G,locale:K,timezone:V,translations:M,translator:N}=P,[f,F]=n0(T.isDayjs(J)?J:T(J)),[U,L]=n0(X),[W,I]=n0($),[R,S]=n0(!1),[w,k]=n0(null),[h,j]=n0(null),[c,e]=n0(K||"en"),E=B2($),m=B2(V),i=B2(void 0),_0=L5(()=>{if(N)return N;let p=M||F2;return(b)=>p[b]||b},[M,N]),G0=t((p,b)=>{let l=[];for(let b0 of W)if(b0.rrule)l.push(...W2({event:b0,currentEvents:W,startDate:p,endDate:b}));else if(jP(b0,p,b))l.push(b0);return l},[W]),W0=t(()=>{return O2(f,U,Z)},[f,U,Z]),S0=L5(()=>{let{start:p,end:b}=W0();return G0(p,b)},[G0,W0]);M2(()=>{if($!==E.current)I($),E.current=$},[$]),M2(()=>{if(K&&K!==i.current)e(K),T.locale(K),F((p)=>p.locale(K)),i.current=K},[K]),M2(()=>{if(V&&V!==m.current)T.tz.setDefault(V),F((p)=>p.tz(V)),I((p)=>p.map((b)=>({...b,start:b.start.tz(V),end:b.end.tz(V)}))),m.current=V},[V]);let J0=t((p)=>{F(p);let b=O2(p,U,Z);z?.(p,b)},[z,U,Z]),L0=J0,d=t((p)=>{let b=p===1?f.add(1,A5[U]):f.subtract(1,A5[U]);J0(b)},[f,U,J0]),p0=t(()=>d(1),[d]),T0=t(()=>d(-1),[d]),H0=t(()=>J0(T()),[J0]),y=t((p)=>{I((b)=>[...b,p]),Q?.(p)},[Q]),X0=t((p,b)=>{let l=W.find((N2)=>N2.id===p);if(!l)return;let b0={...l,...b};I((N2)=>N2.map((e2)=>e2.id===p?b0:e2)),q?.(b0)},[W,q]),e0=t((p,b,l)=>{q?.({...p,...b}),I(z5({targetEvent:p,updates:b,currentEvents:W,scope:l.scope}))},[W,q]),PP=t((p,b)=>{_?.(p),I(_5({targetEvent:p,currentEvents:W,scope:b.scope}))},[W,_]),H=t((p)=>{let b=W.find((l)=>l.id===p);if(!b)return;I((l)=>l.filter((b0)=>b0.id!==p)),_?.(b)},[W,_]),P0=t((p)=>{if(p?.start)j(p.start);let b=p?.start??f;k({title:_0("newEvent"),start:b,end:p?.end??b.add(1,"hour"),resourceId:p?.resourceId,description:"",allDay:p?.allDay??!1}),S(!0)},[f,_0]),Q0=t(()=>{j(null),k(null),S(!1)},[]),A0=t((p)=>{L(p),G?.(p);let b=O2(f,p,Z);z?.(f,b)},[G,z,f,Z]),$P=t((p)=>{let b=p.uid;return W.find((l)=>(l.uid||`${l.id}@ilamy.calendar`)===b&&l.rrule)||null},[W]);return{currentDate:f,view:U,events:S0,rawEvents:W,isEventFormOpen:R,selectedEvent:w,selectedDate:h,firstDayOfWeek:Z,dayMaxEvents:ZP,currentLocale:c,businessHours:Y,setCurrentDate:F,selectDate:L0,setView:A0,nextPeriod:p0,prevPeriod:T0,today:H0,addEvent:y,updateEvent:X0,updateRecurringEvent:e0,deleteEvent:H,deleteRecurringEvent:PP,openEventForm:P0,closeEventForm:Q0,setSelectedEvent:k,setIsEventFormOpen:S,setSelectedDate:j,getEventsForDateRange:G0,findParentRecurringEvent:$P,t:_0}};import{jsx as k4}from"react/jsx-runtime";var f2=(P)=>{if(P.resourceIds)return P.resourceIds;if(P.resourceId!==void 0)return[P.resourceId];return[]},N5=({children:P,events:$=[],resources:Z=[],firstDayOfWeek:X=0,initialView:J="month",initialDate:Y,renderEvent:Q,onEventClick:q,onCellClick:_,onViewChange:z,onEventAdd:G,onEventUpdate:K,onEventDelete:V,onDateChange:M,locale:N,timezone:f,disableCellClick:F,disableEventClick:U,disableDragAndDrop:L,dayMaxEvents:W,eventSpacing:I=1,eventHeight:R=F0,stickyViewHeader:S=!0,viewHeaderClassName:w="",headerComponent:k,headerClassName:h,translations:j,translator:c,renderResource:e,renderEventForm:E,businessHours:m,timeFormat:i="12-hour",classesOverride:_0,orientation:G0="horizontal",renderCurrentTimeIndicator:W0,renderHour:S0,hideNonBusinessHours:J0=!1,hideExportButton:L0=!1,hiddenDays:d,weekViewGranularity:p0="hourly",slotDuration:T0=60,scrollTime:H0})=>{let y=xP({events:$,firstDayOfWeek:X,initialView:J,initialDate:Y,businessHours:m,onEventAdd:G,onEventUpdate:K,onEventDelete:V,onDateChange:M,onViewChange:z,locale:N,timezone:f,translations:j,translator:c}),X0=a0((p)=>y.events.filter((b)=>f2(b).includes(p)),[y.events]),e0=a0((p)=>y.events.filter((b)=>f2(b).some((l)=>p.includes(l))),[y.events]),PP=a0((p)=>{return Z.find((b)=>b.id===p)},[Z]),H=a0((p)=>{return Boolean(p.resourceIds&&p.resourceIds.length>1)},[]),P0=a0((p)=>{y.setSelectedEvent(p),y.setIsEventFormOpen(!0)},[y]),Q0=a0((p)=>{if(U)return;if(q)q(p);else P0(p)},[U,q,P0]),A0=a0((p)=>{if(F)return;if(_)_(p);else{let b={title:y.t("newEvent"),start:p.start,end:p.end,description:"",allDay:!1};if(p.resourceId!==void 0)b.resourceId=p.resourceId;y.setSelectedEvent(b),y.setSelectedDate(p.start),y.setIsEventFormOpen(!0)}},[_,F,y]),$P=w4(()=>({...y,resources:Z,getEventsForResource:X0,getEventsForResources:e0,getResourceById:PP,isEventCrossResource:H,getEventResourceIds:f2,onEventClick:Q0,onCellClick:A0,renderEvent:Q,renderResource:e,renderEventForm:E,headerComponent:k,headerClassName:h,locale:N,timezone:f,disableCellClick:F,disableEventClick:U,disableDragAndDrop:L,dayMaxEvents:W,eventSpacing:I,eventHeight:R,stickyViewHeader:S,viewHeaderClassName:w,businessHours:m,timeFormat:i,classesOverride:_0,orientation:G0,renderCurrentTimeIndicator:W0,renderHour:S0,hideNonBusinessHours:J0,hideExportButton:L0,hiddenDays:d,weekViewGranularity:p0,slotDuration:T0,scrollTime:H0}),[y,Z,X0,e0,PP,H,Q0,A0,Q,e,E,N,f,F,U,L,W,I,R,S,w,k,h,m,i,_0,G0,W0,S0,J0,L0,d,p0,T0,H0]);return k4(EP.Provider,{value:$P,children:P})};function O(P){let $=V5(EP),Z=V5(hP),X=$||Z;if(!X)throw Error("useSmartCalendarContext must be used within a CalendarProvider or ResourceCalendarProvider");return P?P(X):X}function m4(){let P=O();return{currentDate:P.currentDate,view:P.view,events:P.events,isEventFormOpen:P.isEventFormOpen,selectedEvent:P.selectedEvent,selectedDate:P.selectedDate,firstDayOfWeek:P.firstDayOfWeek,resources:P.resources||[],setCurrentDate:P.setCurrentDate,selectDate:P.selectDate,setView:P.setView,nextPeriod:P.nextPeriod,prevPeriod:P.prevPeriod,today:P.today,addEvent:P.addEvent,updateEvent:P.updateEvent,deleteEvent:P.deleteEvent,openEventForm:P.openEventForm,closeEventForm:P.closeEventForm,getEventsForResource:P.getEventsForResource,businessHours:P.businessHours}}import{jsx as j0,jsxs as vP}from"react/jsx-runtime";var g4=[{scope:"this",title:"thisEvent",editKey:"onlyChangeThis",deleteKey:"onlyDeleteThis"},{scope:"following",title:"thisAndFollowingEvents",editKey:"changeThisAndFuture",deleteKey:"deleteThisAndFuture"},{scope:"all",title:"allEvents",editKey:"changeEntireSeries",deleteKey:"deleteEntireSeries"}];function fP({isOpen:P,onClose:$,onConfirm:Z,operationType:X,eventTitle:J}){let{t:Y}=O((_)=>({t:_.t})),Q=(_)=>{Z(_),$()},q=X==="edit";return j0(JP,{onOpenChange:$,open:P,children:vP(QP,{className:"max-w-md",children:[vP(YP,{children:[j0(qP,{children:q?Y("editRecurringEvent"):Y("deleteRecurringEvent")}),vP(CP,{children:['"',J,'"'," ",q?Y("editRecurringEventQuestion"):Y("deleteRecurringEventQuestion")]})]}),j0("div",{className:"space-y-3",children:g4.map(({scope:_,title:z,editKey:G,deleteKey:K})=>j0(g,{className:"w-full justify-start h-auto p-4",onClick:()=>Q(_),variant:"outline",children:vP("div",{className:"text-left",children:[j0("div",{className:"font-medium",children:Y(z)}),j0("div",{className:"text-sm text-muted-foreground",children:Y(q?G:K)})]})},_))}),j0(gP,{children:j0(g,{onClick:$,variant:"outline",children:Y("cancel")})})]})})}var W5=(P,$)=>{let{active:Z,over:X}=P;if(!Z||!X||!$)return null;let J=X.data.current||{},Y=J.type==="time-cell",{resourceId:Q,allDay:q}=J,_;if(Y){let{date:V,hour:M=0,minute:N=0}=J;_=T(V).hour(M).minute(N)}else{let{date:V}=J;_=T(V)}let z=$.end.diff($.start,"second"),G=_.add(z,"second");if(G.isSame(G.startOf("day")))G=G.subtract(1,"day").endOf("day");let K={start:_,end:G,resourceId:Q,allDay:Y?!1:q??$.allDay};return{activeEvent:$,updates:K}};import{DragOverlay as C4}from"@dnd-kit/core";import{snapCenterToCursor as h4}from"@dnd-kit/modifiers";import{useImperativeHandle as E4,useState as D4}from"react";import{jsx as F5}from"react/jsx-runtime";var M5=({ref:P})=>{let[$,Z]=D4(null);return E4(P,()=>({setActiveEvent:Z})),F5(C4,{modifiers:[h4],children:$&&F5("div",{className:A("cursor-grab truncate rounded bg-amber-200 p-2 text-[10px] shadow-lg sm:text-xs w-20",$.backgroundColor||"bg-blue-500",$.color||"text-white"),children:$?.title})})};import{jsx as f5,jsxs as I5,Fragment as l4}from"react/jsx-runtime";var I2={isOpen:!1,event:null,updates:null};function yP({children:P}){let $=O5(null),Z=O5(null),{updateEvent:X,updateRecurringEvent:J,disableDragAndDrop:Y}=O((U)=>({updateEvent:U.updateEvent,updateRecurringEvent:U.updateRecurringEvent,disableDragAndDrop:U.disableDragAndDrop})),[Q,q]=i4({isOpen:!1,event:null,updates:null}),_=B5(x4,{activationConstraint:{distance:2}}),z=B5(y4,{activationConstraint:{delay:100,tolerance:5}}),G=c4(_,z),K=(U,L)=>{if(!U?.id||!L||Object.keys(L).length===0)return;if(UP(U))q({isOpen:!0,event:U,updates:L});else X(U.id,L)},V=(U)=>{if(!Q.event||!Q.updates){q(I2);return}try{J(Q.event,Q.updates,{scope:U,eventDate:Q.event.start})}catch{}finally{q(I2)}},M=()=>{q(I2)},N=(U)=>{let{active:L}=U;if(L.data.current?.type==="calendar-event")Z.current?.setActiveEvent(L.data.current.event),$.current=L.data.current.event},f=(U)=>{let L=W5(U,$.current);if(L){let{activeEvent:W,updates:I}=L;K(W,I)}$.current=null,Z.current?.setActiveEvent(null)},F=(U)=>{$.current=null};if(Y)return P;return I5(l4,{children:[I5(j4,{collisionDetection:v4,onDragCancel:F,onDragEnd:f,onDragStart:N,sensors:G,children:[P,f5(M5,{ref:Z})]}),f5(fP,{eventTitle:Q.event?.title||"",isOpen:Q.isOpen,onClose:M,onConfirm:V,operationType:"edit"})]})}import{useEffect as M$,useState as i0}from"react";import*as cP from"@radix-ui/react-checkbox";import{CheckIcon as u4}from"lucide-react";import{jsx as R2}from"react/jsx-runtime";function KP({className:P,...$}){return R2(cP.Root,{className:A("peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",P),"data-slot":"checkbox",...$,children:R2(cP.Indicator,{className:"flex items-center justify-center text-current transition-none","data-slot":"checkbox-indicator",children:R2(u4,{className:"size-3.5"})})})}import{PopoverClose as n4}from"@radix-ui/react-popover";import{Calendar as a4}from"lucide-react";import{useEffect as t4,useRef as s4,useState as e4}from"react";import{ChevronLeftIcon as o4,ChevronRightIcon as d4}from"lucide-react";import{useState as r4}from"react";import{jsx as K0,jsxs as S2}from"react/jsx-runtime";function R5({selected:P,defaultMonth:$,onSelect:Z,disabled:X,firstDayOfWeek:J=0,className:Y}){let[Q,q]=r4(()=>T($??P??new Date).startOf("month")),_=zP(Q,J),z=P?T(P).format("YYYY-MM-DD"):void 0,G=r(T(),J).map((K)=>K.format("dd"));return S2("div",{className:A("bg-background p-3 w-[280px]",Y),"data-slot":"calendar",children:[S2("div",{className:"flex items-center justify-between mb-2",children:[K0(g,{"aria-label":"Previous month",onClick:()=>q((K)=>K.subtract(1,"month")),size:"icon",variant:"ghost",children:K0(o4,{className:"size-4"})}),K0("div",{className:"text-sm font-medium select-none",children:Q.format("MMMM YYYY")}),K0(g,{"aria-label":"Next month",onClick:()=>q((K)=>K.add(1,"month")),size:"icon",variant:"ghost",children:K0(d4,{className:"size-4"})})]}),S2("table",{className:"w-full border-collapse",role:"grid",children:[K0("thead",{children:K0("tr",{children:G.map((K,V)=>K0("th",{className:"text-muted-foreground text-xs font-medium select-none py-1",children:K},V))})}),K0("tbody",{children:_.map((K,V)=>K0("tr",{children:K.map((M)=>{let N=!M.isSame(Q,"month"),f=M.format("YYYY-MM-DD")===z,F=X?.(M.toDate())??!1;return K0("td",{className:"p-0 text-center","data-disabled":F,"data-outside":N,"data-selected":f,role:"gridcell",tabIndex:-1,children:K0("button",{"aria-disabled":F,"aria-hidden":N,className:A("w-full aspect-square rounded-md text-sm select-none",!F&&"hover:bg-accent cursor-pointer",N&&"text-muted-foreground/50",u(M)&&!f&&"bg-accent text-accent-foreground",f&&"bg-primary text-primary-foreground font-medium",F&&"opacity-50 cursor-not-allowed"),"data-disabled":F,"data-selected":f,disabled:F||N,onClick:()=>Z?.(M.toDate()),tabIndex:N?-1:0,type:"button",children:M.format("D")})},M.toISOString())})},V))})]})]})}import*as w0 from"@radix-ui/react-popover";import{jsx as iP}from"react/jsx-runtime";function x0({...P}){return iP(w0.Root,{"data-slot":"popover",...P})}function v0({...P}){return iP(w0.Trigger,{"data-slot":"popover-trigger",...P})}function y0({className:P,align:$="center",sideOffset:Z=4,...X}){return iP(w0.Portal,{children:iP(w0.Content,{align:$,className:A("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,...X})})}import{jsx as GP,jsxs as p2}from"react/jsx-runtime";function lP({date:P,closeOnSelect:$,onChange:Z,label:X="Pick a date",className:J,disabled:Y}){let Q=O((K)=>K.firstDayOfWeek),q=s4(null),[_,z]=e4(P);t4(()=>{z(P)},[P]);let G=(K)=>{if(z(K),$)q.current?.click();Z?.(K)};return GP("div",{className:J,children:p2(x0,{children:[GP(v0,{asChild:!0,children:p2(g,{className:A("data-[empty=true]:text-muted-foreground w-full justify-start text-left font-normal"),"data-empty":!P,variant:"outline",children:[GP(a4,{}),_?T(_).format("ll"):GP("span",{children:X})]})}),p2(y0,{align:"start",className:"w-auto p-0",children:[GP(n4,{ref:q,style:{display:"none"}}),GP(R5,{defaultMonth:_,disabled:Y,firstDayOfWeek:Q,onSelect:G,selected:_})]})]})})}import{jsx as P$}from"react/jsx-runtime";function t0({className:P,type:$,...Z}){return P$("input",{className:A("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",P),"data-slot":"input",type:$,...Z})}import*as S5 from"@radix-ui/react-label";import{jsx as $$}from"react/jsx-runtime";function q0({className:P,...$}){return $$(S5.Root,{className:A("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",P),"data-slot":"label",...$})}import*as B0 from"@radix-ui/react-scroll-area";import{jsx as IP,jsxs as Z$}from"react/jsx-runtime";function O0({className:P,children:$,viewPortProps:Z,...X}){return Z$(B0.Root,{className:A("relative",P),"data-slot":"scroll-area",...X,children:[IP(B0.Viewport,{...Z,className:A("focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",Z?.className),"data-slot":"scroll-area-viewport",children:$}),IP(k0,{}),IP(B0.Corner,{})]})}function k0({className:P,orientation:$="vertical",...Z}){return IP(B0.ScrollAreaScrollbar,{className:A("flex touch-none p-px transition-colors select-none",$==="vertical"&&"h-full w-2.5 border-l border-l-transparent",$==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent",P),"data-slot":"scroll-area-scrollbar",orientation:$,...Z,children:IP(B0.ScrollAreaThumb,{className:"bg-border relative flex-1 rounded-full","data-slot":"scroll-area-thumb"})})}import{Clock as Q$}from"lucide-react";import{useEffect as Y$,useRef as T5,useState as T2}from"react";import{useMemo as X$}from"react";function p5({timeFormat:P="12-hour",minTime:$="00:00",maxTime:Z="23:45"}){return{timeOptions:X$(()=>{let Y=[],[Q,q]=$.split(":").map(Number),[_,z]=Z.split(":").map(Number),G=Q*60+q,K=_*60+z;for(let V=G;V<=K;V+=15){let M=Math.floor(V/60),N=V%60,f=`${M.toString().padStart(2,"0")}:${N.toString().padStart(2,"0")}`;Y.push(f)}return Y},[$,Z]),formatTime:(Y)=>{let[Q,q]=Y.split(":").map(Number),_=Q>=12?"PM":"AM",z=Q===0?12:Q>12?Q-12:Q;if(P==="24-hour")return`${Q.toString().padStart(2,"0")}:${q.toString().padStart(2,"0")}`;return`${z}:${q.toString().padStart(2,"0")} ${_}`}}}var LP=(P)=>String(P).padStart(2,"0"),J$=(P)=>typeof P==="number"?LP(P):P,B={col:{time:"time-col",date:"date-col",day:(P,$)=>{let Z=`day-col-${n(P)}`;return $!=null?`${Z}-resource-${$}`:Z},resource:(P,$)=>`${P}-col-resource-${$}`,allDay:(P,$)=>`all-day-col-${n(P)}-${$}`},cell:{day:(P,$,Z=0)=>{let X=n(P);return $!=null?`day-cell-${X}-${LP($)}-${LP(Z)}`:`day-cell-${X}`},verticalTime:(P)=>`vertical-time-${LP(P)}`,vertical:(P,$,Z,X)=>{let J=`vertical-cell-${n(P)}-${LP($)}-${LP(Z)}`;return X!=null?`${J}-resource-${X}`:J}},container:{vertical:{col:(P)=>`vertical-col-${P}`},horizontal:{row:(P)=>`horizontal-row-${P}`,rowLabel:(P)=>`horizontal-row-label-${P}`,event:(P)=>`horizontal-event-${P}`},eventsLayer:(P,$)=>`${P}-events-${$}`},header:{resource:{weekDay:"resource-week-day-header",timeLabel:(P,$)=>`resource-${P}-time-label-${J$($)}`},weekday:(P,$)=>`${P}-header-weekday-${$.toLowerCase()}`,week:{day:(P)=>`week-header-day-${P.toISOString()}`,hour:(P,$)=>`week-header-hour-${P.toISOString()}-${$}`,resource:(P)=>`week-header-resource-${P}`},year:{month:(P,$)=>$?`year-month-${$}-${P}`:`year-month-${P}`,day:(P,$)=>`year-day-${P}-${$}`}},allDayRow:(P)=>`allday-row-${P??"main"}`,listKey:(...P)=>P.join("-"),dayNumber:(P)=>u(P)?"day-number-today":`day-number-${P.format("D")}`,timePicker:(P)=>`time-picker-${P??""}`,droppable:{dayCell:(P,$)=>{let Z=P.toISOString(),X=$?.allDay?"-allday":"",J=$?.resourceId!=null?`-resource-${$.resourceId}`:"";return`drop-day-cell-${Z}${X}${J}`}}};import{jsx as c0,jsxs as H2}from"react/jsx-runtime";var q$=(P)=>{P.stopPropagation()};function H5({value:P,onChange:$,minTime:Z="00:00",maxTime:X="23:45",timeFormat:J="12-hour",placeholder:Y="Select time...",className:Q,disabled:q=!1,name:_}){let[z,G]=T2(!1),[K,V]=T2(""),M=T5(null),N=T5(null),[f,F]=T2(0),{timeOptions:U,formatTime:L}=p5({timeFormat:J,minTime:Z,maxTime:X}),W=U.filter((S)=>{return L(S).toLowerCase().includes(K.toLowerCase())}),I=(S)=>{$(S),G(!1),V("")};Y$(()=>{if(z){if(N.current)F(N.current.offsetWidth);setTimeout(()=>{M.current?.focus()},0)}},[z]);let R=P?L(P):Y;return H2(x0,{onOpenChange:G,open:z,children:[c0(v0,{asChild:!0,children:H2(g,{"aria-controls":"time-picker-listbox","aria-expanded":z,className:A("w-full justify-start",Q),"data-testid":B.timePicker(_),disabled:q,ref:N,role:"combobox",variant:"outline",children:[c0(Q$,{className:"mr-2 h-4 w-4"}),R]})}),H2(y0,{align:"start",className:"p-0",style:{width:f},children:[c0("div",{className:"p-2 border-b",children:c0(t0,{className:"h-8",onChange:(S)=>V(S.target.value),placeholder:"Search time...",ref:M,value:K})}),c0(O0,{className:"h-[200px]",onWheel:q$,children:c0("div",{className:"p-1",children:W.length===0?c0("div",{className:"py-6 text-center text-sm text-muted-foreground",children:"N/A"}):W.map((S)=>{let w=L(S);return c0("button",{className:A("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",S===P&&"bg-accent text-accent-foreground"),onClick:()=>I(S),type:"button",children:w},S)})})})]})]})}var b2=(P,$)=>{if(!$)return!0;let Z=!1;return uP($,{date:P,onMatch:()=>{Z=!0}}),Z},b5=({date:P,hour:$,minute:Z=0,businessHours:X})=>{if(!X)return!0;if($===void 0)return b2(P,X);let J=!1,Y=$*60+Z;return uP(X,{date:P,onMatch:(Q)=>{let q=Q.startTime??9,_=Q.endTime??17,z=q*60,G=_*60;if(Y>=z&&Y<G)J=!0}}),J},uP=(P,$)=>{let{date:Z,onMatch:X}=$;if(!P)return;let J=Array.isArray(P)?P:[P];for(let Y of J)if(Z&&Y.daysOfWeek){let Q=Z.day();if(Y.daysOfWeek.some((q)=>E0[q]===Q))X(Y)}else X(Y)},oP=(P)=>{let{allDates:$,businessHours:Z,resourceBusinessHours:X=[],hideNonBusinessHours:J}=P,Y=24,Q=0,q=!1,_=(G)=>{q=!0,Y=Math.min(Y,G.startTime??9),Q=Math.max(Q,G.endTime??17)},z=(G)=>{uP(Z,{date:G,onMatch:_});for(let K of X)uP(K,{date:G,onMatch:_})};for(let G of $)z(G);if(!q&&J){if(z(),!q)Y=9,Q=17,q=!0}return{minStart:Y,maxEnd:Q,hasBusinessHours:q}};var w2=(P,$,Z)=>{let[X,J]=$.split(":").map(Number),Y=T(P).hour(X).minute(J);return Z?Y.hour(0).minute(0):Y},w5=(P,$,Z)=>{let[X,J]=$.split(":").map(Number),Y=T(P).hour(X).minute(J);return Z?Y.hour(23).minute(59):Y},k2=(P,$)=>{if(!$)return{min:"00:00",max:"23:59"};let Z=T(P),{minStart:X,maxEnd:J,hasBusinessHours:Y}=oP({allDates:[Z],businessHours:$,hideNonBusinessHours:!1});if(!Y)return{min:"00:00",max:"23:59"};return{min:`${X.toString().padStart(2,"0")}:00`,max:`${(J-1).toString().padStart(2,"0")}:45`}};import{useEffect as G$,useState as y5}from"react";import{RRule as Z0}from"rrule";import{jsx as dP}from"react/jsx-runtime";function k5({className:P,...$}){return dP("div",{className:A("text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm",P),"data-slot":"card",...$})}function m5({className:P,...$}){return dP("div",{className:A("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 p-4 pb-0 has-data-[slot=card-action]:grid-cols-[1fr_auto]",P),"data-slot":"card-header",...$})}function g5({className:P,...$}){return dP("div",{className:A("leading-none font-semibold",P),"data-slot":"card-title",...$})}function C5({className:P,...$}){return dP("div",{className:A("p-4 pt-0",P),"data-slot":"card-content",...$})}import*as C from"@radix-ui/react-select";import{CheckIcon as U$,ChevronDownIcon as h5,ChevronUpIcon as z$}from"lucide-react";import{jsx as s,jsxs as m2}from"react/jsx-runtime";function E5({...P}){return s(C.Root,{"data-slot":"select",...P})}function D5({...P}){return s(C.Value,{"data-slot":"select-value",...P})}function j5({className:P,size:$="default",children:Z,...X}){return m2(C.Trigger,{className:A("border-input data-placeholder:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",P),"data-size":$,"data-slot":"select-trigger",...X,children:[Z,s(C.Icon,{asChild:!0,children:s(h5,{className:"size-4 opacity-50"})})]})}function x5({className:P,children:$,position:Z="popper",align:X="center",...J}){return s(C.Portal,{children:m2(C.Content,{align:X,className:A("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-32 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",Z==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",P),"data-slot":"select-content",position:Z,...J,children:[s(_$,{}),s(C.Viewport,{className:A("p-1",Z==="popper"&&"h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width) scroll-my-1"),children:$}),s(K$,{})]})})}function v5({className:P,children:$,...Z}){return m2(C.Item,{className:A("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",P),"data-slot":"select-item",...Z,children:[s("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:s(C.ItemIndicator,{children:s(U$,{className:"size-4"})})}),s(C.ItemText,{children:$})]})}function _$({className:P,...$}){return s(C.ScrollUpButton,{className:A("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-up-button",...$,children:s(z$,{className:"size-4"})})}function K$({className:P,...$}){return s(C.ScrollDownButton,{className:A("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-down-button",...$,children:s(h5,{className:"size-4"})})}import{jsx as x,jsxs as U0,Fragment as V$}from"react/jsx-runtime";var C2={DAILY:Z0.DAILY,WEEKLY:Z0.WEEKLY,MONTHLY:Z0.MONTHLY,YEARLY:Z0.YEARLY},L$=Object.fromEntries(Object.entries(C2).map(([P,$])=>[$,P])),g2=[Z0.SU,Z0.MO,Z0.TU,Z0.WE,Z0.TH,Z0.FR,Z0.SA],A$=[{type:"never",id:"never",labelKey:"never"},{type:"count",id:"after",labelKey:"after"},{type:"until",id:"on",labelKey:"on"}],c5=(P)=>Math.max(1,Number.parseInt(P,10)||1),N$=(P,$)=>{if(!P)return $("customRecurrence");try{let Z=new Z0(P).toText();return Z&&!Z.toLowerCase().includes("error")?Z.charAt(0).toUpperCase()+Z.slice(1):$("customRecurrence")}catch{return $("customRecurrence")}},i5=({value:P,onChange:$})=>{let{t:Z,firstDayOfWeek:X}=O((U)=>({t:U.t,firstDayOfWeek:U.firstDayOfWeek})),[J,Y]=y5(!!P),[Q,q]=y5(()=>P||null),_=g2.map((U,L)=>({value:U,label:T().day(L).format("ddd")})),z=g2.map((U,L)=>_[(L+X)%7]);G$(()=>{if(Y(!!P),P)q(P)},[P]);let G=(U)=>{if(!Q)return;let L={...Q,...U};q(L),$(J?L:null)},K=(U)=>{if(Y(U),!U){$(null);return}if(Q){$(Q);return}let L={freq:Z0.DAILY,interval:1};q(L),$(L)},V=(U)=>{let L=Q?.byweekday||[],W=g2[U],I=L.includes(W)?L.filter((R)=>R!==W):[...L,W];G({byweekday:I.length?I:void 0})},M=(U)=>{let L={count:void 0,until:void 0};if(U==="count")L.count=Q?.count||1;if(U==="until")L.until=Q?.until||T().add(1,"month").endOf("day").toDate();G(L)},N=Q?.until?"until":Q?.count?"count":"never",f=L$[Q?.freq??Z0.DAILY]||"DAILY",F=Array.isArray(Q?.byweekday)?Q.byweekday:Q?.byweekday?[Q.byweekday]:[];return U0(k5,{"data-testid":"recurrence-editor",children:[U0(m5,{className:"pb-3",children:[U0("div",{className:"flex items-center space-x-2",children:[x(KP,{checked:J,"data-testid":"toggle-recurrence",id:"recurring",onCheckedChange:K}),x(g5,{className:"text-sm",children:Z("repeat")})]}),J&&P&&x("p",{className:"text-xs text-muted-foreground",children:N$(P,Z)})]}),J&&x(C5,{className:"pt-0",children:U0("div",{className:"space-y-4",children:[U0("div",{className:"grid grid-cols-2 gap-4",children:[U0("div",{children:[x(q0,{className:"text-xs",htmlFor:"frequency",children:Z("repeats")}),U0(E5,{onValueChange:(U)=>G({freq:C2[U]}),value:f,children:[x(j5,{className:"h-8","data-testid":"frequency-select",id:"frequency",children:x(D5,{})}),x(x5,{children:Object.keys(C2).map((U)=>x(v5,{value:U,children:Z(U.toLowerCase())},U))})]})]}),U0("div",{children:[x(q0,{className:"text-xs",htmlFor:"interval",children:Z("every")}),x(t0,{className:"h-8",id:"interval",min:"1",onChange:(U)=>G({interval:c5(U.target.value)}),type:"number",value:Q?.interval||1})]})]}),Q?.freq===Z0.WEEKLY&&U0("div",{children:[x(q0,{className:"text-xs",children:Z("repeatOn")}),x("div",{className:"flex flex-wrap gap-1 mt-1",children:z.map((U,L)=>U0("div",{className:"flex items-center space-x-1",children:[x(KP,{checked:F.includes(U.value),id:B.listKey("day",L),onCheckedChange:()=>V(L)}),x(q0,{className:"text-xs cursor-pointer",htmlFor:B.listKey("day",L),children:U.label})]},B.listKey("weekday",L)))})]}),U0("div",{children:[x(q0,{className:"text-xs",children:Z("ends")}),x("div",{className:"space-y-2 mt-1",children:A$.map(({type:U,id:L,labelKey:W})=>U0("div",{className:"flex items-center space-x-2",children:[x(KP,{checked:N===U,id:L,onCheckedChange:()=>M(U)}),x(q0,{className:"text-xs",htmlFor:L,children:Z(W)}),U==="count"&&N==="count"&&U0(V$,{children:[x(t0,{className:"h-6 w-16 text-xs","data-testid":"count-input",min:"1",onChange:(I)=>G({count:c5(I.target.value)}),type:"number",value:Q?.count||1}),x("span",{className:"text-xs",children:Z("occurrences")})]}),U==="until"&&N==="until"&&x(lP,{className:"h-6",date:Q?.until??void 0,onChange:(I)=>G({until:I?T(I).endOf("day").toDate():void 0})})]},U))})]})]})})]})};import{useCallback as rP,useState as W$}from"react";var l5={isOpen:!1,operationType:"edit",event:null};function u5(P){let{updateRecurringEvent:$,deleteRecurringEvent:Z}=O((z)=>({updateRecurringEvent:z.updateRecurringEvent,deleteRecurringEvent:z.deleteRecurringEvent})),[X,J]=W$(l5),Y=rP((z,G)=>{J({isOpen:!0,operationType:"edit",event:z,updates:G,onConfirm:(K)=>{$(z,G,{scope:K,eventDate:z.start})}})},[$]),Q=rP((z)=>{J({isOpen:!0,operationType:"delete",event:z,onConfirm:(G)=>{Z(z,{scope:G,eventDate:z.start})}})},[Z]),q=rP(()=>J(l5),[]),_=rP((z)=>{if(X.onConfirm)X.onConfirm(z);q(),P?.()},[X,q,P]);return{dialogState:X,openEditDialog:Y,openDeleteDialog:Q,closeDialog:q,handleConfirm:_}}import{useMemo as F$}from"react";var nP=(P)=>{let{businessHours:$,getResourceById:Z}=O((X)=>({businessHours:X.businessHours,getResourceById:X.getResourceById}));return F$(()=>{if(P!=null&&Z){let X=Z(P);if(X?.businessHours)return X.businessHours}return $},[P,Z,$])};import{jsx as v,jsxs as f0,Fragment as B$}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"}],h2=({name:P,label:$,placeholder:Z,value:X,required:J=!1,onChange:Y})=>f0("div",{className:"grid gap-1 sm:gap-2",children:[v(q0,{className:"text-xs sm:text-sm",htmlFor:P,children:$}),v(t0,{className:"h-8 text-sm sm:h-9",id:P,name:P,onChange:Y,placeholder:Z,required:J,value:X})]}),d5=({selectedEvent:P,onClose:$,onUpdate:Z,onDelete:X,onAdd:J})=>{let{dialogState:Y,openEditDialog:Q,openDeleteDialog:q,closeDialog:_,handleConfirm:z}=u5($),{findParentRecurringEvent:G,t:K,timeFormat:V}=O((H)=>({findParentRecurringEvent:H.findParentRecurringEvent,t:H.t,timeFormat:H.timeFormat})),M=nP(P?.resourceId),N=P?.start??T(),f=P?.end??T().add(1,"hour"),F=P?G(P):null,[U,L]=i0(N.toDate()),[W,I]=i0(f.toDate()),[R,S]=i0(P?.allDay||!1),[w,k]=i0(P?.color||o5[0].value),[h,j]=i0(N.format("HH:mm")),[c,e]=i0(f.format("HH:mm")),[E,m]=i0({title:P?.title||"",description:P?.description||"",location:P?.location||""}),[i,_0]=i0(()=>{return P?.rrule||F?.rrule||null}),G0=(H)=>{if(!H)return;if(L(H),T(H).isAfter(T(W)))I(H)},W0=(H)=>{if(!H)return;if(I(H),H&&T(H).isBefore(T(U)))L(H)},S0=(H)=>{if(j(H),T(U).isSame(T(W),"day")&&H>c)e(H)},J0=(H)=>{if(e(H),T(U).isSame(T(W),"day")&&H<h)j(H)},L0=(H)=>{let{name:P0,value:Q0}=H.target;m((A0)=>({...A0,[P0]:Q0}))};M$(()=>{if(R)e("23:59")},[R]);let d=(H)=>{H.preventDefault();let P0=w2(U,h,R),Q0=w5(W,c,R),A0={id:P?.id||T().format("YYYYMMDDHHmmss"),title:E.title,start:P0,end:Q0,resourceId:P?.resourceId,description:E.description,location:E.location,allDay:R,color:w,rrule:i||void 0};if(P?.id&&UP(P)){Q(P,{title:E.title,start:P0,end:Q0,description:E.description,location:E.location,allDay:R,color:w,rrule:i||void 0});return}if(P?.id)Z?.(A0);else J?.(A0);$()},p0=()=>{if(P?.id){if(UP(P)){q(P);return}X?.(P),$()}},T0=(H)=>{if(!H){_0(null);return}let P0=w2(U,h,R);_0({...H,dtstart:P0.toDate()})},H0=M?(H)=>!b2(T(H),M):void 0,y=k2(U,M),X0=k2(W,M),e0=[["startDate",U,G0],["endDate",W,W0]],PP=[["startTime","start-time",h,S0,y],["endTime","end-time",c,J0,X0]];return f0(B$,{children:[f0("form",{className:"flex flex-col flex-1 min-h-0",onSubmit:d,children:[v(O0,{className:"flex-1 min-h-0",children:f0("div",{className:"grid gap-3 sm:gap-4 p-1",children:[v(h2,{label:K("title"),name:"title",onChange:L0,placeholder:K("eventTitlePlaceholder"),required:!0,value:E.title}),v(h2,{label:K("description"),name:"description",onChange:L0,placeholder:K("eventDescriptionPlaceholder"),value:E.description}),f0("div",{className:"flex items-center space-x-2",children:[v(KP,{checked:R,id:"allDay",onCheckedChange:(H)=>S(H===!0)}),v(q0,{className:"text-xs sm:text-sm",htmlFor:"allDay",children:K("allDay")})]}),v("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:e0.map(([H,P0,Q0])=>f0("div",{children:[v(q0,{className:"text-xs sm:text-sm",children:K(H)}),v(lP,{className:"mt-1",closeOnSelect:!0,date:P0,disabled:H0,onChange:Q0})]},H))}),!R&&v("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:PP.map(([H,P0,Q0,A0,$P])=>f0("div",{children:[v(q0,{className:"text-xs sm:text-sm",children:K(H)}),v(H5,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:$P.max,minTime:$P.min,name:P0,onChange:A0,placeholder:K("searchTime"),timeFormat:V,value:Q0})]},H))}),f0("div",{className:"grid gap-1 sm:gap-2",children:[v(q0,{className:"text-xs sm:text-sm",children:K("color")}),v("div",{className:"flex flex-wrap gap-2",children:o5.map((H)=>v(g,{"aria-label":H.label,className:A(`${H.value} h-6 w-6 rounded-full sm:h-8 sm:w-8`,w===H.value&&"ring-2 ring-black ring-offset-1 sm:ring-offset-2"),onClick:()=>k(H.value),type:"button",variant:"ghost"},H.value))})]}),v(h2,{label:K("location"),name:"location",onChange:L0,placeholder:K("eventLocationPlaceholder"),value:E.location}),v(i5,{onChange:T0,value:i})]})}),f0(gP,{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:p0,size:"sm",type:"button",variant:"destructive",children:K("delete")}),f0("div",{className:"flex w-full gap-2 sm:w-auto",children:[v(g,{className:"flex-1 sm:flex-none",onClick:$,size:"sm",type:"button",variant:"outline",children:K("cancel")}),v(g,{className:"flex-1 sm:flex-none",size:"sm",type:"submit",children:P?.id?K("update"):K("create")})]})]})]}),v(fP,{eventTitle:Y.event?.title||"",isOpen:Y.isOpen,onClose:_,onConfirm:z,operationType:Y.operationType})]})};import{jsx as aP,jsxs as r5}from"react/jsx-runtime";var tP=()=>{let{t:P,selectedEvent:$,isEventFormOpen:Z,closeEventForm:X,addEvent:J,updateEvent:Y,deleteEvent:Q,renderEventForm:q}=O((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:Z,onClose:X,selectedEvent:$,onAdd:J,onUpdate:(K)=>{Y(K.id,K)},onDelete:(K)=>{Q(K.id)}};if(q)return q(G);return aP(JP,{onOpenChange:X,open:Z,children:r5(QP,{className:"flex flex-col h-[90vh] w-[90vw] max-w-[500px] p-4 sm:p-6 overflow-hidden gap-0",children:[r5(YP,{className:"mb-2 sm:mb-4 shrink-0",children:[aP(qP,{className:"text-base sm:text-lg",children:$?.id?P("editEvent"):P("createEvent")}),aP(CP,{className:"text-xs sm:text-sm",children:$?.id?P("editEventDetails"):P("addNewEvent")})]}),aP(d5,{...G})]})})};import{Calendar as h$,Download as E$,Menu as D$,Plus as j$}from"lucide-react";import{useState as x$}from"react";import{RRule as O$}from"rrule";var E2=`\r
2
+ `,f$=["BEGIN:VTIMEZONE","TZID:UTC","BEGIN:STANDARD","DTSTART:19700101T000000","TZNAME:UTC","TZOFFSETFROM:+0000","TZOFFSETTO:+0000","END:STANDARD","END:VTIMEZONE"].join(E2),eP=(P)=>{return P.replaceAll("\\","\\\\").replaceAll(";","\\;").replaceAll(",","\\,").replaceAll(`
3
+ `,"\\n").replaceAll("\r","")},sP=(P,$=!1)=>{return $?P.format("YYYYMMDD"):P.utc().format("YYYYMMDD[T]HHmmss[Z]")},n5=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},I$=(P)=>{try{return new O$(P).toString().split(`
4
+ `).find((Z)=>Z.startsWith("RRULE:"))||""}catch{return""}},R$=(P)=>{let $=T().utc().format("YYYYMMDD[T]HHmmss[Z]"),Z=P.allDay?";VALUE=DATE":"",X=P.rrule?I$(P.rrule):"",J=P.exdates?.length?P.exdates.map((q)=>sP(T(q),P.allDay)).join(","):null,Y=P.recurrenceId?sP(T(P.recurrenceId),P.allDay):null;return["BEGIN:VEVENT",`UID:${n5(P)}`,`DTSTART${Z}:${sP(P.start,P.allDay)}`,`DTEND${Z}:${sP(P.end,P.allDay)}`,`SUMMARY:${eP(P.title)}`,P.description&&`DESCRIPTION:${eP(P.description)}`,P.location&&`LOCATION:${eP(P.location)}`,X,J&&`EXDATE:${J}`,Y&&`RECURRENCE-ID:${Y}`,`DTSTAMP:${$}`,`CREATED:${$}`,`LAST-MODIFIED:${$}`,"STATUS:CONFIRMED","SEQUENCE:0","TRANSP:OPAQUE","END:VEVENT"].filter(Boolean).join(E2)},S$=(P)=>{let $=new Set;return P.filter((Z)=>{let X=n5(Z),J=Z.rrule&&!Z.recurrenceId,Y=Z.recurrenceId&&!Z.rrule;if(J)return $.add(X),!0;if(Y)return!0;return!Z.rrule&&!Z.recurrenceId&&!$.has(X)})},p$=(P,$="ilamy Calendar")=>{let Z=eP($),X=S$(P).map(R$);return["BEGIN:VCALENDAR","VERSION:2.0","PRODID:-//ilamy//ilamy Calendar//EN","CALSCALE:GREGORIAN","METHOD:PUBLISH",`X-WR-CALNAME:${Z}`,`X-WR-CALDESC:Exported from ${Z}`,f$,...X,"END:VCALENDAR"].join(E2)},a5=(P,$="calendar.ics",Z="ilamy Calendar")=>{let X=new Blob([p$(P,Z)],{type:"text/calendar;charset=utf-8"}),J=URL.createObjectURL(X),Y=$.endsWith(".ics")?$:`${$}.ics`,Q=document.createElement("a");Q.href=J,Q.download=Y,document.body.append(Q),Q.click(),Q.remove(),URL.revokeObjectURL(J)};import{ChevronDown as T$}from"lucide-react";import{useState as H$}from"react";function t5(){let{currentLocale:P,timezone:$}=O((X)=>({currentLocale:X.currentLocale,timezone:X.timezone}));return{formatDateRange:(X,J)=>new Intl.DateTimeFormat(P,{timeZone:$,month:"short",day:"numeric"}).formatRange(X.toDate(),J.toDate())}}import{jsx as a,jsxs as D2,Fragment as P2}from"react/jsx-runtime";var b$=()=>{let{currentDate:P,view:$,selectDate:Z,t:X,firstDayOfWeek:J}=O((L)=>({currentDate:L.currentDate,view:L.view,selectDate:L.selectDate,t:L.t,firstDayOfWeek:L.firstDayOfWeek})),{formatDateRange:Y}=t5(),[Q,q]=H$(null),_=Array.from({length:12},(L,W)=>P.month(W).format("MMMM")),z=P.year(),G=Array.from({length:11},(L,W)=>z-5+W),K=r(P,J),V=(L)=>{Z(L),q(null)},M=()=>a(P2,{children:_.map((L,W)=>a(g,{className:A("justify-start font-normal",P.month()===W&&"bg-primary/10"),onClick:()=>V(P.month(W)),variant:"ghost",children:L},W))}),N=()=>a(P2,{children:G.map((L)=>a(g,{className:A("justify-start font-normal",P.year()===L&&"bg-primary/10"),onClick:()=>V(P.year(L)),variant:"ghost",children:L},L))}),f=()=>a(P2,{children:Array.from({length:7},(L,W)=>{let I=P.subtract(3,"week").add(W,"week"),R=r(I,J),S=R[0],w=R[6],k=I.isSame(P,"week");return a(g,{className:A("justify-start font-normal",k&&"bg-primary/10"),onClick:()=>V(S),variant:"ghost",children:a("div",{className:"flex w-full items-center justify-between",children:a("span",{children:Y(S,w)})})},n(S))})}),F=()=>{let L=P.startOf("month"),W=P.daysInMonth();return a(P2,{children:Array.from({length:W},(I,R)=>{let S=L.date(R+1),w=S.isSame(P,"day"),k=u(S);return a(g,{className:A("justify-start font-normal",w&&"bg-primary/10"),onClick:()=>V(S),variant:"ghost",children:D2("div",{className:"flex w-full items-center justify-between",children:[a("span",{children:S.format("ll")}),k&&a("span",{className:"bg-primary text-primary-foreground rounded-sm px-1! text-xs",children:X("today")})]})},n(S))})})};return[{id:"month",hidden:$==="year",title:P.format("MMMM"),render:M},{id:"year",hidden:!1,title:P.format("YYYY"),render:N},{id:"week",hidden:$!=="week",title:Y(K[0],K[6]),render:f},{id:"day",hidden:$!=="day",title:P.format("dddd, D"),render:F}].filter((L)=>!L.hidden).map((L)=>D2(x0,{onOpenChange:(W)=>q(W?L.id:null),open:Q===L.id,children:[a(v0,{asChild:!0,children:D2(g,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",variant:"ghost",children:[a(D,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",transitionKey:B.listKey(L.id,n(P)),children:L.title}),a(T$,{className:"h-4 w-4"})]})}),a(y0,{className:"w-40 p-0",children:a("div",{className:"flex max-h-60 flex-col overflow-auto",children:L.render()})})]},L.id))},s5=b$;import{ChevronLeft as w$,ChevronRight as k$}from"lucide-react";import{jsx as AP,jsxs as C$}from"react/jsx-runtime";var m$=["day","week","month","year"],g$=({currentView:P,onChange:$,variant:Z="default",size:X="sm",className:J,onToday:Y,onNext:Q,onPrevious:q})=>{let{t:_,resources:z}=O((N)=>({t:N.t,resources:N.resources})),G=Z==="grid",K=z&&z.length>0,V=(N)=>{return A(G?"w-full":"",P===N&&"bg-primary/80")},M=(N)=>{return P===N?"default":"outline"};return C$("div",{className:A(G?"grid grid-cols-2 gap-2":"flex gap-1",J),children:[AP(g,{onClick:q,size:X,variant:"outline",children:AP(w$,{className:"h-4 w-4"})}),AP(g,{onClick:Q,size:X,variant:"outline",children:AP(k$,{className:"h-4 w-4"})}),m$.map((N)=>{if(K&&N==="year")return null;return AP(g,{className:V(N),onClick:()=>$(N),size:X,variant:M(N),children:_(N)},N)}),AP(g,{onClick:Y,size:X,variant:"outline",children:_("today")})]})},j2=g$;import{jsx as o,jsxs as m0}from"react/jsx-runtime";var v$=({className:P=""})=>{let{view:$,setView:Z,nextPeriod:X,prevPeriod:J,today:Y,openEventForm:Q,headerComponent:q,headerClassName:_,rawEvents:z,t:G,hideExportButton:K}=O((W)=>({view:W.view,setView:W.setView,nextPeriod:W.nextPeriod,prevPeriod:W.prevPeriod,today:W.today,openEventForm:W.openEventForm,headerComponent:W.headerComponent,headerClassName:W.headerClassName,rawEvents:W.rawEvents,t:W.t,hideExportButton:W.hideExportButton})),[V,M]=x$(!1),N=()=>M(!1),f=(W)=>(...I)=>{W(...I),N()},F=()=>{let W=`ilamy-calendar-${new Date().toISOString().split("T")[0]}.ics`;a5(z,W,"ilamy Calendar"),N()},U=()=>m0(g,{className:"flex items-center gap-1",onClick:()=>Q(),size:"sm",variant:"default",children:[o(j$,{className:"h-4 w-4"}),o("span",{className:"hidden @4xl:inline",children:G("new")})]}),L=({fullWidth:W=!1})=>m0(g,{className:A("flex items-center gap-1",W&&"w-full gap-2"),onClick:F,size:"sm",variant:"outline",children:[o(E$,{className:"h-4 w-4"}),W?`${G("export")} Calendar (.ics)`:o("span",{className:"hidden @4xl/base-header:inline",children:G("export")})]});if(q)return q;return o("div",{className:"@container/base-header w-full","data-testid":"calendar-header",children:m0("div",{className:A("flex justify-center @2xl/base-header:justify-between flex-wrap items-center gap-2",P,_),children:[m0("div",{className:"flex flex-wrap items-center justify-center gap-1 @2xl/base-header:justify-start",children:[o(h$,{className:"h-5 w-5"}),o(s5,{})]}),m0("div",{className:"flex flex-wrap justify-start @xl/base-header:justify-center gap-1 @4xl/base-header:justify-end overflow-x-auto",children:[m0("div",{className:"hidden @md/base-header:flex items-center justify-start gap-1",children:[o(j2,{className:"justify-end",currentView:$,onChange:Z,onNext:X,onPrevious:J,onToday:Y,variant:"default"}),o(U,{}),!K&&o(L,{})]}),m0("div",{className:"flex items-center justify-end gap-1 @md/base-header:hidden",children:[o(U,{}),m0(x0,{onOpenChange:M,open:V,children:[o(v0,{asChild:!0,children:o(g,{size:"sm",variant:"outline",children:o(D$,{className:"h-4 w-4"})})}),o(y0,{align:"end",className:"w-[240px] p-2",children:m0("div",{className:"space-y-2",children:[o(j2,{currentView:$,onChange:f(Z),onNext:f(X),onPrevious:f(J),onToday:f(Y),variant:"grid"}),!K&&o("div",{className:"pt-2 border-t",children:o(L,{fullWidth:!0})})]})})]})]})]})]})})},RP=v$;import{memo as G9}from"react";import{memo as Y1,useMemo as q9}from"react";import{useMemo as x2}from"react";var e5=({days:P,events:$,dayMaxEvents:Z,dayNumberHeight:X=Z5,gridType:J="day",eventSpacing:Y=h0,eventBarHeight:Q=F0})=>{let q=P.at(0),_=P.at(-1);if(!q||!_)return[];let z=J==="hour"?q.startOf("hour"):q.startOf("day"),G=J==="hour"?_.endOf("hour"):_.endOf("day"),K=P.length,V=$.filter((I)=>I.end.diff(I.start,J)>0),M=$.filter((I)=>I.end.diff(I.start,J)===0),N=[...V].sort((I,R)=>{let S=I.start.diff(R.start);if(S!==0)return S;return R.end.diff(R.start)-I.end.diff(I.start)}),f=[...M].sort((I,R)=>I.start.diff(R.start)),F=Array.from({length:Z},()=>Array.from({length:K},()=>({taken:!1,event:null}))),U=[],L=(I,R)=>{for(let S=0;S<Z;S++){let w=!0;for(let k=I;k<=R;k++)if(F[S][k].taken){w=!1;break}if(w)return S}return-1},W=(I,R,S,w,k,h)=>{for(let c=R;c<=S;c++)F[I][c]={taken:!0,event:w};let j=S-R+1;U.push({left:R/K*100,width:j/K*100,top:X+Y+I*(Q+Y),height:Q,position:I,...w,isTruncatedStart:k,isTruncatedEnd:h})};for(let I of N){let R=T.max(I.start.startOf(J),z),S=J==="hour"?I.end.subtract(1,"minute"):I.end,w=T.min(S.startOf(J),G),k=Math.max(0,R.diff(z,J)),h=Math.min(K-1,w.diff(z,J)),j=I.start.startOf(J).isBefore(z),c=I.end.startOf(J).isAfter(G),e=L(k,h);if(e!==-1){W(e,k,h,I,j,c);continue}for(let E=k+1;E<=h;E++){let m=L(E,h);if(m!==-1){W(m,E,h,I,!0,c);break}}}for(let I of f){let R=T.max(I.start.startOf(J),z),S=Math.max(0,Math.min(K-1,R.diff(z,J))),w=L(S,S);if(w!==-1)W(w,S,S,I,!1,!1)}return U};var v2=({days:P,allDay:$,dayNumberHeight:Z,resourceId:X,gridType:J})=>{let{getEventsForDateRange:Y,dayMaxEvents:Q,eventSpacing:q,eventHeight:_,getEventsForResource:z}=O(),G=P.at(0),K=P.at(-1),V=G?.startOf("day"),M=K?.endOf("day"),N=x2(()=>{if(!V||!M)return[];let U=Y(V,M);if(X)U=_P(U,z(X));if($)U=U.filter((L)=>!!L.allDay===$);return U},[Y,z,V,M,X,$]),f=x2(()=>{let U=new Map;for(let L of P){let W=n(L),I=L.startOf("day"),R=L.endOf("day"),S=N.filter((w)=>jP(w,I,R));U.set(W,S)}return U},[P,N]);return{positionedEvents:x2(()=>{return e5({days:P,events:N,dayMaxEvents:Q,dayNumberHeight:Z,eventSpacing:q,eventBarHeight:_,gridType:J})},[P,Q,Z,q,_,N,J]),dayEventsMap:f}};import t$,{memo as s$,useMemo as e$}from"react";import{jsx as y$}from"react/jsx-runtime";var P1=({date:P,className:$})=>{let Z=u(P);return y$("div",{className:A("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":B.dayNumber(P),children:P.format("D")})};import{useImperativeHandle as d$,useState as $1}from"react";import{useDraggable as c$}from"@dnd-kit/core";import{memo as i$}from"react";import{jsx as SP,jsxs as o$}from"react/jsx-runtime";var l$=(P,$)=>{if(P&&$)return"rounded-none";if(P)return"rounded-r-md rounded-l-none";if($)return"rounded-l-md rounded-r-none";return"rounded-md"};function u$({elementId:P,event:$,className:Z,style:X,disableDrag:J=!1}){let{onEventClick:Y,renderEvent:Q,disableEventClick:q,disableDragAndDrop:_}=O(),{attributes:z,listeners:G,setNodeRef:K,isDragging:V}=c$({id:P,data:{event:$,type:"calendar-event"},disabled:J||_}),M=()=>{let N=$,f=N.isTruncatedStart,F=N.isTruncatedEnd;return o$("div",{className:A($.backgroundColor||"bg-blue-500",$.color||"text-white","h-full w-full px-1 border-[1.5px] border-card text-left overflow-clip relative",l$(Boolean(f),Boolean(F))),style:{backgroundColor:$.backgroundColor,color:$.color},children:[f&&SP("div",{className:"absolute left-0 top-0 bottom-0 w-0.5 bg-foreground/25"}),SP("p",{className:A("text-[10px] font-semibold sm:text-xs mt-0.5",f&&"pl-1",F&&"pr-1"),children:$.title}),F&&SP("div",{className:"absolute right-0 top-0 bottom-0 w-0.5 bg-foreground/25"})]})};return SP(D,{className:A("truncate h-full w-full",J||_?q?"cursor-default":"cursor-pointer":"cursor-grab",V&&!(J||_)&&"cursor-grabbing shadow-lg",Z),layout:!0,layoutId:P,onClick:(N)=>{N.stopPropagation(),Y($)},ref:K,style:X,transitionKey:P,...z,...G,children:Q?Q($):SP(M,{})})}var NP=i$(u$,(P,$)=>{return P.elementId===$.elementId&&P.disableDrag===$.disableDrag&&P.className===$.className&&P.event===$.event});import{jsx as pP,jsxs as r$}from"react/jsx-runtime";var Z1=({ref:P})=>{let[$,Z]=$1(!1),[X,J]=$1(null),{currentDate:Y,firstDayOfWeek:Q,eventHeight:q}=O();d$(P,()=>({open:()=>Z(!0),close:()=>Z(!1),setSelectedDayEvents:(G)=>J(G)}));let z=Y.startOf("month").clone();while(z.day()!==Q)z=z.subtract(1,"day");return pP(JP,{onOpenChange:Z,open:$,children:r$(QP,{className:"max-h-[80vh] max-w-md overflow-y-auto",children:[pP(YP,{children:pP(qP,{children:X?.day.format("MMMM D, YYYY")})}),pP("div",{className:"mt-4 space-y-3",children:X?.events.map((G)=>{return pP(NP,{className:"relative my-1",elementId:`all-events-dialog-event-$${G.id}`,event:G,style:{height:`${q}px`}},G.id)})})]})})};import{useDroppable as n$}from"@dnd-kit/core";import{jsx as a$}from"react/jsx-runtime";function X1({id:P,type:$,date:Z,hour:X,minute:J,resourceId:Y,allDay:Q,children:q,className:_,style:z,"data-testid":G,disabled:K=!1}){let{onCellClick:V,disableDragAndDrop:M,disableCellClick:N,classesOverride:f,view:F}=O(),{isOver:U,setNodeRef:L}=n$({id:P,data:{type:$,date:Z,hour:X,minute:J,resourceId:Y,allDay:Q},disabled:M||K}),W=(I)=>{if(I.stopPropagation(),N||K)return;let R=Z.hour(X??0).minute(J??0),S=R.clone();if(X!==void 0&&J!==void 0)S=S.hour(X).minute(J+15);else if(X!==void 0)S=S.hour(X+1).minute(0);else S=S.hour(23).minute(59);V({start:R,end:S,resourceId:Y,allDay:Q})};return a$("div",{className:A("droppable-cell",_,U&&!M&&!K&&"bg-accent",N||K?"cursor-default":"cursor-pointer",K&&(f?.disabledCell||X5)),"data-disabled":K.toString(),"data-testid":G,"data-view":F,onClick:W,ref:L,style:z,children:q})}import{jsx as $2,jsxs as Z2,Fragment as J1}from"react/jsx-runtime";var P9=({day:P,hour:$,minute:Z,className:X="",resourceId:J,gridType:Y="day",shouldRenderEvents:Q=!0,allDay:q=!1,precomputedEvents:_,"data-testid":z,showDayNumber:G=!1,children:K})=>{let V=t$.useRef(null),{dayMaxEvents:M=0,getEventsForDateRange:N,currentDate:f,t:F,getEventsForResource:U,currentLocale:L,eventSpacing:W,eventHeight:I}=O(),R=nP(J),S=e$(()=>{if(!Q)return[];if(_)return _;let m=N(P.startOf(Y),P.endOf(Y));if(q)m=m.filter((i)=>i.allDay);if(J)return _P(m,U(J)??[]);return m},[_,P,J,N,U,Y,Q,q]),w=(m,i)=>{V.current?.setSelectedDayEvents({day:m,events:i}),V.current?.open()},k=P.month()===f.month(),h=S.length-M,j=h>0,c=b5({date:P,hour:Y==="hour"?P.hour():void 0,businessHours:R}),e=Y==="hour"?B.cell.day(P,P.format("HH"),P.format("mm")):B.cell.day(P),E=B.droppable.dayCell(P,{allDay:q,resourceId:J});return Z2(J1,{children:[$2(X1,{allDay:q,className:A("cursor-pointer overflow-clip p-1 hover:bg-accent min-h-[60px] relative border-r border-b min-w-0",X),"data-testid":z||e,date:P,disabled:!c||!k,hour:$,id:E,minute:Z,resourceId:J,type:"day-cell",children:Z2("div",{className:"flex flex-col h-full w-full","data-testid":"grid-cell-content",style:{gap:`${W}px`},children:[G&&$2(P1,{date:P,locale:L}),Q&&Z2(J1,{children:[S.slice(0,M).map((m,i)=>$2("div",{className:"w-full shrink-0","data-testid":m?.title,style:{height:`${I}px`}},B.listKey("empty",i,m.id))),j&&Z2("div",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs shrink-0 mt-1",onClick:(m)=>{m.stopPropagation(),w(P,S)},onKeyDown:(m)=>{if(m.key==="Enter"||m.key===" ")m.preventDefault(),m.stopPropagation(),w(P,S)},role:"button",tabIndex:0,children:["+",h," ",F("more")]})]}),K]})}),$2(Z1,{ref:V})]})},TP=s$(P9);import{jsx as Q1}from"react/jsx-runtime";var l0=({resource:P,className:$,children:Z,"data-testid":X})=>{let{renderResource:J}=O();return Q1("div",{className:A("flex items-center justify-center p-2 border-r last:border-r-0",$),"data-testid":X,style:{color:P.color,backgroundColor:P.backgroundColor},children:J?J(P):Z??Q1("div",{className:"text-sm font-medium truncate",children:P.title})})};import{memo as J9}from"react";import{memo as $9}from"react";import{jsx as y2,Fragment as X9}from"react/jsx-runtime";var Z9=({rangeStart:P,rangeEnd:$,now:Z,resource:X,axis:J="vertical"})=>{let{renderCurrentTimeIndicator:Y,view:Q}=O((V)=>({renderCurrentTimeIndicator:V.renderCurrentTimeIndicator,view:V.view})),q=Z??T();if(!(q.isSameOrAfter(P)&&q.isBefore($)))return null;let z=$.diff(P,"minute"),K=q.diff(P,"minute")/z*100;if(Y)return y2(X9,{children:Y({currentTime:q,rangeStart:P,rangeEnd:$,progress:K,resource:X,view:Q,axis:J})});if(J==="horizontal")return y2("div",{className:"absolute top-0 bottom-0 w-0.5 bg-red-500 z-50 pointer-events-none","data-testid":"current-time-indicator",style:{left:`${K}%`}});return y2("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:`${K}%`}})},X2=$9(Z9);import{jsx as c2,jsxs as Y9}from"react/jsx-runtime";var Q9=({gridType:P="day",days:$,resourceId:Z,resource:X,"data-testid":J,positionedEvents:Y})=>{let{eventHeight:Q}=O(),q=$.at(0)?.startOf("day"),_=$.at(0),z=$.at(-1)?.add(1,P),G=P==="hour"&&Boolean(_&&z);return Y9("div",{className:"absolute inset-0 pointer-events-none z-10 overflow-clip","data-testid":J,children:[G&&_&&z&&c2(X2,{axis:"horizontal",rangeEnd:z,rangeStart:_,resource:X}),Y.map((K)=>{let V=`${K.id}-${K.position}-${q?.toISOString()}-${Z??"no-resource"}`;return c2("div",{className:"absolute z-10 pointer-events-auto overflow-clip","data-left":K.left,"data-testid":B.container.horizontal.event(K.id),"data-top":K.top,"data-width":K.width,style:{left:`calc(${K.left}% + var(--spacing) * 0.25)`,width:`calc(${K.width}% - var(--spacing) * 1)`,top:`${K.top}px`,height:`${Q}px`},children:c2(NP,{className:"h-full w-full shadow",elementId:V,event:K})},B.listKey(V,"wrapper"))})]})},i2=J9(Q9);import{jsx as N0,jsxs as l2}from"react/jsx-runtime";var U9=({id:P,resource:$,gridType:Z="day",variant:X="resource",dayNumberHeight:J,className:Y,columns:Q=[],allDay:q,showDayNumber:_=!1,isLastRow:z=!1})=>{let{renderResource:G}=O(),K=X==="resource",V=Q.some((F)=>F.days),M=q9(()=>{if(V)return[];return Q.map((F)=>F.day).filter((F)=>Boolean(F))},[Q,V]),{positionedEvents:N,dayEventsMap:f}=v2({days:M,gridType:Z,resourceId:$?.id,dayNumberHeight:J,allDay:q});return l2("div",{className:A("flex flex-1 relative min-w-0",Y),"data-testid":B.container.horizontal.row(P),children:[K&&$&&N0(l0,{className:"w-20 sm:w-40 sticky left-0 bg-background z-20 h-full","data-testid":B.container.horizontal.rowLabel($.id),resource:$,children:G?G($):N0("div",{className:"wrap-break-word text-sm",children:$.title})}),l2("div",{className:"relative flex-1 flex min-w-0",children:[N0("div",{className:"flex w-full min-w-0",children:Q.map((F,U)=>{if(F.days)return N0(z9,{allDay:q,col:F,dayNumberHeight:J,gridType:Z,id:P,isLastCol:U===Q.length-1,isLastRow:z,resource:$,resourceId:$?.id,showDayNumber:_},F.id);return F.day?N0(TP,{allDay:q,className:A("flex-1 w-20",z&&"border-b-0",F.className),day:F.day,gridType:Z,hour:Z==="hour"?F.day.hour():void 0,precomputedEvents:f.get(n(F.day)),resourceId:$?.id,showDayNumber:_},F.day.toISOString()):null})}),!V&&N0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:N0(i2,{"data-testid":B.container.eventsLayer("horizontal",P),days:M,gridType:Z,positionedEvents:N,resource:$,resourceId:$?.id})})]})]})},z9=Y1(({col:P,gridType:$="day",allDay:Z,resource:X,resourceId:J,dayNumberHeight:Y,showDayNumber:Q,isLastRow:q,isLastCol:_,id:z})=>{let G=P.days??[],{positionedEvents:K}=v2({days:G,gridType:$,resourceId:J,dayNumberHeight:Y,allDay:Z});return l2("div",{className:"flex relative w-full",children:[N0("div",{className:"flex w-full",children:G.map((V)=>N0(TP,{allDay:Z,className:A("flex-1 w-20",q&&"border-b-0",!_&&"border-r!",P.className),day:V,gridType:$,hour:$==="hour"?V.hour():void 0,resourceId:J,showDayNumber:Q},V.toISOString()))}),N0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:N0(i2,{"data-testid":B.container.eventsLayer("horizontal",z),days:G,gridType:$,positionedEvents:K,resource:X,resourceId:J})})]})}),J2=Y1(U9);import{memo as _9}from"react";import{jsx as q1}from"react/jsx-runtime";var K9=({className:P})=>{let{t:$}=O();return q1("div",{className:A("w-16 border-r shrink-0 sticky left-0 bg-background z-20 flex border-b items-center justify-center px-1 text-xs text-muted-foreground",P),children:q1("span",{className:"truncate",children:$("allDay")})})},VP=_9(K9);import{jsx as U1,jsxs as A9}from"react/jsx-runtime";var L9=({days:P,classes:$,resource:Z,showSpacer:X=!0})=>{let J=P.map((Y,Q)=>({id:B.col.allDay(Y,Q),day:Y,gridType:"day",className:A("h-full min-h-12 border-r last:border-r-0",$?.cell)}));return A9("div",{className:A("flex w-full bg-background",$?.row),"data-testid":"all-day-row",children:[X&&U1(VP,{className:$?.spacer}),U1(J2,{allDay:!0,className:"flex-1 min-h-fit border-b",columns:J,dayNumberHeight:0,gridType:"day",id:B.allDayRow(Z?.id),isLastRow:!0,resource:Z,variant:"regular"})]})},u0=G9(L9);import{jsx as _1,Fragment as z1}from"react/jsx-runtime";var I0=({date:P})=>{let{renderHour:$,timeFormat:Z}=O();if($)return _1(z1,{children:$(P)});return _1(z1,{children:P.format(Z==="12-hour"?"h A":"H")})};import{useRef as k9}from"react";import{useEffect as N9,useRef as V9}from"react";var W9=/^(\d{1,2})(?::\d{1,2})?(?::\d{1,2})?$/,F9="[data-hour]",M9=(P)=>{let $=W9.exec(P);if(!$)return null;let Z=Number.parseInt($[1],10);return Z>=0&&Z<=23?Z:null},u2=(P)=>Number.parseInt(P.getAttribute("data-hour")??"",10),B9=(P,$)=>{let Z=P.at(0),X=P.at(-1);if(!Z||!X)return null;if($<=u2(Z))return Z;if($>=u2(X))return X;return P.find((J)=>u2(J)===$)??null},O9=(P,$,Z,X)=>{let J=$.getBoundingClientRect(),Y=Z.getBoundingClientRect();if(X==="horizontal"){P.scrollTo({left:J.left-Y.left,behavior:"auto"});return}P.scrollTo({top:J.top-Y.top,behavior:"auto"})},Q2=({viewportRef:P,scrollTime:$,enabled:Z,scrollKey:X,axis:J="vertical"})=>{let Y=V9(null);N9(()=>{if(!Z||!$)return;if(Y.current===X)return;let Q=M9($);if(Q===null)return;let q=P.current;if(!q)return;let _=Array.from(q.querySelectorAll(F9)),z=_.at(0),G=B9(_,Q);if(!z||!G)return;O9(q,G,z,J),Y.current=X},[Z,$,X,P,J])};import{memo as S9}from"react";import{memo as f9}from"react";import{useMemo as G1}from"react";var K1=({days:P,gridType:$="hour",events:Z})=>{let X=Z.filter((M)=>!M.allDay).toSorted((M,N)=>M.start.diff(N.start));if(X.length===0)return[];let J=P.at(0)||T(),Y=P.length,Q=$==="day",q=[],_=[],z=null;for(let M of X){if(z&&M.start.isSameOrAfter(z)){if(_.length>0)q.push(_);_=[]}_.push(M),z=z?T.max(z,M.end):M.end}if(_.length>0)q.push(_);let G=(M)=>{let N=M.start.diff(J,$,!0),f=M.end.diff(J,$,!0);if(Q){if(N=Math.floor(N),f=Math.ceil(f),f<=N)f=N+1}if(N<0)N=0;if(f>Y)f=Y;let F=Math.max(0,f-N);if(F===0)return null;return{top:N/Y*100,height:F/Y*100}},K=(M)=>M===2?25:M===3?50:M===4?60:70,V=[];for(let M of q){if(M.length===1){let U=M[0],L=G(U);if(!L)continue;V.push({...U,left:0,width:100,...L});continue}let N=[...M].sort((U,L)=>{let W=L.end.diff(L.start,"minute")-U.end.diff(U.start,"minute");return W!==0?W:U.start.diff(L.start)}),f=N.length,F=f>1?K(f)/(f-1):0;for(let U=0;U<f;U++){let L=N[U],W=G(L);if(!W)continue;let I=U===0?0:F*U;V.push({...L,...W,left:I,width:100-I,zIndex:U+1})}}return V};var L1=({days:P,gridType:$,resourceId:Z})=>{let{getEventsForDateRange:X,getEventsForResource:J}=O(),Y=P.at(0),Q=P.at(-1),q=Y?.startOf("day"),_=Q?.endOf("day"),z=G1(()=>{if(!q||!_)return[];let K=X(q,_);if(Z)K=_P(K,J(Z));return K.filter((V)=>!V.allDay)},[q,_,X,Z,J]);return G1(()=>{return K1({days:P,events:z,gridType:$})},[P,$,z])};import{jsx as o2,jsxs as R9}from"react/jsx-runtime";var I9=({days:P,gridType:$="hour",resourceId:Z,resource:X,"data-testid":J})=>{let Y=L1({days:P,gridType:$,resourceId:Z}),Q=P.at(0),q=P.at(-1)?.add(1,$),_=$==="hour"&&Boolean(Q&&q);return R9("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":J,children:[_&&Q&&q&&o2(X2,{rangeEnd:q,rangeStart:Q,resource:X}),Y.map((z,G)=>{let K=`event-${z.id}-${G}-${P.at(0)?.toISOString()}-${Z??"no-resource"}`,V=z.end.diff(z.start,"minute")<=15;return o2("div",{className:"absolute",style:{left:`${z.left}%`,width:`calc(${z.width}% - var(--spacing) * 2)`,top:`${z.top}%`,height:`${z.height}%`},children:o2(NP,{className:A("pointer-events-auto",{"[&_p]:text-[10px] [&_p]:mt-0":V}),elementId:K,event:z})},B.listKey(K,"wrapper"))})]})},A1=f9(I9);import{jsx as WP,jsxs as T9}from"react/jsx-runtime";var p9=({id:P,days:$,resourceId:Z,resource:X,"data-testid":J,gridType:Y,className:Q,renderCell:q,noEvents:_,slotDurationMinutes:z=60,isLastColumn:G})=>{let K=Math.floor(60/z),V=Array.from({length:K},(N,f)=>f*z),M=V.length>1;return WP("div",{className:A("flex flex-col flex-1 items-center min-w-20 justify-center bg-background relative",G?"border-r-0":"border-r",Q),"data-testid":J||B.container.vertical.col(P),children:T9("div",{className:"w-full h-full relative grid",style:{gridTemplateRows:`repeat(${$.length}, minmax(0, 1fr))`},children:[$.map((N,f)=>{let F=N.format("HH");if(q){let U=P===B.col.time,L=U?B.cell.verticalTime(F):B.cell.vertical(N,F,"00",Z);return WP("div",{className:"min-h-[60px] border-b border-r","data-hour":U?F:void 0,"data-testid":L,children:q(N)},B.listKey(P,f,F))}return WP("div",{className:"flex flex-col min-h-[60px]",children:V.map((U)=>{let L=String(U).padStart(2,"0"),W=B.cell.vertical(N,F,L,Z);return WP(TP,{className:A("hover:bg-accent relative z-10 flex-1 min-h-0 cursor-pointer border-b border-r-0",M&&"border-dashed"),"data-testid":W,day:M?N.minute(U):N,gridType:Y,hour:N.hour(),minute:M?U:void 0,resourceId:Z,shouldRenderEvents:!1},B.listKey(P,f,L))})},B.listKey(P,f,F))}),!_&&WP("div",{className:"absolute inset-0 z-10 pointer-events-none",children:WP(A1,{"data-testid":B.container.eventsLayer("vertical",P),days:$,gridType:Y,resource:X,resourceId:Z})})]})})},N1=S9(p9);import{memo as H9}from"react";import{jsx as V1,jsxs as w9}from"react/jsx-runtime";var b9=({children:P,classes:$,allDayRow:Z,expandAllDayRow:X=!1})=>{let{stickyViewHeader:J,viewHeaderClassName:Y}=O((q)=>({stickyViewHeader:q.stickyViewHeader,viewHeaderClassName:q.viewHeaderClassName})),Q="min-w-full w-fit";return w9("div",{className:A(X&&"flex h-full flex-col",J&&"sticky top-0 z-21 bg-background",Y),children:[V1("div",{className:A("h-12 border-b","min-w-full w-fit",$?.header),"data-testid":"vertical-grid-header",children:P}),Z&&V1("div",{className:A("flex min-h-12","min-w-full w-fit",X&&"flex-1 overflow-hidden",$?.allDay),"data-testid":"vertical-grid-all-day",children:Z})]})},W1=H9(b9);import{jsx as FP,jsxs as F1}from"react/jsx-runtime";var R0=({columns:P,children:$,gridType:Z="day",variant:X="resource",classes:J,allDayRow:Y,slotDurationMinutes:Q,style:q})=>{let _=X==="resource",z=!_,G=P.every((U)=>!U.days?.length),{currentDate:K,view:V,scrollTime:M}=O(),N=k9(null);Q2({viewportRef:N,scrollTime:M,enabled:Z==="hour"&&!G,scrollKey:`${V}-${K.format("YYYY-MM-DD")}`});let F=$&&FP(W1,{allDayRow:Y,classes:{header:J?.header,allDay:J?.allDay},expandAllDayRow:G,children:$});if(G&&F)return FP("div",{className:"h-full flex flex-col","data-testid":"vertical-grid-container",style:q,children:F});return F1("div",{className:"h-full flex flex-col","data-testid":"vertical-grid-container",style:q,children:[z&&F,F1(O0,{className:A("h-full",z&&"overflow-auto"),"data-testid":"vertical-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full",ref:N},children:[_&&F,FP("div",{className:A("flex flex-1 min-w-full w-fit",J?.body),"data-testid":"vertical-grid-body",children:P.map((U,L)=>FP(N1,{...U,gridType:Z,isLastColumn:L===P.length-1,slotDurationMinutes:Q},B.listKey(U.id,L)))}),FP(k0,{className:"z-30"})," ",FP(k0,{className:"z-30",orientation:"horizontal"})," "]})]})};function z0({referenceDate:P,businessHours:$,hideNonBusinessHours:Z,allDates:X=[P],resourceBusinessHours:J=[]}){let Y=G5({referenceDate:P}),Q=!!$||J.length>0;if(!(Z&&Q))return Y;let{minStart:_,maxEnd:z,hasBusinessHours:G}=oP({allDates:X,businessHours:$,resourceBusinessHours:J,hideNonBusinessHours:Z});if(!G)return Y;if(_>=z)return[];return Y.filter((K)=>{let V=K.hour();return V>=_&&V<z})}import{jsx as MP,jsxs as m9}from"react/jsx-runtime";var M1=()=>{let{currentDate:P,t:$,businessHours:Z,hideNonBusinessHours:X,slotDuration:J}=O(),Y=u(P),Q=z0({referenceDate:P,businessHours:Z,hideNonBusinessHours:X,allDates:[P]}),q={id:B.col.time,day:void 0,days:Q,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20 border-r-0",gridType:"hour",noEvents:!0,renderCell:(z)=>MP("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:MP(I0,{date:z})})},_={id:B.col.day(P),day:P,days:Q,className:"w-[calc(100%-4rem)] flex-1",gridType:"hour"};return MP(R0,{allDayRow:MP(u0,{days:[P]}),classes:{header:"w-full",body:"w-full",allDay:"w-full"},columns:[q,_],gridType:"hour",slotDurationMinutes:J,variant:"regular",children:MP("div",{className:"flex flex-1 justify-center items-center min-h-12","data-testid":"day-view-header",children:m9(D,{className:A("flex justify-center items-center text-center text-sm font-semibold sm:text-xl",Y&&"text-primary"),transitionKey:n(P),children:[P.format("dddd, LL"),Y&&MP("span",{className:"bg-primary text-primary-foreground ml-2 rounded-full px-1 py-0.5 text-xs sm:px-2 sm:text-sm",children:$("today")})]})})})};import{useMemo as D9}from"react";import{useRef as E9}from"react";import{memo as g9}from"react";import{jsx as h9}from"react/jsx-runtime";var C9=({children:P,className:$})=>{let{stickyViewHeader:Z,viewHeaderClassName:X}=O((J)=>({stickyViewHeader:J.stickyViewHeader,viewHeaderClassName:J.viewHeaderClassName}));return h9("div",{className:A("flex h-12 w-fit",Z&&"sticky top-0 z-21 bg-background",$,X),"data-testid":"horizontal-grid-header",children:P})},B1=g9(C9);import{jsx as BP,jsxs as O1}from"react/jsx-runtime";var Y2=({rows:P,children:$,classes:Z,allDay:X,gridType:J,variant:Y="resource",dayNumberHeight:Q})=>{let{currentDate:q,view:_,scrollTime:z}=O(),G=E9(null),K=Y==="resource",V=!K;Q2({viewportRef:G,scrollTime:z,enabled:J==="hour"&&K,scrollKey:`${_}-${q.format("YYYY-MM-DD")}`,axis:"horizontal"});let N=$&&BP(B1,{className:Z?.header,children:$});return O1("div",{className:"h-full flex flex-col","data-testid":"horizontal-grid-container",children:[V&&N,O1(O0,{className:A("h-full",V&&"overflow-auto"),"data-testid":"horizontal-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full",ref:G},children:[K&&N,BP("div",{className:A("flex flex-1 w-fit",Z?.body),"data-testid":"horizontal-grid-body",children:BP("div",{className:"relative w-full flex flex-col flex-1",children:P.map((f,F)=>BP(J2,{allDay:f.allDay??X,dayNumberHeight:Q,gridType:J,isLastRow:F===P.length-1,variant:Y,...f},f.id))},q.format("YYYY-MM"))}),BP(k0,{className:"z-30"}),BP(k0,{className:"z-30",orientation:"horizontal"})]})]})};import{jsx as d2}from"react/jsx-runtime";var f1=({className:P})=>{let{firstDayOfWeek:$,stickyViewHeader:Z,viewHeaderClassName:X,currentDate:J}=O(),Y=r(J,$);return d2("div",{className:A("flex w-full",Z&&"sticky top-0 z-20",X,P),"data-testid":"month-header",children:Y.map((Q,q)=>d2(D,{className:"py-2 text-center font-medium border-r last:border-r-0 border-b flex-1 min-w-0","data-testid":B.header.weekday("month",Q.format("ddd")),delay:q*0.05,transitionKey:Q.toISOString(),children:d2("span",{className:"text-sm capitalize truncate w-full block",children:Q.format("ddd")})},Q.toISOString()))})};import{jsx as I1}from"react/jsx-runtime";var R1=()=>{let{currentDate:P,firstDayOfWeek:$}=O(),X=D9(()=>zP(P,$),[P,$]).map((J,Y)=>({id:B.listKey("week",Y),columns:J.map((Q)=>({id:B.col.day(Q),day:Q,className:"w-auto",gridType:"day"})),className:"flex-1",showDayNumber:!0}));return I1(Y2,{classes:{body:"w-full",header:"w-full"},rows:X,variant:"regular",children:I1(f1,{className:"h-12"})})};import{useMemo as q2}from"react";import{jsx as g0,jsxs as r2}from"react/jsx-runtime";var S1="flex-1 min-w-0",p1="w-10 sm:w-16 min-w-10 sm:min-w-16 max-w-10 sm:max-w-16",T1=()=>{let{t:P,currentDate:$,firstDayOfWeek:Z,selectDate:X,openEventForm:J,businessHours:Y,hideNonBusinessHours:Q,hiddenDays:q,slotDuration:_}=O(),z=q2(()=>r($,Z),[$,Z]),G=q2(()=>q?z.filter((F)=>!q.has(F.day())):z,[z,q]),K=q2(()=>z0({referenceDate:$,businessHours:Y,hideNonBusinessHours:Q,allDates:z}),[$,Y,Q,z]),V={id:B.col.time,days:K,day:void 0,className:`shrink-0 ${p1} sticky left-0 bg-background z-20 border-r-0`,gridType:"hour",noEvents:!0,renderCell:(F)=>g0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:g0(I0,{date:F})})},M=q2(()=>{return G.map((F)=>({id:B.col.day(F),day:F,label:F.format("D"),className:S1,days:z0({referenceDate:F,businessHours:Y,hideNonBusinessHours:Q,allDates:z}),value:F}))},[z,Y,Q,G.map]),N={"--visible-days":G.length},f="w-full";return g0(R0,{allDayRow:g0(u0,{classes:{cell:S1,spacer:p1},days:G}),classes:{header:"w-full h-18",allDay:"w-full",body:"w-full"},columns:[V,...M],gridType:"hour",slotDurationMinutes:_,style:N,variant:"regular",children:r2("div",{className:"flex h-full flex-1","data-testid":"week-view-header",children:[g0("div",{className:"w-10 sm:w-16 min-w-10 sm:min-w-16 h-full shrink-0 items-center justify-center border-r p-2 flex",children:r2("div",{className:"flex flex-col items-center justify-center min-w-0 w-full",children:[g0("span",{className:"text-muted-foreground text-xs truncate w-full text-center",children:P("week")}),g0("span",{className:"font-medium truncate w-full text-center",children:$.week()})]})}),G.map((F,U)=>{let L=u(F),W=B.header.week.day(F);return r2(D,{className:A("hover:bg-accent flex-1 min-w-0 flex flex-col justify-center cursor-pointer p-1 text-center sm:p-2 border-r last:border-r-0 w-20 h-full",L&&"bg-primary/10 font-bold"),"data-testid":B.header.weekday("week",F.format("dddd")),delay:U*0.05,onClick:()=>{X(F),J({start:F})},transitionKey:W,children:[g0("div",{className:"text-xs sm:text-sm truncate w-full",children:F.format("ddd")}),g0("div",{className:A("mx-auto mt-1 flex h-6 w-6 items-center justify-center rounded-full text-xs",L&&"bg-primary text-primary-foreground"),children:F.format("D")})]},W)})]})})};import{jsx as o0,jsxs as HP}from"react/jsx-runtime";var j9=["bg-primary","bg-blue-500","bg-green-500"],x9=42,H1=()=>{let{currentDate:P,selectDate:$,events:Z,setView:X,getEventsForDateRange:J,t:Y,firstDayOfWeek:Q}=O(),q=P.year(),_=r(T(),Q).map((U)=>({id:U.day().toString(),label:U.format("dd")})),z=()=>{return Array.from({length:12},(U,L)=>{let W=T().year(q).month(L).startOf("month"),I=Z.filter((R)=>R.start.year()===q&&R.start.month()===L);return{date:W,name:W.format("MMMM"),eventCount:I.length,monthKey:W.format("MM")}})},G=(U)=>{let L=U.startOf("month").startOf("week");return Array.from({length:x9},(W,I)=>{let R=L.add(I,"day"),S=R.startOf("day"),w=R.endOf("day"),k=J(S,w);return{date:R,dayKey:n(R),isInCurrentMonth:R.month()===U.month(),isToday:u(R),isSelected:R.isSame(P,"day"),eventCount:k.length}})},K=(U,L,W)=>{W?.stopPropagation(),$(U),X(L)},V=(U)=>{let L=U===1?Y("event"):Y("events");return`${U} ${L}`},M=(U)=>{let W=U.isInCurrentMonth?"":"text-muted-foreground opacity-50",I=U.isToday?"bg-primary text-primary-foreground rounded-full":"",R=U.isSelected&&!U.isToday?"bg-muted rounded-full font-bold":"",S=U.eventCount>0&&!U.isToday&&!U.isSelected?"font-medium":"";return A("relative flex aspect-square w-full cursor-pointer flex-col items-center justify-center hover:bg-accent rounded-sm transition-colors duration-200",W,I,R,S)},N=(U,L)=>{return A("h-[3px] w-[3px] rounded-full",L?"bg-primary-foreground":U)},f=z(),F=(U)=>{if(U===0)return"";return V(U)};return HP(O0,{className:"h-full","data-testid":"year-view",children:[o0("div",{className:"grid auto-rows-fr grid-cols-1 gap-4 p-4 sm:grid-cols-2 lg:grid-cols-3","data-testid":"year-grid",children:f.map((U,L)=>{let W=G(U.date),I=L*0.05;return HP("div",{className:"hover:border-primary flex flex-col rounded-lg border p-3 text-left transition-all duration-200 hover:shadow-md","data-testid":B.header.year.month(U.monthKey),children:[HP(D,{className:"mb-2 flex items-center justify-between",delay:I,transitionKey:B.listKey("month",U.monthKey),children:[o0("button",{className:"text-lg font-medium hover:underline cursor-pointer","data-testid":B.header.year.month(U.monthKey,"title"),onClick:()=>K(U.date,"month"),type:"button",children:U.name}),U.eventCount>0&&o0("span",{className:"bg-primary text-primary-foreground rounded-full px-2 py-1 text-xs","data-testid":B.header.year.month(U.monthKey,"count"),children:V(U.eventCount)})]},B.listKey("month",U.monthKey)),HP("div",{className:"grid grid-cols-7 gap-px text-[0.6rem]","data-testid":B.header.year.month(U.monthKey,"mini"),children:[_.map((R)=>o0("div",{className:"text-muted-foreground h-3 text-center",children:R.label},B.listKey("header",U.monthKey,R.id))),W.map((R)=>{let S=B.header.year.day(U.date.format("YYYY-MM"),R.dayKey),w=R.eventCount>0,k=Math.min(R.eventCount,3),h=j9.slice(0,k);return HP("button",{className:M(R),"data-testid":S,onClick:(j)=>K(R.date,"day",j),title:F(R.eventCount),type:"button",children:[o0("span",{className:"text-center leading-none",children:R.date.date()}),w&&o0("div",{className:A("absolute bottom-0 flex w-full justify-center space-x-px",R.isToday&&"bottom-px"),children:h.map((j)=>o0("span",{className:N(j,R.isToday)},j))})]},R.dayKey)})]})]},U.monthKey)})}),o0(k0,{className:"z-30"})]})};import{useCallback as n2,useMemo as v9}from"react";import{jsx as y9}from"react/jsx-runtime";var b1=({children:P,events:$=[],firstDayOfWeek:Z=0,initialView:X="month",initialDate:J,renderEvent:Y,onEventClick:Q,onCellClick:q,onViewChange:_,onEventAdd:z,onEventUpdate:G,onEventDelete:K,onDateChange:V,locale:M,timezone:N,disableCellClick:f,disableEventClick:F,disableDragAndDrop:U,dayMaxEvents:L,eventSpacing:W=h0,eventHeight:I=F0,stickyViewHeader:R=!0,viewHeaderClassName:S="",headerComponent:w,headerClassName:k,businessHours:h,renderEventForm:j,translations:c,translator:e,timeFormat:E="12-hour",classesOverride:m,renderCurrentTimeIndicator:i,renderHour:_0,hideNonBusinessHours:G0=!1,hideExportButton:W0=!1,hiddenDays:S0,slotDuration:J0=60,scrollTime:L0})=>{let d=xP({events:$,firstDayOfWeek:Z,initialView:X,initialDate:J,businessHours:h,onEventAdd:z,onEventUpdate:G,onEventDelete:K,onDateChange:V,onViewChange:_,locale:M,timezone:N,translations:c,translator:e}),p0=n2((X0)=>{d.setSelectedEvent(X0),d.setIsEventFormOpen(!0)},[d]),T0=n2((X0)=>{if(F)return;if(Q)Q(X0);else p0(X0)},[F,Q,p0]),H0=n2((X0)=>{if(f)return;if(q)q(X0);else d.openEventForm(X0)},[q,f,d]),y=v9(()=>({...d,renderEvent:Y,onEventClick:T0,onCellClick:H0,locale:M,timezone:N,disableCellClick:f,disableEventClick:F,disableDragAndDrop:U,dayMaxEvents:L,eventSpacing:W,eventHeight:I,stickyViewHeader:R,viewHeaderClassName:S,headerComponent:w,headerClassName:k,businessHours:h,renderEventForm:j,timeFormat:E,classesOverride:m,renderCurrentTimeIndicator:i,renderHour:_0,hideNonBusinessHours:G0,hideExportButton:W0,hiddenDays:S0,slotDuration:J0,scrollTime:L0}),[d,Y,T0,H0,M,N,f,F,U,L,W,I,R,S,w,k,h,j,E,m,i,_0,G0,W0,S0,J0,L0]);return y9(hP.Provider,{value:y,children:P})};import{jsx as V0,jsxs as l9}from"react/jsx-runtime";var c9=()=>{let{view:P,dayMaxEvents:$}=O();return l9("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-calendar",children:[V0(RP,{className:"p-1 shrink-0"}),V0(yP,{children:V0(D,{className:"w-full min-h-0 flex-1",direction:"horizontal",transitionKey:P,children:V0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:V0(R1,{dayMaxEvents:$},"month"),week:V0(T1,{},"week"),day:V0(M1,{},"day"),year:V0(H1,{},"year")}[P]})})}),V0(tP,{})]})},i9=({events:P,firstDayOfWeek:$="sunday",initialView:Z="month",initialDate:X,dayMaxEvents:J=ZP,eventSpacing:Y=h0,eventHeight:Q=F0,stickyViewHeader:q=!0,viewHeaderClassName:_="",timeFormat:z="12-hour",hideNonBusinessHours:G=!1,hiddenDays:K,...V})=>{return V0(b1,{dayMaxEvents:J,eventHeight:Q,eventSpacing:Y,events:mP(P),firstDayOfWeek:E0[$],hiddenDays:kP(K),hideNonBusinessHours:G,initialDate:XP(X),initialView:Z,stickyViewHeader:q,timeFormat:z,viewHeaderClassName:_,...V,children:V0(c9,{})})};import{jsx as u9}from"react/jsx-runtime";var OP=({days:P,gridType:$="day",children:Z,classes:X})=>{let{resources:J}=O(),Y=P.map((q)=>{let _=Array.isArray(q),z=_?q[0]:q;return{id:z?B.col.day(z):"day-col-unknown",day:_?void 0:q,days:_?q:void 0,className:X?.cell,gridType:$}}),Q=J.map((q)=>({id:q.id,title:q.title,resource:q,columns:Y}));return u9(Y2,{classes:X,dayNumberHeight:0,gridType:$,rows:Q,children:Z})};import{jsx as a2}from"react/jsx-runtime";var U2=({hours:P,view:$,delayStep:Z})=>a2("div",{className:"flex h-12 border-b",children:P.map((X,J)=>{let Y=X.isSame(T(),"hour"),Q=X.format("HH"),q=B.header.week.hour(X,J);return a2(D,{className:A("min-w-20 flex-1 border-r last:border-r-0 flex items-center justify-center text-xs shrink-0",Y&&"bg-blue-50 text-blue-600 font-medium"),"data-hour":Q,"data-testid":B.header.resource.timeLabel($,Q),delay:J*Z,transitionKey:B.listKey(q,"motion"),children:a2(I0,{date:X})},B.listKey(q,"animated"))})});import{jsx as z2,jsxs as o9}from"react/jsx-runtime";var w1=()=>{let{currentDate:P,t:$,businessHours:Z,hideNonBusinessHours:X,resources:J}=O(),Y=z0({referenceDate:P,businessHours:Z,hideNonBusinessHours:X,allDates:[P],resourceBusinessHours:J.map((Q)=>Q.businessHours).filter(Boolean)});return o9(OP,{classes:{header:"min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:Y,gridType:"hour",children:[z2("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:z2("div",{className:"text-sm truncate px-1 min-w-0",children:$("resources")})}),z2("div",{className:"flex-1 flex flex-col",children:z2(U2,{delayStep:0.05,hours:Y,view:"day"})})]})};import{jsx as s0,jsxs as k1}from"react/jsx-runtime";var m1=()=>{let{currentDate:P,resources:$,businessHours:Z,hideNonBusinessHours:X,slotDuration:J}=O(),Y=z0({referenceDate:P,businessHours:Z,hideNonBusinessHours:X,allDates:[P],resourceBusinessHours:$.map((_)=>_.businessHours).filter(Boolean)}),Q={id:B.col.time,day:void 0,days:Y,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20 border-r-0",gridType:"hour",noEvents:!0,renderCell:(_)=>s0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:s0(I0,{date:_})})},q=$.map((_)=>({id:B.col.day(P,_.id),resourceId:_.id,resource:_,days:Y,day:P,gridType:"hour"}));return s0(R0,{allDayRow:k1("div",{className:"flex w-full",children:[s0(VP,{}),$.map((_)=>s0(u0,{classes:{cell:"min-w-20 border-r!"},days:[P],resource:_,showSpacer:!1},B.allDayRow(_.id)))]}),classes:{body:"w-full",header:"w-full"},columns:[Q,...q],"data-testid":"resource-day",gridType:"hour",slotDurationMinutes:J,children:k1("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[s0("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),$.map((_)=>s0(l0,{className:"min-w-20 flex-1",resource:_},B.listKey("resource-cell",_.id)))]})})};import{jsx as g1}from"react/jsx-runtime";var C1=()=>{let{orientation:P}=O();if(P==="vertical")return g1(m1,{});return g1(w1,{})};import{useMemo as d9}from"react";import{jsx as _2,jsxs as h1}from"react/jsx-runtime";var E1=()=>{let{currentDate:P,t:$}=O(),Z=d9(()=>{return K5(P)},[P]);return h1(OP,{days:Z,children:[_2("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:_2("div",{className:"text-sm truncate px-1 min-w-0",children:$("resources")})}),Z.map((X,J)=>{let Y=`resource-month-header-${X.toISOString()}`;return h1(D,{className:"w-20 border-b border-r shrink-0 flex items-center justify-center flex-col",delay:J*0.05,transitionKey:B.listKey(Y,"motion"),children:[_2("div",{className:"text-xs font-medium",children:X.format("D")}),_2("div",{className:"text-xs text-muted-foreground",children:X.format("ddd")})]},B.listKey(Y,"animated"))})]})};import{jsx as bP,jsxs as D1}from"react/jsx-runtime";var j1=()=>{let{currentDate:P,resources:$}=O(),Z=P.startOf("month"),X=Array.from({length:P.daysInMonth()},(Q,q)=>Z.add(q,"day")),J={id:B.col.date,days:X,day:void 0,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20 border-r-0",gridType:"day",noEvents:!0,renderCell:(Q)=>D1("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:[bP("span",{children:Q.format("D")}),bP("span",{children:Q.format("ddd")})]})},Y=$.map((Q)=>({id:B.col.resource("month",Q.id),day:void 0,resourceId:Q.id,days:X,gridType:"day"}));return bP(R0,{classes:{header:"w-full",body:"w-full"},columns:[J,...Y],"data-testid":"resource-month-vertical-grid",children:D1("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[bP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),$.map((Q)=>bP(l0,{className:"min-w-20 flex-1",resource:Q},B.listKey("resource-cell",Q.id)))]})})};import{jsx as x1}from"react/jsx-runtime";var v1=()=>{let{orientation:P}=O();if(P==="vertical")return x1(j1,{});return x1(E1,{})};import{useMemo as t2}from"react";function d0(){let{currentDate:P,firstDayOfWeek:$,resources:Z,weekViewGranularity:X,businessHours:J,hideNonBusinessHours:Y,hiddenDays:Q}=O(),q=X==="hourly",_=t2(()=>r(P,$),[P,$]),z=t2(()=>Q?_.filter((K)=>!Q.has(K.day())):_,[_,Q]),G=t2(()=>Z.flatMap((K)=>K.businessHours?[K.businessHours]:[]),[Z]);return{isHourly:q,resources:Z,weekDays:_,visibleDays:z,currentDate:P,businessHours:J,hideNonBusinessHours:Y,resourceBusinessHours:G}}import{jsx as K2,jsxs as r9}from"react/jsx-runtime";var y1=({days:P})=>{let{weekViewGranularity:$}=O(),Z=$==="hourly";return K2("div",{className:"flex h-12",children:P.map((X,J)=>{let Y=u(X),Q=B.header.week.day(X);return K2(D,{className:A("shrink-0 border-r last:border-r-0 border-b flex-1 flex items-center text-center font-medium min-w-20",Y&&"bg-primary/10 font-bold"),"data-testid":B.header.resource.weekDay,delay:J*0.05,transitionKey:B.listKey(Q,"motion"),children:r9("div",{className:A(Z?"sticky left-1/2":"w-full text-center"),children:[K2("div",{className:"text-sm truncate w-full",children:X.format("ddd")}),K2("div",{className:"text-xs text-muted-foreground",children:X.format("D")})]})},B.listKey(Q,"animated"))})})};import{useMemo as n9}from"react";function c1(){let{isHourly:P,weekDays:$,businessHours:Z,hideNonBusinessHours:X,resourceBusinessHours:J}=d0();return{weekHours:n9(()=>{if(!P)return[];return $.map((Q)=>z0({referenceDate:Q,businessHours:Z,hideNonBusinessHours:X,resourceBusinessHours:J}))},[P,$,Z,X,J])}}import{jsx as G2,jsxs as i1}from"react/jsx-runtime";var l1=()=>{let{t:P}=O(),{isHourly:$,weekDays:Z}=d0(),{weekHours:X}=c1();return i1(OP,{classes:{header:A($?"h-24":"h-12","min-w-full"),body:"min-w-full",cell:"min-w-20 flex-1"},days:$?X:Z,gridType:$?"hour":"day",children:[G2("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:G2("div",{className:"text-sm truncate px-1 min-w-0",children:P("resources")})}),i1("div",{className:"flex-1 flex flex-col",children:[G2(y1,{days:Z}),$&&G2(U2,{delayStep:0.005,hours:X.flat(),view:"week"})]})]})};import{useMemo as a1}from"react";import{jsx as L2,jsxs as u1}from"react/jsx-runtime";var o1=({columns:P})=>{let{currentDate:$}=O();return u1("div",{className:"flex h-12",children:[L2("div",{className:"shrink-0 w-16 border-r border-b z-20 bg-background sticky left-0",children:L2("span",{className:"px-2 h-full w-full flex justify-center items-start font-medium",children:$.week()})}),P.map((Z,X)=>{let J=Z.day;if(!J)return null;let Y=u(J),Q=B.header.week.hour(J,Z.resourceId??"");return u1(D,{className:A("min-w-20 flex-1 border-r last:border-r-0 border-b flex flex-col items-center justify-center text-xs shrink-0 bg-background",Y&&"bg-primary/10 font-bold"),"data-testid":B.header.resource.timeLabel("week",J.format("HH")),delay:X*0.05,transitionKey:B.listKey(Q,"motion"),children:[L2("div",{className:"text-sm truncate w-full text-center",children:J.format("ddd")}),L2("div",{className:"text-xs text-muted-foreground",children:J.format("D")})]},B.listKey(Q,"animated"))})]})};import{jsx as wP,jsxs as d1}from"react/jsx-runtime";var r1=({resources:P})=>{let{weekViewGranularity:$,t:Z,currentDate:X}=O(),J=$==="hourly";return d1("div",{className:"flex h-12",children:[wP("div",{className:"shrink-0 w-16 border-r z-20 bg-background sticky left-0",children:d1("span",{className:A("px-2 h-full w-full flex flex-col justify-center text-xs text-muted-foreground text-center min-w-0",J?"justify-end":"justify-center border-b"),children:[wP("span",{className:"truncate w-full",children:Z("week")}),!J&&wP("span",{className:"font-medium text-foreground truncate w-full",children:X.week()})]})}),P.map((Y)=>{return wP(l0,{className:"min-w-20 flex-1 border-b",resource:Y,children:wP("div",{className:A("sticky text-sm font-medium truncate",J?"left-1/4":"left-1"),children:Y.title})},B.listKey("resource-cell",Y.id))})]})};import{useCallback as a9,useMemo as A2}from"react";function n1(){let{isHourly:P,resources:$,weekDays:Z,visibleDays:X,currentDate:J,businessHours:Y,hideNonBusinessHours:Q,resourceBusinessHours:q}=d0(),_=a9((M)=>{return z0({referenceDate:M,businessHours:Y,hideNonBusinessHours:Q,allDates:Z,resourceBusinessHours:q})},[Y,Q,Z,q]),z=A2(()=>_(J),[J,_]),G=A2(()=>$.flatMap((M)=>X.map((N)=>({id:B.col.day(N,M.id),className:"min-w-20 flex-1",resourceId:M.id,resource:M,day:N,days:_(N),gridType:"hour"}))),[$,X,_]),K=A2(()=>$.map((M)=>({id:B.col.resource("week",M.id),className:"min-w-20 flex-1",day:void 0,resourceId:M.id,resource:M,days:Z,gridType:"day"})),[$,Z]),V=A2(()=>{if(P)return G;return K},[P,G,K]);return{hours:z,columns:V}}import{jsx as C0,jsxs as s2,Fragment as t9}from"react/jsx-runtime";var t1=()=>{let{isHourly:P,resources:$,weekDays:Z,visibleDays:X}=d0(),{hours:J,columns:Y}=n1(),{slotDuration:Q}=O(),q=a1(()=>({id:P?B.col.time:B.col.date,days:P?J:Z,day:void 0,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20 border-r-0",gridType:P?"hour":"day",noEvents:!0,renderCell:(z)=>C0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:P?C0(I0,{date:z}):s2(t9,{children:[C0("span",{children:z.format("ddd")}),C0("span",{children:z.format("D")})]})})}),[J,P,Z]),_=a1(()=>{if(!P)return;return s2("div",{className:"flex w-full",children:[C0(VP,{}),$.map((z)=>C0(u0,{classes:{cell:"min-w-20 flex-1 border-r!"},days:X,resource:z,showSpacer:!1},B.allDayRow(z.id)))]})},[P,$,X]);return C0(R0,{allDayRow:_,classes:{header:P?"h-24":"h-12"},columns:[q,...Y],"data-testid":"resource-week",gridType:P?"hour":"day",slotDurationMinutes:Q,children:s2("div",{className:"flex-1 flex flex-col",children:[C0(r1,{resources:$,visibleDays:X}),P&&C0(o1,{columns:Y})]})})};import{jsx as s1}from"react/jsx-runtime";var e1=()=>{let{orientation:P}=O();if(P==="vertical")return s1(t1,{});return s1(l1,{})};import{jsx as r0,jsxs as s9}from"react/jsx-runtime";var P4=()=>{let{view:P}=O();return s9("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-resource-calendar",children:[r0(RP,{className:"p-1"}),r0(yP,{children:r0(D,{className:"w-full h-[calc(100%-3.5rem)] @container/calendar-body",direction:"horizontal",transitionKey:P,children:r0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:r0(v1,{},"month"),week:r0(e1,{},"week"),day:r0(C1,{},"day")}[P]})})}),r0(tP,{})]})};import{jsx as $4}from"react/jsx-runtime";var e9=({events:P=[],resources:$=[],firstDayOfWeek:Z="sunday",initialView:X="month",initialDate:J,disableDragAndDrop:Y=!1,dayMaxEvents:Q=ZP,timeFormat:q="12-hour",eventSpacing:_=h0,eventHeight:z=F0,hiddenDays:G,...K})=>{return $4(N5,{dayMaxEvents:Q,disableDragAndDrop:Y,eventHeight:z,eventSpacing:_,events:mP(P),firstDayOfWeek:E0[Z],hiddenDays:kP(G),initialDate:XP(J),initialView:X,resources:$,timeFormat:q,...K,children:$4(P4,{})})};export{m4 as useIlamyCalendarContext,UP as isRecurringEvent,W2 as generateRecurringEvents,F2 as defaultTranslations,gU as RRule,e9 as IlamyResourceCalendar,i9 as IlamyCalendar};
5
5
 
6
- //# debugId=BE32D0BCC7C947C964756E2164756E21
7
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2luZGV4LnRzIiwgInNyYy9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbi50c3giLCAic3JjL2xpYi91dGlscy9pbmRleC50cyIsICJzcmMvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnLnRzIiwgInNyYy9saWIvY29uc3RhbnRzLnRzIiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2J1dHRvbi50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvZGlhbG9nLnRzeCIsICJzcmMvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQudHMiLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dC50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9jb250ZXh0LnRzIiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICJzcmMvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZS50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXIudHMiLCAic3JjL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdC50cyIsICJzcmMvbGliL3V0aWxzL2RhdGUtdXRpbHMudHMiLCAic3JjL2xpYi91dGlscy9ldmVudC11dGlscy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZy50c3giLCAic3JjL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9kbmQtdXRpbHMudHMiLCAic3JjL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9ldmVudC1kcmFnLW92ZXJsYXkudHN4IiwgInNyYy9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvY2hlY2tib3gudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYWxlbmRhci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvcG9wb3Zlci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvaW5wdXQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2xhYmVsLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYS50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvdGltZS1waWNrZXIudHN4IiwgInNyYy9ob29rcy91c2UtYXV0b2NvbXBsZXRlLXRpbWVwaWNrZXIudHMiLCAic3JjL2xpYi91dGlscy9rZXlzLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3Vycy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvZXZlbnQtZm9ybS11dGlscy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdG9yL3JlY3VycmVuY2UtZWRpdG9yLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYXJkLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zZWxlY3QudHN4IiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucy50cyIsICJzcmMvaG9va3MvdXNlLWVmZmVjdGl2ZS1idXNpbmVzcy1ob3Vycy50cyIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nLnRzeCIsICJzcmMvY29tcG9uZW50cy9oZWFkZXIvYmFzZS1oZWFkZXIudHN4IiwgInNyYy9saWIvdXRpbHMvZXhwb3J0LWljYWwudHMiLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3RpdGxlLWNvbnRlbnQudHN4IiwgInNyYy9jb21wb25lbnRzL2hlYWRlci92aWV3LWNvbnRyb2xzLnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdy50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1yb3cudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWRXZWVrRXZlbnRzLnRzIiwgInNyYy9saWIvdXRpbHMvcG9zaXRpb24td2Vlay1ldmVudHMudHMiLCAic3JjL2NvbXBvbmVudHMvZ3JpZC1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9kYXktbnVtYmVyLnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZXZlbnRzLWRpYWxvZy50c3giLCAic3JjL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudC50c3giLCAic3JjL2NvbXBvbmVudHMvZHJvcHBhYmxlLWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL3Jlc291cmNlLWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQtZXZlbnRzLWxheWVyLnRzeCIsICJzcmMvY29tcG9uZW50cy9jdXJyZW50LXRpbWUtaW5kaWNhdG9yLnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL2hvdXItbGFiZWwvaG91ci1sYWJlbC50c3giLCAic3JjL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkLnRzeCIsICJzcmMvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3VzZS1zY3JvbGwtdG8tdGltZS50cyIsICJzcmMvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQtY29sLnRzeCIsICJzcmMvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQtZXZlbnRzLWxheWVyLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvaG9va3MvdXNlUHJvY2Vzc2VkRGF5RXZlbnRzLnRzIiwgInNyYy9saWIvdXRpbHMvcG9zaXRpb24tZGF5LWV2ZW50cy50cyIsICJzcmMvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQtaGVhZGVyLWNvbnRhaW5lci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMudHMiLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvZGF5LXZpZXcudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvbW9udGgtdmlldy50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1oZWFkZXItY29udGFpbmVyLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L21vbnRoLWhlYWRlci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstdmlldy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMveWVhci12aWV3L3llYXItdmlldy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvcHJvdmlkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LWNhbGVuZGFyLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy90aW1lLWhlYWRlci1yb3cudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L3Jlc291cmNlLWRheS1ob3Jpem9udGFsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9yZXNvdXJjZS1kYXktdmVydGljYWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2luZGV4LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L3Jlc291cmNlLW1vbnRoLWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvcmVzb3VyY2UtbW9udGgtdmVydGljYWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvaW5kZXgudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy91c2UtcmVzb3VyY2Utd2Vlay12aWV3LWRhdGEudHMiLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L2hvcml6b250YWwvcmVzb3VyY2Utd2Vlay1ob3Jpem9udGFsLWRheS1oZWFkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9ob3Jpem9udGFsL3VzZS1yZXNvdXJjZS13ZWVrLWhvcml6b250YWwtZGF0YS50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvaG9yaXpvbnRhbC9yZXNvdXJjZS13ZWVrLWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy92ZXJ0aWNhbC9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvdmVydGljYWwvcmVzb3VyY2Utd2Vlay12ZXJ0aWNhbC1kYXktaGVhZGVyLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvdmVydGljYWwvcmVzb3VyY2Utd2Vlay12ZXJ0aWNhbC1yZXNvdXJjZS1oZWFkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy92ZXJ0aWNhbC91c2UtcmVzb3VyY2Utd2Vlay12ZXJ0aWNhbC1kYXRhLnRzIiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvcmVzb3VyY2UtY2FsZW5kYXItYm9keS50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIudHN4Il0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIi8vIFJlLWV4cG9ydCBycnVsZS5qcyB0eXBlcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB0eXBlIHsgV2Vla2RheSB9IGZyb20gJ3JydWxlJ1xuZXhwb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmV4cG9ydCB0eXBlIHsgRXZlbnRGb3JtUHJvcHMgfSBmcm9tICcuL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtJ1xuZXhwb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50LCBXZWVrRGF5cyB9IGZyb20gJy4vY29tcG9uZW50cy90eXBlcydcbmV4cG9ydCB7IElsYW15Q2FsZW5kYXIgfSBmcm9tICcuL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktY2FsZW5kYXInXG5leHBvcnQgdHlwZSB7XG5cdENlbGxDbGlja0luZm8sXG5cdElsYW15Q2FsZW5kYXJQcm9wcyxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcblx0U2xvdER1cmF0aW9uLFxufSBmcm9tICcuL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuLy8gRXhwb3J0IHR5cGVzXG5leHBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJy4vZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbi8vIFJSVUxFLWJhc2VkIHJlY3VycmVuY2Ugc3lzdGVtXG5leHBvcnQge1xuXHRnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyxcblx0aXNSZWN1cnJpbmdFdmVudCxcbn0gZnJvbSAnLi9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmV4cG9ydCB0eXBlIHsgSWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHMgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXInXG5leHBvcnQgeyBJbGFteVJlc291cmNlQ2FsZW5kYXIgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXInXG4vLyBSZXNvdXJjZSBjYWxlbmRhciB0eXBlc1xuZXhwb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJy4vZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG4vLyBQdWJsaWMgY2FsZW5kYXIgY29udGV4dCBob29rc1xuZXhwb3J0IHtcblx0dHlwZSBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybixcblx0dXNlSWxhbXlDYWxlbmRhckNvbnRleHQsXG59IGZyb20gJy4vaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5leHBvcnQgeyBkZWZhdWx0VHJhbnNsYXRpb25zIH0gZnJvbSAnLi9saWIvdHJhbnNsYXRpb25zL2RlZmF1bHQnXG4vLyBUcmFuc2xhdGlvbiBzeXN0ZW1cbmV4cG9ydCB0eXBlIHtcblx0VHJhbnNsYXRpb25LZXksXG5cdFRyYW5zbGF0aW9ucyxcblx0VHJhbnNsYXRvckZ1bmN0aW9uLFxufSBmcm9tICcuL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5leHBvcnQgdHlwZSB7IENhbGVuZGFyVmlldywgVGltZUZvcm1hdCB9IGZyb20gJy4vdHlwZXMnXG4iLAogICAgImltcG9ydCB7XG5cdEFuaW1hdGVQcmVzZW5jZSxcblx0dHlwZSBIVE1MTW90aW9uUHJvcHMsXG5cdG1vdGlvbixcblx0dHlwZSBWYXJpYW50cyxcbn0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBBbmltYXRlZFNlY3Rpb25Qcm9wc1xuXHRleHRlbmRzIE9taXQ8SFRNTE1vdGlvblByb3BzPCdkaXYnPiwgJ2NoaWxkcmVuJyB8ICdsYXlvdXQnIHwgJ2xheW91dElkJz4ge1xuXHRjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG5cdHRyYW5zaXRpb25LZXk6IHN0cmluZ1xuXHRkZWxheT86IG51bWJlclxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0ZGlyZWN0aW9uPzogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJ1xuXHRsYXlvdXQ/OiBib29sZWFuIHwgJ3Bvc2l0aW9uJyB8ICdzaXplJyB8ICdwcmVzZXJ2ZS1hc3BlY3QnXG5cdGxheW91dElkPzogc3RyaW5nXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcbn1cblxuY29uc3QgdmFyaWFudHM6IFZhcmlhbnRzID0ge1xuXHRoaWRkZW46ICh7IGRpcmVjdGlvbiB9OiB7IGRpcmVjdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB9KSA9PiAoe1xuXHRcdG9wYWNpdHk6IDAsXG5cdFx0eDogZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAxMCA6IDAsXG5cdFx0eTogZGlyZWN0aW9uID09PSAndmVydGljYWwnID8gLTEwIDogMCxcblx0fSksXG5cdHZpc2libGU6ICh7IGRlbGF5IH06IHsgZGVsYXk6IG51bWJlciB9KSA9PiAoe1xuXHRcdG9wYWNpdHk6IDEsXG5cdFx0eDogMCxcblx0XHR5OiAwLFxuXHRcdHRyYW5zaXRpb246IHsgZHVyYXRpb246IDAuMiwgZWFzZTogWzAuNCwgMCwgMC4yLCAxXSwgZGVsYXkgfSxcblx0fSksXG5cdGV4aXQ6ICh7IGRpcmVjdGlvbiB9OiB7IGRpcmVjdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB9KSA9PiAoe1xuXHRcdG9wYWNpdHk6IDAsXG5cdFx0eDogZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAtMTAgOiAwLFxuXHRcdHk6IGRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/IC0xMCA6IDAsXG5cdFx0dHJhbnNpdGlvbjogeyBkdXJhdGlvbjogMC4xNSB9LFxuXHR9KSxcbn1cblxuZXhwb3J0IGNvbnN0IEFuaW1hdGVkU2VjdGlvbjogUmVhY3QuRkM8QW5pbWF0ZWRTZWN0aW9uUHJvcHM+ID0gKHtcblx0Y2hpbGRyZW4sXG5cdHRyYW5zaXRpb25LZXksXG5cdGRlbGF5ID0gMCxcblx0Y2xhc3NOYW1lLFxuXHRkaXJlY3Rpb24gPSAndmVydGljYWwnLFxuXHRsYXlvdXQsXG5cdGxheW91dElkLFxuXHQnZGF0YS10ZXN0aWQnOiB0ZXN0SWQsXG5cdHJlZixcblx0Li4ucHJvcHNcbn0pID0+IChcblx0PEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuXHRcdDxtb3Rpb24uZGl2XG5cdFx0XHRhbmltYXRlPVwidmlzaWJsZVwiXG5cdFx0XHRjbGFzc05hbWU9e2NuKCdpbmxpbmUtYmxvY2sgdy1mdWxsJywgY2xhc3NOYW1lKX1cblx0XHRcdGN1c3RvbT17eyBkZWxheSwgZGlyZWN0aW9uIH19XG5cdFx0XHRkYXRhLXRlc3RpZD17dGVzdElkfVxuXHRcdFx0ZXhpdD1cImV4aXRcIlxuXHRcdFx0aW5pdGlhbD1cImhpZGRlblwiXG5cdFx0XHRrZXk9e3RyYW5zaXRpb25LZXl9XG5cdFx0XHRsYXlvdXQ9e2xheW91dH1cblx0XHRcdGxheW91dElkPXtsYXlvdXRJZH1cblx0XHRcdHJlZj17cmVmfVxuXHRcdFx0dmFyaWFudHM9e3ZhcmlhbnRzfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L21vdGlvbi5kaXY+XG5cdDwvQW5pbWF0ZVByZXNlbmNlPlxuKVxuXG5BbmltYXRlZFNlY3Rpb24uZGlzcGxheU5hbWUgPSAnQW5pbWF0ZWRTZWN0aW9uJ1xuIiwKICAgICJpbXBvcnQgdHlwZSB7IENsYXNzVmFsdWUgfSBmcm9tICdjbHN4J1xuaW1wb3J0IHsgY2xzeCB9IGZyb20gJ2Nsc3gnXG5pbXBvcnQgeyB0d01lcmdlIH0gZnJvbSAndGFpbHdpbmQtbWVyZ2UnXG5pbXBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IFdFRUtfREFZU19OVU1CRVJfTUFQIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuXG5leHBvcnQgZnVuY3Rpb24gY24oLi4uaW5wdXRzOiBDbGFzc1ZhbHVlW10pIHtcblx0cmV0dXJuIHR3TWVyZ2UoY2xzeChpbnB1dHMpKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9wdGlvbmFsIFdlZWtEYXlzW10gbGlzdCBpbnRvIGEgU2V0PG51bWJlcj4gb2YgZGF5IGluZGljZXNcbiAqICgwID0gU3VuZGF5LCAxID0gTW9uZGF5LCAuLi4pLCBvciB1bmRlZmluZWQgaWYgdGhlIGxpc3QgaXMgZW1wdHkuXG4gKi9cbmV4cG9ydCBjb25zdCB0b0hpZGRlbkRheXNTZXQgPSAoXG5cdGhpZGRlbkRheXM/OiBXZWVrRGF5c1tdXG4pOiBTZXQ8bnVtYmVyPiB8IHVuZGVmaW5lZCA9PiB7XG5cdGlmICghaGlkZGVuRGF5cyB8fCBoaWRkZW5EYXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZFxuXHRyZXR1cm4gbmV3IFNldChoaWRkZW5EYXlzLm1hcCgoZGF5KSA9PiBXRUVLX0RBWVNfTlVNQkVSX01BUFtkYXldKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVEYXRlKFxuXHRkYXRlOiBEYXlqcyB8IERhdGUgfCBzdHJpbmcgfCB1bmRlZmluZWRcbik6IERheWpzIHwgdW5kZWZpbmVkIHtcblx0aWYgKGRhdGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB1bmRlZmluZWRcblx0fVxuXHRpZiAoZGF5anMuaXNEYXlqcyhkYXRlKSkge1xuXHRcdHJldHVybiBkYXRlXG5cdH1cblx0Y29uc3QgcGFyc2VkRGF0ZSA9IGRheWpzKGRhdGUpXG5cdHJldHVybiBwYXJzZWREYXRlLmlzVmFsaWQoKSA/IHBhcnNlZERhdGUgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGNvbnN0IG9taXRLZXlzID0gPFQgZXh0ZW5kcyBvYmplY3QsIEsgZXh0ZW5kcyBrZXlvZiBUPihcblx0b2JqOiBULFxuXHRrZXlzOiBLW11cbik6IE9taXQ8VCwgSz4gPT4ge1xuXHRjb25zdCByZXN1bHQgPSB7IC4uLm9iaiB9XG5cdGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcblx0XHRkZWxldGUgcmVzdWx0W2tleV1cblx0fVxuXHRyZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBjYWxlbmRhciBldmVudHMgZnJvbSBwdWJsaWMtZmFjaW5nIGZvcm1hdCB0byBpbnRlcm5hbCBmb3JtYXQuXG4gKiBDb252ZXJ0cyBmbGV4aWJsZSBkYXRlIHR5cGVzIChkYXlqcywgRGF0ZSwgc3RyaW5nKSB0byBzdHJpY3QgZGF5anMgb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0gZXZlbnRzIC0gQXJyYXkgb2YgY2FsZW5kYXIgZXZlbnRzIHdpdGggZmxleGlibGUgZGF0ZSB0eXBlc1xuICogQHJldHVybnMgTm9ybWFsaXplZCBhcnJheSBvZiBjYWxlbmRhciBldmVudHMgd2l0aCBkYXlqcyBkYXRlc1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZWd1bGFyIGNhbGVuZGFyIGV2ZW50c1xuICogY29uc3QgZXZlbnRzID0gbm9ybWFsaXplRXZlbnRzPElsYW15Q2FsZW5kYXJQcm9wRXZlbnQsIENhbGVuZGFyRXZlbnQ+KHByb3BFdmVudHMpXG4gKlxuICogLy8gUmVzb3VyY2UgY2FsZW5kYXIgZXZlbnRzXG4gKiBjb25zdCByZXNvdXJjZUV2ZW50cyA9IG5vcm1hbGl6ZUV2ZW50czxJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wRXZlbnQsIENhbGVuZGFyRXZlbnQ+KHByb3BFdmVudHMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVFdmVudHM8XG5cdFRJbnB1dCBleHRlbmRzIHtcblx0XHRzdGFydDogRGF5anMgfCBEYXRlIHwgc3RyaW5nXG5cdFx0ZW5kOiBEYXlqcyB8IERhdGUgfCBzdHJpbmdcblx0fSxcblx0VE91dHB1dCxcbj4oZXZlbnRzOiBUSW5wdXRbXSB8IHVuZGVmaW5lZCk6IFRPdXRwdXRbXSB7XG5cdGlmICghZXZlbnRzIHx8ICFldmVudHMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIFtdXG5cdH1cblxuXHRyZXR1cm4gZXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRzdGFydDogZGF5anMuaXNEYXlqcyhldmVudC5zdGFydCkgPyBldmVudC5zdGFydCA6IGRheWpzKGV2ZW50LnN0YXJ0KSxcblx0XHRcdGVuZDogZGF5anMuaXNEYXlqcyhldmVudC5lbmQpID8gZXZlbnQuZW5kIDogZGF5anMoZXZlbnQuZW5kKSxcblx0XHR9IGFzIFRPdXRwdXRcblx0fSlcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBPcFVuaXRUeXBlIGFzIERheWpzT3BVbml0VHlwZSwgUGx1Z2luRnVuYyB9IGZyb20gJ2RheWpzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xuaW1wb3J0IGlzQmV0d2VlbiBmcm9tICdkYXlqcy9wbHVnaW4vaXNCZXR3ZWVuLmpzJ1xuaW1wb3J0IGlzU2FtZU9yQWZ0ZXIgZnJvbSAnZGF5anMvcGx1Z2luL2lzU2FtZU9yQWZ0ZXIuanMnXG5pbXBvcnQgaXNTYW1lT3JCZWZvcmUgZnJvbSAnZGF5anMvcGx1Z2luL2lzU2FtZU9yQmVmb3JlLmpzJ1xuaW1wb3J0IGxvY2FsZURhdGEgZnJvbSAnZGF5anMvcGx1Z2luL2xvY2FsZURhdGEuanMnXG5pbXBvcnQgbWluTWF4IGZyb20gJ2RheWpzL3BsdWdpbi9taW5NYXguanMnXG5pbXBvcnQgdGltZXpvbmUgZnJvbSAnZGF5anMvcGx1Z2luL3RpbWV6b25lLmpzJ1xuaW1wb3J0IHV0YyBmcm9tICdkYXlqcy9wbHVnaW4vdXRjLmpzJ1xuaW1wb3J0IHdlZWtkYXkgZnJvbSAnZGF5anMvcGx1Z2luL3dlZWtkYXkuanMnXG5pbXBvcnQgd2Vla09mWWVhciBmcm9tICdkYXlqcy9wbHVnaW4vd2Vla09mWWVhci5qcydcblxuLyoqXG4gKiBQbHVnaW4gdGhhdCBmaXhlcyBhIGRheWpzLXRpbWV6b25lIGJ1ZyB3aGVyZSAuc3RhcnRPZigpIGFuZCAuZW5kT2YoKSBkcm9wXG4gKiB0aW1lem9uZSBpbmZvIHdoZW4gdGhlIHN5c3RlbSdzIGxvY2FsIHRpbWV6b25lIGhhcyBhIERTVCB0cmFuc2l0aW9uIG5lYXJcbiAqIHRoZSB0YXJnZXQgZGF0ZS4gQWZ0ZXIgZWFjaCBzdGFydE9mL2VuZE9mIGNhbGwsIGlmIHRoZSBVVEMgb2Zmc2V0IGhhc1xuICogZHJpZnRlZCBmcm9tIHdoYXQgdGhlIHRpbWV6b25lIGV4cGVjdHMsIHJlLWFwcGx5IHRoZSB0aW1lem9uZSB3aXRoXG4gKiBrZWVwTG9jYWxUaW1lPXRydWUgdG8gcmVzdG9yZSB0aGUgY29ycmVjdCBvZmZzZXQuXG4gKi9cbmludGVyZmFjZSBEYXlqc0ludGVybmFsIGV4dGVuZHMgZGF5anMuRGF5anMge1xuXHQkeDogeyAkdGltZXpvbmU/OiBzdHJpbmcgfVxufVxuXG5sZXQgZGVmYXVsdFRpbWV6b25lOiBzdHJpbmcgfCB1bmRlZmluZWRcblxuY29uc3QgZml4VGltZXpvbmVPZmZzZXQ6IFBsdWdpbkZ1bmMgPSAoX29wdGlvbiwgZGF5anNDbGFzcywgZGF5anNGYWN0b3J5KSA9PiB7XG5cdGNvbnN0IHByb3RvID0gZGF5anNDbGFzcy5wcm90b3R5cGVcblxuXHQvLyBJbnRlcmNlcHQgc2V0RGVmYXVsdCB0byB0cmFjayB0aGUgY29uZmlndXJlZCB0aW1lem9uZVxuXHRjb25zdCBvcmlnaW5hbFNldERlZmF1bHQgPSBkYXlqc0ZhY3RvcnkudHouc2V0RGVmYXVsdFxuXHRkYXlqc0ZhY3RvcnkudHouc2V0RGVmYXVsdCA9ICh0aW1lem9uZT86IHN0cmluZykgPT4ge1xuXHRcdGRlZmF1bHRUaW1lem9uZSA9IHRpbWV6b25lXG5cdFx0cmV0dXJuIG9yaWdpbmFsU2V0RGVmYXVsdCh0aW1lem9uZSlcblx0fVxuXG5cdHR5cGUgU3RhcnRPZkZuID0gKHVuaXQ6IERheWpzT3BVbml0VHlwZSwgX3N0YXJ0T2Y/OiBib29sZWFuKSA9PiBkYXlqcy5EYXlqc1xuXHRjb25zdCBvcmlnaW5hbFN0YXJ0T2YgPSBwcm90by5zdGFydE9mIGFzIFN0YXJ0T2ZGblxuXHRjb25zdCBvcmlnaW5hbEVuZE9mID0gcHJvdG8uZW5kT2ZcblxuXHRmdW5jdGlvbiByZXN0b3JlVGltZXpvbmUoXG5cdFx0aW5zdGFuY2U6IGRheWpzLkRheWpzLFxuXHRcdHJlc3VsdDogZGF5anMuRGF5anNcblx0KTogZGF5anMuRGF5anMge1xuXHRcdGNvbnN0IHR6ID0gKGluc3RhbmNlIGFzIERheWpzSW50ZXJuYWwpLiR4Py4kdGltZXpvbmUgfHwgZGVmYXVsdFRpbWV6b25lXG5cdFx0aWYgKCF0eikgcmV0dXJuIHJlc3VsdFxuXG5cdFx0Y29uc3QgZXhwZWN0ZWRPZmZzZXQgPSBkYXlqc0ZhY3Rvcnlcblx0XHRcdC50eihyZXN1bHQuZm9ybWF0KCdZWVlZLU1NLUREVEhIOm1tOnNzJyksIHR6KVxuXHRcdFx0LnV0Y09mZnNldCgpXG5cdFx0aWYgKHJlc3VsdC51dGNPZmZzZXQoKSAhPT0gZXhwZWN0ZWRPZmZzZXQpIHtcblx0XHRcdHJldHVybiByZXN1bHQudHoodHosIHRydWUpXG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRcblx0fVxuXG5cdC8vIGRheWpzJ3MgZW5kT2YgY2FsbHMgc3RhcnRPZih1bml0LCBmYWxzZSkgaW50ZXJuYWxseSDigJQgdGhlIHNlY29uZCBhcmdcblx0Ly8gKF9zdGFydE9mKSBjb250cm9scyBzdGFydC12cy1lbmQgYmVoYXZpb3IuIFdlIG11c3QgZm9yd2FyZCBpdC5cblx0cHJvdG8uc3RhcnRPZiA9IGZ1bmN0aW9uICh1bml0OiBEYXlqc09wVW5pdFR5cGUsIF9zdGFydE9mPzogYm9vbGVhbikge1xuXHRcdGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsU3RhcnRPZi5jYWxsKHRoaXMsIHVuaXQsIF9zdGFydE9mKVxuXHRcdHJldHVybiByZXN0b3JlVGltZXpvbmUodGhpcywgcmVzdWx0KVxuXHR9XG5cblx0Ly8gZW5kT2YgZGVsZWdhdGVzIHRvIHN0YXJ0T2YodW5pdCwgZmFsc2UpLCBzbyB0aGUgcGF0Y2hlZCBzdGFydE9mIGhhbmRsZXMgaXRcblx0cHJvdG8uZW5kT2YgPSBvcmlnaW5hbEVuZE9mXG59XG5cbi8vIEV4dGVuZCBkYXlqcyB3aXRoIHBsdWdpbnNcbmRheWpzLmV4dGVuZCh3ZWVrZGF5KVxuZGF5anMuZXh0ZW5kKHdlZWtPZlllYXIpXG5kYXlqcy5leHRlbmQoaXNTYW1lT3JBZnRlcilcbmRheWpzLmV4dGVuZChpc1NhbWVPckJlZm9yZSlcbmRheWpzLmV4dGVuZChpc0JldHdlZW4pXG5kYXlqcy5leHRlbmQobWluTWF4KVxuZGF5anMuZXh0ZW5kKHRpbWV6b25lKVxuZGF5anMuZXh0ZW5kKHV0YylcbmRheWpzLmV4dGVuZChsb2NhbGVEYXRhKVxuZGF5anMuZXh0ZW5kKGZpeFRpbWV6b25lT2Zmc2V0KVxuXG4vLyBDdXN0b20gZGF5anMgY29uc3RydWN0b3IgdGhhdCBhdXRvbWF0aWNhbGx5IHVzZXMgLnR6KCkgZm9yIGFsbCBpbnN0YW5jZXMuXG4vLyBUaGlzIGVuc3VyZXMgdGhhdCBkYXlqcygpIGNhbGxzIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlIGhvbm9yIHRoZSBkZWZhdWx0XG4vLyB0aW1lem9uZSBzZXQgdmlhIGRheWpzLnR6LnNldERlZmF1bHQoKS5cbmNvbnN0IHRpbWV6b25lQXdhcmVEYXlqcyA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcblx0cmV0dXJuIChkYXlqcyBhcyB1bmtub3duIGFzIHsgdHo6ICguLi5hOiB1bmtub3duW10pID0+IGRheWpzLkRheWpzIH0pLnR6KFxuXHRcdC4uLmFyZ3Ncblx0KVxufVxuXG4vLyBBdHRhY2ggYWxsIHN0YXRpYyBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIGZyb20gdGhlIG9yaWdpbmFsIGRheWpzIHRvIG91ciB3cmFwcGVyLlxuLy8gVGhpcyBhbGxvd3MgdGhlIHdyYXBwZXIgdG8gYmUgdXNlZCBhcyBhIGRyb3AtaW4gcmVwbGFjZW1lbnQuXG5PYmplY3QuYXNzaWduKHRpbWV6b25lQXdhcmVEYXlqcywgZGF5anMpXG5cbi8vIEV4cG9ydCB0aGUgRGF5anMgdHlwZSBzZXBhcmF0ZWx5IGZvciB1c2UgYXMgYSB0eXBlIGluIG90aGVyIGZpbGVzLlxuLy8gRmlsZXMgc2hvdWxkIHVzZSAnaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tIFwiQC9saWIvY29uZmlncy9kYXlqcy1jb25maWdcIidcbmV4cG9ydCB0eXBlIHsgRGF5anMsIE1hbmlwdWxhdGVUeXBlLCBPcFVuaXRUeXBlIH0gZnJvbSAnZGF5anMnXG5leHBvcnQgZGVmYXVsdCB0aW1lem9uZUF3YXJlRGF5anMgYXMgdHlwZW9mIGRheWpzXG4iLAogICAgImltcG9ydCB0eXBlIHsgV2Vla0RheXMgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5cbmV4cG9ydCBjb25zdCBHQVBfQkVUV0VFTl9FTEVNRU5UUyA9IDEgLy8gcHggKGdhcC0xKVxuZXhwb3J0IGNvbnN0IERBWV9OVU1CRVJfSEVJR0hUID0gMjQgLy8gcHggKGgtNilcbmV4cG9ydCBjb25zdCBFVkVOVF9CQVJfSEVJR0hUID0gMjQgLy8gcHggKGgtWzI0cHhdKVxuZXhwb3J0IGNvbnN0IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQgPSA0IC8vIERlZmF1bHQgbWF4IGV2ZW50cyBwZXIgZGF5XG5leHBvcnQgY29uc3QgRElTQUJMRURfQ0VMTF9DTEFTU05BTUUgPVxuXHQnYmctc2Vjb25kYXJ5IHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwb2ludGVyLWV2ZW50cy1ub25lJ1xuXG5leHBvcnQgY29uc3QgV0VFS19EQVlTX05VTUJFUl9NQVA6IFJlY29yZDxXZWVrRGF5cywgbnVtYmVyPiA9IHtcblx0c3VuZGF5OiAwLFxuXHRtb25kYXk6IDEsXG5cdHR1ZXNkYXk6IDIsXG5cdHdlZG5lc2RheTogMyxcblx0dGh1cnNkYXk6IDQsXG5cdGZyaWRheTogNSxcblx0c2F0dXJkYXk6IDYsXG59XG5cbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX1RPX1dFRUtfREFZUzogUmVjb3JkPG51bWJlciwgV2Vla0RheXM+ID0ge1xuXHQwOiAnc3VuZGF5Jyxcblx0MTogJ21vbmRheScsXG5cdDI6ICd0dWVzZGF5Jyxcblx0MzogJ3dlZG5lc2RheScsXG5cdDQ6ICd0aHVyc2RheScsXG5cdDU6ICdmcmlkYXknLFxuXHQ2OiAnc2F0dXJkYXknLFxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7XG5cdERyYWdDYW5jZWxFdmVudCxcblx0RHJhZ0VuZEV2ZW50LFxuXHREcmFnU3RhcnRFdmVudCxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7XG5cdERuZENvbnRleHQsXG5cdE1vdXNlU2Vuc29yLFxuXHRwb2ludGVyV2l0aGluLFxuXHRUb3VjaFNlbnNvcixcblx0dXNlU2Vuc29yLFxuXHR1c2VTZW5zb3JzLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdERpYWxvZyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyBpc1JlY3VycmluZ0V2ZW50IH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGdldFVwZGF0ZWRFdmVudCB9IGZyb20gJy4vZG5kLXV0aWxzJ1xuaW1wb3J0IHsgRXZlbnREcmFnT3ZlcmxheSB9IGZyb20gJy4vZXZlbnQtZHJhZy1vdmVybGF5J1xuXG5pbnRlcmZhY2UgQ2FsZW5kYXJEbmRDb250ZXh0UHJvcHMge1xuXHRjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG59XG5cbmNvbnN0IENMT1NFRF9ESUFMT0cgPSB7XG5cdGlzT3BlbjogZmFsc2UsXG5cdGV2ZW50OiBudWxsLFxuXHR1cGRhdGVzOiBudWxsLFxufSBhcyBjb25zdFxuXG5leHBvcnQgZnVuY3Rpb24gQ2FsZW5kYXJEbmRDb250ZXh0KHsgY2hpbGRyZW4gfTogQ2FsZW5kYXJEbmRDb250ZXh0UHJvcHMpIHtcblx0Y29uc3QgYWN0aXZlRXZlbnRSZWYgPSB1c2VSZWY8Q2FsZW5kYXJFdmVudD4obnVsbClcblx0Y29uc3QgZHJhZ092ZXJsYXlSZWYgPSB1c2VSZWY8e1xuXHRcdHNldEFjdGl2ZUV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsKSA9PiB2b2lkXG5cdH0+KG51bGwpXG5cblx0Y29uc3QgeyB1cGRhdGVFdmVudCwgdXBkYXRlUmVjdXJyaW5nRXZlbnQsIGRpc2FibGVEcmFnQW5kRHJvcCB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHRcdHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuXHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQudXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3A6IGNvbnRleHQuZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdH0pKVxuXG5cdC8vIFN0YXRlIGZvciByZWN1cnJpbmcgZXZlbnQgZGlhbG9nXG5cdGNvbnN0IFtyZWN1cnJpbmdEaWFsb2csIHNldFJlY3VycmluZ0RpYWxvZ10gPSB1c2VTdGF0ZTx7XG5cdFx0aXNPcGVuOiBib29sZWFuXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PiB8IG51bGxcblx0fT4oe1xuXHRcdGlzT3BlbjogZmFsc2UsXG5cdFx0ZXZlbnQ6IG51bGwsXG5cdFx0dXBkYXRlczogbnVsbCxcblx0fSlcblxuXHQvLyBDb25maWd1cmUgc2Vuc29ycyB3aXRoIHJlZHVjZWQgYWN0aXZhdGlvbiBjb25zdHJhaW50cyBmb3IgZWFzaWVyIGRyYWdnaW5nXG5cdGNvbnN0IG1vdXNlU2Vuc29yID0gdXNlU2Vuc29yKE1vdXNlU2Vuc29yLCB7XG5cdFx0Ly8gUmVxdWlyZSBtaW5pbWFsIG1vdmVtZW50IGJlZm9yZSBhY3RpdmF0aW5nXG5cdFx0YWN0aXZhdGlvbkNvbnN0cmFpbnQ6IHtcblx0XHRcdGRpc3RhbmNlOiAyLFxuXHRcdH0sXG5cdH0pXG5cblx0Y29uc3QgdG91Y2hTZW5zb3IgPSB1c2VTZW5zb3IoVG91Y2hTZW5zb3IsIHtcblx0XHQvLyBSZWR1Y2UgZGVsYXkgZm9yIHRvdWNoIGRldmljZXNcblx0XHRhY3RpdmF0aW9uQ29uc3RyYWludDoge1xuXHRcdFx0ZGVsYXk6IDEwMCxcblx0XHRcdHRvbGVyYW5jZTogNSxcblx0XHR9LFxuXHR9KVxuXG5cdGNvbnN0IHNlbnNvcnMgPSB1c2VTZW5zb3JzKG1vdXNlU2Vuc29yLCB0b3VjaFNlbnNvcilcblxuXHQvLyBIZWxwZXIgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgYWN0dWFsIGV2ZW50IHVwZGF0ZVxuXHRjb25zdCBwZXJmb3JtRXZlbnRVcGRhdGUgPSAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHQpID0+IHtcblx0XHRpZiAoIWV2ZW50Py5pZCB8fCAhdXBkYXRlcyB8fCBPYmplY3Qua2V5cyh1cGRhdGVzKS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGlmIChpc1JlY3VycmluZ0V2ZW50KGV2ZW50KSkge1xuXHRcdFx0Ly8gUmVjdXJyaW5nIGV2ZW50czogcHJvbXB0IHRoZSB1c2VyIHZpYSBkaWFsb2cgYmVmb3JlIGFwcGx5aW5nLlxuXHRcdFx0c2V0UmVjdXJyaW5nRGlhbG9nKHsgaXNPcGVuOiB0cnVlLCBldmVudCwgdXBkYXRlcyB9KVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR1cGRhdGVFdmVudChldmVudC5pZCwgdXBkYXRlcylcblx0XHR9XG5cdH1cblxuXHQvLyBIYW5kbGUgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZyBjb25maXJtYXRpb25cblx0Y29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDb25maXJtID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0aWYgKCFyZWN1cnJpbmdEaWFsb2cuZXZlbnQgfHwgIXJlY3VycmluZ0RpYWxvZy51cGRhdGVzKSB7XG5cdFx0XHRzZXRSZWN1cnJpbmdEaWFsb2coQ0xPU0VEX0RJQUxPRylcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudChyZWN1cnJpbmdEaWFsb2cuZXZlbnQsIHJlY3VycmluZ0RpYWxvZy51cGRhdGVzLCB7XG5cdFx0XHRcdHNjb3BlLFxuXHRcdFx0XHRldmVudERhdGU6IHJlY3VycmluZ0RpYWxvZy5ldmVudC5zdGFydCxcblx0XHRcdH0pXG5cdFx0fSBjYXRjaCB7XG5cdFx0XHQvLyBTaWxlbnRseSBoYW5kbGUgZXJyb3IgYW5kIHJlc2V0IGRpYWxvZyBzdGF0ZVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRzZXRSZWN1cnJpbmdEaWFsb2coQ0xPU0VEX0RJQUxPRylcblx0XHR9XG5cdH1cblxuXHQvLyBIYW5kbGUgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZyBjbG9zZVxuXHRjb25zdCBoYW5kbGVSZWN1cnJpbmdFdmVudENsb3NlID0gKCkgPT4ge1xuXHRcdHNldFJlY3VycmluZ0RpYWxvZyhDTE9TRURfRElBTE9HKVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ1N0YXJ0ID0gKGV2ZW50OiBEcmFnU3RhcnRFdmVudCkgPT4ge1xuXHRcdGNvbnN0IHsgYWN0aXZlIH0gPSBldmVudFxuXG5cdFx0Ly8gU2V0IHRoZSBhY3RpdmUgZXZlbnQgYmFzZWQgb24gdGhlIGV2ZW50IGRhdGFcblx0XHRpZiAoYWN0aXZlLmRhdGEuY3VycmVudD8udHlwZSA9PT0gJ2NhbGVuZGFyLWV2ZW50Jykge1xuXHRcdFx0ZHJhZ092ZXJsYXlSZWYuY3VycmVudD8uc2V0QWN0aXZlRXZlbnQoYWN0aXZlLmRhdGEuY3VycmVudC5ldmVudClcblx0XHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBhY3RpdmUuZGF0YS5jdXJyZW50LmV2ZW50XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ0VuZCA9IChldmVudDogRHJhZ0VuZEV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgdXBkYXRlZEV2ZW50ID0gZ2V0VXBkYXRlZEV2ZW50KGV2ZW50LCBhY3RpdmVFdmVudFJlZi5jdXJyZW50KVxuXHRcdGlmICh1cGRhdGVkRXZlbnQpIHtcblx0XHRcdGNvbnN0IHsgYWN0aXZlRXZlbnQsIHVwZGF0ZXMgfSA9IHVwZGF0ZWRFdmVudFxuXHRcdFx0cGVyZm9ybUV2ZW50VXBkYXRlKGFjdGl2ZUV2ZW50LCB1cGRhdGVzKVxuXHRcdH1cblxuXHRcdC8vIENsZWFyIHRoZSBhY3RpdmUgZXZlbnQgcmVmZXJlbmNlXG5cdFx0YWN0aXZlRXZlbnRSZWYuY3VycmVudCA9IG51bGxcblx0XHRkcmFnT3ZlcmxheVJlZi5jdXJyZW50Py5zZXRBY3RpdmVFdmVudChudWxsKVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ0NhbmNlbCA9IChfZXZlbnQ6IERyYWdDYW5jZWxFdmVudCkgPT4ge1xuXHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBudWxsXG5cdH1cblxuXHQvLyBJZiBkcmFnIGFuZCBkcm9wIGlzIGRpc2FibGVkLCBqdXN0IHJldHVybiBjaGlsZHJlbiB3aXRob3V0IERuZENvbnRleHRcblx0aWYgKGRpc2FibGVEcmFnQW5kRHJvcCkge1xuXHRcdHJldHVybiBjaGlsZHJlbiBhcyBSZWFjdC5SZWFjdEVsZW1lbnRcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxEbmRDb250ZXh0XG5cdFx0XHRcdGNvbGxpc2lvbkRldGVjdGlvbj17cG9pbnRlcldpdGhpbn1cblx0XHRcdFx0b25EcmFnQ2FuY2VsPXtoYW5kbGVEcmFnQ2FuY2VsfVxuXHRcdFx0XHRvbkRyYWdFbmQ9e2hhbmRsZURyYWdFbmR9XG5cdFx0XHRcdG9uRHJhZ1N0YXJ0PXtoYW5kbGVEcmFnU3RhcnR9XG5cdFx0XHRcdHNlbnNvcnM9e3NlbnNvcnN9XG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PEV2ZW50RHJhZ092ZXJsYXkgcmVmPXtkcmFnT3ZlcmxheVJlZn0gLz5cblx0XHRcdDwvRG5kQ29udGV4dD5cblxuXHRcdFx0ey8qIFJlY3VycmluZyBldmVudCBlZGl0IGRpYWxvZyAqL31cblx0XHRcdDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuXHRcdFx0XHRldmVudFRpdGxlPXtyZWN1cnJpbmdEaWFsb2cuZXZlbnQ/LnRpdGxlIHx8ICcnfVxuXHRcdFx0XHRpc09wZW49e3JlY3VycmluZ0RpYWxvZy5pc09wZW59XG5cdFx0XHRcdG9uQ2xvc2U9e2hhbmRsZVJlY3VycmluZ0V2ZW50Q2xvc2V9XG5cdFx0XHRcdG9uQ29uZmlybT17aGFuZGxlUmVjdXJyaW5nRXZlbnRDb25maXJtfVxuXHRcdFx0XHRvcGVyYXRpb25UeXBlPVwiZWRpdFwiXG5cdFx0XHQvPlxuXHRcdDwvPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IFNsb3QgfSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2xvdCdcbmltcG9ydCB0eXBlIHsgVmFyaWFudFByb3BzIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5J1xuaW1wb3J0IHsgY3ZhIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgYnV0dG9uVmFyaWFudHMgPSBjdmEoXG5cdFwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHdoaXRlc3BhY2Utbm93cmFwIHJvdW5kZWQtbWQgdGV4dC1zbSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWFsbCBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNCBzaHJpbmstMCBbJl9zdmddOnNocmluay0wIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmVcIixcblx0e1xuXHRcdHZhcmlhbnRzOiB7XG5cdFx0XHR2YXJpYW50OiB7XG5cdFx0XHRcdGRlZmF1bHQ6ICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXByaW1hcnkvOTAnLFxuXHRcdFx0XHRkZXN0cnVjdGl2ZTpcblx0XHRcdFx0XHQnYmctZGVzdHJ1Y3RpdmUgdGV4dC13aGl0ZSBob3ZlcjpiZy1kZXN0cnVjdGl2ZS85MCBmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazpmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvNDAgZGFyazpiZy1kZXN0cnVjdGl2ZS82MCcsXG5cdFx0XHRcdG91dGxpbmU6XG5cdFx0XHRcdFx0J2JvcmRlciBiZy1iYWNrZ3JvdW5kIHNoYWRvdy14cyBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmJnLWlucHV0LzMwIGRhcms6Ym9yZGVyLWlucHV0IGRhcms6aG92ZXI6YmctaW5wdXQvNTAnLFxuXHRcdFx0XHRzZWNvbmRhcnk6XG5cdFx0XHRcdFx0J2JnLXNlY29uZGFyeSB0ZXh0LXNlY29uZGFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXNlY29uZGFyeS84MCcsXG5cdFx0XHRcdGdob3N0OlxuXHRcdFx0XHRcdCdob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmhvdmVyOmJnLWFjY2VudC81MCcsXG5cdFx0XHRcdGxpbms6ICd0ZXh0LXByaW1hcnkgdW5kZXJsaW5lLW9mZnNldC00IGhvdmVyOnVuZGVybGluZScsXG5cdFx0XHR9LFxuXHRcdFx0c2l6ZToge1xuXHRcdFx0XHRkZWZhdWx0OiAnaC05IHB4LTQgcHktMiBoYXMtWz5zdmddOnB4LTMnLFxuXHRcdFx0XHRzbTogJ2gtOCByb3VuZGVkLW1kIGdhcC0xLjUgcHgtMyBoYXMtWz5zdmddOnB4LTIuNScsXG5cdFx0XHRcdGxnOiAnaC0xMCByb3VuZGVkLW1kIHB4LTYgaGFzLVs+c3ZnXTpweC00Jyxcblx0XHRcdFx0aWNvbjogJ3NpemUtOScsXG5cdFx0XHRcdCdpY29uLXNtJzogJ3NpemUtOCcsXG5cdFx0XHRcdCdpY29uLWxnJzogJ3NpemUtMTAnLFxuXHRcdFx0fSxcblx0XHR9LFxuXHRcdGRlZmF1bHRWYXJpYW50czoge1xuXHRcdFx0dmFyaWFudDogJ2RlZmF1bHQnLFxuXHRcdFx0c2l6ZTogJ2RlZmF1bHQnLFxuXHRcdH0sXG5cdH1cbilcblxuZnVuY3Rpb24gQnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHR2YXJpYW50LFxuXHRzaXplLFxuXHRhc0NoaWxkID0gZmFsc2UsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczwnYnV0dG9uJz4gJlxuXHRWYXJpYW50UHJvcHM8dHlwZW9mIGJ1dHRvblZhcmlhbnRzPiAmIHtcblx0XHRhc0NoaWxkPzogYm9vbGVhblxuXHR9KSB7XG5cdGNvbnN0IENvbXAgPSBhc0NoaWxkID8gU2xvdCA6ICdidXR0b24nXG5cblx0cmV0dXJuIChcblx0XHQ8Q29tcFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihidXR0b25WYXJpYW50cyh7IHZhcmlhbnQsIHNpemUsIGNsYXNzTmFtZSB9KSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJidXR0b25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHsgQnV0dG9uLCBidXR0b25WYXJpYW50cyB9XG4iLAogICAgImltcG9ydCAqIGFzIERpYWxvZ1ByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtZGlhbG9nJ1xuaW1wb3J0IHsgWEljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBEaWFsb2coe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cImRpYWxvZ1wiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nVHJpZ2dlcih7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlRyaWdnZXI+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwiZGlhbG9nLXRyaWdnZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ1BvcnRhbCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlBvcnRhbD4pIHtcblx0cmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Nsb3NlKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ2xvc2U+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLkNsb3NlIGRhdGEtc2xvdD1cImRpYWxvZy1jbG9zZVwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nT3ZlcmxheSh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuT3ZlcmxheT4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUHJpbWl0aXZlLk92ZXJsYXlcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBmaXhlZCBpbnNldC0wIHotNTAgYmctYmxhY2svNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctb3ZlcmxheVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dDb250ZW50KHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ29udGVudD4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIj5cblx0XHRcdDxEaWFsb2dPdmVybGF5IC8+XG5cdFx0XHQ8RGlhbG9nUHJpbWl0aXZlLkNvbnRlbnRcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnYmctYmFja2dyb3VuZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZml4ZWQgdG9wLVs1MCVdIGxlZnQtWzUwJV0gei01MCBncmlkIHctZnVsbCBtYXgtdy1bY2FsYygxMDAlLTJyZW0pXSB0cmFuc2xhdGUteC1bLTUwJV0gdHJhbnNsYXRlLXktWy01MCVdIGdhcC00IHJvdW5kZWQtbGcgYm9yZGVyIHAtNiBzaGFkb3ctbGcgZHVyYXRpb24tMjAwIHNtOm1heC13LWxnIG1heC1oLVs5MCVdJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWNvbnRlbnRcIlxuXHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PERpYWxvZ1ByaW1pdGl2ZS5DbG9zZSBjbGFzc05hbWU9XCJyaW5nLW9mZnNldC1iYWNrZ3JvdW5kIGZvY3VzOnJpbmctcmluZyBkYXRhLVtzdGF0ZT1vcGVuXTpiZy1hY2NlbnQgZGF0YS1bc3RhdGU9b3Blbl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGFic29sdXRlIHRvcC00IHJpZ2h0LTQgcm91bmRlZC14cyBvcGFjaXR5LTcwIHRyYW5zaXRpb24tb3BhY2l0eSBob3ZlcjpvcGFjaXR5LTEwMCBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1vZmZzZXQtMiBmb2N1czpvdXRsaW5lLWhpZGRlbiBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNFwiPlxuXHRcdFx0XHRcdDxYSWNvbiAvPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cblx0XHRcdFx0PC9EaWFsb2dQcmltaXRpdmUuQ2xvc2U+XG5cdFx0XHQ8L0RpYWxvZ1ByaW1pdGl2ZS5Db250ZW50PlxuXHRcdDwvRGlhbG9nUG9ydGFsPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0hlYWRlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LWNvbCBnYXAtMiB0ZXh0LWNlbnRlciBzbTp0ZXh0LWxlZnQnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWhlYWRlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dGb290ZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgc206ZmxleC1yb3cgc206anVzdGlmeS1lbmQnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctZm9vdGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ1RpdGxlKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5UaXRsZT4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUHJpbWl0aXZlLlRpdGxlXG5cdFx0XHRjbGFzc05hbWU9e2NuKCd0ZXh0LWxnIGxlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy10aXRsZVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dEZXNjcmlwdGlvbih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuRGVzY3JpcHRpb24+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20nLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWRlc2NyaXB0aW9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ2xvc2UsXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0Rlc2NyaXB0aW9uLFxuXHREaWFsb2dGb290ZXIsXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nT3ZlcmxheSxcblx0RGlhbG9nUG9ydGFsLFxuXHREaWFsb2dUaXRsZSxcblx0RGlhbG9nVHJpZ2dlcixcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3IH0gZnJvbSAnQC90eXBlcydcblxuLyoqXG4gKiBGdWxsIGludGVybmFsIGNvbnRleHQgdHlwZSB1c2VkIGJ5IGxpYnJhcnkgY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgU21hcnRDYWxlbmRhckNvbnRleHRUeXBlID0gUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlXG5cbi8qKlxuICogUHVibGljbHkgZXhwb3NlZCBjYWxlbmRhciBjb250ZXh0IHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4ge1xuXHRyZWFkb25seSBjdXJyZW50RGF0ZTogRGF5anNcblx0cmVhZG9ubHkgdmlldzogQ2FsZW5kYXJWaWV3XG5cdHJlYWRvbmx5IGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHJlYWRvbmx5IGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuXHRyZWFkb25seSBzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRyZWFkb25seSBzZWxlY3RlZERhdGU6IERheWpzIHwgbnVsbFxuXHRyZWFkb25seSBmaXJzdERheU9mV2VlazogbnVtYmVyXG5cdHJlYWRvbmx5IHJlc291cmNlczogUmVzb3VyY2VbXVxuXHRyZWFkb25seSBzZXRDdXJyZW50RGF0ZTogKGRhdGU6IERheWpzKSA9PiB2b2lkXG5cdHJlYWRvbmx5IHNlbGVjdERhdGU6IChkYXRlOiBEYXlqcykgPT4gdm9pZFxuXHRyZWFkb25seSBzZXRWaWV3OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdHJlYWRvbmx5IG5leHRQZXJpb2Q6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgcHJldlBlcmlvZDogKCkgPT4gdm9pZFxuXHRyZWFkb25seSB0b2RheTogKCkgPT4gdm9pZFxuXHRyZWFkb25seSBhZGRFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdHJlYWRvbmx5IHVwZGF0ZUV2ZW50OiAoXG5cdFx0ZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdCkgPT4gdm9pZFxuXHRyZWFkb25seSBkZWxldGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcikgPT4gdm9pZFxuXHRyZWFkb25seSBvcGVuRXZlbnRGb3JtOiAoZXZlbnREYXRhPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHRyZWFkb25seSBjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxuXHRyZWFkb25seSBnZXRFdmVudHNGb3JSZXNvdXJjZTogKFxuXHRcdHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlclxuXHQpID0+IENhbGVuZGFyRXZlbnRbXVxuXHRyZWFkb25seSBidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxufVxuXG4vKipcbiAqIEludGVybmFsIGhvb2sgdGhhdCByZXR1cm5zIHRoZSBmdWxsIGNvbnRleHQuXG4gKiBVc2VkIGJ5IGludGVybmFsIHZpZXdzLCBoZWFkZXJzLCBhbmQgZ3JpZCBjb21wb25lbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKTogU21hcnRDYWxlbmRhckNvbnRleHRUeXBlXG5leHBvcnQgZnVuY3Rpb24gdXNlU21hcnRDYWxlbmRhckNvbnRleHQ8VD4oXG5cdHNlbGVjdG9yOiAoY29udGV4dDogU21hcnRDYWxlbmRhckNvbnRleHRUeXBlKSA9PiBUXG4pOiBUXG5leHBvcnQgZnVuY3Rpb24gdXNlU21hcnRDYWxlbmRhckNvbnRleHQ8VD4oXG5cdHNlbGVjdG9yPzogKGNvbnRleHQ6IFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZSkgPT4gVFxuKTogVCB8IFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZSB7XG5cdGNvbnN0IHJlc291cmNlQ29udGV4dCA9IHVzZUNvbnRleHQoUmVzb3VyY2VDYWxlbmRhckNvbnRleHQpXG5cdGNvbnN0IHJlZ3VsYXJDb250ZXh0ID0gdXNlQ29udGV4dChDYWxlbmRhckNvbnRleHQpXG5cblx0Ly8gSW4gcmVndWxhciBjYWxlbmRhcnMsIHJlc291cmNlLXNwZWNpZmljIGZpZWxkcyB3aWxsIGJlIHVuZGVmaW5lZC5cblx0Y29uc3QgY29udGV4dCA9IChyZXNvdXJjZUNvbnRleHQgfHxcblx0XHRyZWd1bGFyQ29udGV4dCkgYXMgU21hcnRDYWxlbmRhckNvbnRleHRUeXBlXG5cblx0aWYgKCFjb250ZXh0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0J3VzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBDYWxlbmRhclByb3ZpZGVyIG9yIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlcidcblx0XHQpXG5cdH1cblxuXHRyZXR1cm4gc2VsZWN0b3IgPyBzZWxlY3Rvcihjb250ZXh0KSA6IGNvbnRleHRcbn1cblxuLyoqXG4gKiBQdWJsaWMgaG9vayBleHBvcnRlZCBmb3IgbGlicmFyeSB1c2Vycy5cbiAqIFJldHVybnMgYSBsaW1pdGVkIHNldCBvZiBjb21tb25seSB1c2VkIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VJbGFteUNhbGVuZGFyQ29udGV4dCgpOiBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB7XG5cdGNvbnN0IGNvbnRleHQgPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0cmV0dXJuIHtcblx0XHRjdXJyZW50RGF0ZTogY29udGV4dC5jdXJyZW50RGF0ZSxcblx0XHR2aWV3OiBjb250ZXh0LnZpZXcsXG5cdFx0ZXZlbnRzOiBjb250ZXh0LmV2ZW50cyxcblx0XHRpc0V2ZW50Rm9ybU9wZW46IGNvbnRleHQuaXNFdmVudEZvcm1PcGVuLFxuXHRcdHNlbGVjdGVkRXZlbnQ6IGNvbnRleHQuc2VsZWN0ZWRFdmVudCxcblx0XHRzZWxlY3RlZERhdGU6IGNvbnRleHQuc2VsZWN0ZWREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrOiBjb250ZXh0LmZpcnN0RGF5T2ZXZWVrLFxuXHRcdHJlc291cmNlczogY29udGV4dC5yZXNvdXJjZXMgfHwgW10sXG5cdFx0c2V0Q3VycmVudERhdGU6IGNvbnRleHQuc2V0Q3VycmVudERhdGUsXG5cdFx0c2VsZWN0RGF0ZTogY29udGV4dC5zZWxlY3REYXRlLFxuXHRcdHNldFZpZXc6IGNvbnRleHQuc2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kOiBjb250ZXh0Lm5leHRQZXJpb2QsXG5cdFx0cHJldlBlcmlvZDogY29udGV4dC5wcmV2UGVyaW9kLFxuXHRcdHRvZGF5OiBjb250ZXh0LnRvZGF5LFxuXHRcdGFkZEV2ZW50OiBjb250ZXh0LmFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50OiBjb250ZXh0LmRlbGV0ZUV2ZW50LFxuXHRcdG9wZW5FdmVudEZvcm06IGNvbnRleHQub3BlbkV2ZW50Rm9ybSxcblx0XHRjbG9zZUV2ZW50Rm9ybTogY29udGV4dC5jbG9zZUV2ZW50Rm9ybSxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZTogY29udGV4dC5nZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRidXNpbmVzc0hvdXJzOiBjb250ZXh0LmJ1c2luZXNzSG91cnMsXG5cdH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBFdmVudEZvcm1Qcm9wcyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7XG5cdENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlLFxuXHRDZWxsQ2xpY2tJbmZvLFxuXHRSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzLFxuXHRTbG90RHVyYXRpb24sXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0T3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRvckZ1bmN0aW9uIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhclZpZXcsIFRpbWVGb3JtYXQgfSBmcm9tICdAL3R5cGVzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyQ29udGV4dFR5cGUge1xuXHRjdXJyZW50RGF0ZTogRGF5anNcblx0dmlldzogQ2FsZW5kYXJWaWV3XG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHJhd0V2ZW50czogQ2FsZW5kYXJFdmVudFtdIC8vIFVucHJvY2Vzc2VkIGV2ZW50cyBmb3IgZXhwb3J0XG5cdGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuXHRzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRzZWxlY3RlZERhdGU6IERheWpzIHwgbnVsbFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG5cdHNldEN1cnJlbnREYXRlOiAoZGF0ZTogRGF5anMpID0+IHZvaWRcblx0c2VsZWN0RGF0ZTogKGRhdGU6IERheWpzKSA9PiB2b2lkXG5cdHNldFZpZXc6ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcblx0bmV4dFBlcmlvZDogKCkgPT4gdm9pZFxuXHRwcmV2UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHRvZGF5OiAoKSA9PiB2b2lkXG5cdGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0dXBkYXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50Pixcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG5cdGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdCkgPT4gdm9pZFxuXHRvcGVuRXZlbnRGb3JtOiAoZXZlbnREYXRhPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHRjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxuXHRnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IChzdGFydERhdGU6IERheWpzLCBlbmREYXRlOiBEYXlqcykgPT4gQ2FsZW5kYXJFdmVudFtdXG5cdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRyZW5kZXJFdmVudD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdG9uRXZlbnRDbGljazogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uQ2VsbENsaWNrOiAoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4gdm9pZFxuXHRjdXJyZW50TG9jYWxlPzogc3RyaW5nXG5cdGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuXHRkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGV2ZW50U3BhY2luZzogbnVtYmVyXG5cdGV2ZW50SGVpZ2h0OiBudW1iZXJcblx0c3RpY2t5Vmlld0hlYWRlcjogYm9vbGVhblxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lOiBzdHJpbmdcblx0aGVhZGVyQ29tcG9uZW50PzogUmVhY3QuUmVhY3ROb2RlIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY29tcG9uZW50XG5cdGhlYWRlckNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNsYXNzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHJlbmRlckV2ZW50Rm9ybT86IChwcm9wczogRXZlbnRGb3JtUHJvcHMpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHQvLyBUcmFuc2xhdGlvbiBmdW5jdGlvblxuXHR0OiBUcmFuc2xhdG9yRnVuY3Rpb25cblx0dGltZUZvcm1hdDogVGltZUZvcm1hdFxuXHRjbGFzc2VzT3ZlcnJpZGU/OiBDYWxlbmRhckNsYXNzZXNPdmVycmlkZVxuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcj86IChcblx0XHRwcm9wczogUmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wc1xuXHQpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRyZW5kZXJIb3VyPzogKGRhdGU6IERheWpzKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG5cdGhpZGRlbkRheXM/OiBTZXQ8bnVtYmVyPlxuXHRzbG90RHVyYXRpb246IFNsb3REdXJhdGlvblxuXHRzY3JvbGxUaW1lPzogc3RyaW5nXG59XG5cbi8vIENhbGVuZGFyQ29udGV4dCBpcyBrZXB0IGZvciBpbnRlcm5hbCBQcm92aWRlciB1c2FnZVxuZXhwb3J0IGNvbnN0IENhbGVuZGFyQ29udGV4dDogUmVhY3QuQ29udGV4dDxDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPiA9XG5cdGNyZWF0ZUNvbnRleHQ8Q2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuIiwKICAgICJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyQ29udGV4dFR5cGUgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB0eXBlIHsgQ2VsbENsaWNrSW5mbyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgZXh0ZW5kcyBDYWxlbmRhckNvbnRleHRUeXBlIHtcblx0Ly8gUmVzb3VyY2Utc3BlY2lmaWMgc3RhdGVcblx0cmVzb3VyY2VzOiBSZXNvdXJjZVtdXG5cdHZpc2libGVSZXNvdXJjZXM6IFNldDxzdHJpbmcgfCBudW1iZXI+XG5cblx0Ly8gUmVzb3VyY2UgdXRpbGl0aWVzXG5cdGdldEV2ZW50c0ZvclJlc291cmNlOiAocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBDYWxlbmRhckV2ZW50W11cblx0Z2V0RXZlbnRzRm9yUmVzb3VyY2VzOiAocmVzb3VyY2VJZHM6IChzdHJpbmcgfCBudW1iZXIpW10pID0+IENhbGVuZGFyRXZlbnRbXVxuXHRnZXRSZXNvdXJjZUJ5SWQ6IChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IFJlc291cmNlIHwgdW5kZWZpbmVkXG5cdGdldFZpc2libGVSZXNvdXJjZXM6ICgpID0+IFJlc291cmNlW11cblxuXHQvLyBDcm9zcy1yZXNvdXJjZSBldmVudCB1dGlsaXRpZXNcblx0aXNFdmVudENyb3NzUmVzb3VyY2U6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gYm9vbGVhblxuXHRnZXRFdmVudFJlc291cmNlSWRzOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IChzdHJpbmcgfCBudW1iZXIpW11cblxuXHQvLyBBZGRpdGlvbmFsIHByb3BlcnRpZXMgZnJvbSBjYWxlbmRhciBjb250ZXh0XG5cdG9uRXZlbnRDbGljazogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uQ2VsbENsaWNrOiAoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4gdm9pZFxuXHRyZW5kZXJSZXNvdXJjZT86IChyZXNvdXJjZTogUmVzb3VyY2UpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRvcmllbnRhdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJ1xuXHR3ZWVrVmlld0dyYW51bGFyaXR5OiAnaG91cmx5JyB8ICdkYWlseSdcbn1cblxuLy8gUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgaXMga2VwdCBmb3IgaW50ZXJuYWwgUHJvdmlkZXIgdXNhZ2VcbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dDogUmVhY3QuQ29udGV4dDxcblx0UmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkXG4+ID0gY3JlYXRlQ29udGV4dDxSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJQcm92aWRlclByb3BzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNsYXNzZXNPdmVycmlkZSxcblx0Q2VsbENsaWNrSW5mbyxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcblx0U2xvdER1cmF0aW9uLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckVuZ2luZSB9IGZyb20gJ0AvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZSdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEVWRU5UX0JBUl9IRUlHSFQgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCdcblxuY29uc3QgZ2V0RXZlbnRSZXNvdXJjZUlkcyA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IChzdHJpbmcgfCBudW1iZXIpW10gPT4ge1xuXHRpZiAoZXZlbnQucmVzb3VyY2VJZHMpIHtcblx0XHRyZXR1cm4gZXZlbnQucmVzb3VyY2VJZHNcblx0fVxuXHRpZiAoZXZlbnQucmVzb3VyY2VJZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIFtldmVudC5yZXNvdXJjZUlkXVxuXHR9XG5cdHJldHVybiBbXVxufVxuXG5pbnRlcmZhY2UgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBDYWxlbmRhclByb3ZpZGVyUHJvcHMge1xuXHRldmVudHM/OiBDYWxlbmRhckV2ZW50W11cblx0cmVzb3VyY2VzPzogUmVzb3VyY2VbXVxuXHRyZW5kZXJSZXNvdXJjZT86IChyZXNvdXJjZTogUmVzb3VyY2UpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc2VzT3ZlcnJpZGU/OiBDYWxlbmRhckNsYXNzZXNPdmVycmlkZVxuXHRvcmllbnRhdGlvbj86ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCdcblx0d2Vla1ZpZXdHcmFudWxhcml0eT86ICdob3VybHknIHwgJ2RhaWx5J1xuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcj86IChcblx0XHRwcm9wczogUmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wc1xuXHQpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRyZW5kZXJIb3VyPzogKGRhdGU6IERheWpzKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG5cdHNsb3REdXJhdGlvbj86IFNsb3REdXJhdGlvblxuXHRzY3JvbGxUaW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXI6IFJlYWN0LkZDPFxuXHRSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXJQcm9wc1xuPiA9ICh7XG5cdGNoaWxkcmVuLFxuXHRldmVudHMgPSBbXSxcblx0cmVzb3VyY2VzID0gW10sXG5cdGZpcnN0RGF5T2ZXZWVrID0gMCxcblx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRpbml0aWFsRGF0ZSxcblx0cmVuZGVyRXZlbnQsXG5cdG9uRXZlbnRDbGljayxcblx0b25DZWxsQ2xpY2ssXG5cdG9uVmlld0NoYW5nZSxcblx0b25FdmVudEFkZCxcblx0b25FdmVudFVwZGF0ZSxcblx0b25FdmVudERlbGV0ZSxcblx0b25EYXRlQ2hhbmdlLFxuXHRsb2NhbGUsXG5cdHRpbWV6b25lLFxuXHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRkaXNhYmxlRXZlbnRDbGljayxcblx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRkYXlNYXhFdmVudHMsXG5cdGV2ZW50U3BhY2luZyA9IDEsXG5cdGV2ZW50SGVpZ2h0ID0gRVZFTlRfQkFSX0hFSUdIVCxcblx0c3RpY2t5Vmlld0hlYWRlciA9IHRydWUsXG5cdHZpZXdIZWFkZXJDbGFzc05hbWUgPSAnJyxcblx0aGVhZGVyQ29tcG9uZW50LFxuXHRoZWFkZXJDbGFzc05hbWUsXG5cdHRyYW5zbGF0aW9ucyxcblx0dHJhbnNsYXRvcixcblx0cmVuZGVyUmVzb3VyY2UsXG5cdHJlbmRlckV2ZW50Rm9ybSxcblx0YnVzaW5lc3NIb3Vycyxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRvcmllbnRhdGlvbiA9ICdob3Jpem9udGFsJyxcblx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdHJlbmRlckhvdXIsXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzID0gZmFsc2UsXG5cdGhpZGRlbkRheXMsXG5cdHdlZWtWaWV3R3JhbnVsYXJpdHkgPSAnaG91cmx5Jyxcblx0c2xvdER1cmF0aW9uID0gNjAsXG5cdHNjcm9sbFRpbWUsXG59KSA9PiB7XG5cdC8vIFJlc291cmNlLXNwZWNpZmljIHN0YXRlXG5cdGNvbnN0IFtjdXJyZW50UmVzb3VyY2VzXSA9IHVzZVN0YXRlPFJlc291cmNlW10+KHJlc291cmNlcylcblx0Y29uc3QgW3Zpc2libGVSZXNvdXJjZXMsIHNldFZpc2libGVSZXNvdXJjZXNdID0gdXNlU3RhdGU8XG5cdFx0U2V0PHN0cmluZyB8IG51bWJlcj5cblx0PihuZXcgU2V0KHJlc291cmNlcy5tYXAoKHIpID0+IHIuaWQpKSlcblxuXHQvLyBVc2UgdGhlIGNhbGVuZGFyIGVuZ2luZVxuXHRjb25zdCBjYWxlbmRhckVuZ2luZSA9IHVzZUNhbGVuZGFyRW5naW5lKHtcblx0XHRldmVudHMsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0aW5pdGlhbFZpZXcsXG5cdFx0aW5pdGlhbERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRvbkV2ZW50QWRkLFxuXHRcdG9uRXZlbnRVcGRhdGUsXG5cdFx0b25FdmVudERlbGV0ZSxcblx0XHRvbkRhdGVDaGFuZ2UsXG5cdFx0b25WaWV3Q2hhbmdlOiBvblZpZXdDaGFuZ2UsXG5cdFx0bG9jYWxlLFxuXHRcdHRpbWV6b25lLFxuXHRcdHRyYW5zbGF0aW9ucyxcblx0XHR0cmFuc2xhdG9yLFxuXHR9KVxuXG5cdC8vIFJlc291cmNlIHZpc2liaWxpdHkg4oCUIGFsbCBtdXRhdGlvbnMgZ28gdGhyb3VnaCBhIHNpbmdsZSB1cGRhdGVyLlxuXHRjb25zdCBtdXRhdGVWaXNpYmlsaXR5ID0gdXNlQ2FsbGJhY2soXG5cdFx0KG9wOiAnc2hvdycgfCAnaGlkZScgfCAndG9nZ2xlJywgaWQ6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuXHRcdFx0c2V0VmlzaWJsZVJlc291cmNlcygocHJldikgPT4ge1xuXHRcdFx0XHRjb25zdCBuZXh0ID0gbmV3IFNldChwcmV2KVxuXHRcdFx0XHRpZiAob3AgPT09ICdzaG93JyB8fCAob3AgPT09ICd0b2dnbGUnICYmICFuZXh0LmhhcyhpZCkpKSBuZXh0LmFkZChpZClcblx0XHRcdFx0ZWxzZSBuZXh0LmRlbGV0ZShpZClcblx0XHRcdFx0cmV0dXJuIG5leHRcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbXVxuXHQpXG5cdGNvbnN0IHNob3dSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChpZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBtdXRhdGVWaXNpYmlsaXR5KCdzaG93JywgaWQpLFxuXHRcdFttdXRhdGVWaXNpYmlsaXR5XVxuXHQpXG5cdGNvbnN0IGhpZGVSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChpZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBtdXRhdGVWaXNpYmlsaXR5KCdoaWRlJywgaWQpLFxuXHRcdFttdXRhdGVWaXNpYmlsaXR5XVxuXHQpXG5cdGNvbnN0IHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSA9IHVzZUNhbGxiYWNrKFxuXHRcdChpZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBtdXRhdGVWaXNpYmlsaXR5KCd0b2dnbGUnLCBpZCksXG5cdFx0W211dGF0ZVZpc2liaWxpdHldXG5cdClcblx0Y29uc3Qgc2hvd0FsbFJlc291cmNlcyA9IHVzZUNhbGxiYWNrKFxuXHRcdCgpID0+IHNldFZpc2libGVSZXNvdXJjZXMobmV3IFNldChjdXJyZW50UmVzb3VyY2VzLm1hcCgocikgPT4gci5pZCkpKSxcblx0XHRbY3VycmVudFJlc291cmNlc11cblx0KVxuXHRjb25zdCBoaWRlQWxsUmVzb3VyY2VzID0gdXNlQ2FsbGJhY2soKCkgPT4gc2V0VmlzaWJsZVJlc291cmNlcyhuZXcgU2V0KCkpLCBbXSlcblxuXHQvLyBFdmVudCB1dGlsaXRpZXMg4oCUIGJvdGggZmlsdGVycyBnbyB0aHJvdWdoIGdldEV2ZW50UmVzb3VyY2VJZHMgc28gc2luZ2xlXG5cdC8vIGFuZCBtdWx0aS1yZXNvdXJjZSBldmVudHMgYXJlIGhhbmRsZWQgdW5pZm9ybWx5LlxuXHRjb25zdCBnZXRFdmVudHNGb3JSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBDYWxlbmRhckV2ZW50W10gPT5cblx0XHRcdGNhbGVuZGFyRW5naW5lLmV2ZW50cy5maWx0ZXIoKGUpID0+XG5cdFx0XHRcdGdldEV2ZW50UmVzb3VyY2VJZHMoZSkuaW5jbHVkZXMocmVzb3VyY2VJZClcblx0XHRcdCksXG5cdFx0W2NhbGVuZGFyRW5naW5lLmV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldEV2ZW50c0ZvclJlc291cmNlcyA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkczogKHN0cmluZyB8IG51bWJlcilbXSk6IENhbGVuZGFyRXZlbnRbXSA9PlxuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuZXZlbnRzLmZpbHRlcigoZSkgPT5cblx0XHRcdFx0Z2V0RXZlbnRSZXNvdXJjZUlkcyhlKS5zb21lKChpZCkgPT4gcmVzb3VyY2VJZHMuaW5jbHVkZXMoaWQpKVxuXHRcdFx0KSxcblx0XHRbY2FsZW5kYXJFbmdpbmUuZXZlbnRzXVxuXHQpXG5cblx0Y29uc3QgZ2V0UmVzb3VyY2VCeUlkID0gdXNlQ2FsbGJhY2soXG5cdFx0KHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcik6IFJlc291cmNlIHwgdW5kZWZpbmVkID0+IHtcblx0XHRcdHJldHVybiBjdXJyZW50UmVzb3VyY2VzLmZpbmQoKHJlc291cmNlKSA9PiByZXNvdXJjZS5pZCA9PT0gcmVzb3VyY2VJZClcblx0XHR9LFxuXHRcdFtjdXJyZW50UmVzb3VyY2VzXVxuXHQpXG5cblx0Y29uc3QgZ2V0VmlzaWJsZVJlc291cmNlcyA9IHVzZUNhbGxiYWNrKCgpOiBSZXNvdXJjZVtdID0+IHtcblx0XHRyZXR1cm4gY3VycmVudFJlc291cmNlcy5maWx0ZXIoKHJlc291cmNlKSA9PlxuXHRcdFx0dmlzaWJsZVJlc291cmNlcy5oYXMocmVzb3VyY2UuaWQpXG5cdFx0KVxuXHR9LCBbY3VycmVudFJlc291cmNlcywgdmlzaWJsZVJlc291cmNlc10pXG5cblx0Ly8gQ3Jvc3MtcmVzb3VyY2UgZXZlbnQgdXRpbGl0aWVzXG5cdGNvbnN0IGlzRXZlbnRDcm9zc1Jlc291cmNlID0gdXNlQ2FsbGJhY2soKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG5cdFx0cmV0dXJuIEJvb2xlYW4oZXZlbnQucmVzb3VyY2VJZHMgJiYgZXZlbnQucmVzb3VyY2VJZHMubGVuZ3RoID4gMSlcblx0fSwgW10pXG5cblx0Ly8gQ3VzdG9tIGhhbmRsZXJzXG5cdGNvbnN0IGVkaXRFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0U2VsZWN0ZWRFdmVudChldmVudClcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Y29uc3QgaGFuZGxlRXZlbnRDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0aWYgKGRpc2FibGVFdmVudENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdFx0aWYgKG9uRXZlbnRDbGljaykge1xuXHRcdFx0XHRvbkV2ZW50Q2xpY2soZXZlbnQpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlZGl0RXZlbnQoZXZlbnQpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbZGlzYWJsZUV2ZW50Q2xpY2ssIG9uRXZlbnRDbGljaywgZWRpdEV2ZW50XVxuXHQpXG5cblx0Y29uc3QgaGFuZGxlRGF0ZUNsaWNrID0gdXNlQ2FsbGJhY2soXG5cdFx0KGluZm86IENlbGxDbGlja0luZm8pID0+IHtcblx0XHRcdGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAob25DZWxsQ2xpY2spIHtcblx0XHRcdFx0b25DZWxsQ2xpY2soaW5mbylcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IG5ld0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0XHRcdHRpdGxlOiBjYWxlbmRhckVuZ2luZS50KCduZXdFdmVudCcpLFxuXHRcdFx0XHRcdHN0YXJ0OiBpbmZvLnN0YXJ0LFxuXHRcdFx0XHRcdGVuZDogaW5mby5lbmQsXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246ICcnLFxuXHRcdFx0XHRcdGFsbERheTogZmFsc2UsXG5cdFx0XHRcdH0gYXMgQ2FsZW5kYXJFdmVudFxuXG5cdFx0XHRcdGlmIChpbmZvLnJlc291cmNlSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdG5ld0V2ZW50LnJlc291cmNlSWQgPSBpbmZvLnJlc291cmNlSWRcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRXZlbnQobmV3RXZlbnQpXG5cdFx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRGF0ZShpbmZvLnN0YXJ0KVxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtvbkNlbGxDbGljaywgZGlzYWJsZUNlbGxDbGljaywgY2FsZW5kYXJFbmdpbmVdXG5cdClcblxuXHQvLyBDcmVhdGUgdGhlIGNvbnRleHQgdmFsdWVcblx0Y29uc3QgY29udGV4dFZhbHVlID0gdXNlTWVtbyhcblx0XHQoKSA9PiAoe1xuXHRcdFx0Li4uY2FsZW5kYXJFbmdpbmUsXG5cdFx0XHQvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuXHRcdFx0cmVzb3VyY2VzOiBjdXJyZW50UmVzb3VyY2VzLFxuXHRcdFx0dmlzaWJsZVJlc291cmNlcyxcblx0XHRcdHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSxcblx0XHRcdHNob3dSZXNvdXJjZSxcblx0XHRcdGhpZGVSZXNvdXJjZSxcblx0XHRcdHNob3dBbGxSZXNvdXJjZXMsXG5cdFx0XHRoaWRlQWxsUmVzb3VyY2VzLFxuXHRcdFx0Ly8gUmVzb3VyY2UgdXRpbGl0aWVzXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlcyxcblx0XHRcdGdldFJlc291cmNlQnlJZCxcblx0XHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdFx0XHRpc0V2ZW50Q3Jvc3NSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50UmVzb3VyY2VJZHMsXG5cdFx0XHQvLyBPdmVycmlkZSBoYW5kbGVyc1xuXHRcdFx0b25FdmVudENsaWNrOiBoYW5kbGVFdmVudENsaWNrLFxuXHRcdFx0b25DZWxsQ2xpY2s6IGhhbmRsZURhdGVDbGljayxcblx0XHRcdC8vIFBhc3MtdGhyb3VnaCBwcm9wc1xuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRyZW5kZXJSZXNvdXJjZSxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0ZXZlbnRIZWlnaHQsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0b3JpZW50YXRpb24sXG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdHJlbmRlckhvdXIsXG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdGhpZGRlbkRheXMsXG5cdFx0XHR3ZWVrVmlld0dyYW51bGFyaXR5LFxuXHRcdFx0c2xvdER1cmF0aW9uLFxuXHRcdFx0c2Nyb2xsVGltZSxcblx0XHR9KSxcblx0XHRbXG5cdFx0XHRjYWxlbmRhckVuZ2luZSxcblx0XHRcdGN1cnJlbnRSZXNvdXJjZXMsXG5cdFx0XHR2aXNpYmxlUmVzb3VyY2VzLFxuXHRcdFx0dG9nZ2xlUmVzb3VyY2VWaXNpYmlsaXR5LFxuXHRcdFx0c2hvd1Jlc291cmNlLFxuXHRcdFx0aGlkZVJlc291cmNlLFxuXHRcdFx0c2hvd0FsbFJlc291cmNlcyxcblx0XHRcdGhpZGVBbGxSZXNvdXJjZXMsXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlcyxcblx0XHRcdGdldFJlc291cmNlQnlJZCxcblx0XHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdFx0XHRpc0V2ZW50Q3Jvc3NSZXNvdXJjZSxcblx0XHRcdGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRoYW5kbGVEYXRlQ2xpY2ssXG5cdFx0XHRyZW5kZXJFdmVudCxcblx0XHRcdHJlbmRlclJlc291cmNlLFxuXHRcdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHRcdFx0bG9jYWxlLFxuXHRcdFx0dGltZXpvbmUsXG5cdFx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRldmVudEhlaWdodCxcblx0XHRcdHN0aWNreVZpZXdIZWFkZXIsXG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0aGVhZGVyQ29tcG9uZW50LFxuXHRcdFx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdHRpbWVGb3JtYXQsXG5cdFx0XHRjbGFzc2VzT3ZlcnJpZGUsXG5cdFx0XHRvcmllbnRhdGlvbixcblx0XHRcdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRcdFx0cmVuZGVySG91cixcblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0aGlkZGVuRGF5cyxcblx0XHRcdHdlZWtWaWV3R3JhbnVsYXJpdHksXG5cdFx0XHRzbG90RHVyYXRpb24sXG5cdFx0XHRzY3JvbGxUaW1lLFxuXHRcdF1cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlQ2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvUmVzb3VyY2VDYWxlbmRhckNvbnRleHQuUHJvdmlkZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdE9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQge1xuXHRkZWxldGVSZWN1cnJpbmdFdmVudCBhcyBkZWxldGVSZWN1cnJpbmdFdmVudEltcGwsXG5cdGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzLFxuXHR1cGRhdGVSZWN1cnJpbmdFdmVudCBhcyB1cGRhdGVSZWN1cnJpbmdFdmVudEltcGwsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgZGF5anMsIHtcblx0dHlwZSBEYXlqcyxcblx0dHlwZSBNYW5pcHVsYXRlVHlwZSxcbn0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBkZWZhdWx0VHJhbnNsYXRpb25zIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL2RlZmF1bHQnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucywgVHJhbnNsYXRvckZ1bmN0aW9uIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHsgZ2V0TW9udGhXZWVrcywgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsgZXZlbnRPdmVybGFwc1JhbmdlIH0gZnJvbSAnQC9saWIvdXRpbHMvZXZlbnQtdXRpbHMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldyB9IGZyb20gJ0AvdHlwZXMnXG5pbXBvcnQgeyBEQVlfTUFYX0VWRU5UU19ERUZBVUxUIH0gZnJvbSAnLi4vbGliL2NvbnN0YW50cydcblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhckVuZ2luZUNvbmZpZyB7XG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcblx0aW5pdGlhbFZpZXc/OiBDYWxlbmRhclZpZXdcblx0aW5pdGlhbERhdGU/OiBEYXlqc1xuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRvbkV2ZW50QWRkPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRXZlbnRVcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudERlbGV0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkRhdGVDaGFuZ2U/OiAoZGF0ZTogRGF5anMsIHJhbmdlOiB7IHN0YXJ0OiBEYXlqczsgZW5kOiBEYXlqcyB9KSA9PiB2b2lkXG5cdG9uVmlld0NoYW5nZT86ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcblx0bG9jYWxlPzogc3RyaW5nXG5cdHRpbWV6b25lPzogc3RyaW5nXG5cdHRyYW5zbGF0aW9ucz86IFRyYW5zbGF0aW9uc1xuXHR0cmFuc2xhdG9yPzogVHJhbnNsYXRvckZ1bmN0aW9uXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJFbmdpbmVSZXR1cm4ge1xuXHRjdXJyZW50RGF0ZTogRGF5anNcblx0dmlldzogQ2FsZW5kYXJWaWV3XG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHJhd0V2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuXHRzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRzZWxlY3RlZERhdGU6IERheWpzIHwgbnVsbFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGN1cnJlbnRMb2NhbGU6IHN0cmluZ1xuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRzZXRDdXJyZW50RGF0ZTogKGRhdGU6IERheWpzKSA9PiB2b2lkXG5cdHNlbGVjdERhdGU6IChkYXRlOiBEYXlqcykgPT4gdm9pZFxuXHRzZXRWaWV3OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdG5leHRQZXJpb2Q6ICgpID0+IHZvaWRcblx0cHJldlBlcmlvZDogKCkgPT4gdm9pZFxuXHR0b2RheTogKCkgPT4gdm9pZFxuXHRhZGRFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdHVwZGF0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHR1cGRhdGVSZWN1cnJpbmdFdmVudDogKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4sXG5cdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdCkgPT4gdm9pZFxuXHRkZWxldGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcikgPT4gdm9pZFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudDogKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0b3BlbkV2ZW50Rm9ybTogKGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0Y2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcblx0c2V0U2VsZWN0ZWRFdmVudDogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248Q2FsZW5kYXJFdmVudCB8IG51bGw+PlxuXHRzZXRJc0V2ZW50Rm9ybU9wZW46IFJlYWN0LkRpc3BhdGNoPFJlYWN0LlNldFN0YXRlQWN0aW9uPGJvb2xlYW4+PlxuXHRzZXRTZWxlY3RlZERhdGU6IFJlYWN0LkRpc3BhdGNoPFJlYWN0LlNldFN0YXRlQWN0aW9uPERheWpzIHwgbnVsbD4+XG5cdGdldEV2ZW50c0ZvckRhdGVSYW5nZTogKHN0YXJ0RGF0ZTogRGF5anMsIGVuZERhdGU6IERheWpzKSA9PiBDYWxlbmRhckV2ZW50W11cblx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHQ6IFRyYW5zbGF0b3JGdW5jdGlvblxufVxuXG5jb25zdCBWSUVXX1VOSVRTOiBSZWNvcmQ8Q2FsZW5kYXJWaWV3LCBNYW5pcHVsYXRlVHlwZT4gPSB7XG5cdGRheTogJ2RheScsXG5cdHdlZWs6ICd3ZWVrJyxcblx0bW9udGg6ICdtb250aCcsXG5cdHllYXI6ICd5ZWFyJyxcbn1cblxuZXhwb3J0IGNvbnN0IGNhbGN1bGF0ZVZpZXdSYW5nZSA9IChcblx0ZGF0ZTogRGF5anMsXG5cdHZpZXc6IENhbGVuZGFyVmlldyxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuKTogeyBzdGFydDogRGF5anM7IGVuZDogRGF5anMgfSA9PiB7XG5cdGlmICh2aWV3ID09PSAnZGF5JyB8fCB2aWV3ID09PSAneWVhcicpIHtcblx0XHRyZXR1cm4geyBzdGFydDogZGF0ZS5zdGFydE9mKHZpZXcpLCBlbmQ6IGRhdGUuZW5kT2YodmlldykgfVxuXHR9XG5cdGlmICh2aWV3ID09PSAnd2VlaycpIHtcblx0XHRjb25zdCBkYXlzID0gZ2V0V2Vla0RheXMoZGF0ZSwgZmlyc3REYXlPZldlZWspXG5cdFx0cmV0dXJuIHsgc3RhcnQ6IGRheXNbMF0uc3RhcnRPZignZGF5JyksIGVuZDogZGF5c1s2XS5lbmRPZignZGF5JykgfVxuXHR9XG5cdC8vIG1vbnRoIHZpZXc6IDYgd2Vla3Mgw5cgNyBkYXlzXG5cdGNvbnN0IHdlZWtzID0gZ2V0TW9udGhXZWVrcyhkYXRlLCBmaXJzdERheU9mV2Vlaylcblx0cmV0dXJuIHsgc3RhcnQ6IHdlZWtzWzBdWzBdLnN0YXJ0T2YoJ2RheScpLCBlbmQ6IHdlZWtzWzVdWzZdLmVuZE9mKCdkYXknKSB9XG59XG5cbmV4cG9ydCBjb25zdCB1c2VDYWxlbmRhckVuZ2luZSA9IChcblx0Y29uZmlnOiBDYWxlbmRhckVuZ2luZUNvbmZpZ1xuKTogQ2FsZW5kYXJFbmdpbmVSZXR1cm4gPT4ge1xuXHRjb25zdCB7XG5cdFx0ZXZlbnRzID0gW10sXG5cdFx0Zmlyc3REYXlPZldlZWsgPSAwLFxuXHRcdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0XHRpbml0aWFsRGF0ZSA9IGRheWpzKCksXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRvbkV2ZW50QWRkLFxuXHRcdG9uRXZlbnRVcGRhdGUsXG5cdFx0b25FdmVudERlbGV0ZSxcblx0XHRvbkRhdGVDaGFuZ2UsXG5cdFx0b25WaWV3Q2hhbmdlLFxuXHRcdGxvY2FsZSxcblx0XHR0aW1lem9uZSxcblx0XHR0cmFuc2xhdGlvbnMsXG5cdFx0dHJhbnNsYXRvcixcblx0fSA9IGNvbmZpZ1xuXG5cdGNvbnN0IFtjdXJyZW50RGF0ZSwgc2V0Q3VycmVudERhdGVdID0gdXNlU3RhdGU8RGF5anM+KFxuXHRcdGRheWpzLmlzRGF5anMoaW5pdGlhbERhdGUpID8gaW5pdGlhbERhdGUgOiBkYXlqcyhpbml0aWFsRGF0ZSlcblx0KVxuXHRjb25zdCBbdmlldywgc2V0Vmlld10gPSB1c2VTdGF0ZTxDYWxlbmRhclZpZXc+KGluaXRpYWxWaWV3KVxuXHRjb25zdCBbY3VycmVudEV2ZW50cywgc2V0Q3VycmVudEV2ZW50c10gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50W10+KGV2ZW50cylcblx0Y29uc3QgW2lzRXZlbnRGb3JtT3Blbiwgc2V0SXNFdmVudEZvcm1PcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXHRjb25zdCBbc2VsZWN0ZWRFdmVudCwgc2V0U2VsZWN0ZWRFdmVudF0gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50IHwgbnVsbD4obnVsbClcblx0Y29uc3QgW3NlbGVjdGVkRGF0ZSwgc2V0U2VsZWN0ZWREYXRlXSA9IHVzZVN0YXRlPERheWpzIHwgbnVsbD4obnVsbClcblx0Y29uc3QgW2N1cnJlbnRMb2NhbGUsIHNldEN1cnJlbnRMb2NhbGVdID0gdXNlU3RhdGUobG9jYWxlIHx8ICdlbicpXG5cdGNvbnN0IGxhc3RFdmVudHNQcm9wID0gdXNlUmVmKGV2ZW50cylcblx0Y29uc3QgbGFzdFRpbWV6b25lUHJvcCA9IHVzZVJlZih0aW1lem9uZSlcblx0Y29uc3QgbGFzdExvY2FsZVByb3AgPSB1c2VSZWYobG9jYWxlKVxuXG5cdGNvbnN0IHQ6IFRyYW5zbGF0b3JGdW5jdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmICh0cmFuc2xhdG9yKSByZXR1cm4gdHJhbnNsYXRvclxuXHRcdGNvbnN0IGRpY3QgPSB0cmFuc2xhdGlvbnMgfHwgZGVmYXVsdFRyYW5zbGF0aW9uc1xuXHRcdHJldHVybiAoa2V5OiBzdHJpbmcpID0+IGRpY3Rba2V5IGFzIGtleW9mIFRyYW5zbGF0aW9uc10gfHwga2V5XG5cdH0sIFt0cmFuc2xhdGlvbnMsIHRyYW5zbGF0b3JdKVxuXG5cdGNvbnN0IGdldEV2ZW50c0ZvckRhdGVSYW5nZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChzdGFydERhdGU6IERheWpzLCBlbmREYXRlOiBEYXlqcyk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdFx0XHRjb25zdCBhbGxFdmVudHM6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cblx0XHRcdGZvciAoY29uc3QgZXZlbnQgb2YgY3VycmVudEV2ZW50cykge1xuXHRcdFx0XHRpZiAoZXZlbnQucnJ1bGUpIHtcblx0XHRcdFx0XHRhbGxFdmVudHMucHVzaChcblx0XHRcdFx0XHRcdC4uLmdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzKHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRFdmVudHMsXG5cdFx0XHRcdFx0XHRcdHN0YXJ0RGF0ZSxcblx0XHRcdFx0XHRcdFx0ZW5kRGF0ZSxcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9IGVsc2UgaWYgKGV2ZW50T3ZlcmxhcHNSYW5nZShldmVudCwgc3RhcnREYXRlLCBlbmREYXRlKSkge1xuXHRcdFx0XHRcdGFsbEV2ZW50cy5wdXNoKGV2ZW50KVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYWxsRXZlbnRzXG5cdFx0fSxcblx0XHRbY3VycmVudEV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldEN1cnJlbnRWaWV3UmFuZ2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0cmV0dXJuIGNhbGN1bGF0ZVZpZXdSYW5nZShjdXJyZW50RGF0ZSwgdmlldywgZmlyc3REYXlPZldlZWspXG5cdH0sIFtjdXJyZW50RGF0ZSwgdmlldywgZmlyc3REYXlPZldlZWtdKVxuXG5cdGNvbnN0IHByb2Nlc3NlZEV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gZ2V0Q3VycmVudFZpZXdSYW5nZSgpXG5cdFx0cmV0dXJuIGdldEV2ZW50c0ZvckRhdGVSYW5nZShzdGFydCwgZW5kKVxuXHR9LCBbZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCBnZXRDdXJyZW50Vmlld1JhbmdlXSlcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChldmVudHMgIT09IGxhc3RFdmVudHNQcm9wLmN1cnJlbnQpIHtcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoZXZlbnRzKVxuXHRcdFx0bGFzdEV2ZW50c1Byb3AuY3VycmVudCA9IGV2ZW50c1xuXHRcdH1cblx0fSwgW2V2ZW50c10pXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAobG9jYWxlICYmIGxvY2FsZSAhPT0gbGFzdExvY2FsZVByb3AuY3VycmVudCkge1xuXHRcdFx0c2V0Q3VycmVudExvY2FsZShsb2NhbGUpXG5cdFx0XHRkYXlqcy5sb2NhbGUobG9jYWxlKVxuXHRcdFx0c2V0Q3VycmVudERhdGUoKHByZXZEYXRlKSA9PiBwcmV2RGF0ZS5sb2NhbGUobG9jYWxlKSlcblx0XHRcdGxhc3RMb2NhbGVQcm9wLmN1cnJlbnQgPSBsb2NhbGVcblx0XHR9XG5cdH0sIFtsb2NhbGVdKVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKHRpbWV6b25lICYmIHRpbWV6b25lICE9PSBsYXN0VGltZXpvbmVQcm9wLmN1cnJlbnQpIHtcblx0XHRcdGRheWpzLnR6LnNldERlZmF1bHQodGltZXpvbmUpXG5cdFx0XHRzZXRDdXJyZW50RGF0ZSgocHJldikgPT4gcHJldi50eih0aW1lem9uZSkpXG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKChwcmV2KSA9PlxuXHRcdFx0XHRwcmV2Lm1hcCgoZSkgPT4gKHtcblx0XHRcdFx0XHQuLi5lLFxuXHRcdFx0XHRcdHN0YXJ0OiBlLnN0YXJ0LnR6KHRpbWV6b25lKSxcblx0XHRcdFx0XHRlbmQ6IGUuZW5kLnR6KHRpbWV6b25lKSxcblx0XHRcdFx0fSkpXG5cdFx0XHQpXG5cdFx0XHRsYXN0VGltZXpvbmVQcm9wLmN1cnJlbnQgPSB0aW1lem9uZVxuXHRcdH1cblx0fSwgW3RpbWV6b25lXSlcblxuXHRjb25zdCB1cGRhdGVEYXRlQW5kTm90aWZ5ID0gdXNlQ2FsbGJhY2soXG5cdFx0KG5ld0RhdGU6IERheWpzKSA9PiB7XG5cdFx0XHRzZXRDdXJyZW50RGF0ZShuZXdEYXRlKVxuXHRcdFx0Y29uc3QgcmFuZ2UgPSBjYWxjdWxhdGVWaWV3UmFuZ2UobmV3RGF0ZSwgdmlldywgZmlyc3REYXlPZldlZWspXG5cdFx0XHRvbkRhdGVDaGFuZ2U/LihuZXdEYXRlLCByYW5nZSlcblx0XHR9LFxuXHRcdFtvbkRhdGVDaGFuZ2UsIHZpZXcsIGZpcnN0RGF5T2ZXZWVrXVxuXHQpXG5cblx0Y29uc3Qgc2VsZWN0RGF0ZSA9IHVwZGF0ZURhdGVBbmROb3RpZnlcblxuXHRjb25zdCBuYXZpZ2F0ZVBlcmlvZCA9IHVzZUNhbGxiYWNrKFxuXHRcdChkaXJlY3Rpb246IDEgfCAtMSkgPT4ge1xuXHRcdFx0Y29uc3QgbmV3RGF0ZSA9XG5cdFx0XHRcdGRpcmVjdGlvbiA9PT0gMVxuXHRcdFx0XHRcdD8gY3VycmVudERhdGUuYWRkKDEsIFZJRVdfVU5JVFNbdmlld10pXG5cdFx0XHRcdFx0OiBjdXJyZW50RGF0ZS5zdWJ0cmFjdCgxLCBWSUVXX1VOSVRTW3ZpZXddKVxuXHRcdFx0dXBkYXRlRGF0ZUFuZE5vdGlmeShuZXdEYXRlKVxuXHRcdH0sXG5cdFx0W2N1cnJlbnREYXRlLCB2aWV3LCB1cGRhdGVEYXRlQW5kTm90aWZ5XVxuXHQpXG5cblx0Y29uc3QgbmV4dFBlcmlvZCA9IHVzZUNhbGxiYWNrKCgpID0+IG5hdmlnYXRlUGVyaW9kKDEpLCBbbmF2aWdhdGVQZXJpb2RdKVxuXHRjb25zdCBwcmV2UGVyaW9kID0gdXNlQ2FsbGJhY2soKCkgPT4gbmF2aWdhdGVQZXJpb2QoLTEpLCBbbmF2aWdhdGVQZXJpb2RdKVxuXG5cdGNvbnN0IHRvZGF5ID0gdXNlQ2FsbGJhY2soXG5cdFx0KCkgPT4gdXBkYXRlRGF0ZUFuZE5vdGlmeShkYXlqcygpKSxcblx0XHRbdXBkYXRlRGF0ZUFuZE5vdGlmeV1cblx0KVxuXG5cdGNvbnN0IGFkZEV2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKChwcmV2KSA9PiBbLi4ucHJldiwgZXZlbnRdKVxuXHRcdFx0b25FdmVudEFkZD8uKGV2ZW50KVxuXHRcdH0sXG5cdFx0W29uRXZlbnRBZGRdXG5cdClcblxuXHRjb25zdCB1cGRhdGVFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdGNvbnN0IGV2ZW50VG9VcGRhdGUgPSBjdXJyZW50RXZlbnRzLmZpbmQoKGV2ZW50KSA9PiBldmVudC5pZCA9PT0gZXZlbnRJZClcblx0XHRcdGlmICghZXZlbnRUb1VwZGF0ZSkge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgbmV3RXZlbnQgPSB7IC4uLmV2ZW50VG9VcGRhdGUsIC4uLnVwZGF0ZXMgfVxuXHRcdFx0c2V0Q3VycmVudEV2ZW50cygocHJldikgPT5cblx0XHRcdFx0cHJldi5tYXAoKGV2ZW50KSA9PiAoZXZlbnQuaWQgPT09IGV2ZW50SWQgPyBuZXdFdmVudCA6IGV2ZW50KSlcblx0XHRcdClcblx0XHRcdG9uRXZlbnRVcGRhdGU/LihuZXdFdmVudClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzLCBvbkV2ZW50VXBkYXRlXVxuXHQpXG5cblx0Y29uc3QgdXBkYXRlUmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoXG5cdFx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4sXG5cdFx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0XHQpID0+IHtcblx0XHRcdG9uRXZlbnRVcGRhdGU/Lih7IC4uLmV2ZW50LCAuLi51cGRhdGVzIH0pXG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKFxuXHRcdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudEltcGwoe1xuXHRcdFx0XHRcdHRhcmdldEV2ZW50OiBldmVudCxcblx0XHRcdFx0XHR1cGRhdGVzLFxuXHRcdFx0XHRcdGN1cnJlbnRFdmVudHMsXG5cdFx0XHRcdFx0c2NvcGU6IG9wdGlvbnMuc2NvcGUsXG5cdFx0XHRcdH0pXG5cdFx0XHQpXG5cdFx0fSxcblx0XHRbY3VycmVudEV2ZW50cywgb25FdmVudFVwZGF0ZV1cblx0KVxuXG5cdGNvbnN0IGRlbGV0ZVJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50LCBvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnMpID0+IHtcblx0XHRcdG9uRXZlbnREZWxldGU/LihldmVudClcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoXG5cdFx0XHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50SW1wbCh7XG5cdFx0XHRcdFx0dGFyZ2V0RXZlbnQ6IGV2ZW50LFxuXHRcdFx0XHRcdGN1cnJlbnRFdmVudHMsXG5cdFx0XHRcdFx0c2NvcGU6IG9wdGlvbnMuc2NvcGUsXG5cdFx0XHRcdH0pXG5cdFx0XHQpXG5cdFx0fSxcblx0XHRbY3VycmVudEV2ZW50cywgb25FdmVudERlbGV0ZV1cblx0KVxuXG5cdGNvbnN0IGRlbGV0ZUV2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuXHRcdFx0Y29uc3QgZXZlbnRUb0RlbGV0ZSA9IGN1cnJlbnRFdmVudHMuZmluZCgoZSkgPT4gZS5pZCA9PT0gZXZlbnRJZClcblx0XHRcdGlmICghZXZlbnRUb0RlbGV0ZSkge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblxuXHRcdFx0c2V0Q3VycmVudEV2ZW50cygocHJldikgPT4gcHJldi5maWx0ZXIoKGUpID0+IGUuaWQgIT09IGV2ZW50SWQpKVxuXHRcdFx0b25FdmVudERlbGV0ZT8uKGV2ZW50VG9EZWxldGUpXG5cdFx0fSxcblx0XHRbY3VycmVudEV2ZW50cywgb25FdmVudERlbGV0ZV1cblx0KVxuXG5cdGNvbnN0IG9wZW5FdmVudEZvcm0gPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnREYXRhPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4ge1xuXHRcdFx0aWYgKGV2ZW50RGF0YT8uc3RhcnQpIHtcblx0XHRcdFx0c2V0U2VsZWN0ZWREYXRlKGV2ZW50RGF0YS5zdGFydClcblx0XHRcdH1cblx0XHRcdGNvbnN0IHN0YXJ0ID0gZXZlbnREYXRhPy5zdGFydCA/PyBjdXJyZW50RGF0ZVxuXHRcdFx0c2V0U2VsZWN0ZWRFdmVudCh7XG5cdFx0XHRcdHRpdGxlOiB0KCduZXdFdmVudCcpLFxuXHRcdFx0XHRzdGFydCxcblx0XHRcdFx0ZW5kOiBldmVudERhdGE/LmVuZCA/PyBzdGFydC5hZGQoMSwgJ2hvdXInKSxcblx0XHRcdFx0cmVzb3VyY2VJZDogZXZlbnREYXRhPy5yZXNvdXJjZUlkLFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogJycsXG5cdFx0XHRcdGFsbERheTogZXZlbnREYXRhPy5hbGxEYXkgPz8gZmFsc2UsXG5cdFx0XHR9IGFzIENhbGVuZGFyRXZlbnQpXG5cdFx0XHRzZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcblx0XHR9LFxuXHRcdFtjdXJyZW50RGF0ZSwgdF1cblx0KVxuXG5cdGNvbnN0IGNsb3NlRXZlbnRGb3JtID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdHNldFNlbGVjdGVkRGF0ZShudWxsKVxuXHRcdHNldFNlbGVjdGVkRXZlbnQobnVsbClcblx0XHRzZXRJc0V2ZW50Rm9ybU9wZW4oZmFsc2UpXG5cdH0sIFtdKVxuXG5cdGNvbnN0IGhhbmRsZVZpZXdDaGFuZ2UgPSB1c2VDYWxsYmFjayhcblx0XHQobmV3VmlldzogQ2FsZW5kYXJWaWV3KSA9PiB7XG5cdFx0XHRzZXRWaWV3KG5ld1ZpZXcpXG5cdFx0XHRvblZpZXdDaGFuZ2U/LihuZXdWaWV3KVxuXHRcdFx0Ly8gVmlldyBjaGFuZ2UgYWZmZWN0cyB2aXNpYmxlIHJhbmdlIOKAlCBub3RpZnkgY29uc3VtZXJzXG5cdFx0XHRjb25zdCByYW5nZSA9IGNhbGN1bGF0ZVZpZXdSYW5nZShjdXJyZW50RGF0ZSwgbmV3VmlldywgZmlyc3REYXlPZldlZWspXG5cdFx0XHRvbkRhdGVDaGFuZ2U/LihjdXJyZW50RGF0ZSwgcmFuZ2UpXG5cdFx0fSxcblx0XHRbb25WaWV3Q2hhbmdlLCBvbkRhdGVDaGFuZ2UsIGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCk6IENhbGVuZGFyRXZlbnQgfCBudWxsID0+IHtcblx0XHRcdGNvbnN0IHRhcmdldFVJRCA9IGV2ZW50LnVpZFxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0Y3VycmVudEV2ZW50cy5maW5kKFxuXHRcdFx0XHRcdChlKSA9PiAoZS51aWQgfHwgYCR7ZS5pZH1AaWxhbXkuY2FsZW5kYXJgKSA9PT0gdGFyZ2V0VUlEICYmIGUucnJ1bGVcblx0XHRcdFx0KSB8fCBudWxsXG5cdFx0XHQpXG5cdFx0fSxcblx0XHRbY3VycmVudEV2ZW50c11cblx0KVxuXG5cdHJldHVybiB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0dmlldyxcblx0XHRldmVudHM6IHByb2Nlc3NlZEV2ZW50cyxcblx0XHRyYXdFdmVudHM6IGN1cnJlbnRFdmVudHMsXG5cdFx0aXNFdmVudEZvcm1PcGVuLFxuXHRcdHNlbGVjdGVkRXZlbnQsXG5cdFx0c2VsZWN0ZWREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGRheU1heEV2ZW50czogREFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0XHRjdXJyZW50TG9jYWxlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0c2V0Q3VycmVudERhdGUsXG5cdFx0c2VsZWN0RGF0ZSxcblx0XHRzZXRWaWV3OiBoYW5kbGVWaWV3Q2hhbmdlLFxuXHRcdG5leHRQZXJpb2QsXG5cdFx0cHJldlBlcmlvZCxcblx0XHR0b2RheSxcblx0XHRhZGRFdmVudCxcblx0XHR1cGRhdGVFdmVudCxcblx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudCxcblx0XHRkZWxldGVFdmVudCxcblx0XHRkZWxldGVSZWN1cnJpbmdFdmVudCxcblx0XHRvcGVuRXZlbnRGb3JtLFxuXHRcdGNsb3NlRXZlbnRGb3JtLFxuXHRcdHNldFNlbGVjdGVkRXZlbnQsXG5cdFx0c2V0SXNFdmVudEZvcm1PcGVuLFxuXHRcdHNldFNlbGVjdGVkRGF0ZSxcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LFxuXHRcdHQsXG5cdH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cydcbmltcG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IG9taXRLZXlzLCBzYWZlRGF0ZSB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG4vKipcbiAqIENvbnZlcnRzIGEgRGF5anMgb2JqZWN0IHRvIGEgXCJGbG9hdGluZyBUaW1lXCIgRGF0ZSByZXByZXNlbnRhdGlvbi5cbiAqIEluIEZsb2F0aW5nIFRpbWUsIHdlIHVzZSBhIFVUQyBEYXRlIG9iamVjdCBidXQgc2V0IGl0cyBVVEMgY29tcG9uZW50c1xuICogdG8gbWF0Y2ggdGhlIGxvY2FsIGNvbXBvbmVudHMgb2YgdGhlIHVzZXIncyBkYXRlLlxuICpcbiAqIFRoaXMgaXMgZXNzZW50aWFsIGZvciBSUnVsZSBldmFsdWF0aW9uIGJlY2F1c2UgaXQgZW5zdXJlcyB0aGF0IGEgcnVsZVxuICogbGlrZSBcIkV2ZXJ5IFdlZG5lc2RheVwiIHJlZmVycyB0byB0aGUgdXNlcidzIGxvY2FsIFdlZG5lc2RheSwgZXZlbiBpZlxuICogdGhhdCB0aW1lIGZhbGxzIG9uIGEgVGh1cnNkYXkgaW4gYWN0dWFsIFVUQy5cbiAqL1xuY29uc3QgdG9GbG9hdGluZ0RhdGUgPSAoZDogRGF5anMpOiBEYXRlID0+IHtcblx0cmV0dXJuIG5ldyBEYXRlKFxuXHRcdERhdGUuVVRDKFxuXHRcdFx0ZC55ZWFyKCksXG5cdFx0XHRkLm1vbnRoKCksXG5cdFx0XHRkLmRhdGUoKSxcblx0XHRcdGQuaG91cigpLFxuXHRcdFx0ZC5taW51dGUoKSxcblx0XHRcdGQuc2Vjb25kKCksXG5cdFx0XHRkLm1pbGxpc2Vjb25kKClcblx0XHQpXG5cdClcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIFwiRmxvYXRpbmcgVGltZVwiIERhdGUgYmFjayB0byBhIERheWpzIG9iamVjdCBpbiB0aGUgb3JpZ2luYWwgY29udGV4dC5cbiAqIEl0IHRha2VzIHRoZSBZTURITVMgY29tcG9uZW50cyBmcm9tIHRoZSBVVEMgRGF0ZSBhbmQgYXBwbGllcyB0aGVtIHRvIHRoZVxuICogcmVmZXJlbmNlIERheWpzIG9iamVjdCAocHJlc2VydmluZyBpdHMgdGltZXpvbmUvbG9jYWxlKS5cbiAqL1xuY29uc3QgZnJvbUZsb2F0aW5nRGF0ZSA9IChkYXRlOiBEYXRlLCByZWZlcmVuY2U6IERheWpzKTogRGF5anMgPT4ge1xuXHRyZXR1cm4gcmVmZXJlbmNlXG5cdFx0LnllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpKVxuXHRcdC5tb250aChkYXRlLmdldFVUQ01vbnRoKCkpXG5cdFx0LmRhdGUoZGF0ZS5nZXRVVENEYXRlKCkpXG5cdFx0LmhvdXIoZGF0ZS5nZXRVVENIb3VycygpKVxuXHRcdC5taW51dGUoZGF0ZS5nZXRVVENNaW51dGVzKCkpXG5cdFx0LnNlY29uZChkYXRlLmdldFVUQ1NlY29uZHMoKSlcblx0XHQubWlsbGlzZWNvbmQoZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKSlcbn1cblxuZXhwb3J0IGNvbnN0IGlzUmVjdXJyaW5nRXZlbnQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBib29sZWFuID0+IHtcblx0cmV0dXJuIEJvb2xlYW4oZXZlbnQucnJ1bGUgfHwgZXZlbnQucmVjdXJyZW5jZUlkIHx8IGV2ZW50LnVpZClcbn1cblxuLyoqXG4gKiBDb25zaXN0ZW50bHkgZGVyaXZlcyBhIHBhcmVudCBVSUQgZnJvbSBhbiBldmVudC5cbiAqIFVzZXMgdGhlIGV4cGxpY2l0IGB1aWRgIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGxzIGJhY2sgdG8gYCR7aWR9QGlsYW15LmNhbGVuZGFyYC5cbiAqL1xuY29uc3QgZ2V0RXZlbnRQYXJlbnRVSUQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gZXZlbnQudWlkIHx8IGAke2V2ZW50LmlkfUBpbGFteS5jYWxlbmRhcmBcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnQgKHRoZSBvbmUgd2l0aCBycnVsZSBhbmQgbm8gcmVjdXJyZW5jZUlkKVxuICogdGhhdCBzaGFyZXMgdGhlIHNhbWUgcGFyZW50IFVJRCBhcyB0aGUgdGFyZ2V0IGV2ZW50LlxuICogVGhyb3dzIGlmIG5vdCBmb3VuZCDigJQgY2FsbGVycyBhc3N1bWUgdGhlIHNlcmllcyBleGlzdHMuXG4gKi9cbmNvbnN0IGZpbmRCYXNlRXZlbnRJbmRleCA9IChcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W10sXG5cdHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG4pOiBudW1iZXIgPT4ge1xuXHRjb25zdCB0YXJnZXRVaWQgPSBnZXRFdmVudFBhcmVudFVJRCh0YXJnZXRFdmVudClcblx0Y29uc3QgaW5kZXggPSBldmVudHMuZmluZEluZGV4KFxuXHRcdChlKSA9PiBnZXRFdmVudFBhcmVudFVJRChlKSA9PT0gdGFyZ2V0VWlkICYmIGUucnJ1bGUgJiYgIWUucmVjdXJyZW5jZUlkXG5cdClcblx0aWYgKGluZGV4ID09PSAtMSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignQmFzZSByZWN1cnJpbmcgZXZlbnQgbm90IGZvdW5kJylcblx0fVxuXHRyZXR1cm4gaW5kZXhcbn1cblxuLyoqXG4gKiBGb3IgdGhlIFwiZm9sbG93aW5nXCIgc2NvcGU6IHRoZSBVTlRJTCBkYXRlIHRoYXQgdGVybWluYXRlcyB0aGUgb3JpZ2luYWxcbiAqIHNlcmllcyBpcyB0aGUgZW5kIG9mIHRoZSBkYXkgQkVGT1JFIHRoZSB0YXJnZXQgZXZlbnQncyBzdGFydC4gVGhpcyBrZWVwc1xuICogdGhlIGxhc3QgcHJlLXRhcmdldCBvY2N1cnJlbmNlIGluIHRoZSB0ZXJtaW5hdGVkIHNlcmllcy5cbiAqL1xuY29uc3QgZ2V0U2VyaWVzVGVybWluYXRpb25EYXRlID0gKHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50KTogRGF0ZSA9PlxuXHR0YXJnZXRFdmVudC5zdGFydC5zdWJ0cmFjdCgxLCAnZGF5JykuZW5kT2YoJ2RheScpLnRvRGF0ZSgpXG5cbmludGVyZmFjZSBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzIHtcblx0ZXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0Y3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHN0YXJ0RGF0ZTogRGF5anNcblx0ZW5kRGF0ZTogRGF5anNcbn1cblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzID0gKHtcblx0ZXZlbnQsXG5cdGN1cnJlbnRFdmVudHMsXG5cdHN0YXJ0RGF0ZSxcblx0ZW5kRGF0ZSxcbn06IEdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzUHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHQvLyBJZiBub3QgYSByZWN1cnJpbmcgZXZlbnQsIHJldHVybiBlbXB0eSBhcnJheVxuXHRpZiAoIWV2ZW50LnJydWxlKSB7XG5cdFx0cmV0dXJuIFtdXG5cdH1cblxuXHR0cnkge1xuXHRcdC8vIERUU1RBUlQgYW5kIFNFQVJDSCBXSU5ET1cgVFJBTlNGT1JNQVRJT05cblx0XHQvLyBUcmFuc2Zvcm0gYWxsIGRhdGVzIHRvIFwiZmxvYXRpbmcgdGltZVwiIChVVEMgd2l0aCBsb2NhbCBjb21wb25lbnRzKVxuXHRcdC8vIFRoaXMgZW5zdXJlcyBSUnVsZSBldmFsdWF0ZXMgXCJXZWRuZXNkYXlcIiBhcyB0aGUgdXNlcidzIGxvY2FsIFdlZG5lc2RheVxuXHRcdGNvbnN0IGZsb2F0aW5nU3RhcnQgPSB0b0Zsb2F0aW5nRGF0ZShldmVudC5zdGFydClcblx0XHRjb25zdCBmbG9hdGluZ1VudGlsID0gZXZlbnQucnJ1bGUudW50aWxcblx0XHRcdD8gdG9GbG9hdGluZ0RhdGUoZGF5anMoZXZlbnQucnJ1bGUudW50aWwpKVxuXHRcdFx0OiB1bmRlZmluZWRcblxuXHRcdGNvbnN0IHJ1bGVPcHRpb25zOiBSUnVsZU9wdGlvbnMgPSB7XG5cdFx0XHQuLi5ldmVudC5ycnVsZSxcblx0XHRcdGR0c3RhcnQ6IGZsb2F0aW5nU3RhcnQsXG5cdFx0XHR1bnRpbDogZmxvYXRpbmdVbnRpbCxcblx0XHR9XG5cdFx0Y29uc3QgcnVsZSA9IG5ldyBSUnVsZShydWxlT3B0aW9ucylcblxuXHRcdGNvbnN0IHBhcmVudFVpZCA9IGdldEV2ZW50UGFyZW50VUlEKGV2ZW50KVxuXHRcdGNvbnN0IG92ZXJyaWRlcyA9IGN1cnJlbnRFdmVudHMuZmlsdGVyKFxuXHRcdFx0KGUpID0+IGUucmVjdXJyZW5jZUlkICYmIGdldEV2ZW50UGFyZW50VUlEKGUpID09PSBwYXJlbnRVaWRcblx0XHQpXG5cblx0XHQvLyBDYWxjdWxhdGUgZXZlbnQgZHVyYXRpb24gdG8gZXhwYW5kIHNlYXJjaCB3aW5kb3cgZm9yIGV2ZW50cyB0aGF0IHNwYW4gdGhlIHJhbmdlXG5cdFx0Y29uc3QgZXZlbnREdXJhdGlvbiA9IGV2ZW50LmVuZC5kaWZmKGV2ZW50LnN0YXJ0KVxuXG5cdFx0Ly8gRXhwYW5kIHNlYXJjaCB3aW5kb3cgYmFja3dhcmQgYnkgZXZlbnQgZHVyYXRpb24gdG8gY2F0Y2ggZXZlbnRzIHRoYXQgc3RhcnQgYmVmb3JlXG5cdFx0Ly8gdGhlIHJhbmdlIGJ1dCBzcGFuIGludG8gaXRcblx0XHRjb25zdCBleHBhbmRlZFN0YXJ0RGF0ZVRpbWUgPSB0b0Zsb2F0aW5nRGF0ZShcblx0XHRcdHN0YXJ0RGF0ZS5zdWJ0cmFjdChldmVudER1cmF0aW9uLCAnbWlsbGlzZWNvbmQnKVxuXHRcdClcblx0XHRjb25zdCBlbmREYXRlVGltZSA9IHRvRmxvYXRpbmdEYXRlKGVuZERhdGUpXG5cblx0XHQvLyBHZXQgYWxsIG9jY3VycmVuY2VzIGluIHRoZSBleHBhbmRlZCByYW5nZVxuXHRcdGNvbnN0IG9jY3VycmVuY2VzID0gcnVsZS5iZXR3ZWVuKGV4cGFuZGVkU3RhcnREYXRlVGltZSwgZW5kRGF0ZVRpbWUsIHRydWUpXG5cblx0XHQvLyBDb252ZXJ0IG9jY3VycmVuY2VzIHRvIENhbGVuZGFyRXZlbnQgaW5zdGFuY2VzXG5cdFx0Y29uc3QgcmVjdXJyaW5nRXZlbnRzOiBDYWxlbmRhckV2ZW50W10gPSBvY2N1cnJlbmNlc1xuXHRcdFx0Lm1hcCgob2NjdXJyZW5jZSwgaW5kZXgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb2NjdXJyZW5jZURhdGUgPSBmcm9tRmxvYXRpbmdEYXRlKG9jY3VycmVuY2UsIGV2ZW50LnN0YXJ0KVxuXHRcdFx0XHRjb25zdCBleGlzdGluZ092ZXJyaWRlID0gb3ZlcnJpZGVzLmZpbmQoKGUpID0+XG5cdFx0XHRcdFx0c2FmZURhdGUoZS5yZWN1cnJlbmNlSWQpPy5pc1NhbWUob2NjdXJyZW5jZURhdGUpXG5cdFx0XHRcdClcblxuXHRcdFx0XHQvLyBJZiB0aGVyZSdzIGFuIG92ZXJyaWRlLCB1c2UgaXRcblx0XHRcdFx0aWYgKGV4aXN0aW5nT3ZlcnJpZGUpIHtcblx0XHRcdFx0XHRyZXR1cm4geyAuLi5ldmVudCwgLi4uZXhpc3RpbmdPdmVycmlkZSB9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDYWxjdWxhdGUgdGhlIGR1cmF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIGV2ZW50XG5cdFx0XHRcdGNvbnN0IG9yaWdpbmFsRHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcblx0XHRcdFx0Y29uc3QgbmV3RW5kVGltZSA9IG9jY3VycmVuY2VEYXRlLmFkZChvcmlnaW5hbER1cmF0aW9uLCAnbWlsbGlzZWNvbmQnKVxuXHRcdFx0XHRjb25zdCByZWN1cnJpbmdFdmVudElkID0gYCR7ZXZlbnQuaWR9XyR7aW5kZXh9YFxuXHRcdFx0XHRjb25zdCBwYXJlbnRVSUQgPSBnZXRFdmVudFBhcmVudFVJRChldmVudClcblxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIHJlY3VycmluZyBldmVudCBpbnN0YW5jZVxuXHRcdFx0XHRjb25zdCByZWN1cnJpbmdFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0XHRpZDogcmVjdXJyaW5nRXZlbnRJZCxcblx0XHRcdFx0XHRzdGFydDogb2NjdXJyZW5jZURhdGUsXG5cdFx0XHRcdFx0ZW5kOiBuZXdFbmRUaW1lLFxuXHRcdFx0XHRcdHVpZDogcGFyZW50VUlELCAvLyBTYW1lIFVJRCBhcyBwYXJlbnQgZm9yIHByb3BlciBncm91cGluZ1xuXHRcdFx0XHRcdHJydWxlOiB1bmRlZmluZWQsIC8vIEluc3RhbmNlIGV2ZW50cyBkb24ndCBoYXZlIFJSVUxFXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVjdXJyaW5nRXZlbnRcblx0XHRcdH0pXG5cdFx0XHQuZmlsdGVyKChyZWN1cnJpbmdFdmVudCkgPT4ge1xuXHRcdFx0XHQvLyBGaWx0ZXIgb3V0IEVYREFURSBleGNsdXNpb25zXG5cdFx0XHRcdGNvbnN0IGhhc0V4ZGF0ZXMgPSBldmVudC5leGRhdGVzICYmIGV2ZW50LmV4ZGF0ZXMubGVuZ3RoID4gMFxuXHRcdFx0XHRpZiAoaGFzRXhkYXRlcykge1xuXHRcdFx0XHRcdGNvbnN0IGV2ZW50U3RhcnRJU08gPSByZWN1cnJpbmdFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG5cdFx0XHRcdFx0Y29uc3QgaXNFeGNsdWRlZCA9IGV2ZW50LmV4ZGF0ZXM/LmluY2x1ZGVzKGV2ZW50U3RhcnRJU08pXG5cdFx0XHRcdFx0aWYgKGlzRXhjbHVkZWQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEZpbHRlciB0byBvbmx5IGluY2x1ZGUgZXZlbnRzIHRoYXQgc3BhbiB0aHJvdWdoIHRoZSBvcmlnaW5hbCByZXF1ZXN0ZWQgZGF0ZSByYW5nZVxuXHRcdFx0XHQvLyBBbiBldmVudCBzcGFucyB0aGUgcmFuZ2UgaWY6IGV2ZW50X3N0YXJ0IDwgcmFuZ2VfZW5kIEFORCBldmVudF9lbmQgPiByYW5nZV9zdGFydFxuXHRcdFx0XHQvLyBVc2UgaXNTYW1lT3JCZWZvcmUvaXNTYW1lT3JBZnRlciB0byBpbmNsdWRlIGJvdW5kYXJ5IGNhc2VzXG5cdFx0XHRcdGNvbnN0IGV2ZW50U3BhbnNSYW5nZSA9XG5cdFx0XHRcdFx0cmVjdXJyaW5nRXZlbnQuc3RhcnQuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSkgJiZcblx0XHRcdFx0XHRyZWN1cnJpbmdFdmVudC5lbmQuaXNTYW1lT3JBZnRlcihzdGFydERhdGUpXG5cblx0XHRcdFx0cmV0dXJuIGV2ZW50U3BhbnNSYW5nZVxuXHRcdFx0fSlcblxuXHRcdHJldHVybiByZWN1cnJpbmdFdmVudHNcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBIYW5kbGUgaW52YWxpZCBSUlVMRSBvcHRpb25zXG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0YEludmFsaWQgUlJVTEUgb3B0aW9uczogJHtKU09OLnN0cmluZ2lmeShldmVudC5ycnVsZSl9LiBFcnJvcjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG5cdFx0KVxuXHR9XG59XG5cbmludGVyZmFjZSBVcGRhdGVSZWN1cnJpbmdFdmVudFByb3BzIHtcblx0dGFyZ2V0RXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHRjdXJyZW50RXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0c2NvcGU6ICd0aGlzJyB8ICdmb2xsb3dpbmcnIHwgJ2FsbCdcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVJlY3VycmluZ0V2ZW50ID0gKHtcblx0dGFyZ2V0RXZlbnQsXG5cdHVwZGF0ZXMsXG5cdGN1cnJlbnRFdmVudHMsXG5cdHNjb3BlLFxufTogVXBkYXRlUmVjdXJyaW5nRXZlbnRQcm9wcyk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdGNvbnN0IHVwZGF0ZWRFdmVudHMgPSBbLi4uY3VycmVudEV2ZW50c11cblx0Y29uc3QgYmFzZUV2ZW50SW5kZXggPSBmaW5kQmFzZUV2ZW50SW5kZXgodXBkYXRlZEV2ZW50cywgdGFyZ2V0RXZlbnQpXG5cdGNvbnN0IGJhc2VFdmVudCA9IHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdXG5cblx0c3dpdGNoIChzY29wZSkge1xuXHRcdGNhc2UgJ3RoaXMnOiB7XG5cdFx0XHQvLyBcIlRoaXMgZXZlbnQgb25seVwiIC0gQWRkIEVYREFURSB0byBiYXNlIGV2ZW50IGFuZCBjcmVhdGUgc3RhbmRhbG9uZSBtb2RpZmllZCBldmVudFxuXHRcdFx0Y29uc3QgdGFyZ2V0RXZlbnRTdGFydElTTyA9IHRhcmdldEV2ZW50LnN0YXJ0LnRvSVNPU3RyaW5nKClcblx0XHRcdGNvbnN0IGV4aXN0aW5nRXhkYXRlcyA9IGJhc2VFdmVudC5leGRhdGVzIHx8IFtdXG5cdFx0XHRjb25zdCB1cGRhdGVkRXhkYXRlcyA9IFsuLi5leGlzdGluZ0V4ZGF0ZXMsIHRhcmdldEV2ZW50U3RhcnRJU09dXG5cblx0XHRcdGNvbnN0IHVwZGF0ZWRCYXNlRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0ZXhkYXRlczogdXBkYXRlZEV4ZGF0ZXMsXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHVwZGF0ZWRCYXNlRXZlbnRcblxuXHRcdFx0Ly8gQ3JlYXRlIHN0YW5kYWxvbmUgbW9kaWZpZWQgZXZlbnQgd2l0aCByZWN1cnJlbmNlSWRcblx0XHRcdGNvbnN0IG1vZGlmaWVkRXZlbnRJZCA9IGAke3RhcmdldEV2ZW50LmlkfV9tb2RpZmllZF8ke0RhdGUubm93KCl9YFxuXHRcdFx0Y29uc3QgbW9kaWZpZWRFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciBUT0RPOiBmaXggdGhlIHR5cGVzXG5cdFx0XHRcdC4uLm9taXRLZXlzKHRhcmdldEV2ZW50LCBbJ3dpZHRoJywgJ2hlaWdodCcsICd0b3AnLCAnbGVmdCcsICdyaWdodCddKSxcblx0XHRcdFx0Li4udXBkYXRlcyxcblx0XHRcdFx0aWQ6IG1vZGlmaWVkRXZlbnRJZCxcblx0XHRcdFx0cmVjdXJyZW5jZUlkOiB0YXJnZXRFdmVudFN0YXJ0SVNPLCAvLyBUaGlzIG1hcmtzIGl0IGFzIGEgbW9kaWZpZWQgaW5zdGFuY2Vcblx0XHRcdFx0dWlkOiBnZXRFdmVudFBhcmVudFVJRChiYXNlRXZlbnQpLCAvLyBLZWVwIHNhbWUgVUlEIGFzIGJhc2UgZXZlbnQgKGlDYWxlbmRhciBzdGFuZGFyZClcblx0XHRcdFx0cnJ1bGU6IHVuZGVmaW5lZCwgLy8gU3RhbmRhbG9uZSBldmVudHMgZG9uJ3QgaGF2ZSBSUlVMRVxuXHRcdFx0fSBhcyBDYWxlbmRhckV2ZW50XG5cdFx0XHR1cGRhdGVkRXZlbnRzLnB1c2gobW9kaWZpZWRFdmVudClcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y2FzZSAnZm9sbG93aW5nJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGFuZCBmb2xsb3dpbmdcIiAtIFRlcm1pbmF0ZSBvcmlnaW5hbCBzZXJpZXMgYW5kIGNyZWF0ZSBuZXcgc2VyaWVzXG5cdFx0XHRjb25zdCB0ZXJtaW5hdGlvbkRhdGUgPSBnZXRTZXJpZXNUZXJtaW5hdGlvbkRhdGUodGFyZ2V0RXZlbnQpXG5cblx0XHRcdC8vIFVwZGF0ZSBvcmlnaW5hbCBzZXJpZXMgd2l0aCBVTlRJTCB0byBlbmQgYmVmb3JlIHRhcmdldCBkYXRlXG5cdFx0XHRjb25zdCB0ZXJtaW5hdGVkRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0cnJ1bGU6IHtcblx0XHRcdFx0XHQuLi5iYXNlRXZlbnQucnJ1bGUsXG5cdFx0XHRcdFx0dW50aWw6IHRlcm1pbmF0aW9uRGF0ZSxcblx0XHRcdFx0fSBhcyBSUnVsZU9wdGlvbnMsXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHRlcm1pbmF0ZWRFdmVudFxuXG5cdFx0XHQvLyBDcmVhdGUgbmV3IHNlcmllcyBzdGFydGluZyBmcm9tIHRhcmdldCBkYXRlXG5cdFx0XHRjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gYmFzZUV2ZW50LmVuZC5kaWZmKGJhc2VFdmVudC5zdGFydClcblx0XHRcdGNvbnN0IG5ld1Nlcmllc1N0YXJ0VGltZSA9IHVwZGF0ZXMuc3RhcnQgfHwgdGFyZ2V0RXZlbnQuc3RhcnRcblx0XHRcdGNvbnN0IG5ld1Nlcmllc0VuZFRpbWUgPVxuXHRcdFx0XHR1cGRhdGVzLmVuZCB8fCBuZXdTZXJpZXNTdGFydFRpbWUuYWRkKG9yaWdpbmFsRHVyYXRpb24pXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNJZCA9IGAke2Jhc2VFdmVudC5pZH1fZm9sbG93aW5nYFxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzVUlEID0gYCR7bmV3U2VyaWVzSWR9QGlsYW15LmNhbGVuZGFyYFxuXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHQuLi51cGRhdGVzLFxuXHRcdFx0XHRycnVsZToge1xuXHRcdFx0XHRcdC4uLmJhc2VFdmVudC5ycnVsZSxcblx0XHRcdFx0XHQuLi51cGRhdGVzLnJydWxlLFxuXHRcdFx0XHRcdGR0c3RhcnQ6IG5ld1Nlcmllc1N0YXJ0VGltZS50b0RhdGUoKSxcblx0XHRcdFx0fSBhcyBSUnVsZU9wdGlvbnMsXG5cdFx0XHRcdGlkOiBuZXdTZXJpZXNJZCxcblx0XHRcdFx0dWlkOiBuZXdTZXJpZXNVSUQsIC8vIE5ldyBVSUQgZm9yIG5ldyBzZXJpZXNcblx0XHRcdFx0c3RhcnQ6IG5ld1Nlcmllc1N0YXJ0VGltZSxcblx0XHRcdFx0ZW5kOiBuZXdTZXJpZXNFbmRUaW1lLFxuXHRcdFx0XHRyZWN1cnJlbmNlSWQ6IHVuZGVmaW5lZCwgLy8gVGhpcyBpcyBhIG5ldyBiYXNlIGV2ZW50LCBub3QgYW4gaW5zdGFuY2Vcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHMucHVzaChuZXdTZXJpZXNFdmVudClcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y2FzZSAnYWxsJzoge1xuXHRcdFx0Ly8gXCJBbGwgZXZlbnRzXCIgLSBVcGRhdGUgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50XG5cdFx0XHRjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdC4uLnVwZGF0ZXMsXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHVwZGF0ZWRCYXNlRXZlbnRcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0YEludmFsaWQgc2NvcGU6ICR7c2NvcGV9LiBNdXN0IGJlICd0aGlzJywgJ2ZvbGxvd2luZycsIG9yICdhbGwnYFxuXHRcdFx0KVxuXHR9XG5cblx0cmV0dXJuIHVwZGF0ZWRFdmVudHNcbn1cblxuaW50ZXJmYWNlIERlbGV0ZVJlY3VycmluZ0V2ZW50UHJvcHMge1xuXHR0YXJnZXRFdmVudDogQ2FsZW5kYXJFdmVudFxuXHRjdXJyZW50RXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0c2NvcGU6ICd0aGlzJyB8ICdmb2xsb3dpbmcnIHwgJ2FsbCdcbn1cblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVJlY3VycmluZ0V2ZW50ID0gKHtcblx0dGFyZ2V0RXZlbnQsXG5cdGN1cnJlbnRFdmVudHMsXG5cdHNjb3BlLFxufTogRGVsZXRlUmVjdXJyaW5nRXZlbnRQcm9wcyk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdGNvbnN0IHVwZGF0ZWRFdmVudHMgPSBbLi4uY3VycmVudEV2ZW50c11cblx0Y29uc3QgYmFzZUV2ZW50SW5kZXggPSBmaW5kQmFzZUV2ZW50SW5kZXgodXBkYXRlZEV2ZW50cywgdGFyZ2V0RXZlbnQpXG5cdGNvbnN0IGJhc2VFdmVudCA9IHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdXG5cblx0c3dpdGNoIChzY29wZSkge1xuXHRcdGNhc2UgJ3RoaXMnOiB7XG5cdFx0XHQvLyBcIlRoaXMgZXZlbnQgb25seVwiIC0gQWRkIEVYREFURSB0byBleGNsdWRlIHRoaXMgb2NjdXJyZW5jZVxuXHRcdFx0Y29uc3QgdGFyZ2V0RXZlbnRTdGFydElTTyA9IHRhcmdldEV2ZW50LnN0YXJ0LnRvSVNPU3RyaW5nKClcblx0XHRcdGNvbnN0IGV4aXN0aW5nRXhkYXRlcyA9IGJhc2VFdmVudC5leGRhdGVzIHx8IFtdXG5cdFx0XHRjb25zdCB1cGRhdGVkRXhkYXRlcyA9IFsuLi5leGlzdGluZ0V4ZGF0ZXMsIHRhcmdldEV2ZW50U3RhcnRJU09dXG5cblx0XHRcdGNvbnN0IHVwZGF0ZWRCYXNlRXZlbnQgPSB7IC4uLmJhc2VFdmVudCwgZXhkYXRlczogdXBkYXRlZEV4ZGF0ZXMgfVxuXHRcdFx0dXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGNhc2UgJ2ZvbGxvd2luZyc6IHtcblx0XHRcdC8vIFwiVGhpcyBhbmQgZm9sbG93aW5nXCIgLSBUZXJtaW5hdGUgc2VyaWVzIHdpdGggVU5USUwgYmVmb3JlIHRhcmdldCBkYXRlXG5cdFx0XHRjb25zdCB0ZXJtaW5hdGVkRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0cnJ1bGU6IHtcblx0XHRcdFx0XHQuLi5iYXNlRXZlbnQucnJ1bGUsXG5cdFx0XHRcdFx0dW50aWw6IGdldFNlcmllc1Rlcm1pbmF0aW9uRGF0ZSh0YXJnZXRFdmVudCksXG5cdFx0XHRcdH0gYXMgUlJ1bGVPcHRpb25zLFxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB0ZXJtaW5hdGVkRXZlbnRcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y2FzZSAnYWxsJzoge1xuXHRcdFx0Ly8gXCJBbGwgZXZlbnRzXCIgLSBSZW1vdmUgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzXG5cdFx0XHRjb25zdCB0YXJnZXRVaWQgPSBnZXRFdmVudFBhcmVudFVJRCh0YXJnZXRFdmVudClcblx0XHRcdGNvbnN0IGV2ZW50c1dpdGhvdXRUYXJnZXRTZXJpZXMgPSB1cGRhdGVkRXZlbnRzLmZpbHRlcihcblx0XHRcdFx0KGUpID0+IGdldEV2ZW50UGFyZW50VUlEKGUpICE9PSB0YXJnZXRVaWRcblx0XHRcdClcblx0XHRcdHJldHVybiBldmVudHNXaXRob3V0VGFyZ2V0U2VyaWVzXG5cdFx0fVxuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0YEludmFsaWQgc2NvcGU6ICR7c2NvcGV9LiBNdXN0IGJlICd0aGlzJywgJ2ZvbGxvd2luZycsIG9yICdhbGwnYFxuXHRcdFx0KVxuXHR9XG5cblx0cmV0dXJuIHVwZGF0ZWRFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnMgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25zID0ge1xuXHQvLyBDb21tb24gYWN0aW9uc1xuXHR0b2RheTogJ1RvZGF5Jyxcblx0Y3JlYXRlOiAnQ3JlYXRlJyxcblx0bmV3OiAnTmV3Jyxcblx0dXBkYXRlOiAnVXBkYXRlJyxcblx0ZGVsZXRlOiAnRGVsZXRlJyxcblx0Y2FuY2VsOiAnQ2FuY2VsJyxcblx0ZXhwb3J0OiAnRXhwb3J0JyxcblxuXHQvLyBFdmVudCByZWxhdGVkXG5cdGV2ZW50OiAnRXZlbnQnLFxuXHRldmVudHM6ICdFdmVudHMnLFxuXHRuZXdFdmVudDogJ05ldyBFdmVudCcsXG5cdHRpdGxlOiAnVGl0bGUnLFxuXHRkZXNjcmlwdGlvbjogJ0Rlc2NyaXB0aW9uJyxcblx0bG9jYXRpb246ICdMb2NhdGlvbicsXG5cdGFsbERheTogJ0FsbCBkYXknLFxuXHRzdGFydERhdGU6ICdTdGFydCBEYXRlJyxcblx0ZW5kRGF0ZTogJ0VuZCBEYXRlJyxcblx0c3RhcnRUaW1lOiAnU3RhcnQgVGltZScsXG5cdHNlYXJjaFRpbWU6ICdTZWFyY2ggdGltZS4uLicsXG5cdGVuZFRpbWU6ICdFbmQgVGltZScsXG5cdGNvbG9yOiAnQ29sb3InLFxuXG5cdC8vIEV2ZW50IGZvcm1cblx0Y3JlYXRlRXZlbnQ6ICdDcmVhdGUgRXZlbnQnLFxuXHRlZGl0RXZlbnQ6ICdFZGl0IEV2ZW50Jyxcblx0YWRkTmV3RXZlbnQ6ICdBZGQgYSBuZXcgZXZlbnQgdG8geW91ciBjYWxlbmRhcicsXG5cdGVkaXRFdmVudERldGFpbHM6ICdFZGl0IHlvdXIgZXZlbnQgZGV0YWlscycsXG5cdGV2ZW50VGl0bGVQbGFjZWhvbGRlcjogJ0V2ZW50IHRpdGxlJyxcblx0ZXZlbnREZXNjcmlwdGlvblBsYWNlaG9sZGVyOiAnRXZlbnQgZGVzY3JpcHRpb24gKG9wdGlvbmFsKScsXG5cdGV2ZW50TG9jYXRpb25QbGFjZWhvbGRlcjogJ0V2ZW50IGxvY2F0aW9uIChvcHRpb25hbCknLFxuXG5cdC8vIFJlY3VycmVuY2Vcblx0cmVwZWF0OiAnUmVwZWF0Jyxcblx0cmVwZWF0czogJ1JlcGVhdHMnLFxuXHRjdXN0b21SZWN1cnJlbmNlOiAnQ3VzdG9tIHJlY3VycmVuY2UnLFxuXHRkYWlseTogJ0RhaWx5Jyxcblx0d2Vla2x5OiAnV2Vla2x5Jyxcblx0bW9udGhseTogJ01vbnRobHknLFxuXHR5ZWFybHk6ICdZZWFybHknLFxuXHRpbnRlcnZhbDogJ0ludGVydmFsJyxcblx0cmVwZWF0T246ICdSZXBlYXQgb24nLFxuXHRuZXZlcjogJ05ldmVyJyxcblx0Y291bnQ6ICdDb3VudCcsXG5cdGV2ZXJ5OiAnRXZlcnknLFxuXHRlbmRzOiAnRW5kcycsXG5cdGFmdGVyOiAnQWZ0ZXInLFxuXHRvY2N1cnJlbmNlczogJ29jY3VycmVuY2VzJyxcblx0b246ICdPbicsXG5cblx0Ly8gUmVjdXJyZW5jZSBlZGl0IGRpYWxvZ1xuXHRlZGl0UmVjdXJyaW5nRXZlbnQ6ICdFZGl0IHJlY3VycmluZyBldmVudCcsXG5cdGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAnRGVsZXRlIHJlY3VycmluZyBldmVudCcsXG5cdGVkaXRSZWN1cnJpbmdFdmVudFF1ZXN0aW9uOlxuXHRcdCdpcyBhIHJlY3VycmluZyBldmVudC4gSG93IHdvdWxkIHlvdSBsaWtlIHRvIGVkaXQgaXQ/Jyxcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnRRdWVzdGlvbjpcblx0XHQnaXMgYSByZWN1cnJpbmcgZXZlbnQuIEhvdyB3b3VsZCB5b3UgbGlrZSB0byBkZWxldGUgaXQ/Jyxcblx0dGhpc0V2ZW50OiAnVGhpcyBldmVudCcsXG5cdHRoaXNFdmVudERlc2NyaXB0aW9uOiAnT25seSBjaGFuZ2UgdGhpcyBzcGVjaWZpYyBvY2N1cnJlbmNlJyxcblx0dGhpc0FuZEZvbGxvd2luZ0V2ZW50czogJ1RoaXMgYW5kIGZvbGxvd2luZyBldmVudHMnLFxuXHR0aGlzQW5kRm9sbG93aW5nRXZlbnRzRGVzY3JpcHRpb246ICdFZGl0IHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRhbGxFdmVudHM6ICdBbGwgZXZlbnRzJyxcblx0YWxsRXZlbnRzRGVzY3JpcHRpb246ICdFZGl0IHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllcycsXG5cdG9ubHlDaGFuZ2VUaGlzOiAnT25seSBjaGFuZ2UgdGhpcyBzcGVjaWZpYyBvY2N1cnJlbmNlJyxcblx0Y2hhbmdlVGhpc0FuZEZ1dHVyZTogJ0NoYW5nZSB0aGlzIGFuZCBhbGwgZnV0dXJlIG9jY3VycmVuY2VzJyxcblx0Y2hhbmdlRW50aXJlU2VyaWVzOiAnQ2hhbmdlIHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllcycsXG5cdG9ubHlEZWxldGVUaGlzOiAnT25seSBkZWxldGUgdGhpcyBzcGVjaWZpYyBvY2N1cnJlbmNlJyxcblx0ZGVsZXRlVGhpc0FuZEZ1dHVyZTogJ0RlbGV0ZSB0aGlzIGFuZCBhbGwgZnV0dXJlIG9jY3VycmVuY2VzJyxcblx0ZGVsZXRlRW50aXJlU2VyaWVzOiAnRGVsZXRlIHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllcycsXG5cblx0Ly8gVmlldyB0eXBlc1xuXHRtb250aDogJ01vbnRoJyxcblx0d2VlazogJ1dlZWsnLFxuXHRkYXk6ICdEYXknLFxuXHR5ZWFyOiAnWWVhcicsXG5cdG1vcmU6ICdtb3JlJyxcblxuXHQvLyBSZXNvdXJjZSBjYWxlbmRhclxuXHRyZXNvdXJjZXM6ICdSZXNvdXJjZXMnLFxuXHRyZXNvdXJjZTogJ1Jlc291cmNlJyxcblx0dGltZTogJ1RpbWUnLFxuXHRkYXRlOiAnRGF0ZScsXG5cdG5vUmVzb3VyY2VzVmlzaWJsZTogJ05vIHJlc291cmNlcyB2aXNpYmxlJyxcblx0YWRkUmVzb3VyY2VzT3JTaG93RXhpc3Rpbmc6ICdBZGQgcmVzb3VyY2VzIG9yIHNob3cgZXhpc3Rpbmcgb25lcycsXG5cblx0Ly8gRGF5cyBvZiB3ZWVrXG5cdHN1bmRheTogJ1N1bmRheScsXG5cdG1vbmRheTogJ01vbmRheScsXG5cdHR1ZXNkYXk6ICdUdWVzZGF5Jyxcblx0d2VkbmVzZGF5OiAnV2VkbmVzZGF5Jyxcblx0dGh1cnNkYXk6ICdUaHVyc2RheScsXG5cdGZyaWRheTogJ0ZyaWRheScsXG5cdHNhdHVyZGF5OiAnU2F0dXJkYXknLFxuXG5cdC8vIERheXMgc2hvcnRcblx0c3VuOiAnU3VuJyxcblx0bW9uOiAnTW9uJyxcblx0dHVlOiAnVHVlJyxcblx0d2VkOiAnV2VkJyxcblx0dGh1OiAnVGh1Jyxcblx0ZnJpOiAnRnJpJyxcblx0c2F0OiAnU2F0JyxcblxuXHQvLyBNb250aHNcblx0amFudWFyeTogJ0phbnVhcnknLFxuXHRmZWJydWFyeTogJ0ZlYnJ1YXJ5Jyxcblx0bWFyY2g6ICdNYXJjaCcsXG5cdGFwcmlsOiAnQXByaWwnLFxuXHRtYXk6ICdNYXknLFxuXHRqdW5lOiAnSnVuZScsXG5cdGp1bHk6ICdKdWx5Jyxcblx0YXVndXN0OiAnQXVndXN0Jyxcblx0c2VwdGVtYmVyOiAnU2VwdGVtYmVyJyxcblx0b2N0b2JlcjogJ09jdG9iZXInLFxuXHRub3ZlbWJlcjogJ05vdmVtYmVyJyxcblx0ZGVjZW1iZXI6ICdEZWNlbWJlcicsXG59XG4iLAogICAgImltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbi8qKiBXaGV0aGVyIHRoZSBnaXZlbiBkYXRlIGZhbGxzIG9uIHRvZGF5IChjYWxlbmRhciBkYXksIHJlc3BlY3RpbmcgdGltZXpvbmUpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVG9kYXkoZGF0ZTogRGF5anMpOiBib29sZWFuIHtcblx0cmV0dXJuIGRhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKVxufVxuXG4vKiogYFlZWVktTU0tRERgIHN0cmluZyB1c2VkIGFzIGEgc3RhYmxlIHBlci1kYXkga2V5IGFjcm9zcyB0aGUgY29kZWJhc2UuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF5S2V5KGRhdGU6IERheWpzKTogc3RyaW5nIHtcblx0cmV0dXJuIGRhdGUuZm9ybWF0KCdZWVlZLU1NLUREJylcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSB3ZWVrIGRheXMgZm9yIGEgZ2l2ZW4gZGF0ZSBhbmQgZmlyc3QgZGF5IG9mIHdlZWsgc2V0dGluZy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCB0aGUgY3VycmVudCBkYXRlIGlzIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgd2VlayxcbiAqIGV2ZW4gd2hlbiB0aGUgZmlyc3QgZGF5IG9mIHdlZWsgaXMgc2V0IHRvIGEgZGF5IGFmdGVyIHRoZSBjdXJyZW50IGRhdGUuXG4gKlxuICogQHBhcmFtIGN1cnJlbnREYXRlIC0gVGhlIHJlZmVyZW5jZSBkYXRlIGZvciBjYWxjdWxhdGluZyB0aGUgd2Vla1xuICogQHBhcmFtIGZpcnN0RGF5T2ZXZWVrIC0gVGhlIGRheSBudW1iZXIgKDAtNikgcmVwcmVzZW50aW5nIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgKDAgPSBTdW5kYXksIDEgPSBNb25kYXksIGV0Yy4pXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiA3IGRheWpzIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSB3ZWVrIGRheXMsIHN0YXJ0aW5nIGZyb20gZmlyc3REYXlPZldlZWtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gR2V0IHdlZWsgc3RhcnRpbmcgZnJvbSBNb25kYXkgZm9yIGN1cnJlbnQgZGF0ZVxuICogY29uc3Qgd2Vla0RheXMgPSBnZXRXZWVrRGF5cyhkYXlqcygnMjAyNS0xMC0xMycpLCAxKVxuICogLy8gUmV0dXJuczogW01vbiBPY3QgMTMsIFR1ZSBPY3QgMTQsIC4uLiwgU3VuIE9jdCAxOV1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gR2V0IHdlZWsgc3RhcnRpbmcgZnJvbSBXZWRuZXNkYXkgd2hlbiBjdXJyZW50IGRhdGUgaXMgTW9uZGF5XG4gKiBjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGRheWpzKCcyMDI1LTEwLTEzJyksIDMpXG4gKiAvLyBSZXR1cm5zOiBbV2VkIE9jdCA4LCBUaHUgT2N0IDksIC4uLiwgVHVlIE9jdCAxNF0gKGluY2x1ZGVzIE1vbmRheSBPY3QgMTMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXZWVrRGF5cyhcblx0Y3VycmVudERhdGU6IERheWpzLFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG4pOiBEYXlqc1tdIHtcblx0Y29uc3Qgc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGUgPSBjdXJyZW50RGF0ZVxuXHRcdC5zdGFydE9mKCd3ZWVrJylcblx0XHQuZGF5KGZpcnN0RGF5T2ZXZWVrKVxuXG5cdGNvbnN0IGFkanVzdGVkU3RhcnRPZldlZWsgPSBjdXJyZW50RGF0ZS5pc0JlZm9yZShzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZSlcblx0XHQ/IHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlLnN1YnRyYWN0KDEsICd3ZWVrJylcblx0XHQ6IHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlXG5cblx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDcgfSwgKF8sIGRheUluZGV4KSA9PlxuXHRcdGFkanVzdGVkU3RhcnRPZldlZWsuYWRkKGRheUluZGV4LCAnZGF5Jylcblx0KVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyA2IHdlZWtzIG9mIGRheXMgZm9yIGEgbW9udGggY2FsZW5kYXIgdmlldy5cbiAqIEFsd2F5cyByZXR1cm5zIDQyIGRheXMgKDYgd2Vla3Mgw5cgNyBkYXlzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1vbnRoV2Vla3MoXG5cdG1vbnRoRGF0ZTogRGF5anMsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbik6IERheWpzW11bXSB7XG5cdGNvbnN0IGZpcnN0V2VlayA9IGdldFdlZWtEYXlzKG1vbnRoRGF0ZS5zdGFydE9mKCdtb250aCcpLCBmaXJzdERheU9mV2VlaylcblxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogNiB9LCAoXywgd2Vla0luZGV4KSA9PiB7XG5cdFx0Y29uc3Qgd2Vla1N0YXJ0ID0gZmlyc3RXZWVrWzBdLmFkZCh3ZWVrSW5kZXgsICd3ZWVrJylcblx0XHRyZXR1cm4gZ2V0V2Vla0RheXMod2Vla1N0YXJ0LCBmaXJzdERheU9mV2Vlaylcblx0fSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vbnRoRGF5cyhtb250aERhdGU6IERheWpzKTogRGF5anNbXSB7XG5cdGNvbnN0IGRheXNJbk1vbnRoID0gbW9udGhEYXRlLmRheXNJbk1vbnRoKClcblx0Y29uc3Qgc3RhcnRPZk1vbnRoID0gbW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJylcblx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IGRheXNJbk1vbnRoIH0sIChfLCBpKSA9PlxuXHRcdHN0YXJ0T2ZNb250aC5hZGQoaSwgJ2RheScpXG5cdClcbn1cblxuaW50ZXJmYWNlIEdldERheUhvdXJzT3B0aW9ucyB7XG5cdHJlZmVyZW5jZURhdGU/OiBEYXlqc1xuXHRsZW5ndGg/OiBudW1iZXJcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYW4gYXJyYXkgb2YgMjQgZGF5anMgb2JqZWN0cyByZXByZXNlbnRpbmcgaG91cmx5IHNsb3RzIGZvciBhIGRheS5cbiAqIFVzZXMgLmhvdXIoaSkgc28gZWFjaCByb3cgbWFwcyB0byBcInRoZSBob3VyIGxhYmVsZWQgaVwiIOKAlCBrZWVwaW5nIGdyaWQgcm93c1xuICogYWxpZ25lZCBhY3Jvc3MgY29sdW1ucyBpbiB3ZWVrIHZpZXdzLiBPbiBEU1Qgc3ByaW5nLWZvcndhcmQsIC5ob3VyKDIpIHJldHVybnNcbiAqIDMgQU0gKHRoZSBub24tZXhpc3RlbnQgaG91ciBpcyBjb2xsYXBzZWQpLCBidXQgdGhlIGdyaWQga2V5IGZpeCAoZGF5SW5kZXgpXG4gKiBhbmQgcGVyLWRheSBnZW5lcmF0aW9uIGluIHZpZXdzIGhhbmRsZSB0aGlzIGNvcnJlY3RseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERheUhvdXJzKHtcblx0cmVmZXJlbmNlRGF0ZSA9IGRheWpzKCksXG5cdGxlbmd0aCA9IDI0LFxufTogR2V0RGF5SG91cnNPcHRpb25zID0ge30pOiBEYXlqc1tdIHtcblx0Y29uc3Qgc3RhcnRPZkRheSA9IHJlZmVyZW5jZURhdGUuc3RhcnRPZignZGF5Jylcblx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGggfSwgKF8sIGkpID0+XG5cdFx0c3RhcnRPZkRheS5ob3VyKGkpLm1pbnV0ZSgwKS5zZWNvbmQoMCkubWlsbGlzZWNvbmQoMClcblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbi8qKlxuICogS2VlcCBvbmx5IGV2ZW50cyB3aG9zZSBpZCBhcHBlYXJzIGluIGByZXNvdXJjZUV2ZW50c2AuIElkcyBhcmUgY29tcGFyZWQgYXNcbiAqIHN0cmluZ3Mgc28gbnVtZXJpYy9zdHJpbmcgbWlzbWF0Y2hlcyBiZXR3ZWVuIHNvdXJjZXMgZG9uJ3QgY2F1c2UgZmFsc2VcbiAqIG5lZ2F0aXZlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckV2ZW50c0J5UmVzb3VyY2UoXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdLFxuXHRyZXNvdXJjZUV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4pOiBDYWxlbmRhckV2ZW50W10ge1xuXHRjb25zdCBpZHMgPSBuZXcgU2V0KHJlc291cmNlRXZlbnRzLm1hcCgoZSkgPT4gU3RyaW5nKGUuaWQpKSlcblx0cmV0dXJuIGV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiBpZHMuaGFzKFN0cmluZyhldmVudC5pZCkpKVxufVxuXG4vKipcbiAqIFdoZXRoZXIgYW4gZXZlbnQncyBpbnRlcnZhbCBvdmVybGFwcyB3aXRoIHRoZSBgW3N0YXJ0LCBlbmRdYCByYW5nZVxuICogKGluY2x1c2l2ZSkuIENvdmVycyB0aGUgdGhyZWUgY2FzZXM6IHN0YXJ0cyBpbnNpZGUgdGhlIHJhbmdlLCBlbmRzIGluc2lkZVxuICogdGhlIHJhbmdlLCBvciBmdWxseSBzcGFucyB0aGUgcmFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmVudE92ZXJsYXBzUmFuZ2UoXG5cdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRzdGFydDogRGF5anMsXG5cdGVuZDogRGF5anNcbik6IGJvb2xlYW4ge1xuXHRjb25zdCBzdGFydHNJblJhbmdlID1cblx0XHRldmVudC5zdGFydC5pc1NhbWVPckFmdGVyKHN0YXJ0KSAmJiBldmVudC5zdGFydC5pc1NhbWVPckJlZm9yZShlbmQpXG5cdGNvbnN0IGVuZHNJblJhbmdlID1cblx0XHRldmVudC5lbmQuaXNTYW1lT3JBZnRlcihzdGFydCkgJiYgZXZlbnQuZW5kLmlzU2FtZU9yQmVmb3JlKGVuZClcblx0Y29uc3Qgc3BhbnNSYW5nZSA9IGV2ZW50LnN0YXJ0LmlzQmVmb3JlKHN0YXJ0KSAmJiBldmVudC5lbmQuaXNBZnRlcihlbmQpXG5cdHJldHVybiBzdGFydHNJblJhbmdlIHx8IGVuZHNJblJhbmdlIHx8IHNwYW5zUmFuZ2Vcbn1cbiIsCiAgICAiaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ29udGVudCxcblx0RGlhbG9nRGVzY3JpcHRpb24sXG5cdERpYWxvZ0Zvb3Rlcixcblx0RGlhbG9nSGVhZGVyLFxuXHREaWFsb2dUaXRsZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RpYWxvZydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRTY29wZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuY29uc3QgU0NPUEVTID0gW1xuXHR7XG5cdFx0c2NvcGU6ICd0aGlzJyxcblx0XHR0aXRsZTogJ3RoaXNFdmVudCcsXG5cdFx0ZWRpdEtleTogJ29ubHlDaGFuZ2VUaGlzJyxcblx0XHRkZWxldGVLZXk6ICdvbmx5RGVsZXRlVGhpcycsXG5cdH0sXG5cdHtcblx0XHRzY29wZTogJ2ZvbGxvd2luZycsXG5cdFx0dGl0bGU6ICd0aGlzQW5kRm9sbG93aW5nRXZlbnRzJyxcblx0XHRlZGl0S2V5OiAnY2hhbmdlVGhpc0FuZEZ1dHVyZScsXG5cdFx0ZGVsZXRlS2V5OiAnZGVsZXRlVGhpc0FuZEZ1dHVyZScsXG5cdH0sXG5cdHtcblx0XHRzY29wZTogJ2FsbCcsXG5cdFx0dGl0bGU6ICdhbGxFdmVudHMnLFxuXHRcdGVkaXRLZXk6ICdjaGFuZ2VFbnRpcmVTZXJpZXMnLFxuXHRcdGRlbGV0ZUtleTogJ2RlbGV0ZUVudGlyZVNlcmllcycsXG5cdH0sXG5dIGFzIGNvbnN0XG5cbmludGVyZmFjZSBSZWN1cnJlbmNlRWRpdERpYWxvZ1Byb3BzIHtcblx0aXNPcGVuOiBib29sZWFuXG5cdG9uQ2xvc2U6ICgpID0+IHZvaWRcblx0b25Db25maXJtOiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHZvaWRcblx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnIHwgJ2RlbGV0ZSdcblx0ZXZlbnRUaXRsZTogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZWN1cnJlbmNlRWRpdERpYWxvZyh7XG5cdGlzT3Blbixcblx0b25DbG9zZSxcblx0b25Db25maXJtLFxuXHRvcGVyYXRpb25UeXBlLFxuXHRldmVudFRpdGxlLFxufTogUmVjdXJyZW5jZUVkaXREaWFsb2dQcm9wcykge1xuXHRjb25zdCB7IHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoeyB0OiBjb250ZXh0LnQgfSkpXG5cblx0Y29uc3QgaGFuZGxlU2NvcGVTZWxlY3QgPSAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcblx0XHRvbkNvbmZpcm0oc2NvcGUpXG5cdFx0b25DbG9zZSgpXG5cdH1cblxuXHRjb25zdCBpc0VkaXQgPSBvcGVyYXRpb25UeXBlID09PSAnZWRpdCdcblxuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2cgb25PcGVuQ2hhbmdlPXtvbkNsb3NlfSBvcGVuPXtpc09wZW59PlxuXHRcdFx0PERpYWxvZ0NvbnRlbnQgY2xhc3NOYW1lPVwibWF4LXctbWRcIj5cblx0XHRcdFx0PERpYWxvZ0hlYWRlcj5cblx0XHRcdFx0XHQ8RGlhbG9nVGl0bGU+XG5cdFx0XHRcdFx0XHR7aXNFZGl0ID8gdCgnZWRpdFJlY3VycmluZ0V2ZW50JykgOiB0KCdkZWxldGVSZWN1cnJpbmdFdmVudCcpfVxuXHRcdFx0XHRcdDwvRGlhbG9nVGl0bGU+XG5cdFx0XHRcdFx0PERpYWxvZ0Rlc2NyaXB0aW9uPlxuXHRcdFx0XHRcdFx0XCJ7ZXZlbnRUaXRsZX1cInsnICd9XG5cdFx0XHRcdFx0XHR7aXNFZGl0XG5cdFx0XHRcdFx0XHRcdD8gdCgnZWRpdFJlY3VycmluZ0V2ZW50UXVlc3Rpb24nKVxuXHRcdFx0XHRcdFx0XHQ6IHQoJ2RlbGV0ZVJlY3VycmluZ0V2ZW50UXVlc3Rpb24nKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ0Rlc2NyaXB0aW9uPlxuXHRcdFx0XHQ8L0RpYWxvZ0hlYWRlcj5cblxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktM1wiPlxuXHRcdFx0XHRcdHtTQ09QRVMubWFwKCh7IHNjb3BlLCB0aXRsZSwgZWRpdEtleSwgZGVsZXRlS2V5IH0pID0+IChcblx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIGp1c3RpZnktc3RhcnQgaC1hdXRvIHAtNFwiXG5cdFx0XHRcdFx0XHRcdGtleT17c2NvcGV9XG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNjb3BlU2VsZWN0KHNjb3BlKX1cblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbGVmdFwiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCh0aXRsZSl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e3QoaXNFZGl0ID8gZWRpdEtleSA6IGRlbGV0ZUtleSl9XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxEaWFsb2dGb290ZXI+XG5cdFx0XHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvbkNsb3NlfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHRcdFx0e3QoJ2NhbmNlbCcpfVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8L0RpYWxvZ0Zvb3Rlcj5cblx0XHRcdDwvRGlhbG9nQ29udGVudD5cblx0XHQ8L0RpYWxvZz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IERyYWdFbmRFdmVudCB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi4vdHlwZXMnXG5cbmludGVyZmFjZSBEcm9wQ2VsbERhdGEge1xuXHR0eXBlPzogc3RyaW5nXG5cdGRhdGU/OiBzdHJpbmdcblx0aG91cj86IG51bWJlclxuXHRtaW51dGU/OiBudW1iZXJcblx0cmVzb3VyY2VJZD86IHN0cmluZ1xuXHRhbGxEYXk/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBnZXRVcGRhdGVkRXZlbnQgPSAoXG5cdGV2ZW50OiBEcmFnRW5kRXZlbnQsXG5cdGFjdGl2ZUV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuKSA9PiB7XG5cdGNvbnN0IHsgYWN0aXZlLCBvdmVyIH0gPSBldmVudFxuXG5cdGlmICghYWN0aXZlIHx8ICFvdmVyIHx8ICFhY3RpdmVFdmVudCkge1xuXHRcdHJldHVybiBudWxsXG5cdH1cblxuXHRjb25zdCBkYXRhID0gKG92ZXIuZGF0YS5jdXJyZW50IHx8IHt9KSBhcyBEcm9wQ2VsbERhdGFcblx0Y29uc3QgaXNUaW1lQ2VsbCA9IGRhdGEudHlwZSA9PT0gJ3RpbWUtY2VsbCdcblx0Y29uc3QgeyByZXNvdXJjZUlkLCBhbGxEYXkgfSA9IGRhdGFcblx0bGV0IG5ld1N0YXJ0OiBEYXlqc1xuXG5cdGlmIChpc1RpbWVDZWxsKSB7XG5cdFx0Y29uc3QgeyBkYXRlLCBob3VyID0gMCwgbWludXRlID0gMCB9ID0gZGF0YVxuXG5cdFx0Ly8gQ3JlYXRlIG5ldyBzdGFydCB0aW1lIGJhc2VkIG9uIHRoZSBkcm9wIHRhcmdldFxuXHRcdG5ld1N0YXJ0ID0gZGF5anMoZGF0ZSkuaG91cihob3VyKS5taW51dGUobWludXRlKVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IHsgZGF0ZSB9ID0gZGF0YVxuXG5cdFx0bmV3U3RhcnQgPSBkYXlqcyhkYXRlKVxuXHR9XG5cblx0Y29uc3QgZXZlbnREdXJhdGlvbiA9IGFjdGl2ZUV2ZW50LmVuZC5kaWZmKGFjdGl2ZUV2ZW50LnN0YXJ0LCAnc2Vjb25kJylcblxuXHQvLyBDcmVhdGUgbmV3IGVuZCB0aW1lIGJ5IGFkZGluZyB0aGUgb3JpZ2luYWwgZHVyYXRpb25cblx0bGV0IG5ld0VuZCA9IG5ld1N0YXJ0LmFkZChldmVudER1cmF0aW9uLCAnc2Vjb25kJylcblxuXHRpZiAobmV3RW5kLmlzU2FtZShuZXdFbmQuc3RhcnRPZignZGF5JykpKSB7XG5cdFx0Ly8gSWYgdGhlIG5ldyBlbmQgdGltZSBpcyBhdCBtaWRuaWdodCwgc2V0IGl0IHRvIDI0IGhvdXJzIG9mIHBhcnRpYWwgZGF5XG5cdFx0bmV3RW5kID0gbmV3RW5kLnN1YnRyYWN0KDEsICdkYXknKS5lbmRPZignZGF5Jylcblx0fVxuXG5cdC8vIFVwZGF0ZSB0aGUgZXZlbnQgd2l0aCBuZXcgdGltZXMgYW5kIHJlc291cmNlIGlmIGNoYW5nZWRcblx0Y29uc3QgdXBkYXRlcyA9IHtcblx0XHRzdGFydDogbmV3U3RhcnQsXG5cdFx0ZW5kOiBuZXdFbmQsXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRhbGxEYXk6IGlzVGltZUNlbGwgPyBmYWxzZSA6IChhbGxEYXkgPz8gYWN0aXZlRXZlbnQuYWxsRGF5KSxcblx0fVxuXHRyZXR1cm4geyBhY3RpdmVFdmVudCwgdXBkYXRlcyB9XG59XG4iLAogICAgImltcG9ydCB7IERyYWdPdmVybGF5IH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7IHNuYXBDZW50ZXJUb0N1cnNvciB9IGZyb20gJ0BkbmQta2l0L21vZGlmaWVycydcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICcuLi90eXBlcydcblxuaW50ZXJmYWNlIEV2ZW50RHJhZ092ZXJsYXlQcm9wcyB7XG5cdHJlZjogUmVhY3QuUmVmPHsgc2V0QWN0aXZlRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZCB9PlxufVxuXG5leHBvcnQgY29uc3QgRXZlbnREcmFnT3ZlcmxheTogUmVhY3QuRkM8RXZlbnREcmFnT3ZlcmxheVByb3BzPiA9ICh7IHJlZiB9KSA9PiB7XG5cdGNvbnN0IFthY3RpdmVFdmVudCwgc2V0QWN0aXZlRXZlbnRdID0gdXNlU3RhdGU8Q2FsZW5kYXJFdmVudCB8IG51bGw+KG51bGwpXG5cblx0dXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG5cdFx0c2V0QWN0aXZlRXZlbnQsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PERyYWdPdmVybGF5IG1vZGlmaWVycz17W3NuYXBDZW50ZXJUb0N1cnNvcl19PlxuXHRcdFx0e2FjdGl2ZUV2ZW50ICYmIChcblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnY3Vyc29yLWdyYWIgdHJ1bmNhdGUgcm91bmRlZCBiZy1hbWJlci0yMDAgcC0yIHRleHQtWzEwcHhdIHNoYWRvdy1sZyBzbTp0ZXh0LXhzIHctMjAnLFxuXHRcdFx0XHRcdFx0YWN0aXZlRXZlbnQuYmFja2dyb3VuZENvbG9yIHx8ICdiZy1ibHVlLTUwMCcsXG5cdFx0XHRcdFx0XHRhY3RpdmVFdmVudC5jb2xvciB8fCAndGV4dC13aGl0ZSdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e2FjdGl2ZUV2ZW50Py50aXRsZX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpfVxuXHRcdDwvRHJhZ092ZXJsYXk+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgQ2hlY2tib3ggfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2hlY2tib3gnXG5pbXBvcnQgeyBEYXRlUGlja2VyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyJ1xuaW1wb3J0IHsgRGlhbG9nRm9vdGVyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RpYWxvZydcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2lucHV0J1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvbGFiZWwnXG5pbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgVGltZVBpY2tlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS90aW1lLXBpY2tlcidcbmltcG9ydCB7IGlzQnVzaW5lc3NEYXkgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2J1c2luZXNzLWhvdXJzJ1xuaW1wb3J0IHtcblx0YnVpbGREYXRlVGltZSxcblx0YnVpbGRFbmREYXRlVGltZSxcblx0Z2V0VGltZUNvbnN0cmFpbnRzLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2V2ZW50LWZvcm0tdXRpbHMnXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdERpYWxvZyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cnXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdG9yIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0b3IvcmVjdXJyZW5jZS1lZGl0b3InXG5pbXBvcnQgeyB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvaG9va3MvdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zJ1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyBpc1JlY3VycmluZ0V2ZW50IH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IHVzZUVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2hvb2tzL3VzZS1lZmZlY3RpdmUtYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBDT0xPUl9PUFRJT05TID0gW1xuXHR7IHZhbHVlOiAnYmctYmx1ZS0xMDAgdGV4dC1ibHVlLTgwMCcsIGxhYmVsOiAnQmx1ZScgfSxcblx0eyB2YWx1ZTogJ2JnLWdyZWVuLTEwMCB0ZXh0LWdyZWVuLTgwMCcsIGxhYmVsOiAnR3JlZW4nIH0sXG5cdHsgdmFsdWU6ICdiZy1wdXJwbGUtMTAwIHRleHQtcHVycGxlLTgwMCcsIGxhYmVsOiAnUHVycGxlJyB9LFxuXHR7IHZhbHVlOiAnYmctcmVkLTEwMCB0ZXh0LXJlZC04MDAnLCBsYWJlbDogJ1JlZCcgfSxcblx0eyB2YWx1ZTogJ2JnLXllbGxvdy0xMDAgdGV4dC15ZWxsb3ctODAwJywgbGFiZWw6ICdZZWxsb3cnIH0sXG5cdHsgdmFsdWU6ICdiZy1waW5rLTEwMCB0ZXh0LXBpbmstODAwJywgbGFiZWw6ICdQaW5rJyB9LFxuXHR7IHZhbHVlOiAnYmctaW5kaWdvLTEwMCB0ZXh0LWluZGlnby04MDAnLCBsYWJlbDogJ0luZGlnbycgfSxcblx0eyB2YWx1ZTogJ2JnLWFtYmVyLTEwMCB0ZXh0LWFtYmVyLTgwMCcsIGxhYmVsOiAnQW1iZXInIH0sXG5cdHsgdmFsdWU6ICdiZy1lbWVyYWxkLTEwMCB0ZXh0LWVtZXJhbGQtODAwJywgbGFiZWw6ICdFbWVyYWxkJyB9LFxuXHR7IHZhbHVlOiAnYmctc2t5LTEwMCB0ZXh0LXNreS04MDAnLCBsYWJlbDogJ1NreScgfSxcblx0eyB2YWx1ZTogJ2JnLXZpb2xldC0xMDAgdGV4dC12aW9sZXQtODAwJywgbGFiZWw6ICdWaW9sZXQnIH0sXG5cdHsgdmFsdWU6ICdiZy1yb3NlLTEwMCB0ZXh0LXJvc2UtODAwJywgbGFiZWw6ICdSb3NlJyB9LFxuXHR7IHZhbHVlOiAnYmctdGVhbC0xMDAgdGV4dC10ZWFsLTgwMCcsIGxhYmVsOiAnVGVhbCcgfSxcblx0eyB2YWx1ZTogJ2JnLW9yYW5nZS0xMDAgdGV4dC1vcmFuZ2UtODAwJywgbGFiZWw6ICdPcmFuZ2UnIH0sXG5dXG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRGb3JtUHJvcHMge1xuXHRvcGVuPzogYm9vbGVhblxuXHRzZWxlY3RlZEV2ZW50PzogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0b25BZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25VcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25EZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DbG9zZTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgRXZlbnRGb3JtOiBSZWFjdC5GQzxFdmVudEZvcm1Qcm9wcz4gPSAoe1xuXHRzZWxlY3RlZEV2ZW50LFxuXHRvbkNsb3NlLFxuXHRvblVwZGF0ZSxcblx0b25EZWxldGUsXG5cdG9uQWRkLFxufSkgPT4ge1xuXHRjb25zdCB7XG5cdFx0ZGlhbG9nU3RhdGUsXG5cdFx0b3BlbkVkaXREaWFsb2csXG5cdFx0b3BlbkRlbGV0ZURpYWxvZyxcblx0XHRjbG9zZURpYWxvZyxcblx0XHRoYW5kbGVDb25maXJtLFxuXHR9ID0gdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zKG9uQ2xvc2UpXG5cblx0Y29uc3QgeyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsIHQsIHRpbWVGb3JtYXQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KFxuXHRcdChjb250ZXh0KSA9PiAoe1xuXHRcdFx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiBjb250ZXh0LmZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHRcdHQ6IGNvbnRleHQudCxcblx0XHRcdHRpbWVGb3JtYXQ6IGNvbnRleHQudGltZUZvcm1hdCxcblx0XHR9KVxuXHQpXG5cdGNvbnN0IGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgPSB1c2VFZmZlY3RpdmVCdXNpbmVzc0hvdXJzKFxuXHRcdHNlbGVjdGVkRXZlbnQ/LnJlc291cmNlSWRcblx0KVxuXG5cdGNvbnN0IHN0YXJ0ID0gc2VsZWN0ZWRFdmVudD8uc3RhcnQgPz8gZGF5anMoKVxuXHRjb25zdCBlbmQgPSBzZWxlY3RlZEV2ZW50Py5lbmQgPz8gZGF5anMoKS5hZGQoMSwgJ2hvdXInKVxuXG5cdC8vIEZpbmQgcGFyZW50IGV2ZW50IGlmIHRoaXMgaXMgYSByZWN1cnJpbmcgZXZlbnQgaW5zdGFuY2Vcblx0Y29uc3QgcGFyZW50RXZlbnQgPSBzZWxlY3RlZEV2ZW50XG5cdFx0PyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudClcblx0XHQ6IG51bGxcblxuXHQvLyBGb3JtIHN0YXRlXG5cdGNvbnN0IFtzdGFydERhdGUsIHNldFN0YXJ0RGF0ZV0gPSB1c2VTdGF0ZShzdGFydC50b0RhdGUoKSlcblx0Y29uc3QgW2VuZERhdGUsIHNldEVuZERhdGVdID0gdXNlU3RhdGUoZW5kLnRvRGF0ZSgpKVxuXHRjb25zdCBbaXNBbGxEYXksIHNldElzQWxsRGF5XSA9IHVzZVN0YXRlKHNlbGVjdGVkRXZlbnQ/LmFsbERheSB8fCBmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkQ29sb3IsIHNldFNlbGVjdGVkQ29sb3JdID0gdXNlU3RhdGUoXG5cdFx0c2VsZWN0ZWRFdmVudD8uY29sb3IgfHwgQ09MT1JfT1BUSU9OU1swXS52YWx1ZVxuXHQpXG5cblx0Ly8gVGltZSBzdGF0ZVxuXHRjb25zdCBbc3RhcnRUaW1lLCBzZXRTdGFydFRpbWVdID0gdXNlU3RhdGUoc3RhcnQuZm9ybWF0KCdISDptbScpKVxuXHRjb25zdCBbZW5kVGltZSwgc2V0RW5kVGltZV0gPSB1c2VTdGF0ZShlbmQuZm9ybWF0KCdISDptbScpKVxuXG5cdC8vIEluaXRpYWxpemUgZm9ybSB2YWx1ZXMgZnJvbSBzZWxlY3RlZCBldmVudCBvciBkZWZhdWx0c1xuXHRjb25zdCBbZm9ybVZhbHVlcywgc2V0Rm9ybVZhbHVlc10gPSB1c2VTdGF0ZSh7XG5cdFx0dGl0bGU6IHNlbGVjdGVkRXZlbnQ/LnRpdGxlIHx8ICcnLFxuXHRcdGRlc2NyaXB0aW9uOiBzZWxlY3RlZEV2ZW50Py5kZXNjcmlwdGlvbiB8fCAnJyxcblx0XHRsb2NhdGlvbjogc2VsZWN0ZWRFdmVudD8ubG9jYXRpb24gfHwgJycsXG5cdH0pXG5cblx0Ly8gUmVjdXJyZW5jZSBzdGF0ZSAtIHB1bGwgUlJVTEUgZnJvbSBwYXJlbnQgaWYgdGhpcyBpcyBhbiBpbnN0YW5jZVxuXHRjb25zdCBbcnJ1bGUsIHNldFJydWxlXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KCgpID0+IHtcblx0XHRjb25zdCBldmVudFJydWxlID0gc2VsZWN0ZWRFdmVudD8ucnJ1bGUgfHwgcGFyZW50RXZlbnQ/LnJydWxlXG5cdFx0cmV0dXJuIGV2ZW50UnJ1bGUgfHwgbnVsbFxuXHR9KVxuXG5cdC8vIENyZWF0ZSB3cmFwcGVyIGZ1bmN0aW9ucyB0byBmaXggVHlwZVNjcmlwdCBlcnJvcnMgd2l0aCBEYXRlUGlja2VyXG5cdGNvbnN0IGhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0aWYgKCFkYXRlKSByZXR1cm5cblx0XHRzZXRTdGFydERhdGUoZGF0ZSlcblx0XHRpZiAoZGF5anMoZGF0ZSkuaXNBZnRlcihkYXlqcyhlbmREYXRlKSkpIHtcblx0XHRcdHNldEVuZERhdGUoZGF0ZSlcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVFbmREYXRlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcblx0XHRpZiAoIWRhdGUpIHJldHVyblxuXHRcdHNldEVuZERhdGUoZGF0ZSlcblx0XHRpZiAoZGF0ZSAmJiBkYXlqcyhkYXRlKS5pc0JlZm9yZShkYXlqcyhzdGFydERhdGUpKSkge1xuXHRcdFx0c2V0U3RhcnREYXRlKGRhdGUpXG5cdFx0fVxuXHR9XG5cblx0Ly8gVGltZSB2YWxpZGF0aW9uIGhhbmRsZXJzIC0gb25seSB2YWxpZGF0ZSB3aGVuIGRhdGVzIGFyZSB0aGUgc2FtZVxuXHRjb25zdCBoYW5kbGVTdGFydFRpbWVDaGFuZ2UgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0c2V0U3RhcnRUaW1lKHRpbWUpXG5cdFx0Ly8gT25seSB2YWxpZGF0ZSBpZiBzYW1lIGRheVxuXHRcdGlmIChkYXlqcyhzdGFydERhdGUpLmlzU2FtZShkYXlqcyhlbmREYXRlKSwgJ2RheScpICYmIHRpbWUgPiBlbmRUaW1lKSB7XG5cdFx0XHRzZXRFbmRUaW1lKHRpbWUpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRW5kVGltZUNoYW5nZSA9ICh0aW1lOiBzdHJpbmcpID0+IHtcblx0XHRzZXRFbmRUaW1lKHRpbWUpXG5cdFx0Ly8gT25seSB2YWxpZGF0ZSBpZiBzYW1lIGRheVxuXHRcdGlmIChkYXlqcyhzdGFydERhdGUpLmlzU2FtZShkYXlqcyhlbmREYXRlKSwgJ2RheScpICYmIHRpbWUgPCBzdGFydFRpbWUpIHtcblx0XHRcdHNldFN0YXJ0VGltZSh0aW1lKVxuXHRcdH1cblx0fVxuXG5cdC8vIFVwZGF0ZSBmb3JtIHZhbHVlcyB3aGVuIGlucHV0IGNoYW5nZXNcblx0Y29uc3QgaGFuZGxlSW5wdXRDaGFuZ2UgPSAoXG5cdFx0ZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+XG5cdCkgPT4ge1xuXHRcdGNvbnN0IHsgbmFtZSwgdmFsdWUgfSA9IGUudGFyZ2V0XG5cdFx0c2V0Rm9ybVZhbHVlcygocHJldikgPT4gKHsgLi4ucHJldiwgW25hbWVdOiB2YWx1ZSB9KSlcblx0fVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0Ly8gUmVzZXQgZW5kIHRpbWUgd2hlbiBhbGwgZGF5IGlzIHRvZ2dsZWQgdG8gb25cblx0XHRpZiAoaXNBbGxEYXkpIHtcblx0XHRcdHNldEVuZFRpbWUoJzIzOjU5Jylcblx0XHR9XG5cdH0sIFtpc0FsbERheV0pXG5cblx0Y29uc3QgaGFuZGxlU3VibWl0ID0gKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuXHRcdGUucHJldmVudERlZmF1bHQoKVxuXG5cdFx0Y29uc3Qgc3RhcnREYXRlVGltZSA9IGJ1aWxkRGF0ZVRpbWUoc3RhcnREYXRlLCBzdGFydFRpbWUsIGlzQWxsRGF5KVxuXHRcdGNvbnN0IGVuZERhdGVUaW1lID0gYnVpbGRFbmREYXRlVGltZShlbmREYXRlLCBlbmRUaW1lLCBpc0FsbERheSlcblxuXHRcdGNvbnN0IGV2ZW50RGF0YTogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdGlkOiBzZWxlY3RlZEV2ZW50Py5pZCB8fCBkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKSxcblx0XHRcdHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuXHRcdFx0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG5cdFx0XHRlbmQ6IGVuZERhdGVUaW1lLFxuXHRcdFx0cmVzb3VyY2VJZDogc2VsZWN0ZWRFdmVudD8ucmVzb3VyY2VJZCxcblx0XHRcdGRlc2NyaXB0aW9uOiBmb3JtVmFsdWVzLmRlc2NyaXB0aW9uLFxuXHRcdFx0bG9jYXRpb246IGZvcm1WYWx1ZXMubG9jYXRpb24sXG5cdFx0XHRhbGxEYXk6IGlzQWxsRGF5LFxuXHRcdFx0Y29sb3I6IHNlbGVjdGVkQ29sb3IsXG5cdFx0XHRycnVsZTogcnJ1bGUgfHwgdW5kZWZpbmVkLFxuXHRcdH1cblxuXHRcdGlmIChzZWxlY3RlZEV2ZW50Py5pZCAmJiBpc1JlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpKSB7XG5cdFx0XHRvcGVuRWRpdERpYWxvZyhzZWxlY3RlZEV2ZW50LCB7XG5cdFx0XHRcdHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuXHRcdFx0XHRzdGFydDogc3RhcnREYXRlVGltZSxcblx0XHRcdFx0ZW5kOiBlbmREYXRlVGltZSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IGZvcm1WYWx1ZXMuZGVzY3JpcHRpb24sXG5cdFx0XHRcdGxvY2F0aW9uOiBmb3JtVmFsdWVzLmxvY2F0aW9uLFxuXHRcdFx0XHRhbGxEYXk6IGlzQWxsRGF5LFxuXHRcdFx0XHRjb2xvcjogc2VsZWN0ZWRDb2xvcixcblx0XHRcdFx0cnJ1bGU6IHJydWxlIHx8IHVuZGVmaW5lZCxcblx0XHRcdH0pXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoc2VsZWN0ZWRFdmVudD8uaWQpIHtcblx0XHRcdG9uVXBkYXRlPy4oZXZlbnREYXRhKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvbkFkZD8uKGV2ZW50RGF0YSlcblx0XHR9XG5cdFx0b25DbG9zZSgpXG5cdH1cblxuXHRjb25zdCBoYW5kbGVEZWxldGUgPSAoKSA9PiB7XG5cdFx0aWYgKHNlbGVjdGVkRXZlbnQ/LmlkKSB7XG5cdFx0XHQvLyBDaGVjayBpZiB0aGlzIGlzIGEgcmVjdXJyaW5nIGV2ZW50XG5cdFx0XHRpZiAoaXNSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KSkge1xuXHRcdFx0XHQvLyBTaG93IHJlY3VycmluZyBldmVudCBkZWxldGUgZGlhbG9nXG5cdFx0XHRcdG9wZW5EZWxldGVEaWFsb2coc2VsZWN0ZWRFdmVudClcblx0XHRcdFx0cmV0dXJuIC8vIERvbid0IGNsb3NlIHRoZSBmb3JtIHlldCwgbGV0IHRoZSBkaWFsb2cgaGFuZGxlIGl0XG5cdFx0XHR9XG5cdFx0XHRvbkRlbGV0ZT8uKHNlbGVjdGVkRXZlbnQpXG5cdFx0XHRvbkNsb3NlKClcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVSUnVsZUNoYW5nZSA9IChuZXdSUnVsZTogUlJ1bGVPcHRpb25zIHwgbnVsbCkgPT4ge1xuXHRcdGlmICghbmV3UlJ1bGUpIHtcblx0XHRcdHNldFJydWxlKG51bGwpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0Y29uc3Qgc3RhcnREYXRlVGltZSA9IGJ1aWxkRGF0ZVRpbWUoc3RhcnREYXRlLCBzdGFydFRpbWUsIGlzQWxsRGF5KVxuXHRcdHNldFJydWxlKHsgLi4ubmV3UlJ1bGUsIGR0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUudG9EYXRlKCkgfSlcblx0fVxuXG5cdGNvbnN0IGRpc2FibGVkRGF0ZU1hdGNoZXIgPSBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzXG5cdFx0PyAoZGF0ZTogRGF0ZSkgPT4gIWlzQnVzaW5lc3NEYXkoZGF5anMoZGF0ZSksIGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMpXG5cdFx0OiB1bmRlZmluZWRcblxuXHRjb25zdCBzdGFydENvbnN0cmFpbnRzID0gZ2V0VGltZUNvbnN0cmFpbnRzKHN0YXJ0RGF0ZSwgZWZmZWN0aXZlQnVzaW5lc3NIb3Vycylcblx0Y29uc3QgZW5kQ29uc3RyYWludHMgPSBnZXRUaW1lQ29uc3RyYWludHMoZW5kRGF0ZSwgZWZmZWN0aXZlQnVzaW5lc3NIb3VycylcblxuXHQvLyBMb2NhbCBjb21wb25lbnQgZm9yIHRpdGxlIC8gZGVzY3JpcHRpb24gLyBsb2NhdGlvbiB0ZXh0IGlucHV0cy5cblx0Ly8gVGhleSBzaGFyZSBpZGVudGljYWwgbWFya3VwOyBvbmx5IGxhYmVsL3BsYWNlaG9sZGVyL3ZhbHVlIGRpZmZlci5cblx0dHlwZSBUZXh0RmllbGROYW1lID0gJ3RpdGxlJyB8ICdkZXNjcmlwdGlvbicgfCAnbG9jYXRpb24nXG5cdGNvbnN0IFRleHRGaWVsZCA9ICh7XG5cdFx0bmFtZSxcblx0XHRwbGFjZWhvbGRlcixcblx0XHRyZXF1aXJlZCA9IGZhbHNlLFxuXHR9OiB7XG5cdFx0bmFtZTogVGV4dEZpZWxkTmFtZVxuXHRcdHBsYWNlaG9sZGVyOiBzdHJpbmdcblx0XHRyZXF1aXJlZD86IGJvb2xlYW5cblx0fSkgPT4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMSBzbTpnYXAtMlwiPlxuXHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiIGh0bWxGb3I9e25hbWV9PlxuXHRcdFx0XHR7dChuYW1lKX1cblx0XHRcdDwvTGFiZWw+XG5cdFx0XHQ8SW5wdXRcblx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0aWQ9e25hbWV9XG5cdFx0XHRcdG5hbWU9e25hbWV9XG5cdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cblx0XHRcdFx0cGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuXHRcdFx0XHRyZXF1aXJlZD17cmVxdWlyZWR9XG5cdFx0XHRcdHZhbHVlPXtmb3JtVmFsdWVzW25hbWVdfVxuXHRcdFx0Lz5cblx0XHQ8L2Rpdj5cblx0KVxuXG5cdGNvbnN0IGRhdGVGaWVsZHMgPSBbXG5cdFx0WydzdGFydERhdGUnLCBzdGFydERhdGUsIGhhbmRsZVN0YXJ0RGF0ZUNoYW5nZV0sXG5cdFx0WydlbmREYXRlJywgZW5kRGF0ZSwgaGFuZGxlRW5kRGF0ZUNoYW5nZV0sXG5cdF0gYXMgY29uc3RcblxuXHRjb25zdCB0aW1lRmllbGRzID0gW1xuXHRcdFtcblx0XHRcdCdzdGFydFRpbWUnLFxuXHRcdFx0J3N0YXJ0LXRpbWUnLFxuXHRcdFx0c3RhcnRUaW1lLFxuXHRcdFx0aGFuZGxlU3RhcnRUaW1lQ2hhbmdlLFxuXHRcdFx0c3RhcnRDb25zdHJhaW50cyxcblx0XHRdLFxuXHRcdFsnZW5kVGltZScsICdlbmQtdGltZScsIGVuZFRpbWUsIGhhbmRsZUVuZFRpbWVDaGFuZ2UsIGVuZENvbnN0cmFpbnRzXSxcblx0XSBhcyBjb25zdFxuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxmb3JtIGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZmxleC0xIG1pbi1oLTBcIiBvblN1Ym1pdD17aGFuZGxlU3VibWl0fT5cblx0XHRcdFx0PFNjcm9sbEFyZWEgY2xhc3NOYW1lPVwiZmxleC0xIG1pbi1oLTBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTMgc206Z2FwLTQgcC0xXCI+XG5cdFx0XHRcdFx0XHQ8VGV4dEZpZWxkXG5cdFx0XHRcdFx0XHRcdG5hbWU9XCJ0aXRsZVwiXG5cdFx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPXt0KCdldmVudFRpdGxlUGxhY2Vob2xkZXInKX1cblx0XHRcdFx0XHRcdFx0cmVxdWlyZWRcblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8VGV4dEZpZWxkXG5cdFx0XHRcdFx0XHRcdG5hbWU9XCJkZXNjcmlwdGlvblwiXG5cdFx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPXt0KCdldmVudERlc2NyaXB0aW9uUGxhY2Vob2xkZXInKX1cblx0XHRcdFx0XHRcdC8+XG5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2lzQWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdGlkPVwiYWxsRGF5XCJcblx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eyhjaGVja2VkKSA9PiBzZXRJc0FsbERheShjaGVja2VkID09PSB0cnVlKX1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiIGh0bWxGb3I9XCJhbGxEYXlcIj5cblx0XHRcdFx0XHRcdFx0XHR7dCgnYWxsRGF5Jyl9XG5cdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC0yIHNtOmdhcC00XCI+XG5cdFx0XHRcdFx0XHRcdHtkYXRlRmllbGRzLm1hcCgoW2xhYmVsLCBkYXRlLCBvbkNoYW5nZV0pID0+IChcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGtleT17bGFiZWx9PlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KGxhYmVsKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0PERhdGVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibXQtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsb3NlT25TZWxlY3Rcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZT17ZGF0ZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkRGF0ZU1hdGNoZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtvbkNoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdHshaXNBbGxEYXkgJiYgKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIgc206Z2FwLTRcIj5cblx0XHRcdFx0XHRcdFx0XHR7dGltZUZpZWxkcy5tYXAoKFtsYWJlbCwgbmFtZSwgdmFsdWUsIG9uQ2hhbmdlLCBjXSkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBrZXk9e2xhYmVsfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KGxhYmVsKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8VGltZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTEgaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhUaW1lPXtjLm1heH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaW5UaW1lPXtjLm1pbn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPXtuYW1lfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtvbkNoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnc2VhcmNoVGltZScpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e3ZhbHVlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KX1cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnY29sb3InKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0e0NPTE9SX09QVElPTlMubWFwKChjb2xvcikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcmlhLWxhYmVsPXtjb2xvci5sYWJlbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRgJHtjb2xvci52YWx1ZX0gaC02IHctNiByb3VuZGVkLWZ1bGwgc206aC04IHNtOnctOGAsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRDb2xvciA9PT0gY29sb3IudmFsdWUgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdyaW5nLTIgcmluZy1ibGFjayByaW5nLW9mZnNldC0xIHNtOnJpbmctb2Zmc2V0LTInXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17Y29sb3IudmFsdWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNldFNlbGVjdGVkQ29sb3IoY29sb3IudmFsdWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdDxUZXh0RmllbGRcblx0XHRcdFx0XHRcdFx0bmFtZT1cImxvY2F0aW9uXCJcblx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9e3QoJ2V2ZW50TG9jYXRpb25QbGFjZWhvbGRlcicpfVxuXHRcdFx0XHRcdFx0Lz5cblxuXHRcdFx0XHRcdFx0ey8qIFJlY3VycmVuY2UgU2VjdGlvbiAqL31cblx0XHRcdFx0XHRcdDxSZWN1cnJlbmNlRWRpdG9yIG9uQ2hhbmdlPXtoYW5kbGVSUnVsZUNoYW5nZX0gdmFsdWU9e3JydWxlfSAvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L1Njcm9sbEFyZWE+XG5cblx0XHRcdFx0PERpYWxvZ0Zvb3RlciBjbGFzc05hbWU9XCJtdC00IHNocmluay0wIGZsZXggZmxleC1jb2wtcmV2ZXJzZSBnYXAtMiBzbTpmbGV4LXJvdyBzbTpnYXAtMFwiPlxuXHRcdFx0XHRcdHtzZWxlY3RlZEV2ZW50Py5pZCAmJiAoXG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBzbTptci1hdXRvIHNtOnctYXV0b1wiXG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9e2hhbmRsZURlbGV0ZX1cblx0XHRcdFx0XHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJkZXN0cnVjdGl2ZVwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdHt0KCdkZWxldGUnKX1cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBnYXAtMiBzbTp3LWF1dG9cIj5cblx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleC0xIHNtOmZsZXgtbm9uZVwiXG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9e29uQ2xvc2V9XG5cdFx0XHRcdFx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdHt0KCdjYW5jZWwnKX1cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdFx0PEJ1dHRvbiBjbGFzc05hbWU9XCJmbGV4LTEgc206ZmxleC1ub25lXCIgc2l6ZT1cInNtXCIgdHlwZT1cInN1Ym1pdFwiPlxuXHRcdFx0XHRcdFx0XHR7c2VsZWN0ZWRFdmVudD8uaWQgPyB0KCd1cGRhdGUnKSA6IHQoJ2NyZWF0ZScpfVxuXHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvRGlhbG9nRm9vdGVyPlxuXHRcdFx0PC9mb3JtPlxuXG5cdFx0XHR7LyogUmVjdXJyaW5nIEV2ZW50IEVkaXQgRGlhbG9nICovfVxuXHRcdFx0PFJlY3VycmVuY2VFZGl0RGlhbG9nXG5cdFx0XHRcdGV2ZW50VGl0bGU9e2RpYWxvZ1N0YXRlLmV2ZW50Py50aXRsZSB8fCAnJ31cblx0XHRcdFx0aXNPcGVuPXtkaWFsb2dTdGF0ZS5pc09wZW59XG5cdFx0XHRcdG9uQ2xvc2U9e2Nsb3NlRGlhbG9nfVxuXHRcdFx0XHRvbkNvbmZpcm09e2hhbmRsZUNvbmZpcm19XG5cdFx0XHRcdG9wZXJhdGlvblR5cGU9e2RpYWxvZ1N0YXRlLm9wZXJhdGlvblR5cGV9XG5cdFx0XHQvPlxuXHRcdDwvPlxuXHQpXG59XG4iLAogICAgImltcG9ydCAqIGFzIENoZWNrYm94UHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1jaGVja2JveCdcbmltcG9ydCB7IENoZWNrSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIENoZWNrYm94KHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIENoZWNrYm94UHJpbWl0aXZlLlJvb3Q+KSB7XG5cdHJldHVybiAoXG5cdFx0PENoZWNrYm94UHJpbWl0aXZlLlJvb3Rcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdwZWVyIGJvcmRlci1pbnB1dCBkYXJrOmJnLWlucHV0LzMwIGRhdGEtW3N0YXRlPWNoZWNrZWRdOmJnLXByaW1hcnkgZGF0YS1bc3RhdGU9Y2hlY2tlZF06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGFyazpkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1wcmltYXJ5IGRhdGEtW3N0YXRlPWNoZWNrZWRdOmJvcmRlci1wcmltYXJ5IGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlIHNpemUtNCBzaHJpbmstMCByb3VuZGVkLVs0cHhdIGJvcmRlciBzaGFkb3cteHMgdHJhbnNpdGlvbi1zaGFkb3cgb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImNoZWNrYm94XCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8Q2hlY2tib3hQcmltaXRpdmUuSW5kaWNhdG9yXG5cdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtY3VycmVudCB0cmFuc2l0aW9uLW5vbmVcIlxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJjaGVja2JveC1pbmRpY2F0b3JcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8Q2hlY2tJY29uIGNsYXNzTmFtZT1cInNpemUtMy41XCIgLz5cblx0XHRcdDwvQ2hlY2tib3hQcmltaXRpdmUuSW5kaWNhdG9yPlxuXHRcdDwvQ2hlY2tib3hQcmltaXRpdmUuUm9vdD5cblx0KVxufVxuXG5leHBvcnQgeyBDaGVja2JveCB9XG4iLAogICAgImltcG9ydCB7IFBvcG92ZXJDbG9zZSB9IGZyb20gJ0ByYWRpeC11aS9yZWFjdC1wb3BvdmVyJ1xuaW1wb3J0IHsgQ2FsZW5kYXIgYXMgQ2FsZW5kYXJJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgQ2FsZW5kYXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2FsZW5kYXInXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIERhdGVQaWNrZXJQcm9wcyB7XG5cdGRhdGU6IERhdGUgfCB1bmRlZmluZWRcblx0b25DaGFuZ2U/OiAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4gdm9pZFxuXHRsYWJlbD86IHN0cmluZ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0Y2xvc2VPblNlbGVjdD86IGJvb2xlYW5cblx0ZGlzYWJsZWQ/OiAoZGF0ZTogRGF0ZSkgPT4gYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gRGF0ZVBpY2tlcih7XG5cdGRhdGUsXG5cdGNsb3NlT25TZWxlY3QsXG5cdG9uQ2hhbmdlLFxuXHRsYWJlbCA9ICdQaWNrIGEgZGF0ZScsXG5cdGNsYXNzTmFtZSxcblx0ZGlzYWJsZWQsXG59OiBEYXRlUGlja2VyUHJvcHMpIHtcblx0Y29uc3QgcG9wT3ZlclJlZiA9IHVzZVJlZjxIVE1MQnV0dG9uRWxlbWVudCB8IG51bGw+KG51bGwpXG5cdGNvbnN0IFtzZWxlY3RlZERhdGUsIHNldFNlbGVjdGVkRGF0ZV0gPSB1c2VTdGF0ZTxEYXRlIHwgdW5kZWZpbmVkPihkYXRlKVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0c2V0U2VsZWN0ZWREYXRlKGRhdGUpXG5cdH0sIFtkYXRlXSlcblxuXHRjb25zdCBoYW5kbGVEYXRlU2VsZWN0ID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcblx0XHRzZXRTZWxlY3RlZERhdGUoZGF0ZSlcblx0XHRpZiAoY2xvc2VPblNlbGVjdCkge1xuXHRcdFx0cG9wT3ZlclJlZi5jdXJyZW50Py5jbGljaygpXG5cdFx0fVxuXHRcdG9uQ2hhbmdlPy4oZGF0ZSlcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG5cdFx0XHQ8UG9wb3Zlcj5cblx0XHRcdFx0PFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0J2RhdGEtW2VtcHR5PXRydWVdOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCB3LWZ1bGwganVzdGlmeS1zdGFydCB0ZXh0LWxlZnQgZm9udC1ub3JtYWwnXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0ZGF0YS1lbXB0eT17IWRhdGV9XG5cdFx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PENhbGVuZGFySWNvbiAvPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRGF0ZSA/IChcblx0XHRcdFx0XHRcdFx0ZGF5anMoc2VsZWN0ZWREYXRlKS5mb3JtYXQoJ01NTSBELCBZWVlZJylcblx0XHRcdFx0XHRcdCkgOiAoXG5cdFx0XHRcdFx0XHRcdDxzcGFuPntsYWJlbH08L3NwYW4+XG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0XHQ8UG9wb3ZlckNvbnRlbnQgYWxpZ249XCJzdGFydFwiIGNsYXNzTmFtZT1cInctYXV0byBwLTBcIj5cblx0XHRcdFx0XHQ8UG9wb3ZlckNsb3NlIHJlZj17cG9wT3ZlclJlZn0gc3R5bGU9e3sgZGlzcGxheTogJ25vbmUnIH19IC8+XG5cdFx0XHRcdFx0PENhbGVuZGFyXG5cdFx0XHRcdFx0XHRkZWZhdWx0TW9udGg9e3NlbGVjdGVkRGF0ZX1cblx0XHRcdFx0XHRcdGRpc2FibGVkPXtkaXNhYmxlZH1cblx0XHRcdFx0XHRcdG9uU2VsZWN0PXtoYW5kbGVEYXRlU2VsZWN0fVxuXHRcdFx0XHRcdFx0c2VsZWN0ZWQ9e3NlbGVjdGVkRGF0ZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQ8L1BvcG92ZXJDb250ZW50PlxuXHRcdFx0PC9Qb3BvdmVyPlxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IENoZXZyb25MZWZ0SWNvbiwgQ2hldnJvblJpZ2h0SWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXRNb250aFdlZWtzLCBpc1RvZGF5IH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuaW50ZXJmYWNlIENhbGVuZGFyUHJvcHMge1xuXHRzZWxlY3RlZD86IERhdGVcblx0ZGVmYXVsdE1vbnRoPzogRGF0ZVxuXHRvblNlbGVjdD86IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB2b2lkXG5cdGRpc2FibGVkPzogKGRhdGU6IERhdGUpID0+IGJvb2xlYW5cblx0Zmlyc3REYXlPZldlZWs/OiBudW1iZXJcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IFdFRUtEQVlfTEFCRUxTID0gWydTJywgJ00nLCAnVCcsICdXJywgJ1QnLCAnRicsICdTJ11cblxuZXhwb3J0IGZ1bmN0aW9uIENhbGVuZGFyKHtcblx0c2VsZWN0ZWQsXG5cdGRlZmF1bHRNb250aCxcblx0b25TZWxlY3QsXG5cdGRpc2FibGVkLFxuXHRmaXJzdERheU9mV2VlayA9IDAsXG5cdGNsYXNzTmFtZSxcbn06IENhbGVuZGFyUHJvcHMpIHtcblx0Y29uc3QgW3ZpZXdNb250aCwgc2V0Vmlld01vbnRoXSA9IHVzZVN0YXRlPERheWpzPigoKSA9PlxuXHRcdGRheWpzKGRlZmF1bHRNb250aCA/PyBzZWxlY3RlZCA/PyBuZXcgRGF0ZSgpKS5zdGFydE9mKCdtb250aCcpXG5cdClcblxuXHRjb25zdCB3ZWVrcyA9IGdldE1vbnRoV2Vla3Modmlld01vbnRoLCBmaXJzdERheU9mV2Vlaylcblx0Y29uc3Qgc2VsZWN0ZWRLZXkgPSBzZWxlY3RlZFxuXHRcdD8gZGF5anMoc2VsZWN0ZWQpLmZvcm1hdCgnWVlZWS1NTS1ERCcpXG5cdFx0OiB1bmRlZmluZWRcblx0Y29uc3Qgd2Vla2RheUhlYWRlcnMgPSBBcnJheS5mcm9tKFxuXHRcdHsgbGVuZ3RoOiA3IH0sXG5cdFx0KF8sIGkpID0+IFdFRUtEQVlfTEFCRUxTWyhmaXJzdERheU9mV2VlayArIGkpICUgN11cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignYmctYmFja2dyb3VuZCBwLTMgdy1bMjgwcHhdJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhbGVuZGFyXCJcblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBtYi0yXCI+XG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRhcmlhLWxhYmVsPVwiUHJldmlvdXMgbW9udGhcIlxuXHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNldFZpZXdNb250aCgobSkgPT4gbS5zdWJ0cmFjdCgxLCAnbW9udGgnKSl9XG5cdFx0XHRcdFx0c2l6ZT1cImljb25cIlxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8Q2hldnJvbkxlZnRJY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1tZWRpdW0gc2VsZWN0LW5vbmVcIj5cblx0XHRcdFx0XHR7dmlld01vbnRoLmZvcm1hdCgnTU1NTSBZWVlZJyl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0YXJpYS1sYWJlbD1cIk5leHQgbW9udGhcIlxuXHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNldFZpZXdNb250aCgobSkgPT4gbS5hZGQoMSwgJ21vbnRoJykpfVxuXHRcdFx0XHRcdHNpemU9XCJpY29uXCJcblx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PENoZXZyb25SaWdodEljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L2Rpdj5cblxuXHRcdFx0PHRhYmxlXG5cdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBib3JkZXItY29sbGFwc2VcIlxuXHRcdFx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9hMTF5L25vTm9uaW50ZXJhY3RpdmVFbGVtZW50VG9JbnRlcmFjdGl2ZVJvbGU6IGRhdGUtcGlja2VyIHBhdHRlcm4g4oCUIFdBSS1BUklBIGdyaWQgcm9sZSBvbiBhIHRhYmxlIGlzIGNhbm9uaWNhbCBmb3IgY2FsZW5kYXJzXG5cdFx0XHRcdHJvbGU9XCJncmlkXCJcblx0XHRcdD5cblx0XHRcdFx0PHRoZWFkPlxuXHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdHt3ZWVrZGF5SGVhZGVycy5tYXAoKGxhYmVsLCBpKSA9PiAoXG5cdFx0XHRcdFx0XHRcdDx0aFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXhzIGZvbnQtbWVkaXVtIHNlbGVjdC1ub25lIHB5LTFcIlxuXHRcdFx0XHRcdFx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9BcnJheUluZGV4S2V5OiB3ZWVrZGF5IGhlYWRlciBvcmRlciBpcyBzdGFibGVcblx0XHRcdFx0XHRcdFx0XHRrZXk9e2l9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7bGFiZWx9XG5cdFx0XHRcdFx0XHRcdDwvdGg+XG5cdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHQ8L3RoZWFkPlxuXHRcdFx0XHQ8dGJvZHk+XG5cdFx0XHRcdFx0e3dlZWtzLm1hcCgod2Vlaywgd2Vla0lkeCkgPT4gKFxuXHRcdFx0XHRcdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0FycmF5SW5kZXhLZXk6IHdlZWsgcm93IG9yZGVyIGlzIHN0YWJsZSB3aXRoaW4gYSBtb250aFxuXHRcdFx0XHRcdFx0PHRyIGtleT17d2Vla0lkeH0+XG5cdFx0XHRcdFx0XHRcdHt3ZWVrLm1hcCgoZGF5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgaXNPdXRzaWRlID0gIWRheS5pc1NhbWUodmlld01vbnRoLCAnbW9udGgnKVxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlzU2VsZWN0ZWQgPSBkYXkuZm9ybWF0KCdZWVlZLU1NLUREJykgPT09IHNlbGVjdGVkS2V5XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgaXNEaXNhYmxlZCA9IGRpc2FibGVkPy4oZGF5LnRvRGF0ZSgpKSA/PyBmYWxzZVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwicC0wIHRleHQtY2VudGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS1kaXNhYmxlZD17aXNEaXNhYmxlZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS1vdXRzaWRlPXtpc091dHNpZGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtc2VsZWN0ZWQ9e2lzU2VsZWN0ZWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17ZGF5LnRvSVNPU3RyaW5nKCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvbm9Ob25pbnRlcmFjdGl2ZUVsZW1lbnRUb0ludGVyYWN0aXZlUm9sZTogZGF0ZS1waWNrZXIgcGF0dGVybiDigJQgV0FJLUFSSUEgZ3JpZGNlbGwgb24gdGQgaXMgY2Fub25pY2FsOyBrZXlib2FyZCBuYXYgbGl2ZXMgb24gdGhlIGNoaWxkIGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyb2xlPVwiZ3JpZGNlbGxcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJJbmRleD17LTF9XG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxidXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmlhLWRpc2FibGVkPXtpc0Rpc2FibGVkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyaWEtaGlkZGVuPXtpc091dHNpZGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd3LWZ1bGwgYXNwZWN0LXNxdWFyZSByb3VuZGVkLW1kIHRleHQtc20gc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0IWlzRGlzYWJsZWQgJiYgJ2hvdmVyOmJnLWFjY2VudCBjdXJzb3ItcG9pbnRlcicsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpc091dHNpZGUgJiYgJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZC81MCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpc1RvZGF5KGRheSkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0IWlzU2VsZWN0ZWQgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2JnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlzU2VsZWN0ZWQgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZm9udC1tZWRpdW0nLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXNEaXNhYmxlZCAmJiAnb3BhY2l0eS01MCBjdXJzb3Itbm90LWFsbG93ZWQnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLWRpc2FibGVkPXtpc0Rpc2FibGVkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtc2VsZWN0ZWQ9e2lzU2VsZWN0ZWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2lzRGlzYWJsZWQgfHwgaXNPdXRzaWRlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IG9uU2VsZWN0Py4oZGF5LnRvRGF0ZSgpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJJbmRleD17aXNPdXRzaWRlID8gLTEgOiAwfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e2RheS5mb3JtYXQoJ0QnKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0fSl9XG5cdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdCkpfVxuXHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0PC90YWJsZT5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBQb3BvdmVyUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1wb3BvdmVyJ1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gUG9wb3Zlcih7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gPFBvcG92ZXJQcmltaXRpdmUuUm9vdCBkYXRhLXNsb3Q9XCJwb3BvdmVyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBQb3BvdmVyVHJpZ2dlcih7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5UcmlnZ2VyPikge1xuXHRyZXR1cm4gPFBvcG92ZXJQcmltaXRpdmUuVHJpZ2dlciBkYXRhLXNsb3Q9XCJwb3BvdmVyLXRyaWdnZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJDb250ZW50KHtcblx0Y2xhc3NOYW1lLFxuXHRhbGlnbiA9ICdjZW50ZXInLFxuXHRzaWRlT2Zmc2V0ID0gNCxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLkNvbnRlbnQ+KSB7XG5cdHJldHVybiAoXG5cdFx0PFBvcG92ZXJQcmltaXRpdmUuUG9ydGFsPlxuXHRcdFx0PFBvcG92ZXJQcmltaXRpdmUuQ29udGVudFxuXHRcdFx0XHRhbGlnbj17YWxpZ259XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2JnLXBvcG92ZXIgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGRhdGEtW3NpZGU9Ym90dG9tXTpzbGlkZS1pbi1mcm9tLXRvcC0yIGRhdGEtW3NpZGU9bGVmdF06c2xpZGUtaW4tZnJvbS1yaWdodC0yIGRhdGEtW3NpZGU9cmlnaHRdOnNsaWRlLWluLWZyb20tbGVmdC0yIGRhdGEtW3NpZGU9dG9wXTpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yIHotNTAgdy03MiBvcmlnaW4tKC0tcmFkaXgtcG9wb3Zlci1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pIHJvdW5kZWQtbWQgYm9yZGVyIHAtNCBzaGFkb3ctbWQgb3V0bGluZS1oaWRkZW4nLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJwb3BvdmVyLWNvbnRlbnRcIlxuXHRcdFx0XHRzaWRlT2Zmc2V0PXtzaWRlT2Zmc2V0fVxuXHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHQvPlxuXHRcdDwvUG9wb3ZlclByaW1pdGl2ZS5Qb3J0YWw+XG5cdClcbn1cblxuZnVuY3Rpb24gUG9wb3ZlckFuY2hvcih7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5BbmNob3I+KSB7XG5cdHJldHVybiA8UG9wb3ZlclByaW1pdGl2ZS5BbmNob3IgZGF0YS1zbG90PVwicG9wb3Zlci1hbmNob3JcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmV4cG9ydCB7IFBvcG92ZXIsIFBvcG92ZXJBbmNob3IsIFBvcG92ZXJDb250ZW50LCBQb3BvdmVyVHJpZ2dlciB9XG4iLAogICAgImltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIElucHV0KHsgY2xhc3NOYW1lLCB0eXBlLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnaW5wdXQnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxpbnB1dFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZpbGU6dGV4dC1mb3JlZ3JvdW5kIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBzZWxlY3Rpb246YmctcHJpbWFyeSBzZWxlY3Rpb246dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGFyazpiZy1pbnB1dC8zMCBib3JkZXItaW5wdXQgZmxleCBoLTkgdy1mdWxsIG1pbi13LTAgcm91bmRlZC1tZCBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHgtMyBweS0xIHRleHQtYmFzZSBzaGFkb3cteHMgdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZpbGU6aW5saW5lLWZsZXggZmlsZTpoLTcgZmlsZTpib3JkZXItMCBmaWxlOmJnLXRyYW5zcGFyZW50IGZpbGU6dGV4dC1zbSBmaWxlOmZvbnQtbWVkaXVtIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAgbWQ6dGV4dC1zbScsXG5cdFx0XHRcdCdmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XScsXG5cdFx0XHRcdCdhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJpbnB1dFwiXG5cdFx0XHR0eXBlPXt0eXBlfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHsgSW5wdXQgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBMYWJlbFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtbGFiZWwnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBMYWJlbCh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBMYWJlbFByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxMYWJlbFByaW1pdGl2ZS5Sb290XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1zbSBsZWFkaW5nLW5vbmUgZm9udC1tZWRpdW0gc2VsZWN0LW5vbmUgZ3JvdXAtZGF0YS1bZGlzYWJsZWQ9dHJ1ZV06cG9pbnRlci1ldmVudHMtbm9uZSBncm91cC1kYXRhLVtkaXNhYmxlZD10cnVlXTpvcGFjaXR5LTUwIHBlZXItZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIHBlZXItZGlzYWJsZWQ6b3BhY2l0eS01MCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImxhYmVsXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7IExhYmVsIH1cbiIsCiAgICAiaW1wb3J0ICogYXMgU2Nyb2xsQXJlYVByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2Nyb2xsLWFyZWEnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgU2Nyb2xsQXJlYVByb3BzXG5cdGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuUm9vdD4ge1xuXHR2aWV3UG9ydFByb3BzPzogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuVmlld3BvcnQ+XG59XG5cbmZ1bmN0aW9uIFNjcm9sbEFyZWEoe1xuXHRjbGFzc05hbWUsXG5cdGNoaWxkcmVuLFxuXHR2aWV3UG9ydFByb3BzLFxuXHQuLi5wcm9wc1xufTogU2Nyb2xsQXJlYVByb3BzKSB7XG5cdHJldHVybiAoXG5cdFx0PFNjcm9sbEFyZWFQcmltaXRpdmUuUm9vdFxuXHRcdFx0Y2xhc3NOYW1lPXtjbigncmVsYXRpdmUnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2Nyb2xsLWFyZWFcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLlZpZXdwb3J0XG5cdFx0XHRcdHsuLi52aWV3UG9ydFByb3BzfVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBzaXplLWZ1bGwgcm91bmRlZC1baW5oZXJpdF0gdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMScsXG5cdFx0XHRcdFx0dmlld1BvcnRQcm9wcz8uY2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhLXZpZXdwb3J0XCJcblx0XHRcdD5cblx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0PC9TY3JvbGxBcmVhUHJpbWl0aXZlLlZpZXdwb3J0PlxuXHRcdFx0PFNjcm9sbEJhciAvPlxuXHRcdFx0PFNjcm9sbEFyZWFQcmltaXRpdmUuQ29ybmVyIC8+XG5cdFx0PC9TY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3Q+XG5cdClcbn1cblxuZnVuY3Rpb24gU2Nyb2xsQmFyKHtcblx0Y2xhc3NOYW1lLFxuXHRvcmllbnRhdGlvbiA9ICd2ZXJ0aWNhbCcsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLlNjcm9sbEFyZWFTY3JvbGxiYXJcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IHRvdWNoLW5vbmUgcC1weCB0cmFuc2l0aW9uLWNvbG9ycyBzZWxlY3Qtbm9uZScsXG5cdFx0XHRcdG9yaWVudGF0aW9uID09PSAndmVydGljYWwnICYmXG5cdFx0XHRcdFx0J2gtZnVsbCB3LTIuNSBib3JkZXItbCBib3JkZXItbC10cmFuc3BhcmVudCcsXG5cdFx0XHRcdG9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcgJiZcblx0XHRcdFx0XHQnaC0yLjUgZmxleC1jb2wgYm9yZGVyLXQgYm9yZGVyLXQtdHJhbnNwYXJlbnQnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS1zY3JvbGxiYXJcIlxuXHRcdFx0b3JpZW50YXRpb249e29yaWVudGF0aW9ufVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLlNjcm9sbEFyZWFUaHVtYlxuXHRcdFx0XHRjbGFzc05hbWU9XCJiZy1ib3JkZXIgcmVsYXRpdmUgZmxleC0xIHJvdW5kZWQtZnVsbFwiXG5cdFx0XHRcdGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhLXRodW1iXCJcblx0XHRcdC8+XG5cdFx0PC9TY3JvbGxBcmVhUHJpbWl0aXZlLlNjcm9sbEFyZWFTY3JvbGxiYXI+XG5cdClcbn1cblxuZXhwb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH1cbiIsCiAgICAiaW1wb3J0IHsgQ2xvY2sgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9pbnB1dCdcbmltcG9ydCB7XG5cdFBvcG92ZXIsXG5cdFBvcG92ZXJDb250ZW50LFxuXHRQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3BvcG92ZXInXG5pbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgdXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlciB9IGZyb20gJ0AvaG9va3MvdXNlLWF1dG9jb21wbGV0ZS10aW1lcGlja2VyJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuaW1wb3J0IHR5cGUgeyBUaW1lRm9ybWF0IH0gZnJvbSAnQC90eXBlcydcblxuY29uc3QgaGFuZGxlV2hlZWwgPSAoZTogUmVhY3QuV2hlZWxFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcblx0Ly8gUHJldmVudCBldmVudCBmcm9tIGJ1YmJsaW5nIHRvIHByZXZlbnQgUG9wb3ZlciBmcm9tIGNsb3Npbmdcblx0ZS5zdG9wUHJvcGFnYXRpb24oKVxufVxuXG5pbnRlcmZhY2UgVGltZVBpY2tlclByb3BzIHtcblx0dmFsdWU6IHN0cmluZ1xuXHRvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcblx0bWluVGltZT86IHN0cmluZ1xuXHRtYXhUaW1lPzogc3RyaW5nXG5cdHRpbWVGb3JtYXQ/OiBUaW1lRm9ybWF0XG5cdHBsYWNlaG9sZGVyPzogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRkaXNhYmxlZD86IGJvb2xlYW5cblx0bmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVGltZVBpY2tlcih7XG5cdHZhbHVlLFxuXHRvbkNoYW5nZSxcblx0bWluVGltZSA9ICcwMDowMCcsXG5cdG1heFRpbWUgPSAnMjM6NDUnLFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRwbGFjZWhvbGRlciA9ICdTZWxlY3QgdGltZS4uLicsXG5cdGNsYXNzTmFtZSxcblx0ZGlzYWJsZWQgPSBmYWxzZSxcblx0bmFtZSxcbn06IFRpbWVQaWNrZXJQcm9wcykge1xuXHRjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblx0Y29uc3QgW3NlYXJjaCwgc2V0U2VhcmNoXSA9IHVzZVN0YXRlKCcnKVxuXHRjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuXHRjb25zdCB0cmlnZ2VyUmVmID0gdXNlUmVmPEhUTUxCdXR0b25FbGVtZW50PihudWxsKVxuXHRjb25zdCBbdHJpZ2dlcldpZHRoLCBzZXRUcmlnZ2VyV2lkdGhdID0gdXNlU3RhdGU8bnVtYmVyPigwKVxuXG5cdGNvbnN0IHsgdGltZU9wdGlvbnMsIGZvcm1hdFRpbWUgfSA9IHVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXIoe1xuXHRcdHRpbWVGb3JtYXQsXG5cdFx0bWluVGltZSxcblx0XHRtYXhUaW1lLFxuXHR9KVxuXG5cdC8vIEZpbHRlciB0aW1lIG9wdGlvbnMgYmFzZWQgb24gc2VhcmNoXG5cdGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IHRpbWVPcHRpb25zLmZpbHRlcigodGltZSkgPT4ge1xuXHRcdGNvbnN0IGZvcm1hdHRlZFRpbWUgPSBmb3JtYXRUaW1lKHRpbWUpXG5cdFx0cmV0dXJuIGZvcm1hdHRlZFRpbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSlcblx0fSlcblxuXHRjb25zdCBoYW5kbGVTZWxlY3QgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0b25DaGFuZ2UodGltZSlcblx0XHRzZXRPcGVuKGZhbHNlKVxuXHRcdHNldFNlYXJjaCgnJylcblx0fVxuXG5cdC8vIE1lYXN1cmUgdHJpZ2dlciB3aWR0aCBhbmQgZm9jdXMgaW5wdXQgd2hlbiBwb3BvdmVyIG9wZW5zXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKG9wZW4pIHtcblx0XHRcdGlmICh0cmlnZ2VyUmVmLmN1cnJlbnQpIHtcblx0XHRcdFx0c2V0VHJpZ2dlcldpZHRoKHRyaWdnZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aClcblx0XHRcdH1cblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRpbnB1dFJlZi5jdXJyZW50Py5mb2N1cygpXG5cdFx0XHR9LCAwKVxuXHRcdH1cblx0fSwgW29wZW5dKVxuXG5cdGNvbnN0IGN1cnJlbnRUaW1lU3RyaW5nID0gdmFsdWUgPyBmb3JtYXRUaW1lKHZhbHVlKSA6IHBsYWNlaG9sZGVyXG5cblx0cmV0dXJuIChcblx0XHQ8UG9wb3ZlciBvbk9wZW5DaGFuZ2U9e3NldE9wZW59IG9wZW49e29wZW59PlxuXHRcdFx0PFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRhcmlhLWNvbnRyb2xzPVwidGltZS1waWNrZXItbGlzdGJveFwiXG5cdFx0XHRcdFx0YXJpYS1leHBhbmRlZD17b3Blbn1cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKCd3LWZ1bGwganVzdGlmeS1zdGFydCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMudGltZVBpY2tlcihuYW1lKX1cblx0XHRcdFx0XHRkaXNhYmxlZD17ZGlzYWJsZWR9XG5cdFx0XHRcdFx0cmVmPXt0cmlnZ2VyUmVmfVxuXHRcdFx0XHRcdHJvbGU9XCJjb21ib2JveFwiXG5cdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PENsb2NrIGNsYXNzTmFtZT1cIm1yLTIgaC00IHctNFwiIC8+XG5cdFx0XHRcdFx0e2N1cnJlbnRUaW1lU3RyaW5nfVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvUG9wb3ZlclRyaWdnZXI+XG5cdFx0XHQ8UG9wb3ZlckNvbnRlbnRcblx0XHRcdFx0YWxpZ249XCJzdGFydFwiXG5cdFx0XHRcdGNsYXNzTmFtZT1cInAtMFwiXG5cdFx0XHRcdHN0eWxlPXt7IHdpZHRoOiB0cmlnZ2VyV2lkdGggfX1cblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJwLTIgYm9yZGVyLWJcIj5cblx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOFwiXG5cdFx0XHRcdFx0XHRvbkNoYW5nZT17KGUpID0+IHNldFNlYXJjaChlLnRhcmdldC52YWx1ZSl9XG5cdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj1cIlNlYXJjaCB0aW1lLi4uXCJcblx0XHRcdFx0XHRcdHJlZj17aW5wdXRSZWZ9XG5cdFx0XHRcdFx0XHR2YWx1ZT17c2VhcmNofVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8U2Nyb2xsQXJlYSBjbGFzc05hbWU9XCJoLVsyMDBweF1cIiBvbldoZWVsPXtoYW5kbGVXaGVlbH0+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJwLTFcIj5cblx0XHRcdFx0XHRcdHtmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09PSAwID8gKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInB5LTYgdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0XHROL0Fcblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQpIDogKFxuXHRcdFx0XHRcdFx0XHRmaWx0ZXJlZE9wdGlvbnMubWFwKCh0aW1lKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgdGltZVN0cmluZyA9IGZvcm1hdFRpbWUodGltZSlcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpc1NlbGVjdGVkID0gdGltZSA9PT0gdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdyZWxhdGl2ZSBmbGV4IHctZnVsbCBjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSBpdGVtcy1jZW50ZXIgcm91bmRlZC1zbSBweC0yIHB5LTEuNSB0ZXh0LXNtIG91dGxpbmUtbm9uZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXNTZWxlY3RlZCAmJiAnYmctYWNjZW50IHRleHQtYWNjZW50LWZvcmVncm91bmQnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17dGltZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0KHRpbWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3RpbWVTdHJpbmd9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L1Njcm9sbEFyZWE+XG5cdFx0XHQ8L1BvcG92ZXJDb250ZW50PlxuXHRcdDwvUG9wb3Zlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFRpbWVGb3JtYXQgfSBmcm9tICdAL3R5cGVzJ1xuXG5pbnRlcmZhY2UgVXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlclByb3BzIHtcblx0dGltZUZvcm1hdD86IFRpbWVGb3JtYXRcblx0bWluVGltZT86IHN0cmluZ1xuXHRtYXhUaW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VBdXRvY29tcGxldGVUaW1lcGlja2VyKHtcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0bWluVGltZSA9ICcwMDowMCcsXG5cdG1heFRpbWUgPSAnMjM6NDUnLFxufTogVXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlclByb3BzKSB7XG5cdC8vIEdlbmVyYXRlIHRpbWUgb3B0aW9ucyAoMTUtbWludXRlIGludGVydmFscykgd2l0aGluIG1pbi9tYXggcmFuZ2Vcblx0Y29uc3QgdGltZU9wdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRjb25zdCB0aW1lczogc3RyaW5nW10gPSBbXVxuXHRcdGNvbnN0IFttaW5Ib3VyLCBtaW5NaW51dGVdID0gbWluVGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cdFx0Y29uc3QgW21heEhvdXIsIG1heE1pbnV0ZV0gPSBtYXhUaW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblxuXHRcdGNvbnN0IG1pblRvdGFsTWludXRlcyA9IG1pbkhvdXIgKiA2MCArIG1pbk1pbnV0ZVxuXHRcdGNvbnN0IG1heFRvdGFsTWludXRlcyA9IG1heEhvdXIgKiA2MCArIG1heE1pbnV0ZVxuXG5cdFx0Zm9yIChcblx0XHRcdGxldCB0b3RhbE1pbnV0ZXMgPSBtaW5Ub3RhbE1pbnV0ZXM7XG5cdFx0XHR0b3RhbE1pbnV0ZXMgPD0gbWF4VG90YWxNaW51dGVzO1xuXHRcdFx0dG90YWxNaW51dGVzICs9IDE1XG5cdFx0KSB7XG5cdFx0XHRjb25zdCBob3VycyA9IE1hdGguZmxvb3IodG90YWxNaW51dGVzIC8gNjApXG5cdFx0XHRjb25zdCBtaW51dGVzID0gdG90YWxNaW51dGVzICUgNjBcblxuXHRcdFx0Y29uc3QgdGltZVN0cmluZyA9IGAke2hvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06JHttaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gXG5cdFx0XHR0aW1lcy5wdXNoKHRpbWVTdHJpbmcpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRpbWVzXG5cdH0sIFttaW5UaW1lLCBtYXhUaW1lXSlcblxuXHRjb25zdCBmb3JtYXRUaW1lID0gKHRpbWU6IHN0cmluZykgPT4ge1xuXHRcdGNvbnN0IFtob3VycywgbWludXRlc10gPSB0aW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblx0XHRjb25zdCBwZXJpb2QgPSBob3VycyA+PSAxMiA/ICdQTScgOiAnQU0nXG5cdFx0Y29uc3QgZGlzcGxheUhvdXJzID0gaG91cnMgPT09IDAgPyAxMiA6IGhvdXJzID4gMTIgPyBob3VycyAtIDEyIDogaG91cnNcblxuXHRcdGlmICh0aW1lRm9ybWF0ID09PSAnMjQtaG91cicpIHtcblx0XHRcdHJldHVybiBgJHtob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7bWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YFxuXHRcdH1cblxuXHRcdHJldHVybiBgJHtkaXNwbGF5SG91cnN9OiR7bWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9ICR7cGVyaW9kfWBcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0dGltZU9wdGlvbnMsXG5cdFx0Zm9ybWF0VGltZSxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBnZXREYXlLZXksIGlzVG9kYXkgfSBmcm9tICcuL2RhdGUtdXRpbHMnXG5cbnR5cGUgSWQgPSBzdHJpbmcgfCBudW1iZXJcblxuY29uc3QgcGFkMiA9IChuOiBudW1iZXIgfCBzdHJpbmcpOiBzdHJpbmcgPT4gU3RyaW5nKG4pLnBhZFN0YXJ0KDIsICcwJylcbmNvbnN0IHBhZEhvdXJJZk51bWJlciA9IChob3VyOiBudW1iZXIgfCBzdHJpbmcpOiBzdHJpbmcgPT5cblx0dHlwZW9mIGhvdXIgPT09ICdudW1iZXInID8gcGFkMihob3VyKSA6IGhvdXJcblxuLyoqXG4gKiBDZW50cmFsaXplZCBmYWN0b3J5IGZvciBrZXlzLCBpZHMsIGFuZCBkYXRhLXRlc3RpZHMuIEVhY2ggZW50cnkgcmV0dXJucyBhXG4gKiBzZW1hbnRpYyBzdHJpbmcgaWRlbnRpZmllZCBieSBpdHMgY29uY2VwdCBwcmVmaXggKGUuZy4gYGRheS1jb2wtYCxcbiAqIGBkYXktY2VsbC1gLCBgd2Vlay1oZWFkZXItZGF5LWApLiBUaGUgY2FsbCBzaXRlIGNob29zZXMgdGhlIHJvbGUg4oCUIHRoZVxuICogc2FtZSBzdHJpbmcgY2FuIHNlcnZlIGFzIGEgUmVhY3QgYGtleT1gLCBhbiBgaWRgLCBvciBhIGBkYXRhLXRlc3RpZGAuXG4gKlxuICogSW5zcGlyZWQgYnkgaHR0cHM6Ly90a2RvZG8uZXUvYmxvZy9lZmZlY3RpdmUtcmVhY3QtcXVlcnkta2V5cyN1c2UtcXVlcnkta2V5LWZhY3Rvcmllcy5cbiAqIFByZXZlbnRzIGFkLWhvYyBzdHJpbmcgY29uY2F0ZW5hdGlvbiBzbyBjcm9zcy1jdXR0aW5nIGNoYW5nZXMgKHByZWZpeCxcbiAqIHNlcGFyYXRvciwgZm9ybWF0KSBhcmUgb25lLXBvaW50LlxuICovXG5leHBvcnQgY29uc3Qga2V5cyA9IHtcblx0Ly8gR3JpZCBjb2x1bW4gY29uZmlndXJhdGlvbiBpZHNcblx0Y29sOiB7XG5cdFx0dGltZTogJ3RpbWUtY29sJyxcblx0XHRkYXRlOiAnZGF0ZS1jb2wnLFxuXHRcdGRheTogKGRheTogRGF5anMsIHJlc291cmNlSWQ/OiBJZCkgPT4ge1xuXHRcdFx0Y29uc3QgYmFzZSA9IGBkYXktY29sLSR7Z2V0RGF5S2V5KGRheSl9YFxuXHRcdFx0cmV0dXJuIHJlc291cmNlSWQgIT0gbnVsbCA/IGAke2Jhc2V9LXJlc291cmNlLSR7cmVzb3VyY2VJZH1gIDogYmFzZVxuXHRcdH0sXG5cdFx0cmVzb3VyY2U6IChzY29wZTogJ3dlZWsnIHwgJ21vbnRoJywgcmVzb3VyY2VJZDogSWQpID0+XG5cdFx0XHRgJHtzY29wZX0tY29sLXJlc291cmNlLSR7cmVzb3VyY2VJZH1gLFxuXHRcdGFsbERheTogKGRheTogRGF5anMsIGluZGV4OiBudW1iZXIpID0+XG5cdFx0XHRgYWxsLWRheS1jb2wtJHtnZXREYXlLZXkoZGF5KX0tJHtpbmRleH1gLFxuXHR9LFxuXG5cdC8vIEdyaWQgY2VsbCBpZGVudGlmaWVyc1xuXHRjZWxsOiB7XG5cdFx0ZGF5OiAoZGF5OiBEYXlqcywgaG91cj86IG51bWJlciB8IHN0cmluZywgbWludXRlOiBudW1iZXIgfCBzdHJpbmcgPSAwKSA9PiB7XG5cdFx0XHRjb25zdCBrID0gZ2V0RGF5S2V5KGRheSlcblx0XHRcdHJldHVybiBob3VyICE9IG51bGxcblx0XHRcdFx0PyBgZGF5LWNlbGwtJHtrfS0ke3BhZDIoaG91cil9LSR7cGFkMihtaW51dGUpfWBcblx0XHRcdFx0OiBgZGF5LWNlbGwtJHtrfWBcblx0XHR9LFxuXHRcdHZlcnRpY2FsVGltZTogKGhvdXI6IG51bWJlciB8IHN0cmluZykgPT4gYHZlcnRpY2FsLXRpbWUtJHtwYWQyKGhvdXIpfWAsXG5cdFx0dmVydGljYWw6IChcblx0XHRcdGRheTogRGF5anMsXG5cdFx0XHRob3VyOiBudW1iZXIgfCBzdHJpbmcsXG5cdFx0XHRtaW51dGU6IG51bWJlciB8IHN0cmluZyxcblx0XHRcdHJlc291cmNlSWQ/OiBJZFxuXHRcdCkgPT4ge1xuXHRcdFx0Y29uc3QgYmFzZSA9IGB2ZXJ0aWNhbC1jZWxsLSR7Z2V0RGF5S2V5KGRheSl9LSR7cGFkMihob3VyKX0tJHtwYWQyKG1pbnV0ZSl9YFxuXHRcdFx0cmV0dXJuIHJlc291cmNlSWQgIT0gbnVsbCA/IGAke2Jhc2V9LXJlc291cmNlLSR7cmVzb3VyY2VJZH1gIDogYmFzZVxuXHRcdH0sXG5cdH0sXG5cblx0Ly8gQ29udGFpbmVyICh3cmFwcGVyKSBpZGVudGlmaWVyc1xuXHRjb250YWluZXI6IHtcblx0XHR2ZXJ0aWNhbDoge1xuXHRcdFx0Y29sOiAoaWQ6IElkKSA9PiBgdmVydGljYWwtY29sLSR7aWR9YCxcblx0XHR9LFxuXHRcdGhvcml6b250YWw6IHtcblx0XHRcdHJvdzogKGlkOiBJZCkgPT4gYGhvcml6b250YWwtcm93LSR7aWR9YCxcblx0XHRcdHJvd0xhYmVsOiAocmVzb3VyY2VJZDogSWQpID0+IGBob3Jpem9udGFsLXJvdy1sYWJlbC0ke3Jlc291cmNlSWR9YCxcblx0XHRcdGV2ZW50OiAoZXZlbnRJZDogSWQpID0+IGBob3Jpem9udGFsLWV2ZW50LSR7ZXZlbnRJZH1gLFxuXHRcdH0sXG5cdFx0ZXZlbnRzTGF5ZXI6IChvcmllbnRhdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJywgaWQ6IElkKSA9PlxuXHRcdFx0YCR7b3JpZW50YXRpb259LWV2ZW50cy0ke2lkfWAsXG5cdH0sXG5cblx0Ly8gSGVhZGVyIGlkZW50aWZpZXJzXG5cdGhlYWRlcjoge1xuXHRcdHJlc291cmNlOiB7XG5cdFx0XHR3ZWVrRGF5OiAncmVzb3VyY2Utd2Vlay1kYXktaGVhZGVyJyxcblx0XHRcdHRpbWVMYWJlbDogKHZpZXc6ICd3ZWVrJyB8ICdkYXknLCBob3VyOiBudW1iZXIgfCBzdHJpbmcpID0+XG5cdFx0XHRcdGByZXNvdXJjZS0ke3ZpZXd9LXRpbWUtbGFiZWwtJHtwYWRIb3VySWZOdW1iZXIoaG91cil9YCxcblx0XHR9LFxuXHRcdHdlZWtkYXk6ICh2aWV3OiAnd2VlaycgfCAnbW9udGgnLCBuYW1lOiBzdHJpbmcpID0+XG5cdFx0XHRgJHt2aWV3fS1oZWFkZXItd2Vla2RheS0ke25hbWUudG9Mb3dlckNhc2UoKX1gLFxuXHRcdHdlZWs6IHtcblx0XHRcdGRheTogKGRheTogRGF5anMpID0+IGB3ZWVrLWhlYWRlci1kYXktJHtkYXkudG9JU09TdHJpbmcoKX1gLFxuXHRcdFx0aG91cjogKGRheTogRGF5anMsIHJlZjogSWQpID0+XG5cdFx0XHRcdGB3ZWVrLWhlYWRlci1ob3VyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9LSR7cmVmfWAsXG5cdFx0XHRyZXNvdXJjZTogKHJlc291cmNlSWQ6IElkKSA9PiBgd2Vlay1oZWFkZXItcmVzb3VyY2UtJHtyZXNvdXJjZUlkfWAsXG5cdFx0fSxcblx0XHR5ZWFyOiB7XG5cdFx0XHRtb250aDogKG1vbnRoS2V5OiBzdHJpbmcsIHBhcnQ/OiAndGl0bGUnIHwgJ2NvdW50JyB8ICdtaW5pJykgPT5cblx0XHRcdFx0cGFydCA/IGB5ZWFyLW1vbnRoLSR7cGFydH0tJHttb250aEtleX1gIDogYHllYXItbW9udGgtJHttb250aEtleX1gLFxuXHRcdFx0ZGF5OiAobW9udGhLZXk6IHN0cmluZywgZGF5S2V5OiBzdHJpbmcpID0+XG5cdFx0XHRcdGB5ZWFyLWRheS0ke21vbnRoS2V5fS0ke2RheUtleX1gLFxuXHRcdH0sXG5cdH0sXG5cblx0Ly8gUmVzb3VyY2Utc2NvcGVkIGFsbC1kYXkgcm93IGlkIChmYWxscyBiYWNrIHRvICdtYWluJyB3aGVuIHVuc2NvcGVkKS5cblx0YWxsRGF5Um93OiAocmVzb3VyY2VJZD86IElkKSA9PiBgYWxsZGF5LXJvdy0ke3Jlc291cmNlSWQgPz8gJ21haW4nfWAsXG5cblx0Ly8gR2VuZXJpYyBpdGVyYXRpb24ga2V5IGNvbXBvc2VyIGZvciBSZWFjdCBga2V5PWAgcHJvcHMsIGxpc3QgbWFya2Vycyxcblx0Ly8gYW5kIHN1ZmZpeGVkIHdyYXBwZXIga2V5cyAoZS5nLiBgbGlzdEtleShiYXNlLCAnYW5pbWF0ZWQnKWApLlxuXHRsaXN0S2V5OiAoLi4ucGFydHM6IEFycmF5PHN0cmluZyB8IG51bWJlcj4pID0+IHBhcnRzLmpvaW4oJy0nKSxcblxuXHQvLyBEYXlOdW1iZXIgY29tcG9uZW50IHRlc3RpZCDigJQgYGRheS1udW1iZXItdG9kYXlgIHdoZW4gdGhlIGRhdGUgaXMgdG9kYXksXG5cdC8vIG90aGVyd2lzZSBgZGF5LW51bWJlci17RH1gLlxuXHRkYXlOdW1iZXI6IChkYXRlOiBEYXlqcykgPT5cblx0XHRpc1RvZGF5KGRhdGUpID8gJ2RheS1udW1iZXItdG9kYXknIDogYGRheS1udW1iZXItJHtkYXRlLmZvcm1hdCgnRCcpfWAsXG5cblx0Ly8gRm9ybSBlbGVtZW50IHRlc3RpZCBmb3IgdGltZSBwaWNrZXJzIChuYW1lID0gJ3N0YXJ0JyAvICdlbmQnIGV0Yy4pXG5cdHRpbWVQaWNrZXI6IChuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IGB0aW1lLXBpY2tlci0ke25hbWUgPz8gJyd9YCxcblxuXHQvLyBEcm9wcGFibGUgaWRzIChkbmQta2l0IHJlZ2lzdHJ5IOKAlCBJU08gZm9yIHBlci1zbG90IHVuaXF1ZW5lc3MpLlxuXHQvLyBgZHJvcC1gIHByZWZpeCBhdm9pZHMgY29sbGlkaW5nIHdpdGggYGNlbGwuZGF5YCB0ZXN0aWRzLlxuXHRkcm9wcGFibGU6IHtcblx0XHRkYXlDZWxsOiAoZGF5OiBEYXlqcywgb3B0aW9ucz86IHsgYWxsRGF5PzogYm9vbGVhbjsgcmVzb3VyY2VJZD86IElkIH0pID0+IHtcblx0XHRcdGNvbnN0IGlzbyA9IGRheS50b0lTT1N0cmluZygpXG5cdFx0XHRjb25zdCBhbGxEYXlQYXJ0ID0gb3B0aW9ucz8uYWxsRGF5ID8gJy1hbGxkYXknIDogJydcblx0XHRcdGNvbnN0IHJlc291cmNlUGFydCA9XG5cdFx0XHRcdG9wdGlvbnM/LnJlc291cmNlSWQgIT0gbnVsbCA/IGAtcmVzb3VyY2UtJHtvcHRpb25zLnJlc291cmNlSWR9YCA6ICcnXG5cdFx0XHRyZXR1cm4gYGRyb3AtZGF5LWNlbGwtJHtpc299JHthbGxEYXlQYXJ0fSR7cmVzb3VyY2VQYXJ0fWBcblx0XHR9LFxuXHR9LFxufSBhcyBjb25zdFxuIiwKICAgICJpbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBXRUVLX0RBWVNfTlVNQkVSX01BUCB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBzcGVjaWZpYyBkYXRlIGlzIGEgYnVzaW5lc3MgZGF5LlxuICpcbiAqIEBwYXJhbSBkYXRlIFRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0gYnVzaW5lc3NIb3VycyBUaGUgYnVzaW5lc3MgaG91cnMgY29uZmlndXJhdGlvbiAoc2luZ2xlIG9yIGFycmF5KVxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgZGF0ZSBpcyBhIGJ1c2luZXNzIGRheSwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0J1c2luZXNzRGF5ID0gKFxuXHRkYXRlOiBEYXlqcyxcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbik6IGJvb2xlYW4gPT4ge1xuXHRpZiAoIWJ1c2luZXNzSG91cnMpIHtcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cblx0bGV0IGhhc01hdGNoID0gZmFsc2Vcblx0cHJvY2Vzc0J1c2luZXNzSG91cnMoYnVzaW5lc3NIb3Vycywge1xuXHRcdGRhdGUsXG5cdFx0b25NYXRjaDogKCkgPT4ge1xuXHRcdFx0aGFzTWF0Y2ggPSB0cnVlXG5cdFx0fSxcblx0fSlcblxuXHRyZXR1cm4gaGFzTWF0Y2hcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJc0J1c2luZXNzSG91ck9wdGlvbnMge1xuXHRkYXRlOiBEYXlqc1xuXHRob3VyPzogbnVtYmVyXG5cdG1pbnV0ZT86IG51bWJlclxuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHNwZWNpZmljIGhvdXIgb24gYSBzcGVjaWZpYyBkYXRlIGlzIHdpdGhpbiBidXNpbmVzcyBob3Vycy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3IgY2hlY2tpbmcgYnVzaW5lc3MgaG91cnNcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHRpbWUgaXMgd2l0aGluIGJ1c2luZXNzIGhvdXJzLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQnVzaW5lc3NIb3VyID0gKHtcblx0ZGF0ZSxcblx0aG91cixcblx0bWludXRlID0gMCxcblx0YnVzaW5lc3NIb3Vycyxcbn06IElzQnVzaW5lc3NIb3VyT3B0aW9ucyk6IGJvb2xlYW4gPT4ge1xuXHQvLyBJZiBidXNpbmVzcyBob3VycyBhcmUgbm90IGNvbmZpZ3VyZWQsIGNvbnNpZGVyIGV2ZXJ5dGhpbmcgYXMgXCJidXNpbmVzcyBob3Vyc1wiXG5cdGlmICghYnVzaW5lc3NIb3Vycykge1xuXHRcdHJldHVybiB0cnVlXG5cdH1cblxuXHQvLyBJZiBob3VyIGlzIG5vdCBwcm92aWRlZCwgd2UgYXNzdW1lIHRoZSB1c2VyIG9ubHkgY2FyZXMgYWJvdXQgdGhlIGRheVxuXHRpZiAoaG91ciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGlzQnVzaW5lc3NEYXkoZGF0ZSwgYnVzaW5lc3NIb3Vycylcblx0fVxuXG5cdGxldCBpc0luQnVzaW5lc3NIb3VyID0gZmFsc2Vcblx0Y29uc3QgY3VycmVudE1pbnV0ZXMgPSBob3VyICogNjAgKyBtaW51dGVcblxuXHRwcm9jZXNzQnVzaW5lc3NIb3VycyhidXNpbmVzc0hvdXJzLCB7XG5cdFx0ZGF0ZSxcblx0XHRvbk1hdGNoOiAoY29uZmlnKSA9PiB7XG5cdFx0XHQvLyBDaGVjayB0aW1lIGFnYWluc3QgdGhpcyBzcGVjaWZpYyBjb25maWdcblx0XHRcdC8vIHN0YXJ0VGltZSBhbmQgZW5kVGltZSBhcmUgbnVtYmVycyAoMC0yNClcblx0XHRcdGNvbnN0IHN0YXJ0SCA9IGNvbmZpZy5zdGFydFRpbWUgPz8gOVxuXHRcdFx0Y29uc3QgZW5kSCA9IGNvbmZpZy5lbmRUaW1lID8/IDE3XG5cblx0XHRcdGNvbnN0IHN0YXJ0TWludXRlcyA9IHN0YXJ0SCAqIDYwXG5cdFx0XHRjb25zdCBlbmRNaW51dGVzID0gZW5kSCAqIDYwXG5cblx0XHRcdGlmIChjdXJyZW50TWludXRlcyA+PSBzdGFydE1pbnV0ZXMgJiYgY3VycmVudE1pbnV0ZXMgPCBlbmRNaW51dGVzKSB7XG5cdFx0XHRcdGlzSW5CdXNpbmVzc0hvdXIgPSB0cnVlXG5cdFx0XHR9XG5cdFx0fSxcblx0fSlcblxuXHRyZXR1cm4gaXNJbkJ1c2luZXNzSG91clxufVxuXG4vKipcbiAqIEhlbHBlciB0byBwcm9jZXNzIGEgYnVzaW5lc3MgaG91cnMgY29uZmlndXJhdGlvbiBhbmQgdXBkYXRlIHRoZSByYW5nZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHByb2Nlc3NCdXNpbmVzc0hvdXJzID0gKFxuXHRiaDogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSB8IHVuZGVmaW5lZCxcblx0b3B0aW9uczoge1xuXHRcdGRhdGU/OiBEYXlqc1xuXHRcdG9uTWF0Y2g6IChjb25maWc6IEJ1c2luZXNzSG91cnMpID0+IHZvaWRcblx0fVxuKSA9PiB7XG5cdGNvbnN0IHsgZGF0ZSwgb25NYXRjaCB9ID0gb3B0aW9uc1xuXHRpZiAoIWJoKSByZXR1cm5cblxuXHRjb25zdCBjb25maWdzID0gQXJyYXkuaXNBcnJheShiaCkgPyBiaCA6IFtiaF1cblxuXHRmb3IgKGNvbnN0IGNvbmZpZyBvZiBjb25maWdzKSB7XG5cdFx0aWYgKGRhdGUgJiYgY29uZmlnLmRheXNPZldlZWspIHtcblx0XHRcdGNvbnN0IGRheU9mV2VlayA9IGRhdGUuZGF5KClcblx0XHRcdGlmIChcblx0XHRcdFx0Y29uZmlnLmRheXNPZldlZWsuc29tZSgoZCkgPT4gV0VFS19EQVlTX05VTUJFUl9NQVBbZF0gPT09IGRheU9mV2Vlaylcblx0XHRcdCkge1xuXHRcdFx0XHRvbk1hdGNoKGNvbmZpZylcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0b25NYXRjaChjb25maWcpXG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVzaW5lc3NIb3Vyc1JhbmdlIHtcblx0bWluU3RhcnQ6IG51bWJlclxuXHRtYXhFbmQ6IG51bWJlclxuXHRoYXNCdXNpbmVzc0hvdXJzOiBib29sZWFuXG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgdW5pb24gb2YgYnVzaW5lc3MgaG91cnMgcmFuZ2VzIGFjcm9zcyBtdWx0aXBsZSBkYXRlcyBhbmQvb3IgcmVzb3VyY2UgY29uZmlndXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCBjYWxjdWxhdGVCdXNpbmVzc0hvdXJzUmFuZ2UgPSAob3B0aW9uczoge1xuXHRhbGxEYXRlczogRGF5anNbXVxuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRyZXNvdXJjZUJ1c2luZXNzSG91cnM/OiAoQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSlbXVxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycz86IGJvb2xlYW5cbn0pOiBCdXNpbmVzc0hvdXJzUmFuZ2UgPT4ge1xuXHRjb25zdCB7XG5cdFx0YWxsRGF0ZXMsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnMgPSBbXSxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0fSA9IG9wdGlvbnNcblxuXHRsZXQgbWluU3RhcnQgPSAyNFxuXHRsZXQgbWF4RW5kID0gMFxuXHRsZXQgaGFzQnVzaW5lc3NIb3VycyA9IGZhbHNlXG5cblx0Y29uc3Qgb25NYXRjaCA9IChjb25maWc6IEJ1c2luZXNzSG91cnMpID0+IHtcblx0XHRoYXNCdXNpbmVzc0hvdXJzID0gdHJ1ZVxuXHRcdG1pblN0YXJ0ID0gTWF0aC5taW4obWluU3RhcnQsIGNvbmZpZy5zdGFydFRpbWUgPz8gOSlcblx0XHRtYXhFbmQgPSBNYXRoLm1heChtYXhFbmQsIGNvbmZpZy5lbmRUaW1lID8/IDE3KVxuXHR9XG5cblx0Ly8gSW52b2tlIHByb2Nlc3NCdXNpbmVzc0hvdXJzIGZvciB0aGUgZ2xvYmFsIGNvbmZpZyBhbmQgZXZlcnkgcmVzb3VyY2Vcblx0Ly8gY29uZmlnLCBvcHRpb25hbGx5IHNjb3BlZCB0byBhIHNwZWNpZmljIGRhdGUuXG5cdGNvbnN0IHByb2Nlc3NBbGwgPSAoZGF0ZT86IERheWpzKSA9PiB7XG5cdFx0cHJvY2Vzc0J1c2luZXNzSG91cnMoYnVzaW5lc3NIb3VycywgeyBkYXRlLCBvbk1hdGNoIH0pXG5cdFx0Zm9yIChjb25zdCByYmggb2YgcmVzb3VyY2VCdXNpbmVzc0hvdXJzKSB7XG5cdFx0XHRwcm9jZXNzQnVzaW5lc3NIb3VycyhyYmgsIHsgZGF0ZSwgb25NYXRjaCB9KVxuXHRcdH1cblx0fVxuXG5cdGZvciAoY29uc3QgZGF0ZSBvZiBhbGxEYXRlcykgcHJvY2Vzc0FsbChkYXRlKVxuXG5cdC8vIEZhbGxiYWNrOiByZXRyeSB3aXRob3V0IGRhdGUgc2NvcGluZywgdGhlbiBkZWZhdWx0IHRvIDktMTcgaWYgc3RpbGwgZW1wdHkuXG5cdGlmICghaGFzQnVzaW5lc3NIb3VycyAmJiBoaWRlTm9uQnVzaW5lc3NIb3Vycykge1xuXHRcdHByb2Nlc3NBbGwoKVxuXHRcdGlmICghaGFzQnVzaW5lc3NIb3Vycykge1xuXHRcdFx0bWluU3RhcnQgPSA5XG5cdFx0XHRtYXhFbmQgPSAxN1xuXHRcdFx0aGFzQnVzaW5lc3NIb3VycyA9IHRydWVcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBtaW5TdGFydCwgbWF4RW5kLCBoYXNCdXNpbmVzc0hvdXJzIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3VycydcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmV4cG9ydCBjb25zdCBidWlsZERhdGVUaW1lID0gKFxuXHRkYXRlOiBEYXRlLFxuXHR0aW1lOiBzdHJpbmcsXG5cdGlzQWxsRGF5OiBib29sZWFuXG4pOiBEYXlqcyA9PiB7XG5cdGNvbnN0IFtob3VycywgbWludXRlc10gPSB0aW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblx0Y29uc3QgYmFzZSA9IGRheWpzKGRhdGUpLmhvdXIoaG91cnMpLm1pbnV0ZShtaW51dGVzKVxuXHRyZXR1cm4gaXNBbGxEYXkgPyBiYXNlLmhvdXIoMCkubWludXRlKDApIDogYmFzZVxufVxuXG5leHBvcnQgY29uc3QgYnVpbGRFbmREYXRlVGltZSA9IChcblx0ZGF0ZTogRGF0ZSxcblx0dGltZTogc3RyaW5nLFxuXHRpc0FsbERheTogYm9vbGVhblxuKTogRGF5anMgPT4ge1xuXHRjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cdGNvbnN0IGJhc2UgPSBkYXlqcyhkYXRlKS5ob3VyKGhvdXJzKS5taW51dGUobWludXRlcylcblx0cmV0dXJuIGlzQWxsRGF5ID8gYmFzZS5ob3VyKDIzKS5taW51dGUoNTkpIDogYmFzZVxufVxuXG5leHBvcnQgY29uc3QgZ2V0VGltZUNvbnN0cmFpbnRzID0gKFxuXHRkYXRlOiBEYXRlLFxuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuKSA9PiB7XG5cdGlmICghYnVzaW5lc3NIb3VycykgcmV0dXJuIHsgbWluOiAnMDA6MDAnLCBtYXg6ICcyMzo1OScgfVxuXG5cdGNvbnN0IGRheWpzRGF0ZSA9IGRheWpzKGRhdGUpXG5cblx0Y29uc3QgeyBtaW5TdGFydCwgbWF4RW5kLCBoYXNCdXNpbmVzc0hvdXJzIH0gPSBjYWxjdWxhdGVCdXNpbmVzc0hvdXJzUmFuZ2Uoe1xuXHRcdGFsbERhdGVzOiBbZGF5anNEYXRlXSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzOiBmYWxzZSxcblx0fSlcblxuXHRpZiAoIWhhc0J1c2luZXNzSG91cnMpIHtcblx0XHRyZXR1cm4geyBtaW46ICcwMDowMCcsIG1heDogJzIzOjU5JyB9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG1pbjogYCR7bWluU3RhcnQudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfTowMGAsXG5cdFx0bWF4OiBgJHsobWF4RW5kIC0gMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfTo0NWAsXG5cdH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBXZWVrZGF5IH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHsgQ2FyZCwgQ2FyZENvbnRlbnQsIENhcmRIZWFkZXIsIENhcmRUaXRsZSB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9jYXJkJ1xuaW1wb3J0IHsgQ2hlY2tib3ggfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2hlY2tib3gnXG5pbXBvcnQgeyBEYXRlUGlja2VyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyJ1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvaW5wdXQnXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9sYWJlbCdcbmltcG9ydCB7XG5cdFNlbGVjdCxcblx0U2VsZWN0Q29udGVudCxcblx0U2VsZWN0SXRlbSxcblx0U2VsZWN0VHJpZ2dlcixcblx0U2VsZWN0VmFsdWUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9zZWxlY3QnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5jb25zdCBGUkVRX01BUCA9IHtcblx0REFJTFk6IFJSdWxlLkRBSUxZLFxuXHRXRUVLTFk6IFJSdWxlLldFRUtMWSxcblx0TU9OVEhMWTogUlJ1bGUuTU9OVEhMWSxcblx0WUVBUkxZOiBSUnVsZS5ZRUFSTFksXG59IGFzIGNvbnN0XG5jb25zdCBGUkVRX1RPX1NUUiA9IE9iamVjdC5mcm9tRW50cmllcyhcblx0T2JqZWN0LmVudHJpZXMoRlJFUV9NQVApLm1hcCgoW2ssIHZdKSA9PiBbdiwga10pXG4pIGFzIFJlY29yZDxudW1iZXIsIHN0cmluZz5cbmNvbnN0IFdFRUtEQVlTID0gW1xuXHRSUnVsZS5TVSxcblx0UlJ1bGUuTU8sXG5cdFJSdWxlLlRVLFxuXHRSUnVsZS5XRSxcblx0UlJ1bGUuVEgsXG5cdFJSdWxlLkZSLFxuXHRSUnVsZS5TQSxcbl1cbmNvbnN0IERBWV9LRVlTID0gWydzdW4nLCAnbW9uJywgJ3R1ZScsICd3ZWQnLCAndGh1JywgJ2ZyaScsICdzYXQnXVxuY29uc3QgRU5EX1RZUEVTID0gW1xuXHR7IHR5cGU6ICduZXZlcicsIGlkOiAnbmV2ZXInLCBsYWJlbEtleTogJ25ldmVyJyB9LFxuXHR7IHR5cGU6ICdjb3VudCcsIGlkOiAnYWZ0ZXInLCBsYWJlbEtleTogJ2FmdGVyJyB9LFxuXHR7IHR5cGU6ICd1bnRpbCcsIGlkOiAnb24nLCBsYWJlbEtleTogJ29uJyB9LFxuXSBhcyBjb25zdFxuY29uc3QgcGFyc2VOdW0gPSAodjogc3RyaW5nKSA9PiBNYXRoLm1heCgxLCBOdW1iZXIucGFyc2VJbnQodiwgMTApIHx8IDEpXG5cbmNvbnN0IGdldERlc2NyaXB0aW9uID0gKFxuXHRvcHRzOiBSUnVsZU9wdGlvbnMgfCBudWxsLFxuXHR0OiAoazogc3RyaW5nKSA9PiBzdHJpbmdcbikgPT4ge1xuXHRpZiAoIW9wdHMpIHtcblx0XHRyZXR1cm4gdCgnY3VzdG9tUmVjdXJyZW5jZScpXG5cdH1cblx0dHJ5IHtcblx0XHRjb25zdCB0ZXh0ID0gbmV3IFJSdWxlKG9wdHMpLnRvVGV4dCgpXG5cdFx0cmV0dXJuIHRleHQgJiYgIXRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZXJyb3InKVxuXHRcdFx0PyB0ZXh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGV4dC5zbGljZSgxKVxuXHRcdFx0OiB0KCdjdXN0b21SZWN1cnJlbmNlJylcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuXHR9XG59XG5cbmludGVyZmFjZSBQcm9wcyB7XG5cdHZhbHVlPzogUlJ1bGVPcHRpb25zIHwgbnVsbFxuXHRvbkNoYW5nZTogKHY6IFJSdWxlT3B0aW9ucyB8IG51bGwpID0+IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IFJlY3VycmVuY2VFZGl0b3I6IFJlYWN0LkZDPFByb3BzPiA9ICh7IHZhbHVlLCBvbkNoYW5nZSB9KSA9PiB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGN0eCkgPT4gKHsgdDogY3R4LnQgfSkpXG5cdGNvbnN0IFtzaG93LCBzZXRTaG93XSA9IHVzZVN0YXRlKCEhdmFsdWUpXG5cdGNvbnN0IFtvcHRzLCBzZXRPcHRzXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KCgpID0+IHZhbHVlIHx8IG51bGwpXG5cblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IERBWV9LRVlTLm1hcCgoaywgaSkgPT4gKHsgdmFsdWU6IFdFRUtEQVlTW2ldLCBsYWJlbDogdChrKSB9KSksXG5cdFx0W3RdXG5cdClcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdHNldFNob3coISF2YWx1ZSlcblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHNldE9wdHModmFsdWUpXG5cdFx0fVxuXHR9LCBbdmFsdWVdKVxuXG5cdGNvbnN0IHVwZGF0ZSA9ICh1OiBQYXJ0aWFsPFJSdWxlT3B0aW9ucz4pID0+IHtcblx0XHRpZiAoIW9wdHMpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRjb25zdCBuZXh0ID0geyAuLi5vcHRzLCAuLi51IH1cblx0XHRzZXRPcHRzKG5leHQpXG5cdFx0b25DaGFuZ2Uoc2hvdyA/IG5leHQgOiBudWxsKVxuXHR9XG5cblx0Y29uc3QgdG9nZ2xlID0gKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcblx0XHRzZXRTaG93KGNoZWNrZWQpXG5cdFx0aWYgKCFjaGVja2VkKSB7XG5cdFx0XHRvbkNoYW5nZShudWxsKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGlmIChvcHRzKSB7XG5cdFx0XHRvbkNoYW5nZShvcHRzKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGNvbnN0IGRlZiA9IHsgZnJlcTogUlJ1bGUuREFJTFksIGludGVydmFsOiAxIH0gYXMgUlJ1bGVPcHRpb25zXG5cdFx0c2V0T3B0cyhkZWYpXG5cdFx0b25DaGFuZ2UoZGVmKVxuXHR9XG5cblx0Y29uc3QgdG9nZ2xlRGF5ID0gKGk6IG51bWJlcikgPT4ge1xuXHRcdGNvbnN0IGN1cnIgPSAob3B0cz8uYnl3ZWVrZGF5IGFzIFdlZWtkYXlbXSkgfHwgW11cblx0XHRjb25zdCBkYXkgPSBXRUVLREFZU1tpXVxuXHRcdGNvbnN0IG5leHQgPSBjdXJyLmluY2x1ZGVzKGRheSlcblx0XHRcdD8gY3Vyci5maWx0ZXIoKGQpID0+IGQgIT09IGRheSlcblx0XHRcdDogWy4uLmN1cnIsIGRheV1cblx0XHR1cGRhdGUoeyBieXdlZWtkYXk6IG5leHQubGVuZ3RoID8gbmV4dCA6IHVuZGVmaW5lZCB9KVxuXHR9XG5cblx0Y29uc3Qgc2V0RW5kVHlwZSA9ICh0eXBlOiAnbmV2ZXInIHwgJ2NvdW50JyB8ICd1bnRpbCcpID0+IHtcblx0XHRjb25zdCB1OiBQYXJ0aWFsPFJSdWxlT3B0aW9ucz4gPSB7IGNvdW50OiB1bmRlZmluZWQsIHVudGlsOiB1bmRlZmluZWQgfVxuXHRcdGlmICh0eXBlID09PSAnY291bnQnKSB7XG5cdFx0XHR1LmNvdW50ID0gb3B0cz8uY291bnQgfHwgMVxuXHRcdH1cblx0XHRpZiAodHlwZSA9PT0gJ3VudGlsJykge1xuXHRcdFx0dS51bnRpbCA9IG9wdHM/LnVudGlsIHx8IGRheWpzKCkuYWRkKDEsICdtb250aCcpLmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXHRcdH1cblx0XHR1cGRhdGUodSlcblx0fVxuXG5cdGNvbnN0IGVuZFR5cGUgPSBvcHRzPy51bnRpbCA/ICd1bnRpbCcgOiBvcHRzPy5jb3VudCA/ICdjb3VudCcgOiAnbmV2ZXInXG5cdGNvbnN0IGZyZXEgPSBGUkVRX1RPX1NUUltvcHRzPy5mcmVxID8/IFJSdWxlLkRBSUxZXSB8fCAnREFJTFknXG5cdGNvbnN0IGJ5d2Vla2RheSA9IEFycmF5LmlzQXJyYXkob3B0cz8uYnl3ZWVrZGF5KVxuXHRcdD8gb3B0cy5ieXdlZWtkYXlcblx0XHQ6IG9wdHM/LmJ5d2Vla2RheVxuXHRcdFx0PyBbb3B0cy5ieXdlZWtkYXldXG5cdFx0XHQ6IFtdXG5cblx0cmV0dXJuIChcblx0XHQ8Q2FyZCBkYXRhLXRlc3RpZD1cInJlY3VycmVuY2UtZWRpdG9yXCI+XG5cdFx0XHQ8Q2FyZEhlYWRlciBjbGFzc05hbWU9XCJwYi0zXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRjaGVja2VkPXtzaG93fVxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ0b2dnbGUtcmVjdXJyZW5jZVwiXG5cdFx0XHRcdFx0XHRpZD1cInJlY3VycmluZ1wiXG5cdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9e3RvZ2dsZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDxDYXJkVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXBlYXQnKX08L0NhcmRUaXRsZT5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdHtzaG93ICYmIHZhbHVlICYmIChcblx0XHRcdFx0XHQ8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0e2dldERlc2NyaXB0aW9uKHZhbHVlLCB0KX1cblx0XHRcdFx0XHQ8L3A+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L0NhcmRIZWFkZXI+XG5cblx0XHRcdHtzaG93ICYmIChcblx0XHRcdFx0PENhcmRDb250ZW50IGNsYXNzTmFtZT1cInB0LTBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNFwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC00XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwiZnJlcXVlbmN5XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7dCgncmVwZWF0cycpfVxuXHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PFNlbGVjdFxuXHRcdFx0XHRcdFx0XHRcdFx0b25WYWx1ZUNoYW5nZT17KGYpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7IGZyZXE6IEZSRVFfTUFQW2YgYXMga2V5b2YgdHlwZW9mIEZSRVFfTUFQXSB9KVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2ZyZXF9XG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PFNlbGVjdFRyaWdnZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJmcmVxdWVuY3ktc2VsZWN0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJmcmVxdWVuY3lcIlxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0VmFsdWUgLz5cblx0XHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0VHJpZ2dlcj5cblx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RDb250ZW50PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7T2JqZWN0LmtleXMoRlJFUV9NQVApLm1hcCgoZikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RJdGVtIGtleT17Zn0gdmFsdWU9e2Z9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoZi50b0xvd2VyQ2FzZSgpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdEl0ZW0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9TZWxlY3RDb250ZW50PlxuXHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9XCJpbnRlcnZhbFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e3QoJ2V2ZXJ5Jyl9XG5cdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRpZD1cImludGVydmFsXCJcblx0XHRcdFx0XHRcdFx0XHRcdG1pbj1cIjFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhlKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGUoeyBpbnRlcnZhbDogcGFyc2VOdW0oZS50YXJnZXQudmFsdWUpIH0pXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwibnVtYmVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtvcHRzPy5pbnRlcnZhbCB8fCAxfVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdHtvcHRzPy5mcmVxID09PSBSUnVsZS5XRUVLTFkgJiYgKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ3JlcGVhdE9uJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0xIG10LTFcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHt3ZWVrRGF5cy5tYXAoKGQsIGkpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTFcIiBrZXk9e2QubGFiZWx9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17Ynl3ZWVrZGF5LmluY2x1ZGVzKGQudmFsdWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9e2tleXMubGlzdEtleSgnZGF5JywgaSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eygpID0+IHRvZ2dsZURheShpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC14cyBjdXJzb3ItcG9pbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRodG1sRm9yPXtrZXlzLmxpc3RLZXkoJ2RheScsIGkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtkLmxhYmVsfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KX1cblxuXHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIj57dCgnZW5kcycpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yIG10LTFcIj5cblx0XHRcdFx0XHRcdFx0XHR7RU5EX1RZUEVTLm1hcCgoeyB0eXBlLCBpZCwgbGFiZWxLZXkgfSkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIiBrZXk9e3R5cGV9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjaGVja2VkPXtlbmRUeXBlID09PSB0eXBlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPXtpZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eygpID0+IHNldEVuZFR5cGUodHlwZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCIgaHRtbEZvcj17aWR9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt0KGxhYmVsS2V5KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3R5cGUgPT09ICdjb3VudCcgJiYgZW5kVHlwZSA9PT0gJ2NvdW50JyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLTYgdy0xNiB0ZXh0LXhzXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJjb3VudC1pbnB1dFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1pbj1cIjFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17KGUpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlKHsgY291bnQ6IHBhcnNlTnVtKGUudGFyZ2V0LnZhbHVlKSB9KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJudW1iZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17b3B0cz8uY291bnQgfHwgMX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ29jY3VycmVuY2VzJyl9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dHlwZSA9PT0gJ3VudGlsJyAmJiBlbmRUeXBlID09PSAndW50aWwnICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8RGF0ZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC02XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGU9e29wdHM/LnVudGlsID8/IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZCkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bnRpbDogZFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyBkYXlqcyhkKS5lbmRPZignZGF5JykudG9EYXRlKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9DYXJkQ29udGVudD5cblx0XHRcdCl9XG5cdFx0PC9DYXJkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIENhcmQoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCd0ZXh0LWNhcmQtZm9yZWdyb3VuZCBmbGV4IGZsZXgtY29sIGdhcC02IHJvdW5kZWQteGwgYm9yZGVyIHNoYWRvdy1zbScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmRcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZEhlYWRlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J0Bjb250YWluZXIvY2FyZC1oZWFkZXIgZ3JpZCBhdXRvLXJvd3MtbWluIGdyaWQtcm93cy1bYXV0b19hdXRvXSBpdGVtcy1zdGFydCBnYXAtMS41IHAtNCBwYi0wIGhhcy1kYXRhLVtzbG90PWNhcmQtYWN0aW9uXTpncmlkLWNvbHMtWzFmcl9hdXRvXScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtaGVhZGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRUaXRsZSh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignbGVhZGluZy1ub25lIGZvbnQtc2VtaWJvbGQnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC10aXRsZVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkRGVzY3JpcHRpb24oeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXNtJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtZGVzY3JpcHRpb25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZEFjdGlvbih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2NvbC1zdGFydC0yIHJvdy1zcGFuLTIgcm93LXN0YXJ0LTEgc2VsZi1zdGFydCBqdXN0aWZ5LXNlbGYtZW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC1hY3Rpb25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZENvbnRlbnQoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3AtNCBwdC0wJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtY29udGVudFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkRm9vdGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdmbGV4IGl0ZW1zLWNlbnRlciBweC02IFsuYm9yZGVyLXRdOnB0LTYnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC1mb290ZXJcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHtcblx0Q2FyZCxcblx0Q2FyZEFjdGlvbixcblx0Q2FyZENvbnRlbnQsXG5cdENhcmREZXNjcmlwdGlvbixcblx0Q2FyZEZvb3Rlcixcblx0Q2FyZEhlYWRlcixcblx0Q2FyZFRpdGxlLFxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBTZWxlY3RQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXNlbGVjdCdcbmltcG9ydCB7IENoZWNrSWNvbiwgQ2hldnJvbkRvd25JY29uLCBDaGV2cm9uVXBJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gU2VsZWN0KHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuUm9vdCBkYXRhLXNsb3Q9XCJzZWxlY3RcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdEdyb3VwKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuR3JvdXA+KSB7XG5cdHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLkdyb3VwIGRhdGEtc2xvdD1cInNlbGVjdC1ncm91cFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0VmFsdWUoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5WYWx1ZT4pIHtcblx0cmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuVmFsdWUgZGF0YS1zbG90PVwic2VsZWN0LXZhbHVlXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RUcmlnZ2VyKHtcblx0Y2xhc3NOYW1lLFxuXHRzaXplID0gJ2RlZmF1bHQnLFxuXHRjaGlsZHJlbixcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuVHJpZ2dlcj4gJiB7XG5cdHNpemU/OiAnc20nIHwgJ2RlZmF1bHQnXG59KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5UcmlnZ2VyXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcImJvcmRlci1pbnB1dCBkYXRhLXBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBbJl9zdmc6bm90KFtjbGFzcyo9J3RleHQtJ10pXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgZGFyazpiZy1pbnB1dC8zMCBkYXJrOmhvdmVyOmJnLWlucHV0LzUwIGZsZXggdy1maXQgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiByb3VuZGVkLW1kIGJvcmRlciBiZy10cmFuc3BhcmVudCBweC0zIHB5LTIgdGV4dC1zbSB3aGl0ZXNwYWNlLW5vd3JhcCBzaGFkb3cteHMgdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCBkYXRhLVtzaXplPWRlZmF1bHRdOmgtOSBkYXRhLVtzaXplPXNtXTpoLTggKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06bGluZS1jbGFtcC0xICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmZsZXggKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06aXRlbXMtY2VudGVyICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmdhcC0yIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNFwiLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNpemU9e3NpemV9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3QtdHJpZ2dlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5JY29uIGFzQ2hpbGQ+XG5cdFx0XHRcdDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPVwic2l6ZS00IG9wYWNpdHktNTBcIiAvPlxuXHRcdFx0PC9TZWxlY3RQcmltaXRpdmUuSWNvbj5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5UcmlnZ2VyPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdENvbnRlbnQoe1xuXHRjbGFzc05hbWUsXG5cdGNoaWxkcmVuLFxuXHRwb3NpdGlvbiA9ICdwb3BwZXInLFxuXHRhbGlnbiA9ICdjZW50ZXInLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5Db250ZW50Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuUG9ydGFsPlxuXHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5Db250ZW50XG5cdFx0XHRcdGFsaWduPXthbGlnbn1cblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnYmctcG9wb3ZlciB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIgcmVsYXRpdmUgei01MCBtYXgtaC0oLS1yYWRpeC1zZWxlY3QtY29udGVudC1hdmFpbGFibGUtaGVpZ2h0KSBtaW4tdy0zMiBvcmlnaW4tKC0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbikgb3ZlcmZsb3cteC1oaWRkZW4gb3ZlcmZsb3cteS1hdXRvIHJvdW5kZWQtbWQgYm9yZGVyIHNoYWRvdy1tZCcsXG5cdFx0XHRcdFx0cG9zaXRpb24gPT09ICdwb3BwZXInICYmXG5cdFx0XHRcdFx0XHQnZGF0YS1bc2lkZT1ib3R0b21dOnRyYW5zbGF0ZS15LTEgZGF0YS1bc2lkZT1sZWZ0XTotdHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXJpZ2h0XTp0cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9dG9wXTotdHJhbnNsYXRlLXktMScsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1jb250ZW50XCJcblx0XHRcdFx0cG9zaXRpb249e3Bvc2l0aW9ufVxuXHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHQ+XG5cdFx0XHRcdDxTZWxlY3RTY3JvbGxVcEJ1dHRvbiAvPlxuXHRcdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLlZpZXdwb3J0XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdwLTEnLFxuXHRcdFx0XHRcdFx0cG9zaXRpb24gPT09ICdwb3BwZXInICYmXG5cdFx0XHRcdFx0XHRcdCdoLSgtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLWhlaWdodCkgdy1mdWxsIG1pbi13LSgtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLXdpZHRoKSBzY3JvbGwtbXktMSdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5WaWV3cG9ydD5cblx0XHRcdFx0PFNlbGVjdFNjcm9sbERvd25CdXR0b24gLz5cblx0XHRcdDwvU2VsZWN0UHJpbWl0aXZlLkNvbnRlbnQ+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuUG9ydGFsPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdExhYmVsKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5MYWJlbD4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLkxhYmVsXG5cdFx0XHRjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgcHgtMiBweS0xLjUgdGV4dC14cycsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3QtbGFiZWxcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0SXRlbSh7XG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkl0ZW0+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5JdGVtXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcImZvY3VzOmJnLWFjY2VudCBmb2N1czp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIFsmX3N2Zzpub3QoW2NsYXNzKj0ndGV4dC0nXSldOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCByZWxhdGl2ZSBmbGV4IHctZnVsbCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1zbSBweS0xLjUgcHItOCBwbC0yIHRleHQtc20gb3V0bGluZS1oaWRkZW4gc2VsZWN0LW5vbmUgZGF0YS1kaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRhdGEtZGlzYWJsZWQ6b3BhY2l0eS01MCBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTQgKjpbc3Bhbl06bGFzdDpmbGV4ICo6W3NwYW5dOmxhc3Q6aXRlbXMtY2VudGVyICo6W3NwYW5dOmxhc3Q6Z2FwLTJcIixcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LWl0ZW1cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTIgZmxleCBzaXplLTMuNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cblx0XHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5JdGVtSW5kaWNhdG9yPlxuXHRcdFx0XHRcdDxDaGVja0ljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cblx0XHRcdFx0PC9TZWxlY3RQcmltaXRpdmUuSXRlbUluZGljYXRvcj5cblx0XHRcdDwvc3Bhbj5cblx0XHRcdDxTZWxlY3RQcmltaXRpdmUuSXRlbVRleHQ+e2NoaWxkcmVufTwvU2VsZWN0UHJpbWl0aXZlLkl0ZW1UZXh0PlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLkl0ZW0+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0U2VwYXJhdG9yKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TZXBhcmF0b3I+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5TZXBhcmF0b3Jcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2JnLWJvcmRlciBwb2ludGVyLWV2ZW50cy1ub25lIC1teC0xIG15LTEgaC1weCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3Qtc2VwYXJhdG9yXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNjcm9sbFVwQnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvbj4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1zY3JvbGwtdXAtYnV0dG9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8Q2hldnJvblVwSWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNjcm9sbERvd25CdXR0b24oe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlNjcm9sbERvd25CdXR0b24+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1zY3JvbGwtZG93bi1idXR0b25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uPlxuXHQpXG59XG5cbmV4cG9ydCB7XG5cdFNlbGVjdCxcblx0U2VsZWN0Q29udGVudCxcblx0U2VsZWN0R3JvdXAsXG5cdFNlbGVjdEl0ZW0sXG5cdFNlbGVjdExhYmVsLFxuXHRTZWxlY3RTY3JvbGxEb3duQnV0dG9uLFxuXHRTZWxlY3RTY3JvbGxVcEJ1dHRvbixcblx0U2VsZWN0U2VwYXJhdG9yLFxuXHRTZWxlY3RUcmlnZ2VyLFxuXHRTZWxlY3RWYWx1ZSxcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmludGVyZmFjZSBEaWFsb2dTdGF0ZSB7XG5cdGlzT3BlbjogYm9vbGVhblxuXHRvcGVyYXRpb25UeXBlOiAnZWRpdCcgfCAnZGVsZXRlJ1xuXHRldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0dXBkYXRlcz86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cblx0b25Db25maXJtPzogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB2b2lkXG59XG5cbmNvbnN0IENMT1NFRF9TVEFURTogRGlhbG9nU3RhdGUgPSB7XG5cdGlzT3BlbjogZmFsc2UsXG5cdG9wZXJhdGlvblR5cGU6ICdlZGl0Jyxcblx0ZXZlbnQ6IG51bGwsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMob25Db21wbGV0ZT86ICgpID0+IHZvaWQpIHtcblx0Y29uc3QgeyB1cGRhdGVSZWN1cnJpbmdFdmVudCwgZGVsZXRlUmVjdXJyaW5nRXZlbnQgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudDogY29udGV4dC51cGRhdGVSZWN1cnJpbmdFdmVudCxcblx0XHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50OiBjb250ZXh0LmRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdH0pKVxuXG5cdGNvbnN0IFtkaWFsb2dTdGF0ZSwgc2V0RGlhbG9nU3RhdGVdID0gdXNlU3RhdGU8RGlhbG9nU3RhdGU+KENMT1NFRF9TVEFURSlcblxuXHRjb25zdCBvcGVuRWRpdERpYWxvZyA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCwgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4ge1xuXHRcdFx0c2V0RGlhbG9nU3RhdGUoe1xuXHRcdFx0XHRpc09wZW46IHRydWUsXG5cdFx0XHRcdG9wZXJhdGlvblR5cGU6ICdlZGl0Jyxcblx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdHVwZGF0ZXMsXG5cdFx0XHRcdG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0XHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQoZXZlbnQsIHVwZGF0ZXMsIHtcblx0XHRcdFx0XHRcdHNjb3BlLFxuXHRcdFx0XHRcdFx0ZXZlbnREYXRlOiBldmVudC5zdGFydCxcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9LFxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFt1cGRhdGVSZWN1cnJpbmdFdmVudF1cblx0KVxuXG5cdGNvbnN0IG9wZW5EZWxldGVEaWFsb2cgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdHNldERpYWxvZ1N0YXRlKHtcblx0XHRcdFx0aXNPcGVuOiB0cnVlLFxuXHRcdFx0XHRvcGVyYXRpb25UeXBlOiAnZGVsZXRlJyxcblx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0XHRcdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQoZXZlbnQsIHtcblx0XHRcdFx0XHRcdHNjb3BlLFxuXHRcdFx0XHRcdFx0ZXZlbnREYXRlOiBldmVudC5zdGFydCxcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9LFxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtkZWxldGVSZWN1cnJpbmdFdmVudF1cblx0KVxuXG5cdGNvbnN0IGNsb3NlRGlhbG9nID0gdXNlQ2FsbGJhY2soKCkgPT4gc2V0RGlhbG9nU3RhdGUoQ0xPU0VEX1NUQVRFKSwgW10pXG5cblx0Y29uc3QgaGFuZGxlQ29uZmlybSA9IHVzZUNhbGxiYWNrKFxuXHRcdChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdFx0aWYgKGRpYWxvZ1N0YXRlLm9uQ29uZmlybSkge1xuXHRcdFx0XHRkaWFsb2dTdGF0ZS5vbkNvbmZpcm0oc2NvcGUpXG5cdFx0XHR9XG5cdFx0XHRjbG9zZURpYWxvZygpXG5cdFx0XHQvLyBDYWxsIG9uQ29tcGxldGUgdG8gY2xvc2UgdGhlIHBhcmVudCBmb3JtXG5cdFx0XHRvbkNvbXBsZXRlPy4oKVxuXHRcdH0sXG5cdFx0W2RpYWxvZ1N0YXRlLCBjbG9zZURpYWxvZywgb25Db21wbGV0ZV1cblx0KVxuXG5cdHJldHVybiB7XG5cdFx0ZGlhbG9nU3RhdGUsXG5cdFx0b3BlbkVkaXREaWFsb2csXG5cdFx0b3BlbkRlbGV0ZURpYWxvZyxcblx0XHRjbG9zZURpYWxvZyxcblx0XHRoYW5kbGVDb25maXJtLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSByZXNvdXJjZS1zcGVjaWZpYyBidXNpbmVzcyBob3VycyB3aGVuIGF2YWlsYWJsZSwgb3RoZXJ3aXNlXG4gKiBmYWxscyBiYWNrIHRvIHRoZSBjYWxlbmRhci13aWRlIGBidXNpbmVzc0hvdXJzYC4gU2hhcmVkIGJ5IGNvbXBvbmVudHNcbiAqIHRoYXQgbmVlZCBwZXItcmVzb3VyY2Ugd29ya2luZy1ob3VycyBzZW1hbnRpY3MgKGdyaWQgY2VsbHMsIGV2ZW50IGZvcm0pLlxuICovXG5leHBvcnQgY29uc3QgdXNlRWZmZWN0aXZlQnVzaW5lc3NIb3VycyA9IChcblx0cmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkXG4pOiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdIHwgdW5kZWZpbmVkID0+IHtcblx0Y29uc3QgeyBidXNpbmVzc0hvdXJzLCBnZXRSZXNvdXJjZUJ5SWQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjdHgpID0+ICh7XG5cdFx0YnVzaW5lc3NIb3VyczogY3R4LmJ1c2luZXNzSG91cnMsXG5cdFx0Z2V0UmVzb3VyY2VCeUlkOiBjdHguZ2V0UmVzb3VyY2VCeUlkLFxuXHR9KSlcblxuXHRyZXR1cm4gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKHJlc291cmNlSWQgIT0gbnVsbCAmJiBnZXRSZXNvdXJjZUJ5SWQpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlID0gZ2V0UmVzb3VyY2VCeUlkKHJlc291cmNlSWQpXG5cdFx0XHRpZiAocmVzb3VyY2U/LmJ1c2luZXNzSG91cnMpIHtcblx0XHRcdFx0cmV0dXJuIHJlc291cmNlLmJ1c2luZXNzSG91cnNcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGJ1c2luZXNzSG91cnNcblx0fSwgW3Jlc291cmNlSWQsIGdldFJlc291cmNlQnlJZCwgYnVzaW5lc3NIb3Vyc10pXG59XG4iLAogICAgImltcG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ29udGVudCxcblx0RGlhbG9nRGVzY3JpcHRpb24sXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nVGl0bGUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9kaWFsb2cnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IEV2ZW50Rm9ybSB9IGZyb20gJy4vZXZlbnQtZm9ybSdcblxuZXhwb3J0IGNvbnN0IEV2ZW50Rm9ybURpYWxvZyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdHQsXG5cdFx0c2VsZWN0ZWRFdmVudCxcblx0XHRpc0V2ZW50Rm9ybU9wZW4sXG5cdFx0Y2xvc2VFdmVudEZvcm0sXG5cdFx0YWRkRXZlbnQsXG5cdFx0dXBkYXRlRXZlbnQsXG5cdFx0ZGVsZXRlRXZlbnQsXG5cdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0dDogY29udGV4dC50LFxuXHRcdHNlbGVjdGVkRXZlbnQ6IGNvbnRleHQuc2VsZWN0ZWRFdmVudCxcblx0XHRpc0V2ZW50Rm9ybU9wZW46IGNvbnRleHQuaXNFdmVudEZvcm1PcGVuLFxuXHRcdGNsb3NlRXZlbnRGb3JtOiBjb250ZXh0LmNsb3NlRXZlbnRGb3JtLFxuXHRcdGFkZEV2ZW50OiBjb250ZXh0LmFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50OiBjb250ZXh0LmRlbGV0ZUV2ZW50LFxuXHRcdHJlbmRlckV2ZW50Rm9ybTogY29udGV4dC5yZW5kZXJFdmVudEZvcm0sXG5cdH0pKVxuXG5cdGNvbnN0IGhhbmRsZU9uVXBkYXRlID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0dXBkYXRlRXZlbnQoZXZlbnQuaWQsIGV2ZW50KVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlT25EZWxldGUgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRkZWxldGVFdmVudChldmVudC5pZClcblx0fVxuXG5cdGNvbnN0IGV2ZW50Rm9ybVByb3BzID0ge1xuXHRcdG9wZW46IGlzRXZlbnRGb3JtT3Blbixcblx0XHRvbkNsb3NlOiBjbG9zZUV2ZW50Rm9ybSxcblx0XHRzZWxlY3RlZEV2ZW50LFxuXHRcdG9uQWRkOiBhZGRFdmVudCxcblx0XHRvblVwZGF0ZTogaGFuZGxlT25VcGRhdGUsXG5cdFx0b25EZWxldGU6IGhhbmRsZU9uRGVsZXRlLFxuXHR9XG5cblx0aWYgKHJlbmRlckV2ZW50Rm9ybSkge1xuXHRcdHJldHVybiByZW5kZXJFdmVudEZvcm0oZXZlbnRGb3JtUHJvcHMpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2cgb25PcGVuQ2hhbmdlPXtjbG9zZUV2ZW50Rm9ybX0gb3Blbj17aXNFdmVudEZvcm1PcGVufT5cblx0XHRcdDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1bOTB2aF0gdy1bOTB2d10gbWF4LXctWzUwMHB4XSBwLTQgc206cC02IG92ZXJmbG93LWhpZGRlbiBnYXAtMFwiPlxuXHRcdFx0XHQ8RGlhbG9nSGVhZGVyIGNsYXNzTmFtZT1cIm1iLTIgc206bWItNCBzaHJpbmstMFwiPlxuXHRcdFx0XHRcdDxEaWFsb2dUaXRsZSBjbGFzc05hbWU9XCJ0ZXh0LWJhc2Ugc206dGV4dC1sZ1wiPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgnZWRpdEV2ZW50JykgOiB0KCdjcmVhdGVFdmVudCcpfVxuXHRcdFx0XHRcdDwvRGlhbG9nVGl0bGU+XG5cdFx0XHRcdFx0PERpYWxvZ0Rlc2NyaXB0aW9uIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgnZWRpdEV2ZW50RGV0YWlscycpIDogdCgnYWRkTmV3RXZlbnQnKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ0Rlc2NyaXB0aW9uPlxuXHRcdFx0XHQ8L0RpYWxvZ0hlYWRlcj5cblxuXHRcdFx0XHQ8RXZlbnRGb3JtIHsuLi5ldmVudEZvcm1Qcm9wc30gLz5cblx0XHRcdDwvRGlhbG9nQ29udGVudD5cblx0XHQ8L0RpYWxvZz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBDYWxlbmRhciBhcyBDYWxlbmRhckljb24sIERvd25sb2FkLCBNZW51LCBQbHVzIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7XG5cdFBvcG92ZXIsXG5cdFBvcG92ZXJDb250ZW50LFxuXHRQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3BvcG92ZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZG93bmxvYWRJQ2FsZW5kYXIgfSBmcm9tICdAL2xpYi91dGlscy9leHBvcnQtaWNhbCdcbmltcG9ydCBUaXRsZUNvbnRlbnQgZnJvbSAnLi90aXRsZS1jb250ZW50J1xuaW1wb3J0IFZpZXdDb250cm9scyBmcm9tICcuL3ZpZXctY29udHJvbHMnXG5cbmludGVyZmFjZSBIZWFkZXJQcm9wcyB7XG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBIZWFkZXI6IFJlYWN0LkZDPEhlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSA9ICcnIH0pID0+IHtcblx0Y29uc3Qge1xuXHRcdHZpZXcsXG5cdFx0c2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2QsXG5cdFx0dG9kYXksXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRcdHJhd0V2ZW50cyxcblx0XHR0LFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGN0eCkgPT4gKHtcblx0XHR2aWV3OiBjdHgudmlldyxcblx0XHRzZXRWaWV3OiBjdHguc2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kOiBjdHgubmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kOiBjdHgucHJldlBlcmlvZCxcblx0XHR0b2RheTogY3R4LnRvZGF5LFxuXHRcdG9wZW5FdmVudEZvcm06IGN0eC5vcGVuRXZlbnRGb3JtLFxuXHRcdGhlYWRlckNvbXBvbmVudDogY3R4LmhlYWRlckNvbXBvbmVudCxcblx0XHRoZWFkZXJDbGFzc05hbWU6IGN0eC5oZWFkZXJDbGFzc05hbWUsXG5cdFx0cmF3RXZlbnRzOiBjdHgucmF3RXZlbnRzLFxuXHRcdHQ6IGN0eC50LFxuXHR9KSlcblxuXHRjb25zdCBbbW9iaWxlTWVudU9wZW4sIHNldE1vYmlsZU1lbnVPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG5cdGNvbnN0IGNsb3NlTW9iaWxlTWVudSA9ICgpID0+IHNldE1vYmlsZU1lbnVPcGVuKGZhbHNlKVxuXG5cdC8vIFdyYXAgYW55IGhhbmRsZXIgc28gaXQgYWxzbyBjbG9zZXMgdGhlIG1vYmlsZSBtZW51IGFmdGVyIGZpcmluZy5cblx0Y29uc3Qgd2l0aENsb3NlID1cblx0XHQ8QXJncyBleHRlbmRzIHVua25vd25bXT4oZm46ICguLi5hcmdzOiBBcmdzKSA9PiB2b2lkKSA9PlxuXHRcdCguLi5hcmdzOiBBcmdzKSA9PiB7XG5cdFx0XHRmbiguLi5hcmdzKVxuXHRcdFx0Y2xvc2VNb2JpbGVNZW51KClcblx0XHR9XG5cblx0Y29uc3QgaGFuZGxlRXhwb3J0ID0gKCkgPT4ge1xuXHRcdGNvbnN0IGZpbGVuYW1lID0gYGlsYW15LWNhbGVuZGFyLSR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF19Lmljc2Bcblx0XHRkb3dubG9hZElDYWxlbmRhcihyYXdFdmVudHMsIGZpbGVuYW1lLCAnaWxhbXkgQ2FsZW5kYXInKVxuXHRcdGNsb3NlTW9iaWxlTWVudSgpXG5cdH1cblxuXHRjb25zdCBOZXdFdmVudEJ1dHRvbiA9ICgpID0+IChcblx0XHQ8QnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG5cdFx0XHRvbkNsaWNrPXsoKSA9PiBvcGVuRXZlbnRGb3JtKCl9XG5cdFx0XHRzaXplPVwic21cIlxuXHRcdFx0dmFyaWFudD1cImRlZmF1bHRcIlxuXHRcdD5cblx0XHRcdDxQbHVzIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIEA0eGw6aW5saW5lXCI+e3QoJ25ldycpfTwvc3Bhbj5cblx0XHQ8L0J1dHRvbj5cblx0KVxuXG5cdGNvbnN0IEV4cG9ydEJ1dHRvbiA9ICh7IGZ1bGxXaWR0aCA9IGZhbHNlIH06IHsgZnVsbFdpZHRoPzogYm9vbGVhbiB9KSA9PiAoXG5cdFx0PEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEnLCBmdWxsV2lkdGggJiYgJ3ctZnVsbCBnYXAtMicpfVxuXHRcdFx0b25DbGljaz17aGFuZGxlRXhwb3J0fVxuXHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHQ+XG5cdFx0XHQ8RG93bmxvYWQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHR7ZnVsbFdpZHRoID8gKFxuXHRcdFx0XHRgJHt0KCdleHBvcnQnKX0gQ2FsZW5kYXIgKC5pY3MpYFxuXHRcdFx0KSA6IChcblx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIEA0eGwvYmFzZS1oZWFkZXI6aW5saW5lXCI+e3QoJ2V4cG9ydCcpfTwvc3Bhbj5cblx0XHRcdCl9XG5cdFx0PC9CdXR0b24+XG5cdClcblxuXHRpZiAoaGVhZGVyQ29tcG9uZW50KSB7XG5cdFx0cmV0dXJuIGhlYWRlckNvbXBvbmVudFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJAY29udGFpbmVyL2Jhc2UtaGVhZGVyIHctZnVsbFwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImNhbGVuZGFyLWhlYWRlclwiXG5cdFx0PlxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdmbGV4IGp1c3RpZnktY2VudGVyIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1iZXR3ZWVuIGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTInLFxuXHRcdFx0XHRcdGNsYXNzTmFtZSxcblx0XHRcdFx0XHRoZWFkZXJDbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgQDJ4bC9iYXNlLWhlYWRlcjpqdXN0aWZ5LXN0YXJ0XCI+XG5cdFx0XHRcdFx0PENhbGVuZGFySWNvbiBjbGFzc05hbWU9XCJoLTUgdy01XCIgLz5cblx0XHRcdFx0XHQ8VGl0bGVDb250ZW50IC8+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAganVzdGlmeS1zdGFydCBAeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1jZW50ZXIgZ2FwLTEgQDR4bC9iYXNlLWhlYWRlcjpqdXN0aWZ5LWVuZCBvdmVyZmxvdy14LWF1dG9cIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBAbWQvYmFzZS1oZWFkZXI6ZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBnYXAtMVwiPlxuXHRcdFx0XHRcdFx0PFZpZXdDb250cm9sc1xuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJqdXN0aWZ5LWVuZFwiXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRWaWV3PXt2aWV3fVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17c2V0Vmlld31cblx0XHRcdFx0XHRcdFx0b25OZXh0PXtuZXh0UGVyaW9kfVxuXHRcdFx0XHRcdFx0XHRvblByZXZpb3VzPXtwcmV2UGVyaW9kfVxuXHRcdFx0XHRcdFx0XHRvblRvZGF5PXt0b2RheX1cblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImRlZmF1bHRcIlxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDxOZXdFdmVudEJ1dHRvbiAvPlxuXHRcdFx0XHRcdFx0PEV4cG9ydEJ1dHRvbiAvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBnYXAtMSBAbWQvYmFzZS1oZWFkZXI6aGlkZGVuXCI+XG5cdFx0XHRcdFx0XHQ8TmV3RXZlbnRCdXR0b24gLz5cblx0XHRcdFx0XHRcdDxQb3BvdmVyIG9uT3BlbkNoYW5nZT17c2V0TW9iaWxlTWVudU9wZW59IG9wZW49e21vYmlsZU1lbnVPcGVufT5cblx0XHRcdFx0XHRcdFx0PFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG5cdFx0XHRcdFx0XHRcdFx0PEJ1dHRvbiBzaXplPVwic21cIiB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PE1lbnUgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0XHRcdDwvUG9wb3ZlclRyaWdnZXI+XG5cdFx0XHRcdFx0XHRcdDxQb3BvdmVyQ29udGVudCBhbGlnbj1cImVuZFwiIGNsYXNzTmFtZT1cInctWzI0MHB4XSBwLTJcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PFZpZXdDb250cm9sc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50Vmlldz17dmlld31cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e3dpdGhDbG9zZShzZXRWaWV3KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25OZXh0PXt3aXRoQ2xvc2UobmV4dFBlcmlvZCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uUHJldmlvdXM9e3dpdGhDbG9zZShwcmV2UGVyaW9kKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25Ub2RheT17d2l0aENsb3NlKHRvZGF5KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdyaWRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicHQtMiBib3JkZXItdFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8RXhwb3J0QnV0dG9uIGZ1bGxXaWR0aCAvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0XHRcdFx0XHQ8L1BvcG92ZXI+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGRlZmF1bHQgSGVhZGVyXG4iLAogICAgImltcG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5jb25zdCBDUkxGID0gJ1xcclxcbidcblxuY29uc3QgVVRDX1ZUSU1FWk9ORSA9IFtcblx0J0JFR0lOOlZUSU1FWk9ORScsXG5cdCdUWklEOlVUQycsXG5cdCdCRUdJTjpTVEFOREFSRCcsXG5cdCdEVFNUQVJUOjE5NzAwMTAxVDAwMDAwMCcsXG5cdCdUWk5BTUU6VVRDJyxcblx0J1RaT0ZGU0VURlJPTTorMDAwMCcsXG5cdCdUWk9GRlNFVFRPOiswMDAwJyxcblx0J0VORDpTVEFOREFSRCcsXG5cdCdFTkQ6VlRJTUVaT05FJyxcbl0uam9pbihDUkxGKVxuXG5jb25zdCBlc2NhcGVUZXh0ID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdHJldHVybiB0ZXh0XG5cdFx0LnJlcGxhY2VBbGwoJ1xcXFwnLCAnXFxcXFxcXFwnKVxuXHRcdC5yZXBsYWNlQWxsKCc7JywgJ1xcXFw7Jylcblx0XHQucmVwbGFjZUFsbCgnLCcsICdcXFxcLCcpXG5cdFx0LnJlcGxhY2VBbGwoJ1xcbicsICdcXFxcbicpXG5cdFx0LnJlcGxhY2VBbGwoJ1xccicsICcnKVxufVxuXG5jb25zdCBmb3JtYXREYXRlID0gKGRhdGU6IERheWpzLCBpc0FsbERheSA9IGZhbHNlKTogc3RyaW5nID0+IHtcblx0cmV0dXJuIGlzQWxsRGF5XG5cdFx0PyBkYXRlLmZvcm1hdCgnWVlZWU1NREQnKVxuXHRcdDogZGF0ZS51dGMoKS5mb3JtYXQoJ1lZWVlNTUREW1RdSEhtbXNzW1pdJylcbn1cblxuY29uc3QgZ2V0VUlEID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogc3RyaW5nID0+IHtcblx0cmV0dXJuIGV2ZW50LnVpZCB8fCBgJHtldmVudC5pZH1AaWxhbXkuY2FsZW5kYXJgXG59XG5cbmNvbnN0IGZvcm1hdFJSdWxlID0gKHJydWxlT3B0aW9uczogdW5rbm93bik6IHN0cmluZyA9PiB7XG5cdHRyeSB7XG5cdFx0Y29uc3QgcnJ1bGVTdHJpbmcgPSBuZXcgUlJ1bGUoXG5cdFx0XHRycnVsZU9wdGlvbnMgYXMgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBSUnVsZT5bMF1cblx0XHQpLnRvU3RyaW5nKClcblx0XHRyZXR1cm4gKFxuXHRcdFx0cnJ1bGVTdHJpbmcuc3BsaXQoJ1xcbicpLmZpbmQoKGxpbmUpID0+IGxpbmUuc3RhcnRzV2l0aCgnUlJVTEU6JykpIHx8ICcnXG5cdFx0KVxuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gJydcblx0fVxufVxuXG5jb25zdCBjb252ZXJ0RXZlbnRUb1ZFdmVudCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IHN0cmluZyA9PiB7XG5cdGNvbnN0IHRpbWVzdGFtcCA9IGRheWpzKCkudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG5cdGNvbnN0IGRhdGVQYXJhbSA9IGV2ZW50LmFsbERheSA/ICc7VkFMVUU9REFURScgOiAnJ1xuXHRjb25zdCBycnVsZSA9IGV2ZW50LnJydWxlID8gZm9ybWF0UlJ1bGUoZXZlbnQucnJ1bGUpIDogJydcblxuXHRjb25zdCBleGRhdGVzID0gZXZlbnQuZXhkYXRlcz8ubGVuZ3RoXG5cdFx0PyBldmVudC5leGRhdGVzLm1hcCgoZCkgPT4gZm9ybWF0RGF0ZShkYXlqcyhkKSwgZXZlbnQuYWxsRGF5KSkuam9pbignLCcpXG5cdFx0OiBudWxsXG5cblx0Y29uc3QgcmVjdXJyZW5jZUlkID0gZXZlbnQucmVjdXJyZW5jZUlkXG5cdFx0PyBmb3JtYXREYXRlKGRheWpzKGV2ZW50LnJlY3VycmVuY2VJZCksIGV2ZW50LmFsbERheSlcblx0XHQ6IG51bGxcblxuXHRjb25zdCBsaW5lcyA9IFtcblx0XHQnQkVHSU46VkVWRU5UJyxcblx0XHRgVUlEOiR7Z2V0VUlEKGV2ZW50KX1gLFxuXHRcdGBEVFNUQVJUJHtkYXRlUGFyYW19OiR7Zm9ybWF0RGF0ZShldmVudC5zdGFydCwgZXZlbnQuYWxsRGF5KX1gLFxuXHRcdGBEVEVORCR7ZGF0ZVBhcmFtfToke2Zvcm1hdERhdGUoZXZlbnQuZW5kLCBldmVudC5hbGxEYXkpfWAsXG5cdFx0YFNVTU1BUlk6JHtlc2NhcGVUZXh0KGV2ZW50LnRpdGxlKX1gLFxuXHRcdGV2ZW50LmRlc2NyaXB0aW9uICYmIGBERVNDUklQVElPTjoke2VzY2FwZVRleHQoZXZlbnQuZGVzY3JpcHRpb24pfWAsXG5cdFx0ZXZlbnQubG9jYXRpb24gJiYgYExPQ0FUSU9OOiR7ZXNjYXBlVGV4dChldmVudC5sb2NhdGlvbil9YCxcblx0XHRycnVsZSxcblx0XHRleGRhdGVzICYmIGBFWERBVEU6JHtleGRhdGVzfWAsXG5cdFx0cmVjdXJyZW5jZUlkICYmIGBSRUNVUlJFTkNFLUlEOiR7cmVjdXJyZW5jZUlkfWAsXG5cdFx0YERUU1RBTVA6JHt0aW1lc3RhbXB9YCxcblx0XHRgQ1JFQVRFRDoke3RpbWVzdGFtcH1gLFxuXHRcdGBMQVNULU1PRElGSUVEOiR7dGltZXN0YW1wfWAsXG5cdFx0J1NUQVRVUzpDT05GSVJNRUQnLFxuXHRcdCdTRVFVRU5DRTowJyxcblx0XHQnVFJBTlNQOk9QQVFVRScsXG5cdFx0J0VORDpWRVZFTlQnLFxuXHRdXG5cblx0cmV0dXJuIGxpbmVzLmZpbHRlcihCb29sZWFuKS5qb2luKENSTEYpXG59XG5cbmNvbnN0IGZpbHRlckV2ZW50cyA9IChldmVudHM6IENhbGVuZGFyRXZlbnRbXSk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdGNvbnN0IHNlZW5VSURzID0gbmV3IFNldDxzdHJpbmc+KClcblxuXHRyZXR1cm4gZXZlbnRzLmZpbHRlcigoZXZlbnQpID0+IHtcblx0XHRjb25zdCB1aWQgPSBnZXRVSUQoZXZlbnQpXG5cdFx0Y29uc3QgaXNCYXNlUmVjdXJyaW5nID0gZXZlbnQucnJ1bGUgJiYgIWV2ZW50LnJlY3VycmVuY2VJZFxuXHRcdGNvbnN0IGlzTW9kaWZpZWRJbnN0YW5jZSA9IGV2ZW50LnJlY3VycmVuY2VJZCAmJiAhZXZlbnQucnJ1bGVcblxuXHRcdGlmIChpc0Jhc2VSZWN1cnJpbmcpIHtcblx0XHRcdHNlZW5VSURzLmFkZCh1aWQpXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdH1cblx0XHRpZiAoaXNNb2RpZmllZEluc3RhbmNlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdH1cblx0XHRyZXR1cm4gIWV2ZW50LnJydWxlICYmICFldmVudC5yZWN1cnJlbmNlSWQgJiYgIXNlZW5VSURzLmhhcyh1aWQpXG5cdH0pXG59XG5cbmV4cG9ydCBjb25zdCBleHBvcnRUb0lDYWxlbmRhciA9IChcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W10sXG5cdGNhbGVuZGFyTmFtZSA9ICdpbGFteSBDYWxlbmRhcidcbik6IHN0cmluZyA9PiB7XG5cdGNvbnN0IG5hbWUgPSBlc2NhcGVUZXh0KGNhbGVuZGFyTmFtZSlcblx0Y29uc3QgdmV2ZW50U3RyaW5ncyA9IGZpbHRlckV2ZW50cyhldmVudHMpLm1hcChjb252ZXJ0RXZlbnRUb1ZFdmVudClcblxuXHRyZXR1cm4gW1xuXHRcdCdCRUdJTjpWQ0FMRU5EQVInLFxuXHRcdCdWRVJTSU9OOjIuMCcsXG5cdFx0J1BST0RJRDotLy9pbGFteS8vaWxhbXkgQ2FsZW5kYXIvL0VOJyxcblx0XHQnQ0FMU0NBTEU6R1JFR09SSUFOJyxcblx0XHQnTUVUSE9EOlBVQkxJU0gnLFxuXHRcdGBYLVdSLUNBTE5BTUU6JHtuYW1lfWAsXG5cdFx0YFgtV1ItQ0FMREVTQzpFeHBvcnRlZCBmcm9tICR7bmFtZX1gLFxuXHRcdFVUQ19WVElNRVpPTkUsXG5cdFx0Li4udmV2ZW50U3RyaW5ncyxcblx0XHQnRU5EOlZDQUxFTkRBUicsXG5cdF0uam9pbihDUkxGKVxufVxuXG5leHBvcnQgY29uc3QgZG93bmxvYWRJQ2FsZW5kYXIgPSAoXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdLFxuXHRmaWxlbmFtZSA9ICdjYWxlbmRhci5pY3MnLFxuXHRjYWxlbmRhck5hbWUgPSAnaWxhbXkgQ2FsZW5kYXInXG4pOiB2b2lkID0+IHtcblx0Y29uc3QgYmxvYiA9IG5ldyBCbG9iKFtleHBvcnRUb0lDYWxlbmRhcihldmVudHMsIGNhbGVuZGFyTmFtZSldLCB7XG5cdFx0dHlwZTogJ3RleHQvY2FsZW5kYXI7Y2hhcnNldD11dGYtOCcsXG5cdH0pXG5cdGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYilcblx0Y29uc3Qgbm9ybWFsaXplZEZpbGVuYW1lID0gZmlsZW5hbWUuZW5kc1dpdGgoJy5pY3MnKVxuXHRcdD8gZmlsZW5hbWVcblx0XHQ6IGAke2ZpbGVuYW1lfS5pY3NgXG5cblx0Y29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuXHRsaW5rLmhyZWYgPSB1cmxcblx0bGluay5kb3dubG9hZCA9IG5vcm1hbGl6ZWRGaWxlbmFtZVxuXG5cdGRvY3VtZW50LmJvZHkuYXBwZW5kKGxpbmspXG5cdGxpbmsuY2xpY2soKVxuXHRsaW5rLnJlbW92ZSgpXG5cdFVSTC5yZXZva2VPYmplY3RVUkwodXJsKVxufVxuIiwKICAgICJpbXBvcnQgeyBDaGV2cm9uRG93biB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7XG5cdFBvcG92ZXIsXG5cdFBvcG92ZXJDb250ZW50LFxuXHRQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3BvcG92ZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0RGF5S2V5LCBnZXRXZWVrRGF5cywgaXNUb2RheSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuY29uc3QgTU9OVEhfS0VZUyA9IFtcblx0J2phbnVhcnknLFxuXHQnZmVicnVhcnknLFxuXHQnbWFyY2gnLFxuXHQnYXByaWwnLFxuXHQnbWF5Jyxcblx0J2p1bmUnLFxuXHQnanVseScsXG5cdCdhdWd1c3QnLFxuXHQnc2VwdGVtYmVyJyxcblx0J29jdG9iZXInLFxuXHQnbm92ZW1iZXInLFxuXHQnZGVjZW1iZXInLFxuXSBhcyBjb25zdFxuXG5jb25zdCBUaXRsZUNvbnRlbnQgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHZpZXcsIHNlbGVjdERhdGUsIHQsIGZpcnN0RGF5T2ZXZWVrIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjdHgpID0+ICh7XG5cdFx0XHRjdXJyZW50RGF0ZTogY3R4LmN1cnJlbnREYXRlLFxuXHRcdFx0dmlldzogY3R4LnZpZXcsXG5cdFx0XHRzZWxlY3REYXRlOiBjdHguc2VsZWN0RGF0ZSxcblx0XHRcdHQ6IGN0eC50LFxuXHRcdFx0Zmlyc3REYXlPZldlZWs6IGN0eC5maXJzdERheU9mV2Vlayxcblx0XHR9KSlcblxuXHRjb25zdCBbb3BlblBvcG92ZXIsIHNldE9wZW5Qb3BvdmVyXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG5cblx0Y29uc3QgbW9udGhzID0gdXNlTWVtbygoKSA9PiBNT05USF9LRVlTLm1hcCgoa2V5KSA9PiB0KGtleSkpLCBbdF0pXG5cdGNvbnN0IGN1cnJlbnRZZWFyID0gY3VycmVudERhdGUueWVhcigpXG5cdGNvbnN0IHllYXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTEgfSwgKF8sIGkpID0+IGN1cnJlbnRZZWFyIC0gNSArIGkpXG5cdGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdGNvbnN0IGhhbmRsZVNlbGVjdERhdGUgPSAoZGF0ZTogRGF5anMpID0+IHtcblx0XHRzZWxlY3REYXRlKGRhdGUpXG5cdFx0c2V0T3BlblBvcG92ZXIobnVsbClcblx0fVxuXG5cdGNvbnN0IHJlbmRlck1vbnRoQ29udGVudCA9ICgpID0+IChcblx0XHQ8PlxuXHRcdFx0e21vbnRocy5tYXAoKG1vbnRoLCBpbmRleCkgPT4gKFxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdGN1cnJlbnREYXRlLm1vbnRoKCkgPT09IGluZGV4ICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0a2V5PXttb250aH1cblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3REYXRlKGN1cnJlbnREYXRlLm1vbnRoKGluZGV4KSl9XG5cdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHttb250aH1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQpKX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlclllYXJDb250ZW50ID0gKCkgPT4gKFxuXHRcdDw+XG5cdFx0XHR7eWVhcnMubWFwKCh5ZWFyKSA9PiAoXG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0Y3VycmVudERhdGUueWVhcigpID09PSB5ZWFyICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0a2V5PXt5ZWFyfVxuXHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdERhdGUoY3VycmVudERhdGUueWVhcih5ZWFyKSl9XG5cdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt5ZWFyfVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdCkpfVxuXHRcdDwvPlxuXHQpXG5cblx0Y29uc3QgcmVuZGVyV2Vla0NvbnRlbnQgPSAoKSA9PiAoXG5cdFx0PD5cblx0XHRcdHtBcnJheS5mcm9tKHsgbGVuZ3RoOiA3IH0sIChfLCBpKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHdlZWtEYXRlID0gY3VycmVudERhdGUuc3VidHJhY3QoMywgJ3dlZWsnKS5hZGQoaSwgJ3dlZWsnKVxuXHRcdFx0XHRjb25zdCBkYXlzID0gZ2V0V2Vla0RheXMod2Vla0RhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdFx0XHRjb25zdCBzdGFydCA9IGRheXNbMF1cblx0XHRcdFx0Y29uc3QgZW5kID0gZGF5c1s2XVxuXHRcdFx0XHRjb25zdCBpc0N1cnJlbnRXZWVrID0gd2Vla0RhdGUuaXNTYW1lKGN1cnJlbnREYXRlLCAnd2VlaycpXG5cdFx0XHRcdGNvbnN0IGNyb3NzZXNNb250aCA9IHN0YXJ0Lm1vbnRoKCkgIT09IGVuZC5tb250aCgpXG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHQnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG5cdFx0XHRcdFx0XHRcdGlzQ3VycmVudFdlZWsgJiYgJ2JnLXByaW1hcnkvMTAnXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0a2V5PXtnZXREYXlLZXkoc3RhcnQpfVxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0RGF0ZShzdGFydCl9XG5cdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj57YCR7c3RhcnQuZm9ybWF0KCdNTU0gRCcpfSAtICR7ZW5kLmZvcm1hdCgnRCcpfWB9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHR7Y3Jvc3Nlc01vbnRoICYmIChcblx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJtbC0wLjUgdGV4dC14cyBvcGFjaXR5LTcwXCI+e2Ake3N0YXJ0LmZvcm1hdCgnTU1NJyl9LSR7ZW5kLmZvcm1hdCgnTU1NJyl9YH08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC8+XG5cdClcblxuXHRjb25zdCByZW5kZXJEYXlDb250ZW50ID0gKCkgPT4ge1xuXHRcdGNvbnN0IGZpcnN0RGF5ID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuXHRcdGNvbnN0IGRheXNJbk1vbnRoID0gY3VycmVudERhdGUuZGF5c0luTW9udGgoKVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDw+XG5cdFx0XHRcdHtBcnJheS5mcm9tKHsgbGVuZ3RoOiBkYXlzSW5Nb250aCB9LCAoXywgaSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGRheSA9IGZpcnN0RGF5LmRhdGUoaSArIDEpXG5cdFx0XHRcdFx0Y29uc3QgaXNDdXJyZW50RGF5ID0gZGF5LmlzU2FtZShjdXJyZW50RGF0ZSwgJ2RheScpXG5cdFx0XHRcdFx0Y29uc3QgdG9kYXkgPSBpc1RvZGF5KGRheSlcblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0XHRcdGlzQ3VycmVudERheSAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0a2V5PXtnZXREYXlLZXkoZGF5KX1cblx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0RGF0ZShkYXkpfVxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cblx0XHRcdFx0XHRcdFx0XHQ8c3Bhbj57ZGF5LmZvcm1hdCgnZGRkZCwgTU1NIEQnKX08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0e3RvZGF5ICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1zbSBweC0xISB0ZXh0LXhzXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0KCd0b2RheScpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KX1cblx0XHRcdDwvPlxuXHRcdClcblx0fVxuXG5cdGNvbnN0IHBvcG92ZXJzID0gW1xuXHRcdHtcblx0XHRcdGlkOiAnbW9udGgnLFxuXHRcdFx0aGlkZGVuOiB2aWV3ID09PSAneWVhcicsXG5cdFx0XHR0aXRsZTogY3VycmVudERhdGUuZm9ybWF0KCdNTU1NJyksXG5cdFx0XHRyZW5kZXI6IHJlbmRlck1vbnRoQ29udGVudCxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiAneWVhcicsXG5cdFx0XHRoaWRkZW46IGZhbHNlLFxuXHRcdFx0dGl0bGU6IGN1cnJlbnREYXRlLmZvcm1hdCgnWVlZWScpLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJZZWFyQ29udGVudCxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiAnd2VlaycsXG5cdFx0XHRoaWRkZW46IHZpZXcgIT09ICd3ZWVrJyxcblx0XHRcdHRpdGxlOiBgJHt3ZWVrRGF5c1swXS5mb3JtYXQoJ01NTSBEJyl9IC0gJHt3ZWVrRGF5c1s2XS5mb3JtYXQoJ01NTSBEJyl9YCxcblx0XHRcdHJlbmRlcjogcmVuZGVyV2Vla0NvbnRlbnQsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogJ2RheScsXG5cdFx0XHRoaWRkZW46IHZpZXcgIT09ICdkYXknLFxuXHRcdFx0dGl0bGU6IGN1cnJlbnREYXRlLmZvcm1hdCgnZGRkZCwgRCcpLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJEYXlDb250ZW50LFxuXHRcdH0sXG5cdF1cblxuXHRyZXR1cm4gcG9wb3ZlcnNcblx0XHQuZmlsdGVyKChwKSA9PiAhcC5oaWRkZW4pXG5cdFx0Lm1hcCgocG9wb3ZlcikgPT4gKFxuXHRcdFx0PFBvcG92ZXJcblx0XHRcdFx0a2V5PXtwb3BvdmVyLmlkfVxuXHRcdFx0XHRvbk9wZW5DaGFuZ2U9eyhvcGVuKSA9PiBzZXRPcGVuUG9wb3ZlcihvcGVuID8gcG9wb3Zlci5pZCA6IG51bGwpfVxuXHRcdFx0XHRvcGVuPXtvcGVuUG9wb3ZlciA9PT0gcG9wb3Zlci5pZH1cblx0XHRcdD5cblx0XHRcdFx0PFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcHgtMSEgZm9udC1zZW1pYm9sZFwiXG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImNhbGVuZGFyLW1vbnRoLWJ1dHRvblwiXG5cdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcHgtMSEgZm9udC1zZW1pYm9sZFwiXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItbW9udGgtYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17a2V5cy5saXN0S2V5KHBvcG92ZXIuaWQsIGdldERheUtleShjdXJyZW50RGF0ZSkpfVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7cG9wb3Zlci50aXRsZX1cblx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHRcdFx0PENoZXZyb25Eb3duIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0XHQ8UG9wb3ZlckNvbnRlbnQgY2xhc3NOYW1lPVwidy00MCBwLTBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggbWF4LWgtNjAgZmxleC1jb2wgb3ZlcmZsb3ctYXV0b1wiPlxuXHRcdFx0XHRcdFx0e3BvcG92ZXIucmVuZGVyKCl9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0XHQ8L1BvcG92ZXI+XG5cdFx0KSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGl0bGVDb250ZW50XG4iLAogICAgImltcG9ydCB7IENoZXZyb25MZWZ0LCBDaGV2cm9uUmlnaHQgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG50eXBlIFZpZXdUeXBlID0gJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInXG5jb25zdCBBVkFJTEFCTEVfVklFV1M6IFZpZXdUeXBlW10gPSBbJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXVxuXG5pbnRlcmZhY2UgVmlld0NvbnRyb2xzUHJvcHMge1xuXHRjdXJyZW50VmlldzogVmlld1R5cGVcblx0b25DaGFuZ2U6ICh2aWV3OiBWaWV3VHlwZSkgPT4gdm9pZFxuXHRvblRvZGF5PzogKCkgPT4gdm9pZFxuXHRvbk5leHQ/OiAoKSA9PiB2b2lkXG5cdG9uUHJldmlvdXM/OiAoKSA9PiB2b2lkXG5cdHZhcmlhbnQ/OiAnZGVmYXVsdCcgfCAnZ3JpZCdcblx0c2l6ZT86ICdzbScgfCAnZGVmYXVsdCdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IFZpZXdDb250cm9sczogUmVhY3QuRkM8Vmlld0NvbnRyb2xzUHJvcHM+ID0gKHtcblx0Y3VycmVudFZpZXcsXG5cdG9uQ2hhbmdlLFxuXHR2YXJpYW50ID0gJ2RlZmF1bHQnLFxuXHRzaXplID0gJ3NtJyxcblx0Y2xhc3NOYW1lLFxuXHRvblRvZGF5LFxuXHRvbk5leHQsXG5cdG9uUHJldmlvdXMsXG59KSA9PiB7XG5cdGNvbnN0IHsgdCwgcmVzb3VyY2VzIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHR0OiBjb250ZXh0LnQsXG5cdFx0cmVzb3VyY2VzOiBjb250ZXh0LnJlc291cmNlcyxcblx0fSkpXG5cdGNvbnN0IGlzR3JpZCA9IHZhcmlhbnQgPT09ICdncmlkJ1xuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSByZXNvdXJjZXMgJiYgcmVzb3VyY2VzLmxlbmd0aCA+IDBcblxuXHQvLyBFeHRyYWN0IGNvbW1vbiBidXR0b24gY2xhc3NOYW1lIGxvZ2ljIHRvIGEgZnVuY3Rpb25cblx0Y29uc3QgZ2V0QnV0dG9uQ2xhc3NOYW1lID0gKHZpZXdUeXBlOiBWaWV3VHlwZSkgPT4ge1xuXHRcdHJldHVybiBjbihcblx0XHRcdC8vIEJhc2Ugd2lkdGggZm9yIGdyaWQgbGF5b3V0XG5cdFx0XHRpc0dyaWQgPyAndy1mdWxsJyA6ICcnLFxuXHRcdFx0Ly8gQWN0aXZlIHZpZXcgc3R5bGluZ1xuXHRcdFx0Y3VycmVudFZpZXcgPT09IHZpZXdUeXBlICYmICdiZy1wcmltYXJ5LzgwJ1xuXHRcdClcblx0fVxuXG5cdGNvbnN0IGdldEJ0blZhcmlhbnQgPSAodmlld1R5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0cmV0dXJuIGN1cnJlbnRWaWV3ID09PSB2aWV3VHlwZSA/ICdkZWZhdWx0JyA6ICdvdXRsaW5lJ1xuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRpc0dyaWQgPyAnZ3JpZCBncmlkLWNvbHMtMiBnYXAtMicgOiAnZmxleCBnYXAtMScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uUHJldmlvdXN9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdDxDaGV2cm9uTGVmdCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvbk5leHR9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdDxDaGV2cm9uUmlnaHQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0e0FWQUlMQUJMRV9WSUVXUy5tYXAoKHR5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0XHRcdGlmIChpc1Jlc291cmNlQ2FsZW5kYXIgJiYgdHlwZSA9PT0gJ3llYXInKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGxcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUodHlwZSl9XG5cdFx0XHRcdFx0XHRrZXk9e3R5cGV9XG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSh0eXBlKX1cblx0XHRcdFx0XHRcdHNpemU9e3NpemV9XG5cdFx0XHRcdFx0XHR2YXJpYW50PXtnZXRCdG5WYXJpYW50KHR5cGUpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHt0KHR5cGUpfVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvblRvZGF5fSBzaXplPXtzaXplfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHR7dCgndG9kYXknKX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZXdDb250cm9sc1xuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZFJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLXJvdydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuaW1wb3J0IHsgQWxsRGF5Q2VsbCB9IGZyb20gJy4vYWxsLWRheS1jZWxsJ1xuXG5pbnRlcmZhY2UgQWxsRGF5Um93UHJvcHMge1xuXHRkYXlzOiBEYXlqc1tdXG5cdGNsYXNzZXM/OiB7IHJvdz86IHN0cmluZzsgY2VsbD86IHN0cmluZzsgc3BhY2VyPzogc3RyaW5nIH1cblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRzaG93U3BhY2VyPzogYm9vbGVhblxufVxuXG5jb25zdCBOb01lbW9BbGxEYXlSb3c6IFJlYWN0LkZDPEFsbERheVJvd1Byb3BzPiA9ICh7XG5cdGRheXMsXG5cdGNsYXNzZXMsXG5cdHJlc291cmNlLFxuXHRzaG93U3BhY2VyID0gdHJ1ZSxcbn0pID0+IHtcblx0Y29uc3QgY29sdW1ucyA9IGRheXMubWFwKChkYXksIGluZGV4KSA9PiAoe1xuXHRcdGlkOiBrZXlzLmNvbC5hbGxEYXkoZGF5LCBpbmRleCksXG5cdFx0ZGF5LFxuXHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0XHRjbGFzc05hbWU6IGNuKCdoLWZ1bGwgbWluLWgtMTIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wJywgY2xhc3Nlcz8uY2VsbCksXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCB3LWZ1bGwgYmctYmFja2dyb3VuZCcsIGNsYXNzZXM/LnJvdyl9XG5cdFx0XHRkYXRhLXRlc3RpZD1cImFsbC1kYXktcm93XCJcblx0XHQ+XG5cdFx0XHR7LyogVGltZSBjb2wgc3BhY2VyICovfVxuXHRcdFx0e3Nob3dTcGFjZXIgJiYgPEFsbERheUNlbGwgY2xhc3NOYW1lPXtjbGFzc2VzPy5zcGFjZXJ9IC8+fVxuXG5cdFx0XHR7LyogRGF5IGFsbCBkYXkgY2VsbCAqL31cblx0XHRcdDxIb3Jpem9udGFsR3JpZFJvd1xuXHRcdFx0XHRhbGxEYXlcblx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleC0xIG1pbi1oLWZpdCBib3JkZXItYlwiXG5cdFx0XHRcdGNvbHVtbnM9e2NvbHVtbnN9XG5cdFx0XHRcdGRheU51bWJlckhlaWdodD17MH1cblx0XHRcdFx0Z3JpZFR5cGU9XCJkYXlcIlxuXHRcdFx0XHRpZD17a2V5cy5hbGxEYXlSb3cocmVzb3VyY2U/LmlkKX1cblx0XHRcdFx0aXNMYXN0Um93XG5cdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0dmFyaWFudD1cInJlZ3VsYXJcIlxuXHRcdFx0Lz5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgQWxsRGF5Um93ID0gbWVtbyhOb01lbW9BbGxEYXlSb3cpXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvaG9va3MvdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldERheUtleSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB7IEdyaWRDZWxsIH0gZnJvbSAnLi4vZ3JpZC1jZWxsJ1xuaW1wb3J0IHsgUmVzb3VyY2VDZWxsIH0gZnJvbSAnLi4vcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXIgfSBmcm9tICcuL2hvcml6b250YWwtZ3JpZC1ldmVudHMtbGF5ZXInXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZENvbHVtbiB7XG5cdGlkOiBzdHJpbmdcblx0ZGF5PzogRGF5anNcblx0ZGF5cz86IERheWpzW11cblx0Z3JpZFR5cGU6ICdkYXknIHwgJ2hvdXInXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRyZW5kZXJDZWxsPzogKHJvdzogSG9yaXpvbnRhbEdyaWRSb3dQcm9wcykgPT4gUmVhY3QuUmVhY3ROb2RlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRSb3dQcm9wcyB7XG5cdGlkOiBzdHJpbmcgfCBudW1iZXJcblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHZhcmlhbnQ/OiAncmVndWxhcicgfCAncmVzb3VyY2UnXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0Y29sdW1ucz86IEhvcml6b250YWxHcmlkQ29sdW1uW11cblx0YWxsRGF5PzogYm9vbGVhblxuXHRzaG93RGF5TnVtYmVyPzogYm9vbGVhblxuXHRpc0xhc3RSb3c/OiBib29sZWFuXG59XG5cbmNvbnN0IE5vTWVtb0hvcml6b250YWxHcmlkUm93OiBSZWFjdC5GQzxIb3Jpem9udGFsR3JpZFJvd1Byb3BzPiA9ICh7XG5cdGlkLFxuXHRyZXNvdXJjZSxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0dmFyaWFudCA9ICdyZXNvdXJjZScsXG5cdGRheU51bWJlckhlaWdodCxcblx0Y2xhc3NOYW1lLFxuXHRjb2x1bW5zID0gW10sXG5cdGFsbERheSxcblx0c2hvd0RheU51bWJlciA9IGZhbHNlLFxuXHRpc0xhc3RSb3cgPSBmYWxzZSxcbn0pID0+IHtcblx0Y29uc3QgeyByZW5kZXJSZXNvdXJjZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IGlzUmVzb3VyY2VDYWxlbmRhciA9IHZhcmlhbnQgPT09ICdyZXNvdXJjZSdcblx0Ly8gRmxhdCBjb2x1bW5zOiBlYWNoIGNvbHVtbiBoYXMgY29sLmRheSAocmVndWxhciBtb250aCwgcmVzb3VyY2UgbW9udGgpXG5cdC8vIEdyb3VwZWQgY29sdW1uczogZWFjaCBjb2x1bW4gaGFzIGNvbC5kYXlzW10gKHJlc291cmNlIHdlZWsgaG9yaXpvbnRhbClcblx0Y29uc3QgaXNHcm91cGVkID0gY29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5kYXlzKVxuXG5cdC8vIENvbGxlY3QgYWxsIGRheXMgZm9yIGZsYXQgcm93c1xuXHRjb25zdCBmbGF0RGF5cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmIChpc0dyb3VwZWQpIHJldHVybiBbXVxuXHRcdHJldHVybiBjb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wuZGF5KS5maWx0ZXIoKGQpOiBkIGlzIERheWpzID0+IEJvb2xlYW4oZCkpXG5cdH0sIFtjb2x1bW5zLCBpc0dyb3VwZWRdKVxuXG5cdC8vIENvbXB1dGUgZXZlbnRzIG9uY2UgYXQgdGhlIHJvdyBsZXZlbCDigJQgc2hhcmVkIGJldHdlZW4gR3JpZENlbGxzIGFuZCBldmVudHMgbGF5ZXJcblx0Y29uc3QgeyBwb3NpdGlvbmVkRXZlbnRzLCBkYXlFdmVudHNNYXAgfSA9IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMoe1xuXHRcdGRheXM6IGZsYXREYXlzLFxuXHRcdGdyaWRUeXBlLFxuXHRcdHJlc291cmNlSWQ6IHJlc291cmNlPy5pZCxcblx0XHRkYXlOdW1iZXJIZWlnaHQsXG5cdFx0YWxsRGF5LFxuXHR9KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LTEgcmVsYXRpdmUnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuY29udGFpbmVyLmhvcml6b250YWwucm93KGlkKX1cblx0XHQ+XG5cdFx0XHR7aXNSZXNvdXJjZUNhbGVuZGFyICYmIHJlc291cmNlICYmIChcblx0XHRcdFx0PFJlc291cmNlQ2VsbFxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInctMjAgc206dy00MCBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCBoLWZ1bGxcIlxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmNvbnRhaW5lci5ob3Jpem9udGFsLnJvd0xhYmVsKHJlc291cmNlLmlkKX1cblx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7cmVuZGVyUmVzb3VyY2UgPyAoXG5cdFx0XHRcdFx0XHRyZW5kZXJSZXNvdXJjZShyZXNvdXJjZSlcblx0XHRcdFx0XHQpIDogKFxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3cmFwLWJyZWFrLXdvcmQgdGV4dC1zbVwiPntyZXNvdXJjZS50aXRsZX08L2Rpdj5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ8L1Jlc291cmNlQ2VsbD5cblx0XHRcdCl9XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXgtMSBmbGV4XCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGxcIj5cblx0XHRcdFx0XHR7Y29sdW1ucy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGlmIChjb2wuZGF5cykge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdDxHcm91cGVkQ29sdW1uXG5cdFx0XHRcdFx0XHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0XHRcdFx0XHRcdGNvbD17Y29sfVxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXtkYXlOdW1iZXJIZWlnaHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRpZD17aWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RDb2w9e2luZGV4ID09PSBjb2x1bW5zLmxlbmd0aCAtIDF9XG5cdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3c9e2lzTGFzdFJvd31cblx0XHRcdFx0XHRcdFx0XHRcdGtleT17Y29sLmlkfVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2U/LmlkfVxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0RheU51bWJlcj17c2hvd0RheU51bWJlcn1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHJldHVybiBjb2wuZGF5ID8gKFxuXHRcdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J2ZsZXgtMSB3LTIwJyxcblx0XHRcdFx0XHRcdFx0XHRcdGlzTGFzdFJvdyAmJiAnYm9yZGVyLWItMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2wuY2xhc3NOYW1lXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkYXk9e2NvbC5kYXl9XG5cdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdGhvdXI9e2dyaWRUeXBlID09PSAnaG91cicgPyBjb2wuZGF5LmhvdXIoKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2NvbC5kYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0XHRcdFx0XHRwcmVjb21wdXRlZEV2ZW50cz17ZGF5RXZlbnRzTWFwLmdldChnZXREYXlLZXkoY29sLmRheSkpfVxuXHRcdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlPy5pZH1cblx0XHRcdFx0XHRcdFx0XHRzaG93RGF5TnVtYmVyPXtzaG93RGF5TnVtYmVyfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KSA6IG51bGxcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0ey8qIEV2ZW50cyBsYXllciBwb3NpdGlvbmVkIGFic29sdXRlbHkgb3ZlciB0aGUgcm93ICovfVxuXHRcdFx0XHR7IWlzR3JvdXBlZCAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuXHRcdFx0XHRcdFx0PEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJcblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuY29udGFpbmVyLmV2ZW50c0xheWVyKCdob3Jpem9udGFsJywgaWQpfVxuXHRcdFx0XHRcdFx0XHRkYXlzPXtmbGF0RGF5c31cblx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRwb3NpdGlvbmVkRXZlbnRzPXtwb3NpdGlvbmVkRXZlbnRzfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlPy5pZH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG4vKipcbiAqIEEgY29sdW1uIGNvbnRhaW5pbmcgbXVsdGlwbGUgZGF5cyAoZS5nLiwgb25lIGRheSdzIGhvdXJseSBzbG90cyBpbiByZXNvdXJjZSB3ZWVrIHZpZXcpLlxuICogTmVlZHMgaXRzIG93biB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzIGNhbGwgc2luY2UgZXZlbnRzIGFyZSBzY29wZWQgdG8gdGhpcyBkYXkgZ3JvdXAuXG4gKi9cbmNvbnN0IEdyb3VwZWRDb2x1bW4gPSBtZW1vKFxuXHQoe1xuXHRcdGNvbCxcblx0XHRncmlkVHlwZSA9ICdkYXknLFxuXHRcdGFsbERheSxcblx0XHRyZXNvdXJjZSxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGRheU51bWJlckhlaWdodCxcblx0XHRzaG93RGF5TnVtYmVyLFxuXHRcdGlzTGFzdFJvdyxcblx0XHRpc0xhc3RDb2wsXG5cdFx0aWQsXG5cdH06IHtcblx0XHRjb2w6IEhvcml6b250YWxHcmlkQ29sdW1uXG5cdFx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRcdGFsbERheT86IGJvb2xlYW5cblx0XHRyZXNvdXJjZT86IFJlc291cmNlXG5cdFx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRcdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRcdHNob3dEYXlOdW1iZXI6IGJvb2xlYW5cblx0XHRpc0xhc3RSb3c6IGJvb2xlYW5cblx0XHRpc0xhc3RDb2w6IGJvb2xlYW5cblx0XHRpZDogc3RyaW5nIHwgbnVtYmVyXG5cdH0pID0+IHtcblx0XHRjb25zdCBkYXlzID0gY29sLmRheXMgPz8gW11cblx0XHRjb25zdCB7IHBvc2l0aW9uZWRFdmVudHMgfSA9IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMoe1xuXHRcdFx0ZGF5cyxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdFx0cmVzb3VyY2VJZCxcblx0XHRcdGRheU51bWJlckhlaWdodCxcblx0XHRcdGFsbERheSxcblx0XHR9KVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCByZWxhdGl2ZSB3LWZ1bGxcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbFwiPlxuXHRcdFx0XHRcdHtkYXlzLm1hcCgoZGF5KSA9PiAoXG5cdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0YWxsRGF5PXthbGxEYXl9XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0J2ZsZXgtMSB3LTIwJyxcblx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3cgJiYgJ2JvcmRlci1iLTAnLFxuXHRcdFx0XHRcdFx0XHRcdCFpc0xhc3RDb2wgJiYgJ2JvcmRlci1yIScsXG5cdFx0XHRcdFx0XHRcdFx0Y29sLmNsYXNzTmFtZVxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRkYXk9e2RheX1cblx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRob3VyPXtncmlkVHlwZSA9PT0gJ2hvdXInID8gZGF5LmhvdXIoKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdFx0a2V5PXtkYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cblx0XHRcdFx0XHRcdFx0c2hvd0RheU51bWJlcj17c2hvd0RheU51bWJlcn1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCB6LTEwIHBvaW50ZXItZXZlbnRzLW5vbmVcIj5cblx0XHRcdFx0XHQ8SG9yaXpvbnRhbEdyaWRFdmVudHNMYXllclxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuY29udGFpbmVyLmV2ZW50c0xheWVyKCdob3Jpem9udGFsJywgaWQpfVxuXHRcdFx0XHRcdFx0ZGF5cz17ZGF5c31cblx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdHBvc2l0aW9uZWRFdmVudHM9e3Bvc2l0aW9uZWRFdmVudHN9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZUlkfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0KVxuXHR9XG4pXG5cbmV4cG9ydCBjb25zdCBIb3Jpem9udGFsR3JpZFJvdyA9IG1lbW8oTm9NZW1vSG9yaXpvbnRhbEdyaWRSb3cpXG4iLAogICAgImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGdldERheUtleSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQge1xuXHRldmVudE92ZXJsYXBzUmFuZ2UsXG5cdGZpbHRlckV2ZW50c0J5UmVzb3VyY2UsXG59IGZyb20gJ0AvbGliL3V0aWxzL2V2ZW50LXV0aWxzJ1xuaW1wb3J0IHtcblx0Z2V0UG9zaXRpb25lZEV2ZW50cyxcblx0dHlwZSBQb3NpdGlvbmVkRXZlbnQsXG59IGZyb20gJ0AvbGliL3V0aWxzL3Bvc2l0aW9uLXdlZWstZXZlbnRzJ1xuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkV2Vla0V2ZW50c1Byb3BzIHtcblx0ZGF5czogRGF5anNbXVxuXHRhbGxEYXk/OiBib29sZWFuXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzZWRXZWVrRXZlbnRzUmVzdWx0IHtcblx0cG9zaXRpb25lZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W11cblx0ZGF5RXZlbnRzTWFwOiBNYXA8c3RyaW5nLCBDYWxlbmRhckV2ZW50W10+XG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzID0gKHtcblx0ZGF5cyxcblx0YWxsRGF5LFxuXHRkYXlOdW1iZXJIZWlnaHQsXG5cdHJlc291cmNlSWQsXG5cdGdyaWRUeXBlLFxufTogVXNlUHJvY2Vzc2VkV2Vla0V2ZW50c1Byb3BzKTogUHJvY2Vzc2VkV2Vla0V2ZW50c1Jlc3VsdCA9PiB7XG5cdGNvbnN0IHtcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdGV2ZW50U3BhY2luZyxcblx0XHRldmVudEhlaWdodCxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCBmaXJzdCA9IGRheXMuYXQoMClcblx0Y29uc3QgbGFzdCA9IGRheXMuYXQoLTEpXG5cdGNvbnN0IHdlZWtTdGFydCA9IGZpcnN0Py5zdGFydE9mKCdkYXknKVxuXHRjb25zdCB3ZWVrRW5kID0gbGFzdD8uZW5kT2YoJ2RheScpXG5cblx0Y29uc3QgZXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKCF3ZWVrU3RhcnQgfHwgIXdlZWtFbmQpIHJldHVybiBbXVxuXG5cdFx0bGV0IHdlZWtFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uod2Vla1N0YXJ0LCB3ZWVrRW5kKVxuXHRcdGlmIChyZXNvdXJjZUlkKSB7XG5cdFx0XHR3ZWVrRXZlbnRzID0gZmlsdGVyRXZlbnRzQnlSZXNvdXJjZShcblx0XHRcdFx0d2Vla0V2ZW50cyxcblx0XHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UocmVzb3VyY2VJZClcblx0XHRcdClcblx0XHR9XG5cblx0XHRpZiAoYWxsRGF5KSB7XG5cdFx0XHR3ZWVrRXZlbnRzID0gd2Vla0V2ZW50cy5maWx0ZXIoKGUpID0+ICEhZS5hbGxEYXkgPT09IGFsbERheSlcblx0XHR9XG5cblx0XHRyZXR1cm4gd2Vla0V2ZW50c1xuXHR9LCBbXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdHdlZWtTdGFydCxcblx0XHR3ZWVrRW5kLFxuXHRcdHJlc291cmNlSWQsXG5cdFx0YWxsRGF5LFxuXHRdKVxuXG5cdGNvbnN0IGRheUV2ZW50c01hcCA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCBDYWxlbmRhckV2ZW50W10+KClcblx0XHRmb3IgKGNvbnN0IGRheSBvZiBkYXlzKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBnZXREYXlLZXkoZGF5KVxuXHRcdFx0Y29uc3QgZGF5U3RhcnQgPSBkYXkuc3RhcnRPZignZGF5Jylcblx0XHRcdGNvbnN0IGRheUVuZCA9IGRheS5lbmRPZignZGF5Jylcblx0XHRcdGNvbnN0IGRheUV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoKGUpID0+XG5cdFx0XHRcdGV2ZW50T3ZlcmxhcHNSYW5nZShlLCBkYXlTdGFydCwgZGF5RW5kKVxuXHRcdFx0KVxuXHRcdFx0bWFwLnNldChrZXksIGRheUV2ZW50cylcblx0XHR9XG5cdFx0cmV0dXJuIG1hcFxuXHR9LCBbZGF5cywgZXZlbnRzXSlcblxuXHRjb25zdCBwb3NpdGlvbmVkRXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0cmV0dXJuIGdldFBvc2l0aW9uZWRFdmVudHMoe1xuXHRcdFx0ZGF5cyxcblx0XHRcdGV2ZW50cyxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGRheU51bWJlckhlaWdodCxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdGV2ZW50QmFySGVpZ2h0OiBldmVudEhlaWdodCxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdH0pXG5cdH0sIFtcblx0XHRkYXlzLFxuXHRcdGRheU1heEV2ZW50cyxcblx0XHRkYXlOdW1iZXJIZWlnaHQsXG5cdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdGV2ZW50SGVpZ2h0LFxuXHRcdGV2ZW50cyxcblx0XHRncmlkVHlwZSxcblx0XSlcblxuXHRyZXR1cm4geyBwb3NpdGlvbmVkRXZlbnRzLCBkYXlFdmVudHNNYXAgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHtcblx0REFZX05VTUJFUl9IRUlHSFQsXG5cdEVWRU5UX0JBUl9IRUlHSFQsXG5cdEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxufSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpb25lZEV2ZW50IGV4dGVuZHMgQ2FsZW5kYXJFdmVudCB7XG5cdGxlZnQ6IG51bWJlciAvLyBMZWZ0IHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0d2lkdGg6IG51bWJlciAvLyBXaWR0aCBpbiBwZXJjZW50YWdlXG5cdHRvcDogbnVtYmVyIC8vIFRvcCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdGhlaWdodDogbnVtYmVyIC8vIEhlaWdodCBpbiBwZXJjZW50YWdlXG5cdHBvc2l0aW9uOiBudW1iZXIgLy8gUG9zaXRpb24gaW4gdGhlIHJvdyAoMCBmb3IgZmlyc3QsIDEgZm9yIHNlY29uZCwgZXRjLilcblx0aXNUcnVuY2F0ZWRTdGFydDogYm9vbGVhbiAvLyBXaGV0aGVyIHRoZSBldmVudCBpcyB0cnVuY2F0ZWQgYXQgdGhlIHN0YXJ0XG5cdGlzVHJ1bmNhdGVkRW5kOiBib29sZWFuIC8vIFdoZXRoZXIgdGhlIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgZW5kXG59XG5cbmludGVyZmFjZSBHZXRQb3NpdGlvbmVkRXZlbnRzUHJvcHMge1xuXHRkYXlzOiBEYXlqc1tdXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInIC8vIEZ1dHVyZSB1c2UgZm9yIGRpZmZlcmVudCBncmlkIHR5cGVzXG5cdGV2ZW50U3BhY2luZz86IG51bWJlciAvLyBDdXN0b20gdmVydGljYWwgc3BhY2luZyBiZXR3ZWVuIGV2ZW50cyAoZGVmYXVsdHMgdG8gR0FQX0JFVFdFRU5fRUxFTUVOVFMpXG5cdGV2ZW50QmFySGVpZ2h0PzogbnVtYmVyIC8vIEN1c3RvbSBoZWlnaHQgZm9yIGV2ZW50IGJhcnMgaW4gcGl4ZWxzIChkZWZhdWx0cyB0byBFVkVOVF9CQVJfSEVJR0hUKVxufVxuXG5leHBvcnQgY29uc3QgZ2V0UG9zaXRpb25lZEV2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGV2ZW50cyxcblx0ZGF5TWF4RXZlbnRzLFxuXHRkYXlOdW1iZXJIZWlnaHQgPSBEQVlfTlVNQkVSX0hFSUdIVCxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdGV2ZW50QmFySGVpZ2h0ID0gRVZFTlRfQkFSX0hFSUdIVCxcbn06IEdldFBvc2l0aW9uZWRFdmVudHNQcm9wcykgPT4ge1xuXHQvLyBGb3IgaG91ci1iYXNlZCBncmlkcywgdXNlIGFjdHVhbCBmaXJzdC9sYXN0IGhvdXJzIGZyb20gZGF5cyBhcnJheVxuXHQvLyBGb3IgZGF5LWJhc2VkIGdyaWRzLCB1c2Ugc3RhcnQvZW5kIG9mIGRheSB0byBjYXB0dXJlIGFsbCBldmVudHNcblx0Y29uc3QgZmlyc3QgPSBkYXlzLmF0KDApXG5cdGNvbnN0IGxhc3QgPSBkYXlzLmF0KC0xKVxuXHRpZiAoIWZpcnN0IHx8ICFsYXN0KSByZXR1cm4gW11cblxuXHRjb25zdCBmaXJzdERheSA9XG5cdFx0Z3JpZFR5cGUgPT09ICdob3VyJyA/IGZpcnN0LnN0YXJ0T2YoJ2hvdXInKSA6IGZpcnN0LnN0YXJ0T2YoJ2RheScpXG5cdGNvbnN0IGxhc3REYXkgPSBncmlkVHlwZSA9PT0gJ2hvdXInID8gbGFzdC5lbmRPZignaG91cicpIDogbGFzdC5lbmRPZignZGF5Jylcblx0Y29uc3QgZGF5Q291bnQgPSBkYXlzLmxlbmd0aFxuXG5cdC8vIFNlcGFyYXRlIG11bHRpLWRheSBhbmQgc2luZ2xlLWRheSBldmVudHNcblx0Y29uc3QgbXVsdGlEYXlFdmVudHMgPSBldmVudHMuZmlsdGVyKChlKSA9PiBlLmVuZC5kaWZmKGUuc3RhcnQsIGdyaWRUeXBlKSA+IDApXG5cdGNvbnN0IHNpbmdsZURheUV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoXG5cdFx0KGUpID0+IGUuZW5kLmRpZmYoZS5zdGFydCwgZ3JpZFR5cGUpID09PSAwXG5cdClcblxuXHQvLyBTb3J0IG11bHRpLWRheSBldmVudHMgYnkgc3RhcnQgZGF0ZSwgdGhlbiBieSBkdXJhdGlvblxuXHRjb25zdCBzb3J0ZWRNdWx0aURheSA9IFsuLi5tdWx0aURheUV2ZW50c10uc29ydCgoYSwgYikgPT4ge1xuXHRcdGNvbnN0IHN0YXJ0RGlmZiA9IGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuXHRcdGlmIChzdGFydERpZmYgIT09IDApIHtcblx0XHRcdHJldHVybiBzdGFydERpZmZcblx0XHR9XG5cdFx0cmV0dXJuIGIuZW5kLmRpZmYoYi5zdGFydCkgLSBhLmVuZC5kaWZmKGEuc3RhcnQpIC8vIExvbmdlciBldmVudHMgZmlyc3Rcblx0fSlcblxuXHQvLyBTb3J0IHNpbmdsZS1kYXkgZXZlbnRzIGJ5IHN0YXJ0IHRpbWVcblx0Y29uc3Qgc29ydGVkU2luZ2xlRGF5ID0gWy4uLnNpbmdsZURheUV2ZW50c10uc29ydCgoYSwgYikgPT5cblx0XHRhLnN0YXJ0LmRpZmYoYi5zdGFydClcblx0KVxuXG5cdC8vIENyZWF0ZSBkYXlDb3VudCB4IGRheU1heEV2ZW50cyBncmlkIHdpdGggZmxhZ3Ncblx0Y29uc3QgZ3JpZDogeyB0YWtlbjogYm9vbGVhbjsgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsIH1bXVtdID0gQXJyYXkuZnJvbShcblx0XHR7IGxlbmd0aDogZGF5TWF4RXZlbnRzIH0sXG5cdFx0KCkgPT5cblx0XHRcdEFycmF5LmZyb20oeyBsZW5ndGg6IGRheUNvdW50IH0sICgpID0+ICh7IHRha2VuOiBmYWxzZSwgZXZlbnQ6IG51bGwgfSkpXG5cdClcblxuXHRjb25zdCBwcm9jZXNzZWRFdmVudHM6IFBvc2l0aW9uZWRFdmVudFtdID0gW11cblxuXHQvLyBGaW5kIHRoZSBmaXJzdCByb3cgd2hlcmUgZXZlcnkgY29sdW1uIGZyb20gc3RhcnRDb2wuLmVuZENvbCBpcyBmcmVlOyAtMSBpZiBub25lLlxuXHRjb25zdCBmaW5kQXZhaWxhYmxlUm93ID0gKHN0YXJ0Q29sOiBudW1iZXIsIGVuZENvbDogbnVtYmVyKTogbnVtYmVyID0+IHtcblx0XHRmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG5cdFx0XHRsZXQgY2FuUGxhY2UgPSB0cnVlXG5cdFx0XHRmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdFx0aWYgKGdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG5cdFx0XHRcdFx0Y2FuUGxhY2UgPSBmYWxzZVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChjYW5QbGFjZSkgcmV0dXJuIHJvd1xuXHRcdH1cblx0XHRyZXR1cm4gLTFcblx0fVxuXG5cdGNvbnN0IHBsYWNlID0gKFxuXHRcdHJvdzogbnVtYmVyLFxuXHRcdHN0YXJ0Q29sOiBudW1iZXIsXG5cdFx0ZW5kQ29sOiBudW1iZXIsXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0aXNUcnVuY2F0ZWRTdGFydDogYm9vbGVhbixcblx0XHRpc1RydW5jYXRlZEVuZDogYm9vbGVhblxuXHQpID0+IHtcblx0XHRmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdGdyaWRbcm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuXHRcdH1cblx0XHRjb25zdCBzcGFuRGF5cyA9IGVuZENvbCAtIHN0YXJ0Q29sICsgMVxuXHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcblx0XHRcdGxlZnQ6IChzdGFydENvbCAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdHdpZHRoOiAoc3BhbkRheXMgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHR0b3A6XG5cdFx0XHRcdGRheU51bWJlckhlaWdodCArIGV2ZW50U3BhY2luZyArIHJvdyAqIChldmVudEJhckhlaWdodCArIGV2ZW50U3BhY2luZyksXG5cdFx0XHRoZWlnaHQ6IGV2ZW50QmFySGVpZ2h0LFxuXHRcdFx0cG9zaXRpb246IHJvdyxcblx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0aXNUcnVuY2F0ZWRTdGFydCxcblx0XHRcdGlzVHJ1bmNhdGVkRW5kLFxuXHRcdH0gYXMgUG9zaXRpb25lZEV2ZW50KVxuXHR9XG5cblx0Ly8gU3RlcCAxOiBBc3NpZ24gcG9zaXRpb25zIHRvIG11bHRpLWRheSBldmVudHMgZmlyc3Rcblx0Zm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRNdWx0aURheSkge1xuXHRcdGNvbnN0IGV2ZW50U3RhcnQgPSBkYXlqcy5tYXgoZXZlbnQuc3RhcnQuc3RhcnRPZihncmlkVHlwZSksIGZpcnN0RGF5KVxuXHRcdGNvbnN0IGFkanVzdGVkRW5kID1cblx0XHRcdGdyaWRUeXBlID09PSAnaG91cicgPyBldmVudC5lbmQuc3VidHJhY3QoMSwgJ21pbnV0ZScpIDogZXZlbnQuZW5kXG5cdFx0Y29uc3QgZXZlbnRFbmQgPSBkYXlqcy5taW4oYWRqdXN0ZWRFbmQuc3RhcnRPZihncmlkVHlwZSksIGxhc3REYXkpXG5cdFx0Y29uc3Qgc3RhcnRDb2wgPSBNYXRoLm1heCgwLCBldmVudFN0YXJ0LmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblx0XHRjb25zdCBlbmRDb2wgPSBNYXRoLm1pbihkYXlDb3VudCAtIDEsIGV2ZW50RW5kLmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblxuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKS5pc0JlZm9yZShmaXJzdERheSlcblx0XHRjb25zdCBpc1RydW5jYXRlZEVuZCA9IGV2ZW50LmVuZC5zdGFydE9mKGdyaWRUeXBlKS5pc0FmdGVyKGxhc3REYXkpXG5cblx0XHQvLyBGaXJzdCB0cnk6IHBsYWNlIGZyb20gb3JpZ2luYWwgc3RhcnQgcG9zaXRpb25cblx0XHRjb25zdCByb3cgPSBmaW5kQXZhaWxhYmxlUm93KHN0YXJ0Q29sLCBlbmRDb2wpXG5cdFx0aWYgKHJvdyAhPT0gLTEpIHtcblx0XHRcdHBsYWNlKHJvdywgc3RhcnRDb2wsIGVuZENvbCwgZXZlbnQsIGlzVHJ1bmNhdGVkU3RhcnQsIGlzVHJ1bmNhdGVkRW5kKVxuXHRcdFx0Y29udGludWVcblx0XHR9XG5cblx0XHQvLyBGYWxsYmFjazogdHJ5IHRydW5jYXRlZCB2ZXJzaW9ucyBzdGFydGluZyBmcm9tIGxhdGVyIGRheXNcblx0XHRmb3IgKGxldCB0cnlTdGFydCA9IHN0YXJ0Q29sICsgMTsgdHJ5U3RhcnQgPD0gZW5kQ29sOyB0cnlTdGFydCsrKSB7XG5cdFx0XHRjb25zdCB0cnVuY1JvdyA9IGZpbmRBdmFpbGFibGVSb3codHJ5U3RhcnQsIGVuZENvbClcblx0XHRcdGlmICh0cnVuY1JvdyAhPT0gLTEpIHtcblx0XHRcdFx0cGxhY2UodHJ1bmNSb3csIHRyeVN0YXJ0LCBlbmRDb2wsIGV2ZW50LCB0cnVlLCBpc1RydW5jYXRlZEVuZClcblx0XHRcdFx0YnJlYWtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTdGVwIDI6IEZpbGwgZ2FwcyB3aXRoIHNpbmdsZS1kYXkgZXZlbnRzXG5cdGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkU2luZ2xlRGF5KSB7XG5cdFx0Y29uc3QgZXZlbnRTdGFydCA9IGRheWpzLm1heChldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKSwgZmlyc3REYXkpXG5cdFx0Y29uc3QgY29sID0gTWF0aC5tYXgoXG5cdFx0XHQwLFxuXHRcdFx0TWF0aC5taW4oZGF5Q291bnQgLSAxLCBldmVudFN0YXJ0LmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblx0XHQpXG5cdFx0Y29uc3Qgcm93ID0gZmluZEF2YWlsYWJsZVJvdyhjb2wsIGNvbClcblx0XHRpZiAocm93ICE9PSAtMSkge1xuXHRcdFx0cGxhY2Uocm93LCBjb2wsIGNvbCwgZXZlbnQsIGZhbHNlLCBmYWxzZSlcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcHJvY2Vzc2VkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCBSZWFjdCwgeyBtZW1vLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEYXlOdW1iZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvZGF5LW51bWJlcidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGlzQnVzaW5lc3NIb3VyIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3VycydcbmltcG9ydCB7IHVzZUVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2hvb2tzL3VzZS1lZmZlY3RpdmUtYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZmlsdGVyRXZlbnRzQnlSZXNvdXJjZSB9IGZyb20gJ0AvbGliL3V0aWxzL2V2ZW50LXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5pbXBvcnQgdHlwZSB7IFNlbGVjdGVkRGF5RXZlbnRzIH0gZnJvbSAnLi9hbGwtZXZlbnRzLWRpYWxvZydcbmltcG9ydCB7IEFsbEV2ZW50RGlhbG9nIH0gZnJvbSAnLi9hbGwtZXZlbnRzLWRpYWxvZydcbmltcG9ydCB7IERyb3BwYWJsZUNlbGwgfSBmcm9tICcuL2Ryb3BwYWJsZS1jZWxsJ1xuXG5pbnRlcmZhY2UgR3JpZFByb3BzIHtcblx0ZGF5OiBEYXlqc1xuXHRob3VyPzogbnVtYmVyIC8vIE9wdGlvbmFsIGhvdXIgZm9yIGhvdXItYmFzZWQgZ3JpZHNcblx0bWludXRlPzogbnVtYmVyIC8vIE9wdGlvbmFsIG1pbnV0ZSBmb3IgbW9yZSBncmFudWxhciB0aW1lIHNsb3RzXG5cdGRheU1heEV2ZW50cz86IG51bWJlclxuXHRjbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY2xhc3NOYW1lIGZvciBjdXN0b20gc3R5bGluZ1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyIC8vIE9wdGlvbmFsIHJlc291cmNlIElEIGZvciByZXNvdXJjZS1zcGVjaWZpYyBkYXkgY2VsbHNcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJyAvLyBGdXR1cmUgdXNlIGZvciBkaWZmZXJlbnQgZ3JpZCB0eXBlc1xuXHRzaG91bGRSZW5kZXJFdmVudHM/OiBib29sZWFuIC8vIEZsYWcgdG8gZGV0ZXJtaW5lIGlmIGV2ZW50cyBzaG91bGQgYmUgcmVuZGVyZWRcblx0YWxsRGF5PzogYm9vbGVhbiAvLyBGbGFnIHRvIGluZGljYXRlIGlmIHRoaXMgaXMgYW4gYWxsLWRheSBjZWxsXG5cdHNob3dEYXlOdW1iZXI/OiBib29sZWFuIC8vIEZsYWcgdG8gc2hvdyBvciBoaWRlIHRoZSBkYXkgbnVtYmVyXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcblx0cHJlY29tcHV0ZWRFdmVudHM/OiBDYWxlbmRhckV2ZW50W11cbn1cblxuY29uc3QgTm9NZW1vR3JpZENlbGw6IFJlYWN0LkZDPEdyaWRQcm9wcz4gPSAoe1xuXHRkYXksXG5cdGhvdXIsXG5cdG1pbnV0ZSxcblx0Y2xhc3NOYW1lID0gJycsXG5cdHJlc291cmNlSWQsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHNob3VsZFJlbmRlckV2ZW50cyA9IHRydWUsXG5cdGFsbERheSA9IGZhbHNlLFxuXHRwcmVjb21wdXRlZEV2ZW50cyxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcblx0c2hvd0RheU51bWJlciA9IGZhbHNlLFxuXHRjaGlsZHJlbixcbn0pID0+IHtcblx0Y29uc3QgYWxsRXZlbnRzRGlhbG9nUmVmID0gUmVhY3QudXNlUmVmPHtcblx0XHRvcGVuOiAoKSA9PiB2b2lkXG5cdFx0Y2xvc2U6ICgpID0+IHZvaWRcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcblx0fT4obnVsbClcblx0Y29uc3Qge1xuXHRcdGRheU1heEV2ZW50cyA9IDAsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGN1cnJlbnREYXRlLFxuXHRcdHQsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHRldmVudFNwYWNpbmcsXG5cdFx0ZXZlbnRIZWlnaHQsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgPSB1c2VFZmZlY3RpdmVCdXNpbmVzc0hvdXJzKHJlc291cmNlSWQpXG5cblx0Y29uc3QgdG9kYXlFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoIXNob3VsZFJlbmRlckV2ZW50cykge1xuXHRcdFx0cmV0dXJuIFtdXG5cdFx0fVxuXG5cdFx0Ly8gVXNlIHByZS1jb21wdXRlZCBldmVudHMgZnJvbSB0aGUgcm93IGxldmVsIHdoZW4gYXZhaWxhYmxlXG5cdFx0aWYgKHByZWNvbXB1dGVkRXZlbnRzKSB7XG5cdFx0XHRyZXR1cm4gcHJlY29tcHV0ZWRFdmVudHNcblx0XHR9XG5cblx0XHRsZXQgdG9kYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoXG5cdFx0XHRkYXkuc3RhcnRPZihncmlkVHlwZSksXG5cdFx0XHRkYXkuZW5kT2YoZ3JpZFR5cGUpXG5cdFx0KVxuXG5cdFx0aWYgKGFsbERheSkge1xuXHRcdFx0dG9kYXlFdmVudHMgPSB0b2RheUV2ZW50cy5maWx0ZXIoKGUpID0+IGUuYWxsRGF5KVxuXHRcdH1cblxuXHRcdGlmIChyZXNvdXJjZUlkKSB7XG5cdFx0XHRyZXR1cm4gZmlsdGVyRXZlbnRzQnlSZXNvdXJjZShcblx0XHRcdFx0dG9kYXlFdmVudHMsXG5cdFx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlKHJlc291cmNlSWQpID8/IFtdXG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRvZGF5RXZlbnRzXG5cdH0sIFtcblx0XHRwcmVjb21wdXRlZEV2ZW50cyxcblx0XHRkYXksXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0Z3JpZFR5cGUsXG5cdFx0c2hvdWxkUmVuZGVyRXZlbnRzLFxuXHRcdGFsbERheSxcblx0XSlcblxuXHQvLyBIYW5kbGVyIGZvciBzaG93aW5nIGFsbCBldmVudHMgaW4gYSBkaWFsb2dcblx0Y29uc3Qgc2hvd0FsbEV2ZW50cyA9IChkYXk6IERheWpzLCBldmVudHM6IENhbGVuZGFyRXZlbnRbXSkgPT4ge1xuXHRcdGFsbEV2ZW50c0RpYWxvZ1JlZi5jdXJyZW50Py5zZXRTZWxlY3RlZERheUV2ZW50cyh7XG5cdFx0XHRkYXksXG5cdFx0XHRldmVudHMsXG5cdFx0fSlcblx0XHRhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8ub3BlbigpXG5cdH1cblxuXHRjb25zdCBpc0N1cnJlbnRNb250aCA9IGRheS5tb250aCgpID09PSBjdXJyZW50RGF0ZS5tb250aCgpXG5cblx0Y29uc3QgaGlkZGVuRXZlbnRzQ291bnQgPSB0b2RheUV2ZW50cy5sZW5ndGggLSBkYXlNYXhFdmVudHNcblx0Y29uc3QgaGFzSGlkZGVuRXZlbnRzID0gaGlkZGVuRXZlbnRzQ291bnQgPiAwXG5cblx0Y29uc3QgaXNCdXNpbmVzcyA9IGlzQnVzaW5lc3NIb3VyKHtcblx0XHRkYXRlOiBkYXksXG5cdFx0aG91cjogZ3JpZFR5cGUgPT09ICdob3VyJyA/IGRheS5ob3VyKCkgOiB1bmRlZmluZWQsXG5cdFx0YnVzaW5lc3NIb3VyczogZWZmZWN0aXZlQnVzaW5lc3NIb3Vycyxcblx0fSlcblxuXHRjb25zdCB0ZXN0SWQgPVxuXHRcdGdyaWRUeXBlID09PSAnaG91cidcblx0XHRcdD8ga2V5cy5jZWxsLmRheShkYXksIGRheS5mb3JtYXQoJ0hIJyksIGRheS5mb3JtYXQoJ21tJykpXG5cdFx0XHQ6IGtleXMuY2VsbC5kYXkoZGF5KVxuXHRjb25zdCBkcm9wcGFibGVJZCA9IGtleXMuZHJvcHBhYmxlLmRheUNlbGwoZGF5LCB7IGFsbERheSwgcmVzb3VyY2VJZCB9KVxuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxEcm9wcGFibGVDZWxsXG5cdFx0XHRcdGFsbERheT17YWxsRGF5fVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdjdXJzb3ItcG9pbnRlciBvdmVyZmxvdy1jbGlwIHAtMSBob3ZlcjpiZy1hY2NlbnQgbWluLWgtWzYwcHhdIHJlbGF0aXZlIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBvbmx5OmJvcmRlci1yIGJvcmRlci1iJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWQgfHwgdGVzdElkfVxuXHRcdFx0XHRkYXRlPXtkYXl9XG5cdFx0XHRcdGRpc2FibGVkPXshaXNCdXNpbmVzcyB8fCAhaXNDdXJyZW50TW9udGh9XG5cdFx0XHRcdGhvdXI9e2hvdXJ9XG5cdFx0XHRcdGlkPXtkcm9wcGFibGVJZH1cblx0XHRcdFx0bWludXRlPXttaW51dGV9XG5cdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlSWR9XG5cdFx0XHRcdHR5cGU9XCJkYXktY2VsbFwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGgtZnVsbCB3LWZ1bGxcIlxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiZ3JpZC1jZWxsLWNvbnRlbnRcIlxuXHRcdFx0XHRcdHN0eWxlPXt7IGdhcDogYCR7ZXZlbnRTcGFjaW5nfXB4YCB9fVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3Nob3dEYXlOdW1iZXIgJiYgPERheU51bWJlciBkYXRlPXtkYXl9IGxvY2FsZT17Y3VycmVudExvY2FsZX0gLz59XG5cblx0XHRcdFx0XHR7c2hvdWxkUmVuZGVyRXZlbnRzICYmIChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdHsvKiBSZW5kZXIgcGxhY2Vob2xkZXJzIGZvciBldmVudHMgdGhhdCBvY2N1ciB0b2RheSBzbyB0aGF0IHRoZSBjZWxsIGhlaWdodCBpcyBhY2NvcmRpbmcgdG8gZGF5TWF4RXZlbnRzLiAqL31cblx0XHRcdFx0XHRcdFx0e3RvZGF5RXZlbnRzLnNsaWNlKDAsIGRheU1heEV2ZW50cykubWFwKChldmVudCwgcm93SW5kZXgpID0+IChcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgc2hyaW5rLTBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2V2ZW50Py50aXRsZX1cblx0XHRcdFx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KCdlbXB0eScsIHJvd0luZGV4LCBldmVudC5pZCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRzdHlsZT17eyBoZWlnaHQ6IGAke2V2ZW50SGVpZ2h0fXB4YCB9fVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdCkpfVxuXG5cdFx0XHRcdFx0XHRcdHsvKiBTaG93IG1vcmUgZXZlbnRzIGJ1dHRvbiB3aXRoIGFjY3VyYXRlIGNvdW50ICovfVxuXHRcdFx0XHRcdFx0XHR7aGFzSGlkZGVuRXZlbnRzICYmIChcblx0XHRcdFx0XHRcdFx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9hMTF5L3VzZVNlbWFudGljRWxlbWVudHM6IFVzaW5nIGRpdiBhcyBidXR0b25cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGN1cnNvci1wb2ludGVyIHRleHQtWzEwcHhdIHdoaXRlc3BhY2Utbm93cmFwIHNtOnRleHQteHMgc2hyaW5rLTAgbXQtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0FsbEV2ZW50cyhkYXksIHRvZGF5RXZlbnRzKVxuXHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdG9uS2V5RG93bj17KGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnICcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0FsbEV2ZW50cyhkYXksIHRvZGF5RXZlbnRzKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0cm9sZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHR0YWJJbmRleD17MH1cblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHQre2hpZGRlbkV2ZW50c0NvdW50fSB7dCgnbW9yZScpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9Ecm9wcGFibGVDZWxsPlxuXG5cdFx0XHR7LyogRGlhbG9nIGZvciBzaG93aW5nIGFsbCBldmVudHMgKi99XG5cdFx0XHQ8QWxsRXZlbnREaWFsb2cgcmVmPXthbGxFdmVudHNEaWFsb2dSZWZ9IC8+XG5cdFx0PC8+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEdyaWRDZWxsID0gbWVtbyhOb01lbW9HcmlkQ2VsbCkgYXMgdHlwZW9mIE5vTWVtb0dyaWRDZWxsXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGlzVG9kYXkgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmludGVyZmFjZSBEYXlOdW1iZXJQcm9wcyB7XG5cdGRhdGU6IERheWpzXG5cdGxvY2FsZT86IHN0cmluZ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBkYXkgbnVtYmVyIGZvciBhIGNhbGVuZGFyIGNlbGwsIGhpZ2hsaWdodGluZyAndG9kYXknIHdpdGggYSBwcmltYXJ5IGJhY2tncm91bmQuXG4gKi9cbmV4cG9ydCBjb25zdCBEYXlOdW1iZXI6IFJlYWN0LkZDPERheU51bWJlclByb3BzPiA9ICh7IGRhdGUsIGNsYXNzTmFtZSB9KSA9PiB7XG5cdGNvbnN0IHRvZGF5ID0gaXNUb2RheShkYXRlKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaC01IHctNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIHRleHQteHMgc2hyaW5rLTAnLFxuXHRcdFx0XHR0b2RheSAmJiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBmb250LW1lZGl1bScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmRheU51bWJlcihkYXRlKX1cblx0XHQ+XG5cdFx0XHR7ZGF0ZS5mb3JtYXQoJ0QnKX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHtcblx0RGlhbG9nLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RlZERheUV2ZW50cyB7XG5cdGRheTogRGF5anNcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbn1cblxuaW50ZXJmYWNlIEFsbEV2ZW50RGlhbG9nUHJvcHMge1xuXHRyZWY6IFJlYWN0LlJlZjx7XG5cdFx0b3BlbjogKCkgPT4gdm9pZFxuXHRcdGNsb3NlOiAoKSA9PiB2b2lkXG5cdFx0c2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG5cdH0+XG59XG5cbmV4cG9ydCBjb25zdCBBbGxFdmVudERpYWxvZzogUmVhY3QuRkM8QWxsRXZlbnREaWFsb2dQcm9wcz4gPSAoeyByZWYgfSkgPT4ge1xuXHRjb25zdCBbZGlhbG9nT3Blbiwgc2V0RGlhbG9nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkRGF5RXZlbnRzLCBzZXRTZWxlY3RlZERheUV2ZW50c10gPVxuXHRcdHVzZVN0YXRlPFNlbGVjdGVkRGF5RXZlbnRzIHwgbnVsbD4obnVsbClcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWssIGV2ZW50SGVpZ2h0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0dXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG5cdFx0b3BlbjogKCkgPT4gc2V0RGlhbG9nT3Blbih0cnVlKSxcblx0XHRjbG9zZTogKCkgPT4gc2V0RGlhbG9nT3BlbihmYWxzZSksXG5cdFx0c2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PlxuXHRcdFx0c2V0U2VsZWN0ZWREYXlFdmVudHMoZGF5RXZlbnRzKSxcblx0fSkpXG5cblx0Ly8gR2V0IHN0YXJ0IGRhdGUgZm9yIHRoZSBjdXJyZW50IG1vbnRoIHZpZXcgYmFzZWQgb24gZmlyc3REYXlPZldlZWtcblx0Y29uc3QgZmlyc3REYXlPZk1vbnRoID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuXG5cdC8vIENhbGN1bGF0ZSB0aGUgZmlyc3QgZGF5IG9mIHRoZSBjYWxlbmRhciBncmlkIGNvcnJlY3RseVxuXHQvLyBGaW5kIHRoZSBmaXJzdCBkYXkgb2Ygd2VlayAoZS5nLiBTdW5kYXkgb3IgTW9uZGF5KSB0aGF0IGNvbWVzIGJlZm9yZSBvciBvbiB0aGUgZmlyc3QgZGF5IG9mIHRoZSBtb250aFxuXHRsZXQgYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIgPSBmaXJzdERheU9mTW9udGguY2xvbmUoKVxuXHR3aGlsZSAoYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuZGF5KCkgIT09IGZpcnN0RGF5T2ZXZWVrKSB7XG5cdFx0YWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIgPSBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5zdWJ0cmFjdCgxLCAnZGF5Jylcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PERpYWxvZyBvbk9wZW5DaGFuZ2U9e3NldERpYWxvZ09wZW59IG9wZW49e2RpYWxvZ09wZW59PlxuXHRcdFx0PERpYWxvZ0NvbnRlbnQgY2xhc3NOYW1lPVwibWF4LWgtWzgwdmhdIG1heC13LW1kIG92ZXJmbG93LXktYXV0b1wiPlxuXHRcdFx0XHQ8RGlhbG9nSGVhZGVyPlxuXHRcdFx0XHRcdDxEaWFsb2dUaXRsZT5cblx0XHRcdFx0XHRcdHtzZWxlY3RlZERheUV2ZW50cz8uZGF5LmZvcm1hdCgnTU1NTSBELCBZWVlZJyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dUaXRsZT5cblx0XHRcdFx0PC9EaWFsb2dIZWFkZXI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwibXQtNCBzcGFjZS15LTNcIj5cblx0XHRcdFx0XHR7c2VsZWN0ZWREYXlFdmVudHM/LmV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8RHJhZ2dhYmxlRXZlbnRcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJyZWxhdGl2ZSBteS0xXCIgLy8gVXNlIGV2ZW50IElEIGZvciB1bmlxdWUgaWRlbnRpZmljYXRpb25cblx0XHRcdFx0XHRcdFx0XHRlbGVtZW50SWQ9e2BhbGwtZXZlbnRzLWRpYWxvZy1ldmVudC0kJHtldmVudC5pZH1gfVxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50PXtldmVudH1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2V2ZW50LmlkfVxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlPXt7IGhlaWdodDogYCR7ZXZlbnRIZWlnaHR9cHhgIH19XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9EaWFsb2dDb250ZW50PlxuXHRcdDwvRGlhbG9nPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZURyYWdnYWJsZSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgdHlwZSB7IENTU1Byb3BlcnRpZXMgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBnZXRCb3JkZXJSYWRpdXNDbGFzcyA9IChcblx0aXNUcnVuY2F0ZWRTdGFydDogYm9vbGVhbixcblx0aXNUcnVuY2F0ZWRFbmQ6IGJvb2xlYW5cbikgPT4ge1xuXHRpZiAoaXNUcnVuY2F0ZWRTdGFydCAmJiBpc1RydW5jYXRlZEVuZCkge1xuXHRcdHJldHVybiAncm91bmRlZC1ub25lJ1xuXHR9XG5cdGlmIChpc1RydW5jYXRlZFN0YXJ0KSB7XG5cdFx0cmV0dXJuICdyb3VuZGVkLXItbWQgcm91bmRlZC1sLW5vbmUnXG5cdH1cblx0aWYgKGlzVHJ1bmNhdGVkRW5kKSB7XG5cdFx0cmV0dXJuICdyb3VuZGVkLWwtbWQgcm91bmRlZC1yLW5vbmUnXG5cdH1cblx0cmV0dXJuICdyb3VuZGVkLW1kJ1xufVxuXG5mdW5jdGlvbiBEcmFnZ2FibGVFdmVudFVubWVtb2l6ZWQoe1xuXHRlbGVtZW50SWQsXG5cdGV2ZW50LFxuXHRjbGFzc05hbWUsXG5cdHN0eWxlLFxuXHRkaXNhYmxlRHJhZyA9IGZhbHNlLFxufToge1xuXHRlbGVtZW50SWQ6IHN0cmluZ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0c3R5bGU/OiBDU1NQcm9wZXJ0aWVzXG5cdGV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGRpc2FibGVEcmFnPzogYm9vbGVhblxufSkge1xuXHRjb25zdCB7IG9uRXZlbnRDbGljaywgcmVuZGVyRXZlbnQsIGRpc2FibGVFdmVudENsaWNrLCBkaXNhYmxlRHJhZ0FuZERyb3AgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHsgYXR0cmlidXRlcywgbGlzdGVuZXJzLCBzZXROb2RlUmVmLCBpc0RyYWdnaW5nIH0gPSB1c2VEcmFnZ2FibGUoe1xuXHRcdGlkOiBlbGVtZW50SWQsXG5cdFx0ZGF0YToge1xuXHRcdFx0ZXZlbnQsXG5cdFx0XHR0eXBlOiAnY2FsZW5kYXItZXZlbnQnLFxuXHRcdH0sXG5cdFx0ZGlzYWJsZWQ6IGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcCxcblx0fSlcblxuXHQvLyBEZWZhdWx0IGV2ZW50IGNvbnRlbnQgdG8gcmVuZGVyIGlmIGN1c3RvbSByZW5kZXJFdmVudCBpcyBub3QgcHJvdmlkZWRcblx0Y29uc3QgRGVmYXVsdEV2ZW50Q29udGVudCA9ICgpID0+IHtcblx0XHQvLyBDaGVjayBpZiB0aGlzIGV2ZW50IGhhcyB0cnVuY2F0aW9uIGluZm9ybWF0aW9uXG5cdFx0Y29uc3QgZW5oYW5jZWRFdmVudCA9IGV2ZW50IGFzIHVua25vd24gYXMge1xuXHRcdFx0aXNUcnVuY2F0ZWRTdGFydD86IGJvb2xlYW5cblx0XHRcdGlzVHJ1bmNhdGVkRW5kPzogYm9vbGVhblxuXHRcdH1cblx0XHRjb25zdCBpc1RydW5jYXRlZFN0YXJ0ID0gZW5oYW5jZWRFdmVudC5pc1RydW5jYXRlZFN0YXJ0XG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRFbmQgPSBlbmhhbmNlZEV2ZW50LmlzVHJ1bmNhdGVkRW5kXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdGV2ZW50LmJhY2tncm91bmRDb2xvciB8fCAnYmctYmx1ZS01MDAnLFxuXHRcdFx0XHRcdGV2ZW50LmNvbG9yIHx8ICd0ZXh0LXdoaXRlJyxcblx0XHRcdFx0XHQnaC1mdWxsIHctZnVsbCBweC0xIGJvcmRlci1bMS41cHhdIGJvcmRlci1jYXJkIHRleHQtbGVmdCBvdmVyZmxvdy1jbGlwIHJlbGF0aXZlJyxcblx0XHRcdFx0XHRnZXRCb3JkZXJSYWRpdXNDbGFzcyhcblx0XHRcdFx0XHRcdEJvb2xlYW4oaXNUcnVuY2F0ZWRTdGFydCksXG5cdFx0XHRcdFx0XHRCb29sZWFuKGlzVHJ1bmNhdGVkRW5kKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KX1cblx0XHRcdFx0c3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBldmVudC5iYWNrZ3JvdW5kQ29sb3IsIGNvbG9yOiBldmVudC5jb2xvciB9fVxuXHRcdFx0PlxuXHRcdFx0XHR7LyogTGVmdCBjb250aW51YXRpb24gaW5kaWNhdG9yICovfVxuXHRcdFx0XHR7aXNUcnVuY2F0ZWRTdGFydCAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBsZWZ0LTAgdG9wLTAgYm90dG9tLTAgdy0wLjUgYmctZm9yZWdyb3VuZC8yNVwiPjwvZGl2PlxuXHRcdFx0XHQpfVxuXG5cdFx0XHRcdHsvKiBFdmVudCB0aXRsZSAqL31cblx0XHRcdFx0PHBcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J3RleHQtWzEwcHhdIGZvbnQtc2VtaWJvbGQgc206dGV4dC14cyBtdC0wLjUnLFxuXHRcdFx0XHRcdFx0Ly8gQWRkIHNsaWdodCBwYWRkaW5nIHRvIGF2b2lkIG92ZXJsYXAgd2l0aCBpbmRpY2F0b3JzXG5cdFx0XHRcdFx0XHRpc1RydW5jYXRlZFN0YXJ0ICYmICdwbC0xJyxcblx0XHRcdFx0XHRcdGlzVHJ1bmNhdGVkRW5kICYmICdwci0xJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7ZXZlbnQudGl0bGV9XG5cdFx0XHRcdDwvcD5cblxuXHRcdFx0XHR7LyogUmlnaHQgY29udGludWF0aW9uIGluZGljYXRvciAqL31cblx0XHRcdFx0e2lzVHJ1bmNhdGVkRW5kICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTAgdG9wLTAgYm90dG9tLTAgdy0wLjUgYmctZm9yZWdyb3VuZC8yNVwiPjwvZGl2PlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9kaXY+XG5cdFx0KVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQndHJ1bmNhdGUgaC1mdWxsIHctZnVsbCcsXG5cdFx0XHRcdGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcFxuXHRcdFx0XHRcdD8gZGlzYWJsZUV2ZW50Q2xpY2tcblx0XHRcdFx0XHRcdD8gJ2N1cnNvci1kZWZhdWx0J1xuXHRcdFx0XHRcdFx0OiAnY3Vyc29yLXBvaW50ZXInXG5cdFx0XHRcdFx0OiAnY3Vyc29yLWdyYWInLFxuXHRcdFx0XHRpc0RyYWdnaW5nICYmXG5cdFx0XHRcdFx0IShkaXNhYmxlRHJhZyB8fCBkaXNhYmxlRHJhZ0FuZERyb3ApICYmXG5cdFx0XHRcdFx0J2N1cnNvci1ncmFiYmluZyBzaGFkb3ctbGcnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRsYXlvdXQ9e3RydWV9XG5cdFx0XHRsYXlvdXRJZD17ZWxlbWVudElkfVxuXHRcdFx0b25DbGljaz17KGUpID0+IHtcblx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRvbkV2ZW50Q2xpY2soZXZlbnQpXG5cdFx0XHR9fVxuXHRcdFx0cmVmPXtzZXROb2RlUmVmfVxuXHRcdFx0c3R5bGU9e3N0eWxlfVxuXHRcdFx0dHJhbnNpdGlvbktleT17ZWxlbWVudElkfVxuXHRcdFx0ey4uLmF0dHJpYnV0ZXN9XG5cdFx0XHR7Li4ubGlzdGVuZXJzfVxuXHRcdD5cblx0XHRcdHsvKiBVc2UgY3VzdG9tIHJlbmRlckV2ZW50IGZyb20gY29udGV4dCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB1c2UgZGVmYXVsdCAqL31cblx0XHRcdHtyZW5kZXJFdmVudCA/IHJlbmRlckV2ZW50KGV2ZW50KSA6IDxEZWZhdWx0RXZlbnRDb250ZW50IC8+fVxuXHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBEcmFnZ2FibGVFdmVudCA9IG1lbW8oXG5cdERyYWdnYWJsZUV2ZW50VW5tZW1vaXplZCxcblx0KHByZXZQcm9wcywgbmV4dFByb3BzKSA9PiB7XG5cdFx0Ly8gQ29tcGFyZSB0aGUgZXNzZW50aWFsIHByb3BzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuXHRcdHJldHVybiAoXG5cdFx0XHRwcmV2UHJvcHMuZWxlbWVudElkID09PSBuZXh0UHJvcHMuZWxlbWVudElkICYmXG5cdFx0XHRwcmV2UHJvcHMuZGlzYWJsZURyYWcgPT09IG5leHRQcm9wcy5kaXNhYmxlRHJhZyAmJlxuXHRcdFx0cHJldlByb3BzLmNsYXNzTmFtZSA9PT0gbmV4dFByb3BzLmNsYXNzTmFtZSAmJlxuXHRcdFx0cHJldlByb3BzLmV2ZW50ID09PSBuZXh0UHJvcHMuZXZlbnRcblx0XHQpXG5cdH1cbilcbiIsCiAgICAiLy8gb3hsaW50LWRpc2FibGUgbm8tbmVnYXRlZC1jb25kaXRpb25cblxuaW1wb3J0IHsgdXNlRHJvcHBhYmxlIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgRElTQUJMRURfQ0VMTF9DTEFTU05BTUUgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgRHJvcHBhYmxlQ2VsbFByb3BzIHtcblx0aWQ6IHN0cmluZ1xuXHR0eXBlOiAnZGF5LWNlbGwnIHwgJ3RpbWUtY2VsbCdcblx0ZGF0ZTogRGF5anNcblx0aG91cj86IG51bWJlclxuXHRtaW51dGU/OiBudW1iZXJcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRhbGxEYXk/OiBib29sZWFuXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xuXHRkaXNhYmxlZD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERyb3BwYWJsZUNlbGwoe1xuXHRpZCxcblx0dHlwZSxcblx0ZGF0ZSxcblx0aG91cixcblx0bWludXRlLFxuXHRyZXNvdXJjZUlkLFxuXHRhbGxEYXksXG5cdGNoaWxkcmVuLFxuXHRjbGFzc05hbWUsXG5cdHN0eWxlLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxuXHRkaXNhYmxlZCA9IGZhbHNlLFxufTogRHJvcHBhYmxlQ2VsbFByb3BzKSB7XG5cdGNvbnN0IHtcblx0XHRvbkNlbGxDbGljayxcblx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRjbGFzc2VzT3ZlcnJpZGUsXG5cdFx0dmlldyxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB7IGlzT3Zlciwgc2V0Tm9kZVJlZiB9ID0gdXNlRHJvcHBhYmxlKHtcblx0XHRpZCxcblx0XHRkYXRhOiB7XG5cdFx0XHR0eXBlLFxuXHRcdFx0ZGF0ZSxcblx0XHRcdGhvdXIsXG5cdFx0XHRtaW51dGUsXG5cdFx0XHRyZXNvdXJjZUlkLFxuXHRcdFx0YWxsRGF5LFxuXHRcdH0sXG5cdFx0ZGlzYWJsZWQ6IGRpc2FibGVEcmFnQW5kRHJvcCB8fCBkaXNhYmxlZCxcblx0fSlcblxuXHRjb25zdCBoYW5kbGVDZWxsQ2xpY2sgPSAoZTogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuXHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblxuXHRcdGlmIChkaXNhYmxlQ2VsbENsaWNrIHx8IGRpc2FibGVkKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRjb25zdCBzdGFydCA9IGRhdGUuaG91cihob3VyID8/IDApLm1pbnV0ZShtaW51dGUgPz8gMClcblx0XHRsZXQgZW5kID0gc3RhcnQuY2xvbmUoKVxuXHRcdGlmIChob3VyICE9PSB1bmRlZmluZWQgJiYgbWludXRlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGVuZCA9IGVuZC5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGUgKyAxNSkgLy8gZGF5IHZpZXcgdGltZSBzbG90cyBhcmUgMTUgbWludXRlc1xuXHRcdH0gZWxzZSBpZiAoaG91ciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRlbmQgPSBlbmQuaG91cihob3VyICsgMSkubWludXRlKDApIC8vIHdlZWsgdmlldyB0aW1lIHNsb3RzIGFyZSAxIGhvdXJcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZW5kID0gZW5kLmhvdXIoMjMpLm1pbnV0ZSg1OSkgLy8gbW9udGggdmlldyBmdWxsIGRheVxuXHRcdH1cblxuXHRcdG9uQ2VsbENsaWNrKHsgc3RhcnQsIGVuZCwgcmVzb3VyY2VJZCwgYWxsRGF5IH0pXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvbm9TdGF0aWNFbGVtZW50SW50ZXJhY3Rpb25zOiBUaGUgY2VsbCBpcyBpbnRlcmFjdGl2ZSBmb3IgZXZlbnQgY3JlYXRpb25cblx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9hMTF5L3VzZUtleVdpdGhDbGlja0V2ZW50czogS2V5IGV2ZW50cyBhcmUgaGFuZGxlZCBieSBwYXJlbnQgY29tcG9uZW50c1xuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdkcm9wcGFibGUtY2VsbCcsXG5cdFx0XHRcdGNsYXNzTmFtZSxcblx0XHRcdFx0aXNPdmVyICYmICFkaXNhYmxlRHJhZ0FuZERyb3AgJiYgIWRpc2FibGVkICYmICdiZy1hY2NlbnQnLFxuXHRcdFx0XHRkaXNhYmxlQ2VsbENsaWNrIHx8IGRpc2FibGVkID8gJ2N1cnNvci1kZWZhdWx0JyA6ICdjdXJzb3ItcG9pbnRlcicsXG5cdFx0XHRcdGRpc2FibGVkICYmIChjbGFzc2VzT3ZlcnJpZGU/LmRpc2FibGVkQ2VsbCB8fCBESVNBQkxFRF9DRUxMX0NMQVNTTkFNRSlcblx0XHRcdCl9XG5cdFx0XHRkYXRhLWRpc2FibGVkPXtkaXNhYmxlZC50b1N0cmluZygpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG5cdFx0XHRkYXRhLXZpZXc9e3ZpZXd9XG5cdFx0XHRvbkNsaWNrPXtoYW5kbGVDZWxsQ2xpY2t9XG5cdFx0XHRyZWY9e3NldE5vZGVSZWZ9XG5cdFx0XHRzdHlsZT17c3R5bGV9XG5cdFx0PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIFJlc291cmNlQ2VsbFByb3BzIHtcblx0cmVzb3VyY2U6IFJlc291cmNlXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNlbGw6IFJlYWN0LkZDPFJlc291cmNlQ2VsbFByb3BzPiA9ICh7XG5cdHJlc291cmNlLFxuXHRjbGFzc05hbWUsXG5cdGNoaWxkcmVuLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxufSkgPT4ge1xuXHRjb25zdCB7IHJlbmRlclJlc291cmNlIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC0yIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkfVxuXHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0Y29sb3I6IHJlc291cmNlLmNvbG9yLFxuXHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IHJlc291cmNlLmJhY2tncm91bmRDb2xvcixcblx0XHRcdH19XG5cdFx0PlxuXHRcdFx0e3JlbmRlclJlc291cmNlXG5cdFx0XHRcdD8gcmVuZGVyUmVzb3VyY2UocmVzb3VyY2UpXG5cdFx0XHRcdDogKGNoaWxkcmVuID8/IChcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bSB0cnVuY2F0ZVwiPntyZXNvdXJjZS50aXRsZX08L2Rpdj5cblx0XHRcdFx0XHQpKX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDdXJyZW50VGltZUluZGljYXRvciB9IGZyb20gJ0AvY29tcG9uZW50cy9jdXJyZW50LXRpbWUtaW5kaWNhdG9yJ1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5pbXBvcnQgdHlwZSB7IFBvc2l0aW9uZWRFdmVudCB9IGZyb20gJ0AvbGliL3V0aWxzL3Bvc2l0aW9uLXdlZWstZXZlbnRzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJQcm9wcyB7XG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0ZGF5czogRGF5anNbXVxuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdHJlc291cmNlPzogUmVzb3VyY2Vcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xuXHRwb3NpdGlvbmVkRXZlbnRzOiBQb3NpdGlvbmVkRXZlbnRbXVxufVxuXG5jb25zdCBOb01lbW9Ib3Jpem9udGFsR3JpZEV2ZW50c0xheWVyOiBSZWFjdC5GQzxcblx0SG9yaXpvbnRhbEdyaWRFdmVudHNMYXllclByb3BzXG4+ID0gKHtcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0ZGF5cyxcblx0cmVzb3VyY2VJZCxcblx0cmVzb3VyY2UsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG5cdHBvc2l0aW9uZWRFdmVudHMsXG59KSA9PiB7XG5cdGNvbnN0IHsgZXZlbnRIZWlnaHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3Qgd2Vla1N0YXJ0ID0gZGF5cy5hdCgwKT8uc3RhcnRPZignZGF5JylcblxuXHQvLyBOb3ctbGluZSBpcyBnYXRlZCB0byBob3VyLXJlc29sdXRpb24gaG9yaXpvbnRhbCBncmlkcyAocmVzb3VyY2UgZGF5IGhvcml6b250YWwsXG5cdC8vIHJlc291cmNlIHdlZWsgaG9yaXpvbnRhbCBob3VybHkpLiBEYXktcmVzb2x1dGlvbiBncmlkcyDigJQgcmVndWxhciBNb250aFZpZXcgYW5kXG5cdC8vIHJlc291cmNlIE1vbnRoVmlldyDigJQgc2tpcCBpdDsgYSAyNGgtcGVyY2VudGFnZSBsaW5lIHBlciBjZWxsIHdvdWxkIGJlIGFcblx0Ly8gbWVhbmluZ2xlc3MgMXB4IHNsaXZlci5cblx0Y29uc3QgcmFuZ2VTdGFydCA9IGRheXMuYXQoMClcblx0Y29uc3QgcmFuZ2VFbmQgPSBkYXlzLmF0KC0xKT8uYWRkKDEsIGdyaWRUeXBlKVxuXHRjb25zdCBzaG93Tm93TGluZSA9IGdyaWRUeXBlID09PSAnaG91cicgJiYgQm9vbGVhbihyYW5nZVN0YXJ0ICYmIHJhbmdlRW5kKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCBwb2ludGVyLWV2ZW50cy1ub25lIHotMTAgb3ZlcmZsb3ctY2xpcFwiXG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHQ+XG5cdFx0XHR7c2hvd05vd0xpbmUgJiYgcmFuZ2VTdGFydCAmJiByYW5nZUVuZCAmJiAoXG5cdFx0XHRcdDxDdXJyZW50VGltZUluZGljYXRvclxuXHRcdFx0XHRcdGF4aXM9XCJob3Jpem9udGFsXCJcblx0XHRcdFx0XHRyYW5nZUVuZD17cmFuZ2VFbmR9XG5cdFx0XHRcdFx0cmFuZ2VTdGFydD17cmFuZ2VTdGFydH1cblx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdC8+XG5cdFx0XHQpfVxuXHRcdFx0e3Bvc2l0aW9uZWRFdmVudHMubWFwKChldmVudCkgPT4ge1xuXHRcdFx0XHRjb25zdCBldmVudEtleSA9IGAke2V2ZW50LmlkfS0ke2V2ZW50LnBvc2l0aW9ufS0ke3dlZWtTdGFydD8udG9JU09TdHJpbmcoKX0tJHtyZXNvdXJjZUlkID8/ICduby1yZXNvdXJjZSd9YFxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGUgei0xMCBwb2ludGVyLWV2ZW50cy1hdXRvIG92ZXJmbG93LWNsaXBcIlxuXHRcdFx0XHRcdFx0ZGF0YS1sZWZ0PXtldmVudC5sZWZ0fVxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuY29udGFpbmVyLmhvcml6b250YWwuZXZlbnQoZXZlbnQuaWQpfVxuXHRcdFx0XHRcdFx0ZGF0YS10b3A9e2V2ZW50LnRvcH1cblx0XHRcdFx0XHRcdGRhdGEtd2lkdGg9e2V2ZW50LndpZHRofVxuXHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoZXZlbnRLZXksICd3cmFwcGVyJyl9XG5cdFx0XHRcdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRcdFx0XHRsZWZ0OiBgY2FsYygke2V2ZW50LmxlZnR9JSArIHZhcigtLXNwYWNpbmcpICogMC4yNSlgLFxuXHRcdFx0XHRcdFx0XHR3aWR0aDogYGNhbGMoJHtldmVudC53aWR0aH0lIC0gdmFyKC0tc3BhY2luZykgKiAxKWAsXG5cdFx0XHRcdFx0XHRcdHRvcDogYCR7ZXZlbnQudG9wfXB4YCxcblx0XHRcdFx0XHRcdFx0aGVpZ2h0OiBgJHtldmVudEhlaWdodH1weGAsXG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxEcmFnZ2FibGVFdmVudFxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLWZ1bGwgdy1mdWxsIHNoYWRvd1wiXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17ZXZlbnRLZXl9XG5cdFx0XHRcdFx0XHRcdGV2ZW50PXtldmVudH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyID0gbWVtbyhOb01lbW9Ib3Jpem9udGFsR3JpZEV2ZW50c0xheWVyKVxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuaW50ZXJmYWNlIEN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMge1xuXHQvKiogVGhlIHN0YXJ0IGRhdGUvdGltZSBvZiB0aGUgY29udGFpbmVyJ3MgdGltZWxpbmUgKGUuZy4sIHRvcCBvZiB0aGUgY29sdW1uKSAqL1xuXHRyYW5nZVN0YXJ0OiBEYXlqc1xuXHQvKiogVGhlIGVuZCBkYXRlL3RpbWUgb2YgdGhlIGNvbnRhaW5lcidzIHRpbWVsaW5lIChlLmcuLCBib3R0b20gb2YgdGhlIGNvbHVtbikgKi9cblx0cmFuZ2VFbmQ6IERheWpzXG5cdC8qKiBPcHRpb25hbCByZWZlcmVuY2UgdGltZSBmb3IgXCJub3dcIiAodXNlZnVsIGZvciB0ZXN0aW5nKSAqL1xuXHRub3c/OiBEYXlqc1xuXHQvKiogVGhlIHJlc291cmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbHVtbiAob3B0aW9uYWwpICovXG5cdHJlc291cmNlPzogUmVzb3VyY2Vcblx0LyoqXG5cdCAqIExheW91dCBheGlzIHRoZSBpbmRpY2F0b3IgaXMgcmVuZGVyZWQgYWxvbmcuIERlZmF1bHRzIHRvIGAndmVydGljYWwnYC5cblx0ICogLSBgJ3ZlcnRpY2FsJ2A6IGhvcml6b250YWwgbGluZSBwb3NpdGlvbmVkIGJ5IGB0b3A6IHtwcm9ncmVzc30lYCAoZGF5L3dlZWsgdmVydGljYWwgZ3JpZHMpLlxuXHQgKiAtIGAnaG9yaXpvbnRhbCdgOiB2ZXJ0aWNhbCBsaW5lIHBvc2l0aW9uZWQgYnkgYGxlZnQ6IHtwcm9ncmVzc30lYCAoaG9yaXpvbnRhbCByZXNvdXJjZSBob3VyIGdyaWRzKS5cblx0ICovXG5cdGF4aXM/OiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnXG59XG5cbi8qKlxuICogUmVuZGVycyBhIHJlZCBtYXJrZXIgaW5kaWNhdGluZyB0aGUgY3VycmVudCB0aW1lIHJlbGF0aXZlIHRvIGEgY29udGFpbmVyJ3MgdGltZWxpbmUuXG4gKiBIaWRlcyBpdHNlbGYgd2hlbiBgbm93YCBpcyBvdXRzaWRlIHRoZSByYW5nZS4gU3dpdGNoZXMgb3JpZW50YXRpb24gdmlhIHRoZSBgYXhpc2AgcHJvcCDigJRcbiAqIHZlcnRpY2FsIChkZWZhdWx0KSBkcmF3cyBhIGhvcml6b250YWwgbGluZSBmb3IgdmVydGljYWwgZ3JpZHM7IGhvcml6b250YWwgZHJhd3MgYSB2ZXJ0aWNhbFxuICogbGluZSBmb3IgaG9yaXpvbnRhbCByZXNvdXJjZSBob3VyIGdyaWRzLiBTdXBwb3J0cyBjdXN0b20gcmVuZGVyaW5nIHZpYVxuICogYHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yYCBmcm9tIGNvbnRleHQuXG4gKi9cbmNvbnN0IE5vTWVtb0N1cnJlbnRUaW1lSW5kaWNhdG9yID0gKHtcblx0cmFuZ2VTdGFydCxcblx0cmFuZ2VFbmQsXG5cdG5vdzogcHJvcE5vdyxcblx0cmVzb3VyY2UsXG5cdGF4aXMgPSAndmVydGljYWwnLFxufTogQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcykgPT4ge1xuXHQvLyBHZXQgcmVuZGVyIGZ1bmN0aW9uIGFuZCBjdXJyZW50IHZpZXcgZnJvbSBjb250ZXh0XG5cdGNvbnN0IHsgcmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsIHZpZXcgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KFxuXHRcdChzdGF0ZSkgPT4gKHtcblx0XHRcdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yOiBzdGF0ZS5yZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdHZpZXc6IHN0YXRlLnZpZXcsXG5cdFx0fSlcblx0KVxuXG5cdGNvbnN0IG5vdyA9IHByb3BOb3cgPz8gZGF5anMoKVxuXG5cdC8vIENoZWNrIGlmIGN1cnJlbnQgdGltZSBmYWxscyB3aXRoaW4gdGhpcyByYW5nZVxuXHRjb25zdCBpc1dpdGhpblJhbmdlID0gbm93LmlzU2FtZU9yQWZ0ZXIocmFuZ2VTdGFydCkgJiYgbm93LmlzQmVmb3JlKHJhbmdlRW5kKVxuXG5cdGlmICghaXNXaXRoaW5SYW5nZSkge1xuXHRcdHJldHVybiBudWxsXG5cdH1cblxuXHRjb25zdCB0b3RhbER1cmF0aW9uID0gcmFuZ2VFbmQuZGlmZihyYW5nZVN0YXJ0LCAnbWludXRlJylcblx0Y29uc3QgbWludXRlc0Zyb21TdGFydCA9IG5vdy5kaWZmKHJhbmdlU3RhcnQsICdtaW51dGUnKVxuXHRjb25zdCBwcm9ncmVzcyA9IChtaW51dGVzRnJvbVN0YXJ0IC8gdG90YWxEdXJhdGlvbikgKiAxMDBcblxuXHQvLyBJZiBjdXN0b20gcmVuZGVyIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHZpYSBjb250ZXh0LCB1c2UgaXRcblx0aWYgKHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDw+XG5cdFx0XHRcdHtyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcih7XG5cdFx0XHRcdFx0Y3VycmVudFRpbWU6IG5vdyxcblx0XHRcdFx0XHRyYW5nZVN0YXJ0LFxuXHRcdFx0XHRcdHJhbmdlRW5kLFxuXHRcdFx0XHRcdHByb2dyZXNzLFxuXHRcdFx0XHRcdHJlc291cmNlLFxuXHRcdFx0XHRcdHZpZXcsXG5cdFx0XHRcdFx0YXhpcyxcblx0XHRcdFx0fSl9XG5cdFx0XHQ8Lz5cblx0XHQpXG5cdH1cblxuXHQvLyBEZWZhdWx0IGluZGljYXRvciByZW5kZXJpbmdcblx0aWYgKGF4aXMgPT09ICdob3Jpem9udGFsJykge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT1cImFic29sdXRlIHRvcC0wIGJvdHRvbS0wIHctMC41IGJnLXJlZC01MDAgei01MCBwb2ludGVyLWV2ZW50cy1ub25lXCJcblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJjdXJyZW50LXRpbWUtaW5kaWNhdG9yXCJcblx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRsZWZ0OiBgJHtwcm9ncmVzc30lYCxcblx0XHRcdFx0fX1cblx0XHRcdC8+XG5cdFx0KVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJhYnNvbHV0ZSBsZWZ0LTAgcmlnaHQtMCBoLTAuNSBiZy1yZWQtNTAwIHotNTAgcG9pbnRlci1ldmVudHMtbm9uZVwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImN1cnJlbnQtdGltZS1pbmRpY2F0b3JcIlxuXHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0dG9wOiBgJHtwcm9ncmVzc30lYCxcblx0XHRcdH19XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgQ3VycmVudFRpbWVJbmRpY2F0b3IgPSBtZW1vKE5vTWVtb0N1cnJlbnRUaW1lSW5kaWNhdG9yKVxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgQWxsRGF5Q2VsbFByb3BzIHtcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IE5vTWVtb0FsbERheUNlbGw6IFJlYWN0LkZDPEFsbERheUNlbGxQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuXHRjb25zdCB7IHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQndy0xNiBib3JkZXItciBzaHJpbmstMCBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCBmbGV4IGJvcmRlci1iIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweC0xIHNtOnRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdD5cblx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInRydW5jYXRlXCI+e3QoJ2FsbERheScpfTwvc3Bhbj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgQWxsRGF5Q2VsbCA9IG1lbW8oTm9NZW1vQWxsRGF5Q2VsbClcbiIsCiAgICAiaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgSG91ckxhYmVsUHJvcHMge1xuXHRkYXRlOiBEYXlqc1xufVxuXG5leHBvcnQgY29uc3QgSG91ckxhYmVsOiBSZWFjdC5GQzxIb3VyTGFiZWxQcm9wcz4gPSAoeyBkYXRlIH0pID0+IHtcblx0Y29uc3QgeyByZW5kZXJIb3VyLCB0aW1lRm9ybWF0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKHJlbmRlckhvdXIpIHtcblx0XHRyZXR1cm4gPD57cmVuZGVySG91cihkYXRlKX08Lz5cblx0fVxuXG5cdHJldHVybiA8PntkYXRlLmZvcm1hdCh0aW1lRm9ybWF0ID09PSAnMTItaG91cicgPyAnaCBBJyA6ICdIJyl9PC8+XG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUmVmIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBTY3JvbGxBcmVhLCBTY3JvbGxCYXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5pbXBvcnQgeyB1c2VTY3JvbGxUb1RpbWUgfSBmcm9tICcuL3VzZS1zY3JvbGwtdG8tdGltZSdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZENvbCwgdHlwZSBWZXJ0aWNhbEdyaWRDb2xQcm9wcyB9IGZyb20gJy4vdmVydGljYWwtZ3JpZC1jb2wnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXIgfSBmcm9tICcuL3ZlcnRpY2FsLWdyaWQtaGVhZGVyLWNvbnRhaW5lcidcblxuaW50ZXJmYWNlIFZlcnRpY2FsR3JpZFByb3BzIHtcblx0Y29sdW1uczogVmVydGljYWxHcmlkQ29sUHJvcHNbXVxuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHZhcmlhbnQ/OiAncmVndWxhcicgfCAncmVzb3VyY2UnXG5cdGNsYXNzZXM/OiB7IGhlYWRlcj86IHN0cmluZzsgYm9keT86IHN0cmluZzsgYWxsRGF5Pzogc3RyaW5nIH1cblx0YWxsRGF5Um93PzogUmVhY3QuUmVhY3ROb2RlXG5cdC8qKlxuXHQgKiBHcmFudWxhcml0eSBvZiBlYWNoIGhvdXIgcm93IGluIG1pbnV0ZXMuIEZvcndhcmRlZCB0byBWZXJ0aWNhbEdyaWRDb2wuXG5cdCAqL1xuXHRzbG90RHVyYXRpb25NaW51dGVzPzogbnVtYmVyXG5cdHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllc1xufVxuXG5leHBvcnQgY29uc3QgVmVydGljYWxHcmlkOiBSZWFjdC5GQzxWZXJ0aWNhbEdyaWRQcm9wcz4gPSAoe1xuXHRjb2x1bW5zLFxuXHRjaGlsZHJlbixcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0dmFyaWFudCA9ICdyZXNvdXJjZScsXG5cdGNsYXNzZXMsXG5cdGFsbERheVJvdyxcblx0c2xvdER1cmF0aW9uTWludXRlcyxcblx0c3R5bGUsXG59KSA9PiB7XG5cdGNvbnN0IGlzUmVzb3VyY2VDYWxlbmRhciA9IHZhcmlhbnQgPT09ICdyZXNvdXJjZSdcblx0Y29uc3QgaXNSZWd1bGFyQ2FsZW5kYXIgPSAhaXNSZXNvdXJjZUNhbGVuZGFyXG5cdC8vIFRyaWdnZXJlZCB3aGVuIGBoaWRlTm9uQnVzaW5lc3NIb3Vyc2AgZmlsdGVycyBldmVyeSBjb2x1bW4gdG8gemVybyBob3Vyc1xuXHQvLyAoZS5nLiBidXNpbmVzcyBob3VycyBgc3RhcnRUaW1lOiAwLCBlbmRUaW1lOiAwYCkuIFRoZSBhbGwtZGF5IHJvdyB0YWtlc1xuXHQvLyB0aGUgZnJlZWQgdmVydGljYWwgc3BhY2Ugc28gdGhlIHZpZXcgZG9lc24ndCByZW5kZXIgYW4gZW1wdHkgdGltZSBncmlkLlxuXHRjb25zdCBleHBhbmRBbGxEYXlSb3cgPSBjb2x1bW5zLmV2ZXJ5KChjKSA9PiAhYy5kYXlzPy5sZW5ndGgpXG5cblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgdmlldywgc2Nyb2xsVGltZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCB2aWV3cG9ydFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpXG5cblx0Y29uc3QgaGFzSG91cnNUb1Njcm9sbCA9IGdyaWRUeXBlID09PSAnaG91cicgJiYgIWV4cGFuZEFsbERheVJvd1xuXG5cdHVzZVNjcm9sbFRvVGltZSh7XG5cdFx0dmlld3BvcnRSZWYsXG5cdFx0c2Nyb2xsVGltZSxcblx0XHRlbmFibGVkOiBoYXNIb3Vyc1RvU2Nyb2xsLFxuXHRcdHNjcm9sbEtleTogYCR7dmlld30tJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gLFxuXHR9KVxuXG5cdGNvbnN0IGhlYWRlciA9IGNoaWxkcmVuICYmIChcblx0XHQ8VmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyXG5cdFx0XHRhbGxEYXlSb3c9e2FsbERheVJvd31cblx0XHRcdGNsYXNzZXM9e3sgaGVhZGVyOiBjbGFzc2VzPy5oZWFkZXIsIGFsbERheTogY2xhc3Nlcz8uYWxsRGF5IH19XG5cdFx0XHRleHBhbmRBbGxEYXlSb3c9e2V4cGFuZEFsbERheVJvd31cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9WZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXI+XG5cdClcblxuXHQvLyBXaGVuIGFsbCBjb2x1bW5zIGFyZSBlbXB0eSAobm8gaG91cnMgdG8gZGlzcGxheSksIHNraXAgdGhlIFNjcm9sbEFyZWFcblx0Ly8gZW50aXJlbHkgc28gdGhlIGhlYWRlciAod2l0aCB0aGUgZXhwYW5kZWQgYWxsLWRheSByb3cpIHRha2VzIHRoZSBmdWxsXG5cdC8vIGNvbnRhaW5lciBoZWlnaHQuIGgtZnVsbCBvbiBhIGZsZXggY2hpbGQgb25seSByZXNvbHZlcyBjb3JyZWN0bHkgYWdhaW5zdFxuXHQvLyBhIHBhcmVudCB3aXRoIGEgZGVmaW5pdGUgaGVpZ2h0LCBhbmQgUmFkaXgncyBWaWV3cG9ydCB3cmFwcGVyIGhhcyBvbmx5XG5cdC8vIG1pbi1oZWlnaHQgKG5vdCBleHBsaWNpdCBoZWlnaHQpLCB3aGljaCBpcyB3aHkgdGhlIGFsbC1kYXkgcm93J3Ncblx0Ly8gZmxleC0xIHdvdWxkbid0IGdyb3cgd2hlbiBuZXN0ZWQgaW5zaWRlIHRoZSBTY3JvbGxBcmVhLlxuXHRpZiAoZXhwYW5kQWxsRGF5Um93ICYmIGhlYWRlcikge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT1cImgtZnVsbCBmbGV4IGZsZXgtY29sXCJcblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLWNvbnRhaW5lclwiXG5cdFx0XHRcdHN0eWxlPXtzdHlsZX1cblx0XHRcdD5cblx0XHRcdFx0e2hlYWRlcn1cblx0XHRcdDwvZGl2PlxuXHRcdClcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiaC1mdWxsIGZsZXggZmxleC1jb2xcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLWNvbnRhaW5lclwiXG5cdFx0XHRzdHlsZT17c3R5bGV9XG5cdFx0PlxuXHRcdFx0ey8qIGhlYWRlciByb3cgKi99XG5cdFx0XHR7aXNSZWd1bGFyQ2FsZW5kYXIgJiYgaGVhZGVyfVxuXG5cdFx0XHQ8U2Nyb2xsQXJlYVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKCdoLWZ1bGwnLCBpc1JlZ3VsYXJDYWxlbmRhciAmJiAnb3ZlcmZsb3ctYXV0bycpfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtc2Nyb2xsXCJcblx0XHRcdFx0dmlld1BvcnRQcm9wcz17e1xuXHRcdFx0XHRcdGNsYXNzTmFtZTogJyo6ZmxleCEgKjpmbGV4LWNvbCEgKjptaW4taC1mdWxsJyxcblx0XHRcdFx0XHRyZWY6IHZpZXdwb3J0UmVmLFxuXHRcdFx0XHR9fVxuXHRcdFx0PlxuXHRcdFx0XHR7LyogaGVhZGVyIHJvdyBmb3IgcmVzb3VyY2UgY2FsZW5kYXIgaW5zaWRlIHNjcm9sbCBhcmVhICovfVxuXHRcdFx0XHR7aXNSZXNvdXJjZUNhbGVuZGFyICYmIGhlYWRlcn1cblx0XHRcdFx0ey8qIENhbGVuZGFyIGFyZWEgd2l0aCBzY3JvbGwgKi99XG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKCdmbGV4IGZsZXgtMSBtaW4tdy1mdWxsIHctZml0JywgY2xhc3Nlcz8uYm9keSl9XG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLWJvZHlcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0ey8qIERheSBjb2x1bW5zIHdpdGggdGltZSBzbG90cyAqL31cblx0XHRcdFx0XHR7Y29sdW1ucy5tYXAoKGNvbHVtbiwgaW5kZXgpID0+IChcblx0XHRcdFx0XHRcdDxWZXJ0aWNhbEdyaWRDb2xcblx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoY29sdW1uLmlkLCBpbmRleCl9XG5cdFx0XHRcdFx0XHRcdHsuLi5jb2x1bW59XG5cdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0aXNMYXN0Q29sdW1uPXtpbmRleCA9PT0gY29sdW1ucy5sZW5ndGggLSAxfVxuXHRcdFx0XHRcdFx0XHRzbG90RHVyYXRpb25NaW51dGVzPXtzbG90RHVyYXRpb25NaW51dGVzfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIC8+IHsvKiB2ZXJ0aWNhbCBzY3JvbGxiYXIgKi99XG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIG9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiIC8+eycgJ31cblx0XHRcdFx0ey8qIGhvcml6b250YWwgc2Nyb2xsYmFyICovfVxuXHRcdFx0PC9TY3JvbGxBcmVhPlxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHR5cGUgUmVmT2JqZWN0LCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgdHlwZSBTY3JvbGxUb1RpbWVBeGlzID0gJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFVzZVNjcm9sbFRvVGltZU9wdGlvbnMge1xuXHQvKipcblx0ICogUmVmIHRvIHRoZSBhY3R1YWwgc2Nyb2xsaW5nIGVsZW1lbnQgKGUuZy4gdGhlIFJhZGl4IFNjcm9sbEFyZWEgdmlld3BvcnQpLlxuXHQgKiBUaGUgaG9vayBzY3JvbGxzIHRoaXMgZWxlbWVudCBkaXJlY3RseSBzbyB0aGUgcGFyZW50IHBhZ2UgaXMgbm90IGFmZmVjdGVkLlxuXHQgKi9cblx0dmlld3BvcnRSZWY6IFJlZk9iamVjdDxIVE1MRWxlbWVudCB8IG51bGw+XG5cdHNjcm9sbFRpbWU/OiBzdHJpbmdcblx0ZW5hYmxlZDogYm9vbGVhblxuXHRzY3JvbGxLZXk6IHN0cmluZ1xuXHQvKipcblx0ICogVmVydGljYWwgc2Nyb2xscyBhbG9uZyB0aGUgWSBheGlzIChgc2Nyb2xsVG9wYCksIGhvcml6b250YWwgYWxvbmcgdGhlIFhcblx0ICogYXhpcyAoYHNjcm9sbExlZnRgKS5cblx0ICpcblx0ICogQGRlZmF1bHQgJ3ZlcnRpY2FsJ1xuXHQgKi9cblx0YXhpcz86IFNjcm9sbFRvVGltZUF4aXNcbn1cblxuY29uc3QgSE9VUl9QQVRURVJOID0gL14oXFxkezEsMn0pKD86OlxcZHsxLDJ9KT8oPzo6XFxkezEsMn0pPyQvXG5jb25zdCBIT1VSX1NFTEVDVE9SID0gJ1tkYXRhLWhvdXJdJ1xuXG5jb25zdCBwYXJzZUhvdXIgPSAodGltZTogc3RyaW5nKTogbnVtYmVyIHwgbnVsbCA9PiB7XG5cdGNvbnN0IG1hdGNoID0gSE9VUl9QQVRURVJOLmV4ZWModGltZSlcblx0aWYgKCFtYXRjaCkge1xuXHRcdHJldHVybiBudWxsXG5cdH1cblx0Y29uc3QgaG91ciA9IE51bWJlci5wYXJzZUludChtYXRjaFsxXSwgMTApXG5cdGNvbnN0IGlzSW5SYW5nZSA9IGhvdXIgPj0gMCAmJiBob3VyIDw9IDIzXG5cdHJldHVybiBpc0luUmFuZ2UgPyBob3VyIDogbnVsbFxufVxuXG5jb25zdCByZWFkUm93SG91ciA9IChyb3c6IEhUTUxFbGVtZW50KTogbnVtYmVyID0+XG5cdE51bWJlci5wYXJzZUludChyb3cuZ2V0QXR0cmlidXRlKCdkYXRhLWhvdXInKSA/PyAnJywgMTApXG5cbmNvbnN0IGZpbmRUYXJnZXRSb3cgPSAoXG5cdHJvd3M6IEhUTUxFbGVtZW50W10sXG5cdHRhcmdldEhvdXI6IG51bWJlclxuKTogSFRNTEVsZW1lbnQgfCBudWxsID0+IHtcblx0Y29uc3QgZmlyc3RSb3cgPSByb3dzLmF0KDApXG5cdGNvbnN0IGxhc3RSb3cgPSByb3dzLmF0KC0xKVxuXHRpZiAoIWZpcnN0Um93IHx8ICFsYXN0Um93KSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXG5cdGlmICh0YXJnZXRIb3VyIDw9IHJlYWRSb3dIb3VyKGZpcnN0Um93KSkge1xuXHRcdHJldHVybiBmaXJzdFJvd1xuXHR9XG5cdGlmICh0YXJnZXRIb3VyID49IHJlYWRSb3dIb3VyKGxhc3RSb3cpKSB7XG5cdFx0cmV0dXJuIGxhc3RSb3dcblx0fVxuXHRyZXR1cm4gcm93cy5maW5kKChyb3cpID0+IHJlYWRSb3dIb3VyKHJvdykgPT09IHRhcmdldEhvdXIpID8/IG51bGxcbn1cblxuY29uc3Qgc2Nyb2xsVmlld3BvcnRUb1JvdyA9IChcblx0dmlld3BvcnQ6IEhUTUxFbGVtZW50LFxuXHR0YXJnZXRSb3c6IEhUTUxFbGVtZW50LFxuXHRmaXJzdFJvdzogSFRNTEVsZW1lbnQsXG5cdGF4aXM6IFNjcm9sbFRvVGltZUF4aXNcbikgPT4ge1xuXHQvLyBVc2UgdGhlIGZpcnN0IHJvdyBhcyB0aGUgcmVmZXJlbmNlIGZvciBcInN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSB0aW1lXG5cdC8vIGFyZWEuXCIgSXQgbmF0dXJhbGx5IHNpdHMgcGFzdCBhbnkgc3RpY2t5LWxlZnQgKG9yIHN0aWNreS10b3ApIGhlYWRlclxuXHQvLyBsaWtlIHRoZSBSZXNvdXJjZXMgY29sdW1uLiBTZXR0aW5nIHNjcm9sbExlZnQvc2Nyb2xsVG9wIHRvIHRoZSBvZmZzZXRcblx0Ly8gZnJvbSBmaXJzdCByb3cgdG8gdGFyZ2V0IHJvdyBsYW5kcyB0aGUgdGFyZ2V0IHdoZXJlIHRoZSBmaXJzdCByb3cgc2F0LFxuXHQvLyBpLmUuIHJpZ2h0IGF0IHRoZSBzdGFydCBvZiB0aGUgdmlzaWJsZSB0aW1lIGFyZWEgaW5zdGVhZCBvZiBiZWhpbmQgdGhlXG5cdC8vIHN0aWNreSBjb2x1bW4uXG5cdGNvbnN0IHRhcmdldFJlY3QgPSB0YXJnZXRSb3cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcblx0Y29uc3QgZmlyc3RSZWN0ID0gZmlyc3RSb3cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcblxuXHRpZiAoYXhpcyA9PT0gJ2hvcml6b250YWwnKSB7XG5cdFx0dmlld3BvcnQuc2Nyb2xsVG8oe1xuXHRcdFx0bGVmdDogdGFyZ2V0UmVjdC5sZWZ0IC0gZmlyc3RSZWN0LmxlZnQsXG5cdFx0XHRiZWhhdmlvcjogJ2F1dG8nLFxuXHRcdH0pXG5cdFx0cmV0dXJuXG5cdH1cblxuXHR2aWV3cG9ydC5zY3JvbGxUbyh7XG5cdFx0dG9wOiB0YXJnZXRSZWN0LnRvcCAtIGZpcnN0UmVjdC50b3AsXG5cdFx0YmVoYXZpb3I6ICdhdXRvJyxcblx0fSlcbn1cblxuZXhwb3J0IGNvbnN0IHVzZVNjcm9sbFRvVGltZSA9ICh7XG5cdHZpZXdwb3J0UmVmLFxuXHRzY3JvbGxUaW1lLFxuXHRlbmFibGVkLFxuXHRzY3JvbGxLZXksXG5cdGF4aXMgPSAndmVydGljYWwnLFxufTogVXNlU2Nyb2xsVG9UaW1lT3B0aW9ucykgPT4ge1xuXHRjb25zdCBsYXN0U2Nyb2xsZWRLZXlSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmICghZW5hYmxlZCB8fCAhc2Nyb2xsVGltZSkge1xuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGlmIChsYXN0U2Nyb2xsZWRLZXlSZWYuY3VycmVudCA9PT0gc2Nyb2xsS2V5KSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRjb25zdCB0YXJnZXRIb3VyID0gcGFyc2VIb3VyKHNjcm9sbFRpbWUpXG5cdFx0aWYgKHRhcmdldEhvdXIgPT09IG51bGwpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGNvbnN0IHZpZXdwb3J0ID0gdmlld3BvcnRSZWYuY3VycmVudFxuXHRcdGlmICghdmlld3BvcnQpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRjb25zdCByb3dzID0gQXJyYXkuZnJvbShcblx0XHRcdHZpZXdwb3J0LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KEhPVVJfU0VMRUNUT1IpXG5cdFx0KVxuXHRcdGNvbnN0IGZpcnN0Um93ID0gcm93cy5hdCgwKVxuXHRcdGNvbnN0IHRhcmdldFJvdyA9IGZpbmRUYXJnZXRSb3cocm93cywgdGFyZ2V0SG91cilcblx0XHRpZiAoIWZpcnN0Um93IHx8ICF0YXJnZXRSb3cpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRzY3JvbGxWaWV3cG9ydFRvUm93KHZpZXdwb3J0LCB0YXJnZXRSb3csIGZpcnN0Um93LCBheGlzKVxuXHRcdGxhc3RTY3JvbGxlZEtleVJlZi5jdXJyZW50ID0gc2Nyb2xsS2V5XG5cdH0sIFtlbmFibGVkLCBzY3JvbGxUaW1lLCBzY3JvbGxLZXksIHZpZXdwb3J0UmVmLCBheGlzXSlcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB7IEdyaWRDZWxsIH0gZnJvbSAnLi4vZ3JpZC1jZWxsJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkRXZlbnRzTGF5ZXIgfSBmcm9tICcuL3ZlcnRpY2FsLWdyaWQtZXZlbnRzLWxheWVyJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFZlcnRpY2FsR3JpZENvbFByb3BzIHtcblx0aWQ6IHN0cmluZ1xuXHRkYXk/OiBEYXlqc1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdHJlc291cmNlPzogUmVzb3VyY2Vcblx0ZGF5czogRGF5anNbXSAvLyBUaGUgc3BlY2lmaWMgZGF5IHRoaXMgY29sdW1uIHJlcHJlc2VudHNcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRyZW5kZXJIZWFkZXI/OiAoKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0cmVuZGVyQ2VsbD86IChkYXRlOiBEYXlqcykgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdG5vRXZlbnRzPzogYm9vbGVhblxuXHQvKipcblx0ICogR3JhbnVsYXJpdHkgb2YgZWFjaCBob3VyIHJvdyBpbiBtaW51dGVzLiBgNjBgIHJlbmRlcnMgb25lIGNlbGwgcGVyIGhvdXIgd2l0aFxuXHQgKiBubyBzdWItaG91ciBsaW5lcy4gYDMwYCByZW5kZXJzIHR3by4gYDE1YCByZW5kZXJzIGZvdXIgd2l0aCBkYXNoZWQgc2VwYXJhdG9ycy5cblx0ICovXG5cdHNsb3REdXJhdGlvbk1pbnV0ZXM/OiBudW1iZXJcblx0LyoqIFdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdCBjb2x1bW4gaW4gdGhlIGdyaWQgKi9cblx0aXNMYXN0Q29sdW1uPzogYm9vbGVhblxufVxuXG5jb25zdCBOb01lbW9WZXJ0aWNhbEdyaWRDb2w6IFJlYWN0LkZDPFZlcnRpY2FsR3JpZENvbFByb3BzPiA9ICh7XG5cdGlkLFxuXHRkYXlzLFxuXHRyZXNvdXJjZUlkLFxuXHRyZXNvdXJjZSxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcblx0Z3JpZFR5cGUsXG5cdGNsYXNzTmFtZSxcblx0cmVuZGVyQ2VsbCxcblx0bm9FdmVudHMsXG5cdHNsb3REdXJhdGlvbk1pbnV0ZXMgPSA2MCxcblx0aXNMYXN0Q29sdW1uLFxufSkgPT4ge1xuXHRjb25zdCBzbG90Q291bnQgPSBNYXRoLmZsb29yKDYwIC8gc2xvdER1cmF0aW9uTWludXRlcylcblx0Y29uc3QgY2VsbE9mZnNldHMgPSBBcnJheS5mcm9tKFxuXHRcdHsgbGVuZ3RoOiBzbG90Q291bnQgfSxcblx0XHQoXywgaSkgPT4gaSAqIHNsb3REdXJhdGlvbk1pbnV0ZXNcblx0KVxuXHRjb25zdCBoYXNTdWJIb3VyU2xvdHMgPSBjZWxsT2Zmc2V0cy5sZW5ndGggPiAxXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggZmxleC1jb2wgZmxleC0xIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtaW4tdy0yMCBiZy1iYWNrZ3JvdW5kIHJlbGF0aXZlJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWQgfHwga2V5cy5jb250YWluZXIudmVydGljYWwuY29sKGlkKX1cblx0XHQ+XG5cdFx0XHR7LyogVGltZSBzbG90cyAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIGgtZnVsbCByZWxhdGl2ZSBncmlkXCJcblx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRncmlkVGVtcGxhdGVSb3dzOiBgcmVwZWF0KCR7ZGF5cy5sZW5ndGh9LCBtaW5tYXgoMCwgMWZyKSlgLFxuXHRcdFx0XHR9fVxuXHRcdFx0PlxuXHRcdFx0XHR7ZGF5cy5tYXAoKGRheSwgZGF5SW5kZXgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBob3VyU3RyID0gZGF5LmZvcm1hdCgnSEgnKVxuXG5cdFx0XHRcdFx0aWYgKHJlbmRlckNlbGwpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGlzVGltZUd1dHRlciA9IGlkID09PSBrZXlzLmNvbC50aW1lXG5cdFx0XHRcdFx0XHRjb25zdCB0ZXN0SWQgPSBpc1RpbWVHdXR0ZXJcblx0XHRcdFx0XHRcdFx0PyBrZXlzLmNlbGwudmVydGljYWxUaW1lKGhvdXJTdHIpXG5cdFx0XHRcdFx0XHRcdDoga2V5cy5jZWxsLnZlcnRpY2FsKGRheSwgaG91clN0ciwgJzAwJywgcmVzb3VyY2VJZClcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtaW4taC1bNjBweF0gYm9yZGVyLWIgYm9yZGVyLXJcIlxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtaG91cj17aXNUaW1lR3V0dGVyID8gaG91clN0ciA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17dGVzdElkfVxuXHRcdFx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KGlkLCBkYXlJbmRleCwgaG91clN0cil9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7cmVuZGVyQ2VsbChkYXkpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdCdmbGV4IGZsZXgtY29sIG1pbi1oLVs2MHB4XScsXG5cdFx0XHRcdFx0XHRcdFx0aXNMYXN0Q29sdW1uID8gJ2JvcmRlci1yLTAnIDogJ2JvcmRlci1yJ1xuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShpZCwgZGF5SW5kZXgsIGhvdXJTdHIpfVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7Y2VsbE9mZnNldHMubWFwKChtaW51dGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBtbSA9IFN0cmluZyhtaW51dGUpLnBhZFN0YXJ0KDIsICcwJylcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB0ZXN0SWQgPSBrZXlzLmNlbGwudmVydGljYWwoZGF5LCBob3VyU3RyLCBtbSwgcmVzb3VyY2VJZClcblxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnaG92ZXI6YmctYWNjZW50IHJlbGF0aXZlIHotMTAgZmxleC0xIG1pbi1oLTAgY3Vyc29yLXBvaW50ZXIgYm9yZGVyLWIgYm9yZGVyLXItMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aGFzU3ViSG91clNsb3RzICYmICdib3JkZXItZGFzaGVkJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17dGVzdElkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXk9e2hhc1N1YkhvdXJTbG90cyA/IGRheS5taW51dGUobWludXRlKSA6IGRheX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRob3VyPXtkYXkuaG91cigpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShpZCwgZGF5SW5kZXgsIG1tKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0bWludXRlPXtoYXNTdWJIb3VyU2xvdHMgPyBtaW51dGUgOiB1bmRlZmluZWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlSWR9IC8vIEV2ZW50cyBhcmUgcmVuZGVyZWQgaW4gYSBzZXBhcmF0ZSBsYXllclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzaG91bGRSZW5kZXJFdmVudHM9e2ZhbHNlfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH0pfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KX1cblxuXHRcdFx0XHR7LyogRXZlbnQgYmxvY2tzIGxheWVyICovfVxuXHRcdFx0XHR7IW5vRXZlbnRzICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgei0xMCBwb2ludGVyLWV2ZW50cy1ub25lXCI+XG5cdFx0XHRcdFx0XHQ8VmVydGljYWxHcmlkRXZlbnRzTGF5ZXJcblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuY29udGFpbmVyLmV2ZW50c0xheWVyKCd2ZXJ0aWNhbCcsIGlkKX1cblx0XHRcdFx0XHRcdFx0ZGF5cz17ZGF5c31cblx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlSWR9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsR3JpZENvbCA9IG1lbW8oXG5cdE5vTWVtb1ZlcnRpY2FsR3JpZENvbFxuKSBhcyB0eXBlb2YgTm9NZW1vVmVydGljYWxHcmlkQ29sXG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEN1cnJlbnRUaW1lSW5kaWNhdG9yIH0gZnJvbSAnQC9jb21wb25lbnRzL2N1cnJlbnQtdGltZS1pbmRpY2F0b3InXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHsgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuaW50ZXJmYWNlIFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyUHJvcHMge1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdGRheXM6IERheWpzW10gLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGxheWVyIHJlcHJlc2VudHNcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRyZXNvdXJjZT86IFJlc291cmNlXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcbn1cblxuY29uc3QgTm9NZW1vVmVydGljYWxHcmlkRXZlbnRzTGF5ZXI6IFJlYWN0LkZDPFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyUHJvcHM+ID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUgPSAnaG91cicsXG5cdHJlc291cmNlSWQsXG5cdHJlc291cmNlLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxufSkgPT4ge1xuXHRjb25zdCB0b2RheUV2ZW50cyA9IHVzZVByb2Nlc3NlZERheUV2ZW50cyh7IGRheXMsIGdyaWRUeXBlLCByZXNvdXJjZUlkIH0pXG5cdGNvbnN0IHJhbmdlU3RhcnQgPSBkYXlzLmF0KDApXG5cdGNvbnN0IHJhbmdlRW5kID0gZGF5cy5hdCgtMSk/LmFkZCgxLCBncmlkVHlwZSlcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGwgcG9pbnRlci1ldmVudHMtbm9uZSB6LTEwIG92ZXJmbG93LWNsaXBcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG5cdFx0PlxuXHRcdFx0e3JhbmdlU3RhcnQgJiYgcmFuZ2VFbmQgJiYgKFxuXHRcdFx0XHQ8Q3VycmVudFRpbWVJbmRpY2F0b3Jcblx0XHRcdFx0XHRyYW5nZUVuZD17cmFuZ2VFbmR9XG5cdFx0XHRcdFx0cmFuZ2VTdGFydD17cmFuZ2VTdGFydH1cblx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdC8+XG5cdFx0XHQpfVxuXHRcdFx0e3RvZGF5RXZlbnRzLm1hcCgoZXZlbnQsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50S2V5ID0gYGV2ZW50LSR7ZXZlbnQuaWR9LSR7aW5kZXh9LSR7ZGF5cy5hdCgwKT8udG9JU09TdHJpbmcoKX0tJHtyZXNvdXJjZUlkID8/ICduby1yZXNvdXJjZSd9YFxuXHRcdFx0XHRjb25zdCBpc1Nob3J0RXZlbnQgPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydCwgJ21pbnV0ZScpIDw9IDE1XG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJhYnNvbHV0ZVwiXG5cdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShldmVudEtleSwgJ3dyYXBwZXInKX1cblx0XHRcdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0XHRcdGxlZnQ6IGAke2V2ZW50LmxlZnR9JWAsXG5cdFx0XHRcdFx0XHRcdHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDIpYCxcblx0XHRcdFx0XHRcdFx0dG9wOiBgJHtldmVudC50b3B9JWAsXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogYCR7ZXZlbnQuaGVpZ2h0fSVgLFxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8RHJhZ2dhYmxlRXZlbnRcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbigncG9pbnRlci1ldmVudHMtYXV0bycsIHtcblx0XHRcdFx0XHRcdFx0XHQnWyZfcF06dGV4dC1bMTBweF0gWyZfcF06bXQtMCc6IGlzU2hvcnRFdmVudCxcblx0XHRcdFx0XHRcdFx0fSl9XG5cdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17ZXZlbnRLZXl9XG5cdFx0XHRcdFx0XHRcdGV2ZW50PXtldmVudH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBWZXJ0aWNhbEdyaWRFdmVudHNMYXllciA9IG1lbW8oTm9NZW1vVmVydGljYWxHcmlkRXZlbnRzTGF5ZXIpXG4iLAogICAgImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGZpbHRlckV2ZW50c0J5UmVzb3VyY2UgfSBmcm9tICdAL2xpYi91dGlscy9ldmVudC11dGlscydcbmltcG9ydCB7XG5cdGdldFBvc2l0aW9uZWREYXlFdmVudHMsXG5cdHR5cGUgUG9zaXRpb25lZEV2ZW50LFxufSBmcm9tICdAL2xpYi91dGlscy9wb3NpdGlvbi1kYXktZXZlbnRzJ1xuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkRGF5RXZlbnRzUHJvcHMge1xuXHRkYXlzOiBEYXlqc1tdIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IHVzZVByb2Nlc3NlZERheUV2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlLFxuXHRyZXNvdXJjZUlkLFxufTogVXNlUHJvY2Vzc2VkRGF5RXZlbnRzUHJvcHMpID0+IHtcblx0Y29uc3QgeyBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIGdldEV2ZW50c0ZvclJlc291cmNlIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgZmlyc3QgPSBkYXlzLmF0KDApXG5cdGNvbnN0IGxhc3QgPSBkYXlzLmF0KC0xKVxuXHRjb25zdCBkYXlTdGFydCA9IGZpcnN0Py5zdGFydE9mKCdkYXknKVxuXHRjb25zdCBkYXlFbmQgPSBsYXN0Py5lbmRPZignZGF5JylcblxuXHRjb25zdCBldmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoIWRheVN0YXJ0IHx8ICFkYXlFbmQpIHJldHVybiBbXVxuXG5cdFx0bGV0IGRheUV2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShkYXlTdGFydCwgZGF5RW5kKVxuXHRcdGlmIChyZXNvdXJjZUlkKSB7XG5cdFx0XHRkYXlFdmVudHMgPSBmaWx0ZXJFdmVudHNCeVJlc291cmNlKFxuXHRcdFx0XHRkYXlFdmVudHMsXG5cdFx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlKHJlc291cmNlSWQpXG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0Ly8gVmVydGljYWwgZ3JpZHMgKERheS9XZWVrL1Jlc291cmNlIFZlcnRpY2FsKSBuZXZlciByZW5kZXIgYWxsLWRheSBldmVudHNcblx0XHQvLyBhcyB0aG9zZSBhcmUgaGFuZGxlZCBieSB0aGUgYWxsLWRheS1yb3cgb3IgYXJlIG5vdCBhcHByb3ByaWF0ZSBmb3IgdGhlIHRpbWUgZ3JpZC5cblx0XHRyZXR1cm4gZGF5RXZlbnRzLmZpbHRlcigoZSkgPT4gIWUuYWxsRGF5KVxuXHR9LCBbXG5cdFx0ZGF5U3RhcnQsXG5cdFx0ZGF5RW5kLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRdKVxuXG5cdGNvbnN0IHRvZGF5RXZlbnRzID0gdXNlTWVtbzxQb3NpdGlvbmVkRXZlbnRbXT4oKCkgPT4ge1xuXHRcdHJldHVybiBnZXRQb3NpdGlvbmVkRGF5RXZlbnRzKHtcblx0XHRcdGRheXMsXG5cdFx0XHRldmVudHMsXG5cdFx0XHRncmlkVHlwZSxcblx0XHR9KVxuXHR9LCBbZGF5cywgZ3JpZFR5cGUsIGV2ZW50c10pXG5cblx0cmV0dXJuIHRvZGF5RXZlbnRzXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpb25lZEV2ZW50IGV4dGVuZHMgQ2FsZW5kYXJFdmVudCB7XG5cdGxlZnQ6IG51bWJlciAvLyBMZWZ0IHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0d2lkdGg6IG51bWJlciAvLyBXaWR0aCBpbiBwZXJjZW50YWdlXG5cdHRvcDogbnVtYmVyIC8vIFRvcCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdGhlaWdodDogbnVtYmVyIC8vIEhlaWdodCBpbiBwZXJjZW50YWdlXG5cdHpJbmRleD86IG51bWJlciAvLyBaLWluZGV4IGZvciBsYXllcmluZyBvdmVybGFwcGluZyBldmVudHNcbn1cblxuaW50ZXJmYWNlIEdldFBvc2l0aW9uZWREYXlFdmVudHNQYXJhbXMge1xuXHRkYXlzOiBEYXlqc1tdXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cicgfCAnbWludXRlJ1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxufVxuXG5leHBvcnQgY29uc3QgZ2V0UG9zaXRpb25lZERheUV2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2hvdXInLFxuXHRldmVudHMsXG59OiBHZXRQb3NpdGlvbmVkRGF5RXZlbnRzUGFyYW1zKTogUG9zaXRpb25lZEV2ZW50W10gPT4ge1xuXHQvLyBGaWx0ZXIgb3V0IGFsbC1kYXkgZXZlbnRzIGFuZCBzb3J0IGJ5IHN0YXJ0IHRpbWVcblx0Y29uc3Qgc29ydGVkRXZlbnRzID0gZXZlbnRzXG5cdFx0LmZpbHRlcigoZSkgPT4gIWUuYWxsRGF5KVxuXHRcdC50b1NvcnRlZCgoYSwgYikgPT4gYS5zdGFydC5kaWZmKGIuc3RhcnQpKVxuXG5cdGlmIChzb3J0ZWRFdmVudHMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIFtdXG5cdH1cblxuXHQvLyBEZXRlcm1pbmUgZ3JpZCBib3VuZGFyaWVzIGFuZCBtZXRyaWNzXG5cdC8vIFVzZSBleHBsaWNpdCBzdGFydE9mIHRvIGVuc3VyZSB3ZSBhcmUgYW5jaG9yZWQgdG8gdGhlIGdyaWQgdW5pdCBib3VuZGFyaWVzXG5cdC8vIFRoaXMgcHJldmVudHMgb2Zmc2V0cyBpZiB0aGUgZ3JpZCBkYXlzIGFyZSBub3Qgbm9ybWFsaXplZFxuXHRjb25zdCBncmlkU3RhcnQgPSBkYXlzLmF0KDApIHx8IGRheWpzKClcblx0Y29uc3QgdG90YWxVbml0cyA9IGRheXMubGVuZ3RoXG5cdGNvbnN0IGlzRGlzY3JldGUgPSBncmlkVHlwZSA9PT0gJ2RheSdcblxuXHQvLyBTdGVwIDE6IEdyb3VwIGV2ZW50cyBpbnRvIGNsdXN0ZXJzIG9mIG92ZXJsYXBwaW5nIGV2ZW50c1xuXHRjb25zdCBjbHVzdGVyczogQ2FsZW5kYXJFdmVudFtdW10gPSBbXVxuXHRsZXQgY3VycmVudENsdXN0ZXI6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cdGxldCBsYXN0RXZlbnRFbmQ6IERheWpzIHwgbnVsbCA9IG51bGxcblx0Zm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRFdmVudHMpIHtcblx0XHRpZiAobGFzdEV2ZW50RW5kICYmIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIobGFzdEV2ZW50RW5kKSkge1xuXHRcdFx0aWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y2x1c3RlcnMucHVzaChjdXJyZW50Q2x1c3Rlcilcblx0XHRcdH1cblx0XHRcdGN1cnJlbnRDbHVzdGVyID0gW11cblx0XHR9XG5cdFx0Y3VycmVudENsdXN0ZXIucHVzaChldmVudClcblx0XHRsYXN0RXZlbnRFbmQgPSBsYXN0RXZlbnRFbmQgPyBkYXlqcy5tYXgobGFzdEV2ZW50RW5kLCBldmVudC5lbmQpIDogZXZlbnQuZW5kXG5cdH1cblx0aWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcblx0XHRjbHVzdGVycy5wdXNoKGN1cnJlbnRDbHVzdGVyKVxuXHR9XG5cblx0Ly8gQ29tcHV0ZSB0b3AvaGVpZ2h0IHBlcmNlbnRhZ2VzIGZvciBhbiBldmVudCwgY2xhbXBlZCB0byBncmlkOyBudWxsIGlmIG91dHNpZGUuXG5cdGNvbnN0IGNvbXB1dGVUb3BIZWlnaHQgPSAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0KTogeyB0b3A6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB8IG51bGwgPT4ge1xuXHRcdGxldCBzdGFydFRpbWUgPSBldmVudC5zdGFydC5kaWZmKGdyaWRTdGFydCwgZ3JpZFR5cGUsIHRydWUpXG5cdFx0bGV0IGVuZFRpbWUgPSBldmVudC5lbmQuZGlmZihncmlkU3RhcnQsIGdyaWRUeXBlLCB0cnVlKVxuXHRcdGlmIChpc0Rpc2NyZXRlKSB7XG5cdFx0XHRzdGFydFRpbWUgPSBNYXRoLmZsb29yKHN0YXJ0VGltZSlcblx0XHRcdGVuZFRpbWUgPSBNYXRoLmNlaWwoZW5kVGltZSlcblx0XHRcdGlmIChlbmRUaW1lIDw9IHN0YXJ0VGltZSkgZW5kVGltZSA9IHN0YXJ0VGltZSArIDFcblx0XHR9XG5cdFx0aWYgKHN0YXJ0VGltZSA8IDApIHN0YXJ0VGltZSA9IDBcblx0XHRpZiAoZW5kVGltZSA+IHRvdGFsVW5pdHMpIGVuZFRpbWUgPSB0b3RhbFVuaXRzXG5cdFx0Y29uc3QgZHVyYXRpb24gPSBNYXRoLm1heCgwLCBlbmRUaW1lIC0gc3RhcnRUaW1lKVxuXHRcdGlmIChkdXJhdGlvbiA9PT0gMCkgcmV0dXJuIG51bGxcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiAoc3RhcnRUaW1lIC8gdG90YWxVbml0cykgKiAxMDAsXG5cdFx0XHRoZWlnaHQ6IChkdXJhdGlvbiAvIHRvdGFsVW5pdHMpICogMTAwLFxuXHRcdH1cblx0fVxuXG5cdC8vIE1heCBjbHVzdGVyIG9mZnNldCBieSBldmVudCBjb3VudCAoMiBldmVudHMg4oaSIDI1JSwgZXRjLilcblx0Y29uc3QgbWF4T2Zmc2V0QnlDb3VudCA9IChuOiBudW1iZXIpID0+XG5cdFx0biA9PT0gMiA/IDI1IDogbiA9PT0gMyA/IDUwIDogbiA9PT0gNCA/IDYwIDogNzBcblxuXHQvLyBTdGVwIDI6IEZvciBlYWNoIGNsdXN0ZXIsIGNvbXB1dGUgcG9zaXRpb25zXG5cdGNvbnN0IHByb2Nlc3NlZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W10gPSBbXVxuXHRmb3IgKGNvbnN0IGNsdXN0ZXIgb2YgY2x1c3RlcnMpIHtcblx0XHRpZiAoY2x1c3Rlci5sZW5ndGggPT09IDEpIHtcblx0XHRcdGNvbnN0IGV2ZW50ID0gY2x1c3RlclswXVxuXHRcdFx0Y29uc3QgcG9zID0gY29tcHV0ZVRvcEhlaWdodChldmVudClcblx0XHRcdGlmICghcG9zKSBjb250aW51ZVxuXHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goeyAuLi5ldmVudCwgbGVmdDogMCwgd2lkdGg6IDEwMCwgLi4ucG9zIH0pXG5cdFx0XHRjb250aW51ZVxuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGV2ZW50cyDigJQgbGF5ZXJlZCBwb3NpdGlvbmluZy4gTG9uZ2VzdCBkdXJhdGlvbiBmaXJzdCwgdGllLWJyZWFrXG5cdFx0Ly8gYnkgZWFybGllc3Qgc3RhcnQuXG5cdFx0Y29uc3Qgc29ydGVkQ2x1c3RlciA9IFsuLi5jbHVzdGVyXS5zb3J0KChhLCBiKSA9PiB7XG5cdFx0XHRjb25zdCBkdXJEaWZmID1cblx0XHRcdFx0Yi5lbmQuZGlmZihiLnN0YXJ0LCAnbWludXRlJykgLSBhLmVuZC5kaWZmKGEuc3RhcnQsICdtaW51dGUnKVxuXHRcdFx0cmV0dXJuIGR1ckRpZmYgIT09IDAgPyBkdXJEaWZmIDogYS5zdGFydC5kaWZmKGIuc3RhcnQpXG5cdFx0fSlcblxuXHRcdGNvbnN0IG4gPSBzb3J0ZWRDbHVzdGVyLmxlbmd0aFxuXHRcdGNvbnN0IG9mZnNldFBlckV2ZW50ID0gbiA+IDEgPyBtYXhPZmZzZXRCeUNvdW50KG4pIC8gKG4gLSAxKSA6IDBcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBldmVudCA9IHNvcnRlZENsdXN0ZXJbaV1cblx0XHRcdGNvbnN0IHBvcyA9IGNvbXB1dGVUb3BIZWlnaHQoZXZlbnQpXG5cdFx0XHRpZiAoIXBvcykgY29udGludWVcblx0XHRcdC8vIEZpcnN0IGV2ZW50IChsb25nZXN0KSB0YWtlcyBmdWxsIHdpZHRoOyBsYXRlciBldmVudHMgYXJlIG9mZnNldC5cblx0XHRcdGNvbnN0IGxlZnQgPSBpID09PSAwID8gMCA6IG9mZnNldFBlckV2ZW50ICogaVxuXHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuXHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0Li4ucG9zLFxuXHRcdFx0XHRsZWZ0LFxuXHRcdFx0XHR3aWR0aDogMTAwIC0gbGVmdCxcblx0XHRcdFx0ekluZGV4OiBpICsgMSxcblx0XHRcdH0pXG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHByb2Nlc3NlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXJQcm9wcyB7XG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzZXM/OiB7IGhlYWRlcj86IHN0cmluZzsgYWxsRGF5Pzogc3RyaW5nIH1cblx0YWxsRGF5Um93PzogUmVhY3QuUmVhY3ROb2RlXG5cdGV4cGFuZEFsbERheVJvdz86IGJvb2xlYW5cbn1cblxuY29uc3QgTm9NZW1vVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyOiBSZWFjdC5GQzxcblx0VmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHNcbj4gPSAoeyBjaGlsZHJlbiwgY2xhc3NlcywgYWxsRGF5Um93LCBleHBhbmRBbGxEYXlSb3cgPSBmYWxzZSB9KSA9PiB7XG5cdGNvbnN0IHsgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoXG5cdFx0KHN0YXRlKSA9PiAoe1xuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcjogc3RhdGUuc3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWU6IHN0YXRlLnZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0fSlcblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0ZXhwYW5kQWxsRGF5Um93ICYmICdmbGV4IGgtZnVsbCBmbGV4LWNvbCcsXG5cdFx0XHRcdHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIxIGJnLWJhY2tncm91bmQnLCAvLyBaLWluZGV4IGFib3ZlIHRoZSBsZWZ0IHN0aWNreSByZXNvdXJjZSBjb2x1bW5cblx0XHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2gtMTIgYm9yZGVyLWIgbWluLXctZnVsbCB3LWZpdCcsIGNsYXNzZXM/LmhlYWRlcil9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1oZWFkZXJcIlxuXHRcdFx0PlxuXHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdHsvKiBBbGwtZGF5IHJvdyAqL31cblx0XHRcdHthbGxEYXlSb3cgJiYgKFxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdmbGV4IHctZnVsbCBtaW4taC0xMicsXG5cdFx0XHRcdFx0XHRleHBhbmRBbGxEYXlSb3cgJiYgJ2ZsZXgtMSBvdmVyZmxvdy1oaWRkZW4nLFxuXHRcdFx0XHRcdFx0Y2xhc3Nlcz8uYWxsRGF5XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtYWxsLWRheVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7YWxsRGF5Um93fVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCl9XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lciA9IG1lbW8oXG5cdE5vTWVtb1ZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lclxuKVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBnZXREYXlIb3VycyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBjYWxjdWxhdGVCdXNpbmVzc0hvdXJzUmFuZ2UgfSBmcm9tICcuL2J1c2luZXNzLWhvdXJzJ1xuXG5pbnRlcmZhY2UgR2V0Vmlld0hvdXJzT3B0aW9ucyB7XG5cdHJlZmVyZW5jZURhdGU6IERheWpzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzPzogYm9vbGVhblxuXHQvKipcblx0ICogRm9yIHZpZXdzIHdpdGggbXVsdGlwbGUgZGF5cyAobGlrZSBXZWVrVmlldyksIHdlIG1pZ2h0IHdhbnQgdG8gc2hvd1xuXHQgKiB0aGUgdW5pb24gb2YgYWxsIGJ1c2luZXNzIGhvdXJzIGFjcm9zcyB0aG9zZSBkYXlzLlxuXHQgKi9cblx0YWxsRGF0ZXM/OiBEYXlqc1tdXG5cdC8qKlxuXHQgKiBPcHRpb25hbCBhZGRpdGlvbmFsIGJ1c2luZXNzIGhvdXJzIGNvbmZpZ3VyYXRpb25zIChlLmcuLCBmcm9tIHJlc291cmNlcykuXG5cdCAqIFRoZXNlIHdpbGwgYmUgbWVyZ2VkIHdpdGggdGhlIGdsb2JhbCBidXNpbmVzc0hvdXJzIHdoZW4gY2FsY3VsYXRpbmcgdGhlIHZpc2libGUgcmFuZ2UuXG5cdCAqL1xuXHRyZXNvdXJjZUJ1c2luZXNzSG91cnM/OiAoQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSlbXVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgbGlzdCBvZiBob3VycyB0byBkaXNwbGF5IGluIHRoZSBjYWxlbmRhciB2aWV3LlxuICogSWYgaGlkZU5vbkJ1c2luZXNzSG91cnMgaXMgdHJ1ZSwgaXQgZmlsdGVycyB0aGUgaG91cnMgYmFzZWQgb24gYnVzaW5lc3NIb3VycyBjb25maWd1cmF0aW9uLlxuICogRm9yIG11bHRpcGxlIGRhdGVzLCBpdCB0YWtlcyB0aGUgZWFybGllc3Qgc3RhcnQgYW5kIGxhdGVzdCBlbmQgYWNyb3NzIGFsbCBkYXRlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdIb3Vycyh7XG5cdHJlZmVyZW5jZURhdGUsXG5cdGJ1c2luZXNzSG91cnMsXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRhbGxEYXRlcyA9IFtyZWZlcmVuY2VEYXRlXSxcblx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzID0gW10sXG59OiBHZXRWaWV3SG91cnNPcHRpb25zKTogRGF5anNbXSB7XG5cdGNvbnN0IGhvdXJzID0gZ2V0RGF5SG91cnMoeyByZWZlcmVuY2VEYXRlIH0pXG5cblx0Y29uc3QgaGFzQnVzaW5lc3NIb3Vyc0NvbmZpZyA9XG5cdFx0ISFidXNpbmVzc0hvdXJzIHx8IHJlc291cmNlQnVzaW5lc3NIb3Vycy5sZW5ndGggPiAwXG5cdGNvbnN0IHNob3VsZEZpbHRlckJ5QnVzaW5lc3NIb3VycyA9XG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMgJiYgaGFzQnVzaW5lc3NIb3Vyc0NvbmZpZ1xuXG5cdGlmICghc2hvdWxkRmlsdGVyQnlCdXNpbmVzc0hvdXJzKSByZXR1cm4gaG91cnNcblxuXHRjb25zdCB7IG1pblN0YXJ0LCBtYXhFbmQsIGhhc0J1c2luZXNzSG91cnMgfSA9IGNhbGN1bGF0ZUJ1c2luZXNzSG91cnNSYW5nZSh7XG5cdFx0YWxsRGF0ZXMsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdH0pXG5cblx0aWYgKCFoYXNCdXNpbmVzc0hvdXJzKSByZXR1cm4gaG91cnNcblxuXHRpZiAobWluU3RhcnQgPj0gbWF4RW5kKSByZXR1cm4gW11cblxuXHRyZXR1cm4gaG91cnMuZmlsdGVyKChoKSA9PiB7XG5cdFx0Y29uc3QgaG91ciA9IGguaG91cigpXG5cdFx0cmV0dXJuIGhvdXIgPj0gbWluU3RhcnQgJiYgaG91ciA8IG1heEVuZFxuXHR9KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbGxEYXlSb3cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgSG91ckxhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvdXItbGFiZWwvaG91ci1sYWJlbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0RGF5S2V5LCBpc1RvZGF5IH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5leHBvcnQgY29uc3QgRGF5VmlldyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgdCwgYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMsIHNsb3REdXJhdGlvbiB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IHRvZGF5ID0gaXNUb2RheShjdXJyZW50RGF0ZSlcblx0Y29uc3QgaG91cnMgPSBnZXRWaWV3SG91cnMoe1xuXHRcdHJlZmVyZW5jZURhdGU6IGN1cnJlbnREYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0YWxsRGF0ZXM6IFtjdXJyZW50RGF0ZV0sXG5cdH0pXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB7XG5cdFx0aWQ6IGtleXMuY29sLnRpbWUsXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0Y2xhc3NOYW1lOlxuXHRcdFx0J3Nocmluay0wIHctMTYgbWluLXctMTYgbWF4LXctMTYgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAnLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IERheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdDxIb3VyTGFiZWwgZGF0ZT17ZGF0ZX0gLz5cblx0XHRcdDwvZGl2PlxuXHRcdCksXG5cdH1cblxuXHRjb25zdCBjb2x1bW5zID0ge1xuXHRcdGlkOiBrZXlzLmNvbC5kYXkoY3VycmVudERhdGUpLFxuXHRcdGRheTogY3VycmVudERhdGUsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0Y2xhc3NOYW1lOiAndy1bY2FsYygxMDAlLTRyZW0pXSBmbGV4LTEnLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17PEFsbERheVJvdyBkYXlzPXtbY3VycmVudERhdGVdfSAvPn1cblx0XHRcdGNsYXNzZXM9e3tcblx0XHRcdFx0aGVhZGVyOiAndy1mdWxsJyxcblx0XHRcdFx0Ym9keTogJ3ctZnVsbCcsXG5cdFx0XHRcdGFsbERheTogJ3ctZnVsbCcsXG5cdFx0XHR9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCBjb2x1bW5zXX1cblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0XHRzbG90RHVyYXRpb25NaW51dGVzPXtzbG90RHVyYXRpb259XG5cdFx0XHR2YXJpYW50PVwicmVndWxhclwiXG5cdFx0PlxuXHRcdFx0ey8qIEhlYWRlciAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXsnZmxleCBmbGV4LTEganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIG1pbi1oLTEyJ31cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJkYXktdmlldy1oZWFkZXJcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciB0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCBzbTp0ZXh0LXhsJyxcblx0XHRcdFx0XHRcdHRvZGF5ICYmICd0ZXh0LXByaW1hcnknXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtnZXREYXlLZXkoY3VycmVudERhdGUpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwieHM6aW5saW5lIGhpZGRlblwiPlxuXHRcdFx0XHRcdFx0e2N1cnJlbnREYXRlLmZvcm1hdCgnZGRkZCwgJyl9XG5cdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdHtjdXJyZW50RGF0ZS5mb3JtYXQoJ01NTU0gRCwgWVlZWScpfVxuXHRcdFx0XHRcdHt0b2RheSAmJiAoXG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIG1sLTIgcm91bmRlZC1mdWxsIHB4LTEgcHktMC41IHRleHQteHMgc206cHgtMiBzbTp0ZXh0LXNtXCI+XG5cdFx0XHRcdFx0XHRcdHt0KCd0b2RheScpfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgZ2V0TW9udGhXZWVrcyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB7IE1vbnRoSGVhZGVyIH0gZnJvbSAnLi9tb250aC1oZWFkZXInXG5pbXBvcnQgdHlwZSB7IE1vbnRoVmlld1Byb3BzIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGNvbnN0IE1vbnRoVmlldzogUmVhY3QuRkM8TW9udGhWaWV3UHJvcHM+ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHdlZWtzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRNb250aFdlZWtzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IHJvd3MgPSB3ZWVrcy5tYXAoKGRheXMsIHdlZWtJbmRleCkgPT4gKHtcblx0XHRpZDoga2V5cy5saXN0S2V5KCd3ZWVrJywgd2Vla0luZGV4KSxcblx0XHRjb2x1bW5zOiBkYXlzLm1hcCgoZGF5KSA9PiAoe1xuXHRcdFx0aWQ6IGtleXMuY29sLmRheShkYXkpLFxuXHRcdFx0ZGF5LFxuXHRcdFx0Y2xhc3NOYW1lOiAndy1hdXRvJyxcblx0XHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0XHR9KSksXG5cdFx0Y2xhc3NOYW1lOiAnZmxleC0xJyxcblx0XHRzaG93RGF5TnVtYmVyOiB0cnVlLFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxIb3Jpem9udGFsR3JpZFxuXHRcdFx0Y2xhc3Nlcz17eyBib2R5OiAndy1mdWxsJywgaGVhZGVyOiAndy1mdWxsJyB9fVxuXHRcdFx0cm93cz17cm93c31cblx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHQ+XG5cdFx0XHQ8TW9udGhIZWFkZXIgY2xhc3NOYW1lPVwiaC0xMlwiIC8+XG5cdFx0PC9Ib3Jpem9udGFsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgdXNlU2Nyb2xsVG9UaW1lIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdXNlLXNjcm9sbC10by10aW1lJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyIH0gZnJvbSAnLi9ob3Jpem9udGFsLWdyaWQtaGVhZGVyLWNvbnRhaW5lcidcbmltcG9ydCB7XG5cdEhvcml6b250YWxHcmlkUm93LFxuXHR0eXBlIEhvcml6b250YWxHcmlkUm93UHJvcHMsXG59IGZyb20gJy4vaG9yaXpvbnRhbC1ncmlkLXJvdydcblxuaW50ZXJmYWNlIEhvcml6b250YWxHcmlkUHJvcHMge1xuXHRyb3dzOiBIb3Jpem9udGFsR3JpZFJvd1Byb3BzW11cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBib2R5Pzogc3RyaW5nIH1cblx0YWxsRGF5PzogYm9vbGVhblxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHZhcmlhbnQ/OiAncmVndWxhcicgfCAncmVzb3VyY2UnXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWQ6IFJlYWN0LkZDPEhvcml6b250YWxHcmlkUHJvcHM+ID0gKHtcblx0cm93cyxcblx0Y2hpbGRyZW4sXG5cdGNsYXNzZXMsXG5cdGFsbERheTogdG9wTGV2ZWxBbGxEYXksXG5cdGdyaWRUeXBlLFxuXHR2YXJpYW50ID0gJ3Jlc291cmNlJyxcblx0ZGF5TnVtYmVySGVpZ2h0LFxufSkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB2aWV3LCBzY3JvbGxUaW1lIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IHZpZXdwb3J0UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbClcblxuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSB2YXJpYW50ID09PSAncmVzb3VyY2UnXG5cdGNvbnN0IGlzUmVndWxhckNhbGVuZGFyID0gIWlzUmVzb3VyY2VDYWxlbmRhclxuXHRjb25zdCBjYW5Ib3Jpem9udGFsU2Nyb2xsVG9Ib3VyID0gZ3JpZFR5cGUgPT09ICdob3VyJyAmJiBpc1Jlc291cmNlQ2FsZW5kYXJcblxuXHR1c2VTY3JvbGxUb1RpbWUoe1xuXHRcdHZpZXdwb3J0UmVmLFxuXHRcdHNjcm9sbFRpbWUsXG5cdFx0ZW5hYmxlZDogY2FuSG9yaXpvbnRhbFNjcm9sbFRvSG91cixcblx0XHRzY3JvbGxLZXk6IGAke3ZpZXd9LSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9YCxcblx0XHRheGlzOiAnaG9yaXpvbnRhbCcsXG5cdH0pXG5cblx0Y29uc3QgaGVhZGVyID0gY2hpbGRyZW4gJiYgKFxuXHRcdDxIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciBjbGFzc05hbWU9e2NsYXNzZXM/LmhlYWRlcn0+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9Ib3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lcj5cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiaC1mdWxsIGZsZXggZmxleC1jb2xcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtY29udGFpbmVyXCJcblx0XHQ+XG5cdFx0XHR7LyoqXG5cdFx0XHQgKiBoZWFkZXIgcm93IGlzIHJlbmRlcmVkIG91dHNpZGUgc2Nyb2xsIGFyZWEgZm9yIHJlZ3VsYXIgY2FsZW5kYXJcblx0XHRcdCAqL31cblx0XHRcdHtpc1JlZ3VsYXJDYWxlbmRhciAmJiBoZWFkZXJ9XG5cblx0XHRcdDxTY3JvbGxBcmVhXG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2gtZnVsbCcsIGlzUmVndWxhckNhbGVuZGFyICYmICdvdmVyZmxvdy1hdXRvJyl9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwiaG9yaXpvbnRhbC1ncmlkLXNjcm9sbFwiXG5cdFx0XHRcdHZpZXdQb3J0UHJvcHM9e3tcblx0XHRcdFx0XHRjbGFzc05hbWU6ICcqOmZsZXghICo6ZmxleC1jb2whICo6bWluLWgtZnVsbCcsXG5cdFx0XHRcdFx0cmVmOiB2aWV3cG9ydFJlZixcblx0XHRcdFx0fX1cblx0XHRcdD5cblx0XHRcdFx0ey8qKlxuXHRcdFx0XHQgKiBoZWFkZXIgcm93IGZvciByZXNvdXJjZSBjYWxlbmRhciBpbnNpZGUgc2Nyb2xsIGFyZWFcblx0XHRcdFx0ICogKi99XG5cdFx0XHRcdHtpc1Jlc291cmNlQ2FsZW5kYXIgJiYgaGVhZGVyfVxuXG5cdFx0XHRcdHsvKiBDYWxlbmRhciBhcmVhIHdpdGggc2Nyb2xsICovfVxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LTEgdy1maXQnLCBjbGFzc2VzPy5ib2R5KX1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImhvcml6b250YWwtZ3JpZC1ib2R5XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBmbGV4IGZsZXgtY29sIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRrZXk9e2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTScpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHtyb3dzLm1hcCgocm93LCBpbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0XHQ8SG9yaXpvbnRhbEdyaWRSb3dcblx0XHRcdFx0XHRcdFx0XHRhbGxEYXk9e3Jvdy5hbGxEYXkgPz8gdG9wTGV2ZWxBbGxEYXl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXtkYXlOdW1iZXJIZWlnaHR9XG5cdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdGlzTGFzdFJvdz17aW5kZXggPT09IHJvd3MubGVuZ3RoIC0gMX1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e3Jvdy5pZH1cblx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PXt2YXJpYW50fVxuXHRcdFx0XHRcdFx0XHRcdHsuLi5yb3d9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgLz5cblx0XHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgb3JpZW50YXRpb249XCJob3Jpem9udGFsXCIgLz5cblx0XHRcdDwvU2Nyb2xsQXJlYT5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXJQcm9wcyB7XG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBOb01lbW9Ib3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciA9ICh7XG5cdGNoaWxkcmVuLFxuXHRjbGFzc05hbWUsXG59OiBIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lclByb3BzKSA9PiB7XG5cdGNvbnN0IHsgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoXG5cdFx0KHN0YXRlKSA9PiAoe1xuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcjogc3RhdGUuc3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWU6IHN0YXRlLnZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0fSlcblx0KVxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGgtMTIgdy1maXQnLFxuXHRcdFx0XHRzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMSBiZy1iYWNrZ3JvdW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lLFxuXHRcdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtaGVhZGVyXCJcblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyID0gbWVtbyhcblx0Tm9NZW1vSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXJcbilcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5pbnRlcmZhY2UgTW9udGhIZWFkZXJQcm9wcyB7XG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgTW9udGhIZWFkZXI6IFJlYWN0LkZDPE1vbnRoSGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcblx0Y29uc3QgeyBmaXJzdERheU9mV2Vlaywgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSwgY3VycmVudERhdGUgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdC8vIFJlb3JkZXIgd2VlayBkYXlzIGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG5cdGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggdy1mdWxsJyxcblx0XHRcdFx0c3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMjAnLFxuXHRcdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD1cIm1vbnRoLWhlYWRlclwiXG5cdFx0PlxuXHRcdFx0e3dlZWtEYXlzLm1hcCgod2Vla0RheSwgaW5kZXgpID0+IChcblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInB5LTIgdGV4dC1jZW50ZXIgZm9udC1tZWRpdW0gYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXgtMVwiXG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuaGVhZGVyLndlZWtkYXkoJ21vbnRoJywgd2Vla0RheS5mb3JtYXQoJ2RkZCcpKX1cblx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdGtleT17d2Vla0RheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e3dlZWtEYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc20gY2FwaXRhbGl6ZVwiPnt3ZWVrRGF5LmZvcm1hdCgnZGRkJyl9PC9zcGFuPlxuXHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdCkpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQWxsRGF5Um93IH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IEhvdXJMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3VyLWxhYmVsL2hvdXItbGFiZWwnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkJ1xuaW1wb3J0IHsgZ2V0Vmlld0hvdXJzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzLCBpc1RvZGF5IH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5jb25zdCBDRUxMX0NMQVNTID1cblx0J3ctW2NhbGMoKDEwMCUtNHJlbSkvdmFyKC0tdmlzaWJsZS1kYXlzKSldIG1pbi13LVtjYWxjKCgxMDAlLTRyZW0pL3ZhcigtLXZpc2libGUtZGF5cykpXSBmbGV4LTEnXG5jb25zdCBMRUZUX0NPTF9XSURUSCA9ICd3LTEwIHNtOnctMTYgbWluLXctMTAgc206bWluLXctMTYgbWF4LXctMTAgc206bWF4LXctMTYnXG5cbmV4cG9ydCBjb25zdCBXZWVrVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHR0LFxuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdHNlbGVjdERhdGUsXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGhpZGRlbkRheXMsXG5cdFx0c2xvdER1cmF0aW9uLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspLFxuXHRcdFtjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCB2aXNpYmxlRGF5cyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdGhpZGRlbkRheXNcblx0XHRcdFx0PyB3ZWVrRGF5cy5maWx0ZXIoKGRheSkgPT4gIWhpZGRlbkRheXMuaGFzKGRheS5kYXkoKSkpXG5cdFx0XHRcdDogd2Vla0RheXMsXG5cdFx0W3dlZWtEYXlzLCBoaWRkZW5EYXlzXVxuXHQpXG5cblx0Y29uc3QgaG91cnMgPSB1c2VNZW1vKFxuXHRcdCgpID0+XG5cdFx0XHRnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdH0pLFxuXHRcdFtjdXJyZW50RGF0ZSwgYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMsIHdlZWtEYXlzXVxuXHQpXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB7XG5cdFx0aWQ6IGtleXMuY29sLnRpbWUsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0Y2xhc3NOYW1lOiBgc2hyaW5rLTAgJHtMRUZUX0NPTF9XSURUSH0gc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBgLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IERheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdDxIb3VyTGFiZWwgZGF0ZT17ZGF0ZX0gLz5cblx0XHRcdDwvZGl2PlxuXHRcdCksXG5cdH1cblxuXHQvLyBHZW5lcmF0ZSB3ZWVrIGRheXMg4oCUIGVhY2ggY29sdW1uIGdldHMgaXRzIG93biBob3VycyBvbiB0aGUgY29ycmVjdCBkYXRlXG5cdGNvbnN0IGNvbHVtbnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRyZXR1cm4gdmlzaWJsZURheXMubWFwKChkYXkpID0+ICh7XG5cdFx0XHRpZDoga2V5cy5jb2wuZGF5KGRheSksXG5cdFx0XHRkYXksXG5cdFx0XHRsYWJlbDogZGF5LmZvcm1hdCgnRCcpLFxuXHRcdFx0Y2xhc3NOYW1lOiBDRUxMX0NMQVNTLFxuXHRcdFx0ZGF5czogZ2V0Vmlld0hvdXJzKHtcblx0XHRcdFx0cmVmZXJlbmNlRGF0ZTogZGF5LFxuXHRcdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0YWxsRGF0ZXM6IHdlZWtEYXlzLFxuXHRcdFx0fSksXG5cdFx0XHR2YWx1ZTogZGF5LFxuXHRcdH0pKVxuXHR9LCBbd2Vla0RheXMsIGJ1c2luZXNzSG91cnMsIGhpZGVOb25CdXNpbmVzc0hvdXJzLCB2aXNpYmxlRGF5cy5tYXBdKVxuXG5cdGNvbnN0IGNzc1ZhcnMgPSB7XG5cdFx0Jy0tdmlzaWJsZS1kYXlzJzogdmlzaWJsZURheXMubGVuZ3RoLFxuXHR9IGFzIFJlYWN0LkNTU1Byb3BlcnRpZXNcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17XG5cdFx0XHRcdDxBbGxEYXlSb3dcblx0XHRcdFx0XHRjbGFzc2VzPXt7IGNlbGw6IENFTExfQ0xBU1MsIHNwYWNlcjogTEVGVF9DT0xfV0lEVEggfX1cblx0XHRcdFx0XHRkYXlzPXt2aXNpYmxlRGF5c31cblx0XHRcdFx0Lz5cblx0XHRcdH1cblx0XHRcdGNsYXNzZXM9e3sgaGVhZGVyOiAndy1mdWxsIGgtMTgnLCBib2R5OiAndy1mdWxsJyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0XHRzbG90RHVyYXRpb25NaW51dGVzPXtzbG90RHVyYXRpb259XG5cdFx0XHRzdHlsZT17Y3NzVmFyc31cblx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT17J2ZsZXggaC1mdWxsIGZsZXgtMSd9IGRhdGEtdGVzdGlkPVwid2Vlay12aWV3LWhlYWRlclwiPlxuXHRcdFx0XHR7LyogQ29ybmVyIGNlbGwgd2l0aCB3ZWVrIG51bWJlciAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTEwIHNtOnctMTYgaC1mdWxsIHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItciBwLTIgZmxleFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWluLXctMCB3LWZ1bGxcIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXhzIHRydW5jYXRlIHctZnVsbCB0ZXh0LWNlbnRlclwiPlxuXHRcdFx0XHRcdFx0XHR7dCgnd2VlaycpfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tZWRpdW0gdHJ1bmNhdGUgdy1mdWxsIHRleHQtY2VudGVyXCI+XG5cdFx0XHRcdFx0XHRcdHtjdXJyZW50RGF0ZS53ZWVrKCl9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBEYXkgaGVhZGVyIGNlbGxzICovfVxuXHRcdFx0XHR7dmlzaWJsZURheXMubWFwKChkYXksIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgdG9kYXkgPSBpc1RvZGF5KGRheSlcblx0XHRcdFx0XHRjb25zdCBrZXkgPSBrZXlzLmhlYWRlci53ZWVrLmRheShkYXkpXG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdCdob3ZlcjpiZy1hY2NlbnQgZmxleC0xIGZsZXggZmxleC1jb2wganVzdGlmeS1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgcC0xIHRleHQtY2VudGVyIHNtOnAtMiBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgdy0yMCBoLWZ1bGwnLFxuXHRcdFx0XHRcdFx0XHRcdHRvZGF5ICYmICdiZy1wcmltYXJ5LzEwIGZvbnQtYm9sZCdcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuaGVhZGVyLndlZWtkYXkoJ3dlZWsnLCBkYXkuZm9ybWF0KCdkZGRkJykpfVxuXHRcdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0XHRrZXk9e2tleX1cblx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHNlbGVjdERhdGUoZGF5KVxuXHRcdFx0XHRcdFx0XHRcdG9wZW5FdmVudEZvcm0oeyBzdGFydDogZGF5IH0pXG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2tleX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J214LWF1dG8gbXQtMSBmbGV4IGgtNSB3LTUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCB0ZXh0LXhzJyxcblx0XHRcdFx0XHRcdFx0XHRcdHRvZGF5ICYmICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnRCcpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXREYXlLZXksIGlzVG9kYXkgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmNvbnN0IERBWV9IRUFERVJfTkFNRVMgPSBbXG5cdHsgaWQ6ICdzdW4nLCBsYWJlbDogJ1MnIH0sXG5cdHsgaWQ6ICdtb24nLCBsYWJlbDogJ00nIH0sXG5cdHsgaWQ6ICd0dWUnLCBsYWJlbDogJ1QnIH0sXG5cdHsgaWQ6ICd3ZWQnLCBsYWJlbDogJ1cnIH0sXG5cdHsgaWQ6ICd0aHUnLCBsYWJlbDogJ1QnIH0sXG5cdHsgaWQ6ICdmcmknLCBsYWJlbDogJ0YnIH0sXG5cdHsgaWQ6ICdzYXQnLCBsYWJlbDogJ1MnIH0sXG5dXG5jb25zdCBFVkVOVF9ET1RfQ09MT1JTID0gWydiZy1wcmltYXJ5JywgJ2JnLWJsdWUtNTAwJywgJ2JnLWdyZWVuLTUwMCddXG5jb25zdCBEQVlTX0lOX01JTklfQ0FMRU5EQVIgPSA0MlxuXG5pbnRlcmZhY2UgTW9udGhEYXRhIHtcblx0ZGF0ZTogRGF5anNcblx0bmFtZTogc3RyaW5nXG5cdGV2ZW50Q291bnQ6IG51bWJlclxuXHRtb250aEtleTogc3RyaW5nXG59XG5cbmludGVyZmFjZSBEYXlEYXRhIHtcblx0ZGF0ZTogRGF5anNcblx0ZGF5S2V5OiBzdHJpbmdcblx0aXNJbkN1cnJlbnRNb250aDogYm9vbGVhblxuXHRpc1RvZGF5OiBib29sZWFuXG5cdGlzU2VsZWN0ZWQ6IGJvb2xlYW5cblx0ZXZlbnRDb3VudDogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBZZWFyVmlldyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgc2VsZWN0RGF0ZSwgZXZlbnRzLCBzZXRWaWV3LCBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIHQgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCBjdXJyZW50WWVhciA9IGN1cnJlbnREYXRlLnllYXIoKVxuXG5cdGNvbnN0IGdlbmVyYXRlTW9udGhzRGF0YSA9ICgpOiBNb250aERhdGFbXSA9PiB7XG5cdFx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDEyIH0sIChfLCBtb250aEluZGV4KSA9PiB7XG5cdFx0XHRjb25zdCBtb250aERhdGUgPSBkYXlqcygpXG5cdFx0XHRcdC55ZWFyKGN1cnJlbnRZZWFyKVxuXHRcdFx0XHQubW9udGgobW9udGhJbmRleClcblx0XHRcdFx0LnN0YXJ0T2YoJ21vbnRoJylcblx0XHRcdGNvbnN0IGV2ZW50c0luTW9udGggPSBldmVudHMuZmlsdGVyKFxuXHRcdFx0XHQoZXZlbnQpID0+XG5cdFx0XHRcdFx0ZXZlbnQuc3RhcnQueWVhcigpID09PSBjdXJyZW50WWVhciAmJlxuXHRcdFx0XHRcdGV2ZW50LnN0YXJ0Lm1vbnRoKCkgPT09IG1vbnRoSW5kZXhcblx0XHRcdClcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZGF0ZTogbW9udGhEYXRlLFxuXHRcdFx0XHRuYW1lOiBtb250aERhdGUuZm9ybWF0KCdNTU1NJyksXG5cdFx0XHRcdGV2ZW50Q291bnQ6IGV2ZW50c0luTW9udGgubGVuZ3RoLFxuXHRcdFx0XHRtb250aEtleTogbW9udGhEYXRlLmZvcm1hdCgnTU0nKSxcblx0XHRcdH1cblx0XHR9KVxuXHR9XG5cblx0Y29uc3QgZ2VuZXJhdGVEYXlzRm9yTW9udGggPSAobW9udGhEYXRlOiBEYXlqcyk6IERheURhdGFbXSA9PiB7XG5cdFx0Y29uc3QgZmlyc3REYXlPZkNhbGVuZGFyID0gbW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJykuc3RhcnRPZignd2VlaycpXG5cblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogREFZU19JTl9NSU5JX0NBTEVOREFSIH0sIChfLCBkYXlJbmRleCkgPT4ge1xuXHRcdFx0Y29uc3QgZGF5RGF0ZSA9IGZpcnN0RGF5T2ZDYWxlbmRhci5hZGQoZGF5SW5kZXgsICdkYXknKVxuXHRcdFx0Y29uc3QgZGF5U3RhcnQgPSBkYXlEYXRlLnN0YXJ0T2YoJ2RheScpXG5cdFx0XHRjb25zdCBkYXlFbmQgPSBkYXlEYXRlLmVuZE9mKCdkYXknKVxuXHRcdFx0Y29uc3QgZXZlbnRzT25EYXkgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoZGF5U3RhcnQsIGRheUVuZClcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZGF0ZTogZGF5RGF0ZSxcblx0XHRcdFx0ZGF5S2V5OiBnZXREYXlLZXkoZGF5RGF0ZSksXG5cdFx0XHRcdGlzSW5DdXJyZW50TW9udGg6IGRheURhdGUubW9udGgoKSA9PT0gbW9udGhEYXRlLm1vbnRoKCksXG5cdFx0XHRcdGlzVG9kYXk6IGlzVG9kYXkoZGF5RGF0ZSksXG5cdFx0XHRcdGlzU2VsZWN0ZWQ6IGRheURhdGUuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5JyksXG5cdFx0XHRcdGV2ZW50Q291bnQ6IGV2ZW50c09uRGF5Lmxlbmd0aCxcblx0XHRcdH1cblx0XHR9KVxuXHR9XG5cblx0Y29uc3QgbmF2aWdhdGVUb0RhdGUgPSAoXG5cdFx0ZGF0ZTogRGF5anMsXG5cdFx0dmlldzogJ21vbnRoJyB8ICdkYXknLFxuXHRcdGV2ZW50PzogUmVhY3QuTW91c2VFdmVudFxuXHQpID0+IHtcblx0XHRldmVudD8uc3RvcFByb3BhZ2F0aW9uKClcblx0XHRzZWxlY3REYXRlKGRhdGUpXG5cdFx0c2V0Vmlldyh2aWV3KVxuXHR9XG5cblx0Y29uc3QgZ2V0RXZlbnRDb3VudExhYmVsID0gKGNvdW50OiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuXHRcdGNvbnN0IGV2ZW50V29yZCA9IGNvdW50ID09PSAxID8gdCgnZXZlbnQnKSA6IHQoJ2V2ZW50cycpXG5cdFx0cmV0dXJuIGAke2NvdW50fSAke2V2ZW50V29yZH1gXG5cdH1cblxuXHRjb25zdCBnZXREYXlDbGFzc05hbWUgPSAoZGF5OiBEYXlEYXRhKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCBiYXNlQ2xhc3MgPVxuXHRcdFx0J3JlbGF0aXZlIGZsZXggYXNwZWN0LXNxdWFyZSB3LWZ1bGwgY3Vyc29yLXBvaW50ZXIgZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGhvdmVyOmJnLWFjY2VudCByb3VuZGVkLXNtIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTIwMCdcblx0XHRjb25zdCBvdXRzaWRlTW9udGhDbGFzcyA9IGRheS5pc0luQ3VycmVudE1vbnRoXG5cdFx0XHQ/ICcnXG5cdFx0XHQ6ICd0ZXh0LW11dGVkLWZvcmVncm91bmQgb3BhY2l0eS01MCdcblx0XHRjb25zdCB0b2RheUNsYXNzID0gZGF5LmlzVG9kYXlcblx0XHRcdD8gJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1mdWxsJ1xuXHRcdFx0OiAnJ1xuXHRcdGNvbnN0IHNlbGVjdGVkQ2xhc3MgPVxuXHRcdFx0ZGF5LmlzU2VsZWN0ZWQgJiYgIWRheS5pc1RvZGF5ID8gJ2JnLW11dGVkIHJvdW5kZWQtZnVsbCBmb250LWJvbGQnIDogJydcblx0XHRjb25zdCBoYXNFdmVudHNDbGFzcyA9XG5cdFx0XHRkYXkuZXZlbnRDb3VudCA+IDAgJiYgIWRheS5pc1RvZGF5ICYmICFkYXkuaXNTZWxlY3RlZCA/ICdmb250LW1lZGl1bScgOiAnJ1xuXG5cdFx0cmV0dXJuIGNuKFxuXHRcdFx0YmFzZUNsYXNzLFxuXHRcdFx0b3V0c2lkZU1vbnRoQ2xhc3MsXG5cdFx0XHR0b2RheUNsYXNzLFxuXHRcdFx0c2VsZWN0ZWRDbGFzcyxcblx0XHRcdGhhc0V2ZW50c0NsYXNzXG5cdFx0KVxuXHR9XG5cblx0Y29uc3QgZ2V0RXZlbnREb3RDbGFzc05hbWUgPSAoY29sb3I6IHN0cmluZywgaXNUb2RheTogYm9vbGVhbik6IHN0cmluZyA9PiB7XG5cdFx0Y29uc3QgZG90Q29sb3IgPSBpc1RvZGF5ID8gJ2JnLXByaW1hcnktZm9yZWdyb3VuZCcgOiBjb2xvclxuXHRcdHJldHVybiBjbignaC1bM3B4XSB3LVszcHhdIHJvdW5kZWQtZnVsbCcsIGRvdENvbG9yKVxuXHR9XG5cblx0Y29uc3QgbW9udGhzRGF0YSA9IGdlbmVyYXRlTW9udGhzRGF0YSgpXG5cblx0Y29uc3QgZ2V0RGF5VG9vbHRpcCA9IChldmVudENvdW50OiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuXHRcdGlmIChldmVudENvdW50ID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gJydcblx0XHR9XG5cdFx0cmV0dXJuIGdldEV2ZW50Q291bnRMYWJlbChldmVudENvdW50KVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8U2Nyb2xsQXJlYSBjbGFzc05hbWU9XCJoLWZ1bGxcIiBkYXRhLXRlc3RpZD1cInllYXItdmlld1wiPlxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9XCJncmlkIGF1dG8tcm93cy1mciBncmlkLWNvbHMtMSBnYXAtNCBwLTQgc206Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIlxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInllYXItZ3JpZFwiXG5cdFx0XHQ+XG5cdFx0XHRcdHttb250aHNEYXRhLm1hcCgobW9udGgsIG1vbnRoSW5kZXgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBkYXlzSW5Nb250aCA9IGdlbmVyYXRlRGF5c0Zvck1vbnRoKG1vbnRoLmRhdGUpXG5cdFx0XHRcdFx0Y29uc3QgYW5pbWF0aW9uRGVsYXkgPSBtb250aEluZGV4ICogMC4wNVxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaG92ZXI6Ym9yZGVyLXByaW1hcnkgZmxleCBmbGV4LWNvbCByb3VuZGVkLWxnIGJvcmRlciBwLTMgdGV4dC1sZWZ0IHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBob3ZlcjpzaGFkb3ctbWRcIlxuXHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5oZWFkZXIueWVhci5tb250aChtb250aC5tb250aEtleSl9XG5cdFx0XHRcdFx0XHRcdGtleT17bW9udGgubW9udGhLZXl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtYi0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiXG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2FuaW1hdGlvbkRlbGF5fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KCdtb250aCcsIG1vbnRoLm1vbnRoS2V5KX1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtrZXlzLmxpc3RLZXkoJ21vbnRoJywgbW9udGgubW9udGhLZXkpfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC1sZyBmb250LW1lZGl1bSBob3Zlcjp1bmRlcmxpbmUgY3Vyc29yLXBvaW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuaGVhZGVyLnllYXIubW9udGgobW9udGgubW9udGhLZXksICd0aXRsZScpfVxuXHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gbmF2aWdhdGVUb0RhdGUobW9udGguZGF0ZSwgJ21vbnRoJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHR7bW9udGgubmFtZX1cblx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cblxuXHRcdFx0XHRcdFx0XHRcdHttb250aC5ldmVudENvdW50ID4gMCAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtZnVsbCBweC0yIHB5LTEgdGV4dC14c1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmhlYWRlci55ZWFyLm1vbnRoKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1vbnRoLm1vbnRoS2V5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdjb3VudCdcblx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e2dldEV2ZW50Q291bnRMYWJlbChtb250aC5ldmVudENvdW50KX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblxuXHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtNyBnYXAtcHggdGV4dC1bMC42cmVtXVwiXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuaGVhZGVyLnllYXIubW9udGgobW9udGgubW9udGhLZXksICdtaW5pJyl9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7REFZX0hFQURFUl9OQU1FUy5tYXAoKGRheSkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgaC0zIHRleHQtY2VudGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoJ2hlYWRlcicsIG1vbnRoLm1vbnRoS2V5LCBkYXkuaWQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7ZGF5LmxhYmVsfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cblx0XHRcdFx0XHRcdFx0XHR7ZGF5c0luTW9udGgubWFwKChkYXkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGRheVRlc3RJZCA9IGtleXMuaGVhZGVyLnllYXIuZGF5KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtb250aC5kYXRlLmZvcm1hdCgnWVlZWS1NTScpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXkuZGF5S2V5XG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBoYXNFdmVudHMgPSBkYXkuZXZlbnRDb3VudCA+IDBcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHZpc2libGVEb3RDb3VudCA9IE1hdGgubWluKGRheS5ldmVudENvdW50LCAzKVxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgdmlzaWJsZURvdENvbG9ycyA9IEVWRU5UX0RPVF9DT0xPUlMuc2xpY2UoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGVEb3RDb3VudFxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXREYXlDbGFzc05hbWUoZGF5KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17ZGF5VGVzdElkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17ZGF5LmRheUtleX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoZSkgPT4gbmF2aWdhdGVUb0RhdGUoZGF5LmRhdGUsICdkYXknLCBlKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT17Z2V0RGF5VG9vbHRpcChkYXkuZXZlbnRDb3VudCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciBsZWFkaW5nLW5vbmVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtkYXkuZGF0ZS5kYXRlKCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e2hhc0V2ZW50cyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2Fic29sdXRlIGJvdHRvbS0wIGZsZXggdy1mdWxsIGp1c3RpZnktY2VudGVyIHNwYWNlLXgtcHgnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRheS5pc1RvZGF5ICYmICdib3R0b20tcHgnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt2aXNpYmxlRG90Q29sb3JzLm1hcCgoZG90Q29sb3IpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXRFdmVudERvdENsYXNzTmFtZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZG90Q29sb3IsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRheS5pc1RvZGF5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtkb3RDb2xvcn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdH0pfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIC8+XG5cdFx0PC9TY3JvbGxBcmVhPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEV2ZW50Rm9ybVByb3BzIH0gZnJvbSAnQC9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybSdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHtcblx0Q2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGUsXG5cdENlbGxDbGlja0luZm8sXG5cdERhdGVSYW5nZSxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcblx0U2xvdER1cmF0aW9uLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJFbmdpbmUgfSBmcm9tICdAL2hvb2tzL3VzZS1jYWxlbmRhci1lbmdpbmUnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBFVkVOVF9CQVJfSEVJR0hULCBHQVBfQkVUV0VFTl9FTEVNRU5UUyB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zLCBUcmFuc2xhdG9yRnVuY3Rpb24gfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldywgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5pbXBvcnQgeyBDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJQcm92aWRlclByb3BzIHtcblx0Y2hpbGRyZW46IFJlYWN0Tm9kZVxuXHRldmVudHM/OiBDYWxlbmRhckV2ZW50W11cblx0Zmlyc3REYXlPZldlZWs/OiBudW1iZXIgLy8gMCBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cblx0aW5pdGlhbFZpZXc/OiBDYWxlbmRhclZpZXdcblx0aW5pdGlhbERhdGU/OiBEYXlqc1xuXHRyZW5kZXJFdmVudD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gUmVhY3ROb2RlXG5cdG9uRXZlbnRDbGljaz86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkNlbGxDbGljaz86IChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB2b2lkXG5cdG9uVmlld0NoYW5nZT86ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcblx0b25FdmVudEFkZD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50VXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRXZlbnREZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25EYXRlQ2hhbmdlPzogKGRhdGU6IERheWpzLCByYW5nZTogRGF0ZVJhbmdlKSA9PiB2b2lkXG5cdGxvY2FsZT86IHN0cmluZ1xuXHR0aW1lem9uZT86IHN0cmluZ1xuXHRkaXNhYmxlQ2VsbENsaWNrPzogYm9vbGVhblxuXHRkaXNhYmxlRXZlbnRDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZURyYWdBbmREcm9wPzogYm9vbGVhblxuXHRkYXlNYXhFdmVudHM6IG51bWJlclxuXHRldmVudFNwYWNpbmc/OiBudW1iZXJcblx0ZXZlbnRIZWlnaHQ/OiBudW1iZXJcblx0c3RpY2t5Vmlld0hlYWRlcj86IGJvb2xlYW5cblx0dmlld0hlYWRlckNsYXNzTmFtZT86IHN0cmluZ1xuXHRoZWFkZXJDb21wb25lbnQ/OiBSZWFjdE5vZGUgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjb21wb25lbnRcblx0aGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY2xhc3Ncblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0cmVuZGVyRXZlbnRGb3JtPzogKHByb3BzOiBFdmVudEZvcm1Qcm9wcykgPT4gUmVhY3ROb2RlXG5cdC8vIFRyYW5zbGF0aW9uIG9wdGlvbnMgLSBwcm92aWRlIGVpdGhlciB0cmFuc2xhdGlvbnMgb2JqZWN0IE9SIHRyYW5zbGF0b3IgZnVuY3Rpb25cblx0dHJhbnNsYXRpb25zPzogVHJhbnNsYXRpb25zXG5cdHRyYW5zbGF0b3I/OiBUcmFuc2xhdG9yRnVuY3Rpb25cblx0dGltZUZvcm1hdD86IFRpbWVGb3JtYXRcblx0Y2xhc3Nlc092ZXJyaWRlPzogQ2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGVcblx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3I/OiAoXG5cdFx0cHJvcHM6IFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHNcblx0KSA9PiBSZWFjdE5vZGVcblx0cmVuZGVySG91cj86IChkYXRlOiBEYXlqcykgPT4gUmVhY3ROb2RlXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzPzogYm9vbGVhblxuXHRoaWRkZW5EYXlzPzogU2V0PG51bWJlcj5cblx0c2xvdER1cmF0aW9uPzogU2xvdER1cmF0aW9uXG5cdHNjcm9sbFRpbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IENhbGVuZGFyUHJvdmlkZXI6IFJlYWN0LkZDPENhbGVuZGFyUHJvdmlkZXJQcm9wcz4gPSAoe1xuXHRjaGlsZHJlbixcblx0ZXZlbnRzID0gW10sXG5cdGZpcnN0RGF5T2ZXZWVrID0gMCxcblx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRpbml0aWFsRGF0ZSxcblx0cmVuZGVyRXZlbnQsXG5cdG9uRXZlbnRDbGljayxcblx0b25DZWxsQ2xpY2ssXG5cdG9uVmlld0NoYW5nZSxcblx0b25FdmVudEFkZCxcblx0b25FdmVudFVwZGF0ZSxcblx0b25FdmVudERlbGV0ZSxcblx0b25EYXRlQ2hhbmdlLFxuXHRsb2NhbGUsXG5cdHRpbWV6b25lLFxuXHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRkaXNhYmxlRXZlbnRDbGljayxcblx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRkYXlNYXhFdmVudHMsXG5cdGV2ZW50U3BhY2luZyA9IEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRldmVudEhlaWdodCA9IEVWRU5UX0JBUl9IRUlHSFQsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdGhlYWRlckNvbXBvbmVudCxcblx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRidXNpbmVzc0hvdXJzLFxuXHRyZW5kZXJFdmVudEZvcm0sXG5cdHRyYW5zbGF0aW9ucyxcblx0dHJhbnNsYXRvcixcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0cmVuZGVySG91cixcblx0aGlkZU5vbkJ1c2luZXNzSG91cnMgPSBmYWxzZSxcblx0aGlkZGVuRGF5cyxcblx0c2xvdER1cmF0aW9uID0gNjAsXG5cdHNjcm9sbFRpbWUsXG59KSA9PiB7XG5cdC8vIFVzZSB0aGUgY2FsZW5kYXIgZW5naW5lXG5cdGNvbnN0IGNhbGVuZGFyRW5naW5lID0gdXNlQ2FsZW5kYXJFbmdpbmUoe1xuXHRcdGV2ZW50cyxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRpbml0aWFsVmlldyxcblx0XHRpbml0aWFsRGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdG9uRXZlbnRBZGQsXG5cdFx0b25FdmVudFVwZGF0ZSxcblx0XHRvbkV2ZW50RGVsZXRlLFxuXHRcdG9uRGF0ZUNoYW5nZSxcblx0XHRvblZpZXdDaGFuZ2UsXG5cdFx0bG9jYWxlLFxuXHRcdHRpbWV6b25lLFxuXHRcdHRyYW5zbGF0aW9ucyxcblx0XHR0cmFuc2xhdG9yLFxuXHR9KVxuXG5cdGNvbnN0IGVkaXRFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0U2VsZWN0ZWRFdmVudChldmVudClcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Ly8gQ3VzdG9tIGhhbmRsZXJzIHRoYXQgY2FsbCBleHRlcm5hbCBjYWxsYmFja3Ncblx0Y29uc3QgaGFuZGxlRXZlbnRDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0aWYgKGRpc2FibGVFdmVudENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdFx0aWYgKG9uRXZlbnRDbGljaykge1xuXHRcdFx0XHRvbkV2ZW50Q2xpY2soZXZlbnQpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlZGl0RXZlbnQoZXZlbnQpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbZGlzYWJsZUV2ZW50Q2xpY2ssIG9uRXZlbnRDbGljaywgZWRpdEV2ZW50XVxuXHQpXG5cblx0Y29uc3QgaGFuZGxlRGF0ZUNsaWNrID0gdXNlQ2FsbGJhY2soXG5cdFx0KGluZm86IENlbGxDbGlja0luZm8pID0+IHtcblx0XHRcdGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAob25DZWxsQ2xpY2spIHtcblx0XHRcdFx0b25DZWxsQ2xpY2soaW5mbylcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNhbGVuZGFyRW5naW5lLm9wZW5FdmVudEZvcm0oaW5mbylcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtvbkNlbGxDbGljaywgZGlzYWJsZUNlbGxDbGljaywgY2FsZW5kYXJFbmdpbmVdXG5cdClcblxuXHQvLyBDcmVhdGUgdGhlIGNvbnRleHQgdmFsdWVcblx0Y29uc3QgY29udGV4dFZhbHVlID0gdXNlTWVtbyhcblx0XHQoKSA9PiAoe1xuXHRcdFx0Li4uY2FsZW5kYXJFbmdpbmUsXG5cdFx0XHRyZW5kZXJFdmVudCxcblx0XHRcdG9uRXZlbnRDbGljazogaGFuZGxlRXZlbnRDbGljayxcblx0XHRcdG9uQ2VsbENsaWNrOiBoYW5kbGVEYXRlQ2xpY2ssXG5cdFx0XHRsb2NhbGUsXG5cdFx0XHR0aW1lem9uZSxcblx0XHRcdGRpc2FibGVDZWxsQ2xpY2ssXG5cdFx0XHRkaXNhYmxlRXZlbnRDbGljayxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdGV2ZW50SGVpZ2h0LFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRcdFx0cmVuZGVySG91cixcblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0aGlkZGVuRGF5cyxcblx0XHRcdHNsb3REdXJhdGlvbixcblx0XHRcdHNjcm9sbFRpbWUsXG5cdFx0fSksXG5cdFx0W1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUsXG5cdFx0XHRyZW5kZXJFdmVudCxcblx0XHRcdGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRoYW5kbGVEYXRlQ2xpY2ssXG5cdFx0XHRsb2NhbGUsXG5cdFx0XHR0aW1lem9uZSxcblx0XHRcdGRpc2FibGVDZWxsQ2xpY2ssXG5cdFx0XHRkaXNhYmxlRXZlbnRDbGljayxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdGV2ZW50SGVpZ2h0LFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRcdFx0cmVuZGVySG91cixcblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0aGlkZGVuRGF5cyxcblx0XHRcdHNsb3REdXJhdGlvbixcblx0XHRcdHNjcm9sbFRpbWUsXG5cdFx0XVxuXHQpXG5cblx0cmV0dXJuIChcblx0XHQ8Q2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvQ2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IENhbGVuZGFyRG5kQ29udGV4dCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnLWFuZC1kcm9wL2NhbGVuZGFyLWRuZC1jb250ZXh0J1xuaW1wb3J0IHsgRXZlbnRGb3JtRGlhbG9nIH0gZnJvbSAnQC9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS1kaWFsb2cnXG5pbXBvcnQgeyBIZWFkZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvaGVhZGVyJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgRGF5VmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9kYXktdmlldydcbmltcG9ydCB7IE1vbnRoVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L21vbnRoLXZpZXcnXG5pbXBvcnQgeyBXZWVrVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvd2Vlay12aWV3J1xuaW1wb3J0IHsgWWVhclZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMveWVhci12aWV3L3llYXItdmlldydcbmltcG9ydCB7IENhbGVuZGFyUHJvdmlkZXIgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvcHJvdmlkZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG4vLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZHVwbGljYXRlc1xuaW1wb3J0ICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHsgV2Vla0RheXMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7XG5cdElsYW15Q2FsZW5kYXJQcm9wRXZlbnQsXG5cdElsYW15Q2FsZW5kYXJQcm9wcyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB7XG5cdERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdEVWRU5UX0JBUl9IRUlHSFQsXG5cdEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRXRUVLX0RBWVNfTlVNQkVSX01BUCxcbn0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgbm9ybWFsaXplRXZlbnRzLCBzYWZlRGF0ZSwgdG9IaWRkZW5EYXlzU2V0IH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IENhbGVuZGFyQ29udGVudDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgdmlldywgZGF5TWF4RXZlbnRzIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgdmlld01hcCA9IHtcblx0XHRtb250aDogPE1vbnRoVmlldyBkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c30ga2V5PVwibW9udGhcIiAvPixcblx0XHR3ZWVrOiA8V2Vla1ZpZXcga2V5PVwid2Vla1wiIC8+LFxuXHRcdGRheTogPERheVZpZXcga2V5PVwiZGF5XCIgLz4sXG5cdFx0eWVhcjogPFllYXJWaWV3IGtleT1cInllYXJcIiAvPixcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIHctZnVsbCBoLWZ1bGxcIiBkYXRhLXRlc3RpZD1cImlsYW15LWNhbGVuZGFyXCI+XG5cdFx0XHQ8SGVhZGVyIGNsYXNzTmFtZT1cInAtMVwiIC8+XG5cdFx0XHR7LyogQ2FsZW5kYXIgQm9keSB3aXRoIEFuaW1hdGVQcmVzZW5jZSBmb3IgdmlldyB0cmFuc2l0aW9ucyAqL31cblx0XHRcdDxDYWxlbmRhckRuZENvbnRleHQ+XG5cdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bY2FsYygxMDAlLTMuNXJlbSldXCJcblx0XHRcdFx0XHRkaXJlY3Rpb249XCJob3Jpem9udGFsXCJcblx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXt2aWV3fVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJib3JkZXIgaC1mdWxsIHctZnVsbFwiIGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItYm9keVwiPlxuXHRcdFx0XHRcdFx0e3ZpZXdNYXBbdmlld119XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0PC9DYWxlbmRhckRuZENvbnRleHQ+XG5cdFx0XHQ8RXZlbnRGb3JtRGlhbG9nIC8+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IElsYW15Q2FsZW5kYXI6IFJlYWN0LkZDPElsYW15Q2FsZW5kYXJQcm9wcz4gPSAoe1xuXHRldmVudHMsXG5cdGZpcnN0RGF5T2ZXZWVrID0gJ3N1bmRheScsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdGRheU1heEV2ZW50cyA9IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdGV2ZW50U3BhY2luZyA9IEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRldmVudEhlaWdodCA9IEVWRU5UX0JBUl9IRUlHSFQsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzID0gZmFsc2UsXG5cdGhpZGRlbkRheXMsXG5cdC4uLnByb3BzXG59KSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PENhbGVuZGFyUHJvdmlkZXJcblx0XHRcdGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfVxuXHRcdFx0ZXZlbnRIZWlnaHQ9e2V2ZW50SGVpZ2h0fVxuXHRcdFx0ZXZlbnRTcGFjaW5nPXtldmVudFNwYWNpbmd9XG5cdFx0XHRldmVudHM9e25vcm1hbGl6ZUV2ZW50czxJbGFteUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50PihldmVudHMpfVxuXHRcdFx0Zmlyc3REYXlPZldlZWs9e1dFRUtfREFZU19OVU1CRVJfTUFQW2ZpcnN0RGF5T2ZXZWVrXX1cblx0XHRcdGhpZGRlbkRheXM9e3RvSGlkZGVuRGF5c1NldChoaWRkZW5EYXlzKX1cblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzPXtoaWRlTm9uQnVzaW5lc3NIb3Vyc31cblx0XHRcdGluaXRpYWxEYXRlPXtzYWZlRGF0ZShpbml0aWFsRGF0ZSl9XG5cdFx0XHRpbml0aWFsVmlldz17aW5pdGlhbFZpZXd9XG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyPXtzdGlja3lWaWV3SGVhZGVyfVxuXHRcdFx0dGltZUZvcm1hdD17dGltZUZvcm1hdH1cblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWU9e3ZpZXdIZWFkZXJDbGFzc05hbWV9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENhbGVuZGFyQ29udGVudCAvPlxuXHRcdDwvQ2FsZW5kYXJQcm92aWRlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuaW50ZXJmYWNlIFJlc291cmNlRXZlbnRHcmlkUHJvcHMge1xuXHQvKipcblx0ICogQXJyYXkgb2YgZGF5cyB0byBkaXNwbGF5IGluIHRoZSBncmlkXG5cdCAqL1xuXHRkYXlzOiBEYXlqc1tdIHwgRGF5anNbXVtdXG5cdC8qKiBUaGUgdHlwZSBvZiBncmlkIHRvIGRpc3BsYXkgLSAnZGF5JyBmb3IgZGF5IHZpZXcsICdob3VyJyBmb3Igd2VlayB2aWV3XG5cdCAqIChhZmZlY3RzIGV2ZW50IHBvc2l0aW9uaW5nIGxvZ2ljKVxuXHQgKi9cblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHQvKipcblx0ICogQ2hpbGRyZW4gd2lsbCBiZSByZW5kZXJlZCBhcyBoZWFkZXJzIGFib3ZlIHRoZSBncmlkXG5cdCAqIChlLmcuLCBmb3IgZGF5IG5hbWVzIGluIG1vbnRoIHZpZXcpXG5cdCAqL1xuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc2VzPzogeyBoZWFkZXI/OiBzdHJpbmc7IGJvZHk/OiBzdHJpbmc7IHNjcm9sbD86IHN0cmluZzsgY2VsbD86IHN0cmluZyB9XG59XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUV2ZW50R3JpZDogUmVhY3QuRkM8UmVzb3VyY2VFdmVudEdyaWRQcm9wcz4gPSAoe1xuXHRkYXlzLFxuXHRncmlkVHlwZSA9ICdkYXknLFxuXHRjaGlsZHJlbixcblx0Y2xhc3Nlcyxcbn0pID0+IHtcblx0Y29uc3QgeyBnZXRWaXNpYmxlUmVzb3VyY2VzIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgdmlzaWJsZVJlc291cmNlcyA9IGdldFZpc2libGVSZXNvdXJjZXMoKVxuXG5cdGNvbnN0IGNvbHVtbnMgPSBkYXlzLm1hcCgoZGF5KSA9PiB7XG5cdFx0Y29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkoZGF5KVxuXHRcdGNvbnN0IHJlZkRheSA9IGlzQXJyYXkgPyBkYXlbMF0gOiBkYXlcblx0XHRyZXR1cm4ge1xuXHRcdFx0aWQ6IHJlZkRheSA/IGtleXMuY29sLmRheShyZWZEYXkpIDogJ2RheS1jb2wtdW5rbm93bicsXG5cdFx0XHRkYXk6IGlzQXJyYXkgPyB1bmRlZmluZWQgOiBkYXksXG5cdFx0XHRkYXlzOiBpc0FycmF5ID8gZGF5IDogdW5kZWZpbmVkLFxuXHRcdFx0Y2xhc3NOYW1lOiBjbGFzc2VzPy5jZWxsLFxuXHRcdFx0Z3JpZFR5cGUsXG5cdFx0fVxuXHR9KVxuXG5cdGNvbnN0IHJvd3MgPSB2aXNpYmxlUmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+ICh7XG5cdFx0aWQ6IHJlc291cmNlLmlkLFxuXHRcdHRpdGxlOiByZXNvdXJjZS50aXRsZSxcblx0XHRyZXNvdXJjZTogcmVzb3VyY2UsXG5cdFx0Y29sdW1ucyxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8SG9yaXpvbnRhbEdyaWRcblx0XHRcdGNsYXNzZXM9e2NsYXNzZXN9XG5cdFx0XHRkYXlOdW1iZXJIZWlnaHQ9ezB9XG5cdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRyb3dzPXtyb3dzfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L0hvcml6b250YWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IEhvdXJMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3VyLWxhYmVsL2hvdXItbGFiZWwnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5pbnRlcmZhY2UgVGltZUhlYWRlclJvd1Byb3BzIHtcblx0aG91cnM6IERheWpzW11cblx0dmlldzogJ3dlZWsnIHwgJ2RheSdcblx0Ly8gUGVyLWl0ZW0gYW5pbWF0aW9uIGRlbGF5LiBDYWxsZXJzIHBhc3MgZGlmZmVyZW50IHN0ZXAgdmFsdWVzIGRlcGVuZGluZyBvblxuXHQvLyB0aGUgbGlzdCBsZW5ndGggKGUuZy4gMC4wMDUgZm9yIGEgd2VlayBvZiBob3VycywgMC4wNSBmb3IgYSBzaW5nbGUgZGF5KS5cblx0ZGVsYXlTdGVwOiBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IFRpbWVIZWFkZXJSb3c6IFJlYWN0LkZDPFRpbWVIZWFkZXJSb3dQcm9wcz4gPSAoe1xuXHRob3Vycyxcblx0dmlldyxcblx0ZGVsYXlTdGVwLFxufSkgPT4gKFxuXHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMiBib3JkZXItYlwiPlxuXHRcdHtob3Vycy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdGNvbnN0IGlzTm93SG91ciA9IGNvbC5pc1NhbWUoZGF5anMoKSwgJ2hvdXInKVxuXHRcdFx0Y29uc3QgaG91clN0ciA9IGNvbC5mb3JtYXQoJ0hIJylcblx0XHRcdGNvbnN0IGtleSA9IGtleXMuaGVhZGVyLndlZWsuaG91cihjb2wsIGluZGV4KVxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnbWluLXctMjAgZmxleC0xIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXhzIHNocmluay0wJyxcblx0XHRcdFx0XHRcdGlzTm93SG91ciAmJiAnYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwIGZvbnQtbWVkaXVtJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0ZGF0YS1ob3VyPXtob3VyU3RyfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmhlYWRlci5yZXNvdXJjZS50aW1lTGFiZWwodmlldywgaG91clN0cil9XG5cdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogZGVsYXlTdGVwfVxuXHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KGtleSwgJ2FuaW1hdGVkJyl9XG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17a2V5cy5saXN0S2V5KGtleSwgJ21vdGlvbicpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PEhvdXJMYWJlbCBkYXRlPXtjb2x9IC8+XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0KVxuXHRcdH0pfVxuXHQ8L2Rpdj5cbilcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgVGltZUhlYWRlclJvdyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy90aW1lLWhlYWRlci1yb3cnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZURheUhvcml6b250YWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0dCxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IHJlc291cmNlcyA9IGdldFZpc2libGVSZXNvdXJjZXMoKVxuXHRjb25zdCBkYXlIb3VycyA9IGdldFZpZXdIb3Vycyh7XG5cdFx0cmVmZXJlbmNlRGF0ZTogY3VycmVudERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRhbGxEYXRlczogW2N1cnJlbnREYXRlXSxcblx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnM6IHJlc291cmNlc1xuXHRcdFx0Lm1hcCgocikgPT4gci5idXNpbmVzc0hvdXJzKVxuXHRcdFx0LmZpbHRlcihCb29sZWFuKSBhcyAoQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSlbXSxcblx0fSlcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUV2ZW50R3JpZFxuXHRcdFx0Y2xhc3Nlcz17e1xuXHRcdFx0XHRoZWFkZXI6ICdtaW4tdy1mdWxsJyxcblx0XHRcdFx0Ym9keTogJ21pbi13LWZ1bGwnLFxuXHRcdFx0XHRjZWxsOiAnbWluLXctMjAgZmxleC0xJyxcblx0XHRcdH19XG5cdFx0XHRkYXlzPXtkYXlIb3Vyc31cblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRydW5jYXRlIHB4LTEgbWluLXctMFwiPnt0KCdyZXNvdXJjZXMnKX08L2Rpdj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBmbGV4IGZsZXgtY29sXCI+XG5cdFx0XHRcdDxUaW1lSGVhZGVyUm93IGRlbGF5U3RlcD17MC4wNX0gaG91cnM9e2RheUhvdXJzfSB2aWV3PVwiZGF5XCIgLz5cblx0XHRcdDwvZGl2PlxuXHRcdDwvUmVzb3VyY2VFdmVudEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQWxsRGF5Q2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LWNlbGwnXG5pbXBvcnQgeyBBbGxEYXlSb3cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBIb3VyTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvaG91ci1sYWJlbC9ob3VyLWxhYmVsJ1xuaW1wb3J0IHsgUmVzb3VyY2VDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL3Jlc291cmNlLWNlbGwnXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkJ1xuaW1wb3J0IHsgZ2V0Vmlld0hvdXJzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZURheVZlcnRpY2FsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRzbG90RHVyYXRpb24sXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgcmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cdGNvbnN0IGhvdXJzID0gZ2V0Vmlld0hvdXJzKHtcblx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGFsbERhdGVzOiBbY3VycmVudERhdGVdLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3VyczogcmVzb3VyY2VzXG5cdFx0XHQubWFwKChyKSA9PiByLmJ1c2luZXNzSG91cnMpXG5cdFx0XHQuZmlsdGVyKEJvb2xlYW4pIGFzIChCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdKVtdLFxuXHR9KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiBrZXlzLmNvbC50aW1lLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBEYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHQ8SG91ckxhYmVsIGRhdGU9e2RhdGV9IC8+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdGlkOiBrZXlzLmNvbC5kYXkoY3VycmVudERhdGUsIHJlc291cmNlLmlkKSxcblx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRyZXNvdXJjZSxcblx0XHRkYXlzOiBob3Vycyxcblx0XHRkYXk6IGN1cnJlbnREYXRlLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0YWxsRGF5Um93PXtcblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbFwiPlxuXHRcdFx0XHRcdDxBbGxEYXlDZWxsIC8+XG5cdFx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0XHQ8QWxsRGF5Um93XG5cdFx0XHRcdFx0XHRcdGNsYXNzZXM9e3sgY2VsbDogJ21pbi13LTIwJyB9fVxuXHRcdFx0XHRcdFx0XHRkYXlzPXtbY3VycmVudERhdGVdfVxuXHRcdFx0XHRcdFx0XHRrZXk9e2tleXMuYWxsRGF5Um93KHJlc291cmNlLmlkKX1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRzaG93U3BhY2VyPXtmYWxzZX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0fVxuXHRcdFx0Y2xhc3Nlcz17eyBib2R5OiAndy1mdWxsJywgaGVhZGVyOiAndy1mdWxsJyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtZGF5XCJcblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0XHRzbG90RHVyYXRpb25NaW51dGVzPXtzbG90RHVyYXRpb259XG5cdFx0PlxuXHRcdFx0ey8qIEhlYWRlciAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXsnZmxleCBib3JkZXItYiBoLTEyIGZsZXgtMSd9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtbW9udGgtaGVhZGVyXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCBib3JkZXItciB3LTE2IHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCIgLz5cblx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0PFJlc291cmNlQ2VsbFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWluLXctMjAgZmxleC0xXCJcblx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KCdyZXNvdXJjZS1jZWxsJywgcmVzb3VyY2UuaWQpfVxuXHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCkpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZURheUhvcml6b250YWwgfSBmcm9tICcuL3Jlc291cmNlLWRheS1ob3Jpem9udGFsJ1xuaW1wb3J0IHsgUmVzb3VyY2VEYXlWZXJ0aWNhbCB9IGZyb20gJy4vcmVzb3VyY2UtZGF5LXZlcnRpY2FsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBvcmllbnRhdGlvbiB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGlmIChvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuXHRcdHJldHVybiA8UmVzb3VyY2VEYXlWZXJ0aWNhbCAvPlxuXHR9XG5cblx0cmV0dXJuIDxSZXNvdXJjZURheUhvcml6b250YWwgLz5cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgUmVzb3VyY2VFdmVudEdyaWQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvcmVzb3VyY2UtZXZlbnQtZ3JpZCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGdldE1vbnRoRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlTW9udGhIb3Jpem9udGFsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdC8vIEdlbmVyYXRlIGNhbGVuZGFyIGdyaWQgLSBkYXlzIG9mIHRoZSBtb250aFxuXHRjb25zdCBtb250aERheXMgPSB1c2VNZW1vPERheWpzW10+KCgpID0+IHtcblx0XHRyZXR1cm4gZ2V0TW9udGhEYXlzKGN1cnJlbnREYXRlKVxuXHR9LCBbY3VycmVudERhdGVdKVxuXG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlRXZlbnRHcmlkIGRheXM9e21vbnRoRGF5c30+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctMjAgc206dy00MCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdHJ1bmNhdGUgcHgtMSBtaW4tdy0wXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdHttb250aERheXMubWFwKChkYXksIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGtleSA9IGByZXNvdXJjZS1tb250aC1oZWFkZXItJHtkYXkudG9JU09TdHJpbmcoKX1gXG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LTIwIGJvcmRlci1iIGJvcmRlci1yIHNocmluay0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGZsZXgtY29sXCJcblx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShrZXksICdhbmltYXRlZCcpfVxuXHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17a2V5cy5saXN0S2V5KGtleSwgJ21vdGlvbicpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LW1lZGl1bVwiPntkYXkuZm9ybWF0KCdEJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdkZGQnKX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L1Jlc291cmNlRXZlbnRHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUmVzb3VyY2VDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL3Jlc291cmNlLWNlbGwnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZU1vbnRoVmVydGljYWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBnZXRWaXNpYmxlUmVzb3VyY2VzIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgcmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cdGNvbnN0IHN0YXJ0T2ZNb250aCA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcblx0Y29uc3QgZGF5c0luTW9udGggPSBBcnJheS5mcm9tKFxuXHRcdHsgbGVuZ3RoOiBjdXJyZW50RGF0ZS5kYXlzSW5Nb250aCgpIH0sXG5cdFx0KF8sIGkpID0+IHN0YXJ0T2ZNb250aC5hZGQoaSwgJ2RheScpXG5cdClcblxuXHRjb25zdCBmaXJzdENvbCA9IHtcblx0XHRpZDoga2V5cy5jb2wuZGF0ZSxcblx0XHRkYXlzOiBkYXlzSW5Nb250aCxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRjbGFzc05hbWU6XG5cdFx0XHQnc2hyaW5rLTAgdy0xNiBtaW4tdy0xNiBtYXgtdy0xNiBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCcsXG5cdFx0Z3JpZFR5cGU6ICdkYXknIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBEYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHQ8c3Bhbj57ZGF0ZS5mb3JtYXQoJ0QnKX08L3NwYW4+XG5cdFx0XHRcdDxzcGFuPntkYXRlLmZvcm1hdCgnZGRkJyl9PC9zcGFuPlxuXHRcdFx0PC9kaXY+XG5cdFx0KSxcblx0fVxuXG5cdGNvbnN0IGNvbHVtbnMgPSByZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKHtcblx0XHRpZDoga2V5cy5jb2wucmVzb3VyY2UoJ21vbnRoJywgcmVzb3VyY2UuaWQpLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdHJlc291cmNlSWQ6IHJlc291cmNlLmlkLFxuXHRcdGRheXM6IGRheXNJbk1vbnRoLFxuXHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8VmVydGljYWxHcmlkXG5cdFx0XHRjbGFzc2VzPXt7IGhlYWRlcjogJ3ctZnVsbCcsIGJvZHk6ICd3LWZ1bGwnIH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIC4uLmNvbHVtbnNdfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS1tb250aC12ZXJ0aWNhbC1ncmlkXCJcblx0XHQ+XG5cdFx0XHR7LyogSGVhZGVyICovfVxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9eydmbGV4IGJvcmRlci1iIGgtMTIgZmxleC0xJ31cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS1tb250aC1oZWFkZXJcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNocmluay0wIGJvcmRlci1yIHctMTYgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIiAvPlxuXHRcdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+IChcblx0XHRcdFx0XHQ8UmVzb3VyY2VDZWxsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtaW4tdy0yMCBmbGV4LTFcIlxuXHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoJ3Jlc291cmNlLWNlbGwnLCByZXNvdXJjZS5pZCl9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlTW9udGhIb3Jpem9udGFsIH0gZnJvbSAnLi9yZXNvdXJjZS1tb250aC1ob3Jpem9udGFsJ1xuaW1wb3J0IHsgUmVzb3VyY2VNb250aFZlcnRpY2FsIH0gZnJvbSAnLi9yZXNvdXJjZS1tb250aC12ZXJ0aWNhbCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlTW9udGhWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBvcmllbnRhdGlvbiB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGlmIChvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuXHRcdHJldHVybiA8UmVzb3VyY2VNb250aFZlcnRpY2FsIC8+XG5cdH1cblxuXHRyZXR1cm4gPFJlc291cmNlTW9udGhIb3Jpem9udGFsIC8+XG59XG4iLAogICAgImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlc291cmNlV2Vla1ZpZXdEYXRhKCkge1xuXHRjb25zdCB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblx0XHR3ZWVrVmlld0dyYW51bGFyaXR5LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZGVuRGF5cyxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCBpc0hvdXJseSA9IHdlZWtWaWV3R3JhbnVsYXJpdHkgPT09ICdob3VybHknXG5cdGNvbnN0IHJlc291cmNlcyA9IGdldFZpc2libGVSZXNvdXJjZXMoKVxuXG5cdGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspLFxuXHRcdFtjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCB2aXNpYmxlRGF5cyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdGhpZGRlbkRheXNcblx0XHRcdFx0PyB3ZWVrRGF5cy5maWx0ZXIoKGRheSkgPT4gIWhpZGRlbkRheXMuaGFzKGRheS5kYXkoKSkpXG5cdFx0XHRcdDogd2Vla0RheXMsXG5cdFx0W3dlZWtEYXlzLCBoaWRkZW5EYXlzXVxuXHQpXG5cblx0Y29uc3QgcmVzb3VyY2VCdXNpbmVzc0hvdXJzID0gdXNlTWVtbyhcblx0XHQoKSA9PiByZXNvdXJjZXMuZmxhdE1hcCgocikgPT4gKHIuYnVzaW5lc3NIb3VycyA/IFtyLmJ1c2luZXNzSG91cnNdIDogW10pKSxcblx0XHRbcmVzb3VyY2VzXVxuXHQpXG5cblx0cmV0dXJuIHtcblx0XHRpc0hvdXJseSxcblx0XHRyZXNvdXJjZXMsXG5cdFx0d2Vla0RheXMsXG5cdFx0dmlzaWJsZURheXMsXG5cdFx0Y3VycmVudERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnMsXG5cdH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGlzVG9kYXkgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmludGVyZmFjZSBSZXNvdXJjZVdlZWtIb3Jpem9udGFsRGF5SGVhZGVyUHJvcHMge1xuXHRkYXlzOiBEYXlqc1tdXG59XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVdlZWtIb3Jpem9udGFsRGF5SGVhZGVyOiBSZWFjdC5GQzxcblx0UmVzb3VyY2VXZWVrSG9yaXpvbnRhbERheUhlYWRlclByb3BzXG4+ID0gKHsgZGF5cyB9KSA9PiB7XG5cdGNvbnN0IHsgd2Vla1ZpZXdHcmFudWxhcml0eSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCBpc0hvdXJseSA9IHdlZWtWaWV3R3JhbnVsYXJpdHkgPT09ICdob3VybHknXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMlwiPlxuXHRcdFx0e2RheXMubWFwKChkYXksIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHRvZGF5ID0gaXNUb2RheShkYXkpXG5cdFx0XHRcdGNvbnN0IGtleSA9IGtleXMuaGVhZGVyLndlZWsuZGF5KGRheSlcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdCdzaHJpbmstMCBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgYm9yZGVyLWIgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIHRleHQtY2VudGVyIGZvbnQtbWVkaXVtIG1pbi13LTIwJyxcblx0XHRcdFx0XHRcdFx0dG9kYXkgJiYgJ2JnLWJsdWUtNTAgdGV4dC1ibHVlLTYwMCdcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5oZWFkZXIucmVzb3VyY2Uud2Vla0RheX1cblx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShrZXksICdhbmltYXRlZCcpfVxuXHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17a2V5cy5saXN0S2V5KGtleSwgJ21vdGlvbicpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRpc0hvdXJseSA/ICdzdGlja3kgbGVmdC0xLzInIDogJ3ctZnVsbCB0ZXh0LWNlbnRlcidcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0e2RheS5mb3JtYXQoJ00vRCcpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSB9IGZyb20gJy4uL3VzZS1yZXNvdXJjZS13ZWVrLXZpZXctZGF0YSdcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlc291cmNlV2Vla0hvcml6b250YWxEYXRhKCkge1xuXHRjb25zdCB7XG5cdFx0aXNIb3VybHksXG5cdFx0d2Vla0RheXMsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnMsXG5cdH0gPSB1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSgpXG5cblx0Y29uc3Qgd2Vla0hvdXJzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKCFpc0hvdXJseSkgcmV0dXJuIFtdXG5cdFx0cmV0dXJuIHdlZWtEYXlzLm1hcCgoZGF5KSA9PlxuXHRcdFx0Z2V0Vmlld0hvdXJzKHtcblx0XHRcdFx0cmVmZXJlbmNlRGF0ZTogZGF5LFxuXHRcdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHRcdFx0fSlcblx0XHQpXG5cdH0sIFtcblx0XHRpc0hvdXJseSxcblx0XHR3ZWVrRGF5cyxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3Vycyxcblx0XSlcblxuXHRyZXR1cm4geyB3ZWVrSG91cnMgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJlc291cmNlRXZlbnRHcmlkIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQnXG5pbXBvcnQgeyBUaW1lSGVhZGVyUm93IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3RpbWUtaGVhZGVyLXJvdydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSB9IGZyb20gJy4uL3VzZS1yZXNvdXJjZS13ZWVrLXZpZXctZGF0YSdcbmltcG9ydCB7IFJlc291cmNlV2Vla0hvcml6b250YWxEYXlIZWFkZXIgfSBmcm9tICcuL3Jlc291cmNlLXdlZWstaG9yaXpvbnRhbC1kYXktaGVhZGVyJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VXZWVrSG9yaXpvbnRhbERhdGEgfSBmcm9tICcuL3VzZS1yZXNvdXJjZS13ZWVrLWhvcml6b250YWwtZGF0YSdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlV2Vla0hvcml6b250YWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgeyBpc0hvdXJseSwgd2Vla0RheXMgfSA9IHVzZVJlc291cmNlV2Vla1ZpZXdEYXRhKClcblx0Y29uc3QgeyB3ZWVrSG91cnMgfSA9IHVzZVJlc291cmNlV2Vla0hvcml6b250YWxEYXRhKClcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUV2ZW50R3JpZFxuXHRcdFx0Y2xhc3Nlcz17e1xuXHRcdFx0XHRoZWFkZXI6IGNuKGlzSG91cmx5ID8gJ2gtMjQnIDogJ2gtMTInLCAnbWluLXctZnVsbCcpLFxuXHRcdFx0XHRib2R5OiAnbWluLXctZnVsbCcsXG5cdFx0XHRcdGNlbGw6ICdtaW4tdy0yMCBmbGV4LTEnLFxuXHRcdFx0fX1cblx0XHRcdGRheXM9e2lzSG91cmx5ID8gd2Vla0hvdXJzIDogd2Vla0RheXN9XG5cdFx0XHRncmlkVHlwZT17aXNIb3VybHkgPyAnaG91cicgOiAnZGF5J31cblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctMjAgc206dy00MCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdHJ1bmNhdGUgcHgtMSBtaW4tdy0wXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0PFJlc291cmNlV2Vla0hvcml6b250YWxEYXlIZWFkZXIgZGF5cz17d2Vla0RheXN9IC8+XG5cdFx0XHRcdHtpc0hvdXJseSAmJiAoXG5cdFx0XHRcdFx0PFRpbWVIZWFkZXJSb3dcblx0XHRcdFx0XHRcdGRlbGF5U3RlcD17MC4wMDV9XG5cdFx0XHRcdFx0XHRob3Vycz17d2Vla0hvdXJzLmZsYXQoKX1cblx0XHRcdFx0XHRcdHZpZXc9XCJ3ZWVrXCJcblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFsbERheUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1jZWxsJ1xuaW1wb3J0IHsgQWxsRGF5Um93IH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93J1xuaW1wb3J0IHsgSG91ckxhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvdXItbGFiZWwvaG91ci1sYWJlbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB7IHVzZVJlc291cmNlV2Vla1ZpZXdEYXRhIH0gZnJvbSAnLi4vdXNlLXJlc291cmNlLXdlZWstdmlldy1kYXRhJ1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrVmVydGljYWxEYXlIZWFkZXIgfSBmcm9tICcuL3Jlc291cmNlLXdlZWstdmVydGljYWwtZGF5LWhlYWRlcidcbmltcG9ydCB7IFJlc291cmNlV2Vla1ZlcnRpY2FsUmVzb3VyY2VIZWFkZXIgfSBmcm9tICcuL3Jlc291cmNlLXdlZWstdmVydGljYWwtcmVzb3VyY2UtaGVhZGVyJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VXZWVrVmVydGljYWxEYXRhIH0gZnJvbSAnLi91c2UtcmVzb3VyY2Utd2Vlay12ZXJ0aWNhbC1kYXRhJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmVydGljYWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IGlzSG91cmx5LCByZXNvdXJjZXMsIHdlZWtEYXlzLCB2aXNpYmxlRGF5cyB9ID1cblx0XHR1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSgpXG5cdGNvbnN0IHsgaG91cnMsIGNvbHVtbnMgfSA9IHVzZVJlc291cmNlV2Vla1ZlcnRpY2FsRGF0YSgpXG5cdGNvbnN0IHsgc2xvdER1cmF0aW9uIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB1c2VNZW1vKFxuXHRcdCgpID0+ICh7XG5cdFx0XHRpZDogaXNIb3VybHkgPyBrZXlzLmNvbC50aW1lIDoga2V5cy5jb2wuZGF0ZSxcblx0XHRcdGRheXM6IGlzSG91cmx5ID8gaG91cnMgOiB3ZWVrRGF5cyxcblx0XHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdFx0Y2xhc3NOYW1lOlxuXHRcdFx0XHQnc2hyaW5rLTAgdy0xNiBtaW4tdy0xNiBtYXgtdy0xNiBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCcsXG5cdFx0XHRncmlkVHlwZTogaXNIb3VybHkgPyAoJ2hvdXInIGFzIGNvbnN0KSA6ICgnZGF5JyBhcyBjb25zdCksXG5cdFx0XHRub0V2ZW50czogdHJ1ZSxcblx0XHRcdHJlbmRlckNlbGw6IChkYXRlOiBEYXlqcykgPT4gKFxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdFx0e2lzSG91cmx5ID8gKFxuXHRcdFx0XHRcdFx0PEhvdXJMYWJlbCBkYXRlPXtkYXRlfSAvPlxuXHRcdFx0XHRcdCkgOiAoXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj57ZGF0ZS5mb3JtYXQoJ2RkZCcpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0PHNwYW4+e2RhdGUuZm9ybWF0KCdNL0QnKX08L3NwYW4+XG5cdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCksXG5cdFx0fSksXG5cdFx0W2hvdXJzLCBpc0hvdXJseSwgd2Vla0RheXNdXG5cdClcblxuXHRjb25zdCBhbGxEYXlSb3cgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoIWlzSG91cmx5KSByZXR1cm4gdW5kZWZpbmVkXG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGxcIj5cblx0XHRcdFx0PEFsbERheUNlbGwgLz5cblx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0PEFsbERheVJvd1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcz17eyBjZWxsOiAnbWluLXctMjAgZmxleC0xIGJvcmRlci1yIScgfX1cblx0XHRcdFx0XHRcdGRheXM9e3Zpc2libGVEYXlzfVxuXHRcdFx0XHRcdFx0a2V5PXtrZXlzLmFsbERheVJvdyhyZXNvdXJjZS5pZCl9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRzaG93U3BhY2VyPXtmYWxzZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpKX1cblx0XHRcdDwvZGl2PlxuXHRcdClcblx0fSwgW2lzSG91cmx5LCByZXNvdXJjZXMsIHZpc2libGVEYXlzXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17YWxsRGF5Um93fVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6IGlzSG91cmx5ID8gJ2gtMjQnIDogJ2gtMTInIH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIC4uLmNvbHVtbnNdfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS13ZWVrXCJcblx0XHRcdGdyaWRUeXBlPXtpc0hvdXJseSA/ICdob3VyJyA6ICdkYXknfVxuXHRcdFx0c2xvdER1cmF0aW9uTWludXRlcz17c2xvdER1cmF0aW9ufVxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0PFJlc291cmNlV2Vla1ZlcnRpY2FsUmVzb3VyY2VIZWFkZXJcblx0XHRcdFx0XHRyZXNvdXJjZXM9e3Jlc291cmNlc31cblx0XHRcdFx0XHR2aXNpYmxlRGF5cz17dmlzaWJsZURheXN9XG5cdFx0XHRcdC8+XG5cdFx0XHRcdHtpc0hvdXJseSAmJiA8UmVzb3VyY2VXZWVrVmVydGljYWxEYXlIZWFkZXIgY29sdW1ucz17Y29sdW1uc30gLz59XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmludGVyZmFjZSBSZXNvdXJjZVdlZWtWZXJ0aWNhbERheUhlYWRlclByb3BzIHtcblx0Y29sdW1uczogQXJyYXk8eyBkYXk/OiBEYXlqczsgcmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlciB9PlxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmVydGljYWxEYXlIZWFkZXI6IFJlYWN0LkZDPFxuXHRSZXNvdXJjZVdlZWtWZXJ0aWNhbERheUhlYWRlclByb3BzXG4+ID0gKHsgY29sdW1ucyB9KSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNocmluay0wIHctMTYgYm9yZGVyLXIgYm9yZGVyLWIgei0yMCBiZy1iYWNrZ3JvdW5kIHN0aWNreSBsZWZ0LTBcIj5cblx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwicHgtMiBoLWZ1bGwgdy1mdWxsIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtc3RhcnQgZm9udC1tZWRpdW1cIj5cblx0XHRcdFx0XHR7Y3VycmVudERhdGUud2VlaygpfVxuXHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdHtjb2x1bW5zLm1hcCgoY29sLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBkYXkgPSBjb2wuZGF5XG5cdFx0XHRcdGlmICghZGF5KSByZXR1cm4gbnVsbFxuXHRcdFx0XHRjb25zdCBrZXkgPSBrZXlzLmhlYWRlci53ZWVrLmhvdXIoZGF5LCBjb2wucmVzb3VyY2VJZCA/PyAnJylcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdCdtaW4tdy0yMCBmbGV4LTEgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQteHMgc2hyaW5rLTAgYmctYmFja2dyb3VuZCdcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5oZWFkZXIucmVzb3VyY2UudGltZUxhYmVsKFxuXHRcdFx0XHRcdFx0XHQnd2VlaycsXG5cdFx0XHRcdFx0XHRcdGRheS5mb3JtYXQoJ0hIJylcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoa2V5LCAnYW5pbWF0ZWQnKX1cblx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2tleXMubGlzdEtleShrZXksICdtb3Rpb24nKX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdNL0QnKX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJlc291cmNlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsJ1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmludGVyZmFjZSBSZXNvdXJjZVdlZWtWZXJ0aWNhbFJlc291cmNlSGVhZGVyUHJvcHMge1xuXHRyZXNvdXJjZXM6IFJlc291cmNlW11cblx0dmlzaWJsZURheXM6IERheWpzW11cbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlV2Vla1ZlcnRpY2FsUmVzb3VyY2VIZWFkZXI6IFJlYWN0LkZDPFxuXHRSZXNvdXJjZVdlZWtWZXJ0aWNhbFJlc291cmNlSGVhZGVyUHJvcHNcbj4gPSAoeyByZXNvdXJjZXMgfSkgPT4ge1xuXHRjb25zdCB7IHdlZWtWaWV3R3JhbnVsYXJpdHksIHQsIGN1cnJlbnREYXRlIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGlzSG91cmx5ID0gd2Vla1ZpZXdHcmFudWxhcml0eSA9PT0gJ2hvdXJseSdcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNocmluay0wIHctMTYgYm9yZGVyLXIgei0yMCBiZy1iYWNrZ3JvdW5kIHN0aWNreSBsZWZ0LTBcIj5cblx0XHRcdFx0PHNwYW5cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J3B4LTIgaC1mdWxsIHctZnVsbCBmbGV4IGZsZXgtY29sIGp1c3RpZnktY2VudGVyIHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtY2VudGVyIG1pbi13LTAnLFxuXHRcdFx0XHRcdFx0aXNIb3VybHkgPyAnanVzdGlmeS1lbmQnIDogJ2p1c3RpZnktY2VudGVyIGJvcmRlci1iJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0cnVuY2F0ZSB3LWZ1bGxcIj57dCgnd2VlaycpfTwvc3Bhbj5cblx0XHRcdFx0XHR7IWlzSG91cmx5ICYmIChcblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZCB0cnVuY2F0ZSB3LWZ1bGxcIj5cblx0XHRcdFx0XHRcdFx0e2N1cnJlbnREYXRlLndlZWsoKX1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblxuXHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiB7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PFJlc291cmNlQ2VsbFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWluLXctMjAgZmxleC0xIGJvcmRlci1iXCJcblx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KCdyZXNvdXJjZS1jZWxsJywgcmVzb3VyY2UuaWQpfVxuXHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHQnc3RpY2t5IHRleHQtc20gZm9udC1tZWRpdW0gdHJ1bmNhdGUnLFxuXHRcdFx0XHRcdFx0XHRcdGlzSG91cmx5ID8gJ2xlZnQtMS80JyA6ICdsZWZ0LTEnXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdHtyZXNvdXJjZS50aXRsZX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvUmVzb3VyY2VDZWxsPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ2V0Vmlld0hvdXJzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSB9IGZyb20gJy4uL3VzZS1yZXNvdXJjZS13ZWVrLXZpZXctZGF0YSdcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlc291cmNlV2Vla1ZlcnRpY2FsRGF0YSgpIHtcblx0Y29uc3Qge1xuXHRcdGlzSG91cmx5LFxuXHRcdHJlc291cmNlcyxcblx0XHR3ZWVrRGF5cyxcblx0XHR2aXNpYmxlRGF5cyxcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3Vycyxcblx0fSA9IHVzZVJlc291cmNlV2Vla1ZpZXdEYXRhKClcblxuXHRjb25zdCBnZXRIb3VycyA9IHVzZUNhbGxiYWNrKFxuXHRcdChkYXRlOiBEYXlqcykgPT4ge1xuXHRcdFx0cmV0dXJuIGdldFZpZXdIb3Vycyh7XG5cdFx0XHRcdHJlZmVyZW5jZURhdGU6IGRhdGUsXG5cdFx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRhbGxEYXRlczogd2Vla0RheXMsXG5cdFx0XHRcdHJlc291cmNlQnVzaW5lc3NIb3Vycyxcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMsIHdlZWtEYXlzLCByZXNvdXJjZUJ1c2luZXNzSG91cnNdXG5cdClcblxuXHRjb25zdCBob3VycyA9IHVzZU1lbW8oKCkgPT4gZ2V0SG91cnMoY3VycmVudERhdGUpLCBbY3VycmVudERhdGUsIGdldEhvdXJzXSlcblx0Y29uc3QgaG91cmx5Q29sdW1ucyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdHJlc291cmNlcy5mbGF0TWFwKChyZXNvdXJjZSkgPT5cblx0XHRcdFx0dmlzaWJsZURheXMubWFwKChkYXkpID0+ICh7XG5cdFx0XHRcdFx0aWQ6IGtleXMuY29sLmRheShkYXksIHJlc291cmNlLmlkKSxcblx0XHRcdFx0XHRjbGFzc05hbWU6ICdtaW4tdy0yMCBmbGV4LTEnLFxuXHRcdFx0XHRcdHJlc291cmNlSWQ6IHJlc291cmNlLmlkLFxuXHRcdFx0XHRcdHJlc291cmNlLFxuXHRcdFx0XHRcdGRheSxcblx0XHRcdFx0XHRkYXlzOiBnZXRIb3VycyhkYXkpLFxuXHRcdFx0XHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0XHRcdH0pKVxuXHRcdFx0KSxcblx0XHRbcmVzb3VyY2VzLCB2aXNpYmxlRGF5cywgZ2V0SG91cnNdXG5cdClcblxuXHQvLyBVc2VzIGB3ZWVrRGF5c2AgKGFsbCA3KSBpbnRlbnRpb25hbGx5LCBub3QgYHZpc2libGVEYXlzYC4gTm9uLWNvbnRpZ3VvdXNcblx0Ly8gdmlzaWJsZSBkYXlzIHdvdWxkIGJyZWFrIG11bHRpLWRheSBldmVudCBwb3NpdGlvbmluZywgc28gYGhpZGRlbkRheXNgIGlzXG5cdC8vIG5vdCBzdXBwb3J0ZWQgaW4gZGFpbHkgZ3JhbnVsYXJpdHkuXG5cdGNvbnN0IGRhaWx5Q29sdW1ucyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdHJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdFx0XHRpZDoga2V5cy5jb2wucmVzb3VyY2UoJ3dlZWsnLCByZXNvdXJjZS5pZCksXG5cdFx0XHRcdGNsYXNzTmFtZTogJ21pbi13LTIwIGZsZXgtMScsXG5cdFx0XHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdFx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRcdFx0cmVzb3VyY2UsXG5cdFx0XHRcdGRheXM6IHdlZWtEYXlzLFxuXHRcdFx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdFx0XHR9KSksXG5cdFx0W3Jlc291cmNlcywgd2Vla0RheXNdXG5cdClcblxuXHRjb25zdCBjb2x1bW5zID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKGlzSG91cmx5KSByZXR1cm4gaG91cmx5Q29sdW1uc1xuXHRcdHJldHVybiBkYWlseUNvbHVtbnNcblx0fSwgW2lzSG91cmx5LCBob3VybHlDb2x1bW5zLCBkYWlseUNvbHVtbnNdKVxuXG5cdHJldHVybiB7IGhvdXJzLCBjb2x1bW5zIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtIb3Jpem9udGFsIH0gZnJvbSAnLi9ob3Jpem9udGFsL3Jlc291cmNlLXdlZWstaG9yaXpvbnRhbCdcbmltcG9ydCB7IFJlc291cmNlV2Vla1ZlcnRpY2FsIH0gZnJvbSAnLi92ZXJ0aWNhbC9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgb3JpZW50YXRpb24gfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRpZiAob3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcpIHtcblx0XHRyZXR1cm4gPFJlc291cmNlV2Vla1ZlcnRpY2FsIC8+XG5cdH1cblxuXHRyZXR1cm4gPFJlc291cmNlV2Vla0hvcml6b250YWwgLz5cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgQ2FsZW5kYXJEbmRDb250ZXh0IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQnXG5pbXBvcnQgeyBFdmVudEZvcm1EaWFsb2cgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtLWRpYWxvZydcbmltcG9ydCB7IEhlYWRlciB9IGZyb20gJ0AvY29tcG9uZW50cy9oZWFkZXInXG5pbXBvcnQgeyBSZXNvdXJjZURheVZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcnXG5pbXBvcnQgeyBSZXNvdXJjZU1vbnRoVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3J1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNhbGVuZGFyQm9keTogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgdmlldyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHZpZXdNYXA6IFJlY29yZDxzdHJpbmcsIFJlYWN0LlJlYWN0Tm9kZT4gPSB7XG5cdFx0bW9udGg6IDxSZXNvdXJjZU1vbnRoVmlldyBrZXk9XCJtb250aFwiIC8+LFxuXHRcdHdlZWs6IDxSZXNvdXJjZVdlZWtWaWV3IGtleT1cIndlZWtcIiAvPixcblx0XHRkYXk6IDxSZXNvdXJjZURheVZpZXcga2V5PVwiZGF5XCIgLz4sXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImlsYW15LXJlc291cmNlLWNhbGVuZGFyXCJcblx0XHQ+XG5cdFx0XHQ8SGVhZGVyIGNsYXNzTmFtZT1cInAtMVwiIC8+XG5cblx0XHRcdHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZWRTZWN0aW9uIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuXHRcdFx0PENhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBoLVtjYWxjKDEwMCUtMy41cmVtKV0gQGNvbnRhaW5lci9jYWxlbmRhci1ib2R5XCJcblx0XHRcdFx0XHRkaXJlY3Rpb249XCJob3Jpem9udGFsXCJcblx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXt2aWV3fVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJib3JkZXIgaC1mdWxsIHctZnVsbFwiIGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItYm9keVwiPlxuXHRcdFx0XHRcdFx0e3ZpZXdNYXBbdmlld119XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0PC9DYWxlbmRhckRuZENvbnRleHQ+XG5cblx0XHRcdHsvKiBFdmVudCBGb3JtIERpYWxvZyAqL31cblx0XHRcdDxFdmVudEZvcm1EaWFsb2cgLz5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJQcm92aWRlciB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHtcblx0SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcEV2ZW50LFxuXHRJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wcyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7XG5cdERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdEVWRU5UX0JBUl9IRUlHSFQsXG5cdEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRXRUVLX0RBWVNfTlVNQkVSX01BUCxcbn0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgbm9ybWFsaXplRXZlbnRzLCBzYWZlRGF0ZSwgdG9IaWRkZW5EYXlzU2V0IH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyQm9keSB9IGZyb20gJy4vcmVzb3VyY2UtY2FsZW5kYXItYm9keSdcblxuZXhwb3J0IGNvbnN0IElsYW15UmVzb3VyY2VDYWxlbmRhcjogUmVhY3QuRkM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHM+ID0gKHtcblx0ZXZlbnRzID0gW10sXG5cdHJlc291cmNlcyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9ICdzdW5kYXknLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRkaXNhYmxlRHJhZ0FuZERyb3AgPSBmYWxzZSxcblx0ZGF5TWF4RXZlbnRzID0gREFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdGV2ZW50SGVpZ2h0ID0gRVZFTlRfQkFSX0hFSUdIVCxcblx0aGlkZGVuRGF5cyxcblx0Li4ucHJvcHNcbn0pID0+IHtcblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyXG5cdFx0XHRkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c31cblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcD17ZGlzYWJsZURyYWdBbmREcm9wfVxuXHRcdFx0ZXZlbnRIZWlnaHQ9e2V2ZW50SGVpZ2h0fVxuXHRcdFx0ZXZlbnRTcGFjaW5nPXtldmVudFNwYWNpbmd9XG5cdFx0XHRldmVudHM9e25vcm1hbGl6ZUV2ZW50czxJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wRXZlbnQsIENhbGVuZGFyRXZlbnQ+KFxuXHRcdFx0XHRldmVudHNcblx0XHRcdCl9XG5cdFx0XHRmaXJzdERheU9mV2Vlaz17V0VFS19EQVlTX05VTUJFUl9NQVBbZmlyc3REYXlPZldlZWtdfVxuXHRcdFx0aGlkZGVuRGF5cz17dG9IaWRkZW5EYXlzU2V0KGhpZGRlbkRheXMpfVxuXHRcdFx0aW5pdGlhbERhdGU9e3NhZmVEYXRlKGluaXRpYWxEYXRlKX1cblx0XHRcdGluaXRpYWxWaWV3PXtpbml0aWFsVmlld31cblx0XHRcdHJlc291cmNlcz17cmVzb3VyY2VzfVxuXHRcdFx0dGltZUZvcm1hdD17dGltZUZvcm1hdH1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8UmVzb3VyY2VDYWxlbmRhckJvZHkgLz5cblx0XHQ8L1Jlc291cmNlQ2FsZW5kYXJQcm92aWRlcj5cblx0KVxufVxuIgogIF0sCiAgIm1hcHBpbmdzIjogIkFBRUEsZ0JBQVMsZUNGVCwwQkFDQyxhQUVBLHNCQ0ZELGVBQVMsY0FDVCxrQkFBUyx3QkNEVCxzQkFDQSwwQ0FDQSw4Q0FDQSwrQ0FDQSwyQ0FDQSx1Q0FDQSx5Q0FDQSxvQ0FDQSx3Q0FDQSwyQ0FhQSxJQUFJLEdBRUUsR0FBZ0MsQ0FBQyxFQUFTLEVBQVksSUFBaUIsQ0FDNUUsSUFBTSxFQUFRLEVBQVcsVUFHbkIsRUFBcUIsRUFBYSxHQUFHLFdBQzNDLEVBQWEsR0FB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QUFDLEVBQVUsR0FBRyxDQUFPLEVBQzlCLGNBQVksZ0JBQ1osU0FBVSxFQUFXLE9BQVMsTUFDOUIsb0JBQXFCLEVBTnRCLFNBUUMsR0FNRSxNQU5GLENBQUssVUFBVSx1QkFBZixTQU1FLENBTEQsR0FBQyxHQUFELENBQ0MsVUFBVyxFQUNYLFlBQWEsRUFDZCxFQUNDLEdBQVksR0FBQyxHQUFELENBQStCLFFBQVMsRUFBUyxHQUM3RCxFQUNELDRDSTFFRyxJQUFNLEdBQTZCLElBQU0sQ0FDL0MsSUFBUSxlQUFnQixFQUF3QixFQUVoRCxHQUFJLElBQWdCLFdBQ25CLE9BQU8sR0FBQyxHQUFELEVBQXNCLEVBRzlCLE9BQU8sR0FBQyxHQUFELEVBQXdCLHVEQ0Z6QixJQUFNLEdBQWlDLElBQU0sQ0FDbkQsSUFBUSxRQUFTLEVBQXdCLEVBUXpDLE9BQ0MsR0FxQkUsTUFyQkYsQ0FDQyxVQUFVLDhCQUNWLGNBQVksMEJBRmIsU0FxQkUsQ0FqQkQsR0FBQyxHQUFELENBQVEsVUFBVSxNQUFNLEVBR3hCLEdBVUUsR0FWRixVQUNDLEdBUUUsRUFSRixDQUNDLFVBQVUsd0RBQ1YsVUFBVSxhQUNWLGNBQWUsRUFIaEIsU0FLQyxHQUVFLE1BRkYsQ0FBSyxVQUFVLHVCQUF1QixjQUFZLGdCQUFsRCxTQXBCNkMsQ0FDaEQsTUFBTyxHQUFDLEdBQUQsR0FBdUIsT0FBUSxFQUN0QyxLQUFNLEdBQUMsR0FBRCxHQUFzQixNQUFPLEVBQ25DLElBQUssR0FBQyxHQUFELEdBQXFCLEtBQU0sQ0FDakMsRUFpQmMsR0FDUixFQUNELEVBQ0QsRUFHRixHQUFDLEdBQUQsRUFBaUIsR0FDaEIsNENDekJHLElBQU0sR0FBOEQsRUFDMUUsU0FBUyxDQUFDLEVBQ1YsWUFBWSxDQUFDLEVBQ2IsaUJBQWlCLFNBQ2pCLGNBQWMsUUFDZCxjQUNBLHFCQUFxQixHQUNyQixlQUFlLEdBQ2YsYUFBYSxVQUNiLGVBQWUsR0FDZixjQUFjLEdBQ2QsZ0JBQ0csS0FDRSxDQUNMLE9BQ0MsR0FpQkUsR0FqQkYsQ0FDQyxhQUFjLEVBQ2QsbUJBQW9CLEVBQ3BCLFlBQWEsRUFDYixhQUFjLEVBQ2QsT0FBUSxHQUNQLENBQ0QsRUFDQSxlQUFnQixHQUFxQixHQUNyQyxXQUFZLEdBQWdCLENBQVUsRUFDdEMsWUFBYSxHQUFTLENBQVcsRUFDakMsWUFBYSxFQUNiLFVBQVcsRUFDWCxXQUFZLEtBQ1IsRUFkTCxTQWdCQyxHQUFDLEdBQUQsRUFBc0IsRUFDckIiLAogICJkZWJ1Z0lkIjogIkJFMzJEMEJDQzdDOTQ3Qzk2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
6
+ //# debugId=82BF724F7D205EFE64756E2164756E21
7
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2luZGV4LnRzIiwgInNyYy9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbi50c3giLCAic3JjL2xpYi91dGlscy9pbmRleC50cyIsICJzcmMvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnLnRzIiwgInNyYy9saWIvY29uc3RhbnRzLnRzIiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2J1dHRvbi50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvZGlhbG9nLnRzeCIsICJzcmMvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQudHMiLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dC50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9jb250ZXh0LnRzIiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICJzcmMvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZS50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXIudHMiLCAic3JjL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdC50cyIsICJzcmMvbGliL3V0aWxzL2RhdGUtdXRpbHMudHMiLCAic3JjL2xpYi91dGlscy9ldmVudC11dGlscy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZy50c3giLCAic3JjL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9kbmQtdXRpbHMudHMiLCAic3JjL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9ldmVudC1kcmFnLW92ZXJsYXkudHN4IiwgInNyYy9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvY2hlY2tib3gudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYWxlbmRhci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvcG9wb3Zlci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvaW5wdXQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2xhYmVsLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYS50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvdGltZS1waWNrZXIudHN4IiwgInNyYy9ob29rcy91c2UtYXV0b2NvbXBsZXRlLXRpbWVwaWNrZXIudHMiLCAic3JjL2xpYi91dGlscy9rZXlzLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3Vycy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvZXZlbnQtZm9ybS11dGlscy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdG9yL3JlY3VycmVuY2UtZWRpdG9yLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYXJkLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zZWxlY3QudHN4IiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucy50cyIsICJzcmMvaG9va3MvdXNlLWVmZmVjdGl2ZS1idXNpbmVzcy1ob3Vycy50cyIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nLnRzeCIsICJzcmMvY29tcG9uZW50cy9oZWFkZXIvYmFzZS1oZWFkZXIudHN4IiwgInNyYy9saWIvdXRpbHMvZXhwb3J0LWljYWwudHMiLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3RpdGxlLWNvbnRlbnQudHN4IiwgInNyYy9ob29rcy91c2UtZGF0ZS10aW1lLWZvcm1hdHRlcnMudHMiLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3ZpZXctY29udHJvbHMudHN4IiwgInNyYy9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93LnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLXJvdy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZFdlZWtFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi13ZWVrLWV2ZW50cy50cyIsICJzcmMvY29tcG9uZW50cy9ncmlkLWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL2RheS1udW1iZXIudHN4IiwgInNyYy9jb21wb25lbnRzL2FsbC1ldmVudHMtZGlhbG9nLnRzeCIsICJzcmMvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50LnRzeCIsICJzcmMvY29tcG9uZW50cy9kcm9wcGFibGUtY2VsbC50c3giLCAic3JjL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbC50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1ldmVudHMtbGF5ZXIudHN4IiwgInNyYy9jb21wb25lbnRzL2N1cnJlbnQtdGltZS1pbmRpY2F0b3IudHN4IiwgInNyYy9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktY2VsbC50c3giLCAic3JjL2NvbXBvbmVudHMvaG91ci1sYWJlbC9ob3VyLWxhYmVsLnRzeCIsICJzcmMvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdXNlLXNjcm9sbC10by10aW1lLnRzIiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1jb2wudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1ldmVudHMtbGF5ZXIudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi1kYXktZXZlbnRzLnRzIiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1oZWFkZXItY29udGFpbmVyLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3Vycy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9kYXktdmlldy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9tb250aC12aWV3LnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLWhlYWRlci1jb250YWluZXIudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvbW9udGgtaGVhZGVyLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvd2Vlay12aWV3LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy95ZWFyLXZpZXcveWVhci12aWV3LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9wcm92aWRlci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktY2FsZW5kYXIudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3RpbWUtaGVhZGVyLXJvdy50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvcmVzb3VyY2UtZGF5LWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L3Jlc291cmNlLWRheS12ZXJ0aWNhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvaW5kZXgudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvcmVzb3VyY2UtbW9udGgtaG9yaXpvbnRhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9yZXNvdXJjZS1tb250aC12ZXJ0aWNhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3VzZS1yZXNvdXJjZS13ZWVrLXZpZXctZGF0YS50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvaG9yaXpvbnRhbC9yZXNvdXJjZS13ZWVrLWhvcml6b250YWwtZGF5LWhlYWRlci50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L2hvcml6b250YWwvdXNlLXJlc291cmNlLXdlZWstaG9yaXpvbnRhbC1kYXRhLnRzIiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9ob3Jpem9udGFsL3Jlc291cmNlLXdlZWstaG9yaXpvbnRhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3ZlcnRpY2FsL3Jlc291cmNlLXdlZWstdmVydGljYWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy92ZXJ0aWNhbC9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsLWRheS1oZWFkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy92ZXJ0aWNhbC9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsLXJlc291cmNlLWhlYWRlci50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3ZlcnRpY2FsL3VzZS1yZXNvdXJjZS13ZWVrLXZlcnRpY2FsLWRhdGEudHMiLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L2luZGV4LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci9yZXNvdXJjZS1jYWxlbmRhci1ib2R5LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci50c3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiLy8gUmUtZXhwb3J0IHJydWxlLmpzIHR5cGVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHR5cGUgeyBXZWVrZGF5IH0gZnJvbSAncnJ1bGUnXG5leHBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuZXhwb3J0IHR5cGUgeyBFdmVudEZvcm1Qcm9wcyB9IGZyb20gJy4vY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5leHBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQsIFdlZWtEYXlzIH0gZnJvbSAnLi9jb21wb25lbnRzL3R5cGVzJ1xuZXhwb3J0IHsgSWxhbXlDYWxlbmRhciB9IGZyb20gJy4vZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhcidcbmV4cG9ydCB0eXBlIHtcblx0Q2VsbENsaWNrSW5mbyxcblx0SWxhbXlDYWxlbmRhclByb3BzLFxuXHRSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzLFxuXHRTbG90RHVyYXRpb24sXG59IGZyb20gJy4vZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG4vLyBFeHBvcnQgdHlwZXNcbmV4cG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnLi9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuLy8gUlJVTEUtYmFzZWQgcmVjdXJyZW5jZSBzeXN0ZW1cbmV4cG9ydCB7XG5cdGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzLFxuXHRpc1JlY3VycmluZ0V2ZW50LFxufSBmcm9tICcuL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuZXhwb3J0IHR5cGUgeyBJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wcyB9IGZyb20gJy4vZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhcidcbmV4cG9ydCB7IElsYW15UmVzb3VyY2VDYWxlbmRhciB9IGZyb20gJy4vZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci9pbGFteS1yZXNvdXJjZS1jYWxlbmRhcidcbi8vIFJlc291cmNlIGNhbGVuZGFyIHR5cGVzXG5leHBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbi8vIFB1YmxpYyBjYWxlbmRhciBjb250ZXh0IGhvb2tzXG5leHBvcnQge1xuXHR0eXBlIFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuLFxuXHR1c2VJbGFteUNhbGVuZGFyQ29udGV4dCxcbn0gZnJvbSAnLi9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmV4cG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnMgfSBmcm9tICcuL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdCdcbi8vIFRyYW5zbGF0aW9uIHN5c3RlbVxuZXhwb3J0IHR5cGUge1xuXHRUcmFuc2xhdGlvbktleSxcblx0VHJhbnNsYXRpb25zLFxuXHRUcmFuc2xhdG9yRnVuY3Rpb24sXG59IGZyb20gJy4vbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmV4cG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3LCBUaW1lRm9ybWF0IH0gZnJvbSAnLi90eXBlcydcbiIsCiAgICAiaW1wb3J0IHtcblx0QW5pbWF0ZVByZXNlbmNlLFxuXHR0eXBlIEhUTUxNb3Rpb25Qcm9wcyxcblx0bW90aW9uLFxuXHR0eXBlIFZhcmlhbnRzLFxufSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIEFuaW1hdGVkU2VjdGlvblByb3BzXG5cdGV4dGVuZHMgT21pdDxIVE1MTW90aW9uUHJvcHM8J2Rpdic+LCAnY2hpbGRyZW4nIHwgJ2xheW91dCcgfCAnbGF5b3V0SWQnPiB7XG5cdGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcblx0dHJhbnNpdGlvbktleTogc3RyaW5nXG5cdGRlbGF5PzogbnVtYmVyXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRkaXJlY3Rpb24/OiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnXG5cdGxheW91dD86IGJvb2xlYW4gfCAncG9zaXRpb24nIHwgJ3NpemUnIHwgJ3ByZXNlcnZlLWFzcGVjdCdcblx0bGF5b3V0SWQ/OiBzdHJpbmdcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5jb25zdCB2YXJpYW50czogVmFyaWFudHMgPSB7XG5cdGhpZGRlbjogKHsgZGlyZWN0aW9uIH06IHsgZGlyZWN0aW9uOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIH0pID0+ICh7XG5cdFx0b3BhY2l0eTogMCxcblx0XHR4OiBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/IDEwIDogMCxcblx0XHR5OiBkaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcgPyAtMTAgOiAwLFxuXHR9KSxcblx0dmlzaWJsZTogKHsgZGVsYXkgfTogeyBkZWxheTogbnVtYmVyIH0pID0+ICh7XG5cdFx0b3BhY2l0eTogMSxcblx0XHR4OiAwLFxuXHRcdHk6IDAsXG5cdFx0dHJhbnNpdGlvbjogeyBkdXJhdGlvbjogMC4yLCBlYXNlOiBbMC40LCAwLCAwLjIsIDFdLCBkZWxheSB9LFxuXHR9KSxcblx0ZXhpdDogKHsgZGlyZWN0aW9uIH06IHsgZGlyZWN0aW9uOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIH0pID0+ICh7XG5cdFx0b3BhY2l0eTogMCxcblx0XHR4OiBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/IC0xMCA6IDAsXG5cdFx0eTogZGlyZWN0aW9uID09PSAndmVydGljYWwnID8gLTEwIDogMCxcblx0XHR0cmFuc2l0aW9uOiB7IGR1cmF0aW9uOiAwLjE1IH0sXG5cdH0pLFxufVxuXG5leHBvcnQgY29uc3QgQW5pbWF0ZWRTZWN0aW9uOiBSZWFjdC5GQzxBbmltYXRlZFNlY3Rpb25Qcm9wcz4gPSAoe1xuXHRjaGlsZHJlbixcblx0dHJhbnNpdGlvbktleSxcblx0ZGVsYXkgPSAwLFxuXHRjbGFzc05hbWUsXG5cdGRpcmVjdGlvbiA9ICd2ZXJ0aWNhbCcsXG5cdGxheW91dCxcblx0bGF5b3V0SWQsXG5cdCdkYXRhLXRlc3RpZCc6IHRlc3RJZCxcblx0cmVmLFxuXHQuLi5wcm9wc1xufSkgPT4gKFxuXHQ8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG5cdFx0PG1vdGlvbi5kaXZcblx0XHRcdGFuaW1hdGU9XCJ2aXNpYmxlXCJcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2lubGluZS1ibG9jayB3LWZ1bGwnLCBjbGFzc05hbWUpfVxuXHRcdFx0Y3VzdG9tPXt7IGRlbGF5LCBkaXJlY3Rpb24gfX1cblx0XHRcdGRhdGEtdGVzdGlkPXt0ZXN0SWR9XG5cdFx0XHRleGl0PVwiZXhpdFwiXG5cdFx0XHRpbml0aWFsPVwiaGlkZGVuXCJcblx0XHRcdGtleT17dHJhbnNpdGlvbktleX1cblx0XHRcdGxheW91dD17bGF5b3V0fVxuXHRcdFx0bGF5b3V0SWQ9e2xheW91dElkfVxuXHRcdFx0cmVmPXtyZWZ9XG5cdFx0XHR2YXJpYW50cz17dmFyaWFudHN9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvbW90aW9uLmRpdj5cblx0PC9BbmltYXRlUHJlc2VuY2U+XG4pXG5cbkFuaW1hdGVkU2VjdGlvbi5kaXNwbGF5TmFtZSA9ICdBbmltYXRlZFNlY3Rpb24nXG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2xhc3NWYWx1ZSB9IGZyb20gJ2Nsc3gnXG5pbXBvcnQgeyBjbHN4IH0gZnJvbSAnY2xzeCdcbmltcG9ydCB7IHR3TWVyZ2UgfSBmcm9tICd0YWlsd2luZC1tZXJnZSdcbmltcG9ydCB0eXBlIHsgV2Vla0RheXMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgV0VFS19EQVlTX05VTUJFUl9NQVAgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjbiguLi5pbnB1dHM6IENsYXNzVmFsdWVbXSkge1xuXHRyZXR1cm4gdHdNZXJnZShjbHN4KGlucHV0cykpXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb3B0aW9uYWwgV2Vla0RheXNbXSBsaXN0IGludG8gYSBTZXQ8bnVtYmVyPiBvZiBkYXkgaW5kaWNlc1xuICogKDAgPSBTdW5kYXksIDEgPSBNb25kYXksIC4uLiksIG9yIHVuZGVmaW5lZCBpZiB0aGUgbGlzdCBpcyBlbXB0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IHRvSGlkZGVuRGF5c1NldCA9IChcblx0aGlkZGVuRGF5cz86IFdlZWtEYXlzW11cbik6IFNldDxudW1iZXI+IHwgdW5kZWZpbmVkID0+IHtcblx0aWYgKCFoaWRkZW5EYXlzIHx8IGhpZGRlbkRheXMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkXG5cdHJldHVybiBuZXcgU2V0KGhpZGRlbkRheXMubWFwKChkYXkpID0+IFdFRUtfREFZU19OVU1CRVJfTUFQW2RheV0pKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2FmZURhdGUoXG5cdGRhdGU6IERheWpzIHwgRGF0ZSB8IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogRGF5anMgfCB1bmRlZmluZWQge1xuXHRpZiAoZGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZFxuXHR9XG5cdGlmIChkYXlqcy5pc0RheWpzKGRhdGUpKSB7XG5cdFx0cmV0dXJuIGRhdGVcblx0fVxuXHRjb25zdCBwYXJzZWREYXRlID0gZGF5anMoZGF0ZSlcblx0cmV0dXJuIHBhcnNlZERhdGUuaXNWYWxpZCgpID8gcGFyc2VkRGF0ZSA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgY29uc3Qgb21pdEtleXMgPSA8VCBleHRlbmRzIG9iamVjdCwgSyBleHRlbmRzIGtleW9mIFQ+KFxuXHRvYmo6IFQsXG5cdGtleXM6IEtbXVxuKTogT21pdDxULCBLPiA9PiB7XG5cdGNvbnN0IHJlc3VsdCA9IHsgLi4ub2JqIH1cblx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdGRlbGV0ZSByZXN1bHRba2V5XVxuXHR9XG5cdHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGNhbGVuZGFyIGV2ZW50cyBmcm9tIHB1YmxpYy1mYWNpbmcgZm9ybWF0IHRvIGludGVybmFsIGZvcm1hdC5cbiAqIENvbnZlcnRzIGZsZXhpYmxlIGRhdGUgdHlwZXMgKGRheWpzLCBEYXRlLCBzdHJpbmcpIHRvIHN0cmljdCBkYXlqcyBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBldmVudHMgLSBBcnJheSBvZiBjYWxlbmRhciBldmVudHMgd2l0aCBmbGV4aWJsZSBkYXRlIHR5cGVzXG4gKiBAcmV0dXJucyBOb3JtYWxpemVkIGFycmF5IG9mIGNhbGVuZGFyIGV2ZW50cyB3aXRoIGRheWpzIGRhdGVzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlZ3VsYXIgY2FsZW5kYXIgZXZlbnRzXG4gKiBjb25zdCBldmVudHMgPSBub3JtYWxpemVFdmVudHM8SWxhbXlDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4ocHJvcEV2ZW50cylcbiAqXG4gKiAvLyBSZXNvdXJjZSBjYWxlbmRhciBldmVudHNcbiAqIGNvbnN0IHJlc291cmNlRXZlbnRzID0gbm9ybWFsaXplRXZlbnRzPElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4ocHJvcEV2ZW50cylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUV2ZW50czxcblx0VElucHV0IGV4dGVuZHMge1xuXHRcdHN0YXJ0OiBEYXlqcyB8IERhdGUgfCBzdHJpbmdcblx0XHRlbmQ6IERheWpzIHwgRGF0ZSB8IHN0cmluZ1xuXHR9LFxuXHRUT3V0cHV0LFxuPihldmVudHM6IFRJbnB1dFtdIHwgdW5kZWZpbmVkKTogVE91dHB1dFtdIHtcblx0aWYgKCFldmVudHMgfHwgIWV2ZW50cy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gW11cblx0fVxuXG5cdHJldHVybiBldmVudHMubWFwKChldmVudCkgPT4ge1xuXHRcdHJldHVybiB7XG5cdFx0XHQuLi5ldmVudCxcblx0XHRcdHN0YXJ0OiBkYXlqcy5pc0RheWpzKGV2ZW50LnN0YXJ0KSA/IGV2ZW50LnN0YXJ0IDogZGF5anMoZXZlbnQuc3RhcnQpLFxuXHRcdFx0ZW5kOiBkYXlqcy5pc0RheWpzKGV2ZW50LmVuZCkgPyBldmVudC5lbmQgOiBkYXlqcyhldmVudC5lbmQpLFxuXHRcdH0gYXMgVE91dHB1dFxuXHR9KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IE9wVW5pdFR5cGUgYXMgRGF5anNPcFVuaXRUeXBlLCBQbHVnaW5GdW5jIH0gZnJvbSAnZGF5anMnXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgaXNCZXR3ZWVuIGZyb20gJ2RheWpzL3BsdWdpbi9pc0JldHdlZW4uanMnXG5pbXBvcnQgaXNTYW1lT3JBZnRlciBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JBZnRlci5qcydcbmltcG9ydCBpc1NhbWVPckJlZm9yZSBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JCZWZvcmUuanMnXG5pbXBvcnQgbG9jYWxlRGF0YSBmcm9tICdkYXlqcy9wbHVnaW4vbG9jYWxlRGF0YS5qcydcbmltcG9ydCBsb2NhbGl6ZWRGb3JtYXQgZnJvbSAnZGF5anMvcGx1Z2luL2xvY2FsaXplZEZvcm1hdC5qcydcbmltcG9ydCBtaW5NYXggZnJvbSAnZGF5anMvcGx1Z2luL21pbk1heC5qcydcbmltcG9ydCB0aW1lem9uZSBmcm9tICdkYXlqcy9wbHVnaW4vdGltZXpvbmUuanMnXG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMuanMnXG5pbXBvcnQgd2Vla2RheSBmcm9tICdkYXlqcy9wbHVnaW4vd2Vla2RheS5qcydcbmltcG9ydCB3ZWVrT2ZZZWFyIGZyb20gJ2RheWpzL3BsdWdpbi93ZWVrT2ZZZWFyLmpzJ1xuXG4vKipcbiAqIFBsdWdpbiB0aGF0IGZpeGVzIGEgZGF5anMtdGltZXpvbmUgYnVnIHdoZXJlIC5zdGFydE9mKCkgYW5kIC5lbmRPZigpIGRyb3BcbiAqIHRpbWV6b25lIGluZm8gd2hlbiB0aGUgc3lzdGVtJ3MgbG9jYWwgdGltZXpvbmUgaGFzIGEgRFNUIHRyYW5zaXRpb24gbmVhclxuICogdGhlIHRhcmdldCBkYXRlLiBBZnRlciBlYWNoIHN0YXJ0T2YvZW5kT2YgY2FsbCwgaWYgdGhlIFVUQyBvZmZzZXQgaGFzXG4gKiBkcmlmdGVkIGZyb20gd2hhdCB0aGUgdGltZXpvbmUgZXhwZWN0cywgcmUtYXBwbHkgdGhlIHRpbWV6b25lIHdpdGhcbiAqIGtlZXBMb2NhbFRpbWU9dHJ1ZSB0byByZXN0b3JlIHRoZSBjb3JyZWN0IG9mZnNldC5cbiAqL1xuaW50ZXJmYWNlIERheWpzSW50ZXJuYWwgZXh0ZW5kcyBkYXlqcy5EYXlqcyB7XG5cdCR4OiB7ICR0aW1lem9uZT86IHN0cmluZyB9XG59XG5cbmxldCBkZWZhdWx0VGltZXpvbmU6IHN0cmluZyB8IHVuZGVmaW5lZFxuXG5jb25zdCBmaXhUaW1lem9uZU9mZnNldDogUGx1Z2luRnVuYyA9IChfb3B0aW9uLCBkYXlqc0NsYXNzLCBkYXlqc0ZhY3RvcnkpID0+IHtcblx0Y29uc3QgcHJvdG8gPSBkYXlqc0NsYXNzLnByb3RvdHlwZVxuXG5cdC8vIEludGVyY2VwdCBzZXREZWZhdWx0IHRvIHRyYWNrIHRoZSBjb25maWd1cmVkIHRpbWV6b25lXG5cdGNvbnN0IG9yaWdpbmFsU2V0RGVmYXVsdCA9IGRheWpzRmFjdG9yeS50ei5zZXREZWZhdWx0XG5cdGRheWpzRmFjdG9yeS50ei5zZXREZWZhdWx0ID0gKHRpbWV6b25lPzogc3RyaW5nKSA9PiB7XG5cdFx0ZGVmYXVsdFRpbWV6b25lID0gdGltZXpvbmVcblx0XHRyZXR1cm4gb3JpZ2luYWxTZXREZWZhdWx0KHRpbWV6b25lKVxuXHR9XG5cblx0dHlwZSBTdGFydE9mRm4gPSAodW5pdDogRGF5anNPcFVuaXRUeXBlLCBfc3RhcnRPZj86IGJvb2xlYW4pID0+IGRheWpzLkRheWpzXG5cdGNvbnN0IG9yaWdpbmFsU3RhcnRPZiA9IHByb3RvLnN0YXJ0T2YgYXMgU3RhcnRPZkZuXG5cdGNvbnN0IG9yaWdpbmFsRW5kT2YgPSBwcm90by5lbmRPZlxuXG5cdGZ1bmN0aW9uIHJlc3RvcmVUaW1lem9uZShcblx0XHRpbnN0YW5jZTogZGF5anMuRGF5anMsXG5cdFx0cmVzdWx0OiBkYXlqcy5EYXlqc1xuXHQpOiBkYXlqcy5EYXlqcyB7XG5cdFx0Y29uc3QgdHogPSAoaW5zdGFuY2UgYXMgRGF5anNJbnRlcm5hbCkuJHg/LiR0aW1lem9uZSB8fCBkZWZhdWx0VGltZXpvbmVcblx0XHRpZiAoIXR6KSByZXR1cm4gcmVzdWx0XG5cblx0XHRjb25zdCBleHBlY3RlZE9mZnNldCA9IGRheWpzRmFjdG9yeVxuXHRcdFx0LnR6KHJlc3VsdC5mb3JtYXQoJ1lZWVktTU0tRERUSEg6bW06c3MnKSwgdHopXG5cdFx0XHQudXRjT2Zmc2V0KClcblx0XHRpZiAocmVzdWx0LnV0Y09mZnNldCgpICE9PSBleHBlY3RlZE9mZnNldCkge1xuXHRcdFx0cmV0dXJuIHJlc3VsdC50eih0eiwgdHJ1ZSlcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdFxuXHR9XG5cblx0Ly8gZGF5anMncyBlbmRPZiBjYWxscyBzdGFydE9mKHVuaXQsIGZhbHNlKSBpbnRlcm5hbGx5IOKAlCB0aGUgc2Vjb25kIGFyZ1xuXHQvLyAoX3N0YXJ0T2YpIGNvbnRyb2xzIHN0YXJ0LXZzLWVuZCBiZWhhdmlvci4gV2UgbXVzdCBmb3J3YXJkIGl0LlxuXHRwcm90by5zdGFydE9mID0gZnVuY3Rpb24gKHVuaXQ6IERheWpzT3BVbml0VHlwZSwgX3N0YXJ0T2Y/OiBib29sZWFuKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gb3JpZ2luYWxTdGFydE9mLmNhbGwodGhpcywgdW5pdCwgX3N0YXJ0T2YpXG5cdFx0cmV0dXJuIHJlc3RvcmVUaW1lem9uZSh0aGlzLCByZXN1bHQpXG5cdH1cblxuXHQvLyBlbmRPZiBkZWxlZ2F0ZXMgdG8gc3RhcnRPZih1bml0LCBmYWxzZSksIHNvIHRoZSBwYXRjaGVkIHN0YXJ0T2YgaGFuZGxlcyBpdFxuXHRwcm90by5lbmRPZiA9IG9yaWdpbmFsRW5kT2Zcbn1cblxuLy8gRXh0ZW5kIGRheWpzIHdpdGggcGx1Z2luc1xuZGF5anMuZXh0ZW5kKHdlZWtkYXkpXG5kYXlqcy5leHRlbmQod2Vla09mWWVhcilcbmRheWpzLmV4dGVuZChpc1NhbWVPckFmdGVyKVxuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQmVmb3JlKVxuZGF5anMuZXh0ZW5kKGlzQmV0d2VlbilcbmRheWpzLmV4dGVuZChtaW5NYXgpXG5kYXlqcy5leHRlbmQodGltZXpvbmUpXG5kYXlqcy5leHRlbmQodXRjKVxuZGF5anMuZXh0ZW5kKGxvY2FsZURhdGEpXG5kYXlqcy5leHRlbmQobG9jYWxpemVkRm9ybWF0KVxuZGF5anMuZXh0ZW5kKGZpeFRpbWV6b25lT2Zmc2V0KVxuXG4vLyBDdXN0b20gZGF5anMgY29uc3RydWN0b3IgdGhhdCBhdXRvbWF0aWNhbGx5IHVzZXMgLnR6KCkgZm9yIGFsbCBpbnN0YW5jZXMuXG4vLyBUaGlzIGVuc3VyZXMgdGhhdCBkYXlqcygpIGNhbGxzIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlIGhvbm9yIHRoZSBkZWZhdWx0XG4vLyB0aW1lem9uZSBzZXQgdmlhIGRheWpzLnR6LnNldERlZmF1bHQoKS5cbmNvbnN0IHRpbWV6b25lQXdhcmVEYXlqcyA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcblx0cmV0dXJuIChkYXlqcyBhcyB1bmtub3duIGFzIHsgdHo6ICguLi5hOiB1bmtub3duW10pID0+IGRheWpzLkRheWpzIH0pLnR6KFxuXHRcdC4uLmFyZ3Ncblx0KVxufVxuXG4vLyBBdHRhY2ggYWxsIHN0YXRpYyBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIGZyb20gdGhlIG9yaWdpbmFsIGRheWpzIHRvIG91ciB3cmFwcGVyLlxuLy8gVGhpcyBhbGxvd3MgdGhlIHdyYXBwZXIgdG8gYmUgdXNlZCBhcyBhIGRyb3AtaW4gcmVwbGFjZW1lbnQuXG5PYmplY3QuYXNzaWduKHRpbWV6b25lQXdhcmVEYXlqcywgZGF5anMpXG5cbi8vIEV4cG9ydCB0aGUgRGF5anMgdHlwZSBzZXBhcmF0ZWx5IGZvciB1c2UgYXMgYSB0eXBlIGluIG90aGVyIGZpbGVzLlxuLy8gRmlsZXMgc2hvdWxkIHVzZSAnaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tIFwiQC9saWIvY29uZmlncy9kYXlqcy1jb25maWdcIidcbmV4cG9ydCB0eXBlIHsgRGF5anMsIE1hbmlwdWxhdGVUeXBlLCBPcFVuaXRUeXBlIH0gZnJvbSAnZGF5anMnXG5leHBvcnQgZGVmYXVsdCB0aW1lem9uZUF3YXJlRGF5anMgYXMgdHlwZW9mIGRheWpzXG4iLAogICAgImltcG9ydCB0eXBlIHsgV2Vla0RheXMgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5cbmV4cG9ydCBjb25zdCBHQVBfQkVUV0VFTl9FTEVNRU5UUyA9IDEgLy8gcHggKGdhcC0xKVxuZXhwb3J0IGNvbnN0IERBWV9OVU1CRVJfSEVJR0hUID0gMjQgLy8gcHggKGgtNilcbmV4cG9ydCBjb25zdCBFVkVOVF9CQVJfSEVJR0hUID0gMjQgLy8gcHggKGgtWzI0cHhdKVxuZXhwb3J0IGNvbnN0IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQgPSA0IC8vIERlZmF1bHQgbWF4IGV2ZW50cyBwZXIgZGF5XG5leHBvcnQgY29uc3QgRElTQUJMRURfQ0VMTF9DTEFTU05BTUUgPVxuXHQnYmctc2Vjb25kYXJ5IHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwb2ludGVyLWV2ZW50cy1ub25lJ1xuXG5leHBvcnQgY29uc3QgV0VFS19EQVlTX05VTUJFUl9NQVA6IFJlY29yZDxXZWVrRGF5cywgbnVtYmVyPiA9IHtcblx0c3VuZGF5OiAwLFxuXHRtb25kYXk6IDEsXG5cdHR1ZXNkYXk6IDIsXG5cdHdlZG5lc2RheTogMyxcblx0dGh1cnNkYXk6IDQsXG5cdGZyaWRheTogNSxcblx0c2F0dXJkYXk6IDYsXG59XG5cbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX1RPX1dFRUtfREFZUzogUmVjb3JkPG51bWJlciwgV2Vla0RheXM+ID0ge1xuXHQwOiAnc3VuZGF5Jyxcblx0MTogJ21vbmRheScsXG5cdDI6ICd0dWVzZGF5Jyxcblx0MzogJ3dlZG5lc2RheScsXG5cdDQ6ICd0aHVyc2RheScsXG5cdDU6ICdmcmlkYXknLFxuXHQ2OiAnc2F0dXJkYXknLFxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7XG5cdERyYWdDYW5jZWxFdmVudCxcblx0RHJhZ0VuZEV2ZW50LFxuXHREcmFnU3RhcnRFdmVudCxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7XG5cdERuZENvbnRleHQsXG5cdE1vdXNlU2Vuc29yLFxuXHRwb2ludGVyV2l0aGluLFxuXHRUb3VjaFNlbnNvcixcblx0dXNlU2Vuc29yLFxuXHR1c2VTZW5zb3JzLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdERpYWxvZyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyBpc1JlY3VycmluZ0V2ZW50IH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGdldFVwZGF0ZWRFdmVudCB9IGZyb20gJy4vZG5kLXV0aWxzJ1xuaW1wb3J0IHsgRXZlbnREcmFnT3ZlcmxheSB9IGZyb20gJy4vZXZlbnQtZHJhZy1vdmVybGF5J1xuXG5pbnRlcmZhY2UgQ2FsZW5kYXJEbmRDb250ZXh0UHJvcHMge1xuXHRjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG59XG5cbmNvbnN0IENMT1NFRF9ESUFMT0cgPSB7XG5cdGlzT3BlbjogZmFsc2UsXG5cdGV2ZW50OiBudWxsLFxuXHR1cGRhdGVzOiBudWxsLFxufSBhcyBjb25zdFxuXG5leHBvcnQgZnVuY3Rpb24gQ2FsZW5kYXJEbmRDb250ZXh0KHsgY2hpbGRyZW4gfTogQ2FsZW5kYXJEbmRDb250ZXh0UHJvcHMpIHtcblx0Y29uc3QgYWN0aXZlRXZlbnRSZWYgPSB1c2VSZWY8Q2FsZW5kYXJFdmVudD4obnVsbClcblx0Y29uc3QgZHJhZ092ZXJsYXlSZWYgPSB1c2VSZWY8e1xuXHRcdHNldEFjdGl2ZUV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsKSA9PiB2b2lkXG5cdH0+KG51bGwpXG5cblx0Y29uc3QgeyB1cGRhdGVFdmVudCwgdXBkYXRlUmVjdXJyaW5nRXZlbnQsIGRpc2FibGVEcmFnQW5kRHJvcCB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHRcdHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuXHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQudXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3A6IGNvbnRleHQuZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdH0pKVxuXG5cdC8vIFN0YXRlIGZvciByZWN1cnJpbmcgZXZlbnQgZGlhbG9nXG5cdGNvbnN0IFtyZWN1cnJpbmdEaWFsb2csIHNldFJlY3VycmluZ0RpYWxvZ10gPSB1c2VTdGF0ZTx7XG5cdFx0aXNPcGVuOiBib29sZWFuXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PiB8IG51bGxcblx0fT4oe1xuXHRcdGlzT3BlbjogZmFsc2UsXG5cdFx0ZXZlbnQ6IG51bGwsXG5cdFx0dXBkYXRlczogbnVsbCxcblx0fSlcblxuXHQvLyBDb25maWd1cmUgc2Vuc29ycyB3aXRoIHJlZHVjZWQgYWN0aXZhdGlvbiBjb25zdHJhaW50cyBmb3IgZWFzaWVyIGRyYWdnaW5nXG5cdGNvbnN0IG1vdXNlU2Vuc29yID0gdXNlU2Vuc29yKE1vdXNlU2Vuc29yLCB7XG5cdFx0Ly8gUmVxdWlyZSBtaW5pbWFsIG1vdmVtZW50IGJlZm9yZSBhY3RpdmF0aW5nXG5cdFx0YWN0aXZhdGlvbkNvbnN0cmFpbnQ6IHtcblx0XHRcdGRpc3RhbmNlOiAyLFxuXHRcdH0sXG5cdH0pXG5cblx0Y29uc3QgdG91Y2hTZW5zb3IgPSB1c2VTZW5zb3IoVG91Y2hTZW5zb3IsIHtcblx0XHQvLyBSZWR1Y2UgZGVsYXkgZm9yIHRvdWNoIGRldmljZXNcblx0XHRhY3RpdmF0aW9uQ29uc3RyYWludDoge1xuXHRcdFx0ZGVsYXk6IDEwMCxcblx0XHRcdHRvbGVyYW5jZTogNSxcblx0XHR9LFxuXHR9KVxuXG5cdGNvbnN0IHNlbnNvcnMgPSB1c2VTZW5zb3JzKG1vdXNlU2Vuc29yLCB0b3VjaFNlbnNvcilcblxuXHQvLyBIZWxwZXIgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgYWN0dWFsIGV2ZW50IHVwZGF0ZVxuXHRjb25zdCBwZXJmb3JtRXZlbnRVcGRhdGUgPSAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHQpID0+IHtcblx0XHRpZiAoIWV2ZW50Py5pZCB8fCAhdXBkYXRlcyB8fCBPYmplY3Qua2V5cyh1cGRhdGVzKS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGlmIChpc1JlY3VycmluZ0V2ZW50KGV2ZW50KSkge1xuXHRcdFx0Ly8gUmVjdXJyaW5nIGV2ZW50czogcHJvbXB0IHRoZSB1c2VyIHZpYSBkaWFsb2cgYmVmb3JlIGFwcGx5aW5nLlxuXHRcdFx0c2V0UmVjdXJyaW5nRGlhbG9nKHsgaXNPcGVuOiB0cnVlLCBldmVudCwgdXBkYXRlcyB9KVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR1cGRhdGVFdmVudChldmVudC5pZCwgdXBkYXRlcylcblx0XHR9XG5cdH1cblxuXHQvLyBIYW5kbGUgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZyBjb25maXJtYXRpb25cblx0Y29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDb25maXJtID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0aWYgKCFyZWN1cnJpbmdEaWFsb2cuZXZlbnQgfHwgIXJlY3VycmluZ0RpYWxvZy51cGRhdGVzKSB7XG5cdFx0XHRzZXRSZWN1cnJpbmdEaWFsb2coQ0xPU0VEX0RJQUxPRylcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudChyZWN1cnJpbmdEaWFsb2cuZXZlbnQsIHJlY3VycmluZ0RpYWxvZy51cGRhdGVzLCB7XG5cdFx0XHRcdHNjb3BlLFxuXHRcdFx0XHRldmVudERhdGU6IHJlY3VycmluZ0RpYWxvZy5ldmVudC5zdGFydCxcblx0XHRcdH0pXG5cdFx0fSBjYXRjaCB7XG5cdFx0XHQvLyBTaWxlbnRseSBoYW5kbGUgZXJyb3IgYW5kIHJlc2V0IGRpYWxvZyBzdGF0ZVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRzZXRSZWN1cnJpbmdEaWFsb2coQ0xPU0VEX0RJQUxPRylcblx0XHR9XG5cdH1cblxuXHQvLyBIYW5kbGUgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZyBjbG9zZVxuXHRjb25zdCBoYW5kbGVSZWN1cnJpbmdFdmVudENsb3NlID0gKCkgPT4ge1xuXHRcdHNldFJlY3VycmluZ0RpYWxvZyhDTE9TRURfRElBTE9HKVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ1N0YXJ0ID0gKGV2ZW50OiBEcmFnU3RhcnRFdmVudCkgPT4ge1xuXHRcdGNvbnN0IHsgYWN0aXZlIH0gPSBldmVudFxuXG5cdFx0Ly8gU2V0IHRoZSBhY3RpdmUgZXZlbnQgYmFzZWQgb24gdGhlIGV2ZW50IGRhdGFcblx0XHRpZiAoYWN0aXZlLmRhdGEuY3VycmVudD8udHlwZSA9PT0gJ2NhbGVuZGFyLWV2ZW50Jykge1xuXHRcdFx0ZHJhZ092ZXJsYXlSZWYuY3VycmVudD8uc2V0QWN0aXZlRXZlbnQoYWN0aXZlLmRhdGEuY3VycmVudC5ldmVudClcblx0XHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBhY3RpdmUuZGF0YS5jdXJyZW50LmV2ZW50XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ0VuZCA9IChldmVudDogRHJhZ0VuZEV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgdXBkYXRlZEV2ZW50ID0gZ2V0VXBkYXRlZEV2ZW50KGV2ZW50LCBhY3RpdmVFdmVudFJlZi5jdXJyZW50KVxuXHRcdGlmICh1cGRhdGVkRXZlbnQpIHtcblx0XHRcdGNvbnN0IHsgYWN0aXZlRXZlbnQsIHVwZGF0ZXMgfSA9IHVwZGF0ZWRFdmVudFxuXHRcdFx0cGVyZm9ybUV2ZW50VXBkYXRlKGFjdGl2ZUV2ZW50LCB1cGRhdGVzKVxuXHRcdH1cblxuXHRcdC8vIENsZWFyIHRoZSBhY3RpdmUgZXZlbnQgcmVmZXJlbmNlXG5cdFx0YWN0aXZlRXZlbnRSZWYuY3VycmVudCA9IG51bGxcblx0XHRkcmFnT3ZlcmxheVJlZi5jdXJyZW50Py5zZXRBY3RpdmVFdmVudChudWxsKVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ0NhbmNlbCA9IChfZXZlbnQ6IERyYWdDYW5jZWxFdmVudCkgPT4ge1xuXHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBudWxsXG5cdH1cblxuXHQvLyBJZiBkcmFnIGFuZCBkcm9wIGlzIGRpc2FibGVkLCBqdXN0IHJldHVybiBjaGlsZHJlbiB3aXRob3V0IERuZENvbnRleHRcblx0aWYgKGRpc2FibGVEcmFnQW5kRHJvcCkge1xuXHRcdHJldHVybiBjaGlsZHJlbiBhcyBSZWFjdC5SZWFjdEVsZW1lbnRcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxEbmRDb250ZXh0XG5cdFx0XHRcdGNvbGxpc2lvbkRldGVjdGlvbj17cG9pbnRlcldpdGhpbn1cblx0XHRcdFx0b25EcmFnQ2FuY2VsPXtoYW5kbGVEcmFnQ2FuY2VsfVxuXHRcdFx0XHRvbkRyYWdFbmQ9e2hhbmRsZURyYWdFbmR9XG5cdFx0XHRcdG9uRHJhZ1N0YXJ0PXtoYW5kbGVEcmFnU3RhcnR9XG5cdFx0XHRcdHNlbnNvcnM9e3NlbnNvcnN9XG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PEV2ZW50RHJhZ092ZXJsYXkgcmVmPXtkcmFnT3ZlcmxheVJlZn0gLz5cblx0XHRcdDwvRG5kQ29udGV4dD5cblxuXHRcdFx0ey8qIFJlY3VycmluZyBldmVudCBlZGl0IGRpYWxvZyAqL31cblx0XHRcdDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuXHRcdFx0XHRldmVudFRpdGxlPXtyZWN1cnJpbmdEaWFsb2cuZXZlbnQ/LnRpdGxlIHx8ICcnfVxuXHRcdFx0XHRpc09wZW49e3JlY3VycmluZ0RpYWxvZy5pc09wZW59XG5cdFx0XHRcdG9uQ2xvc2U9e2hhbmRsZVJlY3VycmluZ0V2ZW50Q2xvc2V9XG5cdFx0XHRcdG9uQ29uZmlybT17aGFuZGxlUmVjdXJyaW5nRXZlbnRDb25maXJtfVxuXHRcdFx0XHRvcGVyYXRpb25UeXBlPVwiZWRpdFwiXG5cdFx0XHQvPlxuXHRcdDwvPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IFNsb3QgfSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2xvdCdcbmltcG9ydCB0eXBlIHsgVmFyaWFudFByb3BzIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5J1xuaW1wb3J0IHsgY3ZhIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgYnV0dG9uVmFyaWFudHMgPSBjdmEoXG5cdFwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHdoaXRlc3BhY2Utbm93cmFwIHJvdW5kZWQtbWQgdGV4dC1zbSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWFsbCBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNCBzaHJpbmstMCBbJl9zdmddOnNocmluay0wIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmVcIixcblx0e1xuXHRcdHZhcmlhbnRzOiB7XG5cdFx0XHR2YXJpYW50OiB7XG5cdFx0XHRcdGRlZmF1bHQ6ICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXByaW1hcnkvOTAnLFxuXHRcdFx0XHRkZXN0cnVjdGl2ZTpcblx0XHRcdFx0XHQnYmctZGVzdHJ1Y3RpdmUgdGV4dC13aGl0ZSBob3ZlcjpiZy1kZXN0cnVjdGl2ZS85MCBmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazpmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvNDAgZGFyazpiZy1kZXN0cnVjdGl2ZS82MCcsXG5cdFx0XHRcdG91dGxpbmU6XG5cdFx0XHRcdFx0J2JvcmRlciBiZy1iYWNrZ3JvdW5kIHNoYWRvdy14cyBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmJnLWlucHV0LzMwIGRhcms6Ym9yZGVyLWlucHV0IGRhcms6aG92ZXI6YmctaW5wdXQvNTAnLFxuXHRcdFx0XHRzZWNvbmRhcnk6XG5cdFx0XHRcdFx0J2JnLXNlY29uZGFyeSB0ZXh0LXNlY29uZGFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXNlY29uZGFyeS84MCcsXG5cdFx0XHRcdGdob3N0OlxuXHRcdFx0XHRcdCdob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmhvdmVyOmJnLWFjY2VudC81MCcsXG5cdFx0XHRcdGxpbms6ICd0ZXh0LXByaW1hcnkgdW5kZXJsaW5lLW9mZnNldC00IGhvdmVyOnVuZGVybGluZScsXG5cdFx0XHR9LFxuXHRcdFx0c2l6ZToge1xuXHRcdFx0XHRkZWZhdWx0OiAnaC05IHB4LTQgcHktMiBoYXMtWz5zdmddOnB4LTMnLFxuXHRcdFx0XHRzbTogJ2gtOCByb3VuZGVkLW1kIGdhcC0xLjUgcHgtMyBoYXMtWz5zdmddOnB4LTIuNScsXG5cdFx0XHRcdGxnOiAnaC0xMCByb3VuZGVkLW1kIHB4LTYgaGFzLVs+c3ZnXTpweC00Jyxcblx0XHRcdFx0aWNvbjogJ3NpemUtOScsXG5cdFx0XHRcdCdpY29uLXNtJzogJ3NpemUtOCcsXG5cdFx0XHRcdCdpY29uLWxnJzogJ3NpemUtMTAnLFxuXHRcdFx0fSxcblx0XHR9LFxuXHRcdGRlZmF1bHRWYXJpYW50czoge1xuXHRcdFx0dmFyaWFudDogJ2RlZmF1bHQnLFxuXHRcdFx0c2l6ZTogJ2RlZmF1bHQnLFxuXHRcdH0sXG5cdH1cbilcblxuZnVuY3Rpb24gQnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHR2YXJpYW50LFxuXHRzaXplLFxuXHRhc0NoaWxkID0gZmFsc2UsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczwnYnV0dG9uJz4gJlxuXHRWYXJpYW50UHJvcHM8dHlwZW9mIGJ1dHRvblZhcmlhbnRzPiAmIHtcblx0XHRhc0NoaWxkPzogYm9vbGVhblxuXHR9KSB7XG5cdGNvbnN0IENvbXAgPSBhc0NoaWxkID8gU2xvdCA6ICdidXR0b24nXG5cblx0cmV0dXJuIChcblx0XHQ8Q29tcFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihidXR0b25WYXJpYW50cyh7IHZhcmlhbnQsIHNpemUsIGNsYXNzTmFtZSB9KSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJidXR0b25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHsgQnV0dG9uLCBidXR0b25WYXJpYW50cyB9XG4iLAogICAgImltcG9ydCAqIGFzIERpYWxvZ1ByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtZGlhbG9nJ1xuaW1wb3J0IHsgWEljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBEaWFsb2coe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cImRpYWxvZ1wiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nVHJpZ2dlcih7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlRyaWdnZXI+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwiZGlhbG9nLXRyaWdnZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ1BvcnRhbCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlBvcnRhbD4pIHtcblx0cmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Nsb3NlKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ2xvc2U+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLkNsb3NlIGRhdGEtc2xvdD1cImRpYWxvZy1jbG9zZVwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nT3ZlcmxheSh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuT3ZlcmxheT4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUHJpbWl0aXZlLk92ZXJsYXlcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBmaXhlZCBpbnNldC0wIHotNTAgYmctYmxhY2svNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctb3ZlcmxheVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dDb250ZW50KHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ29udGVudD4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIj5cblx0XHRcdDxEaWFsb2dPdmVybGF5IC8+XG5cdFx0XHQ8RGlhbG9nUHJpbWl0aXZlLkNvbnRlbnRcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnYmctYmFja2dyb3VuZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZml4ZWQgdG9wLVs1MCVdIGxlZnQtWzUwJV0gei01MCBncmlkIHctZnVsbCBtYXgtdy1bY2FsYygxMDAlLTJyZW0pXSB0cmFuc2xhdGUteC1bLTUwJV0gdHJhbnNsYXRlLXktWy01MCVdIGdhcC00IHJvdW5kZWQtbGcgYm9yZGVyIHAtNiBzaGFkb3ctbGcgZHVyYXRpb24tMjAwIHNtOm1heC13LWxnIG1heC1oLVs5MCVdJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWNvbnRlbnRcIlxuXHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PERpYWxvZ1ByaW1pdGl2ZS5DbG9zZSBjbGFzc05hbWU9XCJyaW5nLW9mZnNldC1iYWNrZ3JvdW5kIGZvY3VzOnJpbmctcmluZyBkYXRhLVtzdGF0ZT1vcGVuXTpiZy1hY2NlbnQgZGF0YS1bc3RhdGU9b3Blbl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGFic29sdXRlIHRvcC00IHJpZ2h0LTQgcm91bmRlZC14cyBvcGFjaXR5LTcwIHRyYW5zaXRpb24tb3BhY2l0eSBob3ZlcjpvcGFjaXR5LTEwMCBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1vZmZzZXQtMiBmb2N1czpvdXRsaW5lLWhpZGRlbiBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNFwiPlxuXHRcdFx0XHRcdDxYSWNvbiAvPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cblx0XHRcdFx0PC9EaWFsb2dQcmltaXRpdmUuQ2xvc2U+XG5cdFx0XHQ8L0RpYWxvZ1ByaW1pdGl2ZS5Db250ZW50PlxuXHRcdDwvRGlhbG9nUG9ydGFsPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0hlYWRlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LWNvbCBnYXAtMiB0ZXh0LWNlbnRlciBzbTp0ZXh0LWxlZnQnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWhlYWRlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dGb290ZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgc206ZmxleC1yb3cgc206anVzdGlmeS1lbmQnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctZm9vdGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ1RpdGxlKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5UaXRsZT4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUHJpbWl0aXZlLlRpdGxlXG5cdFx0XHRjbGFzc05hbWU9e2NuKCd0ZXh0LWxnIGxlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy10aXRsZVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dEZXNjcmlwdGlvbih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuRGVzY3JpcHRpb24+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20nLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWRlc2NyaXB0aW9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ2xvc2UsXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0Rlc2NyaXB0aW9uLFxuXHREaWFsb2dGb290ZXIsXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nT3ZlcmxheSxcblx0RGlhbG9nUG9ydGFsLFxuXHREaWFsb2dUaXRsZSxcblx0RGlhbG9nVHJpZ2dlcixcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3IH0gZnJvbSAnQC90eXBlcydcblxuLyoqXG4gKiBGdWxsIGludGVybmFsIGNvbnRleHQgdHlwZSB1c2VkIGJ5IGxpYnJhcnkgY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgU21hcnRDYWxlbmRhckNvbnRleHRUeXBlID0gUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlXG5cbi8qKlxuICogUHVibGljbHkgZXhwb3NlZCBjYWxlbmRhciBjb250ZXh0IHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4ge1xuXHRyZWFkb25seSBjdXJyZW50RGF0ZTogRGF5anNcblx0cmVhZG9ubHkgdmlldzogQ2FsZW5kYXJWaWV3XG5cdHJlYWRvbmx5IGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHJlYWRvbmx5IGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuXHRyZWFkb25seSBzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRyZWFkb25seSBzZWxlY3RlZERhdGU6IERheWpzIHwgbnVsbFxuXHRyZWFkb25seSBmaXJzdERheU9mV2VlazogbnVtYmVyXG5cdHJlYWRvbmx5IHJlc291cmNlczogUmVzb3VyY2VbXVxuXHRyZWFkb25seSBzZXRDdXJyZW50RGF0ZTogKGRhdGU6IERheWpzKSA9PiB2b2lkXG5cdHJlYWRvbmx5IHNlbGVjdERhdGU6IChkYXRlOiBEYXlqcykgPT4gdm9pZFxuXHRyZWFkb25seSBzZXRWaWV3OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdHJlYWRvbmx5IG5leHRQZXJpb2Q6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgcHJldlBlcmlvZDogKCkgPT4gdm9pZFxuXHRyZWFkb25seSB0b2RheTogKCkgPT4gdm9pZFxuXHRyZWFkb25seSBhZGRFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdHJlYWRvbmx5IHVwZGF0ZUV2ZW50OiAoXG5cdFx0ZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdCkgPT4gdm9pZFxuXHRyZWFkb25seSBkZWxldGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcikgPT4gdm9pZFxuXHRyZWFkb25seSBvcGVuRXZlbnRGb3JtOiAoZXZlbnREYXRhPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHRyZWFkb25seSBjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxuXHRyZWFkb25seSBnZXRFdmVudHNGb3JSZXNvdXJjZTogKFxuXHRcdHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlclxuXHQpID0+IENhbGVuZGFyRXZlbnRbXVxuXHRyZWFkb25seSBidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxufVxuXG4vKipcbiAqIEludGVybmFsIGhvb2sgdGhhdCByZXR1cm5zIHRoZSBmdWxsIGNvbnRleHQuXG4gKiBVc2VkIGJ5IGludGVybmFsIHZpZXdzLCBoZWFkZXJzLCBhbmQgZ3JpZCBjb21wb25lbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKTogU21hcnRDYWxlbmRhckNvbnRleHRUeXBlXG5leHBvcnQgZnVuY3Rpb24gdXNlU21hcnRDYWxlbmRhckNvbnRleHQ8VD4oXG5cdHNlbGVjdG9yOiAoY29udGV4dDogU21hcnRDYWxlbmRhckNvbnRleHRUeXBlKSA9PiBUXG4pOiBUXG5leHBvcnQgZnVuY3Rpb24gdXNlU21hcnRDYWxlbmRhckNvbnRleHQ8VD4oXG5cdHNlbGVjdG9yPzogKGNvbnRleHQ6IFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZSkgPT4gVFxuKTogVCB8IFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZSB7XG5cdGNvbnN0IHJlc291cmNlQ29udGV4dCA9IHVzZUNvbnRleHQoUmVzb3VyY2VDYWxlbmRhckNvbnRleHQpXG5cdGNvbnN0IHJlZ3VsYXJDb250ZXh0ID0gdXNlQ29udGV4dChDYWxlbmRhckNvbnRleHQpXG5cblx0Ly8gSW4gcmVndWxhciBjYWxlbmRhcnMsIHJlc291cmNlLXNwZWNpZmljIGZpZWxkcyB3aWxsIGJlIHVuZGVmaW5lZC5cblx0Y29uc3QgY29udGV4dCA9IChyZXNvdXJjZUNvbnRleHQgfHxcblx0XHRyZWd1bGFyQ29udGV4dCkgYXMgU21hcnRDYWxlbmRhckNvbnRleHRUeXBlXG5cblx0aWYgKCFjb250ZXh0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0J3VzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBDYWxlbmRhclByb3ZpZGVyIG9yIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlcidcblx0XHQpXG5cdH1cblxuXHRyZXR1cm4gc2VsZWN0b3IgPyBzZWxlY3Rvcihjb250ZXh0KSA6IGNvbnRleHRcbn1cblxuLyoqXG4gKiBQdWJsaWMgaG9vayBleHBvcnRlZCBmb3IgbGlicmFyeSB1c2Vycy5cbiAqIFJldHVybnMgYSBsaW1pdGVkIHNldCBvZiBjb21tb25seSB1c2VkIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VJbGFteUNhbGVuZGFyQ29udGV4dCgpOiBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB7XG5cdGNvbnN0IGNvbnRleHQgPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0cmV0dXJuIHtcblx0XHRjdXJyZW50RGF0ZTogY29udGV4dC5jdXJyZW50RGF0ZSxcblx0XHR2aWV3OiBjb250ZXh0LnZpZXcsXG5cdFx0ZXZlbnRzOiBjb250ZXh0LmV2ZW50cyxcblx0XHRpc0V2ZW50Rm9ybU9wZW46IGNvbnRleHQuaXNFdmVudEZvcm1PcGVuLFxuXHRcdHNlbGVjdGVkRXZlbnQ6IGNvbnRleHQuc2VsZWN0ZWRFdmVudCxcblx0XHRzZWxlY3RlZERhdGU6IGNvbnRleHQuc2VsZWN0ZWREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrOiBjb250ZXh0LmZpcnN0RGF5T2ZXZWVrLFxuXHRcdHJlc291cmNlczogY29udGV4dC5yZXNvdXJjZXMgfHwgW10sXG5cdFx0c2V0Q3VycmVudERhdGU6IGNvbnRleHQuc2V0Q3VycmVudERhdGUsXG5cdFx0c2VsZWN0RGF0ZTogY29udGV4dC5zZWxlY3REYXRlLFxuXHRcdHNldFZpZXc6IGNvbnRleHQuc2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kOiBjb250ZXh0Lm5leHRQZXJpb2QsXG5cdFx0cHJldlBlcmlvZDogY29udGV4dC5wcmV2UGVyaW9kLFxuXHRcdHRvZGF5OiBjb250ZXh0LnRvZGF5LFxuXHRcdGFkZEV2ZW50OiBjb250ZXh0LmFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50OiBjb250ZXh0LmRlbGV0ZUV2ZW50LFxuXHRcdG9wZW5FdmVudEZvcm06IGNvbnRleHQub3BlbkV2ZW50Rm9ybSxcblx0XHRjbG9zZUV2ZW50Rm9ybTogY29udGV4dC5jbG9zZUV2ZW50Rm9ybSxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZTogY29udGV4dC5nZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRidXNpbmVzc0hvdXJzOiBjb250ZXh0LmJ1c2luZXNzSG91cnMsXG5cdH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBFdmVudEZvcm1Qcm9wcyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7XG5cdENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlLFxuXHRDZWxsQ2xpY2tJbmZvLFxuXHRSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzLFxuXHRTbG90RHVyYXRpb24sXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0T3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRvckZ1bmN0aW9uIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhclZpZXcsIFRpbWVGb3JtYXQgfSBmcm9tICdAL3R5cGVzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyQ29udGV4dFR5cGUge1xuXHRjdXJyZW50RGF0ZTogRGF5anNcblx0dmlldzogQ2FsZW5kYXJWaWV3XG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHJhd0V2ZW50czogQ2FsZW5kYXJFdmVudFtdIC8vIFVucHJvY2Vzc2VkIGV2ZW50cyBmb3IgZXhwb3J0XG5cdGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuXHRzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRzZWxlY3RlZERhdGU6IERheWpzIHwgbnVsbFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG5cdHNldEN1cnJlbnREYXRlOiAoZGF0ZTogRGF5anMpID0+IHZvaWRcblx0c2VsZWN0RGF0ZTogKGRhdGU6IERheWpzKSA9PiB2b2lkXG5cdHNldFZpZXc6ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcblx0bmV4dFBlcmlvZDogKCkgPT4gdm9pZFxuXHRwcmV2UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHRvZGF5OiAoKSA9PiB2b2lkXG5cdGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0dXBkYXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50Pixcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG5cdGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdCkgPT4gdm9pZFxuXHRvcGVuRXZlbnRGb3JtOiAoZXZlbnREYXRhPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHRjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxuXHRnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IChzdGFydERhdGU6IERheWpzLCBlbmREYXRlOiBEYXlqcykgPT4gQ2FsZW5kYXJFdmVudFtdXG5cdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRyZW5kZXJFdmVudD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdG9uRXZlbnRDbGljazogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uQ2VsbENsaWNrOiAoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4gdm9pZFxuXHRjdXJyZW50TG9jYWxlPzogc3RyaW5nXG5cdHRpbWV6b25lPzogc3RyaW5nXG5cdGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuXHRkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGV2ZW50U3BhY2luZzogbnVtYmVyXG5cdGV2ZW50SGVpZ2h0OiBudW1iZXJcblx0c3RpY2t5Vmlld0hlYWRlcjogYm9vbGVhblxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lOiBzdHJpbmdcblx0aGVhZGVyQ29tcG9uZW50PzogUmVhY3QuUmVhY3ROb2RlIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY29tcG9uZW50XG5cdGhlYWRlckNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNsYXNzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHJlbmRlckV2ZW50Rm9ybT86IChwcm9wczogRXZlbnRGb3JtUHJvcHMpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHQvLyBUcmFuc2xhdGlvbiBmdW5jdGlvblxuXHR0OiBUcmFuc2xhdG9yRnVuY3Rpb25cblx0dGltZUZvcm1hdDogVGltZUZvcm1hdFxuXHRjbGFzc2VzT3ZlcnJpZGU/OiBDYWxlbmRhckNsYXNzZXNPdmVycmlkZVxuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcj86IChcblx0XHRwcm9wczogUmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wc1xuXHQpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRyZW5kZXJIb3VyPzogKGRhdGU6IERheWpzKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG5cdGhpZGVFeHBvcnRCdXR0b24/OiBib29sZWFuXG5cdGhpZGRlbkRheXM/OiBTZXQ8bnVtYmVyPlxuXHRzbG90RHVyYXRpb246IFNsb3REdXJhdGlvblxuXHRzY3JvbGxUaW1lPzogc3RyaW5nXG59XG5cbi8vIENhbGVuZGFyQ29udGV4dCBpcyBrZXB0IGZvciBpbnRlcm5hbCBQcm92aWRlciB1c2FnZVxuZXhwb3J0IGNvbnN0IENhbGVuZGFyQ29udGV4dDogUmVhY3QuQ29udGV4dDxDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPiA9XG5cdGNyZWF0ZUNvbnRleHQ8Q2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuIiwKICAgICJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyQ29udGV4dFR5cGUgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB0eXBlIHsgQ2VsbENsaWNrSW5mbyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgZXh0ZW5kcyBDYWxlbmRhckNvbnRleHRUeXBlIHtcblx0Ly8gUmVzb3VyY2Utc3BlY2lmaWMgc3RhdGVcblx0cmVzb3VyY2VzOiBSZXNvdXJjZVtdXG5cblx0Ly8gUmVzb3VyY2UgdXRpbGl0aWVzXG5cdGdldEV2ZW50c0ZvclJlc291cmNlOiAocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBDYWxlbmRhckV2ZW50W11cblx0Z2V0RXZlbnRzRm9yUmVzb3VyY2VzOiAocmVzb3VyY2VJZHM6IChzdHJpbmcgfCBudW1iZXIpW10pID0+IENhbGVuZGFyRXZlbnRbXVxuXHRnZXRSZXNvdXJjZUJ5SWQ6IChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IFJlc291cmNlIHwgdW5kZWZpbmVkXG5cblx0Ly8gQ3Jvc3MtcmVzb3VyY2UgZXZlbnQgdXRpbGl0aWVzXG5cdGlzRXZlbnRDcm9zc1Jlc291cmNlOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IGJvb2xlYW5cblx0Z2V0RXZlbnRSZXNvdXJjZUlkczogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiAoc3RyaW5nIHwgbnVtYmVyKVtdXG5cblx0Ly8gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIGZyb20gY2FsZW5kYXIgY29udGV4dFxuXHRvbkV2ZW50Q2xpY2s6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkNlbGxDbGljazogKGluZm86IENlbGxDbGlja0luZm8pID0+IHZvaWRcblx0cmVuZGVyUmVzb3VyY2U/OiAocmVzb3VyY2U6IFJlc291cmNlKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0b3JpZW50YXRpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCdcblx0d2Vla1ZpZXdHcmFudWxhcml0eTogJ2hvdXJseScgfCAnZGFpbHknXG59XG5cbi8vIFJlc291cmNlQ2FsZW5kYXJDb250ZXh0IGlzIGtlcHQgZm9yIGludGVybmFsIFByb3ZpZGVyIHVzYWdlXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhckNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8XG5cdFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZFxuPiA9IGNyZWF0ZUNvbnRleHQ8UmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJQcm92aWRlclByb3BzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNsYXNzZXNPdmVycmlkZSxcblx0Q2VsbENsaWNrSW5mbyxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcblx0U2xvdER1cmF0aW9uLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckVuZ2luZSB9IGZyb20gJ0AvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZSdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEVWRU5UX0JBUl9IRUlHSFQgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCdcblxuY29uc3QgZ2V0RXZlbnRSZXNvdXJjZUlkcyA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IChzdHJpbmcgfCBudW1iZXIpW10gPT4ge1xuXHRpZiAoZXZlbnQucmVzb3VyY2VJZHMpIHtcblx0XHRyZXR1cm4gZXZlbnQucmVzb3VyY2VJZHNcblx0fVxuXHRpZiAoZXZlbnQucmVzb3VyY2VJZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIFtldmVudC5yZXNvdXJjZUlkXVxuXHR9XG5cdHJldHVybiBbXVxufVxuXG5pbnRlcmZhY2UgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBDYWxlbmRhclByb3ZpZGVyUHJvcHMge1xuXHRldmVudHM/OiBDYWxlbmRhckV2ZW50W11cblx0cmVzb3VyY2VzPzogUmVzb3VyY2VbXVxuXHRyZW5kZXJSZXNvdXJjZT86IChyZXNvdXJjZTogUmVzb3VyY2UpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc2VzT3ZlcnJpZGU/OiBDYWxlbmRhckNsYXNzZXNPdmVycmlkZVxuXHRvcmllbnRhdGlvbj86ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCdcblx0d2Vla1ZpZXdHcmFudWxhcml0eT86ICdob3VybHknIHwgJ2RhaWx5J1xuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcj86IChcblx0XHRwcm9wczogUmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wc1xuXHQpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRyZW5kZXJIb3VyPzogKGRhdGU6IERheWpzKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG5cdHNsb3REdXJhdGlvbj86IFNsb3REdXJhdGlvblxuXHRzY3JvbGxUaW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXI6IFJlYWN0LkZDPFxuXHRSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXJQcm9wc1xuPiA9ICh7XG5cdGNoaWxkcmVuLFxuXHRldmVudHMgPSBbXSxcblx0cmVzb3VyY2VzID0gW10sXG5cdGZpcnN0RGF5T2ZXZWVrID0gMCxcblx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRpbml0aWFsRGF0ZSxcblx0cmVuZGVyRXZlbnQsXG5cdG9uRXZlbnRDbGljayxcblx0b25DZWxsQ2xpY2ssXG5cdG9uVmlld0NoYW5nZSxcblx0b25FdmVudEFkZCxcblx0b25FdmVudFVwZGF0ZSxcblx0b25FdmVudERlbGV0ZSxcblx0b25EYXRlQ2hhbmdlLFxuXHRsb2NhbGUsXG5cdHRpbWV6b25lLFxuXHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRkaXNhYmxlRXZlbnRDbGljayxcblx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRkYXlNYXhFdmVudHMsXG5cdGV2ZW50U3BhY2luZyA9IDEsXG5cdGV2ZW50SGVpZ2h0ID0gRVZFTlRfQkFSX0hFSUdIVCxcblx0c3RpY2t5Vmlld0hlYWRlciA9IHRydWUsXG5cdHZpZXdIZWFkZXJDbGFzc05hbWUgPSAnJyxcblx0aGVhZGVyQ29tcG9uZW50LFxuXHRoZWFkZXJDbGFzc05hbWUsXG5cdHRyYW5zbGF0aW9ucyxcblx0dHJhbnNsYXRvcixcblx0cmVuZGVyUmVzb3VyY2UsXG5cdHJlbmRlckV2ZW50Rm9ybSxcblx0YnVzaW5lc3NIb3Vycyxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRvcmllbnRhdGlvbiA9ICdob3Jpem9udGFsJyxcblx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdHJlbmRlckhvdXIsXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzID0gZmFsc2UsXG5cdGhpZGVFeHBvcnRCdXR0b24gPSBmYWxzZSxcblx0aGlkZGVuRGF5cyxcblx0d2Vla1ZpZXdHcmFudWxhcml0eSA9ICdob3VybHknLFxuXHRzbG90RHVyYXRpb24gPSA2MCxcblx0c2Nyb2xsVGltZSxcbn0pID0+IHtcblx0Ly8gVXNlIHRoZSBjYWxlbmRhciBlbmdpbmVcblx0Y29uc3QgY2FsZW5kYXJFbmdpbmUgPSB1c2VDYWxlbmRhckVuZ2luZSh7XG5cdFx0ZXZlbnRzLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGluaXRpYWxWaWV3LFxuXHRcdGluaXRpYWxEYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0b25FdmVudEFkZCxcblx0XHRvbkV2ZW50VXBkYXRlLFxuXHRcdG9uRXZlbnREZWxldGUsXG5cdFx0b25EYXRlQ2hhbmdlLFxuXHRcdG9uVmlld0NoYW5nZTogb25WaWV3Q2hhbmdlLFxuXHRcdGxvY2FsZSxcblx0XHR0aW1lem9uZSxcblx0XHR0cmFuc2xhdGlvbnMsXG5cdFx0dHJhbnNsYXRvcixcblx0fSlcblxuXHQvLyBFdmVudCB1dGlsaXRpZXMg4oCUIGJvdGggZmlsdGVycyBnbyB0aHJvdWdoIGdldEV2ZW50UmVzb3VyY2VJZHMgc28gc2luZ2xlXG5cdC8vIGFuZCBtdWx0aS1yZXNvdXJjZSBldmVudHMgYXJlIGhhbmRsZWQgdW5pZm9ybWx5LlxuXHRjb25zdCBnZXRFdmVudHNGb3JSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBDYWxlbmRhckV2ZW50W10gPT5cblx0XHRcdGNhbGVuZGFyRW5naW5lLmV2ZW50cy5maWx0ZXIoKGUpID0+XG5cdFx0XHRcdGdldEV2ZW50UmVzb3VyY2VJZHMoZSkuaW5jbHVkZXMocmVzb3VyY2VJZClcblx0XHRcdCksXG5cdFx0W2NhbGVuZGFyRW5naW5lLmV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldEV2ZW50c0ZvclJlc291cmNlcyA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkczogKHN0cmluZyB8IG51bWJlcilbXSk6IENhbGVuZGFyRXZlbnRbXSA9PlxuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuZXZlbnRzLmZpbHRlcigoZSkgPT5cblx0XHRcdFx0Z2V0RXZlbnRSZXNvdXJjZUlkcyhlKS5zb21lKChpZCkgPT4gcmVzb3VyY2VJZHMuaW5jbHVkZXMoaWQpKVxuXHRcdFx0KSxcblx0XHRbY2FsZW5kYXJFbmdpbmUuZXZlbnRzXVxuXHQpXG5cblx0Y29uc3QgZ2V0UmVzb3VyY2VCeUlkID0gdXNlQ2FsbGJhY2soXG5cdFx0KHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcik6IFJlc291cmNlIHwgdW5kZWZpbmVkID0+IHtcblx0XHRcdHJldHVybiByZXNvdXJjZXMuZmluZCgocmVzb3VyY2UpID0+IHJlc291cmNlLmlkID09PSByZXNvdXJjZUlkKVxuXHRcdH0sXG5cdFx0W3Jlc291cmNlc11cblx0KVxuXG5cdC8vIENyb3NzLXJlc291cmNlIGV2ZW50IHV0aWxpdGllc1xuXHRjb25zdCBpc0V2ZW50Q3Jvc3NSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKChldmVudDogQ2FsZW5kYXJFdmVudCk6IGJvb2xlYW4gPT4ge1xuXHRcdHJldHVybiBCb29sZWFuKGV2ZW50LnJlc291cmNlSWRzICYmIGV2ZW50LnJlc291cmNlSWRzLmxlbmd0aCA+IDEpXG5cdH0sIFtdKVxuXG5cdC8vIEN1c3RvbSBoYW5kbGVyc1xuXHRjb25zdCBlZGl0RXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRXZlbnQoZXZlbnQpXG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcblx0XHR9LFxuXHRcdFtjYWxlbmRhckVuZ2luZV1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZUV2ZW50Q2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGlmIChkaXNhYmxlRXZlbnRDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblx0XHRcdGlmIChvbkV2ZW50Q2xpY2spIHtcblx0XHRcdFx0b25FdmVudENsaWNrKGV2ZW50KVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWRpdEV2ZW50KGV2ZW50KVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W2Rpc2FibGVFdmVudENsaWNrLCBvbkV2ZW50Q2xpY2ssIGVkaXRFdmVudF1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZURhdGVDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUNlbGxDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9uQ2VsbENsaWNrKSB7XG5cdFx0XHRcdG9uQ2VsbENsaWNrKGluZm8pXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBuZXdFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0XHR0aXRsZTogY2FsZW5kYXJFbmdpbmUudCgnbmV3RXZlbnQnKSxcblx0XHRcdFx0XHRzdGFydDogaW5mby5zdGFydCxcblx0XHRcdFx0XHRlbmQ6IGluZm8uZW5kLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiAnJyxcblx0XHRcdFx0XHRhbGxEYXk6IGZhbHNlLFxuXHRcdFx0XHR9IGFzIENhbGVuZGFyRXZlbnRcblxuXHRcdFx0XHRpZiAoaW5mby5yZXNvdXJjZUlkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRuZXdFdmVudC5yZXNvdXJjZUlkID0gaW5mby5yZXNvdXJjZUlkXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KG5ld0V2ZW50KVxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZERhdGUoaW5mby5zdGFydClcblx0XHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbb25DZWxsQ2xpY2ssIGRpc2FibGVDZWxsQ2xpY2ssIGNhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Ly8gQ3JlYXRlIHRoZSBjb250ZXh0IHZhbHVlXG5cdGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdC4uLmNhbGVuZGFyRW5naW5lLFxuXHRcdFx0Ly8gUmVzb3VyY2Utc3BlY2lmaWMgc3RhdGVcblx0XHRcdHJlc291cmNlcyxcblx0XHRcdC8vIFJlc291cmNlIHV0aWxpdGllc1xuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZXMsXG5cdFx0XHRnZXRSZXNvdXJjZUJ5SWQsXG5cdFx0XHRpc0V2ZW50Q3Jvc3NSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50UmVzb3VyY2VJZHMsXG5cdFx0XHQvLyBPdmVycmlkZSBoYW5kbGVyc1xuXHRcdFx0b25FdmVudENsaWNrOiBoYW5kbGVFdmVudENsaWNrLFxuXHRcdFx0b25DZWxsQ2xpY2s6IGhhbmRsZURhdGVDbGljayxcblx0XHRcdC8vIFBhc3MtdGhyb3VnaCBwcm9wc1xuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRyZW5kZXJSZXNvdXJjZSxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0ZXZlbnRIZWlnaHQsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0b3JpZW50YXRpb24sXG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdHJlbmRlckhvdXIsXG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdGhpZGVFeHBvcnRCdXR0b24sXG5cdFx0XHRoaWRkZW5EYXlzLFxuXHRcdFx0d2Vla1ZpZXdHcmFudWxhcml0eSxcblx0XHRcdHNsb3REdXJhdGlvbixcblx0XHRcdHNjcm9sbFRpbWUsXG5cdFx0fSksXG5cdFx0W1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUsXG5cdFx0XHRyZXNvdXJjZXMsXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlcyxcblx0XHRcdGdldFJlc291cmNlQnlJZCxcblx0XHRcdGlzRXZlbnRDcm9zc1Jlc291cmNlLFxuXHRcdFx0aGFuZGxlRXZlbnRDbGljayxcblx0XHRcdGhhbmRsZURhdGVDbGljayxcblx0XHRcdHJlbmRlckV2ZW50LFxuXHRcdFx0cmVuZGVyUmVzb3VyY2UsXG5cdFx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdFx0XHRsb2NhbGUsXG5cdFx0XHR0aW1lem9uZSxcblx0XHRcdGRpc2FibGVDZWxsQ2xpY2ssXG5cdFx0XHRkaXNhYmxlRXZlbnRDbGljayxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdGV2ZW50SGVpZ2h0LFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdG9yaWVudGF0aW9uLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRyZW5kZXJIb3VyLFxuXHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRoaWRlRXhwb3J0QnV0dG9uLFxuXHRcdFx0aGlkZGVuRGF5cyxcblx0XHRcdHdlZWtWaWV3R3JhbnVsYXJpdHksXG5cdFx0XHRzbG90RHVyYXRpb24sXG5cdFx0XHRzY3JvbGxUaW1lLFxuXHRcdF1cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlQ2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvUmVzb3VyY2VDYWxlbmRhckNvbnRleHQuUHJvdmlkZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdE9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQge1xuXHRkZWxldGVSZWN1cnJpbmdFdmVudCBhcyBkZWxldGVSZWN1cnJpbmdFdmVudEltcGwsXG5cdGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzLFxuXHR1cGRhdGVSZWN1cnJpbmdFdmVudCBhcyB1cGRhdGVSZWN1cnJpbmdFdmVudEltcGwsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgZGF5anMsIHtcblx0dHlwZSBEYXlqcyxcblx0dHlwZSBNYW5pcHVsYXRlVHlwZSxcbn0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBkZWZhdWx0VHJhbnNsYXRpb25zIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL2RlZmF1bHQnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucywgVHJhbnNsYXRvckZ1bmN0aW9uIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHsgZ2V0TW9udGhXZWVrcywgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsgZXZlbnRPdmVybGFwc1JhbmdlIH0gZnJvbSAnQC9saWIvdXRpbHMvZXZlbnQtdXRpbHMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldyB9IGZyb20gJ0AvdHlwZXMnXG5pbXBvcnQgeyBEQVlfTUFYX0VWRU5UU19ERUZBVUxUIH0gZnJvbSAnLi4vbGliL2NvbnN0YW50cydcblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhckVuZ2luZUNvbmZpZyB7XG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcblx0aW5pdGlhbFZpZXc/OiBDYWxlbmRhclZpZXdcblx0aW5pdGlhbERhdGU/OiBEYXlqc1xuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRvbkV2ZW50QWRkPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRXZlbnRVcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudERlbGV0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkRhdGVDaGFuZ2U/OiAoZGF0ZTogRGF5anMsIHJhbmdlOiB7IHN0YXJ0OiBEYXlqczsgZW5kOiBEYXlqcyB9KSA9PiB2b2lkXG5cdG9uVmlld0NoYW5nZT86ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcblx0bG9jYWxlPzogc3RyaW5nXG5cdHRpbWV6b25lPzogc3RyaW5nXG5cdHRyYW5zbGF0aW9ucz86IFRyYW5zbGF0aW9uc1xuXHR0cmFuc2xhdG9yPzogVHJhbnNsYXRvckZ1bmN0aW9uXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJFbmdpbmVSZXR1cm4ge1xuXHRjdXJyZW50RGF0ZTogRGF5anNcblx0dmlldzogQ2FsZW5kYXJWaWV3XG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHJhd0V2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuXHRzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRzZWxlY3RlZERhdGU6IERheWpzIHwgbnVsbFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGN1cnJlbnRMb2NhbGU6IHN0cmluZ1xuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRzZXRDdXJyZW50RGF0ZTogKGRhdGU6IERheWpzKSA9PiB2b2lkXG5cdHNlbGVjdERhdGU6IChkYXRlOiBEYXlqcykgPT4gdm9pZFxuXHRzZXRWaWV3OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdG5leHRQZXJpb2Q6ICgpID0+IHZvaWRcblx0cHJldlBlcmlvZDogKCkgPT4gdm9pZFxuXHR0b2RheTogKCkgPT4gdm9pZFxuXHRhZGRFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdHVwZGF0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHR1cGRhdGVSZWN1cnJpbmdFdmVudDogKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4sXG5cdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdCkgPT4gdm9pZFxuXHRkZWxldGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcikgPT4gdm9pZFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudDogKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0b3BlbkV2ZW50Rm9ybTogKGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0Y2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcblx0c2V0U2VsZWN0ZWRFdmVudDogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248Q2FsZW5kYXJFdmVudCB8IG51bGw+PlxuXHRzZXRJc0V2ZW50Rm9ybU9wZW46IFJlYWN0LkRpc3BhdGNoPFJlYWN0LlNldFN0YXRlQWN0aW9uPGJvb2xlYW4+PlxuXHRzZXRTZWxlY3RlZERhdGU6IFJlYWN0LkRpc3BhdGNoPFJlYWN0LlNldFN0YXRlQWN0aW9uPERheWpzIHwgbnVsbD4+XG5cdGdldEV2ZW50c0ZvckRhdGVSYW5nZTogKHN0YXJ0RGF0ZTogRGF5anMsIGVuZERhdGU6IERheWpzKSA9PiBDYWxlbmRhckV2ZW50W11cblx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHQ6IFRyYW5zbGF0b3JGdW5jdGlvblxufVxuXG5jb25zdCBWSUVXX1VOSVRTOiBSZWNvcmQ8Q2FsZW5kYXJWaWV3LCBNYW5pcHVsYXRlVHlwZT4gPSB7XG5cdGRheTogJ2RheScsXG5cdHdlZWs6ICd3ZWVrJyxcblx0bW9udGg6ICdtb250aCcsXG5cdHllYXI6ICd5ZWFyJyxcbn1cblxuZXhwb3J0IGNvbnN0IGNhbGN1bGF0ZVZpZXdSYW5nZSA9IChcblx0ZGF0ZTogRGF5anMsXG5cdHZpZXc6IENhbGVuZGFyVmlldyxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuKTogeyBzdGFydDogRGF5anM7IGVuZDogRGF5anMgfSA9PiB7XG5cdGlmICh2aWV3ID09PSAnZGF5JyB8fCB2aWV3ID09PSAneWVhcicpIHtcblx0XHRyZXR1cm4geyBzdGFydDogZGF0ZS5zdGFydE9mKHZpZXcpLCBlbmQ6IGRhdGUuZW5kT2YodmlldykgfVxuXHR9XG5cdGlmICh2aWV3ID09PSAnd2VlaycpIHtcblx0XHRjb25zdCBkYXlzID0gZ2V0V2Vla0RheXMoZGF0ZSwgZmlyc3REYXlPZldlZWspXG5cdFx0cmV0dXJuIHsgc3RhcnQ6IGRheXNbMF0uc3RhcnRPZignZGF5JyksIGVuZDogZGF5c1s2XS5lbmRPZignZGF5JykgfVxuXHR9XG5cdC8vIG1vbnRoIHZpZXc6IDYgd2Vla3Mgw5cgNyBkYXlzXG5cdGNvbnN0IHdlZWtzID0gZ2V0TW9udGhXZWVrcyhkYXRlLCBmaXJzdERheU9mV2Vlaylcblx0cmV0dXJuIHsgc3RhcnQ6IHdlZWtzWzBdWzBdLnN0YXJ0T2YoJ2RheScpLCBlbmQ6IHdlZWtzWzVdWzZdLmVuZE9mKCdkYXknKSB9XG59XG5cbmV4cG9ydCBjb25zdCB1c2VDYWxlbmRhckVuZ2luZSA9IChcblx0Y29uZmlnOiBDYWxlbmRhckVuZ2luZUNvbmZpZ1xuKTogQ2FsZW5kYXJFbmdpbmVSZXR1cm4gPT4ge1xuXHRjb25zdCB7XG5cdFx0ZXZlbnRzID0gW10sXG5cdFx0Zmlyc3REYXlPZldlZWsgPSAwLFxuXHRcdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0XHRpbml0aWFsRGF0ZSA9IGRheWpzKCksXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRvbkV2ZW50QWRkLFxuXHRcdG9uRXZlbnRVcGRhdGUsXG5cdFx0b25FdmVudERlbGV0ZSxcblx0XHRvbkRhdGVDaGFuZ2UsXG5cdFx0b25WaWV3Q2hhbmdlLFxuXHRcdGxvY2FsZSxcblx0XHR0aW1lem9uZSxcblx0XHR0cmFuc2xhdGlvbnMsXG5cdFx0dHJhbnNsYXRvcixcblx0fSA9IGNvbmZpZ1xuXG5cdGNvbnN0IFtjdXJyZW50RGF0ZSwgc2V0Q3VycmVudERhdGVdID0gdXNlU3RhdGU8RGF5anM+KFxuXHRcdGRheWpzLmlzRGF5anMoaW5pdGlhbERhdGUpID8gaW5pdGlhbERhdGUgOiBkYXlqcyhpbml0aWFsRGF0ZSlcblx0KVxuXHRjb25zdCBbdmlldywgc2V0Vmlld10gPSB1c2VTdGF0ZTxDYWxlbmRhclZpZXc+KGluaXRpYWxWaWV3KVxuXHRjb25zdCBbY3VycmVudEV2ZW50cywgc2V0Q3VycmVudEV2ZW50c10gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50W10+KGV2ZW50cylcblx0Y29uc3QgW2lzRXZlbnRGb3JtT3Blbiwgc2V0SXNFdmVudEZvcm1PcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXHRjb25zdCBbc2VsZWN0ZWRFdmVudCwgc2V0U2VsZWN0ZWRFdmVudF0gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50IHwgbnVsbD4obnVsbClcblx0Y29uc3QgW3NlbGVjdGVkRGF0ZSwgc2V0U2VsZWN0ZWREYXRlXSA9IHVzZVN0YXRlPERheWpzIHwgbnVsbD4obnVsbClcblx0Y29uc3QgW2N1cnJlbnRMb2NhbGUsIHNldEN1cnJlbnRMb2NhbGVdID0gdXNlU3RhdGUobG9jYWxlIHx8ICdlbicpXG5cdGNvbnN0IGxhc3RFdmVudHNQcm9wID0gdXNlUmVmKGV2ZW50cylcblx0Y29uc3QgbGFzdFRpbWV6b25lUHJvcCA9IHVzZVJlZih0aW1lem9uZSlcblx0Y29uc3QgbGFzdExvY2FsZVByb3AgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG5cblx0Y29uc3QgdDogVHJhbnNsYXRvckZ1bmN0aW9uID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKHRyYW5zbGF0b3IpIHJldHVybiB0cmFuc2xhdG9yXG5cdFx0Y29uc3QgZGljdCA9IHRyYW5zbGF0aW9ucyB8fCBkZWZhdWx0VHJhbnNsYXRpb25zXG5cdFx0cmV0dXJuIChrZXk6IHN0cmluZykgPT4gZGljdFtrZXkgYXMga2V5b2YgVHJhbnNsYXRpb25zXSB8fCBrZXlcblx0fSwgW3RyYW5zbGF0aW9ucywgdHJhbnNsYXRvcl0pXG5cblx0Y29uc3QgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlID0gdXNlQ2FsbGJhY2soXG5cdFx0KHN0YXJ0RGF0ZTogRGF5anMsIGVuZERhdGU6IERheWpzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0XHRcdGNvbnN0IGFsbEV2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gW11cblxuXHRcdFx0Zm9yIChjb25zdCBldmVudCBvZiBjdXJyZW50RXZlbnRzKSB7XG5cdFx0XHRcdGlmIChldmVudC5ycnVsZSkge1xuXHRcdFx0XHRcdGFsbEV2ZW50cy5wdXNoKFxuXHRcdFx0XHRcdFx0Li4uZ2VuZXJhdGVSZWN1cnJpbmdFdmVudHMoe1xuXHRcdFx0XHRcdFx0XHRldmVudCxcblx0XHRcdFx0XHRcdFx0Y3VycmVudEV2ZW50cyxcblx0XHRcdFx0XHRcdFx0c3RhcnREYXRlLFxuXHRcdFx0XHRcdFx0XHRlbmREYXRlLFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0gZWxzZSBpZiAoZXZlbnRPdmVybGFwc1JhbmdlKGV2ZW50LCBzdGFydERhdGUsIGVuZERhdGUpKSB7XG5cdFx0XHRcdFx0YWxsRXZlbnRzLnB1c2goZXZlbnQpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBhbGxFdmVudHNcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzXVxuXHQpXG5cblx0Y29uc3QgZ2V0Q3VycmVudFZpZXdSYW5nZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRyZXR1cm4gY2FsY3VsYXRlVmlld1JhbmdlKGN1cnJlbnREYXRlLCB2aWV3LCBmaXJzdERheU9mV2Vlaylcblx0fSwgW2N1cnJlbnREYXRlLCB2aWV3LCBmaXJzdERheU9mV2Vla10pXG5cblx0Y29uc3QgcHJvY2Vzc2VkRXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0Y29uc3QgeyBzdGFydCwgZW5kIH0gPSBnZXRDdXJyZW50Vmlld1JhbmdlKClcblx0XHRyZXR1cm4gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKHN0YXJ0LCBlbmQpXG5cdH0sIFtnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIGdldEN1cnJlbnRWaWV3UmFuZ2VdKVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGV2ZW50cyAhPT0gbGFzdEV2ZW50c1Byb3AuY3VycmVudCkge1xuXHRcdFx0c2V0Q3VycmVudEV2ZW50cyhldmVudHMpXG5cdFx0XHRsYXN0RXZlbnRzUHJvcC5jdXJyZW50ID0gZXZlbnRzXG5cdFx0fVxuXHR9LCBbZXZlbnRzXSlcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChsb2NhbGUgJiYgbG9jYWxlICE9PSBsYXN0TG9jYWxlUHJvcC5jdXJyZW50KSB7XG5cdFx0XHRzZXRDdXJyZW50TG9jYWxlKGxvY2FsZSlcblx0XHRcdGRheWpzLmxvY2FsZShsb2NhbGUpXG5cdFx0XHRzZXRDdXJyZW50RGF0ZSgocHJldkRhdGUpID0+IHByZXZEYXRlLmxvY2FsZShsb2NhbGUpKVxuXHRcdFx0bGFzdExvY2FsZVByb3AuY3VycmVudCA9IGxvY2FsZVxuXHRcdH1cblx0fSwgW2xvY2FsZV0pXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAodGltZXpvbmUgJiYgdGltZXpvbmUgIT09IGxhc3RUaW1lem9uZVByb3AuY3VycmVudCkge1xuXHRcdFx0ZGF5anMudHouc2V0RGVmYXVsdCh0aW1lem9uZSlcblx0XHRcdHNldEN1cnJlbnREYXRlKChwcmV2KSA9PiBwcmV2LnR6KHRpbWV6b25lKSlcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+XG5cdFx0XHRcdHByZXYubWFwKChlKSA9PiAoe1xuXHRcdFx0XHRcdC4uLmUsXG5cdFx0XHRcdFx0c3RhcnQ6IGUuc3RhcnQudHoodGltZXpvbmUpLFxuXHRcdFx0XHRcdGVuZDogZS5lbmQudHoodGltZXpvbmUpLFxuXHRcdFx0XHR9KSlcblx0XHRcdClcblx0XHRcdGxhc3RUaW1lem9uZVByb3AuY3VycmVudCA9IHRpbWV6b25lXG5cdFx0fVxuXHR9LCBbdGltZXpvbmVdKVxuXG5cdGNvbnN0IHVwZGF0ZURhdGVBbmROb3RpZnkgPSB1c2VDYWxsYmFjayhcblx0XHQobmV3RGF0ZTogRGF5anMpID0+IHtcblx0XHRcdHNldEN1cnJlbnREYXRlKG5ld0RhdGUpXG5cdFx0XHRjb25zdCByYW5nZSA9IGNhbGN1bGF0ZVZpZXdSYW5nZShuZXdEYXRlLCB2aWV3LCBmaXJzdERheU9mV2Vlaylcblx0XHRcdG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUsIHJhbmdlKVxuXHRcdH0sXG5cdFx0W29uRGF0ZUNoYW5nZSwgdmlldywgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCBzZWxlY3REYXRlID0gdXBkYXRlRGF0ZUFuZE5vdGlmeVxuXG5cdGNvbnN0IG5hdmlnYXRlUGVyaW9kID0gdXNlQ2FsbGJhY2soXG5cdFx0KGRpcmVjdGlvbjogMSB8IC0xKSA9PiB7XG5cdFx0XHRjb25zdCBuZXdEYXRlID1cblx0XHRcdFx0ZGlyZWN0aW9uID09PSAxXG5cdFx0XHRcdFx0PyBjdXJyZW50RGF0ZS5hZGQoMSwgVklFV19VTklUU1t2aWV3XSlcblx0XHRcdFx0XHQ6IGN1cnJlbnREYXRlLnN1YnRyYWN0KDEsIFZJRVdfVU5JVFNbdmlld10pXG5cdFx0XHR1cGRhdGVEYXRlQW5kTm90aWZ5KG5ld0RhdGUpXG5cdFx0fSxcblx0XHRbY3VycmVudERhdGUsIHZpZXcsIHVwZGF0ZURhdGVBbmROb3RpZnldXG5cdClcblxuXHRjb25zdCBuZXh0UGVyaW9kID0gdXNlQ2FsbGJhY2soKCkgPT4gbmF2aWdhdGVQZXJpb2QoMSksIFtuYXZpZ2F0ZVBlcmlvZF0pXG5cdGNvbnN0IHByZXZQZXJpb2QgPSB1c2VDYWxsYmFjaygoKSA9PiBuYXZpZ2F0ZVBlcmlvZCgtMSksIFtuYXZpZ2F0ZVBlcmlvZF0pXG5cblx0Y29uc3QgdG9kYXkgPSB1c2VDYWxsYmFjayhcblx0XHQoKSA9PiB1cGRhdGVEYXRlQW5kTm90aWZ5KGRheWpzKCkpLFxuXHRcdFt1cGRhdGVEYXRlQW5kTm90aWZ5XVxuXHQpXG5cblx0Y29uc3QgYWRkRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+IFsuLi5wcmV2LCBldmVudF0pXG5cdFx0XHRvbkV2ZW50QWRkPy4oZXZlbnQpXG5cdFx0fSxcblx0XHRbb25FdmVudEFkZF1cblx0KVxuXG5cdGNvbnN0IHVwZGF0ZUV2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlciwgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4ge1xuXHRcdFx0Y29uc3QgZXZlbnRUb1VwZGF0ZSA9IGN1cnJlbnRFdmVudHMuZmluZCgoZXZlbnQpID0+IGV2ZW50LmlkID09PSBldmVudElkKVxuXHRcdFx0aWYgKCFldmVudFRvVXBkYXRlKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBuZXdFdmVudCA9IHsgLi4uZXZlbnRUb1VwZGF0ZSwgLi4udXBkYXRlcyB9XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKChwcmV2KSA9PlxuXHRcdFx0XHRwcmV2Lm1hcCgoZXZlbnQpID0+IChldmVudC5pZCA9PT0gZXZlbnRJZCA/IG5ld0V2ZW50IDogZXZlbnQpKVxuXHRcdFx0KVxuXHRcdFx0b25FdmVudFVwZGF0ZT8uKG5ld0V2ZW50KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnRVcGRhdGVdXG5cdClcblxuXHRjb25zdCB1cGRhdGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChcblx0XHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50Pixcblx0XHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHRcdCkgPT4ge1xuXHRcdFx0b25FdmVudFVwZGF0ZT8uKHsgLi4uZXZlbnQsIC4uLnVwZGF0ZXMgfSlcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoXG5cdFx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50SW1wbCh7XG5cdFx0XHRcdFx0dGFyZ2V0RXZlbnQ6IGV2ZW50LFxuXHRcdFx0XHRcdHVwZGF0ZXMsXG5cdFx0XHRcdFx0Y3VycmVudEV2ZW50cyxcblx0XHRcdFx0XHRzY29wZTogb3B0aW9ucy5zY29wZSxcblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzLCBvbkV2ZW50VXBkYXRlXVxuXHQpXG5cblx0Y29uc3QgZGVsZXRlUmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQsIG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9ucykgPT4ge1xuXHRcdFx0b25FdmVudERlbGV0ZT8uKGV2ZW50KVxuXHRcdFx0c2V0Q3VycmVudEV2ZW50cyhcblx0XHRcdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnRJbXBsKHtcblx0XHRcdFx0XHR0YXJnZXRFdmVudDogZXZlbnQsXG5cdFx0XHRcdFx0Y3VycmVudEV2ZW50cyxcblx0XHRcdFx0XHRzY29wZTogb3B0aW9ucy5zY29wZSxcblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzLCBvbkV2ZW50RGVsZXRlXVxuXHQpXG5cblx0Y29uc3QgZGVsZXRlRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG5cdFx0XHRjb25zdCBldmVudFRvRGVsZXRlID0gY3VycmVudEV2ZW50cy5maW5kKChlKSA9PiBlLmlkID09PSBldmVudElkKVxuXHRcdFx0aWYgKCFldmVudFRvRGVsZXRlKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKChwcmV2KSA9PiBwcmV2LmZpbHRlcigoZSkgPT4gZS5pZCAhPT0gZXZlbnRJZCkpXG5cdFx0XHRvbkV2ZW50RGVsZXRlPy4oZXZlbnRUb0RlbGV0ZSlcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzLCBvbkV2ZW50RGVsZXRlXVxuXHQpXG5cblx0Y29uc3Qgb3BlbkV2ZW50Rm9ybSA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnREYXRhPy5zdGFydCkge1xuXHRcdFx0XHRzZXRTZWxlY3RlZERhdGUoZXZlbnREYXRhLnN0YXJ0KVxuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc3RhcnQgPSBldmVudERhdGE/LnN0YXJ0ID8/IGN1cnJlbnREYXRlXG5cdFx0XHRzZXRTZWxlY3RlZEV2ZW50KHtcblx0XHRcdFx0dGl0bGU6IHQoJ25ld0V2ZW50JyksXG5cdFx0XHRcdHN0YXJ0LFxuXHRcdFx0XHRlbmQ6IGV2ZW50RGF0YT8uZW5kID8/IHN0YXJ0LmFkZCgxLCAnaG91cicpLFxuXHRcdFx0XHRyZXNvdXJjZUlkOiBldmVudERhdGE/LnJlc291cmNlSWQsXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiAnJyxcblx0XHRcdFx0YWxsRGF5OiBldmVudERhdGE/LmFsbERheSA/PyBmYWxzZSxcblx0XHRcdH0gYXMgQ2FsZW5kYXJFdmVudClcblx0XHRcdHNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuXHRcdH0sXG5cdFx0W2N1cnJlbnREYXRlLCB0XVxuXHQpXG5cblx0Y29uc3QgY2xvc2VFdmVudEZvcm0gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c2V0U2VsZWN0ZWREYXRlKG51bGwpXG5cdFx0c2V0U2VsZWN0ZWRFdmVudChudWxsKVxuXHRcdHNldElzRXZlbnRGb3JtT3BlbihmYWxzZSlcblx0fSwgW10pXG5cblx0Y29uc3QgaGFuZGxlVmlld0NoYW5nZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChuZXdWaWV3OiBDYWxlbmRhclZpZXcpID0+IHtcblx0XHRcdHNldFZpZXcobmV3Vmlldylcblx0XHRcdG9uVmlld0NoYW5nZT8uKG5ld1ZpZXcpXG5cdFx0XHQvLyBWaWV3IGNoYW5nZSBhZmZlY3RzIHZpc2libGUgcmFuZ2Ug4oCUIG5vdGlmeSBjb25zdW1lcnNcblx0XHRcdGNvbnN0IHJhbmdlID0gY2FsY3VsYXRlVmlld1JhbmdlKGN1cnJlbnREYXRlLCBuZXdWaWV3LCBmaXJzdERheU9mV2Vlaylcblx0XHRcdG9uRGF0ZUNoYW5nZT8uKGN1cnJlbnREYXRlLCByYW5nZSlcblx0XHR9LFxuXHRcdFtvblZpZXdDaGFuZ2UsIG9uRGF0ZUNoYW5nZSwgY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrXVxuXHQpXG5cblx0Y29uc3QgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KTogQ2FsZW5kYXJFdmVudCB8IG51bGwgPT4ge1xuXHRcdFx0Y29uc3QgdGFyZ2V0VUlEID0gZXZlbnQudWlkXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRjdXJyZW50RXZlbnRzLmZpbmQoXG5cdFx0XHRcdFx0KGUpID0+IChlLnVpZCB8fCBgJHtlLmlkfUBpbGFteS5jYWxlbmRhcmApID09PSB0YXJnZXRVSUQgJiYgZS5ycnVsZVxuXHRcdFx0XHQpIHx8IG51bGxcblx0XHRcdClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzXVxuXHQpXG5cblx0cmV0dXJuIHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHR2aWV3LFxuXHRcdGV2ZW50czogcHJvY2Vzc2VkRXZlbnRzLFxuXHRcdHJhd0V2ZW50czogY3VycmVudEV2ZW50cyxcblx0XHRpc0V2ZW50Rm9ybU9wZW4sXG5cdFx0c2VsZWN0ZWRFdmVudCxcblx0XHRzZWxlY3RlZERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0ZGF5TWF4RXZlbnRzOiBEQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRzZXRDdXJyZW50RGF0ZSxcblx0XHRzZWxlY3REYXRlLFxuXHRcdHNldFZpZXc6IGhhbmRsZVZpZXdDaGFuZ2UsXG5cdFx0bmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kLFxuXHRcdHRvZGF5LFxuXHRcdGFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50LFxuXHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50LFxuXHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdG9wZW5FdmVudEZvcm0sXG5cdFx0Y2xvc2VFdmVudEZvcm0sXG5cdFx0c2V0U2VsZWN0ZWRFdmVudCxcblx0XHRzZXRJc0V2ZW50Rm9ybU9wZW4sXG5cdFx0c2V0U2VsZWN0ZWREYXRlLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG5cdFx0dCxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgb21pdEtleXMsIHNhZmVEYXRlIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbi8qKlxuICogQ29udmVydHMgYSBEYXlqcyBvYmplY3QgdG8gYSBcIkZsb2F0aW5nIFRpbWVcIiBEYXRlIHJlcHJlc2VudGF0aW9uLlxuICogSW4gRmxvYXRpbmcgVGltZSwgd2UgdXNlIGEgVVRDIERhdGUgb2JqZWN0IGJ1dCBzZXQgaXRzIFVUQyBjb21wb25lbnRzXG4gKiB0byBtYXRjaCB0aGUgbG9jYWwgY29tcG9uZW50cyBvZiB0aGUgdXNlcidzIGRhdGUuXG4gKlxuICogVGhpcyBpcyBlc3NlbnRpYWwgZm9yIFJSdWxlIGV2YWx1YXRpb24gYmVjYXVzZSBpdCBlbnN1cmVzIHRoYXQgYSBydWxlXG4gKiBsaWtlIFwiRXZlcnkgV2VkbmVzZGF5XCIgcmVmZXJzIHRvIHRoZSB1c2VyJ3MgbG9jYWwgV2VkbmVzZGF5LCBldmVuIGlmXG4gKiB0aGF0IHRpbWUgZmFsbHMgb24gYSBUaHVyc2RheSBpbiBhY3R1YWwgVVRDLlxuICovXG5jb25zdCB0b0Zsb2F0aW5nRGF0ZSA9IChkOiBEYXlqcyk6IERhdGUgPT4ge1xuXHRyZXR1cm4gbmV3IERhdGUoXG5cdFx0RGF0ZS5VVEMoXG5cdFx0XHRkLnllYXIoKSxcblx0XHRcdGQubW9udGgoKSxcblx0XHRcdGQuZGF0ZSgpLFxuXHRcdFx0ZC5ob3VyKCksXG5cdFx0XHRkLm1pbnV0ZSgpLFxuXHRcdFx0ZC5zZWNvbmQoKSxcblx0XHRcdGQubWlsbGlzZWNvbmQoKVxuXHRcdClcblx0KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgXCJGbG9hdGluZyBUaW1lXCIgRGF0ZSBiYWNrIHRvIGEgRGF5anMgb2JqZWN0IGluIHRoZSBvcmlnaW5hbCBjb250ZXh0LlxuICogSXQgdGFrZXMgdGhlIFlNREhNUyBjb21wb25lbnRzIGZyb20gdGhlIFVUQyBEYXRlIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlXG4gKiByZWZlcmVuY2UgRGF5anMgb2JqZWN0IChwcmVzZXJ2aW5nIGl0cyB0aW1lem9uZS9sb2NhbGUpLlxuICovXG5jb25zdCBmcm9tRmxvYXRpbmdEYXRlID0gKGRhdGU6IERhdGUsIHJlZmVyZW5jZTogRGF5anMpOiBEYXlqcyA9PiB7XG5cdHJldHVybiByZWZlcmVuY2Vcblx0XHQueWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkpXG5cdFx0Lm1vbnRoKGRhdGUuZ2V0VVRDTW9udGgoKSlcblx0XHQuZGF0ZShkYXRlLmdldFVUQ0RhdGUoKSlcblx0XHQuaG91cihkYXRlLmdldFVUQ0hvdXJzKCkpXG5cdFx0Lm1pbnV0ZShkYXRlLmdldFVUQ01pbnV0ZXMoKSlcblx0XHQuc2Vjb25kKGRhdGUuZ2V0VVRDU2Vjb25kcygpKVxuXHRcdC5taWxsaXNlY29uZChkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpKVxufVxuXG5leHBvcnQgY29uc3QgaXNSZWN1cnJpbmdFdmVudCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IGJvb2xlYW4gPT4ge1xuXHRyZXR1cm4gQm9vbGVhbihldmVudC5ycnVsZSB8fCBldmVudC5yZWN1cnJlbmNlSWQgfHwgZXZlbnQudWlkKVxufVxuXG4vKipcbiAqIENvbnNpc3RlbnRseSBkZXJpdmVzIGEgcGFyZW50IFVJRCBmcm9tIGFuIGV2ZW50LlxuICogVXNlcyB0aGUgZXhwbGljaXQgYHVpZGAgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbHMgYmFjayB0byBgJHtpZH1AaWxhbXkuY2FsZW5kYXJgLlxuICovXG5jb25zdCBnZXRFdmVudFBhcmVudFVJRCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBiYXNlIHJlY3VycmluZyBldmVudCAodGhlIG9uZSB3aXRoIHJydWxlIGFuZCBubyByZWN1cnJlbmNlSWQpXG4gKiB0aGF0IHNoYXJlcyB0aGUgc2FtZSBwYXJlbnQgVUlEIGFzIHRoZSB0YXJnZXQgZXZlbnQuXG4gKiBUaHJvd3MgaWYgbm90IGZvdW5kIOKAlCBjYWxsZXJzIGFzc3VtZSB0aGUgc2VyaWVzIGV4aXN0cy5cbiAqL1xuY29uc3QgZmluZEJhc2VFdmVudEluZGV4ID0gKFxuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcblx0dGFyZ2V0RXZlbnQ6IENhbGVuZGFyRXZlbnRcbik6IG51bWJlciA9PiB7XG5cdGNvbnN0IHRhcmdldFVpZCA9IGdldEV2ZW50UGFyZW50VUlEKHRhcmdldEV2ZW50KVxuXHRjb25zdCBpbmRleCA9IGV2ZW50cy5maW5kSW5kZXgoXG5cdFx0KGUpID0+IGdldEV2ZW50UGFyZW50VUlEKGUpID09PSB0YXJnZXRVaWQgJiYgZS5ycnVsZSAmJiAhZS5yZWN1cnJlbmNlSWRcblx0KVxuXHRpZiAoaW5kZXggPT09IC0xKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdCYXNlIHJlY3VycmluZyBldmVudCBub3QgZm91bmQnKVxuXHR9XG5cdHJldHVybiBpbmRleFxufVxuXG4vKipcbiAqIEZvciB0aGUgXCJmb2xsb3dpbmdcIiBzY29wZTogdGhlIFVOVElMIGRhdGUgdGhhdCB0ZXJtaW5hdGVzIHRoZSBvcmlnaW5hbFxuICogc2VyaWVzIGlzIHRoZSBlbmQgb2YgdGhlIGRheSBCRUZPUkUgdGhlIHRhcmdldCBldmVudCdzIHN0YXJ0LiBUaGlzIGtlZXBzXG4gKiB0aGUgbGFzdCBwcmUtdGFyZ2V0IG9jY3VycmVuY2UgaW4gdGhlIHRlcm1pbmF0ZWQgc2VyaWVzLlxuICovXG5jb25zdCBnZXRTZXJpZXNUZXJtaW5hdGlvbkRhdGUgPSAodGFyZ2V0RXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBEYXRlID0+XG5cdHRhcmdldEV2ZW50LnN0YXJ0LnN1YnRyYWN0KDEsICdkYXknKS5lbmRPZignZGF5JykudG9EYXRlKClcblxuLyoqXG4gKiBLZWVwcyB0aGUgY2FsZW5kYXIgZGF5IGZyb20gYHRhcmdldGAgd2hpbGUgYXBwbHlpbmcgdGhlIHRpbWUtb2YtZGF5IGZyb20gYHNvdXJjZWAuXG4gKiBVc2VkIHRvIGVkaXQgcmVjdXJyaW5nIHNlcmllcyBhbmNob3JzIHdpdGhvdXQgc2hpZnRpbmcgdGhlIHNlcmllcyB0byBhbiBpbnN0YW5jZSBkYXkuXG4gKi9cbmNvbnN0IHdpdGhUaW1lT2ZEYXkgPSAodGFyZ2V0OiBEYXlqcywgc291cmNlOiBEYXlqcyk6IERheWpzID0+IHtcblx0Y29uc3QgdGltZU9mRGF5TXMgPSBzb3VyY2UuZGlmZihzb3VyY2Uuc3RhcnRPZignZGF5JyksICdtaWxsaXNlY29uZCcpXG5cdHJldHVybiB0YXJnZXQuc3RhcnRPZignZGF5JykuYWRkKHRpbWVPZkRheU1zLCAnbWlsbGlzZWNvbmQnKVxufVxuXG4vKipcbiAqIEZvciBzY29wZSBcImFsbFwiOiBhcHBseSB0aGUgZGVsdGEgYmV0d2VlbiB0aGUgZWRpdGVkIGluc3RhbmNlIGFuZCB0aGUgc3VibWl0dGVkXG4gKiBzdGFydC9lbmQgdG8gdGhlIGJhc2UgZXZlbnQgYW5jaG9yIOKAlCBhdm9pZHMgc2hpZnRpbmcgdGhlIHdob2xlIHNlcmllcyB0byB0aGVcbiAqIGluc3RhbmNlJ3MgY2FsZW5kYXIgZGF5IHdoZW4gdGhlIGZvcm0gaXMgb3BlbmVkIG9uIGUuZy4gRnJpZGF5IG9mIGEgTW9u4oCTRnJpIHJ1bGUuXG4gKi9cbmNvbnN0IGFwcGx5QWxsU2NvcGVVcGRhdGVzID0gKFxuXHRiYXNlRXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cbik6IHsgc3RhcnQ6IERheWpzOyBlbmQ6IERheWpzOyBycnVsZTogUlJ1bGVPcHRpb25zIHwgdW5kZWZpbmVkIH0gPT4ge1xuXHRsZXQgbmV3U3RhcnQgPSBiYXNlRXZlbnQuc3RhcnRcblx0Ly8gaWYgdGhlIHN0YXJ0IGhhcyBjaGFuZ2VkIGtlZXAgdGhlIHNhbWUgY2FsZW5kYXIgZGF5IGJ1dCB3aXRoIHRoZSBuZXcgdGltZVxuXHRpZiAodXBkYXRlcy5zdGFydCkge1xuXHRcdG5ld1N0YXJ0ID0gd2l0aFRpbWVPZkRheShiYXNlRXZlbnQuc3RhcnQsIHVwZGF0ZXMuc3RhcnQpXG5cdH1cblxuXHRsZXQgbmV3RW5kID0gYmFzZUV2ZW50LmVuZFxuXHQvLyBlbnN1cmUgdGhlIG5ldyBlbmQgaXMgY29tcHV0ZSBzbyB0aGUgZHVyYXRpb24gaXMgcHJlc2VydmVkXG5cdGlmICh1cGRhdGVzLnN0YXJ0ICYmIHVwZGF0ZXMuZW5kKSB7XG5cdFx0bmV3RW5kID0gbmV3U3RhcnQuYWRkKHVwZGF0ZXMuZW5kLmRpZmYodXBkYXRlcy5zdGFydCksICdtaWxsaXNlY29uZCcpXG5cdH0gZWxzZSBpZiAodXBkYXRlcy5zdGFydCkge1xuXHRcdG5ld0VuZCA9IG5ld1N0YXJ0LmFkZChiYXNlRXZlbnQuZW5kLmRpZmYoYmFzZUV2ZW50LnN0YXJ0KSwgJ21pbGxpc2Vjb25kJylcblx0fSBlbHNlIGlmICh1cGRhdGVzLmVuZCkge1xuXHRcdG5ld0VuZCA9IHdpdGhUaW1lT2ZEYXkoYmFzZUV2ZW50LmVuZCwgdXBkYXRlcy5lbmQpXG5cdH1cblxuXHRjb25zdCBtZXJnZWRScnVsZSA9IHVwZGF0ZXMucnJ1bGUgPz8gYmFzZUV2ZW50LnJydWxlXG5cdGxldCBuZXdScnVsZTogUlJ1bGVPcHRpb25zIHwgdW5kZWZpbmVkXG5cdGlmIChtZXJnZWRScnVsZSkge1xuXHRcdG5ld1JydWxlID0geyAuLi5tZXJnZWRScnVsZSwgZHRzdGFydDogbmV3U3RhcnQudG9EYXRlKCkgfVxuXHR9XG5cblx0cmV0dXJuIHsgc3RhcnQ6IG5ld1N0YXJ0LCBlbmQ6IG5ld0VuZCwgcnJ1bGU6IG5ld1JydWxlIH1cbn1cblxuaW50ZXJmYWNlIEdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzUHJvcHMge1xuXHRldmVudDogQ2FsZW5kYXJFdmVudFxuXHRjdXJyZW50RXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0c3RhcnREYXRlOiBEYXlqc1xuXHRlbmREYXRlOiBEYXlqc1xufVxuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVSZWN1cnJpbmdFdmVudHMgPSAoe1xuXHRldmVudCxcblx0Y3VycmVudEV2ZW50cyxcblx0c3RhcnREYXRlLFxuXHRlbmREYXRlLFxufTogR2VuZXJhdGVSZWN1cnJpbmdFdmVudHNQcm9wcyk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdC8vIElmIG5vdCBhIHJlY3VycmluZyBldmVudCwgcmV0dXJuIGVtcHR5IGFycmF5XG5cdGlmICghZXZlbnQucnJ1bGUpIHtcblx0XHRyZXR1cm4gW11cblx0fVxuXG5cdHRyeSB7XG5cdFx0Ly8gRFRTVEFSVCBhbmQgU0VBUkNIIFdJTkRPVyBUUkFOU0ZPUk1BVElPTlxuXHRcdC8vIFRyYW5zZm9ybSBhbGwgZGF0ZXMgdG8gXCJmbG9hdGluZyB0aW1lXCIgKFVUQyB3aXRoIGxvY2FsIGNvbXBvbmVudHMpXG5cdFx0Ly8gVGhpcyBlbnN1cmVzIFJSdWxlIGV2YWx1YXRlcyBcIldlZG5lc2RheVwiIGFzIHRoZSB1c2VyJ3MgbG9jYWwgV2VkbmVzZGF5XG5cdFx0Y29uc3QgZmxvYXRpbmdTdGFydCA9IHRvRmxvYXRpbmdEYXRlKGV2ZW50LnN0YXJ0KVxuXHRcdGNvbnN0IGZsb2F0aW5nVW50aWwgPSBldmVudC5ycnVsZS51bnRpbFxuXHRcdFx0PyB0b0Zsb2F0aW5nRGF0ZShkYXlqcyhldmVudC5ycnVsZS51bnRpbCkpXG5cdFx0XHQ6IHVuZGVmaW5lZFxuXG5cdFx0Y29uc3QgcnVsZU9wdGlvbnM6IFJSdWxlT3B0aW9ucyA9IHtcblx0XHRcdC4uLmV2ZW50LnJydWxlLFxuXHRcdFx0ZHRzdGFydDogZmxvYXRpbmdTdGFydCxcblx0XHRcdHVudGlsOiBmbG9hdGluZ1VudGlsLFxuXHRcdH1cblx0XHRjb25zdCBydWxlID0gbmV3IFJSdWxlKHJ1bGVPcHRpb25zKVxuXG5cdFx0Y29uc3QgcGFyZW50VWlkID0gZ2V0RXZlbnRQYXJlbnRVSUQoZXZlbnQpXG5cdFx0Y29uc3Qgb3ZlcnJpZGVzID0gY3VycmVudEV2ZW50cy5maWx0ZXIoXG5cdFx0XHQoZSkgPT4gZS5yZWN1cnJlbmNlSWQgJiYgZ2V0RXZlbnRQYXJlbnRVSUQoZSkgPT09IHBhcmVudFVpZFxuXHRcdClcblxuXHRcdC8vIENhbGN1bGF0ZSBldmVudCBkdXJhdGlvbiB0byBleHBhbmQgc2VhcmNoIHdpbmRvdyBmb3IgZXZlbnRzIHRoYXQgc3BhbiB0aGUgcmFuZ2Vcblx0XHRjb25zdCBldmVudER1cmF0aW9uID0gZXZlbnQuZW5kLmRpZmYoZXZlbnQuc3RhcnQpXG5cblx0XHQvLyBFeHBhbmQgc2VhcmNoIHdpbmRvdyBiYWNrd2FyZCBieSBldmVudCBkdXJhdGlvbiB0byBjYXRjaCBldmVudHMgdGhhdCBzdGFydCBiZWZvcmVcblx0XHQvLyB0aGUgcmFuZ2UgYnV0IHNwYW4gaW50byBpdFxuXHRcdGNvbnN0IGV4cGFuZGVkU3RhcnREYXRlVGltZSA9IHRvRmxvYXRpbmdEYXRlKFxuXHRcdFx0c3RhcnREYXRlLnN1YnRyYWN0KGV2ZW50RHVyYXRpb24sICdtaWxsaXNlY29uZCcpXG5cdFx0KVxuXHRcdGNvbnN0IGVuZERhdGVUaW1lID0gdG9GbG9hdGluZ0RhdGUoZW5kRGF0ZSlcblxuXHRcdC8vIEdldCBhbGwgb2NjdXJyZW5jZXMgaW4gdGhlIGV4cGFuZGVkIHJhbmdlXG5cdFx0Y29uc3Qgb2NjdXJyZW5jZXMgPSBydWxlLmJldHdlZW4oZXhwYW5kZWRTdGFydERhdGVUaW1lLCBlbmREYXRlVGltZSwgdHJ1ZSlcblxuXHRcdC8vIENvbnZlcnQgb2NjdXJyZW5jZXMgdG8gQ2FsZW5kYXJFdmVudCBpbnN0YW5jZXNcblx0XHRjb25zdCByZWN1cnJpbmdFdmVudHM6IENhbGVuZGFyRXZlbnRbXSA9IG9jY3VycmVuY2VzXG5cdFx0XHQubWFwKChvY2N1cnJlbmNlLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvY2N1cnJlbmNlRGF0ZSA9IGZyb21GbG9hdGluZ0RhdGUob2NjdXJyZW5jZSwgZXZlbnQuc3RhcnQpXG5cdFx0XHRcdGNvbnN0IGV4aXN0aW5nT3ZlcnJpZGUgPSBvdmVycmlkZXMuZmluZCgoZSkgPT5cblx0XHRcdFx0XHRzYWZlRGF0ZShlLnJlY3VycmVuY2VJZCk/LmlzU2FtZShvY2N1cnJlbmNlRGF0ZSlcblx0XHRcdFx0KVxuXG5cdFx0XHRcdC8vIElmIHRoZXJlJ3MgYW4gb3ZlcnJpZGUsIHVzZSBpdFxuXHRcdFx0XHRpZiAoZXhpc3RpbmdPdmVycmlkZSkge1xuXHRcdFx0XHRcdHJldHVybiB7IC4uLmV2ZW50LCAuLi5leGlzdGluZ092ZXJyaWRlIH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENhbGN1bGF0ZSB0aGUgZHVyYXRpb24gZnJvbSB0aGUgb3JpZ2luYWwgZXZlbnRcblx0XHRcdFx0Y29uc3Qgb3JpZ2luYWxEdXJhdGlvbiA9IGV2ZW50LmVuZC5kaWZmKGV2ZW50LnN0YXJ0KVxuXHRcdFx0XHRjb25zdCBuZXdFbmRUaW1lID0gb2NjdXJyZW5jZURhdGUuYWRkKG9yaWdpbmFsRHVyYXRpb24sICdtaWxsaXNlY29uZCcpXG5cdFx0XHRcdGNvbnN0IHJlY3VycmluZ0V2ZW50SWQgPSBgJHtldmVudC5pZH1fJHtpbmRleH1gXG5cdFx0XHRcdGNvbnN0IHBhcmVudFVJRCA9IGdldEV2ZW50UGFyZW50VUlEKGV2ZW50KVxuXG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgcmVjdXJyaW5nIGV2ZW50IGluc3RhbmNlXG5cdFx0XHRcdGNvbnN0IHJlY3VycmluZ0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0XHRcdGlkOiByZWN1cnJpbmdFdmVudElkLFxuXHRcdFx0XHRcdHN0YXJ0OiBvY2N1cnJlbmNlRGF0ZSxcblx0XHRcdFx0XHRlbmQ6IG5ld0VuZFRpbWUsXG5cdFx0XHRcdFx0dWlkOiBwYXJlbnRVSUQsIC8vIFNhbWUgVUlEIGFzIHBhcmVudCBmb3IgcHJvcGVyIGdyb3VwaW5nXG5cdFx0XHRcdFx0cnJ1bGU6IHVuZGVmaW5lZCwgLy8gSW5zdGFuY2UgZXZlbnRzIGRvbid0IGhhdmUgUlJVTEVcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiByZWN1cnJpbmdFdmVudFxuXHRcdFx0fSlcblx0XHRcdC5maWx0ZXIoKHJlY3VycmluZ0V2ZW50KSA9PiB7XG5cdFx0XHRcdC8vIEZpbHRlciBvdXQgRVhEQVRFIGV4Y2x1c2lvbnNcblx0XHRcdFx0Y29uc3QgaGFzRXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXMgJiYgZXZlbnQuZXhkYXRlcy5sZW5ndGggPiAwXG5cdFx0XHRcdGlmIChoYXNFeGRhdGVzKSB7XG5cdFx0XHRcdFx0Y29uc3QgZXZlbnRTdGFydElTTyA9IHJlY3VycmluZ0V2ZW50LnN0YXJ0LnRvSVNPU3RyaW5nKClcblx0XHRcdFx0XHRjb25zdCBpc0V4Y2x1ZGVkID0gZXZlbnQuZXhkYXRlcz8uaW5jbHVkZXMoZXZlbnRTdGFydElTTylcblx0XHRcdFx0XHRpZiAoaXNFeGNsdWRlZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRmlsdGVyIHRvIG9ubHkgaW5jbHVkZSBldmVudHMgdGhhdCBzcGFuIHRocm91Z2ggdGhlIG9yaWdpbmFsIHJlcXVlc3RlZCBkYXRlIHJhbmdlXG5cdFx0XHRcdC8vIEFuIGV2ZW50IHNwYW5zIHRoZSByYW5nZSBpZjogZXZlbnRfc3RhcnQgPCByYW5nZV9lbmQgQU5EIGV2ZW50X2VuZCA+IHJhbmdlX3N0YXJ0XG5cdFx0XHRcdC8vIFVzZSBpc1NhbWVPckJlZm9yZS9pc1NhbWVPckFmdGVyIHRvIGluY2x1ZGUgYm91bmRhcnkgY2FzZXNcblx0XHRcdFx0Y29uc3QgZXZlbnRTcGFuc1JhbmdlID1cblx0XHRcdFx0XHRyZWN1cnJpbmdFdmVudC5zdGFydC5pc1NhbWVPckJlZm9yZShlbmREYXRlKSAmJlxuXHRcdFx0XHRcdHJlY3VycmluZ0V2ZW50LmVuZC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSlcblxuXHRcdFx0XHRyZXR1cm4gZXZlbnRTcGFuc1JhbmdlXG5cdFx0XHR9KVxuXG5cdFx0cmV0dXJuIHJlY3VycmluZ0V2ZW50c1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIEhhbmRsZSBpbnZhbGlkIFJSVUxFIG9wdGlvbnNcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRgSW52YWxpZCBSUlVMRSBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KGV2ZW50LnJydWxlKX0uIEVycm9yOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcblx0XHQpXG5cdH1cbn1cblxuaW50ZXJmYWNlIFVwZGF0ZVJlY3VycmluZ0V2ZW50UHJvcHMge1xuXHR0YXJnZXRFdmVudDogQ2FsZW5kYXJFdmVudFxuXHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuXHR0YXJnZXRFdmVudCxcblx0dXBkYXRlcyxcblx0Y3VycmVudEV2ZW50cyxcblx0c2NvcGUsXG59OiBVcGRhdGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Y29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXHRjb25zdCBiYXNlRXZlbnRJbmRleCA9IGZpbmRCYXNlRXZlbnRJbmRleCh1cGRhdGVkRXZlbnRzLCB0YXJnZXRFdmVudClcblx0Y29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuXHRzd2l0Y2ggKHNjb3BlKSB7XG5cdFx0Y2FzZSAndGhpcyc6IHtcblx0XHRcdC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGJhc2UgZXZlbnQgYW5kIGNyZWF0ZSBzdGFuZGFsb25lIG1vZGlmaWVkIGV2ZW50XG5cdFx0XHRjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0Y29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cblx0XHRcdGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuXHRcdFx0Y29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHRleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuXG5cdFx0XHQvLyBDcmVhdGUgc3RhbmRhbG9uZSBtb2RpZmllZCBldmVudCB3aXRoIHJlY3VycmVuY2VJZFxuXHRcdFx0Y29uc3QgbW9kaWZpZWRFdmVudElkID0gYCR7dGFyZ2V0RXZlbnQuaWR9X21vZGlmaWVkXyR7RGF0ZS5ub3coKX1gXG5cdFx0XHRjb25zdCBtb2RpZmllZEV2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFRPRE86IGZpeCB0aGUgdHlwZXNcblx0XHRcdFx0Li4ub21pdEtleXModGFyZ2V0RXZlbnQsIFsnd2lkdGgnLCAnaGVpZ2h0JywgJ3RvcCcsICdsZWZ0JywgJ3JpZ2h0J10pLFxuXHRcdFx0XHQuLi51cGRhdGVzLFxuXHRcdFx0XHRpZDogbW9kaWZpZWRFdmVudElkLFxuXHRcdFx0XHRyZWN1cnJlbmNlSWQ6IHRhcmdldEV2ZW50U3RhcnRJU08sIC8vIFRoaXMgbWFya3MgaXQgYXMgYSBtb2RpZmllZCBpbnN0YW5jZVxuXHRcdFx0XHR1aWQ6IGdldEV2ZW50UGFyZW50VUlEKGJhc2VFdmVudCksIC8vIEtlZXAgc2FtZSBVSUQgYXMgYmFzZSBldmVudCAoaUNhbGVuZGFyIHN0YW5kYXJkKVxuXHRcdFx0XHRycnVsZTogdW5kZWZpbmVkLCAvLyBTdGFuZGFsb25lIGV2ZW50cyBkb24ndCBoYXZlIFJSVUxFXG5cdFx0XHR9IGFzIENhbGVuZGFyRXZlbnRcblx0XHRcdHVwZGF0ZWRFdmVudHMucHVzaChtb2RpZmllZEV2ZW50KVxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdmb2xsb3dpbmcnOiB7XG5cdFx0XHQvLyBcIlRoaXMgYW5kIGZvbGxvd2luZ1wiIC0gVGVybWluYXRlIG9yaWdpbmFsIHNlcmllcyBhbmQgY3JlYXRlIG5ldyBzZXJpZXNcblx0XHRcdGNvbnN0IHRlcm1pbmF0aW9uRGF0ZSA9IGdldFNlcmllc1Rlcm1pbmF0aW9uRGF0ZSh0YXJnZXRFdmVudClcblxuXHRcdFx0Ly8gVXBkYXRlIG9yaWdpbmFsIHNlcmllcyB3aXRoIFVOVElMIHRvIGVuZCBiZWZvcmUgdGFyZ2V0IGRhdGVcblx0XHRcdGNvbnN0IHRlcm1pbmF0ZWRFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHRycnVsZToge1xuXHRcdFx0XHRcdC4uLmJhc2VFdmVudC5ycnVsZSxcblx0XHRcdFx0XHR1bnRpbDogdGVybWluYXRpb25EYXRlLFxuXHRcdFx0XHR9IGFzIFJSdWxlT3B0aW9ucyxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdGVybWluYXRlZEV2ZW50XG5cblx0XHRcdC8vIENyZWF0ZSBuZXcgc2VyaWVzIHN0YXJ0aW5nIGZyb20gdGFyZ2V0IGRhdGVcblx0XHRcdGNvbnN0IG9yaWdpbmFsRHVyYXRpb24gPSBiYXNlRXZlbnQuZW5kLmRpZmYoYmFzZUV2ZW50LnN0YXJ0KVxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzU3RhcnRUaW1lID0gdXBkYXRlcy5zdGFydCB8fCB0YXJnZXRFdmVudC5zdGFydFxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzRW5kVGltZSA9XG5cdFx0XHRcdHVwZGF0ZXMuZW5kIHx8IG5ld1Nlcmllc1N0YXJ0VGltZS5hZGQob3JpZ2luYWxEdXJhdGlvbilcblx0XHRcdGNvbnN0IG5ld1Nlcmllc0lkID0gYCR7YmFzZUV2ZW50LmlkfV9mb2xsb3dpbmdgXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNVSUQgPSBgJHtuZXdTZXJpZXNJZH1AaWxhbXkuY2FsZW5kYXJgXG5cblx0XHRcdGNvbnN0IG5ld1Nlcmllc0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdC4uLnVwZGF0ZXMsXG5cdFx0XHRcdHJydWxlOiB7XG5cdFx0XHRcdFx0Li4uYmFzZUV2ZW50LnJydWxlLFxuXHRcdFx0XHRcdC4uLnVwZGF0ZXMucnJ1bGUsXG5cdFx0XHRcdFx0ZHRzdGFydDogbmV3U2VyaWVzU3RhcnRUaW1lLnRvRGF0ZSgpLFxuXHRcdFx0XHR9IGFzIFJSdWxlT3B0aW9ucyxcblx0XHRcdFx0aWQ6IG5ld1Nlcmllc0lkLFxuXHRcdFx0XHR1aWQ6IG5ld1Nlcmllc1VJRCwgLy8gTmV3IFVJRCBmb3IgbmV3IHNlcmllc1xuXHRcdFx0XHRzdGFydDogbmV3U2VyaWVzU3RhcnRUaW1lLFxuXHRcdFx0XHRlbmQ6IG5ld1Nlcmllc0VuZFRpbWUsXG5cdFx0XHRcdHJlY3VycmVuY2VJZDogdW5kZWZpbmVkLCAvLyBUaGlzIGlzIGEgbmV3IGJhc2UgZXZlbnQsIG5vdCBhbiBpbnN0YW5jZVxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50cy5wdXNoKG5ld1Nlcmllc0V2ZW50KVxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdhbGwnOiB7XG5cdFx0XHQvLyBcIkFsbCBldmVudHNcIiAtIFVwZGF0ZSB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnQgKGFuY2hvciBkYXRlcywgbm90IGluc3RhbmNlIGRheSlcblx0XHRcdGNvbnN0IGFuY2hvcmVkID0gYXBwbHlBbGxTY29wZVVwZGF0ZXMoYmFzZUV2ZW50LCB1cGRhdGVzKVxuXHRcdFx0dXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0Li4udXBkYXRlcyxcblx0XHRcdFx0c3RhcnQ6IGFuY2hvcmVkLnN0YXJ0LFxuXHRcdFx0XHRlbmQ6IGFuY2hvcmVkLmVuZCxcblx0XHRcdFx0cnJ1bGU6IGFuY2hvcmVkLnJydWxlLFxuXHRcdFx0fVxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG5cdFx0XHQpXG5cdH1cblxuXHRyZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuXG5pbnRlcmZhY2UgRGVsZXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG5cdHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgZGVsZXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuXHR0YXJnZXRFdmVudCxcblx0Y3VycmVudEV2ZW50cyxcblx0c2NvcGUsXG59OiBEZWxldGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Y29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXHRjb25zdCBiYXNlRXZlbnRJbmRleCA9IGZpbmRCYXNlRXZlbnRJbmRleCh1cGRhdGVkRXZlbnRzLCB0YXJnZXRFdmVudClcblx0Y29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuXHRzd2l0Y2ggKHNjb3BlKSB7XG5cdFx0Y2FzZSAndGhpcyc6IHtcblx0XHRcdC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGV4Y2x1ZGUgdGhpcyBvY2N1cnJlbmNlXG5cdFx0XHRjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0Y29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cblx0XHRcdGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuXHRcdFx0Y29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHsgLi4uYmFzZUV2ZW50LCBleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyB9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHVwZGF0ZWRCYXNlRXZlbnRcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y2FzZSAnZm9sbG93aW5nJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGFuZCBmb2xsb3dpbmdcIiAtIFRlcm1pbmF0ZSBzZXJpZXMgd2l0aCBVTlRJTCBiZWZvcmUgdGFyZ2V0IGRhdGVcblx0XHRcdGNvbnN0IHRlcm1pbmF0ZWRFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHRycnVsZToge1xuXHRcdFx0XHRcdC4uLmJhc2VFdmVudC5ycnVsZSxcblx0XHRcdFx0XHR1bnRpbDogZ2V0U2VyaWVzVGVybWluYXRpb25EYXRlKHRhcmdldEV2ZW50KSxcblx0XHRcdFx0fSBhcyBSUnVsZU9wdGlvbnMsXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHRlcm1pbmF0ZWRFdmVudFxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdhbGwnOiB7XG5cdFx0XHQvLyBcIkFsbCBldmVudHNcIiAtIFJlbW92ZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXNcblx0XHRcdGNvbnN0IHRhcmdldFVpZCA9IGdldEV2ZW50UGFyZW50VUlEKHRhcmdldEV2ZW50KVxuXHRcdFx0Y29uc3QgZXZlbnRzV2l0aG91dFRhcmdldFNlcmllcyA9IHVwZGF0ZWRFdmVudHMuZmlsdGVyKFxuXHRcdFx0XHQoZSkgPT4gZ2V0RXZlbnRQYXJlbnRVSUQoZSkgIT09IHRhcmdldFVpZFxuXHRcdFx0KVxuXHRcdFx0cmV0dXJuIGV2ZW50c1dpdGhvdXRUYXJnZXRTZXJpZXNcblx0XHR9XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG5cdFx0XHQpXG5cdH1cblxuXHRyZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0VHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbnMgPSB7XG5cdC8vIENvbW1vbiBhY3Rpb25zXG5cdHRvZGF5OiAnVG9kYXknLFxuXHRjcmVhdGU6ICdDcmVhdGUnLFxuXHRuZXc6ICdOZXcnLFxuXHR1cGRhdGU6ICdVcGRhdGUnLFxuXHRkZWxldGU6ICdEZWxldGUnLFxuXHRjYW5jZWw6ICdDYW5jZWwnLFxuXHRleHBvcnQ6ICdFeHBvcnQnLFxuXG5cdC8vIEV2ZW50IHJlbGF0ZWRcblx0ZXZlbnQ6ICdFdmVudCcsXG5cdGV2ZW50czogJ0V2ZW50cycsXG5cdG5ld0V2ZW50OiAnTmV3IEV2ZW50Jyxcblx0dGl0bGU6ICdUaXRsZScsXG5cdGRlc2NyaXB0aW9uOiAnRGVzY3JpcHRpb24nLFxuXHRsb2NhdGlvbjogJ0xvY2F0aW9uJyxcblx0YWxsRGF5OiAnQWxsIGRheScsXG5cdHN0YXJ0RGF0ZTogJ1N0YXJ0IERhdGUnLFxuXHRlbmREYXRlOiAnRW5kIERhdGUnLFxuXHRzdGFydFRpbWU6ICdTdGFydCBUaW1lJyxcblx0c2VhcmNoVGltZTogJ1NlYXJjaCB0aW1lLi4uJyxcblx0ZW5kVGltZTogJ0VuZCBUaW1lJyxcblx0Y29sb3I6ICdDb2xvcicsXG5cblx0Ly8gRXZlbnQgZm9ybVxuXHRjcmVhdGVFdmVudDogJ0NyZWF0ZSBFdmVudCcsXG5cdGVkaXRFdmVudDogJ0VkaXQgRXZlbnQnLFxuXHRhZGROZXdFdmVudDogJ0FkZCBhIG5ldyBldmVudCB0byB5b3VyIGNhbGVuZGFyJyxcblx0ZWRpdEV2ZW50RGV0YWlsczogJ0VkaXQgeW91ciBldmVudCBkZXRhaWxzJyxcblx0ZXZlbnRUaXRsZVBsYWNlaG9sZGVyOiAnRXZlbnQgdGl0bGUnLFxuXHRldmVudERlc2NyaXB0aW9uUGxhY2Vob2xkZXI6ICdFdmVudCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpJyxcblx0ZXZlbnRMb2NhdGlvblBsYWNlaG9sZGVyOiAnRXZlbnQgbG9jYXRpb24gKG9wdGlvbmFsKScsXG5cblx0Ly8gUmVjdXJyZW5jZVxuXHRyZXBlYXQ6ICdSZXBlYXQnLFxuXHRyZXBlYXRzOiAnUmVwZWF0cycsXG5cdGN1c3RvbVJlY3VycmVuY2U6ICdDdXN0b20gcmVjdXJyZW5jZScsXG5cdGRhaWx5OiAnRGFpbHknLFxuXHR3ZWVrbHk6ICdXZWVrbHknLFxuXHRtb250aGx5OiAnTW9udGhseScsXG5cdHllYXJseTogJ1llYXJseScsXG5cdGludGVydmFsOiAnSW50ZXJ2YWwnLFxuXHRyZXBlYXRPbjogJ1JlcGVhdCBvbicsXG5cdG5ldmVyOiAnTmV2ZXInLFxuXHRjb3VudDogJ0NvdW50Jyxcblx0ZXZlcnk6ICdFdmVyeScsXG5cdGVuZHM6ICdFbmRzJyxcblx0YWZ0ZXI6ICdBZnRlcicsXG5cdG9jY3VycmVuY2VzOiAnb2NjdXJyZW5jZXMnLFxuXHRvbjogJ09uJyxcblxuXHQvLyBSZWN1cnJlbmNlIGVkaXQgZGlhbG9nXG5cdGVkaXRSZWN1cnJpbmdFdmVudDogJ0VkaXQgcmVjdXJyaW5nIGV2ZW50Jyxcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6ICdEZWxldGUgcmVjdXJyaW5nIGV2ZW50Jyxcblx0ZWRpdFJlY3VycmluZ0V2ZW50UXVlc3Rpb246XG5cdFx0J2lzIGEgcmVjdXJyaW5nIGV2ZW50LiBIb3cgd291bGQgeW91IGxpa2UgdG8gZWRpdCBpdD8nLFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uOlxuXHRcdCdpcyBhIHJlY3VycmluZyBldmVudC4gSG93IHdvdWxkIHlvdSBsaWtlIHRvIGRlbGV0ZSBpdD8nLFxuXHR0aGlzRXZlbnQ6ICdUaGlzIGV2ZW50Jyxcblx0dGhpc0V2ZW50RGVzY3JpcHRpb246ICdPbmx5IGNoYW5nZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHR0aGlzQW5kRm9sbG93aW5nRXZlbnRzOiAnVGhpcyBhbmQgZm9sbG93aW5nIGV2ZW50cycsXG5cdHRoaXNBbmRGb2xsb3dpbmdFdmVudHNEZXNjcmlwdGlvbjogJ0VkaXQgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG5cdGFsbEV2ZW50czogJ0FsbCBldmVudHMnLFxuXHRhbGxFdmVudHNEZXNjcmlwdGlvbjogJ0VkaXQgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblx0b25seUNoYW5nZVRoaXM6ICdPbmx5IGNoYW5nZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHRjaGFuZ2VUaGlzQW5kRnV0dXJlOiAnQ2hhbmdlIHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRjaGFuZ2VFbnRpcmVTZXJpZXM6ICdDaGFuZ2UgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblx0b25seURlbGV0ZVRoaXM6ICdPbmx5IGRlbGV0ZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHRkZWxldGVUaGlzQW5kRnV0dXJlOiAnRGVsZXRlIHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRkZWxldGVFbnRpcmVTZXJpZXM6ICdEZWxldGUgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblxuXHQvLyBWaWV3IHR5cGVzXG5cdG1vbnRoOiAnTW9udGgnLFxuXHR3ZWVrOiAnV2VlaycsXG5cdGRheTogJ0RheScsXG5cdHllYXI6ICdZZWFyJyxcblx0bW9yZTogJ21vcmUnLFxuXG5cdC8vIFJlc291cmNlIGNhbGVuZGFyXG5cdHJlc291cmNlczogJ1Jlc291cmNlcycsXG5cdHJlc291cmNlOiAnUmVzb3VyY2UnLFxuXHR0aW1lOiAnVGltZScsXG5cdGRhdGU6ICdEYXRlJyxcblx0bm9SZXNvdXJjZXNWaXNpYmxlOiAnTm8gcmVzb3VyY2VzIHZpc2libGUnLFxuXHRhZGRSZXNvdXJjZXNPclNob3dFeGlzdGluZzogJ0FkZCByZXNvdXJjZXMgb3Igc2hvdyBleGlzdGluZyBvbmVzJyxcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuLyoqIFdoZXRoZXIgdGhlIGdpdmVuIGRhdGUgZmFsbHMgb24gdG9kYXkgKGNhbGVuZGFyIGRheSwgcmVzcGVjdGluZyB0aW1lem9uZSkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUb2RheShkYXRlOiBEYXlqcyk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gZGF0ZS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG59XG5cbi8qKiBgWVlZWS1NTS1ERGAgc3RyaW5nIHVzZWQgYXMgYSBzdGFibGUgcGVyLWRheSBrZXkgYWNyb3NzIHRoZSBjb2RlYmFzZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXlLZXkoZGF0ZTogRGF5anMpOiBzdHJpbmcge1xuXHRyZXR1cm4gZGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKVxufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHdlZWsgZGF5cyBmb3IgYSBnaXZlbiBkYXRlIGFuZCBmaXJzdCBkYXkgb2Ygd2VlayBzZXR0aW5nLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBjdXJyZW50IGRhdGUgaXMgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCB3ZWVrLFxuICogZXZlbiB3aGVuIHRoZSBmaXJzdCBkYXkgb2Ygd2VlayBpcyBzZXQgdG8gYSBkYXkgYWZ0ZXIgdGhlIGN1cnJlbnQgZGF0ZS5cbiAqXG4gKiBAcGFyYW0gY3VycmVudERhdGUgLSBUaGUgcmVmZXJlbmNlIGRhdGUgZm9yIGNhbGN1bGF0aW5nIHRoZSB3ZWVrXG4gKiBAcGFyYW0gZmlyc3REYXlPZldlZWsgLSBUaGUgZGF5IG51bWJlciAoMC02KSByZXByZXNlbnRpbmcgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCA9IFN1bmRheSwgMSA9IE1vbmRheSwgZXRjLilcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIDcgZGF5anMgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHdlZWsgZGF5cywgc3RhcnRpbmcgZnJvbSBmaXJzdERheU9mV2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgd2VlayBzdGFydGluZyBmcm9tIE1vbmRheSBmb3IgY3VycmVudCBkYXRlXG4gKiBjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGRheWpzKCcyMDI1LTEwLTEzJyksIDEpXG4gKiAvLyBSZXR1cm5zOiBbTW9uIE9jdCAxMywgVHVlIE9jdCAxNCwgLi4uLCBTdW4gT2N0IDE5XVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgd2VlayBzdGFydGluZyBmcm9tIFdlZG5lc2RheSB3aGVuIGN1cnJlbnQgZGF0ZSBpcyBNb25kYXlcbiAqIGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoZGF5anMoJzIwMjUtMTAtMTMnKSwgMylcbiAqIC8vIFJldHVybnM6IFtXZWQgT2N0IDgsIFRodSBPY3QgOSwgLi4uLCBUdWUgT2N0IDE0XSAoaW5jbHVkZXMgTW9uZGF5IE9jdCAxMylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWtEYXlzKFxuXHRjdXJyZW50RGF0ZTogRGF5anMsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbik6IERheWpzW10ge1xuXHRjb25zdCBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlXG5cdFx0LnN0YXJ0T2YoJ3dlZWsnKVxuXHRcdC5kYXkoZmlyc3REYXlPZldlZWspXG5cblx0Y29uc3QgYWRqdXN0ZWRTdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLmlzQmVmb3JlKHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlKVxuXHRcdD8gc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGUuc3VidHJhY3QoMSwgJ3dlZWsnKVxuXHRcdDogc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGVcblxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgZGF5SW5kZXgpID0+XG5cdFx0YWRqdXN0ZWRTdGFydE9mV2Vlay5hZGQoZGF5SW5kZXgsICdkYXknKVxuXHQpXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIDYgd2Vla3Mgb2YgZGF5cyBmb3IgYSBtb250aCBjYWxlbmRhciB2aWV3LlxuICogQWx3YXlzIHJldHVybnMgNDIgZGF5cyAoNiB3ZWVrcyDDlyA3IGRheXMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9udGhXZWVrcyhcblx0bW9udGhEYXRlOiBEYXlqcyxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuKTogRGF5anNbXVtdIHtcblx0Y29uc3QgZmlyc3RXZWVrID0gZ2V0V2Vla0RheXMobW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJyksIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiA2IH0sIChfLCB3ZWVrSW5kZXgpID0+IHtcblx0XHRjb25zdCB3ZWVrU3RhcnQgPSBmaXJzdFdlZWtbMF0uYWRkKHdlZWtJbmRleCwgJ3dlZWsnKVxuXHRcdHJldHVybiBnZXRXZWVrRGF5cyh3ZWVrU3RhcnQsIGZpcnN0RGF5T2ZXZWVrKVxuXHR9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9udGhEYXlzKG1vbnRoRGF0ZTogRGF5anMpOiBEYXlqc1tdIHtcblx0Y29uc3QgZGF5c0luTW9udGggPSBtb250aERhdGUuZGF5c0luTW9udGgoKVxuXHRjb25zdCBzdGFydE9mTW9udGggPSBtb250aERhdGUuc3RhcnRPZignbW9udGgnKVxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogZGF5c0luTW9udGggfSwgKF8sIGkpID0+XG5cdFx0c3RhcnRPZk1vbnRoLmFkZChpLCAnZGF5Jylcblx0KVxufVxuXG5pbnRlcmZhY2UgR2V0RGF5SG91cnNPcHRpb25zIHtcblx0cmVmZXJlbmNlRGF0ZT86IERheWpzXG5cdGxlbmd0aD86IG51bWJlclxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhbiBhcnJheSBvZiAyNCBkYXlqcyBvYmplY3RzIHJlcHJlc2VudGluZyBob3VybHkgc2xvdHMgZm9yIGEgZGF5LlxuICogVXNlcyAuaG91cihpKSBzbyBlYWNoIHJvdyBtYXBzIHRvIFwidGhlIGhvdXIgbGFiZWxlZCBpXCIg4oCUIGtlZXBpbmcgZ3JpZCByb3dzXG4gKiBhbGlnbmVkIGFjcm9zcyBjb2x1bW5zIGluIHdlZWsgdmlld3MuIE9uIERTVCBzcHJpbmctZm9yd2FyZCwgLmhvdXIoMikgcmV0dXJuc1xuICogMyBBTSAodGhlIG5vbi1leGlzdGVudCBob3VyIGlzIGNvbGxhcHNlZCksIGJ1dCB0aGUgZ3JpZCBrZXkgZml4IChkYXlJbmRleClcbiAqIGFuZCBwZXItZGF5IGdlbmVyYXRpb24gaW4gdmlld3MgaGFuZGxlIHRoaXMgY29ycmVjdGx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF5SG91cnMoe1xuXHRyZWZlcmVuY2VEYXRlID0gZGF5anMoKSxcblx0bGVuZ3RoID0gMjQsXG59OiBHZXREYXlIb3Vyc09wdGlvbnMgPSB7fSk6IERheWpzW10ge1xuXHRjb25zdCBzdGFydE9mRGF5ID0gcmVmZXJlbmNlRGF0ZS5zdGFydE9mKCdkYXknKVxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aCB9LCAoXywgaSkgPT5cblx0XHRzdGFydE9mRGF5LmhvdXIoaSkubWludXRlKDApLnNlY29uZCgwKS5taWxsaXNlY29uZCgwKVxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuLyoqXG4gKiBLZWVwIG9ubHkgZXZlbnRzIHdob3NlIGlkIGFwcGVhcnMgaW4gYHJlc291cmNlRXZlbnRzYC4gSWRzIGFyZSBjb21wYXJlZCBhc1xuICogc3RyaW5ncyBzbyBudW1lcmljL3N0cmluZyBtaXNtYXRjaGVzIGJldHdlZW4gc291cmNlcyBkb24ndCBjYXVzZSBmYWxzZVxuICogbmVnYXRpdmVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRXZlbnRzQnlSZXNvdXJjZShcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W10sXG5cdHJlc291cmNlRXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbik6IENhbGVuZGFyRXZlbnRbXSB7XG5cdGNvbnN0IGlkcyA9IG5ldyBTZXQocmVzb3VyY2VFdmVudHMubWFwKChlKSA9PiBTdHJpbmcoZS5pZCkpKVxuXHRyZXR1cm4gZXZlbnRzLmZpbHRlcigoZXZlbnQpID0+IGlkcy5oYXMoU3RyaW5nKGV2ZW50LmlkKSkpXG59XG5cbi8qKlxuICogV2hldGhlciBhbiBldmVudCdzIGludGVydmFsIG92ZXJsYXBzIHdpdGggdGhlIGBbc3RhcnQsIGVuZF1gIHJhbmdlXG4gKiAoaW5jbHVzaXZlKS4gQ292ZXJzIHRoZSB0aHJlZSBjYXNlczogc3RhcnRzIGluc2lkZSB0aGUgcmFuZ2UsIGVuZHMgaW5zaWRlXG4gKiB0aGUgcmFuZ2UsIG9yIGZ1bGx5IHNwYW5zIHRoZSByYW5nZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2ZW50T3ZlcmxhcHNSYW5nZShcblx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdHN0YXJ0OiBEYXlqcyxcblx0ZW5kOiBEYXlqc1xuKTogYm9vbGVhbiB7XG5cdGNvbnN0IHN0YXJ0c0luUmFuZ2UgPVxuXHRcdGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIoc3RhcnQpICYmIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGVuZClcblx0Y29uc3QgZW5kc0luUmFuZ2UgPVxuXHRcdGV2ZW50LmVuZC5pc1NhbWVPckFmdGVyKHN0YXJ0KSAmJiBldmVudC5lbmQuaXNTYW1lT3JCZWZvcmUoZW5kKVxuXHRjb25zdCBzcGFuc1JhbmdlID0gZXZlbnQuc3RhcnQuaXNCZWZvcmUoc3RhcnQpICYmIGV2ZW50LmVuZC5pc0FmdGVyKGVuZClcblx0cmV0dXJuIHN0YXJ0c0luUmFuZ2UgfHwgZW5kc0luUmFuZ2UgfHwgc3BhbnNSYW5nZVxufVxuIiwKICAgICJpbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHtcblx0RGlhbG9nLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dEZXNjcmlwdGlvbixcblx0RGlhbG9nRm9vdGVyLFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5jb25zdCBTQ09QRVMgPSBbXG5cdHtcblx0XHRzY29wZTogJ3RoaXMnLFxuXHRcdHRpdGxlOiAndGhpc0V2ZW50Jyxcblx0XHRlZGl0S2V5OiAnb25seUNoYW5nZVRoaXMnLFxuXHRcdGRlbGV0ZUtleTogJ29ubHlEZWxldGVUaGlzJyxcblx0fSxcblx0e1xuXHRcdHNjb3BlOiAnZm9sbG93aW5nJyxcblx0XHR0aXRsZTogJ3RoaXNBbmRGb2xsb3dpbmdFdmVudHMnLFxuXHRcdGVkaXRLZXk6ICdjaGFuZ2VUaGlzQW5kRnV0dXJlJyxcblx0XHRkZWxldGVLZXk6ICdkZWxldGVUaGlzQW5kRnV0dXJlJyxcblx0fSxcblx0e1xuXHRcdHNjb3BlOiAnYWxsJyxcblx0XHR0aXRsZTogJ2FsbEV2ZW50cycsXG5cdFx0ZWRpdEtleTogJ2NoYW5nZUVudGlyZVNlcmllcycsXG5cdFx0ZGVsZXRlS2V5OiAnZGVsZXRlRW50aXJlU2VyaWVzJyxcblx0fSxcbl0gYXMgY29uc3RcblxuaW50ZXJmYWNlIFJlY3VycmVuY2VFZGl0RGlhbG9nUHJvcHMge1xuXHRpc09wZW46IGJvb2xlYW5cblx0b25DbG9zZTogKCkgPT4gdm9pZFxuXHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4gdm9pZFxuXHRvcGVyYXRpb25UeXBlOiAnZWRpdCcgfCAnZGVsZXRlJ1xuXHRldmVudFRpdGxlOiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlY3VycmVuY2VFZGl0RGlhbG9nKHtcblx0aXNPcGVuLFxuXHRvbkNsb3NlLFxuXHRvbkNvbmZpcm0sXG5cdG9wZXJhdGlvblR5cGUsXG5cdGV2ZW50VGl0bGUsXG59OiBSZWN1cnJlbmNlRWRpdERpYWxvZ1Byb3BzKSB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7IHQ6IGNvbnRleHQudCB9KSlcblxuXHRjb25zdCBoYW5kbGVTY29wZVNlbGVjdCA9IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdG9uQ29uZmlybShzY29wZSlcblx0XHRvbkNsb3NlKClcblx0fVxuXG5cdGNvbnN0IGlzRWRpdCA9IG9wZXJhdGlvblR5cGUgPT09ICdlZGl0J1xuXG5cdHJldHVybiAoXG5cdFx0PERpYWxvZyBvbk9wZW5DaGFuZ2U9e29uQ2xvc2V9IG9wZW49e2lzT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtdy1tZFwiPlxuXHRcdFx0XHQ8RGlhbG9nSGVhZGVyPlxuXHRcdFx0XHRcdDxEaWFsb2dUaXRsZT5cblx0XHRcdFx0XHRcdHtpc0VkaXQgPyB0KCdlZGl0UmVjdXJyaW5nRXZlbnQnKSA6IHQoJ2RlbGV0ZVJlY3VycmluZ0V2ZW50Jyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dUaXRsZT5cblx0XHRcdFx0XHQ8RGlhbG9nRGVzY3JpcHRpb24+XG5cdFx0XHRcdFx0XHRcIntldmVudFRpdGxlfVwieycgJ31cblx0XHRcdFx0XHRcdHtpc0VkaXRcblx0XHRcdFx0XHRcdFx0PyB0KCdlZGl0UmVjdXJyaW5nRXZlbnRRdWVzdGlvbicpXG5cdFx0XHRcdFx0XHRcdDogdCgnZGVsZXRlUmVjdXJyaW5nRXZlbnRRdWVzdGlvbicpfVxuXHRcdFx0XHRcdDwvRGlhbG9nRGVzY3JpcHRpb24+XG5cdFx0XHRcdDwvRGlhbG9nSGVhZGVyPlxuXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0zXCI+XG5cdFx0XHRcdFx0e1NDT1BFUy5tYXAoKHsgc2NvcGUsIHRpdGxlLCBlZGl0S2V5LCBkZWxldGVLZXkgfSkgPT4gKFxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwganVzdGlmeS1zdGFydCBoLWF1dG8gcC00XCJcblx0XHRcdFx0XHRcdFx0a2V5PXtzY29wZX1cblx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3Qoc2NvcGUpfVxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPnt0KHRpdGxlKX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7dChpc0VkaXQgPyBlZGl0S2V5IDogZGVsZXRlS2V5KX1cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0PERpYWxvZ0Zvb3Rlcj5cblx0XHRcdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uQ2xvc2V9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdFx0XHR7dCgnY2FuY2VsJyl9XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvRGlhbG9nRm9vdGVyPlxuXHRcdFx0PC9EaWFsb2dDb250ZW50PlxuXHRcdDwvRGlhbG9nPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgRHJhZ0VuZEV2ZW50IH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICcuLi90eXBlcydcblxuaW50ZXJmYWNlIERyb3BDZWxsRGF0YSB7XG5cdHR5cGU/OiBzdHJpbmdcblx0ZGF0ZT86IHN0cmluZ1xuXHRob3VyPzogbnVtYmVyXG5cdG1pbnV0ZT86IG51bWJlclxuXHRyZXNvdXJjZUlkPzogc3RyaW5nXG5cdGFsbERheT86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IGdldFVwZGF0ZWRFdmVudCA9IChcblx0ZXZlbnQ6IERyYWdFbmRFdmVudCxcblx0YWN0aXZlRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG4pID0+IHtcblx0Y29uc3QgeyBhY3RpdmUsIG92ZXIgfSA9IGV2ZW50XG5cblx0aWYgKCFhY3RpdmUgfHwgIW92ZXIgfHwgIWFjdGl2ZUV2ZW50KSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXG5cdGNvbnN0IGRhdGEgPSAob3Zlci5kYXRhLmN1cnJlbnQgfHwge30pIGFzIERyb3BDZWxsRGF0YVxuXHRjb25zdCBpc1RpbWVDZWxsID0gZGF0YS50eXBlID09PSAndGltZS1jZWxsJ1xuXHRjb25zdCB7IHJlc291cmNlSWQsIGFsbERheSB9ID0gZGF0YVxuXHRsZXQgbmV3U3RhcnQ6IERheWpzXG5cblx0aWYgKGlzVGltZUNlbGwpIHtcblx0XHRjb25zdCB7IGRhdGUsIGhvdXIgPSAwLCBtaW51dGUgPSAwIH0gPSBkYXRhXG5cblx0XHQvLyBDcmVhdGUgbmV3IHN0YXJ0IHRpbWUgYmFzZWQgb24gdGhlIGRyb3AgdGFyZ2V0XG5cdFx0bmV3U3RhcnQgPSBkYXlqcyhkYXRlKS5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGUpXG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgeyBkYXRlIH0gPSBkYXRhXG5cblx0XHRuZXdTdGFydCA9IGRheWpzKGRhdGUpXG5cdH1cblxuXHRjb25zdCBldmVudER1cmF0aW9uID0gYWN0aXZlRXZlbnQuZW5kLmRpZmYoYWN0aXZlRXZlbnQuc3RhcnQsICdzZWNvbmQnKVxuXG5cdC8vIENyZWF0ZSBuZXcgZW5kIHRpbWUgYnkgYWRkaW5nIHRoZSBvcmlnaW5hbCBkdXJhdGlvblxuXHRsZXQgbmV3RW5kID0gbmV3U3RhcnQuYWRkKGV2ZW50RHVyYXRpb24sICdzZWNvbmQnKVxuXG5cdGlmIChuZXdFbmQuaXNTYW1lKG5ld0VuZC5zdGFydE9mKCdkYXknKSkpIHtcblx0XHQvLyBJZiB0aGUgbmV3IGVuZCB0aW1lIGlzIGF0IG1pZG5pZ2h0LCBzZXQgaXQgdG8gMjQgaG91cnMgb2YgcGFydGlhbCBkYXlcblx0XHRuZXdFbmQgPSBuZXdFbmQuc3VidHJhY3QoMSwgJ2RheScpLmVuZE9mKCdkYXknKVxuXHR9XG5cblx0Ly8gVXBkYXRlIHRoZSBldmVudCB3aXRoIG5ldyB0aW1lcyBhbmQgcmVzb3VyY2UgaWYgY2hhbmdlZFxuXHRjb25zdCB1cGRhdGVzID0ge1xuXHRcdHN0YXJ0OiBuZXdTdGFydCxcblx0XHRlbmQ6IG5ld0VuZCxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGFsbERheTogaXNUaW1lQ2VsbCA/IGZhbHNlIDogKGFsbERheSA/PyBhY3RpdmVFdmVudC5hbGxEYXkpLFxuXHR9XG5cdHJldHVybiB7IGFjdGl2ZUV2ZW50LCB1cGRhdGVzIH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgRHJhZ092ZXJsYXkgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHsgc25hcENlbnRlclRvQ3Vyc29yIH0gZnJvbSAnQGRuZC1raXQvbW9kaWZpZXJzJ1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VJbXBlcmF0aXZlSGFuZGxlLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJy4uL3R5cGVzJ1xuXG5pbnRlcmZhY2UgRXZlbnREcmFnT3ZlcmxheVByb3BzIHtcblx0cmVmOiBSZWFjdC5SZWY8eyBzZXRBY3RpdmVFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkIH0+XG59XG5cbmV4cG9ydCBjb25zdCBFdmVudERyYWdPdmVybGF5OiBSZWFjdC5GQzxFdmVudERyYWdPdmVybGF5UHJvcHM+ID0gKHsgcmVmIH0pID0+IHtcblx0Y29uc3QgW2FjdGl2ZUV2ZW50LCBzZXRBY3RpdmVFdmVudF0gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50IHwgbnVsbD4obnVsbClcblxuXHR1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcblx0XHRzZXRBY3RpdmVFdmVudCxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8RHJhZ092ZXJsYXkgbW9kaWZpZXJzPXtbc25hcENlbnRlclRvQ3Vyc29yXX0+XG5cdFx0XHR7YWN0aXZlRXZlbnQgJiYgKFxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdjdXJzb3ItZ3JhYiB0cnVuY2F0ZSByb3VuZGVkIGJnLWFtYmVyLTIwMCBwLTIgdGV4dC1bMTBweF0gc2hhZG93LWxnIHNtOnRleHQteHMgdy0yMCcsXG5cdFx0XHRcdFx0XHRhY3RpdmVFdmVudC5iYWNrZ3JvdW5kQ29sb3IgfHwgJ2JnLWJsdWUtNTAwJyxcblx0XHRcdFx0XHRcdGFjdGl2ZUV2ZW50LmNvbG9yIHx8ICd0ZXh0LXdoaXRlJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7YWN0aXZlRXZlbnQ/LnRpdGxlfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCl9XG5cdFx0PC9EcmFnT3ZlcmxheT5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9jaGVja2JveCdcbmltcG9ydCB7IERhdGVQaWNrZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGF0ZS1waWNrZXInXG5pbXBvcnQgeyBEaWFsb2dGb290ZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvaW5wdXQnXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9sYWJlbCdcbmltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyBUaW1lUGlja2VyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3RpbWUtcGlja2VyJ1xuaW1wb3J0IHsgaXNCdXNpbmVzc0RheSB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQge1xuXHRidWlsZERhdGVUaW1lLFxuXHRidWlsZEVuZERhdGVUaW1lLFxuXHRnZXRUaW1lQ29uc3RyYWludHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvZXZlbnQtZm9ybS11dGlscydcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0RGlhbG9nIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZydcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0b3IgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXRvci9yZWN1cnJlbmNlLWVkaXRvcidcbmltcG9ydCB7IHVzZVJlY3VycmluZ0V2ZW50QWN0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9ob29rcy91c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IGlzUmVjdXJyaW5nRXZlbnQgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuaW1wb3J0IHsgdXNlRWZmZWN0aXZlQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvaG9va3MvdXNlLWVmZmVjdGl2ZS1idXNpbmVzcy1ob3VycydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IENPTE9SX09QVElPTlMgPSBbXG5cdHsgdmFsdWU6ICdiZy1ibHVlLTEwMCB0ZXh0LWJsdWUtODAwJywgbGFiZWw6ICdCbHVlJyB9LFxuXHR7IHZhbHVlOiAnYmctZ3JlZW4tMTAwIHRleHQtZ3JlZW4tODAwJywgbGFiZWw6ICdHcmVlbicgfSxcblx0eyB2YWx1ZTogJ2JnLXB1cnBsZS0xMDAgdGV4dC1wdXJwbGUtODAwJywgbGFiZWw6ICdQdXJwbGUnIH0sXG5cdHsgdmFsdWU6ICdiZy1yZWQtMTAwIHRleHQtcmVkLTgwMCcsIGxhYmVsOiAnUmVkJyB9LFxuXHR7IHZhbHVlOiAnYmcteWVsbG93LTEwMCB0ZXh0LXllbGxvdy04MDAnLCBsYWJlbDogJ1llbGxvdycgfSxcblx0eyB2YWx1ZTogJ2JnLXBpbmstMTAwIHRleHQtcGluay04MDAnLCBsYWJlbDogJ1BpbmsnIH0sXG5cdHsgdmFsdWU6ICdiZy1pbmRpZ28tMTAwIHRleHQtaW5kaWdvLTgwMCcsIGxhYmVsOiAnSW5kaWdvJyB9LFxuXHR7IHZhbHVlOiAnYmctYW1iZXItMTAwIHRleHQtYW1iZXItODAwJywgbGFiZWw6ICdBbWJlcicgfSxcblx0eyB2YWx1ZTogJ2JnLWVtZXJhbGQtMTAwIHRleHQtZW1lcmFsZC04MDAnLCBsYWJlbDogJ0VtZXJhbGQnIH0sXG5cdHsgdmFsdWU6ICdiZy1za3ktMTAwIHRleHQtc2t5LTgwMCcsIGxhYmVsOiAnU2t5JyB9LFxuXHR7IHZhbHVlOiAnYmctdmlvbGV0LTEwMCB0ZXh0LXZpb2xldC04MDAnLCBsYWJlbDogJ1Zpb2xldCcgfSxcblx0eyB2YWx1ZTogJ2JnLXJvc2UtMTAwIHRleHQtcm9zZS04MDAnLCBsYWJlbDogJ1Jvc2UnIH0sXG5cdHsgdmFsdWU6ICdiZy10ZWFsLTEwMCB0ZXh0LXRlYWwtODAwJywgbGFiZWw6ICdUZWFsJyB9LFxuXHR7IHZhbHVlOiAnYmctb3JhbmdlLTEwMCB0ZXh0LW9yYW5nZS04MDAnLCBsYWJlbDogJ09yYW5nZScgfSxcbl1cblxudHlwZSBUZXh0RmllbGROYW1lID0gJ3RpdGxlJyB8ICdkZXNjcmlwdGlvbicgfCAnbG9jYXRpb24nXG5cbmludGVyZmFjZSBFdmVudEZvcm1UZXh0RmllbGRQcm9wcyB7XG5cdG5hbWU6IFRleHRGaWVsZE5hbWVcblx0bGFiZWw6IHN0cmluZ1xuXHRwbGFjZWhvbGRlcjogc3RyaW5nXG5cdHZhbHVlOiBzdHJpbmdcblx0cmVxdWlyZWQ/OiBib29sZWFuXG5cdG9uQ2hhbmdlOiAoXG5cdFx0ZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+XG5cdCkgPT4gdm9pZFxufVxuXG4vLyBTaGFyZWQgdGl0bGUgLyBkZXNjcmlwdGlvbiAvIGxvY2F0aW9uIGlucHV0cyAobXVzdCBsaXZlIG91dHNpZGUgRXZlbnRGb3JtIHRvIGtlZXAgZm9jdXMpLlxuY29uc3QgRXZlbnRGb3JtVGV4dEZpZWxkID0gKHtcblx0bmFtZSxcblx0bGFiZWwsXG5cdHBsYWNlaG9sZGVyLFxuXHR2YWx1ZSxcblx0cmVxdWlyZWQgPSBmYWxzZSxcblx0b25DaGFuZ2UsXG59OiBFdmVudEZvcm1UZXh0RmllbGRQcm9wcykgPT4gKFxuXHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cblx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCIgaHRtbEZvcj17bmFtZX0+XG5cdFx0XHR7bGFiZWx9XG5cdFx0PC9MYWJlbD5cblx0XHQ8SW5wdXRcblx0XHRcdGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRpZD17bmFtZX1cblx0XHRcdG5hbWU9e25hbWV9XG5cdFx0XHRvbkNoYW5nZT17b25DaGFuZ2V9XG5cdFx0XHRwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG5cdFx0XHRyZXF1aXJlZD17cmVxdWlyZWR9XG5cdFx0XHR2YWx1ZT17dmFsdWV9XG5cdFx0Lz5cblx0PC9kaXY+XG4pXG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRGb3JtUHJvcHMge1xuXHRvcGVuPzogYm9vbGVhblxuXHRzZWxlY3RlZEV2ZW50PzogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0b25BZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25VcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25EZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DbG9zZTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgRXZlbnRGb3JtOiBSZWFjdC5GQzxFdmVudEZvcm1Qcm9wcz4gPSAoe1xuXHRzZWxlY3RlZEV2ZW50LFxuXHRvbkNsb3NlLFxuXHRvblVwZGF0ZSxcblx0b25EZWxldGUsXG5cdG9uQWRkLFxufSkgPT4ge1xuXHRjb25zdCB7XG5cdFx0ZGlhbG9nU3RhdGUsXG5cdFx0b3BlbkVkaXREaWFsb2csXG5cdFx0b3BlbkRlbGV0ZURpYWxvZyxcblx0XHRjbG9zZURpYWxvZyxcblx0XHRoYW5kbGVDb25maXJtLFxuXHR9ID0gdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zKG9uQ2xvc2UpXG5cblx0Y29uc3QgeyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsIHQsIHRpbWVGb3JtYXQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KFxuXHRcdChjb250ZXh0KSA9PiAoe1xuXHRcdFx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiBjb250ZXh0LmZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHRcdHQ6IGNvbnRleHQudCxcblx0XHRcdHRpbWVGb3JtYXQ6IGNvbnRleHQudGltZUZvcm1hdCxcblx0XHR9KVxuXHQpXG5cdGNvbnN0IGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgPSB1c2VFZmZlY3RpdmVCdXNpbmVzc0hvdXJzKFxuXHRcdHNlbGVjdGVkRXZlbnQ/LnJlc291cmNlSWRcblx0KVxuXG5cdGNvbnN0IHN0YXJ0ID0gc2VsZWN0ZWRFdmVudD8uc3RhcnQgPz8gZGF5anMoKVxuXHRjb25zdCBlbmQgPSBzZWxlY3RlZEV2ZW50Py5lbmQgPz8gZGF5anMoKS5hZGQoMSwgJ2hvdXInKVxuXG5cdC8vIEZpbmQgcGFyZW50IGV2ZW50IGlmIHRoaXMgaXMgYSByZWN1cnJpbmcgZXZlbnQgaW5zdGFuY2Vcblx0Y29uc3QgcGFyZW50RXZlbnQgPSBzZWxlY3RlZEV2ZW50XG5cdFx0PyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudClcblx0XHQ6IG51bGxcblxuXHQvLyBGb3JtIHN0YXRlXG5cdGNvbnN0IFtzdGFydERhdGUsIHNldFN0YXJ0RGF0ZV0gPSB1c2VTdGF0ZShzdGFydC50b0RhdGUoKSlcblx0Y29uc3QgW2VuZERhdGUsIHNldEVuZERhdGVdID0gdXNlU3RhdGUoZW5kLnRvRGF0ZSgpKVxuXHRjb25zdCBbaXNBbGxEYXksIHNldElzQWxsRGF5XSA9IHVzZVN0YXRlKHNlbGVjdGVkRXZlbnQ/LmFsbERheSB8fCBmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkQ29sb3IsIHNldFNlbGVjdGVkQ29sb3JdID0gdXNlU3RhdGUoXG5cdFx0c2VsZWN0ZWRFdmVudD8uY29sb3IgfHwgQ09MT1JfT1BUSU9OU1swXS52YWx1ZVxuXHQpXG5cblx0Ly8gVGltZSBzdGF0ZVxuXHRjb25zdCBbc3RhcnRUaW1lLCBzZXRTdGFydFRpbWVdID0gdXNlU3RhdGUoc3RhcnQuZm9ybWF0KCdISDptbScpKVxuXHRjb25zdCBbZW5kVGltZSwgc2V0RW5kVGltZV0gPSB1c2VTdGF0ZShlbmQuZm9ybWF0KCdISDptbScpKVxuXG5cdC8vIEluaXRpYWxpemUgZm9ybSB2YWx1ZXMgZnJvbSBzZWxlY3RlZCBldmVudCBvciBkZWZhdWx0c1xuXHRjb25zdCBbZm9ybVZhbHVlcywgc2V0Rm9ybVZhbHVlc10gPSB1c2VTdGF0ZSh7XG5cdFx0dGl0bGU6IHNlbGVjdGVkRXZlbnQ/LnRpdGxlIHx8ICcnLFxuXHRcdGRlc2NyaXB0aW9uOiBzZWxlY3RlZEV2ZW50Py5kZXNjcmlwdGlvbiB8fCAnJyxcblx0XHRsb2NhdGlvbjogc2VsZWN0ZWRFdmVudD8ubG9jYXRpb24gfHwgJycsXG5cdH0pXG5cblx0Ly8gUmVjdXJyZW5jZSBzdGF0ZSAtIHB1bGwgUlJVTEUgZnJvbSBwYXJlbnQgaWYgdGhpcyBpcyBhbiBpbnN0YW5jZVxuXHRjb25zdCBbcnJ1bGUsIHNldFJydWxlXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KCgpID0+IHtcblx0XHRjb25zdCBldmVudFJydWxlID0gc2VsZWN0ZWRFdmVudD8ucnJ1bGUgfHwgcGFyZW50RXZlbnQ/LnJydWxlXG5cdFx0cmV0dXJuIGV2ZW50UnJ1bGUgfHwgbnVsbFxuXHR9KVxuXG5cdC8vIENyZWF0ZSB3cmFwcGVyIGZ1bmN0aW9ucyB0byBmaXggVHlwZVNjcmlwdCBlcnJvcnMgd2l0aCBEYXRlUGlja2VyXG5cdGNvbnN0IGhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0aWYgKCFkYXRlKSByZXR1cm5cblx0XHRzZXRTdGFydERhdGUoZGF0ZSlcblx0XHRpZiAoZGF5anMoZGF0ZSkuaXNBZnRlcihkYXlqcyhlbmREYXRlKSkpIHtcblx0XHRcdHNldEVuZERhdGUoZGF0ZSlcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVFbmREYXRlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcblx0XHRpZiAoIWRhdGUpIHJldHVyblxuXHRcdHNldEVuZERhdGUoZGF0ZSlcblx0XHRpZiAoZGF0ZSAmJiBkYXlqcyhkYXRlKS5pc0JlZm9yZShkYXlqcyhzdGFydERhdGUpKSkge1xuXHRcdFx0c2V0U3RhcnREYXRlKGRhdGUpXG5cdFx0fVxuXHR9XG5cblx0Ly8gVGltZSB2YWxpZGF0aW9uIGhhbmRsZXJzIC0gb25seSB2YWxpZGF0ZSB3aGVuIGRhdGVzIGFyZSB0aGUgc2FtZVxuXHRjb25zdCBoYW5kbGVTdGFydFRpbWVDaGFuZ2UgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0c2V0U3RhcnRUaW1lKHRpbWUpXG5cdFx0Ly8gT25seSB2YWxpZGF0ZSBpZiBzYW1lIGRheVxuXHRcdGlmIChkYXlqcyhzdGFydERhdGUpLmlzU2FtZShkYXlqcyhlbmREYXRlKSwgJ2RheScpICYmIHRpbWUgPiBlbmRUaW1lKSB7XG5cdFx0XHRzZXRFbmRUaW1lKHRpbWUpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRW5kVGltZUNoYW5nZSA9ICh0aW1lOiBzdHJpbmcpID0+IHtcblx0XHRzZXRFbmRUaW1lKHRpbWUpXG5cdFx0Ly8gT25seSB2YWxpZGF0ZSBpZiBzYW1lIGRheVxuXHRcdGlmIChkYXlqcyhzdGFydERhdGUpLmlzU2FtZShkYXlqcyhlbmREYXRlKSwgJ2RheScpICYmIHRpbWUgPCBzdGFydFRpbWUpIHtcblx0XHRcdHNldFN0YXJ0VGltZSh0aW1lKVxuXHRcdH1cblx0fVxuXG5cdC8vIFVwZGF0ZSBmb3JtIHZhbHVlcyB3aGVuIGlucHV0IGNoYW5nZXNcblx0Y29uc3QgaGFuZGxlSW5wdXRDaGFuZ2UgPSAoXG5cdFx0ZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+XG5cdCkgPT4ge1xuXHRcdGNvbnN0IHsgbmFtZSwgdmFsdWUgfSA9IGUudGFyZ2V0XG5cdFx0c2V0Rm9ybVZhbHVlcygocHJldikgPT4gKHsgLi4ucHJldiwgW25hbWVdOiB2YWx1ZSB9KSlcblx0fVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0Ly8gUmVzZXQgZW5kIHRpbWUgd2hlbiBhbGwgZGF5IGlzIHRvZ2dsZWQgdG8gb25cblx0XHRpZiAoaXNBbGxEYXkpIHtcblx0XHRcdHNldEVuZFRpbWUoJzIzOjU5Jylcblx0XHR9XG5cdH0sIFtpc0FsbERheV0pXG5cblx0Y29uc3QgaGFuZGxlU3VibWl0ID0gKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuXHRcdGUucHJldmVudERlZmF1bHQoKVxuXG5cdFx0Y29uc3Qgc3RhcnREYXRlVGltZSA9IGJ1aWxkRGF0ZVRpbWUoc3RhcnREYXRlLCBzdGFydFRpbWUsIGlzQWxsRGF5KVxuXHRcdGNvbnN0IGVuZERhdGVUaW1lID0gYnVpbGRFbmREYXRlVGltZShlbmREYXRlLCBlbmRUaW1lLCBpc0FsbERheSlcblxuXHRcdGNvbnN0IGV2ZW50RGF0YTogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdGlkOiBzZWxlY3RlZEV2ZW50Py5pZCB8fCBkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKSxcblx0XHRcdHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuXHRcdFx0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG5cdFx0XHRlbmQ6IGVuZERhdGVUaW1lLFxuXHRcdFx0cmVzb3VyY2VJZDogc2VsZWN0ZWRFdmVudD8ucmVzb3VyY2VJZCxcblx0XHRcdGRlc2NyaXB0aW9uOiBmb3JtVmFsdWVzLmRlc2NyaXB0aW9uLFxuXHRcdFx0bG9jYXRpb246IGZvcm1WYWx1ZXMubG9jYXRpb24sXG5cdFx0XHRhbGxEYXk6IGlzQWxsRGF5LFxuXHRcdFx0Y29sb3I6IHNlbGVjdGVkQ29sb3IsXG5cdFx0XHRycnVsZTogcnJ1bGUgfHwgdW5kZWZpbmVkLFxuXHRcdH1cblxuXHRcdGlmIChzZWxlY3RlZEV2ZW50Py5pZCAmJiBpc1JlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpKSB7XG5cdFx0XHRvcGVuRWRpdERpYWxvZyhzZWxlY3RlZEV2ZW50LCB7XG5cdFx0XHRcdHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuXHRcdFx0XHRzdGFydDogc3RhcnREYXRlVGltZSxcblx0XHRcdFx0ZW5kOiBlbmREYXRlVGltZSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IGZvcm1WYWx1ZXMuZGVzY3JpcHRpb24sXG5cdFx0XHRcdGxvY2F0aW9uOiBmb3JtVmFsdWVzLmxvY2F0aW9uLFxuXHRcdFx0XHRhbGxEYXk6IGlzQWxsRGF5LFxuXHRcdFx0XHRjb2xvcjogc2VsZWN0ZWRDb2xvcixcblx0XHRcdFx0cnJ1bGU6IHJydWxlIHx8IHVuZGVmaW5lZCxcblx0XHRcdH0pXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoc2VsZWN0ZWRFdmVudD8uaWQpIHtcblx0XHRcdG9uVXBkYXRlPy4oZXZlbnREYXRhKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvbkFkZD8uKGV2ZW50RGF0YSlcblx0XHR9XG5cdFx0b25DbG9zZSgpXG5cdH1cblxuXHRjb25zdCBoYW5kbGVEZWxldGUgPSAoKSA9PiB7XG5cdFx0aWYgKHNlbGVjdGVkRXZlbnQ/LmlkKSB7XG5cdFx0XHQvLyBDaGVjayBpZiB0aGlzIGlzIGEgcmVjdXJyaW5nIGV2ZW50XG5cdFx0XHRpZiAoaXNSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KSkge1xuXHRcdFx0XHQvLyBTaG93IHJlY3VycmluZyBldmVudCBkZWxldGUgZGlhbG9nXG5cdFx0XHRcdG9wZW5EZWxldGVEaWFsb2coc2VsZWN0ZWRFdmVudClcblx0XHRcdFx0cmV0dXJuIC8vIERvbid0IGNsb3NlIHRoZSBmb3JtIHlldCwgbGV0IHRoZSBkaWFsb2cgaGFuZGxlIGl0XG5cdFx0XHR9XG5cdFx0XHRvbkRlbGV0ZT8uKHNlbGVjdGVkRXZlbnQpXG5cdFx0XHRvbkNsb3NlKClcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVSUnVsZUNoYW5nZSA9IChuZXdSUnVsZTogUlJ1bGVPcHRpb25zIHwgbnVsbCkgPT4ge1xuXHRcdGlmICghbmV3UlJ1bGUpIHtcblx0XHRcdHNldFJydWxlKG51bGwpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0Y29uc3Qgc3RhcnREYXRlVGltZSA9IGJ1aWxkRGF0ZVRpbWUoc3RhcnREYXRlLCBzdGFydFRpbWUsIGlzQWxsRGF5KVxuXHRcdHNldFJydWxlKHsgLi4ubmV3UlJ1bGUsIGR0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUudG9EYXRlKCkgfSlcblx0fVxuXG5cdGNvbnN0IGRpc2FibGVkRGF0ZU1hdGNoZXIgPSBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzXG5cdFx0PyAoZGF0ZTogRGF0ZSkgPT4gIWlzQnVzaW5lc3NEYXkoZGF5anMoZGF0ZSksIGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMpXG5cdFx0OiB1bmRlZmluZWRcblxuXHRjb25zdCBzdGFydENvbnN0cmFpbnRzID0gZ2V0VGltZUNvbnN0cmFpbnRzKHN0YXJ0RGF0ZSwgZWZmZWN0aXZlQnVzaW5lc3NIb3Vycylcblx0Y29uc3QgZW5kQ29uc3RyYWludHMgPSBnZXRUaW1lQ29uc3RyYWludHMoZW5kRGF0ZSwgZWZmZWN0aXZlQnVzaW5lc3NIb3VycylcblxuXHRjb25zdCBkYXRlRmllbGRzID0gW1xuXHRcdFsnc3RhcnREYXRlJywgc3RhcnREYXRlLCBoYW5kbGVTdGFydERhdGVDaGFuZ2VdLFxuXHRcdFsnZW5kRGF0ZScsIGVuZERhdGUsIGhhbmRsZUVuZERhdGVDaGFuZ2VdLFxuXHRdIGFzIGNvbnN0XG5cblx0Y29uc3QgdGltZUZpZWxkcyA9IFtcblx0XHRbXG5cdFx0XHQnc3RhcnRUaW1lJyxcblx0XHRcdCdzdGFydC10aW1lJyxcblx0XHRcdHN0YXJ0VGltZSxcblx0XHRcdGhhbmRsZVN0YXJ0VGltZUNoYW5nZSxcblx0XHRcdHN0YXJ0Q29uc3RyYWludHMsXG5cdFx0XSxcblx0XHRbJ2VuZFRpbWUnLCAnZW5kLXRpbWUnLCBlbmRUaW1lLCBoYW5kbGVFbmRUaW1lQ2hhbmdlLCBlbmRDb25zdHJhaW50c10sXG5cdF0gYXMgY29uc3RcblxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8Zm9ybSBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGZsZXgtMSBtaW4taC0wXCIgb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0+XG5cdFx0XHRcdDxTY3JvbGxBcmVhIGNsYXNzTmFtZT1cImZsZXgtMSBtaW4taC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0zIHNtOmdhcC00IHAtMVwiPlxuXHRcdFx0XHRcdFx0PEV2ZW50Rm9ybVRleHRGaWVsZFxuXHRcdFx0XHRcdFx0XHRsYWJlbD17dCgndGl0bGUnKX1cblx0XHRcdFx0XHRcdFx0bmFtZT1cInRpdGxlXCJcblx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnZXZlbnRUaXRsZVBsYWNlaG9sZGVyJyl9XG5cdFx0XHRcdFx0XHRcdHJlcXVpcmVkXG5cdFx0XHRcdFx0XHRcdHZhbHVlPXtmb3JtVmFsdWVzLnRpdGxlfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDxFdmVudEZvcm1UZXh0RmllbGRcblx0XHRcdFx0XHRcdFx0bGFiZWw9e3QoJ2Rlc2NyaXB0aW9uJyl9XG5cdFx0XHRcdFx0XHRcdG5hbWU9XCJkZXNjcmlwdGlvblwiXG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cblx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9e3QoJ2V2ZW50RGVzY3JpcHRpb25QbGFjZWhvbGRlcicpfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17Zm9ybVZhbHVlcy5kZXNjcmlwdGlvbn1cblx0XHRcdFx0XHRcdC8+XG5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2lzQWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdGlkPVwiYWxsRGF5XCJcblx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eyhjaGVja2VkKSA9PiBzZXRJc0FsbERheShjaGVja2VkID09PSB0cnVlKX1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiIGh0bWxGb3I9XCJhbGxEYXlcIj5cblx0XHRcdFx0XHRcdFx0XHR7dCgnYWxsRGF5Jyl9XG5cdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC0yIHNtOmdhcC00XCI+XG5cdFx0XHRcdFx0XHRcdHtkYXRlRmllbGRzLm1hcCgoW2xhYmVsLCBkYXRlLCBvbkNoYW5nZV0pID0+IChcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGtleT17bGFiZWx9PlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KGxhYmVsKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0PERhdGVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibXQtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsb3NlT25TZWxlY3Rcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZT17ZGF0ZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkRGF0ZU1hdGNoZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtvbkNoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdHshaXNBbGxEYXkgJiYgKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIgc206Z2FwLTRcIj5cblx0XHRcdFx0XHRcdFx0XHR7dGltZUZpZWxkcy5tYXAoKFtsYWJlbCwgbmFtZSwgdmFsdWUsIG9uQ2hhbmdlLCBjXSkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBrZXk9e2xhYmVsfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KGxhYmVsKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8VGltZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTEgaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhUaW1lPXtjLm1heH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaW5UaW1lPXtjLm1pbn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPXtuYW1lfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtvbkNoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnc2VhcmNoVGltZScpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e3ZhbHVlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KX1cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnY29sb3InKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0e0NPTE9SX09QVElPTlMubWFwKChjb2xvcikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcmlhLWxhYmVsPXtjb2xvci5sYWJlbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRgJHtjb2xvci52YWx1ZX0gaC02IHctNiByb3VuZGVkLWZ1bGwgc206aC04IHNtOnctOGAsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRDb2xvciA9PT0gY29sb3IudmFsdWUgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdyaW5nLTIgcmluZy1ibGFjayByaW5nLW9mZnNldC0xIHNtOnJpbmctb2Zmc2V0LTInXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17Y29sb3IudmFsdWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNldFNlbGVjdGVkQ29sb3IoY29sb3IudmFsdWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdDxFdmVudEZvcm1UZXh0RmllbGRcblx0XHRcdFx0XHRcdFx0bGFiZWw9e3QoJ2xvY2F0aW9uJyl9XG5cdFx0XHRcdFx0XHRcdG5hbWU9XCJsb2NhdGlvblwiXG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cblx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9e3QoJ2V2ZW50TG9jYXRpb25QbGFjZWhvbGRlcicpfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17Zm9ybVZhbHVlcy5sb2NhdGlvbn1cblx0XHRcdFx0XHRcdC8+XG5cblx0XHRcdFx0XHRcdHsvKiBSZWN1cnJlbmNlIFNlY3Rpb24gKi99XG5cdFx0XHRcdFx0XHQ8UmVjdXJyZW5jZUVkaXRvciBvbkNoYW5nZT17aGFuZGxlUlJ1bGVDaGFuZ2V9IHZhbHVlPXtycnVsZX0gLz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9TY3JvbGxBcmVhPlxuXG5cdFx0XHRcdDxEaWFsb2dGb290ZXIgY2xhc3NOYW1lPVwibXQtNCBzaHJpbmstMCBmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgc206ZmxleC1yb3cgc206Z2FwLTBcIj5cblx0XHRcdFx0XHR7c2VsZWN0ZWRFdmVudD8uaWQgJiYgKFxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgc206bXItYXV0byBzbTp3LWF1dG9cIlxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtoYW5kbGVEZWxldGV9XG5cdFx0XHRcdFx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZGVzdHJ1Y3RpdmVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7dCgnZGVsZXRlJyl9XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgZ2FwLTIgc206dy1hdXRvXCI+XG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXgtMSBzbTpmbGV4LW5vbmVcIlxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtvbkNsb3NlfVxuXHRcdFx0XHRcdFx0XHRzaXplPVwic21cIlxuXHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7dCgnY2FuY2VsJyl9XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdDxCdXR0b24gY2xhc3NOYW1lPVwiZmxleC0xIHNtOmZsZXgtbm9uZVwiIHNpemU9XCJzbVwiIHR5cGU9XCJzdWJtaXRcIj5cblx0XHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgndXBkYXRlJykgOiB0KCdjcmVhdGUnKX1cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0RpYWxvZ0Zvb3Rlcj5cblx0XHRcdDwvZm9ybT5cblxuXHRcdFx0ey8qIFJlY3VycmluZyBFdmVudCBFZGl0IERpYWxvZyAqL31cblx0XHRcdDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuXHRcdFx0XHRldmVudFRpdGxlPXtkaWFsb2dTdGF0ZS5ldmVudD8udGl0bGUgfHwgJyd9XG5cdFx0XHRcdGlzT3Blbj17ZGlhbG9nU3RhdGUuaXNPcGVufVxuXHRcdFx0XHRvbkNsb3NlPXtjbG9zZURpYWxvZ31cblx0XHRcdFx0b25Db25maXJtPXtoYW5kbGVDb25maXJtfVxuXHRcdFx0XHRvcGVyYXRpb25UeXBlPXtkaWFsb2dTdGF0ZS5vcGVyYXRpb25UeXBlfVxuXHRcdFx0Lz5cblx0XHQ8Lz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBDaGVja2JveFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtY2hlY2tib3gnXG5pbXBvcnQgeyBDaGVja0ljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDaGVja2JveCh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBDaGVja2JveFByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxDaGVja2JveFByaW1pdGl2ZS5Sb290XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQncGVlciBib3JkZXItaW5wdXQgZGFyazpiZy1pbnB1dC8zMCBkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1wcmltYXJ5IGRhdGEtW3N0YXRlPWNoZWNrZWRdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6ZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTpib3JkZXItcHJpbWFyeSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBzaXplLTQgc2hyaW5rLTAgcm91bmRlZC1bNHB4XSBib3JkZXIgc2hhZG93LXhzIHRyYW5zaXRpb24tc2hhZG93IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjaGVja2JveFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvclxuXHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWN1cnJlbnQgdHJhbnNpdGlvbi1ub25lXCJcblx0XHRcdFx0ZGF0YS1zbG90PVwiY2hlY2tib3gtaW5kaWNhdG9yXCJcblx0XHRcdD5cblx0XHRcdFx0PENoZWNrSWNvbiBjbGFzc05hbWU9XCJzaXplLTMuNVwiIC8+XG5cdFx0XHQ8L0NoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvcj5cblx0XHQ8L0NoZWNrYm94UHJpbWl0aXZlLlJvb3Q+XG5cdClcbn1cblxuZXhwb3J0IHsgQ2hlY2tib3ggfVxuIiwKICAgICJpbXBvcnQgeyBQb3BvdmVyQ2xvc2UgfSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtcG9wb3ZlcidcbmltcG9ydCB7IENhbGVuZGFyIGFzIENhbGVuZGFySWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NhbGVuZGFyJ1xuaW1wb3J0IHtcblx0UG9wb3Zlcixcblx0UG9wb3ZlckNvbnRlbnQsXG5cdFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBEYXRlUGlja2VyUHJvcHMge1xuXHRkYXRlOiBEYXRlIHwgdW5kZWZpbmVkXG5cdG9uQ2hhbmdlPzogKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHZvaWRcblx0bGFiZWw/OiBzdHJpbmdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGNsb3NlT25TZWxlY3Q/OiBib29sZWFuXG5cdGRpc2FibGVkPzogKGRhdGU6IERhdGUpID0+IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERhdGVQaWNrZXIoe1xuXHRkYXRlLFxuXHRjbG9zZU9uU2VsZWN0LFxuXHRvbkNoYW5nZSxcblx0bGFiZWwgPSAnUGljayBhIGRhdGUnLFxuXHRjbGFzc05hbWUsXG5cdGRpc2FibGVkLFxufTogRGF0ZVBpY2tlclByb3BzKSB7XG5cdGNvbnN0IGZpcnN0RGF5T2ZXZWVrID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoXG5cdFx0KGNvbnRleHQpID0+IGNvbnRleHQuZmlyc3REYXlPZldlZWtcblx0KVxuXHRjb25zdCBwb3BPdmVyUmVmID0gdXNlUmVmPEhUTUxCdXR0b25FbGVtZW50IHwgbnVsbD4obnVsbClcblx0Y29uc3QgW3NlbGVjdGVkRGF0ZSwgc2V0U2VsZWN0ZWREYXRlXSA9IHVzZVN0YXRlPERhdGUgfCB1bmRlZmluZWQ+KGRhdGUpXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRzZXRTZWxlY3RlZERhdGUoZGF0ZSlcblx0fSwgW2RhdGVdKVxuXG5cdGNvbnN0IGhhbmRsZURhdGVTZWxlY3QgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuXHRcdHNldFNlbGVjdGVkRGF0ZShkYXRlKVxuXHRcdGlmIChjbG9zZU9uU2VsZWN0KSB7XG5cdFx0XHRwb3BPdmVyUmVmLmN1cnJlbnQ/LmNsaWNrKClcblx0XHR9XG5cdFx0b25DaGFuZ2U/LihkYXRlKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cblx0XHRcdDxQb3BvdmVyPlxuXHRcdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHQnZGF0YS1bZW1wdHk9dHJ1ZV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHctZnVsbCBqdXN0aWZ5LXN0YXJ0IHRleHQtbGVmdCBmb250LW5vcm1hbCdcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRkYXRhLWVtcHR5PXshZGF0ZX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8Q2FsZW5kYXJJY29uIC8+XG5cdFx0XHRcdFx0XHR7c2VsZWN0ZWREYXRlID8gKFxuXHRcdFx0XHRcdFx0XHRkYXlqcyhzZWxlY3RlZERhdGUpLmZvcm1hdCgnbGwnKVxuXHRcdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdFx0PHNwYW4+e2xhYmVsfTwvc3Bhbj5cblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvUG9wb3ZlclRyaWdnZXI+XG5cdFx0XHRcdDxQb3BvdmVyQ29udGVudCBhbGlnbj1cInN0YXJ0XCIgY2xhc3NOYW1lPVwidy1hdXRvIHAtMFwiPlxuXHRcdFx0XHRcdDxQb3BvdmVyQ2xvc2UgcmVmPXtwb3BPdmVyUmVmfSBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX0gLz5cblx0XHRcdFx0XHQ8Q2FsZW5kYXJcblx0XHRcdFx0XHRcdGRlZmF1bHRNb250aD17c2VsZWN0ZWREYXRlfVxuXHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkfVxuXHRcdFx0XHRcdFx0Zmlyc3REYXlPZldlZWs9e2ZpcnN0RGF5T2ZXZWVrfVxuXHRcdFx0XHRcdFx0b25TZWxlY3Q9e2hhbmRsZURhdGVTZWxlY3R9XG5cdFx0XHRcdFx0XHRzZWxlY3RlZD17c2VsZWN0ZWREYXRlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0XHQ8L1BvcG92ZXI+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ2hldnJvbkxlZnRJY29uLCBDaGV2cm9uUmlnaHRJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldE1vbnRoV2Vla3MsIGdldFdlZWtEYXlzLCBpc1RvZGF5IH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuaW50ZXJmYWNlIENhbGVuZGFyUHJvcHMge1xuXHRzZWxlY3RlZD86IERhdGVcblx0ZGVmYXVsdE1vbnRoPzogRGF0ZVxuXHRvblNlbGVjdD86IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB2b2lkXG5cdGRpc2FibGVkPzogKGRhdGU6IERhdGUpID0+IGJvb2xlYW5cblx0Zmlyc3REYXlPZldlZWs/OiBudW1iZXJcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDYWxlbmRhcih7XG5cdHNlbGVjdGVkLFxuXHRkZWZhdWx0TW9udGgsXG5cdG9uU2VsZWN0LFxuXHRkaXNhYmxlZCxcblx0Zmlyc3REYXlPZldlZWsgPSAwLFxuXHRjbGFzc05hbWUsXG59OiBDYWxlbmRhclByb3BzKSB7XG5cdGNvbnN0IFt2aWV3TW9udGgsIHNldFZpZXdNb250aF0gPSB1c2VTdGF0ZTxEYXlqcz4oKCkgPT5cblx0XHRkYXlqcyhkZWZhdWx0TW9udGggPz8gc2VsZWN0ZWQgPz8gbmV3IERhdGUoKSkuc3RhcnRPZignbW9udGgnKVxuXHQpXG5cblx0Y29uc3Qgd2Vla3MgPSBnZXRNb250aFdlZWtzKHZpZXdNb250aCwgZmlyc3REYXlPZldlZWspXG5cdGNvbnN0IHNlbGVjdGVkS2V5ID0gc2VsZWN0ZWRcblx0XHQ/IGRheWpzKHNlbGVjdGVkKS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXHRcdDogdW5kZWZpbmVkXG5cblx0Y29uc3Qgd2Vla2RheUhlYWRlcnMgPSBnZXRXZWVrRGF5cyhkYXlqcygpLCBmaXJzdERheU9mV2VlaykubWFwKChkKSA9PlxuXHRcdGQuZm9ybWF0KCdkZCcpXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2JnLWJhY2tncm91bmQgcC0zIHctWzI4MHB4XScsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYWxlbmRhclwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gbWItMlwiPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0YXJpYS1sYWJlbD1cIlByZXZpb3VzIG1vbnRoXCJcblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZXRWaWV3TW9udGgoKG0pID0+IG0uc3VidHJhY3QoMSwgJ21vbnRoJykpfVxuXHRcdFx0XHRcdHNpemU9XCJpY29uXCJcblx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PENoZXZyb25MZWZ0SWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHNlbGVjdC1ub25lXCI+XG5cdFx0XHRcdFx0e3ZpZXdNb250aC5mb3JtYXQoJ01NTU0gWVlZWScpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGFyaWEtbGFiZWw9XCJOZXh0IG1vbnRoXCJcblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZXRWaWV3TW9udGgoKG0pID0+IG0uYWRkKDEsICdtb250aCcpKX1cblx0XHRcdFx0XHRzaXplPVwiaWNvblwiXG5cdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxDaGV2cm9uUmlnaHRJY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdDx0YWJsZVxuXHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgYm9yZGVyLWNvbGxhcHNlXCJcblx0XHRcdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub05vbmludGVyYWN0aXZlRWxlbWVudFRvSW50ZXJhY3RpdmVSb2xlOiBkYXRlLXBpY2tlciBwYXR0ZXJuIOKAlCBXQUktQVJJQSBncmlkIHJvbGUgb24gYSB0YWJsZSBpcyBjYW5vbmljYWwgZm9yIGNhbGVuZGFyc1xuXHRcdFx0XHRyb2xlPVwiZ3JpZFwiXG5cdFx0XHQ+XG5cdFx0XHRcdDx0aGVhZD5cblx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHR7d2Vla2RheUhlYWRlcnMubWFwKChsYWJlbCwgaSkgPT4gKFxuXHRcdFx0XHRcdFx0XHQ8dGhcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC14cyBmb250LW1lZGl1bSBzZWxlY3Qtbm9uZSBweS0xXCJcblx0XHRcdFx0XHRcdFx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vQXJyYXlJbmRleEtleTogd2Vla2RheSBoZWFkZXIgb3JkZXIgaXMgc3RhYmxlXG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtpfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e2xhYmVsfVxuXHRcdFx0XHRcdFx0XHQ8L3RoPlxuXHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0PC90aGVhZD5cblx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdHt3ZWVrcy5tYXAoKHdlZWssIHdlZWtJZHgpID0+IChcblx0XHRcdFx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9BcnJheUluZGV4S2V5OiB3ZWVrIHJvdyBvcmRlciBpcyBzdGFibGUgd2l0aGluIGEgbW9udGhcblx0XHRcdFx0XHRcdDx0ciBrZXk9e3dlZWtJZHh9PlxuXHRcdFx0XHRcdFx0XHR7d2Vlay5tYXAoKGRheSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlzT3V0c2lkZSA9ICFkYXkuaXNTYW1lKHZpZXdNb250aCwgJ21vbnRoJylcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpc1NlbGVjdGVkID0gZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpID09PSBzZWxlY3RlZEtleVxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlzRGlzYWJsZWQgPSBkaXNhYmxlZD8uKGRheS50b0RhdGUoKSkgPz8gZmFsc2Vcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PHRkXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInAtMCB0ZXh0LWNlbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtb3V0c2lkZT17aXNPdXRzaWRlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXNlbGVjdGVkPXtpc1NlbGVjdGVkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2RheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9hMTF5L25vTm9uaW50ZXJhY3RpdmVFbGVtZW50VG9JbnRlcmFjdGl2ZVJvbGU6IGRhdGUtcGlja2VyIHBhdHRlcm4g4oCUIFdBSS1BUklBIGdyaWRjZWxsIG9uIHRkIGlzIGNhbm9uaWNhbDsga2V5Ym9hcmQgbmF2IGxpdmVzIG9uIHRoZSBjaGlsZCBidXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0cm9sZT1cImdyaWRjZWxsXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiSW5kZXg9ey0xfVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYS1kaXNhYmxlZD17aXNEaXNhYmxlZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmlhLWhpZGRlbj17aXNPdXRzaWRlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndy1mdWxsIGFzcGVjdC1zcXVhcmUgcm91bmRlZC1tZCB0ZXh0LXNtIHNlbGVjdC1ub25lJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCFpc0Rpc2FibGVkICYmICdob3ZlcjpiZy1hY2NlbnQgY3Vyc29yLXBvaW50ZXInLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXNPdXRzaWRlICYmICd0ZXh0LW11dGVkLWZvcmVncm91bmQvNTAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXNUb2RheShkYXkpICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCFpc1NlbGVjdGVkICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdiZy1hY2NlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpc1NlbGVjdGVkICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGZvbnQtbWVkaXVtJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlzRGlzYWJsZWQgJiYgJ29wYWNpdHktNTAgY3Vyc29yLW5vdC1hbGxvd2VkJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS1kaXNhYmxlZD17aXNEaXNhYmxlZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXNlbGVjdGVkPXtpc1NlbGVjdGVkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkPXtpc0Rpc2FibGVkIHx8IGlzT3V0c2lkZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBvblNlbGVjdD8uKGRheS50b0RhdGUoKSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiSW5kZXg9e2lzT3V0c2lkZSA/IC0xIDogMH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdEJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH0pfVxuXHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC90Ym9keT5cblx0XHRcdDwvdGFibGU+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgUG9wb3ZlclByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtcG9wb3ZlcidcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFBvcG92ZXIoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwicG9wb3ZlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gUG9wb3ZlclRyaWdnZXIoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuVHJpZ2dlcj4pIHtcblx0cmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwicG9wb3Zlci10cmlnZ2VyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBQb3BvdmVyQ29udGVudCh7XG5cdGNsYXNzTmFtZSxcblx0YWxpZ24gPSAnY2VudGVyJyxcblx0c2lkZU9mZnNldCA9IDQsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5Db250ZW50Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxQb3BvdmVyUHJpbWl0aXZlLlBvcnRhbD5cblx0XHRcdDxQb3BvdmVyUHJpbWl0aXZlLkNvbnRlbnRcblx0XHRcdFx0YWxpZ249e2FsaWdufVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiB6LTUwIHctNzIgb3JpZ2luLSgtLXJhZGl4LXBvcG92ZXItY29udGVudC10cmFuc2Zvcm0tb3JpZ2luKSByb3VuZGVkLW1kIGJvcmRlciBwLTQgc2hhZG93LW1kIG91dGxpbmUtaGlkZGVuJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS1zbG90PVwicG9wb3Zlci1jb250ZW50XCJcblx0XHRcdFx0c2lkZU9mZnNldD17c2lkZU9mZnNldH1cblx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0Lz5cblx0XHQ8L1BvcG92ZXJQcmltaXRpdmUuUG9ydGFsPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJBbmNob3Ioe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yPikge1xuXHRyZXR1cm4gPFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yIGRhdGEtc2xvdD1cInBvcG92ZXItYW5jaG9yXCIgey4uLnByb3BzfSAvPlxufVxuXG5leHBvcnQgeyBQb3BvdmVyLCBQb3BvdmVyQW5jaG9yLCBQb3BvdmVyQ29udGVudCwgUG9wb3ZlclRyaWdnZXIgfVxuIiwKICAgICJpbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBJbnB1dCh7IGNsYXNzTmFtZSwgdHlwZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2lucHV0Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8aW5wdXRcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmaWxlOnRleHQtZm9yZWdyb3VuZCBwbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQgc2VsZWN0aW9uOmJnLXByaW1hcnkgc2VsZWN0aW9uOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6YmctaW5wdXQvMzAgYm9yZGVyLWlucHV0IGZsZXggaC05IHctZnVsbCBtaW4tdy0wIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTMgcHktMSB0ZXh0LWJhc2Ugc2hhZG93LXhzIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmaWxlOmlubGluZS1mbGV4IGZpbGU6aC03IGZpbGU6Ym9yZGVyLTAgZmlsZTpiZy10cmFuc3BhcmVudCBmaWxlOnRleHQtc20gZmlsZTpmb250LW1lZGl1bSBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIG1kOnRleHQtc20nLFxuXHRcdFx0XHQnZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0nLFxuXHRcdFx0XHQnYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiaW5wdXRcIlxuXHRcdFx0dHlwZT17dHlwZX1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7IElucHV0IH1cbiIsCiAgICAiaW1wb3J0ICogYXMgTGFiZWxQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWxhYmVsJ1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gTGFiZWwoe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgTGFiZWxQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIChcblx0XHQ8TGFiZWxQcmltaXRpdmUuUm9vdFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc20gbGVhZGluZy1ub25lIGZvbnQtbWVkaXVtIHNlbGVjdC1ub25lIGdyb3VwLWRhdGEtW2Rpc2FibGVkPXRydWVdOnBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtZGF0YS1bZGlzYWJsZWQ9dHJ1ZV06b3BhY2l0eS01MCBwZWVyLWRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBwZWVyLWRpc2FibGVkOm9wYWNpdHktNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJsYWJlbFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgeyBMYWJlbCB9XG4iLAogICAgImltcG9ydCAqIGFzIFNjcm9sbEFyZWFQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXNjcm9sbC1hcmVhJ1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIFNjcm9sbEFyZWFQcm9wc1xuXHRleHRlbmRzIFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3Q+IHtcblx0dmlld1BvcnRQcm9wcz86IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlZpZXdwb3J0PlxufVxuXG5mdW5jdGlvbiBTY3JvbGxBcmVhKHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0dmlld1BvcnRQcm9wcyxcblx0Li4ucHJvcHNcbn06IFNjcm9sbEFyZWFQcm9wcykge1xuXHRyZXR1cm4gKFxuXHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3Rcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3JlbGF0aXZlJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydFxuXHRcdFx0XHR7Li4udmlld1BvcnRQcm9wc31cblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgc2l6ZS1mdWxsIHJvdW5kZWQtW2luaGVyaXRdIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTEnLFxuXHRcdFx0XHRcdHZpZXdQb3J0UHJvcHM/LmNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS12aWV3cG9ydFwiXG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cblx0XHRcdDxTY3JvbGxCYXIgLz5cblx0XHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLkNvcm5lciAvPlxuXHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNjcm9sbEJhcih7XG5cdGNsYXNzTmFtZSxcblx0b3JpZW50YXRpb24gPSAndmVydGljYWwnLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhcj4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCB0b3VjaC1ub25lIHAtcHggdHJhbnNpdGlvbi1jb2xvcnMgc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyAmJlxuXHRcdFx0XHRcdCdoLWZ1bGwgdy0yLjUgYm9yZGVyLWwgYm9yZGVyLWwtdHJhbnNwYXJlbnQnLFxuXHRcdFx0XHRvcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnICYmXG5cdFx0XHRcdFx0J2gtMi41IGZsZXgtY29sIGJvcmRlci10IGJvcmRlci10LXRyYW5zcGFyZW50Jyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtc2Nyb2xsYmFyXCJcblx0XHRcdG9yaWVudGF0aW9uPXtvcmllbnRhdGlvbn1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhVGh1bWJcblx0XHRcdFx0Y2xhc3NOYW1lPVwiYmctYm9yZGVyIHJlbGF0aXZlIGZsZXgtMSByb3VuZGVkLWZ1bGxcIlxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS10aHVtYlwiXG5cdFx0XHQvPlxuXHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyPlxuXHQpXG59XG5cbmV4cG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9XG4iLAogICAgImltcG9ydCB7IENsb2NrIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvaW5wdXQnXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IHVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXIgfSBmcm9tICdAL2hvb2tzL3VzZS1hdXRvY29tcGxldGUtdGltZXBpY2tlcidcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB0eXBlIHsgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5cbmNvbnN0IGhhbmRsZVdoZWVsID0gKGU6IFJlYWN0LldoZWVsRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG5cdC8vIFByZXZlbnQgZXZlbnQgZnJvbSBidWJibGluZyB0byBwcmV2ZW50IFBvcG92ZXIgZnJvbSBjbG9zaW5nXG5cdGUuc3RvcFByb3BhZ2F0aW9uKClcbn1cblxuaW50ZXJmYWNlIFRpbWVQaWNrZXJQcm9wcyB7XG5cdHZhbHVlOiBzdHJpbmdcblx0b25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG5cdG1pblRpbWU/OiBzdHJpbmdcblx0bWF4VGltZT86IHN0cmluZ1xuXHR0aW1lRm9ybWF0PzogVGltZUZvcm1hdFxuXHRwbGFjZWhvbGRlcj86IHN0cmluZ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0ZGlzYWJsZWQ/OiBib29sZWFuXG5cdG5hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRpbWVQaWNrZXIoe1xuXHR2YWx1ZSxcblx0b25DaGFuZ2UsXG5cdG1pblRpbWUgPSAnMDA6MDAnLFxuXHRtYXhUaW1lID0gJzIzOjQ1Jyxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0cGxhY2Vob2xkZXIgPSAnU2VsZWN0IHRpbWUuLi4nLFxuXHRjbGFzc05hbWUsXG5cdGRpc2FibGVkID0gZmFsc2UsXG5cdG5hbWUsXG59OiBUaW1lUGlja2VyUHJvcHMpIHtcblx0Y29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cdGNvbnN0IFtzZWFyY2gsIHNldFNlYXJjaF0gPSB1c2VTdGF0ZSgnJylcblx0Y29uc3QgaW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbClcblx0Y29uc3QgdHJpZ2dlclJlZiA9IHVzZVJlZjxIVE1MQnV0dG9uRWxlbWVudD4obnVsbClcblx0Y29uc3QgW3RyaWdnZXJXaWR0aCwgc2V0VHJpZ2dlcldpZHRoXSA9IHVzZVN0YXRlPG51bWJlcj4oMClcblxuXHRjb25zdCB7IHRpbWVPcHRpb25zLCBmb3JtYXRUaW1lIH0gPSB1c2VBdXRvY29tcGxldGVUaW1lcGlja2VyKHtcblx0XHR0aW1lRm9ybWF0LFxuXHRcdG1pblRpbWUsXG5cdFx0bWF4VGltZSxcblx0fSlcblxuXHQvLyBGaWx0ZXIgdGltZSBvcHRpb25zIGJhc2VkIG9uIHNlYXJjaFxuXHRjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSB0aW1lT3B0aW9ucy5maWx0ZXIoKHRpbWUpID0+IHtcblx0XHRjb25zdCBmb3JtYXR0ZWRUaW1lID0gZm9ybWF0VGltZSh0aW1lKVxuXHRcdHJldHVybiBmb3JtYXR0ZWRUaW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoLnRvTG93ZXJDYXNlKCkpXG5cdH0pXG5cblx0Y29uc3QgaGFuZGxlU2VsZWN0ID0gKHRpbWU6IHN0cmluZykgPT4ge1xuXHRcdG9uQ2hhbmdlKHRpbWUpXG5cdFx0c2V0T3BlbihmYWxzZSlcblx0XHRzZXRTZWFyY2goJycpXG5cdH1cblxuXHQvLyBNZWFzdXJlIHRyaWdnZXIgd2lkdGggYW5kIGZvY3VzIGlucHV0IHdoZW4gcG9wb3ZlciBvcGVuc1xuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChvcGVuKSB7XG5cdFx0XHRpZiAodHJpZ2dlclJlZi5jdXJyZW50KSB7XG5cdFx0XHRcdHNldFRyaWdnZXJXaWR0aCh0cmlnZ2VyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGgpXG5cdFx0XHR9XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0aW5wdXRSZWYuY3VycmVudD8uZm9jdXMoKVxuXHRcdFx0fSwgMClcblx0XHR9XG5cdH0sIFtvcGVuXSlcblxuXHRjb25zdCBjdXJyZW50VGltZVN0cmluZyA9IHZhbHVlID8gZm9ybWF0VGltZSh2YWx1ZSkgOiBwbGFjZWhvbGRlclxuXG5cdHJldHVybiAoXG5cdFx0PFBvcG92ZXIgb25PcGVuQ2hhbmdlPXtzZXRPcGVufSBvcGVuPXtvcGVufT5cblx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0YXJpYS1jb250cm9scz1cInRpbWUtcGlja2VyLWxpc3Rib3hcIlxuXHRcdFx0XHRcdGFyaWEtZXhwYW5kZWQ9e29wZW59XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbigndy1mdWxsIGp1c3RpZnktc3RhcnQnLCBjbGFzc05hbWUpfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLnRpbWVQaWNrZXIobmFtZSl9XG5cdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkfVxuXHRcdFx0XHRcdHJlZj17dHJpZ2dlclJlZn1cblx0XHRcdFx0XHRyb2xlPVwiY29tYm9ib3hcIlxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxDbG9jayBjbGFzc05hbWU9XCJtci0yIGgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdHtjdXJyZW50VGltZVN0cmluZ31cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0PFBvcG92ZXJDb250ZW50XG5cdFx0XHRcdGFsaWduPVwic3RhcnRcIlxuXHRcdFx0XHRjbGFzc05hbWU9XCJwLTBcIlxuXHRcdFx0XHRzdHlsZT17eyB3aWR0aDogdHJpZ2dlcldpZHRoIH19XG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicC0yIGJvcmRlci1iXCI+XG5cdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLThcIlxuXHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhlKSA9PiBzZXRTZWFyY2goZS50YXJnZXQudmFsdWUpfVxuXHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9XCJTZWFyY2ggdGltZS4uLlwiXG5cdFx0XHRcdFx0XHRyZWY9e2lucHV0UmVmfVxuXHRcdFx0XHRcdFx0dmFsdWU9e3NlYXJjaH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PFNjcm9sbEFyZWEgY2xhc3NOYW1lPVwiaC1bMjAwcHhdXCIgb25XaGVlbD17aGFuZGxlV2hlZWx9PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicC0xXCI+XG5cdFx0XHRcdFx0XHR7ZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMCA/IChcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJweS02IHRleHQtY2VudGVyIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0Ti9BXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdFx0ZmlsdGVyZWRPcHRpb25zLm1hcCgodGltZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHRpbWVTdHJpbmcgPSBmb3JtYXRUaW1lKHRpbWUpXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgaXNTZWxlY3RlZCA9IHRpbWUgPT09IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdDxidXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQncmVsYXRpdmUgZmxleCB3LWZ1bGwgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgaXRlbXMtY2VudGVyIHJvdW5kZWQtc20gcHgtMiBweS0xLjUgdGV4dC1zbSBvdXRsaW5lLW5vbmUgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlzU2VsZWN0ZWQgJiYgJ2JnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e3RpbWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdCh0aW1lKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0aW1lU3RyaW5nfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9TY3JvbGxBcmVhPlxuXHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHQ8L1BvcG92ZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBUaW1lRm9ybWF0IH0gZnJvbSAnQC90eXBlcydcblxuaW50ZXJmYWNlIFVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXJQcm9wcyB7XG5cdHRpbWVGb3JtYXQ/OiBUaW1lRm9ybWF0XG5cdG1pblRpbWU/OiBzdHJpbmdcblx0bWF4VGltZT86IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlcih7XG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdG1pblRpbWUgPSAnMDA6MDAnLFxuXHRtYXhUaW1lID0gJzIzOjQ1Jyxcbn06IFVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXJQcm9wcykge1xuXHQvLyBHZW5lcmF0ZSB0aW1lIG9wdGlvbnMgKDE1LW1pbnV0ZSBpbnRlcnZhbHMpIHdpdGhpbiBtaW4vbWF4IHJhbmdlXG5cdGNvbnN0IHRpbWVPcHRpb25zID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0Y29uc3QgdGltZXM6IHN0cmluZ1tdID0gW11cblx0XHRjb25zdCBbbWluSG91ciwgbWluTWludXRlXSA9IG1pblRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRcdGNvbnN0IFttYXhIb3VyLCBtYXhNaW51dGVdID0gbWF4VGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cblx0XHRjb25zdCBtaW5Ub3RhbE1pbnV0ZXMgPSBtaW5Ib3VyICogNjAgKyBtaW5NaW51dGVcblx0XHRjb25zdCBtYXhUb3RhbE1pbnV0ZXMgPSBtYXhIb3VyICogNjAgKyBtYXhNaW51dGVcblxuXHRcdGZvciAoXG5cdFx0XHRsZXQgdG90YWxNaW51dGVzID0gbWluVG90YWxNaW51dGVzO1xuXHRcdFx0dG90YWxNaW51dGVzIDw9IG1heFRvdGFsTWludXRlcztcblx0XHRcdHRvdGFsTWludXRlcyArPSAxNVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHRvdGFsTWludXRlcyAvIDYwKVxuXHRcdFx0Y29uc3QgbWludXRlcyA9IHRvdGFsTWludXRlcyAlIDYwXG5cblx0XHRcdGNvbnN0IHRpbWVTdHJpbmcgPSBgJHtob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7bWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YFxuXHRcdFx0dGltZXMucHVzaCh0aW1lU3RyaW5nKVxuXHRcdH1cblxuXHRcdHJldHVybiB0aW1lc1xuXHR9LCBbbWluVGltZSwgbWF4VGltZV0pXG5cblx0Y29uc3QgZm9ybWF0VGltZSA9ICh0aW1lOiBzdHJpbmcpID0+IHtcblx0XHRjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cdFx0Y29uc3QgcGVyaW9kID0gaG91cnMgPj0gMTIgPyAnUE0nIDogJ0FNJ1xuXHRcdGNvbnN0IGRpc3BsYXlIb3VycyA9IGhvdXJzID09PSAwID8gMTIgOiBob3VycyA+IDEyID8gaG91cnMgLSAxMiA6IGhvdXJzXG5cblx0XHRpZiAodGltZUZvcm1hdCA9PT0gJzI0LWhvdXInKSB7XG5cdFx0XHRyZXR1cm4gYCR7aG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWBcblx0XHR9XG5cblx0XHRyZXR1cm4gYCR7ZGlzcGxheUhvdXJzfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfSAke3BlcmlvZH1gXG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdHRpbWVPcHRpb25zLFxuXHRcdGZvcm1hdFRpbWUsXG5cdH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZ2V0RGF5S2V5LCBpc1RvZGF5IH0gZnJvbSAnLi9kYXRlLXV0aWxzJ1xuXG50eXBlIElkID0gc3RyaW5nIHwgbnVtYmVyXG5cbmNvbnN0IHBhZDIgPSAobjogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nID0+IFN0cmluZyhuKS5wYWRTdGFydCgyLCAnMCcpXG5jb25zdCBwYWRIb3VySWZOdW1iZXIgPSAoaG91cjogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nID0+XG5cdHR5cGVvZiBob3VyID09PSAnbnVtYmVyJyA/IHBhZDIoaG91cikgOiBob3VyXG5cbi8qKlxuICogQ2VudHJhbGl6ZWQgZmFjdG9yeSBmb3Iga2V5cywgaWRzLCBhbmQgZGF0YS10ZXN0aWRzLiBFYWNoIGVudHJ5IHJldHVybnMgYVxuICogc2VtYW50aWMgc3RyaW5nIGlkZW50aWZpZWQgYnkgaXRzIGNvbmNlcHQgcHJlZml4IChlLmcuIGBkYXktY29sLWAsXG4gKiBgZGF5LWNlbGwtYCwgYHdlZWstaGVhZGVyLWRheS1gKS4gVGhlIGNhbGwgc2l0ZSBjaG9vc2VzIHRoZSByb2xlIOKAlCB0aGVcbiAqIHNhbWUgc3RyaW5nIGNhbiBzZXJ2ZSBhcyBhIFJlYWN0IGBrZXk9YCwgYW4gYGlkYCwgb3IgYSBgZGF0YS10ZXN0aWRgLlxuICpcbiAqIEluc3BpcmVkIGJ5IGh0dHBzOi8vdGtkb2RvLmV1L2Jsb2cvZWZmZWN0aXZlLXJlYWN0LXF1ZXJ5LWtleXMjdXNlLXF1ZXJ5LWtleS1mYWN0b3JpZXMuXG4gKiBQcmV2ZW50cyBhZC1ob2Mgc3RyaW5nIGNvbmNhdGVuYXRpb24gc28gY3Jvc3MtY3V0dGluZyBjaGFuZ2VzIChwcmVmaXgsXG4gKiBzZXBhcmF0b3IsIGZvcm1hdCkgYXJlIG9uZS1wb2ludC5cbiAqL1xuZXhwb3J0IGNvbnN0IGtleXMgPSB7XG5cdC8vIEdyaWQgY29sdW1uIGNvbmZpZ3VyYXRpb24gaWRzXG5cdGNvbDoge1xuXHRcdHRpbWU6ICd0aW1lLWNvbCcsXG5cdFx0ZGF0ZTogJ2RhdGUtY29sJyxcblx0XHRkYXk6IChkYXk6IERheWpzLCByZXNvdXJjZUlkPzogSWQpID0+IHtcblx0XHRcdGNvbnN0IGJhc2UgPSBgZGF5LWNvbC0ke2dldERheUtleShkYXkpfWBcblx0XHRcdHJldHVybiByZXNvdXJjZUlkICE9IG51bGwgPyBgJHtiYXNlfS1yZXNvdXJjZS0ke3Jlc291cmNlSWR9YCA6IGJhc2Vcblx0XHR9LFxuXHRcdHJlc291cmNlOiAoc2NvcGU6ICd3ZWVrJyB8ICdtb250aCcsIHJlc291cmNlSWQ6IElkKSA9PlxuXHRcdFx0YCR7c2NvcGV9LWNvbC1yZXNvdXJjZS0ke3Jlc291cmNlSWR9YCxcblx0XHRhbGxEYXk6IChkYXk6IERheWpzLCBpbmRleDogbnVtYmVyKSA9PlxuXHRcdFx0YGFsbC1kYXktY29sLSR7Z2V0RGF5S2V5KGRheSl9LSR7aW5kZXh9YCxcblx0fSxcblxuXHQvLyBHcmlkIGNlbGwgaWRlbnRpZmllcnNcblx0Y2VsbDoge1xuXHRcdGRheTogKGRheTogRGF5anMsIGhvdXI/OiBudW1iZXIgfCBzdHJpbmcsIG1pbnV0ZTogbnVtYmVyIHwgc3RyaW5nID0gMCkgPT4ge1xuXHRcdFx0Y29uc3QgayA9IGdldERheUtleShkYXkpXG5cdFx0XHRyZXR1cm4gaG91ciAhPSBudWxsXG5cdFx0XHRcdD8gYGRheS1jZWxsLSR7a30tJHtwYWQyKGhvdXIpfS0ke3BhZDIobWludXRlKX1gXG5cdFx0XHRcdDogYGRheS1jZWxsLSR7a31gXG5cdFx0fSxcblx0XHR2ZXJ0aWNhbFRpbWU6IChob3VyOiBudW1iZXIgfCBzdHJpbmcpID0+IGB2ZXJ0aWNhbC10aW1lLSR7cGFkMihob3VyKX1gLFxuXHRcdHZlcnRpY2FsOiAoXG5cdFx0XHRkYXk6IERheWpzLFxuXHRcdFx0aG91cjogbnVtYmVyIHwgc3RyaW5nLFxuXHRcdFx0bWludXRlOiBudW1iZXIgfCBzdHJpbmcsXG5cdFx0XHRyZXNvdXJjZUlkPzogSWRcblx0XHQpID0+IHtcblx0XHRcdGNvbnN0IGJhc2UgPSBgdmVydGljYWwtY2VsbC0ke2dldERheUtleShkYXkpfS0ke3BhZDIoaG91cil9LSR7cGFkMihtaW51dGUpfWBcblx0XHRcdHJldHVybiByZXNvdXJjZUlkICE9IG51bGwgPyBgJHtiYXNlfS1yZXNvdXJjZS0ke3Jlc291cmNlSWR9YCA6IGJhc2Vcblx0XHR9LFxuXHR9LFxuXG5cdC8vIENvbnRhaW5lciAod3JhcHBlcikgaWRlbnRpZmllcnNcblx0Y29udGFpbmVyOiB7XG5cdFx0dmVydGljYWw6IHtcblx0XHRcdGNvbDogKGlkOiBJZCkgPT4gYHZlcnRpY2FsLWNvbC0ke2lkfWAsXG5cdFx0fSxcblx0XHRob3Jpem9udGFsOiB7XG5cdFx0XHRyb3c6IChpZDogSWQpID0+IGBob3Jpem9udGFsLXJvdy0ke2lkfWAsXG5cdFx0XHRyb3dMYWJlbDogKHJlc291cmNlSWQ6IElkKSA9PiBgaG9yaXpvbnRhbC1yb3ctbGFiZWwtJHtyZXNvdXJjZUlkfWAsXG5cdFx0XHRldmVudDogKGV2ZW50SWQ6IElkKSA9PiBgaG9yaXpvbnRhbC1ldmVudC0ke2V2ZW50SWR9YCxcblx0XHR9LFxuXHRcdGV2ZW50c0xheWVyOiAob3JpZW50YXRpb246ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcsIGlkOiBJZCkgPT5cblx0XHRcdGAke29yaWVudGF0aW9ufS1ldmVudHMtJHtpZH1gLFxuXHR9LFxuXG5cdC8vIEhlYWRlciBpZGVudGlmaWVyc1xuXHRoZWFkZXI6IHtcblx0XHRyZXNvdXJjZToge1xuXHRcdFx0d2Vla0RheTogJ3Jlc291cmNlLXdlZWstZGF5LWhlYWRlcicsXG5cdFx0XHR0aW1lTGFiZWw6ICh2aWV3OiAnd2VlaycgfCAnZGF5JywgaG91cjogbnVtYmVyIHwgc3RyaW5nKSA9PlxuXHRcdFx0XHRgcmVzb3VyY2UtJHt2aWV3fS10aW1lLWxhYmVsLSR7cGFkSG91cklmTnVtYmVyKGhvdXIpfWAsXG5cdFx0fSxcblx0XHR3ZWVrZGF5OiAodmlldzogJ3dlZWsnIHwgJ21vbnRoJywgbmFtZTogc3RyaW5nKSA9PlxuXHRcdFx0YCR7dmlld30taGVhZGVyLXdlZWtkYXktJHtuYW1lLnRvTG93ZXJDYXNlKCl9YCxcblx0XHR3ZWVrOiB7XG5cdFx0XHRkYXk6IChkYXk6IERheWpzKSA9PiBgd2Vlay1oZWFkZXItZGF5LSR7ZGF5LnRvSVNPU3RyaW5nKCl9YCxcblx0XHRcdGhvdXI6IChkYXk6IERheWpzLCByZWY6IElkKSA9PlxuXHRcdFx0XHRgd2Vlay1oZWFkZXItaG91ci0ke2RheS50b0lTT1N0cmluZygpfS0ke3JlZn1gLFxuXHRcdFx0cmVzb3VyY2U6IChyZXNvdXJjZUlkOiBJZCkgPT4gYHdlZWstaGVhZGVyLXJlc291cmNlLSR7cmVzb3VyY2VJZH1gLFxuXHRcdH0sXG5cdFx0eWVhcjoge1xuXHRcdFx0bW9udGg6IChtb250aEtleTogc3RyaW5nLCBwYXJ0PzogJ3RpdGxlJyB8ICdjb3VudCcgfCAnbWluaScpID0+XG5cdFx0XHRcdHBhcnQgPyBgeWVhci1tb250aC0ke3BhcnR9LSR7bW9udGhLZXl9YCA6IGB5ZWFyLW1vbnRoLSR7bW9udGhLZXl9YCxcblx0XHRcdGRheTogKG1vbnRoS2V5OiBzdHJpbmcsIGRheUtleTogc3RyaW5nKSA9PlxuXHRcdFx0XHRgeWVhci1kYXktJHttb250aEtleX0tJHtkYXlLZXl9YCxcblx0XHR9LFxuXHR9LFxuXG5cdC8vIFJlc291cmNlLXNjb3BlZCBhbGwtZGF5IHJvdyBpZCAoZmFsbHMgYmFjayB0byAnbWFpbicgd2hlbiB1bnNjb3BlZCkuXG5cdGFsbERheVJvdzogKHJlc291cmNlSWQ/OiBJZCkgPT4gYGFsbGRheS1yb3ctJHtyZXNvdXJjZUlkID8/ICdtYWluJ31gLFxuXG5cdC8vIEdlbmVyaWMgaXRlcmF0aW9uIGtleSBjb21wb3NlciBmb3IgUmVhY3QgYGtleT1gIHByb3BzLCBsaXN0IG1hcmtlcnMsXG5cdC8vIGFuZCBzdWZmaXhlZCB3cmFwcGVyIGtleXMgKGUuZy4gYGxpc3RLZXkoYmFzZSwgJ2FuaW1hdGVkJylgKS5cblx0bGlzdEtleTogKC4uLnBhcnRzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+KSA9PiBwYXJ0cy5qb2luKCctJyksXG5cblx0Ly8gRGF5TnVtYmVyIGNvbXBvbmVudCB0ZXN0aWQg4oCUIGBkYXktbnVtYmVyLXRvZGF5YCB3aGVuIHRoZSBkYXRlIGlzIHRvZGF5LFxuXHQvLyBvdGhlcndpc2UgYGRheS1udW1iZXIte0R9YC5cblx0ZGF5TnVtYmVyOiAoZGF0ZTogRGF5anMpID0+XG5cdFx0aXNUb2RheShkYXRlKSA/ICdkYXktbnVtYmVyLXRvZGF5JyA6IGBkYXktbnVtYmVyLSR7ZGF0ZS5mb3JtYXQoJ0QnKX1gLFxuXG5cdC8vIEZvcm0gZWxlbWVudCB0ZXN0aWQgZm9yIHRpbWUgcGlja2VycyAobmFtZSA9ICdzdGFydCcgLyAnZW5kJyBldGMuKVxuXHR0aW1lUGlja2VyOiAobmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiBgdGltZS1waWNrZXItJHtuYW1lID8/ICcnfWAsXG5cblx0Ly8gRHJvcHBhYmxlIGlkcyAoZG5kLWtpdCByZWdpc3RyeSDigJQgSVNPIGZvciBwZXItc2xvdCB1bmlxdWVuZXNzKS5cblx0Ly8gYGRyb3AtYCBwcmVmaXggYXZvaWRzIGNvbGxpZGluZyB3aXRoIGBjZWxsLmRheWAgdGVzdGlkcy5cblx0ZHJvcHBhYmxlOiB7XG5cdFx0ZGF5Q2VsbDogKGRheTogRGF5anMsIG9wdGlvbnM/OiB7IGFsbERheT86IGJvb2xlYW47IHJlc291cmNlSWQ/OiBJZCB9KSA9PiB7XG5cdFx0XHRjb25zdCBpc28gPSBkYXkudG9JU09TdHJpbmcoKVxuXHRcdFx0Y29uc3QgYWxsRGF5UGFydCA9IG9wdGlvbnM/LmFsbERheSA/ICctYWxsZGF5JyA6ICcnXG5cdFx0XHRjb25zdCByZXNvdXJjZVBhcnQgPVxuXHRcdFx0XHRvcHRpb25zPy5yZXNvdXJjZUlkICE9IG51bGwgPyBgLXJlc291cmNlLSR7b3B0aW9ucy5yZXNvdXJjZUlkfWAgOiAnJ1xuXHRcdFx0cmV0dXJuIGBkcm9wLWRheS1jZWxsLSR7aXNvfSR7YWxsRGF5UGFydH0ke3Jlc291cmNlUGFydH1gXG5cdFx0fSxcblx0fSxcbn0gYXMgY29uc3RcbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgV0VFS19EQVlTX05VTUJFUl9NQVAgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgc3BlY2lmaWMgZGF0ZSBpcyBhIGJ1c2luZXNzIGRheS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSBUaGUgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIGJ1c2luZXNzSG91cnMgVGhlIGJ1c2luZXNzIGhvdXJzIGNvbmZpZ3VyYXRpb24gKHNpbmdsZSBvciBhcnJheSlcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGRhdGUgaXMgYSBidXNpbmVzcyBkYXksIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgY29uc3QgaXNCdXNpbmVzc0RheSA9IChcblx0ZGF0ZTogRGF5anMsXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG4pOiBib29sZWFuID0+IHtcblx0aWYgKCFidXNpbmVzc0hvdXJzKSB7XG5cdFx0cmV0dXJuIHRydWVcblx0fVxuXG5cdGxldCBoYXNNYXRjaCA9IGZhbHNlXG5cdHByb2Nlc3NCdXNpbmVzc0hvdXJzKGJ1c2luZXNzSG91cnMsIHtcblx0XHRkYXRlLFxuXHRcdG9uTWF0Y2g6ICgpID0+IHtcblx0XHRcdGhhc01hdGNoID0gdHJ1ZVxuXHRcdH0sXG5cdH0pXG5cblx0cmV0dXJuIGhhc01hdGNoXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXNCdXNpbmVzc0hvdXJPcHRpb25zIHtcblx0ZGF0ZTogRGF5anNcblx0aG91cj86IG51bWJlclxuXHRtaW51dGU/OiBudW1iZXJcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBzcGVjaWZpYyBob3VyIG9uIGEgc3BlY2lmaWMgZGF0ZSBpcyB3aXRoaW4gYnVzaW5lc3MgaG91cnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIGNoZWNraW5nIGJ1c2luZXNzIGhvdXJzXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0aW1lIGlzIHdpdGhpbiBidXNpbmVzcyBob3VycywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0J1c2luZXNzSG91ciA9ICh7XG5cdGRhdGUsXG5cdGhvdXIsXG5cdG1pbnV0ZSA9IDAsXG5cdGJ1c2luZXNzSG91cnMsXG59OiBJc0J1c2luZXNzSG91ck9wdGlvbnMpOiBib29sZWFuID0+IHtcblx0Ly8gSWYgYnVzaW5lc3MgaG91cnMgYXJlIG5vdCBjb25maWd1cmVkLCBjb25zaWRlciBldmVyeXRoaW5nIGFzIFwiYnVzaW5lc3MgaG91cnNcIlxuXHRpZiAoIWJ1c2luZXNzSG91cnMpIHtcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cblx0Ly8gSWYgaG91ciBpcyBub3QgcHJvdmlkZWQsIHdlIGFzc3VtZSB0aGUgdXNlciBvbmx5IGNhcmVzIGFib3V0IHRoZSBkYXlcblx0aWYgKGhvdXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBpc0J1c2luZXNzRGF5KGRhdGUsIGJ1c2luZXNzSG91cnMpXG5cdH1cblxuXHRsZXQgaXNJbkJ1c2luZXNzSG91ciA9IGZhbHNlXG5cdGNvbnN0IGN1cnJlbnRNaW51dGVzID0gaG91ciAqIDYwICsgbWludXRlXG5cblx0cHJvY2Vzc0J1c2luZXNzSG91cnMoYnVzaW5lc3NIb3Vycywge1xuXHRcdGRhdGUsXG5cdFx0b25NYXRjaDogKGNvbmZpZykgPT4ge1xuXHRcdFx0Ly8gQ2hlY2sgdGltZSBhZ2FpbnN0IHRoaXMgc3BlY2lmaWMgY29uZmlnXG5cdFx0XHQvLyBzdGFydFRpbWUgYW5kIGVuZFRpbWUgYXJlIG51bWJlcnMgKDAtMjQpXG5cdFx0XHRjb25zdCBzdGFydEggPSBjb25maWcuc3RhcnRUaW1lID8/IDlcblx0XHRcdGNvbnN0IGVuZEggPSBjb25maWcuZW5kVGltZSA/PyAxN1xuXG5cdFx0XHRjb25zdCBzdGFydE1pbnV0ZXMgPSBzdGFydEggKiA2MFxuXHRcdFx0Y29uc3QgZW5kTWludXRlcyA9IGVuZEggKiA2MFxuXG5cdFx0XHRpZiAoY3VycmVudE1pbnV0ZXMgPj0gc3RhcnRNaW51dGVzICYmIGN1cnJlbnRNaW51dGVzIDwgZW5kTWludXRlcykge1xuXHRcdFx0XHRpc0luQnVzaW5lc3NIb3VyID0gdHJ1ZVxuXHRcdFx0fVxuXHRcdH0sXG5cdH0pXG5cblx0cmV0dXJuIGlzSW5CdXNpbmVzc0hvdXJcbn1cblxuLyoqXG4gKiBIZWxwZXIgdG8gcHJvY2VzcyBhIGJ1c2luZXNzIGhvdXJzIGNvbmZpZ3VyYXRpb24gYW5kIHVwZGF0ZSB0aGUgcmFuZ2UuXG4gKi9cbmV4cG9ydCBjb25zdCBwcm9jZXNzQnVzaW5lc3NIb3VycyA9IChcblx0Ymg6IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10gfCB1bmRlZmluZWQsXG5cdG9wdGlvbnM6IHtcblx0XHRkYXRlPzogRGF5anNcblx0XHRvbk1hdGNoOiAoY29uZmlnOiBCdXNpbmVzc0hvdXJzKSA9PiB2b2lkXG5cdH1cbikgPT4ge1xuXHRjb25zdCB7IGRhdGUsIG9uTWF0Y2ggfSA9IG9wdGlvbnNcblx0aWYgKCFiaCkgcmV0dXJuXG5cblx0Y29uc3QgY29uZmlncyA9IEFycmF5LmlzQXJyYXkoYmgpID8gYmggOiBbYmhdXG5cblx0Zm9yIChjb25zdCBjb25maWcgb2YgY29uZmlncykge1xuXHRcdGlmIChkYXRlICYmIGNvbmZpZy5kYXlzT2ZXZWVrKSB7XG5cdFx0XHRjb25zdCBkYXlPZldlZWsgPSBkYXRlLmRheSgpXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNvbmZpZy5kYXlzT2ZXZWVrLnNvbWUoKGQpID0+IFdFRUtfREFZU19OVU1CRVJfTUFQW2RdID09PSBkYXlPZldlZWspXG5cdFx0XHQpIHtcblx0XHRcdFx0b25NYXRjaChjb25maWcpXG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9uTWF0Y2goY29uZmlnKVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1c2luZXNzSG91cnNSYW5nZSB7XG5cdG1pblN0YXJ0OiBudW1iZXJcblx0bWF4RW5kOiBudW1iZXJcblx0aGFzQnVzaW5lc3NIb3VyczogYm9vbGVhblxufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHVuaW9uIG9mIGJ1c2luZXNzIGhvdXJzIHJhbmdlcyBhY3Jvc3MgbXVsdGlwbGUgZGF0ZXMgYW5kL29yIHJlc291cmNlIGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlID0gKG9wdGlvbnM6IHtcblx0YWxsRGF0ZXM6IERheWpzW11cblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzPzogKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW11cblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG59KTogQnVzaW5lc3NIb3Vyc1JhbmdlID0+IHtcblx0Y29uc3Qge1xuXHRcdGFsbERhdGVzLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzID0gW10sXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdH0gPSBvcHRpb25zXG5cblx0bGV0IG1pblN0YXJ0ID0gMjRcblx0bGV0IG1heEVuZCA9IDBcblx0bGV0IGhhc0J1c2luZXNzSG91cnMgPSBmYWxzZVxuXG5cdGNvbnN0IG9uTWF0Y2ggPSAoY29uZmlnOiBCdXNpbmVzc0hvdXJzKSA9PiB7XG5cdFx0aGFzQnVzaW5lc3NIb3VycyA9IHRydWVcblx0XHRtaW5TdGFydCA9IE1hdGgubWluKG1pblN0YXJ0LCBjb25maWcuc3RhcnRUaW1lID8/IDkpXG5cdFx0bWF4RW5kID0gTWF0aC5tYXgobWF4RW5kLCBjb25maWcuZW5kVGltZSA/PyAxNylcblx0fVxuXG5cdC8vIEludm9rZSBwcm9jZXNzQnVzaW5lc3NIb3VycyBmb3IgdGhlIGdsb2JhbCBjb25maWcgYW5kIGV2ZXJ5IHJlc291cmNlXG5cdC8vIGNvbmZpZywgb3B0aW9uYWxseSBzY29wZWQgdG8gYSBzcGVjaWZpYyBkYXRlLlxuXHRjb25zdCBwcm9jZXNzQWxsID0gKGRhdGU/OiBEYXlqcykgPT4ge1xuXHRcdHByb2Nlc3NCdXNpbmVzc0hvdXJzKGJ1c2luZXNzSG91cnMsIHsgZGF0ZSwgb25NYXRjaCB9KVxuXHRcdGZvciAoY29uc3QgcmJoIG9mIHJlc291cmNlQnVzaW5lc3NIb3Vycykge1xuXHRcdFx0cHJvY2Vzc0J1c2luZXNzSG91cnMocmJoLCB7IGRhdGUsIG9uTWF0Y2ggfSlcblx0XHR9XG5cdH1cblxuXHRmb3IgKGNvbnN0IGRhdGUgb2YgYWxsRGF0ZXMpIHByb2Nlc3NBbGwoZGF0ZSlcblxuXHQvLyBGYWxsYmFjazogcmV0cnkgd2l0aG91dCBkYXRlIHNjb3BpbmcsIHRoZW4gZGVmYXVsdCB0byA5LTE3IGlmIHN0aWxsIGVtcHR5LlxuXHRpZiAoIWhhc0J1c2luZXNzSG91cnMgJiYgaGlkZU5vbkJ1c2luZXNzSG91cnMpIHtcblx0XHRwcm9jZXNzQWxsKClcblx0XHRpZiAoIWhhc0J1c2luZXNzSG91cnMpIHtcblx0XHRcdG1pblN0YXJ0ID0gOVxuXHRcdFx0bWF4RW5kID0gMTdcblx0XHRcdGhhc0J1c2luZXNzSG91cnMgPSB0cnVlXG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgbWluU3RhcnQsIG1heEVuZCwgaGFzQnVzaW5lc3NIb3VycyB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGNhbGN1bGF0ZUJ1c2luZXNzSG91cnNSYW5nZSB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgY29uc3QgYnVpbGREYXRlVGltZSA9IChcblx0ZGF0ZTogRGF0ZSxcblx0dGltZTogc3RyaW5nLFxuXHRpc0FsbERheTogYm9vbGVhblxuKTogRGF5anMgPT4ge1xuXHRjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cdGNvbnN0IGJhc2UgPSBkYXlqcyhkYXRlKS5ob3VyKGhvdXJzKS5taW51dGUobWludXRlcylcblx0cmV0dXJuIGlzQWxsRGF5ID8gYmFzZS5ob3VyKDApLm1pbnV0ZSgwKSA6IGJhc2Vcbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkRW5kRGF0ZVRpbWUgPSAoXG5cdGRhdGU6IERhdGUsXG5cdHRpbWU6IHN0cmluZyxcblx0aXNBbGxEYXk6IGJvb2xlYW5cbik6IERheWpzID0+IHtcblx0Y29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRjb25zdCBiYXNlID0gZGF5anMoZGF0ZSkuaG91cihob3VycykubWludXRlKG1pbnV0ZXMpXG5cdHJldHVybiBpc0FsbERheSA/IGJhc2UuaG91cigyMykubWludXRlKDU5KSA6IGJhc2Vcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRpbWVDb25zdHJhaW50cyA9IChcblx0ZGF0ZTogRGF0ZSxcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbikgPT4ge1xuXHRpZiAoIWJ1c2luZXNzSG91cnMpIHJldHVybiB7IG1pbjogJzAwOjAwJywgbWF4OiAnMjM6NTknIH1cblxuXHRjb25zdCBkYXlqc0RhdGUgPSBkYXlqcyhkYXRlKVxuXG5cdGNvbnN0IHsgbWluU3RhcnQsIG1heEVuZCwgaGFzQnVzaW5lc3NIb3VycyB9ID0gY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlKHtcblx0XHRhbGxEYXRlczogW2RheWpzRGF0ZV0sXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3VyczogZmFsc2UsXG5cdH0pXG5cblx0aWYgKCFoYXNCdXNpbmVzc0hvdXJzKSB7XG5cdFx0cmV0dXJuIHsgbWluOiAnMDA6MDAnLCBtYXg6ICcyMzo1OScgfVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRtaW46IGAke21pblN0YXJ0LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06MDBgLFxuXHRcdG1heDogYCR7KG1heEVuZCAtIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06NDVgLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgV2Vla2RheSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IENhcmQsIENhcmRDb250ZW50LCBDYXJkSGVhZGVyLCBDYXJkVGl0bGUgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2FyZCdcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NoZWNrYm94J1xuaW1wb3J0IHsgRGF0ZVBpY2tlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9kYXRlLXBpY2tlcidcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2lucHV0J1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvbGFiZWwnXG5pbXBvcnQge1xuXHRTZWxlY3QsXG5cdFNlbGVjdENvbnRlbnQsXG5cdFNlbGVjdEl0ZW0sXG5cdFNlbGVjdFRyaWdnZXIsXG5cdFNlbGVjdFZhbHVlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2VsZWN0J1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuY29uc3QgRlJFUV9NQVAgPSB7XG5cdERBSUxZOiBSUnVsZS5EQUlMWSxcblx0V0VFS0xZOiBSUnVsZS5XRUVLTFksXG5cdE1PTlRITFk6IFJSdWxlLk1PTlRITFksXG5cdFlFQVJMWTogUlJ1bGUuWUVBUkxZLFxufSBhcyBjb25zdFxuY29uc3QgRlJFUV9UT19TVFIgPSBPYmplY3QuZnJvbUVudHJpZXMoXG5cdE9iamVjdC5lbnRyaWVzKEZSRVFfTUFQKS5tYXAoKFtrLCB2XSkgPT4gW3YsIGtdKVxuKSBhcyBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+XG5jb25zdCBXRUVLREFZUyA9IFtcblx0UlJ1bGUuU1UsXG5cdFJSdWxlLk1PLFxuXHRSUnVsZS5UVSxcblx0UlJ1bGUuV0UsXG5cdFJSdWxlLlRILFxuXHRSUnVsZS5GUixcblx0UlJ1bGUuU0EsXG5dXG5cbmNvbnN0IEVORF9UWVBFUyA9IFtcblx0eyB0eXBlOiAnbmV2ZXInLCBpZDogJ25ldmVyJywgbGFiZWxLZXk6ICduZXZlcicgfSxcblx0eyB0eXBlOiAnY291bnQnLCBpZDogJ2FmdGVyJywgbGFiZWxLZXk6ICdhZnRlcicgfSxcblx0eyB0eXBlOiAndW50aWwnLCBpZDogJ29uJywgbGFiZWxLZXk6ICdvbicgfSxcbl0gYXMgY29uc3RcbmNvbnN0IHBhcnNlTnVtID0gKHY6IHN0cmluZykgPT4gTWF0aC5tYXgoMSwgTnVtYmVyLnBhcnNlSW50KHYsIDEwKSB8fCAxKVxuXG5jb25zdCBnZXREZXNjcmlwdGlvbiA9IChcblx0b3B0czogUlJ1bGVPcHRpb25zIHwgbnVsbCxcblx0dDogKGs6IHN0cmluZykgPT4gc3RyaW5nXG4pID0+IHtcblx0aWYgKCFvcHRzKSB7XG5cdFx0cmV0dXJuIHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuXHR9XG5cdHRyeSB7XG5cdFx0Y29uc3QgdGV4dCA9IG5ldyBSUnVsZShvcHRzKS50b1RleHQoKVxuXHRcdHJldHVybiB0ZXh0ICYmICF0ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Vycm9yJylcblx0XHRcdD8gdGV4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRleHQuc2xpY2UoMSlcblx0XHRcdDogdCgnY3VzdG9tUmVjdXJyZW5jZScpXG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiB0KCdjdXN0b21SZWN1cnJlbmNlJylcblx0fVxufVxuXG5pbnRlcmZhY2UgUHJvcHMge1xuXHR2YWx1ZT86IFJSdWxlT3B0aW9ucyB8IG51bGxcblx0b25DaGFuZ2U6ICh2OiBSUnVsZU9wdGlvbnMgfCBudWxsKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBjb25zdCBSZWN1cnJlbmNlRWRpdG9yOiBSZWFjdC5GQzxQcm9wcz4gPSAoeyB2YWx1ZSwgb25DaGFuZ2UgfSkgPT4ge1xuXHRjb25zdCB7IHQsIGZpcnN0RGF5T2ZXZWVrIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdHQ6IGN0eC50LFxuXHRcdGZpcnN0RGF5T2ZXZWVrOiBjdHguZmlyc3REYXlPZldlZWssXG5cdH0pKVxuXHRjb25zdCBbc2hvdywgc2V0U2hvd10gPSB1c2VTdGF0ZSghIXZhbHVlKVxuXHRjb25zdCBbb3B0cywgc2V0T3B0c10gPSB1c2VTdGF0ZTxSUnVsZU9wdGlvbnMgfCBudWxsPigoKSA9PiB2YWx1ZSB8fCBudWxsKVxuXG5cdGNvbnN0IFdFRUtEQVlfT1BUSU9OUyA9IFdFRUtEQVlTLm1hcCgodmFsdWUsIGluZGV4KSA9PiAoe1xuXHRcdHZhbHVlLFxuXHRcdGxhYmVsOiBkYXlqcygpLmRheShpbmRleCkuZm9ybWF0KCdkZGQnKSxcblx0fSkpXG5cdGNvbnN0IHdlZWtEYXlzID0gV0VFS0RBWVMubWFwKFxuXHRcdChkLCBpKSA9PiBXRUVLREFZX09QVElPTlNbKGkgKyBmaXJzdERheU9mV2VlaykgJSA3XVxuXHQpXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRzZXRTaG93KCEhdmFsdWUpXG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRzZXRPcHRzKHZhbHVlKVxuXHRcdH1cblx0fSwgW3ZhbHVlXSlcblxuXHRjb25zdCB1cGRhdGUgPSAodTogUGFydGlhbDxSUnVsZU9wdGlvbnM+KSA9PiB7XG5cdFx0aWYgKCFvcHRzKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0Y29uc3QgbmV4dCA9IHsgLi4ub3B0cywgLi4udSB9XG5cdFx0c2V0T3B0cyhuZXh0KVxuXHRcdG9uQ2hhbmdlKHNob3cgPyBuZXh0IDogbnVsbClcblx0fVxuXG5cdGNvbnN0IHRvZ2dsZSA9IChjaGVja2VkOiBib29sZWFuKSA9PiB7XG5cdFx0c2V0U2hvdyhjaGVja2VkKVxuXHRcdGlmICghY2hlY2tlZCkge1xuXHRcdFx0b25DaGFuZ2UobnVsbClcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRpZiAob3B0cykge1xuXHRcdFx0b25DaGFuZ2Uob3B0cylcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRjb25zdCBkZWYgPSB7IGZyZXE6IFJSdWxlLkRBSUxZLCBpbnRlcnZhbDogMSB9IGFzIFJSdWxlT3B0aW9uc1xuXHRcdHNldE9wdHMoZGVmKVxuXHRcdG9uQ2hhbmdlKGRlZilcblx0fVxuXG5cdGNvbnN0IHRvZ2dsZURheSA9IChpOiBudW1iZXIpID0+IHtcblx0XHRjb25zdCBjdXJyID0gKG9wdHM/LmJ5d2Vla2RheSBhcyBXZWVrZGF5W10pIHx8IFtdXG5cdFx0Y29uc3QgZGF5ID0gV0VFS0RBWVNbaV1cblx0XHRjb25zdCBuZXh0ID0gY3Vyci5pbmNsdWRlcyhkYXkpXG5cdFx0XHQ/IGN1cnIuZmlsdGVyKChkKSA9PiBkICE9PSBkYXkpXG5cdFx0XHQ6IFsuLi5jdXJyLCBkYXldXG5cdFx0dXBkYXRlKHsgYnl3ZWVrZGF5OiBuZXh0Lmxlbmd0aCA/IG5leHQgOiB1bmRlZmluZWQgfSlcblx0fVxuXG5cdGNvbnN0IHNldEVuZFR5cGUgPSAodHlwZTogJ25ldmVyJyB8ICdjb3VudCcgfCAndW50aWwnKSA9PiB7XG5cdFx0Y29uc3QgdTogUGFydGlhbDxSUnVsZU9wdGlvbnM+ID0geyBjb3VudDogdW5kZWZpbmVkLCB1bnRpbDogdW5kZWZpbmVkIH1cblx0XHRpZiAodHlwZSA9PT0gJ2NvdW50Jykge1xuXHRcdFx0dS5jb3VudCA9IG9wdHM/LmNvdW50IHx8IDFcblx0XHR9XG5cdFx0aWYgKHR5cGUgPT09ICd1bnRpbCcpIHtcblx0XHRcdHUudW50aWwgPSBvcHRzPy51bnRpbCB8fCBkYXlqcygpLmFkZCgxLCAnbW9udGgnKS5lbmRPZignZGF5JykudG9EYXRlKClcblx0XHR9XG5cdFx0dXBkYXRlKHUpXG5cdH1cblxuXHRjb25zdCBlbmRUeXBlID0gb3B0cz8udW50aWwgPyAndW50aWwnIDogb3B0cz8uY291bnQgPyAnY291bnQnIDogJ25ldmVyJ1xuXHRjb25zdCBmcmVxID0gRlJFUV9UT19TVFJbb3B0cz8uZnJlcSA/PyBSUnVsZS5EQUlMWV0gfHwgJ0RBSUxZJ1xuXHRjb25zdCBieXdlZWtkYXkgPSBBcnJheS5pc0FycmF5KG9wdHM/LmJ5d2Vla2RheSlcblx0XHQ/IG9wdHMuYnl3ZWVrZGF5XG5cdFx0OiBvcHRzPy5ieXdlZWtkYXlcblx0XHRcdD8gW29wdHMuYnl3ZWVrZGF5XVxuXHRcdFx0OiBbXVxuXG5cdHJldHVybiAoXG5cdFx0PENhcmQgZGF0YS10ZXN0aWQ9XCJyZWN1cnJlbmNlLWVkaXRvclwiPlxuXHRcdFx0PENhcmRIZWFkZXIgY2xhc3NOYW1lPVwicGItM1wiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0Y2hlY2tlZD17c2hvd31cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwidG9nZ2xlLXJlY3VycmVuY2VcIlxuXHRcdFx0XHRcdFx0aWQ9XCJyZWN1cnJpbmdcIlxuXHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXt0b2dnbGV9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8Q2FyZFRpdGxlIGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVwZWF0Jyl9PC9DYXJkVGl0bGU+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHR7c2hvdyAmJiB2YWx1ZSAmJiAoXG5cdFx0XHRcdFx0PHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdHtnZXREZXNjcmlwdGlvbih2YWx1ZSwgdCl9XG5cdFx0XHRcdFx0PC9wPlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9DYXJkSGVhZGVyPlxuXG5cdFx0XHR7c2hvdyAmJiAoXG5cdFx0XHRcdDxDYXJkQ29udGVudCBjbGFzc05hbWU9XCJwdC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTRcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCIgaHRtbEZvcj1cImZyZXF1ZW5jeVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e3QoJ3JlcGVhdHMnKX1cblx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxTZWxlY3Rcblx0XHRcdFx0XHRcdFx0XHRcdG9uVmFsdWVDaGFuZ2U9eyhmKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGUoeyBmcmVxOiBGUkVRX01BUFtmIGFzIGtleW9mIHR5cGVvZiBGUkVRX01BUF0gfSlcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtmcmVxfVxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RUcmlnZ2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiZnJlcXVlbmN5LXNlbGVjdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiZnJlcXVlbmN5XCJcblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PFNlbGVjdFZhbHVlIC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdFRyaWdnZXI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0Q29udGVudD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e09iamVjdC5rZXlzKEZSRVFfTUFQKS5tYXAoKGYpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0SXRlbSBrZXk9e2Z9IHZhbHVlPXtmfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt0KGYudG9Mb3dlckNhc2UoKSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9TZWxlY3RJdGVtPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0Q29udGVudD5cblx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdD5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwiaW50ZXJ2YWxcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHt0KCdldmVyeScpfVxuXHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLThcIlxuXHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnRlcnZhbFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRtaW49XCIxXCJcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZSkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlKHsgaW50ZXJ2YWw6IHBhcnNlTnVtKGUudGFyZ2V0LnZhbHVlKSB9KVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cIm51bWJlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17b3B0cz8uaW50ZXJ2YWwgfHwgMX1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHR7b3B0cz8uZnJlcSA9PT0gUlJ1bGUuV0VFS0xZICYmIChcblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdyZXBlYXRPbicpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMSBtdC0xXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7d2Vla0RheXMubWFwKChkLCBpKSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KCd3ZWVrZGF5JywgaSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2J5d2Vla2RheS5pbmNsdWRlcyhkLnZhbHVlKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPXtrZXlzLmxpc3RLZXkoJ2RheScsIGkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoKSA9PiB0b2dnbGVEYXkoaSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInRleHQteHMgY3Vyc29yLXBvaW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aHRtbEZvcj17a2V5cy5saXN0S2V5KCdkYXknLCBpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ZC5sYWJlbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdCl9XG5cblx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ2VuZHMnKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMiBtdC0xXCI+XG5cdFx0XHRcdFx0XHRcdFx0e0VORF9UWVBFUy5tYXAoKHsgdHlwZSwgaWQsIGxhYmVsS2V5IH0pID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCIga2V5PXt0eXBlfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17ZW5kVHlwZSA9PT0gdHlwZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17aWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoKSA9PiBzZXRFbmRUeXBlKHR5cGUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9e2lkfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7dChsYWJlbEtleSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0eXBlID09PSAnY291bnQnICYmIGVuZFR5cGUgPT09ICdjb3VudCcgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC02IHctMTYgdGV4dC14c1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiY291bnQtaW5wdXRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaW49XCIxXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhlKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7IGNvdW50OiBwYXJzZU51bShlLnRhcmdldC52YWx1ZSkgfSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwibnVtYmVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e29wdHM/LmNvdW50IHx8IDF9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdvY2N1cnJlbmNlcycpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3R5cGUgPT09ICd1bnRpbCcgJiYgZW5kVHlwZSA9PT0gJ3VudGlsJyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PERhdGVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtNlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRlPXtvcHRzPy51bnRpbCA/PyB1bmRlZmluZWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17KGQpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW50aWw6IGRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gZGF5anMoZCkuZW5kT2YoJ2RheScpLnRvRGF0ZSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvQ2FyZENvbnRlbnQ+XG5cdFx0XHQpfVxuXHRcdDwvQ2FyZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDYXJkKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQndGV4dC1jYXJkLWZvcmVncm91bmQgZmxleCBmbGV4LWNvbCBnYXAtNiByb3VuZGVkLXhsIGJvcmRlciBzaGFkb3ctc20nLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRIZWFkZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdAY29udGFpbmVyL2NhcmQtaGVhZGVyIGdyaWQgYXV0by1yb3dzLW1pbiBncmlkLXJvd3MtW2F1dG9fYXV0b10gaXRlbXMtc3RhcnQgZ2FwLTEuNSBwLTQgcGItMCBoYXMtZGF0YS1bc2xvdD1jYXJkLWFjdGlvbl06Z3JpZC1jb2xzLVsxZnJfYXV0b10nLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWhlYWRlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkVGl0bGUoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2xlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtdGl0bGVcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZERlc2NyaXB0aW9uKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1zbScsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWRlc2NyaXB0aW9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRBY3Rpb24oeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdjb2wtc3RhcnQtMiByb3ctc3Bhbi0yIHJvdy1zdGFydC0xIHNlbGYtc3RhcnQganVzdGlmeS1zZWxmLWVuZCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtYWN0aW9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRDb250ZW50KHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdwLTQgcHQtMCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWNvbnRlbnRcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZEZvb3Rlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBpdGVtcy1jZW50ZXIgcHgtNiBbLmJvcmRlci10XTpwdC02JywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtZm9vdGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7XG5cdENhcmQsXG5cdENhcmRBY3Rpb24sXG5cdENhcmRDb250ZW50LFxuXHRDYXJkRGVzY3JpcHRpb24sXG5cdENhcmRGb290ZXIsXG5cdENhcmRIZWFkZXIsXG5cdENhcmRUaXRsZSxcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgU2VsZWN0UHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zZWxlY3QnXG5pbXBvcnQgeyBDaGVja0ljb24sIENoZXZyb25Eb3duSWNvbiwgQ2hldnJvblVwSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFNlbGVjdCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlJvb3Q+KSB7XG5cdHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwic2VsZWN0XCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RHcm91cCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkdyb3VwPikge1xuXHRyZXR1cm4gPFNlbGVjdFByaW1pdGl2ZS5Hcm91cCBkYXRhLXNsb3Q9XCJzZWxlY3QtZ3JvdXBcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdFZhbHVlKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuVmFsdWU+KSB7XG5cdHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLlZhbHVlIGRhdGEtc2xvdD1cInNlbGVjdC12YWx1ZVwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0VHJpZ2dlcih7XG5cdGNsYXNzTmFtZSxcblx0c2l6ZSA9ICdkZWZhdWx0Jyxcblx0Y2hpbGRyZW4sXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlRyaWdnZXI+ICYge1xuXHRzaXplPzogJ3NtJyB8ICdkZWZhdWx0J1xufSkge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuVHJpZ2dlclxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XCJib3JkZXItaW5wdXQgZGF0YS1wbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQgWyZfc3ZnOm5vdChbY2xhc3MqPSd0ZXh0LSddKV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlIGRhcms6YmctaW5wdXQvMzAgZGFyazpob3ZlcjpiZy1pbnB1dC81MCBmbGV4IHctZml0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcm91bmRlZC1tZCBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHgtMyBweS0yIHRleHQtc20gd2hpdGVzcGFjZS1ub3dyYXAgc2hhZG93LXhzIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAgZGF0YS1bc2l6ZT1kZWZhdWx0XTpoLTkgZGF0YS1bc2l6ZT1zbV06aC04ICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmxpbmUtY2xhbXAtMSAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpmbGV4ICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOml0ZW1zLWNlbnRlciAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpnYXAtMiBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTRcIixcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zaXplPXtzaXplfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXRyaWdnZXJcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDxTZWxlY3RQcmltaXRpdmUuSWNvbiBhc0NoaWxkPlxuXHRcdFx0XHQ8Q2hldnJvbkRvd25JY29uIGNsYXNzTmFtZT1cInNpemUtNCBvcGFjaXR5LTUwXCIgLz5cblx0XHRcdDwvU2VsZWN0UHJpbWl0aXZlLkljb24+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuVHJpZ2dlcj5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RDb250ZW50KHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0cG9zaXRpb24gPSAncG9wcGVyJyxcblx0YWxpZ24gPSAnY2VudGVyJyxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuQ29udGVudD4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlBvcnRhbD5cblx0XHRcdDxTZWxlY3RQcmltaXRpdmUuQ29udGVudFxuXHRcdFx0XHRhbGlnbj17YWxpZ259XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2JnLXBvcG92ZXIgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGRhdGEtW3NpZGU9Ym90dG9tXTpzbGlkZS1pbi1mcm9tLXRvcC0yIGRhdGEtW3NpZGU9bGVmdF06c2xpZGUtaW4tZnJvbS1yaWdodC0yIGRhdGEtW3NpZGU9cmlnaHRdOnNsaWRlLWluLWZyb20tbGVmdC0yIGRhdGEtW3NpZGU9dG9wXTpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yIHJlbGF0aXZlIHotNTAgbWF4LWgtKC0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtYXZhaWxhYmxlLWhlaWdodCkgbWluLXctMzIgb3JpZ2luLSgtLXJhZGl4LXNlbGVjdC1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pIG92ZXJmbG93LXgtaGlkZGVuIG92ZXJmbG93LXktYXV0byByb3VuZGVkLW1kIGJvcmRlciBzaGFkb3ctbWQnLFxuXHRcdFx0XHRcdHBvc2l0aW9uID09PSAncG9wcGVyJyAmJlxuXHRcdFx0XHRcdFx0J2RhdGEtW3NpZGU9Ym90dG9tXTp0cmFuc2xhdGUteS0xIGRhdGEtW3NpZGU9bGVmdF06LXRyYW5zbGF0ZS14LTEgZGF0YS1bc2lkZT1yaWdodF06dHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXRvcF06LXRyYW5zbGF0ZS15LTEnLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3QtY29udGVudFwiXG5cdFx0XHRcdHBvc2l0aW9uPXtwb3NpdGlvbn1cblx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0PlxuXHRcdFx0XHQ8U2VsZWN0U2Nyb2xsVXBCdXR0b24gLz5cblx0XHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5WaWV3cG9ydFxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQncC0xJyxcblx0XHRcdFx0XHRcdHBvc2l0aW9uID09PSAncG9wcGVyJyAmJlxuXHRcdFx0XHRcdFx0XHQnaC0oLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci1oZWlnaHQpIHctZnVsbCBtaW4tdy0oLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci13aWR0aCkgc2Nyb2xsLW15LTEnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PC9TZWxlY3RQcmltaXRpdmUuVmlld3BvcnQ+XG5cdFx0XHRcdDxTZWxlY3RTY3JvbGxEb3duQnV0dG9uIC8+XG5cdFx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5Db250ZW50PlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLlBvcnRhbD5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RMYWJlbCh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuTGFiZWw+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5MYWJlbFxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHB4LTIgcHktMS41IHRleHQteHMnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LWxhYmVsXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdEl0ZW0oe1xuXHRjbGFzc05hbWUsXG5cdGNoaWxkcmVuLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5JdGVtPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuSXRlbVxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XCJmb2N1czpiZy1hY2NlbnQgZm9jdXM6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBbJl9zdmc6bm90KFtjbGFzcyo9J3RleHQtJ10pXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgcmVsYXRpdmUgZmxleCB3LWZ1bGwgY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtc20gcHktMS41IHByLTggcGwtMiB0ZXh0LXNtIG91dGxpbmUtaGlkZGVuIHNlbGVjdC1ub25lIGRhdGEtZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkYXRhLWRpc2FibGVkOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00ICo6W3NwYW5dOmxhc3Q6ZmxleCAqOltzcGFuXTpsYXN0Oml0ZW1zLWNlbnRlciAqOltzcGFuXTpsYXN0OmdhcC0yXCIsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1pdGVtXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0yIGZsZXggc2l6ZS0zLjUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG5cdFx0XHRcdDxTZWxlY3RQcmltaXRpdmUuSXRlbUluZGljYXRvcj5cblx0XHRcdFx0XHQ8Q2hlY2tJY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG5cdFx0XHRcdDwvU2VsZWN0UHJpbWl0aXZlLkl0ZW1JbmRpY2F0b3I+XG5cdFx0XHQ8L3NwYW4+XG5cdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLkl0ZW1UZXh0PntjaGlsZHJlbn08L1NlbGVjdFByaW1pdGl2ZS5JdGVtVGV4dD5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5JdGVtPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNlcGFyYXRvcih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2VwYXJhdG9yPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuU2VwYXJhdG9yXG5cdFx0XHRjbGFzc05hbWU9e2NuKCdiZy1ib3JkZXIgcG9pbnRlci1ldmVudHMtbm9uZSAtbXgtMSBteS0xIGgtcHgnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXNlcGFyYXRvclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTY3JvbGxVcEJ1dHRvbih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2Nyb2xsVXBCdXR0b24+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTEnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLXVwLWJ1dHRvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENoZXZyb25VcEljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvbj5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTY3JvbGxEb3duQnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTEnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLWRvd24tYnV0dG9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8Q2hldnJvbkRvd25JY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvbj5cblx0KVxufVxuXG5leHBvcnQge1xuXHRTZWxlY3QsXG5cdFNlbGVjdENvbnRlbnQsXG5cdFNlbGVjdEdyb3VwLFxuXHRTZWxlY3RJdGVtLFxuXHRTZWxlY3RMYWJlbCxcblx0U2VsZWN0U2Nyb2xsRG93bkJ1dHRvbixcblx0U2VsZWN0U2Nyb2xsVXBCdXR0b24sXG5cdFNlbGVjdFNlcGFyYXRvcixcblx0U2VsZWN0VHJpZ2dlcixcblx0U2VsZWN0VmFsdWUsXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5pbnRlcmZhY2UgRGlhbG9nU3RhdGUge1xuXHRpc09wZW46IGJvb2xlYW5cblx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnIHwgJ2RlbGV0ZSdcblx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHVwZGF0ZXM/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdG9uQ29uZmlybT86IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4gdm9pZFxufVxuXG5jb25zdCBDTE9TRURfU1RBVEU6IERpYWxvZ1N0YXRlID0ge1xuXHRpc09wZW46IGZhbHNlLFxuXHRvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG5cdGV2ZW50OiBudWxsLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zKG9uQ29tcGxldGU/OiAoKSA9PiB2b2lkKSB7XG5cdGNvbnN0IHsgdXBkYXRlUmVjdXJyaW5nRXZlbnQsIGRlbGV0ZVJlY3VycmluZ0V2ZW50IH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoe1xuXHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQudXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0XHRkZWxldGVSZWN1cnJpbmdFdmVudDogY29udGV4dC5kZWxldGVSZWN1cnJpbmdFdmVudCxcblx0XHR9KSlcblxuXHRjb25zdCBbZGlhbG9nU3RhdGUsIHNldERpYWxvZ1N0YXRlXSA9IHVzZVN0YXRlPERpYWxvZ1N0YXRlPihDTE9TRURfU1RBVEUpXG5cblx0Y29uc3Qgb3BlbkVkaXREaWFsb2cgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQsIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdHNldERpYWxvZ1N0YXRlKHtcblx0XHRcdFx0aXNPcGVuOiB0cnVlLFxuXHRcdFx0XHRvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHR1cGRhdGVzLFxuXHRcdFx0XHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdFx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB1cGRhdGVzLCB7XG5cdFx0XHRcdFx0XHRzY29wZSxcblx0XHRcdFx0XHRcdGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSxcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbdXBkYXRlUmVjdXJyaW5nRXZlbnRdXG5cdClcblxuXHRjb25zdCBvcGVuRGVsZXRlRGlhbG9nID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRzZXREaWFsb2dTdGF0ZSh7XG5cdFx0XHRcdGlzT3BlbjogdHJ1ZSxcblx0XHRcdFx0b3BlcmF0aW9uVHlwZTogJ2RlbGV0ZScsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdFx0XHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB7XG5cdFx0XHRcdFx0XHRzY29wZSxcblx0XHRcdFx0XHRcdGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSxcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbZGVsZXRlUmVjdXJyaW5nRXZlbnRdXG5cdClcblxuXHRjb25zdCBjbG9zZURpYWxvZyA9IHVzZUNhbGxiYWNrKCgpID0+IHNldERpYWxvZ1N0YXRlKENMT1NFRF9TVEFURSksIFtdKVxuXG5cdGNvbnN0IGhhbmRsZUNvbmZpcm0gPSB1c2VDYWxsYmFjayhcblx0XHQoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcblx0XHRcdGlmIChkaWFsb2dTdGF0ZS5vbkNvbmZpcm0pIHtcblx0XHRcdFx0ZGlhbG9nU3RhdGUub25Db25maXJtKHNjb3BlKVxuXHRcdFx0fVxuXHRcdFx0Y2xvc2VEaWFsb2coKVxuXHRcdFx0Ly8gQ2FsbCBvbkNvbXBsZXRlIHRvIGNsb3NlIHRoZSBwYXJlbnQgZm9ybVxuXHRcdFx0b25Db21wbGV0ZT8uKClcblx0XHR9LFxuXHRcdFtkaWFsb2dTdGF0ZSwgY2xvc2VEaWFsb2csIG9uQ29tcGxldGVdXG5cdClcblxuXHRyZXR1cm4ge1xuXHRcdGRpYWxvZ1N0YXRlLFxuXHRcdG9wZW5FZGl0RGlhbG9nLFxuXHRcdG9wZW5EZWxldGVEaWFsb2csXG5cdFx0Y2xvc2VEaWFsb2csXG5cdFx0aGFuZGxlQ29uZmlybSxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbi8qKlxuICogUmV0dXJucyB0aGUgcmVzb3VyY2Utc3BlY2lmaWMgYnVzaW5lc3MgaG91cnMgd2hlbiBhdmFpbGFibGUsIG90aGVyd2lzZVxuICogZmFsbHMgYmFjayB0byB0aGUgY2FsZW5kYXItd2lkZSBgYnVzaW5lc3NIb3Vyc2AuIFNoYXJlZCBieSBjb21wb25lbnRzXG4gKiB0aGF0IG5lZWQgcGVyLXJlc291cmNlIHdvcmtpbmctaG91cnMgc2VtYW50aWNzIChncmlkIGNlbGxzLCBldmVudCBmb3JtKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZUVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgPSAoXG5cdHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZFxuKTogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSB8IHVuZGVmaW5lZCA9PiB7XG5cdGNvbnN0IHsgYnVzaW5lc3NIb3VycywgZ2V0UmVzb3VyY2VCeUlkIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdGJ1c2luZXNzSG91cnM6IGN0eC5idXNpbmVzc0hvdXJzLFxuXHRcdGdldFJlc291cmNlQnlJZDogY3R4LmdldFJlc291cmNlQnlJZCxcblx0fSkpXG5cblx0cmV0dXJuIHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmIChyZXNvdXJjZUlkICE9IG51bGwgJiYgZ2V0UmVzb3VyY2VCeUlkKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlQnlJZChyZXNvdXJjZUlkKVxuXHRcdFx0aWYgKHJlc291cmNlPy5idXNpbmVzc0hvdXJzKSB7XG5cdFx0XHRcdHJldHVybiByZXNvdXJjZS5idXNpbmVzc0hvdXJzXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBidXNpbmVzc0hvdXJzXG5cdH0sIFtyZXNvdXJjZUlkLCBnZXRSZXNvdXJjZUJ5SWQsIGJ1c2luZXNzSG91cnNdKVxufVxuIiwKICAgICJpbXBvcnQge1xuXHREaWFsb2csXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0Rlc2NyaXB0aW9uLFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBFdmVudEZvcm0gfSBmcm9tICcuL2V2ZW50LWZvcm0nXG5cbmV4cG9ydCBjb25zdCBFdmVudEZvcm1EaWFsb2cgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHR0LFxuXHRcdHNlbGVjdGVkRXZlbnQsXG5cdFx0aXNFdmVudEZvcm1PcGVuLFxuXHRcdGNsb3NlRXZlbnRGb3JtLFxuXHRcdGFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50LFxuXHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoe1xuXHRcdHQ6IGNvbnRleHQudCxcblx0XHRzZWxlY3RlZEV2ZW50OiBjb250ZXh0LnNlbGVjdGVkRXZlbnQsXG5cdFx0aXNFdmVudEZvcm1PcGVuOiBjb250ZXh0LmlzRXZlbnRGb3JtT3Blbixcblx0XHRjbG9zZUV2ZW50Rm9ybTogY29udGV4dC5jbG9zZUV2ZW50Rm9ybSxcblx0XHRhZGRFdmVudDogY29udGV4dC5hZGRFdmVudCxcblx0XHR1cGRhdGVFdmVudDogY29udGV4dC51cGRhdGVFdmVudCxcblx0XHRkZWxldGVFdmVudDogY29udGV4dC5kZWxldGVFdmVudCxcblx0XHRyZW5kZXJFdmVudEZvcm06IGNvbnRleHQucmVuZGVyRXZlbnRGb3JtLFxuXHR9KSlcblxuXHRjb25zdCBoYW5kbGVPblVwZGF0ZSA9IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdHVwZGF0ZUV2ZW50KGV2ZW50LmlkLCBldmVudClcblx0fVxuXG5cdGNvbnN0IGhhbmRsZU9uRGVsZXRlID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0ZGVsZXRlRXZlbnQoZXZlbnQuaWQpXG5cdH1cblxuXHRjb25zdCBldmVudEZvcm1Qcm9wcyA9IHtcblx0XHRvcGVuOiBpc0V2ZW50Rm9ybU9wZW4sXG5cdFx0b25DbG9zZTogY2xvc2VFdmVudEZvcm0sXG5cdFx0c2VsZWN0ZWRFdmVudCxcblx0XHRvbkFkZDogYWRkRXZlbnQsXG5cdFx0b25VcGRhdGU6IGhhbmRsZU9uVXBkYXRlLFxuXHRcdG9uRGVsZXRlOiBoYW5kbGVPbkRlbGV0ZSxcblx0fVxuXG5cdGlmIChyZW5kZXJFdmVudEZvcm0pIHtcblx0XHRyZXR1cm4gcmVuZGVyRXZlbnRGb3JtKGV2ZW50Rm9ybVByb3BzKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17Y2xvc2VFdmVudEZvcm19IG9wZW49e2lzRXZlbnRGb3JtT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGgtWzkwdmhdIHctWzkwdnddIG1heC13LVs1MDBweF0gcC00IHNtOnAtNiBvdmVyZmxvdy1oaWRkZW4gZ2FwLTBcIj5cblx0XHRcdFx0PERpYWxvZ0hlYWRlciBjbGFzc05hbWU9XCJtYi0yIHNtOm1iLTQgc2hyaW5rLTBcIj5cblx0XHRcdFx0XHQ8RGlhbG9nVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1iYXNlIHNtOnRleHQtbGdcIj5cblx0XHRcdFx0XHRcdHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ2VkaXRFdmVudCcpIDogdCgnY3JlYXRlRXZlbnQnKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdDxEaWFsb2dEZXNjcmlwdGlvbiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cblx0XHRcdFx0XHRcdHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ2VkaXRFdmVudERldGFpbHMnKSA6IHQoJ2FkZE5ld0V2ZW50Jyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dEZXNjcmlwdGlvbj5cblx0XHRcdFx0PC9EaWFsb2dIZWFkZXI+XG5cblx0XHRcdFx0PEV2ZW50Rm9ybSB7Li4uZXZlbnRGb3JtUHJvcHN9IC8+XG5cdFx0XHQ8L0RpYWxvZ0NvbnRlbnQ+XG5cdFx0PC9EaWFsb2c+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ2FsZW5kYXIgYXMgQ2FsZW5kYXJJY29uLCBEb3dubG9hZCwgTWVudSwgUGx1cyB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGRvd25sb2FkSUNhbGVuZGFyIH0gZnJvbSAnQC9saWIvdXRpbHMvZXhwb3J0LWljYWwnXG5pbXBvcnQgVGl0bGVDb250ZW50IGZyb20gJy4vdGl0bGUtY29udGVudCdcbmltcG9ydCBWaWV3Q29udHJvbHMgZnJvbSAnLi92aWV3LWNvbnRyb2xzJ1xuXG5pbnRlcmZhY2UgSGVhZGVyUHJvcHMge1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgSGVhZGVyOiBSZWFjdC5GQzxIZWFkZXJQcm9wcz4gPSAoeyBjbGFzc05hbWUgPSAnJyB9KSA9PiB7XG5cdGNvbnN0IHtcblx0XHR2aWV3LFxuXHRcdHNldFZpZXcsXG5cdFx0bmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kLFxuXHRcdHRvZGF5LFxuXHRcdG9wZW5FdmVudEZvcm0sXG5cdFx0aGVhZGVyQ29tcG9uZW50LFxuXHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRyYXdFdmVudHMsXG5cdFx0dCxcblx0XHRoaWRlRXhwb3J0QnV0dG9uLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGN0eCkgPT4gKHtcblx0XHR2aWV3OiBjdHgudmlldyxcblx0XHRzZXRWaWV3OiBjdHguc2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kOiBjdHgubmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kOiBjdHgucHJldlBlcmlvZCxcblx0XHR0b2RheTogY3R4LnRvZGF5LFxuXHRcdG9wZW5FdmVudEZvcm06IGN0eC5vcGVuRXZlbnRGb3JtLFxuXHRcdGhlYWRlckNvbXBvbmVudDogY3R4LmhlYWRlckNvbXBvbmVudCxcblx0XHRoZWFkZXJDbGFzc05hbWU6IGN0eC5oZWFkZXJDbGFzc05hbWUsXG5cdFx0cmF3RXZlbnRzOiBjdHgucmF3RXZlbnRzLFxuXHRcdHQ6IGN0eC50LFxuXHRcdGhpZGVFeHBvcnRCdXR0b246IGN0eC5oaWRlRXhwb3J0QnV0dG9uLFxuXHR9KSlcblxuXHRjb25zdCBbbW9iaWxlTWVudU9wZW4sIHNldE1vYmlsZU1lbnVPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG5cdGNvbnN0IGNsb3NlTW9iaWxlTWVudSA9ICgpID0+IHNldE1vYmlsZU1lbnVPcGVuKGZhbHNlKVxuXG5cdC8vIFdyYXAgYW55IGhhbmRsZXIgc28gaXQgYWxzbyBjbG9zZXMgdGhlIG1vYmlsZSBtZW51IGFmdGVyIGZpcmluZy5cblx0Y29uc3Qgd2l0aENsb3NlID1cblx0XHQ8QXJncyBleHRlbmRzIHVua25vd25bXT4oZm46ICguLi5hcmdzOiBBcmdzKSA9PiB2b2lkKSA9PlxuXHRcdCguLi5hcmdzOiBBcmdzKSA9PiB7XG5cdFx0XHRmbiguLi5hcmdzKVxuXHRcdFx0Y2xvc2VNb2JpbGVNZW51KClcblx0XHR9XG5cblx0Y29uc3QgaGFuZGxlRXhwb3J0ID0gKCkgPT4ge1xuXHRcdGNvbnN0IGZpbGVuYW1lID0gYGlsYW15LWNhbGVuZGFyLSR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF19Lmljc2Bcblx0XHRkb3dubG9hZElDYWxlbmRhcihyYXdFdmVudHMsIGZpbGVuYW1lLCAnaWxhbXkgQ2FsZW5kYXInKVxuXHRcdGNsb3NlTW9iaWxlTWVudSgpXG5cdH1cblxuXHRjb25zdCBOZXdFdmVudEJ1dHRvbiA9ICgpID0+IChcblx0XHQ8QnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG5cdFx0XHRvbkNsaWNrPXsoKSA9PiBvcGVuRXZlbnRGb3JtKCl9XG5cdFx0XHRzaXplPVwic21cIlxuXHRcdFx0dmFyaWFudD1cImRlZmF1bHRcIlxuXHRcdD5cblx0XHRcdDxQbHVzIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIEA0eGw6aW5saW5lXCI+e3QoJ25ldycpfTwvc3Bhbj5cblx0XHQ8L0J1dHRvbj5cblx0KVxuXG5cdGNvbnN0IEV4cG9ydEJ1dHRvbiA9ICh7IGZ1bGxXaWR0aCA9IGZhbHNlIH06IHsgZnVsbFdpZHRoPzogYm9vbGVhbiB9KSA9PiAoXG5cdFx0PEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEnLCBmdWxsV2lkdGggJiYgJ3ctZnVsbCBnYXAtMicpfVxuXHRcdFx0b25DbGljaz17aGFuZGxlRXhwb3J0fVxuXHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHQ+XG5cdFx0XHQ8RG93bmxvYWQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHR7ZnVsbFdpZHRoID8gKFxuXHRcdFx0XHRgJHt0KCdleHBvcnQnKX0gQ2FsZW5kYXIgKC5pY3MpYFxuXHRcdFx0KSA6IChcblx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIEA0eGwvYmFzZS1oZWFkZXI6aW5saW5lXCI+e3QoJ2V4cG9ydCcpfTwvc3Bhbj5cblx0XHRcdCl9XG5cdFx0PC9CdXR0b24+XG5cdClcblxuXHRpZiAoaGVhZGVyQ29tcG9uZW50KSB7XG5cdFx0cmV0dXJuIGhlYWRlckNvbXBvbmVudFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJAY29udGFpbmVyL2Jhc2UtaGVhZGVyIHctZnVsbFwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImNhbGVuZGFyLWhlYWRlclwiXG5cdFx0PlxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdmbGV4IGp1c3RpZnktY2VudGVyIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1iZXR3ZWVuIGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTInLFxuXHRcdFx0XHRcdGNsYXNzTmFtZSxcblx0XHRcdFx0XHRoZWFkZXJDbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgQDJ4bC9iYXNlLWhlYWRlcjpqdXN0aWZ5LXN0YXJ0XCI+XG5cdFx0XHRcdFx0PENhbGVuZGFySWNvbiBjbGFzc05hbWU9XCJoLTUgdy01XCIgLz5cblx0XHRcdFx0XHQ8VGl0bGVDb250ZW50IC8+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAganVzdGlmeS1zdGFydCBAeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1jZW50ZXIgZ2FwLTEgQDR4bC9iYXNlLWhlYWRlcjpqdXN0aWZ5LWVuZCBvdmVyZmxvdy14LWF1dG9cIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBAbWQvYmFzZS1oZWFkZXI6ZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBnYXAtMVwiPlxuXHRcdFx0XHRcdFx0PFZpZXdDb250cm9sc1xuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJqdXN0aWZ5LWVuZFwiXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRWaWV3PXt2aWV3fVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17c2V0Vmlld31cblx0XHRcdFx0XHRcdFx0b25OZXh0PXtuZXh0UGVyaW9kfVxuXHRcdFx0XHRcdFx0XHRvblByZXZpb3VzPXtwcmV2UGVyaW9kfVxuXHRcdFx0XHRcdFx0XHRvblRvZGF5PXt0b2RheX1cblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImRlZmF1bHRcIlxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDxOZXdFdmVudEJ1dHRvbiAvPlxuXHRcdFx0XHRcdFx0eyFoaWRlRXhwb3J0QnV0dG9uICYmIDxFeHBvcnRCdXR0b24gLz59XG5cdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGdhcC0xIEBtZC9iYXNlLWhlYWRlcjpoaWRkZW5cIj5cblx0XHRcdFx0XHRcdDxOZXdFdmVudEJ1dHRvbiAvPlxuXHRcdFx0XHRcdFx0PFBvcG92ZXIgb25PcGVuQ2hhbmdlPXtzZXRNb2JpbGVNZW51T3Blbn0gb3Blbj17bW9iaWxlTWVudU9wZW59PlxuXHRcdFx0XHRcdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uIHNpemU9XCJzbVwiIHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TWVudSBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdFx0PC9Qb3BvdmVyVHJpZ2dlcj5cblx0XHRcdFx0XHRcdFx0PFBvcG92ZXJDb250ZW50IGFsaWduPVwiZW5kXCIgY2xhc3NOYW1lPVwidy1bMjQwcHhdIHAtMlwiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Vmlld0NvbnRyb2xzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRWaWV3PXt2aWV3fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17d2l0aENsb3NlKHNldFZpZXcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbk5leHQ9e3dpdGhDbG9zZShuZXh0UGVyaW9kKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25QcmV2aW91cz17d2l0aENsb3NlKHByZXZQZXJpb2QpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvblRvZGF5PXt3aXRoQ2xvc2UodG9kYXkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZ3JpZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0eyFoaWRlRXhwb3J0QnV0dG9uICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJwdC0yIGJvcmRlci10XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEV4cG9ydEJ1dHRvbiBmdWxsV2lkdGggLz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L1BvcG92ZXJDb250ZW50PlxuXHRcdFx0XHRcdFx0PC9Qb3BvdmVyPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IEhlYWRlclxuIiwKICAgICJpbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuY29uc3QgQ1JMRiA9ICdcXHJcXG4nXG5cbmNvbnN0IFVUQ19WVElNRVpPTkUgPSBbXG5cdCdCRUdJTjpWVElNRVpPTkUnLFxuXHQnVFpJRDpVVEMnLFxuXHQnQkVHSU46U1RBTkRBUkQnLFxuXHQnRFRTVEFSVDoxOTcwMDEwMVQwMDAwMDAnLFxuXHQnVFpOQU1FOlVUQycsXG5cdCdUWk9GRlNFVEZST006KzAwMDAnLFxuXHQnVFpPRkZTRVRUTzorMDAwMCcsXG5cdCdFTkQ6U1RBTkRBUkQnLFxuXHQnRU5EOlZUSU1FWk9ORScsXG5dLmpvaW4oQ1JMRilcblxuY29uc3QgZXNjYXBlVGV4dCA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gdGV4dFxuXHRcdC5yZXBsYWNlQWxsKCdcXFxcJywgJ1xcXFxcXFxcJylcblx0XHQucmVwbGFjZUFsbCgnOycsICdcXFxcOycpXG5cdFx0LnJlcGxhY2VBbGwoJywnLCAnXFxcXCwnKVxuXHRcdC5yZXBsYWNlQWxsKCdcXG4nLCAnXFxcXG4nKVxuXHRcdC5yZXBsYWNlQWxsKCdcXHInLCAnJylcbn1cblxuY29uc3QgZm9ybWF0RGF0ZSA9IChkYXRlOiBEYXlqcywgaXNBbGxEYXkgPSBmYWxzZSk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBpc0FsbERheVxuXHRcdD8gZGF0ZS5mb3JtYXQoJ1lZWVlNTUREJylcblx0XHQ6IGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG59XG5cbmNvbnN0IGdldFVJRCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG5jb25zdCBmb3JtYXRSUnVsZSA9IChycnVsZU9wdGlvbnM6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuXHR0cnkge1xuXHRcdGNvbnN0IHJydWxlU3RyaW5nID0gbmV3IFJSdWxlKFxuXHRcdFx0cnJ1bGVPcHRpb25zIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgUlJ1bGU+WzBdXG5cdFx0KS50b1N0cmluZygpXG5cdFx0cmV0dXJuIChcblx0XHRcdHJydWxlU3RyaW5nLnNwbGl0KCdcXG4nKS5maW5kKChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoJ1JSVUxFOicpKSB8fCAnJ1xuXHRcdClcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuICcnXG5cdH1cbn1cblxuY29uc3QgY29udmVydEV2ZW50VG9WRXZlbnQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuXHRjb25zdCB0aW1lc3RhbXAgPSBkYXlqcygpLnV0YygpLmZvcm1hdCgnWVlZWU1NRERbVF1ISG1tc3NbWl0nKVxuXHRjb25zdCBkYXRlUGFyYW0gPSBldmVudC5hbGxEYXkgPyAnO1ZBTFVFPURBVEUnIDogJydcblx0Y29uc3QgcnJ1bGUgPSBldmVudC5ycnVsZSA/IGZvcm1hdFJSdWxlKGV2ZW50LnJydWxlKSA6ICcnXG5cblx0Y29uc3QgZXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXM/Lmxlbmd0aFxuXHRcdD8gZXZlbnQuZXhkYXRlcy5tYXAoKGQpID0+IGZvcm1hdERhdGUoZGF5anMoZCksIGV2ZW50LmFsbERheSkpLmpvaW4oJywnKVxuXHRcdDogbnVsbFxuXG5cdGNvbnN0IHJlY3VycmVuY2VJZCA9IGV2ZW50LnJlY3VycmVuY2VJZFxuXHRcdD8gZm9ybWF0RGF0ZShkYXlqcyhldmVudC5yZWN1cnJlbmNlSWQpLCBldmVudC5hbGxEYXkpXG5cdFx0OiBudWxsXG5cblx0Y29uc3QgbGluZXMgPSBbXG5cdFx0J0JFR0lOOlZFVkVOVCcsXG5cdFx0YFVJRDoke2dldFVJRChldmVudCl9YCxcblx0XHRgRFRTVEFSVCR7ZGF0ZVBhcmFtfToke2Zvcm1hdERhdGUoZXZlbnQuc3RhcnQsIGV2ZW50LmFsbERheSl9YCxcblx0XHRgRFRFTkQke2RhdGVQYXJhbX06JHtmb3JtYXREYXRlKGV2ZW50LmVuZCwgZXZlbnQuYWxsRGF5KX1gLFxuXHRcdGBTVU1NQVJZOiR7ZXNjYXBlVGV4dChldmVudC50aXRsZSl9YCxcblx0XHRldmVudC5kZXNjcmlwdGlvbiAmJiBgREVTQ1JJUFRJT046JHtlc2NhcGVUZXh0KGV2ZW50LmRlc2NyaXB0aW9uKX1gLFxuXHRcdGV2ZW50LmxvY2F0aW9uICYmIGBMT0NBVElPTjoke2VzY2FwZVRleHQoZXZlbnQubG9jYXRpb24pfWAsXG5cdFx0cnJ1bGUsXG5cdFx0ZXhkYXRlcyAmJiBgRVhEQVRFOiR7ZXhkYXRlc31gLFxuXHRcdHJlY3VycmVuY2VJZCAmJiBgUkVDVVJSRU5DRS1JRDoke3JlY3VycmVuY2VJZH1gLFxuXHRcdGBEVFNUQU1QOiR7dGltZXN0YW1wfWAsXG5cdFx0YENSRUFURUQ6JHt0aW1lc3RhbXB9YCxcblx0XHRgTEFTVC1NT0RJRklFRDoke3RpbWVzdGFtcH1gLFxuXHRcdCdTVEFUVVM6Q09ORklSTUVEJyxcblx0XHQnU0VRVUVOQ0U6MCcsXG5cdFx0J1RSQU5TUDpPUEFRVUUnLFxuXHRcdCdFTkQ6VkVWRU5UJyxcblx0XVxuXG5cdHJldHVybiBsaW5lcy5maWx0ZXIoQm9vbGVhbikuam9pbihDUkxGKVxufVxuXG5jb25zdCBmaWx0ZXJFdmVudHMgPSAoZXZlbnRzOiBDYWxlbmRhckV2ZW50W10pOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRjb25zdCBzZWVuVUlEcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cblx0cmV0dXJuIGV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgdWlkID0gZ2V0VUlEKGV2ZW50KVxuXHRcdGNvbnN0IGlzQmFzZVJlY3VycmluZyA9IGV2ZW50LnJydWxlICYmICFldmVudC5yZWN1cnJlbmNlSWRcblx0XHRjb25zdCBpc01vZGlmaWVkSW5zdGFuY2UgPSBldmVudC5yZWN1cnJlbmNlSWQgJiYgIWV2ZW50LnJydWxlXG5cblx0XHRpZiAoaXNCYXNlUmVjdXJyaW5nKSB7XG5cdFx0XHRzZWVuVUlEcy5hZGQodWlkKVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0aWYgKGlzTW9kaWZpZWRJbnN0YW5jZSkge1xuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0cmV0dXJuICFldmVudC5ycnVsZSAmJiAhZXZlbnQucmVjdXJyZW5jZUlkICYmICFzZWVuVUlEcy5oYXModWlkKVxuXHR9KVxufVxuXG5leHBvcnQgY29uc3QgZXhwb3J0VG9JQ2FsZW5kYXIgPSAoXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdLFxuXHRjYWxlbmRhck5hbWUgPSAnaWxhbXkgQ2FsZW5kYXInXG4pOiBzdHJpbmcgPT4ge1xuXHRjb25zdCBuYW1lID0gZXNjYXBlVGV4dChjYWxlbmRhck5hbWUpXG5cdGNvbnN0IHZldmVudFN0cmluZ3MgPSBmaWx0ZXJFdmVudHMoZXZlbnRzKS5tYXAoY29udmVydEV2ZW50VG9WRXZlbnQpXG5cblx0cmV0dXJuIFtcblx0XHQnQkVHSU46VkNBTEVOREFSJyxcblx0XHQnVkVSU0lPTjoyLjAnLFxuXHRcdCdQUk9ESUQ6LS8vaWxhbXkvL2lsYW15IENhbGVuZGFyLy9FTicsXG5cdFx0J0NBTFNDQUxFOkdSRUdPUklBTicsXG5cdFx0J01FVEhPRDpQVUJMSVNIJyxcblx0XHRgWC1XUi1DQUxOQU1FOiR7bmFtZX1gLFxuXHRcdGBYLVdSLUNBTERFU0M6RXhwb3J0ZWQgZnJvbSAke25hbWV9YCxcblx0XHRVVENfVlRJTUVaT05FLFxuXHRcdC4uLnZldmVudFN0cmluZ3MsXG5cdFx0J0VORDpWQ0FMRU5EQVInLFxuXHRdLmpvaW4oQ1JMRilcbn1cblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkSUNhbGVuZGFyID0gKFxuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcblx0ZmlsZW5hbWUgPSAnY2FsZW5kYXIuaWNzJyxcblx0Y2FsZW5kYXJOYW1lID0gJ2lsYW15IENhbGVuZGFyJ1xuKTogdm9pZCA9PiB7XG5cdGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZXhwb3J0VG9JQ2FsZW5kYXIoZXZlbnRzLCBjYWxlbmRhck5hbWUpXSwge1xuXHRcdHR5cGU6ICd0ZXh0L2NhbGVuZGFyO2NoYXJzZXQ9dXRmLTgnLFxuXHR9KVxuXHRjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpXG5cdGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IGZpbGVuYW1lLmVuZHNXaXRoKCcuaWNzJylcblx0XHQ/IGZpbGVuYW1lXG5cdFx0OiBgJHtmaWxlbmFtZX0uaWNzYFxuXG5cdGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcblx0bGluay5ocmVmID0gdXJsXG5cdGxpbmsuZG93bmxvYWQgPSBub3JtYWxpemVkRmlsZW5hbWVcblxuXHRkb2N1bWVudC5ib2R5LmFwcGVuZChsaW5rKVxuXHRsaW5rLmNsaWNrKClcblx0bGluay5yZW1vdmUoKVxuXHRVUkwucmV2b2tlT2JqZWN0VVJMKHVybClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ2hldnJvbkRvd24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgdXNlRGF0ZVRpbWVGb3JtYXR0ZXJzIH0gZnJvbSAnQC9ob29rcy91c2UtZGF0ZS10aW1lLWZvcm1hdHRlcnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0RGF5S2V5LCBnZXRXZWVrRGF5cywgaXNUb2RheSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuY29uc3QgVGl0bGVDb250ZW50ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB2aWV3LCBzZWxlY3REYXRlLCB0LCBmaXJzdERheU9mV2VlayB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdFx0Y3VycmVudERhdGU6IGN0eC5jdXJyZW50RGF0ZSxcblx0XHRcdHZpZXc6IGN0eC52aWV3LFxuXHRcdFx0c2VsZWN0RGF0ZTogY3R4LnNlbGVjdERhdGUsXG5cdFx0XHR0OiBjdHgudCxcblx0XHRcdGZpcnN0RGF5T2ZXZWVrOiBjdHguZmlyc3REYXlPZldlZWssXG5cdFx0fSkpXG5cblx0Y29uc3QgeyBmb3JtYXREYXRlUmFuZ2UgfSA9IHVzZURhdGVUaW1lRm9ybWF0dGVycygpXG5cblx0Y29uc3QgW29wZW5Qb3BvdmVyLCBzZXRPcGVuUG9wb3Zlcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuXG5cdGNvbnN0IG1vbnRocyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDEyIH0sIChfLCBpbmRleCkgPT5cblx0XHRjdXJyZW50RGF0ZS5tb250aChpbmRleCkuZm9ybWF0KCdNTU1NJylcblx0KVxuXG5cdGNvbnN0IGN1cnJlbnRZZWFyID0gY3VycmVudERhdGUueWVhcigpXG5cdGNvbnN0IHllYXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTEgfSwgKF8sIGkpID0+IGN1cnJlbnRZZWFyIC0gNSArIGkpXG5cdGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdGNvbnN0IGhhbmRsZVNlbGVjdERhdGUgPSAoZGF0ZTogRGF5anMpID0+IHtcblx0XHRzZWxlY3REYXRlKGRhdGUpXG5cdFx0c2V0T3BlblBvcG92ZXIobnVsbClcblx0fVxuXG5cdGNvbnN0IHJlbmRlck1vbnRoQ29udGVudCA9ICgpID0+IChcblx0XHQ8PlxuXHRcdFx0e21vbnRocy5tYXAoKG1vbnRoLCBpbmRleCkgPT4gKFxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdGN1cnJlbnREYXRlLm1vbnRoKCkgPT09IGluZGV4ICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0a2V5PXtpbmRleH1cblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3REYXRlKGN1cnJlbnREYXRlLm1vbnRoKGluZGV4KSl9XG5cdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHttb250aH1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQpKX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlclllYXJDb250ZW50ID0gKCkgPT4gKFxuXHRcdDw+XG5cdFx0XHR7eWVhcnMubWFwKCh5ZWFyKSA9PiAoXG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0Y3VycmVudERhdGUueWVhcigpID09PSB5ZWFyICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0a2V5PXt5ZWFyfVxuXHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdERhdGUoY3VycmVudERhdGUueWVhcih5ZWFyKSl9XG5cdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt5ZWFyfVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdCkpfVxuXHRcdDwvPlxuXHQpXG5cblx0Y29uc3QgcmVuZGVyV2Vla0NvbnRlbnQgPSAoKSA9PiAoXG5cdFx0PD5cblx0XHRcdHtBcnJheS5mcm9tKHsgbGVuZ3RoOiA3IH0sIChfLCBpKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHdlZWtEYXRlID0gY3VycmVudERhdGUuc3VidHJhY3QoMywgJ3dlZWsnKS5hZGQoaSwgJ3dlZWsnKVxuXHRcdFx0XHRjb25zdCBkYXlzID0gZ2V0V2Vla0RheXMod2Vla0RhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdFx0XHRjb25zdCBzdGFydCA9IGRheXNbMF1cblx0XHRcdFx0Y29uc3QgZW5kID0gZGF5c1s2XVxuXHRcdFx0XHRjb25zdCBpc0N1cnJlbnRXZWVrID0gd2Vla0RhdGUuaXNTYW1lKGN1cnJlbnREYXRlLCAnd2VlaycpXG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHQnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG5cdFx0XHRcdFx0XHRcdGlzQ3VycmVudFdlZWsgJiYgJ2JnLXByaW1hcnkvMTAnXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0a2V5PXtnZXREYXlLZXkoc3RhcnQpfVxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0RGF0ZShzdGFydCl9XG5cdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj57Zm9ybWF0RGF0ZVJhbmdlKHN0YXJ0LCBlbmQpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlckRheUNvbnRlbnQgPSAoKSA9PiB7XG5cdFx0Y29uc3QgZmlyc3REYXkgPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cdFx0Y29uc3QgZGF5c0luTW9udGggPSBjdXJyZW50RGF0ZS5kYXlzSW5Nb250aCgpXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PD5cblx0XHRcdFx0e0FycmF5LmZyb20oeyBsZW5ndGg6IGRheXNJbk1vbnRoIH0sIChfLCBpKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZGF5ID0gZmlyc3REYXkuZGF0ZShpICsgMSlcblx0XHRcdFx0XHRjb25zdCBpc0N1cnJlbnREYXkgPSBkYXkuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5Jylcblx0XHRcdFx0XHRjb25zdCB0b2RheSA9IGlzVG9kYXkoZGF5KVxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHQnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG5cdFx0XHRcdFx0XHRcdFx0aXNDdXJyZW50RGF5ICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRrZXk9e2dldERheUtleShkYXkpfVxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3REYXRlKGRheSl9XG5cdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuPntkYXkuZm9ybWF0KCdsbCcpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHR7dG9kYXkgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLXNtIHB4LTEhIHRleHQteHNcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ3RvZGF5Jyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pfVxuXHRcdFx0PC8+XG5cdFx0KVxuXHR9XG5cblx0Y29uc3QgcG9wb3ZlcnMgPSBbXG5cdFx0e1xuXHRcdFx0aWQ6ICdtb250aCcsXG5cdFx0XHRoaWRkZW46IHZpZXcgPT09ICd5ZWFyJyxcblx0XHRcdHRpdGxlOiBjdXJyZW50RGF0ZS5mb3JtYXQoJ01NTU0nKSxcblx0XHRcdHJlbmRlcjogcmVuZGVyTW9udGhDb250ZW50LFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6ICd5ZWFyJyxcblx0XHRcdGhpZGRlbjogZmFsc2UsXG5cdFx0XHR0aXRsZTogY3VycmVudERhdGUuZm9ybWF0KCdZWVlZJyksXG5cdFx0XHRyZW5kZXI6IHJlbmRlclllYXJDb250ZW50LFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6ICd3ZWVrJyxcblx0XHRcdGhpZGRlbjogdmlldyAhPT0gJ3dlZWsnLFxuXHRcdFx0dGl0bGU6IGZvcm1hdERhdGVSYW5nZSh3ZWVrRGF5c1swXSwgd2Vla0RheXNbNl0pLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJXZWVrQ29udGVudCxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiAnZGF5Jyxcblx0XHRcdGhpZGRlbjogdmlldyAhPT0gJ2RheScsXG5cdFx0XHR0aXRsZTogY3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCBEJyksXG5cdFx0XHRyZW5kZXI6IHJlbmRlckRheUNvbnRlbnQsXG5cdFx0fSxcblx0XVxuXG5cdHJldHVybiBwb3BvdmVyc1xuXHRcdC5maWx0ZXIoKHApID0+ICFwLmhpZGRlbilcblx0XHQubWFwKChwb3BvdmVyKSA9PiAoXG5cdFx0XHQ8UG9wb3ZlclxuXHRcdFx0XHRrZXk9e3BvcG92ZXIuaWR9XG5cdFx0XHRcdG9uT3BlbkNoYW5nZT17KG9wZW4pID0+IHNldE9wZW5Qb3BvdmVyKG9wZW4gPyBwb3BvdmVyLmlkIDogbnVsbCl9XG5cdFx0XHRcdG9wZW49e29wZW5Qb3BvdmVyID09PSBwb3BvdmVyLmlkfVxuXHRcdFx0PlxuXHRcdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBweC0xISBmb250LXNlbWlib2xkXCJcblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItbW9udGgtYnV0dG9uXCJcblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBweC0xISBmb250LXNlbWlib2xkXCJcblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1tb250aC1idXR0b25cIlxuXHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtrZXlzLmxpc3RLZXkocG9wb3Zlci5pZCwgZ2V0RGF5S2V5KGN1cnJlbnREYXRlKSl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdHtwb3BvdmVyLnRpdGxlfVxuXHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0XHQ8Q2hldnJvbkRvd24gY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvUG9wb3ZlclRyaWdnZXI+XG5cdFx0XHRcdDxQb3BvdmVyQ29udGVudCBjbGFzc05hbWU9XCJ3LTQwIHAtMFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtYXgtaC02MCBmbGV4LWNvbCBvdmVyZmxvdy1hdXRvXCI+XG5cdFx0XHRcdFx0XHR7cG9wb3Zlci5yZW5kZXIoKX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHRcdDwvUG9wb3Zlcj5cblx0XHQpKVxufVxuXG5leHBvcnQgZGVmYXVsdCBUaXRsZUNvbnRlbnRcbiIsCiAgICAiaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlRGF0ZVRpbWVGb3JtYXR0ZXJzKCkge1xuXHRjb25zdCB7IGN1cnJlbnRMb2NhbGUsIHRpbWV6b25lIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdGN1cnJlbnRMb2NhbGU6IGN0eC5jdXJyZW50TG9jYWxlLFxuXHRcdHRpbWV6b25lOiBjdHgudGltZXpvbmUsXG5cdH0pKVxuXG5cdGNvbnN0IGZvcm1hdERhdGVSYW5nZSA9IChzdGFydDogRGF5anMsIGVuZDogRGF5anMpID0+XG5cdFx0bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuXHRcdFx0dGltZVpvbmU6IHRpbWV6b25lLFxuXHRcdFx0bW9udGg6ICdzaG9ydCcsXG5cdFx0XHRkYXk6ICdudW1lcmljJyxcblx0XHR9KS5mb3JtYXRSYW5nZShzdGFydC50b0RhdGUoKSwgZW5kLnRvRGF0ZSgpKVxuXG5cdHJldHVybiB7IGZvcm1hdERhdGVSYW5nZSB9XG59XG4iLAogICAgImltcG9ydCB7IENoZXZyb25MZWZ0LCBDaGV2cm9uUmlnaHQgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG50eXBlIFZpZXdUeXBlID0gJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInXG5jb25zdCBBVkFJTEFCTEVfVklFV1M6IFZpZXdUeXBlW10gPSBbJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXVxuXG5pbnRlcmZhY2UgVmlld0NvbnRyb2xzUHJvcHMge1xuXHRjdXJyZW50VmlldzogVmlld1R5cGVcblx0b25DaGFuZ2U6ICh2aWV3OiBWaWV3VHlwZSkgPT4gdm9pZFxuXHRvblRvZGF5PzogKCkgPT4gdm9pZFxuXHRvbk5leHQ/OiAoKSA9PiB2b2lkXG5cdG9uUHJldmlvdXM/OiAoKSA9PiB2b2lkXG5cdHZhcmlhbnQ/OiAnZGVmYXVsdCcgfCAnZ3JpZCdcblx0c2l6ZT86ICdzbScgfCAnZGVmYXVsdCdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IFZpZXdDb250cm9sczogUmVhY3QuRkM8Vmlld0NvbnRyb2xzUHJvcHM+ID0gKHtcblx0Y3VycmVudFZpZXcsXG5cdG9uQ2hhbmdlLFxuXHR2YXJpYW50ID0gJ2RlZmF1bHQnLFxuXHRzaXplID0gJ3NtJyxcblx0Y2xhc3NOYW1lLFxuXHRvblRvZGF5LFxuXHRvbk5leHQsXG5cdG9uUHJldmlvdXMsXG59KSA9PiB7XG5cdGNvbnN0IHsgdCwgcmVzb3VyY2VzIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHR0OiBjb250ZXh0LnQsXG5cdFx0cmVzb3VyY2VzOiBjb250ZXh0LnJlc291cmNlcyxcblx0fSkpXG5cdGNvbnN0IGlzR3JpZCA9IHZhcmlhbnQgPT09ICdncmlkJ1xuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSByZXNvdXJjZXMgJiYgcmVzb3VyY2VzLmxlbmd0aCA+IDBcblxuXHQvLyBFeHRyYWN0IGNvbW1vbiBidXR0b24gY2xhc3NOYW1lIGxvZ2ljIHRvIGEgZnVuY3Rpb25cblx0Y29uc3QgZ2V0QnV0dG9uQ2xhc3NOYW1lID0gKHZpZXdUeXBlOiBWaWV3VHlwZSkgPT4ge1xuXHRcdHJldHVybiBjbihcblx0XHRcdC8vIEJhc2Ugd2lkdGggZm9yIGdyaWQgbGF5b3V0XG5cdFx0XHRpc0dyaWQgPyAndy1mdWxsJyA6ICcnLFxuXHRcdFx0Ly8gQWN0aXZlIHZpZXcgc3R5bGluZ1xuXHRcdFx0Y3VycmVudFZpZXcgPT09IHZpZXdUeXBlICYmICdiZy1wcmltYXJ5LzgwJ1xuXHRcdClcblx0fVxuXG5cdGNvbnN0IGdldEJ0blZhcmlhbnQgPSAodmlld1R5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0cmV0dXJuIGN1cnJlbnRWaWV3ID09PSB2aWV3VHlwZSA/ICdkZWZhdWx0JyA6ICdvdXRsaW5lJ1xuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRpc0dyaWQgPyAnZ3JpZCBncmlkLWNvbHMtMiBnYXAtMicgOiAnZmxleCBnYXAtMScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uUHJldmlvdXN9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdDxDaGV2cm9uTGVmdCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvbk5leHR9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdDxDaGV2cm9uUmlnaHQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0e0FWQUlMQUJMRV9WSUVXUy5tYXAoKHR5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0XHRcdGlmIChpc1Jlc291cmNlQ2FsZW5kYXIgJiYgdHlwZSA9PT0gJ3llYXInKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGxcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUodHlwZSl9XG5cdFx0XHRcdFx0XHRrZXk9e3R5cGV9XG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSh0eXBlKX1cblx0XHRcdFx0XHRcdHNpemU9e3NpemV9XG5cdFx0XHRcdFx0XHR2YXJpYW50PXtnZXRCdG5WYXJpYW50KHR5cGUpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHt0KHR5cGUpfVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvblRvZGF5fSBzaXplPXtzaXplfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHR7dCgndG9kYXknKX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZXdDb250cm9sc1xuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZFJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLXJvdydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuaW1wb3J0IHsgQWxsRGF5Q2VsbCB9IGZyb20gJy4vYWxsLWRheS1jZWxsJ1xuXG5pbnRlcmZhY2UgQWxsRGF5Um93UHJvcHMge1xuXHRkYXlzOiBEYXlqc1tdXG5cdGNsYXNzZXM/OiB7IHJvdz86IHN0cmluZzsgY2VsbD86IHN0cmluZzsgc3BhY2VyPzogc3RyaW5nIH1cblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRzaG93U3BhY2VyPzogYm9vbGVhblxufVxuXG5jb25zdCBOb01lbW9BbGxEYXlSb3c6IFJlYWN0LkZDPEFsbERheVJvd1Byb3BzPiA9ICh7XG5cdGRheXMsXG5cdGNsYXNzZXMsXG5cdHJlc291cmNlLFxuXHRzaG93U3BhY2VyID0gdHJ1ZSxcbn0pID0+IHtcblx0Y29uc3QgY29sdW1ucyA9IGRheXMubWFwKChkYXksIGluZGV4KSA9PiAoe1xuXHRcdGlkOiBrZXlzLmNvbC5hbGxEYXkoZGF5LCBpbmRleCksXG5cdFx0ZGF5LFxuXHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0XHRjbGFzc05hbWU6IGNuKCdoLWZ1bGwgbWluLWgtMTIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wJywgY2xhc3Nlcz8uY2VsbCksXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCB3LWZ1bGwgYmctYmFja2dyb3VuZCcsIGNsYXNzZXM/LnJvdyl9XG5cdFx0XHRkYXRhLXRlc3RpZD1cImFsbC1kYXktcm93XCJcblx0XHQ+XG5cdFx0XHR7LyogVGltZSBjb2wgc3BhY2VyICovfVxuXHRcdFx0e3Nob3dTcGFjZXIgJiYgPEFsbERheUNlbGwgY2xhc3NOYW1lPXtjbGFzc2VzPy5zcGFjZXJ9IC8+fVxuXG5cdFx0XHR7LyogRGF5IGFsbCBkYXkgY2VsbCAqL31cblx0XHRcdDxIb3Jpem9udGFsR3JpZFJvd1xuXHRcdFx0XHRhbGxEYXlcblx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleC0xIG1pbi1oLWZpdCBib3JkZXItYlwiXG5cdFx0XHRcdGNvbHVtbnM9e2NvbHVtbnN9XG5cdFx0XHRcdGRheU51bWJlckhlaWdodD17MH1cblx0XHRcdFx0Z3JpZFR5cGU9XCJkYXlcIlxuXHRcdFx0XHRpZD17a2V5cy5hbGxEYXlSb3cocmVzb3VyY2U/LmlkKX1cblx0XHRcdFx0aXNMYXN0Um93XG5cdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0dmFyaWFudD1cInJlZ3VsYXJcIlxuXHRcdFx0Lz5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgQWxsRGF5Um93ID0gbWVtbyhOb01lbW9BbGxEYXlSb3cpXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvaG9va3MvdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldERheUtleSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB7IEdyaWRDZWxsIH0gZnJvbSAnLi4vZ3JpZC1jZWxsJ1xuaW1wb3J0IHsgUmVzb3VyY2VDZWxsIH0gZnJvbSAnLi4vcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXIgfSBmcm9tICcuL2hvcml6b250YWwtZ3JpZC1ldmVudHMtbGF5ZXInXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZENvbHVtbiB7XG5cdGlkOiBzdHJpbmdcblx0ZGF5PzogRGF5anNcblx0ZGF5cz86IERheWpzW11cblx0Z3JpZFR5cGU6ICdkYXknIHwgJ2hvdXInXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRyZW5kZXJDZWxsPzogKHJvdzogSG9yaXpvbnRhbEdyaWRSb3dQcm9wcykgPT4gUmVhY3QuUmVhY3ROb2RlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRSb3dQcm9wcyB7XG5cdGlkOiBzdHJpbmcgfCBudW1iZXJcblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHZhcmlhbnQ/OiAncmVndWxhcicgfCAncmVzb3VyY2UnXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0Y29sdW1ucz86IEhvcml6b250YWxHcmlkQ29sdW1uW11cblx0YWxsRGF5PzogYm9vbGVhblxuXHRzaG93RGF5TnVtYmVyPzogYm9vbGVhblxuXHRpc0xhc3RSb3c/OiBib29sZWFuXG59XG5cbmNvbnN0IE5vTWVtb0hvcml6b250YWxHcmlkUm93OiBSZWFjdC5GQzxIb3Jpem9udGFsR3JpZFJvd1Byb3BzPiA9ICh7XG5cdGlkLFxuXHRyZXNvdXJjZSxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0dmFyaWFudCA9ICdyZXNvdXJjZScsXG5cdGRheU51bWJlckhlaWdodCxcblx0Y2xhc3NOYW1lLFxuXHRjb2x1bW5zID0gW10sXG5cdGFsbERheSxcblx0c2hvd0RheU51bWJlciA9IGZhbHNlLFxuXHRpc0xhc3RSb3cgPSBmYWxzZSxcbn0pID0+IHtcblx0Y29uc3QgeyByZW5kZXJSZXNvdXJjZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IGlzUmVzb3VyY2VDYWxlbmRhciA9IHZhcmlhbnQgPT09ICdyZXNvdXJjZSdcblx0Ly8gRmxhdCBjb2x1bW5zOiBlYWNoIGNvbHVtbiBoYXMgY29sLmRheSAocmVndWxhciBtb250aCwgcmVzb3VyY2UgbW9udGgpXG5cdC8vIEdyb3VwZWQgY29sdW1uczogZWFjaCBjb2x1bW4gaGFzIGNvbC5kYXlzW10gKHJlc291cmNlIHdlZWsgaG9yaXpvbnRhbClcblx0Y29uc3QgaXNHcm91cGVkID0gY29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5kYXlzKVxuXG5cdC8vIENvbGxlY3QgYWxsIGRheXMgZm9yIGZsYXQgcm93c1xuXHRjb25zdCBmbGF0RGF5cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmIChpc0dyb3VwZWQpIHJldHVybiBbXVxuXHRcdHJldHVybiBjb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wuZGF5KS5maWx0ZXIoKGQpOiBkIGlzIERheWpzID0+IEJvb2xlYW4oZCkpXG5cdH0sIFtjb2x1bW5zLCBpc0dyb3VwZWRdKVxuXG5cdC8vIENvbXB1dGUgZXZlbnRzIG9uY2UgYXQgdGhlIHJvdyBsZXZlbCDigJQgc2hhcmVkIGJldHdlZW4gR3JpZENlbGxzIGFuZCBldmVudHMgbGF5ZXJcblx0Y29uc3QgeyBwb3NpdGlvbmVkRXZlbnRzLCBkYXlFdmVudHNNYXAgfSA9IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMoe1xuXHRcdGRheXM6IGZsYXREYXlzLFxuXHRcdGdyaWRUeXBlLFxuXHRcdHJlc291cmNlSWQ6IHJlc291cmNlPy5pZCxcblx0XHRkYXlOdW1iZXJIZWlnaHQsXG5cdFx0YWxsRGF5LFxuXHR9KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LTEgcmVsYXRpdmUgbWluLXctMCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5jb250YWluZXIuaG9yaXpvbnRhbC5yb3coaWQpfVxuXHRcdD5cblx0XHRcdHtpc1Jlc291cmNlQ2FsZW5kYXIgJiYgcmVzb3VyY2UgJiYgKFxuXHRcdFx0XHQ8UmVzb3VyY2VDZWxsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy0yMCBzbTp3LTQwIHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwIGgtZnVsbFwiXG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuY29udGFpbmVyLmhvcml6b250YWwucm93TGFiZWwocmVzb3VyY2UuaWQpfVxuXHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHtyZW5kZXJSZXNvdXJjZSA/IChcblx0XHRcdFx0XHRcdHJlbmRlclJlc291cmNlKHJlc291cmNlKVxuXHRcdFx0XHRcdCkgOiAoXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIndyYXAtYnJlYWstd29yZCB0ZXh0LXNtXCI+e3Jlc291cmNlLnRpdGxlfTwvZGl2PlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdDwvUmVzb3VyY2VDZWxsPlxuXHRcdFx0KX1cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleC0xIGZsZXggbWluLXctMFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIG1pbi13LTBcIj5cblx0XHRcdFx0XHR7Y29sdW1ucy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGlmIChjb2wuZGF5cykge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdDxHcm91cGVkQ29sdW1uXG5cdFx0XHRcdFx0XHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0XHRcdFx0XHRcdGNvbD17Y29sfVxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXtkYXlOdW1iZXJIZWlnaHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRpZD17aWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RDb2w9e2luZGV4ID09PSBjb2x1bW5zLmxlbmd0aCAtIDF9XG5cdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3c9e2lzTGFzdFJvd31cblx0XHRcdFx0XHRcdFx0XHRcdGtleT17Y29sLmlkfVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2U/LmlkfVxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0RheU51bWJlcj17c2hvd0RheU51bWJlcn1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHJldHVybiBjb2wuZGF5ID8gKFxuXHRcdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J2ZsZXgtMSB3LTIwJyxcblx0XHRcdFx0XHRcdFx0XHRcdGlzTGFzdFJvdyAmJiAnYm9yZGVyLWItMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2wuY2xhc3NOYW1lXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkYXk9e2NvbC5kYXl9XG5cdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdGhvdXI9e2dyaWRUeXBlID09PSAnaG91cicgPyBjb2wuZGF5LmhvdXIoKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2NvbC5kYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0XHRcdFx0XHRwcmVjb21wdXRlZEV2ZW50cz17ZGF5RXZlbnRzTWFwLmdldChnZXREYXlLZXkoY29sLmRheSkpfVxuXHRcdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlPy5pZH1cblx0XHRcdFx0XHRcdFx0XHRzaG93RGF5TnVtYmVyPXtzaG93RGF5TnVtYmVyfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KSA6IG51bGxcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0ey8qIEV2ZW50cyBsYXllciBwb3NpdGlvbmVkIGFic29sdXRlbHkgb3ZlciB0aGUgcm93ICovfVxuXHRcdFx0XHR7IWlzR3JvdXBlZCAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuXHRcdFx0XHRcdFx0PEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJcblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuY29udGFpbmVyLmV2ZW50c0xheWVyKCdob3Jpem9udGFsJywgaWQpfVxuXHRcdFx0XHRcdFx0XHRkYXlzPXtmbGF0RGF5c31cblx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRwb3NpdGlvbmVkRXZlbnRzPXtwb3NpdGlvbmVkRXZlbnRzfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlPy5pZH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG4vKipcbiAqIEEgY29sdW1uIGNvbnRhaW5pbmcgbXVsdGlwbGUgZGF5cyAoZS5nLiwgb25lIGRheSdzIGhvdXJseSBzbG90cyBpbiByZXNvdXJjZSB3ZWVrIHZpZXcpLlxuICogTmVlZHMgaXRzIG93biB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzIGNhbGwgc2luY2UgZXZlbnRzIGFyZSBzY29wZWQgdG8gdGhpcyBkYXkgZ3JvdXAuXG4gKi9cbmNvbnN0IEdyb3VwZWRDb2x1bW4gPSBtZW1vKFxuXHQoe1xuXHRcdGNvbCxcblx0XHRncmlkVHlwZSA9ICdkYXknLFxuXHRcdGFsbERheSxcblx0XHRyZXNvdXJjZSxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGRheU51bWJlckhlaWdodCxcblx0XHRzaG93RGF5TnVtYmVyLFxuXHRcdGlzTGFzdFJvdyxcblx0XHRpc0xhc3RDb2wsXG5cdFx0aWQsXG5cdH06IHtcblx0XHRjb2w6IEhvcml6b250YWxHcmlkQ29sdW1uXG5cdFx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRcdGFsbERheT86IGJvb2xlYW5cblx0XHRyZXNvdXJjZT86IFJlc291cmNlXG5cdFx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRcdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRcdHNob3dEYXlOdW1iZXI6IGJvb2xlYW5cblx0XHRpc0xhc3RSb3c6IGJvb2xlYW5cblx0XHRpc0xhc3RDb2w6IGJvb2xlYW5cblx0XHRpZDogc3RyaW5nIHwgbnVtYmVyXG5cdH0pID0+IHtcblx0XHRjb25zdCBkYXlzID0gY29sLmRheXMgPz8gW11cblx0XHRjb25zdCB7IHBvc2l0aW9uZWRFdmVudHMgfSA9IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMoe1xuXHRcdFx0ZGF5cyxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdFx0cmVzb3VyY2VJZCxcblx0XHRcdGRheU51bWJlckhlaWdodCxcblx0XHRcdGFsbERheSxcblx0XHR9KVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCByZWxhdGl2ZSB3LWZ1bGxcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbFwiPlxuXHRcdFx0XHRcdHtkYXlzLm1hcCgoZGF5KSA9PiAoXG5cdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0YWxsRGF5PXthbGxEYXl9XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0J2ZsZXgtMSB3LTIwJyxcblx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3cgJiYgJ2JvcmRlci1iLTAnLFxuXHRcdFx0XHRcdFx0XHRcdCFpc0xhc3RDb2wgJiYgJ2JvcmRlci1yIScsXG5cdFx0XHRcdFx0XHRcdFx0Y29sLmNsYXNzTmFtZVxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRkYXk9e2RheX1cblx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRob3VyPXtncmlkVHlwZSA9PT0gJ2hvdXInID8gZGF5LmhvdXIoKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdFx0a2V5PXtkYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cblx0XHRcdFx0XHRcdFx0c2hvd0RheU51bWJlcj17c2hvd0RheU51bWJlcn1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCB6LTEwIHBvaW50ZXItZXZlbnRzLW5vbmVcIj5cblx0XHRcdFx0XHQ8SG9yaXpvbnRhbEdyaWRFdmVudHNMYXllclxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuY29udGFpbmVyLmV2ZW50c0xheWVyKCdob3Jpem9udGFsJywgaWQpfVxuXHRcdFx0XHRcdFx0ZGF5cz17ZGF5c31cblx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdHBvc2l0aW9uZWRFdmVudHM9e3Bvc2l0aW9uZWRFdmVudHN9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZUlkfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0KVxuXHR9XG4pXG5cbmV4cG9ydCBjb25zdCBIb3Jpem9udGFsR3JpZFJvdyA9IG1lbW8oTm9NZW1vSG9yaXpvbnRhbEdyaWRSb3cpXG4iLAogICAgImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGdldERheUtleSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQge1xuXHRldmVudE92ZXJsYXBzUmFuZ2UsXG5cdGZpbHRlckV2ZW50c0J5UmVzb3VyY2UsXG59IGZyb20gJ0AvbGliL3V0aWxzL2V2ZW50LXV0aWxzJ1xuaW1wb3J0IHtcblx0Z2V0UG9zaXRpb25lZEV2ZW50cyxcblx0dHlwZSBQb3NpdGlvbmVkRXZlbnQsXG59IGZyb20gJ0AvbGliL3V0aWxzL3Bvc2l0aW9uLXdlZWstZXZlbnRzJ1xuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkV2Vla0V2ZW50c1Byb3BzIHtcblx0ZGF5czogRGF5anNbXVxuXHRhbGxEYXk/OiBib29sZWFuXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzZWRXZWVrRXZlbnRzUmVzdWx0IHtcblx0cG9zaXRpb25lZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W11cblx0ZGF5RXZlbnRzTWFwOiBNYXA8c3RyaW5nLCBDYWxlbmRhckV2ZW50W10+XG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzID0gKHtcblx0ZGF5cyxcblx0YWxsRGF5LFxuXHRkYXlOdW1iZXJIZWlnaHQsXG5cdHJlc291cmNlSWQsXG5cdGdyaWRUeXBlLFxufTogVXNlUHJvY2Vzc2VkV2Vla0V2ZW50c1Byb3BzKTogUHJvY2Vzc2VkV2Vla0V2ZW50c1Jlc3VsdCA9PiB7XG5cdGNvbnN0IHtcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdGV2ZW50U3BhY2luZyxcblx0XHRldmVudEhlaWdodCxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCBmaXJzdCA9IGRheXMuYXQoMClcblx0Y29uc3QgbGFzdCA9IGRheXMuYXQoLTEpXG5cdGNvbnN0IHdlZWtTdGFydCA9IGZpcnN0Py5zdGFydE9mKCdkYXknKVxuXHRjb25zdCB3ZWVrRW5kID0gbGFzdD8uZW5kT2YoJ2RheScpXG5cblx0Y29uc3QgZXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKCF3ZWVrU3RhcnQgfHwgIXdlZWtFbmQpIHJldHVybiBbXVxuXG5cdFx0bGV0IHdlZWtFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uod2Vla1N0YXJ0LCB3ZWVrRW5kKVxuXHRcdGlmIChyZXNvdXJjZUlkKSB7XG5cdFx0XHR3ZWVrRXZlbnRzID0gZmlsdGVyRXZlbnRzQnlSZXNvdXJjZShcblx0XHRcdFx0d2Vla0V2ZW50cyxcblx0XHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UocmVzb3VyY2VJZClcblx0XHRcdClcblx0XHR9XG5cblx0XHRpZiAoYWxsRGF5KSB7XG5cdFx0XHR3ZWVrRXZlbnRzID0gd2Vla0V2ZW50cy5maWx0ZXIoKGUpID0+ICEhZS5hbGxEYXkgPT09IGFsbERheSlcblx0XHR9XG5cblx0XHRyZXR1cm4gd2Vla0V2ZW50c1xuXHR9LCBbXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdHdlZWtTdGFydCxcblx0XHR3ZWVrRW5kLFxuXHRcdHJlc291cmNlSWQsXG5cdFx0YWxsRGF5LFxuXHRdKVxuXG5cdGNvbnN0IGRheUV2ZW50c01hcCA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCBDYWxlbmRhckV2ZW50W10+KClcblx0XHRmb3IgKGNvbnN0IGRheSBvZiBkYXlzKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBnZXREYXlLZXkoZGF5KVxuXHRcdFx0Y29uc3QgZGF5U3RhcnQgPSBkYXkuc3RhcnRPZignZGF5Jylcblx0XHRcdGNvbnN0IGRheUVuZCA9IGRheS5lbmRPZignZGF5Jylcblx0XHRcdGNvbnN0IGRheUV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoKGUpID0+XG5cdFx0XHRcdGV2ZW50T3ZlcmxhcHNSYW5nZShlLCBkYXlTdGFydCwgZGF5RW5kKVxuXHRcdFx0KVxuXHRcdFx0bWFwLnNldChrZXksIGRheUV2ZW50cylcblx0XHR9XG5cdFx0cmV0dXJuIG1hcFxuXHR9LCBbZGF5cywgZXZlbnRzXSlcblxuXHRjb25zdCBwb3NpdGlvbmVkRXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0cmV0dXJuIGdldFBvc2l0aW9uZWRFdmVudHMoe1xuXHRcdFx0ZGF5cyxcblx0XHRcdGV2ZW50cyxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGRheU51bWJlckhlaWdodCxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdGV2ZW50QmFySGVpZ2h0OiBldmVudEhlaWdodCxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdH0pXG5cdH0sIFtcblx0XHRkYXlzLFxuXHRcdGRheU1heEV2ZW50cyxcblx0XHRkYXlOdW1iZXJIZWlnaHQsXG5cdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdGV2ZW50SGVpZ2h0LFxuXHRcdGV2ZW50cyxcblx0XHRncmlkVHlwZSxcblx0XSlcblxuXHRyZXR1cm4geyBwb3NpdGlvbmVkRXZlbnRzLCBkYXlFdmVudHNNYXAgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHtcblx0REFZX05VTUJFUl9IRUlHSFQsXG5cdEVWRU5UX0JBUl9IRUlHSFQsXG5cdEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxufSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpb25lZEV2ZW50IGV4dGVuZHMgQ2FsZW5kYXJFdmVudCB7XG5cdGxlZnQ6IG51bWJlciAvLyBMZWZ0IHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0d2lkdGg6IG51bWJlciAvLyBXaWR0aCBpbiBwZXJjZW50YWdlXG5cdHRvcDogbnVtYmVyIC8vIFRvcCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdGhlaWdodDogbnVtYmVyIC8vIEhlaWdodCBpbiBwZXJjZW50YWdlXG5cdHBvc2l0aW9uOiBudW1iZXIgLy8gUG9zaXRpb24gaW4gdGhlIHJvdyAoMCBmb3IgZmlyc3QsIDEgZm9yIHNlY29uZCwgZXRjLilcblx0aXNUcnVuY2F0ZWRTdGFydDogYm9vbGVhbiAvLyBXaGV0aGVyIHRoZSBldmVudCBpcyB0cnVuY2F0ZWQgYXQgdGhlIHN0YXJ0XG5cdGlzVHJ1bmNhdGVkRW5kOiBib29sZWFuIC8vIFdoZXRoZXIgdGhlIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgZW5kXG59XG5cbmludGVyZmFjZSBHZXRQb3NpdGlvbmVkRXZlbnRzUHJvcHMge1xuXHRkYXlzOiBEYXlqc1tdXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInIC8vIEZ1dHVyZSB1c2UgZm9yIGRpZmZlcmVudCBncmlkIHR5cGVzXG5cdGV2ZW50U3BhY2luZz86IG51bWJlciAvLyBDdXN0b20gdmVydGljYWwgc3BhY2luZyBiZXR3ZWVuIGV2ZW50cyAoZGVmYXVsdHMgdG8gR0FQX0JFVFdFRU5fRUxFTUVOVFMpXG5cdGV2ZW50QmFySGVpZ2h0PzogbnVtYmVyIC8vIEN1c3RvbSBoZWlnaHQgZm9yIGV2ZW50IGJhcnMgaW4gcGl4ZWxzIChkZWZhdWx0cyB0byBFVkVOVF9CQVJfSEVJR0hUKVxufVxuXG5leHBvcnQgY29uc3QgZ2V0UG9zaXRpb25lZEV2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGV2ZW50cyxcblx0ZGF5TWF4RXZlbnRzLFxuXHRkYXlOdW1iZXJIZWlnaHQgPSBEQVlfTlVNQkVSX0hFSUdIVCxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdGV2ZW50QmFySGVpZ2h0ID0gRVZFTlRfQkFSX0hFSUdIVCxcbn06IEdldFBvc2l0aW9uZWRFdmVudHNQcm9wcykgPT4ge1xuXHQvLyBGb3IgaG91ci1iYXNlZCBncmlkcywgdXNlIGFjdHVhbCBmaXJzdC9sYXN0IGhvdXJzIGZyb20gZGF5cyBhcnJheVxuXHQvLyBGb3IgZGF5LWJhc2VkIGdyaWRzLCB1c2Ugc3RhcnQvZW5kIG9mIGRheSB0byBjYXB0dXJlIGFsbCBldmVudHNcblx0Y29uc3QgZmlyc3QgPSBkYXlzLmF0KDApXG5cdGNvbnN0IGxhc3QgPSBkYXlzLmF0KC0xKVxuXHRpZiAoIWZpcnN0IHx8ICFsYXN0KSByZXR1cm4gW11cblxuXHRjb25zdCBmaXJzdERheSA9XG5cdFx0Z3JpZFR5cGUgPT09ICdob3VyJyA/IGZpcnN0LnN0YXJ0T2YoJ2hvdXInKSA6IGZpcnN0LnN0YXJ0T2YoJ2RheScpXG5cdGNvbnN0IGxhc3REYXkgPSBncmlkVHlwZSA9PT0gJ2hvdXInID8gbGFzdC5lbmRPZignaG91cicpIDogbGFzdC5lbmRPZignZGF5Jylcblx0Y29uc3QgZGF5Q291bnQgPSBkYXlzLmxlbmd0aFxuXG5cdC8vIFNlcGFyYXRlIG11bHRpLWRheSBhbmQgc2luZ2xlLWRheSBldmVudHNcblx0Y29uc3QgbXVsdGlEYXlFdmVudHMgPSBldmVudHMuZmlsdGVyKChlKSA9PiBlLmVuZC5kaWZmKGUuc3RhcnQsIGdyaWRUeXBlKSA+IDApXG5cdGNvbnN0IHNpbmdsZURheUV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoXG5cdFx0KGUpID0+IGUuZW5kLmRpZmYoZS5zdGFydCwgZ3JpZFR5cGUpID09PSAwXG5cdClcblxuXHQvLyBTb3J0IG11bHRpLWRheSBldmVudHMgYnkgc3RhcnQgZGF0ZSwgdGhlbiBieSBkdXJhdGlvblxuXHRjb25zdCBzb3J0ZWRNdWx0aURheSA9IFsuLi5tdWx0aURheUV2ZW50c10uc29ydCgoYSwgYikgPT4ge1xuXHRcdGNvbnN0IHN0YXJ0RGlmZiA9IGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuXHRcdGlmIChzdGFydERpZmYgIT09IDApIHtcblx0XHRcdHJldHVybiBzdGFydERpZmZcblx0XHR9XG5cdFx0cmV0dXJuIGIuZW5kLmRpZmYoYi5zdGFydCkgLSBhLmVuZC5kaWZmKGEuc3RhcnQpIC8vIExvbmdlciBldmVudHMgZmlyc3Rcblx0fSlcblxuXHQvLyBTb3J0IHNpbmdsZS1kYXkgZXZlbnRzIGJ5IHN0YXJ0IHRpbWVcblx0Y29uc3Qgc29ydGVkU2luZ2xlRGF5ID0gWy4uLnNpbmdsZURheUV2ZW50c10uc29ydCgoYSwgYikgPT5cblx0XHRhLnN0YXJ0LmRpZmYoYi5zdGFydClcblx0KVxuXG5cdC8vIENyZWF0ZSBkYXlDb3VudCB4IGRheU1heEV2ZW50cyBncmlkIHdpdGggZmxhZ3Ncblx0Y29uc3QgZ3JpZDogeyB0YWtlbjogYm9vbGVhbjsgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsIH1bXVtdID0gQXJyYXkuZnJvbShcblx0XHR7IGxlbmd0aDogZGF5TWF4RXZlbnRzIH0sXG5cdFx0KCkgPT5cblx0XHRcdEFycmF5LmZyb20oeyBsZW5ndGg6IGRheUNvdW50IH0sICgpID0+ICh7IHRha2VuOiBmYWxzZSwgZXZlbnQ6IG51bGwgfSkpXG5cdClcblxuXHRjb25zdCBwcm9jZXNzZWRFdmVudHM6IFBvc2l0aW9uZWRFdmVudFtdID0gW11cblxuXHQvLyBGaW5kIHRoZSBmaXJzdCByb3cgd2hlcmUgZXZlcnkgY29sdW1uIGZyb20gc3RhcnRDb2wuLmVuZENvbCBpcyBmcmVlOyAtMSBpZiBub25lLlxuXHRjb25zdCBmaW5kQXZhaWxhYmxlUm93ID0gKHN0YXJ0Q29sOiBudW1iZXIsIGVuZENvbDogbnVtYmVyKTogbnVtYmVyID0+IHtcblx0XHRmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG5cdFx0XHRsZXQgY2FuUGxhY2UgPSB0cnVlXG5cdFx0XHRmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdFx0aWYgKGdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG5cdFx0XHRcdFx0Y2FuUGxhY2UgPSBmYWxzZVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChjYW5QbGFjZSkgcmV0dXJuIHJvd1xuXHRcdH1cblx0XHRyZXR1cm4gLTFcblx0fVxuXG5cdGNvbnN0IHBsYWNlID0gKFxuXHRcdHJvdzogbnVtYmVyLFxuXHRcdHN0YXJ0Q29sOiBudW1iZXIsXG5cdFx0ZW5kQ29sOiBudW1iZXIsXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0aXNUcnVuY2F0ZWRTdGFydDogYm9vbGVhbixcblx0XHRpc1RydW5jYXRlZEVuZDogYm9vbGVhblxuXHQpID0+IHtcblx0XHRmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdGdyaWRbcm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuXHRcdH1cblx0XHRjb25zdCBzcGFuRGF5cyA9IGVuZENvbCAtIHN0YXJ0Q29sICsgMVxuXHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcblx0XHRcdGxlZnQ6IChzdGFydENvbCAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdHdpZHRoOiAoc3BhbkRheXMgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHR0b3A6XG5cdFx0XHRcdGRheU51bWJlckhlaWdodCArIGV2ZW50U3BhY2luZyArIHJvdyAqIChldmVudEJhckhlaWdodCArIGV2ZW50U3BhY2luZyksXG5cdFx0XHRoZWlnaHQ6IGV2ZW50QmFySGVpZ2h0LFxuXHRcdFx0cG9zaXRpb246IHJvdyxcblx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0aXNUcnVuY2F0ZWRTdGFydCxcblx0XHRcdGlzVHJ1bmNhdGVkRW5kLFxuXHRcdH0gYXMgUG9zaXRpb25lZEV2ZW50KVxuXHR9XG5cblx0Ly8gU3RlcCAxOiBBc3NpZ24gcG9zaXRpb25zIHRvIG11bHRpLWRheSBldmVudHMgZmlyc3Rcblx0Zm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRNdWx0aURheSkge1xuXHRcdGNvbnN0IGV2ZW50U3RhcnQgPSBkYXlqcy5tYXgoZXZlbnQuc3RhcnQuc3RhcnRPZihncmlkVHlwZSksIGZpcnN0RGF5KVxuXHRcdGNvbnN0IGFkanVzdGVkRW5kID1cblx0XHRcdGdyaWRUeXBlID09PSAnaG91cicgPyBldmVudC5lbmQuc3VidHJhY3QoMSwgJ21pbnV0ZScpIDogZXZlbnQuZW5kXG5cdFx0Y29uc3QgZXZlbnRFbmQgPSBkYXlqcy5taW4oYWRqdXN0ZWRFbmQuc3RhcnRPZihncmlkVHlwZSksIGxhc3REYXkpXG5cdFx0Y29uc3Qgc3RhcnRDb2wgPSBNYXRoLm1heCgwLCBldmVudFN0YXJ0LmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblx0XHRjb25zdCBlbmRDb2wgPSBNYXRoLm1pbihkYXlDb3VudCAtIDEsIGV2ZW50RW5kLmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblxuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKS5pc0JlZm9yZShmaXJzdERheSlcblx0XHRjb25zdCBpc1RydW5jYXRlZEVuZCA9IGV2ZW50LmVuZC5zdGFydE9mKGdyaWRUeXBlKS5pc0FmdGVyKGxhc3REYXkpXG5cblx0XHQvLyBGaXJzdCB0cnk6IHBsYWNlIGZyb20gb3JpZ2luYWwgc3RhcnQgcG9zaXRpb25cblx0XHRjb25zdCByb3cgPSBmaW5kQXZhaWxhYmxlUm93KHN0YXJ0Q29sLCBlbmRDb2wpXG5cdFx0aWYgKHJvdyAhPT0gLTEpIHtcblx0XHRcdHBsYWNlKHJvdywgc3RhcnRDb2wsIGVuZENvbCwgZXZlbnQsIGlzVHJ1bmNhdGVkU3RhcnQsIGlzVHJ1bmNhdGVkRW5kKVxuXHRcdFx0Y29udGludWVcblx0XHR9XG5cblx0XHQvLyBGYWxsYmFjazogdHJ5IHRydW5jYXRlZCB2ZXJzaW9ucyBzdGFydGluZyBmcm9tIGxhdGVyIGRheXNcblx0XHRmb3IgKGxldCB0cnlTdGFydCA9IHN0YXJ0Q29sICsgMTsgdHJ5U3RhcnQgPD0gZW5kQ29sOyB0cnlTdGFydCsrKSB7XG5cdFx0XHRjb25zdCB0cnVuY1JvdyA9IGZpbmRBdmFpbGFibGVSb3codHJ5U3RhcnQsIGVuZENvbClcblx0XHRcdGlmICh0cnVuY1JvdyAhPT0gLTEpIHtcblx0XHRcdFx0cGxhY2UodHJ1bmNSb3csIHRyeVN0YXJ0LCBlbmRDb2wsIGV2ZW50LCB0cnVlLCBpc1RydW5jYXRlZEVuZClcblx0XHRcdFx0YnJlYWtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTdGVwIDI6IEZpbGwgZ2FwcyB3aXRoIHNpbmdsZS1kYXkgZXZlbnRzXG5cdGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkU2luZ2xlRGF5KSB7XG5cdFx0Y29uc3QgZXZlbnRTdGFydCA9IGRheWpzLm1heChldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKSwgZmlyc3REYXkpXG5cdFx0Y29uc3QgY29sID0gTWF0aC5tYXgoXG5cdFx0XHQwLFxuXHRcdFx0TWF0aC5taW4oZGF5Q291bnQgLSAxLCBldmVudFN0YXJ0LmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblx0XHQpXG5cdFx0Y29uc3Qgcm93ID0gZmluZEF2YWlsYWJsZVJvdyhjb2wsIGNvbClcblx0XHRpZiAocm93ICE9PSAtMSkge1xuXHRcdFx0cGxhY2Uocm93LCBjb2wsIGNvbCwgZXZlbnQsIGZhbHNlLCBmYWxzZSlcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcHJvY2Vzc2VkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCBSZWFjdCwgeyBtZW1vLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEYXlOdW1iZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvZGF5LW51bWJlcidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGlzQnVzaW5lc3NIb3VyIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3VycydcbmltcG9ydCB7IHVzZUVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2hvb2tzL3VzZS1lZmZlY3RpdmUtYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZmlsdGVyRXZlbnRzQnlSZXNvdXJjZSB9IGZyb20gJ0AvbGliL3V0aWxzL2V2ZW50LXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5pbXBvcnQgdHlwZSB7IFNlbGVjdGVkRGF5RXZlbnRzIH0gZnJvbSAnLi9hbGwtZXZlbnRzLWRpYWxvZydcbmltcG9ydCB7IEFsbEV2ZW50RGlhbG9nIH0gZnJvbSAnLi9hbGwtZXZlbnRzLWRpYWxvZydcbmltcG9ydCB7IERyb3BwYWJsZUNlbGwgfSBmcm9tICcuL2Ryb3BwYWJsZS1jZWxsJ1xuXG5pbnRlcmZhY2UgR3JpZFByb3BzIHtcblx0ZGF5OiBEYXlqc1xuXHRob3VyPzogbnVtYmVyIC8vIE9wdGlvbmFsIGhvdXIgZm9yIGhvdXItYmFzZWQgZ3JpZHNcblx0bWludXRlPzogbnVtYmVyIC8vIE9wdGlvbmFsIG1pbnV0ZSBmb3IgbW9yZSBncmFudWxhciB0aW1lIHNsb3RzXG5cdGRheU1heEV2ZW50cz86IG51bWJlclxuXHRjbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY2xhc3NOYW1lIGZvciBjdXN0b20gc3R5bGluZ1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyIC8vIE9wdGlvbmFsIHJlc291cmNlIElEIGZvciByZXNvdXJjZS1zcGVjaWZpYyBkYXkgY2VsbHNcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJyAvLyBGdXR1cmUgdXNlIGZvciBkaWZmZXJlbnQgZ3JpZCB0eXBlc1xuXHRzaG91bGRSZW5kZXJFdmVudHM/OiBib29sZWFuIC8vIEZsYWcgdG8gZGV0ZXJtaW5lIGlmIGV2ZW50cyBzaG91bGQgYmUgcmVuZGVyZWRcblx0YWxsRGF5PzogYm9vbGVhbiAvLyBGbGFnIHRvIGluZGljYXRlIGlmIHRoaXMgaXMgYW4gYWxsLWRheSBjZWxsXG5cdHNob3dEYXlOdW1iZXI/OiBib29sZWFuIC8vIEZsYWcgdG8gc2hvdyBvciBoaWRlIHRoZSBkYXkgbnVtYmVyXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcblx0cHJlY29tcHV0ZWRFdmVudHM/OiBDYWxlbmRhckV2ZW50W11cbn1cblxuY29uc3QgTm9NZW1vR3JpZENlbGw6IFJlYWN0LkZDPEdyaWRQcm9wcz4gPSAoe1xuXHRkYXksXG5cdGhvdXIsXG5cdG1pbnV0ZSxcblx0Y2xhc3NOYW1lID0gJycsXG5cdHJlc291cmNlSWQsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHNob3VsZFJlbmRlckV2ZW50cyA9IHRydWUsXG5cdGFsbERheSA9IGZhbHNlLFxuXHRwcmVjb21wdXRlZEV2ZW50cyxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcblx0c2hvd0RheU51bWJlciA9IGZhbHNlLFxuXHRjaGlsZHJlbixcbn0pID0+IHtcblx0Y29uc3QgYWxsRXZlbnRzRGlhbG9nUmVmID0gUmVhY3QudXNlUmVmPHtcblx0XHRvcGVuOiAoKSA9PiB2b2lkXG5cdFx0Y2xvc2U6ICgpID0+IHZvaWRcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcblx0fT4obnVsbClcblx0Y29uc3Qge1xuXHRcdGRheU1heEV2ZW50cyA9IDAsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGN1cnJlbnREYXRlLFxuXHRcdHQsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHRldmVudFNwYWNpbmcsXG5cdFx0ZXZlbnRIZWlnaHQsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgPSB1c2VFZmZlY3RpdmVCdXNpbmVzc0hvdXJzKHJlc291cmNlSWQpXG5cblx0Y29uc3QgdG9kYXlFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoIXNob3VsZFJlbmRlckV2ZW50cykge1xuXHRcdFx0cmV0dXJuIFtdXG5cdFx0fVxuXG5cdFx0Ly8gVXNlIHByZS1jb21wdXRlZCBldmVudHMgZnJvbSB0aGUgcm93IGxldmVsIHdoZW4gYXZhaWxhYmxlXG5cdFx0aWYgKHByZWNvbXB1dGVkRXZlbnRzKSB7XG5cdFx0XHRyZXR1cm4gcHJlY29tcHV0ZWRFdmVudHNcblx0XHR9XG5cblx0XHRsZXQgdG9kYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoXG5cdFx0XHRkYXkuc3RhcnRPZihncmlkVHlwZSksXG5cdFx0XHRkYXkuZW5kT2YoZ3JpZFR5cGUpXG5cdFx0KVxuXG5cdFx0aWYgKGFsbERheSkge1xuXHRcdFx0dG9kYXlFdmVudHMgPSB0b2RheUV2ZW50cy5maWx0ZXIoKGUpID0+IGUuYWxsRGF5KVxuXHRcdH1cblxuXHRcdGlmIChyZXNvdXJjZUlkKSB7XG5cdFx0XHRyZXR1cm4gZmlsdGVyRXZlbnRzQnlSZXNvdXJjZShcblx0XHRcdFx0dG9kYXlFdmVudHMsXG5cdFx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlKHJlc291cmNlSWQpID8/IFtdXG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRvZGF5RXZlbnRzXG5cdH0sIFtcblx0XHRwcmVjb21wdXRlZEV2ZW50cyxcblx0XHRkYXksXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0Z3JpZFR5cGUsXG5cdFx0c2hvdWxkUmVuZGVyRXZlbnRzLFxuXHRcdGFsbERheSxcblx0XSlcblxuXHQvLyBIYW5kbGVyIGZvciBzaG93aW5nIGFsbCBldmVudHMgaW4gYSBkaWFsb2dcblx0Y29uc3Qgc2hvd0FsbEV2ZW50cyA9IChkYXk6IERheWpzLCBldmVudHM6IENhbGVuZGFyRXZlbnRbXSkgPT4ge1xuXHRcdGFsbEV2ZW50c0RpYWxvZ1JlZi5jdXJyZW50Py5zZXRTZWxlY3RlZERheUV2ZW50cyh7XG5cdFx0XHRkYXksXG5cdFx0XHRldmVudHMsXG5cdFx0fSlcblx0XHRhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8ub3BlbigpXG5cdH1cblxuXHRjb25zdCBpc0N1cnJlbnRNb250aCA9IGRheS5tb250aCgpID09PSBjdXJyZW50RGF0ZS5tb250aCgpXG5cblx0Y29uc3QgaGlkZGVuRXZlbnRzQ291bnQgPSB0b2RheUV2ZW50cy5sZW5ndGggLSBkYXlNYXhFdmVudHNcblx0Y29uc3QgaGFzSGlkZGVuRXZlbnRzID0gaGlkZGVuRXZlbnRzQ291bnQgPiAwXG5cblx0Y29uc3QgaXNCdXNpbmVzcyA9IGlzQnVzaW5lc3NIb3VyKHtcblx0XHRkYXRlOiBkYXksXG5cdFx0aG91cjogZ3JpZFR5cGUgPT09ICdob3VyJyA/IGRheS5ob3VyKCkgOiB1bmRlZmluZWQsXG5cdFx0YnVzaW5lc3NIb3VyczogZWZmZWN0aXZlQnVzaW5lc3NIb3Vycyxcblx0fSlcblxuXHRjb25zdCB0ZXN0SWQgPVxuXHRcdGdyaWRUeXBlID09PSAnaG91cidcblx0XHRcdD8ga2V5cy5jZWxsLmRheShkYXksIGRheS5mb3JtYXQoJ0hIJyksIGRheS5mb3JtYXQoJ21tJykpXG5cdFx0XHQ6IGtleXMuY2VsbC5kYXkoZGF5KVxuXHRjb25zdCBkcm9wcGFibGVJZCA9IGtleXMuZHJvcHBhYmxlLmRheUNlbGwoZGF5LCB7IGFsbERheSwgcmVzb3VyY2VJZCB9KVxuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxEcm9wcGFibGVDZWxsXG5cdFx0XHRcdGFsbERheT17YWxsRGF5fVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdjdXJzb3ItcG9pbnRlciBvdmVyZmxvdy1jbGlwIHAtMSBob3ZlcjpiZy1hY2NlbnQgbWluLWgtWzYwcHhdIHJlbGF0aXZlIGJvcmRlci1yIGJvcmRlci1iIG1pbi13LTAnLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZCB8fCB0ZXN0SWR9XG5cdFx0XHRcdGRhdGU9e2RheX1cblx0XHRcdFx0ZGlzYWJsZWQ9eyFpc0J1c2luZXNzIHx8ICFpc0N1cnJlbnRNb250aH1cblx0XHRcdFx0aG91cj17aG91cn1cblx0XHRcdFx0aWQ9e2Ryb3BwYWJsZUlkfVxuXHRcdFx0XHRtaW51dGU9e21pbnV0ZX1cblx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cblx0XHRcdFx0dHlwZT1cImRheS1jZWxsXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1mdWxsIHctZnVsbFwiXG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJncmlkLWNlbGwtY29udGVudFwiXG5cdFx0XHRcdFx0c3R5bGU9e3sgZ2FwOiBgJHtldmVudFNwYWNpbmd9cHhgIH19XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7c2hvd0RheU51bWJlciAmJiA8RGF5TnVtYmVyIGRhdGU9e2RheX0gbG9jYWxlPXtjdXJyZW50TG9jYWxlfSAvPn1cblxuXHRcdFx0XHRcdHtzaG91bGRSZW5kZXJFdmVudHMgJiYgKFxuXHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0ey8qIFJlbmRlciBwbGFjZWhvbGRlcnMgZm9yIGV2ZW50cyB0aGF0IG9jY3VyIHRvZGF5IHNvIHRoYXQgdGhlIGNlbGwgaGVpZ2h0IGlzIGFjY29yZGluZyB0byBkYXlNYXhFdmVudHMuICovfVxuXHRcdFx0XHRcdFx0XHR7dG9kYXlFdmVudHMuc2xpY2UoMCwgZGF5TWF4RXZlbnRzKS5tYXAoKGV2ZW50LCByb3dJbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBzaHJpbmstMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17ZXZlbnQ/LnRpdGxlfVxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoJ2VtcHR5Jywgcm93SW5kZXgsIGV2ZW50LmlkKX1cblx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlPXt7IGhlaWdodDogYCR7ZXZlbnRIZWlnaHR9cHhgIH19XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0KSl9XG5cblx0XHRcdFx0XHRcdFx0ey8qIFNob3cgbW9yZSBldmVudHMgYnV0dG9uIHdpdGggYWNjdXJhdGUgY291bnQgKi99XG5cdFx0XHRcdFx0XHRcdHtoYXNIaWRkZW5FdmVudHMgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvdXNlU2VtYW50aWNFbGVtZW50czogVXNpbmcgZGl2IGFzIGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmQgY3Vyc29yLXBvaW50ZXIgdGV4dC1bMTBweF0gd2hpdGVzcGFjZS1ub3dyYXAgc206dGV4dC14cyBzaHJpbmstMCBtdC0xXCJcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eyhlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG5cdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0b25LZXlEb3duPXsoZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZS5rZXkgPT09ICdFbnRlcicgfHwgZS5rZXkgPT09ICcgJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRyb2xlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdHRhYkluZGV4PXswfVxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdCt7aGlkZGVuRXZlbnRzQ291bnR9IHt0KCdtb3JlJyl9XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L0Ryb3BwYWJsZUNlbGw+XG5cblx0XHRcdHsvKiBEaWFsb2cgZm9yIHNob3dpbmcgYWxsIGV2ZW50cyAqL31cblx0XHRcdDxBbGxFdmVudERpYWxvZyByZWY9e2FsbEV2ZW50c0RpYWxvZ1JlZn0gLz5cblx0XHQ8Lz5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgR3JpZENlbGwgPSBtZW1vKE5vTWVtb0dyaWRDZWxsKSBhcyB0eXBlb2YgTm9NZW1vR3JpZENlbGxcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgaXNUb2RheSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuaW50ZXJmYWNlIERheU51bWJlclByb3BzIHtcblx0ZGF0ZTogRGF5anNcblx0bG9jYWxlPzogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGRheSBudW1iZXIgZm9yIGEgY2FsZW5kYXIgY2VsbCwgaGlnaGxpZ2h0aW5nICd0b2RheScgd2l0aCBhIHByaW1hcnkgYmFja2dyb3VuZC5cbiAqL1xuZXhwb3J0IGNvbnN0IERheU51bWJlcjogUmVhY3QuRkM8RGF5TnVtYmVyUHJvcHM+ID0gKHsgZGF0ZSwgY2xhc3NOYW1lIH0pID0+IHtcblx0Y29uc3QgdG9kYXkgPSBpc1RvZGF5KGRhdGUpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cyBzaHJpbmstMCcsXG5cdFx0XHRcdHRvZGF5ICYmICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGZvbnQtbWVkaXVtJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuZGF5TnVtYmVyKGRhdGUpfVxuXHRcdD5cblx0XHRcdHtkYXRlLmZvcm1hdCgnRCcpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cydcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQge1xuXHREaWFsb2csXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nVGl0bGUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9kaWFsb2cnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGVkRGF5RXZlbnRzIHtcblx0ZGF5OiBEYXlqc1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxufVxuXG5pbnRlcmZhY2UgQWxsRXZlbnREaWFsb2dQcm9wcyB7XG5cdHJlZjogUmVhY3QuUmVmPHtcblx0XHRvcGVuOiAoKSA9PiB2b2lkXG5cdFx0Y2xvc2U6ICgpID0+IHZvaWRcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcblx0fT5cbn1cblxuZXhwb3J0IGNvbnN0IEFsbEV2ZW50RGlhbG9nOiBSZWFjdC5GQzxBbGxFdmVudERpYWxvZ1Byb3BzPiA9ICh7IHJlZiB9KSA9PiB7XG5cdGNvbnN0IFtkaWFsb2dPcGVuLCBzZXREaWFsb2dPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXHRjb25zdCBbc2VsZWN0ZWREYXlFdmVudHMsIHNldFNlbGVjdGVkRGF5RXZlbnRzXSA9XG5cdFx0dXNlU3RhdGU8U2VsZWN0ZWREYXlFdmVudHMgfCBudWxsPihudWxsKVxuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaywgZXZlbnRIZWlnaHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHR1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcblx0XHRvcGVuOiAoKSA9PiBzZXREaWFsb2dPcGVuKHRydWUpLFxuXHRcdGNsb3NlOiAoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKSxcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+XG5cdFx0XHRzZXRTZWxlY3RlZERheUV2ZW50cyhkYXlFdmVudHMpLFxuXHR9KSlcblxuXHQvLyBHZXQgc3RhcnQgZGF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9udGggdmlldyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuXHRjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cblx0Ly8gQ2FsY3VsYXRlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGNhbGVuZGFyIGdyaWQgY29ycmVjdGx5XG5cdC8vIEZpbmQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIChlLmcuIFN1bmRheSBvciBNb25kYXkpIHRoYXQgY29tZXMgYmVmb3JlIG9yIG9uIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoXG5cdGxldCBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGZpcnN0RGF5T2ZNb250aC5jbG9uZSgpXG5cdHdoaWxlIChhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5kYXkoKSAhPT0gZmlyc3REYXlPZldlZWspIHtcblx0XHRhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLnN1YnRyYWN0KDEsICdkYXknKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17c2V0RGlhbG9nT3Blbn0gb3Blbj17ZGlhbG9nT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtaC1bODB2aF0gbWF4LXctbWQgb3ZlcmZsb3cteS1hdXRvXCI+XG5cdFx0XHRcdDxEaWFsb2dIZWFkZXI+XG5cdFx0XHRcdFx0PERpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRGF5RXZlbnRzPy5kYXkuZm9ybWF0KCdNTU1NIEQsIFlZWVknKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHQ8L0RpYWxvZ0hlYWRlcj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJtdC00IHNwYWNlLXktM1wiPlxuXHRcdFx0XHRcdHtzZWxlY3RlZERheUV2ZW50cz8uZXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxEcmFnZ2FibGVFdmVudFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIG15LTFcIiAvLyBVc2UgZXZlbnQgSUQgZm9yIHVuaXF1ZSBpZGVudGlmaWNhdGlvblxuXHRcdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17YGFsbC1ldmVudHMtZGlhbG9nLWV2ZW50LSQke2V2ZW50LmlkfWB9XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQ9e2V2ZW50fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17ZXZlbnQuaWR9XG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU9e3sgaGVpZ2h0OiBgJHtldmVudEhlaWdodH1weGAgfX1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L0RpYWxvZ0NvbnRlbnQ+XG5cdFx0PC9EaWFsb2c+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlRHJhZ2dhYmxlIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB0eXBlIHsgQ1NTUHJvcGVydGllcyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IGdldEJvcmRlclJhZGl1c0NsYXNzID0gKFxuXHRpc1RydW5jYXRlZFN0YXJ0OiBib29sZWFuLFxuXHRpc1RydW5jYXRlZEVuZDogYm9vbGVhblxuKSA9PiB7XG5cdGlmIChpc1RydW5jYXRlZFN0YXJ0ICYmIGlzVHJ1bmNhdGVkRW5kKSB7XG5cdFx0cmV0dXJuICdyb3VuZGVkLW5vbmUnXG5cdH1cblx0aWYgKGlzVHJ1bmNhdGVkU3RhcnQpIHtcblx0XHRyZXR1cm4gJ3JvdW5kZWQtci1tZCByb3VuZGVkLWwtbm9uZSdcblx0fVxuXHRpZiAoaXNUcnVuY2F0ZWRFbmQpIHtcblx0XHRyZXR1cm4gJ3JvdW5kZWQtbC1tZCByb3VuZGVkLXItbm9uZSdcblx0fVxuXHRyZXR1cm4gJ3JvdW5kZWQtbWQnXG59XG5cbmZ1bmN0aW9uIERyYWdnYWJsZUV2ZW50VW5tZW1vaXplZCh7XG5cdGVsZW1lbnRJZCxcblx0ZXZlbnQsXG5cdGNsYXNzTmFtZSxcblx0c3R5bGUsXG5cdGRpc2FibGVEcmFnID0gZmFsc2UsXG59OiB7XG5cdGVsZW1lbnRJZDogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRzdHlsZT86IENTU1Byb3BlcnRpZXNcblx0ZXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0ZGlzYWJsZURyYWc/OiBib29sZWFuXG59KSB7XG5cdGNvbnN0IHsgb25FdmVudENsaWNrLCByZW5kZXJFdmVudCwgZGlzYWJsZUV2ZW50Q2xpY2ssIGRpc2FibGVEcmFnQW5kRHJvcCB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMsIHNldE5vZGVSZWYsIGlzRHJhZ2dpbmcgfSA9IHVzZURyYWdnYWJsZSh7XG5cdFx0aWQ6IGVsZW1lbnRJZCxcblx0XHRkYXRhOiB7XG5cdFx0XHRldmVudCxcblx0XHRcdHR5cGU6ICdjYWxlbmRhci1ldmVudCcsXG5cdFx0fSxcblx0XHRkaXNhYmxlZDogZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wLFxuXHR9KVxuXG5cdC8vIERlZmF1bHQgZXZlbnQgY29udGVudCB0byByZW5kZXIgaWYgY3VzdG9tIHJlbmRlckV2ZW50IGlzIG5vdCBwcm92aWRlZFxuXHRjb25zdCBEZWZhdWx0RXZlbnRDb250ZW50ID0gKCkgPT4ge1xuXHRcdC8vIENoZWNrIGlmIHRoaXMgZXZlbnQgaGFzIHRydW5jYXRpb24gaW5mb3JtYXRpb25cblx0XHRjb25zdCBlbmhhbmNlZEV2ZW50ID0gZXZlbnQgYXMgdW5rbm93biBhcyB7XG5cdFx0XHRpc1RydW5jYXRlZFN0YXJ0PzogYm9vbGVhblxuXHRcdFx0aXNUcnVuY2F0ZWRFbmQ/OiBib29sZWFuXG5cdFx0fVxuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBlbmhhbmNlZEV2ZW50LmlzVHJ1bmNhdGVkU3RhcnRcblx0XHRjb25zdCBpc1RydW5jYXRlZEVuZCA9IGVuaGFuY2VkRXZlbnQuaXNUcnVuY2F0ZWRFbmRcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0ZXZlbnQuYmFja2dyb3VuZENvbG9yIHx8ICdiZy1ibHVlLTUwMCcsXG5cdFx0XHRcdFx0ZXZlbnQuY29sb3IgfHwgJ3RleHQtd2hpdGUnLFxuXHRcdFx0XHRcdCdoLWZ1bGwgdy1mdWxsIHB4LTEgYm9yZGVyLVsxLjVweF0gYm9yZGVyLWNhcmQgdGV4dC1sZWZ0IG92ZXJmbG93LWNsaXAgcmVsYXRpdmUnLFxuXHRcdFx0XHRcdGdldEJvcmRlclJhZGl1c0NsYXNzKFxuXHRcdFx0XHRcdFx0Qm9vbGVhbihpc1RydW5jYXRlZFN0YXJ0KSxcblx0XHRcdFx0XHRcdEJvb2xlYW4oaXNUcnVuY2F0ZWRFbmQpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGV2ZW50LmJhY2tncm91bmRDb2xvciwgY29sb3I6IGV2ZW50LmNvbG9yIH19XG5cdFx0XHQ+XG5cdFx0XHRcdHsvKiBMZWZ0IGNvbnRpbnVhdGlvbiBpbmRpY2F0b3IgKi99XG5cdFx0XHRcdHtpc1RydW5jYXRlZFN0YXJ0ICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGxlZnQtMCB0b3AtMCBib3R0b20tMCB3LTAuNSBiZy1mb3JlZ3JvdW5kLzI1XCI+PC9kaXY+XG5cdFx0XHRcdCl9XG5cblx0XHRcdFx0ey8qIEV2ZW50IHRpdGxlICovfVxuXHRcdFx0XHQ8cFxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQndGV4dC1bMTBweF0gZm9udC1zZW1pYm9sZCBzbTp0ZXh0LXhzIG10LTAuNScsXG5cdFx0XHRcdFx0XHQvLyBBZGQgc2xpZ2h0IHBhZGRpbmcgdG8gYXZvaWQgb3ZlcmxhcCB3aXRoIGluZGljYXRvcnNcblx0XHRcdFx0XHRcdGlzVHJ1bmNhdGVkU3RhcnQgJiYgJ3BsLTEnLFxuXHRcdFx0XHRcdFx0aXNUcnVuY2F0ZWRFbmQgJiYgJ3ByLTEnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHtldmVudC50aXRsZX1cblx0XHRcdFx0PC9wPlxuXG5cdFx0XHRcdHsvKiBSaWdodCBjb250aW51YXRpb24gaW5kaWNhdG9yICovfVxuXHRcdFx0XHR7aXNUcnVuY2F0ZWRFbmQgJiYgKFxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtMCB0b3AtMCBib3R0b20tMCB3LTAuNSBiZy1mb3JlZ3JvdW5kLzI1XCI+PC9kaXY+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCd0cnVuY2F0ZSBoLWZ1bGwgdy1mdWxsJyxcblx0XHRcdFx0ZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wXG5cdFx0XHRcdFx0PyBkaXNhYmxlRXZlbnRDbGlja1xuXHRcdFx0XHRcdFx0PyAnY3Vyc29yLWRlZmF1bHQnXG5cdFx0XHRcdFx0XHQ6ICdjdXJzb3ItcG9pbnRlcidcblx0XHRcdFx0XHQ6ICdjdXJzb3ItZ3JhYicsXG5cdFx0XHRcdGlzRHJhZ2dpbmcgJiZcblx0XHRcdFx0XHQhKGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcCkgJiZcblx0XHRcdFx0XHQnY3Vyc29yLWdyYWJiaW5nIHNoYWRvdy1sZycsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGxheW91dD17dHJ1ZX1cblx0XHRcdGxheW91dElkPXtlbGVtZW50SWR9XG5cdFx0XHRvbkNsaWNrPXsoZSkgPT4ge1xuXHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0XHRcdG9uRXZlbnRDbGljayhldmVudClcblx0XHRcdH19XG5cdFx0XHRyZWY9e3NldE5vZGVSZWZ9XG5cdFx0XHRzdHlsZT17c3R5bGV9XG5cdFx0XHR0cmFuc2l0aW9uS2V5PXtlbGVtZW50SWR9XG5cdFx0XHR7Li4uYXR0cmlidXRlc31cblx0XHRcdHsuLi5saXN0ZW5lcnN9XG5cdFx0PlxuXHRcdFx0ey8qIFVzZSBjdXN0b20gcmVuZGVyRXZlbnQgZnJvbSBjb250ZXh0IGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBkZWZhdWx0ICovfVxuXHRcdFx0e3JlbmRlckV2ZW50ID8gcmVuZGVyRXZlbnQoZXZlbnQpIDogPERlZmF1bHRFdmVudENvbnRlbnQgLz59XG5cdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IERyYWdnYWJsZUV2ZW50ID0gbWVtbyhcblx0RHJhZ2dhYmxlRXZlbnRVbm1lbW9pemVkLFxuXHQocHJldlByb3BzLCBuZXh0UHJvcHMpID0+IHtcblx0XHQvLyBDb21wYXJlIHRoZSBlc3NlbnRpYWwgcHJvcHMgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzXG5cdFx0cmV0dXJuIChcblx0XHRcdHByZXZQcm9wcy5lbGVtZW50SWQgPT09IG5leHRQcm9wcy5lbGVtZW50SWQgJiZcblx0XHRcdHByZXZQcm9wcy5kaXNhYmxlRHJhZyA9PT0gbmV4dFByb3BzLmRpc2FibGVEcmFnICYmXG5cdFx0XHRwcmV2UHJvcHMuY2xhc3NOYW1lID09PSBuZXh0UHJvcHMuY2xhc3NOYW1lICYmXG5cdFx0XHRwcmV2UHJvcHMuZXZlbnQgPT09IG5leHRQcm9wcy5ldmVudFxuXHRcdClcblx0fVxuKVxuIiwKICAgICIvLyBveGxpbnQtZGlzYWJsZSBuby1uZWdhdGVkLWNvbmRpdGlvblxuXG5pbXBvcnQgeyB1c2VEcm9wcGFibGUgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBESVNBQkxFRF9DRUxMX0NMQVNTTkFNRSB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBEcm9wcGFibGVDZWxsUHJvcHMge1xuXHRpZDogc3RyaW5nXG5cdHR5cGU6ICdkYXktY2VsbCcgfCAndGltZS1jZWxsJ1xuXHRkYXRlOiBEYXlqc1xuXHRob3VyPzogbnVtYmVyXG5cdG1pbnV0ZT86IG51bWJlclxuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdGFsbERheT86IGJvb2xlYW5cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllc1xuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdGRpc2FibGVkPzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gRHJvcHBhYmxlQ2VsbCh7XG5cdGlkLFxuXHR0eXBlLFxuXHRkYXRlLFxuXHRob3VyLFxuXHRtaW51dGUsXG5cdHJlc291cmNlSWQsXG5cdGFsbERheSxcblx0Y2hpbGRyZW4sXG5cdGNsYXNzTmFtZSxcblx0c3R5bGUsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG5cdGRpc2FibGVkID0gZmFsc2UsXG59OiBEcm9wcGFibGVDZWxsUHJvcHMpIHtcblx0Y29uc3Qge1xuXHRcdG9uQ2VsbENsaWNrLFxuXHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHR2aWV3LFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHsgaXNPdmVyLCBzZXROb2RlUmVmIH0gPSB1c2VEcm9wcGFibGUoe1xuXHRcdGlkLFxuXHRcdGRhdGE6IHtcblx0XHRcdHR5cGUsXG5cdFx0XHRkYXRlLFxuXHRcdFx0aG91cixcblx0XHRcdG1pbnV0ZSxcblx0XHRcdHJlc291cmNlSWQsXG5cdFx0XHRhbGxEYXksXG5cdFx0fSxcblx0XHRkaXNhYmxlZDogZGlzYWJsZURyYWdBbmREcm9wIHx8IGRpc2FibGVkLFxuXHR9KVxuXG5cdGNvbnN0IGhhbmRsZUNlbGxDbGljayA9IChlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXG5cdFx0aWYgKGRpc2FibGVDZWxsQ2xpY2sgfHwgZGlzYWJsZWQpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGNvbnN0IHN0YXJ0ID0gZGF0ZS5ob3VyKGhvdXIgPz8gMCkubWludXRlKG1pbnV0ZSA/PyAwKVxuXHRcdGxldCBlbmQgPSBzdGFydC5jbG9uZSgpXG5cdFx0aWYgKGhvdXIgIT09IHVuZGVmaW5lZCAmJiBtaW51dGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZW5kID0gZW5kLmhvdXIoaG91cikubWludXRlKG1pbnV0ZSArIDE1KSAvLyBkYXkgdmlldyB0aW1lIHNsb3RzIGFyZSAxNSBtaW51dGVzXG5cdFx0fSBlbHNlIGlmIChob3VyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGVuZCA9IGVuZC5ob3VyKGhvdXIgKyAxKS5taW51dGUoMCkgLy8gd2VlayB2aWV3IHRpbWUgc2xvdHMgYXJlIDEgaG91clxuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbmQgPSBlbmQuaG91cigyMykubWludXRlKDU5KSAvLyBtb250aCB2aWV3IGZ1bGwgZGF5XG5cdFx0fVxuXG5cdFx0b25DZWxsQ2xpY2soeyBzdGFydCwgZW5kLCByZXNvdXJjZUlkLCBhbGxEYXkgfSlcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub1N0YXRpY0VsZW1lbnRJbnRlcmFjdGlvbnM6IFRoZSBjZWxsIGlzIGludGVyYWN0aXZlIGZvciBldmVudCBjcmVhdGlvblxuXHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvdXNlS2V5V2l0aENsaWNrRXZlbnRzOiBLZXkgZXZlbnRzIGFyZSBoYW5kbGVkIGJ5IHBhcmVudCBjb21wb25lbnRzXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2Ryb3BwYWJsZS1jZWxsJyxcblx0XHRcdFx0Y2xhc3NOYW1lLFxuXHRcdFx0XHRpc092ZXIgJiYgIWRpc2FibGVEcmFnQW5kRHJvcCAmJiAhZGlzYWJsZWQgJiYgJ2JnLWFjY2VudCcsXG5cdFx0XHRcdGRpc2FibGVDZWxsQ2xpY2sgfHwgZGlzYWJsZWQgPyAnY3Vyc29yLWRlZmF1bHQnIDogJ2N1cnNvci1wb2ludGVyJyxcblx0XHRcdFx0ZGlzYWJsZWQgJiYgKGNsYXNzZXNPdmVycmlkZT8uZGlzYWJsZWRDZWxsIHx8IERJU0FCTEVEX0NFTExfQ0xBU1NOQU1FKVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtZGlzYWJsZWQ9e2Rpc2FibGVkLnRvU3RyaW5nKCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHRcdGRhdGEtdmlldz17dmlld31cblx0XHRcdG9uQ2xpY2s9e2hhbmRsZUNlbGxDbGlja31cblx0XHRcdHJlZj17c2V0Tm9kZVJlZn1cblx0XHRcdHN0eWxlPXtzdHlsZX1cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgUmVzb3VyY2VDZWxsUHJvcHMge1xuXHRyZXNvdXJjZTogUmVzb3VyY2Vcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlQ2VsbDogUmVhY3QuRkM8UmVzb3VyY2VDZWxsUHJvcHM+ID0gKHtcblx0cmVzb3VyY2UsXG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG59KSA9PiB7XG5cdGNvbnN0IHsgcmVuZGVyUmVzb3VyY2UgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG5cdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRjb2xvcjogcmVzb3VyY2UuY29sb3IsXG5cdFx0XHRcdGJhY2tncm91bmRDb2xvcjogcmVzb3VyY2UuYmFja2dyb3VuZENvbG9yLFxuXHRcdFx0fX1cblx0XHQ+XG5cdFx0XHR7cmVuZGVyUmVzb3VyY2Vcblx0XHRcdFx0PyByZW5kZXJSZXNvdXJjZShyZXNvdXJjZSlcblx0XHRcdFx0OiAoY2hpbGRyZW4gPz8gKFxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRydW5jYXRlXCI+e3Jlc291cmNlLnRpdGxlfTwvZGl2PlxuXHRcdFx0XHRcdCkpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEN1cnJlbnRUaW1lSW5kaWNhdG9yIH0gZnJvbSAnQC9jb21wb25lbnRzL2N1cnJlbnQtdGltZS1pbmRpY2F0b3InXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB0eXBlIHsgUG9zaXRpb25lZEV2ZW50IH0gZnJvbSAnQC9saWIvdXRpbHMvcG9zaXRpb24td2Vlay1ldmVudHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllclByb3BzIHtcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRkYXlzOiBEYXlqc1tdXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdHBvc2l0aW9uZWRFdmVudHM6IFBvc2l0aW9uZWRFdmVudFtdXG59XG5cbmNvbnN0IE5vTWVtb0hvcml6b250YWxHcmlkRXZlbnRzTGF5ZXI6IFJlYWN0LkZDPFxuXHRIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyUHJvcHNcbj4gPSAoe1xuXHRncmlkVHlwZSA9ICdkYXknLFxuXHRkYXlzLFxuXHRyZXNvdXJjZUlkLFxuXHRyZXNvdXJjZSxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcblx0cG9zaXRpb25lZEV2ZW50cyxcbn0pID0+IHtcblx0Y29uc3QgeyBldmVudEhlaWdodCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCB3ZWVrU3RhcnQgPSBkYXlzLmF0KDApPy5zdGFydE9mKCdkYXknKVxuXG5cdC8vIE5vdy1saW5lIGlzIGdhdGVkIHRvIGhvdXItcmVzb2x1dGlvbiBob3Jpem9udGFsIGdyaWRzIChyZXNvdXJjZSBkYXkgaG9yaXpvbnRhbCxcblx0Ly8gcmVzb3VyY2Ugd2VlayBob3Jpem9udGFsIGhvdXJseSkuIERheS1yZXNvbHV0aW9uIGdyaWRzIOKAlCByZWd1bGFyIE1vbnRoVmlldyBhbmRcblx0Ly8gcmVzb3VyY2UgTW9udGhWaWV3IOKAlCBza2lwIGl0OyBhIDI0aC1wZXJjZW50YWdlIGxpbmUgcGVyIGNlbGwgd291bGQgYmUgYVxuXHQvLyBtZWFuaW5nbGVzcyAxcHggc2xpdmVyLlxuXHRjb25zdCByYW5nZVN0YXJ0ID0gZGF5cy5hdCgwKVxuXHRjb25zdCByYW5nZUVuZCA9IGRheXMuYXQoLTEpPy5hZGQoMSwgZ3JpZFR5cGUpXG5cdGNvbnN0IHNob3dOb3dMaW5lID0gZ3JpZFR5cGUgPT09ICdob3VyJyAmJiBCb29sZWFuKHJhbmdlU3RhcnQgJiYgcmFuZ2VFbmQpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHBvaW50ZXItZXZlbnRzLW5vbmUgei0xMCBvdmVyZmxvdy1jbGlwXCJcblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkfVxuXHRcdD5cblx0XHRcdHtzaG93Tm93TGluZSAmJiByYW5nZVN0YXJ0ICYmIHJhbmdlRW5kICYmIChcblx0XHRcdFx0PEN1cnJlbnRUaW1lSW5kaWNhdG9yXG5cdFx0XHRcdFx0YXhpcz1cImhvcml6b250YWxcIlxuXHRcdFx0XHRcdHJhbmdlRW5kPXtyYW5nZUVuZH1cblx0XHRcdFx0XHRyYW5nZVN0YXJ0PXtyYW5nZVN0YXJ0fVxuXHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0Lz5cblx0XHRcdCl9XG5cdFx0XHR7cG9zaXRpb25lZEV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50S2V5ID0gYCR7ZXZlbnQuaWR9LSR7ZXZlbnQucG9zaXRpb259LSR7d2Vla1N0YXJ0Py50b0lTT1N0cmluZygpfS0ke3Jlc291cmNlSWQgPz8gJ25vLXJlc291cmNlJ31gXG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJhYnNvbHV0ZSB6LTEwIHBvaW50ZXItZXZlbnRzLWF1dG8gb3ZlcmZsb3ctY2xpcFwiXG5cdFx0XHRcdFx0XHRkYXRhLWxlZnQ9e2V2ZW50LmxlZnR9XG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5jb250YWluZXIuaG9yaXpvbnRhbC5ldmVudChldmVudC5pZCl9XG5cdFx0XHRcdFx0XHRkYXRhLXRvcD17ZXZlbnQudG9wfVxuXHRcdFx0XHRcdFx0ZGF0YS13aWR0aD17ZXZlbnQud2lkdGh9XG5cdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShldmVudEtleSwgJ3dyYXBwZXInKX1cblx0XHRcdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0XHRcdGxlZnQ6IGBjYWxjKCR7ZXZlbnQubGVmdH0lICsgdmFyKC0tc3BhY2luZykgKiAwLjI1KWAsXG5cdFx0XHRcdFx0XHRcdHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDEpYCxcblx0XHRcdFx0XHRcdFx0dG9wOiBgJHtldmVudC50b3B9cHhgLFxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IGAke2V2ZW50SGVpZ2h0fXB4YCxcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PERyYWdnYWJsZUV2ZW50XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtZnVsbCB3LWZ1bGwgc2hhZG93XCJcblx0XHRcdFx0XHRcdFx0ZWxlbWVudElkPXtldmVudEtleX1cblx0XHRcdFx0XHRcdFx0ZXZlbnQ9e2V2ZW50fVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXIgPSBtZW1vKE5vTWVtb0hvcml6b250YWxHcmlkRXZlbnRzTGF5ZXIpXG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyB7XG5cdC8qKiBUaGUgc3RhcnQgZGF0ZS90aW1lIG9mIHRoZSBjb250YWluZXIncyB0aW1lbGluZSAoZS5nLiwgdG9wIG9mIHRoZSBjb2x1bW4pICovXG5cdHJhbmdlU3RhcnQ6IERheWpzXG5cdC8qKiBUaGUgZW5kIGRhdGUvdGltZSBvZiB0aGUgY29udGFpbmVyJ3MgdGltZWxpbmUgKGUuZy4sIGJvdHRvbSBvZiB0aGUgY29sdW1uKSAqL1xuXHRyYW5nZUVuZDogRGF5anNcblx0LyoqIE9wdGlvbmFsIHJlZmVyZW5jZSB0aW1lIGZvciBcIm5vd1wiICh1c2VmdWwgZm9yIHRlc3RpbmcpICovXG5cdG5vdz86IERheWpzXG5cdC8qKiBUaGUgcmVzb3VyY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29sdW1uIChvcHRpb25hbCkgKi9cblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHQvKipcblx0ICogTGF5b3V0IGF4aXMgdGhlIGluZGljYXRvciBpcyByZW5kZXJlZCBhbG9uZy4gRGVmYXVsdHMgdG8gYCd2ZXJ0aWNhbCdgLlxuXHQgKiAtIGAndmVydGljYWwnYDogaG9yaXpvbnRhbCBsaW5lIHBvc2l0aW9uZWQgYnkgYHRvcDoge3Byb2dyZXNzfSVgIChkYXkvd2VlayB2ZXJ0aWNhbCBncmlkcykuXG5cdCAqIC0gYCdob3Jpem9udGFsJ2A6IHZlcnRpY2FsIGxpbmUgcG9zaXRpb25lZCBieSBgbGVmdDoge3Byb2dyZXNzfSVgIChob3Jpem9udGFsIHJlc291cmNlIGhvdXIgZ3JpZHMpLlxuXHQgKi9cblx0YXhpcz86ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCdcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgcmVkIG1hcmtlciBpbmRpY2F0aW5nIHRoZSBjdXJyZW50IHRpbWUgcmVsYXRpdmUgdG8gYSBjb250YWluZXIncyB0aW1lbGluZS5cbiAqIEhpZGVzIGl0c2VsZiB3aGVuIGBub3dgIGlzIG91dHNpZGUgdGhlIHJhbmdlLiBTd2l0Y2hlcyBvcmllbnRhdGlvbiB2aWEgdGhlIGBheGlzYCBwcm9wIOKAlFxuICogdmVydGljYWwgKGRlZmF1bHQpIGRyYXdzIGEgaG9yaXpvbnRhbCBsaW5lIGZvciB2ZXJ0aWNhbCBncmlkczsgaG9yaXpvbnRhbCBkcmF3cyBhIHZlcnRpY2FsXG4gKiBsaW5lIGZvciBob3Jpem9udGFsIHJlc291cmNlIGhvdXIgZ3JpZHMuIFN1cHBvcnRzIGN1c3RvbSByZW5kZXJpbmcgdmlhXG4gKiBgcmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JgIGZyb20gY29udGV4dC5cbiAqL1xuY29uc3QgTm9NZW1vQ3VycmVudFRpbWVJbmRpY2F0b3IgPSAoe1xuXHRyYW5nZVN0YXJ0LFxuXHRyYW5nZUVuZCxcblx0bm93OiBwcm9wTm93LFxuXHRyZXNvdXJjZSxcblx0YXhpcyA9ICd2ZXJ0aWNhbCcsXG59OiBDdXJyZW50VGltZUluZGljYXRvclByb3BzKSA9PiB7XG5cdC8vIEdldCByZW5kZXIgZnVuY3Rpb24gYW5kIGN1cnJlbnQgdmlldyBmcm9tIGNvbnRleHRcblx0Y29uc3QgeyByZW5kZXJDdXJyZW50VGltZUluZGljYXRvciwgdmlldyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoXG5cdFx0KHN0YXRlKSA9PiAoe1xuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3I6IHN0YXRlLnJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRcdFx0dmlldzogc3RhdGUudmlldyxcblx0XHR9KVxuXHQpXG5cblx0Y29uc3Qgbm93ID0gcHJvcE5vdyA/PyBkYXlqcygpXG5cblx0Ly8gQ2hlY2sgaWYgY3VycmVudCB0aW1lIGZhbGxzIHdpdGhpbiB0aGlzIHJhbmdlXG5cdGNvbnN0IGlzV2l0aGluUmFuZ2UgPSBub3cuaXNTYW1lT3JBZnRlcihyYW5nZVN0YXJ0KSAmJiBub3cuaXNCZWZvcmUocmFuZ2VFbmQpXG5cblx0aWYgKCFpc1dpdGhpblJhbmdlKSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXG5cdGNvbnN0IHRvdGFsRHVyYXRpb24gPSByYW5nZUVuZC5kaWZmKHJhbmdlU3RhcnQsICdtaW51dGUnKVxuXHRjb25zdCBtaW51dGVzRnJvbVN0YXJ0ID0gbm93LmRpZmYocmFuZ2VTdGFydCwgJ21pbnV0ZScpXG5cdGNvbnN0IHByb2dyZXNzID0gKG1pbnV0ZXNGcm9tU3RhcnQgLyB0b3RhbER1cmF0aW9uKSAqIDEwMFxuXG5cdC8vIElmIGN1c3RvbSByZW5kZXIgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdmlhIGNvbnRleHQsIHVzZSBpdFxuXHRpZiAocmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PD5cblx0XHRcdFx0e3JlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yKHtcblx0XHRcdFx0XHRjdXJyZW50VGltZTogbm93LFxuXHRcdFx0XHRcdHJhbmdlU3RhcnQsXG5cdFx0XHRcdFx0cmFuZ2VFbmQsXG5cdFx0XHRcdFx0cHJvZ3Jlc3MsXG5cdFx0XHRcdFx0cmVzb3VyY2UsXG5cdFx0XHRcdFx0dmlldyxcblx0XHRcdFx0XHRheGlzLFxuXHRcdFx0XHR9KX1cblx0XHRcdDwvPlxuXHRcdClcblx0fVxuXG5cdC8vIERlZmF1bHQgaW5kaWNhdG9yIHJlbmRlcmluZ1xuXHRpZiAoYXhpcyA9PT0gJ2hvcml6b250YWwnKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGUgdG9wLTAgYm90dG9tLTAgdy0wLjUgYmctcmVkLTUwMCB6LTUwIHBvaW50ZXItZXZlbnRzLW5vbmVcIlxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cImN1cnJlbnQtdGltZS1pbmRpY2F0b3JcIlxuXHRcdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRcdGxlZnQ6IGAke3Byb2dyZXNzfSVgLFxuXHRcdFx0XHR9fVxuXHRcdFx0Lz5cblx0XHQpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImFic29sdXRlIGxlZnQtMCByaWdodC0wIGgtMC41IGJnLXJlZC01MDAgei01MCBwb2ludGVyLWV2ZW50cy1ub25lXCJcblx0XHRcdGRhdGEtdGVzdGlkPVwiY3VycmVudC10aW1lLWluZGljYXRvclwiXG5cdFx0XHRzdHlsZT17e1xuXHRcdFx0XHR0b3A6IGAke3Byb2dyZXNzfSVgLFxuXHRcdFx0fX1cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBDdXJyZW50VGltZUluZGljYXRvciA9IG1lbW8oTm9NZW1vQ3VycmVudFRpbWVJbmRpY2F0b3IpXG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBBbGxEYXlDZWxsUHJvcHMge1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgTm9NZW1vQWxsRGF5Q2VsbDogUmVhY3QuRkM8QWxsRGF5Q2VsbFByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCd3LTE2IGJvcmRlci1yIHNocmluay0wIHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwIGZsZXggYm9yZGVyLWIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB4LTEgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0PlxuXHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidHJ1bmNhdGVcIj57dCgnYWxsRGF5Jyl9PC9zcGFuPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBBbGxEYXlDZWxsID0gbWVtbyhOb01lbW9BbGxEYXlDZWxsKVxuIiwKICAgICJpbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmludGVyZmFjZSBIb3VyTGFiZWxQcm9wcyB7XG5cdGRhdGU6IERheWpzXG59XG5cbmV4cG9ydCBjb25zdCBIb3VyTGFiZWw6IFJlYWN0LkZDPEhvdXJMYWJlbFByb3BzPiA9ICh7IGRhdGUgfSkgPT4ge1xuXHRjb25zdCB7IHJlbmRlckhvdXIsIHRpbWVGb3JtYXQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRpZiAocmVuZGVySG91cikge1xuXHRcdHJldHVybiA8PntyZW5kZXJIb3VyKGRhdGUpfTwvPlxuXHR9XG5cblx0cmV0dXJuIDw+e2RhdGUuZm9ybWF0KHRpbWVGb3JtYXQgPT09ICcxMi1ob3VyJyA/ICdoIEEnIDogJ0gnKX08Lz5cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VSZWYgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB7IHVzZVNjcm9sbFRvVGltZSB9IGZyb20gJy4vdXNlLXNjcm9sbC10by10aW1lJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkQ29sLCB0eXBlIFZlcnRpY2FsR3JpZENvbFByb3BzIH0gZnJvbSAnLi92ZXJ0aWNhbC1ncmlkLWNvbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lciB9IGZyb20gJy4vdmVydGljYWwtZ3JpZC1oZWFkZXItY29udGFpbmVyJ1xuXG5pbnRlcmZhY2UgVmVydGljYWxHcmlkUHJvcHMge1xuXHRjb2x1bW5zOiBWZXJ0aWNhbEdyaWRDb2xQcm9wc1tdXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0dmFyaWFudD86ICdyZWd1bGFyJyB8ICdyZXNvdXJjZSdcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBib2R5Pzogc3RyaW5nOyBhbGxEYXk/OiBzdHJpbmcgfVxuXHRhbGxEYXlSb3c/OiBSZWFjdC5SZWFjdE5vZGVcblx0LyoqXG5cdCAqIEdyYW51bGFyaXR5IG9mIGVhY2ggaG91ciByb3cgaW4gbWludXRlcy4gRm9yd2FyZGVkIHRvIFZlcnRpY2FsR3JpZENvbC5cblx0ICovXG5cdHNsb3REdXJhdGlvbk1pbnV0ZXM/OiBudW1iZXJcblx0c3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzXG59XG5cbmV4cG9ydCBjb25zdCBWZXJ0aWNhbEdyaWQ6IFJlYWN0LkZDPFZlcnRpY2FsR3JpZFByb3BzPiA9ICh7XG5cdGNvbHVtbnMsXG5cdGNoaWxkcmVuLFxuXHRncmlkVHlwZSA9ICdkYXknLFxuXHR2YXJpYW50ID0gJ3Jlc291cmNlJyxcblx0Y2xhc3Nlcyxcblx0YWxsRGF5Um93LFxuXHRzbG90RHVyYXRpb25NaW51dGVzLFxuXHRzdHlsZSxcbn0pID0+IHtcblx0Y29uc3QgaXNSZXNvdXJjZUNhbGVuZGFyID0gdmFyaWFudCA9PT0gJ3Jlc291cmNlJ1xuXHRjb25zdCBpc1JlZ3VsYXJDYWxlbmRhciA9ICFpc1Jlc291cmNlQ2FsZW5kYXJcblx0Ly8gVHJpZ2dlcmVkIHdoZW4gYGhpZGVOb25CdXNpbmVzc0hvdXJzYCBmaWx0ZXJzIGV2ZXJ5IGNvbHVtbiB0byB6ZXJvIGhvdXJzXG5cdC8vIChlLmcuIGJ1c2luZXNzIGhvdXJzIGBzdGFydFRpbWU6IDAsIGVuZFRpbWU6IDBgKS4gVGhlIGFsbC1kYXkgcm93IHRha2VzXG5cdC8vIHRoZSBmcmVlZCB2ZXJ0aWNhbCBzcGFjZSBzbyB0aGUgdmlldyBkb2Vzbid0IHJlbmRlciBhbiBlbXB0eSB0aW1lIGdyaWQuXG5cdGNvbnN0IGV4cGFuZEFsbERheVJvdyA9IGNvbHVtbnMuZXZlcnkoKGMpID0+ICFjLmRheXM/Lmxlbmd0aClcblxuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB2aWV3LCBzY3JvbGxUaW1lIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IHZpZXdwb3J0UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbClcblxuXHRjb25zdCBoYXNIb3Vyc1RvU2Nyb2xsID0gZ3JpZFR5cGUgPT09ICdob3VyJyAmJiAhZXhwYW5kQWxsRGF5Um93XG5cblx0dXNlU2Nyb2xsVG9UaW1lKHtcblx0XHR2aWV3cG9ydFJlZixcblx0XHRzY3JvbGxUaW1lLFxuXHRcdGVuYWJsZWQ6IGhhc0hvdXJzVG9TY3JvbGwsXG5cdFx0c2Nyb2xsS2V5OiBgJHt2aWV3fS0ke2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpfWAsXG5cdH0pXG5cblx0Y29uc3QgaGVhZGVyID0gY2hpbGRyZW4gJiYgKFxuXHRcdDxWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXJcblx0XHRcdGFsbERheVJvdz17YWxsRGF5Um93fVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6IGNsYXNzZXM/LmhlYWRlciwgYWxsRGF5OiBjbGFzc2VzPy5hbGxEYXkgfX1cblx0XHRcdGV4cGFuZEFsbERheVJvdz17ZXhwYW5kQWxsRGF5Um93fVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L1ZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lcj5cblx0KVxuXG5cdC8vIFdoZW4gYWxsIGNvbHVtbnMgYXJlIGVtcHR5IChubyBob3VycyB0byBkaXNwbGF5KSwgc2tpcCB0aGUgU2Nyb2xsQXJlYVxuXHQvLyBlbnRpcmVseSBzbyB0aGUgaGVhZGVyICh3aXRoIHRoZSBleHBhbmRlZCBhbGwtZGF5IHJvdykgdGFrZXMgdGhlIGZ1bGxcblx0Ly8gY29udGFpbmVyIGhlaWdodC4gaC1mdWxsIG9uIGEgZmxleCBjaGlsZCBvbmx5IHJlc29sdmVzIGNvcnJlY3RseSBhZ2FpbnN0XG5cdC8vIGEgcGFyZW50IHdpdGggYSBkZWZpbml0ZSBoZWlnaHQsIGFuZCBSYWRpeCdzIFZpZXdwb3J0IHdyYXBwZXIgaGFzIG9ubHlcblx0Ly8gbWluLWhlaWdodCAobm90IGV4cGxpY2l0IGhlaWdodCksIHdoaWNoIGlzIHdoeSB0aGUgYWxsLWRheSByb3cnc1xuXHQvLyBmbGV4LTEgd291bGRuJ3QgZ3JvdyB3aGVuIG5lc3RlZCBpbnNpZGUgdGhlIFNjcm9sbEFyZWEuXG5cdGlmIChleHBhbmRBbGxEYXlSb3cgJiYgaGVhZGVyKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPVwiaC1mdWxsIGZsZXggZmxleC1jb2xcIlxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtY29udGFpbmVyXCJcblx0XHRcdFx0c3R5bGU9e3N0eWxlfVxuXHRcdFx0PlxuXHRcdFx0XHR7aGVhZGVyfVxuXHRcdFx0PC9kaXY+XG5cdFx0KVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJoLWZ1bGwgZmxleCBmbGV4LWNvbFwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtY29udGFpbmVyXCJcblx0XHRcdHN0eWxlPXtzdHlsZX1cblx0XHQ+XG5cdFx0XHR7LyogaGVhZGVyIHJvdyAqL31cblx0XHRcdHtpc1JlZ3VsYXJDYWxlbmRhciAmJiBoZWFkZXJ9XG5cblx0XHRcdDxTY3JvbGxBcmVhXG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2gtZnVsbCcsIGlzUmVndWxhckNhbGVuZGFyICYmICdvdmVyZmxvdy1hdXRvJyl9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1zY3JvbGxcIlxuXHRcdFx0XHR2aWV3UG9ydFByb3BzPXt7XG5cdFx0XHRcdFx0Y2xhc3NOYW1lOiAnKjpmbGV4ISAqOmZsZXgtY29sISAqOm1pbi1oLWZ1bGwnLFxuXHRcdFx0XHRcdHJlZjogdmlld3BvcnRSZWYsXG5cdFx0XHRcdH19XG5cdFx0XHQ+XG5cdFx0XHRcdHsvKiBoZWFkZXIgcm93IGZvciByZXNvdXJjZSBjYWxlbmRhciBpbnNpZGUgc2Nyb2xsIGFyZWEgKi99XG5cdFx0XHRcdHtpc1Jlc291cmNlQ2FsZW5kYXIgJiYgaGVhZGVyfVxuXHRcdFx0XHR7LyogQ2FsZW5kYXIgYXJlYSB3aXRoIHNjcm9sbCAqL31cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC0xIG1pbi13LWZ1bGwgdy1maXQnLCBjbGFzc2VzPy5ib2R5KX1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtYm9keVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7LyogRGF5IGNvbHVtbnMgd2l0aCB0aW1lIHNsb3RzICovfVxuXHRcdFx0XHRcdHtjb2x1bW5zLm1hcCgoY29sdW1uLCBpbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0PFZlcnRpY2FsR3JpZENvbFxuXHRcdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShjb2x1bW4uaWQsIGluZGV4KX1cblx0XHRcdFx0XHRcdFx0ey4uLmNvbHVtbn1cblx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRpc0xhc3RDb2x1bW49e2luZGV4ID09PSBjb2x1bW5zLmxlbmd0aCAtIDF9XG5cdFx0XHRcdFx0XHRcdHNsb3REdXJhdGlvbk1pbnV0ZXM9e3Nsb3REdXJhdGlvbk1pbnV0ZXN9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCkpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgLz4gey8qIHZlcnRpY2FsIHNjcm9sbGJhciAqL31cblx0XHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgb3JpZW50YXRpb249XCJob3Jpem9udGFsXCIgLz57JyAnfVxuXHRcdFx0XHR7LyogaG9yaXpvbnRhbCBzY3JvbGxiYXIgKi99XG5cdFx0XHQ8L1Njcm9sbEFyZWE+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdHlwZSBSZWZPYmplY3QsIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnXG5cbmV4cG9ydCB0eXBlIFNjcm9sbFRvVGltZUF4aXMgPSAndmVydGljYWwnIHwgJ2hvcml6b250YWwnXG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlU2Nyb2xsVG9UaW1lT3B0aW9ucyB7XG5cdC8qKlxuXHQgKiBSZWYgdG8gdGhlIGFjdHVhbCBzY3JvbGxpbmcgZWxlbWVudCAoZS5nLiB0aGUgUmFkaXggU2Nyb2xsQXJlYSB2aWV3cG9ydCkuXG5cdCAqIFRoZSBob29rIHNjcm9sbHMgdGhpcyBlbGVtZW50IGRpcmVjdGx5IHNvIHRoZSBwYXJlbnQgcGFnZSBpcyBub3QgYWZmZWN0ZWQuXG5cdCAqL1xuXHR2aWV3cG9ydFJlZjogUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD5cblx0c2Nyb2xsVGltZT86IHN0cmluZ1xuXHRlbmFibGVkOiBib29sZWFuXG5cdHNjcm9sbEtleTogc3RyaW5nXG5cdC8qKlxuXHQgKiBWZXJ0aWNhbCBzY3JvbGxzIGFsb25nIHRoZSBZIGF4aXMgKGBzY3JvbGxUb3BgKSwgaG9yaXpvbnRhbCBhbG9uZyB0aGUgWFxuXHQgKiBheGlzIChgc2Nyb2xsTGVmdGApLlxuXHQgKlxuXHQgKiBAZGVmYXVsdCAndmVydGljYWwnXG5cdCAqL1xuXHRheGlzPzogU2Nyb2xsVG9UaW1lQXhpc1xufVxuXG5jb25zdCBIT1VSX1BBVFRFUk4gPSAvXihcXGR7MSwyfSkoPzo6XFxkezEsMn0pPyg/OjpcXGR7MSwyfSk/JC9cbmNvbnN0IEhPVVJfU0VMRUNUT1IgPSAnW2RhdGEtaG91cl0nXG5cbmNvbnN0IHBhcnNlSG91ciA9ICh0aW1lOiBzdHJpbmcpOiBudW1iZXIgfCBudWxsID0+IHtcblx0Y29uc3QgbWF0Y2ggPSBIT1VSX1BBVFRFUk4uZXhlYyh0aW1lKVxuXHRpZiAoIW1hdGNoKSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXHRjb25zdCBob3VyID0gTnVtYmVyLnBhcnNlSW50KG1hdGNoWzFdLCAxMClcblx0Y29uc3QgaXNJblJhbmdlID0gaG91ciA+PSAwICYmIGhvdXIgPD0gMjNcblx0cmV0dXJuIGlzSW5SYW5nZSA/IGhvdXIgOiBudWxsXG59XG5cbmNvbnN0IHJlYWRSb3dIb3VyID0gKHJvdzogSFRNTEVsZW1lbnQpOiBudW1iZXIgPT5cblx0TnVtYmVyLnBhcnNlSW50KHJvdy5nZXRBdHRyaWJ1dGUoJ2RhdGEtaG91cicpID8/ICcnLCAxMClcblxuY29uc3QgZmluZFRhcmdldFJvdyA9IChcblx0cm93czogSFRNTEVsZW1lbnRbXSxcblx0dGFyZ2V0SG91cjogbnVtYmVyXG4pOiBIVE1MRWxlbWVudCB8IG51bGwgPT4ge1xuXHRjb25zdCBmaXJzdFJvdyA9IHJvd3MuYXQoMClcblx0Y29uc3QgbGFzdFJvdyA9IHJvd3MuYXQoLTEpXG5cdGlmICghZmlyc3RSb3cgfHwgIWxhc3RSb3cpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cblx0aWYgKHRhcmdldEhvdXIgPD0gcmVhZFJvd0hvdXIoZmlyc3RSb3cpKSB7XG5cdFx0cmV0dXJuIGZpcnN0Um93XG5cdH1cblx0aWYgKHRhcmdldEhvdXIgPj0gcmVhZFJvd0hvdXIobGFzdFJvdykpIHtcblx0XHRyZXR1cm4gbGFzdFJvd1xuXHR9XG5cdHJldHVybiByb3dzLmZpbmQoKHJvdykgPT4gcmVhZFJvd0hvdXIocm93KSA9PT0gdGFyZ2V0SG91cikgPz8gbnVsbFxufVxuXG5jb25zdCBzY3JvbGxWaWV3cG9ydFRvUm93ID0gKFxuXHR2aWV3cG9ydDogSFRNTEVsZW1lbnQsXG5cdHRhcmdldFJvdzogSFRNTEVsZW1lbnQsXG5cdGZpcnN0Um93OiBIVE1MRWxlbWVudCxcblx0YXhpczogU2Nyb2xsVG9UaW1lQXhpc1xuKSA9PiB7XG5cdC8vIFVzZSB0aGUgZmlyc3Qgcm93IGFzIHRoZSByZWZlcmVuY2UgZm9yIFwic3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIHRpbWVcblx0Ly8gYXJlYS5cIiBJdCBuYXR1cmFsbHkgc2l0cyBwYXN0IGFueSBzdGlja3ktbGVmdCAob3Igc3RpY2t5LXRvcCkgaGVhZGVyXG5cdC8vIGxpa2UgdGhlIFJlc291cmNlcyBjb2x1bW4uIFNldHRpbmcgc2Nyb2xsTGVmdC9zY3JvbGxUb3AgdG8gdGhlIG9mZnNldFxuXHQvLyBmcm9tIGZpcnN0IHJvdyB0byB0YXJnZXQgcm93IGxhbmRzIHRoZSB0YXJnZXQgd2hlcmUgdGhlIGZpcnN0IHJvdyBzYXQsXG5cdC8vIGkuZS4gcmlnaHQgYXQgdGhlIHN0YXJ0IG9mIHRoZSB2aXNpYmxlIHRpbWUgYXJlYSBpbnN0ZWFkIG9mIGJlaGluZCB0aGVcblx0Ly8gc3RpY2t5IGNvbHVtbi5cblx0Y29uc3QgdGFyZ2V0UmVjdCA9IHRhcmdldFJvdy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuXHRjb25zdCBmaXJzdFJlY3QgPSBmaXJzdFJvdy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuXG5cdGlmIChheGlzID09PSAnaG9yaXpvbnRhbCcpIHtcblx0XHR2aWV3cG9ydC5zY3JvbGxUbyh7XG5cdFx0XHRsZWZ0OiB0YXJnZXRSZWN0LmxlZnQgLSBmaXJzdFJlY3QubGVmdCxcblx0XHRcdGJlaGF2aW9yOiAnYXV0bycsXG5cdFx0fSlcblx0XHRyZXR1cm5cblx0fVxuXG5cdHZpZXdwb3J0LnNjcm9sbFRvKHtcblx0XHR0b3A6IHRhcmdldFJlY3QudG9wIC0gZmlyc3RSZWN0LnRvcCxcblx0XHRiZWhhdmlvcjogJ2F1dG8nLFxuXHR9KVxufVxuXG5leHBvcnQgY29uc3QgdXNlU2Nyb2xsVG9UaW1lID0gKHtcblx0dmlld3BvcnRSZWYsXG5cdHNjcm9sbFRpbWUsXG5cdGVuYWJsZWQsXG5cdHNjcm9sbEtleSxcblx0YXhpcyA9ICd2ZXJ0aWNhbCcsXG59OiBVc2VTY3JvbGxUb1RpbWVPcHRpb25zKSA9PiB7XG5cdGNvbnN0IGxhc3RTY3JvbGxlZEtleVJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKCFlbmFibGVkIHx8ICFzY3JvbGxUaW1lKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0aWYgKGxhc3RTY3JvbGxlZEtleVJlZi5jdXJyZW50ID09PSBzY3JvbGxLZXkpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGNvbnN0IHRhcmdldEhvdXIgPSBwYXJzZUhvdXIoc2Nyb2xsVGltZSlcblx0XHRpZiAodGFyZ2V0SG91ciA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0Y29uc3Qgdmlld3BvcnQgPSB2aWV3cG9ydFJlZi5jdXJyZW50XG5cdFx0aWYgKCF2aWV3cG9ydCkge1xuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGNvbnN0IHJvd3MgPSBBcnJheS5mcm9tKFxuXHRcdFx0dmlld3BvcnQucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oSE9VUl9TRUxFQ1RPUilcblx0XHQpXG5cdFx0Y29uc3QgZmlyc3RSb3cgPSByb3dzLmF0KDApXG5cdFx0Y29uc3QgdGFyZ2V0Um93ID0gZmluZFRhcmdldFJvdyhyb3dzLCB0YXJnZXRIb3VyKVxuXHRcdGlmICghZmlyc3RSb3cgfHwgIXRhcmdldFJvdykge1xuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdHNjcm9sbFZpZXdwb3J0VG9Sb3codmlld3BvcnQsIHRhcmdldFJvdywgZmlyc3RSb3csIGF4aXMpXG5cdFx0bGFzdFNjcm9sbGVkS2V5UmVmLmN1cnJlbnQgPSBzY3JvbGxLZXlcblx0fSwgW2VuYWJsZWQsIHNjcm9sbFRpbWUsIHNjcm9sbEtleSwgdmlld3BvcnRSZWYsIGF4aXNdKVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuaW1wb3J0IHsgR3JpZENlbGwgfSBmcm9tICcuLi9ncmlkLWNlbGwnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWRFdmVudHNMYXllciB9IGZyb20gJy4vdmVydGljYWwtZ3JpZC1ldmVudHMtbGF5ZXInXG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVydGljYWxHcmlkQ29sUHJvcHMge1xuXHRpZDogc3RyaW5nXG5cdGRheT86IERheWpzXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRkYXlzOiBEYXlqc1tdIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHJlbmRlckhlYWRlcj86ICgpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRyZW5kZXJDZWxsPzogKGRhdGU6IERheWpzKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0bm9FdmVudHM/OiBib29sZWFuXG5cdC8qKlxuXHQgKiBHcmFudWxhcml0eSBvZiBlYWNoIGhvdXIgcm93IGluIG1pbnV0ZXMuIGA2MGAgcmVuZGVycyBvbmUgY2VsbCBwZXIgaG91ciB3aXRoXG5cdCAqIG5vIHN1Yi1ob3VyIGxpbmVzLiBgMzBgIHJlbmRlcnMgdHdvLiBgMTVgIHJlbmRlcnMgZm91ciB3aXRoIGRhc2hlZCBzZXBhcmF0b3JzLlxuXHQgKi9cblx0c2xvdER1cmF0aW9uTWludXRlcz86IG51bWJlclxuXHQvKiogV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNvbHVtbiBpbiB0aGUgZ3JpZCAqL1xuXHRpc0xhc3RDb2x1bW4/OiBib29sZWFuXG59XG5cbmNvbnN0IE5vTWVtb1ZlcnRpY2FsR3JpZENvbDogUmVhY3QuRkM8VmVydGljYWxHcmlkQ29sUHJvcHM+ID0gKHtcblx0aWQsXG5cdGRheXMsXG5cdHJlc291cmNlSWQsXG5cdHJlc291cmNlLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxuXHRncmlkVHlwZSxcblx0Y2xhc3NOYW1lLFxuXHRyZW5kZXJDZWxsLFxuXHRub0V2ZW50cyxcblx0c2xvdER1cmF0aW9uTWludXRlcyA9IDYwLFxuXHRpc0xhc3RDb2x1bW4sXG59KSA9PiB7XG5cdGNvbnN0IHNsb3RDb3VudCA9IE1hdGguZmxvb3IoNjAgLyBzbG90RHVyYXRpb25NaW51dGVzKVxuXHRjb25zdCBjZWxsT2Zmc2V0cyA9IEFycmF5LmZyb20oXG5cdFx0eyBsZW5ndGg6IHNsb3RDb3VudCB9LFxuXHRcdChfLCBpKSA9PiBpICogc2xvdER1cmF0aW9uTWludXRlc1xuXHQpXG5cdGNvbnN0IGhhc1N1YkhvdXJTbG90cyA9IGNlbGxPZmZzZXRzLmxlbmd0aCA+IDFcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBmbGV4LWNvbCBmbGV4LTEgaXRlbXMtY2VudGVyIG1pbi13LTIwIGp1c3RpZnktY2VudGVyIGJnLWJhY2tncm91bmQgcmVsYXRpdmUnLFxuXHRcdFx0XHRpc0xhc3RDb2x1bW4gPyAnYm9yZGVyLXItMCcgOiAnYm9yZGVyLXInLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZCB8fCBrZXlzLmNvbnRhaW5lci52ZXJ0aWNhbC5jb2woaWQpfVxuXHRcdD5cblx0XHRcdHsvKiBUaW1lIHNsb3RzICovfVxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsIHJlbGF0aXZlIGdyaWRcIlxuXHRcdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRcdGdyaWRUZW1wbGF0ZVJvd3M6IGByZXBlYXQoJHtkYXlzLmxlbmd0aH0sIG1pbm1heCgwLCAxZnIpKWAsXG5cdFx0XHRcdH19XG5cdFx0XHQ+XG5cdFx0XHRcdHtkYXlzLm1hcCgoZGF5LCBkYXlJbmRleCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGhvdXJTdHIgPSBkYXkuZm9ybWF0KCdISCcpXG5cblx0XHRcdFx0XHRpZiAocmVuZGVyQ2VsbCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgaXNUaW1lR3V0dGVyID0gaWQgPT09IGtleXMuY29sLnRpbWVcblx0XHRcdFx0XHRcdGNvbnN0IHRlc3RJZCA9IGlzVGltZUd1dHRlclxuXHRcdFx0XHRcdFx0XHQ/IGtleXMuY2VsbC52ZXJ0aWNhbFRpbWUoaG91clN0cilcblx0XHRcdFx0XHRcdFx0OiBrZXlzLmNlbGwudmVydGljYWwoZGF5LCBob3VyU3RyLCAnMDAnLCByZXNvdXJjZUlkKVxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm1pbi1oLVs2MHB4XSBib3JkZXItYiBib3JkZXItclwiXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS1ob3VyPXtpc1RpbWVHdXR0ZXIgPyBob3VyU3RyIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXt0ZXN0SWR9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoaWQsIGRheUluZGV4LCBob3VyU3RyKX1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHtyZW5kZXJDZWxsKGRheSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgbWluLWgtWzYwcHhdXCJcblx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoaWQsIGRheUluZGV4LCBob3VyU3RyKX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e2NlbGxPZmZzZXRzLm1hcCgobWludXRlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbW0gPSBTdHJpbmcobWludXRlKS5wYWRTdGFydCgyLCAnMCcpXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgdGVzdElkID0ga2V5cy5jZWxsLnZlcnRpY2FsKGRheSwgaG91clN0ciwgbW0sIHJlc291cmNlSWQpXG5cblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PEdyaWRDZWxsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2hvdmVyOmJnLWFjY2VudCByZWxhdGl2ZSB6LTEwIGZsZXgtMSBtaW4taC0wIGN1cnNvci1wb2ludGVyIGJvcmRlci1iIGJvcmRlci1yLTAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGhhc1N1YkhvdXJTbG90cyAmJiAnYm9yZGVyLWRhc2hlZCdcblx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e3Rlc3RJZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF5PXtoYXNTdWJIb3VyU2xvdHMgPyBkYXkubWludXRlKG1pbnV0ZSkgOiBkYXl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aG91cj17ZGF5LmhvdXIoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoaWQsIGRheUluZGV4LCBtbSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1pbnV0ZT17aGFzU3ViSG91clNsb3RzID8gbWludXRlIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZUlkfSAvLyBFdmVudHMgYXJlIHJlbmRlcmVkIGluIGEgc2VwYXJhdGUgbGF5ZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvdWxkUmVuZGVyRXZlbnRzPXtmYWxzZX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHR9KX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSl9XG5cblx0XHRcdFx0ey8qIEV2ZW50IGJsb2NrcyBsYXllciAqL31cblx0XHRcdFx0eyFub0V2ZW50cyAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuXHRcdFx0XHRcdFx0PFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmNvbnRhaW5lci5ldmVudHNMYXllcigndmVydGljYWwnLCBpZCl9XG5cdFx0XHRcdFx0XHRcdGRheXM9e2RheXN9XG5cdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZUlkfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0KX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBWZXJ0aWNhbEdyaWRDb2wgPSBtZW1vKFxuXHROb01lbW9WZXJ0aWNhbEdyaWRDb2xcbikgYXMgdHlwZW9mIE5vTWVtb1ZlcnRpY2FsR3JpZENvbFxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDdXJyZW50VGltZUluZGljYXRvciB9IGZyb20gJ0AvY29tcG9uZW50cy9jdXJyZW50LXRpbWUtaW5kaWNhdG9yJ1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7IHVzZVByb2Nlc3NlZERheUV2ZW50cyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvaG9va3MvdXNlUHJvY2Vzc2VkRGF5RXZlbnRzJ1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmludGVyZmFjZSBWZXJ0aWNhbEdyaWRFdmVudHNMYXllclByb3BzIHtcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRkYXlzOiBEYXlqc1tdIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBsYXllciByZXByZXNlbnRzXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG59XG5cbmNvbnN0IE5vTWVtb1ZlcnRpY2FsR3JpZEV2ZW50c0xheWVyOiBSZWFjdC5GQzxWZXJ0aWNhbEdyaWRFdmVudHNMYXllclByb3BzPiA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2hvdXInLFxuXHRyZXNvdXJjZUlkLFxuXHRyZXNvdXJjZSxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcbn0pID0+IHtcblx0Y29uc3QgdG9kYXlFdmVudHMgPSB1c2VQcm9jZXNzZWREYXlFdmVudHMoeyBkYXlzLCBncmlkVHlwZSwgcmVzb3VyY2VJZCB9KVxuXHRjb25zdCByYW5nZVN0YXJ0ID0gZGF5cy5hdCgwKVxuXHRjb25zdCByYW5nZUVuZCA9IGRheXMuYXQoLTEpPy5hZGQoMSwgZ3JpZFR5cGUpXG5cdC8vIE9ubHkgc2hvdyB0aGUgXCJub3dcIiBsaW5lIGluIGhvdXItcmVzb2x1dGlvbiBncmlkcy4gSW4gZGF5LXJlc29sdXRpb25cblx0Ly8gdmVydGljYWwgdmlld3MgKHJlc291cmNlIG1vbnRoLCByZXNvdXJjZSB3ZWVrIGRhaWx5KSBhIHN1Yi1kYXkgcGVyY2VudGFnZVxuXHQvLyBsaW5lIGlzIG1lYW5pbmdsZXNzLCBzbyBzdXBwcmVzcyBpdCDigJQgbWlycm9ycyB0aGUgaG9yaXpvbnRhbCBldmVudHMgbGF5ZXIuXG5cdGNvbnN0IHNob3dOb3dMaW5lID0gZ3JpZFR5cGUgPT09ICdob3VyJyAmJiBCb29sZWFuKHJhbmdlU3RhcnQgJiYgcmFuZ2VFbmQpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHBvaW50ZXItZXZlbnRzLW5vbmUgei0xMCBvdmVyZmxvdy1jbGlwXCJcblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkfVxuXHRcdD5cblx0XHRcdHtzaG93Tm93TGluZSAmJiByYW5nZVN0YXJ0ICYmIHJhbmdlRW5kICYmIChcblx0XHRcdFx0PEN1cnJlbnRUaW1lSW5kaWNhdG9yXG5cdFx0XHRcdFx0cmFuZ2VFbmQ9e3JhbmdlRW5kfVxuXHRcdFx0XHRcdHJhbmdlU3RhcnQ9e3JhbmdlU3RhcnR9XG5cdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHQvPlxuXHRcdFx0KX1cblx0XHRcdHt0b2RheUV2ZW50cy5tYXAoKGV2ZW50LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBldmVudEtleSA9IGBldmVudC0ke2V2ZW50LmlkfS0ke2luZGV4fS0ke2RheXMuYXQoMCk/LnRvSVNPU3RyaW5nKCl9LSR7cmVzb3VyY2VJZCA/PyAnbm8tcmVzb3VyY2UnfWBcblx0XHRcdFx0Y29uc3QgaXNTaG9ydEV2ZW50ID0gZXZlbnQuZW5kLmRpZmYoZXZlbnQuc3RhcnQsICdtaW51dGUnKSA8PSAxNVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGVcIlxuXHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoZXZlbnRLZXksICd3cmFwcGVyJyl9XG5cdFx0XHRcdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRcdFx0XHRsZWZ0OiBgJHtldmVudC5sZWZ0fSVgLFxuXHRcdFx0XHRcdFx0XHR3aWR0aDogYGNhbGMoJHtldmVudC53aWR0aH0lIC0gdmFyKC0tc3BhY2luZykgKiAyKWAsXG5cdFx0XHRcdFx0XHRcdHRvcDogYCR7ZXZlbnQudG9wfSVgLFxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IGAke2V2ZW50LmhlaWdodH0lYCxcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PERyYWdnYWJsZUV2ZW50XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ3BvaW50ZXItZXZlbnRzLWF1dG8nLCB7XG5cdFx0XHRcdFx0XHRcdFx0J1smX3BdOnRleHQtWzEwcHhdIFsmX3BdOm10LTAnOiBpc1Nob3J0RXZlbnQsXG5cdFx0XHRcdFx0XHRcdH0pfVxuXHRcdFx0XHRcdFx0XHRlbGVtZW50SWQ9e2V2ZW50S2V5fVxuXHRcdFx0XHRcdFx0XHRldmVudD17ZXZlbnR9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgVmVydGljYWxHcmlkRXZlbnRzTGF5ZXIgPSBtZW1vKE5vTWVtb1ZlcnRpY2FsR3JpZEV2ZW50c0xheWVyKVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBmaWx0ZXJFdmVudHNCeVJlc291cmNlIH0gZnJvbSAnQC9saWIvdXRpbHMvZXZlbnQtdXRpbHMnXG5pbXBvcnQge1xuXHRnZXRQb3NpdGlvbmVkRGF5RXZlbnRzLFxuXHR0eXBlIFBvc2l0aW9uZWRFdmVudCxcbn0gZnJvbSAnQC9saWIvdXRpbHMvcG9zaXRpb24tZGF5LWV2ZW50cydcblxuaW50ZXJmYWNlIFVzZVByb2Nlc3NlZERheUV2ZW50c1Byb3BzIHtcblx0ZGF5czogRGF5anNbXSAvLyBUaGUgc3BlY2lmaWMgZGF5IHRoaXMgY29sdW1uIHJlcHJlc2VudHNcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9jZXNzZWREYXlFdmVudHMgPSAoe1xuXHRkYXlzLFxuXHRncmlkVHlwZSxcblx0cmVzb3VyY2VJZCxcbn06IFVzZVByb2Nlc3NlZERheUV2ZW50c1Byb3BzKSA9PiB7XG5cdGNvbnN0IHsgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCBnZXRFdmVudHNGb3JSZXNvdXJjZSB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGZpcnN0ID0gZGF5cy5hdCgwKVxuXHRjb25zdCBsYXN0ID0gZGF5cy5hdCgtMSlcblx0Y29uc3QgZGF5U3RhcnQgPSBmaXJzdD8uc3RhcnRPZignZGF5Jylcblx0Y29uc3QgZGF5RW5kID0gbGFzdD8uZW5kT2YoJ2RheScpXG5cblx0Y29uc3QgZXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKCFkYXlTdGFydCB8fCAhZGF5RW5kKSByZXR1cm4gW11cblxuXHRcdGxldCBkYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoZGF5U3RhcnQsIGRheUVuZClcblx0XHRpZiAocmVzb3VyY2VJZCkge1xuXHRcdFx0ZGF5RXZlbnRzID0gZmlsdGVyRXZlbnRzQnlSZXNvdXJjZShcblx0XHRcdFx0ZGF5RXZlbnRzLFxuXHRcdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZShyZXNvdXJjZUlkKVxuXHRcdFx0KVxuXHRcdH1cblxuXHRcdC8vIFZlcnRpY2FsIGdyaWRzIChEYXkvV2Vlay9SZXNvdXJjZSBWZXJ0aWNhbCkgbmV2ZXIgcmVuZGVyIGFsbC1kYXkgZXZlbnRzXG5cdFx0Ly8gYXMgdGhvc2UgYXJlIGhhbmRsZWQgYnkgdGhlIGFsbC1kYXktcm93IG9yIGFyZSBub3QgYXBwcm9wcmlhdGUgZm9yIHRoZSB0aW1lIGdyaWQuXG5cdFx0cmV0dXJuIGRheUV2ZW50cy5maWx0ZXIoKGUpID0+ICFlLmFsbERheSlcblx0fSwgW1xuXHRcdGRheVN0YXJ0LFxuXHRcdGRheUVuZCxcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XSlcblxuXHRjb25zdCB0b2RheUV2ZW50cyA9IHVzZU1lbW88UG9zaXRpb25lZEV2ZW50W10+KCgpID0+IHtcblx0XHRyZXR1cm4gZ2V0UG9zaXRpb25lZERheUV2ZW50cyh7XG5cdFx0XHRkYXlzLFxuXHRcdFx0ZXZlbnRzLFxuXHRcdFx0Z3JpZFR5cGUsXG5cdFx0fSlcblx0fSwgW2RheXMsIGdyaWRUeXBlLCBldmVudHNdKVxuXG5cdHJldHVybiB0b2RheUV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBvc2l0aW9uZWRFdmVudCBleHRlbmRzIENhbGVuZGFyRXZlbnQge1xuXHRsZWZ0OiBudW1iZXIgLy8gTGVmdCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdHdpZHRoOiBudW1iZXIgLy8gV2lkdGggaW4gcGVyY2VudGFnZVxuXHR0b3A6IG51bWJlciAvLyBUb3AgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuXHRoZWlnaHQ6IG51bWJlciAvLyBIZWlnaHQgaW4gcGVyY2VudGFnZVxuXHR6SW5kZXg/OiBudW1iZXIgLy8gWi1pbmRleCBmb3IgbGF5ZXJpbmcgb3ZlcmxhcHBpbmcgZXZlbnRzXG59XG5cbmludGVyZmFjZSBHZXRQb3NpdGlvbmVkRGF5RXZlbnRzUGFyYW1zIHtcblx0ZGF5czogRGF5anNbXVxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInIHwgJ21pbnV0ZSdcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbn1cblxuZXhwb3J0IGNvbnN0IGdldFBvc2l0aW9uZWREYXlFdmVudHMgPSAoe1xuXHRkYXlzLFxuXHRncmlkVHlwZSA9ICdob3VyJyxcblx0ZXZlbnRzLFxufTogR2V0UG9zaXRpb25lZERheUV2ZW50c1BhcmFtcyk6IFBvc2l0aW9uZWRFdmVudFtdID0+IHtcblx0Ly8gRmlsdGVyIG91dCBhbGwtZGF5IGV2ZW50cyBhbmQgc29ydCBieSBzdGFydCB0aW1lXG5cdGNvbnN0IHNvcnRlZEV2ZW50cyA9IGV2ZW50c1xuXHRcdC5maWx0ZXIoKGUpID0+ICFlLmFsbERheSlcblx0XHQudG9Tb3J0ZWQoKGEsIGIpID0+IGEuc3RhcnQuZGlmZihiLnN0YXJ0KSlcblxuXHRpZiAoc29ydGVkRXZlbnRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBbXVxuXHR9XG5cblx0Ly8gRGV0ZXJtaW5lIGdyaWQgYm91bmRhcmllcyBhbmQgbWV0cmljc1xuXHQvLyBVc2UgZXhwbGljaXQgc3RhcnRPZiB0byBlbnN1cmUgd2UgYXJlIGFuY2hvcmVkIHRvIHRoZSBncmlkIHVuaXQgYm91bmRhcmllc1xuXHQvLyBUaGlzIHByZXZlbnRzIG9mZnNldHMgaWYgdGhlIGdyaWQgZGF5cyBhcmUgbm90IG5vcm1hbGl6ZWRcblx0Y29uc3QgZ3JpZFN0YXJ0ID0gZGF5cy5hdCgwKSB8fCBkYXlqcygpXG5cdGNvbnN0IHRvdGFsVW5pdHMgPSBkYXlzLmxlbmd0aFxuXHRjb25zdCBpc0Rpc2NyZXRlID0gZ3JpZFR5cGUgPT09ICdkYXknXG5cblx0Ly8gU3RlcCAxOiBHcm91cCBldmVudHMgaW50byBjbHVzdGVycyBvZiBvdmVybGFwcGluZyBldmVudHNcblx0Y29uc3QgY2x1c3RlcnM6IENhbGVuZGFyRXZlbnRbXVtdID0gW11cblx0bGV0IGN1cnJlbnRDbHVzdGVyOiBDYWxlbmRhckV2ZW50W10gPSBbXVxuXHRsZXQgbGFzdEV2ZW50RW5kOiBEYXlqcyB8IG51bGwgPSBudWxsXG5cdGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkRXZlbnRzKSB7XG5cdFx0aWYgKGxhc3RFdmVudEVuZCAmJiBldmVudC5zdGFydC5pc1NhbWVPckFmdGVyKGxhc3RFdmVudEVuZCkpIHtcblx0XHRcdGlmIChjdXJyZW50Q2x1c3Rlci5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNsdXN0ZXJzLnB1c2goY3VycmVudENsdXN0ZXIpXG5cdFx0XHR9XG5cdFx0XHRjdXJyZW50Q2x1c3RlciA9IFtdXG5cdFx0fVxuXHRcdGN1cnJlbnRDbHVzdGVyLnB1c2goZXZlbnQpXG5cdFx0bGFzdEV2ZW50RW5kID0gbGFzdEV2ZW50RW5kID8gZGF5anMubWF4KGxhc3RFdmVudEVuZCwgZXZlbnQuZW5kKSA6IGV2ZW50LmVuZFxuXHR9XG5cdGlmIChjdXJyZW50Q2x1c3Rlci5sZW5ndGggPiAwKSB7XG5cdFx0Y2x1c3RlcnMucHVzaChjdXJyZW50Q2x1c3Rlcilcblx0fVxuXG5cdC8vIENvbXB1dGUgdG9wL2hlaWdodCBwZXJjZW50YWdlcyBmb3IgYW4gZXZlbnQsIGNsYW1wZWQgdG8gZ3JpZDsgbnVsbCBpZiBvdXRzaWRlLlxuXHRjb25zdCBjb21wdXRlVG9wSGVpZ2h0ID0gKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdCk6IHsgdG9wOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0gfCBudWxsID0+IHtcblx0XHRsZXQgc3RhcnRUaW1lID0gZXZlbnQuc3RhcnQuZGlmZihncmlkU3RhcnQsIGdyaWRUeXBlLCB0cnVlKVxuXHRcdGxldCBlbmRUaW1lID0gZXZlbnQuZW5kLmRpZmYoZ3JpZFN0YXJ0LCBncmlkVHlwZSwgdHJ1ZSlcblx0XHRpZiAoaXNEaXNjcmV0ZSkge1xuXHRcdFx0c3RhcnRUaW1lID0gTWF0aC5mbG9vcihzdGFydFRpbWUpXG5cdFx0XHRlbmRUaW1lID0gTWF0aC5jZWlsKGVuZFRpbWUpXG5cdFx0XHRpZiAoZW5kVGltZSA8PSBzdGFydFRpbWUpIGVuZFRpbWUgPSBzdGFydFRpbWUgKyAxXG5cdFx0fVxuXHRcdGlmIChzdGFydFRpbWUgPCAwKSBzdGFydFRpbWUgPSAwXG5cdFx0aWYgKGVuZFRpbWUgPiB0b3RhbFVuaXRzKSBlbmRUaW1lID0gdG90YWxVbml0c1xuXHRcdGNvbnN0IGR1cmF0aW9uID0gTWF0aC5tYXgoMCwgZW5kVGltZSAtIHN0YXJ0VGltZSlcblx0XHRpZiAoZHVyYXRpb24gPT09IDApIHJldHVybiBudWxsXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogKHN0YXJ0VGltZSAvIHRvdGFsVW5pdHMpICogMTAwLFxuXHRcdFx0aGVpZ2h0OiAoZHVyYXRpb24gLyB0b3RhbFVuaXRzKSAqIDEwMCxcblx0XHR9XG5cdH1cblxuXHQvLyBNYXggY2x1c3RlciBvZmZzZXQgYnkgZXZlbnQgY291bnQgKDIgZXZlbnRzIOKGkiAyNSUsIGV0Yy4pXG5cdGNvbnN0IG1heE9mZnNldEJ5Q291bnQgPSAobjogbnVtYmVyKSA9PlxuXHRcdG4gPT09IDIgPyAyNSA6IG4gPT09IDMgPyA1MCA6IG4gPT09IDQgPyA2MCA6IDcwXG5cblx0Ly8gU3RlcCAyOiBGb3IgZWFjaCBjbHVzdGVyLCBjb21wdXRlIHBvc2l0aW9uc1xuXHRjb25zdCBwcm9jZXNzZWRFdmVudHM6IFBvc2l0aW9uZWRFdmVudFtdID0gW11cblx0Zm9yIChjb25zdCBjbHVzdGVyIG9mIGNsdXN0ZXJzKSB7XG5cdFx0aWYgKGNsdXN0ZXIubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRjb25zdCBldmVudCA9IGNsdXN0ZXJbMF1cblx0XHRcdGNvbnN0IHBvcyA9IGNvbXB1dGVUb3BIZWlnaHQoZXZlbnQpXG5cdFx0XHRpZiAoIXBvcykgY29udGludWVcblx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHsgLi4uZXZlbnQsIGxlZnQ6IDAsIHdpZHRoOiAxMDAsIC4uLnBvcyB9KVxuXHRcdFx0Y29udGludWVcblx0XHR9XG5cblx0XHQvLyBNdWx0aXBsZSBldmVudHMg4oCUIGxheWVyZWQgcG9zaXRpb25pbmcuIExvbmdlc3QgZHVyYXRpb24gZmlyc3QsIHRpZS1icmVha1xuXHRcdC8vIGJ5IGVhcmxpZXN0IHN0YXJ0LlxuXHRcdGNvbnN0IHNvcnRlZENsdXN0ZXIgPSBbLi4uY2x1c3Rlcl0uc29ydCgoYSwgYikgPT4ge1xuXHRcdFx0Y29uc3QgZHVyRGlmZiA9XG5cdFx0XHRcdGIuZW5kLmRpZmYoYi5zdGFydCwgJ21pbnV0ZScpIC0gYS5lbmQuZGlmZihhLnN0YXJ0LCAnbWludXRlJylcblx0XHRcdHJldHVybiBkdXJEaWZmICE9PSAwID8gZHVyRGlmZiA6IGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuXHRcdH0pXG5cblx0XHRjb25zdCBuID0gc29ydGVkQ2x1c3Rlci5sZW5ndGhcblx0XHRjb25zdCBvZmZzZXRQZXJFdmVudCA9IG4gPiAxID8gbWF4T2Zmc2V0QnlDb3VudChuKSAvIChuIC0gMSkgOiAwXG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuXHRcdFx0Y29uc3QgZXZlbnQgPSBzb3J0ZWRDbHVzdGVyW2ldXG5cdFx0XHRjb25zdCBwb3MgPSBjb21wdXRlVG9wSGVpZ2h0KGV2ZW50KVxuXHRcdFx0aWYgKCFwb3MpIGNvbnRpbnVlXG5cdFx0XHQvLyBGaXJzdCBldmVudCAobG9uZ2VzdCkgdGFrZXMgZnVsbCB3aWR0aDsgbGF0ZXIgZXZlbnRzIGFyZSBvZmZzZXQuXG5cdFx0XHRjb25zdCBsZWZ0ID0gaSA9PT0gMCA/IDAgOiBvZmZzZXRQZXJFdmVudCAqIGlcblx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcblx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdC4uLnBvcyxcblx0XHRcdFx0bGVmdCxcblx0XHRcdFx0d2lkdGg6IDEwMCAtIGxlZnQsXG5cdFx0XHRcdHpJbmRleDogaSArIDEsXG5cdFx0XHR9KVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBwcm9jZXNzZWRFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHMge1xuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc2VzPzogeyBoZWFkZXI/OiBzdHJpbmc7IGFsbERheT86IHN0cmluZyB9XG5cdGFsbERheVJvdz86IFJlYWN0LlJlYWN0Tm9kZVxuXHRleHBhbmRBbGxEYXlSb3c/OiBib29sZWFuXG59XG5cbmNvbnN0IE5vTWVtb1ZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lcjogUmVhY3QuRkM8XG5cdFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lclByb3BzXG4+ID0gKHsgY2hpbGRyZW4sIGNsYXNzZXMsIGFsbERheVJvdywgZXhwYW5kQWxsRGF5Um93ID0gZmFsc2UgfSkgPT4ge1xuXHRjb25zdCB7IHN0aWNreVZpZXdIZWFkZXIsIHZpZXdIZWFkZXJDbGFzc05hbWUgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KFxuXHRcdChzdGF0ZSkgPT4gKHtcblx0XHRcdHN0aWNreVZpZXdIZWFkZXI6IHN0YXRlLnN0aWNreVZpZXdIZWFkZXIsXG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lOiBzdGF0ZS52aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdH0pXG5cdClcblx0Y29uc3QgVG90YWxXaWR0aENsYXNzID0gJ21pbi13LWZ1bGwgdy1maXQnXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0ZXhwYW5kQWxsRGF5Um93ICYmICdmbGV4IGgtZnVsbCBmbGV4LWNvbCcsXG5cdFx0XHRcdHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIxIGJnLWJhY2tncm91bmQnLCAvLyBaLWluZGV4IGFib3ZlIHRoZSBsZWZ0IHN0aWNreSByZXNvdXJjZSBjb2x1bW5cblx0XHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2gtMTIgYm9yZGVyLWInLCBUb3RhbFdpZHRoQ2xhc3MsIGNsYXNzZXM/LmhlYWRlcil9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1oZWFkZXJcIlxuXHRcdFx0PlxuXHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdHsvKiBBbGwtZGF5IHJvdyAqL31cblx0XHRcdHthbGxEYXlSb3cgJiYgKFxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdmbGV4IG1pbi1oLTEyJyxcblx0XHRcdFx0XHRcdFRvdGFsV2lkdGhDbGFzcyxcblx0XHRcdFx0XHRcdGV4cGFuZEFsbERheVJvdyAmJiAnZmxleC0xIG92ZXJmbG93LWhpZGRlbicsXG5cdFx0XHRcdFx0XHRjbGFzc2VzPy5hbGxEYXlcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1hbGwtZGF5XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHthbGxEYXlSb3d9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyID0gbWVtbyhcblx0Tm9NZW1vVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyXG4pXG4iLAogICAgImltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGdldERheUhvdXJzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IGNhbGN1bGF0ZUJ1c2luZXNzSG91cnNSYW5nZSB9IGZyb20gJy4vYnVzaW5lc3MtaG91cnMnXG5cbmludGVyZmFjZSBHZXRWaWV3SG91cnNPcHRpb25zIHtcblx0cmVmZXJlbmNlRGF0ZTogRGF5anNcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG5cdC8qKlxuXHQgKiBGb3Igdmlld3Mgd2l0aCBtdWx0aXBsZSBkYXlzIChsaWtlIFdlZWtWaWV3KSwgd2UgbWlnaHQgd2FudCB0byBzaG93XG5cdCAqIHRoZSB1bmlvbiBvZiBhbGwgYnVzaW5lc3MgaG91cnMgYWNyb3NzIHRob3NlIGRheXMuXG5cdCAqL1xuXHRhbGxEYXRlcz86IERheWpzW11cblx0LyoqXG5cdCAqIE9wdGlvbmFsIGFkZGl0aW9uYWwgYnVzaW5lc3MgaG91cnMgY29uZmlndXJhdGlvbnMgKGUuZy4sIGZyb20gcmVzb3VyY2VzKS5cblx0ICogVGhlc2Ugd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGUgZ2xvYmFsIGJ1c2luZXNzSG91cnMgd2hlbiBjYWxjdWxhdGluZyB0aGUgdmlzaWJsZSByYW5nZS5cblx0ICovXG5cdHJlc291cmNlQnVzaW5lc3NIb3Vycz86IChCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdKVtdXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBsaXN0IG9mIGhvdXJzIHRvIGRpc3BsYXkgaW4gdGhlIGNhbGVuZGFyIHZpZXcuXG4gKiBJZiBoaWRlTm9uQnVzaW5lc3NIb3VycyBpcyB0cnVlLCBpdCBmaWx0ZXJzIHRoZSBob3VycyBiYXNlZCBvbiBidXNpbmVzc0hvdXJzIGNvbmZpZ3VyYXRpb24uXG4gKiBGb3IgbXVsdGlwbGUgZGF0ZXMsIGl0IHRha2VzIHRoZSBlYXJsaWVzdCBzdGFydCBhbmQgbGF0ZXN0IGVuZCBhY3Jvc3MgYWxsIGRhdGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0hvdXJzKHtcblx0cmVmZXJlbmNlRGF0ZSxcblx0YnVzaW5lc3NIb3Vycyxcblx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdGFsbERhdGVzID0gW3JlZmVyZW5jZURhdGVdLFxuXHRyZXNvdXJjZUJ1c2luZXNzSG91cnMgPSBbXSxcbn06IEdldFZpZXdIb3Vyc09wdGlvbnMpOiBEYXlqc1tdIHtcblx0Y29uc3QgaG91cnMgPSBnZXREYXlIb3Vycyh7IHJlZmVyZW5jZURhdGUgfSlcblxuXHRjb25zdCBoYXNCdXNpbmVzc0hvdXJzQ29uZmlnID1cblx0XHQhIWJ1c2luZXNzSG91cnMgfHwgcmVzb3VyY2VCdXNpbmVzc0hvdXJzLmxlbmd0aCA+IDBcblx0Y29uc3Qgc2hvdWxkRmlsdGVyQnlCdXNpbmVzc0hvdXJzID1cblx0XHRoaWRlTm9uQnVzaW5lc3NIb3VycyAmJiBoYXNCdXNpbmVzc0hvdXJzQ29uZmlnXG5cblx0aWYgKCFzaG91bGRGaWx0ZXJCeUJ1c2luZXNzSG91cnMpIHJldHVybiBob3Vyc1xuXG5cdGNvbnN0IHsgbWluU3RhcnQsIG1heEVuZCwgaGFzQnVzaW5lc3NIb3VycyB9ID0gY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlKHtcblx0XHRhbGxEYXRlcyxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0fSlcblxuXHRpZiAoIWhhc0J1c2luZXNzSG91cnMpIHJldHVybiBob3Vyc1xuXG5cdGlmIChtaW5TdGFydCA+PSBtYXhFbmQpIHJldHVybiBbXVxuXG5cdHJldHVybiBob3Vycy5maWx0ZXIoKGgpID0+IHtcblx0XHRjb25zdCBob3VyID0gaC5ob3VyKClcblx0XHRyZXR1cm4gaG91ciA+PSBtaW5TdGFydCAmJiBob3VyIDwgbWF4RW5kXG5cdH0pXG59XG4iLAogICAgImltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBIb3VyTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvaG91ci1sYWJlbC9ob3VyLWxhYmVsJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXREYXlLZXksIGlzVG9kYXkgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmV4cG9ydCBjb25zdCBEYXlWaWV3ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB0LCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3Vycywgc2xvdER1cmF0aW9uIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgdG9kYXkgPSBpc1RvZGF5KGN1cnJlbnREYXRlKVxuXHRjb25zdCBob3VycyA9IGdldFZpZXdIb3Vycyh7XG5cdFx0cmVmZXJlbmNlRGF0ZTogY3VycmVudERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRhbGxEYXRlczogW2N1cnJlbnREYXRlXSxcblx0fSlcblxuXHRjb25zdCBmaXJzdENvbCA9IHtcblx0XHRpZDoga2V5cy5jb2wudGltZSxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRkYXlzOiBob3Vycyxcblx0XHRjbGFzc05hbWU6XG5cdFx0XHQnc2hyaW5rLTAgdy0xNiBtaW4tdy0xNiBtYXgtdy0xNiBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCBib3JkZXItci0wJyxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBEYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHQ8SG91ckxhYmVsIGRhdGU9e2RhdGV9IC8+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHtcblx0XHRpZDoga2V5cy5jb2wuZGF5KGN1cnJlbnREYXRlKSxcblx0XHRkYXk6IGN1cnJlbnREYXRlLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGNsYXNzTmFtZTogJ3ctW2NhbGMoMTAwJS00cmVtKV0gZmxleC0xJyxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8VmVydGljYWxHcmlkXG5cdFx0XHRhbGxEYXlSb3c9ezxBbGxEYXlSb3cgZGF5cz17W2N1cnJlbnREYXRlXX0gLz59XG5cdFx0XHRjbGFzc2VzPXt7XG5cdFx0XHRcdGhlYWRlcjogJ3ctZnVsbCcsXG5cdFx0XHRcdGJvZHk6ICd3LWZ1bGwnLFxuXHRcdFx0XHRhbGxEYXk6ICd3LWZ1bGwnLFxuXHRcdFx0fX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgY29sdW1uc119XG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdFx0c2xvdER1cmF0aW9uTWludXRlcz17c2xvdER1cmF0aW9ufVxuXHRcdFx0dmFyaWFudD1cInJlZ3VsYXJcIlxuXHRcdD5cblx0XHRcdHsvKiBIZWFkZXIgKi99XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17J2ZsZXggZmxleC0xIGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBtaW4taC0xMid9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwiZGF5LXZpZXctaGVhZGVyXCJcblx0XHRcdD5cblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXIgdGV4dC1zbSBmb250LXNlbWlib2xkIHNtOnRleHQteGwnLFxuXHRcdFx0XHRcdFx0dG9kYXkgJiYgJ3RleHQtcHJpbWFyeSdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2dldERheUtleShjdXJyZW50RGF0ZSl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7Y3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCBMTCcpfVxuXHRcdFx0XHRcdHt0b2RheSAmJiAoXG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIG1sLTIgcm91bmRlZC1mdWxsIHB4LTEgcHktMC41IHRleHQteHMgc206cHgtMiBzbTp0ZXh0LXNtXCI+XG5cdFx0XHRcdFx0XHRcdHt0KCd0b2RheScpfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgZ2V0TW9udGhXZWVrcyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB7IE1vbnRoSGVhZGVyIH0gZnJvbSAnLi9tb250aC1oZWFkZXInXG5pbXBvcnQgdHlwZSB7IE1vbnRoVmlld1Byb3BzIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGNvbnN0IE1vbnRoVmlldzogUmVhY3QuRkM8TW9udGhWaWV3UHJvcHM+ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHdlZWtzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRNb250aFdlZWtzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IHJvd3MgPSB3ZWVrcy5tYXAoKGRheXMsIHdlZWtJbmRleCkgPT4gKHtcblx0XHRpZDoga2V5cy5saXN0S2V5KCd3ZWVrJywgd2Vla0luZGV4KSxcblx0XHRjb2x1bW5zOiBkYXlzLm1hcCgoZGF5KSA9PiAoe1xuXHRcdFx0aWQ6IGtleXMuY29sLmRheShkYXkpLFxuXHRcdFx0ZGF5LFxuXHRcdFx0Y2xhc3NOYW1lOiAndy1hdXRvJyxcblx0XHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0XHR9KSksXG5cdFx0Y2xhc3NOYW1lOiAnZmxleC0xJyxcblx0XHRzaG93RGF5TnVtYmVyOiB0cnVlLFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxIb3Jpem9udGFsR3JpZFxuXHRcdFx0Y2xhc3Nlcz17eyBib2R5OiAndy1mdWxsJywgaGVhZGVyOiAndy1mdWxsJyB9fVxuXHRcdFx0cm93cz17cm93c31cblx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHQ+XG5cdFx0XHQ8TW9udGhIZWFkZXIgY2xhc3NOYW1lPVwiaC0xMlwiIC8+XG5cdFx0PC9Ib3Jpem9udGFsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgdXNlU2Nyb2xsVG9UaW1lIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdXNlLXNjcm9sbC10by10aW1lJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyIH0gZnJvbSAnLi9ob3Jpem9udGFsLWdyaWQtaGVhZGVyLWNvbnRhaW5lcidcbmltcG9ydCB7XG5cdEhvcml6b250YWxHcmlkUm93LFxuXHR0eXBlIEhvcml6b250YWxHcmlkUm93UHJvcHMsXG59IGZyb20gJy4vaG9yaXpvbnRhbC1ncmlkLXJvdydcblxuaW50ZXJmYWNlIEhvcml6b250YWxHcmlkUHJvcHMge1xuXHRyb3dzOiBIb3Jpem9udGFsR3JpZFJvd1Byb3BzW11cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBib2R5Pzogc3RyaW5nIH1cblx0YWxsRGF5PzogYm9vbGVhblxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHZhcmlhbnQ/OiAncmVndWxhcicgfCAncmVzb3VyY2UnXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWQ6IFJlYWN0LkZDPEhvcml6b250YWxHcmlkUHJvcHM+ID0gKHtcblx0cm93cyxcblx0Y2hpbGRyZW4sXG5cdGNsYXNzZXMsXG5cdGFsbERheTogdG9wTGV2ZWxBbGxEYXksXG5cdGdyaWRUeXBlLFxuXHR2YXJpYW50ID0gJ3Jlc291cmNlJyxcblx0ZGF5TnVtYmVySGVpZ2h0LFxufSkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB2aWV3LCBzY3JvbGxUaW1lIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IHZpZXdwb3J0UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbClcblxuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSB2YXJpYW50ID09PSAncmVzb3VyY2UnXG5cdGNvbnN0IGlzUmVndWxhckNhbGVuZGFyID0gIWlzUmVzb3VyY2VDYWxlbmRhclxuXHRjb25zdCBjYW5Ib3Jpem9udGFsU2Nyb2xsVG9Ib3VyID0gZ3JpZFR5cGUgPT09ICdob3VyJyAmJiBpc1Jlc291cmNlQ2FsZW5kYXJcblxuXHR1c2VTY3JvbGxUb1RpbWUoe1xuXHRcdHZpZXdwb3J0UmVmLFxuXHRcdHNjcm9sbFRpbWUsXG5cdFx0ZW5hYmxlZDogY2FuSG9yaXpvbnRhbFNjcm9sbFRvSG91cixcblx0XHRzY3JvbGxLZXk6IGAke3ZpZXd9LSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9YCxcblx0XHRheGlzOiAnaG9yaXpvbnRhbCcsXG5cdH0pXG5cblx0Y29uc3QgaGVhZGVyID0gY2hpbGRyZW4gJiYgKFxuXHRcdDxIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciBjbGFzc05hbWU9e2NsYXNzZXM/LmhlYWRlcn0+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9Ib3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lcj5cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiaC1mdWxsIGZsZXggZmxleC1jb2xcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtY29udGFpbmVyXCJcblx0XHQ+XG5cdFx0XHR7LyoqXG5cdFx0XHQgKiBoZWFkZXIgcm93IGlzIHJlbmRlcmVkIG91dHNpZGUgc2Nyb2xsIGFyZWEgZm9yIHJlZ3VsYXIgY2FsZW5kYXJcblx0XHRcdCAqL31cblx0XHRcdHtpc1JlZ3VsYXJDYWxlbmRhciAmJiBoZWFkZXJ9XG5cblx0XHRcdDxTY3JvbGxBcmVhXG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2gtZnVsbCcsIGlzUmVndWxhckNhbGVuZGFyICYmICdvdmVyZmxvdy1hdXRvJyl9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwiaG9yaXpvbnRhbC1ncmlkLXNjcm9sbFwiXG5cdFx0XHRcdHZpZXdQb3J0UHJvcHM9e3tcblx0XHRcdFx0XHRjbGFzc05hbWU6ICcqOmZsZXghICo6ZmxleC1jb2whICo6bWluLWgtZnVsbCcsXG5cdFx0XHRcdFx0cmVmOiB2aWV3cG9ydFJlZixcblx0XHRcdFx0fX1cblx0XHRcdD5cblx0XHRcdFx0ey8qKlxuXHRcdFx0XHQgKiBoZWFkZXIgcm93IGZvciByZXNvdXJjZSBjYWxlbmRhciBpbnNpZGUgc2Nyb2xsIGFyZWFcblx0XHRcdFx0ICogKi99XG5cdFx0XHRcdHtpc1Jlc291cmNlQ2FsZW5kYXIgJiYgaGVhZGVyfVxuXG5cdFx0XHRcdHsvKiBDYWxlbmRhciBhcmVhIHdpdGggc2Nyb2xsICovfVxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LTEgdy1maXQnLCBjbGFzc2VzPy5ib2R5KX1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImhvcml6b250YWwtZ3JpZC1ib2R5XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBmbGV4IGZsZXgtY29sIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRrZXk9e2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTScpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHtyb3dzLm1hcCgocm93LCBpbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0XHQ8SG9yaXpvbnRhbEdyaWRSb3dcblx0XHRcdFx0XHRcdFx0XHRhbGxEYXk9e3Jvdy5hbGxEYXkgPz8gdG9wTGV2ZWxBbGxEYXl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXtkYXlOdW1iZXJIZWlnaHR9XG5cdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdGlzTGFzdFJvdz17aW5kZXggPT09IHJvd3MubGVuZ3RoIC0gMX1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e3Jvdy5pZH1cblx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PXt2YXJpYW50fVxuXHRcdFx0XHRcdFx0XHRcdHsuLi5yb3d9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgLz5cblx0XHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgb3JpZW50YXRpb249XCJob3Jpem9udGFsXCIgLz5cblx0XHRcdDwvU2Nyb2xsQXJlYT5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXJQcm9wcyB7XG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBOb01lbW9Ib3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciA9ICh7XG5cdGNoaWxkcmVuLFxuXHRjbGFzc05hbWUsXG59OiBIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lclByb3BzKSA9PiB7XG5cdGNvbnN0IHsgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoXG5cdFx0KHN0YXRlKSA9PiAoe1xuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcjogc3RhdGUuc3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWU6IHN0YXRlLnZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0fSlcblx0KVxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGgtMTIgdy1maXQnLFxuXHRcdFx0XHRzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMSBiZy1iYWNrZ3JvdW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lLFxuXHRcdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtaGVhZGVyXCJcblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyID0gbWVtbyhcblx0Tm9NZW1vSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXJcbilcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5pbnRlcmZhY2UgTW9udGhIZWFkZXJQcm9wcyB7XG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgTW9udGhIZWFkZXI6IFJlYWN0LkZDPE1vbnRoSGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcblx0Y29uc3QgeyBmaXJzdERheU9mV2Vlaywgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSwgY3VycmVudERhdGUgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdC8vIFJlb3JkZXIgd2VlayBkYXlzIGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG5cdGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggdy1mdWxsJyxcblx0XHRcdFx0c3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMjAnLFxuXHRcdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD1cIm1vbnRoLWhlYWRlclwiXG5cdFx0PlxuXHRcdFx0e3dlZWtEYXlzLm1hcCgod2Vla0RheSwgaW5kZXgpID0+IChcblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInB5LTIgdGV4dC1jZW50ZXIgZm9udC1tZWRpdW0gYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXgtMSBtaW4tdy0wXCJcblx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5oZWFkZXIud2Vla2RheSgnbW9udGgnLCB3ZWVrRGF5LmZvcm1hdCgnZGRkJykpfVxuXHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0a2V5PXt3ZWVrRGF5LnRvSVNPU3RyaW5nKCl9XG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17d2Vla0RheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSBjYXBpdGFsaXplIHRydW5jYXRlIHctZnVsbCBibG9ja1wiPlxuXHRcdFx0XHRcdFx0e3dlZWtEYXkuZm9ybWF0KCdkZGQnKX1cblx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0KSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbGxEYXlSb3cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgSG91ckxhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvdXItbGFiZWwvaG91ci1sYWJlbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMsIGlzVG9kYXkgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmNvbnN0IENFTExfQ0xBU1MgPSAnZmxleC0xIG1pbi13LTAnXG5jb25zdCBMRUZUX0NPTF9XSURUSCA9ICd3LTEwIHNtOnctMTYgbWluLXctMTAgc206bWluLXctMTYgbWF4LXctMTAgc206bWF4LXctMTYnXG5cbmV4cG9ydCBjb25zdCBXZWVrVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHR0LFxuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdHNlbGVjdERhdGUsXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGhpZGRlbkRheXMsXG5cdFx0c2xvdER1cmF0aW9uLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspLFxuXHRcdFtjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCB2aXNpYmxlRGF5cyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdGhpZGRlbkRheXNcblx0XHRcdFx0PyB3ZWVrRGF5cy5maWx0ZXIoKGRheSkgPT4gIWhpZGRlbkRheXMuaGFzKGRheS5kYXkoKSkpXG5cdFx0XHRcdDogd2Vla0RheXMsXG5cdFx0W3dlZWtEYXlzLCBoaWRkZW5EYXlzXVxuXHQpXG5cblx0Y29uc3QgaG91cnMgPSB1c2VNZW1vKFxuXHRcdCgpID0+XG5cdFx0XHRnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdH0pLFxuXHRcdFtjdXJyZW50RGF0ZSwgYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMsIHdlZWtEYXlzXVxuXHQpXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB7XG5cdFx0aWQ6IGtleXMuY29sLnRpbWUsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0Y2xhc3NOYW1lOiBgc2hyaW5rLTAgJHtMRUZUX0NPTF9XSURUSH0gc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAgYm9yZGVyLXItMGAsXG5cdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0XHRub0V2ZW50czogdHJ1ZSxcblx0XHRyZW5kZXJDZWxsOiAoZGF0ZTogRGF5anMpID0+IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHAtMiB0ZXh0LXJpZ2h0IHRleHQtWzEwcHhdIHNtOnRleHQteHMgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cblx0XHRcdFx0PEhvdXJMYWJlbCBkYXRlPXtkYXRlfSAvPlxuXHRcdFx0PC9kaXY+XG5cdFx0KSxcblx0fVxuXG5cdC8vIEdlbmVyYXRlIHdlZWsgZGF5cyDigJQgZWFjaCBjb2x1bW4gZ2V0cyBpdHMgb3duIGhvdXJzIG9uIHRoZSBjb3JyZWN0IGRhdGVcblx0Y29uc3QgY29sdW1ucyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdHJldHVybiB2aXNpYmxlRGF5cy5tYXAoKGRheSkgPT4gKHtcblx0XHRcdGlkOiBrZXlzLmNvbC5kYXkoZGF5KSxcblx0XHRcdGRheSxcblx0XHRcdGxhYmVsOiBkYXkuZm9ybWF0KCdEJyksXG5cdFx0XHRjbGFzc05hbWU6IENFTExfQ0xBU1MsXG5cdFx0XHRkYXlzOiBnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBkYXksXG5cdFx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRhbGxEYXRlczogd2Vla0RheXMsXG5cdFx0XHR9KSxcblx0XHRcdHZhbHVlOiBkYXksXG5cdFx0fSkpXG5cdH0sIFt3ZWVrRGF5cywgYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMsIHZpc2libGVEYXlzLm1hcF0pXG5cblx0Y29uc3QgY3NzVmFycyA9IHtcblx0XHQnLS12aXNpYmxlLWRheXMnOiB2aXNpYmxlRGF5cy5sZW5ndGgsXG5cdH0gYXMgUmVhY3QuQ1NTUHJvcGVydGllc1xuXG5cdGNvbnN0IFdpZHRoQ2xhc3MgPSAndy1mdWxsJ1xuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17XG5cdFx0XHRcdDxBbGxEYXlSb3dcblx0XHRcdFx0XHRjbGFzc2VzPXt7IGNlbGw6IENFTExfQ0xBU1MsIHNwYWNlcjogTEVGVF9DT0xfV0lEVEggfX1cblx0XHRcdFx0XHRkYXlzPXt2aXNpYmxlRGF5c31cblx0XHRcdFx0Lz5cblx0XHRcdH1cblx0XHRcdGNsYXNzZXM9e3tcblx0XHRcdFx0aGVhZGVyOiBgJHtXaWR0aENsYXNzfSBoLTE4YCxcblx0XHRcdFx0YWxsRGF5OiBXaWR0aENsYXNzLFxuXHRcdFx0XHRib2R5OiBXaWR0aENsYXNzLFxuXHRcdFx0fX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgLi4uY29sdW1uc119XG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdFx0c2xvdER1cmF0aW9uTWludXRlcz17c2xvdER1cmF0aW9ufVxuXHRcdFx0c3R5bGU9e2Nzc1ZhcnN9XG5cdFx0XHR2YXJpYW50PVwicmVndWxhclwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9eydmbGV4IGgtZnVsbCBmbGV4LTEnfSBkYXRhLXRlc3RpZD1cIndlZWstdmlldy1oZWFkZXJcIj5cblx0XHRcdFx0ey8qIENvcm5lciBjZWxsIHdpdGggd2VlayBudW1iZXIgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidy0xMCBzbTp3LTE2IG1pbi13LTEwIHNtOm1pbi13LTE2IGgtZnVsbCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLXIgcC0yIGZsZXhcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1pbi13LTAgdy1mdWxsXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC14cyB0cnVuY2F0ZSB3LWZ1bGwgdGV4dC1jZW50ZXJcIj5cblx0XHRcdFx0XHRcdFx0e3QoJ3dlZWsnKX1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtIHRydW5jYXRlIHctZnVsbCB0ZXh0LWNlbnRlclwiPlxuXHRcdFx0XHRcdFx0XHR7Y3VycmVudERhdGUud2VlaygpfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHR7LyogRGF5IGhlYWRlciBjZWxscyAqL31cblx0XHRcdFx0e3Zpc2libGVEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHRvZGF5ID0gaXNUb2RheShkYXkpXG5cdFx0XHRcdFx0Y29uc3Qga2V5ID0ga2V5cy5oZWFkZXIud2Vlay5kYXkoZGF5KVxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHQnaG92ZXI6YmctYWNjZW50IGZsZXgtMSBtaW4tdy0wIGZsZXggZmxleC1jb2wganVzdGlmeS1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgcC0xIHRleHQtY2VudGVyIHNtOnAtMiBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgdy0yMCBoLWZ1bGwnLFxuXHRcdFx0XHRcdFx0XHRcdHRvZGF5ICYmICdiZy1wcmltYXJ5LzEwIGZvbnQtYm9sZCdcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuaGVhZGVyLndlZWtkYXkoJ3dlZWsnLCBkYXkuZm9ybWF0KCdkZGRkJykpfVxuXHRcdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0XHRrZXk9e2tleX1cblx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHNlbGVjdERhdGUoZGF5KVxuXHRcdFx0XHRcdFx0XHRcdG9wZW5FdmVudEZvcm0oeyBzdGFydDogZGF5IH0pXG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2tleX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc20gdHJ1bmNhdGUgdy1mdWxsXCI+XG5cdFx0XHRcdFx0XHRcdFx0e2RheS5mb3JtYXQoJ2RkZCcpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHQnbXgtYXV0byBtdC0xIGZsZXggaC02IHctNiBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIHRleHQteHMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0dG9kYXkgJiYgJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQnXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdEJyl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBTY3JvbGxBcmVhLCBTY3JvbGxCYXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldERheUtleSwgZ2V0V2Vla0RheXMsIGlzVG9kYXkgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmNvbnN0IEVWRU5UX0RPVF9DT0xPUlMgPSBbJ2JnLXByaW1hcnknLCAnYmctYmx1ZS01MDAnLCAnYmctZ3JlZW4tNTAwJ11cbmNvbnN0IERBWVNfSU5fTUlOSV9DQUxFTkRBUiA9IDQyXG5cbmludGVyZmFjZSBNb250aERhdGEge1xuXHRkYXRlOiBEYXlqc1xuXHRuYW1lOiBzdHJpbmdcblx0ZXZlbnRDb3VudDogbnVtYmVyXG5cdG1vbnRoS2V5OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIERheURhdGEge1xuXHRkYXRlOiBEYXlqc1xuXHRkYXlLZXk6IHN0cmluZ1xuXHRpc0luQ3VycmVudE1vbnRoOiBib29sZWFuXG5cdGlzVG9kYXk6IGJvb2xlYW5cblx0aXNTZWxlY3RlZDogYm9vbGVhblxuXHRldmVudENvdW50OiBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IFllYXJWaWV3ID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0c2VsZWN0RGF0ZSxcblx0XHRldmVudHMsXG5cdFx0c2V0Vmlldyxcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0dCxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgY3VycmVudFllYXIgPSBjdXJyZW50RGF0ZS55ZWFyKClcblxuXHRjb25zdCB3ZWVrZGF5SGVhZGVycyA9IGdldFdlZWtEYXlzKGRheWpzKCksIGZpcnN0RGF5T2ZXZWVrKS5tYXAoKGQpID0+ICh7XG5cdFx0aWQ6IGQuZGF5KCkudG9TdHJpbmcoKSxcblx0XHRsYWJlbDogZC5mb3JtYXQoJ2RkJyksXG5cdH0pKVxuXG5cdGNvbnN0IGdlbmVyYXRlTW9udGhzRGF0YSA9ICgpOiBNb250aERhdGFbXSA9PiB7XG5cdFx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDEyIH0sIChfLCBtb250aEluZGV4KSA9PiB7XG5cdFx0XHRjb25zdCBtb250aERhdGUgPSBkYXlqcygpXG5cdFx0XHRcdC55ZWFyKGN1cnJlbnRZZWFyKVxuXHRcdFx0XHQubW9udGgobW9udGhJbmRleClcblx0XHRcdFx0LnN0YXJ0T2YoJ21vbnRoJylcblx0XHRcdGNvbnN0IGV2ZW50c0luTW9udGggPSBldmVudHMuZmlsdGVyKFxuXHRcdFx0XHQoZXZlbnQpID0+XG5cdFx0XHRcdFx0ZXZlbnQuc3RhcnQueWVhcigpID09PSBjdXJyZW50WWVhciAmJlxuXHRcdFx0XHRcdGV2ZW50LnN0YXJ0Lm1vbnRoKCkgPT09IG1vbnRoSW5kZXhcblx0XHRcdClcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZGF0ZTogbW9udGhEYXRlLFxuXHRcdFx0XHRuYW1lOiBtb250aERhdGUuZm9ybWF0KCdNTU1NJyksXG5cdFx0XHRcdGV2ZW50Q291bnQ6IGV2ZW50c0luTW9udGgubGVuZ3RoLFxuXHRcdFx0XHRtb250aEtleTogbW9udGhEYXRlLmZvcm1hdCgnTU0nKSxcblx0XHRcdH1cblx0XHR9KVxuXHR9XG5cblx0Y29uc3QgZ2VuZXJhdGVEYXlzRm9yTW9udGggPSAobW9udGhEYXRlOiBEYXlqcyk6IERheURhdGFbXSA9PiB7XG5cdFx0Y29uc3QgZmlyc3REYXlPZkNhbGVuZGFyID0gbW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJykuc3RhcnRPZignd2VlaycpXG5cblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogREFZU19JTl9NSU5JX0NBTEVOREFSIH0sIChfLCBkYXlJbmRleCkgPT4ge1xuXHRcdFx0Y29uc3QgZGF5RGF0ZSA9IGZpcnN0RGF5T2ZDYWxlbmRhci5hZGQoZGF5SW5kZXgsICdkYXknKVxuXHRcdFx0Y29uc3QgZGF5U3RhcnQgPSBkYXlEYXRlLnN0YXJ0T2YoJ2RheScpXG5cdFx0XHRjb25zdCBkYXlFbmQgPSBkYXlEYXRlLmVuZE9mKCdkYXknKVxuXHRcdFx0Y29uc3QgZXZlbnRzT25EYXkgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoZGF5U3RhcnQsIGRheUVuZClcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZGF0ZTogZGF5RGF0ZSxcblx0XHRcdFx0ZGF5S2V5OiBnZXREYXlLZXkoZGF5RGF0ZSksXG5cdFx0XHRcdGlzSW5DdXJyZW50TW9udGg6IGRheURhdGUubW9udGgoKSA9PT0gbW9udGhEYXRlLm1vbnRoKCksXG5cdFx0XHRcdGlzVG9kYXk6IGlzVG9kYXkoZGF5RGF0ZSksXG5cdFx0XHRcdGlzU2VsZWN0ZWQ6IGRheURhdGUuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5JyksXG5cdFx0XHRcdGV2ZW50Q291bnQ6IGV2ZW50c09uRGF5Lmxlbmd0aCxcblx0XHRcdH1cblx0XHR9KVxuXHR9XG5cblx0Y29uc3QgbmF2aWdhdGVUb0RhdGUgPSAoXG5cdFx0ZGF0ZTogRGF5anMsXG5cdFx0dmlldzogJ21vbnRoJyB8ICdkYXknLFxuXHRcdGV2ZW50PzogUmVhY3QuTW91c2VFdmVudFxuXHQpID0+IHtcblx0XHRldmVudD8uc3RvcFByb3BhZ2F0aW9uKClcblx0XHRzZWxlY3REYXRlKGRhdGUpXG5cdFx0c2V0Vmlldyh2aWV3KVxuXHR9XG5cblx0Y29uc3QgZ2V0RXZlbnRDb3VudExhYmVsID0gKGNvdW50OiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuXHRcdGNvbnN0IGV2ZW50V29yZCA9IGNvdW50ID09PSAxID8gdCgnZXZlbnQnKSA6IHQoJ2V2ZW50cycpXG5cdFx0cmV0dXJuIGAke2NvdW50fSAke2V2ZW50V29yZH1gXG5cdH1cblxuXHRjb25zdCBnZXREYXlDbGFzc05hbWUgPSAoZGF5OiBEYXlEYXRhKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCBiYXNlQ2xhc3MgPVxuXHRcdFx0J3JlbGF0aXZlIGZsZXggYXNwZWN0LXNxdWFyZSB3LWZ1bGwgY3Vyc29yLXBvaW50ZXIgZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGhvdmVyOmJnLWFjY2VudCByb3VuZGVkLXNtIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTIwMCdcblx0XHRjb25zdCBvdXRzaWRlTW9udGhDbGFzcyA9IGRheS5pc0luQ3VycmVudE1vbnRoXG5cdFx0XHQ/ICcnXG5cdFx0XHQ6ICd0ZXh0LW11dGVkLWZvcmVncm91bmQgb3BhY2l0eS01MCdcblx0XHRjb25zdCB0b2RheUNsYXNzID0gZGF5LmlzVG9kYXlcblx0XHRcdD8gJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1mdWxsJ1xuXHRcdFx0OiAnJ1xuXHRcdGNvbnN0IHNlbGVjdGVkQ2xhc3MgPVxuXHRcdFx0ZGF5LmlzU2VsZWN0ZWQgJiYgIWRheS5pc1RvZGF5ID8gJ2JnLW11dGVkIHJvdW5kZWQtZnVsbCBmb250LWJvbGQnIDogJydcblx0XHRjb25zdCBoYXNFdmVudHNDbGFzcyA9XG5cdFx0XHRkYXkuZXZlbnRDb3VudCA+IDAgJiYgIWRheS5pc1RvZGF5ICYmICFkYXkuaXNTZWxlY3RlZCA/ICdmb250LW1lZGl1bScgOiAnJ1xuXG5cdFx0cmV0dXJuIGNuKFxuXHRcdFx0YmFzZUNsYXNzLFxuXHRcdFx0b3V0c2lkZU1vbnRoQ2xhc3MsXG5cdFx0XHR0b2RheUNsYXNzLFxuXHRcdFx0c2VsZWN0ZWRDbGFzcyxcblx0XHRcdGhhc0V2ZW50c0NsYXNzXG5cdFx0KVxuXHR9XG5cblx0Y29uc3QgZ2V0RXZlbnREb3RDbGFzc05hbWUgPSAoY29sb3I6IHN0cmluZywgaXNUb2RheTogYm9vbGVhbik6IHN0cmluZyA9PiB7XG5cdFx0Y29uc3QgZG90Q29sb3IgPSBpc1RvZGF5ID8gJ2JnLXByaW1hcnktZm9yZWdyb3VuZCcgOiBjb2xvclxuXHRcdHJldHVybiBjbignaC1bM3B4XSB3LVszcHhdIHJvdW5kZWQtZnVsbCcsIGRvdENvbG9yKVxuXHR9XG5cblx0Y29uc3QgbW9udGhzRGF0YSA9IGdlbmVyYXRlTW9udGhzRGF0YSgpXG5cblx0Y29uc3QgZ2V0RGF5VG9vbHRpcCA9IChldmVudENvdW50OiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuXHRcdGlmIChldmVudENvdW50ID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gJydcblx0XHR9XG5cdFx0cmV0dXJuIGdldEV2ZW50Q291bnRMYWJlbChldmVudENvdW50KVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8U2Nyb2xsQXJlYSBjbGFzc05hbWU9XCJoLWZ1bGxcIiBkYXRhLXRlc3RpZD1cInllYXItdmlld1wiPlxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9XCJncmlkIGF1dG8tcm93cy1mciBncmlkLWNvbHMtMSBnYXAtNCBwLTQgc206Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIlxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInllYXItZ3JpZFwiXG5cdFx0XHQ+XG5cdFx0XHRcdHttb250aHNEYXRhLm1hcCgobW9udGgsIG1vbnRoSW5kZXgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBkYXlzSW5Nb250aCA9IGdlbmVyYXRlRGF5c0Zvck1vbnRoKG1vbnRoLmRhdGUpXG5cdFx0XHRcdFx0Y29uc3QgYW5pbWF0aW9uRGVsYXkgPSBtb250aEluZGV4ICogMC4wNVxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaG92ZXI6Ym9yZGVyLXByaW1hcnkgZmxleCBmbGV4LWNvbCByb3VuZGVkLWxnIGJvcmRlciBwLTMgdGV4dC1sZWZ0IHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBob3ZlcjpzaGFkb3ctbWRcIlxuXHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5oZWFkZXIueWVhci5tb250aChtb250aC5tb250aEtleSl9XG5cdFx0XHRcdFx0XHRcdGtleT17bW9udGgubW9udGhLZXl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtYi0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiXG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2FuaW1hdGlvbkRlbGF5fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KCdtb250aCcsIG1vbnRoLm1vbnRoS2V5KX1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtrZXlzLmxpc3RLZXkoJ21vbnRoJywgbW9udGgubW9udGhLZXkpfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC1sZyBmb250LW1lZGl1bSBob3Zlcjp1bmRlcmxpbmUgY3Vyc29yLXBvaW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuaGVhZGVyLnllYXIubW9udGgobW9udGgubW9udGhLZXksICd0aXRsZScpfVxuXHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gbmF2aWdhdGVUb0RhdGUobW9udGguZGF0ZSwgJ21vbnRoJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHR7bW9udGgubmFtZX1cblx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cblxuXHRcdFx0XHRcdFx0XHRcdHttb250aC5ldmVudENvdW50ID4gMCAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtZnVsbCBweC0yIHB5LTEgdGV4dC14c1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmhlYWRlci55ZWFyLm1vbnRoKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1vbnRoLm1vbnRoS2V5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdjb3VudCdcblx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e2dldEV2ZW50Q291bnRMYWJlbChtb250aC5ldmVudENvdW50KX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblxuXHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtNyBnYXAtcHggdGV4dC1bMC42cmVtXVwiXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuaGVhZGVyLnllYXIubW9udGgobW9udGgubW9udGhLZXksICdtaW5pJyl9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7d2Vla2RheUhlYWRlcnMubWFwKChkYXkpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGgtMyB0ZXh0LWNlbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KCdoZWFkZXInLCBtb250aC5tb250aEtleSwgZGF5LmlkKX1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e2RheS5sYWJlbH1cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdCkpfVxuXG5cdFx0XHRcdFx0XHRcdFx0e2RheXNJbk1vbnRoLm1hcCgoZGF5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBkYXlUZXN0SWQgPSBrZXlzLmhlYWRlci55ZWFyLmRheShcblx0XHRcdFx0XHRcdFx0XHRcdFx0bW9udGguZGF0ZS5mb3JtYXQoJ1lZWVktTU0nKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF5LmRheUtleVxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgaGFzRXZlbnRzID0gZGF5LmV2ZW50Q291bnQgPiAwXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB2aXNpYmxlRG90Q291bnQgPSBNYXRoLm1pbihkYXkuZXZlbnRDb3VudCwgMylcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHZpc2libGVEb3RDb2xvcnMgPSBFVkVOVF9ET1RfQ09MT1JTLnNsaWNlKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlRG90Q291bnRcblx0XHRcdFx0XHRcdFx0XHRcdClcblxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Z2V0RGF5Q2xhc3NOYW1lKGRheSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2RheVRlc3RJZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2RheS5kYXlLZXl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KGUpID0+IG5hdmlnYXRlVG9EYXRlKGRheS5kYXRlLCAnZGF5JywgZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU9e2dldERheVRvb2x0aXAoZGF5LmV2ZW50Q291bnQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC1jZW50ZXIgbGVhZGluZy1ub25lXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ZGF5LmRhdGUuZGF0ZSgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtoYXNFdmVudHMgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdhYnNvbHV0ZSBib3R0b20tMCBmbGV4IHctZnVsbCBqdXN0aWZ5LWNlbnRlciBzcGFjZS14LXB4Jyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXkuaXNUb2RheSAmJiAnYm90dG9tLXB4J1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7dmlzaWJsZURvdENvbG9ycy5tYXAoKGRvdENvbG9yKSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Z2V0RXZlbnREb3RDbGFzc05hbWUoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRvdENvbG9yLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXkuaXNUb2RheVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17ZG90Q29sb3J9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHR9KX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pfVxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiAvPlxuXHRcdDwvU2Nyb2xsQXJlYT5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBFdmVudEZvcm1Qcm9wcyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7XG5cdENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlLFxuXHRDZWxsQ2xpY2tJbmZvLFxuXHREYXRlUmFuZ2UsXG5cdFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMsXG5cdFNsb3REdXJhdGlvbixcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyRW5naW5lIH0gZnJvbSAnQC9ob29rcy91c2UtY2FsZW5kYXItZW5naW5lJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgRVZFTlRfQkFSX0hFSUdIVCwgR0FQX0JFVFdFRU5fRUxFTUVOVFMgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucywgVHJhbnNsYXRvckZ1bmN0aW9uIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhclZpZXcsIFRpbWVGb3JtYXQgfSBmcm9tICdAL3R5cGVzJ1xuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0J1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyUHJvdmlkZXJQcm9wcyB7XG5cdGNoaWxkcmVuOiBSZWFjdE5vZGVcblx0ZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG5cdGZpcnN0RGF5T2ZXZWVrPzogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG5cdGluaXRpYWxWaWV3PzogQ2FsZW5kYXJWaWV3XG5cdGluaXRpYWxEYXRlPzogRGF5anNcblx0cmVuZGVyRXZlbnQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IFJlYWN0Tm9kZVxuXHRvbkV2ZW50Q2xpY2s/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DZWxsQ2xpY2s/OiAoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4gdm9pZFxuXHRvblZpZXdDaGFuZ2U/OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdG9uRXZlbnRBZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudFVwZGF0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50RGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRGF0ZUNoYW5nZT86IChkYXRlOiBEYXlqcywgcmFuZ2U6IERhdGVSYW5nZSkgPT4gdm9pZFxuXHRsb2NhbGU/OiBzdHJpbmdcblx0dGltZXpvbmU/OiBzdHJpbmdcblx0ZGlzYWJsZUNlbGxDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZUV2ZW50Q2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVEcmFnQW5kRHJvcD86IGJvb2xlYW5cblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0ZXZlbnRTcGFjaW5nPzogbnVtYmVyXG5cdGV2ZW50SGVpZ2h0PzogbnVtYmVyXG5cdHN0aWNreVZpZXdIZWFkZXI/OiBib29sZWFuXG5cdHZpZXdIZWFkZXJDbGFzc05hbWU/OiBzdHJpbmdcblx0aGVhZGVyQ29tcG9uZW50PzogUmVhY3ROb2RlIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY29tcG9uZW50XG5cdGhlYWRlckNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNsYXNzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHJlbmRlckV2ZW50Rm9ybT86IChwcm9wczogRXZlbnRGb3JtUHJvcHMpID0+IFJlYWN0Tm9kZVxuXHQvLyBUcmFuc2xhdGlvbiBvcHRpb25zIC0gcHJvdmlkZSBlaXRoZXIgdHJhbnNsYXRpb25zIG9iamVjdCBPUiB0cmFuc2xhdG9yIGZ1bmN0aW9uXG5cdHRyYW5zbGF0aW9ucz86IFRyYW5zbGF0aW9uc1xuXHR0cmFuc2xhdG9yPzogVHJhbnNsYXRvckZ1bmN0aW9uXG5cdHRpbWVGb3JtYXQ/OiBUaW1lRm9ybWF0XG5cdGNsYXNzZXNPdmVycmlkZT86IENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yPzogKFxuXHRcdHByb3BzOiBSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzXG5cdCkgPT4gUmVhY3ROb2RlXG5cdHJlbmRlckhvdXI/OiAoZGF0ZTogRGF5anMpID0+IFJlYWN0Tm9kZVxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycz86IGJvb2xlYW5cblx0aGlkZUV4cG9ydEJ1dHRvbj86IGJvb2xlYW5cblx0aGlkZGVuRGF5cz86IFNldDxudW1iZXI+XG5cdHNsb3REdXJhdGlvbj86IFNsb3REdXJhdGlvblxuXHRzY3JvbGxUaW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxDYWxlbmRhclByb3ZpZGVyUHJvcHM+ID0gKHtcblx0Y2hpbGRyZW4sXG5cdGV2ZW50cyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9IDAsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdHJlbmRlckV2ZW50LFxuXHRvbkV2ZW50Q2xpY2ssXG5cdG9uQ2VsbENsaWNrLFxuXHRvblZpZXdDaGFuZ2UsXG5cdG9uRXZlbnRBZGQsXG5cdG9uRXZlbnRVcGRhdGUsXG5cdG9uRXZlbnREZWxldGUsXG5cdG9uRGF0ZUNoYW5nZSxcblx0bG9jYWxlLFxuXHR0aW1lem9uZSxcblx0ZGlzYWJsZUNlbGxDbGljayxcblx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0ZGF5TWF4RXZlbnRzLFxuXHRldmVudFNwYWNpbmcgPSBHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0ZXZlbnRIZWlnaHQgPSBFVkVOVF9CQVJfSEVJR0hULFxuXHRzdGlja3lWaWV3SGVhZGVyID0gdHJ1ZSxcblx0dmlld0hlYWRlckNsYXNzTmFtZSA9ICcnLFxuXHRoZWFkZXJDb21wb25lbnQsXG5cdGhlYWRlckNsYXNzTmFtZSxcblx0YnVzaW5lc3NIb3Vycyxcblx0cmVuZGVyRXZlbnRGb3JtLFxuXHR0cmFuc2xhdGlvbnMsXG5cdHRyYW5zbGF0b3IsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGNsYXNzZXNPdmVycmlkZSxcblx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdHJlbmRlckhvdXIsXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzID0gZmFsc2UsXG5cdGhpZGVFeHBvcnRCdXR0b24gPSBmYWxzZSxcblx0aGlkZGVuRGF5cyxcblx0c2xvdER1cmF0aW9uID0gNjAsXG5cdHNjcm9sbFRpbWUsXG59KSA9PiB7XG5cdC8vIFVzZSB0aGUgY2FsZW5kYXIgZW5naW5lXG5cdGNvbnN0IGNhbGVuZGFyRW5naW5lID0gdXNlQ2FsZW5kYXJFbmdpbmUoe1xuXHRcdGV2ZW50cyxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRpbml0aWFsVmlldyxcblx0XHRpbml0aWFsRGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdG9uRXZlbnRBZGQsXG5cdFx0b25FdmVudFVwZGF0ZSxcblx0XHRvbkV2ZW50RGVsZXRlLFxuXHRcdG9uRGF0ZUNoYW5nZSxcblx0XHRvblZpZXdDaGFuZ2UsXG5cdFx0bG9jYWxlLFxuXHRcdHRpbWV6b25lLFxuXHRcdHRyYW5zbGF0aW9ucyxcblx0XHR0cmFuc2xhdG9yLFxuXHR9KVxuXG5cdGNvbnN0IGVkaXRFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0U2VsZWN0ZWRFdmVudChldmVudClcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Ly8gQ3VzdG9tIGhhbmRsZXJzIHRoYXQgY2FsbCBleHRlcm5hbCBjYWxsYmFja3Ncblx0Y29uc3QgaGFuZGxlRXZlbnRDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0aWYgKGRpc2FibGVFdmVudENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdFx0aWYgKG9uRXZlbnRDbGljaykge1xuXHRcdFx0XHRvbkV2ZW50Q2xpY2soZXZlbnQpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlZGl0RXZlbnQoZXZlbnQpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbZGlzYWJsZUV2ZW50Q2xpY2ssIG9uRXZlbnRDbGljaywgZWRpdEV2ZW50XVxuXHQpXG5cblx0Y29uc3QgaGFuZGxlRGF0ZUNsaWNrID0gdXNlQ2FsbGJhY2soXG5cdFx0KGluZm86IENlbGxDbGlja0luZm8pID0+IHtcblx0XHRcdGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAob25DZWxsQ2xpY2spIHtcblx0XHRcdFx0b25DZWxsQ2xpY2soaW5mbylcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNhbGVuZGFyRW5naW5lLm9wZW5FdmVudEZvcm0oaW5mbylcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtvbkNlbGxDbGljaywgZGlzYWJsZUNlbGxDbGljaywgY2FsZW5kYXJFbmdpbmVdXG5cdClcblxuXHQvLyBDcmVhdGUgdGhlIGNvbnRleHQgdmFsdWVcblx0Y29uc3QgY29udGV4dFZhbHVlID0gdXNlTWVtbyhcblx0XHQoKSA9PiAoe1xuXHRcdFx0Li4uY2FsZW5kYXJFbmdpbmUsXG5cdFx0XHRyZW5kZXJFdmVudCxcblx0XHRcdG9uRXZlbnRDbGljazogaGFuZGxlRXZlbnRDbGljayxcblx0XHRcdG9uQ2VsbENsaWNrOiBoYW5kbGVEYXRlQ2xpY2ssXG5cdFx0XHRsb2NhbGUsXG5cdFx0XHR0aW1lem9uZSxcblx0XHRcdGRpc2FibGVDZWxsQ2xpY2ssXG5cdFx0XHRkaXNhYmxlRXZlbnRDbGljayxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdGV2ZW50SGVpZ2h0LFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRcdFx0cmVuZGVySG91cixcblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0aGlkZUV4cG9ydEJ1dHRvbixcblx0XHRcdGhpZGRlbkRheXMsXG5cdFx0XHRzbG90RHVyYXRpb24sXG5cdFx0XHRzY3JvbGxUaW1lLFxuXHRcdH0pLFxuXHRcdFtcblx0XHRcdGNhbGVuZGFyRW5naW5lLFxuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRoYW5kbGVFdmVudENsaWNrLFxuXHRcdFx0aGFuZGxlRGF0ZUNsaWNrLFxuXHRcdFx0bG9jYWxlLFxuXHRcdFx0dGltZXpvbmUsXG5cdFx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRldmVudEhlaWdodCxcblx0XHRcdHN0aWNreVZpZXdIZWFkZXIsXG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0aGVhZGVyQ29tcG9uZW50LFxuXHRcdFx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdHRpbWVGb3JtYXQsXG5cdFx0XHRjbGFzc2VzT3ZlcnJpZGUsXG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdHJlbmRlckhvdXIsXG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdGhpZGVFeHBvcnRCdXR0b24sXG5cdFx0XHRoaWRkZW5EYXlzLFxuXHRcdFx0c2xvdER1cmF0aW9uLFxuXHRcdFx0c2Nyb2xsVGltZSxcblx0XHRdXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxDYWxlbmRhckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRWYWx1ZX0+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9DYWxlbmRhckNvbnRleHQuUHJvdmlkZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgQ2FsZW5kYXJEbmRDb250ZXh0IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQnXG5pbXBvcnQgeyBFdmVudEZvcm1EaWFsb2cgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtLWRpYWxvZydcbmltcG9ydCB7IEhlYWRlciB9IGZyb20gJ0AvY29tcG9uZW50cy9oZWFkZXInXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBEYXlWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2RheS12aWV3J1xuaW1wb3J0IHsgTW9udGhWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvbW9udGgtdmlldydcbmltcG9ydCB7IFdlZWtWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy93ZWVrLXZpZXcnXG5pbXBvcnQgeyBZZWFyVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy95ZWFyLXZpZXcveWVhci12aWV3J1xuaW1wb3J0IHsgQ2FsZW5kYXJQcm92aWRlciB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9wcm92aWRlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbi8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBuby1kdXBsaWNhdGVzXG5pbXBvcnQgJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHR5cGUge1xuXHRJbGFteUNhbGVuZGFyUHJvcEV2ZW50LFxuXHRJbGFteUNhbGVuZGFyUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQge1xuXHREQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRFVkVOVF9CQVJfSEVJR0hULFxuXHRHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0V0VFS19EQVlTX05VTUJFUl9NQVAsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IG5vcm1hbGl6ZUV2ZW50cywgc2FmZURhdGUsIHRvSGlkZGVuRGF5c1NldCB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBDYWxlbmRhckNvbnRlbnQ6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IHZpZXcsIGRheU1heEV2ZW50cyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHZpZXdNYXAgPSB7XG5cdFx0bW9udGg6IDxNb250aFZpZXcgZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9IGtleT1cIm1vbnRoXCIgLz4sXG5cdFx0d2VlazogPFdlZWtWaWV3IGtleT1cIndlZWtcIiAvPixcblx0XHRkYXk6IDxEYXlWaWV3IGtleT1cImRheVwiIC8+LFxuXHRcdHllYXI6IDxZZWFyVmlldyBrZXk9XCJ5ZWFyXCIgLz4sXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJpbGFteS1jYWxlbmRhclwiPlxuXHRcdFx0PEhlYWRlciBjbGFzc05hbWU9XCJwLTEgc2hyaW5rLTBcIiAvPlxuXHRcdFx0ey8qIENhbGVuZGFyIEJvZHkgd2l0aCBBbmltYXRlUHJlc2VuY2UgZm9yIHZpZXcgdHJhbnNpdGlvbnMgKi99XG5cdFx0XHQ8Q2FsZW5kYXJEbmRDb250ZXh0PlxuXHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIG1pbi1oLTAgZmxleC0xXCJcblx0XHRcdFx0XHRkaXJlY3Rpb249XCJob3Jpem9udGFsXCJcblx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXt2aWV3fVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJib3JkZXIgaC1mdWxsIHctZnVsbFwiIGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItYm9keVwiPlxuXHRcdFx0XHRcdFx0e3ZpZXdNYXBbdmlld119XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0PC9DYWxlbmRhckRuZENvbnRleHQ+XG5cdFx0XHQ8RXZlbnRGb3JtRGlhbG9nIC8+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IElsYW15Q2FsZW5kYXI6IFJlYWN0LkZDPElsYW15Q2FsZW5kYXJQcm9wcz4gPSAoe1xuXHRldmVudHMsXG5cdGZpcnN0RGF5T2ZXZWVrID0gJ3N1bmRheScsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdGRheU1heEV2ZW50cyA9IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdGV2ZW50U3BhY2luZyA9IEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRldmVudEhlaWdodCA9IEVWRU5UX0JBUl9IRUlHSFQsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzID0gZmFsc2UsXG5cdGhpZGRlbkRheXMsXG5cdC4uLnByb3BzXG59KSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PENhbGVuZGFyUHJvdmlkZXJcblx0XHRcdGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfVxuXHRcdFx0ZXZlbnRIZWlnaHQ9e2V2ZW50SGVpZ2h0fVxuXHRcdFx0ZXZlbnRTcGFjaW5nPXtldmVudFNwYWNpbmd9XG5cdFx0XHRldmVudHM9e25vcm1hbGl6ZUV2ZW50czxJbGFteUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50PihldmVudHMpfVxuXHRcdFx0Zmlyc3REYXlPZldlZWs9e1dFRUtfREFZU19OVU1CRVJfTUFQW2ZpcnN0RGF5T2ZXZWVrXX1cblx0XHRcdGhpZGRlbkRheXM9e3RvSGlkZGVuRGF5c1NldChoaWRkZW5EYXlzKX1cblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzPXtoaWRlTm9uQnVzaW5lc3NIb3Vyc31cblx0XHRcdGluaXRpYWxEYXRlPXtzYWZlRGF0ZShpbml0aWFsRGF0ZSl9XG5cdFx0XHRpbml0aWFsVmlldz17aW5pdGlhbFZpZXd9XG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyPXtzdGlja3lWaWV3SGVhZGVyfVxuXHRcdFx0dGltZUZvcm1hdD17dGltZUZvcm1hdH1cblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWU9e3ZpZXdIZWFkZXJDbGFzc05hbWV9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENhbGVuZGFyQ29udGVudCAvPlxuXHRcdDwvQ2FsZW5kYXJQcm92aWRlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuaW50ZXJmYWNlIFJlc291cmNlRXZlbnRHcmlkUHJvcHMge1xuXHQvKipcblx0ICogQXJyYXkgb2YgZGF5cyB0byBkaXNwbGF5IGluIHRoZSBncmlkXG5cdCAqL1xuXHRkYXlzOiBEYXlqc1tdIHwgRGF5anNbXVtdXG5cdC8qKiBUaGUgdHlwZSBvZiBncmlkIHRvIGRpc3BsYXkgLSAnZGF5JyBmb3IgZGF5IHZpZXcsICdob3VyJyBmb3Igd2VlayB2aWV3XG5cdCAqIChhZmZlY3RzIGV2ZW50IHBvc2l0aW9uaW5nIGxvZ2ljKVxuXHQgKi9cblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHQvKipcblx0ICogQ2hpbGRyZW4gd2lsbCBiZSByZW5kZXJlZCBhcyBoZWFkZXJzIGFib3ZlIHRoZSBncmlkXG5cdCAqIChlLmcuLCBmb3IgZGF5IG5hbWVzIGluIG1vbnRoIHZpZXcpXG5cdCAqL1xuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc2VzPzogeyBoZWFkZXI/OiBzdHJpbmc7IGJvZHk/OiBzdHJpbmc7IHNjcm9sbD86IHN0cmluZzsgY2VsbD86IHN0cmluZyB9XG59XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUV2ZW50R3JpZDogUmVhY3QuRkM8UmVzb3VyY2VFdmVudEdyaWRQcm9wcz4gPSAoe1xuXHRkYXlzLFxuXHRncmlkVHlwZSA9ICdkYXknLFxuXHRjaGlsZHJlbixcblx0Y2xhc3Nlcyxcbn0pID0+IHtcblx0Y29uc3QgeyByZXNvdXJjZXMgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCBjb2x1bW5zID0gZGF5cy5tYXAoKGRheSkgPT4ge1xuXHRcdGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGRheSlcblx0XHRjb25zdCByZWZEYXkgPSBpc0FycmF5ID8gZGF5WzBdIDogZGF5XG5cdFx0cmV0dXJuIHtcblx0XHRcdGlkOiByZWZEYXkgPyBrZXlzLmNvbC5kYXkocmVmRGF5KSA6ICdkYXktY29sLXVua25vd24nLFxuXHRcdFx0ZGF5OiBpc0FycmF5ID8gdW5kZWZpbmVkIDogZGF5LFxuXHRcdFx0ZGF5czogaXNBcnJheSA/IGRheSA6IHVuZGVmaW5lZCxcblx0XHRcdGNsYXNzTmFtZTogY2xhc3Nlcz8uY2VsbCxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdH1cblx0fSlcblxuXHRjb25zdCByb3dzID0gcmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+ICh7XG5cdFx0aWQ6IHJlc291cmNlLmlkLFxuXHRcdHRpdGxlOiByZXNvdXJjZS50aXRsZSxcblx0XHRyZXNvdXJjZTogcmVzb3VyY2UsXG5cdFx0Y29sdW1ucyxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8SG9yaXpvbnRhbEdyaWRcblx0XHRcdGNsYXNzZXM9e2NsYXNzZXN9XG5cdFx0XHRkYXlOdW1iZXJIZWlnaHQ9ezB9XG5cdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRyb3dzPXtyb3dzfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L0hvcml6b250YWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IEhvdXJMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3VyLWxhYmVsL2hvdXItbGFiZWwnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5pbnRlcmZhY2UgVGltZUhlYWRlclJvd1Byb3BzIHtcblx0aG91cnM6IERheWpzW11cblx0dmlldzogJ3dlZWsnIHwgJ2RheSdcblx0Ly8gUGVyLWl0ZW0gYW5pbWF0aW9uIGRlbGF5LiBDYWxsZXJzIHBhc3MgZGlmZmVyZW50IHN0ZXAgdmFsdWVzIGRlcGVuZGluZyBvblxuXHQvLyB0aGUgbGlzdCBsZW5ndGggKGUuZy4gMC4wMDUgZm9yIGEgd2VlayBvZiBob3VycywgMC4wNSBmb3IgYSBzaW5nbGUgZGF5KS5cblx0ZGVsYXlTdGVwOiBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IFRpbWVIZWFkZXJSb3c6IFJlYWN0LkZDPFRpbWVIZWFkZXJSb3dQcm9wcz4gPSAoe1xuXHRob3Vycyxcblx0dmlldyxcblx0ZGVsYXlTdGVwLFxufSkgPT4gKFxuXHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMiBib3JkZXItYlwiPlxuXHRcdHtob3Vycy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdGNvbnN0IGlzTm93SG91ciA9IGNvbC5pc1NhbWUoZGF5anMoKSwgJ2hvdXInKVxuXHRcdFx0Y29uc3QgaG91clN0ciA9IGNvbC5mb3JtYXQoJ0hIJylcblx0XHRcdGNvbnN0IGtleSA9IGtleXMuaGVhZGVyLndlZWsuaG91cihjb2wsIGluZGV4KVxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnbWluLXctMjAgZmxleC0xIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXhzIHNocmluay0wJyxcblx0XHRcdFx0XHRcdGlzTm93SG91ciAmJiAnYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwIGZvbnQtbWVkaXVtJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0ZGF0YS1ob3VyPXtob3VyU3RyfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmhlYWRlci5yZXNvdXJjZS50aW1lTGFiZWwodmlldywgaG91clN0cil9XG5cdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogZGVsYXlTdGVwfVxuXHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KGtleSwgJ2FuaW1hdGVkJyl9XG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17a2V5cy5saXN0S2V5KGtleSwgJ21vdGlvbicpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PEhvdXJMYWJlbCBkYXRlPXtjb2x9IC8+XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0KVxuXHRcdH0pfVxuXHQ8L2Rpdj5cbilcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgVGltZUhlYWRlclJvdyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy90aW1lLWhlYWRlci1yb3cnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZURheUhvcml6b250YWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB0LCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3VycywgcmVzb3VyY2VzIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgZGF5SG91cnMgPSBnZXRWaWV3SG91cnMoe1xuXHRcdHJlZmVyZW5jZURhdGU6IGN1cnJlbnREYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0YWxsRGF0ZXM6IFtjdXJyZW50RGF0ZV0sXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzOiByZXNvdXJjZXNcblx0XHRcdC5tYXAoKHIpID0+IHIuYnVzaW5lc3NIb3Vycylcblx0XHRcdC5maWx0ZXIoQm9vbGVhbikgYXMgKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW10sXG5cdH0pXG5cblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VFdmVudEdyaWRcblx0XHRcdGNsYXNzZXM9e3tcblx0XHRcdFx0aGVhZGVyOiAnbWluLXctZnVsbCcsXG5cdFx0XHRcdGJvZHk6ICdtaW4tdy1mdWxsJyxcblx0XHRcdFx0Y2VsbDogJ21pbi13LTIwIGZsZXgtMScsXG5cdFx0XHR9fVxuXHRcdFx0ZGF5cz17ZGF5SG91cnN9XG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidy0yMCBzbTp3LTQwIGJvcmRlci1iIGJvcmRlci1yIHNocmluay0wIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0cnVuY2F0ZSBweC0xIG1pbi13LTBcIj57dCgncmVzb3VyY2VzJyl9PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgZmxleCBmbGV4LWNvbFwiPlxuXHRcdFx0XHQ8VGltZUhlYWRlclJvdyBkZWxheVN0ZXA9ezAuMDV9IGhvdXJzPXtkYXlIb3Vyc30gdmlldz1cImRheVwiIC8+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1Jlc291cmNlRXZlbnRHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IEFsbERheUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1jZWxsJ1xuaW1wb3J0IHsgQWxsRGF5Um93IH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93J1xuaW1wb3J0IHsgSG91ckxhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvdXItbGFiZWwvaG91ci1sYWJlbCdcbmltcG9ydCB7IFJlc291cmNlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsJ1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlWZXJ0aWNhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRyZXNvdXJjZXMsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRzbG90RHVyYXRpb24sXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGhvdXJzID0gZ2V0Vmlld0hvdXJzKHtcblx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGFsbERhdGVzOiBbY3VycmVudERhdGVdLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3VyczogcmVzb3VyY2VzXG5cdFx0XHQubWFwKChyKSA9PiByLmJ1c2luZXNzSG91cnMpXG5cdFx0XHQuZmlsdGVyKEJvb2xlYW4pIGFzIChCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdKVtdLFxuXHR9KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiBrZXlzLmNvbC50aW1lLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwIGJvcmRlci1yLTAnLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IERheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdDxIb3VyTGFiZWwgZGF0ZT17ZGF0ZX0gLz5cblx0XHRcdDwvZGl2PlxuXHRcdCksXG5cdH1cblxuXHRjb25zdCBjb2x1bW5zID0gcmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+ICh7XG5cdFx0aWQ6IGtleXMuY29sLmRheShjdXJyZW50RGF0ZSwgcmVzb3VyY2UuaWQpLFxuXHRcdHJlc291cmNlSWQ6IHJlc291cmNlLmlkLFxuXHRcdHJlc291cmNlLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGRheTogY3VycmVudERhdGUsXG5cdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8VmVydGljYWxHcmlkXG5cdFx0XHRhbGxEYXlSb3c9e1xuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsXCI+XG5cdFx0XHRcdFx0PEFsbERheUNlbGwgLz5cblx0XHRcdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+IChcblx0XHRcdFx0XHRcdDxBbGxEYXlSb3dcblx0XHRcdFx0XHRcdFx0Y2xhc3Nlcz17eyBjZWxsOiAnbWluLXctMjAgYm9yZGVyLXIhJyB9fVxuXHRcdFx0XHRcdFx0XHRkYXlzPXtbY3VycmVudERhdGVdfVxuXHRcdFx0XHRcdFx0XHRrZXk9e2tleXMuYWxsRGF5Um93KHJlc291cmNlLmlkKX1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRzaG93U3BhY2VyPXtmYWxzZX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0fVxuXHRcdFx0Y2xhc3Nlcz17eyBib2R5OiAndy1mdWxsJywgaGVhZGVyOiAndy1mdWxsJyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtZGF5XCJcblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0XHRzbG90RHVyYXRpb25NaW51dGVzPXtzbG90RHVyYXRpb259XG5cdFx0PlxuXHRcdFx0ey8qIEhlYWRlciAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXsnZmxleCBib3JkZXItYiBoLTEyIGZsZXgtMSd9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtbW9udGgtaGVhZGVyXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCBib3JkZXItciB3LTE2IHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCIgLz5cblx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0PFJlc291cmNlQ2VsbFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWluLXctMjAgZmxleC0xXCJcblx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KCdyZXNvdXJjZS1jZWxsJywgcmVzb3VyY2UuaWQpfVxuXHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCkpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZURheUhvcml6b250YWwgfSBmcm9tICcuL3Jlc291cmNlLWRheS1ob3Jpem9udGFsJ1xuaW1wb3J0IHsgUmVzb3VyY2VEYXlWZXJ0aWNhbCB9IGZyb20gJy4vcmVzb3VyY2UtZGF5LXZlcnRpY2FsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBvcmllbnRhdGlvbiB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGlmIChvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuXHRcdHJldHVybiA8UmVzb3VyY2VEYXlWZXJ0aWNhbCAvPlxuXHR9XG5cblx0cmV0dXJuIDxSZXNvdXJjZURheUhvcml6b250YWwgLz5cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgUmVzb3VyY2VFdmVudEdyaWQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvcmVzb3VyY2UtZXZlbnQtZ3JpZCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGdldE1vbnRoRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlTW9udGhIb3Jpem9udGFsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdC8vIEdlbmVyYXRlIGNhbGVuZGFyIGdyaWQgLSBkYXlzIG9mIHRoZSBtb250aFxuXHRjb25zdCBtb250aERheXMgPSB1c2VNZW1vPERheWpzW10+KCgpID0+IHtcblx0XHRyZXR1cm4gZ2V0TW9udGhEYXlzKGN1cnJlbnREYXRlKVxuXHR9LCBbY3VycmVudERhdGVdKVxuXG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlRXZlbnRHcmlkIGRheXM9e21vbnRoRGF5c30+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctMjAgc206dy00MCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdHJ1bmNhdGUgcHgtMSBtaW4tdy0wXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdHttb250aERheXMubWFwKChkYXksIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGtleSA9IGByZXNvdXJjZS1tb250aC1oZWFkZXItJHtkYXkudG9JU09TdHJpbmcoKX1gXG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LTIwIGJvcmRlci1iIGJvcmRlci1yIHNocmluay0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGZsZXgtY29sXCJcblx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShrZXksICdhbmltYXRlZCcpfVxuXHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17a2V5cy5saXN0S2V5KGtleSwgJ21vdGlvbicpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LW1lZGl1bVwiPntkYXkuZm9ybWF0KCdEJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdkZGQnKX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L1Jlc291cmNlRXZlbnRHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUmVzb3VyY2VDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL3Jlc291cmNlLWNlbGwnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZU1vbnRoVmVydGljYWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCByZXNvdXJjZXMgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3Qgc3RhcnRPZk1vbnRoID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuXHRjb25zdCBkYXlzSW5Nb250aCA9IEFycmF5LmZyb20oXG5cdFx0eyBsZW5ndGg6IGN1cnJlbnREYXRlLmRheXNJbk1vbnRoKCkgfSxcblx0XHQoXywgaSkgPT4gc3RhcnRPZk1vbnRoLmFkZChpLCAnZGF5Jylcblx0KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiBrZXlzLmNvbC5kYXRlLFxuXHRcdGRheXM6IGRheXNJbk1vbnRoLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwIGJvcmRlci1yLTAnLFxuXHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0XHRub0V2ZW50czogdHJ1ZSxcblx0XHRyZW5kZXJDZWxsOiAoZGF0ZTogRGF5anMpID0+IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHAtMiB0ZXh0LXJpZ2h0IHRleHQtWzEwcHhdIHNtOnRleHQteHMgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cblx0XHRcdFx0PHNwYW4+e2RhdGUuZm9ybWF0KCdEJyl9PC9zcGFuPlxuXHRcdFx0XHQ8c3Bhbj57ZGF0ZS5mb3JtYXQoJ2RkZCcpfTwvc3Bhbj5cblx0XHRcdDwvZGl2PlxuXHRcdCksXG5cdH1cblxuXHRjb25zdCBjb2x1bW5zID0gcmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+ICh7XG5cdFx0aWQ6IGtleXMuY29sLnJlc291cmNlKCdtb250aCcsIHJlc291cmNlLmlkKSxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRkYXlzOiBkYXlzSW5Nb250aCxcblx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6ICd3LWZ1bGwnLCBib2R5OiAndy1mdWxsJyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtbW9udGgtdmVydGljYWwtZ3JpZFwiXG5cdFx0PlxuXHRcdFx0ey8qIEhlYWRlciAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXsnZmxleCBib3JkZXItYiBoLTEyIGZsZXgtMSd9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtbW9udGgtaGVhZGVyXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCBib3JkZXItciB3LTE2IHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCIgLz5cblx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0PFJlc291cmNlQ2VsbFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWluLXctMjAgZmxleC0xXCJcblx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KCdyZXNvdXJjZS1jZWxsJywgcmVzb3VyY2UuaWQpfVxuXHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCkpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbCB9IGZyb20gJy4vcmVzb3VyY2UtbW9udGgtaG9yaXpvbnRhbCdcbmltcG9ydCB7IFJlc291cmNlTW9udGhWZXJ0aWNhbCB9IGZyb20gJy4vcmVzb3VyY2UtbW9udGgtdmVydGljYWwnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZU1vbnRoVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgb3JpZW50YXRpb24gfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRpZiAob3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcpIHtcblx0XHRyZXR1cm4gPFJlc291cmNlTW9udGhWZXJ0aWNhbCAvPlxuXHR9XG5cblx0cmV0dXJuIDxSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbCAvPlxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSgpIHtcblx0Y29uc3Qge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdHJlc291cmNlcyxcblx0XHR3ZWVrVmlld0dyYW51bGFyaXR5LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZGVuRGF5cyxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCBpc0hvdXJseSA9IHdlZWtWaWV3R3JhbnVsYXJpdHkgPT09ICdob3VybHknXG5cblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IHZpc2libGVEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0aGlkZGVuRGF5c1xuXHRcdFx0XHQ/IHdlZWtEYXlzLmZpbHRlcigoZGF5KSA9PiAhaGlkZGVuRGF5cy5oYXMoZGF5LmRheSgpKSlcblx0XHRcdFx0OiB3ZWVrRGF5cyxcblx0XHRbd2Vla0RheXMsIGhpZGRlbkRheXNdXG5cdClcblxuXHRjb25zdCByZXNvdXJjZUJ1c2luZXNzSG91cnMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IHJlc291cmNlcy5mbGF0TWFwKChyKSA9PiAoci5idXNpbmVzc0hvdXJzID8gW3IuYnVzaW5lc3NIb3Vyc10gOiBbXSkpLFxuXHRcdFtyZXNvdXJjZXNdXG5cdClcblxuXHRyZXR1cm4ge1xuXHRcdGlzSG91cmx5LFxuXHRcdHJlc291cmNlcyxcblx0XHR3ZWVrRGF5cyxcblx0XHR2aXNpYmxlRGF5cyxcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3Vycyxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgaXNUb2RheSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuaW50ZXJmYWNlIFJlc291cmNlV2Vla0hvcml6b250YWxEYXlIZWFkZXJQcm9wcyB7XG5cdGRheXM6IERheWpzW11cbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlV2Vla0hvcml6b250YWxEYXlIZWFkZXI6IFJlYWN0LkZDPFxuXHRSZXNvdXJjZVdlZWtIb3Jpem9udGFsRGF5SGVhZGVyUHJvcHNcbj4gPSAoeyBkYXlzIH0pID0+IHtcblx0Y29uc3QgeyB3ZWVrVmlld0dyYW51bGFyaXR5IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGlzSG91cmx5ID0gd2Vla1ZpZXdHcmFudWxhcml0eSA9PT0gJ2hvdXJseSdcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHR7ZGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcblx0XHRcdFx0Y29uc3QgdG9kYXkgPSBpc1RvZGF5KGRheSlcblx0XHRcdFx0Y29uc3Qga2V5ID0ga2V5cy5oZWFkZXIud2Vlay5kYXkoZGF5KVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0J3Nocmluay0wIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBib3JkZXItYiBmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXIgZm9udC1tZWRpdW0gbWluLXctMjAnLFxuXHRcdFx0XHRcdFx0XHR0b2RheSAmJiAnYmctcHJpbWFyeS8xMCBmb250LWJvbGQnXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuaGVhZGVyLnJlc291cmNlLndlZWtEYXl9XG5cdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoa2V5LCAnYW5pbWF0ZWQnKX1cblx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2tleXMubGlzdEtleShrZXksICdtb3Rpb24nKX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0aXNIb3VybHkgPyAnc3RpY2t5IGxlZnQtMS8yJyA6ICd3LWZ1bGwgdGV4dC1jZW50ZXInXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0cnVuY2F0ZSB3LWZ1bGxcIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnRCcpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSB9IGZyb20gJy4uL3VzZS1yZXNvdXJjZS13ZWVrLXZpZXctZGF0YSdcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlc291cmNlV2Vla0hvcml6b250YWxEYXRhKCkge1xuXHRjb25zdCB7XG5cdFx0aXNIb3VybHksXG5cdFx0d2Vla0RheXMsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnMsXG5cdH0gPSB1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSgpXG5cblx0Y29uc3Qgd2Vla0hvdXJzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKCFpc0hvdXJseSkgcmV0dXJuIFtdXG5cdFx0cmV0dXJuIHdlZWtEYXlzLm1hcCgoZGF5KSA9PlxuXHRcdFx0Z2V0Vmlld0hvdXJzKHtcblx0XHRcdFx0cmVmZXJlbmNlRGF0ZTogZGF5LFxuXHRcdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHRcdFx0fSlcblx0XHQpXG5cdH0sIFtcblx0XHRpc0hvdXJseSxcblx0XHR3ZWVrRGF5cyxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3Vycyxcblx0XSlcblxuXHRyZXR1cm4geyB3ZWVrSG91cnMgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJlc291cmNlRXZlbnRHcmlkIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQnXG5pbXBvcnQgeyBUaW1lSGVhZGVyUm93IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3RpbWUtaGVhZGVyLXJvdydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSB9IGZyb20gJy4uL3VzZS1yZXNvdXJjZS13ZWVrLXZpZXctZGF0YSdcbmltcG9ydCB7IFJlc291cmNlV2Vla0hvcml6b250YWxEYXlIZWFkZXIgfSBmcm9tICcuL3Jlc291cmNlLXdlZWstaG9yaXpvbnRhbC1kYXktaGVhZGVyJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VXZWVrSG9yaXpvbnRhbERhdGEgfSBmcm9tICcuL3VzZS1yZXNvdXJjZS13ZWVrLWhvcml6b250YWwtZGF0YSdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlV2Vla0hvcml6b250YWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgeyBpc0hvdXJseSwgd2Vla0RheXMgfSA9IHVzZVJlc291cmNlV2Vla1ZpZXdEYXRhKClcblx0Y29uc3QgeyB3ZWVrSG91cnMgfSA9IHVzZVJlc291cmNlV2Vla0hvcml6b250YWxEYXRhKClcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUV2ZW50R3JpZFxuXHRcdFx0Y2xhc3Nlcz17e1xuXHRcdFx0XHRoZWFkZXI6IGNuKGlzSG91cmx5ID8gJ2gtMjQnIDogJ2gtMTInLCAnbWluLXctZnVsbCcpLFxuXHRcdFx0XHRib2R5OiAnbWluLXctZnVsbCcsXG5cdFx0XHRcdGNlbGw6ICdtaW4tdy0yMCBmbGV4LTEnLFxuXHRcdFx0fX1cblx0XHRcdGRheXM9e2lzSG91cmx5ID8gd2Vla0hvdXJzIDogd2Vla0RheXN9XG5cdFx0XHRncmlkVHlwZT17aXNIb3VybHkgPyAnaG91cicgOiAnZGF5J31cblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctMjAgc206dy00MCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdHJ1bmNhdGUgcHgtMSBtaW4tdy0wXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0PFJlc291cmNlV2Vla0hvcml6b250YWxEYXlIZWFkZXIgZGF5cz17d2Vla0RheXN9IC8+XG5cdFx0XHRcdHtpc0hvdXJseSAmJiAoXG5cdFx0XHRcdFx0PFRpbWVIZWFkZXJSb3dcblx0XHRcdFx0XHRcdGRlbGF5U3RlcD17MC4wMDV9XG5cdFx0XHRcdFx0XHRob3Vycz17d2Vla0hvdXJzLmZsYXQoKX1cblx0XHRcdFx0XHRcdHZpZXc9XCJ3ZWVrXCJcblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFsbERheUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1jZWxsJ1xuaW1wb3J0IHsgQWxsRGF5Um93IH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93J1xuaW1wb3J0IHsgSG91ckxhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvdXItbGFiZWwvaG91ci1sYWJlbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB7IHVzZVJlc291cmNlV2Vla1ZpZXdEYXRhIH0gZnJvbSAnLi4vdXNlLXJlc291cmNlLXdlZWstdmlldy1kYXRhJ1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrVmVydGljYWxEYXlIZWFkZXIgfSBmcm9tICcuL3Jlc291cmNlLXdlZWstdmVydGljYWwtZGF5LWhlYWRlcidcbmltcG9ydCB7IFJlc291cmNlV2Vla1ZlcnRpY2FsUmVzb3VyY2VIZWFkZXIgfSBmcm9tICcuL3Jlc291cmNlLXdlZWstdmVydGljYWwtcmVzb3VyY2UtaGVhZGVyJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VXZWVrVmVydGljYWxEYXRhIH0gZnJvbSAnLi91c2UtcmVzb3VyY2Utd2Vlay12ZXJ0aWNhbC1kYXRhJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmVydGljYWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IGlzSG91cmx5LCByZXNvdXJjZXMsIHdlZWtEYXlzLCB2aXNpYmxlRGF5cyB9ID1cblx0XHR1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSgpXG5cdGNvbnN0IHsgaG91cnMsIGNvbHVtbnMgfSA9IHVzZVJlc291cmNlV2Vla1ZlcnRpY2FsRGF0YSgpXG5cdGNvbnN0IHsgc2xvdER1cmF0aW9uIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB1c2VNZW1vKFxuXHRcdCgpID0+ICh7XG5cdFx0XHRpZDogaXNIb3VybHkgPyBrZXlzLmNvbC50aW1lIDoga2V5cy5jb2wuZGF0ZSxcblx0XHRcdGRheXM6IGlzSG91cmx5ID8gaG91cnMgOiB3ZWVrRGF5cyxcblx0XHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdFx0Y2xhc3NOYW1lOlxuXHRcdFx0XHQnc2hyaW5rLTAgdy0xNiBtaW4tdy0xNiBtYXgtdy0xNiBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCBib3JkZXItci0wJyxcblx0XHRcdGdyaWRUeXBlOiBpc0hvdXJseSA/ICgnaG91cicgYXMgY29uc3QpIDogKCdkYXknIGFzIGNvbnN0KSxcblx0XHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdFx0cmVuZGVyQ2VsbDogKGRhdGU6IERheWpzKSA9PiAoXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHAtMiB0ZXh0LXJpZ2h0IHRleHQtWzEwcHhdIHNtOnRleHQteHMgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cblx0XHRcdFx0XHR7aXNIb3VybHkgPyAoXG5cdFx0XHRcdFx0XHQ8SG91ckxhYmVsIGRhdGU9e2RhdGV9IC8+XG5cdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdDxzcGFuPntkYXRlLmZvcm1hdCgnZGRkJyl9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj57ZGF0ZS5mb3JtYXQoJ0QnKX08L3NwYW4+XG5cdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCksXG5cdFx0fSksXG5cdFx0W2hvdXJzLCBpc0hvdXJseSwgd2Vla0RheXNdXG5cdClcblxuXHRjb25zdCBhbGxEYXlSb3cgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoIWlzSG91cmx5KSByZXR1cm4gdW5kZWZpbmVkXG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGxcIj5cblx0XHRcdFx0PEFsbERheUNlbGwgLz5cblx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0PEFsbERheVJvd1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcz17eyBjZWxsOiAnbWluLXctMjAgZmxleC0xIGJvcmRlci1yIScgfX1cblx0XHRcdFx0XHRcdGRheXM9e3Zpc2libGVEYXlzfVxuXHRcdFx0XHRcdFx0a2V5PXtrZXlzLmFsbERheVJvdyhyZXNvdXJjZS5pZCl9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRzaG93U3BhY2VyPXtmYWxzZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpKX1cblx0XHRcdDwvZGl2PlxuXHRcdClcblx0fSwgW2lzSG91cmx5LCByZXNvdXJjZXMsIHZpc2libGVEYXlzXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17YWxsRGF5Um93fVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6IGlzSG91cmx5ID8gJ2gtMjQnIDogJ2gtMTInIH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIC4uLmNvbHVtbnNdfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS13ZWVrXCJcblx0XHRcdGdyaWRUeXBlPXtpc0hvdXJseSA/ICdob3VyJyA6ICdkYXknfVxuXHRcdFx0c2xvdER1cmF0aW9uTWludXRlcz17c2xvdER1cmF0aW9ufVxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0PFJlc291cmNlV2Vla1ZlcnRpY2FsUmVzb3VyY2VIZWFkZXJcblx0XHRcdFx0XHRyZXNvdXJjZXM9e3Jlc291cmNlc31cblx0XHRcdFx0XHR2aXNpYmxlRGF5cz17dmlzaWJsZURheXN9XG5cdFx0XHRcdC8+XG5cdFx0XHRcdHtpc0hvdXJseSAmJiA8UmVzb3VyY2VXZWVrVmVydGljYWxEYXlIZWFkZXIgY29sdW1ucz17Y29sdW1uc30gLz59XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgaXNUb2RheSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuaW50ZXJmYWNlIFJlc291cmNlV2Vla1ZlcnRpY2FsRGF5SGVhZGVyUHJvcHMge1xuXHRjb2x1bW5zOiBBcnJheTx7IGRheT86IERheWpzOyByZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyIH0+XG59XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVdlZWtWZXJ0aWNhbERheUhlYWRlcjogUmVhY3QuRkM8XG5cdFJlc291cmNlV2Vla1ZlcnRpY2FsRGF5SGVhZGVyUHJvcHNcbj4gPSAoeyBjb2x1bW5zIH0pID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTJcIj5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic2hyaW5rLTAgdy0xNiBib3JkZXItciBib3JkZXItYiB6LTIwIGJnLWJhY2tncm91bmQgc3RpY2t5IGxlZnQtMFwiPlxuXHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJweC0yIGgtZnVsbCB3LWZ1bGwgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1zdGFydCBmb250LW1lZGl1bVwiPlxuXHRcdFx0XHRcdHtjdXJyZW50RGF0ZS53ZWVrKCl9XG5cdFx0XHRcdDwvc3Bhbj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0e2NvbHVtbnMubWFwKChjb2wsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRheSA9IGNvbC5kYXlcblx0XHRcdFx0aWYgKCFkYXkpIHJldHVybiBudWxsXG5cdFx0XHRcdGNvbnN0IHRvZGF5ID0gaXNUb2RheShkYXkpXG5cdFx0XHRcdGNvbnN0IGtleSA9IGtleXMuaGVhZGVyLndlZWsuaG91cihkYXksIGNvbC5yZXNvdXJjZUlkID8/ICcnKVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0J21pbi13LTIwIGZsZXgtMSBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgYm9yZGVyLWIgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC14cyBzaHJpbmstMCBiZy1iYWNrZ3JvdW5kJyxcblx0XHRcdFx0XHRcdFx0dG9kYXkgJiYgJ2JnLXByaW1hcnkvMTAgZm9udC1ib2xkJ1xuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmhlYWRlci5yZXNvdXJjZS50aW1lTGFiZWwoXG5cdFx0XHRcdFx0XHRcdCd3ZWVrJyxcblx0XHRcdFx0XHRcdFx0ZGF5LmZvcm1hdCgnSEgnKVxuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShrZXksICdhbmltYXRlZCcpfVxuXHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17a2V5cy5saXN0S2V5KGtleSwgJ21vdGlvbicpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0cnVuY2F0ZSB3LWZ1bGwgdGV4dC1jZW50ZXJcIj5cblx0XHRcdFx0XHRcdFx0e2RheS5mb3JtYXQoJ2RkZCcpfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdEJyl9XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5pbnRlcmZhY2UgUmVzb3VyY2VXZWVrVmVydGljYWxSZXNvdXJjZUhlYWRlclByb3BzIHtcblx0cmVzb3VyY2VzOiBSZXNvdXJjZVtdXG5cdHZpc2libGVEYXlzOiBEYXlqc1tdXG59XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVdlZWtWZXJ0aWNhbFJlc291cmNlSGVhZGVyOiBSZWFjdC5GQzxcblx0UmVzb3VyY2VXZWVrVmVydGljYWxSZXNvdXJjZUhlYWRlclByb3BzXG4+ID0gKHsgcmVzb3VyY2VzIH0pID0+IHtcblx0Y29uc3QgeyB3ZWVrVmlld0dyYW51bGFyaXR5LCB0LCBjdXJyZW50RGF0ZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCBpc0hvdXJseSA9IHdlZWtWaWV3R3JhbnVsYXJpdHkgPT09ICdob3VybHknXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMlwiPlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCB3LTE2IGJvcmRlci1yIHotMjAgYmctYmFja2dyb3VuZCBzdGlja3kgbGVmdC0wXCI+XG5cdFx0XHRcdDxzcGFuXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdweC0yIGgtZnVsbCB3LWZ1bGwgZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LWNlbnRlciBtaW4tdy0wJyxcblx0XHRcdFx0XHRcdGlzSG91cmx5ID8gJ2p1c3RpZnktZW5kJyA6ICdqdXN0aWZ5LWNlbnRlciBib3JkZXItYidcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidHJ1bmNhdGUgdy1mdWxsXCI+e3QoJ3dlZWsnKX08L3NwYW4+XG5cdFx0XHRcdFx0eyFpc0hvdXJseSAmJiAoXG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmQgdHJ1bmNhdGUgdy1mdWxsXCI+XG5cdFx0XHRcdFx0XHRcdHtjdXJyZW50RGF0ZS53ZWVrKCl9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxSZXNvdXJjZUNlbGxcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm1pbi13LTIwIGZsZXgtMSBib3JkZXItYlwiXG5cdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleSgncmVzb3VyY2UtY2VsbCcsIHJlc291cmNlLmlkKX1cblx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0J3N0aWNreSB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRydW5jYXRlJyxcblx0XHRcdFx0XHRcdFx0XHRpc0hvdXJseSA/ICdsZWZ0LTEvNCcgOiAnbGVmdC0xJ1xuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7cmVzb3VyY2UudGl0bGV9XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L1Jlc291cmNlQ2VsbD5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VXZWVrVmlld0RhdGEgfSBmcm9tICcuLi91c2UtcmVzb3VyY2Utd2Vlay12aWV3LWRhdGEnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXNvdXJjZVdlZWtWZXJ0aWNhbERhdGEoKSB7XG5cdGNvbnN0IHtcblx0XHRpc0hvdXJseSxcblx0XHRyZXNvdXJjZXMsXG5cdFx0d2Vla0RheXMsXG5cdFx0dmlzaWJsZURheXMsXG5cdFx0Y3VycmVudERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnMsXG5cdH0gPSB1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSgpXG5cblx0Y29uc3QgZ2V0SG91cnMgPSB1c2VDYWxsYmFjayhcblx0XHQoZGF0ZTogRGF5anMpID0+IHtcblx0XHRcdHJldHVybiBnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBkYXRlLFxuXHRcdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0YWxsRGF0ZXM6IHdlZWtEYXlzLFxuXHRcdFx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnMsXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W2J1c2luZXNzSG91cnMsIGhpZGVOb25CdXNpbmVzc0hvdXJzLCB3ZWVrRGF5cywgcmVzb3VyY2VCdXNpbmVzc0hvdXJzXVxuXHQpXG5cblx0Y29uc3QgaG91cnMgPSB1c2VNZW1vKCgpID0+IGdldEhvdXJzKGN1cnJlbnREYXRlKSwgW2N1cnJlbnREYXRlLCBnZXRIb3Vyc10pXG5cdGNvbnN0IGhvdXJseUNvbHVtbnMgPSB1c2VNZW1vKFxuXHRcdCgpID0+XG5cdFx0XHRyZXNvdXJjZXMuZmxhdE1hcCgocmVzb3VyY2UpID0+XG5cdFx0XHRcdHZpc2libGVEYXlzLm1hcCgoZGF5KSA9PiAoe1xuXHRcdFx0XHRcdGlkOiBrZXlzLmNvbC5kYXkoZGF5LCByZXNvdXJjZS5pZCksXG5cdFx0XHRcdFx0Y2xhc3NOYW1lOiAnbWluLXctMjAgZmxleC0xJyxcblx0XHRcdFx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRcdFx0XHRyZXNvdXJjZSxcblx0XHRcdFx0XHRkYXksXG5cdFx0XHRcdFx0ZGF5czogZ2V0SG91cnMoZGF5KSxcblx0XHRcdFx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdFx0XHR9KSlcblx0XHRcdCksXG5cdFx0W3Jlc291cmNlcywgdmlzaWJsZURheXMsIGdldEhvdXJzXVxuXHQpXG5cblx0Ly8gVXNlcyBgd2Vla0RheXNgIChhbGwgNykgaW50ZW50aW9uYWxseSwgbm90IGB2aXNpYmxlRGF5c2AuIE5vbi1jb250aWd1b3VzXG5cdC8vIHZpc2libGUgZGF5cyB3b3VsZCBicmVhayBtdWx0aS1kYXkgZXZlbnQgcG9zaXRpb25pbmcsIHNvIGBoaWRkZW5EYXlzYCBpc1xuXHQvLyBub3Qgc3VwcG9ydGVkIGluIGRhaWx5IGdyYW51bGFyaXR5LlxuXHRjb25zdCBkYWlseUNvbHVtbnMgPSB1c2VNZW1vKFxuXHRcdCgpID0+XG5cdFx0XHRyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKHtcblx0XHRcdFx0aWQ6IGtleXMuY29sLnJlc291cmNlKCd3ZWVrJywgcmVzb3VyY2UuaWQpLFxuXHRcdFx0XHRjbGFzc05hbWU6ICdtaW4tdy0yMCBmbGV4LTEnLFxuXHRcdFx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRcdFx0cmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG5cdFx0XHRcdHJlc291cmNlLFxuXHRcdFx0XHRkYXlzOiB3ZWVrRGF5cyxcblx0XHRcdFx0Z3JpZFR5cGU6ICdkYXknIGFzIGNvbnN0LFxuXHRcdFx0fSkpLFxuXHRcdFtyZXNvdXJjZXMsIHdlZWtEYXlzXVxuXHQpXG5cblx0Y29uc3QgY29sdW1ucyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmIChpc0hvdXJseSkgcmV0dXJuIGhvdXJseUNvbHVtbnNcblx0XHRyZXR1cm4gZGFpbHlDb2x1bW5zXG5cdH0sIFtpc0hvdXJseSwgaG91cmx5Q29sdW1ucywgZGFpbHlDb2x1bW5zXSlcblxuXHRyZXR1cm4geyBob3VycywgY29sdW1ucyB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrSG9yaXpvbnRhbCB9IGZyb20gJy4vaG9yaXpvbnRhbC9yZXNvdXJjZS13ZWVrLWhvcml6b250YWwnXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtWZXJ0aWNhbCB9IGZyb20gJy4vdmVydGljYWwvcmVzb3VyY2Utd2Vlay12ZXJ0aWNhbCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlV2Vla1ZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IG9yaWVudGF0aW9uIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKG9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XG5cdFx0cmV0dXJuIDxSZXNvdXJjZVdlZWtWZXJ0aWNhbCAvPlxuXHR9XG5cblx0cmV0dXJuIDxSZXNvdXJjZVdlZWtIb3Jpem9udGFsIC8+XG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IENhbGVuZGFyRG5kQ29udGV4dCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnLWFuZC1kcm9wL2NhbGVuZGFyLWRuZC1jb250ZXh0J1xuaW1wb3J0IHsgRXZlbnRGb3JtRGlhbG9nIH0gZnJvbSAnQC9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS1kaWFsb2cnXG5pbXBvcnQgeyBIZWFkZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvaGVhZGVyJ1xuaW1wb3J0IHsgUmVzb3VyY2VEYXlWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3J1xuaW1wb3J0IHsgUmVzb3VyY2VNb250aFZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldydcbmltcG9ydCB7IFJlc291cmNlV2Vla1ZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhckJvZHk6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IHZpZXcgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB2aWV3TWFwOiBSZWNvcmQ8c3RyaW5nLCBSZWFjdC5SZWFjdE5vZGU+ID0ge1xuXHRcdG1vbnRoOiA8UmVzb3VyY2VNb250aFZpZXcga2V5PVwibW9udGhcIiAvPixcblx0XHR3ZWVrOiA8UmVzb3VyY2VXZWVrVmlldyBrZXk9XCJ3ZWVrXCIgLz4sXG5cdFx0ZGF5OiA8UmVzb3VyY2VEYXlWaWV3IGtleT1cImRheVwiIC8+LFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIHctZnVsbCBoLWZ1bGxcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJpbGFteS1yZXNvdXJjZS1jYWxlbmRhclwiXG5cdFx0PlxuXHRcdFx0PEhlYWRlciBjbGFzc05hbWU9XCJwLTFcIiAvPlxuXG5cdFx0XHR7LyogQ2FsZW5kYXIgQm9keSB3aXRoIEFuaW1hdGVkU2VjdGlvbiBmb3IgdmlldyB0cmFuc2l0aW9ucyAqL31cblx0XHRcdDxDYWxlbmRhckRuZENvbnRleHQ+XG5cdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bY2FsYygxMDAlLTMuNXJlbSldIEBjb250YWluZXIvY2FsZW5kYXItYm9keVwiXG5cdFx0XHRcdFx0ZGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiXG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17dmlld31cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYm9yZGVyIGgtZnVsbCB3LWZ1bGxcIiBkYXRhLXRlc3RpZD1cImNhbGVuZGFyLWJvZHlcIj5cblx0XHRcdFx0XHRcdHt2aWV3TWFwW3ZpZXddfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdDwvQ2FsZW5kYXJEbmRDb250ZXh0PlxuXG5cdFx0XHR7LyogRXZlbnQgRm9ybSBEaWFsb2cgKi99XG5cdFx0XHQ8RXZlbnRGb3JtRGlhbG9nIC8+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXIgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7XG5cdElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCxcblx0SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQge1xuXHREQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRFVkVOVF9CQVJfSEVJR0hULFxuXHRHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0V0VFS19EQVlTX05VTUJFUl9NQVAsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IG5vcm1hbGl6ZUV2ZW50cywgc2FmZURhdGUsIHRvSGlkZGVuRGF5c1NldCB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhckJvZHkgfSBmcm9tICcuL3Jlc291cmNlLWNhbGVuZGFyLWJvZHknXG5cbmV4cG9ydCBjb25zdCBJbGFteVJlc291cmNlQ2FsZW5kYXI6IFJlYWN0LkZDPElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BzPiA9ICh7XG5cdGV2ZW50cyA9IFtdLFxuXHRyZXNvdXJjZXMgPSBbXSxcblx0Zmlyc3REYXlPZldlZWsgPSAnc3VuZGF5Jyxcblx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRpbml0aWFsRGF0ZSxcblx0ZGlzYWJsZURyYWdBbmREcm9wID0gZmFsc2UsXG5cdGRheU1heEV2ZW50cyA9IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGV2ZW50U3BhY2luZyA9IEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRldmVudEhlaWdodCA9IEVWRU5UX0JBUl9IRUlHSFQsXG5cdGhpZGRlbkRheXMsXG5cdC4uLnByb3BzXG59KSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlQ2FsZW5kYXJQcm92aWRlclxuXHRcdFx0ZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3A9e2Rpc2FibGVEcmFnQW5kRHJvcH1cblx0XHRcdGV2ZW50SGVpZ2h0PXtldmVudEhlaWdodH1cblx0XHRcdGV2ZW50U3BhY2luZz17ZXZlbnRTcGFjaW5nfVxuXHRcdFx0ZXZlbnRzPXtub3JtYWxpemVFdmVudHM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50Pihcblx0XHRcdFx0ZXZlbnRzXG5cdFx0XHQpfVxuXHRcdFx0Zmlyc3REYXlPZldlZWs9e1dFRUtfREFZU19OVU1CRVJfTUFQW2ZpcnN0RGF5T2ZXZWVrXX1cblx0XHRcdGhpZGRlbkRheXM9e3RvSGlkZGVuRGF5c1NldChoaWRkZW5EYXlzKX1cblx0XHRcdGluaXRpYWxEYXRlPXtzYWZlRGF0ZShpbml0aWFsRGF0ZSl9XG5cdFx0XHRpbml0aWFsVmlldz17aW5pdGlhbFZpZXd9XG5cdFx0XHRyZXNvdXJjZXM9e3Jlc291cmNlc31cblx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PFJlc291cmNlQ2FsZW5kYXJCb2R5IC8+XG5cdFx0PC9SZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXI+XG5cdClcbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICJBQUVBLGdCQUFTLGVDRlQsMEJBQ0MsYUFFQSxzQkNGRCxlQUFTLGNBQ1Qsa0JBQVMsd0JDRFQsc0JBQ0EsMENBQ0EsOENBQ0EsK0NBQ0EsMkNBQ0EsZ0RBQ0EsdUNBQ0EseUNBQ0Esb0NBQ0Esd0NBQ0EsMkNBYUEsSUFBSSxHQUVFLEdBQWdDLENBQUMsRUFBUyxFQUFZLElBQWlCLENBQzVFLElBQU0sRUFBUSxFQUFXLFVBR25CLEVBQXFCLEVBQWEsR0FBRyxXQUMzQyxFQUFhLEdBQUcsV0FBYSxDQUFDLElBQXNCLENBRW5ELE9BREEsR0FBa0IsRUFDWCxFQUFtQixDQUFRLEdBSW5DLElBQThCLFFBQXhCLEVBQ3NCLE1BQXRCLEdBQWdCLEVBRXRCLFNBQVMsQ0FBZSxDQUN2QixFQUNBLEVBQ2MsQ0FDZCxJQUFNLEVBQU0sRUFBMkIsSUFBSSxXQUFhLEdBQ3hELEdBQUksQ0FBQyxFQUFJLE9BQU8sRUFFaEIsSUFBTSxFQUFpQixFQUNyQixHQUFHLEVBQU8sT0FBTyxxQkFBcUIsRUFBRyxDQUFFLEVBQzNDLFVBQVUsRUFDWixHQUFJLEVBQU8sVUFBVSxJQUFNLEVBQzFCLE9BQU8sRUFBTyxHQUFHLEVBQUksRUFBSSxFQUUxQixPQUFPLEVBS1IsRUFBTSxRQUFVLFFBQVMsQ0FBQyxFQUF1QixFQUFvQixDQUNwRSxJQUFNLEVBQVMsRUFBZ0IsS0FBSyxLQUFNLEVBQU0sQ0FBUSxFQUN4RCxPQUFPLEVBQWdCLEtBQU0sQ0FBTSxHQUlwQyxFQUFNLE1BQVEsR0FJZixHQUFNLE9BQU8sRUFBTyxFQUNwQixHQUFNLE9BQU8sRUFBVSxFQUN2QixHQUFNLE9BQU8sRUFBYSxFQUMxQixHQUFNLE9BQU8sRUFBYyxFQUMzQixHQUFNLE9BQU8sRUFBUyxFQUN0QixHQUFN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LE9BQVMsTUFBTyxFQUM5QyxRQUFTLENBQUMsRUFBVSxHQUFHLENBQU8sRUFDOUIsY0FBWSxnQkFDWixTQUFVLEVBQVcsT0FBUyxNQUM5QixvQkFBcUIsRUFOdEIsU0FRQyxHQU1FLE1BTkYsQ0FBSyxVQUFVLHVCQUFmLFNBTUUsQ0FMRCxHQUFDLEdBQUQsQ0FDQyxVQUFXLEVBQ1gsWUFBYSxFQUNkLEVBQ0MsR0FBWSxHQUFDLEdBQUQsQ0FBK0IsUUFBUyxFQUFTLEdBQzdELEVBQ0QsNENJMUVHLElBQU0sR0FBNkIsSUFBTSxDQUMvQyxJQUFRLGVBQWdCLEVBQXdCLEVBRWhELEdBQUksSUFBZ0IsV0FDbkIsT0FBTyxHQUFDLEdBQUQsRUFBc0IsRUFHOUIsT0FBTyxHQUFDLEdBQUQsRUFBd0IsdURDRnpCLElBQU0sR0FBaUMsSUFBTSxDQUNuRCxJQUFRLFFBQVMsRUFBd0IsRUFRekMsT0FDQyxHQXFCRSxNQXJCRixDQUNDLFVBQVUsOEJBQ1YsY0FBWSwwQkFGYixTQXFCRSxDQWpCRCxHQUFDLEdBQUQsQ0FBUSxVQUFVLE1BQU0sRUFHeEIsR0FVRSxHQVZGLFVBQ0MsR0FRRSxFQVJGLENBQ0MsVUFBVSx3REFDVixVQUFVLGFBQ1YsY0FBZSxFQUhoQixTQUtDLEdBRUUsTUFGRixDQUFLLFVBQVUsdUJBQXVCLGNBQVksZ0JBQWxELFNBcEI2QyxDQUNoRCxNQUFPLEdBQUMsR0FBRCxHQUF1QixPQUFRLEVBQ3RDLEtBQU0sR0FBQyxHQUFELEdBQXNCLE1BQU8sRUFDbkMsSUFBSyxHQUFDLEdBQUQsR0FBcUIsS0FBTSxDQUNqQyxFQWlCYyxHQUNSLEVBQ0QsRUFDRCxFQUdGLEdBQUMsR0FBRCxFQUFpQixHQUNoQiw0Q0N6QkcsSUFBTSxHQUE4RCxFQUMxRSxTQUFTLENBQUMsRUFDVixZQUFZLENBQUMsRUFDYixpQkFBaUIsU0FDakIsY0FBYyxRQUNkLGNBQ0EscUJBQXFCLEdBQ3JCLGVBQWUsR0FDZixhQUFhLFVBQ2IsZUFBZSxHQUNmLGNBQWMsR0FDZCxnQkFDRyxLQUNFLENBQ0wsT0FDQyxHQWlCRSxHQWpCRixDQUNDLGFBQWMsRUFDZCxtQkFBb0IsRUFDcEIsWUFBYSxFQUNiLGFBQWMsRUFDZCxPQUFRLEdBQ1AsQ0FDRCxFQUNBLGVBQWdCLEdBQXFCLEdBQ3JDLFdBQVksR0FBZ0IsQ0FBVSxFQUN0QyxZQUFhLEdBQVMsQ0FBVyxFQUNqQyxZQUFhLEVBQ2IsVUFBVyxFQUNYLFdBQVksS0FDUixFQWRMLFNBZ0JDLEdBQUMsR0FBRCxFQUFzQixFQUNyQiIsCiAgImRlYnVnSWQiOiAiODJCRjcyNEY3RDIwNUVGRTY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=