@ilamy/calendar 1.6.0 → 1.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +4 -4
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
- import{RRule as LU}from"rrule";import{AnimatePresence as f4,motion as A4}from"motion/react";import{clsx as G4}from"clsx";import{twMerge as L4}from"tailwind-merge";import N0 from"dayjs";import Z4 from"dayjs/plugin/isBetween.js";import J4 from"dayjs/plugin/isSameOrAfter.js";import X4 from"dayjs/plugin/isSameOrBefore.js";import Q4 from"dayjs/plugin/localeData.js";import Y4 from"dayjs/plugin/minMax.js";import q4 from"dayjs/plugin/timezone.js";import U4 from"dayjs/plugin/utc.js";import z4 from"dayjs/plugin/weekday.js";import K4 from"dayjs/plugin/weekOfYear.js";var s2,_4=(P,$,Z)=>{let J=$.prototype,X=Z.tz.setDefault;Z.tz.setDefault=(q)=>{return s2=q,X(q)};let{startOf:Q,endOf:Y}=J;function U(q,_){let L=q.$x?.$timezone||s2;if(!L)return _;let K=Z.tz(_.format("YYYY-MM-DDTHH:mm:ss"),L).utcOffset();if(_.utcOffset()!==K)return _.tz(L,!0);return _}J.startOf=function(q,_){let L=Q.call(this,q,_);return U(this,L)},J.endOf=Y};N0.extend(z4);N0.extend(K4);N0.extend(J4);N0.extend(X4);N0.extend(Z4);N0.extend(Y4);N0.extend(q4);N0.extend(U4);N0.extend(Q4);N0.extend(_4);var e2=(...P)=>{return N0.tz(...P)};Object.assign(e2,N0);var I=e2;var j0=1,P5=24,R0=24,YP=4,$5="bg-secondary text-muted-foreground pointer-events-none",x0={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6};function A(...P){return L4(G4(P))}var CP=(P)=>{if(!P||P.length===0)return;return new Set(P.map(($)=>x0[$]))};function qP(P){if(P===void 0)return;if(I.isDayjs(P))return P;let $=I(P);return $.isValid()?$:void 0}var Z5=(P,$)=>{let Z={...P};for(let J of $)delete Z[J];return Z};function EP(P){if(!P||!P.length)return[];return P.map(($)=>{return{...$,start:I.isDayjs($.start)?$.start:I($.start),end:I.isDayjs($.end)?$.end:I($.end)}})}import{jsx as J5}from"react/jsx-runtime";var N4={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:q,..._})=>J5(f4,{mode:"wait",children:J5(A4.div,{animate:"visible",className:A("inline-block w-full",J),custom:{delay:Z,direction:X},"data-testid":U,exit:"exit",initial:"hidden",layout:Q,layoutId:Y,ref:q,variants:N4,..._,children:P},$)});E.displayName="AnimatedSection";import{DndContext as E4,MouseSensor as D4,pointerWithin as j4,TouchSensor as x4,useSensor as F5,useSensors as v4}from"@dnd-kit/core";import{useRef as O5,useState as y4}from"react";import{Slot as W4}from"@radix-ui/react-slot";import{cva as F4}from"class-variance-authority";import{jsx as V4}from"react/jsx-runtime";var O4=F4("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 h({className:P,variant:$,size:Z,asChild:J=!1,...X}){return V4(J?W4:"button",{className:A(O4({variant:$,size:Z,className:P})),"data-slot":"button",...X})}import*as Z0 from"@radix-ui/react-dialog";import{XIcon as B4}from"lucide-react";import{jsx as I0,jsxs as V2}from"react/jsx-runtime";function UP({...P}){return I0(Z0.Root,{"data-slot":"dialog",...P})}function M4({...P}){return I0(Z0.Portal,{"data-slot":"dialog-portal",...P})}function p4({className:P,...$}){return I0(Z0.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 zP({className:P,children:$,...Z}){return V2(M4,{"data-slot":"dialog-portal",children:[I0(p4,{}),V2(Z0.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(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:[I0(B4,{}),I0("span",{className:"sr-only",children:"Close"})]})]})]})}function KP({className:P,...$}){return I0("div",{className:A("flex flex-col gap-2 text-center sm:text-left",P),"data-slot":"dialog-header",...$})}function DP({className:P,...$}){return I0("div",{className:A("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",P),"data-slot":"dialog-footer",...$})}function _P({className:P,...$}){return I0(Z0.Title,{className:A("text-lg leading-none font-semibold",P),"data-slot":"dialog-title",...$})}function jP({className:P,...$}){return I0(Z0.Description,{className:A("text-muted-foreground text-sm",P),"data-slot":"dialog-description",...$})}import{useContext as f5}from"react";import{createContext as R4}from"react";var xP=R4(void 0);import{createContext as I4}from"react";var vP=I4(void 0);import{useCallback as Y0,useMemo as H4,useState as G5}from"react";import{useCallback as s,useEffect as p2,useMemo as K5,useRef as R2,useState as e0}from"react";import{RRule as S4}from"rrule";var yP=(P)=>{return new Date(Date.UTC(P.year(),P.month(),P.date(),P.hour(),P.minute(),P.second(),P.millisecond()))},T4=(P,$)=>{return $.year(P.getUTCFullYear()).month(P.getUTCMonth()).date(P.getUTCDate()).hour(P.getUTCHours()).minute(P.getUTCMinutes()).second(P.getUTCSeconds()).millisecond(P.getUTCMilliseconds())},GP=(P)=>{return Boolean(P.rrule||P.recurrenceId||P.uid)},v0=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},X5=(P,$)=>{let Z=v0($),J=P.findIndex((X)=>v0(X)===Z&&X.rrule&&!X.recurrenceId);if(J===-1)throw Error("Base recurring event not found");return J},Q5=(P)=>P.start.subtract(1,"day").endOf("day").toDate(),B2=({event:P,currentEvents:$,startDate:Z,endDate:J})=>{if(!P.rrule)return[];try{let X=yP(P.start),Q=P.rrule.until?yP(I(P.rrule.until)):void 0,Y={...P.rrule,dtstart:X,until:Q},U=new S4(Y),q=v0(P),_=$.filter((z)=>z.recurrenceId&&v0(z)===q),L=P.end.diff(P.start),K=yP(Z.subtract(L,"millisecond")),W=yP(J);return U.between(K,W,!0).map((z,N)=>{let G=T4(z,P.start),F=_.find((g)=>qP(g.recurrenceId)?.isSame(G));if(F)return{...P,...F};let M=P.end.diff(P.start),p=G.add(M,"millisecond"),S=`${P.id}_${N}`,R=v0(P);return{...P,id:S,start:G,end:p,uid:R,rrule:void 0}}).filter((z)=>{if(P.exdates&&P.exdates.length>0){let F=z.start.toISOString();if(P.exdates?.includes(F))return!1}return z.start.isSameOrBefore(J)&&z.end.isSameOrAfter(Z)})}catch(X){throw Error(`Invalid RRULE options: ${JSON.stringify(P.rrule)}. Error: ${X instanceof Error?X.message:"Unknown error"}`)}},Y5=({targetEvent:P,updates:$,currentEvents:Z,scope:J})=>{let X=[...Z],Q=X5(X,P),Y=X[Q];switch(J){case"this":{let U=P.start.toISOString(),_=[...Y.exdates||[],U],L={...Y,exdates:_};X[Q]=L;let K=`${P.id}_modified_${Date.now()}`,W={...Z5(P,["width","height","top","left","right"]),...$,id:K,recurrenceId:U,uid:v0(Y),rrule:void 0};X.push(W);break}case"following":{let U=Q5(P),q={...Y,rrule:{...Y.rrule,until:U}};X[Q]=q;let _=Y.end.diff(Y.start),L=$.start||P.start,K=$.end||L.add(_),W=`${Y.id}_following`,O=`${W}@ilamy.calendar`,f={...Y,...$,rrule:{...Y.rrule,...$.rrule,dtstart:L.toDate()},id:W,uid:O,start:L,end:K,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},q5=({targetEvent:P,currentEvents:$,scope:Z})=>{let J=[...$],X=X5(J,P),Q=J[X];switch(Z){case"this":{let Y=P.start.toISOString(),q=[...Q.exdates||[],Y],_={...Q,exdates:q};J[X]=_;break}case"following":{let Y={...Q,rrule:{...Q.rrule,until:Q5(P)}};J[X]=Y;break}case"all":{let Y=v0(P);return J.filter((q)=>v0(q)!==Y)}default:throw Error(`Invalid scope: ${Z}. Must be 'this', 'following', or 'all'`)}return J};var M2={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(I(),"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 U5(P){let $=P.daysInMonth(),Z=P.startOf("month");return Array.from({length:$},(J,X)=>Z.add(X,"day"))}function z5({referenceDate:P=I(),length:$=24}={}){let Z=P.startOf("day");return Array.from({length:$},(J,X)=>Z.hour(X).minute(0).second(0).millisecond(0))}function fP(P,$){let Z=new Set($.map((J)=>String(J.id)));return P.filter((J)=>Z.has(String(J.id)))}function cP(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 _5={day:"day",week:"week",month:"month",year:"year"},I2=(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")}},oP=(P)=>{let{events:$=[],firstDayOfWeek:Z=0,initialView:J="month",initialDate:X=I(),businessHours:Q,onEventAdd:Y,onEventUpdate:U,onEventDelete:q,onDateChange:_,onViewChange:L,locale:K,timezone:W,translations:O,translator:f}=P,[z,N]=e0(I.isDayjs(X)?X:I(X)),[G,F]=e0(J),[M,p]=e0($),[S,R]=e0(!1),[b,g]=e0(null),[D,u]=e0(null),[c,P0]=e0(K||"en"),j=R2($),k=R2(W),o=R2(K),G0=K5(()=>{if(f)return f;let H=O||M2;return(w)=>H[w]||w},[O,f]),F0=s((H,w)=>{let y=[];for(let f0 of M)if(f0.rrule)y.push(...B2({event:f0,currentEvents:M,startDate:H,endDate:w}));else if(cP(f0,H,w))y.push(f0);return y},[M]),M0=s(()=>{return I2(z,G,Z)},[z,G,Z]),X0=K5(()=>{let{start:H,end:w}=M0();return F0(H,w)},[F0,M0]);p2(()=>{if($!==j.current)p($),j.current=$},[$]),p2(()=>{if(K&&K!==o.current)P0(K),I.locale(K),N((H)=>H.locale(K)),o.current=K},[K]),p2(()=>{if(W&&W!==k.current)I.tz.setDefault(W),N((H)=>H.tz(W)),p((H)=>H.map((w)=>({...w,start:w.start.tz(W),end:w.end.tz(W)}))),k.current=W},[W]);let q0=s((H)=>{N(H);let w=I2(H,G,Z);_?.(H,w)},[_,G,Z]),m0=q0,L0=s((H)=>{let w=H===1?z.add(1,_5[G]):z.subtract(1,_5[G]);q0(w)},[z,G,q0]),Q0=s(()=>L0(1),[L0]),a=s(()=>L0(-1),[L0]),s0=s(()=>q0(I()),[q0]),l=s((H)=>{p((w)=>[...w,H]),Y?.(H)},[Y]),p0=s((H,w)=>{let y=M.find((QP)=>QP.id===H);if(!y)return;let f0={...y,...w};p((QP)=>QP.map((pP)=>pP.id===H?f0:pP)),U?.(f0)},[M,U]),D0=s((H,w,y)=>{U?.({...H,...w}),p(Y5({targetEvent:H,updates:w,currentEvents:M,scope:y.scope}))},[M,U]),JP=s((H,w)=>{q?.(H),p(q5({targetEvent:H,currentEvents:M,scope:w.scope}))},[M,q]),XP=s((H)=>{let w=M.find((y)=>y.id===H);if(!w)return;p((y)=>y.filter((f0)=>f0.id!==H)),q?.(w)},[M,q]),T=s((H)=>{if(H?.start)u(H.start);let w=H?.start??z;g({title:G0("newEvent"),start:w,end:H?.end??w.add(1,"hour"),resourceId:H?.resourceId,description:"",allDay:H?.allDay??!1}),R(!0)},[z,G0]),d=s(()=>{u(null),g(null),R(!1)},[]),$0=s((H)=>{F(H),L?.(H);let w=I2(z,H,Z);_?.(z,w)},[L,_,z,Z]),O0=s((H)=>{let w=H.uid;return M.find((y)=>(y.uid||`${y.id}@ilamy.calendar`)===w&&y.rrule)||null},[M]);return{currentDate:z,view:G,events:X0,rawEvents:M,isEventFormOpen:S,selectedEvent:b,selectedDate:D,firstDayOfWeek:Z,dayMaxEvents:YP,currentLocale:c,businessHours:Q,setCurrentDate:N,selectDate:m0,setView:$0,nextPeriod:Q0,prevPeriod:a,today:s0,addEvent:l,updateEvent:p0,updateRecurringEvent:D0,deleteEvent:XP,deleteRecurringEvent:JP,openEventForm:T,closeEventForm:d,setSelectedEvent:g,setIsEventFormOpen:R,setSelectedDate:u,getEventsForDateRange:F0,findParentRecurringEvent:O0,t:G0}};import{jsx as b4}from"react/jsx-runtime";var S2=(P)=>{if(P.resourceIds)return P.resourceIds;if(P.resourceId!==void 0)return[P.resourceId];return[]},L5=({children:P,events:$=[],resources:Z=[],firstDayOfWeek:J=0,initialView:X="month",initialDate:Q,renderEvent:Y,onEventClick:U,onCellClick:q,onViewChange:_,onEventAdd:L,onEventUpdate:K,onEventDelete:W,onDateChange:O,locale:f,timezone:z,disableCellClick:N,disableEventClick:G,disableDragAndDrop:F,dayMaxEvents:M,eventSpacing:p=1,eventHeight:S=R0,stickyViewHeader:R=!0,viewHeaderClassName:b="",headerComponent:g,headerClassName:D,translations:u,translator:c,renderResource:P0,renderEventForm:j,businessHours:k,timeFormat:o="12-hour",classesOverride:G0,orientation:F0="horizontal",renderCurrentTimeIndicator:M0,renderHour:X0,hideNonBusinessHours:q0=!1,hiddenDays:m0,weekViewGranularity:L0="hourly"})=>{let[Q0]=G5(Z),[a,s0]=G5(new Set(Z.map((m)=>m.id))),l=oP({events:$,firstDayOfWeek:J,initialView:X,initialDate:Q,businessHours:k,onEventAdd:L,onEventUpdate:K,onEventDelete:W,onDateChange:O,onViewChange:_,locale:f,timezone:z,translations:u,translator:c}),p0=Y0((m,A0)=>{s0((O2)=>{let hP=new Set(O2);if(m==="show"||m==="toggle"&&!hP.has(A0))hP.add(A0);else hP.delete(A0);return hP})},[]),D0=Y0((m)=>p0("show",m),[p0]),JP=Y0((m)=>p0("hide",m),[p0]),XP=Y0((m)=>p0("toggle",m),[p0]),T=Y0(()=>s0(new Set(Q0.map((m)=>m.id))),[Q0]),d=Y0(()=>s0(new Set),[]),$0=Y0((m)=>l.events.filter((A0)=>S2(A0).includes(m)),[l.events]),O0=Y0((m)=>l.events.filter((A0)=>S2(A0).some((O2)=>m.includes(O2))),[l.events]),H=Y0((m)=>{return Q0.find((A0)=>A0.id===m)},[Q0]),w=Y0(()=>{return Q0.filter((m)=>a.has(m.id))},[Q0,a]),y=Y0((m)=>{return Boolean(m.resourceIds&&m.resourceIds.length>1)},[]),f0=Y0((m)=>{l.setSelectedEvent(m),l.setIsEventFormOpen(!0)},[l]),QP=Y0((m)=>{if(G)return;if(U)U(m);else f0(m)},[G,U,f0]),pP=Y0((m)=>{if(N)return;if(q)q(m);else{let A0={title:l.t("newEvent"),start:m.start,end:m.end,description:"",allDay:!1};if(m.resourceId!==void 0)A0.resourceId=m.resourceId;l.setSelectedEvent(A0),l.setSelectedDate(m.start),l.setIsEventFormOpen(!0)}},[q,N,l]),$4=H4(()=>({...l,resources:Q0,visibleResources:a,toggleResourceVisibility:XP,showResource:D0,hideResource:JP,showAllResources:T,hideAllResources:d,getEventsForResource:$0,getEventsForResources:O0,getResourceById:H,getVisibleResources:w,isEventCrossResource:y,getEventResourceIds:S2,onEventClick:QP,onCellClick:pP,renderEvent:Y,renderResource:P0,renderEventForm:j,headerComponent:g,headerClassName:D,locale:f,timezone:z,disableCellClick:N,disableEventClick:G,disableDragAndDrop:F,dayMaxEvents:M,eventSpacing:p,eventHeight:S,stickyViewHeader:R,viewHeaderClassName:b,businessHours:k,timeFormat:o,classesOverride:G0,orientation:F0,renderCurrentTimeIndicator:M0,renderHour:X0,hideNonBusinessHours:q0,hiddenDays:m0,weekViewGranularity:L0}),[l,Q0,a,XP,D0,JP,T,d,$0,O0,H,w,y,QP,pP,Y,P0,j,f,z,N,G,F,M,p,S,R,b,g,D,k,o,G0,F0,M0,X0,q0,m0,L0]);return b4(vP.Provider,{value:$4,children:P})};function B(P){let $=f5(vP),Z=f5(xP),J=$||Z;if(!J)throw Error("useSmartCalendarContext must be used within a CalendarProvider or ResourceCalendarProvider");return P?P(J):J}function w4(){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 y0,jsxs as lP}from"react/jsx-runtime";var m4=[{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((q)=>({t:q.t})),Y=(q)=>{Z(q),$()},U=J==="edit";return y0(UP,{onOpenChange:$,open:P,children:lP(zP,{className:"max-w-md",children:[lP(KP,{children:[y0(_P,{children:U?Q("editRecurringEvent"):Q("deleteRecurringEvent")}),lP(jP,{children:['"',X,'"'," ",U?Q("editRecurringEventQuestion"):Q("deleteRecurringEventQuestion")]})]}),y0("div",{className:"space-y-3",children:m4.map(({scope:q,title:_,editKey:L,deleteKey:K})=>y0(h,{className:"w-full justify-start h-auto p-4",onClick:()=>Y(q),variant:"outline",children:lP("div",{className:"text-left",children:[y0("div",{className:"font-medium",children:Q(_)}),y0("div",{className:"text-sm text-muted-foreground",children:Q(U?L:K)})]})},q))}),y0(DP,{children:y0(h,{onClick:$,variant:"outline",children:Q("cancel")})})]})})}var A5=(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,q;if(Q){let{date:W,hour:O=0,minute:f=0}=X;q=I(W).hour(O).minute(f)}else{let{date:W}=X;q=I(W)}let _=$.end.diff($.start,"second"),L=q.add(_,"second");if(L.isSame(L.startOf("day")))L=L.subtract(1,"day").endOf("day");let K={start:q,end:L,resourceId:Y,allDay:Q?!1:U??$.allDay};return{activeEvent:$,updates:K}};import{DragOverlay as g4}from"@dnd-kit/core";import{snapCenterToCursor as k4}from"@dnd-kit/modifiers";import{useImperativeHandle as h4,useState as C4}from"react";import{jsx as N5}from"react/jsx-runtime";var W5=({ref:P})=>{let[$,Z]=C4(null);return h4(P,()=>({setActiveEvent:Z})),N5(g4,{modifiers:[k4],children:$&&N5("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 V5,jsxs as B5,Fragment as c4}from"react/jsx-runtime";var T2={isOpen:!1,event:null,updates:null};function iP({children:P}){let $=O5(null),Z=O5(null),{updateEvent:J,updateRecurringEvent:X,disableDragAndDrop:Q}=B((G)=>({updateEvent:G.updateEvent,updateRecurringEvent:G.updateRecurringEvent,disableDragAndDrop:G.disableDragAndDrop})),[Y,U]=y4({isOpen:!1,event:null,updates:null}),q=F5(D4,{activationConstraint:{distance:2}}),_=F5(x4,{activationConstraint:{delay:100,tolerance:5}}),L=v4(q,_),K=(G,F)=>{if(!G?.id||!F||Object.keys(F).length===0)return;if(GP(G))U({isOpen:!0,event:G,updates:F});else J(G.id,F)},W=(G)=>{if(!Y.event||!Y.updates){U(T2);return}try{X(Y.event,Y.updates,{scope:G,eventDate:Y.event.start})}catch{}finally{U(T2)}},O=()=>{U(T2)},f=(G)=>{let{active:F}=G;if(F.data.current?.type==="calendar-event")Z.current?.setActiveEvent(F.data.current.event),$.current=F.data.current.event},z=(G)=>{let F=A5(G,$.current);if(F){let{activeEvent:M,updates:p}=F;K(M,p)}$.current=null,Z.current?.setActiveEvent(null)},N=(G)=>{$.current=null};if(Q)return P;return B5(c4,{children:[B5(E4,{collisionDetection:j4,onDragCancel:N,onDragEnd:z,onDragStart:f,sensors:L,children:[P,V5(W5,{ref:Z})]}),V5(RP,{eventTitle:Y.event?.title||"",isOpen:Y.isOpen,onClose:O,onConfirm:W,operationType:"edit"})]})}import{useEffect as V$,useState as u0}from"react";import*as uP from"@radix-ui/react-checkbox";import{CheckIcon as o4}from"lucide-react";import{jsx as H2}from"react/jsx-runtime";function AP({className:P,...$}){return H2(uP.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:H2(uP.Indicator,{className:"flex items-center justify-center text-current transition-none","data-slot":"checkbox-indicator",children:H2(o4,{className:"size-3.5"})})})}import{PopoverClose as r4}from"@radix-ui/react-popover";import{Calendar as n4}from"lucide-react";import{useEffect as a4,useRef as t4,useState as s4}from"react";import{ChevronLeftIcon as l4,ChevronRightIcon as i4}from"lucide-react";import{useState as u4}from"react";import{jsx as W0,jsxs as b2}from"react/jsx-runtime";var d4=["S","M","T","W","T","F","S"];function M5({selected:P,defaultMonth:$,onSelect:Z,disabled:J,firstDayOfWeek:X=0,className:Q}){let[Y,U]=u4(()=>I($??P??new Date).startOf("month")),q=LP(Y,X),_=P?I(P).format("YYYY-MM-DD"):void 0,L=Array.from({length:7},(K,W)=>d4[(X+W)%7]);return b2("div",{className:A("bg-background p-3 w-[280px]",Q),"data-slot":"calendar",children:[b2("div",{className:"flex items-center justify-between mb-2",children:[W0(h,{"aria-label":"Previous month",onClick:()=>U((K)=>K.subtract(1,"month")),size:"icon",variant:"ghost",children:W0(l4,{className:"size-4"})}),W0("div",{className:"text-sm font-medium select-none",children:Y.format("MMMM YYYY")}),W0(h,{"aria-label":"Next month",onClick:()=>U((K)=>K.add(1,"month")),size:"icon",variant:"ghost",children:W0(i4,{className:"size-4"})})]}),b2("table",{className:"w-full border-collapse",role:"grid",children:[W0("thead",{children:W0("tr",{children:L.map((K,W)=>W0("th",{className:"text-muted-foreground text-xs font-medium select-none py-1",children:K},W))})}),W0("tbody",{children:q.map((K,W)=>W0("tr",{children:K.map((O)=>{let f=!O.isSame(Y,"month"),z=O.format("YYYY-MM-DD")===_,N=J?.(O.toDate())??!1;return W0("td",{className:"p-0 text-center","data-disabled":N,"data-outside":f,"data-selected":z,role:"gridcell",tabIndex:-1,children:W0("button",{"aria-disabled":N,"aria-hidden":f,className:A("w-full aspect-square rounded-md text-sm select-none",!N&&"hover:bg-accent cursor-pointer",f&&"text-muted-foreground/50",t(O)&&!z&&"bg-accent text-accent-foreground",z&&"bg-primary text-primary-foreground font-medium",N&&"opacity-50 cursor-not-allowed"),"data-disabled":N,"data-selected":z,disabled:N||f,onClick:()=>Z?.(O.toDate()),tabIndex:f?-1:0,type:"button",children:O.format("D")})},O.toISOString())})},W))})]})]})}import*as g0 from"@radix-ui/react-popover";import{jsx as dP}from"react/jsx-runtime";function c0({...P}){return dP(g0.Root,{"data-slot":"popover",...P})}function o0({...P}){return dP(g0.Trigger,{"data-slot":"popover-trigger",...P})}function l0({className:P,align:$="center",sideOffset:Z=4,...J}){return dP(g0.Portal,{children:dP(g0.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,...J})})}import{jsx as NP,jsxs as w2}from"react/jsx-runtime";function rP({date:P,closeOnSelect:$,onChange:Z,label:J="Pick a date",className:X,disabled:Q}){let Y=t4(null),[U,q]=s4(P);a4(()=>{q(P)},[P]);let _=(L)=>{if(q(L),$)Y.current?.click();Z?.(L)};return NP("div",{className:X,children:w2(c0,{children:[NP(o0,{asChild:!0,children:w2(h,{className:A("data-[empty=true]:text-muted-foreground w-full justify-start text-left font-normal"),"data-empty":!P,variant:"outline",children:[NP(n4,{}),U?I(U).format("MMM D, YYYY"):NP("span",{children:J})]})}),w2(l0,{align:"start",className:"w-auto p-0",children:[NP(r4,{ref:Y,style:{display:"none"}}),NP(M5,{defaultMonth:U,disabled:Q,onSelect:_,selected:U})]})]})})}import{jsx as e4}from"react/jsx-runtime";function PP({className:P,type:$,...Z}){return e4("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 p5 from"@radix-ui/react-label";import{jsx as P$}from"react/jsx-runtime";function z0({className:P,...$}){return P$(p5.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 S0 from"@radix-ui/react-scroll-area";import{jsx as IP,jsxs as $$}from"react/jsx-runtime";function T0({className:P,children:$,viewPortProps:Z,...J}){return $$(S0.Root,{className:A("relative",P),"data-slot":"scroll-area",...J,children:[IP(S0.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(S0.Corner,{})]})}function k0({className:P,orientation:$="vertical",...Z}){return IP(S0.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(S0.ScrollAreaThumb,{className:"bg-border relative flex-1 rounded-full","data-slot":"scroll-area-thumb"})})}import{Clock as X$}from"lucide-react";import{useEffect as Q$,useRef as I5,useState as m2}from"react";import{useMemo as Z$}from"react";function R5({timeFormat:P="12-hour",minTime:$="00:00",maxTime:Z="23:45"}){return{timeOptions:Z$(()=>{let Q=[],[Y,U]=$.split(":").map(Number),[q,_]=Z.split(":").map(Number),L=Y*60+U,K=q*60+_;for(let W=L;W<=K;W+=15){let O=Math.floor(W/60),f=W%60,z=`${O.toString().padStart(2,"0")}:${f.toString().padStart(2,"0")}`;Q.push(z)}return Q},[$,Z]),formatTime:(Q)=>{let[Y,U]=Q.split(":").map(Number),q=Y>=12?"PM":"AM",_=Y===0?12:Y>12?Y-12:Y;if(P==="24-hour")return`${Y.toString().padStart(2,"0")}:${U.toString().padStart(2,"0")}`;return`${_}:${U.toString().padStart(2,"0")} ${q}`}}}var WP=(P)=>String(P).padStart(2,"0"),J$=(P)=>typeof P==="number"?WP(P):P,V={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-${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)=>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 i0,jsxs as g2}from"react/jsx-runtime";var Y$=(P)=>{P.stopPropagation()};function S5({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:q}){let[_,L]=m2(!1),[K,W]=m2(""),O=I5(null),f=I5(null),[z,N]=m2(0),{timeOptions:G,formatTime:F}=R5({timeFormat:X,minTime:Z,maxTime:J}),M=G.filter((R)=>{return F(R).toLowerCase().includes(K.toLowerCase())}),p=(R)=>{$(R),L(!1),W("")};Q$(()=>{if(_){if(f.current)N(f.current.offsetWidth);setTimeout(()=>{O.current?.focus()},0)}},[_]);let S=P?F(P):Q;return g2(c0,{onOpenChange:L,open:_,children:[i0(o0,{asChild:!0,children:g2(h,{"aria-controls":"time-picker-listbox","aria-expanded":_,className:A("w-full justify-start",Y),"data-testid":V.timePicker(q),disabled:U,ref:f,role:"combobox",variant:"outline",children:[i0(X$,{className:"mr-2 h-4 w-4"}),S]})}),g2(l0,{align:"start",className:"p-0",style:{width:z},children:[i0("div",{className:"p-2 border-b",children:i0(PP,{className:"h-8",onChange:(R)=>W(R.target.value),placeholder:"Search time...",ref:O,value:K})}),i0(T0,{className:"h-[200px]",onWheel:Y$,children:i0("div",{className:"p-1",children:M.length===0?i0("div",{className:"py-6 text-center text-sm text-muted-foreground",children:"N/A"}):M.map((R)=>{let b=F(R);return i0("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",R===P&&"bg-accent text-accent-foreground"),onClick:()=>p(R),type:"button",children:b},R)})})})]})]})}var k2=(P,$)=>{if(!$)return!0;let Z=!1;return nP($,{date:P,onMatch:()=>{Z=!0}}),Z},T5=({date:P,hour:$,minute:Z=0,businessHours:J})=>{if(!J)return!0;if($===void 0)return k2(P,J);let X=!1,Q=$*60+Z;return nP(J,{date:P,onMatch:(Y)=>{let U=Y.startTime??9,q=Y.endTime??17,_=U*60,L=q*60;if(Q>=_&&Q<L)X=!0}}),X},nP=(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)=>x0[U]===Y))J(Q)}else J(Q)},aP=(P)=>{let{allDates:$,businessHours:Z,resourceBusinessHours:J=[],hideNonBusinessHours:X}=P,Q=24,Y=0,U=!1,q=(L)=>{U=!0,Q=Math.min(Q,L.startTime??9),Y=Math.max(Y,L.endTime??17)},_=(L)=>{nP(Z,{date:L,onMatch:q});for(let K of J)nP(K,{date:L,onMatch:q})};for(let L of $)_(L);if(!U&&X){if(_(),!U)Q=9,Y=17,U=!0}return{minStart:Q,maxEnd:Y,hasBusinessHours:U}};var h2=(P,$,Z)=>{let[J,X]=$.split(":").map(Number),Q=I(P).hour(J).minute(X);return Z?Q.hour(0).minute(0):Q},H5=(P,$,Z)=>{let[J,X]=$.split(":").map(Number),Q=I(P).hour(J).minute(X);return Z?Q.hour(23).minute(59):Q},C2=(P,$)=>{if(!$)return{min:"00:00",max:"23:59"};let Z=I(P),{minStart:J,maxEnd:X,hasBusinessHours:Q}=aP({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 _$,useMemo as G$,useState as x5}from"react";import{RRule as J0}from"rrule";import{jsx as tP}from"react/jsx-runtime";function b5({className:P,...$}){return tP("div",{className:A("text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm",P),"data-slot":"card",...$})}function w5({className:P,...$}){return tP("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 m5({className:P,...$}){return tP("div",{className:A("leading-none font-semibold",P),"data-slot":"card-title",...$})}function g5({className:P,...$}){return tP("div",{className:A("p-4 pt-0",P),"data-slot":"card-content",...$})}import*as C from"@radix-ui/react-select";import{CheckIcon as q$,ChevronDownIcon as k5,ChevronUpIcon as U$}from"lucide-react";import{jsx as e,jsxs as E2}from"react/jsx-runtime";function h5({...P}){return e(C.Root,{"data-slot":"select",...P})}function C5({...P}){return e(C.Value,{"data-slot":"select-value",...P})}function E5({className:P,size:$="default",children:Z,...J}){return E2(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",...J,children:[Z,e(C.Icon,{asChild:!0,children:e(k5,{className:"size-4 opacity-50"})})]})}function D5({className:P,children:$,position:Z="popper",align:J="center",...X}){return e(C.Portal,{children:E2(C.Content,{align:J,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,...X,children:[e(z$,{}),e(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:$}),e(K$,{})]})})}function j5({className:P,children:$,...Z}){return E2(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:[e("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:e(C.ItemIndicator,{children:e(q$,{className:"size-4"})})}),e(C.ItemText,{children:$})]})}function z$({className:P,...$}){return e(C.ScrollUpButton,{className:A("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-up-button",...$,children:e(U$,{className:"size-4"})})}function K$({className:P,...$}){return e(C.ScrollDownButton,{className:A("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-down-button",...$,children:e(k5,{className:"size-4"})})}import{jsx as x,jsxs as K0,Fragment as W$}from"react/jsx-runtime";var D2={DAILY:J0.DAILY,WEEKLY:J0.WEEKLY,MONTHLY:J0.MONTHLY,YEARLY:J0.YEARLY},L$=Object.fromEntries(Object.entries(D2).map(([P,$])=>[$,P])),v5=[J0.SU,J0.MO,J0.TU,J0.WE,J0.TH,J0.FR,J0.SA],f$=["sun","mon","tue","wed","thu","fri","sat"],A$=[{type:"never",id:"never",labelKey:"never"},{type:"count",id:"after",labelKey:"after"},{type:"until",id:"on",labelKey:"on"}],y5=(P)=>Math.max(1,Number.parseInt(P,10)||1),N$=(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")}},c5=({value:P,onChange:$})=>{let{t:Z}=B((z)=>({t:z.t})),[J,X]=x5(!!P),[Q,Y]=x5(()=>P||null),U=G$(()=>f$.map((z,N)=>({value:v5[N],label:Z(z)})),[Z]);_$(()=>{if(X(!!P),P)Y(P)},[P]);let q=(z)=>{if(!Q)return;let N={...Q,...z};Y(N),$(J?N:null)},_=(z)=>{if(X(z),!z){$(null);return}if(Q){$(Q);return}let N={freq:J0.DAILY,interval:1};Y(N),$(N)},L=(z)=>{let N=Q?.byweekday||[],G=v5[z],F=N.includes(G)?N.filter((M)=>M!==G):[...N,G];q({byweekday:F.length?F:void 0})},K=(z)=>{let N={count:void 0,until:void 0};if(z==="count")N.count=Q?.count||1;if(z==="until")N.until=Q?.until||I().add(1,"month").endOf("day").toDate();q(N)},W=Q?.until?"until":Q?.count?"count":"never",O=L$[Q?.freq??J0.DAILY]||"DAILY",f=Array.isArray(Q?.byweekday)?Q.byweekday:Q?.byweekday?[Q.byweekday]:[];return K0(b5,{"data-testid":"recurrence-editor",children:[K0(w5,{className:"pb-3",children:[K0("div",{className:"flex items-center space-x-2",children:[x(AP,{checked:J,"data-testid":"toggle-recurrence",id:"recurring",onCheckedChange:_}),x(m5,{className:"text-sm",children:Z("repeat")})]}),J&&P&&x("p",{className:"text-xs text-muted-foreground",children:N$(P,Z)})]}),J&&x(g5,{className:"pt-0",children:K0("div",{className:"space-y-4",children:[K0("div",{className:"grid grid-cols-2 gap-4",children:[K0("div",{children:[x(z0,{className:"text-xs",htmlFor:"frequency",children:Z("repeats")}),K0(h5,{onValueChange:(z)=>q({freq:D2[z]}),value:O,children:[x(E5,{className:"h-8","data-testid":"frequency-select",id:"frequency",children:x(C5,{})}),x(D5,{children:Object.keys(D2).map((z)=>x(j5,{value:z,children:Z(z.toLowerCase())},z))})]})]}),K0("div",{children:[x(z0,{className:"text-xs",htmlFor:"interval",children:Z("every")}),x(PP,{className:"h-8",id:"interval",min:"1",onChange:(z)=>q({interval:y5(z.target.value)}),type:"number",value:Q?.interval||1})]})]}),Q?.freq===J0.WEEKLY&&K0("div",{children:[x(z0,{className:"text-xs",children:Z("repeatOn")}),x("div",{className:"flex flex-wrap gap-1 mt-1",children:U.map((z,N)=>K0("div",{className:"flex items-center space-x-1",children:[x(AP,{checked:f.includes(z.value),id:V.listKey("day",N),onCheckedChange:()=>L(N)}),x(z0,{className:"text-xs cursor-pointer",htmlFor:V.listKey("day",N),children:z.label})]},z.label))})]}),K0("div",{children:[x(z0,{className:"text-xs",children:Z("ends")}),x("div",{className:"space-y-2 mt-1",children:A$.map(({type:z,id:N,labelKey:G})=>K0("div",{className:"flex items-center space-x-2",children:[x(AP,{checked:W===z,id:N,onCheckedChange:()=>K(z)}),x(z0,{className:"text-xs",htmlFor:N,children:Z(G)}),z==="count"&&W==="count"&&K0(W$,{children:[x(PP,{className:"h-6 w-16 text-xs","data-testid":"count-input",min:"1",onChange:(F)=>q({count:y5(F.target.value)}),type:"number",value:Q?.count||1}),x("span",{className:"text-xs",children:Z("occurrences")})]}),z==="until"&&W==="until"&&x(rP,{className:"h-6",date:Q?.until??void 0,onChange:(F)=>q({until:F?I(F).endOf("day").toDate():void 0})})]},z))})]})]})})]})};import{useCallback as sP,useState as F$}from"react";var o5={isOpen:!1,operationType:"edit",event:null};function l5(P){let{updateRecurringEvent:$,deleteRecurringEvent:Z}=B((_)=>({updateRecurringEvent:_.updateRecurringEvent,deleteRecurringEvent:_.deleteRecurringEvent})),[J,X]=F$(o5),Q=sP((_,L)=>{X({isOpen:!0,operationType:"edit",event:_,updates:L,onConfirm:(K)=>{$(_,L,{scope:K,eventDate:_.start})}})},[$]),Y=sP((_)=>{X({isOpen:!0,operationType:"delete",event:_,onConfirm:(L)=>{Z(_,{scope:L,eventDate:_.start})}})},[Z]),U=sP(()=>X(o5),[]),q=sP((_)=>{if(J.onConfirm)J.onConfirm(_);U(),P?.()},[J,U,P]);return{dialogState:J,openEditDialog:Q,openDeleteDialog:Y,closeDialog:U,handleConfirm:q}}import{useMemo as O$}from"react";var eP=(P)=>{let{businessHours:$,getResourceById:Z}=B((J)=>({businessHours:J.businessHours,getResourceById:J.getResourceById}));return O$(()=>{if(P!=null&&Z){let J=Z(P);if(J?.businessHours)return J.businessHours}return $},[P,Z,$])};import{jsx as v,jsxs as H0,Fragment as B$}from"react/jsx-runtime";var i5=[{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"}],u5=({selectedEvent:P,onClose:$,onUpdate:Z,onDelete:J,onAdd:X})=>{let{dialogState:Q,openEditDialog:Y,openDeleteDialog:U,closeDialog:q,handleConfirm:_}=l5($),{findParentRecurringEvent:L,t:K,timeFormat:W}=B((T)=>({findParentRecurringEvent:T.findParentRecurringEvent,t:T.t,timeFormat:T.timeFormat})),O=eP(P?.resourceId),f=P?.start??I(),z=P?.end??I().add(1,"hour"),N=P?L(P):null,[G,F]=u0(f.toDate()),[M,p]=u0(z.toDate()),[S,R]=u0(P?.allDay||!1),[b,g]=u0(P?.color||i5[0].value),[D,u]=u0(f.format("HH:mm")),[c,P0]=u0(z.format("HH:mm")),[j,k]=u0({title:P?.title||"",description:P?.description||"",location:P?.location||""}),[o,G0]=u0(()=>{return P?.rrule||N?.rrule||null}),F0=(T)=>{if(!T)return;if(F(T),I(T).isAfter(I(M)))p(T)},M0=(T)=>{if(!T)return;if(p(T),T&&I(T).isBefore(I(G)))F(T)},X0=(T)=>{if(u(T),I(G).isSame(I(M),"day")&&T>c)P0(T)},q0=(T)=>{if(P0(T),I(G).isSame(I(M),"day")&&T<D)u(T)},m0=(T)=>{let{name:d,value:$0}=T.target;k((O0)=>({...O0,[d]:$0}))};V$(()=>{if(S)P0("23:59")},[S]);let L0=(T)=>{T.preventDefault();let d=h2(G,D,S),$0=H5(M,c,S),O0={id:P?.id||I().format("YYYYMMDDHHmmss"),title:j.title,start:d,end:$0,resourceId:P?.resourceId,description:j.description,location:j.location,allDay:S,color:b,rrule:o||void 0};if(P?.id&&GP(P)){Y(P,{title:j.title,start:d,end:$0,description:j.description,location:j.location,allDay:S,color:b,rrule:o||void 0});return}if(P?.id)Z?.(O0);else X?.(O0);$()},Q0=()=>{if(P?.id){if(GP(P)){U(P);return}J?.(P),$()}},a=(T)=>{if(!T){G0(null);return}let d=h2(G,D,S);G0({...T,dtstart:d.toDate()})},s0=O?(T)=>!k2(I(T),O):void 0,l=C2(G,O),p0=C2(M,O),D0=({name:T,placeholder:d,required:$0=!1})=>H0("div",{className:"grid gap-1 sm:gap-2",children:[v(z0,{className:"text-xs sm:text-sm",htmlFor:T,children:K(T)}),v(PP,{className:"h-8 text-sm sm:h-9",id:T,name:T,onChange:m0,placeholder:d,required:$0,value:j[T]})]}),JP=[["startDate",G,F0],["endDate",M,M0]],XP=[["startTime","start-time",D,X0,l],["endTime","end-time",c,q0,p0]];return H0(B$,{children:[H0("form",{className:"flex flex-col flex-1 min-h-0",onSubmit:L0,children:[v(T0,{className:"flex-1 min-h-0",children:H0("div",{className:"grid gap-3 sm:gap-4 p-1",children:[v(D0,{name:"title",placeholder:K("eventTitlePlaceholder"),required:!0}),v(D0,{name:"description",placeholder:K("eventDescriptionPlaceholder")}),H0("div",{className:"flex items-center space-x-2",children:[v(AP,{checked:S,id:"allDay",onCheckedChange:(T)=>R(T===!0)}),v(z0,{className:"text-xs sm:text-sm",htmlFor:"allDay",children:K("allDay")})]}),v("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:JP.map(([T,d,$0])=>H0("div",{children:[v(z0,{className:"text-xs sm:text-sm",children:K(T)}),v(rP,{className:"mt-1",closeOnSelect:!0,date:d,disabled:s0,onChange:$0})]},T))}),!S&&v("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:XP.map(([T,d,$0,O0,H])=>H0("div",{children:[v(z0,{className:"text-xs sm:text-sm",children:K(T)}),v(S5,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:H.max,minTime:H.min,name:d,onChange:O0,placeholder:K("searchTime"),timeFormat:W,value:$0})]},T))}),H0("div",{className:"grid gap-1 sm:gap-2",children:[v(z0,{className:"text-xs sm:text-sm",children:K("color")}),v("div",{className:"flex flex-wrap gap-2",children:i5.map((T)=>v(h,{"aria-label":T.label,className:A(`${T.value} h-6 w-6 rounded-full sm:h-8 sm:w-8`,b===T.value&&"ring-2 ring-black ring-offset-1 sm:ring-offset-2"),onClick:()=>g(T.value),type:"button",variant:"ghost"},T.value))})]}),v(D0,{name:"location",placeholder:K("eventLocationPlaceholder")}),v(c5,{onChange:a,value:o})]})}),H0(DP,{className:"mt-4 shrink-0 flex flex-col-reverse gap-2 sm:flex-row sm:gap-0",children:[P?.id&&v(h,{className:"w-full sm:mr-auto sm:w-auto",onClick:Q0,size:"sm",type:"button",variant:"destructive",children:K("delete")}),H0("div",{className:"flex w-full gap-2 sm:w-auto",children:[v(h,{className:"flex-1 sm:flex-none",onClick:$,size:"sm",type:"button",variant:"outline",children:K("cancel")}),v(h,{className:"flex-1 sm:flex-none",size:"sm",type:"submit",children:P?.id?K("update"):K("create")})]})]})]}),v(RP,{eventTitle:Q.event?.title||"",isOpen:Q.isOpen,onClose:q,onConfirm:_,operationType:Q.operationType})]})};import{jsx as P2,jsxs as d5}from"react/jsx-runtime";var $2=()=>{let{t:P,selectedEvent:$,isEventFormOpen:Z,closeEventForm:J,addEvent:X,updateEvent:Q,deleteEvent:Y,renderEventForm:U}=B((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})),L={open:Z,onClose:J,selectedEvent:$,onAdd:X,onUpdate:(K)=>{Q(K.id,K)},onDelete:(K)=>{Y(K.id)}};if(U)return U(L);return P2(UP,{onOpenChange:J,open:Z,children:d5(zP,{className:"flex flex-col h-[90vh] w-[90vw] max-w-[500px] p-4 sm:p-6 overflow-hidden gap-0",children:[d5(KP,{className:"mb-2 sm:mb-4 shrink-0",children:[P2(_P,{className:"text-base sm:text-lg",children:$?.id?P("editEvent"):P("createEvent")}),P2(jP,{className:"text-xs sm:text-sm",children:$?.id?P("editEventDetails"):P("addNewEvent")})]}),P2(u5,{...L})]})})};import{Calendar as j$,Download as x$,Menu as v$,Plus as y$}from"lucide-react";import{useState as c$}from"react";import{RRule as M$}from"rrule";var j2=`\r
1
+ import{RRule as LU}from"rrule";import{AnimatePresence as f4,motion as A4}from"motion/react";import{clsx as G4}from"clsx";import{twMerge as L4}from"tailwind-merge";import N0 from"dayjs";import Z4 from"dayjs/plugin/isBetween.js";import J4 from"dayjs/plugin/isSameOrAfter.js";import X4 from"dayjs/plugin/isSameOrBefore.js";import Q4 from"dayjs/plugin/localeData.js";import Y4 from"dayjs/plugin/minMax.js";import q4 from"dayjs/plugin/timezone.js";import U4 from"dayjs/plugin/utc.js";import z4 from"dayjs/plugin/weekday.js";import K4 from"dayjs/plugin/weekOfYear.js";var s2,_4=(P,$,Z)=>{let J=$.prototype,X=Z.tz.setDefault;Z.tz.setDefault=(q)=>{return s2=q,X(q)};let{startOf:Q,endOf:Y}=J;function U(q,_){let L=q.$x?.$timezone||s2;if(!L)return _;let K=Z.tz(_.format("YYYY-MM-DDTHH:mm:ss"),L).utcOffset();if(_.utcOffset()!==K)return _.tz(L,!0);return _}J.startOf=function(q,_){let L=Q.call(this,q,_);return U(this,L)},J.endOf=Y};N0.extend(z4);N0.extend(K4);N0.extend(J4);N0.extend(X4);N0.extend(Z4);N0.extend(Y4);N0.extend(q4);N0.extend(U4);N0.extend(Q4);N0.extend(_4);var e2=(...P)=>{return N0.tz(...P)};Object.assign(e2,N0);var I=e2;var j0=1,P5=24,R0=24,YP=4,$5="bg-secondary text-muted-foreground pointer-events-none",x0={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6};function A(...P){return L4(G4(P))}var CP=(P)=>{if(!P||P.length===0)return;return new Set(P.map(($)=>x0[$]))};function qP(P){if(P===void 0)return;if(I.isDayjs(P))return P;let $=I(P);return $.isValid()?$:void 0}var Z5=(P,$)=>{let Z={...P};for(let J of $)delete Z[J];return Z};function EP(P){if(!P||!P.length)return[];return P.map(($)=>{return{...$,start:I.isDayjs($.start)?$.start:I($.start),end:I.isDayjs($.end)?$.end:I($.end)}})}import{jsx as J5}from"react/jsx-runtime";var N4={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:q,..._})=>J5(f4,{mode:"wait",children:J5(A4.div,{animate:"visible",className:A("inline-block w-full",J),custom:{delay:Z,direction:X},"data-testid":U,exit:"exit",initial:"hidden",layout:Q,layoutId:Y,ref:q,variants:N4,..._,children:P},$)});E.displayName="AnimatedSection";import{DndContext as E4,MouseSensor as D4,pointerWithin as j4,TouchSensor as x4,useSensor as F5,useSensors as v4}from"@dnd-kit/core";import{useRef as O5,useState as y4}from"react";import{Slot as W4}from"@radix-ui/react-slot";import{cva as F4}from"class-variance-authority";import{jsx as V4}from"react/jsx-runtime";var O4=F4("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 h({className:P,variant:$,size:Z,asChild:J=!1,...X}){return V4(J?W4:"button",{className:A(O4({variant:$,size:Z,className:P})),"data-slot":"button",...X})}import*as Z0 from"@radix-ui/react-dialog";import{XIcon as B4}from"lucide-react";import{jsx as I0,jsxs as V2}from"react/jsx-runtime";function UP({...P}){return I0(Z0.Root,{"data-slot":"dialog",...P})}function M4({...P}){return I0(Z0.Portal,{"data-slot":"dialog-portal",...P})}function p4({className:P,...$}){return I0(Z0.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 zP({className:P,children:$,...Z}){return V2(M4,{"data-slot":"dialog-portal",children:[I0(p4,{}),V2(Z0.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(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:[I0(B4,{}),I0("span",{className:"sr-only",children:"Close"})]})]})]})}function KP({className:P,...$}){return I0("div",{className:A("flex flex-col gap-2 text-center sm:text-left",P),"data-slot":"dialog-header",...$})}function DP({className:P,...$}){return I0("div",{className:A("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",P),"data-slot":"dialog-footer",...$})}function _P({className:P,...$}){return I0(Z0.Title,{className:A("text-lg leading-none font-semibold",P),"data-slot":"dialog-title",...$})}function jP({className:P,...$}){return I0(Z0.Description,{className:A("text-muted-foreground text-sm",P),"data-slot":"dialog-description",...$})}import{useContext as f5}from"react";import{createContext as R4}from"react";var xP=R4(void 0);import{createContext as I4}from"react";var vP=I4(void 0);import{useCallback as Y0,useMemo as H4,useState as G5}from"react";import{useCallback as s,useEffect as p2,useMemo as K5,useRef as R2,useState as e0}from"react";import{RRule as S4}from"rrule";var yP=(P)=>{return new Date(Date.UTC(P.year(),P.month(),P.date(),P.hour(),P.minute(),P.second(),P.millisecond()))},T4=(P,$)=>{return $.year(P.getUTCFullYear()).month(P.getUTCMonth()).date(P.getUTCDate()).hour(P.getUTCHours()).minute(P.getUTCMinutes()).second(P.getUTCSeconds()).millisecond(P.getUTCMilliseconds())},GP=(P)=>{return Boolean(P.rrule||P.recurrenceId||P.uid)},v0=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},X5=(P,$)=>{let Z=v0($),J=P.findIndex((X)=>v0(X)===Z&&X.rrule&&!X.recurrenceId);if(J===-1)throw Error("Base recurring event not found");return J},Q5=(P)=>P.start.subtract(1,"day").endOf("day").toDate(),B2=({event:P,currentEvents:$,startDate:Z,endDate:J})=>{if(!P.rrule)return[];try{let X=yP(P.start),Q=P.rrule.until?yP(I(P.rrule.until)):void 0,Y={...P.rrule,dtstart:X,until:Q},U=new S4(Y),q=v0(P),_=$.filter((z)=>z.recurrenceId&&v0(z)===q),L=P.end.diff(P.start),K=yP(Z.subtract(L,"millisecond")),W=yP(J);return U.between(K,W,!0).map((z,N)=>{let G=T4(z,P.start),F=_.find((g)=>qP(g.recurrenceId)?.isSame(G));if(F)return{...P,...F};let M=P.end.diff(P.start),p=G.add(M,"millisecond"),S=`${P.id}_${N}`,R=v0(P);return{...P,id:S,start:G,end:p,uid:R,rrule:void 0}}).filter((z)=>{if(P.exdates&&P.exdates.length>0){let F=z.start.toISOString();if(P.exdates?.includes(F))return!1}return z.start.isSameOrBefore(J)&&z.end.isSameOrAfter(Z)})}catch(X){throw Error(`Invalid RRULE options: ${JSON.stringify(P.rrule)}. Error: ${X instanceof Error?X.message:"Unknown error"}`)}},Y5=({targetEvent:P,updates:$,currentEvents:Z,scope:J})=>{let X=[...Z],Q=X5(X,P),Y=X[Q];switch(J){case"this":{let U=P.start.toISOString(),_=[...Y.exdates||[],U],L={...Y,exdates:_};X[Q]=L;let K=`${P.id}_modified_${Date.now()}`,W={...Z5(P,["width","height","top","left","right"]),...$,id:K,recurrenceId:U,uid:v0(Y),rrule:void 0};X.push(W);break}case"following":{let U=Q5(P),q={...Y,rrule:{...Y.rrule,until:U}};X[Q]=q;let _=Y.end.diff(Y.start),L=$.start||P.start,K=$.end||L.add(_),W=`${Y.id}_following`,O=`${W}@ilamy.calendar`,f={...Y,...$,rrule:{...Y.rrule,...$.rrule,dtstart:L.toDate()},id:W,uid:O,start:L,end:K,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},q5=({targetEvent:P,currentEvents:$,scope:Z})=>{let J=[...$],X=X5(J,P),Q=J[X];switch(Z){case"this":{let Y=P.start.toISOString(),q=[...Q.exdates||[],Y],_={...Q,exdates:q};J[X]=_;break}case"following":{let Y={...Q,rrule:{...Q.rrule,until:Q5(P)}};J[X]=Y;break}case"all":{let Y=v0(P);return J.filter((q)=>v0(q)!==Y)}default:throw Error(`Invalid scope: ${Z}. Must be 'this', 'following', or 'all'`)}return J};var M2={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(I(),"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 U5(P){let $=P.daysInMonth(),Z=P.startOf("month");return Array.from({length:$},(J,X)=>Z.add(X,"day"))}function z5({referenceDate:P=I(),length:$=24}={}){let Z=P.startOf("day");return Array.from({length:$},(J,X)=>Z.hour(X).minute(0).second(0).millisecond(0))}function fP(P,$){let Z=new Set($.map((J)=>String(J.id)));return P.filter((J)=>Z.has(String(J.id)))}function cP(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 _5={day:"day",week:"week",month:"month",year:"year"},I2=(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")}},oP=(P)=>{let{events:$=[],firstDayOfWeek:Z=0,initialView:J="month",initialDate:X=I(),businessHours:Q,onEventAdd:Y,onEventUpdate:U,onEventDelete:q,onDateChange:_,onViewChange:L,locale:K,timezone:W,translations:O,translator:f}=P,[z,N]=e0(I.isDayjs(X)?X:I(X)),[G,F]=e0(J),[M,p]=e0($),[S,R]=e0(!1),[b,g]=e0(null),[D,u]=e0(null),[c,P0]=e0(K||"en"),j=R2($),k=R2(W),o=R2(K),G0=K5(()=>{if(f)return f;let H=O||M2;return(w)=>H[w]||w},[O,f]),F0=s((H,w)=>{let y=[];for(let f0 of M)if(f0.rrule)y.push(...B2({event:f0,currentEvents:M,startDate:H,endDate:w}));else if(cP(f0,H,w))y.push(f0);return y},[M]),M0=s(()=>{return I2(z,G,Z)},[z,G,Z]),X0=K5(()=>{let{start:H,end:w}=M0();return F0(H,w)},[F0,M0]);p2(()=>{if($!==j.current)p($),j.current=$},[$]),p2(()=>{if(K&&K!==o.current)P0(K),I.locale(K),N((H)=>H.locale(K)),o.current=K},[K]),p2(()=>{if(W&&W!==k.current)I.tz.setDefault(W),N((H)=>H.tz(W)),p((H)=>H.map((w)=>({...w,start:w.start.tz(W),end:w.end.tz(W)}))),k.current=W},[W]);let q0=s((H)=>{N(H);let w=I2(H,G,Z);_?.(H,w)},[_,G,Z]),m0=q0,L0=s((H)=>{let w=H===1?z.add(1,_5[G]):z.subtract(1,_5[G]);q0(w)},[z,G,q0]),Q0=s(()=>L0(1),[L0]),a=s(()=>L0(-1),[L0]),s0=s(()=>q0(I()),[q0]),l=s((H)=>{p((w)=>[...w,H]),Y?.(H)},[Y]),p0=s((H,w)=>{let y=M.find((QP)=>QP.id===H);if(!y)return;let f0={...y,...w};p((QP)=>QP.map((RP)=>RP.id===H?f0:RP)),U?.(f0)},[M,U]),D0=s((H,w,y)=>{U?.({...H,...w}),p(Y5({targetEvent:H,updates:w,currentEvents:M,scope:y.scope}))},[M,U]),JP=s((H,w)=>{q?.(H),p(q5({targetEvent:H,currentEvents:M,scope:w.scope}))},[M,q]),XP=s((H)=>{let w=M.find((y)=>y.id===H);if(!w)return;p((y)=>y.filter((f0)=>f0.id!==H)),q?.(w)},[M,q]),T=s((H)=>{if(H?.start)u(H.start);let w=H?.start??z;g({title:G0("newEvent"),start:w,end:H?.end??w.add(1,"hour"),resourceId:H?.resourceId,description:"",allDay:H?.allDay??!1}),R(!0)},[z,G0]),d=s(()=>{u(null),g(null),R(!1)},[]),$0=s((H)=>{F(H),L?.(H);let w=I2(z,H,Z);_?.(z,w)},[L,_,z,Z]),O0=s((H)=>{let w=H.uid;return M.find((y)=>(y.uid||`${y.id}@ilamy.calendar`)===w&&y.rrule)||null},[M]);return{currentDate:z,view:G,events:X0,rawEvents:M,isEventFormOpen:S,selectedEvent:b,selectedDate:D,firstDayOfWeek:Z,dayMaxEvents:YP,currentLocale:c,businessHours:Q,setCurrentDate:N,selectDate:m0,setView:$0,nextPeriod:Q0,prevPeriod:a,today:s0,addEvent:l,updateEvent:p0,updateRecurringEvent:D0,deleteEvent:XP,deleteRecurringEvent:JP,openEventForm:T,closeEventForm:d,setSelectedEvent:g,setIsEventFormOpen:R,setSelectedDate:u,getEventsForDateRange:F0,findParentRecurringEvent:O0,t:G0}};import{jsx as b4}from"react/jsx-runtime";var S2=(P)=>{if(P.resourceIds)return P.resourceIds;if(P.resourceId!==void 0)return[P.resourceId];return[]},L5=({children:P,events:$=[],resources:Z=[],firstDayOfWeek:J=0,initialView:X="month",initialDate:Q,renderEvent:Y,onEventClick:U,onCellClick:q,onViewChange:_,onEventAdd:L,onEventUpdate:K,onEventDelete:W,onDateChange:O,locale:f,timezone:z,disableCellClick:N,disableEventClick:G,disableDragAndDrop:F,dayMaxEvents:M,eventSpacing:p=1,eventHeight:S=R0,stickyViewHeader:R=!0,viewHeaderClassName:b="",headerComponent:g,headerClassName:D,translations:u,translator:c,renderResource:P0,renderEventForm:j,businessHours:k,timeFormat:o="12-hour",classesOverride:G0,orientation:F0="horizontal",renderCurrentTimeIndicator:M0,renderHour:X0,hideNonBusinessHours:q0=!1,hiddenDays:m0,weekViewGranularity:L0="hourly"})=>{let[Q0]=G5(Z),[a,s0]=G5(new Set(Z.map((m)=>m.id))),l=oP({events:$,firstDayOfWeek:J,initialView:X,initialDate:Q,businessHours:k,onEventAdd:L,onEventUpdate:K,onEventDelete:W,onDateChange:O,onViewChange:_,locale:f,timezone:z,translations:u,translator:c}),p0=Y0((m,A0)=>{s0((O2)=>{let hP=new Set(O2);if(m==="show"||m==="toggle"&&!hP.has(A0))hP.add(A0);else hP.delete(A0);return hP})},[]),D0=Y0((m)=>p0("show",m),[p0]),JP=Y0((m)=>p0("hide",m),[p0]),XP=Y0((m)=>p0("toggle",m),[p0]),T=Y0(()=>s0(new Set(Q0.map((m)=>m.id))),[Q0]),d=Y0(()=>s0(new Set),[]),$0=Y0((m)=>l.events.filter((A0)=>S2(A0).includes(m)),[l.events]),O0=Y0((m)=>l.events.filter((A0)=>S2(A0).some((O2)=>m.includes(O2))),[l.events]),H=Y0((m)=>{return Q0.find((A0)=>A0.id===m)},[Q0]),w=Y0(()=>{return Q0.filter((m)=>a.has(m.id))},[Q0,a]),y=Y0((m)=>{return Boolean(m.resourceIds&&m.resourceIds.length>1)},[]),f0=Y0((m)=>{l.setSelectedEvent(m),l.setIsEventFormOpen(!0)},[l]),QP=Y0((m)=>{if(G)return;if(U)U(m);else f0(m)},[G,U,f0]),RP=Y0((m)=>{if(N)return;if(q)q(m);else{let A0={title:l.t("newEvent"),start:m.start,end:m.end,description:"",allDay:!1};if(m.resourceId!==void 0)A0.resourceId=m.resourceId;l.setSelectedEvent(A0),l.setSelectedDate(m.start),l.setIsEventFormOpen(!0)}},[q,N,l]),$4=H4(()=>({...l,resources:Q0,visibleResources:a,toggleResourceVisibility:XP,showResource:D0,hideResource:JP,showAllResources:T,hideAllResources:d,getEventsForResource:$0,getEventsForResources:O0,getResourceById:H,getVisibleResources:w,isEventCrossResource:y,getEventResourceIds:S2,onEventClick:QP,onCellClick:RP,renderEvent:Y,renderResource:P0,renderEventForm:j,headerComponent:g,headerClassName:D,locale:f,timezone:z,disableCellClick:N,disableEventClick:G,disableDragAndDrop:F,dayMaxEvents:M,eventSpacing:p,eventHeight:S,stickyViewHeader:R,viewHeaderClassName:b,businessHours:k,timeFormat:o,classesOverride:G0,orientation:F0,renderCurrentTimeIndicator:M0,renderHour:X0,hideNonBusinessHours:q0,hiddenDays:m0,weekViewGranularity:L0}),[l,Q0,a,XP,D0,JP,T,d,$0,O0,H,w,y,QP,RP,Y,P0,j,f,z,N,G,F,M,p,S,R,b,g,D,k,o,G0,F0,M0,X0,q0,m0,L0]);return b4(vP.Provider,{value:$4,children:P})};function B(P){let $=f5(vP),Z=f5(xP),J=$||Z;if(!J)throw Error("useSmartCalendarContext must be used within a CalendarProvider or ResourceCalendarProvider");return P?P(J):J}function w4(){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 y0,jsxs as lP}from"react/jsx-runtime";var m4=[{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 IP({isOpen:P,onClose:$,onConfirm:Z,operationType:J,eventTitle:X}){let{t:Q}=B((q)=>({t:q.t})),Y=(q)=>{Z(q),$()},U=J==="edit";return y0(UP,{onOpenChange:$,open:P,children:lP(zP,{className:"max-w-md",children:[lP(KP,{children:[y0(_P,{children:U?Q("editRecurringEvent"):Q("deleteRecurringEvent")}),lP(jP,{children:['"',X,'"'," ",U?Q("editRecurringEventQuestion"):Q("deleteRecurringEventQuestion")]})]}),y0("div",{className:"space-y-3",children:m4.map(({scope:q,title:_,editKey:L,deleteKey:K})=>y0(h,{className:"w-full justify-start h-auto p-4",onClick:()=>Y(q),variant:"outline",children:lP("div",{className:"text-left",children:[y0("div",{className:"font-medium",children:Q(_)}),y0("div",{className:"text-sm text-muted-foreground",children:Q(U?L:K)})]})},q))}),y0(DP,{children:y0(h,{onClick:$,variant:"outline",children:Q("cancel")})})]})})}var A5=(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,q;if(Q){let{date:W,hour:O=0,minute:f=0}=X;q=I(W).hour(O).minute(f)}else{let{date:W}=X;q=I(W)}let _=$.end.diff($.start,"second"),L=q.add(_,"second");if(L.isSame(L.startOf("day")))L=L.subtract(1,"day").endOf("day");let K={start:q,end:L,resourceId:Y,allDay:Q?!1:U??$.allDay};return{activeEvent:$,updates:K}};import{DragOverlay as g4}from"@dnd-kit/core";import{snapCenterToCursor as k4}from"@dnd-kit/modifiers";import{useImperativeHandle as h4,useState as C4}from"react";import{jsx as N5}from"react/jsx-runtime";var W5=({ref:P})=>{let[$,Z]=C4(null);return h4(P,()=>({setActiveEvent:Z})),N5(g4,{modifiers:[k4],children:$&&N5("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 V5,jsxs as B5,Fragment as c4}from"react/jsx-runtime";var T2={isOpen:!1,event:null,updates:null};function iP({children:P}){let $=O5(null),Z=O5(null),{updateEvent:J,updateRecurringEvent:X,disableDragAndDrop:Q}=B((G)=>({updateEvent:G.updateEvent,updateRecurringEvent:G.updateRecurringEvent,disableDragAndDrop:G.disableDragAndDrop})),[Y,U]=y4({isOpen:!1,event:null,updates:null}),q=F5(D4,{activationConstraint:{distance:2}}),_=F5(x4,{activationConstraint:{delay:100,tolerance:5}}),L=v4(q,_),K=(G,F)=>{if(!G?.id||!F||Object.keys(F).length===0)return;if(GP(G))U({isOpen:!0,event:G,updates:F});else J(G.id,F)},W=(G)=>{if(!Y.event||!Y.updates){U(T2);return}try{X(Y.event,Y.updates,{scope:G,eventDate:Y.event.start})}catch{}finally{U(T2)}},O=()=>{U(T2)},f=(G)=>{let{active:F}=G;if(F.data.current?.type==="calendar-event")Z.current?.setActiveEvent(F.data.current.event),$.current=F.data.current.event},z=(G)=>{let F=A5(G,$.current);if(F){let{activeEvent:M,updates:p}=F;K(M,p)}$.current=null,Z.current?.setActiveEvent(null)},N=(G)=>{$.current=null};if(Q)return P;return B5(c4,{children:[B5(E4,{collisionDetection:j4,onDragCancel:N,onDragEnd:z,onDragStart:f,sensors:L,children:[P,V5(W5,{ref:Z})]}),V5(IP,{eventTitle:Y.event?.title||"",isOpen:Y.isOpen,onClose:O,onConfirm:W,operationType:"edit"})]})}import{useEffect as V$,useState as u0}from"react";import*as uP from"@radix-ui/react-checkbox";import{CheckIcon as o4}from"lucide-react";import{jsx as H2}from"react/jsx-runtime";function AP({className:P,...$}){return H2(uP.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:H2(uP.Indicator,{className:"flex items-center justify-center text-current transition-none","data-slot":"checkbox-indicator",children:H2(o4,{className:"size-3.5"})})})}import{PopoverClose as r4}from"@radix-ui/react-popover";import{Calendar as n4}from"lucide-react";import{useEffect as a4,useRef as t4,useState as s4}from"react";import{ChevronLeftIcon as l4,ChevronRightIcon as i4}from"lucide-react";import{useState as u4}from"react";import{jsx as W0,jsxs as b2}from"react/jsx-runtime";var d4=["S","M","T","W","T","F","S"];function M5({selected:P,defaultMonth:$,onSelect:Z,disabled:J,firstDayOfWeek:X=0,className:Q}){let[Y,U]=u4(()=>I($??P??new Date).startOf("month")),q=LP(Y,X),_=P?I(P).format("YYYY-MM-DD"):void 0,L=Array.from({length:7},(K,W)=>d4[(X+W)%7]);return b2("div",{className:A("bg-background p-3 w-[280px]",Q),"data-slot":"calendar",children:[b2("div",{className:"flex items-center justify-between mb-2",children:[W0(h,{"aria-label":"Previous month",onClick:()=>U((K)=>K.subtract(1,"month")),size:"icon",variant:"ghost",children:W0(l4,{className:"size-4"})}),W0("div",{className:"text-sm font-medium select-none",children:Y.format("MMMM YYYY")}),W0(h,{"aria-label":"Next month",onClick:()=>U((K)=>K.add(1,"month")),size:"icon",variant:"ghost",children:W0(i4,{className:"size-4"})})]}),b2("table",{className:"w-full border-collapse",role:"grid",children:[W0("thead",{children:W0("tr",{children:L.map((K,W)=>W0("th",{className:"text-muted-foreground text-xs font-medium select-none py-1",children:K},W))})}),W0("tbody",{children:q.map((K,W)=>W0("tr",{children:K.map((O)=>{let f=!O.isSame(Y,"month"),z=O.format("YYYY-MM-DD")===_,N=J?.(O.toDate())??!1;return W0("td",{className:"p-0 text-center","data-disabled":N,"data-outside":f,"data-selected":z,role:"gridcell",tabIndex:-1,children:W0("button",{"aria-disabled":N,"aria-hidden":f,className:A("w-full aspect-square rounded-md text-sm select-none",!N&&"hover:bg-accent cursor-pointer",f&&"text-muted-foreground/50",t(O)&&!z&&"bg-accent text-accent-foreground",z&&"bg-primary text-primary-foreground font-medium",N&&"opacity-50 cursor-not-allowed"),"data-disabled":N,"data-selected":z,disabled:N||f,onClick:()=>Z?.(O.toDate()),tabIndex:f?-1:0,type:"button",children:O.format("D")})},O.toISOString())})},W))})]})]})}import*as g0 from"@radix-ui/react-popover";import{jsx as dP}from"react/jsx-runtime";function c0({...P}){return dP(g0.Root,{"data-slot":"popover",...P})}function o0({...P}){return dP(g0.Trigger,{"data-slot":"popover-trigger",...P})}function l0({className:P,align:$="center",sideOffset:Z=4,...J}){return dP(g0.Portal,{children:dP(g0.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,...J})})}import{jsx as NP,jsxs as w2}from"react/jsx-runtime";function rP({date:P,closeOnSelect:$,onChange:Z,label:J="Pick a date",className:X,disabled:Q}){let Y=t4(null),[U,q]=s4(P);a4(()=>{q(P)},[P]);let _=(L)=>{if(q(L),$)Y.current?.click();Z?.(L)};return NP("div",{className:X,children:w2(c0,{children:[NP(o0,{asChild:!0,children:w2(h,{className:A("data-[empty=true]:text-muted-foreground w-full justify-start text-left font-normal"),"data-empty":!P,variant:"outline",children:[NP(n4,{}),U?I(U).format("MMM D, YYYY"):NP("span",{children:J})]})}),w2(l0,{align:"start",className:"w-auto p-0",children:[NP(r4,{ref:Y,style:{display:"none"}}),NP(M5,{defaultMonth:U,disabled:Q,onSelect:_,selected:U})]})]})})}import{jsx as e4}from"react/jsx-runtime";function PP({className:P,type:$,...Z}){return e4("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 p5 from"@radix-ui/react-label";import{jsx as P$}from"react/jsx-runtime";function z0({className:P,...$}){return P$(p5.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 S0 from"@radix-ui/react-scroll-area";import{jsx as SP,jsxs as $$}from"react/jsx-runtime";function T0({className:P,children:$,viewPortProps:Z,...J}){return $$(S0.Root,{className:A("relative",P),"data-slot":"scroll-area",...J,children:[SP(S0.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:$}),SP(k0,{}),SP(S0.Corner,{})]})}function k0({className:P,orientation:$="vertical",...Z}){return SP(S0.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:SP(S0.ScrollAreaThumb,{className:"bg-border relative flex-1 rounded-full","data-slot":"scroll-area-thumb"})})}import{Clock as X$}from"lucide-react";import{useEffect as Q$,useRef as I5,useState as m2}from"react";import{useMemo as Z$}from"react";function R5({timeFormat:P="12-hour",minTime:$="00:00",maxTime:Z="23:45"}){return{timeOptions:Z$(()=>{let Q=[],[Y,U]=$.split(":").map(Number),[q,_]=Z.split(":").map(Number),L=Y*60+U,K=q*60+_;for(let W=L;W<=K;W+=15){let O=Math.floor(W/60),f=W%60,z=`${O.toString().padStart(2,"0")}:${f.toString().padStart(2,"0")}`;Q.push(z)}return Q},[$,Z]),formatTime:(Q)=>{let[Y,U]=Q.split(":").map(Number),q=Y>=12?"PM":"AM",_=Y===0?12:Y>12?Y-12:Y;if(P==="24-hour")return`${Y.toString().padStart(2,"0")}:${U.toString().padStart(2,"0")}`;return`${_}:${U.toString().padStart(2,"0")} ${q}`}}}var WP=(P)=>String(P).padStart(2,"0"),J$=(P)=>typeof P==="number"?WP(P):P,V={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-${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)=>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 i0,jsxs as g2}from"react/jsx-runtime";var Y$=(P)=>{P.stopPropagation()};function S5({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:q}){let[_,L]=m2(!1),[K,W]=m2(""),O=I5(null),f=I5(null),[z,N]=m2(0),{timeOptions:G,formatTime:F}=R5({timeFormat:X,minTime:Z,maxTime:J}),M=G.filter((R)=>{return F(R).toLowerCase().includes(K.toLowerCase())}),p=(R)=>{$(R),L(!1),W("")};Q$(()=>{if(_){if(f.current)N(f.current.offsetWidth);setTimeout(()=>{O.current?.focus()},0)}},[_]);let S=P?F(P):Q;return g2(c0,{onOpenChange:L,open:_,children:[i0(o0,{asChild:!0,children:g2(h,{"aria-controls":"time-picker-listbox","aria-expanded":_,className:A("w-full justify-start",Y),"data-testid":V.timePicker(q),disabled:U,ref:f,role:"combobox",variant:"outline",children:[i0(X$,{className:"mr-2 h-4 w-4"}),S]})}),g2(l0,{align:"start",className:"p-0",style:{width:z},children:[i0("div",{className:"p-2 border-b",children:i0(PP,{className:"h-8",onChange:(R)=>W(R.target.value),placeholder:"Search time...",ref:O,value:K})}),i0(T0,{className:"h-[200px]",onWheel:Y$,children:i0("div",{className:"p-1",children:M.length===0?i0("div",{className:"py-6 text-center text-sm text-muted-foreground",children:"N/A"}):M.map((R)=>{let b=F(R);return i0("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",R===P&&"bg-accent text-accent-foreground"),onClick:()=>p(R),type:"button",children:b},R)})})})]})]})}var k2=(P,$)=>{if(!$)return!0;let Z=!1;return nP($,{date:P,onMatch:()=>{Z=!0}}),Z},T5=({date:P,hour:$,minute:Z=0,businessHours:J})=>{if(!J)return!0;if($===void 0)return k2(P,J);let X=!1,Q=$*60+Z;return nP(J,{date:P,onMatch:(Y)=>{let U=Y.startTime??9,q=Y.endTime??17,_=U*60,L=q*60;if(Q>=_&&Q<L)X=!0}}),X},nP=(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)=>x0[U]===Y))J(Q)}else J(Q)},aP=(P)=>{let{allDates:$,businessHours:Z,resourceBusinessHours:J=[],hideNonBusinessHours:X}=P,Q=24,Y=0,U=!1,q=(L)=>{U=!0,Q=Math.min(Q,L.startTime??9),Y=Math.max(Y,L.endTime??17)},_=(L)=>{nP(Z,{date:L,onMatch:q});for(let K of J)nP(K,{date:L,onMatch:q})};for(let L of $)_(L);if(!U&&X){if(_(),!U)Q=9,Y=17,U=!0}return{minStart:Q,maxEnd:Y,hasBusinessHours:U}};var h2=(P,$,Z)=>{let[J,X]=$.split(":").map(Number),Q=I(P).hour(J).minute(X);return Z?Q.hour(0).minute(0):Q},H5=(P,$,Z)=>{let[J,X]=$.split(":").map(Number),Q=I(P).hour(J).minute(X);return Z?Q.hour(23).minute(59):Q},C2=(P,$)=>{if(!$)return{min:"00:00",max:"23:59"};let Z=I(P),{minStart:J,maxEnd:X,hasBusinessHours:Q}=aP({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 _$,useMemo as G$,useState as x5}from"react";import{RRule as J0}from"rrule";import{jsx as tP}from"react/jsx-runtime";function b5({className:P,...$}){return tP("div",{className:A("text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm",P),"data-slot":"card",...$})}function w5({className:P,...$}){return tP("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 m5({className:P,...$}){return tP("div",{className:A("leading-none font-semibold",P),"data-slot":"card-title",...$})}function g5({className:P,...$}){return tP("div",{className:A("p-4 pt-0",P),"data-slot":"card-content",...$})}import*as C from"@radix-ui/react-select";import{CheckIcon as q$,ChevronDownIcon as k5,ChevronUpIcon as U$}from"lucide-react";import{jsx as e,jsxs as E2}from"react/jsx-runtime";function h5({...P}){return e(C.Root,{"data-slot":"select",...P})}function C5({...P}){return e(C.Value,{"data-slot":"select-value",...P})}function E5({className:P,size:$="default",children:Z,...J}){return E2(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",...J,children:[Z,e(C.Icon,{asChild:!0,children:e(k5,{className:"size-4 opacity-50"})})]})}function D5({className:P,children:$,position:Z="popper",align:J="center",...X}){return e(C.Portal,{children:E2(C.Content,{align:J,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,...X,children:[e(z$,{}),e(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:$}),e(K$,{})]})})}function j5({className:P,children:$,...Z}){return E2(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:[e("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:e(C.ItemIndicator,{children:e(q$,{className:"size-4"})})}),e(C.ItemText,{children:$})]})}function z$({className:P,...$}){return e(C.ScrollUpButton,{className:A("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-up-button",...$,children:e(U$,{className:"size-4"})})}function K$({className:P,...$}){return e(C.ScrollDownButton,{className:A("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-down-button",...$,children:e(k5,{className:"size-4"})})}import{jsx as x,jsxs as K0,Fragment as W$}from"react/jsx-runtime";var D2={DAILY:J0.DAILY,WEEKLY:J0.WEEKLY,MONTHLY:J0.MONTHLY,YEARLY:J0.YEARLY},L$=Object.fromEntries(Object.entries(D2).map(([P,$])=>[$,P])),v5=[J0.SU,J0.MO,J0.TU,J0.WE,J0.TH,J0.FR,J0.SA],f$=["sun","mon","tue","wed","thu","fri","sat"],A$=[{type:"never",id:"never",labelKey:"never"},{type:"count",id:"after",labelKey:"after"},{type:"until",id:"on",labelKey:"on"}],y5=(P)=>Math.max(1,Number.parseInt(P,10)||1),N$=(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")}},c5=({value:P,onChange:$})=>{let{t:Z}=B((z)=>({t:z.t})),[J,X]=x5(!!P),[Q,Y]=x5(()=>P||null),U=G$(()=>f$.map((z,N)=>({value:v5[N],label:Z(z)})),[Z]);_$(()=>{if(X(!!P),P)Y(P)},[P]);let q=(z)=>{if(!Q)return;let N={...Q,...z};Y(N),$(J?N:null)},_=(z)=>{if(X(z),!z){$(null);return}if(Q){$(Q);return}let N={freq:J0.DAILY,interval:1};Y(N),$(N)},L=(z)=>{let N=Q?.byweekday||[],G=v5[z],F=N.includes(G)?N.filter((M)=>M!==G):[...N,G];q({byweekday:F.length?F:void 0})},K=(z)=>{let N={count:void 0,until:void 0};if(z==="count")N.count=Q?.count||1;if(z==="until")N.until=Q?.until||I().add(1,"month").endOf("day").toDate();q(N)},W=Q?.until?"until":Q?.count?"count":"never",O=L$[Q?.freq??J0.DAILY]||"DAILY",f=Array.isArray(Q?.byweekday)?Q.byweekday:Q?.byweekday?[Q.byweekday]:[];return K0(b5,{"data-testid":"recurrence-editor",children:[K0(w5,{className:"pb-3",children:[K0("div",{className:"flex items-center space-x-2",children:[x(AP,{checked:J,"data-testid":"toggle-recurrence",id:"recurring",onCheckedChange:_}),x(m5,{className:"text-sm",children:Z("repeat")})]}),J&&P&&x("p",{className:"text-xs text-muted-foreground",children:N$(P,Z)})]}),J&&x(g5,{className:"pt-0",children:K0("div",{className:"space-y-4",children:[K0("div",{className:"grid grid-cols-2 gap-4",children:[K0("div",{children:[x(z0,{className:"text-xs",htmlFor:"frequency",children:Z("repeats")}),K0(h5,{onValueChange:(z)=>q({freq:D2[z]}),value:O,children:[x(E5,{className:"h-8","data-testid":"frequency-select",id:"frequency",children:x(C5,{})}),x(D5,{children:Object.keys(D2).map((z)=>x(j5,{value:z,children:Z(z.toLowerCase())},z))})]})]}),K0("div",{children:[x(z0,{className:"text-xs",htmlFor:"interval",children:Z("every")}),x(PP,{className:"h-8",id:"interval",min:"1",onChange:(z)=>q({interval:y5(z.target.value)}),type:"number",value:Q?.interval||1})]})]}),Q?.freq===J0.WEEKLY&&K0("div",{children:[x(z0,{className:"text-xs",children:Z("repeatOn")}),x("div",{className:"flex flex-wrap gap-1 mt-1",children:U.map((z,N)=>K0("div",{className:"flex items-center space-x-1",children:[x(AP,{checked:f.includes(z.value),id:V.listKey("day",N),onCheckedChange:()=>L(N)}),x(z0,{className:"text-xs cursor-pointer",htmlFor:V.listKey("day",N),children:z.label})]},z.label))})]}),K0("div",{children:[x(z0,{className:"text-xs",children:Z("ends")}),x("div",{className:"space-y-2 mt-1",children:A$.map(({type:z,id:N,labelKey:G})=>K0("div",{className:"flex items-center space-x-2",children:[x(AP,{checked:W===z,id:N,onCheckedChange:()=>K(z)}),x(z0,{className:"text-xs",htmlFor:N,children:Z(G)}),z==="count"&&W==="count"&&K0(W$,{children:[x(PP,{className:"h-6 w-16 text-xs","data-testid":"count-input",min:"1",onChange:(F)=>q({count:y5(F.target.value)}),type:"number",value:Q?.count||1}),x("span",{className:"text-xs",children:Z("occurrences")})]}),z==="until"&&W==="until"&&x(rP,{className:"h-6",date:Q?.until??void 0,onChange:(F)=>q({until:F?I(F).endOf("day").toDate():void 0})})]},z))})]})]})})]})};import{useCallback as sP,useState as F$}from"react";var o5={isOpen:!1,operationType:"edit",event:null};function l5(P){let{updateRecurringEvent:$,deleteRecurringEvent:Z}=B((_)=>({updateRecurringEvent:_.updateRecurringEvent,deleteRecurringEvent:_.deleteRecurringEvent})),[J,X]=F$(o5),Q=sP((_,L)=>{X({isOpen:!0,operationType:"edit",event:_,updates:L,onConfirm:(K)=>{$(_,L,{scope:K,eventDate:_.start})}})},[$]),Y=sP((_)=>{X({isOpen:!0,operationType:"delete",event:_,onConfirm:(L)=>{Z(_,{scope:L,eventDate:_.start})}})},[Z]),U=sP(()=>X(o5),[]),q=sP((_)=>{if(J.onConfirm)J.onConfirm(_);U(),P?.()},[J,U,P]);return{dialogState:J,openEditDialog:Q,openDeleteDialog:Y,closeDialog:U,handleConfirm:q}}import{useMemo as O$}from"react";var eP=(P)=>{let{businessHours:$,getResourceById:Z}=B((J)=>({businessHours:J.businessHours,getResourceById:J.getResourceById}));return O$(()=>{if(P!=null&&Z){let J=Z(P);if(J?.businessHours)return J.businessHours}return $},[P,Z,$])};import{jsx as v,jsxs as H0,Fragment as B$}from"react/jsx-runtime";var i5=[{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"}],u5=({selectedEvent:P,onClose:$,onUpdate:Z,onDelete:J,onAdd:X})=>{let{dialogState:Q,openEditDialog:Y,openDeleteDialog:U,closeDialog:q,handleConfirm:_}=l5($),{findParentRecurringEvent:L,t:K,timeFormat:W}=B((T)=>({findParentRecurringEvent:T.findParentRecurringEvent,t:T.t,timeFormat:T.timeFormat})),O=eP(P?.resourceId),f=P?.start??I(),z=P?.end??I().add(1,"hour"),N=P?L(P):null,[G,F]=u0(f.toDate()),[M,p]=u0(z.toDate()),[S,R]=u0(P?.allDay||!1),[b,g]=u0(P?.color||i5[0].value),[D,u]=u0(f.format("HH:mm")),[c,P0]=u0(z.format("HH:mm")),[j,k]=u0({title:P?.title||"",description:P?.description||"",location:P?.location||""}),[o,G0]=u0(()=>{return P?.rrule||N?.rrule||null}),F0=(T)=>{if(!T)return;if(F(T),I(T).isAfter(I(M)))p(T)},M0=(T)=>{if(!T)return;if(p(T),T&&I(T).isBefore(I(G)))F(T)},X0=(T)=>{if(u(T),I(G).isSame(I(M),"day")&&T>c)P0(T)},q0=(T)=>{if(P0(T),I(G).isSame(I(M),"day")&&T<D)u(T)},m0=(T)=>{let{name:d,value:$0}=T.target;k((O0)=>({...O0,[d]:$0}))};V$(()=>{if(S)P0("23:59")},[S]);let L0=(T)=>{T.preventDefault();let d=h2(G,D,S),$0=H5(M,c,S),O0={id:P?.id||I().format("YYYYMMDDHHmmss"),title:j.title,start:d,end:$0,resourceId:P?.resourceId,description:j.description,location:j.location,allDay:S,color:b,rrule:o||void 0};if(P?.id&&GP(P)){Y(P,{title:j.title,start:d,end:$0,description:j.description,location:j.location,allDay:S,color:b,rrule:o||void 0});return}if(P?.id)Z?.(O0);else X?.(O0);$()},Q0=()=>{if(P?.id){if(GP(P)){U(P);return}J?.(P),$()}},a=(T)=>{if(!T){G0(null);return}let d=h2(G,D,S);G0({...T,dtstart:d.toDate()})},s0=O?(T)=>!k2(I(T),O):void 0,l=C2(G,O),p0=C2(M,O),D0=({name:T,placeholder:d,required:$0=!1})=>H0("div",{className:"grid gap-1 sm:gap-2",children:[v(z0,{className:"text-xs sm:text-sm",htmlFor:T,children:K(T)}),v(PP,{className:"h-8 text-sm sm:h-9",id:T,name:T,onChange:m0,placeholder:d,required:$0,value:j[T]})]}),JP=[["startDate",G,F0],["endDate",M,M0]],XP=[["startTime","start-time",D,X0,l],["endTime","end-time",c,q0,p0]];return H0(B$,{children:[H0("form",{className:"flex flex-col flex-1 min-h-0",onSubmit:L0,children:[v(T0,{className:"flex-1 min-h-0",children:H0("div",{className:"grid gap-3 sm:gap-4 p-1",children:[v(D0,{name:"title",placeholder:K("eventTitlePlaceholder"),required:!0}),v(D0,{name:"description",placeholder:K("eventDescriptionPlaceholder")}),H0("div",{className:"flex items-center space-x-2",children:[v(AP,{checked:S,id:"allDay",onCheckedChange:(T)=>R(T===!0)}),v(z0,{className:"text-xs sm:text-sm",htmlFor:"allDay",children:K("allDay")})]}),v("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:JP.map(([T,d,$0])=>H0("div",{children:[v(z0,{className:"text-xs sm:text-sm",children:K(T)}),v(rP,{className:"mt-1",closeOnSelect:!0,date:d,disabled:s0,onChange:$0})]},T))}),!S&&v("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:XP.map(([T,d,$0,O0,H])=>H0("div",{children:[v(z0,{className:"text-xs sm:text-sm",children:K(T)}),v(S5,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:H.max,minTime:H.min,name:d,onChange:O0,placeholder:K("searchTime"),timeFormat:W,value:$0})]},T))}),H0("div",{className:"grid gap-1 sm:gap-2",children:[v(z0,{className:"text-xs sm:text-sm",children:K("color")}),v("div",{className:"flex flex-wrap gap-2",children:i5.map((T)=>v(h,{"aria-label":T.label,className:A(`${T.value} h-6 w-6 rounded-full sm:h-8 sm:w-8`,b===T.value&&"ring-2 ring-black ring-offset-1 sm:ring-offset-2"),onClick:()=>g(T.value),type:"button",variant:"ghost"},T.value))})]}),v(D0,{name:"location",placeholder:K("eventLocationPlaceholder")}),v(c5,{onChange:a,value:o})]})}),H0(DP,{className:"mt-4 shrink-0 flex flex-col-reverse gap-2 sm:flex-row sm:gap-0",children:[P?.id&&v(h,{className:"w-full sm:mr-auto sm:w-auto",onClick:Q0,size:"sm",type:"button",variant:"destructive",children:K("delete")}),H0("div",{className:"flex w-full gap-2 sm:w-auto",children:[v(h,{className:"flex-1 sm:flex-none",onClick:$,size:"sm",type:"button",variant:"outline",children:K("cancel")}),v(h,{className:"flex-1 sm:flex-none",size:"sm",type:"submit",children:P?.id?K("update"):K("create")})]})]})]}),v(IP,{eventTitle:Q.event?.title||"",isOpen:Q.isOpen,onClose:q,onConfirm:_,operationType:Q.operationType})]})};import{jsx as P2,jsxs as d5}from"react/jsx-runtime";var $2=()=>{let{t:P,selectedEvent:$,isEventFormOpen:Z,closeEventForm:J,addEvent:X,updateEvent:Q,deleteEvent:Y,renderEventForm:U}=B((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})),L={open:Z,onClose:J,selectedEvent:$,onAdd:X,onUpdate:(K)=>{Q(K.id,K)},onDelete:(K)=>{Y(K.id)}};if(U)return U(L);return P2(UP,{onOpenChange:J,open:Z,children:d5(zP,{className:"flex flex-col h-[90vh] w-[90vw] max-w-[500px] p-4 sm:p-6 overflow-hidden gap-0",children:[d5(KP,{className:"mb-2 sm:mb-4 shrink-0",children:[P2(_P,{className:"text-base sm:text-lg",children:$?.id?P("editEvent"):P("createEvent")}),P2(jP,{className:"text-xs sm:text-sm",children:$?.id?P("editEventDetails"):P("addNewEvent")})]}),P2(u5,{...L})]})})};import{Calendar as j$,Download as x$,Menu as v$,Plus as y$}from"lucide-react";import{useState as c$}from"react";import{RRule as M$}from"rrule";var j2=`\r
2
2
  `,p$=["BEGIN:VTIMEZONE","TZID:UTC","BEGIN:STANDARD","DTSTART:19700101T000000","TZNAME:UTC","TZOFFSETFROM:+0000","TZOFFSETTO:+0000","END:STANDARD","END:VTIMEZONE"].join(j2),J2=(P)=>{return P.replaceAll("\\","\\\\").replaceAll(";","\\;").replaceAll(",","\\,").replaceAll(`
3
3
  `,"\\n").replaceAll("\r","")},Z2=(P,$=!1)=>{return $?P.format("YYYYMMDD"):P.utc().format("YYYYMMDD[T]HHmmss[Z]")},r5=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},R$=(P)=>{try{return new M$(P).toString().split(`
4
- `).find((Z)=>Z.startsWith("RRULE:"))||""}catch{return""}},I$=(P)=>{let $=I().utc().format("YYYYMMDD[T]HHmmss[Z]"),Z=P.allDay?";VALUE=DATE":"",J=P.rrule?R$(P.rrule):"",X=P.exdates?.length?P.exdates.map((U)=>Z2(I(U),P.allDay)).join(","):null,Q=P.recurrenceId?Z2(I(P.recurrenceId),P.allDay):null;return["BEGIN:VEVENT",`UID:${r5(P)}`,`DTSTART${Z}:${Z2(P.start,P.allDay)}`,`DTEND${Z}:${Z2(P.end,P.allDay)}`,`SUMMARY:${J2(P.title)}`,P.description&&`DESCRIPTION:${J2(P.description)}`,P.location&&`LOCATION:${J2(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(j2)},S$=(P)=>{let $=new Set;return P.filter((Z)=>{let J=r5(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)})},T$=(P,$="ilamy Calendar")=>{let Z=J2($),J=S$(P).map(I$);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}`,p$,...J,"END:VCALENDAR"].join(j2)},n5=(P,$="calendar.ics",Z="ilamy Calendar")=>{let J=new Blob([T$(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 H$}from"lucide-react";import{useMemo as b$,useState as w$}from"react";import{jsx as n,jsxs as Q2,Fragment as X2}from"react/jsx-runtime";var m$=["january","february","march","april","may","june","july","august","september","october","november","december"],g$=()=>{let{currentDate:P,view:$,selectDate:Z,t:J,firstDayOfWeek:X}=B((G)=>({currentDate:G.currentDate,view:G.view,selectDate:G.selectDate,t:G.t,firstDayOfWeek:G.firstDayOfWeek})),[Q,Y]=w$(null),U=b$(()=>m$.map((G)=>J(G)),[J]),q=P.year(),_=Array.from({length:11},(G,F)=>q-5+F),L=U0(P,X),K=(G)=>{Z(G),Y(null)},W=()=>n(X2,{children:U.map((G,F)=>n(h,{className:A("justify-start font-normal",P.month()===F&&"bg-primary/10"),onClick:()=>K(P.month(F)),variant:"ghost",children:G},G))}),O=()=>n(X2,{children:_.map((G)=>n(h,{className:A("justify-start font-normal",P.year()===G&&"bg-primary/10"),onClick:()=>K(P.year(G)),variant:"ghost",children:G},G))}),f=()=>n(X2,{children:Array.from({length:7},(G,F)=>{let M=P.subtract(3,"week").add(F,"week"),p=U0(M,X),S=p[0],R=p[6],b=M.isSame(P,"week"),g=S.month()!==R.month();return n(h,{className:A("justify-start font-normal",b&&"bg-primary/10"),onClick:()=>K(S),variant:"ghost",children:Q2("div",{className:"flex w-full items-center justify-between",children:[n("span",{children:`${S.format("MMM D")} - ${R.format("D")}`}),g&&n("span",{className:"ml-0.5 text-xs opacity-70",children:`${S.format("MMM")}-${R.format("MMM")}`})]})},r(S))})}),z=()=>{let G=P.startOf("month"),F=P.daysInMonth();return n(X2,{children:Array.from({length:F},(M,p)=>{let S=G.date(p+1),R=S.isSame(P,"day"),b=t(S);return n(h,{className:A("justify-start font-normal",R&&"bg-primary/10"),onClick:()=>K(S),variant:"ghost",children:Q2("div",{className:"flex w-full items-center justify-between",children:[n("span",{children:S.format("dddd, MMM D")}),b&&n("span",{className:"bg-primary text-primary-foreground rounded-sm px-1! text-xs",children:J("today")})]})},r(S))})})};return[{id:"month",hidden:$==="year",title:P.format("MMMM"),render:W},{id:"year",hidden:!1,title:P.format("YYYY"),render:O},{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:z}].filter((G)=>!G.hidden).map((G)=>Q2(c0,{onOpenChange:(F)=>Y(F?G.id:null),open:Q===G.id,children:[n(o0,{asChild:!0,children:Q2(h,{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:V.listKey(G.id,r(P)),children:G.title}),n(H$,{className:"h-4 w-4"})]})}),n(l0,{className:"w-40 p-0",children:n("div",{className:"flex max-h-60 flex-col overflow-auto",children:G.render()})})]},G.id))},a5=g$;import{ChevronLeft as k$,ChevronRight as h$}from"lucide-react";import{jsx as FP,jsxs as D$}from"react/jsx-runtime";var C$=["day","week","month","year"],E$=({currentView:P,onChange:$,variant:Z="default",size:J="sm",className:X,onToday:Q,onNext:Y,onPrevious:U})=>{let{t:q,resources:_}=B((f)=>({t:f.t,resources:f.resources})),L=Z==="grid",K=_&&_.length>0,W=(f)=>{return A(L?"w-full":"",P===f&&"bg-primary/80")},O=(f)=>{return P===f?"default":"outline"};return D$("div",{className:A(L?"grid grid-cols-2 gap-2":"flex gap-1",X),children:[FP(h,{onClick:U,size:J,variant:"outline",children:FP(k$,{className:"h-4 w-4"})}),FP(h,{onClick:Y,size:J,variant:"outline",children:FP(h$,{className:"h-4 w-4"})}),C$.map((f)=>{if(K&&f==="year")return null;return FP(h,{className:W(f),onClick:()=>$(f),size:J,variant:O(f),children:q(f)},f)}),FP(h,{onClick:Q,size:J,variant:"outline",children:q("today")})]})},x2=E$;import{jsx as i,jsxs as h0}from"react/jsx-runtime";var o$=({className:P=""})=>{let{view:$,setView:Z,nextPeriod:J,prevPeriod:X,today:Q,openEventForm:Y,headerComponent:U,headerClassName:q,rawEvents:_,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})),[K,W]=c$(!1),O=()=>W(!1),f=(F)=>(...M)=>{F(...M),O()},z=()=>{let F=`ilamy-calendar-${new Date().toISOString().split("T")[0]}.ics`;n5(_,F,"ilamy Calendar"),O()},N=()=>h0(h,{className:"flex items-center gap-1",onClick:()=>Y(),size:"sm",variant:"default",children:[i(y$,{className:"h-4 w-4"}),i("span",{className:"hidden @4xl:inline",children:L("new")})]}),G=({fullWidth:F=!1})=>h0(h,{className:A("flex items-center gap-1",F&&"w-full gap-2"),onClick:z,size:"sm",variant:"outline",children:[i(x$,{className:"h-4 w-4"}),F?`${L("export")} Calendar (.ics)`:i("span",{className:"hidden @4xl/base-header:inline",children:L("export")})]});if(U)return U;return i("div",{className:"@container/base-header w-full","data-testid":"calendar-header",children:h0("div",{className:A("flex justify-center @2xl/base-header:justify-between flex-wrap items-center gap-2",P,q),children:[h0("div",{className:"flex flex-wrap items-center justify-center gap-1 @2xl/base-header:justify-start",children:[i(j$,{className:"h-5 w-5"}),i(a5,{})]}),h0("div",{className:"flex flex-wrap justify-start @xl/base-header:justify-center gap-1 @4xl/base-header:justify-end overflow-x-auto",children:[h0("div",{className:"hidden @md/base-header:flex items-center justify-start gap-1",children:[i(x2,{className:"justify-end",currentView:$,onChange:Z,onNext:J,onPrevious:X,onToday:Q,variant:"default"}),i(N,{}),i(G,{})]}),h0("div",{className:"flex items-center justify-end gap-1 @md/base-header:hidden",children:[i(N,{}),h0(c0,{onOpenChange:W,open:K,children:[i(o0,{asChild:!0,children:i(h,{size:"sm",variant:"outline",children:i(v$,{className:"h-4 w-4"})})}),i(l0,{align:"end",className:"w-[240px] p-2",children:h0("div",{className:"space-y-2",children:[i(x2,{currentView:$,onChange:f(Z),onNext:f(J),onPrevious:f(X),onToday:f(Q),variant:"grid"}),i("div",{className:"pt-2 border-t",children:i(G,{fullWidth:!0})})]})})]})]})]})]})})},SP=o$;import{memo as G9}from"react";import{memo as X1,useMemo as Y9}from"react";import{useMemo as v2}from"react";var t5=({days:P,events:$,dayMaxEvents:Z,dayNumberHeight:J=P5,gridType:X="day",eventSpacing:Q=j0,eventBarHeight:Y=R0})=>{let U=P.at(0),q=P.at(-1);if(!U||!q)return[];let _=X==="hour"?U.startOf("hour"):U.startOf("day"),L=X==="hour"?q.endOf("hour"):q.endOf("day"),K=P.length,W=$.filter((p)=>p.end.diff(p.start,X)>0),O=$.filter((p)=>p.end.diff(p.start,X)===0),f=[...W].sort((p,S)=>{let R=p.start.diff(S.start);if(R!==0)return R;return S.end.diff(S.start)-p.end.diff(p.start)}),z=[...O].sort((p,S)=>p.start.diff(S.start)),N=Array.from({length:Z},()=>Array.from({length:K},()=>({taken:!1,event:null}))),G=[],F=(p,S)=>{for(let R=0;R<Z;R++){let b=!0;for(let g=p;g<=S;g++)if(N[R][g].taken){b=!1;break}if(b)return R}return-1},M=(p,S,R,b,g,D)=>{for(let c=S;c<=R;c++)N[p][c]={taken:!0,event:b};let u=R-S+1;G.push({left:S/K*100,width:u/K*100,top:J+Q+p*(Y+Q),height:Y,position:p,...b,isTruncatedStart:g,isTruncatedEnd:D})};for(let p of f){let S=I.max(p.start.startOf(X),_),R=X==="hour"?p.end.subtract(1,"minute"):p.end,b=I.min(R.startOf(X),L),g=Math.max(0,S.diff(_,X)),D=Math.min(K-1,b.diff(_,X)),u=p.start.startOf(X).isBefore(_),c=p.end.startOf(X).isAfter(L),P0=F(g,D);if(P0!==-1){M(P0,g,D,p,u,c);continue}for(let j=g+1;j<=D;j++){let k=F(j,D);if(k!==-1){M(k,j,D,p,!0,c);break}}}for(let p of z){let S=I.max(p.start.startOf(X),_),R=Math.max(0,Math.min(K-1,S.diff(_,X))),b=F(R,R);if(b!==-1)M(b,R,R,p,!1,!1)}return G};var y2=({days:P,allDay:$,dayNumberHeight:Z,resourceId:J,gridType:X})=>{let{getEventsForDateRange:Q,dayMaxEvents:Y,eventSpacing:U,eventHeight:q,getEventsForResource:_}=B(),L=P.at(0),K=P.at(-1),W=L?.startOf("day"),O=K?.endOf("day"),f=v2(()=>{if(!W||!O)return[];let G=Q(W,O);if(J)G=fP(G,_(J));if($)G=G.filter((F)=>!!F.allDay===$);return G},[Q,_,W,O,J,$]),z=v2(()=>{let G=new Map;for(let F of P){let M=r(F),p=F.startOf("day"),S=F.endOf("day"),R=f.filter((b)=>cP(b,p,S));G.set(M,R)}return G},[P,f]);return{positionedEvents:v2(()=>{return t5({days:P,events:f,dayMaxEvents:Y,dayNumberHeight:Z,eventSpacing:U,eventBarHeight:q,gridType:X})},[P,Y,Z,U,q,f,X]),dayEventsMap:z}};import P9,{memo as $9,useMemo as Z9}from"react";import{jsx as l$}from"react/jsx-runtime";var s5=({date:P,className:$})=>{let Z=t(P);return l$("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":V.dayNumber(P),children:P.format("D")})};import{useImperativeHandle as a$,useState as e5}from"react";import{useDraggable as i$}from"@dnd-kit/core";import{memo as u$}from"react";import{jsx as TP,jsxs as n$}from"react/jsx-runtime";var d$=(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 r$({elementId:P,event:$,className:Z,style:J,disableDrag:X=!1}){let{onEventClick:Q,renderEvent:Y,disableEventClick:U,disableDragAndDrop:q}=B(),{attributes:_,listeners:L,setNodeRef:K,isDragging:W}=i$({id:P,data:{event:$,type:"calendar-event"},disabled:X||q}),O=()=>{let f=$,z=f.isTruncatedStart,N=f.isTruncatedEnd;return n$("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",d$(Boolean(z),Boolean(N))),style:{backgroundColor:$.backgroundColor,color:$.color},children:[z&&TP("div",{className:"absolute left-0 top-0 bottom-0 w-0.5 bg-foreground/25"}),TP("p",{className:A("text-[10px] font-semibold sm:text-xs mt-0.5",z&&"pl-1",N&&"pr-1"),children:$.title}),N&&TP("div",{className:"absolute right-0 top-0 bottom-0 w-0.5 bg-foreground/25"})]})};return TP(E,{className:A("truncate h-full w-full",X||q?U?"cursor-default":"cursor-pointer":"cursor-grab",W&&!(X||q)&&"cursor-grabbing shadow-lg",Z),layout:!0,layoutId:P,onClick:(f)=>{f.stopPropagation(),Q($)},ref:K,style:J,transitionKey:P,..._,...L,children:Y?Y($):TP(O,{})})}var OP=u$(r$,(P,$)=>{return P.elementId===$.elementId&&P.disableDrag===$.disableDrag&&P.className===$.className&&P.event===$.event});import{jsx as HP,jsxs as t$}from"react/jsx-runtime";var P1=({ref:P})=>{let[$,Z]=e5(!1),[J,X]=e5(null),{currentDate:Q,firstDayOfWeek:Y,eventHeight:U}=B();a$(P,()=>({open:()=>Z(!0),close:()=>Z(!1),setSelectedDayEvents:(L)=>X(L)}));let _=Q.startOf("month").clone();while(_.day()!==Y)_=_.subtract(1,"day");return HP(UP,{onOpenChange:Z,open:$,children:t$(zP,{className:"max-h-[80vh] max-w-md overflow-y-auto",children:[HP(KP,{children:HP(_P,{children:J?.day.format("MMMM D, YYYY")})}),HP("div",{className:"mt-4 space-y-3",children:J?.events.map((L)=>{return HP(OP,{className:"relative my-1",elementId:`all-events-dialog-event-$${L.id}`,event:L,style:{height:`${U}px`}},L.id)})})]})})};import{useDroppable as s$}from"@dnd-kit/core";import{jsx as e$}from"react/jsx-runtime";function $1({id:P,type:$,date:Z,hour:J,minute:X,resourceId:Q,allDay:Y,children:U,className:q,style:_,"data-testid":L,disabled:K=!1}){let{onCellClick:W,disableDragAndDrop:O,disableCellClick:f,classesOverride:z,view:N}=B(),{isOver:G,setNodeRef:F}=s$({id:P,data:{type:$,date:Z,hour:J,minute:X,resourceId:Q,allDay:Y},disabled:O||K}),M=(p)=>{if(p.stopPropagation(),f||K)return;let S=Z.hour(J??0).minute(X??0),R=S.clone();if(J!==void 0&&X!==void 0)R=R.hour(J).minute(X+15);else if(J!==void 0)R=R.hour(J+1).minute(0);else R=R.hour(23).minute(59);W({start:S,end:R,resourceId:Q,allDay:Y})};return e$("div",{className:A("droppable-cell",q,G&&!O&&!K&&"bg-accent",f||K?"cursor-default":"cursor-pointer",K&&(z?.disabledCell||$5)),"data-disabled":K.toString(),"data-testid":L,"data-view":N,onClick:M,ref:F,style:_,children:U})}import{jsx as Y2,jsxs as q2,Fragment as Z1}from"react/jsx-runtime";var J9=({day:P,hour:$,minute:Z,className:J="",resourceId:X,gridType:Q="day",shouldRenderEvents:Y=!0,allDay:U=!1,precomputedEvents:q,"data-testid":_,showDayNumber:L=!1,children:K})=>{let W=P9.useRef(null),{dayMaxEvents:O=0,getEventsForDateRange:f,currentDate:z,t:N,getEventsForResource:G,currentLocale:F,eventSpacing:M,eventHeight:p}=B(),S=eP(X),R=Z9(()=>{if(!Y)return[];if(q)return q;let k=f(P.startOf(Q),P.endOf(Q));if(U)k=k.filter((o)=>o.allDay);if(X)return fP(k,G(X)??[]);return k},[q,P,X,f,G,Q,Y,U]),b=(k,o)=>{W.current?.setSelectedDayEvents({day:k,events:o}),W.current?.open()},g=P.month()===z.month(),D=R.length-O,u=D>0,c=T5({date:P,hour:Q==="hour"?P.hour():void 0,businessHours:S}),P0=Q==="hour"?V.cell.day(P,P.format("HH"),P.format("mm")):V.cell.day(P),j=V.droppable.dayCell(P,{allDay:U,resourceId:X});return q2(Z1,{children:[Y2($1,{allDay:U,className:A("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":_||P0,date:P,disabled:!c||!g,hour:$,id:j,minute:Z,resourceId:X,type:"day-cell",children:q2("div",{className:"flex flex-col h-full w-full","data-testid":"grid-cell-content",style:{gap:`${M}px`},children:[L&&Y2(s5,{date:P,locale:F}),Y&&q2(Z1,{children:[R.slice(0,O).map((k,o)=>Y2("div",{className:"w-full shrink-0","data-testid":k?.title,style:{height:`${p}px`}},V.listKey("empty",o,k.id))),u&&q2("div",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs shrink-0 mt-1",onClick:(k)=>{k.stopPropagation(),b(P,R)},onKeyDown:(k)=>{if(k.key==="Enter"||k.key===" ")k.preventDefault(),k.stopPropagation(),b(P,R)},role:"button",tabIndex:0,children:["+",D," ",N("more")]})]}),K]})}),Y2(P1,{ref:W})]})},bP=$9(J9);import{jsx as J1}from"react/jsx-runtime";var d0=({resource:P,className:$,children:Z,"data-testid":J})=>{let{renderResource:X}=B();return J1("div",{className:A("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??J1("div",{className:"text-sm font-medium truncate",children:P.title})})};import{memo as X9}from"react";import{jsx as c2}from"react/jsx-runtime";var Q9=({days:P,resourceId:$,"data-testid":Z,positionedEvents:J})=>{let{eventHeight:X}=B(),Q=P.at(0)?.startOf("day");return c2("div",{className:"absolute inset-0 pointer-events-none z-10 overflow-clip","data-testid":Z,children:J.map((Y)=>{let U=`${Y.id}-${Y.position}-${Q?.toISOString()}-${$??"no-resource"}`;return c2("div",{className:"absolute z-10 pointer-events-auto overflow-clip","data-left":Y.left,"data-testid":V.container.horizontal.event(Y.id),"data-top":Y.top,"data-width":Y.width,style:{left:`calc(${Y.left}% + var(--spacing) * 0.25)`,width:`calc(${Y.width}% - var(--spacing) * 1)`,top:`${Y.top}px`,height:`${X}px`},children:c2(OP,{className:"h-full w-full shadow",elementId:U,event:Y})},V.listKey(U,"wrapper"))})})},o2=X9(Q9);import{jsx as V0,jsxs as l2}from"react/jsx-runtime";var q9=({id:P,resource:$,gridType:Z="day",variant:J="resource",dayNumberHeight:X,className:Q,columns:Y=[],allDay:U,showDayNumber:q=!1,isLastRow:_=!1})=>{let{renderResource:L}=B(),K=J==="resource",W=Y.some((N)=>N.days),O=Y9(()=>{if(W)return[];return Y.map((N)=>N.day).filter((N)=>Boolean(N))},[Y,W]),{positionedEvents:f,dayEventsMap:z}=y2({days:O,gridType:Z,resourceId:$?.id,dayNumberHeight:X,allDay:U});return l2("div",{className:A("flex flex-1 relative",Q),"data-testid":V.container.horizontal.row(P),children:[K&&$&&V0(d0,{className:"w-20 sm:w-40 sticky left-0 bg-background z-20 h-full","data-testid":V.container.horizontal.rowLabel($.id),resource:$,children:L?L($):V0("div",{className:"wrap-break-word text-sm",children:$.title})}),l2("div",{className:"relative flex-1 flex",children:[V0("div",{className:"flex w-full",children:Y.map((N,G)=>{if(N.days)return V0(U9,{allDay:U,col:N,dayNumberHeight:X,gridType:Z,id:P,isLastCol:G===Y.length-1,isLastRow:_,resourceId:$?.id,showDayNumber:q},N.id);return N.day?V0(bP,{allDay:U,className:A("flex-1 w-20",_&&"border-b-0",N.className),day:N.day,gridType:Z,hour:Z==="hour"?N.day.hour():void 0,precomputedEvents:z.get(r(N.day)),resourceId:$?.id,showDayNumber:q},N.day.toISOString()):null})}),!W&&V0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:V0(o2,{"data-testid":V.container.eventsLayer("horizontal",P),days:O,positionedEvents:f,resourceId:$?.id})})]})]})},U9=X1(({col:P,gridType:$="day",allDay:Z,resourceId:J,dayNumberHeight:X,showDayNumber:Q,isLastRow:Y,isLastCol:U,id:q})=>{let _=P.days??[],{positionedEvents:L}=y2({days:_,gridType:$,resourceId:J,dayNumberHeight:X,allDay:Z});return l2("div",{className:"flex relative w-full",children:[V0("div",{className:"flex w-full",children:_.map((K)=>V0(bP,{allDay:Z,className:A("flex-1 w-20",Y&&"border-b-0",!U&&"border-r!",P.className),day:K,gridType:$,hour:$==="hour"?K.hour():void 0,resourceId:J,showDayNumber:Q},K.toISOString()))}),V0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:V0(o2,{"data-testid":V.container.eventsLayer("horizontal",q),days:_,positionedEvents:L,resourceId:J})})]})}),U2=X1(q9);import{memo as z9}from"react";import{jsx as _9}from"react/jsx-runtime";var K9=({className:P})=>{let{t:$}=B();return _9("div",{className:A("w-16 border-r shrink-0 sticky left-0 bg-background z-20 flex border-b items-center justify-center sm:text-xs text-muted-foreground",P),children:$("allDay")})},VP=z9(K9);import{jsx as Q1,jsxs as f9}from"react/jsx-runtime";var L9=({days:P,classes:$,resource:Z,showSpacer:J=!0})=>{let X=P.map((Q,Y)=>({id:V.col.allDay(Q,Y),day:Q,gridType:"day",className:A("h-full min-h-12 border-r last:border-r-0",$?.cell)}));return f9("div",{className:A("flex w-full bg-background",$?.row),"data-testid":"all-day-row",children:[J&&Q1(VP,{className:$?.spacer}),Q1(U2,{allDay:!0,className:"flex-1 min-h-fit border-b",columns:X,dayNumberHeight:0,gridType:"day",id:V.allDayRow(Z?.id),isLastRow:!0,resource:Z,variant:"regular"})]})},r0=G9(L9);import{jsx as q1,Fragment as Y1}from"react/jsx-runtime";var b0=({date:P})=>{let{renderHour:$,timeFormat:Z}=B();if($)return q1(Y1,{children:$(P)});return q1(Y1,{children:P.format(Z==="12-hour"?"h A":"H")})};import{memo as B9}from"react";import{memo as F9}from"react";import{memo as A9}from"react";import{jsx as U1,Fragment as W9}from"react/jsx-runtime";var N9=({rangeStart:P,rangeEnd:$,now:Z,resource:J})=>{let{renderCurrentTimeIndicator:X,view:Q}=B((K)=>({renderCurrentTimeIndicator:K.renderCurrentTimeIndicator,view:K.view})),Y=Z??I();if(!(Y.isSameOrAfter(P)&&Y.isBefore($)))return null;let q=$.diff(P,"minute"),L=Y.diff(P,"minute")/q*100;if(X)return U1(W9,{children:X({currentTime:Y,rangeStart:P,rangeEnd:$,progress:L,resource:J,view:Q})});return U1("div",{className:"absolute left-0 right-0 h-0.5 bg-red-500 z-50 pointer-events-none","data-testid":"current-time-indicator",style:{top:`${L}%`}})},z1=A9(N9);import{useMemo as _1}from"react";var K1=({days:P,gridType:$="hour",events:Z})=>{let J=Z.filter((O)=>!O.allDay).toSorted((O,f)=>O.start.diff(f.start));if(J.length===0)return[];let X=P.at(0)||I(),Q=P.length,Y=$==="day",U=[],q=[],_=null;for(let O of J){if(_&&O.start.isSameOrAfter(_)){if(q.length>0)U.push(q);q=[]}q.push(O),_=_?I.max(_,O.end):O.end}if(q.length>0)U.push(q);let L=(O)=>{let f=O.start.diff(X,$,!0),z=O.end.diff(X,$,!0);if(Y){if(f=Math.floor(f),z=Math.ceil(z),z<=f)z=f+1}if(f<0)f=0;if(z>Q)z=Q;let N=Math.max(0,z-f);if(N===0)return null;return{top:f/Q*100,height:N/Q*100}},K=(O)=>O===2?25:O===3?50:O===4?60:70,W=[];for(let O of U){if(O.length===1){let G=O[0],F=L(G);if(!F)continue;W.push({...G,left:0,width:100,...F});continue}let f=[...O].sort((G,F)=>{let M=F.end.diff(F.start,"minute")-G.end.diff(G.start,"minute");return M!==0?M:G.start.diff(F.start)}),z=f.length,N=z>1?K(z)/(z-1):0;for(let G=0;G<z;G++){let F=f[G],M=L(F);if(!M)continue;let p=G===0?0:N*G;W.push({...F,...M,left:p,width:100-p,zIndex:G+1})}}return W};var G1=({days:P,gridType:$,resourceId:Z})=>{let{getEventsForDateRange:J,getEventsForResource:X}=B(),Q=P.at(0),Y=P.at(-1),U=Q?.startOf("day"),q=Y?.endOf("day"),_=_1(()=>{if(!U||!q)return[];let K=J(U,q);if(Z)K=fP(K,X(Z));return K.filter((W)=>!W.allDay)},[U,q,J,Z,X]);return _1(()=>{return K1({days:P,events:_,gridType:$})},[P,$,_])};import{jsx as i2,jsxs as V9}from"react/jsx-runtime";var O9=({days:P,gridType:$="hour",resourceId:Z,resource:J,"data-testid":X})=>{let Q=G1({days:P,gridType:$,resourceId:Z}),Y=P.at(0),U=P.at(-1)?.add(1,$);return V9("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":X,children:[Y&&U&&i2(z1,{rangeEnd:U,rangeStart:Y,resource:J}),Q.map((q,_)=>{let L=`event-${q.id}-${_}-${P.at(0)?.toISOString()}-${Z??"no-resource"}`,K=q.end.diff(q.start,"minute")<=15;return i2("div",{className:"absolute",style:{left:`${q.left}%`,width:`calc(${q.width}% - var(--spacing) * 2)`,top:`${q.top}%`,height:`${q.height}%`},children:i2(OP,{className:A("pointer-events-auto",{"[&_p]:text-[10px] [&_p]:mt-0":K}),elementId:L,event:q})},V.listKey(L,"wrapper"))})]})},L1=F9(O9);import{jsx as wP,jsxs as p9}from"react/jsx-runtime";var M9=({id:P,days:$,resourceId:Z,resource:J,"data-testid":X,gridType:Q,className:Y,renderCell:U,noEvents:q,cellSlots:_=[60],isLastColumn:L})=>{return wP("div",{className:A("flex flex-col flex-1 items-center justify-center min-w-20 bg-background relative",Y),"data-testid":X||V.container.vertical.col(P),children:p9("div",{className:"w-full h-full relative grid",style:{gridTemplateRows:`repeat(${$.length}, minmax(0, 1fr))`},children:[$.map((K,W)=>{let O=K.format("HH");if(U){let f=P===V.col.time?V.cell.verticalTime(O):V.cell.vertical(K,O,"00",Z);return wP("div",{className:"min-h-[60px] border-b border-r","data-testid":f,children:U(K)},V.listKey(P,W,O))}return _.map((f)=>{let z=f===60?void 0:f,N=z===void 0?"00":String(z).padStart(2,"0"),G=V.cell.vertical(K,O,N,Z);return wP(bP,{className:A("hover:bg-accent relative z-10 min-h-[60px] cursor-pointer border-b",f===60?"":"border-dashed h-[15px] min-h-[15px]",L?"border-r-0":"border-r"),"data-testid":G,day:z?K.minute(z):K,gridType:Q,hour:K.hour(),minute:z,resourceId:Z,shouldRenderEvents:!1},V.listKey(P,W,N))})}),!q&&wP("div",{className:"absolute inset-0 z-10 pointer-events-none",children:wP(L1,{"data-testid":V.container.eventsLayer("vertical",P),days:$,gridType:Q,resource:J,resourceId:Z})})]})})},f1=B9(M9);import{memo as R9}from"react";import{jsx as A1,jsxs as S9}from"react/jsx-runtime";var I9=({children:P,classes:$,allDayRow:Z})=>{let{stickyViewHeader:J,viewHeaderClassName:X}=B((Q)=>({stickyViewHeader:Q.stickyViewHeader,viewHeaderClassName:Q.viewHeaderClassName}));return S9("div",{className:A(J&&"sticky top-0 z-21 bg-background",X),children:[A1("div",{className:A("h-12 border-b w-fit",$?.header),"data-testid":"vertical-grid-header",children:P}),Z&&A1("div",{className:A("flex w-full min-h-12",$?.allDay),"data-testid":"vertical-grid-all-day",children:Z})]})},N1=R9(I9);import{jsx as mP,jsxs as W1}from"react/jsx-runtime";var w0=({columns:P,children:$,gridType:Z="day",variant:J="resource",classes:X,allDayRow:Q,cellSlots:Y,style:U})=>{let q=J==="resource",_=!q,L=$&&mP(N1,{allDayRow:Q,classes:{header:X?.header,allDay:X?.allDay},children:$});return W1("div",{className:"h-full flex flex-col","data-testid":"vertical-grid-container",style:U,children:[_&&L,W1(T0,{className:A("h-full",_&&"overflow-auto"),"data-testid":"vertical-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[q&&L,mP("div",{className:A("flex flex-1 w-fit",X?.body),"data-testid":"vertical-grid-body",children:P.map((K,W)=>mP(f1,{...K,cellSlots:Y,gridType:Z,isLastColumn:W===P.length-1},V.listKey(K.id,W)))}),mP(k0,{className:"z-30"})," ",mP(k0,{className:"z-30",orientation:"horizontal"})," "]})]})};function _0({referenceDate:P,businessHours:$,hideNonBusinessHours:Z,allDates:J=[P],resourceBusinessHours:X=[]}){let Q=z5({referenceDate:P}),Y=!!$||X.length>0;if(!(Z&&Y))return Q;let{minStart:q,maxEnd:_,hasBusinessHours:L}=aP({allDates:J,businessHours:$,resourceBusinessHours:X,hideNonBusinessHours:Z});if(!L)return Q;return Q.filter((K)=>{let W=K.hour();return W>=q&&W<_})}import{jsx as $P,jsxs as T9}from"react/jsx-runtime";var F1=()=>{let{currentDate:P,t:$,businessHours:Z,hideNonBusinessHours:J}=B(),X=t(P),Q=_0({referenceDate:P,businessHours:Z,hideNonBusinessHours:J,allDates:[P]}),Y={id:V.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",gridType:"hour",noEvents:!0,renderCell:(q)=>$P("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:$P(b0,{date:q})})},U={id:V.col.day(P),day:P,days:Q,className:"w-[calc(100%-4rem)] flex-1",gridType:"hour"};return $P(w0,{allDayRow:$P(r0,{days:[P]}),cellSlots:[0,15,30,45],classes:{header:"w-full",body:"w-full",allDay:"w-full"},columns:[Y,U],gridType:"hour",variant:"regular",children:$P("div",{className:"flex flex-1 justify-center items-center min-h-12","data-testid":"day-view-header",children:T9(E,{className:A("flex justify-center items-center text-center text-base font-semibold sm:text-xl",X&&"text-primary"),transitionKey:r(P),children:[$P("span",{className:"xs:inline hidden",children:P.format("dddd, ")}),P.format("MMMM D, YYYY"),X&&$P("span",{className:"bg-primary text-primary-foreground ml-2 rounded-full px-1 py-0.5 text-xs sm:px-2 sm:text-sm",children:$("today")})]})})})};import{useMemo as m9}from"react";import{memo as H9}from"react";import{jsx as w9}from"react/jsx-runtime";var b9=({children:P,className:$})=>{let{stickyViewHeader:Z,viewHeaderClassName:J}=B((X)=>({stickyViewHeader:X.stickyViewHeader,viewHeaderClassName:X.viewHeaderClassName}));return w9("div",{className:A("flex h-12 w-fit",Z&&"sticky top-0 z-21 bg-background",$,J),"data-testid":"horizontal-grid-header",children:P})},O1=H9(b9);import{jsx as BP,jsxs as V1}from"react/jsx-runtime";var z2=({rows:P,children:$,classes:Z,allDay:J,gridType:X,variant:Q="resource",dayNumberHeight:Y})=>{let{currentDate:U}=B(),q=Q==="resource",_=!q,L=$&&BP(O1,{className:Z?.header,children:$});return V1("div",{className:"h-full flex flex-col","data-testid":"horizontal-grid-container",children:[_&&L,V1(T0,{className:A("h-full",_&&"overflow-auto"),"data-testid":"horizontal-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[q&&L,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((K,W)=>BP(U2,{allDay:K.allDay??J,dayNumberHeight:Y,gridType:X,isLastRow:W===P.length-1,variant:Q,...K},K.id))},U.format("YYYY-MM"))}),BP(k0,{className:"z-30"}),BP(k0,{className:"z-30",orientation:"horizontal"})]})]})};import{jsx as u2}from"react/jsx-runtime";var B1=({className:P})=>{let{firstDayOfWeek:$,stickyViewHeader:Z,viewHeaderClassName:J,currentDate:X}=B(),Q=U0(X,$);return u2("div",{className:A("flex w-full",Z&&"sticky top-0 z-20",J,P),"data-testid":"month-header",children:Q.map((Y,U)=>u2(E,{className:"py-2 text-center font-medium border-r last:border-r-0 border-b flex-1","data-testid":V.header.weekday("month",Y.format("ddd")),delay:U*0.05,transitionKey:Y.toISOString(),children:u2("span",{className:"text-sm capitalize",children:Y.format("ddd")})},Y.toISOString()))})};import{jsx as M1}from"react/jsx-runtime";var p1=()=>{let{currentDate:P,firstDayOfWeek:$}=B(),J=m9(()=>LP(P,$),[P,$]).map((X,Q)=>({id:V.listKey("week",Q),columns:X.map((Y)=>({id:V.col.day(Y),day:Y,className:"w-auto",gridType:"day"})),className:"flex-1",showDayNumber:!0}));return M1(z2,{classes:{body:"w-full",header:"w-full"},rows:J,variant:"regular",children:M1(B1,{className:"h-12"})})};import{useMemo as K2}from"react";import{jsx as C0,jsxs as d2}from"react/jsx-runtime";var R1="w-[calc((100%-4rem)/var(--visible-days))] min-w-[calc((100%-4rem)/var(--visible-days))] flex-1",I1="w-10 sm:w-16 min-w-10 sm:min-w-16 max-w-10 sm:max-w-16",S1=()=>{let{t:P,currentDate:$,firstDayOfWeek:Z,selectDate:J,openEventForm:X,businessHours:Q,hideNonBusinessHours:Y,hiddenDays:U}=B(),q=K2(()=>U0($,Z),[$,Z]),_=K2(()=>U?q.filter((f)=>!U.has(f.day())):q,[q,U]),L=K2(()=>_0({referenceDate:$,businessHours:Q,hideNonBusinessHours:Y,allDates:q}),[$,Q,Y,q]),K={id:V.col.time,days:L,day:void 0,className:`shrink-0 ${I1} sticky left-0 bg-background z-20`,gridType:"hour",noEvents:!0,renderCell:(f)=>C0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:C0(b0,{date:f})})},W=K2(()=>{return _.map((f)=>({id:V.col.day(f),day:f,label:f.format("D"),className:R1,days:_0({referenceDate:f,businessHours:Q,hideNonBusinessHours:Y,allDates:q}),value:f}))},[q,Q,Y,_.map]),O={"--visible-days":_.length};return C0(w0,{allDayRow:C0(r0,{classes:{cell:R1,spacer:I1},days:_}),classes:{header:"w-full h-18",body:"w-full"},columns:[K,...W],gridType:"hour",style:O,variant:"regular",children:d2("div",{className:"flex h-full flex-1","data-testid":"week-view-header",children:[C0("div",{className:"w-10 sm:w-16 h-full shrink-0 items-center justify-center border-r p-2 flex",children:d2("div",{className:"flex flex-col items-center justify-center",children:[C0("span",{className:"text-muted-foreground text-xs",children:P("week")}),C0("span",{className:"font-medium",children:$.week()})]})}),_.map((f,z)=>{let N=t(f),G=V.header.week.day(f);return d2(E,{className:A("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",N&&"bg-primary/10 font-bold"),"data-testid":V.header.weekday("week",f.format("dddd")),delay:z*0.05,onClick:()=>{J(f),X({start:f})},transitionKey:G,children:[C0("div",{className:"text-xs sm:text-sm",children:f.format("ddd")}),C0("div",{className:A("mx-auto mt-1 flex h-5 w-5 items-center justify-center rounded-full text-xs",N&&"bg-primary text-primary-foreground"),children:f.format("D")})]},G)})]})})};import{jsx as n0,jsxs as gP}from"react/jsx-runtime";var g9=[{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"}],k9=["bg-primary","bg-blue-500","bg-green-500"],h9=42,T1=()=>{let{currentDate:P,selectDate:$,events:Z,setView:J,getEventsForDateRange:X,t:Q}=B(),Y=P.year(),U=()=>{return Array.from({length:12},(z,N)=>{let G=I().year(Y).month(N).startOf("month"),F=Z.filter((M)=>M.start.year()===Y&&M.start.month()===N);return{date:G,name:G.format("MMMM"),eventCount:F.length,monthKey:G.format("MM")}})},q=(z)=>{let N=z.startOf("month").startOf("week");return Array.from({length:h9},(G,F)=>{let M=N.add(F,"day"),p=M.startOf("day"),S=M.endOf("day"),R=X(p,S);return{date:M,dayKey:r(M),isInCurrentMonth:M.month()===z.month(),isToday:t(M),isSelected:M.isSame(P,"day"),eventCount:R.length}})},_=(z,N,G)=>{G?.stopPropagation(),$(z),J(N)},L=(z)=>{let N=z===1?Q("event"):Q("events");return`${z} ${N}`},K=(z)=>{let G=z.isInCurrentMonth?"":"text-muted-foreground opacity-50",F=z.isToday?"bg-primary text-primary-foreground rounded-full":"",M=z.isSelected&&!z.isToday?"bg-muted rounded-full font-bold":"",p=z.eventCount>0&&!z.isToday&&!z.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",G,F,M,p)},W=(z,N)=>{return A("h-[3px] w-[3px] rounded-full",N?"bg-primary-foreground":z)},O=U(),f=(z)=>{if(z===0)return"";return L(z)};return gP(T0,{className:"h-full","data-testid":"year-view",children:[n0("div",{className:"grid auto-rows-fr grid-cols-1 gap-4 p-4 sm:grid-cols-2 lg:grid-cols-3","data-testid":"year-grid",children:O.map((z,N)=>{let G=q(z.date),F=N*0.05;return gP("div",{className:"hover:border-primary flex flex-col rounded-lg border p-3 text-left transition-all duration-200 hover:shadow-md","data-testid":V.header.year.month(z.monthKey),children:[gP(E,{className:"mb-2 flex items-center justify-between",delay:F,transitionKey:V.listKey("month",z.monthKey),children:[n0("button",{className:"text-lg font-medium hover:underline cursor-pointer","data-testid":V.header.year.month(z.monthKey,"title"),onClick:()=>_(z.date,"month"),type:"button",children:z.name}),z.eventCount>0&&n0("span",{className:"bg-primary text-primary-foreground rounded-full px-2 py-1 text-xs","data-testid":V.header.year.month(z.monthKey,"count"),children:L(z.eventCount)})]},V.listKey("month",z.monthKey)),gP("div",{className:"grid grid-cols-7 gap-px text-[0.6rem]","data-testid":V.header.year.month(z.monthKey,"mini"),children:[g9.map((M)=>n0("div",{className:"text-muted-foreground h-3 text-center",children:M.label},V.listKey("header",z.monthKey,M.id))),G.map((M)=>{let p=V.header.year.day(z.date.format("YYYY-MM"),M.dayKey),S=M.eventCount>0,R=Math.min(M.eventCount,3),b=k9.slice(0,R);return gP("button",{className:K(M),"data-testid":p,onClick:(g)=>_(M.date,"day",g),title:f(M.eventCount),type:"button",children:[n0("span",{className:"text-center leading-none",children:M.date.date()}),S&&n0("div",{className:A("absolute bottom-0 flex w-full justify-center space-x-px",M.isToday&&"bottom-px"),children:b.map((g)=>n0("span",{className:W(g,M.isToday)},g))})]},M.dayKey)})]})]},z.monthKey)})}),n0(k0,{className:"z-30"})]})};import{useCallback as r2,useMemo as C9}from"react";import{jsx as E9}from"react/jsx-runtime";var H1=({children:P,events:$=[],firstDayOfWeek:Z=0,initialView:J="month",initialDate:X,renderEvent:Q,onEventClick:Y,onCellClick:U,onViewChange:q,onEventAdd:_,onEventUpdate:L,onEventDelete:K,onDateChange:W,locale:O,timezone:f,disableCellClick:z,disableEventClick:N,disableDragAndDrop:G,dayMaxEvents:F,eventSpacing:M=j0,eventHeight:p=R0,stickyViewHeader:S=!0,viewHeaderClassName:R="",headerComponent:b,headerClassName:g,businessHours:D,renderEventForm:u,translations:c,translator:P0,timeFormat:j="12-hour",classesOverride:k,renderCurrentTimeIndicator:o,renderHour:G0,hideNonBusinessHours:F0=!1,hiddenDays:M0})=>{let X0=oP({events:$,firstDayOfWeek:Z,initialView:J,initialDate:X,businessHours:D,onEventAdd:_,onEventUpdate:L,onEventDelete:K,onDateChange:W,onViewChange:q,locale:O,timezone:f,translations:c,translator:P0}),q0=r2((a)=>{X0.setSelectedEvent(a),X0.setIsEventFormOpen(!0)},[X0]),m0=r2((a)=>{if(N)return;if(Y)Y(a);else q0(a)},[N,Y,q0]),L0=r2((a)=>{if(z)return;if(U)U(a);else X0.openEventForm(a)},[U,z,X0]),Q0=C9(()=>({...X0,renderEvent:Q,onEventClick:m0,onCellClick:L0,locale:O,timezone:f,disableCellClick:z,disableEventClick:N,disableDragAndDrop:G,dayMaxEvents:F,eventSpacing:M,eventHeight:p,stickyViewHeader:S,viewHeaderClassName:R,headerComponent:b,headerClassName:g,businessHours:D,renderEventForm:u,timeFormat:j,classesOverride:k,renderCurrentTimeIndicator:o,renderHour:G0,hideNonBusinessHours:F0,hiddenDays:M0}),[X0,Q,m0,L0,O,f,z,N,G,F,M,p,S,R,b,g,D,u,j,k,o,G0,F0,M0]);return E9(xP.Provider,{value:Q0,children:P})};import{jsx as B0,jsxs as x9}from"react/jsx-runtime";var D9=()=>{let{view:P,dayMaxEvents:$}=B();return x9("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-calendar",children:[B0(SP,{className:"p-1"}),B0(iP,{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(p1,{dayMaxEvents:$},"month"),week:B0(S1,{},"week"),day:B0(F1,{},"day"),year:B0(T1,{},"year")}[P]})})}),B0($2,{})]})},j9=({events:P,firstDayOfWeek:$="sunday",initialView:Z="month",initialDate:J,dayMaxEvents:X=YP,eventSpacing:Q=j0,eventHeight:Y=R0,stickyViewHeader:U=!0,viewHeaderClassName:q="",timeFormat:_="12-hour",hideNonBusinessHours:L=!1,hiddenDays:K,...W})=>{return B0(H1,{dayMaxEvents:X,eventHeight:Y,eventSpacing:Q,events:EP(P),firstDayOfWeek:x0[$],hiddenDays:CP(K),hideNonBusinessHours:L,initialDate:qP(J),initialView:Z,stickyViewHeader:U,timeFormat:_,viewHeaderClassName:q,...W,children:B0(D9,{})})};import{jsx as v9}from"react/jsx-runtime";var MP=({days:P,gridType:$="day",children:Z,classes:J})=>{let{getVisibleResources:X}=B(),Q=X(),Y=P.map((q)=>{let _=Array.isArray(q),L=_?q[0]:q;return{id:L?V.col.day(L):"day-col-unknown",day:_?void 0:q,days:_?q:void 0,className:J?.cell,gridType:$}}),U=Q.map((q)=>({id:q.id,title:q.title,resource:q,columns:Y}));return v9(z2,{classes:J,dayNumberHeight:0,gridType:$,rows:U,children:Z})};import{jsx as n2}from"react/jsx-runtime";var _2=({hours:P,view:$,delayStep:Z})=>n2("div",{className:"flex h-12 border-b",children:P.map((J,X)=>{let Q=J.isSame(I(),"hour"),Y=V.header.week.hour(J,X);return n2(E,{className:A("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-testid":V.header.resource.timeLabel($,J.format("HH")),delay:X*Z,transitionKey:V.listKey(Y,"motion"),children:n2(b0,{date:J})},V.listKey(Y,"animated"))})});import{jsx as G2,jsxs as y9}from"react/jsx-runtime";var b1=()=>{let{currentDate:P,t:$,businessHours:Z,hideNonBusinessHours:J,getVisibleResources:X}=B(),Q=X(),Y=_0({referenceDate:P,businessHours:Z,hideNonBusinessHours:J,allDates:[P],resourceBusinessHours:Q.map((U)=>U.businessHours).filter(Boolean)});return y9(MP,{classes:{header:"min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:Y,gridType:"hour",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",children:$("resources")})}),G2("div",{className:"flex-1 flex flex-col",children:G2(_2,{delayStep:0.05,hours:Y,view:"day"})})]})};import{jsx as ZP,jsxs as w1}from"react/jsx-runtime";var m1=()=>{let{currentDate:P,getVisibleResources:$,businessHours:Z,hideNonBusinessHours:J}=B(),X=$(),Q=_0({referenceDate:P,businessHours:Z,hideNonBusinessHours:J,allDates:[P],resourceBusinessHours:X.map((q)=>q.businessHours).filter(Boolean)}),Y={id:V.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",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(b0,{date:q})})},U=X.map((q)=>({id:V.col.day(P,q.id),resourceId:q.id,resource:q,days:Q,day:P,gridType:"hour"}));return ZP(w0,{allDayRow:w1("div",{className:"flex w-full",children:[ZP(VP,{}),X.map((q)=>ZP(r0,{classes:{cell:"min-w-20"},days:[P],resource:q,showSpacer:!1},V.allDayRow(q.id)))]}),cellSlots:[0,15,30,45],classes:{body:"w-full",header:"w-full"},columns:[Y,...U],"data-testid":"resource-day",gridType:"hour",children:w1("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[ZP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),X.map((q)=>ZP(d0,{className:"min-w-20 flex-1",resource:q},V.listKey("resource-cell",q.id)))]})})};import{jsx as g1}from"react/jsx-runtime";var k1=()=>{let{orientation:P}=B();if(P==="vertical")return g1(m1,{});return g1(b1,{})};import{useMemo as c9}from"react";import{jsx as L2,jsxs as h1}from"react/jsx-runtime";var C1=()=>{let{currentDate:P,t:$}=B(),Z=c9(()=>{return U5(P)},[P]);return h1(MP,{days:Z,children:[L2("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:L2("div",{className:"text-sm",children:$("resources")})}),Z.map((J,X)=>{let Q=`resource-month-header-${J.toISOString()}`;return h1(E,{className:"w-20 border-b border-r shrink-0 flex items-center justify-center flex-col",delay:X*0.05,transitionKey:V.listKey(Q,"motion"),children:[L2("div",{className:"text-xs font-medium",children:J.format("D")}),L2("div",{className:"text-xs text-muted-foreground",children:J.format("ddd")})]},V.listKey(Q,"animated"))})]})};import{jsx as kP,jsxs as E1}from"react/jsx-runtime";var D1=()=>{let{currentDate:P,getVisibleResources:$}=B(),Z=$(),J=P.startOf("month"),X=Array.from({length:P.daysInMonth()},(U,q)=>J.add(q,"day")),Q={id:V.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)=>E1("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:[kP("span",{children:U.format("D")}),kP("span",{children:U.format("ddd")})]})},Y=Z.map((U)=>({id:V.col.resource("month",U.id),day:void 0,resourceId:U.id,days:X,gridType:"day"}));return kP(w0,{classes:{header:"w-full",body:"w-full"},columns:[Q,...Y],"data-testid":"resource-month-vertical-grid",children:E1("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[kP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),Z.map((U)=>kP(d0,{className:"min-w-20 flex-1",resource:U},V.listKey("resource-cell",U.id)))]})})};import{jsx as j1}from"react/jsx-runtime";var x1=()=>{let{orientation:P}=B();if(P==="vertical")return j1(D1,{});return j1(C1,{})};import{useMemo as a2}from"react";function a0(){let{currentDate:P,firstDayOfWeek:$,getVisibleResources:Z,weekViewGranularity:J,businessHours:X,hideNonBusinessHours:Q,hiddenDays:Y}=B(),U=J==="hourly",q=Z(),_=a2(()=>U0(P,$),[P,$]),L=a2(()=>Y?_.filter((W)=>!Y.has(W.day())):_,[_,Y]),K=a2(()=>q.flatMap((W)=>W.businessHours?[W.businessHours]:[]),[q]);return{isHourly:U,resources:q,weekDays:_,visibleDays:L,currentDate:P,businessHours:X,hideNonBusinessHours:Q,resourceBusinessHours:K}}import{jsx as f2,jsxs as o9}from"react/jsx-runtime";var v1=({days:P})=>{let{weekViewGranularity:$}=B(),Z=$==="hourly";return f2("div",{className:"flex h-12",children:P.map((J,X)=>{let Q=t(J),Y=V.header.week.day(J);return f2(E,{className:A("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":V.header.resource.weekDay,delay:X*0.05,transitionKey:V.listKey(Y,"motion"),children:o9("div",{className:A(Z?"sticky left-1/2":"w-full text-center"),children:[f2("div",{className:"text-sm",children:J.format("ddd")}),f2("div",{className:"text-xs text-muted-foreground",children:J.format("M/D")})]})},V.listKey(Y,"animated"))})})};import{useMemo as l9}from"react";function y1(){let{isHourly:P,weekDays:$,businessHours:Z,hideNonBusinessHours:J,resourceBusinessHours:X}=a0();return{weekHours:l9(()=>{if(!P)return[];return $.map((Y)=>_0({referenceDate:Y,businessHours:Z,hideNonBusinessHours:J,resourceBusinessHours:X}))},[P,$,Z,J,X])}}import{jsx as A2,jsxs as c1}from"react/jsx-runtime";var o1=()=>{let{t:P}=B(),{isHourly:$,weekDays:Z}=a0(),{weekHours:J}=y1();return c1(MP,{classes:{header:A($?"h-24":"h-12","min-w-full"),body:"min-w-full",cell:"min-w-20 flex-1"},days:$?J:Z,gridType:$?"hour":"day",children:[A2("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:A2("div",{className:"text-sm",children:P("resources")})}),c1("div",{className:"flex-1 flex flex-col",children:[A2(v1,{days:Z}),$&&A2(_2,{delayStep:0.005,hours:J.flat(),view:"week"})]})]})};import{useMemo as n1}from"react";import{jsx as N2,jsxs as l1}from"react/jsx-runtime";var i1=({columns:P})=>{let{currentDate:$}=B();return l1("div",{className:"flex h-12",children:[N2("div",{className:"shrink-0 w-16 border-r border-b z-20 bg-background sticky left-0",children:N2("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=V.header.week.hour(X,Z.resourceId??"");return l1(E,{className:A("w-20 border-r last:border-r-0 border-b flex flex-col items-center justify-center text-xs shrink-0 bg-background"),"data-testid":V.header.resource.timeLabel("week",X.format("HH")),delay:J*0.05,transitionKey:V.listKey(Q,"motion"),children:[N2("div",{className:"text-sm",children:X.format("ddd")}),N2("div",{className:"text-xs text-muted-foreground",children:X.format("M/D")})]},V.listKey(Q,"animated"))})]})};import{jsx as W2,jsxs as u1}from"react/jsx-runtime";var d1=({resources:P})=>{let{weekViewGranularity:$,t:Z,currentDate:J}=B(),X=$==="hourly";return u1("div",{className:"flex h-12",children:[W2("div",{className:"shrink-0 w-16 border-r z-20 bg-background sticky left-0",children:u1("span",{className:A("px-2 h-full w-full flex flex-col justify-center text-xs text-muted-foreground text-center",X?"justify-end":"justify-center border-b"),children:[Z("week"),!X&&W2("span",{className:"font-medium text-foreground",children:J.week()})]})}),P.map((Q)=>{return W2(d0,{className:"min-w-20 flex-1 border-b",resource:Q,children:W2("div",{className:A("sticky text-sm font-medium truncate",X?"left-1/4":"left-1"),children:Q.title})},V.listKey("resource-cell",Q.id))})]})};import{useCallback as i9,useMemo as F2}from"react";function r1(){let{isHourly:P,resources:$,weekDays:Z,visibleDays:J,currentDate:X,businessHours:Q,hideNonBusinessHours:Y,resourceBusinessHours:U}=a0(),q=i9((O)=>{return _0({referenceDate:O,businessHours:Q,hideNonBusinessHours:Y,allDates:Z,resourceBusinessHours:U})},[Q,Y,Z,U]),_=F2(()=>q(X),[X,q]),L=F2(()=>$.flatMap((O)=>J.map((f)=>({id:V.col.day(f,O.id),className:"min-w-20 flex-1",resourceId:O.id,resource:O,day:f,days:q(f),gridType:"hour"}))),[$,J,q]),K=F2(()=>$.map((O)=>({id:V.col.resource("week",O.id),className:"min-w-20 flex-1",day:void 0,resourceId:O.id,resource:O,days:Z,gridType:"day"})),[$,Z]),W=F2(()=>{if(P)return L;return K},[P,L,K]);return{hours:_,columns:W}}import{jsx as E0,jsxs as t2,Fragment as u9}from"react/jsx-runtime";var a1=()=>{let{isHourly:P,resources:$,weekDays:Z,visibleDays:J}=a0(),{hours:X,columns:Q}=r1(),Y=n1(()=>({id:P?V.col.time:V.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)=>E0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:P?E0(b0,{date:q}):t2(u9,{children:[E0("span",{children:q.format("ddd")}),E0("span",{children:q.format("M/D")})]})})}),[X,P,Z]),U=n1(()=>{if(!P)return;return t2("div",{className:"flex",children:[E0(VP,{}),$.map((q)=>E0(r0,{classes:{cell:"min-w-20 border-r!"},days:J,resource:q,showSpacer:!1},V.allDayRow(q.id)))]})},[P,$,J]);return E0(w0,{allDayRow:U,classes:{header:P?"h-24":"h-12 w-full",body:P?"w-fit":"w-full"},columns:[Y,...Q],"data-testid":"resource-week",gridType:P?"hour":"day",children:t2("div",{className:"flex-1 flex flex-col",children:[E0(d1,{resources:$,visibleDays:J}),P&&E0(i1,{columns:Q})]})})};import{jsx as t1}from"react/jsx-runtime";var s1=()=>{let{orientation:P}=B();if(P==="vertical")return t1(a1,{});return t1(o1,{})};import{jsx as t0,jsxs as d9}from"react/jsx-runtime";var e1=()=>{let{view:P}=B();return d9("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-resource-calendar",children:[t0(SP,{className:"p-1"}),t0(iP,{children:t0(E,{className:"w-full h-[calc(100%-3.5rem)] @container/calendar-body",direction:"horizontal",transitionKey:P,children:t0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:t0(x1,{},"month"),week:t0(s1,{},"week"),day:t0(k1,{},"day")}[P]})})}),t0($2,{})]})};import{jsx as P4}from"react/jsx-runtime";var r9=({events:P=[],resources:$=[],firstDayOfWeek:Z="sunday",initialView:J="month",initialDate:X,disableDragAndDrop:Q=!1,dayMaxEvents:Y=YP,timeFormat:U="12-hour",eventSpacing:q=j0,eventHeight:_=R0,hiddenDays:L,...K})=>{return P4(L5,{dayMaxEvents:Y,disableDragAndDrop:Q,eventHeight:_,eventSpacing:q,events:EP(P),firstDayOfWeek:x0[Z],hiddenDays:CP(L),initialDate:qP(X),initialView:J,resources:$,timeFormat:U,...K,children:P4(e1,{})})};export{w4 as useIlamyCalendarContext,GP as isRecurringEvent,B2 as generateRecurringEvents,M2 as defaultTranslations,LU as RRule,r9 as IlamyResourceCalendar,j9 as IlamyCalendar};
4
+ `).find((Z)=>Z.startsWith("RRULE:"))||""}catch{return""}},I$=(P)=>{let $=I().utc().format("YYYYMMDD[T]HHmmss[Z]"),Z=P.allDay?";VALUE=DATE":"",J=P.rrule?R$(P.rrule):"",X=P.exdates?.length?P.exdates.map((U)=>Z2(I(U),P.allDay)).join(","):null,Q=P.recurrenceId?Z2(I(P.recurrenceId),P.allDay):null;return["BEGIN:VEVENT",`UID:${r5(P)}`,`DTSTART${Z}:${Z2(P.start,P.allDay)}`,`DTEND${Z}:${Z2(P.end,P.allDay)}`,`SUMMARY:${J2(P.title)}`,P.description&&`DESCRIPTION:${J2(P.description)}`,P.location&&`LOCATION:${J2(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(j2)},S$=(P)=>{let $=new Set;return P.filter((Z)=>{let J=r5(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)})},T$=(P,$="ilamy Calendar")=>{let Z=J2($),J=S$(P).map(I$);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}`,p$,...J,"END:VCALENDAR"].join(j2)},n5=(P,$="calendar.ics",Z="ilamy Calendar")=>{let J=new Blob([T$(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 H$}from"lucide-react";import{useMemo as b$,useState as w$}from"react";import{jsx as n,jsxs as Q2,Fragment as X2}from"react/jsx-runtime";var m$=["january","february","march","april","may","june","july","august","september","october","november","december"],g$=()=>{let{currentDate:P,view:$,selectDate:Z,t:J,firstDayOfWeek:X}=B((G)=>({currentDate:G.currentDate,view:G.view,selectDate:G.selectDate,t:G.t,firstDayOfWeek:G.firstDayOfWeek})),[Q,Y]=w$(null),U=b$(()=>m$.map((G)=>J(G)),[J]),q=P.year(),_=Array.from({length:11},(G,F)=>q-5+F),L=U0(P,X),K=(G)=>{Z(G),Y(null)},W=()=>n(X2,{children:U.map((G,F)=>n(h,{className:A("justify-start font-normal",P.month()===F&&"bg-primary/10"),onClick:()=>K(P.month(F)),variant:"ghost",children:G},G))}),O=()=>n(X2,{children:_.map((G)=>n(h,{className:A("justify-start font-normal",P.year()===G&&"bg-primary/10"),onClick:()=>K(P.year(G)),variant:"ghost",children:G},G))}),f=()=>n(X2,{children:Array.from({length:7},(G,F)=>{let M=P.subtract(3,"week").add(F,"week"),p=U0(M,X),S=p[0],R=p[6],b=M.isSame(P,"week"),g=S.month()!==R.month();return n(h,{className:A("justify-start font-normal",b&&"bg-primary/10"),onClick:()=>K(S),variant:"ghost",children:Q2("div",{className:"flex w-full items-center justify-between",children:[n("span",{children:`${S.format("MMM D")} - ${R.format("D")}`}),g&&n("span",{className:"ml-0.5 text-xs opacity-70",children:`${S.format("MMM")}-${R.format("MMM")}`})]})},r(S))})}),z=()=>{let G=P.startOf("month"),F=P.daysInMonth();return n(X2,{children:Array.from({length:F},(M,p)=>{let S=G.date(p+1),R=S.isSame(P,"day"),b=t(S);return n(h,{className:A("justify-start font-normal",R&&"bg-primary/10"),onClick:()=>K(S),variant:"ghost",children:Q2("div",{className:"flex w-full items-center justify-between",children:[n("span",{children:S.format("dddd, MMM D")}),b&&n("span",{className:"bg-primary text-primary-foreground rounded-sm px-1! text-xs",children:J("today")})]})},r(S))})})};return[{id:"month",hidden:$==="year",title:P.format("MMMM"),render:W},{id:"year",hidden:!1,title:P.format("YYYY"),render:O},{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:z}].filter((G)=>!G.hidden).map((G)=>Q2(c0,{onOpenChange:(F)=>Y(F?G.id:null),open:Q===G.id,children:[n(o0,{asChild:!0,children:Q2(h,{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:V.listKey(G.id,r(P)),children:G.title}),n(H$,{className:"h-4 w-4"})]})}),n(l0,{className:"w-40 p-0",children:n("div",{className:"flex max-h-60 flex-col overflow-auto",children:G.render()})})]},G.id))},a5=g$;import{ChevronLeft as k$,ChevronRight as h$}from"lucide-react";import{jsx as FP,jsxs as D$}from"react/jsx-runtime";var C$=["day","week","month","year"],E$=({currentView:P,onChange:$,variant:Z="default",size:J="sm",className:X,onToday:Q,onNext:Y,onPrevious:U})=>{let{t:q,resources:_}=B((f)=>({t:f.t,resources:f.resources})),L=Z==="grid",K=_&&_.length>0,W=(f)=>{return A(L?"w-full":"",P===f&&"bg-primary/80")},O=(f)=>{return P===f?"default":"outline"};return D$("div",{className:A(L?"grid grid-cols-2 gap-2":"flex gap-1",X),children:[FP(h,{onClick:U,size:J,variant:"outline",children:FP(k$,{className:"h-4 w-4"})}),FP(h,{onClick:Y,size:J,variant:"outline",children:FP(h$,{className:"h-4 w-4"})}),C$.map((f)=>{if(K&&f==="year")return null;return FP(h,{className:W(f),onClick:()=>$(f),size:J,variant:O(f),children:q(f)},f)}),FP(h,{onClick:Q,size:J,variant:"outline",children:q("today")})]})},x2=E$;import{jsx as i,jsxs as h0}from"react/jsx-runtime";var o$=({className:P=""})=>{let{view:$,setView:Z,nextPeriod:J,prevPeriod:X,today:Q,openEventForm:Y,headerComponent:U,headerClassName:q,rawEvents:_,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})),[K,W]=c$(!1),O=()=>W(!1),f=(F)=>(...M)=>{F(...M),O()},z=()=>{let F=`ilamy-calendar-${new Date().toISOString().split("T")[0]}.ics`;n5(_,F,"ilamy Calendar"),O()},N=()=>h0(h,{className:"flex items-center gap-1",onClick:()=>Y(),size:"sm",variant:"default",children:[i(y$,{className:"h-4 w-4"}),i("span",{className:"hidden @4xl:inline",children:L("new")})]}),G=({fullWidth:F=!1})=>h0(h,{className:A("flex items-center gap-1",F&&"w-full gap-2"),onClick:z,size:"sm",variant:"outline",children:[i(x$,{className:"h-4 w-4"}),F?`${L("export")} Calendar (.ics)`:i("span",{className:"hidden @4xl/base-header:inline",children:L("export")})]});if(U)return U;return i("div",{className:"@container/base-header w-full","data-testid":"calendar-header",children:h0("div",{className:A("flex justify-center @2xl/base-header:justify-between flex-wrap items-center gap-2",P,q),children:[h0("div",{className:"flex flex-wrap items-center justify-center gap-1 @2xl/base-header:justify-start",children:[i(j$,{className:"h-5 w-5"}),i(a5,{})]}),h0("div",{className:"flex flex-wrap justify-start @xl/base-header:justify-center gap-1 @4xl/base-header:justify-end overflow-x-auto",children:[h0("div",{className:"hidden @md/base-header:flex items-center justify-start gap-1",children:[i(x2,{className:"justify-end",currentView:$,onChange:Z,onNext:J,onPrevious:X,onToday:Q,variant:"default"}),i(N,{}),i(G,{})]}),h0("div",{className:"flex items-center justify-end gap-1 @md/base-header:hidden",children:[i(N,{}),h0(c0,{onOpenChange:W,open:K,children:[i(o0,{asChild:!0,children:i(h,{size:"sm",variant:"outline",children:i(v$,{className:"h-4 w-4"})})}),i(l0,{align:"end",className:"w-[240px] p-2",children:h0("div",{className:"space-y-2",children:[i(x2,{currentView:$,onChange:f(Z),onNext:f(J),onPrevious:f(X),onToday:f(Q),variant:"grid"}),i("div",{className:"pt-2 border-t",children:i(G,{fullWidth:!0})})]})})]})]})]})]})})},TP=o$;import{memo as G9}from"react";import{memo as X1,useMemo as Y9}from"react";import{useMemo as v2}from"react";var t5=({days:P,events:$,dayMaxEvents:Z,dayNumberHeight:J=P5,gridType:X="day",eventSpacing:Q=j0,eventBarHeight:Y=R0})=>{let U=P.at(0),q=P.at(-1);if(!U||!q)return[];let _=X==="hour"?U.startOf("hour"):U.startOf("day"),L=X==="hour"?q.endOf("hour"):q.endOf("day"),K=P.length,W=$.filter((p)=>p.end.diff(p.start,X)>0),O=$.filter((p)=>p.end.diff(p.start,X)===0),f=[...W].sort((p,S)=>{let R=p.start.diff(S.start);if(R!==0)return R;return S.end.diff(S.start)-p.end.diff(p.start)}),z=[...O].sort((p,S)=>p.start.diff(S.start)),N=Array.from({length:Z},()=>Array.from({length:K},()=>({taken:!1,event:null}))),G=[],F=(p,S)=>{for(let R=0;R<Z;R++){let b=!0;for(let g=p;g<=S;g++)if(N[R][g].taken){b=!1;break}if(b)return R}return-1},M=(p,S,R,b,g,D)=>{for(let c=S;c<=R;c++)N[p][c]={taken:!0,event:b};let u=R-S+1;G.push({left:S/K*100,width:u/K*100,top:J+Q+p*(Y+Q),height:Y,position:p,...b,isTruncatedStart:g,isTruncatedEnd:D})};for(let p of f){let S=I.max(p.start.startOf(X),_),R=X==="hour"?p.end.subtract(1,"minute"):p.end,b=I.min(R.startOf(X),L),g=Math.max(0,S.diff(_,X)),D=Math.min(K-1,b.diff(_,X)),u=p.start.startOf(X).isBefore(_),c=p.end.startOf(X).isAfter(L),P0=F(g,D);if(P0!==-1){M(P0,g,D,p,u,c);continue}for(let j=g+1;j<=D;j++){let k=F(j,D);if(k!==-1){M(k,j,D,p,!0,c);break}}}for(let p of z){let S=I.max(p.start.startOf(X),_),R=Math.max(0,Math.min(K-1,S.diff(_,X))),b=F(R,R);if(b!==-1)M(b,R,R,p,!1,!1)}return G};var y2=({days:P,allDay:$,dayNumberHeight:Z,resourceId:J,gridType:X})=>{let{getEventsForDateRange:Q,dayMaxEvents:Y,eventSpacing:U,eventHeight:q,getEventsForResource:_}=B(),L=P.at(0),K=P.at(-1),W=L?.startOf("day"),O=K?.endOf("day"),f=v2(()=>{if(!W||!O)return[];let G=Q(W,O);if(J)G=fP(G,_(J));if($)G=G.filter((F)=>!!F.allDay===$);return G},[Q,_,W,O,J,$]),z=v2(()=>{let G=new Map;for(let F of P){let M=r(F),p=F.startOf("day"),S=F.endOf("day"),R=f.filter((b)=>cP(b,p,S));G.set(M,R)}return G},[P,f]);return{positionedEvents:v2(()=>{return t5({days:P,events:f,dayMaxEvents:Y,dayNumberHeight:Z,eventSpacing:U,eventBarHeight:q,gridType:X})},[P,Y,Z,U,q,f,X]),dayEventsMap:z}};import P9,{memo as $9,useMemo as Z9}from"react";import{jsx as l$}from"react/jsx-runtime";var s5=({date:P,className:$})=>{let Z=t(P);return l$("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":V.dayNumber(P),children:P.format("D")})};import{useImperativeHandle as a$,useState as e5}from"react";import{useDraggable as i$}from"@dnd-kit/core";import{memo as u$}from"react";import{jsx as HP,jsxs as n$}from"react/jsx-runtime";var d$=(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 r$({elementId:P,event:$,className:Z,style:J,disableDrag:X=!1}){let{onEventClick:Q,renderEvent:Y,disableEventClick:U,disableDragAndDrop:q}=B(),{attributes:_,listeners:L,setNodeRef:K,isDragging:W}=i$({id:P,data:{event:$,type:"calendar-event"},disabled:X||q}),O=()=>{let f=$,z=f.isTruncatedStart,N=f.isTruncatedEnd;return n$("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",d$(Boolean(z),Boolean(N))),style:{backgroundColor:$.backgroundColor,color:$.color},children:[z&&HP("div",{className:"absolute left-0 top-0 bottom-0 w-0.5 bg-foreground/25"}),HP("p",{className:A("text-[10px] font-semibold sm:text-xs mt-0.5",z&&"pl-1",N&&"pr-1"),children:$.title}),N&&HP("div",{className:"absolute right-0 top-0 bottom-0 w-0.5 bg-foreground/25"})]})};return HP(E,{className:A("truncate h-full w-full",X||q?U?"cursor-default":"cursor-pointer":"cursor-grab",W&&!(X||q)&&"cursor-grabbing shadow-lg",Z),layout:!0,layoutId:P,onClick:(f)=>{f.stopPropagation(),Q($)},ref:K,style:J,transitionKey:P,..._,...L,children:Y?Y($):HP(O,{})})}var OP=u$(r$,(P,$)=>{return P.elementId===$.elementId&&P.disableDrag===$.disableDrag&&P.className===$.className&&P.event===$.event});import{jsx as bP,jsxs as t$}from"react/jsx-runtime";var P1=({ref:P})=>{let[$,Z]=e5(!1),[J,X]=e5(null),{currentDate:Q,firstDayOfWeek:Y,eventHeight:U}=B();a$(P,()=>({open:()=>Z(!0),close:()=>Z(!1),setSelectedDayEvents:(L)=>X(L)}));let _=Q.startOf("month").clone();while(_.day()!==Y)_=_.subtract(1,"day");return bP(UP,{onOpenChange:Z,open:$,children:t$(zP,{className:"max-h-[80vh] max-w-md overflow-y-auto",children:[bP(KP,{children:bP(_P,{children:J?.day.format("MMMM D, YYYY")})}),bP("div",{className:"mt-4 space-y-3",children:J?.events.map((L)=>{return bP(OP,{className:"relative my-1",elementId:`all-events-dialog-event-$${L.id}`,event:L,style:{height:`${U}px`}},L.id)})})]})})};import{useDroppable as s$}from"@dnd-kit/core";import{jsx as e$}from"react/jsx-runtime";function $1({id:P,type:$,date:Z,hour:J,minute:X,resourceId:Q,allDay:Y,children:U,className:q,style:_,"data-testid":L,disabled:K=!1}){let{onCellClick:W,disableDragAndDrop:O,disableCellClick:f,classesOverride:z,view:N}=B(),{isOver:G,setNodeRef:F}=s$({id:P,data:{type:$,date:Z,hour:J,minute:X,resourceId:Q,allDay:Y},disabled:O||K}),M=(p)=>{if(p.stopPropagation(),f||K)return;let S=Z.hour(J??0).minute(X??0),R=S.clone();if(J!==void 0&&X!==void 0)R=R.hour(J).minute(X+15);else if(J!==void 0)R=R.hour(J+1).minute(0);else R=R.hour(23).minute(59);W({start:S,end:R,resourceId:Q,allDay:Y})};return e$("div",{className:A("droppable-cell",q,G&&!O&&!K&&"bg-accent",f||K?"cursor-default":"cursor-pointer",K&&(z?.disabledCell||$5)),"data-disabled":K.toString(),"data-testid":L,"data-view":N,onClick:M,ref:F,style:_,children:U})}import{jsx as Y2,jsxs as q2,Fragment as Z1}from"react/jsx-runtime";var J9=({day:P,hour:$,minute:Z,className:J="",resourceId:X,gridType:Q="day",shouldRenderEvents:Y=!0,allDay:U=!1,precomputedEvents:q,"data-testid":_,showDayNumber:L=!1,children:K})=>{let W=P9.useRef(null),{dayMaxEvents:O=0,getEventsForDateRange:f,currentDate:z,t:N,getEventsForResource:G,currentLocale:F,eventSpacing:M,eventHeight:p}=B(),S=eP(X),R=Z9(()=>{if(!Y)return[];if(q)return q;let k=f(P.startOf(Q),P.endOf(Q));if(U)k=k.filter((o)=>o.allDay);if(X)return fP(k,G(X)??[]);return k},[q,P,X,f,G,Q,Y,U]),b=(k,o)=>{W.current?.setSelectedDayEvents({day:k,events:o}),W.current?.open()},g=P.month()===z.month(),D=R.length-O,u=D>0,c=T5({date:P,hour:Q==="hour"?P.hour():void 0,businessHours:S}),P0=Q==="hour"?V.cell.day(P,P.format("HH"),P.format("mm")):V.cell.day(P),j=V.droppable.dayCell(P,{allDay:U,resourceId:X});return q2(Z1,{children:[Y2($1,{allDay:U,className:A("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":_||P0,date:P,disabled:!c||!g,hour:$,id:j,minute:Z,resourceId:X,type:"day-cell",children:q2("div",{className:"flex flex-col h-full w-full","data-testid":"grid-cell-content",style:{gap:`${M}px`},children:[L&&Y2(s5,{date:P,locale:F}),Y&&q2(Z1,{children:[R.slice(0,O).map((k,o)=>Y2("div",{className:"w-full shrink-0","data-testid":k?.title,style:{height:`${p}px`}},V.listKey("empty",o,k.id))),u&&q2("div",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs shrink-0 mt-1",onClick:(k)=>{k.stopPropagation(),b(P,R)},onKeyDown:(k)=>{if(k.key==="Enter"||k.key===" ")k.preventDefault(),k.stopPropagation(),b(P,R)},role:"button",tabIndex:0,children:["+",D," ",N("more")]})]}),K]})}),Y2(P1,{ref:W})]})},wP=$9(J9);import{jsx as J1}from"react/jsx-runtime";var d0=({resource:P,className:$,children:Z,"data-testid":J})=>{let{renderResource:X}=B();return J1("div",{className:A("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??J1("div",{className:"text-sm font-medium truncate",children:P.title})})};import{memo as X9}from"react";import{jsx as c2}from"react/jsx-runtime";var Q9=({days:P,resourceId:$,"data-testid":Z,positionedEvents:J})=>{let{eventHeight:X}=B(),Q=P.at(0)?.startOf("day");return c2("div",{className:"absolute inset-0 pointer-events-none z-10 overflow-clip","data-testid":Z,children:J.map((Y)=>{let U=`${Y.id}-${Y.position}-${Q?.toISOString()}-${$??"no-resource"}`;return c2("div",{className:"absolute z-10 pointer-events-auto overflow-clip","data-left":Y.left,"data-testid":V.container.horizontal.event(Y.id),"data-top":Y.top,"data-width":Y.width,style:{left:`calc(${Y.left}% + var(--spacing) * 0.25)`,width:`calc(${Y.width}% - var(--spacing) * 1)`,top:`${Y.top}px`,height:`${X}px`},children:c2(OP,{className:"h-full w-full shadow",elementId:U,event:Y})},V.listKey(U,"wrapper"))})})},o2=X9(Q9);import{jsx as V0,jsxs as l2}from"react/jsx-runtime";var q9=({id:P,resource:$,gridType:Z="day",variant:J="resource",dayNumberHeight:X,className:Q,columns:Y=[],allDay:U,showDayNumber:q=!1,isLastRow:_=!1})=>{let{renderResource:L}=B(),K=J==="resource",W=Y.some((N)=>N.days),O=Y9(()=>{if(W)return[];return Y.map((N)=>N.day).filter((N)=>Boolean(N))},[Y,W]),{positionedEvents:f,dayEventsMap:z}=y2({days:O,gridType:Z,resourceId:$?.id,dayNumberHeight:X,allDay:U});return l2("div",{className:A("flex flex-1 relative",Q),"data-testid":V.container.horizontal.row(P),children:[K&&$&&V0(d0,{className:"w-20 sm:w-40 sticky left-0 bg-background z-20 h-full","data-testid":V.container.horizontal.rowLabel($.id),resource:$,children:L?L($):V0("div",{className:"wrap-break-word text-sm",children:$.title})}),l2("div",{className:"relative flex-1 flex",children:[V0("div",{className:"flex w-full",children:Y.map((N,G)=>{if(N.days)return V0(U9,{allDay:U,col:N,dayNumberHeight:X,gridType:Z,id:P,isLastCol:G===Y.length-1,isLastRow:_,resourceId:$?.id,showDayNumber:q},N.id);return N.day?V0(wP,{allDay:U,className:A("flex-1 w-20",_&&"border-b-0",N.className),day:N.day,gridType:Z,hour:Z==="hour"?N.day.hour():void 0,precomputedEvents:z.get(r(N.day)),resourceId:$?.id,showDayNumber:q},N.day.toISOString()):null})}),!W&&V0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:V0(o2,{"data-testid":V.container.eventsLayer("horizontal",P),days:O,positionedEvents:f,resourceId:$?.id})})]})]})},U9=X1(({col:P,gridType:$="day",allDay:Z,resourceId:J,dayNumberHeight:X,showDayNumber:Q,isLastRow:Y,isLastCol:U,id:q})=>{let _=P.days??[],{positionedEvents:L}=y2({days:_,gridType:$,resourceId:J,dayNumberHeight:X,allDay:Z});return l2("div",{className:"flex relative w-full",children:[V0("div",{className:"flex w-full",children:_.map((K)=>V0(wP,{allDay:Z,className:A("flex-1 w-20",Y&&"border-b-0",!U&&"border-r!",P.className),day:K,gridType:$,hour:$==="hour"?K.hour():void 0,resourceId:J,showDayNumber:Q},K.toISOString()))}),V0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:V0(o2,{"data-testid":V.container.eventsLayer("horizontal",q),days:_,positionedEvents:L,resourceId:J})})]})}),U2=X1(q9);import{memo as z9}from"react";import{jsx as _9}from"react/jsx-runtime";var K9=({className:P})=>{let{t:$}=B();return _9("div",{className:A("w-16 border-r shrink-0 sticky left-0 bg-background z-20 flex border-b items-center justify-center sm:text-xs text-muted-foreground",P),children:$("allDay")})},VP=z9(K9);import{jsx as Q1,jsxs as f9}from"react/jsx-runtime";var L9=({days:P,classes:$,resource:Z,showSpacer:J=!0})=>{let X=P.map((Q,Y)=>({id:V.col.allDay(Q,Y),day:Q,gridType:"day",className:A("h-full min-h-12 border-r last:border-r-0",$?.cell)}));return f9("div",{className:A("flex w-full bg-background",$?.row),"data-testid":"all-day-row",children:[J&&Q1(VP,{className:$?.spacer}),Q1(U2,{allDay:!0,className:"flex-1 min-h-fit border-b",columns:X,dayNumberHeight:0,gridType:"day",id:V.allDayRow(Z?.id),isLastRow:!0,resource:Z,variant:"regular"})]})},r0=G9(L9);import{jsx as q1,Fragment as Y1}from"react/jsx-runtime";var b0=({date:P})=>{let{renderHour:$,timeFormat:Z}=B();if($)return q1(Y1,{children:$(P)});return q1(Y1,{children:P.format(Z==="12-hour"?"h A":"H")})};import{memo as B9}from"react";import{memo as F9}from"react";import{memo as A9}from"react";import{jsx as U1,Fragment as W9}from"react/jsx-runtime";var N9=({rangeStart:P,rangeEnd:$,now:Z,resource:J})=>{let{renderCurrentTimeIndicator:X,view:Q}=B((K)=>({renderCurrentTimeIndicator:K.renderCurrentTimeIndicator,view:K.view})),Y=Z??I();if(!(Y.isSameOrAfter(P)&&Y.isBefore($)))return null;let q=$.diff(P,"minute"),L=Y.diff(P,"minute")/q*100;if(X)return U1(W9,{children:X({currentTime:Y,rangeStart:P,rangeEnd:$,progress:L,resource:J,view:Q})});return U1("div",{className:"absolute left-0 right-0 h-0.5 bg-red-500 z-50 pointer-events-none","data-testid":"current-time-indicator",style:{top:`${L}%`}})},z1=A9(N9);import{useMemo as _1}from"react";var K1=({days:P,gridType:$="hour",events:Z})=>{let J=Z.filter((O)=>!O.allDay).toSorted((O,f)=>O.start.diff(f.start));if(J.length===0)return[];let X=P.at(0)||I(),Q=P.length,Y=$==="day",U=[],q=[],_=null;for(let O of J){if(_&&O.start.isSameOrAfter(_)){if(q.length>0)U.push(q);q=[]}q.push(O),_=_?I.max(_,O.end):O.end}if(q.length>0)U.push(q);let L=(O)=>{let f=O.start.diff(X,$,!0),z=O.end.diff(X,$,!0);if(Y){if(f=Math.floor(f),z=Math.ceil(z),z<=f)z=f+1}if(f<0)f=0;if(z>Q)z=Q;let N=Math.max(0,z-f);if(N===0)return null;return{top:f/Q*100,height:N/Q*100}},K=(O)=>O===2?25:O===3?50:O===4?60:70,W=[];for(let O of U){if(O.length===1){let G=O[0],F=L(G);if(!F)continue;W.push({...G,left:0,width:100,...F});continue}let f=[...O].sort((G,F)=>{let M=F.end.diff(F.start,"minute")-G.end.diff(G.start,"minute");return M!==0?M:G.start.diff(F.start)}),z=f.length,N=z>1?K(z)/(z-1):0;for(let G=0;G<z;G++){let F=f[G],M=L(F);if(!M)continue;let p=G===0?0:N*G;W.push({...F,...M,left:p,width:100-p,zIndex:G+1})}}return W};var G1=({days:P,gridType:$,resourceId:Z})=>{let{getEventsForDateRange:J,getEventsForResource:X}=B(),Q=P.at(0),Y=P.at(-1),U=Q?.startOf("day"),q=Y?.endOf("day"),_=_1(()=>{if(!U||!q)return[];let K=J(U,q);if(Z)K=fP(K,X(Z));return K.filter((W)=>!W.allDay)},[U,q,J,Z,X]);return _1(()=>{return K1({days:P,events:_,gridType:$})},[P,$,_])};import{jsx as i2,jsxs as V9}from"react/jsx-runtime";var O9=({days:P,gridType:$="hour",resourceId:Z,resource:J,"data-testid":X})=>{let Q=G1({days:P,gridType:$,resourceId:Z}),Y=P.at(0),U=P.at(-1)?.add(1,$);return V9("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":X,children:[Y&&U&&i2(z1,{rangeEnd:U,rangeStart:Y,resource:J}),Q.map((q,_)=>{let L=`event-${q.id}-${_}-${P.at(0)?.toISOString()}-${Z??"no-resource"}`,K=q.end.diff(q.start,"minute")<=15;return i2("div",{className:"absolute",style:{left:`${q.left}%`,width:`calc(${q.width}% - var(--spacing) * 2)`,top:`${q.top}%`,height:`${q.height}%`},children:i2(OP,{className:A("pointer-events-auto",{"[&_p]:text-[10px] [&_p]:mt-0":K}),elementId:L,event:q})},V.listKey(L,"wrapper"))})]})},L1=F9(O9);import{jsx as BP,jsxs as p9}from"react/jsx-runtime";var M9=({id:P,days:$,resourceId:Z,resource:J,"data-testid":X,gridType:Q,className:Y,renderCell:U,noEvents:q,cellSlots:_=[60],isLastColumn:L})=>{return BP("div",{className:A("flex flex-col flex-1 items-center justify-center min-w-20 bg-background relative",Y),"data-testid":X||V.container.vertical.col(P),children:p9("div",{className:"w-full h-full relative grid",style:{gridTemplateRows:`repeat(${$.length}, minmax(0, 1fr))`},children:[$.map((K,W)=>{let O=K.format("HH");if(U){let f=P===V.col.time?V.cell.verticalTime(O):V.cell.vertical(K,O,"00",Z);return BP("div",{className:"min-h-[60px] border-b border-r","data-testid":f,children:U(K)},V.listKey(P,W,O))}return BP("div",{className:A("flex flex-col min-h-[60px]",L?"border-r-0":"border-r"),children:_.map((f)=>{let z=f===60?void 0:f,N=z===void 0?"00":String(z).padStart(2,"0"),G=V.cell.vertical(K,O,N,Z);return BP(wP,{className:A("hover:bg-accent relative z-10 flex-1 min-h-0 cursor-pointer border-b border-r-0",f!==60&&"border-dashed"),"data-testid":G,day:z?K.minute(z):K,gridType:Q,hour:K.hour(),minute:z,resourceId:Z,shouldRenderEvents:!1},V.listKey(P,W,N))})},V.listKey(P,W,O))}),!q&&BP("div",{className:"absolute inset-0 z-10 pointer-events-none",children:BP(L1,{"data-testid":V.container.eventsLayer("vertical",P),days:$,gridType:Q,resource:J,resourceId:Z})})]})})},f1=B9(M9);import{memo as R9}from"react";import{jsx as A1,jsxs as S9}from"react/jsx-runtime";var I9=({children:P,classes:$,allDayRow:Z})=>{let{stickyViewHeader:J,viewHeaderClassName:X}=B((Q)=>({stickyViewHeader:Q.stickyViewHeader,viewHeaderClassName:Q.viewHeaderClassName}));return S9("div",{className:A(J&&"sticky top-0 z-21 bg-background",X),children:[A1("div",{className:A("h-12 border-b min-w-full w-fit",$?.header),"data-testid":"vertical-grid-header",children:P}),Z&&A1("div",{className:A("flex w-full min-h-12",$?.allDay),"data-testid":"vertical-grid-all-day",children:Z})]})},N1=R9(I9);import{jsx as mP,jsxs as W1}from"react/jsx-runtime";var w0=({columns:P,children:$,gridType:Z="day",variant:J="resource",classes:X,allDayRow:Q,cellSlots:Y,style:U})=>{let q=J==="resource",_=!q,L=$&&mP(N1,{allDayRow:Q,classes:{header:X?.header,allDay:X?.allDay},children:$});return W1("div",{className:"h-full flex flex-col","data-testid":"vertical-grid-container",style:U,children:[_&&L,W1(T0,{className:A("h-full",_&&"overflow-auto"),"data-testid":"vertical-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[q&&L,mP("div",{className:A("flex flex-1 min-w-full w-fit",X?.body),"data-testid":"vertical-grid-body",children:P.map((K,W)=>mP(f1,{...K,cellSlots:Y,gridType:Z,isLastColumn:W===P.length-1},V.listKey(K.id,W)))}),mP(k0,{className:"z-30"})," ",mP(k0,{className:"z-30",orientation:"horizontal"})," "]})]})};function _0({referenceDate:P,businessHours:$,hideNonBusinessHours:Z,allDates:J=[P],resourceBusinessHours:X=[]}){let Q=z5({referenceDate:P}),Y=!!$||X.length>0;if(!(Z&&Y))return Q;let{minStart:q,maxEnd:_,hasBusinessHours:L}=aP({allDates:J,businessHours:$,resourceBusinessHours:X,hideNonBusinessHours:Z});if(!L)return Q;return Q.filter((K)=>{let W=K.hour();return W>=q&&W<_})}import{jsx as $P,jsxs as T9}from"react/jsx-runtime";var F1=()=>{let{currentDate:P,t:$,businessHours:Z,hideNonBusinessHours:J}=B(),X=t(P),Q=_0({referenceDate:P,businessHours:Z,hideNonBusinessHours:J,allDates:[P]}),Y={id:V.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",gridType:"hour",noEvents:!0,renderCell:(q)=>$P("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:$P(b0,{date:q})})},U={id:V.col.day(P),day:P,days:Q,className:"w-[calc(100%-4rem)] flex-1",gridType:"hour"};return $P(w0,{allDayRow:$P(r0,{days:[P]}),cellSlots:[0,15,30,45],classes:{header:"w-full",body:"w-full",allDay:"w-full"},columns:[Y,U],gridType:"hour",variant:"regular",children:$P("div",{className:"flex flex-1 justify-center items-center min-h-12","data-testid":"day-view-header",children:T9(E,{className:A("flex justify-center items-center text-center text-base font-semibold sm:text-xl",X&&"text-primary"),transitionKey:r(P),children:[$P("span",{className:"xs:inline hidden",children:P.format("dddd, ")}),P.format("MMMM D, YYYY"),X&&$P("span",{className:"bg-primary text-primary-foreground ml-2 rounded-full px-1 py-0.5 text-xs sm:px-2 sm:text-sm",children:$("today")})]})})})};import{useMemo as m9}from"react";import{memo as H9}from"react";import{jsx as w9}from"react/jsx-runtime";var b9=({children:P,className:$})=>{let{stickyViewHeader:Z,viewHeaderClassName:J}=B((X)=>({stickyViewHeader:X.stickyViewHeader,viewHeaderClassName:X.viewHeaderClassName}));return w9("div",{className:A("flex h-12 w-fit",Z&&"sticky top-0 z-21 bg-background",$,J),"data-testid":"horizontal-grid-header",children:P})},O1=H9(b9);import{jsx as MP,jsxs as V1}from"react/jsx-runtime";var z2=({rows:P,children:$,classes:Z,allDay:J,gridType:X,variant:Q="resource",dayNumberHeight:Y})=>{let{currentDate:U}=B(),q=Q==="resource",_=!q,L=$&&MP(O1,{className:Z?.header,children:$});return V1("div",{className:"h-full flex flex-col","data-testid":"horizontal-grid-container",children:[_&&L,V1(T0,{className:A("h-full",_&&"overflow-auto"),"data-testid":"horizontal-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[q&&L,MP("div",{className:A("flex flex-1 w-fit",Z?.body),"data-testid":"horizontal-grid-body",children:MP("div",{className:"relative w-full flex flex-col flex-1",children:P.map((K,W)=>MP(U2,{allDay:K.allDay??J,dayNumberHeight:Y,gridType:X,isLastRow:W===P.length-1,variant:Q,...K},K.id))},U.format("YYYY-MM"))}),MP(k0,{className:"z-30"}),MP(k0,{className:"z-30",orientation:"horizontal"})]})]})};import{jsx as u2}from"react/jsx-runtime";var B1=({className:P})=>{let{firstDayOfWeek:$,stickyViewHeader:Z,viewHeaderClassName:J,currentDate:X}=B(),Q=U0(X,$);return u2("div",{className:A("flex w-full",Z&&"sticky top-0 z-20",J,P),"data-testid":"month-header",children:Q.map((Y,U)=>u2(E,{className:"py-2 text-center font-medium border-r last:border-r-0 border-b flex-1","data-testid":V.header.weekday("month",Y.format("ddd")),delay:U*0.05,transitionKey:Y.toISOString(),children:u2("span",{className:"text-sm capitalize",children:Y.format("ddd")})},Y.toISOString()))})};import{jsx as M1}from"react/jsx-runtime";var p1=()=>{let{currentDate:P,firstDayOfWeek:$}=B(),J=m9(()=>LP(P,$),[P,$]).map((X,Q)=>({id:V.listKey("week",Q),columns:X.map((Y)=>({id:V.col.day(Y),day:Y,className:"w-auto",gridType:"day"})),className:"flex-1",showDayNumber:!0}));return M1(z2,{classes:{body:"w-full",header:"w-full"},rows:J,variant:"regular",children:M1(B1,{className:"h-12"})})};import{useMemo as K2}from"react";import{jsx as C0,jsxs as d2}from"react/jsx-runtime";var R1="w-[calc((100%-4rem)/var(--visible-days))] min-w-[calc((100%-4rem)/var(--visible-days))] flex-1",I1="w-10 sm:w-16 min-w-10 sm:min-w-16 max-w-10 sm:max-w-16",S1=()=>{let{t:P,currentDate:$,firstDayOfWeek:Z,selectDate:J,openEventForm:X,businessHours:Q,hideNonBusinessHours:Y,hiddenDays:U}=B(),q=K2(()=>U0($,Z),[$,Z]),_=K2(()=>U?q.filter((f)=>!U.has(f.day())):q,[q,U]),L=K2(()=>_0({referenceDate:$,businessHours:Q,hideNonBusinessHours:Y,allDates:q}),[$,Q,Y,q]),K={id:V.col.time,days:L,day:void 0,className:`shrink-0 ${I1} sticky left-0 bg-background z-20`,gridType:"hour",noEvents:!0,renderCell:(f)=>C0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:C0(b0,{date:f})})},W=K2(()=>{return _.map((f)=>({id:V.col.day(f),day:f,label:f.format("D"),className:R1,days:_0({referenceDate:f,businessHours:Q,hideNonBusinessHours:Y,allDates:q}),value:f}))},[q,Q,Y,_.map]),O={"--visible-days":_.length};return C0(w0,{allDayRow:C0(r0,{classes:{cell:R1,spacer:I1},days:_}),classes:{header:"w-full h-18",body:"w-full"},columns:[K,...W],gridType:"hour",style:O,variant:"regular",children:d2("div",{className:"flex h-full flex-1","data-testid":"week-view-header",children:[C0("div",{className:"w-10 sm:w-16 h-full shrink-0 items-center justify-center border-r p-2 flex",children:d2("div",{className:"flex flex-col items-center justify-center",children:[C0("span",{className:"text-muted-foreground text-xs",children:P("week")}),C0("span",{className:"font-medium",children:$.week()})]})}),_.map((f,z)=>{let N=t(f),G=V.header.week.day(f);return d2(E,{className:A("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",N&&"bg-primary/10 font-bold"),"data-testid":V.header.weekday("week",f.format("dddd")),delay:z*0.05,onClick:()=>{J(f),X({start:f})},transitionKey:G,children:[C0("div",{className:"text-xs sm:text-sm",children:f.format("ddd")}),C0("div",{className:A("mx-auto mt-1 flex h-5 w-5 items-center justify-center rounded-full text-xs",N&&"bg-primary text-primary-foreground"),children:f.format("D")})]},G)})]})})};import{jsx as n0,jsxs as gP}from"react/jsx-runtime";var g9=[{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"}],k9=["bg-primary","bg-blue-500","bg-green-500"],h9=42,T1=()=>{let{currentDate:P,selectDate:$,events:Z,setView:J,getEventsForDateRange:X,t:Q}=B(),Y=P.year(),U=()=>{return Array.from({length:12},(z,N)=>{let G=I().year(Y).month(N).startOf("month"),F=Z.filter((M)=>M.start.year()===Y&&M.start.month()===N);return{date:G,name:G.format("MMMM"),eventCount:F.length,monthKey:G.format("MM")}})},q=(z)=>{let N=z.startOf("month").startOf("week");return Array.from({length:h9},(G,F)=>{let M=N.add(F,"day"),p=M.startOf("day"),S=M.endOf("day"),R=X(p,S);return{date:M,dayKey:r(M),isInCurrentMonth:M.month()===z.month(),isToday:t(M),isSelected:M.isSame(P,"day"),eventCount:R.length}})},_=(z,N,G)=>{G?.stopPropagation(),$(z),J(N)},L=(z)=>{let N=z===1?Q("event"):Q("events");return`${z} ${N}`},K=(z)=>{let G=z.isInCurrentMonth?"":"text-muted-foreground opacity-50",F=z.isToday?"bg-primary text-primary-foreground rounded-full":"",M=z.isSelected&&!z.isToday?"bg-muted rounded-full font-bold":"",p=z.eventCount>0&&!z.isToday&&!z.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",G,F,M,p)},W=(z,N)=>{return A("h-[3px] w-[3px] rounded-full",N?"bg-primary-foreground":z)},O=U(),f=(z)=>{if(z===0)return"";return L(z)};return gP(T0,{className:"h-full","data-testid":"year-view",children:[n0("div",{className:"grid auto-rows-fr grid-cols-1 gap-4 p-4 sm:grid-cols-2 lg:grid-cols-3","data-testid":"year-grid",children:O.map((z,N)=>{let G=q(z.date),F=N*0.05;return gP("div",{className:"hover:border-primary flex flex-col rounded-lg border p-3 text-left transition-all duration-200 hover:shadow-md","data-testid":V.header.year.month(z.monthKey),children:[gP(E,{className:"mb-2 flex items-center justify-between",delay:F,transitionKey:V.listKey("month",z.monthKey),children:[n0("button",{className:"text-lg font-medium hover:underline cursor-pointer","data-testid":V.header.year.month(z.monthKey,"title"),onClick:()=>_(z.date,"month"),type:"button",children:z.name}),z.eventCount>0&&n0("span",{className:"bg-primary text-primary-foreground rounded-full px-2 py-1 text-xs","data-testid":V.header.year.month(z.monthKey,"count"),children:L(z.eventCount)})]},V.listKey("month",z.monthKey)),gP("div",{className:"grid grid-cols-7 gap-px text-[0.6rem]","data-testid":V.header.year.month(z.monthKey,"mini"),children:[g9.map((M)=>n0("div",{className:"text-muted-foreground h-3 text-center",children:M.label},V.listKey("header",z.monthKey,M.id))),G.map((M)=>{let p=V.header.year.day(z.date.format("YYYY-MM"),M.dayKey),S=M.eventCount>0,R=Math.min(M.eventCount,3),b=k9.slice(0,R);return gP("button",{className:K(M),"data-testid":p,onClick:(g)=>_(M.date,"day",g),title:f(M.eventCount),type:"button",children:[n0("span",{className:"text-center leading-none",children:M.date.date()}),S&&n0("div",{className:A("absolute bottom-0 flex w-full justify-center space-x-px",M.isToday&&"bottom-px"),children:b.map((g)=>n0("span",{className:W(g,M.isToday)},g))})]},M.dayKey)})]})]},z.monthKey)})}),n0(k0,{className:"z-30"})]})};import{useCallback as r2,useMemo as C9}from"react";import{jsx as E9}from"react/jsx-runtime";var H1=({children:P,events:$=[],firstDayOfWeek:Z=0,initialView:J="month",initialDate:X,renderEvent:Q,onEventClick:Y,onCellClick:U,onViewChange:q,onEventAdd:_,onEventUpdate:L,onEventDelete:K,onDateChange:W,locale:O,timezone:f,disableCellClick:z,disableEventClick:N,disableDragAndDrop:G,dayMaxEvents:F,eventSpacing:M=j0,eventHeight:p=R0,stickyViewHeader:S=!0,viewHeaderClassName:R="",headerComponent:b,headerClassName:g,businessHours:D,renderEventForm:u,translations:c,translator:P0,timeFormat:j="12-hour",classesOverride:k,renderCurrentTimeIndicator:o,renderHour:G0,hideNonBusinessHours:F0=!1,hiddenDays:M0})=>{let X0=oP({events:$,firstDayOfWeek:Z,initialView:J,initialDate:X,businessHours:D,onEventAdd:_,onEventUpdate:L,onEventDelete:K,onDateChange:W,onViewChange:q,locale:O,timezone:f,translations:c,translator:P0}),q0=r2((a)=>{X0.setSelectedEvent(a),X0.setIsEventFormOpen(!0)},[X0]),m0=r2((a)=>{if(N)return;if(Y)Y(a);else q0(a)},[N,Y,q0]),L0=r2((a)=>{if(z)return;if(U)U(a);else X0.openEventForm(a)},[U,z,X0]),Q0=C9(()=>({...X0,renderEvent:Q,onEventClick:m0,onCellClick:L0,locale:O,timezone:f,disableCellClick:z,disableEventClick:N,disableDragAndDrop:G,dayMaxEvents:F,eventSpacing:M,eventHeight:p,stickyViewHeader:S,viewHeaderClassName:R,headerComponent:b,headerClassName:g,businessHours:D,renderEventForm:u,timeFormat:j,classesOverride:k,renderCurrentTimeIndicator:o,renderHour:G0,hideNonBusinessHours:F0,hiddenDays:M0}),[X0,Q,m0,L0,O,f,z,N,G,F,M,p,S,R,b,g,D,u,j,k,o,G0,F0,M0]);return E9(xP.Provider,{value:Q0,children:P})};import{jsx as B0,jsxs as x9}from"react/jsx-runtime";var D9=()=>{let{view:P,dayMaxEvents:$}=B();return x9("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-calendar",children:[B0(TP,{className:"p-1"}),B0(iP,{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(p1,{dayMaxEvents:$},"month"),week:B0(S1,{},"week"),day:B0(F1,{},"day"),year:B0(T1,{},"year")}[P]})})}),B0($2,{})]})},j9=({events:P,firstDayOfWeek:$="sunday",initialView:Z="month",initialDate:J,dayMaxEvents:X=YP,eventSpacing:Q=j0,eventHeight:Y=R0,stickyViewHeader:U=!0,viewHeaderClassName:q="",timeFormat:_="12-hour",hideNonBusinessHours:L=!1,hiddenDays:K,...W})=>{return B0(H1,{dayMaxEvents:X,eventHeight:Y,eventSpacing:Q,events:EP(P),firstDayOfWeek:x0[$],hiddenDays:CP(K),hideNonBusinessHours:L,initialDate:qP(J),initialView:Z,stickyViewHeader:U,timeFormat:_,viewHeaderClassName:q,...W,children:B0(D9,{})})};import{jsx as v9}from"react/jsx-runtime";var pP=({days:P,gridType:$="day",children:Z,classes:J})=>{let{getVisibleResources:X}=B(),Q=X(),Y=P.map((q)=>{let _=Array.isArray(q),L=_?q[0]:q;return{id:L?V.col.day(L):"day-col-unknown",day:_?void 0:q,days:_?q:void 0,className:J?.cell,gridType:$}}),U=Q.map((q)=>({id:q.id,title:q.title,resource:q,columns:Y}));return v9(z2,{classes:J,dayNumberHeight:0,gridType:$,rows:U,children:Z})};import{jsx as n2}from"react/jsx-runtime";var _2=({hours:P,view:$,delayStep:Z})=>n2("div",{className:"flex h-12 border-b",children:P.map((J,X)=>{let Q=J.isSame(I(),"hour"),Y=V.header.week.hour(J,X);return n2(E,{className:A("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-testid":V.header.resource.timeLabel($,J.format("HH")),delay:X*Z,transitionKey:V.listKey(Y,"motion"),children:n2(b0,{date:J})},V.listKey(Y,"animated"))})});import{jsx as G2,jsxs as y9}from"react/jsx-runtime";var b1=()=>{let{currentDate:P,t:$,businessHours:Z,hideNonBusinessHours:J,getVisibleResources:X}=B(),Q=X(),Y=_0({referenceDate:P,businessHours:Z,hideNonBusinessHours:J,allDates:[P],resourceBusinessHours:Q.map((U)=>U.businessHours).filter(Boolean)});return y9(pP,{classes:{header:"min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:Y,gridType:"hour",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",children:$("resources")})}),G2("div",{className:"flex-1 flex flex-col",children:G2(_2,{delayStep:0.05,hours:Y,view:"day"})})]})};import{jsx as ZP,jsxs as w1}from"react/jsx-runtime";var m1=()=>{let{currentDate:P,getVisibleResources:$,businessHours:Z,hideNonBusinessHours:J}=B(),X=$(),Q=_0({referenceDate:P,businessHours:Z,hideNonBusinessHours:J,allDates:[P],resourceBusinessHours:X.map((q)=>q.businessHours).filter(Boolean)}),Y={id:V.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",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(b0,{date:q})})},U=X.map((q)=>({id:V.col.day(P,q.id),resourceId:q.id,resource:q,days:Q,day:P,gridType:"hour"}));return ZP(w0,{allDayRow:w1("div",{className:"flex w-full",children:[ZP(VP,{}),X.map((q)=>ZP(r0,{classes:{cell:"min-w-20"},days:[P],resource:q,showSpacer:!1},V.allDayRow(q.id)))]}),cellSlots:[0,15,30,45],classes:{body:"w-full",header:"w-full"},columns:[Y,...U],"data-testid":"resource-day",gridType:"hour",children:w1("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[ZP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),X.map((q)=>ZP(d0,{className:"min-w-20 flex-1",resource:q},V.listKey("resource-cell",q.id)))]})})};import{jsx as g1}from"react/jsx-runtime";var k1=()=>{let{orientation:P}=B();if(P==="vertical")return g1(m1,{});return g1(b1,{})};import{useMemo as c9}from"react";import{jsx as L2,jsxs as h1}from"react/jsx-runtime";var C1=()=>{let{currentDate:P,t:$}=B(),Z=c9(()=>{return U5(P)},[P]);return h1(pP,{days:Z,children:[L2("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:L2("div",{className:"text-sm",children:$("resources")})}),Z.map((J,X)=>{let Q=`resource-month-header-${J.toISOString()}`;return h1(E,{className:"w-20 border-b border-r shrink-0 flex items-center justify-center flex-col",delay:X*0.05,transitionKey:V.listKey(Q,"motion"),children:[L2("div",{className:"text-xs font-medium",children:J.format("D")}),L2("div",{className:"text-xs text-muted-foreground",children:J.format("ddd")})]},V.listKey(Q,"animated"))})]})};import{jsx as kP,jsxs as E1}from"react/jsx-runtime";var D1=()=>{let{currentDate:P,getVisibleResources:$}=B(),Z=$(),J=P.startOf("month"),X=Array.from({length:P.daysInMonth()},(U,q)=>J.add(q,"day")),Q={id:V.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)=>E1("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:[kP("span",{children:U.format("D")}),kP("span",{children:U.format("ddd")})]})},Y=Z.map((U)=>({id:V.col.resource("month",U.id),day:void 0,resourceId:U.id,days:X,gridType:"day"}));return kP(w0,{classes:{header:"w-full",body:"w-full"},columns:[Q,...Y],"data-testid":"resource-month-vertical-grid",children:E1("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[kP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),Z.map((U)=>kP(d0,{className:"min-w-20 flex-1",resource:U},V.listKey("resource-cell",U.id)))]})})};import{jsx as j1}from"react/jsx-runtime";var x1=()=>{let{orientation:P}=B();if(P==="vertical")return j1(D1,{});return j1(C1,{})};import{useMemo as a2}from"react";function a0(){let{currentDate:P,firstDayOfWeek:$,getVisibleResources:Z,weekViewGranularity:J,businessHours:X,hideNonBusinessHours:Q,hiddenDays:Y}=B(),U=J==="hourly",q=Z(),_=a2(()=>U0(P,$),[P,$]),L=a2(()=>Y?_.filter((W)=>!Y.has(W.day())):_,[_,Y]),K=a2(()=>q.flatMap((W)=>W.businessHours?[W.businessHours]:[]),[q]);return{isHourly:U,resources:q,weekDays:_,visibleDays:L,currentDate:P,businessHours:X,hideNonBusinessHours:Q,resourceBusinessHours:K}}import{jsx as f2,jsxs as o9}from"react/jsx-runtime";var v1=({days:P})=>{let{weekViewGranularity:$}=B(),Z=$==="hourly";return f2("div",{className:"flex h-12",children:P.map((J,X)=>{let Q=t(J),Y=V.header.week.day(J);return f2(E,{className:A("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":V.header.resource.weekDay,delay:X*0.05,transitionKey:V.listKey(Y,"motion"),children:o9("div",{className:A(Z?"sticky left-1/2":"w-full text-center"),children:[f2("div",{className:"text-sm",children:J.format("ddd")}),f2("div",{className:"text-xs text-muted-foreground",children:J.format("M/D")})]})},V.listKey(Y,"animated"))})})};import{useMemo as l9}from"react";function y1(){let{isHourly:P,weekDays:$,businessHours:Z,hideNonBusinessHours:J,resourceBusinessHours:X}=a0();return{weekHours:l9(()=>{if(!P)return[];return $.map((Y)=>_0({referenceDate:Y,businessHours:Z,hideNonBusinessHours:J,resourceBusinessHours:X}))},[P,$,Z,J,X])}}import{jsx as A2,jsxs as c1}from"react/jsx-runtime";var o1=()=>{let{t:P}=B(),{isHourly:$,weekDays:Z}=a0(),{weekHours:J}=y1();return c1(pP,{classes:{header:A($?"h-24":"h-12","min-w-full"),body:"min-w-full",cell:"min-w-20 flex-1"},days:$?J:Z,gridType:$?"hour":"day",children:[A2("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:A2("div",{className:"text-sm",children:P("resources")})}),c1("div",{className:"flex-1 flex flex-col",children:[A2(v1,{days:Z}),$&&A2(_2,{delayStep:0.005,hours:J.flat(),view:"week"})]})]})};import{useMemo as n1}from"react";import{jsx as N2,jsxs as l1}from"react/jsx-runtime";var i1=({columns:P})=>{let{currentDate:$}=B();return l1("div",{className:"flex h-12",children:[N2("div",{className:"shrink-0 w-16 border-r border-b z-20 bg-background sticky left-0",children:N2("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=V.header.week.hour(X,Z.resourceId??"");return l1(E,{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"),"data-testid":V.header.resource.timeLabel("week",X.format("HH")),delay:J*0.05,transitionKey:V.listKey(Q,"motion"),children:[N2("div",{className:"text-sm",children:X.format("ddd")}),N2("div",{className:"text-xs text-muted-foreground",children:X.format("M/D")})]},V.listKey(Q,"animated"))})]})};import{jsx as W2,jsxs as u1}from"react/jsx-runtime";var d1=({resources:P})=>{let{weekViewGranularity:$,t:Z,currentDate:J}=B(),X=$==="hourly";return u1("div",{className:"flex h-12",children:[W2("div",{className:"shrink-0 w-16 border-r z-20 bg-background sticky left-0",children:u1("span",{className:A("px-2 h-full w-full flex flex-col justify-center text-xs text-muted-foreground text-center",X?"justify-end":"justify-center border-b"),children:[Z("week"),!X&&W2("span",{className:"font-medium text-foreground",children:J.week()})]})}),P.map((Q)=>{return W2(d0,{className:"min-w-20 flex-1 border-b",resource:Q,children:W2("div",{className:A("sticky text-sm font-medium truncate",X?"left-1/4":"left-1"),children:Q.title})},V.listKey("resource-cell",Q.id))})]})};import{useCallback as i9,useMemo as F2}from"react";function r1(){let{isHourly:P,resources:$,weekDays:Z,visibleDays:J,currentDate:X,businessHours:Q,hideNonBusinessHours:Y,resourceBusinessHours:U}=a0(),q=i9((O)=>{return _0({referenceDate:O,businessHours:Q,hideNonBusinessHours:Y,allDates:Z,resourceBusinessHours:U})},[Q,Y,Z,U]),_=F2(()=>q(X),[X,q]),L=F2(()=>$.flatMap((O)=>J.map((f)=>({id:V.col.day(f,O.id),className:"min-w-20 flex-1",resourceId:O.id,resource:O,day:f,days:q(f),gridType:"hour"}))),[$,J,q]),K=F2(()=>$.map((O)=>({id:V.col.resource("week",O.id),className:"min-w-20 flex-1",day:void 0,resourceId:O.id,resource:O,days:Z,gridType:"day"})),[$,Z]),W=F2(()=>{if(P)return L;return K},[P,L,K]);return{hours:_,columns:W}}import{jsx as E0,jsxs as t2,Fragment as u9}from"react/jsx-runtime";var a1=()=>{let{isHourly:P,resources:$,weekDays:Z,visibleDays:J}=a0(),{hours:X,columns:Q}=r1(),Y=n1(()=>({id:P?V.col.time:V.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)=>E0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:P?E0(b0,{date:q}):t2(u9,{children:[E0("span",{children:q.format("ddd")}),E0("span",{children:q.format("M/D")})]})})}),[X,P,Z]),U=n1(()=>{if(!P)return;return t2("div",{className:"flex w-full",children:[E0(VP,{}),$.map((q)=>E0(r0,{classes:{cell:"min-w-20 flex-1 border-r!"},days:J,resource:q,showSpacer:!1},V.allDayRow(q.id)))]})},[P,$,J]);return E0(w0,{allDayRow:U,classes:{header:P?"h-24":"h-12"},columns:[Y,...Q],"data-testid":"resource-week",gridType:P?"hour":"day",children:t2("div",{className:"flex-1 flex flex-col",children:[E0(d1,{resources:$,visibleDays:J}),P&&E0(i1,{columns:Q})]})})};import{jsx as t1}from"react/jsx-runtime";var s1=()=>{let{orientation:P}=B();if(P==="vertical")return t1(a1,{});return t1(o1,{})};import{jsx as t0,jsxs as d9}from"react/jsx-runtime";var e1=()=>{let{view:P}=B();return d9("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-resource-calendar",children:[t0(TP,{className:"p-1"}),t0(iP,{children:t0(E,{className:"w-full h-[calc(100%-3.5rem)] @container/calendar-body",direction:"horizontal",transitionKey:P,children:t0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:t0(x1,{},"month"),week:t0(s1,{},"week"),day:t0(k1,{},"day")}[P]})})}),t0($2,{})]})};import{jsx as P4}from"react/jsx-runtime";var r9=({events:P=[],resources:$=[],firstDayOfWeek:Z="sunday",initialView:J="month",initialDate:X,disableDragAndDrop:Q=!1,dayMaxEvents:Y=YP,timeFormat:U="12-hour",eventSpacing:q=j0,eventHeight:_=R0,hiddenDays:L,...K})=>{return P4(L5,{dayMaxEvents:Y,disableDragAndDrop:Q,eventHeight:_,eventSpacing:q,events:EP(P),firstDayOfWeek:x0[Z],hiddenDays:CP(L),initialDate:qP(X),initialView:J,resources:$,timeFormat:U,...K,children:P4(e1,{})})};export{w4 as useIlamyCalendarContext,GP as isRecurringEvent,B2 as generateRecurringEvents,M2 as defaultTranslations,LU as RRule,r9 as IlamyResourceCalendar,j9 as IlamyCalendar};
5
5
 
6
- //# debugId=C58777EEC140131364756E2164756E21
7
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2luZGV4LnRzIiwgInNyYy9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbi50c3giLCAic3JjL2xpYi91dGlscy9pbmRleC50cyIsICJzcmMvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnLnRzIiwgInNyYy9saWIvY29uc3RhbnRzLnRzIiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2J1dHRvbi50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvZGlhbG9nLnRzeCIsICJzcmMvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQudHMiLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dC50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9jb250ZXh0LnRzIiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICJzcmMvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZS50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXIudHMiLCAic3JjL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdC50cyIsICJzcmMvbGliL3V0aWxzL2RhdGUtdXRpbHMudHMiLCAic3JjL2xpYi91dGlscy9ldmVudC11dGlscy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZy50c3giLCAic3JjL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9kbmQtdXRpbHMudHMiLCAic3JjL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9ldmVudC1kcmFnLW92ZXJsYXkudHN4IiwgInNyYy9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvY2hlY2tib3gudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYWxlbmRhci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvcG9wb3Zlci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvaW5wdXQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2xhYmVsLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYS50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvdGltZS1waWNrZXIudHN4IiwgInNyYy9ob29rcy91c2UtYXV0b2NvbXBsZXRlLXRpbWVwaWNrZXIudHMiLCAic3JjL2xpYi91dGlscy9rZXlzLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3Vycy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvZXZlbnQtZm9ybS11dGlscy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdG9yL3JlY3VycmVuY2UtZWRpdG9yLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYXJkLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zZWxlY3QudHN4IiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucy50cyIsICJzcmMvaG9va3MvdXNlLWVmZmVjdGl2ZS1idXNpbmVzcy1ob3Vycy50cyIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nLnRzeCIsICJzcmMvY29tcG9uZW50cy9oZWFkZXIvYmFzZS1oZWFkZXIudHN4IiwgInNyYy9saWIvdXRpbHMvZXhwb3J0LWljYWwudHMiLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3RpdGxlLWNvbnRlbnQudHN4IiwgInNyYy9jb21wb25lbnRzL2hlYWRlci92aWV3LWNvbnRyb2xzLnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdy50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1yb3cudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWRXZWVrRXZlbnRzLnRzIiwgInNyYy9saWIvdXRpbHMvcG9zaXRpb24td2Vlay1ldmVudHMudHMiLCAic3JjL2NvbXBvbmVudHMvZ3JpZC1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9kYXktbnVtYmVyLnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZXZlbnRzLWRpYWxvZy50c3giLCAic3JjL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudC50c3giLCAic3JjL2NvbXBvbmVudHMvZHJvcHBhYmxlLWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL3Jlc291cmNlLWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQtZXZlbnRzLWxheWVyLnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL2hvdXItbGFiZWwvaG91ci1sYWJlbC50c3giLCAic3JjL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkLWNvbC50c3giLCAic3JjL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkLWV2ZW50cy1sYXllci50c3giLCAic3JjL2NvbXBvbmVudHMvY3VycmVudC10aW1lLWluZGljYXRvci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZERheUV2ZW50cy50cyIsICJzcmMvbGliL3V0aWxzL3Bvc2l0aW9uLWRheS1ldmVudHMudHMiLCAic3JjL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkLWhlYWRlci1jb250YWluZXIudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMudHMiLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvZGF5LXZpZXcudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvbW9udGgtdmlldy50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1oZWFkZXItY29udGFpbmVyLnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L21vbnRoLWhlYWRlci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstdmlldy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMveWVhci12aWV3L3llYXItdmlldy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvcHJvdmlkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LWNhbGVuZGFyLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy90aW1lLWhlYWRlci1yb3cudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L3Jlc291cmNlLWRheS1ob3Jpem9udGFsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9yZXNvdXJjZS1kYXktdmVydGljYWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2luZGV4LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L3Jlc291cmNlLW1vbnRoLWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvcmVzb3VyY2UtbW9udGgtdmVydGljYWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvaW5kZXgudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy91c2UtcmVzb3VyY2Utd2Vlay12aWV3LWRhdGEudHMiLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L2hvcml6b250YWwvcmVzb3VyY2Utd2Vlay1ob3Jpem9udGFsLWRheS1oZWFkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9ob3Jpem9udGFsL3VzZS1yZXNvdXJjZS13ZWVrLWhvcml6b250YWwtZGF0YS50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvaG9yaXpvbnRhbC9yZXNvdXJjZS13ZWVrLWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy92ZXJ0aWNhbC9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvdmVydGljYWwvcmVzb3VyY2Utd2Vlay12ZXJ0aWNhbC1kYXktaGVhZGVyLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvdmVydGljYWwvcmVzb3VyY2Utd2Vlay12ZXJ0aWNhbC1yZXNvdXJjZS1oZWFkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy92ZXJ0aWNhbC91c2UtcmVzb3VyY2Utd2Vlay12ZXJ0aWNhbC1kYXRhLnRzIiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvcmVzb3VyY2UtY2FsZW5kYXItYm9keS50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIudHN4Il0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIi8vIFJlLWV4cG9ydCBycnVsZS5qcyB0eXBlcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB0eXBlIHsgV2Vla2RheSB9IGZyb20gJ3JydWxlJ1xuZXhwb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmV4cG9ydCB0eXBlIHsgRXZlbnRGb3JtUHJvcHMgfSBmcm9tICcuL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtJ1xuZXhwb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50LCBXZWVrRGF5cyB9IGZyb20gJy4vY29tcG9uZW50cy90eXBlcydcbmV4cG9ydCB7IElsYW15Q2FsZW5kYXIgfSBmcm9tICcuL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktY2FsZW5kYXInXG5leHBvcnQgdHlwZSB7XG5cdENlbGxDbGlja0luZm8sXG5cdElsYW15Q2FsZW5kYXJQcm9wcyxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcbn0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbi8vIEV4cG9ydCB0eXBlc1xuZXhwb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICcuL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG4vLyBSUlVMRS1iYXNlZCByZWN1cnJlbmNlIHN5c3RlbVxuZXhwb3J0IHtcblx0Z2VuZXJhdGVSZWN1cnJpbmdFdmVudHMsXG5cdGlzUmVjdXJyaW5nRXZlbnQsXG59IGZyb20gJy4vZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5leHBvcnQgdHlwZSB7IElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BzIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LXJlc291cmNlLWNhbGVuZGFyJ1xuZXhwb3J0IHsgSWxhbXlSZXNvdXJjZUNhbGVuZGFyIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LXJlc291cmNlLWNhbGVuZGFyL2lsYW15LXJlc291cmNlLWNhbGVuZGFyJ1xuLy8gUmVzb3VyY2UgY2FsZW5kYXIgdHlwZXNcbmV4cG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuLy8gUHVibGljIGNhbGVuZGFyIGNvbnRleHQgaG9va3NcbmV4cG9ydCB7XG5cdHR5cGUgVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4sXG5cdHVzZUlsYW15Q2FsZW5kYXJDb250ZXh0LFxufSBmcm9tICcuL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuZXhwb3J0IHsgZGVmYXVsdFRyYW5zbGF0aW9ucyB9IGZyb20gJy4vbGliL3RyYW5zbGF0aW9ucy9kZWZhdWx0J1xuLy8gVHJhbnNsYXRpb24gc3lzdGVtXG5leHBvcnQgdHlwZSB7XG5cdFRyYW5zbGF0aW9uS2V5LFxuXHRUcmFuc2xhdGlvbnMsXG5cdFRyYW5zbGF0b3JGdW5jdGlvbixcbn0gZnJvbSAnLi9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBDYWxlbmRhclZpZXcsIFRpbWVGb3JtYXQgfSBmcm9tICcuL3R5cGVzJ1xuIiwKICAgICJpbXBvcnQge1xuXHRBbmltYXRlUHJlc2VuY2UsXG5cdHR5cGUgSFRNTE1vdGlvblByb3BzLFxuXHRtb3Rpb24sXG5cdHR5cGUgVmFyaWFudHMsXG59IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgQW5pbWF0ZWRTZWN0aW9uUHJvcHNcblx0ZXh0ZW5kcyBPbWl0PEhUTUxNb3Rpb25Qcm9wczwnZGl2Jz4sICdjaGlsZHJlbicgfCAnbGF5b3V0JyB8ICdsYXlvdXRJZCc+IHtcblx0Y2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxuXHR0cmFuc2l0aW9uS2V5OiBzdHJpbmdcblx0ZGVsYXk/OiBudW1iZXJcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGRpcmVjdGlvbj86ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCdcblx0bGF5b3V0PzogYm9vbGVhbiB8ICdwb3NpdGlvbicgfCAnc2l6ZScgfCAncHJlc2VydmUtYXNwZWN0J1xuXHRsYXlvdXRJZD86IHN0cmluZ1xuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG59XG5cbmNvbnN0IHZhcmlhbnRzOiBWYXJpYW50cyA9IHtcblx0aGlkZGVuOiAoeyBkaXJlY3Rpb24gfTogeyBkaXJlY3Rpb246ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgfSkgPT4gKHtcblx0XHRvcGFjaXR5OiAwLFxuXHRcdHg6IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gMTAgOiAwLFxuXHRcdHk6IGRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/IC0xMCA6IDAsXG5cdH0pLFxuXHR2aXNpYmxlOiAoeyBkZWxheSB9OiB7IGRlbGF5OiBudW1iZXIgfSkgPT4gKHtcblx0XHRvcGFjaXR5OiAxLFxuXHRcdHg6IDAsXG5cdFx0eTogMCxcblx0XHR0cmFuc2l0aW9uOiB7IGR1cmF0aW9uOiAwLjIsIGVhc2U6IFswLjQsIDAsIDAuMiwgMV0sIGRlbGF5IH0sXG5cdH0pLFxuXHRleGl0OiAoeyBkaXJlY3Rpb24gfTogeyBkaXJlY3Rpb246ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgfSkgPT4gKHtcblx0XHRvcGFjaXR5OiAwLFxuXHRcdHg6IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gLTEwIDogMCxcblx0XHR5OiBkaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcgPyAtMTAgOiAwLFxuXHRcdHRyYW5zaXRpb246IHsgZHVyYXRpb246IDAuMTUgfSxcblx0fSksXG59XG5cbmV4cG9ydCBjb25zdCBBbmltYXRlZFNlY3Rpb246IFJlYWN0LkZDPEFuaW1hdGVkU2VjdGlvblByb3BzPiA9ICh7XG5cdGNoaWxkcmVuLFxuXHR0cmFuc2l0aW9uS2V5LFxuXHRkZWxheSA9IDAsXG5cdGNsYXNzTmFtZSxcblx0ZGlyZWN0aW9uID0gJ3ZlcnRpY2FsJyxcblx0bGF5b3V0LFxuXHRsYXlvdXRJZCxcblx0J2RhdGEtdGVzdGlkJzogdGVzdElkLFxuXHRyZWYsXG5cdC4uLnByb3BzXG59KSA9PiAoXG5cdDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cblx0XHQ8bW90aW9uLmRpdlxuXHRcdFx0YW5pbWF0ZT1cInZpc2libGVcIlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignaW5saW5lLWJsb2NrIHctZnVsbCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRjdXN0b209e3sgZGVsYXksIGRpcmVjdGlvbiB9fVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e3Rlc3RJZH1cblx0XHRcdGV4aXQ9XCJleGl0XCJcblx0XHRcdGluaXRpYWw9XCJoaWRkZW5cIlxuXHRcdFx0a2V5PXt0cmFuc2l0aW9uS2V5fVxuXHRcdFx0bGF5b3V0PXtsYXlvdXR9XG5cdFx0XHRsYXlvdXRJZD17bGF5b3V0SWR9XG5cdFx0XHRyZWY9e3JlZn1cblx0XHRcdHZhcmlhbnRzPXt2YXJpYW50c31cblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9tb3Rpb24uZGl2PlxuXHQ8L0FuaW1hdGVQcmVzZW5jZT5cbilcblxuQW5pbWF0ZWRTZWN0aW9uLmRpc3BsYXlOYW1lID0gJ0FuaW1hdGVkU2VjdGlvbidcbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDbGFzc1ZhbHVlIH0gZnJvbSAnY2xzeCdcbmltcG9ydCB7IGNsc3ggfSBmcm9tICdjbHN4J1xuaW1wb3J0IHsgdHdNZXJnZSB9IGZyb20gJ3RhaWx3aW5kLW1lcmdlJ1xuaW1wb3J0IHR5cGUgeyBXZWVrRGF5cyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBXRUVLX0RBWVNfTlVNQkVSX01BUCB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcblxuZXhwb3J0IGZ1bmN0aW9uIGNuKC4uLmlucHV0czogQ2xhc3NWYWx1ZVtdKSB7XG5cdHJldHVybiB0d01lcmdlKGNsc3goaW5wdXRzKSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvcHRpb25hbCBXZWVrRGF5c1tdIGxpc3QgaW50byBhIFNldDxudW1iZXI+IG9mIGRheSBpbmRpY2VzXG4gKiAoMCA9IFN1bmRheSwgMSA9IE1vbmRheSwgLi4uKSwgb3IgdW5kZWZpbmVkIGlmIHRoZSBsaXN0IGlzIGVtcHR5LlxuICovXG5leHBvcnQgY29uc3QgdG9IaWRkZW5EYXlzU2V0ID0gKFxuXHRoaWRkZW5EYXlzPzogV2Vla0RheXNbXVxuKTogU2V0PG51bWJlcj4gfCB1bmRlZmluZWQgPT4ge1xuXHRpZiAoIWhpZGRlbkRheXMgfHwgaGlkZGVuRGF5cy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWRcblx0cmV0dXJuIG5ldyBTZXQoaGlkZGVuRGF5cy5tYXAoKGRheSkgPT4gV0VFS19EQVlTX05VTUJFUl9NQVBbZGF5XSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYWZlRGF0ZShcblx0ZGF0ZTogRGF5anMgfCBEYXRlIHwgc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBEYXlqcyB8IHVuZGVmaW5lZCB7XG5cdGlmIChkYXRlID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkXG5cdH1cblx0aWYgKGRheWpzLmlzRGF5anMoZGF0ZSkpIHtcblx0XHRyZXR1cm4gZGF0ZVxuXHR9XG5cdGNvbnN0IHBhcnNlZERhdGUgPSBkYXlqcyhkYXRlKVxuXHRyZXR1cm4gcGFyc2VkRGF0ZS5pc1ZhbGlkKCkgPyBwYXJzZWREYXRlIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBjb25zdCBvbWl0S2V5cyA9IDxUIGV4dGVuZHMgb2JqZWN0LCBLIGV4dGVuZHMga2V5b2YgVD4oXG5cdG9iajogVCxcblx0a2V5czogS1tdXG4pOiBPbWl0PFQsIEs+ID0+IHtcblx0Y29uc3QgcmVzdWx0ID0geyAuLi5vYmogfVxuXHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0ZGVsZXRlIHJlc3VsdFtrZXldXG5cdH1cblx0cmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgY2FsZW5kYXIgZXZlbnRzIGZyb20gcHVibGljLWZhY2luZyBmb3JtYXQgdG8gaW50ZXJuYWwgZm9ybWF0LlxuICogQ29udmVydHMgZmxleGlibGUgZGF0ZSB0eXBlcyAoZGF5anMsIERhdGUsIHN0cmluZykgdG8gc3RyaWN0IGRheWpzIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIGV2ZW50cyAtIEFycmF5IG9mIGNhbGVuZGFyIGV2ZW50cyB3aXRoIGZsZXhpYmxlIGRhdGUgdHlwZXNcbiAqIEByZXR1cm5zIE5vcm1hbGl6ZWQgYXJyYXkgb2YgY2FsZW5kYXIgZXZlbnRzIHdpdGggZGF5anMgZGF0ZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVndWxhciBjYWxlbmRhciBldmVudHNcbiAqIGNvbnN0IGV2ZW50cyA9IG5vcm1hbGl6ZUV2ZW50czxJbGFteUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50Pihwcm9wRXZlbnRzKVxuICpcbiAqIC8vIFJlc291cmNlIGNhbGVuZGFyIGV2ZW50c1xuICogY29uc3QgcmVzb3VyY2VFdmVudHMgPSBub3JtYWxpemVFdmVudHM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50Pihwcm9wRXZlbnRzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplRXZlbnRzPFxuXHRUSW5wdXQgZXh0ZW5kcyB7XG5cdFx0c3RhcnQ6IERheWpzIHwgRGF0ZSB8IHN0cmluZ1xuXHRcdGVuZDogRGF5anMgfCBEYXRlIHwgc3RyaW5nXG5cdH0sXG5cdFRPdXRwdXQsXG4+KGV2ZW50czogVElucHV0W10gfCB1bmRlZmluZWQpOiBUT3V0cHV0W10ge1xuXHRpZiAoIWV2ZW50cyB8fCAhZXZlbnRzLmxlbmd0aCkge1xuXHRcdHJldHVybiBbXVxuXHR9XG5cblx0cmV0dXJuIGV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0c3RhcnQ6IGRheWpzLmlzRGF5anMoZXZlbnQuc3RhcnQpID8gZXZlbnQuc3RhcnQgOiBkYXlqcyhldmVudC5zdGFydCksXG5cdFx0XHRlbmQ6IGRheWpzLmlzRGF5anMoZXZlbnQuZW5kKSA/IGV2ZW50LmVuZCA6IGRheWpzKGV2ZW50LmVuZCksXG5cdFx0fSBhcyBUT3V0cHV0XG5cdH0pXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgT3BVbml0VHlwZSBhcyBEYXlqc09wVW5pdFR5cGUsIFBsdWdpbkZ1bmMgfSBmcm9tICdkYXlqcydcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcbmltcG9ydCBpc0JldHdlZW4gZnJvbSAnZGF5anMvcGx1Z2luL2lzQmV0d2Vlbi5qcydcbmltcG9ydCBpc1NhbWVPckFmdGVyIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckFmdGVyLmpzJ1xuaW1wb3J0IGlzU2FtZU9yQmVmb3JlIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckJlZm9yZS5qcydcbmltcG9ydCBsb2NhbGVEYXRhIGZyb20gJ2RheWpzL3BsdWdpbi9sb2NhbGVEYXRhLmpzJ1xuaW1wb3J0IG1pbk1heCBmcm9tICdkYXlqcy9wbHVnaW4vbWluTWF4LmpzJ1xuaW1wb3J0IHRpbWV6b25lIGZyb20gJ2RheWpzL3BsdWdpbi90aW1lem9uZS5qcydcbmltcG9ydCB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yy5qcydcbmltcG9ydCB3ZWVrZGF5IGZyb20gJ2RheWpzL3BsdWdpbi93ZWVrZGF5LmpzJ1xuaW1wb3J0IHdlZWtPZlllYXIgZnJvbSAnZGF5anMvcGx1Z2luL3dlZWtPZlllYXIuanMnXG5cbi8qKlxuICogUGx1Z2luIHRoYXQgZml4ZXMgYSBkYXlqcy10aW1lem9uZSBidWcgd2hlcmUgLnN0YXJ0T2YoKSBhbmQgLmVuZE9mKCkgZHJvcFxuICogdGltZXpvbmUgaW5mbyB3aGVuIHRoZSBzeXN0ZW0ncyBsb2NhbCB0aW1lem9uZSBoYXMgYSBEU1QgdHJhbnNpdGlvbiBuZWFyXG4gKiB0aGUgdGFyZ2V0IGRhdGUuIEFmdGVyIGVhY2ggc3RhcnRPZi9lbmRPZiBjYWxsLCBpZiB0aGUgVVRDIG9mZnNldCBoYXNcbiAqIGRyaWZ0ZWQgZnJvbSB3aGF0IHRoZSB0aW1lem9uZSBleHBlY3RzLCByZS1hcHBseSB0aGUgdGltZXpvbmUgd2l0aFxuICoga2VlcExvY2FsVGltZT10cnVlIHRvIHJlc3RvcmUgdGhlIGNvcnJlY3Qgb2Zmc2V0LlxuICovXG5pbnRlcmZhY2UgRGF5anNJbnRlcm5hbCBleHRlbmRzIGRheWpzLkRheWpzIHtcblx0JHg6IHsgJHRpbWV6b25lPzogc3RyaW5nIH1cbn1cblxubGV0IGRlZmF1bHRUaW1lem9uZTogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbmNvbnN0IGZpeFRpbWV6b25lT2Zmc2V0OiBQbHVnaW5GdW5jID0gKF9vcHRpb24sIGRheWpzQ2xhc3MsIGRheWpzRmFjdG9yeSkgPT4ge1xuXHRjb25zdCBwcm90byA9IGRheWpzQ2xhc3MucHJvdG90eXBlXG5cblx0Ly8gSW50ZXJjZXB0IHNldERlZmF1bHQgdG8gdHJhY2sgdGhlIGNvbmZpZ3VyZWQgdGltZXpvbmVcblx0Y29uc3Qgb3JpZ2luYWxTZXREZWZhdWx0ID0gZGF5anNGYWN0b3J5LnR6LnNldERlZmF1bHRcblx0ZGF5anNGYWN0b3J5LnR6LnNldERlZmF1bHQgPSAodGltZXpvbmU/OiBzdHJpbmcpID0+IHtcblx0XHRkZWZhdWx0VGltZXpvbmUgPSB0aW1lem9uZVxuXHRcdHJldHVybiBvcmlnaW5hbFNldERlZmF1bHQodGltZXpvbmUpXG5cdH1cblxuXHR0eXBlIFN0YXJ0T2ZGbiA9ICh1bml0OiBEYXlqc09wVW5pdFR5cGUsIF9zdGFydE9mPzogYm9vbGVhbikgPT4gZGF5anMuRGF5anNcblx0Y29uc3Qgb3JpZ2luYWxTdGFydE9mID0gcHJvdG8uc3RhcnRPZiBhcyBTdGFydE9mRm5cblx0Y29uc3Qgb3JpZ2luYWxFbmRPZiA9IHByb3RvLmVuZE9mXG5cblx0ZnVuY3Rpb24gcmVzdG9yZVRpbWV6b25lKFxuXHRcdGluc3RhbmNlOiBkYXlqcy5EYXlqcyxcblx0XHRyZXN1bHQ6IGRheWpzLkRheWpzXG5cdCk6IGRheWpzLkRheWpzIHtcblx0XHRjb25zdCB0eiA9IChpbnN0YW5jZSBhcyBEYXlqc0ludGVybmFsKS4keD8uJHRpbWV6b25lIHx8IGRlZmF1bHRUaW1lem9uZVxuXHRcdGlmICghdHopIHJldHVybiByZXN1bHRcblxuXHRcdGNvbnN0IGV4cGVjdGVkT2Zmc2V0ID0gZGF5anNGYWN0b3J5XG5cdFx0XHQudHoocmVzdWx0LmZvcm1hdCgnWVlZWS1NTS1ERFRISDptbTpzcycpLCB0eilcblx0XHRcdC51dGNPZmZzZXQoKVxuXHRcdGlmIChyZXN1bHQudXRjT2Zmc2V0KCkgIT09IGV4cGVjdGVkT2Zmc2V0KSB7XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnR6KHR6LCB0cnVlKVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0XG5cdH1cblxuXHQvLyBkYXlqcydzIGVuZE9mIGNhbGxzIHN0YXJ0T2YodW5pdCwgZmFsc2UpIGludGVybmFsbHkg4oCUIHRoZSBzZWNvbmQgYXJnXG5cdC8vIChfc3RhcnRPZikgY29udHJvbHMgc3RhcnQtdnMtZW5kIGJlaGF2aW9yLiBXZSBtdXN0IGZvcndhcmQgaXQuXG5cdHByb3RvLnN0YXJ0T2YgPSBmdW5jdGlvbiAodW5pdDogRGF5anNPcFVuaXRUeXBlLCBfc3RhcnRPZj86IGJvb2xlYW4pIHtcblx0XHRjb25zdCByZXN1bHQgPSBvcmlnaW5hbFN0YXJ0T2YuY2FsbCh0aGlzLCB1bml0LCBfc3RhcnRPZilcblx0XHRyZXR1cm4gcmVzdG9yZVRpbWV6b25lKHRoaXMsIHJlc3VsdClcblx0fVxuXG5cdC8vIGVuZE9mIGRlbGVnYXRlcyB0byBzdGFydE9mKHVuaXQsIGZhbHNlKSwgc28gdGhlIHBhdGNoZWQgc3RhcnRPZiBoYW5kbGVzIGl0XG5cdHByb3RvLmVuZE9mID0gb3JpZ2luYWxFbmRPZlxufVxuXG4vLyBFeHRlbmQgZGF5anMgd2l0aCBwbHVnaW5zXG5kYXlqcy5leHRlbmQod2Vla2RheSlcbmRheWpzLmV4dGVuZCh3ZWVrT2ZZZWFyKVxuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQWZ0ZXIpXG5kYXlqcy5leHRlbmQoaXNTYW1lT3JCZWZvcmUpXG5kYXlqcy5leHRlbmQoaXNCZXR3ZWVuKVxuZGF5anMuZXh0ZW5kKG1pbk1heClcbmRheWpzLmV4dGVuZCh0aW1lem9uZSlcbmRheWpzLmV4dGVuZCh1dGMpXG5kYXlqcy5leHRlbmQobG9jYWxlRGF0YSlcbmRheWpzLmV4dGVuZChmaXhUaW1lem9uZU9mZnNldClcblxuLy8gQ3VzdG9tIGRheWpzIGNvbnN0cnVjdG9yIHRoYXQgYXV0b21hdGljYWxseSB1c2VzIC50eigpIGZvciBhbGwgaW5zdGFuY2VzLlxuLy8gVGhpcyBlbnN1cmVzIHRoYXQgZGF5anMoKSBjYWxscyB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZSBob25vciB0aGUgZGVmYXVsdFxuLy8gdGltZXpvbmUgc2V0IHZpYSBkYXlqcy50ei5zZXREZWZhdWx0KCkuXG5jb25zdCB0aW1lem9uZUF3YXJlRGF5anMgPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG5cdHJldHVybiAoZGF5anMgYXMgdW5rbm93biBhcyB7IHR6OiAoLi4uYTogdW5rbm93bltdKSA9PiBkYXlqcy5EYXlqcyB9KS50eihcblx0XHQuLi5hcmdzXG5cdClcbn1cblxuLy8gQXR0YWNoIGFsbCBzdGF0aWMgbWV0aG9kcyBhbmQgcHJvcGVydGllcyBmcm9tIHRoZSBvcmlnaW5hbCBkYXlqcyB0byBvdXIgd3JhcHBlci5cbi8vIFRoaXMgYWxsb3dzIHRoZSB3cmFwcGVyIHRvIGJlIHVzZWQgYXMgYSBkcm9wLWluIHJlcGxhY2VtZW50LlxuT2JqZWN0LmFzc2lnbih0aW1lem9uZUF3YXJlRGF5anMsIGRheWpzKVxuXG4vLyBFeHBvcnQgdGhlIERheWpzIHR5cGUgc2VwYXJhdGVseSBmb3IgdXNlIGFzIGEgdHlwZSBpbiBvdGhlciBmaWxlcy5cbi8vIEZpbGVzIHNob3VsZCB1c2UgJ2ltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSBcIkAvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnXCInXG5leHBvcnQgdHlwZSB7IERheWpzLCBNYW5pcHVsYXRlVHlwZSwgT3BVbml0VHlwZSB9IGZyb20gJ2RheWpzJ1xuZXhwb3J0IGRlZmF1bHQgdGltZXpvbmVBd2FyZURheWpzIGFzIHR5cGVvZiBkYXlqc1xuIiwKICAgICJpbXBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuXG5leHBvcnQgY29uc3QgR0FQX0JFVFdFRU5fRUxFTUVOVFMgPSAxIC8vIHB4IChnYXAtMSlcbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX0hFSUdIVCA9IDI0IC8vIHB4IChoLTYpXG5leHBvcnQgY29uc3QgRVZFTlRfQkFSX0hFSUdIVCA9IDI0IC8vIHB4IChoLVsyNHB4XSlcbmV4cG9ydCBjb25zdCBEQVlfTUFYX0VWRU5UU19ERUZBVUxUID0gNCAvLyBEZWZhdWx0IG1heCBldmVudHMgcGVyIGRheVxuZXhwb3J0IGNvbnN0IERJU0FCTEVEX0NFTExfQ0xBU1NOQU1FID1cblx0J2JnLXNlY29uZGFyeSB0ZXh0LW11dGVkLWZvcmVncm91bmQgcG9pbnRlci1ldmVudHMtbm9uZSdcblxuZXhwb3J0IGNvbnN0IFdFRUtfREFZU19OVU1CRVJfTUFQOiBSZWNvcmQ8V2Vla0RheXMsIG51bWJlcj4gPSB7XG5cdHN1bmRheTogMCxcblx0bW9uZGF5OiAxLFxuXHR0dWVzZGF5OiAyLFxuXHR3ZWRuZXNkYXk6IDMsXG5cdHRodXJzZGF5OiA0LFxuXHRmcmlkYXk6IDUsXG5cdHNhdHVyZGF5OiA2LFxufVxuXG5leHBvcnQgY29uc3QgREFZX05VTUJFUl9UT19XRUVLX0RBWVM6IFJlY29yZDxudW1iZXIsIFdlZWtEYXlzPiA9IHtcblx0MDogJ3N1bmRheScsXG5cdDE6ICdtb25kYXknLFxuXHQyOiAndHVlc2RheScsXG5cdDM6ICd3ZWRuZXNkYXknLFxuXHQ0OiAndGh1cnNkYXknLFxuXHQ1OiAnZnJpZGF5Jyxcblx0NjogJ3NhdHVyZGF5Jyxcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUge1xuXHREcmFnQ2FuY2VsRXZlbnQsXG5cdERyYWdFbmRFdmVudCxcblx0RHJhZ1N0YXJ0RXZlbnQsXG59IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQge1xuXHREbmRDb250ZXh0LFxuXHRNb3VzZVNlbnNvcixcblx0cG9pbnRlcldpdGhpbixcblx0VG91Y2hTZW5zb3IsXG5cdHVzZVNlbnNvcixcblx0dXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXREaWFsb2cgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgaXNSZWN1cnJpbmdFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBnZXRVcGRhdGVkRXZlbnQgfSBmcm9tICcuL2RuZC11dGlscydcbmltcG9ydCB7IEV2ZW50RHJhZ092ZXJsYXkgfSBmcm9tICcuL2V2ZW50LWRyYWctb3ZlcmxheSdcblxuaW50ZXJmYWNlIENhbGVuZGFyRG5kQ29udGV4dFByb3BzIHtcblx0Y2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5jb25zdCBDTE9TRURfRElBTE9HID0ge1xuXHRpc09wZW46IGZhbHNlLFxuXHRldmVudDogbnVsbCxcblx0dXBkYXRlczogbnVsbCxcbn0gYXMgY29uc3RcblxuZXhwb3J0IGZ1bmN0aW9uIENhbGVuZGFyRG5kQ29udGV4dCh7IGNoaWxkcmVuIH06IENhbGVuZGFyRG5kQ29udGV4dFByb3BzKSB7XG5cdGNvbnN0IGFjdGl2ZUV2ZW50UmVmID0gdXNlUmVmPENhbGVuZGFyRXZlbnQ+KG51bGwpXG5cdGNvbnN0IGRyYWdPdmVybGF5UmVmID0gdXNlUmVmPHtcblx0XHRzZXRBY3RpdmVFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbCkgPT4gdm9pZFxuXHR9PihudWxsKVxuXG5cdGNvbnN0IHsgdXBkYXRlRXZlbnQsIHVwZGF0ZVJlY3VycmluZ0V2ZW50LCBkaXNhYmxlRHJhZ0FuZERyb3AgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0XHR1cGRhdGVFdmVudDogY29udGV4dC51cGRhdGVFdmVudCxcblx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiBjb250ZXh0LnVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wOiBjb250ZXh0LmRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHR9KSlcblxuXHQvLyBTdGF0ZSBmb3IgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZ1xuXHRjb25zdCBbcmVjdXJyaW5nRGlhbG9nLCBzZXRSZWN1cnJpbmdEaWFsb2ddID0gdXNlU3RhdGU8e1xuXHRcdGlzT3BlbjogYm9vbGVhblxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4gfCBudWxsXG5cdH0+KHtcblx0XHRpc09wZW46IGZhbHNlLFxuXHRcdGV2ZW50OiBudWxsLFxuXHRcdHVwZGF0ZXM6IG51bGwsXG5cdH0pXG5cblx0Ly8gQ29uZmlndXJlIHNlbnNvcnMgd2l0aCByZWR1Y2VkIGFjdGl2YXRpb24gY29uc3RyYWludHMgZm9yIGVhc2llciBkcmFnZ2luZ1xuXHRjb25zdCBtb3VzZVNlbnNvciA9IHVzZVNlbnNvcihNb3VzZVNlbnNvciwge1xuXHRcdC8vIFJlcXVpcmUgbWluaW1hbCBtb3ZlbWVudCBiZWZvcmUgYWN0aXZhdGluZ1xuXHRcdGFjdGl2YXRpb25Db25zdHJhaW50OiB7XG5cdFx0XHRkaXN0YW5jZTogMixcblx0XHR9LFxuXHR9KVxuXG5cdGNvbnN0IHRvdWNoU2Vuc29yID0gdXNlU2Vuc29yKFRvdWNoU2Vuc29yLCB7XG5cdFx0Ly8gUmVkdWNlIGRlbGF5IGZvciB0b3VjaCBkZXZpY2VzXG5cdFx0YWN0aXZhdGlvbkNvbnN0cmFpbnQ6IHtcblx0XHRcdGRlbGF5OiAxMDAsXG5cdFx0XHR0b2xlcmFuY2U6IDUsXG5cdFx0fSxcblx0fSlcblxuXHRjb25zdCBzZW5zb3JzID0gdXNlU2Vuc29ycyhtb3VzZVNlbnNvciwgdG91Y2hTZW5zb3IpXG5cblx0Ly8gSGVscGVyIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBldmVudCB1cGRhdGVcblx0Y29uc3QgcGVyZm9ybUV2ZW50VXBkYXRlID0gKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cblx0KSA9PiB7XG5cdFx0aWYgKCFldmVudD8uaWQgfHwgIXVwZGF0ZXMgfHwgT2JqZWN0LmtleXModXBkYXRlcykubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoaXNSZWN1cnJpbmdFdmVudChldmVudCkpIHtcblx0XHRcdC8vIFJlY3VycmluZyBldmVudHM6IHByb21wdCB0aGUgdXNlciB2aWEgZGlhbG9nIGJlZm9yZSBhcHBseWluZy5cblx0XHRcdHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogdHJ1ZSwgZXZlbnQsIHVwZGF0ZXMgfSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0dXBkYXRlRXZlbnQoZXZlbnQuaWQsIHVwZGF0ZXMpXG5cdFx0fVxuXHR9XG5cblx0Ly8gSGFuZGxlIHJlY3VycmluZyBldmVudCBkaWFsb2cgY29uZmlybWF0aW9uXG5cdGNvbnN0IGhhbmRsZVJlY3VycmluZ0V2ZW50Q29uZmlybSA9IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdGlmICghcmVjdXJyaW5nRGlhbG9nLmV2ZW50IHx8ICFyZWN1cnJpbmdEaWFsb2cudXBkYXRlcykge1xuXHRcdFx0c2V0UmVjdXJyaW5nRGlhbG9nKENMT1NFRF9ESUFMT0cpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQocmVjdXJyaW5nRGlhbG9nLmV2ZW50LCByZWN1cnJpbmdEaWFsb2cudXBkYXRlcywge1xuXHRcdFx0XHRzY29wZSxcblx0XHRcdFx0ZXZlbnREYXRlOiByZWN1cnJpbmdEaWFsb2cuZXZlbnQuc3RhcnQsXG5cdFx0XHR9KVxuXHRcdH0gY2F0Y2gge1xuXHRcdFx0Ly8gU2lsZW50bHkgaGFuZGxlIGVycm9yIGFuZCByZXNldCBkaWFsb2cgc3RhdGVcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0c2V0UmVjdXJyaW5nRGlhbG9nKENMT1NFRF9ESUFMT0cpXG5cdFx0fVxuXHR9XG5cblx0Ly8gSGFuZGxlIHJlY3VycmluZyBldmVudCBkaWFsb2cgY2xvc2Vcblx0Y29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDbG9zZSA9ICgpID0+IHtcblx0XHRzZXRSZWN1cnJpbmdEaWFsb2coQ0xPU0VEX0RJQUxPRylcblx0fVxuXG5cdGNvbnN0IGhhbmRsZURyYWdTdGFydCA9IChldmVudDogRHJhZ1N0YXJ0RXZlbnQpID0+IHtcblx0XHRjb25zdCB7IGFjdGl2ZSB9ID0gZXZlbnRcblxuXHRcdC8vIFNldCB0aGUgYWN0aXZlIGV2ZW50IGJhc2VkIG9uIHRoZSBldmVudCBkYXRhXG5cdFx0aWYgKGFjdGl2ZS5kYXRhLmN1cnJlbnQ/LnR5cGUgPT09ICdjYWxlbmRhci1ldmVudCcpIHtcblx0XHRcdGRyYWdPdmVybGF5UmVmLmN1cnJlbnQ/LnNldEFjdGl2ZUV2ZW50KGFjdGl2ZS5kYXRhLmN1cnJlbnQuZXZlbnQpXG5cdFx0XHRhY3RpdmVFdmVudFJlZi5jdXJyZW50ID0gYWN0aXZlLmRhdGEuY3VycmVudC5ldmVudFxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGhhbmRsZURyYWdFbmQgPSAoZXZlbnQ6IERyYWdFbmRFdmVudCkgPT4ge1xuXHRcdGNvbnN0IHVwZGF0ZWRFdmVudCA9IGdldFVwZGF0ZWRFdmVudChldmVudCwgYWN0aXZlRXZlbnRSZWYuY3VycmVudClcblx0XHRpZiAodXBkYXRlZEV2ZW50KSB7XG5cdFx0XHRjb25zdCB7IGFjdGl2ZUV2ZW50LCB1cGRhdGVzIH0gPSB1cGRhdGVkRXZlbnRcblx0XHRcdHBlcmZvcm1FdmVudFVwZGF0ZShhY3RpdmVFdmVudCwgdXBkYXRlcylcblx0XHR9XG5cblx0XHQvLyBDbGVhciB0aGUgYWN0aXZlIGV2ZW50IHJlZmVyZW5jZVxuXHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBudWxsXG5cdFx0ZHJhZ092ZXJsYXlSZWYuY3VycmVudD8uc2V0QWN0aXZlRXZlbnQobnVsbClcblx0fVxuXG5cdGNvbnN0IGhhbmRsZURyYWdDYW5jZWwgPSAoX2V2ZW50OiBEcmFnQ2FuY2VsRXZlbnQpID0+IHtcblx0XHRhY3RpdmVFdmVudFJlZi5jdXJyZW50ID0gbnVsbFxuXHR9XG5cblx0Ly8gSWYgZHJhZyBhbmQgZHJvcCBpcyBkaXNhYmxlZCwganVzdCByZXR1cm4gY2hpbGRyZW4gd2l0aG91dCBEbmRDb250ZXh0XG5cdGlmIChkaXNhYmxlRHJhZ0FuZERyb3ApIHtcblx0XHRyZXR1cm4gY2hpbGRyZW4gYXMgUmVhY3QuUmVhY3RFbGVtZW50XG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8RG5kQ29udGV4dFxuXHRcdFx0XHRjb2xsaXNpb25EZXRlY3Rpb249e3BvaW50ZXJXaXRoaW59XG5cdFx0XHRcdG9uRHJhZ0NhbmNlbD17aGFuZGxlRHJhZ0NhbmNlbH1cblx0XHRcdFx0b25EcmFnRW5kPXtoYW5kbGVEcmFnRW5kfVxuXHRcdFx0XHRvbkRyYWdTdGFydD17aGFuZGxlRHJhZ1N0YXJ0fVxuXHRcdFx0XHRzZW5zb3JzPXtzZW5zb3JzfVxuXHRcdFx0PlxuXHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdDxFdmVudERyYWdPdmVybGF5IHJlZj17ZHJhZ092ZXJsYXlSZWZ9IC8+XG5cdFx0XHQ8L0RuZENvbnRleHQ+XG5cblx0XHRcdHsvKiBSZWN1cnJpbmcgZXZlbnQgZWRpdCBkaWFsb2cgKi99XG5cdFx0XHQ8UmVjdXJyZW5jZUVkaXREaWFsb2dcblx0XHRcdFx0ZXZlbnRUaXRsZT17cmVjdXJyaW5nRGlhbG9nLmV2ZW50Py50aXRsZSB8fCAnJ31cblx0XHRcdFx0aXNPcGVuPXtyZWN1cnJpbmdEaWFsb2cuaXNPcGVufVxuXHRcdFx0XHRvbkNsb3NlPXtoYW5kbGVSZWN1cnJpbmdFdmVudENsb3NlfVxuXHRcdFx0XHRvbkNvbmZpcm09e2hhbmRsZVJlY3VycmluZ0V2ZW50Q29uZmlybX1cblx0XHRcdFx0b3BlcmF0aW9uVHlwZT1cImVkaXRcIlxuXHRcdFx0Lz5cblx0XHQ8Lz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBTbG90IH0gZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXNsb3QnXG5pbXBvcnQgdHlwZSB7IFZhcmlhbnRQcm9wcyB9IGZyb20gJ2NsYXNzLXZhcmlhbmNlLWF1dGhvcml0eSdcbmltcG9ydCB7IGN2YSB9IGZyb20gJ2NsYXNzLXZhcmlhbmNlLWF1dGhvcml0eSdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IGJ1dHRvblZhcmlhbnRzID0gY3ZhKFxuXHRcImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1hbGwgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTQgc2hyaW5rLTAgWyZfc3ZnXTpzaHJpbmstMCBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlXCIsXG5cdHtcblx0XHR2YXJpYW50czoge1xuXHRcdFx0dmFyaWFudDoge1xuXHRcdFx0XHRkZWZhdWx0OiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBob3ZlcjpiZy1wcmltYXJ5LzkwJyxcblx0XHRcdFx0ZGVzdHJ1Y3RpdmU6XG5cdFx0XHRcdFx0J2JnLWRlc3RydWN0aXZlIHRleHQtd2hpdGUgaG92ZXI6YmctZGVzdHJ1Y3RpdmUvOTAgZm9jdXMtdmlzaWJsZTpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6Zm9jdXMtdmlzaWJsZTpyaW5nLWRlc3RydWN0aXZlLzQwIGRhcms6YmctZGVzdHJ1Y3RpdmUvNjAnLFxuXHRcdFx0XHRvdXRsaW5lOlxuXHRcdFx0XHRcdCdib3JkZXIgYmctYmFja2dyb3VuZCBzaGFkb3cteHMgaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZGFyazpiZy1pbnB1dC8zMCBkYXJrOmJvcmRlci1pbnB1dCBkYXJrOmhvdmVyOmJnLWlucHV0LzUwJyxcblx0XHRcdFx0c2Vjb25kYXJ5OlxuXHRcdFx0XHRcdCdiZy1zZWNvbmRhcnkgdGV4dC1zZWNvbmRhcnktZm9yZWdyb3VuZCBob3ZlcjpiZy1zZWNvbmRhcnkvODAnLFxuXHRcdFx0XHRnaG9zdDpcblx0XHRcdFx0XHQnaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZGFyazpob3ZlcjpiZy1hY2NlbnQvNTAnLFxuXHRcdFx0XHRsaW5rOiAndGV4dC1wcmltYXJ5IHVuZGVybGluZS1vZmZzZXQtNCBob3Zlcjp1bmRlcmxpbmUnLFxuXHRcdFx0fSxcblx0XHRcdHNpemU6IHtcblx0XHRcdFx0ZGVmYXVsdDogJ2gtOSBweC00IHB5LTIgaGFzLVs+c3ZnXTpweC0zJyxcblx0XHRcdFx0c206ICdoLTggcm91bmRlZC1tZCBnYXAtMS41IHB4LTMgaGFzLVs+c3ZnXTpweC0yLjUnLFxuXHRcdFx0XHRsZzogJ2gtMTAgcm91bmRlZC1tZCBweC02IGhhcy1bPnN2Z106cHgtNCcsXG5cdFx0XHRcdGljb246ICdzaXplLTknLFxuXHRcdFx0XHQnaWNvbi1zbSc6ICdzaXplLTgnLFxuXHRcdFx0XHQnaWNvbi1sZyc6ICdzaXplLTEwJyxcblx0XHRcdH0sXG5cdFx0fSxcblx0XHRkZWZhdWx0VmFyaWFudHM6IHtcblx0XHRcdHZhcmlhbnQ6ICdkZWZhdWx0Jyxcblx0XHRcdHNpemU6ICdkZWZhdWx0Jyxcblx0XHR9LFxuXHR9XG4pXG5cbmZ1bmN0aW9uIEJ1dHRvbih7XG5cdGNsYXNzTmFtZSxcblx0dmFyaWFudCxcblx0c2l6ZSxcblx0YXNDaGlsZCA9IGZhbHNlLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2J1dHRvbic+ICZcblx0VmFyaWFudFByb3BzPHR5cGVvZiBidXR0b25WYXJpYW50cz4gJiB7XG5cdFx0YXNDaGlsZD86IGJvb2xlYW5cblx0fSkge1xuXHRjb25zdCBDb21wID0gYXNDaGlsZCA/IFNsb3QgOiAnYnV0dG9uJ1xuXG5cdHJldHVybiAoXG5cdFx0PENvbXBcblx0XHRcdGNsYXNzTmFtZT17Y24oYnV0dG9uVmFyaWFudHMoeyB2YXJpYW50LCBzaXplLCBjbGFzc05hbWUgfSkpfVxuXHRcdFx0ZGF0YS1zbG90PVwiYnV0dG9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7IEJ1dHRvbiwgYnV0dG9uVmFyaWFudHMgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBEaWFsb2dQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWRpYWxvZydcbmltcG9ydCB7IFhJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gRGlhbG9nKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuUm9vdCBkYXRhLXNsb3Q9XCJkaWFsb2dcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ1RyaWdnZXIoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5UcmlnZ2VyPikge1xuXHRyZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5UcmlnZ2VyIGRhdGEtc2xvdD1cImRpYWxvZy10cmlnZ2VyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dQb3J0YWwoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Qb3J0YWw+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlBvcnRhbCBkYXRhLXNsb3Q9XCJkaWFsb2ctcG9ydGFsXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dDbG9zZSh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLkNsb3NlPikge1xuXHRyZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5DbG9zZSBkYXRhLXNsb3Q9XCJkaWFsb2ctY2xvc2VcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ092ZXJsYXkoe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLk92ZXJsYXk+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1ByaW1pdGl2ZS5PdmVybGF5XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZml4ZWQgaW5zZXQtMCB6LTUwIGJnLWJsYWNrLzUwJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLW92ZXJsYXlcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gRGlhbG9nQ29udGVudCh7XG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLkNvbnRlbnQ+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1BvcnRhbCBkYXRhLXNsb3Q9XCJkaWFsb2ctcG9ydGFsXCI+XG5cdFx0XHQ8RGlhbG9nT3ZlcmxheSAvPlxuXHRcdFx0PERpYWxvZ1ByaW1pdGl2ZS5Db250ZW50XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2JnLWJhY2tncm91bmQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGZpeGVkIHRvcC1bNTAlXSBsZWZ0LVs1MCVdIHotNTAgZ3JpZCB3LWZ1bGwgbWF4LXctW2NhbGMoMTAwJS0ycmVtKV0gdHJhbnNsYXRlLXgtWy01MCVdIHRyYW5zbGF0ZS15LVstNTAlXSBnYXAtNCByb3VuZGVkLWxnIGJvcmRlciBwLTYgc2hhZG93LWxnIGR1cmF0aW9uLTIwMCBzbTptYXgtdy1sZyBtYXgtaC1bOTAlXScsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy1jb250ZW50XCJcblx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0PlxuXHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdDxEaWFsb2dQcmltaXRpdmUuQ2xvc2UgY2xhc3NOYW1lPVwicmluZy1vZmZzZXQtYmFja2dyb3VuZCBmb2N1czpyaW5nLXJpbmcgZGF0YS1bc3RhdGU9b3Blbl06YmctYWNjZW50IGRhdGEtW3N0YXRlPW9wZW5dOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBhYnNvbHV0ZSB0b3AtNCByaWdodC00IHJvdW5kZWQteHMgb3BhY2l0eS03MCB0cmFuc2l0aW9uLW9wYWNpdHkgaG92ZXI6b3BhY2l0eS0xMDAgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctb2Zmc2V0LTIgZm9jdXM6b3V0bGluZS1oaWRkZW4gZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTRcIj5cblx0XHRcdFx0XHQ8WEljb24gLz5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJzci1vbmx5XCI+Q2xvc2U8L3NwYW4+XG5cdFx0XHRcdDwvRGlhbG9nUHJpbWl0aXZlLkNsb3NlPlxuXHRcdFx0PC9EaWFsb2dQcmltaXRpdmUuQ29udGVudD5cblx0XHQ8L0RpYWxvZ1BvcnRhbD5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dIZWFkZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC1jb2wgZ2FwLTIgdGV4dC1jZW50ZXIgc206dGV4dC1sZWZ0JywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy1oZWFkZXJcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gRGlhbG9nRm9vdGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBmbGV4LWNvbC1yZXZlcnNlIGdhcC0yIHNtOmZsZXgtcm93IHNtOmp1c3RpZnktZW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWZvb3RlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dUaXRsZSh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuVGl0bGU+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1ByaW1pdGl2ZS5UaXRsZVxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1sZyBsZWFkaW5nLW5vbmUgZm9udC1zZW1pYm9sZCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctdGl0bGVcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gRGlhbG9nRGVzY3JpcHRpb24oe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLkRlc2NyaXB0aW9uPikge1xuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2dQcmltaXRpdmUuRGVzY3JpcHRpb25cblx0XHRcdGNsYXNzTmFtZT17Y24oJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXNtJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy1kZXNjcmlwdGlvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQge1xuXHREaWFsb2csXG5cdERpYWxvZ0Nsb3NlLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dEZXNjcmlwdGlvbixcblx0RGlhbG9nRm9vdGVyLFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ092ZXJsYXksXG5cdERpYWxvZ1BvcnRhbCxcblx0RGlhbG9nVGl0bGUsXG5cdERpYWxvZ1RyaWdnZXIsXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldyB9IGZyb20gJ0AvdHlwZXMnXG5cbi8qKlxuICogRnVsbCBpbnRlcm5hbCBjb250ZXh0IHR5cGUgdXNlZCBieSBsaWJyYXJ5IGNvbXBvbmVudHMuXG4gKi9cbmV4cG9ydCB0eXBlIFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZSA9IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZVxuXG4vKipcbiAqIFB1YmxpY2x5IGV4cG9zZWQgY2FsZW5kYXIgY29udGV4dCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuIHtcblx0cmVhZG9ubHkgY3VycmVudERhdGU6IERheWpzXG5cdHJlYWRvbmx5IHZpZXc6IENhbGVuZGFyVmlld1xuXHRyZWFkb25seSBldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRyZWFkb25seSBpc0V2ZW50Rm9ybU9wZW46IGJvb2xlYW5cblx0cmVhZG9ubHkgc2VsZWN0ZWRFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0cmVhZG9ubHkgc2VsZWN0ZWREYXRlOiBEYXlqcyB8IG51bGxcblx0cmVhZG9ubHkgZmlyc3REYXlPZldlZWs6IG51bWJlclxuXHRyZWFkb25seSByZXNvdXJjZXM6IFJlc291cmNlW11cblx0cmVhZG9ubHkgc2V0Q3VycmVudERhdGU6IChkYXRlOiBEYXlqcykgPT4gdm9pZFxuXHRyZWFkb25seSBzZWxlY3REYXRlOiAoZGF0ZTogRGF5anMpID0+IHZvaWRcblx0cmVhZG9ubHkgc2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRyZWFkb25seSBuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHJlYWRvbmx5IHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgdG9kYXk6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgYWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRyZWFkb25seSB1cGRhdGVFdmVudDogKFxuXHRcdGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcixcblx0XHRldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHQpID0+IHZvaWRcblx0cmVhZG9ubHkgZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0cmVhZG9ubHkgb3BlbkV2ZW50Rm9ybTogKGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0cmVhZG9ubHkgY2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgZ2V0RXZlbnRzRm9yUmVzb3VyY2U6IChcblx0XHRyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXJcblx0KSA9PiBDYWxlbmRhckV2ZW50W11cblx0cmVhZG9ubHkgYnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBob29rIHRoYXQgcmV0dXJucyB0aGUgZnVsbCBjb250ZXh0LlxuICogVXNlZCBieSBpbnRlcm5hbCB2aWV3cywgaGVhZGVycywgYW5kIGdyaWQgY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KCk6IFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZVxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0PFQ+KFxuXHRzZWxlY3RvcjogKGNvbnRleHQ6IFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZSkgPT4gVFxuKTogVFxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0PFQ+KFxuXHRzZWxlY3Rvcj86IChjb250ZXh0OiBTbWFydENhbGVuZGFyQ29udGV4dFR5cGUpID0+IFRcbik6IFQgfCBTbWFydENhbGVuZGFyQ29udGV4dFR5cGUge1xuXHRjb25zdCByZXNvdXJjZUNvbnRleHQgPSB1c2VDb250ZXh0KFJlc291cmNlQ2FsZW5kYXJDb250ZXh0KVxuXHRjb25zdCByZWd1bGFyQ29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuXG5cdC8vIEluIHJlZ3VsYXIgY2FsZW5kYXJzLCByZXNvdXJjZS1zcGVjaWZpYyBmaWVsZHMgd2lsbCBiZSB1bmRlZmluZWQuXG5cdGNvbnN0IGNvbnRleHQgPSAocmVzb3VyY2VDb250ZXh0IHx8XG5cdFx0cmVndWxhckNvbnRleHQpIGFzIFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZVxuXG5cdGlmICghY29udGV4dCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdCd1c2VTbWFydENhbGVuZGFyQ29udGV4dCBtdXN0IGJlIHVzZWQgd2l0aGluIGEgQ2FsZW5kYXJQcm92aWRlciBvciBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXInXG5cdFx0KVxuXHR9XG5cblx0cmV0dXJuIHNlbGVjdG9yID8gc2VsZWN0b3IoY29udGV4dCkgOiBjb250ZXh0XG59XG5cbi8qKlxuICogUHVibGljIGhvb2sgZXhwb3J0ZWQgZm9yIGxpYnJhcnkgdXNlcnMuXG4gKiBSZXR1cm5zIGEgbGltaXRlZCBzZXQgb2YgY29tbW9ubHkgdXNlZCBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSWxhbXlDYWxlbmRhckNvbnRleHQoKTogVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4ge1xuXHRjb25zdCBjb250ZXh0ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdHJldHVybiB7XG5cdFx0Y3VycmVudERhdGU6IGNvbnRleHQuY3VycmVudERhdGUsXG5cdFx0dmlldzogY29udGV4dC52aWV3LFxuXHRcdGV2ZW50czogY29udGV4dC5ldmVudHMsXG5cdFx0aXNFdmVudEZvcm1PcGVuOiBjb250ZXh0LmlzRXZlbnRGb3JtT3Blbixcblx0XHRzZWxlY3RlZEV2ZW50OiBjb250ZXh0LnNlbGVjdGVkRXZlbnQsXG5cdFx0c2VsZWN0ZWREYXRlOiBjb250ZXh0LnNlbGVjdGVkRGF0ZSxcblx0XHRmaXJzdERheU9mV2VlazogY29udGV4dC5maXJzdERheU9mV2Vlayxcblx0XHRyZXNvdXJjZXM6IGNvbnRleHQucmVzb3VyY2VzIHx8IFtdLFxuXHRcdHNldEN1cnJlbnREYXRlOiBjb250ZXh0LnNldEN1cnJlbnREYXRlLFxuXHRcdHNlbGVjdERhdGU6IGNvbnRleHQuc2VsZWN0RGF0ZSxcblx0XHRzZXRWaWV3OiBjb250ZXh0LnNldFZpZXcsXG5cdFx0bmV4dFBlcmlvZDogY29udGV4dC5uZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2Q6IGNvbnRleHQucHJldlBlcmlvZCxcblx0XHR0b2RheTogY29udGV4dC50b2RheSxcblx0XHRhZGRFdmVudDogY29udGV4dC5hZGRFdmVudCxcblx0XHR1cGRhdGVFdmVudDogY29udGV4dC51cGRhdGVFdmVudCxcblx0XHRkZWxldGVFdmVudDogY29udGV4dC5kZWxldGVFdmVudCxcblx0XHRvcGVuRXZlbnRGb3JtOiBjb250ZXh0Lm9wZW5FdmVudEZvcm0sXG5cdFx0Y2xvc2VFdmVudEZvcm06IGNvbnRleHQuY2xvc2VFdmVudEZvcm0sXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2U6IGNvbnRleHQuZ2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0YnVzaW5lc3NIb3VyczogY29udGV4dC5idXNpbmVzc0hvdXJzLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRXZlbnRGb3JtUHJvcHMgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtJ1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNsYXNzZXNPdmVycmlkZSxcblx0Q2VsbENsaWNrSW5mbyxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdG9yRnVuY3Rpb24gfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldywgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJDb250ZXh0VHlwZSB7XG5cdGN1cnJlbnREYXRlOiBEYXlqc1xuXHR2aWV3OiBDYWxlbmRhclZpZXdcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmF3RXZlbnRzOiBDYWxlbmRhckV2ZW50W10gLy8gVW5wcm9jZXNzZWQgZXZlbnRzIGZvciBleHBvcnRcblx0aXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG5cdHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHNlbGVjdGVkRGF0ZTogRGF5anMgfCBudWxsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIgLy8gMCBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cblx0c2V0Q3VycmVudERhdGU6IChkYXRlOiBEYXlqcykgPT4gdm9pZFxuXHRzZWxlY3REYXRlOiAoZGF0ZTogRGF5anMpID0+IHZvaWRcblx0c2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0dG9kYXk6ICgpID0+IHZvaWRcblx0YWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHR1cGRhdGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnQ6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0ZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdG9wZW5FdmVudEZvcm06IChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG5cdGdldEV2ZW50c0ZvckRhdGVSYW5nZTogKHN0YXJ0RGF0ZTogRGF5anMsIGVuZERhdGU6IERheWpzKSA9PiBDYWxlbmRhckV2ZW50W11cblx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0b25FdmVudENsaWNrOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DZWxsQ2xpY2s6IChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB2b2lkXG5cdGN1cnJlbnRMb2NhbGU/OiBzdHJpbmdcblx0ZGlzYWJsZUNlbGxDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZUV2ZW50Q2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVEcmFnQW5kRHJvcD86IGJvb2xlYW5cblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0ZXZlbnRTcGFjaW5nOiBudW1iZXJcblx0ZXZlbnRIZWlnaHQ6IG51bWJlclxuXHRzdGlja3lWaWV3SGVhZGVyOiBib29sZWFuXG5cdHZpZXdIZWFkZXJDbGFzc05hbWU6IHN0cmluZ1xuXHRoZWFkZXJDb21wb25lbnQ/OiBSZWFjdC5SZWFjdE5vZGUgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjb21wb25lbnRcblx0aGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY2xhc3Ncblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0cmVuZGVyRXZlbnRGb3JtPzogKHByb3BzOiBFdmVudEZvcm1Qcm9wcykgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdC8vIFRyYW5zbGF0aW9uIGZ1bmN0aW9uXG5cdHQ6IFRyYW5zbGF0b3JGdW5jdGlvblxuXHR0aW1lRm9ybWF0OiBUaW1lRm9ybWF0XG5cdGNsYXNzZXNPdmVycmlkZT86IENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yPzogKFxuXHRcdHByb3BzOiBSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzXG5cdCkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdHJlbmRlckhvdXI/OiAoZGF0ZTogRGF5anMpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycz86IGJvb2xlYW5cblx0aGlkZGVuRGF5cz86IFNldDxudW1iZXI+XG59XG5cbi8vIENhbGVuZGFyQ29udGV4dCBpcyBrZXB0IGZvciBpbnRlcm5hbCBQcm92aWRlciB1c2FnZVxuZXhwb3J0IGNvbnN0IENhbGVuZGFyQ29udGV4dDogUmVhY3QuQ29udGV4dDxDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPiA9XG5cdGNyZWF0ZUNvbnRleHQ8Q2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuIiwKICAgICJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyQ29udGV4dFR5cGUgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB0eXBlIHsgQ2VsbENsaWNrSW5mbyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgZXh0ZW5kcyBDYWxlbmRhckNvbnRleHRUeXBlIHtcblx0Ly8gUmVzb3VyY2Utc3BlY2lmaWMgc3RhdGVcblx0cmVzb3VyY2VzOiBSZXNvdXJjZVtdXG5cdHZpc2libGVSZXNvdXJjZXM6IFNldDxzdHJpbmcgfCBudW1iZXI+XG5cblx0Ly8gUmVzb3VyY2UgdXRpbGl0aWVzXG5cdGdldEV2ZW50c0ZvclJlc291cmNlOiAocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBDYWxlbmRhckV2ZW50W11cblx0Z2V0RXZlbnRzRm9yUmVzb3VyY2VzOiAocmVzb3VyY2VJZHM6IChzdHJpbmcgfCBudW1iZXIpW10pID0+IENhbGVuZGFyRXZlbnRbXVxuXHRnZXRSZXNvdXJjZUJ5SWQ6IChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IFJlc291cmNlIHwgdW5kZWZpbmVkXG5cdGdldFZpc2libGVSZXNvdXJjZXM6ICgpID0+IFJlc291cmNlW11cblxuXHQvLyBDcm9zcy1yZXNvdXJjZSBldmVudCB1dGlsaXRpZXNcblx0aXNFdmVudENyb3NzUmVzb3VyY2U6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gYm9vbGVhblxuXHRnZXRFdmVudFJlc291cmNlSWRzOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IChzdHJpbmcgfCBudW1iZXIpW11cblxuXHQvLyBBZGRpdGlvbmFsIHByb3BlcnRpZXMgZnJvbSBjYWxlbmRhciBjb250ZXh0XG5cdG9uRXZlbnRDbGljazogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uQ2VsbENsaWNrOiAoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4gdm9pZFxuXHRyZW5kZXJSZXNvdXJjZT86IChyZXNvdXJjZTogUmVzb3VyY2UpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRvcmllbnRhdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJ1xuXHR3ZWVrVmlld0dyYW51bGFyaXR5OiAnaG91cmx5JyB8ICdkYWlseSdcbn1cblxuLy8gUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgaXMga2VwdCBmb3IgaW50ZXJuYWwgUHJvdmlkZXIgdXNhZ2VcbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dDogUmVhY3QuQ29udGV4dDxcblx0UmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkXG4+ID0gY3JlYXRlQ29udGV4dDxSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJQcm92aWRlclByb3BzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNsYXNzZXNPdmVycmlkZSxcblx0Q2VsbENsaWNrSW5mbyxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJFbmdpbmUgfSBmcm9tICdAL2hvb2tzL3VzZS1jYWxlbmRhci1lbmdpbmUnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBFVkVOVF9CQVJfSEVJR0hUIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnXG5cbmNvbnN0IGdldEV2ZW50UmVzb3VyY2VJZHMgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0+IHtcblx0aWYgKGV2ZW50LnJlc291cmNlSWRzKSB7XG5cdFx0cmV0dXJuIGV2ZW50LnJlc291cmNlSWRzXG5cdH1cblx0aWYgKGV2ZW50LnJlc291cmNlSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBbZXZlbnQucmVzb3VyY2VJZF1cblx0fVxuXHRyZXR1cm4gW11cbn1cblxuaW50ZXJmYWNlIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlclByb3BzIGV4dGVuZHMgQ2FsZW5kYXJQcm92aWRlclByb3BzIHtcblx0ZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG5cdHJlc291cmNlcz86IFJlc291cmNlW11cblx0cmVuZGVyUmVzb3VyY2U/OiAocmVzb3VyY2U6IFJlc291cmNlKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlc092ZXJyaWRlPzogQ2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGVcblx0b3JpZW50YXRpb24/OiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnXG5cdHdlZWtWaWV3R3JhbnVsYXJpdHk/OiAnaG91cmx5JyB8ICdkYWlseSdcblx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3I/OiAoXG5cdFx0cHJvcHM6IFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHNcblx0KSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0cmVuZGVySG91cj86IChkYXRlOiBEYXlqcykgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzPzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxcblx0UmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyUHJvcHNcbj4gPSAoe1xuXHRjaGlsZHJlbixcblx0ZXZlbnRzID0gW10sXG5cdHJlc291cmNlcyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9IDAsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdHJlbmRlckV2ZW50LFxuXHRvbkV2ZW50Q2xpY2ssXG5cdG9uQ2VsbENsaWNrLFxuXHRvblZpZXdDaGFuZ2UsXG5cdG9uRXZlbnRBZGQsXG5cdG9uRXZlbnRVcGRhdGUsXG5cdG9uRXZlbnREZWxldGUsXG5cdG9uRGF0ZUNoYW5nZSxcblx0bG9jYWxlLFxuXHR0aW1lem9uZSxcblx0ZGlzYWJsZUNlbGxDbGljayxcblx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0ZGF5TWF4RXZlbnRzLFxuXHRldmVudFNwYWNpbmcgPSAxLFxuXHRldmVudEhlaWdodCA9IEVWRU5UX0JBUl9IRUlHSFQsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdGhlYWRlckNvbXBvbmVudCxcblx0aGVhZGVyQ2xhc3NOYW1lLFxuXHR0cmFuc2xhdGlvbnMsXG5cdHRyYW5zbGF0b3IsXG5cdHJlbmRlclJlc291cmNlLFxuXHRyZW5kZXJFdmVudEZvcm0sXG5cdGJ1c2luZXNzSG91cnMsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGNsYXNzZXNPdmVycmlkZSxcblx0b3JpZW50YXRpb24gPSAnaG9yaXpvbnRhbCcsXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRyZW5kZXJIb3VyLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3VycyA9IGZhbHNlLFxuXHRoaWRkZW5EYXlzLFxuXHR3ZWVrVmlld0dyYW51bGFyaXR5ID0gJ2hvdXJseScsXG59KSA9PiB7XG5cdC8vIFJlc291cmNlLXNwZWNpZmljIHN0YXRlXG5cdGNvbnN0IFtjdXJyZW50UmVzb3VyY2VzXSA9IHVzZVN0YXRlPFJlc291cmNlW10+KHJlc291cmNlcylcblx0Y29uc3QgW3Zpc2libGVSZXNvdXJjZXMsIHNldFZpc2libGVSZXNvdXJjZXNdID0gdXNlU3RhdGU8XG5cdFx0U2V0PHN0cmluZyB8IG51bWJlcj5cblx0PihuZXcgU2V0KHJlc291cmNlcy5tYXAoKHIpID0+IHIuaWQpKSlcblxuXHQvLyBVc2UgdGhlIGNhbGVuZGFyIGVuZ2luZVxuXHRjb25zdCBjYWxlbmRhckVuZ2luZSA9IHVzZUNhbGVuZGFyRW5naW5lKHtcblx0XHRldmVudHMsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0aW5pdGlhbFZpZXcsXG5cdFx0aW5pdGlhbERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRvbkV2ZW50QWRkLFxuXHRcdG9uRXZlbnRVcGRhdGUsXG5cdFx0b25FdmVudERlbGV0ZSxcblx0XHRvbkRhdGVDaGFuZ2UsXG5cdFx0b25WaWV3Q2hhbmdlOiBvblZpZXdDaGFuZ2UsXG5cdFx0bG9jYWxlLFxuXHRcdHRpbWV6b25lLFxuXHRcdHRyYW5zbGF0aW9ucyxcblx0XHR0cmFuc2xhdG9yLFxuXHR9KVxuXG5cdC8vIFJlc291cmNlIHZpc2liaWxpdHkg4oCUIGFsbCBtdXRhdGlvbnMgZ28gdGhyb3VnaCBhIHNpbmdsZSB1cGRhdGVyLlxuXHRjb25zdCBtdXRhdGVWaXNpYmlsaXR5ID0gdXNlQ2FsbGJhY2soXG5cdFx0KG9wOiAnc2hvdycgfCAnaGlkZScgfCAndG9nZ2xlJywgaWQ6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuXHRcdFx0c2V0VmlzaWJsZVJlc291cmNlcygocHJldikgPT4ge1xuXHRcdFx0XHRjb25zdCBuZXh0ID0gbmV3IFNldChwcmV2KVxuXHRcdFx0XHRpZiAob3AgPT09ICdzaG93JyB8fCAob3AgPT09ICd0b2dnbGUnICYmICFuZXh0LmhhcyhpZCkpKSBuZXh0LmFkZChpZClcblx0XHRcdFx0ZWxzZSBuZXh0LmRlbGV0ZShpZClcblx0XHRcdFx0cmV0dXJuIG5leHRcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbXVxuXHQpXG5cdGNvbnN0IHNob3dSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChpZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBtdXRhdGVWaXNpYmlsaXR5KCdzaG93JywgaWQpLFxuXHRcdFttdXRhdGVWaXNpYmlsaXR5XVxuXHQpXG5cdGNvbnN0IGhpZGVSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChpZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBtdXRhdGVWaXNpYmlsaXR5KCdoaWRlJywgaWQpLFxuXHRcdFttdXRhdGVWaXNpYmlsaXR5XVxuXHQpXG5cdGNvbnN0IHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSA9IHVzZUNhbGxiYWNrKFxuXHRcdChpZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBtdXRhdGVWaXNpYmlsaXR5KCd0b2dnbGUnLCBpZCksXG5cdFx0W211dGF0ZVZpc2liaWxpdHldXG5cdClcblx0Y29uc3Qgc2hvd0FsbFJlc291cmNlcyA9IHVzZUNhbGxiYWNrKFxuXHRcdCgpID0+IHNldFZpc2libGVSZXNvdXJjZXMobmV3IFNldChjdXJyZW50UmVzb3VyY2VzLm1hcCgocikgPT4gci5pZCkpKSxcblx0XHRbY3VycmVudFJlc291cmNlc11cblx0KVxuXHRjb25zdCBoaWRlQWxsUmVzb3VyY2VzID0gdXNlQ2FsbGJhY2soKCkgPT4gc2V0VmlzaWJsZVJlc291cmNlcyhuZXcgU2V0KCkpLCBbXSlcblxuXHQvLyBFdmVudCB1dGlsaXRpZXMg4oCUIGJvdGggZmlsdGVycyBnbyB0aHJvdWdoIGdldEV2ZW50UmVzb3VyY2VJZHMgc28gc2luZ2xlXG5cdC8vIGFuZCBtdWx0aS1yZXNvdXJjZSBldmVudHMgYXJlIGhhbmRsZWQgdW5pZm9ybWx5LlxuXHRjb25zdCBnZXRFdmVudHNGb3JSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBDYWxlbmRhckV2ZW50W10gPT5cblx0XHRcdGNhbGVuZGFyRW5naW5lLmV2ZW50cy5maWx0ZXIoKGUpID0+XG5cdFx0XHRcdGdldEV2ZW50UmVzb3VyY2VJZHMoZSkuaW5jbHVkZXMocmVzb3VyY2VJZClcblx0XHRcdCksXG5cdFx0W2NhbGVuZGFyRW5naW5lLmV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldEV2ZW50c0ZvclJlc291cmNlcyA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkczogKHN0cmluZyB8IG51bWJlcilbXSk6IENhbGVuZGFyRXZlbnRbXSA9PlxuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuZXZlbnRzLmZpbHRlcigoZSkgPT5cblx0XHRcdFx0Z2V0RXZlbnRSZXNvdXJjZUlkcyhlKS5zb21lKChpZCkgPT4gcmVzb3VyY2VJZHMuaW5jbHVkZXMoaWQpKVxuXHRcdFx0KSxcblx0XHRbY2FsZW5kYXJFbmdpbmUuZXZlbnRzXVxuXHQpXG5cblx0Y29uc3QgZ2V0UmVzb3VyY2VCeUlkID0gdXNlQ2FsbGJhY2soXG5cdFx0KHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcik6IFJlc291cmNlIHwgdW5kZWZpbmVkID0+IHtcblx0XHRcdHJldHVybiBjdXJyZW50UmVzb3VyY2VzLmZpbmQoKHJlc291cmNlKSA9PiByZXNvdXJjZS5pZCA9PT0gcmVzb3VyY2VJZClcblx0XHR9LFxuXHRcdFtjdXJyZW50UmVzb3VyY2VzXVxuXHQpXG5cblx0Y29uc3QgZ2V0VmlzaWJsZVJlc291cmNlcyA9IHVzZUNhbGxiYWNrKCgpOiBSZXNvdXJjZVtdID0+IHtcblx0XHRyZXR1cm4gY3VycmVudFJlc291cmNlcy5maWx0ZXIoKHJlc291cmNlKSA9PlxuXHRcdFx0dmlzaWJsZVJlc291cmNlcy5oYXMocmVzb3VyY2UuaWQpXG5cdFx0KVxuXHR9LCBbY3VycmVudFJlc291cmNlcywgdmlzaWJsZVJlc291cmNlc10pXG5cblx0Ly8gQ3Jvc3MtcmVzb3VyY2UgZXZlbnQgdXRpbGl0aWVzXG5cdGNvbnN0IGlzRXZlbnRDcm9zc1Jlc291cmNlID0gdXNlQ2FsbGJhY2soKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG5cdFx0cmV0dXJuIEJvb2xlYW4oZXZlbnQucmVzb3VyY2VJZHMgJiYgZXZlbnQucmVzb3VyY2VJZHMubGVuZ3RoID4gMSlcblx0fSwgW10pXG5cblx0Ly8gQ3VzdG9tIGhhbmRsZXJzXG5cdGNvbnN0IGVkaXRFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0U2VsZWN0ZWRFdmVudChldmVudClcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Y29uc3QgaGFuZGxlRXZlbnRDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0aWYgKGRpc2FibGVFdmVudENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdFx0aWYgKG9uRXZlbnRDbGljaykge1xuXHRcdFx0XHRvbkV2ZW50Q2xpY2soZXZlbnQpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlZGl0RXZlbnQoZXZlbnQpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbZGlzYWJsZUV2ZW50Q2xpY2ssIG9uRXZlbnRDbGljaywgZWRpdEV2ZW50XVxuXHQpXG5cblx0Y29uc3QgaGFuZGxlRGF0ZUNsaWNrID0gdXNlQ2FsbGJhY2soXG5cdFx0KGluZm86IENlbGxDbGlja0luZm8pID0+IHtcblx0XHRcdGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAob25DZWxsQ2xpY2spIHtcblx0XHRcdFx0b25DZWxsQ2xpY2soaW5mbylcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IG5ld0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0XHRcdHRpdGxlOiBjYWxlbmRhckVuZ2luZS50KCduZXdFdmVudCcpLFxuXHRcdFx0XHRcdHN0YXJ0OiBpbmZvLnN0YXJ0LFxuXHRcdFx0XHRcdGVuZDogaW5mby5lbmQsXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246ICcnLFxuXHRcdFx0XHRcdGFsbERheTogZmFsc2UsXG5cdFx0XHRcdH0gYXMgQ2FsZW5kYXJFdmVudFxuXG5cdFx0XHRcdGlmIChpbmZvLnJlc291cmNlSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdG5ld0V2ZW50LnJlc291cmNlSWQgPSBpbmZvLnJlc291cmNlSWRcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRXZlbnQobmV3RXZlbnQpXG5cdFx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRGF0ZShpbmZvLnN0YXJ0KVxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtvbkNlbGxDbGljaywgZGlzYWJsZUNlbGxDbGljaywgY2FsZW5kYXJFbmdpbmVdXG5cdClcblxuXHQvLyBDcmVhdGUgdGhlIGNvbnRleHQgdmFsdWVcblx0Y29uc3QgY29udGV4dFZhbHVlID0gdXNlTWVtbyhcblx0XHQoKSA9PiAoe1xuXHRcdFx0Li4uY2FsZW5kYXJFbmdpbmUsXG5cdFx0XHQvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuXHRcdFx0cmVzb3VyY2VzOiBjdXJyZW50UmVzb3VyY2VzLFxuXHRcdFx0dmlzaWJsZVJlc291cmNlcyxcblx0XHRcdHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSxcblx0XHRcdHNob3dSZXNvdXJjZSxcblx0XHRcdGhpZGVSZXNvdXJjZSxcblx0XHRcdHNob3dBbGxSZXNvdXJjZXMsXG5cdFx0XHRoaWRlQWxsUmVzb3VyY2VzLFxuXHRcdFx0Ly8gUmVzb3VyY2UgdXRpbGl0aWVzXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlcyxcblx0XHRcdGdldFJlc291cmNlQnlJZCxcblx0XHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdFx0XHRpc0V2ZW50Q3Jvc3NSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50UmVzb3VyY2VJZHMsXG5cdFx0XHQvLyBPdmVycmlkZSBoYW5kbGVyc1xuXHRcdFx0b25FdmVudENsaWNrOiBoYW5kbGVFdmVudENsaWNrLFxuXHRcdFx0b25DZWxsQ2xpY2s6IGhhbmRsZURhdGVDbGljayxcblx0XHRcdC8vIFBhc3MtdGhyb3VnaCBwcm9wc1xuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRyZW5kZXJSZXNvdXJjZSxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0ZXZlbnRIZWlnaHQsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0b3JpZW50YXRpb24sXG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdHJlbmRlckhvdXIsXG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdGhpZGRlbkRheXMsXG5cdFx0XHR3ZWVrVmlld0dyYW51bGFyaXR5LFxuXHRcdH0pLFxuXHRcdFtcblx0XHRcdGNhbGVuZGFyRW5naW5lLFxuXHRcdFx0Y3VycmVudFJlc291cmNlcyxcblx0XHRcdHZpc2libGVSZXNvdXJjZXMsXG5cdFx0XHR0b2dnbGVSZXNvdXJjZVZpc2liaWxpdHksXG5cdFx0XHRzaG93UmVzb3VyY2UsXG5cdFx0XHRoaWRlUmVzb3VyY2UsXG5cdFx0XHRzaG93QWxsUmVzb3VyY2VzLFxuXHRcdFx0aGlkZUFsbFJlc291cmNlcyxcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2VzLFxuXHRcdFx0Z2V0UmVzb3VyY2VCeUlkLFxuXHRcdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblx0XHRcdGlzRXZlbnRDcm9zc1Jlc291cmNlLFxuXHRcdFx0aGFuZGxlRXZlbnRDbGljayxcblx0XHRcdGhhbmRsZURhdGVDbGljayxcblx0XHRcdHJlbmRlckV2ZW50LFxuXHRcdFx0cmVuZGVyUmVzb3VyY2UsXG5cdFx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdFx0XHRsb2NhbGUsXG5cdFx0XHR0aW1lem9uZSxcblx0XHRcdGRpc2FibGVDZWxsQ2xpY2ssXG5cdFx0XHRkaXNhYmxlRXZlbnRDbGljayxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdGV2ZW50SGVpZ2h0LFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdG9yaWVudGF0aW9uLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRyZW5kZXJIb3VyLFxuXHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRoaWRkZW5EYXlzLFxuXHRcdFx0d2Vla1ZpZXdHcmFudWxhcml0eSxcblx0XHRdXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUNhbGVuZGFyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L1Jlc291cmNlQ2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHtcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQgYXMgZGVsZXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxuXHRnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyxcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQgYXMgdXBkYXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxufSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuaW1wb3J0IGRheWpzLCB7XG5cdHR5cGUgRGF5anMsXG5cdHR5cGUgTWFuaXB1bGF0ZVR5cGUsXG59IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZGVmYXVsdFRyYW5zbGF0aW9ucyB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy9kZWZhdWx0J1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnMsIFRyYW5zbGF0b3JGdW5jdGlvbiB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmltcG9ydCB7IGdldE1vbnRoV2Vla3MsIGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IGV2ZW50T3ZlcmxhcHNSYW5nZSB9IGZyb20gJ0AvbGliL3V0aWxzL2V2ZW50LXV0aWxzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhclZpZXcgfSBmcm9tICdAL3R5cGVzJ1xuaW1wb3J0IHsgREFZX01BWF9FVkVOVFNfREVGQVVMVCB9IGZyb20gJy4uL2xpYi9jb25zdGFudHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJFbmdpbmVDb25maWcge1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG5cdGluaXRpYWxWaWV3PzogQ2FsZW5kYXJWaWV3XG5cdGluaXRpYWxEYXRlPzogRGF5anNcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0b25FdmVudEFkZD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50VXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRXZlbnREZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25EYXRlQ2hhbmdlPzogKGRhdGU6IERheWpzLCByYW5nZTogeyBzdGFydDogRGF5anM7IGVuZDogRGF5anMgfSkgPT4gdm9pZFxuXHRvblZpZXdDaGFuZ2U/OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdGxvY2FsZT86IHN0cmluZ1xuXHR0aW1lem9uZT86IHN0cmluZ1xuXHR0cmFuc2xhdGlvbnM/OiBUcmFuc2xhdGlvbnNcblx0dHJhbnNsYXRvcj86IFRyYW5zbGF0b3JGdW5jdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyRW5naW5lUmV0dXJuIHtcblx0Y3VycmVudERhdGU6IERheWpzXG5cdHZpZXc6IENhbGVuZGFyVmlld1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRyYXdFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRpc0V2ZW50Rm9ybU9wZW46IGJvb2xlYW5cblx0c2VsZWN0ZWRFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0c2VsZWN0ZWREYXRlOiBEYXlqcyB8IG51bGxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuXHRkYXlNYXhFdmVudHM6IG51bWJlclxuXHRjdXJyZW50TG9jYWxlOiBzdHJpbmdcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0c2V0Q3VycmVudERhdGU6IChkYXRlOiBEYXlqcykgPT4gdm9pZFxuXHRzZWxlY3REYXRlOiAoZGF0ZTogRGF5anMpID0+IHZvaWRcblx0c2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0dG9kYXk6ICgpID0+IHZvaWRcblx0YWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHR1cGRhdGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnQ6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0ZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdG9wZW5FdmVudEZvcm06IChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG5cdHNldFNlbGVjdGVkRXZlbnQ6IFJlYWN0LkRpc3BhdGNoPFJlYWN0LlNldFN0YXRlQWN0aW9uPENhbGVuZGFyRXZlbnQgfCBudWxsPj5cblx0c2V0SXNFdmVudEZvcm1PcGVuOiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxib29sZWFuPj5cblx0c2V0U2VsZWN0ZWREYXRlOiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxEYXlqcyB8IG51bGw+PlxuXHRnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IChzdGFydERhdGU6IERheWpzLCBlbmREYXRlOiBEYXlqcykgPT4gQ2FsZW5kYXJFdmVudFtdXG5cdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHR0OiBUcmFuc2xhdG9yRnVuY3Rpb25cbn1cblxuY29uc3QgVklFV19VTklUUzogUmVjb3JkPENhbGVuZGFyVmlldywgTWFuaXB1bGF0ZVR5cGU+ID0ge1xuXHRkYXk6ICdkYXknLFxuXHR3ZWVrOiAnd2VlaycsXG5cdG1vbnRoOiAnbW9udGgnLFxuXHR5ZWFyOiAneWVhcicsXG59XG5cbmV4cG9ydCBjb25zdCBjYWxjdWxhdGVWaWV3UmFuZ2UgPSAoXG5cdGRhdGU6IERheWpzLFxuXHR2aWV3OiBDYWxlbmRhclZpZXcsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbik6IHsgc3RhcnQ6IERheWpzOyBlbmQ6IERheWpzIH0gPT4ge1xuXHRpZiAodmlldyA9PT0gJ2RheScgfHwgdmlldyA9PT0gJ3llYXInKSB7XG5cdFx0cmV0dXJuIHsgc3RhcnQ6IGRhdGUuc3RhcnRPZih2aWV3KSwgZW5kOiBkYXRlLmVuZE9mKHZpZXcpIH1cblx0fVxuXHRpZiAodmlldyA9PT0gJ3dlZWsnKSB7XG5cdFx0Y29uc3QgZGF5cyA9IGdldFdlZWtEYXlzKGRhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdHJldHVybiB7IHN0YXJ0OiBkYXlzWzBdLnN0YXJ0T2YoJ2RheScpLCBlbmQ6IGRheXNbNl0uZW5kT2YoJ2RheScpIH1cblx0fVxuXHQvLyBtb250aCB2aWV3OiA2IHdlZWtzIMOXIDcgZGF5c1xuXHRjb25zdCB3ZWVrcyA9IGdldE1vbnRoV2Vla3MoZGF0ZSwgZmlyc3REYXlPZldlZWspXG5cdHJldHVybiB7IHN0YXJ0OiB3ZWVrc1swXVswXS5zdGFydE9mKCdkYXknKSwgZW5kOiB3ZWVrc1s1XVs2XS5lbmRPZignZGF5JykgfVxufVxuXG5leHBvcnQgY29uc3QgdXNlQ2FsZW5kYXJFbmdpbmUgPSAoXG5cdGNvbmZpZzogQ2FsZW5kYXJFbmdpbmVDb25maWdcbik6IENhbGVuZGFyRW5naW5lUmV0dXJuID0+IHtcblx0Y29uc3Qge1xuXHRcdGV2ZW50cyA9IFtdLFxuXHRcdGZpcnN0RGF5T2ZXZWVrID0gMCxcblx0XHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdFx0aW5pdGlhbERhdGUgPSBkYXlqcygpLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0b25FdmVudEFkZCxcblx0XHRvbkV2ZW50VXBkYXRlLFxuXHRcdG9uRXZlbnREZWxldGUsXG5cdFx0b25EYXRlQ2hhbmdlLFxuXHRcdG9uVmlld0NoYW5nZSxcblx0XHRsb2NhbGUsXG5cdFx0dGltZXpvbmUsXG5cdFx0dHJhbnNsYXRpb25zLFxuXHRcdHRyYW5zbGF0b3IsXG5cdH0gPSBjb25maWdcblxuXHRjb25zdCBbY3VycmVudERhdGUsIHNldEN1cnJlbnREYXRlXSA9IHVzZVN0YXRlPERheWpzPihcblx0XHRkYXlqcy5pc0RheWpzKGluaXRpYWxEYXRlKSA/IGluaXRpYWxEYXRlIDogZGF5anMoaW5pdGlhbERhdGUpXG5cdClcblx0Y29uc3QgW3ZpZXcsIHNldFZpZXddID0gdXNlU3RhdGU8Q2FsZW5kYXJWaWV3Pihpbml0aWFsVmlldylcblx0Y29uc3QgW2N1cnJlbnRFdmVudHMsIHNldEN1cnJlbnRFdmVudHNdID0gdXNlU3RhdGU8Q2FsZW5kYXJFdmVudFtdPihldmVudHMpXG5cdGNvbnN0IFtpc0V2ZW50Rm9ybU9wZW4sIHNldElzRXZlbnRGb3JtT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkRXZlbnQsIHNldFNlbGVjdGVkRXZlbnRdID0gdXNlU3RhdGU8Q2FsZW5kYXJFdmVudCB8IG51bGw+KG51bGwpXG5cdGNvbnN0IFtzZWxlY3RlZERhdGUsIHNldFNlbGVjdGVkRGF0ZV0gPSB1c2VTdGF0ZTxEYXlqcyB8IG51bGw+KG51bGwpXG5cdGNvbnN0IFtjdXJyZW50TG9jYWxlLCBzZXRDdXJyZW50TG9jYWxlXSA9IHVzZVN0YXRlKGxvY2FsZSB8fCAnZW4nKVxuXHRjb25zdCBsYXN0RXZlbnRzUHJvcCA9IHVzZVJlZihldmVudHMpXG5cdGNvbnN0IGxhc3RUaW1lem9uZVByb3AgPSB1c2VSZWYodGltZXpvbmUpXG5cdGNvbnN0IGxhc3RMb2NhbGVQcm9wID0gdXNlUmVmKGxvY2FsZSlcblxuXHRjb25zdCB0OiBUcmFuc2xhdG9yRnVuY3Rpb24gPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAodHJhbnNsYXRvcikgcmV0dXJuIHRyYW5zbGF0b3Jcblx0XHRjb25zdCBkaWN0ID0gdHJhbnNsYXRpb25zIHx8IGRlZmF1bHRUcmFuc2xhdGlvbnNcblx0XHRyZXR1cm4gKGtleTogc3RyaW5nKSA9PiBkaWN0W2tleSBhcyBrZXlvZiBUcmFuc2xhdGlvbnNdIHx8IGtleVxuXHR9LCBbdHJhbnNsYXRpb25zLCB0cmFuc2xhdG9yXSlcblxuXHRjb25zdCBnZXRFdmVudHNGb3JEYXRlUmFuZ2UgPSB1c2VDYWxsYmFjayhcblx0XHQoc3RhcnREYXRlOiBEYXlqcywgZW5kRGF0ZTogRGF5anMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRcdFx0Y29uc3QgYWxsRXZlbnRzOiBDYWxlbmRhckV2ZW50W10gPSBbXVxuXG5cdFx0XHRmb3IgKGNvbnN0IGV2ZW50IG9mIGN1cnJlbnRFdmVudHMpIHtcblx0XHRcdFx0aWYgKGV2ZW50LnJydWxlKSB7XG5cdFx0XHRcdFx0YWxsRXZlbnRzLnB1c2goXG5cdFx0XHRcdFx0XHQuLi5nZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyh7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdFx0XHRzdGFydERhdGUsXG5cdFx0XHRcdFx0XHRcdGVuZERhdGUsXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSBlbHNlIGlmIChldmVudE92ZXJsYXBzUmFuZ2UoZXZlbnQsIHN0YXJ0RGF0ZSwgZW5kRGF0ZSkpIHtcblx0XHRcdFx0XHRhbGxFdmVudHMucHVzaChldmVudClcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFsbEV2ZW50c1xuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHNdXG5cdClcblxuXHRjb25zdCBnZXRDdXJyZW50Vmlld1JhbmdlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdHJldHVybiBjYWxjdWxhdGVWaWV3UmFuZ2UoY3VycmVudERhdGUsIHZpZXcsIGZpcnN0RGF5T2ZXZWVrKVxuXHR9LCBbY3VycmVudERhdGUsIHZpZXcsIGZpcnN0RGF5T2ZXZWVrXSlcblxuXHRjb25zdCBwcm9jZXNzZWRFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IGdldEN1cnJlbnRWaWV3UmFuZ2UoKVxuXHRcdHJldHVybiBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uoc3RhcnQsIGVuZClcblx0fSwgW2dldEV2ZW50c0ZvckRhdGVSYW5nZSwgZ2V0Q3VycmVudFZpZXdSYW5nZV0pXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoZXZlbnRzICE9PSBsYXN0RXZlbnRzUHJvcC5jdXJyZW50KSB7XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKGV2ZW50cylcblx0XHRcdGxhc3RFdmVudHNQcm9wLmN1cnJlbnQgPSBldmVudHNcblx0XHR9XG5cdH0sIFtldmVudHNdKVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGxvY2FsZSAmJiBsb2NhbGUgIT09IGxhc3RMb2NhbGVQcm9wLmN1cnJlbnQpIHtcblx0XHRcdHNldEN1cnJlbnRMb2NhbGUobG9jYWxlKVxuXHRcdFx0ZGF5anMubG9jYWxlKGxvY2FsZSlcblx0XHRcdHNldEN1cnJlbnREYXRlKChwcmV2RGF0ZSkgPT4gcHJldkRhdGUubG9jYWxlKGxvY2FsZSkpXG5cdFx0XHRsYXN0TG9jYWxlUHJvcC5jdXJyZW50ID0gbG9jYWxlXG5cdFx0fVxuXHR9LCBbbG9jYWxlXSlcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmICh0aW1lem9uZSAmJiB0aW1lem9uZSAhPT0gbGFzdFRpbWV6b25lUHJvcC5jdXJyZW50KSB7XG5cdFx0XHRkYXlqcy50ei5zZXREZWZhdWx0KHRpbWV6b25lKVxuXHRcdFx0c2V0Q3VycmVudERhdGUoKHByZXYpID0+IHByZXYudHoodGltZXpvbmUpKVxuXHRcdFx0c2V0Q3VycmVudEV2ZW50cygocHJldikgPT5cblx0XHRcdFx0cHJldi5tYXAoKGUpID0+ICh7XG5cdFx0XHRcdFx0Li4uZSxcblx0XHRcdFx0XHRzdGFydDogZS5zdGFydC50eih0aW1lem9uZSksXG5cdFx0XHRcdFx0ZW5kOiBlLmVuZC50eih0aW1lem9uZSksXG5cdFx0XHRcdH0pKVxuXHRcdFx0KVxuXHRcdFx0bGFzdFRpbWV6b25lUHJvcC5jdXJyZW50ID0gdGltZXpvbmVcblx0XHR9XG5cdH0sIFt0aW1lem9uZV0pXG5cblx0Y29uc3QgdXBkYXRlRGF0ZUFuZE5vdGlmeSA9IHVzZUNhbGxiYWNrKFxuXHRcdChuZXdEYXRlOiBEYXlqcykgPT4ge1xuXHRcdFx0c2V0Q3VycmVudERhdGUobmV3RGF0ZSlcblx0XHRcdGNvbnN0IHJhbmdlID0gY2FsY3VsYXRlVmlld1JhbmdlKG5ld0RhdGUsIHZpZXcsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdFx0b25EYXRlQ2hhbmdlPy4obmV3RGF0ZSwgcmFuZ2UpXG5cdFx0fSxcblx0XHRbb25EYXRlQ2hhbmdlLCB2aWV3LCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IHNlbGVjdERhdGUgPSB1cGRhdGVEYXRlQW5kTm90aWZ5XG5cblx0Y29uc3QgbmF2aWdhdGVQZXJpb2QgPSB1c2VDYWxsYmFjayhcblx0XHQoZGlyZWN0aW9uOiAxIHwgLTEpID0+IHtcblx0XHRcdGNvbnN0IG5ld0RhdGUgPVxuXHRcdFx0XHRkaXJlY3Rpb24gPT09IDFcblx0XHRcdFx0XHQ/IGN1cnJlbnREYXRlLmFkZCgxLCBWSUVXX1VOSVRTW3ZpZXddKVxuXHRcdFx0XHRcdDogY3VycmVudERhdGUuc3VidHJhY3QoMSwgVklFV19VTklUU1t2aWV3XSlcblx0XHRcdHVwZGF0ZURhdGVBbmROb3RpZnkobmV3RGF0ZSlcblx0XHR9LFxuXHRcdFtjdXJyZW50RGF0ZSwgdmlldywgdXBkYXRlRGF0ZUFuZE5vdGlmeV1cblx0KVxuXG5cdGNvbnN0IG5leHRQZXJpb2QgPSB1c2VDYWxsYmFjaygoKSA9PiBuYXZpZ2F0ZVBlcmlvZCgxKSwgW25hdmlnYXRlUGVyaW9kXSlcblx0Y29uc3QgcHJldlBlcmlvZCA9IHVzZUNhbGxiYWNrKCgpID0+IG5hdmlnYXRlUGVyaW9kKC0xKSwgW25hdmlnYXRlUGVyaW9kXSlcblxuXHRjb25zdCB0b2RheSA9IHVzZUNhbGxiYWNrKFxuXHRcdCgpID0+IHVwZGF0ZURhdGVBbmROb3RpZnkoZGF5anMoKSksXG5cdFx0W3VwZGF0ZURhdGVBbmROb3RpZnldXG5cdClcblxuXHRjb25zdCBhZGRFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0c2V0Q3VycmVudEV2ZW50cygocHJldikgPT4gWy4uLnByZXYsIGV2ZW50XSlcblx0XHRcdG9uRXZlbnRBZGQ/LihldmVudClcblx0XHR9LFxuXHRcdFtvbkV2ZW50QWRkXVxuXHQpXG5cblx0Y29uc3QgdXBkYXRlRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLCB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG5cdFx0XHRjb25zdCBldmVudFRvVXBkYXRlID0gY3VycmVudEV2ZW50cy5maW5kKChldmVudCkgPT4gZXZlbnQuaWQgPT09IGV2ZW50SWQpXG5cdFx0XHRpZiAoIWV2ZW50VG9VcGRhdGUpIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG5ld0V2ZW50ID0geyAuLi5ldmVudFRvVXBkYXRlLCAuLi51cGRhdGVzIH1cblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+XG5cdFx0XHRcdHByZXYubWFwKChldmVudCkgPT4gKGV2ZW50LmlkID09PSBldmVudElkID8gbmV3RXZlbnQgOiBldmVudCkpXG5cdFx0XHQpXG5cdFx0XHRvbkV2ZW50VXBkYXRlPy4obmV3RXZlbnQpXG5cdFx0fSxcblx0XHRbY3VycmVudEV2ZW50cywgb25FdmVudFVwZGF0ZV1cblx0KVxuXG5cdGNvbnN0IHVwZGF0ZVJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KFxuXHRcdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdFx0KSA9PiB7XG5cdFx0XHRvbkV2ZW50VXBkYXRlPy4oeyAuLi5ldmVudCwgLi4udXBkYXRlcyB9KVxuXHRcdFx0c2V0Q3VycmVudEV2ZW50cyhcblx0XHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnRJbXBsKHtcblx0XHRcdFx0XHR0YXJnZXRFdmVudDogZXZlbnQsXG5cdFx0XHRcdFx0dXBkYXRlcyxcblx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnRVcGRhdGVdXG5cdClcblxuXHRjb25zdCBkZWxldGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCwgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zKSA9PiB7XG5cdFx0XHRvbkV2ZW50RGVsZXRlPy4oZXZlbnQpXG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKFxuXHRcdFx0XHRkZWxldGVSZWN1cnJpbmdFdmVudEltcGwoe1xuXHRcdFx0XHRcdHRhcmdldEV2ZW50OiBldmVudCxcblx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnREZWxldGVdXG5cdClcblxuXHRjb25zdCBkZWxldGVFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRcdGNvbnN0IGV2ZW50VG9EZWxldGUgPSBjdXJyZW50RXZlbnRzLmZpbmQoKGUpID0+IGUuaWQgPT09IGV2ZW50SWQpXG5cdFx0XHRpZiAoIWV2ZW50VG9EZWxldGUpIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+IHByZXYuZmlsdGVyKChlKSA9PiBlLmlkICE9PSBldmVudElkKSlcblx0XHRcdG9uRXZlbnREZWxldGU/LihldmVudFRvRGVsZXRlKVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnREZWxldGVdXG5cdClcblxuXHRjb25zdCBvcGVuRXZlbnRGb3JtID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdGlmIChldmVudERhdGE/LnN0YXJ0KSB7XG5cdFx0XHRcdHNldFNlbGVjdGVkRGF0ZShldmVudERhdGEuc3RhcnQpXG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzdGFydCA9IGV2ZW50RGF0YT8uc3RhcnQgPz8gY3VycmVudERhdGVcblx0XHRcdHNldFNlbGVjdGVkRXZlbnQoe1xuXHRcdFx0XHR0aXRsZTogdCgnbmV3RXZlbnQnKSxcblx0XHRcdFx0c3RhcnQsXG5cdFx0XHRcdGVuZDogZXZlbnREYXRhPy5lbmQgPz8gc3RhcnQuYWRkKDEsICdob3VyJyksXG5cdFx0XHRcdHJlc291cmNlSWQ6IGV2ZW50RGF0YT8ucmVzb3VyY2VJZCxcblx0XHRcdFx0ZGVzY3JpcHRpb246ICcnLFxuXHRcdFx0XHRhbGxEYXk6IGV2ZW50RGF0YT8uYWxsRGF5ID8/IGZhbHNlLFxuXHRcdFx0fSBhcyBDYWxlbmRhckV2ZW50KVxuXHRcdFx0c2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0fSxcblx0XHRbY3VycmVudERhdGUsIHRdXG5cdClcblxuXHRjb25zdCBjbG9zZUV2ZW50Rm9ybSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzZXRTZWxlY3RlZERhdGUobnVsbClcblx0XHRzZXRTZWxlY3RlZEV2ZW50KG51bGwpXG5cdFx0c2V0SXNFdmVudEZvcm1PcGVuKGZhbHNlKVxuXHR9LCBbXSlcblxuXHRjb25zdCBoYW5kbGVWaWV3Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG5cdFx0KG5ld1ZpZXc6IENhbGVuZGFyVmlldykgPT4ge1xuXHRcdFx0c2V0VmlldyhuZXdWaWV3KVxuXHRcdFx0b25WaWV3Q2hhbmdlPy4obmV3Vmlldylcblx0XHRcdC8vIFZpZXcgY2hhbmdlIGFmZmVjdHMgdmlzaWJsZSByYW5nZSDigJQgbm90aWZ5IGNvbnN1bWVyc1xuXHRcdFx0Y29uc3QgcmFuZ2UgPSBjYWxjdWxhdGVWaWV3UmFuZ2UoY3VycmVudERhdGUsIG5ld1ZpZXcsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdFx0b25EYXRlQ2hhbmdlPy4oY3VycmVudERhdGUsIHJhbmdlKVxuXHRcdH0sXG5cdFx0W29uVmlld0NoYW5nZSwgb25EYXRlQ2hhbmdlLCBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBDYWxlbmRhckV2ZW50IHwgbnVsbCA9PiB7XG5cdFx0XHRjb25zdCB0YXJnZXRVSUQgPSBldmVudC51aWRcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGN1cnJlbnRFdmVudHMuZmluZChcblx0XHRcdFx0XHQoZSkgPT4gKGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYCkgPT09IHRhcmdldFVJRCAmJiBlLnJydWxlXG5cdFx0XHRcdCkgfHwgbnVsbFxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHNdXG5cdClcblxuXHRyZXR1cm4ge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdHZpZXcsXG5cdFx0ZXZlbnRzOiBwcm9jZXNzZWRFdmVudHMsXG5cdFx0cmF3RXZlbnRzOiBjdXJyZW50RXZlbnRzLFxuXHRcdGlzRXZlbnRGb3JtT3Blbixcblx0XHRzZWxlY3RlZEV2ZW50LFxuXHRcdHNlbGVjdGVkRGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRkYXlNYXhFdmVudHM6IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdHNldEN1cnJlbnREYXRlLFxuXHRcdHNlbGVjdERhdGUsXG5cdFx0c2V0VmlldzogaGFuZGxlVmlld0NoYW5nZSxcblx0XHRuZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2QsXG5cdFx0dG9kYXksXG5cdFx0YWRkRXZlbnQsXG5cdFx0dXBkYXRlRXZlbnQsXG5cdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0ZGVsZXRlRXZlbnQsXG5cdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHRjbG9zZUV2ZW50Rm9ybSxcblx0XHRzZXRTZWxlY3RlZEV2ZW50LFxuXHRcdHNldElzRXZlbnRGb3JtT3Blbixcblx0XHRzZXRTZWxlY3RlZERhdGUsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHR0LFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBvbWl0S2V5cywgc2FmZURhdGUgfSBmcm9tICdAL2xpYi91dGlscydcblxuLyoqXG4gKiBDb252ZXJ0cyBhIERheWpzIG9iamVjdCB0byBhIFwiRmxvYXRpbmcgVGltZVwiIERhdGUgcmVwcmVzZW50YXRpb24uXG4gKiBJbiBGbG9hdGluZyBUaW1lLCB3ZSB1c2UgYSBVVEMgRGF0ZSBvYmplY3QgYnV0IHNldCBpdHMgVVRDIGNvbXBvbmVudHNcbiAqIHRvIG1hdGNoIHRoZSBsb2NhbCBjb21wb25lbnRzIG9mIHRoZSB1c2VyJ3MgZGF0ZS5cbiAqXG4gKiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgUlJ1bGUgZXZhbHVhdGlvbiBiZWNhdXNlIGl0IGVuc3VyZXMgdGhhdCBhIHJ1bGVcbiAqIGxpa2UgXCJFdmVyeSBXZWRuZXNkYXlcIiByZWZlcnMgdG8gdGhlIHVzZXIncyBsb2NhbCBXZWRuZXNkYXksIGV2ZW4gaWZcbiAqIHRoYXQgdGltZSBmYWxscyBvbiBhIFRodXJzZGF5IGluIGFjdHVhbCBVVEMuXG4gKi9cbmNvbnN0IHRvRmxvYXRpbmdEYXRlID0gKGQ6IERheWpzKTogRGF0ZSA9PiB7XG5cdHJldHVybiBuZXcgRGF0ZShcblx0XHREYXRlLlVUQyhcblx0XHRcdGQueWVhcigpLFxuXHRcdFx0ZC5tb250aCgpLFxuXHRcdFx0ZC5kYXRlKCksXG5cdFx0XHRkLmhvdXIoKSxcblx0XHRcdGQubWludXRlKCksXG5cdFx0XHRkLnNlY29uZCgpLFxuXHRcdFx0ZC5taWxsaXNlY29uZCgpXG5cdFx0KVxuXHQpXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBcIkZsb2F0aW5nIFRpbWVcIiBEYXRlIGJhY2sgdG8gYSBEYXlqcyBvYmplY3QgaW4gdGhlIG9yaWdpbmFsIGNvbnRleHQuXG4gKiBJdCB0YWtlcyB0aGUgWU1ESE1TIGNvbXBvbmVudHMgZnJvbSB0aGUgVVRDIERhdGUgYW5kIGFwcGxpZXMgdGhlbSB0byB0aGVcbiAqIHJlZmVyZW5jZSBEYXlqcyBvYmplY3QgKHByZXNlcnZpbmcgaXRzIHRpbWV6b25lL2xvY2FsZSkuXG4gKi9cbmNvbnN0IGZyb21GbG9hdGluZ0RhdGUgPSAoZGF0ZTogRGF0ZSwgcmVmZXJlbmNlOiBEYXlqcyk6IERheWpzID0+IHtcblx0cmV0dXJuIHJlZmVyZW5jZVxuXHRcdC55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSlcblx0XHQubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKVxuXHRcdC5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKVxuXHRcdC5ob3VyKGRhdGUuZ2V0VVRDSG91cnMoKSlcblx0XHQubWludXRlKGRhdGUuZ2V0VVRDTWludXRlcygpKVxuXHRcdC5zZWNvbmQoZGF0ZS5nZXRVVENTZWNvbmRzKCkpXG5cdFx0Lm1pbGxpc2Vjb25kKGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpXG59XG5cbmV4cG9ydCBjb25zdCBpc1JlY3VycmluZ0V2ZW50ID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG5cdHJldHVybiBCb29sZWFuKGV2ZW50LnJydWxlIHx8IGV2ZW50LnJlY3VycmVuY2VJZCB8fCBldmVudC51aWQpXG59XG5cbi8qKlxuICogQ29uc2lzdGVudGx5IGRlcml2ZXMgYSBwYXJlbnQgVUlEIGZyb20gYW4gZXZlbnQuXG4gKiBVc2VzIHRoZSBleHBsaWNpdCBgdWlkYCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxscyBiYWNrIHRvIGAke2lkfUBpbGFteS5jYWxlbmRhcmAuXG4gKi9cbmNvbnN0IGdldEV2ZW50UGFyZW50VUlEID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogc3RyaW5nID0+IHtcblx0cmV0dXJuIGV2ZW50LnVpZCB8fCBgJHtldmVudC5pZH1AaWxhbXkuY2FsZW5kYXJgXG59XG5cbi8qKlxuICogRmluZHMgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50ICh0aGUgb25lIHdpdGggcnJ1bGUgYW5kIG5vIHJlY3VycmVuY2VJZClcbiAqIHRoYXQgc2hhcmVzIHRoZSBzYW1lIHBhcmVudCBVSUQgYXMgdGhlIHRhcmdldCBldmVudC5cbiAqIFRocm93cyBpZiBub3QgZm91bmQg4oCUIGNhbGxlcnMgYXNzdW1lIHRoZSBzZXJpZXMgZXhpc3RzLlxuICovXG5jb25zdCBmaW5kQmFzZUV2ZW50SW5kZXggPSAoXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdLFxuXHR0YXJnZXRFdmVudDogQ2FsZW5kYXJFdmVudFxuKTogbnVtYmVyID0+IHtcblx0Y29uc3QgdGFyZ2V0VWlkID0gZ2V0RXZlbnRQYXJlbnRVSUQodGFyZ2V0RXZlbnQpXG5cdGNvbnN0IGluZGV4ID0gZXZlbnRzLmZpbmRJbmRleChcblx0XHQoZSkgPT4gZ2V0RXZlbnRQYXJlbnRVSUQoZSkgPT09IHRhcmdldFVpZCAmJiBlLnJydWxlICYmICFlLnJlY3VycmVuY2VJZFxuXHQpXG5cdGlmIChpbmRleCA9PT0gLTEpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0Jhc2UgcmVjdXJyaW5nIGV2ZW50IG5vdCBmb3VuZCcpXG5cdH1cblx0cmV0dXJuIGluZGV4XG59XG5cbi8qKlxuICogRm9yIHRoZSBcImZvbGxvd2luZ1wiIHNjb3BlOiB0aGUgVU5USUwgZGF0ZSB0aGF0IHRlcm1pbmF0ZXMgdGhlIG9yaWdpbmFsXG4gKiBzZXJpZXMgaXMgdGhlIGVuZCBvZiB0aGUgZGF5IEJFRk9SRSB0aGUgdGFyZ2V0IGV2ZW50J3Mgc3RhcnQuIFRoaXMga2VlcHNcbiAqIHRoZSBsYXN0IHByZS10YXJnZXQgb2NjdXJyZW5jZSBpbiB0aGUgdGVybWluYXRlZCBzZXJpZXMuXG4gKi9cbmNvbnN0IGdldFNlcmllc1Rlcm1pbmF0aW9uRGF0ZSA9ICh0YXJnZXRFdmVudDogQ2FsZW5kYXJFdmVudCk6IERhdGUgPT5cblx0dGFyZ2V0RXZlbnQuc3RhcnQuc3VidHJhY3QoMSwgJ2RheScpLmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXG5pbnRlcmZhY2UgR2VuZXJhdGVSZWN1cnJpbmdFdmVudHNQcm9wcyB7XG5cdGV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzdGFydERhdGU6IERheWpzXG5cdGVuZERhdGU6IERheWpzXG59XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyA9ICh7XG5cdGV2ZW50LFxuXHRjdXJyZW50RXZlbnRzLFxuXHRzdGFydERhdGUsXG5cdGVuZERhdGUsXG59OiBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Ly8gSWYgbm90IGEgcmVjdXJyaW5nIGV2ZW50LCByZXR1cm4gZW1wdHkgYXJyYXlcblx0aWYgKCFldmVudC5ycnVsZSkge1xuXHRcdHJldHVybiBbXVxuXHR9XG5cblx0dHJ5IHtcblx0XHQvLyBEVFNUQVJUIGFuZCBTRUFSQ0ggV0lORE9XIFRSQU5TRk9STUFUSU9OXG5cdFx0Ly8gVHJhbnNmb3JtIGFsbCBkYXRlcyB0byBcImZsb2F0aW5nIHRpbWVcIiAoVVRDIHdpdGggbG9jYWwgY29tcG9uZW50cylcblx0XHQvLyBUaGlzIGVuc3VyZXMgUlJ1bGUgZXZhbHVhdGVzIFwiV2VkbmVzZGF5XCIgYXMgdGhlIHVzZXIncyBsb2NhbCBXZWRuZXNkYXlcblx0XHRjb25zdCBmbG9hdGluZ1N0YXJ0ID0gdG9GbG9hdGluZ0RhdGUoZXZlbnQuc3RhcnQpXG5cdFx0Y29uc3QgZmxvYXRpbmdVbnRpbCA9IGV2ZW50LnJydWxlLnVudGlsXG5cdFx0XHQ/IHRvRmxvYXRpbmdEYXRlKGRheWpzKGV2ZW50LnJydWxlLnVudGlsKSlcblx0XHRcdDogdW5kZWZpbmVkXG5cblx0XHRjb25zdCBydWxlT3B0aW9uczogUlJ1bGVPcHRpb25zID0ge1xuXHRcdFx0Li4uZXZlbnQucnJ1bGUsXG5cdFx0XHRkdHN0YXJ0OiBmbG9hdGluZ1N0YXJ0LFxuXHRcdFx0dW50aWw6IGZsb2F0aW5nVW50aWwsXG5cdFx0fVxuXHRcdGNvbnN0IHJ1bGUgPSBuZXcgUlJ1bGUocnVsZU9wdGlvbnMpXG5cblx0XHRjb25zdCBwYXJlbnRVaWQgPSBnZXRFdmVudFBhcmVudFVJRChldmVudClcblx0XHRjb25zdCBvdmVycmlkZXMgPSBjdXJyZW50RXZlbnRzLmZpbHRlcihcblx0XHRcdChlKSA9PiBlLnJlY3VycmVuY2VJZCAmJiBnZXRFdmVudFBhcmVudFVJRChlKSA9PT0gcGFyZW50VWlkXG5cdFx0KVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIGV2ZW50IGR1cmF0aW9uIHRvIGV4cGFuZCBzZWFyY2ggd2luZG93IGZvciBldmVudHMgdGhhdCBzcGFuIHRoZSByYW5nZVxuXHRcdGNvbnN0IGV2ZW50RHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcblxuXHRcdC8vIEV4cGFuZCBzZWFyY2ggd2luZG93IGJhY2t3YXJkIGJ5IGV2ZW50IGR1cmF0aW9uIHRvIGNhdGNoIGV2ZW50cyB0aGF0IHN0YXJ0IGJlZm9yZVxuXHRcdC8vIHRoZSByYW5nZSBidXQgc3BhbiBpbnRvIGl0XG5cdFx0Y29uc3QgZXhwYW5kZWRTdGFydERhdGVUaW1lID0gdG9GbG9hdGluZ0RhdGUoXG5cdFx0XHRzdGFydERhdGUuc3VidHJhY3QoZXZlbnREdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcblx0XHQpXG5cdFx0Y29uc3QgZW5kRGF0ZVRpbWUgPSB0b0Zsb2F0aW5nRGF0ZShlbmREYXRlKVxuXG5cdFx0Ly8gR2V0IGFsbCBvY2N1cnJlbmNlcyBpbiB0aGUgZXhwYW5kZWQgcmFuZ2Vcblx0XHRjb25zdCBvY2N1cnJlbmNlcyA9IHJ1bGUuYmV0d2VlbihleHBhbmRlZFN0YXJ0RGF0ZVRpbWUsIGVuZERhdGVUaW1lLCB0cnVlKVxuXG5cdFx0Ly8gQ29udmVydCBvY2N1cnJlbmNlcyB0byBDYWxlbmRhckV2ZW50IGluc3RhbmNlc1xuXHRcdGNvbnN0IHJlY3VycmluZ0V2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gb2NjdXJyZW5jZXNcblx0XHRcdC5tYXAoKG9jY3VycmVuY2UsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9jY3VycmVuY2VEYXRlID0gZnJvbUZsb2F0aW5nRGF0ZShvY2N1cnJlbmNlLCBldmVudC5zdGFydClcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmdPdmVycmlkZSA9IG92ZXJyaWRlcy5maW5kKChlKSA9PlxuXHRcdFx0XHRcdHNhZmVEYXRlKGUucmVjdXJyZW5jZUlkKT8uaXNTYW1lKG9jY3VycmVuY2VEYXRlKVxuXHRcdFx0XHQpXG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUncyBhbiBvdmVycmlkZSwgdXNlIGl0XG5cdFx0XHRcdGlmIChleGlzdGluZ092ZXJyaWRlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgLi4uZXZlbnQsIC4uLmV4aXN0aW5nT3ZlcnJpZGUgfVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSBkdXJhdGlvbiBmcm9tIHRoZSBvcmlnaW5hbCBldmVudFxuXHRcdFx0XHRjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gZXZlbnQuZW5kLmRpZmYoZXZlbnQuc3RhcnQpXG5cdFx0XHRcdGNvbnN0IG5ld0VuZFRpbWUgPSBvY2N1cnJlbmNlRGF0ZS5hZGQob3JpZ2luYWxEdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcblx0XHRcdFx0Y29uc3QgcmVjdXJyaW5nRXZlbnRJZCA9IGAke2V2ZW50LmlkfV8ke2luZGV4fWBcblx0XHRcdFx0Y29uc3QgcGFyZW50VUlEID0gZ2V0RXZlbnRQYXJlbnRVSUQoZXZlbnQpXG5cblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSByZWN1cnJpbmcgZXZlbnQgaW5zdGFuY2Vcblx0XHRcdFx0Y29uc3QgcmVjdXJyaW5nRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdFx0aWQ6IHJlY3VycmluZ0V2ZW50SWQsXG5cdFx0XHRcdFx0c3RhcnQ6IG9jY3VycmVuY2VEYXRlLFxuXHRcdFx0XHRcdGVuZDogbmV3RW5kVGltZSxcblx0XHRcdFx0XHR1aWQ6IHBhcmVudFVJRCwgLy8gU2FtZSBVSUQgYXMgcGFyZW50IGZvciBwcm9wZXIgZ3JvdXBpbmdcblx0XHRcdFx0XHRycnVsZTogdW5kZWZpbmVkLCAvLyBJbnN0YW5jZSBldmVudHMgZG9uJ3QgaGF2ZSBSUlVMRVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlY3VycmluZ0V2ZW50XG5cdFx0XHR9KVxuXHRcdFx0LmZpbHRlcigocmVjdXJyaW5nRXZlbnQpID0+IHtcblx0XHRcdFx0Ly8gRmlsdGVyIG91dCBFWERBVEUgZXhjbHVzaW9uc1xuXHRcdFx0XHRjb25zdCBoYXNFeGRhdGVzID0gZXZlbnQuZXhkYXRlcyAmJiBldmVudC5leGRhdGVzLmxlbmd0aCA+IDBcblx0XHRcdFx0aWYgKGhhc0V4ZGF0ZXMpIHtcblx0XHRcdFx0XHRjb25zdCBldmVudFN0YXJ0SVNPID0gcmVjdXJyaW5nRXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0XHRcdGNvbnN0IGlzRXhjbHVkZWQgPSBldmVudC5leGRhdGVzPy5pbmNsdWRlcyhldmVudFN0YXJ0SVNPKVxuXHRcdFx0XHRcdGlmIChpc0V4Y2x1ZGVkKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGaWx0ZXIgdG8gb25seSBpbmNsdWRlIGV2ZW50cyB0aGF0IHNwYW4gdGhyb3VnaCB0aGUgb3JpZ2luYWwgcmVxdWVzdGVkIGRhdGUgcmFuZ2Vcblx0XHRcdFx0Ly8gQW4gZXZlbnQgc3BhbnMgdGhlIHJhbmdlIGlmOiBldmVudF9zdGFydCA8IHJhbmdlX2VuZCBBTkQgZXZlbnRfZW5kID4gcmFuZ2Vfc3RhcnRcblx0XHRcdFx0Ly8gVXNlIGlzU2FtZU9yQmVmb3JlL2lzU2FtZU9yQWZ0ZXIgdG8gaW5jbHVkZSBib3VuZGFyeSBjYXNlc1xuXHRcdFx0XHRjb25zdCBldmVudFNwYW5zUmFuZ2UgPVxuXHRcdFx0XHRcdHJlY3VycmluZ0V2ZW50LnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpICYmXG5cdFx0XHRcdFx0cmVjdXJyaW5nRXZlbnQuZW5kLmlzU2FtZU9yQWZ0ZXIoc3RhcnREYXRlKVxuXG5cdFx0XHRcdHJldHVybiBldmVudFNwYW5zUmFuZ2Vcblx0XHRcdH0pXG5cblx0XHRyZXR1cm4gcmVjdXJyaW5nRXZlbnRzXG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gSGFuZGxlIGludmFsaWQgUlJVTEUgb3B0aW9uc1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdGBJbnZhbGlkIFJSVUxFIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkoZXZlbnQucnJ1bGUpfS4gRXJyb3I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuXHRcdClcblx0fVxufVxuXG5pbnRlcmZhY2UgVXBkYXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG5cdHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cblx0Y3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHNjb3BlOiAndGhpcycgfCAnZm9sbG93aW5nJyB8ICdhbGwnXG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVSZWN1cnJpbmdFdmVudCA9ICh7XG5cdHRhcmdldEV2ZW50LFxuXHR1cGRhdGVzLFxuXHRjdXJyZW50RXZlbnRzLFxuXHRzY29wZSxcbn06IFVwZGF0ZVJlY3VycmluZ0V2ZW50UHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmN1cnJlbnRFdmVudHNdXG5cdGNvbnN0IGJhc2VFdmVudEluZGV4ID0gZmluZEJhc2VFdmVudEluZGV4KHVwZGF0ZWRFdmVudHMsIHRhcmdldEV2ZW50KVxuXHRjb25zdCBiYXNlRXZlbnQgPSB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XVxuXG5cdHN3aXRjaCAoc2NvcGUpIHtcblx0XHRjYXNlICd0aGlzJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGV2ZW50IG9ubHlcIiAtIEFkZCBFWERBVEUgdG8gYmFzZSBldmVudCBhbmQgY3JlYXRlIHN0YW5kYWxvbmUgbW9kaWZpZWQgZXZlbnRcblx0XHRcdGNvbnN0IHRhcmdldEV2ZW50U3RhcnRJU08gPSB0YXJnZXRFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG5cdFx0XHRjb25zdCBleGlzdGluZ0V4ZGF0ZXMgPSBiYXNlRXZlbnQuZXhkYXRlcyB8fCBbXVxuXHRcdFx0Y29uc3QgdXBkYXRlZEV4ZGF0ZXMgPSBbLi4uZXhpc3RpbmdFeGRhdGVzLCB0YXJnZXRFdmVudFN0YXJ0SVNPXVxuXG5cdFx0XHRjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdGV4ZGF0ZXM6IHVwZGF0ZWRFeGRhdGVzLFxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG5cblx0XHRcdC8vIENyZWF0ZSBzdGFuZGFsb25lIG1vZGlmaWVkIGV2ZW50IHdpdGggcmVjdXJyZW5jZUlkXG5cdFx0XHRjb25zdCBtb2RpZmllZEV2ZW50SWQgPSBgJHt0YXJnZXRFdmVudC5pZH1fbW9kaWZpZWRfJHtEYXRlLm5vdygpfWBcblx0XHRcdGNvbnN0IG1vZGlmaWVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgVE9ETzogZml4IHRoZSB0eXBlc1xuXHRcdFx0XHQuLi5vbWl0S2V5cyh0YXJnZXRFdmVudCwgWyd3aWR0aCcsICdoZWlnaHQnLCAndG9wJywgJ2xlZnQnLCAncmlnaHQnXSksXG5cdFx0XHRcdC4uLnVwZGF0ZXMsXG5cdFx0XHRcdGlkOiBtb2RpZmllZEV2ZW50SWQsXG5cdFx0XHRcdHJlY3VycmVuY2VJZDogdGFyZ2V0RXZlbnRTdGFydElTTywgLy8gVGhpcyBtYXJrcyBpdCBhcyBhIG1vZGlmaWVkIGluc3RhbmNlXG5cdFx0XHRcdHVpZDogZ2V0RXZlbnRQYXJlbnRVSUQoYmFzZUV2ZW50KSwgLy8gS2VlcCBzYW1lIFVJRCBhcyBiYXNlIGV2ZW50IChpQ2FsZW5kYXIgc3RhbmRhcmQpXG5cdFx0XHRcdHJydWxlOiB1bmRlZmluZWQsIC8vIFN0YW5kYWxvbmUgZXZlbnRzIGRvbid0IGhhdmUgUlJVTEVcblx0XHRcdH0gYXMgQ2FsZW5kYXJFdmVudFxuXHRcdFx0dXBkYXRlZEV2ZW50cy5wdXNoKG1vZGlmaWVkRXZlbnQpXG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGNhc2UgJ2ZvbGxvd2luZyc6IHtcblx0XHRcdC8vIFwiVGhpcyBhbmQgZm9sbG93aW5nXCIgLSBUZXJtaW5hdGUgb3JpZ2luYWwgc2VyaWVzIGFuZCBjcmVhdGUgbmV3IHNlcmllc1xuXHRcdFx0Y29uc3QgdGVybWluYXRpb25EYXRlID0gZ2V0U2VyaWVzVGVybWluYXRpb25EYXRlKHRhcmdldEV2ZW50KVxuXG5cdFx0XHQvLyBVcGRhdGUgb3JpZ2luYWwgc2VyaWVzIHdpdGggVU5USUwgdG8gZW5kIGJlZm9yZSB0YXJnZXQgZGF0ZVxuXHRcdFx0Y29uc3QgdGVybWluYXRlZEV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdHJydWxlOiB7XG5cdFx0XHRcdFx0Li4uYmFzZUV2ZW50LnJydWxlLFxuXHRcdFx0XHRcdHVudGlsOiB0ZXJtaW5hdGlvbkRhdGUsXG5cdFx0XHRcdH0gYXMgUlJ1bGVPcHRpb25zLFxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB0ZXJtaW5hdGVkRXZlbnRcblxuXHRcdFx0Ly8gQ3JlYXRlIG5ldyBzZXJpZXMgc3RhcnRpbmcgZnJvbSB0YXJnZXQgZGF0ZVxuXHRcdFx0Y29uc3Qgb3JpZ2luYWxEdXJhdGlvbiA9IGJhc2VFdmVudC5lbmQuZGlmZihiYXNlRXZlbnQuc3RhcnQpXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNTdGFydFRpbWUgPSB1cGRhdGVzLnN0YXJ0IHx8IHRhcmdldEV2ZW50LnN0YXJ0XG5cdFx0XHRjb25zdCBuZXdTZXJpZXNFbmRUaW1lID1cblx0XHRcdFx0dXBkYXRlcy5lbmQgfHwgbmV3U2VyaWVzU3RhcnRUaW1lLmFkZChvcmlnaW5hbER1cmF0aW9uKVxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzSWQgPSBgJHtiYXNlRXZlbnQuaWR9X2ZvbGxvd2luZ2Bcblx0XHRcdGNvbnN0IG5ld1Nlcmllc1VJRCA9IGAke25ld1Nlcmllc0lkfUBpbGFteS5jYWxlbmRhcmBcblxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0Li4udXBkYXRlcyxcblx0XHRcdFx0cnJ1bGU6IHtcblx0XHRcdFx0XHQuLi5iYXNlRXZlbnQucnJ1bGUsXG5cdFx0XHRcdFx0Li4udXBkYXRlcy5ycnVsZSxcblx0XHRcdFx0XHRkdHN0YXJ0OiBuZXdTZXJpZXNTdGFydFRpbWUudG9EYXRlKCksXG5cdFx0XHRcdH0gYXMgUlJ1bGVPcHRpb25zLFxuXHRcdFx0XHRpZDogbmV3U2VyaWVzSWQsXG5cdFx0XHRcdHVpZDogbmV3U2VyaWVzVUlELCAvLyBOZXcgVUlEIGZvciBuZXcgc2VyaWVzXG5cdFx0XHRcdHN0YXJ0OiBuZXdTZXJpZXNTdGFydFRpbWUsXG5cdFx0XHRcdGVuZDogbmV3U2VyaWVzRW5kVGltZSxcblx0XHRcdFx0cmVjdXJyZW5jZUlkOiB1bmRlZmluZWQsIC8vIFRoaXMgaXMgYSBuZXcgYmFzZSBldmVudCwgbm90IGFuIGluc3RhbmNlXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzLnB1c2gobmV3U2VyaWVzRXZlbnQpXG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGNhc2UgJ2FsbCc6IHtcblx0XHRcdC8vIFwiQWxsIGV2ZW50c1wiIC0gVXBkYXRlIHRoZSBiYXNlIHJlY3VycmluZyBldmVudFxuXHRcdFx0Y29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHQuLi51cGRhdGVzLFxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdGBJbnZhbGlkIHNjb3BlOiAke3Njb3BlfS4gTXVzdCBiZSAndGhpcycsICdmb2xsb3dpbmcnLCBvciAnYWxsJ2Bcblx0XHRcdClcblx0fVxuXG5cdHJldHVybiB1cGRhdGVkRXZlbnRzXG59XG5cbmludGVyZmFjZSBEZWxldGVSZWN1cnJpbmdFdmVudFByb3BzIHtcblx0dGFyZ2V0RXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0Y3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHNjb3BlOiAndGhpcycgfCAnZm9sbG93aW5nJyB8ICdhbGwnXG59XG5cbmV4cG9ydCBjb25zdCBkZWxldGVSZWN1cnJpbmdFdmVudCA9ICh7XG5cdHRhcmdldEV2ZW50LFxuXHRjdXJyZW50RXZlbnRzLFxuXHRzY29wZSxcbn06IERlbGV0ZVJlY3VycmluZ0V2ZW50UHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmN1cnJlbnRFdmVudHNdXG5cdGNvbnN0IGJhc2VFdmVudEluZGV4ID0gZmluZEJhc2VFdmVudEluZGV4KHVwZGF0ZWRFdmVudHMsIHRhcmdldEV2ZW50KVxuXHRjb25zdCBiYXNlRXZlbnQgPSB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XVxuXG5cdHN3aXRjaCAoc2NvcGUpIHtcblx0XHRjYXNlICd0aGlzJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGV2ZW50IG9ubHlcIiAtIEFkZCBFWERBVEUgdG8gZXhjbHVkZSB0aGlzIG9jY3VycmVuY2Vcblx0XHRcdGNvbnN0IHRhcmdldEV2ZW50U3RhcnRJU08gPSB0YXJnZXRFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG5cdFx0XHRjb25zdCBleGlzdGluZ0V4ZGF0ZXMgPSBiYXNlRXZlbnQuZXhkYXRlcyB8fCBbXVxuXHRcdFx0Y29uc3QgdXBkYXRlZEV4ZGF0ZXMgPSBbLi4uZXhpc3RpbmdFeGRhdGVzLCB0YXJnZXRFdmVudFN0YXJ0SVNPXVxuXG5cdFx0XHRjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0geyAuLi5iYXNlRXZlbnQsIGV4ZGF0ZXM6IHVwZGF0ZWRFeGRhdGVzIH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdmb2xsb3dpbmcnOiB7XG5cdFx0XHQvLyBcIlRoaXMgYW5kIGZvbGxvd2luZ1wiIC0gVGVybWluYXRlIHNlcmllcyB3aXRoIFVOVElMIGJlZm9yZSB0YXJnZXQgZGF0ZVxuXHRcdFx0Y29uc3QgdGVybWluYXRlZEV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdHJydWxlOiB7XG5cdFx0XHRcdFx0Li4uYmFzZUV2ZW50LnJydWxlLFxuXHRcdFx0XHRcdHVudGlsOiBnZXRTZXJpZXNUZXJtaW5hdGlvbkRhdGUodGFyZ2V0RXZlbnQpLFxuXHRcdFx0XHR9IGFzIFJSdWxlT3B0aW9ucyxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdGVybWluYXRlZEV2ZW50XG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGNhc2UgJ2FsbCc6IHtcblx0XHRcdC8vIFwiQWxsIGV2ZW50c1wiIC0gUmVtb3ZlIHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllc1xuXHRcdFx0Y29uc3QgdGFyZ2V0VWlkID0gZ2V0RXZlbnRQYXJlbnRVSUQodGFyZ2V0RXZlbnQpXG5cdFx0XHRjb25zdCBldmVudHNXaXRob3V0VGFyZ2V0U2VyaWVzID0gdXBkYXRlZEV2ZW50cy5maWx0ZXIoXG5cdFx0XHRcdChlKSA9PiBnZXRFdmVudFBhcmVudFVJRChlKSAhPT0gdGFyZ2V0VWlkXG5cdFx0XHQpXG5cdFx0XHRyZXR1cm4gZXZlbnRzV2l0aG91dFRhcmdldFNlcmllc1xuXHRcdH1cblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdGBJbnZhbGlkIHNjb3BlOiAke3Njb3BlfS4gTXVzdCBiZSAndGhpcycsICdmb2xsb3dpbmcnLCBvciAnYWxsJ2Bcblx0XHRcdClcblx0fVxuXG5cdHJldHVybiB1cGRhdGVkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRUcmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9ucyA9IHtcblx0Ly8gQ29tbW9uIGFjdGlvbnNcblx0dG9kYXk6ICdUb2RheScsXG5cdGNyZWF0ZTogJ0NyZWF0ZScsXG5cdG5ldzogJ05ldycsXG5cdHVwZGF0ZTogJ1VwZGF0ZScsXG5cdGRlbGV0ZTogJ0RlbGV0ZScsXG5cdGNhbmNlbDogJ0NhbmNlbCcsXG5cdGV4cG9ydDogJ0V4cG9ydCcsXG5cblx0Ly8gRXZlbnQgcmVsYXRlZFxuXHRldmVudDogJ0V2ZW50Jyxcblx0ZXZlbnRzOiAnRXZlbnRzJyxcblx0bmV3RXZlbnQ6ICdOZXcgRXZlbnQnLFxuXHR0aXRsZTogJ1RpdGxlJyxcblx0ZGVzY3JpcHRpb246ICdEZXNjcmlwdGlvbicsXG5cdGxvY2F0aW9uOiAnTG9jYXRpb24nLFxuXHRhbGxEYXk6ICdBbGwgZGF5Jyxcblx0c3RhcnREYXRlOiAnU3RhcnQgRGF0ZScsXG5cdGVuZERhdGU6ICdFbmQgRGF0ZScsXG5cdHN0YXJ0VGltZTogJ1N0YXJ0IFRpbWUnLFxuXHRzZWFyY2hUaW1lOiAnU2VhcmNoIHRpbWUuLi4nLFxuXHRlbmRUaW1lOiAnRW5kIFRpbWUnLFxuXHRjb2xvcjogJ0NvbG9yJyxcblxuXHQvLyBFdmVudCBmb3JtXG5cdGNyZWF0ZUV2ZW50OiAnQ3JlYXRlIEV2ZW50Jyxcblx0ZWRpdEV2ZW50OiAnRWRpdCBFdmVudCcsXG5cdGFkZE5ld0V2ZW50OiAnQWRkIGEgbmV3IGV2ZW50IHRvIHlvdXIgY2FsZW5kYXInLFxuXHRlZGl0RXZlbnREZXRhaWxzOiAnRWRpdCB5b3VyIGV2ZW50IGRldGFpbHMnLFxuXHRldmVudFRpdGxlUGxhY2Vob2xkZXI6ICdFdmVudCB0aXRsZScsXG5cdGV2ZW50RGVzY3JpcHRpb25QbGFjZWhvbGRlcjogJ0V2ZW50IGRlc2NyaXB0aW9uIChvcHRpb25hbCknLFxuXHRldmVudExvY2F0aW9uUGxhY2Vob2xkZXI6ICdFdmVudCBsb2NhdGlvbiAob3B0aW9uYWwpJyxcblxuXHQvLyBSZWN1cnJlbmNlXG5cdHJlcGVhdDogJ1JlcGVhdCcsXG5cdHJlcGVhdHM6ICdSZXBlYXRzJyxcblx0Y3VzdG9tUmVjdXJyZW5jZTogJ0N1c3RvbSByZWN1cnJlbmNlJyxcblx0ZGFpbHk6ICdEYWlseScsXG5cdHdlZWtseTogJ1dlZWtseScsXG5cdG1vbnRobHk6ICdNb250aGx5Jyxcblx0eWVhcmx5OiAnWWVhcmx5Jyxcblx0aW50ZXJ2YWw6ICdJbnRlcnZhbCcsXG5cdHJlcGVhdE9uOiAnUmVwZWF0IG9uJyxcblx0bmV2ZXI6ICdOZXZlcicsXG5cdGNvdW50OiAnQ291bnQnLFxuXHRldmVyeTogJ0V2ZXJ5Jyxcblx0ZW5kczogJ0VuZHMnLFxuXHRhZnRlcjogJ0FmdGVyJyxcblx0b2NjdXJyZW5jZXM6ICdvY2N1cnJlbmNlcycsXG5cdG9uOiAnT24nLFxuXG5cdC8vIFJlY3VycmVuY2UgZWRpdCBkaWFsb2dcblx0ZWRpdFJlY3VycmluZ0V2ZW50OiAnRWRpdCByZWN1cnJpbmcgZXZlbnQnLFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudDogJ0RlbGV0ZSByZWN1cnJpbmcgZXZlbnQnLFxuXHRlZGl0UmVjdXJyaW5nRXZlbnRRdWVzdGlvbjpcblx0XHQnaXMgYSByZWN1cnJpbmcgZXZlbnQuIEhvdyB3b3VsZCB5b3UgbGlrZSB0byBlZGl0IGl0PycsXG5cdGRlbGV0ZVJlY3VycmluZ0V2ZW50UXVlc3Rpb246XG5cdFx0J2lzIGEgcmVjdXJyaW5nIGV2ZW50LiBIb3cgd291bGQgeW91IGxpa2UgdG8gZGVsZXRlIGl0PycsXG5cdHRoaXNFdmVudDogJ1RoaXMgZXZlbnQnLFxuXHR0aGlzRXZlbnREZXNjcmlwdGlvbjogJ09ubHkgY2hhbmdlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG5cdHRoaXNBbmRGb2xsb3dpbmdFdmVudHM6ICdUaGlzIGFuZCBmb2xsb3dpbmcgZXZlbnRzJyxcblx0dGhpc0FuZEZvbGxvd2luZ0V2ZW50c0Rlc2NyaXB0aW9uOiAnRWRpdCB0aGlzIGFuZCBhbGwgZnV0dXJlIG9jY3VycmVuY2VzJyxcblx0YWxsRXZlbnRzOiAnQWxsIGV2ZW50cycsXG5cdGFsbEV2ZW50c0Rlc2NyaXB0aW9uOiAnRWRpdCB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuXHRvbmx5Q2hhbmdlVGhpczogJ09ubHkgY2hhbmdlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG5cdGNoYW5nZVRoaXNBbmRGdXR1cmU6ICdDaGFuZ2UgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG5cdGNoYW5nZUVudGlyZVNlcmllczogJ0NoYW5nZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuXHRvbmx5RGVsZXRlVGhpczogJ09ubHkgZGVsZXRlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG5cdGRlbGV0ZVRoaXNBbmRGdXR1cmU6ICdEZWxldGUgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG5cdGRlbGV0ZUVudGlyZVNlcmllczogJ0RlbGV0ZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuXG5cdC8vIFZpZXcgdHlwZXNcblx0bW9udGg6ICdNb250aCcsXG5cdHdlZWs6ICdXZWVrJyxcblx0ZGF5OiAnRGF5Jyxcblx0eWVhcjogJ1llYXInLFxuXHRtb3JlOiAnbW9yZScsXG5cblx0Ly8gUmVzb3VyY2UgY2FsZW5kYXJcblx0cmVzb3VyY2VzOiAnUmVzb3VyY2VzJyxcblx0cmVzb3VyY2U6ICdSZXNvdXJjZScsXG5cdHRpbWU6ICdUaW1lJyxcblx0ZGF0ZTogJ0RhdGUnLFxuXHRub1Jlc291cmNlc1Zpc2libGU6ICdObyByZXNvdXJjZXMgdmlzaWJsZScsXG5cdGFkZFJlc291cmNlc09yU2hvd0V4aXN0aW5nOiAnQWRkIHJlc291cmNlcyBvciBzaG93IGV4aXN0aW5nIG9uZXMnLFxuXG5cdC8vIERheXMgb2Ygd2Vla1xuXHRzdW5kYXk6ICdTdW5kYXknLFxuXHRtb25kYXk6ICdNb25kYXknLFxuXHR0dWVzZGF5OiAnVHVlc2RheScsXG5cdHdlZG5lc2RheTogJ1dlZG5lc2RheScsXG5cdHRodXJzZGF5OiAnVGh1cnNkYXknLFxuXHRmcmlkYXk6ICdGcmlkYXknLFxuXHRzYXR1cmRheTogJ1NhdHVyZGF5JyxcblxuXHQvLyBEYXlzIHNob3J0XG5cdHN1bjogJ1N1bicsXG5cdG1vbjogJ01vbicsXG5cdHR1ZTogJ1R1ZScsXG5cdHdlZDogJ1dlZCcsXG5cdHRodTogJ1RodScsXG5cdGZyaTogJ0ZyaScsXG5cdHNhdDogJ1NhdCcsXG5cblx0Ly8gTW9udGhzXG5cdGphbnVhcnk6ICdKYW51YXJ5Jyxcblx0ZmVicnVhcnk6ICdGZWJydWFyeScsXG5cdG1hcmNoOiAnTWFyY2gnLFxuXHRhcHJpbDogJ0FwcmlsJyxcblx0bWF5OiAnTWF5Jyxcblx0anVuZTogJ0p1bmUnLFxuXHRqdWx5OiAnSnVseScsXG5cdGF1Z3VzdDogJ0F1Z3VzdCcsXG5cdHNlcHRlbWJlcjogJ1NlcHRlbWJlcicsXG5cdG9jdG9iZXI6ICdPY3RvYmVyJyxcblx0bm92ZW1iZXI6ICdOb3ZlbWJlcicsXG5cdGRlY2VtYmVyOiAnRGVjZW1iZXInLFxufVxuIiwKICAgICJpbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG4vKiogV2hldGhlciB0aGUgZ2l2ZW4gZGF0ZSBmYWxscyBvbiB0b2RheSAoY2FsZW5kYXIgZGF5LCByZXNwZWN0aW5nIHRpbWV6b25lKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RvZGF5KGRhdGU6IERheWpzKTogYm9vbGVhbiB7XG5cdHJldHVybiBkYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5Jylcbn1cblxuLyoqIGBZWVlZLU1NLUREYCBzdHJpbmcgdXNlZCBhcyBhIHN0YWJsZSBwZXItZGF5IGtleSBhY3Jvc3MgdGhlIGNvZGViYXNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERheUtleShkYXRlOiBEYXlqcyk6IHN0cmluZyB7XG5cdHJldHVybiBkYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpXG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgd2VlayBkYXlzIGZvciBhIGdpdmVuIGRhdGUgYW5kIGZpcnN0IGRheSBvZiB3ZWVrIHNldHRpbmcuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlIGN1cnJlbnQgZGF0ZSBpcyBhbHdheXMgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIHdlZWssXG4gKiBldmVuIHdoZW4gdGhlIGZpcnN0IGRheSBvZiB3ZWVrIGlzIHNldCB0byBhIGRheSBhZnRlciB0aGUgY3VycmVudCBkYXRlLlxuICpcbiAqIEBwYXJhbSBjdXJyZW50RGF0ZSAtIFRoZSByZWZlcmVuY2UgZGF0ZSBmb3IgY2FsY3VsYXRpbmcgdGhlIHdlZWtcbiAqIEBwYXJhbSBmaXJzdERheU9mV2VlayAtIFRoZSBkYXkgbnVtYmVyICgwLTYpIHJlcHJlc2VudGluZyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwID0gU3VuZGF5LCAxID0gTW9uZGF5LCBldGMuKVxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgNyBkYXlqcyBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgd2VlayBkYXlzLCBzdGFydGluZyBmcm9tIGZpcnN0RGF5T2ZXZWVrXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdldCB3ZWVrIHN0YXJ0aW5nIGZyb20gTW9uZGF5IGZvciBjdXJyZW50IGRhdGVcbiAqIGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoZGF5anMoJzIwMjUtMTAtMTMnKSwgMSlcbiAqIC8vIFJldHVybnM6IFtNb24gT2N0IDEzLCBUdWUgT2N0IDE0LCAuLi4sIFN1biBPY3QgMTldXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdldCB3ZWVrIHN0YXJ0aW5nIGZyb20gV2VkbmVzZGF5IHdoZW4gY3VycmVudCBkYXRlIGlzIE1vbmRheVxuICogY29uc3Qgd2Vla0RheXMgPSBnZXRXZWVrRGF5cyhkYXlqcygnMjAyNS0xMC0xMycpLCAzKVxuICogLy8gUmV0dXJuczogW1dlZCBPY3QgOCwgVGh1IE9jdCA5LCAuLi4sIFR1ZSBPY3QgMTRdIChpbmNsdWRlcyBNb25kYXkgT2N0IDEzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2Vla0RheXMoXG5cdGN1cnJlbnREYXRlOiBEYXlqcyxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuKTogRGF5anNbXSB7XG5cdGNvbnN0IHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlID0gY3VycmVudERhdGVcblx0XHQuc3RhcnRPZignd2VlaycpXG5cdFx0LmRheShmaXJzdERheU9mV2VlaylcblxuXHRjb25zdCBhZGp1c3RlZFN0YXJ0T2ZXZWVrID0gY3VycmVudERhdGUuaXNCZWZvcmUoc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGUpXG5cdFx0PyBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZS5zdWJ0cmFjdCgxLCAnd2VlaycpXG5cdFx0OiBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZVxuXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiA3IH0sIChfLCBkYXlJbmRleCkgPT5cblx0XHRhZGp1c3RlZFN0YXJ0T2ZXZWVrLmFkZChkYXlJbmRleCwgJ2RheScpXG5cdClcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgNiB3ZWVrcyBvZiBkYXlzIGZvciBhIG1vbnRoIGNhbGVuZGFyIHZpZXcuXG4gKiBBbHdheXMgcmV0dXJucyA0MiBkYXlzICg2IHdlZWtzIMOXIDcgZGF5cykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb250aFdlZWtzKFxuXHRtb250aERhdGU6IERheWpzLFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG4pOiBEYXlqc1tdW10ge1xuXHRjb25zdCBmaXJzdFdlZWsgPSBnZXRXZWVrRGF5cyhtb250aERhdGUuc3RhcnRPZignbW9udGgnKSwgZmlyc3REYXlPZldlZWspXG5cblx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDYgfSwgKF8sIHdlZWtJbmRleCkgPT4ge1xuXHRcdGNvbnN0IHdlZWtTdGFydCA9IGZpcnN0V2Vla1swXS5hZGQod2Vla0luZGV4LCAnd2VlaycpXG5cdFx0cmV0dXJuIGdldFdlZWtEYXlzKHdlZWtTdGFydCwgZmlyc3REYXlPZldlZWspXG5cdH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb250aERheXMobW9udGhEYXRlOiBEYXlqcyk6IERheWpzW10ge1xuXHRjb25zdCBkYXlzSW5Nb250aCA9IG1vbnRoRGF0ZS5kYXlzSW5Nb250aCgpXG5cdGNvbnN0IHN0YXJ0T2ZNb250aCA9IG1vbnRoRGF0ZS5zdGFydE9mKCdtb250aCcpXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBkYXlzSW5Nb250aCB9LCAoXywgaSkgPT5cblx0XHRzdGFydE9mTW9udGguYWRkKGksICdkYXknKVxuXHQpXG59XG5cbmludGVyZmFjZSBHZXREYXlIb3Vyc09wdGlvbnMge1xuXHRyZWZlcmVuY2VEYXRlPzogRGF5anNcblx0bGVuZ3RoPzogbnVtYmVyXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGFuIGFycmF5IG9mIDI0IGRheWpzIG9iamVjdHMgcmVwcmVzZW50aW5nIGhvdXJseSBzbG90cyBmb3IgYSBkYXkuXG4gKiBVc2VzIC5ob3VyKGkpIHNvIGVhY2ggcm93IG1hcHMgdG8gXCJ0aGUgaG91ciBsYWJlbGVkIGlcIiDigJQga2VlcGluZyBncmlkIHJvd3NcbiAqIGFsaWduZWQgYWNyb3NzIGNvbHVtbnMgaW4gd2VlayB2aWV3cy4gT24gRFNUIHNwcmluZy1mb3J3YXJkLCAuaG91cigyKSByZXR1cm5zXG4gKiAzIEFNICh0aGUgbm9uLWV4aXN0ZW50IGhvdXIgaXMgY29sbGFwc2VkKSwgYnV0IHRoZSBncmlkIGtleSBmaXggKGRheUluZGV4KVxuICogYW5kIHBlci1kYXkgZ2VuZXJhdGlvbiBpbiB2aWV3cyBoYW5kbGUgdGhpcyBjb3JyZWN0bHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXlIb3Vycyh7XG5cdHJlZmVyZW5jZURhdGUgPSBkYXlqcygpLFxuXHRsZW5ndGggPSAyNCxcbn06IEdldERheUhvdXJzT3B0aW9ucyA9IHt9KTogRGF5anNbXSB7XG5cdGNvbnN0IHN0YXJ0T2ZEYXkgPSByZWZlcmVuY2VEYXRlLnN0YXJ0T2YoJ2RheScpXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoIH0sIChfLCBpKSA9PlxuXHRcdHN0YXJ0T2ZEYXkuaG91cihpKS5taW51dGUoMCkuc2Vjb25kKDApLm1pbGxpc2Vjb25kKDApXG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG4vKipcbiAqIEtlZXAgb25seSBldmVudHMgd2hvc2UgaWQgYXBwZWFycyBpbiBgcmVzb3VyY2VFdmVudHNgLiBJZHMgYXJlIGNvbXBhcmVkIGFzXG4gKiBzdHJpbmdzIHNvIG51bWVyaWMvc3RyaW5nIG1pc21hdGNoZXMgYmV0d2VlbiBzb3VyY2VzIGRvbid0IGNhdXNlIGZhbHNlXG4gKiBuZWdhdGl2ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJFdmVudHNCeVJlc291cmNlKFxuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcblx0cmVzb3VyY2VFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuKTogQ2FsZW5kYXJFdmVudFtdIHtcblx0Y29uc3QgaWRzID0gbmV3IFNldChyZXNvdXJjZUV2ZW50cy5tYXAoKGUpID0+IFN0cmluZyhlLmlkKSkpXG5cdHJldHVybiBldmVudHMuZmlsdGVyKChldmVudCkgPT4gaWRzLmhhcyhTdHJpbmcoZXZlbnQuaWQpKSlcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGFuIGV2ZW50J3MgaW50ZXJ2YWwgb3ZlcmxhcHMgd2l0aCB0aGUgYFtzdGFydCwgZW5kXWAgcmFuZ2VcbiAqIChpbmNsdXNpdmUpLiBDb3ZlcnMgdGhlIHRocmVlIGNhc2VzOiBzdGFydHMgaW5zaWRlIHRoZSByYW5nZSwgZW5kcyBpbnNpZGVcbiAqIHRoZSByYW5nZSwgb3IgZnVsbHkgc3BhbnMgdGhlIHJhbmdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXZlbnRPdmVybGFwc1JhbmdlKFxuXHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0c3RhcnQ6IERheWpzLFxuXHRlbmQ6IERheWpzXG4pOiBib29sZWFuIHtcblx0Y29uc3Qgc3RhcnRzSW5SYW5nZSA9XG5cdFx0ZXZlbnQuc3RhcnQuaXNTYW1lT3JBZnRlcihzdGFydCkgJiYgZXZlbnQuc3RhcnQuaXNTYW1lT3JCZWZvcmUoZW5kKVxuXHRjb25zdCBlbmRzSW5SYW5nZSA9XG5cdFx0ZXZlbnQuZW5kLmlzU2FtZU9yQWZ0ZXIoc3RhcnQpICYmIGV2ZW50LmVuZC5pc1NhbWVPckJlZm9yZShlbmQpXG5cdGNvbnN0IHNwYW5zUmFuZ2UgPSBldmVudC5zdGFydC5pc0JlZm9yZShzdGFydCkgJiYgZXZlbnQuZW5kLmlzQWZ0ZXIoZW5kKVxuXHRyZXR1cm4gc3RhcnRzSW5SYW5nZSB8fCBlbmRzSW5SYW5nZSB8fCBzcGFuc1JhbmdlXG59XG4iLAogICAgImltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQge1xuXHREaWFsb2csXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0Rlc2NyaXB0aW9uLFxuXHREaWFsb2dGb290ZXIsXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nVGl0bGUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9kaWFsb2cnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmNvbnN0IFNDT1BFUyA9IFtcblx0e1xuXHRcdHNjb3BlOiAndGhpcycsXG5cdFx0dGl0bGU6ICd0aGlzRXZlbnQnLFxuXHRcdGVkaXRLZXk6ICdvbmx5Q2hhbmdlVGhpcycsXG5cdFx0ZGVsZXRlS2V5OiAnb25seURlbGV0ZVRoaXMnLFxuXHR9LFxuXHR7XG5cdFx0c2NvcGU6ICdmb2xsb3dpbmcnLFxuXHRcdHRpdGxlOiAndGhpc0FuZEZvbGxvd2luZ0V2ZW50cycsXG5cdFx0ZWRpdEtleTogJ2NoYW5nZVRoaXNBbmRGdXR1cmUnLFxuXHRcdGRlbGV0ZUtleTogJ2RlbGV0ZVRoaXNBbmRGdXR1cmUnLFxuXHR9LFxuXHR7XG5cdFx0c2NvcGU6ICdhbGwnLFxuXHRcdHRpdGxlOiAnYWxsRXZlbnRzJyxcblx0XHRlZGl0S2V5OiAnY2hhbmdlRW50aXJlU2VyaWVzJyxcblx0XHRkZWxldGVLZXk6ICdkZWxldGVFbnRpcmVTZXJpZXMnLFxuXHR9LFxuXSBhcyBjb25zdFxuXG5pbnRlcmZhY2UgUmVjdXJyZW5jZUVkaXREaWFsb2dQcm9wcyB7XG5cdGlzT3BlbjogYm9vbGVhblxuXHRvbkNsb3NlOiAoKSA9PiB2b2lkXG5cdG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB2b2lkXG5cdG9wZXJhdGlvblR5cGU6ICdlZGl0JyB8ICdkZWxldGUnXG5cdGV2ZW50VGl0bGU6IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVjdXJyZW5jZUVkaXREaWFsb2coe1xuXHRpc09wZW4sXG5cdG9uQ2xvc2UsXG5cdG9uQ29uZmlybSxcblx0b3BlcmF0aW9uVHlwZSxcblx0ZXZlbnRUaXRsZSxcbn06IFJlY3VycmVuY2VFZGl0RGlhbG9nUHJvcHMpIHtcblx0Y29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHsgdDogY29udGV4dC50IH0pKVxuXG5cdGNvbnN0IGhhbmRsZVNjb3BlU2VsZWN0ID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0b25Db25maXJtKHNjb3BlKVxuXHRcdG9uQ2xvc2UoKVxuXHR9XG5cblx0Y29uc3QgaXNFZGl0ID0gb3BlcmF0aW9uVHlwZSA9PT0gJ2VkaXQnXG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17b25DbG9zZX0gb3Blbj17aXNPcGVufT5cblx0XHRcdDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cIm1heC13LW1kXCI+XG5cdFx0XHRcdDxEaWFsb2dIZWFkZXI+XG5cdFx0XHRcdFx0PERpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdFx0e2lzRWRpdCA/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudCcpIDogdCgnZGVsZXRlUmVjdXJyaW5nRXZlbnQnKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdDxEaWFsb2dEZXNjcmlwdGlvbj5cblx0XHRcdFx0XHRcdFwie2V2ZW50VGl0bGV9XCJ7JyAnfVxuXHRcdFx0XHRcdFx0e2lzRWRpdFxuXHRcdFx0XHRcdFx0XHQ/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJylcblx0XHRcdFx0XHRcdFx0OiB0KCdkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dEZXNjcmlwdGlvbj5cblx0XHRcdFx0PC9EaWFsb2dIZWFkZXI+XG5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTNcIj5cblx0XHRcdFx0XHR7U0NPUEVTLm1hcCgoeyBzY29wZSwgdGl0bGUsIGVkaXRLZXksIGRlbGV0ZUtleSB9KSA9PiAoXG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuXHRcdFx0XHRcdFx0XHRrZXk9e3Njb3BlfVxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTY29wZVNlbGVjdChzY29wZSl9XG5cdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e3QodGl0bGUpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHt0KGlzRWRpdCA/IGVkaXRLZXkgOiBkZWxldGVLZXkpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdCkpfVxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHQ8RGlhbG9nRm9vdGVyPlxuXHRcdFx0XHRcdDxCdXR0b24gb25DbGljaz17b25DbG9zZX0gdmFyaWFudD1cIm91dGxpbmVcIj5cblx0XHRcdFx0XHRcdHt0KCdjYW5jZWwnKX1cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0PC9EaWFsb2dGb290ZXI+XG5cdFx0XHQ8L0RpYWxvZ0NvbnRlbnQ+XG5cdFx0PC9EaWFsb2c+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBEcmFnRW5kRXZlbnQgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJy4uL3R5cGVzJ1xuXG5pbnRlcmZhY2UgRHJvcENlbGxEYXRhIHtcblx0dHlwZT86IHN0cmluZ1xuXHRkYXRlPzogc3RyaW5nXG5cdGhvdXI/OiBudW1iZXJcblx0bWludXRlPzogbnVtYmVyXG5cdHJlc291cmNlSWQ/OiBzdHJpbmdcblx0YWxsRGF5PzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgZ2V0VXBkYXRlZEV2ZW50ID0gKFxuXHRldmVudDogRHJhZ0VuZEV2ZW50LFxuXHRhY3RpdmVFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcbikgPT4ge1xuXHRjb25zdCB7IGFjdGl2ZSwgb3ZlciB9ID0gZXZlbnRcblxuXHRpZiAoIWFjdGl2ZSB8fCAhb3ZlciB8fCAhYWN0aXZlRXZlbnQpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cblx0Y29uc3QgZGF0YSA9IChvdmVyLmRhdGEuY3VycmVudCB8fCB7fSkgYXMgRHJvcENlbGxEYXRhXG5cdGNvbnN0IGlzVGltZUNlbGwgPSBkYXRhLnR5cGUgPT09ICd0aW1lLWNlbGwnXG5cdGNvbnN0IHsgcmVzb3VyY2VJZCwgYWxsRGF5IH0gPSBkYXRhXG5cdGxldCBuZXdTdGFydDogRGF5anNcblxuXHRpZiAoaXNUaW1lQ2VsbCkge1xuXHRcdGNvbnN0IHsgZGF0ZSwgaG91ciA9IDAsIG1pbnV0ZSA9IDAgfSA9IGRhdGFcblxuXHRcdC8vIENyZWF0ZSBuZXcgc3RhcnQgdGltZSBiYXNlZCBvbiB0aGUgZHJvcCB0YXJnZXRcblx0XHRuZXdTdGFydCA9IGRheWpzKGRhdGUpLmhvdXIoaG91cikubWludXRlKG1pbnV0ZSlcblx0fSBlbHNlIHtcblx0XHRjb25zdCB7IGRhdGUgfSA9IGRhdGFcblxuXHRcdG5ld1N0YXJ0ID0gZGF5anMoZGF0ZSlcblx0fVxuXG5cdGNvbnN0IGV2ZW50RHVyYXRpb24gPSBhY3RpdmVFdmVudC5lbmQuZGlmZihhY3RpdmVFdmVudC5zdGFydCwgJ3NlY29uZCcpXG5cblx0Ly8gQ3JlYXRlIG5ldyBlbmQgdGltZSBieSBhZGRpbmcgdGhlIG9yaWdpbmFsIGR1cmF0aW9uXG5cdGxldCBuZXdFbmQgPSBuZXdTdGFydC5hZGQoZXZlbnREdXJhdGlvbiwgJ3NlY29uZCcpXG5cblx0aWYgKG5ld0VuZC5pc1NhbWUobmV3RW5kLnN0YXJ0T2YoJ2RheScpKSkge1xuXHRcdC8vIElmIHRoZSBuZXcgZW5kIHRpbWUgaXMgYXQgbWlkbmlnaHQsIHNldCBpdCB0byAyNCBob3VycyBvZiBwYXJ0aWFsIGRheVxuXHRcdG5ld0VuZCA9IG5ld0VuZC5zdWJ0cmFjdCgxLCAnZGF5JykuZW5kT2YoJ2RheScpXG5cdH1cblxuXHQvLyBVcGRhdGUgdGhlIGV2ZW50IHdpdGggbmV3IHRpbWVzIGFuZCByZXNvdXJjZSBpZiBjaGFuZ2VkXG5cdGNvbnN0IHVwZGF0ZXMgPSB7XG5cdFx0c3RhcnQ6IG5ld1N0YXJ0LFxuXHRcdGVuZDogbmV3RW5kLFxuXHRcdHJlc291cmNlSWQsXG5cdFx0YWxsRGF5OiBpc1RpbWVDZWxsID8gZmFsc2UgOiAoYWxsRGF5ID8/IGFjdGl2ZUV2ZW50LmFsbERheSksXG5cdH1cblx0cmV0dXJuIHsgYWN0aXZlRXZlbnQsIHVwZGF0ZXMgfVxufVxuIiwKICAgICJpbXBvcnQgeyBEcmFnT3ZlcmxheSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgeyBzbmFwQ2VudGVyVG9DdXJzb3IgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi4vdHlwZXMnXG5cbmludGVyZmFjZSBFdmVudERyYWdPdmVybGF5UHJvcHMge1xuXHRyZWY6IFJlYWN0LlJlZjx7IHNldEFjdGl2ZUV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWQgfT5cbn1cblxuZXhwb3J0IGNvbnN0IEV2ZW50RHJhZ092ZXJsYXk6IFJlYWN0LkZDPEV2ZW50RHJhZ092ZXJsYXlQcm9wcz4gPSAoeyByZWYgfSkgPT4ge1xuXHRjb25zdCBbYWN0aXZlRXZlbnQsIHNldEFjdGl2ZUV2ZW50XSA9IHVzZVN0YXRlPENhbGVuZGFyRXZlbnQgfCBudWxsPihudWxsKVxuXG5cdHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuXHRcdHNldEFjdGl2ZUV2ZW50LFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxEcmFnT3ZlcmxheSBtb2RpZmllcnM9e1tzbmFwQ2VudGVyVG9DdXJzb3JdfT5cblx0XHRcdHthY3RpdmVFdmVudCAmJiAoXG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2N1cnNvci1ncmFiIHRydW5jYXRlIHJvdW5kZWQgYmctYW1iZXItMjAwIHAtMiB0ZXh0LVsxMHB4XSBzaGFkb3ctbGcgc206dGV4dC14cyB3LTIwJyxcblx0XHRcdFx0XHRcdGFjdGl2ZUV2ZW50LmJhY2tncm91bmRDb2xvciB8fCAnYmctYmx1ZS01MDAnLFxuXHRcdFx0XHRcdFx0YWN0aXZlRXZlbnQuY29sb3IgfHwgJ3RleHQtd2hpdGUnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHthY3RpdmVFdmVudD8udGl0bGV9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KX1cblx0XHQ8L0RyYWdPdmVybGF5PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NoZWNrYm94J1xuaW1wb3J0IHsgRGF0ZVBpY2tlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9kYXRlLXBpY2tlcidcbmltcG9ydCB7IERpYWxvZ0Zvb3RlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9kaWFsb2cnXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9pbnB1dCdcbmltcG9ydCB7IExhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2xhYmVsJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IFRpbWVQaWNrZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvdGltZS1waWNrZXInXG5pbXBvcnQgeyBpc0J1c2luZXNzRGF5IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3VycydcbmltcG9ydCB7XG5cdGJ1aWxkRGF0ZVRpbWUsXG5cdGJ1aWxkRW5kRGF0ZVRpbWUsXG5cdGdldFRpbWVDb25zdHJhaW50cyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9ldmVudC1mb3JtLXV0aWxzJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXREaWFsb2cgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXRvciB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdG9yL3JlY3VycmVuY2UtZWRpdG9yJ1xuaW1wb3J0IHsgdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucydcbmltcG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgaXNSZWN1cnJpbmdFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgeyB1c2VFZmZlY3RpdmVCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9ob29rcy91c2UtZWZmZWN0aXZlLWJ1c2luZXNzLWhvdXJzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgQ09MT1JfT1BUSU9OUyA9IFtcblx0eyB2YWx1ZTogJ2JnLWJsdWUtMTAwIHRleHQtYmx1ZS04MDAnLCBsYWJlbDogJ0JsdWUnIH0sXG5cdHsgdmFsdWU6ICdiZy1ncmVlbi0xMDAgdGV4dC1ncmVlbi04MDAnLCBsYWJlbDogJ0dyZWVuJyB9LFxuXHR7IHZhbHVlOiAnYmctcHVycGxlLTEwMCB0ZXh0LXB1cnBsZS04MDAnLCBsYWJlbDogJ1B1cnBsZScgfSxcblx0eyB2YWx1ZTogJ2JnLXJlZC0xMDAgdGV4dC1yZWQtODAwJywgbGFiZWw6ICdSZWQnIH0sXG5cdHsgdmFsdWU6ICdiZy15ZWxsb3ctMTAwIHRleHQteWVsbG93LTgwMCcsIGxhYmVsOiAnWWVsbG93JyB9LFxuXHR7IHZhbHVlOiAnYmctcGluay0xMDAgdGV4dC1waW5rLTgwMCcsIGxhYmVsOiAnUGluaycgfSxcblx0eyB2YWx1ZTogJ2JnLWluZGlnby0xMDAgdGV4dC1pbmRpZ28tODAwJywgbGFiZWw6ICdJbmRpZ28nIH0sXG5cdHsgdmFsdWU6ICdiZy1hbWJlci0xMDAgdGV4dC1hbWJlci04MDAnLCBsYWJlbDogJ0FtYmVyJyB9LFxuXHR7IHZhbHVlOiAnYmctZW1lcmFsZC0xMDAgdGV4dC1lbWVyYWxkLTgwMCcsIGxhYmVsOiAnRW1lcmFsZCcgfSxcblx0eyB2YWx1ZTogJ2JnLXNreS0xMDAgdGV4dC1za3ktODAwJywgbGFiZWw6ICdTa3knIH0sXG5cdHsgdmFsdWU6ICdiZy12aW9sZXQtMTAwIHRleHQtdmlvbGV0LTgwMCcsIGxhYmVsOiAnVmlvbGV0JyB9LFxuXHR7IHZhbHVlOiAnYmctcm9zZS0xMDAgdGV4dC1yb3NlLTgwMCcsIGxhYmVsOiAnUm9zZScgfSxcblx0eyB2YWx1ZTogJ2JnLXRlYWwtMTAwIHRleHQtdGVhbC04MDAnLCBsYWJlbDogJ1RlYWwnIH0sXG5cdHsgdmFsdWU6ICdiZy1vcmFuZ2UtMTAwIHRleHQtb3JhbmdlLTgwMCcsIGxhYmVsOiAnT3JhbmdlJyB9LFxuXVxuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50Rm9ybVByb3BzIHtcblx0b3Blbj86IGJvb2xlYW5cblx0c2VsZWN0ZWRFdmVudD86IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdG9uQWRkPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uVXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uQ2xvc2U6ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IEV2ZW50Rm9ybTogUmVhY3QuRkM8RXZlbnRGb3JtUHJvcHM+ID0gKHtcblx0c2VsZWN0ZWRFdmVudCxcblx0b25DbG9zZSxcblx0b25VcGRhdGUsXG5cdG9uRGVsZXRlLFxuXHRvbkFkZCxcbn0pID0+IHtcblx0Y29uc3Qge1xuXHRcdGRpYWxvZ1N0YXRlLFxuXHRcdG9wZW5FZGl0RGlhbG9nLFxuXHRcdG9wZW5EZWxldGVEaWFsb2csXG5cdFx0Y2xvc2VEaWFsb2csXG5cdFx0aGFuZGxlQ29uZmlybSxcblx0fSA9IHVzZVJlY3VycmluZ0V2ZW50QWN0aW9ucyhvbkNsb3NlKVxuXG5cdGNvbnN0IHsgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LCB0LCB0aW1lRm9ybWF0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dChcblx0XHQoY29udGV4dCkgPT4gKHtcblx0XHRcdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudDogY29udGV4dC5maW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG5cdFx0XHR0OiBjb250ZXh0LnQsXG5cdFx0XHR0aW1lRm9ybWF0OiBjb250ZXh0LnRpbWVGb3JtYXQsXG5cdFx0fSlcblx0KVxuXHRjb25zdCBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzID0gdXNlRWZmZWN0aXZlQnVzaW5lc3NIb3Vycyhcblx0XHRzZWxlY3RlZEV2ZW50Py5yZXNvdXJjZUlkXG5cdClcblxuXHRjb25zdCBzdGFydCA9IHNlbGVjdGVkRXZlbnQ/LnN0YXJ0ID8/IGRheWpzKClcblx0Y29uc3QgZW5kID0gc2VsZWN0ZWRFdmVudD8uZW5kID8/IGRheWpzKCkuYWRkKDEsICdob3VyJylcblxuXHQvLyBGaW5kIHBhcmVudCBldmVudCBpZiB0aGlzIGlzIGEgcmVjdXJyaW5nIGV2ZW50IGluc3RhbmNlXG5cdGNvbnN0IHBhcmVudEV2ZW50ID0gc2VsZWN0ZWRFdmVudFxuXHRcdD8gZmluZFBhcmVudFJlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpXG5cdFx0OiBudWxsXG5cblx0Ly8gRm9ybSBzdGF0ZVxuXHRjb25zdCBbc3RhcnREYXRlLCBzZXRTdGFydERhdGVdID0gdXNlU3RhdGUoc3RhcnQudG9EYXRlKCkpXG5cdGNvbnN0IFtlbmREYXRlLCBzZXRFbmREYXRlXSA9IHVzZVN0YXRlKGVuZC50b0RhdGUoKSlcblx0Y29uc3QgW2lzQWxsRGF5LCBzZXRJc0FsbERheV0gPSB1c2VTdGF0ZShzZWxlY3RlZEV2ZW50Py5hbGxEYXkgfHwgZmFsc2UpXG5cdGNvbnN0IFtzZWxlY3RlZENvbG9yLCBzZXRTZWxlY3RlZENvbG9yXSA9IHVzZVN0YXRlKFxuXHRcdHNlbGVjdGVkRXZlbnQ/LmNvbG9yIHx8IENPTE9SX09QVElPTlNbMF0udmFsdWVcblx0KVxuXG5cdC8vIFRpbWUgc3RhdGVcblx0Y29uc3QgW3N0YXJ0VGltZSwgc2V0U3RhcnRUaW1lXSA9IHVzZVN0YXRlKHN0YXJ0LmZvcm1hdCgnSEg6bW0nKSlcblx0Y29uc3QgW2VuZFRpbWUsIHNldEVuZFRpbWVdID0gdXNlU3RhdGUoZW5kLmZvcm1hdCgnSEg6bW0nKSlcblxuXHQvLyBJbml0aWFsaXplIGZvcm0gdmFsdWVzIGZyb20gc2VsZWN0ZWQgZXZlbnQgb3IgZGVmYXVsdHNcblx0Y29uc3QgW2Zvcm1WYWx1ZXMsIHNldEZvcm1WYWx1ZXNdID0gdXNlU3RhdGUoe1xuXHRcdHRpdGxlOiBzZWxlY3RlZEV2ZW50Py50aXRsZSB8fCAnJyxcblx0XHRkZXNjcmlwdGlvbjogc2VsZWN0ZWRFdmVudD8uZGVzY3JpcHRpb24gfHwgJycsXG5cdFx0bG9jYXRpb246IHNlbGVjdGVkRXZlbnQ/LmxvY2F0aW9uIHx8ICcnLFxuXHR9KVxuXG5cdC8vIFJlY3VycmVuY2Ugc3RhdGUgLSBwdWxsIFJSVUxFIGZyb20gcGFyZW50IGlmIHRoaXMgaXMgYW4gaW5zdGFuY2Vcblx0Y29uc3QgW3JydWxlLCBzZXRScnVsZV0gPSB1c2VTdGF0ZTxSUnVsZU9wdGlvbnMgfCBudWxsPigoKSA9PiB7XG5cdFx0Y29uc3QgZXZlbnRScnVsZSA9IHNlbGVjdGVkRXZlbnQ/LnJydWxlIHx8IHBhcmVudEV2ZW50Py5ycnVsZVxuXHRcdHJldHVybiBldmVudFJydWxlIHx8IG51bGxcblx0fSlcblxuXHQvLyBDcmVhdGUgd3JhcHBlciBmdW5jdGlvbnMgdG8gZml4IFR5cGVTY3JpcHQgZXJyb3JzIHdpdGggRGF0ZVBpY2tlclxuXHRjb25zdCBoYW5kbGVTdGFydERhdGVDaGFuZ2UgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuXHRcdGlmICghZGF0ZSkgcmV0dXJuXG5cdFx0c2V0U3RhcnREYXRlKGRhdGUpXG5cdFx0aWYgKGRheWpzKGRhdGUpLmlzQWZ0ZXIoZGF5anMoZW5kRGF0ZSkpKSB7XG5cdFx0XHRzZXRFbmREYXRlKGRhdGUpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRW5kRGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0aWYgKCFkYXRlKSByZXR1cm5cblx0XHRzZXRFbmREYXRlKGRhdGUpXG5cdFx0aWYgKGRhdGUgJiYgZGF5anMoZGF0ZSkuaXNCZWZvcmUoZGF5anMoc3RhcnREYXRlKSkpIHtcblx0XHRcdHNldFN0YXJ0RGF0ZShkYXRlKVxuXHRcdH1cblx0fVxuXG5cdC8vIFRpbWUgdmFsaWRhdGlvbiBoYW5kbGVycyAtIG9ubHkgdmFsaWRhdGUgd2hlbiBkYXRlcyBhcmUgdGhlIHNhbWVcblx0Y29uc3QgaGFuZGxlU3RhcnRUaW1lQ2hhbmdlID0gKHRpbWU6IHN0cmluZykgPT4ge1xuXHRcdHNldFN0YXJ0VGltZSh0aW1lKVxuXHRcdC8vIE9ubHkgdmFsaWRhdGUgaWYgc2FtZSBkYXlcblx0XHRpZiAoZGF5anMoc3RhcnREYXRlKS5pc1NhbWUoZGF5anMoZW5kRGF0ZSksICdkYXknKSAmJiB0aW1lID4gZW5kVGltZSkge1xuXHRcdFx0c2V0RW5kVGltZSh0aW1lKVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGhhbmRsZUVuZFRpbWVDaGFuZ2UgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0c2V0RW5kVGltZSh0aW1lKVxuXHRcdC8vIE9ubHkgdmFsaWRhdGUgaWYgc2FtZSBkYXlcblx0XHRpZiAoZGF5anMoc3RhcnREYXRlKS5pc1NhbWUoZGF5anMoZW5kRGF0ZSksICdkYXknKSAmJiB0aW1lIDwgc3RhcnRUaW1lKSB7XG5cdFx0XHRzZXRTdGFydFRpbWUodGltZSlcblx0XHR9XG5cdH1cblxuXHQvLyBVcGRhdGUgZm9ybSB2YWx1ZXMgd2hlbiBpbnB1dCBjaGFuZ2VzXG5cdGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gKFxuXHRcdGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PlxuXHQpID0+IHtcblx0XHRjb25zdCB7IG5hbWUsIHZhbHVlIH0gPSBlLnRhcmdldFxuXHRcdHNldEZvcm1WYWx1ZXMoKHByZXYpID0+ICh7IC4uLnByZXYsIFtuYW1lXTogdmFsdWUgfSkpXG5cdH1cblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdC8vIFJlc2V0IGVuZCB0aW1lIHdoZW4gYWxsIGRheSBpcyB0b2dnbGVkIHRvIG9uXG5cdFx0aWYgKGlzQWxsRGF5KSB7XG5cdFx0XHRzZXRFbmRUaW1lKCcyMzo1OScpXG5cdFx0fVxuXHR9LCBbaXNBbGxEYXldKVxuXG5cdGNvbnN0IGhhbmRsZVN1Ym1pdCA9IChlOiBSZWFjdC5Gb3JtRXZlbnQpID0+IHtcblx0XHRlLnByZXZlbnREZWZhdWx0KClcblxuXHRcdGNvbnN0IHN0YXJ0RGF0ZVRpbWUgPSBidWlsZERhdGVUaW1lKHN0YXJ0RGF0ZSwgc3RhcnRUaW1lLCBpc0FsbERheSlcblx0XHRjb25zdCBlbmREYXRlVGltZSA9IGJ1aWxkRW5kRGF0ZVRpbWUoZW5kRGF0ZSwgZW5kVGltZSwgaXNBbGxEYXkpXG5cblx0XHRjb25zdCBldmVudERhdGE6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRpZDogc2VsZWN0ZWRFdmVudD8uaWQgfHwgZGF5anMoKS5mb3JtYXQoJ1lZWVlNTURESEhtbXNzJyksXG5cdFx0XHR0aXRsZTogZm9ybVZhbHVlcy50aXRsZSxcblx0XHRcdHN0YXJ0OiBzdGFydERhdGVUaW1lLFxuXHRcdFx0ZW5kOiBlbmREYXRlVGltZSxcblx0XHRcdHJlc291cmNlSWQ6IHNlbGVjdGVkRXZlbnQ/LnJlc291cmNlSWQsXG5cdFx0XHRkZXNjcmlwdGlvbjogZm9ybVZhbHVlcy5kZXNjcmlwdGlvbixcblx0XHRcdGxvY2F0aW9uOiBmb3JtVmFsdWVzLmxvY2F0aW9uLFxuXHRcdFx0YWxsRGF5OiBpc0FsbERheSxcblx0XHRcdGNvbG9yOiBzZWxlY3RlZENvbG9yLFxuXHRcdFx0cnJ1bGU6IHJydWxlIHx8IHVuZGVmaW5lZCxcblx0XHR9XG5cblx0XHRpZiAoc2VsZWN0ZWRFdmVudD8uaWQgJiYgaXNSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KSkge1xuXHRcdFx0b3BlbkVkaXREaWFsb2coc2VsZWN0ZWRFdmVudCwge1xuXHRcdFx0XHR0aXRsZTogZm9ybVZhbHVlcy50aXRsZSxcblx0XHRcdFx0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG5cdFx0XHRcdGVuZDogZW5kRGF0ZVRpbWUsXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiBmb3JtVmFsdWVzLmRlc2NyaXB0aW9uLFxuXHRcdFx0XHRsb2NhdGlvbjogZm9ybVZhbHVlcy5sb2NhdGlvbixcblx0XHRcdFx0YWxsRGF5OiBpc0FsbERheSxcblx0XHRcdFx0Y29sb3I6IHNlbGVjdGVkQ29sb3IsXG5cdFx0XHRcdHJydWxlOiBycnVsZSB8fCB1bmRlZmluZWQsXG5cdFx0XHR9KVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0aWYgKHNlbGVjdGVkRXZlbnQ/LmlkKSB7XG5cdFx0XHRvblVwZGF0ZT8uKGV2ZW50RGF0YSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0b25BZGQ/LihldmVudERhdGEpXG5cdFx0fVxuXHRcdG9uQ2xvc2UoKVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRGVsZXRlID0gKCkgPT4ge1xuXHRcdGlmIChzZWxlY3RlZEV2ZW50Py5pZCkge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhpcyBpcyBhIHJlY3VycmluZyBldmVudFxuXHRcdFx0aWYgKGlzUmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudCkpIHtcblx0XHRcdFx0Ly8gU2hvdyByZWN1cnJpbmcgZXZlbnQgZGVsZXRlIGRpYWxvZ1xuXHRcdFx0XHRvcGVuRGVsZXRlRGlhbG9nKHNlbGVjdGVkRXZlbnQpXG5cdFx0XHRcdHJldHVybiAvLyBEb24ndCBjbG9zZSB0aGUgZm9ybSB5ZXQsIGxldCB0aGUgZGlhbG9nIGhhbmRsZSBpdFxuXHRcdFx0fVxuXHRcdFx0b25EZWxldGU/LihzZWxlY3RlZEV2ZW50KVxuXHRcdFx0b25DbG9zZSgpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlUlJ1bGVDaGFuZ2UgPSAobmV3UlJ1bGU6IFJSdWxlT3B0aW9ucyB8IG51bGwpID0+IHtcblx0XHRpZiAoIW5ld1JSdWxlKSB7XG5cdFx0XHRzZXRScnVsZShudWxsKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGNvbnN0IHN0YXJ0RGF0ZVRpbWUgPSBidWlsZERhdGVUaW1lKHN0YXJ0RGF0ZSwgc3RhcnRUaW1lLCBpc0FsbERheSlcblx0XHRzZXRScnVsZSh7IC4uLm5ld1JSdWxlLCBkdHN0YXJ0OiBzdGFydERhdGVUaW1lLnRvRGF0ZSgpIH0pXG5cdH1cblxuXHRjb25zdCBkaXNhYmxlZERhdGVNYXRjaGVyID0gZWZmZWN0aXZlQnVzaW5lc3NIb3Vyc1xuXHRcdD8gKGRhdGU6IERhdGUpID0+ICFpc0J1c2luZXNzRGF5KGRheWpzKGRhdGUpLCBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzKVxuXHRcdDogdW5kZWZpbmVkXG5cblx0Y29uc3Qgc3RhcnRDb25zdHJhaW50cyA9IGdldFRpbWVDb25zdHJhaW50cyhzdGFydERhdGUsIGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMpXG5cdGNvbnN0IGVuZENvbnN0cmFpbnRzID0gZ2V0VGltZUNvbnN0cmFpbnRzKGVuZERhdGUsIGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMpXG5cblx0Ly8gTG9jYWwgY29tcG9uZW50IGZvciB0aXRsZSAvIGRlc2NyaXB0aW9uIC8gbG9jYXRpb24gdGV4dCBpbnB1dHMuXG5cdC8vIFRoZXkgc2hhcmUgaWRlbnRpY2FsIG1hcmt1cDsgb25seSBsYWJlbC9wbGFjZWhvbGRlci92YWx1ZSBkaWZmZXIuXG5cdHR5cGUgVGV4dEZpZWxkTmFtZSA9ICd0aXRsZScgfCAnZGVzY3JpcHRpb24nIHwgJ2xvY2F0aW9uJ1xuXHRjb25zdCBUZXh0RmllbGQgPSAoe1xuXHRcdG5hbWUsXG5cdFx0cGxhY2Vob2xkZXIsXG5cdFx0cmVxdWlyZWQgPSBmYWxzZSxcblx0fToge1xuXHRcdG5hbWU6IFRleHRGaWVsZE5hbWVcblx0XHRwbGFjZWhvbGRlcjogc3RyaW5nXG5cdFx0cmVxdWlyZWQ/OiBib29sZWFuXG5cdH0pID0+IChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cblx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIiBodG1sRm9yPXtuYW1lfT5cblx0XHRcdFx0e3QobmFtZSl9XG5cdFx0XHQ8L0xhYmVsPlxuXHRcdFx0PElucHV0XG5cdFx0XHRcdGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdGlkPXtuYW1lfVxuXHRcdFx0XHRuYW1lPXtuYW1lfVxuXHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG5cdFx0XHRcdHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cblx0XHRcdFx0cmVxdWlyZWQ9e3JlcXVpcmVkfVxuXHRcdFx0XHR2YWx1ZT17Zm9ybVZhbHVlc1tuYW1lXX1cblx0XHRcdC8+XG5cdFx0PC9kaXY+XG5cdClcblxuXHRjb25zdCBkYXRlRmllbGRzID0gW1xuXHRcdFsnc3RhcnREYXRlJywgc3RhcnREYXRlLCBoYW5kbGVTdGFydERhdGVDaGFuZ2VdLFxuXHRcdFsnZW5kRGF0ZScsIGVuZERhdGUsIGhhbmRsZUVuZERhdGVDaGFuZ2VdLFxuXHRdIGFzIGNvbnN0XG5cblx0Y29uc3QgdGltZUZpZWxkcyA9IFtcblx0XHRbXG5cdFx0XHQnc3RhcnRUaW1lJyxcblx0XHRcdCdzdGFydC10aW1lJyxcblx0XHRcdHN0YXJ0VGltZSxcblx0XHRcdGhhbmRsZVN0YXJ0VGltZUNoYW5nZSxcblx0XHRcdHN0YXJ0Q29uc3RyYWludHMsXG5cdFx0XSxcblx0XHRbJ2VuZFRpbWUnLCAnZW5kLXRpbWUnLCBlbmRUaW1lLCBoYW5kbGVFbmRUaW1lQ2hhbmdlLCBlbmRDb25zdHJhaW50c10sXG5cdF0gYXMgY29uc3RcblxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8Zm9ybSBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGZsZXgtMSBtaW4taC0wXCIgb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0+XG5cdFx0XHRcdDxTY3JvbGxBcmVhIGNsYXNzTmFtZT1cImZsZXgtMSBtaW4taC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0zIHNtOmdhcC00IHAtMVwiPlxuXHRcdFx0XHRcdFx0PFRleHRGaWVsZFxuXHRcdFx0XHRcdFx0XHRuYW1lPVwidGl0bGVcIlxuXHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnZXZlbnRUaXRsZVBsYWNlaG9sZGVyJyl9XG5cdFx0XHRcdFx0XHRcdHJlcXVpcmVkXG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PFRleHRGaWVsZFxuXHRcdFx0XHRcdFx0XHRuYW1lPVwiZGVzY3JpcHRpb25cIlxuXHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnZXZlbnREZXNjcmlwdGlvblBsYWNlaG9sZGVyJyl9XG5cdFx0XHRcdFx0XHQvPlxuXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRjaGVja2VkPXtpc0FsbERheX1cblx0XHRcdFx0XHRcdFx0XHRpZD1cImFsbERheVwiXG5cdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoY2hlY2tlZCkgPT4gc2V0SXNBbGxEYXkoY2hlY2tlZCA9PT0gdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIiBodG1sRm9yPVwiYWxsRGF5XCI+XG5cdFx0XHRcdFx0XHRcdFx0e3QoJ2FsbERheScpfVxuXHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtMiBzbTpnYXAtNFwiPlxuXHRcdFx0XHRcdFx0XHR7ZGF0ZUZpZWxkcy5tYXAoKFtsYWJlbCwgZGF0ZSwgb25DaGFuZ2VdKSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBrZXk9e2xhYmVsfT5cblx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dChsYWJlbCl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdDxEYXRlUGlja2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU9uU2VsZWN0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGU9e2RhdGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkPXtkaXNhYmxlZERhdGVNYXRjaGVyfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17b25DaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHR7IWlzQWxsRGF5ICYmIChcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC0yIHNtOmdhcC00XCI+XG5cdFx0XHRcdFx0XHRcdFx0e3RpbWVGaWVsZHMubWFwKChbbGFiZWwsIG5hbWUsIHZhbHVlLCBvbkNoYW5nZSwgY10pID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYga2V5PXtsYWJlbH0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dChsYWJlbCl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PFRpbWVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtdC0xIGgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4VGltZT17Yy5tYXh9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWluVGltZT17Yy5taW59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZT17bmFtZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17b25DaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9e3QoJ3NlYXJjaFRpbWUnKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXt2YWx1ZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdCl9XG5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMSBzbTpnYXAtMlwiPlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ2NvbG9yJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMlwiPlxuXHRcdFx0XHRcdFx0XHRcdHtDT0xPUl9PUFRJT05TLm1hcCgoY29sb3IpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYS1sYWJlbD17Y29sb3IubGFiZWx9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YCR7Y29sb3IudmFsdWV9IGgtNiB3LTYgcm91bmRlZC1mdWxsIHNtOmgtOCBzbTp3LThgLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNlbGVjdGVkQ29sb3IgPT09IGNvbG9yLnZhbHVlICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQncmluZy0yIHJpbmctYmxhY2sgcmluZy1vZmZzZXQtMSBzbTpyaW5nLW9mZnNldC0yJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2NvbG9yLnZhbHVlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZXRTZWxlY3RlZENvbG9yKGNvbG9yLnZhbHVlKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHQ8VGV4dEZpZWxkXG5cdFx0XHRcdFx0XHRcdG5hbWU9XCJsb2NhdGlvblwiXG5cdFx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPXt0KCdldmVudExvY2F0aW9uUGxhY2Vob2xkZXInKX1cblx0XHRcdFx0XHRcdC8+XG5cblx0XHRcdFx0XHRcdHsvKiBSZWN1cnJlbmNlIFNlY3Rpb24gKi99XG5cdFx0XHRcdFx0XHQ8UmVjdXJyZW5jZUVkaXRvciBvbkNoYW5nZT17aGFuZGxlUlJ1bGVDaGFuZ2V9IHZhbHVlPXtycnVsZX0gLz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9TY3JvbGxBcmVhPlxuXG5cdFx0XHRcdDxEaWFsb2dGb290ZXIgY2xhc3NOYW1lPVwibXQtNCBzaHJpbmstMCBmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgc206ZmxleC1yb3cgc206Z2FwLTBcIj5cblx0XHRcdFx0XHR7c2VsZWN0ZWRFdmVudD8uaWQgJiYgKFxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgc206bXItYXV0byBzbTp3LWF1dG9cIlxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtoYW5kbGVEZWxldGV9XG5cdFx0XHRcdFx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZGVzdHJ1Y3RpdmVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7dCgnZGVsZXRlJyl9XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgZ2FwLTIgc206dy1hdXRvXCI+XG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXgtMSBzbTpmbGV4LW5vbmVcIlxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtvbkNsb3NlfVxuXHRcdFx0XHRcdFx0XHRzaXplPVwic21cIlxuXHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7dCgnY2FuY2VsJyl9XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdDxCdXR0b24gY2xhc3NOYW1lPVwiZmxleC0xIHNtOmZsZXgtbm9uZVwiIHNpemU9XCJzbVwiIHR5cGU9XCJzdWJtaXRcIj5cblx0XHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgndXBkYXRlJykgOiB0KCdjcmVhdGUnKX1cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0RpYWxvZ0Zvb3Rlcj5cblx0XHRcdDwvZm9ybT5cblxuXHRcdFx0ey8qIFJlY3VycmluZyBFdmVudCBFZGl0IERpYWxvZyAqL31cblx0XHRcdDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuXHRcdFx0XHRldmVudFRpdGxlPXtkaWFsb2dTdGF0ZS5ldmVudD8udGl0bGUgfHwgJyd9XG5cdFx0XHRcdGlzT3Blbj17ZGlhbG9nU3RhdGUuaXNPcGVufVxuXHRcdFx0XHRvbkNsb3NlPXtjbG9zZURpYWxvZ31cblx0XHRcdFx0b25Db25maXJtPXtoYW5kbGVDb25maXJtfVxuXHRcdFx0XHRvcGVyYXRpb25UeXBlPXtkaWFsb2dTdGF0ZS5vcGVyYXRpb25UeXBlfVxuXHRcdFx0Lz5cblx0XHQ8Lz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBDaGVja2JveFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtY2hlY2tib3gnXG5pbXBvcnQgeyBDaGVja0ljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDaGVja2JveCh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBDaGVja2JveFByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxDaGVja2JveFByaW1pdGl2ZS5Sb290XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQncGVlciBib3JkZXItaW5wdXQgZGFyazpiZy1pbnB1dC8zMCBkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1wcmltYXJ5IGRhdGEtW3N0YXRlPWNoZWNrZWRdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6ZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTpib3JkZXItcHJpbWFyeSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBzaXplLTQgc2hyaW5rLTAgcm91bmRlZC1bNHB4XSBib3JkZXIgc2hhZG93LXhzIHRyYW5zaXRpb24tc2hhZG93IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjaGVja2JveFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvclxuXHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWN1cnJlbnQgdHJhbnNpdGlvbi1ub25lXCJcblx0XHRcdFx0ZGF0YS1zbG90PVwiY2hlY2tib3gtaW5kaWNhdG9yXCJcblx0XHRcdD5cblx0XHRcdFx0PENoZWNrSWNvbiBjbGFzc05hbWU9XCJzaXplLTMuNVwiIC8+XG5cdFx0XHQ8L0NoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvcj5cblx0XHQ8L0NoZWNrYm94UHJpbWl0aXZlLlJvb3Q+XG5cdClcbn1cblxuZXhwb3J0IHsgQ2hlY2tib3ggfVxuIiwKICAgICJpbXBvcnQgeyBQb3BvdmVyQ2xvc2UgfSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtcG9wb3ZlcidcbmltcG9ydCB7IENhbGVuZGFyIGFzIENhbGVuZGFySWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NhbGVuZGFyJ1xuaW1wb3J0IHtcblx0UG9wb3Zlcixcblx0UG9wb3ZlckNvbnRlbnQsXG5cdFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBEYXRlUGlja2VyUHJvcHMge1xuXHRkYXRlOiBEYXRlIHwgdW5kZWZpbmVkXG5cdG9uQ2hhbmdlPzogKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHZvaWRcblx0bGFiZWw/OiBzdHJpbmdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGNsb3NlT25TZWxlY3Q/OiBib29sZWFuXG5cdGRpc2FibGVkPzogKGRhdGU6IERhdGUpID0+IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERhdGVQaWNrZXIoe1xuXHRkYXRlLFxuXHRjbG9zZU9uU2VsZWN0LFxuXHRvbkNoYW5nZSxcblx0bGFiZWwgPSAnUGljayBhIGRhdGUnLFxuXHRjbGFzc05hbWUsXG5cdGRpc2FibGVkLFxufTogRGF0ZVBpY2tlclByb3BzKSB7XG5cdGNvbnN0IHBvcE92ZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsPihudWxsKVxuXHRjb25zdCBbc2VsZWN0ZWREYXRlLCBzZXRTZWxlY3RlZERhdGVdID0gdXNlU3RhdGU8RGF0ZSB8IHVuZGVmaW5lZD4oZGF0ZSlcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdHNldFNlbGVjdGVkRGF0ZShkYXRlKVxuXHR9LCBbZGF0ZV0pXG5cblx0Y29uc3QgaGFuZGxlRGF0ZVNlbGVjdCA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0c2V0U2VsZWN0ZWREYXRlKGRhdGUpXG5cdFx0aWYgKGNsb3NlT25TZWxlY3QpIHtcblx0XHRcdHBvcE92ZXJSZWYuY3VycmVudD8uY2xpY2soKVxuXHRcdH1cblx0XHRvbkNoYW5nZT8uKGRhdGUpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuXHRcdFx0PFBvcG92ZXI+XG5cdFx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdCdkYXRhLVtlbXB0eT10cnVlXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgdy1mdWxsIGp1c3RpZnktc3RhcnQgdGV4dC1sZWZ0IGZvbnQtbm9ybWFsJ1xuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdGRhdGEtZW1wdHk9eyFkYXRlfVxuXHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxDYWxlbmRhckljb24gLz5cblx0XHRcdFx0XHRcdHtzZWxlY3RlZERhdGUgPyAoXG5cdFx0XHRcdFx0XHRcdGRheWpzKHNlbGVjdGVkRGF0ZSkuZm9ybWF0KCdNTU0gRCwgWVlZWScpXG5cdFx0XHRcdFx0XHQpIDogKFxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj57bGFiZWx9PC9zcGFuPlxuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0PC9Qb3BvdmVyVHJpZ2dlcj5cblx0XHRcdFx0PFBvcG92ZXJDb250ZW50IGFsaWduPVwic3RhcnRcIiBjbGFzc05hbWU9XCJ3LWF1dG8gcC0wXCI+XG5cdFx0XHRcdFx0PFBvcG92ZXJDbG9zZSByZWY9e3BvcE92ZXJSZWZ9IHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fSAvPlxuXHRcdFx0XHRcdDxDYWxlbmRhclxuXHRcdFx0XHRcdFx0ZGVmYXVsdE1vbnRoPXtzZWxlY3RlZERhdGV9XG5cdFx0XHRcdFx0XHRkaXNhYmxlZD17ZGlzYWJsZWR9XG5cdFx0XHRcdFx0XHRvblNlbGVjdD17aGFuZGxlRGF0ZVNlbGVjdH1cblx0XHRcdFx0XHRcdHNlbGVjdGVkPXtzZWxlY3RlZERhdGV9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHRcdDwvUG9wb3Zlcj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBDaGV2cm9uTGVmdEljb24sIENoZXZyb25SaWdodEljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0TW9udGhXZWVrcywgaXNUb2RheSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmludGVyZmFjZSBDYWxlbmRhclByb3BzIHtcblx0c2VsZWN0ZWQ/OiBEYXRlXG5cdGRlZmF1bHRNb250aD86IERhdGVcblx0b25TZWxlY3Q/OiAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4gdm9pZFxuXHRkaXNhYmxlZD86IChkYXRlOiBEYXRlKSA9PiBib29sZWFuXG5cdGZpcnN0RGF5T2ZXZWVrPzogbnVtYmVyXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBXRUVLREFZX0xBQkVMUyA9IFsnUycsICdNJywgJ1QnLCAnVycsICdUJywgJ0YnLCAnUyddXG5cbmV4cG9ydCBmdW5jdGlvbiBDYWxlbmRhcih7XG5cdHNlbGVjdGVkLFxuXHRkZWZhdWx0TW9udGgsXG5cdG9uU2VsZWN0LFxuXHRkaXNhYmxlZCxcblx0Zmlyc3REYXlPZldlZWsgPSAwLFxuXHRjbGFzc05hbWUsXG59OiBDYWxlbmRhclByb3BzKSB7XG5cdGNvbnN0IFt2aWV3TW9udGgsIHNldFZpZXdNb250aF0gPSB1c2VTdGF0ZTxEYXlqcz4oKCkgPT5cblx0XHRkYXlqcyhkZWZhdWx0TW9udGggPz8gc2VsZWN0ZWQgPz8gbmV3IERhdGUoKSkuc3RhcnRPZignbW9udGgnKVxuXHQpXG5cblx0Y29uc3Qgd2Vla3MgPSBnZXRNb250aFdlZWtzKHZpZXdNb250aCwgZmlyc3REYXlPZldlZWspXG5cdGNvbnN0IHNlbGVjdGVkS2V5ID0gc2VsZWN0ZWRcblx0XHQ/IGRheWpzKHNlbGVjdGVkKS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXHRcdDogdW5kZWZpbmVkXG5cdGNvbnN0IHdlZWtkYXlIZWFkZXJzID0gQXJyYXkuZnJvbShcblx0XHR7IGxlbmd0aDogNyB9LFxuXHRcdChfLCBpKSA9PiBXRUVLREFZX0xBQkVMU1soZmlyc3REYXlPZldlZWsgKyBpKSAlIDddXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2JnLWJhY2tncm91bmQgcC0zIHctWzI4MHB4XScsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYWxlbmRhclwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gbWItMlwiPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0YXJpYS1sYWJlbD1cIlByZXZpb3VzIG1vbnRoXCJcblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZXRWaWV3TW9udGgoKG0pID0+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+XG5jb25zdCBXRUVLREFZUyA9IFtcblx0UlJ1bGUuU1UsXG5cdFJSdWxlLk1PLFxuXHRSUnVsZS5UVSxcblx0UlJ1bGUuV0UsXG5cdFJSdWxlLlRILFxuXHRSUnVsZS5GUixcblx0UlJ1bGUuU0EsXG5dXG5jb25zdCBEQVlfS0VZUyA9IFsnc3VuJywgJ21vbicsICd0dWUnLCAnd2VkJywgJ3RodScsICdmcmknLCAnc2F0J11cbmNvbnN0IEVORF9UWVBFUyA9IFtcblx0eyB0eXBlOiAnbmV2ZXInLCBpZDogJ25ldmVyJywgbGFiZWxLZXk6ICduZXZlcicgfSxcblx0eyB0eXBlOiAnY291bnQnLCBpZDogJ2FmdGVyJywgbGFiZWxLZXk6ICdhZnRlcicgfSxcblx0eyB0eXBlOiAndW50aWwnLCBpZDogJ29uJywgbGFiZWxLZXk6ICdvbicgfSxcbl0gYXMgY29uc3RcbmNvbnN0IHBhcnNlTnVtID0gKHY6IHN0cmluZykgPT4gTWF0aC5tYXgoMSwgTnVtYmVyLnBhcnNlSW50KHYsIDEwKSB8fCAxKVxuXG5jb25zdCBnZXREZXNjcmlwdGlvbiA9IChcblx0b3B0czogUlJ1bGVPcHRpb25zIHwgbnVsbCxcblx0dDogKGs6IHN0cmluZykgPT4gc3RyaW5nXG4pID0+IHtcblx0aWYgKCFvcHRzKSB7XG5cdFx0cmV0dXJuIHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuXHR9XG5cdHRyeSB7XG5cdFx0Y29uc3QgdGV4dCA9IG5ldyBSUnVsZShvcHRzKS50b1RleHQoKVxuXHRcdHJldHVybiB0ZXh0ICYmICF0ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Vycm9yJylcblx0XHRcdD8gdGV4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRleHQuc2xpY2UoMSlcblx0XHRcdDogdCgnY3VzdG9tUmVjdXJyZW5jZScpXG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiB0KCdjdXN0b21SZWN1cnJlbmNlJylcblx0fVxufVxuXG5pbnRlcmZhY2UgUHJvcHMge1xuXHR2YWx1ZT86IFJSdWxlT3B0aW9ucyB8IG51bGxcblx0b25DaGFuZ2U6ICh2OiBSUnVsZU9wdGlvbnMgfCBudWxsKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBjb25zdCBSZWN1cnJlbmNlRWRpdG9yOiBSZWFjdC5GQzxQcm9wcz4gPSAoeyB2YWx1ZSwgb25DaGFuZ2UgfSkgPT4ge1xuXHRjb25zdCB7IHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjdHgpID0+ICh7IHQ6IGN0eC50IH0pKVxuXHRjb25zdCBbc2hvdywgc2V0U2hvd10gPSB1c2VTdGF0ZSghIXZhbHVlKVxuXHRjb25zdCBbb3B0cywgc2V0T3B0c10gPSB1c2VTdGF0ZTxSUnVsZU9wdGlvbnMgfCBudWxsPigoKSA9PiB2YWx1ZSB8fCBudWxsKVxuXG5cdGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBEQVlfS0VZUy5tYXAoKGssIGkpID0+ICh7IHZhbHVlOiBXRUVLREFZU1tpXSwgbGFiZWw6IHQoaykgfSkpLFxuXHRcdFt0XVxuXHQpXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRzZXRTaG93KCEhdmFsdWUpXG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRzZXRPcHRzKHZhbHVlKVxuXHRcdH1cblx0fSwgW3ZhbHVlXSlcblxuXHRjb25zdCB1cGRhdGUgPSAodTogUGFydGlhbDxSUnVsZU9wdGlvbnM+KSA9PiB7XG5cdFx0aWYgKCFvcHRzKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0Y29uc3QgbmV4dCA9IHsgLi4ub3B0cywgLi4udSB9XG5cdFx0c2V0T3B0cyhuZXh0KVxuXHRcdG9uQ2hhbmdlKHNob3cgPyBuZXh0IDogbnVsbClcblx0fVxuXG5cdGNvbnN0IHRvZ2dsZSA9IChjaGVja2VkOiBib29sZWFuKSA9PiB7XG5cdFx0c2V0U2hvdyhjaGVja2VkKVxuXHRcdGlmICghY2hlY2tlZCkge1xuXHRcdFx0b25DaGFuZ2UobnVsbClcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRpZiAob3B0cykge1xuXHRcdFx0b25DaGFuZ2Uob3B0cylcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRjb25zdCBkZWYgPSB7IGZyZXE6IFJSdWxlLkRBSUxZLCBpbnRlcnZhbDogMSB9IGFzIFJSdWxlT3B0aW9uc1xuXHRcdHNldE9wdHMoZGVmKVxuXHRcdG9uQ2hhbmdlKGRlZilcblx0fVxuXG5cdGNvbnN0IHRvZ2dsZURheSA9IChpOiBudW1iZXIpID0+IHtcblx0XHRjb25zdCBjdXJyID0gKG9wdHM/LmJ5d2Vla2RheSBhcyBXZWVrZGF5W10pIHx8IFtdXG5cdFx0Y29uc3QgZGF5ID0gV0VFS0RBWVNbaV1cblx0XHRjb25zdCBuZXh0ID0gY3Vyci5pbmNsdWRlcyhkYXkpXG5cdFx0XHQ/IGN1cnIuZmlsdGVyKChkKSA9PiBkICE9PSBkYXkpXG5cdFx0XHQ6IFsuLi5jdXJyLCBkYXldXG5cdFx0dXBkYXRlKHsgYnl3ZWVrZGF5OiBuZXh0Lmxlbmd0aCA/IG5leHQgOiB1bmRlZmluZWQgfSlcblx0fVxuXG5cdGNvbnN0IHNldEVuZFR5cGUgPSAodHlwZTogJ25ldmVyJyB8ICdjb3VudCcgfCAndW50aWwnKSA9PiB7XG5cdFx0Y29uc3QgdTogUGFydGlhbDxSUnVsZU9wdGlvbnM+ID0geyBjb3VudDogdW5kZWZpbmVkLCB1bnRpbDogdW5kZWZpbmVkIH1cblx0XHRpZiAodHlwZSA9PT0gJ2NvdW50Jykge1xuXHRcdFx0dS5jb3VudCA9IG9wdHM/LmNvdW50IHx8IDFcblx0XHR9XG5cdFx0aWYgKHR5cGUgPT09ICd1bnRpbCcpIHtcblx0XHRcdHUudW50aWwgPSBvcHRzPy51bnRpbCB8fCBkYXlqcygpLmFkZCgxLCAnbW9udGgnKS5lbmRPZignZGF5JykudG9EYXRlKClcblx0XHR9XG5cdFx0dXBkYXRlKHUpXG5cdH1cblxuXHRjb25zdCBlbmRUeXBlID0gb3B0cz8udW50aWwgPyAndW50aWwnIDogb3B0cz8uY291bnQgPyAnY291bnQnIDogJ25ldmVyJ1xuXHRjb25zdCBmcmVxID0gRlJFUV9UT19TVFJbb3B0cz8uZnJlcSA/PyBSUnVsZS5EQUlMWV0gfHwgJ0RBSUxZJ1xuXHRjb25zdCBieXdlZWtkYXkgPSBBcnJheS5pc0FycmF5KG9wdHM/LmJ5d2Vla2RheSlcblx0XHQ/IG9wdHMuYnl3ZWVrZGF5XG5cdFx0OiBvcHRzPy5ieXdlZWtkYXlcblx0XHRcdD8gW29wdHMuYnl3ZWVrZGF5XVxuXHRcdFx0OiBbXVxuXG5cdHJldHVybiAoXG5cdFx0PENhcmQgZGF0YS10ZXN0aWQ9XCJyZWN1cnJlbmNlLWVkaXRvclwiPlxuXHRcdFx0PENhcmRIZWFkZXIgY2xhc3NOYW1lPVwicGItM1wiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0Y2hlY2tlZD17c2hvd31cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwidG9nZ2xlLXJlY3VycmVuY2VcIlxuXHRcdFx0XHRcdFx0aWQ9XCJyZWN1cnJpbmdcIlxuXHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXt0b2dnbGV9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8Q2FyZFRpdGxlIGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVwZWF0Jyl9PC9DYXJkVGl0bGU+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHR7c2hvdyAmJiB2YWx1ZSAmJiAoXG5cdFx0XHRcdFx0PHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdHtnZXREZXNjcmlwdGlvbih2YWx1ZSwgdCl9XG5cdFx0XHRcdFx0PC9wPlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9DYXJkSGVhZGVyPlxuXG5cdFx0XHR7c2hvdyAmJiAoXG5cdFx0XHRcdDxDYXJkQ29udGVudCBjbGFzc05hbWU9XCJwdC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTRcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCIgaHRtbEZvcj1cImZyZXF1ZW5jeVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e3QoJ3JlcGVhdHMnKX1cblx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxTZWxlY3Rcblx0XHRcdFx0XHRcdFx0XHRcdG9uVmFsdWVDaGFuZ2U9eyhmKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGUoeyBmcmVxOiBGUkVRX01BUFtmIGFzIGtleW9mIHR5cGVvZiBGUkVRX01BUF0gfSlcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtmcmVxfVxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RUcmlnZ2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiZnJlcXVlbmN5LXNlbGVjdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiZnJlcXVlbmN5XCJcblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PFNlbGVjdFZhbHVlIC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdFRyaWdnZXI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0Q29udGVudD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e09iamVjdC5rZXlzKEZSRVFfTUFQKS5tYXAoKGYpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0SXRlbSBrZXk9e2Z9IHZhbHVlPXtmfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt0KGYudG9Mb3dlckNhc2UoKSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9TZWxlY3RJdGVtPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0Q29udGVudD5cblx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdD5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwiaW50ZXJ2YWxcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHt0KCdldmVyeScpfVxuXHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLThcIlxuXHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnRlcnZhbFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRtaW49XCIxXCJcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZSkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlKHsgaW50ZXJ2YWw6IHBhcnNlTnVtKGUudGFyZ2V0LnZhbHVlKSB9KVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cIm51bWJlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17b3B0cz8uaW50ZXJ2YWwgfHwgMX1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHR7b3B0cz8uZnJlcSA9PT0gUlJ1bGUuV0VFS0xZICYmIChcblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdyZXBlYXRPbicpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMSBtdC0xXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7d2Vla0RheXMubWFwKChkLCBpKSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0xXCIga2V5PXtkLmxhYmVsfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2J5d2Vla2RheS5pbmNsdWRlcyhkLnZhbHVlKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPXtrZXlzLmxpc3RLZXkoJ2RheScsIGkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoKSA9PiB0b2dnbGVEYXkoaSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInRleHQteHMgY3Vyc29yLXBvaW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aHRtbEZvcj17a2V5cy5saXN0S2V5KCdkYXknLCBpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+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/OiBzdHJpbmdcbn1cblxuY29uc3QgSGVhZGVyOiBSZWFjdC5GQzxIZWFkZXJQcm9wcz4gPSAoeyBjbGFzc05hbWUgPSAnJyB9KSA9PiB7XG5cdGNvbnN0IHtcblx0XHR2aWV3LFxuXHRcdHNldFZpZXcsXG5cdFx0bmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kLFxuXHRcdHRvZGF5LFxuXHRcdG9wZW5FdmVudEZvcm0sXG5cdFx0aGVhZGVyQ29tcG9uZW50LFxuXHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRyYXdFdmVudHMsXG5cdFx0dCxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjdHgpID0+ICh7XG5cdFx0dmlldzogY3R4LnZpZXcsXG5cdFx0c2V0VmlldzogY3R4LnNldFZpZXcsXG5cdFx0bmV4dFBlcmlvZDogY3R4Lm5leHRQZXJpb2QsXG5cdFx0cHJldlBlcmlvZDogY3R4LnByZXZQZXJpb2QsXG5cdFx0dG9kYXk6IGN0eC50b2RheSxcblx0XHRvcGVuRXZlbnRGb3JtOiBjdHgub3BlbkV2ZW50Rm9ybSxcblx0XHRoZWFkZXJDb21wb25lbnQ6IGN0eC5oZWFkZXJDb21wb25lbnQsXG5cdFx0aGVhZGVyQ2xhc3NOYW1lOiBjdHguaGVhZGVyQ2xhc3NOYW1lLFxuXHRcdHJhd0V2ZW50czogY3R4LnJhd0V2ZW50cyxcblx0XHR0OiBjdHgudCxcblx0fSkpXG5cblx0Y29uc3QgW21vYmlsZU1lbnVPcGVuLCBzZXRNb2JpbGVNZW51T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblxuXHRjb25zdCBjbG9zZU1vYmlsZU1lbnUgPSAoKSA9PiBzZXRNb2JpbGVNZW51T3BlbihmYWxzZSlcblxuXHQvLyBXcmFwIGFueSBoYW5kbGVyIHNvIGl0IGFsc28gY2xvc2VzIHRoZSBtb2JpbGUgbWVudSBhZnRlciBmaXJpbmcuXG5cdGNvbnN0IHdpdGhDbG9zZSA9XG5cdFx0PEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KGZuOiAoLi4uYXJnczogQXJncykgPT4gdm9pZCkgPT5cblx0XHQoLi4uYXJnczogQXJncykgPT4ge1xuXHRcdFx0Zm4oLi4uYXJncylcblx0XHRcdGNsb3NlTW9iaWxlTWVudSgpXG5cdFx0fVxuXG5cdGNvbnN0IGhhbmRsZUV4cG9ydCA9ICgpID0+IHtcblx0XHRjb25zdCBmaWxlbmFtZSA9IGBpbGFteS1jYWxlbmRhci0ke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdfS5pY3NgXG5cdFx0ZG93bmxvYWRJQ2FsZW5kYXIocmF3RXZlbnRzLCBmaWxlbmFtZSwgJ2lsYW15IENhbGVuZGFyJylcblx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHR9XG5cblx0Y29uc3QgTmV3RXZlbnRCdXR0b24gPSAoKSA9PiAoXG5cdFx0PEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuXHRcdFx0b25DbGljaz17KCkgPT4gb3BlbkV2ZW50Rm9ybSgpfVxuXHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdHZhcmlhbnQ9XCJkZWZhdWx0XCJcblx0XHQ+XG5cdFx0XHQ8UGx1cyBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsOmlubGluZVwiPnt0KCduZXcnKX08L3NwYW4+XG5cdFx0PC9CdXR0b24+XG5cdClcblxuXHRjb25zdCBFeHBvcnRCdXR0b24gPSAoeyBmdWxsV2lkdGggPSBmYWxzZSB9OiB7IGZ1bGxXaWR0aD86IGJvb2xlYW4gfSkgPT4gKFxuXHRcdDxCdXR0b25cblx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0xJywgZnVsbFdpZHRoICYmICd3LWZ1bGwgZ2FwLTInKX1cblx0XHRcdG9uQ2xpY2s9e2hhbmRsZUV4cG9ydH1cblx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0PlxuXHRcdFx0PERvd25sb2FkIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0e2Z1bGxXaWR0aCA/IChcblx0XHRcdFx0YCR7dCgnZXhwb3J0Jyl9IENhbGVuZGFyICguaWNzKWBcblx0XHRcdCkgOiAoXG5cdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsL2Jhc2UtaGVhZGVyOmlubGluZVwiPnt0KCdleHBvcnQnKX08L3NwYW4+XG5cdFx0XHQpfVxuXHRcdDwvQnV0dG9uPlxuXHQpXG5cblx0aWYgKGhlYWRlckNvbXBvbmVudCkge1xuXHRcdHJldHVybiBoZWFkZXJDb21wb25lbnRcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiQGNvbnRhaW5lci9iYXNlLWhlYWRlciB3LWZ1bGxcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnZmxleCBqdXN0aWZ5LWNlbnRlciBAMnhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktYmV0d2VlbiBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0yJyxcblx0XHRcdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRcdFx0aGVhZGVyQ2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1zdGFydFwiPlxuXHRcdFx0XHRcdDxDYWxlbmRhckljb24gY2xhc3NOYW1lPVwiaC01IHctNVwiIC8+XG5cdFx0XHRcdFx0PFRpdGxlQ29udGVudCAvPlxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGp1c3RpZnktc3RhcnQgQHhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktY2VudGVyIGdhcC0xIEA0eGwvYmFzZS1oZWFkZXI6anVzdGlmeS1lbmQgb3ZlcmZsb3cteC1hdXRvXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gQG1kL2Jhc2UtaGVhZGVyOmZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgZ2FwLTFcIj5cblx0XHRcdFx0XHRcdDxWaWV3Q29udHJvbHNcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwianVzdGlmeS1lbmRcIlxuXHRcdFx0XHRcdFx0XHRjdXJyZW50Vmlldz17dmlld31cblx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e3NldFZpZXd9XG5cdFx0XHRcdFx0XHRcdG9uTmV4dD17bmV4dFBlcmlvZH1cblx0XHRcdFx0XHRcdFx0b25QcmV2aW91cz17cHJldlBlcmlvZH1cblx0XHRcdFx0XHRcdFx0b25Ub2RheT17dG9kYXl9XG5cdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJkZWZhdWx0XCJcblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8TmV3RXZlbnRCdXR0b24gLz5cblx0XHRcdFx0XHRcdDxFeHBvcnRCdXR0b24gLz5cblx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTEgQG1kL2Jhc2UtaGVhZGVyOmhpZGRlblwiPlxuXHRcdFx0XHRcdFx0PE5ld0V2ZW50QnV0dG9uIC8+XG5cdFx0XHRcdFx0XHQ8UG9wb3ZlciBvbk9wZW5DaGFuZ2U9e3NldE1vYmlsZU1lbnVPcGVufSBvcGVuPXttb2JpbGVNZW51T3Blbn0+XG5cdFx0XHRcdFx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHRcdFx0XHRcdDxCdXR0b24gc2l6ZT1cInNtXCIgdmFyaWFudD1cIm91dGxpbmVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxNZW51IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0XHRcdFx0XHQ8UG9wb3ZlckNvbnRlbnQgYWxpZ249XCJlbmRcIiBjbGFzc05hbWU9XCJ3LVsyNDBweF0gcC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxWaWV3Q29udHJvbHNcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudFZpZXc9e3ZpZXd9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXt3aXRoQ2xvc2Uoc2V0Vmlldyl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uTmV4dD17d2l0aENsb3NlKG5leHRQZXJpb2QpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvblByZXZpb3VzPXt3aXRoQ2xvc2UocHJldlBlcmlvZCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uVG9kYXk9e3dpdGhDbG9zZSh0b2RheSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJncmlkXCJcblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInB0LTIgYm9yZGVyLXRcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PEV4cG9ydEJ1dHRvbiBmdWxsV2lkdGggLz5cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L1BvcG92ZXJDb250ZW50PlxuXHRcdFx0XHRcdFx0PC9Qb3BvdmVyPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IEhlYWRlclxuIiwKICAgICJpbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuY29uc3QgQ1JMRiA9ICdcXHJcXG4nXG5cbmNvbnN0IFVUQ19WVElNRVpPTkUgPSBbXG5cdCdCRUdJTjpWVElNRVpPTkUnLFxuXHQnVFpJRDpVVEMnLFxuXHQnQkVHSU46U1RBTkRBUkQnLFxuXHQnRFRTVEFSVDoxOTcwMDEwMVQwMDAwMDAnLFxuXHQnVFpOQU1FOlVUQycsXG5cdCdUWk9GRlNFVEZST006KzAwMDAnLFxuXHQnVFpPRkZTRVRUTzorMDAwMCcsXG5cdCdFTkQ6U1RBTkRBUkQnLFxuXHQnRU5EOlZUSU1FWk9ORScsXG5dLmpvaW4oQ1JMRilcblxuY29uc3QgZXNjYXBlVGV4dCA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gdGV4dFxuXHRcdC5yZXBsYWNlQWxsKCdcXFxcJywgJ1xcXFxcXFxcJylcblx0XHQucmVwbGFjZUFsbCgnOycsICdcXFxcOycpXG5cdFx0LnJlcGxhY2VBbGwoJywnLCAnXFxcXCwnKVxuXHRcdC5yZXBsYWNlQWxsKCdcXG4nLCAnXFxcXG4nKVxuXHRcdC5yZXBsYWNlQWxsKCdcXHInLCAnJylcbn1cblxuY29uc3QgZm9ybWF0RGF0ZSA9IChkYXRlOiBEYXlqcywgaXNBbGxEYXkgPSBmYWxzZSk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBpc0FsbERheVxuXHRcdD8gZGF0ZS5mb3JtYXQoJ1lZWVlNTUREJylcblx0XHQ6IGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG59XG5cbmNvbnN0IGdldFVJRCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG5jb25zdCBmb3JtYXRSUnVsZSA9IChycnVsZU9wdGlvbnM6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuXHR0cnkge1xuXHRcdGNvbnN0IHJydWxlU3RyaW5nID0gbmV3IFJSdWxlKFxuXHRcdFx0cnJ1bGVPcHRpb25zIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgUlJ1bGU+WzBdXG5cdFx0KS50b1N0cmluZygpXG5cdFx0cmV0dXJuIChcblx0XHRcdHJydWxlU3RyaW5nLnNwbGl0KCdcXG4nKS5maW5kKChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoJ1JSVUxFOicpKSB8fCAnJ1xuXHRcdClcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuICcnXG5cdH1cbn1cblxuY29uc3QgY29udmVydEV2ZW50VG9WRXZlbnQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuXHRjb25zdCB0aW1lc3RhbXAgPSBkYXlqcygpLnV0YygpLmZvcm1hdCgnWVlZWU1NRERbVF1ISG1tc3NbWl0nKVxuXHRjb25zdCBkYXRlUGFyYW0gPSBldmVudC5hbGxEYXkgPyAnO1ZBTFVFPURBVEUnIDogJydcblx0Y29uc3QgcnJ1bGUgPSBldmVudC5ycnVsZSA/IGZvcm1hdFJSdWxlKGV2ZW50LnJydWxlKSA6ICcnXG5cblx0Y29uc3QgZXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXM/Lmxlbmd0aFxuXHRcdD8gZXZlbnQuZXhkYXRlcy5tYXAoKGQpID0+IGZvcm1hdERhdGUoZGF5anMoZCksIGV2ZW50LmFsbERheSkpLmpvaW4oJywnKVxuXHRcdDogbnVsbFxuXG5cdGNvbnN0IHJlY3VycmVuY2VJZCA9IGV2ZW50LnJlY3VycmVuY2VJZFxuXHRcdD8gZm9ybWF0RGF0ZShkYXlqcyhldmVudC5yZWN1cnJlbmNlSWQpLCBldmVudC5hbGxEYXkpXG5cdFx0OiBudWxsXG5cblx0Y29uc3QgbGluZXMgPSBbXG5cdFx0J0JFR0lOOlZFVkVOVCcsXG5cdFx0YFVJRDoke2dldFVJRChldmVudCl9YCxcblx0XHRgRFRTVEFSVCR7ZGF0ZVBhcmFtfToke2Zvcm1hdERhdGUoZXZlbnQuc3RhcnQsIGV2ZW50LmFsbERheSl9YCxcblx0XHRgRFRFTkQke2RhdGVQYXJhbX06JHtmb3JtYXREYXRlKGV2ZW50LmVuZCwgZXZlbnQuYWxsRGF5KX1gLFxuXHRcdGBTVU1NQVJZOiR7ZXNjYXBlVGV4dChldmVudC50aXRsZSl9YCxcblx0XHRldmVudC5kZXNjcmlwdGlvbiAmJiBgREVTQ1JJUFRJT046JHtlc2NhcGVUZXh0KGV2ZW50LmRlc2NyaXB0aW9uKX1gLFxuXHRcdGV2ZW50LmxvY2F0aW9uICYmIGBMT0NBVElPTjoke2VzY2FwZVRleHQoZXZlbnQubG9jYXRpb24pfWAsXG5cdFx0cnJ1bGUsXG5cdFx0ZXhkYXRlcyAmJiBgRVhEQVRFOiR7ZXhkYXRlc31gLFxuXHRcdHJlY3VycmVuY2VJZCAmJiBgUkVDVVJSRU5DRS1JRDoke3JlY3VycmVuY2VJZH1gLFxuXHRcdGBEVFNUQU1QOiR7dGltZXN0YW1wfWAsXG5cdFx0YENSRUFURUQ6JHt0aW1lc3RhbXB9YCxcblx0XHRgTEFTVC1NT0RJRklFRDoke3RpbWVzdGFtcH1gLFxuXHRcdCdTVEFUVVM6Q09ORklSTUVEJyxcblx0XHQnU0VRVUVOQ0U6MCcsXG5cdFx0J1RSQU5TUDpPUEFRVUUnLFxuXHRcdCdFTkQ6VkVWRU5UJyxcblx0XVxuXG5cdHJldHVybiBsaW5lcy5maWx0ZXIoQm9vbGVhbikuam9pbihDUkxGKVxufVxuXG5jb25zdCBmaWx0ZXJFdmVudHMgPSAoZXZlbnRzOiBDYWxlbmRhckV2ZW50W10pOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRjb25zdCBzZWVuVUlEcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cblx0cmV0dXJuIGV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgdWlkID0gZ2V0VUlEKGV2ZW50KVxuXHRcdGNvbnN0IGlzQmFzZVJlY3VycmluZyA9IGV2ZW50LnJydWxlICYmICFldmVudC5yZWN1cnJlbmNlSWRcblx0XHRjb25zdCBpc01vZGlmaWVkSW5zdGFuY2UgPSBldmVudC5yZWN1cnJlbmNlSWQgJiYgIWV2ZW50LnJydWxlXG5cblx0XHRpZiAoaXNCYXNlUmVjdXJyaW5nKSB7XG5cdFx0XHRzZWVuVUlEcy5hZGQodWlkKVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0aWYgKGlzTW9kaWZpZWRJbnN0YW5jZSkge1xuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0cmV0dXJuICFldmVudC5ycnVsZSAmJiAhZXZlbnQucmVjdXJyZW5jZUlkICYmICFzZWVuVUlEcy5oYXModWlkKVxuXHR9KVxufVxuXG5leHBvcnQgY29uc3QgZXhwb3J0VG9JQ2FsZW5kYXIgPSAoXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdLFxuXHRjYWxlbmRhck5hbWUgPSAnaWxhbXkgQ2FsZW5kYXInXG4pOiBzdHJpbmcgPT4ge1xuXHRjb25zdCBuYW1lID0gZXNjYXBlVGV4dChjYWxlbmRhck5hbWUpXG5cdGNvbnN0IHZldmVudFN0cmluZ3MgPSBmaWx0ZXJFdmVudHMoZXZlbnRzKS5tYXAoY29udmVydEV2ZW50VG9WRXZlbnQpXG5cblx0cmV0dXJuIFtcblx0XHQnQkVHSU46VkNBTEVOREFSJyxcblx0XHQnVkVSU0lPTjoyLjAnLFxuXHRcdCdQUk9ESUQ6LS8vaWxhbXkvL2lsYW15IENhbGVuZGFyLy9FTicsXG5cdFx0J0NBTFNDQUxFOkdSRUdPUklBTicsXG5cdFx0J01FVEhPRDpQVUJMSVNIJyxcblx0XHRgWC1XUi1DQUxOQU1FOiR7bmFtZX1gLFxuXHRcdGBYLVdSLUNBTERFU0M6RXhwb3J0ZWQgZnJvbSAke25hbWV9YCxcblx0XHRVVENfVlRJTUVaT05FLFxuXHRcdC4uLnZldmVudFN0cmluZ3MsXG5cdFx0J0VORDpWQ0FMRU5EQVInLFxuXHRdLmpvaW4oQ1JMRilcbn1cblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkSUNhbGVuZGFyID0gKFxuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcblx0ZmlsZW5hbWUgPSAnY2FsZW5kYXIuaWNzJyxcblx0Y2FsZW5kYXJOYW1lID0gJ2lsYW15IENhbGVuZGFyJ1xuKTogdm9pZCA9PiB7XG5cdGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZXhwb3J0VG9JQ2FsZW5kYXIoZXZlbnRzLCBjYWxlbmRhck5hbWUpXSwge1xuXHRcdHR5cGU6ICd0ZXh0L2NhbGVuZGFyO2NoYXJzZXQ9dXRmLTgnLFxuXHR9KVxuXHRjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpXG5cdGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IGZpbGVuYW1lLmVuZHNXaXRoKCcuaWNzJylcblx0XHQ/IGZpbGVuYW1lXG5cdFx0OiBgJHtmaWxlbmFtZX0uaWNzYFxuXG5cdGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcblx0bGluay5ocmVmID0gdXJsXG5cdGxpbmsuZG93bmxvYWQgPSBub3JtYWxpemVkRmlsZW5hbWVcblxuXHRkb2N1bWVudC5ib2R5LmFwcGVuZChsaW5rKVxuXHRsaW5rLmNsaWNrKClcblx0bGluay5yZW1vdmUoKVxuXHRVUkwucmV2b2tlT2JqZWN0VVJMKHVybClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ2hldnJvbkRvd24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldERheUtleSwgZ2V0V2Vla0RheXMsIGlzVG9kYXkgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmNvbnN0IE1PTlRIX0tFWVMgPSBbXG5cdCdqYW51YXJ5Jyxcblx0J2ZlYnJ1YXJ5Jyxcblx0J21hcmNoJyxcblx0J2FwcmlsJyxcblx0J21heScsXG5cdCdqdW5lJyxcblx0J2p1bHknLFxuXHQnYXVndXN0Jyxcblx0J3NlcHRlbWJlcicsXG5cdCdvY3RvYmVyJyxcblx0J25vdmVtYmVyJyxcblx0J2RlY2VtYmVyJyxcbl0gYXMgY29uc3RcblxuY29uc3QgVGl0bGVDb250ZW50ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB2aWV3LCBzZWxlY3REYXRlLCB0LCBmaXJzdERheU9mV2VlayB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdFx0Y3VycmVudERhdGU6IGN0eC5jdXJyZW50RGF0ZSxcblx0XHRcdHZpZXc6IGN0eC52aWV3LFxuXHRcdFx0c2VsZWN0RGF0ZTogY3R4LnNlbGVjdERhdGUsXG5cdFx0XHR0OiBjdHgudCxcblx0XHRcdGZpcnN0RGF5T2ZXZWVrOiBjdHguZmlyc3REYXlPZldlZWssXG5cdFx0fSkpXG5cblx0Y29uc3QgW29wZW5Qb3BvdmVyLCBzZXRPcGVuUG9wb3Zlcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuXG5cdGNvbnN0IG1vbnRocyA9IHVzZU1lbW8oKCkgPT4gTU9OVEhfS0VZUy5tYXAoKGtleSkgPT4gdChrZXkpKSwgW3RdKVxuXHRjb25zdCBjdXJyZW50WWVhciA9IGN1cnJlbnREYXRlLnllYXIoKVxuXHRjb25zdCB5ZWFycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDExIH0sIChfLCBpKSA9PiBjdXJyZW50WWVhciAtIDUgKyBpKVxuXHRjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaylcblxuXHRjb25zdCBoYW5kbGVTZWxlY3REYXRlID0gKGRhdGU6IERheWpzKSA9PiB7XG5cdFx0c2VsZWN0RGF0ZShkYXRlKVxuXHRcdHNldE9wZW5Qb3BvdmVyKG51bGwpXG5cdH1cblxuXHRjb25zdCByZW5kZXJNb250aENvbnRlbnQgPSAoKSA9PiAoXG5cdFx0PD5cblx0XHRcdHttb250aHMubWFwKChtb250aCwgaW5kZXgpID0+IChcblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG5cdFx0XHRcdFx0XHRjdXJyZW50RGF0ZS5tb250aCgpID09PSBpbmRleCAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGtleT17bW9udGh9XG5cdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0RGF0ZShjdXJyZW50RGF0ZS5tb250aChpbmRleCkpfVxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7bW9udGh9XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0KSl9XG5cdFx0PC8+XG5cdClcblxuXHRjb25zdCByZW5kZXJZZWFyQ29udGVudCA9ICgpID0+IChcblx0XHQ8PlxuXHRcdFx0e3llYXJzLm1hcCgoeWVhcikgPT4gKFxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdGN1cnJlbnREYXRlLnllYXIoKSA9PT0geWVhciAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGtleT17eWVhcn1cblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3REYXRlKGN1cnJlbnREYXRlLnllYXIoeWVhcikpfVxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7eWVhcn1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQpKX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlcldlZWtDb250ZW50ID0gKCkgPT4gKFxuXHRcdDw+XG5cdFx0XHR7QXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgaSkgPT4ge1xuXHRcdFx0XHRjb25zdCB3ZWVrRGF0ZSA9IGN1cnJlbnREYXRlLnN1YnRyYWN0KDMsICd3ZWVrJykuYWRkKGksICd3ZWVrJylcblx0XHRcdFx0Y29uc3QgZGF5cyA9IGdldFdlZWtEYXlzKHdlZWtEYXRlLCBmaXJzdERheU9mV2Vlaylcblx0XHRcdFx0Y29uc3Qgc3RhcnQgPSBkYXlzWzBdXG5cdFx0XHRcdGNvbnN0IGVuZCA9IGRheXNbNl1cblx0XHRcdFx0Y29uc3QgaXNDdXJyZW50V2VlayA9IHdlZWtEYXRlLmlzU2FtZShjdXJyZW50RGF0ZSwgJ3dlZWsnKVxuXHRcdFx0XHRjb25zdCBjcm9zc2VzTW9udGggPSBzdGFydC5tb250aCgpICE9PSBlbmQubW9udGgoKVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0XHRpc0N1cnJlbnRXZWVrICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdGtleT17Z2V0RGF5S2V5KHN0YXJ0KX1cblx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdERhdGUoc3RhcnQpfVxuXHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cblx0XHRcdFx0XHRcdFx0PHNwYW4+e2Ake3N0YXJ0LmZvcm1hdCgnTU1NIEQnKX0gLSAke2VuZC5mb3JtYXQoJ0QnKX1gfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0e2Nyb3NzZXNNb250aCAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwibWwtMC41IHRleHQteHMgb3BhY2l0eS03MFwiPntgJHtzdGFydC5mb3JtYXQoJ01NTScpfS0ke2VuZC5mb3JtYXQoJ01NTScpfWB9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvPlxuXHQpXG5cblx0Y29uc3QgcmVuZGVyRGF5Q29udGVudCA9ICgpID0+IHtcblx0XHRjb25zdCBmaXJzdERheSA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcblx0XHRjb25zdCBkYXlzSW5Nb250aCA9IGN1cnJlbnREYXRlLmRheXNJbk1vbnRoKClcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8PlxuXHRcdFx0XHR7QXJyYXkuZnJvbSh7IGxlbmd0aDogZGF5c0luTW9udGggfSwgKF8sIGkpID0+IHtcblx0XHRcdFx0XHRjb25zdCBkYXkgPSBmaXJzdERheS5kYXRlKGkgKyAxKVxuXHRcdFx0XHRcdGNvbnN0IGlzQ3VycmVudERheSA9IGRheS5pc1NhbWUoY3VycmVudERhdGUsICdkYXknKVxuXHRcdFx0XHRcdGNvbnN0IHRvZGF5ID0gaXNUb2RheShkYXkpXG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdFx0XHRpc0N1cnJlbnREYXkgJiYgJ2JnLXByaW1hcnkvMTAnXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdGtleT17Z2V0RGF5S2V5KGRheSl9XG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdERhdGUoZGF5KX1cblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4+e2RheS5mb3JtYXQoJ2RkZGQsIE1NTSBEJyl9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdHt0b2RheSAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtc20gcHgtMSEgdGV4dC14c1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dCgndG9kYXknKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSl9XG5cdFx0XHQ8Lz5cblx0XHQpXG5cdH1cblxuXHRjb25zdCBwb3BvdmVycyA9IFtcblx0XHR7XG5cdFx0XHRpZDogJ21vbnRoJyxcblx0XHRcdGhpZGRlbjogdmlldyA9PT0gJ3llYXInLFxuXHRcdFx0dGl0bGU6IGN1cnJlbnREYXRlLmZvcm1hdCgnTU1NTScpLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJNb250aENvbnRlbnQsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogJ3llYXInLFxuXHRcdFx0aGlkZGVuOiBmYWxzZSxcblx0XHRcdHRpdGxlOiBjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVknKSxcblx0XHRcdHJlbmRlcjogcmVuZGVyWWVhckNvbnRlbnQsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogJ3dlZWsnLFxuXHRcdFx0aGlkZGVuOiB2aWV3ICE9PSAnd2VlaycsXG5cdFx0XHR0aXRsZTogYCR7d2Vla0RheXNbMF0uZm9ybWF0KCdNTU0gRCcpfSAtICR7d2Vla0RheXNbNl0uZm9ybWF0KCdNTU0gRCcpfWAsXG5cdFx0XHRyZW5kZXI6IHJlbmRlcldlZWtDb250ZW50LFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6ICdkYXknLFxuXHRcdFx0aGlkZGVuOiB2aWV3ICE9PSAnZGF5Jyxcblx0XHRcdHRpdGxlOiBjdXJyZW50RGF0ZS5mb3JtYXQoJ2RkZGQsIEQnKSxcblx0XHRcdHJlbmRlcjogcmVuZGVyRGF5Q29udGVudCxcblx0XHR9LFxuXHRdXG5cblx0cmV0dXJuIHBvcG92ZXJzXG5cdFx0LmZpbHRlcigocCkgPT4gIXAuaGlkZGVuKVxuXHRcdC5tYXAoKHBvcG92ZXIpID0+IChcblx0XHRcdDxQb3BvdmVyXG5cdFx0XHRcdGtleT17cG9wb3Zlci5pZH1cblx0XHRcdFx0b25PcGVuQ2hhbmdlPXsob3BlbikgPT4gc2V0T3BlblBvcG92ZXIob3BlbiA/IHBvcG92ZXIuaWQgOiBudWxsKX1cblx0XHRcdFx0b3Blbj17b3BlblBvcG92ZXIgPT09IHBvcG92ZXIuaWR9XG5cdFx0XHQ+XG5cdFx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1tb250aC1idXR0b25cIlxuXHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuXHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImNhbGVuZGFyLW1vbnRoLWJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2tleXMubGlzdEtleShwb3BvdmVyLmlkLCBnZXREYXlLZXkoY3VycmVudERhdGUpKX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3BvcG92ZXIudGl0bGV9XG5cdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHRcdDxDaGV2cm9uRG93biBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0PC9Qb3BvdmVyVHJpZ2dlcj5cblx0XHRcdFx0PFBvcG92ZXJDb250ZW50IGNsYXNzTmFtZT1cInctNDAgcC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IG1heC1oLTYwIGZsZXgtY29sIG92ZXJmbG93LWF1dG9cIj5cblx0XHRcdFx0XHRcdHtwb3BvdmVyLnJlbmRlcigpfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L1BvcG92ZXJDb250ZW50PlxuXHRcdFx0PC9Qb3BvdmVyPlxuXHRcdCkpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFRpdGxlQ29udGVudFxuIiwKICAgICJpbXBvcnQgeyBDaGV2cm9uTGVmdCwgQ2hldnJvblJpZ2h0IH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxudHlwZSBWaWV3VHlwZSA9ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJ1xuY29uc3QgQVZBSUxBQkxFX1ZJRVdTOiBWaWV3VHlwZVtdID0gWydkYXknLCAnd2VlaycsICdtb250aCcsICd5ZWFyJ11cblxuaW50ZXJmYWNlIFZpZXdDb250cm9sc1Byb3BzIHtcblx0Y3VycmVudFZpZXc6IFZpZXdUeXBlXG5cdG9uQ2hhbmdlOiAodmlldzogVmlld1R5cGUpID0+IHZvaWRcblx0b25Ub2RheT86ICgpID0+IHZvaWRcblx0b25OZXh0PzogKCkgPT4gdm9pZFxuXHRvblByZXZpb3VzPzogKCkgPT4gdm9pZFxuXHR2YXJpYW50PzogJ2RlZmF1bHQnIHwgJ2dyaWQnXG5cdHNpemU/OiAnc20nIHwgJ2RlZmF1bHQnXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBWaWV3Q29udHJvbHM6IFJlYWN0LkZDPFZpZXdDb250cm9sc1Byb3BzPiA9ICh7XG5cdGN1cnJlbnRWaWV3LFxuXHRvbkNoYW5nZSxcblx0dmFyaWFudCA9ICdkZWZhdWx0Jyxcblx0c2l6ZSA9ICdzbScsXG5cdGNsYXNzTmFtZSxcblx0b25Ub2RheSxcblx0b25OZXh0LFxuXHRvblByZXZpb3VzLFxufSkgPT4ge1xuXHRjb25zdCB7IHQsIHJlc291cmNlcyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0dDogY29udGV4dC50LFxuXHRcdHJlc291cmNlczogY29udGV4dC5yZXNvdXJjZXMsXG5cdH0pKVxuXHRjb25zdCBpc0dyaWQgPSB2YXJpYW50ID09PSAnZ3JpZCdcblx0Y29uc3QgaXNSZXNvdXJjZUNhbGVuZGFyID0gcmVzb3VyY2VzICYmIHJlc291cmNlcy5sZW5ndGggPiAwXG5cblx0Ly8gRXh0cmFjdCBjb21tb24gYnV0dG9uIGNsYXNzTmFtZSBsb2dpYyB0byBhIGZ1bmN0aW9uXG5cdGNvbnN0IGdldEJ1dHRvbkNsYXNzTmFtZSA9ICh2aWV3VHlwZTogVmlld1R5cGUpID0+IHtcblx0XHRyZXR1cm4gY24oXG5cdFx0XHQvLyBCYXNlIHdpZHRoIGZvciBncmlkIGxheW91dFxuXHRcdFx0aXNHcmlkID8gJ3ctZnVsbCcgOiAnJyxcblx0XHRcdC8vIEFjdGl2ZSB2aWV3IHN0eWxpbmdcblx0XHRcdGN1cnJlbnRWaWV3ID09PSB2aWV3VHlwZSAmJiAnYmctcHJpbWFyeS84MCdcblx0XHQpXG5cdH1cblxuXHRjb25zdCBnZXRCdG5WYXJpYW50ID0gKHZpZXdUeXBlOiBWaWV3VHlwZSkgPT4ge1xuXHRcdHJldHVybiBjdXJyZW50VmlldyA9PT0gdmlld1R5cGUgPyAnZGVmYXVsdCcgOiAnb3V0bGluZSdcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0aXNHcmlkID8gJ2dyaWQgZ3JpZC1jb2xzLTIgZ2FwLTInIDogJ2ZsZXggZ2FwLTEnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0PlxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvblByZXZpb3VzfSBzaXplPXtzaXplfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHQ8Q2hldnJvbkxlZnQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDxCdXR0b24gb25DbGljaz17b25OZXh0fSBzaXplPXtzaXplfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHQ8Q2hldnJvblJpZ2h0IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0PC9CdXR0b24+XG5cblx0XHRcdHtBVkFJTEFCTEVfVklFV1MubWFwKCh0eXBlOiBWaWV3VHlwZSkgPT4ge1xuXHRcdFx0XHRpZiAoaXNSZXNvdXJjZUNhbGVuZGFyICYmIHR5cGUgPT09ICd5ZWFyJykge1xuXHRcdFx0XHRcdHJldHVybiBudWxsXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Z2V0QnV0dG9uQ2xhc3NOYW1lKHR5cGUpfVxuXHRcdFx0XHRcdFx0a2V5PXt0eXBlfVxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gb25DaGFuZ2UodHlwZSl9XG5cdFx0XHRcdFx0XHRzaXplPXtzaXplfVxuXHRcdFx0XHRcdFx0dmFyaWFudD17Z2V0QnRuVmFyaWFudCh0eXBlKX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7dCh0eXBlKX1cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cblx0XHRcdDxCdXR0b24gb25DbGljaz17b25Ub2RheX0gc2l6ZT17c2l6ZX0gdmFyaWFudD1cIm91dGxpbmVcIj5cblx0XHRcdFx0e3QoJ3RvZGF5Jyl9XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgZGVmYXVsdCBWaWV3Q29udHJvbHNcbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgSG9yaXpvbnRhbEdyaWRSb3cgfSBmcm9tICdAL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1yb3cnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB7IEFsbERheUNlbGwgfSBmcm9tICcuL2FsbC1kYXktY2VsbCdcblxuaW50ZXJmYWNlIEFsbERheVJvd1Byb3BzIHtcblx0ZGF5czogRGF5anNbXVxuXHRjbGFzc2VzPzogeyByb3c/OiBzdHJpbmc7IGNlbGw/OiBzdHJpbmc7IHNwYWNlcj86IHN0cmluZyB9XG5cdHJlc291cmNlPzogUmVzb3VyY2Vcblx0c2hvd1NwYWNlcj86IGJvb2xlYW5cbn1cblxuY29uc3QgTm9NZW1vQWxsRGF5Um93OiBSZWFjdC5GQzxBbGxEYXlSb3dQcm9wcz4gPSAoe1xuXHRkYXlzLFxuXHRjbGFzc2VzLFxuXHRyZXNvdXJjZSxcblx0c2hvd1NwYWNlciA9IHRydWUsXG59KSA9PiB7XG5cdGNvbnN0IGNvbHVtbnMgPSBkYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4gKHtcblx0XHRpZDoga2V5cy5jb2wuYWxsRGF5KGRheSwgaW5kZXgpLFxuXHRcdGRheSxcblx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdFx0Y2xhc3NOYW1lOiBjbignaC1mdWxsIG1pbi1oLTEyIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCcsIGNsYXNzZXM/LmNlbGwpLFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggdy1mdWxsIGJnLWJhY2tncm91bmQnLCBjbGFzc2VzPy5yb3cpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJhbGwtZGF5LXJvd1wiXG5cdFx0PlxuXHRcdFx0ey8qIFRpbWUgY29sIHNwYWNlciAqL31cblx0XHRcdHtzaG93U3BhY2VyICYmIDxBbGxEYXlDZWxsIGNsYXNzTmFtZT17Y2xhc3Nlcz8uc3BhY2VyfSAvPn1cblxuXHRcdFx0ey8qIERheSBhbGwgZGF5IGNlbGwgKi99XG5cdFx0XHQ8SG9yaXpvbnRhbEdyaWRSb3dcblx0XHRcdFx0YWxsRGF5XG5cdFx0XHRcdGNsYXNzTmFtZT1cImZsZXgtMSBtaW4taC1maXQgYm9yZGVyLWJcIlxuXHRcdFx0XHRjb2x1bW5zPXtjb2x1bW5zfVxuXHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQ9ezB9XG5cdFx0XHRcdGdyaWRUeXBlPVwiZGF5XCJcblx0XHRcdFx0aWQ9e2tleXMuYWxsRGF5Um93KHJlc291cmNlPy5pZCl9XG5cdFx0XHRcdGlzTGFzdFJvd1xuXHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHRcdC8+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEFsbERheVJvdyA9IG1lbW8oTm9NZW1vQWxsRGF5Um93KVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IG1lbW8sIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZFdlZWtFdmVudHMnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXREYXlLZXkgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5pbXBvcnQgeyBHcmlkQ2VsbCB9IGZyb20gJy4uL2dyaWQtY2VsbCdcbmltcG9ydCB7IFJlc291cmNlQ2VsbCB9IGZyb20gJy4uL3Jlc291cmNlLWNlbGwnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyIH0gZnJvbSAnLi9ob3Jpem9udGFsLWdyaWQtZXZlbnRzLWxheWVyJ1xuXG5pbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRDb2x1bW4ge1xuXHRpZDogc3RyaW5nXG5cdGRheT86IERheWpzXG5cdGRheXM/OiBEYXlqc1tdXG5cdGdyaWRUeXBlOiAnZGF5JyB8ICdob3VyJ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0cmVuZGVyQ2VsbD86IChyb3c6IEhvcml6b250YWxHcmlkUm93UHJvcHMpID0+IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhvcml6b250YWxHcmlkUm93UHJvcHMge1xuXHRpZDogc3RyaW5nIHwgbnVtYmVyXG5cdHJlc291cmNlPzogUmVzb3VyY2Vcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHR2YXJpYW50PzogJ3JlZ3VsYXInIHwgJ3Jlc291cmNlJ1xuXHRkYXlOdW1iZXJIZWlnaHQ/OiBudW1iZXJcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGNvbHVtbnM/OiBIb3Jpem9udGFsR3JpZENvbHVtbltdXG5cdGFsbERheT86IGJvb2xlYW5cblx0c2hvd0RheU51bWJlcj86IGJvb2xlYW5cblx0aXNMYXN0Um93PzogYm9vbGVhblxufVxuXG5jb25zdCBOb01lbW9Ib3Jpem9udGFsR3JpZFJvdzogUmVhY3QuRkM8SG9yaXpvbnRhbEdyaWRSb3dQcm9wcz4gPSAoe1xuXHRpZCxcblx0cmVzb3VyY2UsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHZhcmlhbnQgPSAncmVzb3VyY2UnLFxuXHRkYXlOdW1iZXJIZWlnaHQsXG5cdGNsYXNzTmFtZSxcblx0Y29sdW1ucyA9IFtdLFxuXHRhbGxEYXksXG5cdHNob3dEYXlOdW1iZXIgPSBmYWxzZSxcblx0aXNMYXN0Um93ID0gZmFsc2UsXG59KSA9PiB7XG5cdGNvbnN0IHsgcmVuZGVyUmVzb3VyY2UgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSB2YXJpYW50ID09PSAncmVzb3VyY2UnXG5cdC8vIEZsYXQgY29sdW1uczogZWFjaCBjb2x1bW4gaGFzIGNvbC5kYXkgKHJlZ3VsYXIgbW9udGgsIHJlc291cmNlIG1vbnRoKVxuXHQvLyBHcm91cGVkIGNvbHVtbnM6IGVhY2ggY29sdW1uIGhhcyBjb2wuZGF5c1tdIChyZXNvdXJjZSB3ZWVrIGhvcml6b250YWwpXG5cdGNvbnN0IGlzR3JvdXBlZCA9IGNvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wuZGF5cylcblxuXHQvLyBDb2xsZWN0IGFsbCBkYXlzIGZvciBmbGF0IHJvd3Ncblx0Y29uc3QgZmxhdERheXMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoaXNHcm91cGVkKSByZXR1cm4gW11cblx0XHRyZXR1cm4gY29sdW1ucy5tYXAoKGNvbCkgPT4gY29sLmRheSkuZmlsdGVyKChkKTogZCBpcyBEYXlqcyA9PiBCb29sZWFuKGQpKVxuXHR9LCBbY29sdW1ucywgaXNHcm91cGVkXSlcblxuXHQvLyBDb21wdXRlIGV2ZW50cyBvbmNlIGF0IHRoZSByb3cgbGV2ZWwg4oCUIHNoYXJlZCBiZXR3ZWVuIEdyaWRDZWxscyBhbmQgZXZlbnRzIGxheWVyXG5cdGNvbnN0IHsgcG9zaXRpb25lZEV2ZW50cywgZGF5RXZlbnRzTWFwIH0gPSB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzKHtcblx0XHRkYXlzOiBmbGF0RGF5cyxcblx0XHRncmlkVHlwZSxcblx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZT8uaWQsXG5cdFx0ZGF5TnVtYmVySGVpZ2h0LFxuXHRcdGFsbERheSxcblx0fSlcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC0xIHJlbGF0aXZlJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmNvbnRhaW5lci5ob3Jpem9udGFsLnJvdyhpZCl9XG5cdFx0PlxuXHRcdFx0e2lzUmVzb3VyY2VDYWxlbmRhciAmJiByZXNvdXJjZSAmJiAoXG5cdFx0XHRcdDxSZXNvdXJjZUNlbGxcblx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAgaC1mdWxsXCJcblx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5jb250YWluZXIuaG9yaXpvbnRhbC5yb3dMYWJlbChyZXNvdXJjZS5pZCl9XG5cdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3JlbmRlclJlc291cmNlID8gKFxuXHRcdFx0XHRcdFx0cmVuZGVyUmVzb3VyY2UocmVzb3VyY2UpXG5cdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwid3JhcC1icmVhay13b3JkIHRleHQtc21cIj57cmVzb3VyY2UudGl0bGV9PC9kaXY+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PC9SZXNvdXJjZUNlbGw+XG5cdFx0XHQpfVxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4LTEgZmxleFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsXCI+XG5cdFx0XHRcdFx0e2NvbHVtbnMubWFwKChjb2wsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoY29sLmRheXMpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHQ8R3JvdXBlZENvbHVtblxuXHRcdFx0XHRcdFx0XHRcdFx0YWxsRGF5PXthbGxEYXl9XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2w9e2NvbH1cblx0XHRcdFx0XHRcdFx0XHRcdGRheU51bWJlckhlaWdodD17ZGF5TnVtYmVySGVpZ2h0fVxuXHRcdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdFx0aWQ9e2lkfVxuXHRcdFx0XHRcdFx0XHRcdFx0aXNMYXN0Q29sPXtpbmRleCA9PT0gY29sdW1ucy5sZW5ndGggLSAxfVxuXHRcdFx0XHRcdFx0XHRcdFx0aXNMYXN0Um93PXtpc0xhc3RSb3d9XG5cdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2NvbC5pZH1cblx0XHRcdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlPy5pZH1cblx0XHRcdFx0XHRcdFx0XHRcdHNob3dEYXlOdW1iZXI9e3Nob3dEYXlOdW1iZXJ9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29sLmRheSA/IChcblx0XHRcdFx0XHRcdFx0PEdyaWRDZWxsXG5cdFx0XHRcdFx0XHRcdFx0YWxsRGF5PXthbGxEYXl9XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdmbGV4LTEgdy0yMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3cgJiYgJ2JvcmRlci1iLTAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sLmNsYXNzTmFtZVxuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF5PXtjb2wuZGF5fVxuXHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRob3VyPXtncmlkVHlwZSA9PT0gJ2hvdXInID8gY29sLmRheS5ob3VyKCkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtjb2wuZGF5LnRvSVNPU3RyaW5nKCl9XG5cdFx0XHRcdFx0XHRcdFx0cHJlY29tcHV0ZWRFdmVudHM9e2RheUV2ZW50c01hcC5nZXQoZ2V0RGF5S2V5KGNvbC5kYXkpKX1cblx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZT8uaWR9XG5cdFx0XHRcdFx0XHRcdFx0c2hvd0RheU51bWJlcj17c2hvd0RheU51bWJlcn1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdCkgOiBudWxsXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBFdmVudHMgbGF5ZXIgcG9zaXRpb25lZCBhYnNvbHV0ZWx5IG92ZXIgdGhlIHJvdyAqL31cblx0XHRcdFx0eyFpc0dyb3VwZWQgJiYgKFxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCB6LTEwIHBvaW50ZXItZXZlbnRzLW5vbmVcIj5cblx0XHRcdFx0XHRcdDxIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmNvbnRhaW5lci5ldmVudHNMYXllcignaG9yaXpvbnRhbCcsIGlkKX1cblx0XHRcdFx0XHRcdFx0ZGF5cz17ZmxhdERheXN9XG5cdFx0XHRcdFx0XHRcdHBvc2l0aW9uZWRFdmVudHM9e3Bvc2l0aW9uZWRFdmVudHN9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlPy5pZH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG4vKipcbiAqIEEgY29sdW1uIGNvbnRhaW5pbmcgbXVsdGlwbGUgZGF5cyAoZS5nLiwgb25lIGRheSdzIGhvdXJseSBzbG90cyBpbiByZXNvdXJjZSB3ZWVrIHZpZXcpLlxuICogTmVlZHMgaXRzIG93biB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzIGNhbGwgc2luY2UgZXZlbnRzIGFyZSBzY29wZWQgdG8gdGhpcyBkYXkgZ3JvdXAuXG4gKi9cbmNvbnN0IEdyb3VwZWRDb2x1bW4gPSBtZW1vKFxuXHQoe1xuXHRcdGNvbCxcblx0XHRncmlkVHlwZSA9ICdkYXknLFxuXHRcdGFsbERheSxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGRheU51bWJlckhlaWdodCxcblx0XHRzaG93RGF5TnVtYmVyLFxuXHRcdGlzTGFzdFJvdyxcblx0XHRpc0xhc3RDb2wsXG5cdFx0aWQsXG5cdH06IHtcblx0XHRjb2w6IEhvcml6b250YWxHcmlkQ29sdW1uXG5cdFx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRcdGFsbERheT86IGJvb2xlYW5cblx0XHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdFx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdFx0c2hvd0RheU51bWJlcjogYm9vbGVhblxuXHRcdGlzTGFzdFJvdzogYm9vbGVhblxuXHRcdGlzTGFzdENvbDogYm9vbGVhblxuXHRcdGlkOiBzdHJpbmcgfCBudW1iZXJcblx0fSkgPT4ge1xuXHRcdGNvbnN0IGRheXMgPSBjb2wuZGF5cyA/PyBbXVxuXHRcdGNvbnN0IHsgcG9zaXRpb25lZEV2ZW50cyB9ID0gdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyh7XG5cdFx0XHRkYXlzLFxuXHRcdFx0Z3JpZFR5cGUsXG5cdFx0XHRyZXNvdXJjZUlkLFxuXHRcdFx0ZGF5TnVtYmVySGVpZ2h0LFxuXHRcdFx0YWxsRGF5LFxuXHRcdH0pXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHJlbGF0aXZlIHctZnVsbFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsXCI+XG5cdFx0XHRcdFx0e2RheXMubWFwKChkYXkpID0+IChcblx0XHRcdFx0XHRcdDxHcmlkQ2VsbFxuXHRcdFx0XHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHQnZmxleC0xIHctMjAnLFxuXHRcdFx0XHRcdFx0XHRcdGlzTGFzdFJvdyAmJiAnYm9yZGVyLWItMCcsXG5cdFx0XHRcdFx0XHRcdFx0IWlzTGFzdENvbCAmJiAnYm9yZGVyLXIhJyxcblx0XHRcdFx0XHRcdFx0XHRjb2wuY2xhc3NOYW1lXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdGRheT17ZGF5fVxuXHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdGhvdXI9e2dyaWRUeXBlID09PSAnaG91cicgPyBkYXkuaG91cigpIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdFx0XHRrZXk9e2RheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZUlkfVxuXHRcdFx0XHRcdFx0XHRzaG93RGF5TnVtYmVyPXtzaG93RGF5TnVtYmVyfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuXHRcdFx0XHRcdDxIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyXG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5jb250YWluZXIuZXZlbnRzTGF5ZXIoJ2hvcml6b250YWwnLCBpZCl9XG5cdFx0XHRcdFx0XHRkYXlzPXtkYXlzfVxuXHRcdFx0XHRcdFx0cG9zaXRpb25lZEV2ZW50cz17cG9zaXRpb25lZEV2ZW50c31cblx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlSWR9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpXG5cdH1cbilcblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkUm93ID0gbWVtbyhOb01lbW9Ib3Jpem9udGFsR3JpZFJvdylcbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZ2V0RGF5S2V5IH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7XG5cdGV2ZW50T3ZlcmxhcHNSYW5nZSxcblx0ZmlsdGVyRXZlbnRzQnlSZXNvdXJjZSxcbn0gZnJvbSAnQC9saWIvdXRpbHMvZXZlbnQtdXRpbHMnXG5pbXBvcnQge1xuXHRnZXRQb3NpdGlvbmVkRXZlbnRzLFxuXHR0eXBlIFBvc2l0aW9uZWRFdmVudCxcbn0gZnJvbSAnQC9saWIvdXRpbHMvcG9zaXRpb24td2Vlay1ldmVudHMnXG5cbmludGVyZmFjZSBVc2VQcm9jZXNzZWRXZWVrRXZlbnRzUHJvcHMge1xuXHRkYXlzOiBEYXlqc1tdXG5cdGFsbERheT86IGJvb2xlYW5cblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NlZFdlZWtFdmVudHNSZXN1bHQge1xuXHRwb3NpdGlvbmVkRXZlbnRzOiBQb3NpdGlvbmVkRXZlbnRbXVxuXHRkYXlFdmVudHNNYXA6IE1hcDxzdHJpbmcsIENhbGVuZGFyRXZlbnRbXT5cbn1cblxuZXhwb3J0IGNvbnN0IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMgPSAoe1xuXHRkYXlzLFxuXHRhbGxEYXksXG5cdGRheU51bWJlckhlaWdodCxcblx0cmVzb3VyY2VJZCxcblx0Z3JpZFR5cGUsXG59OiBVc2VQcm9jZXNzZWRXZWVrRXZlbnRzUHJvcHMpOiBQcm9jZXNzZWRXZWVrRXZlbnRzUmVzdWx0ID0+IHtcblx0Y29uc3Qge1xuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRkYXlNYXhFdmVudHMsXG5cdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdGV2ZW50SGVpZ2h0LFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IGZpcnN0ID0gZGF5cy5hdCgwKVxuXHRjb25zdCBsYXN0ID0gZGF5cy5hdCgtMSlcblx0Y29uc3Qgd2Vla1N0YXJ0ID0gZmlyc3Q/LnN0YXJ0T2YoJ2RheScpXG5cdGNvbnN0IHdlZWtFbmQgPSBsYXN0Py5lbmRPZignZGF5JylcblxuXHRjb25zdCBldmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoIXdlZWtTdGFydCB8fCAhd2Vla0VuZCkgcmV0dXJuIFtdXG5cdFx0bGV0IHdlZWtFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uod2Vla1N0YXJ0LCB3ZWVrRW5kKVxuXHRcdGlmIChyZXNvdXJjZUlkKSB7XG5cdFx0XHR3ZWVrRXZlbnRzID0gZmlsdGVyRXZlbnRzQnlSZXNvdXJjZShcblx0XHRcdFx0d2Vla0V2ZW50cyxcblx0XHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UocmVzb3VyY2VJZClcblx0XHRcdClcblx0XHR9XG5cblx0XHRpZiAoYWxsRGF5KSB7XG5cdFx0XHR3ZWVrRXZlbnRzID0gd2Vla0V2ZW50cy5maWx0ZXIoKGUpID0+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/IChcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bSB0cnVuY2F0ZVwiPntyZXNvdXJjZS50aXRsZX08L2Rpdj5cblx0XHRcdFx0XHQpKX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5pbXBvcnQgdHlwZSB7IFBvc2l0aW9uZWRFdmVudCB9IGZyb20gJ0AvbGliL3V0aWxzL3Bvc2l0aW9uLXdlZWstZXZlbnRzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJQcm9wcyB7XG5cdGRheXM6IERheWpzW11cblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdHBvc2l0aW9uZWRFdmVudHM6IFBvc2l0aW9uZWRFdmVudFtdXG59XG5cbmNvbnN0IE5vTWVtb0hvcml6b250YWxHcmlkRXZlbnRzTGF5ZXI6IFJlYWN0LkZDPFxuXHRIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyUHJvcHNcbj4gPSAoeyBkYXlzLCByZXNvdXJjZUlkLCAnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLCBwb3NpdGlvbmVkRXZlbnRzIH0pID0+IHtcblx0Y29uc3QgeyBldmVudEhlaWdodCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCB3ZWVrU3RhcnQgPSBkYXlzLmF0KDApPy5zdGFydE9mKCdkYXknKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCBwb2ludGVyLWV2ZW50cy1ub25lIHotMTAgb3ZlcmZsb3ctY2xpcFwiXG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHQ+XG5cdFx0XHR7cG9zaXRpb25lZEV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50S2V5ID0gYCR7ZXZlbnQuaWR9LSR7ZXZlbnQucG9zaXRpb259LSR7d2Vla1N0YXJ0Py50b0lTT1N0cmluZygpfS0ke3Jlc291cmNlSWQgPz8gJ25vLXJlc291cmNlJ31gXG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJhYnNvbHV0ZSB6LTEwIHBvaW50ZXItZXZlbnRzLWF1dG8gb3ZlcmZsb3ctY2xpcFwiXG5cdFx0XHRcdFx0XHRkYXRhLWxlZnQ9e2V2ZW50LmxlZnR9XG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5jb250YWluZXIuaG9yaXpvbnRhbC5ldmVudChldmVudC5pZCl9XG5cdFx0XHRcdFx0XHRkYXRhLXRvcD17ZXZlbnQudG9wfVxuXHRcdFx0XHRcdFx0ZGF0YS13aWR0aD17ZXZlbnQud2lkdGh9XG5cdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShldmVudEtleSwgJ3dyYXBwZXInKX1cblx0XHRcdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0XHRcdGxlZnQ6IGBjYWxjKCR7ZXZlbnQubGVmdH0lICsgdmFyKC0tc3BhY2luZykgKiAwLjI1KWAsXG5cdFx0XHRcdFx0XHRcdHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDEpYCxcblx0XHRcdFx0XHRcdFx0dG9wOiBgJHtldmVudC50b3B9cHhgLFxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IGAke2V2ZW50SGVpZ2h0fXB4YCxcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PERyYWdnYWJsZUV2ZW50XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtZnVsbCB3LWZ1bGwgc2hhZG93XCJcblx0XHRcdFx0XHRcdFx0ZWxlbWVudElkPXtldmVudEtleX1cblx0XHRcdFx0XHRcdFx0ZXZlbnQ9e2V2ZW50fVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXIgPSBtZW1vKE5vTWVtb0hvcml6b250YWxHcmlkRXZlbnRzTGF5ZXIpXG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBBbGxEYXlDZWxsUHJvcHMge1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgTm9NZW1vQWxsRGF5Q2VsbDogUmVhY3QuRkM8QWxsRGF5Q2VsbFByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCd3LTE2IGJvcmRlci1yIHNocmluay0wIHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwIGZsZXggYm9yZGVyLWIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHNtOnRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdD5cblx0XHRcdHt0KCdhbGxEYXknKX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgQWxsRGF5Q2VsbCA9IG1lbW8oTm9NZW1vQWxsRGF5Q2VsbClcbiIsCiAgICAiaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgSG91ckxhYmVsUHJvcHMge1xuXHRkYXRlOiBEYXlqc1xufVxuXG5leHBvcnQgY29uc3QgSG91ckxhYmVsOiBSZWFjdC5GQzxIb3VyTGFiZWxQcm9wcz4gPSAoeyBkYXRlIH0pID0+IHtcblx0Y29uc3QgeyByZW5kZXJIb3VyLCB0aW1lRm9ybWF0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKHJlbmRlckhvdXIpIHtcblx0XHRyZXR1cm4gPD57cmVuZGVySG91cihkYXRlKX08Lz5cblx0fVxuXG5cdHJldHVybiA8PntkYXRlLmZvcm1hdCh0aW1lRm9ybWF0ID09PSAnMTItaG91cicgPyAnaCBBJyA6ICdIJyl9PC8+XG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5pbXBvcnQgeyBHcmlkQ2VsbCB9IGZyb20gJy4uL2dyaWQtY2VsbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyIH0gZnJvbSAnLi92ZXJ0aWNhbC1ncmlkLWV2ZW50cy1sYXllcidcblxuZXhwb3J0IGludGVyZmFjZSBWZXJ0aWNhbEdyaWRDb2xQcm9wcyB7XG5cdGlkOiBzdHJpbmdcblx0ZGF5PzogRGF5anNcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRyZXNvdXJjZT86IFJlc291cmNlXG5cdGRheXM6IERheWpzW10gLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGNvbHVtbiByZXByZXNlbnRzXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0cmVuZGVySGVhZGVyPzogKCkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdHJlbmRlckNlbGw/OiAoZGF0ZTogRGF5anMpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRub0V2ZW50cz86IGJvb2xlYW5cblx0LyoqIE9wdGlvbmFsIGFycmF5IG9mIG1pbnV0ZSBzbG90cyBieSB3aGljaCB0aGUgaG91ciBpcyBkaXZpZGVkXG5cdCAqIGUuZy4sIFswLCAxNSwgMzAsIDQ1XSBmb3IgcXVhcnRlci1ob3VyIHNsb3RzXG5cdCAqL1xuXHRjZWxsU2xvdHM/OiBudW1iZXJbXVxuXHQvKiogV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNvbHVtbiBpbiB0aGUgZ3JpZCAqL1xuXHRpc0xhc3RDb2x1bW4/OiBib29sZWFuXG59XG5cbmNvbnN0IE5vTWVtb1ZlcnRpY2FsR3JpZENvbDogUmVhY3QuRkM8VmVydGljYWxHcmlkQ29sUHJvcHM+ID0gKHtcblx0aWQsXG5cdGRheXMsXG5cdHJlc291cmNlSWQsXG5cdHJlc291cmNlLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxuXHRncmlkVHlwZSxcblx0Y2xhc3NOYW1lLFxuXHRyZW5kZXJDZWxsLFxuXHRub0V2ZW50cyxcblx0Y2VsbFNsb3RzID0gWzYwXSwgLy8gRGVmYXVsdCB0byBmdWxsIGhvdXIgc2xvdHNcblx0aXNMYXN0Q29sdW1uLFxufSkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGZsZXgtY29sIGZsZXgtMSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWluLXctMjAgYmctYmFja2dyb3VuZCByZWxhdGl2ZScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkIHx8IGtleXMuY29udGFpbmVyLnZlcnRpY2FsLmNvbChpZCl9XG5cdFx0PlxuXHRcdFx0ey8qIFRpbWUgc2xvdHMgKi99XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBoLWZ1bGwgcmVsYXRpdmUgZ3JpZFwiXG5cdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0Z3JpZFRlbXBsYXRlUm93czogYHJlcGVhdCgke2RheXMubGVuZ3RofSwgbWlubWF4KDAsIDFmcikpYCxcblx0XHRcdFx0fX1cblx0XHRcdD5cblx0XHRcdFx0e2RheXMubWFwKChkYXksIGRheUluZGV4KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgaG91clN0ciA9IGRheS5mb3JtYXQoJ0hIJylcblxuXHRcdFx0XHRcdGlmIChyZW5kZXJDZWxsKSB7XG5cdFx0XHRcdFx0XHRjb25zdCB0ZXN0SWQgPVxuXHRcdFx0XHRcdFx0XHRpZCA9PT0ga2V5cy5jb2wudGltZVxuXHRcdFx0XHRcdFx0XHRcdD8ga2V5cy5jZWxsLnZlcnRpY2FsVGltZShob3VyU3RyKVxuXHRcdFx0XHRcdFx0XHRcdDoga2V5cy5jZWxsLnZlcnRpY2FsKGRheSwgaG91clN0ciwgJzAwJywgcmVzb3VyY2VJZClcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtaW4taC1bNjBweF0gYm9yZGVyLWIgYm9yZGVyLXJcIlxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXt0ZXN0SWR9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoaWQsIGRheUluZGV4LCBob3VyU3RyKX1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHtyZW5kZXJDZWxsKGRheSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBjZWxsU2xvdHMubWFwKChtaW51dGUpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IG0gPSBtaW51dGUgPT09IDYwID8gdW5kZWZpbmVkIDogbWludXRlXG5cdFx0XHRcdFx0XHRjb25zdCBtbSA9IG0gPT09IHVuZGVmaW5lZCA/ICcwMCcgOiBTdHJpbmcobSkucGFkU3RhcnQoMiwgJzAnKVxuXHRcdFx0XHRcdFx0Y29uc3QgdGVzdElkID0ga2V5cy5jZWxsLnZlcnRpY2FsKGRheSwgaG91clN0ciwgbW0sIHJlc291cmNlSWQpXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxHcmlkQ2VsbFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHQnaG92ZXI6YmctYWNjZW50IHJlbGF0aXZlIHotMTAgbWluLWgtWzYwcHhdIGN1cnNvci1wb2ludGVyIGJvcmRlci1iJyxcblx0XHRcdFx0XHRcdFx0XHRcdG1pbnV0ZSA9PT0gNjAgPyAnJyA6ICdib3JkZXItZGFzaGVkIGgtWzE1cHhdIG1pbi1oLVsxNXB4XScsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RDb2x1bW4gPyAnYm9yZGVyLXItMCcgOiAnYm9yZGVyLXInXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17dGVzdElkfVxuXHRcdFx0XHRcdFx0XHRcdGRheT17bSA/IGRheS5taW51dGUobSkgOiBkYXl9XG5cdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdGhvdXI9e2RheS5ob3VyKCl9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoaWQsIGRheUluZGV4LCBtbSl9XG5cdFx0XHRcdFx0XHRcdFx0bWludXRlPXttfVxuXHRcdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlSWR9IC8vIEV2ZW50cyBhcmUgcmVuZGVyZWQgaW4gYSBzZXBhcmF0ZSBsYXllclxuXHRcdFx0XHRcdFx0XHRcdHNob3VsZFJlbmRlckV2ZW50cz17ZmFsc2V9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSl9XG5cblx0XHRcdFx0ey8qIEV2ZW50IGJsb2NrcyBsYXllciAqL31cblx0XHRcdFx0eyFub0V2ZW50cyAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuXHRcdFx0XHRcdFx0PFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmNvbnRhaW5lci5ldmVudHNMYXllcigndmVydGljYWwnLCBpZCl9XG5cdFx0XHRcdFx0XHRcdGRheXM9e2RheXN9XG5cdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZUlkfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0KX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBWZXJ0aWNhbEdyaWRDb2wgPSBtZW1vKFxuXHROb01lbW9WZXJ0aWNhbEdyaWRDb2xcbikgYXMgdHlwZW9mIE5vTWVtb1ZlcnRpY2FsR3JpZENvbFxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDdXJyZW50VGltZUluZGljYXRvciB9IGZyb20gJ0AvY29tcG9uZW50cy9jdXJyZW50LXRpbWUtaW5kaWNhdG9yJ1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7IHVzZVByb2Nlc3NlZERheUV2ZW50cyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvaG9va3MvdXNlUHJvY2Vzc2VkRGF5RXZlbnRzJ1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmludGVyZmFjZSBWZXJ0aWNhbEdyaWRFdmVudHNMYXllclByb3BzIHtcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRkYXlzOiBEYXlqc1tdIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBsYXllciByZXByZXNlbnRzXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG59XG5cbmNvbnN0IE5vTWVtb1ZlcnRpY2FsR3JpZEV2ZW50c0xheWVyOiBSZWFjdC5GQzxWZXJ0aWNhbEdyaWRFdmVudHNMYXllclByb3BzPiA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2hvdXInLFxuXHRyZXNvdXJjZUlkLFxuXHRyZXNvdXJjZSxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcbn0pID0+IHtcblx0Y29uc3QgdG9kYXlFdmVudHMgPSB1c2VQcm9jZXNzZWREYXlFdmVudHMoeyBkYXlzLCBncmlkVHlwZSwgcmVzb3VyY2VJZCB9KVxuXHRjb25zdCByYW5nZVN0YXJ0ID0gZGF5cy5hdCgwKVxuXHRjb25zdCByYW5nZUVuZCA9IGRheXMuYXQoLTEpPy5hZGQoMSwgZ3JpZFR5cGUpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHBvaW50ZXItZXZlbnRzLW5vbmUgei0xMCBvdmVyZmxvdy1jbGlwXCJcblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkfVxuXHRcdD5cblx0XHRcdHtyYW5nZVN0YXJ0ICYmIHJhbmdlRW5kICYmIChcblx0XHRcdFx0PEN1cnJlbnRUaW1lSW5kaWNhdG9yXG5cdFx0XHRcdFx0cmFuZ2VFbmQ9e3JhbmdlRW5kfVxuXHRcdFx0XHRcdHJhbmdlU3RhcnQ9e3JhbmdlU3RhcnR9XG5cdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHQvPlxuXHRcdFx0KX1cblx0XHRcdHt0b2RheUV2ZW50cy5tYXAoKGV2ZW50LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBldmVudEtleSA9IGBldmVudC0ke2V2ZW50LmlkfS0ke2luZGV4fS0ke2RheXMuYXQoMCk/LnRvSVNPU3RyaW5nKCl9LSR7cmVzb3VyY2VJZCA/PyAnbm8tcmVzb3VyY2UnfWBcblx0XHRcdFx0Y29uc3QgaXNTaG9ydEV2ZW50ID0gZXZlbnQuZW5kLmRpZmYoZXZlbnQuc3RhcnQsICdtaW51dGUnKSA8PSAxNVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGVcIlxuXHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoZXZlbnRLZXksICd3cmFwcGVyJyl9XG5cdFx0XHRcdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRcdFx0XHRsZWZ0OiBgJHtldmVudC5sZWZ0fSVgLFxuXHRcdFx0XHRcdFx0XHR3aWR0aDogYGNhbGMoJHtldmVudC53aWR0aH0lIC0gdmFyKC0tc3BhY2luZykgKiAyKWAsXG5cdFx0XHRcdFx0XHRcdHRvcDogYCR7ZXZlbnQudG9wfSVgLFxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IGAke2V2ZW50LmhlaWdodH0lYCxcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PERyYWdnYWJsZUV2ZW50XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ3BvaW50ZXItZXZlbnRzLWF1dG8nLCB7XG5cdFx0XHRcdFx0XHRcdFx0J1smX3BdOnRleHQtWzEwcHhdIFsmX3BdOm10LTAnOiBpc1Nob3J0RXZlbnQsXG5cdFx0XHRcdFx0XHRcdH0pfVxuXHRcdFx0XHRcdFx0XHRlbGVtZW50SWQ9e2V2ZW50S2V5fVxuXHRcdFx0XHRcdFx0XHRldmVudD17ZXZlbnR9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgVmVydGljYWxHcmlkRXZlbnRzTGF5ZXIgPSBtZW1vKE5vTWVtb1ZlcnRpY2FsR3JpZEV2ZW50c0xheWVyKVxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuaW50ZXJmYWNlIEN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMge1xuXHQvKiogVGhlIHN0YXJ0IGRhdGUvdGltZSBvZiB0aGUgY29udGFpbmVyJ3MgdGltZWxpbmUgKGUuZy4sIHRvcCBvZiB0aGUgY29sdW1uKSAqL1xuXHRyYW5nZVN0YXJ0OiBEYXlqc1xuXHQvKiogVGhlIGVuZCBkYXRlL3RpbWUgb2YgdGhlIGNvbnRhaW5lcidzIHRpbWVsaW5lIChlLmcuLCBib3R0b20gb2YgdGhlIGNvbHVtbikgKi9cblx0cmFuZ2VFbmQ6IERheWpzXG5cdC8qKiBPcHRpb25hbCByZWZlcmVuY2UgdGltZSBmb3IgXCJub3dcIiAodXNlZnVsIGZvciB0ZXN0aW5nKSAqL1xuXHRub3c/OiBEYXlqc1xuXHQvKiogVGhlIHJlc291cmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbHVtbiAob3B0aW9uYWwpICovXG5cdHJlc291cmNlPzogUmVzb3VyY2Vcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgaG9yaXpvbnRhbCByZWQgbGluZSBpbmRpY2F0aW5nIHRoZSBjdXJyZW50IHRpbWUgcmVsYXRpdmUgdG8gYSB2ZXJ0aWNhbCBjb250YWluZXIncyB0aW1lbGluZS5cbiAqIFRoZSBpbmRpY2F0b3IgaGFuZGxlcyBpdHMgb3duIHZpc2liaWxpdHkgYmFzZWQgb24gd2hldGhlciAnbm93JyBmYWxscyB3aXRoaW4gdGhlIHByb3ZpZGVkIHJhbmdlLlxuICogU3VwcG9ydHMgY3VzdG9tIHJlbmRlcmluZyB2aWEgcmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IgZnJvbSBjb250ZXh0LlxuICovXG5jb25zdCBOb01lbW9DdXJyZW50VGltZUluZGljYXRvciA9ICh7XG5cdHJhbmdlU3RhcnQsXG5cdHJhbmdlRW5kLFxuXHRub3c6IHByb3BOb3csXG5cdHJlc291cmNlLFxufTogQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcykgPT4ge1xuXHQvLyBHZXQgcmVuZGVyIGZ1bmN0aW9uIGFuZCBjdXJyZW50IHZpZXcgZnJvbSBjb250ZXh0XG5cdGNvbnN0IHsgcmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsIHZpZXcgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KFxuXHRcdChzdGF0ZSkgPT4gKHtcblx0XHRcdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yOiBzdGF0ZS5yZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdHZpZXc6IHN0YXRlLnZpZXcsXG5cdFx0fSlcblx0KVxuXG5cdGNvbnN0IG5vdyA9IHByb3BOb3cgPz8gZGF5anMoKVxuXG5cdC8vIENoZWNrIGlmIGN1cnJlbnQgdGltZSBmYWxscyB3aXRoaW4gdGhpcyByYW5nZVxuXHRjb25zdCBpc1dpdGhpblJhbmdlID0gbm93LmlzU2FtZU9yQWZ0ZXIocmFuZ2VTdGFydCkgJiYgbm93LmlzQmVmb3JlKHJhbmdlRW5kKVxuXG5cdGlmICghaXNXaXRoaW5SYW5nZSkge1xuXHRcdHJldHVybiBudWxsXG5cdH1cblxuXHRjb25zdCB0b3RhbER1cmF0aW9uID0gcmFuZ2VFbmQuZGlmZihyYW5nZVN0YXJ0LCAnbWludXRlJylcblx0Y29uc3QgbWludXRlc0Zyb21TdGFydCA9IG5vdy5kaWZmKHJhbmdlU3RhcnQsICdtaW51dGUnKVxuXHRjb25zdCBwcm9ncmVzcyA9IChtaW51dGVzRnJvbVN0YXJ0IC8gdG90YWxEdXJhdGlvbikgKiAxMDBcblxuXHQvLyBJZiBjdXN0b20gcmVuZGVyIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHZpYSBjb250ZXh0LCB1c2UgaXRcblx0aWYgKHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDw+XG5cdFx0XHRcdHtyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcih7XG5cdFx0XHRcdFx0Y3VycmVudFRpbWU6IG5vdyxcblx0XHRcdFx0XHRyYW5nZVN0YXJ0LFxuXHRcdFx0XHRcdHJhbmdlRW5kLFxuXHRcdFx0XHRcdHByb2dyZXNzLFxuXHRcdFx0XHRcdHJlc291cmNlLFxuXHRcdFx0XHRcdHZpZXcsXG5cdFx0XHRcdH0pfVxuXHRcdFx0PC8+XG5cdFx0KVxuXHR9XG5cblx0Ly8gRGVmYXVsdCBpbmRpY2F0b3IgcmVuZGVyaW5nXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGUgbGVmdC0wIHJpZ2h0LTAgaC0wLjUgYmctcmVkLTUwMCB6LTUwIHBvaW50ZXItZXZlbnRzLW5vbmVcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJjdXJyZW50LXRpbWUtaW5kaWNhdG9yXCJcblx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdHRvcDogYCR7cHJvZ3Jlc3N9JWAsXG5cdFx0XHR9fVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEN1cnJlbnRUaW1lSW5kaWNhdG9yID0gbWVtbyhOb01lbW9DdXJyZW50VGltZUluZGljYXRvcilcbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZmlsdGVyRXZlbnRzQnlSZXNvdXJjZSB9IGZyb20gJ0AvbGliL3V0aWxzL2V2ZW50LXV0aWxzJ1xuaW1wb3J0IHtcblx0Z2V0UG9zaXRpb25lZERheUV2ZW50cyxcblx0dHlwZSBQb3NpdGlvbmVkRXZlbnQsXG59IGZyb20gJ0AvbGliL3V0aWxzL3Bvc2l0aW9uLWRheS1ldmVudHMnXG5cbmludGVyZmFjZSBVc2VQcm9jZXNzZWREYXlFdmVudHNQcm9wcyB7XG5cdGRheXM6IERheWpzW10gLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGNvbHVtbiByZXByZXNlbnRzXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUsXG5cdHJlc291cmNlSWQsXG59OiBVc2VQcm9jZXNzZWREYXlFdmVudHNQcm9wcykgPT4ge1xuXHRjb25zdCB7IGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgZ2V0RXZlbnRzRm9yUmVzb3VyY2UgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCBmaXJzdCA9IGRheXMuYXQoMClcblx0Y29uc3QgbGFzdCA9IGRheXMuYXQoLTEpXG5cdGNvbnN0IGRheVN0YXJ0ID0gZmlyc3Q/LnN0YXJ0T2YoJ2RheScpXG5cdGNvbnN0IGRheUVuZCA9IGxhc3Q/LmVuZE9mKCdkYXknKVxuXG5cdGNvbnN0IGV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmICghZGF5U3RhcnQgfHwgIWRheUVuZCkgcmV0dXJuIFtdXG5cdFx0bGV0IGRheUV2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShkYXlTdGFydCwgZGF5RW5kKVxuXHRcdGlmIChyZXNvdXJjZUlkKSB7XG5cdFx0XHRkYXlFdmVudHMgPSBmaWx0ZXJFdmVudHNCeVJlc291cmNlKFxuXHRcdFx0XHRkYXlFdmVudHMsXG5cdFx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlKHJlc291cmNlSWQpXG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0Ly8gVmVydGljYWwgZ3JpZHMgKERheS9XZWVrL1Jlc291cmNlIFZlcnRpY2FsKSBuZXZlciByZW5kZXIgYWxsLWRheSBldmVudHNcblx0XHQvLyBhcyB0aG9zZSBhcmUgaGFuZGxlZCBieSB0aGUgYWxsLWRheS1yb3cgb3IgYXJlIG5vdCBhcHByb3ByaWF0ZSBmb3IgdGhlIHRpbWUgZ3JpZC5cblx0XHRyZXR1cm4gZGF5RXZlbnRzLmZpbHRlcigoZSkgPT4gIWUuYWxsRGF5KVxuXHR9LCBbXG5cdFx0ZGF5U3RhcnQsXG5cdFx0ZGF5RW5kLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRdKVxuXG5cdGNvbnN0IHRvZGF5RXZlbnRzID0gdXNlTWVtbzxQb3NpdGlvbmVkRXZlbnRbXT4oKCkgPT4ge1xuXHRcdHJldHVybiBnZXRQb3NpdGlvbmVkRGF5RXZlbnRzKHtcblx0XHRcdGRheXMsXG5cdFx0XHRldmVudHMsXG5cdFx0XHRncmlkVHlwZSxcblx0XHR9KVxuXHR9LCBbZGF5cywgZ3JpZFR5cGUsIGV2ZW50c10pXG5cblx0cmV0dXJuIHRvZGF5RXZlbnRzXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpb25lZEV2ZW50IGV4dGVuZHMgQ2FsZW5kYXJFdmVudCB7XG5cdGxlZnQ6IG51bWJlciAvLyBMZWZ0IHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0d2lkdGg6IG51bWJlciAvLyBXaWR0aCBpbiBwZXJjZW50YWdlXG5cdHRvcDogbnVtYmVyIC8vIFRvcCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdGhlaWdodDogbnVtYmVyIC8vIEhlaWdodCBpbiBwZXJjZW50YWdlXG5cdHpJbmRleD86IG51bWJlciAvLyBaLWluZGV4IGZvciBsYXllcmluZyBvdmVybGFwcGluZyBldmVudHNcbn1cblxuaW50ZXJmYWNlIEdldFBvc2l0aW9uZWREYXlFdmVudHNQYXJhbXMge1xuXHRkYXlzOiBEYXlqc1tdXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cicgfCAnbWludXRlJ1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxufVxuXG5leHBvcnQgY29uc3QgZ2V0UG9zaXRpb25lZERheUV2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2hvdXInLFxuXHRldmVudHMsXG59OiBHZXRQb3NpdGlvbmVkRGF5RXZlbnRzUGFyYW1zKTogUG9zaXRpb25lZEV2ZW50W10gPT4ge1xuXHQvLyBGaWx0ZXIgb3V0IGFsbC1kYXkgZXZlbnRzIGFuZCBzb3J0IGJ5IHN0YXJ0IHRpbWVcblx0Y29uc3Qgc29ydGVkRXZlbnRzID0gZXZlbnRzXG5cdFx0LmZpbHRlcigoZSkgPT4gIWUuYWxsRGF5KVxuXHRcdC50b1NvcnRlZCgoYSwgYikgPT4gYS5zdGFydC5kaWZmKGIuc3RhcnQpKVxuXG5cdGlmIChzb3J0ZWRFdmVudHMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIFtdXG5cdH1cblxuXHQvLyBEZXRlcm1pbmUgZ3JpZCBib3VuZGFyaWVzIGFuZCBtZXRyaWNzXG5cdC8vIFVzZSBleHBsaWNpdCBzdGFydE9mIHRvIGVuc3VyZSB3ZSBhcmUgYW5jaG9yZWQgdG8gdGhlIGdyaWQgdW5pdCBib3VuZGFyaWVzXG5cdC8vIFRoaXMgcHJldmVudHMgb2Zmc2V0cyBpZiB0aGUgZ3JpZCBkYXlzIGFyZSBub3Qgbm9ybWFsaXplZFxuXHRjb25zdCBncmlkU3RhcnQgPSBkYXlzLmF0KDApIHx8IGRheWpzKClcblx0Y29uc3QgdG90YWxVbml0cyA9IGRheXMubGVuZ3RoXG5cdGNvbnN0IGlzRGlzY3JldGUgPSBncmlkVHlwZSA9PT0gJ2RheSdcblxuXHQvLyBTdGVwIDE6IEdyb3VwIGV2ZW50cyBpbnRvIGNsdXN0ZXJzIG9mIG92ZXJsYXBwaW5nIGV2ZW50c1xuXHRjb25zdCBjbHVzdGVyczogQ2FsZW5kYXJFdmVudFtdW10gPSBbXVxuXHRsZXQgY3VycmVudENsdXN0ZXI6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cdGxldCBsYXN0RXZlbnRFbmQ6IERheWpzIHwgbnVsbCA9IG51bGxcblx0Zm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRFdmVudHMpIHtcblx0XHRpZiAobGFzdEV2ZW50RW5kICYmIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIobGFzdEV2ZW50RW5kKSkge1xuXHRcdFx0aWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y2x1c3RlcnMucHVzaChjdXJyZW50Q2x1c3Rlcilcblx0XHRcdH1cblx0XHRcdGN1cnJlbnRDbHVzdGVyID0gW11cblx0XHR9XG5cdFx0Y3VycmVudENsdXN0ZXIucHVzaChldmVudClcblx0XHRsYXN0RXZlbnRFbmQgPSBsYXN0RXZlbnRFbmQgPyBkYXlqcy5tYXgobGFzdEV2ZW50RW5kLCBldmVudC5lbmQpIDogZXZlbnQuZW5kXG5cdH1cblx0aWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcblx0XHRjbHVzdGVycy5wdXNoKGN1cnJlbnRDbHVzdGVyKVxuXHR9XG5cblx0Ly8gQ29tcHV0ZSB0b3AvaGVpZ2h0IHBlcmNlbnRhZ2VzIGZvciBhbiBldmVudCwgY2xhbXBlZCB0byBncmlkOyBudWxsIGlmIG91dHNpZGUuXG5cdGNvbnN0IGNvbXB1dGVUb3BIZWlnaHQgPSAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0KTogeyB0b3A6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB8IG51bGwgPT4ge1xuXHRcdGxldCBzdGFydFRpbWUgPSBldmVudC5zdGFydC5kaWZmKGdyaWRTdGFydCwgZ3JpZFR5cGUsIHRydWUpXG5cdFx0bGV0IGVuZFRpbWUgPSBldmVudC5lbmQuZGlmZihncmlkU3RhcnQsIGdyaWRUeXBlLCB0cnVlKVxuXHRcdGlmIChpc0Rpc2NyZXRlKSB7XG5cdFx0XHRzdGFydFRpbWUgPSBNYXRoLmZsb29yKHN0YXJ0VGltZSlcblx0XHRcdGVuZFRpbWUgPSBNYXRoLmNlaWwoZW5kVGltZSlcblx0XHRcdGlmIChlbmRUaW1lIDw9IHN0YXJ0VGltZSkgZW5kVGltZSA9IHN0YXJ0VGltZSArIDFcblx0XHR9XG5cdFx0aWYgKHN0YXJ0VGltZSA8IDApIHN0YXJ0VGltZSA9IDBcblx0XHRpZiAoZW5kVGltZSA+IHRvdGFsVW5pdHMpIGVuZFRpbWUgPSB0b3RhbFVuaXRzXG5cdFx0Y29uc3QgZHVyYXRpb24gPSBNYXRoLm1heCgwLCBlbmRUaW1lIC0gc3RhcnRUaW1lKVxuXHRcdGlmIChkdXJhdGlvbiA9PT0gMCkgcmV0dXJuIG51bGxcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiAoc3RhcnRUaW1lIC8gdG90YWxVbml0cykgKiAxMDAsXG5cdFx0XHRoZWlnaHQ6IChkdXJhdGlvbiAvIHRvdGFsVW5pdHMpICogMTAwLFxuXHRcdH1cblx0fVxuXG5cdC8vIE1heCBjbHVzdGVyIG9mZnNldCBieSBldmVudCBjb3VudCAoMiBldmVudHMg4oaSIDI1JSwgZXRjLilcblx0Y29uc3QgbWF4T2Zmc2V0QnlDb3VudCA9IChuOiBudW1iZXIpID0+XG5cdFx0biA9PT0gMiA/IDI1IDogbiA9PT0gMyA/IDUwIDogbiA9PT0gNCA/IDYwIDogNzBcblxuXHQvLyBTdGVwIDI6IEZvciBlYWNoIGNsdXN0ZXIsIGNvbXB1dGUgcG9zaXRpb25zXG5cdGNvbnN0IHByb2Nlc3NlZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W10gPSBbXVxuXHRmb3IgKGNvbnN0IGNsdXN0ZXIgb2YgY2x1c3RlcnMpIHtcblx0XHRpZiAoY2x1c3Rlci5sZW5ndGggPT09IDEpIHtcblx0XHRcdGNvbnN0IGV2ZW50ID0gY2x1c3RlclswXVxuXHRcdFx0Y29uc3QgcG9zID0gY29tcHV0ZVRvcEhlaWdodChldmVudClcblx0XHRcdGlmICghcG9zKSBjb250aW51ZVxuXHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goeyAuLi5ldmVudCwgbGVmdDogMCwgd2lkdGg6IDEwMCwgLi4ucG9zIH0pXG5cdFx0XHRjb250aW51ZVxuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGV2ZW50cyDigJQgbGF5ZXJlZCBwb3NpdGlvbmluZy4gTG9uZ2VzdCBkdXJhdGlvbiBmaXJzdCwgdGllLWJyZWFrXG5cdFx0Ly8gYnkgZWFybGllc3Qgc3RhcnQuXG5cdFx0Y29uc3Qgc29ydGVkQ2x1c3RlciA9IFsuLi5jbHVzdGVyXS5zb3J0KChhLCBiKSA9PiB7XG5cdFx0XHRjb25zdCBkdXJEaWZmID1cblx0XHRcdFx0Yi5lbmQuZGlmZihiLnN0YXJ0LCAnbWludXRlJykgLSBhLmVuZC5kaWZmKGEuc3RhcnQsICdtaW51dGUnKVxuXHRcdFx0cmV0dXJuIGR1ckRpZmYgIT09IDAgPyBkdXJEaWZmIDogYS5zdGFydC5kaWZmKGIuc3RhcnQpXG5cdFx0fSlcblxuXHRcdGNvbnN0IG4gPSBzb3J0ZWRDbHVzdGVyLmxlbmd0aFxuXHRcdGNvbnN0IG9mZnNldFBlckV2ZW50ID0gbiA+IDEgPyBtYXhPZmZzZXRCeUNvdW50KG4pIC8gKG4gLSAxKSA6IDBcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBldmVudCA9IHNvcnRlZENsdXN0ZXJbaV1cblx0XHRcdGNvbnN0IHBvcyA9IGNvbXB1dGVUb3BIZWlnaHQoZXZlbnQpXG5cdFx0XHRpZiAoIXBvcykgY29udGludWVcblx0XHRcdC8vIEZpcnN0IGV2ZW50IChsb25nZXN0KSB0YWtlcyBmdWxsIHdpZHRoOyBsYXRlciBldmVudHMgYXJlIG9mZnNldC5cblx0XHRcdGNvbnN0IGxlZnQgPSBpID09PSAwID8gMCA6IG9mZnNldFBlckV2ZW50ICogaVxuXHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuXHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0Li4ucG9zLFxuXHRcdFx0XHRsZWZ0LFxuXHRcdFx0XHR3aWR0aDogMTAwIC0gbGVmdCxcblx0XHRcdFx0ekluZGV4OiBpICsgMSxcblx0XHRcdH0pXG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHByb2Nlc3NlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXJQcm9wcyB7XG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzZXM/OiB7IGhlYWRlcj86IHN0cmluZzsgYWxsRGF5Pzogc3RyaW5nIH1cblx0YWxsRGF5Um93PzogUmVhY3QuUmVhY3ROb2RlXG59XG5cbmNvbnN0IE5vTWVtb1ZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lcjogUmVhY3QuRkM8XG5cdFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lclByb3BzXG4+ID0gKHsgY2hpbGRyZW4sIGNsYXNzZXMsIGFsbERheVJvdyB9KSA9PiB7XG5cdGNvbnN0IHsgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoXG5cdFx0KHN0YXRlKSA9PiAoe1xuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcjogc3RhdGUuc3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWU6IHN0YXRlLnZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0fSlcblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0c3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMjEgYmctYmFja2dyb3VuZCcsIC8vIFotaW5kZXggYWJvdmUgdGhlIGxlZnQgc3RpY2t5IHJlc291cmNlIGNvbHVtblxuXHRcdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdD5cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbignaC0xMiBib3JkZXItYiB3LWZpdCcsIGNsYXNzZXM/LmhlYWRlcil9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1oZWFkZXJcIlxuXHRcdFx0PlxuXHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdHsvKiBBbGwtZGF5IHJvdyAqL31cblx0XHRcdHthbGxEYXlSb3cgJiYgKFxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCB3LWZ1bGwgbWluLWgtMTInLCBjbGFzc2VzPy5hbGxEYXkpfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1hbGwtZGF5XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHthbGxEYXlSb3d9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyID0gbWVtbyhcblx0Tm9NZW1vVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyXG4pXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkQ29sLCB0eXBlIFZlcnRpY2FsR3JpZENvbFByb3BzIH0gZnJvbSAnLi92ZXJ0aWNhbC1ncmlkLWNvbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lciB9IGZyb20gJy4vdmVydGljYWwtZ3JpZC1oZWFkZXItY29udGFpbmVyJ1xuXG5pbnRlcmZhY2UgVmVydGljYWxHcmlkUHJvcHMge1xuXHRjb2x1bW5zOiBWZXJ0aWNhbEdyaWRDb2xQcm9wc1tdXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0dmFyaWFudD86ICdyZWd1bGFyJyB8ICdyZXNvdXJjZSdcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBib2R5Pzogc3RyaW5nOyBhbGxEYXk/OiBzdHJpbmcgfVxuXHRhbGxEYXlSb3c/OiBSZWFjdC5SZWFjdE5vZGVcblx0LyoqXG5cdCAqIE9wdGlvbmFsIGFycmF5IG9mIG1pbnV0ZSBzbG90cyBieSB3aGljaCB0aGUgaG91ciBpcyBkaXZpZGVkXG5cdCAqIGUuZy4sIFswLCAxNSwgMzAsIDQ1XSBmb3IgcXVhcnRlci1ob3VyIHNsb3RzXG5cdCAqL1xuXHRjZWxsU2xvdHM/OiBudW1iZXJbXVxuXHRzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcbn1cblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsR3JpZDogUmVhY3QuRkM8VmVydGljYWxHcmlkUHJvcHM+ID0gKHtcblx0Y29sdW1ucyxcblx0Y2hpbGRyZW4sXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHZhcmlhbnQgPSAncmVzb3VyY2UnLFxuXHRjbGFzc2VzLFxuXHRhbGxEYXlSb3csXG5cdGNlbGxTbG90cyxcblx0c3R5bGUsXG59KSA9PiB7XG5cdGNvbnN0IGlzUmVzb3VyY2VDYWxlbmRhciA9IHZhcmlhbnQgPT09ICdyZXNvdXJjZSdcblx0Y29uc3QgaXNSZWd1bGFyQ2FsZW5kYXIgPSAhaXNSZXNvdXJjZUNhbGVuZGFyXG5cblx0Y29uc3QgaGVhZGVyID0gY2hpbGRyZW4gJiYgKFxuXHRcdDxWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXJcblx0XHRcdGFsbERheVJvdz17YWxsRGF5Um93fVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6IGNsYXNzZXM/LmhlYWRlciwgYWxsRGF5OiBjbGFzc2VzPy5hbGxEYXkgfX1cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9WZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXI+XG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImgtZnVsbCBmbGV4IGZsZXgtY29sXCJcblx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1jb250YWluZXJcIlxuXHRcdFx0c3R5bGU9e3N0eWxlfVxuXHRcdD5cblx0XHRcdHsvKiBoZWFkZXIgcm93ICovfVxuXHRcdFx0e2lzUmVndWxhckNhbGVuZGFyICYmIGhlYWRlcn1cblxuXHRcdFx0PFNjcm9sbEFyZWFcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbignaC1mdWxsJywgaXNSZWd1bGFyQ2FsZW5kYXIgJiYgJ292ZXJmbG93LWF1dG8nKX1cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLXNjcm9sbFwiXG5cdFx0XHRcdHZpZXdQb3J0UHJvcHM9e3sgY2xhc3NOYW1lOiAnKjpmbGV4ISAqOmZsZXgtY29sISAqOm1pbi1oLWZ1bGwnIH19XG5cdFx0XHQ+XG5cdFx0XHRcdHsvKiBoZWFkZXIgcm93IGZvciByZXNvdXJjZSBjYWxlbmRhciBpbnNpZGUgc2Nyb2xsIGFyZWEgKi99XG5cdFx0XHRcdHtpc1Jlc291cmNlQ2FsZW5kYXIgJiYgaGVhZGVyfVxuXHRcdFx0XHR7LyogQ2FsZW5kYXIgYXJlYSB3aXRoIHNjcm9sbCAqL31cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC0xIHctZml0JywgY2xhc3Nlcz8uYm9keSl9XG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLWJvZHlcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0ey8qIERheSBjb2x1bW5zIHdpdGggdGltZSBzbG90cyAqL31cblx0XHRcdFx0XHR7Y29sdW1ucy5tYXAoKGNvbHVtbiwgaW5kZXgpID0+IChcblx0XHRcdFx0XHRcdDxWZXJ0aWNhbEdyaWRDb2xcblx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoY29sdW1uLmlkLCBpbmRleCl9XG5cdFx0XHRcdFx0XHRcdHsuLi5jb2x1bW59XG5cdFx0XHRcdFx0XHRcdGNlbGxTbG90cz17Y2VsbFNsb3RzfVxuXHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdGlzTGFzdENvbHVtbj17aW5kZXggPT09IGNvbHVtbnMubGVuZ3RoIC0gMX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiAvPiB7LyogdmVydGljYWwgc2Nyb2xsYmFyICovfVxuXHRcdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiBvcmllbnRhdGlvbj1cImhvcml6b250YWxcIiAvPnsnICd9XG5cdFx0XHRcdHsvKiBob3Jpem9udGFsIHNjcm9sbGJhciAqL31cblx0XHRcdDwvU2Nyb2xsQXJlYT5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBnZXREYXlIb3VycyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBjYWxjdWxhdGVCdXNpbmVzc0hvdXJzUmFuZ2UgfSBmcm9tICcuL2J1c2luZXNzLWhvdXJzJ1xuXG5pbnRlcmZhY2UgR2V0Vmlld0hvdXJzT3B0aW9ucyB7XG5cdHJlZmVyZW5jZURhdGU6IERheWpzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzPzogYm9vbGVhblxuXHQvKipcblx0ICogRm9yIHZpZXdzIHdpdGggbXVsdGlwbGUgZGF5cyAobGlrZSBXZWVrVmlldyksIHdlIG1pZ2h0IHdhbnQgdG8gc2hvd1xuXHQgKiB0aGUgdW5pb24gb2YgYWxsIGJ1c2luZXNzIGhvdXJzIGFjcm9zcyB0aG9zZSBkYXlzLlxuXHQgKi9cblx0YWxsRGF0ZXM/OiBEYXlqc1tdXG5cdC8qKlxuXHQgKiBPcHRpb25hbCBhZGRpdGlvbmFsIGJ1c2luZXNzIGhvdXJzIGNvbmZpZ3VyYXRpb25zIChlLmcuLCBmcm9tIHJlc291cmNlcykuXG5cdCAqIFRoZXNlIHdpbGwgYmUgbWVyZ2VkIHdpdGggdGhlIGdsb2JhbCBidXNpbmVzc0hvdXJzIHdoZW4gY2FsY3VsYXRpbmcgdGhlIHZpc2libGUgcmFuZ2UuXG5cdCAqL1xuXHRyZXNvdXJjZUJ1c2luZXNzSG91cnM/OiAoQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSlbXVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgbGlzdCBvZiBob3VycyB0byBkaXNwbGF5IGluIHRoZSBjYWxlbmRhciB2aWV3LlxuICogSWYgaGlkZU5vbkJ1c2luZXNzSG91cnMgaXMgdHJ1ZSwgaXQgZmlsdGVycyB0aGUgaG91cnMgYmFzZWQgb24gYnVzaW5lc3NIb3VycyBjb25maWd1cmF0aW9uLlxuICogRm9yIG11bHRpcGxlIGRhdGVzLCBpdCB0YWtlcyB0aGUgZWFybGllc3Qgc3RhcnQgYW5kIGxhdGVzdCBlbmQgYWNyb3NzIGFsbCBkYXRlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdIb3Vycyh7XG5cdHJlZmVyZW5jZURhdGUsXG5cdGJ1c2luZXNzSG91cnMsXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRhbGxEYXRlcyA9IFtyZWZlcmVuY2VEYXRlXSxcblx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzID0gW10sXG59OiBHZXRWaWV3SG91cnNPcHRpb25zKTogRGF5anNbXSB7XG5cdGNvbnN0IGhvdXJzID0gZ2V0RGF5SG91cnMoeyByZWZlcmVuY2VEYXRlIH0pXG5cblx0Y29uc3QgaGFzQnVzaW5lc3NIb3Vyc0NvbmZpZyA9XG5cdFx0ISFidXNpbmVzc0hvdXJzIHx8IHJlc291cmNlQnVzaW5lc3NIb3Vycy5sZW5ndGggPiAwXG5cdGNvbnN0IHNob3VsZEZpbHRlckJ5QnVzaW5lc3NIb3VycyA9XG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMgJiYgaGFzQnVzaW5lc3NIb3Vyc0NvbmZpZ1xuXG5cdGlmICghc2hvdWxkRmlsdGVyQnlCdXNpbmVzc0hvdXJzKSByZXR1cm4gaG91cnNcblxuXHRjb25zdCB7IG1pblN0YXJ0LCBtYXhFbmQsIGhhc0J1c2luZXNzSG91cnMgfSA9IGNhbGN1bGF0ZUJ1c2luZXNzSG91cnNSYW5nZSh7XG5cdFx0YWxsRGF0ZXMsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdH0pXG5cblx0aWYgKCFoYXNCdXNpbmVzc0hvdXJzKSByZXR1cm4gaG91cnNcblxuXHRyZXR1cm4gaG91cnMuZmlsdGVyKChoKSA9PiB7XG5cdFx0Y29uc3QgaG91ciA9IGguaG91cigpXG5cdFx0cmV0dXJuIGhvdXIgPj0gbWluU3RhcnQgJiYgaG91ciA8IG1heEVuZFxuXHR9KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbGxEYXlSb3cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgSG91ckxhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvdXItbGFiZWwvaG91ci1sYWJlbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0RGF5S2V5LCBpc1RvZGF5IH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5leHBvcnQgY29uc3QgRGF5VmlldyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgdCwgYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCB0b2RheSA9IGlzVG9kYXkoY3VycmVudERhdGUpXG5cdGNvbnN0IGhvdXJzID0gZ2V0Vmlld0hvdXJzKHtcblx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGFsbERhdGVzOiBbY3VycmVudERhdGVdLFxuXHR9KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiBrZXlzLmNvbC50aW1lLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBEYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHQ8SG91ckxhYmVsIGRhdGU9e2RhdGV9IC8+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHtcblx0XHRpZDoga2V5cy5jb2wuZGF5KGN1cnJlbnREYXRlKSxcblx0XHRkYXk6IGN1cnJlbnREYXRlLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGNsYXNzTmFtZTogJ3ctW2NhbGMoMTAwJS00cmVtKV0gZmxleC0xJyxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8VmVydGljYWxHcmlkXG5cdFx0XHRhbGxEYXlSb3c9ezxBbGxEYXlSb3cgZGF5cz17W2N1cnJlbnREYXRlXX0gLz59XG5cdFx0XHRjZWxsU2xvdHM9e1swLCAxNSwgMzAsIDQ1XX1cblx0XHRcdGNsYXNzZXM9e3tcblx0XHRcdFx0aGVhZGVyOiAndy1mdWxsJyxcblx0XHRcdFx0Ym9keTogJ3ctZnVsbCcsXG5cdFx0XHRcdGFsbERheTogJ3ctZnVsbCcsXG5cdFx0XHR9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCBjb2x1bW5zXX1cblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0XHR2YXJpYW50PVwicmVndWxhclwiXG5cdFx0PlxuXHRcdFx0ey8qIEhlYWRlciAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXsnZmxleCBmbGV4LTEganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIG1pbi1oLTEyJ31cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJkYXktdmlldy1oZWFkZXJcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciB0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCBzbTp0ZXh0LXhsJyxcblx0XHRcdFx0XHRcdHRvZGF5ICYmICd0ZXh0LXByaW1hcnknXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtnZXREYXlLZXkoY3VycmVudERhdGUpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwieHM6aW5saW5lIGhpZGRlblwiPlxuXHRcdFx0XHRcdFx0e2N1cnJlbnREYXRlLmZvcm1hdCgnZGRkZCwgJyl9XG5cdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdHtjdXJyZW50RGF0ZS5mb3JtYXQoJ01NTU0gRCwgWVlZWScpfVxuXHRcdFx0XHRcdHt0b2RheSAmJiAoXG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIG1sLTIgcm91bmRlZC1mdWxsIHB4LTEgcHktMC41IHRleHQteHMgc206cHgtMiBzbTp0ZXh0LXNtXCI+XG5cdFx0XHRcdFx0XHRcdHt0KCd0b2RheScpfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgZ2V0TW9udGhXZWVrcyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB7IE1vbnRoSGVhZGVyIH0gZnJvbSAnLi9tb250aC1oZWFkZXInXG5pbXBvcnQgdHlwZSB7IE1vbnRoVmlld1Byb3BzIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGNvbnN0IE1vbnRoVmlldzogUmVhY3QuRkM8TW9udGhWaWV3UHJvcHM+ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHdlZWtzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRNb250aFdlZWtzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IHJvd3MgPSB3ZWVrcy5tYXAoKGRheXMsIHdlZWtJbmRleCkgPT4gKHtcblx0XHRpZDoga2V5cy5saXN0S2V5KCd3ZWVrJywgd2Vla0luZGV4KSxcblx0XHRjb2x1bW5zOiBkYXlzLm1hcCgoZGF5KSA9PiAoe1xuXHRcdFx0aWQ6IGtleXMuY29sLmRheShkYXkpLFxuXHRcdFx0ZGF5LFxuXHRcdFx0Y2xhc3NOYW1lOiAndy1hdXRvJyxcblx0XHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0XHR9KSksXG5cdFx0Y2xhc3NOYW1lOiAnZmxleC0xJyxcblx0XHRzaG93RGF5TnVtYmVyOiB0cnVlLFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxIb3Jpem9udGFsR3JpZFxuXHRcdFx0Y2xhc3Nlcz17eyBib2R5OiAndy1mdWxsJywgaGVhZGVyOiAndy1mdWxsJyB9fVxuXHRcdFx0cm93cz17cm93c31cblx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHQ+XG5cdFx0XHQ8TW9udGhIZWFkZXIgY2xhc3NOYW1lPVwiaC0xMlwiIC8+XG5cdFx0PC9Ib3Jpem9udGFsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXJQcm9wcyB7XG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBOb01lbW9Ib3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciA9ICh7XG5cdGNoaWxkcmVuLFxuXHRjbGFzc05hbWUsXG59OiBIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lclByb3BzKSA9PiB7XG5cdGNvbnN0IHsgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoXG5cdFx0KHN0YXRlKSA9PiAoe1xuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcjogc3RhdGUuc3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWU6IHN0YXRlLnZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0fSlcblx0KVxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGgtMTIgdy1maXQnLFxuXHRcdFx0XHRzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMSBiZy1iYWNrZ3JvdW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lLFxuXHRcdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtaGVhZGVyXCJcblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyID0gbWVtbyhcblx0Tm9NZW1vSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXJcbilcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBTY3JvbGxBcmVhLCBTY3JvbGxCYXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXIgfSBmcm9tICcuL2hvcml6b250YWwtZ3JpZC1oZWFkZXItY29udGFpbmVyJ1xuaW1wb3J0IHtcblx0SG9yaXpvbnRhbEdyaWRSb3csXG5cdHR5cGUgSG9yaXpvbnRhbEdyaWRSb3dQcm9wcyxcbn0gZnJvbSAnLi9ob3Jpem9udGFsLWdyaWQtcm93J1xuXG5pbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRQcm9wcyB7XG5cdHJvd3M6IEhvcml6b250YWxHcmlkUm93UHJvcHNbXVxuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc2VzPzogeyBoZWFkZXI/OiBzdHJpbmc7IGJvZHk/OiBzdHJpbmcgfVxuXHRhbGxEYXk/OiBib29sZWFuXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0dmFyaWFudD86ICdyZWd1bGFyJyB8ICdyZXNvdXJjZSdcblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBIb3Jpem9udGFsR3JpZDogUmVhY3QuRkM8SG9yaXpvbnRhbEdyaWRQcm9wcz4gPSAoe1xuXHRyb3dzLFxuXHRjaGlsZHJlbixcblx0Y2xhc3Nlcyxcblx0YWxsRGF5OiB0b3BMZXZlbEFsbERheSxcblx0Z3JpZFR5cGUsXG5cdHZhcmlhbnQgPSAncmVzb3VyY2UnLFxuXHRkYXlOdW1iZXJIZWlnaHQsXG59KSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSB2YXJpYW50ID09PSAncmVzb3VyY2UnXG5cdGNvbnN0IGlzUmVndWxhckNhbGVuZGFyID0gIWlzUmVzb3VyY2VDYWxlbmRhclxuXG5cdGNvbnN0IGhlYWRlciA9IGNoaWxkcmVuICYmIChcblx0XHQ8SG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXIgY2xhc3NOYW1lPXtjbGFzc2VzPy5oZWFkZXJ9PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXI+XG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImgtZnVsbCBmbGV4IGZsZXgtY29sXCJcblx0XHRcdGRhdGEtdGVzdGlkPVwiaG9yaXpvbnRhbC1ncmlkLWNvbnRhaW5lclwiXG5cdFx0PlxuXHRcdFx0ey8qKlxuXHRcdFx0ICogaGVhZGVyIHJvdyBpcyByZW5kZXJlZCBvdXRzaWRlIHNjcm9sbCBhcmVhIGZvciByZWd1bGFyIGNhbGVuZGFyXG5cdFx0XHQgKi99XG5cdFx0XHR7aXNSZWd1bGFyQ2FsZW5kYXIgJiYgaGVhZGVyfVxuXG5cdFx0XHQ8U2Nyb2xsQXJlYVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKCdoLWZ1bGwnLCBpc1JlZ3VsYXJDYWxlbmRhciAmJiAnb3ZlcmZsb3ctYXV0bycpfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cImhvcml6b250YWwtZ3JpZC1zY3JvbGxcIlxuXHRcdFx0XHR2aWV3UG9ydFByb3BzPXt7IGNsYXNzTmFtZTogJyo6ZmxleCEgKjpmbGV4LWNvbCEgKjptaW4taC1mdWxsJyB9fVxuXHRcdFx0PlxuXHRcdFx0XHR7LyoqXG5cdFx0XHRcdCAqIGhlYWRlciByb3cgZm9yIHJlc291cmNlIGNhbGVuZGFyIGluc2lkZSBzY3JvbGwgYXJlYVxuXHRcdFx0XHQgKiAqL31cblx0XHRcdFx0e2lzUmVzb3VyY2VDYWxlbmRhciAmJiBoZWFkZXJ9XG5cblx0XHRcdFx0ey8qIENhbGVuZGFyIGFyZWEgd2l0aCBzY3JvbGwgKi99XG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKCdmbGV4IGZsZXgtMSB3LWZpdCcsIGNsYXNzZXM/LmJvZHkpfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiaG9yaXpvbnRhbC1ncmlkLWJvZHlcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwicmVsYXRpdmUgdy1mdWxsIGZsZXggZmxleC1jb2wgZmxleC0xXCJcblx0XHRcdFx0XHRcdGtleT17Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NJyl9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0e3Jvd3MubWFwKChyb3csIGluZGV4KSA9PiAoXG5cdFx0XHRcdFx0XHRcdDxIb3Jpem9udGFsR3JpZFJvd1xuXHRcdFx0XHRcdFx0XHRcdGFsbERheT17cm93LmFsbERheSA/PyB0b3BMZXZlbEFsbERheX1cblx0XHRcdFx0XHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQ9e2RheU51bWJlckhlaWdodH1cblx0XHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdFx0aXNMYXN0Um93PXtpbmRleCA9PT0gcm93cy5sZW5ndGggLSAxfVxuXHRcdFx0XHRcdFx0XHRcdGtleT17cm93LmlkfVxuXHRcdFx0XHRcdFx0XHRcdHZhcmlhbnQ9e3ZhcmlhbnR9XG5cdFx0XHRcdFx0XHRcdFx0ey4uLnJvd31cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiAvPlxuXHRcdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiBvcmllbnRhdGlvbj1cImhvcml6b250YWxcIiAvPlxuXHRcdFx0PC9TY3JvbGxBcmVhPlxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuaW50ZXJmYWNlIE1vbnRoSGVhZGVyUHJvcHMge1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IE1vbnRoSGVhZGVyOiBSZWFjdC5GQzxNb250aEhlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG5cdGNvbnN0IHsgZmlyc3REYXlPZldlZWssIHN0aWNreVZpZXdIZWFkZXIsIHZpZXdIZWFkZXJDbGFzc05hbWUsIGN1cnJlbnREYXRlIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHQvLyBSZW9yZGVyIHdlZWsgZGF5cyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuXHRjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaylcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IHctZnVsbCcsXG5cdFx0XHRcdHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIwJyxcblx0XHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJtb250aC1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdHt3ZWVrRGF5cy5tYXAoKHdlZWtEYXksIGluZGV4KSA9PiAoXG5cdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRjbGFzc05hbWU9XCJweS0yIHRleHQtY2VudGVyIGZvbnQtbWVkaXVtIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBib3JkZXItYiBmbGV4LTFcIlxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmhlYWRlci53ZWVrZGF5KCdtb250aCcsIHdlZWtEYXkuZm9ybWF0KCdkZGQnKSl9XG5cdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRrZXk9e3dlZWtEYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXt3ZWVrRGF5LnRvSVNPU3RyaW5nKCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGNhcGl0YWxpemVcIj57d2Vla0RheS5mb3JtYXQoJ2RkZCcpfTwvc3Bhbj5cblx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHQpKX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBIb3VyTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvaG91ci1sYWJlbC9ob3VyLWxhYmVsJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cywgaXNUb2RheSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuY29uc3QgQ0VMTF9DTEFTUyA9XG5cdCd3LVtjYWxjKCgxMDAlLTRyZW0pL3ZhcigtLXZpc2libGUtZGF5cykpXSBtaW4tdy1bY2FsYygoMTAwJS00cmVtKS92YXIoLS12aXNpYmxlLWRheXMpKV0gZmxleC0xJ1xuY29uc3QgTEVGVF9DT0xfV0lEVEggPSAndy0xMCBzbTp3LTE2IG1pbi13LTEwIHNtOm1pbi13LTE2IG1heC13LTEwIHNtOm1heC13LTE2J1xuXG5leHBvcnQgY29uc3QgV2Vla1ZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0dCxcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRzZWxlY3REYXRlLFxuXHRcdG9wZW5FdmVudEZvcm0sXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRoaWRkZW5EYXlzLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspLFxuXHRcdFtjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCB2aXNpYmxlRGF5cyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdGhpZGRlbkRheXNcblx0XHRcdFx0PyB3ZWVrRGF5cy5maWx0ZXIoKGRheSkgPT4gIWhpZGRlbkRheXMuaGFzKGRheS5kYXkoKSkpXG5cdFx0XHRcdDogd2Vla0RheXMsXG5cdFx0W3dlZWtEYXlzLCBoaWRkZW5EYXlzXVxuXHQpXG5cblx0Y29uc3QgaG91cnMgPSB1c2VNZW1vKFxuXHRcdCgpID0+XG5cdFx0XHRnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdH0pLFxuXHRcdFtjdXJyZW50RGF0ZSwgYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMsIHdlZWtEYXlzXVxuXHQpXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB7XG5cdFx0aWQ6IGtleXMuY29sLnRpbWUsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0Y2xhc3NOYW1lOiBgc2hyaW5rLTAgJHtMRUZUX0NPTF9XSURUSH0gc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBgLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IERheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdDxIb3VyTGFiZWwgZGF0ZT17ZGF0ZX0gLz5cblx0XHRcdDwvZGl2PlxuXHRcdCksXG5cdH1cblxuXHQvLyBHZW5lcmF0ZSB3ZWVrIGRheXMg4oCUIGVhY2ggY29sdW1uIGdldHMgaXRzIG93biBob3VycyBvbiB0aGUgY29ycmVjdCBkYXRlXG5cdGNvbnN0IGNvbHVtbnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRyZXR1cm4gdmlzaWJsZURheXMubWFwKChkYXkpID0+ICh7XG5cdFx0XHRpZDoga2V5cy5jb2wuZGF5KGRheSksXG5cdFx0XHRkYXksXG5cdFx0XHRsYWJlbDogZGF5LmZvcm1hdCgnRCcpLFxuXHRcdFx0Y2xhc3NOYW1lOiBDRUxMX0NMQVNTLFxuXHRcdFx0ZGF5czogZ2V0Vmlld0hvdXJzKHtcblx0XHRcdFx0cmVmZXJlbmNlRGF0ZTogZGF5LFxuXHRcdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0YWxsRGF0ZXM6IHdlZWtEYXlzLFxuXHRcdFx0fSksXG5cdFx0XHR2YWx1ZTogZGF5LFxuXHRcdH0pKVxuXHR9LCBbd2Vla0RheXMsIGJ1c2luZXNzSG91cnMsIGhpZGVOb25CdXNpbmVzc0hvdXJzLCB2aXNpYmxlRGF5cy5tYXBdKVxuXG5cdGNvbnN0IGNzc1ZhcnMgPSB7XG5cdFx0Jy0tdmlzaWJsZS1kYXlzJzogdmlzaWJsZURheXMubGVuZ3RoLFxuXHR9IGFzIFJlYWN0LkNTU1Byb3BlcnRpZXNcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17XG5cdFx0XHRcdDxBbGxEYXlSb3dcblx0XHRcdFx0XHRjbGFzc2VzPXt7IGNlbGw6IENFTExfQ0xBU1MsIHNwYWNlcjogTEVGVF9DT0xfV0lEVEggfX1cblx0XHRcdFx0XHRkYXlzPXt2aXNpYmxlRGF5c31cblx0XHRcdFx0Lz5cblx0XHRcdH1cblx0XHRcdGNsYXNzZXM9e3sgaGVhZGVyOiAndy1mdWxsIGgtMTgnLCBib2R5OiAndy1mdWxsJyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0XHRzdHlsZT17Y3NzVmFyc31cblx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT17J2ZsZXggaC1mdWxsIGZsZXgtMSd9IGRhdGEtdGVzdGlkPVwid2Vlay12aWV3LWhlYWRlclwiPlxuXHRcdFx0XHR7LyogQ29ybmVyIGNlbGwgd2l0aCB3ZWVrIG51bWJlciAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTEwIHNtOnctMTYgaC1mdWxsIHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItciBwLTIgZmxleFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXhzXCI+e3QoJ3dlZWsnKX08L3NwYW4+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPntjdXJyZW50RGF0ZS53ZWVrKCl9PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHR7LyogRGF5IGhlYWRlciBjZWxscyAqL31cblx0XHRcdFx0e3Zpc2libGVEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHRvZGF5ID0gaXNUb2RheShkYXkpXG5cdFx0XHRcdFx0Y29uc3Qga2V5ID0ga2V5cy5oZWFkZXIud2Vlay5kYXkoZGF5KVxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHQnaG92ZXI6YmctYWNjZW50IGZsZXgtMSBmbGV4IGZsZXgtY29sIGp1c3RpZnktY2VudGVyIGN1cnNvci1wb2ludGVyIHAtMSB0ZXh0LWNlbnRlciBzbTpwLTIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIHctMjAgaC1mdWxsJyxcblx0XHRcdFx0XHRcdFx0XHR0b2RheSAmJiAnYmctcHJpbWFyeS8xMCBmb250LWJvbGQnXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmhlYWRlci53ZWVrZGF5KCd3ZWVrJywgZGF5LmZvcm1hdCgnZGRkZCcpKX1cblx0XHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRcdFx0a2V5PXtrZXl9XG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRzZWxlY3REYXRlKGRheSlcblx0XHRcdFx0XHRcdFx0XHRvcGVuRXZlbnRGb3JtKHsgc3RhcnQ6IGRheSB9KVxuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtrZXl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdteC1hdXRvIG10LTEgZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cycsXG5cdFx0XHRcdFx0XHRcdFx0XHR0b2RheSAmJiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCdcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e2RheS5mb3JtYXQoJ0QnKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0RGF5S2V5LCBpc1RvZGF5IH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5jb25zdCBEQVlfSEVBREVSX05BTUVTID0gW1xuXHR7IGlkOiAnc3VuJywgbGFiZWw6ICdTJyB9LFxuXHR7IGlkOiAnbW9uJywgbGFiZWw6ICdNJyB9LFxuXHR7IGlkOiAndHVlJywgbGFiZWw6ICdUJyB9LFxuXHR7IGlkOiAnd2VkJywgbGFiZWw6ICdXJyB9LFxuXHR7IGlkOiAndGh1JywgbGFiZWw6ICdUJyB9LFxuXHR7IGlkOiAnZnJpJywgbGFiZWw6ICdGJyB9LFxuXHR7IGlkOiAnc2F0JywgbGFiZWw6ICdTJyB9LFxuXVxuY29uc3QgRVZFTlRfRE9UX0NPTE9SUyA9IFsnYmctcHJpbWFyeScsICdiZy1ibHVlLTUwMCcsICdiZy1ncmVlbi01MDAnXVxuY29uc3QgREFZU19JTl9NSU5JX0NBTEVOREFSID0gNDJcblxuaW50ZXJmYWNlIE1vbnRoRGF0YSB7XG5cdGRhdGU6IERheWpzXG5cdG5hbWU6IHN0cmluZ1xuXHRldmVudENvdW50OiBudW1iZXJcblx0bW9udGhLZXk6IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgRGF5RGF0YSB7XG5cdGRhdGU6IERheWpzXG5cdGRheUtleTogc3RyaW5nXG5cdGlzSW5DdXJyZW50TW9udGg6IGJvb2xlYW5cblx0aXNUb2RheTogYm9vbGVhblxuXHRpc1NlbGVjdGVkOiBib29sZWFuXG5cdGV2ZW50Q291bnQ6IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgWWVhclZpZXcgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHNlbGVjdERhdGUsIGV2ZW50cywgc2V0VmlldywgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCB0IH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgY3VycmVudFllYXIgPSBjdXJyZW50RGF0ZS55ZWFyKClcblxuXHRjb25zdCBnZW5lcmF0ZU1vbnRoc0RhdGEgPSAoKTogTW9udGhEYXRhW10gPT4ge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMiB9LCAoXywgbW9udGhJbmRleCkgPT4ge1xuXHRcdFx0Y29uc3QgbW9udGhEYXRlID0gZGF5anMoKVxuXHRcdFx0XHQueWVhcihjdXJyZW50WWVhcilcblx0XHRcdFx0Lm1vbnRoKG1vbnRoSW5kZXgpXG5cdFx0XHRcdC5zdGFydE9mKCdtb250aCcpXG5cdFx0XHRjb25zdCBldmVudHNJbk1vbnRoID0gZXZlbnRzLmZpbHRlcihcblx0XHRcdFx0KGV2ZW50KSA9PlxuXHRcdFx0XHRcdGV2ZW50LnN0YXJ0LnllYXIoKSA9PT0gY3VycmVudFllYXIgJiZcblx0XHRcdFx0XHRldmVudC5zdGFydC5tb250aCgpID09PSBtb250aEluZGV4XG5cdFx0XHQpXG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGRhdGU6IG1vbnRoRGF0ZSxcblx0XHRcdFx0bmFtZTogbW9udGhEYXRlLmZvcm1hdCgnTU1NTScpLFxuXHRcdFx0XHRldmVudENvdW50OiBldmVudHNJbk1vbnRoLmxlbmd0aCxcblx0XHRcdFx0bW9udGhLZXk6IG1vbnRoRGF0ZS5mb3JtYXQoJ01NJyksXG5cdFx0XHR9XG5cdFx0fSlcblx0fVxuXG5cdGNvbnN0IGdlbmVyYXRlRGF5c0Zvck1vbnRoID0gKG1vbnRoRGF0ZTogRGF5anMpOiBEYXlEYXRhW10gPT4ge1xuXHRcdGNvbnN0IGZpcnN0RGF5T2ZDYWxlbmRhciA9IG1vbnRoRGF0ZS5zdGFydE9mKCdtb250aCcpLnN0YXJ0T2YoJ3dlZWsnKVxuXG5cdFx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IERBWVNfSU5fTUlOSV9DQUxFTkRBUiB9LCAoXywgZGF5SW5kZXgpID0+IHtcblx0XHRcdGNvbnN0IGRheURhdGUgPSBmaXJzdERheU9mQ2FsZW5kYXIuYWRkKGRheUluZGV4LCAnZGF5Jylcblx0XHRcdGNvbnN0IGRheVN0YXJ0ID0gZGF5RGF0ZS5zdGFydE9mKCdkYXknKVxuXHRcdFx0Y29uc3QgZGF5RW5kID0gZGF5RGF0ZS5lbmRPZignZGF5Jylcblx0XHRcdGNvbnN0IGV2ZW50c09uRGF5ID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKGRheVN0YXJ0LCBkYXlFbmQpXG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGRhdGU6IGRheURhdGUsXG5cdFx0XHRcdGRheUtleTogZ2V0RGF5S2V5KGRheURhdGUpLFxuXHRcdFx0XHRpc0luQ3VycmVudE1vbnRoOiBkYXlEYXRlLm1vbnRoKCkgPT09IG1vbnRoRGF0ZS5tb250aCgpLFxuXHRcdFx0XHRpc1RvZGF5OiBpc1RvZGF5KGRheURhdGUpLFxuXHRcdFx0XHRpc1NlbGVjdGVkOiBkYXlEYXRlLmlzU2FtZShjdXJyZW50RGF0ZSwgJ2RheScpLFxuXHRcdFx0XHRldmVudENvdW50OiBldmVudHNPbkRheS5sZW5ndGgsXG5cdFx0XHR9XG5cdFx0fSlcblx0fVxuXG5cdGNvbnN0IG5hdmlnYXRlVG9EYXRlID0gKFxuXHRcdGRhdGU6IERheWpzLFxuXHRcdHZpZXc6ICdtb250aCcgfCAnZGF5Jyxcblx0XHRldmVudD86IFJlYWN0Lk1vdXNlRXZlbnRcblx0KSA9PiB7XG5cdFx0ZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0c2VsZWN0RGF0ZShkYXRlKVxuXHRcdHNldFZpZXcodmlldylcblx0fVxuXG5cdGNvbnN0IGdldEV2ZW50Q291bnRMYWJlbCA9IChjb3VudDogbnVtYmVyKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCBldmVudFdvcmQgPSBjb3VudCA9PT0gMSA/IHQoJ2V2ZW50JykgOiB0KCdldmVudHMnKVxuXHRcdHJldHVybiBgJHtjb3VudH0gJHtldmVudFdvcmR9YFxuXHR9XG5cblx0Y29uc3QgZ2V0RGF5Q2xhc3NOYW1lID0gKGRheTogRGF5RGF0YSk6IHN0cmluZyA9PiB7XG5cdFx0Y29uc3QgYmFzZUNsYXNzID1cblx0XHRcdCdyZWxhdGl2ZSBmbGV4IGFzcGVjdC1zcXVhcmUgdy1mdWxsIGN1cnNvci1wb2ludGVyIGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBob3ZlcjpiZy1hY2NlbnQgcm91bmRlZC1zbSB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0yMDAnXG5cdFx0Y29uc3Qgb3V0c2lkZU1vbnRoQ2xhc3MgPSBkYXkuaXNJbkN1cnJlbnRNb250aFxuXHRcdFx0PyAnJ1xuXHRcdFx0OiAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG9wYWNpdHktNTAnXG5cdFx0Y29uc3QgdG9kYXlDbGFzcyA9IGRheS5pc1RvZGF5XG5cdFx0XHQ/ICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtZnVsbCdcblx0XHRcdDogJydcblx0XHRjb25zdCBzZWxlY3RlZENsYXNzID1cblx0XHRcdGRheS5pc1NlbGVjdGVkICYmICFkYXkuaXNUb2RheSA/ICdiZy1tdXRlZCByb3VuZGVkLWZ1bGwgZm9udC1ib2xkJyA6ICcnXG5cdFx0Y29uc3QgaGFzRXZlbnRzQ2xhc3MgPVxuXHRcdFx0ZGF5LmV2ZW50Q291bnQgPiAwICYmICFkYXkuaXNUb2RheSAmJiAhZGF5LmlzU2VsZWN0ZWQgPyAnZm9udC1tZWRpdW0nIDogJydcblxuXHRcdHJldHVybiBjbihcblx0XHRcdGJhc2VDbGFzcyxcblx0XHRcdG91dHNpZGVNb250aENsYXNzLFxuXHRcdFx0dG9kYXlDbGFzcyxcblx0XHRcdHNlbGVjdGVkQ2xhc3MsXG5cdFx0XHRoYXNFdmVudHNDbGFzc1xuXHRcdClcblx0fVxuXG5cdGNvbnN0IGdldEV2ZW50RG90Q2xhc3NOYW1lID0gKGNvbG9yOiBzdHJpbmcsIGlzVG9kYXk6IGJvb2xlYW4pOiBzdHJpbmcgPT4ge1xuXHRcdGNvbnN0IGRvdENvbG9yID0gaXNUb2RheSA/ICdiZy1wcmltYXJ5LWZvcmVncm91bmQnIDogY29sb3Jcblx0XHRyZXR1cm4gY24oJ2gtWzNweF0gdy1bM3B4XSByb3VuZGVkLWZ1bGwnLCBkb3RDb2xvcilcblx0fVxuXG5cdGNvbnN0IG1vbnRoc0RhdGEgPSBnZW5lcmF0ZU1vbnRoc0RhdGEoKVxuXG5cdGNvbnN0IGdldERheVRvb2x0aXAgPSAoZXZlbnRDb3VudDogbnVtYmVyKTogc3RyaW5nID0+IHtcblx0XHRpZiAoZXZlbnRDb3VudCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuICcnXG5cdFx0fVxuXHRcdHJldHVybiBnZXRFdmVudENvdW50TGFiZWwoZXZlbnRDb3VudClcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PFNjcm9sbEFyZWEgY2xhc3NOYW1lPVwiaC1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJ5ZWFyLXZpZXdcIj5cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPVwiZ3JpZCBhdXRvLXJvd3MtZnIgZ3JpZC1jb2xzLTEgZ2FwLTQgcC00IHNtOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zXCJcblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ5ZWFyLWdyaWRcIlxuXHRcdFx0PlxuXHRcdFx0XHR7bW9udGhzRGF0YS5tYXAoKG1vbnRoLCBtb250aEluZGV4KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZGF5c0luTW9udGggPSBnZW5lcmF0ZURheXNGb3JNb250aChtb250aC5kYXRlKVxuXHRcdFx0XHRcdGNvbnN0IGFuaW1hdGlvbkRlbGF5ID0gbW9udGhJbmRleCAqIDAuMDVcblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImhvdmVyOmJvcmRlci1wcmltYXJ5IGZsZXggZmxleC1jb2wgcm91bmRlZC1sZyBib3JkZXIgcC0zIHRleHQtbGVmdCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgaG92ZXI6c2hhZG93LW1kXCJcblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuaGVhZGVyLnllYXIubW9udGgobW9udGgubW9udGhLZXkpfVxuXHRcdFx0XHRcdFx0XHRrZXk9e21vbnRoLm1vbnRoS2V5fVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWItMiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIlxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5PXthbmltYXRpb25EZWxheX1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleSgnbW9udGgnLCBtb250aC5tb250aEtleSl9XG5cdFx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17a2V5cy5saXN0S2V5KCdtb250aCcsIG1vbnRoLm1vbnRoS2V5KX1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdDxidXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1tZWRpdW0gaG92ZXI6dW5kZXJsaW5lIGN1cnNvci1wb2ludGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmhlYWRlci55ZWFyLm1vbnRoKG1vbnRoLm1vbnRoS2V5LCAndGl0bGUnKX1cblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IG5hdmlnYXRlVG9EYXRlKG1vbnRoLmRhdGUsICdtb250aCcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0e21vbnRoLm5hbWV9XG5cdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XG5cblx0XHRcdFx0XHRcdFx0XHR7bW9udGguZXZlbnRDb3VudCA+IDAgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLWZ1bGwgcHgtMiBweS0xIHRleHQteHNcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5oZWFkZXIueWVhci5tb250aChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtb250aC5tb250aEtleSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnY291bnQnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtnZXRFdmVudENvdW50TGFiZWwobW9udGguZXZlbnRDb3VudCl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cblx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTcgZ2FwLXB4IHRleHQtWzAuNnJlbV1cIlxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmhlYWRlci55ZWFyLm1vbnRoKG1vbnRoLm1vbnRoS2V5LCAnbWluaScpfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e0RBWV9IRUFERVJfTkFNRVMubWFwKChkYXkpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGgtMyB0ZXh0LWNlbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KCdoZWFkZXInLCBtb250aC5tb250aEtleSwgZGF5LmlkKX1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e2RheS5sYWJlbH1cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdCkpfVxuXG5cdFx0XHRcdFx0XHRcdFx0e2RheXNJbk1vbnRoLm1hcCgoZGF5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBkYXlUZXN0SWQgPSBrZXlzLmhlYWRlci55ZWFyLmRheShcblx0XHRcdFx0XHRcdFx0XHRcdFx0bW9udGguZGF0ZS5mb3JtYXQoJ1lZWVktTU0nKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF5LmRheUtleVxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgaGFzRXZlbnRzID0gZGF5LmV2ZW50Q291bnQgPiAwXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB2aXNpYmxlRG90Q291bnQgPSBNYXRoLm1pbihkYXkuZXZlbnRDb3VudCwgMylcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHZpc2libGVEb3RDb2xvcnMgPSBFVkVOVF9ET1RfQ09MT1JTLnNsaWNlKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlRG90Q291bnRcblx0XHRcdFx0XHRcdFx0XHRcdClcblxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Z2V0RGF5Q2xhc3NOYW1lKGRheSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2RheVRlc3RJZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2RheS5kYXlLZXl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KGUpID0+IG5hdmlnYXRlVG9EYXRlKGRheS5kYXRlLCAnZGF5JywgZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU9e2dldERheVRvb2x0aXAoZGF5LmV2ZW50Q291bnQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC1jZW50ZXIgbGVhZGluZy1ub25lXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ZGF5LmRhdGUuZGF0ZSgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtoYXNFdmVudHMgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdhYnNvbHV0ZSBib3R0b20tMCBmbGV4IHctZnVsbCBqdXN0aWZ5LWNlbnRlciBzcGFjZS14LXB4Jyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXkuaXNUb2RheSAmJiAnYm90dG9tLXB4J1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7dmlzaWJsZURvdENvbG9ycy5tYXAoKGRvdENvbG9yKSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Z2V0RXZlbnREb3RDbGFzc05hbWUoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRvdENvbG9yLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXkuaXNUb2RheVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17ZG90Q29sb3J9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHR9KX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pfVxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiAvPlxuXHRcdDwvU2Nyb2xsQXJlYT5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBFdmVudEZvcm1Qcm9wcyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7XG5cdENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlLFxuXHRDZWxsQ2xpY2tJbmZvLFxuXHREYXRlUmFuZ2UsXG5cdFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckVuZ2luZSB9IGZyb20gJ0AvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZSdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEVWRU5UX0JBUl9IRUlHSFQsIEdBUF9CRVRXRUVOX0VMRU1FTlRTIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnMsIFRyYW5zbGF0b3JGdW5jdGlvbiB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3LCBUaW1lRm9ybWF0IH0gZnJvbSAnQC90eXBlcydcbmltcG9ydCB7IENhbGVuZGFyQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCdcblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhclByb3ZpZGVyUHJvcHMge1xuXHRjaGlsZHJlbjogUmVhY3ROb2RlXG5cdGV2ZW50cz86IENhbGVuZGFyRXZlbnRbXVxuXHRmaXJzdERheU9mV2Vlaz86IG51bWJlciAvLyAwIGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuXHRpbml0aWFsVmlldz86IENhbGVuZGFyVmlld1xuXHRpbml0aWFsRGF0ZT86IERheWpzXG5cdHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdE5vZGVcblx0b25FdmVudENsaWNrPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uQ2VsbENsaWNrPzogKGluZm86IENlbGxDbGlja0luZm8pID0+IHZvaWRcblx0b25WaWV3Q2hhbmdlPzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRvbkV2ZW50QWRkPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRXZlbnRVcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudERlbGV0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkRhdGVDaGFuZ2U/OiAoZGF0ZTogRGF5anMsIHJhbmdlOiBEYXRlUmFuZ2UpID0+IHZvaWRcblx0bG9jYWxlPzogc3RyaW5nXG5cdHRpbWV6b25lPzogc3RyaW5nXG5cdGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuXHRkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGV2ZW50U3BhY2luZz86IG51bWJlclxuXHRldmVudEhlaWdodD86IG51bWJlclxuXHRzdGlja3lWaWV3SGVhZGVyPzogYm9vbGVhblxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nXG5cdGhlYWRlckNvbXBvbmVudD86IFJlYWN0Tm9kZSAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNvbXBvbmVudFxuXHRoZWFkZXJDbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjbGFzc1xuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRyZW5kZXJFdmVudEZvcm0/OiAocHJvcHM6IEV2ZW50Rm9ybVByb3BzKSA9PiBSZWFjdE5vZGVcblx0Ly8gVHJhbnNsYXRpb24gb3B0aW9ucyAtIHByb3ZpZGUgZWl0aGVyIHRyYW5zbGF0aW9ucyBvYmplY3QgT1IgdHJhbnNsYXRvciBmdW5jdGlvblxuXHR0cmFuc2xhdGlvbnM/OiBUcmFuc2xhdGlvbnNcblx0dHJhbnNsYXRvcj86IFRyYW5zbGF0b3JGdW5jdGlvblxuXHR0aW1lRm9ybWF0PzogVGltZUZvcm1hdFxuXHRjbGFzc2VzT3ZlcnJpZGU/OiBDYWxlbmRhckNsYXNzZXNPdmVycmlkZVxuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcj86IChcblx0XHRwcm9wczogUmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wc1xuXHQpID0+IFJlYWN0Tm9kZVxuXHRyZW5kZXJIb3VyPzogKGRhdGU6IERheWpzKSA9PiBSZWFjdE5vZGVcblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG5cdGhpZGRlbkRheXM/OiBTZXQ8bnVtYmVyPlxufVxuXG5leHBvcnQgY29uc3QgQ2FsZW5kYXJQcm92aWRlcjogUmVhY3QuRkM8Q2FsZW5kYXJQcm92aWRlclByb3BzPiA9ICh7XG5cdGNoaWxkcmVuLFxuXHRldmVudHMgPSBbXSxcblx0Zmlyc3REYXlPZldlZWsgPSAwLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRyZW5kZXJFdmVudCxcblx0b25FdmVudENsaWNrLFxuXHRvbkNlbGxDbGljayxcblx0b25WaWV3Q2hhbmdlLFxuXHRvbkV2ZW50QWRkLFxuXHRvbkV2ZW50VXBkYXRlLFxuXHRvbkV2ZW50RGVsZXRlLFxuXHRvbkRhdGVDaGFuZ2UsXG5cdGxvY2FsZSxcblx0dGltZXpvbmUsXG5cdGRpc2FibGVDZWxsQ2xpY2ssXG5cdGRpc2FibGVFdmVudENsaWNrLFxuXHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdGRheU1heEV2ZW50cyxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdGV2ZW50SGVpZ2h0ID0gRVZFTlRfQkFSX0hFSUdIVCxcblx0c3RpY2t5Vmlld0hlYWRlciA9IHRydWUsXG5cdHZpZXdIZWFkZXJDbGFzc05hbWUgPSAnJyxcblx0aGVhZGVyQ29tcG9uZW50LFxuXHRoZWFkZXJDbGFzc05hbWUsXG5cdGJ1c2luZXNzSG91cnMsXG5cdHJlbmRlckV2ZW50Rm9ybSxcblx0dHJhbnNsYXRpb25zLFxuXHR0cmFuc2xhdG9yLFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRjbGFzc2VzT3ZlcnJpZGUsXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRyZW5kZXJIb3VyLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3VycyA9IGZhbHNlLFxuXHRoaWRkZW5EYXlzLFxufSkgPT4ge1xuXHQvLyBVc2UgdGhlIGNhbGVuZGFyIGVuZ2luZVxuXHRjb25zdCBjYWxlbmRhckVuZ2luZSA9IHVzZUNhbGVuZGFyRW5naW5lKHtcblx0XHRldmVudHMsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0aW5pdGlhbFZpZXcsXG5cdFx0aW5pdGlhbERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRvbkV2ZW50QWRkLFxuXHRcdG9uRXZlbnRVcGRhdGUsXG5cdFx0b25FdmVudERlbGV0ZSxcblx0XHRvbkRhdGVDaGFuZ2UsXG5cdFx0b25WaWV3Q2hhbmdlLFxuXHRcdGxvY2FsZSxcblx0XHR0aW1lem9uZSxcblx0XHR0cmFuc2xhdGlvbnMsXG5cdFx0dHJhbnNsYXRvcixcblx0fSlcblxuXHRjb25zdCBlZGl0RXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRXZlbnQoZXZlbnQpXG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcblx0XHR9LFxuXHRcdFtjYWxlbmRhckVuZ2luZV1cblx0KVxuXG5cdC8vIEN1c3RvbSBoYW5kbGVycyB0aGF0IGNhbGwgZXh0ZXJuYWwgY2FsbGJhY2tzXG5cdGNvbnN0IGhhbmRsZUV2ZW50Q2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGlmIChkaXNhYmxlRXZlbnRDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblx0XHRcdGlmIChvbkV2ZW50Q2xpY2spIHtcblx0XHRcdFx0b25FdmVudENsaWNrKGV2ZW50KVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWRpdEV2ZW50KGV2ZW50KVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W2Rpc2FibGVFdmVudENsaWNrLCBvbkV2ZW50Q2xpY2ssIGVkaXRFdmVudF1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZURhdGVDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUNlbGxDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9uQ2VsbENsaWNrKSB7XG5cdFx0XHRcdG9uQ2VsbENsaWNrKGluZm8pXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5vcGVuRXZlbnRGb3JtKGluZm8pXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbb25DZWxsQ2xpY2ssIGRpc2FibGVDZWxsQ2xpY2ssIGNhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Ly8gQ3JlYXRlIHRoZSBjb250ZXh0IHZhbHVlXG5cdGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdC4uLmNhbGVuZGFyRW5naW5lLFxuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRvbkV2ZW50Q2xpY2s6IGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRvbkNlbGxDbGljazogaGFuZGxlRGF0ZUNsaWNrLFxuXHRcdFx0bG9jYWxlLFxuXHRcdFx0dGltZXpvbmUsXG5cdFx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRldmVudEhlaWdodCxcblx0XHRcdHN0aWNreVZpZXdIZWFkZXIsXG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0aGVhZGVyQ29tcG9uZW50LFxuXHRcdFx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdHRpbWVGb3JtYXQsXG5cdFx0XHRjbGFzc2VzT3ZlcnJpZGUsXG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdHJlbmRlckhvdXIsXG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdGhpZGRlbkRheXMsXG5cdFx0fSksXG5cdFx0W1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUsXG5cdFx0XHRyZW5kZXJFdmVudCxcblx0XHRcdGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRoYW5kbGVEYXRlQ2xpY2ssXG5cdFx0XHRsb2NhbGUsXG5cdFx0XHR0aW1lem9uZSxcblx0XHRcdGRpc2FibGVDZWxsQ2xpY2ssXG5cdFx0XHRkaXNhYmxlRXZlbnRDbGljayxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdGV2ZW50SGVpZ2h0LFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRcdFx0cmVuZGVySG91cixcblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0aGlkZGVuRGF5cyxcblx0XHRdXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxDYWxlbmRhckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRWYWx1ZX0+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9DYWxlbmRhckNvbnRleHQuUHJvdmlkZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgQ2FsZW5kYXJEbmRDb250ZXh0IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQnXG5pbXBvcnQgeyBFdmVudEZvcm1EaWFsb2cgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtLWRpYWxvZydcbmltcG9ydCB7IEhlYWRlciB9IGZyb20gJ0AvY29tcG9uZW50cy9oZWFkZXInXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBEYXlWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2RheS12aWV3J1xuaW1wb3J0IHsgTW9udGhWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvbW9udGgtdmlldydcbmltcG9ydCB7IFdlZWtWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy93ZWVrLXZpZXcnXG5pbXBvcnQgeyBZZWFyVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy95ZWFyLXZpZXcveWVhci12aWV3J1xuaW1wb3J0IHsgQ2FsZW5kYXJQcm92aWRlciB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9wcm92aWRlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbi8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBuby1kdXBsaWNhdGVzXG5pbXBvcnQgJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHR5cGUgeyBXZWVrRGF5cyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHtcblx0SWxhbXlDYWxlbmRhclByb3BFdmVudCxcblx0SWxhbXlDYWxlbmRhclByb3BzLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHtcblx0REFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0RVZFTlRfQkFSX0hFSUdIVCxcblx0R0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdFdFRUtfREFZU19OVU1CRVJfTUFQLFxufSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBub3JtYWxpemVFdmVudHMsIHNhZmVEYXRlLCB0b0hpZGRlbkRheXNTZXQgfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgQ2FsZW5kYXJDb250ZW50OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyB2aWV3LCBkYXlNYXhFdmVudHMgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB2aWV3TWFwID0ge1xuXHRcdG1vbnRoOiA8TW9udGhWaWV3IGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfSBrZXk9XCJtb250aFwiIC8+LFxuXHRcdHdlZWs6IDxXZWVrVmlldyBrZXk9XCJ3ZWVrXCIgLz4sXG5cdFx0ZGF5OiA8RGF5VmlldyBrZXk9XCJkYXlcIiAvPixcblx0XHR5ZWFyOiA8WWVhclZpZXcga2V5PVwieWVhclwiIC8+LFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiIGRhdGEtdGVzdGlkPVwiaWxhbXktY2FsZW5kYXJcIj5cblx0XHRcdDxIZWFkZXIgY2xhc3NOYW1lPVwicC0xXCIgLz5cblx0XHRcdHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZVByZXNlbmNlIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuXHRcdFx0PENhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBoLVtjYWxjKDEwMCUtMy41cmVtKV1cIlxuXHRcdFx0XHRcdGRpcmVjdGlvbj1cImhvcml6b250YWxcIlxuXHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e3ZpZXd9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImJvcmRlciBoLWZ1bGwgdy1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1ib2R5XCI+XG5cdFx0XHRcdFx0XHR7dmlld01hcFt2aWV3XX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHQ8L0NhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdDxFdmVudEZvcm1EaWFsb2cgLz5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgSWxhbXlDYWxlbmRhcjogUmVhY3QuRkM8SWxhbXlDYWxlbmRhclByb3BzPiA9ICh7XG5cdGV2ZW50cyxcblx0Zmlyc3REYXlPZldlZWsgPSAnc3VuZGF5Jyxcblx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRpbml0aWFsRGF0ZSxcblx0ZGF5TWF4RXZlbnRzID0gREFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdGV2ZW50SGVpZ2h0ID0gRVZFTlRfQkFSX0hFSUdIVCxcblx0c3RpY2t5Vmlld0hlYWRlciA9IHRydWUsXG5cdHZpZXdIZWFkZXJDbGFzc05hbWUgPSAnJyxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0aGlkZU5vbkJ1c2luZXNzSG91cnMgPSBmYWxzZSxcblx0aGlkZGVuRGF5cyxcblx0Li4ucHJvcHNcbn0pID0+IHtcblx0cmV0dXJuIChcblx0XHQ8Q2FsZW5kYXJQcm92aWRlclxuXHRcdFx0ZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG5cdFx0XHRldmVudEhlaWdodD17ZXZlbnRIZWlnaHR9XG5cdFx0XHRldmVudFNwYWNpbmc9e2V2ZW50U3BhY2luZ31cblx0XHRcdGV2ZW50cz17bm9ybWFsaXplRXZlbnRzPElsYW15Q2FsZW5kYXJQcm9wRXZlbnQsIENhbGVuZGFyRXZlbnQ+KGV2ZW50cyl9XG5cdFx0XHRmaXJzdERheU9mV2Vlaz17V0VFS19EQVlTX05VTUJFUl9NQVBbZmlyc3REYXlPZldlZWtdfVxuXHRcdFx0aGlkZGVuRGF5cz17dG9IaWRkZW5EYXlzU2V0KGhpZGRlbkRheXMpfVxuXHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnM9e2hpZGVOb25CdXNpbmVzc0hvdXJzfVxuXHRcdFx0aW5pdGlhbERhdGU9e3NhZmVEYXRlKGluaXRpYWxEYXRlKX1cblx0XHRcdGluaXRpYWxWaWV3PXtpbml0aWFsVmlld31cblx0XHRcdHN0aWNreVZpZXdIZWFkZXI9e3N0aWNreVZpZXdIZWFkZXJ9XG5cdFx0XHR0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZT17dmlld0hlYWRlckNsYXNzTmFtZX1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8Q2FsZW5kYXJDb250ZW50IC8+XG5cdFx0PC9DYWxlbmRhclByb3ZpZGVyPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgSG9yaXpvbnRhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5pbnRlcmZhY2UgUmVzb3VyY2VFdmVudEdyaWRQcm9wcyB7XG5cdC8qKlxuXHQgKiBBcnJheSBvZiBkYXlzIHRvIGRpc3BsYXkgaW4gdGhlIGdyaWRcblx0ICovXG5cdGRheXM6IERheWpzW10gfCBEYXlqc1tdW11cblx0LyoqIFRoZSB0eXBlIG9mIGdyaWQgdG8gZGlzcGxheSAtICdkYXknIGZvciBkYXkgdmlldywgJ2hvdXInIGZvciB3ZWVrIHZpZXdcblx0ICogKGFmZmVjdHMgZXZlbnQgcG9zaXRpb25pbmcgbG9naWMpXG5cdCAqL1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdC8qKlxuXHQgKiBDaGlsZHJlbiB3aWxsIGJlIHJlbmRlcmVkIGFzIGhlYWRlcnMgYWJvdmUgdGhlIGdyaWRcblx0ICogKGUuZy4sIGZvciBkYXkgbmFtZXMgaW4gbW9udGggdmlldylcblx0ICovXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzZXM/OiB7IGhlYWRlcj86IHN0cmluZzsgYm9keT86IHN0cmluZzsgc2Nyb2xsPzogc3RyaW5nOyBjZWxsPzogc3RyaW5nIH1cbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlRXZlbnRHcmlkOiBSZWFjdC5GQzxSZXNvdXJjZUV2ZW50R3JpZFByb3BzPiA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdGNoaWxkcmVuLFxuXHRjbGFzc2VzLFxufSkgPT4ge1xuXHRjb25zdCB7IGdldFZpc2libGVSZXNvdXJjZXMgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB2aXNpYmxlUmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cblx0Y29uc3QgY29sdW1ucyA9IGRheXMubWFwKChkYXkpID0+IHtcblx0XHRjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShkYXkpXG5cdFx0Y29uc3QgcmVmRGF5ID0gaXNBcnJheSA/IGRheVswXSA6IGRheVxuXHRcdHJldHVybiB7XG5cdFx0XHRpZDogcmVmRGF5ID8ga2V5cy5jb2wuZGF5KHJlZkRheSkgOiAnZGF5LWNvbC11bmtub3duJyxcblx0XHRcdGRheTogaXNBcnJheSA/IHVuZGVmaW5lZCA6IGRheSxcblx0XHRcdGRheXM6IGlzQXJyYXkgPyBkYXkgOiB1bmRlZmluZWQsXG5cdFx0XHRjbGFzc05hbWU6IGNsYXNzZXM/LmNlbGwsXG5cdFx0XHRncmlkVHlwZSxcblx0XHR9XG5cdH0pXG5cblx0Y29uc3Qgcm93cyA9IHZpc2libGVSZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKHtcblx0XHRpZDogcmVzb3VyY2UuaWQsXG5cdFx0dGl0bGU6IHJlc291cmNlLnRpdGxlLFxuXHRcdHJlc291cmNlOiByZXNvdXJjZSxcblx0XHRjb2x1bW5zLFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxIb3Jpem9udGFsR3JpZFxuXHRcdFx0Y2xhc3Nlcz17Y2xhc3Nlc31cblx0XHRcdGRheU51bWJlckhlaWdodD17MH1cblx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdHJvd3M9e3Jvd3N9XG5cdFx0PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvSG9yaXpvbnRhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgSG91ckxhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvdXItbGFiZWwvaG91ci1sYWJlbCdcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmludGVyZmFjZSBUaW1lSGVhZGVyUm93UHJvcHMge1xuXHRob3VyczogRGF5anNbXVxuXHR2aWV3OiAnd2VlaycgfCAnZGF5J1xuXHQvLyBQZXItaXRlbSBhbmltYXRpb24gZGVsYXkuIENhbGxlcnMgcGFzcyBkaWZmZXJlbnQgc3RlcCB2YWx1ZXMgZGVwZW5kaW5nIG9uXG5cdC8vIHRoZSBsaXN0IGxlbmd0aCAoZS5nLiAwLjAwNSBmb3IgYSB3ZWVrIG9mIGhvdXJzLCAwLjA1IGZvciBhIHNpbmdsZSBkYXkpLlxuXHRkZWxheVN0ZXA6IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgVGltZUhlYWRlclJvdzogUmVhY3QuRkM8VGltZUhlYWRlclJvd1Byb3BzPiA9ICh7XG5cdGhvdXJzLFxuXHR2aWV3LFxuXHRkZWxheVN0ZXAsXG59KSA9PiAoXG5cdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyIGJvcmRlci1iXCI+XG5cdFx0e2hvdXJzLm1hcCgoY29sLCBpbmRleCkgPT4ge1xuXHRcdFx0Y29uc3QgaXNOb3dIb3VyID0gY29sLmlzU2FtZShkYXlqcygpLCAnaG91cicpXG5cdFx0XHRjb25zdCBrZXkgPSBrZXlzLmhlYWRlci53ZWVrLmhvdXIoY29sLCBpbmRleClcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J21pbi13LTIwIGZsZXgtMSBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC14cyBzaHJpbmstMCcsXG5cdFx0XHRcdFx0XHRpc05vd0hvdXIgJiYgJ2JnLWJsdWUtNTAgdGV4dC1ibHVlLTYwMCBmb250LW1lZGl1bSdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmhlYWRlci5yZXNvdXJjZS50aW1lTGFiZWwodmlldywgY29sLmZvcm1hdCgnSEgnKSl9XG5cdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogZGVsYXlTdGVwfVxuXHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KGtleSwgJ2FuaW1hdGVkJyl9XG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17a2V5cy5saXN0S2V5KGtleSwgJ21vdGlvbicpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PEhvdXJMYWJlbCBkYXRlPXtjb2x9IC8+XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0KVxuXHRcdH0pfVxuXHQ8L2Rpdj5cbilcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgVGltZUhlYWRlclJvdyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy90aW1lLWhlYWRlci1yb3cnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZURheUhvcml6b250YWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0dCxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IHJlc291cmNlcyA9IGdldFZpc2libGVSZXNvdXJjZXMoKVxuXHRjb25zdCBkYXlIb3VycyA9IGdldFZpZXdIb3Vycyh7XG5cdFx0cmVmZXJlbmNlRGF0ZTogY3VycmVudERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRhbGxEYXRlczogW2N1cnJlbnREYXRlXSxcblx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnM6IHJlc291cmNlc1xuXHRcdFx0Lm1hcCgocikgPT4gci5idXNpbmVzc0hvdXJzKVxuXHRcdFx0LmZpbHRlcihCb29sZWFuKSBhcyAoQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSlbXSxcblx0fSlcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUV2ZW50R3JpZFxuXHRcdFx0Y2xhc3Nlcz17e1xuXHRcdFx0XHRoZWFkZXI6ICdtaW4tdy1mdWxsJyxcblx0XHRcdFx0Ym9keTogJ21pbi13LWZ1bGwnLFxuXHRcdFx0XHRjZWxsOiAnbWluLXctMjAgZmxleC0xJyxcblx0XHRcdH19XG5cdFx0XHRkYXlzPXtkYXlIb3Vyc31cblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0PFRpbWVIZWFkZXJSb3cgZGVsYXlTdGVwPXswLjA1fSBob3Vycz17ZGF5SG91cnN9IHZpZXc9XCJkYXlcIiAvPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbGxEYXlDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktY2VsbCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IEhvdXJMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3VyLWxhYmVsL2hvdXItbGFiZWwnXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlRGF5VmVydGljYWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHJlc291cmNlcyA9IGdldFZpc2libGVSZXNvdXJjZXMoKVxuXHRjb25zdCBob3VycyA9IGdldFZpZXdIb3Vycyh7XG5cdFx0cmVmZXJlbmNlRGF0ZTogY3VycmVudERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRhbGxEYXRlczogW2N1cnJlbnREYXRlXSxcblx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnM6IHJlc291cmNlc1xuXHRcdFx0Lm1hcCgocikgPT4gci5idXNpbmVzc0hvdXJzKVxuXHRcdFx0LmZpbHRlcihCb29sZWFuKSBhcyAoQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSlbXSxcblx0fSlcblxuXHRjb25zdCBmaXJzdENvbCA9IHtcblx0XHRpZDoga2V5cy5jb2wudGltZSxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRkYXlzOiBob3Vycyxcblx0XHRjbGFzc05hbWU6XG5cdFx0XHQnc2hyaW5rLTAgdy0xNiBtaW4tdy0xNiBtYXgtdy0xNiBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCcsXG5cdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0XHRub0V2ZW50czogdHJ1ZSxcblx0XHRyZW5kZXJDZWxsOiAoZGF0ZTogRGF5anMpID0+IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHAtMiB0ZXh0LXJpZ2h0IHRleHQtWzEwcHhdIHNtOnRleHQteHMgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cblx0XHRcdFx0PEhvdXJMYWJlbCBkYXRlPXtkYXRlfSAvPlxuXHRcdFx0PC9kaXY+XG5cdFx0KSxcblx0fVxuXG5cdGNvbnN0IGNvbHVtbnMgPSByZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKHtcblx0XHRpZDoga2V5cy5jb2wuZGF5KGN1cnJlbnREYXRlLCByZXNvdXJjZS5pZCksXG5cdFx0cmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG5cdFx0cmVzb3VyY2UsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0ZGF5OiBjdXJyZW50RGF0ZSxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGxcIj5cblx0XHRcdFx0XHQ8QWxsRGF5Q2VsbCAvPlxuXHRcdFx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKFxuXHRcdFx0XHRcdFx0PEFsbERheVJvd1xuXHRcdFx0XHRcdFx0XHRjbGFzc2VzPXt7IGNlbGw6ICdtaW4tdy0yMCcgfX1cblx0XHRcdFx0XHRcdFx0ZGF5cz17W2N1cnJlbnREYXRlXX1cblx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmFsbERheVJvdyhyZXNvdXJjZS5pZCl9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHRcdFx0c2hvd1NwYWNlcj17ZmFsc2V9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCkpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdH1cblx0XHRcdGNlbGxTbG90cz17WzAsIDE1LCAzMCwgNDVdfVxuXHRcdFx0Y2xhc3Nlcz17eyBib2R5OiAndy1mdWxsJywgaGVhZGVyOiAndy1mdWxsJyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtZGF5XCJcblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0PlxuXHRcdFx0ey8qIEhlYWRlciAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXsnZmxleCBib3JkZXItYiBoLTEyIGZsZXgtMSd9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtbW9udGgtaGVhZGVyXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCBib3JkZXItciB3LTE2IHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCIgLz5cblx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0PFJlc291cmNlQ2VsbFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWluLXctMjAgZmxleC0xXCJcblx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KCdyZXNvdXJjZS1jZWxsJywgcmVzb3VyY2UuaWQpfVxuXHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCkpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZURheUhvcml6b250YWwgfSBmcm9tICcuL3Jlc291cmNlLWRheS1ob3Jpem9udGFsJ1xuaW1wb3J0IHsgUmVzb3VyY2VEYXlWZXJ0aWNhbCB9IGZyb20gJy4vcmVzb3VyY2UtZGF5LXZlcnRpY2FsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBvcmllbnRhdGlvbiB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGlmIChvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuXHRcdHJldHVybiA8UmVzb3VyY2VEYXlWZXJ0aWNhbCAvPlxuXHR9XG5cblx0cmV0dXJuIDxSZXNvdXJjZURheUhvcml6b250YWwgLz5cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgUmVzb3VyY2VFdmVudEdyaWQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvcmVzb3VyY2UtZXZlbnQtZ3JpZCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGdldE1vbnRoRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlTW9udGhIb3Jpem9udGFsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdC8vIEdlbmVyYXRlIGNhbGVuZGFyIGdyaWQgLSBkYXlzIG9mIHRoZSBtb250aFxuXHRjb25zdCBtb250aERheXMgPSB1c2VNZW1vPERheWpzW10+KCgpID0+IHtcblx0XHRyZXR1cm4gZ2V0TW9udGhEYXlzKGN1cnJlbnREYXRlKVxuXHR9LCBbY3VycmVudERhdGVdKVxuXG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlRXZlbnRHcmlkIGRheXM9e21vbnRoRGF5c30+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctMjAgc206dy00MCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVzb3VyY2VzJyl9PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblxuXHRcdFx0e21vbnRoRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcblx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLW1vbnRoLWhlYWRlci0ke2RheS50b0lTT1N0cmluZygpfWBcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctMjAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZmxleC1jb2xcIlxuXHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KGtleSwgJ2FuaW1hdGVkJyl9XG5cdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtrZXlzLmxpc3RLZXkoa2V5LCAnbW90aW9uJyl9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtbWVkaXVtXCI+e2RheS5mb3JtYXQoJ0QnKX08L2Rpdj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0e2RheS5mb3JtYXQoJ2RkZCcpfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvUmVzb3VyY2VFdmVudEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlTW9udGhWZXJ0aWNhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGdldFZpc2libGVSZXNvdXJjZXMgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCByZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblx0Y29uc3Qgc3RhcnRPZk1vbnRoID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuXHRjb25zdCBkYXlzSW5Nb250aCA9IEFycmF5LmZyb20oXG5cdFx0eyBsZW5ndGg6IGN1cnJlbnREYXRlLmRheXNJbk1vbnRoKCkgfSxcblx0XHQoXywgaSkgPT4gc3RhcnRPZk1vbnRoLmFkZChpLCAnZGF5Jylcblx0KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiBrZXlzLmNvbC5kYXRlLFxuXHRcdGRheXM6IGRheXNJbk1vbnRoLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IERheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdDxzcGFuPntkYXRlLmZvcm1hdCgnRCcpfTwvc3Bhbj5cblx0XHRcdFx0PHNwYW4+e2RhdGUuZm9ybWF0KCdkZGQnKX08L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdGlkOiBrZXlzLmNvbC5yZXNvdXJjZSgnbW9udGgnLCByZXNvdXJjZS5pZCksXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0cmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG5cdFx0ZGF5czogZGF5c0luTW9udGgsXG5cdFx0Z3JpZFR5cGU6ICdkYXknIGFzIGNvbnN0LFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGNsYXNzZXM9e3sgaGVhZGVyOiAndy1mdWxsJywgYm9keTogJ3ctZnVsbCcgfX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgLi4uY29sdW1uc119XG5cdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLW1vbnRoLXZlcnRpY2FsLWdyaWRcIlxuXHRcdD5cblx0XHRcdHsvKiBIZWFkZXIgKi99XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17J2ZsZXggYm9yZGVyLWIgaC0xMiBmbGV4LTEnfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLW1vbnRoLWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic2hyaW5rLTAgYm9yZGVyLXIgdy0xNiBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiIC8+XG5cdFx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKFxuXHRcdFx0XHRcdDxSZXNvdXJjZUNlbGxcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm1pbi13LTIwIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleSgncmVzb3VyY2UtY2VsbCcsIHJlc291cmNlLmlkKX1cblx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpKX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgUmVzb3VyY2VNb250aEhvcml6b250YWwgfSBmcm9tICcuL3Jlc291cmNlLW1vbnRoLWhvcml6b250YWwnXG5pbXBvcnQgeyBSZXNvdXJjZU1vbnRoVmVydGljYWwgfSBmcm9tICcuL3Jlc291cmNlLW1vbnRoLXZlcnRpY2FsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VNb250aFZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IG9yaWVudGF0aW9uIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKG9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XG5cdFx0cmV0dXJuIDxSZXNvdXJjZU1vbnRoVmVydGljYWwgLz5cblx0fVxuXG5cdHJldHVybiA8UmVzb3VyY2VNb250aEhvcml6b250YWwgLz5cbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVzb3VyY2VXZWVrVmlld0RhdGEoKSB7XG5cdGNvbnN0IHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRnZXRWaXNpYmxlUmVzb3VyY2VzLFxuXHRcdHdlZWtWaWV3R3JhbnVsYXJpdHksXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRoaWRkZW5EYXlzLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IGlzSG91cmx5ID0gd2Vla1ZpZXdHcmFudWxhcml0eSA9PT0gJ2hvdXJseSdcblx0Y29uc3QgcmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IHZpc2libGVEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0aGlkZGVuRGF5c1xuXHRcdFx0XHQ/IHdlZWtEYXlzLmZpbHRlcigoZGF5KSA9PiAhaGlkZGVuRGF5cy5oYXMoZGF5LmRheSgpKSlcblx0XHRcdFx0OiB3ZWVrRGF5cyxcblx0XHRbd2Vla0RheXMsIGhpZGRlbkRheXNdXG5cdClcblxuXHRjb25zdCByZXNvdXJjZUJ1c2luZXNzSG91cnMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IHJlc291cmNlcy5mbGF0TWFwKChyKSA9PiAoci5idXNpbmVzc0hvdXJzID8gW3IuYnVzaW5lc3NIb3Vyc10gOiBbXSkpLFxuXHRcdFtyZXNvdXJjZXNdXG5cdClcblxuXHRyZXR1cm4ge1xuXHRcdGlzSG91cmx5LFxuXHRcdHJlc291cmNlcyxcblx0XHR3ZWVrRGF5cyxcblx0XHR2aXNpYmxlRGF5cyxcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3Vycyxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgaXNUb2RheSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuaW50ZXJmYWNlIFJlc291cmNlV2Vla0hvcml6b250YWxEYXlIZWFkZXJQcm9wcyB7XG5cdGRheXM6IERheWpzW11cbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlV2Vla0hvcml6b250YWxEYXlIZWFkZXI6IFJlYWN0LkZDPFxuXHRSZXNvdXJjZVdlZWtIb3Jpem9udGFsRGF5SGVhZGVyUHJvcHNcbj4gPSAoeyBkYXlzIH0pID0+IHtcblx0Y29uc3QgeyB3ZWVrVmlld0dyYW51bGFyaXR5IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGlzSG91cmx5ID0gd2Vla1ZpZXdHcmFudWxhcml0eSA9PT0gJ2hvdXJseSdcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHR7ZGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcblx0XHRcdFx0Y29uc3QgdG9kYXkgPSBpc1RvZGF5KGRheSlcblx0XHRcdFx0Y29uc3Qga2V5ID0ga2V5cy5oZWFkZXIud2Vlay5kYXkoZGF5KVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0J3Nocmluay0wIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBib3JkZXItYiBmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXIgZm9udC1tZWRpdW0gbWluLXctMjAnLFxuXHRcdFx0XHRcdFx0XHR0b2RheSAmJiAnYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwJ1xuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmhlYWRlci5yZXNvdXJjZS53ZWVrRGF5fVxuXHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KGtleSwgJ2FuaW1hdGVkJyl9XG5cdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtrZXlzLmxpc3RLZXkoa2V5LCAnbW90aW9uJyl9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdGlzSG91cmx5ID8gJ3N0aWNreSBsZWZ0LTEvMicgOiAndy1mdWxsIHRleHQtY2VudGVyJ1xuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnTS9EJyl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IHVzZVJlc291cmNlV2Vla1ZpZXdEYXRhIH0gZnJvbSAnLi4vdXNlLXJlc291cmNlLXdlZWstdmlldy1kYXRhJ1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVzb3VyY2VXZWVrSG9yaXpvbnRhbERhdGEoKSB7XG5cdGNvbnN0IHtcblx0XHRpc0hvdXJseSxcblx0XHR3ZWVrRGF5cyxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3Vycyxcblx0fSA9IHVzZVJlc291cmNlV2Vla1ZpZXdEYXRhKClcblxuXHRjb25zdCB3ZWVrSG91cnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoIWlzSG91cmx5KSByZXR1cm4gW11cblx0XHRyZXR1cm4gd2Vla0RheXMubWFwKChkYXkpID0+XG5cdFx0XHRnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBkYXksXG5cdFx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnMsXG5cdFx0XHR9KVxuXHRcdClcblx0fSwgW1xuXHRcdGlzSG91cmx5LFxuXHRcdHdlZWtEYXlzLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHRdKVxuXG5cdHJldHVybiB7IHdlZWtIb3VycyB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUmVzb3VyY2VFdmVudEdyaWQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvcmVzb3VyY2UtZXZlbnQtZ3JpZCdcbmltcG9ydCB7IFRpbWVIZWFkZXJSb3cgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvdGltZS1oZWFkZXItcm93J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IHVzZVJlc291cmNlV2Vla1ZpZXdEYXRhIH0gZnJvbSAnLi4vdXNlLXJlc291cmNlLXdlZWstdmlldy1kYXRhJ1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrSG9yaXpvbnRhbERheUhlYWRlciB9IGZyb20gJy4vcmVzb3VyY2Utd2Vlay1ob3Jpem9udGFsLWRheS1oZWFkZXInXG5pbXBvcnQgeyB1c2VSZXNvdXJjZVdlZWtIb3Jpem9udGFsRGF0YSB9IGZyb20gJy4vdXNlLXJlc291cmNlLXdlZWstaG9yaXpvbnRhbC1kYXRhJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrSG9yaXpvbnRhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCB7IGlzSG91cmx5LCB3ZWVrRGF5cyB9ID0gdXNlUmVzb3VyY2VXZWVrVmlld0RhdGEoKVxuXHRjb25zdCB7IHdlZWtIb3VycyB9ID0gdXNlUmVzb3VyY2VXZWVrSG9yaXpvbnRhbERhdGEoKVxuXG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlRXZlbnRHcmlkXG5cdFx0XHRjbGFzc2VzPXt7XG5cdFx0XHRcdGhlYWRlcjogY24oaXNIb3VybHkgPyAnaC0yNCcgOiAnaC0xMicsICdtaW4tdy1mdWxsJyksXG5cdFx0XHRcdGJvZHk6ICdtaW4tdy1mdWxsJyxcblx0XHRcdFx0Y2VsbDogJ21pbi13LTIwIGZsZXgtMScsXG5cdFx0XHR9fVxuXHRcdFx0ZGF5cz17aXNIb3VybHkgPyB3ZWVrSG91cnMgOiB3ZWVrRGF5c31cblx0XHRcdGdyaWRUeXBlPXtpc0hvdXJseSA/ICdob3VyJyA6ICdkYXknfVxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidy0yMCBzbTp3LTQwIGJvcmRlci1iIGJvcmRlci1yIHNocmluay0wIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXNvdXJjZXMnKX08L2Rpdj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBmbGV4IGZsZXgtY29sXCI+XG5cdFx0XHRcdDxSZXNvdXJjZVdlZWtIb3Jpem9udGFsRGF5SGVhZGVyIGRheXM9e3dlZWtEYXlzfSAvPlxuXHRcdFx0XHR7aXNIb3VybHkgJiYgKFxuXHRcdFx0XHRcdDxUaW1lSGVhZGVyUm93XG5cdFx0XHRcdFx0XHRkZWxheVN0ZXA9ezAuMDA1fVxuXHRcdFx0XHRcdFx0aG91cnM9e3dlZWtIb3Vycy5mbGF0KCl9XG5cdFx0XHRcdFx0XHR2aWV3PVwid2Vla1wiXG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvUmVzb3VyY2VFdmVudEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbGxEYXlDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktY2VsbCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IEhvdXJMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3VyLWxhYmVsL2hvdXItbGFiZWwnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSB9IGZyb20gJy4uL3VzZS1yZXNvdXJjZS13ZWVrLXZpZXctZGF0YSdcbmltcG9ydCB7IFJlc291cmNlV2Vla1ZlcnRpY2FsRGF5SGVhZGVyIH0gZnJvbSAnLi9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsLWRheS1oZWFkZXInXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtWZXJ0aWNhbFJlc291cmNlSGVhZGVyIH0gZnJvbSAnLi9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsLXJlc291cmNlLWhlYWRlcidcbmltcG9ydCB7IHVzZVJlc291cmNlV2Vla1ZlcnRpY2FsRGF0YSB9IGZyb20gJy4vdXNlLXJlc291cmNlLXdlZWstdmVydGljYWwtZGF0YSdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlV2Vla1ZlcnRpY2FsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBpc0hvdXJseSwgcmVzb3VyY2VzLCB3ZWVrRGF5cywgdmlzaWJsZURheXMgfSA9XG5cdFx0dXNlUmVzb3VyY2VXZWVrVmlld0RhdGEoKVxuXHRjb25zdCB7IGhvdXJzLCBjb2x1bW5zIH0gPSB1c2VSZXNvdXJjZVdlZWtWZXJ0aWNhbERhdGEoKVxuXG5cdGNvbnN0IGZpcnN0Q29sID0gdXNlTWVtbyhcblx0XHQoKSA9PiAoe1xuXHRcdFx0aWQ6IGlzSG91cmx5ID8ga2V5cy5jb2wudGltZSA6IGtleXMuY29sLmRhdGUsXG5cdFx0XHRkYXlzOiBpc0hvdXJseSA/IGhvdXJzIDogd2Vla0RheXMsXG5cdFx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRcdGNsYXNzTmFtZTpcblx0XHRcdFx0J3Nocmluay0wIHctMTYgbWluLXctMTYgbWF4LXctMTYgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAnLFxuXHRcdFx0Z3JpZFR5cGU6IGlzSG91cmx5ID8gKCdob3VyJyBhcyBjb25zdCkgOiAoJ2RheScgYXMgY29uc3QpLFxuXHRcdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0XHRyZW5kZXJDZWxsOiAoZGF0ZTogRGF5anMpID0+IChcblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHRcdHtpc0hvdXJseSA/IChcblx0XHRcdFx0XHRcdDxIb3VyTGFiZWwgZGF0ZT17ZGF0ZX0gLz5cblx0XHRcdFx0XHQpIDogKFxuXHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0PHNwYW4+e2RhdGUuZm9ybWF0KCdkZGQnKX08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdDxzcGFuPntkYXRlLmZvcm1hdCgnTS9EJyl9PC9zcGFuPlxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpLFxuXHRcdH0pLFxuXHRcdFtob3VycywgaXNIb3VybHksIHdlZWtEYXlzXVxuXHQpXG5cblx0Y29uc3QgYWxsRGF5Um93ID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKCFpc0hvdXJseSkgcmV0dXJuIHVuZGVmaW5lZFxuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXhcIj5cblx0XHRcdFx0PEFsbERheUNlbGwgLz5cblx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0PEFsbERheVJvd1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcz17eyBjZWxsOiAnbWluLXctMjAgYm9yZGVyLXIhJyB9fVxuXHRcdFx0XHRcdFx0ZGF5cz17dmlzaWJsZURheXN9XG5cdFx0XHRcdFx0XHRrZXk9e2tleXMuYWxsRGF5Um93KHJlc291cmNlLmlkKX1cblx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHRcdHNob3dTcGFjZXI9e2ZhbHNlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCkpfVxuXHRcdFx0PC9kaXY+XG5cdFx0KVxuXHR9LCBbaXNIb3VybHksIHJlc291cmNlcywgdmlzaWJsZURheXNdKVxuXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0YWxsRGF5Um93PXthbGxEYXlSb3d9XG5cdFx0XHRjbGFzc2VzPXt7XG5cdFx0XHRcdGhlYWRlcjogaXNIb3VybHkgPyAnaC0yNCcgOiAnaC0xMiB3LWZ1bGwnLFxuXHRcdFx0XHRib2R5OiBpc0hvdXJseSA/ICd3LWZpdCcgOiAndy1mdWxsJyxcblx0XHRcdH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIC4uLmNvbHVtbnNdfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS13ZWVrXCJcblx0XHRcdGdyaWRUeXBlPXtpc0hvdXJseSA/ICdob3VyJyA6ICdkYXknfVxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0PFJlc291cmNlV2Vla1ZlcnRpY2FsUmVzb3VyY2VIZWFkZXJcblx0XHRcdFx0XHRyZXNvdXJjZXM9e3Jlc291cmNlc31cblx0XHRcdFx0XHR2aXNpYmxlRGF5cz17dmlzaWJsZURheXN9XG5cdFx0XHRcdC8+XG5cdFx0XHRcdHtpc0hvdXJseSAmJiA8UmVzb3VyY2VXZWVrVmVydGljYWxEYXlIZWFkZXIgY29sdW1ucz17Y29sdW1uc30gLz59XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmludGVyZmFjZSBSZXNvdXJjZVdlZWtWZXJ0aWNhbERheUhlYWRlclByb3BzIHtcblx0Y29sdW1uczogQXJyYXk8eyBkYXk/OiBEYXlqczsgcmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlciB9PlxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmVydGljYWxEYXlIZWFkZXI6IFJlYWN0LkZDPFxuXHRSZXNvdXJjZVdlZWtWZXJ0aWNhbERheUhlYWRlclByb3BzXG4+ID0gKHsgY29sdW1ucyB9KSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNocmluay0wIHctMTYgYm9yZGVyLXIgYm9yZGVyLWIgei0yMCBiZy1iYWNrZ3JvdW5kIHN0aWNreSBsZWZ0LTBcIj5cblx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwicHgtMiBoLWZ1bGwgdy1mdWxsIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtc3RhcnQgZm9udC1tZWRpdW1cIj5cblx0XHRcdFx0XHR7Y3VycmVudERhdGUud2VlaygpfVxuXHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdHtjb2x1bW5zLm1hcCgoY29sLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBkYXkgPSBjb2wuZGF5XG5cdFx0XHRcdGlmICghZGF5KSByZXR1cm4gbnVsbFxuXHRcdFx0XHRjb25zdCBrZXkgPSBrZXlzLmhlYWRlci53ZWVrLmhvdXIoZGF5LCBjb2wucmVzb3VyY2VJZCA/PyAnJylcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdCd3LTIwIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBib3JkZXItYiBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXhzIHNocmluay0wIGJnLWJhY2tncm91bmQnXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuaGVhZGVyLnJlc291cmNlLnRpbWVMYWJlbChcblx0XHRcdFx0XHRcdFx0J3dlZWsnLFxuXHRcdFx0XHRcdFx0XHRkYXkuZm9ybWF0KCdISCcpXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KGtleSwgJ2FuaW1hdGVkJyl9XG5cdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtrZXlzLmxpc3RLZXkoa2V5LCAnbW90aW9uJyl9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnTS9EJyl9XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5pbnRlcmZhY2UgUmVzb3VyY2VXZWVrVmVydGljYWxSZXNvdXJjZUhlYWRlclByb3BzIHtcblx0cmVzb3VyY2VzOiBSZXNvdXJjZVtdXG5cdHZpc2libGVEYXlzOiBEYXlqc1tdXG59XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVdlZWtWZXJ0aWNhbFJlc291cmNlSGVhZGVyOiBSZWFjdC5GQzxcblx0UmVzb3VyY2VXZWVrVmVydGljYWxSZXNvdXJjZUhlYWRlclByb3BzXG4+ID0gKHsgcmVzb3VyY2VzIH0pID0+IHtcblx0Y29uc3QgeyB3ZWVrVmlld0dyYW51bGFyaXR5LCB0LCBjdXJyZW50RGF0ZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCBpc0hvdXJseSA9IHdlZWtWaWV3R3JhbnVsYXJpdHkgPT09ICdob3VybHknXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMlwiPlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCB3LTE2IGJvcmRlci1yIHotMjAgYmctYmFja2dyb3VuZCBzdGlja3kgbGVmdC0wXCI+XG5cdFx0XHRcdDxzcGFuXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdweC0yIGgtZnVsbCB3LWZ1bGwgZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LWNlbnRlcicsXG5cdFx0XHRcdFx0XHRpc0hvdXJseSA/ICdqdXN0aWZ5LWVuZCcgOiAnanVzdGlmeS1jZW50ZXIgYm9yZGVyLWInXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt0KCd3ZWVrJyl9XG5cdFx0XHRcdFx0eyFpc0hvdXJseSAmJiAoXG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0e2N1cnJlbnREYXRlLndlZWsoKX1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblxuXHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiB7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PFJlc291cmNlQ2VsbFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWluLXctMjAgZmxleC0xIGJvcmRlci1iXCJcblx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KCdyZXNvdXJjZS1jZWxsJywgcmVzb3VyY2UuaWQpfVxuXHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHQnc3RpY2t5IHRleHQtc20gZm9udC1tZWRpdW0gdHJ1bmNhdGUnLFxuXHRcdFx0XHRcdFx0XHRcdGlzSG91cmx5ID8gJ2xlZnQtMS80JyA6ICdsZWZ0LTEnXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdHtyZXNvdXJjZS50aXRsZX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvUmVzb3VyY2VDZWxsPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ2V0Vmlld0hvdXJzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSB9IGZyb20gJy4uL3VzZS1yZXNvdXJjZS13ZWVrLXZpZXctZGF0YSdcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlc291cmNlV2Vla1ZlcnRpY2FsRGF0YSgpIHtcblx0Y29uc3Qge1xuXHRcdGlzSG91cmx5LFxuXHRcdHJlc291cmNlcyxcblx0XHR3ZWVrRGF5cyxcblx0XHR2aXNpYmxlRGF5cyxcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3Vycyxcblx0fSA9IHVzZVJlc291cmNlV2Vla1ZpZXdEYXRhKClcblxuXHRjb25zdCBnZXRIb3VycyA9IHVzZUNhbGxiYWNrKFxuXHRcdChkYXRlOiBEYXlqcykgPT4ge1xuXHRcdFx0cmV0dXJuIGdldFZpZXdIb3Vycyh7XG5cdFx0XHRcdHJlZmVyZW5jZURhdGU6IGRhdGUsXG5cdFx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRhbGxEYXRlczogd2Vla0RheXMsXG5cdFx0XHRcdHJlc291cmNlQnVzaW5lc3NIb3Vycyxcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMsIHdlZWtEYXlzLCByZXNvdXJjZUJ1c2luZXNzSG91cnNdXG5cdClcblxuXHRjb25zdCBob3VycyA9IHVzZU1lbW8oKCkgPT4gZ2V0SG91cnMoY3VycmVudERhdGUpLCBbY3VycmVudERhdGUsIGdldEhvdXJzXSlcblx0Y29uc3QgaG91cmx5Q29sdW1ucyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdHJlc291cmNlcy5mbGF0TWFwKChyZXNvdXJjZSkgPT5cblx0XHRcdFx0dmlzaWJsZURheXMubWFwKChkYXkpID0+ICh7XG5cdFx0XHRcdFx0aWQ6IGtleXMuY29sLmRheShkYXksIHJlc291cmNlLmlkKSxcblx0XHRcdFx0XHRjbGFzc05hbWU6ICdtaW4tdy0yMCBmbGV4LTEnLFxuXHRcdFx0XHRcdHJlc291cmNlSWQ6IHJlc291cmNlLmlkLFxuXHRcdFx0XHRcdHJlc291cmNlLFxuXHRcdFx0XHRcdGRheSxcblx0XHRcdFx0XHRkYXlzOiBnZXRIb3VycyhkYXkpLFxuXHRcdFx0XHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0XHRcdH0pKVxuXHRcdFx0KSxcblx0XHRbcmVzb3VyY2VzLCB2aXNpYmxlRGF5cywgZ2V0SG91cnNdXG5cdClcblxuXHQvLyBVc2VzIGB3ZWVrRGF5c2AgKGFsbCA3KSBpbnRlbnRpb25hbGx5LCBub3QgYHZpc2libGVEYXlzYC4gTm9uLWNvbnRpZ3VvdXNcblx0Ly8gdmlzaWJsZSBkYXlzIHdvdWxkIGJyZWFrIG11bHRpLWRheSBldmVudCBwb3NpdGlvbmluZywgc28gYGhpZGRlbkRheXNgIGlzXG5cdC8vIG5vdCBzdXBwb3J0ZWQgaW4gZGFpbHkgZ3JhbnVsYXJpdHkuXG5cdGNvbnN0IGRhaWx5Q29sdW1ucyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdHJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdFx0XHRpZDoga2V5cy5jb2wucmVzb3VyY2UoJ3dlZWsnLCByZXNvdXJjZS5pZCksXG5cdFx0XHRcdGNsYXNzTmFtZTogJ21pbi13LTIwIGZsZXgtMScsXG5cdFx0XHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdFx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRcdFx0cmVzb3VyY2UsXG5cdFx0XHRcdGRheXM6IHdlZWtEYXlzLFxuXHRcdFx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdFx0XHR9KSksXG5cdFx0W3Jlc291cmNlcywgd2Vla0RheXNdXG5cdClcblxuXHRjb25zdCBjb2x1bW5zID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKGlzSG91cmx5KSByZXR1cm4gaG91cmx5Q29sdW1uc1xuXHRcdHJldHVybiBkYWlseUNvbHVtbnNcblx0fSwgW2lzSG91cmx5LCBob3VybHlDb2x1bW5zLCBkYWlseUNvbHVtbnNdKVxuXG5cdHJldHVybiB7IGhvdXJzLCBjb2x1bW5zIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtIb3Jpem9udGFsIH0gZnJvbSAnLi9ob3Jpem9udGFsL3Jlc291cmNlLXdlZWstaG9yaXpvbnRhbCdcbmltcG9ydCB7IFJlc291cmNlV2Vla1ZlcnRpY2FsIH0gZnJvbSAnLi92ZXJ0aWNhbC9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgb3JpZW50YXRpb24gfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRpZiAob3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcpIHtcblx0XHRyZXR1cm4gPFJlc291cmNlV2Vla1ZlcnRpY2FsIC8+XG5cdH1cblxuXHRyZXR1cm4gPFJlc291cmNlV2Vla0hvcml6b250YWwgLz5cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgQ2FsZW5kYXJEbmRDb250ZXh0IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQnXG5pbXBvcnQgeyBFdmVudEZvcm1EaWFsb2cgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtLWRpYWxvZydcbmltcG9ydCB7IEhlYWRlciB9IGZyb20gJ0AvY29tcG9uZW50cy9oZWFkZXInXG5pbXBvcnQgeyBSZXNvdXJjZURheVZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcnXG5pbXBvcnQgeyBSZXNvdXJjZU1vbnRoVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3J1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNhbGVuZGFyQm9keTogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgdmlldyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHZpZXdNYXA6IFJlY29yZDxzdHJpbmcsIFJlYWN0LlJlYWN0Tm9kZT4gPSB7XG5cdFx0bW9udGg6IDxSZXNvdXJjZU1vbnRoVmlldyBrZXk9XCJtb250aFwiIC8+LFxuXHRcdHdlZWs6IDxSZXNvdXJjZVdlZWtWaWV3IGtleT1cIndlZWtcIiAvPixcblx0XHRkYXk6IDxSZXNvdXJjZURheVZpZXcga2V5PVwiZGF5XCIgLz4sXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImlsYW15LXJlc291cmNlLWNhbGVuZGFyXCJcblx0XHQ+XG5cdFx0XHQ8SGVhZGVyIGNsYXNzTmFtZT1cInAtMVwiIC8+XG5cblx0XHRcdHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZWRTZWN0aW9uIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuXHRcdFx0PENhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBoLVtjYWxjKDEwMCUtMy41cmVtKV0gQGNvbnRhaW5lci9jYWxlbmRhci1ib2R5XCJcblx0XHRcdFx0XHRkaXJlY3Rpb249XCJob3Jpem9udGFsXCJcblx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXt2aWV3fVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJib3JkZXIgaC1mdWxsIHctZnVsbFwiIGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItYm9keVwiPlxuXHRcdFx0XHRcdFx0e3ZpZXdNYXBbdmlld119XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0PC9DYWxlbmRhckRuZENvbnRleHQ+XG5cblx0XHRcdHsvKiBFdmVudCBGb3JtIERpYWxvZyAqL31cblx0XHRcdDxFdmVudEZvcm1EaWFsb2cgLz5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJQcm92aWRlciB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHtcblx0SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcEV2ZW50LFxuXHRJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wcyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7XG5cdERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdEVWRU5UX0JBUl9IRUlHSFQsXG5cdEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRXRUVLX0RBWVNfTlVNQkVSX01BUCxcbn0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgbm9ybWFsaXplRXZlbnRzLCBzYWZlRGF0ZSwgdG9IaWRkZW5EYXlzU2V0IH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyQm9keSB9IGZyb20gJy4vcmVzb3VyY2UtY2FsZW5kYXItYm9keSdcblxuZXhwb3J0IGNvbnN0IElsYW15UmVzb3VyY2VDYWxlbmRhcjogUmVhY3QuRkM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHM+ID0gKHtcblx0ZXZlbnRzID0gW10sXG5cdHJlc291cmNlcyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9ICdzdW5kYXknLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRkaXNhYmxlRHJhZ0FuZERyb3AgPSBmYWxzZSxcblx0ZGF5TWF4RXZlbnRzID0gREFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdGV2ZW50SGVpZ2h0ID0gRVZFTlRfQkFSX0hFSUdIVCxcblx0aGlkZGVuRGF5cyxcblx0Li4ucHJvcHNcbn0pID0+IHtcblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyXG5cdFx0XHRkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c31cblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcD17ZGlzYWJsZURyYWdBbmREcm9wfVxuXHRcdFx0ZXZlbnRIZWlnaHQ9e2V2ZW50SGVpZ2h0fVxuXHRcdFx0ZXZlbnRTcGFjaW5nPXtldmVudFNwYWNpbmd9XG5cdFx0XHRldmVudHM9e25vcm1hbGl6ZUV2ZW50czxJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wRXZlbnQsIENhbGVuZGFyRXZlbnQ+KFxuXHRcdFx0XHRldmVudHNcblx0XHRcdCl9XG5cdFx0XHRmaXJzdERheU9mV2Vlaz17V0VFS19EQVlTX05VTUJFUl9NQVBbZmlyc3REYXlPZldlZWtdfVxuXHRcdFx0aGlkZGVuRGF5cz17dG9IaWRkZW5EYXlzU2V0KGhpZGRlbkRheXMpfVxuXHRcdFx0aW5pdGlhbERhdGU9e3NhZmVEYXRlKGluaXRpYWxEYXRlKX1cblx0XHRcdGluaXRpYWxWaWV3PXtpbml0aWFsVmlld31cblx0XHRcdHJlc291cmNlcz17cmVzb3VyY2VzfVxuXHRcdFx0dGltZUZvcm1hdD17dGltZUZvcm1hdH1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8UmVzb3VyY2VDYWxlbmRhckJvZHkgLz5cblx0XHQ8L1Jlc291cmNlQ2FsZW5kYXJQcm92aWRlcj5cblx0KVxufVxuIgogIF0sCiAgIm1hcHBpbmdzIjogIkFBRUEsZ0JBQVMsZUNGVCwwQkFDQyxhQUVBLHNCQ0ZELGVBQVMsY0FDVCxrQkFBUyx3QkNEVCxzQkFDQSwwQ0FDQSw4Q0FDQSwrQ0FDQSwyQ0FDQSx1Q0FDQSx5Q0FDQSxvQ0FDQSx3Q0FDQSwyQ0FhQSxJQUFJLEdBRUUsR0FBZ0MsQ0FBQyxFQUFTLEVBQVksSUFBaUIsQ0FDNUUsSUFBTSxFQUFRLEVBQVcsVUFHbkIsRUFBcUIsRUFBYSxHQUFHLFdBQzNDLEVBQWEsR0FBRyxXQUFhLENBQUMsSUFBc0IsQ0FFbkQsT0FEQSxHQUFrQixFQUNYLEVBQW1CLENBQVEsR0FJbkMsSUFBOEIsUUFBeEIsRUFDc0IsTUFBdEIsR0FBZ0IsRUFFdEIsU0FBUyxDQUFlLENBQ3ZCLEVBQ0EsRUFDYyxDQUNkLElBQU0sRUFBTSxFQUEyQixJQUFJLFdBQWEsR0FDeEQsR0FBSSxDQUFDLEVBQUksT0FBTyxFQUVoQixJQUFNLEVBQWlCLEVBQ3JCLEdBQUcsRUFBTyxPQUFPLHFCQUFxQixFQUFHLENBQUUsRUFDM0MsVUFBVSxFQUNaLEdBQUksRUFBTyxVQUFVLElBQU0sRUFDMUIsT0FBTyxFQUFPLEdBQUcsRUFBSSxFQUFJLEVBRTFCLE9BQU8sRUFLUixFQUFNLFFBQVUsUUFBUyxDQUFDLEVBQXVCLEVBQW9CLENBQ3BFLElBQU0sRUFBUyxFQUFnQixLQUFLLEtBQU0sRUFBTSxDQUFRLEVBQ3hELE9BQU8sRUFBZ0IsS0FBTSxDQUFNLEdBSXBDLEVBQU0sTUFBUSxHQUlmLEdBQU0sT0FBTyxFQUFPLEVB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
6
+ //# debugId=5A264648152BDA2964756E2164756E21
7
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2luZGV4LnRzIiwgInNyYy9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbi50c3giLCAic3JjL2xpYi91dGlscy9pbmRleC50cyIsICJzcmMvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnLnRzIiwgInNyYy9saWIvY29uc3RhbnRzLnRzIiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2J1dHRvbi50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvZGlhbG9nLnRzeCIsICJzcmMvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQudHMiLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dC50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9jb250ZXh0LnRzIiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICJzcmMvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZS50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXIudHMiLCAic3JjL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdC50cyIsICJzcmMvbGliL3V0aWxzL2RhdGUtdXRpbHMudHMiLCAic3JjL2xpYi91dGlscy9ldmVudC11dGlscy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZy50c3giLCAic3JjL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9kbmQtdXRpbHMudHMiLCAic3JjL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9ldmVudC1kcmFnLW92ZXJsYXkudHN4IiwgInNyYy9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvY2hlY2tib3gudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYWxlbmRhci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvcG9wb3Zlci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvaW5wdXQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2xhYmVsLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYS50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvdGltZS1waWNrZXIudHN4IiwgInNyYy9ob29rcy91c2UtYXV0b2NvbXBsZXRlLXRpbWVwaWNrZXIudHMiLCAic3JjL2xpYi91dGlscy9rZXlzLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3Vycy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvZXZlbnQtZm9ybS11dGlscy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdG9yL3JlY3VycmVuY2UtZWRpdG9yLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYXJkLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zZWxlY3QudHN4IiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucy50cyIsICJzcmMvaG9va3MvdXNlLWVmZmVjdGl2ZS1idXNpbmVzcy1ob3Vycy50cyIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nLnRzeCIsICJzcmMvY29tcG9uZW50cy9oZWFkZXIvYmFzZS1oZWFkZXIudHN4IiwgInNyYy9saWIvdXRpbHMvZXhwb3J0LWljYWwudHMiLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3RpdGxlLWNvbnRlbnQudHN4IiwgInNyYy9jb21wb25lbnRzL2hlYWRlci92aWV3LWNvbnRyb2xzLnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdy50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1yb3cudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWRXZWVrRXZlbnRzLnRzIiwgInNyYy9saWIvdXRpbHMvcG9zaXRpb24td2Vlay1ldmVudHMudHMiLCAic3JjL2NvbXBvbmVudHMvZ3JpZC1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9kYXktbnVtYmVyLnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZXZlbnRzLWRpYWxvZy50c3giLCAic3JjL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudC50c3giLCAic3JjL2NvbXBvbmVudHMvZHJvcHBhYmxlLWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL3Jlc291cmNlLWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQtZXZlbnRzLWxheWVyLnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL2hvdXItbGFiZWwvaG91ci1sYWJlbC50c3giLCAic3JjL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkLWNvbC50c3giLCAic3JjL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkLWV2ZW50cy1sYXllci50c3giLCAic3JjL2NvbXBvbmVudHMvY3VycmVudC10aW1lLWluZGljYXRvci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZERheUV2ZW50cy50cyIsICJzcmMvbGliL3V0aWxzL3Bvc2l0aW9uLWRheS1ldmVudHMudHMiLCAic3JjL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkLWhlYWRlci1jb250YWluZXIudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMudHMiLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvZGF5LXZpZXcudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvbW9udGgtdmlldy50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1oZWFkZXItY29udGFpbmVyLnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L21vbnRoLWhlYWRlci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstdmlldy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMveWVhci12aWV3L3llYXItdmlldy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvcHJvdmlkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LWNhbGVuZGFyLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy90aW1lLWhlYWRlci1yb3cudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L3Jlc291cmNlLWRheS1ob3Jpem9udGFsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9yZXNvdXJjZS1kYXktdmVydGljYWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2luZGV4LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L3Jlc291cmNlLW1vbnRoLWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvcmVzb3VyY2UtbW9udGgtdmVydGljYWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvaW5kZXgudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy91c2UtcmVzb3VyY2Utd2Vlay12aWV3LWRhdGEudHMiLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L2hvcml6b250YWwvcmVzb3VyY2Utd2Vlay1ob3Jpem9udGFsLWRheS1oZWFkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9ob3Jpem9udGFsL3VzZS1yZXNvdXJjZS13ZWVrLWhvcml6b250YWwtZGF0YS50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvaG9yaXpvbnRhbC9yZXNvdXJjZS13ZWVrLWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy92ZXJ0aWNhbC9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvdmVydGljYWwvcmVzb3VyY2Utd2Vlay12ZXJ0aWNhbC1kYXktaGVhZGVyLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvdmVydGljYWwvcmVzb3VyY2Utd2Vlay12ZXJ0aWNhbC1yZXNvdXJjZS1oZWFkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy92ZXJ0aWNhbC91c2UtcmVzb3VyY2Utd2Vlay12ZXJ0aWNhbC1kYXRhLnRzIiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvcmVzb3VyY2UtY2FsZW5kYXItYm9keS50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIudHN4Il0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIi8vIFJlLWV4cG9ydCBycnVsZS5qcyB0eXBlcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB0eXBlIHsgV2Vla2RheSB9IGZyb20gJ3JydWxlJ1xuZXhwb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmV4cG9ydCB0eXBlIHsgRXZlbnRGb3JtUHJvcHMgfSBmcm9tICcuL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtJ1xuZXhwb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50LCBXZWVrRGF5cyB9IGZyb20gJy4vY29tcG9uZW50cy90eXBlcydcbmV4cG9ydCB7IElsYW15Q2FsZW5kYXIgfSBmcm9tICcuL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktY2FsZW5kYXInXG5leHBvcnQgdHlwZSB7XG5cdENlbGxDbGlja0luZm8sXG5cdElsYW15Q2FsZW5kYXJQcm9wcyxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcbn0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbi8vIEV4cG9ydCB0eXBlc1xuZXhwb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICcuL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG4vLyBSUlVMRS1iYXNlZCByZWN1cnJlbmNlIHN5c3RlbVxuZXhwb3J0IHtcblx0Z2VuZXJhdGVSZWN1cnJpbmdFdmVudHMsXG5cdGlzUmVjdXJyaW5nRXZlbnQsXG59IGZyb20gJy4vZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5leHBvcnQgdHlwZSB7IElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BzIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LXJlc291cmNlLWNhbGVuZGFyJ1xuZXhwb3J0IHsgSWxhbXlSZXNvdXJjZUNhbGVuZGFyIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LXJlc291cmNlLWNhbGVuZGFyL2lsYW15LXJlc291cmNlLWNhbGVuZGFyJ1xuLy8gUmVzb3VyY2UgY2FsZW5kYXIgdHlwZXNcbmV4cG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuLy8gUHVibGljIGNhbGVuZGFyIGNvbnRleHQgaG9va3NcbmV4cG9ydCB7XG5cdHR5cGUgVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4sXG5cdHVzZUlsYW15Q2FsZW5kYXJDb250ZXh0LFxufSBmcm9tICcuL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuZXhwb3J0IHsgZGVmYXVsdFRyYW5zbGF0aW9ucyB9IGZyb20gJy4vbGliL3RyYW5zbGF0aW9ucy9kZWZhdWx0J1xuLy8gVHJhbnNsYXRpb24gc3lzdGVtXG5leHBvcnQgdHlwZSB7XG5cdFRyYW5zbGF0aW9uS2V5LFxuXHRUcmFuc2xhdGlvbnMsXG5cdFRyYW5zbGF0b3JGdW5jdGlvbixcbn0gZnJvbSAnLi9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBDYWxlbmRhclZpZXcsIFRpbWVGb3JtYXQgfSBmcm9tICcuL3R5cGVzJ1xuIiwKICAgICJpbXBvcnQge1xuXHRBbmltYXRlUHJlc2VuY2UsXG5cdHR5cGUgSFRNTE1vdGlvblByb3BzLFxuXHRtb3Rpb24sXG5cdHR5cGUgVmFyaWFudHMsXG59IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgQW5pbWF0ZWRTZWN0aW9uUHJvcHNcblx0ZXh0ZW5kcyBPbWl0PEhUTUxNb3Rpb25Qcm9wczwnZGl2Jz4sICdjaGlsZHJlbicgfCAnbGF5b3V0JyB8ICdsYXlvdXRJZCc+IHtcblx0Y2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxuXHR0cmFuc2l0aW9uS2V5OiBzdHJpbmdcblx0ZGVsYXk/OiBudW1iZXJcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGRpcmVjdGlvbj86ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCdcblx0bGF5b3V0PzogYm9vbGVhbiB8ICdwb3NpdGlvbicgfCAnc2l6ZScgfCAncHJlc2VydmUtYXNwZWN0J1xuXHRsYXlvdXRJZD86IHN0cmluZ1xuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG59XG5cbmNvbnN0IHZhcmlhbnRzOiBWYXJpYW50cyA9IHtcblx0aGlkZGVuOiAoeyBkaXJlY3Rpb24gfTogeyBkaXJlY3Rpb246ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgfSkgPT4gKHtcblx0XHRvcGFjaXR5OiAwLFxuXHRcdHg6IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gMTAgOiAwLFxuXHRcdHk6IGRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/IC0xMCA6IDAsXG5cdH0pLFxuXHR2aXNpYmxlOiAoeyBkZWxheSB9OiB7IGRlbGF5OiBudW1iZXIgfSkgPT4gKHtcblx0XHRvcGFjaXR5OiAxLFxuXHRcdHg6IDAsXG5cdFx0eTogMCxcblx0XHR0cmFuc2l0aW9uOiB7IGR1cmF0aW9uOiAwLjIsIGVhc2U6IFswLjQsIDAsIDAuMiwgMV0sIGRlbGF5IH0sXG5cdH0pLFxuXHRleGl0OiAoeyBkaXJlY3Rpb24gfTogeyBkaXJlY3Rpb246ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgfSkgPT4gKHtcblx0XHRvcGFjaXR5OiAwLFxuXHRcdHg6IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gLTEwIDogMCxcblx0XHR5OiBkaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcgPyAtMTAgOiAwLFxuXHRcdHRyYW5zaXRpb246IHsgZHVyYXRpb246IDAuMTUgfSxcblx0fSksXG59XG5cbmV4cG9ydCBjb25zdCBBbmltYXRlZFNlY3Rpb246IFJlYWN0LkZDPEFuaW1hdGVkU2VjdGlvblByb3BzPiA9ICh7XG5cdGNoaWxkcmVuLFxuXHR0cmFuc2l0aW9uS2V5LFxuXHRkZWxheSA9IDAsXG5cdGNsYXNzTmFtZSxcblx0ZGlyZWN0aW9uID0gJ3ZlcnRpY2FsJyxcblx0bGF5b3V0LFxuXHRsYXlvdXRJZCxcblx0J2RhdGEtdGVzdGlkJzogdGVzdElkLFxuXHRyZWYsXG5cdC4uLnByb3BzXG59KSA9PiAoXG5cdDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cblx0XHQ8bW90aW9uLmRpdlxuXHRcdFx0YW5pbWF0ZT1cInZpc2libGVcIlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignaW5saW5lLWJsb2NrIHctZnVsbCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRjdXN0b209e3sgZGVsYXksIGRpcmVjdGlvbiB9fVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e3Rlc3RJZH1cblx0XHRcdGV4aXQ9XCJleGl0XCJcblx0XHRcdGluaXRpYWw9XCJoaWRkZW5cIlxuXHRcdFx0a2V5PXt0cmFuc2l0aW9uS2V5fVxuXHRcdFx0bGF5b3V0PXtsYXlvdXR9XG5cdFx0XHRsYXlvdXRJZD17bGF5b3V0SWR9XG5cdFx0XHRyZWY9e3JlZn1cblx0XHRcdHZhcmlhbnRzPXt2YXJpYW50c31cblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9tb3Rpb24uZGl2PlxuXHQ8L0FuaW1hdGVQcmVzZW5jZT5cbilcblxuQW5pbWF0ZWRTZWN0aW9uLmRpc3BsYXlOYW1lID0gJ0FuaW1hdGVkU2VjdGlvbidcbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDbGFzc1ZhbHVlIH0gZnJvbSAnY2xzeCdcbmltcG9ydCB7IGNsc3ggfSBmcm9tICdjbHN4J1xuaW1wb3J0IHsgdHdNZXJnZSB9IGZyb20gJ3RhaWx3aW5kLW1lcmdlJ1xuaW1wb3J0IHR5cGUgeyBXZWVrRGF5cyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBXRUVLX0RBWVNfTlVNQkVSX01BUCB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcblxuZXhwb3J0IGZ1bmN0aW9uIGNuKC4uLmlucHV0czogQ2xhc3NWYWx1ZVtdKSB7XG5cdHJldHVybiB0d01lcmdlKGNsc3goaW5wdXRzKSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvcHRpb25hbCBXZWVrRGF5c1tdIGxpc3QgaW50byBhIFNldDxudW1iZXI+IG9mIGRheSBpbmRpY2VzXG4gKiAoMCA9IFN1bmRheSwgMSA9IE1vbmRheSwgLi4uKSwgb3IgdW5kZWZpbmVkIGlmIHRoZSBsaXN0IGlzIGVtcHR5LlxuICovXG5leHBvcnQgY29uc3QgdG9IaWRkZW5EYXlzU2V0ID0gKFxuXHRoaWRkZW5EYXlzPzogV2Vla0RheXNbXVxuKTogU2V0PG51bWJlcj4gfCB1bmRlZmluZWQgPT4ge1xuXHRpZiAoIWhpZGRlbkRheXMgfHwgaGlkZGVuRGF5cy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWRcblx0cmV0dXJuIG5ldyBTZXQoaGlkZGVuRGF5cy5tYXAoKGRheSkgPT4gV0VFS19EQVlTX05VTUJFUl9NQVBbZGF5XSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYWZlRGF0ZShcblx0ZGF0ZTogRGF5anMgfCBEYXRlIHwgc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBEYXlqcyB8IHVuZGVmaW5lZCB7XG5cdGlmIChkYXRlID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkXG5cdH1cblx0aWYgKGRheWpzLmlzRGF5anMoZGF0ZSkpIHtcblx0XHRyZXR1cm4gZGF0ZVxuXHR9XG5cdGNvbnN0IHBhcnNlZERhdGUgPSBkYXlqcyhkYXRlKVxuXHRyZXR1cm4gcGFyc2VkRGF0ZS5pc1ZhbGlkKCkgPyBwYXJzZWREYXRlIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBjb25zdCBvbWl0S2V5cyA9IDxUIGV4dGVuZHMgb2JqZWN0LCBLIGV4dGVuZHMga2V5b2YgVD4oXG5cdG9iajogVCxcblx0a2V5czogS1tdXG4pOiBPbWl0PFQsIEs+ID0+IHtcblx0Y29uc3QgcmVzdWx0ID0geyAuLi5vYmogfVxuXHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0ZGVsZXRlIHJlc3VsdFtrZXldXG5cdH1cblx0cmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgY2FsZW5kYXIgZXZlbnRzIGZyb20gcHVibGljLWZhY2luZyBmb3JtYXQgdG8gaW50ZXJuYWwgZm9ybWF0LlxuICogQ29udmVydHMgZmxleGlibGUgZGF0ZSB0eXBlcyAoZGF5anMsIERhdGUsIHN0cmluZykgdG8gc3RyaWN0IGRheWpzIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIGV2ZW50cyAtIEFycmF5IG9mIGNhbGVuZGFyIGV2ZW50cyB3aXRoIGZsZXhpYmxlIGRhdGUgdHlwZXNcbiAqIEByZXR1cm5zIE5vcm1hbGl6ZWQgYXJyYXkgb2YgY2FsZW5kYXIgZXZlbnRzIHdpdGggZGF5anMgZGF0ZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVndWxhciBjYWxlbmRhciBldmVudHNcbiAqIGNvbnN0IGV2ZW50cyA9IG5vcm1hbGl6ZUV2ZW50czxJbGFteUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50Pihwcm9wRXZlbnRzKVxuICpcbiAqIC8vIFJlc291cmNlIGNhbGVuZGFyIGV2ZW50c1xuICogY29uc3QgcmVzb3VyY2VFdmVudHMgPSBub3JtYWxpemVFdmVudHM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50Pihwcm9wRXZlbnRzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplRXZlbnRzPFxuXHRUSW5wdXQgZXh0ZW5kcyB7XG5cdFx0c3RhcnQ6IERheWpzIHwgRGF0ZSB8IHN0cmluZ1xuXHRcdGVuZDogRGF5anMgfCBEYXRlIHwgc3RyaW5nXG5cdH0sXG5cdFRPdXRwdXQsXG4+KGV2ZW50czogVElucHV0W10gfCB1bmRlZmluZWQpOiBUT3V0cHV0W10ge1xuXHRpZiAoIWV2ZW50cyB8fCAhZXZlbnRzLmxlbmd0aCkge1xuXHRcdHJldHVybiBbXVxuXHR9XG5cblx0cmV0dXJuIGV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0c3RhcnQ6IGRheWpzLmlzRGF5anMoZXZlbnQuc3RhcnQpID8gZXZlbnQuc3RhcnQgOiBkYXlqcyhldmVudC5zdGFydCksXG5cdFx0XHRlbmQ6IGRheWpzLmlzRGF5anMoZXZlbnQuZW5kKSA/IGV2ZW50LmVuZCA6IGRheWpzKGV2ZW50LmVuZCksXG5cdFx0fSBhcyBUT3V0cHV0XG5cdH0pXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgT3BVbml0VHlwZSBhcyBEYXlqc09wVW5pdFR5cGUsIFBsdWdpbkZ1bmMgfSBmcm9tICdkYXlqcydcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcbmltcG9ydCBpc0JldHdlZW4gZnJvbSAnZGF5anMvcGx1Z2luL2lzQmV0d2Vlbi5qcydcbmltcG9ydCBpc1NhbWVPckFmdGVyIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckFmdGVyLmpzJ1xuaW1wb3J0IGlzU2FtZU9yQmVmb3JlIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckJlZm9yZS5qcydcbmltcG9ydCBsb2NhbGVEYXRhIGZyb20gJ2RheWpzL3BsdWdpbi9sb2NhbGVEYXRhLmpzJ1xuaW1wb3J0IG1pbk1heCBmcm9tICdkYXlqcy9wbHVnaW4vbWluTWF4LmpzJ1xuaW1wb3J0IHRpbWV6b25lIGZyb20gJ2RheWpzL3BsdWdpbi90aW1lem9uZS5qcydcbmltcG9ydCB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yy5qcydcbmltcG9ydCB3ZWVrZGF5IGZyb20gJ2RheWpzL3BsdWdpbi93ZWVrZGF5LmpzJ1xuaW1wb3J0IHdlZWtPZlllYXIgZnJvbSAnZGF5anMvcGx1Z2luL3dlZWtPZlllYXIuanMnXG5cbi8qKlxuICogUGx1Z2luIHRoYXQgZml4ZXMgYSBkYXlqcy10aW1lem9uZSBidWcgd2hlcmUgLnN0YXJ0T2YoKSBhbmQgLmVuZE9mKCkgZHJvcFxuICogdGltZXpvbmUgaW5mbyB3aGVuIHRoZSBzeXN0ZW0ncyBsb2NhbCB0aW1lem9uZSBoYXMgYSBEU1QgdHJhbnNpdGlvbiBuZWFyXG4gKiB0aGUgdGFyZ2V0IGRhdGUuIEFmdGVyIGVhY2ggc3RhcnRPZi9lbmRPZiBjYWxsLCBpZiB0aGUgVVRDIG9mZnNldCBoYXNcbiAqIGRyaWZ0ZWQgZnJvbSB3aGF0IHRoZSB0aW1lem9uZSBleHBlY3RzLCByZS1hcHBseSB0aGUgdGltZXpvbmUgd2l0aFxuICoga2VlcExvY2FsVGltZT10cnVlIHRvIHJlc3RvcmUgdGhlIGNvcnJlY3Qgb2Zmc2V0LlxuICovXG5pbnRlcmZhY2UgRGF5anNJbnRlcm5hbCBleHRlbmRzIGRheWpzLkRheWpzIHtcblx0JHg6IHsgJHRpbWV6b25lPzogc3RyaW5nIH1cbn1cblxubGV0IGRlZmF1bHRUaW1lem9uZTogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbmNvbnN0IGZpeFRpbWV6b25lT2Zmc2V0OiBQbHVnaW5GdW5jID0gKF9vcHRpb24sIGRheWpzQ2xhc3MsIGRheWpzRmFjdG9yeSkgPT4ge1xuXHRjb25zdCBwcm90byA9IGRheWpzQ2xhc3MucHJvdG90eXBlXG5cblx0Ly8gSW50ZXJjZXB0IHNldERlZmF1bHQgdG8gdHJhY2sgdGhlIGNvbmZpZ3VyZWQgdGltZXpvbmVcblx0Y29uc3Qgb3JpZ2luYWxTZXREZWZhdWx0ID0gZGF5anNGYWN0b3J5LnR6LnNldERlZmF1bHRcblx0ZGF5anNGYWN0b3J5LnR6LnNldERlZmF1bHQgPSAodGltZXpvbmU/OiBzdHJpbmcpID0+IHtcblx0XHRkZWZhdWx0VGltZXpvbmUgPSB0aW1lem9uZVxuXHRcdHJldHVybiBvcmlnaW5hbFNldERlZmF1bHQodGltZXpvbmUpXG5cdH1cblxuXHR0eXBlIFN0YXJ0T2ZGbiA9ICh1bml0OiBEYXlqc09wVW5pdFR5cGUsIF9zdGFydE9mPzogYm9vbGVhbikgPT4gZGF5anMuRGF5anNcblx0Y29uc3Qgb3JpZ2luYWxTdGFydE9mID0gcHJvdG8uc3RhcnRPZiBhcyBTdGFydE9mRm5cblx0Y29uc3Qgb3JpZ2luYWxFbmRPZiA9IHByb3RvLmVuZE9mXG5cblx0ZnVuY3Rpb24gcmVzdG9yZVRpbWV6b25lKFxuXHRcdGluc3RhbmNlOiBkYXlqcy5EYXlqcyxcblx0XHRyZXN1bHQ6IGRheWpzLkRheWpzXG5cdCk6IGRheWpzLkRheWpzIHtcblx0XHRjb25zdCB0eiA9IChpbnN0YW5jZSBhcyBEYXlqc0ludGVybmFsKS4keD8uJHRpbWV6b25lIHx8IGRlZmF1bHRUaW1lem9uZVxuXHRcdGlmICghdHopIHJldHVybiByZXN1bHRcblxuXHRcdGNvbnN0IGV4cGVjdGVkT2Zmc2V0ID0gZGF5anNGYWN0b3J5XG5cdFx0XHQudHoocmVzdWx0LmZvcm1hdCgnWVlZWS1NTS1ERFRISDptbTpzcycpLCB0eilcblx0XHRcdC51dGNPZmZzZXQoKVxuXHRcdGlmIChyZXN1bHQudXRjT2Zmc2V0KCkgIT09IGV4cGVjdGVkT2Zmc2V0KSB7XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnR6KHR6LCB0cnVlKVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0XG5cdH1cblxuXHQvLyBkYXlqcydzIGVuZE9mIGNhbGxzIHN0YXJ0T2YodW5pdCwgZmFsc2UpIGludGVybmFsbHkg4oCUIHRoZSBzZWNvbmQgYXJnXG5cdC8vIChfc3RhcnRPZikgY29udHJvbHMgc3RhcnQtdnMtZW5kIGJlaGF2aW9yLiBXZSBtdXN0IGZvcndhcmQgaXQuXG5cdHByb3RvLnN0YXJ0T2YgPSBmdW5jdGlvbiAodW5pdDogRGF5anNPcFVuaXRUeXBlLCBfc3RhcnRPZj86IGJvb2xlYW4pIHtcblx0XHRjb25zdCByZXN1bHQgPSBvcmlnaW5hbFN0YXJ0T2YuY2FsbCh0aGlzLCB1bml0LCBfc3RhcnRPZilcblx0XHRyZXR1cm4gcmVzdG9yZVRpbWV6b25lKHRoaXMsIHJlc3VsdClcblx0fVxuXG5cdC8vIGVuZE9mIGRlbGVnYXRlcyB0byBzdGFydE9mKHVuaXQsIGZhbHNlKSwgc28gdGhlIHBhdGNoZWQgc3RhcnRPZiBoYW5kbGVzIGl0XG5cdHByb3RvLmVuZE9mID0gb3JpZ2luYWxFbmRPZlxufVxuXG4vLyBFeHRlbmQgZGF5anMgd2l0aCBwbHVnaW5zXG5kYXlqcy5leHRlbmQod2Vla2RheSlcbmRheWpzLmV4dGVuZCh3ZWVrT2ZZZWFyKVxuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQWZ0ZXIpXG5kYXlqcy5leHRlbmQoaXNTYW1lT3JCZWZvcmUpXG5kYXlqcy5leHRlbmQoaXNCZXR3ZWVuKVxuZGF5anMuZXh0ZW5kKG1pbk1heClcbmRheWpzLmV4dGVuZCh0aW1lem9uZSlcbmRheWpzLmV4dGVuZCh1dGMpXG5kYXlqcy5leHRlbmQobG9jYWxlRGF0YSlcbmRheWpzLmV4dGVuZChmaXhUaW1lem9uZU9mZnNldClcblxuLy8gQ3VzdG9tIGRheWpzIGNvbnN0cnVjdG9yIHRoYXQgYXV0b21hdGljYWxseSB1c2VzIC50eigpIGZvciBhbGwgaW5zdGFuY2VzLlxuLy8gVGhpcyBlbnN1cmVzIHRoYXQgZGF5anMoKSBjYWxscyB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZSBob25vciB0aGUgZGVmYXVsdFxuLy8gdGltZXpvbmUgc2V0IHZpYSBkYXlqcy50ei5zZXREZWZhdWx0KCkuXG5jb25zdCB0aW1lem9uZUF3YXJlRGF5anMgPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG5cdHJldHVybiAoZGF5anMgYXMgdW5rbm93biBhcyB7IHR6OiAoLi4uYTogdW5rbm93bltdKSA9PiBkYXlqcy5EYXlqcyB9KS50eihcblx0XHQuLi5hcmdzXG5cdClcbn1cblxuLy8gQXR0YWNoIGFsbCBzdGF0aWMgbWV0aG9kcyBhbmQgcHJvcGVydGllcyBmcm9tIHRoZSBvcmlnaW5hbCBkYXlqcyB0byBvdXIgd3JhcHBlci5cbi8vIFRoaXMgYWxsb3dzIHRoZSB3cmFwcGVyIHRvIGJlIHVzZWQgYXMgYSBkcm9wLWluIHJlcGxhY2VtZW50LlxuT2JqZWN0LmFzc2lnbih0aW1lem9uZUF3YXJlRGF5anMsIGRheWpzKVxuXG4vLyBFeHBvcnQgdGhlIERheWpzIHR5cGUgc2VwYXJhdGVseSBmb3IgdXNlIGFzIGEgdHlwZSBpbiBvdGhlciBmaWxlcy5cbi8vIEZpbGVzIHNob3VsZCB1c2UgJ2ltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSBcIkAvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnXCInXG5leHBvcnQgdHlwZSB7IERheWpzLCBNYW5pcHVsYXRlVHlwZSwgT3BVbml0VHlwZSB9IGZyb20gJ2RheWpzJ1xuZXhwb3J0IGRlZmF1bHQgdGltZXpvbmVBd2FyZURheWpzIGFzIHR5cGVvZiBkYXlqc1xuIiwKICAgICJpbXBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuXG5leHBvcnQgY29uc3QgR0FQX0JFVFdFRU5fRUxFTUVOVFMgPSAxIC8vIHB4IChnYXAtMSlcbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX0hFSUdIVCA9IDI0IC8vIHB4IChoLTYpXG5leHBvcnQgY29uc3QgRVZFTlRfQkFSX0hFSUdIVCA9IDI0IC8vIHB4IChoLVsyNHB4XSlcbmV4cG9ydCBjb25zdCBEQVlfTUFYX0VWRU5UU19ERUZBVUxUID0gNCAvLyBEZWZhdWx0IG1heCBldmVudHMgcGVyIGRheVxuZXhwb3J0IGNvbnN0IERJU0FCTEVEX0NFTExfQ0xBU1NOQU1FID1cblx0J2JnLXNlY29uZGFyeSB0ZXh0LW11dGVkLWZvcmVncm91bmQgcG9pbnRlci1ldmVudHMtbm9uZSdcblxuZXhwb3J0IGNvbnN0IFdFRUtfREFZU19OVU1CRVJfTUFQOiBSZWNvcmQ8V2Vla0RheXMsIG51bWJlcj4gPSB7XG5cdHN1bmRheTogMCxcblx0bW9uZGF5OiAxLFxuXHR0dWVzZGF5OiAyLFxuXHR3ZWRuZXNkYXk6IDMsXG5cdHRodXJzZGF5OiA0LFxuXHRmcmlkYXk6IDUsXG5cdHNhdHVyZGF5OiA2LFxufVxuXG5leHBvcnQgY29uc3QgREFZX05VTUJFUl9UT19XRUVLX0RBWVM6IFJlY29yZDxudW1iZXIsIFdlZWtEYXlzPiA9IHtcblx0MDogJ3N1bmRheScsXG5cdDE6ICdtb25kYXknLFxuXHQyOiAndHVlc2RheScsXG5cdDM6ICd3ZWRuZXNkYXknLFxuXHQ0OiAndGh1cnNkYXknLFxuXHQ1OiAnZnJpZGF5Jyxcblx0NjogJ3NhdHVyZGF5Jyxcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUge1xuXHREcmFnQ2FuY2VsRXZlbnQsXG5cdERyYWdFbmRFdmVudCxcblx0RHJhZ1N0YXJ0RXZlbnQsXG59IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQge1xuXHREbmRDb250ZXh0LFxuXHRNb3VzZVNlbnNvcixcblx0cG9pbnRlcldpdGhpbixcblx0VG91Y2hTZW5zb3IsXG5cdHVzZVNlbnNvcixcblx0dXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXREaWFsb2cgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgaXNSZWN1cnJpbmdFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBnZXRVcGRhdGVkRXZlbnQgfSBmcm9tICcuL2RuZC11dGlscydcbmltcG9ydCB7IEV2ZW50RHJhZ092ZXJsYXkgfSBmcm9tICcuL2V2ZW50LWRyYWctb3ZlcmxheSdcblxuaW50ZXJmYWNlIENhbGVuZGFyRG5kQ29udGV4dFByb3BzIHtcblx0Y2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5jb25zdCBDTE9TRURfRElBTE9HID0ge1xuXHRpc09wZW46IGZhbHNlLFxuXHRldmVudDogbnVsbCxcblx0dXBkYXRlczogbnVsbCxcbn0gYXMgY29uc3RcblxuZXhwb3J0IGZ1bmN0aW9uIENhbGVuZGFyRG5kQ29udGV4dCh7IGNoaWxkcmVuIH06IENhbGVuZGFyRG5kQ29udGV4dFByb3BzKSB7XG5cdGNvbnN0IGFjdGl2ZUV2ZW50UmVmID0gdXNlUmVmPENhbGVuZGFyRXZlbnQ+KG51bGwpXG5cdGNvbnN0IGRyYWdPdmVybGF5UmVmID0gdXNlUmVmPHtcblx0XHRzZXRBY3RpdmVFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbCkgPT4gdm9pZFxuXHR9PihudWxsKVxuXG5cdGNvbnN0IHsgdXBkYXRlRXZlbnQsIHVwZGF0ZVJlY3VycmluZ0V2ZW50LCBkaXNhYmxlRHJhZ0FuZERyb3AgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0XHR1cGRhdGVFdmVudDogY29udGV4dC51cGRhdGVFdmVudCxcblx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiBjb250ZXh0LnVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wOiBjb250ZXh0LmRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHR9KSlcblxuXHQvLyBTdGF0ZSBmb3IgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZ1xuXHRjb25zdCBbcmVjdXJyaW5nRGlhbG9nLCBzZXRSZWN1cnJpbmdEaWFsb2ddID0gdXNlU3RhdGU8e1xuXHRcdGlzT3BlbjogYm9vbGVhblxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4gfCBudWxsXG5cdH0+KHtcblx0XHRpc09wZW46IGZhbHNlLFxuXHRcdGV2ZW50OiBudWxsLFxuXHRcdHVwZGF0ZXM6IG51bGwsXG5cdH0pXG5cblx0Ly8gQ29uZmlndXJlIHNlbnNvcnMgd2l0aCByZWR1Y2VkIGFjdGl2YXRpb24gY29uc3RyYWludHMgZm9yIGVhc2llciBkcmFnZ2luZ1xuXHRjb25zdCBtb3VzZVNlbnNvciA9IHVzZVNlbnNvcihNb3VzZVNlbnNvciwge1xuXHRcdC8vIFJlcXVpcmUgbWluaW1hbCBtb3ZlbWVudCBiZWZvcmUgYWN0aXZhdGluZ1xuXHRcdGFjdGl2YXRpb25Db25zdHJhaW50OiB7XG5cdFx0XHRkaXN0YW5jZTogMixcblx0XHR9LFxuXHR9KVxuXG5cdGNvbnN0IHRvdWNoU2Vuc29yID0gdXNlU2Vuc29yKFRvdWNoU2Vuc29yLCB7XG5cdFx0Ly8gUmVkdWNlIGRlbGF5IGZvciB0b3VjaCBkZXZpY2VzXG5cdFx0YWN0aXZhdGlvbkNvbnN0cmFpbnQ6IHtcblx0XHRcdGRlbGF5OiAxMDAsXG5cdFx0XHR0b2xlcmFuY2U6IDUsXG5cdFx0fSxcblx0fSlcblxuXHRjb25zdCBzZW5zb3JzID0gdXNlU2Vuc29ycyhtb3VzZVNlbnNvciwgdG91Y2hTZW5zb3IpXG5cblx0Ly8gSGVscGVyIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBldmVudCB1cGRhdGVcblx0Y29uc3QgcGVyZm9ybUV2ZW50VXBkYXRlID0gKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cblx0KSA9PiB7XG5cdFx0aWYgKCFldmVudD8uaWQgfHwgIXVwZGF0ZXMgfHwgT2JqZWN0LmtleXModXBkYXRlcykubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoaXNSZWN1cnJpbmdFdmVudChldmVudCkpIHtcblx0XHRcdC8vIFJlY3VycmluZyBldmVudHM6IHByb21wdCB0aGUgdXNlciB2aWEgZGlhbG9nIGJlZm9yZSBhcHBseWluZy5cblx0XHRcdHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogdHJ1ZSwgZXZlbnQsIHVwZGF0ZXMgfSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0dXBkYXRlRXZlbnQoZXZlbnQuaWQsIHVwZGF0ZXMpXG5cdFx0fVxuXHR9XG5cblx0Ly8gSGFuZGxlIHJlY3VycmluZyBldmVudCBkaWFsb2cgY29uZmlybWF0aW9uXG5cdGNvbnN0IGhhbmRsZVJlY3VycmluZ0V2ZW50Q29uZmlybSA9IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdGlmICghcmVjdXJyaW5nRGlhbG9nLmV2ZW50IHx8ICFyZWN1cnJpbmdEaWFsb2cudXBkYXRlcykge1xuXHRcdFx0c2V0UmVjdXJyaW5nRGlhbG9nKENMT1NFRF9ESUFMT0cpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQocmVjdXJyaW5nRGlhbG9nLmV2ZW50LCByZWN1cnJpbmdEaWFsb2cudXBkYXRlcywge1xuXHRcdFx0XHRzY29wZSxcblx0XHRcdFx0ZXZlbnREYXRlOiByZWN1cnJpbmdEaWFsb2cuZXZlbnQuc3RhcnQsXG5cdFx0XHR9KVxuXHRcdH0gY2F0Y2gge1xuXHRcdFx0Ly8gU2lsZW50bHkgaGFuZGxlIGVycm9yIGFuZCByZXNldCBkaWFsb2cgc3RhdGVcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0c2V0UmVjdXJyaW5nRGlhbG9nKENMT1NFRF9ESUFMT0cpXG5cdFx0fVxuXHR9XG5cblx0Ly8gSGFuZGxlIHJlY3VycmluZyBldmVudCBkaWFsb2cgY2xvc2Vcblx0Y29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDbG9zZSA9ICgpID0+IHtcblx0XHRzZXRSZWN1cnJpbmdEaWFsb2coQ0xPU0VEX0RJQUxPRylcblx0fVxuXG5cdGNvbnN0IGhhbmRsZURyYWdTdGFydCA9IChldmVudDogRHJhZ1N0YXJ0RXZlbnQpID0+IHtcblx0XHRjb25zdCB7IGFjdGl2ZSB9ID0gZXZlbnRcblxuXHRcdC8vIFNldCB0aGUgYWN0aXZlIGV2ZW50IGJhc2VkIG9uIHRoZSBldmVudCBkYXRhXG5cdFx0aWYgKGFjdGl2ZS5kYXRhLmN1cnJlbnQ/LnR5cGUgPT09ICdjYWxlbmRhci1ldmVudCcpIHtcblx0XHRcdGRyYWdPdmVybGF5UmVmLmN1cnJlbnQ/LnNldEFjdGl2ZUV2ZW50KGFjdGl2ZS5kYXRhLmN1cnJlbnQuZXZlbnQpXG5cdFx0XHRhY3RpdmVFdmVudFJlZi5jdXJyZW50ID0gYWN0aXZlLmRhdGEuY3VycmVudC5ldmVudFxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGhhbmRsZURyYWdFbmQgPSAoZXZlbnQ6IERyYWdFbmRFdmVudCkgPT4ge1xuXHRcdGNvbnN0IHVwZGF0ZWRFdmVudCA9IGdldFVwZGF0ZWRFdmVudChldmVudCwgYWN0aXZlRXZlbnRSZWYuY3VycmVudClcblx0XHRpZiAodXBkYXRlZEV2ZW50KSB7XG5cdFx0XHRjb25zdCB7IGFjdGl2ZUV2ZW50LCB1cGRhdGVzIH0gPSB1cGRhdGVkRXZlbnRcblx0XHRcdHBlcmZvcm1FdmVudFVwZGF0ZShhY3RpdmVFdmVudCwgdXBkYXRlcylcblx0XHR9XG5cblx0XHQvLyBDbGVhciB0aGUgYWN0aXZlIGV2ZW50IHJlZmVyZW5jZVxuXHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBudWxsXG5cdFx0ZHJhZ092ZXJsYXlSZWYuY3VycmVudD8uc2V0QWN0aXZlRXZlbnQobnVsbClcblx0fVxuXG5cdGNvbnN0IGhhbmRsZURyYWdDYW5jZWwgPSAoX2V2ZW50OiBEcmFnQ2FuY2VsRXZlbnQpID0+IHtcblx0XHRhY3RpdmVFdmVudFJlZi5jdXJyZW50ID0gbnVsbFxuXHR9XG5cblx0Ly8gSWYgZHJhZyBhbmQgZHJvcCBpcyBkaXNhYmxlZCwganVzdCByZXR1cm4gY2hpbGRyZW4gd2l0aG91dCBEbmRDb250ZXh0XG5cdGlmIChkaXNhYmxlRHJhZ0FuZERyb3ApIHtcblx0XHRyZXR1cm4gY2hpbGRyZW4gYXMgUmVhY3QuUmVhY3RFbGVtZW50XG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8RG5kQ29udGV4dFxuXHRcdFx0XHRjb2xsaXNpb25EZXRlY3Rpb249e3BvaW50ZXJXaXRoaW59XG5cdFx0XHRcdG9uRHJhZ0NhbmNlbD17aGFuZGxlRHJhZ0NhbmNlbH1cblx0XHRcdFx0b25EcmFnRW5kPXtoYW5kbGVEcmFnRW5kfVxuXHRcdFx0XHRvbkRyYWdTdGFydD17aGFuZGxlRHJhZ1N0YXJ0fVxuXHRcdFx0XHRzZW5zb3JzPXtzZW5zb3JzfVxuXHRcdFx0PlxuXHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdDxFdmVudERyYWdPdmVybGF5IHJlZj17ZHJhZ092ZXJsYXlSZWZ9IC8+XG5cdFx0XHQ8L0RuZENvbnRleHQ+XG5cblx0XHRcdHsvKiBSZWN1cnJpbmcgZXZlbnQgZWRpdCBkaWFsb2cgKi99XG5cdFx0XHQ8UmVjdXJyZW5jZUVkaXREaWFsb2dcblx0XHRcdFx0ZXZlbnRUaXRsZT17cmVjdXJyaW5nRGlhbG9nLmV2ZW50Py50aXRsZSB8fCAnJ31cblx0XHRcdFx0aXNPcGVuPXtyZWN1cnJpbmdEaWFsb2cuaXNPcGVufVxuXHRcdFx0XHRvbkNsb3NlPXtoYW5kbGVSZWN1cnJpbmdFdmVudENsb3NlfVxuXHRcdFx0XHRvbkNvbmZpcm09e2hhbmRsZVJlY3VycmluZ0V2ZW50Q29uZmlybX1cblx0XHRcdFx0b3BlcmF0aW9uVHlwZT1cImVkaXRcIlxuXHRcdFx0Lz5cblx0XHQ8Lz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBTbG90IH0gZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXNsb3QnXG5pbXBvcnQgdHlwZSB7IFZhcmlhbnRQcm9wcyB9IGZyb20gJ2NsYXNzLXZhcmlhbmNlLWF1dGhvcml0eSdcbmltcG9ydCB7IGN2YSB9IGZyb20gJ2NsYXNzLXZhcmlhbmNlLWF1dGhvcml0eSdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IGJ1dHRvblZhcmlhbnRzID0gY3ZhKFxuXHRcImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1hbGwgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTQgc2hyaW5rLTAgWyZfc3ZnXTpzaHJpbmstMCBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlXCIsXG5cdHtcblx0XHR2YXJpYW50czoge1xuXHRcdFx0dmFyaWFudDoge1xuXHRcdFx0XHRkZWZhdWx0OiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBob3ZlcjpiZy1wcmltYXJ5LzkwJyxcblx0XHRcdFx0ZGVzdHJ1Y3RpdmU6XG5cdFx0XHRcdFx0J2JnLWRlc3RydWN0aXZlIHRleHQtd2hpdGUgaG92ZXI6YmctZGVzdHJ1Y3RpdmUvOTAgZm9jdXMtdmlzaWJsZTpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6Zm9jdXMtdmlzaWJsZTpyaW5nLWRlc3RydWN0aXZlLzQwIGRhcms6YmctZGVzdHJ1Y3RpdmUvNjAnLFxuXHRcdFx0XHRvdXRsaW5lOlxuXHRcdFx0XHRcdCdib3JkZXIgYmctYmFja2dyb3VuZCBzaGFkb3cteHMgaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZGFyazpiZy1pbnB1dC8zMCBkYXJrOmJvcmRlci1pbnB1dCBkYXJrOmhvdmVyOmJnLWlucHV0LzUwJyxcblx0XHRcdFx0c2Vjb25kYXJ5OlxuXHRcdFx0XHRcdCdiZy1zZWNvbmRhcnkgdGV4dC1zZWNvbmRhcnktZm9yZWdyb3VuZCBob3ZlcjpiZy1zZWNvbmRhcnkvODAnLFxuXHRcdFx0XHRnaG9zdDpcblx0XHRcdFx0XHQnaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZGFyazpob3ZlcjpiZy1hY2NlbnQvNTAnLFxuXHRcdFx0XHRsaW5rOiAndGV4dC1wcmltYXJ5IHVuZGVybGluZS1vZmZzZXQtNCBob3Zlcjp1bmRlcmxpbmUnLFxuXHRcdFx0fSxcblx0XHRcdHNpemU6IHtcblx0XHRcdFx0ZGVmYXVsdDogJ2gtOSBweC00IHB5LTIgaGFzLVs+c3ZnXTpweC0zJyxcblx0XHRcdFx0c206ICdoLTggcm91bmRlZC1tZCBnYXAtMS41IHB4LTMgaGFzLVs+c3ZnXTpweC0yLjUnLFxuXHRcdFx0XHRsZzogJ2gtMTAgcm91bmRlZC1tZCBweC02IGhhcy1bPnN2Z106cHgtNCcsXG5cdFx0XHRcdGljb246ICdzaXplLTknLFxuXHRcdFx0XHQnaWNvbi1zbSc6ICdzaXplLTgnLFxuXHRcdFx0XHQnaWNvbi1sZyc6ICdzaXplLTEwJyxcblx0XHRcdH0sXG5cdFx0fSxcblx0XHRkZWZhdWx0VmFyaWFudHM6IHtcblx0XHRcdHZhcmlhbnQ6ICdkZWZhdWx0Jyxcblx0XHRcdHNpemU6ICdkZWZhdWx0Jyxcblx0XHR9LFxuXHR9XG4pXG5cbmZ1bmN0aW9uIEJ1dHRvbih7XG5cdGNsYXNzTmFtZSxcblx0dmFyaWFudCxcblx0c2l6ZSxcblx0YXNDaGlsZCA9IGZhbHNlLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2J1dHRvbic+ICZcblx0VmFyaWFudFByb3BzPHR5cGVvZiBidXR0b25WYXJpYW50cz4gJiB7XG5cdFx0YXNDaGlsZD86IGJvb2xlYW5cblx0fSkge1xuXHRjb25zdCBDb21wID0gYXNDaGlsZCA/IFNsb3QgOiAnYnV0dG9uJ1xuXG5cdHJldHVybiAoXG5cdFx0PENvbXBcblx0XHRcdGNsYXNzTmFtZT17Y24oYnV0dG9uVmFyaWFudHMoeyB2YXJpYW50LCBzaXplLCBjbGFzc05hbWUgfSkpfVxuXHRcdFx0ZGF0YS1zbG90PVwiYnV0dG9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7IEJ1dHRvbiwgYnV0dG9uVmFyaWFudHMgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBEaWFsb2dQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWRpYWxvZydcbmltcG9ydCB7IFhJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gRGlhbG9nKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuUm9vdCBkYXRhLXNsb3Q9XCJkaWFsb2dcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ1RyaWdnZXIoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5UcmlnZ2VyPikge1xuXHRyZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5UcmlnZ2VyIGRhdGEtc2xvdD1cImRpYWxvZy10cmlnZ2VyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dQb3J0YWwoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Qb3J0YWw+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlBvcnRhbCBkYXRhLXNsb3Q9XCJkaWFsb2ctcG9ydGFsXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dDbG9zZSh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLkNsb3NlPikge1xuXHRyZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5DbG9zZSBkYXRhLXNsb3Q9XCJkaWFsb2ctY2xvc2VcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ092ZXJsYXkoe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLk92ZXJsYXk+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1ByaW1pdGl2ZS5PdmVybGF5XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZml4ZWQgaW5zZXQtMCB6LTUwIGJnLWJsYWNrLzUwJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLW92ZXJsYXlcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gRGlhbG9nQ29udGVudCh7XG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLkNvbnRlbnQ+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1BvcnRhbCBkYXRhLXNsb3Q9XCJkaWFsb2ctcG9ydGFsXCI+XG5cdFx0XHQ8RGlhbG9nT3ZlcmxheSAvPlxuXHRcdFx0PERpYWxvZ1ByaW1pdGl2ZS5Db250ZW50XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2JnLWJhY2tncm91bmQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGZpeGVkIHRvcC1bNTAlXSBsZWZ0LVs1MCVdIHotNTAgZ3JpZCB3LWZ1bGwgbWF4LXctW2NhbGMoMTAwJS0ycmVtKV0gdHJhbnNsYXRlLXgtWy01MCVdIHRyYW5zbGF0ZS15LVstNTAlXSBnYXAtNCByb3VuZGVkLWxnIGJvcmRlciBwLTYgc2hhZG93LWxnIGR1cmF0aW9uLTIwMCBzbTptYXgtdy1sZyBtYXgtaC1bOTAlXScsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy1jb250ZW50XCJcblx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0PlxuXHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdDxEaWFsb2dQcmltaXRpdmUuQ2xvc2UgY2xhc3NOYW1lPVwicmluZy1vZmZzZXQtYmFja2dyb3VuZCBmb2N1czpyaW5nLXJpbmcgZGF0YS1bc3RhdGU9b3Blbl06YmctYWNjZW50IGRhdGEtW3N0YXRlPW9wZW5dOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBhYnNvbHV0ZSB0b3AtNCByaWdodC00IHJvdW5kZWQteHMgb3BhY2l0eS03MCB0cmFuc2l0aW9uLW9wYWNpdHkgaG92ZXI6b3BhY2l0eS0xMDAgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctb2Zmc2V0LTIgZm9jdXM6b3V0bGluZS1oaWRkZW4gZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTRcIj5cblx0XHRcdFx0XHQ8WEljb24gLz5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJzci1vbmx5XCI+Q2xvc2U8L3NwYW4+XG5cdFx0XHRcdDwvRGlhbG9nUHJpbWl0aXZlLkNsb3NlPlxuXHRcdFx0PC9EaWFsb2dQcmltaXRpdmUuQ29udGVudD5cblx0XHQ8L0RpYWxvZ1BvcnRhbD5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dIZWFkZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC1jb2wgZ2FwLTIgdGV4dC1jZW50ZXIgc206dGV4dC1sZWZ0JywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy1oZWFkZXJcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gRGlhbG9nRm9vdGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBmbGV4LWNvbC1yZXZlcnNlIGdhcC0yIHNtOmZsZXgtcm93IHNtOmp1c3RpZnktZW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWZvb3RlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dUaXRsZSh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuVGl0bGU+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1ByaW1pdGl2ZS5UaXRsZVxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1sZyBsZWFkaW5nLW5vbmUgZm9udC1zZW1pYm9sZCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctdGl0bGVcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gRGlhbG9nRGVzY3JpcHRpb24oe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLkRlc2NyaXB0aW9uPikge1xuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2dQcmltaXRpdmUuRGVzY3JpcHRpb25cblx0XHRcdGNsYXNzTmFtZT17Y24oJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXNtJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy1kZXNjcmlwdGlvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQge1xuXHREaWFsb2csXG5cdERpYWxvZ0Nsb3NlLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dEZXNjcmlwdGlvbixcblx0RGlhbG9nRm9vdGVyLFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ092ZXJsYXksXG5cdERpYWxvZ1BvcnRhbCxcblx0RGlhbG9nVGl0bGUsXG5cdERpYWxvZ1RyaWdnZXIsXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldyB9IGZyb20gJ0AvdHlwZXMnXG5cbi8qKlxuICogRnVsbCBpbnRlcm5hbCBjb250ZXh0IHR5cGUgdXNlZCBieSBsaWJyYXJ5IGNvbXBvbmVudHMuXG4gKi9cbmV4cG9ydCB0eXBlIFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZSA9IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZVxuXG4vKipcbiAqIFB1YmxpY2x5IGV4cG9zZWQgY2FsZW5kYXIgY29udGV4dCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuIHtcblx0cmVhZG9ubHkgY3VycmVudERhdGU6IERheWpzXG5cdHJlYWRvbmx5IHZpZXc6IENhbGVuZGFyVmlld1xuXHRyZWFkb25seSBldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRyZWFkb25seSBpc0V2ZW50Rm9ybU9wZW46IGJvb2xlYW5cblx0cmVhZG9ubHkgc2VsZWN0ZWRFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0cmVhZG9ubHkgc2VsZWN0ZWREYXRlOiBEYXlqcyB8IG51bGxcblx0cmVhZG9ubHkgZmlyc3REYXlPZldlZWs6IG51bWJlclxuXHRyZWFkb25seSByZXNvdXJjZXM6IFJlc291cmNlW11cblx0cmVhZG9ubHkgc2V0Q3VycmVudERhdGU6IChkYXRlOiBEYXlqcykgPT4gdm9pZFxuXHRyZWFkb25seSBzZWxlY3REYXRlOiAoZGF0ZTogRGF5anMpID0+IHZvaWRcblx0cmVhZG9ubHkgc2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRyZWFkb25seSBuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHJlYWRvbmx5IHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgdG9kYXk6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgYWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRyZWFkb25seSB1cGRhdGVFdmVudDogKFxuXHRcdGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcixcblx0XHRldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHQpID0+IHZvaWRcblx0cmVhZG9ubHkgZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0cmVhZG9ubHkgb3BlbkV2ZW50Rm9ybTogKGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0cmVhZG9ubHkgY2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgZ2V0RXZlbnRzRm9yUmVzb3VyY2U6IChcblx0XHRyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXJcblx0KSA9PiBDYWxlbmRhckV2ZW50W11cblx0cmVhZG9ubHkgYnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBob29rIHRoYXQgcmV0dXJucyB0aGUgZnVsbCBjb250ZXh0LlxuICogVXNlZCBieSBpbnRlcm5hbCB2aWV3cywgaGVhZGVycywgYW5kIGdyaWQgY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KCk6IFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZVxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0PFQ+KFxuXHRzZWxlY3RvcjogKGNvbnRleHQ6IFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZSkgPT4gVFxuKTogVFxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0PFQ+KFxuXHRzZWxlY3Rvcj86IChjb250ZXh0OiBTbWFydENhbGVuZGFyQ29udGV4dFR5cGUpID0+IFRcbik6IFQgfCBTbWFydENhbGVuZGFyQ29udGV4dFR5cGUge1xuXHRjb25zdCByZXNvdXJjZUNvbnRleHQgPSB1c2VDb250ZXh0KFJlc291cmNlQ2FsZW5kYXJDb250ZXh0KVxuXHRjb25zdCByZWd1bGFyQ29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuXG5cdC8vIEluIHJlZ3VsYXIgY2FsZW5kYXJzLCByZXNvdXJjZS1zcGVjaWZpYyBmaWVsZHMgd2lsbCBiZSB1bmRlZmluZWQuXG5cdGNvbnN0IGNvbnRleHQgPSAocmVzb3VyY2VDb250ZXh0IHx8XG5cdFx0cmVndWxhckNvbnRleHQpIGFzIFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZVxuXG5cdGlmICghY29udGV4dCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdCd1c2VTbWFydENhbGVuZGFyQ29udGV4dCBtdXN0IGJlIHVzZWQgd2l0aGluIGEgQ2FsZW5kYXJQcm92aWRlciBvciBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXInXG5cdFx0KVxuXHR9XG5cblx0cmV0dXJuIHNlbGVjdG9yID8gc2VsZWN0b3IoY29udGV4dCkgOiBjb250ZXh0XG59XG5cbi8qKlxuICogUHVibGljIGhvb2sgZXhwb3J0ZWQgZm9yIGxpYnJhcnkgdXNlcnMuXG4gKiBSZXR1cm5zIGEgbGltaXRlZCBzZXQgb2YgY29tbW9ubHkgdXNlZCBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSWxhbXlDYWxlbmRhckNvbnRleHQoKTogVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4ge1xuXHRjb25zdCBjb250ZXh0ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdHJldHVybiB7XG5cdFx0Y3VycmVudERhdGU6IGNvbnRleHQuY3VycmVudERhdGUsXG5cdFx0dmlldzogY29udGV4dC52aWV3LFxuXHRcdGV2ZW50czogY29udGV4dC5ldmVudHMsXG5cdFx0aXNFdmVudEZvcm1PcGVuOiBjb250ZXh0LmlzRXZlbnRGb3JtT3Blbixcblx0XHRzZWxlY3RlZEV2ZW50OiBjb250ZXh0LnNlbGVjdGVkRXZlbnQsXG5cdFx0c2VsZWN0ZWREYXRlOiBjb250ZXh0LnNlbGVjdGVkRGF0ZSxcblx0XHRmaXJzdERheU9mV2VlazogY29udGV4dC5maXJzdERheU9mV2Vlayxcblx0XHRyZXNvdXJjZXM6IGNvbnRleHQucmVzb3VyY2VzIHx8IFtdLFxuXHRcdHNldEN1cnJlbnREYXRlOiBjb250ZXh0LnNldEN1cnJlbnREYXRlLFxuXHRcdHNlbGVjdERhdGU6IGNvbnRleHQuc2VsZWN0RGF0ZSxcblx0XHRzZXRWaWV3OiBjb250ZXh0LnNldFZpZXcsXG5cdFx0bmV4dFBlcmlvZDogY29udGV4dC5uZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2Q6IGNvbnRleHQucHJldlBlcmlvZCxcblx0XHR0b2RheTogY29udGV4dC50b2RheSxcblx0XHRhZGRFdmVudDogY29udGV4dC5hZGRFdmVudCxcblx0XHR1cGRhdGVFdmVudDogY29udGV4dC51cGRhdGVFdmVudCxcblx0XHRkZWxldGVFdmVudDogY29udGV4dC5kZWxldGVFdmVudCxcblx0XHRvcGVuRXZlbnRGb3JtOiBjb250ZXh0Lm9wZW5FdmVudEZvcm0sXG5cdFx0Y2xvc2VFdmVudEZvcm06IGNvbnRleHQuY2xvc2VFdmVudEZvcm0sXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2U6IGNvbnRleHQuZ2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0YnVzaW5lc3NIb3VyczogY29udGV4dC5idXNpbmVzc0hvdXJzLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRXZlbnRGb3JtUHJvcHMgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtJ1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNsYXNzZXNPdmVycmlkZSxcblx0Q2VsbENsaWNrSW5mbyxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdG9yRnVuY3Rpb24gfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldywgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJDb250ZXh0VHlwZSB7XG5cdGN1cnJlbnREYXRlOiBEYXlqc1xuXHR2aWV3OiBDYWxlbmRhclZpZXdcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmF3RXZlbnRzOiBDYWxlbmRhckV2ZW50W10gLy8gVW5wcm9jZXNzZWQgZXZlbnRzIGZvciBleHBvcnRcblx0aXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG5cdHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHNlbGVjdGVkRGF0ZTogRGF5anMgfCBudWxsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIgLy8gMCBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cblx0c2V0Q3VycmVudERhdGU6IChkYXRlOiBEYXlqcykgPT4gdm9pZFxuXHRzZWxlY3REYXRlOiAoZGF0ZTogRGF5anMpID0+IHZvaWRcblx0c2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0dG9kYXk6ICgpID0+IHZvaWRcblx0YWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHR1cGRhdGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnQ6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0ZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdG9wZW5FdmVudEZvcm06IChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG5cdGdldEV2ZW50c0ZvckRhdGVSYW5nZTogKHN0YXJ0RGF0ZTogRGF5anMsIGVuZERhdGU6IERheWpzKSA9PiBDYWxlbmRhckV2ZW50W11cblx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0b25FdmVudENsaWNrOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DZWxsQ2xpY2s6IChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB2b2lkXG5cdGN1cnJlbnRMb2NhbGU/OiBzdHJpbmdcblx0ZGlzYWJsZUNlbGxDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZUV2ZW50Q2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVEcmFnQW5kRHJvcD86IGJvb2xlYW5cblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0ZXZlbnRTcGFjaW5nOiBudW1iZXJcblx0ZXZlbnRIZWlnaHQ6IG51bWJlclxuXHRzdGlja3lWaWV3SGVhZGVyOiBib29sZWFuXG5cdHZpZXdIZWFkZXJDbGFzc05hbWU6IHN0cmluZ1xuXHRoZWFkZXJDb21wb25lbnQ/OiBSZWFjdC5SZWFjdE5vZGUgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjb21wb25lbnRcblx0aGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY2xhc3Ncblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0cmVuZGVyRXZlbnRGb3JtPzogKHByb3BzOiBFdmVudEZvcm1Qcm9wcykgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdC8vIFRyYW5zbGF0aW9uIGZ1bmN0aW9uXG5cdHQ6IFRyYW5zbGF0b3JGdW5jdGlvblxuXHR0aW1lRm9ybWF0OiBUaW1lRm9ybWF0XG5cdGNsYXNzZXNPdmVycmlkZT86IENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yPzogKFxuXHRcdHByb3BzOiBSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzXG5cdCkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdHJlbmRlckhvdXI/OiAoZGF0ZTogRGF5anMpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycz86IGJvb2xlYW5cblx0aGlkZGVuRGF5cz86IFNldDxudW1iZXI+XG59XG5cbi8vIENhbGVuZGFyQ29udGV4dCBpcyBrZXB0IGZvciBpbnRlcm5hbCBQcm92aWRlciB1c2FnZVxuZXhwb3J0IGNvbnN0IENhbGVuZGFyQ29udGV4dDogUmVhY3QuQ29udGV4dDxDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPiA9XG5cdGNyZWF0ZUNvbnRleHQ8Q2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuIiwKICAgICJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyQ29udGV4dFR5cGUgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB0eXBlIHsgQ2VsbENsaWNrSW5mbyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgZXh0ZW5kcyBDYWxlbmRhckNvbnRleHRUeXBlIHtcblx0Ly8gUmVzb3VyY2Utc3BlY2lmaWMgc3RhdGVcblx0cmVzb3VyY2VzOiBSZXNvdXJjZVtdXG5cdHZpc2libGVSZXNvdXJjZXM6IFNldDxzdHJpbmcgfCBudW1iZXI+XG5cblx0Ly8gUmVzb3VyY2UgdXRpbGl0aWVzXG5cdGdldEV2ZW50c0ZvclJlc291cmNlOiAocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBDYWxlbmRhckV2ZW50W11cblx0Z2V0RXZlbnRzRm9yUmVzb3VyY2VzOiAocmVzb3VyY2VJZHM6IChzdHJpbmcgfCBudW1iZXIpW10pID0+IENhbGVuZGFyRXZlbnRbXVxuXHRnZXRSZXNvdXJjZUJ5SWQ6IChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IFJlc291cmNlIHwgdW5kZWZpbmVkXG5cdGdldFZpc2libGVSZXNvdXJjZXM6ICgpID0+IFJlc291cmNlW11cblxuXHQvLyBDcm9zcy1yZXNvdXJjZSBldmVudCB1dGlsaXRpZXNcblx0aXNFdmVudENyb3NzUmVzb3VyY2U6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gYm9vbGVhblxuXHRnZXRFdmVudFJlc291cmNlSWRzOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IChzdHJpbmcgfCBudW1iZXIpW11cblxuXHQvLyBBZGRpdGlvbmFsIHByb3BlcnRpZXMgZnJvbSBjYWxlbmRhciBjb250ZXh0XG5cdG9uRXZlbnRDbGljazogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uQ2VsbENsaWNrOiAoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4gdm9pZFxuXHRyZW5kZXJSZXNvdXJjZT86IChyZXNvdXJjZTogUmVzb3VyY2UpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRvcmllbnRhdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJ1xuXHR3ZWVrVmlld0dyYW51bGFyaXR5OiAnaG91cmx5JyB8ICdkYWlseSdcbn1cblxuLy8gUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgaXMga2VwdCBmb3IgaW50ZXJuYWwgUHJvdmlkZXIgdXNhZ2VcbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dDogUmVhY3QuQ29udGV4dDxcblx0UmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkXG4+ID0gY3JlYXRlQ29udGV4dDxSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJQcm92aWRlclByb3BzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNsYXNzZXNPdmVycmlkZSxcblx0Q2VsbENsaWNrSW5mbyxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJFbmdpbmUgfSBmcm9tICdAL2hvb2tzL3VzZS1jYWxlbmRhci1lbmdpbmUnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBFVkVOVF9CQVJfSEVJR0hUIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnXG5cbmNvbnN0IGdldEV2ZW50UmVzb3VyY2VJZHMgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0+IHtcblx0aWYgKGV2ZW50LnJlc291cmNlSWRzKSB7XG5cdFx0cmV0dXJuIGV2ZW50LnJlc291cmNlSWRzXG5cdH1cblx0aWYgKGV2ZW50LnJlc291cmNlSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBbZXZlbnQucmVzb3VyY2VJZF1cblx0fVxuXHRyZXR1cm4gW11cbn1cblxuaW50ZXJmYWNlIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlclByb3BzIGV4dGVuZHMgQ2FsZW5kYXJQcm92aWRlclByb3BzIHtcblx0ZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG5cdHJlc291cmNlcz86IFJlc291cmNlW11cblx0cmVuZGVyUmVzb3VyY2U/OiAocmVzb3VyY2U6IFJlc291cmNlKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlc092ZXJyaWRlPzogQ2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGVcblx0b3JpZW50YXRpb24/OiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnXG5cdHdlZWtWaWV3R3JhbnVsYXJpdHk/OiAnaG91cmx5JyB8ICdkYWlseSdcblx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3I/OiAoXG5cdFx0cHJvcHM6IFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHNcblx0KSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0cmVuZGVySG91cj86IChkYXRlOiBEYXlqcykgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzPzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxcblx0UmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyUHJvcHNcbj4gPSAoe1xuXHRjaGlsZHJlbixcblx0ZXZlbnRzID0gW10sXG5cdHJlc291cmNlcyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9IDAsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdHJlbmRlckV2ZW50LFxuXHRvbkV2ZW50Q2xpY2ssXG5cdG9uQ2VsbENsaWNrLFxuXHRvblZpZXdDaGFuZ2UsXG5cdG9uRXZlbnRBZGQsXG5cdG9uRXZlbnRVcGRhdGUsXG5cdG9uRXZlbnREZWxldGUsXG5cdG9uRGF0ZUNoYW5nZSxcblx0bG9jYWxlLFxuXHR0aW1lem9uZSxcblx0ZGlzYWJsZUNlbGxDbGljayxcblx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0ZGF5TWF4RXZlbnRzLFxuXHRldmVudFNwYWNpbmcgPSAxLFxuXHRldmVudEhlaWdodCA9IEVWRU5UX0JBUl9IRUlHSFQsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdGhlYWRlckNvbXBvbmVudCxcblx0aGVhZGVyQ2xhc3NOYW1lLFxuXHR0cmFuc2xhdGlvbnMsXG5cdHRyYW5zbGF0b3IsXG5cdHJlbmRlclJlc291cmNlLFxuXHRyZW5kZXJFdmVudEZvcm0sXG5cdGJ1c2luZXNzSG91cnMsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGNsYXNzZXNPdmVycmlkZSxcblx0b3JpZW50YXRpb24gPSAnaG9yaXpvbnRhbCcsXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRyZW5kZXJIb3VyLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3VycyA9IGZhbHNlLFxuXHRoaWRkZW5EYXlzLFxuXHR3ZWVrVmlld0dyYW51bGFyaXR5ID0gJ2hvdXJseScsXG59KSA9PiB7XG5cdC8vIFJlc291cmNlLXNwZWNpZmljIHN0YXRlXG5cdGNvbnN0IFtjdXJyZW50UmVzb3VyY2VzXSA9IHVzZVN0YXRlPFJlc291cmNlW10+KHJlc291cmNlcylcblx0Y29uc3QgW3Zpc2libGVSZXNvdXJjZXMsIHNldFZpc2libGVSZXNvdXJjZXNdID0gdXNlU3RhdGU8XG5cdFx0U2V0PHN0cmluZyB8IG51bWJlcj5cblx0PihuZXcgU2V0KHJlc291cmNlcy5tYXAoKHIpID0+IHIuaWQpKSlcblxuXHQvLyBVc2UgdGhlIGNhbGVuZGFyIGVuZ2luZVxuXHRjb25zdCBjYWxlbmRhckVuZ2luZSA9IHVzZUNhbGVuZGFyRW5naW5lKHtcblx0XHRldmVudHMsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0aW5pdGlhbFZpZXcsXG5cdFx0aW5pdGlhbERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRvbkV2ZW50QWRkLFxuXHRcdG9uRXZlbnRVcGRhdGUsXG5cdFx0b25FdmVudERlbGV0ZSxcblx0XHRvbkRhdGVDaGFuZ2UsXG5cdFx0b25WaWV3Q2hhbmdlOiBvblZpZXdDaGFuZ2UsXG5cdFx0bG9jYWxlLFxuXHRcdHRpbWV6b25lLFxuXHRcdHRyYW5zbGF0aW9ucyxcblx0XHR0cmFuc2xhdG9yLFxuXHR9KVxuXG5cdC8vIFJlc291cmNlIHZpc2liaWxpdHkg4oCUIGFsbCBtdXRhdGlvbnMgZ28gdGhyb3VnaCBhIHNpbmdsZSB1cGRhdGVyLlxuXHRjb25zdCBtdXRhdGVWaXNpYmlsaXR5ID0gdXNlQ2FsbGJhY2soXG5cdFx0KG9wOiAnc2hvdycgfCAnaGlkZScgfCAndG9nZ2xlJywgaWQ6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuXHRcdFx0c2V0VmlzaWJsZVJlc291cmNlcygocHJldikgPT4ge1xuXHRcdFx0XHRjb25zdCBuZXh0ID0gbmV3IFNldChwcmV2KVxuXHRcdFx0XHRpZiAob3AgPT09ICdzaG93JyB8fCAob3AgPT09ICd0b2dnbGUnICYmICFuZXh0LmhhcyhpZCkpKSBuZXh0LmFkZChpZClcblx0XHRcdFx0ZWxzZSBuZXh0LmRlbGV0ZShpZClcblx0XHRcdFx0cmV0dXJuIG5leHRcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbXVxuXHQpXG5cdGNvbnN0IHNob3dSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChpZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBtdXRhdGVWaXNpYmlsaXR5KCdzaG93JywgaWQpLFxuXHRcdFttdXRhdGVWaXNpYmlsaXR5XVxuXHQpXG5cdGNvbnN0IGhpZGVSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChpZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBtdXRhdGVWaXNpYmlsaXR5KCdoaWRlJywgaWQpLFxuXHRcdFttdXRhdGVWaXNpYmlsaXR5XVxuXHQpXG5cdGNvbnN0IHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSA9IHVzZUNhbGxiYWNrKFxuXHRcdChpZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBtdXRhdGVWaXNpYmlsaXR5KCd0b2dnbGUnLCBpZCksXG5cdFx0W211dGF0ZVZpc2liaWxpdHldXG5cdClcblx0Y29uc3Qgc2hvd0FsbFJlc291cmNlcyA9IHVzZUNhbGxiYWNrKFxuXHRcdCgpID0+IHNldFZpc2libGVSZXNvdXJjZXMobmV3IFNldChjdXJyZW50UmVzb3VyY2VzLm1hcCgocikgPT4gci5pZCkpKSxcblx0XHRbY3VycmVudFJlc291cmNlc11cblx0KVxuXHRjb25zdCBoaWRlQWxsUmVzb3VyY2VzID0gdXNlQ2FsbGJhY2soKCkgPT4gc2V0VmlzaWJsZVJlc291cmNlcyhuZXcgU2V0KCkpLCBbXSlcblxuXHQvLyBFdmVudCB1dGlsaXRpZXMg4oCUIGJvdGggZmlsdGVycyBnbyB0aHJvdWdoIGdldEV2ZW50UmVzb3VyY2VJZHMgc28gc2luZ2xlXG5cdC8vIGFuZCBtdWx0aS1yZXNvdXJjZSBldmVudHMgYXJlIGhhbmRsZWQgdW5pZm9ybWx5LlxuXHRjb25zdCBnZXRFdmVudHNGb3JSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBDYWxlbmRhckV2ZW50W10gPT5cblx0XHRcdGNhbGVuZGFyRW5naW5lLmV2ZW50cy5maWx0ZXIoKGUpID0+XG5cdFx0XHRcdGdldEV2ZW50UmVzb3VyY2VJZHMoZSkuaW5jbHVkZXMocmVzb3VyY2VJZClcblx0XHRcdCksXG5cdFx0W2NhbGVuZGFyRW5naW5lLmV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldEV2ZW50c0ZvclJlc291cmNlcyA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkczogKHN0cmluZyB8IG51bWJlcilbXSk6IENhbGVuZGFyRXZlbnRbXSA9PlxuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuZXZlbnRzLmZpbHRlcigoZSkgPT5cblx0XHRcdFx0Z2V0RXZlbnRSZXNvdXJjZUlkcyhlKS5zb21lKChpZCkgPT4gcmVzb3VyY2VJZHMuaW5jbHVkZXMoaWQpKVxuXHRcdFx0KSxcblx0XHRbY2FsZW5kYXJFbmdpbmUuZXZlbnRzXVxuXHQpXG5cblx0Y29uc3QgZ2V0UmVzb3VyY2VCeUlkID0gdXNlQ2FsbGJhY2soXG5cdFx0KHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcik6IFJlc291cmNlIHwgdW5kZWZpbmVkID0+IHtcblx0XHRcdHJldHVybiBjdXJyZW50UmVzb3VyY2VzLmZpbmQoKHJlc291cmNlKSA9PiByZXNvdXJjZS5pZCA9PT0gcmVzb3VyY2VJZClcblx0XHR9LFxuXHRcdFtjdXJyZW50UmVzb3VyY2VzXVxuXHQpXG5cblx0Y29uc3QgZ2V0VmlzaWJsZVJlc291cmNlcyA9IHVzZUNhbGxiYWNrKCgpOiBSZXNvdXJjZVtdID0+IHtcblx0XHRyZXR1cm4gY3VycmVudFJlc291cmNlcy5maWx0ZXIoKHJlc291cmNlKSA9PlxuXHRcdFx0dmlzaWJsZVJlc291cmNlcy5oYXMocmVzb3VyY2UuaWQpXG5cdFx0KVxuXHR9LCBbY3VycmVudFJlc291cmNlcywgdmlzaWJsZVJlc291cmNlc10pXG5cblx0Ly8gQ3Jvc3MtcmVzb3VyY2UgZXZlbnQgdXRpbGl0aWVzXG5cdGNvbnN0IGlzRXZlbnRDcm9zc1Jlc291cmNlID0gdXNlQ2FsbGJhY2soKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG5cdFx0cmV0dXJuIEJvb2xlYW4oZXZlbnQucmVzb3VyY2VJZHMgJiYgZXZlbnQucmVzb3VyY2VJZHMubGVuZ3RoID4gMSlcblx0fSwgW10pXG5cblx0Ly8gQ3VzdG9tIGhhbmRsZXJzXG5cdGNvbnN0IGVkaXRFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0U2VsZWN0ZWRFdmVudChldmVudClcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Y29uc3QgaGFuZGxlRXZlbnRDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0aWYgKGRpc2FibGVFdmVudENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdFx0aWYgKG9uRXZlbnRDbGljaykge1xuXHRcdFx0XHRvbkV2ZW50Q2xpY2soZXZlbnQpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlZGl0RXZlbnQoZXZlbnQpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbZGlzYWJsZUV2ZW50Q2xpY2ssIG9uRXZlbnRDbGljaywgZWRpdEV2ZW50XVxuXHQpXG5cblx0Y29uc3QgaGFuZGxlRGF0ZUNsaWNrID0gdXNlQ2FsbGJhY2soXG5cdFx0KGluZm86IENlbGxDbGlja0luZm8pID0+IHtcblx0XHRcdGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAob25DZWxsQ2xpY2spIHtcblx0XHRcdFx0b25DZWxsQ2xpY2soaW5mbylcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IG5ld0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0XHRcdHRpdGxlOiBjYWxlbmRhckVuZ2luZS50KCduZXdFdmVudCcpLFxuXHRcdFx0XHRcdHN0YXJ0OiBpbmZvLnN0YXJ0LFxuXHRcdFx0XHRcdGVuZDogaW5mby5lbmQsXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246ICcnLFxuXHRcdFx0XHRcdGFsbERheTogZmFsc2UsXG5cdFx0XHRcdH0gYXMgQ2FsZW5kYXJFdmVudFxuXG5cdFx0XHRcdGlmIChpbmZvLnJlc291cmNlSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdG5ld0V2ZW50LnJlc291cmNlSWQgPSBpbmZvLnJlc291cmNlSWRcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRXZlbnQobmV3RXZlbnQpXG5cdFx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRGF0ZShpbmZvLnN0YXJ0KVxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtvbkNlbGxDbGljaywgZGlzYWJsZUNlbGxDbGljaywgY2FsZW5kYXJFbmdpbmVdXG5cdClcblxuXHQvLyBDcmVhdGUgdGhlIGNvbnRleHQgdmFsdWVcblx0Y29uc3QgY29udGV4dFZhbHVlID0gdXNlTWVtbyhcblx0XHQoKSA9PiAoe1xuXHRcdFx0Li4uY2FsZW5kYXJFbmdpbmUsXG5cdFx0XHQvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuXHRcdFx0cmVzb3VyY2VzOiBjdXJyZW50UmVzb3VyY2VzLFxuXHRcdFx0dmlzaWJsZVJlc291cmNlcyxcblx0XHRcdHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSxcblx0XHRcdHNob3dSZXNvdXJjZSxcblx0XHRcdGhpZGVSZXNvdXJjZSxcblx0XHRcdHNob3dBbGxSZXNvdXJjZXMsXG5cdFx0XHRoaWRlQWxsUmVzb3VyY2VzLFxuXHRcdFx0Ly8gUmVzb3VyY2UgdXRpbGl0aWVzXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlcyxcblx0XHRcdGdldFJlc291cmNlQnlJZCxcblx0XHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdFx0XHRpc0V2ZW50Q3Jvc3NSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50UmVzb3VyY2VJZHMsXG5cdFx0XHQvLyBPdmVycmlkZSBoYW5kbGVyc1xuXHRcdFx0b25FdmVudENsaWNrOiBoYW5kbGVFdmVudENsaWNrLFxuXHRcdFx0b25DZWxsQ2xpY2s6IGhhbmRsZURhdGVDbGljayxcblx0XHRcdC8vIFBhc3MtdGhyb3VnaCBwcm9wc1xuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRyZW5kZXJSZXNvdXJjZSxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0ZXZlbnRIZWlnaHQsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0b3JpZW50YXRpb24sXG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdHJlbmRlckhvdXIsXG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdGhpZGRlbkRheXMsXG5cdFx0XHR3ZWVrVmlld0dyYW51bGFyaXR5LFxuXHRcdH0pLFxuXHRcdFtcblx0XHRcdGNhbGVuZGFyRW5naW5lLFxuXHRcdFx0Y3VycmVudFJlc291cmNlcyxcblx0XHRcdHZpc2libGVSZXNvdXJjZXMsXG5cdFx0XHR0b2dnbGVSZXNvdXJjZVZpc2liaWxpdHksXG5cdFx0XHRzaG93UmVzb3VyY2UsXG5cdFx0XHRoaWRlUmVzb3VyY2UsXG5cdFx0XHRzaG93QWxsUmVzb3VyY2VzLFxuXHRcdFx0aGlkZUFsbFJlc291cmNlcyxcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2VzLFxuXHRcdFx0Z2V0UmVzb3VyY2VCeUlkLFxuXHRcdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblx0XHRcdGlzRXZlbnRDcm9zc1Jlc291cmNlLFxuXHRcdFx0aGFuZGxlRXZlbnRDbGljayxcblx0XHRcdGhhbmRsZURhdGVDbGljayxcblx0XHRcdHJlbmRlckV2ZW50LFxuXHRcdFx0cmVuZGVyUmVzb3VyY2UsXG5cdFx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdFx0XHRsb2NhbGUsXG5cdFx0XHR0aW1lem9uZSxcblx0XHRcdGRpc2FibGVDZWxsQ2xpY2ssXG5cdFx0XHRkaXNhYmxlRXZlbnRDbGljayxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdGV2ZW50SGVpZ2h0LFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdG9yaWVudGF0aW9uLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRyZW5kZXJIb3VyLFxuXHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRoaWRkZW5EYXlzLFxuXHRcdFx0d2Vla1ZpZXdHcmFudWxhcml0eSxcblx0XHRdXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUNhbGVuZGFyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L1Jlc291cmNlQ2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHtcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQgYXMgZGVsZXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxuXHRnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyxcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQgYXMgdXBkYXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxufSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuaW1wb3J0IGRheWpzLCB7XG5cdHR5cGUgRGF5anMsXG5cdHR5cGUgTWFuaXB1bGF0ZVR5cGUsXG59IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZGVmYXVsdFRyYW5zbGF0aW9ucyB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy9kZWZhdWx0J1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnMsIFRyYW5zbGF0b3JGdW5jdGlvbiB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmltcG9ydCB7IGdldE1vbnRoV2Vla3MsIGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IGV2ZW50T3ZlcmxhcHNSYW5nZSB9IGZyb20gJ0AvbGliL3V0aWxzL2V2ZW50LXV0aWxzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhclZpZXcgfSBmcm9tICdAL3R5cGVzJ1xuaW1wb3J0IHsgREFZX01BWF9FVkVOVFNfREVGQVVMVCB9IGZyb20gJy4uL2xpYi9jb25zdGFudHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJFbmdpbmVDb25maWcge1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG5cdGluaXRpYWxWaWV3PzogQ2FsZW5kYXJWaWV3XG5cdGluaXRpYWxEYXRlPzogRGF5anNcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0b25FdmVudEFkZD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50VXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRXZlbnREZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25EYXRlQ2hhbmdlPzogKGRhdGU6IERheWpzLCByYW5nZTogeyBzdGFydDogRGF5anM7IGVuZDogRGF5anMgfSkgPT4gdm9pZFxuXHRvblZpZXdDaGFuZ2U/OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdGxvY2FsZT86IHN0cmluZ1xuXHR0aW1lem9uZT86IHN0cmluZ1xuXHR0cmFuc2xhdGlvbnM/OiBUcmFuc2xhdGlvbnNcblx0dHJhbnNsYXRvcj86IFRyYW5zbGF0b3JGdW5jdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyRW5naW5lUmV0dXJuIHtcblx0Y3VycmVudERhdGU6IERheWpzXG5cdHZpZXc6IENhbGVuZGFyVmlld1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRyYXdFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRpc0V2ZW50Rm9ybU9wZW46IGJvb2xlYW5cblx0c2VsZWN0ZWRFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0c2VsZWN0ZWREYXRlOiBEYXlqcyB8IG51bGxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuXHRkYXlNYXhFdmVudHM6IG51bWJlclxuXHRjdXJyZW50TG9jYWxlOiBzdHJpbmdcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0c2V0Q3VycmVudERhdGU6IChkYXRlOiBEYXlqcykgPT4gdm9pZFxuXHRzZWxlY3REYXRlOiAoZGF0ZTogRGF5anMpID0+IHZvaWRcblx0c2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0dG9kYXk6ICgpID0+IHZvaWRcblx0YWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHR1cGRhdGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnQ6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0ZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdG9wZW5FdmVudEZvcm06IChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG5cdHNldFNlbGVjdGVkRXZlbnQ6IFJlYWN0LkRpc3BhdGNoPFJlYWN0LlNldFN0YXRlQWN0aW9uPENhbGVuZGFyRXZlbnQgfCBudWxsPj5cblx0c2V0SXNFdmVudEZvcm1PcGVuOiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxib29sZWFuPj5cblx0c2V0U2VsZWN0ZWREYXRlOiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxEYXlqcyB8IG51bGw+PlxuXHRnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IChzdGFydERhdGU6IERheWpzLCBlbmREYXRlOiBEYXlqcykgPT4gQ2FsZW5kYXJFdmVudFtdXG5cdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHR0OiBUcmFuc2xhdG9yRnVuY3Rpb25cbn1cblxuY29uc3QgVklFV19VTklUUzogUmVjb3JkPENhbGVuZGFyVmlldywgTWFuaXB1bGF0ZVR5cGU+ID0ge1xuXHRkYXk6ICdkYXknLFxuXHR3ZWVrOiAnd2VlaycsXG5cdG1vbnRoOiAnbW9udGgnLFxuXHR5ZWFyOiAneWVhcicsXG59XG5cbmV4cG9ydCBjb25zdCBjYWxjdWxhdGVWaWV3UmFuZ2UgPSAoXG5cdGRhdGU6IERheWpzLFxuXHR2aWV3OiBDYWxlbmRhclZpZXcsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbik6IHsgc3RhcnQ6IERheWpzOyBlbmQ6IERheWpzIH0gPT4ge1xuXHRpZiAodmlldyA9PT0gJ2RheScgfHwgdmlldyA9PT0gJ3llYXInKSB7XG5cdFx0cmV0dXJuIHsgc3RhcnQ6IGRhdGUuc3RhcnRPZih2aWV3KSwgZW5kOiBkYXRlLmVuZE9mKHZpZXcpIH1cblx0fVxuXHRpZiAodmlldyA9PT0gJ3dlZWsnKSB7XG5cdFx0Y29uc3QgZGF5cyA9IGdldFdlZWtEYXlzKGRhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdHJldHVybiB7IHN0YXJ0OiBkYXlzWzBdLnN0YXJ0T2YoJ2RheScpLCBlbmQ6IGRheXNbNl0uZW5kT2YoJ2RheScpIH1cblx0fVxuXHQvLyBtb250aCB2aWV3OiA2IHdlZWtzIMOXIDcgZGF5c1xuXHRjb25zdCB3ZWVrcyA9IGdldE1vbnRoV2Vla3MoZGF0ZSwgZmlyc3REYXlPZldlZWspXG5cdHJldHVybiB7IHN0YXJ0OiB3ZWVrc1swXVswXS5zdGFydE9mKCdkYXknKSwgZW5kOiB3ZWVrc1s1XVs2XS5lbmRPZignZGF5JykgfVxufVxuXG5leHBvcnQgY29uc3QgdXNlQ2FsZW5kYXJFbmdpbmUgPSAoXG5cdGNvbmZpZzogQ2FsZW5kYXJFbmdpbmVDb25maWdcbik6IENhbGVuZGFyRW5naW5lUmV0dXJuID0+IHtcblx0Y29uc3Qge1xuXHRcdGV2ZW50cyA9IFtdLFxuXHRcdGZpcnN0RGF5T2ZXZWVrID0gMCxcblx0XHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdFx0aW5pdGlhbERhdGUgPSBkYXlqcygpLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0b25FdmVudEFkZCxcblx0XHRvbkV2ZW50VXBkYXRlLFxuXHRcdG9uRXZlbnREZWxldGUsXG5cdFx0b25EYXRlQ2hhbmdlLFxuXHRcdG9uVmlld0NoYW5nZSxcblx0XHRsb2NhbGUsXG5cdFx0dGltZXpvbmUsXG5cdFx0dHJhbnNsYXRpb25zLFxuXHRcdHRyYW5zbGF0b3IsXG5cdH0gPSBjb25maWdcblxuXHRjb25zdCBbY3VycmVudERhdGUsIHNldEN1cnJlbnREYXRlXSA9IHVzZVN0YXRlPERheWpzPihcblx0XHRkYXlqcy5pc0RheWpzKGluaXRpYWxEYXRlKSA/IGluaXRpYWxEYXRlIDogZGF5anMoaW5pdGlhbERhdGUpXG5cdClcblx0Y29uc3QgW3ZpZXcsIHNldFZpZXddID0gdXNlU3RhdGU8Q2FsZW5kYXJWaWV3Pihpbml0aWFsVmlldylcblx0Y29uc3QgW2N1cnJlbnRFdmVudHMsIHNldEN1cnJlbnRFdmVudHNdID0gdXNlU3RhdGU8Q2FsZW5kYXJFdmVudFtdPihldmVudHMpXG5cdGNvbnN0IFtpc0V2ZW50Rm9ybU9wZW4sIHNldElzRXZlbnRGb3JtT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkRXZlbnQsIHNldFNlbGVjdGVkRXZlbnRdID0gdXNlU3RhdGU8Q2FsZW5kYXJFdmVudCB8IG51bGw+KG51bGwpXG5cdGNvbnN0IFtzZWxlY3RlZERhdGUsIHNldFNlbGVjdGVkRGF0ZV0gPSB1c2VTdGF0ZTxEYXlqcyB8IG51bGw+KG51bGwpXG5cdGNvbnN0IFtjdXJyZW50TG9jYWxlLCBzZXRDdXJyZW50TG9jYWxlXSA9IHVzZVN0YXRlKGxvY2FsZSB8fCAnZW4nKVxuXHRjb25zdCBsYXN0RXZlbnRzUHJvcCA9IHVzZVJlZihldmVudHMpXG5cdGNvbnN0IGxhc3RUaW1lem9uZVByb3AgPSB1c2VSZWYodGltZXpvbmUpXG5cdGNvbnN0IGxhc3RMb2NhbGVQcm9wID0gdXNlUmVmKGxvY2FsZSlcblxuXHRjb25zdCB0OiBUcmFuc2xhdG9yRnVuY3Rpb24gPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAodHJhbnNsYXRvcikgcmV0dXJuIHRyYW5zbGF0b3Jcblx0XHRjb25zdCBkaWN0ID0gdHJhbnNsYXRpb25zIHx8IGRlZmF1bHRUcmFuc2xhdGlvbnNcblx0XHRyZXR1cm4gKGtleTogc3RyaW5nKSA9PiBkaWN0W2tleSBhcyBrZXlvZiBUcmFuc2xhdGlvbnNdIHx8IGtleVxuXHR9LCBbdHJhbnNsYXRpb25zLCB0cmFuc2xhdG9yXSlcblxuXHRjb25zdCBnZXRFdmVudHNGb3JEYXRlUmFuZ2UgPSB1c2VDYWxsYmFjayhcblx0XHQoc3RhcnREYXRlOiBEYXlqcywgZW5kRGF0ZTogRGF5anMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRcdFx0Y29uc3QgYWxsRXZlbnRzOiBDYWxlbmRhckV2ZW50W10gPSBbXVxuXG5cdFx0XHRmb3IgKGNvbnN0IGV2ZW50IG9mIGN1cnJlbnRFdmVudHMpIHtcblx0XHRcdFx0aWYgKGV2ZW50LnJydWxlKSB7XG5cdFx0XHRcdFx0YWxsRXZlbnRzLnB1c2goXG5cdFx0XHRcdFx0XHQuLi5nZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyh7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdFx0XHRzdGFydERhdGUsXG5cdFx0XHRcdFx0XHRcdGVuZERhdGUsXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSBlbHNlIGlmIChldmVudE92ZXJsYXBzUmFuZ2UoZXZlbnQsIHN0YXJ0RGF0ZSwgZW5kRGF0ZSkpIHtcblx0XHRcdFx0XHRhbGxFdmVudHMucHVzaChldmVudClcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFsbEV2ZW50c1xuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHNdXG5cdClcblxuXHRjb25zdCBnZXRDdXJyZW50Vmlld1JhbmdlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdHJldHVybiBjYWxjdWxhdGVWaWV3UmFuZ2UoY3VycmVudERhdGUsIHZpZXcsIGZpcnN0RGF5T2ZXZWVrKVxuXHR9LCBbY3VycmVudERhdGUsIHZpZXcsIGZpcnN0RGF5T2ZXZWVrXSlcblxuXHRjb25zdCBwcm9jZXNzZWRFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IGdldEN1cnJlbnRWaWV3UmFuZ2UoKVxuXHRcdHJldHVybiBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uoc3RhcnQsIGVuZClcblx0fSwgW2dldEV2ZW50c0ZvckRhdGVSYW5nZSwgZ2V0Q3VycmVudFZpZXdSYW5nZV0pXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoZXZlbnRzICE9PSBsYXN0RXZlbnRzUHJvcC5jdXJyZW50KSB7XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKGV2ZW50cylcblx0XHRcdGxhc3RFdmVudHNQcm9wLmN1cnJlbnQgPSBldmVudHNcblx0XHR9XG5cdH0sIFtldmVudHNdKVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGxvY2FsZSAmJiBsb2NhbGUgIT09IGxhc3RMb2NhbGVQcm9wLmN1cnJlbnQpIHtcblx0XHRcdHNldEN1cnJlbnRMb2NhbGUobG9jYWxlKVxuXHRcdFx0ZGF5anMubG9jYWxlKGxvY2FsZSlcblx0XHRcdHNldEN1cnJlbnREYXRlKChwcmV2RGF0ZSkgPT4gcHJldkRhdGUubG9jYWxlKGxvY2FsZSkpXG5cdFx0XHRsYXN0TG9jYWxlUHJvcC5jdXJyZW50ID0gbG9jYWxlXG5cdFx0fVxuXHR9LCBbbG9jYWxlXSlcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmICh0aW1lem9uZSAmJiB0aW1lem9uZSAhPT0gbGFzdFRpbWV6b25lUHJvcC5jdXJyZW50KSB7XG5cdFx0XHRkYXlqcy50ei5zZXREZWZhdWx0KHRpbWV6b25lKVxuXHRcdFx0c2V0Q3VycmVudERhdGUoKHByZXYpID0+IHByZXYudHoodGltZXpvbmUpKVxuXHRcdFx0c2V0Q3VycmVudEV2ZW50cygocHJldikgPT5cblx0XHRcdFx0cHJldi5tYXAoKGUpID0+ICh7XG5cdFx0XHRcdFx0Li4uZSxcblx0XHRcdFx0XHRzdGFydDogZS5zdGFydC50eih0aW1lem9uZSksXG5cdFx0XHRcdFx0ZW5kOiBlLmVuZC50eih0aW1lem9uZSksXG5cdFx0XHRcdH0pKVxuXHRcdFx0KVxuXHRcdFx0bGFzdFRpbWV6b25lUHJvcC5jdXJyZW50ID0gdGltZXpvbmVcblx0XHR9XG5cdH0sIFt0aW1lem9uZV0pXG5cblx0Y29uc3QgdXBkYXRlRGF0ZUFuZE5vdGlmeSA9IHVzZUNhbGxiYWNrKFxuXHRcdChuZXdEYXRlOiBEYXlqcykgPT4ge1xuXHRcdFx0c2V0Q3VycmVudERhdGUobmV3RGF0ZSlcblx0XHRcdGNvbnN0IHJhbmdlID0gY2FsY3VsYXRlVmlld1JhbmdlKG5ld0RhdGUsIHZpZXcsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdFx0b25EYXRlQ2hhbmdlPy4obmV3RGF0ZSwgcmFuZ2UpXG5cdFx0fSxcblx0XHRbb25EYXRlQ2hhbmdlLCB2aWV3LCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IHNlbGVjdERhdGUgPSB1cGRhdGVEYXRlQW5kTm90aWZ5XG5cblx0Y29uc3QgbmF2aWdhdGVQZXJpb2QgPSB1c2VDYWxsYmFjayhcblx0XHQoZGlyZWN0aW9uOiAxIHwgLTEpID0+IHtcblx0XHRcdGNvbnN0IG5ld0RhdGUgPVxuXHRcdFx0XHRkaXJlY3Rpb24gPT09IDFcblx0XHRcdFx0XHQ/IGN1cnJlbnREYXRlLmFkZCgxLCBWSUVXX1VOSVRTW3ZpZXddKVxuXHRcdFx0XHRcdDogY3VycmVudERhdGUuc3VidHJhY3QoMSwgVklFV19VTklUU1t2aWV3XSlcblx0XHRcdHVwZGF0ZURhdGVBbmROb3RpZnkobmV3RGF0ZSlcblx0XHR9LFxuXHRcdFtjdXJyZW50RGF0ZSwgdmlldywgdXBkYXRlRGF0ZUFuZE5vdGlmeV1cblx0KVxuXG5cdGNvbnN0IG5leHRQZXJpb2QgPSB1c2VDYWxsYmFjaygoKSA9PiBuYXZpZ2F0ZVBlcmlvZCgxKSwgW25hdmlnYXRlUGVyaW9kXSlcblx0Y29uc3QgcHJldlBlcmlvZCA9IHVzZUNhbGxiYWNrKCgpID0+IG5hdmlnYXRlUGVyaW9kKC0xKSwgW25hdmlnYXRlUGVyaW9kXSlcblxuXHRjb25zdCB0b2RheSA9IHVzZUNhbGxiYWNrKFxuXHRcdCgpID0+IHVwZGF0ZURhdGVBbmROb3RpZnkoZGF5anMoKSksXG5cdFx0W3VwZGF0ZURhdGVBbmROb3RpZnldXG5cdClcblxuXHRjb25zdCBhZGRFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0c2V0Q3VycmVudEV2ZW50cygocHJldikgPT4gWy4uLnByZXYsIGV2ZW50XSlcblx0XHRcdG9uRXZlbnRBZGQ/LihldmVudClcblx0XHR9LFxuXHRcdFtvbkV2ZW50QWRkXVxuXHQpXG5cblx0Y29uc3QgdXBkYXRlRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLCB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG5cdFx0XHRjb25zdCBldmVudFRvVXBkYXRlID0gY3VycmVudEV2ZW50cy5maW5kKChldmVudCkgPT4gZXZlbnQuaWQgPT09IGV2ZW50SWQpXG5cdFx0XHRpZiAoIWV2ZW50VG9VcGRhdGUpIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG5ld0V2ZW50ID0geyAuLi5ldmVudFRvVXBkYXRlLCAuLi51cGRhdGVzIH1cblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+XG5cdFx0XHRcdHByZXYubWFwKChldmVudCkgPT4gKGV2ZW50LmlkID09PSBldmVudElkID8gbmV3RXZlbnQgOiBldmVudCkpXG5cdFx0XHQpXG5cdFx0XHRvbkV2ZW50VXBkYXRlPy4obmV3RXZlbnQpXG5cdFx0fSxcblx0XHRbY3VycmVudEV2ZW50cywgb25FdmVudFVwZGF0ZV1cblx0KVxuXG5cdGNvbnN0IHVwZGF0ZVJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KFxuXHRcdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdFx0KSA9PiB7XG5cdFx0XHRvbkV2ZW50VXBkYXRlPy4oeyAuLi5ldmVudCwgLi4udXBkYXRlcyB9KVxuXHRcdFx0c2V0Q3VycmVudEV2ZW50cyhcblx0XHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnRJbXBsKHtcblx0XHRcdFx0XHR0YXJnZXRFdmVudDogZXZlbnQsXG5cdFx0XHRcdFx0dXBkYXRlcyxcblx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnRVcGRhdGVdXG5cdClcblxuXHRjb25zdCBkZWxldGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCwgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zKSA9PiB7XG5cdFx0XHRvbkV2ZW50RGVsZXRlPy4oZXZlbnQpXG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKFxuXHRcdFx0XHRkZWxldGVSZWN1cnJpbmdFdmVudEltcGwoe1xuXHRcdFx0XHRcdHRhcmdldEV2ZW50OiBldmVudCxcblx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnREZWxldGVdXG5cdClcblxuXHRjb25zdCBkZWxldGVFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRcdGNvbnN0IGV2ZW50VG9EZWxldGUgPSBjdXJyZW50RXZlbnRzLmZpbmQoKGUpID0+IGUuaWQgPT09IGV2ZW50SWQpXG5cdFx0XHRpZiAoIWV2ZW50VG9EZWxldGUpIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+IHByZXYuZmlsdGVyKChlKSA9PiBlLmlkICE9PSBldmVudElkKSlcblx0XHRcdG9uRXZlbnREZWxldGU/LihldmVudFRvRGVsZXRlKVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnREZWxldGVdXG5cdClcblxuXHRjb25zdCBvcGVuRXZlbnRGb3JtID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdGlmIChldmVudERhdGE/LnN0YXJ0KSB7XG5cdFx0XHRcdHNldFNlbGVjdGVkRGF0ZShldmVudERhdGEuc3RhcnQpXG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzdGFydCA9IGV2ZW50RGF0YT8uc3RhcnQgPz8gY3VycmVudERhdGVcblx0XHRcdHNldFNlbGVjdGVkRXZlbnQoe1xuXHRcdFx0XHR0aXRsZTogdCgnbmV3RXZlbnQnKSxcblx0XHRcdFx0c3RhcnQsXG5cdFx0XHRcdGVuZDogZXZlbnREYXRhPy5lbmQgPz8gc3RhcnQuYWRkKDEsICdob3VyJyksXG5cdFx0XHRcdHJlc291cmNlSWQ6IGV2ZW50RGF0YT8ucmVzb3VyY2VJZCxcblx0XHRcdFx0ZGVzY3JpcHRpb246ICcnLFxuXHRcdFx0XHRhbGxEYXk6IGV2ZW50RGF0YT8uYWxsRGF5ID8/IGZhbHNlLFxuXHRcdFx0fSBhcyBDYWxlbmRhckV2ZW50KVxuXHRcdFx0c2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0fSxcblx0XHRbY3VycmVudERhdGUsIHRdXG5cdClcblxuXHRjb25zdCBjbG9zZUV2ZW50Rm9ybSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzZXRTZWxlY3RlZERhdGUobnVsbClcblx0XHRzZXRTZWxlY3RlZEV2ZW50KG51bGwpXG5cdFx0c2V0SXNFdmVudEZvcm1PcGVuKGZhbHNlKVxuXHR9LCBbXSlcblxuXHRjb25zdCBoYW5kbGVWaWV3Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG5cdFx0KG5ld1ZpZXc6IENhbGVuZGFyVmlldykgPT4ge1xuXHRcdFx0c2V0VmlldyhuZXdWaWV3KVxuXHRcdFx0b25WaWV3Q2hhbmdlPy4obmV3Vmlldylcblx0XHRcdC8vIFZpZXcgY2hhbmdlIGFmZmVjdHMgdmlzaWJsZSByYW5nZSDigJQgbm90aWZ5IGNvbnN1bWVyc1xuXHRcdFx0Y29uc3QgcmFuZ2UgPSBjYWxjdWxhdGVWaWV3UmFuZ2UoY3VycmVudERhdGUsIG5ld1ZpZXcsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdFx0b25EYXRlQ2hhbmdlPy4oY3VycmVudERhdGUsIHJhbmdlKVxuXHRcdH0sXG5cdFx0W29uVmlld0NoYW5nZSwgb25EYXRlQ2hhbmdlLCBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBDYWxlbmRhckV2ZW50IHwgbnVsbCA9PiB7XG5cdFx0XHRjb25zdCB0YXJnZXRVSUQgPSBldmVudC51aWRcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGN1cnJlbnRFdmVudHMuZmluZChcblx0XHRcdFx0XHQoZSkgPT4gKGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYCkgPT09IHRhcmdldFVJRCAmJiBlLnJydWxlXG5cdFx0XHRcdCkgfHwgbnVsbFxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHNdXG5cdClcblxuXHRyZXR1cm4ge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdHZpZXcsXG5cdFx0ZXZlbnRzOiBwcm9jZXNzZWRFdmVudHMsXG5cdFx0cmF3RXZlbnRzOiBjdXJyZW50RXZlbnRzLFxuXHRcdGlzRXZlbnRGb3JtT3Blbixcblx0XHRzZWxlY3RlZEV2ZW50LFxuXHRcdHNlbGVjdGVkRGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRkYXlNYXhFdmVudHM6IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdHNldEN1cnJlbnREYXRlLFxuXHRcdHNlbGVjdERhdGUsXG5cdFx0c2V0VmlldzogaGFuZGxlVmlld0NoYW5nZSxcblx0XHRuZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2QsXG5cdFx0dG9kYXksXG5cdFx0YWRkRXZlbnQsXG5cdFx0dXBkYXRlRXZlbnQsXG5cdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0ZGVsZXRlRXZlbnQsXG5cdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHRjbG9zZUV2ZW50Rm9ybSxcblx0XHRzZXRTZWxlY3RlZEV2ZW50LFxuXHRcdHNldElzRXZlbnRGb3JtT3Blbixcblx0XHRzZXRTZWxlY3RlZERhdGUsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHR0LFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBvbWl0S2V5cywgc2FmZURhdGUgfSBmcm9tICdAL2xpYi91dGlscydcblxuLyoqXG4gKiBDb252ZXJ0cyBhIERheWpzIG9iamVjdCB0byBhIFwiRmxvYXRpbmcgVGltZVwiIERhdGUgcmVwcmVzZW50YXRpb24uXG4gKiBJbiBGbG9hdGluZyBUaW1lLCB3ZSB1c2UgYSBVVEMgRGF0ZSBvYmplY3QgYnV0IHNldCBpdHMgVVRDIGNvbXBvbmVudHNcbiAqIHRvIG1hdGNoIHRoZSBsb2NhbCBjb21wb25lbnRzIG9mIHRoZSB1c2VyJ3MgZGF0ZS5cbiAqXG4gKiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgUlJ1bGUgZXZhbHVhdGlvbiBiZWNhdXNlIGl0IGVuc3VyZXMgdGhhdCBhIHJ1bGVcbiAqIGxpa2UgXCJFdmVyeSBXZWRuZXNkYXlcIiByZWZlcnMgdG8gdGhlIHVzZXIncyBsb2NhbCBXZWRuZXNkYXksIGV2ZW4gaWZcbiAqIHRoYXQgdGltZSBmYWxscyBvbiBhIFRodXJzZGF5IGluIGFjdHVhbCBVVEMuXG4gKi9cbmNvbnN0IHRvRmxvYXRpbmdEYXRlID0gKGQ6IERheWpzKTogRGF0ZSA9PiB7XG5cdHJldHVybiBuZXcgRGF0ZShcblx0XHREYXRlLlVUQyhcblx0XHRcdGQueWVhcigpLFxuXHRcdFx0ZC5tb250aCgpLFxuXHRcdFx0ZC5kYXRlKCksXG5cdFx0XHRkLmhvdXIoKSxcblx0XHRcdGQubWludXRlKCksXG5cdFx0XHRkLnNlY29uZCgpLFxuXHRcdFx0ZC5taWxsaXNlY29uZCgpXG5cdFx0KVxuXHQpXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBcIkZsb2F0aW5nIFRpbWVcIiBEYXRlIGJhY2sgdG8gYSBEYXlqcyBvYmplY3QgaW4gdGhlIG9yaWdpbmFsIGNvbnRleHQuXG4gKiBJdCB0YWtlcyB0aGUgWU1ESE1TIGNvbXBvbmVudHMgZnJvbSB0aGUgVVRDIERhdGUgYW5kIGFwcGxpZXMgdGhlbSB0byB0aGVcbiAqIHJlZmVyZW5jZSBEYXlqcyBvYmplY3QgKHByZXNlcnZpbmcgaXRzIHRpbWV6b25lL2xvY2FsZSkuXG4gKi9cbmNvbnN0IGZyb21GbG9hdGluZ0RhdGUgPSAoZGF0ZTogRGF0ZSwgcmVmZXJlbmNlOiBEYXlqcyk6IERheWpzID0+IHtcblx0cmV0dXJuIHJlZmVyZW5jZVxuXHRcdC55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSlcblx0XHQubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKVxuXHRcdC5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKVxuXHRcdC5ob3VyKGRhdGUuZ2V0VVRDSG91cnMoKSlcblx0XHQubWludXRlKGRhdGUuZ2V0VVRDTWludXRlcygpKVxuXHRcdC5zZWNvbmQoZGF0ZS5nZXRVVENTZWNvbmRzKCkpXG5cdFx0Lm1pbGxpc2Vjb25kKGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpXG59XG5cbmV4cG9ydCBjb25zdCBpc1JlY3VycmluZ0V2ZW50ID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG5cdHJldHVybiBCb29sZWFuKGV2ZW50LnJydWxlIHx8IGV2ZW50LnJlY3VycmVuY2VJZCB8fCBldmVudC51aWQpXG59XG5cbi8qKlxuICogQ29uc2lzdGVudGx5IGRlcml2ZXMgYSBwYXJlbnQgVUlEIGZyb20gYW4gZXZlbnQuXG4gKiBVc2VzIHRoZSBleHBsaWNpdCBgdWlkYCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxscyBiYWNrIHRvIGAke2lkfUBpbGFteS5jYWxlbmRhcmAuXG4gKi9cbmNvbnN0IGdldEV2ZW50UGFyZW50VUlEID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogc3RyaW5nID0+IHtcblx0cmV0dXJuIGV2ZW50LnVpZCB8fCBgJHtldmVudC5pZH1AaWxhbXkuY2FsZW5kYXJgXG59XG5cbi8qKlxuICogRmluZHMgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50ICh0aGUgb25lIHdpdGggcnJ1bGUgYW5kIG5vIHJlY3VycmVuY2VJZClcbiAqIHRoYXQgc2hhcmVzIHRoZSBzYW1lIHBhcmVudCBVSUQgYXMgdGhlIHRhcmdldCBldmVudC5cbiAqIFRocm93cyBpZiBub3QgZm91bmQg4oCUIGNhbGxlcnMgYXNzdW1lIHRoZSBzZXJpZXMgZXhpc3RzLlxuICovXG5jb25zdCBmaW5kQmFzZUV2ZW50SW5kZXggPSAoXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdLFxuXHR0YXJnZXRFdmVudDogQ2FsZW5kYXJFdmVudFxuKTogbnVtYmVyID0+IHtcblx0Y29uc3QgdGFyZ2V0VWlkID0gZ2V0RXZlbnRQYXJlbnRVSUQodGFyZ2V0RXZlbnQpXG5cdGNvbnN0IGluZGV4ID0gZXZlbnRzLmZpbmRJbmRleChcblx0XHQoZSkgPT4gZ2V0RXZlbnRQYXJlbnRVSUQoZSkgPT09IHRhcmdldFVpZCAmJiBlLnJydWxlICYmICFlLnJlY3VycmVuY2VJZFxuXHQpXG5cdGlmIChpbmRleCA9PT0gLTEpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0Jhc2UgcmVjdXJyaW5nIGV2ZW50IG5vdCBmb3VuZCcpXG5cdH1cblx0cmV0dXJuIGluZGV4XG59XG5cbi8qKlxuICogRm9yIHRoZSBcImZvbGxvd2luZ1wiIHNjb3BlOiB0aGUgVU5USUwgZGF0ZSB0aGF0IHRlcm1pbmF0ZXMgdGhlIG9yaWdpbmFsXG4gKiBzZXJpZXMgaXMgdGhlIGVuZCBvZiB0aGUgZGF5IEJFRk9SRSB0aGUgdGFyZ2V0IGV2ZW50J3Mgc3RhcnQuIFRoaXMga2VlcHNcbiAqIHRoZSBsYXN0IHByZS10YXJnZXQgb2NjdXJyZW5jZSBpbiB0aGUgdGVybWluYXRlZCBzZXJpZXMuXG4gKi9cbmNvbnN0IGdldFNlcmllc1Rlcm1pbmF0aW9uRGF0ZSA9ICh0YXJnZXRFdmVudDogQ2FsZW5kYXJFdmVudCk6IERhdGUgPT5cblx0dGFyZ2V0RXZlbnQuc3RhcnQuc3VidHJhY3QoMSwgJ2RheScpLmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXG5pbnRlcmZhY2UgR2VuZXJhdGVSZWN1cnJpbmdFdmVudHNQcm9wcyB7XG5cdGV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzdGFydERhdGU6IERheWpzXG5cdGVuZERhdGU6IERheWpzXG59XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyA9ICh7XG5cdGV2ZW50LFxuXHRjdXJyZW50RXZlbnRzLFxuXHRzdGFydERhdGUsXG5cdGVuZERhdGUsXG59OiBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Ly8gSWYgbm90IGEgcmVjdXJyaW5nIGV2ZW50LCByZXR1cm4gZW1wdHkgYXJyYXlcblx0aWYgKCFldmVudC5ycnVsZSkge1xuXHRcdHJldHVybiBbXVxuXHR9XG5cblx0dHJ5IHtcblx0XHQvLyBEVFNUQVJUIGFuZCBTRUFSQ0ggV0lORE9XIFRSQU5TRk9STUFUSU9OXG5cdFx0Ly8gVHJhbnNmb3JtIGFsbCBkYXRlcyB0byBcImZsb2F0aW5nIHRpbWVcIiAoVVRDIHdpdGggbG9jYWwgY29tcG9uZW50cylcblx0XHQvLyBUaGlzIGVuc3VyZXMgUlJ1bGUgZXZhbHVhdGVzIFwiV2VkbmVzZGF5XCIgYXMgdGhlIHVzZXIncyBsb2NhbCBXZWRuZXNkYXlcblx0XHRjb25zdCBmbG9hdGluZ1N0YXJ0ID0gdG9GbG9hdGluZ0RhdGUoZXZlbnQuc3RhcnQpXG5cdFx0Y29uc3QgZmxvYXRpbmdVbnRpbCA9IGV2ZW50LnJydWxlLnVudGlsXG5cdFx0XHQ/IHRvRmxvYXRpbmdEYXRlKGRheWpzKGV2ZW50LnJydWxlLnVudGlsKSlcblx0XHRcdDogdW5kZWZpbmVkXG5cblx0XHRjb25zdCBydWxlT3B0aW9uczogUlJ1bGVPcHRpb25zID0ge1xuXHRcdFx0Li4uZXZlbnQucnJ1bGUsXG5cdFx0XHRkdHN0YXJ0OiBmbG9hdGluZ1N0YXJ0LFxuXHRcdFx0dW50aWw6IGZsb2F0aW5nVW50aWwsXG5cdFx0fVxuXHRcdGNvbnN0IHJ1bGUgPSBuZXcgUlJ1bGUocnVsZU9wdGlvbnMpXG5cblx0XHRjb25zdCBwYXJlbnRVaWQgPSBnZXRFdmVudFBhcmVudFVJRChldmVudClcblx0XHRjb25zdCBvdmVycmlkZXMgPSBjdXJyZW50RXZlbnRzLmZpbHRlcihcblx0XHRcdChlKSA9PiBlLnJlY3VycmVuY2VJZCAmJiBnZXRFdmVudFBhcmVudFVJRChlKSA9PT0gcGFyZW50VWlkXG5cdFx0KVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIGV2ZW50IGR1cmF0aW9uIHRvIGV4cGFuZCBzZWFyY2ggd2luZG93IGZvciBldmVudHMgdGhhdCBzcGFuIHRoZSByYW5nZVxuXHRcdGNvbnN0IGV2ZW50RHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcblxuXHRcdC8vIEV4cGFuZCBzZWFyY2ggd2luZG93IGJhY2t3YXJkIGJ5IGV2ZW50IGR1cmF0aW9uIHRvIGNhdGNoIGV2ZW50cyB0aGF0IHN0YXJ0IGJlZm9yZVxuXHRcdC8vIHRoZSByYW5nZSBidXQgc3BhbiBpbnRvIGl0XG5cdFx0Y29uc3QgZXhwYW5kZWRTdGFydERhdGVUaW1lID0gdG9GbG9hdGluZ0RhdGUoXG5cdFx0XHRzdGFydERhdGUuc3VidHJhY3QoZXZlbnREdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcblx0XHQpXG5cdFx0Y29uc3QgZW5kRGF0ZVRpbWUgPSB0b0Zsb2F0aW5nRGF0ZShlbmREYXRlKVxuXG5cdFx0Ly8gR2V0IGFsbCBvY2N1cnJlbmNlcyBpbiB0aGUgZXhwYW5kZWQgcmFuZ2Vcblx0XHRjb25zdCBvY2N1cnJlbmNlcyA9IHJ1bGUuYmV0d2VlbihleHBhbmRlZFN0YXJ0RGF0ZVRpbWUsIGVuZERhdGVUaW1lLCB0cnVlKVxuXG5cdFx0Ly8gQ29udmVydCBvY2N1cnJlbmNlcyB0byBDYWxlbmRhckV2ZW50IGluc3RhbmNlc1xuXHRcdGNvbnN0IHJlY3VycmluZ0V2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gb2NjdXJyZW5jZXNcblx0XHRcdC5tYXAoKG9jY3VycmVuY2UsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9jY3VycmVuY2VEYXRlID0gZnJvbUZsb2F0aW5nRGF0ZShvY2N1cnJlbmNlLCBldmVudC5zdGFydClcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmdPdmVycmlkZSA9IG92ZXJyaWRlcy5maW5kKChlKSA9PlxuXHRcdFx0XHRcdHNhZmVEYXRlKGUucmVjdXJyZW5jZUlkKT8uaXNTYW1lKG9jY3VycmVuY2VEYXRlKVxuXHRcdFx0XHQpXG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUncyBhbiBvdmVycmlkZSwgdXNlIGl0XG5cdFx0XHRcdGlmIChleGlzdGluZ092ZXJyaWRlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgLi4uZXZlbnQsIC4uLmV4aXN0aW5nT3ZlcnJpZGUgfVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSBkdXJhdGlvbiBmcm9tIHRoZSBvcmlnaW5hbCBldmVudFxuXHRcdFx0XHRjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gZXZlbnQuZW5kLmRpZmYoZXZlbnQuc3RhcnQpXG5cdFx0XHRcdGNvbnN0IG5ld0VuZFRpbWUgPSBvY2N1cnJlbmNlRGF0ZS5hZGQob3JpZ2luYWxEdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcblx0XHRcdFx0Y29uc3QgcmVjdXJyaW5nRXZlbnRJZCA9IGAke2V2ZW50LmlkfV8ke2luZGV4fWBcblx0XHRcdFx0Y29uc3QgcGFyZW50VUlEID0gZ2V0RXZlbnRQYXJlbnRVSUQoZXZlbnQpXG5cblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSByZWN1cnJpbmcgZXZlbnQgaW5zdGFuY2Vcblx0XHRcdFx0Y29uc3QgcmVjdXJyaW5nRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdFx0aWQ6IHJlY3VycmluZ0V2ZW50SWQsXG5cdFx0XHRcdFx0c3RhcnQ6IG9jY3VycmVuY2VEYXRlLFxuXHRcdFx0XHRcdGVuZDogbmV3RW5kVGltZSxcblx0XHRcdFx0XHR1aWQ6IHBhcmVudFVJRCwgLy8gU2FtZSBVSUQgYXMgcGFyZW50IGZvciBwcm9wZXIgZ3JvdXBpbmdcblx0XHRcdFx0XHRycnVsZTogdW5kZWZpbmVkLCAvLyBJbnN0YW5jZSBldmVudHMgZG9uJ3QgaGF2ZSBSUlVMRVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlY3VycmluZ0V2ZW50XG5cdFx0XHR9KVxuXHRcdFx0LmZpbHRlcigocmVjdXJyaW5nRXZlbnQpID0+IHtcblx0XHRcdFx0Ly8gRmlsdGVyIG91dCBFWERBVEUgZXhjbHVzaW9uc1xuXHRcdFx0XHRjb25zdCBoYXNFeGRhdGVzID0gZXZlbnQuZXhkYXRlcyAmJiBldmVudC5leGRhdGVzLmxlbmd0aCA+IDBcblx0XHRcdFx0aWYgKGhhc0V4ZGF0ZXMpIHtcblx0XHRcdFx0XHRjb25zdCBldmVudFN0YXJ0SVNPID0gcmVjdXJyaW5nRXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0XHRcdGNvbnN0IGlzRXhjbHVkZWQgPSBldmVudC5leGRhdGVzPy5pbmNsdWRlcyhldmVudFN0YXJ0SVNPKVxuXHRcdFx0XHRcdGlmIChpc0V4Y2x1ZGVkKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGaWx0ZXIgdG8gb25seSBpbmNsdWRlIGV2ZW50cyB0aGF0IHNwYW4gdGhyb3VnaCB0aGUgb3JpZ2luYWwgcmVxdWVzdGVkIGRhdGUgcmFuZ2Vcblx0XHRcdFx0Ly8gQW4gZXZlbnQgc3BhbnMgdGhlIHJhbmdlIGlmOiBldmVudF9zdGFydCA8IHJhbmdlX2VuZCBBTkQgZXZlbnRfZW5kID4gcmFuZ2Vfc3RhcnRcblx0XHRcdFx0Ly8gVXNlIGlzU2FtZU9yQmVmb3JlL2lzU2FtZU9yQWZ0ZXIgdG8gaW5jbHVkZSBib3VuZGFyeSBjYXNlc1xuXHRcdFx0XHRjb25zdCBldmVudFNwYW5zUmFuZ2UgPVxuXHRcdFx0XHRcdHJlY3VycmluZ0V2ZW50LnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpICYmXG5cdFx0XHRcdFx0cmVjdXJyaW5nRXZlbnQuZW5kLmlzU2FtZU9yQWZ0ZXIoc3RhcnREYXRlKVxuXG5cdFx0XHRcdHJldHVybiBldmVudFNwYW5zUmFuZ2Vcblx0XHRcdH0pXG5cblx0XHRyZXR1cm4gcmVjdXJyaW5nRXZlbnRzXG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gSGFuZGxlIGludmFsaWQgUlJVTEUgb3B0aW9uc1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdGBJbnZhbGlkIFJSVUxFIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkoZXZlbnQucnJ1bGUpfS4gRXJyb3I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuXHRcdClcblx0fVxufVxuXG5pbnRlcmZhY2UgVXBkYXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG5cdHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cblx0Y3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHNjb3BlOiAndGhpcycgfCAnZm9sbG93aW5nJyB8ICdhbGwnXG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVSZWN1cnJpbmdFdmVudCA9ICh7XG5cdHRhcmdldEV2ZW50LFxuXHR1cGRhdGVzLFxuXHRjdXJyZW50RXZlbnRzLFxuXHRzY29wZSxcbn06IFVwZGF0ZVJlY3VycmluZ0V2ZW50UHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmN1cnJlbnRFdmVudHNdXG5cdGNvbnN0IGJhc2VFdmVudEluZGV4ID0gZmluZEJhc2VFdmVudEluZGV4KHVwZGF0ZWRFdmVudHMsIHRhcmdldEV2ZW50KVxuXHRjb25zdCBiYXNlRXZlbnQgPSB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XVxuXG5cdHN3aXRjaCAoc2NvcGUpIHtcblx0XHRjYXNlICd0aGlzJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGV2ZW50IG9ubHlcIiAtIEFkZCBFWERBVEUgdG8gYmFzZSBldmVudCBhbmQgY3JlYXRlIHN0YW5kYWxvbmUgbW9kaWZpZWQgZXZlbnRcblx0XHRcdGNvbnN0IHRhcmdldEV2ZW50U3RhcnRJU08gPSB0YXJnZXRFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG5cdFx0XHRjb25zdCBleGlzdGluZ0V4ZGF0ZXMgPSBiYXNlRXZlbnQuZXhkYXRlcyB8fCBbXVxuXHRcdFx0Y29uc3QgdXBkYXRlZEV4ZGF0ZXMgPSBbLi4uZXhpc3RpbmdFeGRhdGVzLCB0YXJnZXRFdmVudFN0YXJ0SVNPXVxuXG5cdFx0XHRjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdGV4ZGF0ZXM6IHVwZGF0ZWRFeGRhdGVzLFxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG5cblx0XHRcdC8vIENyZWF0ZSBzdGFuZGFsb25lIG1vZGlmaWVkIGV2ZW50IHdpdGggcmVjdXJyZW5jZUlkXG5cdFx0XHRjb25zdCBtb2RpZmllZEV2ZW50SWQgPSBgJHt0YXJnZXRFdmVudC5pZH1fbW9kaWZpZWRfJHtEYXRlLm5vdygpfWBcblx0XHRcdGNvbnN0IG1vZGlmaWVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgVE9ETzogZml4IHRoZSB0eXBlc1xuXHRcdFx0XHQuLi5vbWl0S2V5cyh0YXJnZXRFdmVudCwgWyd3aWR0aCcsICdoZWlnaHQnLCAndG9wJywgJ2xlZnQnLCAncmlnaHQnXSksXG5cdFx0XHRcdC4uLnVwZGF0ZXMsXG5cdFx0XHRcdGlkOiBtb2RpZmllZEV2ZW50SWQsXG5cdFx0XHRcdHJlY3VycmVuY2VJZDogdGFyZ2V0RXZlbnRTdGFydElTTywgLy8gVGhpcyBtYXJrcyBpdCBhcyBhIG1vZGlmaWVkIGluc3RhbmNlXG5cdFx0XHRcdHVpZDogZ2V0RXZlbnRQYXJlbnRVSUQoYmFzZUV2ZW50KSwgLy8gS2VlcCBzYW1lIFVJRCBhcyBiYXNlIGV2ZW50IChpQ2FsZW5kYXIgc3RhbmRhcmQpXG5cdFx0XHRcdHJydWxlOiB1bmRlZmluZWQsIC8vIFN0YW5kYWxvbmUgZXZlbnRzIGRvbid0IGhhdmUgUlJVTEVcblx0XHRcdH0gYXMgQ2FsZW5kYXJFdmVudFxuXHRcdFx0dXBkYXRlZEV2ZW50cy5wdXNoKG1vZGlmaWVkRXZlbnQpXG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGNhc2UgJ2ZvbGxvd2luZyc6IHtcblx0XHRcdC8vIFwiVGhpcyBhbmQgZm9sbG93aW5nXCIgLSBUZXJtaW5hdGUgb3JpZ2luYWwgc2VyaWVzIGFuZCBjcmVhdGUgbmV3IHNlcmllc1xuXHRcdFx0Y29uc3QgdGVybWluYXRpb25EYXRlID0gZ2V0U2VyaWVzVGVybWluYXRpb25EYXRlKHRhcmdldEV2ZW50KVxuXG5cdFx0XHQvLyBVcGRhdGUgb3JpZ2luYWwgc2VyaWVzIHdpdGggVU5USUwgdG8gZW5kIGJlZm9yZSB0YXJnZXQgZGF0ZVxuXHRcdFx0Y29uc3QgdGVybWluYXRlZEV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdHJydWxlOiB7XG5cdFx0XHRcdFx0Li4uYmFzZUV2ZW50LnJydWxlLFxuXHRcdFx0XHRcdHVudGlsOiB0ZXJtaW5hdGlvbkRhdGUsXG5cdFx0XHRcdH0gYXMgUlJ1bGVPcHRpb25zLFxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB0ZXJtaW5hdGVkRXZlbnRcblxuXHRcdFx0Ly8gQ3JlYXRlIG5ldyBzZXJpZXMgc3RhcnRpbmcgZnJvbSB0YXJnZXQgZGF0ZVxuXHRcdFx0Y29uc3Qgb3JpZ2luYWxEdXJhdGlvbiA9IGJhc2VFdmVudC5lbmQuZGlmZihiYXNlRXZlbnQuc3RhcnQpXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNTdGFydFRpbWUgPSB1cGRhdGVzLnN0YXJ0IHx8IHRhcmdldEV2ZW50LnN0YXJ0XG5cdFx0XHRjb25zdCBuZXdTZXJpZXNFbmRUaW1lID1cblx0XHRcdFx0dXBkYXRlcy5lbmQgfHwgbmV3U2VyaWVzU3RhcnRUaW1lLmFkZChvcmlnaW5hbER1cmF0aW9uKVxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzSWQgPSBgJHtiYXNlRXZlbnQuaWR9X2ZvbGxvd2luZ2Bcblx0XHRcdGNvbnN0IG5ld1Nlcmllc1VJRCA9IGAke25ld1Nlcmllc0lkfUBpbGFteS5jYWxlbmRhcmBcblxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0Li4udXBkYXRlcyxcblx0XHRcdFx0cnJ1bGU6IHtcblx0XHRcdFx0XHQuLi5iYXNlRXZlbnQucnJ1bGUsXG5cdFx0XHRcdFx0Li4udXBkYXRlcy5ycnVsZSxcblx0XHRcdFx0XHRkdHN0YXJ0OiBuZXdTZXJpZXNTdGFydFRpbWUudG9EYXRlKCksXG5cdFx0XHRcdH0gYXMgUlJ1bGVPcHRpb25zLFxuXHRcdFx0XHRpZDogbmV3U2VyaWVzSWQsXG5cdFx0XHRcdHVpZDogbmV3U2VyaWVzVUlELCAvLyBOZXcgVUlEIGZvciBuZXcgc2VyaWVzXG5cdFx0XHRcdHN0YXJ0OiBuZXdTZXJpZXNTdGFydFRpbWUsXG5cdFx0XHRcdGVuZDogbmV3U2VyaWVzRW5kVGltZSxcblx0XHRcdFx0cmVjdXJyZW5jZUlkOiB1bmRlZmluZWQsIC8vIFRoaXMgaXMgYSBuZXcgYmFzZSBldmVudCwgbm90IGFuIGluc3RhbmNlXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzLnB1c2gobmV3U2VyaWVzRXZlbnQpXG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGNhc2UgJ2FsbCc6IHtcblx0XHRcdC8vIFwiQWxsIGV2ZW50c1wiIC0gVXBkYXRlIHRoZSBiYXNlIHJlY3VycmluZyBldmVudFxuXHRcdFx0Y29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHQuLi51cGRhdGVzLFxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdGBJbnZhbGlkIHNjb3BlOiAke3Njb3BlfS4gTXVzdCBiZSAndGhpcycsICdmb2xsb3dpbmcnLCBvciAnYWxsJ2Bcblx0XHRcdClcblx0fVxuXG5cdHJldHVybiB1cGRhdGVkRXZlbnRzXG59XG5cbmludGVyZmFjZSBEZWxldGVSZWN1cnJpbmdFdmVudFByb3BzIHtcblx0dGFyZ2V0RXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0Y3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHNjb3BlOiAndGhpcycgfCAnZm9sbG93aW5nJyB8ICdhbGwnXG59XG5cbmV4cG9ydCBjb25zdCBkZWxldGVSZWN1cnJpbmdFdmVudCA9ICh7XG5cdHRhcmdldEV2ZW50LFxuXHRjdXJyZW50RXZlbnRzLFxuXHRzY29wZSxcbn06IERlbGV0ZVJlY3VycmluZ0V2ZW50UHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmN1cnJlbnRFdmVudHNdXG5cdGNvbnN0IGJhc2VFdmVudEluZGV4ID0gZmluZEJhc2VFdmVudEluZGV4KHVwZGF0ZWRFdmVudHMsIHRhcmdldEV2ZW50KVxuXHRjb25zdCBiYXNlRXZlbnQgPSB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XVxuXG5cdHN3aXRjaCAoc2NvcGUpIHtcblx0XHRjYXNlICd0aGlzJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGV2ZW50IG9ubHlcIiAtIEFkZCBFWERBVEUgdG8gZXhjbHVkZSB0aGlzIG9jY3VycmVuY2Vcblx0XHRcdGNvbnN0IHRhcmdldEV2ZW50U3RhcnRJU08gPSB0YXJnZXRFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG5cdFx0XHRjb25zdCBleGlzdGluZ0V4ZGF0ZXMgPSBiYXNlRXZlbnQuZXhkYXRlcyB8fCBbXVxuXHRcdFx0Y29uc3QgdXBkYXRlZEV4ZGF0ZXMgPSBbLi4uZXhpc3RpbmdFeGRhdGVzLCB0YXJnZXRFdmVudFN0YXJ0SVNPXVxuXG5cdFx0XHRjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0geyAuLi5iYXNlRXZlbnQsIGV4ZGF0ZXM6IHVwZGF0ZWRFeGRhdGVzIH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdmb2xsb3dpbmcnOiB7XG5cdFx0XHQvLyBcIlRoaXMgYW5kIGZvbGxvd2luZ1wiIC0gVGVybWluYXRlIHNlcmllcyB3aXRoIFVOVElMIGJlZm9yZSB0YXJnZXQgZGF0ZVxuXHRcdFx0Y29uc3QgdGVybWluYXRlZEV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdHJydWxlOiB7XG5cdFx0XHRcdFx0Li4uYmFzZUV2ZW50LnJydWxlLFxuXHRcdFx0XHRcdHVudGlsOiBnZXRTZXJpZXNUZXJtaW5hdGlvbkRhdGUodGFyZ2V0RXZlbnQpLFxuXHRcdFx0XHR9IGFzIFJSdWxlT3B0aW9ucyxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdGVybWluYXRlZEV2ZW50XG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGNhc2UgJ2FsbCc6IHtcblx0XHRcdC8vIFwiQWxsIGV2ZW50c1wiIC0gUmVtb3ZlIHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllc1xuXHRcdFx0Y29uc3QgdGFyZ2V0VWlkID0gZ2V0RXZlbnRQYXJlbnRVSUQodGFyZ2V0RXZlbnQpXG5cdFx0XHRjb25zdCBldmVudHNXaXRob3V0VGFyZ2V0U2VyaWVzID0gdXBkYXRlZEV2ZW50cy5maWx0ZXIoXG5cdFx0XHRcdChlKSA9PiBnZXRFdmVudFBhcmVudFVJRChlKSAhPT0gdGFyZ2V0VWlkXG5cdFx0XHQpXG5cdFx0XHRyZXR1cm4gZXZlbnRzV2l0aG91dFRhcmdldFNlcmllc1xuXHRcdH1cblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdGBJbnZhbGlkIHNjb3BlOiAke3Njb3BlfS4gTXVzdCBiZSAndGhpcycsICdmb2xsb3dpbmcnLCBvciAnYWxsJ2Bcblx0XHRcdClcblx0fVxuXG5cdHJldHVybiB1cGRhdGVkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRUcmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9ucyA9IHtcblx0Ly8gQ29tbW9uIGFjdGlvbnNcblx0dG9kYXk6ICdUb2RheScsXG5cdGNyZWF0ZTogJ0NyZWF0ZScsXG5cdG5ldzogJ05ldycsXG5cdHVwZGF0ZTogJ1VwZGF0ZScsXG5cdGRlbGV0ZTogJ0RlbGV0ZScsXG5cdGNhbmNlbDogJ0NhbmNlbCcsXG5cdGV4cG9ydDogJ0V4cG9ydCcsXG5cblx0Ly8gRXZlbnQgcmVsYXRlZFxuXHRldmVudDogJ0V2ZW50Jyxcblx0ZXZlbnRzOiAnRXZlbnRzJyxcblx0bmV3RXZlbnQ6ICdOZXcgRXZlbnQnLFxuXHR0aXRsZTogJ1RpdGxlJyxcblx0ZGVzY3JpcHRpb246ICdEZXNjcmlwdGlvbicsXG5cdGxvY2F0aW9uOiAnTG9jYXRpb24nLFxuXHRhbGxEYXk6ICdBbGwgZGF5Jyxcblx0c3RhcnREYXRlOiAnU3RhcnQgRGF0ZScsXG5cdGVuZERhdGU6ICdFbmQgRGF0ZScsXG5cdHN0YXJ0VGltZTogJ1N0YXJ0IFRpbWUnLFxuXHRzZWFyY2hUaW1lOiAnU2VhcmNoIHRpbWUuLi4nLFxuXHRlbmRUaW1lOiAnRW5kIFRpbWUnLFxuXHRjb2xvcjogJ0NvbG9yJyxcblxuXHQvLyBFdmVudCBmb3JtXG5cdGNyZWF0ZUV2ZW50OiAnQ3JlYXRlIEV2ZW50Jyxcblx0ZWRpdEV2ZW50OiAnRWRpdCBFdmVudCcsXG5cdGFkZE5ld0V2ZW50OiAnQWRkIGEgbmV3IGV2ZW50IHRvIHlvdXIgY2FsZW5kYXInLFxuXHRlZGl0RXZlbnREZXRhaWxzOiAnRWRpdCB5b3VyIGV2ZW50IGRldGFpbHMnLFxuXHRldmVudFRpdGxlUGxhY2Vob2xkZXI6ICdFdmVudCB0aXRsZScsXG5cdGV2ZW50RGVzY3JpcHRpb25QbGFjZWhvbGRlcjogJ0V2ZW50IGRlc2NyaXB0aW9uIChvcHRpb25hbCknLFxuXHRldmVudExvY2F0aW9uUGxhY2Vob2xkZXI6ICdFdmVudCBsb2NhdGlvbiAob3B0aW9uYWwpJyxcblxuXHQvLyBSZWN1cnJlbmNlXG5cdHJlcGVhdDogJ1JlcGVhdCcsXG5cdHJlcGVhdHM6ICdSZXBlYXRzJyxcblx0Y3VzdG9tUmVjdXJyZW5jZTogJ0N1c3RvbSByZWN1cnJlbmNlJyxcblx0ZGFpbHk6ICdEYWlseScsXG5cdHdlZWtseTogJ1dlZWtseScsXG5cdG1vbnRobHk6ICdNb250aGx5Jyxcblx0eWVhcmx5OiAnWWVhcmx5Jyxcblx0aW50ZXJ2YWw6ICdJbnRlcnZhbCcsXG5cdHJlcGVhdE9uOiAnUmVwZWF0IG9uJyxcblx0bmV2ZXI6ICdOZXZlcicsXG5cdGNvdW50OiAnQ291bnQnLFxuXHRldmVyeTogJ0V2ZXJ5Jyxcblx0ZW5kczogJ0VuZHMnLFxuXHRhZnRlcjogJ0FmdGVyJyxcblx0b2NjdXJyZW5jZXM6ICdvY2N1cnJlbmNlcycsXG5cdG9uOiAnT24nLFxuXG5cdC8vIFJlY3VycmVuY2UgZWRpdCBkaWFsb2dcblx0ZWRpdFJlY3VycmluZ0V2ZW50OiAnRWRpdCByZWN1cnJpbmcgZXZlbnQnLFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudDogJ0RlbGV0ZSByZWN1cnJpbmcgZXZlbnQnLFxuXHRlZGl0UmVjdXJyaW5nRXZlbnRRdWVzdGlvbjpcblx0XHQnaXMgYSByZWN1cnJpbmcgZXZlbnQuIEhvdyB3b3VsZCB5b3UgbGlrZSB0byBlZGl0IGl0PycsXG5cdGRlbGV0ZVJlY3VycmluZ0V2ZW50UXVlc3Rpb246XG5cdFx0J2lzIGEgcmVjdXJyaW5nIGV2ZW50LiBIb3cgd291bGQgeW91IGxpa2UgdG8gZGVsZXRlIGl0PycsXG5cdHRoaXNFdmVudDogJ1RoaXMgZXZlbnQnLFxuXHR0aGlzRXZlbnREZXNjcmlwdGlvbjogJ09ubHkgY2hhbmdlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG5cdHRoaXNBbmRGb2xsb3dpbmdFdmVudHM6ICdUaGlzIGFuZCBmb2xsb3dpbmcgZXZlbnRzJyxcblx0dGhpc0FuZEZvbGxvd2luZ0V2ZW50c0Rlc2NyaXB0aW9uOiAnRWRpdCB0aGlzIGFuZCBhbGwgZnV0dXJlIG9jY3VycmVuY2VzJyxcblx0YWxsRXZlbnRzOiAnQWxsIGV2ZW50cycsXG5cdGFsbEV2ZW50c0Rlc2NyaXB0aW9uOiAnRWRpdCB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuXHRvbmx5Q2hhbmdlVGhpczogJ09ubHkgY2hhbmdlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG5cdGNoYW5nZVRoaXNBbmRGdXR1cmU6ICdDaGFuZ2UgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG5cdGNoYW5nZUVudGlyZVNlcmllczogJ0NoYW5nZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuXHRvbmx5RGVsZXRlVGhpczogJ09ubHkgZGVsZXRlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG5cdGRlbGV0ZVRoaXNBbmRGdXR1cmU6ICdEZWxldGUgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG5cdGRlbGV0ZUVudGlyZVNlcmllczogJ0RlbGV0ZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuXG5cdC8vIFZpZXcgdHlwZXNcblx0bW9udGg6ICdNb250aCcsXG5cdHdlZWs6ICdXZWVrJyxcblx0ZGF5OiAnRGF5Jyxcblx0eWVhcjogJ1llYXInLFxuXHRtb3JlOiAnbW9yZScsXG5cblx0Ly8gUmVzb3VyY2UgY2FsZW5kYXJcblx0cmVzb3VyY2VzOiAnUmVzb3VyY2VzJyxcblx0cmVzb3VyY2U6ICdSZXNvdXJjZScsXG5cdHRpbWU6ICdUaW1lJyxcblx0ZGF0ZTogJ0RhdGUnLFxuXHRub1Jlc291cmNlc1Zpc2libGU6ICdObyByZXNvdXJjZXMgdmlzaWJsZScsXG5cdGFkZFJlc291cmNlc09yU2hvd0V4aXN0aW5nOiAnQWRkIHJlc291cmNlcyBvciBzaG93IGV4aXN0aW5nIG9uZXMnLFxuXG5cdC8vIERheXMgb2Ygd2Vla1xuXHRzdW5kYXk6ICdTdW5kYXknLFxuXHRtb25kYXk6ICdNb25kYXknLFxuXHR0dWVzZGF5OiAnVHVlc2RheScsXG5cdHdlZG5lc2RheTogJ1dlZG5lc2RheScsXG5cdHRodXJzZGF5OiAnVGh1cnNkYXknLFxuXHRmcmlkYXk6ICdGcmlkYXknLFxuXHRzYXR1cmRheTogJ1NhdHVyZGF5JyxcblxuXHQvLyBEYXlzIHNob3J0XG5cdHN1bjogJ1N1bicsXG5cdG1vbjogJ01vbicsXG5cdHR1ZTogJ1R1ZScsXG5cdHdlZDogJ1dlZCcsXG5cdHRodTogJ1RodScsXG5cdGZyaTogJ0ZyaScsXG5cdHNhdDogJ1NhdCcsXG5cblx0Ly8gTW9udGhzXG5cdGphbnVhcnk6ICdKYW51YXJ5Jyxcblx0ZmVicnVhcnk6ICdGZWJydWFyeScsXG5cdG1hcmNoOiAnTWFyY2gnLFxuXHRhcHJpbDogJ0FwcmlsJyxcblx0bWF5OiAnTWF5Jyxcblx0anVuZTogJ0p1bmUnLFxuXHRqdWx5OiAnSnVseScsXG5cdGF1Z3VzdDogJ0F1Z3VzdCcsXG5cdHNlcHRlbWJlcjogJ1NlcHRlbWJlcicsXG5cdG9jdG9iZXI6ICdPY3RvYmVyJyxcblx0bm92ZW1iZXI6ICdOb3ZlbWJlcicsXG5cdGRlY2VtYmVyOiAnRGVjZW1iZXInLFxufVxuIiwKICAgICJpbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG4vKiogV2hldGhlciB0aGUgZ2l2ZW4gZGF0ZSBmYWxscyBvbiB0b2RheSAoY2FsZW5kYXIgZGF5LCByZXNwZWN0aW5nIHRpbWV6b25lKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RvZGF5KGRhdGU6IERheWpzKTogYm9vbGVhbiB7XG5cdHJldHVybiBkYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5Jylcbn1cblxuLyoqIGBZWVlZLU1NLUREYCBzdHJpbmcgdXNlZCBhcyBhIHN0YWJsZSBwZXItZGF5IGtleSBhY3Jvc3MgdGhlIGNvZGViYXNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERheUtleShkYXRlOiBEYXlqcyk6IHN0cmluZyB7XG5cdHJldHVybiBkYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpXG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgd2VlayBkYXlzIGZvciBhIGdpdmVuIGRhdGUgYW5kIGZpcnN0IGRheSBvZiB3ZWVrIHNldHRpbmcuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlIGN1cnJlbnQgZGF0ZSBpcyBhbHdheXMgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIHdlZWssXG4gKiBldmVuIHdoZW4gdGhlIGZpcnN0IGRheSBvZiB3ZWVrIGlzIHNldCB0byBhIGRheSBhZnRlciB0aGUgY3VycmVudCBkYXRlLlxuICpcbiAqIEBwYXJhbSBjdXJyZW50RGF0ZSAtIFRoZSByZWZlcmVuY2UgZGF0ZSBmb3IgY2FsY3VsYXRpbmcgdGhlIHdlZWtcbiAqIEBwYXJhbSBmaXJzdERheU9mV2VlayAtIFRoZSBkYXkgbnVtYmVyICgwLTYpIHJlcHJlc2VudGluZyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwID0gU3VuZGF5LCAxID0gTW9uZGF5LCBldGMuKVxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgNyBkYXlqcyBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgd2VlayBkYXlzLCBzdGFydGluZyBmcm9tIGZpcnN0RGF5T2ZXZWVrXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdldCB3ZWVrIHN0YXJ0aW5nIGZyb20gTW9uZGF5IGZvciBjdXJyZW50IGRhdGVcbiAqIGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoZGF5anMoJzIwMjUtMTAtMTMnKSwgMSlcbiAqIC8vIFJldHVybnM6IFtNb24gT2N0IDEzLCBUdWUgT2N0IDE0LCAuLi4sIFN1biBPY3QgMTldXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdldCB3ZWVrIHN0YXJ0aW5nIGZyb20gV2VkbmVzZGF5IHdoZW4gY3VycmVudCBkYXRlIGlzIE1vbmRheVxuICogY29uc3Qgd2Vla0RheXMgPSBnZXRXZWVrRGF5cyhkYXlqcygnMjAyNS0xMC0xMycpLCAzKVxuICogLy8gUmV0dXJuczogW1dlZCBPY3QgOCwgVGh1IE9jdCA5LCAuLi4sIFR1ZSBPY3QgMTRdIChpbmNsdWRlcyBNb25kYXkgT2N0IDEzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2Vla0RheXMoXG5cdGN1cnJlbnREYXRlOiBEYXlqcyxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuKTogRGF5anNbXSB7XG5cdGNvbnN0IHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlID0gY3VycmVudERhdGVcblx0XHQuc3RhcnRPZignd2VlaycpXG5cdFx0LmRheShmaXJzdERheU9mV2VlaylcblxuXHRjb25zdCBhZGp1c3RlZFN0YXJ0T2ZXZWVrID0gY3VycmVudERhdGUuaXNCZWZvcmUoc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGUpXG5cdFx0PyBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZS5zdWJ0cmFjdCgxLCAnd2VlaycpXG5cdFx0OiBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZVxuXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiA3IH0sIChfLCBkYXlJbmRleCkgPT5cblx0XHRhZGp1c3RlZFN0YXJ0T2ZXZWVrLmFkZChkYXlJbmRleCwgJ2RheScpXG5cdClcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgNiB3ZWVrcyBvZiBkYXlzIGZvciBhIG1vbnRoIGNhbGVuZGFyIHZpZXcuXG4gKiBBbHdheXMgcmV0dXJucyA0MiBkYXlzICg2IHdlZWtzIMOXIDcgZGF5cykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb250aFdlZWtzKFxuXHRtb250aERhdGU6IERheWpzLFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG4pOiBEYXlqc1tdW10ge1xuXHRjb25zdCBmaXJzdFdlZWsgPSBnZXRXZWVrRGF5cyhtb250aERhdGUuc3RhcnRPZignbW9udGgnKSwgZmlyc3REYXlPZldlZWspXG5cblx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDYgfSwgKF8sIHdlZWtJbmRleCkgPT4ge1xuXHRcdGNvbnN0IHdlZWtTdGFydCA9IGZpcnN0V2Vla1swXS5hZGQod2Vla0luZGV4LCAnd2VlaycpXG5cdFx0cmV0dXJuIGdldFdlZWtEYXlzKHdlZWtTdGFydCwgZmlyc3REYXlPZldlZWspXG5cdH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb250aERheXMobW9udGhEYXRlOiBEYXlqcyk6IERheWpzW10ge1xuXHRjb25zdCBkYXlzSW5Nb250aCA9IG1vbnRoRGF0ZS5kYXlzSW5Nb250aCgpXG5cdGNvbnN0IHN0YXJ0T2ZNb250aCA9IG1vbnRoRGF0ZS5zdGFydE9mKCdtb250aCcpXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBkYXlzSW5Nb250aCB9LCAoXywgaSkgPT5cblx0XHRzdGFydE9mTW9udGguYWRkKGksICdkYXknKVxuXHQpXG59XG5cbmludGVyZmFjZSBHZXREYXlIb3Vyc09wdGlvbnMge1xuXHRyZWZlcmVuY2VEYXRlPzogRGF5anNcblx0bGVuZ3RoPzogbnVtYmVyXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGFuIGFycmF5IG9mIDI0IGRheWpzIG9iamVjdHMgcmVwcmVzZW50aW5nIGhvdXJseSBzbG90cyBmb3IgYSBkYXkuXG4gKiBVc2VzIC5ob3VyKGkpIHNvIGVhY2ggcm93IG1hcHMgdG8gXCJ0aGUgaG91ciBsYWJlbGVkIGlcIiDigJQga2VlcGluZyBncmlkIHJvd3NcbiAqIGFsaWduZWQgYWNyb3NzIGNvbHVtbnMgaW4gd2VlayB2aWV3cy4gT24gRFNUIHNwcmluZy1mb3J3YXJkLCAuaG91cigyKSByZXR1cm5zXG4gKiAzIEFNICh0aGUgbm9uLWV4aXN0ZW50IGhvdXIgaXMgY29sbGFwc2VkKSwgYnV0IHRoZSBncmlkIGtleSBmaXggKGRheUluZGV4KVxuICogYW5kIHBlci1kYXkgZ2VuZXJhdGlvbiBpbiB2aWV3cyBoYW5kbGUgdGhpcyBjb3JyZWN0bHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXlIb3Vycyh7XG5cdHJlZmVyZW5jZURhdGUgPSBkYXlqcygpLFxuXHRsZW5ndGggPSAyNCxcbn06IEdldERheUhvdXJzT3B0aW9ucyA9IHt9KTogRGF5anNbXSB7XG5cdGNvbnN0IHN0YXJ0T2ZEYXkgPSByZWZlcmVuY2VEYXRlLnN0YXJ0T2YoJ2RheScpXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoIH0sIChfLCBpKSA9PlxuXHRcdHN0YXJ0T2ZEYXkuaG91cihpKS5taW51dGUoMCkuc2Vjb25kKDApLm1pbGxpc2Vjb25kKDApXG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG4vKipcbiAqIEtlZXAgb25seSBldmVudHMgd2hvc2UgaWQgYXBwZWFycyBpbiBgcmVzb3VyY2VFdmVudHNgLiBJZHMgYXJlIGNvbXBhcmVkIGFzXG4gKiBzdHJpbmdzIHNvIG51bWVyaWMvc3RyaW5nIG1pc21hdGNoZXMgYmV0d2VlbiBzb3VyY2VzIGRvbid0IGNhdXNlIGZhbHNlXG4gKiBuZWdhdGl2ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJFdmVudHNCeVJlc291cmNlKFxuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcblx0cmVzb3VyY2VFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuKTogQ2FsZW5kYXJFdmVudFtdIHtcblx0Y29uc3QgaWRzID0gbmV3IFNldChyZXNvdXJjZUV2ZW50cy5tYXAoKGUpID0+IFN0cmluZyhlLmlkKSkpXG5cdHJldHVybiBldmVudHMuZmlsdGVyKChldmVudCkgPT4gaWRzLmhhcyhTdHJpbmcoZXZlbnQuaWQpKSlcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGFuIGV2ZW50J3MgaW50ZXJ2YWwgb3ZlcmxhcHMgd2l0aCB0aGUgYFtzdGFydCwgZW5kXWAgcmFuZ2VcbiAqIChpbmNsdXNpdmUpLiBDb3ZlcnMgdGhlIHRocmVlIGNhc2VzOiBzdGFydHMgaW5zaWRlIHRoZSByYW5nZSwgZW5kcyBpbnNpZGVcbiAqIHRoZSByYW5nZSwgb3IgZnVsbHkgc3BhbnMgdGhlIHJhbmdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXZlbnRPdmVybGFwc1JhbmdlKFxuXHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0c3RhcnQ6IERheWpzLFxuXHRlbmQ6IERheWpzXG4pOiBib29sZWFuIHtcblx0Y29uc3Qgc3RhcnRzSW5SYW5nZSA9XG5cdFx0ZXZlbnQuc3RhcnQuaXNTYW1lT3JBZnRlcihzdGFydCkgJiYgZXZlbnQuc3RhcnQuaXNTYW1lT3JCZWZvcmUoZW5kKVxuXHRjb25zdCBlbmRzSW5SYW5nZSA9XG5cdFx0ZXZlbnQuZW5kLmlzU2FtZU9yQWZ0ZXIoc3RhcnQpICYmIGV2ZW50LmVuZC5pc1NhbWVPckJlZm9yZShlbmQpXG5cdGNvbnN0IHNwYW5zUmFuZ2UgPSBldmVudC5zdGFydC5pc0JlZm9yZShzdGFydCkgJiYgZXZlbnQuZW5kLmlzQWZ0ZXIoZW5kKVxuXHRyZXR1cm4gc3RhcnRzSW5SYW5nZSB8fCBlbmRzSW5SYW5nZSB8fCBzcGFuc1JhbmdlXG59XG4iLAogICAgImltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQge1xuXHREaWFsb2csXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0Rlc2NyaXB0aW9uLFxuXHREaWFsb2dGb290ZXIsXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nVGl0bGUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9kaWFsb2cnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmNvbnN0IFNDT1BFUyA9IFtcblx0e1xuXHRcdHNjb3BlOiAndGhpcycsXG5cdFx0dGl0bGU6ICd0aGlzRXZlbnQnLFxuXHRcdGVkaXRLZXk6ICdvbmx5Q2hhbmdlVGhpcycsXG5cdFx0ZGVsZXRlS2V5OiAnb25seURlbGV0ZVRoaXMnLFxuXHR9LFxuXHR7XG5cdFx0c2NvcGU6ICdmb2xsb3dpbmcnLFxuXHRcdHRpdGxlOiAndGhpc0FuZEZvbGxvd2luZ0V2ZW50cycsXG5cdFx0ZWRpdEtleTogJ2NoYW5nZVRoaXNBbmRGdXR1cmUnLFxuXHRcdGRlbGV0ZUtleTogJ2RlbGV0ZVRoaXNBbmRGdXR1cmUnLFxuXHR9LFxuXHR7XG5cdFx0c2NvcGU6ICdhbGwnLFxuXHRcdHRpdGxlOiAnYWxsRXZlbnRzJyxcblx0XHRlZGl0S2V5OiAnY2hhbmdlRW50aXJlU2VyaWVzJyxcblx0XHRkZWxldGVLZXk6ICdkZWxldGVFbnRpcmVTZXJpZXMnLFxuXHR9LFxuXSBhcyBjb25zdFxuXG5pbnRlcmZhY2UgUmVjdXJyZW5jZUVkaXREaWFsb2dQcm9wcyB7XG5cdGlzT3BlbjogYm9vbGVhblxuXHRvbkNsb3NlOiAoKSA9PiB2b2lkXG5cdG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB2b2lkXG5cdG9wZXJhdGlvblR5cGU6ICdlZGl0JyB8ICdkZWxldGUnXG5cdGV2ZW50VGl0bGU6IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVjdXJyZW5jZUVkaXREaWFsb2coe1xuXHRpc09wZW4sXG5cdG9uQ2xvc2UsXG5cdG9uQ29uZmlybSxcblx0b3BlcmF0aW9uVHlwZSxcblx0ZXZlbnRUaXRsZSxcbn06IFJlY3VycmVuY2VFZGl0RGlhbG9nUHJvcHMpIHtcblx0Y29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHsgdDogY29udGV4dC50IH0pKVxuXG5cdGNvbnN0IGhhbmRsZVNjb3BlU2VsZWN0ID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0b25Db25maXJtKHNjb3BlKVxuXHRcdG9uQ2xvc2UoKVxuXHR9XG5cblx0Y29uc3QgaXNFZGl0ID0gb3BlcmF0aW9uVHlwZSA9PT0gJ2VkaXQnXG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17b25DbG9zZX0gb3Blbj17aXNPcGVufT5cblx0XHRcdDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cIm1heC13LW1kXCI+XG5cdFx0XHRcdDxEaWFsb2dIZWFkZXI+XG5cdFx0XHRcdFx0PERpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdFx0e2lzRWRpdCA/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudCcpIDogdCgnZGVsZXRlUmVjdXJyaW5nRXZlbnQnKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdDxEaWFsb2dEZXNjcmlwdGlvbj5cblx0XHRcdFx0XHRcdFwie2V2ZW50VGl0bGV9XCJ7JyAnfVxuXHRcdFx0XHRcdFx0e2lzRWRpdFxuXHRcdFx0XHRcdFx0XHQ/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJylcblx0XHRcdFx0XHRcdFx0OiB0KCdkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dEZXNjcmlwdGlvbj5cblx0XHRcdFx0PC9EaWFsb2dIZWFkZXI+XG5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTNcIj5cblx0XHRcdFx0XHR7U0NPUEVTLm1hcCgoeyBzY29wZSwgdGl0bGUsIGVkaXRLZXksIGRlbGV0ZUtleSB9KSA9PiAoXG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuXHRcdFx0XHRcdFx0XHRrZXk9e3Njb3BlfVxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTY29wZVNlbGVjdChzY29wZSl9XG5cdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e3QodGl0bGUpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHt0KGlzRWRpdCA/IGVkaXRLZXkgOiBkZWxldGVLZXkpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdCkpfVxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHQ8RGlhbG9nRm9vdGVyPlxuXHRcdFx0XHRcdDxCdXR0b24gb25DbGljaz17b25DbG9zZX0gdmFyaWFudD1cIm91dGxpbmVcIj5cblx0XHRcdFx0XHRcdHt0KCdjYW5jZWwnKX1cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0PC9EaWFsb2dGb290ZXI+XG5cdFx0XHQ8L0RpYWxvZ0NvbnRlbnQ+XG5cdFx0PC9EaWFsb2c+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBEcmFnRW5kRXZlbnQgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJy4uL3R5cGVzJ1xuXG5pbnRlcmZhY2UgRHJvcENlbGxEYXRhIHtcblx0dHlwZT86IHN0cmluZ1xuXHRkYXRlPzogc3RyaW5nXG5cdGhvdXI/OiBudW1iZXJcblx0bWludXRlPzogbnVtYmVyXG5cdHJlc291cmNlSWQ/OiBzdHJpbmdcblx0YWxsRGF5PzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgZ2V0VXBkYXRlZEV2ZW50ID0gKFxuXHRldmVudDogRHJhZ0VuZEV2ZW50LFxuXHRhY3RpdmVFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcbikgPT4ge1xuXHRjb25zdCB7IGFjdGl2ZSwgb3ZlciB9ID0gZXZlbnRcblxuXHRpZiAoIWFjdGl2ZSB8fCAhb3ZlciB8fCAhYWN0aXZlRXZlbnQpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cblx0Y29uc3QgZGF0YSA9IChvdmVyLmRhdGEuY3VycmVudCB8fCB7fSkgYXMgRHJvcENlbGxEYXRhXG5cdGNvbnN0IGlzVGltZUNlbGwgPSBkYXRhLnR5cGUgPT09ICd0aW1lLWNlbGwnXG5cdGNvbnN0IHsgcmVzb3VyY2VJZCwgYWxsRGF5IH0gPSBkYXRhXG5cdGxldCBuZXdTdGFydDogRGF5anNcblxuXHRpZiAoaXNUaW1lQ2VsbCkge1xuXHRcdGNvbnN0IHsgZGF0ZSwgaG91ciA9IDAsIG1pbnV0ZSA9IDAgfSA9IGRhdGFcblxuXHRcdC8vIENyZWF0ZSBuZXcgc3RhcnQgdGltZSBiYXNlZCBvbiB0aGUgZHJvcCB0YXJnZXRcblx0XHRuZXdTdGFydCA9IGRheWpzKGRhdGUpLmhvdXIoaG91cikubWludXRlKG1pbnV0ZSlcblx0fSBlbHNlIHtcblx0XHRjb25zdCB7IGRhdGUgfSA9IGRhdGFcblxuXHRcdG5ld1N0YXJ0ID0gZGF5anMoZGF0ZSlcblx0fVxuXG5cdGNvbnN0IGV2ZW50RHVyYXRpb24gPSBhY3RpdmVFdmVudC5lbmQuZGlmZihhY3RpdmVFdmVudC5zdGFydCwgJ3NlY29uZCcpXG5cblx0Ly8gQ3JlYXRlIG5ldyBlbmQgdGltZSBieSBhZGRpbmcgdGhlIG9yaWdpbmFsIGR1cmF0aW9uXG5cdGxldCBuZXdFbmQgPSBuZXdTdGFydC5hZGQoZXZlbnREdXJhdGlvbiwgJ3NlY29uZCcpXG5cblx0aWYgKG5ld0VuZC5pc1NhbWUobmV3RW5kLnN0YXJ0T2YoJ2RheScpKSkge1xuXHRcdC8vIElmIHRoZSBuZXcgZW5kIHRpbWUgaXMgYXQgbWlkbmlnaHQsIHNldCBpdCB0byAyNCBob3VycyBvZiBwYXJ0aWFsIGRheVxuXHRcdG5ld0VuZCA9IG5ld0VuZC5zdWJ0cmFjdCgxLCAnZGF5JykuZW5kT2YoJ2RheScpXG5cdH1cblxuXHQvLyBVcGRhdGUgdGhlIGV2ZW50IHdpdGggbmV3IHRpbWVzIGFuZCByZXNvdXJjZSBpZiBjaGFuZ2VkXG5cdGNvbnN0IHVwZGF0ZXMgPSB7XG5cdFx0c3RhcnQ6IG5ld1N0YXJ0LFxuXHRcdGVuZDogbmV3RW5kLFxuXHRcdHJlc291cmNlSWQsXG5cdFx0YWxsRGF5OiBpc1RpbWVDZWxsID8gZmFsc2UgOiAoYWxsRGF5ID8/IGFjdGl2ZUV2ZW50LmFsbERheSksXG5cdH1cblx0cmV0dXJuIHsgYWN0aXZlRXZlbnQsIHVwZGF0ZXMgfVxufVxuIiwKICAgICJpbXBvcnQgeyBEcmFnT3ZlcmxheSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgeyBzbmFwQ2VudGVyVG9DdXJzb3IgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi4vdHlwZXMnXG5cbmludGVyZmFjZSBFdmVudERyYWdPdmVybGF5UHJvcHMge1xuXHRyZWY6IFJlYWN0LlJlZjx7IHNldEFjdGl2ZUV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWQgfT5cbn1cblxuZXhwb3J0IGNvbnN0IEV2ZW50RHJhZ092ZXJsYXk6IFJlYWN0LkZDPEV2ZW50RHJhZ092ZXJsYXlQcm9wcz4gPSAoeyByZWYgfSkgPT4ge1xuXHRjb25zdCBbYWN0aXZlRXZlbnQsIHNldEFjdGl2ZUV2ZW50XSA9IHVzZVN0YXRlPENhbGVuZGFyRXZlbnQgfCBudWxsPihudWxsKVxuXG5cdHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuXHRcdHNldEFjdGl2ZUV2ZW50LFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxEcmFnT3ZlcmxheSBtb2RpZmllcnM9e1tzbmFwQ2VudGVyVG9DdXJzb3JdfT5cblx0XHRcdHthY3RpdmVFdmVudCAmJiAoXG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2N1cnNvci1ncmFiIHRydW5jYXRlIHJvdW5kZWQgYmctYW1iZXItMjAwIHAtMiB0ZXh0LVsxMHB4XSBzaGFkb3ctbGcgc206dGV4dC14cyB3LTIwJyxcblx0XHRcdFx0XHRcdGFjdGl2ZUV2ZW50LmJhY2tncm91bmRDb2xvciB8fCAnYmctYmx1ZS01MDAnLFxuXHRcdFx0XHRcdFx0YWN0aXZlRXZlbnQuY29sb3IgfHwgJ3RleHQtd2hpdGUnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHthY3RpdmVFdmVudD8udGl0bGV9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KX1cblx0XHQ8L0RyYWdPdmVybGF5PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NoZWNrYm94J1xuaW1wb3J0IHsgRGF0ZVBpY2tlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9kYXRlLXBpY2tlcidcbmltcG9ydCB7IERpYWxvZ0Zvb3RlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9kaWFsb2cnXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9pbnB1dCdcbmltcG9ydCB7IExhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2xhYmVsJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IFRpbWVQaWNrZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvdGltZS1waWNrZXInXG5pbXBvcnQgeyBpc0J1c2luZXNzRGF5IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3VycydcbmltcG9ydCB7XG5cdGJ1aWxkRGF0ZVRpbWUsXG5cdGJ1aWxkRW5kRGF0ZVRpbWUsXG5cdGdldFRpbWVDb25zdHJhaW50cyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9ldmVudC1mb3JtLXV0aWxzJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXREaWFsb2cgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXRvciB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdG9yL3JlY3VycmVuY2UtZWRpdG9yJ1xuaW1wb3J0IHsgdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucydcbmltcG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgaXNSZWN1cnJpbmdFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgeyB1c2VFZmZlY3RpdmVCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9ob29rcy91c2UtZWZmZWN0aXZlLWJ1c2luZXNzLWhvdXJzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgQ09MT1JfT1BUSU9OUyA9IFtcblx0eyB2YWx1ZTogJ2JnLWJsdWUtMTAwIHRleHQtYmx1ZS04MDAnLCBsYWJlbDogJ0JsdWUnIH0sXG5cdHsgdmFsdWU6ICdiZy1ncmVlbi0xMDAgdGV4dC1ncmVlbi04MDAnLCBsYWJlbDogJ0dyZWVuJyB9LFxuXHR7IHZhbHVlOiAnYmctcHVycGxlLTEwMCB0ZXh0LXB1cnBsZS04MDAnLCBsYWJlbDogJ1B1cnBsZScgfSxcblx0eyB2YWx1ZTogJ2JnLXJlZC0xMDAgdGV4dC1yZWQtODAwJywgbGFiZWw6ICdSZWQnIH0sXG5cdHsgdmFsdWU6ICdiZy15ZWxsb3ctMTAwIHRleHQteWVsbG93LTgwMCcsIGxhYmVsOiAnWWVsbG93JyB9LFxuXHR7IHZhbHVlOiAnYmctcGluay0xMDAgdGV4dC1waW5rLTgwMCcsIGxhYmVsOiAnUGluaycgfSxcblx0eyB2YWx1ZTogJ2JnLWluZGlnby0xMDAgdGV4dC1pbmRpZ28tODAwJywgbGFiZWw6ICdJbmRpZ28nIH0sXG5cdHsgdmFsdWU6ICdiZy1hbWJlci0xMDAgdGV4dC1hbWJlci04MDAnLCBsYWJlbDogJ0FtYmVyJyB9LFxuXHR7IHZhbHVlOiAnYmctZW1lcmFsZC0xMDAgdGV4dC1lbWVyYWxkLTgwMCcsIGxhYmVsOiAnRW1lcmFsZCcgfSxcblx0eyB2YWx1ZTogJ2JnLXNreS0xMDAgdGV4dC1za3ktODAwJywgbGFiZWw6ICdTa3knIH0sXG5cdHsgdmFsdWU6ICdiZy12aW9sZXQtMTAwIHRleHQtdmlvbGV0LTgwMCcsIGxhYmVsOiAnVmlvbGV0JyB9LFxuXHR7IHZhbHVlOiAnYmctcm9zZS0xMDAgdGV4dC1yb3NlLTgwMCcsIGxhYmVsOiAnUm9zZScgfSxcblx0eyB2YWx1ZTogJ2JnLXRlYWwtMTAwIHRleHQtdGVhbC04MDAnLCBsYWJlbDogJ1RlYWwnIH0sXG5cdHsgdmFsdWU6ICdiZy1vcmFuZ2UtMTAwIHRleHQtb3JhbmdlLTgwMCcsIGxhYmVsOiAnT3JhbmdlJyB9LFxuXVxuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50Rm9ybVByb3BzIHtcblx0b3Blbj86IGJvb2xlYW5cblx0c2VsZWN0ZWRFdmVudD86IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdG9uQWRkPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uVXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uQ2xvc2U6ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IEV2ZW50Rm9ybTogUmVhY3QuRkM8RXZlbnRGb3JtUHJvcHM+ID0gKHtcblx0c2VsZWN0ZWRFdmVudCxcblx0b25DbG9zZSxcblx0b25VcGRhdGUsXG5cdG9uRGVsZXRlLFxuXHRvbkFkZCxcbn0pID0+IHtcblx0Y29uc3Qge1xuXHRcdGRpYWxvZ1N0YXRlLFxuXHRcdG9wZW5FZGl0RGlhbG9nLFxuXHRcdG9wZW5EZWxldGVEaWFsb2csXG5cdFx0Y2xvc2VEaWFsb2csXG5cdFx0aGFuZGxlQ29uZmlybSxcblx0fSA9IHVzZVJlY3VycmluZ0V2ZW50QWN0aW9ucyhvbkNsb3NlKVxuXG5cdGNvbnN0IHsgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LCB0LCB0aW1lRm9ybWF0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dChcblx0XHQoY29udGV4dCkgPT4gKHtcblx0XHRcdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudDogY29udGV4dC5maW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG5cdFx0XHR0OiBjb250ZXh0LnQsXG5cdFx0XHR0aW1lRm9ybWF0OiBjb250ZXh0LnRpbWVGb3JtYXQsXG5cdFx0fSlcblx0KVxuXHRjb25zdCBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzID0gdXNlRWZmZWN0aXZlQnVzaW5lc3NIb3Vycyhcblx0XHRzZWxlY3RlZEV2ZW50Py5yZXNvdXJjZUlkXG5cdClcblxuXHRjb25zdCBzdGFydCA9IHNlbGVjdGVkRXZlbnQ/LnN0YXJ0ID8/IGRheWpzKClcblx0Y29uc3QgZW5kID0gc2VsZWN0ZWRFdmVudD8uZW5kID8/IGRheWpzKCkuYWRkKDEsICdob3VyJylcblxuXHQvLyBGaW5kIHBhcmVudCBldmVudCBpZiB0aGlzIGlzIGEgcmVjdXJyaW5nIGV2ZW50IGluc3RhbmNlXG5cdGNvbnN0IHBhcmVudEV2ZW50ID0gc2VsZWN0ZWRFdmVudFxuXHRcdD8gZmluZFBhcmVudFJlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpXG5cdFx0OiBudWxsXG5cblx0Ly8gRm9ybSBzdGF0ZVxuXHRjb25zdCBbc3RhcnREYXRlLCBzZXRTdGFydERhdGVdID0gdXNlU3RhdGUoc3RhcnQudG9EYXRlKCkpXG5cdGNvbnN0IFtlbmREYXRlLCBzZXRFbmREYXRlXSA9IHVzZVN0YXRlKGVuZC50b0RhdGUoKSlcblx0Y29uc3QgW2lzQWxsRGF5LCBzZXRJc0FsbERheV0gPSB1c2VTdGF0ZShzZWxlY3RlZEV2ZW50Py5hbGxEYXkgfHwgZmFsc2UpXG5cdGNvbnN0IFtzZWxlY3RlZENvbG9yLCBzZXRTZWxlY3RlZENvbG9yXSA9IHVzZVN0YXRlKFxuXHRcdHNlbGVjdGVkRXZlbnQ/LmNvbG9yIHx8IENPTE9SX09QVElPTlNbMF0udmFsdWVcblx0KVxuXG5cdC8vIFRpbWUgc3RhdGVcblx0Y29uc3QgW3N0YXJ0VGltZSwgc2V0U3RhcnRUaW1lXSA9IHVzZVN0YXRlKHN0YXJ0LmZvcm1hdCgnSEg6bW0nKSlcblx0Y29uc3QgW2VuZFRpbWUsIHNldEVuZFRpbWVdID0gdXNlU3RhdGUoZW5kLmZvcm1hdCgnSEg6bW0nKSlcblxuXHQvLyBJbml0aWFsaXplIGZvcm0gdmFsdWVzIGZyb20gc2VsZWN0ZWQgZXZlbnQgb3IgZGVmYXVsdHNcblx0Y29uc3QgW2Zvcm1WYWx1ZXMsIHNldEZvcm1WYWx1ZXNdID0gdXNlU3RhdGUoe1xuXHRcdHRpdGxlOiBzZWxlY3RlZEV2ZW50Py50aXRsZSB8fCAnJyxcblx0XHRkZXNjcmlwdGlvbjogc2VsZWN0ZWRFdmVudD8uZGVzY3JpcHRpb24gfHwgJycsXG5cdFx0bG9jYXRpb246IHNlbGVjdGVkRXZlbnQ/LmxvY2F0aW9uIHx8ICcnLFxuXHR9KVxuXG5cdC8vIFJlY3VycmVuY2Ugc3RhdGUgLSBwdWxsIFJSVUxFIGZyb20gcGFyZW50IGlmIHRoaXMgaXMgYW4gaW5zdGFuY2Vcblx0Y29uc3QgW3JydWxlLCBzZXRScnVsZV0gPSB1c2VTdGF0ZTxSUnVsZU9wdGlvbnMgfCBudWxsPigoKSA9PiB7XG5cdFx0Y29uc3QgZXZlbnRScnVsZSA9IHNlbGVjdGVkRXZlbnQ/LnJydWxlIHx8IHBhcmVudEV2ZW50Py5ycnVsZVxuXHRcdHJldHVybiBldmVudFJydWxlIHx8IG51bGxcblx0fSlcblxuXHQvLyBDcmVhdGUgd3JhcHBlciBmdW5jdGlvbnMgdG8gZml4IFR5cGVTY3JpcHQgZXJyb3JzIHdpdGggRGF0ZVBpY2tlclxuXHRjb25zdCBoYW5kbGVTdGFydERhdGVDaGFuZ2UgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuXHRcdGlmICghZGF0ZSkgcmV0dXJuXG5cdFx0c2V0U3RhcnREYXRlKGRhdGUpXG5cdFx0aWYgKGRheWpzKGRhdGUpLmlzQWZ0ZXIoZGF5anMoZW5kRGF0ZSkpKSB7XG5cdFx0XHRzZXRFbmREYXRlKGRhdGUpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRW5kRGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0aWYgKCFkYXRlKSByZXR1cm5cblx0XHRzZXRFbmREYXRlKGRhdGUpXG5cdFx0aWYgKGRhdGUgJiYgZGF5anMoZGF0ZSkuaXNCZWZvcmUoZGF5anMoc3RhcnREYXRlKSkpIHtcblx0XHRcdHNldFN0YXJ0RGF0ZShkYXRlKVxuXHRcdH1cblx0fVxuXG5cdC8vIFRpbWUgdmFsaWRhdGlvbiBoYW5kbGVycyAtIG9ubHkgdmFsaWRhdGUgd2hlbiBkYXRlcyBhcmUgdGhlIHNhbWVcblx0Y29uc3QgaGFuZGxlU3RhcnRUaW1lQ2hhbmdlID0gKHRpbWU6IHN0cmluZykgPT4ge1xuXHRcdHNldFN0YXJ0VGltZSh0aW1lKVxuXHRcdC8vIE9ubHkgdmFsaWRhdGUgaWYgc2FtZSBkYXlcblx0XHRpZiAoZGF5anMoc3RhcnREYXRlKS5pc1NhbWUoZGF5anMoZW5kRGF0ZSksICdkYXknKSAmJiB0aW1lID4gZW5kVGltZSkge1xuXHRcdFx0c2V0RW5kVGltZSh0aW1lKVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGhhbmRsZUVuZFRpbWVDaGFuZ2UgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0c2V0RW5kVGltZSh0aW1lKVxuXHRcdC8vIE9ubHkgdmFsaWRhdGUgaWYgc2FtZSBkYXlcblx0XHRpZiAoZGF5anMoc3RhcnREYXRlKS5pc1NhbWUoZGF5anMoZW5kRGF0ZSksICdkYXknKSAmJiB0aW1lIDwgc3RhcnRUaW1lKSB7XG5cdFx0XHRzZXRTdGFydFRpbWUodGltZSlcblx0XHR9XG5cdH1cblxuXHQvLyBVcGRhdGUgZm9ybSB2YWx1ZXMgd2hlbiBpbnB1dCBjaGFuZ2VzXG5cdGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gKFxuXHRcdGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PlxuXHQpID0+IHtcblx0XHRjb25zdCB7IG5hbWUsIHZhbHVlIH0gPSBlLnRhcmdldFxuXHRcdHNldEZvcm1WYWx1ZXMoKHByZXYpID0+ICh7IC4uLnByZXYsIFtuYW1lXTogdmFsdWUgfSkpXG5cdH1cblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdC8vIFJlc2V0IGVuZCB0aW1lIHdoZW4gYWxsIGRheSBpcyB0b2dnbGVkIHRvIG9uXG5cdFx0aWYgKGlzQWxsRGF5KSB7XG5cdFx0XHRzZXRFbmRUaW1lKCcyMzo1OScpXG5cdFx0fVxuXHR9LCBbaXNBbGxEYXldKVxuXG5cdGNvbnN0IGhhbmRsZVN1Ym1pdCA9IChlOiBSZWFjdC5Gb3JtRXZlbnQpID0+IHtcblx0XHRlLnByZXZlbnREZWZhdWx0KClcblxuXHRcdGNvbnN0IHN0YXJ0RGF0ZVRpbWUgPSBidWlsZERhdGVUaW1lKHN0YXJ0RGF0ZSwgc3RhcnRUaW1lLCBpc0FsbERheSlcblx0XHRjb25zdCBlbmREYXRlVGltZSA9IGJ1aWxkRW5kRGF0ZVRpbWUoZW5kRGF0ZSwgZW5kVGltZSwgaXNBbGxEYXkpXG5cblx0XHRjb25zdCBldmVudERhdGE6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRpZDogc2VsZWN0ZWRFdmVudD8uaWQgfHwgZGF5anMoKS5mb3JtYXQoJ1lZWVlNTURESEhtbXNzJyksXG5cdFx0XHR0aXRsZTogZm9ybVZhbHVlcy50aXRsZSxcblx0XHRcdHN0YXJ0OiBzdGFydERhdGVUaW1lLFxuXHRcdFx0ZW5kOiBlbmREYXRlVGltZSxcblx0XHRcdHJlc291cmNlSWQ6IHNlbGVjdGVkRXZlbnQ/LnJlc291cmNlSWQsXG5cdFx0XHRkZXNjcmlwdGlvbjogZm9ybVZhbHVlcy5kZXNjcmlwdGlvbixcblx0XHRcdGxvY2F0aW9uOiBmb3JtVmFsdWVzLmxvY2F0aW9uLFxuXHRcdFx0YWxsRGF5OiBpc0FsbERheSxcblx0XHRcdGNvbG9yOiBzZWxlY3RlZENvbG9yLFxuXHRcdFx0cnJ1bGU6IHJydWxlIHx8IHVuZGVmaW5lZCxcblx0XHR9XG5cblx0XHRpZiAoc2VsZWN0ZWRFdmVudD8uaWQgJiYgaXNSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KSkge1xuXHRcdFx0b3BlbkVkaXREaWFsb2coc2VsZWN0ZWRFdmVudCwge1xuXHRcdFx0XHR0aXRsZTogZm9ybVZhbHVlcy50aXRsZSxcblx0XHRcdFx0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG5cdFx0XHRcdGVuZDogZW5kRGF0ZVRpbWUsXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiBmb3JtVmFsdWVzLmRlc2NyaXB0aW9uLFxuXHRcdFx0XHRsb2NhdGlvbjogZm9ybVZhbHVlcy5sb2NhdGlvbixcblx0XHRcdFx0YWxsRGF5OiBpc0FsbERheSxcblx0XHRcdFx0Y29sb3I6IHNlbGVjdGVkQ29sb3IsXG5cdFx0XHRcdHJydWxlOiBycnVsZSB8fCB1bmRlZmluZWQsXG5cdFx0XHR9KVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0aWYgKHNlbGVjdGVkRXZlbnQ/LmlkKSB7XG5cdFx0XHRvblVwZGF0ZT8uKGV2ZW50RGF0YSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0b25BZGQ/LihldmVudERhdGEpXG5cdFx0fVxuXHRcdG9uQ2xvc2UoKVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRGVsZXRlID0gKCkgPT4ge1xuXHRcdGlmIChzZWxlY3RlZEV2ZW50Py5pZCkge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhpcyBpcyBhIHJlY3VycmluZyBldmVudFxuXHRcdFx0aWYgKGlzUmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudCkpIHtcblx0XHRcdFx0Ly8gU2hvdyByZWN1cnJpbmcgZXZlbnQgZGVsZXRlIGRpYWxvZ1xuXHRcdFx0XHRvcGVuRGVsZXRlRGlhbG9nKHNlbGVjdGVkRXZlbnQpXG5cdFx0XHRcdHJldHVybiAvLyBEb24ndCBjbG9zZSB0aGUgZm9ybSB5ZXQsIGxldCB0aGUgZGlhbG9nIGhhbmRsZSBpdFxuXHRcdFx0fVxuXHRcdFx0b25EZWxldGU/LihzZWxlY3RlZEV2ZW50KVxuXHRcdFx0b25DbG9zZSgpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlUlJ1bGVDaGFuZ2UgPSAobmV3UlJ1bGU6IFJSdWxlT3B0aW9ucyB8IG51bGwpID0+IHtcblx0XHRpZiAoIW5ld1JSdWxlKSB7XG5cdFx0XHRzZXRScnVsZShudWxsKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGNvbnN0IHN0YXJ0RGF0ZVRpbWUgPSBidWlsZERhdGVUaW1lKHN0YXJ0RGF0ZSwgc3RhcnRUaW1lLCBpc0FsbERheSlcblx0XHRzZXRScnVsZSh7IC4uLm5ld1JSdWxlLCBkdHN0YXJ0OiBzdGFydERhdGVUaW1lLnRvRGF0ZSgpIH0pXG5cdH1cblxuXHRjb25zdCBkaXNhYmxlZERhdGVNYXRjaGVyID0gZWZmZWN0aXZlQnVzaW5lc3NIb3Vyc1xuXHRcdD8gKGRhdGU6IERhdGUpID0+ICFpc0J1c2luZXNzRGF5KGRheWpzKGRhdGUpLCBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzKVxuXHRcdDogdW5kZWZpbmVkXG5cblx0Y29uc3Qgc3RhcnRDb25zdHJhaW50cyA9IGdldFRpbWVDb25zdHJhaW50cyhzdGFydERhdGUsIGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMpXG5cdGNvbnN0IGVuZENvbnN0cmFpbnRzID0gZ2V0VGltZUNvbnN0cmFpbnRzKGVuZERhdGUsIGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMpXG5cblx0Ly8gTG9jYWwgY29tcG9uZW50IGZvciB0aXRsZSAvIGRlc2NyaXB0aW9uIC8gbG9jYXRpb24gdGV4dCBpbnB1dHMuXG5cdC8vIFRoZXkgc2hhcmUgaWRlbnRpY2FsIG1hcmt1cDsgb25seSBsYWJlbC9wbGFjZWhvbGRlci92YWx1ZSBkaWZmZXIuXG5cdHR5cGUgVGV4dEZpZWxkTmFtZSA9ICd0aXRsZScgfCAnZGVzY3JpcHRpb24nIHwgJ2xvY2F0aW9uJ1xuXHRjb25zdCBUZXh0RmllbGQgPSAoe1xuXHRcdG5hbWUsXG5cdFx0cGxhY2Vob2xkZXIsXG5cdFx0cmVxdWlyZWQgPSBmYWxzZSxcblx0fToge1xuXHRcdG5hbWU6IFRleHRGaWVsZE5hbWVcblx0XHRwbGFjZWhvbGRlcjogc3RyaW5nXG5cdFx0cmVxdWlyZWQ/OiBib29sZWFuXG5cdH0pID0+IChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cblx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIiBodG1sRm9yPXtuYW1lfT5cblx0XHRcdFx0e3QobmFtZSl9XG5cdFx0XHQ8L0xhYmVsPlxuXHRcdFx0PElucHV0XG5cdFx0XHRcdGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdGlkPXtuYW1lfVxuXHRcdFx0XHRuYW1lPXtuYW1lfVxuXHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG5cdFx0XHRcdHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cblx0XHRcdFx0cmVxdWlyZWQ9e3JlcXVpcmVkfVxuXHRcdFx0XHR2YWx1ZT17Zm9ybVZhbHVlc1tuYW1lXX1cblx0XHRcdC8+XG5cdFx0PC9kaXY+XG5cdClcblxuXHRjb25zdCBkYXRlRmllbGRzID0gW1xuXHRcdFsnc3RhcnREYXRlJywgc3RhcnREYXRlLCBoYW5kbGVTdGFydERhdGVDaGFuZ2VdLFxuXHRcdFsnZW5kRGF0ZScsIGVuZERhdGUsIGhhbmRsZUVuZERhdGVDaGFuZ2VdLFxuXHRdIGFzIGNvbnN0XG5cblx0Y29uc3QgdGltZUZpZWxkcyA9IFtcblx0XHRbXG5cdFx0XHQnc3RhcnRUaW1lJyxcblx0XHRcdCdzdGFydC10aW1lJyxcblx0XHRcdHN0YXJ0VGltZSxcblx0XHRcdGhhbmRsZVN0YXJ0VGltZUNoYW5nZSxcblx0XHRcdHN0YXJ0Q29uc3RyYWludHMsXG5cdFx0XSxcblx0XHRbJ2VuZFRpbWUnLCAnZW5kLXRpbWUnLCBlbmRUaW1lLCBoYW5kbGVFbmRUaW1lQ2hhbmdlLCBlbmRDb25zdHJhaW50c10sXG5cdF0gYXMgY29uc3RcblxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8Zm9ybSBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGZsZXgtMSBtaW4taC0wXCIgb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0+XG5cdFx0XHRcdDxTY3JvbGxBcmVhIGNsYXNzTmFtZT1cImZsZXgtMSBtaW4taC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0zIHNtOmdhcC00IHAtMVwiPlxuXHRcdFx0XHRcdFx0PFRleHRGaWVsZFxuXHRcdFx0XHRcdFx0XHRuYW1lPVwidGl0bGVcIlxuXHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnZXZlbnRUaXRsZVBsYWNlaG9sZGVyJyl9XG5cdFx0XHRcdFx0XHRcdHJlcXVpcmVkXG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PFRleHRGaWVsZFxuXHRcdFx0XHRcdFx0XHRuYW1lPVwiZGVzY3JpcHRpb25cIlxuXHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnZXZlbnREZXNjcmlwdGlvblBsYWNlaG9sZGVyJyl9XG5cdFx0XHRcdFx0XHQvPlxuXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRjaGVja2VkPXtpc0FsbERheX1cblx0XHRcdFx0XHRcdFx0XHRpZD1cImFsbERheVwiXG5cdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoY2hlY2tlZCkgPT4gc2V0SXNBbGxEYXkoY2hlY2tlZCA9PT0gdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIiBodG1sRm9yPVwiYWxsRGF5XCI+XG5cdFx0XHRcdFx0XHRcdFx0e3QoJ2FsbERheScpfVxuXHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtMiBzbTpnYXAtNFwiPlxuXHRcdFx0XHRcdFx0XHR7ZGF0ZUZpZWxkcy5tYXAoKFtsYWJlbCwgZGF0ZSwgb25DaGFuZ2VdKSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBrZXk9e2xhYmVsfT5cblx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dChsYWJlbCl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdDxEYXRlUGlja2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU9uU2VsZWN0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGU9e2RhdGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkPXtkaXNhYmxlZERhdGVNYXRjaGVyfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17b25DaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHR7IWlzQWxsRGF5ICYmIChcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC0yIHNtOmdhcC00XCI+XG5cdFx0XHRcdFx0XHRcdFx0e3RpbWVGaWVsZHMubWFwKChbbGFiZWwsIG5hbWUsIHZhbHVlLCBvbkNoYW5nZSwgY10pID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYga2V5PXtsYWJlbH0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dChsYWJlbCl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PFRpbWVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtdC0xIGgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4VGltZT17Yy5tYXh9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWluVGltZT17Yy5taW59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZT17bmFtZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17b25DaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9e3QoJ3NlYXJjaFRpbWUnKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXt2YWx1ZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdCl9XG5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMSBzbTpnYXAtMlwiPlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ2NvbG9yJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMlwiPlxuXHRcdFx0XHRcdFx0XHRcdHtDT0xPUl9PUFRJT05TLm1hcCgoY29sb3IpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYS1sYWJlbD17Y29sb3IubGFiZWx9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YCR7Y29sb3IudmFsdWV9IGgtNiB3LTYgcm91bmRlZC1mdWxsIHNtOmgtOCBzbTp3LThgLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNlbGVjdGVkQ29sb3IgPT09IGNvbG9yLnZhbHVlICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQncmluZy0yIHJpbmctYmxhY2sgcmluZy1vZmZzZXQtMSBzbTpyaW5nLW9mZnNldC0yJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2NvbG9yLnZhbHVlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZXRTZWxlY3RlZENvbG9yKGNvbG9yLnZhbHVlKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHQ8VGV4dEZpZWxkXG5cdFx0XHRcdFx0XHRcdG5hbWU9XCJsb2NhdGlvblwiXG5cdFx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPXt0KCdldmVudExvY2F0aW9uUGxhY2Vob2xkZXInKX1cblx0XHRcdFx0XHRcdC8+XG5cblx0XHRcdFx0XHRcdHsvKiBSZWN1cnJlbmNlIFNlY3Rpb24gKi99XG5cdFx0XHRcdFx0XHQ8UmVjdXJyZW5jZUVkaXRvciBvbkNoYW5nZT17aGFuZGxlUlJ1bGVDaGFuZ2V9IHZhbHVlPXtycnVsZX0gLz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9TY3JvbGxBcmVhPlxuXG5cdFx0XHRcdDxEaWFsb2dGb290ZXIgY2xhc3NOYW1lPVwibXQtNCBzaHJpbmstMCBmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgc206ZmxleC1yb3cgc206Z2FwLTBcIj5cblx0XHRcdFx0XHR7c2VsZWN0ZWRFdmVudD8uaWQgJiYgKFxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgc206bXItYXV0byBzbTp3LWF1dG9cIlxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtoYW5kbGVEZWxldGV9XG5cdFx0XHRcdFx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZGVzdHJ1Y3RpdmVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7dCgnZGVsZXRlJyl9XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgZ2FwLTIgc206dy1hdXRvXCI+XG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXgtMSBzbTpmbGV4LW5vbmVcIlxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtvbkNsb3NlfVxuXHRcdFx0XHRcdFx0XHRzaXplPVwic21cIlxuXHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7dCgnY2FuY2VsJyl9XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdDxCdXR0b24gY2xhc3NOYW1lPVwiZmxleC0xIHNtOmZsZXgtbm9uZVwiIHNpemU9XCJzbVwiIHR5cGU9XCJzdWJtaXRcIj5cblx0XHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgndXBkYXRlJykgOiB0KCdjcmVhdGUnKX1cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0RpYWxvZ0Zvb3Rlcj5cblx0XHRcdDwvZm9ybT5cblxuXHRcdFx0ey8qIFJlY3VycmluZyBFdmVudCBFZGl0IERpYWxvZyAqL31cblx0XHRcdDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuXHRcdFx0XHRldmVudFRpdGxlPXtkaWFsb2dTdGF0ZS5ldmVudD8udGl0bGUgfHwgJyd9XG5cdFx0XHRcdGlzT3Blbj17ZGlhbG9nU3RhdGUuaXNPcGVufVxuXHRcdFx0XHRvbkNsb3NlPXtjbG9zZURpYWxvZ31cblx0XHRcdFx0b25Db25maXJtPXtoYW5kbGVDb25maXJtfVxuXHRcdFx0XHRvcGVyYXRpb25UeXBlPXtkaWFsb2dTdGF0ZS5vcGVyYXRpb25UeXBlfVxuXHRcdFx0Lz5cblx0XHQ8Lz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBDaGVja2JveFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtY2hlY2tib3gnXG5pbXBvcnQgeyBDaGVja0ljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDaGVja2JveCh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBDaGVja2JveFByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxDaGVja2JveFByaW1pdGl2ZS5Sb290XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQncGVlciBib3JkZXItaW5wdXQgZGFyazpiZy1pbnB1dC8zMCBkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1wcmltYXJ5IGRhdGEtW3N0YXRlPWNoZWNrZWRdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6ZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTpib3JkZXItcHJpbWFyeSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBzaXplLTQgc2hyaW5rLTAgcm91bmRlZC1bNHB4XSBib3JkZXIgc2hhZG93LXhzIHRyYW5zaXRpb24tc2hhZG93IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjaGVja2JveFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvclxuXHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWN1cnJlbnQgdHJhbnNpdGlvbi1ub25lXCJcblx0XHRcdFx0ZGF0YS1zbG90PVwiY2hlY2tib3gtaW5kaWNhdG9yXCJcblx0XHRcdD5cblx0XHRcdFx0PENoZWNrSWNvbiBjbGFzc05hbWU9XCJzaXplLTMuNVwiIC8+XG5cdFx0XHQ8L0NoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvcj5cblx0XHQ8L0NoZWNrYm94UHJpbWl0aXZlLlJvb3Q+XG5cdClcbn1cblxuZXhwb3J0IHsgQ2hlY2tib3ggfVxuIiwKICAgICJpbXBvcnQgeyBQb3BvdmVyQ2xvc2UgfSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtcG9wb3ZlcidcbmltcG9ydCB7IENhbGVuZGFyIGFzIENhbGVuZGFySWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NhbGVuZGFyJ1xuaW1wb3J0IHtcblx0UG9wb3Zlcixcblx0UG9wb3ZlckNvbnRlbnQsXG5cdFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBEYXRlUGlja2VyUHJvcHMge1xuXHRkYXRlOiBEYXRlIHwgdW5kZWZpbmVkXG5cdG9uQ2hhbmdlPzogKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHZvaWRcblx0bGFiZWw/OiBzdHJpbmdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGNsb3NlT25TZWxlY3Q/OiBib29sZWFuXG5cdGRpc2FibGVkPzogKGRhdGU6IERhdGUpID0+IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERhdGVQaWNrZXIoe1xuXHRkYXRlLFxuXHRjbG9zZU9uU2VsZWN0LFxuXHRvbkNoYW5nZSxcblx0bGFiZWwgPSAnUGljayBhIGRhdGUnLFxuXHRjbGFzc05hbWUsXG5cdGRpc2FibGVkLFxufTogRGF0ZVBpY2tlclByb3BzKSB7XG5cdGNvbnN0IHBvcE92ZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsPihudWxsKVxuXHRjb25zdCBbc2VsZWN0ZWREYXRlLCBzZXRTZWxlY3RlZERhdGVdID0gdXNlU3RhdGU8RGF0ZSB8IHVuZGVmaW5lZD4oZGF0ZSlcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdHNldFNlbGVjdGVkRGF0ZShkYXRlKVxuXHR9LCBbZGF0ZV0pXG5cblx0Y29uc3QgaGFuZGxlRGF0ZVNlbGVjdCA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0c2V0U2VsZWN0ZWREYXRlKGRhdGUpXG5cdFx0aWYgKGNsb3NlT25TZWxlY3QpIHtcblx0XHRcdHBvcE92ZXJSZWYuY3VycmVudD8uY2xpY2soKVxuXHRcdH1cblx0XHRvbkNoYW5nZT8uKGRhdGUpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuXHRcdFx0PFBvcG92ZXI+XG5cdFx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdCdkYXRhLVtlbXB0eT10cnVlXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgdy1mdWxsIGp1c3RpZnktc3RhcnQgdGV4dC1sZWZ0IGZvbnQtbm9ybWFsJ1xuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdGRhdGEtZW1wdHk9eyFkYXRlfVxuXHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxDYWxlbmRhckljb24gLz5cblx0XHRcdFx0XHRcdHtzZWxlY3RlZERhdGUgPyAoXG5cdFx0XHRcdFx0XHRcdGRheWpzKHNlbGVjdGVkRGF0ZSkuZm9ybWF0KCdNTU0gRCwgWVlZWScpXG5cdFx0XHRcdFx0XHQpIDogKFxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj57bGFiZWx9PC9zcGFuPlxuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0PC9Qb3BvdmVyVHJpZ2dlcj5cblx0XHRcdFx0PFBvcG92ZXJDb250ZW50IGFsaWduPVwic3RhcnRcIiBjbGFzc05hbWU9XCJ3LWF1dG8gcC0wXCI+XG5cdFx0XHRcdFx0PFBvcG92ZXJDbG9zZSByZWY9e3BvcE92ZXJSZWZ9IHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fSAvPlxuXHRcdFx0XHRcdDxDYWxlbmRhclxuXHRcdFx0XHRcdFx0ZGVmYXVsdE1vbnRoPXtzZWxlY3RlZERhdGV9XG5cdFx0XHRcdFx0XHRkaXNhYmxlZD17ZGlzYWJsZWR9XG5cdFx0XHRcdFx0XHRvblNlbGVjdD17aGFuZGxlRGF0ZVNlbGVjdH1cblx0XHRcdFx0XHRcdHNlbGVjdGVkPXtzZWxlY3RlZERhdGV9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHRcdDwvUG9wb3Zlcj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBDaGV2cm9uTGVmdEljb24sIENoZXZyb25SaWdodEljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0TW9udGhXZWVrcywgaXNUb2RheSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmludGVyZmFjZSBDYWxlbmRhclByb3BzIHtcblx0c2VsZWN0ZWQ/OiBEYXRlXG5cdGRlZmF1bHRNb250aD86IERhdGVcblx0b25TZWxlY3Q/OiAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4gdm9pZFxuXHRkaXNhYmxlZD86IChkYXRlOiBEYXRlKSA9PiBib29sZWFuXG5cdGZpcnN0RGF5T2ZXZWVrPzogbnVtYmVyXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBXRUVLREFZX0xBQkVMUyA9IFsnUycsICdNJywgJ1QnLCAnVycsICdUJywgJ0YnLCAnUyddXG5cbmV4cG9ydCBmdW5jdGlvbiBDYWxlbmRhcih7XG5cdHNlbGVjdGVkLFxuXHRkZWZhdWx0TW9udGgsXG5cdG9uU2VsZWN0LFxuXHRkaXNhYmxlZCxcblx0Zmlyc3REYXlPZldlZWsgPSAwLFxuXHRjbGFzc05hbWUsXG59OiBDYWxlbmRhclByb3BzKSB7XG5cdGNvbnN0IFt2aWV3TW9udGgsIHNldFZpZXdNb250aF0gPSB1c2VTdGF0ZTxEYXlqcz4oKCkgPT5cblx0XHRkYXlqcyhkZWZhdWx0TW9udGggPz8gc2VsZWN0ZWQgPz8gbmV3IERhdGUoKSkuc3RhcnRPZignbW9udGgnKVxuXHQpXG5cblx0Y29uc3Qgd2Vla3MgPSBnZXRNb250aFdlZWtzKHZpZXdNb250aCwgZmlyc3REYXlPZldlZWspXG5cdGNvbnN0IHNlbGVjdGVkS2V5ID0gc2VsZWN0ZWRcblx0XHQ/IGRheWpzKHNlbGVjdGVkKS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXHRcdDogdW5kZWZpbmVkXG5cdGNvbnN0IHdlZWtkYXlIZWFkZXJzID0gQXJyYXkuZnJvbShcblx0XHR7IGxlbmd0aDogNyB9LFxuXHRcdChfLCBpKSA9PiBXRUVLREFZX0xBQkVMU1soZmlyc3REYXlPZldlZWsgKyBpKSAlIDddXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2JnLWJhY2tncm91bmQgcC0zIHctWzI4MHB4XScsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYWxlbmRhclwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gbWItMlwiPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0YXJpYS1sYWJlbD1cIlByZXZpb3VzIG1vbnRoXCJcblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZXRWaWV3TW9udGgoKG0pID0+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+XG5jb25zdCBXRUVLREFZUyA9IFtcblx0UlJ1bGUuU1UsXG5cdFJSdWxlLk1PLFxuXHRSUnVsZS5UVSxcblx0UlJ1bGUuV0UsXG5cdFJSdWxlLlRILFxuXHRSUnVsZS5GUixcblx0UlJ1bGUuU0EsXG5dXG5jb25zdCBEQVlfS0VZUyA9IFsnc3VuJywgJ21vbicsICd0dWUnLCAnd2VkJywgJ3RodScsICdmcmknLCAnc2F0J11cbmNvbnN0IEVORF9UWVBFUyA9IFtcblx0eyB0eXBlOiAnbmV2ZXInLCBpZDogJ25ldmVyJywgbGFiZWxLZXk6ICduZXZlcicgfSxcblx0eyB0eXBlOiAnY291bnQnLCBpZDogJ2FmdGVyJywgbGFiZWxLZXk6ICdhZnRlcicgfSxcblx0eyB0eXBlOiAndW50aWwnLCBpZDogJ29uJywgbGFiZWxLZXk6ICdvbicgfSxcbl0gYXMgY29uc3RcbmNvbnN0IHBhcnNlTnVtID0gKHY6IHN0cmluZykgPT4gTWF0aC5tYXgoMSwgTnVtYmVyLnBhcnNlSW50KHYsIDEwKSB8fCAxKVxuXG5jb25zdCBnZXREZXNjcmlwdGlvbiA9IChcblx0b3B0czogUlJ1bGVPcHRpb25zIHwgbnVsbCxcblx0dDogKGs6IHN0cmluZykgPT4gc3RyaW5nXG4pID0+IHtcblx0aWYgKCFvcHRzKSB7XG5cdFx0cmV0dXJuIHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuXHR9XG5cdHRyeSB7XG5cdFx0Y29uc3QgdGV4dCA9IG5ldyBSUnVsZShvcHRzKS50b1RleHQoKVxuXHRcdHJldHVybiB0ZXh0ICYmICF0ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Vycm9yJylcblx0XHRcdD8gdGV4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRleHQuc2xpY2UoMSlcblx0XHRcdDogdCgnY3VzdG9tUmVjdXJyZW5jZScpXG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiB0KCdjdXN0b21SZWN1cnJlbmNlJylcblx0fVxufVxuXG5pbnRlcmZhY2UgUHJvcHMge1xuXHR2YWx1ZT86IFJSdWxlT3B0aW9ucyB8IG51bGxcblx0b25DaGFuZ2U6ICh2OiBSUnVsZU9wdGlvbnMgfCBudWxsKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBjb25zdCBSZWN1cnJlbmNlRWRpdG9yOiBSZWFjdC5GQzxQcm9wcz4gPSAoeyB2YWx1ZSwgb25DaGFuZ2UgfSkgPT4ge1xuXHRjb25zdCB7IHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjdHgpID0+ICh7IHQ6IGN0eC50IH0pKVxuXHRjb25zdCBbc2hvdywgc2V0U2hvd10gPSB1c2VTdGF0ZSghIXZhbHVlKVxuXHRjb25zdCBbb3B0cywgc2V0T3B0c10gPSB1c2VTdGF0ZTxSUnVsZU9wdGlvbnMgfCBudWxsPigoKSA9PiB2YWx1ZSB8fCBudWxsKVxuXG5cdGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBEQVlfS0VZUy5tYXAoKGssIGkpID0+ICh7IHZhbHVlOiBXRUVLREFZU1tpXSwgbGFiZWw6IHQoaykgfSkpLFxuXHRcdFt0XVxuXHQpXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRzZXRTaG93KCEhdmFsdWUpXG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRzZXRPcHRzKHZhbHVlKVxuXHRcdH1cblx0fSwgW3ZhbHVlXSlcblxuXHRjb25zdCB1cGRhdGUgPSAodTogUGFydGlhbDxSUnVsZU9wdGlvbnM+KSA9PiB7XG5cdFx0aWYgKCFvcHRzKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0Y29uc3QgbmV4dCA9IHsgLi4ub3B0cywgLi4udSB9XG5cdFx0c2V0T3B0cyhuZXh0KVxuXHRcdG9uQ2hhbmdlKHNob3cgPyBuZXh0IDogbnVsbClcblx0fVxuXG5cdGNvbnN0IHRvZ2dsZSA9IChjaGVja2VkOiBib29sZWFuKSA9PiB7XG5cdFx0c2V0U2hvdyhjaGVja2VkKVxuXHRcdGlmICghY2hlY2tlZCkge1xuXHRcdFx0b25DaGFuZ2UobnVsbClcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRpZiAob3B0cykge1xuXHRcdFx0b25DaGFuZ2Uob3B0cylcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRjb25zdCBkZWYgPSB7IGZyZXE6IFJSdWxlLkRBSUxZLCBpbnRlcnZhbDogMSB9IGFzIFJSdWxlT3B0aW9uc1xuXHRcdHNldE9wdHMoZGVmKVxuXHRcdG9uQ2hhbmdlKGRlZilcblx0fVxuXG5cdGNvbnN0IHRvZ2dsZURheSA9IChpOiBudW1iZXIpID0+IHtcblx0XHRjb25zdCBjdXJyID0gKG9wdHM/LmJ5d2Vla2RheSBhcyBXZWVrZGF5W10pIHx8IFtdXG5cdFx0Y29uc3QgZGF5ID0gV0VFS0RBWVNbaV1cblx0XHRjb25zdCBuZXh0ID0gY3Vyci5pbmNsdWRlcyhkYXkpXG5cdFx0XHQ/IGN1cnIuZmlsdGVyKChkKSA9PiBkICE9PSBkYXkpXG5cdFx0XHQ6IFsuLi5jdXJyLCBkYXldXG5cdFx0dXBkYXRlKHsgYnl3ZWVrZGF5OiBuZXh0Lmxlbmd0aCA/IG5leHQgOiB1bmRlZmluZWQgfSlcblx0fVxuXG5cdGNvbnN0IHNldEVuZFR5cGUgPSAodHlwZTogJ25ldmVyJyB8ICdjb3VudCcgfCAndW50aWwnKSA9PiB7XG5cdFx0Y29uc3QgdTogUGFydGlhbDxSUnVsZU9wdGlvbnM+ID0geyBjb3VudDogdW5kZWZpbmVkLCB1bnRpbDogdW5kZWZpbmVkIH1cblx0XHRpZiAodHlwZSA9PT0gJ2NvdW50Jykge1xuXHRcdFx0dS5jb3VudCA9IG9wdHM/LmNvdW50IHx8IDFcblx0XHR9XG5cdFx0aWYgKHR5cGUgPT09ICd1bnRpbCcpIHtcblx0XHRcdHUudW50aWwgPSBvcHRzPy51bnRpbCB8fCBkYXlqcygpLmFkZCgxLCAnbW9udGgnKS5lbmRPZignZGF5JykudG9EYXRlKClcblx0XHR9XG5cdFx0dXBkYXRlKHUpXG5cdH1cblxuXHRjb25zdCBlbmRUeXBlID0gb3B0cz8udW50aWwgPyAndW50aWwnIDogb3B0cz8uY291bnQgPyAnY291bnQnIDogJ25ldmVyJ1xuXHRjb25zdCBmcmVxID0gRlJFUV9UT19TVFJbb3B0cz8uZnJlcSA/PyBSUnVsZS5EQUlMWV0gfHwgJ0RBSUxZJ1xuXHRjb25zdCBieXdlZWtkYXkgPSBBcnJheS5pc0FycmF5KG9wdHM/LmJ5d2Vla2RheSlcblx0XHQ/IG9wdHMuYnl3ZWVrZGF5XG5cdFx0OiBvcHRzPy5ieXdlZWtkYXlcblx0XHRcdD8gW29wdHMuYnl3ZWVrZGF5XVxuXHRcdFx0OiBbXVxuXG5cdHJldHVybiAoXG5cdFx0PENhcmQgZGF0YS10ZXN0aWQ9XCJyZWN1cnJlbmNlLWVkaXRvclwiPlxuXHRcdFx0PENhcmRIZWFkZXIgY2xhc3NOYW1lPVwicGItM1wiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0Y2hlY2tlZD17c2hvd31cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwidG9nZ2xlLXJlY3VycmVuY2VcIlxuXHRcdFx0XHRcdFx0aWQ9XCJyZWN1cnJpbmdcIlxuXHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXt0b2dnbGV9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8Q2FyZFRpdGxlIGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVwZWF0Jyl9PC9DYXJkVGl0bGU+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHR7c2hvdyAmJiB2YWx1ZSAmJiAoXG5cdFx0XHRcdFx0PHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdHtnZXREZXNjcmlwdGlvbih2YWx1ZSwgdCl9XG5cdFx0XHRcdFx0PC9wPlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9DYXJkSGVhZGVyPlxuXG5cdFx0XHR7c2hvdyAmJiAoXG5cdFx0XHRcdDxDYXJkQ29udGVudCBjbGFzc05hbWU9XCJwdC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTRcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCIgaHRtbEZvcj1cImZyZXF1ZW5jeVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e3QoJ3JlcGVhdHMnKX1cblx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxTZWxlY3Rcblx0XHRcdFx0XHRcdFx0XHRcdG9uVmFsdWVDaGFuZ2U9eyhmKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGUoeyBmcmVxOiBGUkVRX01BUFtmIGFzIGtleW9mIHR5cGVvZiBGUkVRX01BUF0gfSlcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtmcmVxfVxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RUcmlnZ2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiZnJlcXVlbmN5LXNlbGVjdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiZnJlcXVlbmN5XCJcblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PFNlbGVjdFZhbHVlIC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdFRyaWdnZXI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0Q29udGVudD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e09iamVjdC5rZXlzKEZSRVFfTUFQKS5tYXAoKGYpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0SXRlbSBrZXk9e2Z9IHZhbHVlPXtmfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt0KGYudG9Mb3dlckNhc2UoKSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9TZWxlY3RJdGVtPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0Q29udGVudD5cblx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdD5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwiaW50ZXJ2YWxcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHt0KCdldmVyeScpfVxuXHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLThcIlxuXHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnRlcnZhbFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRtaW49XCIxXCJcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZSkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlKHsgaW50ZXJ2YWw6IHBhcnNlTnVtKGUudGFyZ2V0LnZhbHVlKSB9KVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cIm51bWJlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17b3B0cz8uaW50ZXJ2YWwgfHwgMX1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHR7b3B0cz8uZnJlcSA9PT0gUlJ1bGUuV0VFS0xZICYmIChcblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdyZXBlYXRPbicpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMSBtdC0xXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7d2Vla0RheXMubWFwKChkLCBpKSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0xXCIga2V5PXtkLmxhYmVsfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2J5d2Vla2RheS5pbmNsdWRlcyhkLnZhbHVlKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPXtrZXlzLmxpc3RLZXkoJ2RheScsIGkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoKSA9PiB0b2dnbGVEYXkoaSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInRleHQteHMgY3Vyc29yLXBvaW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aHRtbEZvcj17a2V5cy5saXN0S2V5KCdkYXknLCBpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+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/OiBzdHJpbmdcbn1cblxuY29uc3QgSGVhZGVyOiBSZWFjdC5GQzxIZWFkZXJQcm9wcz4gPSAoeyBjbGFzc05hbWUgPSAnJyB9KSA9PiB7XG5cdGNvbnN0IHtcblx0XHR2aWV3LFxuXHRcdHNldFZpZXcsXG5cdFx0bmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kLFxuXHRcdHRvZGF5LFxuXHRcdG9wZW5FdmVudEZvcm0sXG5cdFx0aGVhZGVyQ29tcG9uZW50LFxuXHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRyYXdFdmVudHMsXG5cdFx0dCxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjdHgpID0+ICh7XG5cdFx0dmlldzogY3R4LnZpZXcsXG5cdFx0c2V0VmlldzogY3R4LnNldFZpZXcsXG5cdFx0bmV4dFBlcmlvZDogY3R4Lm5leHRQZXJpb2QsXG5cdFx0cHJldlBlcmlvZDogY3R4LnByZXZQZXJpb2QsXG5cdFx0dG9kYXk6IGN0eC50b2RheSxcblx0XHRvcGVuRXZlbnRGb3JtOiBjdHgub3BlbkV2ZW50Rm9ybSxcblx0XHRoZWFkZXJDb21wb25lbnQ6IGN0eC5oZWFkZXJDb21wb25lbnQsXG5cdFx0aGVhZGVyQ2xhc3NOYW1lOiBjdHguaGVhZGVyQ2xhc3NOYW1lLFxuXHRcdHJhd0V2ZW50czogY3R4LnJhd0V2ZW50cyxcblx0XHR0OiBjdHgudCxcblx0fSkpXG5cblx0Y29uc3QgW21vYmlsZU1lbnVPcGVuLCBzZXRNb2JpbGVNZW51T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblxuXHRjb25zdCBjbG9zZU1vYmlsZU1lbnUgPSAoKSA9PiBzZXRNb2JpbGVNZW51T3BlbihmYWxzZSlcblxuXHQvLyBXcmFwIGFueSBoYW5kbGVyIHNvIGl0IGFsc28gY2xvc2VzIHRoZSBtb2JpbGUgbWVudSBhZnRlciBmaXJpbmcuXG5cdGNvbnN0IHdpdGhDbG9zZSA9XG5cdFx0PEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KGZuOiAoLi4uYXJnczogQXJncykgPT4gdm9pZCkgPT5cblx0XHQoLi4uYXJnczogQXJncykgPT4ge1xuXHRcdFx0Zm4oLi4uYXJncylcblx0XHRcdGNsb3NlTW9iaWxlTWVudSgpXG5cdFx0fVxuXG5cdGNvbnN0IGhhbmRsZUV4cG9ydCA9ICgpID0+IHtcblx0XHRjb25zdCBmaWxlbmFtZSA9IGBpbGFteS1jYWxlbmRhci0ke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdfS5pY3NgXG5cdFx0ZG93bmxvYWRJQ2FsZW5kYXIocmF3RXZlbnRzLCBmaWxlbmFtZSwgJ2lsYW15IENhbGVuZGFyJylcblx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHR9XG5cblx0Y29uc3QgTmV3RXZlbnRCdXR0b24gPSAoKSA9PiAoXG5cdFx0PEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuXHRcdFx0b25DbGljaz17KCkgPT4gb3BlbkV2ZW50Rm9ybSgpfVxuXHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdHZhcmlhbnQ9XCJkZWZhdWx0XCJcblx0XHQ+XG5cdFx0XHQ8UGx1cyBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsOmlubGluZVwiPnt0KCduZXcnKX08L3NwYW4+XG5cdFx0PC9CdXR0b24+XG5cdClcblxuXHRjb25zdCBFeHBvcnRCdXR0b24gPSAoeyBmdWxsV2lkdGggPSBmYWxzZSB9OiB7IGZ1bGxXaWR0aD86IGJvb2xlYW4gfSkgPT4gKFxuXHRcdDxCdXR0b25cblx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0xJywgZnVsbFdpZHRoICYmICd3LWZ1bGwgZ2FwLTInKX1cblx0XHRcdG9uQ2xpY2s9e2hhbmRsZUV4cG9ydH1cblx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0PlxuXHRcdFx0PERvd25sb2FkIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0e2Z1bGxXaWR0aCA/IChcblx0XHRcdFx0YCR7dCgnZXhwb3J0Jyl9IENhbGVuZGFyICguaWNzKWBcblx0XHRcdCkgOiAoXG5cdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsL2Jhc2UtaGVhZGVyOmlubGluZVwiPnt0KCdleHBvcnQnKX08L3NwYW4+XG5cdFx0XHQpfVxuXHRcdDwvQnV0dG9uPlxuXHQpXG5cblx0aWYgKGhlYWRlckNvbXBvbmVudCkge1xuXHRcdHJldHVybiBoZWFkZXJDb21wb25lbnRcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiQGNvbnRhaW5lci9iYXNlLWhlYWRlciB3LWZ1bGxcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnZmxleCBqdXN0aWZ5LWNlbnRlciBAMnhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktYmV0d2VlbiBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0yJyxcblx0XHRcdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRcdFx0aGVhZGVyQ2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1zdGFydFwiPlxuXHRcdFx0XHRcdDxDYWxlbmRhckljb24gY2xhc3NOYW1lPVwiaC01IHctNVwiIC8+XG5cdFx0XHRcdFx0PFRpdGxlQ29udGVudCAvPlxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGp1c3RpZnktc3RhcnQgQHhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktY2VudGVyIGdhcC0xIEA0eGwvYmFzZS1oZWFkZXI6anVzdGlmeS1lbmQgb3ZlcmZsb3cteC1hdXRvXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gQG1kL2Jhc2UtaGVhZGVyOmZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgZ2FwLTFcIj5cblx0XHRcdFx0XHRcdDxWaWV3Q29udHJvbHNcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwianVzdGlmeS1lbmRcIlxuXHRcdFx0XHRcdFx0XHRjdXJyZW50Vmlldz17dmlld31cblx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e3NldFZpZXd9XG5cdFx0XHRcdFx0XHRcdG9uTmV4dD17bmV4dFBlcmlvZH1cblx0XHRcdFx0XHRcdFx0b25QcmV2aW91cz17cHJldlBlcmlvZH1cblx0XHRcdFx0XHRcdFx0b25Ub2RheT17dG9kYXl9XG5cdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJkZWZhdWx0XCJcblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8TmV3RXZlbnRCdXR0b24gLz5cblx0XHRcdFx0XHRcdDxFeHBvcnRCdXR0b24gLz5cblx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTEgQG1kL2Jhc2UtaGVhZGVyOmhpZGRlblwiPlxuXHRcdFx0XHRcdFx0PE5ld0V2ZW50QnV0dG9uIC8+XG5cdFx0XHRcdFx0XHQ8UG9wb3ZlciBvbk9wZW5DaGFuZ2U9e3NldE1vYmlsZU1lbnVPcGVufSBvcGVuPXttb2JpbGVNZW51T3Blbn0+XG5cdFx0XHRcdFx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHRcdFx0XHRcdDxCdXR0b24gc2l6ZT1cInNtXCIgdmFyaWFudD1cIm91dGxpbmVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxNZW51IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0XHRcdFx0XHQ8UG9wb3ZlckNvbnRlbnQgYWxpZ249XCJlbmRcIiBjbGFzc05hbWU9XCJ3LVsyNDBweF0gcC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxWaWV3Q29udHJvbHNcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudFZpZXc9e3ZpZXd9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXt3aXRoQ2xvc2Uoc2V0Vmlldyl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uTmV4dD17d2l0aENsb3NlKG5leHRQZXJpb2QpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvblByZXZpb3VzPXt3aXRoQ2xvc2UocHJldlBlcmlvZCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uVG9kYXk9e3dpdGhDbG9zZSh0b2RheSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJncmlkXCJcblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInB0LTIgYm9yZGVyLXRcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PEV4cG9ydEJ1dHRvbiBmdWxsV2lkdGggLz5cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L1BvcG92ZXJDb250ZW50PlxuXHRcdFx0XHRcdFx0PC9Qb3BvdmVyPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IEhlYWRlclxuIiwKICAgICJpbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuY29uc3QgQ1JMRiA9ICdcXHJcXG4nXG5cbmNvbnN0IFVUQ19WVElNRVpPTkUgPSBbXG5cdCdCRUdJTjpWVElNRVpPTkUnLFxuXHQnVFpJRDpVVEMnLFxuXHQnQkVHSU46U1RBTkRBUkQnLFxuXHQnRFRTVEFSVDoxOTcwMDEwMVQwMDAwMDAnLFxuXHQnVFpOQU1FOlVUQycsXG5cdCdUWk9GRlNFVEZST006KzAwMDAnLFxuXHQnVFpPRkZTRVRUTzorMDAwMCcsXG5cdCdFTkQ6U1RBTkRBUkQnLFxuXHQnRU5EOlZUSU1FWk9ORScsXG5dLmpvaW4oQ1JMRilcblxuY29uc3QgZXNjYXBlVGV4dCA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gdGV4dFxuXHRcdC5yZXBsYWNlQWxsKCdcXFxcJywgJ1xcXFxcXFxcJylcblx0XHQucmVwbGFjZUFsbCgnOycsICdcXFxcOycpXG5cdFx0LnJlcGxhY2VBbGwoJywnLCAnXFxcXCwnKVxuXHRcdC5yZXBsYWNlQWxsKCdcXG4nLCAnXFxcXG4nKVxuXHRcdC5yZXBsYWNlQWxsKCdcXHInLCAnJylcbn1cblxuY29uc3QgZm9ybWF0RGF0ZSA9IChkYXRlOiBEYXlqcywgaXNBbGxEYXkgPSBmYWxzZSk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBpc0FsbERheVxuXHRcdD8gZGF0ZS5mb3JtYXQoJ1lZWVlNTUREJylcblx0XHQ6IGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG59XG5cbmNvbnN0IGdldFVJRCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG5jb25zdCBmb3JtYXRSUnVsZSA9IChycnVsZU9wdGlvbnM6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuXHR0cnkge1xuXHRcdGNvbnN0IHJydWxlU3RyaW5nID0gbmV3IFJSdWxlKFxuXHRcdFx0cnJ1bGVPcHRpb25zIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgUlJ1bGU+WzBdXG5cdFx0KS50b1N0cmluZygpXG5cdFx0cmV0dXJuIChcblx0XHRcdHJydWxlU3RyaW5nLnNwbGl0KCdcXG4nKS5maW5kKChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoJ1JSVUxFOicpKSB8fCAnJ1xuXHRcdClcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuICcnXG5cdH1cbn1cblxuY29uc3QgY29udmVydEV2ZW50VG9WRXZlbnQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuXHRjb25zdCB0aW1lc3RhbXAgPSBkYXlqcygpLnV0YygpLmZvcm1hdCgnWVlZWU1NRERbVF1ISG1tc3NbWl0nKVxuXHRjb25zdCBkYXRlUGFyYW0gPSBldmVudC5hbGxEYXkgPyAnO1ZBTFVFPURBVEUnIDogJydcblx0Y29uc3QgcnJ1bGUgPSBldmVudC5ycnVsZSA/IGZvcm1hdFJSdWxlKGV2ZW50LnJydWxlKSA6ICcnXG5cblx0Y29uc3QgZXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXM/Lmxlbmd0aFxuXHRcdD8gZXZlbnQuZXhkYXRlcy5tYXAoKGQpID0+IGZvcm1hdERhdGUoZGF5anMoZCksIGV2ZW50LmFsbERheSkpLmpvaW4oJywnKVxuXHRcdDogbnVsbFxuXG5cdGNvbnN0IHJlY3VycmVuY2VJZCA9IGV2ZW50LnJlY3VycmVuY2VJZFxuXHRcdD8gZm9ybWF0RGF0ZShkYXlqcyhldmVudC5yZWN1cnJlbmNlSWQpLCBldmVudC5hbGxEYXkpXG5cdFx0OiBudWxsXG5cblx0Y29uc3QgbGluZXMgPSBbXG5cdFx0J0JFR0lOOlZFVkVOVCcsXG5cdFx0YFVJRDoke2dldFVJRChldmVudCl9YCxcblx0XHRgRFRTVEFSVCR7ZGF0ZVBhcmFtfToke2Zvcm1hdERhdGUoZXZlbnQuc3RhcnQsIGV2ZW50LmFsbERheSl9YCxcblx0XHRgRFRFTkQke2RhdGVQYXJhbX06JHtmb3JtYXREYXRlKGV2ZW50LmVuZCwgZXZlbnQuYWxsRGF5KX1gLFxuXHRcdGBTVU1NQVJZOiR7ZXNjYXBlVGV4dChldmVudC50aXRsZSl9YCxcblx0XHRldmVudC5kZXNjcmlwdGlvbiAmJiBgREVTQ1JJUFRJT046JHtlc2NhcGVUZXh0KGV2ZW50LmRlc2NyaXB0aW9uKX1gLFxuXHRcdGV2ZW50LmxvY2F0aW9uICYmIGBMT0NBVElPTjoke2VzY2FwZVRleHQoZXZlbnQubG9jYXRpb24pfWAsXG5cdFx0cnJ1bGUsXG5cdFx0ZXhkYXRlcyAmJiBgRVhEQVRFOiR7ZXhkYXRlc31gLFxuXHRcdHJlY3VycmVuY2VJZCAmJiBgUkVDVVJSRU5DRS1JRDoke3JlY3VycmVuY2VJZH1gLFxuXHRcdGBEVFNUQU1QOiR7dGltZXN0YW1wfWAsXG5cdFx0YENSRUFURUQ6JHt0aW1lc3RhbXB9YCxcblx0XHRgTEFTVC1NT0RJRklFRDoke3RpbWVzdGFtcH1gLFxuXHRcdCdTVEFUVVM6Q09ORklSTUVEJyxcblx0XHQnU0VRVUVOQ0U6MCcsXG5cdFx0J1RSQU5TUDpPUEFRVUUnLFxuXHRcdCdFTkQ6VkVWRU5UJyxcblx0XVxuXG5cdHJldHVybiBsaW5lcy5maWx0ZXIoQm9vbGVhbikuam9pbihDUkxGKVxufVxuXG5jb25zdCBmaWx0ZXJFdmVudHMgPSAoZXZlbnRzOiBDYWxlbmRhckV2ZW50W10pOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRjb25zdCBzZWVuVUlEcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cblx0cmV0dXJuIGV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgdWlkID0gZ2V0VUlEKGV2ZW50KVxuXHRcdGNvbnN0IGlzQmFzZVJlY3VycmluZyA9IGV2ZW50LnJydWxlICYmICFldmVudC5yZWN1cnJlbmNlSWRcblx0XHRjb25zdCBpc01vZGlmaWVkSW5zdGFuY2UgPSBldmVudC5yZWN1cnJlbmNlSWQgJiYgIWV2ZW50LnJydWxlXG5cblx0XHRpZiAoaXNCYXNlUmVjdXJyaW5nKSB7XG5cdFx0XHRzZWVuVUlEcy5hZGQodWlkKVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0aWYgKGlzTW9kaWZpZWRJbnN0YW5jZSkge1xuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0cmV0dXJuICFldmVudC5ycnVsZSAmJiAhZXZlbnQucmVjdXJyZW5jZUlkICYmICFzZWVuVUlEcy5oYXModWlkKVxuXHR9KVxufVxuXG5leHBvcnQgY29uc3QgZXhwb3J0VG9JQ2FsZW5kYXIgPSAoXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdLFxuXHRjYWxlbmRhck5hbWUgPSAnaWxhbXkgQ2FsZW5kYXInXG4pOiBzdHJpbmcgPT4ge1xuXHRjb25zdCBuYW1lID0gZXNjYXBlVGV4dChjYWxlbmRhck5hbWUpXG5cdGNvbnN0IHZldmVudFN0cmluZ3MgPSBmaWx0ZXJFdmVudHMoZXZlbnRzKS5tYXAoY29udmVydEV2ZW50VG9WRXZlbnQpXG5cblx0cmV0dXJuIFtcblx0XHQnQkVHSU46VkNBTEVOREFSJyxcblx0XHQnVkVSU0lPTjoyLjAnLFxuXHRcdCdQUk9ESUQ6LS8vaWxhbXkvL2lsYW15IENhbGVuZGFyLy9FTicsXG5cdFx0J0NBTFNDQUxFOkdSRUdPUklBTicsXG5cdFx0J01FVEhPRDpQVUJMSVNIJyxcblx0XHRgWC1XUi1DQUxOQU1FOiR7bmFtZX1gLFxuXHRcdGBYLVdSLUNBTERFU0M6RXhwb3J0ZWQgZnJvbSAke25hbWV9YCxcblx0XHRVVENfVlRJTUVaT05FLFxuXHRcdC4uLnZldmVudFN0cmluZ3MsXG5cdFx0J0VORDpWQ0FMRU5EQVInLFxuXHRdLmpvaW4oQ1JMRilcbn1cblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkSUNhbGVuZGFyID0gKFxuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcblx0ZmlsZW5hbWUgPSAnY2FsZW5kYXIuaWNzJyxcblx0Y2FsZW5kYXJOYW1lID0gJ2lsYW15IENhbGVuZGFyJ1xuKTogdm9pZCA9PiB7XG5cdGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZXhwb3J0VG9JQ2FsZW5kYXIoZXZlbnRzLCBjYWxlbmRhck5hbWUpXSwge1xuXHRcdHR5cGU6ICd0ZXh0L2NhbGVuZGFyO2NoYXJzZXQ9dXRmLTgnLFxuXHR9KVxuXHRjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpXG5cdGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IGZpbGVuYW1lLmVuZHNXaXRoKCcuaWNzJylcblx0XHQ/IGZpbGVuYW1lXG5cdFx0OiBgJHtmaWxlbmFtZX0uaWNzYFxuXG5cdGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcblx0bGluay5ocmVmID0gdXJsXG5cdGxpbmsuZG93bmxvYWQgPSBub3JtYWxpemVkRmlsZW5hbWVcblxuXHRkb2N1bWVudC5ib2R5LmFwcGVuZChsaW5rKVxuXHRsaW5rLmNsaWNrKClcblx0bGluay5yZW1vdmUoKVxuXHRVUkwucmV2b2tlT2JqZWN0VVJMKHVybClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ2hldnJvbkRvd24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldERheUtleSwgZ2V0V2Vla0RheXMsIGlzVG9kYXkgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmNvbnN0IE1PTlRIX0tFWVMgPSBbXG5cdCdqYW51YXJ5Jyxcblx0J2ZlYnJ1YXJ5Jyxcblx0J21hcmNoJyxcblx0J2FwcmlsJyxcblx0J21heScsXG5cdCdqdW5lJyxcblx0J2p1bHknLFxuXHQnYXVndXN0Jyxcblx0J3NlcHRlbWJlcicsXG5cdCdvY3RvYmVyJyxcblx0J25vdmVtYmVyJyxcblx0J2RlY2VtYmVyJyxcbl0gYXMgY29uc3RcblxuY29uc3QgVGl0bGVDb250ZW50ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB2aWV3LCBzZWxlY3REYXRlLCB0LCBmaXJzdERheU9mV2VlayB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdFx0Y3VycmVudERhdGU6IGN0eC5jdXJyZW50RGF0ZSxcblx0XHRcdHZpZXc6IGN0eC52aWV3LFxuXHRcdFx0c2VsZWN0RGF0ZTogY3R4LnNlbGVjdERhdGUsXG5cdFx0XHR0OiBjdHgudCxcblx0XHRcdGZpcnN0RGF5T2ZXZWVrOiBjdHguZmlyc3REYXlPZldlZWssXG5cdFx0fSkpXG5cblx0Y29uc3QgW29wZW5Qb3BvdmVyLCBzZXRPcGVuUG9wb3Zlcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuXG5cdGNvbnN0IG1vbnRocyA9IHVzZU1lbW8oKCkgPT4gTU9OVEhfS0VZUy5tYXAoKGtleSkgPT4gdChrZXkpKSwgW3RdKVxuXHRjb25zdCBjdXJyZW50WWVhciA9IGN1cnJlbnREYXRlLnllYXIoKVxuXHRjb25zdCB5ZWFycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDExIH0sIChfLCBpKSA9PiBjdXJyZW50WWVhciAtIDUgKyBpKVxuXHRjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaylcblxuXHRjb25zdCBoYW5kbGVTZWxlY3REYXRlID0gKGRhdGU6IERheWpzKSA9PiB7XG5cdFx0c2VsZWN0RGF0ZShkYXRlKVxuXHRcdHNldE9wZW5Qb3BvdmVyKG51bGwpXG5cdH1cblxuXHRjb25zdCByZW5kZXJNb250aENvbnRlbnQgPSAoKSA9PiAoXG5cdFx0PD5cblx0XHRcdHttb250aHMubWFwKChtb250aCwgaW5kZXgpID0+IChcblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG5cdFx0XHRcdFx0XHRjdXJyZW50RGF0ZS5tb250aCgpID09PSBpbmRleCAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGtleT17bW9udGh9XG5cdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0RGF0ZShjdXJyZW50RGF0ZS5tb250aChpbmRleCkpfVxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7bW9udGh9XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0KSl9XG5cdFx0PC8+XG5cdClcblxuXHRjb25zdCByZW5kZXJZZWFyQ29udGVudCA9ICgpID0+IChcblx0XHQ8PlxuXHRcdFx0e3llYXJzLm1hcCgoeWVhcikgPT4gKFxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdGN1cnJlbnREYXRlLnllYXIoKSA9PT0geWVhciAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGtleT17eWVhcn1cblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3REYXRlKGN1cnJlbnREYXRlLnllYXIoeWVhcikpfVxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7eWVhcn1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQpKX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlcldlZWtDb250ZW50ID0gKCkgPT4gKFxuXHRcdDw+XG5cdFx0XHR7QXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgaSkgPT4ge1xuXHRcdFx0XHRjb25zdCB3ZWVrRGF0ZSA9IGN1cnJlbnREYXRlLnN1YnRyYWN0KDMsICd3ZWVrJykuYWRkKGksICd3ZWVrJylcblx0XHRcdFx0Y29uc3QgZGF5cyA9IGdldFdlZWtEYXlzKHdlZWtEYXRlLCBmaXJzdERheU9mV2Vlaylcblx0XHRcdFx0Y29uc3Qgc3RhcnQgPSBkYXlzWzBdXG5cdFx0XHRcdGNvbnN0IGVuZCA9IGRheXNbNl1cblx0XHRcdFx0Y29uc3QgaXNDdXJyZW50V2VlayA9IHdlZWtEYXRlLmlzU2FtZShjdXJyZW50RGF0ZSwgJ3dlZWsnKVxuXHRcdFx0XHRjb25zdCBjcm9zc2VzTW9udGggPSBzdGFydC5tb250aCgpICE9PSBlbmQubW9udGgoKVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0XHRpc0N1cnJlbnRXZWVrICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdGtleT17Z2V0RGF5S2V5KHN0YXJ0KX1cblx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdERhdGUoc3RhcnQpfVxuXHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cblx0XHRcdFx0XHRcdFx0PHNwYW4+e2Ake3N0YXJ0LmZvcm1hdCgnTU1NIEQnKX0gLSAke2VuZC5mb3JtYXQoJ0QnKX1gfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0e2Nyb3NzZXNNb250aCAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwibWwtMC41IHRleHQteHMgb3BhY2l0eS03MFwiPntgJHtzdGFydC5mb3JtYXQoJ01NTScpfS0ke2VuZC5mb3JtYXQoJ01NTScpfWB9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvPlxuXHQpXG5cblx0Y29uc3QgcmVuZGVyRGF5Q29udGVudCA9ICgpID0+IHtcblx0XHRjb25zdCBmaXJzdERheSA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcblx0XHRjb25zdCBkYXlzSW5Nb250aCA9IGN1cnJlbnREYXRlLmRheXNJbk1vbnRoKClcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8PlxuXHRcdFx0XHR7QXJyYXkuZnJvbSh7IGxlbmd0aDogZGF5c0luTW9udGggfSwgKF8sIGkpID0+IHtcblx0XHRcdFx0XHRjb25zdCBkYXkgPSBmaXJzdERheS5kYXRlKGkgKyAxKVxuXHRcdFx0XHRcdGNvbnN0IGlzQ3VycmVudERheSA9IGRheS5pc1NhbWUoY3VycmVudERhdGUsICdkYXknKVxuXHRcdFx0XHRcdGNvbnN0IHRvZGF5ID0gaXNUb2RheShkYXkpXG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdFx0XHRpc0N1cnJlbnREYXkgJiYgJ2JnLXByaW1hcnkvMTAnXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdGtleT17Z2V0RGF5S2V5KGRheSl9XG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdERhdGUoZGF5KX1cblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4+e2RheS5mb3JtYXQoJ2RkZGQsIE1NTSBEJyl9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdHt0b2RheSAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtc20gcHgtMSEgdGV4dC14c1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dCgndG9kYXknKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSl9XG5cdFx0XHQ8Lz5cblx0XHQpXG5cdH1cblxuXHRjb25zdCBwb3BvdmVycyA9IFtcblx0XHR7XG5cdFx0XHRpZDogJ21vbnRoJyxcblx0XHRcdGhpZGRlbjogdmlldyA9PT0gJ3llYXInLFxuXHRcdFx0dGl0bGU6IGN1cnJlbnREYXRlLmZvcm1hdCgnTU1NTScpLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJNb250aENvbnRlbnQsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogJ3llYXInLFxuXHRcdFx0aGlkZGVuOiBmYWxzZSxcblx0XHRcdHRpdGxlOiBjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVknKSxcblx0XHRcdHJlbmRlcjogcmVuZGVyWWVhckNvbnRlbnQsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogJ3dlZWsnLFxuXHRcdFx0aGlkZGVuOiB2aWV3ICE9PSAnd2VlaycsXG5cdFx0XHR0aXRsZTogYCR7d2Vla0RheXNbMF0uZm9ybWF0KCdNTU0gRCcpfSAtICR7d2Vla0RheXNbNl0uZm9ybWF0KCdNTU0gRCcpfWAsXG5cdFx0XHRyZW5kZXI6IHJlbmRlcldlZWtDb250ZW50LFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6ICdkYXknLFxuXHRcdFx0aGlkZGVuOiB2aWV3ICE9PSAnZGF5Jyxcblx0XHRcdHRpdGxlOiBjdXJyZW50RGF0ZS5mb3JtYXQoJ2RkZGQsIEQnKSxcblx0XHRcdHJlbmRlcjogcmVuZGVyRGF5Q29udGVudCxcblx0XHR9LFxuXHRdXG5cblx0cmV0dXJuIHBvcG92ZXJzXG5cdFx0LmZpbHRlcigocCkgPT4gIXAuaGlkZGVuKVxuXHRcdC5tYXAoKHBvcG92ZXIpID0+IChcblx0XHRcdDxQb3BvdmVyXG5cdFx0XHRcdGtleT17cG9wb3Zlci5pZH1cblx0XHRcdFx0b25PcGVuQ2hhbmdlPXsob3BlbikgPT4gc2V0T3BlblBvcG92ZXIob3BlbiA/IHBvcG92ZXIuaWQgOiBudWxsKX1cblx0XHRcdFx0b3Blbj17b3BlblBvcG92ZXIgPT09IHBvcG92ZXIuaWR9XG5cdFx0XHQ+XG5cdFx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1tb250aC1idXR0b25cIlxuXHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuXHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImNhbGVuZGFyLW1vbnRoLWJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2tleXMubGlzdEtleShwb3BvdmVyLmlkLCBnZXREYXlLZXkoY3VycmVudERhdGUpKX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3BvcG92ZXIudGl0bGV9XG5cdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHRcdDxDaGV2cm9uRG93biBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0PC9Qb3BvdmVyVHJpZ2dlcj5cblx0XHRcdFx0PFBvcG92ZXJDb250ZW50IGNsYXNzTmFtZT1cInctNDAgcC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IG1heC1oLTYwIGZsZXgtY29sIG92ZXJmbG93LWF1dG9cIj5cblx0XHRcdFx0XHRcdHtwb3BvdmVyLnJlbmRlcigpfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L1BvcG92ZXJDb250ZW50PlxuXHRcdFx0PC9Qb3BvdmVyPlxuXHRcdCkpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFRpdGxlQ29udGVudFxuIiwKICAgICJpbXBvcnQgeyBDaGV2cm9uTGVmdCwgQ2hldnJvblJpZ2h0IH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxudHlwZSBWaWV3VHlwZSA9ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJ1xuY29uc3QgQVZBSUxBQkxFX1ZJRVdTOiBWaWV3VHlwZVtdID0gWydkYXknLCAnd2VlaycsICdtb250aCcsICd5ZWFyJ11cblxuaW50ZXJmYWNlIFZpZXdDb250cm9sc1Byb3BzIHtcblx0Y3VycmVudFZpZXc6IFZpZXdUeXBlXG5cdG9uQ2hhbmdlOiAodmlldzogVmlld1R5cGUpID0+IHZvaWRcblx0b25Ub2RheT86ICgpID0+IHZvaWRcblx0b25OZXh0PzogKCkgPT4gdm9pZFxuXHRvblByZXZpb3VzPzogKCkgPT4gdm9pZFxuXHR2YXJpYW50PzogJ2RlZmF1bHQnIHwgJ2dyaWQnXG5cdHNpemU/OiAnc20nIHwgJ2RlZmF1bHQnXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBWaWV3Q29udHJvbHM6IFJlYWN0LkZDPFZpZXdDb250cm9sc1Byb3BzPiA9ICh7XG5cdGN1cnJlbnRWaWV3LFxuXHRvbkNoYW5nZSxcblx0dmFyaWFudCA9ICdkZWZhdWx0Jyxcblx0c2l6ZSA9ICdzbScsXG5cdGNsYXNzTmFtZSxcblx0b25Ub2RheSxcblx0b25OZXh0LFxuXHRvblByZXZpb3VzLFxufSkgPT4ge1xuXHRjb25zdCB7IHQsIHJlc291cmNlcyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0dDogY29udGV4dC50LFxuXHRcdHJlc291cmNlczogY29udGV4dC5yZXNvdXJjZXMsXG5cdH0pKVxuXHRjb25zdCBpc0dyaWQgPSB2YXJpYW50ID09PSAnZ3JpZCdcblx0Y29uc3QgaXNSZXNvdXJjZUNhbGVuZGFyID0gcmVzb3VyY2VzICYmIHJlc291cmNlcy5sZW5ndGggPiAwXG5cblx0Ly8gRXh0cmFjdCBjb21tb24gYnV0dG9uIGNsYXNzTmFtZSBsb2dpYyB0byBhIGZ1bmN0aW9uXG5cdGNvbnN0IGdldEJ1dHRvbkNsYXNzTmFtZSA9ICh2aWV3VHlwZTogVmlld1R5cGUpID0+IHtcblx0XHRyZXR1cm4gY24oXG5cdFx0XHQvLyBCYXNlIHdpZHRoIGZvciBncmlkIGxheW91dFxuXHRcdFx0aXNHcmlkID8gJ3ctZnVsbCcgOiAnJyxcblx0XHRcdC8vIEFjdGl2ZSB2aWV3IHN0eWxpbmdcblx0XHRcdGN1cnJlbnRWaWV3ID09PSB2aWV3VHlwZSAmJiAnYmctcHJpbWFyeS84MCdcblx0XHQpXG5cdH1cblxuXHRjb25zdCBnZXRCdG5WYXJpYW50ID0gKHZpZXdUeXBlOiBWaWV3VHlwZSkgPT4ge1xuXHRcdHJldHVybiBjdXJyZW50VmlldyA9PT0gdmlld1R5cGUgPyAnZGVmYXVsdCcgOiAnb3V0bGluZSdcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0aXNHcmlkID8gJ2dyaWQgZ3JpZC1jb2xzLTIgZ2FwLTInIDogJ2ZsZXggZ2FwLTEnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0PlxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvblByZXZpb3VzfSBzaXplPXtzaXplfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHQ8Q2hldnJvbkxlZnQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDxCdXR0b24gb25DbGljaz17b25OZXh0fSBzaXplPXtzaXplfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHQ8Q2hldnJvblJpZ2h0IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0PC9CdXR0b24+XG5cblx0XHRcdHtBVkFJTEFCTEVfVklFV1MubWFwKCh0eXBlOiBWaWV3VHlwZSkgPT4ge1xuXHRcdFx0XHRpZiAoaXNSZXNvdXJjZUNhbGVuZGFyICYmIHR5cGUgPT09ICd5ZWFyJykge1xuXHRcdFx0XHRcdHJldHVybiBudWxsXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Z2V0QnV0dG9uQ2xhc3NOYW1lKHR5cGUpfVxuXHRcdFx0XHRcdFx0a2V5PXt0eXBlfVxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gb25DaGFuZ2UodHlwZSl9XG5cdFx0XHRcdFx0XHRzaXplPXtzaXplfVxuXHRcdFx0XHRcdFx0dmFyaWFudD17Z2V0QnRuVmFyaWFudCh0eXBlKX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7dCh0eXBlKX1cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cblx0XHRcdDxCdXR0b24gb25DbGljaz17b25Ub2RheX0gc2l6ZT17c2l6ZX0gdmFyaWFudD1cIm91dGxpbmVcIj5cblx0XHRcdFx0e3QoJ3RvZGF5Jyl9XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgZGVmYXVsdCBWaWV3Q29udHJvbHNcbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgSG9yaXpvbnRhbEdyaWRSb3cgfSBmcm9tICdAL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1yb3cnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB7IEFsbERheUNlbGwgfSBmcm9tICcuL2FsbC1kYXktY2VsbCdcblxuaW50ZXJmYWNlIEFsbERheVJvd1Byb3BzIHtcblx0ZGF5czogRGF5anNbXVxuXHRjbGFzc2VzPzogeyByb3c/OiBzdHJpbmc7IGNlbGw/OiBzdHJpbmc7IHNwYWNlcj86IHN0cmluZyB9XG5cdHJlc291cmNlPzogUmVzb3VyY2Vcblx0c2hvd1NwYWNlcj86IGJvb2xlYW5cbn1cblxuY29uc3QgTm9NZW1vQWxsRGF5Um93OiBSZWFjdC5GQzxBbGxEYXlSb3dQcm9wcz4gPSAoe1xuXHRkYXlzLFxuXHRjbGFzc2VzLFxuXHRyZXNvdXJjZSxcblx0c2hvd1NwYWNlciA9IHRydWUsXG59KSA9PiB7XG5cdGNvbnN0IGNvbHVtbnMgPSBkYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4gKHtcblx0XHRpZDoga2V5cy5jb2wuYWxsRGF5KGRheSwgaW5kZXgpLFxuXHRcdGRheSxcblx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdFx0Y2xhc3NOYW1lOiBjbignaC1mdWxsIG1pbi1oLTEyIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCcsIGNsYXNzZXM/LmNlbGwpLFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggdy1mdWxsIGJnLWJhY2tncm91bmQnLCBjbGFzc2VzPy5yb3cpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJhbGwtZGF5LXJvd1wiXG5cdFx0PlxuXHRcdFx0ey8qIFRpbWUgY29sIHNwYWNlciAqL31cblx0XHRcdHtzaG93U3BhY2VyICYmIDxBbGxEYXlDZWxsIGNsYXNzTmFtZT17Y2xhc3Nlcz8uc3BhY2VyfSAvPn1cblxuXHRcdFx0ey8qIERheSBhbGwgZGF5IGNlbGwgKi99XG5cdFx0XHQ8SG9yaXpvbnRhbEdyaWRSb3dcblx0XHRcdFx0YWxsRGF5XG5cdFx0XHRcdGNsYXNzTmFtZT1cImZsZXgtMSBtaW4taC1maXQgYm9yZGVyLWJcIlxuXHRcdFx0XHRjb2x1bW5zPXtjb2x1bW5zfVxuXHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQ9ezB9XG5cdFx0XHRcdGdyaWRUeXBlPVwiZGF5XCJcblx0XHRcdFx0aWQ9e2tleXMuYWxsRGF5Um93KHJlc291cmNlPy5pZCl9XG5cdFx0XHRcdGlzTGFzdFJvd1xuXHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHRcdC8+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEFsbERheVJvdyA9IG1lbW8oTm9NZW1vQWxsRGF5Um93KVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IG1lbW8sIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZFdlZWtFdmVudHMnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXREYXlLZXkgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5pbXBvcnQgeyBHcmlkQ2VsbCB9IGZyb20gJy4uL2dyaWQtY2VsbCdcbmltcG9ydCB7IFJlc291cmNlQ2VsbCB9IGZyb20gJy4uL3Jlc291cmNlLWNlbGwnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyIH0gZnJvbSAnLi9ob3Jpem9udGFsLWdyaWQtZXZlbnRzLWxheWVyJ1xuXG5pbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRDb2x1bW4ge1xuXHRpZDogc3RyaW5nXG5cdGRheT86IERheWpzXG5cdGRheXM/OiBEYXlqc1tdXG5cdGdyaWRUeXBlOiAnZGF5JyB8ICdob3VyJ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0cmVuZGVyQ2VsbD86IChyb3c6IEhvcml6b250YWxHcmlkUm93UHJvcHMpID0+IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhvcml6b250YWxHcmlkUm93UHJvcHMge1xuXHRpZDogc3RyaW5nIHwgbnVtYmVyXG5cdHJlc291cmNlPzogUmVzb3VyY2Vcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHR2YXJpYW50PzogJ3JlZ3VsYXInIHwgJ3Jlc291cmNlJ1xuXHRkYXlOdW1iZXJIZWlnaHQ/OiBudW1iZXJcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGNvbHVtbnM/OiBIb3Jpem9udGFsR3JpZENvbHVtbltdXG5cdGFsbERheT86IGJvb2xlYW5cblx0c2hvd0RheU51bWJlcj86IGJvb2xlYW5cblx0aXNMYXN0Um93PzogYm9vbGVhblxufVxuXG5jb25zdCBOb01lbW9Ib3Jpem9udGFsR3JpZFJvdzogUmVhY3QuRkM8SG9yaXpvbnRhbEdyaWRSb3dQcm9wcz4gPSAoe1xuXHRpZCxcblx0cmVzb3VyY2UsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHZhcmlhbnQgPSAncmVzb3VyY2UnLFxuXHRkYXlOdW1iZXJIZWlnaHQsXG5cdGNsYXNzTmFtZSxcblx0Y29sdW1ucyA9IFtdLFxuXHRhbGxEYXksXG5cdHNob3dEYXlOdW1iZXIgPSBmYWxzZSxcblx0aXNMYXN0Um93ID0gZmFsc2UsXG59KSA9PiB7XG5cdGNvbnN0IHsgcmVuZGVyUmVzb3VyY2UgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSB2YXJpYW50ID09PSAncmVzb3VyY2UnXG5cdC8vIEZsYXQgY29sdW1uczogZWFjaCBjb2x1bW4gaGFzIGNvbC5kYXkgKHJlZ3VsYXIgbW9udGgsIHJlc291cmNlIG1vbnRoKVxuXHQvLyBHcm91cGVkIGNvbHVtbnM6IGVhY2ggY29sdW1uIGhhcyBjb2wuZGF5c1tdIChyZXNvdXJjZSB3ZWVrIGhvcml6b250YWwpXG5cdGNvbnN0IGlzR3JvdXBlZCA9IGNvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wuZGF5cylcblxuXHQvLyBDb2xsZWN0IGFsbCBkYXlzIGZvciBmbGF0IHJvd3Ncblx0Y29uc3QgZmxhdERheXMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoaXNHcm91cGVkKSByZXR1cm4gW11cblx0XHRyZXR1cm4gY29sdW1ucy5tYXAoKGNvbCkgPT4gY29sLmRheSkuZmlsdGVyKChkKTogZCBpcyBEYXlqcyA9PiBCb29sZWFuKGQpKVxuXHR9LCBbY29sdW1ucywgaXNHcm91cGVkXSlcblxuXHQvLyBDb21wdXRlIGV2ZW50cyBvbmNlIGF0IHRoZSByb3cgbGV2ZWwg4oCUIHNoYXJlZCBiZXR3ZWVuIEdyaWRDZWxscyBhbmQgZXZlbnRzIGxheWVyXG5cdGNvbnN0IHsgcG9zaXRpb25lZEV2ZW50cywgZGF5RXZlbnRzTWFwIH0gPSB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzKHtcblx0XHRkYXlzOiBmbGF0RGF5cyxcblx0XHRncmlkVHlwZSxcblx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZT8uaWQsXG5cdFx0ZGF5TnVtYmVySGVpZ2h0LFxuXHRcdGFsbERheSxcblx0fSlcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC0xIHJlbGF0aXZlJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmNvbnRhaW5lci5ob3Jpem9udGFsLnJvdyhpZCl9XG5cdFx0PlxuXHRcdFx0e2lzUmVzb3VyY2VDYWxlbmRhciAmJiByZXNvdXJjZSAmJiAoXG5cdFx0XHRcdDxSZXNvdXJjZUNlbGxcblx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAgaC1mdWxsXCJcblx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5jb250YWluZXIuaG9yaXpvbnRhbC5yb3dMYWJlbChyZXNvdXJjZS5pZCl9XG5cdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3JlbmRlclJlc291cmNlID8gKFxuXHRcdFx0XHRcdFx0cmVuZGVyUmVzb3VyY2UocmVzb3VyY2UpXG5cdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwid3JhcC1icmVhay13b3JkIHRleHQtc21cIj57cmVzb3VyY2UudGl0bGV9PC9kaXY+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PC9SZXNvdXJjZUNlbGw+XG5cdFx0XHQpfVxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4LTEgZmxleFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsXCI+XG5cdFx0XHRcdFx0e2NvbHVtbnMubWFwKChjb2wsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoY29sLmRheXMpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHQ8R3JvdXBlZENvbHVtblxuXHRcdFx0XHRcdFx0XHRcdFx0YWxsRGF5PXthbGxEYXl9XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2w9e2NvbH1cblx0XHRcdFx0XHRcdFx0XHRcdGRheU51bWJlckhlaWdodD17ZGF5TnVtYmVySGVpZ2h0fVxuXHRcdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdFx0aWQ9e2lkfVxuXHRcdFx0XHRcdFx0XHRcdFx0aXNMYXN0Q29sPXtpbmRleCA9PT0gY29sdW1ucy5sZW5ndGggLSAxfVxuXHRcdFx0XHRcdFx0XHRcdFx0aXNMYXN0Um93PXtpc0xhc3RSb3d9XG5cdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2NvbC5pZH1cblx0XHRcdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlPy5pZH1cblx0XHRcdFx0XHRcdFx0XHRcdHNob3dEYXlOdW1iZXI9e3Nob3dEYXlOdW1iZXJ9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29sLmRheSA/IChcblx0XHRcdFx0XHRcdFx0PEdyaWRDZWxsXG5cdFx0XHRcdFx0XHRcdFx0YWxsRGF5PXthbGxEYXl9XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdmbGV4LTEgdy0yMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3cgJiYgJ2JvcmRlci1iLTAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sLmNsYXNzTmFtZVxuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF5PXtjb2wuZGF5fVxuXHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRob3VyPXtncmlkVHlwZSA9PT0gJ2hvdXInID8gY29sLmRheS5ob3VyKCkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtjb2wuZGF5LnRvSVNPU3RyaW5nKCl9XG5cdFx0XHRcdFx0XHRcdFx0cHJlY29tcHV0ZWRFdmVudHM9e2RheUV2ZW50c01hcC5nZXQoZ2V0RGF5S2V5KGNvbC5kYXkpKX1cblx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZT8uaWR9XG5cdFx0XHRcdFx0XHRcdFx0c2hvd0RheU51bWJlcj17c2hvd0RheU51bWJlcn1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdCkgOiBudWxsXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBFdmVudHMgbGF5ZXIgcG9zaXRpb25lZCBhYnNvbHV0ZWx5IG92ZXIgdGhlIHJvdyAqL31cblx0XHRcdFx0eyFpc0dyb3VwZWQgJiYgKFxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCB6LTEwIHBvaW50ZXItZXZlbnRzLW5vbmVcIj5cblx0XHRcdFx0XHRcdDxIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmNvbnRhaW5lci5ldmVudHNMYXllcignaG9yaXpvbnRhbCcsIGlkKX1cblx0XHRcdFx0XHRcdFx0ZGF5cz17ZmxhdERheXN9XG5cdFx0XHRcdFx0XHRcdHBvc2l0aW9uZWRFdmVudHM9e3Bvc2l0aW9uZWRFdmVudHN9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlPy5pZH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG4vKipcbiAqIEEgY29sdW1uIGNvbnRhaW5pbmcgbXVsdGlwbGUgZGF5cyAoZS5nLiwgb25lIGRheSdzIGhvdXJseSBzbG90cyBpbiByZXNvdXJjZSB3ZWVrIHZpZXcpLlxuICogTmVlZHMgaXRzIG93biB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzIGNhbGwgc2luY2UgZXZlbnRzIGFyZSBzY29wZWQgdG8gdGhpcyBkYXkgZ3JvdXAuXG4gKi9cbmNvbnN0IEdyb3VwZWRDb2x1bW4gPSBtZW1vKFxuXHQoe1xuXHRcdGNvbCxcblx0XHRncmlkVHlwZSA9ICdkYXknLFxuXHRcdGFsbERheSxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGRheU51bWJlckhlaWdodCxcblx0XHRzaG93RGF5TnVtYmVyLFxuXHRcdGlzTGFzdFJvdyxcblx0XHRpc0xhc3RDb2wsXG5cdFx0aWQsXG5cdH06IHtcblx0XHRjb2w6IEhvcml6b250YWxHcmlkQ29sdW1uXG5cdFx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRcdGFsbERheT86IGJvb2xlYW5cblx0XHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdFx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdFx0c2hvd0RheU51bWJlcjogYm9vbGVhblxuXHRcdGlzTGFzdFJvdzogYm9vbGVhblxuXHRcdGlzTGFzdENvbDogYm9vbGVhblxuXHRcdGlkOiBzdHJpbmcgfCBudW1iZXJcblx0fSkgPT4ge1xuXHRcdGNvbnN0IGRheXMgPSBjb2wuZGF5cyA/PyBbXVxuXHRcdGNvbnN0IHsgcG9zaXRpb25lZEV2ZW50cyB9ID0gdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyh7XG5cdFx0XHRkYXlzLFxuXHRcdFx0Z3JpZFR5cGUsXG5cdFx0XHRyZXNvdXJjZUlkLFxuXHRcdFx0ZGF5TnVtYmVySGVpZ2h0LFxuXHRcdFx0YWxsRGF5LFxuXHRcdH0pXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHJlbGF0aXZlIHctZnVsbFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsXCI+XG5cdFx0XHRcdFx0e2RheXMubWFwKChkYXkpID0+IChcblx0XHRcdFx0XHRcdDxHcmlkQ2VsbFxuXHRcdFx0XHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHQnZmxleC0xIHctMjAnLFxuXHRcdFx0XHRcdFx0XHRcdGlzTGFzdFJvdyAmJiAnYm9yZGVyLWItMCcsXG5cdFx0XHRcdFx0XHRcdFx0IWlzTGFzdENvbCAmJiAnYm9yZGVyLXIhJyxcblx0XHRcdFx0XHRcdFx0XHRjb2wuY2xhc3NOYW1lXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdGRheT17ZGF5fVxuXHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdGhvdXI9e2dyaWRUeXBlID09PSAnaG91cicgPyBkYXkuaG91cigpIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdFx0XHRrZXk9e2RheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZUlkfVxuXHRcdFx0XHRcdFx0XHRzaG93RGF5TnVtYmVyPXtzaG93RGF5TnVtYmVyfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuXHRcdFx0XHRcdDxIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyXG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5jb250YWluZXIuZXZlbnRzTGF5ZXIoJ2hvcml6b250YWwnLCBpZCl9XG5cdFx0XHRcdFx0XHRkYXlzPXtkYXlzfVxuXHRcdFx0XHRcdFx0cG9zaXRpb25lZEV2ZW50cz17cG9zaXRpb25lZEV2ZW50c31cblx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlSWR9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpXG5cdH1cbilcblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkUm93ID0gbWVtbyhOb01lbW9Ib3Jpem9udGFsR3JpZFJvdylcbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZ2V0RGF5S2V5IH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7XG5cdGV2ZW50T3ZlcmxhcHNSYW5nZSxcblx0ZmlsdGVyRXZlbnRzQnlSZXNvdXJjZSxcbn0gZnJvbSAnQC9saWIvdXRpbHMvZXZlbnQtdXRpbHMnXG5pbXBvcnQge1xuXHRnZXRQb3NpdGlvbmVkRXZlbnRzLFxuXHR0eXBlIFBvc2l0aW9uZWRFdmVudCxcbn0gZnJvbSAnQC9saWIvdXRpbHMvcG9zaXRpb24td2Vlay1ldmVudHMnXG5cbmludGVyZmFjZSBVc2VQcm9jZXNzZWRXZWVrRXZlbnRzUHJvcHMge1xuXHRkYXlzOiBEYXlqc1tdXG5cdGFsbERheT86IGJvb2xlYW5cblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NlZFdlZWtFdmVudHNSZXN1bHQge1xuXHRwb3NpdGlvbmVkRXZlbnRzOiBQb3NpdGlvbmVkRXZlbnRbXVxuXHRkYXlFdmVudHNNYXA6IE1hcDxzdHJpbmcsIENhbGVuZGFyRXZlbnRbXT5cbn1cblxuZXhwb3J0IGNvbnN0IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMgPSAoe1xuXHRkYXlzLFxuXHRhbGxEYXksXG5cdGRheU51bWJlckhlaWdodCxcblx0cmVzb3VyY2VJZCxcblx0Z3JpZFR5cGUsXG59OiBVc2VQcm9jZXNzZWRXZWVrRXZlbnRzUHJvcHMpOiBQcm9jZXNzZWRXZWVrRXZlbnRzUmVzdWx0ID0+IHtcblx0Y29uc3Qge1xuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRkYXlNYXhFdmVudHMsXG5cdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdGV2ZW50SGVpZ2h0LFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IGZpcnN0ID0gZGF5cy5hdCgwKVxuXHRjb25zdCBsYXN0ID0gZGF5cy5hdCgtMSlcblx0Y29uc3Qgd2Vla1N0YXJ0ID0gZmlyc3Q/LnN0YXJ0T2YoJ2RheScpXG5cdGNvbnN0IHdlZWtFbmQgPSBsYXN0Py5lbmRPZignZGF5JylcblxuXHRjb25zdCBldmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoIXdlZWtTdGFydCB8fCAhd2Vla0VuZCkgcmV0dXJuIFtdXG5cdFx0bGV0IHdlZWtFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uod2Vla1N0YXJ0LCB3ZWVrRW5kKVxuXHRcdGlmIChyZXNvdXJjZUlkKSB7XG5cdFx0XHR3ZWVrRXZlbnRzID0gZmlsdGVyRXZlbnRzQnlSZXNvdXJjZShcblx0XHRcdFx0d2Vla0V2ZW50cyxcblx0XHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UocmVzb3VyY2VJZClcblx0XHRcdClcblx0XHR9XG5cblx0XHRpZiAoYWxsRGF5KSB7XG5cdFx0XHR3ZWVrRXZlbnRzID0gd2Vla0V2ZW50cy5maWx0ZXIoKGUpID0+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/IChcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bSB0cnVuY2F0ZVwiPntyZXNvdXJjZS50aXRsZX08L2Rpdj5cblx0XHRcdFx0XHQpKX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5pbXBvcnQgdHlwZSB7IFBvc2l0aW9uZWRFdmVudCB9IGZyb20gJ0AvbGliL3V0aWxzL3Bvc2l0aW9uLXdlZWstZXZlbnRzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJQcm9wcyB7XG5cdGRheXM6IERheWpzW11cblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdHBvc2l0aW9uZWRFdmVudHM6IFBvc2l0aW9uZWRFdmVudFtdXG59XG5cbmNvbnN0IE5vTWVtb0hvcml6b250YWxHcmlkRXZlbnRzTGF5ZXI6IFJlYWN0LkZDPFxuXHRIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyUHJvcHNcbj4gPSAoeyBkYXlzLCByZXNvdXJjZUlkLCAnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLCBwb3NpdGlvbmVkRXZlbnRzIH0pID0+IHtcblx0Y29uc3QgeyBldmVudEhlaWdodCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCB3ZWVrU3RhcnQgPSBkYXlzLmF0KDApPy5zdGFydE9mKCdkYXknKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCBwb2ludGVyLWV2ZW50cy1ub25lIHotMTAgb3ZlcmZsb3ctY2xpcFwiXG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHQ+XG5cdFx0XHR7cG9zaXRpb25lZEV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50S2V5ID0gYCR7ZXZlbnQuaWR9LSR7ZXZlbnQucG9zaXRpb259LSR7d2Vla1N0YXJ0Py50b0lTT1N0cmluZygpfS0ke3Jlc291cmNlSWQgPz8gJ25vLXJlc291cmNlJ31gXG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJhYnNvbHV0ZSB6LTEwIHBvaW50ZXItZXZlbnRzLWF1dG8gb3ZlcmZsb3ctY2xpcFwiXG5cdFx0XHRcdFx0XHRkYXRhLWxlZnQ9e2V2ZW50LmxlZnR9XG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5jb250YWluZXIuaG9yaXpvbnRhbC5ldmVudChldmVudC5pZCl9XG5cdFx0XHRcdFx0XHRkYXRhLXRvcD17ZXZlbnQudG9wfVxuXHRcdFx0XHRcdFx0ZGF0YS13aWR0aD17ZXZlbnQud2lkdGh9XG5cdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShldmVudEtleSwgJ3dyYXBwZXInKX1cblx0XHRcdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0XHRcdGxlZnQ6IGBjYWxjKCR7ZXZlbnQubGVmdH0lICsgdmFyKC0tc3BhY2luZykgKiAwLjI1KWAsXG5cdFx0XHRcdFx0XHRcdHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDEpYCxcblx0XHRcdFx0XHRcdFx0dG9wOiBgJHtldmVudC50b3B9cHhgLFxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IGAke2V2ZW50SGVpZ2h0fXB4YCxcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PERyYWdnYWJsZUV2ZW50XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtZnVsbCB3LWZ1bGwgc2hhZG93XCJcblx0XHRcdFx0XHRcdFx0ZWxlbWVudElkPXtldmVudEtleX1cblx0XHRcdFx0XHRcdFx0ZXZlbnQ9e2V2ZW50fVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXIgPSBtZW1vKE5vTWVtb0hvcml6b250YWxHcmlkRXZlbnRzTGF5ZXIpXG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBBbGxEYXlDZWxsUHJvcHMge1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgTm9NZW1vQWxsRGF5Q2VsbDogUmVhY3QuRkM8QWxsRGF5Q2VsbFByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCd3LTE2IGJvcmRlci1yIHNocmluay0wIHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwIGZsZXggYm9yZGVyLWIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHNtOnRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdD5cblx0XHRcdHt0KCdhbGxEYXknKX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgQWxsRGF5Q2VsbCA9IG1lbW8oTm9NZW1vQWxsRGF5Q2VsbClcbiIsCiAgICAiaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgSG91ckxhYmVsUHJvcHMge1xuXHRkYXRlOiBEYXlqc1xufVxuXG5leHBvcnQgY29uc3QgSG91ckxhYmVsOiBSZWFjdC5GQzxIb3VyTGFiZWxQcm9wcz4gPSAoeyBkYXRlIH0pID0+IHtcblx0Y29uc3QgeyByZW5kZXJIb3VyLCB0aW1lRm9ybWF0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKHJlbmRlckhvdXIpIHtcblx0XHRyZXR1cm4gPD57cmVuZGVySG91cihkYXRlKX08Lz5cblx0fVxuXG5cdHJldHVybiA8PntkYXRlLmZvcm1hdCh0aW1lRm9ybWF0ID09PSAnMTItaG91cicgPyAnaCBBJyA6ICdIJyl9PC8+XG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5pbXBvcnQgeyBHcmlkQ2VsbCB9IGZyb20gJy4uL2dyaWQtY2VsbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyIH0gZnJvbSAnLi92ZXJ0aWNhbC1ncmlkLWV2ZW50cy1sYXllcidcblxuZXhwb3J0IGludGVyZmFjZSBWZXJ0aWNhbEdyaWRDb2xQcm9wcyB7XG5cdGlkOiBzdHJpbmdcblx0ZGF5PzogRGF5anNcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRyZXNvdXJjZT86IFJlc291cmNlXG5cdGRheXM6IERheWpzW10gLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGNvbHVtbiByZXByZXNlbnRzXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0cmVuZGVySGVhZGVyPzogKCkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdHJlbmRlckNlbGw/OiAoZGF0ZTogRGF5anMpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRub0V2ZW50cz86IGJvb2xlYW5cblx0LyoqIE9wdGlvbmFsIGFycmF5IG9mIG1pbnV0ZSBzbG90cyBieSB3aGljaCB0aGUgaG91ciBpcyBkaXZpZGVkXG5cdCAqIGUuZy4sIFswLCAxNSwgMzAsIDQ1XSBmb3IgcXVhcnRlci1ob3VyIHNsb3RzXG5cdCAqL1xuXHRjZWxsU2xvdHM/OiBudW1iZXJbXVxuXHQvKiogV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNvbHVtbiBpbiB0aGUgZ3JpZCAqL1xuXHRpc0xhc3RDb2x1bW4/OiBib29sZWFuXG59XG5cbmNvbnN0IE5vTWVtb1ZlcnRpY2FsR3JpZENvbDogUmVhY3QuRkM8VmVydGljYWxHcmlkQ29sUHJvcHM+ID0gKHtcblx0aWQsXG5cdGRheXMsXG5cdHJlc291cmNlSWQsXG5cdHJlc291cmNlLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxuXHRncmlkVHlwZSxcblx0Y2xhc3NOYW1lLFxuXHRyZW5kZXJDZWxsLFxuXHRub0V2ZW50cyxcblx0Y2VsbFNsb3RzID0gWzYwXSwgLy8gRGVmYXVsdCB0byBmdWxsIGhvdXIgc2xvdHNcblx0aXNMYXN0Q29sdW1uLFxufSkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGZsZXgtY29sIGZsZXgtMSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWluLXctMjAgYmctYmFja2dyb3VuZCByZWxhdGl2ZScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkIHx8IGtleXMuY29udGFpbmVyLnZlcnRpY2FsLmNvbChpZCl9XG5cdFx0PlxuXHRcdFx0ey8qIFRpbWUgc2xvdHMgKi99XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBoLWZ1bGwgcmVsYXRpdmUgZ3JpZFwiXG5cdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0Z3JpZFRlbXBsYXRlUm93czogYHJlcGVhdCgke2RheXMubGVuZ3RofSwgbWlubWF4KDAsIDFmcikpYCxcblx0XHRcdFx0fX1cblx0XHRcdD5cblx0XHRcdFx0e2RheXMubWFwKChkYXksIGRheUluZGV4KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgaG91clN0ciA9IGRheS5mb3JtYXQoJ0hIJylcblxuXHRcdFx0XHRcdGlmIChyZW5kZXJDZWxsKSB7XG5cdFx0XHRcdFx0XHRjb25zdCB0ZXN0SWQgPVxuXHRcdFx0XHRcdFx0XHRpZCA9PT0ga2V5cy5jb2wudGltZVxuXHRcdFx0XHRcdFx0XHRcdD8ga2V5cy5jZWxsLnZlcnRpY2FsVGltZShob3VyU3RyKVxuXHRcdFx0XHRcdFx0XHRcdDoga2V5cy5jZWxsLnZlcnRpY2FsKGRheSwgaG91clN0ciwgJzAwJywgcmVzb3VyY2VJZClcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtaW4taC1bNjBweF0gYm9yZGVyLWIgYm9yZGVyLXJcIlxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXt0ZXN0SWR9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoaWQsIGRheUluZGV4LCBob3VyU3RyKX1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHtyZW5kZXJDZWxsKGRheSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0J2ZsZXggZmxleC1jb2wgbWluLWgtWzYwcHhdJyxcblx0XHRcdFx0XHRcdFx0XHRpc0xhc3RDb2x1bW4gPyAnYm9yZGVyLXItMCcgOiAnYm9yZGVyLXInXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KGlkLCBkYXlJbmRleCwgaG91clN0cil9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdHtjZWxsU2xvdHMubWFwKChtaW51dGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBtID0gbWludXRlID09PSA2MCA/IHVuZGVmaW5lZCA6IG1pbnV0ZVxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1tID0gbSA9PT0gdW5kZWZpbmVkID8gJzAwJyA6IFN0cmluZyhtKS5wYWRTdGFydCgyLCAnMCcpXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgdGVzdElkID0ga2V5cy5jZWxsLnZlcnRpY2FsKGRheSwgaG91clN0ciwgbW0sIHJlc291cmNlSWQpXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgaXNRdWFydGVyID0gbWludXRlICE9PSA2MFxuXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdDxHcmlkQ2VsbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdob3ZlcjpiZy1hY2NlbnQgcmVsYXRpdmUgei0xMCBmbGV4LTEgbWluLWgtMCBjdXJzb3ItcG9pbnRlciBib3JkZXItYiBib3JkZXItci0wJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpc1F1YXJ0ZXIgJiYgJ2JvcmRlci1kYXNoZWQnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXt0ZXN0SWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRheT17bSA/IGRheS5taW51dGUobSkgOiBkYXl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aG91cj17ZGF5LmhvdXIoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoaWQsIGRheUluZGV4LCBtbSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1pbnV0ZT17bX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH0gLy8gRXZlbnRzIGFyZSByZW5kZXJlZCBpbiBhIHNlcGFyYXRlIGxheWVyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNob3VsZFJlbmRlckV2ZW50cz17ZmFsc2V9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0fSl9XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pfVxuXG5cdFx0XHRcdHsvKiBFdmVudCBibG9ja3MgbGF5ZXIgKi99XG5cdFx0XHRcdHshbm9FdmVudHMgJiYgKFxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCB6LTEwIHBvaW50ZXItZXZlbnRzLW5vbmVcIj5cblx0XHRcdFx0XHRcdDxWZXJ0aWNhbEdyaWRFdmVudHNMYXllclxuXHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5jb250YWluZXIuZXZlbnRzTGF5ZXIoJ3ZlcnRpY2FsJywgaWQpfVxuXHRcdFx0XHRcdFx0XHRkYXlzPXtkYXlzfVxuXHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgVmVydGljYWxHcmlkQ29sID0gbWVtbyhcblx0Tm9NZW1vVmVydGljYWxHcmlkQ29sXG4pIGFzIHR5cGVvZiBOb01lbW9WZXJ0aWNhbEdyaWRDb2xcbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ3VycmVudFRpbWVJbmRpY2F0b3IgfSBmcm9tICdAL2NvbXBvbmVudHMvY3VycmVudC10aW1lLWluZGljYXRvcidcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgeyB1c2VQcm9jZXNzZWREYXlFdmVudHMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZERheUV2ZW50cydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5pbnRlcmZhY2UgVmVydGljYWxHcmlkRXZlbnRzTGF5ZXJQcm9wcyB7XG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0ZGF5czogRGF5anNbXSAvLyBUaGUgc3BlY2lmaWMgZGF5IHRoaXMgbGF5ZXIgcmVwcmVzZW50c1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdHJlc291cmNlPzogUmVzb3VyY2Vcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5jb25zdCBOb01lbW9WZXJ0aWNhbEdyaWRFdmVudHNMYXllcjogUmVhY3QuRkM8VmVydGljYWxHcmlkRXZlbnRzTGF5ZXJQcm9wcz4gPSAoe1xuXHRkYXlzLFxuXHRncmlkVHlwZSA9ICdob3VyJyxcblx0cmVzb3VyY2VJZCxcblx0cmVzb3VyY2UsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG59KSA9PiB7XG5cdGNvbnN0IHRvZGF5RXZlbnRzID0gdXNlUHJvY2Vzc2VkRGF5RXZlbnRzKHsgZGF5cywgZ3JpZFR5cGUsIHJlc291cmNlSWQgfSlcblx0Y29uc3QgcmFuZ2VTdGFydCA9IGRheXMuYXQoMClcblx0Y29uc3QgcmFuZ2VFbmQgPSBkYXlzLmF0KC0xKT8uYWRkKDEsIGdyaWRUeXBlKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBwb2ludGVyLWV2ZW50cy1ub25lIHotMTAgb3ZlcmZsb3ctY2xpcFwiXG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHQ+XG5cdFx0XHR7cmFuZ2VTdGFydCAmJiByYW5nZUVuZCAmJiAoXG5cdFx0XHRcdDxDdXJyZW50VGltZUluZGljYXRvclxuXHRcdFx0XHRcdHJhbmdlRW5kPXtyYW5nZUVuZH1cblx0XHRcdFx0XHRyYW5nZVN0YXJ0PXtyYW5nZVN0YXJ0fVxuXHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0Lz5cblx0XHRcdCl9XG5cdFx0XHR7dG9kYXlFdmVudHMubWFwKChldmVudCwgaW5kZXgpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnRLZXkgPSBgZXZlbnQtJHtldmVudC5pZH0tJHtpbmRleH0tJHtkYXlzLmF0KDApPy50b0lTT1N0cmluZygpfS0ke3Jlc291cmNlSWQgPz8gJ25vLXJlc291cmNlJ31gXG5cdFx0XHRcdGNvbnN0IGlzU2hvcnRFdmVudCA9IGV2ZW50LmVuZC5kaWZmKGV2ZW50LnN0YXJ0LCAnbWludXRlJykgPD0gMTVcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImFic29sdXRlXCJcblx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KGV2ZW50S2V5LCAnd3JhcHBlcicpfVxuXHRcdFx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRcdFx0bGVmdDogYCR7ZXZlbnQubGVmdH0lYCxcblx0XHRcdFx0XHRcdFx0d2lkdGg6IGBjYWxjKCR7ZXZlbnQud2lkdGh9JSAtIHZhcigtLXNwYWNpbmcpICogMilgLFxuXHRcdFx0XHRcdFx0XHR0b3A6IGAke2V2ZW50LnRvcH0lYCxcblx0XHRcdFx0XHRcdFx0aGVpZ2h0OiBgJHtldmVudC5oZWlnaHR9JWAsXG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxEcmFnZ2FibGVFdmVudFxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKCdwb2ludGVyLWV2ZW50cy1hdXRvJywge1xuXHRcdFx0XHRcdFx0XHRcdCdbJl9wXTp0ZXh0LVsxMHB4XSBbJl9wXTptdC0wJzogaXNTaG9ydEV2ZW50LFxuXHRcdFx0XHRcdFx0XHR9KX1cblx0XHRcdFx0XHRcdFx0ZWxlbWVudElkPXtldmVudEtleX1cblx0XHRcdFx0XHRcdFx0ZXZlbnQ9e2V2ZW50fVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyID0gbWVtbyhOb01lbW9WZXJ0aWNhbEdyaWRFdmVudHNMYXllcilcbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmludGVyZmFjZSBDdXJyZW50VGltZUluZGljYXRvclByb3BzIHtcblx0LyoqIFRoZSBzdGFydCBkYXRlL3RpbWUgb2YgdGhlIGNvbnRhaW5lcidzIHRpbWVsaW5lIChlLmcuLCB0b3Agb2YgdGhlIGNvbHVtbikgKi9cblx0cmFuZ2VTdGFydDogRGF5anNcblx0LyoqIFRoZSBlbmQgZGF0ZS90aW1lIG9mIHRoZSBjb250YWluZXIncyB0aW1lbGluZSAoZS5nLiwgYm90dG9tIG9mIHRoZSBjb2x1bW4pICovXG5cdHJhbmdlRW5kOiBEYXlqc1xuXHQvKiogT3B0aW9uYWwgcmVmZXJlbmNlIHRpbWUgZm9yIFwibm93XCIgKHVzZWZ1bCBmb3IgdGVzdGluZykgKi9cblx0bm93PzogRGF5anNcblx0LyoqIFRoZSByZXNvdXJjZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb2x1bW4gKG9wdGlvbmFsKSAqL1xuXHRyZXNvdXJjZT86IFJlc291cmNlXG59XG5cbi8qKlxuICogUmVuZGVycyBhIGhvcml6b250YWwgcmVkIGxpbmUgaW5kaWNhdGluZyB0aGUgY3VycmVudCB0aW1lIHJlbGF0aXZlIHRvIGEgdmVydGljYWwgY29udGFpbmVyJ3MgdGltZWxpbmUuXG4gKiBUaGUgaW5kaWNhdG9yIGhhbmRsZXMgaXRzIG93biB2aXNpYmlsaXR5IGJhc2VkIG9uIHdoZXRoZXIgJ25vdycgZmFsbHMgd2l0aGluIHRoZSBwcm92aWRlZCByYW5nZS5cbiAqIFN1cHBvcnRzIGN1c3RvbSByZW5kZXJpbmcgdmlhIHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yIGZyb20gY29udGV4dC5cbiAqL1xuY29uc3QgTm9NZW1vQ3VycmVudFRpbWVJbmRpY2F0b3IgPSAoe1xuXHRyYW5nZVN0YXJ0LFxuXHRyYW5nZUVuZCxcblx0bm93OiBwcm9wTm93LFxuXHRyZXNvdXJjZSxcbn06IEN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMpID0+IHtcblx0Ly8gR2V0IHJlbmRlciBmdW5jdGlvbiBhbmQgY3VycmVudCB2aWV3IGZyb20gY29udGV4dFxuXHRjb25zdCB7IHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLCB2aWV3IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dChcblx0XHQoc3RhdGUpID0+ICh7XG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcjogc3RhdGUucmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHR2aWV3OiBzdGF0ZS52aWV3LFxuXHRcdH0pXG5cdClcblxuXHRjb25zdCBub3cgPSBwcm9wTm93ID8/IGRheWpzKClcblxuXHQvLyBDaGVjayBpZiBjdXJyZW50IHRpbWUgZmFsbHMgd2l0aGluIHRoaXMgcmFuZ2Vcblx0Y29uc3QgaXNXaXRoaW5SYW5nZSA9IG5vdy5pc1NhbWVPckFmdGVyKHJhbmdlU3RhcnQpICYmIG5vdy5pc0JlZm9yZShyYW5nZUVuZClcblxuXHRpZiAoIWlzV2l0aGluUmFuZ2UpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cblx0Y29uc3QgdG90YWxEdXJhdGlvbiA9IHJhbmdlRW5kLmRpZmYocmFuZ2VTdGFydCwgJ21pbnV0ZScpXG5cdGNvbnN0IG1pbnV0ZXNGcm9tU3RhcnQgPSBub3cuZGlmZihyYW5nZVN0YXJ0LCAnbWludXRlJylcblx0Y29uc3QgcHJvZ3Jlc3MgPSAobWludXRlc0Zyb21TdGFydCAvIHRvdGFsRHVyYXRpb24pICogMTAwXG5cblx0Ly8gSWYgY3VzdG9tIHJlbmRlciBmdW5jdGlvbiBpcyBwcm92aWRlZCB2aWEgY29udGV4dCwgdXNlIGl0XG5cdGlmIChyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcikge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8PlxuXHRcdFx0XHR7cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3Ioe1xuXHRcdFx0XHRcdGN1cnJlbnRUaW1lOiBub3csXG5cdFx0XHRcdFx0cmFuZ2VTdGFydCxcblx0XHRcdFx0XHRyYW5nZUVuZCxcblx0XHRcdFx0XHRwcm9ncmVzcyxcblx0XHRcdFx0XHRyZXNvdXJjZSxcblx0XHRcdFx0XHR2aWV3LFxuXHRcdFx0XHR9KX1cblx0XHRcdDwvPlxuXHRcdClcblx0fVxuXG5cdC8vIERlZmF1bHQgaW5kaWNhdG9yIHJlbmRlcmluZ1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImFic29sdXRlIGxlZnQtMCByaWdodC0wIGgtMC41IGJnLXJlZC01MDAgei01MCBwb2ludGVyLWV2ZW50cy1ub25lXCJcblx0XHRcdGRhdGEtdGVzdGlkPVwiY3VycmVudC10aW1lLWluZGljYXRvclwiXG5cdFx0XHRzdHlsZT17e1xuXHRcdFx0XHR0b3A6IGAke3Byb2dyZXNzfSVgLFxuXHRcdFx0fX1cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBDdXJyZW50VGltZUluZGljYXRvciA9IG1lbW8oTm9NZW1vQ3VycmVudFRpbWVJbmRpY2F0b3IpXG4iLAogICAgImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGZpbHRlckV2ZW50c0J5UmVzb3VyY2UgfSBmcm9tICdAL2xpYi91dGlscy9ldmVudC11dGlscydcbmltcG9ydCB7XG5cdGdldFBvc2l0aW9uZWREYXlFdmVudHMsXG5cdHR5cGUgUG9zaXRpb25lZEV2ZW50LFxufSBmcm9tICdAL2xpYi91dGlscy9wb3NpdGlvbi1kYXktZXZlbnRzJ1xuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkRGF5RXZlbnRzUHJvcHMge1xuXHRkYXlzOiBEYXlqc1tdIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IHVzZVByb2Nlc3NlZERheUV2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlLFxuXHRyZXNvdXJjZUlkLFxufTogVXNlUHJvY2Vzc2VkRGF5RXZlbnRzUHJvcHMpID0+IHtcblx0Y29uc3QgeyBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIGdldEV2ZW50c0ZvclJlc291cmNlIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgZmlyc3QgPSBkYXlzLmF0KDApXG5cdGNvbnN0IGxhc3QgPSBkYXlzLmF0KC0xKVxuXHRjb25zdCBkYXlTdGFydCA9IGZpcnN0Py5zdGFydE9mKCdkYXknKVxuXHRjb25zdCBkYXlFbmQgPSBsYXN0Py5lbmRPZignZGF5JylcblxuXHRjb25zdCBldmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoIWRheVN0YXJ0IHx8ICFkYXlFbmQpIHJldHVybiBbXVxuXHRcdGxldCBkYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoZGF5U3RhcnQsIGRheUVuZClcblx0XHRpZiAocmVzb3VyY2VJZCkge1xuXHRcdFx0ZGF5RXZlbnRzID0gZmlsdGVyRXZlbnRzQnlSZXNvdXJjZShcblx0XHRcdFx0ZGF5RXZlbnRzLFxuXHRcdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZShyZXNvdXJjZUlkKVxuXHRcdFx0KVxuXHRcdH1cblxuXHRcdC8vIFZlcnRpY2FsIGdyaWRzIChEYXkvV2Vlay9SZXNvdXJjZSBWZXJ0aWNhbCkgbmV2ZXIgcmVuZGVyIGFsbC1kYXkgZXZlbnRzXG5cdFx0Ly8gYXMgdGhvc2UgYXJlIGhhbmRsZWQgYnkgdGhlIGFsbC1kYXktcm93IG9yIGFyZSBub3QgYXBwcm9wcmlhdGUgZm9yIHRoZSB0aW1lIGdyaWQuXG5cdFx0cmV0dXJuIGRheUV2ZW50cy5maWx0ZXIoKGUpID0+ICFlLmFsbERheSlcblx0fSwgW1xuXHRcdGRheVN0YXJ0LFxuXHRcdGRheUVuZCxcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XSlcblxuXHRjb25zdCB0b2RheUV2ZW50cyA9IHVzZU1lbW88UG9zaXRpb25lZEV2ZW50W10+KCgpID0+IHtcblx0XHRyZXR1cm4gZ2V0UG9zaXRpb25lZERheUV2ZW50cyh7XG5cdFx0XHRkYXlzLFxuXHRcdFx0ZXZlbnRzLFxuXHRcdFx0Z3JpZFR5cGUsXG5cdFx0fSlcblx0fSwgW2RheXMsIGdyaWRUeXBlLCBldmVudHNdKVxuXG5cdHJldHVybiB0b2RheUV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBvc2l0aW9uZWRFdmVudCBleHRlbmRzIENhbGVuZGFyRXZlbnQge1xuXHRsZWZ0OiBudW1iZXIgLy8gTGVmdCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdHdpZHRoOiBudW1iZXIgLy8gV2lkdGggaW4gcGVyY2VudGFnZVxuXHR0b3A6IG51bWJlciAvLyBUb3AgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuXHRoZWlnaHQ6IG51bWJlciAvLyBIZWlnaHQgaW4gcGVyY2VudGFnZVxuXHR6SW5kZXg/OiBudW1iZXIgLy8gWi1pbmRleCBmb3IgbGF5ZXJpbmcgb3ZlcmxhcHBpbmcgZXZlbnRzXG59XG5cbmludGVyZmFjZSBHZXRQb3NpdGlvbmVkRGF5RXZlbnRzUGFyYW1zIHtcblx0ZGF5czogRGF5anNbXVxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInIHwgJ21pbnV0ZSdcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbn1cblxuZXhwb3J0IGNvbnN0IGdldFBvc2l0aW9uZWREYXlFdmVudHMgPSAoe1xuXHRkYXlzLFxuXHRncmlkVHlwZSA9ICdob3VyJyxcblx0ZXZlbnRzLFxufTogR2V0UG9zaXRpb25lZERheUV2ZW50c1BhcmFtcyk6IFBvc2l0aW9uZWRFdmVudFtdID0+IHtcblx0Ly8gRmlsdGVyIG91dCBhbGwtZGF5IGV2ZW50cyBhbmQgc29ydCBieSBzdGFydCB0aW1lXG5cdGNvbnN0IHNvcnRlZEV2ZW50cyA9IGV2ZW50c1xuXHRcdC5maWx0ZXIoKGUpID0+ICFlLmFsbERheSlcblx0XHQudG9Tb3J0ZWQoKGEsIGIpID0+IGEuc3RhcnQuZGlmZihiLnN0YXJ0KSlcblxuXHRpZiAoc29ydGVkRXZlbnRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBbXVxuXHR9XG5cblx0Ly8gRGV0ZXJtaW5lIGdyaWQgYm91bmRhcmllcyBhbmQgbWV0cmljc1xuXHQvLyBVc2UgZXhwbGljaXQgc3RhcnRPZiB0byBlbnN1cmUgd2UgYXJlIGFuY2hvcmVkIHRvIHRoZSBncmlkIHVuaXQgYm91bmRhcmllc1xuXHQvLyBUaGlzIHByZXZlbnRzIG9mZnNldHMgaWYgdGhlIGdyaWQgZGF5cyBhcmUgbm90IG5vcm1hbGl6ZWRcblx0Y29uc3QgZ3JpZFN0YXJ0ID0gZGF5cy5hdCgwKSB8fCBkYXlqcygpXG5cdGNvbnN0IHRvdGFsVW5pdHMgPSBkYXlzLmxlbmd0aFxuXHRjb25zdCBpc0Rpc2NyZXRlID0gZ3JpZFR5cGUgPT09ICdkYXknXG5cblx0Ly8gU3RlcCAxOiBHcm91cCBldmVudHMgaW50byBjbHVzdGVycyBvZiBvdmVybGFwcGluZyBldmVudHNcblx0Y29uc3QgY2x1c3RlcnM6IENhbGVuZGFyRXZlbnRbXVtdID0gW11cblx0bGV0IGN1cnJlbnRDbHVzdGVyOiBDYWxlbmRhckV2ZW50W10gPSBbXVxuXHRsZXQgbGFzdEV2ZW50RW5kOiBEYXlqcyB8IG51bGwgPSBudWxsXG5cdGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkRXZlbnRzKSB7XG5cdFx0aWYgKGxhc3RFdmVudEVuZCAmJiBldmVudC5zdGFydC5pc1NhbWVPckFmdGVyKGxhc3RFdmVudEVuZCkpIHtcblx0XHRcdGlmIChjdXJyZW50Q2x1c3Rlci5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNsdXN0ZXJzLnB1c2goY3VycmVudENsdXN0ZXIpXG5cdFx0XHR9XG5cdFx0XHRjdXJyZW50Q2x1c3RlciA9IFtdXG5cdFx0fVxuXHRcdGN1cnJlbnRDbHVzdGVyLnB1c2goZXZlbnQpXG5cdFx0bGFzdEV2ZW50RW5kID0gbGFzdEV2ZW50RW5kID8gZGF5anMubWF4KGxhc3RFdmVudEVuZCwgZXZlbnQuZW5kKSA6IGV2ZW50LmVuZFxuXHR9XG5cdGlmIChjdXJyZW50Q2x1c3Rlci5sZW5ndGggPiAwKSB7XG5cdFx0Y2x1c3RlcnMucHVzaChjdXJyZW50Q2x1c3Rlcilcblx0fVxuXG5cdC8vIENvbXB1dGUgdG9wL2hlaWdodCBwZXJjZW50YWdlcyBmb3IgYW4gZXZlbnQsIGNsYW1wZWQgdG8gZ3JpZDsgbnVsbCBpZiBvdXRzaWRlLlxuXHRjb25zdCBjb21wdXRlVG9wSGVpZ2h0ID0gKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdCk6IHsgdG9wOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0gfCBudWxsID0+IHtcblx0XHRsZXQgc3RhcnRUaW1lID0gZXZlbnQuc3RhcnQuZGlmZihncmlkU3RhcnQsIGdyaWRUeXBlLCB0cnVlKVxuXHRcdGxldCBlbmRUaW1lID0gZXZlbnQuZW5kLmRpZmYoZ3JpZFN0YXJ0LCBncmlkVHlwZSwgdHJ1ZSlcblx0XHRpZiAoaXNEaXNjcmV0ZSkge1xuXHRcdFx0c3RhcnRUaW1lID0gTWF0aC5mbG9vcihzdGFydFRpbWUpXG5cdFx0XHRlbmRUaW1lID0gTWF0aC5jZWlsKGVuZFRpbWUpXG5cdFx0XHRpZiAoZW5kVGltZSA8PSBzdGFydFRpbWUpIGVuZFRpbWUgPSBzdGFydFRpbWUgKyAxXG5cdFx0fVxuXHRcdGlmIChzdGFydFRpbWUgPCAwKSBzdGFydFRpbWUgPSAwXG5cdFx0aWYgKGVuZFRpbWUgPiB0b3RhbFVuaXRzKSBlbmRUaW1lID0gdG90YWxVbml0c1xuXHRcdGNvbnN0IGR1cmF0aW9uID0gTWF0aC5tYXgoMCwgZW5kVGltZSAtIHN0YXJ0VGltZSlcblx0XHRpZiAoZHVyYXRpb24gPT09IDApIHJldHVybiBudWxsXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogKHN0YXJ0VGltZSAvIHRvdGFsVW5pdHMpICogMTAwLFxuXHRcdFx0aGVpZ2h0OiAoZHVyYXRpb24gLyB0b3RhbFVuaXRzKSAqIDEwMCxcblx0XHR9XG5cdH1cblxuXHQvLyBNYXggY2x1c3RlciBvZmZzZXQgYnkgZXZlbnQgY291bnQgKDIgZXZlbnRzIOKGkiAyNSUsIGV0Yy4pXG5cdGNvbnN0IG1heE9mZnNldEJ5Q291bnQgPSAobjogbnVtYmVyKSA9PlxuXHRcdG4gPT09IDIgPyAyNSA6IG4gPT09IDMgPyA1MCA6IG4gPT09IDQgPyA2MCA6IDcwXG5cblx0Ly8gU3RlcCAyOiBGb3IgZWFjaCBjbHVzdGVyLCBjb21wdXRlIHBvc2l0aW9uc1xuXHRjb25zdCBwcm9jZXNzZWRFdmVudHM6IFBvc2l0aW9uZWRFdmVudFtdID0gW11cblx0Zm9yIChjb25zdCBjbHVzdGVyIG9mIGNsdXN0ZXJzKSB7XG5cdFx0aWYgKGNsdXN0ZXIubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRjb25zdCBldmVudCA9IGNsdXN0ZXJbMF1cblx0XHRcdGNvbnN0IHBvcyA9IGNvbXB1dGVUb3BIZWlnaHQoZXZlbnQpXG5cdFx0XHRpZiAoIXBvcykgY29udGludWVcblx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHsgLi4uZXZlbnQsIGxlZnQ6IDAsIHdpZHRoOiAxMDAsIC4uLnBvcyB9KVxuXHRcdFx0Y29udGludWVcblx0XHR9XG5cblx0XHQvLyBNdWx0aXBsZSBldmVudHMg4oCUIGxheWVyZWQgcG9zaXRpb25pbmcuIExvbmdlc3QgZHVyYXRpb24gZmlyc3QsIHRpZS1icmVha1xuXHRcdC8vIGJ5IGVhcmxpZXN0IHN0YXJ0LlxuXHRcdGNvbnN0IHNvcnRlZENsdXN0ZXIgPSBbLi4uY2x1c3Rlcl0uc29ydCgoYSwgYikgPT4ge1xuXHRcdFx0Y29uc3QgZHVyRGlmZiA9XG5cdFx0XHRcdGIuZW5kLmRpZmYoYi5zdGFydCwgJ21pbnV0ZScpIC0gYS5lbmQuZGlmZihhLnN0YXJ0LCAnbWludXRlJylcblx0XHRcdHJldHVybiBkdXJEaWZmICE9PSAwID8gZHVyRGlmZiA6IGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuXHRcdH0pXG5cblx0XHRjb25zdCBuID0gc29ydGVkQ2x1c3Rlci5sZW5ndGhcblx0XHRjb25zdCBvZmZzZXRQZXJFdmVudCA9IG4gPiAxID8gbWF4T2Zmc2V0QnlDb3VudChuKSAvIChuIC0gMSkgOiAwXG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuXHRcdFx0Y29uc3QgZXZlbnQgPSBzb3J0ZWRDbHVzdGVyW2ldXG5cdFx0XHRjb25zdCBwb3MgPSBjb21wdXRlVG9wSGVpZ2h0KGV2ZW50KVxuXHRcdFx0aWYgKCFwb3MpIGNvbnRpbnVlXG5cdFx0XHQvLyBGaXJzdCBldmVudCAobG9uZ2VzdCkgdGFrZXMgZnVsbCB3aWR0aDsgbGF0ZXIgZXZlbnRzIGFyZSBvZmZzZXQuXG5cdFx0XHRjb25zdCBsZWZ0ID0gaSA9PT0gMCA/IDAgOiBvZmZzZXRQZXJFdmVudCAqIGlcblx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcblx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdC4uLnBvcyxcblx0XHRcdFx0bGVmdCxcblx0XHRcdFx0d2lkdGg6IDEwMCAtIGxlZnQsXG5cdFx0XHRcdHpJbmRleDogaSArIDEsXG5cdFx0XHR9KVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBwcm9jZXNzZWRFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHMge1xuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc2VzPzogeyBoZWFkZXI/OiBzdHJpbmc7IGFsbERheT86IHN0cmluZyB9XG5cdGFsbERheVJvdz86IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5jb25zdCBOb01lbW9WZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXI6IFJlYWN0LkZDPFxuXHRWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXJQcm9wc1xuPiA9ICh7IGNoaWxkcmVuLCBjbGFzc2VzLCBhbGxEYXlSb3cgfSkgPT4ge1xuXHRjb25zdCB7IHN0aWNreVZpZXdIZWFkZXIsIHZpZXdIZWFkZXJDbGFzc05hbWUgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KFxuXHRcdChzdGF0ZSkgPT4gKHtcblx0XHRcdHN0aWNreVZpZXdIZWFkZXI6IHN0YXRlLnN0aWNreVZpZXdIZWFkZXIsXG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lOiBzdGF0ZS52aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdH0pXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIxIGJnLWJhY2tncm91bmQnLCAvLyBaLWluZGV4IGFib3ZlIHRoZSBsZWZ0IHN0aWNreSByZXNvdXJjZSBjb2x1bW5cblx0XHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2gtMTIgYm9yZGVyLWIgbWluLXctZnVsbCB3LWZpdCcsIGNsYXNzZXM/LmhlYWRlcil9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1oZWFkZXJcIlxuXHRcdFx0PlxuXHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdHsvKiBBbGwtZGF5IHJvdyAqL31cblx0XHRcdHthbGxEYXlSb3cgJiYgKFxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCB3LWZ1bGwgbWluLWgtMTInLCBjbGFzc2VzPy5hbGxEYXkpfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1hbGwtZGF5XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHthbGxEYXlSb3d9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyID0gbWVtbyhcblx0Tm9NZW1vVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyXG4pXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkQ29sLCB0eXBlIFZlcnRpY2FsR3JpZENvbFByb3BzIH0gZnJvbSAnLi92ZXJ0aWNhbC1ncmlkLWNvbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lciB9IGZyb20gJy4vdmVydGljYWwtZ3JpZC1oZWFkZXItY29udGFpbmVyJ1xuXG5pbnRlcmZhY2UgVmVydGljYWxHcmlkUHJvcHMge1xuXHRjb2x1bW5zOiBWZXJ0aWNhbEdyaWRDb2xQcm9wc1tdXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0dmFyaWFudD86ICdyZWd1bGFyJyB8ICdyZXNvdXJjZSdcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBib2R5Pzogc3RyaW5nOyBhbGxEYXk/OiBzdHJpbmcgfVxuXHRhbGxEYXlSb3c/OiBSZWFjdC5SZWFjdE5vZGVcblx0LyoqXG5cdCAqIE9wdGlvbmFsIGFycmF5IG9mIG1pbnV0ZSBzbG90cyBieSB3aGljaCB0aGUgaG91ciBpcyBkaXZpZGVkXG5cdCAqIGUuZy4sIFswLCAxNSwgMzAsIDQ1XSBmb3IgcXVhcnRlci1ob3VyIHNsb3RzXG5cdCAqL1xuXHRjZWxsU2xvdHM/OiBudW1iZXJbXVxuXHRzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcbn1cblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsR3JpZDogUmVhY3QuRkM8VmVydGljYWxHcmlkUHJvcHM+ID0gKHtcblx0Y29sdW1ucyxcblx0Y2hpbGRyZW4sXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHZhcmlhbnQgPSAncmVzb3VyY2UnLFxuXHRjbGFzc2VzLFxuXHRhbGxEYXlSb3csXG5cdGNlbGxTbG90cyxcblx0c3R5bGUsXG59KSA9PiB7XG5cdGNvbnN0IGlzUmVzb3VyY2VDYWxlbmRhciA9IHZhcmlhbnQgPT09ICdyZXNvdXJjZSdcblx0Y29uc3QgaXNSZWd1bGFyQ2FsZW5kYXIgPSAhaXNSZXNvdXJjZUNhbGVuZGFyXG5cblx0Y29uc3QgaGVhZGVyID0gY2hpbGRyZW4gJiYgKFxuXHRcdDxWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXJcblx0XHRcdGFsbERheVJvdz17YWxsRGF5Um93fVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6IGNsYXNzZXM/LmhlYWRlciwgYWxsRGF5OiBjbGFzc2VzPy5hbGxEYXkgfX1cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9WZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXI+XG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImgtZnVsbCBmbGV4IGZsZXgtY29sXCJcblx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1jb250YWluZXJcIlxuXHRcdFx0c3R5bGU9e3N0eWxlfVxuXHRcdD5cblx0XHRcdHsvKiBoZWFkZXIgcm93ICovfVxuXHRcdFx0e2lzUmVndWxhckNhbGVuZGFyICYmIGhlYWRlcn1cblxuXHRcdFx0PFNjcm9sbEFyZWFcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbignaC1mdWxsJywgaXNSZWd1bGFyQ2FsZW5kYXIgJiYgJ292ZXJmbG93LWF1dG8nKX1cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLXNjcm9sbFwiXG5cdFx0XHRcdHZpZXdQb3J0UHJvcHM9e3sgY2xhc3NOYW1lOiAnKjpmbGV4ISAqOmZsZXgtY29sISAqOm1pbi1oLWZ1bGwnIH19XG5cdFx0XHQ+XG5cdFx0XHRcdHsvKiBoZWFkZXIgcm93IGZvciByZXNvdXJjZSBjYWxlbmRhciBpbnNpZGUgc2Nyb2xsIGFyZWEgKi99XG5cdFx0XHRcdHtpc1Jlc291cmNlQ2FsZW5kYXIgJiYgaGVhZGVyfVxuXHRcdFx0XHR7LyogQ2FsZW5kYXIgYXJlYSB3aXRoIHNjcm9sbCAqL31cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC0xIG1pbi13LWZ1bGwgdy1maXQnLCBjbGFzc2VzPy5ib2R5KX1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtYm9keVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7LyogRGF5IGNvbHVtbnMgd2l0aCB0aW1lIHNsb3RzICovfVxuXHRcdFx0XHRcdHtjb2x1bW5zLm1hcCgoY29sdW1uLCBpbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0PFZlcnRpY2FsR3JpZENvbFxuXHRcdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShjb2x1bW4uaWQsIGluZGV4KX1cblx0XHRcdFx0XHRcdFx0ey4uLmNvbHVtbn1cblx0XHRcdFx0XHRcdFx0Y2VsbFNsb3RzPXtjZWxsU2xvdHN9XG5cdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0aXNMYXN0Q29sdW1uPXtpbmRleCA9PT0gY29sdW1ucy5sZW5ndGggLSAxfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIC8+IHsvKiB2ZXJ0aWNhbCBzY3JvbGxiYXIgKi99XG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIG9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiIC8+eycgJ31cblx0XHRcdFx0ey8qIGhvcml6b250YWwgc2Nyb2xsYmFyICovfVxuXHRcdFx0PC9TY3JvbGxBcmVhPlxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGdldERheUhvdXJzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IGNhbGN1bGF0ZUJ1c2luZXNzSG91cnNSYW5nZSB9IGZyb20gJy4vYnVzaW5lc3MtaG91cnMnXG5cbmludGVyZmFjZSBHZXRWaWV3SG91cnNPcHRpb25zIHtcblx0cmVmZXJlbmNlRGF0ZTogRGF5anNcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG5cdC8qKlxuXHQgKiBGb3Igdmlld3Mgd2l0aCBtdWx0aXBsZSBkYXlzIChsaWtlIFdlZWtWaWV3KSwgd2UgbWlnaHQgd2FudCB0byBzaG93XG5cdCAqIHRoZSB1bmlvbiBvZiBhbGwgYnVzaW5lc3MgaG91cnMgYWNyb3NzIHRob3NlIGRheXMuXG5cdCAqL1xuXHRhbGxEYXRlcz86IERheWpzW11cblx0LyoqXG5cdCAqIE9wdGlvbmFsIGFkZGl0aW9uYWwgYnVzaW5lc3MgaG91cnMgY29uZmlndXJhdGlvbnMgKGUuZy4sIGZyb20gcmVzb3VyY2VzKS5cblx0ICogVGhlc2Ugd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGUgZ2xvYmFsIGJ1c2luZXNzSG91cnMgd2hlbiBjYWxjdWxhdGluZyB0aGUgdmlzaWJsZSByYW5nZS5cblx0ICovXG5cdHJlc291cmNlQnVzaW5lc3NIb3Vycz86IChCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdKVtdXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBsaXN0IG9mIGhvdXJzIHRvIGRpc3BsYXkgaW4gdGhlIGNhbGVuZGFyIHZpZXcuXG4gKiBJZiBoaWRlTm9uQnVzaW5lc3NIb3VycyBpcyB0cnVlLCBpdCBmaWx0ZXJzIHRoZSBob3VycyBiYXNlZCBvbiBidXNpbmVzc0hvdXJzIGNvbmZpZ3VyYXRpb24uXG4gKiBGb3IgbXVsdGlwbGUgZGF0ZXMsIGl0IHRha2VzIHRoZSBlYXJsaWVzdCBzdGFydCBhbmQgbGF0ZXN0IGVuZCBhY3Jvc3MgYWxsIGRhdGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0hvdXJzKHtcblx0cmVmZXJlbmNlRGF0ZSxcblx0YnVzaW5lc3NIb3Vycyxcblx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdGFsbERhdGVzID0gW3JlZmVyZW5jZURhdGVdLFxuXHRyZXNvdXJjZUJ1c2luZXNzSG91cnMgPSBbXSxcbn06IEdldFZpZXdIb3Vyc09wdGlvbnMpOiBEYXlqc1tdIHtcblx0Y29uc3QgaG91cnMgPSBnZXREYXlIb3Vycyh7IHJlZmVyZW5jZURhdGUgfSlcblxuXHRjb25zdCBoYXNCdXNpbmVzc0hvdXJzQ29uZmlnID1cblx0XHQhIWJ1c2luZXNzSG91cnMgfHwgcmVzb3VyY2VCdXNpbmVzc0hvdXJzLmxlbmd0aCA+IDBcblx0Y29uc3Qgc2hvdWxkRmlsdGVyQnlCdXNpbmVzc0hvdXJzID1cblx0XHRoaWRlTm9uQnVzaW5lc3NIb3VycyAmJiBoYXNCdXNpbmVzc0hvdXJzQ29uZmlnXG5cblx0aWYgKCFzaG91bGRGaWx0ZXJCeUJ1c2luZXNzSG91cnMpIHJldHVybiBob3Vyc1xuXG5cdGNvbnN0IHsgbWluU3RhcnQsIG1heEVuZCwgaGFzQnVzaW5lc3NIb3VycyB9ID0gY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlKHtcblx0XHRhbGxEYXRlcyxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0fSlcblxuXHRpZiAoIWhhc0J1c2luZXNzSG91cnMpIHJldHVybiBob3Vyc1xuXG5cdHJldHVybiBob3Vycy5maWx0ZXIoKGgpID0+IHtcblx0XHRjb25zdCBob3VyID0gaC5ob3VyKClcblx0XHRyZXR1cm4gaG91ciA+PSBtaW5TdGFydCAmJiBob3VyIDwgbWF4RW5kXG5cdH0pXG59XG4iLAogICAgImltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBIb3VyTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvaG91ci1sYWJlbC9ob3VyLWxhYmVsJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXREYXlLZXksIGlzVG9kYXkgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmV4cG9ydCBjb25zdCBEYXlWaWV3ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB0LCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3VycyB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IHRvZGF5ID0gaXNUb2RheShjdXJyZW50RGF0ZSlcblx0Y29uc3QgaG91cnMgPSBnZXRWaWV3SG91cnMoe1xuXHRcdHJlZmVyZW5jZURhdGU6IGN1cnJlbnREYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0YWxsRGF0ZXM6IFtjdXJyZW50RGF0ZV0sXG5cdH0pXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB7XG5cdFx0aWQ6IGtleXMuY29sLnRpbWUsXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0Y2xhc3NOYW1lOlxuXHRcdFx0J3Nocmluay0wIHctMTYgbWluLXctMTYgbWF4LXctMTYgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAnLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IERheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdDxIb3VyTGFiZWwgZGF0ZT17ZGF0ZX0gLz5cblx0XHRcdDwvZGl2PlxuXHRcdCksXG5cdH1cblxuXHRjb25zdCBjb2x1bW5zID0ge1xuXHRcdGlkOiBrZXlzLmNvbC5kYXkoY3VycmVudERhdGUpLFxuXHRcdGRheTogY3VycmVudERhdGUsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0Y2xhc3NOYW1lOiAndy1bY2FsYygxMDAlLTRyZW0pXSBmbGV4LTEnLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17PEFsbERheVJvdyBkYXlzPXtbY3VycmVudERhdGVdfSAvPn1cblx0XHRcdGNlbGxTbG90cz17WzAsIDE1LCAzMCwgNDVdfVxuXHRcdFx0Y2xhc3Nlcz17e1xuXHRcdFx0XHRoZWFkZXI6ICd3LWZ1bGwnLFxuXHRcdFx0XHRib2R5OiAndy1mdWxsJyxcblx0XHRcdFx0YWxsRGF5OiAndy1mdWxsJyxcblx0XHRcdH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIGNvbHVtbnNdfVxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHQ+XG5cdFx0XHR7LyogSGVhZGVyICovfVxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9eydmbGV4IGZsZXgtMSBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgbWluLWgtMTInfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cImRheS12aWV3LWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2ZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHRleHQtY2VudGVyIHRleHQtYmFzZSBmb250LXNlbWlib2xkIHNtOnRleHQteGwnLFxuXHRcdFx0XHRcdFx0dG9kYXkgJiYgJ3RleHQtcHJpbWFyeSdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2dldERheUtleShjdXJyZW50RGF0ZSl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ4czppbmxpbmUgaGlkZGVuXCI+XG5cdFx0XHRcdFx0XHR7Y3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCAnKX1cblx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0e2N1cnJlbnREYXRlLmZvcm1hdCgnTU1NTSBELCBZWVlZJyl9XG5cdFx0XHRcdFx0e3RvZGF5ICYmIChcblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgbWwtMiByb3VuZGVkLWZ1bGwgcHgtMSBweS0wLjUgdGV4dC14cyBzbTpweC0yIHNtOnRleHQtc21cIj5cblx0XHRcdFx0XHRcdFx0e3QoJ3RvZGF5Jyl9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBnZXRNb250aFdlZWtzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuaW1wb3J0IHsgTW9udGhIZWFkZXIgfSBmcm9tICcuL21vbnRoLWhlYWRlcidcbmltcG9ydCB0eXBlIHsgTW9udGhWaWV3UHJvcHMgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgTW9udGhWaWV3OiBSZWFjdC5GQzxNb250aFZpZXdQcm9wcz4gPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgd2Vla3MgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldE1vbnRoV2Vla3MoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKSxcblx0XHRbY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrXVxuXHQpXG5cblx0Y29uc3Qgcm93cyA9IHdlZWtzLm1hcCgoZGF5cywgd2Vla0luZGV4KSA9PiAoe1xuXHRcdGlkOiBrZXlzLmxpc3RLZXkoJ3dlZWsnLCB3ZWVrSW5kZXgpLFxuXHRcdGNvbHVtbnM6IGRheXMubWFwKChkYXkpID0+ICh7XG5cdFx0XHRpZDoga2V5cy5jb2wuZGF5KGRheSksXG5cdFx0XHRkYXksXG5cdFx0XHRjbGFzc05hbWU6ICd3LWF1dG8nLFxuXHRcdFx0Z3JpZFR5cGU6ICdkYXknIGFzIGNvbnN0LFxuXHRcdH0pKSxcblx0XHRjbGFzc05hbWU6ICdmbGV4LTEnLFxuXHRcdHNob3dEYXlOdW1iZXI6IHRydWUsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PEhvcml6b250YWxHcmlkXG5cdFx0XHRjbGFzc2VzPXt7IGJvZHk6ICd3LWZ1bGwnLCBoZWFkZXI6ICd3LWZ1bGwnIH19XG5cdFx0XHRyb3dzPXtyb3dzfVxuXHRcdFx0dmFyaWFudD1cInJlZ3VsYXJcIlxuXHRcdD5cblx0XHRcdDxNb250aEhlYWRlciBjbGFzc05hbWU9XCJoLTEyXCIgLz5cblx0XHQ8L0hvcml6b250YWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lclByb3BzIHtcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IE5vTWVtb0hvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyID0gKHtcblx0Y2hpbGRyZW4sXG5cdGNsYXNzTmFtZSxcbn06IEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHMpID0+IHtcblx0Y29uc3QgeyBzdGlja3lWaWV3SGVhZGVyLCB2aWV3SGVhZGVyQ2xhc3NOYW1lIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dChcblx0XHQoc3RhdGUpID0+ICh7XG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyOiBzdGF0ZS5zdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZTogc3RhdGUudmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHR9KVxuXHQpXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaC0xMiB3LWZpdCcsXG5cdFx0XHRcdHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIxIGJnLWJhY2tncm91bmQnLFxuXHRcdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD1cImhvcml6b250YWwtZ3JpZC1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXIgPSBtZW1vKFxuXHROb01lbW9Ib3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lclxuKVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciB9IGZyb20gJy4vaG9yaXpvbnRhbC1ncmlkLWhlYWRlci1jb250YWluZXInXG5pbXBvcnQge1xuXHRIb3Jpem9udGFsR3JpZFJvdyxcblx0dHlwZSBIb3Jpem9udGFsR3JpZFJvd1Byb3BzLFxufSBmcm9tICcuL2hvcml6b250YWwtZ3JpZC1yb3cnXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZFByb3BzIHtcblx0cm93czogSG9yaXpvbnRhbEdyaWRSb3dQcm9wc1tdXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzZXM/OiB7IGhlYWRlcj86IHN0cmluZzsgYm9keT86IHN0cmluZyB9XG5cdGFsbERheT86IGJvb2xlYW5cblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHR2YXJpYW50PzogJ3JlZ3VsYXInIHwgJ3Jlc291cmNlJ1xuXHRkYXlOdW1iZXJIZWlnaHQ/OiBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkOiBSZWFjdC5GQzxIb3Jpem9udGFsR3JpZFByb3BzPiA9ICh7XG5cdHJvd3MsXG5cdGNoaWxkcmVuLFxuXHRjbGFzc2VzLFxuXHRhbGxEYXk6IHRvcExldmVsQWxsRGF5LFxuXHRncmlkVHlwZSxcblx0dmFyaWFudCA9ICdyZXNvdXJjZScsXG5cdGRheU51bWJlckhlaWdodCxcbn0pID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IGlzUmVzb3VyY2VDYWxlbmRhciA9IHZhcmlhbnQgPT09ICdyZXNvdXJjZSdcblx0Y29uc3QgaXNSZWd1bGFyQ2FsZW5kYXIgPSAhaXNSZXNvdXJjZUNhbGVuZGFyXG5cblx0Y29uc3QgaGVhZGVyID0gY2hpbGRyZW4gJiYgKFxuXHRcdDxIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciBjbGFzc05hbWU9e2NsYXNzZXM/LmhlYWRlcn0+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9Ib3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lcj5cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiaC1mdWxsIGZsZXggZmxleC1jb2xcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtY29udGFpbmVyXCJcblx0XHQ+XG5cdFx0XHR7LyoqXG5cdFx0XHQgKiBoZWFkZXIgcm93IGlzIHJlbmRlcmVkIG91dHNpZGUgc2Nyb2xsIGFyZWEgZm9yIHJlZ3VsYXIgY2FsZW5kYXJcblx0XHRcdCAqL31cblx0XHRcdHtpc1JlZ3VsYXJDYWxlbmRhciAmJiBoZWFkZXJ9XG5cblx0XHRcdDxTY3JvbGxBcmVhXG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2gtZnVsbCcsIGlzUmVndWxhckNhbGVuZGFyICYmICdvdmVyZmxvdy1hdXRvJyl9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwiaG9yaXpvbnRhbC1ncmlkLXNjcm9sbFwiXG5cdFx0XHRcdHZpZXdQb3J0UHJvcHM9e3sgY2xhc3NOYW1lOiAnKjpmbGV4ISAqOmZsZXgtY29sISAqOm1pbi1oLWZ1bGwnIH19XG5cdFx0XHQ+XG5cdFx0XHRcdHsvKipcblx0XHRcdFx0ICogaGVhZGVyIHJvdyBmb3IgcmVzb3VyY2UgY2FsZW5kYXIgaW5zaWRlIHNjcm9sbCBhcmVhXG5cdFx0XHRcdCAqICovfVxuXHRcdFx0XHR7aXNSZXNvdXJjZUNhbGVuZGFyICYmIGhlYWRlcn1cblxuXHRcdFx0XHR7LyogQ2FsZW5kYXIgYXJlYSB3aXRoIHNjcm9sbCAqL31cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC0xIHctZml0JywgY2xhc3Nlcz8uYm9keSl9XG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtYm9keVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgZmxleCBmbGV4LWNvbCBmbGV4LTFcIlxuXHRcdFx0XHRcdFx0a2V5PXtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0nKX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7cm93cy5tYXAoKHJvdywgaW5kZXgpID0+IChcblx0XHRcdFx0XHRcdFx0PEhvcml6b250YWxHcmlkUm93XG5cdFx0XHRcdFx0XHRcdFx0YWxsRGF5PXtyb3cuYWxsRGF5ID8/IHRvcExldmVsQWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdGRheU51bWJlckhlaWdodD17ZGF5TnVtYmVySGVpZ2h0fVxuXHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3c9e2luZGV4ID09PSByb3dzLmxlbmd0aCAtIDF9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtyb3cuaWR9XG5cdFx0XHRcdFx0XHRcdFx0dmFyaWFudD17dmFyaWFudH1cblx0XHRcdFx0XHRcdFx0XHR7Li4ucm93fVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIC8+XG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIG9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiIC8+XG5cdFx0XHQ8L1Njcm9sbEFyZWE+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5pbnRlcmZhY2UgTW9udGhIZWFkZXJQcm9wcyB7XG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgTW9udGhIZWFkZXI6IFJlYWN0LkZDPE1vbnRoSGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcblx0Y29uc3QgeyBmaXJzdERheU9mV2Vlaywgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSwgY3VycmVudERhdGUgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdC8vIFJlb3JkZXIgd2VlayBkYXlzIGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG5cdGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggdy1mdWxsJyxcblx0XHRcdFx0c3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMjAnLFxuXHRcdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD1cIm1vbnRoLWhlYWRlclwiXG5cdFx0PlxuXHRcdFx0e3dlZWtEYXlzLm1hcCgod2Vla0RheSwgaW5kZXgpID0+IChcblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInB5LTIgdGV4dC1jZW50ZXIgZm9udC1tZWRpdW0gYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXgtMVwiXG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuaGVhZGVyLndlZWtkYXkoJ21vbnRoJywgd2Vla0RheS5mb3JtYXQoJ2RkZCcpKX1cblx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdGtleT17d2Vla0RheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e3dlZWtEYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc20gY2FwaXRhbGl6ZVwiPnt3ZWVrRGF5LmZvcm1hdCgnZGRkJyl9PC9zcGFuPlxuXHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdCkpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQWxsRGF5Um93IH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IEhvdXJMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3VyLWxhYmVsL2hvdXItbGFiZWwnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkJ1xuaW1wb3J0IHsgZ2V0Vmlld0hvdXJzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzLCBpc1RvZGF5IH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5jb25zdCBDRUxMX0NMQVNTID1cblx0J3ctW2NhbGMoKDEwMCUtNHJlbSkvdmFyKC0tdmlzaWJsZS1kYXlzKSldIG1pbi13LVtjYWxjKCgxMDAlLTRyZW0pL3ZhcigtLXZpc2libGUtZGF5cykpXSBmbGV4LTEnXG5jb25zdCBMRUZUX0NPTF9XSURUSCA9ICd3LTEwIHNtOnctMTYgbWluLXctMTAgc206bWluLXctMTYgbWF4LXctMTAgc206bWF4LXctMTYnXG5cbmV4cG9ydCBjb25zdCBXZWVrVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHR0LFxuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdHNlbGVjdERhdGUsXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGhpZGRlbkRheXMsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IHZpc2libGVEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0aGlkZGVuRGF5c1xuXHRcdFx0XHQ/IHdlZWtEYXlzLmZpbHRlcigoZGF5KSA9PiAhaGlkZGVuRGF5cy5oYXMoZGF5LmRheSgpKSlcblx0XHRcdFx0OiB3ZWVrRGF5cyxcblx0XHRbd2Vla0RheXMsIGhpZGRlbkRheXNdXG5cdClcblxuXHRjb25zdCBob3VycyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdGdldFZpZXdIb3Vycyh7XG5cdFx0XHRcdHJlZmVyZW5jZURhdGU6IGN1cnJlbnREYXRlLFxuXHRcdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0YWxsRGF0ZXM6IHdlZWtEYXlzLFxuXHRcdFx0fSksXG5cdFx0W2N1cnJlbnREYXRlLCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3Vycywgd2Vla0RheXNdXG5cdClcblxuXHRjb25zdCBmaXJzdENvbCA9IHtcblx0XHRpZDoga2V5cy5jb2wudGltZSxcblx0XHRkYXlzOiBob3Vycyxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRjbGFzc05hbWU6IGBzaHJpbmstMCAke0xFRlRfQ09MX1dJRFRIfSBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMGAsXG5cdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0XHRub0V2ZW50czogdHJ1ZSxcblx0XHRyZW5kZXJDZWxsOiAoZGF0ZTogRGF5anMpID0+IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHAtMiB0ZXh0LXJpZ2h0IHRleHQtWzEwcHhdIHNtOnRleHQteHMgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cblx0XHRcdFx0PEhvdXJMYWJlbCBkYXRlPXtkYXRlfSAvPlxuXHRcdFx0PC9kaXY+XG5cdFx0KSxcblx0fVxuXG5cdC8vIEdlbmVyYXRlIHdlZWsgZGF5cyDigJQgZWFjaCBjb2x1bW4gZ2V0cyBpdHMgb3duIGhvdXJzIG9uIHRoZSBjb3JyZWN0IGRhdGVcblx0Y29uc3QgY29sdW1ucyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdHJldHVybiB2aXNpYmxlRGF5cy5tYXAoKGRheSkgPT4gKHtcblx0XHRcdGlkOiBrZXlzLmNvbC5kYXkoZGF5KSxcblx0XHRcdGRheSxcblx0XHRcdGxhYmVsOiBkYXkuZm9ybWF0KCdEJyksXG5cdFx0XHRjbGFzc05hbWU6IENFTExfQ0xBU1MsXG5cdFx0XHRkYXlzOiBnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBkYXksXG5cdFx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRhbGxEYXRlczogd2Vla0RheXMsXG5cdFx0XHR9KSxcblx0XHRcdHZhbHVlOiBkYXksXG5cdFx0fSkpXG5cdH0sIFt3ZWVrRGF5cywgYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMsIHZpc2libGVEYXlzLm1hcF0pXG5cblx0Y29uc3QgY3NzVmFycyA9IHtcblx0XHQnLS12aXNpYmxlLWRheXMnOiB2aXNpYmxlRGF5cy5sZW5ndGgsXG5cdH0gYXMgUmVhY3QuQ1NTUHJvcGVydGllc1xuXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0YWxsRGF5Um93PXtcblx0XHRcdFx0PEFsbERheVJvd1xuXHRcdFx0XHRcdGNsYXNzZXM9e3sgY2VsbDogQ0VMTF9DTEFTUywgc3BhY2VyOiBMRUZUX0NPTF9XSURUSCB9fVxuXHRcdFx0XHRcdGRheXM9e3Zpc2libGVEYXlzfVxuXHRcdFx0XHQvPlxuXHRcdFx0fVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6ICd3LWZ1bGwgaC0xOCcsIGJvZHk6ICd3LWZ1bGwnIH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIC4uLmNvbHVtbnNdfVxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHRcdHN0eWxlPXtjc3NWYXJzfVxuXHRcdFx0dmFyaWFudD1cInJlZ3VsYXJcIlxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPXsnZmxleCBoLWZ1bGwgZmxleC0xJ30gZGF0YS10ZXN0aWQ9XCJ3ZWVrLXZpZXctaGVhZGVyXCI+XG5cdFx0XHRcdHsvKiBDb3JuZXIgY2VsbCB3aXRoIHdlZWsgbnVtYmVyICovfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctMTAgc206dy0xNiBoLWZ1bGwgc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1yIHAtMiBmbGV4XCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQteHNcIj57dCgnd2VlaycpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e2N1cnJlbnREYXRlLndlZWsoKX08L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBEYXkgaGVhZGVyIGNlbGxzICovfVxuXHRcdFx0XHR7dmlzaWJsZURheXMubWFwKChkYXksIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgdG9kYXkgPSBpc1RvZGF5KGRheSlcblx0XHRcdFx0XHRjb25zdCBrZXkgPSBrZXlzLmhlYWRlci53ZWVrLmRheShkYXkpXG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdCdob3ZlcjpiZy1hY2NlbnQgZmxleC0xIGZsZXggZmxleC1jb2wganVzdGlmeS1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgcC0xIHRleHQtY2VudGVyIHNtOnAtMiBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgdy0yMCBoLWZ1bGwnLFxuXHRcdFx0XHRcdFx0XHRcdHRvZGF5ICYmICdiZy1wcmltYXJ5LzEwIGZvbnQtYm9sZCdcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuaGVhZGVyLndlZWtkYXkoJ3dlZWsnLCBkYXkuZm9ybWF0KCdkZGRkJykpfVxuXHRcdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0XHRrZXk9e2tleX1cblx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHNlbGVjdERhdGUoZGF5KVxuXHRcdFx0XHRcdFx0XHRcdG9wZW5FdmVudEZvcm0oeyBzdGFydDogZGF5IH0pXG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2tleX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J214LWF1dG8gbXQtMSBmbGV4IGgtNSB3LTUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCB0ZXh0LXhzJyxcblx0XHRcdFx0XHRcdFx0XHRcdHRvZGF5ICYmICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnRCcpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXREYXlLZXksIGlzVG9kYXkgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmNvbnN0IERBWV9IRUFERVJfTkFNRVMgPSBbXG5cdHsgaWQ6ICdzdW4nLCBsYWJlbDogJ1MnIH0sXG5cdHsgaWQ6ICdtb24nLCBsYWJlbDogJ00nIH0sXG5cdHsgaWQ6ICd0dWUnLCBsYWJlbDogJ1QnIH0sXG5cdHsgaWQ6ICd3ZWQnLCBsYWJlbDogJ1cnIH0sXG5cdHsgaWQ6ICd0aHUnLCBsYWJlbDogJ1QnIH0sXG5cdHsgaWQ6ICdmcmknLCBsYWJlbDogJ0YnIH0sXG5cdHsgaWQ6ICdzYXQnLCBsYWJlbDogJ1MnIH0sXG5dXG5jb25zdCBFVkVOVF9ET1RfQ09MT1JTID0gWydiZy1wcmltYXJ5JywgJ2JnLWJsdWUtNTAwJywgJ2JnLWdyZWVuLTUwMCddXG5jb25zdCBEQVlTX0lOX01JTklfQ0FMRU5EQVIgPSA0MlxuXG5pbnRlcmZhY2UgTW9udGhEYXRhIHtcblx0ZGF0ZTogRGF5anNcblx0bmFtZTogc3RyaW5nXG5cdGV2ZW50Q291bnQ6IG51bWJlclxuXHRtb250aEtleTogc3RyaW5nXG59XG5cbmludGVyZmFjZSBEYXlEYXRhIHtcblx0ZGF0ZTogRGF5anNcblx0ZGF5S2V5OiBzdHJpbmdcblx0aXNJbkN1cnJlbnRNb250aDogYm9vbGVhblxuXHRpc1RvZGF5OiBib29sZWFuXG5cdGlzU2VsZWN0ZWQ6IGJvb2xlYW5cblx0ZXZlbnRDb3VudDogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBZZWFyVmlldyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgc2VsZWN0RGF0ZSwgZXZlbnRzLCBzZXRWaWV3LCBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIHQgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCBjdXJyZW50WWVhciA9IGN1cnJlbnREYXRlLnllYXIoKVxuXG5cdGNvbnN0IGdlbmVyYXRlTW9udGhzRGF0YSA9ICgpOiBNb250aERhdGFbXSA9PiB7XG5cdFx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDEyIH0sIChfLCBtb250aEluZGV4KSA9PiB7XG5cdFx0XHRjb25zdCBtb250aERhdGUgPSBkYXlqcygpXG5cdFx0XHRcdC55ZWFyKGN1cnJlbnRZZWFyKVxuXHRcdFx0XHQubW9udGgobW9udGhJbmRleClcblx0XHRcdFx0LnN0YXJ0T2YoJ21vbnRoJylcblx0XHRcdGNvbnN0IGV2ZW50c0luTW9udGggPSBldmVudHMuZmlsdGVyKFxuXHRcdFx0XHQoZXZlbnQpID0+XG5cdFx0XHRcdFx0ZXZlbnQuc3RhcnQueWVhcigpID09PSBjdXJyZW50WWVhciAmJlxuXHRcdFx0XHRcdGV2ZW50LnN0YXJ0Lm1vbnRoKCkgPT09IG1vbnRoSW5kZXhcblx0XHRcdClcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZGF0ZTogbW9udGhEYXRlLFxuXHRcdFx0XHRuYW1lOiBtb250aERhdGUuZm9ybWF0KCdNTU1NJyksXG5cdFx0XHRcdGV2ZW50Q291bnQ6IGV2ZW50c0luTW9udGgubGVuZ3RoLFxuXHRcdFx0XHRtb250aEtleTogbW9udGhEYXRlLmZvcm1hdCgnTU0nKSxcblx0XHRcdH1cblx0XHR9KVxuXHR9XG5cblx0Y29uc3QgZ2VuZXJhdGVEYXlzRm9yTW9udGggPSAobW9udGhEYXRlOiBEYXlqcyk6IERheURhdGFbXSA9PiB7XG5cdFx0Y29uc3QgZmlyc3REYXlPZkNhbGVuZGFyID0gbW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJykuc3RhcnRPZignd2VlaycpXG5cblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogREFZU19JTl9NSU5JX0NBTEVOREFSIH0sIChfLCBkYXlJbmRleCkgPT4ge1xuXHRcdFx0Y29uc3QgZGF5RGF0ZSA9IGZpcnN0RGF5T2ZDYWxlbmRhci5hZGQoZGF5SW5kZXgsICdkYXknKVxuXHRcdFx0Y29uc3QgZGF5U3RhcnQgPSBkYXlEYXRlLnN0YXJ0T2YoJ2RheScpXG5cdFx0XHRjb25zdCBkYXlFbmQgPSBkYXlEYXRlLmVuZE9mKCdkYXknKVxuXHRcdFx0Y29uc3QgZXZlbnRzT25EYXkgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoZGF5U3RhcnQsIGRheUVuZClcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZGF0ZTogZGF5RGF0ZSxcblx0XHRcdFx0ZGF5S2V5OiBnZXREYXlLZXkoZGF5RGF0ZSksXG5cdFx0XHRcdGlzSW5DdXJyZW50TW9udGg6IGRheURhdGUubW9udGgoKSA9PT0gbW9udGhEYXRlLm1vbnRoKCksXG5cdFx0XHRcdGlzVG9kYXk6IGlzVG9kYXkoZGF5RGF0ZSksXG5cdFx0XHRcdGlzU2VsZWN0ZWQ6IGRheURhdGUuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5JyksXG5cdFx0XHRcdGV2ZW50Q291bnQ6IGV2ZW50c09uRGF5Lmxlbmd0aCxcblx0XHRcdH1cblx0XHR9KVxuXHR9XG5cblx0Y29uc3QgbmF2aWdhdGVUb0RhdGUgPSAoXG5cdFx0ZGF0ZTogRGF5anMsXG5cdFx0dmlldzogJ21vbnRoJyB8ICdkYXknLFxuXHRcdGV2ZW50PzogUmVhY3QuTW91c2VFdmVudFxuXHQpID0+IHtcblx0XHRldmVudD8uc3RvcFByb3BhZ2F0aW9uKClcblx0XHRzZWxlY3REYXRlKGRhdGUpXG5cdFx0c2V0Vmlldyh2aWV3KVxuXHR9XG5cblx0Y29uc3QgZ2V0RXZlbnRDb3VudExhYmVsID0gKGNvdW50OiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuXHRcdGNvbnN0IGV2ZW50V29yZCA9IGNvdW50ID09PSAxID8gdCgnZXZlbnQnKSA6IHQoJ2V2ZW50cycpXG5cdFx0cmV0dXJuIGAke2NvdW50fSAke2V2ZW50V29yZH1gXG5cdH1cblxuXHRjb25zdCBnZXREYXlDbGFzc05hbWUgPSAoZGF5OiBEYXlEYXRhKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCBiYXNlQ2xhc3MgPVxuXHRcdFx0J3JlbGF0aXZlIGZsZXggYXNwZWN0LXNxdWFyZSB3LWZ1bGwgY3Vyc29yLXBvaW50ZXIgZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGhvdmVyOmJnLWFjY2VudCByb3VuZGVkLXNtIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTIwMCdcblx0XHRjb25zdCBvdXRzaWRlTW9udGhDbGFzcyA9IGRheS5pc0luQ3VycmVudE1vbnRoXG5cdFx0XHQ/ICcnXG5cdFx0XHQ6ICd0ZXh0LW11dGVkLWZvcmVncm91bmQgb3BhY2l0eS01MCdcblx0XHRjb25zdCB0b2RheUNsYXNzID0gZGF5LmlzVG9kYXlcblx0XHRcdD8gJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1mdWxsJ1xuXHRcdFx0OiAnJ1xuXHRcdGNvbnN0IHNlbGVjdGVkQ2xhc3MgPVxuXHRcdFx0ZGF5LmlzU2VsZWN0ZWQgJiYgIWRheS5pc1RvZGF5ID8gJ2JnLW11dGVkIHJvdW5kZWQtZnVsbCBmb250LWJvbGQnIDogJydcblx0XHRjb25zdCBoYXNFdmVudHNDbGFzcyA9XG5cdFx0XHRkYXkuZXZlbnRDb3VudCA+IDAgJiYgIWRheS5pc1RvZGF5ICYmICFkYXkuaXNTZWxlY3RlZCA/ICdmb250LW1lZGl1bScgOiAnJ1xuXG5cdFx0cmV0dXJuIGNuKFxuXHRcdFx0YmFzZUNsYXNzLFxuXHRcdFx0b3V0c2lkZU1vbnRoQ2xhc3MsXG5cdFx0XHR0b2RheUNsYXNzLFxuXHRcdFx0c2VsZWN0ZWRDbGFzcyxcblx0XHRcdGhhc0V2ZW50c0NsYXNzXG5cdFx0KVxuXHR9XG5cblx0Y29uc3QgZ2V0RXZlbnREb3RDbGFzc05hbWUgPSAoY29sb3I6IHN0cmluZywgaXNUb2RheTogYm9vbGVhbik6IHN0cmluZyA9PiB7XG5cdFx0Y29uc3QgZG90Q29sb3IgPSBpc1RvZGF5ID8gJ2JnLXByaW1hcnktZm9yZWdyb3VuZCcgOiBjb2xvclxuXHRcdHJldHVybiBjbignaC1bM3B4XSB3LVszcHhdIHJvdW5kZWQtZnVsbCcsIGRvdENvbG9yKVxuXHR9XG5cblx0Y29uc3QgbW9udGhzRGF0YSA9IGdlbmVyYXRlTW9udGhzRGF0YSgpXG5cblx0Y29uc3QgZ2V0RGF5VG9vbHRpcCA9IChldmVudENvdW50OiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuXHRcdGlmIChldmVudENvdW50ID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gJydcblx0XHR9XG5cdFx0cmV0dXJuIGdldEV2ZW50Q291bnRMYWJlbChldmVudENvdW50KVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8U2Nyb2xsQXJlYSBjbGFzc05hbWU9XCJoLWZ1bGxcIiBkYXRhLXRlc3RpZD1cInllYXItdmlld1wiPlxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9XCJncmlkIGF1dG8tcm93cy1mciBncmlkLWNvbHMtMSBnYXAtNCBwLTQgc206Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIlxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInllYXItZ3JpZFwiXG5cdFx0XHQ+XG5cdFx0XHRcdHttb250aHNEYXRhLm1hcCgobW9udGgsIG1vbnRoSW5kZXgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBkYXlzSW5Nb250aCA9IGdlbmVyYXRlRGF5c0Zvck1vbnRoKG1vbnRoLmRhdGUpXG5cdFx0XHRcdFx0Y29uc3QgYW5pbWF0aW9uRGVsYXkgPSBtb250aEluZGV4ICogMC4wNVxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaG92ZXI6Ym9yZGVyLXByaW1hcnkgZmxleCBmbGV4LWNvbCByb3VuZGVkLWxnIGJvcmRlciBwLTMgdGV4dC1sZWZ0IHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBob3ZlcjpzaGFkb3ctbWRcIlxuXHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5oZWFkZXIueWVhci5tb250aChtb250aC5tb250aEtleSl9XG5cdFx0XHRcdFx0XHRcdGtleT17bW9udGgubW9udGhLZXl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtYi0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiXG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2FuaW1hdGlvbkRlbGF5fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KCdtb250aCcsIG1vbnRoLm1vbnRoS2V5KX1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtrZXlzLmxpc3RLZXkoJ21vbnRoJywgbW9udGgubW9udGhLZXkpfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC1sZyBmb250LW1lZGl1bSBob3Zlcjp1bmRlcmxpbmUgY3Vyc29yLXBvaW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuaGVhZGVyLnllYXIubW9udGgobW9udGgubW9udGhLZXksICd0aXRsZScpfVxuXHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gbmF2aWdhdGVUb0RhdGUobW9udGguZGF0ZSwgJ21vbnRoJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHR7bW9udGgubmFtZX1cblx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cblxuXHRcdFx0XHRcdFx0XHRcdHttb250aC5ldmVudENvdW50ID4gMCAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtZnVsbCBweC0yIHB5LTEgdGV4dC14c1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmhlYWRlci55ZWFyLm1vbnRoKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1vbnRoLm1vbnRoS2V5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdjb3VudCdcblx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e2dldEV2ZW50Q291bnRMYWJlbChtb250aC5ldmVudENvdW50KX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblxuXHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtNyBnYXAtcHggdGV4dC1bMC42cmVtXVwiXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuaGVhZGVyLnllYXIubW9udGgobW9udGgubW9udGhLZXksICdtaW5pJyl9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7REFZX0hFQURFUl9OQU1FUy5tYXAoKGRheSkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgaC0zIHRleHQtY2VudGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoJ2hlYWRlcicsIG1vbnRoLm1vbnRoS2V5LCBkYXkuaWQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7ZGF5LmxhYmVsfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cblx0XHRcdFx0XHRcdFx0XHR7ZGF5c0luTW9udGgubWFwKChkYXkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGRheVRlc3RJZCA9IGtleXMuaGVhZGVyLnllYXIuZGF5KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtb250aC5kYXRlLmZvcm1hdCgnWVlZWS1NTScpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXkuZGF5S2V5XG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBoYXNFdmVudHMgPSBkYXkuZXZlbnRDb3VudCA+IDBcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHZpc2libGVEb3RDb3VudCA9IE1hdGgubWluKGRheS5ldmVudENvdW50LCAzKVxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgdmlzaWJsZURvdENvbG9ycyA9IEVWRU5UX0RPVF9DT0xPUlMuc2xpY2UoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGVEb3RDb3VudFxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXREYXlDbGFzc05hbWUoZGF5KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17ZGF5VGVzdElkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17ZGF5LmRheUtleX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoZSkgPT4gbmF2aWdhdGVUb0RhdGUoZGF5LmRhdGUsICdkYXknLCBlKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT17Z2V0RGF5VG9vbHRpcChkYXkuZXZlbnRDb3VudCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciBsZWFkaW5nLW5vbmVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtkYXkuZGF0ZS5kYXRlKCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e2hhc0V2ZW50cyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2Fic29sdXRlIGJvdHRvbS0wIGZsZXggdy1mdWxsIGp1c3RpZnktY2VudGVyIHNwYWNlLXgtcHgnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRheS5pc1RvZGF5ICYmICdib3R0b20tcHgnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt2aXNpYmxlRG90Q29sb3JzLm1hcCgoZG90Q29sb3IpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXRFdmVudERvdENsYXNzTmFtZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZG90Q29sb3IsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRheS5pc1RvZGF5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtkb3RDb2xvcn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdH0pfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIC8+XG5cdFx0PC9TY3JvbGxBcmVhPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEV2ZW50Rm9ybVByb3BzIH0gZnJvbSAnQC9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybSdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHtcblx0Q2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGUsXG5cdENlbGxDbGlja0luZm8sXG5cdERhdGVSYW5nZSxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyRW5naW5lIH0gZnJvbSAnQC9ob29rcy91c2UtY2FsZW5kYXItZW5naW5lJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgRVZFTlRfQkFSX0hFSUdIVCwgR0FQX0JFVFdFRU5fRUxFTUVOVFMgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucywgVHJhbnNsYXRvckZ1bmN0aW9uIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhclZpZXcsIFRpbWVGb3JtYXQgfSBmcm9tICdAL3R5cGVzJ1xuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0J1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyUHJvdmlkZXJQcm9wcyB7XG5cdGNoaWxkcmVuOiBSZWFjdE5vZGVcblx0ZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG5cdGZpcnN0RGF5T2ZXZWVrPzogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG5cdGluaXRpYWxWaWV3PzogQ2FsZW5kYXJWaWV3XG5cdGluaXRpYWxEYXRlPzogRGF5anNcblx0cmVuZGVyRXZlbnQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IFJlYWN0Tm9kZVxuXHRvbkV2ZW50Q2xpY2s/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DZWxsQ2xpY2s/OiAoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4gdm9pZFxuXHRvblZpZXdDaGFuZ2U/OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdG9uRXZlbnRBZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudFVwZGF0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50RGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRGF0ZUNoYW5nZT86IChkYXRlOiBEYXlqcywgcmFuZ2U6IERhdGVSYW5nZSkgPT4gdm9pZFxuXHRsb2NhbGU/OiBzdHJpbmdcblx0dGltZXpvbmU/OiBzdHJpbmdcblx0ZGlzYWJsZUNlbGxDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZUV2ZW50Q2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVEcmFnQW5kRHJvcD86IGJvb2xlYW5cblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0ZXZlbnRTcGFjaW5nPzogbnVtYmVyXG5cdGV2ZW50SGVpZ2h0PzogbnVtYmVyXG5cdHN0aWNreVZpZXdIZWFkZXI/OiBib29sZWFuXG5cdHZpZXdIZWFkZXJDbGFzc05hbWU/OiBzdHJpbmdcblx0aGVhZGVyQ29tcG9uZW50PzogUmVhY3ROb2RlIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY29tcG9uZW50XG5cdGhlYWRlckNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNsYXNzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHJlbmRlckV2ZW50Rm9ybT86IChwcm9wczogRXZlbnRGb3JtUHJvcHMpID0+IFJlYWN0Tm9kZVxuXHQvLyBUcmFuc2xhdGlvbiBvcHRpb25zIC0gcHJvdmlkZSBlaXRoZXIgdHJhbnNsYXRpb25zIG9iamVjdCBPUiB0cmFuc2xhdG9yIGZ1bmN0aW9uXG5cdHRyYW5zbGF0aW9ucz86IFRyYW5zbGF0aW9uc1xuXHR0cmFuc2xhdG9yPzogVHJhbnNsYXRvckZ1bmN0aW9uXG5cdHRpbWVGb3JtYXQ/OiBUaW1lRm9ybWF0XG5cdGNsYXNzZXNPdmVycmlkZT86IENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yPzogKFxuXHRcdHByb3BzOiBSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzXG5cdCkgPT4gUmVhY3ROb2RlXG5cdHJlbmRlckhvdXI/OiAoZGF0ZTogRGF5anMpID0+IFJlYWN0Tm9kZVxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycz86IGJvb2xlYW5cblx0aGlkZGVuRGF5cz86IFNldDxudW1iZXI+XG59XG5cbmV4cG9ydCBjb25zdCBDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxDYWxlbmRhclByb3ZpZGVyUHJvcHM+ID0gKHtcblx0Y2hpbGRyZW4sXG5cdGV2ZW50cyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9IDAsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdHJlbmRlckV2ZW50LFxuXHRvbkV2ZW50Q2xpY2ssXG5cdG9uQ2VsbENsaWNrLFxuXHRvblZpZXdDaGFuZ2UsXG5cdG9uRXZlbnRBZGQsXG5cdG9uRXZlbnRVcGRhdGUsXG5cdG9uRXZlbnREZWxldGUsXG5cdG9uRGF0ZUNoYW5nZSxcblx0bG9jYWxlLFxuXHR0aW1lem9uZSxcblx0ZGlzYWJsZUNlbGxDbGljayxcblx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0ZGF5TWF4RXZlbnRzLFxuXHRldmVudFNwYWNpbmcgPSBHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0ZXZlbnRIZWlnaHQgPSBFVkVOVF9CQVJfSEVJR0hULFxuXHRzdGlja3lWaWV3SGVhZGVyID0gdHJ1ZSxcblx0dmlld0hlYWRlckNsYXNzTmFtZSA9ICcnLFxuXHRoZWFkZXJDb21wb25lbnQsXG5cdGhlYWRlckNsYXNzTmFtZSxcblx0YnVzaW5lc3NIb3Vycyxcblx0cmVuZGVyRXZlbnRGb3JtLFxuXHR0cmFuc2xhdGlvbnMsXG5cdHRyYW5zbGF0b3IsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGNsYXNzZXNPdmVycmlkZSxcblx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdHJlbmRlckhvdXIsXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzID0gZmFsc2UsXG5cdGhpZGRlbkRheXMsXG59KSA9PiB7XG5cdC8vIFVzZSB0aGUgY2FsZW5kYXIgZW5naW5lXG5cdGNvbnN0IGNhbGVuZGFyRW5naW5lID0gdXNlQ2FsZW5kYXJFbmdpbmUoe1xuXHRcdGV2ZW50cyxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRpbml0aWFsVmlldyxcblx0XHRpbml0aWFsRGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdG9uRXZlbnRBZGQsXG5cdFx0b25FdmVudFVwZGF0ZSxcblx0XHRvbkV2ZW50RGVsZXRlLFxuXHRcdG9uRGF0ZUNoYW5nZSxcblx0XHRvblZpZXdDaGFuZ2UsXG5cdFx0bG9jYWxlLFxuXHRcdHRpbWV6b25lLFxuXHRcdHRyYW5zbGF0aW9ucyxcblx0XHR0cmFuc2xhdG9yLFxuXHR9KVxuXG5cdGNvbnN0IGVkaXRFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0U2VsZWN0ZWRFdmVudChldmVudClcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Ly8gQ3VzdG9tIGhhbmRsZXJzIHRoYXQgY2FsbCBleHRlcm5hbCBjYWxsYmFja3Ncblx0Y29uc3QgaGFuZGxlRXZlbnRDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0aWYgKGRpc2FibGVFdmVudENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdFx0aWYgKG9uRXZlbnRDbGljaykge1xuXHRcdFx0XHRvbkV2ZW50Q2xpY2soZXZlbnQpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlZGl0RXZlbnQoZXZlbnQpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbZGlzYWJsZUV2ZW50Q2xpY2ssIG9uRXZlbnRDbGljaywgZWRpdEV2ZW50XVxuXHQpXG5cblx0Y29uc3QgaGFuZGxlRGF0ZUNsaWNrID0gdXNlQ2FsbGJhY2soXG5cdFx0KGluZm86IENlbGxDbGlja0luZm8pID0+IHtcblx0XHRcdGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAob25DZWxsQ2xpY2spIHtcblx0XHRcdFx0b25DZWxsQ2xpY2soaW5mbylcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNhbGVuZGFyRW5naW5lLm9wZW5FdmVudEZvcm0oaW5mbylcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtvbkNlbGxDbGljaywgZGlzYWJsZUNlbGxDbGljaywgY2FsZW5kYXJFbmdpbmVdXG5cdClcblxuXHQvLyBDcmVhdGUgdGhlIGNvbnRleHQgdmFsdWVcblx0Y29uc3QgY29udGV4dFZhbHVlID0gdXNlTWVtbyhcblx0XHQoKSA9PiAoe1xuXHRcdFx0Li4uY2FsZW5kYXJFbmdpbmUsXG5cdFx0XHRyZW5kZXJFdmVudCxcblx0XHRcdG9uRXZlbnRDbGljazogaGFuZGxlRXZlbnRDbGljayxcblx0XHRcdG9uQ2VsbENsaWNrOiBoYW5kbGVEYXRlQ2xpY2ssXG5cdFx0XHRsb2NhbGUsXG5cdFx0XHR0aW1lem9uZSxcblx0XHRcdGRpc2FibGVDZWxsQ2xpY2ssXG5cdFx0XHRkaXNhYmxlRXZlbnRDbGljayxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdGV2ZW50SGVpZ2h0LFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRcdFx0cmVuZGVySG91cixcblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0aGlkZGVuRGF5cyxcblx0XHR9KSxcblx0XHRbXG5cdFx0XHRjYWxlbmRhckVuZ2luZSxcblx0XHRcdHJlbmRlckV2ZW50LFxuXHRcdFx0aGFuZGxlRXZlbnRDbGljayxcblx0XHRcdGhhbmRsZURhdGVDbGljayxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0ZXZlbnRIZWlnaHQsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRyZW5kZXJIb3VyLFxuXHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRoaWRkZW5EYXlzLFxuXHRcdF1cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PENhbGVuZGFyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L0NhbGVuZGFyQ29udGV4dC5Qcm92aWRlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBDYWxlbmRhckRuZENvbnRleHQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9jYWxlbmRhci1kbmQtY29udGV4dCdcbmltcG9ydCB7IEV2ZW50Rm9ybURpYWxvZyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nJ1xuaW1wb3J0IHsgSGVhZGVyIH0gZnJvbSAnQC9jb21wb25lbnRzL2hlYWRlcidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IERheVZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvZGF5LXZpZXcnXG5pbXBvcnQgeyBNb250aFZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9tb250aC12aWV3J1xuaW1wb3J0IHsgV2Vla1ZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstdmlldydcbmltcG9ydCB7IFllYXJWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3llYXItdmlldy95ZWFyLXZpZXcnXG5pbXBvcnQgeyBDYWxlbmRhclByb3ZpZGVyIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWR1cGxpY2F0ZXNcbmltcG9ydCAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuXHRJbGFteUNhbGVuZGFyUHJvcEV2ZW50LFxuXHRJbGFteUNhbGVuZGFyUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQge1xuXHREQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRFVkVOVF9CQVJfSEVJR0hULFxuXHRHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0V0VFS19EQVlTX05VTUJFUl9NQVAsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IG5vcm1hbGl6ZUV2ZW50cywgc2FmZURhdGUsIHRvSGlkZGVuRGF5c1NldCB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBDYWxlbmRhckNvbnRlbnQ6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IHZpZXcsIGRheU1heEV2ZW50cyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHZpZXdNYXAgPSB7XG5cdFx0bW9udGg6IDxNb250aFZpZXcgZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9IGtleT1cIm1vbnRoXCIgLz4sXG5cdFx0d2VlazogPFdlZWtWaWV3IGtleT1cIndlZWtcIiAvPixcblx0XHRkYXk6IDxEYXlWaWV3IGtleT1cImRheVwiIC8+LFxuXHRcdHllYXI6IDxZZWFyVmlldyBrZXk9XCJ5ZWFyXCIgLz4sXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJpbGFteS1jYWxlbmRhclwiPlxuXHRcdFx0PEhlYWRlciBjbGFzc05hbWU9XCJwLTFcIiAvPlxuXHRcdFx0ey8qIENhbGVuZGFyIEJvZHkgd2l0aCBBbmltYXRlUHJlc2VuY2UgZm9yIHZpZXcgdHJhbnNpdGlvbnMgKi99XG5cdFx0XHQ8Q2FsZW5kYXJEbmRDb250ZXh0PlxuXHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIGgtW2NhbGMoMTAwJS0zLjVyZW0pXVwiXG5cdFx0XHRcdFx0ZGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiXG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17dmlld31cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYm9yZGVyIGgtZnVsbCB3LWZ1bGxcIiBkYXRhLXRlc3RpZD1cImNhbGVuZGFyLWJvZHlcIj5cblx0XHRcdFx0XHRcdHt2aWV3TWFwW3ZpZXddfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdDwvQ2FsZW5kYXJEbmRDb250ZXh0PlxuXHRcdFx0PEV2ZW50Rm9ybURpYWxvZyAvPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBJbGFteUNhbGVuZGFyOiBSZWFjdC5GQzxJbGFteUNhbGVuZGFyUHJvcHM+ID0gKHtcblx0ZXZlbnRzLFxuXHRmaXJzdERheU9mV2VlayA9ICdzdW5kYXknLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRkYXlNYXhFdmVudHMgPSBEQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRldmVudFNwYWNpbmcgPSBHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0ZXZlbnRIZWlnaHQgPSBFVkVOVF9CQVJfSEVJR0hULFxuXHRzdGlja3lWaWV3SGVhZGVyID0gdHJ1ZSxcblx0dmlld0hlYWRlckNsYXNzTmFtZSA9ICcnLFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3VycyA9IGZhbHNlLFxuXHRoaWRkZW5EYXlzLFxuXHQuLi5wcm9wc1xufSkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxDYWxlbmRhclByb3ZpZGVyXG5cdFx0XHRkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c31cblx0XHRcdGV2ZW50SGVpZ2h0PXtldmVudEhlaWdodH1cblx0XHRcdGV2ZW50U3BhY2luZz17ZXZlbnRTcGFjaW5nfVxuXHRcdFx0ZXZlbnRzPXtub3JtYWxpemVFdmVudHM8SWxhbXlDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4oZXZlbnRzKX1cblx0XHRcdGZpcnN0RGF5T2ZXZWVrPXtXRUVLX0RBWVNfTlVNQkVSX01BUFtmaXJzdERheU9mV2Vla119XG5cdFx0XHRoaWRkZW5EYXlzPXt0b0hpZGRlbkRheXNTZXQoaGlkZGVuRGF5cyl9XG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycz17aGlkZU5vbkJ1c2luZXNzSG91cnN9XG5cdFx0XHRpbml0aWFsRGF0ZT17c2FmZURhdGUoaW5pdGlhbERhdGUpfVxuXHRcdFx0aW5pdGlhbFZpZXc9e2luaXRpYWxWaWV3fVxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcj17c3RpY2t5Vmlld0hlYWRlcn1cblx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lPXt2aWV3SGVhZGVyQ2xhc3NOYW1lfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxDYWxlbmRhckNvbnRlbnQgLz5cblx0XHQ8L0NhbGVuZGFyUHJvdmlkZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmludGVyZmFjZSBSZXNvdXJjZUV2ZW50R3JpZFByb3BzIHtcblx0LyoqXG5cdCAqIEFycmF5IG9mIGRheXMgdG8gZGlzcGxheSBpbiB0aGUgZ3JpZFxuXHQgKi9cblx0ZGF5czogRGF5anNbXSB8IERheWpzW11bXVxuXHQvKiogVGhlIHR5cGUgb2YgZ3JpZCB0byBkaXNwbGF5IC0gJ2RheScgZm9yIGRheSB2aWV3LCAnaG91cicgZm9yIHdlZWsgdmlld1xuXHQgKiAoYWZmZWN0cyBldmVudCBwb3NpdGlvbmluZyBsb2dpYylcblx0ICovXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0LyoqXG5cdCAqIENoaWxkcmVuIHdpbGwgYmUgcmVuZGVyZWQgYXMgaGVhZGVycyBhYm92ZSB0aGUgZ3JpZFxuXHQgKiAoZS5nLiwgZm9yIGRheSBuYW1lcyBpbiBtb250aCB2aWV3KVxuXHQgKi9cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBib2R5Pzogc3RyaW5nOyBzY3JvbGw/OiBzdHJpbmc7IGNlbGw/OiBzdHJpbmcgfVxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VFdmVudEdyaWQ6IFJlYWN0LkZDPFJlc291cmNlRXZlbnRHcmlkUHJvcHM+ID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0Y2hpbGRyZW4sXG5cdGNsYXNzZXMsXG59KSA9PiB7XG5cdGNvbnN0IHsgZ2V0VmlzaWJsZVJlc291cmNlcyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHZpc2libGVSZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblxuXHRjb25zdCBjb2x1bW5zID0gZGF5cy5tYXAoKGRheSkgPT4ge1xuXHRcdGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGRheSlcblx0XHRjb25zdCByZWZEYXkgPSBpc0FycmF5ID8gZGF5WzBdIDogZGF5XG5cdFx0cmV0dXJuIHtcblx0XHRcdGlkOiByZWZEYXkgPyBrZXlzLmNvbC5kYXkocmVmRGF5KSA6ICdkYXktY29sLXVua25vd24nLFxuXHRcdFx0ZGF5OiBpc0FycmF5ID8gdW5kZWZpbmVkIDogZGF5LFxuXHRcdFx0ZGF5czogaXNBcnJheSA/IGRheSA6IHVuZGVmaW5lZCxcblx0XHRcdGNsYXNzTmFtZTogY2xhc3Nlcz8uY2VsbCxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdH1cblx0fSlcblxuXHRjb25zdCByb3dzID0gdmlzaWJsZVJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdGlkOiByZXNvdXJjZS5pZCxcblx0XHR0aXRsZTogcmVzb3VyY2UudGl0bGUsXG5cdFx0cmVzb3VyY2U6IHJlc291cmNlLFxuXHRcdGNvbHVtbnMsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PEhvcml6b250YWxHcmlkXG5cdFx0XHRjbGFzc2VzPXtjbGFzc2VzfVxuXHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXswfVxuXHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0cm93cz17cm93c31cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9Ib3Jpem9udGFsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBIb3VyTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvaG91ci1sYWJlbC9ob3VyLWxhYmVsJ1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuaW50ZXJmYWNlIFRpbWVIZWFkZXJSb3dQcm9wcyB7XG5cdGhvdXJzOiBEYXlqc1tdXG5cdHZpZXc6ICd3ZWVrJyB8ICdkYXknXG5cdC8vIFBlci1pdGVtIGFuaW1hdGlvbiBkZWxheS4gQ2FsbGVycyBwYXNzIGRpZmZlcmVudCBzdGVwIHZhbHVlcyBkZXBlbmRpbmcgb25cblx0Ly8gdGhlIGxpc3QgbGVuZ3RoIChlLmcuIDAuMDA1IGZvciBhIHdlZWsgb2YgaG91cnMsIDAuMDUgZm9yIGEgc2luZ2xlIGRheSkuXG5cdGRlbGF5U3RlcDogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBUaW1lSGVhZGVyUm93OiBSZWFjdC5GQzxUaW1lSGVhZGVyUm93UHJvcHM+ID0gKHtcblx0aG91cnMsXG5cdHZpZXcsXG5cdGRlbGF5U3RlcCxcbn0pID0+IChcblx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTIgYm9yZGVyLWJcIj5cblx0XHR7aG91cnMubWFwKChjb2wsIGluZGV4KSA9PiB7XG5cdFx0XHRjb25zdCBpc05vd0hvdXIgPSBjb2wuaXNTYW1lKGRheWpzKCksICdob3VyJylcblx0XHRcdGNvbnN0IGtleSA9IGtleXMuaGVhZGVyLndlZWsuaG91cihjb2wsIGluZGV4KVxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnbWluLXctMjAgZmxleC0xIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXhzIHNocmluay0wJyxcblx0XHRcdFx0XHRcdGlzTm93SG91ciAmJiAnYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwIGZvbnQtbWVkaXVtJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuaGVhZGVyLnJlc291cmNlLnRpbWVMYWJlbCh2aWV3LCBjb2wuZm9ybWF0KCdISCcpKX1cblx0XHRcdFx0XHRkZWxheT17aW5kZXggKiBkZWxheVN0ZXB9XG5cdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoa2V5LCAnYW5pbWF0ZWQnKX1cblx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtrZXlzLmxpc3RLZXkoa2V5LCAnbW90aW9uJyl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8SG91ckxhYmVsIGRhdGU9e2NvbH0gLz5cblx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHQpXG5cdFx0fSl9XG5cdDwvZGl2PlxuKVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IFJlc291cmNlRXZlbnRHcmlkIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQnXG5pbXBvcnQgeyBUaW1lSGVhZGVyUm93IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3RpbWUtaGVhZGVyLXJvdydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlRGF5SG9yaXpvbnRhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHR0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgcmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cdGNvbnN0IGRheUhvdXJzID0gZ2V0Vmlld0hvdXJzKHtcblx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGFsbERhdGVzOiBbY3VycmVudERhdGVdLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3VyczogcmVzb3VyY2VzXG5cdFx0XHQubWFwKChyKSA9PiByLmJ1c2luZXNzSG91cnMpXG5cdFx0XHQuZmlsdGVyKEJvb2xlYW4pIGFzIChCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdKVtdLFxuXHR9KVxuXG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlRXZlbnRHcmlkXG5cdFx0XHRjbGFzc2VzPXt7XG5cdFx0XHRcdGhlYWRlcjogJ21pbi13LWZ1bGwnLFxuXHRcdFx0XHRib2R5OiAnbWluLXctZnVsbCcsXG5cdFx0XHRcdGNlbGw6ICdtaW4tdy0yMCBmbGV4LTEnLFxuXHRcdFx0fX1cblx0XHRcdGRheXM9e2RheUhvdXJzfVxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctMjAgc206dy00MCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVzb3VyY2VzJyl9PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgZmxleCBmbGV4LWNvbFwiPlxuXHRcdFx0XHQ8VGltZUhlYWRlclJvdyBkZWxheVN0ZXA9ezAuMDV9IGhvdXJzPXtkYXlIb3Vyc30gdmlldz1cImRheVwiIC8+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1Jlc291cmNlRXZlbnRHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IEFsbERheUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1jZWxsJ1xuaW1wb3J0IHsgQWxsRGF5Um93IH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93J1xuaW1wb3J0IHsgSG91ckxhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvdXItbGFiZWwvaG91ci1sYWJlbCdcbmltcG9ydCB7IFJlc291cmNlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsJ1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlWZXJ0aWNhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRnZXRWaXNpYmxlUmVzb3VyY2VzLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgcmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cdGNvbnN0IGhvdXJzID0gZ2V0Vmlld0hvdXJzKHtcblx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGFsbERhdGVzOiBbY3VycmVudERhdGVdLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3VyczogcmVzb3VyY2VzXG5cdFx0XHQubWFwKChyKSA9PiByLmJ1c2luZXNzSG91cnMpXG5cdFx0XHQuZmlsdGVyKEJvb2xlYW4pIGFzIChCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdKVtdLFxuXHR9KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiBrZXlzLmNvbC50aW1lLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBEYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHQ8SG91ckxhYmVsIGRhdGU9e2RhdGV9IC8+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdGlkOiBrZXlzLmNvbC5kYXkoY3VycmVudERhdGUsIHJlc291cmNlLmlkKSxcblx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRyZXNvdXJjZSxcblx0XHRkYXlzOiBob3Vycyxcblx0XHRkYXk6IGN1cnJlbnREYXRlLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0YWxsRGF5Um93PXtcblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbFwiPlxuXHRcdFx0XHRcdDxBbGxEYXlDZWxsIC8+XG5cdFx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0XHQ8QWxsRGF5Um93XG5cdFx0XHRcdFx0XHRcdGNsYXNzZXM9e3sgY2VsbDogJ21pbi13LTIwJyB9fVxuXHRcdFx0XHRcdFx0XHRkYXlzPXtbY3VycmVudERhdGVdfVxuXHRcdFx0XHRcdFx0XHRrZXk9e2tleXMuYWxsRGF5Um93KHJlc291cmNlLmlkKX1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRzaG93U3BhY2VyPXtmYWxzZX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0fVxuXHRcdFx0Y2VsbFNsb3RzPXtbMCwgMTUsIDMwLCA0NV19XG5cdFx0XHRjbGFzc2VzPXt7IGJvZHk6ICd3LWZ1bGwnLCBoZWFkZXI6ICd3LWZ1bGwnIH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIC4uLmNvbHVtbnNdfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS1kYXlcIlxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHQ+XG5cdFx0XHR7LyogSGVhZGVyICovfVxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9eydmbGV4IGJvcmRlci1iIGgtMTIgZmxleC0xJ31cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS1tb250aC1oZWFkZXJcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNocmluay0wIGJvcmRlci1yIHctMTYgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIiAvPlxuXHRcdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+IChcblx0XHRcdFx0XHQ8UmVzb3VyY2VDZWxsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtaW4tdy0yMCBmbGV4LTFcIlxuXHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoJ3Jlc291cmNlLWNlbGwnLCByZXNvdXJjZS5pZCl9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlRGF5SG9yaXpvbnRhbCB9IGZyb20gJy4vcmVzb3VyY2UtZGF5LWhvcml6b250YWwnXG5pbXBvcnQgeyBSZXNvdXJjZURheVZlcnRpY2FsIH0gZnJvbSAnLi9yZXNvdXJjZS1kYXktdmVydGljYWwnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZURheVZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IG9yaWVudGF0aW9uIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKG9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XG5cdFx0cmV0dXJuIDxSZXNvdXJjZURheVZlcnRpY2FsIC8+XG5cdH1cblxuXHRyZXR1cm4gPFJlc291cmNlRGF5SG9yaXpvbnRhbCAvPlxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZ2V0TW9udGhEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VNb250aEhvcml6b250YWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Ly8gR2VuZXJhdGUgY2FsZW5kYXIgZ3JpZCAtIGRheXMgb2YgdGhlIG1vbnRoXG5cdGNvbnN0IG1vbnRoRGF5cyA9IHVzZU1lbW88RGF5anNbXT4oKCkgPT4ge1xuXHRcdHJldHVybiBnZXRNb250aERheXMoY3VycmVudERhdGUpXG5cdH0sIFtjdXJyZW50RGF0ZV0pXG5cblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VFdmVudEdyaWQgZGF5cz17bW9udGhEYXlzfT5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidy0yMCBzbTp3LTQwIGJvcmRlci1iIGJvcmRlci1yIHNocmluay0wIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXNvdXJjZXMnKX08L2Rpdj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHR7bW9udGhEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBrZXkgPSBgcmVzb3VyY2UtbW9udGgtaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9YFxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy0yMCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBmbGV4LWNvbFwiXG5cdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoa2V5LCAnYW5pbWF0ZWQnKX1cblx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2tleXMubGlzdEtleShrZXksICdtb3Rpb24nKX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1tZWRpdW1cIj57ZGF5LmZvcm1hdCgnRCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnZGRkJyl9XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJlc291cmNlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VNb250aFZlcnRpY2FsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgZ2V0VmlzaWJsZVJlc291cmNlcyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHJlc291cmNlcyA9IGdldFZpc2libGVSZXNvdXJjZXMoKVxuXHRjb25zdCBzdGFydE9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cdGNvbnN0IGRheXNJbk1vbnRoID0gQXJyYXkuZnJvbShcblx0XHR7IGxlbmd0aDogY3VycmVudERhdGUuZGF5c0luTW9udGgoKSB9LFxuXHRcdChfLCBpKSA9PiBzdGFydE9mTW9udGguYWRkKGksICdkYXknKVxuXHQpXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB7XG5cdFx0aWQ6IGtleXMuY29sLmRhdGUsXG5cdFx0ZGF5czogZGF5c0luTW9udGgsXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0Y2xhc3NOYW1lOlxuXHRcdFx0J3Nocmluay0wIHctMTYgbWluLXctMTYgbWF4LXctMTYgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAnLFxuXHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0XHRub0V2ZW50czogdHJ1ZSxcblx0XHRyZW5kZXJDZWxsOiAoZGF0ZTogRGF5anMpID0+IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHAtMiB0ZXh0LXJpZ2h0IHRleHQtWzEwcHhdIHNtOnRleHQteHMgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cblx0XHRcdFx0PHNwYW4+e2RhdGUuZm9ybWF0KCdEJyl9PC9zcGFuPlxuXHRcdFx0XHQ8c3Bhbj57ZGF0ZS5mb3JtYXQoJ2RkZCcpfTwvc3Bhbj5cblx0XHRcdDwvZGl2PlxuXHRcdCksXG5cdH1cblxuXHRjb25zdCBjb2x1bW5zID0gcmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+ICh7XG5cdFx0aWQ6IGtleXMuY29sLnJlc291cmNlKCdtb250aCcsIHJlc291cmNlLmlkKSxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRkYXlzOiBkYXlzSW5Nb250aCxcblx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6ICd3LWZ1bGwnLCBib2R5OiAndy1mdWxsJyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtbW9udGgtdmVydGljYWwtZ3JpZFwiXG5cdFx0PlxuXHRcdFx0ey8qIEhlYWRlciAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXsnZmxleCBib3JkZXItYiBoLTEyIGZsZXgtMSd9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtbW9udGgtaGVhZGVyXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCBib3JkZXItciB3LTE2IHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCIgLz5cblx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0PFJlc291cmNlQ2VsbFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWluLXctMjAgZmxleC0xXCJcblx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KCdyZXNvdXJjZS1jZWxsJywgcmVzb3VyY2UuaWQpfVxuXHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCkpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbCB9IGZyb20gJy4vcmVzb3VyY2UtbW9udGgtaG9yaXpvbnRhbCdcbmltcG9ydCB7IFJlc291cmNlTW9udGhWZXJ0aWNhbCB9IGZyb20gJy4vcmVzb3VyY2UtbW9udGgtdmVydGljYWwnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZU1vbnRoVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgb3JpZW50YXRpb24gfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRpZiAob3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcpIHtcblx0XHRyZXR1cm4gPFJlc291cmNlTW9udGhWZXJ0aWNhbCAvPlxuXHR9XG5cblx0cmV0dXJuIDxSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbCAvPlxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSgpIHtcblx0Y29uc3Qge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdFx0d2Vla1ZpZXdHcmFudWxhcml0eSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGhpZGRlbkRheXMsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgaXNIb3VybHkgPSB3ZWVrVmlld0dyYW51bGFyaXR5ID09PSAnaG91cmx5J1xuXHRjb25zdCByZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblxuXHRjb25zdCB3ZWVrRGF5cyA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKSxcblx0XHRbY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrXVxuXHQpXG5cblx0Y29uc3QgdmlzaWJsZURheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+XG5cdFx0XHRoaWRkZW5EYXlzXG5cdFx0XHRcdD8gd2Vla0RheXMuZmlsdGVyKChkYXkpID0+ICFoaWRkZW5EYXlzLmhhcyhkYXkuZGF5KCkpKVxuXHRcdFx0XHQ6IHdlZWtEYXlzLFxuXHRcdFt3ZWVrRGF5cywgaGlkZGVuRGF5c11cblx0KVxuXG5cdGNvbnN0IHJlc291cmNlQnVzaW5lc3NIb3VycyA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gcmVzb3VyY2VzLmZsYXRNYXAoKHIpID0+IChyLmJ1c2luZXNzSG91cnMgPyBbci5idXNpbmVzc0hvdXJzXSA6IFtdKSksXG5cdFx0W3Jlc291cmNlc11cblx0KVxuXG5cdHJldHVybiB7XG5cdFx0aXNIb3VybHksXG5cdFx0cmVzb3VyY2VzLFxuXHRcdHdlZWtEYXlzLFxuXHRcdHZpc2libGVEYXlzLFxuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBpc1RvZGF5IH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5pbnRlcmZhY2UgUmVzb3VyY2VXZWVrSG9yaXpvbnRhbERheUhlYWRlclByb3BzIHtcblx0ZGF5czogRGF5anNbXVxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrSG9yaXpvbnRhbERheUhlYWRlcjogUmVhY3QuRkM8XG5cdFJlc291cmNlV2Vla0hvcml6b250YWxEYXlIZWFkZXJQcm9wc1xuPiA9ICh7IGRheXMgfSkgPT4ge1xuXHRjb25zdCB7IHdlZWtWaWV3R3JhbnVsYXJpdHkgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgaXNIb3VybHkgPSB3ZWVrVmlld0dyYW51bGFyaXR5ID09PSAnaG91cmx5J1xuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTJcIj5cblx0XHRcdHtkYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCB0b2RheSA9IGlzVG9kYXkoZGF5KVxuXHRcdFx0XHRjb25zdCBrZXkgPSBrZXlzLmhlYWRlci53ZWVrLmRheShkYXkpXG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHQnc2hyaW5rLTAgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciBmb250LW1lZGl1bSBtaW4tdy0yMCcsXG5cdFx0XHRcdFx0XHRcdHRvZGF5ICYmICdiZy1ibHVlLTUwIHRleHQtYmx1ZS02MDAnXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuaGVhZGVyLnJlc291cmNlLndlZWtEYXl9XG5cdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoa2V5LCAnYW5pbWF0ZWQnKX1cblx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2tleXMubGlzdEtleShrZXksICdtb3Rpb24nKX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0aXNIb3VybHkgPyAnc3RpY2t5IGxlZnQtMS8yJyA6ICd3LWZ1bGwgdGV4dC1jZW50ZXInXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbVwiPntkYXkuZm9ybWF0KCdkZGQnKX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdNL0QnKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ2V0Vmlld0hvdXJzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VXZWVrVmlld0RhdGEgfSBmcm9tICcuLi91c2UtcmVzb3VyY2Utd2Vlay12aWV3LWRhdGEnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXNvdXJjZVdlZWtIb3Jpem9udGFsRGF0YSgpIHtcblx0Y29uc3Qge1xuXHRcdGlzSG91cmx5LFxuXHRcdHdlZWtEYXlzLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHR9ID0gdXNlUmVzb3VyY2VXZWVrVmlld0RhdGEoKVxuXG5cdGNvbnN0IHdlZWtIb3VycyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmICghaXNIb3VybHkpIHJldHVybiBbXVxuXHRcdHJldHVybiB3ZWVrRGF5cy5tYXAoKGRheSkgPT5cblx0XHRcdGdldFZpZXdIb3Vycyh7XG5cdFx0XHRcdHJlZmVyZW5jZURhdGU6IGRheSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdHJlc291cmNlQnVzaW5lc3NIb3Vycyxcblx0XHRcdH0pXG5cdFx0KVxuXHR9LCBbXG5cdFx0aXNIb3VybHksXG5cdFx0d2Vla0RheXMsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnMsXG5cdF0pXG5cblx0cmV0dXJuIHsgd2Vla0hvdXJzIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgVGltZUhlYWRlclJvdyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy90aW1lLWhlYWRlci1yb3cnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VXZWVrVmlld0RhdGEgfSBmcm9tICcuLi91c2UtcmVzb3VyY2Utd2Vlay12aWV3LWRhdGEnXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtIb3Jpem9udGFsRGF5SGVhZGVyIH0gZnJvbSAnLi9yZXNvdXJjZS13ZWVrLWhvcml6b250YWwtZGF5LWhlYWRlcidcbmltcG9ydCB7IHVzZVJlc291cmNlV2Vla0hvcml6b250YWxEYXRhIH0gZnJvbSAnLi91c2UtcmVzb3VyY2Utd2Vlay1ob3Jpem9udGFsLWRhdGEnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVdlZWtIb3Jpem9udGFsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IHsgaXNIb3VybHksIHdlZWtEYXlzIH0gPSB1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSgpXG5cdGNvbnN0IHsgd2Vla0hvdXJzIH0gPSB1c2VSZXNvdXJjZVdlZWtIb3Jpem9udGFsRGF0YSgpXG5cblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VFdmVudEdyaWRcblx0XHRcdGNsYXNzZXM9e3tcblx0XHRcdFx0aGVhZGVyOiBjbihpc0hvdXJseSA/ICdoLTI0JyA6ICdoLTEyJywgJ21pbi13LWZ1bGwnKSxcblx0XHRcdFx0Ym9keTogJ21pbi13LWZ1bGwnLFxuXHRcdFx0XHRjZWxsOiAnbWluLXctMjAgZmxleC0xJyxcblx0XHRcdH19XG5cdFx0XHRkYXlzPXtpc0hvdXJseSA/IHdlZWtIb3VycyA6IHdlZWtEYXlzfVxuXHRcdFx0Z3JpZFR5cGU9e2lzSG91cmx5ID8gJ2hvdXInIDogJ2RheSd9XG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0PFJlc291cmNlV2Vla0hvcml6b250YWxEYXlIZWFkZXIgZGF5cz17d2Vla0RheXN9IC8+XG5cdFx0XHRcdHtpc0hvdXJseSAmJiAoXG5cdFx0XHRcdFx0PFRpbWVIZWFkZXJSb3dcblx0XHRcdFx0XHRcdGRlbGF5U3RlcD17MC4wMDV9XG5cdFx0XHRcdFx0XHRob3Vycz17d2Vla0hvdXJzLmZsYXQoKX1cblx0XHRcdFx0XHRcdHZpZXc9XCJ3ZWVrXCJcblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFsbERheUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1jZWxsJ1xuaW1wb3J0IHsgQWxsRGF5Um93IH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93J1xuaW1wb3J0IHsgSG91ckxhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvdXItbGFiZWwvaG91ci1sYWJlbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB7IHVzZVJlc291cmNlV2Vla1ZpZXdEYXRhIH0gZnJvbSAnLi4vdXNlLXJlc291cmNlLXdlZWstdmlldy1kYXRhJ1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrVmVydGljYWxEYXlIZWFkZXIgfSBmcm9tICcuL3Jlc291cmNlLXdlZWstdmVydGljYWwtZGF5LWhlYWRlcidcbmltcG9ydCB7IFJlc291cmNlV2Vla1ZlcnRpY2FsUmVzb3VyY2VIZWFkZXIgfSBmcm9tICcuL3Jlc291cmNlLXdlZWstdmVydGljYWwtcmVzb3VyY2UtaGVhZGVyJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VXZWVrVmVydGljYWxEYXRhIH0gZnJvbSAnLi91c2UtcmVzb3VyY2Utd2Vlay12ZXJ0aWNhbC1kYXRhJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmVydGljYWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IGlzSG91cmx5LCByZXNvdXJjZXMsIHdlZWtEYXlzLCB2aXNpYmxlRGF5cyB9ID1cblx0XHR1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSgpXG5cdGNvbnN0IHsgaG91cnMsIGNvbHVtbnMgfSA9IHVzZVJlc291cmNlV2Vla1ZlcnRpY2FsRGF0YSgpXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB1c2VNZW1vKFxuXHRcdCgpID0+ICh7XG5cdFx0XHRpZDogaXNIb3VybHkgPyBrZXlzLmNvbC50aW1lIDoga2V5cy5jb2wuZGF0ZSxcblx0XHRcdGRheXM6IGlzSG91cmx5ID8gaG91cnMgOiB3ZWVrRGF5cyxcblx0XHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdFx0Y2xhc3NOYW1lOlxuXHRcdFx0XHQnc2hyaW5rLTAgdy0xNiBtaW4tdy0xNiBtYXgtdy0xNiBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCcsXG5cdFx0XHRncmlkVHlwZTogaXNIb3VybHkgPyAoJ2hvdXInIGFzIGNvbnN0KSA6ICgnZGF5JyBhcyBjb25zdCksXG5cdFx0XHRub0V2ZW50czogdHJ1ZSxcblx0XHRcdHJlbmRlckNlbGw6IChkYXRlOiBEYXlqcykgPT4gKFxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdFx0e2lzSG91cmx5ID8gKFxuXHRcdFx0XHRcdFx0PEhvdXJMYWJlbCBkYXRlPXtkYXRlfSAvPlxuXHRcdFx0XHRcdCkgOiAoXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj57ZGF0ZS5mb3JtYXQoJ2RkZCcpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0PHNwYW4+e2RhdGUuZm9ybWF0KCdNL0QnKX08L3NwYW4+XG5cdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCksXG5cdFx0fSksXG5cdFx0W2hvdXJzLCBpc0hvdXJseSwgd2Vla0RheXNdXG5cdClcblxuXHRjb25zdCBhbGxEYXlSb3cgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoIWlzSG91cmx5KSByZXR1cm4gdW5kZWZpbmVkXG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGxcIj5cblx0XHRcdFx0PEFsbERheUNlbGwgLz5cblx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0PEFsbERheVJvd1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcz17eyBjZWxsOiAnbWluLXctMjAgZmxleC0xIGJvcmRlci1yIScgfX1cblx0XHRcdFx0XHRcdGRheXM9e3Zpc2libGVEYXlzfVxuXHRcdFx0XHRcdFx0a2V5PXtrZXlzLmFsbERheVJvdyhyZXNvdXJjZS5pZCl9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRzaG93U3BhY2VyPXtmYWxzZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpKX1cblx0XHRcdDwvZGl2PlxuXHRcdClcblx0fSwgW2lzSG91cmx5LCByZXNvdXJjZXMsIHZpc2libGVEYXlzXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17YWxsRGF5Um93fVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6IGlzSG91cmx5ID8gJ2gtMjQnIDogJ2gtMTInIH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIC4uLmNvbHVtbnNdfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS13ZWVrXCJcblx0XHRcdGdyaWRUeXBlPXtpc0hvdXJseSA/ICdob3VyJyA6ICdkYXknfVxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0PFJlc291cmNlV2Vla1ZlcnRpY2FsUmVzb3VyY2VIZWFkZXJcblx0XHRcdFx0XHRyZXNvdXJjZXM9e3Jlc291cmNlc31cblx0XHRcdFx0XHR2aXNpYmxlRGF5cz17dmlzaWJsZURheXN9XG5cdFx0XHRcdC8+XG5cdFx0XHRcdHtpc0hvdXJseSAmJiA8UmVzb3VyY2VXZWVrVmVydGljYWxEYXlIZWFkZXIgY29sdW1ucz17Y29sdW1uc30gLz59XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmludGVyZmFjZSBSZXNvdXJjZVdlZWtWZXJ0aWNhbERheUhlYWRlclByb3BzIHtcblx0Y29sdW1uczogQXJyYXk8eyBkYXk/OiBEYXlqczsgcmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlciB9PlxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmVydGljYWxEYXlIZWFkZXI6IFJlYWN0LkZDPFxuXHRSZXNvdXJjZVdlZWtWZXJ0aWNhbERheUhlYWRlclByb3BzXG4+ID0gKHsgY29sdW1ucyB9KSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNocmluay0wIHctMTYgYm9yZGVyLXIgYm9yZGVyLWIgei0yMCBiZy1iYWNrZ3JvdW5kIHN0aWNreSBsZWZ0LTBcIj5cblx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwicHgtMiBoLWZ1bGwgdy1mdWxsIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtc3RhcnQgZm9udC1tZWRpdW1cIj5cblx0XHRcdFx0XHR7Y3VycmVudERhdGUud2VlaygpfVxuXHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdHtjb2x1bW5zLm1hcCgoY29sLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBkYXkgPSBjb2wuZGF5XG5cdFx0XHRcdGlmICghZGF5KSByZXR1cm4gbnVsbFxuXHRcdFx0XHRjb25zdCBrZXkgPSBrZXlzLmhlYWRlci53ZWVrLmhvdXIoZGF5LCBjb2wucmVzb3VyY2VJZCA/PyAnJylcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdCdtaW4tdy0yMCBmbGV4LTEgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQteHMgc2hyaW5rLTAgYmctYmFja2dyb3VuZCdcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5oZWFkZXIucmVzb3VyY2UudGltZUxhYmVsKFxuXHRcdFx0XHRcdFx0XHQnd2VlaycsXG5cdFx0XHRcdFx0XHRcdGRheS5mb3JtYXQoJ0hIJylcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoa2V5LCAnYW5pbWF0ZWQnKX1cblx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2tleXMubGlzdEtleShrZXksICdtb3Rpb24nKX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdNL0QnKX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJlc291cmNlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsJ1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmludGVyZmFjZSBSZXNvdXJjZVdlZWtWZXJ0aWNhbFJlc291cmNlSGVhZGVyUHJvcHMge1xuXHRyZXNvdXJjZXM6IFJlc291cmNlW11cblx0dmlzaWJsZURheXM6IERheWpzW11cbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlV2Vla1ZlcnRpY2FsUmVzb3VyY2VIZWFkZXI6IFJlYWN0LkZDPFxuXHRSZXNvdXJjZVdlZWtWZXJ0aWNhbFJlc291cmNlSGVhZGVyUHJvcHNcbj4gPSAoeyByZXNvdXJjZXMgfSkgPT4ge1xuXHRjb25zdCB7IHdlZWtWaWV3R3JhbnVsYXJpdHksIHQsIGN1cnJlbnREYXRlIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGlzSG91cmx5ID0gd2Vla1ZpZXdHcmFudWxhcml0eSA9PT0gJ2hvdXJseSdcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNocmluay0wIHctMTYgYm9yZGVyLXIgei0yMCBiZy1iYWNrZ3JvdW5kIHN0aWNreSBsZWZ0LTBcIj5cblx0XHRcdFx0PHNwYW5cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J3B4LTIgaC1mdWxsIHctZnVsbCBmbGV4IGZsZXgtY29sIGp1c3RpZnktY2VudGVyIHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtY2VudGVyJyxcblx0XHRcdFx0XHRcdGlzSG91cmx5ID8gJ2p1c3RpZnktZW5kJyA6ICdqdXN0aWZ5LWNlbnRlciBib3JkZXItYidcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3QoJ3dlZWsnKX1cblx0XHRcdFx0XHR7IWlzSG91cmx5ICYmIChcblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHR7Y3VycmVudERhdGUud2VlaygpfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdDwvc3Bhbj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+IHtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8UmVzb3VyY2VDZWxsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtaW4tdy0yMCBmbGV4LTEgYm9yZGVyLWJcIlxuXHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoJ3Jlc291cmNlLWNlbGwnLCByZXNvdXJjZS5pZCl9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdCdzdGlja3kgdGV4dC1zbSBmb250LW1lZGl1bSB0cnVuY2F0ZScsXG5cdFx0XHRcdFx0XHRcdFx0aXNIb3VybHkgPyAnbGVmdC0xLzQnIDogJ2xlZnQtMSdcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3Jlc291cmNlLnRpdGxlfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9SZXNvdXJjZUNlbGw+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB7IHVzZVJlc291cmNlV2Vla1ZpZXdEYXRhIH0gZnJvbSAnLi4vdXNlLXJlc291cmNlLXdlZWstdmlldy1kYXRhJ1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVzb3VyY2VXZWVrVmVydGljYWxEYXRhKCkge1xuXHRjb25zdCB7XG5cdFx0aXNIb3VybHksXG5cdFx0cmVzb3VyY2VzLFxuXHRcdHdlZWtEYXlzLFxuXHRcdHZpc2libGVEYXlzLFxuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHR9ID0gdXNlUmVzb3VyY2VXZWVrVmlld0RhdGEoKVxuXG5cdGNvbnN0IGdldEhvdXJzID0gdXNlQ2FsbGJhY2soXG5cdFx0KGRhdGU6IERheWpzKSA9PiB7XG5cdFx0XHRyZXR1cm4gZ2V0Vmlld0hvdXJzKHtcblx0XHRcdFx0cmVmZXJlbmNlRGF0ZTogZGF0ZSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3Vycywgd2Vla0RheXMsIHJlc291cmNlQnVzaW5lc3NIb3Vyc11cblx0KVxuXG5cdGNvbnN0IGhvdXJzID0gdXNlTWVtbygoKSA9PiBnZXRIb3VycyhjdXJyZW50RGF0ZSksIFtjdXJyZW50RGF0ZSwgZ2V0SG91cnNdKVxuXHRjb25zdCBob3VybHlDb2x1bW5zID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0cmVzb3VyY2VzLmZsYXRNYXAoKHJlc291cmNlKSA9PlxuXHRcdFx0XHR2aXNpYmxlRGF5cy5tYXAoKGRheSkgPT4gKHtcblx0XHRcdFx0XHRpZDoga2V5cy5jb2wuZGF5KGRheSwgcmVzb3VyY2UuaWQpLFxuXHRcdFx0XHRcdGNsYXNzTmFtZTogJ21pbi13LTIwIGZsZXgtMScsXG5cdFx0XHRcdFx0cmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG5cdFx0XHRcdFx0cmVzb3VyY2UsXG5cdFx0XHRcdFx0ZGF5LFxuXHRcdFx0XHRcdGRheXM6IGdldEhvdXJzKGRheSksXG5cdFx0XHRcdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0XHRcdFx0fSkpXG5cdFx0XHQpLFxuXHRcdFtyZXNvdXJjZXMsIHZpc2libGVEYXlzLCBnZXRIb3Vyc11cblx0KVxuXG5cdC8vIFVzZXMgYHdlZWtEYXlzYCAoYWxsIDcpIGludGVudGlvbmFsbHksIG5vdCBgdmlzaWJsZURheXNgLiBOb24tY29udGlndW91c1xuXHQvLyB2aXNpYmxlIGRheXMgd291bGQgYnJlYWsgbXVsdGktZGF5IGV2ZW50IHBvc2l0aW9uaW5nLCBzbyBgaGlkZGVuRGF5c2AgaXNcblx0Ly8gbm90IHN1cHBvcnRlZCBpbiBkYWlseSBncmFudWxhcml0eS5cblx0Y29uc3QgZGFpbHlDb2x1bW5zID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+ICh7XG5cdFx0XHRcdGlkOiBrZXlzLmNvbC5yZXNvdXJjZSgnd2VlaycsIHJlc291cmNlLmlkKSxcblx0XHRcdFx0Y2xhc3NOYW1lOiAnbWluLXctMjAgZmxleC0xJyxcblx0XHRcdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0XHRcdHJlc291cmNlSWQ6IHJlc291cmNlLmlkLFxuXHRcdFx0XHRyZXNvdXJjZSxcblx0XHRcdFx0ZGF5czogd2Vla0RheXMsXG5cdFx0XHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0XHRcdH0pKSxcblx0XHRbcmVzb3VyY2VzLCB3ZWVrRGF5c11cblx0KVxuXG5cdGNvbnN0IGNvbHVtbnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoaXNIb3VybHkpIHJldHVybiBob3VybHlDb2x1bW5zXG5cdFx0cmV0dXJuIGRhaWx5Q29sdW1uc1xuXHR9LCBbaXNIb3VybHksIGhvdXJseUNvbHVtbnMsIGRhaWx5Q29sdW1uc10pXG5cblx0cmV0dXJuIHsgaG91cnMsIGNvbHVtbnMgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlV2Vla0hvcml6b250YWwgfSBmcm9tICcuL2hvcml6b250YWwvcmVzb3VyY2Utd2Vlay1ob3Jpem9udGFsJ1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrVmVydGljYWwgfSBmcm9tICcuL3ZlcnRpY2FsL3Jlc291cmNlLXdlZWstdmVydGljYWwnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVdlZWtWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBvcmllbnRhdGlvbiB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGlmIChvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuXHRcdHJldHVybiA8UmVzb3VyY2VXZWVrVmVydGljYWwgLz5cblx0fVxuXG5cdHJldHVybiA8UmVzb3VyY2VXZWVrSG9yaXpvbnRhbCAvPlxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBDYWxlbmRhckRuZENvbnRleHQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9jYWxlbmRhci1kbmQtY29udGV4dCdcbmltcG9ydCB7IEV2ZW50Rm9ybURpYWxvZyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nJ1xuaW1wb3J0IHsgSGVhZGVyIH0gZnJvbSAnQC9jb21wb25lbnRzL2hlYWRlcidcbmltcG9ydCB7IFJlc291cmNlRGF5VmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldydcbmltcG9ydCB7IFJlc291cmNlTW9udGhWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcnXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlQ2FsZW5kYXJCb2R5OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyB2aWV3IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgdmlld01hcDogUmVjb3JkPHN0cmluZywgUmVhY3QuUmVhY3ROb2RlPiA9IHtcblx0XHRtb250aDogPFJlc291cmNlTW9udGhWaWV3IGtleT1cIm1vbnRoXCIgLz4sXG5cdFx0d2VlazogPFJlc291cmNlV2Vla1ZpZXcga2V5PVwid2Vla1wiIC8+LFxuXHRcdGRheTogPFJlc291cmNlRGF5VmlldyBrZXk9XCJkYXlcIiAvPixcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsXCJcblx0XHRcdGRhdGEtdGVzdGlkPVwiaWxhbXktcmVzb3VyY2UtY2FsZW5kYXJcIlxuXHRcdD5cblx0XHRcdDxIZWFkZXIgY2xhc3NOYW1lPVwicC0xXCIgLz5cblxuXHRcdFx0ey8qIENhbGVuZGFyIEJvZHkgd2l0aCBBbmltYXRlZFNlY3Rpb24gZm9yIHZpZXcgdHJhbnNpdGlvbnMgKi99XG5cdFx0XHQ8Q2FsZW5kYXJEbmRDb250ZXh0PlxuXHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIGgtW2NhbGMoMTAwJS0zLjVyZW0pXSBAY29udGFpbmVyL2NhbGVuZGFyLWJvZHlcIlxuXHRcdFx0XHRcdGRpcmVjdGlvbj1cImhvcml6b250YWxcIlxuXHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e3ZpZXd9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImJvcmRlciBoLWZ1bGwgdy1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1ib2R5XCI+XG5cdFx0XHRcdFx0XHR7dmlld01hcFt2aWV3XX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHQ8L0NhbGVuZGFyRG5kQ29udGV4dD5cblxuXHRcdFx0ey8qIEV2ZW50IEZvcm0gRGlhbG9nICovfVxuXHRcdFx0PEV2ZW50Rm9ybURpYWxvZyAvPlxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUge1xuXHRJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wRXZlbnQsXG5cdElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BzLFxufSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHtcblx0REFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0RVZFTlRfQkFSX0hFSUdIVCxcblx0R0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdFdFRUtfREFZU19OVU1CRVJfTUFQLFxufSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBub3JtYWxpemVFdmVudHMsIHNhZmVEYXRlLCB0b0hpZGRlbkRheXNTZXQgfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJCb2R5IH0gZnJvbSAnLi9yZXNvdXJjZS1jYWxlbmRhci1ib2R5J1xuXG5leHBvcnQgY29uc3QgSWxhbXlSZXNvdXJjZUNhbGVuZGFyOiBSZWFjdC5GQzxJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wcz4gPSAoe1xuXHRldmVudHMgPSBbXSxcblx0cmVzb3VyY2VzID0gW10sXG5cdGZpcnN0RGF5T2ZXZWVrID0gJ3N1bmRheScsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdGRpc2FibGVEcmFnQW5kRHJvcCA9IGZhbHNlLFxuXHRkYXlNYXhFdmVudHMgPSBEQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRldmVudFNwYWNpbmcgPSBHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0ZXZlbnRIZWlnaHQgPSBFVkVOVF9CQVJfSEVJR0hULFxuXHRoaWRkZW5EYXlzLFxuXHQuLi5wcm9wc1xufSkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXJcblx0XHRcdGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfVxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wPXtkaXNhYmxlRHJhZ0FuZERyb3B9XG5cdFx0XHRldmVudEhlaWdodD17ZXZlbnRIZWlnaHR9XG5cdFx0XHRldmVudFNwYWNpbmc9e2V2ZW50U3BhY2luZ31cblx0XHRcdGV2ZW50cz17bm9ybWFsaXplRXZlbnRzPElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4oXG5cdFx0XHRcdGV2ZW50c1xuXHRcdFx0KX1cblx0XHRcdGZpcnN0RGF5T2ZXZWVrPXtXRUVLX0RBWVNfTlVNQkVSX01BUFtmaXJzdERheU9mV2Vla119XG5cdFx0XHRoaWRkZW5EYXlzPXt0b0hpZGRlbkRheXNTZXQoaGlkZGVuRGF5cyl9XG5cdFx0XHRpbml0aWFsRGF0ZT17c2FmZURhdGUoaW5pdGlhbERhdGUpfVxuXHRcdFx0aW5pdGlhbFZpZXc9e2luaXRpYWxWaWV3fVxuXHRcdFx0cmVzb3VyY2VzPXtyZXNvdXJjZXN9XG5cdFx0XHR0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxSZXNvdXJjZUNhbGVuZGFyQm9keSAvPlxuXHRcdDwvUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyPlxuXHQpXG59XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiQUFFQSxnQkFBUyxlQ0ZULDBCQUNDLGFBRUEsc0JDRkQsZUFBUyxjQUNULGtCQUFTLHdCQ0RULHNCQUNBLDBDQUNBLDhDQUNBLCtDQUNBLDJDQUNBLHVDQUNBLHlDQUNBLG9DQUNBLHdDQUNBLDJDQWFBLElBQUksR0FFRSxHQUFnQyxDQUFDLEVBQVMsRUFBWSxJQUFpQixDQUM1RSxJQUFNLEVBQVEsRUFBVyxVQUduQixFQUFxQixFQUFhLEdBQUcsV0FDM0MsRUFBYSxHQUFHLFdBQWEsQ0FBQyxJQUFzQixDQUVuRCxPQURBLEdBQWtCLEVBQ1gsRUFBbUIsQ0FBUSxHQUluQyxJQUE4QixRQUF4QixFQUNzQixNQUF0QixHQUFnQixFQUV0QixTQUFTLENBQWUsQ0FDdkIsRUFDQSxFQUNjLENBQ2QsSUFBTSxF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WSxJQUZQLEVBQUssVUFBVSxFQUFTLEVBQUUsQ0FHaEMsQ0FDQSxHQUNBLEdBRUQsQ0FBQyxFQUFVLEVBQVcsQ0FBVyxDQUFDLEVBRXJDLE9BQ0MsR0FjRSxHQWRGLENBQ0MsVUFBVyxFQUNYLFFBQVMsQ0FBRSxPQUFRLEVBQVcsT0FBUyxNQUFPLEVBQzlDLFFBQVMsQ0FBQyxFQUFVLEdBQUcsQ0FBTyxFQUM5QixjQUFZLGdCQUNaLFNBQVUsRUFBVyxPQUFTLE1BTC9CLFNBT0MsR0FNRSxNQU5GLENBQUssVUFBVSx1QkFBZixTQU1FLENBTEQsR0FBQyxHQUFELENBQ0MsVUFBVyxFQUNYLFlBQWEsRUFDZCxFQUNDLEdBQVksR0FBQyxHQUFELENBQStCLFFBQVMsRUFBUyxHQUM3RCxFQUNELDRDSXZFRyxJQUFNLEdBQTZCLElBQU0sQ0FDL0MsSUFBUSxlQUFnQixFQUF3QixFQUVoRCxHQUFJLElBQWdCLFdBQ25CLE9BQU8sR0FBQyxHQUFELEVBQXNCLEVBRzlCLE9BQU8sR0FBQyxHQUFELEVBQXdCLHVEQ0Z6QixJQUFNLEdBQWlDLElBQU0sQ0FDbkQsSUFBUSxRQUFTLEVBQXdCLEVBUXpDLE9BQ0MsR0FxQkUsTUFyQkYsQ0FDQyxVQUFVLDhCQUNWLGNBQVksMEJBRmIsU0FxQkUsQ0FqQkQsR0FBQyxHQUFELENBQVEsVUFBVSxNQUFNLEVBR3hCLEdBVUUsR0FWRixVQUNDLEdBUUUsRUFSRixDQUNDLFVBQVUsd0RBQ1YsVUFBVSxhQUNWLGNBQWUsRUFIaEIsU0FLQyxHQUVFLE1BRkYsQ0FBSyxVQUFVLHVCQUF1QixjQUFZLGdCQUFsRCxTQXBCNkMsQ0FDaEQsTUFBTyxHQUFDLEdBQUQsR0FBdUIsT0FBUSxFQUN0QyxLQUFNLEdBQUMsR0FBRCxHQUFzQixNQUFPLEVBQ25DLElBQUssR0FBQyxHQUFELEdBQXFCLEtBQU0sQ0FDakMsRUFpQmMsR0FDUixFQUNELEVBQ0QsRUFHRixHQUFDLEdBQUQsRUFBaUIsR0FDaEIsNENDekJHLElBQU0sR0FBOEQsRUFDMUUsU0FBUyxDQUFDLEVBQ1YsWUFBWSxDQUFDLEVBQ2IsaUJBQWlCLFNBQ2pCLGNBQWMsUUFDZCxjQUNBLHFCQUFxQixHQUNyQixlQUFlLEdBQ2YsYUFBYSxVQUNiLGVBQWUsR0FDZixjQUFjLEdBQ2QsZ0JBQ0csS0FDRSxDQUNMLE9BQ0MsR0FpQkUsR0FqQkYsQ0FDQyxhQUFjLEVBQ2QsbUJBQW9CLEVBQ3BCLFlBQWEsRUFDYixhQUFjLEVBQ2QsT0FBUSxHQUNQLENBQ0QsRUFDQSxlQUFnQixHQUFxQixHQUNyQyxXQUFZLEdBQWdCLENBQVUsRUFDdEMsWUFBYSxHQUFTLENBQVcsRUFDakMsWUFBYSxFQUNiLFVBQVcsRUFDWCxXQUFZLEtBQ1IsRUFkTCxTQWdCQyxHQUFDLEdBQUQsRUFBc0IsRUFDckIiLAogICJkZWJ1Z0lkIjogIjVBMjY0NjQ4MTUyQkRBMjk2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9