@ilamy/calendar 1.1.1 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +8 -0
- package/dist/index.js +6 -6
- package/package.json +10 -10
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{RRule as CQ}from"rrule";import{RRule as _1}from"rrule";import A0 from"dayjs";import l2 from"dayjs/plugin/isBetween.js";import d2 from"dayjs/plugin/isSameOrAfter.js";import t2 from"dayjs/plugin/isSameOrBefore.js";import n2 from"dayjs/plugin/localeData.js";import a2 from"dayjs/plugin/minMax.js";import s2 from"dayjs/plugin/timezone.js";import e2 from"dayjs/plugin/utc.js";import P1 from"dayjs/plugin/weekday.js";import f1 from"dayjs/plugin/weekOfYear.js";import"dayjs/locale/af.js";import"dayjs/locale/am.js";import"dayjs/locale/ar-dz.js";import"dayjs/locale/ar-iq.js";import"dayjs/locale/ar-kw.js";import"dayjs/locale/ar-ly.js";import"dayjs/locale/ar-ma.js";import"dayjs/locale/ar-sa.js";import"dayjs/locale/ar-tn.js";import"dayjs/locale/ar.js";import"dayjs/locale/az.js";import"dayjs/locale/be.js";import"dayjs/locale/bg.js";import"dayjs/locale/bi.js";import"dayjs/locale/bm.js";import"dayjs/locale/bn-bd.js";import"dayjs/locale/bn.js";import"dayjs/locale/bo.js";import"dayjs/locale/br.js";import"dayjs/locale/bs.js";import"dayjs/locale/ca.js";import"dayjs/locale/cs.js";import"dayjs/locale/cv.js";import"dayjs/locale/cy.js";import"dayjs/locale/da.js";import"dayjs/locale/de-at.js";import"dayjs/locale/de-ch.js";import"dayjs/locale/de.js";import"dayjs/locale/dv.js";import"dayjs/locale/el.js";import"dayjs/locale/en-au.js";import"dayjs/locale/en-ca.js";import"dayjs/locale/en-gb.js";import"dayjs/locale/en-ie.js";import"dayjs/locale/en-il.js";import"dayjs/locale/en-in.js";import"dayjs/locale/en-nz.js";import"dayjs/locale/en-sg.js";import"dayjs/locale/en-tt.js";import"dayjs/locale/en.js";import"dayjs/locale/eo.js";import"dayjs/locale/es-do.js";import"dayjs/locale/es-mx.js";import"dayjs/locale/es-pr.js";import"dayjs/locale/es-us.js";import"dayjs/locale/es.js";import"dayjs/locale/et.js";import"dayjs/locale/eu.js";import"dayjs/locale/fa.js";import"dayjs/locale/fi.js";import"dayjs/locale/fo.js";import"dayjs/locale/fr-ca.js";import"dayjs/locale/fr-ch.js";import"dayjs/locale/fr.js";import"dayjs/locale/fy.js";import"dayjs/locale/ga.js";import"dayjs/locale/gd.js";import"dayjs/locale/gl.js";import"dayjs/locale/gom-latn.js";import"dayjs/locale/gu.js";import"dayjs/locale/he.js";import"dayjs/locale/hi.js";import"dayjs/locale/hr.js";import"dayjs/locale/ht.js";import"dayjs/locale/hu.js";import"dayjs/locale/hy-am.js";import"dayjs/locale/id.js";import"dayjs/locale/is.js";import"dayjs/locale/it-ch.js";import"dayjs/locale/it.js";import"dayjs/locale/ja.js";import"dayjs/locale/jv.js";import"dayjs/locale/ka.js";import"dayjs/locale/kk.js";import"dayjs/locale/km.js";import"dayjs/locale/kn.js";import"dayjs/locale/ko.js";import"dayjs/locale/ku.js";import"dayjs/locale/ky.js";import"dayjs/locale/lb.js";import"dayjs/locale/lo.js";import"dayjs/locale/lt.js";import"dayjs/locale/lv.js";import"dayjs/locale/me.js";import"dayjs/locale/mi.js";import"dayjs/locale/mk.js";import"dayjs/locale/ml.js";import"dayjs/locale/mn.js";import"dayjs/locale/mr.js";import"dayjs/locale/ms-my.js";import"dayjs/locale/ms.js";import"dayjs/locale/mt.js";import"dayjs/locale/my.js";import"dayjs/locale/nb.js";import"dayjs/locale/ne.js";import"dayjs/locale/nl-be.js";import"dayjs/locale/nl.js";import"dayjs/locale/nn.js";import"dayjs/locale/oc-lnc.js";import"dayjs/locale/pa-in.js";import"dayjs/locale/pl.js";import"dayjs/locale/pt-br.js";import"dayjs/locale/pt.js";import"dayjs/locale/rn.js";import"dayjs/locale/ro.js";import"dayjs/locale/ru.js";import"dayjs/locale/rw.js";import"dayjs/locale/sd.js";import"dayjs/locale/se.js";import"dayjs/locale/si.js";import"dayjs/locale/sk.js";import"dayjs/locale/sl.js";import"dayjs/locale/sq.js";import"dayjs/locale/sr-cyrl.js";import"dayjs/locale/sr.js";import"dayjs/locale/ss.js";import"dayjs/locale/sv-fi.js";import"dayjs/locale/sv.js";import"dayjs/locale/sw.js";import"dayjs/locale/ta.js";import"dayjs/locale/te.js";import"dayjs/locale/tet.js";import"dayjs/locale/tg.js";import"dayjs/locale/th.js";import"dayjs/locale/tk.js";import"dayjs/locale/tl-ph.js";import"dayjs/locale/tlh.js";import"dayjs/locale/tr.js";import"dayjs/locale/tzl.js";import"dayjs/locale/tzm-latn.js";import"dayjs/locale/tzm.js";import"dayjs/locale/ug-cn.js";import"dayjs/locale/uk.js";import"dayjs/locale/ur.js";import"dayjs/locale/uz-latn.js";import"dayjs/locale/uz.js";import"dayjs/locale/vi.js";import"dayjs/locale/x-pseudo.js";import"dayjs/locale/yo.js";import"dayjs/locale/zh-cn.js";import"dayjs/locale/zh-hk.js";import"dayjs/locale/zh-tw.js";import"dayjs/locale/zh.js";A0.extend(P1);A0.extend(f1);A0.extend(d2);A0.extend(t2);A0.extend(l2);A0.extend(a2);A0.extend(s2);A0.extend(e2);A0.extend(n2);var W=A0;import{clsx as $1}from"clsx";import{twMerge as Z1}from"tailwind-merge";function a(P,f){let $=P.startOf("week").day(f),_=P.isBefore($)?$.subtract(1,"week"):$;return Array.from({length:7},(J,Z)=>_.add(Z,"day"))}function NP(P,f){let $=a(P.startOf("month"),f);return Array.from({length:6},(_,J)=>{let Z=$[0].add(J,"week");return a(Z,f)})}function p(...P){return Z1($1(P))}function s0(P){if(P===void 0)return;if(W.isDayjs(P))return P;let f=W(P);return f.isValid()?f:void 0}var V5=(P,f)=>{let $={...P};for(let _ of f)delete $[_];return $};function RP(P){if(!P||!P.length)return[];return P.map((f)=>{return{...f,start:W.isDayjs(f.start)?f.start:W(f.start),end:W.isDayjs(f.end)?f.end:W(f.end)}})}var e0=(P)=>{return Boolean(P.rrule||P.recurrenceId||P.uid)},dP=({event:P,currentEvents:f,startDate:$,endDate:_})=>{if(!P.rrule)return[];try{let J={...P.rrule,dtstart:P.rrule.dtstart||P.start.toDate()},Z=new _1(J),X=f.filter((L)=>L.recurrenceId&&L.uid===P.uid),q=P.end.diff(P.start),Q=$.subtract(q,"millisecond").toDate(),U=_.toDate();return Z.between(Q,U,!0).map((L,A)=>{let K=W(L),Y=X.find((F)=>s0(F.recurrenceId)?.isSame(K));if(Y)return{...P,...Y};let B=P.end.diff(P.start),z=K.add(B,"millisecond"),V=`${P.id}_${A}`,O=P.uid||`${P.id}@ilamy.calendar`;return{...P,id:V,start:K,end:z,uid:O,rrule:void 0}}).filter((L)=>{if(P.exdates&&P.exdates.length>0){let Y=L.start.toISOString();if(P.exdates.includes(Y))return!1}return L.start.isSameOrBefore(_)&&L.end.isSameOrAfter($)})}catch(J){throw Error(`Invalid RRULE options: ${JSON.stringify(P.rrule)}. Error: ${J instanceof Error?J.message:"Unknown error"}`)}},W5=({targetEvent:P,updates:f,currentEvents:$,scope:_})=>{let J=[...$],Z=J.findIndex((q)=>{return(q.uid||`${q.id}@ilamy.calendar`)===P.uid&&q.rrule&&!q.recurrenceId});if(Z===-1)throw Error("Base recurring event not found");let X=J[Z];switch(_){case"this":{let q=P.start.toISOString(),U=[...X.exdates||[],q],N={...X,exdates:U};J[Z]=N;let G=`${P.id}_modified_${Date.now()}`,L={...V5(P,["width","height","top","left","right"]),...f,id:G,recurrenceId:q,uid:X.uid||`${X.id}@ilamy.calendar`,rrule:void 0};J.push(L);break}case"following":{let Q=P.start.subtract(1,"day").endOf("day").toDate(),U={...X,rrule:{...X.rrule,until:Q}};J[Z]=U;let N=X.end.diff(X.start),G=f.start||P.start,L=f.end||G.add(N),A=`${X.id}_following`,K=`${A}@ilamy.calendar`,Y={...X,...f,rrule:{...X.rrule,...f.rrule,dtstart:G.toDate()},id:A,uid:K,start:G,end:L,recurrenceId:void 0};J.push(Y);break}case"all":{let q={...X,...f};J[Z]=q;break}default:throw Error(`Invalid scope: ${_}. Must be 'this', 'following', or 'all'`)}return J},F5=({targetEvent:P,currentEvents:f,scope:$})=>{let _=[...f],J=_.findIndex((X)=>{return(X.uid||`${X.id}@ilamy.calendar`)===P.uid&&X.rrule&&!X.recurrenceId});if(J===-1)throw Error("Base recurring event not found");let Z=_[J];switch($){case"this":{let X=P.start.toISOString(),Q=[...Z.exdates||[],X],U={...Z,exdates:Q};_[J]=U;break}case"following":{let q=P.start.subtract(1,"day").endOf("day").toDate(),Q={...Z,rrule:{...Z.rrule,until:q}};_[J]=Q;break}case"all":return _.filter((q)=>q.uid!==P.uid);default:throw Error(`Invalid scope: ${$}. Must be 'this', 'following', or 'all'`)}return _};import{AnimatePresence as S4,motion as T4}from"motion/react";import{DndContext as F1,MouseSensor as O1,pointerWithin as R1,TouchSensor as M1,useSensor as D5,useSensors as I1}from"@dnd-kit/core";import{useRef as k5,useState as H1}from"react";import{Slot as X1}from"@radix-ui/react-slot";import{cva as J1}from"class-variance-authority";import{jsx as Q1}from"react/jsx-runtime";var MP=J1("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:f,size:$,asChild:_=!1,...J}){return Q1(_?X1:"button",{"data-slot":"button",className:p(MP({variant:f,size:$,className:P})),...J})}import*as P0 from"@radix-ui/react-dialog";import{XIcon as q1}from"lucide-react";import{jsx as V0,jsxs as tP}from"react/jsx-runtime";function PP({...P}){return V0(P0.Root,{"data-slot":"dialog",...P})}function U1({...P}){return V0(P0.Portal,{"data-slot":"dialog-portal",...P})}function Y1({className:P,...f}){return V0(P0.Overlay,{"data-slot":"dialog-overlay",className:p("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),...f})}function fP({className:P,children:f,...$}){return tP(U1,{"data-slot":"dialog-portal",children:[V0(Y1,{}),tP(P0.Content,{"data-slot":"dialog-content",className:p("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),...$,children:[f,tP(P0.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:[V0(q1,{}),V0("span",{className:"sr-only",children:"Close"})]})]})]})}function $P({className:P,...f}){return V0("div",{"data-slot":"dialog-header",className:p("flex flex-col gap-2 text-center sm:text-left",P),...f})}function IP({className:P,...f}){return V0("div",{"data-slot":"dialog-footer",className:p("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",P),...f})}function ZP({className:P,...f}){return V0(P0.Title,{"data-slot":"dialog-title",className:p("text-lg leading-none font-semibold",P),...f})}function HP({className:P,...f}){return V0(P0.Description,{"data-slot":"dialog-description",className:p("text-muted-foreground text-sm",P),...f})}import{useContext as h5}from"react";import{createContext as p1,useContext as O5}from"react";var _P=p1(void 0),m=()=>{let P=O5(_P);if(P===void 0)throw Error("useCalendarContext must be used within a CalendarProvider");return P},z1=()=>{let P=O5(_P);if(P===void 0)throw Error("useIlamyCalendarContext must be used within a CalendarProvider");return{currentDate:P.currentDate,view:P.view,events:P.events,isEventFormOpen:P.isEventFormOpen,selectedEvent:P.selectedEvent,selectedDate:P.selectedDate,firstDayOfWeek:P.firstDayOfWeek,setCurrentDate:P.setCurrentDate,selectDate:P.selectDate,setView:P.setView,nextPeriod:P.nextPeriod,prevPeriod:P.prevPeriod,today:P.today,addEvent:P.addEvent,updateEvent:P.updateEvent,deleteEvent:P.deleteEvent,openEventForm:P.openEventForm,closeEventForm:P.closeEventForm,businessHours:P.businessHours}};import{createContext as G1,useContext as R5}from"react";var XP=G1(void 0),U0=()=>{let P=R5(XP);if(P===void 0)throw Error("useResourceCalendarContext must be used within a ResourceCalendarProvider");return P},K1=()=>{let P=R5(XP);if(P===void 0)throw Error("useIlamyResourceCalendarContext must be used within a ResourceCalendarProvider");return{currentDate:P.currentDate,view:P.view,events:P.events,resources:P.resources,isEventFormOpen:P.isEventFormOpen,selectedEvent:P.selectedEvent,selectedDate:P.selectedDate,firstDayOfWeek:P.firstDayOfWeek,setCurrentDate:P.setCurrentDate,selectDate:P.selectDate,setView:P.setView,nextPeriod:P.nextPeriod,prevPeriod:P.prevPeriod,today:P.today,addEvent:P.addEvent,updateEvent:P.updateEvent,deleteEvent:P.deleteEvent,openEventForm:P.openEventForm,closeEventForm:P.closeEventForm,getEventsForResource:P.getEventsForResource,businessHours:P.businessHours}};import{useCallback as J0,useMemo as N1,useState as T5}from"react";import{useCallback as s,useEffect as aP,useMemo as H5,useState as y0}from"react";var nP={today:"Today",create:"Create",new:"New",update:"Update",delete:"Delete",cancel:"Cancel",export:"Export",event:"Event",events:"Events",newEvent:"New Event",title:"Title",description:"Description",location:"Location",allDay:"All day",startDate:"Start Date",endDate:"End Date",startTime:"Start Time",endTime:"End Time",color:"Color",createEvent:"Create Event",editEvent:"Edit Event",addNewEvent:"Add a new event to your calendar",editEventDetails:"Edit your event details",eventTitlePlaceholder:"Event title",eventDescriptionPlaceholder:"Event description (optional)",eventLocationPlaceholder:"Event location (optional)",repeat:"Repeat",repeats:"Repeats",customRecurrence:"Custom recurrence",daily:"Daily",weekly:"Weekly",monthly:"Monthly",yearly:"Yearly",interval:"Interval",repeatOn:"Repeat on",never:"Never",count:"Count",every:"Every",ends:"Ends",after:"After",occurrences:"occurrences",on:"On",editRecurringEvent:"Edit recurring event",deleteRecurringEvent:"Delete recurring event",editRecurringEventQuestion:"is a recurring event. How would you like to edit it?",deleteRecurringEventQuestion:"is a recurring event. How would you like to delete it?",thisEvent:"This event",thisEventDescription:"Only change this specific occurrence",thisAndFollowingEvents:"This and following events",thisAndFollowingEventsDescription:"Edit this and all future occurrences",allEvents:"All events",allEventsDescription:"Edit the entire recurring series",onlyChangeThis:"Only change this specific occurrence",changeThisAndFuture:"Change this and all future occurrences",changeEntireSeries:"Change the entire recurring series",onlyDeleteThis:"Only delete this specific occurrence",deleteThisAndFuture:"Delete this and all future occurrences",deleteEntireSeries:"Delete the entire recurring series",month:"Month",week:"Week",day:"Day",year:"Year",more:"more",resources:"Resources",resource:"Resource",time:"Time",date:"Date",noResourcesVisible:"No resources visible",addResourcesOrShowExisting:"Add resources or show existing ones",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat",january:"January",february:"February",march:"March",april:"April",may:"May",june:"June",july:"July",august:"August",september:"September",october:"October",november:"November",december:"December"};var b0=1,M5=28,N0=24,JP=4,I5="bg-secondary text-muted-foreground pointer-events-none",SP={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6};var S5={day:"day",week:"week",month:"month",year:"year"},TP=(P)=>{let{events:f=[],firstDayOfWeek:$=0,initialView:_="month",initialDate:J=W(),businessHours:Z,onEventAdd:X,onEventUpdate:q,onEventDelete:Q,onDateChange:U,onViewChange:N,locale:G,timezone:L,translations:A,translator:K}=P,[Y,B]=y0(J),[z,V]=y0(_),[O,I]=y0(f),[F,R]=y0(!1),[b,u]=y0(null),[D,i]=y0(null),[v,j]=y0(G||"en"),o=H5(()=>{if(K)return K;if(A)return(M)=>A[M]||M;return(M)=>nP[M]||M},[A,K]),T=s((M,w)=>{let y=[];for(let H of O)if(H.rrule)y.push(...dP({event:H,currentEvents:O,startDate:M,endDate:w}));else{let c=H.start.isSameOrAfter(M)&&H.start.isSameOrBefore(w),B0=H.end.isSameOrAfter(M)&&H.end.isSameOrBefore(w),lP=H.start.isBefore(M)&&H.end.isAfter(w);if(c||B0||lP)y.push(H)}return y},[O]),q0=s(()=>{if(z==="day")return{start:Y.startOf("day"),end:Y.endOf("day")};if(z==="year")return{start:Y.startOf("year"),end:Y.endOf("year")};if(z==="week"){let w=a(Y,$);return{start:w[0].startOf("day"),end:w[6].endOf("day")}}let M=NP(Y,$);return{start:M[0][0].startOf("day"),end:M[5][6].endOf("day")}},[Y,z,$]),n=H5(()=>{let{start:M,end:w}=q0();return T(M,w)},[T,q0]);aP(()=>{if(f)I(f)},[f]),aP(()=>{if(G)j(G),W.locale(G),B((M)=>M.locale(G))},[G]),aP(()=>{if(L)W.tz.setDefault(L)},[L]);let K0=s((M)=>{B(M),U?.(M)},[U]),Z0=s((M)=>{B((w)=>{let y=M===1?w.add(1,S5[z]):w.subtract(1,S5[z]);return U?.(y),y})},[z,U]),g=s(()=>Z0(1),[Z0]),d0=s(()=>Z0(-1),[Z0]),T0=s(()=>{let M=W();B(M),U?.(M)},[U]),t0=s((M)=>{I((w)=>[...w,M]),X?.(M)},[X]),n0=s((M,w)=>{I((y)=>y.map((H)=>{if(H.id!==M)return H;let c={...H,...w};return q?.(c),c}))},[q]),a0=s((M,w,y)=>{q?.({...M,...w}),I(W5({targetEvent:M,updates:w,currentEvents:O,scope:y.scope}))},[O,q]),i0=s((M,w)=>{Q?.(M),I(F5({targetEvent:M,currentEvents:O,scope:w.scope}))},[O,Q]),v0=s((M)=>{I((w)=>{let y=w.find((H)=>H.id===M);if(y)Q?.(y);return w.filter((H)=>H.id!==M)})},[Q]),c0=s((M)=>{if(M?.start)i(M.start);let w=M?.start??Y;u({title:o("newEvent"),start:w,end:M?.end??w.add(1,"hour"),resourceId:M?.resourceId,description:"",allDay:!1}),R(!0)},[Y,o]),S=s(()=>{i(null),u(null),R(!1)},[]),X0=s((M)=>{V(M),N?.(M)},[N]),F0=s((M)=>{let w=M.uid;return O.find((y)=>(y.uid||`${y.id}@ilamy.calendar`)===w&&y.rrule)||null},[O]);return{currentDate:Y,view:z,events:n,rawEvents:O,isEventFormOpen:F,selectedEvent:b,selectedDate:D,firstDayOfWeek:$,dayMaxEvents:JP,currentLocale:v,businessHours:Z,setCurrentDate:B,selectDate:K0,setView:X0,nextPeriod:g,prevPeriod:d0,today:T0,addEvent:t0,updateEvent:n0,updateRecurringEvent:a0,deleteEvent:v0,deleteRecurringEvent:i0,openEventForm:c0,closeEventForm:S,setSelectedEvent:u,setIsEventFormOpen:R,setSelectedDate:i,getEventsForDateRange:T,findParentRecurringEvent:F0,t:o}};import{jsx as L1}from"react/jsx-runtime";var b5=(P)=>{if(P.resourceIds)return P.resourceIds;if(P.resourceId!==void 0)return[P.resourceId];return[]},w5=({children:P,events:f=[],resources:$=[],firstDayOfWeek:_=0,initialView:J="month",initialDate:Z,renderEvent:X,onEventClick:q,onCellClick:Q,onViewChange:U,onEventAdd:N,onEventUpdate:G,onEventDelete:L,onDateChange:A,locale:K,timezone:Y,disableCellClick:B,disableEventClick:z,disableDragAndDrop:V,dayMaxEvents:O,eventSpacing:I,stickyViewHeader:F=!0,viewHeaderClassName:R="",headerComponent:b,headerClassName:u,translations:D,translator:i,renderResource:v,renderEventForm:j,businessHours:o,timeFormat:T="12-hour",classesOverride:q0})=>{let[n]=T5($),[K0,Z0]=T5(new Set($.map((H)=>H.id))),g=TP({events:f,firstDayOfWeek:_,initialView:J,initialDate:Z,businessHours:o,onEventAdd:N,onEventUpdate:G,onEventDelete:L,onDateChange:A,onViewChange:U,locale:K,timezone:Y,translations:D,translator:i}),d0=J0((H)=>{Z0((c)=>{let B0=new Set(c);if(B0.has(H))B0.delete(H);else B0.add(H);return B0})},[]),T0=J0((H)=>{Z0((c)=>new Set(c).add(H))},[]),t0=J0((H)=>{Z0((c)=>{let B0=new Set(c);return B0.delete(H),B0})},[]),n0=J0(()=>{Z0(new Set(n.map((H)=>H.id)))},[n]),a0=J0(()=>{Z0(new Set)},[]),i0=J0((H)=>{return g.events.filter((c)=>{if(c.resourceIds)return c.resourceIds.includes(H);return c.resourceId===H})},[g.events]),v0=J0((H)=>{return g.events.filter((c)=>{return b5(c).some((lP)=>H.includes(lP))})},[g.events]),c0=J0((H)=>{return n.find((c)=>c.id===H)},[n]),S=J0(()=>{return n.filter((H)=>K0.has(H.id))},[n,K0]),X0=J0((H)=>{return Boolean(H.resourceIds&&H.resourceIds.length>1)},[]),F0=J0((H)=>{g.setSelectedEvent(H),g.setIsEventFormOpen(!0)},[g]),M=J0((H)=>{if(z)return;if(q)q(H);else F0(H)},[z,q,F0]),w=J0((H)=>{if(B)return;if(Q)Q(H);else{let c={title:g.t("newEvent"),start:H.start,end:H.end,description:"",allDay:!1};if(H.resourceId!==void 0)c.resourceId=H.resourceId;g.setSelectedEvent(c),g.setSelectedDate(H.start),g.setIsEventFormOpen(!0)}},[Q,B,g]),y=N1(()=>({...g,view:g.view,setView:g.setView,events:g.events,rawEvents:g.rawEvents,resources:n,visibleResources:K0,toggleResourceVisibility:d0,showResource:T0,hideResource:t0,showAllResources:n0,hideAllResources:a0,getEventsForResource:i0,getEventsForResources:v0,getResourceById:c0,getVisibleResources:S,isEventCrossResource:X0,getEventResourceIds:b5,onEventClick:M,onCellClick:w,headerComponent:b,headerClassName:u,renderEvent:X,renderResource:v,renderEventForm:j,locale:K,timezone:Y,disableCellClick:B,disableEventClick:z,disableDragAndDrop:V,dayMaxEvents:O,eventSpacing:I,stickyViewHeader:F,viewHeaderClassName:R,businessHours:o,timeFormat:T,classesOverride:q0}),[g,n,K0,d0,T0,t0,n0,a0,i0,v0,c0,S,X0,M,w,X,v,j,K,Y,B,z,V,O,I,F,R,b,u,o,T,q0]);return L1(XP.Provider,{value:y,children:P})};function x(P){let f=h5(XP),$=h5(_P);if(f)return P(f);if($)return P($);throw Error("useSmartCalendarContext must be used within a CalendarProvider or ResourceCalendarProvider")}import{jsx as Q0,jsxs as r0}from"react/jsx-runtime";function LP({isOpen:P,onClose:f,onConfirm:$,operationType:_,eventTitle:J}){let{t:Z}=x((Q)=>({t:Q.t})),X=(Q)=>{$(Q),f()},q=_==="edit";return Q0(PP,{open:P,onOpenChange:f,children:r0(fP,{className:"max-w-md",children:[r0($P,{children:[Q0(ZP,{children:q?Z("editRecurringEvent"):Z("deleteRecurringEvent")}),r0(HP,{children:['"',J,'"'," ",q?Z("editRecurringEventQuestion"):Z("deleteRecurringEventQuestion")]})]}),r0("div",{className:"space-y-3",children:[Q0(h,{variant:"outline",className:"w-full justify-start h-auto p-4",onClick:()=>X("this"),children:r0("div",{className:"text-left",children:[Q0("div",{className:"font-medium",children:Z("thisEvent")}),Q0("div",{className:"text-sm text-muted-foreground",children:q?Z("onlyChangeThis"):Z("onlyDeleteThis")})]})}),Q0(h,{variant:"outline",className:"w-full justify-start h-auto p-4",onClick:()=>X("following"),children:r0("div",{className:"text-left",children:[Q0("div",{className:"font-medium",children:Z("thisAndFollowingEvents")}),Q0("div",{className:"text-sm text-muted-foreground",children:q?Z("changeThisAndFuture"):Z("deleteThisAndFuture")})]})}),Q0(h,{variant:"outline",className:"w-full justify-start h-auto p-4",onClick:()=>X("all"),children:r0("div",{className:"text-left",children:[Q0("div",{className:"font-medium",children:Z("allEvents")}),Q0("div",{className:"text-sm text-muted-foreground",children:q?Z("changeEntireSeries"):Z("deleteEntireSeries")})]})})]}),Q0(IP,{children:Q0(h,{variant:"outline",onClick:f,children:Z("cancel")})})]})})}var g5=(P,f)=>{let{active:$,over:_}=P;if(!$||!_||!f)return null;let J=_.data.current?.type==="time-cell",{resourceId:Z,allDay:X}=_.data.current||{},q;if(J){let{date:G,hour:L=0,minute:A=0}=_.data.current;q=W(G).hour(L).minute(A)}else{let{date:G}=_.data.current;q=W(G)}let Q=f.end.diff(f.start,"second"),U=q.add(Q,"second");if(U.isSame(U.startOf("day")))U=U.subtract(1,"day").endOf("day");let N={start:q,end:U,resourceId:Z,allDay:J?!1:X??f.allDay};return{activeEvent:f,updates:N}};import{DragOverlay as B1}from"@dnd-kit/core";import{snapCenterToCursor as A1}from"@dnd-kit/modifiers";import{useImperativeHandle as V1,useState as W1}from"react";import{jsx as m5}from"react/jsx-runtime";var C5=({ref:P})=>{let[f,$]=W1(null);return V1(P,()=>({setActiveEvent:$})),m5(B1,{modifiers:[A1],children:f&&m5("div",{className:p("cursor-grab truncate rounded bg-amber-200 p-2 text-[10px] shadow-lg sm:text-xs w-20",f.backgroundColor||"bg-blue-500",f.color||"text-white"),children:f?.title})})};import{jsx as E5,jsxs as o5,Fragment as S1}from"react/jsx-runtime";function bP({children:P}){let f=k5(null),$=k5(null),{updateEvent:_,updateRecurringEvent:J,disableDragAndDrop:Z}=x((z)=>({updateEvent:z.updateEvent,updateRecurringEvent:z.updateRecurringEvent,disableDragAndDrop:z.disableDragAndDrop})),[X,q]=H1({isOpen:!1,event:null,updates:null}),Q=D5(O1,{activationConstraint:{distance:2}}),U=D5(M1,{activationConstraint:{delay:100,tolerance:5}}),N=I1(Q,U),G=(z,V)=>{if(!z||!z.id)return;if(!V||Object.keys(V).length===0)return;if(e0(z))q({isOpen:!0,event:z,updates:V});else _(z.id,V)},L=(z)=>{if(!X.event||!X.updates){q({isOpen:!1,event:null,updates:null});return}try{J(X.event,X.updates,{scope:z,eventDate:X.event.start})}catch{}finally{q({isOpen:!1,event:null,updates:null})}},A=()=>{q({isOpen:!1,event:null,updates:null})},K=(z)=>{let{active:V}=z;if(V.data.current?.type==="calendar-event")$.current?.setActiveEvent(V.data.current.event),f.current=V.data.current.event},Y=(z)=>{let V=g5(z,f.current);if(V){let{activeEvent:O,updates:I}=V;G(O,I)}f.current=null,$.current?.setActiveEvent(null)},B=(z)=>{f.current=null};if(Z)return P;return o5(S1,{children:[o5(F1,{sensors:N,onDragStart:K,onDragEnd:Y,onDragCancel:B,collisionDetection:R1,children:[P,E5(C5,{ref:$})]}),E5(LP,{isOpen:X.isOpen,onClose:A,onConfirm:L,operationType:"edit",eventTitle:X.event?.title||""})]})}import{useEffect as $f,useState as k0}from"react";import*as wP from"@radix-ui/react-checkbox";import{CheckIcon as T1}from"lucide-react";import{jsx as sP}from"react/jsx-runtime";function w0({className:P,...f}){return sP(wP.Root,{"data-slot":"checkbox",className:p("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),...f,children:sP(wP.Indicator,{"data-slot":"checkbox-indicator",className:"flex items-center justify-center text-current transition-none",children:sP(T1,{className:"size-3.5"})})})}import{PopoverClose as C1}from"@radix-ui/react-popover";import{Calendar as D1}from"lucide-react";import{useEffect as k1,useRef as E1,useState as o1}from"react";import{ChevronDownIcon as b1,ChevronLeftIcon as w1,ChevronRightIcon as h1}from"lucide-react";import*as hP from"react";import{DayPicker as g1,getDefaultClassNames as x5}from"react-day-picker";import{jsx as h0}from"react/jsx-runtime";function u5({className:P,classNames:f,showOutsideDays:$=!0,captionLayout:_="label",buttonVariant:J="ghost",formatters:Z,components:X,...q}){let Q=x5();return h0(g1,{showOutsideDays:$,className:p("bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,P),captionLayout:_,formatters:{formatMonthDropdown:(U)=>U.toLocaleString("default",{month:"short"}),...Z},classNames:{root:p("w-fit",Q.root),months:p("flex gap-4 flex-col md:flex-row relative",Q.months),month:p("flex flex-col w-full gap-4",Q.month),nav:p("flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",Q.nav),button_previous:p(MP({variant:J}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",Q.button_previous),button_next:p(MP({variant:J}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",Q.button_next),month_caption:p("flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)",Q.month_caption),dropdowns:p("w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5",Q.dropdowns),dropdown_root:p("relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md",Q.dropdown_root),dropdown:p("absolute bg-popover inset-0 opacity-0",Q.dropdown),caption_label:p("select-none font-medium",_==="label"?"text-sm":"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5",Q.caption_label),table:"w-full border-collapse",weekdays:p("flex",Q.weekdays),weekday:p("text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none",Q.weekday),week:p("flex w-full mt-2",Q.week),week_number_header:p("select-none w-(--cell-size)",Q.week_number_header),week_number:p("text-[0.8rem] select-none text-muted-foreground",Q.week_number),day:p("relative w-full h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none",q.showWeekNumber?"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md":"[&:first-child[data-selected=true]_button]:rounded-l-md",Q.day),range_start:p("rounded-l-md bg-accent",Q.range_start),range_middle:p("rounded-none",Q.range_middle),range_end:p("rounded-r-md bg-accent",Q.range_end),today:p("bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",Q.today),outside:p("text-muted-foreground aria-selected:text-muted-foreground",Q.outside),disabled:p("text-muted-foreground opacity-50",Q.disabled),hidden:p("invisible",Q.hidden),...f},components:{Root:({className:U,rootRef:N,...G})=>{return h0("div",{"data-slot":"calendar",ref:N,className:p(U),...G})},Chevron:({className:U,orientation:N,...G})=>{if(N==="left")return h0(w1,{className:p("size-4",U),...G});if(N==="right")return h0(h1,{className:p("size-4",U),...G});return h0(b1,{className:p("size-4",U),...G})},DayButton:m1,WeekNumber:({children:U,...N})=>{return h0("td",{...N,children:h0("div",{className:"flex size-(--cell-size) items-center justify-center text-center",children:U})})},...X},...q})}function m1({className:P,day:f,modifiers:$,..._}){let J=x5(),Z=hP.useRef(null);return hP.useEffect(()=>{if($.focused)Z.current?.focus()},[$.focused]),h0(h,{ref:Z,variant:"ghost",size:"icon","data-day":f.date.toLocaleDateString(),"data-selected-single":$.selected&&!$.range_start&&!$.range_end&&!$.range_middle,"data-range-start":$.range_start,"data-range-end":$.range_end,"data-range-middle":$.range_middle,className:p("data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70",J.day,P),..._})}import*as O0 from"@radix-ui/react-popover";import{jsx as gP}from"react/jsx-runtime";function g0({...P}){return gP(O0.Root,{"data-slot":"popover",...P})}function m0({...P}){return gP(O0.Trigger,{"data-slot":"popover-trigger",...P})}function C0({className:P,align:f="center",sideOffset:$=4,..._}){return gP(O0.Portal,{children:gP(O0.Content,{"data-slot":"popover-content",align:f,sideOffset:$,className:p("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),..._})})}import{jsx as QP,jsxs as eP}from"react/jsx-runtime";function BP({date:P,closeOnSelect:f,onChange:$,label:_="Pick a date",className:J,disabled:Z}){let X=E1(null),[q,Q]=o1(P);k1(()=>{Q(P)},[P]);let U=(N)=>{if(Q(N),f)X.current?.click();$?.(N)};return QP("div",{className:J,children:eP(g0,{children:[QP(m0,{asChild:!0,children:eP(h,{variant:"outline","data-empty":!P,className:p("data-[empty=true]:text-muted-foreground w-full justify-start text-left font-normal"),children:[QP(D1,{}),q?W(q).format("MMM D, YYYY"):QP("span",{children:_})]})}),eP(C0,{className:"w-auto p-0",align:"start",children:[QP(C1,{ref:X}),QP(u5,{mode:"single",selected:q,defaultMonth:q,onSelect:U,captionLayout:"dropdown",disabled:Z})]})]})})}import{jsx as x1}from"react/jsx-runtime";function R0({className:P,type:f,...$}){return x1("input",{type:f,"data-slot":"input",className:p("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),...$})}import*as i5 from"@radix-ui/react-label";import{jsx as u1}from"react/jsx-runtime";function r({className:P,...f}){return u1(i5.Root,{"data-slot":"label",className:p("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),...f})}import*as W0 from"@radix-ui/react-scroll-area";import{jsx as AP,jsxs as i1}from"react/jsx-runtime";function _0({className:P,children:f,viewPortProps:$,..._}){return i1(W0.Root,{"data-slot":"scroll-area",className:p("relative",P),..._,children:[AP(W0.Viewport,{...$,"data-slot":"scroll-area-viewport",className:p("focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",$?.className),children:f}),AP(Y0,{}),AP(W0.Corner,{})]})}function Y0({className:P,orientation:f="vertical",...$}){return AP(W0.ScrollAreaScrollbar,{"data-slot":"scroll-area-scrollbar",orientation:f,className:p("flex touch-none p-px transition-colors select-none",f==="vertical"&&"h-full w-2.5 border-l border-l-transparent",f==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent",P),...$,children:AP(W0.ScrollAreaThumb,{"data-slot":"scroll-area-thumb",className:"bg-border relative flex-1 rounded-full"})})}import{Clock as c1}from"lucide-react";import{useEffect as y1,useRef as c5,useState as P5}from"react";import{useMemo as v1}from"react";function v5({timeFormat:P="12-hour",minTime:f="00:00",maxTime:$="23:45"}){return{timeOptions:v1(()=>{let Z=[],[X,q]=f.split(":").map(Number),[Q,U]=$.split(":").map(Number),N=X*60+q,G=Q*60+U;for(let L=N;L<=G;L+=15){let A=Math.floor(L/60),K=L%60,Y=`${A.toString().padStart(2,"0")}:${K.toString().padStart(2,"0")}`;Z.push(Y)}return Z},[f,$]),formatTime:(Z)=>{let[X,q]=Z.split(":").map(Number),Q=X>=12?"PM":"AM",U=X===0?12:X>12?X-12:X;if(P==="24-hour")return`${X.toString().padStart(2,"0")}:${q.toString().padStart(2,"0")}`;return`${U}:${q.toString().padStart(2,"0")} ${Q}`}}}import{jsx as D0,jsxs as f5}from"react/jsx-runtime";var r1=(P)=>{P.stopPropagation()};function $5({value:P,onChange:f,minTime:$="00:00",maxTime:_="23:45",timeFormat:J="12-hour",placeholder:Z="Select time...",className:X,disabled:q=!1,name:Q}){let[U,N]=P5(!1),[G,L]=P5(""),A=c5(null),K=c5(null),[Y,B]=P5(0),{timeOptions:z,formatTime:V}=v5({timeFormat:J,minTime:$,maxTime:_}),O=z.filter((R)=>{return V(R).toLowerCase().includes(G.toLowerCase())}),I=(R)=>{f(R),N(!1),L("")};y1(()=>{if(U){if(K.current)B(K.current.offsetWidth);setTimeout(()=>{A.current?.focus()},0)}},[U]);let F=P?V(P):Z;return f5(g0,{open:U,onOpenChange:N,children:[D0(m0,{asChild:!0,children:f5(h,{ref:K,variant:"outline",role:"combobox","aria-controls":"time-picker-listbox","aria-expanded":U,className:p("w-full justify-start",X),disabled:q,"data-testid":`time-picker-${Q}`,children:[D0(c1,{className:"mr-2 h-4 w-4"}),F]})}),f5(C0,{className:"p-0",align:"start",style:{width:Y},children:[D0("div",{className:"p-2 border-b",children:D0(R0,{ref:A,placeholder:"Search time...",value:G,onChange:(R)=>L(R.target.value),className:"h-8"})}),D0(_0,{className:"h-[200px]",onWheel:r1,children:D0("div",{className:"p-1",children:O.length===0?D0("div",{className:"py-6 text-center text-sm text-muted-foreground",children:"N/A"}):O.map((R)=>{let b=V(R);return D0("button",{type:"button",onClick:()=>I(R),className:p("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"),children:b},R)})})})]})]})}import{useEffect as n1,useMemo as a1,useState as P2}from"react";import{RRule as $0}from"rrule";import{jsx as mP}from"react/jsx-runtime";function y5({className:P,...f}){return mP("div",{"data-slot":"card",className:p("text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm",P),...f})}function r5({className:P,...f}){return mP("div",{"data-slot":"card-header",className:p("@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),...f})}function j5({className:P,...f}){return mP("div",{"data-slot":"card-title",className:p("leading-none font-semibold",P),...f})}function l5({className:P,...f}){return mP("div",{"data-slot":"card-content",className:p("p-4 pt-0",P),...f})}import*as k from"@radix-ui/react-select";import{CheckIcon as j1,ChevronDownIcon as d5,ChevronUpIcon as l1}from"lucide-react";import{jsx as e,jsxs as Z5}from"react/jsx-runtime";function t5({...P}){return e(k.Root,{"data-slot":"select",...P})}function n5({...P}){return e(k.Value,{"data-slot":"select-value",...P})}function a5({className:P,size:f="default",children:$,..._}){return Z5(k.Trigger,{"data-slot":"select-trigger","data-size":f,className:p("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),..._,children:[$,e(k.Icon,{asChild:!0,children:e(d5,{className:"size-4 opacity-50"})})]})}function s5({className:P,children:f,position:$="popper",align:_="center",...J}){return e(k.Portal,{children:Z5(k.Content,{"data-slot":"select-content",className:p("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",$==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",P),position:$,align:_,...J,children:[e(d1,{}),e(k.Viewport,{className:p("p-1",$==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:f}),e(t1,{})]})})}function e5({className:P,children:f,...$}){return Z5(k.Item,{"data-slot":"select-item",className:p("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),...$,children:[e("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:e(k.ItemIndicator,{children:e(j1,{className:"size-4"})})}),e(k.ItemText,{children:f})]})}function d1({className:P,...f}){return e(k.ScrollUpButton,{"data-slot":"select-scroll-up-button",className:p("flex cursor-default items-center justify-center py-1",P),...f,children:e(l1,{className:"size-4"})})}function t1({className:P,...f}){return e(k.ScrollDownButton,{"data-slot":"select-scroll-down-button",className:p("flex cursor-default items-center justify-center py-1",P),...f,children:e(d5,{className:"size-4"})})}import{jsx as E,jsxs as f0}from"react/jsx-runtime";var _5={DAILY:$0.DAILY,WEEKLY:$0.WEEKLY,MONTHLY:$0.MONTHLY,YEARLY:$0.YEARLY},s1=Object.fromEntries(Object.entries(_5).map(([P,f])=>[f,P])),f2=[$0.SU,$0.MO,$0.TU,$0.WE,$0.TH,$0.FR,$0.SA],e1=["sun","mon","tue","wed","thu","fri","sat"],$2=(P)=>Math.max(1,Number.parseInt(P,10)||1),Pf=(P,f)=>{if(!P)return f("customRecurrence");try{let $=new $0(P).toText();return $&&!$.toLowerCase().includes("error")?$.charAt(0).toUpperCase()+$.slice(1):f("customRecurrence")}catch{return f("customRecurrence")}},Z2=({value:P,onChange:f})=>{let{t:$}=x((Y)=>({t:Y.t})),[_,J]=P2(!!P),[Z,X]=P2(()=>P||null),q=a1(()=>e1.map((Y,B)=>({value:f2[B],label:$(Y)})),[$]);n1(()=>{if(J(!!P),P)X(P)},[P]);let Q=(Y)=>{if(!Z)return;let B={...Z,...Y};X(B),f(_?B:null)},U=(Y)=>{if(J(Y),!Y){f(null);return}if(Z){f(Z);return}let B={freq:$0.DAILY,interval:1};X(B),f(B)},N=(Y)=>{let B=Z?.byweekday||[],z=f2[Y],V=B.includes(z)?B.filter((O)=>O!==z):[...B,z];Q({byweekday:V.length?V:void 0})},G=(Y)=>{let B={count:void 0,until:void 0};if(Y==="count")B.count=Z?.count||1;if(Y==="until")B.until=Z?.until||W().add(1,"month").endOf("day").toDate();Q(B)},L=Z?.until?"until":Z?.count?"count":"never",A=s1[Z?.freq??$0.DAILY]||"DAILY",K=Array.isArray(Z?.byweekday)?Z.byweekday:Z?.byweekday?[Z.byweekday]:[];return f0(y5,{"data-testid":"recurrence-editor",children:[f0(r5,{className:"pb-3",children:[f0("div",{className:"flex items-center space-x-2",children:[E(w0,{id:"recurring",checked:_,onCheckedChange:U,"data-testid":"toggle-recurrence"}),E(j5,{className:"text-sm",children:$("repeat")})]}),_&&P&&E("p",{className:"text-xs text-muted-foreground",children:Pf(P,$)})]}),_&&E(l5,{className:"pt-0",children:f0("div",{className:"space-y-4",children:[f0("div",{className:"grid grid-cols-2 gap-4",children:[f0("div",{children:[E(r,{htmlFor:"frequency",className:"text-xs",children:$("repeats")}),f0(t5,{value:A,onValueChange:(Y)=>Q({freq:_5[Y]}),children:[E(a5,{id:"frequency",className:"h-8","data-testid":"frequency-select",children:E(n5,{})}),E(s5,{children:Object.keys(_5).map((Y)=>E(e5,{value:Y,children:$(Y.toLowerCase())},Y))})]})]}),f0("div",{children:[E(r,{htmlFor:"interval",className:"text-xs",children:$("every")}),E(R0,{id:"interval",type:"number",min:"1",value:Z?.interval||1,onChange:(Y)=>Q({interval:$2(Y.target.value)}),className:"h-8"})]})]}),Z?.freq===$0.WEEKLY&&f0("div",{children:[E(r,{className:"text-xs",children:$("repeatOn")}),E("div",{className:"flex flex-wrap gap-1 mt-1",children:q.map((Y,B)=>f0("div",{className:"flex items-center space-x-1",children:[E(w0,{id:`day-${B}`,checked:K.includes(Y.value),onCheckedChange:()=>N(B)}),E(r,{htmlFor:`day-${B}`,className:"text-xs cursor-pointer",children:Y.label})]},Y.label))})]}),f0("div",{children:[E(r,{className:"text-xs",children:$("ends")}),f0("div",{className:"space-y-2 mt-1",children:[f0("div",{className:"flex items-center space-x-2",children:[E(w0,{id:"never",checked:L==="never",onCheckedChange:()=>G("never")}),E(r,{htmlFor:"never",className:"text-xs",children:$("never")})]}),f0("div",{className:"flex items-center space-x-2",children:[E(w0,{id:"after",checked:L==="count",onCheckedChange:()=>G("count")}),E(r,{htmlFor:"after",className:"text-xs",children:$("after")}),L==="count"&&E(R0,{type:"number",min:"1",value:Z?.count||1,onChange:(Y)=>Q({count:$2(Y.target.value)}),className:"h-6 w-16 text-xs","data-testid":"count-input"}),E("span",{className:"text-xs",children:$("occurrences")})]}),f0("div",{className:"flex items-center space-x-2",children:[E(w0,{id:"on",checked:L==="until",onCheckedChange:()=>G("until")}),E(r,{htmlFor:"on",className:"text-xs",children:$("on")}),L==="until"&&E(BP,{date:Z?.until,onChange:(Y)=>Q({until:Y?W(Y).endOf("day").toDate():void 0}),className:"h-6"})]})]})]})]})})]})};import{useCallback as CP,useState as ff}from"react";function _2(P){let{updateRecurringEvent:f,deleteRecurringEvent:$}=x((U)=>({updateRecurringEvent:U.updateRecurringEvent,deleteRecurringEvent:U.deleteRecurringEvent})),[_,J]=ff({isOpen:!1,operationType:"edit",event:null}),Z=CP((U,N)=>{J({isOpen:!0,operationType:"edit",event:U,updates:N,onConfirm:(G)=>{f(U,N,{scope:G,eventDate:U.start})}})},[f]),X=CP((U)=>{J({isOpen:!0,operationType:"delete",event:U,onConfirm:(N)=>{$(U,{scope:N,eventDate:U.start})}})},[$]),q=CP(()=>{J({isOpen:!1,operationType:"edit",event:null})},[]),Q=CP((U)=>{if(_.onConfirm)_.onConfirm(U);q(),P?.()},[_,q,P]);return{dialogState:_,openEditDialog:Z,openDeleteDialog:X,closeDialog:q,handleConfirm:Q}}import{jsx as C,jsxs as l,Fragment as Xf}from"react/jsx-runtime";var Zf=["blue","green","purple","red","yellow","pink","indigo","amber","emerald","sky","violet","rose","teal","orange"],X2=Zf.map((P)=>({value:`bg-${P}-100 text-${P}-800`,label:P.charAt(0).toUpperCase()+P.slice(1)})),J2=(P,f,$)=>{let[_,J]=f.split(":").map(Number),Z=W(P).hour(_).minute(J);return $?Z.hour(0).minute(0):Z},_f=(P,f,$)=>{let[_,J]=f.split(":").map(Number),Z=W(P).hour(_).minute(J);return $?Z.hour(23).minute(59):Z},DP=({selectedEvent:P,onClose:f,onUpdate:$,onDelete:_,onAdd:J})=>{let{dialogState:Z,openEditDialog:X,openDeleteDialog:q,closeDialog:Q,handleConfirm:U}=_2(f),{findParentRecurringEvent:N,t:G,businessHours:L,timeFormat:A}=x((S)=>({findParentRecurringEvent:S.findParentRecurringEvent,t:S.t,businessHours:S.businessHours,timeFormat:S.timeFormat})),K=P?.start??W(),Y=P?.end??W().add(1,"hour"),B=P?N(P):null,[z,V]=k0(K.toDate()),[O,I]=k0(Y.toDate()),[F,R]=k0(P?.allDay||!1),[b,u]=k0(P?.color||X2[0].value),[D,i]=k0(K.format("HH:mm")),[v,j]=k0(Y.format("HH:mm")),[o,T]=k0({title:P?.title||"",description:P?.description||"",location:P?.location||""}),[q0,n]=k0(()=>{return P?.rrule||B?.rrule||null}),K0=(S)=>{if(V(S),S&&W(S).isAfter(W(O)))I(S)},Z0=(S)=>{if(I(S),S&&W(S).isBefore(W(z)))V(S)},g=(S)=>{if(i(S),W(z).isSame(W(O),"day")&&S>v)j(S)},d0=(S)=>{if(j(S),W(z).isSame(W(O),"day")&&S<D)i(S)},T0=(S)=>{let{name:X0,value:F0}=S.target;T((M)=>({...M,[X0]:F0}))};$f(()=>{if(F)j("23:59")},[F]);let t0=(S)=>{S.preventDefault();let X0=J2(z,D,F),F0=_f(O,v,F),M={id:P?.id||W().format("YYYYMMDDHHmmss"),title:o.title,start:X0,end:F0,resourceId:P?.resourceId,description:o.description,location:o.location,allDay:F,color:b,rrule:q0||void 0};if(P?.id&&e0(P)){X(P,{title:o.title,start:X0,end:F0,description:o.description,location:o.location,allDay:F,color:b,rrule:q0||void 0});return}if(P?.id)$?.(M);else J?.(M);f()},n0=()=>{if(P?.id){if(e0(P)){q(P);return}_?.(P),f()}},a0=(S)=>{if(!S){n(null);return}let X0=J2(z,D,F);n({...S,dtstart:X0.toDate()})},i0=L?(S)=>{let X0=W(S).format("dddd").toLowerCase();return!L.daysOfWeek.includes(X0)}:void 0,v0=L?`${L.startTime.toString().padStart(2,"0")}:00`:"00:00",c0=L?`${(L.endTime-1).toString().padStart(2,"0")}:45`:"23:59";return l(Xf,{children:[C(PP,{open:!0,onOpenChange:f,children:l(fP,{className:"flex flex-col h-[90vh] w-[90vw] max-w-[500px] p-4 sm:p-6 overflow-hidden gap-0",children:[l($P,{className:"mb-2 sm:mb-4 shrink-0",children:[C(ZP,{className:"text-base sm:text-lg",children:P?.id?G("editEvent"):G("createEvent")}),C(HP,{className:"text-xs sm:text-sm",children:P?.id?G("editEventDetails"):G("addNewEvent")})]}),l("form",{onSubmit:t0,className:"flex flex-col flex-1 min-h-0",children:[C(_0,{className:"flex-1 min-h-0",children:l("div",{className:"grid gap-3 sm:gap-4 p-1",children:[l("div",{className:"grid gap-2",children:[C(r,{htmlFor:"title",className:"text-xs sm:text-sm",children:G("title")}),C(R0,{id:"title",name:"title",value:o.title,onChange:T0,placeholder:G("eventTitlePlaceholder"),required:!0,className:"h-8 text-sm sm:h-9"})]}),l("div",{className:"grid gap-1 sm:gap-2",children:[C(r,{htmlFor:"description",className:"text-xs sm:text-sm",children:G("description")}),C(R0,{id:"description",name:"description",value:o.description,onChange:T0,placeholder:G("eventDescriptionPlaceholder"),className:"h-8 text-sm sm:h-9"})]}),l("div",{className:"flex items-center space-x-2",children:[C(w0,{id:"allDay",checked:F,onCheckedChange:(S)=>R(S===!0)}),C(r,{htmlFor:"allDay",className:"text-xs sm:text-sm",children:G("allDay")})]}),l("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[l("div",{children:[C(r,{className:"text-xs sm:text-sm",children:G("startDate")}),C(BP,{date:z,onChange:K0,className:"mt-1",closeOnSelect:!0,disabled:i0})]}),l("div",{children:[C(r,{className:"text-xs sm:text-sm",children:G("endDate")}),C(BP,{date:O,onChange:Z0,className:"mt-1",closeOnSelect:!0,disabled:i0})]})]}),!F&&l("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[l("div",{children:[C(r,{className:"text-xs sm:text-sm",children:G("startTime")}),C($5,{value:D,onChange:g,minTime:v0,maxTime:c0,timeFormat:A,className:"mt-1 h-8 text-sm sm:h-9",name:"start-time"})]}),l("div",{children:[C(r,{className:"text-xs sm:text-sm",children:G("endTime")}),C($5,{value:v,onChange:d0,minTime:v0,maxTime:c0,timeFormat:A,className:"mt-1 h-8 text-sm sm:h-9",name:"end-time"})]})]}),l("div",{className:"grid gap-1 sm:gap-2",children:[C(r,{className:"text-xs sm:text-sm",children:G("color")}),C("div",{className:"flex flex-wrap gap-2",children:X2.map((S)=>C(h,{variant:"ghost",type:"button",className:p(`${S.value} h-6 w-6 rounded-full sm:h-8 sm:w-8`,b===S.value&&"ring-2 ring-black ring-offset-1 sm:ring-offset-2"),onClick:()=>u(S.value),"aria-label":S.label},S.value))})]}),l("div",{className:"grid gap-1 sm:gap-2",children:[C(r,{htmlFor:"location",className:"text-xs sm:text-sm",children:G("location")}),C(R0,{id:"location",name:"location",value:o.location,onChange:T0,placeholder:G("eventLocationPlaceholder"),className:"h-8 text-sm sm:h-9"})]}),C(Z2,{value:q0,onChange:a0})]})}),l(IP,{className:"mt-4 shrink-0 flex flex-col-reverse gap-2 sm:flex-row sm:gap-0",children:[P?.id&&C(h,{type:"button",variant:"destructive",onClick:n0,className:"w-full sm:mr-auto sm:w-auto",size:"sm",children:G("delete")}),l("div",{className:"flex w-full gap-2 sm:w-auto",children:[C(h,{type:"button",variant:"outline",onClick:f,className:"flex-1 sm:flex-none",size:"sm",children:G("cancel")}),C(h,{type:"submit",className:"flex-1 sm:flex-none",size:"sm",children:P?.id?G("update"):G("create")})]})]})]})]})}),C(LP,{isOpen:Z.isOpen,onClose:Q,onConfirm:U,operationType:Z.operationType,eventTitle:Z.event?.title||""})]})};import{Calendar as Mf,Download as If,Menu as Hf,Plus as Sf}from"lucide-react";import{useState as Tf}from"react";import{RRule as Jf}from"rrule";var X5=`\r
|
|
2
|
-
`,
|
|
3
|
-
`,"\\n").replaceAll("\r","")},
|
|
4
|
-
`).find(($)=>$.startsWith("RRULE:"))||""}catch{return""}},Uf=(P)=>{let f=W().utc().format("YYYYMMDD[T]HHmmss[Z]"),$=P.allDay?";VALUE=DATE":"",_=P.rrule?qf(P.rrule):"",J=P.exdates?.length?P.exdates.map((q)=>kP(W(q),P.allDay)).join(","):null,Z=P.recurrenceId?kP(W(P.recurrenceId),P.allDay):null;return["BEGIN:VEVENT",`UID:${Q2(P)}`,`DTSTART${$}:${kP(P.start,P.allDay)}`,`DTEND${$}:${kP(P.end,P.allDay)}`,`SUMMARY:${EP(P.title)}`,P.description&&`DESCRIPTION:${EP(P.description)}`,P.location&&`LOCATION:${EP(P.location)}`,_,J&&`EXDATE:${J}`,Z&&`RECURRENCE-ID:${Z}`,`DTSTAMP:${f}`,`CREATED:${f}`,`LAST-MODIFIED:${f}`,"STATUS:CONFIRMED","SEQUENCE:0","TRANSP:OPAQUE","END:VEVENT"].filter(Boolean).join(X5)},Yf=(P)=>{let f=new Set;return P.filter(($)=>{let _=Q2($),J=$.rrule&&!$.recurrenceId,Z=$.recurrenceId&&!$.rrule;if(J)return f.add(_),!0;if(Z)return!0;return!$.rrule&&!$.recurrenceId&&!f.has(_)})},pf=(P,f="ilamy Calendar")=>{let $=EP(f),_=Yf(P).map(Uf);return["BEGIN:VCALENDAR","VERSION:2.0","PRODID:-//ilamy//ilamy Calendar//EN","CALSCALE:GREGORIAN","METHOD:PUBLISH",`X-WR-CALNAME:${$}`,`X-WR-CALDESC:Exported from ${$}`,Qf,..._,"END:VCALENDAR"].join(X5)},q2=(P,f="calendar.ics",$="ilamy Calendar")=>{let _=new Blob([pf(P,$)],{type:"text/calendar;charset=utf-8"}),J=URL.createObjectURL(_),Z=f.endsWith(".ics")?f:`${f}.ics`,X=document.createElement("a");X.href=J,X.download=Z,document.body.append(X),X.click(),X.remove(),URL.revokeObjectURL(J)};import{ChevronDown as zf}from"lucide-react";import{AnimatePresence as Gf,motion as Kf}from"motion/react";import{useMemo as Nf,useState as Lf}from"react";import{jsx as d,jsxs as xP,Fragment as oP}from"react/jsx-runtime";var Bf=["january","february","march","april","may","june","july","august","september","october","november","december"],Af={initial:{opacity:0,y:10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10}},Vf=()=>{let{currentDate:P,view:f,setCurrentDate:$,t:_,firstDayOfWeek:J}=x((z)=>({currentDate:z.currentDate,view:z.view,setCurrentDate:z.setCurrentDate,t:z.t,firstDayOfWeek:z.firstDayOfWeek})),[Z,X]=Lf(null),q=Nf(()=>Bf.map((z)=>_(z)),[_]),Q=P.year(),U=Array.from({length:11},(z,V)=>Q-5+V),N=a(P,J),G=(z)=>{$(z),X(null)},L=()=>d(oP,{children:q.map((z,V)=>d(h,{variant:"ghost",className:p("justify-start font-normal",P.month()===V&&"bg-primary/10"),onClick:()=>G(P.month(V)),children:z},z))}),A=()=>d(oP,{children:U.map((z)=>d(h,{variant:"ghost",className:p("justify-start font-normal",P.year()===z&&"bg-primary/10"),onClick:()=>G(P.year(z)),children:z},z))}),K=()=>d(oP,{children:Array.from({length:7},(z,V)=>{let O=P.subtract(3,"week").add(V,"week"),I=a(O,J),F=I[0],R=I[6],b=O.isSame(P,"week"),u=F.month()!==R.month();return d(h,{variant:"ghost",className:p("justify-start font-normal",b&&"bg-primary/10"),onClick:()=>G(F),children:xP("div",{className:"flex w-full items-center justify-between",children:[d("span",{children:`${F.format("MMM D")} - ${R.format("D")}`}),u&&d("span",{className:"ml-0.5 text-xs opacity-70",children:`${F.format("MMM")}-${R.format("MMM")}`})]})},F.format("YYYY-MM-DD"))})}),Y=()=>{let z=P.startOf("month"),V=P.daysInMonth();return d(oP,{children:Array.from({length:V},(O,I)=>{let F=z.date(I+1),R=F.isSame(P,"day"),b=F.isSame(W(),"day");return d(h,{variant:"ghost",className:p("justify-start font-normal",R&&"bg-primary/10"),onClick:()=>G(F),children:xP("div",{className:"flex w-full items-center justify-between",children:[d("span",{children:F.format("dddd, MMM D")}),b&&d("span",{className:"bg-primary text-primary-foreground rounded-sm px-1! text-xs",children:_("today")})]})},F.format("YYYY-MM-DD"))})})};return[{id:"month",hidden:f==="year",title:P.format("MMMM"),render:L},{id:"year",hidden:!1,title:P.format("YYYY"),render:A},{id:"week",hidden:f!=="week",title:`${N[0].format("MMM D")} - ${N[6].format("MMM D")}`,render:K},{id:"day",hidden:f!=="day",title:P.format("dddd, D"),render:Y}].filter((z)=>!z.hidden).map((z)=>xP(g0,{open:Z===z.id,onOpenChange:(V)=>X(V?z.id:null),children:[d(m0,{asChild:!0,children:xP(h,{variant:"ghost",className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",children:[d(Gf,{mode:"wait",children:d(Kf.span,{initial:"initial",animate:"animate",exit:"exit",variants:Af,transition:{duration:0.25,ease:"easeInOut"},"data-testid":"calendar-month-display",children:z.title},`${z.id}-${P.format("YYYY-MM-DD")}`)}),d(zf,{className:"h-4 w-4"})]})}),d(C0,{className:"w-40 p-0",children:d("div",{className:"flex max-h-60 flex-col overflow-auto",children:z.render()})})]},z.id))},U2=Vf;import{ChevronLeft as Wf,ChevronRight as Ff}from"lucide-react";import{jsx as qP,jsxs as Rf}from"react/jsx-runtime";var Of=({currentView:P,onChange:f,variant:$="default",size:_="sm",className:J,onToday:Z,onNext:X,onPrevious:q})=>{let{t:Q}=x((L)=>({t:L.t})),U=$==="grid",N=(L)=>{return p(U?"w-full":"",P===L&&"bg-primary/80")},G=(L)=>{return P===L?"default":"outline"};return Rf("div",{className:p(U?"grid grid-cols-2 gap-2":"flex gap-1",J),children:[qP(h,{onClick:q,variant:"outline",size:_,children:qP(Wf,{className:"h-4 w-4"})}),qP(h,{onClick:X,variant:"outline",size:_,children:qP(Ff,{className:"h-4 w-4"})}),["day","week","month","year"].map((L)=>{return qP(h,{onClick:()=>f(L),variant:G(L),size:_,className:N(L),children:Q(L)},L)}),qP(h,{onClick:Z,variant:"outline",size:_,children:Q("today")})]})},J5=Of;import{jsx as t,jsxs as M0}from"react/jsx-runtime";var bf=({className:P=""})=>{let{view:f,setView:$,nextPeriod:_,prevPeriod:J,today:Z,openEventForm:X,headerComponent:q,headerClassName:Q,rawEvents:U,t:N}=x((z)=>({view:z.view,setView:z.setView,nextPeriod:z.nextPeriod,prevPeriod:z.prevPeriod,today:z.today,openEventForm:z.openEventForm,headerComponent:z.headerComponent,headerClassName:z.headerClassName,rawEvents:z.rawEvents,t:z.t})),[G,L]=Tf(!1),A=()=>L(!1),K=()=>{let z=`ilamy-calendar-${new Date().toISOString().split("T")[0]}.ics`;q2(U,z,"ilamy Calendar"),A()},Y=()=>M0(h,{onClick:()=>X(),variant:"default",size:"sm",className:"flex items-center gap-1",children:[t(Sf,{className:"h-4 w-4"}),t("span",{className:"hidden @4xl:inline",children:N("new")})]}),B=({fullWidth:z=!1})=>M0(h,{onClick:K,variant:"outline",size:"sm",className:p("flex items-center gap-1",z&&"w-full gap-2"),children:[t(If,{className:"h-4 w-4"}),z?`${N("export")} Calendar (.ics)`:t("span",{className:"hidden @4xl/base-header:inline",children:N("export")})]});if(q)return q;return t("div",{className:"@container/base-header w-full","data-testid":"calendar-header",children:M0("div",{className:p("flex justify-center @2xl/base-header:justify-between flex-wrap items-center gap-2 border-b",P,Q),children:[M0("div",{className:"flex flex-wrap items-center justify-center gap-1 @2xl/base-header:justify-start",children:[t(Mf,{className:"h-5 w-5"}),t(U2,{})]}),M0("div",{className:"flex flex-wrap justify-start @xl/base-header:justify-center gap-1 @4xl/base-header:justify-end overflow-x-auto",children:[M0("div",{className:"hidden @md/base-header:flex items-center justify-start gap-1",children:[t(J5,{currentView:f,onChange:$,onToday:Z,onNext:_,onPrevious:J,variant:"default",className:"justify-end"}),t(Y,{}),t(B,{})]}),M0("div",{className:"flex items-center justify-end gap-1 @md/base-header:hidden",children:[t(Y,{}),M0(g0,{open:G,onOpenChange:L,children:[t(m0,{asChild:!0,children:t(h,{variant:"outline",size:"sm",children:t(Hf,{className:"h-4 w-4"})})}),t(C0,{align:"end",className:"w-[240px] p-2",children:M0("div",{className:"space-y-2",children:[t(J5,{currentView:f,onChange:(z)=>{$(z),A()},onToday:()=>{Z(),A()},onNext:()=>{_(),A()},onPrevious:()=>{J(),A()},variant:"grid"}),t("div",{className:"pt-2 border-t",children:t(B,{fullWidth:!0})})]})})]})]})]})]})})},VP=bf;import{Fragment as nf}from"react";import{useDroppable as wf}from"@dnd-kit/core";import{jsx as hf}from"react/jsx-runtime";function p0({id:P,type:f,date:$,hour:_,minute:J,resourceId:Z,allDay:X,children:q,className:Q,style:U,"data-testid":N,disabled:G=!1}){let{onCellClick:L,disableDragAndDrop:A,disableCellClick:K,classesOverride:Y}=x((O)=>({onCellClick:O.onCellClick,disableDragAndDrop:O.disableDragAndDrop,disableCellClick:O.disableCellClick,classesOverride:O.classesOverride})),{isOver:B,setNodeRef:z}=wf({id:P,data:{type:f,date:$,hour:_,minute:J,resourceId:Z,allDay:X},disabled:A||G}),V=(O)=>{if(O.stopPropagation(),K||G)return;let I=$.hour(_??0).minute(J??0),F=I.clone();if(_!==void 0&&J!==void 0)F=F.hour(_).minute(J+15);else if(_!==void 0)F=F.hour(_+1).minute(0);else F=F.hour(23).minute(59);L({start:I,end:F,resourceId:Z})};return hf("div",{ref:z,"data-testid":N,className:p(Q,B&&!A&&!G&&"bg-accent",K||G?"cursor-default":"cursor-pointer",G&&(Y?.disabledCell||I5)),onClick:V,style:U,children:q})}var Y2={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6},p2=(P,f)=>{if(!f)return;if(!Array.isArray(f))return f;let $=P.day();return f.find((_)=>{if(!_.daysOfWeek)return!1;return _.daysOfWeek.some((J)=>Y2[J]===$)})},gf=(P,f)=>{if(!f)return!0;let $=p2(P,f);if(!$)return!1;if($.daysOfWeek)return $.daysOfWeek.some((_)=>Y2[_]===P.day());return!0},z0=({date:P,hour:f,minute:$=0,businessHours:_})=>{if(!gf(P,_))return!1;if(!_)return!0;if(f===void 0)return!0;let J=p2(P,_);if(!J)return!1;let Z=J.startTime??9,X=J.endTime??17,q=f*60+$,Q=Z*60,U=X*60;if(q<Q||q>=U)return!1;return!0};import{memo as vf}from"react";import{useDraggable as mf}from"@dnd-kit/core";import{AnimatePresence as Cf,motion as Df}from"motion/react";import{memo as kf}from"react";import{jsx as UP,jsxs as xf}from"react/jsx-runtime";var Ef=(P,f)=>{if(P&&f)return"rounded-none";if(P)return"rounded-r-md rounded-l-none";if(f)return"rounded-l-md rounded-r-none";return"rounded-md"};function of({elementId:P,event:f,className:$,style:_,disableDrag:J=!1}){let{onEventClick:Z,renderEvent:X,disableEventClick:q,disableDragAndDrop:Q}=x((K)=>({onEventClick:K.onEventClick,renderEvent:K.renderEvent,disableEventClick:K.disableEventClick,disableDragAndDrop:K.disableDragAndDrop})),{attributes:U,listeners:N,setNodeRef:G,isDragging:L}=mf({id:P,data:{event:f,type:"calendar-event"},disabled:J||Q}),A=()=>{let K=f,Y=K.isTruncatedStart,B=K.isTruncatedEnd;return xf("div",{className:p(f.backgroundColor||"bg-blue-500",f.color||"text-white","h-full w-full px-1 border-[1.5px] border-card text-left overflow-clip relative",Ef(Y,B)),style:{backgroundColor:f.backgroundColor,color:f.color},children:[Y&&UP("div",{className:"absolute left-0 top-0 bottom-0 w-0.5 bg-foreground/25"}),UP("p",{className:p("text-[10px] font-semibold sm:text-xs mt-0.5",Y&&"pl-1",B&&"pr-1"),children:f.title}),B&&UP("div",{className:"absolute right-0 top-0 bottom-0 w-0.5 bg-foreground/25"})]})};return UP(Cf,{mode:"wait",children:UP(Df.div,{ref:G,...U,...N,initial:{opacity:0,y:-50},animate:{opacity:1,y:0},exit:{opacity:0,y:-50},layout:!0,layoutId:P,transition:{duration:0.4,ease:"easeInOut"},className:p("truncate h-full w-full",J||Q?q?"cursor-default":"cursor-pointer":"cursor-grab",L&&!(J||Q)&&"cursor-grabbing shadow-lg",$),style:_,onClick:(K)=>{K.stopPropagation(),Z(f)},children:X?X(f):UP(A,{})},P)})}var E0=kf(of,(P,f)=>{return P.elementId===f.elementId&&P.disableDrag===f.disableDrag&&P.className===f.className&&P.event===f.event});import{useMemo as uf}from"react";var uP=({days:P,events:f,dayMaxEvents:$,dayNumberHeight:_=M5,gridType:J="day",eventSpacing:Z=b0})=>{let X=P[0].startOf("day"),q=P.at(-1).endOf("day"),Q=P.length,U=f.filter((Y)=>Y.end.diff(Y.start,J)>0),N=f.filter((Y)=>Y.end.diff(Y.start,J)===0),G=[...U].sort((Y,B)=>{let z=Y.start.diff(B.start);if(z!==0)return z;return B.end.diff(B.start)-Y.end.diff(Y.start)}),L=[...N].sort((Y,B)=>Y.start.diff(B.start)),A=[];for(let Y=0;Y<$;Y++){A[Y]=[];for(let B=0;B<Q;B++)A[Y][B]={taken:!1,event:null}}let K=[];for(let Y of G){let B=W.max(Y.start.startOf(J),X),z=J==="hour"?Y.end.subtract(1,"minute"):Y.end,V=W.min(z.startOf(J),q),O=Math.max(0,B.diff(X,J)),I=Math.min(Q-1,V.diff(X,J)),F=Y.start.startOf(J).isBefore(X),R=Y.end.startOf(J).isAfter(q),b=!1,u=-1;for(let D=0;D<$;D++){let i=!0;for(let v=O;v<=I;v++)if(A[D][v].taken){i=!1;break}if(i){u=D;break}}if(u!==-1){for(let i=O;i<=I;i++)A[u][i]={taken:!0,event:Y};let D=I-O+1;K.push({left:O/Q*100,width:D/Q*100,top:_+Z+u*(N0+Z),height:N0,position:u,...Y,isTruncatedStart:F,isTruncatedEnd:R}),b=!0}if(!b)for(let D=O+1;D<=I;D++){let i=-1;for(let v=0;v<$;v++){let j=!0;for(let o=D;o<=I;o++)if(A[v][o].taken){j=!1;break}if(j){i=v;break}}if(i!==-1){for(let j=D;j<=I;j++)A[i][j]={taken:!0,event:Y};let v=I-D+1;K.push({left:D/Q*100,width:v/Q*100,top:_+Z+i*(N0+Z),height:N0,position:i,...Y,isTruncatedStart:!0,isTruncatedEnd:R}),b=!0;break}}}for(let Y of L){let B=W.max(Y.start.startOf(J),X),z=Math.max(0,Math.min(Q-1,B.diff(X,J))),V=!1,O=!1,I=-1;for(let F=0;F<$;F++)if(!A[F][z].taken){I=F;break}if(I!==-1)A[I][z]={taken:!0,event:Y},K.push({left:z/Q*100,width:1/Q*100,top:_+Z+I*(N0+Z),height:N0,position:I,...Y,isTruncatedStart:!1,isTruncatedEnd:!1})}return K};var z2=({days:P,allDay:f,dayNumberHeight:$})=>{let{getEventsForDateRange:_,dayMaxEvents:J,eventSpacing:Z}=m(),X=P[0].startOf("day"),q=P.at(-1).endOf("day");return uf(()=>{let U=_(X,q);if(f)U=U.filter((N)=>N.allDay);return uP({days:P,events:U,dayMaxEvents:J,dayNumberHeight:$,eventSpacing:Z})},[_,X,q,f,P,J,$,Z])};import{jsx as Q5}from"react/jsx-runtime";var cf=({days:P,allDay:f,dayNumberHeight:$})=>{let _=P[0],J=z2({days:P,allDay:f,dayNumberHeight:$});return Q5("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip",children:J.map((Z)=>{let X=`${Z.id}-${Z.position}-${_.toISOString()}`;return Q5("div",{className:"absolute z-10 pointer-events-auto overflow-clip",style:{left:`calc(${Z.left}% + var(--spacing) * 0.25)`,width:`calc(${Z.width}% - var(--spacing) * 1)`,top:`${Z.top}px`,height:`${N0}px`},"data-testid":`week-event-layer-event-${Z.id}`,children:Q5(E0,{elementId:X,event:Z,className:"h-full w-full shadow"})},`${X}-wrapper`)})})},YP=vf(cf);import{jsx as pP,jsxs as yf}from"react/jsx-runtime";var G2=()=>{let{currentDate:P,t:f,businessHours:$}=m(),_=z0({date:P,businessHours:$});return yf("div",{"data-testid":"day-all-day-row",className:"grid grid-cols-8 border-b border-x",children:[pP("div",{className:"col-span-2 flex shrink-0 items-center justify-end border-r pr-2 md:col-span-1",children:pP("span",{className:"text-muted-foreground text-[10px] whitespace-nowrap sm:text-xs",children:f("allDay")})}),pP("div",{className:"relative col-span-6 md:col-span-7 ",children:pP(p0,{id:`all-day-${P.format("YYYY-MM-DD")}`,type:"day-cell",date:P,allDay:!0,className:"hover:bg-accent w-full cursor-pointer min-h-10 flex flex-col relative",disabled:!_,children:pP("div",{className:"absolute inset-0 z-10 pr-2",children:pP(YP,{days:[P],dayNumberHeight:0,allDay:!0})})})})]})};import{useMemo as rf}from"react";var K2=({day:P})=>{let{getEventsForDateRange:f}=m();return rf(()=>{let _=f(P.startOf("day"),P.endOf("day"));if(_=_.filter((Q)=>!Q.allDay).toSorted((Q,U)=>Q.start.diff(U.start)),_.length===0)return[];let J=[],Z=[],X=null;for(let Q of _){if(X&&Q.start.isSameOrAfter(X)){if(Z.length>0)J.push(Z);Z=[]}Z.push(Q),X=X?W.max(X,Q.end):Q.end}if(Z.length>0)J.push(Z);let q=[];for(let Q of J){if(Q.length===1){let A=Q[0],K=A.start.hour()+A.start.minute()/60,Y=A.end.hour()+A.end.minute()/60;if(Y<K)Y=24;let B=Y-K,z=K/24*100,V=B/24*100;q.push({...A,left:0,width:100,top:z,height:V});continue}let U=[...Q].sort((A,K)=>{let Y=A.end.diff(A.start,"minute"),B=K.end.diff(K.start,"minute");if(Y!==B)return B-Y;return A.start.diff(K.start)}),N=U.length,G;if(N===2)G=25;else if(N===3)G=50;else if(N===4)G=60;else G=70;let L=N>1?G/(N-1):0;for(let A=0;A<U.length;A++){let K=U[A],Y=K.start.hour()+K.start.minute()/60,B=K.end.hour()+K.end.minute()/60;if(B<Y)B=24;let z=B-Y,V=Y/24*100,O=z/24*100,I,F,R;if(A===0)I=0,F=100,R=1;else I=L*A,F=100-I,R=A+1;q.push({...K,left:I,width:F,top:V,height:O,zIndex:R})}}return q},[P,f])};import{jsx as q5}from"react/jsx-runtime";var iP=({day:P,"data-testid":f})=>{let $=K2({day:P});return q5("div",{"data-testid":f,className:"pointer-events-none absolute inset-0 z-10",children:$.map((_,J)=>{let Z=`event-${_.id}-${J}-${P.toISOString()}`,X=_.end.diff(_.start,"minute")<=15;return q5("div",{className:"absolute",style:{left:`${_.left}%`,width:`calc(${_.width}% - var(--spacing) * 2)`,top:`${_.top}%`,height:`${_.height}%`},children:q5(E0,{elementId:Z,event:_,className:p("pointer-events-auto absolute",{"[&_p]:text-[10px] [&_p]:mt-0":X})})},`${Z}-wrapper`)})})};import{AnimatePresence as jf,motion as lf}from"motion/react";import{jsx as vP,jsxs as df}from"react/jsx-runtime";var N2=({className:P})=>{let{currentDate:f,stickyViewHeader:$,viewHeaderClassName:_}=m(),J=f.isSame(W(),"day");return vP("div",{"data-testid":"day-header",className:p("flex items-center justify-center border-b p-2 border-x",$&&"sticky top-0 z-20",_,P),children:vP(jf,{mode:"wait",children:df(lf.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut"},className:p("flex items-center text-center text-base font-semibold sm:text-xl",J&&"text-primary"),children:[vP("span",{className:"xs:inline hidden",children:f.format("dddd, ")}),f.format("MMMM D, YYYY"),J&&vP("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"})]},f.format("YYYY-MM-DD"))})})};import{jsx as U5}from"react/jsx-runtime";var tf=Array.from({length:24},(P,f)=>f).map((P)=>{return W().hour(P).minute(0)}),L2=({className:P})=>{let{currentLocale:f,timeFormat:$}=m();return U5("div",{"data-testid":"day-time-col",className:`col-span-2 h-full md:col-span-1 ${P}`,children:tf.map((_)=>U5("div",{"data-testid":`day-time-hour-${_.format("HH")}`,className:"h-[60px] border-b text-right",children:U5("span",{className:"text-muted-foreground pr-2 text-right text-[10px] sm:text-xs",children:Intl.DateTimeFormat(f,{hour:"numeric",hour12:$==="12-hour"}).format(_.toDate())})},_.format("HH:mm")))})};import{jsx as I0,jsxs as cP}from"react/jsx-runtime";var B2=Array.from({length:24},(P,f)=>f).map((P)=>{return W().hour(P).minute(0)}),af=()=>{let{currentDate:P,businessHours:f}=m(),$=P.isSame(W(),"day"),_=P.format("YYYY-MM-DD");return cP("div",{"data-testid":"day-view",className:"flex h-full flex-col",children:[I0(N2,{className:"h-[3rem]"}),cP(_0,{"data-testid":"day-scroll-area",className:"relative overflow-y-auto h-[calc(100%-3rem)]",children:[I0(G2,{}),cP("div",{"data-testid":"day-time-grid",className:"grid grid-cols-8 divide-x border-x",style:{height:`${B2.length*60}px`},children:[I0(L2,{className:"col-span-2 h-full md:col-span-1"}),cP("div",{"data-testid":"day-events-column",className:"relative col-span-6 h-full md:col-span-7",children:[B2.map((J)=>{let Z=J.hour(),X=J.format("HH"),q=(Q)=>z0({date:P,hour:Z,minute:Q,businessHours:f});return I0(nf,{children:[0,15,30,45].map((Q)=>{let U=q(Q),N=Q===45,G=Q.toString().padStart(2,"0"),L=N?"border-border":"border-dashed";return I0(p0,{id:`day-time-cell-${_}-${X}-${G}`,"data-testid":`day-time-cell-${X}-${G}`,type:"time-cell",date:P,hour:Z,minute:Q,disabled:!U,className:p("h-[15px] border-b hover:bg-accent",L)},Q)})},`${_}-${X}`)}),I0(iP,{day:P}),$&&I0("div",{"data-testid":"day-current-time-indicator",className:"absolute right-0 left-0 z-40 border-t border-red-500",style:{top:`${(W().hour()+W().minute()/60)*60}px`},children:I0("div",{className:"-mt-1 -ml-1 h-2 w-2 rounded-full bg-red-500"})})]})]}),I0(Y0,{className:"z-30"})]})]})},A2=af;import{AnimatePresence as X4,motion as J4}from"motion/react";import Q4,{useMemo as q4}from"react";import{useImperativeHandle as sf,useState as V2}from"react";import{jsx as WP,jsxs as ef}from"react/jsx-runtime";var zP=({ref:P})=>{let[f,$]=V2(!1),[_,J]=V2(null),{currentDate:Z,firstDayOfWeek:X}=x((U)=>({currentDate:U.currentDate,firstDayOfWeek:U.firstDayOfWeek}));sf(P,()=>({open:()=>$(!0),close:()=>$(!1),setSelectedDayEvents:(U)=>J(U)}));let Q=Z.startOf("month").clone();while(Q.day()!==X)Q=Q.subtract(1,"day");return WP(PP,{open:f,onOpenChange:$,children:ef(fP,{className:"max-h-[80vh] max-w-md overflow-y-auto",children:[WP($P,{children:WP(ZP,{children:_?.day.format("MMMM D, YYYY")})}),WP("div",{className:"mt-4 space-y-3",children:_?.events.map((U)=>{return WP(E0,{elementId:`all-events-dialog-event-$${U.id}`,event:U,className:"relative my-1 h-[30px]"},U.id)})})]})})};import P4 from"react";import{jsx as yP,jsxs as Y5,Fragment as f4}from"react/jsx-runtime";var W2=({index:P,day:f,className:$=""})=>{let _=P4.useRef(null),{currentLocale:J,getEventsForDateRange:Z,currentDate:X,firstDayOfWeek:q,dayMaxEvents:Q=0,t:U,businessHours:N}=m(),G=Z(f.startOf("day"),f.endOf("day")),A=X.startOf("month").clone();while(A.day()!==q)A=A.subtract(1,"day");let K=(F,R)=>{_.current?.setSelectedDayEvents({day:F,events:R}),_.current?.open()},Y=f.isSame(W(),"day"),B=f.month()===X.month(),z=P===6,V=G.length-Q,O=V>0,I=z0({date:f,businessHours:N});return Y5(f4,{children:[yP(p0,{id:`day-cell-${f.format("YYYY-MM-DD")}`,type:"day-cell","data-testid":`day-cell-${f.format("YYYY-MM-DD")}`,date:f,disabled:!I||!B,className:p("cursor-pointer overflow-clip p-1 hover:bg-accent min-h-[60px]",z&&"border-r-0",$),children:Y5("div",{className:"flex flex-col gap-1",children:[yP("div",{className:p("flex h-5 w-5 items-center justify-center rounded-full text-xs sm:h-6 sm:w-6",Y&&"bg-primary text-primary-foreground font-medium"),children:Intl.DateTimeFormat(J,{day:"numeric"}).format(f.toDate())}),G.slice(0,Q).map((F,R)=>yP("div",{className:"h-[20px] w-full","data-testid":F?.title},`empty-${R}`)),O&&Y5("div",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs mt-1",onClick:(F)=>{F.stopPropagation(),K(f,G)},onKeyDown:(F)=>{if(F.key==="Enter"||F.key===" ")F.preventDefault(),F.stopPropagation(),K(f,G)},tabIndex:0,role:"button",children:["+",V," ",U("more")]})]})}),yP(zP,{ref:_})]})};import{AnimatePresence as $4,motion as Z4}from"motion/react";import{useMemo as _4}from"react";import{jsx as rP}from"react/jsx-runtime";var F2=({className:P})=>{let{firstDayOfWeek:f,currentLocale:$,stickyViewHeader:_,viewHeaderClassName:J}=m(),Z=_4(()=>{let X=W.weekdaysShort().map((q)=>q.toLowerCase());for(let q=0;q<f;q++){let Q=X.shift();if(Q)X.push(Q)}return{days:X}},[f]);return rP("div",{className:p("grid grid-cols-7 border-b",_&&"sticky top-0 z-20",J,P),"data-testid":"month-header",children:Z.days.map((X,q)=>rP($4,{mode:"wait",children:rP(Z4.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:q*0.05},className:"py-2 text-center font-medium border-r first:border-l","data-testid":`weekday-header-${X}`,children:rP("span",{className:"text-sm capitalize",children:X})},X)},X))})};import{jsx as o0,jsxs as p5}from"react/jsx-runtime";var O2=({dayMaxEvents:P=3})=>{let f=Q4.useRef(null),{currentDate:$,firstDayOfWeek:_}=m(),J=q4(()=>NP($,_),[$,_]);return p5("div",{className:"flex h-full flex-col","data-testid":"month-view",children:[o0(F2,{className:"h-[3rem]"}),p5(_0,{className:"overflow-auto h-[calc(100%-3rem)] z-30","data-testid":"month-scroll-area",viewPortProps:{className:"*:flex! *:flex-col *:min-h-full"},children:[o0(X4,{mode:"wait",children:o0(J4.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:0.25,ease:"easeInOut"},className:"relative grid h-full grid-cols-7 grid-rows-6 overflow-auto flex-1","data-testid":"month-calendar-grid",children:J.map((Z,X)=>p5("div",{className:"relative col-span-7 grid grid-cols-7","data-testid":`week-row-${X}`,children:[Z.map((q,Q)=>o0(W2,{index:Q,day:q,dayMaxEvents:P,className:"border-r border-b first:border-l"},q.format("YYYY-MM-DD"))),o0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:o0(YP,{days:Z})})]},`week-${X}`))},$.format("YYYY-MM-DD"))}),o0(Y0,{className:"z-30"})]}),o0(zP,{ref:f})]})};import L4 from"dayjs/plugin/weekOfYear";import{jsx as FP,jsxs as U4}from"react/jsx-runtime";var R2=()=>{let{currentDate:P,firstDayOfWeek:f,t:$,businessHours:_}=m(),J=a(P,f);return U4("div",{className:"grid grid-cols-[auto_1fr_1fr_1fr_1fr_1fr_1fr_1fr] grid-rows-1 relative","data-testid":"week-all-day-row",children:[FP("div",{className:"w-16 flex shrink-0 items-center justify-end border-x border-b px-1 min-h-16",children:FP("span",{className:"text-muted-foreground text-[10px] whitespace-nowrap sm:text-xs",children:$("allDay")})}),J.map((Z)=>{let X=z0({date:Z,businessHours:_});return FP(p0,{id:`all-day-cell-${Z.format("YYYY-MM-DD")}`,type:"day-cell",date:Z,allDay:!0,disabled:!X,className:"hover:bg-accent h-full flex-1 cursor-pointer border-r border-b"},`all-day-${Z.format("YYYY-MM-DD")}`)}),FP("div",{className:"absolute inset-0 z-10 col-span-7 col-start-2",children:FP(YP,{days:J,dayNumberHeight:0,allDay:!0})})]})};import{AnimatePresence as Y4,motion as p4}from"motion/react";import{jsx as GP,jsxs as z5}from"react/jsx-runtime";var M2=({className:P})=>{let{currentDate:f,currentLocale:$,selectDate:_,openEventForm:J,firstDayOfWeek:Z,stickyViewHeader:X,viewHeaderClassName:q,t:Q}=m(),U=a(f,Z);return z5("div",{className:p("grid grid-cols-[auto_1fr_1fr_1fr_1fr_1fr_1fr_1fr] grid-rows-1",X&&"sticky top-0 z-20",q,P),"data-testid":"week-header",children:[GP("div",{className:"col-span-1 w-16 shrink-0 items-center justify-center border-x border-b p-2",children:z5("div",{className:"flex flex-col items-center justify-center",children:[GP("span",{className:"text-muted-foreground text-xs",children:Q("week")}),GP("span",{className:"font-medium",children:f.week()})]})}),U.map((N,G)=>{let L=N.isSame(W(),"day");return GP(Y4,{mode:"wait",children:z5(p4.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:G*0.05},className:p("hover:bg-accent flex-1 cursor-pointer p-1 text-center sm:p-2 border-r border-b",L&&"bg-primary/10 font-bold"),onClick:()=>{_(N),J({start:N})},"data-testid":`week-day-header-${N.format("dddd").toLowerCase()}`,children:[GP("div",{className:"text-xs sm:text-sm",children:N.format("ddd")}),GP("div",{className:p("mx-auto mt-1 flex h-5 w-5 items-center justify-center rounded-full text-xs sm:h-7 sm:w-7 sm:text-sm",L&&"bg-primary text-primary-foreground"),children:Intl.DateTimeFormat($,{day:"numeric"}).format(N.toDate())})]},N.format("YYYY-MM-DD"))},N.format("YYYY-MM-DD"))})]})};import{jsx as I2,jsxs as G4}from"react/jsx-runtime";var z4=Array.from({length:24},(P,f)=>f).map((P)=>W().hour(P).minute(0)),H2=({day:P})=>{let{businessHours:f}=m();return G4("div",{"data-testid":`week-day-col-${P.format("YYYY-MM-DD")}`,className:"col-span-1 relative grid grid-rows-24 border-r",children:[z4.map(($)=>{let _=$.hour(),J=$.format("HH"),Z=P.format("YYYY-MM-DD"),X=z0({date:P,hour:_,minute:0,businessHours:f});return I2(p0,{id:`week-time-cell-${Z}-${J}`,type:"time-cell",date:P,hour:_,disabled:!X,"data-testid":`week-time-cell-${Z}-${J}`,className:p("hover:bg-accent relative z-10 h-[60px] cursor-pointer border-b")},`${Z}-${J}`)}),I2(iP,{"data-testid":`week-day-events-${P.format("YYYY-MM-DD")}`,day:P})]})};import{jsx as j0,jsxs as N4}from"react/jsx-runtime";var K4=Array.from({length:24},(P,f)=>f).map((P)=>W().hour(P).minute(0)),S2=()=>{let{currentDate:P,firstDayOfWeek:f,currentLocale:$,timeFormat:_}=m(),J=a(P,f),Z=J.findIndex((q)=>q.isSame(W(),"day")),X=Z!==-1;return N4("div",{"data-testid":"week-time-grid",className:"relative h-full grid grid-cols-[auto_repeat(7,1fr)] grid-rows-[repeat(24,minmax(60px, 1fr))]",children:[j0("div",{"data-testid":"week-time-labels",className:"z-10 col-span-1 w-16 grid grid-rows-24 border-x",children:K4.map((q)=>j0("div",{"data-testid":`week-time-hour-${q.format("HH")}`,className:"h-[60px] border-b text-right",children:j0("span",{className:"text-muted-foreground px-1 text-right text-[10px] sm:text-xs",children:Intl.DateTimeFormat($,{hour:"numeric",hour12:_==="12-hour"}).format(q.toDate())})},q.format("HH:mm")))}),J.map((q)=>j0(H2,{day:q},q.format("YYYY-MM-DD"))),X&&j0("div",{"data-testid":"week-current-time-indicator",className:"pointer-events-none absolute z-40",style:{top:`${(W().hour()+W().minute()/60)*60}px`,left:`calc(var(--spacing) * 16 + ${Z} * (100% - var(--spacing) * 16) / 7)`,width:"calc((100% - var(--spacing) * 16) / 7)"},children:j0("div",{className:"w-full border-t border-red-500",children:j0("div",{className:"-mt-1 ml-1 h-2 w-2 rounded-full bg-red-500"})})})]})};import{jsx as jP,jsxs as T2}from"react/jsx-runtime";W.extend(L4);var B4=()=>{return T2("div",{className:"flex flex-col h-full","data-testid":"week-view",children:[jP(M2,{className:"h-[5rem]"}),T2(_0,{className:"flex overflow-auto h-[calc(100%-5rem)]","data-testid":"week-scroll-area",children:[jP(R2,{}),jP(S2,{}),jP(Y0,{className:"z-30"})]})]})},b2=B4;import{AnimatePresence as A4,motion as V4}from"motion/react";import{jsx as H0,jsxs as OP}from"react/jsx-runtime";var W4=["S","M","T","W","T","F","S"],F4=["bg-primary","bg-blue-500","bg-green-500"],O4=42,R4=(P)=>{if(P===0)return"";let f=P>1?"s":"";return`${P} event${f}`},M4=()=>{let{currentDate:P,selectDate:f,events:$,setView:_,getEventsForDateRange:J,t:Z}=m(),X=P.year(),q=()=>{return Array.from({length:12},(K,Y)=>{let B=W().year(X).month(Y).startOf("month"),z=$.filter((V)=>V.start.year()===X&&V.start.month()===Y);return{date:B,name:B.format("MMMM"),eventCount:z.length,monthKey:B.format("MM")}})},Q=(K)=>{let Y=K.startOf("month").startOf("week");return Array.from({length:O4},(B,z)=>{let V=Y.add(z,"day"),O=V.startOf("day"),I=V.endOf("day"),F=J(O,I);return{date:V,dayKey:V.format("YYYY-MM-DD"),isInCurrentMonth:V.month()===K.month(),isToday:V.isSame(W(),"day"),isSelected:V.isSame(P,"day"),eventCount:F.length}})},U=(K,Y,B)=>{B?.stopPropagation(),f(K),_(Y)},N=(K)=>{let Y=K===1?Z("event"):Z("events");return`${K} ${Y}`},G=(K)=>{let B=K.isInCurrentMonth?"":"text-muted-foreground opacity-50",z=K.isToday?"bg-primary text-primary-foreground rounded-full":"",V=K.isSelected&&!K.isToday?"bg-muted rounded-full font-bold":"",O=K.eventCount>0&&!K.isToday&&!K.isSelected?"font-medium":"";return p("relative flex aspect-square w-full cursor-pointer flex-col items-center justify-center hover:bg-accent rounded-sm transition-colors duration-200",B,z,V,O)},L=(K,Y)=>{return p("h-[3px] w-[3px] rounded-full",Y?"bg-primary-foreground":K)},A=q();return OP(_0,{"data-testid":"year-view",className:"h-full",children:[H0("div",{"data-testid":"year-grid",className:"grid auto-rows-fr grid-cols-1 gap-4 p-4 sm:grid-cols-2 lg:grid-cols-3",children:A.map((K,Y)=>{let B=Q(K.date),z=Y*0.05;return OP("div",{"data-testid":`year-month-${K.monthKey}`,className:"hover:border-primary flex flex-col rounded-lg border p-3 text-left transition-all duration-200 hover:shadow-md",children:[H0(A4,{mode:"wait",children:OP(V4.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:z},className:"mb-2 flex items-center justify-between",children:[H0("button",{type:"button",onClick:()=>U(K.date,"month"),"data-testid":`year-month-title-${K.monthKey}`,className:"text-lg font-medium hover:underline cursor-pointer",children:K.name}),K.eventCount>0&&H0("span",{"data-testid":`year-month-event-count-${K.monthKey}`,className:"bg-primary text-primary-foreground rounded-full px-2 py-1 text-xs",children:N(K.eventCount)})]},`month-${Y}`)}),OP("div",{"data-testid":`year-mini-calendar-${K.monthKey}`,className:"grid grid-cols-7 gap-[1px] text-[0.6rem]",children:[W4.map((V,O)=>H0("div",{className:"text-muted-foreground h-3 text-center",children:V},`header-${O}`)),B.map((V)=>{let O=`year-day-${K.date.format("YYYY-MM")}-${V.dayKey}`,I=V.eventCount>0,F=Math.min(V.eventCount,3),R=F4.slice(0,F);return OP("button",{type:"button","data-testid":O,onClick:(b)=>U(V.date,"day",b),title:R4(V.eventCount),className:G(V),children:[H0("span",{className:"text-center leading-none",children:V.date.date()}),I&&H0("div",{className:p("absolute bottom-0 flex w-full justify-center space-x-[1px]",V.isToday&&"bottom-[1px]"),children:R.map((b)=>H0("span",{className:L(b,V.isToday)},b))})]},V.dayKey)})]})]},K.monthKey)})}),H0(Y0,{className:"z-30"})]})},w2=M4;import{useCallback as G5,useMemo as I4}from"react";import{jsx as H4}from"react/jsx-runtime";var h2=({children:P,events:f=[],firstDayOfWeek:$=0,initialView:_="month",initialDate:J,renderEvent:Z,onEventClick:X,onCellClick:q,onViewChange:Q,onEventAdd:U,onEventUpdate:N,onEventDelete:G,onDateChange:L,locale:A,timezone:K,disableCellClick:Y,disableEventClick:B,disableDragAndDrop:z,dayMaxEvents:V,eventSpacing:O=b0,stickyViewHeader:I=!0,viewHeaderClassName:F="",headerComponent:R,headerClassName:b,businessHours:u,renderEventForm:D,translations:i,translator:v,timeFormat:j="12-hour",classesOverride:o})=>{let T=TP({events:f,firstDayOfWeek:$,initialView:_,initialDate:J,businessHours:u,onEventAdd:U,onEventUpdate:N,onEventDelete:G,onDateChange:L,onViewChange:Q,locale:A,timezone:K,translations:i,translator:v}),q0=G5((g)=>{T.setSelectedEvent(g),T.setIsEventFormOpen(!0)},[T]),n=G5((g)=>{if(B)return;if(X)X(g);else q0(g)},[B,X,q0]),K0=G5((g)=>{if(Y)return;if(q)q(g);else T.openEventForm(g)},[q,Y,T]),Z0=I4(()=>({currentDate:T.currentDate,view:T.view,events:T.events,rawEvents:T.rawEvents,currentLocale:T.currentLocale,isEventFormOpen:T.isEventFormOpen,selectedEvent:T.selectedEvent,selectedDate:T.selectedDate,firstDayOfWeek:T.firstDayOfWeek,setCurrentDate:T.setCurrentDate,selectDate:T.selectDate,setView:T.setView,nextPeriod:T.nextPeriod,prevPeriod:T.prevPeriod,today:T.today,addEvent:T.addEvent,updateEvent:T.updateEvent,updateRecurringEvent:T.updateRecurringEvent,deleteEvent:T.deleteEvent,deleteRecurringEvent:T.deleteRecurringEvent,openEventForm:T.openEventForm,closeEventForm:T.closeEventForm,getEventsForDateRange:T.getEventsForDateRange,findParentRecurringEvent:T.findParentRecurringEvent,renderEvent:Z,onEventClick:n,onCellClick:K0,locale:A,timezone:K,disableCellClick:Y,disableEventClick:B,disableDragAndDrop:z,dayMaxEvents:V,eventSpacing:O,stickyViewHeader:I,viewHeaderClassName:F,headerComponent:R,headerClassName:b,businessHours:u,renderEventForm:D,t:T.t,timeFormat:j,classesOverride:o}),[T,Z,n,K0,A,K,Y,B,z,V,O,I,F,R,b,u,D,j,o]);return H4(_P.Provider,{value:Z0,children:P})};import{jsx as L0,jsxs as h4}from"react/jsx-runtime";var b4=()=>{let{view:P,isEventFormOpen:f,closeEventForm:$,selectedEvent:_,addEvent:J,updateEvent:Z,deleteEvent:X,dayMaxEvents:q,renderEventForm:Q}=m(),U={month:L0(O2,{dayMaxEvents:q},"month"),week:L0(b2,{},"week"),day:L0(A2,{},"day"),year:L0(w2,{},"year")},L={open:f,onClose:$,selectedEvent:_,onAdd:J,onUpdate:(A)=>{Z(A.id,A)},onDelete:(A)=>{X(A.id)}};return h4("div",{className:"flex flex-col w-full h-full",children:[L0(VP,{className:"p-1"}),L0(bP,{children:L0(S4,{mode:"wait",children:L0(T4.div,{initial:{opacity:0,x:20},animate:{opacity:1,x:0},exit:{opacity:0,x:-20},transition:{duration:0.1,ease:"easeInOut"},className:"w-full h-[calc(100%-3.5rem)]",children:U[P]},P)})}),Q?Q(L):f&&L0(DP,{...L})]})},w4=({events:P,firstDayOfWeek:f="sunday",initialView:$="month",initialDate:_,dayMaxEvents:J=JP,eventSpacing:Z=b0,stickyViewHeader:X=!0,viewHeaderClassName:q="",timeFormat:Q="12-hour",...U})=>{return L0(h2,{events:RP(P),firstDayOfWeek:SP[f],initialView:$,initialDate:s0(_),dayMaxEvents:J,eventSpacing:Z,stickyViewHeader:X,viewHeaderClassName:q,timeFormat:Q,...U,children:L0(b4,{})})};import{AnimatePresence as r4,motion as j4}from"motion/react";import{AnimatePresence as D4,motion as k4}from"motion/react";import{useMemo as E4}from"react";import g4,{useMemo as m4}from"react";import{jsx as K5,jsxs as N5,Fragment as C4}from"react/jsx-runtime";var g2=({index:P,day:f,className:$="",resourceId:_,gridType:J="day"})=>{let Z=g4.useRef(null),{dayMaxEvents:X=0,getEventsForDateRange:q,currentDate:Q,firstDayOfWeek:U,t:N,getEventsForResource:G,businessHours:L}=x((R)=>({dayMaxEvents:R.dayMaxEvents,getEventsForDateRange:R.getEventsForDateRange,currentDate:R.currentDate,firstDayOfWeek:R.firstDayOfWeek,t:R.t,getEventsForResource:R.getEventsForResource,businessHours:R.businessHours})),A=m4(()=>{let R=_?G(_):[],b=q(f.startOf(J),f.endOf(J));if(R.length)return b.filter((u)=>R.some((D)=>String(D.id)===String(u.id)));return b},[f,_,q,G,J]),Y=Q.startOf("month").clone();while(Y.day()!==U)Y=Y.subtract(1,"day");let B=(R,b)=>{Z.current?.setSelectedDayEvents({day:R,events:b}),Z.current?.open()},z=f.month()===Q.month(),V=P===6,O=A.length-X,I=O>0,F=z0({date:f,hour:J==="hour"?f.hour():void 0,businessHours:L});return N5(C4,{children:[K5(p0,{id:`day-cell-${f.toISOString()}${_?`-resource-${_}`:""}`,type:"day-cell","data-testid":`day-cell-${f.toISOString()}`,date:f,resourceId:_,disabled:!F||!z,className:p("cursor-pointer overflow-clip p-1 hover:bg-accent min-h-[60px]",V&&"border-r-0",$),children:N5("div",{className:"flex flex-col gap-1",children:[A.slice(0,X).map((R,b)=>K5("div",{className:"h-[20px] w-full","data-testid":R?.title},`empty-${b}`)),I&&N5("div",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs mt-1",onClick:(R)=>{R.stopPropagation(),B(f,A)},onKeyDown:(R)=>{if(R.key==="Enter"||R.key===" ")R.preventDefault(),R.stopPropagation(),B(f,A)},tabIndex:0,role:"button",children:["+",O," ",N("more")]})]})}),K5(zP,{ref:Z})]})};var m2=({days:P,gridType:f="day",resourceId:$})=>{let{getEventsForResource:_,getEventsForDateRange:J,dayMaxEvents:Z,eventSpacing:X}=U0(),q=P[0].startOf("day"),Q=P.at(-1).endOf("day"),U=_($),N=J(q,Q);return uP({days:P,events:U.filter((G)=>N.some((L)=>L.id===G.id)),dayMaxEvents:Z,dayNumberHeight:0,gridType:f,eventSpacing:X})};import{jsx as L5}from"react/jsx-runtime";var C2=({days:P,gridType:f="day",resourceId:$})=>{let _=P[0].startOf("day"),J=m2({days:P,gridType:f,resourceId:$});return L5("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip",children:J.map((Z)=>{let X=`${$}-event-${Z.id}-${Z.position}-${_.toISOString()}`;return L5("div",{className:"absolute z-10 pointer-events-auto overflow-clip",style:{left:`calc(${Z.left}% + var(--spacing) * 0.25)`,width:`calc(${Z.width}% - var(--spacing) * 1)`,top:`${Z.top}px`,height:`${N0}px`},"data-testid":`week-event-layer-event-${Z.id}`,children:L5(E0,{elementId:X,event:Z,className:"h-full w-full shadow"})},`${X}-wrapper`)})})};import{jsx as S0,jsxs as B5}from"react/jsx-runtime";var KP=({days:P,gridType:f="day",children:$})=>{let{currentDate:_,getVisibleResources:J,dayMaxEvents:Z,renderResource:X}=U0(),Q=J().map((U)=>({id:U.id,title:U.title,resource:U,cells:P.map((N)=>({label:N.format("D"),value:N,id:N.toISOString()}))}));return B5(_0,{className:"h-full","data-testid":"month-scroll-area",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[$,S0("div",{className:"flex flex-1 h-[calc(100%-3rem)] w-fit",children:S0("div",{className:"relative w-full flex flex-col",children:Q.map((U)=>B5("div",{className:"flex flex-1 relative min-h-[60px] ",children:[S0("div",{className:p("w-40 border-b border-r p-2 flex flex-shrink-0 sticky left-0 z-20",U.resource.color||"",U.resource.backgroundColor||"bg-background"),style:{color:U.resource.color,backgroundColor:U.resource.backgroundColor},children:X?X(U.resource):S0("div",{className:"break-words text-sm",children:U.title})}),B5("div",{className:"relative flex-1 flex",children:[U.cells.map((N)=>S0(g2,{index:N.value.day(),day:N.value,resourceId:U.id,dayMaxEvents:Z,gridType:f,className:"border-r border-b w-20"},N.id)),S0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:S0(C2,{days:P,resourceId:U.id,gridType:f})})]})]},U.id))},_.format("YYYY-MM"))}),S0(Y0,{className:"z-30"})," ",S0(Y0,{orientation:"horizontal",className:"z-30"})," "]})};import{jsx as x0,jsxs as o4}from"react/jsx-runtime";var D2=()=>{let{currentDate:P,t:f,stickyViewHeader:$,viewHeaderClassName:_,currentLocale:J,timeFormat:Z}=U0(),X=E4(()=>{return Array.from({length:24},(q,Q)=>P.hour(Q).minute(0))},[P]);return x0("div",{className:"flex h-full flex-col border",children:x0(KP,{days:X,gridType:"hour",children:o4("div",{className:p("flex h-12 w-fit",$&&"sticky top-0 z-21 bg-background",_),children:[x0("div",{className:"w-40 border-b border-r flex-shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:x0("div",{className:"text-sm",children:f("resources")})}),x0("div",{className:"flex-1 border-b border-r flex flex-col",children:x0("div",{className:"flex h-12 border-b",children:X.map((q,Q)=>{let U=q.isSame(W(),"hour"),N=`resource-day-header-${q.toISOString()}`;return x0(D4,{mode:"wait",children:x0(k4.div,{"data-testid":`resource-day-time-label-${q.format("HH")}`,initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:Q*0.05},className:p("w-20 border-r flex items-center justify-center text-xs flex-shrink-0",U&&"bg-blue-50 text-blue-600 font-medium"),children:Intl.DateTimeFormat(J,{hour:"numeric",hour12:Z==="12-hour"}).format(q.toDate())},`${N}-motion`)},`${N}-presence`)})})})]})})})};import{jsx as x4}from"react/jsx-runtime";var k2=()=>{return x4(D2,{})};import{AnimatePresence as u4,motion as i4}from"motion/react";import{useMemo as v4}from"react";import{jsx as l0,jsxs as E2}from"react/jsx-runtime";var o2=()=>{let{currentDate:P,t:f,stickyViewHeader:$,viewHeaderClassName:_}=U0(),J=v4(()=>{let Z=P.daysInMonth();return Array.from({length:Z},(X,q)=>P.startOf("month").add(q,"day"))},[P]);return l0("div",{className:"flex flex-col h-full border",children:l0(KP,{days:J,children:E2("div",{className:p("flex h-12 w-fit",$&&"sticky top-0 z-21 bg-background",_),children:[l0("div",{className:"w-40 border-b border-r flex-shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:l0("div",{className:"text-sm",children:f("resources")})}),J.map((Z,X)=>{let q=`resource-month-header-${Z.toISOString()}`;return l0(u4,{mode:"wait",children:E2(i4.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:X*0.05},className:"w-20 border-b border-r flex-shrink-0 flex items-center justify-center flex-col",children:[l0("div",{className:"text-xs font-medium",children:Z.format("D")}),l0("div",{className:"text-xs text-muted-foreground",children:Z.format("ddd")})]},`${q}-motion`)},`${q}-presence`)})]})})})};import{jsx as c4}from"react/jsx-runtime";var x2=()=>{return c4(o2,{})};import{AnimatePresence as u2,motion as i2}from"motion/react";import{useMemo as v2}from"react";import{jsx as G0,jsxs as A5}from"react/jsx-runtime";var c2=()=>{let{currentDate:P,firstDayOfWeek:f,t:$,stickyViewHeader:_,viewHeaderClassName:J,currentLocale:Z,timeFormat:X}=U0(),q=v2(()=>a(P,f),[P,f]),Q=v2(()=>{return q.flatMap((U)=>Array.from({length:24},(N,G)=>U.hour(G).minute(0)))},[q]);return G0("div",{className:"flex h-full flex-col border",children:G0(KP,{days:Q,gridType:"hour",children:A5("div",{className:p("flex h-24 w-fit",_&&"sticky top-0 z-21 bg-background",J),children:[G0("div",{className:"w-40 border-b border-r flex-shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:G0("div",{className:"text-sm",children:$("resources")})}),A5("div",{className:"flex-1 border-b border-r flex flex-col",children:[G0("div",{className:"flex h-12 border-b",children:q.map((U,N)=>{let G=U.isSame(W(),"day"),L=`resource-week-header-${U.toISOString()}-day`;return G0(u2,{mode:"wait",children:G0(i2.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:N*0.05},className:p("flex-shrink-0 border-r flex items-center text-center font-medium w-[calc(24*var(--spacing)*20)]",G&&"bg-blue-50 text-blue-600"),children:A5("div",{className:"sticky left-1/2",children:[G0("div",{className:"text-sm",children:U.format("ddd")}),G0("div",{className:"text-xs text-muted-foreground",children:U.format("M/D")})]})},`${L}-motion`)},`${L}-presence`)})}),G0("div",{className:"flex h-12 border-b",children:Q.map((U,N)=>{let G=U.isSame(W(),"hour"),L=`resource-week-header-${U.toISOString()}-hour`;return G0(u2,{mode:"wait",children:G0(i2.div,{"data-testid":`resource-week-time-label-${U.format("HH")}`,initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:N*0.05},className:p("w-20 border-r flex items-center justify-center text-xs flex-shrink-0",G&&"bg-blue-50 text-blue-600 font-medium"),children:Intl.DateTimeFormat(Z,{hour:"numeric",hour12:X==="12-hour"}).format(U.toDate())},`${L}-motion`)},`${L}-presence`)})})]})]})})})};import{jsx as y4}from"react/jsx-runtime";var y2=()=>{return y4(c2,{})};import{jsx as u0,jsxs as l4}from"react/jsx-runtime";var r2=()=>{let{view:P,isEventFormOpen:f,closeEventForm:$,selectedEvent:_,addEvent:J,updateEvent:Z,deleteEvent:X,renderEventForm:q}=U0(),Q={month:u0(x2,{},"month"),week:u0(y2,{},"week"),day:u0(k2,{},"day")},G={open:f,onClose:$,selectedEvent:_,onAdd:J,onUpdate:(L)=>{Z(L.id,L)},onDelete:(L)=>{X(L.id)}};return l4("div",{className:"flex flex-col w-full h-full",children:[u0(VP,{className:"p-1"}),u0(bP,{children:u0(r4,{mode:"wait",children:u0(j4.div,{initial:{opacity:0,x:20},animate:{opacity:1,x:0},exit:{opacity:0,x:-20},transition:{duration:0.1,ease:"easeInOut"},className:"w-full h-[calc(100%-3.5rem)]",children:Q[P]},P)})}),q?q(G):f&&u0(DP,{...G})]})};import{jsx as j2}from"react/jsx-runtime";var d4=({events:P=[],resources:f=[],firstDayOfWeek:$="sunday",initialView:_="month",initialDate:J,disableDragAndDrop:Z=!1,dayMaxEvents:X=JP,timeFormat:q="12-hour",eventSpacing:Q=b0,...U})=>{return j2(w5,{events:RP(P),resources:f,firstDayOfWeek:SP[$],initialView:_,initialDate:s0(J),disableDragAndDrop:Z,dayMaxEvents:X,timeFormat:q,eventSpacing:Q,...U,children:j2(r2,{})})};export{K1 as useIlamyResourceCalendarContext,z1 as useIlamyCalendarContext,e0 as isRecurringEvent,dP as generateRecurringEvents,nP as defaultTranslations,CQ as RRule,d4 as IlamyResourceCalendar,w4 as IlamyCalendar};
|
|
1
|
+
import{RRule as qX}from"rrule";import{RRule as k2}from"rrule";import N0 from"dayjs";import V2 from"dayjs/plugin/isBetween.js";import M2 from"dayjs/plugin/isSameOrAfter.js";import S2 from"dayjs/plugin/isSameOrBefore.js";import I2 from"dayjs/plugin/localeData.js";import R2 from"dayjs/plugin/minMax.js";import H2 from"dayjs/plugin/timezone.js";import b2 from"dayjs/plugin/utc.js";import m2 from"dayjs/plugin/weekday.js";import w2 from"dayjs/plugin/weekOfYear.js";N0.extend(m2);N0.extend(w2);N0.extend(M2);N0.extend(S2);N0.extend(V2);N0.extend(R2);N0.extend(H2);N0.extend(b2);N0.extend(I2);var F=N0;import{clsx as T2}from"clsx";import{twMerge as h2}from"tailwind-merge";function _(...f){return h2(T2(f))}function t0(f){if(f===void 0)return;if(F.isDayjs(f))return f;let P=F(f);return P.isValid()?P:void 0}var VP=(f,P)=>{let $={...f};for(let z of P)delete $[z];return $};function bf(f){if(!f||!f.length)return[];return f.map((P)=>{return{...P,start:F.isDayjs(P.start)?P.start:F(P.start),end:F.isDayjs(P.end)?P.end:F(P.end)}})}var s0=(f)=>{return Boolean(f.rrule||f.recurrenceId||f.uid)},PP=({event:f,currentEvents:P,startDate:$,endDate:z})=>{if(!f.rrule)return[];try{let J={...f.rrule,dtstart:f.rrule.dtstart||f.start.toDate()},Z=new k2(J),p=P.filter((B)=>B.recurrenceId&&B.uid===f.uid),X=f.end.diff(f.start),q=$.subtract(X,"millisecond").toDate(),Y=z.toDate();return Z.between(q,Y,!0).map((B,W)=>{let L=F(B),K=p.find((M)=>t0(M.recurrenceId)?.isSame(L));if(K)return{...f,...K};let N=f.end.diff(f.start),U=L.add(N,"millisecond"),A=`${f.id}_${W}`,O=f.uid||`${f.id}@ilamy.calendar`;return{...f,id:A,start:L,end:U,uid:O,rrule:void 0}}).filter((B)=>{if(f.exdates&&f.exdates.length>0){let K=B.start.toISOString();if(f.exdates.includes(K))return!1}return B.start.isSameOrBefore(z)&&B.end.isSameOrAfter($)})}catch(J){throw Error(`Invalid RRULE options: ${JSON.stringify(f.rrule)}. Error: ${J instanceof Error?J.message:"Unknown error"}`)}},MP=({targetEvent:f,updates:P,currentEvents:$,scope:z})=>{let J=[...$],Z=J.findIndex((X)=>{return(X.uid||`${X.id}@ilamy.calendar`)===f.uid&&X.rrule&&!X.recurrenceId});if(Z===-1)throw Error("Base recurring event not found");let p=J[Z];switch(z){case"this":{let X=f.start.toISOString(),Y=[...p.exdates||[],X],G={...p,exdates:Y};J[Z]=G;let Q=`${f.id}_modified_${Date.now()}`,B={...VP(f,["width","height","top","left","right"]),...P,id:Q,recurrenceId:X,uid:p.uid||`${p.id}@ilamy.calendar`,rrule:void 0};J.push(B);break}case"following":{let q=f.start.subtract(1,"day").endOf("day").toDate(),Y={...p,rrule:{...p.rrule,until:q}};J[Z]=Y;let G=p.end.diff(p.start),Q=P.start||f.start,B=P.end||Q.add(G),W=`${p.id}_following`,L=`${W}@ilamy.calendar`,K={...p,...P,rrule:{...p.rrule,...P.rrule,dtstart:Q.toDate()},id:W,uid:L,start:Q,end:B,recurrenceId:void 0};J.push(K);break}case"all":{let X={...p,...P};J[Z]=X;break}default:throw Error(`Invalid scope: ${z}. Must be 'this', 'following', or 'all'`)}return J},SP=({targetEvent:f,currentEvents:P,scope:$})=>{let z=[...P],J=z.findIndex((p)=>{return(p.uid||`${p.id}@ilamy.calendar`)===f.uid&&p.rrule&&!p.recurrenceId});if(J===-1)throw Error("Base recurring event not found");let Z=z[J];switch($){case"this":{let p=f.start.toISOString(),q=[...Z.exdates||[],p],Y={...Z,exdates:q};z[J]=Y;break}case"following":{let X=f.start.subtract(1,"day").endOf("day").toDate(),q={...Z,rrule:{...Z.rrule,until:X}};z[J]=q;break}case"all":return z.filter((X)=>X.uid!==f.uid);default:throw Error(`Invalid scope: ${$}. Must be 'this', 'following', or 'all'`)}return z};import{AnimatePresence as U3,motion as K3}from"motion/react";import{DndContext as n2,MouseSensor as t2,pointerWithin as s2,TouchSensor as e2,useSensor as jP,useSensors as f1}from"@dnd-kit/core";import{useRef as iP,useState as P1}from"react";import{Slot as g2}from"@radix-ui/react-slot";import{cva as C2}from"class-variance-authority";import{jsx as D2}from"react/jsx-runtime";var mf=C2("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function C({className:f,variant:P,size:$,asChild:z=!1,...J}){return D2(z?g2:"button",{className:_(mf({variant:P,size:$,className:f})),"data-slot":"button",...J})}import*as P0 from"@radix-ui/react-dialog";import{XIcon as y2}from"lucide-react";import{jsx as B0,jsxs as $P}from"react/jsx-runtime";function e0({...f}){return B0(P0.Root,{"data-slot":"dialog",...f})}function E2({...f}){return B0(P0.Portal,{"data-slot":"dialog-portal",...f})}function j2({className:f,...P}){return B0(P0.Overlay,{className:_("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",f),"data-slot":"dialog-overlay",...P})}function ff({className:f,children:P,...$}){return $P(E2,{"data-slot":"dialog-portal",children:[B0(j2,{}),$P(P0.Content,{className:_("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%]",f),"data-slot":"dialog-content",...$,children:[P,$P(P0.Close,{className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[B0(y2,{}),B0("span",{className:"sr-only",children:"Close"})]})]})]})}function Pf({className:f,...P}){return B0("div",{className:_("flex flex-col gap-2 text-center sm:text-left",f),"data-slot":"dialog-header",...P})}function wf({className:f,...P}){return B0("div",{className:_("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",f),"data-slot":"dialog-footer",...P})}function $f({className:f,...P}){return B0(P0.Title,{className:_("text-lg leading-none font-semibold",f),"data-slot":"dialog-title",...P})}function Tf({className:f,...P}){return B0(P0.Description,{className:_("text-muted-foreground text-sm",f),"data-slot":"dialog-description",...P})}import{useContext as CP}from"react";import{createContext as i2,useContext as IP}from"react";var Zf=i2(void 0),_0=()=>{let f=IP(Zf);if(f===void 0)throw Error("useCalendarContext must be used within a CalendarProvider");return f},v2=()=>{let f=IP(Zf);if(f===void 0)throw Error("useIlamyCalendarContext must be used within a CalendarProvider");return{currentDate:f.currentDate,view:f.view,events:f.events,isEventFormOpen:f.isEventFormOpen,selectedEvent:f.selectedEvent,selectedDate:f.selectedDate,firstDayOfWeek:f.firstDayOfWeek,setCurrentDate:f.setCurrentDate,selectDate:f.selectDate,setView:f.setView,nextPeriod:f.nextPeriod,prevPeriod:f.prevPeriod,today:f.today,addEvent:f.addEvent,updateEvent:f.updateEvent,deleteEvent:f.deleteEvent,openEventForm:f.openEventForm,closeEventForm:f.closeEventForm,businessHours:f.businessHours}};import{createContext as x2,useContext as RP}from"react";var zf=x2(void 0),o=()=>{let f=RP(zf);if(f===void 0)throw Error("useResourceCalendarContext must be used within a ResourceCalendarProvider");return f},o2=()=>{let f=RP(zf);if(f===void 0)throw Error("useIlamyResourceCalendarContext must be used within a ResourceCalendarProvider");return{currentDate:f.currentDate,view:f.view,events:f.events,resources:f.resources,isEventFormOpen:f.isEventFormOpen,selectedEvent:f.selectedEvent,selectedDate:f.selectedDate,firstDayOfWeek:f.firstDayOfWeek,setCurrentDate:f.setCurrentDate,selectDate:f.selectDate,setView:f.setView,nextPeriod:f.nextPeriod,prevPeriod:f.prevPeriod,today:f.today,addEvent:f.addEvent,updateEvent:f.updateEvent,deleteEvent:f.deleteEvent,openEventForm:f.openEventForm,closeEventForm:f.closeEventForm,getEventsForResource:f.getEventsForResource,businessHours:f.businessHours}};import{useCallback as Q0,useMemo as u2,useState as hP}from"react";import{useCallback as t,useEffect as zP,useMemo as wP,useState as c0}from"react";var ZP={today:"Today",create:"Create",new:"New",update:"Update",delete:"Delete",cancel:"Cancel",export:"Export",event:"Event",events:"Events",newEvent:"New Event",title:"Title",description:"Description",location:"Location",allDay:"All day",startDate:"Start Date",endDate:"End Date",startTime:"Start Time",endTime:"End Time",color:"Color",createEvent:"Create Event",editEvent:"Edit Event",addNewEvent:"Add a new event to your calendar",editEventDetails:"Edit your event details",eventTitlePlaceholder:"Event title",eventDescriptionPlaceholder:"Event description (optional)",eventLocationPlaceholder:"Event location (optional)",repeat:"Repeat",repeats:"Repeats",customRecurrence:"Custom recurrence",daily:"Daily",weekly:"Weekly",monthly:"Monthly",yearly:"Yearly",interval:"Interval",repeatOn:"Repeat on",never:"Never",count:"Count",every:"Every",ends:"Ends",after:"After",occurrences:"occurrences",on:"On",editRecurringEvent:"Edit recurring event",deleteRecurringEvent:"Delete recurring event",editRecurringEventQuestion:"is a recurring event. How would you like to edit it?",deleteRecurringEventQuestion:"is a recurring event. How would you like to delete it?",thisEvent:"This event",thisEventDescription:"Only change this specific occurrence",thisAndFollowingEvents:"This and following events",thisAndFollowingEventsDescription:"Edit this and all future occurrences",allEvents:"All events",allEventsDescription:"Edit the entire recurring series",onlyChangeThis:"Only change this specific occurrence",changeThisAndFuture:"Change this and all future occurrences",changeEntireSeries:"Change the entire recurring series",onlyDeleteThis:"Only delete this specific occurrence",deleteThisAndFuture:"Delete this and all future occurrences",deleteEntireSeries:"Delete the entire recurring series",month:"Month",week:"Week",day:"Day",year:"Year",more:"more",resources:"Resources",resource:"Resource",time:"Time",date:"Date",noResourcesVisible:"No resources visible",addResourcesOrShowExisting:"Add resources or show existing ones",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat",january:"January",february:"February",march:"March",april:"April",may:"May",june:"June",july:"July",august:"August",september:"September",october:"October",november:"November",december:"December"};function $0(f,P){let $=f.startOf("week").day(P),z=f.isBefore($)?$.subtract(1,"week"):$;return Array.from({length:7},(J,Z)=>z.add(Z,"day"))}function hf(f,P){let $=$0(f.startOf("month"),P);return Array.from({length:6},(z,J)=>{let Z=$[0].add(J,"week");return $0(Z,P)})}function HP(f){let P=f.daysInMonth();return Array.from({length:P},($,z)=>f.startOf("month").add(z,"day"))}function q0({referenceDate:f=F(),length:P=24}={}){return Array.from({length:P},($,z)=>f.hour(z).minute(0).second(0))}var h0=1,bP=24,M0=24,Jf=4,mP="bg-secondary text-muted-foreground pointer-events-none",kf={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6};var TP={day:"day",week:"week",month:"month",year:"year"},gf=(f)=>{let{events:P=[],firstDayOfWeek:$=0,initialView:z="month",initialDate:J=F(),businessHours:Z,onEventAdd:p,onEventUpdate:X,onEventDelete:q,onDateChange:Y,onViewChange:G,locale:Q,timezone:B,translations:W,translator:L}=f,[K,N]=c0(J),[U,A]=c0(z),[O,S]=c0(P),[M,w]=c0(!1),[T,D]=c0(null),[g,E]=c0(null),[v,R]=c0(Q||"en"),h=wP(()=>{if(L)return L;if(W)return(V)=>W[V]||V;return(V)=>ZP[V]||V},[W,L]),H=t((V,k)=>{let u=[];for(let c of O)if(c.rrule)u.push(...PP({event:c,currentEvents:O,startDate:V,endDate:k}));else{let b=c.start.isSameOrAfter(V)&&c.start.isSameOrBefore(k),d=c.end.isSameOrAfter(V)&&c.end.isSameOrBefore(k),L0=c.start.isBefore(V)&&c.end.isAfter(k);if(b||d||L0)u.push(c)}return u},[O]),X0=t(()=>{if(U==="day")return{start:K.startOf("day"),end:K.endOf("day")};if(U==="year")return{start:K.startOf("year"),end:K.endOf("year")};if(U==="week"){let k=$0(K,$);return{start:k[0].startOf("day"),end:k[6].endOf("day")}}let V=hf(K,$);return{start:V[0][0].startOf("day"),end:V[5][6].endOf("day")}},[K,U,$]),G0=wP(()=>{let{start:V,end:k}=X0();return H(V,k)},[H,X0]);zP(()=>{if(P)S(P)},[P]),zP(()=>{if(Q)R(Q),F.locale(Q),N((V)=>V.locale(Q))},[Q]),zP(()=>{if(B)F.tz.setDefault(B)},[B]);let f0=t((V)=>{N(V),Y?.(V)},[Y]),p0=t((V)=>{N((k)=>{let u=V===1?k.add(1,TP[U]):k.subtract(1,TP[U]);return Y?.(u),u})},[U,Y]),n=t(()=>p0(1),[p0]),x=t(()=>p0(-1),[p0]),T0=t(()=>{let V=F();N(V),Y?.(V)},[Y]),r0=t((V)=>{S((k)=>[...k,V]),p?.(V)},[p]),a0=t((V,k)=>{S((u)=>u.map((c)=>{if(c.id!==V)return c;let b={...c,...k};return X?.(b),b}))},[X]),n0=t((V,k,u)=>{X?.({...V,...k}),S(MP({targetEvent:V,updates:k,currentEvents:O,scope:u.scope}))},[O,X]),x0=t((V,k)=>{q?.(V),S(SP({targetEvent:V,currentEvents:O,scope:k.scope}))},[O,q]),o0=t((V)=>{S((k)=>{let u=k.find((c)=>c.id===V);if(u)q?.(u);return k.filter((c)=>c.id!==V)})},[q]),u0=t((V)=>{if(V?.start)E(V.start);let k=V?.start??K;D({title:h("newEvent"),start:k,end:V?.end??k.add(1,"hour"),resourceId:V?.resourceId,description:"",allDay:V?.allDay??!1}),w(!0)},[K,h]),I=t(()=>{E(null),D(null),w(!1)},[]),K0=t((V)=>{A(V),G?.(V)},[G]),V0=t((V)=>{let k=V.uid;return O.find((u)=>(u.uid||`${u.id}@ilamy.calendar`)===k&&u.rrule)||null},[O]);return{currentDate:K,view:U,events:G0,rawEvents:O,isEventFormOpen:M,selectedEvent:T,selectedDate:g,firstDayOfWeek:$,dayMaxEvents:Jf,currentLocale:v,businessHours:Z,setCurrentDate:N,selectDate:f0,setView:K0,nextPeriod:n,prevPeriod:x,today:T0,addEvent:r0,updateEvent:a0,updateRecurringEvent:n0,deleteEvent:o0,deleteRecurringEvent:x0,openEventForm:u0,closeEventForm:I,setSelectedEvent:D,setIsEventFormOpen:w,setSelectedDate:E,getEventsForDateRange:H,findParentRecurringEvent:V0,t:h}};import{jsx as c2}from"react/jsx-runtime";var kP=(f)=>{if(f.resourceIds)return f.resourceIds;if(f.resourceId!==void 0)return[f.resourceId];return[]},gP=({children:f,events:P=[],resources:$=[],firstDayOfWeek:z=0,initialView:J="month",initialDate:Z,renderEvent:p,onEventClick:X,onCellClick:q,onViewChange:Y,onEventAdd:G,onEventUpdate:Q,onEventDelete:B,onDateChange:W,locale:L,timezone:K,disableCellClick:N,disableEventClick:U,disableDragAndDrop:A,dayMaxEvents:O,eventSpacing:S,stickyViewHeader:M=!0,viewHeaderClassName:w="",headerComponent:T,headerClassName:D,translations:g,translator:E,renderResource:v,renderEventForm:R,businessHours:h,timeFormat:H="12-hour",classesOverride:X0,orientation:G0="horizontal"})=>{let[f0]=hP($),[p0,n]=hP(new Set($.map((b)=>b.id))),x=gf({events:P,firstDayOfWeek:z,initialView:J,initialDate:Z,businessHours:h,onEventAdd:G,onEventUpdate:Q,onEventDelete:B,onDateChange:W,onViewChange:Y,locale:L,timezone:K,translations:g,translator:E}),T0=Q0((b)=>{n((d)=>{let L0=new Set(d);if(L0.has(b))L0.delete(b);else L0.add(b);return L0})},[]),r0=Q0((b)=>{n((d)=>new Set(d).add(b))},[]),a0=Q0((b)=>{n((d)=>{let L0=new Set(d);return L0.delete(b),L0})},[]),n0=Q0(()=>{n(new Set(f0.map((b)=>b.id)))},[f0]),x0=Q0(()=>{n(new Set)},[]),o0=Q0((b)=>{return x.events.filter((d)=>{if(d.resourceIds)return d.resourceIds.includes(b);return d.resourceId===b})},[x.events]),u0=Q0((b)=>{return x.events.filter((d)=>{return kP(d).some((F2)=>b.includes(F2))})},[x.events]),I=Q0((b)=>{return f0.find((d)=>d.id===b)},[f0]),K0=Q0(()=>{return f0.filter((b)=>p0.has(b.id))},[f0,p0]),V0=Q0((b)=>{return Boolean(b.resourceIds&&b.resourceIds.length>1)},[]),V=Q0((b)=>{x.setSelectedEvent(b),x.setIsEventFormOpen(!0)},[x]),k=Q0((b)=>{if(U)return;if(X)X(b);else V(b)},[U,X,V]),u=Q0((b)=>{if(N)return;if(q)q(b);else{let d={title:x.t("newEvent"),start:b.start,end:b.end,description:"",allDay:!1};if(b.resourceId!==void 0)d.resourceId=b.resourceId;x.setSelectedEvent(d),x.setSelectedDate(b.start),x.setIsEventFormOpen(!0)}},[q,N,x]),c=u2(()=>({...x,view:x.view,setView:x.setView,events:x.events,rawEvents:x.rawEvents,resources:f0,visibleResources:p0,toggleResourceVisibility:T0,showResource:r0,hideResource:a0,showAllResources:n0,hideAllResources:x0,getEventsForResource:o0,getEventsForResources:u0,getResourceById:I,getVisibleResources:K0,isEventCrossResource:V0,getEventResourceIds:kP,onEventClick:k,onCellClick:u,headerComponent:T,headerClassName:D,renderEvent:p,renderResource:v,renderEventForm:R,locale:L,timezone:K,disableCellClick:N,disableEventClick:U,disableDragAndDrop:A,dayMaxEvents:O,eventSpacing:S,stickyViewHeader:M,viewHeaderClassName:w,businessHours:h,timeFormat:H,classesOverride:X0,orientation:G0}),[x,f0,p0,T0,r0,a0,n0,x0,o0,u0,I,K0,V0,k,u,p,v,R,L,K,N,U,A,O,S,M,w,T,D,h,H,X0,G0]);return c2(zf.Provider,{value:c,children:f})};function m(f){let P=CP(zf),$=CP(Zf);if(P)return f(P);if($)return f($);throw Error("useSmartCalendarContext must be used within a CalendarProvider or ResourceCalendarProvider")}import{jsx as Y0,jsxs as l0}from"react/jsx-runtime";function Nf({isOpen:f,onClose:P,onConfirm:$,operationType:z,eventTitle:J}){let{t:Z}=m((q)=>({t:q.t})),p=(q)=>{$(q),P()},X=z==="edit";return Y0(e0,{onOpenChange:P,open:f,children:l0(ff,{className:"max-w-md",children:[l0(Pf,{children:[Y0($f,{children:X?Z("editRecurringEvent"):Z("deleteRecurringEvent")}),l0(Tf,{children:['"',J,'"'," ",X?Z("editRecurringEventQuestion"):Z("deleteRecurringEventQuestion")]})]}),l0("div",{className:"space-y-3",children:[Y0(C,{className:"w-full justify-start h-auto p-4",onClick:()=>p("this"),variant:"outline",children:l0("div",{className:"text-left",children:[Y0("div",{className:"font-medium",children:Z("thisEvent")}),Y0("div",{className:"text-sm text-muted-foreground",children:X?Z("onlyChangeThis"):Z("onlyDeleteThis")})]})}),Y0(C,{className:"w-full justify-start h-auto p-4",onClick:()=>p("following"),variant:"outline",children:l0("div",{className:"text-left",children:[Y0("div",{className:"font-medium",children:Z("thisAndFollowingEvents")}),Y0("div",{className:"text-sm text-muted-foreground",children:X?Z("changeThisAndFuture"):Z("deleteThisAndFuture")})]})}),Y0(C,{className:"w-full justify-start h-auto p-4",onClick:()=>p("all"),variant:"outline",children:l0("div",{className:"text-left",children:[Y0("div",{className:"font-medium",children:Z("allEvents")}),Y0("div",{className:"text-sm text-muted-foreground",children:X?Z("changeEntireSeries"):Z("deleteEntireSeries")})]})})]}),Y0(wf,{children:Y0(C,{onClick:P,variant:"outline",children:Z("cancel")})})]})})}var DP=(f,P)=>{let{active:$,over:z}=f;if(!$||!z||!P)return null;let J=z.data.current?.type==="time-cell",{resourceId:Z,allDay:p}=z.data.current||{},X;if(J){let{date:Q,hour:B=0,minute:W=0}=z.data.current;X=F(Q).hour(B).minute(W)}else{let{date:Q}=z.data.current;X=F(Q)}let q=P.end.diff(P.start,"second"),Y=X.add(q,"second");if(Y.isSame(Y.startOf("day")))Y=Y.subtract(1,"day").endOf("day");let G={start:X,end:Y,resourceId:Z,allDay:J?!1:p??P.allDay};return{activeEvent:P,updates:G}};import{DragOverlay as l2}from"@dnd-kit/core";import{snapCenterToCursor as d2}from"@dnd-kit/modifiers";import{useImperativeHandle as r2,useState as a2}from"react";import{jsx as yP}from"react/jsx-runtime";var EP=({ref:f})=>{let[P,$]=a2(null);return r2(f,()=>({setActiveEvent:$})),yP(l2,{modifiers:[d2],children:P&&yP("div",{className:_("cursor-grab truncate rounded bg-amber-200 p-2 text-[10px] shadow-lg sm:text-xs w-20",P.backgroundColor||"bg-blue-500",P.color||"text-white"),children:P?.title})})};import{jsx as vP,jsxs as xP,Fragment as $1}from"react/jsx-runtime";function Cf({children:f}){let P=iP(null),$=iP(null),{updateEvent:z,updateRecurringEvent:J,disableDragAndDrop:Z}=m((U)=>({updateEvent:U.updateEvent,updateRecurringEvent:U.updateRecurringEvent,disableDragAndDrop:U.disableDragAndDrop})),[p,X]=P1({isOpen:!1,event:null,updates:null}),q=jP(t2,{activationConstraint:{distance:2}}),Y=jP(e2,{activationConstraint:{delay:100,tolerance:5}}),G=f1(q,Y),Q=(U,A)=>{if(!U||!U.id)return;if(!A||Object.keys(A).length===0)return;if(s0(U))X({isOpen:!0,event:U,updates:A});else z(U.id,A)},B=(U)=>{if(!p.event||!p.updates){X({isOpen:!1,event:null,updates:null});return}try{J(p.event,p.updates,{scope:U,eventDate:p.event.start})}catch{}finally{X({isOpen:!1,event:null,updates:null})}},W=()=>{X({isOpen:!1,event:null,updates:null})},L=(U)=>{let{active:A}=U;if(A.data.current?.type==="calendar-event")$.current?.setActiveEvent(A.data.current.event),P.current=A.data.current.event},K=(U)=>{let A=DP(U,P.current);if(A){let{activeEvent:O,updates:S}=A;Q(O,S)}P.current=null,$.current?.setActiveEvent(null)},N=(U)=>{P.current=null};if(Z)return f;return xP($1,{children:[xP(n2,{collisionDetection:s2,onDragCancel:N,onDragEnd:K,onDragStart:L,sensors:G,children:[f,vP(EP,{ref:$})]}),vP(Nf,{eventTitle:p.event?.title||"",isOpen:p.isOpen,onClose:W,onConfirm:B,operationType:"edit"})]})}import{useEffect as T1,useState as j0}from"react";import*as Df from"@radix-ui/react-checkbox";import{CheckIcon as Z1}from"lucide-react";import{jsx as JP}from"react/jsx-runtime";function k0({className:f,...P}){return JP(Df.Root,{className:_("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",f),"data-slot":"checkbox",...P,children:JP(Df.Indicator,{className:"flex items-center justify-center text-current transition-none","data-slot":"checkbox-indicator",children:JP(Z1,{className:"size-3.5"})})})}import{PopoverClose as Q1}from"@radix-ui/react-popover";import{Calendar as Y1}from"lucide-react";import{useEffect as _1,useRef as U1,useState as K1}from"react";import{ChevronDownIcon as z1,ChevronLeftIcon as J1,ChevronRightIcon as X1}from"lucide-react";import*as yf from"react";import{DayPicker as q1,getDefaultClassNames as oP}from"react-day-picker";import{jsx as g0}from"react/jsx-runtime";function uP({className:f,classNames:P,showOutsideDays:$=!0,captionLayout:z="label",buttonVariant:J="ghost",formatters:Z,components:p,...X}){let q=oP();return g0(q1,{captionLayout:z,className:_("bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,f),classNames:{root:_("w-fit",q.root),months:_("flex gap-4 flex-col md:flex-row relative",q.months),month:_("flex flex-col w-full gap-4",q.month),nav:_("flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",q.nav),button_previous:_(mf({variant:J}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",q.button_previous),button_next:_(mf({variant:J}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",q.button_next),month_caption:_("flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)",q.month_caption),dropdowns:_("w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5",q.dropdowns),dropdown_root:_("relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md",q.dropdown_root),dropdown:_("absolute bg-popover inset-0 opacity-0",q.dropdown),caption_label:_("select-none font-medium",z==="label"?"text-sm":"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5",q.caption_label),table:"w-full border-collapse",weekdays:_("flex",q.weekdays),weekday:_("text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none",q.weekday),week:_("flex w-full mt-2",q.week),week_number_header:_("select-none w-(--cell-size)",q.week_number_header),week_number:_("text-[0.8rem] select-none text-muted-foreground",q.week_number),day:_("relative w-full h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none",X.showWeekNumber?"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md":"[&:first-child[data-selected=true]_button]:rounded-l-md",q.day),range_start:_("rounded-l-md bg-accent",q.range_start),range_middle:_("rounded-none",q.range_middle),range_end:_("rounded-r-md bg-accent",q.range_end),today:_("bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",q.today),outside:_("text-muted-foreground aria-selected:text-muted-foreground",q.outside),disabled:_("text-muted-foreground opacity-50",q.disabled),hidden:_("invisible",q.hidden),...P},components:{Root:({className:Y,rootRef:G,...Q})=>{return g0("div",{className:_(Y),"data-slot":"calendar",ref:G,...Q})},Chevron:({className:Y,orientation:G,...Q})=>{if(G==="left")return g0(J1,{className:_("size-4",Y),...Q});if(G==="right")return g0(X1,{className:_("size-4",Y),...Q});return g0(z1,{className:_("size-4",Y),...Q})},DayButton:p1,WeekNumber:({children:Y,...G})=>{return g0("td",{...G,children:g0("div",{className:"flex size-(--cell-size) items-center justify-center text-center",children:Y})})},...p},formatters:{formatMonthDropdown:(Y)=>Y.toLocaleString("default",{month:"short"}),...Z},showOutsideDays:$,...X})}function p1({className:f,day:P,modifiers:$,...z}){let J=oP(),Z=yf.useRef(null);return yf.useEffect(()=>{if($.focused)Z.current?.focus()},[$.focused]),g0(C,{className:_("data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70",J.day,f),"data-day":P.date.toLocaleDateString(),"data-range-end":$.range_end,"data-range-middle":$.range_middle,"data-range-start":$.range_start,"data-selected-single":$.selected&&!$.range_start&&!$.range_end&&!$.range_middle,ref:Z,size:"icon",variant:"ghost",...z})}import*as S0 from"@radix-ui/react-popover";import{jsx as Ef}from"react/jsx-runtime";function C0({...f}){return Ef(S0.Root,{"data-slot":"popover",...f})}function D0({...f}){return Ef(S0.Trigger,{"data-slot":"popover-trigger",...f})}function y0({className:f,align:P="center",sideOffset:$=4,...z}){return Ef(S0.Portal,{children:Ef(S0.Content,{align:P,className:_("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",f),"data-slot":"popover-content",sideOffset:$,...z})})}import{jsx as Xf,jsxs as XP}from"react/jsx-runtime";function Bf({date:f,closeOnSelect:P,onChange:$,label:z="Pick a date",className:J,disabled:Z}){let p=U1(null),[X,q]=K1(f);_1(()=>{q(f)},[f]);let Y=(G)=>{if(q(G),P)p.current?.click();$?.(G)};return Xf("div",{className:J,children:XP(C0,{children:[Xf(D0,{asChild:!0,children:XP(C,{className:_("data-[empty=true]:text-muted-foreground w-full justify-start text-left font-normal"),"data-empty":!f,variant:"outline",children:[Xf(Y1,{}),X?F(X).format("MMM D, YYYY"):Xf("span",{children:z})]})}),XP(y0,{align:"start",className:"w-auto p-0",children:[Xf(Q1,{ref:p}),Xf(uP,{captionLayout:"dropdown",defaultMonth:X,disabled:Z,mode:"single",onSelect:Y,selected:X})]})]})})}import{jsx as G1}from"react/jsx-runtime";function I0({className:f,type:P,...$}){return G1("input",{className:_("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",f),"data-slot":"input",type:P,...$})}import*as cP from"@radix-ui/react-label";import{jsx as L1}from"react/jsx-runtime";function l({className:f,...P}){return L1(cP.Root,{className:_("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",f),"data-slot":"label",...P})}import*as A0 from"@radix-ui/react-scroll-area";import{jsx as Af,jsxs as N1}from"react/jsx-runtime";function W0({className:f,children:P,viewPortProps:$,...z}){return N1(A0.Root,{className:_("relative",f),"data-slot":"scroll-area",...z,children:[Af(A0.Viewport,{...$,className:_("focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",$?.className),"data-slot":"scroll-area-viewport",children:P}),Af(R0,{}),Af(A0.Corner,{})]})}function R0({className:f,orientation:P="vertical",...$}){return Af(A0.ScrollAreaScrollbar,{className:_("flex touch-none p-px transition-colors select-none",P==="vertical"&&"h-full w-2.5 border-l border-l-transparent",P==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent",f),"data-slot":"scroll-area-scrollbar",orientation:P,...$,children:Af(A0.ScrollAreaThumb,{className:"bg-border relative flex-1 rounded-full","data-slot":"scroll-area-thumb"})})}import{Clock as A1}from"lucide-react";import{useEffect as W1,useRef as dP,useState as qP}from"react";import{useMemo as B1}from"react";function lP({timeFormat:f="12-hour",minTime:P="00:00",maxTime:$="23:45"}){return{timeOptions:B1(()=>{let Z=[],[p,X]=P.split(":").map(Number),[q,Y]=$.split(":").map(Number),G=p*60+X,Q=q*60+Y;for(let B=G;B<=Q;B+=15){let W=Math.floor(B/60),L=B%60,K=`${W.toString().padStart(2,"0")}:${L.toString().padStart(2,"0")}`;Z.push(K)}return Z},[P,$]),formatTime:(Z)=>{let[p,X]=Z.split(":").map(Number),q=p>=12?"PM":"AM",Y=p===0?12:p>12?p-12:p;if(f==="24-hour")return`${p.toString().padStart(2,"0")}:${X.toString().padStart(2,"0")}`;return`${Y}:${X.toString().padStart(2,"0")} ${q}`}}}import{jsx as E0,jsxs as pP}from"react/jsx-runtime";var O1=(f)=>{f.stopPropagation()};function QP({value:f,onChange:P,minTime:$="00:00",maxTime:z="23:45",timeFormat:J="12-hour",placeholder:Z="Select time...",className:p,disabled:X=!1,name:q}){let[Y,G]=qP(!1),[Q,B]=qP(""),W=dP(null),L=dP(null),[K,N]=qP(0),{timeOptions:U,formatTime:A}=lP({timeFormat:J,minTime:$,maxTime:z}),O=U.filter((w)=>{return A(w).toLowerCase().includes(Q.toLowerCase())}),S=(w)=>{P(w),G(!1),B("")};W1(()=>{if(Y){if(L.current)N(L.current.offsetWidth);setTimeout(()=>{W.current?.focus()},0)}},[Y]);let M=f?A(f):Z;return pP(C0,{onOpenChange:G,open:Y,children:[E0(D0,{asChild:!0,children:pP(C,{"aria-controls":"time-picker-listbox","aria-expanded":Y,className:_("w-full justify-start",p),"data-testid":`time-picker-${q}`,disabled:X,ref:L,role:"combobox",variant:"outline",children:[E0(A1,{className:"mr-2 h-4 w-4"}),M]})}),pP(y0,{align:"start",className:"p-0",style:{width:K},children:[E0("div",{className:"p-2 border-b",children:E0(I0,{className:"h-8",onChange:(w)=>B(w.target.value),placeholder:"Search time...",ref:W,value:Q})}),E0(W0,{className:"h-[200px]",onWheel:O1,children:E0("div",{className:"p-1",children:O.length===0?E0("div",{className:"py-6 text-center text-sm text-muted-foreground",children:"N/A"}):O.map((w)=>{let T=A(w);return E0("button",{className:_("relative flex w-full cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground",w===f&&"bg-accent text-accent-foreground"),onClick:()=>S(w),type:"button",children:T},w)})})})]})]})}var rP={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6},jf=(f,P)=>{if(!P)return;if(!Array.isArray(P))return P;let $=f.day();return P.find((z)=>{if(!z.daysOfWeek)return!1;return z.daysOfWeek.some((J)=>rP[J]===$)})},Wf=(f,P)=>{if(!P)return!0;let $=jf(f,P);if(!$)return!1;if($.daysOfWeek)return $.daysOfWeek.some((z)=>rP[z]===f.day());return!0},aP=({date:f,hour:P,minute:$=0,businessHours:z})=>{if(!Wf(f,z))return!1;if(!z)return!0;if(P===void 0)return!0;let J=jf(f,z);if(!J)return!1;let Z=J.startTime??9,p=J.endTime??17,X=P*60+$,q=Z*60,Y=p*60;if(X<q||X>=Y)return!1;return!0};var YP=(f,P,$)=>{let[z,J]=P.split(":").map(Number),Z=F(f).hour(z).minute(J);return $?Z.hour(0).minute(0):Z},nP=(f,P,$)=>{let[z,J]=P.split(":").map(Number),Z=F(f).hour(z).minute(J);return $?Z.hour(23).minute(59):Z},_P=(f,P)=>{if(!P)return{min:"00:00",max:"23:59"};let $=F(f);if(!Wf($,P))return{min:"00:00",max:"23:59"};let z=jf($,P);if(!z)return{min:"00:00",max:"23:59"};return{min:`${(z.startTime??9).toString().padStart(2,"0")}:00`,max:`${((z.endTime??17)-1).toString().padStart(2,"0")}:45`}};import{useEffect as I1,useMemo as R1,useState as q5}from"react";import{RRule as z0}from"rrule";import{jsx as vf}from"react/jsx-runtime";function tP({className:f,...P}){return vf("div",{className:_("text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm",f),"data-slot":"card",...P})}function sP({className:f,...P}){return vf("div",{className:_("@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]",f),"data-slot":"card-header",...P})}function eP({className:f,...P}){return vf("div",{className:_("leading-none font-semibold",f),"data-slot":"card-title",...P})}function f5({className:f,...P}){return vf("div",{className:_("p-4 pt-0",f),"data-slot":"card-content",...P})}import*as y from"@radix-ui/react-select";import{CheckIcon as F1,ChevronDownIcon as P5,ChevronUpIcon as V1}from"lucide-react";import{jsx as s,jsxs as UP}from"react/jsx-runtime";function $5({...f}){return s(y.Root,{"data-slot":"select",...f})}function Z5({...f}){return s(y.Value,{"data-slot":"select-value",...f})}function z5({className:f,size:P="default",children:$,...z}){return UP(y.Trigger,{className:_("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",f),"data-size":P,"data-slot":"select-trigger",...z,children:[$,s(y.Icon,{asChild:!0,children:s(P5,{className:"size-4 opacity-50"})})]})}function J5({className:f,children:P,position:$="popper",align:z="center",...J}){return s(y.Portal,{children:UP(y.Content,{align:z,className:_("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",$==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",f),"data-slot":"select-content",position:$,...J,children:[s(M1,{}),s(y.Viewport,{className:_("p-1",$==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:P}),s(S1,{})]})})}function X5({className:f,children:P,...$}){return UP(y.Item,{className:_("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",f),"data-slot":"select-item",...$,children:[s("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:s(y.ItemIndicator,{children:s(F1,{className:"size-4"})})}),s(y.ItemText,{children:P})]})}function M1({className:f,...P}){return s(y.ScrollUpButton,{className:_("flex cursor-default items-center justify-center py-1",f),"data-slot":"select-scroll-up-button",...P,children:s(V1,{className:"size-4"})})}function S1({className:f,...P}){return s(y.ScrollDownButton,{className:_("flex cursor-default items-center justify-center py-1",f),"data-slot":"select-scroll-down-button",...P,children:s(P5,{className:"size-4"})})}import{jsx as j,jsxs as Z0}from"react/jsx-runtime";var KP={DAILY:z0.DAILY,WEEKLY:z0.WEEKLY,MONTHLY:z0.MONTHLY,YEARLY:z0.YEARLY},H1=Object.fromEntries(Object.entries(KP).map(([f,P])=>[P,f])),p5=[z0.SU,z0.MO,z0.TU,z0.WE,z0.TH,z0.FR,z0.SA],b1=["sun","mon","tue","wed","thu","fri","sat"],Q5=(f)=>Math.max(1,Number.parseInt(f,10)||1),m1=(f,P)=>{if(!f)return P("customRecurrence");try{let $=new z0(f).toText();return $&&!$.toLowerCase().includes("error")?$.charAt(0).toUpperCase()+$.slice(1):P("customRecurrence")}catch{return P("customRecurrence")}},Y5=({value:f,onChange:P})=>{let{t:$}=m((K)=>({t:K.t})),[z,J]=q5(!!f),[Z,p]=q5(()=>f||null),X=R1(()=>b1.map((K,N)=>({value:p5[N],label:$(K)})),[$]);I1(()=>{if(J(!!f),f)p(f)},[f]);let q=(K)=>{if(!Z)return;let N={...Z,...K};p(N),P(z?N:null)},Y=(K)=>{if(J(K),!K){P(null);return}if(Z){P(Z);return}let N={freq:z0.DAILY,interval:1};p(N),P(N)},G=(K)=>{let N=Z?.byweekday||[],U=p5[K],A=N.includes(U)?N.filter((O)=>O!==U):[...N,U];q({byweekday:A.length?A:void 0})},Q=(K)=>{let N={count:void 0,until:void 0};if(K==="count")N.count=Z?.count||1;if(K==="until")N.until=Z?.until||F().add(1,"month").endOf("day").toDate();q(N)},B=Z?.until?"until":Z?.count?"count":"never",W=H1[Z?.freq??z0.DAILY]||"DAILY",L=Array.isArray(Z?.byweekday)?Z.byweekday:Z?.byweekday?[Z.byweekday]:[];return Z0(tP,{"data-testid":"recurrence-editor",children:[Z0(sP,{className:"pb-3",children:[Z0("div",{className:"flex items-center space-x-2",children:[j(k0,{checked:z,"data-testid":"toggle-recurrence",id:"recurring",onCheckedChange:Y}),j(eP,{className:"text-sm",children:$("repeat")})]}),z&&f&&j("p",{className:"text-xs text-muted-foreground",children:m1(f,$)})]}),z&&j(f5,{className:"pt-0",children:Z0("div",{className:"space-y-4",children:[Z0("div",{className:"grid grid-cols-2 gap-4",children:[Z0("div",{children:[j(l,{className:"text-xs",htmlFor:"frequency",children:$("repeats")}),Z0($5,{onValueChange:(K)=>q({freq:KP[K]}),value:W,children:[j(z5,{className:"h-8","data-testid":"frequency-select",id:"frequency",children:j(Z5,{})}),j(J5,{children:Object.keys(KP).map((K)=>j(X5,{value:K,children:$(K.toLowerCase())},K))})]})]}),Z0("div",{children:[j(l,{className:"text-xs",htmlFor:"interval",children:$("every")}),j(I0,{className:"h-8",id:"interval",min:"1",onChange:(K)=>q({interval:Q5(K.target.value)}),type:"number",value:Z?.interval||1})]})]}),Z?.freq===z0.WEEKLY&&Z0("div",{children:[j(l,{className:"text-xs",children:$("repeatOn")}),j("div",{className:"flex flex-wrap gap-1 mt-1",children:X.map((K,N)=>Z0("div",{className:"flex items-center space-x-1",children:[j(k0,{checked:L.includes(K.value),id:`day-${N}`,onCheckedChange:()=>G(N)}),j(l,{className:"text-xs cursor-pointer",htmlFor:`day-${N}`,children:K.label})]},K.label))})]}),Z0("div",{children:[j(l,{className:"text-xs",children:$("ends")}),Z0("div",{className:"space-y-2 mt-1",children:[Z0("div",{className:"flex items-center space-x-2",children:[j(k0,{checked:B==="never",id:"never",onCheckedChange:()=>Q("never")}),j(l,{className:"text-xs",htmlFor:"never",children:$("never")})]}),Z0("div",{className:"flex items-center space-x-2",children:[j(k0,{checked:B==="count",id:"after",onCheckedChange:()=>Q("count")}),j(l,{className:"text-xs",htmlFor:"after",children:$("after")}),B==="count"&&j(I0,{className:"h-6 w-16 text-xs","data-testid":"count-input",min:"1",onChange:(K)=>q({count:Q5(K.target.value)}),type:"number",value:Z?.count||1}),j("span",{className:"text-xs",children:$("occurrences")})]}),Z0("div",{className:"flex items-center space-x-2",children:[j(k0,{checked:B==="until",id:"on",onCheckedChange:()=>Q("until")}),j(l,{className:"text-xs",htmlFor:"on",children:$("on")}),B==="until"&&j(Bf,{className:"h-6",date:Z?.until,onChange:(K)=>q({until:K?F(K).endOf("day").toDate():void 0})})]})]})]})]})})]})};import{useCallback as xf,useState as w1}from"react";function _5(f){let{updateRecurringEvent:P,deleteRecurringEvent:$}=m((Y)=>({updateRecurringEvent:Y.updateRecurringEvent,deleteRecurringEvent:Y.deleteRecurringEvent})),[z,J]=w1({isOpen:!1,operationType:"edit",event:null}),Z=xf((Y,G)=>{J({isOpen:!0,operationType:"edit",event:Y,updates:G,onConfirm:(Q)=>{P(Y,G,{scope:Q,eventDate:Y.start})}})},[P]),p=xf((Y)=>{J({isOpen:!0,operationType:"delete",event:Y,onConfirm:(G)=>{$(Y,{scope:G,eventDate:Y.start})}})},[$]),X=xf(()=>{J({isOpen:!1,operationType:"edit",event:null})},[]),q=xf((Y)=>{if(z.onConfirm)z.onConfirm(Y);X(),f?.()},[z,X,f]);return{dialogState:z,openEditDialog:Z,openDeleteDialog:p,closeDialog:X,handleConfirm:q}}import{jsx as i,jsxs as e,Fragment as k1}from"react/jsx-runtime";var h1=["blue","green","purple","red","yellow","pink","indigo","amber","emerald","sky","violet","rose","teal","orange"],U5=h1.map((f)=>({value:`bg-${f}-100 text-${f}-800`,label:f.charAt(0).toUpperCase()+f.slice(1)})),K5=({selectedEvent:f,onClose:P,onUpdate:$,onDelete:z,onAdd:J})=>{let{dialogState:Z,openEditDialog:p,openDeleteDialog:X,closeDialog:q,handleConfirm:Y}=_5(P),{findParentRecurringEvent:G,t:Q,businessHours:B,timeFormat:W}=m((I)=>({findParentRecurringEvent:I.findParentRecurringEvent,t:I.t,businessHours:I.businessHours,timeFormat:I.timeFormat})),L=f?.start??F(),K=f?.end??F().add(1,"hour"),N=f?G(f):null,[U,A]=j0(L.toDate()),[O,S]=j0(K.toDate()),[M,w]=j0(f?.allDay||!1),[T,D]=j0(f?.color||U5[0].value),[g,E]=j0(L.format("HH:mm")),[v,R]=j0(K.format("HH:mm")),[h,H]=j0({title:f?.title||"",description:f?.description||"",location:f?.location||""}),[X0,G0]=j0(()=>{return f?.rrule||N?.rrule||null}),f0=(I)=>{if(A(I),I&&F(I).isAfter(F(O)))S(I)},p0=(I)=>{if(S(I),I&&F(I).isBefore(F(U)))A(I)},n=(I)=>{if(E(I),F(U).isSame(F(O),"day")&&I>v)R(I)},x=(I)=>{if(R(I),F(U).isSame(F(O),"day")&&I<g)E(I)},T0=(I)=>{let{name:K0,value:V0}=I.target;H((V)=>({...V,[K0]:V0}))};T1(()=>{if(M)R("23:59")},[M]);let r0=(I)=>{I.preventDefault();let K0=YP(U,g,M),V0=nP(O,v,M),V={id:f?.id||F().format("YYYYMMDDHHmmss"),title:h.title,start:K0,end:V0,resourceId:f?.resourceId,description:h.description,location:h.location,allDay:M,color:T,rrule:X0||void 0};if(f?.id&&s0(f)){p(f,{title:h.title,start:K0,end:V0,description:h.description,location:h.location,allDay:M,color:T,rrule:X0||void 0});return}if(f?.id)$?.(V);else J?.(V);P()},a0=()=>{if(f?.id){if(s0(f)){X(f);return}z?.(f),P()}},n0=(I)=>{if(!I){G0(null);return}let K0=YP(U,g,M);G0({...I,dtstart:K0.toDate()})},x0=B?(I)=>!Wf(F(I),B):void 0,o0=_P(U,B),u0=_P(O,B);return e(k1,{children:[e("form",{className:"flex flex-col flex-1 min-h-0",onSubmit:r0,children:[i(W0,{className:"flex-1 min-h-0",children:e("div",{className:"grid gap-3 sm:gap-4 p-1",children:[e("div",{className:"grid gap-2",children:[i(l,{className:"text-xs sm:text-sm",htmlFor:"title",children:Q("title")}),i(I0,{className:"h-8 text-sm sm:h-9",id:"title",name:"title",onChange:T0,placeholder:Q("eventTitlePlaceholder"),required:!0,value:h.title})]}),e("div",{className:"grid gap-1 sm:gap-2",children:[i(l,{className:"text-xs sm:text-sm",htmlFor:"description",children:Q("description")}),i(I0,{className:"h-8 text-sm sm:h-9",id:"description",name:"description",onChange:T0,placeholder:Q("eventDescriptionPlaceholder"),value:h.description})]}),e("div",{className:"flex items-center space-x-2",children:[i(k0,{checked:M,id:"allDay",onCheckedChange:(I)=>w(I===!0)}),i(l,{className:"text-xs sm:text-sm",htmlFor:"allDay",children:Q("allDay")})]}),e("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[e("div",{children:[i(l,{className:"text-xs sm:text-sm",children:Q("startDate")}),i(Bf,{className:"mt-1",closeOnSelect:!0,date:U,disabled:x0,onChange:f0})]}),e("div",{children:[i(l,{className:"text-xs sm:text-sm",children:Q("endDate")}),i(Bf,{className:"mt-1",closeOnSelect:!0,date:O,disabled:x0,onChange:p0})]})]}),!M&&e("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[e("div",{children:[i(l,{className:"text-xs sm:text-sm",children:Q("startTime")}),i(QP,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:o0.max,minTime:o0.min,name:"start-time",onChange:n,timeFormat:W,value:g})]}),e("div",{children:[i(l,{className:"text-xs sm:text-sm",children:Q("endTime")}),i(QP,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:u0.max,minTime:u0.min,name:"end-time",onChange:x,timeFormat:W,value:v})]})]}),e("div",{className:"grid gap-1 sm:gap-2",children:[i(l,{className:"text-xs sm:text-sm",children:Q("color")}),i("div",{className:"flex flex-wrap gap-2",children:U5.map((I)=>i(C,{"aria-label":I.label,className:_(`${I.value} h-6 w-6 rounded-full sm:h-8 sm:w-8`,T===I.value&&"ring-2 ring-black ring-offset-1 sm:ring-offset-2"),onClick:()=>D(I.value),type:"button",variant:"ghost"},I.value))})]}),e("div",{className:"grid gap-1 sm:gap-2",children:[i(l,{className:"text-xs sm:text-sm",htmlFor:"location",children:Q("location")}),i(I0,{className:"h-8 text-sm sm:h-9",id:"location",name:"location",onChange:T0,placeholder:Q("eventLocationPlaceholder"),value:h.location})]}),i(Y5,{onChange:n0,value:X0})]})}),e(wf,{className:"mt-4 shrink-0 flex flex-col-reverse gap-2 sm:flex-row sm:gap-0",children:[f?.id&&i(C,{className:"w-full sm:mr-auto sm:w-auto",onClick:a0,size:"sm",type:"button",variant:"destructive",children:Q("delete")}),e("div",{className:"flex w-full gap-2 sm:w-auto",children:[i(C,{className:"flex-1 sm:flex-none",onClick:P,size:"sm",type:"button",variant:"outline",children:Q("cancel")}),i(C,{className:"flex-1 sm:flex-none",size:"sm",type:"submit",children:f?.id?Q("update"):Q("create")})]})]})]}),i(Nf,{eventTitle:Z.event?.title||"",isOpen:Z.isOpen,onClose:q,onConfirm:Y,operationType:Z.operationType})]})};import{jsx as of,jsxs as G5}from"react/jsx-runtime";var uf=()=>{let{t:f,selectedEvent:P,isEventFormOpen:$,closeEventForm:z,addEvent:J,updateEvent:Z,deleteEvent:p,renderEventForm:X}=m((Q)=>({t:Q.t,selectedEvent:Q.selectedEvent,isEventFormOpen:Q.isEventFormOpen,closeEventForm:Q.closeEventForm,addEvent:Q.addEvent,updateEvent:Q.updateEvent,deleteEvent:Q.deleteEvent,renderEventForm:Q.renderEventForm})),G={open:$,onClose:z,selectedEvent:P,onAdd:J,onUpdate:(Q)=>{Z(Q.id,Q)},onDelete:(Q)=>{p(Q.id)}};if(X)return X(G);return of(e0,{onOpenChange:z,open:$,children:G5(ff,{className:"flex flex-col h-[90vh] w-[90vw] max-w-[500px] p-4 sm:p-6 overflow-hidden gap-0",children:[G5(Pf,{className:"mb-2 sm:mb-4 shrink-0",children:[of($f,{className:"text-base sm:text-lg",children:P?.id?f("editEvent"):f("createEvent")}),of(Tf,{className:"text-xs sm:text-sm",children:P?.id?f("editEventDetails"):f("addNewEvent")})]}),of(K5,{...G})]})})};import{Calendar as e1,Download as f4,Menu as P4,Plus as $4}from"lucide-react";import{useState as Z4}from"react";import{RRule as g1}from"rrule";var GP=`\r
|
|
2
|
+
`,C1=["BEGIN:VTIMEZONE","TZID:UTC","BEGIN:STANDARD","DTSTART:19700101T000000","TZNAME:UTC","TZOFFSETFROM:+0000","TZOFFSETTO:+0000","END:STANDARD","END:VTIMEZONE"].join(GP),lf=(f)=>{return f.replaceAll("\\","\\\\").replaceAll(";","\\;").replaceAll(",","\\,").replaceAll(`
|
|
3
|
+
`,"\\n").replaceAll("\r","")},cf=(f,P=!1)=>{return P?f.format("YYYYMMDD"):f.utc().format("YYYYMMDD[T]HHmmss[Z]")},L5=(f)=>{return f.uid||`${f.id}@ilamy.calendar`},D1=(f)=>{try{return new g1(f).toString().split(`
|
|
4
|
+
`).find(($)=>$.startsWith("RRULE:"))||""}catch{return""}},y1=(f)=>{let P=F().utc().format("YYYYMMDD[T]HHmmss[Z]"),$=f.allDay?";VALUE=DATE":"",z=f.rrule?D1(f.rrule):"",J=f.exdates?.length?f.exdates.map((X)=>cf(F(X),f.allDay)).join(","):null,Z=f.recurrenceId?cf(F(f.recurrenceId),f.allDay):null;return["BEGIN:VEVENT",`UID:${L5(f)}`,`DTSTART${$}:${cf(f.start,f.allDay)}`,`DTEND${$}:${cf(f.end,f.allDay)}`,`SUMMARY:${lf(f.title)}`,f.description&&`DESCRIPTION:${lf(f.description)}`,f.location&&`LOCATION:${lf(f.location)}`,z,J&&`EXDATE:${J}`,Z&&`RECURRENCE-ID:${Z}`,`DTSTAMP:${P}`,`CREATED:${P}`,`LAST-MODIFIED:${P}`,"STATUS:CONFIRMED","SEQUENCE:0","TRANSP:OPAQUE","END:VEVENT"].filter(Boolean).join(GP)},E1=(f)=>{let P=new Set;return f.filter(($)=>{let z=L5($),J=$.rrule&&!$.recurrenceId,Z=$.recurrenceId&&!$.rrule;if(J)return P.add(z),!0;if(Z)return!0;return!$.rrule&&!$.recurrenceId&&!P.has(z)})},j1=(f,P="ilamy Calendar")=>{let $=lf(P),z=E1(f).map(y1);return["BEGIN:VCALENDAR","VERSION:2.0","PRODID:-//ilamy//ilamy Calendar//EN","CALSCALE:GREGORIAN","METHOD:PUBLISH",`X-WR-CALNAME:${$}`,`X-WR-CALDESC:Exported from ${$}`,C1,...z,"END:VCALENDAR"].join(GP)},N5=(f,P="calendar.ics",$="ilamy Calendar")=>{let z=new Blob([j1(f,$)],{type:"text/calendar;charset=utf-8"}),J=URL.createObjectURL(z),Z=P.endsWith(".ics")?P:`${P}.ics`,p=document.createElement("a");p.href=J,p.download=Z,document.body.append(p),p.click(),p.remove(),URL.revokeObjectURL(J)};import{ChevronDown as i1}from"lucide-react";import{AnimatePresence as v1,motion as x1}from"motion/react";import{useMemo as o1,useState as u1}from"react";import{jsx as r,jsxs as rf,Fragment as df}from"react/jsx-runtime";var c1=["january","february","march","april","may","june","july","august","september","october","november","december"],l1={initial:{opacity:0,y:10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10}},d1=()=>{let{currentDate:f,view:P,setCurrentDate:$,t:z,firstDayOfWeek:J}=m((U)=>({currentDate:U.currentDate,view:U.view,setCurrentDate:U.setCurrentDate,t:U.t,firstDayOfWeek:U.firstDayOfWeek})),[Z,p]=u1(null),X=o1(()=>c1.map((U)=>z(U)),[z]),q=f.year(),Y=Array.from({length:11},(U,A)=>q-5+A),G=$0(f,J),Q=(U)=>{$(U),p(null)},B=()=>r(df,{children:X.map((U,A)=>r(C,{className:_("justify-start font-normal",f.month()===A&&"bg-primary/10"),onClick:()=>Q(f.month(A)),variant:"ghost",children:U},U))}),W=()=>r(df,{children:Y.map((U)=>r(C,{className:_("justify-start font-normal",f.year()===U&&"bg-primary/10"),onClick:()=>Q(f.year(U)),variant:"ghost",children:U},U))}),L=()=>r(df,{children:Array.from({length:7},(U,A)=>{let O=f.subtract(3,"week").add(A,"week"),S=$0(O,J),M=S[0],w=S[6],T=O.isSame(f,"week"),D=M.month()!==w.month();return r(C,{className:_("justify-start font-normal",T&&"bg-primary/10"),onClick:()=>Q(M),variant:"ghost",children:rf("div",{className:"flex w-full items-center justify-between",children:[r("span",{children:`${M.format("MMM D")} - ${w.format("D")}`}),D&&r("span",{className:"ml-0.5 text-xs opacity-70",children:`${M.format("MMM")}-${w.format("MMM")}`})]})},M.format("YYYY-MM-DD"))})}),K=()=>{let U=f.startOf("month"),A=f.daysInMonth();return r(df,{children:Array.from({length:A},(O,S)=>{let M=U.date(S+1),w=M.isSame(f,"day"),T=M.isSame(F(),"day");return r(C,{className:_("justify-start font-normal",w&&"bg-primary/10"),onClick:()=>Q(M),variant:"ghost",children:rf("div",{className:"flex w-full items-center justify-between",children:[r("span",{children:M.format("dddd, MMM D")}),T&&r("span",{className:"bg-primary text-primary-foreground rounded-sm px-1! text-xs",children:z("today")})]})},M.format("YYYY-MM-DD"))})})};return[{id:"month",hidden:P==="year",title:f.format("MMMM"),render:B},{id:"year",hidden:!1,title:f.format("YYYY"),render:W},{id:"week",hidden:P!=="week",title:`${G[0].format("MMM D")} - ${G[6].format("MMM D")}`,render:L},{id:"day",hidden:P!=="day",title:f.format("dddd, D"),render:K}].filter((U)=>!U.hidden).map((U)=>rf(C0,{onOpenChange:(A)=>p(A?U.id:null),open:Z===U.id,children:[r(D0,{asChild:!0,children:rf(C,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",variant:"ghost",children:[r(v1,{mode:"wait",children:r(x1.span,{animate:"animate","data-testid":"calendar-month-display",exit:"exit",initial:"initial",transition:{duration:0.25,ease:"easeInOut"},variants:l1,children:U.title},`${U.id}-${f.format("YYYY-MM-DD")}`)}),r(i1,{className:"h-4 w-4"})]})}),r(y0,{className:"w-40 p-0",children:r("div",{className:"flex max-h-60 flex-col overflow-auto",children:U.render()})})]},U.id))},B5=d1;import{ChevronLeft as r1,ChevronRight as a1}from"lucide-react";import{jsx as qf,jsxs as s1}from"react/jsx-runtime";var n1=["day","week","month","year"],t1=({currentView:f,onChange:P,variant:$="default",size:z="sm",className:J,onToday:Z,onNext:p,onPrevious:X})=>{let{t:q,resources:Y}=m((L)=>({t:L.t,resources:L.resources})),G=$==="grid",Q=Y&&Y.length>0,B=(L)=>{return _(G?"w-full":"",f===L&&"bg-primary/80")},W=(L)=>{return f===L?"default":"outline"};return s1("div",{className:_(G?"grid grid-cols-2 gap-2":"flex gap-1",J),children:[qf(C,{onClick:X,size:z,variant:"outline",children:qf(r1,{className:"h-4 w-4"})}),qf(C,{onClick:p,size:z,variant:"outline",children:qf(a1,{className:"h-4 w-4"})}),n1.map((L)=>{if(Q&&L==="year")return null;return qf(C,{className:B(L),onClick:()=>P(L),size:z,variant:W(L),children:q(L)},L)}),qf(C,{onClick:Z,size:z,variant:"outline",children:q("today")})]})},LP=t1;import{jsx as a,jsxs as H0}from"react/jsx-runtime";var z4=({className:f=""})=>{let{view:P,setView:$,nextPeriod:z,prevPeriod:J,today:Z,openEventForm:p,headerComponent:X,headerClassName:q,rawEvents:Y,t:G}=m((U)=>({view:U.view,setView:U.setView,nextPeriod:U.nextPeriod,prevPeriod:U.prevPeriod,today:U.today,openEventForm:U.openEventForm,headerComponent:U.headerComponent,headerClassName:U.headerClassName,rawEvents:U.rawEvents,t:U.t})),[Q,B]=Z4(!1),W=()=>B(!1),L=()=>{let U=`ilamy-calendar-${new Date().toISOString().split("T")[0]}.ics`;N5(Y,U,"ilamy Calendar"),W()},K=()=>H0(C,{className:"flex items-center gap-1",onClick:()=>p(),size:"sm",variant:"default",children:[a($4,{className:"h-4 w-4"}),a("span",{className:"hidden @4xl:inline",children:G("new")})]}),N=({fullWidth:U=!1})=>H0(C,{className:_("flex items-center gap-1",U&&"w-full gap-2"),onClick:L,size:"sm",variant:"outline",children:[a(f4,{className:"h-4 w-4"}),U?`${G("export")} Calendar (.ics)`:a("span",{className:"hidden @4xl/base-header:inline",children:G("export")})]});if(X)return X;return a("div",{className:"@container/base-header w-full","data-testid":"calendar-header",children:H0("div",{className:_("flex justify-center @2xl/base-header:justify-between flex-wrap items-center gap-2",f,q),children:[H0("div",{className:"flex flex-wrap items-center justify-center gap-1 @2xl/base-header:justify-start",children:[a(e1,{className:"h-5 w-5"}),a(B5,{})]}),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:[a(LP,{className:"justify-end",currentView:P,onChange:$,onNext:z,onPrevious:J,onToday:Z,variant:"default"}),a(K,{}),a(N,{})]}),H0("div",{className:"flex items-center justify-end gap-1 @md/base-header:hidden",children:[a(K,{}),H0(C0,{onOpenChange:B,open:Q,children:[a(D0,{asChild:!0,children:a(C,{size:"sm",variant:"outline",children:a(P4,{className:"h-4 w-4"})})}),a(y0,{align:"end",className:"w-[240px] p-2",children:H0("div",{className:"space-y-2",children:[a(LP,{currentView:P,onChange:(U)=>{$(U),W()},onNext:()=>{z(),W()},onPrevious:()=>{J(),W()},onToday:()=>{Z(),W()},variant:"grid"}),a("div",{className:"pt-2 border-t",children:a(N,{fullWidth:!0})})]})})]})]})]})]})})},Of=z4;import{AnimatePresence as u4,motion as c4}from"motion/react";import{memo as b4}from"react";import{memo as M4}from"react";import B4,{memo as A4,useMemo as W4}from"react";import{jsx as J4}from"react/jsx-runtime";var A5=({date:f,locale:P="en",className:$})=>{let z=f.isSame(F(),"day");return J4("div",{className:_("flex h-5 w-5 items-center justify-center rounded-full text-xs shrink-0",z&&"bg-primary text-primary-foreground font-medium",$),"data-testid":z?"day-number-today":`day-number-${f.format("D")}`,children:Intl.DateTimeFormat(P,{day:"numeric"}).format(f.toDate())})};import{useImperativeHandle as K4,useState as W5}from"react";import{useDraggable as X4}from"@dnd-kit/core";import{AnimatePresence as q4,motion as p4}from"motion/react";import{memo as Q4}from"react";import{jsx as pf,jsxs as U4}from"react/jsx-runtime";var Y4=(f,P)=>{if(f&&P)return"rounded-none";if(f)return"rounded-r-md rounded-l-none";if(P)return"rounded-l-md rounded-r-none";return"rounded-md"};function _4({elementId:f,event:P,className:$,style:z,disableDrag:J=!1}){let{onEventClick:Z,renderEvent:p,disableEventClick:X,disableDragAndDrop:q}=m((L)=>({onEventClick:L.onEventClick,renderEvent:L.renderEvent,disableEventClick:L.disableEventClick,disableDragAndDrop:L.disableDragAndDrop})),{attributes:Y,listeners:G,setNodeRef:Q,isDragging:B}=X4({id:f,data:{event:P,type:"calendar-event"},disabled:J||q}),W=()=>{let L=P,K=L.isTruncatedStart,N=L.isTruncatedEnd;return U4("div",{className:_(P.backgroundColor||"bg-blue-500",P.color||"text-white","h-full w-full px-1 border-[1.5px] border-card text-left overflow-clip relative",Y4(K,N)),style:{backgroundColor:P.backgroundColor,color:P.color},children:[K&&pf("div",{className:"absolute left-0 top-0 bottom-0 w-0.5 bg-foreground/25"}),pf("p",{className:_("text-[10px] font-semibold sm:text-xs mt-0.5",K&&"pl-1",N&&"pr-1"),children:P.title}),N&&pf("div",{className:"absolute right-0 top-0 bottom-0 w-0.5 bg-foreground/25"})]})};return pf(q4,{mode:"wait",children:pf(p4.div,{ref:Q,...Y,...G,animate:{opacity:1,y:0},className:_("truncate h-full w-full",J||q?X?"cursor-default":"cursor-pointer":"cursor-grab",B&&!(J||q)&&"cursor-grabbing shadow-lg",$),exit:{opacity:0,y:-50},initial:{opacity:0,y:-50},layout:!0,layoutId:f,onClick:(L)=>{L.stopPropagation(),Z(P)},style:z,transition:{duration:0.4,ease:"easeInOut"},children:p?p(P):pf(W,{})},f)})}var Qf=Q4(_4,(f,P)=>{return f.elementId===P.elementId&&f.disableDrag===P.disableDrag&&f.className===P.className&&f.event===P.event});import{jsx as Ff,jsxs as G4}from"react/jsx-runtime";var O5=({ref:f})=>{let[P,$]=W5(!1),[z,J]=W5(null),{currentDate:Z,firstDayOfWeek:p}=m((Y)=>({currentDate:Y.currentDate,firstDayOfWeek:Y.firstDayOfWeek}));K4(f,()=>({open:()=>$(!0),close:()=>$(!1),setSelectedDayEvents:(Y)=>J(Y)}));let q=Z.startOf("month").clone();while(q.day()!==p)q=q.subtract(1,"day");return Ff(e0,{onOpenChange:$,open:P,children:G4(ff,{className:"max-h-[80vh] max-w-md overflow-y-auto",children:[Ff(Pf,{children:Ff($f,{children:z?.day.format("MMMM D, YYYY")})}),Ff("div",{className:"mt-4 space-y-3",children:z?.events.map((Y)=>{return Ff(Qf,{className:"relative my-1 h-[30px]",elementId:`all-events-dialog-event-$${Y.id}`,event:Y},Y.id)})})]})})};import{useDroppable as L4}from"@dnd-kit/core";import{jsx as N4}from"react/jsx-runtime";function F5({id:f,type:P,date:$,hour:z,minute:J,resourceId:Z,allDay:p,children:X,className:q,style:Y,"data-testid":G,disabled:Q=!1}){let{onCellClick:B,disableDragAndDrop:W,disableCellClick:L,classesOverride:K}=m((O)=>({onCellClick:O.onCellClick,disableDragAndDrop:O.disableDragAndDrop,disableCellClick:O.disableCellClick,classesOverride:O.classesOverride})),{isOver:N,setNodeRef:U}=L4({id:f,data:{type:P,date:$,hour:z,minute:J,resourceId:Z,allDay:p},disabled:W||Q}),A=(O)=>{if(O.stopPropagation(),L||Q)return;let S=$.hour(z??0).minute(J??0),M=S.clone();if(z!==void 0&&J!==void 0)M=M.hour(z).minute(J+15);else if(z!==void 0)M=M.hour(z+1).minute(0);else M=M.hour(23).minute(59);B({start:S,end:M,resourceId:Z,allDay:p})};return N4("div",{className:_("droppable-cell",q,N&&!W&&!Q&&"bg-accent",L||Q?"cursor-default":"cursor-pointer",Q&&(K?.disabledCell||mP)),"data-testid":G,onClick:A,ref:U,style:Y,children:X})}import{jsx as af,jsxs as nf,Fragment as V5}from"react/jsx-runtime";var O4=({day:f,hour:P,minute:$,className:z="",resourceId:J,gridType:Z="day",shouldRenderEvents:p=!0,allDay:X=!1,"data-testid":q,showDayNumber:Y=!1,children:G})=>{let Q=B4.useRef(null),{dayMaxEvents:B=0,getEventsForDateRange:W,currentDate:L,t:K,getEventsForResource:N,businessHours:U,currentLocale:A}=m((R)=>({dayMaxEvents:R.dayMaxEvents,getEventsForDateRange:R.getEventsForDateRange,currentDate:R.currentDate,firstDayOfWeek:R.firstDayOfWeek,t:R.t,getEventsForResource:R.getEventsForResource,businessHours:R.businessHours,currentLocale:R.currentLocale})),O=W4(()=>{if(!p)return[];let R=W(f.startOf(Z),f.endOf(Z));if(X)R=R.filter((h)=>h.allDay);if(J){let h=N(J)??[];return R.filter((H)=>h.some((X0)=>String(X0.id)===String(H.id)))}return R},[f,J,W,N,Z,p,X]),S=(R,h)=>{Q.current?.setSelectedDayEvents({day:R,events:h}),Q.current?.open()},M=f.month()===L.month(),w=O.length-B,T=w>0,D=aP({date:f,hour:Z==="hour"?f.hour():void 0,businessHours:U}),g=f.format("HH"),E=f.format("mm"),v=Z==="hour"?`day-cell-${f.format("YYYY-MM-DD")}-${g}-${E}`:`day-cell-${f.format("YYYY-MM-DD")}`;return nf(V5,{children:[af(F5,{allDay:X,className:_("cursor-pointer overflow-clip p-1 hover:bg-accent min-h-[60px] relative border-r last:border-r-0 only:border-r border-b",z),"data-testid":q||v,date:f,disabled:!D||!M,hour:P,id:`day-cell-${f.toISOString()}${J?`-resource-${J}`:""}`,minute:$,resourceId:J,type:"day-cell",children:nf("div",{className:"flex flex-col gap-1 h-full w-full",children:[Y&&af(A5,{date:f,locale:A}),p&&nf(V5,{children:[O.slice(0,B).map((R,h)=>af("div",{className:"h-5 w-full","data-testid":R?.title},`empty-${h}-${R.id}`)),T&&nf("div",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs mt-1",onClick:(R)=>{R.stopPropagation(),S(f,O)},onKeyDown:(R)=>{if(R.key==="Enter"||R.key===" ")R.preventDefault(),R.stopPropagation(),S(f,O)},role:"button",tabIndex:0,children:["+",w," ",K("more")]})]}),G]})}),af(O5,{ref:Q})]})},tf=A4(O4);import{jsx as M5}from"react/jsx-runtime";var i0=({resource:f,className:P,children:$,"data-testid":z})=>{return M5("div",{className:_("flex items-center justify-center p-2 flex-1 border-r last:border-r-0",P),"data-testid":z,style:{color:f.color,backgroundColor:f.backgroundColor},children:$??M5("div",{className:"text-sm font-medium truncate",children:f.title})})};import{memo as F4}from"react";import{useMemo as I5}from"react";var S5=({days:f,events:P,dayMaxEvents:$,dayNumberHeight:z=bP,gridType:J="day",eventSpacing:Z=h0})=>{let p=f[0].startOf("day"),X=f.at(-1).endOf("day"),q=f.length,Y=P.filter((K)=>K.end.diff(K.start,J)>0),G=P.filter((K)=>K.end.diff(K.start,J)===0),Q=[...Y].sort((K,N)=>{let U=K.start.diff(N.start);if(U!==0)return U;return N.end.diff(N.start)-K.end.diff(K.start)}),B=[...G].sort((K,N)=>K.start.diff(N.start)),W=[];for(let K=0;K<$;K++){W[K]=[];for(let N=0;N<q;N++)W[K][N]={taken:!1,event:null}}let L=[];for(let K of Q){let N=F.max(K.start.startOf(J),p),U=J==="hour"?K.end.subtract(1,"minute"):K.end,A=F.min(U.startOf(J),X),O=Math.max(0,N.diff(p,J)),S=Math.min(q-1,A.diff(p,J)),M=K.start.startOf(J).isBefore(p),w=K.end.startOf(J).isAfter(X),T=!1,D=-1;for(let g=0;g<$;g++){let E=!0;for(let v=O;v<=S;v++)if(W[g][v].taken){E=!1;break}if(E){D=g;break}}if(D!==-1){for(let E=O;E<=S;E++)W[D][E]={taken:!0,event:K};let g=S-O+1;L.push({left:O/q*100,width:g/q*100,top:z+Z+D*(M0+Z),height:M0,position:D,...K,isTruncatedStart:M,isTruncatedEnd:w}),T=!0}if(!T)for(let g=O+1;g<=S;g++){let E=-1;for(let v=0;v<$;v++){let R=!0;for(let h=g;h<=S;h++)if(W[v][h].taken){R=!1;break}if(R){E=v;break}}if(E!==-1){for(let R=g;R<=S;R++)W[E][R]={taken:!0,event:K};let v=S-g+1;L.push({left:g/q*100,width:v/q*100,top:z+Z+E*(M0+Z),height:M0,position:E,...K,isTruncatedStart:!0,isTruncatedEnd:w}),T=!0;break}}}for(let K of B){let N=F.max(K.start.startOf(J),p),U=Math.max(0,Math.min(q-1,N.diff(p,J))),A=!1,O=!1,S=-1;for(let M=0;M<$;M++)if(!W[M][U].taken){S=M;break}if(S!==-1)W[S][U]={taken:!0,event:K},L.push({left:U/q*100,width:1/q*100,top:z+Z+S*(M0+Z),height:M0,position:S,...K,isTruncatedStart:!1,isTruncatedEnd:!1})}return L};var R5=({days:f,allDay:P,dayNumberHeight:$,resourceId:z,gridType:J})=>{let{getEventsForDateRange:Z,dayMaxEvents:p,eventSpacing:X,getEventsForResource:q}=m((W)=>({getEventsForDateRange:W.getEventsForDateRange,dayMaxEvents:W.dayMaxEvents,eventSpacing:W.eventSpacing,getEventsForResource:W.getEventsForResource})),Y=f.at(0).startOf("day"),G=f.at(-1).endOf("day"),Q=I5(()=>{let W=Z(Y,G);if(z){let L=q(z);W=W.filter((K)=>L.some((N)=>String(N.id)===String(K.id)))}if(P)W=W.filter((L)=>!!L.allDay===P);return W},[Z,q,Y,G,z,P]);return I5(()=>{return S5({days:f,events:Q,dayMaxEvents:p,dayNumberHeight:$,eventSpacing:X,gridType:J})},[f,p,$,X,Q,J])};import{jsx as NP}from"react/jsx-runtime";var V4=({days:f,gridType:P="day",resourceId:$,dayNumberHeight:z,"data-testid":J,allDay:Z})=>{let p=f.at(0).startOf("day"),X=R5({days:f,gridType:P,resourceId:$,dayNumberHeight:z,allDay:Z});return NP("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":J,children:X.map((q)=>{let Y=`${q.id}-${q.position}-${p.toISOString()}-${$??"no-resource"}`;return NP("div",{className:"absolute z-10 pointer-events-auto overflow-clip","data-testid":`horizontal-event-${q.id}`,style:{left:`calc(${q.left}% + var(--spacing) * 0.25)`,width:`calc(${q.width}% - var(--spacing) * 1)`,top:`${q.top}px`,height:`${M0}px`},children:NP(Qf,{className:"h-full w-full shadow",elementId:Y,event:q})},`${Y}-wrapper`)})})},H5=F4(V4);import{jsx as Yf,jsxs as b5}from"react/jsx-runtime";var S4=({id:f,resource:P,gridType:$="day",variant:z="resource",dayNumberHeight:J,className:Z,columns:p=[],allDay:X,showDayNumber:q=!1,isLastRow:Y=!1})=>{let{renderResource:G}=m((B)=>({renderResource:B.renderResource})),Q=z==="resource";return b5("div",{className:_("flex flex-1 relative min-h-[60px]",Z),"data-testid":`horizontal-row-${f}`,children:[Q&&Yf(i0,{className:"w-40 min-w-40 max-w-40 sticky left-0 bg-background z-20 h-full","data-testid":`horizontal-row-label-${P?.id}`,resource:P,children:G?G(P):Yf("div",{className:"wrap-break-word text-sm",children:P?.title})}),b5("div",{className:"relative flex-1 flex",children:[Yf("div",{className:"flex w-full",children:p.map((B)=>{return Yf(tf,{allDay:X,className:_("flex-1 w-20",Y&&"border-b-0",B.className),day:B.day,gridType:$,hour:$==="hour"?B.day.hour():void 0,resourceId:P?.id,showDayNumber:q},B.day.toISOString())})}),Yf("div",{className:"absolute inset-0 z-10 pointer-events-none",children:Yf(H5,{allDay:X,"data-testid":`horizontal-events-${f}`,dayNumberHeight:J,days:p.map((B)=>B.day).filter(Boolean),gridType:$,resourceId:P?.id})})]})]})},sf=M4(S4);import{memo as I4}from"react";import{jsx as H4}from"react/jsx-runtime";var R4=({className:f})=>{let{t:P}=m(($)=>({t:$.t}));return H4("div",{className:_("w-16 border-r shrink-0 sticky left-0 bg-background z-20 flex items-center justify-center sm:text-xs text-muted-foreground",f),children:P("allDay")})},_f=I4(R4);import{jsx as m5,jsxs as w4}from"react/jsx-runtime";var m4=({days:f,classes:P,resource:$,showSpacer:z=!0})=>{let J=f.map((Z,p)=>({id:`allday-col-${Z.toISOString()}-${p}`,day:Z,gridType:"day",className:_("h-full min-h-12 border-r last:border-r-0",P?.cell)}));return w4("div",{className:_("flex w-full",P?.row),"data-testid":"all-day-row",children:[z&&m5(_f,{className:P?.spacer}),m5(sf,{allDay:!0,className:"flex-1 min-h-fit",columns:J,dayNumberHeight:0,gridType:"day",id:`all-day-row-${$?.id??"main"}`,isLastRow:!0,resource:$,variant:"regular"})]})},v0=b4(m4);import{memo as E4}from"react";import{memo as C4}from"react";import T4 from"dayjs";import{memo as h4}from"react";import{jsx as g4}from"react/jsx-runtime";var k4=({rangeStart:f,rangeEnd:P,now:$})=>{let z=$??T4();if(!(z.isSameOrAfter(f)&&z.isBefore(P)))return null;let Z=P.diff(f,"minute"),X=z.diff(f,"minute")/Z*100;return g4("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:`${X}%`}})},w5=h4(k4);import{useMemo as h5}from"react";var T5=({days:f,gridType:P="hour",events:$})=>{let z=$.filter((Q)=>!Q.allDay).toSorted((Q,B)=>Q.start.diff(B.start));if(z.length===0)return[];let J=f.at(0)?.startOf("day")||F(),Z=f.length,p=P==="day",X=[],q=[],Y=null;for(let Q of z){if(Y&&Q.start.isSameOrAfter(Y)){if(q.length>0)X.push(q);q=[]}q.push(Q),Y=Y?F.max(Y,Q.end):Q.end}if(q.length>0)X.push(q);let G=[];for(let Q of X){if(Q.length===1){let N=Q[0],U=N.start.diff(J,P,!0),A=N.end.diff(J,P,!0);if(p){if(U=Math.floor(U),A=Math.ceil(A),A<=U)A=U+1}if(U<0)U=0;if(A>Z)A=Z;let O=Math.max(0,A-U);if(O===0)continue;let S=U/Z*100,M=O/Z*100;G.push({...N,left:0,width:100,top:S,height:M});continue}let B=[...Q].sort((N,U)=>{let A=N.end.diff(N.start,"minute"),O=U.end.diff(U.start,"minute");if(A!==O)return O-A;return N.start.diff(U.start)}),W=B.length,L;if(W===2)L=25;else if(W===3)L=50;else if(W===4)L=60;else L=70;let K=W>1?L/(W-1):0;for(let N=0;N<B.length;N++){let U=B[N],A=U.start.diff(J,P,!0),O=U.end.diff(J,P,!0);if(p){if(A=Math.floor(A),O=Math.ceil(O),O<=A)O=A+1}if(A<0)A=0;if(O>Z)O=Z;let S=Math.max(0,O-A);if(S===0)continue;let M=A/Z*100,w=S/Z*100,T,D,g;if(N===0)T=0,D=100,g=1;else T=K*N,D=100-T,g=N+1;G.push({...U,left:T,width:D,top:M,height:w,zIndex:g})}}return G};var k5=({days:f,gridType:P,resourceId:$})=>{let{getEventsForDateRange:z,getEventsForResource:J}=m((Y)=>({getEventsForDateRange:Y.getEventsForDateRange,getEventsForResource:Y.getEventsForResource})),Z=f.at(0).startOf("day"),p=f.at(-1).endOf("day"),X=h5(()=>{let Y=z(Z,p);if($){let G=J($);Y=Y.filter((Q)=>G.some((B)=>String(B.id)===String(Q.id)))}return Y.filter((G)=>!G.allDay)},[Z,p,z,$,J]);return h5(()=>{return T5({days:f,events:X,gridType:P})},[f,P,X])};import{jsx as BP,jsxs as y4}from"react/jsx-runtime";var D4=({days:f,gridType:P="hour",resourceId:$,"data-testid":z})=>{let J=k5({days:f,gridType:P,resourceId:$}),Z=f.at(0),p=f.at(-1)?.add(1,P);return y4("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":z,children:[Z&&p&&BP(w5,{rangeEnd:p,rangeStart:Z}),J.map((X,q)=>{let Y=`event-${X.id}-${q}-${f.at(0).toISOString()}-${$??"no-resource"}`,G=X.end.diff(X.start,"minute")<=15;return BP("div",{className:"absolute",style:{left:`${X.left}%`,width:`calc(${X.width}% - var(--spacing) * 2)`,top:`${X.top}%`,height:`${X.height}%`},children:BP(Qf,{className:_("pointer-events-auto absolute",{"[&_p]:text-[10px] [&_p]:mt-0":G}),elementId:Y,event:X})},`${Y}-wrapper`)})]})},g5=C4(D4);import{jsx as Vf,jsxs as i4}from"react/jsx-runtime";var j4=({id:f,days:P,resourceId:$,"data-testid":z,gridType:J,className:Z,renderCell:p,noEvents:X,cellSlots:q=[60],isLastColumn:Y})=>{return Vf("div",{className:_("flex flex-col flex-1 items-center justify-center min-w-50 bg-background relative",Z),"data-testid":z||`vertical-col-${f}`,children:i4("div",{className:"w-full relative grid",style:{gridTemplateRows:`repeat(${P.length}, minmax(0, 1fr))`},children:[P.map((G)=>{let Q=G.format("HH"),B=G.format("YYYY-MM-DD");if(p){let W=f==="time-col"?`vertical-time-${Q}`:`vertical-cell-${B}-${Q}-00${$?`-${$}`:""}`;return Vf("div",{className:"h-[60px] border-b border-r","data-testid":W,children:p(G)},`${B}-${Q}`)}return q.map((W)=>{let L=W===60?void 0:W,K=L===void 0?"00":String(L).padStart(2,"0"),N=`vertical-cell-${B}-${Q}-${K}${$?`-${$}`:""}`;return Vf(tf,{className:_("hover:bg-accent relative z-10 h-[60px] cursor-pointer border-b",W===60?"":"border-dashed h-[15px] min-h-[15px]",Y?"border-r-0":"border-r"),"data-testid":N,day:L?G.minute(L):G,gridType:J,hour:G.hour(),minute:L,resourceId:$,shouldRenderEvents:!1},`${B}-${Q}-${K}-${$||"no-resource"}`)})}),!X&&Vf("div",{className:"absolute inset-0 z-10 pointer-events-none",children:Vf(g5,{"data-testid":`vertical-events-${f}`,days:P,gridType:J,resourceId:$})})]})})},C5=E4(j4);import{memo as v4}from"react";import{jsx as D5,jsxs as o4}from"react/jsx-runtime";var x4=({children:f,classes:P,allDayRow:$})=>{let{stickyViewHeader:z,viewHeaderClassName:J}=m((Z)=>({stickyViewHeader:Z.stickyViewHeader,viewHeaderClassName:Z.viewHeaderClassName}));return o4("div",{className:_(z&&"sticky top-0 z-21 bg-background",J),children:[D5("div",{className:_("h-12 border-b w-fit",P?.header),"data-testid":"vertical-grid-header",children:f}),$&&D5("div",{className:_("flex w-full border-b min-h-12 h-full",P?.allDay),"data-testid":"vertical-grid-all-day",children:$})]})},y5=v4(x4);import{jsx as Mf,jsxs as j5}from"react/jsx-runtime";var E5="h-[calc(100%-3rem)]",O0=({columns:f,children:P,gridType:$="day",variant:z="resource",classes:J,allDayRow:Z,cellSlots:p})=>{let X=z==="resource",q=!X,Y=P&&Mf(y5,{allDayRow:Z,classes:{header:J?.header,allDay:J?.allDay},children:P});return j5("div",{className:"h-full","data-testid":"vertical-grid-container",children:[q&&Y,j5(W0,{className:_("h-full",q&&"overflow-auto",q&&E5),"data-testid":"vertical-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[X&&Y,Mf("div",{className:_("flex flex-1 w-fit",X&&E5,J?.body),"data-testid":"vertical-grid-body",children:f.map((G,Q)=>Mf(C5,{...G,cellSlots:p,gridType:$,isLastColumn:Q===f.length-1},`${G.id}-${Q}`))}),Mf(R0,{className:"z-30"})," ",Mf(R0,{className:"z-30",orientation:"horizontal"})," "]})]})};import{jsx as d0,jsxs as d4}from"react/jsx-runtime";var l4=()=>{let{currentDate:f,currentLocale:P,timeFormat:$,t:z}=_0(),J=f.isSame(F(),"day"),Z=q0({referenceDate:f}),p={id:"time-col",day:void 0,days:Z,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(q)=>d0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Intl.DateTimeFormat(P,{hour:"numeric",hour12:$==="12-hour"}).format(q.toDate())})},X={id:`day-col-${f.format("YYYY-MM-DD")}`,day:f,days:Z,className:"w-[calc(100%-4rem)] flex-1",gridType:"hour"};return d0(O0,{allDayRow:d0(v0,{days:[f]}),cellSlots:[0,15,30,45],classes:{header:"w-full",body:"w-full",allDay:"w-full"},columns:[p,X],gridType:"hour",variant:"regular",children:d0("div",{className:"flex h-full flex-1 justify-center items-center","data-testid":"day-view-header",children:d0(u4,{mode:"wait",children:d4(c4.div,{animate:{opacity:1,y:0},className:_("flex justify-center items-center text-center text-base font-semibold sm:text-xl",J&&"text-primary"),exit:{opacity:0,y:-10},initial:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut"},children:[d0("span",{className:"xs:inline hidden",children:f.format("dddd, ")}),f.format("MMMM D, YYYY"),J&&d0("span",{className:"bg-primary text-primary-foreground ml-2 rounded-full px-1 py-0.5 text-xs sm:px-2 sm:text-sm",children:z("today")})]},f.format("YYYY-MM-DD"))})})})},i5=l4;import{useMemo as e4}from"react";import{memo as r4}from"react";import{jsx as n4}from"react/jsx-runtime";var a4=({children:f,className:P})=>{let{stickyViewHeader:$,viewHeaderClassName:z}=m((J)=>({stickyViewHeader:J.stickyViewHeader,viewHeaderClassName:J.viewHeaderClassName}));return n4("div",{className:_("flex h-12 w-fit",$&&"sticky top-0 z-21 bg-background",P,z),"data-testid":"horizontal-grid-header",children:f})},v5=r4(a4);import{jsx as Uf,jsxs as o5}from"react/jsx-runtime";var x5="h-[calc(100%-3rem)]",ef=({rows:f,children:P,classes:$,allDay:z,gridType:J,variant:Z="resource",dayNumberHeight:p})=>{let{currentDate:X}=m((Q)=>({currentDate:Q.currentDate})),q=Z==="resource",Y=!q,G=P&&Uf(v5,{className:$?.header,children:P});return o5("div",{className:"h-full","data-testid":"horizontal-grid-container",children:[Y&&G,o5(W0,{className:_("h-full",Y&&"overflow-auto",Y&&x5),"data-testid":"horizontal-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[q&&G,Uf("div",{className:_("flex flex-1 w-fit",q&&x5,$?.body),"data-testid":"horizontal-grid-body",children:Uf("div",{className:"relative w-full flex flex-col flex-1",children:f.map((Q,B)=>Uf(sf,{allDay:Q.allDay??z,dayNumberHeight:p,gridType:J,isLastRow:B===f.length-1,variant:Z,...Q},Q.id))},X.format("YYYY-MM"))}),Uf(R0,{className:"z-30"}),Uf(R0,{className:"z-30",orientation:"horizontal"})]})]})};import{AnimatePresence as t4,motion as s4}from"motion/react";import{jsx as fP}from"react/jsx-runtime";var u5=({className:f})=>{let{firstDayOfWeek:P,stickyViewHeader:$,viewHeaderClassName:z,currentDate:J}=_0(),Z=$0(J,P);return fP("div",{className:_("flex w-full",$&&"sticky top-0 z-20",z,f),"data-testid":"month-header",children:Z.map((p,X)=>fP(t4,{mode:"wait",children:fP(s4.div,{animate:{opacity:1,y:0},className:"py-2 text-center font-medium border-r last:border-r-0 border-b flex-1","data-testid":`weekday-header-${p.format("ddd").toLowerCase()}`,exit:{opacity:0,y:-10},initial:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:X*0.05},children:fP("span",{className:"text-sm capitalize",children:p.format("ddd")})},p.toISOString())},p.toISOString()))})};import{jsx as c5}from"react/jsx-runtime";var l5=()=>{let{currentDate:f,firstDayOfWeek:P}=_0(),z=e4(()=>hf(f,P),[f,P]).map((J,Z)=>({id:`week-${Z}`,columns:J.map((p)=>({id:`col-${p.toISOString()}`,day:p,gridType:"day"})),className:"flex-1",showDayNumber:!0}));return c5(ef,{classes:{body:"w-full",header:"w-full"},rows:z,variant:"regular",children:c5(u5,{className:"h-12"})})};import{AnimatePresence as f3,motion as P3}from"motion/react";import{useMemo as d5}from"react";import{jsx as b0,jsxs as AP}from"react/jsx-runtime";var r5="w-[calc((100%-4rem)/7)] min-w-[calc((100%-4rem)/7)] flex-1",a5="w-10 sm:w-16 min-w-10 sm:min-w-16 max-w-10 sm:max-w-16",$3=()=>{let{t:f,currentDate:P,firstDayOfWeek:$,selectDate:z,openEventForm:J,currentLocale:Z,timeFormat:p}=_0(),X=d5(()=>$0(P,$),[P,$]),q={id:"time-col",days:q0({referenceDate:P}),day:void 0,className:`shrink-0 ${a5} sticky left-0 bg-background z-20`,gridType:"hour",noEvents:!0,renderCell:(G)=>b0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Intl.DateTimeFormat(Z,{hour:"numeric",hour12:p==="12-hour"}).format(G.toDate())})},Y=d5(()=>{return X.map((G)=>({id:`day-col-${G.format("YYYY-MM-DD")}`,day:G,label:G.format("D"),className:r5,days:q0({referenceDate:G}),value:G}))},[X]);return b0(O0,{allDayRow:b0(v0,{classes:{cell:r5,spacer:a5},days:X}),classes:{header:"w-full h-18",body:"h-[calc(100%-4.5rem)] w-full"},columns:[q,...Y],gridType:"hour",variant:"regular",children:AP("div",{className:"flex h-full flex-1","data-testid":"week-view-header",children:[b0("div",{className:"w-10 sm:w-16 h-full shrink-0 items-center justify-center border-r p-2 flex",children:AP("div",{className:"flex flex-col items-center justify-center",children:[b0("span",{className:"text-muted-foreground text-xs",children:f("week")}),b0("span",{className:"font-medium",children:P.week()})]})}),X.map((G,Q)=>{let B=G.isSame(F(),"day"),W=`week-day-header-${G.toISOString()}`;return b0(f3,{mode:"wait",children:AP(P3.div,{animate:{opacity:1,y:0},className:_("hover:bg-accent flex-1 flex flex-col justify-center cursor-pointer p-1 text-center sm:p-2 border-r last:border-r-0 w-50 h-full",B&&"bg-primary/10 font-bold"),"data-testid":`week-day-header-${G.format("dddd").toLowerCase()}`,exit:{opacity:0,y:-10},initial:{opacity:0,y:-10},onClick:()=>{z(G),J({start:G})},transition:{duration:0.25,ease:"easeInOut",delay:Q*0.05},children:[b0("div",{className:"text-xs sm:text-sm",children:G.format("ddd")}),b0("div",{className:_("mx-auto mt-1 flex h-5 w-5 items-center justify-center rounded-full text-xs",B&&"bg-primary text-primary-foreground"),children:Intl.DateTimeFormat(Z,{day:"numeric"}).format(G.toDate())})]})},W)})]})})},n5=$3;import{AnimatePresence as Z3,motion as z3}from"motion/react";import{jsx as m0,jsxs as Sf}from"react/jsx-runtime";var J3=["S","M","T","W","T","F","S"],X3=["bg-primary","bg-blue-500","bg-green-500"],q3=42,p3=(f)=>{if(f===0)return"";let P=f>1?"s":"";return`${f} event${P}`},Q3=()=>{let{currentDate:f,selectDate:P,events:$,setView:z,getEventsForDateRange:J,t:Z}=_0(),p=f.year(),X=()=>{return Array.from({length:12},(L,K)=>{let N=F().year(p).month(K).startOf("month"),U=$.filter((A)=>A.start.year()===p&&A.start.month()===K);return{date:N,name:N.format("MMMM"),eventCount:U.length,monthKey:N.format("MM")}})},q=(L)=>{let K=L.startOf("month").startOf("week");return Array.from({length:q3},(N,U)=>{let A=K.add(U,"day"),O=A.startOf("day"),S=A.endOf("day"),M=J(O,S);return{date:A,dayKey:A.format("YYYY-MM-DD"),isInCurrentMonth:A.month()===L.month(),isToday:A.isSame(F(),"day"),isSelected:A.isSame(f,"day"),eventCount:M.length}})},Y=(L,K,N)=>{N?.stopPropagation(),P(L),z(K)},G=(L)=>{let K=L===1?Z("event"):Z("events");return`${L} ${K}`},Q=(L)=>{let N=L.isInCurrentMonth?"":"text-muted-foreground opacity-50",U=L.isToday?"bg-primary text-primary-foreground rounded-full":"",A=L.isSelected&&!L.isToday?"bg-muted rounded-full font-bold":"",O=L.eventCount>0&&!L.isToday&&!L.isSelected?"font-medium":"";return _("relative flex aspect-square w-full cursor-pointer flex-col items-center justify-center hover:bg-accent rounded-sm transition-colors duration-200",N,U,A,O)},B=(L,K)=>{return _("h-[3px] w-[3px] rounded-full",K?"bg-primary-foreground":L)},W=X();return Sf(W0,{className:"h-full","data-testid":"year-view",children:[m0("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:W.map((L,K)=>{let N=q(L.date),U=K*0.05;return Sf("div",{className:"hover:border-primary flex flex-col rounded-lg border p-3 text-left transition-all duration-200 hover:shadow-md","data-testid":`year-month-${L.monthKey}`,children:[m0(Z3,{mode:"wait",children:Sf(z3.div,{animate:{opacity:1,y:0},className:"mb-2 flex items-center justify-between",exit:{opacity:0,y:-10},initial:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:U},children:[m0("button",{className:"text-lg font-medium hover:underline cursor-pointer","data-testid":`year-month-title-${L.monthKey}`,onClick:()=>Y(L.date,"month"),type:"button",children:L.name}),L.eventCount>0&&m0("span",{className:"bg-primary text-primary-foreground rounded-full px-2 py-1 text-xs","data-testid":`year-month-event-count-${L.monthKey}`,children:G(L.eventCount)})]},`month-${K}`)}),Sf("div",{className:"grid grid-cols-7 gap-[1px] text-[0.6rem]","data-testid":`year-mini-calendar-${L.monthKey}`,children:[J3.map((A,O)=>m0("div",{className:"text-muted-foreground h-3 text-center",children:A},`header-${O}`)),N.map((A)=>{let O=`year-day-${L.date.format("YYYY-MM")}-${A.dayKey}`,S=A.eventCount>0,M=Math.min(A.eventCount,3),w=X3.slice(0,M);return Sf("button",{className:Q(A),"data-testid":O,onClick:(T)=>Y(A.date,"day",T),title:p3(A.eventCount),type:"button",children:[m0("span",{className:"text-center leading-none",children:A.date.date()}),S&&m0("div",{className:_("absolute bottom-0 flex w-full justify-center space-x-[1px]",A.isToday&&"bottom-[1px]"),children:w.map((T)=>m0("span",{className:B(T,A.isToday)},T))})]},A.dayKey)})]})]},L.monthKey)})}),m0(R0,{className:"z-30"})]})},t5=Q3;import{useCallback as WP,useMemo as Y3}from"react";import{jsx as _3}from"react/jsx-runtime";var s5=({children:f,events:P=[],firstDayOfWeek:$=0,initialView:z="month",initialDate:J,renderEvent:Z,onEventClick:p,onCellClick:X,onViewChange:q,onEventAdd:Y,onEventUpdate:G,onEventDelete:Q,onDateChange:B,locale:W,timezone:L,disableCellClick:K,disableEventClick:N,disableDragAndDrop:U,dayMaxEvents:A,eventSpacing:O=h0,stickyViewHeader:S=!0,viewHeaderClassName:M="",headerComponent:w,headerClassName:T,businessHours:D,renderEventForm:g,translations:E,translator:v,timeFormat:R="12-hour",classesOverride:h})=>{let H=gf({events:P,firstDayOfWeek:$,initialView:z,initialDate:J,businessHours:D,onEventAdd:Y,onEventUpdate:G,onEventDelete:Q,onDateChange:B,onViewChange:q,locale:W,timezone:L,translations:E,translator:v}),X0=WP((n)=>{H.setSelectedEvent(n),H.setIsEventFormOpen(!0)},[H]),G0=WP((n)=>{if(N)return;if(p)p(n);else X0(n)},[N,p,X0]),f0=WP((n)=>{if(K)return;if(X)X(n);else H.openEventForm(n)},[X,K,H]),p0=Y3(()=>({currentDate:H.currentDate,view:H.view,events:H.events,rawEvents:H.rawEvents,currentLocale:H.currentLocale,isEventFormOpen:H.isEventFormOpen,selectedEvent:H.selectedEvent,selectedDate:H.selectedDate,firstDayOfWeek:H.firstDayOfWeek,setCurrentDate:H.setCurrentDate,selectDate:H.selectDate,setView:H.setView,nextPeriod:H.nextPeriod,prevPeriod:H.prevPeriod,today:H.today,addEvent:H.addEvent,updateEvent:H.updateEvent,updateRecurringEvent:H.updateRecurringEvent,deleteEvent:H.deleteEvent,deleteRecurringEvent:H.deleteRecurringEvent,openEventForm:H.openEventForm,closeEventForm:H.closeEventForm,getEventsForDateRange:H.getEventsForDateRange,findParentRecurringEvent:H.findParentRecurringEvent,renderEvent:Z,onEventClick:G0,onCellClick:f0,locale:W,timezone:L,disableCellClick:K,disableEventClick:N,disableDragAndDrop:U,dayMaxEvents:A,eventSpacing:O,stickyViewHeader:S,viewHeaderClassName:M,headerComponent:w,headerClassName:T,businessHours:D,renderEventForm:g,t:H.t,timeFormat:R,classesOverride:h}),[H,Z,G0,f0,W,L,K,N,U,A,O,S,M,w,T,D,g,R,h]);return _3(Zf.Provider,{value:p0,children:f})};import{jsx as U0,jsxs as N3}from"react/jsx-runtime";var G3=()=>{let{view:f,dayMaxEvents:P}=_0(),$={month:U0(l5,{dayMaxEvents:P},"month"),week:U0(n5,{},"week"),day:U0(i5,{},"day"),year:U0(t5,{},"year")};return N3("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-calendar",children:[U0(Of,{className:"p-1"}),U0(Cf,{children:U0(U3,{mode:"wait",children:U0(K3.div,{animate:{opacity:1,x:0},className:"w-full h-[calc(100%-3.5rem)]",exit:{opacity:0,x:-20},initial:{opacity:0,x:20},transition:{duration:0.1,ease:"easeInOut"},children:U0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:$[f]})},f)})}),U0(uf,{})]})},L3=({events:f,firstDayOfWeek:P="sunday",initialView:$="month",initialDate:z,dayMaxEvents:J=Jf,eventSpacing:Z=h0,stickyViewHeader:p=!0,viewHeaderClassName:X="",timeFormat:q="12-hour",...Y})=>{return U0(s5,{dayMaxEvents:J,eventSpacing:Z,events:bf(f),firstDayOfWeek:kf[P],initialDate:t0(z),initialView:$,stickyViewHeader:p,timeFormat:q,viewHeaderClassName:X,...Y,children:U0(G3,{})})};import{AnimatePresence as S3,motion as I3}from"motion/react";import{AnimatePresence as A3,motion as W3}from"motion/react";import{jsx as B3}from"react/jsx-runtime";var Kf=({days:f,gridType:P="day",children:$,classes:z})=>{let{getVisibleResources:J}=o(),Z=J(),p=f.map((q)=>({id:`col-${q.toISOString()}`,day:q,gridType:P})),X=Z.map((q)=>({id:q.id,title:q.title,resource:q,columns:p}));return B3(ef,{classes:z,dayNumberHeight:0,gridType:P,rows:X,children:$})};import{jsx as Gf,jsxs as O3}from"react/jsx-runtime";var e5=()=>{let{currentDate:f,t:P,currentLocale:$,timeFormat:z}=o(),J=q0({referenceDate:f});return O3(Kf,{days:J,gridType:"hour",children:[Gf("div",{className:"w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:Gf("div",{className:"text-sm",children:P("resources")})}),Gf("div",{className:"flex-1 flex flex-col",children:Gf("div",{className:"flex h-12",children:J.map((Z,p)=>{let X=Z.isSame(F(),"hour"),q=`resource-day-header-${Z.toISOString()}`;return Gf(A3,{mode:"wait",children:Gf(W3.div,{animate:{opacity:1,y:0},className:_("w-20 border-b border-r last:border-r-0 flex items-center justify-center text-xs shrink-0",X&&"bg-blue-50 text-blue-600 font-medium"),"data-testid":`resource-day-time-label-${Z.format("HH")}`,exit:{opacity:0,y:-10},initial:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:p*0.05},children:Intl.DateTimeFormat($,{hour:"numeric",hour12:z==="12-hour"}).format(Z.toDate())},`${q}-motion`)},`${q}-presence`)})})})]})};import{jsx as Lf,jsxs as f2}from"react/jsx-runtime";var P2=()=>{let{currentDate:f,getVisibleResources:P,currentLocale:$,timeFormat:z}=o(),J=P(),Z=q0({referenceDate:f}),p={id:"time-col",day:void 0,days:Z,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(q)=>Lf("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Intl.DateTimeFormat($,{hour:"numeric",hour12:z==="12-hour"}).format(q.toDate())})},X=J.map((q)=>({id:`day-col-${f.format("YYYY-MM-DD")}-resource-${q.id}`,resourceId:q.id,days:Z,day:f,gridType:"hour"}));return Lf(O0,{allDayRow:f2("div",{className:"flex w-full",children:[Lf(_f,{}),J.map((q)=>Lf(v0,{classes:{cell:"min-w-50"},days:[f],resource:q,showSpacer:!1},`resource-allday-row-${q.id}`))]}),cellSlots:[0,15,30,45],classes:{body:"w-full",header:"w-full"},columns:[p,...X],"data-testid":"resource-day",gridType:"hour",children:f2("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[Lf("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),J.map((q)=>Lf(i0,{className:"min-w-50",resource:q},`resource-cell-${q.id}`))]})})};import{jsx as $2}from"react/jsx-runtime";var Z2=()=>{let{orientation:f}=o();if(f==="vertical")return $2(P2,{});return $2(e5,{})};import{AnimatePresence as F3,motion as V3}from"motion/react";import{useMemo as M3}from"react";import{jsx as If,jsxs as z2}from"react/jsx-runtime";var J2=()=>{let{currentDate:f,t:P}=o(),$=M3(()=>{return HP(f)},[f]);return z2(Kf,{days:$,children:[If("div",{className:"w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:If("div",{className:"text-sm",children:P("resources")})}),$.map((z,J)=>{let Z=`resource-month-header-${z.toISOString()}`;return If(F3,{mode:"wait",children:z2(V3.div,{animate:{opacity:1,y:0},className:"w-20 border-b border-r shrink-0 flex items-center justify-center flex-col",exit:{opacity:0,y:-10},initial:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:J*0.05},children:[If("div",{className:"text-xs font-medium",children:z.format("D")}),If("div",{className:"text-xs text-muted-foreground",children:z.format("ddd")})]},`${Z}-motion`)},`${Z}-presence`)})]})};import{jsx as Rf,jsxs as X2}from"react/jsx-runtime";var q2=()=>{let{currentDate:f,getVisibleResources:P}=o(),$=P(),z=f.startOf("month"),J=Array.from({length:f.daysInMonth()},(X,q)=>z.add(q,"day")),Z={id:"date-col",days:J,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:(X)=>X2("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:[Rf("span",{children:X.format("D")}),Rf("span",{children:X.format("ddd")})]})},p=$.map((X)=>({id:`month-col-resource-${X.id}`,day:void 0,resourceId:X.id,days:J,gridType:"day"}));return Rf(O0,{classes:{header:"w-full",body:"w-full"},columns:[Z,...p],"data-testid":"resource-month-vertical-grid",children:X2("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[Rf("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),$.map((X)=>Rf(i0,{className:"min-w-50",resource:X},`resource-cell-${X.id}`))]})})};import{jsx as p2}from"react/jsx-runtime";var Q2=()=>{let{orientation:f}=o();if(f==="vertical")return p2(q2,{});return p2(J2,{})};import{AnimatePresence as Y2,motion as _2}from"motion/react";import{useMemo as U2}from"react";import{jsx as F0,jsxs as OP}from"react/jsx-runtime";var K2=()=>{let{currentDate:f,firstDayOfWeek:P,t:$,currentLocale:z,timeFormat:J}=o(),Z=U2(()=>$0(f,P),[f,P]),p=U2(()=>{return Z.flatMap((X)=>q0({referenceDate:X}))},[Z]);return OP(Kf,{classes:{header:"h-24"},days:p,gridType:"hour",children:[F0("div",{className:"w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:F0("div",{className:"text-sm",children:$("resources")})}),OP("div",{className:"flex-1 flex flex-col",children:[F0("div",{className:"flex h-12",children:Z.map((X,q)=>{let Y=X.isSame(F(),"day"),G=`resource-week-header-${X.toISOString()}-day`;return F0(Y2,{mode:"wait",children:F0(_2.div,{animate:{opacity:1,y:0},className:_("shrink-0 border-r last:border-r-0 border-b flex items-center text-center font-medium w-[calc(24*var(--spacing)*20)]",Y&&"bg-blue-50 text-blue-600"),exit:{opacity:0,y:-10},initial:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:q*0.05},children:OP("div",{className:"sticky left-1/2",children:[F0("div",{className:"text-sm",children:X.format("ddd")}),F0("div",{className:"text-xs text-muted-foreground",children:X.format("M/D")})]})},`${G}-motion`)},`${G}-presence`)})}),F0("div",{className:"flex h-12 border-b",children:p.map((X,q)=>{let Y=X.isSame(F(),"hour"),G=`resource-week-header-${X.toISOString()}-hour`;return F0(Y2,{mode:"wait",children:F0(_2.div,{animate:{opacity:1,y:0},className:_("w-20 border-r flex items-center justify-center text-xs shrink-0",Y&&"bg-blue-50 text-blue-600 font-medium"),"data-testid":`resource-week-time-label-${X.format("HH")}`,exit:{opacity:0,y:-10},initial:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:q*0.05},children:Intl.DateTimeFormat(z,{hour:"numeric",hour12:J==="12-hour"}).format(X.toDate())},`${G}-motion`)},`${G}-presence`)})})]})]})};import{AnimatePresence as G2,motion as L2}from"motion/react";import{useMemo as FP}from"react";import{jsx as J0,jsxs as Hf}from"react/jsx-runtime";var N2=()=>{let{currentDate:f,getVisibleResources:P,firstDayOfWeek:$,currentLocale:z,timeFormat:J,t:Z}=o(),p=P(),X=FP(()=>$0(f,$),[f,$]),q=FP(()=>({id:"time-col",days:q0({referenceDate:f}),day:void 0,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(G)=>J0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Intl.DateTimeFormat(z,{hour:"numeric",hour12:J==="12-hour"}).format(G.toDate())})}),[f,z,J]),Y=FP(()=>p.flatMap((G)=>X.map((Q)=>({id:`day-col-${Q.format("YYYY-MM-DD")}-resource-${G.id}`,resourceId:G.id,day:Q,days:q0({referenceDate:Q}),gridType:"hour"}))),[p,X]);return J0(O0,{allDayRow:Hf("div",{className:"flex",children:[J0(_f,{}),p.map((G)=>J0(v0,{classes:{cell:"min-w-50"},days:X,resource:G,showSpacer:!1},`resource-week-allday-row-${G.id}`))]}),classes:{header:"h-24"},columns:[q,...Y],"data-testid":"resource-week",gridType:"hour",children:Hf("div",{className:"flex-1 flex flex-col",children:[Hf("div",{className:"flex h-12",children:[J0("div",{className:"shrink-0 w-16 border-r z-20 bg-background sticky left-0",children:J0("span",{className:"px-2 h-full w-full flex justify-center items-end text-xs text-muted-foreground",children:Z("week")})}),p.map((G,Q)=>{let B=`resource-week-header-${G.id}-day`;return J0(G2,{mode:"wait",children:J0(L2.div,{animate:{opacity:1,y:0},className:_("shrink-0 border-r last:border-r-0 border-b flex items-center text-center font-medium w-[calc(7*var(--spacing)*50)]"),exit:{opacity:0,y:-10},initial:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:Q*0.05},children:J0(i0,{className:"h-full",resource:G,children:J0("div",{className:"sticky left-1/2 text-sm font-medium truncate",children:G.title})})},`${B}-motion`)},`${B}-presence`)})]}),Hf("div",{className:"flex h-12",children:[J0("div",{className:"shrink-0 w-16 border-r border-b z-20 bg-background sticky left-0",children:J0("span",{className:"px-2 h-full w-full flex justify-center items-start font-medium",children:f.week()})}),Y.map((G,Q)=>{let B=G.day,W=`resource-week-header-${B.toISOString()}-hour-${G.resourceId}`;return J0(G2,{mode:"wait",children:Hf(L2.div,{animate:{opacity:1,y:0},className:_("w-50 border-r last:border-r-0 border-b flex flex-col items-center justify-center text-xs shrink-0 bg-background"),"data-testid":`resource-week-time-label-${B.format("HH")}`,exit:{opacity:0,y:-10},initial:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:Q*0.05},children:[J0("div",{className:"text-sm",children:B.format("ddd")}),J0("div",{className:"text-xs text-muted-foreground",children:B.format("M/D")})]},`${W}-motion`)},`${W}-presence`)})]})]})})};import{jsx as B2}from"react/jsx-runtime";var A2=()=>{let{orientation:f}=o();if(f==="vertical")return B2(N2,{});return B2(K2,{})};import{jsx as w0,jsxs as R3}from"react/jsx-runtime";var W2=()=>{let{view:f}=o(),P={month:w0(Q2,{},"month"),week:w0(A2,{},"week"),day:w0(Z2,{},"day")};return R3("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-resource-calendar",children:[w0(Of,{className:"p-1"}),w0(Cf,{children:w0(S3,{mode:"wait",children:w0(I3.div,{animate:{opacity:1,x:0},className:"w-full h-[calc(100%-3.5rem)] @container/calendar-body",exit:{opacity:0,x:-20},initial:{opacity:0,x:20},transition:{duration:0.1,ease:"easeInOut"},children:w0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:P[f]})},f)})}),w0(uf,{})]})};import{jsx as O2}from"react/jsx-runtime";var H3=({events:f=[],resources:P=[],firstDayOfWeek:$="sunday",initialView:z="month",initialDate:J,disableDragAndDrop:Z=!1,dayMaxEvents:p=Jf,timeFormat:X="12-hour",eventSpacing:q=h0,...Y})=>{return O2(gP,{dayMaxEvents:p,disableDragAndDrop:Z,eventSpacing:q,events:bf(f),firstDayOfWeek:kf[$],initialDate:t0(J),initialView:z,resources:P,timeFormat:X,...Y,children:O2(W2,{})})};export{o2 as useIlamyResourceCalendarContext,v2 as useIlamyCalendarContext,s0 as isRecurringEvent,PP as generateRecurringEvents,ZP as defaultTranslations,qX as RRule,H3 as IlamyResourceCalendar,L3 as IlamyCalendar};
|
|
5
5
|
|
|
6
|
-
//# debugId=
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2luZGV4LnRzIiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlci50cyIsICJzcmMvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnLnRzIiwgInNyYy9saWIvdXRpbHMvaW5kZXgudHMiLCAic3JjL2xpYi91dGlscy9kYXRlLXV0aWxzLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LWNhbGVuZGFyLnRzeCIsICJzcmMvY29tcG9uZW50cy9kcmFnLWFuZC1kcm9wL2NhbGVuZGFyLWRuZC1jb250ZXh0LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9idXR0b24udHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2RpYWxvZy50c3giLCAic3JjL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0LnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQudHMiLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dC50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9wcm92aWRlci50c3giLCAic3JjL2hvb2tzL3VzZS1jYWxlbmRhci1lbmdpbmUudHMiLCAic3JjL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdC50cyIsICJzcmMvbGliL2NvbnN0YW50cy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZy50c3giLCAic3JjL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9kbmQtdXRpbHMudHMiLCAic3JjL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9ldmVudC1kcmFnLW92ZXJsYXkudHN4IiwgInNyYy9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvY2hlY2tib3gudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYWxlbmRhci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvcG9wb3Zlci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvaW5wdXQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2xhYmVsLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYS50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvdGltZS1waWNrZXIudHN4IiwgInNyYy9ob29rcy91c2UtYXV0b2NvbXBsZXRlLXRpbWVwaWNrZXIudHMiLCAic3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXRvci9yZWN1cnJlbmNlLWVkaXRvci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvY2FyZC50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvc2VsZWN0LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9ob29rcy91c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMudHMiLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL2Jhc2UtaGVhZGVyLnRzeCIsICJzcmMvbGliL3V0aWxzL2V4cG9ydC1pY2FsLnRzIiwgInNyYy9jb21wb25lbnRzL2hlYWRlci90aXRsZS1jb250ZW50LnRzeCIsICJzcmMvY29tcG9uZW50cy9oZWFkZXIvdmlldy1jb250cm9scy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvZGF5LXZpZXcudHN4IiwgInNyYy9jb21wb25lbnRzL2Ryb3BwYWJsZS1jZWxsLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvYnVzaW5lc3MtaG91cnMudHMiLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy93ZWVrLWV2ZW50cy1sYXllci50c3giLCAic3JjL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudC50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZFdlZWtFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi13ZWVrLWV2ZW50cy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9kYXktYWxsLWRheS1yb3cudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMudHMiLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvZGF5LWV2ZW50cy1sYXllci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvZGF5LWhlYWRlci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvZGF5LXRpbWUtY29sLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L21vbnRoLXZpZXcudHN4IiwgInNyYy9jb21wb25lbnRzL2FsbC1ldmVudHMtZGlhbG9nLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L2RheS1jZWxsLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L21vbnRoLWhlYWRlci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstdmlldy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstYWxsLWRheS1yb3cudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy93ZWVrLWhlYWRlci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstZGF5LWNvbC50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstdGltZS1ncmlkLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy95ZWFyLXZpZXcveWVhci12aWV3LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9wcm92aWRlci50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvcmVzb3VyY2UtY2FsZW5kYXItYm9keS50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvcmVzb3VyY2UtZGF5LWhvcml6b250YWwudHN4IiwgInNyYy9jb21wb25lbnRzL2dyaWQtY2VsbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZFJlc291cmNlV2Vla0V2ZW50cy50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudHMtbGF5ZXIudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2luZGV4LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L3Jlc291cmNlLW1vbnRoLWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvaW5kZXgudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9yZXNvdXJjZS13ZWVrLWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIudHN4Il0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIi8vIE1haW4gY2FsZW5kYXIgY29tcG9uZW50c1xuXG4vLyBSZS1leHBvcnQgcnJ1bGUuanMgdHlwZXMgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSB7IEZyZXF1ZW5jeSwgV2Vla2RheSB9IGZyb20gJ3JydWxlJ1xuZXhwb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbi8vIEV4cG9ydCB0eXBlc1xuZXhwb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG4vLyBSUlVMRS1iYXNlZCByZWN1cnJlbmNlIHN5c3RlbVxuZXhwb3J0IHtcblx0Z2VuZXJhdGVSZWN1cnJpbmdFdmVudHMsXG5cdGlzUmVjdXJyaW5nRXZlbnQsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5leHBvcnQgdHlwZSB7IEV2ZW50Rm9ybVByb3BzIH0gZnJvbSAnLi9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybSdcbmV4cG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCwgV2Vla0RheXMgfSBmcm9tICcuL2NvbXBvbmVudHMvdHlwZXMnXG5leHBvcnQgeyBJbGFteUNhbGVuZGFyIH0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LWNhbGVuZGFyJ1xuZXhwb3J0IHR5cGUgeyBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB9IGZyb20gJy4vZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuLy8gUHVibGljIGNhbGVuZGFyIGNvbnRleHQgaG9va3NcbmV4cG9ydCB7IHVzZUlsYW15Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5leHBvcnQgdHlwZSB7XG5cdENlbGxDbGlja0luZm8sXG5cdElsYW15Q2FsZW5kYXJQcm9wcyxcbn0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmV4cG9ydCB0eXBlIHsgSWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHMgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXInXG5leHBvcnQgeyBJbGFteVJlc291cmNlQ2FsZW5kYXIgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXInXG5leHBvcnQgdHlwZSB7IFVzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHRSZXR1cm4gfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmV4cG9ydCB7IHVzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbi8vIFJlc291cmNlIGNhbGVuZGFyIHR5cGVzXG5leHBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmV4cG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnMgfSBmcm9tICcuL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdCdcblxuLy8gVHJhbnNsYXRpb24gc3lzdGVtXG5leHBvcnQgdHlwZSB7XG5cdFRyYW5zbGF0aW9uS2V5LFxuXHRUcmFuc2xhdGlvbnMsXG5cdFRyYW5zbGF0b3JGdW5jdGlvbixcbn0gZnJvbSAnLi9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBDYWxlbmRhclZpZXcsIFRpbWVGb3JtYXQgfSBmcm9tICcuL3R5cGVzJ1xuIiwKICAgICJpbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBvbWl0S2V5cywgc2FmZURhdGUgfSBmcm9tICdAL2xpYi91dGlscydcblxuZXhwb3J0IGNvbnN0IGlzUmVjdXJyaW5nRXZlbnQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBib29sZWFuID0+IHtcblx0cmV0dXJuIEJvb2xlYW4oZXZlbnQucnJ1bGUgfHwgZXZlbnQucmVjdXJyZW5jZUlkIHx8IGV2ZW50LnVpZClcbn1cblxuaW50ZXJmYWNlIEdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzUHJvcHMge1xuXHRldmVudDogQ2FsZW5kYXJFdmVudFxuXHRjdXJyZW50RXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0c3RhcnREYXRlOiBkYXlqcy5EYXlqc1xuXHRlbmREYXRlOiBkYXlqcy5EYXlqc1xufVxuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVSZWN1cnJpbmdFdmVudHMgPSAoe1xuXHRldmVudCxcblx0Y3VycmVudEV2ZW50cyxcblx0c3RhcnREYXRlLFxuXHRlbmREYXRlLFxufTogR2VuZXJhdGVSZWN1cnJpbmdFdmVudHNQcm9wcyk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdC8vIElmIG5vdCBhIHJlY3VycmluZyBldmVudCwgcmV0dXJuIGVtcHR5IGFycmF5XG5cdGlmICghZXZlbnQucnJ1bGUpIHtcblx0XHRyZXR1cm4gW11cblx0fVxuXG5cdHRyeSB7XG5cdFx0Ly8gQ3JlYXRlIHJ1bGUgZnJvbSBSUnVsZU9wdGlvbnMgZW5zdXJpbmcgZHRzdGFydCBpcyBhbHdheXMgcHJvdmlkZWRcblx0XHQvLyBJZiBkdHN0YXJ0IGlzIG1pc3NpbmcgZnJvbSB0aGUgUlJVTEUsIHVzZSB0aGUgZXZlbnQncyBzdGFydCB0aW1lIGFzIGZhbGxiYWNrXG5cdFx0Y29uc3QgcnVsZU9wdGlvbnM6IFJSdWxlT3B0aW9ucyA9IHtcblx0XHRcdC4uLmV2ZW50LnJydWxlLFxuXHRcdFx0ZHRzdGFydDogZXZlbnQucnJ1bGUuZHRzdGFydCB8fCBldmVudC5zdGFydC50b0RhdGUoKSxcblx0XHR9XG5cdFx0Y29uc3QgcnVsZSA9IG5ldyBSUnVsZShydWxlT3B0aW9ucylcblxuXHRcdGNvbnN0IG92ZXJyaWRlcyA9IGN1cnJlbnRFdmVudHMuZmlsdGVyKFxuXHRcdFx0KGUpID0+IGUucmVjdXJyZW5jZUlkICYmIGUudWlkID09PSBldmVudC51aWRcblx0XHQpXG5cblx0XHQvLyBDYWxjdWxhdGUgZXZlbnQgZHVyYXRpb24gdG8gZXhwYW5kIHNlYXJjaCB3aW5kb3cgZm9yIGV2ZW50cyB0aGF0IHNwYW4gdGhlIHJhbmdlXG5cdFx0Y29uc3QgZXZlbnREdXJhdGlvbiA9IGV2ZW50LmVuZC5kaWZmKGV2ZW50LnN0YXJ0KVxuXG5cdFx0Ly8gRXhwYW5kIHNlYXJjaCB3aW5kb3cgYmFja3dhcmQgYnkgZXZlbnQgZHVyYXRpb24gdG8gY2F0Y2ggZXZlbnRzIHRoYXQgc3RhcnQgYmVmb3JlXG5cdFx0Ly8gdGhlIHJhbmdlIGJ1dCBzcGFuIGludG8gaXRcblx0XHRjb25zdCBleHBhbmRlZFN0YXJ0RGF0ZVRpbWUgPSBzdGFydERhdGVcblx0XHRcdC5zdWJ0cmFjdChldmVudER1cmF0aW9uLCAnbWlsbGlzZWNvbmQnKVxuXHRcdFx0LnRvRGF0ZSgpXG5cdFx0Y29uc3QgZW5kRGF0ZVRpbWUgPSBlbmREYXRlLnRvRGF0ZSgpXG5cblx0XHQvLyBHZXQgYWxsIG9jY3VycmVuY2VzIGluIHRoZSBleHBhbmRlZCByYW5nZVxuXHRcdGNvbnN0IG9jY3VycmVuY2VzID0gcnVsZS5iZXR3ZWVuKGV4cGFuZGVkU3RhcnREYXRlVGltZSwgZW5kRGF0ZVRpbWUsIHRydWUpXG5cblx0XHQvLyBDb252ZXJ0IG9jY3VycmVuY2VzIHRvIENhbGVuZGFyRXZlbnQgaW5zdGFuY2VzXG5cdFx0Y29uc3QgcmVjdXJyaW5nRXZlbnRzOiBDYWxlbmRhckV2ZW50W10gPSBvY2N1cnJlbmNlc1xuXHRcdFx0Lm1hcCgob2NjdXJyZW5jZSwgaW5kZXgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb2NjdXJyZW5jZURhdGUgPSBkYXlqcyhvY2N1cnJlbmNlKVxuXHRcdFx0XHRjb25zdCBleGlzdGluZ092ZXJyaWRlID0gb3ZlcnJpZGVzLmZpbmQoKGUpID0+XG5cdFx0XHRcdFx0c2FmZURhdGUoZS5yZWN1cnJlbmNlSWQpPy5pc1NhbWUob2NjdXJyZW5jZURhdGUpXG5cdFx0XHRcdClcblxuXHRcdFx0XHQvLyBJZiB0aGVyZSdzIGFuIG92ZXJyaWRlLCB1c2UgaXRcblx0XHRcdFx0aWYgKGV4aXN0aW5nT3ZlcnJpZGUpIHtcblx0XHRcdFx0XHRyZXR1cm4geyAuLi5ldmVudCwgLi4uZXhpc3RpbmdPdmVycmlkZSB9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDYWxjdWxhdGUgdGhlIGR1cmF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIGV2ZW50XG5cdFx0XHRcdGNvbnN0IG9yaWdpbmFsRHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcblx0XHRcdFx0Y29uc3QgbmV3RW5kVGltZSA9IG9jY3VycmVuY2VEYXRlLmFkZChvcmlnaW5hbER1cmF0aW9uLCAnbWlsbGlzZWNvbmQnKVxuXHRcdFx0XHRjb25zdCByZWN1cnJpbmdFdmVudElkID0gYCR7ZXZlbnQuaWR9XyR7aW5kZXh9YFxuXHRcdFx0XHRjb25zdCBwYXJlbnRVSUQgPSBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxuXG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgcmVjdXJyaW5nIGV2ZW50IGluc3RhbmNlXG5cdFx0XHRcdGNvbnN0IHJlY3VycmluZ0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0XHRcdGlkOiByZWN1cnJpbmdFdmVudElkLFxuXHRcdFx0XHRcdHN0YXJ0OiBvY2N1cnJlbmNlRGF0ZSxcblx0XHRcdFx0XHRlbmQ6IG5ld0VuZFRpbWUsXG5cdFx0XHRcdFx0dWlkOiBwYXJlbnRVSUQsIC8vIFNhbWUgVUlEIGFzIHBhcmVudCBmb3IgcHJvcGVyIGdyb3VwaW5nXG5cdFx0XHRcdFx0cnJ1bGU6IHVuZGVmaW5lZCwgLy8gSW5zdGFuY2UgZXZlbnRzIGRvbid0IGhhdmUgUlJVTEVcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiByZWN1cnJpbmdFdmVudFxuXHRcdFx0fSlcblx0XHRcdC5maWx0ZXIoKHJlY3VycmluZ0V2ZW50KSA9PiB7XG5cdFx0XHRcdC8vIEZpbHRlciBvdXQgRVhEQVRFIGV4Y2x1c2lvbnNcblx0XHRcdFx0Y29uc3QgaGFzRXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXMgJiYgZXZlbnQuZXhkYXRlcy5sZW5ndGggPiAwXG5cdFx0XHRcdGlmIChoYXNFeGRhdGVzKSB7XG5cdFx0XHRcdFx0Y29uc3QgZXZlbnRTdGFydElTTyA9IHJlY3VycmluZ0V2ZW50LnN0YXJ0LnRvSVNPU3RyaW5nKClcblx0XHRcdFx0XHRjb25zdCBpc0V4Y2x1ZGVkID0gZXZlbnQuZXhkYXRlcy5pbmNsdWRlcyhldmVudFN0YXJ0SVNPKVxuXHRcdFx0XHRcdGlmIChpc0V4Y2x1ZGVkKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGaWx0ZXIgdG8gb25seSBpbmNsdWRlIGV2ZW50cyB0aGF0IHNwYW4gdGhyb3VnaCB0aGUgb3JpZ2luYWwgcmVxdWVzdGVkIGRhdGUgcmFuZ2Vcblx0XHRcdFx0Ly8gQW4gZXZlbnQgc3BhbnMgdGhlIHJhbmdlIGlmOiBldmVudF9zdGFydCA8IHJhbmdlX2VuZCBBTkQgZXZlbnRfZW5kID4gcmFuZ2Vfc3RhcnRcblx0XHRcdFx0Ly8gVXNlIGlzU2FtZU9yQmVmb3JlL2lzU2FtZU9yQWZ0ZXIgdG8gaW5jbHVkZSBib3VuZGFyeSBjYXNlc1xuXHRcdFx0XHRjb25zdCBldmVudFNwYW5zUmFuZ2UgPVxuXHRcdFx0XHRcdHJlY3VycmluZ0V2ZW50LnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpICYmXG5cdFx0XHRcdFx0cmVjdXJyaW5nRXZlbnQuZW5kLmlzU2FtZU9yQWZ0ZXIoc3RhcnREYXRlKVxuXG5cdFx0XHRcdHJldHVybiBldmVudFNwYW5zUmFuZ2Vcblx0XHRcdH0pXG5cblx0XHRyZXR1cm4gcmVjdXJyaW5nRXZlbnRzXG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gSGFuZGxlIGludmFsaWQgUlJVTEUgb3B0aW9uc1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdGBJbnZhbGlkIFJSVUxFIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkoZXZlbnQucnJ1bGUpfS4gRXJyb3I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuXHRcdClcblx0fVxufVxuXG5pbnRlcmZhY2UgVXBkYXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG5cdHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cblx0Y3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHNjb3BlOiAndGhpcycgfCAnZm9sbG93aW5nJyB8ICdhbGwnXG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVSZWN1cnJpbmdFdmVudCA9ICh7XG5cdHRhcmdldEV2ZW50LFxuXHR1cGRhdGVzLFxuXHRjdXJyZW50RXZlbnRzLFxuXHRzY29wZSxcbn06IFVwZGF0ZVJlY3VycmluZ0V2ZW50UHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmN1cnJlbnRFdmVudHNdXG5cblx0Ly8gRmluZCB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcblx0Y29uc3QgYmFzZUV2ZW50SW5kZXggPSB1cGRhdGVkRXZlbnRzLmZpbmRJbmRleCgoZSkgPT4ge1xuXHRcdGNvbnN0IHBhcmVudFVpZCA9IGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYFxuXHRcdHJldHVybiBwYXJlbnRVaWQgPT09IHRhcmdldEV2ZW50LnVpZCAmJiBlLnJydWxlICYmICFlLnJlY3VycmVuY2VJZFxuXHR9KVxuXG5cdGlmIChiYXNlRXZlbnRJbmRleCA9PT0gLTEpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0Jhc2UgcmVjdXJyaW5nIGV2ZW50IG5vdCBmb3VuZCcpXG5cdH1cblxuXHRjb25zdCBiYXNlRXZlbnQgPSB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XVxuXG5cdHN3aXRjaCAoc2NvcGUpIHtcblx0XHRjYXNlICd0aGlzJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGV2ZW50IG9ubHlcIiAtIEFkZCBFWERBVEUgdG8gYmFzZSBldmVudCBhbmQgY3JlYXRlIHN0YW5kYWxvbmUgbW9kaWZpZWQgZXZlbnRcblx0XHRcdGNvbnN0IHRhcmdldEV2ZW50U3RhcnRJU08gPSB0YXJnZXRFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG5cdFx0XHRjb25zdCBleGlzdGluZ0V4ZGF0ZXMgPSBiYXNlRXZlbnQuZXhkYXRlcyB8fCBbXVxuXHRcdFx0Y29uc3QgdXBkYXRlZEV4ZGF0ZXMgPSBbLi4uZXhpc3RpbmdFeGRhdGVzLCB0YXJnZXRFdmVudFN0YXJ0SVNPXVxuXG5cdFx0XHRjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdGV4ZGF0ZXM6IHVwZGF0ZWRFeGRhdGVzLFxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG5cblx0XHRcdC8vIENyZWF0ZSBzdGFuZGFsb25lIG1vZGlmaWVkIGV2ZW50IHdpdGggcmVjdXJyZW5jZUlkXG5cdFx0XHRjb25zdCBtb2RpZmllZEV2ZW50SWQgPSBgJHt0YXJnZXRFdmVudC5pZH1fbW9kaWZpZWRfJHtEYXRlLm5vdygpfWBcblx0XHRcdGNvbnN0IG1vZGlmaWVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgVE9ETzogZml4IHRoZSB0eXBlc1xuXHRcdFx0XHQuLi5vbWl0S2V5cyh0YXJnZXRFdmVudCwgWyd3aWR0aCcsICdoZWlnaHQnLCAndG9wJywgJ2xlZnQnLCAncmlnaHQnXSksXG5cdFx0XHRcdC4uLnVwZGF0ZXMsXG5cdFx0XHRcdGlkOiBtb2RpZmllZEV2ZW50SWQsXG5cdFx0XHRcdHJlY3VycmVuY2VJZDogdGFyZ2V0RXZlbnRTdGFydElTTywgLy8gVGhpcyBtYXJrcyBpdCBhcyBhIG1vZGlmaWVkIGluc3RhbmNlXG5cdFx0XHRcdHVpZDogYmFzZUV2ZW50LnVpZCB8fCBgJHtiYXNlRXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYCwgLy8gS2VlcCBzYW1lIFVJRCBhcyBiYXNlIGV2ZW50IChpQ2FsZW5kYXIgc3RhbmRhcmQpXG5cdFx0XHRcdHJydWxlOiB1bmRlZmluZWQsIC8vIFN0YW5kYWxvbmUgZXZlbnRzIGRvbid0IGhhdmUgUlJVTEVcblx0XHRcdH0gYXMgQ2FsZW5kYXJFdmVudFxuXHRcdFx0dXBkYXRlZEV2ZW50cy5wdXNoKG1vZGlmaWVkRXZlbnQpXG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGNhc2UgJ2ZvbGxvd2luZyc6IHtcblx0XHRcdC8vIFwiVGhpcyBhbmQgZm9sbG93aW5nXCIgLSBUZXJtaW5hdGUgb3JpZ2luYWwgc2VyaWVzIGFuZCBjcmVhdGUgbmV3IHNlcmllc1xuXG5cdFx0XHQvLyBDYWxjdWxhdGUgdGhlIHRlcm1pbmF0aW9uIGRhdGU6IGRheSBiZWZvcmUgdGFyZ2V0IHdpdGggZW5kIG9mIGRheSB0aW1lXG5cdFx0XHQvLyBUaGlzIGVuc3VyZXMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBiZWZvcmUgdGFyZ2V0IGlzIGluY2x1ZGVkIGluIHRoZSB0ZXJtaW5hdGVkIHNlcmllc1xuXHRcdFx0Y29uc3QgZGF5QmVmb3JlVGFyZ2V0ID0gdGFyZ2V0RXZlbnQuc3RhcnQuc3VidHJhY3QoMSwgJ2RheScpXG5cdFx0XHRjb25zdCB0ZXJtaW5hdGlvbkRhdGUgPSBkYXlCZWZvcmVUYXJnZXQuZW5kT2YoJ2RheScpLnRvRGF0ZSgpXG5cblx0XHRcdC8vIFVwZGF0ZSBvcmlnaW5hbCBzZXJpZXMgd2l0aCBVTlRJTCB0byBlbmQgYmVmb3JlIHRhcmdldCBkYXRlXG5cdFx0XHRjb25zdCB0ZXJtaW5hdGVkRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0cnJ1bGU6IHtcblx0XHRcdFx0XHQuLi5iYXNlRXZlbnQucnJ1bGUsXG5cdFx0XHRcdFx0dW50aWw6IHRlcm1pbmF0aW9uRGF0ZSxcblx0XHRcdFx0fSxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdGVybWluYXRlZEV2ZW50XG5cblx0XHRcdC8vIENyZWF0ZSBuZXcgc2VyaWVzIHN0YXJ0aW5nIGZyb20gdGFyZ2V0IGRhdGVcblx0XHRcdGNvbnN0IG9yaWdpbmFsRHVyYXRpb24gPSBiYXNlRXZlbnQuZW5kLmRpZmYoYmFzZUV2ZW50LnN0YXJ0KVxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzU3RhcnRUaW1lID0gdXBkYXRlcy5zdGFydCB8fCB0YXJnZXRFdmVudC5zdGFydFxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzRW5kVGltZSA9XG5cdFx0XHRcdHVwZGF0ZXMuZW5kIHx8IG5ld1Nlcmllc1N0YXJ0VGltZS5hZGQob3JpZ2luYWxEdXJhdGlvbilcblx0XHRcdGNvbnN0IG5ld1Nlcmllc0lkID0gYCR7YmFzZUV2ZW50LmlkfV9mb2xsb3dpbmdgXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNVSUQgPSBgJHtuZXdTZXJpZXNJZH1AaWxhbXkuY2FsZW5kYXJgXG5cblx0XHRcdGNvbnN0IG5ld1Nlcmllc0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdC4uLnVwZGF0ZXMsXG5cdFx0XHRcdHJydWxlOiB7XG5cdFx0XHRcdFx0Li4uYmFzZUV2ZW50LnJydWxlLFxuXHRcdFx0XHRcdC4uLnVwZGF0ZXMucnJ1bGUsXG5cdFx0XHRcdFx0ZHRzdGFydDogbmV3U2VyaWVzU3RhcnRUaW1lLnRvRGF0ZSgpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRpZDogbmV3U2VyaWVzSWQsXG5cdFx0XHRcdHVpZDogbmV3U2VyaWVzVUlELCAvLyBOZXcgVUlEIGZvciBuZXcgc2VyaWVzXG5cdFx0XHRcdHN0YXJ0OiBuZXdTZXJpZXNTdGFydFRpbWUsXG5cdFx0XHRcdGVuZDogbmV3U2VyaWVzRW5kVGltZSxcblx0XHRcdFx0cmVjdXJyZW5jZUlkOiB1bmRlZmluZWQsIC8vIFRoaXMgaXMgYSBuZXcgYmFzZSBldmVudCwgbm90IGFuIGluc3RhbmNlXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzLnB1c2gobmV3U2VyaWVzRXZlbnQpXG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGNhc2UgJ2FsbCc6IHtcblx0XHRcdC8vIFwiQWxsIGV2ZW50c1wiIC0gVXBkYXRlIHRoZSBiYXNlIHJlY3VycmluZyBldmVudFxuXHRcdFx0Y29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHQuLi51cGRhdGVzLFxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdGBJbnZhbGlkIHNjb3BlOiAke3Njb3BlfS4gTXVzdCBiZSAndGhpcycsICdmb2xsb3dpbmcnLCBvciAnYWxsJ2Bcblx0XHRcdClcblx0fVxuXG5cdHJldHVybiB1cGRhdGVkRXZlbnRzXG59XG5cbmludGVyZmFjZSBEZWxldGVSZWN1cnJpbmdFdmVudFByb3BzIHtcblx0dGFyZ2V0RXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0Y3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHNjb3BlOiAndGhpcycgfCAnZm9sbG93aW5nJyB8ICdhbGwnXG59XG5cbmV4cG9ydCBjb25zdCBkZWxldGVSZWN1cnJpbmdFdmVudCA9ICh7XG5cdHRhcmdldEV2ZW50LFxuXHRjdXJyZW50RXZlbnRzLFxuXHRzY29wZSxcbn06IERlbGV0ZVJlY3VycmluZ0V2ZW50UHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmN1cnJlbnRFdmVudHNdXG5cblx0Ly8gRmluZCB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcblx0Y29uc3QgYmFzZUV2ZW50SW5kZXggPSB1cGRhdGVkRXZlbnRzLmZpbmRJbmRleCgoZSkgPT4ge1xuXHRcdGNvbnN0IHBhcmVudFVpZCA9IGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYFxuXHRcdHJldHVybiBwYXJlbnRVaWQgPT09IHRhcmdldEV2ZW50LnVpZCAmJiBlLnJydWxlICYmICFlLnJlY3VycmVuY2VJZFxuXHR9KVxuXG5cdGlmIChiYXNlRXZlbnRJbmRleCA9PT0gLTEpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0Jhc2UgcmVjdXJyaW5nIGV2ZW50IG5vdCBmb3VuZCcpXG5cdH1cblxuXHRjb25zdCBiYXNlRXZlbnQgPSB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XVxuXG5cdHN3aXRjaCAoc2NvcGUpIHtcblx0XHRjYXNlICd0aGlzJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGV2ZW50IG9ubHlcIiAtIEFkZCBFWERBVEUgdG8gZXhjbHVkZSB0aGlzIG9jY3VycmVuY2Vcblx0XHRcdGNvbnN0IHRhcmdldEV2ZW50U3RhcnRJU08gPSB0YXJnZXRFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG5cdFx0XHRjb25zdCBleGlzdGluZ0V4ZGF0ZXMgPSBiYXNlRXZlbnQuZXhkYXRlcyB8fCBbXVxuXHRcdFx0Y29uc3QgdXBkYXRlZEV4ZGF0ZXMgPSBbLi4uZXhpc3RpbmdFeGRhdGVzLCB0YXJnZXRFdmVudFN0YXJ0SVNPXVxuXG5cdFx0XHRjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0geyAuLi5iYXNlRXZlbnQsIGV4ZGF0ZXM6IHVwZGF0ZWRFeGRhdGVzIH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdmb2xsb3dpbmcnOiB7XG5cdFx0XHQvLyBcIlRoaXMgYW5kIGZvbGxvd2luZ1wiIC0gVGVybWluYXRlIHNlcmllcyB3aXRoIFVOVElMIGJlZm9yZSB0YXJnZXQgZGF0ZVxuXG5cdFx0XHQvLyBDYWxjdWxhdGUgdGhlIHRlcm1pbmF0aW9uIGRhdGU6IGRheSBiZWZvcmUgdGFyZ2V0IHdpdGggZW5kIG9mIGRheSB0aW1lXG5cdFx0XHQvLyBUaGlzIGVuc3VyZXMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBiZWZvcmUgdGFyZ2V0IGlzIGluY2x1ZGVkIGluIHRoZSB0ZXJtaW5hdGVkIHNlcmllc1xuXHRcdFx0Y29uc3QgZGF5QmVmb3JlVGFyZ2V0ID0gdGFyZ2V0RXZlbnQuc3RhcnQuc3VidHJhY3QoMSwgJ2RheScpXG5cdFx0XHRjb25zdCB0ZXJtaW5hdGlvbkRhdGUgPSBkYXlCZWZvcmVUYXJnZXQuZW5kT2YoJ2RheScpLnRvRGF0ZSgpXG5cblx0XHRcdGNvbnN0IHRlcm1pbmF0ZWRFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHRycnVsZToge1xuXHRcdFx0XHRcdC4uLmJhc2VFdmVudC5ycnVsZSxcblx0XHRcdFx0XHR1bnRpbDogdGVybWluYXRpb25EYXRlLFxuXHRcdFx0XHR9LFxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB0ZXJtaW5hdGVkRXZlbnRcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y2FzZSAnYWxsJzoge1xuXHRcdFx0Ly8gXCJBbGwgZXZlbnRzXCIgLSBSZW1vdmUgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzXG5cdFx0XHRjb25zdCBldmVudHNXaXRob3V0VGFyZ2V0U2VyaWVzID0gdXBkYXRlZEV2ZW50cy5maWx0ZXIoXG5cdFx0XHRcdChlKSA9PiBlLnVpZCAhPT0gdGFyZ2V0RXZlbnQudWlkXG5cdFx0XHQpXG5cdFx0XHRyZXR1cm4gZXZlbnRzV2l0aG91dFRhcmdldFNlcmllc1xuXHRcdH1cblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdGBJbnZhbGlkIHNjb3BlOiAke3Njb3BlfS4gTXVzdCBiZSAndGhpcycsICdmb2xsb3dpbmcnLCBvciAnYWxsJ2Bcblx0XHRcdClcblx0fVxuXG5cdHJldHVybiB1cGRhdGVkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcbmltcG9ydCBpc0JldHdlZW4gZnJvbSAnZGF5anMvcGx1Z2luL2lzQmV0d2Vlbi5qcydcbmltcG9ydCBpc1NhbWVPckFmdGVyIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckFmdGVyLmpzJ1xuaW1wb3J0IGlzU2FtZU9yQmVmb3JlIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckJlZm9yZS5qcydcbmltcG9ydCBsb2NhbGVEYXRhIGZyb20gJ2RheWpzL3BsdWdpbi9sb2NhbGVEYXRhLmpzJ1xuaW1wb3J0IG1pbk1heCBmcm9tICdkYXlqcy9wbHVnaW4vbWluTWF4LmpzJ1xuaW1wb3J0IHRpbWV6b25lIGZyb20gJ2RheWpzL3BsdWdpbi90aW1lem9uZS5qcydcbmltcG9ydCB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yy5qcydcbmltcG9ydCB3ZWVrZGF5IGZyb20gJ2RheWpzL3BsdWdpbi93ZWVrZGF5LmpzJ1xuaW1wb3J0IHdlZWtPZlllYXIgZnJvbSAnZGF5anMvcGx1Z2luL3dlZWtPZlllYXIuanMnXG5cbi8vIEV4dGVuZCBkYXlqcyB3aXRoIHBsdWdpbnNcbmRheWpzLmV4dGVuZCh3ZWVrZGF5KVxuZGF5anMuZXh0ZW5kKHdlZWtPZlllYXIpXG5kYXlqcy5leHRlbmQoaXNTYW1lT3JBZnRlcilcbmRheWpzLmV4dGVuZChpc1NhbWVPckJlZm9yZSlcbmRheWpzLmV4dGVuZChpc0JldHdlZW4pXG5kYXlqcy5leHRlbmQobWluTWF4KVxuZGF5anMuZXh0ZW5kKHRpbWV6b25lKVxuZGF5anMuZXh0ZW5kKHV0YylcbmRheWpzLmV4dGVuZChsb2NhbGVEYXRhKVxuXG4vLyBJbXBvcnQgYWxsIGRheWpzIGxvY2FsZXMgYWxwaGFiZXRpY2FsbHlcbi8vIGxvY2FsZS5qc29uIGZpbGU6IFt7XCJrZXlcIjpcImFmXCIsXCJuYW1lXCI6XCJBZnJpa2FhbnNcIn0se1wia2V5XCI6XCJhbVwiLFwibmFtZVwiOlwiQW1oYXJpY1wifSx7XCJrZXlcIjpcImFyLWR6XCIsXCJuYW1lXCI6XCJBcmFiaWMgKEFsZ2VyaWEpXCJ9LHtcImtleVwiOlwiYXItaXFcIixcIm5hbWVcIjpcIiBBcmFiaWMgKElyYXEpXCJ9LHtcImtleVwiOlwiYXIta3dcIixcIm5hbWVcIjpcIkFyYWJpYyAoS3V3YWl0KVwifSx7XCJrZXlcIjpcImFyLWx5XCIsXCJuYW1lXCI6XCJBcmFiaWMgKEx5YmlhKVwifSx7XCJrZXlcIjpcImFyLW1hXCIsXCJuYW1lXCI6XCJBcmFiaWMgKE1vcm9jY28pXCJ9LHtcImtleVwiOlwiYXItc2FcIixcIm5hbWVcIjpcIkFyYWJpYyAoU2F1ZGkgQXJhYmlhKVwifSx7XCJrZXlcIjpcImFyLXRuXCIsXCJuYW1lXCI6XCIgQXJhYmljIChUdW5pc2lhKVwifSx7XCJrZXlcIjpcImFyXCIsXCJuYW1lXCI6XCJBcmFiaWNcIn0se1wia2V5XCI6XCJhelwiLFwibmFtZVwiOlwiQXplcmJhaWphbmlcIn0se1wia2V5XCI6XCJiZVwiLFwibmFtZVwiOlwiQmVsYXJ1c2lhblwifSx7XCJrZXlcIjpcImJnXCIsXCJuYW1lXCI6XCJCdWxnYXJpYW5cIn0se1wia2V5XCI6XCJiaVwiLFwibmFtZVwiOlwiQmlzbGFtYVwifSx7XCJrZXlcIjpcImJtXCIsXCJuYW1lXCI6XCJCYW1iYXJhXCJ9LHtcImtleVwiOlwiYm4tYmRcIixcIm5hbWVcIjpcIkJlbmdhbGkgKEJhbmdsYWRlc2gpXCJ9LHtcImtleVwiOlwiYm5cIixcIm5hbWVcIjpcIkJlbmdhbGlcIn0se1wia2V5XCI6XCJib1wiLFwibmFtZVwiOlwiVGliZXRhblwifSx7XCJrZXlcIjpcImJyXCIsXCJuYW1lXCI6XCJCcmV0b25cIn0se1wia2V5XCI6XCJic1wiLFwibmFtZVwiOlwiQm9zbmlhblwifSx7XCJrZXlcIjpcImNhXCIsXCJuYW1lXCI6XCJDYXRhbGFuXCJ9LHtcImtleVwiOlwiY3NcIixcIm5hbWVcIjpcIkN6ZWNoXCJ9LHtcImtleVwiOlwiY3ZcIixcIm5hbWVcIjpcIkNodXZhc2hcIn0se1wia2V5XCI6XCJjeVwiLFwibmFtZVwiOlwiV2Vsc2hcIn0se1wia2V5XCI6XCJkZS1hdFwiLFwibmFtZVwiOlwiR2VybWFuIChBdXN0cmlhKVwifSx7XCJrZXlcIjpcImRhXCIsXCJuYW1lXCI6XCJEYW5pc2hcIn0se1wia2V5XCI6XCJkZS1jaFwiLFwibmFtZVwiOlwiR2VybWFuIChTd2l0emVybGFuZClcIn0se1wia2V5XCI6XCJkZVwiLFwibmFtZVwiOlwiR2VybWFuXCJ9LHtcImtleVwiOlwiZHZcIixcIm5hbWVcIjpcIk1hbGRpdmlhblwifSx7XCJrZXlcIjpcImVsXCIsXCJuYW1lXCI6XCJHcmVla1wifSx7XCJrZXlcIjpcImVuLWF1XCIsXCJuYW1lXCI6XCJFbmdsaXNoIChBdXN0cmFsaWEpXCJ9LHtcImtleVwiOlwiZW4tY2FcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKENhbmFkYSlcIn0se1wia2V5XCI6XCJlbi1nYlwiLFwibmFtZVwiOlwiRW5nbGlzaCAoVW5pdGVkIEtpbmdkb20pXCJ9LHtcImtleVwiOlwiZW4taWVcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKElyZWxhbmQpXCJ9LHtcImtleVwiOlwiZW4taWxcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKElzcmFlbClcIn0se1wia2V5XCI6XCJlbi1pblwiLFwibmFtZVwiOlwiRW5nbGlzaCAoSW5kaWEpXCJ9LHtcImtleVwiOlwiZW4tbnpcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKE5ldyBaZWFsYW5kKVwifSx7XCJrZXlcIjpcImVuLXNnXCIsXCJuYW1lXCI6XCJFbmdsaXNoIChTaW5nYXBvcmUpXCJ9LHtcImtleVwiOlwiZW4tdHRcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKFRyaW5pZGFkICYgVG9iYWdvKVwifSx7XCJrZXlcIjpcImVvXCIsXCJuYW1lXCI6XCJFc3BlcmFudG9cIn0se1wia2V5XCI6XCJlblwiLFwibmFtZVwiOlwiRW5nbGlzaFwifSx7XCJrZXlcIjpcImVzLWRvXCIsXCJuYW1lXCI6XCJTcGFuaXNoIChEb21pbmljYW4gUmVwdWJsaWMpXCJ9LHtcImtleVwiOlwiZXMtbXhcIixcIm5hbWVcIjpcIlNwYW5pc2ggKE1leGljbylcIn0se1wia2V5XCI6XCJlcy1wclwiLFwibmFtZVwiOlwiU3BhbmlzaCAoUHVlcnRvIFJpY28pXCJ9LHtcImtleVwiOlwiZXMtdXNcIixcIm5hbWVcIjpcIlNwYW5pc2ggKFVuaXRlZCBTdGF0ZXMpXCJ9LHtcImtleVwiOlwiZXRcIixcIm5hbWVcIjpcIkVzdG9uaWFuXCJ9LHtcImtleVwiOlwiZXNcIixcIm5hbWVcIjpcIlNwYW5pc2hcIn0se1wia2V5XCI6XCJldVwiLFwibmFtZVwiOlwiQmFzcXVlXCJ9LHtcImtleVwiOlwiZmFcIixcIm5hbWVcIjpcIlBlcnNpYW5cIn0se1wia2V5XCI6XCJmb1wiLFwibmFtZVwiOlwiRmFyb2VzZVwifSx7XCJrZXlcIjpcImZpXCIsXCJuYW1lXCI6XCJGaW5uaXNoXCJ9LHtcImtleVwiOlwiZnItY2FcIixcIm5hbWVcIjpcIkZyZW5jaCAoQ2FuYWRhKVwifSx7XCJrZXlcIjpcImZyLWNoXCIsXCJuYW1lXCI6XCJGcmVuY2ggKFN3aXR6ZXJsYW5kKVwifSx7XCJrZXlcIjpcImZyXCIsXCJuYW1lXCI6XCJGcmVuY2hcIn0se1wia2V5XCI6XCJmeVwiLFwibmFtZVwiOlwiRnJpc2lhblwifSx7XCJrZXlcIjpcImdhXCIsXCJuYW1lXCI6XCJJcmlzaCBvciBJcmlzaCBHYWVsaWNcIn0se1wia2V5XCI6XCJnZFwiLFwibmFtZVwiOlwiU2NvdHRpc2ggR2FlbGljXCJ9LHtcImtleVwiOlwiZ29tLWxhdG5cIixcIm5hbWVcIjpcIktvbmthbmkgTGF0aW4gc2NyaXB0XCJ9LHtcImtleVwiOlwiZ2xcIixcIm5hbWVcIjpcIkdhbGljaWFuXCJ9LHtcImtleVwiOlwiZ3VcIixcIm5hbWVcIjpcIkd1amFyYXRpXCJ9LHtcImtleVwiOlwiaGVcIixcIm5hbWVcIjpcIkhlYnJld1wifSx7XCJrZXlcIjpcImhpXCIsXCJuYW1lXCI6XCJIaW5kaVwifSx7XCJrZXlcIjpcImhyXCIsXCJuYW1lXCI6XCJDcm9hdGlhblwifSx7XCJrZXlcIjpcImh1XCIsXCJuYW1lXCI6XCJIdW5nYXJpYW5cIn0se1wia2V5XCI6XCJodFwiLFwibmFtZVwiOlwiSGFpdGlhbiBDcmVvbGUgKEhhaXRpKVwifSx7XCJrZXlcIjpcImh5LWFtXCIsXCJuYW1lXCI6XCJBcm1lbmlhblwifSx7XCJrZXlcIjpcImlkXCIsXCJuYW1lXCI6XCJJbmRvbmVzaWFuXCJ9LHtcImtleVwiOlwiaXNcIixcIm5hbWVcIjpcIkljZWxhbmRpY1wifSx7XCJrZXlcIjpcIml0LWNoXCIsXCJuYW1lXCI6XCJJdGFsaWFuIChTd2l0emVybGFuZClcIn0se1wia2V5XCI6XCJpdFwiLFwibmFtZVwiOlwiSXRhbGlhblwifSx7XCJrZXlcIjpcImphXCIsXCJuYW1lXCI6XCJKYXBhbmVzZVwifSx7XCJrZXlcIjpcImp2XCIsXCJuYW1lXCI6XCJKYXZhbmVzZVwifSx7XCJrZXlcIjpcImthXCIsXCJuYW1lXCI6XCJHZW9yZ2lhblwifSx7XCJrZXlcIjpcImtrXCIsXCJuYW1lXCI6XCJLYXpha2hcIn0se1wia2V5XCI6XCJrbVwiLFwibmFtZVwiOlwiQ2FtYm9kaWFuXCJ9LHtcImtleVwiOlwia25cIixcIm5hbWVcIjpcIkthbm5hZGFcIn0se1wia2V5XCI6XCJrb1wiLFwibmFtZVwiOlwiS29yZWFuXCJ9LHtcImtleVwiOlwia3VcIixcIm5hbWVcIjpcIkt1cmRpc2hcIn0se1wia2V5XCI6XCJreVwiLFwibmFtZVwiOlwiS3lyZ3l6XCJ9LHtcImtleVwiOlwibGJcIixcIm5hbWVcIjpcIkx1eGVtYm91cmdpc2hcIn0se1wia2V5XCI6XCJsb1wiLFwibmFtZVwiOlwiTGFvXCJ9LHtcImtleVwiOlwibHRcIixcIm5hbWVcIjpcIkxpdGh1YW5pYW5cIn0se1wia2V5XCI6XCJsdlwiLFwibmFtZVwiOlwiTGF0dmlhblwifSx7XCJrZXlcIjpcIm1lXCIsXCJuYW1lXCI6XCJNb250ZW5lZ3JpblwifSx7XCJrZXlcIjpcIm1pXCIsXCJuYW1lXCI6XCJNYW9yaVwifSx7XCJrZXlcIjpcIm1rXCIsXCJuYW1lXCI6XCJNYWNlZG9uaWFuXCJ9LHtcImtleVwiOlwibWxcIixcIm5hbWVcIjpcIk1hbGF5YWxhbVwifSx7XCJrZXlcIjpcIm1uXCIsXCJuYW1lXCI6XCJNb25nb2xpYW5cIn0se1wia2V5XCI6XCJtclwiLFwibmFtZVwiOlwiTWFyYXRoaVwifSx7XCJrZXlcIjpcIm1zLW15XCIsXCJuYW1lXCI6XCJNYWxheVwifSx7XCJrZXlcIjpcIm1zXCIsXCJuYW1lXCI6XCJNYWxheVwifSx7XCJrZXlcIjpcIm10XCIsXCJuYW1lXCI6XCJNYWx0ZXNlIChNYWx0YSlcIn0se1wia2V5XCI6XCJteVwiLFwibmFtZVwiOlwiQnVybWVzZVwifSx7XCJrZXlcIjpcIm5iXCIsXCJuYW1lXCI6XCJOb3J3ZWdpYW4gQm9rbcOlbFwifSx7XCJrZXlcIjpcIm5lXCIsXCJuYW1lXCI6XCJOZXBhbGVzZVwifSx7XCJrZXlcIjpcIm5sLWJlXCIsXCJuYW1lXCI6XCJEdXRjaCAoQmVsZ2l1bSlcIn0se1wia2V5XCI6XCJubFwiLFwibmFtZVwiOlwiRHV0Y2hcIn0se1wia2V5XCI6XCJwbFwiLFwibmFtZVwiOlwiUG9saXNoXCJ9LHtcImtleVwiOlwicHQtYnJcIixcIm5hbWVcIjpcIlBvcnR1Z3Vlc2UgKEJyYXppbClcIn0se1wia2V5XCI6XCJwdFwiLFwibmFtZVwiOlwiUG9ydHVndWVzZVwifSx7XCJrZXlcIjpcInJuXCIsXCJuYW1lXCI6XCJLaXJ1bmRpXCJ9LHtcImtleVwiOlwicm9cIixcIm5hbWVcIjpcIlJvbWFuaWFuXCJ9LHtcImtleVwiOlwicnVcIixcIm5hbWVcIjpcIlJ1c3NpYW5cIn0se1wia2V5XCI6XCJyd1wiLFwibmFtZVwiOlwiS2lueWFyd2FuZGEgKFJ3YW5kYSlcIn0se1wia2V5XCI6XCJzZFwiLFwibmFtZVwiOlwiU2luZGhpXCJ9LHtcImtleVwiOlwic2VcIixcIm5hbWVcIjpcIk5vcnRoZXJuIFNhbWlcIn0se1wia2V5XCI6XCJzaVwiLFwibmFtZVwiOlwiU2luaGFsZXNlXCJ9LHtcImtleVwiOlwic2tcIixcIm5hbWVcIjpcIlNsb3Zha1wifSx7XCJrZXlcIjpcInNsXCIsXCJuYW1lXCI6XCJTbG92ZW5pYW5cIn0se1wia2V5XCI6XCJzcVwiLFwibmFtZVwiOlwiQWxiYW5pYW5cIn0se1wia2V5XCI6XCJzci1jeXJsXCIsXCJuYW1lXCI6XCJTZXJiaWFuIEN5cmlsbGljXCJ9LHtcImtleVwiOlwic3NcIixcIm5hbWVcIjpcInNpU3dhdGlcIn0se1wia2V5XCI6XCJzdi1maVwiLFwibmFtZVwiOlwiRmlubGFuZCBTd2VkaXNoXCJ9LHtcImtleVwiOlwic3JcIixcIm5hbWVcIjpcIlNlcmJpYW5cIn0se1wia2V5XCI6XCJzdlwiLFwibmFtZVwiOlwiU3dlZGlzaFwifSx7XCJrZXlcIjpcInN3XCIsXCJuYW1lXCI6XCJTd2FoaWxpXCJ9LHtcImtleVwiOlwidGFcIixcIm5hbWVcIjpcIlRhbWlsXCJ9LHtcImtleVwiOlwidGVcIixcIm5hbWVcIjpcIlRlbHVndVwifSx7XCJrZXlcIjpcInRldFwiLFwibmFtZVwiOlwiVGV0dW4gRGlsaSAoRWFzdCBUaW1vcilcIn0se1wia2V5XCI6XCJ0Z1wiLFwibmFtZVwiOlwiVGFqaWtcIn0se1wia2V5XCI6XCJ0aFwiLFwibmFtZVwiOlwiVGhhaVwifSx7XCJrZXlcIjpcInRrXCIsXCJuYW1lXCI6XCJUdXJrbWVuXCJ9LHtcImtleVwiOlwidGwtcGhcIixcIm5hbWVcIjpcIlRhZ2Fsb2cgKFBoaWxpcHBpbmVzKVwifSx7XCJrZXlcIjpcInRsaFwiLFwibmFtZVwiOlwiS2xpbmdvblwifSx7XCJrZXlcIjpcInRyXCIsXCJuYW1lXCI6XCJUdXJraXNoXCJ9LHtcImtleVwiOlwidHpsXCIsXCJuYW1lXCI6XCJUYWxvc3NhblwifSx7XCJrZXlcIjpcInR6bS1sYXRuXCIsXCJuYW1lXCI6XCJDZW50cmFsIEF0bGFzIFRhbWF6aWdodCBMYXRpblwifSx7XCJrZXlcIjpcInR6bVwiLFwibmFtZVwiOlwiQ2VudHJhbCBBdGxhcyBUYW1hemlnaHRcIn0se1wia2V5XCI6XCJ1Zy1jblwiLFwibmFtZVwiOlwiVXlnaHVyIChDaGluYSlcIn0se1wia2V5XCI6XCJ1a1wiLFwibmFtZVwiOlwiVWtyYWluaWFuXCJ9LHtcImtleVwiOlwidXJcIixcIm5hbWVcIjpcIlVyZHVcIn0se1wia2V5XCI6XCJ1ei1sYXRuXCIsXCJuYW1lXCI6XCJVemJlayBMYXRpblwifSx7XCJrZXlcIjpcInV6XCIsXCJuYW1lXCI6XCJVemJla1wifSx7XCJrZXlcIjpcInZpXCIsXCJuYW1lXCI6XCJWaWV0bmFtZXNlXCJ9LHtcImtleVwiOlwieC1wc2V1ZG9cIixcIm5hbWVcIjpcIlBzZXVkb1wifSx7XCJrZXlcIjpcInlvXCIsXCJuYW1lXCI6XCJZb3J1YmEgTmlnZXJpYVwifSx7XCJrZXlcIjpcInpoLWNuXCIsXCJuYW1lXCI6XCJDaGluZXNlIChDaGluYSlcIn0se1wia2V5XCI6XCJ6aC1oa1wiLFwibmFtZVwiOlwiQ2hpbmVzZSAoSG9uZyBLb25nKVwifSx7XCJrZXlcIjpcInpoLXR3XCIsXCJuYW1lXCI6XCJDaGluZXNlIChUYWl3YW4pXCJ9LHtcImtleVwiOlwiemhcIixcIm5hbWVcIjpcIkNoaW5lc2VcIn0se1wia2V5XCI6XCJvYy1sbmNcIixcIm5hbWVcIjpcIk9jY2l0YW4sIGxlbmdhZG9jaWFuIGRpYWxlY3RlXCJ9LHtcImtleVwiOlwibm5cIixcIm5hbWVcIjpcIk55bm9yc2tcIn0se1wia2V5XCI6XCJwYS1pblwiLFwibmFtZVwiOlwiUHVuamFiaSAoSW5kaWEpXCJ9XVxuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYWYuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hbS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLWR6LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXItaXEuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci1rdy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLWx5LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXItbWEuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci1zYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLXRuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hei5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JlLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYmcuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9iaS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JtLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYm4tYmQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ibi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYnIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9icy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2NhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvY3MuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9jdi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2N5LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZGEuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9kZS1hdC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2RlLWNoLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZGUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9kdi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VsLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4tYXUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1jYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLWdiLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4taWUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1pbC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLWluLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4tbnouanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1zZy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLXR0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lby5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VzLWRvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXMtbXguanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lcy1wci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VzLXVzLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXMuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ldC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2V1LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZmEuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9maS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ZvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZnItY2EuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9mci1jaC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ZyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZnkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9nYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2dkLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZ2wuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9nb20tbGF0bi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2d1LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaGUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9oaS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2hyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaHQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9odS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2h5LWFtLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaWQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9pcy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2l0LWNoLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaXQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9qYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2p2LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva2EuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ray5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ttLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva24uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9rby5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2t1LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva3kuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9sYi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2xvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbHQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9sdi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21lLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbWkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tay5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21sLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbW4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21zLW15LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbXMuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tdC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL215LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbmIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9uZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL25sLWJlLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbmwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ubi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL29jLWxuYy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3BhLWluLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcGwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9wdC1ici5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3B0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcm4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9yby5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3J1LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcncuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zZC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NlLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc2kuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zay5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NsLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc3EuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zci1jeXJsLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc3IuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zcy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3N2LWZpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc3YuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zdy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90ZXQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90Zy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RoLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGsuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90bC1waC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RsaC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdHpsLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdHptLWxhdG4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90em0uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS91Zy1jbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3VrLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdXIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS91ei1sYXRuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdXouanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS92aS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3gtcHNldWRvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUveW8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS96aC1jbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3poLWhrLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvemgtdHcuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS96aC5qcydcblxuZXhwb3J0IGRlZmF1bHQgZGF5anNcbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDbGFzc1ZhbHVlIH0gZnJvbSAnY2xzeCdcbmltcG9ydCB7IGNsc3ggfSBmcm9tICdjbHN4J1xuaW1wb3J0IHsgdHdNZXJnZSB9IGZyb20gJ3RhaWx3aW5kLW1lcmdlJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgZnVuY3Rpb24gY24oLi4uaW5wdXRzOiBDbGFzc1ZhbHVlW10pIHtcblx0cmV0dXJuIHR3TWVyZ2UoY2xzeChpbnB1dHMpKVxufVxuXG5leHBvcnQgeyBnZXRNb250aFdlZWtzLCBnZXRXZWVrRGF5cyB9IGZyb20gJy4vZGF0ZS11dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVEYXRlKFxuXHRkYXRlOiBkYXlqcy5EYXlqcyB8IERhdGUgfCBzdHJpbmcgfCB1bmRlZmluZWRcbik6IGRheWpzLkRheWpzIHwgdW5kZWZpbmVkIHtcblx0aWYgKGRhdGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB1bmRlZmluZWRcblx0fVxuXHRpZiAoZGF5anMuaXNEYXlqcyhkYXRlKSkge1xuXHRcdHJldHVybiBkYXRlXG5cdH1cblx0Y29uc3QgcGFyc2VkRGF0ZSA9IGRheWpzKGRhdGUpXG5cdHJldHVybiBwYXJzZWREYXRlLmlzVmFsaWQoKSA/IHBhcnNlZERhdGUgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGNvbnN0IG9taXRLZXlzID0gPFQgZXh0ZW5kcyBvYmplY3QsIEsgZXh0ZW5kcyBrZXlvZiBUPihcblx0b2JqOiBULFxuXHRrZXlzOiBLW11cbik6IE9taXQ8VCwgSz4gPT4ge1xuXHRjb25zdCByZXN1bHQgPSB7IC4uLm9iaiB9XG5cdGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcblx0XHRkZWxldGUgcmVzdWx0W2tleV1cblx0fVxuXHRyZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBjYWxlbmRhciBldmVudHMgZnJvbSBwdWJsaWMtZmFjaW5nIGZvcm1hdCB0byBpbnRlcm5hbCBmb3JtYXQuXG4gKiBDb252ZXJ0cyBmbGV4aWJsZSBkYXRlIHR5cGVzIChkYXlqcywgRGF0ZSwgc3RyaW5nKSB0byBzdHJpY3QgZGF5anMgb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0gZXZlbnRzIC0gQXJyYXkgb2YgY2FsZW5kYXIgZXZlbnRzIHdpdGggZmxleGlibGUgZGF0ZSB0eXBlc1xuICogQHJldHVybnMgTm9ybWFsaXplZCBhcnJheSBvZiBjYWxlbmRhciBldmVudHMgd2l0aCBkYXlqcyBkYXRlc1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZWd1bGFyIGNhbGVuZGFyIGV2ZW50c1xuICogY29uc3QgZXZlbnRzID0gbm9ybWFsaXplRXZlbnRzPElsYW15Q2FsZW5kYXJQcm9wRXZlbnQsIENhbGVuZGFyRXZlbnQ+KHByb3BFdmVudHMpXG4gKlxuICogLy8gUmVzb3VyY2UgY2FsZW5kYXIgZXZlbnRzXG4gKiBjb25zdCByZXNvdXJjZUV2ZW50cyA9IG5vcm1hbGl6ZUV2ZW50czxJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wRXZlbnQsIENhbGVuZGFyRXZlbnQ+KHByb3BFdmVudHMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVFdmVudHM8XG5cdFRJbnB1dCBleHRlbmRzIHtcblx0XHRzdGFydDogZGF5anMuRGF5anMgfCBEYXRlIHwgc3RyaW5nXG5cdFx0ZW5kOiBkYXlqcy5EYXlqcyB8IERhdGUgfCBzdHJpbmdcblx0fSxcblx0VE91dHB1dCxcbj4oZXZlbnRzOiBUSW5wdXRbXSB8IHVuZGVmaW5lZCk6IFRPdXRwdXRbXSB7XG5cdGlmICghZXZlbnRzIHx8ICFldmVudHMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIFtdXG5cdH1cblxuXHRyZXR1cm4gZXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRzdGFydDogZGF5anMuaXNEYXlqcyhldmVudC5zdGFydCkgPyBldmVudC5zdGFydCA6IGRheWpzKGV2ZW50LnN0YXJ0KSxcblx0XHRcdGVuZDogZGF5anMuaXNEYXlqcyhldmVudC5lbmQpID8gZXZlbnQuZW5kIDogZGF5anMoZXZlbnQuZW5kKSxcblx0XHR9IGFzIFRPdXRwdXRcblx0fSlcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgd2VlayBkYXlzIGZvciBhIGdpdmVuIGRhdGUgYW5kIGZpcnN0IGRheSBvZiB3ZWVrIHNldHRpbmcuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlIGN1cnJlbnQgZGF0ZSBpcyBhbHdheXMgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIHdlZWssXG4gKiBldmVuIHdoZW4gdGhlIGZpcnN0IGRheSBvZiB3ZWVrIGlzIHNldCB0byBhIGRheSBhZnRlciB0aGUgY3VycmVudCBkYXRlLlxuICpcbiAqIEBwYXJhbSBjdXJyZW50RGF0ZSAtIFRoZSByZWZlcmVuY2UgZGF0ZSBmb3IgY2FsY3VsYXRpbmcgdGhlIHdlZWtcbiAqIEBwYXJhbSBmaXJzdERheU9mV2VlayAtIFRoZSBkYXkgbnVtYmVyICgwLTYpIHJlcHJlc2VudGluZyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwID0gU3VuZGF5LCAxID0gTW9uZGF5LCBldGMuKVxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgNyBkYXlqcyBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgd2VlayBkYXlzLCBzdGFydGluZyBmcm9tIGZpcnN0RGF5T2ZXZWVrXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdldCB3ZWVrIHN0YXJ0aW5nIGZyb20gTW9uZGF5IGZvciBjdXJyZW50IGRhdGVcbiAqIGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoZGF5anMoJzIwMjUtMTAtMTMnKSwgMSlcbiAqIC8vIFJldHVybnM6IFtNb24gT2N0IDEzLCBUdWUgT2N0IDE0LCAuLi4sIFN1biBPY3QgMTldXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdldCB3ZWVrIHN0YXJ0aW5nIGZyb20gV2VkbmVzZGF5IHdoZW4gY3VycmVudCBkYXRlIGlzIE1vbmRheVxuICogY29uc3Qgd2Vla0RheXMgPSBnZXRXZWVrRGF5cyhkYXlqcygnMjAyNS0xMC0xMycpLCAzKVxuICogLy8gUmV0dXJuczogW1dlZCBPY3QgOCwgVGh1IE9jdCA5LCAuLi4sIFR1ZSBPY3QgMTRdIChpbmNsdWRlcyBNb25kYXkgT2N0IDEzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2Vla0RheXMoXG5cdGN1cnJlbnREYXRlOiBkYXlqcy5EYXlqcyxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuKTogZGF5anMuRGF5anNbXSB7XG5cdGNvbnN0IHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlID0gY3VycmVudERhdGVcblx0XHQuc3RhcnRPZignd2VlaycpXG5cdFx0LmRheShmaXJzdERheU9mV2VlaylcblxuXHRjb25zdCBhZGp1c3RlZFN0YXJ0T2ZXZWVrID0gY3VycmVudERhdGUuaXNCZWZvcmUoc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGUpXG5cdFx0PyBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZS5zdWJ0cmFjdCgxLCAnd2VlaycpXG5cdFx0OiBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZVxuXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiA3IH0sIChfLCBkYXlJbmRleCkgPT5cblx0XHRhZGp1c3RlZFN0YXJ0T2ZXZWVrLmFkZChkYXlJbmRleCwgJ2RheScpXG5cdClcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgNiB3ZWVrcyBvZiBkYXlzIGZvciBhIG1vbnRoIGNhbGVuZGFyIHZpZXcuXG4gKiBBbHdheXMgcmV0dXJucyA0MiBkYXlzICg2IHdlZWtzIMOXIDcgZGF5cykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb250aFdlZWtzKFxuXHRtb250aERhdGU6IGRheWpzLkRheWpzLFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG4pOiBkYXlqcy5EYXlqc1tdW10ge1xuXHRjb25zdCBmaXJzdFdlZWsgPSBnZXRXZWVrRGF5cyhtb250aERhdGUuc3RhcnRPZignbW9udGgnKSwgZmlyc3REYXlPZldlZWspXG5cblx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDYgfSwgKF8sIHdlZWtJbmRleCkgPT4ge1xuXHRcdGNvbnN0IHdlZWtTdGFydCA9IGZpcnN0V2Vla1swXS5hZGQod2Vla0luZGV4LCAnd2VlaycpXG5cdFx0cmV0dXJuIGdldFdlZWtEYXlzKHdlZWtTdGFydCwgZmlyc3REYXlPZldlZWspXG5cdH0pXG59XG4iLAogICAgImltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDYWxlbmRhckRuZENvbnRleHQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9jYWxlbmRhci1kbmQtY29udGV4dCdcbmltcG9ydCB7IEV2ZW50Rm9ybSB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgeyBIZWFkZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvaGVhZGVyJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IERheVZpZXcgZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2RheS12aWV3J1xuaW1wb3J0IHsgTW9udGhWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvbW9udGgtdmlldydcbmltcG9ydCBXZWVrVmlldyBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstdmlldydcbmltcG9ydCBZZWFyVmlldyBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMveWVhci12aWV3L3llYXItdmlldydcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgQ2FsZW5kYXJQcm92aWRlciB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9wcm92aWRlcidcbi8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBuby1kdXBsaWNhdGVzXG5pbXBvcnQgJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHR5cGUge1xuXHRJbGFteUNhbGVuZGFyUHJvcEV2ZW50LFxuXHRJbGFteUNhbGVuZGFyUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyBub3JtYWxpemVFdmVudHMsIHNhZmVEYXRlIH0gZnJvbSAnQC9saWInXG5pbXBvcnQge1xuXHREQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0V0VFS19EQVlTX05VTUJFUl9NQVAsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcblxuY29uc3QgQ2FsZW5kYXJDb250ZW50OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdHZpZXcsXG5cdFx0aXNFdmVudEZvcm1PcGVuLFxuXHRcdGNsb3NlRXZlbnRGb3JtLFxuXHRcdHNlbGVjdGVkRXZlbnQsXG5cdFx0YWRkRXZlbnQsXG5cdFx0dXBkYXRlRXZlbnQsXG5cdFx0ZGVsZXRlRXZlbnQsXG5cdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0fSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgdmlld01hcCA9IHtcblx0XHRtb250aDogPE1vbnRoVmlldyBrZXk9XCJtb250aFwiIGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfSAvPixcblx0XHR3ZWVrOiA8V2Vla1ZpZXcga2V5PVwid2Vla1wiIC8+LFxuXHRcdGRheTogPERheVZpZXcga2V5PVwiZGF5XCIgLz4sXG5cdFx0eWVhcjogPFllYXJWaWV3IGtleT1cInllYXJcIiAvPixcblx0fVxuXG5cdGNvbnN0IGhhbmRsZU9uVXBkYXRlID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0dXBkYXRlRXZlbnQoZXZlbnQuaWQsIGV2ZW50KVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlT25EZWxldGUgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRkZWxldGVFdmVudChldmVudC5pZClcblx0fVxuXG5cdGNvbnN0IGV2ZW50Rm9ybVByb3BzID0ge1xuXHRcdG9wZW46IGlzRXZlbnRGb3JtT3Blbixcblx0XHRvbkNsb3NlOiBjbG9zZUV2ZW50Rm9ybSxcblx0XHRzZWxlY3RlZEV2ZW50LFxuXHRcdG9uQWRkOiBhZGRFdmVudCxcblx0XHRvblVwZGF0ZTogaGFuZGxlT25VcGRhdGUsXG5cdFx0b25EZWxldGU6IGhhbmRsZU9uRGVsZXRlLFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiPlxuXHRcdFx0PEhlYWRlciBjbGFzc05hbWU9XCJwLTFcIiAvPlxuXG5cdFx0XHR7LyogQ2FsZW5kYXIgQm9keSB3aXRoIEFuaW1hdGVQcmVzZW5jZSBmb3IgdmlldyB0cmFuc2l0aW9ucyAqL31cblx0XHRcdDxDYWxlbmRhckRuZENvbnRleHQ+XG5cdFx0XHRcdDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cblx0XHRcdFx0XHQ8bW90aW9uLmRpdlxuXHRcdFx0XHRcdFx0a2V5PXt2aWV3fVxuXHRcdFx0XHRcdFx0aW5pdGlhbD17eyBvcGFjaXR5OiAwLCB4OiAyMCB9fVxuXHRcdFx0XHRcdFx0YW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB4OiAwIH19XG5cdFx0XHRcdFx0XHRleGl0PXt7IG9wYWNpdHk6IDAsIHg6IC0yMCB9fVxuXHRcdFx0XHRcdFx0dHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC4xLCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIGgtW2NhbGMoMTAwJS0zLjVyZW0pXVwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0e3ZpZXdNYXBbdmlld119XG5cdFx0XHRcdFx0PC9tb3Rpb24uZGl2PlxuXHRcdFx0XHQ8L0FuaW1hdGVQcmVzZW5jZT5cblx0XHRcdDwvQ2FsZW5kYXJEbmRDb250ZXh0PlxuXG5cdFx0XHR7LyogRXZlbnQgRm9ybSBEaWFsb2cgKi99XG5cdFx0XHR7cmVuZGVyRXZlbnRGb3JtXG5cdFx0XHRcdD8gcmVuZGVyRXZlbnRGb3JtKGV2ZW50Rm9ybVByb3BzKVxuXHRcdFx0XHQ6IGlzRXZlbnRGb3JtT3BlbiAmJiA8RXZlbnRGb3JtIHsuLi5ldmVudEZvcm1Qcm9wc30gLz59XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IElsYW15Q2FsZW5kYXI6IFJlYWN0LkZDPElsYW15Q2FsZW5kYXJQcm9wcz4gPSAoe1xuXHRldmVudHMsXG5cdGZpcnN0RGF5T2ZXZWVrID0gJ3N1bmRheScsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdGRheU1heEV2ZW50cyA9IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdGV2ZW50U3BhY2luZyA9IEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRzdGlja3lWaWV3SGVhZGVyID0gdHJ1ZSxcblx0dmlld0hlYWRlckNsYXNzTmFtZSA9ICcnLFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHQuLi5wcm9wc1xufSkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxDYWxlbmRhclByb3ZpZGVyXG5cdFx0XHRldmVudHM9e25vcm1hbGl6ZUV2ZW50czxJbGFteUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50PihldmVudHMpfVxuXHRcdFx0Zmlyc3REYXlPZldlZWs9e1dFRUtfREFZU19OVU1CRVJfTUFQW2ZpcnN0RGF5T2ZXZWVrXX1cblx0XHRcdGluaXRpYWxWaWV3PXtpbml0aWFsVmlld31cblx0XHRcdGluaXRpYWxEYXRlPXtzYWZlRGF0ZShpbml0aWFsRGF0ZSl9XG5cdFx0XHRkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c31cblx0XHRcdGV2ZW50U3BhY2luZz17ZXZlbnRTcGFjaW5nfVxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcj17c3RpY2t5Vmlld0hlYWRlcn1cblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWU9e3ZpZXdIZWFkZXJDbGFzc05hbWV9XG5cdFx0XHR0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxDYWxlbmRhckNvbnRlbnQgLz5cblx0XHQ8L0NhbGVuZGFyUHJvdmlkZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUge1xuXHREcmFnQ2FuY2VsRXZlbnQsXG5cdERyYWdFbmRFdmVudCxcblx0RHJhZ1N0YXJ0RXZlbnQsXG59IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQge1xuXHREbmRDb250ZXh0LFxuXHRNb3VzZVNlbnNvcixcblx0cG9pbnRlcldpdGhpbixcblx0VG91Y2hTZW5zb3IsXG5cdHVzZVNlbnNvcixcblx0dXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXREaWFsb2cgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgaXNSZWN1cnJpbmdFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBnZXRVcGRhdGVkRXZlbnQgfSBmcm9tICcuL2RuZC11dGlscydcbmltcG9ydCB7IEV2ZW50RHJhZ092ZXJsYXkgfSBmcm9tICcuL2V2ZW50LWRyYWctb3ZlcmxheSdcblxuaW50ZXJmYWNlIENhbGVuZGFyRG5kQ29udGV4dFByb3BzIHtcblx0Y2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2FsZW5kYXJEbmRDb250ZXh0KHsgY2hpbGRyZW4gfTogQ2FsZW5kYXJEbmRDb250ZXh0UHJvcHMpIHtcblx0Y29uc3QgYWN0aXZlRXZlbnRSZWYgPSB1c2VSZWY8Q2FsZW5kYXJFdmVudD4obnVsbClcblx0Y29uc3QgZHJhZ092ZXJsYXlSZWYgPSB1c2VSZWY8e1xuXHRcdHNldEFjdGl2ZUV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0fT4obnVsbClcblxuXHRjb25zdCB7IHVwZGF0ZUV2ZW50LCB1cGRhdGVSZWN1cnJpbmdFdmVudCwgZGlzYWJsZURyYWdBbmREcm9wIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoe1xuXHRcdFx0dXBkYXRlRXZlbnQ6IGNvbnRleHQudXBkYXRlRXZlbnQsXG5cdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudDogY29udGV4dC51cGRhdGVSZWN1cnJpbmdFdmVudCxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcDogY29udGV4dC5kaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0fSkpXG5cblx0Ly8gU3RhdGUgZm9yIHJlY3VycmluZyBldmVudCBkaWFsb2dcblx0Y29uc3QgW3JlY3VycmluZ0RpYWxvZywgc2V0UmVjdXJyaW5nRGlhbG9nXSA9IHVzZVN0YXRlPHtcblx0XHRpc09wZW46IGJvb2xlYW5cblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+IHwgbnVsbFxuXHR9Pih7XG5cdFx0aXNPcGVuOiBmYWxzZSxcblx0XHRldmVudDogbnVsbCxcblx0XHR1cGRhdGVzOiBudWxsLFxuXHR9KVxuXG5cdC8vIENvbmZpZ3VyZSBzZW5zb3JzIHdpdGggcmVkdWNlZCBhY3RpdmF0aW9uIGNvbnN0cmFpbnRzIGZvciBlYXNpZXIgZHJhZ2dpbmdcblx0Y29uc3QgbW91c2VTZW5zb3IgPSB1c2VTZW5zb3IoTW91c2VTZW5zb3IsIHtcblx0XHQvLyBSZXF1aXJlIG1pbmltYWwgbW92ZW1lbnQgYmVmb3JlIGFjdGl2YXRpbmdcblx0XHRhY3RpdmF0aW9uQ29uc3RyYWludDoge1xuXHRcdFx0ZGlzdGFuY2U6IDIsXG5cdFx0fSxcblx0fSlcblxuXHRjb25zdCB0b3VjaFNlbnNvciA9IHVzZVNlbnNvcihUb3VjaFNlbnNvciwge1xuXHRcdC8vIFJlZHVjZSBkZWxheSBmb3IgdG91Y2ggZGV2aWNlc1xuXHRcdGFjdGl2YXRpb25Db25zdHJhaW50OiB7XG5cdFx0XHRkZWxheTogMTAwLFxuXHRcdFx0dG9sZXJhbmNlOiA1LFxuXHRcdH0sXG5cdH0pXG5cblx0Y29uc3Qgc2Vuc29ycyA9IHVzZVNlbnNvcnMobW91c2VTZW5zb3IsIHRvdWNoU2Vuc29yKVxuXG5cdC8vIEhlbHBlciBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBhY3R1YWwgZXZlbnQgdXBkYXRlXG5cdGNvbnN0IHBlcmZvcm1FdmVudFVwZGF0ZSA9IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdCkgPT4ge1xuXHRcdC8vIFZhbGlkYXRlIGlucHV0c1xuXHRcdGlmICghZXZlbnQgfHwgIWV2ZW50LmlkKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoIXVwZGF0ZXMgfHwgT2JqZWN0LmtleXModXBkYXRlcykubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoaXNSZWN1cnJpbmdFdmVudChldmVudCkpIHtcblx0XHRcdC8vIFNob3cgZGlhbG9nIGZvciByZWN1cnJpbmcgZXZlbnRzXG5cdFx0XHRzZXRSZWN1cnJpbmdEaWFsb2coe1xuXHRcdFx0XHRpc09wZW46IHRydWUsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHR1cGRhdGVzLFxuXHRcdFx0fSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRGlyZWN0bHkgdXBkYXRlIHJlZ3VsYXIgZXZlbnRzXG5cdFx0XHR1cGRhdGVFdmVudChldmVudC5pZCwgdXBkYXRlcylcblx0XHR9XG5cdH1cblxuXHQvLyBIYW5kbGUgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZyBjb25maXJtYXRpb25cblx0Y29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDb25maXJtID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0aWYgKCFyZWN1cnJpbmdEaWFsb2cuZXZlbnQgfHwgIXJlY3VycmluZ0RpYWxvZy51cGRhdGVzKSB7XG5cdFx0XHRzZXRSZWN1cnJpbmdEaWFsb2coeyBpc09wZW46IGZhbHNlLCBldmVudDogbnVsbCwgdXBkYXRlczogbnVsbCB9KVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50KHJlY3VycmluZ0RpYWxvZy5ldmVudCwgcmVjdXJyaW5nRGlhbG9nLnVwZGF0ZXMsIHtcblx0XHRcdFx0c2NvcGUsXG5cdFx0XHRcdGV2ZW50RGF0ZTogcmVjdXJyaW5nRGlhbG9nLmV2ZW50LnN0YXJ0LFxuXHRcdFx0fSlcblx0XHR9IGNhdGNoIHtcblx0XHRcdC8vIFNpbGVudGx5IGhhbmRsZSBlcnJvciBhbmQgcmVzZXQgZGlhbG9nIHN0YXRlXG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG5cdFx0fVxuXHR9XG5cblx0Ly8gSGFuZGxlIHJlY3VycmluZyBldmVudCBkaWFsb2cgY2xvc2Vcblx0Y29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDbG9zZSA9ICgpID0+IHtcblx0XHRzZXRSZWN1cnJpbmdEaWFsb2coeyBpc09wZW46IGZhbHNlLCBldmVudDogbnVsbCwgdXBkYXRlczogbnVsbCB9KVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ1N0YXJ0ID0gKGV2ZW50OiBEcmFnU3RhcnRFdmVudCkgPT4ge1xuXHRcdGNvbnN0IHsgYWN0aXZlIH0gPSBldmVudFxuXG5cdFx0Ly8gU2V0IHRoZSBhY3RpdmUgZXZlbnQgYmFzZWQgb24gdGhlIGV2ZW50IGRhdGFcblx0XHRpZiAoYWN0aXZlLmRhdGEuY3VycmVudD8udHlwZSA9PT0gJ2NhbGVuZGFyLWV2ZW50Jykge1xuXHRcdFx0ZHJhZ092ZXJsYXlSZWYuY3VycmVudD8uc2V0QWN0aXZlRXZlbnQoYWN0aXZlLmRhdGEuY3VycmVudC5ldmVudClcblx0XHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBhY3RpdmUuZGF0YS5jdXJyZW50LmV2ZW50XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ0VuZCA9IChldmVudDogRHJhZ0VuZEV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgdXBkYXRlZEV2ZW50ID0gZ2V0VXBkYXRlZEV2ZW50KGV2ZW50LCBhY3RpdmVFdmVudFJlZi5jdXJyZW50KVxuXHRcdGlmICh1cGRhdGVkRXZlbnQpIHtcblx0XHRcdGNvbnN0IHsgYWN0aXZlRXZlbnQsIHVwZGF0ZXMgfSA9IHVwZGF0ZWRFdmVudFxuXHRcdFx0cGVyZm9ybUV2ZW50VXBkYXRlKGFjdGl2ZUV2ZW50LCB1cGRhdGVzKVxuXHRcdH1cblxuXHRcdC8vIENsZWFyIHRoZSBhY3RpdmUgZXZlbnQgcmVmZXJlbmNlXG5cdFx0YWN0aXZlRXZlbnRSZWYuY3VycmVudCA9IG51bGxcblx0XHRkcmFnT3ZlcmxheVJlZi5jdXJyZW50Py5zZXRBY3RpdmVFdmVudChudWxsKVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ0NhbmNlbCA9IChfZXZlbnQ6IERyYWdDYW5jZWxFdmVudCkgPT4ge1xuXHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBudWxsXG5cdH1cblxuXHQvLyBJZiBkcmFnIGFuZCBkcm9wIGlzIGRpc2FibGVkLCBqdXN0IHJldHVybiBjaGlsZHJlbiB3aXRob3V0IERuZENvbnRleHRcblx0aWYgKGRpc2FibGVEcmFnQW5kRHJvcCkge1xuXHRcdHJldHVybiBjaGlsZHJlbiBhcyBSZWFjdC5SZWFjdEVsZW1lbnRcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxEbmRDb250ZXh0XG5cdFx0XHRcdHNlbnNvcnM9e3NlbnNvcnN9XG5cdFx0XHRcdG9uRHJhZ1N0YXJ0PXtoYW5kbGVEcmFnU3RhcnR9XG5cdFx0XHRcdG9uRHJhZ0VuZD17aGFuZGxlRHJhZ0VuZH1cblx0XHRcdFx0b25EcmFnQ2FuY2VsPXtoYW5kbGVEcmFnQ2FuY2VsfVxuXHRcdFx0XHRjb2xsaXNpb25EZXRlY3Rpb249e3BvaW50ZXJXaXRoaW59XG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PEV2ZW50RHJhZ092ZXJsYXkgcmVmPXtkcmFnT3ZlcmxheVJlZn0gLz5cblx0XHRcdDwvRG5kQ29udGV4dD5cblxuXHRcdFx0ey8qIFJlY3VycmluZyBldmVudCBlZGl0IGRpYWxvZyAqL31cblx0XHRcdDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuXHRcdFx0XHRpc09wZW49e3JlY3VycmluZ0RpYWxvZy5pc09wZW59XG5cdFx0XHRcdG9uQ2xvc2U9e2hhbmRsZVJlY3VycmluZ0V2ZW50Q2xvc2V9XG5cdFx0XHRcdG9uQ29uZmlybT17aGFuZGxlUmVjdXJyaW5nRXZlbnRDb25maXJtfVxuXHRcdFx0XHRvcGVyYXRpb25UeXBlPVwiZWRpdFwiXG5cdFx0XHRcdGV2ZW50VGl0bGU9e3JlY3VycmluZ0RpYWxvZy5ldmVudD8udGl0bGUgfHwgJyd9XG5cdFx0XHQvPlxuXHRcdDwvPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IFNsb3QgfSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2xvdCdcbmltcG9ydCB0eXBlIHsgVmFyaWFudFByb3BzIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5J1xuaW1wb3J0IHsgY3ZhIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgYnV0dG9uVmFyaWFudHMgPSBjdmEoXG5cdFwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHdoaXRlc3BhY2Utbm93cmFwIHJvdW5kZWQtbWQgdGV4dC1zbSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWFsbCBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNCBzaHJpbmstMCBbJl9zdmddOnNocmluay0wIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmVcIixcblx0e1xuXHRcdHZhcmlhbnRzOiB7XG5cdFx0XHR2YXJpYW50OiB7XG5cdFx0XHRcdGRlZmF1bHQ6ICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXByaW1hcnkvOTAnLFxuXHRcdFx0XHRkZXN0cnVjdGl2ZTpcblx0XHRcdFx0XHQnYmctZGVzdHJ1Y3RpdmUgdGV4dC13aGl0ZSBob3ZlcjpiZy1kZXN0cnVjdGl2ZS85MCBmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazpmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvNDAgZGFyazpiZy1kZXN0cnVjdGl2ZS82MCcsXG5cdFx0XHRcdG91dGxpbmU6XG5cdFx0XHRcdFx0J2JvcmRlciBiZy1iYWNrZ3JvdW5kIHNoYWRvdy14cyBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmJnLWlucHV0LzMwIGRhcms6Ym9yZGVyLWlucHV0IGRhcms6aG92ZXI6YmctaW5wdXQvNTAnLFxuXHRcdFx0XHRzZWNvbmRhcnk6XG5cdFx0XHRcdFx0J2JnLXNlY29uZGFyeSB0ZXh0LXNlY29uZGFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXNlY29uZGFyeS84MCcsXG5cdFx0XHRcdGdob3N0OlxuXHRcdFx0XHRcdCdob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmhvdmVyOmJnLWFjY2VudC81MCcsXG5cdFx0XHRcdGxpbms6ICd0ZXh0LXByaW1hcnkgdW5kZXJsaW5lLW9mZnNldC00IGhvdmVyOnVuZGVybGluZScsXG5cdFx0XHR9LFxuXHRcdFx0c2l6ZToge1xuXHRcdFx0XHRkZWZhdWx0OiAnaC05IHB4LTQgcHktMiBoYXMtWz5zdmddOnB4LTMnLFxuXHRcdFx0XHRzbTogJ2gtOCByb3VuZGVkLW1kIGdhcC0xLjUgcHgtMyBoYXMtWz5zdmddOnB4LTIuNScsXG5cdFx0XHRcdGxnOiAnaC0xMCByb3VuZGVkLW1kIHB4LTYgaGFzLVs+c3ZnXTpweC00Jyxcblx0XHRcdFx0aWNvbjogJ3NpemUtOScsXG5cdFx0XHRcdCdpY29uLXNtJzogJ3NpemUtOCcsXG5cdFx0XHRcdCdpY29uLWxnJzogJ3NpemUtMTAnLFxuXHRcdFx0fSxcblx0XHR9LFxuXHRcdGRlZmF1bHRWYXJpYW50czoge1xuXHRcdFx0dmFyaWFudDogJ2RlZmF1bHQnLFxuXHRcdFx0c2l6ZTogJ2RlZmF1bHQnLFxuXHRcdH0sXG5cdH1cbilcblxuZnVuY3Rpb24gQnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHR2YXJpYW50LFxuXHRzaXplLFxuXHRhc0NoaWxkID0gZmFsc2UsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczwnYnV0dG9uJz4gJlxuXHRWYXJpYW50UHJvcHM8dHlwZW9mIGJ1dHRvblZhcmlhbnRzPiAmIHtcblx0XHRhc0NoaWxkPzogYm9vbGVhblxuXHR9KSB7XG5cdGNvbnN0IENvbXAgPSBhc0NoaWxkID8gU2xvdCA6ICdidXR0b24nXG5cblx0cmV0dXJuIChcblx0XHQ8Q29tcFxuXHRcdFx0ZGF0YS1zbG90PVwiYnV0dG9uXCJcblx0XHRcdGNsYXNzTmFtZT17Y24oYnV0dG9uVmFyaWFudHMoeyB2YXJpYW50LCBzaXplLCBjbGFzc05hbWUgfSkpfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHsgQnV0dG9uLCBidXR0b25WYXJpYW50cyB9XG4iLAogICAgImltcG9ydCAqIGFzIERpYWxvZ1ByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtZGlhbG9nJ1xuaW1wb3J0IHsgWEljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBEaWFsb2coe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cImRpYWxvZ1wiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nVHJpZ2dlcih7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlRyaWdnZXI+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwiZGlhbG9nLXRyaWdnZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ1BvcnRhbCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlBvcnRhbD4pIHtcblx0cmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Nsb3NlKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ2xvc2U+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLkNsb3NlIGRhdGEtc2xvdD1cImRpYWxvZy1jbG9zZVwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nT3ZlcmxheSh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuT3ZlcmxheT4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUHJpbWl0aXZlLk92ZXJsYXlcblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy1vdmVybGF5XCJcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBmaXhlZCBpbnNldC0wIHotNTAgYmctYmxhY2svNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dDb250ZW50KHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ29udGVudD4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIj5cblx0XHRcdDxEaWFsb2dPdmVybGF5IC8+XG5cdFx0XHQ8RGlhbG9nUHJpbWl0aXZlLkNvbnRlbnRcblx0XHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWNvbnRlbnRcIlxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdiZy1iYWNrZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBmaXhlZCB0b3AtWzUwJV0gbGVmdC1bNTAlXSB6LTUwIGdyaWQgdy1mdWxsIG1heC13LVtjYWxjKDEwMCUtMnJlbSldIHRyYW5zbGF0ZS14LVstNTAlXSB0cmFuc2xhdGUteS1bLTUwJV0gZ2FwLTQgcm91bmRlZC1sZyBib3JkZXIgcC02IHNoYWRvdy1sZyBkdXJhdGlvbi0yMDAgc206bWF4LXctbGcgbWF4LWgtWzkwJV0nLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PERpYWxvZ1ByaW1pdGl2ZS5DbG9zZSBjbGFzc05hbWU9XCJyaW5nLW9mZnNldC1iYWNrZ3JvdW5kIGZvY3VzOnJpbmctcmluZyBkYXRhLVtzdGF0ZT1vcGVuXTpiZy1hY2NlbnQgZGF0YS1bc3RhdGU9b3Blbl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGFic29sdXRlIHRvcC00IHJpZ2h0LTQgcm91bmRlZC14cyBvcGFjaXR5LTcwIHRyYW5zaXRpb24tb3BhY2l0eSBob3ZlcjpvcGFjaXR5LTEwMCBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1vZmZzZXQtMiBmb2N1czpvdXRsaW5lLWhpZGRlbiBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNFwiPlxuXHRcdFx0XHRcdDxYSWNvbiAvPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cblx0XHRcdFx0PC9EaWFsb2dQcmltaXRpdmUuQ2xvc2U+XG5cdFx0XHQ8L0RpYWxvZ1ByaW1pdGl2ZS5Db250ZW50PlxuXHRcdDwvRGlhbG9nUG9ydGFsPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0hlYWRlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWhlYWRlclwiXG5cdFx0XHRjbGFzc05hbWU9e2NuKCdmbGV4IGZsZXgtY29sIGdhcC0yIHRleHQtY2VudGVyIHNtOnRleHQtbGVmdCcsIGNsYXNzTmFtZSl9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dGb290ZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy1mb290ZXJcIlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggZmxleC1jb2wtcmV2ZXJzZSBnYXAtMiBzbTpmbGV4LXJvdyBzbTpqdXN0aWZ5LWVuZCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ1RpdGxlKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5UaXRsZT4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUHJpbWl0aXZlLlRpdGxlXG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctdGl0bGVcIlxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1sZyBsZWFkaW5nLW5vbmUgZm9udC1zZW1pYm9sZCcsIGNsYXNzTmFtZSl9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dEZXNjcmlwdGlvbih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuRGVzY3JpcHRpb24+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvblxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWRlc2NyaXB0aW9uXCJcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXNtJywgY2xhc3NOYW1lKX1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ2xvc2UsXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0Rlc2NyaXB0aW9uLFxuXHREaWFsb2dGb290ZXIsXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nT3ZlcmxheSxcblx0RGlhbG9nUG9ydGFsLFxuXHREaWFsb2dUaXRsZSxcblx0RGlhbG9nVHJpZ2dlcixcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcblxuLyoqXG4gKiBHZW5lcmljIGhvb2sgdGhhdCBkZXRlY3RzIHdoaWNoIGNhbGVuZGFyIGNvbnRleHQgaXMgYXZhaWxhYmxlIGFuZCByZXR1cm5zIHNlbGVjdGVkIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0PFQ+KHNlbGVjdG9yOiAoY29udGV4dCkgPT4gVCk6IFQge1xuXHQvLyBDaGVjayBib3RoIGNvbnRleHRzIHVzaW5nIHVzZUNvbnRleHQgZGlyZWN0bHkgKG5vIGhvb2tzKVxuXHRjb25zdCByZXNvdXJjZUNvbnRleHQgPSB1c2VDb250ZXh0KFJlc291cmNlQ2FsZW5kYXJDb250ZXh0KVxuXHRjb25zdCByZWd1bGFyQ29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuXG5cdGlmIChyZXNvdXJjZUNvbnRleHQpIHtcblx0XHRyZXR1cm4gc2VsZWN0b3IocmVzb3VyY2VDb250ZXh0KVxuXHR9XG5cblx0aWYgKHJlZ3VsYXJDb250ZXh0KSB7XG5cdFx0cmV0dXJuIHNlbGVjdG9yKHJlZ3VsYXJDb250ZXh0KVxuXHR9XG5cblx0Ly8gSWYgbmVpdGhlciBjb250ZXh0IGlzIGF2YWlsYWJsZSwgdGhyb3cgYW4gZXJyb3Jcblx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdCd1c2VTbWFydENhbGVuZGFyQ29udGV4dCBtdXN0IGJlIHVzZWQgd2l0aGluIGEgQ2FsZW5kYXJQcm92aWRlciBvciBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXInXG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBFdmVudEZvcm1Qcm9wcyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7XG5cdENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlLFxuXHRDZWxsQ2xpY2tJbmZvLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdE9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25LZXkgfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldywgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJDb250ZXh0VHlwZSB7XG5cdGN1cnJlbnREYXRlOiBkYXlqcy5EYXlqc1xuXHR2aWV3OiBDYWxlbmRhclZpZXdcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmF3RXZlbnRzOiBDYWxlbmRhckV2ZW50W10gLy8gVW5wcm9jZXNzZWQgZXZlbnRzIGZvciBleHBvcnRcblx0aXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG5cdHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHNlbGVjdGVkRGF0ZTogZGF5anMuRGF5anMgfCBudWxsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIgLy8gMCBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cblx0c2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcblx0c2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0dG9kYXk6ICgpID0+IHZvaWRcblx0YWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHR1cGRhdGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnQ6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0ZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdG9wZW5FdmVudEZvcm06IChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG5cdGdldEV2ZW50c0ZvckRhdGVSYW5nZTogKFxuXHRcdHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsXG5cdFx0ZW5kRGF0ZTogZGF5anMuRGF5anNcblx0KSA9PiBDYWxlbmRhckV2ZW50W11cblx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0b25FdmVudENsaWNrOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DZWxsQ2xpY2s6IChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB2b2lkXG5cdGN1cnJlbnRMb2NhbGU/OiBzdHJpbmdcblx0ZGlzYWJsZUNlbGxDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZUV2ZW50Q2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVEcmFnQW5kRHJvcD86IGJvb2xlYW5cblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0ZXZlbnRTcGFjaW5nOiBudW1iZXJcblx0c3RpY2t5Vmlld0hlYWRlcjogYm9vbGVhblxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lOiBzdHJpbmdcblx0aGVhZGVyQ29tcG9uZW50PzogUmVhY3QuUmVhY3ROb2RlIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY29tcG9uZW50XG5cdGhlYWRlckNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNsYXNzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHJlbmRlckV2ZW50Rm9ybT86IChwcm9wczogRXZlbnRGb3JtUHJvcHMpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHQvLyBUcmFuc2xhdGlvbiBmdW5jdGlvblxuXHR0OiAoa2V5OiBUcmFuc2xhdGlvbktleSkgPT4gc3RyaW5nXG5cdHRpbWVGb3JtYXQ6IFRpbWVGb3JtYXRcblx0Y2xhc3Nlc092ZXJyaWRlPzogQ2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGVcbn1cblxuZXhwb3J0IGNvbnN0IENhbGVuZGFyQ29udGV4dDogUmVhY3QuQ29udGV4dDxDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPiA9XG5cdGNyZWF0ZUNvbnRleHQ8Q2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuXG5leHBvcnQgY29uc3QgdXNlQ2FsZW5kYXJDb250ZXh0ID0gKCk6IENhbGVuZGFyQ29udGV4dFR5cGUgPT4ge1xuXHRjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChDYWxlbmRhckNvbnRleHQpXG5cdGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ3VzZUNhbGVuZGFyQ29udGV4dCBtdXN0IGJlIHVzZWQgd2l0aGluIGEgQ2FsZW5kYXJQcm92aWRlcicpXG5cdH1cblx0cmV0dXJuIGNvbnRleHRcbn1cblxuLyoqXG4gKiBTaW1wbGlmaWVkIGNhbGVuZGFyIGNvbnRleHQgdHlwZSBmb3IgZXh0ZXJuYWwgdXNlXG4gKiBDb250YWlucyBvbmx5IHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgY2FsZW5kYXIgb3BlcmF0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuIHtcblx0cmVhZG9ubHkgY3VycmVudERhdGU6IGRheWpzLkRheWpzXG5cdHJlYWRvbmx5IHZpZXc6IENhbGVuZGFyVmlld1xuXHRyZWFkb25seSBldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRyZWFkb25seSBpc0V2ZW50Rm9ybU9wZW46IGJvb2xlYW5cblx0cmVhZG9ubHkgc2VsZWN0ZWRFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0cmVhZG9ubHkgc2VsZWN0ZWREYXRlOiBkYXlqcy5EYXlqcyB8IG51bGxcblx0cmVhZG9ubHkgZmlyc3REYXlPZldlZWs6IG51bWJlclxuXHRyZWFkb25seSBzZXRDdXJyZW50RGF0ZTogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG5cdHJlYWRvbmx5IHNlbGVjdERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRyZWFkb25seSBzZXRWaWV3OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdHJlYWRvbmx5IG5leHRQZXJpb2Q6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgcHJldlBlcmlvZDogKCkgPT4gdm9pZFxuXHRyZWFkb25seSB0b2RheTogKCkgPT4gdm9pZFxuXHRyZWFkb25seSBhZGRFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdHJlYWRvbmx5IHVwZGF0ZUV2ZW50OiAoXG5cdFx0ZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdCkgPT4gdm9pZFxuXHRyZWFkb25seSBkZWxldGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcikgPT4gdm9pZFxuXHRyZWFkb25seSBvcGVuRXZlbnRGb3JtOiAoZXZlbnREYXRhPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHRyZWFkb25seSBjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxuXHRyZWFkb25seSBidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxufVxuXG5leHBvcnQgY29uc3QgdXNlSWxhbXlDYWxlbmRhckNvbnRleHQgPSAoKTogVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4gPT4ge1xuXHRjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChDYWxlbmRhckNvbnRleHQpXG5cdGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHQndXNlSWxhbXlDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIENhbGVuZGFyUHJvdmlkZXInXG5cdFx0KVxuXHR9XG5cdHJldHVybiB7XG5cdFx0Y3VycmVudERhdGU6IGNvbnRleHQuY3VycmVudERhdGUsXG5cdFx0dmlldzogY29udGV4dC52aWV3LFxuXHRcdGV2ZW50czogY29udGV4dC5ldmVudHMsXG5cdFx0aXNFdmVudEZvcm1PcGVuOiBjb250ZXh0LmlzRXZlbnRGb3JtT3Blbixcblx0XHRzZWxlY3RlZEV2ZW50OiBjb250ZXh0LnNlbGVjdGVkRXZlbnQsXG5cdFx0c2VsZWN0ZWREYXRlOiBjb250ZXh0LnNlbGVjdGVkRGF0ZSxcblx0XHRmaXJzdERheU9mV2VlazogY29udGV4dC5maXJzdERheU9mV2Vlayxcblx0XHRzZXRDdXJyZW50RGF0ZTogY29udGV4dC5zZXRDdXJyZW50RGF0ZSxcblx0XHRzZWxlY3REYXRlOiBjb250ZXh0LnNlbGVjdERhdGUsXG5cdFx0c2V0VmlldzogY29udGV4dC5zZXRWaWV3LFxuXHRcdG5leHRQZXJpb2Q6IGNvbnRleHQubmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kOiBjb250ZXh0LnByZXZQZXJpb2QsXG5cdFx0dG9kYXk6IGNvbnRleHQudG9kYXksXG5cdFx0YWRkRXZlbnQ6IGNvbnRleHQuYWRkRXZlbnQsXG5cdFx0dXBkYXRlRXZlbnQ6IGNvbnRleHQudXBkYXRlRXZlbnQsXG5cdFx0ZGVsZXRlRXZlbnQ6IGNvbnRleHQuZGVsZXRlRXZlbnQsXG5cdFx0b3BlbkV2ZW50Rm9ybTogY29udGV4dC5vcGVuRXZlbnRGb3JtLFxuXHRcdGNsb3NlRXZlbnRGb3JtOiBjb250ZXh0LmNsb3NlRXZlbnRGb3JtLFxuXHRcdGJ1c2luZXNzSG91cnM6IGNvbnRleHQuYnVzaW5lc3NIb3Vycyxcblx0fSBhcyBjb25zdFxufVxuIiwKICAgICJpbXBvcnQgeyBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7XG5cdENhbGVuZGFyQ29udGV4dFR5cGUsXG5cdFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB0eXBlIHsgQ2VsbENsaWNrSW5mbyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgZXh0ZW5kcyBDYWxlbmRhckNvbnRleHRUeXBlIHtcblx0Ly8gUmVzb3VyY2Utc3BlY2lmaWMgc3RhdGVcblx0cmVzb3VyY2VzOiBSZXNvdXJjZVtdXG5cdHZpc2libGVSZXNvdXJjZXM6IFNldDxzdHJpbmcgfCBudW1iZXI+XG5cblx0Ly8gUmVzb3VyY2UgdXRpbGl0aWVzXG5cdGdldEV2ZW50c0ZvclJlc291cmNlOiAocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBDYWxlbmRhckV2ZW50W11cblx0Z2V0RXZlbnRzRm9yUmVzb3VyY2VzOiAocmVzb3VyY2VJZHM6IChzdHJpbmcgfCBudW1iZXIpW10pID0+IENhbGVuZGFyRXZlbnRbXVxuXHRnZXRSZXNvdXJjZUJ5SWQ6IChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IFJlc291cmNlIHwgdW5kZWZpbmVkXG5cdGdldFZpc2libGVSZXNvdXJjZXM6ICgpID0+IFJlc291cmNlW11cblxuXHQvLyBDcm9zcy1yZXNvdXJjZSBldmVudCB1dGlsaXRpZXNcblx0aXNFdmVudENyb3NzUmVzb3VyY2U6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gYm9vbGVhblxuXHRnZXRFdmVudFJlc291cmNlSWRzOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IChzdHJpbmcgfCBudW1iZXIpW11cblxuXHQvLyBBZGRpdGlvbmFsIHByb3BlcnRpZXMgZnJvbSBjYWxlbmRhciBjb250ZXh0XG5cdG9uRXZlbnRDbGljazogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uQ2VsbENsaWNrOiAoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4gdm9pZFxuXHRyZW5kZXJSZXNvdXJjZT86IChyZXNvdXJjZTogUmVzb3VyY2UpID0+IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhckNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8XG5cdFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZFxuPiA9IGNyZWF0ZUNvbnRleHQ8UmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG5cbmV4cG9ydCBjb25zdCB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCA9ICgpOiBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgPT4ge1xuXHRjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChSZXNvdXJjZUNhbGVuZGFyQ29udGV4dClcblx0aWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdCd1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCBtdXN0IGJlIHVzZWQgd2l0aGluIGEgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyJ1xuXHRcdClcblx0fVxuXHRyZXR1cm4gY29udGV4dFxufVxuXG4vKipcbiAqIFNpbXBsaWZpZWQgcmVzb3VyY2UgY2FsZW5kYXIgY29udGV4dCB0eXBlIGZvciBleHRlcm5hbCB1c2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VJbGFteVJlc291cmNlQ2FsZW5kYXJDb250ZXh0UmV0dXJuXG5cdGV4dGVuZHMgVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4ge1xuXHRyZWFkb25seSBldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRyZWFkb25seSByZXNvdXJjZXM6IFJlc291cmNlW11cblx0cmVhZG9ubHkgZ2V0RXZlbnRzRm9yUmVzb3VyY2U6IChcblx0XHRyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXJcblx0KSA9PiBDYWxlbmRhckV2ZW50W11cbn1cblxuZXhwb3J0IGNvbnN0IHVzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHQgPVxuXHQoKTogVXNlSWxhbXlSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFJldHVybiA9PiB7XG5cdFx0Y29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoUmVzb3VyY2VDYWxlbmRhckNvbnRleHQpXG5cdFx0aWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHQndXNlSWxhbXlSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCBtdXN0IGJlIHVzZWQgd2l0aGluIGEgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyJ1xuXHRcdFx0KVxuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0Y3VycmVudERhdGU6IGNvbnRleHQuY3VycmVudERhdGUsXG5cdFx0XHR2aWV3OiBjb250ZXh0LnZpZXcsXG5cdFx0XHRldmVudHM6IGNvbnRleHQuZXZlbnRzLFxuXHRcdFx0cmVzb3VyY2VzOiBjb250ZXh0LnJlc291cmNlcyxcblx0XHRcdGlzRXZlbnRGb3JtT3BlbjogY29udGV4dC5pc0V2ZW50Rm9ybU9wZW4sXG5cdFx0XHRzZWxlY3RlZEV2ZW50OiBjb250ZXh0LnNlbGVjdGVkRXZlbnQsXG5cdFx0XHRzZWxlY3RlZERhdGU6IGNvbnRleHQuc2VsZWN0ZWREYXRlLFxuXHRcdFx0Zmlyc3REYXlPZldlZWs6IGNvbnRleHQuZmlyc3REYXlPZldlZWssXG5cdFx0XHRzZXRDdXJyZW50RGF0ZTogY29udGV4dC5zZXRDdXJyZW50RGF0ZSxcblx0XHRcdHNlbGVjdERhdGU6IGNvbnRleHQuc2VsZWN0RGF0ZSxcblx0XHRcdHNldFZpZXc6IGNvbnRleHQuc2V0Vmlldyxcblx0XHRcdG5leHRQZXJpb2Q6IGNvbnRleHQubmV4dFBlcmlvZCxcblx0XHRcdHByZXZQZXJpb2Q6IGNvbnRleHQucHJldlBlcmlvZCxcblx0XHRcdHRvZGF5OiBjb250ZXh0LnRvZGF5LFxuXHRcdFx0YWRkRXZlbnQ6IGNvbnRleHQuYWRkRXZlbnQsXG5cdFx0XHR1cGRhdGVFdmVudDogY29udGV4dC51cGRhdGVFdmVudCxcblx0XHRcdGRlbGV0ZUV2ZW50OiBjb250ZXh0LmRlbGV0ZUV2ZW50LFxuXHRcdFx0b3BlbkV2ZW50Rm9ybTogY29udGV4dC5vcGVuRXZlbnRGb3JtLFxuXHRcdFx0Y2xvc2VFdmVudEZvcm06IGNvbnRleHQuY2xvc2VFdmVudEZvcm0sXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZTogY29udGV4dC5nZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRcdGJ1c2luZXNzSG91cnM6IGNvbnRleHQuYnVzaW5lc3NIb3Vycyxcblx0XHR9IGFzIGNvbnN0XG5cdH1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJQcm92aWRlclByb3BzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNsYXNzZXNPdmVycmlkZSxcblx0Q2VsbENsaWNrSW5mbyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJFbmdpbmUgfSBmcm9tICdAL2hvb2tzL3VzZS1jYWxlbmRhci1lbmdpbmUnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCdcblxuY29uc3QgZ2V0RXZlbnRSZXNvdXJjZUlkcyA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IChzdHJpbmcgfCBudW1iZXIpW10gPT4ge1xuXHRpZiAoZXZlbnQucmVzb3VyY2VJZHMpIHtcblx0XHRyZXR1cm4gZXZlbnQucmVzb3VyY2VJZHNcblx0fVxuXHRpZiAoZXZlbnQucmVzb3VyY2VJZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIFtldmVudC5yZXNvdXJjZUlkXVxuXHR9XG5cdHJldHVybiBbXVxufVxuXG5pbnRlcmZhY2UgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBDYWxlbmRhclByb3ZpZGVyUHJvcHMge1xuXHRldmVudHM/OiBDYWxlbmRhckV2ZW50W11cblx0cmVzb3VyY2VzPzogUmVzb3VyY2VbXVxuXHRyZW5kZXJSZXNvdXJjZT86IChyZXNvdXJjZTogUmVzb3VyY2UpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc2VzT3ZlcnJpZGU/OiBDYWxlbmRhckNsYXNzZXNPdmVycmlkZVxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxcblx0UmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyUHJvcHNcbj4gPSAoe1xuXHRjaGlsZHJlbixcblx0ZXZlbnRzID0gW10sXG5cdHJlc291cmNlcyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9IDAsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdHJlbmRlckV2ZW50LFxuXHRvbkV2ZW50Q2xpY2ssXG5cdG9uQ2VsbENsaWNrLFxuXHRvblZpZXdDaGFuZ2UsXG5cdG9uRXZlbnRBZGQsXG5cdG9uRXZlbnRVcGRhdGUsXG5cdG9uRXZlbnREZWxldGUsXG5cdG9uRGF0ZUNoYW5nZSxcblx0bG9jYWxlLFxuXHR0aW1lem9uZSxcblx0ZGlzYWJsZUNlbGxDbGljayxcblx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0ZGF5TWF4RXZlbnRzLFxuXHRldmVudFNwYWNpbmcsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdGhlYWRlckNvbXBvbmVudCxcblx0aGVhZGVyQ2xhc3NOYW1lLFxuXHR0cmFuc2xhdGlvbnMsXG5cdHRyYW5zbGF0b3IsXG5cdHJlbmRlclJlc291cmNlLFxuXHRyZW5kZXJFdmVudEZvcm0sXG5cdGJ1c2luZXNzSG91cnMsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGNsYXNzZXNPdmVycmlkZSxcbn0pID0+IHtcblx0Ly8gUmVzb3VyY2Utc3BlY2lmaWMgc3RhdGVcblx0Y29uc3QgW2N1cnJlbnRSZXNvdXJjZXNdID0gdXNlU3RhdGU8UmVzb3VyY2VbXT4ocmVzb3VyY2VzKVxuXHRjb25zdCBbdmlzaWJsZVJlc291cmNlcywgc2V0VmlzaWJsZVJlc291cmNlc10gPSB1c2VTdGF0ZTxcblx0XHRTZXQ8c3RyaW5nIHwgbnVtYmVyPlxuXHQ+KG5ldyBTZXQocmVzb3VyY2VzLm1hcCgocikgPT4gci5pZCkpKVxuXG5cdC8vIFVzZSB0aGUgY2FsZW5kYXIgZW5naW5lXG5cdGNvbnN0IGNhbGVuZGFyRW5naW5lID0gdXNlQ2FsZW5kYXJFbmdpbmUoe1xuXHRcdGV2ZW50cyxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRpbml0aWFsVmlldyxcblx0XHRpbml0aWFsRGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdG9uRXZlbnRBZGQsXG5cdFx0b25FdmVudFVwZGF0ZSxcblx0XHRvbkV2ZW50RGVsZXRlLFxuXHRcdG9uRGF0ZUNoYW5nZSxcblx0XHRvblZpZXdDaGFuZ2U6IG9uVmlld0NoYW5nZSxcblx0XHRsb2NhbGUsXG5cdFx0dGltZXpvbmUsXG5cdFx0dHJhbnNsYXRpb25zLFxuXHRcdHRyYW5zbGF0b3IsXG5cdH0pXG5cblx0Ly8gUmVzb3VyY2UgdmlzaWJpbGl0eVxuXHRjb25zdCB0b2dnbGVSZXNvdXJjZVZpc2liaWxpdHkgPSB1c2VDYWxsYmFjayhcblx0XHQocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG5cdFx0XHRzZXRWaXNpYmxlUmVzb3VyY2VzKChwcmV2KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG5ld1NldCA9IG5ldyBTZXQocHJldilcblx0XHRcdFx0aWYgKG5ld1NldC5oYXMocmVzb3VyY2VJZCkpIHtcblx0XHRcdFx0XHRuZXdTZXQuZGVsZXRlKHJlc291cmNlSWQpXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bmV3U2V0LmFkZChyZXNvdXJjZUlkKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBuZXdTZXRcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbXVxuXHQpXG5cblx0Y29uc3Qgc2hvd1Jlc291cmNlID0gdXNlQ2FsbGJhY2soKHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuXHRcdHNldFZpc2libGVSZXNvdXJjZXMoKHByZXYpID0+IG5ldyBTZXQocHJldikuYWRkKHJlc291cmNlSWQpKVxuXHR9LCBbXSlcblxuXHRjb25zdCBoaWRlUmVzb3VyY2UgPSB1c2VDYWxsYmFjaygocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG5cdFx0c2V0VmlzaWJsZVJlc291cmNlcygocHJldikgPT4ge1xuXHRcdFx0Y29uc3QgbmV3U2V0ID0gbmV3IFNldChwcmV2KVxuXHRcdFx0bmV3U2V0LmRlbGV0ZShyZXNvdXJjZUlkKVxuXHRcdFx0cmV0dXJuIG5ld1NldFxuXHRcdH0pXG5cdH0sIFtdKVxuXG5cdGNvbnN0IHNob3dBbGxSZXNvdXJjZXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c2V0VmlzaWJsZVJlc291cmNlcyhuZXcgU2V0KGN1cnJlbnRSZXNvdXJjZXMubWFwKChyKSA9PiByLmlkKSkpXG5cdH0sIFtjdXJyZW50UmVzb3VyY2VzXSlcblxuXHRjb25zdCBoaWRlQWxsUmVzb3VyY2VzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdHNldFZpc2libGVSZXNvdXJjZXMobmV3IFNldCgpKVxuXHR9LCBbXSlcblxuXHQvLyBFdmVudCB1dGlsaXRpZXNcblx0Y29uc3QgZ2V0RXZlbnRzRm9yUmVzb3VyY2UgPSB1c2VDYWxsYmFjayhcblx0XHQocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0XHRcdHJldHVybiBjYWxlbmRhckVuZ2luZS5ldmVudHMuZmlsdGVyKChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQucmVzb3VyY2VJZHMpIHtcblx0XHRcdFx0XHRyZXR1cm4gZXZlbnQucmVzb3VyY2VJZHMuaW5jbHVkZXMocmVzb3VyY2VJZClcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZXZlbnQucmVzb3VyY2VJZCA9PT0gcmVzb3VyY2VJZFxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtjYWxlbmRhckVuZ2luZS5ldmVudHNdXG5cdClcblxuXHRjb25zdCBnZXRFdmVudHNGb3JSZXNvdXJjZXMgPSB1c2VDYWxsYmFjayhcblx0XHQocmVzb3VyY2VJZHM6IChzdHJpbmcgfCBudW1iZXIpW10pOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRcdFx0cmV0dXJuIGNhbGVuZGFyRW5naW5lLmV2ZW50cy5maWx0ZXIoKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50UmVzb3VyY2VJZHMgPSBnZXRFdmVudFJlc291cmNlSWRzKGV2ZW50KVxuXHRcdFx0XHRyZXR1cm4gZXZlbnRSZXNvdXJjZUlkcy5zb21lKChpZCkgPT4gcmVzb3VyY2VJZHMuaW5jbHVkZXMoaWQpKVxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtjYWxlbmRhckVuZ2luZS5ldmVudHNdXG5cdClcblxuXHRjb25zdCBnZXRSZXNvdXJjZUJ5SWQgPSB1c2VDYWxsYmFjayhcblx0XHQocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKTogUmVzb3VyY2UgfCB1bmRlZmluZWQgPT4ge1xuXHRcdFx0cmV0dXJuIGN1cnJlbnRSZXNvdXJjZXMuZmluZCgocmVzb3VyY2UpID0+IHJlc291cmNlLmlkID09PSByZXNvdXJjZUlkKVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRSZXNvdXJjZXNdXG5cdClcblxuXHRjb25zdCBnZXRWaXNpYmxlUmVzb3VyY2VzID0gdXNlQ2FsbGJhY2soKCk6IFJlc291cmNlW10gPT4ge1xuXHRcdHJldHVybiBjdXJyZW50UmVzb3VyY2VzLmZpbHRlcigocmVzb3VyY2UpID0+XG5cdFx0XHR2aXNpYmxlUmVzb3VyY2VzLmhhcyhyZXNvdXJjZS5pZClcblx0XHQpXG5cdH0sIFtjdXJyZW50UmVzb3VyY2VzLCB2aXNpYmxlUmVzb3VyY2VzXSlcblxuXHQvLyBDcm9zcy1yZXNvdXJjZSBldmVudCB1dGlsaXRpZXNcblx0Y29uc3QgaXNFdmVudENyb3NzUmVzb3VyY2UgPSB1c2VDYWxsYmFjaygoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBib29sZWFuID0+IHtcblx0XHRyZXR1cm4gQm9vbGVhbihldmVudC5yZXNvdXJjZUlkcyAmJiBldmVudC5yZXNvdXJjZUlkcy5sZW5ndGggPiAxKVxuXHR9LCBbXSlcblxuXHQvLyBDdXN0b20gaGFuZGxlcnNcblx0Y29uc3QgZWRpdEV2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KGV2ZW50KVxuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0fSxcblx0XHRbY2FsZW5kYXJFbmdpbmVdXG5cdClcblxuXHRjb25zdCBoYW5kbGVFdmVudENsaWNrID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUV2ZW50Q2xpY2spIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cdFx0XHRpZiAob25FdmVudENsaWNrKSB7XG5cdFx0XHRcdG9uRXZlbnRDbGljayhldmVudClcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVkaXRFdmVudChldmVudClcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtkaXNhYmxlRXZlbnRDbGljaywgb25FdmVudENsaWNrLCBlZGl0RXZlbnRdXG5cdClcblxuXHRjb25zdCBoYW5kbGVEYXRlQ2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4ge1xuXHRcdFx0aWYgKGRpc2FibGVDZWxsQ2xpY2spIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cblx0XHRcdGlmIChvbkNlbGxDbGljaykge1xuXHRcdFx0XHRvbkNlbGxDbGljayhpbmZvKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgbmV3RXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRcdFx0dGl0bGU6IGNhbGVuZGFyRW5naW5lLnQoJ25ld0V2ZW50JyksXG5cdFx0XHRcdFx0c3RhcnQ6IGluZm8uc3RhcnQsXG5cdFx0XHRcdFx0ZW5kOiBpbmZvLmVuZCxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogJycsXG5cdFx0XHRcdFx0YWxsRGF5OiBmYWxzZSxcblx0XHRcdFx0fSBhcyBDYWxlbmRhckV2ZW50XG5cblx0XHRcdFx0aWYgKGluZm8ucmVzb3VyY2VJZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0bmV3RXZlbnQucmVzb3VyY2VJZCA9IGluZm8ucmVzb3VyY2VJZFxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0U2VsZWN0ZWRFdmVudChuZXdFdmVudClcblx0XHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0U2VsZWN0ZWREYXRlKGluZm8uc3RhcnQpXG5cdFx0XHRcdGNhbGVuZGFyRW5naW5lLnNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W29uQ2VsbENsaWNrLCBkaXNhYmxlQ2VsbENsaWNrLCBjYWxlbmRhckVuZ2luZV1cblx0KVxuXG5cdC8vIENyZWF0ZSB0aGUgY29udGV4dCB2YWx1ZVxuXHRjb25zdCBjb250ZXh0VmFsdWUgPSB1c2VNZW1vKFxuXHRcdCgpID0+ICh7XG5cdFx0XHQuLi5jYWxlbmRhckVuZ2luZSxcblx0XHRcdHZpZXc6IGNhbGVuZGFyRW5naW5lLnZpZXcsXG5cdFx0XHRzZXRWaWV3OiBjYWxlbmRhckVuZ2luZS5zZXRWaWV3LFxuXHRcdFx0ZXZlbnRzOiBjYWxlbmRhckVuZ2luZS5ldmVudHMsXG5cdFx0XHRyYXdFdmVudHM6IGNhbGVuZGFyRW5naW5lLnJhd0V2ZW50cyxcblxuXHRcdFx0Ly8gUmVzb3VyY2Utc3BlY2lmaWMgc3RhdGVcblx0XHRcdHJlc291cmNlczogY3VycmVudFJlc291cmNlcyxcblx0XHRcdHZpc2libGVSZXNvdXJjZXMsXG5cdFx0XHR0b2dnbGVSZXNvdXJjZVZpc2liaWxpdHksXG5cdFx0XHRzaG93UmVzb3VyY2UsXG5cdFx0XHRoaWRlUmVzb3VyY2UsXG5cdFx0XHRzaG93QWxsUmVzb3VyY2VzLFxuXHRcdFx0aGlkZUFsbFJlc291cmNlcyxcblxuXHRcdFx0Ly8gUmVzb3VyY2UgdXRpbGl0aWVzXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlcyxcblx0XHRcdGdldFJlc291cmNlQnlJZCxcblx0XHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cblx0XHRcdC8vIENyb3NzLXJlc291cmNlIGV2ZW50IHV0aWxpdGllc1xuXHRcdFx0aXNFdmVudENyb3NzUmVzb3VyY2UsXG5cdFx0XHRnZXRFdmVudFJlc291cmNlSWRzLFxuXG5cdFx0XHQvLyBPdmVycmlkZSBoYW5kbGVyc1xuXHRcdFx0b25FdmVudENsaWNrOiBoYW5kbGVFdmVudENsaWNrLFxuXHRcdFx0b25DZWxsQ2xpY2s6IGhhbmRsZURhdGVDbGljayxcblxuXHRcdFx0Ly8gUGFzcyB0aHJvdWdoIGhlYWRlciBwcm9wc1xuXHRcdFx0aGVhZGVyQ29tcG9uZW50LFxuXHRcdFx0aGVhZGVyQ2xhc3NOYW1lLFxuXG5cdFx0XHQvLyBQYXNzIHRocm91Z2ggb3RoZXIgcHJvcHNcblx0XHRcdHJlbmRlckV2ZW50LFxuXHRcdFx0cmVuZGVyUmVzb3VyY2UsXG5cdFx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdFx0XHRsb2NhbGUsXG5cdFx0XHR0aW1lem9uZSxcblx0XHRcdGRpc2FibGVDZWxsQ2xpY2ssXG5cdFx0XHRkaXNhYmxlRXZlbnRDbGljayxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdHN0aWNreVZpZXdIZWFkZXIsXG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdHRpbWVGb3JtYXQsXG5cdFx0XHRjbGFzc2VzT3ZlcnJpZGUsXG5cdFx0fSksXG5cdFx0W1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUsXG5cdFx0XHRjdXJyZW50UmVzb3VyY2VzLFxuXHRcdFx0dmlzaWJsZVJlc291cmNlcyxcblx0XHRcdHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSxcblx0XHRcdHNob3dSZXNvdXJjZSxcblx0XHRcdGhpZGVSZXNvdXJjZSxcblx0XHRcdHNob3dBbGxSZXNvdXJjZXMsXG5cdFx0XHRoaWRlQWxsUmVzb3VyY2VzLFxuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZXMsXG5cdFx0XHRnZXRSZXNvdXJjZUJ5SWQsXG5cdFx0XHRnZXRWaXNpYmxlUmVzb3VyY2VzLFxuXHRcdFx0aXNFdmVudENyb3NzUmVzb3VyY2UsXG5cdFx0XHRoYW5kbGVFdmVudENsaWNrLFxuXHRcdFx0aGFuZGxlRGF0ZUNsaWNrLFxuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRyZW5kZXJSZXNvdXJjZSxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRdXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUNhbGVuZGFyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L1Jlc291cmNlQ2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0T3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7XG5cdGRlbGV0ZVJlY3VycmluZ0V2ZW50IGFzIGRlbGV0ZVJlY3VycmluZ0V2ZW50SW1wbCxcblx0Z2VuZXJhdGVSZWN1cnJpbmdFdmVudHMsXG5cdHVwZGF0ZVJlY3VycmluZ0V2ZW50IGFzIHVwZGF0ZVJlY3VycmluZ0V2ZW50SW1wbCxcbn0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnMgfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdCdcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zLCBUcmFuc2xhdG9yRnVuY3Rpb24gfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgeyBnZXRNb250aFdlZWtzLCBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldyB9IGZyb20gJ0AvdHlwZXMnXG5pbXBvcnQgeyBEQVlfTUFYX0VWRU5UU19ERUZBVUxUIH0gZnJvbSAnLi4vbGliL2NvbnN0YW50cydcblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhckVuZ2luZUNvbmZpZyB7XG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcblx0aW5pdGlhbFZpZXc/OiBDYWxlbmRhclZpZXdcblx0aW5pdGlhbERhdGU/OiBkYXlqcy5EYXlqc1xuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRvbkV2ZW50QWRkPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRXZlbnRVcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudERlbGV0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkRhdGVDaGFuZ2U/OiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcblx0b25WaWV3Q2hhbmdlPzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRsb2NhbGU/OiBzdHJpbmdcblx0dGltZXpvbmU/OiBzdHJpbmdcblx0dHJhbnNsYXRpb25zPzogVHJhbnNsYXRpb25zXG5cdHRyYW5zbGF0b3I/OiBUcmFuc2xhdG9yRnVuY3Rpb25cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhckVuZ2luZVJldHVybiB7XG5cdGN1cnJlbnREYXRlOiBkYXlqcy5EYXlqc1xuXHR2aWV3OiBDYWxlbmRhclZpZXdcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmF3RXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0aXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG5cdHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHNlbGVjdGVkRGF0ZTogZGF5anMuRGF5anMgfCBudWxsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0Y3VycmVudExvY2FsZTogc3RyaW5nXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHNldEN1cnJlbnREYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcblx0c2VsZWN0RGF0ZTogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG5cdHNldFZpZXc6ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcblx0bmV4dFBlcmlvZDogKCkgPT4gdm9pZFxuXHRwcmV2UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHRvZGF5OiAoKSA9PiB2b2lkXG5cdGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0dXBkYXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50Pixcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG5cdGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdCkgPT4gdm9pZFxuXHRvcGVuRXZlbnRGb3JtOiAoZXZlbnREYXRhPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHRjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxuXHRzZXRTZWxlY3RlZEV2ZW50OiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxDYWxlbmRhckV2ZW50IHwgbnVsbD4+XG5cdHNldElzRXZlbnRGb3JtT3BlbjogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248Ym9vbGVhbj4+XG5cdHNldFNlbGVjdGVkRGF0ZTogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248ZGF5anMuRGF5anMgfCBudWxsPj5cblx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiAoXG5cdFx0c3RhcnREYXRlOiBkYXlqcy5EYXlqcyxcblx0XHRlbmREYXRlOiBkYXlqcy5EYXlqc1xuXHQpID0+IENhbGVuZGFyRXZlbnRbXVxuXHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0dDogKGtleToga2V5b2YgVHJhbnNsYXRpb25zKSA9PiBzdHJpbmdcbn1cblxuY29uc3QgVklFV19VTklUUzogUmVjb3JkPENhbGVuZGFyVmlldywgZGF5anMuTWFuaXB1bGF0ZVR5cGU+ID0ge1xuXHRkYXk6ICdkYXknLFxuXHR3ZWVrOiAnd2VlaycsXG5cdG1vbnRoOiAnbW9udGgnLFxuXHR5ZWFyOiAneWVhcicsXG59XG5cbmV4cG9ydCBjb25zdCB1c2VDYWxlbmRhckVuZ2luZSA9IChcblx0Y29uZmlnOiBDYWxlbmRhckVuZ2luZUNvbmZpZ1xuKTogQ2FsZW5kYXJFbmdpbmVSZXR1cm4gPT4ge1xuXHRjb25zdCB7XG5cdFx0ZXZlbnRzID0gW10sXG5cdFx0Zmlyc3REYXlPZldlZWsgPSAwLFxuXHRcdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0XHRpbml0aWFsRGF0ZSA9IGRheWpzKCksXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRvbkV2ZW50QWRkLFxuXHRcdG9uRXZlbnRVcGRhdGUsXG5cdFx0b25FdmVudERlbGV0ZSxcblx0XHRvbkRhdGVDaGFuZ2UsXG5cdFx0b25WaWV3Q2hhbmdlLFxuXHRcdGxvY2FsZSxcblx0XHR0aW1lem9uZSxcblx0XHR0cmFuc2xhdGlvbnMsXG5cdFx0dHJhbnNsYXRvcixcblx0fSA9IGNvbmZpZ1xuXG5cdGNvbnN0IFtjdXJyZW50RGF0ZSwgc2V0Q3VycmVudERhdGVdID0gdXNlU3RhdGU8ZGF5anMuRGF5anM+KGluaXRpYWxEYXRlKVxuXHRjb25zdCBbdmlldywgc2V0Vmlld10gPSB1c2VTdGF0ZTxDYWxlbmRhclZpZXc+KGluaXRpYWxWaWV3KVxuXHRjb25zdCBbY3VycmVudEV2ZW50cywgc2V0Q3VycmVudEV2ZW50c10gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50W10+KGV2ZW50cylcblx0Y29uc3QgW2lzRXZlbnRGb3JtT3Blbiwgc2V0SXNFdmVudEZvcm1PcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXHRjb25zdCBbc2VsZWN0ZWRFdmVudCwgc2V0U2VsZWN0ZWRFdmVudF0gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50IHwgbnVsbD4obnVsbClcblx0Y29uc3QgW3NlbGVjdGVkRGF0ZSwgc2V0U2VsZWN0ZWREYXRlXSA9IHVzZVN0YXRlPGRheWpzLkRheWpzIHwgbnVsbD4obnVsbClcblx0Y29uc3QgW2N1cnJlbnRMb2NhbGUsIHNldEN1cnJlbnRMb2NhbGVdID0gdXNlU3RhdGUobG9jYWxlIHx8ICdlbicpXG5cblx0Y29uc3QgdCA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmICh0cmFuc2xhdG9yKSB7XG5cdFx0XHRyZXR1cm4gdHJhbnNsYXRvclxuXHRcdH1cblx0XHRpZiAodHJhbnNsYXRpb25zKSB7XG5cdFx0XHRyZXR1cm4gKGtleToga2V5b2YgVHJhbnNsYXRpb25zKSA9PiB0cmFuc2xhdGlvbnNba2V5XSB8fCBrZXlcblx0XHR9XG5cdFx0cmV0dXJuIChrZXk6IGtleW9mIFRyYW5zbGF0aW9ucykgPT4gZGVmYXVsdFRyYW5zbGF0aW9uc1trZXldIHx8IGtleVxuXHR9LCBbdHJhbnNsYXRpb25zLCB0cmFuc2xhdG9yXSlcblxuXHRjb25zdCBnZXRFdmVudHNGb3JEYXRlUmFuZ2UgPSB1c2VDYWxsYmFjayhcblx0XHQoc3RhcnREYXRlOiBkYXlqcy5EYXlqcywgZW5kRGF0ZTogZGF5anMuRGF5anMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRcdFx0Y29uc3QgYWxsRXZlbnRzOiBDYWxlbmRhckV2ZW50W10gPSBbXVxuXG5cdFx0XHRmb3IgKGNvbnN0IGV2ZW50IG9mIGN1cnJlbnRFdmVudHMpIHtcblx0XHRcdFx0aWYgKGV2ZW50LnJydWxlKSB7XG5cdFx0XHRcdFx0YWxsRXZlbnRzLnB1c2goXG5cdFx0XHRcdFx0XHQuLi5nZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyh7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdFx0XHRzdGFydERhdGUsXG5cdFx0XHRcdFx0XHRcdGVuZERhdGUsXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBzdGFydHNJblJhbmdlID1cblx0XHRcdFx0XHRcdGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIoc3RhcnREYXRlKSAmJlxuXHRcdFx0XHRcdFx0ZXZlbnQuc3RhcnQuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSlcblx0XHRcdFx0XHRjb25zdCBlbmRzSW5SYW5nZSA9XG5cdFx0XHRcdFx0XHRldmVudC5lbmQuaXNTYW1lT3JBZnRlcihzdGFydERhdGUpICYmXG5cdFx0XHRcdFx0XHRldmVudC5lbmQuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSlcblx0XHRcdFx0XHRjb25zdCBzcGFuc1JhbmdlID1cblx0XHRcdFx0XHRcdGV2ZW50LnN0YXJ0LmlzQmVmb3JlKHN0YXJ0RGF0ZSkgJiYgZXZlbnQuZW5kLmlzQWZ0ZXIoZW5kRGF0ZSlcblx0XHRcdFx0XHRpZiAoc3RhcnRzSW5SYW5nZSB8fCBlbmRzSW5SYW5nZSB8fCBzcGFuc1JhbmdlKSB7XG5cdFx0XHRcdFx0XHRhbGxFdmVudHMucHVzaChldmVudClcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBhbGxFdmVudHNcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzXVxuXHQpXG5cblx0Y29uc3QgZ2V0Q3VycmVudFZpZXdSYW5nZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRpZiAodmlldyA9PT0gJ2RheScpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHN0YXJ0OiBjdXJyZW50RGF0ZS5zdGFydE9mKCdkYXknKSxcblx0XHRcdFx0ZW5kOiBjdXJyZW50RGF0ZS5lbmRPZignZGF5JyksXG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICh2aWV3ID09PSAneWVhcicpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHN0YXJ0OiBjdXJyZW50RGF0ZS5zdGFydE9mKCd5ZWFyJyksXG5cdFx0XHRcdGVuZDogY3VycmVudERhdGUuZW5kT2YoJ3llYXInKSxcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHZpZXcgPT09ICd3ZWVrJykge1xuXHRcdFx0Y29uc3Qgd2Vla0RheXMgPSBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzdGFydDogd2Vla0RheXNbMF0uc3RhcnRPZignZGF5JyksXG5cdFx0XHRcdGVuZDogd2Vla0RheXNbNl0uZW5kT2YoJ2RheScpLFxuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBtb250aCB2aWV3XG5cdFx0Y29uc3Qgd2Vla3MgPSBnZXRNb250aFdlZWtzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vlaylcblx0XHRyZXR1cm4geyBzdGFydDogd2Vla3NbMF1bMF0uc3RhcnRPZignZGF5JyksIGVuZDogd2Vla3NbNV1bNl0uZW5kT2YoJ2RheScpIH1cblx0fSwgW2N1cnJlbnREYXRlLCB2aWV3LCBmaXJzdERheU9mV2Vla10pXG5cblx0Y29uc3QgcHJvY2Vzc2VkRXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0Y29uc3QgeyBzdGFydCwgZW5kIH0gPSBnZXRDdXJyZW50Vmlld1JhbmdlKClcblx0XHRyZXR1cm4gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKHN0YXJ0LCBlbmQpXG5cdH0sIFtnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIGdldEN1cnJlbnRWaWV3UmFuZ2VdKVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGV2ZW50cykge1xuXHRcdFx0c2V0Q3VycmVudEV2ZW50cyhldmVudHMpXG5cdFx0fVxuXHR9LCBbZXZlbnRzXSlcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAobG9jYWxlKSB7XG5cdFx0XHRzZXRDdXJyZW50TG9jYWxlKGxvY2FsZSlcblx0XHRcdGRheWpzLmxvY2FsZShsb2NhbGUpXG5cdFx0XHRzZXRDdXJyZW50RGF0ZSgocHJldkRhdGUpID0+IHByZXZEYXRlLmxvY2FsZShsb2NhbGUpKVxuXHRcdH1cblx0fSwgW2xvY2FsZV0pXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKHRpbWV6b25lKSB7XG5cdFx0XHRkYXlqcy50ei5zZXREZWZhdWx0KHRpbWV6b25lKVxuXHRcdH1cblx0fSwgW3RpbWV6b25lXSlcblxuXHRjb25zdCBzZWxlY3REYXRlID0gdXNlQ2FsbGJhY2soXG5cdFx0KGRhdGU6IGRheWpzLkRheWpzKSA9PiB7XG5cdFx0XHRzZXRDdXJyZW50RGF0ZShkYXRlKVxuXHRcdFx0b25EYXRlQ2hhbmdlPy4oZGF0ZSlcblx0XHR9LFxuXHRcdFtvbkRhdGVDaGFuZ2VdXG5cdClcblxuXHRjb25zdCBuYXZpZ2F0ZVBlcmlvZCA9IHVzZUNhbGxiYWNrKFxuXHRcdChkaXJlY3Rpb246IDEgfCAtMSkgPT4ge1xuXHRcdFx0c2V0Q3VycmVudERhdGUoKHByZXYpID0+IHtcblx0XHRcdFx0Y29uc3QgbmV3RGF0ZSA9XG5cdFx0XHRcdFx0ZGlyZWN0aW9uID09PSAxXG5cdFx0XHRcdFx0XHQ/IHByZXYuYWRkKDEsIFZJRVdfVU5JVFNbdmlld10pXG5cdFx0XHRcdFx0XHQ6IHByZXYuc3VidHJhY3QoMSwgVklFV19VTklUU1t2aWV3XSlcblx0XHRcdFx0b25EYXRlQ2hhbmdlPy4obmV3RGF0ZSlcblx0XHRcdFx0cmV0dXJuIG5ld0RhdGVcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbdmlldywgb25EYXRlQ2hhbmdlXVxuXHQpXG5cblx0Y29uc3QgbmV4dFBlcmlvZCA9IHVzZUNhbGxiYWNrKCgpID0+IG5hdmlnYXRlUGVyaW9kKDEpLCBbbmF2aWdhdGVQZXJpb2RdKVxuXHRjb25zdCBwcmV2UGVyaW9kID0gdXNlQ2FsbGJhY2soKCkgPT4gbmF2aWdhdGVQZXJpb2QoLTEpLCBbbmF2aWdhdGVQZXJpb2RdKVxuXG5cdGNvbnN0IHRvZGF5ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdGNvbnN0IG5ld0RhdGUgPSBkYXlqcygpXG5cdFx0c2V0Q3VycmVudERhdGUobmV3RGF0ZSlcblx0XHRvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuXHR9LCBbb25EYXRlQ2hhbmdlXSlcblxuXHRjb25zdCBhZGRFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0c2V0Q3VycmVudEV2ZW50cygocHJldikgPT4gWy4uLnByZXYsIGV2ZW50XSlcblx0XHRcdG9uRXZlbnRBZGQ/LihldmVudClcblx0XHR9LFxuXHRcdFtvbkV2ZW50QWRkXVxuXHQpXG5cblx0Y29uc3QgdXBkYXRlRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLCB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKChwcmV2KSA9PlxuXHRcdFx0XHRwcmV2Lm1hcCgoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRpZiAoZXZlbnQuaWQgIT09IGV2ZW50SWQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBldmVudFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBuZXdFdmVudCA9IHsgLi4uZXZlbnQsIC4uLnVwZGF0ZXMgfVxuXHRcdFx0XHRcdG9uRXZlbnRVcGRhdGU/LihuZXdFdmVudClcblx0XHRcdFx0XHRyZXR1cm4gbmV3RXZlbnRcblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHR9LFxuXHRcdFtvbkV2ZW50VXBkYXRlXVxuXHQpXG5cblx0Y29uc3QgdXBkYXRlUmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoXG5cdFx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4sXG5cdFx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0XHQpID0+IHtcblx0XHRcdG9uRXZlbnRVcGRhdGU/Lih7IC4uLmV2ZW50LCAuLi51cGRhdGVzIH0pXG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKFxuXHRcdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudEltcGwoe1xuXHRcdFx0XHRcdHRhcmdldEV2ZW50OiBldmVudCxcblx0XHRcdFx0XHR1cGRhdGVzLFxuXHRcdFx0XHRcdGN1cnJlbnRFdmVudHMsXG5cdFx0XHRcdFx0c2NvcGU6IG9wdGlvbnMuc2NvcGUsXG5cdFx0XHRcdH0pXG5cdFx0XHQpXG5cdFx0fSxcblx0XHRbY3VycmVudEV2ZW50cywgb25FdmVudFVwZGF0ZV1cblx0KVxuXG5cdGNvbnN0IGRlbGV0ZVJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50LCBvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnMpID0+IHtcblx0XHRcdG9uRXZlbnREZWxldGU/LihldmVudClcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoXG5cdFx0XHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50SW1wbCh7XG5cdFx0XHRcdFx0dGFyZ2V0RXZlbnQ6IGV2ZW50LFxuXHRcdFx0XHRcdGN1cnJlbnRFdmVudHMsXG5cdFx0XHRcdFx0c2NvcGU6IG9wdGlvbnMuc2NvcGUsXG5cdFx0XHRcdH0pXG5cdFx0XHQpXG5cdFx0fSxcblx0XHRbY3VycmVudEV2ZW50cywgb25FdmVudERlbGV0ZV1cblx0KVxuXG5cdGNvbnN0IGRlbGV0ZUV2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuXHRcdFx0c2V0Q3VycmVudEV2ZW50cygocHJldikgPT4ge1xuXHRcdFx0XHRjb25zdCBldmVudFRvRGVsZXRlID0gcHJldi5maW5kKChlKSA9PiBlLmlkID09PSBldmVudElkKVxuXHRcdFx0XHRpZiAoZXZlbnRUb0RlbGV0ZSkge1xuXHRcdFx0XHRcdG9uRXZlbnREZWxldGU/LihldmVudFRvRGVsZXRlKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBwcmV2LmZpbHRlcigoZSkgPT4gZS5pZCAhPT0gZXZlbnRJZClcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbb25FdmVudERlbGV0ZV1cblx0KVxuXG5cdGNvbnN0IG9wZW5FdmVudEZvcm0gPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnREYXRhPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4ge1xuXHRcdFx0aWYgKGV2ZW50RGF0YT8uc3RhcnQpIHtcblx0XHRcdFx0c2V0U2VsZWN0ZWREYXRlKGV2ZW50RGF0YS5zdGFydClcblx0XHRcdH1cblx0XHRcdGNvbnN0IHN0YXJ0ID0gZXZlbnREYXRhPy5zdGFydCA/PyBjdXJyZW50RGF0ZVxuXHRcdFx0c2V0U2VsZWN0ZWRFdmVudCh7XG5cdFx0XHRcdHRpdGxlOiB0KCduZXdFdmVudCcpLFxuXHRcdFx0XHRzdGFydCxcblx0XHRcdFx0ZW5kOiBldmVudERhdGE/LmVuZCA/PyBzdGFydC5hZGQoMSwgJ2hvdXInKSxcblx0XHRcdFx0cmVzb3VyY2VJZDogZXZlbnREYXRhPy5yZXNvdXJjZUlkLFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogJycsXG5cdFx0XHRcdGFsbERheTogZmFsc2UsXG5cdFx0XHR9IGFzIENhbGVuZGFyRXZlbnQpXG5cdFx0XHRzZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcblx0XHR9LFxuXHRcdFtjdXJyZW50RGF0ZSwgdF1cblx0KVxuXG5cdGNvbnN0IGNsb3NlRXZlbnRGb3JtID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdHNldFNlbGVjdGVkRGF0ZShudWxsKVxuXHRcdHNldFNlbGVjdGVkRXZlbnQobnVsbClcblx0XHRzZXRJc0V2ZW50Rm9ybU9wZW4oZmFsc2UpXG5cdH0sIFtdKVxuXG5cdGNvbnN0IGhhbmRsZVZpZXdDaGFuZ2UgPSB1c2VDYWxsYmFjayhcblx0XHQobmV3VmlldzogQ2FsZW5kYXJWaWV3KSA9PiB7XG5cdFx0XHRzZXRWaWV3KG5ld1ZpZXcpXG5cdFx0XHRvblZpZXdDaGFuZ2U/LihuZXdWaWV3KVxuXHRcdH0sXG5cdFx0W29uVmlld0NoYW5nZV1cblx0KVxuXG5cdGNvbnN0IGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCk6IENhbGVuZGFyRXZlbnQgfCBudWxsID0+IHtcblx0XHRcdGNvbnN0IHRhcmdldFVJRCA9IGV2ZW50LnVpZFxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0Y3VycmVudEV2ZW50cy5maW5kKFxuXHRcdFx0XHRcdChlKSA9PiAoZS51aWQgfHwgYCR7ZS5pZH1AaWxhbXkuY2FsZW5kYXJgKSA9PT0gdGFyZ2V0VUlEICYmIGUucnJ1bGVcblx0XHRcdFx0KSB8fCBudWxsXG5cdFx0XHQpXG5cdFx0fSxcblx0XHRbY3VycmVudEV2ZW50c11cblx0KVxuXG5cdHJldHVybiB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0dmlldyxcblx0XHRldmVudHM6IHByb2Nlc3NlZEV2ZW50cyxcblx0XHRyYXdFdmVudHM6IGN1cnJlbnRFdmVudHMsXG5cdFx0aXNFdmVudEZvcm1PcGVuLFxuXHRcdHNlbGVjdGVkRXZlbnQsXG5cdFx0c2VsZWN0ZWREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGRheU1heEV2ZW50czogREFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0XHRjdXJyZW50TG9jYWxlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0c2V0Q3VycmVudERhdGUsXG5cdFx0c2VsZWN0RGF0ZSxcblx0XHRzZXRWaWV3OiBoYW5kbGVWaWV3Q2hhbmdlLFxuXHRcdG5leHRQZXJpb2QsXG5cdFx0cHJldlBlcmlvZCxcblx0XHR0b2RheSxcblx0XHRhZGRFdmVudCxcblx0XHR1cGRhdGVFdmVudCxcblx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudCxcblx0XHRkZWxldGVFdmVudCxcblx0XHRkZWxldGVSZWN1cnJpbmdFdmVudCxcblx0XHRvcGVuRXZlbnRGb3JtLFxuXHRcdGNsb3NlRXZlbnRGb3JtLFxuXHRcdHNldFNlbGVjdGVkRXZlbnQsXG5cdFx0c2V0SXNFdmVudEZvcm1PcGVuLFxuXHRcdHNldFNlbGVjdGVkRGF0ZSxcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LFxuXHRcdHQsXG5cdH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnMgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25zID0ge1xuXHQvLyBDb21tb24gYWN0aW9uc1xuXHR0b2RheTogJ1RvZGF5Jyxcblx0Y3JlYXRlOiAnQ3JlYXRlJyxcblx0bmV3OiAnTmV3Jyxcblx0dXBkYXRlOiAnVXBkYXRlJyxcblx0ZGVsZXRlOiAnRGVsZXRlJyxcblx0Y2FuY2VsOiAnQ2FuY2VsJyxcblx0ZXhwb3J0OiAnRXhwb3J0JyxcblxuXHQvLyBFdmVudCByZWxhdGVkXG5cdGV2ZW50OiAnRXZlbnQnLFxuXHRldmVudHM6ICdFdmVudHMnLFxuXHRuZXdFdmVudDogJ05ldyBFdmVudCcsXG5cdHRpdGxlOiAnVGl0bGUnLFxuXHRkZXNjcmlwdGlvbjogJ0Rlc2NyaXB0aW9uJyxcblx0bG9jYXRpb246ICdMb2NhdGlvbicsXG5cdGFsbERheTogJ0FsbCBkYXknLFxuXHRzdGFydERhdGU6ICdTdGFydCBEYXRlJyxcblx0ZW5kRGF0ZTogJ0VuZCBEYXRlJyxcblx0c3RhcnRUaW1lOiAnU3RhcnQgVGltZScsXG5cdGVuZFRpbWU6ICdFbmQgVGltZScsXG5cdGNvbG9yOiAnQ29sb3InLFxuXG5cdC8vIEV2ZW50IGZvcm1cblx0Y3JlYXRlRXZlbnQ6ICdDcmVhdGUgRXZlbnQnLFxuXHRlZGl0RXZlbnQ6ICdFZGl0IEV2ZW50Jyxcblx0YWRkTmV3RXZlbnQ6ICdBZGQgYSBuZXcgZXZlbnQgdG8geW91ciBjYWxlbmRhcicsXG5cdGVkaXRFdmVudERldGFpbHM6ICdFZGl0IHlvdXIgZXZlbnQgZGV0YWlscycsXG5cdGV2ZW50VGl0bGVQbGFjZWhvbGRlcjogJ0V2ZW50IHRpdGxlJyxcblx0ZXZlbnREZXNjcmlwdGlvblBsYWNlaG9sZGVyOiAnRXZlbnQgZGVzY3JpcHRpb24gKG9wdGlvbmFsKScsXG5cdGV2ZW50TG9jYXRpb25QbGFjZWhvbGRlcjogJ0V2ZW50IGxvY2F0aW9uIChvcHRpb25hbCknLFxuXG5cdC8vIFJlY3VycmVuY2Vcblx0cmVwZWF0OiAnUmVwZWF0Jyxcblx0cmVwZWF0czogJ1JlcGVhdHMnLFxuXHRjdXN0b21SZWN1cnJlbmNlOiAnQ3VzdG9tIHJlY3VycmVuY2UnLFxuXHRkYWlseTogJ0RhaWx5Jyxcblx0d2Vla2x5OiAnV2Vla2x5Jyxcblx0bW9udGhseTogJ01vbnRobHknLFxuXHR5ZWFybHk6ICdZZWFybHknLFxuXHRpbnRlcnZhbDogJ0ludGVydmFsJyxcblx0cmVwZWF0T246ICdSZXBlYXQgb24nLFxuXHRuZXZlcjogJ05ldmVyJyxcblx0Y291bnQ6ICdDb3VudCcsXG5cdGV2ZXJ5OiAnRXZlcnknLFxuXHRlbmRzOiAnRW5kcycsXG5cdGFmdGVyOiAnQWZ0ZXInLFxuXHRvY2N1cnJlbmNlczogJ29jY3VycmVuY2VzJyxcblx0b246ICdPbicsXG5cblx0Ly8gUmVjdXJyZW5jZSBlZGl0IGRpYWxvZ1xuXHRlZGl0UmVjdXJyaW5nRXZlbnQ6ICdFZGl0IHJlY3VycmluZyBldmVudCcsXG5cdGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAnRGVsZXRlIHJlY3VycmluZyBldmVudCcsXG5cdGVkaXRSZWN1cnJpbmdFdmVudFF1ZXN0aW9uOlxuXHRcdCdpcyBhIHJlY3VycmluZyBldmVudC4gSG93IHdvdWxkIHlvdSBsaWtlIHRvIGVkaXQgaXQ/Jyxcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnRRdWVzdGlvbjpcblx0XHQnaXMgYSByZWN1cnJpbmcgZXZlbnQuIEhvdyB3b3VsZCB5b3UgbGlrZSB0byBkZWxldGUgaXQ/Jyxcblx0dGhpc0V2ZW50OiAnVGhpcyBldmVudCcsXG5cdHRoaXNFdmVudERlc2NyaXB0aW9uOiAnT25seSBjaGFuZ2UgdGhpcyBzcGVjaWZpYyBvY2N1cnJlbmNlJyxcblx0dGhpc0FuZEZvbGxvd2luZ0V2ZW50czogJ1RoaXMgYW5kIGZvbGxvd2luZyBldmVudHMnLFxuXHR0aGlzQW5kRm9sbG93aW5nRXZlbnRzRGVzY3JpcHRpb246ICdFZGl0IHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRhbGxFdmVudHM6ICdBbGwgZXZlbnRzJyxcblx0YWxsRXZlbnRzRGVzY3JpcHRpb246ICdFZGl0IHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllcycsXG5cdG9ubHlDaGFuZ2VUaGlzOiAnT25seSBjaGFuZ2UgdGhpcyBzcGVjaWZpYyBvY2N1cnJlbmNlJyxcblx0Y2hhbmdlVGhpc0FuZEZ1dHVyZTogJ0NoYW5nZSB0aGlzIGFuZCBhbGwgZnV0dXJlIG9jY3VycmVuY2VzJyxcblx0Y2hhbmdlRW50aXJlU2VyaWVzOiAnQ2hhbmdlIHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllcycsXG5cdG9ubHlEZWxldGVUaGlzOiAnT25seSBkZWxldGUgdGhpcyBzcGVjaWZpYyBvY2N1cnJlbmNlJyxcblx0ZGVsZXRlVGhpc0FuZEZ1dHVyZTogJ0RlbGV0ZSB0aGlzIGFuZCBhbGwgZnV0dXJlIG9jY3VycmVuY2VzJyxcblx0ZGVsZXRlRW50aXJlU2VyaWVzOiAnRGVsZXRlIHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllcycsXG5cblx0Ly8gVmlldyB0eXBlc1xuXHRtb250aDogJ01vbnRoJyxcblx0d2VlazogJ1dlZWsnLFxuXHRkYXk6ICdEYXknLFxuXHR5ZWFyOiAnWWVhcicsXG5cdG1vcmU6ICdtb3JlJyxcblxuXHQvLyBSZXNvdXJjZSBjYWxlbmRhclxuXHRyZXNvdXJjZXM6ICdSZXNvdXJjZXMnLFxuXHRyZXNvdXJjZTogJ1Jlc291cmNlJyxcblx0dGltZTogJ1RpbWUnLFxuXHRkYXRlOiAnRGF0ZScsXG5cdG5vUmVzb3VyY2VzVmlzaWJsZTogJ05vIHJlc291cmNlcyB2aXNpYmxlJyxcblx0YWRkUmVzb3VyY2VzT3JTaG93RXhpc3Rpbmc6ICdBZGQgcmVzb3VyY2VzIG9yIHNob3cgZXhpc3Rpbmcgb25lcycsXG5cblx0Ly8gRGF5cyBvZiB3ZWVrXG5cdHN1bmRheTogJ1N1bmRheScsXG5cdG1vbmRheTogJ01vbmRheScsXG5cdHR1ZXNkYXk6ICdUdWVzZGF5Jyxcblx0d2VkbmVzZGF5OiAnV2VkbmVzZGF5Jyxcblx0dGh1cnNkYXk6ICdUaHVyc2RheScsXG5cdGZyaWRheTogJ0ZyaWRheScsXG5cdHNhdHVyZGF5OiAnU2F0dXJkYXknLFxuXG5cdC8vIERheXMgc2hvcnRcblx0c3VuOiAnU3VuJyxcblx0bW9uOiAnTW9uJyxcblx0dHVlOiAnVHVlJyxcblx0d2VkOiAnV2VkJyxcblx0dGh1OiAnVGh1Jyxcblx0ZnJpOiAnRnJpJyxcblx0c2F0OiAnU2F0JyxcblxuXHQvLyBNb250aHNcblx0amFudWFyeTogJ0phbnVhcnknLFxuXHRmZWJydWFyeTogJ0ZlYnJ1YXJ5Jyxcblx0bWFyY2g6ICdNYXJjaCcsXG5cdGFwcmlsOiAnQXByaWwnLFxuXHRtYXk6ICdNYXknLFxuXHRqdW5lOiAnSnVuZScsXG5cdGp1bHk6ICdKdWx5Jyxcblx0YXVndXN0OiAnQXVndXN0Jyxcblx0c2VwdGVtYmVyOiAnU2VwdGVtYmVyJyxcblx0b2N0b2JlcjogJ09jdG9iZXInLFxuXHRub3ZlbWJlcjogJ05vdmVtYmVyJyxcblx0ZGVjZW1iZXI6ICdEZWNlbWJlcicsXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgV2Vla0RheXMgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5cbmV4cG9ydCBjb25zdCBHQVBfQkVUV0VFTl9FTEVNRU5UUyA9IDEgLy8gcHggKGdhcC0xKVxuZXhwb3J0IGNvbnN0IERBWV9OVU1CRVJfSEVJR0hUID0gMjggLy8gcHggKGgtNylcbmV4cG9ydCBjb25zdCBFVkVOVF9CQVJfSEVJR0hUID0gMjQgLy8gcHggKGgtWzI0cHhdKVxuZXhwb3J0IGNvbnN0IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQgPSA0IC8vIERlZmF1bHQgbWF4IGV2ZW50cyBwZXIgZGF5XG5leHBvcnQgY29uc3QgRElTQUJMRURfQ0VMTF9DTEFTU05BTUUgPVxuXHQnYmctc2Vjb25kYXJ5IHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwb2ludGVyLWV2ZW50cy1ub25lJ1xuXG5leHBvcnQgY29uc3QgV0VFS19EQVlTX05VTUJFUl9NQVA6IFJlY29yZDxXZWVrRGF5cywgbnVtYmVyPiA9IHtcblx0c3VuZGF5OiAwLFxuXHRtb25kYXk6IDEsXG5cdHR1ZXNkYXk6IDIsXG5cdHdlZG5lc2RheTogMyxcblx0dGh1cnNkYXk6IDQsXG5cdGZyaWRheTogNSxcblx0c2F0dXJkYXk6IDYsXG59XG5cbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX1RPX1dFRUtfREFZUzogUmVjb3JkPG51bWJlciwgV2Vla0RheXM+ID0ge1xuXHQwOiAnc3VuZGF5Jyxcblx0MTogJ21vbmRheScsXG5cdDI6ICd0dWVzZGF5Jyxcblx0MzogJ3dlZG5lc2RheScsXG5cdDQ6ICd0aHVyc2RheScsXG5cdDU6ICdmcmlkYXknLFxuXHQ2OiAnc2F0dXJkYXknLFxufVxuIiwKICAgICJpbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHtcblx0RGlhbG9nLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dEZXNjcmlwdGlvbixcblx0RGlhbG9nRm9vdGVyLFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5pbnRlcmZhY2UgUmVjdXJyZW5jZUVkaXREaWFsb2dQcm9wcyB7XG5cdGlzT3BlbjogYm9vbGVhblxuXHRvbkNsb3NlOiAoKSA9PiB2b2lkXG5cdG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB2b2lkXG5cdG9wZXJhdGlvblR5cGU6ICdlZGl0JyB8ICdkZWxldGUnXG5cdGV2ZW50VGl0bGU6IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVjdXJyZW5jZUVkaXREaWFsb2coe1xuXHRpc09wZW4sXG5cdG9uQ2xvc2UsXG5cdG9uQ29uZmlybSxcblx0b3BlcmF0aW9uVHlwZSxcblx0ZXZlbnRUaXRsZSxcbn06IFJlY3VycmVuY2VFZGl0RGlhbG9nUHJvcHMpIHtcblx0Y29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHsgdDogY29udGV4dC50IH0pKVxuXG5cdGNvbnN0IGhhbmRsZVNjb3BlU2VsZWN0ID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0b25Db25maXJtKHNjb3BlKVxuXHRcdG9uQ2xvc2UoKVxuXHR9XG5cblx0Y29uc3QgaXNFZGl0ID0gb3BlcmF0aW9uVHlwZSA9PT0gJ2VkaXQnXG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9wZW49e2lzT3Blbn0gb25PcGVuQ2hhbmdlPXtvbkNsb3NlfT5cblx0XHRcdDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cIm1heC13LW1kXCI+XG5cdFx0XHRcdDxEaWFsb2dIZWFkZXI+XG5cdFx0XHRcdFx0PERpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdFx0e2lzRWRpdCA/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudCcpIDogdCgnZGVsZXRlUmVjdXJyaW5nRXZlbnQnKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdDxEaWFsb2dEZXNjcmlwdGlvbj5cblx0XHRcdFx0XHRcdFwie2V2ZW50VGl0bGV9XCJ7JyAnfVxuXHRcdFx0XHRcdFx0e2lzRWRpdFxuXHRcdFx0XHRcdFx0XHQ/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJylcblx0XHRcdFx0XHRcdFx0OiB0KCdkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dEZXNjcmlwdGlvbj5cblx0XHRcdFx0PC9EaWFsb2dIZWFkZXI+XG5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTNcIj5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwganVzdGlmeS1zdGFydCBoLWF1dG8gcC00XCJcblx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNjb3BlU2VsZWN0KCd0aGlzJyl9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPnt0KCd0aGlzRXZlbnQnKX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdHtpc0VkaXQgPyB0KCdvbmx5Q2hhbmdlVGhpcycpIDogdCgnb25seURlbGV0ZVRoaXMnKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ2ZvbGxvd2luZycpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgndGhpc0FuZEZvbGxvd2luZ0V2ZW50cycpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0e2lzRWRpdCA/IHQoJ2NoYW5nZVRoaXNBbmRGdXR1cmUnKSA6IHQoJ2RlbGV0ZVRoaXNBbmRGdXR1cmUnKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ2FsbCcpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgnYWxsRXZlbnRzJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0XHR7aXNFZGl0ID8gdCgnY2hhbmdlRW50aXJlU2VyaWVzJykgOiB0KCdkZWxldGVFbnRpcmVTZXJpZXMnKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0PERpYWxvZ0Zvb3Rlcj5cblx0XHRcdFx0XHQ8QnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lXCIgb25DbGljaz17b25DbG9zZX0+XG5cdFx0XHRcdFx0XHR7dCgnY2FuY2VsJyl9XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvRGlhbG9nRm9vdGVyPlxuXHRcdFx0PC9EaWFsb2dDb250ZW50PlxuXHRcdDwvRGlhbG9nPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgRHJhZ0VuZEV2ZW50IH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJy4uL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgZ2V0VXBkYXRlZEV2ZW50ID0gKFxuXHRldmVudDogRHJhZ0VuZEV2ZW50LFxuXHRhY3RpdmVFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcbikgPT4ge1xuXHRjb25zdCB7IGFjdGl2ZSwgb3ZlciB9ID0gZXZlbnRcblxuXHRpZiAoIWFjdGl2ZSB8fCAhb3ZlciB8fCAhYWN0aXZlRXZlbnQpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cblx0Y29uc3QgaXNUaW1lQ2VsbCA9IG92ZXIuZGF0YS5jdXJyZW50Py50eXBlID09PSAndGltZS1jZWxsJ1xuXHRjb25zdCB7IHJlc291cmNlSWQsIGFsbERheSB9ID0gb3Zlci5kYXRhLmN1cnJlbnQgfHwge31cblx0bGV0IG5ld1N0YXJ0XG5cblx0aWYgKGlzVGltZUNlbGwpIHtcblx0XHRjb25zdCB7IGRhdGUsIGhvdXIgPSAwLCBtaW51dGUgPSAwIH0gPSBvdmVyLmRhdGEuY3VycmVudFxuXG5cdFx0Ly8gQ3JlYXRlIG5ldyBzdGFydCB0aW1lIGJhc2VkIG9uIHRoZSBkcm9wIHRhcmdldFxuXHRcdG5ld1N0YXJ0ID0gZGF5anMoZGF0ZSkuaG91cihob3VyKS5taW51dGUobWludXRlKVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IHsgZGF0ZSB9ID0gb3Zlci5kYXRhLmN1cnJlbnRcblxuXHRcdG5ld1N0YXJ0ID0gZGF5anMoZGF0ZSlcblx0fVxuXG5cdGNvbnN0IGV2ZW50RHVyYXRpb24gPSBhY3RpdmVFdmVudC5lbmQuZGlmZihhY3RpdmVFdmVudC5zdGFydCwgJ3NlY29uZCcpXG5cblx0Ly8gQ3JlYXRlIG5ldyBlbmQgdGltZSBieSBhZGRpbmcgdGhlIG9yaWdpbmFsIGR1cmF0aW9uXG5cdGxldCBuZXdFbmQgPSBuZXdTdGFydC5hZGQoZXZlbnREdXJhdGlvbiwgJ3NlY29uZCcpXG5cblx0aWYgKG5ld0VuZC5pc1NhbWUobmV3RW5kLnN0YXJ0T2YoJ2RheScpKSkge1xuXHRcdC8vIElmIHRoZSBuZXcgZW5kIHRpbWUgaXMgYXQgbWlkbmlnaHQsIHNldCBpdCB0byAyNCBob3VycyBvZiBwYXJ0aWFsIGRheVxuXHRcdG5ld0VuZCA9IG5ld0VuZC5zdWJ0cmFjdCgxLCAnZGF5JykuZW5kT2YoJ2RheScpXG5cdH1cblxuXHQvLyBVcGRhdGUgdGhlIGV2ZW50IHdpdGggbmV3IHRpbWVzIGFuZCByZXNvdXJjZSBpZiBjaGFuZ2VkXG5cdGNvbnN0IHVwZGF0ZXMgPSB7XG5cdFx0c3RhcnQ6IG5ld1N0YXJ0LFxuXHRcdGVuZDogbmV3RW5kLFxuXHRcdHJlc291cmNlSWQsXG5cdFx0YWxsRGF5OiBpc1RpbWVDZWxsID8gZmFsc2UgOiAoYWxsRGF5ID8/IGFjdGl2ZUV2ZW50LmFsbERheSksXG5cdH1cblx0cmV0dXJuIHsgYWN0aXZlRXZlbnQsIHVwZGF0ZXMgfVxufVxuIiwKICAgICJpbXBvcnQgeyBEcmFnT3ZlcmxheSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgeyBzbmFwQ2VudGVyVG9DdXJzb3IgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi4vdHlwZXMnXG5cbmludGVyZmFjZSBFdmVudERyYWdPdmVybGF5UHJvcHMge1xuXHRyZWY6IFJlYWN0LlJlZjx7IHNldEFjdGl2ZUV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWQgfT5cbn1cblxuZXhwb3J0IGNvbnN0IEV2ZW50RHJhZ092ZXJsYXk6IFJlYWN0LkZDPEV2ZW50RHJhZ092ZXJsYXlQcm9wcz4gPSAoeyByZWYgfSkgPT4ge1xuXHRjb25zdCBbYWN0aXZlRXZlbnQsIHNldEFjdGl2ZUV2ZW50XSA9IHVzZVN0YXRlPENhbGVuZGFyRXZlbnQ+KG51bGwpXG5cblx0dXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG5cdFx0c2V0QWN0aXZlRXZlbnQsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PERyYWdPdmVybGF5IG1vZGlmaWVycz17W3NuYXBDZW50ZXJUb0N1cnNvcl19PlxuXHRcdFx0e2FjdGl2ZUV2ZW50ICYmIChcblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnY3Vyc29yLWdyYWIgdHJ1bmNhdGUgcm91bmRlZCBiZy1hbWJlci0yMDAgcC0yIHRleHQtWzEwcHhdIHNoYWRvdy1sZyBzbTp0ZXh0LXhzIHctMjAnLFxuXHRcdFx0XHRcdFx0YWN0aXZlRXZlbnQuYmFja2dyb3VuZENvbG9yIHx8ICdiZy1ibHVlLTUwMCcsXG5cdFx0XHRcdFx0XHRhY3RpdmVFdmVudC5jb2xvciB8fCAndGV4dC13aGl0ZSdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e2FjdGl2ZUV2ZW50Py50aXRsZX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpfVxuXHRcdDwvRHJhZ092ZXJsYXk+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgQ2hlY2tib3ggfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2hlY2tib3gnXG5pbXBvcnQgeyBEYXRlUGlja2VyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyJ1xuaW1wb3J0IHtcblx0RGlhbG9nLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dEZXNjcmlwdGlvbixcblx0RGlhbG9nRm9vdGVyLFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvaW5wdXQnXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9sYWJlbCdcbmltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyBUaW1lUGlja2VyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3RpbWUtcGlja2VyJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXREaWFsb2cgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXRvciB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdG9yL3JlY3VycmVuY2UtZWRpdG9yJ1xuaW1wb3J0IHsgdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucydcbmltcG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgaXNSZWN1cnJpbmdFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBDT0xPUl9OQU1FUyA9IFtcblx0J2JsdWUnLFxuXHQnZ3JlZW4nLFxuXHQncHVycGxlJyxcblx0J3JlZCcsXG5cdCd5ZWxsb3cnLFxuXHQncGluaycsXG5cdCdpbmRpZ28nLFxuXHQnYW1iZXInLFxuXHQnZW1lcmFsZCcsXG5cdCdza3knLFxuXHQndmlvbGV0Jyxcblx0J3Jvc2UnLFxuXHQndGVhbCcsXG5cdCdvcmFuZ2UnLFxuXSBhcyBjb25zdFxuXG5jb25zdCBDT0xPUl9PUFRJT05TID0gQ09MT1JfTkFNRVMubWFwKChjb2xvcikgPT4gKHtcblx0dmFsdWU6IGBiZy0ke2NvbG9yfS0xMDAgdGV4dC0ke2NvbG9yfS04MDBgLFxuXHRsYWJlbDogY29sb3IuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBjb2xvci5zbGljZSgxKSxcbn0pKVxuXG5jb25zdCBidWlsZERhdGVUaW1lID0gKFxuXHRkYXRlOiBEYXRlLFxuXHR0aW1lOiBzdHJpbmcsXG5cdGlzQWxsRGF5OiBib29sZWFuXG4pOiBkYXlqcy5EYXlqcyA9PiB7XG5cdGNvbnN0IFtob3VycywgbWludXRlc10gPSB0aW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblx0Y29uc3QgYmFzZSA9IGRheWpzKGRhdGUpLmhvdXIoaG91cnMpLm1pbnV0ZShtaW51dGVzKVxuXHRyZXR1cm4gaXNBbGxEYXkgPyBiYXNlLmhvdXIoMCkubWludXRlKDApIDogYmFzZVxufVxuXG5jb25zdCBidWlsZEVuZERhdGVUaW1lID0gKFxuXHRkYXRlOiBEYXRlLFxuXHR0aW1lOiBzdHJpbmcsXG5cdGlzQWxsRGF5OiBib29sZWFuXG4pOiBkYXlqcy5EYXlqcyA9PiB7XG5cdGNvbnN0IFtob3VycywgbWludXRlc10gPSB0aW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblx0Y29uc3QgYmFzZSA9IGRheWpzKGRhdGUpLmhvdXIoaG91cnMpLm1pbnV0ZShtaW51dGVzKVxuXHRyZXR1cm4gaXNBbGxEYXkgPyBiYXNlLmhvdXIoMjMpLm1pbnV0ZSg1OSkgOiBiYXNlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRGb3JtUHJvcHMge1xuXHRvcGVuPzogYm9vbGVhblxuXHRzZWxlY3RlZEV2ZW50PzogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0b25BZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25VcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25EZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DbG9zZTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgRXZlbnRGb3JtOiBSZWFjdC5GQzxFdmVudEZvcm1Qcm9wcz4gPSAoe1xuXHRzZWxlY3RlZEV2ZW50LFxuXHRvbkNsb3NlLFxuXHRvblVwZGF0ZSxcblx0b25EZWxldGUsXG5cdG9uQWRkLFxufSkgPT4ge1xuXHRjb25zdCB7XG5cdFx0ZGlhbG9nU3RhdGUsXG5cdFx0b3BlbkVkaXREaWFsb2csXG5cdFx0b3BlbkRlbGV0ZURpYWxvZyxcblx0XHRjbG9zZURpYWxvZyxcblx0XHRoYW5kbGVDb25maXJtLFxuXHR9ID0gdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zKG9uQ2xvc2UpXG5cblx0Y29uc3QgeyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsIHQsIGJ1c2luZXNzSG91cnMsIHRpbWVGb3JtYXQgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0XHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQuZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LFxuXHRcdFx0dDogY29udGV4dC50LFxuXHRcdFx0YnVzaW5lc3NIb3VyczogY29udGV4dC5idXNpbmVzc0hvdXJzLFxuXHRcdFx0dGltZUZvcm1hdDogY29udGV4dC50aW1lRm9ybWF0LFxuXHRcdH0pKVxuXG5cdGNvbnN0IHN0YXJ0ID0gc2VsZWN0ZWRFdmVudD8uc3RhcnQgPz8gZGF5anMoKVxuXHRjb25zdCBlbmQgPSBzZWxlY3RlZEV2ZW50Py5lbmQgPz8gZGF5anMoKS5hZGQoMSwgJ2hvdXInKVxuXG5cdC8vIEZpbmQgcGFyZW50IGV2ZW50IGlmIHRoaXMgaXMgYSByZWN1cnJpbmcgZXZlbnQgaW5zdGFuY2Vcblx0Y29uc3QgcGFyZW50RXZlbnQgPSBzZWxlY3RlZEV2ZW50XG5cdFx0PyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudClcblx0XHQ6IG51bGxcblxuXHQvLyBGb3JtIHN0YXRlXG5cdGNvbnN0IFtzdGFydERhdGUsIHNldFN0YXJ0RGF0ZV0gPSB1c2VTdGF0ZShzdGFydC50b0RhdGUoKSlcblx0Y29uc3QgW2VuZERhdGUsIHNldEVuZERhdGVdID0gdXNlU3RhdGUoZW5kLnRvRGF0ZSgpKVxuXHRjb25zdCBbaXNBbGxEYXksIHNldElzQWxsRGF5XSA9IHVzZVN0YXRlKHNlbGVjdGVkRXZlbnQ/LmFsbERheSB8fCBmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkQ29sb3IsIHNldFNlbGVjdGVkQ29sb3JdID0gdXNlU3RhdGUoXG5cdFx0c2VsZWN0ZWRFdmVudD8uY29sb3IgfHwgQ09MT1JfT1BUSU9OU1swXS52YWx1ZVxuXHQpXG5cblx0Ly8gVGltZSBzdGF0ZVxuXHRjb25zdCBbc3RhcnRUaW1lLCBzZXRTdGFydFRpbWVdID0gdXNlU3RhdGUoc3RhcnQuZm9ybWF0KCdISDptbScpKVxuXHRjb25zdCBbZW5kVGltZSwgc2V0RW5kVGltZV0gPSB1c2VTdGF0ZShlbmQuZm9ybWF0KCdISDptbScpKVxuXG5cdC8vIEluaXRpYWxpemUgZm9ybSB2YWx1ZXMgZnJvbSBzZWxlY3RlZCBldmVudCBvciBkZWZhdWx0c1xuXHRjb25zdCBbZm9ybVZhbHVlcywgc2V0Rm9ybVZhbHVlc10gPSB1c2VTdGF0ZSh7XG5cdFx0dGl0bGU6IHNlbGVjdGVkRXZlbnQ/LnRpdGxlIHx8ICcnLFxuXHRcdGRlc2NyaXB0aW9uOiBzZWxlY3RlZEV2ZW50Py5kZXNjcmlwdGlvbiB8fCAnJyxcblx0XHRsb2NhdGlvbjogc2VsZWN0ZWRFdmVudD8ubG9jYXRpb24gfHwgJycsXG5cdH0pXG5cblx0Ly8gUmVjdXJyZW5jZSBzdGF0ZSAtIHB1bGwgUlJVTEUgZnJvbSBwYXJlbnQgaWYgdGhpcyBpcyBhbiBpbnN0YW5jZVxuXHRjb25zdCBbcnJ1bGUsIHNldFJydWxlXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KCgpID0+IHtcblx0XHRjb25zdCBldmVudFJydWxlID0gc2VsZWN0ZWRFdmVudD8ucnJ1bGUgfHwgcGFyZW50RXZlbnQ/LnJydWxlXG5cdFx0cmV0dXJuIGV2ZW50UnJ1bGUgfHwgbnVsbFxuXHR9KVxuXG5cdC8vIENyZWF0ZSB3cmFwcGVyIGZ1bmN0aW9ucyB0byBmaXggVHlwZVNjcmlwdCBlcnJvcnMgd2l0aCBEYXRlUGlja2VyXG5cdGNvbnN0IGhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0c2V0U3RhcnREYXRlKGRhdGUpXG5cdFx0aWYgKGRhdGUgJiYgZGF5anMoZGF0ZSkuaXNBZnRlcihkYXlqcyhlbmREYXRlKSkpIHtcblx0XHRcdHNldEVuZERhdGUoZGF0ZSlcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVFbmREYXRlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcblx0XHRzZXRFbmREYXRlKGRhdGUpXG5cdFx0aWYgKGRhdGUgJiYgZGF5anMoZGF0ZSkuaXNCZWZvcmUoZGF5anMoc3RhcnREYXRlKSkpIHtcblx0XHRcdHNldFN0YXJ0RGF0ZShkYXRlKVxuXHRcdH1cblx0fVxuXG5cdC8vIFRpbWUgdmFsaWRhdGlvbiBoYW5kbGVycyAtIG9ubHkgdmFsaWRhdGUgd2hlbiBkYXRlcyBhcmUgdGhlIHNhbWVcblx0Y29uc3QgaGFuZGxlU3RhcnRUaW1lQ2hhbmdlID0gKHRpbWU6IHN0cmluZykgPT4ge1xuXHRcdHNldFN0YXJ0VGltZSh0aW1lKVxuXHRcdC8vIE9ubHkgdmFsaWRhdGUgaWYgc2FtZSBkYXlcblx0XHRpZiAoZGF5anMoc3RhcnREYXRlKS5pc1NhbWUoZGF5anMoZW5kRGF0ZSksICdkYXknKSAmJiB0aW1lID4gZW5kVGltZSkge1xuXHRcdFx0c2V0RW5kVGltZSh0aW1lKVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGhhbmRsZUVuZFRpbWVDaGFuZ2UgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0c2V0RW5kVGltZSh0aW1lKVxuXHRcdC8vIE9ubHkgdmFsaWRhdGUgaWYgc2FtZSBkYXlcblx0XHRpZiAoZGF5anMoc3RhcnREYXRlKS5pc1NhbWUoZGF5anMoZW5kRGF0ZSksICdkYXknKSAmJiB0aW1lIDwgc3RhcnRUaW1lKSB7XG5cdFx0XHRzZXRTdGFydFRpbWUodGltZSlcblx0XHR9XG5cdH1cblxuXHQvLyBVcGRhdGUgZm9ybSB2YWx1ZXMgd2hlbiBpbnB1dCBjaGFuZ2VzXG5cdGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gKFxuXHRcdGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PlxuXHQpID0+IHtcblx0XHRjb25zdCB7IG5hbWUsIHZhbHVlIH0gPSBlLnRhcmdldFxuXHRcdHNldEZvcm1WYWx1ZXMoKHByZXYpID0+ICh7IC4uLnByZXYsIFtuYW1lXTogdmFsdWUgfSkpXG5cdH1cblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdC8vIFJlc2V0IGVuZCB0aW1lIHdoZW4gYWxsIGRheSBpcyB0b2dnbGVkIHRvIG9uXG5cdFx0aWYgKGlzQWxsRGF5KSB7XG5cdFx0XHRzZXRFbmRUaW1lKCcyMzo1OScpXG5cdFx0fVxuXHR9LCBbaXNBbGxEYXldKVxuXG5cdGNvbnN0IGhhbmRsZVN1Ym1pdCA9IChlOiBSZWFjdC5Gb3JtRXZlbnQpID0+IHtcblx0XHRlLnByZXZlbnREZWZhdWx0KClcblxuXHRcdGNvbnN0IHN0YXJ0RGF0ZVRpbWUgPSBidWlsZERhdGVUaW1lKHN0YXJ0RGF0ZSwgc3RhcnRUaW1lLCBpc0FsbERheSlcblx0XHRjb25zdCBlbmREYXRlVGltZSA9IGJ1aWxkRW5kRGF0ZVRpbWUoZW5kRGF0ZSwgZW5kVGltZSwgaXNBbGxEYXkpXG5cblx0XHRjb25zdCBldmVudERhdGE6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRpZDogc2VsZWN0ZWRFdmVudD8uaWQgfHwgZGF5anMoKS5mb3JtYXQoJ1lZWVlNTURESEhtbXNzJyksXG5cdFx0XHR0aXRsZTogZm9ybVZhbHVlcy50aXRsZSxcblx0XHRcdHN0YXJ0OiBzdGFydERhdGVUaW1lLFxuXHRcdFx0ZW5kOiBlbmREYXRlVGltZSxcblx0XHRcdHJlc291cmNlSWQ6IHNlbGVjdGVkRXZlbnQ/LnJlc291cmNlSWQsXG5cdFx0XHRkZXNjcmlwdGlvbjogZm9ybVZhbHVlcy5kZXNjcmlwdGlvbixcblx0XHRcdGxvY2F0aW9uOiBmb3JtVmFsdWVzLmxvY2F0aW9uLFxuXHRcdFx0YWxsRGF5OiBpc0FsbERheSxcblx0XHRcdGNvbG9yOiBzZWxlY3RlZENvbG9yLFxuXHRcdFx0cnJ1bGU6IHJydWxlIHx8IHVuZGVmaW5lZCxcblx0XHR9XG5cblx0XHRpZiAoc2VsZWN0ZWRFdmVudD8uaWQgJiYgaXNSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KSkge1xuXHRcdFx0b3BlbkVkaXREaWFsb2coc2VsZWN0ZWRFdmVudCwge1xuXHRcdFx0XHR0aXRsZTogZm9ybVZhbHVlcy50aXRsZSxcblx0XHRcdFx0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG5cdFx0XHRcdGVuZDogZW5kRGF0ZVRpbWUsXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiBmb3JtVmFsdWVzLmRlc2NyaXB0aW9uLFxuXHRcdFx0XHRsb2NhdGlvbjogZm9ybVZhbHVlcy5sb2NhdGlvbixcblx0XHRcdFx0YWxsRGF5OiBpc0FsbERheSxcblx0XHRcdFx0Y29sb3I6IHNlbGVjdGVkQ29sb3IsXG5cdFx0XHRcdHJydWxlOiBycnVsZSB8fCB1bmRlZmluZWQsXG5cdFx0XHR9KVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0aWYgKHNlbGVjdGVkRXZlbnQ/LmlkKSB7XG5cdFx0XHRvblVwZGF0ZT8uKGV2ZW50RGF0YSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0b25BZGQ/LihldmVudERhdGEpXG5cdFx0fVxuXHRcdG9uQ2xvc2UoKVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRGVsZXRlID0gKCkgPT4ge1xuXHRcdGlmIChzZWxlY3RlZEV2ZW50Py5pZCkge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhpcyBpcyBhIHJlY3VycmluZyBldmVudFxuXHRcdFx0aWYgKGlzUmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudCkpIHtcblx0XHRcdFx0Ly8gU2hvdyByZWN1cnJpbmcgZXZlbnQgZGVsZXRlIGRpYWxvZ1xuXHRcdFx0XHRvcGVuRGVsZXRlRGlhbG9nKHNlbGVjdGVkRXZlbnQpXG5cdFx0XHRcdHJldHVybiAvLyBEb24ndCBjbG9zZSB0aGUgZm9ybSB5ZXQsIGxldCB0aGUgZGlhbG9nIGhhbmRsZSBpdFxuXHRcdFx0fVxuXHRcdFx0b25EZWxldGU/LihzZWxlY3RlZEV2ZW50KVxuXHRcdFx0b25DbG9zZSgpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlUlJ1bGVDaGFuZ2UgPSAobmV3UlJ1bGU6IFJSdWxlT3B0aW9ucyB8IG51bGwpID0+IHtcblx0XHRpZiAoIW5ld1JSdWxlKSB7XG5cdFx0XHRzZXRScnVsZShudWxsKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGNvbnN0IHN0YXJ0RGF0ZVRpbWUgPSBidWlsZERhdGVUaW1lKHN0YXJ0RGF0ZSwgc3RhcnRUaW1lLCBpc0FsbERheSlcblx0XHRzZXRScnVsZSh7IC4uLm5ld1JSdWxlLCBkdHN0YXJ0OiBzdGFydERhdGVUaW1lLnRvRGF0ZSgpIH0pXG5cdH1cblxuXHRjb25zdCBkaXNhYmxlZERhdGVNYXRjaGVyID0gYnVzaW5lc3NIb3Vyc1xuXHRcdD8gKGRhdGU6IERhdGUpID0+IHtcblx0XHRcdFx0Y29uc3QgZGF5T2ZXZWVrID0gZGF5anMoZGF0ZSkuZm9ybWF0KCdkZGRkJykudG9Mb3dlckNhc2UoKVxuXHRcdFx0XHRyZXR1cm4gIWJ1c2luZXNzSG91cnMuZGF5c09mV2Vlay5pbmNsdWRlcyhcblx0XHRcdFx0XHRkYXlPZldlZWsgYXMgKHR5cGVvZiBidXNpbmVzc0hvdXJzLmRheXNPZldlZWspW251bWJlcl1cblx0XHRcdFx0KVxuXHRcdFx0fVxuXHRcdDogdW5kZWZpbmVkXG5cblx0Y29uc3QgbWluVGltZSA9IGJ1c2luZXNzSG91cnNcblx0XHQ/IGAke2J1c2luZXNzSG91cnMuc3RhcnRUaW1lLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06MDBgXG5cdFx0OiAnMDA6MDAnXG5cdGNvbnN0IG1heFRpbWUgPSBidXNpbmVzc0hvdXJzXG5cdFx0PyBgJHsoYnVzaW5lc3NIb3Vycy5lbmRUaW1lIC0gMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfTo0NWBcblx0XHQ6ICcyMzo1OSdcblxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8RGlhbG9nIG9wZW49e3RydWV9IG9uT3BlbkNoYW5nZT17b25DbG9zZX0+XG5cdFx0XHRcdDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1bOTB2aF0gdy1bOTB2d10gbWF4LXctWzUwMHB4XSBwLTQgc206cC02IG92ZXJmbG93LWhpZGRlbiBnYXAtMFwiPlxuXHRcdFx0XHRcdDxEaWFsb2dIZWFkZXIgY2xhc3NOYW1lPVwibWItMiBzbTptYi00IHNocmluay0wXCI+XG5cdFx0XHRcdFx0XHQ8RGlhbG9nVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1iYXNlIHNtOnRleHQtbGdcIj5cblx0XHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgnZWRpdEV2ZW50JykgOiB0KCdjcmVhdGVFdmVudCcpfVxuXHRcdFx0XHRcdFx0PC9EaWFsb2dUaXRsZT5cblx0XHRcdFx0XHRcdDxEaWFsb2dEZXNjcmlwdGlvbiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cblx0XHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgnZWRpdEV2ZW50RGV0YWlscycpIDogdCgnYWRkTmV3RXZlbnQnKX1cblx0XHRcdFx0XHRcdDwvRGlhbG9nRGVzY3JpcHRpb24+XG5cdFx0XHRcdFx0PC9EaWFsb2dIZWFkZXI+XG5cblx0XHRcdFx0XHQ8Zm9ybVxuXHRcdFx0XHRcdFx0b25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH1cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZmxleC0xIG1pbi1oLTBcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxTY3JvbGxBcmVhIGNsYXNzTmFtZT1cImZsZXgtMSBtaW4taC0wXCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMyBzbTpnYXAtNCBwLTFcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBodG1sRm9yPVwidGl0bGVcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ3RpdGxlJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwidGl0bGVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPVwidGl0bGVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17Zm9ybVZhbHVlcy50aXRsZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnZXZlbnRUaXRsZVBsYWNlaG9sZGVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcXVpcmVkXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgaHRtbEZvcj1cImRlc2NyaXB0aW9uXCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0KCdkZXNjcmlwdGlvbicpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImRlc2NyaXB0aW9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZT1cImRlc2NyaXB0aW9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2Zvcm1WYWx1ZXMuZGVzY3JpcHRpb259XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9e3QoJ2V2ZW50RGVzY3JpcHRpb25QbGFjZWhvbGRlcicpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLTggdGV4dC1zbSBzbTpoLTlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJhbGxEYXlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjaGVja2VkPXtpc0FsbERheX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoY2hlY2tlZCkgPT4gc2V0SXNBbGxEYXkoY2hlY2tlZCA9PT0gdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGh0bWxGb3I9XCJhbGxEYXlcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ2FsbERheScpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtMiBzbTpnYXAtNFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt0KCdzdGFydERhdGUnKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PERhdGVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRlPXtzdGFydERhdGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZVN0YXJ0RGF0ZUNoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtdC0xXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU9uU2VsZWN0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkRGF0ZU1hdGNoZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnZW5kRGF0ZScpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxEYXRlUGlja2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZT17ZW5kRGF0ZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlRW5kRGF0ZUNoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtdC0xXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU9uU2VsZWN0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkRGF0ZU1hdGNoZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0XHRcdHshaXNBbGxEYXkgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC0yIHNtOmdhcC00XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ3N0YXJ0VGltZScpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PFRpbWVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtzdGFydFRpbWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlU3RhcnRUaW1lQ2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWluVGltZT17bWluVGltZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1heFRpbWU9e21heFRpbWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibXQtMSBoLTggdGV4dC1zbSBzbTpoLTlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZT1cInN0YXJ0LXRpbWVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt0KCdlbmRUaW1lJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8VGltZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2VuZFRpbWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlRW5kVGltZUNoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1pblRpbWU9e21pblRpbWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhUaW1lPXttYXhUaW1lfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGltZUZvcm1hdD17dGltZUZvcm1hdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTEgaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU9XCJlbmQtdGltZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQpfVxuXG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ2NvbG9yJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e0NPTE9SX09QVElPTlMubWFwKChjb2xvcikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17Y29sb3IudmFsdWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRgJHtjb2xvci52YWx1ZX0gaC02IHctNiByb3VuZGVkLWZ1bGwgc206aC04IHNtOnctOGAsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNlbGVjdGVkQ29sb3IgPT09IGNvbG9yLnZhbHVlICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3JpbmctMiByaW5nLWJsYWNrIHJpbmctb2Zmc2V0LTEgc206cmluZy1vZmZzZXQtMidcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZXRTZWxlY3RlZENvbG9yKGNvbG9yLnZhbHVlKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyaWEtbGFiZWw9e2NvbG9yLmxhYmVsfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBodG1sRm9yPVwibG9jYXRpb25cIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ2xvY2F0aW9uJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwibG9jYXRpb25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPVwibG9jYXRpb25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17Zm9ybVZhbHVlcy5sb2NhdGlvbn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnZXZlbnRMb2NhdGlvblBsYWNlaG9sZGVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHRcdFx0ey8qIFJlY3VycmVuY2UgU2VjdGlvbiAqL31cblx0XHRcdFx0XHRcdFx0XHQ8UmVjdXJyZW5jZUVkaXRvciB2YWx1ZT17cnJ1bGV9IG9uQ2hhbmdlPXtoYW5kbGVSUnVsZUNoYW5nZX0gLz5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L1Njcm9sbEFyZWE+XG5cblx0XHRcdFx0XHRcdDxEaWFsb2dGb290ZXIgY2xhc3NOYW1lPVwibXQtNCBzaHJpbmstMCBmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgc206ZmxleC1yb3cgc206Z2FwLTBcIj5cblx0XHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkICYmIChcblx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJkZXN0cnVjdGl2ZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtoYW5kbGVEZWxldGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgc206bXItYXV0byBzbTp3LWF1dG9cIlxuXHRcdFx0XHRcdFx0XHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHR7dCgnZGVsZXRlJyl9XG5cdFx0XHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgZ2FwLTIgc206dy1hdXRvXCI+XG5cdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtvbkNsb3NlfVxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleC0xIHNtOmZsZXgtbm9uZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRzaXplPVwic21cIlxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdHt0KCdjYW5jZWwnKX1cblx0XHRcdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzc05hbWU9XCJmbGV4LTEgc206ZmxleC1ub25lXCIgc2l6ZT1cInNtXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7c2VsZWN0ZWRFdmVudD8uaWQgPyB0KCd1cGRhdGUnKSA6IHQoJ2NyZWF0ZScpfVxuXHRcdFx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvRGlhbG9nRm9vdGVyPlxuXHRcdFx0XHRcdDwvZm9ybT5cblx0XHRcdFx0PC9EaWFsb2dDb250ZW50PlxuXHRcdFx0PC9EaWFsb2c+XG5cblx0XHRcdHsvKiBSZWN1cnJpbmcgRXZlbnQgRWRpdCBEaWFsb2cgKi99XG5cdFx0XHQ8UmVjdXJyZW5jZUVkaXREaWFsb2dcblx0XHRcdFx0aXNPcGVuPXtkaWFsb2dTdGF0ZS5pc09wZW59XG5cdFx0XHRcdG9uQ2xvc2U9e2Nsb3NlRGlhbG9nfVxuXHRcdFx0XHRvbkNvbmZpcm09e2hhbmRsZUNvbmZpcm19XG5cdFx0XHRcdG9wZXJhdGlvblR5cGU9e2RpYWxvZ1N0YXRlLm9wZXJhdGlvblR5cGV9XG5cdFx0XHRcdGV2ZW50VGl0bGU9e2RpYWxvZ1N0YXRlLmV2ZW50Py50aXRsZSB8fCAnJ31cblx0XHRcdC8+XG5cdFx0PC8+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgQ2hlY2tib3hQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWNoZWNrYm94J1xuaW1wb3J0IHsgQ2hlY2tJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gQ2hlY2tib3goe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgQ2hlY2tib3hQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIChcblx0XHQ8Q2hlY2tib3hQcmltaXRpdmUuUm9vdFxuXHRcdFx0ZGF0YS1zbG90PVwiY2hlY2tib3hcIlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J3BlZXIgYm9yZGVyLWlucHV0IGRhcms6YmctaW5wdXQvMzAgZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBkYXJrOmRhdGEtW3N0YXRlPWNoZWNrZWRdOmJnLXByaW1hcnkgZGF0YS1bc3RhdGU9Y2hlY2tlZF06Ym9yZGVyLXByaW1hcnkgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgc2l6ZS00IHNocmluay0wIHJvdW5kZWQtWzRweF0gYm9yZGVyIHNoYWRvdy14cyB0cmFuc2l0aW9uLXNoYWRvdyBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxDaGVja2JveFByaW1pdGl2ZS5JbmRpY2F0b3Jcblx0XHRcdFx0ZGF0YS1zbG90PVwiY2hlY2tib3gtaW5kaWNhdG9yXCJcblx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1jdXJyZW50IHRyYW5zaXRpb24tbm9uZVwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxDaGVja0ljb24gY2xhc3NOYW1lPVwic2l6ZS0zLjVcIiAvPlxuXHRcdFx0PC9DaGVja2JveFByaW1pdGl2ZS5JbmRpY2F0b3I+XG5cdFx0PC9DaGVja2JveFByaW1pdGl2ZS5Sb290PlxuXHQpXG59XG5cbmV4cG9ydCB7IENoZWNrYm94IH1cbiIsCiAgICAiaW1wb3J0IHsgUG9wb3ZlckNsb3NlIH0gZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXBvcG92ZXInXG5pbXBvcnQgeyBDYWxlbmRhciBhcyBDYWxlbmRhckljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgTWF0Y2hlciB9IGZyb20gJ3JlYWN0LWRheS1waWNrZXInXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgQ2FsZW5kYXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2FsZW5kYXInXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIERhdGVQaWNrZXJQcm9wcyB7XG5cdGRhdGU6IERhdGUgfCB1bmRlZmluZWRcblx0b25DaGFuZ2U/OiAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4gdm9pZFxuXHRsYWJlbD86IHN0cmluZ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0Y2xvc2VPblNlbGVjdD86IGJvb2xlYW5cblx0ZGlzYWJsZWQ/OiBNYXRjaGVyIHwgTWF0Y2hlcltdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEYXRlUGlja2VyKHtcblx0ZGF0ZSxcblx0Y2xvc2VPblNlbGVjdCxcblx0b25DaGFuZ2UsXG5cdGxhYmVsID0gJ1BpY2sgYSBkYXRlJyxcblx0Y2xhc3NOYW1lLFxuXHRkaXNhYmxlZCxcbn06IERhdGVQaWNrZXJQcm9wcykge1xuXHRjb25zdCBwb3BPdmVyUmVmID0gdXNlUmVmPEhUTUxCdXR0b25FbGVtZW50IHwgbnVsbD4obnVsbClcblx0Y29uc3QgW3NlbGVjdGVkRGF0ZSwgc2V0U2VsZWN0ZWREYXRlXSA9IHVzZVN0YXRlPERhdGUgfCB1bmRlZmluZWQ+KGRhdGUpXG5cblx0Ly8gU3luYyBkYXRlIHN0YXRlIHdpdGggZGF0ZSBwcm9wXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0c2V0U2VsZWN0ZWREYXRlKGRhdGUpXG5cdH0sIFtkYXRlXSlcblxuXHRjb25zdCBoYW5kbGVEYXRlU2VsZWN0ID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcblx0XHRzZXRTZWxlY3RlZERhdGUoZGF0ZSlcblx0XHRpZiAoY2xvc2VPblNlbGVjdCkge1xuXHRcdFx0cG9wT3ZlclJlZi5jdXJyZW50Py5jbGljaygpXG5cdFx0fVxuXHRcdG9uQ2hhbmdlPy4oZGF0ZSlcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG5cdFx0XHQ8UG9wb3Zlcj5cblx0XHRcdFx0PFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdFx0ZGF0YS1lbXB0eT17IWRhdGV9XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHQnZGF0YS1bZW1wdHk9dHJ1ZV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHctZnVsbCBqdXN0aWZ5LXN0YXJ0IHRleHQtbGVmdCBmb250LW5vcm1hbCdcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PENhbGVuZGFySWNvbiAvPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRGF0ZSA/IChcblx0XHRcdFx0XHRcdFx0ZGF5anMoc2VsZWN0ZWREYXRlKS5mb3JtYXQoJ01NTSBELCBZWVlZJylcblx0XHRcdFx0XHRcdCkgOiAoXG5cdFx0XHRcdFx0XHRcdDxzcGFuPntsYWJlbH08L3NwYW4+XG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0XHQ8UG9wb3ZlckNvbnRlbnQgY2xhc3NOYW1lPVwidy1hdXRvIHAtMFwiIGFsaWduPVwic3RhcnRcIj5cblx0XHRcdFx0XHQ8UG9wb3ZlckNsb3NlIHJlZj17cG9wT3ZlclJlZn0gLz5cblx0XHRcdFx0XHQ8Q2FsZW5kYXJcblx0XHRcdFx0XHRcdG1vZGU9XCJzaW5nbGVcIlxuXHRcdFx0XHRcdFx0c2VsZWN0ZWQ9e3NlbGVjdGVkRGF0ZX1cblx0XHRcdFx0XHRcdGRlZmF1bHRNb250aD17c2VsZWN0ZWREYXRlfVxuXHRcdFx0XHRcdFx0b25TZWxlY3Q9e2hhbmRsZURhdGVTZWxlY3R9XG5cdFx0XHRcdFx0XHRjYXB0aW9uTGF5b3V0PVwiZHJvcGRvd25cIlxuXHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0XHQ8L1BvcG92ZXI+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHtcblx0Q2hldnJvbkRvd25JY29uLFxuXHRDaGV2cm9uTGVmdEljb24sXG5cdENoZXZyb25SaWdodEljb24sXG59IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBEYXlCdXR0b24gfSBmcm9tICdyZWFjdC1kYXktcGlja2VyJ1xuaW1wb3J0IHsgRGF5UGlja2VyLCBnZXREZWZhdWx0Q2xhc3NOYW1lcyB9IGZyb20gJ3JlYWN0LWRheS1waWNrZXInXG5pbXBvcnQgeyBCdXR0b24sIGJ1dHRvblZhcmlhbnRzIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIENhbGVuZGFyKHtcblx0Y2xhc3NOYW1lLFxuXHRjbGFzc05hbWVzLFxuXHRzaG93T3V0c2lkZURheXMgPSB0cnVlLFxuXHRjYXB0aW9uTGF5b3V0ID0gJ2xhYmVsJyxcblx0YnV0dG9uVmFyaWFudCA9ICdnaG9zdCcsXG5cdGZvcm1hdHRlcnMsXG5cdGNvbXBvbmVudHMsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGF5UGlja2VyPiAmIHtcblx0YnV0dG9uVmFyaWFudD86IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBCdXR0b24+Wyd2YXJpYW50J11cbn0pIHtcblx0Y29uc3QgZGVmYXVsdENsYXNzTmFtZXMgPSBnZXREZWZhdWx0Q2xhc3NOYW1lcygpXG5cblx0cmV0dXJuIChcblx0XHQ8RGF5UGlja2VyXG5cdFx0XHRzaG93T3V0c2lkZURheXM9e3Nob3dPdXRzaWRlRGF5c31cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdiZy1iYWNrZ3JvdW5kIGdyb3VwL2NhbGVuZGFyIHAtMyBbLS1jZWxsLXNpemU6LS1zcGFjaW5nKDgpXSBbW2RhdGEtc2xvdD1jYXJkLWNvbnRlbnRdXyZdOmJnLXRyYW5zcGFyZW50IFtbZGF0YS1zbG90PXBvcG92ZXItY29udGVudF1fJl06YmctdHJhbnNwYXJlbnQnLFxuXHRcdFx0XHRTdHJpbmcucmF3YHJ0bDoqKjpbLnJkcC1idXR0b25cXF9uZXh0PnN2Z106cm90YXRlLTE4MGAsXG5cdFx0XHRcdFN0cmluZy5yYXdgcnRsOioqOlsucmRwLWJ1dHRvblxcX3ByZXZpb3VzPnN2Z106cm90YXRlLTE4MGAsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGNhcHRpb25MYXlvdXQ9e2NhcHRpb25MYXlvdXR9XG5cdFx0XHRmb3JtYXR0ZXJzPXt7XG5cdFx0XHRcdGZvcm1hdE1vbnRoRHJvcGRvd246IChkYXRlKSA9PlxuXHRcdFx0XHRcdGRhdGUudG9Mb2NhbGVTdHJpbmcoJ2RlZmF1bHQnLCB7IG1vbnRoOiAnc2hvcnQnIH0pLFxuXHRcdFx0XHQuLi5mb3JtYXR0ZXJzLFxuXHRcdFx0fX1cblx0XHRcdGNsYXNzTmFtZXM9e3tcblx0XHRcdFx0cm9vdDogY24oJ3ctZml0JywgZGVmYXVsdENsYXNzTmFtZXMucm9vdCksXG5cdFx0XHRcdG1vbnRoczogY24oXG5cdFx0XHRcdFx0J2ZsZXggZ2FwLTQgZmxleC1jb2wgbWQ6ZmxleC1yb3cgcmVsYXRpdmUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLm1vbnRoc1xuXHRcdFx0XHQpLFxuXHRcdFx0XHRtb250aDogY24oJ2ZsZXggZmxleC1jb2wgdy1mdWxsIGdhcC00JywgZGVmYXVsdENsYXNzTmFtZXMubW9udGgpLFxuXHRcdFx0XHRuYXY6IGNuKFxuXHRcdFx0XHRcdCdmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSB3LWZ1bGwgYWJzb2x1dGUgdG9wLTAgaW5zZXQteC0wIGp1c3RpZnktYmV0d2VlbicsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMubmF2XG5cdFx0XHRcdCksXG5cdFx0XHRcdGJ1dHRvbl9wcmV2aW91czogY24oXG5cdFx0XHRcdFx0YnV0dG9uVmFyaWFudHMoeyB2YXJpYW50OiBidXR0b25WYXJpYW50IH0pLFxuXHRcdFx0XHRcdCdzaXplLSgtLWNlbGwtc2l6ZSkgYXJpYS1kaXNhYmxlZDpvcGFjaXR5LTUwIHAtMCBzZWxlY3Qtbm9uZScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuYnV0dG9uX3ByZXZpb3VzXG5cdFx0XHRcdCksXG5cdFx0XHRcdGJ1dHRvbl9uZXh0OiBjbihcblx0XHRcdFx0XHRidXR0b25WYXJpYW50cyh7IHZhcmlhbnQ6IGJ1dHRvblZhcmlhbnQgfSksXG5cdFx0XHRcdFx0J3NpemUtKC0tY2VsbC1zaXplKSBhcmlhLWRpc2FibGVkOm9wYWNpdHktNTAgcC0wIHNlbGVjdC1ub25lJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5idXR0b25fbmV4dFxuXHRcdFx0XHQpLFxuXHRcdFx0XHRtb250aF9jYXB0aW9uOiBjbihcblx0XHRcdFx0XHQnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaC0oLS1jZWxsLXNpemUpIHctZnVsbCBweC0oLS1jZWxsLXNpemUpJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5tb250aF9jYXB0aW9uXG5cdFx0XHRcdCksXG5cdFx0XHRcdGRyb3Bkb3duczogY24oXG5cdFx0XHRcdFx0J3ctZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LXNtIGZvbnQtbWVkaXVtIGp1c3RpZnktY2VudGVyIGgtKC0tY2VsbC1zaXplKSBnYXAtMS41Jyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5kcm9wZG93bnNcblx0XHRcdFx0KSxcblx0XHRcdFx0ZHJvcGRvd25fcm9vdDogY24oXG5cdFx0XHRcdFx0J3JlbGF0aXZlIGhhcy1mb2N1czpib3JkZXItcmluZyBib3JkZXIgYm9yZGVyLWlucHV0IHNoYWRvdy14cyBoYXMtZm9jdXM6cmluZy1yaW5nLzUwIGhhcy1mb2N1czpyaW5nLVszcHhdIHJvdW5kZWQtbWQnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmRyb3Bkb3duX3Jvb3Rcblx0XHRcdFx0KSxcblx0XHRcdFx0ZHJvcGRvd246IGNuKFxuXHRcdFx0XHRcdCdhYnNvbHV0ZSBiZy1wb3BvdmVyIGluc2V0LTAgb3BhY2l0eS0wJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5kcm9wZG93blxuXHRcdFx0XHQpLFxuXHRcdFx0XHRjYXB0aW9uX2xhYmVsOiBjbihcblx0XHRcdFx0XHQnc2VsZWN0LW5vbmUgZm9udC1tZWRpdW0nLFxuXHRcdFx0XHRcdGNhcHRpb25MYXlvdXQgPT09ICdsYWJlbCdcblx0XHRcdFx0XHRcdD8gJ3RleHQtc20nXG5cdFx0XHRcdFx0XHQ6ICdyb3VuZGVkLW1kIHBsLTIgcHItMSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSB0ZXh0LXNtIGgtOCBbJj5zdmddOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBbJj5zdmddOnNpemUtMy41Jyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5jYXB0aW9uX2xhYmVsXG5cdFx0XHRcdCksXG5cdFx0XHRcdHRhYmxlOiAndy1mdWxsIGJvcmRlci1jb2xsYXBzZScsXG5cdFx0XHRcdHdlZWtkYXlzOiBjbignZmxleCcsIGRlZmF1bHRDbGFzc05hbWVzLndlZWtkYXlzKSxcblx0XHRcdFx0d2Vla2RheTogY24oXG5cdFx0XHRcdFx0J3RleHQtbXV0ZWQtZm9yZWdyb3VuZCByb3VuZGVkLW1kIGZsZXgtMSBmb250LW5vcm1hbCB0ZXh0LVswLjhyZW1dIHNlbGVjdC1ub25lJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrZGF5XG5cdFx0XHRcdCksXG5cdFx0XHRcdHdlZWs6IGNuKCdmbGV4IHctZnVsbCBtdC0yJywgZGVmYXVsdENsYXNzTmFtZXMud2VlayksXG5cdFx0XHRcdHdlZWtfbnVtYmVyX2hlYWRlcjogY24oXG5cdFx0XHRcdFx0J3NlbGVjdC1ub25lIHctKC0tY2VsbC1zaXplKScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMud2Vla19udW1iZXJfaGVhZGVyXG5cdFx0XHRcdCksXG5cdFx0XHRcdHdlZWtfbnVtYmVyOiBjbihcblx0XHRcdFx0XHQndGV4dC1bMC44cmVtXSBzZWxlY3Qtbm9uZSB0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLndlZWtfbnVtYmVyXG5cdFx0XHRcdCksXG5cdFx0XHRcdGRheTogY24oXG5cdFx0XHRcdFx0J3JlbGF0aXZlIHctZnVsbCBoLWZ1bGwgcC0wIHRleHQtY2VudGVyIFsmOmxhc3QtY2hpbGRbZGF0YS1zZWxlY3RlZD10cnVlXV9idXR0b25dOnJvdW5kZWQtci1tZCBncm91cC9kYXkgYXNwZWN0LXNxdWFyZSBzZWxlY3Qtbm9uZScsXG5cdFx0XHRcdFx0cHJvcHMuc2hvd1dlZWtOdW1iZXJcblx0XHRcdFx0XHRcdD8gJ1smOm50aC1jaGlsZCgyKVtkYXRhLXNlbGVjdGVkPXRydWVdX2J1dHRvbl06cm91bmRlZC1sLW1kJ1xuXHRcdFx0XHRcdFx0OiAnWyY6Zmlyc3QtY2hpbGRbZGF0YS1zZWxlY3RlZD10cnVlXV9idXR0b25dOnJvdW5kZWQtbC1tZCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZGF5XG5cdFx0XHRcdCksXG5cdFx0XHRcdHJhbmdlX3N0YXJ0OiBjbihcblx0XHRcdFx0XHQncm91bmRlZC1sLW1kIGJnLWFjY2VudCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMucmFuZ2Vfc3RhcnRcblx0XHRcdFx0KSxcblx0XHRcdFx0cmFuZ2VfbWlkZGxlOiBjbigncm91bmRlZC1ub25lJywgZGVmYXVsdENsYXNzTmFtZXMucmFuZ2VfbWlkZGxlKSxcblx0XHRcdFx0cmFuZ2VfZW5kOiBjbigncm91bmRlZC1yLW1kIGJnLWFjY2VudCcsIGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX2VuZCksXG5cdFx0XHRcdHRvZGF5OiBjbihcblx0XHRcdFx0XHQnYmctYWNjZW50IHRleHQtYWNjZW50LWZvcmVncm91bmQgcm91bmRlZC1tZCBkYXRhLVtzZWxlY3RlZD10cnVlXTpyb3VuZGVkLW5vbmUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLnRvZGF5XG5cdFx0XHRcdCksXG5cdFx0XHRcdG91dHNpZGU6IGNuKFxuXHRcdFx0XHRcdCd0ZXh0LW11dGVkLWZvcmVncm91bmQgYXJpYS1zZWxlY3RlZDp0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLm91dHNpZGVcblx0XHRcdFx0KSxcblx0XHRcdFx0ZGlzYWJsZWQ6IGNuKFxuXHRcdFx0XHRcdCd0ZXh0LW11dGVkLWZvcmVncm91bmQgb3BhY2l0eS01MCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZGlzYWJsZWRcblx0XHRcdFx0KSxcblx0XHRcdFx0aGlkZGVuOiBjbignaW52aXNpYmxlJywgZGVmYXVsdENsYXNzTmFtZXMuaGlkZGVuKSxcblx0XHRcdFx0Li4uY2xhc3NOYW1lcyxcblx0XHRcdH19XG5cdFx0XHRjb21wb25lbnRzPXt7XG5cdFx0XHRcdFJvb3Q6ICh7IGNsYXNzTmFtZSwgcm9vdFJlZiwgLi4ucHJvcHMgfSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdGRhdGEtc2xvdD1cImNhbGVuZGFyXCJcblx0XHRcdFx0XHRcdFx0cmVmPXtyb290UmVmfVxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKGNsYXNzTmFtZSl9XG5cdFx0XHRcdFx0XHRcdHsuLi5wcm9wc31cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRDaGV2cm9uOiAoeyBjbGFzc05hbWUsIG9yaWVudGF0aW9uLCAuLi5wcm9wcyB9KSA9PiB7XG5cdFx0XHRcdFx0aWYgKG9yaWVudGF0aW9uID09PSAnbGVmdCcpIHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxDaGV2cm9uTGVmdEljb24gY2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX0gey4uLnByb3BzfSAvPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChvcmllbnRhdGlvbiA9PT0gJ3JpZ2h0Jykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PENoZXZyb25SaWdodEljb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKCdzaXplLTQnLCBjbGFzc05hbWUpfVxuXHRcdFx0XHRcdFx0XHRcdHsuLi5wcm9wc31cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PENoZXZyb25Eb3duSWNvbiBjbGFzc05hbWU9e2NuKCdzaXplLTQnLCBjbGFzc05hbWUpfSB7Li4ucHJvcHN9IC8+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9LFxuXHRcdFx0XHREYXlCdXR0b246IENhbGVuZGFyRGF5QnV0dG9uLFxuXHRcdFx0XHRXZWVrTnVtYmVyOiAoeyBjaGlsZHJlbiwgLi4ucHJvcHMgfSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8dGQgey4uLnByb3BzfT5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHNpemUtKC0tY2VsbC1zaXplKSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1jZW50ZXJcIj5cblx0XHRcdFx0XHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC4uLmNvbXBvbmVudHMsXG5cdFx0XHR9fVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FsZW5kYXJEYXlCdXR0b24oe1xuXHRjbGFzc05hbWUsXG5cdGRheSxcblx0bW9kaWZpZXJzLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERheUJ1dHRvbj4pIHtcblx0Y29uc3QgZGVmYXVsdENsYXNzTmFtZXMgPSBnZXREZWZhdWx0Q2xhc3NOYW1lcygpXG5cblx0Y29uc3QgcmVmID0gUmVhY3QudXNlUmVmPEhUTUxCdXR0b25FbGVtZW50PihudWxsKVxuXHRSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChtb2RpZmllcnMuZm9jdXNlZCkge1xuXHRcdFx0cmVmLmN1cnJlbnQ/LmZvY3VzKClcblx0XHR9XG5cdH0sIFttb2RpZmllcnMuZm9jdXNlZF0pXG5cblx0cmV0dXJuIChcblx0XHQ8QnV0dG9uXG5cdFx0XHRyZWY9e3JlZn1cblx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRzaXplPVwiaWNvblwiXG5cdFx0XHRkYXRhLWRheT17ZGF5LmRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCl9XG5cdFx0XHRkYXRhLXNlbGVjdGVkLXNpbmdsZT17XG5cdFx0XHRcdG1vZGlmaWVycy5zZWxlY3RlZCAmJlxuXHRcdFx0XHQhbW9kaWZpZXJzLnJhbmdlX3N0YXJ0ICYmXG5cdFx0XHRcdCFtb2RpZmllcnMucmFuZ2VfZW5kICYmXG5cdFx0XHRcdCFtb2RpZmllcnMucmFuZ2VfbWlkZGxlXG5cdFx0XHR9XG5cdFx0XHRkYXRhLXJhbmdlLXN0YXJ0PXttb2RpZmllcnMucmFuZ2Vfc3RhcnR9XG5cdFx0XHRkYXRhLXJhbmdlLWVuZD17bW9kaWZpZXJzLnJhbmdlX2VuZH1cblx0XHRcdGRhdGEtcmFuZ2UtbWlkZGxlPXttb2RpZmllcnMucmFuZ2VfbWlkZGxlfVxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2RhdGEtW3NlbGVjdGVkLXNpbmdsZT10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3NlbGVjdGVkLXNpbmdsZT10cnVlXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBkYXRhLVtyYW5nZS1taWRkbGU9dHJ1ZV06YmctYWNjZW50IGRhdGEtW3JhbmdlLW1pZGRsZT10cnVlXTp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOmJnLXByaW1hcnkgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGF0YS1bcmFuZ2UtZW5kPXRydWVdOmJnLXByaW1hcnkgZGF0YS1bcmFuZ2UtZW5kPXRydWVdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OmJvcmRlci1yaW5nIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnJpbmctcmluZy81MCBkYXJrOmhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZmxleCBhc3BlY3Qtc3F1YXJlIHNpemUtYXV0byB3LWZ1bGwgbWluLXctKC0tY2VsbC1zaXplKSBmbGV4LWNvbCBnYXAtMSBsZWFkaW5nLW5vbmUgZm9udC1ub3JtYWwgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6cmVsYXRpdmUgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6ei0xMCBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpyaW5nLVszcHhdIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpyb3VuZGVkLW1kIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpyb3VuZGVkLXItbWQgZGF0YS1bcmFuZ2UtbWlkZGxlPXRydWVdOnJvdW5kZWQtbm9uZSBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpyb3VuZGVkLW1kIGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOnJvdW5kZWQtbC1tZCBbJj5zcGFuXTp0ZXh0LXhzIFsmPnNwYW5dOm9wYWNpdHktNzAnLFxuXHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5kYXksXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7IENhbGVuZGFyLCBDYWxlbmRhckRheUJ1dHRvbiB9XG4iLAogICAgImltcG9ydCAqIGFzIFBvcG92ZXJQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXBvcG92ZXInXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBQb3BvdmVyKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLlJvb3Q+KSB7XG5cdHJldHVybiA8UG9wb3ZlclByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cInBvcG92ZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJUcmlnZ2VyKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLlRyaWdnZXI+KSB7XG5cdHJldHVybiA8UG9wb3ZlclByaW1pdGl2ZS5UcmlnZ2VyIGRhdGEtc2xvdD1cInBvcG92ZXItdHJpZ2dlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gUG9wb3ZlckNvbnRlbnQoe1xuXHRjbGFzc05hbWUsXG5cdGFsaWduID0gJ2NlbnRlcicsXG5cdHNpZGVPZmZzZXQgPSA0LFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuQ29udGVudD4pIHtcblx0cmV0dXJuIChcblx0XHQ8UG9wb3ZlclByaW1pdGl2ZS5Qb3J0YWw+XG5cdFx0XHQ8UG9wb3ZlclByaW1pdGl2ZS5Db250ZW50XG5cdFx0XHRcdGRhdGEtc2xvdD1cInBvcG92ZXItY29udGVudFwiXG5cdFx0XHRcdGFsaWduPXthbGlnbn1cblx0XHRcdFx0c2lkZU9mZnNldD17c2lkZU9mZnNldH1cblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnYmctcG9wb3ZlciB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIgei01MCB3LTcyIG9yaWdpbi0oLS1yYWRpeC1wb3BvdmVyLWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbikgcm91bmRlZC1tZCBib3JkZXIgcC00IHNoYWRvdy1tZCBvdXRsaW5lLWhpZGRlbicsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHRcdHsuLi5wcm9wc31cblx0XHRcdC8+XG5cdFx0PC9Qb3BvdmVyUHJpbWl0aXZlLlBvcnRhbD5cblx0KVxufVxuXG5mdW5jdGlvbiBQb3BvdmVyQW5jaG9yKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLkFuY2hvcj4pIHtcblx0cmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLkFuY2hvciBkYXRhLXNsb3Q9XCJwb3BvdmVyLWFuY2hvclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZXhwb3J0IHsgUG9wb3ZlciwgUG9wb3ZlclRyaWdnZXIsIFBvcG92ZXJDb250ZW50LCBQb3BvdmVyQW5jaG9yIH1cbiIsCiAgICAiaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gSW5wdXQoeyBjbGFzc05hbWUsIHR5cGUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdpbnB1dCc+KSB7XG5cdHJldHVybiAoXG5cdFx0PGlucHV0XG5cdFx0XHR0eXBlPXt0eXBlfVxuXHRcdFx0ZGF0YS1zbG90PVwiaW5wdXRcIlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZpbGU6dGV4dC1mb3JlZ3JvdW5kIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBzZWxlY3Rpb246YmctcHJpbWFyeSBzZWxlY3Rpb246dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGFyazpiZy1pbnB1dC8zMCBib3JkZXItaW5wdXQgZmxleCBoLTkgdy1mdWxsIG1pbi13LTAgcm91bmRlZC1tZCBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHgtMyBweS0xIHRleHQtYmFzZSBzaGFkb3cteHMgdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZpbGU6aW5saW5lLWZsZXggZmlsZTpoLTcgZmlsZTpib3JkZXItMCBmaWxlOmJnLXRyYW5zcGFyZW50IGZpbGU6dGV4dC1zbSBmaWxlOmZvbnQtbWVkaXVtIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAgbWQ6dGV4dC1zbScsXG5cdFx0XHRcdCdmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XScsXG5cdFx0XHRcdCdhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgeyBJbnB1dCB9XG4iLAogICAgImltcG9ydCAqIGFzIExhYmVsUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1sYWJlbCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIExhYmVsKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIExhYmVsUHJpbWl0aXZlLlJvb3Q+KSB7XG5cdHJldHVybiAoXG5cdFx0PExhYmVsUHJpbWl0aXZlLlJvb3Rcblx0XHRcdGRhdGEtc2xvdD1cImxhYmVsXCJcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXNtIGxlYWRpbmctbm9uZSBmb250LW1lZGl1bSBzZWxlY3Qtbm9uZSBncm91cC1kYXRhLVtkaXNhYmxlZD10cnVlXTpwb2ludGVyLWV2ZW50cy1ub25lIGdyb3VwLWRhdGEtW2Rpc2FibGVkPXRydWVdOm9wYWNpdHktNTAgcGVlci1kaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgcGVlci1kaXNhYmxlZDpvcGFjaXR5LTUwJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHsgTGFiZWwgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBTY3JvbGxBcmVhUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zY3JvbGwtYXJlYSdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBTY3JvbGxBcmVhUHJvcHNcblx0ZXh0ZW5kcyBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PiB7XG5cdHZpZXdQb3J0UHJvcHM/OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cbn1cblxuZnVuY3Rpb24gU2Nyb2xsQXJlYSh7XG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdHZpZXdQb3J0UHJvcHMsXG5cdC4uLnByb3BzXG59OiBTY3JvbGxBcmVhUHJvcHMpIHtcblx0cmV0dXJuIChcblx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290XG5cdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYVwiXG5cdFx0XHRjbGFzc05hbWU9e2NuKCdyZWxhdGl2ZScsIGNsYXNzTmFtZSl9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PFNjcm9sbEFyZWFQcmltaXRpdmUuVmlld3BvcnRcblx0XHRcdFx0ey4uLnZpZXdQb3J0UHJvcHN9XG5cdFx0XHRcdGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhLXZpZXdwb3J0XCJcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgc2l6ZS1mdWxsIHJvdW5kZWQtW2luaGVyaXRdIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTEnLFxuXHRcdFx0XHRcdHZpZXdQb3J0UHJvcHM/LmNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0PlxuXHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHQ8L1Njcm9sbEFyZWFQcmltaXRpdmUuVmlld3BvcnQ+XG5cdFx0XHQ8U2Nyb2xsQmFyIC8+XG5cdFx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5Db3JuZXIgLz5cblx0XHQ8L1Njcm9sbEFyZWFQcmltaXRpdmUuUm9vdD5cblx0KVxufVxuXG5mdW5jdGlvbiBTY3JvbGxCYXIoe1xuXHRjbGFzc05hbWUsXG5cdG9yaWVudGF0aW9uID0gJ3ZlcnRpY2FsJyxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlNjcm9sbEFyZWFTY3JvbGxiYXI+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhclxuXHRcdFx0ZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtc2Nyb2xsYmFyXCJcblx0XHRcdG9yaWVudGF0aW9uPXtvcmllbnRhdGlvbn1cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IHRvdWNoLW5vbmUgcC1weCB0cmFuc2l0aW9uLWNvbG9ycyBzZWxlY3Qtbm9uZScsXG5cdFx0XHRcdG9yaWVudGF0aW9uID09PSAndmVydGljYWwnICYmXG5cdFx0XHRcdFx0J2gtZnVsbCB3LTIuNSBib3JkZXItbCBib3JkZXItbC10cmFuc3BhcmVudCcsXG5cdFx0XHRcdG9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcgJiZcblx0XHRcdFx0XHQnaC0yLjUgZmxleC1jb2wgYm9yZGVyLXQgYm9yZGVyLXQtdHJhbnNwYXJlbnQnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVRodW1iXG5cdFx0XHRcdGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhLXRodW1iXCJcblx0XHRcdFx0Y2xhc3NOYW1lPVwiYmctYm9yZGVyIHJlbGF0aXZlIGZsZXgtMSByb3VuZGVkLWZ1bGxcIlxuXHRcdFx0Lz5cblx0XHQ8L1Njcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhcj5cblx0KVxufVxuXG5leHBvcnQgeyBTY3JvbGxBcmVhLCBTY3JvbGxCYXIgfVxuIiwKICAgICJpbXBvcnQgeyBDbG9jayB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2lucHV0J1xuaW1wb3J0IHtcblx0UG9wb3Zlcixcblx0UG9wb3ZlckNvbnRlbnQsXG5cdFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyB1c2VBdXRvY29tcGxldGVUaW1lcGlja2VyIH0gZnJvbSAnQC9ob29rcy91c2UtYXV0b2NvbXBsZXRlLXRpbWVwaWNrZXInXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBUaW1lRm9ybWF0IH0gZnJvbSAnQC90eXBlcydcblxuY29uc3QgaGFuZGxlV2hlZWwgPSAoZTogUmVhY3QuV2hlZWxFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcblx0Ly8gUHJldmVudCBldmVudCBmcm9tIGJ1YmJsaW5nIHRvIHByZXZlbnQgUG9wb3ZlciBmcm9tIGNsb3Npbmdcblx0ZS5zdG9wUHJvcGFnYXRpb24oKVxufVxuXG5pbnRlcmZhY2UgVGltZVBpY2tlclByb3BzIHtcblx0dmFsdWU6IHN0cmluZ1xuXHRvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcblx0bWluVGltZT86IHN0cmluZ1xuXHRtYXhUaW1lPzogc3RyaW5nXG5cdHRpbWVGb3JtYXQ/OiBUaW1lRm9ybWF0XG5cdHBsYWNlaG9sZGVyPzogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRkaXNhYmxlZD86IGJvb2xlYW5cblx0bmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVGltZVBpY2tlcih7XG5cdHZhbHVlLFxuXHRvbkNoYW5nZSxcblx0bWluVGltZSA9ICcwMDowMCcsXG5cdG1heFRpbWUgPSAnMjM6NDUnLFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRwbGFjZWhvbGRlciA9ICdTZWxlY3QgdGltZS4uLicsXG5cdGNsYXNzTmFtZSxcblx0ZGlzYWJsZWQgPSBmYWxzZSxcblx0bmFtZSxcbn06IFRpbWVQaWNrZXJQcm9wcykge1xuXHRjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblx0Y29uc3QgW3NlYXJjaCwgc2V0U2VhcmNoXSA9IHVzZVN0YXRlKCcnKVxuXHRjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuXHRjb25zdCB0cmlnZ2VyUmVmID0gdXNlUmVmPEhUTUxCdXR0b25FbGVtZW50PihudWxsKVxuXHRjb25zdCBbdHJpZ2dlcldpZHRoLCBzZXRUcmlnZ2VyV2lkdGhdID0gdXNlU3RhdGU8bnVtYmVyPigwKVxuXG5cdGNvbnN0IHsgdGltZU9wdGlvbnMsIGZvcm1hdFRpbWUgfSA9IHVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXIoe1xuXHRcdHRpbWVGb3JtYXQsXG5cdFx0bWluVGltZSxcblx0XHRtYXhUaW1lLFxuXHR9KVxuXG5cdC8vIEZpbHRlciB0aW1lIG9wdGlvbnMgYmFzZWQgb24gc2VhcmNoXG5cdGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IHRpbWVPcHRpb25zLmZpbHRlcigodGltZSkgPT4ge1xuXHRcdGNvbnN0IGZvcm1hdHRlZFRpbWUgPSBmb3JtYXRUaW1lKHRpbWUpXG5cdFx0cmV0dXJuIGZvcm1hdHRlZFRpbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSlcblx0fSlcblxuXHRjb25zdCBoYW5kbGVTZWxlY3QgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0b25DaGFuZ2UodGltZSlcblx0XHRzZXRPcGVuKGZhbHNlKVxuXHRcdHNldFNlYXJjaCgnJylcblx0fVxuXG5cdC8vIE1lYXN1cmUgdHJpZ2dlciB3aWR0aCBhbmQgZm9jdXMgaW5wdXQgd2hlbiBwb3BvdmVyIG9wZW5zXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKG9wZW4pIHtcblx0XHRcdGlmICh0cmlnZ2VyUmVmLmN1cnJlbnQpIHtcblx0XHRcdFx0c2V0VHJpZ2dlcldpZHRoKHRyaWdnZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aClcblx0XHRcdH1cblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRpbnB1dFJlZi5jdXJyZW50Py5mb2N1cygpXG5cdFx0XHR9LCAwKVxuXHRcdH1cblx0fSwgW29wZW5dKVxuXG5cdGNvbnN0IGN1cnJlbnRUaW1lU3RyaW5nID0gdmFsdWUgPyBmb3JtYXRUaW1lKHZhbHVlKSA6IHBsYWNlaG9sZGVyXG5cblx0cmV0dXJuIChcblx0XHQ8UG9wb3ZlciBvcGVuPXtvcGVufSBvbk9wZW5DaGFuZ2U9e3NldE9wZW59PlxuXHRcdFx0PFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRyZWY9e3RyaWdnZXJSZWZ9XG5cdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdHJvbGU9XCJjb21ib2JveFwiXG5cdFx0XHRcdFx0YXJpYS1jb250cm9scz1cInRpbWUtcGlja2VyLWxpc3Rib3hcIlxuXHRcdFx0XHRcdGFyaWEtZXhwYW5kZWQ9e29wZW59XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbigndy1mdWxsIGp1c3RpZnktc3RhcnQnLCBjbGFzc05hbWUpfVxuXHRcdFx0XHRcdGRpc2FibGVkPXtkaXNhYmxlZH1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHRpbWUtcGlja2VyLSR7bmFtZX1gfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PENsb2NrIGNsYXNzTmFtZT1cIm1yLTIgaC00IHctNFwiIC8+XG5cdFx0XHRcdFx0e2N1cnJlbnRUaW1lU3RyaW5nfVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvUG9wb3ZlclRyaWdnZXI+XG5cdFx0XHQ8UG9wb3ZlckNvbnRlbnRcblx0XHRcdFx0Y2xhc3NOYW1lPVwicC0wXCJcblx0XHRcdFx0YWxpZ249XCJzdGFydFwiXG5cdFx0XHRcdHN0eWxlPXt7IHdpZHRoOiB0cmlnZ2VyV2lkdGggfX1cblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJwLTIgYm9yZGVyLWJcIj5cblx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdHJlZj17aW5wdXRSZWZ9XG5cdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj1cIlNlYXJjaCB0aW1lLi4uXCJcblx0XHRcdFx0XHRcdHZhbHVlPXtzZWFyY2h9XG5cdFx0XHRcdFx0XHRvbkNoYW5nZT17KGUpID0+IHNldFNlYXJjaChlLnRhcmdldC52YWx1ZSl9XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLThcIlxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8U2Nyb2xsQXJlYSBjbGFzc05hbWU9XCJoLVsyMDBweF1cIiBvbldoZWVsPXtoYW5kbGVXaGVlbH0+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJwLTFcIj5cblx0XHRcdFx0XHRcdHtmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09PSAwID8gKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInB5LTYgdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0XHROL0Fcblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQpIDogKFxuXHRcdFx0XHRcdFx0XHRmaWx0ZXJlZE9wdGlvbnMubWFwKCh0aW1lKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgdGltZVN0cmluZyA9IGZvcm1hdFRpbWUodGltZSlcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpc1NlbGVjdGVkID0gdGltZSA9PT0gdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e3RpbWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3QodGltZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3JlbGF0aXZlIGZsZXggdy1mdWxsIGN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lIGl0ZW1zLWNlbnRlciByb3VuZGVkLXNtIHB4LTIgcHktMS41IHRleHQtc20gb3V0bGluZS1ub25lIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpc1NlbGVjdGVkICYmICdiZy1hY2NlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCdcblx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3RpbWVTdHJpbmd9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L1Njcm9sbEFyZWE+XG5cdFx0XHQ8L1BvcG92ZXJDb250ZW50PlxuXHRcdDwvUG9wb3Zlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFRpbWVGb3JtYXQgfSBmcm9tICdAL3R5cGVzJ1xuXG5pbnRlcmZhY2UgVXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlclByb3BzIHtcblx0dGltZUZvcm1hdD86IFRpbWVGb3JtYXRcblx0bWluVGltZT86IHN0cmluZ1xuXHRtYXhUaW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VBdXRvY29tcGxldGVUaW1lcGlja2VyKHtcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0bWluVGltZSA9ICcwMDowMCcsXG5cdG1heFRpbWUgPSAnMjM6NDUnLFxufTogVXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlclByb3BzKSB7XG5cdC8vIEdlbmVyYXRlIHRpbWUgb3B0aW9ucyAoMTUtbWludXRlIGludGVydmFscykgd2l0aGluIG1pbi9tYXggcmFuZ2Vcblx0Y29uc3QgdGltZU9wdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRjb25zdCB0aW1lczogc3RyaW5nW10gPSBbXVxuXHRcdGNvbnN0IFttaW5Ib3VyLCBtaW5NaW51dGVdID0gbWluVGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cdFx0Y29uc3QgW21heEhvdXIsIG1heE1pbnV0ZV0gPSBtYXhUaW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblxuXHRcdGNvbnN0IG1pblRvdGFsTWludXRlcyA9IG1pbkhvdXIgKiA2MCArIG1pbk1pbnV0ZVxuXHRcdGNvbnN0IG1heFRvdGFsTWludXRlcyA9IG1heEhvdXIgKiA2MCArIG1heE1pbnV0ZVxuXG5cdFx0Zm9yIChcblx0XHRcdGxldCB0b3RhbE1pbnV0ZXMgPSBtaW5Ub3RhbE1pbnV0ZXM7XG5cdFx0XHR0b3RhbE1pbnV0ZXMgPD0gbWF4VG90YWxNaW51dGVzO1xuXHRcdFx0dG90YWxNaW51dGVzICs9IDE1XG5cdFx0KSB7XG5cdFx0XHRjb25zdCBob3VycyA9IE1hdGguZmxvb3IodG90YWxNaW51dGVzIC8gNjApXG5cdFx0XHRjb25zdCBtaW51dGVzID0gdG90YWxNaW51dGVzICUgNjBcblxuXHRcdFx0Y29uc3QgdGltZVN0cmluZyA9IGAke2hvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06JHttaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gXG5cdFx0XHR0aW1lcy5wdXNoKHRpbWVTdHJpbmcpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRpbWVzXG5cdH0sIFttaW5UaW1lLCBtYXhUaW1lXSlcblxuXHRjb25zdCBmb3JtYXRUaW1lID0gKHRpbWU6IHN0cmluZykgPT4ge1xuXHRcdGNvbnN0IFtob3VycywgbWludXRlc10gPSB0aW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblx0XHRjb25zdCBwZXJpb2QgPSBob3VycyA+PSAxMiA/ICdQTScgOiAnQU0nXG5cdFx0Y29uc3QgZGlzcGxheUhvdXJzID0gaG91cnMgPT09IDAgPyAxMiA6IGhvdXJzID4gMTIgPyBob3VycyAtIDEyIDogaG91cnNcblxuXHRcdGlmICh0aW1lRm9ybWF0ID09PSAnMjQtaG91cicpIHtcblx0XHRcdHJldHVybiBgJHtob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7bWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YFxuXHRcdH1cblxuXHRcdHJldHVybiBgJHtkaXNwbGF5SG91cnN9OiR7bWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9ICR7cGVyaW9kfWBcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0dGltZU9wdGlvbnMsXG5cdFx0Zm9ybWF0VGltZSxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFdlZWtkYXkgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgeyBDYXJkLCBDYXJkQ29udGVudCwgQ2FyZEhlYWRlciwgQ2FyZFRpdGxlIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NhcmQnXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9jaGVja2JveCdcbmltcG9ydCB7IERhdGVQaWNrZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGF0ZS1waWNrZXInXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9pbnB1dCdcbmltcG9ydCB7IExhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2xhYmVsJ1xuaW1wb3J0IHtcblx0U2VsZWN0LFxuXHRTZWxlY3RDb250ZW50LFxuXHRTZWxlY3RJdGVtLFxuXHRTZWxlY3RUcmlnZ2VyLFxuXHRTZWxlY3RWYWx1ZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3NlbGVjdCdcbmltcG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5jb25zdCBGUkVRX01BUCA9IHtcblx0REFJTFk6IFJSdWxlLkRBSUxZLFxuXHRXRUVLTFk6IFJSdWxlLldFRUtMWSxcblx0TU9OVEhMWTogUlJ1bGUuTU9OVEhMWSxcblx0WUVBUkxZOiBSUnVsZS5ZRUFSTFksXG59IGFzIGNvbnN0XG5jb25zdCBGUkVRX1RPX1NUUiA9IE9iamVjdC5mcm9tRW50cmllcyhcblx0T2JqZWN0LmVudHJpZXMoRlJFUV9NQVApLm1hcCgoW2ssIHZdKSA9PiBbdiwga10pXG4pIGFzIFJlY29yZDxudW1iZXIsIHN0cmluZz5cbmNvbnN0IFdFRUtEQVlTID0gW1xuXHRSUnVsZS5TVSxcblx0UlJ1bGUuTU8sXG5cdFJSdWxlLlRVLFxuXHRSUnVsZS5XRSxcblx0UlJ1bGUuVEgsXG5cdFJSdWxlLkZSLFxuXHRSUnVsZS5TQSxcbl1cbmNvbnN0IERBWV9LRVlTID0gWydzdW4nLCAnbW9uJywgJ3R1ZScsICd3ZWQnLCAndGh1JywgJ2ZyaScsICdzYXQnXVxuY29uc3QgcGFyc2VOdW0gPSAodjogc3RyaW5nKSA9PiBNYXRoLm1heCgxLCBOdW1iZXIucGFyc2VJbnQodiwgMTApIHx8IDEpXG5cbmNvbnN0IGdldERlc2NyaXB0aW9uID0gKFxuXHRvcHRzOiBSUnVsZU9wdGlvbnMgfCBudWxsLFxuXHR0OiAoazogc3RyaW5nKSA9PiBzdHJpbmdcbikgPT4ge1xuXHRpZiAoIW9wdHMpIHtcblx0XHRyZXR1cm4gdCgnY3VzdG9tUmVjdXJyZW5jZScpXG5cdH1cblx0dHJ5IHtcblx0XHRjb25zdCB0ZXh0ID0gbmV3IFJSdWxlKG9wdHMpLnRvVGV4dCgpXG5cdFx0cmV0dXJuIHRleHQgJiYgIXRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZXJyb3InKVxuXHRcdFx0PyB0ZXh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGV4dC5zbGljZSgxKVxuXHRcdFx0OiB0KCdjdXN0b21SZWN1cnJlbmNlJylcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuXHR9XG59XG5cbmludGVyZmFjZSBQcm9wcyB7XG5cdHZhbHVlPzogUlJ1bGVPcHRpb25zIHwgbnVsbFxuXHRvbkNoYW5nZTogKHY6IFJSdWxlT3B0aW9ucyB8IG51bGwpID0+IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IFJlY3VycmVuY2VFZGl0b3I6IFJlYWN0LkZDPFByb3BzPiA9ICh7IHZhbHVlLCBvbkNoYW5nZSB9KSA9PiB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGN0eCkgPT4gKHsgdDogY3R4LnQgfSkpXG5cdGNvbnN0IFtzaG93LCBzZXRTaG93XSA9IHVzZVN0YXRlKCEhdmFsdWUpXG5cdGNvbnN0IFtvcHRzLCBzZXRPcHRzXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KCgpID0+IHZhbHVlIHx8IG51bGwpXG5cblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IERBWV9LRVlTLm1hcCgoaywgaSkgPT4gKHsgdmFsdWU6IFdFRUtEQVlTW2ldLCBsYWJlbDogdChrKSB9KSksXG5cdFx0W3RdXG5cdClcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdHNldFNob3coISF2YWx1ZSlcblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHNldE9wdHModmFsdWUpXG5cdFx0fVxuXHR9LCBbdmFsdWVdKVxuXG5cdGNvbnN0IHVwZGF0ZSA9ICh1OiBQYXJ0aWFsPFJSdWxlT3B0aW9ucz4pID0+IHtcblx0XHRpZiAoIW9wdHMpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRjb25zdCBuZXh0ID0geyAuLi5vcHRzLCAuLi51IH1cblx0XHRzZXRPcHRzKG5leHQpXG5cdFx0b25DaGFuZ2Uoc2hvdyA/IG5leHQgOiBudWxsKVxuXHR9XG5cblx0Y29uc3QgdG9nZ2xlID0gKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcblx0XHRzZXRTaG93KGNoZWNrZWQpXG5cdFx0aWYgKCFjaGVja2VkKSB7XG5cdFx0XHRvbkNoYW5nZShudWxsKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGlmIChvcHRzKSB7XG5cdFx0XHRvbkNoYW5nZShvcHRzKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGNvbnN0IGRlZiA9IHsgZnJlcTogUlJ1bGUuREFJTFksIGludGVydmFsOiAxIH0gYXMgUlJ1bGVPcHRpb25zXG5cdFx0c2V0T3B0cyhkZWYpXG5cdFx0b25DaGFuZ2UoZGVmKVxuXHR9XG5cblx0Y29uc3QgdG9nZ2xlRGF5ID0gKGk6IG51bWJlcikgPT4ge1xuXHRcdGNvbnN0IGN1cnIgPSAob3B0cz8uYnl3ZWVrZGF5IGFzIFdlZWtkYXlbXSkgfHwgW11cblx0XHRjb25zdCBkYXkgPSBXRUVLREFZU1tpXVxuXHRcdGNvbnN0IG5leHQgPSBjdXJyLmluY2x1ZGVzKGRheSlcblx0XHRcdD8gY3Vyci5maWx0ZXIoKGQpID0+IGQgIT09IGRheSlcblx0XHRcdDogWy4uLmN1cnIsIGRheV1cblx0XHR1cGRhdGUoeyBieXdlZWtkYXk6IG5leHQubGVuZ3RoID8gbmV4dCA6IHVuZGVmaW5lZCB9KVxuXHR9XG5cblx0Y29uc3Qgc2V0RW5kVHlwZSA9ICh0eXBlOiAnbmV2ZXInIHwgJ2NvdW50JyB8ICd1bnRpbCcpID0+IHtcblx0XHRjb25zdCB1OiBQYXJ0aWFsPFJSdWxlT3B0aW9ucz4gPSB7IGNvdW50OiB1bmRlZmluZWQsIHVudGlsOiB1bmRlZmluZWQgfVxuXHRcdGlmICh0eXBlID09PSAnY291bnQnKSB7XG5cdFx0XHR1LmNvdW50ID0gb3B0cz8uY291bnQgfHwgMVxuXHRcdH1cblx0XHRpZiAodHlwZSA9PT0gJ3VudGlsJykge1xuXHRcdFx0dS51bnRpbCA9IG9wdHM/LnVudGlsIHx8IGRheWpzKCkuYWRkKDEsICdtb250aCcpLmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXHRcdH1cblx0XHR1cGRhdGUodSlcblx0fVxuXG5cdGNvbnN0IGVuZFR5cGUgPSBvcHRzPy51bnRpbCA/ICd1bnRpbCcgOiBvcHRzPy5jb3VudCA/ICdjb3VudCcgOiAnbmV2ZXInXG5cdGNvbnN0IGZyZXEgPSBGUkVRX1RPX1NUUltvcHRzPy5mcmVxID8/IFJSdWxlLkRBSUxZXSB8fCAnREFJTFknXG5cdGNvbnN0IGJ5d2Vla2RheSA9IEFycmF5LmlzQXJyYXkob3B0cz8uYnl3ZWVrZGF5KVxuXHRcdD8gb3B0cy5ieXdlZWtkYXlcblx0XHQ6IG9wdHM/LmJ5d2Vla2RheVxuXHRcdFx0PyBbb3B0cy5ieXdlZWtkYXldXG5cdFx0XHQ6IFtdXG5cblx0cmV0dXJuIChcblx0XHQ8Q2FyZCBkYXRhLXRlc3RpZD1cInJlY3VycmVuY2UtZWRpdG9yXCI+XG5cdFx0XHQ8Q2FyZEhlYWRlciBjbGFzc05hbWU9XCJwYi0zXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRpZD1cInJlY3VycmluZ1wiXG5cdFx0XHRcdFx0XHRjaGVja2VkPXtzaG93fVxuXHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXt0b2dnbGV9XG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cInRvZ2dsZS1yZWN1cnJlbmNlXCJcblx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDxDYXJkVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXBlYXQnKX08L0NhcmRUaXRsZT5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdHtzaG93ICYmIHZhbHVlICYmIChcblx0XHRcdFx0XHQ8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0e2dldERlc2NyaXB0aW9uKHZhbHVlLCB0KX1cblx0XHRcdFx0XHQ8L3A+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L0NhcmRIZWFkZXI+XG5cblx0XHRcdHtzaG93ICYmIChcblx0XHRcdFx0PENhcmRDb250ZW50IGNsYXNzTmFtZT1cInB0LTBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNFwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC00XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIGh0bWxGb3I9XCJmcmVxdWVuY3lcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7dCgncmVwZWF0cycpfVxuXHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PFNlbGVjdFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2ZyZXF9XG5cdFx0XHRcdFx0XHRcdFx0XHRvblZhbHVlQ2hhbmdlPXsoZikgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlKHsgZnJlcTogRlJFUV9NQVBbZiBhcyBrZXlvZiB0eXBlb2YgRlJFUV9NQVBdIH0pXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PFNlbGVjdFRyaWdnZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJmcmVxdWVuY3lcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLThcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImZyZXF1ZW5jeS1zZWxlY3RcIlxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0VmFsdWUgLz5cblx0XHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0VHJpZ2dlcj5cblx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RDb250ZW50PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7T2JqZWN0LmtleXMoRlJFUV9NQVApLm1hcCgoZikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RJdGVtIGtleT17Zn0gdmFsdWU9e2Z9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoZi50b0xvd2VyQ2FzZSgpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdEl0ZW0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9TZWxlY3RDb250ZW50PlxuXHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgaHRtbEZvcj1cImludGVydmFsXCIgY2xhc3NOYW1lPVwidGV4dC14c1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e3QoJ2V2ZXJ5Jyl9XG5cdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW50ZXJ2YWxcIlxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cIm51bWJlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRtaW49XCIxXCJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtvcHRzPy5pbnRlcnZhbCB8fCAxfVxuXHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhlKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGUoeyBpbnRlcnZhbDogcGFyc2VOdW0oZS50YXJnZXQudmFsdWUpIH0pXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLThcIlxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdHtvcHRzPy5mcmVxID09PSBSUnVsZS5XRUVLTFkgJiYgKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ3JlcGVhdE9uJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0xIG10LTFcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHt3ZWVrRGF5cy5tYXAoKGQsIGkpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBrZXk9e2QubGFiZWx9IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9e2BkYXktJHtpfWB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjaGVja2VkPXtieXdlZWtkYXkuaW5jbHVkZXMoZC52YWx1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eygpID0+IHRvZ2dsZURheShpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aHRtbEZvcj17YGRheS0ke2l9YH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInRleHQteHMgY3Vyc29yLXBvaW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtkLmxhYmVsfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KX1cblxuXHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIj57dCgnZW5kcycpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yIG10LTFcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwibmV2ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjaGVja2VkPXtlbmRUeXBlID09PSAnbmV2ZXInfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eygpID0+IHNldEVuZFR5cGUoJ25ldmVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGh0bWxGb3I9XCJuZXZlclwiIGNsYXNzTmFtZT1cInRleHQteHNcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ25ldmVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJhZnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2VuZFR5cGUgPT09ICdjb3VudCd9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gc2V0RW5kVHlwZSgnY291bnQnKX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgaHRtbEZvcj1cImFmdGVyXCIgY2xhc3NOYW1lPVwidGV4dC14c1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dCgnYWZ0ZXInKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHR7ZW5kVHlwZSA9PT0gJ2NvdW50JyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJudW1iZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1pbj1cIjFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtvcHRzPy5jb3VudCB8fCAxfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZSkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7IGNvdW50OiBwYXJzZU51bShlLnRhcmdldC52YWx1ZSkgfSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC02IHctMTYgdGV4dC14c1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJjb3VudC1pbnB1dFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdvY2N1cnJlbmNlcycpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwib25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjaGVja2VkPXtlbmRUeXBlID09PSAndW50aWwnfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eygpID0+IHNldEVuZFR5cGUoJ3VudGlsJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGh0bWxGb3I9XCJvblwiIGNsYXNzTmFtZT1cInRleHQteHNcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ29uJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0e2VuZFR5cGUgPT09ICd1bnRpbCcgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8RGF0ZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGU9e29wdHM/LnVudGlsfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZCkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVudGlsOiBkID8gZGF5anMoZCkuZW5kT2YoJ2RheScpLnRvRGF0ZSgpIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC02XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvQ2FyZENvbnRlbnQ+XG5cdFx0XHQpfVxuXHRcdDwvQ2FyZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDYXJkKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkXCJcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCd0ZXh0LWNhcmQtZm9yZWdyb3VuZCBmbGV4IGZsZXgtY29sIGdhcC02IHJvdW5kZWQteGwgYm9yZGVyIHNoYWRvdy1zbScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRIZWFkZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtaGVhZGVyXCJcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdAY29udGFpbmVyL2NhcmQtaGVhZGVyIGdyaWQgYXV0by1yb3dzLW1pbiBncmlkLXJvd3MtW2F1dG9fYXV0b10gaXRlbXMtc3RhcnQgZ2FwLTEuNSBwLTQgcGItMCBoYXMtZGF0YS1bc2xvdD1jYXJkLWFjdGlvbl06Z3JpZC1jb2xzLVsxZnJfYXV0b10nLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkVGl0bGUoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtdGl0bGVcIlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignbGVhZGluZy1ub25lIGZvbnQtc2VtaWJvbGQnLCBjbGFzc05hbWUpfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZERlc2NyaXB0aW9uKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWRlc2NyaXB0aW9uXCJcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXNtJywgY2xhc3NOYW1lKX1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRBY3Rpb24oeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtYWN0aW9uXCJcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdjb2wtc3RhcnQtMiByb3ctc3Bhbi0yIHJvdy1zdGFydC0xIHNlbGYtc3RhcnQganVzdGlmeS1zZWxmLWVuZCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRDb250ZW50KHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWNvbnRlbnRcIlxuXHRcdFx0Y2xhc3NOYW1lPXtjbigncC00IHB0LTAnLCBjbGFzc05hbWUpfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZEZvb3Rlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC1mb290ZXJcIlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBpdGVtcy1jZW50ZXIgcHgtNiBbLmJvcmRlci10XTpwdC02JywgY2xhc3NOYW1lKX1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7XG5cdENhcmQsXG5cdENhcmRIZWFkZXIsXG5cdENhcmRGb290ZXIsXG5cdENhcmRUaXRsZSxcblx0Q2FyZEFjdGlvbixcblx0Q2FyZERlc2NyaXB0aW9uLFxuXHRDYXJkQ29udGVudCxcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgU2VsZWN0UHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zZWxlY3QnXG5pbXBvcnQgeyBDaGVja0ljb24sIENoZXZyb25Eb3duSWNvbiwgQ2hldnJvblVwSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFNlbGVjdCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlJvb3Q+KSB7XG5cdHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwic2VsZWN0XCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RHcm91cCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkdyb3VwPikge1xuXHRyZXR1cm4gPFNlbGVjdFByaW1pdGl2ZS5Hcm91cCBkYXRhLXNsb3Q9XCJzZWxlY3QtZ3JvdXBcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdFZhbHVlKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuVmFsdWU+KSB7XG5cdHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLlZhbHVlIGRhdGEtc2xvdD1cInNlbGVjdC12YWx1ZVwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0VHJpZ2dlcih7XG5cdGNsYXNzTmFtZSxcblx0c2l6ZSA9ICdkZWZhdWx0Jyxcblx0Y2hpbGRyZW4sXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlRyaWdnZXI+ICYge1xuXHRzaXplPzogJ3NtJyB8ICdkZWZhdWx0J1xufSkge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuVHJpZ2dlclxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXRyaWdnZXJcIlxuXHRcdFx0ZGF0YS1zaXplPXtzaXplfVxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XCJib3JkZXItaW5wdXQgZGF0YS1bcGxhY2Vob2xkZXJdOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBbJl9zdmc6bm90KFtjbGFzcyo9J3RleHQtJ10pXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgZGFyazpiZy1pbnB1dC8zMCBkYXJrOmhvdmVyOmJnLWlucHV0LzUwIGZsZXggdy1maXQgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiByb3VuZGVkLW1kIGJvcmRlciBiZy10cmFuc3BhcmVudCBweC0zIHB5LTIgdGV4dC1zbSB3aGl0ZXNwYWNlLW5vd3JhcCBzaGFkb3cteHMgdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCBkYXRhLVtzaXplPWRlZmF1bHRdOmgtOSBkYXRhLVtzaXplPXNtXTpoLTggKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06bGluZS1jbGFtcC0xICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmZsZXggKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06aXRlbXMtY2VudGVyICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmdhcC0yIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNFwiLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5JY29uIGFzQ2hpbGQ+XG5cdFx0XHRcdDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPVwic2l6ZS00IG9wYWNpdHktNTBcIiAvPlxuXHRcdFx0PC9TZWxlY3RQcmltaXRpdmUuSWNvbj5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5UcmlnZ2VyPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdENvbnRlbnQoe1xuXHRjbGFzc05hbWUsXG5cdGNoaWxkcmVuLFxuXHRwb3NpdGlvbiA9ICdwb3BwZXInLFxuXHRhbGlnbiA9ICdjZW50ZXInLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5Db250ZW50Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuUG9ydGFsPlxuXHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5Db250ZW50XG5cdFx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1jb250ZW50XCJcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnYmctcG9wb3ZlciB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIgcmVsYXRpdmUgei01MCBtYXgtaC0oLS1yYWRpeC1zZWxlY3QtY29udGVudC1hdmFpbGFibGUtaGVpZ2h0KSBtaW4tdy1bOHJlbV0gb3JpZ2luLSgtLXJhZGl4LXNlbGVjdC1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pIG92ZXJmbG93LXgtaGlkZGVuIG92ZXJmbG93LXktYXV0byByb3VuZGVkLW1kIGJvcmRlciBzaGFkb3ctbWQnLFxuXHRcdFx0XHRcdHBvc2l0aW9uID09PSAncG9wcGVyJyAmJlxuXHRcdFx0XHRcdFx0J2RhdGEtW3NpZGU9Ym90dG9tXTp0cmFuc2xhdGUteS0xIGRhdGEtW3NpZGU9bGVmdF06LXRyYW5zbGF0ZS14LTEgZGF0YS1bc2lkZT1yaWdodF06dHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXRvcF06LXRyYW5zbGF0ZS15LTEnLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRwb3NpdGlvbj17cG9zaXRpb259XG5cdFx0XHRcdGFsaWduPXthbGlnbn1cblx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0PlxuXHRcdFx0XHQ8U2VsZWN0U2Nyb2xsVXBCdXR0b24gLz5cblx0XHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5WaWV3cG9ydFxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQncC0xJyxcblx0XHRcdFx0XHRcdHBvc2l0aW9uID09PSAncG9wcGVyJyAmJlxuXHRcdFx0XHRcdFx0XHQnaC1bdmFyKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItaGVpZ2h0KV0gdy1mdWxsIG1pbi13LVt2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci13aWR0aCldIHNjcm9sbC1teS0xJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdDwvU2VsZWN0UHJpbWl0aXZlLlZpZXdwb3J0PlxuXHRcdFx0XHQ8U2VsZWN0U2Nyb2xsRG93bkJ1dHRvbiAvPlxuXHRcdFx0PC9TZWxlY3RQcmltaXRpdmUuQ29udGVudD5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5Qb3J0YWw+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0TGFiZWwoe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkxhYmVsPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuTGFiZWxcblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1sYWJlbFwiXG5cdFx0XHRjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgcHgtMiBweS0xLjUgdGV4dC14cycsIGNsYXNzTmFtZSl9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RJdGVtKHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuSXRlbT4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLkl0ZW1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1pdGVtXCJcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFwiZm9jdXM6YmctYWNjZW50IGZvY3VzOnRleHQtYWNjZW50LWZvcmVncm91bmQgWyZfc3ZnOm5vdChbY2xhc3MqPSd0ZXh0LSddKV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHJlbGF0aXZlIGZsZXggdy1mdWxsIGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLXNtIHB5LTEuNSBwci04IHBsLTIgdGV4dC1zbSBvdXRsaW5lLWhpZGRlbiBzZWxlY3Qtbm9uZSBkYXRhLVtkaXNhYmxlZF06cG9pbnRlci1ldmVudHMtbm9uZSBkYXRhLVtkaXNhYmxlZF06b3BhY2l0eS01MCBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTQgKjpbc3Bhbl06bGFzdDpmbGV4ICo6W3NwYW5dOmxhc3Q6aXRlbXMtY2VudGVyICo6W3NwYW5dOmxhc3Q6Z2FwLTJcIixcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTIgZmxleCBzaXplLTMuNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cblx0XHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5JdGVtSW5kaWNhdG9yPlxuXHRcdFx0XHRcdDxDaGVja0ljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cblx0XHRcdFx0PC9TZWxlY3RQcmltaXRpdmUuSXRlbUluZGljYXRvcj5cblx0XHRcdDwvc3Bhbj5cblx0XHRcdDxTZWxlY3RQcmltaXRpdmUuSXRlbVRleHQ+e2NoaWxkcmVufTwvU2VsZWN0UHJpbWl0aXZlLkl0ZW1UZXh0PlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLkl0ZW0+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0U2VwYXJhdG9yKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TZXBhcmF0b3I+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5TZXBhcmF0b3Jcblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1zZXBhcmF0b3JcIlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignYmctYm9yZGVyIHBvaW50ZXItZXZlbnRzLW5vbmUgLW14LTEgbXktMSBoLXB4JywgY2xhc3NOYW1lKX1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNjcm9sbFVwQnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvbj4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uXG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLXVwLWJ1dHRvblwiXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8Q2hldnJvblVwSWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNjcm9sbERvd25CdXR0b24oe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlNjcm9sbERvd25CdXR0b24+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uXG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLWRvd24tYnV0dG9uXCJcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0xJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uPlxuXHQpXG59XG5cbmV4cG9ydCB7XG5cdFNlbGVjdCxcblx0U2VsZWN0Q29udGVudCxcblx0U2VsZWN0R3JvdXAsXG5cdFNlbGVjdEl0ZW0sXG5cdFNlbGVjdExhYmVsLFxuXHRTZWxlY3RTY3JvbGxEb3duQnV0dG9uLFxuXHRTZWxlY3RTY3JvbGxVcEJ1dHRvbixcblx0U2VsZWN0U2VwYXJhdG9yLFxuXHRTZWxlY3RUcmlnZ2VyLFxuXHRTZWxlY3RWYWx1ZSxcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMob25Db21wbGV0ZT86ICgpID0+IHZvaWQpIHtcblx0Y29uc3QgeyB1cGRhdGVSZWN1cnJpbmdFdmVudCwgZGVsZXRlUmVjdXJyaW5nRXZlbnQgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudDogY29udGV4dC51cGRhdGVSZWN1cnJpbmdFdmVudCxcblx0XHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50OiBjb250ZXh0LmRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdH0pKVxuXG5cdGNvbnN0IFtkaWFsb2dTdGF0ZSwgc2V0RGlhbG9nU3RhdGVdID0gdXNlU3RhdGU8e1xuXHRcdGlzT3BlbjogYm9vbGVhblxuXHRcdG9wZXJhdGlvblR5cGU6ICdlZGl0JyB8ICdkZWxldGUnXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdFx0dXBkYXRlcz86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cblx0XHRvbkNvbmZpcm0/OiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHZvaWRcblx0fT4oe1xuXHRcdGlzT3BlbjogZmFsc2UsXG5cdFx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnLFxuXHRcdGV2ZW50OiBudWxsLFxuXHR9KVxuXG5cdGNvbnN0IG9wZW5FZGl0RGlhbG9nID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50LCB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG5cdFx0XHRzZXREaWFsb2dTdGF0ZSh7XG5cdFx0XHRcdGlzT3BlbjogdHJ1ZSxcblx0XHRcdFx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnLFxuXHRcdFx0XHRldmVudCxcblx0XHRcdFx0dXBkYXRlcyxcblx0XHRcdFx0b25Db25maXJtOiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcblx0XHRcdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudChldmVudCwgdXBkYXRlcywge1xuXHRcdFx0XHRcdFx0c2NvcGUsXG5cdFx0XHRcdFx0XHRldmVudERhdGU6IGV2ZW50LnN0YXJ0LFxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0sXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W3VwZGF0ZVJlY3VycmluZ0V2ZW50XVxuXHQpXG5cblx0Y29uc3Qgb3BlbkRlbGV0ZURpYWxvZyA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0c2V0RGlhbG9nU3RhdGUoe1xuXHRcdFx0XHRpc09wZW46IHRydWUsXG5cdFx0XHRcdG9wZXJhdGlvblR5cGU6ICdkZWxldGUnLFxuXHRcdFx0XHRldmVudCxcblx0XHRcdFx0b25Db25maXJtOiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcblx0XHRcdFx0XHRkZWxldGVSZWN1cnJpbmdFdmVudChldmVudCwge1xuXHRcdFx0XHRcdFx0c2NvcGUsXG5cdFx0XHRcdFx0XHRldmVudERhdGU6IGV2ZW50LnN0YXJ0LFxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0sXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W2RlbGV0ZVJlY3VycmluZ0V2ZW50XVxuXHQpXG5cblx0Y29uc3QgY2xvc2VEaWFsb2cgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c2V0RGlhbG9nU3RhdGUoe1xuXHRcdFx0aXNPcGVuOiBmYWxzZSxcblx0XHRcdG9wZXJhdGlvblR5cGU6ICdlZGl0Jyxcblx0XHRcdGV2ZW50OiBudWxsLFxuXHRcdH0pXG5cdH0sIFtdKVxuXG5cdGNvbnN0IGhhbmRsZUNvbmZpcm0gPSB1c2VDYWxsYmFjayhcblx0XHQoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcblx0XHRcdGlmIChkaWFsb2dTdGF0ZS5vbkNvbmZpcm0pIHtcblx0XHRcdFx0ZGlhbG9nU3RhdGUub25Db25maXJtKHNjb3BlKVxuXHRcdFx0fVxuXHRcdFx0Y2xvc2VEaWFsb2coKVxuXHRcdFx0Ly8gQ2FsbCBvbkNvbXBsZXRlIHRvIGNsb3NlIHRoZSBwYXJlbnQgZm9ybVxuXHRcdFx0b25Db21wbGV0ZT8uKClcblx0XHR9LFxuXHRcdFtkaWFsb2dTdGF0ZSwgY2xvc2VEaWFsb2csIG9uQ29tcGxldGVdXG5cdClcblxuXHRyZXR1cm4ge1xuXHRcdGRpYWxvZ1N0YXRlLFxuXHRcdG9wZW5FZGl0RGlhbG9nLFxuXHRcdG9wZW5EZWxldGVEaWFsb2csXG5cdFx0Y2xvc2VEaWFsb2csXG5cdFx0aGFuZGxlQ29uZmlybSxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgeyBDYWxlbmRhciBhcyBDYWxlbmRhckljb24sIERvd25sb2FkLCBNZW51LCBQbHVzIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7XG5cdFBvcG92ZXIsXG5cdFBvcG92ZXJDb250ZW50LFxuXHRQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3BvcG92ZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliJ1xuaW1wb3J0IHsgZG93bmxvYWRJQ2FsZW5kYXIgfSBmcm9tICdAL2xpYi91dGlscy9leHBvcnQtaWNhbCdcbmltcG9ydCBUaXRsZUNvbnRlbnQgZnJvbSAnLi90aXRsZS1jb250ZW50J1xuaW1wb3J0IFZpZXdDb250cm9scyBmcm9tICcuL3ZpZXctY29udHJvbHMnXG5cbmludGVyZmFjZSBIZWFkZXJQcm9wcyB7XG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBIZWFkZXI6IFJlYWN0LkZDPEhlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSA9ICcnIH0pID0+IHtcblx0Y29uc3Qge1xuXHRcdHZpZXcsXG5cdFx0c2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2QsXG5cdFx0dG9kYXksXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRcdHJhd0V2ZW50cyxcblx0XHR0LFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGN0eCkgPT4gKHtcblx0XHR2aWV3OiBjdHgudmlldyxcblx0XHRzZXRWaWV3OiBjdHguc2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kOiBjdHgubmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kOiBjdHgucHJldlBlcmlvZCxcblx0XHR0b2RheTogY3R4LnRvZGF5LFxuXHRcdG9wZW5FdmVudEZvcm06IGN0eC5vcGVuRXZlbnRGb3JtLFxuXHRcdGhlYWRlckNvbXBvbmVudDogY3R4LmhlYWRlckNvbXBvbmVudCxcblx0XHRoZWFkZXJDbGFzc05hbWU6IGN0eC5oZWFkZXJDbGFzc05hbWUsXG5cdFx0cmF3RXZlbnRzOiBjdHgucmF3RXZlbnRzLFxuXHRcdHQ6IGN0eC50LFxuXHR9KSlcblxuXHRjb25zdCBbbW9iaWxlTWVudU9wZW4sIHNldE1vYmlsZU1lbnVPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG5cdGNvbnN0IGNsb3NlTW9iaWxlTWVudSA9ICgpID0+IHNldE1vYmlsZU1lbnVPcGVuKGZhbHNlKVxuXG5cdGNvbnN0IGhhbmRsZUV4cG9ydCA9ICgpID0+IHtcblx0XHRjb25zdCBmaWxlbmFtZSA9IGBpbGFteS1jYWxlbmRhci0ke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdfS5pY3NgXG5cdFx0ZG93bmxvYWRJQ2FsZW5kYXIocmF3RXZlbnRzLCBmaWxlbmFtZSwgJ2lsYW15IENhbGVuZGFyJylcblx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHR9XG5cblx0Y29uc3QgTmV3RXZlbnRCdXR0b24gPSAoKSA9PiAoXG5cdFx0PEJ1dHRvblxuXHRcdFx0b25DbGljaz17KCkgPT4gb3BlbkV2ZW50Rm9ybSgpfVxuXHRcdFx0dmFyaWFudD1cImRlZmF1bHRcIlxuXHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCJcblx0XHQ+XG5cdFx0XHQ8UGx1cyBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsOmlubGluZVwiPnt0KCduZXcnKX08L3NwYW4+XG5cdFx0PC9CdXR0b24+XG5cdClcblxuXHRjb25zdCBFeHBvcnRCdXR0b24gPSAoeyBmdWxsV2lkdGggPSBmYWxzZSB9OiB7IGZ1bGxXaWR0aD86IGJvb2xlYW4gfSkgPT4gKFxuXHRcdDxCdXR0b25cblx0XHRcdG9uQ2xpY2s9e2hhbmRsZUV4cG9ydH1cblx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHRjbGFzc05hbWU9e2NuKCdmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMScsIGZ1bGxXaWR0aCAmJiAndy1mdWxsIGdhcC0yJyl9XG5cdFx0PlxuXHRcdFx0PERvd25sb2FkIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0e2Z1bGxXaWR0aCA/IChcblx0XHRcdFx0YCR7dCgnZXhwb3J0Jyl9IENhbGVuZGFyICguaWNzKWBcblx0XHRcdCkgOiAoXG5cdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsL2Jhc2UtaGVhZGVyOmlubGluZVwiPnt0KCdleHBvcnQnKX08L3NwYW4+XG5cdFx0XHQpfVxuXHRcdDwvQnV0dG9uPlxuXHQpXG5cblx0aWYgKGhlYWRlckNvbXBvbmVudCkge1xuXHRcdHJldHVybiBoZWFkZXJDb21wb25lbnRcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiQGNvbnRhaW5lci9iYXNlLWhlYWRlciB3LWZ1bGxcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnZmxleCBqdXN0aWZ5LWNlbnRlciBAMnhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktYmV0d2VlbiBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0yIGJvcmRlci1iJyxcblx0XHRcdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRcdFx0aGVhZGVyQ2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1zdGFydFwiPlxuXHRcdFx0XHRcdDxDYWxlbmRhckljb24gY2xhc3NOYW1lPVwiaC01IHctNVwiIC8+XG5cdFx0XHRcdFx0PFRpdGxlQ29udGVudCAvPlxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGp1c3RpZnktc3RhcnQgQHhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktY2VudGVyIGdhcC0xIEA0eGwvYmFzZS1oZWFkZXI6anVzdGlmeS1lbmQgb3ZlcmZsb3cteC1hdXRvXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gQG1kL2Jhc2UtaGVhZGVyOmZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgZ2FwLTFcIj5cblx0XHRcdFx0XHRcdDxWaWV3Q29udHJvbHNcblx0XHRcdFx0XHRcdFx0Y3VycmVudFZpZXc9e3ZpZXd9XG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtzZXRWaWV3fVxuXHRcdFx0XHRcdFx0XHRvblRvZGF5PXt0b2RheX1cblx0XHRcdFx0XHRcdFx0b25OZXh0PXtuZXh0UGVyaW9kfVxuXHRcdFx0XHRcdFx0XHRvblByZXZpb3VzPXtwcmV2UGVyaW9kfVxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZGVmYXVsdFwiXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImp1c3RpZnktZW5kXCJcblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8TmV3RXZlbnRCdXR0b24gLz5cblx0XHRcdFx0XHRcdDxFeHBvcnRCdXR0b24gLz5cblx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTEgQG1kL2Jhc2UtaGVhZGVyOmhpZGRlblwiPlxuXHRcdFx0XHRcdFx0PE5ld0V2ZW50QnV0dG9uIC8+XG5cdFx0XHRcdFx0XHQ8UG9wb3ZlciBvcGVuPXttb2JpbGVNZW51T3Blbn0gb25PcGVuQ2hhbmdlPXtzZXRNb2JpbGVNZW51T3Blbn0+XG5cdFx0XHRcdFx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHRcdFx0XHRcdDxCdXR0b24gdmFyaWFudD1cIm91dGxpbmVcIiBzaXplPVwic21cIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxNZW51IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0XHRcdFx0XHQ8UG9wb3ZlckNvbnRlbnQgYWxpZ249XCJlbmRcIiBjbGFzc05hbWU9XCJ3LVsyNDBweF0gcC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxWaWV3Q29udHJvbHNcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudFZpZXc9e3ZpZXd9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsodikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNldFZpZXcodilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvblRvZGF5PXsoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG9kYXkoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsb3NlTW9iaWxlTWVudSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uTmV4dD17KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5leHRQZXJpb2QoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsb3NlTW9iaWxlTWVudSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uUHJldmlvdXM9eygpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmV2UGVyaW9kKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZ3JpZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJwdC0yIGJvcmRlci10XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxFeHBvcnRCdXR0b24gZnVsbFdpZHRoIC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHRcdFx0XHRcdDwvUG9wb3Zlcj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgZGVmYXVsdCBIZWFkZXJcbiIsCiAgICAiaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuY29uc3QgQ1JMRiA9ICdcXHJcXG4nXG5cbmNvbnN0IFVUQ19WVElNRVpPTkUgPSBbXG5cdCdCRUdJTjpWVElNRVpPTkUnLFxuXHQnVFpJRDpVVEMnLFxuXHQnQkVHSU46U1RBTkRBUkQnLFxuXHQnRFRTVEFSVDoxOTcwMDEwMVQwMDAwMDAnLFxuXHQnVFpOQU1FOlVUQycsXG5cdCdUWk9GRlNFVEZST006KzAwMDAnLFxuXHQnVFpPRkZTRVRUTzorMDAwMCcsXG5cdCdFTkQ6U1RBTkRBUkQnLFxuXHQnRU5EOlZUSU1FWk9ORScsXG5dLmpvaW4oQ1JMRilcblxuY29uc3QgZXNjYXBlVGV4dCA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gdGV4dFxuXHRcdC5yZXBsYWNlQWxsKCdcXFxcJywgJ1xcXFxcXFxcJylcblx0XHQucmVwbGFjZUFsbCgnOycsICdcXFxcOycpXG5cdFx0LnJlcGxhY2VBbGwoJywnLCAnXFxcXCwnKVxuXHRcdC5yZXBsYWNlQWxsKCdcXG4nLCAnXFxcXG4nKVxuXHRcdC5yZXBsYWNlQWxsKCdcXHInLCAnJylcbn1cblxuY29uc3QgZm9ybWF0RGF0ZSA9IChkYXRlOiBkYXlqcy5EYXlqcywgaXNBbGxEYXkgPSBmYWxzZSk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBpc0FsbERheVxuXHRcdD8gZGF0ZS5mb3JtYXQoJ1lZWVlNTUREJylcblx0XHQ6IGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG59XG5cbmNvbnN0IGdldFVJRCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG5jb25zdCBmb3JtYXRSUnVsZSA9IChycnVsZU9wdGlvbnM6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuXHR0cnkge1xuXHRcdGNvbnN0IHJydWxlU3RyaW5nID0gbmV3IFJSdWxlKFxuXHRcdFx0cnJ1bGVPcHRpb25zIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgUlJ1bGU+WzBdXG5cdFx0KS50b1N0cmluZygpXG5cdFx0cmV0dXJuIChcblx0XHRcdHJydWxlU3RyaW5nLnNwbGl0KCdcXG4nKS5maW5kKChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoJ1JSVUxFOicpKSB8fCAnJ1xuXHRcdClcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuICcnXG5cdH1cbn1cblxuY29uc3QgY29udmVydEV2ZW50VG9WRXZlbnQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuXHRjb25zdCB0aW1lc3RhbXAgPSBkYXlqcygpLnV0YygpLmZvcm1hdCgnWVlZWU1NRERbVF1ISG1tc3NbWl0nKVxuXHRjb25zdCBkYXRlUGFyYW0gPSBldmVudC5hbGxEYXkgPyAnO1ZBTFVFPURBVEUnIDogJydcblx0Y29uc3QgcnJ1bGUgPSBldmVudC5ycnVsZSA/IGZvcm1hdFJSdWxlKGV2ZW50LnJydWxlKSA6ICcnXG5cblx0Y29uc3QgZXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXM/Lmxlbmd0aFxuXHRcdD8gZXZlbnQuZXhkYXRlcy5tYXAoKGQpID0+IGZvcm1hdERhdGUoZGF5anMoZCksIGV2ZW50LmFsbERheSkpLmpvaW4oJywnKVxuXHRcdDogbnVsbFxuXG5cdGNvbnN0IHJlY3VycmVuY2VJZCA9IGV2ZW50LnJlY3VycmVuY2VJZFxuXHRcdD8gZm9ybWF0RGF0ZShkYXlqcyhldmVudC5yZWN1cnJlbmNlSWQpLCBldmVudC5hbGxEYXkpXG5cdFx0OiBudWxsXG5cblx0Y29uc3QgbGluZXMgPSBbXG5cdFx0J0JFR0lOOlZFVkVOVCcsXG5cdFx0YFVJRDoke2dldFVJRChldmVudCl9YCxcblx0XHRgRFRTVEFSVCR7ZGF0ZVBhcmFtfToke2Zvcm1hdERhdGUoZXZlbnQuc3RhcnQsIGV2ZW50LmFsbERheSl9YCxcblx0XHRgRFRFTkQke2RhdGVQYXJhbX06JHtmb3JtYXREYXRlKGV2ZW50LmVuZCwgZXZlbnQuYWxsRGF5KX1gLFxuXHRcdGBTVU1NQVJZOiR7ZXNjYXBlVGV4dChldmVudC50aXRsZSl9YCxcblx0XHRldmVudC5kZXNjcmlwdGlvbiAmJiBgREVTQ1JJUFRJT046JHtlc2NhcGVUZXh0KGV2ZW50LmRlc2NyaXB0aW9uKX1gLFxuXHRcdGV2ZW50LmxvY2F0aW9uICYmIGBMT0NBVElPTjoke2VzY2FwZVRleHQoZXZlbnQubG9jYXRpb24pfWAsXG5cdFx0cnJ1bGUsXG5cdFx0ZXhkYXRlcyAmJiBgRVhEQVRFOiR7ZXhkYXRlc31gLFxuXHRcdHJlY3VycmVuY2VJZCAmJiBgUkVDVVJSRU5DRS1JRDoke3JlY3VycmVuY2VJZH1gLFxuXHRcdGBEVFNUQU1QOiR7dGltZXN0YW1wfWAsXG5cdFx0YENSRUFURUQ6JHt0aW1lc3RhbXB9YCxcblx0XHRgTEFTVC1NT0RJRklFRDoke3RpbWVzdGFtcH1gLFxuXHRcdCdTVEFUVVM6Q09ORklSTUVEJyxcblx0XHQnU0VRVUVOQ0U6MCcsXG5cdFx0J1RSQU5TUDpPUEFRVUUnLFxuXHRcdCdFTkQ6VkVWRU5UJyxcblx0XVxuXG5cdHJldHVybiBsaW5lcy5maWx0ZXIoQm9vbGVhbikuam9pbihDUkxGKVxufVxuXG5jb25zdCBmaWx0ZXJFdmVudHMgPSAoZXZlbnRzOiBDYWxlbmRhckV2ZW50W10pOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRjb25zdCBzZWVuVUlEcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cblx0cmV0dXJuIGV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgdWlkID0gZ2V0VUlEKGV2ZW50KVxuXHRcdGNvbnN0IGlzQmFzZVJlY3VycmluZyA9IGV2ZW50LnJydWxlICYmICFldmVudC5yZWN1cnJlbmNlSWRcblx0XHRjb25zdCBpc01vZGlmaWVkSW5zdGFuY2UgPSBldmVudC5yZWN1cnJlbmNlSWQgJiYgIWV2ZW50LnJydWxlXG5cblx0XHRpZiAoaXNCYXNlUmVjdXJyaW5nKSB7XG5cdFx0XHRzZWVuVUlEcy5hZGQodWlkKVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0aWYgKGlzTW9kaWZpZWRJbnN0YW5jZSkge1xuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0cmV0dXJuICFldmVudC5ycnVsZSAmJiAhZXZlbnQucmVjdXJyZW5jZUlkICYmICFzZWVuVUlEcy5oYXModWlkKVxuXHR9KVxufVxuXG5leHBvcnQgY29uc3QgZXhwb3J0VG9JQ2FsZW5kYXIgPSAoXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdLFxuXHRjYWxlbmRhck5hbWUgPSAnaWxhbXkgQ2FsZW5kYXInXG4pOiBzdHJpbmcgPT4ge1xuXHRjb25zdCBuYW1lID0gZXNjYXBlVGV4dChjYWxlbmRhck5hbWUpXG5cdGNvbnN0IHZldmVudFN0cmluZ3MgPSBmaWx0ZXJFdmVudHMoZXZlbnRzKS5tYXAoY29udmVydEV2ZW50VG9WRXZlbnQpXG5cblx0cmV0dXJuIFtcblx0XHQnQkVHSU46VkNBTEVOREFSJyxcblx0XHQnVkVSU0lPTjoyLjAnLFxuXHRcdCdQUk9ESUQ6LS8vaWxhbXkvL2lsYW15IENhbGVuZGFyLy9FTicsXG5cdFx0J0NBTFNDQUxFOkdSRUdPUklBTicsXG5cdFx0J01FVEhPRDpQVUJMSVNIJyxcblx0XHRgWC1XUi1DQUxOQU1FOiR7bmFtZX1gLFxuXHRcdGBYLVdSLUNBTERFU0M6RXhwb3J0ZWQgZnJvbSAke25hbWV9YCxcblx0XHRVVENfVlRJTUVaT05FLFxuXHRcdC4uLnZldmVudFN0cmluZ3MsXG5cdFx0J0VORDpWQ0FMRU5EQVInLFxuXHRdLmpvaW4oQ1JMRilcbn1cblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkSUNhbGVuZGFyID0gKFxuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcblx0ZmlsZW5hbWUgPSAnY2FsZW5kYXIuaWNzJyxcblx0Y2FsZW5kYXJOYW1lID0gJ2lsYW15IENhbGVuZGFyJ1xuKTogdm9pZCA9PiB7XG5cdGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZXhwb3J0VG9JQ2FsZW5kYXIoZXZlbnRzLCBjYWxlbmRhck5hbWUpXSwge1xuXHRcdHR5cGU6ICd0ZXh0L2NhbGVuZGFyO2NoYXJzZXQ9dXRmLTgnLFxuXHR9KVxuXHRjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpXG5cdGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IGZpbGVuYW1lLmVuZHNXaXRoKCcuaWNzJylcblx0XHQ/IGZpbGVuYW1lXG5cdFx0OiBgJHtmaWxlbmFtZX0uaWNzYFxuXG5cdGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcblx0bGluay5ocmVmID0gdXJsXG5cdGxpbmsuZG93bmxvYWQgPSBub3JtYWxpemVkRmlsZW5hbWVcblxuXHRkb2N1bWVudC5ib2R5LmFwcGVuZChsaW5rKVxuXHRsaW5rLmNsaWNrKClcblx0bGluay5yZW1vdmUoKVxuXHRVUkwucmV2b2tlT2JqZWN0VVJMKHVybClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ2hldnJvbkRvd24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHtcblx0UG9wb3Zlcixcblx0UG9wb3ZlckNvbnRlbnQsXG5cdFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmNvbnN0IE1PTlRIX0tFWVMgPSBbXG5cdCdqYW51YXJ5Jyxcblx0J2ZlYnJ1YXJ5Jyxcblx0J21hcmNoJyxcblx0J2FwcmlsJyxcblx0J21heScsXG5cdCdqdW5lJyxcblx0J2p1bHknLFxuXHQnYXVndXN0Jyxcblx0J3NlcHRlbWJlcicsXG5cdCdvY3RvYmVyJyxcblx0J25vdmVtYmVyJyxcblx0J2RlY2VtYmVyJyxcbl0gYXMgY29uc3RcblxuY29uc3QgYW5pbWF0aW9uID0ge1xuXHRpbml0aWFsOiB7IG9wYWNpdHk6IDAsIHk6IDEwIH0sXG5cdGFuaW1hdGU6IHsgb3BhY2l0eTogMSwgeTogMCB9LFxuXHRleGl0OiB7IG9wYWNpdHk6IDAsIHk6IC0xMCB9LFxufVxuXG5jb25zdCBUaXRsZUNvbnRlbnQgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHZpZXcsIHNldEN1cnJlbnREYXRlLCB0LCBmaXJzdERheU9mV2VlayB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdFx0Y3VycmVudERhdGU6IGN0eC5jdXJyZW50RGF0ZSxcblx0XHRcdHZpZXc6IGN0eC52aWV3LFxuXHRcdFx0c2V0Q3VycmVudERhdGU6IGN0eC5zZXRDdXJyZW50RGF0ZSxcblx0XHRcdHQ6IGN0eC50LFxuXHRcdFx0Zmlyc3REYXlPZldlZWs6IGN0eC5maXJzdERheU9mV2Vlayxcblx0XHR9KSlcblxuXHRjb25zdCBbb3BlblBvcG92ZXIsIHNldE9wZW5Qb3BvdmVyXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG5cblx0Y29uc3QgbW9udGhzID0gdXNlTWVtbygoKSA9PiBNT05USF9LRVlTLm1hcCgoa2V5KSA9PiB0KGtleSkpLCBbdF0pXG5cdGNvbnN0IGN1cnJlbnRZZWFyID0gY3VycmVudERhdGUueWVhcigpXG5cdGNvbnN0IHllYXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTEgfSwgKF8sIGkpID0+IGN1cnJlbnRZZWFyIC0gNSArIGkpXG5cdGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdGNvbnN0IHNlbGVjdERhdGUgPSAoZGF0ZTogZGF5anMuRGF5anMpID0+IHtcblx0XHRzZXRDdXJyZW50RGF0ZShkYXRlKVxuXHRcdHNldE9wZW5Qb3BvdmVyKG51bGwpXG5cdH1cblxuXHRjb25zdCByZW5kZXJNb250aENvbnRlbnQgPSAoKSA9PiAoXG5cdFx0PD5cblx0XHRcdHttb250aHMubWFwKChtb250aCwgaW5kZXgpID0+IChcblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGtleT17bW9udGh9XG5cdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0Y3VycmVudERhdGUubW9udGgoKSA9PT0gaW5kZXggJiYgJ2JnLXByaW1hcnkvMTAnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZWxlY3REYXRlKGN1cnJlbnREYXRlLm1vbnRoKGluZGV4KSl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7bW9udGh9XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0KSl9XG5cdFx0PC8+XG5cdClcblxuXHRjb25zdCByZW5kZXJZZWFyQ29udGVudCA9ICgpID0+IChcblx0XHQ8PlxuXHRcdFx0e3llYXJzLm1hcCgoeWVhcikgPT4gKFxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0a2V5PXt5ZWFyfVxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdGN1cnJlbnREYXRlLnllYXIoKSA9PT0geWVhciAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNlbGVjdERhdGUoY3VycmVudERhdGUueWVhcih5ZWFyKSl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7eWVhcn1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQpKX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlcldlZWtDb250ZW50ID0gKCkgPT4gKFxuXHRcdDw+XG5cdFx0XHR7QXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgaSkgPT4ge1xuXHRcdFx0XHRjb25zdCB3ZWVrRGF0ZSA9IGN1cnJlbnREYXRlLnN1YnRyYWN0KDMsICd3ZWVrJykuYWRkKGksICd3ZWVrJylcblx0XHRcdFx0Y29uc3QgZGF5cyA9IGdldFdlZWtEYXlzKHdlZWtEYXRlLCBmaXJzdERheU9mV2Vlaylcblx0XHRcdFx0Y29uc3Qgc3RhcnQgPSBkYXlzWzBdXG5cdFx0XHRcdGNvbnN0IGVuZCA9IGRheXNbNl1cblx0XHRcdFx0Y29uc3QgaXNDdXJyZW50V2VlayA9IHdlZWtEYXRlLmlzU2FtZShjdXJyZW50RGF0ZSwgJ3dlZWsnKVxuXHRcdFx0XHRjb25zdCBjcm9zc2VzTW9udGggPSBzdGFydC5tb250aCgpICE9PSBlbmQubW9udGgoKVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0a2V5PXtzdGFydC5mb3JtYXQoJ1lZWVktTU0tREQnKX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHQnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG5cdFx0XHRcdFx0XHRcdGlzQ3VycmVudFdlZWsgJiYgJ2JnLXByaW1hcnkvMTAnXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gc2VsZWN0RGF0ZShzdGFydCl9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG5cdFx0XHRcdFx0XHRcdDxzcGFuPntgJHtzdGFydC5mb3JtYXQoJ01NTSBEJyl9IC0gJHtlbmQuZm9ybWF0KCdEJyl9YH08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdHtjcm9zc2VzTW9udGggJiYgKFxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cIm1sLTAuNSB0ZXh0LXhzIG9wYWNpdHktNzBcIj57YCR7c3RhcnQuZm9ybWF0KCdNTU0nKX0tJHtlbmQuZm9ybWF0KCdNTU0nKX1gfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlckRheUNvbnRlbnQgPSAoKSA9PiB7XG5cdFx0Y29uc3QgZmlyc3REYXkgPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cdFx0Y29uc3QgZGF5c0luTW9udGggPSBjdXJyZW50RGF0ZS5kYXlzSW5Nb250aCgpXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PD5cblx0XHRcdFx0e0FycmF5LmZyb20oeyBsZW5ndGg6IGRheXNJbk1vbnRoIH0sIChfLCBpKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZGF5ID0gZmlyc3REYXkuZGF0ZShpICsgMSlcblx0XHRcdFx0XHRjb25zdCBpc0N1cnJlbnREYXkgPSBkYXkuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5Jylcblx0XHRcdFx0XHRjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5JylcblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGtleT17ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfVxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdFx0XHRpc0N1cnJlbnREYXkgJiYgJ2JnLXByaW1hcnkvMTAnXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNlbGVjdERhdGUoZGF5KX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4+e2RheS5mb3JtYXQoJ2RkZGQsIE1NTSBEJyl9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdHtpc1RvZGF5ICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1zbSBweC0xISB0ZXh0LXhzXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0KCd0b2RheScpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KX1cblx0XHRcdDwvPlxuXHRcdClcblx0fVxuXG5cdGNvbnN0IHBvcG92ZXJzID0gW1xuXHRcdHtcblx0XHRcdGlkOiAnbW9udGgnLFxuXHRcdFx0aGlkZGVuOiB2aWV3ID09PSAneWVhcicsXG5cdFx0XHR0aXRsZTogY3VycmVudERhdGUuZm9ybWF0KCdNTU1NJyksXG5cdFx0XHRyZW5kZXI6IHJlbmRlck1vbnRoQ29udGVudCxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiAneWVhcicsXG5cdFx0XHRoaWRkZW46IGZhbHNlLFxuXHRcdFx0dGl0bGU6IGN1cnJlbnREYXRlLmZvcm1hdCgnWVlZWScpLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJZZWFyQ29udGVudCxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiAnd2VlaycsXG5cdFx0XHRoaWRkZW46IHZpZXcgIT09ICd3ZWVrJyxcblx0XHRcdHRpdGxlOiBgJHt3ZWVrRGF5c1swXS5mb3JtYXQoJ01NTSBEJyl9IC0gJHt3ZWVrRGF5c1s2XS5mb3JtYXQoJ01NTSBEJyl9YCxcblx0XHRcdHJlbmRlcjogcmVuZGVyV2Vla0NvbnRlbnQsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogJ2RheScsXG5cdFx0XHRoaWRkZW46IHZpZXcgIT09ICdkYXknLFxuXHRcdFx0dGl0bGU6IGN1cnJlbnREYXRlLmZvcm1hdCgnZGRkZCwgRCcpLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJEYXlDb250ZW50LFxuXHRcdH0sXG5cdF1cblxuXHRyZXR1cm4gcG9wb3ZlcnNcblx0XHQuZmlsdGVyKChwKSA9PiAhcC5oaWRkZW4pXG5cdFx0Lm1hcCgocG9wb3ZlcikgPT4gKFxuXHRcdFx0PFBvcG92ZXJcblx0XHRcdFx0a2V5PXtwb3BvdmVyLmlkfVxuXHRcdFx0XHRvcGVuPXtvcGVuUG9wb3ZlciA9PT0gcG9wb3Zlci5pZH1cblx0XHRcdFx0b25PcGVuQ2hhbmdlPXsob3BlbikgPT4gc2V0T3BlblBvcG92ZXIob3BlbiA/IHBvcG92ZXIuaWQgOiBudWxsKX1cblx0XHRcdD5cblx0XHRcdFx0PFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1tb250aC1idXR0b25cIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cblx0XHRcdFx0XHRcdFx0PG1vdGlvbi5zcGFuXG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtwb3BvdmVyLmlkfS0ke2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG5cdFx0XHRcdFx0XHRcdFx0aW5pdGlhbD1cImluaXRpYWxcIlxuXHRcdFx0XHRcdFx0XHRcdGFuaW1hdGU9XCJhbmltYXRlXCJcblx0XHRcdFx0XHRcdFx0XHRleGl0PVwiZXhpdFwiXG5cdFx0XHRcdFx0XHRcdFx0dmFyaWFudHM9e2FuaW1hdGlvbn1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjI1LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItbW9udGgtZGlzcGxheVwiXG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7cG9wb3Zlci50aXRsZX1cblx0XHRcdFx0XHRcdFx0PC9tb3Rpb24uc3Bhbj5cblx0XHRcdFx0XHRcdDwvQW5pbWF0ZVByZXNlbmNlPlxuXHRcdFx0XHRcdFx0PENoZXZyb25Eb3duIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0XHQ8UG9wb3ZlckNvbnRlbnQgY2xhc3NOYW1lPVwidy00MCBwLTBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggbWF4LWgtNjAgZmxleC1jb2wgb3ZlcmZsb3ctYXV0b1wiPlxuXHRcdFx0XHRcdFx0e3BvcG92ZXIucmVuZGVyKCl9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0XHQ8L1BvcG92ZXI+XG5cdFx0KSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGl0bGVDb250ZW50XG4iLAogICAgImltcG9ydCB7IENoZXZyb25MZWZ0LCBDaGV2cm9uUmlnaHQgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG50eXBlIFZpZXdUeXBlID0gJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInXG5cbmludGVyZmFjZSBWaWV3Q29udHJvbHNQcm9wcyB7XG5cdGN1cnJlbnRWaWV3OiBWaWV3VHlwZVxuXHRvbkNoYW5nZTogKHZpZXc6IFZpZXdUeXBlKSA9PiB2b2lkXG5cdG9uVG9kYXk/OiAoKSA9PiB2b2lkXG5cdG9uTmV4dD86ICgpID0+IHZvaWRcblx0b25QcmV2aW91cz86ICgpID0+IHZvaWRcblx0dmFyaWFudD86ICdkZWZhdWx0JyB8ICdncmlkJ1xuXHRzaXplPzogJ3NtJyB8ICdkZWZhdWx0J1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgVmlld0NvbnRyb2xzOiBSZWFjdC5GQzxWaWV3Q29udHJvbHNQcm9wcz4gPSAoe1xuXHRjdXJyZW50Vmlldyxcblx0b25DaGFuZ2UsXG5cdHZhcmlhbnQgPSAnZGVmYXVsdCcsXG5cdHNpemUgPSAnc20nLFxuXHRjbGFzc05hbWUsXG5cdG9uVG9kYXksXG5cdG9uTmV4dCxcblx0b25QcmV2aW91cyxcbn0pID0+IHtcblx0Y29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHsgdDogY29udGV4dC50IH0pKVxuXHRjb25zdCBpc0dyaWQgPSB2YXJpYW50ID09PSAnZ3JpZCdcblxuXHQvLyBFeHRyYWN0IGNvbW1vbiBidXR0b24gY2xhc3NOYW1lIGxvZ2ljIHRvIGEgZnVuY3Rpb25cblx0Y29uc3QgZ2V0QnV0dG9uQ2xhc3NOYW1lID0gKHZpZXdUeXBlOiBWaWV3VHlwZSkgPT4ge1xuXHRcdHJldHVybiBjbihcblx0XHRcdC8vIEJhc2Ugd2lkdGggZm9yIGdyaWQgbGF5b3V0XG5cdFx0XHRpc0dyaWQgPyAndy1mdWxsJyA6ICcnLFxuXHRcdFx0Ly8gQWN0aXZlIHZpZXcgc3R5bGluZ1xuXHRcdFx0Y3VycmVudFZpZXcgPT09IHZpZXdUeXBlICYmICdiZy1wcmltYXJ5LzgwJ1xuXHRcdClcblx0fVxuXG5cdGNvbnN0IGdldEJ0blZhcmlhbnQgPSAodmlld1R5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0cmV0dXJuIGN1cnJlbnRWaWV3ID09PSB2aWV3VHlwZSA/ICdkZWZhdWx0JyA6ICdvdXRsaW5lJ1xuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRpc0dyaWQgPyAnZ3JpZCBncmlkLWNvbHMtMiBnYXAtMicgOiAnZmxleCBnYXAtMScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uUHJldmlvdXN9IHZhcmlhbnQ9XCJvdXRsaW5lXCIgc2l6ZT17c2l6ZX0+XG5cdFx0XHRcdDxDaGV2cm9uTGVmdCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvbk5leHR9IHZhcmlhbnQ9XCJvdXRsaW5lXCIgc2l6ZT17c2l6ZX0+XG5cdFx0XHRcdDxDaGV2cm9uUmlnaHQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0e1snZGF5JywgJ3dlZWsnLCAnbW9udGgnLCAneWVhciddLm1hcCgodHlwZTogVmlld1R5cGUpID0+IHtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRrZXk9e3R5cGV9XG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSh0eXBlKX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9e2dldEJ0blZhcmlhbnQodHlwZSl9XG5cdFx0XHRcdFx0XHRzaXplPXtzaXplfVxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUodHlwZSl9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0e3QodHlwZSl9XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXG5cdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uVG9kYXl9IHZhcmlhbnQ9XCJvdXRsaW5lXCIgc2l6ZT17c2l6ZX0+XG5cdFx0XHRcdHt0KCd0b2RheScpfVxuXHRcdFx0PC9CdXR0b24+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlld0NvbnRyb2xzXG4iLAogICAgImltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEcm9wcGFibGVDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2Ryb3BwYWJsZS1jZWxsJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBpc0J1c2luZXNzSG91ciB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgRGF5QWxsRGF5Um93IH0gZnJvbSAnLi9kYXktYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBEYXlFdmVudHNMYXllciB9IGZyb20gJy4vZGF5LWV2ZW50cy1sYXllcidcbmltcG9ydCB7IERheUhlYWRlciB9IGZyb20gJy4vZGF5LWhlYWRlcidcbmltcG9ydCB7IERheVRpbWVDb2wgfSBmcm9tICcuL2RheS10aW1lLWNvbCdcblxuLy8gSG91cnMgdG8gZGlzcGxheSAoYWxsIDI0IGhvdXJzIG9mIHRoZSBkYXkpXG5jb25zdCBob3VycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBpKSA9PiBpKS5tYXAoKGhvdXIpID0+IHtcblx0cmV0dXJuIGRheWpzKCkuaG91cihob3VyKS5taW51dGUoMClcbn0pXG5cbmNvbnN0IERheVZpZXcgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGJ1c2luZXNzSG91cnMgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgaXNUb2RheSA9IGN1cnJlbnREYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5Jylcblx0Y29uc3QgZGF0ZVN0ciA9IGN1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGRhdGEtdGVzdGlkPVwiZGF5LXZpZXdcIiBjbGFzc05hbWU9XCJmbGV4IGgtZnVsbCBmbGV4LWNvbFwiPlxuXHRcdFx0ey8qIERheSBoZWFkZXIgKi99XG5cdFx0XHQ8RGF5SGVhZGVyIGNsYXNzTmFtZT1cImgtWzNyZW1dXCIgLz5cblxuXHRcdFx0ey8qIFRpbWUgZ3JpZCB3aXRob3V0IHNjcm9sbGJhciAqL31cblx0XHRcdDxTY3JvbGxBcmVhXG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwiZGF5LXNjcm9sbC1hcmVhXCJcblx0XHRcdFx0Y2xhc3NOYW1lPVwicmVsYXRpdmUgb3ZlcmZsb3cteS1hdXRvIGgtW2NhbGMoMTAwJS0zcmVtKV1cIlxuXHRcdFx0PlxuXHRcdFx0XHR7LyogQWxsLWRheSBldmVudHMgcm93ICovfVxuXHRcdFx0XHQ8RGF5QWxsRGF5Um93IC8+XG5cblx0XHRcdFx0ey8qIFNldCBhIGZpeGVkIGhlaWdodCBjb250YWluZXIgdGhhdCBtYXRjaGVzIGV4YWN0bHkgdGhlIHRvdGFsIGhlaWdodCBvZiBhbGwgaG91ciBibG9ja3MgKi99XG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImRheS10aW1lLWdyaWRcIlxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTggZGl2aWRlLXggYm9yZGVyLXhcIlxuXHRcdFx0XHRcdHN0eWxlPXt7IGhlaWdodDogYCR7aG91cnMubGVuZ3RoICogNjB9cHhgIH19XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7LyogVGltZSBsYWJlbHMgY29sdW1uICovfVxuXHRcdFx0XHRcdDxEYXlUaW1lQ29sIGNsYXNzTmFtZT1cImNvbC1zcGFuLTIgaC1mdWxsIG1kOmNvbC1zcGFuLTFcIiAvPlxuXG5cdFx0XHRcdFx0ey8qIERheSBjb2x1bW4gd2l0aCBldmVudHMgKi99XG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJkYXktZXZlbnRzLWNvbHVtblwiXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJyZWxhdGl2ZSBjb2wtc3Bhbi02IGgtZnVsbCBtZDpjb2wtc3Bhbi03XCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7aG91cnMubWFwKCh0aW1lKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGhvdXIgPSB0aW1lLmhvdXIoKVxuXHRcdFx0XHRcdFx0XHRjb25zdCBob3VyU3RyID0gdGltZS5mb3JtYXQoJ0hIJylcblxuXHRcdFx0XHRcdFx0XHRjb25zdCBjaGVja0J1c2luZXNzID0gKG1pbnV0ZTogbnVtYmVyKSA9PlxuXHRcdFx0XHRcdFx0XHRcdGlzQnVzaW5lc3NIb3VyKHtcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGU6IGN1cnJlbnREYXRlLFxuXHRcdFx0XHRcdFx0XHRcdFx0aG91cixcblx0XHRcdFx0XHRcdFx0XHRcdG1pbnV0ZSxcblx0XHRcdFx0XHRcdFx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdFx0XHRcdFx0fSlcblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdDxGcmFnbWVudCBrZXk9e2Ake2RhdGVTdHJ9LSR7aG91clN0cn1gfT5cblx0XHRcdFx0XHRcdFx0XHRcdHtbMCwgMTUsIDMwLCA0NV0ubWFwKChtaW51dGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgaXNCdXNpbmVzcyA9IGNoZWNrQnVzaW5lc3MobWludXRlKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBpc0xhc3RTbG90ID0gbWludXRlID09PSA0NVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBtaW51dGVTdHIgPSBtaW51dGUudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYm9yZGVyQ2xhc3MgPSBpc0xhc3RTbG90XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyAnYm9yZGVyLWJvcmRlcidcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6ICdib3JkZXItZGFzaGVkJ1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PERyb3BwYWJsZUNlbGxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17bWludXRlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9e2BkYXktdGltZS1jZWxsLSR7ZGF0ZVN0cn0tJHtob3VyU3RyfS0ke21pbnV0ZVN0cn1gfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2BkYXktdGltZS1jZWxsLSR7aG91clN0cn0tJHttaW51dGVTdHJ9YH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJ0aW1lLWNlbGxcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZT17Y3VycmVudERhdGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRob3VyPXtob3VyfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWludXRlPXttaW51dGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaXNhYmxlZD17IWlzQnVzaW5lc3N9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnaC1bMTVweF0gYm9yZGVyLWIgaG92ZXI6YmctYWNjZW50Jyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ym9yZGVyQ2xhc3Ncblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdFx0fSl9XG5cdFx0XHRcdFx0XHRcdFx0PC9GcmFnbWVudD5cblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0fSl9XG5cblx0XHRcdFx0XHRcdHsvKiBFdmVudHMgbGF5ZXIgLSBtaWRkbGUtdG9wIGxheWVyICovfVxuXHRcdFx0XHRcdFx0PERheUV2ZW50c0xheWVyIGRheT17Y3VycmVudERhdGV9IC8+XG5cblx0XHRcdFx0XHRcdHsvKiBDdXJyZW50IHRpbWUgaW5kaWNhdG9yIC0gdG9wIGxheWVyICovfVxuXHRcdFx0XHRcdFx0e2lzVG9kYXkgJiYgKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJkYXktY3VycmVudC10aW1lLWluZGljYXRvclwiXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtMCBsZWZ0LTAgei00MCBib3JkZXItdCBib3JkZXItcmVkLTUwMFwiXG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRcdFx0XHRcdHRvcDogYCR7KGRheWpzKCkuaG91cigpICsgZGF5anMoKS5taW51dGUoKSAvIDYwKSAqIDYwfXB4YCxcblx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCItbXQtMSAtbWwtMSBoLTIgdy0yIHJvdW5kZWQtZnVsbCBiZy1yZWQtNTAwXCI+PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIC8+XG5cdFx0XHQ8L1Njcm9sbEFyZWE+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGRlZmF1bHQgRGF5Vmlld1xuIiwKICAgICIvLyBveGxpbnQtZGlzYWJsZSBuby1uZWdhdGVkLWNvbmRpdGlvblxuXG5pbXBvcnQgeyB1c2VEcm9wcGFibGUgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IERJU0FCTEVEX0NFTExfQ0xBU1NOQU1FIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIERyb3BwYWJsZUNlbGxQcm9wcyB7XG5cdGlkOiBzdHJpbmdcblx0dHlwZTogJ2RheS1jZWxsJyB8ICd0aW1lLWNlbGwnXG5cdGRhdGU6IGRheWpzLkRheWpzXG5cdGhvdXI/OiBudW1iZXJcblx0bWludXRlPzogbnVtYmVyXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0YWxsRGF5PzogYm9vbGVhblxuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0c3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcblx0ZGlzYWJsZWQ/OiBib29sZWFuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEcm9wcGFibGVDZWxsKHtcblx0aWQsXG5cdHR5cGUsXG5cdGRhdGUsXG5cdGhvdXIsXG5cdG1pbnV0ZSxcblx0cmVzb3VyY2VJZCxcblx0YWxsRGF5LFxuXHRjaGlsZHJlbixcblx0Y2xhc3NOYW1lLFxuXHRzdHlsZSxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcblx0ZGlzYWJsZWQgPSBmYWxzZSxcbn06IERyb3BwYWJsZUNlbGxQcm9wcykge1xuXHRjb25zdCB7IG9uQ2VsbENsaWNrLCBkaXNhYmxlRHJhZ0FuZERyb3AsIGRpc2FibGVDZWxsQ2xpY2ssIGNsYXNzZXNPdmVycmlkZSB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoc3RhdGUpID0+ICh7XG5cdFx0XHRvbkNlbGxDbGljazogc3RhdGUub25DZWxsQ2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3A6IHN0YXRlLmRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRcdGRpc2FibGVDZWxsQ2xpY2s6IHN0YXRlLmRpc2FibGVDZWxsQ2xpY2ssXG5cdFx0XHRjbGFzc2VzT3ZlcnJpZGU6IHN0YXRlLmNsYXNzZXNPdmVycmlkZSxcblx0XHR9KSlcblxuXHRjb25zdCB7IGlzT3Zlciwgc2V0Tm9kZVJlZiB9ID0gdXNlRHJvcHBhYmxlKHtcblx0XHRpZCxcblx0XHRkYXRhOiB7XG5cdFx0XHR0eXBlLFxuXHRcdFx0ZGF0ZSxcblx0XHRcdGhvdXIsXG5cdFx0XHRtaW51dGUsXG5cdFx0XHRyZXNvdXJjZUlkLFxuXHRcdFx0YWxsRGF5LFxuXHRcdH0sXG5cdFx0ZGlzYWJsZWQ6IGRpc2FibGVEcmFnQW5kRHJvcCB8fCBkaXNhYmxlZCxcblx0fSlcblxuXHRjb25zdCBoYW5kbGVDZWxsQ2xpY2sgPSAoZTogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuXHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblxuXHRcdGlmIChkaXNhYmxlQ2VsbENsaWNrIHx8IGRpc2FibGVkKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRjb25zdCBzdGFydCA9IGRhdGUuaG91cihob3VyID8/IDApLm1pbnV0ZShtaW51dGUgPz8gMClcblx0XHRsZXQgZW5kID0gc3RhcnQuY2xvbmUoKVxuXHRcdGlmIChob3VyICE9PSB1bmRlZmluZWQgJiYgbWludXRlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGVuZCA9IGVuZC5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGUgKyAxNSkgLy8gZGF5IHZpZXcgdGltZSBzbG90cyBhcmUgMTUgbWludXRlc1xuXHRcdH0gZWxzZSBpZiAoaG91ciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRlbmQgPSBlbmQuaG91cihob3VyICsgMSkubWludXRlKDApIC8vIHdlZWsgdmlldyB0aW1lIHNsb3RzIGFyZSAxIGhvdXJcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZW5kID0gZW5kLmhvdXIoMjMpLm1pbnV0ZSg1OSkgLy8gbW9udGggdmlldyBmdWxsIGRheVxuXHRcdH1cblxuXHRcdG9uQ2VsbENsaWNrKHsgc3RhcnQsIGVuZCwgcmVzb3VyY2VJZCB9KVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50c1xuXHRcdDxkaXZcblx0XHRcdHJlZj17c2V0Tm9kZVJlZn1cblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkfVxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0Y2xhc3NOYW1lLFxuXHRcdFx0XHRpc092ZXIgJiYgIWRpc2FibGVEcmFnQW5kRHJvcCAmJiAhZGlzYWJsZWQgJiYgJ2JnLWFjY2VudCcsXG5cdFx0XHRcdGRpc2FibGVDZWxsQ2xpY2sgfHwgZGlzYWJsZWQgPyAnY3Vyc29yLWRlZmF1bHQnIDogJ2N1cnNvci1wb2ludGVyJyxcblx0XHRcdFx0ZGlzYWJsZWQgJiYgKGNsYXNzZXNPdmVycmlkZT8uZGlzYWJsZWRDZWxsIHx8IERJU0FCTEVEX0NFTExfQ0xBU1NOQU1FKVxuXHRcdFx0KX1cblx0XHRcdG9uQ2xpY2s9e2hhbmRsZUNlbGxDbGlja31cblx0XHRcdHN0eWxlPXtzdHlsZX1cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBXZWVrRGF5cyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5jb25zdCBEQVlfVE9fTlVNQkVSOiBSZWNvcmQ8V2Vla0RheXMsIG51bWJlcj4gPSB7XG5cdHN1bmRheTogMCxcblx0bW9uZGF5OiAxLFxuXHR0dWVzZGF5OiAyLFxuXHR3ZWRuZXNkYXk6IDMsXG5cdHRodXJzZGF5OiA0LFxuXHRmcmlkYXk6IDUsXG5cdHNhdHVyZGF5OiA2LFxufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBhcHByb3ByaWF0ZSBidXNpbmVzcyBob3VycyBjb25maWd1cmF0aW9uIGZvciBhIGdpdmVuIGRhdGUuXG4gKiBJZiBidXNpbmVzc0hvdXJzIGlzIGFuIGFycmF5LCBmaW5kcyB0aGUgZmlyc3QgY29uZmlnIHRoYXQgaW5jbHVkZXMgdGhlIGRhdGUncyBkYXkgb2Ygd2Vlay5cbiAqIElmIGJ1c2luZXNzSG91cnMgaXMgYSBzaW5nbGUgb2JqZWN0LCByZXR1cm5zIGl0IGFzLWlzLlxuICpcbiAqIEBwYXJhbSBkYXRlIFRoZSBkYXRlIHRvIGZpbmQgYnVzaW5lc3MgaG91cnMgZm9yXG4gKiBAcGFyYW0gYnVzaW5lc3NIb3VycyBUaGUgYnVzaW5lc3MgaG91cnMgY29uZmlndXJhdGlvbiAoc2luZ2xlIG9yIGFycmF5KVxuICogQHJldHVybnMgVGhlIG1hdGNoaW5nIEJ1c2luZXNzSG91cnMgY29uZmlnIG9yIHVuZGVmaW5lZCBpZiBubyBtYXRjaCBmb3VuZFxuICovXG5jb25zdCBnZXRCdXNpbmVzc0hvdXJzRm9yRGF0ZSA9IChcblx0ZGF0ZTogZGF5anMuRGF5anMsXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG4pOiBCdXNpbmVzc0hvdXJzIHwgdW5kZWZpbmVkID0+IHtcblx0aWYgKCFidXNpbmVzc0hvdXJzKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZFxuXHR9XG5cblx0Ly8gSWYgc2luZ2xlIG9iamVjdCwgcmV0dXJuIGl0XG5cdGlmICghQXJyYXkuaXNBcnJheShidXNpbmVzc0hvdXJzKSkge1xuXHRcdHJldHVybiBidXNpbmVzc0hvdXJzXG5cdH1cblxuXHQvLyBJZiBhcnJheSwgZmluZCB0aGUgY29uZmlnIHRoYXQgYXBwbGllcyB0byB0aGlzIGRheVxuXHRjb25zdCBkYXlPZldlZWsgPSBkYXRlLmRheSgpXG5cdHJldHVybiBidXNpbmVzc0hvdXJzLmZpbmQoKGNvbmZpZykgPT4ge1xuXHRcdGlmICghY29uZmlnLmRheXNPZldlZWspIHtcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdH1cblx0XHRyZXR1cm4gY29uZmlnLmRheXNPZldlZWsuc29tZSgoZCkgPT4gREFZX1RPX05VTUJFUltkXSA9PT0gZGF5T2ZXZWVrKVxuXHR9KVxufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHNwZWNpZmljIGRhdGUgaXMgYSBidXNpbmVzcyBkYXkuXG4gKlxuICogQHBhcmFtIGRhdGUgVGhlIGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSBidXNpbmVzc0hvdXJzIFRoZSBidXNpbmVzcyBob3VycyBjb25maWd1cmF0aW9uIChzaW5nbGUgb3IgYXJyYXkpXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBkYXRlIGlzIGEgYnVzaW5lc3MgZGF5LCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQnVzaW5lc3NEYXkgPSAoXG5cdGRhdGU6IGRheWpzLkRheWpzLFxuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuKTogYm9vbGVhbiA9PiB7XG5cdGlmICghYnVzaW5lc3NIb3Vycykge1xuXHRcdHJldHVybiB0cnVlXG5cdH1cblxuXHRjb25zdCBjb25maWcgPSBnZXRCdXNpbmVzc0hvdXJzRm9yRGF0ZShkYXRlLCBidXNpbmVzc0hvdXJzKVxuXHRpZiAoIWNvbmZpZykge1xuXHRcdHJldHVybiBmYWxzZVxuXHR9XG5cblx0Ly8gQ2hlY2sgZGF5IG9mIHdlZWtcblx0aWYgKGNvbmZpZy5kYXlzT2ZXZWVrKSB7XG5cdFx0cmV0dXJuIGNvbmZpZy5kYXlzT2ZXZWVrLnNvbWUoKGQpID0+IERBWV9UT19OVU1CRVJbZF0gPT09IGRhdGUuZGF5KCkpXG5cdH1cblxuXHRyZXR1cm4gdHJ1ZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElzQnVzaW5lc3NIb3VyT3B0aW9ucyB7XG5cdGRhdGU6IGRheWpzLkRheWpzXG5cdGhvdXI/OiBudW1iZXJcblx0bWludXRlPzogbnVtYmVyXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgc3BlY2lmaWMgaG91ciBvbiBhIHNwZWNpZmljIGRhdGUgaXMgd2l0aGluIGJ1c2luZXNzIGhvdXJzLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBjaGVja2luZyBidXNpbmVzcyBob3Vyc1xuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdGltZSBpcyB3aXRoaW4gYnVzaW5lc3MgaG91cnMsIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgY29uc3QgaXNCdXNpbmVzc0hvdXIgPSAoe1xuXHRkYXRlLFxuXHRob3VyLFxuXHRtaW51dGUgPSAwLFxuXHRidXNpbmVzc0hvdXJzLFxufTogSXNCdXNpbmVzc0hvdXJPcHRpb25zKTogYm9vbGVhbiA9PiB7XG5cdC8vIEZpcnN0IGNoZWNrIGlmIGl0J3MgYSBidXNpbmVzcyBkYXlcblx0aWYgKCFpc0J1c2luZXNzRGF5KGRhdGUsIGJ1c2luZXNzSG91cnMpKSB7XG5cdFx0cmV0dXJuIGZhbHNlXG5cdH1cblxuXHQvLyBJZiBidXNpbmVzcyBob3VycyBhcmUgbm90IGNvbmZpZ3VyZWQsIGNvbnNpZGVyIGV2ZXJ5dGhpbmcgYXMgXCJidXNpbmVzcyBob3Vyc1wiXG5cdGlmICghYnVzaW5lc3NIb3Vycykge1xuXHRcdHJldHVybiB0cnVlXG5cdH1cblxuXHQvLyBJZiBob3VyIGlzIG5vdCBwcm92aWRlZCwgd2UgYXNzdW1lIHRoZSB1c2VyIG9ubHkgY2FyZXMgYWJvdXQgdGhlIGRheVxuXHQvLyBTaW5jZSB3ZSBhbHJlYWR5IHBhc3NlZCBpc0J1c2luZXNzRGF5IGNoZWNrLCB3ZSByZXR1cm4gdHJ1ZVxuXHRpZiAoaG91ciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHRydWVcblx0fVxuXG5cdGNvbnN0IGNvbmZpZyA9IGdldEJ1c2luZXNzSG91cnNGb3JEYXRlKGRhdGUsIGJ1c2luZXNzSG91cnMpXG5cdGlmICghY29uZmlnKSB7XG5cdFx0cmV0dXJuIGZhbHNlXG5cdH1cblxuXHQvLyBDaGVjayB0aW1lXG5cdC8vIHN0YXJ0VGltZSBhbmQgZW5kVGltZSBhcmUgbnVtYmVycyAoMC0yNClcblx0Ly8gV2UgdHJlYXQgdGhlbSBhcyBleGFjdCBob3Vycy4gZS5nLiA5IG1lYW5zIDA5OjAwLlxuXHRjb25zdCBzdGFydEggPSBjb25maWcuc3RhcnRUaW1lID8/IDlcblx0Y29uc3QgZW5kSCA9IGNvbmZpZy5lbmRUaW1lID8/IDE3XG5cblx0Y29uc3QgY3VycmVudE1pbnV0ZXMgPSBob3VyICogNjAgKyBtaW51dGVcblx0Y29uc3Qgc3RhcnRNaW51dGVzID0gc3RhcnRIICogNjBcblx0Y29uc3QgZW5kTWludXRlcyA9IGVuZEggKiA2MFxuXG5cdGlmIChjdXJyZW50TWludXRlcyA8IHN0YXJ0TWludXRlcyB8fCBjdXJyZW50TWludXRlcyA+PSBlbmRNaW51dGVzKSB7XG5cdFx0cmV0dXJuIGZhbHNlXG5cdH1cblxuXHRyZXR1cm4gdHJ1ZVxufVxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHsgdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvaG9va3MvdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cydcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgRVZFTlRfQkFSX0hFSUdIVCB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcblxuaW50ZXJmYWNlIFdlZWtFdmVudHNMYXllclByb3BzIHtcblx0ZGF5czogZGF5anMuRGF5anNbXVxuXHRhbGxEYXk/OiBib29sZWFuXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxufVxuXG5jb25zdCBXZWVrRXZlbnRzTGF5ZXI6IFJlYWN0LkZDPFdlZWtFdmVudHNMYXllclByb3BzPiA9ICh7XG5cdGRheXMsXG5cdGFsbERheSxcblx0ZGF5TnVtYmVySGVpZ2h0LFxufSkgPT4ge1xuXHRjb25zdCB3ZWVrU3RhcnQgPSBkYXlzWzBdXG5cdGNvbnN0IHByb2Nlc3NlZFdlZWtFdmVudHMgPSB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzKHtcblx0XHRkYXlzLFxuXHRcdGFsbERheSxcblx0XHRkYXlOdW1iZXJIZWlnaHQsXG5cdH0pXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGwgcG9pbnRlci1ldmVudHMtbm9uZSB6LTEwIG92ZXJmbG93LWNsaXBcIj5cblx0XHRcdHtwcm9jZXNzZWRXZWVrRXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnRLZXkgPSBgJHtldmVudC5pZH0tJHtldmVudC5wb3NpdGlvbn0tJHt3ZWVrU3RhcnQudG9JU09TdHJpbmcoKX1gXG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRrZXk9e2Ake2V2ZW50S2V5fS13cmFwcGVyYH1cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImFic29sdXRlIHotMTAgcG9pbnRlci1ldmVudHMtYXV0byBvdmVyZmxvdy1jbGlwXCJcblx0XHRcdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0XHRcdGxlZnQ6IGBjYWxjKCR7ZXZlbnQubGVmdH0lICsgdmFyKC0tc3BhY2luZykgKiAwLjI1KWAsXG5cdFx0XHRcdFx0XHRcdHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDEpYCxcblx0XHRcdFx0XHRcdFx0dG9wOiBgJHtldmVudC50b3B9cHhgLFxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IGAke0VWRU5UX0JBUl9IRUlHSFR9cHhgLFxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgd2Vlay1ldmVudC1sYXllci1ldmVudC0ke2V2ZW50LmlkfWB9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PERyYWdnYWJsZUV2ZW50XG5cdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17ZXZlbnRLZXl9XG5cdFx0XHRcdFx0XHRcdGV2ZW50PXtldmVudH1cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC1mdWxsIHctZnVsbCBzaGFkb3dcIlxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuY29uc3QgbWVtb2l6ZWRXZWVrRXZlbnRzTGF5ZXIgPSBtZW1vKFdlZWtFdmVudHNMYXllcilcbmV4cG9ydCB7IG1lbW9pemVkV2Vla0V2ZW50c0xheWVyIGFzIFdlZWtFdmVudHNMYXllciB9XG4iLAogICAgImltcG9ydCB7IHVzZURyYWdnYWJsZSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB0eXBlIHsgQ1NTUHJvcGVydGllcyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgZ2V0Qm9yZGVyUmFkaXVzQ2xhc3MgPSAoXG5cdGlzVHJ1bmNhdGVkU3RhcnQ6IGJvb2xlYW4sXG5cdGlzVHJ1bmNhdGVkRW5kOiBib29sZWFuXG4pID0+IHtcblx0aWYgKGlzVHJ1bmNhdGVkU3RhcnQgJiYgaXNUcnVuY2F0ZWRFbmQpIHtcblx0XHRyZXR1cm4gJ3JvdW5kZWQtbm9uZSdcblx0fVxuXHRpZiAoaXNUcnVuY2F0ZWRTdGFydCkge1xuXHRcdHJldHVybiAncm91bmRlZC1yLW1kIHJvdW5kZWQtbC1ub25lJ1xuXHR9XG5cdGlmIChpc1RydW5jYXRlZEVuZCkge1xuXHRcdHJldHVybiAncm91bmRlZC1sLW1kIHJvdW5kZWQtci1ub25lJ1xuXHR9XG5cdHJldHVybiAncm91bmRlZC1tZCdcbn1cblxuZnVuY3Rpb24gRHJhZ2dhYmxlRXZlbnRVbm1lbW9pemVkKHtcblx0ZWxlbWVudElkLFxuXHRldmVudCxcblx0Y2xhc3NOYW1lLFxuXHRzdHlsZSxcblx0ZGlzYWJsZURyYWcgPSBmYWxzZSxcbn06IHtcblx0ZWxlbWVudElkOiBzdHJpbmdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdHN0eWxlPzogQ1NTUHJvcGVydGllc1xuXHRldmVudDogQ2FsZW5kYXJFdmVudFxuXHRkaXNhYmxlRHJhZz86IGJvb2xlYW5cbn0pIHtcblx0Y29uc3QgeyBvbkV2ZW50Q2xpY2ssIHJlbmRlckV2ZW50LCBkaXNhYmxlRXZlbnRDbGljaywgZGlzYWJsZURyYWdBbmREcm9wIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChzdGF0ZSkgPT4gKHtcblx0XHRcdG9uRXZlbnRDbGljazogc3RhdGUub25FdmVudENsaWNrLFxuXHRcdFx0cmVuZGVyRXZlbnQ6IHN0YXRlLnJlbmRlckV2ZW50LFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2s6IHN0YXRlLmRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wOiBzdGF0ZS5kaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0fSkpXG5cblx0Y29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMsIHNldE5vZGVSZWYsIGlzRHJhZ2dpbmcgfSA9IHVzZURyYWdnYWJsZSh7XG5cdFx0aWQ6IGVsZW1lbnRJZCxcblx0XHRkYXRhOiB7XG5cdFx0XHRldmVudCxcblx0XHRcdHR5cGU6ICdjYWxlbmRhci1ldmVudCcsXG5cdFx0fSxcblx0XHRkaXNhYmxlZDogZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wLFxuXHR9KVxuXG5cdC8vIERlZmF1bHQgZXZlbnQgY29udGVudCB0byByZW5kZXIgaWYgY3VzdG9tIHJlbmRlckV2ZW50IGlzIG5vdCBwcm92aWRlZFxuXHRjb25zdCBEZWZhdWx0RXZlbnRDb250ZW50ID0gKCkgPT4ge1xuXHRcdC8vIENoZWNrIGlmIHRoaXMgZXZlbnQgaGFzIHRydW5jYXRpb24gaW5mb3JtYXRpb25cblx0XHRjb25zdCBlbmhhbmNlZEV2ZW50ID0gZXZlbnQgYXMgdW5rbm93biBhcyB7XG5cdFx0XHRpc1RydW5jYXRlZFN0YXJ0PzogYm9vbGVhblxuXHRcdFx0aXNUcnVuY2F0ZWRFbmQ/OiBib29sZWFuXG5cdFx0fVxuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBlbmhhbmNlZEV2ZW50LmlzVHJ1bmNhdGVkU3RhcnRcblx0XHRjb25zdCBpc1RydW5jYXRlZEVuZCA9IGVuaGFuY2VkRXZlbnQuaXNUcnVuY2F0ZWRFbmRcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0ZXZlbnQuYmFja2dyb3VuZENvbG9yIHx8ICdiZy1ibHVlLTUwMCcsXG5cdFx0XHRcdFx0ZXZlbnQuY29sb3IgfHwgJ3RleHQtd2hpdGUnLFxuXHRcdFx0XHRcdCdoLWZ1bGwgdy1mdWxsIHB4LTEgYm9yZGVyLVsxLjVweF0gYm9yZGVyLWNhcmQgdGV4dC1sZWZ0IG92ZXJmbG93LWNsaXAgcmVsYXRpdmUnLFxuXHRcdFx0XHRcdGdldEJvcmRlclJhZGl1c0NsYXNzKGlzVHJ1bmNhdGVkU3RhcnQsIGlzVHJ1bmNhdGVkRW5kKVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGV2ZW50LmJhY2tncm91bmRDb2xvciwgY29sb3I6IGV2ZW50LmNvbG9yIH19XG5cdFx0XHQ+XG5cdFx0XHRcdHsvKiBMZWZ0IGNvbnRpbnVhdGlvbiBpbmRpY2F0b3IgKi99XG5cdFx0XHRcdHtpc1RydW5jYXRlZFN0YXJ0ICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGxlZnQtMCB0b3AtMCBib3R0b20tMCB3LTAuNSBiZy1mb3JlZ3JvdW5kLzI1XCI+PC9kaXY+XG5cdFx0XHRcdCl9XG5cblx0XHRcdFx0ey8qIEV2ZW50IHRpdGxlICovfVxuXHRcdFx0XHQ8cFxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQndGV4dC1bMTBweF0gZm9udC1zZW1pYm9sZCBzbTp0ZXh0LXhzIG10LTAuNScsXG5cdFx0XHRcdFx0XHQvLyBBZGQgc2xpZ2h0IHBhZGRpbmcgdG8gYXZvaWQgb3ZlcmxhcCB3aXRoIGluZGljYXRvcnNcblx0XHRcdFx0XHRcdGlzVHJ1bmNhdGVkU3RhcnQgJiYgJ3BsLTEnLFxuXHRcdFx0XHRcdFx0aXNUcnVuY2F0ZWRFbmQgJiYgJ3ByLTEnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHtldmVudC50aXRsZX1cblx0XHRcdFx0PC9wPlxuXG5cdFx0XHRcdHsvKiBSaWdodCBjb250aW51YXRpb24gaW5kaWNhdG9yICovfVxuXHRcdFx0XHR7aXNUcnVuY2F0ZWRFbmQgJiYgKFxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtMCB0b3AtMCBib3R0b20tMCB3LTAuNSBiZy1mb3JlZ3JvdW5kLzI1XCI+PC9kaXY+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cblx0XHRcdDxtb3Rpb24uZGl2XG5cdFx0XHRcdGtleT17ZWxlbWVudElkfVxuXHRcdFx0XHRyZWY9e3NldE5vZGVSZWZ9XG5cdFx0XHRcdHsuLi5hdHRyaWJ1dGVzfVxuXHRcdFx0XHR7Li4ubGlzdGVuZXJzfVxuXHRcdFx0XHRpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC01MCB9fVxuXHRcdFx0XHRhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cblx0XHRcdFx0ZXhpdD17eyBvcGFjaXR5OiAwLCB5OiAtNTAgfX1cblx0XHRcdFx0bGF5b3V0XG5cdFx0XHRcdGxheW91dElkPXtlbGVtZW50SWR9XG5cdFx0XHRcdHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuNCwgZWFzZTogJ2Vhc2VJbk91dCcgfX1cblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQndHJ1bmNhdGUgaC1mdWxsIHctZnVsbCcsXG5cdFx0XHRcdFx0ZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wXG5cdFx0XHRcdFx0XHQ/IGRpc2FibGVFdmVudENsaWNrXG5cdFx0XHRcdFx0XHRcdD8gJ2N1cnNvci1kZWZhdWx0J1xuXHRcdFx0XHRcdFx0XHQ6ICdjdXJzb3ItcG9pbnRlcidcblx0XHRcdFx0XHRcdDogJ2N1cnNvci1ncmFiJyxcblx0XHRcdFx0XHRpc0RyYWdnaW5nICYmXG5cdFx0XHRcdFx0XHQhKGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcCkgJiZcblx0XHRcdFx0XHRcdCdjdXJzb3ItZ3JhYmJpbmcgc2hhZG93LWxnJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0c3R5bGU9e3N0eWxlfVxuXHRcdFx0XHRvbkNsaWNrPXsoZSkgPT4ge1xuXHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdFx0XHRvbkV2ZW50Q2xpY2soZXZlbnQpXG5cdFx0XHRcdH19XG5cdFx0XHQ+XG5cdFx0XHRcdHsvKiBVc2UgY3VzdG9tIHJlbmRlckV2ZW50IGZyb20gY29udGV4dCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB1c2UgZGVmYXVsdCAqL31cblx0XHRcdFx0e3JlbmRlckV2ZW50ID8gcmVuZGVyRXZlbnQoZXZlbnQpIDogPERlZmF1bHRFdmVudENvbnRlbnQgLz59XG5cdFx0XHQ8L21vdGlvbi5kaXY+XG5cdFx0PC9BbmltYXRlUHJlc2VuY2U+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IERyYWdnYWJsZUV2ZW50ID0gbWVtbyhcblx0RHJhZ2dhYmxlRXZlbnRVbm1lbW9pemVkLFxuXHQocHJldlByb3BzLCBuZXh0UHJvcHMpID0+IHtcblx0XHQvLyBDb21wYXJlIHRoZSBlc3NlbnRpYWwgcHJvcHMgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzXG5cdFx0cmV0dXJuIChcblx0XHRcdHByZXZQcm9wcy5lbGVtZW50SWQgPT09IG5leHRQcm9wcy5lbGVtZW50SWQgJiZcblx0XHRcdHByZXZQcm9wcy5kaXNhYmxlRHJhZyA9PT0gbmV4dFByb3BzLmRpc2FibGVEcmFnICYmXG5cdFx0XHRwcmV2UHJvcHMuY2xhc3NOYW1lID09PSBuZXh0UHJvcHMuY2xhc3NOYW1lICYmXG5cdFx0XHRwcmV2UHJvcHMuZXZlbnQgPT09IG5leHRQcm9wcy5ldmVudFxuXHRcdClcblx0fVxuKVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZ2V0UG9zaXRpb25lZEV2ZW50cyB9IGZyb20gJ0AvbGliL3V0aWxzL3Bvc2l0aW9uLXdlZWstZXZlbnRzJ1xuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkV2Vla0V2ZW50c1Byb3BzIHtcblx0ZGF5czogZGF5anMuRGF5anNbXVxuXHRhbGxEYXk/OiBib29sZWFuXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGFsbERheSxcblx0ZGF5TnVtYmVySGVpZ2h0LFxufTogVXNlUHJvY2Vzc2VkV2Vla0V2ZW50c1Byb3BzKSA9PiB7XG5cdGNvbnN0IHsgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCBkYXlNYXhFdmVudHMsIGV2ZW50U3BhY2luZyB9ID1cblx0XHR1c2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHdlZWtTdGFydCA9IGRheXNbMF0uc3RhcnRPZignZGF5Jylcblx0Y29uc3Qgd2Vla0VuZCA9IGRheXMuYXQoLTEpLmVuZE9mKCdkYXknKVxuXG5cdC8vIEdldCBhbGwgZXZlbnRzIHRoYXQgaW50ZXJzZWN0IHdpdGggdGhpcyB3ZWVrXG5cdGNvbnN0IHBvc2l0aW9uZWRFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRsZXQgZXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKHdlZWtTdGFydCwgd2Vla0VuZClcblx0XHRpZiAoYWxsRGF5KSB7XG5cdFx0XHRldmVudHMgPSBldmVudHMuZmlsdGVyKChlKSA9PiBlLmFsbERheSlcblx0XHR9XG5cblx0XHRyZXR1cm4gZ2V0UG9zaXRpb25lZEV2ZW50cyh7XG5cdFx0XHRkYXlzLFxuXHRcdFx0ZXZlbnRzLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZGF5TnVtYmVySGVpZ2h0LFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdH0pXG5cdH0sIFtcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0d2Vla1N0YXJ0LFxuXHRcdHdlZWtFbmQsXG5cdFx0YWxsRGF5LFxuXHRcdGRheXMsXG5cdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdGRheU51bWJlckhlaWdodCxcblx0XHRldmVudFNwYWNpbmcsXG5cdF0pXG5cblx0cmV0dXJuIHBvc2l0aW9uZWRFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHtcblx0REFZX05VTUJFUl9IRUlHSFQsXG5cdEVWRU5UX0JBUl9IRUlHSFQsXG5cdEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxufSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbmludGVyZmFjZSBQb3NpdGlvbmVkRXZlbnQgZXh0ZW5kcyBDYWxlbmRhckV2ZW50IHtcblx0bGVmdDogbnVtYmVyIC8vIExlZnQgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuXHR3aWR0aDogbnVtYmVyIC8vIFdpZHRoIGluIHBlcmNlbnRhZ2Vcblx0dG9wOiBudW1iZXIgLy8gVG9wIHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0aGVpZ2h0OiBudW1iZXIgLy8gSGVpZ2h0IGluIHBlcmNlbnRhZ2Vcblx0cG9zaXRpb246IG51bWJlciAvLyBQb3NpdGlvbiBpbiB0aGUgcm93ICgwIGZvciBmaXJzdCwgMSBmb3Igc2Vjb25kLCBldGMuKVxuXHRpc1RydW5jYXRlZFN0YXJ0OiBib29sZWFuIC8vIFdoZXRoZXIgdGhlIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgc3RhcnRcblx0aXNUcnVuY2F0ZWRFbmQ6IGJvb2xlYW4gLy8gV2hldGhlciB0aGUgZXZlbnQgaXMgdHJ1bmNhdGVkIGF0IHRoZSBlbmRcbn1cblxuaW50ZXJmYWNlIEdldFBvc2l0aW9uZWRFdmVudHNQcm9wcyB7XG5cdGRheXM6IGRheWpzLkRheWpzW11cblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cicgLy8gRnV0dXJlIHVzZSBmb3IgZGlmZmVyZW50IGdyaWQgdHlwZXNcblx0ZXZlbnRTcGFjaW5nPzogbnVtYmVyIC8vIEN1c3RvbSB2ZXJ0aWNhbCBzcGFjaW5nIGJldHdlZW4gZXZlbnRzIChkZWZhdWx0cyB0byBHQVBfQkVUV0VFTl9FTEVNRU5UUylcbn1cblxuZXhwb3J0IGNvbnN0IGdldFBvc2l0aW9uZWRFdmVudHMgPSAoe1xuXHRkYXlzLFxuXHRldmVudHMsXG5cdGRheU1heEV2ZW50cyxcblx0ZGF5TnVtYmVySGVpZ2h0ID0gREFZX05VTUJFUl9IRUlHSFQsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdGV2ZW50U3BhY2luZyA9IEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxufTogR2V0UG9zaXRpb25lZEV2ZW50c1Byb3BzKSA9PiB7XG5cdGNvbnN0IGZpcnN0RGF5ID0gZGF5c1swXS5zdGFydE9mKCdkYXknKVxuXHRjb25zdCBsYXN0RGF5ID0gZGF5cy5hdCgtMSkuZW5kT2YoJ2RheScpXG5cdGNvbnN0IGRheUNvdW50ID0gZGF5cy5sZW5ndGhcblxuXHQvLyBTZXBhcmF0ZSBtdWx0aS1kYXkgYW5kIHNpbmdsZS1kYXkgZXZlbnRzXG5cdGNvbnN0IG11bHRpRGF5RXZlbnRzID0gZXZlbnRzLmZpbHRlcigoZSkgPT4gZS5lbmQuZGlmZihlLnN0YXJ0LCBncmlkVHlwZSkgPiAwKVxuXHRjb25zdCBzaW5nbGVEYXlFdmVudHMgPSBldmVudHMuZmlsdGVyKFxuXHRcdChlKSA9PiBlLmVuZC5kaWZmKGUuc3RhcnQsIGdyaWRUeXBlKSA9PT0gMFxuXHQpXG5cblx0Ly8gU29ydCBtdWx0aS1kYXkgZXZlbnRzIGJ5IHN0YXJ0IGRhdGUsIHRoZW4gYnkgZHVyYXRpb25cblx0Y29uc3Qgc29ydGVkTXVsdGlEYXkgPSBbLi4ubXVsdGlEYXlFdmVudHNdLnNvcnQoKGEsIGIpID0+IHtcblx0XHRjb25zdCBzdGFydERpZmYgPSBhLnN0YXJ0LmRpZmYoYi5zdGFydClcblx0XHRpZiAoc3RhcnREaWZmICE9PSAwKSB7XG5cdFx0XHRyZXR1cm4gc3RhcnREaWZmXG5cdFx0fVxuXHRcdHJldHVybiBiLmVuZC5kaWZmKGIuc3RhcnQpIC0gYS5lbmQuZGlmZihhLnN0YXJ0KSAvLyBMb25nZXIgZXZlbnRzIGZpcnN0XG5cdH0pXG5cblx0Ly8gU29ydCBzaW5nbGUtZGF5IGV2ZW50cyBieSBzdGFydCB0aW1lXG5cdGNvbnN0IHNvcnRlZFNpbmdsZURheSA9IFsuLi5zaW5nbGVEYXlFdmVudHNdLnNvcnQoKGEsIGIpID0+XG5cdFx0YS5zdGFydC5kaWZmKGIuc3RhcnQpXG5cdClcblxuXHQvLyBDcmVhdGUgZGF5Q291bnQgeCBkYXlNYXhFdmVudHMgZ3JpZCB3aXRoIGZsYWdzXG5cdGNvbnN0IGdyaWQ6IHsgdGFrZW46IGJvb2xlYW47IGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbCB9W11bXSA9IFtdXG5cdGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGRheU1heEV2ZW50czsgcm93KyspIHtcblx0XHRncmlkW3Jvd10gPSBbXVxuXHRcdGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IGRheUNvdW50OyBjb2wrKykge1xuXHRcdFx0Z3JpZFtyb3ddW2NvbF0gPSB7IHRha2VuOiBmYWxzZSwgZXZlbnQ6IG51bGwgfVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHByb2Nlc3NlZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W10gPSBbXVxuXG5cdC8vIFN0ZXAgMTogQXNzaWduIHBvc2l0aW9ucyB0byBtdWx0aS1kYXkgZXZlbnRzIGZpcnN0XG5cdGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkTXVsdGlEYXkpIHtcblx0XHRjb25zdCBldmVudFN0YXJ0ID0gZGF5anMubWF4KGV2ZW50LnN0YXJ0LnN0YXJ0T2YoZ3JpZFR5cGUpLCBmaXJzdERheSlcblx0XHRjb25zdCBhZGp1c3RlZEVuZCA9XG5cdFx0XHRncmlkVHlwZSA9PT0gJ2hvdXInID8gZXZlbnQuZW5kLnN1YnRyYWN0KDEsICdtaW51dGUnKSA6IGV2ZW50LmVuZFxuXHRcdGNvbnN0IGV2ZW50RW5kID0gZGF5anMubWluKGFkanVzdGVkRW5kLnN0YXJ0T2YoZ3JpZFR5cGUpLCBsYXN0RGF5KVxuXHRcdGNvbnN0IHN0YXJ0Q29sID0gTWF0aC5tYXgoMCwgZXZlbnRTdGFydC5kaWZmKGZpcnN0RGF5LCBncmlkVHlwZSkpXG5cdFx0Y29uc3QgZW5kQ29sID0gTWF0aC5taW4oZGF5Q291bnQgLSAxLCBldmVudEVuZC5kaWZmKGZpcnN0RGF5LCBncmlkVHlwZSkpXG5cblx0XHQvLyBEZXRlY3QgaWYgZXZlbnQgaXMgdHJ1bmNhdGVkIGF0IHRoZSBib3VuZGFyaWVzXG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRTdGFydCA9IGV2ZW50LnN0YXJ0LnN0YXJ0T2YoZ3JpZFR5cGUpLmlzQmVmb3JlKGZpcnN0RGF5KVxuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkRW5kID0gZXZlbnQuZW5kLnN0YXJ0T2YoZ3JpZFR5cGUpLmlzQWZ0ZXIobGFzdERheSlcblxuXHRcdC8vIFRyeSB0byBwbGFjZSB0aGUgZXZlbnQgc3RhcnRpbmcgZnJvbSBpdHMgb3JpZ2luYWwgc3RhcnQgY29sdW1uXG5cdFx0bGV0IHBsYWNlZFN1Y2Nlc3NmdWxseSA9IGZhbHNlXG5cblx0XHQvLyBGaXJzdCB0cnk6IHBsYWNlIGZyb20gb3JpZ2luYWwgc3RhcnQgcG9zaXRpb25cblx0XHRsZXQgYXNzaWduZWRSb3cgPSAtMVxuXHRcdGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGRheU1heEV2ZW50czsgcm93KyspIHtcblx0XHRcdGxldCBjYW5QbGFjZSA9IHRydWVcblx0XHRcdGZvciAobGV0IGNvbCA9IHN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuXHRcdFx0XHRpZiAoZ3JpZFtyb3ddW2NvbF0udGFrZW4pIHtcblx0XHRcdFx0XHRjYW5QbGFjZSA9IGZhbHNlXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGNhblBsYWNlKSB7XG5cdFx0XHRcdGFzc2lnbmVkUm93ID0gcm93XG5cdFx0XHRcdGJyZWFrXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZm91bmQgYSByb3csIGFzc2lnbiB0aGUgZXZlbnQgdG8gYWxsIGl0cyBjb2x1bW5zXG5cdFx0aWYgKGFzc2lnbmVkUm93ICE9PSAtMSkge1xuXHRcdFx0Zm9yIChsZXQgY29sID0gc3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG5cdFx0XHRcdGdyaWRbYXNzaWduZWRSb3ddW2NvbF0gPSB7IHRha2VuOiB0cnVlLCBldmVudCB9XG5cdFx0XHR9XG5cblx0XHRcdC8vIENyZWF0ZSBwb3NpdGlvbiBkYXRhIGZvciByZW5kZXJpbmdcblx0XHRcdGNvbnN0IHNwYW5EYXlzID0gZW5kQ29sIC0gc3RhcnRDb2wgKyAxXG5cdFx0XHRwcm9jZXNzZWRFdmVudHMucHVzaCh7XG5cdFx0XHRcdGxlZnQ6IChzdGFydENvbCAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdFx0d2lkdGg6IChzcGFuRGF5cyAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdFx0dG9wOlxuXHRcdFx0XHRcdGRheU51bWJlckhlaWdodCArXG5cdFx0XHRcdFx0ZXZlbnRTcGFjaW5nICtcblx0XHRcdFx0XHRhc3NpZ25lZFJvdyAqIChFVkVOVF9CQVJfSEVJR0hUICsgZXZlbnRTcGFjaW5nKSxcblx0XHRcdFx0aGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuXHRcdFx0XHRwb3NpdGlvbjogYXNzaWduZWRSb3csXG5cdFx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0XHRpc1RydW5jYXRlZFN0YXJ0LFxuXHRcdFx0XHRpc1RydW5jYXRlZEVuZCxcblx0XHRcdH0gYXMgUG9zaXRpb25lZEV2ZW50KVxuXHRcdFx0cGxhY2VkU3VjY2Vzc2Z1bGx5ID0gdHJ1ZVxuXHRcdH1cblxuXHRcdC8vIElmIGNvdWxkbid0IHBsYWNlIGF0IG9yaWdpbmFsIHBvc2l0aW9uLCB0cnkgdHJ1bmNhdGVkIHZlcnNpb25zIHN0YXJ0aW5nIGZyb20gbGF0ZXIgZGF5c1xuXHRcdGlmICghcGxhY2VkU3VjY2Vzc2Z1bGx5KSB7XG5cdFx0XHRmb3IgKFxuXHRcdFx0XHRsZXQgdHJ5U3RhcnRDb2wgPSBzdGFydENvbCArIDE7XG5cdFx0XHRcdHRyeVN0YXJ0Q29sIDw9IGVuZENvbDtcblx0XHRcdFx0dHJ5U3RhcnRDb2wrK1xuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIFRyeSB0byBwbGFjZSB0aGUgdHJ1bmNhdGVkIGV2ZW50IHN0YXJ0aW5nIGZyb20gdGhpcyBjb2x1bW5cblx0XHRcdFx0bGV0IHRydW5jYXRlZEFzc2lnbmVkUm93ID0gLTFcblx0XHRcdFx0Zm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuXHRcdFx0XHRcdGxldCBjYW5QbGFjZSA9IHRydWVcblx0XHRcdFx0XHRmb3IgKGxldCBjb2wgPSB0cnlTdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdFx0XHRcdGlmIChncmlkW3Jvd11bY29sXS50YWtlbikge1xuXHRcdFx0XHRcdFx0XHRjYW5QbGFjZSA9IGZhbHNlXG5cdFx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChjYW5QbGFjZSkge1xuXHRcdFx0XHRcdFx0dHJ1bmNhdGVkQXNzaWduZWRSb3cgPSByb3dcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgd2UgZm91bmQgYSByb3cgZm9yIHRoZSB0cnVuY2F0ZWQgdmVyc2lvbiwgcGxhY2UgaXRcblx0XHRcdFx0aWYgKHRydW5jYXRlZEFzc2lnbmVkUm93ICE9PSAtMSkge1xuXHRcdFx0XHRcdGZvciAobGV0IGNvbCA9IHRyeVN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuXHRcdFx0XHRcdFx0Z3JpZFt0cnVuY2F0ZWRBc3NpZ25lZFJvd11bY29sXSA9IHsgdGFrZW46IHRydWUsIGV2ZW50IH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgdGhlIHRydW5jYXRlZCByZW5kZXJpbmdcblx0XHRcdFx0XHRjb25zdCB0cnVuY2F0ZWRTcGFuRGF5cyA9IGVuZENvbCAtIHRyeVN0YXJ0Q29sICsgMVxuXHRcdFx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcblx0XHRcdFx0XHRcdGxlZnQ6ICh0cnlTdGFydENvbCAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdFx0XHRcdHdpZHRoOiAodHJ1bmNhdGVkU3BhbkRheXMgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdFx0XHR0b3A6XG5cdFx0XHRcdFx0XHRcdGRheU51bWJlckhlaWdodCArXG5cdFx0XHRcdFx0XHRcdGV2ZW50U3BhY2luZyArXG5cdFx0XHRcdFx0XHRcdHRydW5jYXRlZEFzc2lnbmVkUm93ICogKEVWRU5UX0JBUl9IRUlHSFQgKyBldmVudFNwYWNpbmcpLFxuXHRcdFx0XHRcdFx0aGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuXHRcdFx0XHRcdFx0cG9zaXRpb246IHRydW5jYXRlZEFzc2lnbmVkUm93LFxuXHRcdFx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdFx0XHRpc1RydW5jYXRlZFN0YXJ0OiB0cnVlLCAvLyBBbHdheXMgdHJ1bmNhdGVkIGF0IHN0YXJ0IHdoZW4gdXNpbmcgdGhpcyBmYWxsYmFjayBsb2dpY1xuXHRcdFx0XHRcdFx0aXNUcnVuY2F0ZWRFbmQsXG5cdFx0XHRcdFx0fSBhcyBQb3NpdGlvbmVkRXZlbnQpXG5cdFx0XHRcdFx0cGxhY2VkU3VjY2Vzc2Z1bGx5ID0gdHJ1ZVxuXHRcdFx0XHRcdGJyZWFrIC8vIFN1Y2Nlc3NmdWxseSBwbGFjZWQsIHN0b3AgdHJ5aW5nIG90aGVyIHN0YXJ0IHBvc2l0aW9uc1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gU3RlcCAyOiBGaWxsIGdhcHMgd2l0aCBzaW5nbGUtZGF5IGV2ZW50c1xuXHRmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZFNpbmdsZURheSkge1xuXHRcdGNvbnN0IGV2ZW50U3RhcnQgPSBkYXlqcy5tYXgoZXZlbnQuc3RhcnQuc3RhcnRPZihncmlkVHlwZSksIGZpcnN0RGF5KVxuXHRcdC8vIENsYW1wIGNvbCB0byB2YWxpZCBncmlkIGJvdW5kcyB0byBwcmV2ZW50IGFjY2Vzc2luZyB1bmRlZmluZWQgZ3JpZCBwb3NpdGlvbnNcblx0XHRjb25zdCBjb2wgPSBNYXRoLm1heChcblx0XHRcdDAsXG5cdFx0XHRNYXRoLm1pbihkYXlDb3VudCAtIDEsIGV2ZW50U3RhcnQuZGlmZihmaXJzdERheSwgZ3JpZFR5cGUpKVxuXHRcdClcblxuXHRcdC8vIFNpbmdsZS1kYXkgZXZlbnRzIGFyZSBub3QgdHJ1bmNhdGVkIGJ5IGRlZmluaXRpb25cblx0XHRjb25zdCBpc1RydW5jYXRlZFN0YXJ0ID0gZmFsc2Vcblx0XHRjb25zdCBpc1RydW5jYXRlZEVuZCA9IGZhbHNlXG5cblx0XHQvLyBGaW5kIHRoZSBmaXJzdCBhdmFpbGFibGUgcm93IGluIHRoaXMgY29sdW1uXG5cdFx0bGV0IGFzc2lnbmVkUm93ID0gLTFcblx0XHRmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG5cdFx0XHRpZiAoIWdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG5cdFx0XHRcdGFzc2lnbmVkUm93ID0gcm93XG5cdFx0XHRcdGJyZWFrXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZm91bmQgYSByb3csIGFzc2lnbiB0aGUgZXZlbnRcblx0XHRpZiAoYXNzaWduZWRSb3cgIT09IC0xKSB7XG5cdFx0XHRncmlkW2Fzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuXG5cdFx0XHQvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgcmVuZGVyaW5nXG5cdFx0XHRwcm9jZXNzZWRFdmVudHMucHVzaCh7XG5cdFx0XHRcdGxlZnQ6IChjb2wgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdHdpZHRoOiAoMSAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdFx0dG9wOlxuXHRcdFx0XHRcdGRheU51bWJlckhlaWdodCArXG5cdFx0XHRcdFx0ZXZlbnRTcGFjaW5nICtcblx0XHRcdFx0XHRhc3NpZ25lZFJvdyAqIChFVkVOVF9CQVJfSEVJR0hUICsgZXZlbnRTcGFjaW5nKSxcblx0XHRcdFx0aGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuXHRcdFx0XHRwb3NpdGlvbjogYXNzaWduZWRSb3csXG5cdFx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0XHRpc1RydW5jYXRlZFN0YXJ0LFxuXHRcdFx0XHRpc1RydW5jYXRlZEVuZCxcblx0XHRcdH0gYXMgUG9zaXRpb25lZEV2ZW50KVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBwcm9jZXNzZWRFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcm9wcGFibGUtY2VsbCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgaXNCdXNpbmVzc0hvdXIgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2J1c2luZXNzLWhvdXJzJ1xuaW1wb3J0IHsgV2Vla0V2ZW50c0xheWVyIH0gZnJvbSAnLi4vbW9udGgtdmlldy93ZWVrLWV2ZW50cy1sYXllcidcblxuZXhwb3J0IGNvbnN0IERheUFsbERheVJvdyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgdCwgYnVzaW5lc3NIb3VycyB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgaXNCdXNpbmVzcyA9IGlzQnVzaW5lc3NIb3VyKHsgZGF0ZTogY3VycmVudERhdGUsIGJ1c2luZXNzSG91cnMgfSlcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGRhdGEtdGVzdGlkPVwiZGF5LWFsbC1kYXktcm93XCJcblx0XHRcdGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTggYm9yZGVyLWIgYm9yZGVyLXhcIlxuXHRcdD5cblx0XHRcdHsvKiBMZWZ0IGxhYmVsIGZvciBhbGwtZGF5IGV2ZW50cyAqL31cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiY29sLXNwYW4tMiBmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBib3JkZXItciBwci0yIG1kOmNvbC1zcGFuLTFcIj5cblx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtWzEwcHhdIHdoaXRlc3BhY2Utbm93cmFwIHNtOnRleHQteHNcIj5cblx0XHRcdFx0XHR7dCgnYWxsRGF5Jyl9XG5cdFx0XHRcdDwvc3Bhbj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHR7LyogQWxsLWRheSBldmVudHMgY29udGFpbmVyIHdpdGggZHluYW1pYyBoZWlnaHQgKi99XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGNvbC1zcGFuLTYgbWQ6Y29sLXNwYW4tNyBcIj5cblx0XHRcdFx0PERyb3BwYWJsZUNlbGxcblx0XHRcdFx0XHRpZD17YGFsbC1kYXktJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuXHRcdFx0XHRcdHR5cGU9XCJkYXktY2VsbFwiXG5cdFx0XHRcdFx0ZGF0ZT17Y3VycmVudERhdGV9XG5cdFx0XHRcdFx0YWxsRGF5PXt0cnVlfVxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cImhvdmVyOmJnLWFjY2VudCB3LWZ1bGwgY3Vyc29yLXBvaW50ZXIgbWluLWgtMTAgZmxleCBmbGV4LWNvbCByZWxhdGl2ZVwiXG5cdFx0XHRcdFx0ZGlzYWJsZWQ9eyFpc0J1c2luZXNzfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcHItMlwiPlxuXHRcdFx0XHRcdFx0PFdlZWtFdmVudHNMYXllciBkYXlzPXtbY3VycmVudERhdGVdfSBkYXlOdW1iZXJIZWlnaHQ9ezB9IGFsbERheSAvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0Ryb3BwYWJsZUNlbGw+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuaW50ZXJmYWNlIFBvc2l0aW9uZWRFdmVudCBleHRlbmRzIENhbGVuZGFyRXZlbnQge1xuXHRsZWZ0OiBudW1iZXIgLy8gTGVmdCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdHdpZHRoOiBudW1iZXIgLy8gV2lkdGggaW4gcGVyY2VudGFnZVxuXHR0b3A6IG51bWJlciAvLyBUb3AgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuXHRoZWlnaHQ6IG51bWJlciAvLyBIZWlnaHQgaW4gcGVyY2VudGFnZVxuXHR6SW5kZXg/OiBudW1iZXIgLy8gWi1pbmRleCBmb3IgbGF5ZXJpbmcgb3ZlcmxhcHBpbmcgZXZlbnRzXG59XG5cbmludGVyZmFjZSBVc2VQcm9jZXNzZWREYXlFdmVudHNQcm9wcyB7XG5cdGRheTogZGF5anMuRGF5anMgLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGNvbHVtbiByZXByZXNlbnRzXG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9jZXNzZWREYXlFdmVudHMgPSAoeyBkYXkgfTogVXNlUHJvY2Vzc2VkRGF5RXZlbnRzUHJvcHMpID0+IHtcblx0Y29uc3QgeyBnZXRFdmVudHNGb3JEYXRlUmFuZ2UgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgdG9kYXlFdmVudHMgPSB1c2VNZW1vPFBvc2l0aW9uZWRFdmVudFtdPigoKSA9PiB7XG5cdFx0bGV0IGV2ZW50c0ZvckRheSA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShcblx0XHRcdGRheS5zdGFydE9mKCdkYXknKSxcblx0XHRcdGRheS5lbmRPZignZGF5Jylcblx0XHQpXG5cblx0XHQvLyBGaWx0ZXIgb3V0IGFsbC1kYXkgZXZlbnRzIGFuZCBzb3J0IGJ5IHN0YXJ0IHRpbWVcblx0XHRldmVudHNGb3JEYXkgPSBldmVudHNGb3JEYXlcblx0XHRcdC5maWx0ZXIoKGUpID0+ICFlLmFsbERheSlcblx0XHRcdC50b1NvcnRlZCgoYSwgYikgPT4gYS5zdGFydC5kaWZmKGIuc3RhcnQpKVxuXG5cdFx0aWYgKGV2ZW50c0ZvckRheS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBbXVxuXHRcdH1cblxuXHRcdC8vIFN0ZXAgMTogR3JvdXAgZXZlbnRzIGludG8gY2x1c3RlcnMgb2Ygb3ZlcmxhcHBpbmcgZXZlbnRzXG5cdFx0Y29uc3QgY2x1c3RlcnM6IENhbGVuZGFyRXZlbnRbXVtdID0gW11cblx0XHRsZXQgY3VycmVudENsdXN0ZXI6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cdFx0bGV0IGxhc3RFdmVudEVuZDogZGF5anMuRGF5anMgfCBudWxsID0gbnVsbFxuXHRcdGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzRm9yRGF5KSB7XG5cdFx0XHRpZiAobGFzdEV2ZW50RW5kICYmIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIobGFzdEV2ZW50RW5kKSkge1xuXHRcdFx0XHRpZiAoY3VycmVudENsdXN0ZXIubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGNsdXN0ZXJzLnB1c2goY3VycmVudENsdXN0ZXIpXG5cdFx0XHRcdH1cblx0XHRcdFx0Y3VycmVudENsdXN0ZXIgPSBbXVxuXHRcdFx0fVxuXHRcdFx0Y3VycmVudENsdXN0ZXIucHVzaChldmVudClcblx0XHRcdGxhc3RFdmVudEVuZCA9IGxhc3RFdmVudEVuZFxuXHRcdFx0XHQ/IGRheWpzLm1heChsYXN0RXZlbnRFbmQsIGV2ZW50LmVuZClcblx0XHRcdFx0OiBldmVudC5lbmRcblx0XHR9XG5cdFx0aWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcblx0XHRcdGNsdXN0ZXJzLnB1c2goY3VycmVudENsdXN0ZXIpXG5cdFx0fVxuXG5cdFx0Ly8gU3RlcCAyOiBGb3IgZWFjaCBjbHVzdGVyLCB1c2UgYSBtb3JlIGludGVsbGlnZW50IGNvbHVtbiBhc3NpZ25tZW50XG5cdFx0Y29uc3QgcHJvY2Vzc2VkRXZlbnRzOiBQb3NpdGlvbmVkRXZlbnRbXSA9IFtdXG5cdFx0Zm9yIChjb25zdCBjbHVzdGVyIG9mIGNsdXN0ZXJzKSB7XG5cdFx0XHRpZiAoY2x1c3Rlci5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0Ly8gU2luZ2xlIGV2ZW50IHRha2VzIGZ1bGwgd2lkdGhcblx0XHRcdFx0Y29uc3QgZXZlbnQgPSBjbHVzdGVyWzBdXG5cdFx0XHRcdGNvbnN0IHN0YXJ0VGltZSA9IGV2ZW50LnN0YXJ0LmhvdXIoKSArIGV2ZW50LnN0YXJ0Lm1pbnV0ZSgpIC8gNjBcblx0XHRcdFx0bGV0IGVuZFRpbWUgPSBldmVudC5lbmQuaG91cigpICsgZXZlbnQuZW5kLm1pbnV0ZSgpIC8gNjBcblx0XHRcdFx0aWYgKGVuZFRpbWUgPCBzdGFydFRpbWUpIHtcblx0XHRcdFx0XHQvLyBJZiB0aGUgZXZlbnQgZW5kcyBvbiB0aGUgbmV4dCBkYXksIHNldCBlbmQgdGltZSB0byAyNCBob3Vyc1xuXHRcdFx0XHRcdGVuZFRpbWUgPSAyNFxuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHRvdGFsRHVyYXRpb24gPSBlbmRUaW1lIC0gc3RhcnRUaW1lXG5cdFx0XHRcdGNvbnN0IHRvcCA9IChzdGFydFRpbWUgLyAyNCkgKiAxMDBcblx0XHRcdFx0Y29uc3QgaGVpZ2h0ID0gKHRvdGFsRHVyYXRpb24gLyAyNCkgKiAxMDBcblx0XHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goeyAuLi5ldmVudCwgbGVmdDogMCwgd2lkdGg6IDEwMCwgdG9wLCBoZWlnaHQgfSlcblx0XHRcdFx0Y29udGludWVcblx0XHRcdH1cblxuXHRcdFx0Ly8gTXVsdGlwbGUgZXZlbnRzIC0gdXNlIGxheWVyZWQgcG9zaXRpb25pbmcgYXBwcm9hY2hcblx0XHRcdC8vIFNvcnQgYnkgZHVyYXRpb24gKGxvbmdlc3QgZmlyc3QpLCB0aGVuIGJ5IHN0YXJ0IHRpbWVcblx0XHRcdGNvbnN0IHNvcnRlZEV2ZW50cyA9IFsuLi5jbHVzdGVyXS5zb3J0KChhLCBiKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFEdXJhdGlvbiA9IGEuZW5kLmRpZmYoYS5zdGFydCwgJ21pbnV0ZScpXG5cdFx0XHRcdGNvbnN0IGJEdXJhdGlvbiA9IGIuZW5kLmRpZmYoYi5zdGFydCwgJ21pbnV0ZScpXG5cblx0XHRcdFx0Ly8gTG9uZ2VyIGV2ZW50cyBmaXJzdFxuXHRcdFx0XHRpZiAoYUR1cmF0aW9uICE9PSBiRHVyYXRpb24pIHtcblx0XHRcdFx0XHRyZXR1cm4gYkR1cmF0aW9uIC0gYUR1cmF0aW9uXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiBzYW1lIGR1cmF0aW9uLCBlYXJsaWVyIHN0YXJ0IHRpbWUgZmlyc3Rcblx0XHRcdFx0cmV0dXJuIGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuXHRcdFx0fSlcblxuXHRcdFx0Ly8gUHJvY2VzcyBldmVudHMgd2l0aCBsYXllcmVkIHBvc2l0aW9uaW5nXG5cdFx0XHRjb25zdCB0b3RhbEV2ZW50cyA9IHNvcnRlZEV2ZW50cy5sZW5ndGhcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIGR5bmFtaWMgb2Zmc2V0IGJhc2VkIG9uIG51bWJlciBvZiBvdmVybGFwcGluZyBldmVudHNcblx0XHRcdC8vIEZld2VyIGV2ZW50cyA9IGxhcmdlciBpbmRpdmlkdWFsIG9mZnNldHMsIG1vcmUgZXZlbnRzID0gc21hbGxlciBvZmZzZXRzXG5cdFx0XHRsZXQgbWF4T2Zmc2V0OiBudW1iZXJcblx0XHRcdGlmICh0b3RhbEV2ZW50cyA9PT0gMikge1xuXHRcdFx0XHRtYXhPZmZzZXQgPSAyNSAvLyAyNSUgb2Zmc2V0IGZvciAyIGV2ZW50c1xuXHRcdFx0fSBlbHNlIGlmICh0b3RhbEV2ZW50cyA9PT0gMykge1xuXHRcdFx0XHRtYXhPZmZzZXQgPSA1MCAvLyA1MCUgdG90YWwgZm9yIDMgZXZlbnRzICgyNSUgZWFjaClcblx0XHRcdH0gZWxzZSBpZiAodG90YWxFdmVudHMgPT09IDQpIHtcblx0XHRcdFx0bWF4T2Zmc2V0ID0gNjAgLy8gNjAlIHRvdGFsIGZvciA0IGV2ZW50cyAoMjAlIGVhY2gpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtYXhPZmZzZXQgPSA3MCAvLyA3MCUgdG90YWwgZm9yIDUrIGV2ZW50c1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBvZmZzZXRQZXJFdmVudCA9IHRvdGFsRXZlbnRzID4gMSA/IG1heE9mZnNldCAvICh0b3RhbEV2ZW50cyAtIDEpIDogMFxuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZEV2ZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBldmVudCA9IHNvcnRlZEV2ZW50c1tpXVxuXHRcdFx0XHRjb25zdCBzdGFydFRpbWUgPSBldmVudC5zdGFydC5ob3VyKCkgKyBldmVudC5zdGFydC5taW51dGUoKSAvIDYwXG5cdFx0XHRcdGxldCBlbmRUaW1lID0gZXZlbnQuZW5kLmhvdXIoKSArIGV2ZW50LmVuZC5taW51dGUoKSAvIDYwXG5cblx0XHRcdFx0aWYgKGVuZFRpbWUgPCBzdGFydFRpbWUpIHtcblx0XHRcdFx0XHQvLyBJZiB0aGUgZXZlbnQgZW5kcyBvbiB0aGUgbmV4dCBkYXksIHNldCBlbmQgdGltZSB0byAyNCBob3Vyc1xuXHRcdFx0XHRcdGVuZFRpbWUgPSAyNFxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgdG90YWxEdXJhdGlvbiA9IGVuZFRpbWUgLSBzdGFydFRpbWVcblx0XHRcdFx0Y29uc3QgdG9wID0gKHN0YXJ0VGltZSAvIDI0KSAqIDEwMFxuXHRcdFx0XHRjb25zdCBoZWlnaHQgPSAodG90YWxEdXJhdGlvbiAvIDI0KSAqIDEwMFxuXG5cdFx0XHRcdC8vIENhbGN1bGF0ZSBwb3NpdGlvbmluZyBiYXNlZCBvbiBsYXllciBhbmQgdG90YWwgZXZlbnRzXG5cdFx0XHRcdGxldCBsZWZ0OiBudW1iZXJcblx0XHRcdFx0bGV0IHdpZHRoOiBudW1iZXJcblx0XHRcdFx0bGV0IHpJbmRleDogbnVtYmVyXG5cblx0XHRcdFx0aWYgKGkgPT09IDApIHtcblx0XHRcdFx0XHQvLyBGaXJzdCBldmVudCAobG9uZ2VzdCkgdGFrZXMgZnVsbCB3aWR0aCBhdCBib3R0b21cblx0XHRcdFx0XHRsZWZ0ID0gMFxuXHRcdFx0XHRcdHdpZHRoID0gMTAwXG5cdFx0XHRcdFx0ekluZGV4ID0gMVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIFN1YnNlcXVlbnQgZXZlbnRzIGFyZSBvZmZzZXQgZHluYW1pY2FsbHkgYmFzZWQgb24gdG90YWwgZXZlbnQgY291bnRcblx0XHRcdFx0XHRsZWZ0ID0gb2Zmc2V0UGVyRXZlbnQgKiBpXG5cdFx0XHRcdFx0d2lkdGggPSAxMDAgLSBsZWZ0IC8vIFJlbWFpbmluZyB3aWR0aFxuXHRcdFx0XHRcdHpJbmRleCA9IGkgKyAxIC8vIEhpZ2hlciB6LWluZGV4IGZvciBldmVudHMgb24gdG9wXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRwcm9jZXNzZWRFdmVudHMucHVzaCh7XG5cdFx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdFx0bGVmdCxcblx0XHRcdFx0XHR3aWR0aCxcblx0XHRcdFx0XHR0b3AsXG5cdFx0XHRcdFx0aGVpZ2h0LFxuXHRcdFx0XHRcdHpJbmRleCxcblx0XHRcdFx0fSlcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcHJvY2Vzc2VkRXZlbnRzXG5cdH0sIFtkYXksIGdldEV2ZW50c0ZvckRhdGVSYW5nZV0pXG5cblx0cmV0dXJuIHRvZGF5RXZlbnRzXG59XG4iLAogICAgImltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgeyB1c2VQcm9jZXNzZWREYXlFdmVudHMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZERheUV2ZW50cydcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIERheUV2ZW50c0xheWVyUHJvcHMge1xuXHRkYXk6IGRheWpzLkRheWpzIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBsYXllciByZXByZXNlbnRzXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IERheUV2ZW50c0xheWVyOiBSZWFjdC5GQzxEYXlFdmVudHNMYXllclByb3BzPiA9ICh7XG5cdGRheSxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcbn0pID0+IHtcblx0Y29uc3QgdG9kYXlFdmVudHMgPSB1c2VQcm9jZXNzZWREYXlFdmVudHMoeyBkYXkgfSlcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkfVxuXHRcdFx0Y2xhc3NOYW1lPVwicG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSBpbnNldC0wIHotMTBcIlxuXHRcdD5cblx0XHRcdHt0b2RheUV2ZW50cy5tYXAoKGV2ZW50LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBldmVudEtleSA9IGBldmVudC0ke2V2ZW50LmlkfS0ke2luZGV4fS0ke2RheS50b0lTT1N0cmluZygpfWBcblx0XHRcdFx0Y29uc3QgaXNTaG9ydEV2ZW50ID0gZXZlbnQuZW5kLmRpZmYoZXZlbnQuc3RhcnQsICdtaW51dGUnKSA8PSAxNVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0a2V5PXtgJHtldmVudEtleX0td3JhcHBlcmB9XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJhYnNvbHV0ZVwiXG5cdFx0XHRcdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRcdFx0XHRsZWZ0OiBgJHtldmVudC5sZWZ0fSVgLFxuXHRcdFx0XHRcdFx0XHR3aWR0aDogYGNhbGMoJHtldmVudC53aWR0aH0lIC0gdmFyKC0tc3BhY2luZykgKiAyKWAsXG5cdFx0XHRcdFx0XHRcdHRvcDogYCR7ZXZlbnQudG9wfSVgLFxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IGAke2V2ZW50LmhlaWdodH0lYCxcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PERyYWdnYWJsZUV2ZW50XG5cdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17ZXZlbnRLZXl9XG5cdFx0XHRcdFx0XHRcdGV2ZW50PXtldmVudH1cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbigncG9pbnRlci1ldmVudHMtYXV0byBhYnNvbHV0ZScsIHtcblx0XHRcdFx0XHRcdFx0XHQnWyZfcF06dGV4dC1bMTBweF0gWyZfcF06bXQtMCc6IGlzU2hvcnRFdmVudCxcblx0XHRcdFx0XHRcdFx0fSl9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIERheUhlYWRlclByb3BzIHtcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBEYXlIZWFkZXI6IFJlYWN0LkZDPERheUhlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHN0aWNreVZpZXdIZWFkZXIsIHZpZXdIZWFkZXJDbGFzc05hbWUgfSA9XG5cdFx0dXNlQ2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgaXNUb2RheSA9IGN1cnJlbnREYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5JylcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGRhdGEtdGVzdGlkPVwiZGF5LWhlYWRlclwiXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLWIgcC0yIGJvcmRlci14Jyxcblx0XHRcdFx0c3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMjAnLFxuXHRcdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0PlxuXHRcdFx0PEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuXHRcdFx0XHQ8bW90aW9uLmRpdlxuXHRcdFx0XHRcdGtleT17Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG5cdFx0XHRcdFx0aW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cblx0XHRcdFx0XHRhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cblx0XHRcdFx0XHRleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuXHRcdFx0XHRcdHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciB0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCBzbTp0ZXh0LXhsJyxcblx0XHRcdFx0XHRcdGlzVG9kYXkgJiYgJ3RleHQtcHJpbWFyeSdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwieHM6aW5saW5lIGhpZGRlblwiPlxuXHRcdFx0XHRcdFx0e2N1cnJlbnREYXRlLmZvcm1hdCgnZGRkZCwgJyl9XG5cdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdHtjdXJyZW50RGF0ZS5mb3JtYXQoJ01NTU0gRCwgWVlZWScpfVxuXHRcdFx0XHRcdHtpc1RvZGF5ICYmIChcblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgbWwtMiByb3VuZGVkLWZ1bGwgcHgtMSBweS0wLjUgdGV4dC14cyBzbTpweC0yIHNtOnRleHQtc21cIj5cblx0XHRcdFx0XHRcdFx0VG9kYXlcblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ8L21vdGlvbi5kaXY+XG5cdFx0XHQ8L0FuaW1hdGVQcmVzZW5jZT5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuLy8gSG91cnMgdG8gZGlzcGxheSAoYWxsIDI0IGhvdXJzIG9mIHRoZSBkYXkpXG5jb25zdCBob3VycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBpKSA9PiBpKS5tYXAoKGhvdXIpID0+IHtcblx0cmV0dXJuIGRheWpzKCkuaG91cihob3VyKS5taW51dGUoMClcbn0pXG5cbmludGVyZmFjZSBEYXlUaW1lQ29sUHJvcHMge1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IERheVRpbWVDb2w6IFJlYWN0LkZDPERheVRpbWVDb2xQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnRMb2NhbGUsIHRpbWVGb3JtYXQgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRkYXRhLXRlc3RpZD1cImRheS10aW1lLWNvbFwiXG5cdFx0XHRjbGFzc05hbWU9e2Bjb2wtc3Bhbi0yIGgtZnVsbCBtZDpjb2wtc3Bhbi0xICR7Y2xhc3NOYW1lfWB9XG5cdFx0PlxuXHRcdFx0e2hvdXJzLm1hcCgodGltZSkgPT4gKFxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0a2V5PXt0aW1lLmZvcm1hdCgnSEg6bW0nKX1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YGRheS10aW1lLWhvdXItJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtWzYwcHhdIGJvcmRlci1iIHRleHQtcmlnaHRcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHByLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzXCI+XG5cdFx0XHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0XHRcdGhvdXI6ICdudW1lcmljJyxcblx0XHRcdFx0XHRcdFx0aG91cjEyOiB0aW1lRm9ybWF0ID09PSAnMTItaG91cicsXG5cdFx0XHRcdFx0XHR9KS5mb3JtYXQodGltZS50b0RhdGUoKSl9XG5cdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCkpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFsbEV2ZW50RGlhbG9nIH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1ldmVudHMtZGlhbG9nJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBnZXRNb250aFdlZWtzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IERheUNlbGwgfSBmcm9tICcuL2RheS1jZWxsJ1xuaW1wb3J0IHsgTW9udGhIZWFkZXIgfSBmcm9tICcuL21vbnRoLWhlYWRlcidcbmltcG9ydCB0eXBlIHsgTW9udGhWaWV3UHJvcHMsIFNlbGVjdGVkRGF5RXZlbnRzIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7IFdlZWtFdmVudHNMYXllciB9IGZyb20gJy4vd2Vlay1ldmVudHMtbGF5ZXInXG5cbmV4cG9ydCBjb25zdCBNb250aFZpZXc6IFJlYWN0LkZDPE1vbnRoVmlld1Byb3BzPiA9ICh7IGRheU1heEV2ZW50cyA9IDMgfSkgPT4ge1xuXHRjb25zdCBhbGxFdmVudHNEaWFsb2dSZWYgPSBSZWFjdC51c2VSZWY8e1xuXHRcdG9wZW46ICgpID0+IHZvaWRcblx0XHRjbG9zZTogKCkgPT4gdm9pZFxuXHRcdHNldFNlbGVjdGVkRGF5RXZlbnRzOiAoZGF5RXZlbnRzOiBTZWxlY3RlZERheUV2ZW50cykgPT4gdm9pZFxuXHR9PihudWxsKVxuXG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHdlZWtzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRNb250aFdlZWtzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtZnVsbCBmbGV4LWNvbFwiIGRhdGEtdGVzdGlkPVwibW9udGgtdmlld1wiPlxuXHRcdFx0PE1vbnRoSGVhZGVyIGNsYXNzTmFtZT1cImgtWzNyZW1dXCIgLz5cblxuXHRcdFx0PFNjcm9sbEFyZWFcblx0XHRcdFx0Y2xhc3NOYW1lPVwib3ZlcmZsb3ctYXV0byBoLVtjYWxjKDEwMCUtM3JlbSldIHotMzBcIlxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cIm1vbnRoLXNjcm9sbC1hcmVhXCJcblx0XHRcdFx0dmlld1BvcnRQcm9wcz17eyBjbGFzc05hbWU6ICcqOmZsZXghICo6ZmxleC1jb2wgKjptaW4taC1mdWxsJyB9fVxuXHRcdFx0PlxuXHRcdFx0XHQ8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG5cdFx0XHRcdFx0PG1vdGlvbi5kaXZcblx0XHRcdFx0XHRcdGtleT17Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG5cdFx0XHRcdFx0XHRpbml0aWFsPXt7IG9wYWNpdHk6IDAgfX1cblx0XHRcdFx0XHRcdGFuaW1hdGU9e3sgb3BhY2l0eTogMSB9fVxuXHRcdFx0XHRcdFx0ZXhpdD17eyBvcGFjaXR5OiAwIH19XG5cdFx0XHRcdFx0XHR0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjI1LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwicmVsYXRpdmUgZ3JpZCBoLWZ1bGwgZ3JpZC1jb2xzLTcgZ3JpZC1yb3dzLTYgb3ZlcmZsb3ctYXV0byBmbGV4LTFcIlxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJtb250aC1jYWxlbmRhci1ncmlkXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7d2Vla3MubWFwKChkYXlzLCB3ZWVrSW5kZXgpID0+IChcblx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdGtleT17YHdlZWstJHt3ZWVrSW5kZXh9YH1cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJyZWxhdGl2ZSBjb2wtc3Bhbi03IGdyaWQgZ3JpZC1jb2xzLTdcIlxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgd2Vlay1yb3ctJHt3ZWVrSW5kZXh9YH1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHtkYXlzLm1hcCgoZGF5LCBkYXlJbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PERheUNlbGxcblx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGluZGV4PXtkYXlJbmRleH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF5PXtkYXl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJib3JkZXItciBib3JkZXItYiBmaXJzdDpib3JkZXItbFwiXG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdCkpfVxuXG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PFdlZWtFdmVudHNMYXllciBkYXlzPXtkYXlzfSAvPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdDwvbW90aW9uLmRpdj5cblx0XHRcdFx0PC9BbmltYXRlUHJlc2VuY2U+XG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIC8+XG5cdFx0XHQ8L1Njcm9sbEFyZWE+XG5cblx0XHRcdDxBbGxFdmVudERpYWxvZyByZWY9e2FsbEV2ZW50c0RpYWxvZ1JlZn0gLz5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHtcblx0RGlhbG9nLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGVkRGF5RXZlbnRzIHtcblx0ZGF5OiBkYXlqcy5EYXlqc1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxufVxuXG5pbnRlcmZhY2UgQWxsRXZlbnREaWFsb2dQcm9wcyB7XG5cdHJlZjogUmVhY3QuUmVmPHtcblx0XHRvcGVuOiAoKSA9PiB2b2lkXG5cdFx0Y2xvc2U6ICgpID0+IHZvaWRcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcblx0fT5cbn1cblxuZXhwb3J0IGNvbnN0IEFsbEV2ZW50RGlhbG9nOiBSZWFjdC5GQzxBbGxFdmVudERpYWxvZ1Byb3BzPiA9ICh7IHJlZiB9KSA9PiB7XG5cdGNvbnN0IFtkaWFsb2dPcGVuLCBzZXREaWFsb2dPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXHRjb25zdCBbc2VsZWN0ZWREYXlFdmVudHMsIHNldFNlbGVjdGVkRGF5RXZlbnRzXSA9XG5cdFx0dXNlU3RhdGU8U2VsZWN0ZWREYXlFdmVudHMgfCBudWxsPihudWxsKVxuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKHN0YXRlKSA9PiAoe1xuXHRcdGN1cnJlbnREYXRlOiBzdGF0ZS5jdXJyZW50RGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlazogc3RhdGUuZmlyc3REYXlPZldlZWssXG5cdH0pKVxuXG5cdHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuXHRcdG9wZW46ICgpID0+IHNldERpYWxvZ09wZW4odHJ1ZSksXG5cdFx0Y2xvc2U6ICgpID0+IHNldERpYWxvZ09wZW4oZmFsc2UpLFxuXHRcdHNldFNlbGVjdGVkRGF5RXZlbnRzOiAoZGF5RXZlbnRzOiBTZWxlY3RlZERheUV2ZW50cykgPT5cblx0XHRcdHNldFNlbGVjdGVkRGF5RXZlbnRzKGRheUV2ZW50cyksXG5cdH0pKVxuXG5cdC8vIEdldCBzdGFydCBkYXRlIGZvciB0aGUgY3VycmVudCBtb250aCB2aWV3IGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG5cdGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcblxuXHQvLyBDYWxjdWxhdGUgdGhlIGZpcnN0IGRheSBvZiB0aGUgY2FsZW5kYXIgZ3JpZCBjb3JyZWN0bHlcblx0Ly8gRmluZCB0aGUgZmlyc3QgZGF5IG9mIHdlZWsgKGUuZy4gU3VuZGF5IG9yIE1vbmRheSkgdGhhdCBjb21lcyBiZWZvcmUgb3Igb24gdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGhcblx0bGV0IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gZmlyc3REYXlPZk1vbnRoLmNsb25lKClcblx0d2hpbGUgKGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLmRheSgpICE9PSBmaXJzdERheU9mV2Vlaykge1xuXHRcdGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuc3VidHJhY3QoMSwgJ2RheScpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2cgb3Blbj17ZGlhbG9nT3Blbn0gb25PcGVuQ2hhbmdlPXtzZXREaWFsb2dPcGVufT5cblx0XHRcdDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cIm1heC1oLVs4MHZoXSBtYXgtdy1tZCBvdmVyZmxvdy15LWF1dG9cIj5cblx0XHRcdFx0PERpYWxvZ0hlYWRlcj5cblx0XHRcdFx0XHQ8RGlhbG9nVGl0bGU+XG5cdFx0XHRcdFx0XHR7c2VsZWN0ZWREYXlFdmVudHM/LmRheS5mb3JtYXQoJ01NTU0gRCwgWVlZWScpfVxuXHRcdFx0XHRcdDwvRGlhbG9nVGl0bGU+XG5cdFx0XHRcdDwvRGlhbG9nSGVhZGVyPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIm10LTQgc3BhY2UteS0zXCI+XG5cdFx0XHRcdFx0e3NlbGVjdGVkRGF5RXZlbnRzPy5ldmVudHMubWFwKChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PERyYWdnYWJsZUV2ZW50XG5cdFx0XHRcdFx0XHRcdFx0ZWxlbWVudElkPXtgYWxsLWV2ZW50cy1kaWFsb2ctZXZlbnQtJCR7ZXZlbnQuaWR9YH0gLy8gVXNlIGV2ZW50IElEIGZvciB1bmlxdWUgaWRlbnRpZmljYXRpb25cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2V2ZW50LmlkfVxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50PXtldmVudH1cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJyZWxhdGl2ZSBteS0xIGgtWzMwcHhdXCJcblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L0RpYWxvZ0NvbnRlbnQ+XG5cdFx0PC9EaWFsb2c+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQWxsRXZlbnREaWFsb2cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWV2ZW50cy1kaWFsb2cnXG5pbXBvcnQgeyBEcm9wcGFibGVDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2Ryb3BwYWJsZS1jZWxsJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBpc0J1c2luZXNzSG91ciB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBTZWxlY3RlZERheUV2ZW50cyB9IGZyb20gJy4vdHlwZXMnXG5cbmludGVyZmFjZSBEYXlDZWxsUHJvcHMge1xuXHRpbmRleDogbnVtYmVyIC8vIEluZGV4IG9mIHRoZSBkYXkgaW4gdGhlIHdlZWsgKDAtNilcblx0ZGF5OiBkYXlqcy5EYXlqc1xuXHRkYXlNYXhFdmVudHM/OiBudW1iZXJcblx0Y2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGNsYXNzTmFtZSBmb3IgY3VzdG9tIHN0eWxpbmdcbn1cblxuZXhwb3J0IGNvbnN0IERheUNlbGw6IFJlYWN0LkZDPERheUNlbGxQcm9wcz4gPSAoe1xuXHRpbmRleCxcblx0ZGF5LFxuXHRjbGFzc05hbWUgPSAnJyxcbn0pID0+IHtcblx0Y29uc3QgYWxsRXZlbnRzRGlhbG9nUmVmID0gUmVhY3QudXNlUmVmPHtcblx0XHRvcGVuOiAoKSA9PiB2b2lkXG5cdFx0Y2xvc2U6ICgpID0+IHZvaWRcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcblx0fT4obnVsbClcblx0Y29uc3Qge1xuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGRheU1heEV2ZW50cyA9IDAsXG5cdFx0dCxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHR9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgdG9kYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoXG5cdFx0ZGF5LnN0YXJ0T2YoJ2RheScpLFxuXHRcdGRheS5lbmRPZignZGF5Jylcblx0KVxuXG5cdC8vIEdldCBzdGFydCBkYXRlIGZvciB0aGUgY3VycmVudCBtb250aCB2aWV3IGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG5cdGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcblxuXHQvLyBDYWxjdWxhdGUgdGhlIGZpcnN0IGRheSBvZiB0aGUgY2FsZW5kYXIgZ3JpZCBjb3JyZWN0bHlcblx0Ly8gRmluZCB0aGUgZmlyc3QgZGF5IG9mIHdlZWsgKGUuZy4gU3VuZGF5IG9yIE1vbmRheSkgdGhhdCBjb21lcyBiZWZvcmUgb3Igb24gdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGhcblx0bGV0IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gZmlyc3REYXlPZk1vbnRoLmNsb25lKClcblx0d2hpbGUgKGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLmRheSgpICE9PSBmaXJzdERheU9mV2Vlaykge1xuXHRcdGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuc3VidHJhY3QoMSwgJ2RheScpXG5cdH1cblxuXHQvLyBIYW5kbGVyIGZvciBzaG93aW5nIGFsbCBldmVudHMgaW4gYSBkaWFsb2dcblx0Y29uc3Qgc2hvd0FsbEV2ZW50cyA9IChkYXk6IGRheWpzLkRheWpzLCBldmVudHM6IENhbGVuZGFyRXZlbnRbXSkgPT4ge1xuXHRcdGFsbEV2ZW50c0RpYWxvZ1JlZi5jdXJyZW50Py5zZXRTZWxlY3RlZERheUV2ZW50cyh7XG5cdFx0XHRkYXksXG5cdFx0XHRldmVudHMsXG5cdFx0fSlcblx0XHRhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8ub3BlbigpXG5cdH1cblxuXHRjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5Jylcblx0Y29uc3QgaXNDdXJyZW50TW9udGggPSBkYXkubW9udGgoKSA9PT0gY3VycmVudERhdGUubW9udGgoKVxuXHRjb25zdCBpc0xhc3RDb2x1bW4gPSBpbmRleCA9PT0gNiAvLyBTYXR1cmRheSBpcyB0aGUgbGFzdCBjb2x1bW4gaW4gYSB3ZWVrXG5cblx0Y29uc3QgaGlkZGVuRXZlbnRzQ291bnQgPSB0b2RheUV2ZW50cy5sZW5ndGggLSBkYXlNYXhFdmVudHNcblx0Y29uc3QgaGFzSGlkZGVuRXZlbnRzID0gaGlkZGVuRXZlbnRzQ291bnQgPiAwXG5cblx0Y29uc3QgaXNCdXNpbmVzcyA9IGlzQnVzaW5lc3NIb3VyKHtcblx0XHRkYXRlOiBkYXksXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0fSlcblxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8RHJvcHBhYmxlQ2VsbFxuXHRcdFx0XHRpZD17YGRheS1jZWxsLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG5cdFx0XHRcdHR5cGU9XCJkYXktY2VsbFwiXG5cdFx0XHRcdGRhdGEtdGVzdGlkPXtgZGF5LWNlbGwtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cblx0XHRcdFx0ZGF0ZT17ZGF5fVxuXHRcdFx0XHRkaXNhYmxlZD17IWlzQnVzaW5lc3MgfHwgIWlzQ3VycmVudE1vbnRofVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdjdXJzb3ItcG9pbnRlciBvdmVyZmxvdy1jbGlwIHAtMSBob3ZlcjpiZy1hY2NlbnQgbWluLWgtWzYwcHhdJyxcblx0XHRcdFx0XHRpc0xhc3RDb2x1bW4gJiYgJ2JvcmRlci1yLTAnLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0PlxuXHRcdFx0XHR7LyogQWJzb2x1dGVseSBwb3NpdGlvbmVkIG11bHRpLWRheSBiYXJzIChHb29nbGUgQ2FsZW5kYXIgc3R5bGUpICovfVxuXG5cdFx0XHRcdHsvKiBTaW5nbGUtZGF5IGV2ZW50cyBjb250YWluZXIgcG9zaXRpb25lZCBiZWxvdyBtdWx0aS1kYXkgZXZlbnRzICovfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTFcIj5cblx0XHRcdFx0XHR7LyogRGF5IG51bWJlciAqL31cblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHQnZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cyBzbTpoLTYgc206dy02Jyxcblx0XHRcdFx0XHRcdFx0aXNUb2RheSAmJiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBmb250LW1lZGl1bSdcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0e0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwgeyBkYXk6ICdudW1lcmljJyB9KS5mb3JtYXQoXG5cdFx0XHRcdFx0XHRcdGRheS50b0RhdGUoKVxuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdHsvKiBSZW5kZXIgcGxhY2Vob2xkZXJzIGZvciBldmVudHMgdGhhdCBvY2N1ciB0b2RheSBzbyB0aGF0IHRoZSBjZWxsIGhlaWdodCBpcyBhY2NvcmRpbmcgdG8gZGF5TWF4RXZlbnRzLiAqL31cblx0XHRcdFx0XHR7dG9kYXlFdmVudHMuc2xpY2UoMCwgZGF5TWF4RXZlbnRzKS5tYXAoKGV2ZW50LCByb3dJbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRrZXk9e2BlbXB0eS0ke3Jvd0luZGV4fWB9XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtWzIwcHhdIHctZnVsbFwiXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtldmVudD8udGl0bGV9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCkpfVxuXG5cdFx0XHRcdFx0ey8qIFNob3cgbW9yZSBldmVudHMgYnV0dG9uIHdpdGggYWNjdXJhdGUgY291bnQgKi99XG5cdFx0XHRcdFx0e2hhc0hpZGRlbkV2ZW50cyAmJiAoXG5cdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmQgY3Vyc29yLXBvaW50ZXIgdGV4dC1bMTBweF0gd2hpdGVzcGFjZS1ub3dyYXAgc206dGV4dC14cyBtdC0xXCJcblx0XHRcdFx0XHRcdFx0b25DbGljaz17KGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cblx0XHRcdFx0XHRcdFx0XHRzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdG9uS2V5RG93bj17KGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoZS5rZXkgPT09ICdFbnRlcicgfHwgZS5rZXkgPT09ICcgJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHR0YWJJbmRleD17MH1cblx0XHRcdFx0XHRcdFx0Ly8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci10YWctb3Zlci1yb2xlXG5cdFx0XHRcdFx0XHRcdHJvbGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQre2hpZGRlbkV2ZW50c0NvdW50fSB7dCgnbW9yZScpfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L0Ryb3BwYWJsZUNlbGw+XG5cblx0XHRcdHsvKiBEaWFsb2cgZm9yIHNob3dpbmcgYWxsIGV2ZW50cyAqL31cblx0XHRcdDxBbGxFdmVudERpYWxvZyByZWY9e2FsbEV2ZW50c0RpYWxvZ1JlZn0gLz5cblx0XHQ8Lz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgTW9udGhIZWFkZXJQcm9wcyB7XG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgTW9udGhIZWFkZXI6IFJlYWN0LkZDPE1vbnRoSGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcblx0Y29uc3Qge1xuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHR9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHQvLyBSZW9yZGVyIHdlZWsgZGF5cyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuXHRjb25zdCB3ZWVrRGF5cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGNvbnN0IGRheXMgPSBkYXlqcy53ZWVrZGF5c1Nob3J0KCkubWFwKChkYXkpID0+IGRheS50b0xvd2VyQ2FzZSgpKVxuXG5cdFx0Ly8gUm90YXRlIHRoZSBhcnJheSBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZmlyc3REYXlPZldlZWs7IGkrKykge1xuXHRcdFx0Y29uc3QgZGF5VG9Nb3ZlID0gZGF5cy5zaGlmdCgpXG5cdFx0XHRpZiAoZGF5VG9Nb3ZlKSB7XG5cdFx0XHRcdGRheXMucHVzaChkYXlUb01vdmUpXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHsgZGF5cyB9XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuXHR9LCBbZmlyc3REYXlPZldlZWtdKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2dyaWQgZ3JpZC1jb2xzLTcgYm9yZGVyLWInLFxuXHRcdFx0XHRzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMCcsXG5cdFx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtdGVzdGlkPVwibW9udGgtaGVhZGVyXCJcblx0XHQ+XG5cdFx0XHR7d2Vla0RheXMuZGF5cy5tYXAoKHdlZWtEYXksIGluZGV4KSA9PiAoXG5cdFx0XHRcdDxBbmltYXRlUHJlc2VuY2Uga2V5PXt3ZWVrRGF5fSBtb2RlPVwid2FpdFwiPlxuXHRcdFx0XHRcdDxtb3Rpb24uZGl2XG5cdFx0XHRcdFx0XHRrZXk9e3dlZWtEYXl9XG5cdFx0XHRcdFx0XHRpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuXHRcdFx0XHRcdFx0YW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG5cdFx0XHRcdFx0XHRleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuXHRcdFx0XHRcdFx0dHJhbnNpdGlvbj17e1xuXHRcdFx0XHRcdFx0XHRkdXJhdGlvbjogMC4yNSxcblx0XHRcdFx0XHRcdFx0ZWFzZTogJ2Vhc2VJbk91dCcsXG5cdFx0XHRcdFx0XHRcdGRlbGF5OiBpbmRleCAqIDAuMDUsXG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwicHktMiB0ZXh0LWNlbnRlciBmb250LW1lZGl1bSBib3JkZXItciBmaXJzdDpib3JkZXItbFwiXG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHdlZWtkYXktaGVhZGVyLSR7d2Vla0RheX1gfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc20gY2FwaXRhbGl6ZVwiPnt3ZWVrRGF5fTwvc3Bhbj5cblx0XHRcdFx0XHQ8L21vdGlvbi5kaXY+XG5cdFx0XHRcdDwvQW5pbWF0ZVByZXNlbmNlPlxuXHRcdFx0KSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHdlZWtPZlllYXIgZnJvbSAnZGF5anMvcGx1Z2luL3dlZWtPZlllYXInXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IFdlZWtBbGxEYXlSb3cgfSBmcm9tICcuL3dlZWstYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBXZWVrSGVhZGVyIH0gZnJvbSAnLi93ZWVrLWhlYWRlcidcbmltcG9ydCB7IFdlZWtUaW1lR3JpZCB9IGZyb20gJy4vd2Vlay10aW1lLWdyaWQnXG5cbi8vIEFkZCB3ZWVrT2ZZZWFyIHBsdWdpbiB0byBkYXlqc1xuZGF5anMuZXh0ZW5kKHdlZWtPZlllYXIpXG5cbmNvbnN0IFdlZWtWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJ3ZWVrLXZpZXdcIj5cblx0XHRcdHsvKiBXZWVrIGhlYWRlciByb3cgLSBmaXhlZCAqL31cblx0XHRcdDxXZWVrSGVhZGVyIGNsYXNzTmFtZT1cImgtWzVyZW1dXCIgLz5cblxuXHRcdFx0ey8qIFNjcm9sbGFibGUgdGltZSBncmlkICovfVxuXHRcdFx0PFNjcm9sbEFyZWFcblx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBvdmVyZmxvdy1hdXRvIGgtW2NhbGMoMTAwJS01cmVtKV1cIlxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cIndlZWstc2Nyb2xsLWFyZWFcIlxuXHRcdFx0PlxuXHRcdFx0XHR7LyogQWxsLWRheSBldmVudHMgcm93IC0gZHluYW1pYyBoZWlnaHQgYmFzZWQgb24gY29udGVudCAqL31cblx0XHRcdFx0PFdlZWtBbGxEYXlSb3cgLz5cblx0XHRcdFx0PFdlZWtUaW1lR3JpZCAvPlxuXHRcdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiAvPlxuXHRcdFx0PC9TY3JvbGxBcmVhPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFdlZWtWaWV3XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcm9wcGFibGUtY2VsbCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgaXNCdXNpbmVzc0hvdXIgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2J1c2luZXNzLWhvdXJzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsgV2Vla0V2ZW50c0xheWVyIH0gZnJvbSAnLi4vbW9udGgtdmlldy93ZWVrLWV2ZW50cy1sYXllcidcblxuZXhwb3J0IGNvbnN0IFdlZWtBbGxEYXlSb3c6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaywgdCwgYnVzaW5lc3NIb3VycyB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaylcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLVthdXRvXzFmcl8xZnJfMWZyXzFmcl8xZnJfMWZyXzFmcl0gZ3JpZC1yb3dzLTEgcmVsYXRpdmVcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJ3ZWVrLWFsbC1kYXktcm93XCJcblx0XHQ+XG5cdFx0XHR7LyogTGVmdCBsYWJlbCBmb3IgYWxsLWRheSBldmVudHMgKi99XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctMTYgZmxleCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgYm9yZGVyLXggYm9yZGVyLWIgcHgtMSBtaW4taC0xNlwiPlxuXHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1bMTBweF0gd2hpdGVzcGFjZS1ub3dyYXAgc206dGV4dC14c1wiPlxuXHRcdFx0XHRcdHt0KCdhbGxEYXknKX1cblx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdHsvKiBEcm9wcGFibGUgY2VsbHMgZm9yIGVhY2ggZGF5ICovfVxuXHRcdFx0e3dlZWtEYXlzLm1hcCgoZGF5KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGlzQnVzaW5lc3MgPSBpc0J1c2luZXNzSG91cih7IGRhdGU6IGRheSwgYnVzaW5lc3NIb3VycyB9KVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PERyb3BwYWJsZUNlbGxcblx0XHRcdFx0XHRcdGtleT17YGFsbC1kYXktJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cblx0XHRcdFx0XHRcdGlkPXtgYWxsLWRheS1jZWxsLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG5cdFx0XHRcdFx0XHR0eXBlPVwiZGF5LWNlbGxcIlxuXHRcdFx0XHRcdFx0ZGF0ZT17ZGF5fVxuXHRcdFx0XHRcdFx0YWxsRGF5PXt0cnVlfVxuXHRcdFx0XHRcdFx0ZGlzYWJsZWQ9eyFpc0J1c2luZXNzfVxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaG92ZXI6YmctYWNjZW50IGgtZnVsbCBmbGV4LTEgY3Vyc29yLXBvaW50ZXIgYm9yZGVyLXIgYm9yZGVyLWJcIlxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXG5cdFx0XHR7LyogQWxsLWRheSBldmVudCBibG9ja3MgKi99XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgei0xMCBjb2wtc3Bhbi03IGNvbC1zdGFydC0yXCI+XG5cdFx0XHRcdDxXZWVrRXZlbnRzTGF5ZXIgZGF5cz17d2Vla0RheXN9IGRheU51bWJlckhlaWdodD17MH0gYWxsRGF5IC8+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5pbnRlcmZhY2UgV2Vla0hlYWRlclByb3BzIHtcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBXZWVrSGVhZGVyOiBSZWFjdC5GQzxXZWVrSGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcblx0Y29uc3Qge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0c2VsZWN0RGF0ZSxcblx0XHRvcGVuRXZlbnRGb3JtLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdHN0aWNreVZpZXdIZWFkZXIsXG5cdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHR0LFxuXHR9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaylcblxuXHRyZXR1cm4gKFxuXHRcdC8vIGNzcyBncmlkIGhlYWRlciB3aXRoIGxlZiBjb3JuZXIgY2VsbCBzaG9ydGVyIHRoYW4gdGhlIHJlc3Rcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZ3JpZCBncmlkLWNvbHMtW2F1dG9fMWZyXzFmcl8xZnJfMWZyXzFmcl8xZnJfMWZyXSBncmlkLXJvd3MtMScsXG5cdFx0XHRcdHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIwJyxcblx0XHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJ3ZWVrLWhlYWRlclwiXG5cdFx0PlxuXHRcdFx0ey8qIENvcm5lciBjZWxsIHdpdGggd2VlayBudW1iZXIgKi99XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImNvbC1zcGFuLTEgdy0xNiBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLXggYm9yZGVyLWIgcC0yXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC14c1wiPnt0KCd3ZWVrJyl9PC9zcGFuPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e2N1cnJlbnREYXRlLndlZWsoKX08L3NwYW4+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdHsvKiBEYXkgaGVhZGVyIGNlbGxzICovfVxuXHRcdFx0e3dlZWtEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5JylcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxBbmltYXRlUHJlc2VuY2Uga2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9IG1vZGU9XCJ3YWl0XCI+XG5cdFx0XHRcdFx0XHQ8bW90aW9uLmRpdlxuXHRcdFx0XHRcdFx0XHRrZXk9e2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cblx0XHRcdFx0XHRcdFx0aW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cblx0XHRcdFx0XHRcdFx0YW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG5cdFx0XHRcdFx0XHRcdGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG5cdFx0XHRcdFx0XHRcdHRyYW5zaXRpb249e3tcblx0XHRcdFx0XHRcdFx0XHRkdXJhdGlvbjogMC4yNSxcblx0XHRcdFx0XHRcdFx0XHRlYXNlOiAnZWFzZUluT3V0Jyxcblx0XHRcdFx0XHRcdFx0XHRkZWxheTogaW5kZXggKiAwLjA1LFxuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdCdob3ZlcjpiZy1hY2NlbnQgZmxleC0xIGN1cnNvci1wb2ludGVyIHAtMSB0ZXh0LWNlbnRlciBzbTpwLTIgYm9yZGVyLXIgYm9yZGVyLWInLFxuXHRcdFx0XHRcdFx0XHRcdGlzVG9kYXkgJiYgJ2JnLXByaW1hcnkvMTAgZm9udC1ib2xkJ1xuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZWN0RGF0ZShkYXkpXG5cdFx0XHRcdFx0XHRcdFx0b3BlbkV2ZW50Rm9ybSh7IHN0YXJ0OiBkYXkgfSlcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B3ZWVrLWRheS1oZWFkZXItJHtkYXkuZm9ybWF0KCdkZGRkJykudG9Mb3dlckNhc2UoKX1gfVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPntkYXkuZm9ybWF0KCdkZGQnKX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHQnbXgtYXV0byBtdC0xIGZsZXggaC01IHctNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIHRleHQteHMgc206aC03IHNtOnctNyBzbTp0ZXh0LXNtJyxcblx0XHRcdFx0XHRcdFx0XHRcdGlzVG9kYXkgJiYgJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQnXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHsgZGF5OiAnbnVtZXJpYycgfSkuZm9ybWF0KFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF5LnRvRGF0ZSgpXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L21vdGlvbi5kaXY+XG5cdFx0XHRcdFx0PC9BbmltYXRlUHJlc2VuY2U+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcm9wcGFibGUtY2VsbCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgaXNCdXNpbmVzc0hvdXIgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2J1c2luZXNzLWhvdXJzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IERheUV2ZW50c0xheWVyIH0gZnJvbSAnLi4vZGF5LXZpZXcvZGF5LWV2ZW50cy1sYXllcidcblxuY29uc3QgaG91cnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNCB9LCAoXywgaSkgPT4gaSkubWFwKChob3VyKSA9PlxuXHRkYXlqcygpLmhvdXIoaG91cikubWludXRlKDApXG4pXG5cbmludGVyZmFjZSBXZWVrRGF5Q29sUHJvcHMge1xuXHRkYXk6IGRheWpzLkRheWpzIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xufVxuXG5leHBvcnQgY29uc3QgV2Vla0RheUNvbDogUmVhY3QuRkM8V2Vla0RheUNvbFByb3BzPiA9ICh7IGRheSB9KSA9PiB7XG5cdGNvbnN0IHsgYnVzaW5lc3NIb3VycyB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGRhdGEtdGVzdGlkPXtgd2Vlay1kYXktY29sLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG5cdFx0XHRjbGFzc05hbWU9XCJjb2wtc3Bhbi0xIHJlbGF0aXZlIGdyaWQgZ3JpZC1yb3dzLTI0IGJvcmRlci1yXCJcblx0XHQ+XG5cdFx0XHR7aG91cnMubWFwKCh0aW1lKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGhvdXIgPSB0aW1lLmhvdXIoKVxuXHRcdFx0XHRjb25zdCBob3VyU3RyID0gdGltZS5mb3JtYXQoJ0hIJylcblx0XHRcdFx0Y29uc3QgZGF0ZVN0ciA9IGRheS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXHRcdFx0XHRjb25zdCBpc0J1c2luZXNzID0gaXNCdXNpbmVzc0hvdXIoe1xuXHRcdFx0XHRcdGRhdGU6IGRheSxcblx0XHRcdFx0XHRob3VyLFxuXHRcdFx0XHRcdG1pbnV0ZTogMCxcblx0XHRcdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0XHR9KVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PERyb3BwYWJsZUNlbGxcblx0XHRcdFx0XHRcdGtleT17YCR7ZGF0ZVN0cn0tJHtob3VyU3RyfWB9XG5cdFx0XHRcdFx0XHRpZD17YHdlZWstdGltZS1jZWxsLSR7ZGF0ZVN0cn0tJHtob3VyU3RyfWB9XG5cdFx0XHRcdFx0XHR0eXBlPVwidGltZS1jZWxsXCJcblx0XHRcdFx0XHRcdGRhdGU9e2RheX1cblx0XHRcdFx0XHRcdGhvdXI9e2hvdXJ9XG5cdFx0XHRcdFx0XHRkaXNhYmxlZD17IWlzQnVzaW5lc3N9XG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHdlZWstdGltZS1jZWxsLSR7ZGF0ZVN0cn0tJHtob3VyU3RyfWB9XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHQnaG92ZXI6YmctYWNjZW50IHJlbGF0aXZlIHotMTAgaC1bNjBweF0gY3Vyc29yLXBvaW50ZXIgYm9yZGVyLWInXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXG5cdFx0XHR7LyogRXZlbnQgYmxvY2tzIGxheWVyICovfVxuXHRcdFx0PERheUV2ZW50c0xheWVyXG5cdFx0XHRcdGRhdGEtdGVzdGlkPXtgd2Vlay1kYXktZXZlbnRzLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG5cdFx0XHRcdGRheT17ZGF5fVxuXHRcdFx0Lz5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsgV2Vla0RheUNvbCB9IGZyb20gJy4vd2Vlay1kYXktY29sJ1xuXG5jb25zdCBob3VycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBpKSA9PiBpKS5tYXAoKGhvdXIpID0+XG5cdGRheWpzKCkuaG91cihob3VyKS5taW51dGUoMClcbilcblxuZXhwb3J0IGNvbnN0IFdlZWtUaW1lR3JpZDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrLCBjdXJyZW50TG9jYWxlLCB0aW1lRm9ybWF0IH0gPVxuXHRcdHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgd2Vla0RheXMgPSBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspXG5cblx0Ly8gU2VwYXJhdGUgYWxsLWRheSBldmVudHMgZnJvbSByZWd1bGFyIGV2ZW50cyAoaW5jbHVkaW5nIG11bHRpLWRheSBldmVudHMpXG5cblx0Ly8gRmluZCBpZiBjdXJyZW50IGRheSBpcyBpbiB0aGUgZGlzcGxheWVkIHdlZWtcblx0Y29uc3QgdG9kYXlJbmRleCA9IHdlZWtEYXlzLmZpbmRJbmRleCgoZGF5KSA9PiBkYXkuaXNTYW1lKGRheWpzKCksICdkYXknKSlcblx0Y29uc3QgaXNDdXJyZW50V2VlayA9IHRvZGF5SW5kZXggIT09IC0xXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRkYXRhLXRlc3RpZD1cIndlZWstdGltZS1ncmlkXCJcblx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIGgtZnVsbCBncmlkIGdyaWQtY29scy1bYXV0b19yZXBlYXQoNywxZnIpXSBncmlkLXJvd3MtW3JlcGVhdCgyNCxtaW5tYXgoNjBweCwgMWZyKSldXCJcblx0XHQ+XG5cdFx0XHR7LyogVGltZSBsYWJlbHMgY29sdW1uIC0gZml4ZWQgKi99XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwid2Vlay10aW1lLWxhYmVsc1wiXG5cdFx0XHRcdGNsYXNzTmFtZT1cInotMTAgY29sLXNwYW4tMSB3LTE2IGdyaWQgZ3JpZC1yb3dzLTI0IGJvcmRlci14XCJcblx0XHRcdD5cblx0XHRcdFx0e2hvdXJzLm1hcCgodGltZSkgPT4gKFxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdGtleT17dGltZS5mb3JtYXQoJ0hIOm1tJyl9XG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHdlZWstdGltZS1ob3VyLSR7dGltZS5mb3JtYXQoJ0hIJyl9YH1cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtWzYwcHhdIGJvcmRlci1iIHRleHQtcmlnaHRcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBweC0xIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14c1wiPlxuXHRcdFx0XHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdFx0XHRcdGhvdXIxMjogdGltZUZvcm1hdCA9PT0gJzEyLWhvdXInLFxuXHRcdFx0XHRcdFx0XHR9KS5mb3JtYXQodGltZS50b0RhdGUoKSl9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdCkpfVxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdHsvKiBEYXkgY29sdW1ucyB3aXRoIHRpbWUgc2xvdHMgKi99XG5cdFx0XHR7d2Vla0RheXMubWFwKChkYXkpID0+IChcblx0XHRcdFx0PFdlZWtEYXlDb2wga2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9IGRheT17ZGF5fSAvPlxuXHRcdFx0KSl9XG5cblx0XHRcdHsvKiBDdXJyZW50IHRpbWUgaW5kaWNhdG9yICovfVxuXHRcdFx0e2lzQ3VycmVudFdlZWsgJiYgKFxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ3ZWVrLWN1cnJlbnQtdGltZS1pbmRpY2F0b3JcIlxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgei00MFwiXG5cdFx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRcdHRvcDogYCR7KGRheWpzKCkuaG91cigpICsgZGF5anMoKS5taW51dGUoKSAvIDYwKSAqIDYwfXB4YCxcblx0XHRcdFx0XHRcdGxlZnQ6IGBjYWxjKHZhcigtLXNwYWNpbmcpICogMTYgKyAke3RvZGF5SW5kZXh9ICogKDEwMCUgLSB2YXIoLS1zcGFjaW5nKSAqIDE2KSAvIDcpYCxcblx0XHRcdFx0XHRcdHdpZHRoOiBgY2FsYygoMTAwJSAtIHZhcigtLXNwYWNpbmcpICogMTYpIC8gNylgLFxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBib3JkZXItdCBib3JkZXItcmVkLTUwMFwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCItbXQtMSBtbC0xIGgtMiB3LTIgcm91bmRlZC1mdWxsIGJnLXJlZC01MDBcIj48L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBEQVlfSEVBREVSX05BTUVTID0gWydTJywgJ00nLCAnVCcsICdXJywgJ1QnLCAnRicsICdTJ11cbmNvbnN0IEVWRU5UX0RPVF9DT0xPUlMgPSBbJ2JnLXByaW1hcnknLCAnYmctYmx1ZS01MDAnLCAnYmctZ3JlZW4tNTAwJ11cbmNvbnN0IERBWVNfSU5fTUlOSV9DQUxFTkRBUiA9IDQyXG5cbmNvbnN0IGdldERheVRvb2x0aXAgPSAoZXZlbnRDb3VudDogbnVtYmVyKTogc3RyaW5nID0+IHtcblx0aWYgKGV2ZW50Q291bnQgPT09IDApIHtcblx0XHRyZXR1cm4gJydcblx0fVxuXHRjb25zdCBwbHVyYWwgPSBldmVudENvdW50ID4gMSA/ICdzJyA6ICcnXG5cdHJldHVybiBgJHtldmVudENvdW50fSBldmVudCR7cGx1cmFsfWBcbn1cblxuaW50ZXJmYWNlIE1vbnRoRGF0YSB7XG5cdGRhdGU6IGRheWpzLkRheWpzXG5cdG5hbWU6IHN0cmluZ1xuXHRldmVudENvdW50OiBudW1iZXJcblx0bW9udGhLZXk6IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgRGF5RGF0YSB7XG5cdGRhdGU6IGRheWpzLkRheWpzXG5cdGRheUtleTogc3RyaW5nXG5cdGlzSW5DdXJyZW50TW9udGg6IGJvb2xlYW5cblx0aXNUb2RheTogYm9vbGVhblxuXHRpc1NlbGVjdGVkOiBib29sZWFuXG5cdGV2ZW50Q291bnQ6IG51bWJlclxufVxuXG5jb25zdCBZZWFyVmlldyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgc2VsZWN0RGF0ZSwgZXZlbnRzLCBzZXRWaWV3LCBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIHQgfSA9XG5cdFx0dXNlQ2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgY3VycmVudFllYXIgPSBjdXJyZW50RGF0ZS55ZWFyKClcblxuXHRjb25zdCBnZW5lcmF0ZU1vbnRoc0RhdGEgPSAoKTogTW9udGhEYXRhW10gPT4ge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMiB9LCAoXywgbW9udGhJbmRleCkgPT4ge1xuXHRcdFx0Y29uc3QgbW9udGhEYXRlID0gZGF5anMoKVxuXHRcdFx0XHQueWVhcihjdXJyZW50WWVhcilcblx0XHRcdFx0Lm1vbnRoKG1vbnRoSW5kZXgpXG5cdFx0XHRcdC5zdGFydE9mKCdtb250aCcpXG5cdFx0XHRjb25zdCBldmVudHNJbk1vbnRoID0gZXZlbnRzLmZpbHRlcihcblx0XHRcdFx0KGV2ZW50KSA9PlxuXHRcdFx0XHRcdGV2ZW50LnN0YXJ0LnllYXIoKSA9PT0gY3VycmVudFllYXIgJiZcblx0XHRcdFx0XHRldmVudC5zdGFydC5tb250aCgpID09PSBtb250aEluZGV4XG5cdFx0XHQpXG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGRhdGU6IG1vbnRoRGF0ZSxcblx0XHRcdFx0bmFtZTogbW9udGhEYXRlLmZvcm1hdCgnTU1NTScpLFxuXHRcdFx0XHRldmVudENvdW50OiBldmVudHNJbk1vbnRoLmxlbmd0aCxcblx0XHRcdFx0bW9udGhLZXk6IG1vbnRoRGF0ZS5mb3JtYXQoJ01NJyksXG5cdFx0XHR9XG5cdFx0fSlcblx0fVxuXG5cdGNvbnN0IGdlbmVyYXRlRGF5c0Zvck1vbnRoID0gKG1vbnRoRGF0ZTogZGF5anMuRGF5anMpOiBEYXlEYXRhW10gPT4ge1xuXHRcdGNvbnN0IGZpcnN0RGF5T2ZDYWxlbmRhciA9IG1vbnRoRGF0ZS5zdGFydE9mKCdtb250aCcpLnN0YXJ0T2YoJ3dlZWsnKVxuXG5cdFx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IERBWVNfSU5fTUlOSV9DQUxFTkRBUiB9LCAoXywgZGF5SW5kZXgpID0+IHtcblx0XHRcdGNvbnN0IGRheURhdGUgPSBmaXJzdERheU9mQ2FsZW5kYXIuYWRkKGRheUluZGV4LCAnZGF5Jylcblx0XHRcdGNvbnN0IGRheVN0YXJ0ID0gZGF5RGF0ZS5zdGFydE9mKCdkYXknKVxuXHRcdFx0Y29uc3QgZGF5RW5kID0gZGF5RGF0ZS5lbmRPZignZGF5Jylcblx0XHRcdGNvbnN0IGV2ZW50c09uRGF5ID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKGRheVN0YXJ0LCBkYXlFbmQpXG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGRhdGU6IGRheURhdGUsXG5cdFx0XHRcdGRheUtleTogZGF5RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKSxcblx0XHRcdFx0aXNJbkN1cnJlbnRNb250aDogZGF5RGF0ZS5tb250aCgpID09PSBtb250aERhdGUubW9udGgoKSxcblx0XHRcdFx0aXNUb2RheTogZGF5RGF0ZS5pc1NhbWUoZGF5anMoKSwgJ2RheScpLFxuXHRcdFx0XHRpc1NlbGVjdGVkOiBkYXlEYXRlLmlzU2FtZShjdXJyZW50RGF0ZSwgJ2RheScpLFxuXHRcdFx0XHRldmVudENvdW50OiBldmVudHNPbkRheS5sZW5ndGgsXG5cdFx0XHR9XG5cdFx0fSlcblx0fVxuXG5cdGNvbnN0IG5hdmlnYXRlVG9EYXRlID0gKFxuXHRcdGRhdGU6IGRheWpzLkRheWpzLFxuXHRcdHZpZXc6ICdtb250aCcgfCAnZGF5Jyxcblx0XHRldmVudD86IFJlYWN0Lk1vdXNlRXZlbnRcblx0KSA9PiB7XG5cdFx0ZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0c2VsZWN0RGF0ZShkYXRlKVxuXHRcdHNldFZpZXcodmlldylcblx0fVxuXG5cdGNvbnN0IGdldEV2ZW50Q291bnRMYWJlbCA9IChjb3VudDogbnVtYmVyKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCBldmVudFdvcmQgPSBjb3VudCA9PT0gMSA/IHQoJ2V2ZW50JykgOiB0KCdldmVudHMnKVxuXHRcdHJldHVybiBgJHtjb3VudH0gJHtldmVudFdvcmR9YFxuXHR9XG5cblx0Y29uc3QgZ2V0RGF5Q2xhc3NOYW1lID0gKGRheTogRGF5RGF0YSk6IHN0cmluZyA9PiB7XG5cdFx0Y29uc3QgYmFzZUNsYXNzID1cblx0XHRcdCdyZWxhdGl2ZSBmbGV4IGFzcGVjdC1zcXVhcmUgdy1mdWxsIGN1cnNvci1wb2ludGVyIGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBob3ZlcjpiZy1hY2NlbnQgcm91bmRlZC1zbSB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0yMDAnXG5cdFx0Y29uc3Qgb3V0c2lkZU1vbnRoQ2xhc3MgPSBkYXkuaXNJbkN1cnJlbnRNb250aFxuXHRcdFx0PyAnJ1xuXHRcdFx0OiAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG9wYWNpdHktNTAnXG5cdFx0Y29uc3QgdG9kYXlDbGFzcyA9IGRheS5pc1RvZGF5XG5cdFx0XHQ/ICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtZnVsbCdcblx0XHRcdDogJydcblx0XHRjb25zdCBzZWxlY3RlZENsYXNzID1cblx0XHRcdGRheS5pc1NlbGVjdGVkICYmICFkYXkuaXNUb2RheSA/ICdiZy1tdXRlZCByb3VuZGVkLWZ1bGwgZm9udC1ib2xkJyA6ICcnXG5cdFx0Y29uc3QgaGFzRXZlbnRzQ2xhc3MgPVxuXHRcdFx0ZGF5LmV2ZW50Q291bnQgPiAwICYmICFkYXkuaXNUb2RheSAmJiAhZGF5LmlzU2VsZWN0ZWQgPyAnZm9udC1tZWRpdW0nIDogJydcblxuXHRcdHJldHVybiBjbihcblx0XHRcdGJhc2VDbGFzcyxcblx0XHRcdG91dHNpZGVNb250aENsYXNzLFxuXHRcdFx0dG9kYXlDbGFzcyxcblx0XHRcdHNlbGVjdGVkQ2xhc3MsXG5cdFx0XHRoYXNFdmVudHNDbGFzc1xuXHRcdClcblx0fVxuXG5cdGNvbnN0IGdldEV2ZW50RG90Q2xhc3NOYW1lID0gKGNvbG9yOiBzdHJpbmcsIGlzVG9kYXk6IGJvb2xlYW4pOiBzdHJpbmcgPT4ge1xuXHRcdGNvbnN0IGRvdENvbG9yID0gaXNUb2RheSA/ICdiZy1wcmltYXJ5LWZvcmVncm91bmQnIDogY29sb3Jcblx0XHRyZXR1cm4gY24oJ2gtWzNweF0gdy1bM3B4XSByb3VuZGVkLWZ1bGwnLCBkb3RDb2xvcilcblx0fVxuXG5cdGNvbnN0IG1vbnRoc0RhdGEgPSBnZW5lcmF0ZU1vbnRoc0RhdGEoKVxuXG5cdHJldHVybiAoXG5cdFx0PFNjcm9sbEFyZWEgZGF0YS10ZXN0aWQ9XCJ5ZWFyLXZpZXdcIiBjbGFzc05hbWU9XCJoLWZ1bGxcIj5cblx0XHRcdDxkaXZcblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ5ZWFyLWdyaWRcIlxuXHRcdFx0XHRjbGFzc05hbWU9XCJncmlkIGF1dG8tcm93cy1mciBncmlkLWNvbHMtMSBnYXAtNCBwLTQgc206Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIlxuXHRcdFx0PlxuXHRcdFx0XHR7bW9udGhzRGF0YS5tYXAoKG1vbnRoLCBtb250aEluZGV4KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZGF5c0luTW9udGggPSBnZW5lcmF0ZURheXNGb3JNb250aChtb250aC5kYXRlKVxuXHRcdFx0XHRcdGNvbnN0IGFuaW1hdGlvbkRlbGF5ID0gbW9udGhJbmRleCAqIDAuMDVcblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdGtleT17bW9udGgubW9udGhLZXl9XG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgeWVhci1tb250aC0ke21vbnRoLm1vbnRoS2V5fWB9XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImhvdmVyOmJvcmRlci1wcmltYXJ5IGZsZXggZmxleC1jb2wgcm91bmRlZC1sZyBib3JkZXIgcC0zIHRleHQtbGVmdCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgaG92ZXI6c2hhZG93LW1kXCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuXHRcdFx0XHRcdFx0XHRcdDxtb3Rpb24uZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2Btb250aC0ke21vbnRoSW5kZXh9YH1cblx0XHRcdFx0XHRcdFx0XHRcdGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG5cdFx0XHRcdFx0XHRcdFx0XHRhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cblx0XHRcdFx0XHRcdFx0XHRcdGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG5cdFx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uPXt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAwLjI1LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlYXNlOiAnZWFzZUluT3V0Jyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVsYXk6IGFuaW1hdGlvbkRlbGF5LFxuXHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm1iLTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCJcblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBuYXZpZ2F0ZVRvRGF0ZShtb250aC5kYXRlLCAnbW9udGgnKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B5ZWFyLW1vbnRoLXRpdGxlLSR7bW9udGgubW9udGhLZXl9YH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC1sZyBmb250LW1lZGl1bSBob3Zlcjp1bmRlcmxpbmUgY3Vyc29yLXBvaW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7bW9udGgubmFtZX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHR7bW9udGguZXZlbnRDb3VudCA+IDAgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgeWVhci1tb250aC1ldmVudC1jb3VudC0ke21vbnRoLm1vbnRoS2V5fWB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLWZ1bGwgcHgtMiBweS0xIHRleHQteHNcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e2dldEV2ZW50Q291bnRMYWJlbChtb250aC5ldmVudENvdW50KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHQ8L21vdGlvbi5kaXY+XG5cdFx0XHRcdFx0XHRcdDwvQW5pbWF0ZVByZXNlbmNlPlxuXG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHllYXItbWluaS1jYWxlbmRhci0ke21vbnRoLm1vbnRoS2V5fWB9XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtNyBnYXAtWzFweF0gdGV4dC1bMC42cmVtXVwiXG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7REFZX0hFQURFUl9OQU1FUy5tYXAoKGRheU5hbWUsIGhlYWRlckluZGV4KSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17YGhlYWRlci0ke2hlYWRlckluZGV4fWB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBoLTMgdGV4dC1jZW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7ZGF5TmFtZX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdCkpfVxuXG5cdFx0XHRcdFx0XHRcdFx0e2RheXNJbk1vbnRoLm1hcCgoZGF5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBkYXlUZXN0SWQgPSBgeWVhci1kYXktJHttb250aC5kYXRlLmZvcm1hdCgnWVlZWS1NTScpfS0ke2RheS5kYXlLZXl9YFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgaGFzRXZlbnRzID0gZGF5LmV2ZW50Q291bnQgPiAwXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB2aXNpYmxlRG90Q291bnQgPSBNYXRoLm1pbihkYXkuZXZlbnRDb3VudCwgMylcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHZpc2libGVEb3RDb2xvcnMgPSBFVkVOVF9ET1RfQ09MT1JTLnNsaWNlKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlRG90Q291bnRcblx0XHRcdFx0XHRcdFx0XHRcdClcblxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17ZGF5LmRheUtleX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17ZGF5VGVzdElkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eyhlKSA9PiBuYXZpZ2F0ZVRvRGF0ZShkYXkuZGF0ZSwgJ2RheScsIGUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlPXtnZXREYXlUb29sdGlwKGRheS5ldmVudENvdW50KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2dldERheUNsYXNzTmFtZShkYXkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC1jZW50ZXIgbGVhZGluZy1ub25lXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ZGF5LmRhdGUuZGF0ZSgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtoYXNFdmVudHMgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdhYnNvbHV0ZSBib3R0b20tMCBmbGV4IHctZnVsbCBqdXN0aWZ5LWNlbnRlciBzcGFjZS14LVsxcHhdJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXkuaXNUb2RheSAmJiAnYm90dG9tLVsxcHhdJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7dmlzaWJsZURvdENvbG9ycy5tYXAoKGRvdENvbG9yKSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17ZG90Q29sb3J9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2dldEV2ZW50RG90Q2xhc3NOYW1lKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkb3RDb2xvcixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF5LmlzVG9kYXlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHR9KX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pfVxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiAvPlxuXHRcdDwvU2Nyb2xsQXJlYT5cblx0KVxufVxuXG5leHBvcnQgZGVmYXVsdCBZZWFyVmlld1xuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBFdmVudEZvcm1Qcm9wcyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7XG5cdENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlLFxuXHRDZWxsQ2xpY2tJbmZvLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJFbmdpbmUgfSBmcm9tICdAL2hvb2tzL3VzZS1jYWxlbmRhci1lbmdpbmUnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEdBUF9CRVRXRUVOX0VMRU1FTlRTIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnMsIFRyYW5zbGF0b3JGdW5jdGlvbiB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3LCBUaW1lRm9ybWF0IH0gZnJvbSAnQC90eXBlcydcbmltcG9ydCB7IENhbGVuZGFyQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCdcblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhclByb3ZpZGVyUHJvcHMge1xuXHRjaGlsZHJlbjogUmVhY3ROb2RlXG5cdGV2ZW50cz86IENhbGVuZGFyRXZlbnRbXVxuXHRmaXJzdERheU9mV2Vlaz86IG51bWJlciAvLyAwIGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuXHRpbml0aWFsVmlldz86IENhbGVuZGFyVmlld1xuXHRpbml0aWFsRGF0ZT86IGRheWpzLkRheWpzXG5cdHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdE5vZGVcblx0b25FdmVudENsaWNrPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uQ2VsbENsaWNrPzogKGluZm86IENlbGxDbGlja0luZm8pID0+IHZvaWRcblx0b25WaWV3Q2hhbmdlPzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRvbkV2ZW50QWRkPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRXZlbnRVcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudERlbGV0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkRhdGVDaGFuZ2U/OiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcblx0bG9jYWxlPzogc3RyaW5nXG5cdHRpbWV6b25lPzogc3RyaW5nXG5cdGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuXHRkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGV2ZW50U3BhY2luZz86IG51bWJlclxuXHRzdGlja3lWaWV3SGVhZGVyPzogYm9vbGVhblxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nXG5cdGhlYWRlckNvbXBvbmVudD86IFJlYWN0Tm9kZSAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNvbXBvbmVudFxuXHRoZWFkZXJDbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjbGFzc1xuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRyZW5kZXJFdmVudEZvcm0/OiAocHJvcHM6IEV2ZW50Rm9ybVByb3BzKSA9PiBSZWFjdE5vZGVcblx0Ly8gVHJhbnNsYXRpb24gb3B0aW9ucyAtIHByb3ZpZGUgZWl0aGVyIHRyYW5zbGF0aW9ucyBvYmplY3QgT1IgdHJhbnNsYXRvciBmdW5jdGlvblxuXHR0cmFuc2xhdGlvbnM/OiBUcmFuc2xhdGlvbnNcblx0dHJhbnNsYXRvcj86IFRyYW5zbGF0b3JGdW5jdGlvblxuXHR0aW1lRm9ybWF0PzogVGltZUZvcm1hdFxuXHRjbGFzc2VzT3ZlcnJpZGU/OiBDYWxlbmRhckNsYXNzZXNPdmVycmlkZVxufVxuXG5leHBvcnQgY29uc3QgQ2FsZW5kYXJQcm92aWRlcjogUmVhY3QuRkM8Q2FsZW5kYXJQcm92aWRlclByb3BzPiA9ICh7XG5cdGNoaWxkcmVuLFxuXHRldmVudHMgPSBbXSxcblx0Zmlyc3REYXlPZldlZWsgPSAwLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRyZW5kZXJFdmVudCxcblx0b25FdmVudENsaWNrLFxuXHRvbkNlbGxDbGljayxcblx0b25WaWV3Q2hhbmdlLFxuXHRvbkV2ZW50QWRkLFxuXHRvbkV2ZW50VXBkYXRlLFxuXHRvbkV2ZW50RGVsZXRlLFxuXHRvbkRhdGVDaGFuZ2UsXG5cdGxvY2FsZSxcblx0dGltZXpvbmUsXG5cdGRpc2FibGVDZWxsQ2xpY2ssXG5cdGRpc2FibGVFdmVudENsaWNrLFxuXHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdGRheU1heEV2ZW50cyxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdGhlYWRlckNvbXBvbmVudCxcblx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRidXNpbmVzc0hvdXJzLFxuXHRyZW5kZXJFdmVudEZvcm0sXG5cdHRyYW5zbGF0aW9ucyxcblx0dHJhbnNsYXRvcixcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0Y2xhc3Nlc092ZXJyaWRlLFxufSkgPT4ge1xuXHQvLyBVc2UgdGhlIGNhbGVuZGFyIGVuZ2luZVxuXHRjb25zdCBjYWxlbmRhckVuZ2luZSA9IHVzZUNhbGVuZGFyRW5naW5lKHtcblx0XHRldmVudHMsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0aW5pdGlhbFZpZXcsXG5cdFx0aW5pdGlhbERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRvbkV2ZW50QWRkLFxuXHRcdG9uRXZlbnRVcGRhdGUsXG5cdFx0b25FdmVudERlbGV0ZSxcblx0XHRvbkRhdGVDaGFuZ2UsXG5cdFx0b25WaWV3Q2hhbmdlLFxuXHRcdGxvY2FsZSxcblx0XHR0aW1lem9uZSxcblx0XHR0cmFuc2xhdGlvbnMsXG5cdFx0dHJhbnNsYXRvcixcblx0fSlcblxuXHRjb25zdCBlZGl0RXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRXZlbnQoZXZlbnQpXG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcblx0XHR9LFxuXHRcdFtjYWxlbmRhckVuZ2luZV1cblx0KVxuXG5cdC8vIEN1c3RvbSBoYW5kbGVycyB0aGF0IGNhbGwgZXh0ZXJuYWwgY2FsbGJhY2tzXG5cdGNvbnN0IGhhbmRsZUV2ZW50Q2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGlmIChkaXNhYmxlRXZlbnRDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblx0XHRcdGlmIChvbkV2ZW50Q2xpY2spIHtcblx0XHRcdFx0b25FdmVudENsaWNrKGV2ZW50KVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWRpdEV2ZW50KGV2ZW50KVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W2Rpc2FibGVFdmVudENsaWNrLCBvbkV2ZW50Q2xpY2ssIGVkaXRFdmVudF1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZURhdGVDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUNlbGxDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9uQ2VsbENsaWNrKSB7XG5cdFx0XHRcdG9uQ2VsbENsaWNrKGluZm8pXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5vcGVuRXZlbnRGb3JtKGluZm8pXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbb25DZWxsQ2xpY2ssIGRpc2FibGVDZWxsQ2xpY2ssIGNhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Ly8gQ3JlYXRlIHRoZSBjb250ZXh0IHZhbHVlXG5cdGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdGN1cnJlbnREYXRlOiBjYWxlbmRhckVuZ2luZS5jdXJyZW50RGF0ZSxcblx0XHRcdHZpZXc6IGNhbGVuZGFyRW5naW5lLnZpZXcsXG5cdFx0XHRldmVudHM6IGNhbGVuZGFyRW5naW5lLmV2ZW50cyxcblx0XHRcdHJhd0V2ZW50czogY2FsZW5kYXJFbmdpbmUucmF3RXZlbnRzLFxuXHRcdFx0Y3VycmVudExvY2FsZTogY2FsZW5kYXJFbmdpbmUuY3VycmVudExvY2FsZSxcblx0XHRcdGlzRXZlbnRGb3JtT3BlbjogY2FsZW5kYXJFbmdpbmUuaXNFdmVudEZvcm1PcGVuLFxuXHRcdFx0c2VsZWN0ZWRFdmVudDogY2FsZW5kYXJFbmdpbmUuc2VsZWN0ZWRFdmVudCxcblx0XHRcdHNlbGVjdGVkRGF0ZTogY2FsZW5kYXJFbmdpbmUuc2VsZWN0ZWREYXRlLFxuXHRcdFx0Zmlyc3REYXlPZldlZWs6IGNhbGVuZGFyRW5naW5lLmZpcnN0RGF5T2ZXZWVrLFxuXHRcdFx0c2V0Q3VycmVudERhdGU6IGNhbGVuZGFyRW5naW5lLnNldEN1cnJlbnREYXRlLFxuXHRcdFx0c2VsZWN0RGF0ZTogY2FsZW5kYXJFbmdpbmUuc2VsZWN0RGF0ZSxcblx0XHRcdHNldFZpZXc6IGNhbGVuZGFyRW5naW5lLnNldFZpZXcsXG5cdFx0XHRuZXh0UGVyaW9kOiBjYWxlbmRhckVuZ2luZS5uZXh0UGVyaW9kLFxuXHRcdFx0cHJldlBlcmlvZDogY2FsZW5kYXJFbmdpbmUucHJldlBlcmlvZCxcblx0XHRcdHRvZGF5OiBjYWxlbmRhckVuZ2luZS50b2RheSxcblx0XHRcdGFkZEV2ZW50OiBjYWxlbmRhckVuZ2luZS5hZGRFdmVudCxcblx0XHRcdHVwZGF0ZUV2ZW50OiBjYWxlbmRhckVuZ2luZS51cGRhdGVFdmVudCxcblx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiBjYWxlbmRhckVuZ2luZS51cGRhdGVSZWN1cnJpbmdFdmVudCxcblx0XHRcdGRlbGV0ZUV2ZW50OiBjYWxlbmRhckVuZ2luZS5kZWxldGVFdmVudCxcblx0XHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50OiBjYWxlbmRhckVuZ2luZS5kZWxldGVSZWN1cnJpbmdFdmVudCxcblx0XHRcdG9wZW5FdmVudEZvcm06IGNhbGVuZGFyRW5naW5lLm9wZW5FdmVudEZvcm0sXG5cdFx0XHRjbG9zZUV2ZW50Rm9ybTogY2FsZW5kYXJFbmdpbmUuY2xvc2VFdmVudEZvcm0sXG5cdFx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IGNhbGVuZGFyRW5naW5lLmdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRcdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudDogY2FsZW5kYXJFbmdpbmUuZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LFxuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRvbkV2ZW50Q2xpY2s6IGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRvbkNlbGxDbGljazogaGFuZGxlRGF0ZUNsaWNrLFxuXHRcdFx0bG9jYWxlLFxuXHRcdFx0dGltZXpvbmUsXG5cdFx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdFx0XHR0OiBjYWxlbmRhckVuZ2luZS50LFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHR9KSxcblx0XHRbXG5cdFx0XHRjYWxlbmRhckVuZ2luZSxcblx0XHRcdHJlbmRlckV2ZW50LFxuXHRcdFx0aGFuZGxlRXZlbnRDbGljayxcblx0XHRcdGhhbmRsZURhdGVDbGljayxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRdXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxDYWxlbmRhckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRWYWx1ZX0+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9DYWxlbmRhckNvbnRleHQuUHJvdmlkZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IENhbGVuZGFyRG5kQ29udGV4dCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnLWFuZC1kcm9wL2NhbGVuZGFyLWRuZC1jb250ZXh0J1xuaW1wb3J0IHsgRXZlbnRGb3JtIH0gZnJvbSAnQC9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybSdcbmltcG9ydCB7IEhlYWRlciB9IGZyb20gJ0AvY29tcG9uZW50cy9oZWFkZXInXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBSZXNvdXJjZURheVZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcnXG5pbXBvcnQgeyBSZXNvdXJjZU1vbnRoVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3J1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlQ2FsZW5kYXJCb2R5OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdHZpZXcsXG5cdFx0aXNFdmVudEZvcm1PcGVuLFxuXHRcdGNsb3NlRXZlbnRGb3JtLFxuXHRcdHNlbGVjdGVkRXZlbnQsXG5cdFx0YWRkRXZlbnQsXG5cdFx0dXBkYXRlRXZlbnQsXG5cdFx0ZGVsZXRlRXZlbnQsXG5cdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHR9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHZpZXdNYXAgPSB7XG5cdFx0bW9udGg6IDxSZXNvdXJjZU1vbnRoVmlldyBrZXk9XCJtb250aFwiIC8+LFxuXHRcdHdlZWs6IDxSZXNvdXJjZVdlZWtWaWV3IGtleT1cIndlZWtcIiAvPixcblx0XHRkYXk6IDxSZXNvdXJjZURheVZpZXcga2V5PVwiZGF5XCIgLz4sXG5cdH1cblxuXHRjb25zdCBoYW5kbGVPblVwZGF0ZSA9IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdHVwZGF0ZUV2ZW50KGV2ZW50LmlkLCBldmVudClcblx0fVxuXG5cdGNvbnN0IGhhbmRsZU9uRGVsZXRlID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0ZGVsZXRlRXZlbnQoZXZlbnQuaWQpXG5cdH1cblxuXHRjb25zdCBldmVudEZvcm1Qcm9wcyA9IHtcblx0XHRvcGVuOiBpc0V2ZW50Rm9ybU9wZW4sXG5cdFx0b25DbG9zZTogY2xvc2VFdmVudEZvcm0sXG5cdFx0c2VsZWN0ZWRFdmVudCxcblx0XHRvbkFkZDogYWRkRXZlbnQsXG5cdFx0b25VcGRhdGU6IGhhbmRsZU9uVXBkYXRlLFxuXHRcdG9uRGVsZXRlOiBoYW5kbGVPbkRlbGV0ZSxcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIHctZnVsbCBoLWZ1bGxcIj5cblx0XHRcdDxIZWFkZXIgY2xhc3NOYW1lPVwicC0xXCIgLz5cblxuXHRcdFx0ey8qIENhbGVuZGFyIEJvZHkgd2l0aCBBbmltYXRlUHJlc2VuY2UgZm9yIHZpZXcgdHJhbnNpdGlvbnMgKi99XG5cdFx0XHQ8Q2FsZW5kYXJEbmRDb250ZXh0PlxuXHRcdFx0XHQ8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG5cdFx0XHRcdFx0PG1vdGlvbi5kaXZcblx0XHRcdFx0XHRcdGtleT17dmlld31cblx0XHRcdFx0XHRcdGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeDogMjAgfX1cblx0XHRcdFx0XHRcdGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeDogMCB9fVxuXHRcdFx0XHRcdFx0ZXhpdD17eyBvcGFjaXR5OiAwLCB4OiAtMjAgfX1cblx0XHRcdFx0XHRcdHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMSwgZWFzZTogJ2Vhc2VJbk91dCcgfX1cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBoLVtjYWxjKDEwMCUtMy41cmVtKV1cIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHt2aWV3TWFwW3ZpZXddfVxuXHRcdFx0XHRcdDwvbW90aW9uLmRpdj5cblx0XHRcdFx0PC9BbmltYXRlUHJlc2VuY2U+XG5cdFx0XHQ8L0NhbGVuZGFyRG5kQ29udGV4dD5cblxuXHRcdFx0ey8qIEV2ZW50IEZvcm0gRGlhbG9nICovfVxuXHRcdFx0e3JlbmRlckV2ZW50Rm9ybVxuXHRcdFx0XHQ/IHJlbmRlckV2ZW50Rm9ybShldmVudEZvcm1Qcm9wcylcblx0XHRcdFx0OiBpc0V2ZW50Rm9ybU9wZW4gJiYgPEV2ZW50Rm9ybSB7Li4uZXZlbnRGb3JtUHJvcHN9IC8+fVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlIb3Jpem9udGFsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdHQsXG5cdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0dGltZUZvcm1hdCxcblx0fSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHQvLyBHZW5lcmF0ZSB0aW1lIGNvbHVtbnMgKGhvdXJseSBzbG90cylcblx0Y29uc3QgZGF5SG91cnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjQgfSwgKF8sIGhvdXIpID0+XG5cdFx0XHRjdXJyZW50RGF0ZS5ob3VyKGhvdXIpLm1pbnV0ZSgwKVxuXHRcdClcblx0fSwgW2N1cnJlbnREYXRlXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLWZ1bGwgZmxleC1jb2wgYm9yZGVyXCI+XG5cdFx0XHQ8UmVzb3VyY2VFdmVudEdyaWQgZGF5cz17ZGF5SG91cnN9IGdyaWRUeXBlPVwiaG91clwiPlxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdmbGV4IGgtMTIgdy1maXQnLFxuXHRcdFx0XHRcdFx0c3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMjEgYmctYmFja2dyb3VuZCcsIC8vIFotaW5kZXggYWJvdmUgdGhlIGxlZnQgc3RpY2t5IHJlc291cmNlIGNvbHVtblxuXHRcdFx0XHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZVxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctNDAgYm9yZGVyLWIgYm9yZGVyLXIgZmxleC1zaHJpbmstMCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYm9yZGVyLWIgYm9yZGVyLXIgZmxleCBmbGV4LWNvbFwiPlxuXHRcdFx0XHRcdFx0ey8qIFRpbWUgaGVhZGVyIHJvdyAqL31cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyIGJvcmRlci1iXCI+XG5cdFx0XHRcdFx0XHRcdHtkYXlIb3Vycy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpc05vd0hvdXIgPSBjb2wuaXNTYW1lKGRheWpzKCksICdob3VyJylcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBrZXkgPSBgcmVzb3VyY2UtZGF5LWhlYWRlci0ke2NvbC50b0lTT1N0cmluZygpfWBcblxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8QW5pbWF0ZVByZXNlbmNlIGtleT17YCR7a2V5fS1wcmVzZW5jZWB9IG1vZGU9XCJ3YWl0XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxtb3Rpb24uZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2ByZXNvdXJjZS1kYXktdGltZS1sYWJlbC0ke2NvbC5mb3JtYXQoJ0hIJyl9YH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbj17e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZHVyYXRpb246IDAuMjUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlYXNlOiAnZWFzZUluT3V0Jyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlbGF5OiBpbmRleCAqIDAuMDUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3ctMjAgYm9yZGVyLXIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC14cyBmbGV4LXNocmluay0wJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlzTm93SG91ciAmJiAnYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwIGZvbnQtbWVkaXVtJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRob3VyOiAnbnVtZXJpYycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRob3VyMTI6IHRpbWVGb3JtYXQgPT09ICcxMi1ob3VyJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KS5mb3JtYXQoY29sLnRvRGF0ZSgpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9tb3Rpb24uZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0PC9BbmltYXRlUHJlc2VuY2U+XG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHR9KX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvUmVzb3VyY2VFdmVudEdyaWQ+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGlzQnVzaW5lc3NIb3VyIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3VycydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB0eXBlIHsgU2VsZWN0ZWREYXlFdmVudHMgfSBmcm9tICcuL2FsbC1ldmVudHMtZGlhbG9nJ1xuaW1wb3J0IHsgQWxsRXZlbnREaWFsb2cgfSBmcm9tICcuL2FsbC1ldmVudHMtZGlhbG9nJ1xuaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJy4vZHJvcHBhYmxlLWNlbGwnXG5cbmludGVyZmFjZSBHcmlkUHJvcHMge1xuXHRpbmRleDogbnVtYmVyIC8vIEluZGV4IG9mIHRoZSBkYXkgaW4gdGhlIHdlZWsgKDAtNilcblx0ZGF5OiBkYXlqcy5EYXlqc1xuXHRkYXlNYXhFdmVudHM/OiBudW1iZXJcblx0Y2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGNsYXNzTmFtZSBmb3IgY3VzdG9tIHN0eWxpbmdcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlciAvLyBPcHRpb25hbCByZXNvdXJjZSBJRCBmb3IgcmVzb3VyY2Utc3BlY2lmaWMgZGF5IGNlbGxzXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cicgLy8gRnV0dXJlIHVzZSBmb3IgZGlmZmVyZW50IGdyaWQgdHlwZXNcbn1cblxuZXhwb3J0IGNvbnN0IEdyaWRDZWxsOiBSZWFjdC5GQzxHcmlkUHJvcHM+ID0gKHtcblx0aW5kZXgsXG5cdGRheSxcblx0Y2xhc3NOYW1lID0gJycsXG5cdHJlc291cmNlSWQsXG5cdGdyaWRUeXBlID0gJ2RheScsXG59KSA9PiB7XG5cdGNvbnN0IGFsbEV2ZW50c0RpYWxvZ1JlZiA9IFJlYWN0LnVzZVJlZjx7XG5cdFx0b3BlbjogKCkgPT4gdm9pZFxuXHRcdGNsb3NlOiAoKSA9PiB2b2lkXG5cdFx0c2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG5cdH0+KG51bGwpXG5cdGNvbnN0IHtcblx0XHRkYXlNYXhFdmVudHMgPSAwLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHR0LFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoc3RhdGUpID0+ICh7XG5cdFx0ZGF5TWF4RXZlbnRzOiBzdGF0ZS5kYXlNYXhFdmVudHMsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiBzdGF0ZS5nZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0Y3VycmVudERhdGU6IHN0YXRlLmN1cnJlbnREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrOiBzdGF0ZS5maXJzdERheU9mV2Vlayxcblx0XHR0OiBzdGF0ZS50LFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlOiBzdGF0ZS5nZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRidXNpbmVzc0hvdXJzOiBzdGF0ZS5idXNpbmVzc0hvdXJzLFxuXHR9KSlcblxuXHRjb25zdCB0b2RheUV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGNvbnN0IHJlc291cmNlRXZlbnRzID0gcmVzb3VyY2VJZCA/IGdldEV2ZW50c0ZvclJlc291cmNlKHJlc291cmNlSWQpIDogW11cblx0XHRjb25zdCB0b2RheUV2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShcblx0XHRcdGRheS5zdGFydE9mKGdyaWRUeXBlKSxcblx0XHRcdGRheS5lbmRPZihncmlkVHlwZSlcblx0XHQpXG5cblx0XHRpZiAocmVzb3VyY2VFdmVudHMubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gdG9kYXlFdmVudHMuZmlsdGVyKChldmVudCkgPT5cblx0XHRcdFx0cmVzb3VyY2VFdmVudHMuc29tZSgocmUpID0+IFN0cmluZyhyZS5pZCkgPT09IFN0cmluZyhldmVudC5pZCkpXG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRvZGF5RXZlbnRzXG5cdH0sIFtkYXksIHJlc291cmNlSWQsIGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgZ2V0RXZlbnRzRm9yUmVzb3VyY2UsIGdyaWRUeXBlXSlcblxuXHQvLyBHZXQgc3RhcnQgZGF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9udGggdmlldyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuXHRjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cblx0Ly8gQ2FsY3VsYXRlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGNhbGVuZGFyIGdyaWQgY29ycmVjdGx5XG5cdC8vIEZpbmQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIChlLmcuIFN1bmRheSBvciBNb25kYXkpIHRoYXQgY29tZXMgYmVmb3JlIG9yIG9uIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoXG5cdGxldCBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGZpcnN0RGF5T2ZNb250aC5jbG9uZSgpXG5cdHdoaWxlIChhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5kYXkoKSAhPT0gZmlyc3REYXlPZldlZWspIHtcblx0XHRhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLnN1YnRyYWN0KDEsICdkYXknKVxuXHR9XG5cblx0Ly8gSGFuZGxlciBmb3Igc2hvd2luZyBhbGwgZXZlbnRzIGluIGEgZGlhbG9nXG5cdGNvbnN0IHNob3dBbGxFdmVudHMgPSAoZGF5OiBkYXlqcy5EYXlqcywgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10pID0+IHtcblx0XHRhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8uc2V0U2VsZWN0ZWREYXlFdmVudHMoe1xuXHRcdFx0ZGF5LFxuXHRcdFx0ZXZlbnRzLFxuXHRcdH0pXG5cdFx0YWxsRXZlbnRzRGlhbG9nUmVmLmN1cnJlbnQ/Lm9wZW4oKVxuXHR9XG5cblx0Y29uc3QgaXNDdXJyZW50TW9udGggPSBkYXkubW9udGgoKSA9PT0gY3VycmVudERhdGUubW9udGgoKVxuXHRjb25zdCBpc0xhc3RDb2x1bW4gPSBpbmRleCA9PT0gNiAvLyBTYXR1cmRheSBpcyB0aGUgbGFzdCBjb2x1bW4gaW4gYSB3ZWVrXG5cblx0Y29uc3QgaGlkZGVuRXZlbnRzQ291bnQgPSB0b2RheUV2ZW50cy5sZW5ndGggLSBkYXlNYXhFdmVudHNcblx0Y29uc3QgaGFzSGlkZGVuRXZlbnRzID0gaGlkZGVuRXZlbnRzQ291bnQgPiAwXG5cblx0Y29uc3QgaXNCdXNpbmVzcyA9IGlzQnVzaW5lc3NIb3VyKHtcblx0XHRkYXRlOiBkYXksXG5cdFx0aG91cjogZ3JpZFR5cGUgPT09ICdob3VyJyA/IGRheS5ob3VyKCkgOiB1bmRlZmluZWQsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0fSlcblxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8RHJvcHBhYmxlQ2VsbFxuXHRcdFx0XHRpZD17YGRheS1jZWxsLSR7ZGF5LnRvSVNPU3RyaW5nKCl9JHtyZXNvdXJjZUlkID8gYC1yZXNvdXJjZS0ke3Jlc291cmNlSWR9YCA6ICcnfWB9XG5cdFx0XHRcdHR5cGU9XCJkYXktY2VsbFwiXG5cdFx0XHRcdGRhdGEtdGVzdGlkPXtgZGF5LWNlbGwtJHtkYXkudG9JU09TdHJpbmcoKX1gfVxuXHRcdFx0XHRkYXRlPXtkYXl9XG5cdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlSWR9XG5cdFx0XHRcdGRpc2FibGVkPXshaXNCdXNpbmVzcyB8fCAhaXNDdXJyZW50TW9udGh9XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2N1cnNvci1wb2ludGVyIG92ZXJmbG93LWNsaXAgcC0xIGhvdmVyOmJnLWFjY2VudCBtaW4taC1bNjBweF0nLFxuXHRcdFx0XHRcdGlzTGFzdENvbHVtbiAmJiAnYm9yZGVyLXItMCcsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHQ+XG5cdFx0XHRcdHsvKiBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQgbXVsdGktZGF5IGJhcnMgKEdvb2dsZSBDYWxlbmRhciBzdHlsZSkgKi99XG5cblx0XHRcdFx0ey8qIFNpbmdsZS1kYXkgZXZlbnRzIGNvbnRhaW5lciBwb3NpdGlvbmVkIGJlbG93IG11bHRpLWRheSBldmVudHMgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMVwiPlxuXHRcdFx0XHRcdHsvKiBSZW5kZXIgcGxhY2Vob2xkZXJzIGZvciBldmVudHMgdGhhdCBvY2N1ciB0b2RheSBzbyB0aGF0IHRoZSBjZWxsIGhlaWdodCBpcyBhY2NvcmRpbmcgdG8gZGF5TWF4RXZlbnRzLiAqL31cblx0XHRcdFx0XHR7dG9kYXlFdmVudHMuc2xpY2UoMCwgZGF5TWF4RXZlbnRzKS5tYXAoKGV2ZW50LCByb3dJbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRrZXk9e2BlbXB0eS0ke3Jvd0luZGV4fWB9XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtWzIwcHhdIHctZnVsbFwiXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtldmVudD8udGl0bGV9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCkpfVxuXG5cdFx0XHRcdFx0ey8qIFNob3cgbW9yZSBldmVudHMgYnV0dG9uIHdpdGggYWNjdXJhdGUgY291bnQgKi99XG5cdFx0XHRcdFx0e2hhc0hpZGRlbkV2ZW50cyAmJiAoXG5cdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmQgY3Vyc29yLXBvaW50ZXIgdGV4dC1bMTBweF0gd2hpdGVzcGFjZS1ub3dyYXAgc206dGV4dC14cyBtdC0xXCJcblx0XHRcdFx0XHRcdFx0b25DbGljaz17KGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cblx0XHRcdFx0XHRcdFx0XHRzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdG9uS2V5RG93bj17KGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoZS5rZXkgPT09ICdFbnRlcicgfHwgZS5rZXkgPT09ICcgJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHR0YWJJbmRleD17MH1cblx0XHRcdFx0XHRcdFx0Ly8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci10YWctb3Zlci1yb2xlXG5cdFx0XHRcdFx0XHRcdHJvbGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQre2hpZGRlbkV2ZW50c0NvdW50fSB7dCgnbW9yZScpfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L0Ryb3BwYWJsZUNlbGw+XG5cblx0XHRcdHsvKiBEaWFsb2cgZm9yIHNob3dpbmcgYWxsIGV2ZW50cyAqL31cblx0XHRcdDxBbGxFdmVudERpYWxvZyByZWY9e2FsbEV2ZW50c0RpYWxvZ1JlZn0gLz5cblx0XHQ8Lz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZ2V0UG9zaXRpb25lZEV2ZW50cyB9IGZyb20gJ0AvbGliL3V0aWxzL3Bvc2l0aW9uLXdlZWstZXZlbnRzJ1xuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkUmVzb3VyY2VXZWVrRXZlbnRzUHJvcHMge1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0cmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9jZXNzZWRSZXNvdXJjZVdlZWtFdmVudHMgPSAoe1xuXHRkYXlzLFxuXHRncmlkVHlwZSA9ICdkYXknLFxuXHRyZXNvdXJjZUlkLFxufTogVXNlUHJvY2Vzc2VkUmVzb3VyY2VXZWVrRXZlbnRzUHJvcHMpID0+IHtcblx0Y29uc3Qge1xuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRkYXlNYXhFdmVudHMsXG5cdFx0ZXZlbnRTcGFjaW5nLFxuXHR9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHN0YXJ0RGF0ZSA9IGRheXNbMF0uc3RhcnRPZignZGF5Jylcblx0Y29uc3QgZW5kRGF0ZSA9IGRheXMuYXQoLTEpLmVuZE9mKCdkYXknKVxuXHRjb25zdCByZXNvdXJjZUV2ZW50cyA9IGdldEV2ZW50c0ZvclJlc291cmNlKHJlc291cmNlSWQpXG5cdGNvbnN0IHZpc2libGVFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uoc3RhcnREYXRlLCBlbmREYXRlKVxuXG5cdHJldHVybiBnZXRQb3NpdGlvbmVkRXZlbnRzKHtcblx0XHRkYXlzLFxuXHRcdGV2ZW50czogcmVzb3VyY2VFdmVudHMuZmlsdGVyKChldmVudCkgPT5cblx0XHRcdHZpc2libGVFdmVudHMuc29tZSgoZSkgPT4gZS5pZCA9PT0gZXZlbnQuaWQpXG5cdFx0KSxcblx0XHRkYXlNYXhFdmVudHMsXG5cdFx0ZGF5TnVtYmVySGVpZ2h0OiAwLFxuXHRcdGdyaWRUeXBlLFxuXHRcdGV2ZW50U3BhY2luZyxcblx0fSlcbn1cbiIsCiAgICAiaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgRVZFTlRfQkFSX0hFSUdIVCB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IHVzZVByb2Nlc3NlZFJlc291cmNlV2Vla0V2ZW50cyB9IGZyb20gJy4uL2hvb2tzL3VzZVByb2Nlc3NlZFJlc291cmNlV2Vla0V2ZW50cydcblxuaW50ZXJmYWNlIFdlZWtFdmVudHNMYXllclByb3BzIHtcblx0ZGF5czogZGF5anMuRGF5anNbXVxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VFdmVudHNMYXllcjogUmVhY3QuRkM8V2Vla0V2ZW50c0xheWVyUHJvcHM+ID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0cmVzb3VyY2VJZCxcbn0pID0+IHtcblx0Y29uc3Qgd2Vla1N0YXJ0ID0gZGF5c1swXS5zdGFydE9mKCdkYXknKVxuXHRjb25zdCBwcm9jZXNzZWRXZWVrRXZlbnRzID0gdXNlUHJvY2Vzc2VkUmVzb3VyY2VXZWVrRXZlbnRzKHtcblx0XHRkYXlzLFxuXHRcdGdyaWRUeXBlLFxuXHRcdHJlc291cmNlSWQsXG5cdH0pXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGwgcG9pbnRlci1ldmVudHMtbm9uZSB6LTEwIG92ZXJmbG93LWNsaXBcIj5cblx0XHRcdHtwcm9jZXNzZWRXZWVrRXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnRLZXkgPSBgJHtyZXNvdXJjZUlkfS1ldmVudC0ke2V2ZW50LmlkfS0ke2V2ZW50LnBvc2l0aW9ufS0ke3dlZWtTdGFydC50b0lTT1N0cmluZygpfWBcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdGtleT17YCR7ZXZlbnRLZXl9LXdyYXBwZXJgfVxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGUgei0xMCBwb2ludGVyLWV2ZW50cy1hdXRvIG92ZXJmbG93LWNsaXBcIlxuXHRcdFx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRcdFx0bGVmdDogYGNhbGMoJHtldmVudC5sZWZ0fSUgKyB2YXIoLS1zcGFjaW5nKSAqIDAuMjUpYCxcblx0XHRcdFx0XHRcdFx0d2lkdGg6IGBjYWxjKCR7ZXZlbnQud2lkdGh9JSAtIHZhcigtLXNwYWNpbmcpICogMSlgLFxuXHRcdFx0XHRcdFx0XHR0b3A6IGAke2V2ZW50LnRvcH1weGAsXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogYCR7RVZFTlRfQkFSX0hFSUdIVH1weGAsXG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B3ZWVrLWV2ZW50LWxheWVyLWV2ZW50LSR7ZXZlbnQuaWR9YH1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8RHJhZ2dhYmxlRXZlbnRcblx0XHRcdFx0XHRcdFx0ZWxlbWVudElkPXtldmVudEtleX1cblx0XHRcdFx0XHRcdFx0ZXZlbnQ9e2V2ZW50fVxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLWZ1bGwgdy1mdWxsIHNoYWRvd1wiXG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBHcmlkQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9ncmlkLWNlbGwnXG5pbXBvcnQgeyBTY3JvbGxBcmVhLCBTY3JvbGxCYXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWInXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IFJlc291cmNlRXZlbnRzTGF5ZXIgfSBmcm9tICcuL3Jlc291cmNlLWV2ZW50cy1sYXllcidcblxuaW50ZXJmYWNlIFJlc291cmNlRXZlbnRHcmlkUHJvcHMge1xuXHQvKipcblx0ICogQXJyYXkgb2YgZGF5cyB0byBkaXNwbGF5IGluIHRoZSBncmlkXG5cdCAqL1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdXG5cdC8qKiBUaGUgdHlwZSBvZiBncmlkIHRvIGRpc3BsYXkgLSAnZGF5JyBmb3IgZGF5IHZpZXcsICdob3VyJyBmb3Igd2VlayB2aWV3XG5cdCAqIChhZmZlY3RzIGV2ZW50IHBvc2l0aW9uaW5nIGxvZ2ljKVxuXHQgKi9cblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHQvKipcblx0ICogQ2hpbGRyZW4gd2lsbCBiZSByZW5kZXJlZCBhcyBoZWFkZXJzIGFib3ZlIHRoZSBncmlkXG5cdCAqIChlLmcuLCBmb3IgZGF5IG5hbWVzIGluIG1vbnRoIHZpZXcpXG5cdCAqL1xuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VFdmVudEdyaWQ6IFJlYWN0LkZDPFJlc291cmNlRXZlbnRHcmlkUHJvcHM+ID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0Y2hpbGRyZW4sXG59KSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGdldFZpc2libGVSZXNvdXJjZXMsIGRheU1heEV2ZW50cywgcmVuZGVyUmVzb3VyY2UgfSA9XG5cdFx0dXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHZpc2libGVSZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblxuXHRjb25zdCByb3dzID0gdmlzaWJsZVJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdGlkOiByZXNvdXJjZS5pZCxcblx0XHR0aXRsZTogcmVzb3VyY2UudGl0bGUsXG5cdFx0cmVzb3VyY2U6IHJlc291cmNlLFxuXHRcdGNlbGxzOiBkYXlzLm1hcCgoZGF5KSA9PiAoe1xuXHRcdFx0bGFiZWw6IGRheS5mb3JtYXQoJ0QnKSxcblx0XHRcdHZhbHVlOiBkYXksXG5cdFx0XHRpZDogZGF5LnRvSVNPU3RyaW5nKCksXG5cdFx0fSkpLFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxTY3JvbGxBcmVhXG5cdFx0XHRjbGFzc05hbWU9XCJoLWZ1bGxcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJtb250aC1zY3JvbGwtYXJlYVwiXG5cdFx0XHR2aWV3UG9ydFByb3BzPXt7IGNsYXNzTmFtZTogJyo6ZmxleCEgKjpmbGV4LWNvbCEgKjptaW4taC1mdWxsJyB9fVxuXHRcdD5cblx0XHRcdHsvKiBoZWFkZXIgcm93ICovfVxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0ey8qIENhbGVuZGFyIGFyZWEgd2l0aCBzY3JvbGwgKi99XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC0xIGgtW2NhbGMoMTAwJS0zcmVtKV0gdy1maXRcIj5cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGtleT17Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NJyl9XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPVwicmVsYXRpdmUgdy1mdWxsIGZsZXggZmxleC1jb2xcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3Jvd3MubWFwKChyb3cpID0+IChcblx0XHRcdFx0XHRcdDxkaXYga2V5PXtyb3cuaWR9IGNsYXNzTmFtZT1cImZsZXggZmxleC0xIHJlbGF0aXZlIG1pbi1oLVs2MHB4XSBcIj5cblx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHQndy00MCBib3JkZXItYiBib3JkZXItciBwLTIgZmxleCBmbGV4LXNocmluay0wIHN0aWNreSBsZWZ0LTAgei0yMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRyb3cucmVzb3VyY2UuY29sb3IgfHwgJycsXG5cdFx0XHRcdFx0XHRcdFx0XHRyb3cucmVzb3VyY2UuYmFja2dyb3VuZENvbG9yIHx8ICdiZy1iYWNrZ3JvdW5kJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRcdFx0XHRcdGNvbG9yOiByb3cucmVzb3VyY2UuY29sb3IsXG5cdFx0XHRcdFx0XHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IHJvdy5yZXNvdXJjZS5iYWNrZ3JvdW5kQ29sb3IsXG5cdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHtyZW5kZXJSZXNvdXJjZSA/IChcblx0XHRcdFx0XHRcdFx0XHRcdHJlbmRlclJlc291cmNlKHJvdy5yZXNvdXJjZSlcblx0XHRcdFx0XHRcdFx0XHQpIDogKFxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJicmVhay13b3JkcyB0ZXh0LXNtXCI+e3Jvdy50aXRsZX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXgtMSBmbGV4XCI+XG5cdFx0XHRcdFx0XHRcdFx0e3Jvdy5jZWxscy5tYXAoKGNlbGwpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdDxHcmlkQ2VsbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2NlbGwuaWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGluZGV4PXtjZWxsLnZhbHVlLmRheSgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXk9e2NlbGwudmFsdWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jvdy5pZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiYm9yZGVyLXIgYm9yZGVyLWIgdy0yMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdCkpfVxuXG5cdFx0XHRcdFx0XHRcdFx0ey8qIEV2ZW50cyBsYXllciBwb3NpdGlvbmVkIGFic29sdXRlbHkgb3ZlciB0aGUgcmVzb3VyY2Ugcm93ICovfVxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCB6LTEwIHBvaW50ZXItZXZlbnRzLW5vbmVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxSZXNvdXJjZUV2ZW50c0xheWVyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRheXM9e2RheXN9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jvdy5pZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIC8+IHsvKiB2ZXJ0aWNhbCBzY3JvbGxiYXIgKi99XG5cdFx0XHQ8U2Nyb2xsQmFyIG9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiIGNsYXNzTmFtZT1cInotMzBcIiAvPnsnICd9XG5cdFx0XHR7LyogaG9yaXpvbnRhbCBzY3JvbGxiYXIgKi99XG5cdFx0PC9TY3JvbGxBcmVhPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUmVzb3VyY2VEYXlIb3Jpem9udGFsIH0gZnJvbSAnLi9yZXNvdXJjZS1kYXktaG9yaXpvbnRhbCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlRGF5VmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdHJldHVybiA8UmVzb3VyY2VEYXlIb3Jpem9udGFsIC8+XG59XG4iLAogICAgImltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHQsIHN0aWNreVZpZXdIZWFkZXIsIHZpZXdIZWFkZXJDbGFzc05hbWUgfSA9XG5cdFx0dXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdC8vIEdlbmVyYXRlIGNhbGVuZGFyIGdyaWQgLSBkYXlzIG9mIHRoZSBtb250aFxuXHRjb25zdCBtb250aERheXMgPSB1c2VNZW1vPGRheWpzLkRheWpzW10+KCgpID0+IHtcblx0XHRjb25zdCBkYXlzSW5Nb250aCA9IGN1cnJlbnREYXRlLmRheXNJbk1vbnRoKClcblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogZGF5c0luTW9udGggfSwgKF8sIGkpID0+XG5cdFx0XHRjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpLmFkZChpLCAnZGF5Jylcblx0XHQpXG5cdH0sIFtjdXJyZW50RGF0ZV0pXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1mdWxsIGJvcmRlclwiPlxuXHRcdFx0PFJlc291cmNlRXZlbnRHcmlkIGRheXM9e21vbnRoRGF5c30+XG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2ZsZXggaC0xMiB3LWZpdCcsXG5cdFx0XHRcdFx0XHRzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMSBiZy1iYWNrZ3JvdW5kJywgLy8gWi1pbmRleCBhYm92ZSB0aGUgbGVmdCBzdGlja3kgcmVzb3VyY2UgY29sdW1uXG5cdFx0XHRcdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidy00MCBib3JkZXItYiBib3JkZXItciBmbGV4LXNocmluay0wIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVzb3VyY2VzJyl9PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHR7bW9udGhEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLW1vbnRoLWhlYWRlci0ke2RheS50b0lTT1N0cmluZygpfWBcblxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PEFuaW1hdGVQcmVzZW5jZSBrZXk9e2Ake2tleX0tcHJlc2VuY2VgfSBtb2RlPVwid2FpdFwiPlxuXHRcdFx0XHRcdFx0XHRcdDxtb3Rpb24uZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2Ake2tleX0tbW90aW9uYH1cblx0XHRcdFx0XHRcdFx0XHRcdGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG5cdFx0XHRcdFx0XHRcdFx0XHRhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cblx0XHRcdFx0XHRcdFx0XHRcdGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG5cdFx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uPXt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAwLjI1LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlYXNlOiAnZWFzZUluT3V0Jyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVsYXk6IGluZGV4ICogMC4wNSxcblx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LTIwIGJvcmRlci1iIGJvcmRlci1yIGZsZXgtc2hyaW5rLTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZmxleC1jb2xcIlxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LW1lZGl1bVwiPntkYXkuZm9ybWF0KCdEJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdkZGQnKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDwvbW90aW9uLmRpdj5cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlUHJlc2VuY2U+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJlc291cmNlTW9udGhIb3Jpem9udGFsIH0gZnJvbSAnLi9yZXNvdXJjZS1tb250aC1ob3Jpem9udGFsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VNb250aFZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRyZXR1cm4gPFJlc291cmNlTW9udGhIb3Jpem9udGFsIC8+XG59XG4iLAogICAgImltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrSG9yaXpvbnRhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHR0LFxuXHRcdHN0aWNreVZpZXdIZWFkZXIsXG5cdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRjdXJyZW50TG9jYWxlLFxuXHRcdHRpbWVGb3JtYXQsXG5cdH0gPSB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0Ly8gR2VuZXJhdGUgd2VlayBkYXlzXG5cdGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspLFxuXHRcdFtjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHQvLyBHZW5lcmF0ZSB0aW1lIGNvbHVtbnMgKGhvdXJseSBzbG90cylcblx0Y29uc3Qgd2Vla0hvdXJzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0cmV0dXJuIHdlZWtEYXlzLmZsYXRNYXAoKGRheSkgPT5cblx0XHRcdEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBob3VyKSA9PiBkYXkuaG91cihob3VyKS5taW51dGUoMCkpXG5cdFx0KVxuXHR9LCBbd2Vla0RheXNdKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtZnVsbCBmbGV4LWNvbCBib3JkZXJcIj5cblx0XHRcdDxSZXNvdXJjZUV2ZW50R3JpZCBkYXlzPXt3ZWVrSG91cnN9IGdyaWRUeXBlPVwiaG91clwiPlxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdmbGV4IGgtMjQgdy1maXQnLFxuXHRcdFx0XHRcdFx0c3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMjEgYmctYmFja2dyb3VuZCcsIC8vIFotaW5kZXggYWJvdmUgdGhlIGxlZnQgc3RpY2t5IHJlc291cmNlIGNvbHVtblxuXHRcdFx0XHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZVxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctNDAgYm9yZGVyLWIgYm9yZGVyLXIgZmxleC1zaHJpbmstMCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYm9yZGVyLWIgYm9yZGVyLXIgZmxleCBmbGV4LWNvbFwiPlxuXHRcdFx0XHRcdFx0ey8qIERheSBoZWFkZXIgcm93ICovfVxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTIgYm9yZGVyLWJcIj5cblx0XHRcdFx0XHRcdFx0e3dlZWtEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlzVG9kYXkgPSBkYXkuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGtleSA9IGByZXNvdXJjZS13ZWVrLWhlYWRlci0ke2RheS50b0lTT1N0cmluZygpfS1kYXlgXG5cblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PEFuaW1hdGVQcmVzZW5jZSBrZXk9e2Ake2tleX0tcHJlc2VuY2VgfSBtb2RlPVwid2FpdFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8bW90aW9uLmRpdlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17YCR7a2V5fS1tb3Rpb25gfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXhpdD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uPXt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkdXJhdGlvbjogMC4yNSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVhc2U6ICdlYXNlSW5PdXQnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVsYXk6IGluZGV4ICogMC4wNSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnZmxleC1zaHJpbmstMCBib3JkZXItciBmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciBmb250LW1lZGl1bSB3LVtjYWxjKDI0KnZhcigtLXNwYWNpbmcpKjIwKV0nLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXNUb2RheSAmJiAnYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInN0aWNreSBsZWZ0LTEvMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnTS9EJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9tb3Rpb24uZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0PC9BbmltYXRlUHJlc2VuY2U+XG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHR9KX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHR7LyogVGltZSBoZWFkZXIgcm93ICovfVxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTIgYm9yZGVyLWJcIj5cblx0XHRcdFx0XHRcdFx0e3dlZWtIb3Vycy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpc05vd0hvdXIgPSBjb2wuaXNTYW1lKGRheWpzKCksICdob3VyJylcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBrZXkgPSBgcmVzb3VyY2Utd2Vlay1oZWFkZXItJHtjb2wudG9JU09TdHJpbmcoKX0taG91cmBcblxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8QW5pbWF0ZVByZXNlbmNlIGtleT17YCR7a2V5fS1wcmVzZW5jZWB9IG1vZGU9XCJ3YWl0XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxtb3Rpb24uZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2ByZXNvdXJjZS13ZWVrLXRpbWUtbGFiZWwtJHtjb2wuZm9ybWF0KCdISCcpfWB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRyYW5zaXRpb249e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAwLjI1LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWFzZTogJ2Vhc2VJbk91dCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWxheTogaW5kZXggKiAwLjA1LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd3LTIwIGJvcmRlci1yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQteHMgZmxleC1zaHJpbmstMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpc05vd0hvdXIgJiYgJ2JnLWJsdWUtNTAgdGV4dC1ibHVlLTYwMCBmb250LW1lZGl1bSdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aG91cjEyOiB0aW1lRm9ybWF0ID09PSAnMTItaG91cicsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSkuZm9ybWF0KGNvbC50b0RhdGUoKSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvbW90aW9uLmRpdj5cblx0XHRcdFx0XHRcdFx0XHRcdDwvQW5pbWF0ZVByZXNlbmNlPlxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0fSl9XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L1Jlc291cmNlRXZlbnRHcmlkPlxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrSG9yaXpvbnRhbCB9IGZyb20gJy4vcmVzb3VyY2Utd2Vlay1ob3Jpem9udGFsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdHJldHVybiA8UmVzb3VyY2VXZWVrSG9yaXpvbnRhbCAvPlxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJQcm92aWRlciB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHtcblx0SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcEV2ZW50LFxuXHRJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wcyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7XG5cdERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRXRUVLX0RBWVNfTlVNQkVSX01BUCxcbn0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgbm9ybWFsaXplRXZlbnRzLCBzYWZlRGF0ZSB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhckJvZHkgfSBmcm9tICcuL3Jlc291cmNlLWNhbGVuZGFyLWJvZHknXG5cbmV4cG9ydCBjb25zdCBJbGFteVJlc291cmNlQ2FsZW5kYXI6IFJlYWN0LkZDPElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BzPiA9ICh7XG5cdGV2ZW50cyA9IFtdLFxuXHRyZXNvdXJjZXMgPSBbXSxcblx0Zmlyc3REYXlPZldlZWsgPSAnc3VuZGF5Jyxcblx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRpbml0aWFsRGF0ZSxcblx0ZGlzYWJsZURyYWdBbmREcm9wID0gZmFsc2UsXG5cdGRheU1heEV2ZW50cyA9IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGV2ZW50U3BhY2luZyA9IEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHQuLi5wcm9wc1xufSkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXJcblx0XHRcdGV2ZW50cz17bm9ybWFsaXplRXZlbnRzPElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4oXG5cdFx0XHRcdGV2ZW50c1xuXHRcdFx0KX1cblx0XHRcdHJlc291cmNlcz17cmVzb3VyY2VzfVxuXHRcdFx0Zmlyc3REYXlPZldlZWs9e1dFRUtfREFZU19OVU1CRVJfTUFQW2ZpcnN0RGF5T2ZXZWVrXX1cblx0XHRcdGluaXRpYWxWaWV3PXtpbml0aWFsVmlld31cblx0XHRcdGluaXRpYWxEYXRlPXtzYWZlRGF0ZShpbml0aWFsRGF0ZSl9XG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3A9e2Rpc2FibGVEcmFnQW5kRHJvcH1cblx0XHRcdGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfVxuXHRcdFx0dGltZUZvcm1hdD17dGltZUZvcm1hdH1cblx0XHRcdGV2ZW50U3BhY2luZz17ZXZlbnRTcGFjaW5nfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxSZXNvdXJjZUNhbGVuZGFyQm9keSAvPlxuXHRcdDwvUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyPlxuXHQpXG59XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiQUFJQSxnQkFBUyxlQ0pULGdCQUFTLGVDQVQsc0JBQ0EsMENBQ0EsOENBQ0EsK0NBQ0EsMkNBQ0EsdUNBQ0EseUNBQ0Esb0NBQ0Esd0NBQ0EsMkNBZUEsMkJBQ0EsMkJBQ0EsOEJBQ0EsOEJBQ0EsOEJBQ0EsOEJBQ0EsOEJBQ0EsOEJBQ0EsOEJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsOEJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsOEJBQ0EsOEJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsOEJBQ0EsOEJBQ0EsOEJBQ0EsOEJBQ0EsOEJB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
|
|
6
|
+
//# debugId=5C02E83D0F75025264756E2164756E21
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2luZGV4LnRzIiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlci50cyIsICJzcmMvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnLnRzIiwgInNyYy9saWIvdXRpbHMvaW5kZXgudHMiLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktY2FsZW5kYXIudHN4IiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2J1dHRvbi50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvZGlhbG9nLnRzeCIsICJzcmMvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQudHMiLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dC50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9jb250ZXh0LnRzIiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICJzcmMvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZS50cyIsICJzcmMvbGliL3RyYW5zbGF0aW9ucy9kZWZhdWx0LnRzIiwgInNyYy9saWIvdXRpbHMvZGF0ZS11dGlscy50cyIsICJzcmMvbGliL2NvbnN0YW50cy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZy50c3giLCAic3JjL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9kbmQtdXRpbHMudHMiLCAic3JjL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9ldmVudC1kcmFnLW92ZXJsYXkudHN4IiwgInNyYy9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvY2hlY2tib3gudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYWxlbmRhci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvcG9wb3Zlci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvaW5wdXQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2xhYmVsLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYS50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvdGltZS1waWNrZXIudHN4IiwgInNyYy9ob29rcy91c2UtYXV0b2NvbXBsZXRlLXRpbWVwaWNrZXIudHMiLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2J1c2luZXNzLWhvdXJzLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9ldmVudC1mb3JtLXV0aWxzLnRzIiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0b3IvcmVjdXJyZW5jZS1lZGl0b3IudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2NhcmQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL3NlbGVjdC50c3giLCAic3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvaG9va3MvdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zLnRzIiwgInNyYy9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS1kaWFsb2cudHN4IiwgInNyYy9jb21wb25lbnRzL2hlYWRlci9iYXNlLWhlYWRlci50c3giLCAic3JjL2xpYi91dGlscy9leHBvcnQtaWNhbC50cyIsICJzcmMvY29tcG9uZW50cy9oZWFkZXIvdGl0bGUtY29udGVudC50c3giLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3ZpZXctY29udHJvbHMudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2RheS12aWV3LnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdy50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1yb3cudHN4IiwgInNyYy9jb21wb25lbnRzL2dyaWQtY2VsbC50c3giLCAic3JjL2NvbXBvbmVudHMvZGF5LW51bWJlci50c3giLCAic3JjL2NvbXBvbmVudHMvYWxsLWV2ZW50cy1kaWFsb2cudHN4IiwgInNyYy9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQudHN4IiwgInNyYy9jb21wb25lbnRzL2Ryb3BwYWJsZS1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLWV2ZW50cy1sYXllci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZFdlZWtFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi13ZWVrLWV2ZW50cy50cyIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1jb2wudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1ldmVudHMtbGF5ZXIudHN4IiwgInNyYy9jb21wb25lbnRzL2N1cnJlbnQtdGltZS1pbmRpY2F0b3IudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi1kYXktZXZlbnRzLnRzIiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1oZWFkZXItY29udGFpbmVyLnRzeCIsICJzcmMvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvbW9udGgtdmlldy50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1oZWFkZXItY29udGFpbmVyLnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L21vbnRoLWhlYWRlci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstdmlldy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMveWVhci12aWV3L3llYXItdmlldy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvcHJvdmlkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LXJlc291cmNlLWNhbGVuZGFyL3Jlc291cmNlLWNhbGVuZGFyLWJvZHkudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L3Jlc291cmNlLWRheS1ob3Jpem9udGFsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9yZXNvdXJjZS1kYXktdmVydGljYWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2luZGV4LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L3Jlc291cmNlLW1vbnRoLWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvcmVzb3VyY2UtbW9udGgtdmVydGljYWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvaW5kZXgudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9yZXNvdXJjZS13ZWVrLWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvaW5kZXgudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LXJlc291cmNlLWNhbGVuZGFyL2lsYW15LXJlc291cmNlLWNhbGVuZGFyLnRzeCJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIvLyBNYWluIGNhbGVuZGFyIGNvbXBvbmVudHNcblxuLy8gUmUtZXhwb3J0IHJydWxlLmpzIHR5cGVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHR5cGUgeyBGcmVxdWVuY3ksIFdlZWtkYXkgfSBmcm9tICdycnVsZSdcbmV4cG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG4vLyBFeHBvcnQgdHlwZXNcbmV4cG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuLy8gUlJVTEUtYmFzZWQgcmVjdXJyZW5jZSBzeXN0ZW1cbmV4cG9ydCB7XG5cdGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzLFxuXHRpc1JlY3VycmluZ0V2ZW50LFxufSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuZXhwb3J0IHR5cGUgeyBFdmVudEZvcm1Qcm9wcyB9IGZyb20gJy4vY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5leHBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQsIFdlZWtEYXlzIH0gZnJvbSAnLi9jb21wb25lbnRzL3R5cGVzJ1xuZXhwb3J0IHsgSWxhbXlDYWxlbmRhciB9IGZyb20gJy4vZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhcidcbmV4cG9ydCB0eXBlIHsgVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4gfSBmcm9tICcuL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbi8vIFB1YmxpYyBjYWxlbmRhciBjb250ZXh0IGhvb2tzXG5leHBvcnQgeyB1c2VJbGFteUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJy4vZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuZXhwb3J0IHR5cGUge1xuXHRDZWxsQ2xpY2tJbmZvLFxuXHRJbGFteUNhbGVuZGFyUHJvcHMsXG59IGZyb20gJy4vZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5leHBvcnQgdHlwZSB7IElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BzIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LXJlc291cmNlLWNhbGVuZGFyJ1xuZXhwb3J0IHsgSWxhbXlSZXNvdXJjZUNhbGVuZGFyIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LXJlc291cmNlLWNhbGVuZGFyL2lsYW15LXJlc291cmNlLWNhbGVuZGFyJ1xuZXhwb3J0IHR5cGUgeyBVc2VJbGFteVJlc291cmNlQ2FsZW5kYXJDb250ZXh0UmV0dXJuIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5leHBvcnQgeyB1c2VJbGFteVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG4vLyBSZXNvdXJjZSBjYWxlbmRhciB0eXBlc1xuZXhwb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJy4vZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5leHBvcnQgeyBkZWZhdWx0VHJhbnNsYXRpb25zIH0gZnJvbSAnLi9saWIvdHJhbnNsYXRpb25zL2RlZmF1bHQnXG5cbi8vIFRyYW5zbGF0aW9uIHN5c3RlbVxuZXhwb3J0IHR5cGUge1xuXHRUcmFuc2xhdGlvbktleSxcblx0VHJhbnNsYXRpb25zLFxuXHRUcmFuc2xhdG9yRnVuY3Rpb24sXG59IGZyb20gJy4vbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmV4cG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3LCBUaW1lRm9ybWF0IH0gZnJvbSAnLi90eXBlcydcbiIsCiAgICAiaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cydcbmltcG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgb21pdEtleXMsIHNhZmVEYXRlIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBpc1JlY3VycmluZ0V2ZW50ID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG5cdHJldHVybiBCb29sZWFuKGV2ZW50LnJydWxlIHx8IGV2ZW50LnJlY3VycmVuY2VJZCB8fCBldmVudC51aWQpXG59XG5cbmludGVyZmFjZSBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzIHtcblx0ZXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0Y3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHN0YXJ0RGF0ZTogZGF5anMuRGF5anNcblx0ZW5kRGF0ZTogZGF5anMuRGF5anNcbn1cblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzID0gKHtcblx0ZXZlbnQsXG5cdGN1cnJlbnRFdmVudHMsXG5cdHN0YXJ0RGF0ZSxcblx0ZW5kRGF0ZSxcbn06IEdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzUHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHQvLyBJZiBub3QgYSByZWN1cnJpbmcgZXZlbnQsIHJldHVybiBlbXB0eSBhcnJheVxuXHRpZiAoIWV2ZW50LnJydWxlKSB7XG5cdFx0cmV0dXJuIFtdXG5cdH1cblxuXHR0cnkge1xuXHRcdC8vIENyZWF0ZSBydWxlIGZyb20gUlJ1bGVPcHRpb25zIGVuc3VyaW5nIGR0c3RhcnQgaXMgYWx3YXlzIHByb3ZpZGVkXG5cdFx0Ly8gSWYgZHRzdGFydCBpcyBtaXNzaW5nIGZyb20gdGhlIFJSVUxFLCB1c2UgdGhlIGV2ZW50J3Mgc3RhcnQgdGltZSBhcyBmYWxsYmFja1xuXHRcdGNvbnN0IHJ1bGVPcHRpb25zOiBSUnVsZU9wdGlvbnMgPSB7XG5cdFx0XHQuLi5ldmVudC5ycnVsZSxcblx0XHRcdGR0c3RhcnQ6IGV2ZW50LnJydWxlLmR0c3RhcnQgfHwgZXZlbnQuc3RhcnQudG9EYXRlKCksXG5cdFx0fVxuXHRcdGNvbnN0IHJ1bGUgPSBuZXcgUlJ1bGUocnVsZU9wdGlvbnMpXG5cblx0XHRjb25zdCBvdmVycmlkZXMgPSBjdXJyZW50RXZlbnRzLmZpbHRlcihcblx0XHRcdChlKSA9PiBlLnJlY3VycmVuY2VJZCAmJiBlLnVpZCA9PT0gZXZlbnQudWlkXG5cdFx0KVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIGV2ZW50IGR1cmF0aW9uIHRvIGV4cGFuZCBzZWFyY2ggd2luZG93IGZvciBldmVudHMgdGhhdCBzcGFuIHRoZSByYW5nZVxuXHRcdGNvbnN0IGV2ZW50RHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcblxuXHRcdC8vIEV4cGFuZCBzZWFyY2ggd2luZG93IGJhY2t3YXJkIGJ5IGV2ZW50IGR1cmF0aW9uIHRvIGNhdGNoIGV2ZW50cyB0aGF0IHN0YXJ0IGJlZm9yZVxuXHRcdC8vIHRoZSByYW5nZSBidXQgc3BhbiBpbnRvIGl0XG5cdFx0Y29uc3QgZXhwYW5kZWRTdGFydERhdGVUaW1lID0gc3RhcnREYXRlXG5cdFx0XHQuc3VidHJhY3QoZXZlbnREdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcblx0XHRcdC50b0RhdGUoKVxuXHRcdGNvbnN0IGVuZERhdGVUaW1lID0gZW5kRGF0ZS50b0RhdGUoKVxuXG5cdFx0Ly8gR2V0IGFsbCBvY2N1cnJlbmNlcyBpbiB0aGUgZXhwYW5kZWQgcmFuZ2Vcblx0XHRjb25zdCBvY2N1cnJlbmNlcyA9IHJ1bGUuYmV0d2VlbihleHBhbmRlZFN0YXJ0RGF0ZVRpbWUsIGVuZERhdGVUaW1lLCB0cnVlKVxuXG5cdFx0Ly8gQ29udmVydCBvY2N1cnJlbmNlcyB0byBDYWxlbmRhckV2ZW50IGluc3RhbmNlc1xuXHRcdGNvbnN0IHJlY3VycmluZ0V2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gb2NjdXJyZW5jZXNcblx0XHRcdC5tYXAoKG9jY3VycmVuY2UsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9jY3VycmVuY2VEYXRlID0gZGF5anMob2NjdXJyZW5jZSlcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmdPdmVycmlkZSA9IG92ZXJyaWRlcy5maW5kKChlKSA9PlxuXHRcdFx0XHRcdHNhZmVEYXRlKGUucmVjdXJyZW5jZUlkKT8uaXNTYW1lKG9jY3VycmVuY2VEYXRlKVxuXHRcdFx0XHQpXG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUncyBhbiBvdmVycmlkZSwgdXNlIGl0XG5cdFx0XHRcdGlmIChleGlzdGluZ092ZXJyaWRlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgLi4uZXZlbnQsIC4uLmV4aXN0aW5nT3ZlcnJpZGUgfVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSBkdXJhdGlvbiBmcm9tIHRoZSBvcmlnaW5hbCBldmVudFxuXHRcdFx0XHRjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gZXZlbnQuZW5kLmRpZmYoZXZlbnQuc3RhcnQpXG5cdFx0XHRcdGNvbnN0IG5ld0VuZFRpbWUgPSBvY2N1cnJlbmNlRGF0ZS5hZGQob3JpZ2luYWxEdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcblx0XHRcdFx0Y29uc3QgcmVjdXJyaW5nRXZlbnRJZCA9IGAke2V2ZW50LmlkfV8ke2luZGV4fWBcblx0XHRcdFx0Y29uc3QgcGFyZW50VUlEID0gZXZlbnQudWlkIHx8IGAke2V2ZW50LmlkfUBpbGFteS5jYWxlbmRhcmBcblxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIHJlY3VycmluZyBldmVudCBpbnN0YW5jZVxuXHRcdFx0XHRjb25zdCByZWN1cnJpbmdFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0XHRpZDogcmVjdXJyaW5nRXZlbnRJZCxcblx0XHRcdFx0XHRzdGFydDogb2NjdXJyZW5jZURhdGUsXG5cdFx0XHRcdFx0ZW5kOiBuZXdFbmRUaW1lLFxuXHRcdFx0XHRcdHVpZDogcGFyZW50VUlELCAvLyBTYW1lIFVJRCBhcyBwYXJlbnQgZm9yIHByb3BlciBncm91cGluZ1xuXHRcdFx0XHRcdHJydWxlOiB1bmRlZmluZWQsIC8vIEluc3RhbmNlIGV2ZW50cyBkb24ndCBoYXZlIFJSVUxFXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVjdXJyaW5nRXZlbnRcblx0XHRcdH0pXG5cdFx0XHQuZmlsdGVyKChyZWN1cnJpbmdFdmVudCkgPT4ge1xuXHRcdFx0XHQvLyBGaWx0ZXIgb3V0IEVYREFURSBleGNsdXNpb25zXG5cdFx0XHRcdGNvbnN0IGhhc0V4ZGF0ZXMgPSBldmVudC5leGRhdGVzICYmIGV2ZW50LmV4ZGF0ZXMubGVuZ3RoID4gMFxuXHRcdFx0XHRpZiAoaGFzRXhkYXRlcykge1xuXHRcdFx0XHRcdGNvbnN0IGV2ZW50U3RhcnRJU08gPSByZWN1cnJpbmdFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG5cdFx0XHRcdFx0Y29uc3QgaXNFeGNsdWRlZCA9IGV2ZW50LmV4ZGF0ZXMuaW5jbHVkZXMoZXZlbnRTdGFydElTTylcblx0XHRcdFx0XHRpZiAoaXNFeGNsdWRlZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRmlsdGVyIHRvIG9ubHkgaW5jbHVkZSBldmVudHMgdGhhdCBzcGFuIHRocm91Z2ggdGhlIG9yaWdpbmFsIHJlcXVlc3RlZCBkYXRlIHJhbmdlXG5cdFx0XHRcdC8vIEFuIGV2ZW50IHNwYW5zIHRoZSByYW5nZSBpZjogZXZlbnRfc3RhcnQgPCByYW5nZV9lbmQgQU5EIGV2ZW50X2VuZCA+IHJhbmdlX3N0YXJ0XG5cdFx0XHRcdC8vIFVzZSBpc1NhbWVPckJlZm9yZS9pc1NhbWVPckFmdGVyIHRvIGluY2x1ZGUgYm91bmRhcnkgY2FzZXNcblx0XHRcdFx0Y29uc3QgZXZlbnRTcGFuc1JhbmdlID1cblx0XHRcdFx0XHRyZWN1cnJpbmdFdmVudC5zdGFydC5pc1NhbWVPckJlZm9yZShlbmREYXRlKSAmJlxuXHRcdFx0XHRcdHJlY3VycmluZ0V2ZW50LmVuZC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSlcblxuXHRcdFx0XHRyZXR1cm4gZXZlbnRTcGFuc1JhbmdlXG5cdFx0XHR9KVxuXG5cdFx0cmV0dXJuIHJlY3VycmluZ0V2ZW50c1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIEhhbmRsZSBpbnZhbGlkIFJSVUxFIG9wdGlvbnNcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRgSW52YWxpZCBSUlVMRSBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KGV2ZW50LnJydWxlKX0uIEVycm9yOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcblx0XHQpXG5cdH1cbn1cblxuaW50ZXJmYWNlIFVwZGF0ZVJlY3VycmluZ0V2ZW50UHJvcHMge1xuXHR0YXJnZXRFdmVudDogQ2FsZW5kYXJFdmVudFxuXHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuXHR0YXJnZXRFdmVudCxcblx0dXBkYXRlcyxcblx0Y3VycmVudEV2ZW50cyxcblx0c2NvcGUsXG59OiBVcGRhdGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Y29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXG5cdC8vIEZpbmQgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50XG5cdGNvbnN0IGJhc2VFdmVudEluZGV4ID0gdXBkYXRlZEV2ZW50cy5maW5kSW5kZXgoKGUpID0+IHtcblx0XHRjb25zdCBwYXJlbnRVaWQgPSBlLnVpZCB8fCBgJHtlLmlkfUBpbGFteS5jYWxlbmRhcmBcblx0XHRyZXR1cm4gcGFyZW50VWlkID09PSB0YXJnZXRFdmVudC51aWQgJiYgZS5ycnVsZSAmJiAhZS5yZWN1cnJlbmNlSWRcblx0fSlcblxuXHRpZiAoYmFzZUV2ZW50SW5kZXggPT09IC0xKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdCYXNlIHJlY3VycmluZyBldmVudCBub3QgZm91bmQnKVxuXHR9XG5cblx0Y29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuXHRzd2l0Y2ggKHNjb3BlKSB7XG5cdFx0Y2FzZSAndGhpcyc6IHtcblx0XHRcdC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGJhc2UgZXZlbnQgYW5kIGNyZWF0ZSBzdGFuZGFsb25lIG1vZGlmaWVkIGV2ZW50XG5cdFx0XHRjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0Y29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cblx0XHRcdGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuXHRcdFx0Y29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHRleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuXG5cdFx0XHQvLyBDcmVhdGUgc3RhbmRhbG9uZSBtb2RpZmllZCBldmVudCB3aXRoIHJlY3VycmVuY2VJZFxuXHRcdFx0Y29uc3QgbW9kaWZpZWRFdmVudElkID0gYCR7dGFyZ2V0RXZlbnQuaWR9X21vZGlmaWVkXyR7RGF0ZS5ub3coKX1gXG5cdFx0XHRjb25zdCBtb2RpZmllZEV2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFRPRE86IGZpeCB0aGUgdHlwZXNcblx0XHRcdFx0Li4ub21pdEtleXModGFyZ2V0RXZlbnQsIFsnd2lkdGgnLCAnaGVpZ2h0JywgJ3RvcCcsICdsZWZ0JywgJ3JpZ2h0J10pLFxuXHRcdFx0XHQuLi51cGRhdGVzLFxuXHRcdFx0XHRpZDogbW9kaWZpZWRFdmVudElkLFxuXHRcdFx0XHRyZWN1cnJlbmNlSWQ6IHRhcmdldEV2ZW50U3RhcnRJU08sIC8vIFRoaXMgbWFya3MgaXQgYXMgYSBtb2RpZmllZCBpbnN0YW5jZVxuXHRcdFx0XHR1aWQ6IGJhc2VFdmVudC51aWQgfHwgYCR7YmFzZUV2ZW50LmlkfUBpbGFteS5jYWxlbmRhcmAsIC8vIEtlZXAgc2FtZSBVSUQgYXMgYmFzZSBldmVudCAoaUNhbGVuZGFyIHN0YW5kYXJkKVxuXHRcdFx0XHRycnVsZTogdW5kZWZpbmVkLCAvLyBTdGFuZGFsb25lIGV2ZW50cyBkb24ndCBoYXZlIFJSVUxFXG5cdFx0XHR9IGFzIENhbGVuZGFyRXZlbnRcblx0XHRcdHVwZGF0ZWRFdmVudHMucHVzaChtb2RpZmllZEV2ZW50KVxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdmb2xsb3dpbmcnOiB7XG5cdFx0XHQvLyBcIlRoaXMgYW5kIGZvbGxvd2luZ1wiIC0gVGVybWluYXRlIG9yaWdpbmFsIHNlcmllcyBhbmQgY3JlYXRlIG5ldyBzZXJpZXNcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSB0ZXJtaW5hdGlvbiBkYXRlOiBkYXkgYmVmb3JlIHRhcmdldCB3aXRoIGVuZCBvZiBkYXkgdGltZVxuXHRcdFx0Ly8gVGhpcyBlbnN1cmVzIHRoZSBsYXN0IG9jY3VycmVuY2UgYmVmb3JlIHRhcmdldCBpcyBpbmNsdWRlZCBpbiB0aGUgdGVybWluYXRlZCBzZXJpZXNcblx0XHRcdGNvbnN0IGRheUJlZm9yZVRhcmdldCA9IHRhcmdldEV2ZW50LnN0YXJ0LnN1YnRyYWN0KDEsICdkYXknKVxuXHRcdFx0Y29uc3QgdGVybWluYXRpb25EYXRlID0gZGF5QmVmb3JlVGFyZ2V0LmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXG5cdFx0XHQvLyBVcGRhdGUgb3JpZ2luYWwgc2VyaWVzIHdpdGggVU5USUwgdG8gZW5kIGJlZm9yZSB0YXJnZXQgZGF0ZVxuXHRcdFx0Y29uc3QgdGVybWluYXRlZEV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdHJydWxlOiB7XG5cdFx0XHRcdFx0Li4uYmFzZUV2ZW50LnJydWxlLFxuXHRcdFx0XHRcdHVudGlsOiB0ZXJtaW5hdGlvbkRhdGUsXG5cdFx0XHRcdH0sXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHRlcm1pbmF0ZWRFdmVudFxuXG5cdFx0XHQvLyBDcmVhdGUgbmV3IHNlcmllcyBzdGFydGluZyBmcm9tIHRhcmdldCBkYXRlXG5cdFx0XHRjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gYmFzZUV2ZW50LmVuZC5kaWZmKGJhc2VFdmVudC5zdGFydClcblx0XHRcdGNvbnN0IG5ld1Nlcmllc1N0YXJ0VGltZSA9IHVwZGF0ZXMuc3RhcnQgfHwgdGFyZ2V0RXZlbnQuc3RhcnRcblx0XHRcdGNvbnN0IG5ld1Nlcmllc0VuZFRpbWUgPVxuXHRcdFx0XHR1cGRhdGVzLmVuZCB8fCBuZXdTZXJpZXNTdGFydFRpbWUuYWRkKG9yaWdpbmFsRHVyYXRpb24pXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNJZCA9IGAke2Jhc2VFdmVudC5pZH1fZm9sbG93aW5nYFxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzVUlEID0gYCR7bmV3U2VyaWVzSWR9QGlsYW15LmNhbGVuZGFyYFxuXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHQuLi51cGRhdGVzLFxuXHRcdFx0XHRycnVsZToge1xuXHRcdFx0XHRcdC4uLmJhc2VFdmVudC5ycnVsZSxcblx0XHRcdFx0XHQuLi51cGRhdGVzLnJydWxlLFxuXHRcdFx0XHRcdGR0c3RhcnQ6IG5ld1Nlcmllc1N0YXJ0VGltZS50b0RhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0aWQ6IG5ld1Nlcmllc0lkLFxuXHRcdFx0XHR1aWQ6IG5ld1Nlcmllc1VJRCwgLy8gTmV3IFVJRCBmb3IgbmV3IHNlcmllc1xuXHRcdFx0XHRzdGFydDogbmV3U2VyaWVzU3RhcnRUaW1lLFxuXHRcdFx0XHRlbmQ6IG5ld1Nlcmllc0VuZFRpbWUsXG5cdFx0XHRcdHJlY3VycmVuY2VJZDogdW5kZWZpbmVkLCAvLyBUaGlzIGlzIGEgbmV3IGJhc2UgZXZlbnQsIG5vdCBhbiBpbnN0YW5jZVxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50cy5wdXNoKG5ld1Nlcmllc0V2ZW50KVxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdhbGwnOiB7XG5cdFx0XHQvLyBcIkFsbCBldmVudHNcIiAtIFVwZGF0ZSB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcblx0XHRcdGNvbnN0IHVwZGF0ZWRCYXNlRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0Li4udXBkYXRlcyxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG5cdFx0XHQpXG5cdH1cblxuXHRyZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuXG5pbnRlcmZhY2UgRGVsZXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG5cdHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgZGVsZXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuXHR0YXJnZXRFdmVudCxcblx0Y3VycmVudEV2ZW50cyxcblx0c2NvcGUsXG59OiBEZWxldGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Y29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXG5cdC8vIEZpbmQgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50XG5cdGNvbnN0IGJhc2VFdmVudEluZGV4ID0gdXBkYXRlZEV2ZW50cy5maW5kSW5kZXgoKGUpID0+IHtcblx0XHRjb25zdCBwYXJlbnRVaWQgPSBlLnVpZCB8fCBgJHtlLmlkfUBpbGFteS5jYWxlbmRhcmBcblx0XHRyZXR1cm4gcGFyZW50VWlkID09PSB0YXJnZXRFdmVudC51aWQgJiYgZS5ycnVsZSAmJiAhZS5yZWN1cnJlbmNlSWRcblx0fSlcblxuXHRpZiAoYmFzZUV2ZW50SW5kZXggPT09IC0xKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdCYXNlIHJlY3VycmluZyBldmVudCBub3QgZm91bmQnKVxuXHR9XG5cblx0Y29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuXHRzd2l0Y2ggKHNjb3BlKSB7XG5cdFx0Y2FzZSAndGhpcyc6IHtcblx0XHRcdC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGV4Y2x1ZGUgdGhpcyBvY2N1cnJlbmNlXG5cdFx0XHRjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0Y29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cblx0XHRcdGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuXHRcdFx0Y29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHsgLi4uYmFzZUV2ZW50LCBleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyB9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHVwZGF0ZWRCYXNlRXZlbnRcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y2FzZSAnZm9sbG93aW5nJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGFuZCBmb2xsb3dpbmdcIiAtIFRlcm1pbmF0ZSBzZXJpZXMgd2l0aCBVTlRJTCBiZWZvcmUgdGFyZ2V0IGRhdGVcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSB0ZXJtaW5hdGlvbiBkYXRlOiBkYXkgYmVmb3JlIHRhcmdldCB3aXRoIGVuZCBvZiBkYXkgdGltZVxuXHRcdFx0Ly8gVGhpcyBlbnN1cmVzIHRoZSBsYXN0IG9jY3VycmVuY2UgYmVmb3JlIHRhcmdldCBpcyBpbmNsdWRlZCBpbiB0aGUgdGVybWluYXRlZCBzZXJpZXNcblx0XHRcdGNvbnN0IGRheUJlZm9yZVRhcmdldCA9IHRhcmdldEV2ZW50LnN0YXJ0LnN1YnRyYWN0KDEsICdkYXknKVxuXHRcdFx0Y29uc3QgdGVybWluYXRpb25EYXRlID0gZGF5QmVmb3JlVGFyZ2V0LmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXG5cdFx0XHRjb25zdCB0ZXJtaW5hdGVkRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0cnJ1bGU6IHtcblx0XHRcdFx0XHQuLi5iYXNlRXZlbnQucnJ1bGUsXG5cdFx0XHRcdFx0dW50aWw6IHRlcm1pbmF0aW9uRGF0ZSxcblx0XHRcdFx0fSxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdGVybWluYXRlZEV2ZW50XG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGNhc2UgJ2FsbCc6IHtcblx0XHRcdC8vIFwiQWxsIGV2ZW50c1wiIC0gUmVtb3ZlIHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllc1xuXHRcdFx0Y29uc3QgZXZlbnRzV2l0aG91dFRhcmdldFNlcmllcyA9IHVwZGF0ZWRFdmVudHMuZmlsdGVyKFxuXHRcdFx0XHQoZSkgPT4gZS51aWQgIT09IHRhcmdldEV2ZW50LnVpZFxuXHRcdFx0KVxuXHRcdFx0cmV0dXJuIGV2ZW50c1dpdGhvdXRUYXJnZXRTZXJpZXNcblx0XHR9XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG5cdFx0XHQpXG5cdH1cblxuXHRyZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgaXNCZXR3ZWVuIGZyb20gJ2RheWpzL3BsdWdpbi9pc0JldHdlZW4uanMnXG5pbXBvcnQgaXNTYW1lT3JBZnRlciBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JBZnRlci5qcydcbmltcG9ydCBpc1NhbWVPckJlZm9yZSBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JCZWZvcmUuanMnXG5pbXBvcnQgbG9jYWxlRGF0YSBmcm9tICdkYXlqcy9wbHVnaW4vbG9jYWxlRGF0YS5qcydcbmltcG9ydCBtaW5NYXggZnJvbSAnZGF5anMvcGx1Z2luL21pbk1heC5qcydcbmltcG9ydCB0aW1lem9uZSBmcm9tICdkYXlqcy9wbHVnaW4vdGltZXpvbmUuanMnXG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMuanMnXG5pbXBvcnQgd2Vla2RheSBmcm9tICdkYXlqcy9wbHVnaW4vd2Vla2RheS5qcydcbmltcG9ydCB3ZWVrT2ZZZWFyIGZyb20gJ2RheWpzL3BsdWdpbi93ZWVrT2ZZZWFyLmpzJ1xuXG4vLyBFeHRlbmQgZGF5anMgd2l0aCBwbHVnaW5zXG5kYXlqcy5leHRlbmQod2Vla2RheSlcbmRheWpzLmV4dGVuZCh3ZWVrT2ZZZWFyKVxuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQWZ0ZXIpXG5kYXlqcy5leHRlbmQoaXNTYW1lT3JCZWZvcmUpXG5kYXlqcy5leHRlbmQoaXNCZXR3ZWVuKVxuZGF5anMuZXh0ZW5kKG1pbk1heClcbmRheWpzLmV4dGVuZCh0aW1lem9uZSlcbmRheWpzLmV4dGVuZCh1dGMpXG5kYXlqcy5leHRlbmQobG9jYWxlRGF0YSlcblxuZXhwb3J0IGRlZmF1bHQgZGF5anNcbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDbGFzc1ZhbHVlIH0gZnJvbSAnY2xzeCdcbmltcG9ydCB7IGNsc3ggfSBmcm9tICdjbHN4J1xuaW1wb3J0IHsgdHdNZXJnZSB9IGZyb20gJ3RhaWx3aW5kLW1lcmdlJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgZnVuY3Rpb24gY24oLi4uaW5wdXRzOiBDbGFzc1ZhbHVlW10pIHtcblx0cmV0dXJuIHR3TWVyZ2UoY2xzeChpbnB1dHMpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2FmZURhdGUoXG5cdGRhdGU6IGRheWpzLkRheWpzIHwgRGF0ZSB8IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogZGF5anMuRGF5anMgfCB1bmRlZmluZWQge1xuXHRpZiAoZGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZFxuXHR9XG5cdGlmIChkYXlqcy5pc0RheWpzKGRhdGUpKSB7XG5cdFx0cmV0dXJuIGRhdGVcblx0fVxuXHRjb25zdCBwYXJzZWREYXRlID0gZGF5anMoZGF0ZSlcblx0cmV0dXJuIHBhcnNlZERhdGUuaXNWYWxpZCgpID8gcGFyc2VkRGF0ZSA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgY29uc3Qgb21pdEtleXMgPSA8VCBleHRlbmRzIG9iamVjdCwgSyBleHRlbmRzIGtleW9mIFQ+KFxuXHRvYmo6IFQsXG5cdGtleXM6IEtbXVxuKTogT21pdDxULCBLPiA9PiB7XG5cdGNvbnN0IHJlc3VsdCA9IHsgLi4ub2JqIH1cblx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdGRlbGV0ZSByZXN1bHRba2V5XVxuXHR9XG5cdHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGNhbGVuZGFyIGV2ZW50cyBmcm9tIHB1YmxpYy1mYWNpbmcgZm9ybWF0IHRvIGludGVybmFsIGZvcm1hdC5cbiAqIENvbnZlcnRzIGZsZXhpYmxlIGRhdGUgdHlwZXMgKGRheWpzLCBEYXRlLCBzdHJpbmcpIHRvIHN0cmljdCBkYXlqcyBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBldmVudHMgLSBBcnJheSBvZiBjYWxlbmRhciBldmVudHMgd2l0aCBmbGV4aWJsZSBkYXRlIHR5cGVzXG4gKiBAcmV0dXJucyBOb3JtYWxpemVkIGFycmF5IG9mIGNhbGVuZGFyIGV2ZW50cyB3aXRoIGRheWpzIGRhdGVzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlZ3VsYXIgY2FsZW5kYXIgZXZlbnRzXG4gKiBjb25zdCBldmVudHMgPSBub3JtYWxpemVFdmVudHM8SWxhbXlDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4ocHJvcEV2ZW50cylcbiAqXG4gKiAvLyBSZXNvdXJjZSBjYWxlbmRhciBldmVudHNcbiAqIGNvbnN0IHJlc291cmNlRXZlbnRzID0gbm9ybWFsaXplRXZlbnRzPElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4ocHJvcEV2ZW50cylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUV2ZW50czxcblx0VElucHV0IGV4dGVuZHMge1xuXHRcdHN0YXJ0OiBkYXlqcy5EYXlqcyB8IERhdGUgfCBzdHJpbmdcblx0XHRlbmQ6IGRheWpzLkRheWpzIHwgRGF0ZSB8IHN0cmluZ1xuXHR9LFxuXHRUT3V0cHV0LFxuPihldmVudHM6IFRJbnB1dFtdIHwgdW5kZWZpbmVkKTogVE91dHB1dFtdIHtcblx0aWYgKCFldmVudHMgfHwgIWV2ZW50cy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gW11cblx0fVxuXG5cdHJldHVybiBldmVudHMubWFwKChldmVudCkgPT4ge1xuXHRcdHJldHVybiB7XG5cdFx0XHQuLi5ldmVudCxcblx0XHRcdHN0YXJ0OiBkYXlqcy5pc0RheWpzKGV2ZW50LnN0YXJ0KSA/IGV2ZW50LnN0YXJ0IDogZGF5anMoZXZlbnQuc3RhcnQpLFxuXHRcdFx0ZW5kOiBkYXlqcy5pc0RheWpzKGV2ZW50LmVuZCkgPyBldmVudC5lbmQgOiBkYXlqcyhldmVudC5lbmQpLFxuXHRcdH0gYXMgVE91dHB1dFxuXHR9KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ2FsZW5kYXJEbmRDb250ZXh0IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQnXG5pbXBvcnQgeyBFdmVudEZvcm1EaWFsb2cgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtLWRpYWxvZydcbmltcG9ydCB7IEhlYWRlciB9IGZyb20gJ0AvY29tcG9uZW50cy9oZWFkZXInXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgRGF5VmlldyBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvZGF5LXZpZXcnXG5pbXBvcnQgeyBNb250aFZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9tb250aC12aWV3J1xuaW1wb3J0IFdlZWtWaWV3IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvd2Vlay12aWV3J1xuaW1wb3J0IFllYXJWaWV3IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy95ZWFyLXZpZXcveWVhci12aWV3J1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBDYWxlbmRhclByb3ZpZGVyIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyJ1xuLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWR1cGxpY2F0ZXNcbmltcG9ydCAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7XG5cdElsYW15Q2FsZW5kYXJQcm9wRXZlbnQsXG5cdElsYW15Q2FsZW5kYXJQcm9wcyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB7XG5cdERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRXRUVLX0RBWVNfTlVNQkVSX01BUCxcbn0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgbm9ybWFsaXplRXZlbnRzLCBzYWZlRGF0ZSB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBDYWxlbmRhckNvbnRlbnQ6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IHZpZXcsIGRheU1heEV2ZW50cyB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB2aWV3TWFwID0ge1xuXHRcdG1vbnRoOiA8TW9udGhWaWV3IGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfSBrZXk9XCJtb250aFwiIC8+LFxuXHRcdHdlZWs6IDxXZWVrVmlldyBrZXk9XCJ3ZWVrXCIgLz4sXG5cdFx0ZGF5OiA8RGF5VmlldyBrZXk9XCJkYXlcIiAvPixcblx0XHR5ZWFyOiA8WWVhclZpZXcga2V5PVwieWVhclwiIC8+LFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiIGRhdGEtdGVzdGlkPVwiaWxhbXktY2FsZW5kYXJcIj5cblx0XHRcdDxIZWFkZXIgY2xhc3NOYW1lPVwicC0xXCIgLz5cblx0XHRcdHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZVByZXNlbmNlIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuXHRcdFx0PENhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdFx0PEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuXHRcdFx0XHRcdDxtb3Rpb24uZGl2XG5cdFx0XHRcdFx0XHRhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHg6IDAgfX1cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBoLVtjYWxjKDEwMCUtMy41cmVtKV1cIlxuXHRcdFx0XHRcdFx0ZXhpdD17eyBvcGFjaXR5OiAwLCB4OiAtMjAgfX1cblx0XHRcdFx0XHRcdGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeDogMjAgfX1cblx0XHRcdFx0XHRcdGtleT17dmlld31cblx0XHRcdFx0XHRcdHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMSwgZWFzZTogJ2Vhc2VJbk91dCcgfX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImJvcmRlciBoLWZ1bGwgdy1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1ib2R5XCI+XG5cdFx0XHRcdFx0XHRcdHt2aWV3TWFwW3ZpZXddfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9tb3Rpb24uZGl2PlxuXHRcdFx0XHQ8L0FuaW1hdGVQcmVzZW5jZT5cblx0XHRcdDwvQ2FsZW5kYXJEbmRDb250ZXh0PlxuXHRcdFx0PEV2ZW50Rm9ybURpYWxvZyAvPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBJbGFteUNhbGVuZGFyOiBSZWFjdC5GQzxJbGFteUNhbGVuZGFyUHJvcHM+ID0gKHtcblx0ZXZlbnRzLFxuXHRmaXJzdERheU9mV2VlayA9ICdzdW5kYXknLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRkYXlNYXhFdmVudHMgPSBEQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRldmVudFNwYWNpbmcgPSBHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0c3RpY2t5Vmlld0hlYWRlciA9IHRydWUsXG5cdHZpZXdIZWFkZXJDbGFzc05hbWUgPSAnJyxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0Li4ucHJvcHNcbn0pID0+IHtcblx0cmV0dXJuIChcblx0XHQ8Q2FsZW5kYXJQcm92aWRlclxuXHRcdFx0ZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG5cdFx0XHRldmVudFNwYWNpbmc9e2V2ZW50U3BhY2luZ31cblx0XHRcdGV2ZW50cz17bm9ybWFsaXplRXZlbnRzPElsYW15Q2FsZW5kYXJQcm9wRXZlbnQsIENhbGVuZGFyRXZlbnQ+KGV2ZW50cyl9XG5cdFx0XHRmaXJzdERheU9mV2Vlaz17V0VFS19EQVlTX05VTUJFUl9NQVBbZmlyc3REYXlPZldlZWtdfVxuXHRcdFx0aW5pdGlhbERhdGU9e3NhZmVEYXRlKGluaXRpYWxEYXRlKX1cblx0XHRcdGluaXRpYWxWaWV3PXtpbml0aWFsVmlld31cblx0XHRcdHN0aWNreVZpZXdIZWFkZXI9e3N0aWNreVZpZXdIZWFkZXJ9XG5cdFx0XHR0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZT17dmlld0hlYWRlckNsYXNzTmFtZX1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8Q2FsZW5kYXJDb250ZW50IC8+XG5cdFx0PC9DYWxlbmRhclByb3ZpZGVyPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHtcblx0RHJhZ0NhbmNlbEV2ZW50LFxuXHREcmFnRW5kRXZlbnQsXG5cdERyYWdTdGFydEV2ZW50LFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHtcblx0RG5kQ29udGV4dCxcblx0TW91c2VTZW5zb3IsXG5cdHBvaW50ZXJXaXRoaW4sXG5cdFRvdWNoU2Vuc29yLFxuXHR1c2VTZW5zb3IsXG5cdHVzZVNlbnNvcnMsXG59IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0RGlhbG9nIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRTY29wZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IGlzUmVjdXJyaW5nRXZlbnQgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgZ2V0VXBkYXRlZEV2ZW50IH0gZnJvbSAnLi9kbmQtdXRpbHMnXG5pbXBvcnQgeyBFdmVudERyYWdPdmVybGF5IH0gZnJvbSAnLi9ldmVudC1kcmFnLW92ZXJsYXknXG5cbmludGVyZmFjZSBDYWxlbmRhckRuZENvbnRleHRQcm9wcyB7XG5cdGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENhbGVuZGFyRG5kQ29udGV4dCh7IGNoaWxkcmVuIH06IENhbGVuZGFyRG5kQ29udGV4dFByb3BzKSB7XG5cdGNvbnN0IGFjdGl2ZUV2ZW50UmVmID0gdXNlUmVmPENhbGVuZGFyRXZlbnQ+KG51bGwpXG5cdGNvbnN0IGRyYWdPdmVybGF5UmVmID0gdXNlUmVmPHtcblx0XHRzZXRBY3RpdmVFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdH0+KG51bGwpXG5cblx0Y29uc3QgeyB1cGRhdGVFdmVudCwgdXBkYXRlUmVjdXJyaW5nRXZlbnQsIGRpc2FibGVEcmFnQW5kRHJvcCB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHRcdHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuXHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQudXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3A6IGNvbnRleHQuZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdH0pKVxuXG5cdC8vIFN0YXRlIGZvciByZWN1cnJpbmcgZXZlbnQgZGlhbG9nXG5cdGNvbnN0IFtyZWN1cnJpbmdEaWFsb2csIHNldFJlY3VycmluZ0RpYWxvZ10gPSB1c2VTdGF0ZTx7XG5cdFx0aXNPcGVuOiBib29sZWFuXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PiB8IG51bGxcblx0fT4oe1xuXHRcdGlzT3BlbjogZmFsc2UsXG5cdFx0ZXZlbnQ6IG51bGwsXG5cdFx0dXBkYXRlczogbnVsbCxcblx0fSlcblxuXHQvLyBDb25maWd1cmUgc2Vuc29ycyB3aXRoIHJlZHVjZWQgYWN0aXZhdGlvbiBjb25zdHJhaW50cyBmb3IgZWFzaWVyIGRyYWdnaW5nXG5cdGNvbnN0IG1vdXNlU2Vuc29yID0gdXNlU2Vuc29yKE1vdXNlU2Vuc29yLCB7XG5cdFx0Ly8gUmVxdWlyZSBtaW5pbWFsIG1vdmVtZW50IGJlZm9yZSBhY3RpdmF0aW5nXG5cdFx0YWN0aXZhdGlvbkNvbnN0cmFpbnQ6IHtcblx0XHRcdGRpc3RhbmNlOiAyLFxuXHRcdH0sXG5cdH0pXG5cblx0Y29uc3QgdG91Y2hTZW5zb3IgPSB1c2VTZW5zb3IoVG91Y2hTZW5zb3IsIHtcblx0XHQvLyBSZWR1Y2UgZGVsYXkgZm9yIHRvdWNoIGRldmljZXNcblx0XHRhY3RpdmF0aW9uQ29uc3RyYWludDoge1xuXHRcdFx0ZGVsYXk6IDEwMCxcblx0XHRcdHRvbGVyYW5jZTogNSxcblx0XHR9LFxuXHR9KVxuXG5cdGNvbnN0IHNlbnNvcnMgPSB1c2VTZW5zb3JzKG1vdXNlU2Vuc29yLCB0b3VjaFNlbnNvcilcblxuXHQvLyBIZWxwZXIgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgYWN0dWFsIGV2ZW50IHVwZGF0ZVxuXHRjb25zdCBwZXJmb3JtRXZlbnRVcGRhdGUgPSAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHQpID0+IHtcblx0XHQvLyBWYWxpZGF0ZSBpbnB1dHNcblx0XHRpZiAoIWV2ZW50IHx8ICFldmVudC5pZCkge1xuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0aWYgKCF1cGRhdGVzIHx8IE9iamVjdC5rZXlzKHVwZGF0ZXMpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0aWYgKGlzUmVjdXJyaW5nRXZlbnQoZXZlbnQpKSB7XG5cdFx0XHQvLyBTaG93IGRpYWxvZyBmb3IgcmVjdXJyaW5nIGV2ZW50c1xuXHRcdFx0c2V0UmVjdXJyaW5nRGlhbG9nKHtcblx0XHRcdFx0aXNPcGVuOiB0cnVlLFxuXHRcdFx0XHRldmVudCxcblx0XHRcdFx0dXBkYXRlcyxcblx0XHRcdH0pXG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIERpcmVjdGx5IHVwZGF0ZSByZWd1bGFyIGV2ZW50c1xuXHRcdFx0dXBkYXRlRXZlbnQoZXZlbnQuaWQsIHVwZGF0ZXMpXG5cdFx0fVxuXHR9XG5cblx0Ly8gSGFuZGxlIHJlY3VycmluZyBldmVudCBkaWFsb2cgY29uZmlybWF0aW9uXG5cdGNvbnN0IGhhbmRsZVJlY3VycmluZ0V2ZW50Q29uZmlybSA9IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdGlmICghcmVjdXJyaW5nRGlhbG9nLmV2ZW50IHx8ICFyZWN1cnJpbmdEaWFsb2cudXBkYXRlcykge1xuXHRcdFx0c2V0UmVjdXJyaW5nRGlhbG9nKHsgaXNPcGVuOiBmYWxzZSwgZXZlbnQ6IG51bGwsIHVwZGF0ZXM6IG51bGwgfSlcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudChyZWN1cnJpbmdEaWFsb2cuZXZlbnQsIHJlY3VycmluZ0RpYWxvZy51cGRhdGVzLCB7XG5cdFx0XHRcdHNjb3BlLFxuXHRcdFx0XHRldmVudERhdGU6IHJlY3VycmluZ0RpYWxvZy5ldmVudC5zdGFydCxcblx0XHRcdH0pXG5cdFx0fSBjYXRjaCB7XG5cdFx0XHQvLyBTaWxlbnRseSBoYW5kbGUgZXJyb3IgYW5kIHJlc2V0IGRpYWxvZyBzdGF0ZVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRzZXRSZWN1cnJpbmdEaWFsb2coeyBpc09wZW46IGZhbHNlLCBldmVudDogbnVsbCwgdXBkYXRlczogbnVsbCB9KVxuXHRcdH1cblx0fVxuXG5cdC8vIEhhbmRsZSByZWN1cnJpbmcgZXZlbnQgZGlhbG9nIGNsb3NlXG5cdGNvbnN0IGhhbmRsZVJlY3VycmluZ0V2ZW50Q2xvc2UgPSAoKSA9PiB7XG5cdFx0c2V0UmVjdXJyaW5nRGlhbG9nKHsgaXNPcGVuOiBmYWxzZSwgZXZlbnQ6IG51bGwsIHVwZGF0ZXM6IG51bGwgfSlcblx0fVxuXG5cdGNvbnN0IGhhbmRsZURyYWdTdGFydCA9IChldmVudDogRHJhZ1N0YXJ0RXZlbnQpID0+IHtcblx0XHRjb25zdCB7IGFjdGl2ZSB9ID0gZXZlbnRcblxuXHRcdC8vIFNldCB0aGUgYWN0aXZlIGV2ZW50IGJhc2VkIG9uIHRoZSBldmVudCBkYXRhXG5cdFx0aWYgKGFjdGl2ZS5kYXRhLmN1cnJlbnQ/LnR5cGUgPT09ICdjYWxlbmRhci1ldmVudCcpIHtcblx0XHRcdGRyYWdPdmVybGF5UmVmLmN1cnJlbnQ/LnNldEFjdGl2ZUV2ZW50KGFjdGl2ZS5kYXRhLmN1cnJlbnQuZXZlbnQpXG5cdFx0XHRhY3RpdmVFdmVudFJlZi5jdXJyZW50ID0gYWN0aXZlLmRhdGEuY3VycmVudC5ldmVudFxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGhhbmRsZURyYWdFbmQgPSAoZXZlbnQ6IERyYWdFbmRFdmVudCkgPT4ge1xuXHRcdGNvbnN0IHVwZGF0ZWRFdmVudCA9IGdldFVwZGF0ZWRFdmVudChldmVudCwgYWN0aXZlRXZlbnRSZWYuY3VycmVudClcblx0XHRpZiAodXBkYXRlZEV2ZW50KSB7XG5cdFx0XHRjb25zdCB7IGFjdGl2ZUV2ZW50LCB1cGRhdGVzIH0gPSB1cGRhdGVkRXZlbnRcblx0XHRcdHBlcmZvcm1FdmVudFVwZGF0ZShhY3RpdmVFdmVudCwgdXBkYXRlcylcblx0XHR9XG5cblx0XHQvLyBDbGVhciB0aGUgYWN0aXZlIGV2ZW50IHJlZmVyZW5jZVxuXHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBudWxsXG5cdFx0ZHJhZ092ZXJsYXlSZWYuY3VycmVudD8uc2V0QWN0aXZlRXZlbnQobnVsbClcblx0fVxuXG5cdGNvbnN0IGhhbmRsZURyYWdDYW5jZWwgPSAoX2V2ZW50OiBEcmFnQ2FuY2VsRXZlbnQpID0+IHtcblx0XHRhY3RpdmVFdmVudFJlZi5jdXJyZW50ID0gbnVsbFxuXHR9XG5cblx0Ly8gSWYgZHJhZyBhbmQgZHJvcCBpcyBkaXNhYmxlZCwganVzdCByZXR1cm4gY2hpbGRyZW4gd2l0aG91dCBEbmRDb250ZXh0XG5cdGlmIChkaXNhYmxlRHJhZ0FuZERyb3ApIHtcblx0XHRyZXR1cm4gY2hpbGRyZW4gYXMgUmVhY3QuUmVhY3RFbGVtZW50XG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8RG5kQ29udGV4dFxuXHRcdFx0XHRjb2xsaXNpb25EZXRlY3Rpb249e3BvaW50ZXJXaXRoaW59XG5cdFx0XHRcdG9uRHJhZ0NhbmNlbD17aGFuZGxlRHJhZ0NhbmNlbH1cblx0XHRcdFx0b25EcmFnRW5kPXtoYW5kbGVEcmFnRW5kfVxuXHRcdFx0XHRvbkRyYWdTdGFydD17aGFuZGxlRHJhZ1N0YXJ0fVxuXHRcdFx0XHRzZW5zb3JzPXtzZW5zb3JzfVxuXHRcdFx0PlxuXHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdDxFdmVudERyYWdPdmVybGF5IHJlZj17ZHJhZ092ZXJsYXlSZWZ9IC8+XG5cdFx0XHQ8L0RuZENvbnRleHQ+XG5cblx0XHRcdHsvKiBSZWN1cnJpbmcgZXZlbnQgZWRpdCBkaWFsb2cgKi99XG5cdFx0XHQ8UmVjdXJyZW5jZUVkaXREaWFsb2dcblx0XHRcdFx0ZXZlbnRUaXRsZT17cmVjdXJyaW5nRGlhbG9nLmV2ZW50Py50aXRsZSB8fCAnJ31cblx0XHRcdFx0aXNPcGVuPXtyZWN1cnJpbmdEaWFsb2cuaXNPcGVufVxuXHRcdFx0XHRvbkNsb3NlPXtoYW5kbGVSZWN1cnJpbmdFdmVudENsb3NlfVxuXHRcdFx0XHRvbkNvbmZpcm09e2hhbmRsZVJlY3VycmluZ0V2ZW50Q29uZmlybX1cblx0XHRcdFx0b3BlcmF0aW9uVHlwZT1cImVkaXRcIlxuXHRcdFx0Lz5cblx0XHQ8Lz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBTbG90IH0gZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXNsb3QnXG5pbXBvcnQgdHlwZSB7IFZhcmlhbnRQcm9wcyB9IGZyb20gJ2NsYXNzLXZhcmlhbmNlLWF1dGhvcml0eSdcbmltcG9ydCB7IGN2YSB9IGZyb20gJ2NsYXNzLXZhcmlhbmNlLWF1dGhvcml0eSdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IGJ1dHRvblZhcmlhbnRzID0gY3ZhKFxuXHRcImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1hbGwgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTQgc2hyaW5rLTAgWyZfc3ZnXTpzaHJpbmstMCBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlXCIsXG5cdHtcblx0XHR2YXJpYW50czoge1xuXHRcdFx0dmFyaWFudDoge1xuXHRcdFx0XHRkZWZhdWx0OiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBob3ZlcjpiZy1wcmltYXJ5LzkwJyxcblx0XHRcdFx0ZGVzdHJ1Y3RpdmU6XG5cdFx0XHRcdFx0J2JnLWRlc3RydWN0aXZlIHRleHQtd2hpdGUgaG92ZXI6YmctZGVzdHJ1Y3RpdmUvOTAgZm9jdXMtdmlzaWJsZTpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6Zm9jdXMtdmlzaWJsZTpyaW5nLWRlc3RydWN0aXZlLzQwIGRhcms6YmctZGVzdHJ1Y3RpdmUvNjAnLFxuXHRcdFx0XHRvdXRsaW5lOlxuXHRcdFx0XHRcdCdib3JkZXIgYmctYmFja2dyb3VuZCBzaGFkb3cteHMgaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZGFyazpiZy1pbnB1dC8zMCBkYXJrOmJvcmRlci1pbnB1dCBkYXJrOmhvdmVyOmJnLWlucHV0LzUwJyxcblx0XHRcdFx0c2Vjb25kYXJ5OlxuXHRcdFx0XHRcdCdiZy1zZWNvbmRhcnkgdGV4dC1zZWNvbmRhcnktZm9yZWdyb3VuZCBob3ZlcjpiZy1zZWNvbmRhcnkvODAnLFxuXHRcdFx0XHRnaG9zdDpcblx0XHRcdFx0XHQnaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZGFyazpob3ZlcjpiZy1hY2NlbnQvNTAnLFxuXHRcdFx0XHRsaW5rOiAndGV4dC1wcmltYXJ5IHVuZGVybGluZS1vZmZzZXQtNCBob3Zlcjp1bmRlcmxpbmUnLFxuXHRcdFx0fSxcblx0XHRcdHNpemU6IHtcblx0XHRcdFx0ZGVmYXVsdDogJ2gtOSBweC00IHB5LTIgaGFzLVs+c3ZnXTpweC0zJyxcblx0XHRcdFx0c206ICdoLTggcm91bmRlZC1tZCBnYXAtMS41IHB4LTMgaGFzLVs+c3ZnXTpweC0yLjUnLFxuXHRcdFx0XHRsZzogJ2gtMTAgcm91bmRlZC1tZCBweC02IGhhcy1bPnN2Z106cHgtNCcsXG5cdFx0XHRcdGljb246ICdzaXplLTknLFxuXHRcdFx0XHQnaWNvbi1zbSc6ICdzaXplLTgnLFxuXHRcdFx0XHQnaWNvbi1sZyc6ICdzaXplLTEwJyxcblx0XHRcdH0sXG5cdFx0fSxcblx0XHRkZWZhdWx0VmFyaWFudHM6IHtcblx0XHRcdHZhcmlhbnQ6ICdkZWZhdWx0Jyxcblx0XHRcdHNpemU6ICdkZWZhdWx0Jyxcblx0XHR9LFxuXHR9XG4pXG5cbmZ1bmN0aW9uIEJ1dHRvbih7XG5cdGNsYXNzTmFtZSxcblx0dmFyaWFudCxcblx0c2l6ZSxcblx0YXNDaGlsZCA9IGZhbHNlLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2J1dHRvbic+ICZcblx0VmFyaWFudFByb3BzPHR5cGVvZiBidXR0b25WYXJpYW50cz4gJiB7XG5cdFx0YXNDaGlsZD86IGJvb2xlYW5cblx0fSkge1xuXHRjb25zdCBDb21wID0gYXNDaGlsZCA/IFNsb3QgOiAnYnV0dG9uJ1xuXG5cdHJldHVybiAoXG5cdFx0PENvbXBcblx0XHRcdGNsYXNzTmFtZT17Y24oYnV0dG9uVmFyaWFudHMoeyB2YXJpYW50LCBzaXplLCBjbGFzc05hbWUgfSkpfVxuXHRcdFx0ZGF0YS1zbG90PVwiYnV0dG9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7IEJ1dHRvbiwgYnV0dG9uVmFyaWFudHMgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBEaWFsb2dQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWRpYWxvZydcbmltcG9ydCB7IFhJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gRGlhbG9nKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuUm9vdCBkYXRhLXNsb3Q9XCJkaWFsb2dcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ1RyaWdnZXIoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5UcmlnZ2VyPikge1xuXHRyZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5UcmlnZ2VyIGRhdGEtc2xvdD1cImRpYWxvZy10cmlnZ2VyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dQb3J0YWwoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Qb3J0YWw+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlBvcnRhbCBkYXRhLXNsb3Q9XCJkaWFsb2ctcG9ydGFsXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dDbG9zZSh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLkNsb3NlPikge1xuXHRyZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5DbG9zZSBkYXRhLXNsb3Q9XCJkaWFsb2ctY2xvc2VcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ092ZXJsYXkoe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLk92ZXJsYXk+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1ByaW1pdGl2ZS5PdmVybGF5XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZml4ZWQgaW5zZXQtMCB6LTUwIGJnLWJsYWNrLzUwJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLW92ZXJsYXlcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gRGlhbG9nQ29udGVudCh7XG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLkNvbnRlbnQ+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1BvcnRhbCBkYXRhLXNsb3Q9XCJkaWFsb2ctcG9ydGFsXCI+XG5cdFx0XHQ8RGlhbG9nT3ZlcmxheSAvPlxuXHRcdFx0PERpYWxvZ1ByaW1pdGl2ZS5Db250ZW50XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2JnLWJhY2tncm91bmQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGZpeGVkIHRvcC1bNTAlXSBsZWZ0LVs1MCVdIHotNTAgZ3JpZCB3LWZ1bGwgbWF4LXctW2NhbGMoMTAwJS0ycmVtKV0gdHJhbnNsYXRlLXgtWy01MCVdIHRyYW5zbGF0ZS15LVstNTAlXSBnYXAtNCByb3VuZGVkLWxnIGJvcmRlciBwLTYgc2hhZG93LWxnIGR1cmF0aW9uLTIwMCBzbTptYXgtdy1sZyBtYXgtaC1bOTAlXScsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy1jb250ZW50XCJcblx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0PlxuXHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdDxEaWFsb2dQcmltaXRpdmUuQ2xvc2UgY2xhc3NOYW1lPVwicmluZy1vZmZzZXQtYmFja2dyb3VuZCBmb2N1czpyaW5nLXJpbmcgZGF0YS1bc3RhdGU9b3Blbl06YmctYWNjZW50IGRhdGEtW3N0YXRlPW9wZW5dOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBhYnNvbHV0ZSB0b3AtNCByaWdodC00IHJvdW5kZWQteHMgb3BhY2l0eS03MCB0cmFuc2l0aW9uLW9wYWNpdHkgaG92ZXI6b3BhY2l0eS0xMDAgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctb2Zmc2V0LTIgZm9jdXM6b3V0bGluZS1oaWRkZW4gZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTRcIj5cblx0XHRcdFx0XHQ8WEljb24gLz5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJzci1vbmx5XCI+Q2xvc2U8L3NwYW4+XG5cdFx0XHRcdDwvRGlhbG9nUHJpbWl0aXZlLkNsb3NlPlxuXHRcdFx0PC9EaWFsb2dQcmltaXRpdmUuQ29udGVudD5cblx0XHQ8L0RpYWxvZ1BvcnRhbD5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dIZWFkZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC1jb2wgZ2FwLTIgdGV4dC1jZW50ZXIgc206dGV4dC1sZWZ0JywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy1oZWFkZXJcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gRGlhbG9nRm9vdGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBmbGV4LWNvbC1yZXZlcnNlIGdhcC0yIHNtOmZsZXgtcm93IHNtOmp1c3RpZnktZW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWZvb3RlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dUaXRsZSh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuVGl0bGU+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1ByaW1pdGl2ZS5UaXRsZVxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1sZyBsZWFkaW5nLW5vbmUgZm9udC1zZW1pYm9sZCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctdGl0bGVcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gRGlhbG9nRGVzY3JpcHRpb24oe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLkRlc2NyaXB0aW9uPikge1xuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2dQcmltaXRpdmUuRGVzY3JpcHRpb25cblx0XHRcdGNsYXNzTmFtZT17Y24oJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXNtJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy1kZXNjcmlwdGlvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQge1xuXHREaWFsb2csXG5cdERpYWxvZ0Nsb3NlLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dEZXNjcmlwdGlvbixcblx0RGlhbG9nRm9vdGVyLFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ092ZXJsYXksXG5cdERpYWxvZ1BvcnRhbCxcblx0RGlhbG9nVGl0bGUsXG5cdERpYWxvZ1RyaWdnZXIsXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5cbi8qKlxuICogR2VuZXJpYyBob29rIHRoYXQgZGV0ZWN0cyB3aGljaCBjYWxlbmRhciBjb250ZXh0IGlzIGF2YWlsYWJsZSBhbmQgcmV0dXJucyBzZWxlY3RlZCBwcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VTbWFydENhbGVuZGFyQ29udGV4dDxUPihzZWxlY3RvcjogKGNvbnRleHQpID0+IFQpOiBUIHtcblx0Ly8gQ2hlY2sgYm90aCBjb250ZXh0cyB1c2luZyB1c2VDb250ZXh0IGRpcmVjdGx5IChubyBob29rcylcblx0Y29uc3QgcmVzb3VyY2VDb250ZXh0ID0gdXNlQ29udGV4dChSZXNvdXJjZUNhbGVuZGFyQ29udGV4dClcblx0Y29uc3QgcmVndWxhckNvbnRleHQgPSB1c2VDb250ZXh0KENhbGVuZGFyQ29udGV4dClcblxuXHRpZiAocmVzb3VyY2VDb250ZXh0KSB7XG5cdFx0cmV0dXJuIHNlbGVjdG9yKHJlc291cmNlQ29udGV4dClcblx0fVxuXG5cdGlmIChyZWd1bGFyQ29udGV4dCkge1xuXHRcdHJldHVybiBzZWxlY3RvcihyZWd1bGFyQ29udGV4dClcblx0fVxuXG5cdC8vIElmIG5laXRoZXIgY29udGV4dCBpcyBhdmFpbGFibGUsIHRocm93IGFuIGVycm9yXG5cdHRocm93IG5ldyBFcnJvcihcblx0XHQndXNlU21hcnRDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIENhbGVuZGFyUHJvdmlkZXIgb3IgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyJ1xuXHQpXG59XG4iLAogICAgImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRXZlbnRGb3JtUHJvcHMgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtJ1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNsYXNzZXNPdmVycmlkZSxcblx0Q2VsbENsaWNrSW5mbyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9uS2V5IH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhclZpZXcsIFRpbWVGb3JtYXQgfSBmcm9tICdAL3R5cGVzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyQ29udGV4dFR5cGUge1xuXHRjdXJyZW50RGF0ZTogZGF5anMuRGF5anNcblx0dmlldzogQ2FsZW5kYXJWaWV3XG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHJhd0V2ZW50czogQ2FsZW5kYXJFdmVudFtdIC8vIFVucHJvY2Vzc2VkIGV2ZW50cyBmb3IgZXhwb3J0XG5cdGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuXHRzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRzZWxlY3RlZERhdGU6IGRheWpzLkRheWpzIHwgbnVsbFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG5cdHNldEN1cnJlbnREYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcblx0c2VsZWN0RGF0ZTogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG5cdHNldFZpZXc6ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcblx0bmV4dFBlcmlvZDogKCkgPT4gdm9pZFxuXHRwcmV2UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHRvZGF5OiAoKSA9PiB2b2lkXG5cdGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0dXBkYXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50Pixcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG5cdGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdCkgPT4gdm9pZFxuXHRvcGVuRXZlbnRGb3JtOiAoZXZlbnREYXRhPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHRjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxuXHRnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IChcblx0XHRzdGFydERhdGU6IGRheWpzLkRheWpzLFxuXHRcdGVuZERhdGU6IGRheWpzLkRheWpzXG5cdCkgPT4gQ2FsZW5kYXJFdmVudFtdXG5cdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRyZW5kZXJFdmVudD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdG9uRXZlbnRDbGljazogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uQ2VsbENsaWNrOiAoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4gdm9pZFxuXHRjdXJyZW50TG9jYWxlPzogc3RyaW5nXG5cdGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuXHRkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGV2ZW50U3BhY2luZzogbnVtYmVyXG5cdHN0aWNreVZpZXdIZWFkZXI6IGJvb2xlYW5cblx0dmlld0hlYWRlckNsYXNzTmFtZTogc3RyaW5nXG5cdGhlYWRlckNvbXBvbmVudD86IFJlYWN0LlJlYWN0Tm9kZSAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNvbXBvbmVudFxuXHRoZWFkZXJDbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjbGFzc1xuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRyZW5kZXJFdmVudEZvcm0/OiAocHJvcHM6IEV2ZW50Rm9ybVByb3BzKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0Ly8gVHJhbnNsYXRpb24gZnVuY3Rpb25cblx0dDogKGtleTogVHJhbnNsYXRpb25LZXkpID0+IHN0cmluZ1xuXHR0aW1lRm9ybWF0OiBUaW1lRm9ybWF0XG5cdGNsYXNzZXNPdmVycmlkZT86IENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlXG59XG5cbmV4cG9ydCBjb25zdCBDYWxlbmRhckNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8Q2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4gPVxuXHRjcmVhdGVDb250ZXh0PENhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuZXhwb3J0IGNvbnN0IHVzZUNhbGVuZGFyQ29udGV4dCA9ICgpOiBDYWxlbmRhckNvbnRleHRUeXBlID0+IHtcblx0Y29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuXHRpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCd1c2VDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIENhbGVuZGFyUHJvdmlkZXInKVxuXHR9XG5cdHJldHVybiBjb250ZXh0XG59XG5cbi8qKlxuICogU2ltcGxpZmllZCBjYWxlbmRhciBjb250ZXh0IHR5cGUgZm9yIGV4dGVybmFsIHVzZVxuICogQ29udGFpbnMgb25seSB0aGUgbW9zdCBjb21tb25seSB1c2VkIGNhbGVuZGFyIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB7XG5cdHJlYWRvbmx5IGN1cnJlbnREYXRlOiBkYXlqcy5EYXlqc1xuXHRyZWFkb25seSB2aWV3OiBDYWxlbmRhclZpZXdcblx0cmVhZG9ubHkgZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmVhZG9ubHkgaXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG5cdHJlYWRvbmx5IHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHJlYWRvbmx5IHNlbGVjdGVkRGF0ZTogZGF5anMuRGF5anMgfCBudWxsXG5cdHJlYWRvbmx5IGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcblx0cmVhZG9ubHkgc2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRyZWFkb25seSBzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcblx0cmVhZG9ubHkgc2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRyZWFkb25seSBuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHJlYWRvbmx5IHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgdG9kYXk6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgYWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRyZWFkb25seSB1cGRhdGVFdmVudDogKFxuXHRcdGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcixcblx0XHRldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHQpID0+IHZvaWRcblx0cmVhZG9ubHkgZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0cmVhZG9ubHkgb3BlbkV2ZW50Rm9ybTogKGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0cmVhZG9ubHkgY2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgYnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbn1cblxuZXhwb3J0IGNvbnN0IHVzZUlsYW15Q2FsZW5kYXJDb250ZXh0ID0gKCk6IFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuID0+IHtcblx0Y29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuXHRpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0J3VzZUlsYW15Q2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBDYWxlbmRhclByb3ZpZGVyJ1xuXHRcdClcblx0fVxuXHRyZXR1cm4ge1xuXHRcdGN1cnJlbnREYXRlOiBjb250ZXh0LmN1cnJlbnREYXRlLFxuXHRcdHZpZXc6IGNvbnRleHQudmlldyxcblx0XHRldmVudHM6IGNvbnRleHQuZXZlbnRzLFxuXHRcdGlzRXZlbnRGb3JtT3BlbjogY29udGV4dC5pc0V2ZW50Rm9ybU9wZW4sXG5cdFx0c2VsZWN0ZWRFdmVudDogY29udGV4dC5zZWxlY3RlZEV2ZW50LFxuXHRcdHNlbGVjdGVkRGF0ZTogY29udGV4dC5zZWxlY3RlZERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWs6IGNvbnRleHQuZmlyc3REYXlPZldlZWssXG5cdFx0c2V0Q3VycmVudERhdGU6IGNvbnRleHQuc2V0Q3VycmVudERhdGUsXG5cdFx0c2VsZWN0RGF0ZTogY29udGV4dC5zZWxlY3REYXRlLFxuXHRcdHNldFZpZXc6IGNvbnRleHQuc2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kOiBjb250ZXh0Lm5leHRQZXJpb2QsXG5cdFx0cHJldlBlcmlvZDogY29udGV4dC5wcmV2UGVyaW9kLFxuXHRcdHRvZGF5OiBjb250ZXh0LnRvZGF5LFxuXHRcdGFkZEV2ZW50OiBjb250ZXh0LmFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50OiBjb250ZXh0LmRlbGV0ZUV2ZW50LFxuXHRcdG9wZW5FdmVudEZvcm06IGNvbnRleHQub3BlbkV2ZW50Rm9ybSxcblx0XHRjbG9zZUV2ZW50Rm9ybTogY29udGV4dC5jbG9zZUV2ZW50Rm9ybSxcblx0XHRidXNpbmVzc0hvdXJzOiBjb250ZXh0LmJ1c2luZXNzSG91cnMsXG5cdH0gYXMgY29uc3Rcbn1cbiIsCiAgICAiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNvbnRleHRUeXBlLFxuXHRVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybixcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgdHlwZSB7IENlbGxDbGlja0luZm8gfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlIGV4dGVuZHMgQ2FsZW5kYXJDb250ZXh0VHlwZSB7XG5cdC8vIFJlc291cmNlLXNwZWNpZmljIHN0YXRlXG5cdHJlc291cmNlczogUmVzb3VyY2VbXVxuXHR2aXNpYmxlUmVzb3VyY2VzOiBTZXQ8c3RyaW5nIHwgbnVtYmVyPlxuXG5cdC8vIFJlc291cmNlIHV0aWxpdGllc1xuXHRnZXRFdmVudHNGb3JSZXNvdXJjZTogKHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcikgPT4gQ2FsZW5kYXJFdmVudFtdXG5cdGdldEV2ZW50c0ZvclJlc291cmNlczogKHJlc291cmNlSWRzOiAoc3RyaW5nIHwgbnVtYmVyKVtdKSA9PiBDYWxlbmRhckV2ZW50W11cblx0Z2V0UmVzb3VyY2VCeUlkOiAocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBSZXNvdXJjZSB8IHVuZGVmaW5lZFxuXHRnZXRWaXNpYmxlUmVzb3VyY2VzOiAoKSA9PiBSZXNvdXJjZVtdXG5cblx0Ly8gQ3Jvc3MtcmVzb3VyY2UgZXZlbnQgdXRpbGl0aWVzXG5cdGlzRXZlbnRDcm9zc1Jlc291cmNlOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IGJvb2xlYW5cblx0Z2V0RXZlbnRSZXNvdXJjZUlkczogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiAoc3RyaW5nIHwgbnVtYmVyKVtdXG5cblx0Ly8gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIGZyb20gY2FsZW5kYXIgY29udGV4dFxuXHRvbkV2ZW50Q2xpY2s6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkNlbGxDbGljazogKGluZm86IENlbGxDbGlja0luZm8pID0+IHZvaWRcblx0cmVuZGVyUmVzb3VyY2U/OiAocmVzb3VyY2U6IFJlc291cmNlKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0b3JpZW50YXRpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCdcbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0OiBSZWFjdC5Db250ZXh0PFxuXHRSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWRcbj4gPSBjcmVhdGVDb250ZXh0PFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuXG5leHBvcnQgY29uc3QgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgPSAoKTogUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlID0+IHtcblx0Y29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoUmVzb3VyY2VDYWxlbmRhckNvbnRleHQpXG5cdGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHQndXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlcidcblx0XHQpXG5cdH1cblx0cmV0dXJuIGNvbnRleHRcbn1cblxuLyoqXG4gKiBTaW1wbGlmaWVkIHJlc291cmNlIGNhbGVuZGFyIGNvbnRleHQgdHlwZSBmb3IgZXh0ZXJuYWwgdXNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlSWxhbXlSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFJldHVyblxuXHRleHRlbmRzIFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuIHtcblx0cmVhZG9ubHkgZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmVhZG9ubHkgcmVzb3VyY2VzOiBSZXNvdXJjZVtdXG5cdHJlYWRvbmx5IGdldEV2ZW50c0ZvclJlc291cmNlOiAoXG5cdFx0cmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyXG5cdCkgPT4gQ2FsZW5kYXJFdmVudFtdXG59XG5cbmV4cG9ydCBjb25zdCB1c2VJbGFteVJlc291cmNlQ2FsZW5kYXJDb250ZXh0ID1cblx0KCk6IFVzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHRSZXR1cm4gPT4ge1xuXHRcdGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KFJlc291cmNlQ2FsZW5kYXJDb250ZXh0KVxuXHRcdGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0J3VzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlcidcblx0XHRcdClcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdGN1cnJlbnREYXRlOiBjb250ZXh0LmN1cnJlbnREYXRlLFxuXHRcdFx0dmlldzogY29udGV4dC52aWV3LFxuXHRcdFx0ZXZlbnRzOiBjb250ZXh0LmV2ZW50cyxcblx0XHRcdHJlc291cmNlczogY29udGV4dC5yZXNvdXJjZXMsXG5cdFx0XHRpc0V2ZW50Rm9ybU9wZW46IGNvbnRleHQuaXNFdmVudEZvcm1PcGVuLFxuXHRcdFx0c2VsZWN0ZWRFdmVudDogY29udGV4dC5zZWxlY3RlZEV2ZW50LFxuXHRcdFx0c2VsZWN0ZWREYXRlOiBjb250ZXh0LnNlbGVjdGVkRGF0ZSxcblx0XHRcdGZpcnN0RGF5T2ZXZWVrOiBjb250ZXh0LmZpcnN0RGF5T2ZXZWVrLFxuXHRcdFx0c2V0Q3VycmVudERhdGU6IGNvbnRleHQuc2V0Q3VycmVudERhdGUsXG5cdFx0XHRzZWxlY3REYXRlOiBjb250ZXh0LnNlbGVjdERhdGUsXG5cdFx0XHRzZXRWaWV3OiBjb250ZXh0LnNldFZpZXcsXG5cdFx0XHRuZXh0UGVyaW9kOiBjb250ZXh0Lm5leHRQZXJpb2QsXG5cdFx0XHRwcmV2UGVyaW9kOiBjb250ZXh0LnByZXZQZXJpb2QsXG5cdFx0XHR0b2RheTogY29udGV4dC50b2RheSxcblx0XHRcdGFkZEV2ZW50OiBjb250ZXh0LmFkZEV2ZW50LFxuXHRcdFx0dXBkYXRlRXZlbnQ6IGNvbnRleHQudXBkYXRlRXZlbnQsXG5cdFx0XHRkZWxldGVFdmVudDogY29udGV4dC5kZWxldGVFdmVudCxcblx0XHRcdG9wZW5FdmVudEZvcm06IGNvbnRleHQub3BlbkV2ZW50Rm9ybSxcblx0XHRcdGNsb3NlRXZlbnRGb3JtOiBjb250ZXh0LmNsb3NlRXZlbnRGb3JtLFxuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2U6IGNvbnRleHQuZ2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0XHRidXNpbmVzc0hvdXJzOiBjb250ZXh0LmJ1c2luZXNzSG91cnMsXG5cdFx0fSBhcyBjb25zdFxuXHR9XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyUHJvdmlkZXJQcm9wcyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9wcm92aWRlcidcbmltcG9ydCB0eXBlIHtcblx0Q2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGUsXG5cdENlbGxDbGlja0luZm8sXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyRW5naW5lIH0gZnJvbSAnQC9ob29rcy91c2UtY2FsZW5kYXItZW5naW5lJ1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnXG5cbmNvbnN0IGdldEV2ZW50UmVzb3VyY2VJZHMgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0+IHtcblx0aWYgKGV2ZW50LnJlc291cmNlSWRzKSB7XG5cdFx0cmV0dXJuIGV2ZW50LnJlc291cmNlSWRzXG5cdH1cblx0aWYgKGV2ZW50LnJlc291cmNlSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBbZXZlbnQucmVzb3VyY2VJZF1cblx0fVxuXHRyZXR1cm4gW11cbn1cblxuaW50ZXJmYWNlIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlclByb3BzIGV4dGVuZHMgQ2FsZW5kYXJQcm92aWRlclByb3BzIHtcblx0ZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG5cdHJlc291cmNlcz86IFJlc291cmNlW11cblx0cmVuZGVyUmVzb3VyY2U/OiAocmVzb3VyY2U6IFJlc291cmNlKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlc092ZXJyaWRlPzogQ2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGVcblx0b3JpZW50YXRpb24/OiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnXG59XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXI6IFJlYWN0LkZDPFxuXHRSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXJQcm9wc1xuPiA9ICh7XG5cdGNoaWxkcmVuLFxuXHRldmVudHMgPSBbXSxcblx0cmVzb3VyY2VzID0gW10sXG5cdGZpcnN0RGF5T2ZXZWVrID0gMCxcblx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRpbml0aWFsRGF0ZSxcblx0cmVuZGVyRXZlbnQsXG5cdG9uRXZlbnRDbGljayxcblx0b25DZWxsQ2xpY2ssXG5cdG9uVmlld0NoYW5nZSxcblx0b25FdmVudEFkZCxcblx0b25FdmVudFVwZGF0ZSxcblx0b25FdmVudERlbGV0ZSxcblx0b25EYXRlQ2hhbmdlLFxuXHRsb2NhbGUsXG5cdHRpbWV6b25lLFxuXHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRkaXNhYmxlRXZlbnRDbGljayxcblx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRkYXlNYXhFdmVudHMsXG5cdGV2ZW50U3BhY2luZyxcblx0c3RpY2t5Vmlld0hlYWRlciA9IHRydWUsXG5cdHZpZXdIZWFkZXJDbGFzc05hbWUgPSAnJyxcblx0aGVhZGVyQ29tcG9uZW50LFxuXHRoZWFkZXJDbGFzc05hbWUsXG5cdHRyYW5zbGF0aW9ucyxcblx0dHJhbnNsYXRvcixcblx0cmVuZGVyUmVzb3VyY2UsXG5cdHJlbmRlckV2ZW50Rm9ybSxcblx0YnVzaW5lc3NIb3Vycyxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRvcmllbnRhdGlvbiA9ICdob3Jpem9udGFsJyxcbn0pID0+IHtcblx0Ly8gUmVzb3VyY2Utc3BlY2lmaWMgc3RhdGVcblx0Y29uc3QgW2N1cnJlbnRSZXNvdXJjZXNdID0gdXNlU3RhdGU8UmVzb3VyY2VbXT4ocmVzb3VyY2VzKVxuXHRjb25zdCBbdmlzaWJsZVJlc291cmNlcywgc2V0VmlzaWJsZVJlc291cmNlc10gPSB1c2VTdGF0ZTxcblx0XHRTZXQ8c3RyaW5nIHwgbnVtYmVyPlxuXHQ+KG5ldyBTZXQocmVzb3VyY2VzLm1hcCgocikgPT4gci5pZCkpKVxuXG5cdC8vIFVzZSB0aGUgY2FsZW5kYXIgZW5naW5lXG5cdGNvbnN0IGNhbGVuZGFyRW5naW5lID0gdXNlQ2FsZW5kYXJFbmdpbmUoe1xuXHRcdGV2ZW50cyxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRpbml0aWFsVmlldyxcblx0XHRpbml0aWFsRGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdG9uRXZlbnRBZGQsXG5cdFx0b25FdmVudFVwZGF0ZSxcblx0XHRvbkV2ZW50RGVsZXRlLFxuXHRcdG9uRGF0ZUNoYW5nZSxcblx0XHRvblZpZXdDaGFuZ2U6IG9uVmlld0NoYW5nZSxcblx0XHRsb2NhbGUsXG5cdFx0dGltZXpvbmUsXG5cdFx0dHJhbnNsYXRpb25zLFxuXHRcdHRyYW5zbGF0b3IsXG5cdH0pXG5cblx0Ly8gUmVzb3VyY2UgdmlzaWJpbGl0eVxuXHRjb25zdCB0b2dnbGVSZXNvdXJjZVZpc2liaWxpdHkgPSB1c2VDYWxsYmFjayhcblx0XHQocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG5cdFx0XHRzZXRWaXNpYmxlUmVzb3VyY2VzKChwcmV2KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG5ld1NldCA9IG5ldyBTZXQocHJldilcblx0XHRcdFx0aWYgKG5ld1NldC5oYXMocmVzb3VyY2VJZCkpIHtcblx0XHRcdFx0XHRuZXdTZXQuZGVsZXRlKHJlc291cmNlSWQpXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bmV3U2V0LmFkZChyZXNvdXJjZUlkKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBuZXdTZXRcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbXVxuXHQpXG5cblx0Y29uc3Qgc2hvd1Jlc291cmNlID0gdXNlQ2FsbGJhY2soKHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuXHRcdHNldFZpc2libGVSZXNvdXJjZXMoKHByZXYpID0+IG5ldyBTZXQocHJldikuYWRkKHJlc291cmNlSWQpKVxuXHR9LCBbXSlcblxuXHRjb25zdCBoaWRlUmVzb3VyY2UgPSB1c2VDYWxsYmFjaygocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG5cdFx0c2V0VmlzaWJsZVJlc291cmNlcygocHJldikgPT4ge1xuXHRcdFx0Y29uc3QgbmV3U2V0ID0gbmV3IFNldChwcmV2KVxuXHRcdFx0bmV3U2V0LmRlbGV0ZShyZXNvdXJjZUlkKVxuXHRcdFx0cmV0dXJuIG5ld1NldFxuXHRcdH0pXG5cdH0sIFtdKVxuXG5cdGNvbnN0IHNob3dBbGxSZXNvdXJjZXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c2V0VmlzaWJsZVJlc291cmNlcyhuZXcgU2V0KGN1cnJlbnRSZXNvdXJjZXMubWFwKChyKSA9PiByLmlkKSkpXG5cdH0sIFtjdXJyZW50UmVzb3VyY2VzXSlcblxuXHRjb25zdCBoaWRlQWxsUmVzb3VyY2VzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdHNldFZpc2libGVSZXNvdXJjZXMobmV3IFNldCgpKVxuXHR9LCBbXSlcblxuXHQvLyBFdmVudCB1dGlsaXRpZXNcblx0Y29uc3QgZ2V0RXZlbnRzRm9yUmVzb3VyY2UgPSB1c2VDYWxsYmFjayhcblx0XHQocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0XHRcdHJldHVybiBjYWxlbmRhckVuZ2luZS5ldmVudHMuZmlsdGVyKChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQucmVzb3VyY2VJZHMpIHtcblx0XHRcdFx0XHRyZXR1cm4gZXZlbnQucmVzb3VyY2VJZHMuaW5jbHVkZXMocmVzb3VyY2VJZClcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZXZlbnQucmVzb3VyY2VJZCA9PT0gcmVzb3VyY2VJZFxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtjYWxlbmRhckVuZ2luZS5ldmVudHNdXG5cdClcblxuXHRjb25zdCBnZXRFdmVudHNGb3JSZXNvdXJjZXMgPSB1c2VDYWxsYmFjayhcblx0XHQocmVzb3VyY2VJZHM6IChzdHJpbmcgfCBudW1iZXIpW10pOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRcdFx0cmV0dXJuIGNhbGVuZGFyRW5naW5lLmV2ZW50cy5maWx0ZXIoKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50UmVzb3VyY2VJZHMgPSBnZXRFdmVudFJlc291cmNlSWRzKGV2ZW50KVxuXHRcdFx0XHRyZXR1cm4gZXZlbnRSZXNvdXJjZUlkcy5zb21lKChpZCkgPT4gcmVzb3VyY2VJZHMuaW5jbHVkZXMoaWQpKVxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtjYWxlbmRhckVuZ2luZS5ldmVudHNdXG5cdClcblxuXHRjb25zdCBnZXRSZXNvdXJjZUJ5SWQgPSB1c2VDYWxsYmFjayhcblx0XHQocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKTogUmVzb3VyY2UgfCB1bmRlZmluZWQgPT4ge1xuXHRcdFx0cmV0dXJuIGN1cnJlbnRSZXNvdXJjZXMuZmluZCgocmVzb3VyY2UpID0+IHJlc291cmNlLmlkID09PSByZXNvdXJjZUlkKVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRSZXNvdXJjZXNdXG5cdClcblxuXHRjb25zdCBnZXRWaXNpYmxlUmVzb3VyY2VzID0gdXNlQ2FsbGJhY2soKCk6IFJlc291cmNlW10gPT4ge1xuXHRcdHJldHVybiBjdXJyZW50UmVzb3VyY2VzLmZpbHRlcigocmVzb3VyY2UpID0+XG5cdFx0XHR2aXNpYmxlUmVzb3VyY2VzLmhhcyhyZXNvdXJjZS5pZClcblx0XHQpXG5cdH0sIFtjdXJyZW50UmVzb3VyY2VzLCB2aXNpYmxlUmVzb3VyY2VzXSlcblxuXHQvLyBDcm9zcy1yZXNvdXJjZSBldmVudCB1dGlsaXRpZXNcblx0Y29uc3QgaXNFdmVudENyb3NzUmVzb3VyY2UgPSB1c2VDYWxsYmFjaygoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBib29sZWFuID0+IHtcblx0XHRyZXR1cm4gQm9vbGVhbihldmVudC5yZXNvdXJjZUlkcyAmJiBldmVudC5yZXNvdXJjZUlkcy5sZW5ndGggPiAxKVxuXHR9LCBbXSlcblxuXHQvLyBDdXN0b20gaGFuZGxlcnNcblx0Y29uc3QgZWRpdEV2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KGV2ZW50KVxuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0fSxcblx0XHRbY2FsZW5kYXJFbmdpbmVdXG5cdClcblxuXHRjb25zdCBoYW5kbGVFdmVudENsaWNrID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUV2ZW50Q2xpY2spIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cdFx0XHRpZiAob25FdmVudENsaWNrKSB7XG5cdFx0XHRcdG9uRXZlbnRDbGljayhldmVudClcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVkaXRFdmVudChldmVudClcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtkaXNhYmxlRXZlbnRDbGljaywgb25FdmVudENsaWNrLCBlZGl0RXZlbnRdXG5cdClcblxuXHRjb25zdCBoYW5kbGVEYXRlQ2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4ge1xuXHRcdFx0aWYgKGRpc2FibGVDZWxsQ2xpY2spIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cblx0XHRcdGlmIChvbkNlbGxDbGljaykge1xuXHRcdFx0XHRvbkNlbGxDbGljayhpbmZvKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgbmV3RXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRcdFx0dGl0bGU6IGNhbGVuZGFyRW5naW5lLnQoJ25ld0V2ZW50JyksXG5cdFx0XHRcdFx0c3RhcnQ6IGluZm8uc3RhcnQsXG5cdFx0XHRcdFx0ZW5kOiBpbmZvLmVuZCxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogJycsXG5cdFx0XHRcdFx0YWxsRGF5OiBmYWxzZSxcblx0XHRcdFx0fSBhcyBDYWxlbmRhckV2ZW50XG5cblx0XHRcdFx0aWYgKGluZm8ucmVzb3VyY2VJZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0bmV3RXZlbnQucmVzb3VyY2VJZCA9IGluZm8ucmVzb3VyY2VJZFxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0U2VsZWN0ZWRFdmVudChuZXdFdmVudClcblx0XHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0U2VsZWN0ZWREYXRlKGluZm8uc3RhcnQpXG5cdFx0XHRcdGNhbGVuZGFyRW5naW5lLnNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W29uQ2VsbENsaWNrLCBkaXNhYmxlQ2VsbENsaWNrLCBjYWxlbmRhckVuZ2luZV1cblx0KVxuXG5cdC8vIENyZWF0ZSB0aGUgY29udGV4dCB2YWx1ZVxuXHRjb25zdCBjb250ZXh0VmFsdWUgPSB1c2VNZW1vKFxuXHRcdCgpID0+ICh7XG5cdFx0XHQuLi5jYWxlbmRhckVuZ2luZSxcblx0XHRcdHZpZXc6IGNhbGVuZGFyRW5naW5lLnZpZXcsXG5cdFx0XHRzZXRWaWV3OiBjYWxlbmRhckVuZ2luZS5zZXRWaWV3LFxuXHRcdFx0ZXZlbnRzOiBjYWxlbmRhckVuZ2luZS5ldmVudHMsXG5cdFx0XHRyYXdFdmVudHM6IGNhbGVuZGFyRW5naW5lLnJhd0V2ZW50cyxcblxuXHRcdFx0Ly8gUmVzb3VyY2Utc3BlY2lmaWMgc3RhdGVcblx0XHRcdHJlc291cmNlczogY3VycmVudFJlc291cmNlcyxcblx0XHRcdHZpc2libGVSZXNvdXJjZXMsXG5cdFx0XHR0b2dnbGVSZXNvdXJjZVZpc2liaWxpdHksXG5cdFx0XHRzaG93UmVzb3VyY2UsXG5cdFx0XHRoaWRlUmVzb3VyY2UsXG5cdFx0XHRzaG93QWxsUmVzb3VyY2VzLFxuXHRcdFx0aGlkZUFsbFJlc291cmNlcyxcblxuXHRcdFx0Ly8gUmVzb3VyY2UgdXRpbGl0aWVzXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlcyxcblx0XHRcdGdldFJlc291cmNlQnlJZCxcblx0XHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cblx0XHRcdC8vIENyb3NzLXJlc291cmNlIGV2ZW50IHV0aWxpdGllc1xuXHRcdFx0aXNFdmVudENyb3NzUmVzb3VyY2UsXG5cdFx0XHRnZXRFdmVudFJlc291cmNlSWRzLFxuXG5cdFx0XHQvLyBPdmVycmlkZSBoYW5kbGVyc1xuXHRcdFx0b25FdmVudENsaWNrOiBoYW5kbGVFdmVudENsaWNrLFxuXHRcdFx0b25DZWxsQ2xpY2s6IGhhbmRsZURhdGVDbGljayxcblxuXHRcdFx0Ly8gUGFzcyB0aHJvdWdoIGhlYWRlciBwcm9wc1xuXHRcdFx0aGVhZGVyQ29tcG9uZW50LFxuXHRcdFx0aGVhZGVyQ2xhc3NOYW1lLFxuXG5cdFx0XHQvLyBQYXNzIHRocm91Z2ggb3RoZXIgcHJvcHNcblx0XHRcdHJlbmRlckV2ZW50LFxuXHRcdFx0cmVuZGVyUmVzb3VyY2UsXG5cdFx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdFx0XHRsb2NhbGUsXG5cdFx0XHR0aW1lem9uZSxcblx0XHRcdGRpc2FibGVDZWxsQ2xpY2ssXG5cdFx0XHRkaXNhYmxlRXZlbnRDbGljayxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdHN0aWNreVZpZXdIZWFkZXIsXG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdHRpbWVGb3JtYXQsXG5cdFx0XHRjbGFzc2VzT3ZlcnJpZGUsXG5cdFx0XHRvcmllbnRhdGlvbixcblx0XHR9KSxcblx0XHRbXG5cdFx0XHRjYWxlbmRhckVuZ2luZSxcblx0XHRcdGN1cnJlbnRSZXNvdXJjZXMsXG5cdFx0XHR2aXNpYmxlUmVzb3VyY2VzLFxuXHRcdFx0dG9nZ2xlUmVzb3VyY2VWaXNpYmlsaXR5LFxuXHRcdFx0c2hvd1Jlc291cmNlLFxuXHRcdFx0aGlkZVJlc291cmNlLFxuXHRcdFx0c2hvd0FsbFJlc291cmNlcyxcblx0XHRcdGhpZGVBbGxSZXNvdXJjZXMsXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlcyxcblx0XHRcdGdldFJlc291cmNlQnlJZCxcblx0XHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdFx0XHRpc0V2ZW50Q3Jvc3NSZXNvdXJjZSxcblx0XHRcdGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRoYW5kbGVEYXRlQ2xpY2ssXG5cdFx0XHRyZW5kZXJFdmVudCxcblx0XHRcdHJlbmRlclJlc291cmNlLFxuXHRcdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHRcdFx0bG9jYWxlLFxuXHRcdFx0dGltZXpvbmUsXG5cdFx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0b3JpZW50YXRpb24sXG5cdFx0XVxuXHQpXG5cblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VDYWxlbmRhckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRWYWx1ZX0+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9SZXNvdXJjZUNhbGVuZGFyQ29udGV4dC5Qcm92aWRlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdE9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQge1xuXHRkZWxldGVSZWN1cnJpbmdFdmVudCBhcyBkZWxldGVSZWN1cnJpbmdFdmVudEltcGwsXG5cdGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzLFxuXHR1cGRhdGVSZWN1cnJpbmdFdmVudCBhcyB1cGRhdGVSZWN1cnJpbmdFdmVudEltcGwsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBkZWZhdWx0VHJhbnNsYXRpb25zIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL2RlZmF1bHQnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucywgVHJhbnNsYXRvckZ1bmN0aW9uIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHsgZ2V0TW9udGhXZWVrcywgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhclZpZXcgfSBmcm9tICdAL3R5cGVzJ1xuaW1wb3J0IHsgREFZX01BWF9FVkVOVFNfREVGQVVMVCB9IGZyb20gJy4uL2xpYi9jb25zdGFudHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJFbmdpbmVDb25maWcge1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG5cdGluaXRpYWxWaWV3PzogQ2FsZW5kYXJWaWV3XG5cdGluaXRpYWxEYXRlPzogZGF5anMuRGF5anNcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0b25FdmVudEFkZD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50VXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRXZlbnREZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25EYXRlQ2hhbmdlPzogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG5cdG9uVmlld0NoYW5nZT86ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcblx0bG9jYWxlPzogc3RyaW5nXG5cdHRpbWV6b25lPzogc3RyaW5nXG5cdHRyYW5zbGF0aW9ucz86IFRyYW5zbGF0aW9uc1xuXHR0cmFuc2xhdG9yPzogVHJhbnNsYXRvckZ1bmN0aW9uXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJFbmdpbmVSZXR1cm4ge1xuXHRjdXJyZW50RGF0ZTogZGF5anMuRGF5anNcblx0dmlldzogQ2FsZW5kYXJWaWV3XG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHJhd0V2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuXHRzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRzZWxlY3RlZERhdGU6IGRheWpzLkRheWpzIHwgbnVsbFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGN1cnJlbnRMb2NhbGU6IHN0cmluZ1xuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRzZXRDdXJyZW50RGF0ZTogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG5cdHNlbGVjdERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRzZXRWaWV3OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdG5leHRQZXJpb2Q6ICgpID0+IHZvaWRcblx0cHJldlBlcmlvZDogKCkgPT4gdm9pZFxuXHR0b2RheTogKCkgPT4gdm9pZFxuXHRhZGRFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdHVwZGF0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHR1cGRhdGVSZWN1cnJpbmdFdmVudDogKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4sXG5cdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdCkgPT4gdm9pZFxuXHRkZWxldGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcikgPT4gdm9pZFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudDogKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0b3BlbkV2ZW50Rm9ybTogKGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0Y2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcblx0c2V0U2VsZWN0ZWRFdmVudDogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248Q2FsZW5kYXJFdmVudCB8IG51bGw+PlxuXHRzZXRJc0V2ZW50Rm9ybU9wZW46IFJlYWN0LkRpc3BhdGNoPFJlYWN0LlNldFN0YXRlQWN0aW9uPGJvb2xlYW4+PlxuXHRzZXRTZWxlY3RlZERhdGU6IFJlYWN0LkRpc3BhdGNoPFJlYWN0LlNldFN0YXRlQWN0aW9uPGRheWpzLkRheWpzIHwgbnVsbD4+XG5cdGdldEV2ZW50c0ZvckRhdGVSYW5nZTogKFxuXHRcdHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsXG5cdFx0ZW5kRGF0ZTogZGF5anMuRGF5anNcblx0KSA9PiBDYWxlbmRhckV2ZW50W11cblx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHQ6IChrZXk6IGtleW9mIFRyYW5zbGF0aW9ucykgPT4gc3RyaW5nXG59XG5cbmNvbnN0IFZJRVdfVU5JVFM6IFJlY29yZDxDYWxlbmRhclZpZXcsIGRheWpzLk1hbmlwdWxhdGVUeXBlPiA9IHtcblx0ZGF5OiAnZGF5Jyxcblx0d2VlazogJ3dlZWsnLFxuXHRtb250aDogJ21vbnRoJyxcblx0eWVhcjogJ3llYXInLFxufVxuXG5leHBvcnQgY29uc3QgdXNlQ2FsZW5kYXJFbmdpbmUgPSAoXG5cdGNvbmZpZzogQ2FsZW5kYXJFbmdpbmVDb25maWdcbik6IENhbGVuZGFyRW5naW5lUmV0dXJuID0+IHtcblx0Y29uc3Qge1xuXHRcdGV2ZW50cyA9IFtdLFxuXHRcdGZpcnN0RGF5T2ZXZWVrID0gMCxcblx0XHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdFx0aW5pdGlhbERhdGUgPSBkYXlqcygpLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0b25FdmVudEFkZCxcblx0XHRvbkV2ZW50VXBkYXRlLFxuXHRcdG9uRXZlbnREZWxldGUsXG5cdFx0b25EYXRlQ2hhbmdlLFxuXHRcdG9uVmlld0NoYW5nZSxcblx0XHRsb2NhbGUsXG5cdFx0dGltZXpvbmUsXG5cdFx0dHJhbnNsYXRpb25zLFxuXHRcdHRyYW5zbGF0b3IsXG5cdH0gPSBjb25maWdcblxuXHRjb25zdCBbY3VycmVudERhdGUsIHNldEN1cnJlbnREYXRlXSA9IHVzZVN0YXRlPGRheWpzLkRheWpzPihpbml0aWFsRGF0ZSlcblx0Y29uc3QgW3ZpZXcsIHNldFZpZXddID0gdXNlU3RhdGU8Q2FsZW5kYXJWaWV3Pihpbml0aWFsVmlldylcblx0Y29uc3QgW2N1cnJlbnRFdmVudHMsIHNldEN1cnJlbnRFdmVudHNdID0gdXNlU3RhdGU8Q2FsZW5kYXJFdmVudFtdPihldmVudHMpXG5cdGNvbnN0IFtpc0V2ZW50Rm9ybU9wZW4sIHNldElzRXZlbnRGb3JtT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkRXZlbnQsIHNldFNlbGVjdGVkRXZlbnRdID0gdXNlU3RhdGU8Q2FsZW5kYXJFdmVudCB8IG51bGw+KG51bGwpXG5cdGNvbnN0IFtzZWxlY3RlZERhdGUsIHNldFNlbGVjdGVkRGF0ZV0gPSB1c2VTdGF0ZTxkYXlqcy5EYXlqcyB8IG51bGw+KG51bGwpXG5cdGNvbnN0IFtjdXJyZW50TG9jYWxlLCBzZXRDdXJyZW50TG9jYWxlXSA9IHVzZVN0YXRlKGxvY2FsZSB8fCAnZW4nKVxuXG5cdGNvbnN0IHQgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAodHJhbnNsYXRvcikge1xuXHRcdFx0cmV0dXJuIHRyYW5zbGF0b3Jcblx0XHR9XG5cdFx0aWYgKHRyYW5zbGF0aW9ucykge1xuXHRcdFx0cmV0dXJuIChrZXk6IGtleW9mIFRyYW5zbGF0aW9ucykgPT4gdHJhbnNsYXRpb25zW2tleV0gfHwga2V5XG5cdFx0fVxuXHRcdHJldHVybiAoa2V5OiBrZXlvZiBUcmFuc2xhdGlvbnMpID0+IGRlZmF1bHRUcmFuc2xhdGlvbnNba2V5XSB8fCBrZXlcblx0fSwgW3RyYW5zbGF0aW9ucywgdHJhbnNsYXRvcl0pXG5cblx0Y29uc3QgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlID0gdXNlQ2FsbGJhY2soXG5cdFx0KHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsIGVuZERhdGU6IGRheWpzLkRheWpzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0XHRcdGNvbnN0IGFsbEV2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gW11cblxuXHRcdFx0Zm9yIChjb25zdCBldmVudCBvZiBjdXJyZW50RXZlbnRzKSB7XG5cdFx0XHRcdGlmIChldmVudC5ycnVsZSkge1xuXHRcdFx0XHRcdGFsbEV2ZW50cy5wdXNoKFxuXHRcdFx0XHRcdFx0Li4uZ2VuZXJhdGVSZWN1cnJpbmdFdmVudHMoe1xuXHRcdFx0XHRcdFx0XHRldmVudCxcblx0XHRcdFx0XHRcdFx0Y3VycmVudEV2ZW50cyxcblx0XHRcdFx0XHRcdFx0c3RhcnREYXRlLFxuXHRcdFx0XHRcdFx0XHRlbmREYXRlLFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3RhcnRzSW5SYW5nZSA9XG5cdFx0XHRcdFx0XHRldmVudC5zdGFydC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSkgJiZcblx0XHRcdFx0XHRcdGV2ZW50LnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpXG5cdFx0XHRcdFx0Y29uc3QgZW5kc0luUmFuZ2UgPVxuXHRcdFx0XHRcdFx0ZXZlbnQuZW5kLmlzU2FtZU9yQWZ0ZXIoc3RhcnREYXRlKSAmJlxuXHRcdFx0XHRcdFx0ZXZlbnQuZW5kLmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpXG5cdFx0XHRcdFx0Y29uc3Qgc3BhbnNSYW5nZSA9XG5cdFx0XHRcdFx0XHRldmVudC5zdGFydC5pc0JlZm9yZShzdGFydERhdGUpICYmIGV2ZW50LmVuZC5pc0FmdGVyKGVuZERhdGUpXG5cdFx0XHRcdFx0aWYgKHN0YXJ0c0luUmFuZ2UgfHwgZW5kc0luUmFuZ2UgfHwgc3BhbnNSYW5nZSkge1xuXHRcdFx0XHRcdFx0YWxsRXZlbnRzLnB1c2goZXZlbnQpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYWxsRXZlbnRzXG5cdFx0fSxcblx0XHRbY3VycmVudEV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldEN1cnJlbnRWaWV3UmFuZ2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0aWYgKHZpZXcgPT09ICdkYXknKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzdGFydDogY3VycmVudERhdGUuc3RhcnRPZignZGF5JyksXG5cdFx0XHRcdGVuZDogY3VycmVudERhdGUuZW5kT2YoJ2RheScpLFxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAodmlldyA9PT0gJ3llYXInKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzdGFydDogY3VycmVudERhdGUuc3RhcnRPZigneWVhcicpLFxuXHRcdFx0XHRlbmQ6IGN1cnJlbnREYXRlLmVuZE9mKCd5ZWFyJyksXG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICh2aWV3ID09PSAnd2VlaycpIHtcblx0XHRcdGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c3RhcnQ6IHdlZWtEYXlzWzBdLnN0YXJ0T2YoJ2RheScpLFxuXHRcdFx0XHRlbmQ6IHdlZWtEYXlzWzZdLmVuZE9mKCdkYXknKSxcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gbW9udGggdmlld1xuXHRcdGNvbnN0IHdlZWtzID0gZ2V0TW9udGhXZWVrcyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspXG5cdFx0cmV0dXJuIHsgc3RhcnQ6IHdlZWtzWzBdWzBdLnN0YXJ0T2YoJ2RheScpLCBlbmQ6IHdlZWtzWzVdWzZdLmVuZE9mKCdkYXknKSB9XG5cdH0sIFtjdXJyZW50RGF0ZSwgdmlldywgZmlyc3REYXlPZldlZWtdKVxuXG5cdGNvbnN0IHByb2Nlc3NlZEV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gZ2V0Q3VycmVudFZpZXdSYW5nZSgpXG5cdFx0cmV0dXJuIGdldEV2ZW50c0ZvckRhdGVSYW5nZShzdGFydCwgZW5kKVxuXHR9LCBbZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCBnZXRDdXJyZW50Vmlld1JhbmdlXSlcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChldmVudHMpIHtcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoZXZlbnRzKVxuXHRcdH1cblx0fSwgW2V2ZW50c10pXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGxvY2FsZSkge1xuXHRcdFx0c2V0Q3VycmVudExvY2FsZShsb2NhbGUpXG5cdFx0XHRkYXlqcy5sb2NhbGUobG9jYWxlKVxuXHRcdFx0c2V0Q3VycmVudERhdGUoKHByZXZEYXRlKSA9PiBwcmV2RGF0ZS5sb2NhbGUobG9jYWxlKSlcblx0XHR9XG5cdH0sIFtsb2NhbGVdKVxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmICh0aW1lem9uZSkge1xuXHRcdFx0ZGF5anMudHouc2V0RGVmYXVsdCh0aW1lem9uZSlcblx0XHR9XG5cdH0sIFt0aW1lem9uZV0pXG5cblx0Y29uc3Qgc2VsZWN0RGF0ZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChkYXRlOiBkYXlqcy5EYXlqcykgPT4ge1xuXHRcdFx0c2V0Q3VycmVudERhdGUoZGF0ZSlcblx0XHRcdG9uRGF0ZUNoYW5nZT8uKGRhdGUpXG5cdFx0fSxcblx0XHRbb25EYXRlQ2hhbmdlXVxuXHQpXG5cblx0Y29uc3QgbmF2aWdhdGVQZXJpb2QgPSB1c2VDYWxsYmFjayhcblx0XHQoZGlyZWN0aW9uOiAxIHwgLTEpID0+IHtcblx0XHRcdHNldEN1cnJlbnREYXRlKChwcmV2KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG5ld0RhdGUgPVxuXHRcdFx0XHRcdGRpcmVjdGlvbiA9PT0gMVxuXHRcdFx0XHRcdFx0PyBwcmV2LmFkZCgxLCBWSUVXX1VOSVRTW3ZpZXddKVxuXHRcdFx0XHRcdFx0OiBwcmV2LnN1YnRyYWN0KDEsIFZJRVdfVU5JVFNbdmlld10pXG5cdFx0XHRcdG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUpXG5cdFx0XHRcdHJldHVybiBuZXdEYXRlXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W3ZpZXcsIG9uRGF0ZUNoYW5nZV1cblx0KVxuXG5cdGNvbnN0IG5leHRQZXJpb2QgPSB1c2VDYWxsYmFjaygoKSA9PiBuYXZpZ2F0ZVBlcmlvZCgxKSwgW25hdmlnYXRlUGVyaW9kXSlcblx0Y29uc3QgcHJldlBlcmlvZCA9IHVzZUNhbGxiYWNrKCgpID0+IG5hdmlnYXRlUGVyaW9kKC0xKSwgW25hdmlnYXRlUGVyaW9kXSlcblxuXHRjb25zdCB0b2RheSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRjb25zdCBuZXdEYXRlID0gZGF5anMoKVxuXHRcdHNldEN1cnJlbnREYXRlKG5ld0RhdGUpXG5cdFx0b25EYXRlQ2hhbmdlPy4obmV3RGF0ZSlcblx0fSwgW29uRGF0ZUNoYW5nZV0pXG5cblx0Y29uc3QgYWRkRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+IFsuLi5wcmV2LCBldmVudF0pXG5cdFx0XHRvbkV2ZW50QWRkPy4oZXZlbnQpXG5cdFx0fSxcblx0XHRbb25FdmVudEFkZF1cblx0KVxuXG5cdGNvbnN0IHVwZGF0ZUV2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlciwgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4ge1xuXHRcdFx0c2V0Q3VycmVudEV2ZW50cygocHJldikgPT5cblx0XHRcdFx0cHJldi5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50LmlkICE9PSBldmVudElkKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZXZlbnRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgbmV3RXZlbnQgPSB7IC4uLmV2ZW50LCAuLi51cGRhdGVzIH1cblx0XHRcdFx0XHRvbkV2ZW50VXBkYXRlPy4obmV3RXZlbnQpXG5cdFx0XHRcdFx0cmV0dXJuIG5ld0V2ZW50XG5cdFx0XHRcdH0pXG5cdFx0XHQpXG5cdFx0fSxcblx0XHRbb25FdmVudFVwZGF0ZV1cblx0KVxuXG5cdGNvbnN0IHVwZGF0ZVJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KFxuXHRcdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdFx0KSA9PiB7XG5cdFx0XHRvbkV2ZW50VXBkYXRlPy4oeyAuLi5ldmVudCwgLi4udXBkYXRlcyB9KVxuXHRcdFx0c2V0Q3VycmVudEV2ZW50cyhcblx0XHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnRJbXBsKHtcblx0XHRcdFx0XHR0YXJnZXRFdmVudDogZXZlbnQsXG5cdFx0XHRcdFx0dXBkYXRlcyxcblx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnRVcGRhdGVdXG5cdClcblxuXHRjb25zdCBkZWxldGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCwgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zKSA9PiB7XG5cdFx0XHRvbkV2ZW50RGVsZXRlPy4oZXZlbnQpXG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKFxuXHRcdFx0XHRkZWxldGVSZWN1cnJpbmdFdmVudEltcGwoe1xuXHRcdFx0XHRcdHRhcmdldEV2ZW50OiBldmVudCxcblx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnREZWxldGVdXG5cdClcblxuXHRjb25zdCBkZWxldGVFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnRUb0RlbGV0ZSA9IHByZXYuZmluZCgoZSkgPT4gZS5pZCA9PT0gZXZlbnRJZClcblx0XHRcdFx0aWYgKGV2ZW50VG9EZWxldGUpIHtcblx0XHRcdFx0XHRvbkV2ZW50RGVsZXRlPy4oZXZlbnRUb0RlbGV0ZSlcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcHJldi5maWx0ZXIoKGUpID0+IGUuaWQgIT09IGV2ZW50SWQpXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W29uRXZlbnREZWxldGVdXG5cdClcblxuXHRjb25zdCBvcGVuRXZlbnRGb3JtID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdGlmIChldmVudERhdGE/LnN0YXJ0KSB7XG5cdFx0XHRcdHNldFNlbGVjdGVkRGF0ZShldmVudERhdGEuc3RhcnQpXG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzdGFydCA9IGV2ZW50RGF0YT8uc3RhcnQgPz8gY3VycmVudERhdGVcblx0XHRcdHNldFNlbGVjdGVkRXZlbnQoe1xuXHRcdFx0XHR0aXRsZTogdCgnbmV3RXZlbnQnKSxcblx0XHRcdFx0c3RhcnQsXG5cdFx0XHRcdGVuZDogZXZlbnREYXRhPy5lbmQgPz8gc3RhcnQuYWRkKDEsICdob3VyJyksXG5cdFx0XHRcdHJlc291cmNlSWQ6IGV2ZW50RGF0YT8ucmVzb3VyY2VJZCxcblx0XHRcdFx0ZGVzY3JpcHRpb246ICcnLFxuXHRcdFx0XHRhbGxEYXk6IGV2ZW50RGF0YT8uYWxsRGF5ID8/IGZhbHNlLFxuXHRcdFx0fSBhcyBDYWxlbmRhckV2ZW50KVxuXHRcdFx0c2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0fSxcblx0XHRbY3VycmVudERhdGUsIHRdXG5cdClcblxuXHRjb25zdCBjbG9zZUV2ZW50Rm9ybSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzZXRTZWxlY3RlZERhdGUobnVsbClcblx0XHRzZXRTZWxlY3RlZEV2ZW50KG51bGwpXG5cdFx0c2V0SXNFdmVudEZvcm1PcGVuKGZhbHNlKVxuXHR9LCBbXSlcblxuXHRjb25zdCBoYW5kbGVWaWV3Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG5cdFx0KG5ld1ZpZXc6IENhbGVuZGFyVmlldykgPT4ge1xuXHRcdFx0c2V0VmlldyhuZXdWaWV3KVxuXHRcdFx0b25WaWV3Q2hhbmdlPy4obmV3Vmlldylcblx0XHR9LFxuXHRcdFtvblZpZXdDaGFuZ2VdXG5cdClcblxuXHRjb25zdCBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBDYWxlbmRhckV2ZW50IHwgbnVsbCA9PiB7XG5cdFx0XHRjb25zdCB0YXJnZXRVSUQgPSBldmVudC51aWRcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGN1cnJlbnRFdmVudHMuZmluZChcblx0XHRcdFx0XHQoZSkgPT4gKGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYCkgPT09IHRhcmdldFVJRCAmJiBlLnJydWxlXG5cdFx0XHRcdCkgfHwgbnVsbFxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHNdXG5cdClcblxuXHRyZXR1cm4ge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdHZpZXcsXG5cdFx0ZXZlbnRzOiBwcm9jZXNzZWRFdmVudHMsXG5cdFx0cmF3RXZlbnRzOiBjdXJyZW50RXZlbnRzLFxuXHRcdGlzRXZlbnRGb3JtT3Blbixcblx0XHRzZWxlY3RlZEV2ZW50LFxuXHRcdHNlbGVjdGVkRGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRkYXlNYXhFdmVudHM6IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdHNldEN1cnJlbnREYXRlLFxuXHRcdHNlbGVjdERhdGUsXG5cdFx0c2V0VmlldzogaGFuZGxlVmlld0NoYW5nZSxcblx0XHRuZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2QsXG5cdFx0dG9kYXksXG5cdFx0YWRkRXZlbnQsXG5cdFx0dXBkYXRlRXZlbnQsXG5cdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0ZGVsZXRlRXZlbnQsXG5cdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHRjbG9zZUV2ZW50Rm9ybSxcblx0XHRzZXRTZWxlY3RlZEV2ZW50LFxuXHRcdHNldElzRXZlbnRGb3JtT3Blbixcblx0XHRzZXRTZWxlY3RlZERhdGUsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHR0LFxuXHR9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRUcmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9ucyA9IHtcblx0Ly8gQ29tbW9uIGFjdGlvbnNcblx0dG9kYXk6ICdUb2RheScsXG5cdGNyZWF0ZTogJ0NyZWF0ZScsXG5cdG5ldzogJ05ldycsXG5cdHVwZGF0ZTogJ1VwZGF0ZScsXG5cdGRlbGV0ZTogJ0RlbGV0ZScsXG5cdGNhbmNlbDogJ0NhbmNlbCcsXG5cdGV4cG9ydDogJ0V4cG9ydCcsXG5cblx0Ly8gRXZlbnQgcmVsYXRlZFxuXHRldmVudDogJ0V2ZW50Jyxcblx0ZXZlbnRzOiAnRXZlbnRzJyxcblx0bmV3RXZlbnQ6ICdOZXcgRXZlbnQnLFxuXHR0aXRsZTogJ1RpdGxlJyxcblx0ZGVzY3JpcHRpb246ICdEZXNjcmlwdGlvbicsXG5cdGxvY2F0aW9uOiAnTG9jYXRpb24nLFxuXHRhbGxEYXk6ICdBbGwgZGF5Jyxcblx0c3RhcnREYXRlOiAnU3RhcnQgRGF0ZScsXG5cdGVuZERhdGU6ICdFbmQgRGF0ZScsXG5cdHN0YXJ0VGltZTogJ1N0YXJ0IFRpbWUnLFxuXHRlbmRUaW1lOiAnRW5kIFRpbWUnLFxuXHRjb2xvcjogJ0NvbG9yJyxcblxuXHQvLyBFdmVudCBmb3JtXG5cdGNyZWF0ZUV2ZW50OiAnQ3JlYXRlIEV2ZW50Jyxcblx0ZWRpdEV2ZW50OiAnRWRpdCBFdmVudCcsXG5cdGFkZE5ld0V2ZW50OiAnQWRkIGEgbmV3IGV2ZW50IHRvIHlvdXIgY2FsZW5kYXInLFxuXHRlZGl0RXZlbnREZXRhaWxzOiAnRWRpdCB5b3VyIGV2ZW50IGRldGFpbHMnLFxuXHRldmVudFRpdGxlUGxhY2Vob2xkZXI6ICdFdmVudCB0aXRsZScsXG5cdGV2ZW50RGVzY3JpcHRpb25QbGFjZWhvbGRlcjogJ0V2ZW50IGRlc2NyaXB0aW9uIChvcHRpb25hbCknLFxuXHRldmVudExvY2F0aW9uUGxhY2Vob2xkZXI6ICdFdmVudCBsb2NhdGlvbiAob3B0aW9uYWwpJyxcblxuXHQvLyBSZWN1cnJlbmNlXG5cdHJlcGVhdDogJ1JlcGVhdCcsXG5cdHJlcGVhdHM6ICdSZXBlYXRzJyxcblx0Y3VzdG9tUmVjdXJyZW5jZTogJ0N1c3RvbSByZWN1cnJlbmNlJyxcblx0ZGFpbHk6ICdEYWlseScsXG5cdHdlZWtseTogJ1dlZWtseScsXG5cdG1vbnRobHk6ICdNb250aGx5Jyxcblx0eWVhcmx5OiAnWWVhcmx5Jyxcblx0aW50ZXJ2YWw6ICdJbnRlcnZhbCcsXG5cdHJlcGVhdE9uOiAnUmVwZWF0IG9uJyxcblx0bmV2ZXI6ICdOZXZlcicsXG5cdGNvdW50OiAnQ291bnQnLFxuXHRldmVyeTogJ0V2ZXJ5Jyxcblx0ZW5kczogJ0VuZHMnLFxuXHRhZnRlcjogJ0FmdGVyJyxcblx0b2NjdXJyZW5jZXM6ICdvY2N1cnJlbmNlcycsXG5cdG9uOiAnT24nLFxuXG5cdC8vIFJlY3VycmVuY2UgZWRpdCBkaWFsb2dcblx0ZWRpdFJlY3VycmluZ0V2ZW50OiAnRWRpdCByZWN1cnJpbmcgZXZlbnQnLFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudDogJ0RlbGV0ZSByZWN1cnJpbmcgZXZlbnQnLFxuXHRlZGl0UmVjdXJyaW5nRXZlbnRRdWVzdGlvbjpcblx0XHQnaXMgYSByZWN1cnJpbmcgZXZlbnQuIEhvdyB3b3VsZCB5b3UgbGlrZSB0byBlZGl0IGl0PycsXG5cdGRlbGV0ZVJlY3VycmluZ0V2ZW50UXVlc3Rpb246XG5cdFx0J2lzIGEgcmVjdXJyaW5nIGV2ZW50LiBIb3cgd291bGQgeW91IGxpa2UgdG8gZGVsZXRlIGl0PycsXG5cdHRoaXNFdmVudDogJ1RoaXMgZXZlbnQnLFxuXHR0aGlzRXZlbnREZXNjcmlwdGlvbjogJ09ubHkgY2hhbmdlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG5cdHRoaXNBbmRGb2xsb3dpbmdFdmVudHM6ICdUaGlzIGFuZCBmb2xsb3dpbmcgZXZlbnRzJyxcblx0dGhpc0FuZEZvbGxvd2luZ0V2ZW50c0Rlc2NyaXB0aW9uOiAnRWRpdCB0aGlzIGFuZCBhbGwgZnV0dXJlIG9jY3VycmVuY2VzJyxcblx0YWxsRXZlbnRzOiAnQWxsIGV2ZW50cycsXG5cdGFsbEV2ZW50c0Rlc2NyaXB0aW9uOiAnRWRpdCB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuXHRvbmx5Q2hhbmdlVGhpczogJ09ubHkgY2hhbmdlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG5cdGNoYW5nZVRoaXNBbmRGdXR1cmU6ICdDaGFuZ2UgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG5cdGNoYW5nZUVudGlyZVNlcmllczogJ0NoYW5nZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuXHRvbmx5RGVsZXRlVGhpczogJ09ubHkgZGVsZXRlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG5cdGRlbGV0ZVRoaXNBbmRGdXR1cmU6ICdEZWxldGUgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG5cdGRlbGV0ZUVudGlyZVNlcmllczogJ0RlbGV0ZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuXG5cdC8vIFZpZXcgdHlwZXNcblx0bW9udGg6ICdNb250aCcsXG5cdHdlZWs6ICdXZWVrJyxcblx0ZGF5OiAnRGF5Jyxcblx0eWVhcjogJ1llYXInLFxuXHRtb3JlOiAnbW9yZScsXG5cblx0Ly8gUmVzb3VyY2UgY2FsZW5kYXJcblx0cmVzb3VyY2VzOiAnUmVzb3VyY2VzJyxcblx0cmVzb3VyY2U6ICdSZXNvdXJjZScsXG5cdHRpbWU6ICdUaW1lJyxcblx0ZGF0ZTogJ0RhdGUnLFxuXHRub1Jlc291cmNlc1Zpc2libGU6ICdObyByZXNvdXJjZXMgdmlzaWJsZScsXG5cdGFkZFJlc291cmNlc09yU2hvd0V4aXN0aW5nOiAnQWRkIHJlc291cmNlcyBvciBzaG93IGV4aXN0aW5nIG9uZXMnLFxuXG5cdC8vIERheXMgb2Ygd2Vla1xuXHRzdW5kYXk6ICdTdW5kYXknLFxuXHRtb25kYXk6ICdNb25kYXknLFxuXHR0dWVzZGF5OiAnVHVlc2RheScsXG5cdHdlZG5lc2RheTogJ1dlZG5lc2RheScsXG5cdHRodXJzZGF5OiAnVGh1cnNkYXknLFxuXHRmcmlkYXk6ICdGcmlkYXknLFxuXHRzYXR1cmRheTogJ1NhdHVyZGF5JyxcblxuXHQvLyBEYXlzIHNob3J0XG5cdHN1bjogJ1N1bicsXG5cdG1vbjogJ01vbicsXG5cdHR1ZTogJ1R1ZScsXG5cdHdlZDogJ1dlZCcsXG5cdHRodTogJ1RodScsXG5cdGZyaTogJ0ZyaScsXG5cdHNhdDogJ1NhdCcsXG5cblx0Ly8gTW9udGhzXG5cdGphbnVhcnk6ICdKYW51YXJ5Jyxcblx0ZmVicnVhcnk6ICdGZWJydWFyeScsXG5cdG1hcmNoOiAnTWFyY2gnLFxuXHRhcHJpbDogJ0FwcmlsJyxcblx0bWF5OiAnTWF5Jyxcblx0anVuZTogJ0p1bmUnLFxuXHRqdWx5OiAnSnVseScsXG5cdGF1Z3VzdDogJ0F1Z3VzdCcsXG5cdHNlcHRlbWJlcjogJ1NlcHRlbWJlcicsXG5cdG9jdG9iZXI6ICdPY3RvYmVyJyxcblx0bm92ZW1iZXI6ICdOb3ZlbWJlcicsXG5cdGRlY2VtYmVyOiAnRGVjZW1iZXInLFxufVxuIiwKICAgICJpbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgd2VlayBkYXlzIGZvciBhIGdpdmVuIGRhdGUgYW5kIGZpcnN0IGRheSBvZiB3ZWVrIHNldHRpbmcuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlIGN1cnJlbnQgZGF0ZSBpcyBhbHdheXMgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIHdlZWssXG4gKiBldmVuIHdoZW4gdGhlIGZpcnN0IGRheSBvZiB3ZWVrIGlzIHNldCB0byBhIGRheSBhZnRlciB0aGUgY3VycmVudCBkYXRlLlxuICpcbiAqIEBwYXJhbSBjdXJyZW50RGF0ZSAtIFRoZSByZWZlcmVuY2UgZGF0ZSBmb3IgY2FsY3VsYXRpbmcgdGhlIHdlZWtcbiAqIEBwYXJhbSBmaXJzdERheU9mV2VlayAtIFRoZSBkYXkgbnVtYmVyICgwLTYpIHJlcHJlc2VudGluZyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwID0gU3VuZGF5LCAxID0gTW9uZGF5LCBldGMuKVxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgNyBkYXlqcyBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgd2VlayBkYXlzLCBzdGFydGluZyBmcm9tIGZpcnN0RGF5T2ZXZWVrXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdldCB3ZWVrIHN0YXJ0aW5nIGZyb20gTW9uZGF5IGZvciBjdXJyZW50IGRhdGVcbiAqIGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoZGF5anMoJzIwMjUtMTAtMTMnKSwgMSlcbiAqIC8vIFJldHVybnM6IFtNb24gT2N0IDEzLCBUdWUgT2N0IDE0LCAuLi4sIFN1biBPY3QgMTldXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdldCB3ZWVrIHN0YXJ0aW5nIGZyb20gV2VkbmVzZGF5IHdoZW4gY3VycmVudCBkYXRlIGlzIE1vbmRheVxuICogY29uc3Qgd2Vla0RheXMgPSBnZXRXZWVrRGF5cyhkYXlqcygnMjAyNS0xMC0xMycpLCAzKVxuICogLy8gUmV0dXJuczogW1dlZCBPY3QgOCwgVGh1IE9jdCA5LCAuLi4sIFR1ZSBPY3QgMTRdIChpbmNsdWRlcyBNb25kYXkgT2N0IDEzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2Vla0RheXMoXG5cdGN1cnJlbnREYXRlOiBkYXlqcy5EYXlqcyxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuKTogZGF5anMuRGF5anNbXSB7XG5cdGNvbnN0IHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlID0gY3VycmVudERhdGVcblx0XHQuc3RhcnRPZignd2VlaycpXG5cdFx0LmRheShmaXJzdERheU9mV2VlaylcblxuXHRjb25zdCBhZGp1c3RlZFN0YXJ0T2ZXZWVrID0gY3VycmVudERhdGUuaXNCZWZvcmUoc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGUpXG5cdFx0PyBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZS5zdWJ0cmFjdCgxLCAnd2VlaycpXG5cdFx0OiBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZVxuXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiA3IH0sIChfLCBkYXlJbmRleCkgPT5cblx0XHRhZGp1c3RlZFN0YXJ0T2ZXZWVrLmFkZChkYXlJbmRleCwgJ2RheScpXG5cdClcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgNiB3ZWVrcyBvZiBkYXlzIGZvciBhIG1vbnRoIGNhbGVuZGFyIHZpZXcuXG4gKiBBbHdheXMgcmV0dXJucyA0MiBkYXlzICg2IHdlZWtzIMOXIDcgZGF5cykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb250aFdlZWtzKFxuXHRtb250aERhdGU6IGRheWpzLkRheWpzLFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG4pOiBkYXlqcy5EYXlqc1tdW10ge1xuXHRjb25zdCBmaXJzdFdlZWsgPSBnZXRXZWVrRGF5cyhtb250aERhdGUuc3RhcnRPZignbW9udGgnKSwgZmlyc3REYXlPZldlZWspXG5cblx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDYgfSwgKF8sIHdlZWtJbmRleCkgPT4ge1xuXHRcdGNvbnN0IHdlZWtTdGFydCA9IGZpcnN0V2Vla1swXS5hZGQod2Vla0luZGV4LCAnd2VlaycpXG5cdFx0cmV0dXJuIGdldFdlZWtEYXlzKHdlZWtTdGFydCwgZmlyc3REYXlPZldlZWspXG5cdH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb250aERheXMobW9udGhEYXRlOiBkYXlqcy5EYXlqcyk6IGRheWpzLkRheWpzW10ge1xuXHRjb25zdCBkYXlzSW5Nb250aCA9IG1vbnRoRGF0ZS5kYXlzSW5Nb250aCgpXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBkYXlzSW5Nb250aCB9LCAoXywgaSkgPT5cblx0XHRtb250aERhdGUuc3RhcnRPZignbW9udGgnKS5hZGQoaSwgJ2RheScpXG5cdClcbn1cblxuaW50ZXJmYWNlIEdldERheUhvdXJzT3B0aW9ucyB7XG5cdHJlZmVyZW5jZURhdGU/OiBkYXlqcy5EYXlqcyAvLyBSZWZlcmVuY2UgZGF0ZSB0byBzZXQgdGhlIGhvdXJzIG9uIChkZWZhdWx0IGlzIHRvZGF5KVxuXHRsZW5ndGg/OiBudW1iZXIgLy8gTnVtYmVyIG9mIGhvdXJzIGluIHRoZSBkYXkgKGRlZmF1bHQgaXMgMjQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXlIb3Vycyh7XG5cdHJlZmVyZW5jZURhdGUgPSBkYXlqcygpLFxuXHRsZW5ndGggPSAyNCxcbn06IEdldERheUhvdXJzT3B0aW9ucyA9IHt9KTogZGF5anMuRGF5anNbXSB7XG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoIH0sIChfLCBpKSA9PlxuXHRcdHJlZmVyZW5jZURhdGUuaG91cihpKS5taW51dGUoMCkuc2Vjb25kKDApXG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBXZWVrRGF5cyB9IGZyb20gJ0AvY29tcG9uZW50cydcblxuZXhwb3J0IGNvbnN0IEdBUF9CRVRXRUVOX0VMRU1FTlRTID0gMSAvLyBweCAoZ2FwLTEpXG5leHBvcnQgY29uc3QgREFZX05VTUJFUl9IRUlHSFQgPSAyNCAvLyBweCAoaC02KVxuZXhwb3J0IGNvbnN0IEVWRU5UX0JBUl9IRUlHSFQgPSAyNCAvLyBweCAoaC1bMjRweF0pXG5leHBvcnQgY29uc3QgREFZX01BWF9FVkVOVFNfREVGQVVMVCA9IDQgLy8gRGVmYXVsdCBtYXggZXZlbnRzIHBlciBkYXlcbmV4cG9ydCBjb25zdCBESVNBQkxFRF9DRUxMX0NMQVNTTkFNRSA9XG5cdCdiZy1zZWNvbmRhcnkgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHBvaW50ZXItZXZlbnRzLW5vbmUnXG5cbmV4cG9ydCBjb25zdCBXRUVLX0RBWVNfTlVNQkVSX01BUDogUmVjb3JkPFdlZWtEYXlzLCBudW1iZXI+ID0ge1xuXHRzdW5kYXk6IDAsXG5cdG1vbmRheTogMSxcblx0dHVlc2RheTogMixcblx0d2VkbmVzZGF5OiAzLFxuXHR0aHVyc2RheTogNCxcblx0ZnJpZGF5OiA1LFxuXHRzYXR1cmRheTogNixcbn1cblxuZXhwb3J0IGNvbnN0IERBWV9OVU1CRVJfVE9fV0VFS19EQVlTOiBSZWNvcmQ8bnVtYmVyLCBXZWVrRGF5cz4gPSB7XG5cdDA6ICdzdW5kYXknLFxuXHQxOiAnbW9uZGF5Jyxcblx0MjogJ3R1ZXNkYXknLFxuXHQzOiAnd2VkbmVzZGF5Jyxcblx0NDogJ3RodXJzZGF5Jyxcblx0NTogJ2ZyaWRheScsXG5cdDY6ICdzYXR1cmRheScsXG59XG4iLAogICAgImltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQge1xuXHREaWFsb2csXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0Rlc2NyaXB0aW9uLFxuXHREaWFsb2dGb290ZXIsXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nVGl0bGUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9kaWFsb2cnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmludGVyZmFjZSBSZWN1cnJlbmNlRWRpdERpYWxvZ1Byb3BzIHtcblx0aXNPcGVuOiBib29sZWFuXG5cdG9uQ2xvc2U6ICgpID0+IHZvaWRcblx0b25Db25maXJtOiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHZvaWRcblx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnIHwgJ2RlbGV0ZSdcblx0ZXZlbnRUaXRsZTogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZWN1cnJlbmNlRWRpdERpYWxvZyh7XG5cdGlzT3Blbixcblx0b25DbG9zZSxcblx0b25Db25maXJtLFxuXHRvcGVyYXRpb25UeXBlLFxuXHRldmVudFRpdGxlLFxufTogUmVjdXJyZW5jZUVkaXREaWFsb2dQcm9wcykge1xuXHRjb25zdCB7IHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoeyB0OiBjb250ZXh0LnQgfSkpXG5cblx0Y29uc3QgaGFuZGxlU2NvcGVTZWxlY3QgPSAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcblx0XHRvbkNvbmZpcm0oc2NvcGUpXG5cdFx0b25DbG9zZSgpXG5cdH1cblxuXHRjb25zdCBpc0VkaXQgPSBvcGVyYXRpb25UeXBlID09PSAnZWRpdCdcblxuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2cgb25PcGVuQ2hhbmdlPXtvbkNsb3NlfSBvcGVuPXtpc09wZW59PlxuXHRcdFx0PERpYWxvZ0NvbnRlbnQgY2xhc3NOYW1lPVwibWF4LXctbWRcIj5cblx0XHRcdFx0PERpYWxvZ0hlYWRlcj5cblx0XHRcdFx0XHQ8RGlhbG9nVGl0bGU+XG5cdFx0XHRcdFx0XHR7aXNFZGl0ID8gdCgnZWRpdFJlY3VycmluZ0V2ZW50JykgOiB0KCdkZWxldGVSZWN1cnJpbmdFdmVudCcpfVxuXHRcdFx0XHRcdDwvRGlhbG9nVGl0bGU+XG5cdFx0XHRcdFx0PERpYWxvZ0Rlc2NyaXB0aW9uPlxuXHRcdFx0XHRcdFx0XCJ7ZXZlbnRUaXRsZX1cInsnICd9XG5cdFx0XHRcdFx0XHR7aXNFZGl0XG5cdFx0XHRcdFx0XHRcdD8gdCgnZWRpdFJlY3VycmluZ0V2ZW50UXVlc3Rpb24nKVxuXHRcdFx0XHRcdFx0XHQ6IHQoJ2RlbGV0ZVJlY3VycmluZ0V2ZW50UXVlc3Rpb24nKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ0Rlc2NyaXB0aW9uPlxuXHRcdFx0XHQ8L0RpYWxvZ0hlYWRlcj5cblxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktM1wiPlxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ3RoaXMnKX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbGVmdFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e3QoJ3RoaXNFdmVudCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0e2lzRWRpdCA/IHQoJ29ubHlDaGFuZ2VUaGlzJykgOiB0KCdvbmx5RGVsZXRlVGhpcycpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIGp1c3RpZnktc3RhcnQgaC1hdXRvIHAtNFwiXG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTY29wZVNlbGVjdCgnZm9sbG93aW5nJyl9XG5cdFx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPnt0KCd0aGlzQW5kRm9sbG93aW5nRXZlbnRzJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0XHR7aXNFZGl0ID8gdCgnY2hhbmdlVGhpc0FuZEZ1dHVyZScpIDogdCgnZGVsZXRlVGhpc0FuZEZ1dHVyZScpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIGp1c3RpZnktc3RhcnQgaC1hdXRvIHAtNFwiXG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTY29wZVNlbGVjdCgnYWxsJyl9XG5cdFx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPnt0KCdhbGxFdmVudHMnKX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdHtpc0VkaXQgPyB0KCdjaGFuZ2VFbnRpcmVTZXJpZXMnKSA6IHQoJ2RlbGV0ZUVudGlyZVNlcmllcycpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHQ8RGlhbG9nRm9vdGVyPlxuXHRcdFx0XHRcdDxCdXR0b24gb25DbGljaz17b25DbG9zZX0gdmFyaWFudD1cIm91dGxpbmVcIj5cblx0XHRcdFx0XHRcdHt0KCdjYW5jZWwnKX1cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0PC9EaWFsb2dGb290ZXI+XG5cdFx0XHQ8L0RpYWxvZ0NvbnRlbnQ+XG5cdFx0PC9EaWFsb2c+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBEcmFnRW5kRXZlbnQgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBnZXRVcGRhdGVkRXZlbnQgPSAoXG5cdGV2ZW50OiBEcmFnRW5kRXZlbnQsXG5cdGFjdGl2ZUV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuKSA9PiB7XG5cdGNvbnN0IHsgYWN0aXZlLCBvdmVyIH0gPSBldmVudFxuXG5cdGlmICghYWN0aXZlIHx8ICFvdmVyIHx8ICFhY3RpdmVFdmVudCkge1xuXHRcdHJldHVybiBudWxsXG5cdH1cblxuXHRjb25zdCBpc1RpbWVDZWxsID0gb3Zlci5kYXRhLmN1cnJlbnQ/LnR5cGUgPT09ICd0aW1lLWNlbGwnXG5cdGNvbnN0IHsgcmVzb3VyY2VJZCwgYWxsRGF5IH0gPSBvdmVyLmRhdGEuY3VycmVudCB8fCB7fVxuXHRsZXQgbmV3U3RhcnRcblxuXHRpZiAoaXNUaW1lQ2VsbCkge1xuXHRcdGNvbnN0IHsgZGF0ZSwgaG91ciA9IDAsIG1pbnV0ZSA9IDAgfSA9IG92ZXIuZGF0YS5jdXJyZW50XG5cblx0XHQvLyBDcmVhdGUgbmV3IHN0YXJ0IHRpbWUgYmFzZWQgb24gdGhlIGRyb3AgdGFyZ2V0XG5cdFx0bmV3U3RhcnQgPSBkYXlqcyhkYXRlKS5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGUpXG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgeyBkYXRlIH0gPSBvdmVyLmRhdGEuY3VycmVudFxuXG5cdFx0bmV3U3RhcnQgPSBkYXlqcyhkYXRlKVxuXHR9XG5cblx0Y29uc3QgZXZlbnREdXJhdGlvbiA9IGFjdGl2ZUV2ZW50LmVuZC5kaWZmKGFjdGl2ZUV2ZW50LnN0YXJ0LCAnc2Vjb25kJylcblxuXHQvLyBDcmVhdGUgbmV3IGVuZCB0aW1lIGJ5IGFkZGluZyB0aGUgb3JpZ2luYWwgZHVyYXRpb25cblx0bGV0IG5ld0VuZCA9IG5ld1N0YXJ0LmFkZChldmVudER1cmF0aW9uLCAnc2Vjb25kJylcblxuXHRpZiAobmV3RW5kLmlzU2FtZShuZXdFbmQuc3RhcnRPZignZGF5JykpKSB7XG5cdFx0Ly8gSWYgdGhlIG5ldyBlbmQgdGltZSBpcyBhdCBtaWRuaWdodCwgc2V0IGl0IHRvIDI0IGhvdXJzIG9mIHBhcnRpYWwgZGF5XG5cdFx0bmV3RW5kID0gbmV3RW5kLnN1YnRyYWN0KDEsICdkYXknKS5lbmRPZignZGF5Jylcblx0fVxuXG5cdC8vIFVwZGF0ZSB0aGUgZXZlbnQgd2l0aCBuZXcgdGltZXMgYW5kIHJlc291cmNlIGlmIGNoYW5nZWRcblx0Y29uc3QgdXBkYXRlcyA9IHtcblx0XHRzdGFydDogbmV3U3RhcnQsXG5cdFx0ZW5kOiBuZXdFbmQsXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRhbGxEYXk6IGlzVGltZUNlbGwgPyBmYWxzZSA6IChhbGxEYXkgPz8gYWN0aXZlRXZlbnQuYWxsRGF5KSxcblx0fVxuXHRyZXR1cm4geyBhY3RpdmVFdmVudCwgdXBkYXRlcyB9XG59XG4iLAogICAgImltcG9ydCB7IERyYWdPdmVybGF5IH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7IHNuYXBDZW50ZXJUb0N1cnNvciB9IGZyb20gJ0BkbmQta2l0L21vZGlmaWVycydcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICcuLi90eXBlcydcblxuaW50ZXJmYWNlIEV2ZW50RHJhZ092ZXJsYXlQcm9wcyB7XG5cdHJlZjogUmVhY3QuUmVmPHsgc2V0QWN0aXZlRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZCB9PlxufVxuXG5leHBvcnQgY29uc3QgRXZlbnREcmFnT3ZlcmxheTogUmVhY3QuRkM8RXZlbnREcmFnT3ZlcmxheVByb3BzPiA9ICh7IHJlZiB9KSA9PiB7XG5cdGNvbnN0IFthY3RpdmVFdmVudCwgc2V0QWN0aXZlRXZlbnRdID0gdXNlU3RhdGU8Q2FsZW5kYXJFdmVudD4obnVsbClcblxuXHR1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcblx0XHRzZXRBY3RpdmVFdmVudCxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8RHJhZ092ZXJsYXkgbW9kaWZpZXJzPXtbc25hcENlbnRlclRvQ3Vyc29yXX0+XG5cdFx0XHR7YWN0aXZlRXZlbnQgJiYgKFxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdjdXJzb3ItZ3JhYiB0cnVuY2F0ZSByb3VuZGVkIGJnLWFtYmVyLTIwMCBwLTIgdGV4dC1bMTBweF0gc2hhZG93LWxnIHNtOnRleHQteHMgdy0yMCcsXG5cdFx0XHRcdFx0XHRhY3RpdmVFdmVudC5iYWNrZ3JvdW5kQ29sb3IgfHwgJ2JnLWJsdWUtNTAwJyxcblx0XHRcdFx0XHRcdGFjdGl2ZUV2ZW50LmNvbG9yIHx8ICd0ZXh0LXdoaXRlJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7YWN0aXZlRXZlbnQ/LnRpdGxlfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCl9XG5cdFx0PC9EcmFnT3ZlcmxheT5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9jaGVja2JveCdcbmltcG9ydCB7IERhdGVQaWNrZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGF0ZS1waWNrZXInXG5pbXBvcnQgeyBEaWFsb2dGb290ZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvaW5wdXQnXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9sYWJlbCdcbmltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyBUaW1lUGlja2VyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3RpbWUtcGlja2VyJ1xuaW1wb3J0IHsgaXNCdXNpbmVzc0RheSB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQge1xuXHRidWlsZERhdGVUaW1lLFxuXHRidWlsZEVuZERhdGVUaW1lLFxuXHRnZXRUaW1lQ29uc3RyYWludHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvZXZlbnQtZm9ybS11dGlscydcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0RGlhbG9nIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZydcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0b3IgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXRvci9yZWN1cnJlbmNlLWVkaXRvcidcbmltcG9ydCB7IHVzZVJlY3VycmluZ0V2ZW50QWN0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9ob29rcy91c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IGlzUmVjdXJyaW5nRXZlbnQgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgQ09MT1JfTkFNRVMgPSBbXG5cdCdibHVlJyxcblx0J2dyZWVuJyxcblx0J3B1cnBsZScsXG5cdCdyZWQnLFxuXHQneWVsbG93Jyxcblx0J3BpbmsnLFxuXHQnaW5kaWdvJyxcblx0J2FtYmVyJyxcblx0J2VtZXJhbGQnLFxuXHQnc2t5Jyxcblx0J3Zpb2xldCcsXG5cdCdyb3NlJyxcblx0J3RlYWwnLFxuXHQnb3JhbmdlJyxcbl0gYXMgY29uc3RcblxuY29uc3QgQ09MT1JfT1BUSU9OUyA9IENPTE9SX05BTUVTLm1hcCgoY29sb3IpID0+ICh7XG5cdHZhbHVlOiBgYmctJHtjb2xvcn0tMTAwIHRleHQtJHtjb2xvcn0tODAwYCxcblx0bGFiZWw6IGNvbG9yLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgY29sb3Iuc2xpY2UoMSksXG59KSlcblxuZXhwb3J0IGludGVyZmFjZSBFdmVudEZvcm1Qcm9wcyB7XG5cdG9wZW4/OiBib29sZWFuXG5cdHNlbGVjdGVkRXZlbnQ/OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRvbkFkZD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvblVwZGF0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkRlbGV0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkNsb3NlOiAoKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBjb25zdCBFdmVudEZvcm06IFJlYWN0LkZDPEV2ZW50Rm9ybVByb3BzPiA9ICh7XG5cdHNlbGVjdGVkRXZlbnQsXG5cdG9uQ2xvc2UsXG5cdG9uVXBkYXRlLFxuXHRvbkRlbGV0ZSxcblx0b25BZGQsXG59KSA9PiB7XG5cdGNvbnN0IHtcblx0XHRkaWFsb2dTdGF0ZSxcblx0XHRvcGVuRWRpdERpYWxvZyxcblx0XHRvcGVuRGVsZXRlRGlhbG9nLFxuXHRcdGNsb3NlRGlhbG9nLFxuXHRcdGhhbmRsZUNvbmZpcm0sXG5cdH0gPSB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMob25DbG9zZSlcblxuXHRjb25zdCB7IGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCwgdCwgYnVzaW5lc3NIb3VycywgdGltZUZvcm1hdCB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHRcdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudDogY29udGV4dC5maW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG5cdFx0XHR0OiBjb250ZXh0LnQsXG5cdFx0XHRidXNpbmVzc0hvdXJzOiBjb250ZXh0LmJ1c2luZXNzSG91cnMsXG5cdFx0XHR0aW1lRm9ybWF0OiBjb250ZXh0LnRpbWVGb3JtYXQsXG5cdFx0fSkpXG5cblx0Y29uc3Qgc3RhcnQgPSBzZWxlY3RlZEV2ZW50Py5zdGFydCA/PyBkYXlqcygpXG5cdGNvbnN0IGVuZCA9IHNlbGVjdGVkRXZlbnQ/LmVuZCA/PyBkYXlqcygpLmFkZCgxLCAnaG91cicpXG5cblx0Ly8gRmluZCBwYXJlbnQgZXZlbnQgaWYgdGhpcyBpcyBhIHJlY3VycmluZyBldmVudCBpbnN0YW5jZVxuXHRjb25zdCBwYXJlbnRFdmVudCA9IHNlbGVjdGVkRXZlbnRcblx0XHQ/IGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KVxuXHRcdDogbnVsbFxuXG5cdC8vIEZvcm0gc3RhdGVcblx0Y29uc3QgW3N0YXJ0RGF0ZSwgc2V0U3RhcnREYXRlXSA9IHVzZVN0YXRlKHN0YXJ0LnRvRGF0ZSgpKVxuXHRjb25zdCBbZW5kRGF0ZSwgc2V0RW5kRGF0ZV0gPSB1c2VTdGF0ZShlbmQudG9EYXRlKCkpXG5cdGNvbnN0IFtpc0FsbERheSwgc2V0SXNBbGxEYXldID0gdXNlU3RhdGUoc2VsZWN0ZWRFdmVudD8uYWxsRGF5IHx8IGZhbHNlKVxuXHRjb25zdCBbc2VsZWN0ZWRDb2xvciwgc2V0U2VsZWN0ZWRDb2xvcl0gPSB1c2VTdGF0ZShcblx0XHRzZWxlY3RlZEV2ZW50Py5jb2xvciB8fCBDT0xPUl9PUFRJT05TWzBdLnZhbHVlXG5cdClcblxuXHQvLyBUaW1lIHN0YXRlXG5cdGNvbnN0IFtzdGFydFRpbWUsIHNldFN0YXJ0VGltZV0gPSB1c2VTdGF0ZShzdGFydC5mb3JtYXQoJ0hIOm1tJykpXG5cdGNvbnN0IFtlbmRUaW1lLCBzZXRFbmRUaW1lXSA9IHVzZVN0YXRlKGVuZC5mb3JtYXQoJ0hIOm1tJykpXG5cblx0Ly8gSW5pdGlhbGl6ZSBmb3JtIHZhbHVlcyBmcm9tIHNlbGVjdGVkIGV2ZW50IG9yIGRlZmF1bHRzXG5cdGNvbnN0IFtmb3JtVmFsdWVzLCBzZXRGb3JtVmFsdWVzXSA9IHVzZVN0YXRlKHtcblx0XHR0aXRsZTogc2VsZWN0ZWRFdmVudD8udGl0bGUgfHwgJycsXG5cdFx0ZGVzY3JpcHRpb246IHNlbGVjdGVkRXZlbnQ/LmRlc2NyaXB0aW9uIHx8ICcnLFxuXHRcdGxvY2F0aW9uOiBzZWxlY3RlZEV2ZW50Py5sb2NhdGlvbiB8fCAnJyxcblx0fSlcblxuXHQvLyBSZWN1cnJlbmNlIHN0YXRlIC0gcHVsbCBSUlVMRSBmcm9tIHBhcmVudCBpZiB0aGlzIGlzIGFuIGluc3RhbmNlXG5cdGNvbnN0IFtycnVsZSwgc2V0UnJ1bGVdID0gdXNlU3RhdGU8UlJ1bGVPcHRpb25zIHwgbnVsbD4oKCkgPT4ge1xuXHRcdGNvbnN0IGV2ZW50UnJ1bGUgPSBzZWxlY3RlZEV2ZW50Py5ycnVsZSB8fCBwYXJlbnRFdmVudD8ucnJ1bGVcblx0XHRyZXR1cm4gZXZlbnRScnVsZSB8fCBudWxsXG5cdH0pXG5cblx0Ly8gQ3JlYXRlIHdyYXBwZXIgZnVuY3Rpb25zIHRvIGZpeCBUeXBlU2NyaXB0IGVycm9ycyB3aXRoIERhdGVQaWNrZXJcblx0Y29uc3QgaGFuZGxlU3RhcnREYXRlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcblx0XHRzZXRTdGFydERhdGUoZGF0ZSlcblx0XHRpZiAoZGF0ZSAmJiBkYXlqcyhkYXRlKS5pc0FmdGVyKGRheWpzKGVuZERhdGUpKSkge1xuXHRcdFx0c2V0RW5kRGF0ZShkYXRlKVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGhhbmRsZUVuZERhdGVDaGFuZ2UgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuXHRcdHNldEVuZERhdGUoZGF0ZSlcblx0XHRpZiAoZGF0ZSAmJiBkYXlqcyhkYXRlKS5pc0JlZm9yZShkYXlqcyhzdGFydERhdGUpKSkge1xuXHRcdFx0c2V0U3RhcnREYXRlKGRhdGUpXG5cdFx0fVxuXHR9XG5cblx0Ly8gVGltZSB2YWxpZGF0aW9uIGhhbmRsZXJzIC0gb25seSB2YWxpZGF0ZSB3aGVuIGRhdGVzIGFyZSB0aGUgc2FtZVxuXHRjb25zdCBoYW5kbGVTdGFydFRpbWVDaGFuZ2UgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0c2V0U3RhcnRUaW1lKHRpbWUpXG5cdFx0Ly8gT25seSB2YWxpZGF0ZSBpZiBzYW1lIGRheVxuXHRcdGlmIChkYXlqcyhzdGFydERhdGUpLmlzU2FtZShkYXlqcyhlbmREYXRlKSwgJ2RheScpICYmIHRpbWUgPiBlbmRUaW1lKSB7XG5cdFx0XHRzZXRFbmRUaW1lKHRpbWUpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRW5kVGltZUNoYW5nZSA9ICh0aW1lOiBzdHJpbmcpID0+IHtcblx0XHRzZXRFbmRUaW1lKHRpbWUpXG5cdFx0Ly8gT25seSB2YWxpZGF0ZSBpZiBzYW1lIGRheVxuXHRcdGlmIChkYXlqcyhzdGFydERhdGUpLmlzU2FtZShkYXlqcyhlbmREYXRlKSwgJ2RheScpICYmIHRpbWUgPCBzdGFydFRpbWUpIHtcblx0XHRcdHNldFN0YXJ0VGltZSh0aW1lKVxuXHRcdH1cblx0fVxuXG5cdC8vIFVwZGF0ZSBmb3JtIHZhbHVlcyB3aGVuIGlucHV0IGNoYW5nZXNcblx0Y29uc3QgaGFuZGxlSW5wdXRDaGFuZ2UgPSAoXG5cdFx0ZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+XG5cdCkgPT4ge1xuXHRcdGNvbnN0IHsgbmFtZSwgdmFsdWUgfSA9IGUudGFyZ2V0XG5cdFx0c2V0Rm9ybVZhbHVlcygocHJldikgPT4gKHsgLi4ucHJldiwgW25hbWVdOiB2YWx1ZSB9KSlcblx0fVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0Ly8gUmVzZXQgZW5kIHRpbWUgd2hlbiBhbGwgZGF5IGlzIHRvZ2dsZWQgdG8gb25cblx0XHRpZiAoaXNBbGxEYXkpIHtcblx0XHRcdHNldEVuZFRpbWUoJzIzOjU5Jylcblx0XHR9XG5cdH0sIFtpc0FsbERheV0pXG5cblx0Y29uc3QgaGFuZGxlU3VibWl0ID0gKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuXHRcdGUucHJldmVudERlZmF1bHQoKVxuXG5cdFx0Y29uc3Qgc3RhcnREYXRlVGltZSA9IGJ1aWxkRGF0ZVRpbWUoc3RhcnREYXRlLCBzdGFydFRpbWUsIGlzQWxsRGF5KVxuXHRcdGNvbnN0IGVuZERhdGVUaW1lID0gYnVpbGRFbmREYXRlVGltZShlbmREYXRlLCBlbmRUaW1lLCBpc0FsbERheSlcblxuXHRcdGNvbnN0IGV2ZW50RGF0YTogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdGlkOiBzZWxlY3RlZEV2ZW50Py5pZCB8fCBkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKSxcblx0XHRcdHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuXHRcdFx0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG5cdFx0XHRlbmQ6IGVuZERhdGVUaW1lLFxuXHRcdFx0cmVzb3VyY2VJZDogc2VsZWN0ZWRFdmVudD8ucmVzb3VyY2VJZCxcblx0XHRcdGRlc2NyaXB0aW9uOiBmb3JtVmFsdWVzLmRlc2NyaXB0aW9uLFxuXHRcdFx0bG9jYXRpb246IGZvcm1WYWx1ZXMubG9jYXRpb24sXG5cdFx0XHRhbGxEYXk6IGlzQWxsRGF5LFxuXHRcdFx0Y29sb3I6IHNlbGVjdGVkQ29sb3IsXG5cdFx0XHRycnVsZTogcnJ1bGUgfHwgdW5kZWZpbmVkLFxuXHRcdH1cblxuXHRcdGlmIChzZWxlY3RlZEV2ZW50Py5pZCAmJiBpc1JlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpKSB7XG5cdFx0XHRvcGVuRWRpdERpYWxvZyhzZWxlY3RlZEV2ZW50LCB7XG5cdFx0XHRcdHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuXHRcdFx0XHRzdGFydDogc3RhcnREYXRlVGltZSxcblx0XHRcdFx0ZW5kOiBlbmREYXRlVGltZSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IGZvcm1WYWx1ZXMuZGVzY3JpcHRpb24sXG5cdFx0XHRcdGxvY2F0aW9uOiBmb3JtVmFsdWVzLmxvY2F0aW9uLFxuXHRcdFx0XHRhbGxEYXk6IGlzQWxsRGF5LFxuXHRcdFx0XHRjb2xvcjogc2VsZWN0ZWRDb2xvcixcblx0XHRcdFx0cnJ1bGU6IHJydWxlIHx8IHVuZGVmaW5lZCxcblx0XHRcdH0pXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoc2VsZWN0ZWRFdmVudD8uaWQpIHtcblx0XHRcdG9uVXBkYXRlPy4oZXZlbnREYXRhKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvbkFkZD8uKGV2ZW50RGF0YSlcblx0XHR9XG5cdFx0b25DbG9zZSgpXG5cdH1cblxuXHRjb25zdCBoYW5kbGVEZWxldGUgPSAoKSA9PiB7XG5cdFx0aWYgKHNlbGVjdGVkRXZlbnQ/LmlkKSB7XG5cdFx0XHQvLyBDaGVjayBpZiB0aGlzIGlzIGEgcmVjdXJyaW5nIGV2ZW50XG5cdFx0XHRpZiAoaXNSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KSkge1xuXHRcdFx0XHQvLyBTaG93IHJlY3VycmluZyBldmVudCBkZWxldGUgZGlhbG9nXG5cdFx0XHRcdG9wZW5EZWxldGVEaWFsb2coc2VsZWN0ZWRFdmVudClcblx0XHRcdFx0cmV0dXJuIC8vIERvbid0IGNsb3NlIHRoZSBmb3JtIHlldCwgbGV0IHRoZSBkaWFsb2cgaGFuZGxlIGl0XG5cdFx0XHR9XG5cdFx0XHRvbkRlbGV0ZT8uKHNlbGVjdGVkRXZlbnQpXG5cdFx0XHRvbkNsb3NlKClcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVSUnVsZUNoYW5nZSA9IChuZXdSUnVsZTogUlJ1bGVPcHRpb25zIHwgbnVsbCkgPT4ge1xuXHRcdGlmICghbmV3UlJ1bGUpIHtcblx0XHRcdHNldFJydWxlKG51bGwpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0Y29uc3Qgc3RhcnREYXRlVGltZSA9IGJ1aWxkRGF0ZVRpbWUoc3RhcnREYXRlLCBzdGFydFRpbWUsIGlzQWxsRGF5KVxuXHRcdHNldFJydWxlKHsgLi4ubmV3UlJ1bGUsIGR0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUudG9EYXRlKCkgfSlcblx0fVxuXG5cdGNvbnN0IGRpc2FibGVkRGF0ZU1hdGNoZXIgPSBidXNpbmVzc0hvdXJzXG5cdFx0PyAoZGF0ZTogRGF0ZSkgPT4gIWlzQnVzaW5lc3NEYXkoZGF5anMoZGF0ZSksIGJ1c2luZXNzSG91cnMpXG5cdFx0OiB1bmRlZmluZWRcblxuXHRjb25zdCBzdGFydENvbnN0cmFpbnRzID0gZ2V0VGltZUNvbnN0cmFpbnRzKHN0YXJ0RGF0ZSwgYnVzaW5lc3NIb3Vycylcblx0Y29uc3QgZW5kQ29uc3RyYWludHMgPSBnZXRUaW1lQ29uc3RyYWludHMoZW5kRGF0ZSwgYnVzaW5lc3NIb3VycylcblxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8Zm9ybSBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGZsZXgtMSBtaW4taC0wXCIgb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0+XG5cdFx0XHRcdDxTY3JvbGxBcmVhIGNsYXNzTmFtZT1cImZsZXgtMSBtaW4taC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0zIHNtOmdhcC00IHAtMVwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIiBodG1sRm9yPVwidGl0bGVcIj5cblx0XHRcdFx0XHRcdFx0XHR7dCgndGl0bGUnKX1cblx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRpZD1cInRpdGxlXCJcblx0XHRcdFx0XHRcdFx0XHRuYW1lPVwidGl0bGVcIlxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnZXZlbnRUaXRsZVBsYWNlaG9sZGVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0cmVxdWlyZWRcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17Zm9ybVZhbHVlcy50aXRsZX1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cblx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiIGh0bWxGb3I9XCJkZXNjcmlwdGlvblwiPlxuXHRcdFx0XHRcdFx0XHRcdHt0KCdkZXNjcmlwdGlvbicpfVxuXHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLTggdGV4dC1zbSBzbTpoLTlcIlxuXHRcdFx0XHRcdFx0XHRcdGlkPVwiZGVzY3JpcHRpb25cIlxuXHRcdFx0XHRcdFx0XHRcdG5hbWU9XCJkZXNjcmlwdGlvblwiXG5cdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPXt0KCdldmVudERlc2NyaXB0aW9uUGxhY2Vob2xkZXInKX1cblx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17Zm9ybVZhbHVlcy5kZXNjcmlwdGlvbn1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRjaGVja2VkPXtpc0FsbERheX1cblx0XHRcdFx0XHRcdFx0XHRpZD1cImFsbERheVwiXG5cdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoY2hlY2tlZCkgPT4gc2V0SXNBbGxEYXkoY2hlY2tlZCA9PT0gdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIiBodG1sRm9yPVwiYWxsRGF5XCI+XG5cdFx0XHRcdFx0XHRcdFx0e3QoJ2FsbERheScpfVxuXHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtMiBzbTpnYXAtNFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnc3RhcnREYXRlJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8RGF0ZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibXQtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU9uU2VsZWN0XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRlPXtzdGFydERhdGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRkaXNhYmxlZD17ZGlzYWJsZWREYXRlTWF0Y2hlcn1cblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVTdGFydERhdGVDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KCdlbmREYXRlJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8RGF0ZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibXQtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU9uU2VsZWN0XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRlPXtlbmREYXRlfVxuXHRcdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkRGF0ZU1hdGNoZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlRW5kRGF0ZUNoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHR7IWlzQWxsRGF5ICYmIChcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC0yIHNtOmdhcC00XCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnc3RhcnRUaW1lJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdDxUaW1lUGlja2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTEgaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4VGltZT17c3RhcnRDb25zdHJhaW50cy5tYXh9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1pblRpbWU9e3N0YXJ0Q29uc3RyYWludHMubWlufVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPVwic3RhcnQtdGltZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVTdGFydFRpbWVDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtzdGFydFRpbWV9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ2VuZFRpbWUnKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0PFRpbWVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibXQtMSBoLTggdGV4dC1zbSBzbTpoLTlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhUaW1lPXtlbmRDb25zdHJhaW50cy5tYXh9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1pblRpbWU9e2VuZENvbnN0cmFpbnRzLm1pbn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZT1cImVuZC10aW1lXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZUVuZFRpbWVDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtlbmRUaW1lfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQpfVxuXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cblx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KCdjb2xvcicpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTJcIj5cblx0XHRcdFx0XHRcdFx0XHR7Q09MT1JfT1BUSU9OUy5tYXAoKGNvbG9yKSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFyaWEtbGFiZWw9e2NvbG9yLmxhYmVsfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGAke2NvbG9yLnZhbHVlfSBoLTYgdy02IHJvdW5kZWQtZnVsbCBzbTpoLTggc206dy04YCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzZWxlY3RlZENvbG9yID09PSBjb2xvci52YWx1ZSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3JpbmctMiByaW5nLWJsYWNrIHJpbmctb2Zmc2V0LTEgc206cmluZy1vZmZzZXQtMidcblx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtjb2xvci52YWx1ZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gc2V0U2VsZWN0ZWRDb2xvcihjb2xvci52YWx1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIiBodG1sRm9yPVwibG9jYXRpb25cIj5cblx0XHRcdFx0XHRcdFx0XHR7dCgnbG9jYXRpb24nKX1cblx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRpZD1cImxvY2F0aW9uXCJcblx0XHRcdFx0XHRcdFx0XHRuYW1lPVwibG9jYXRpb25cIlxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnZXZlbnRMb2NhdGlvblBsYWNlaG9sZGVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2Zvcm1WYWx1ZXMubG9jYXRpb259XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0ey8qIFJlY3VycmVuY2UgU2VjdGlvbiAqL31cblx0XHRcdFx0XHRcdDxSZWN1cnJlbmNlRWRpdG9yIG9uQ2hhbmdlPXtoYW5kbGVSUnVsZUNoYW5nZX0gdmFsdWU9e3JydWxlfSAvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L1Njcm9sbEFyZWE+XG5cblx0XHRcdFx0PERpYWxvZ0Zvb3RlciBjbGFzc05hbWU9XCJtdC00IHNocmluay0wIGZsZXggZmxleC1jb2wtcmV2ZXJzZSBnYXAtMiBzbTpmbGV4LXJvdyBzbTpnYXAtMFwiPlxuXHRcdFx0XHRcdHtzZWxlY3RlZEV2ZW50Py5pZCAmJiAoXG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBzbTptci1hdXRvIHNtOnctYXV0b1wiXG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9e2hhbmRsZURlbGV0ZX1cblx0XHRcdFx0XHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJkZXN0cnVjdGl2ZVwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdHt0KCdkZWxldGUnKX1cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBnYXAtMiBzbTp3LWF1dG9cIj5cblx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleC0xIHNtOmZsZXgtbm9uZVwiXG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9e29uQ2xvc2V9XG5cdFx0XHRcdFx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdHt0KCdjYW5jZWwnKX1cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdFx0PEJ1dHRvbiBjbGFzc05hbWU9XCJmbGV4LTEgc206ZmxleC1ub25lXCIgc2l6ZT1cInNtXCIgdHlwZT1cInN1Ym1pdFwiPlxuXHRcdFx0XHRcdFx0XHR7c2VsZWN0ZWRFdmVudD8uaWQgPyB0KCd1cGRhdGUnKSA6IHQoJ2NyZWF0ZScpfVxuXHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvRGlhbG9nRm9vdGVyPlxuXHRcdFx0PC9mb3JtPlxuXG5cdFx0XHR7LyogUmVjdXJyaW5nIEV2ZW50IEVkaXQgRGlhbG9nICovfVxuXHRcdFx0PFJlY3VycmVuY2VFZGl0RGlhbG9nXG5cdFx0XHRcdGV2ZW50VGl0bGU9e2RpYWxvZ1N0YXRlLmV2ZW50Py50aXRsZSB8fCAnJ31cblx0XHRcdFx0aXNPcGVuPXtkaWFsb2dTdGF0ZS5pc09wZW59XG5cdFx0XHRcdG9uQ2xvc2U9e2Nsb3NlRGlhbG9nfVxuXHRcdFx0XHRvbkNvbmZpcm09e2hhbmRsZUNvbmZpcm19XG5cdFx0XHRcdG9wZXJhdGlvblR5cGU9e2RpYWxvZ1N0YXRlLm9wZXJhdGlvblR5cGV9XG5cdFx0XHQvPlxuXHRcdDwvPlxuXHQpXG59XG4iLAogICAgImltcG9ydCAqIGFzIENoZWNrYm94UHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1jaGVja2JveCdcbmltcG9ydCB7IENoZWNrSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIENoZWNrYm94KHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIENoZWNrYm94UHJpbWl0aXZlLlJvb3Q+KSB7XG5cdHJldHVybiAoXG5cdFx0PENoZWNrYm94UHJpbWl0aXZlLlJvb3Rcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdwZWVyIGJvcmRlci1pbnB1dCBkYXJrOmJnLWlucHV0LzMwIGRhdGEtW3N0YXRlPWNoZWNrZWRdOmJnLXByaW1hcnkgZGF0YS1bc3RhdGU9Y2hlY2tlZF06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGFyazpkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1wcmltYXJ5IGRhdGEtW3N0YXRlPWNoZWNrZWRdOmJvcmRlci1wcmltYXJ5IGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlIHNpemUtNCBzaHJpbmstMCByb3VuZGVkLVs0cHhdIGJvcmRlciBzaGFkb3cteHMgdHJhbnNpdGlvbi1zaGFkb3cgb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImNoZWNrYm94XCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8Q2hlY2tib3hQcmltaXRpdmUuSW5kaWNhdG9yXG5cdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtY3VycmVudCB0cmFuc2l0aW9uLW5vbmVcIlxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJjaGVja2JveC1pbmRpY2F0b3JcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8Q2hlY2tJY29uIGNsYXNzTmFtZT1cInNpemUtMy41XCIgLz5cblx0XHRcdDwvQ2hlY2tib3hQcmltaXRpdmUuSW5kaWNhdG9yPlxuXHRcdDwvQ2hlY2tib3hQcmltaXRpdmUuUm9vdD5cblx0KVxufVxuXG5leHBvcnQgeyBDaGVja2JveCB9XG4iLAogICAgImltcG9ydCB7IFBvcG92ZXJDbG9zZSB9IGZyb20gJ0ByYWRpeC11aS9yZWFjdC1wb3BvdmVyJ1xuaW1wb3J0IHsgQ2FsZW5kYXIgYXMgQ2FsZW5kYXJJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IE1hdGNoZXIgfSBmcm9tICdyZWFjdC1kYXktcGlja2VyJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NhbGVuZGFyJ1xuaW1wb3J0IHtcblx0UG9wb3Zlcixcblx0UG9wb3ZlckNvbnRlbnQsXG5cdFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBEYXRlUGlja2VyUHJvcHMge1xuXHRkYXRlOiBEYXRlIHwgdW5kZWZpbmVkXG5cdG9uQ2hhbmdlPzogKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHZvaWRcblx0bGFiZWw/OiBzdHJpbmdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGNsb3NlT25TZWxlY3Q/OiBib29sZWFuXG5cdGRpc2FibGVkPzogTWF0Y2hlciB8IE1hdGNoZXJbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRGF0ZVBpY2tlcih7XG5cdGRhdGUsXG5cdGNsb3NlT25TZWxlY3QsXG5cdG9uQ2hhbmdlLFxuXHRsYWJlbCA9ICdQaWNrIGEgZGF0ZScsXG5cdGNsYXNzTmFtZSxcblx0ZGlzYWJsZWQsXG59OiBEYXRlUGlja2VyUHJvcHMpIHtcblx0Y29uc3QgcG9wT3ZlclJlZiA9IHVzZVJlZjxIVE1MQnV0dG9uRWxlbWVudCB8IG51bGw+KG51bGwpXG5cdGNvbnN0IFtzZWxlY3RlZERhdGUsIHNldFNlbGVjdGVkRGF0ZV0gPSB1c2VTdGF0ZTxEYXRlIHwgdW5kZWZpbmVkPihkYXRlKVxuXG5cdC8vIFN5bmMgZGF0ZSBzdGF0ZSB3aXRoIGRhdGUgcHJvcFxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdHNldFNlbGVjdGVkRGF0ZShkYXRlKVxuXHR9LCBbZGF0ZV0pXG5cblx0Y29uc3QgaGFuZGxlRGF0ZVNlbGVjdCA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0c2V0U2VsZWN0ZWREYXRlKGRhdGUpXG5cdFx0aWYgKGNsb3NlT25TZWxlY3QpIHtcblx0XHRcdHBvcE92ZXJSZWYuY3VycmVudD8uY2xpY2soKVxuXHRcdH1cblx0XHRvbkNoYW5nZT8uKGRhdGUpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuXHRcdFx0PFBvcG92ZXI+XG5cdFx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdCdkYXRhLVtlbXB0eT10cnVlXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgdy1mdWxsIGp1c3RpZnktc3RhcnQgdGV4dC1sZWZ0IGZvbnQtbm9ybWFsJ1xuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdGRhdGEtZW1wdHk9eyFkYXRlfVxuXHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxDYWxlbmRhckljb24gLz5cblx0XHRcdFx0XHRcdHtzZWxlY3RlZERhdGUgPyAoXG5cdFx0XHRcdFx0XHRcdGRheWpzKHNlbGVjdGVkRGF0ZSkuZm9ybWF0KCdNTU0gRCwgWVlZWScpXG5cdFx0XHRcdFx0XHQpIDogKFxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj57bGFiZWx9PC9zcGFuPlxuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0PC9Qb3BvdmVyVHJpZ2dlcj5cblx0XHRcdFx0PFBvcG92ZXJDb250ZW50IGFsaWduPVwic3RhcnRcIiBjbGFzc05hbWU9XCJ3LWF1dG8gcC0wXCI+XG5cdFx0XHRcdFx0PFBvcG92ZXJDbG9zZSByZWY9e3BvcE92ZXJSZWZ9IC8+XG5cdFx0XHRcdFx0PENhbGVuZGFyXG5cdFx0XHRcdFx0XHRjYXB0aW9uTGF5b3V0PVwiZHJvcGRvd25cIlxuXHRcdFx0XHRcdFx0ZGVmYXVsdE1vbnRoPXtzZWxlY3RlZERhdGV9XG5cdFx0XHRcdFx0XHRkaXNhYmxlZD17ZGlzYWJsZWR9XG5cdFx0XHRcdFx0XHRtb2RlPVwic2luZ2xlXCJcblx0XHRcdFx0XHRcdG9uU2VsZWN0PXtoYW5kbGVEYXRlU2VsZWN0fVxuXHRcdFx0XHRcdFx0c2VsZWN0ZWQ9e3NlbGVjdGVkRGF0ZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQ8L1BvcG92ZXJDb250ZW50PlxuXHRcdFx0PC9Qb3BvdmVyPlxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7XG5cdENoZXZyb25Eb3duSWNvbixcblx0Q2hldnJvbkxlZnRJY29uLFxuXHRDaGV2cm9uUmlnaHRJY29uLFxufSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRGF5QnV0dG9uIH0gZnJvbSAncmVhY3QtZGF5LXBpY2tlcidcbmltcG9ydCB7IERheVBpY2tlciwgZ2V0RGVmYXVsdENsYXNzTmFtZXMgfSBmcm9tICdyZWFjdC1kYXktcGlja2VyJ1xuaW1wb3J0IHsgQnV0dG9uLCBidXR0b25WYXJpYW50cyB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDYWxlbmRhcih7XG5cdGNsYXNzTmFtZSxcblx0Y2xhc3NOYW1lcyxcblx0c2hvd091dHNpZGVEYXlzID0gdHJ1ZSxcblx0Y2FwdGlvbkxheW91dCA9ICdsYWJlbCcsXG5cdGJ1dHRvblZhcmlhbnQgPSAnZ2hvc3QnLFxuXHRmb3JtYXR0ZXJzLFxuXHRjb21wb25lbnRzLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERheVBpY2tlcj4gJiB7XG5cdGJ1dHRvblZhcmlhbnQ/OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgQnV0dG9uPlsndmFyaWFudCddXG59KSB7XG5cdGNvbnN0IGRlZmF1bHRDbGFzc05hbWVzID0gZ2V0RGVmYXVsdENsYXNzTmFtZXMoKVxuXG5cdHJldHVybiAoXG5cdFx0PERheVBpY2tlclxuXHRcdFx0Y2FwdGlvbkxheW91dD17Y2FwdGlvbkxheW91dH1cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdiZy1iYWNrZ3JvdW5kIGdyb3VwL2NhbGVuZGFyIHAtMyBbLS1jZWxsLXNpemU6LS1zcGFjaW5nKDgpXSBbW2RhdGEtc2xvdD1jYXJkLWNvbnRlbnRdXyZdOmJnLXRyYW5zcGFyZW50IFtbZGF0YS1zbG90PXBvcG92ZXItY29udGVudF1fJl06YmctdHJhbnNwYXJlbnQnLFxuXHRcdFx0XHRTdHJpbmcucmF3YHJ0bDoqKjpbLnJkcC1idXR0b25cXF9uZXh0PnN2Z106cm90YXRlLTE4MGAsXG5cdFx0XHRcdFN0cmluZy5yYXdgcnRsOioqOlsucmRwLWJ1dHRvblxcX3ByZXZpb3VzPnN2Z106cm90YXRlLTE4MGAsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGNsYXNzTmFtZXM9e3tcblx0XHRcdFx0cm9vdDogY24oJ3ctZml0JywgZGVmYXVsdENsYXNzTmFtZXMucm9vdCksXG5cdFx0XHRcdG1vbnRoczogY24oXG5cdFx0XHRcdFx0J2ZsZXggZ2FwLTQgZmxleC1jb2wgbWQ6ZmxleC1yb3cgcmVsYXRpdmUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLm1vbnRoc1xuXHRcdFx0XHQpLFxuXHRcdFx0XHRtb250aDogY24oJ2ZsZXggZmxleC1jb2wgdy1mdWxsIGdhcC00JywgZGVmYXVsdENsYXNzTmFtZXMubW9udGgpLFxuXHRcdFx0XHRuYXY6IGNuKFxuXHRcdFx0XHRcdCdmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSB3LWZ1bGwgYWJzb2x1dGUgdG9wLTAgaW5zZXQteC0wIGp1c3RpZnktYmV0d2VlbicsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMubmF2XG5cdFx0XHRcdCksXG5cdFx0XHRcdGJ1dHRvbl9wcmV2aW91czogY24oXG5cdFx0XHRcdFx0YnV0dG9uVmFyaWFudHMoeyB2YXJpYW50OiBidXR0b25WYXJpYW50IH0pLFxuXHRcdFx0XHRcdCdzaXplLSgtLWNlbGwtc2l6ZSkgYXJpYS1kaXNhYmxlZDpvcGFjaXR5LTUwIHAtMCBzZWxlY3Qtbm9uZScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuYnV0dG9uX3ByZXZpb3VzXG5cdFx0XHRcdCksXG5cdFx0XHRcdGJ1dHRvbl9uZXh0OiBjbihcblx0XHRcdFx0XHRidXR0b25WYXJpYW50cyh7IHZhcmlhbnQ6IGJ1dHRvblZhcmlhbnQgfSksXG5cdFx0XHRcdFx0J3NpemUtKC0tY2VsbC1zaXplKSBhcmlhLWRpc2FibGVkOm9wYWNpdHktNTAgcC0wIHNlbGVjdC1ub25lJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5idXR0b25fbmV4dFxuXHRcdFx0XHQpLFxuXHRcdFx0XHRtb250aF9jYXB0aW9uOiBjbihcblx0XHRcdFx0XHQnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaC0oLS1jZWxsLXNpemUpIHctZnVsbCBweC0oLS1jZWxsLXNpemUpJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5tb250aF9jYXB0aW9uXG5cdFx0XHRcdCksXG5cdFx0XHRcdGRyb3Bkb3duczogY24oXG5cdFx0XHRcdFx0J3ctZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LXNtIGZvbnQtbWVkaXVtIGp1c3RpZnktY2VudGVyIGgtKC0tY2VsbC1zaXplKSBnYXAtMS41Jyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5kcm9wZG93bnNcblx0XHRcdFx0KSxcblx0XHRcdFx0ZHJvcGRvd25fcm9vdDogY24oXG5cdFx0XHRcdFx0J3JlbGF0aXZlIGhhcy1mb2N1czpib3JkZXItcmluZyBib3JkZXIgYm9yZGVyLWlucHV0IHNoYWRvdy14cyBoYXMtZm9jdXM6cmluZy1yaW5nLzUwIGhhcy1mb2N1czpyaW5nLVszcHhdIHJvdW5kZWQtbWQnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmRyb3Bkb3duX3Jvb3Rcblx0XHRcdFx0KSxcblx0XHRcdFx0ZHJvcGRvd246IGNuKFxuXHRcdFx0XHRcdCdhYnNvbHV0ZSBiZy1wb3BvdmVyIGluc2V0LTAgb3BhY2l0eS0wJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5kcm9wZG93blxuXHRcdFx0XHQpLFxuXHRcdFx0XHRjYXB0aW9uX2xhYmVsOiBjbihcblx0XHRcdFx0XHQnc2VsZWN0LW5vbmUgZm9udC1tZWRpdW0nLFxuXHRcdFx0XHRcdGNhcHRpb25MYXlvdXQgPT09ICdsYWJlbCdcblx0XHRcdFx0XHRcdD8gJ3RleHQtc20nXG5cdFx0XHRcdFx0XHQ6ICdyb3VuZGVkLW1kIHBsLTIgcHItMSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSB0ZXh0LXNtIGgtOCBbJj5zdmddOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBbJj5zdmddOnNpemUtMy41Jyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5jYXB0aW9uX2xhYmVsXG5cdFx0XHRcdCksXG5cdFx0XHRcdHRhYmxlOiAndy1mdWxsIGJvcmRlci1jb2xsYXBzZScsXG5cdFx0XHRcdHdlZWtkYXlzOiBjbignZmxleCcsIGRlZmF1bHRDbGFzc05hbWVzLndlZWtkYXlzKSxcblx0XHRcdFx0d2Vla2RheTogY24oXG5cdFx0XHRcdFx0J3RleHQtbXV0ZWQtZm9yZWdyb3VuZCByb3VuZGVkLW1kIGZsZXgtMSBmb250LW5vcm1hbCB0ZXh0LVswLjhyZW1dIHNlbGVjdC1ub25lJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrZGF5XG5cdFx0XHRcdCksXG5cdFx0XHRcdHdlZWs6IGNuKCdmbGV4IHctZnVsbCBtdC0yJywgZGVmYXVsdENsYXNzTmFtZXMud2VlayksXG5cdFx0XHRcdHdlZWtfbnVtYmVyX2hlYWRlcjogY24oXG5cdFx0XHRcdFx0J3NlbGVjdC1ub25lIHctKC0tY2VsbC1zaXplKScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMud2Vla19udW1iZXJfaGVhZGVyXG5cdFx0XHRcdCksXG5cdFx0XHRcdHdlZWtfbnVtYmVyOiBjbihcblx0XHRcdFx0XHQndGV4dC1bMC44cmVtXSBzZWxlY3Qtbm9uZSB0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLndlZWtfbnVtYmVyXG5cdFx0XHRcdCksXG5cdFx0XHRcdGRheTogY24oXG5cdFx0XHRcdFx0J3JlbGF0aXZlIHctZnVsbCBoLWZ1bGwgcC0wIHRleHQtY2VudGVyIFsmOmxhc3QtY2hpbGRbZGF0YS1zZWxlY3RlZD10cnVlXV9idXR0b25dOnJvdW5kZWQtci1tZCBncm91cC9kYXkgYXNwZWN0LXNxdWFyZSBzZWxlY3Qtbm9uZScsXG5cdFx0XHRcdFx0cHJvcHMuc2hvd1dlZWtOdW1iZXJcblx0XHRcdFx0XHRcdD8gJ1smOm50aC1jaGlsZCgyKVtkYXRhLXNlbGVjdGVkPXRydWVdX2J1dHRvbl06cm91bmRlZC1sLW1kJ1xuXHRcdFx0XHRcdFx0OiAnWyY6Zmlyc3QtY2hpbGRbZGF0YS1zZWxlY3RlZD10cnVlXV9idXR0b25dOnJvdW5kZWQtbC1tZCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZGF5XG5cdFx0XHRcdCksXG5cdFx0XHRcdHJhbmdlX3N0YXJ0OiBjbihcblx0XHRcdFx0XHQncm91bmRlZC1sLW1kIGJnLWFjY2VudCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMucmFuZ2Vfc3RhcnRcblx0XHRcdFx0KSxcblx0XHRcdFx0cmFuZ2VfbWlkZGxlOiBjbigncm91bmRlZC1ub25lJywgZGVmYXVsdENsYXNzTmFtZXMucmFuZ2VfbWlkZGxlKSxcblx0XHRcdFx0cmFuZ2VfZW5kOiBjbigncm91bmRlZC1yLW1kIGJnLWFjY2VudCcsIGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX2VuZCksXG5cdFx0XHRcdHRvZGF5OiBjbihcblx0XHRcdFx0XHQnYmctYWNjZW50IHRleHQtYWNjZW50LWZvcmVncm91bmQgcm91bmRlZC1tZCBkYXRhLVtzZWxlY3RlZD10cnVlXTpyb3VuZGVkLW5vbmUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLnRvZGF5XG5cdFx0XHRcdCksXG5cdFx0XHRcdG91dHNpZGU6IGNuKFxuXHRcdFx0XHRcdCd0ZXh0LW11dGVkLWZvcmVncm91bmQgYXJpYS1zZWxlY3RlZDp0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLm91dHNpZGVcblx0XHRcdFx0KSxcblx0XHRcdFx0ZGlzYWJsZWQ6IGNuKFxuXHRcdFx0XHRcdCd0ZXh0LW11dGVkLWZvcmVncm91bmQgb3BhY2l0eS01MCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZGlzYWJsZWRcblx0XHRcdFx0KSxcblx0XHRcdFx0aGlkZGVuOiBjbignaW52aXNpYmxlJywgZGVmYXVsdENsYXNzTmFtZXMuaGlkZGVuKSxcblx0XHRcdFx0Li4uY2xhc3NOYW1lcyxcblx0XHRcdH19XG5cdFx0XHRjb21wb25lbnRzPXt7XG5cdFx0XHRcdFJvb3Q6ICh7IGNsYXNzTmFtZSwgcm9vdFJlZiwgLi4ucHJvcHMgfSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oY2xhc3NOYW1lKX1cblx0XHRcdFx0XHRcdFx0ZGF0YS1zbG90PVwiY2FsZW5kYXJcIlxuXHRcdFx0XHRcdFx0XHRyZWY9e3Jvb3RSZWZ9XG5cdFx0XHRcdFx0XHRcdHsuLi5wcm9wc31cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRDaGV2cm9uOiAoeyBjbGFzc05hbWUsIG9yaWVudGF0aW9uLCAuLi5wcm9wcyB9KSA9PiB7XG5cdFx0XHRcdFx0aWYgKG9yaWVudGF0aW9uID09PSAnbGVmdCcpIHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxDaGV2cm9uTGVmdEljb24gY2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX0gey4uLnByb3BzfSAvPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChvcmllbnRhdGlvbiA9PT0gJ3JpZ2h0Jykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PENoZXZyb25SaWdodEljb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKCdzaXplLTQnLCBjbGFzc05hbWUpfVxuXHRcdFx0XHRcdFx0XHRcdHsuLi5wcm9wc31cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PENoZXZyb25Eb3duSWNvbiBjbGFzc05hbWU9e2NuKCdzaXplLTQnLCBjbGFzc05hbWUpfSB7Li4ucHJvcHN9IC8+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9LFxuXHRcdFx0XHREYXlCdXR0b246IENhbGVuZGFyRGF5QnV0dG9uLFxuXHRcdFx0XHRXZWVrTnVtYmVyOiAoeyBjaGlsZHJlbiwgLi4ucHJvcHMgfSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8dGQgey4uLnByb3BzfT5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHNpemUtKC0tY2VsbC1zaXplKSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1jZW50ZXJcIj5cblx0XHRcdFx0XHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC4uLmNvbXBvbmVudHMsXG5cdFx0XHR9fVxuXHRcdFx0Zm9ybWF0dGVycz17e1xuXHRcdFx0XHRmb3JtYXRNb250aERyb3Bkb3duOiAoZGF0ZSkgPT5cblx0XHRcdFx0XHRkYXRlLnRvTG9jYWxlU3RyaW5nKCdkZWZhdWx0JywgeyBtb250aDogJ3Nob3J0JyB9KSxcblx0XHRcdFx0Li4uZm9ybWF0dGVycyxcblx0XHRcdH19XG5cdFx0XHRzaG93T3V0c2lkZURheXM9e3Nob3dPdXRzaWRlRGF5c31cblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhbGVuZGFyRGF5QnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHRkYXksXG5cdG1vZGlmaWVycyxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEYXlCdXR0b24+KSB7XG5cdGNvbnN0IGRlZmF1bHRDbGFzc05hbWVzID0gZ2V0RGVmYXVsdENsYXNzTmFtZXMoKVxuXG5cdGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZjxIVE1MQnV0dG9uRWxlbWVudD4obnVsbClcblx0UmVhY3QudXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAobW9kaWZpZXJzLmZvY3VzZWQpIHtcblx0XHRcdHJlZi5jdXJyZW50Py5mb2N1cygpXG5cdFx0fVxuXHR9LCBbbW9kaWZpZXJzLmZvY3VzZWRdKVxuXG5cdHJldHVybiAoXG5cdFx0PEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2RhdGEtW3NlbGVjdGVkLXNpbmdsZT10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3NlbGVjdGVkLXNpbmdsZT10cnVlXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBkYXRhLVtyYW5nZS1taWRkbGU9dHJ1ZV06YmctYWNjZW50IGRhdGEtW3JhbmdlLW1pZGRsZT10cnVlXTp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOmJnLXByaW1hcnkgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGF0YS1bcmFuZ2UtZW5kPXRydWVdOmJnLXByaW1hcnkgZGF0YS1bcmFuZ2UtZW5kPXRydWVdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OmJvcmRlci1yaW5nIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnJpbmctcmluZy81MCBkYXJrOmhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZmxleCBhc3BlY3Qtc3F1YXJlIHNpemUtYXV0byB3LWZ1bGwgbWluLXctKC0tY2VsbC1zaXplKSBmbGV4LWNvbCBnYXAtMSBsZWFkaW5nLW5vbmUgZm9udC1ub3JtYWwgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6cmVsYXRpdmUgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6ei0xMCBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpyaW5nLVszcHhdIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpyb3VuZGVkLW1kIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpyb3VuZGVkLXItbWQgZGF0YS1bcmFuZ2UtbWlkZGxlPXRydWVdOnJvdW5kZWQtbm9uZSBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpyb3VuZGVkLW1kIGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOnJvdW5kZWQtbC1tZCBbJj5zcGFuXTp0ZXh0LXhzIFsmPnNwYW5dOm9wYWNpdHktNzAnLFxuXHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5kYXksXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtZGF5PXtkYXkuZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKX1cblx0XHRcdGRhdGEtcmFuZ2UtZW5kPXttb2RpZmllcnMucmFuZ2VfZW5kfVxuXHRcdFx0ZGF0YS1yYW5nZS1taWRkbGU9e21vZGlmaWVycy5yYW5nZV9taWRkbGV9XG5cdFx0XHRkYXRhLXJhbmdlLXN0YXJ0PXttb2RpZmllcnMucmFuZ2Vfc3RhcnR9XG5cdFx0XHRkYXRhLXNlbGVjdGVkLXNpbmdsZT17XG5cdFx0XHRcdG1vZGlmaWVycy5zZWxlY3RlZCAmJlxuXHRcdFx0XHQhbW9kaWZpZXJzLnJhbmdlX3N0YXJ0ICYmXG5cdFx0XHRcdCFtb2RpZmllcnMucmFuZ2VfZW5kICYmXG5cdFx0XHRcdCFtb2RpZmllcnMucmFuZ2VfbWlkZGxlXG5cdFx0XHR9XG5cdFx0XHRyZWY9e3JlZn1cblx0XHRcdHNpemU9XCJpY29uXCJcblx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgeyBDYWxlbmRhciwgQ2FsZW5kYXJEYXlCdXR0b24gfVxuIiwKICAgICJpbXBvcnQgKiBhcyBQb3BvdmVyUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1wb3BvdmVyJ1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gUG9wb3Zlcih7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gPFBvcG92ZXJQcmltaXRpdmUuUm9vdCBkYXRhLXNsb3Q9XCJwb3BvdmVyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBQb3BvdmVyVHJpZ2dlcih7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5UcmlnZ2VyPikge1xuXHRyZXR1cm4gPFBvcG92ZXJQcmltaXRpdmUuVHJpZ2dlciBkYXRhLXNsb3Q9XCJwb3BvdmVyLXRyaWdnZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJDb250ZW50KHtcblx0Y2xhc3NOYW1lLFxuXHRhbGlnbiA9ICdjZW50ZXInLFxuXHRzaWRlT2Zmc2V0ID0gNCxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLkNvbnRlbnQ+KSB7XG5cdHJldHVybiAoXG5cdFx0PFBvcG92ZXJQcmltaXRpdmUuUG9ydGFsPlxuXHRcdFx0PFBvcG92ZXJQcmltaXRpdmUuQ29udGVudFxuXHRcdFx0XHRhbGlnbj17YWxpZ259XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2JnLXBvcG92ZXIgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGRhdGEtW3NpZGU9Ym90dG9tXTpzbGlkZS1pbi1mcm9tLXRvcC0yIGRhdGEtW3NpZGU9bGVmdF06c2xpZGUtaW4tZnJvbS1yaWdodC0yIGRhdGEtW3NpZGU9cmlnaHRdOnNsaWRlLWluLWZyb20tbGVmdC0yIGRhdGEtW3NpZGU9dG9wXTpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yIHotNTAgdy03MiBvcmlnaW4tKC0tcmFkaXgtcG9wb3Zlci1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pIHJvdW5kZWQtbWQgYm9yZGVyIHAtNCBzaGFkb3ctbWQgb3V0bGluZS1oaWRkZW4nLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJwb3BvdmVyLWNvbnRlbnRcIlxuXHRcdFx0XHRzaWRlT2Zmc2V0PXtzaWRlT2Zmc2V0fVxuXHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHQvPlxuXHRcdDwvUG9wb3ZlclByaW1pdGl2ZS5Qb3J0YWw+XG5cdClcbn1cblxuZnVuY3Rpb24gUG9wb3ZlckFuY2hvcih7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5BbmNob3I+KSB7XG5cdHJldHVybiA8UG9wb3ZlclByaW1pdGl2ZS5BbmNob3IgZGF0YS1zbG90PVwicG9wb3Zlci1hbmNob3JcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmV4cG9ydCB7IFBvcG92ZXIsIFBvcG92ZXJUcmlnZ2VyLCBQb3BvdmVyQ29udGVudCwgUG9wb3ZlckFuY2hvciB9XG4iLAogICAgImltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIElucHV0KHsgY2xhc3NOYW1lLCB0eXBlLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnaW5wdXQnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxpbnB1dFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZpbGU6dGV4dC1mb3JlZ3JvdW5kIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBzZWxlY3Rpb246YmctcHJpbWFyeSBzZWxlY3Rpb246dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGFyazpiZy1pbnB1dC8zMCBib3JkZXItaW5wdXQgZmxleCBoLTkgdy1mdWxsIG1pbi13LTAgcm91bmRlZC1tZCBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHgtMyBweS0xIHRleHQtYmFzZSBzaGFkb3cteHMgdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZpbGU6aW5saW5lLWZsZXggZmlsZTpoLTcgZmlsZTpib3JkZXItMCBmaWxlOmJnLXRyYW5zcGFyZW50IGZpbGU6dGV4dC1zbSBmaWxlOmZvbnQtbWVkaXVtIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAgbWQ6dGV4dC1zbScsXG5cdFx0XHRcdCdmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XScsXG5cdFx0XHRcdCdhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJpbnB1dFwiXG5cdFx0XHR0eXBlPXt0eXBlfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHsgSW5wdXQgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBMYWJlbFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtbGFiZWwnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBMYWJlbCh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBMYWJlbFByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxMYWJlbFByaW1pdGl2ZS5Sb290XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1zbSBsZWFkaW5nLW5vbmUgZm9udC1tZWRpdW0gc2VsZWN0LW5vbmUgZ3JvdXAtZGF0YS1bZGlzYWJsZWQ9dHJ1ZV06cG9pbnRlci1ldmVudHMtbm9uZSBncm91cC1kYXRhLVtkaXNhYmxlZD10cnVlXTpvcGFjaXR5LTUwIHBlZXItZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIHBlZXItZGlzYWJsZWQ6b3BhY2l0eS01MCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImxhYmVsXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7IExhYmVsIH1cbiIsCiAgICAiaW1wb3J0ICogYXMgU2Nyb2xsQXJlYVByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2Nyb2xsLWFyZWEnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgU2Nyb2xsQXJlYVByb3BzXG5cdGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuUm9vdD4ge1xuXHR2aWV3UG9ydFByb3BzPzogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuVmlld3BvcnQ+XG59XG5cbmZ1bmN0aW9uIFNjcm9sbEFyZWEoe1xuXHRjbGFzc05hbWUsXG5cdGNoaWxkcmVuLFxuXHR2aWV3UG9ydFByb3BzLFxuXHQuLi5wcm9wc1xufTogU2Nyb2xsQXJlYVByb3BzKSB7XG5cdHJldHVybiAoXG5cdFx0PFNjcm9sbEFyZWFQcmltaXRpdmUuUm9vdFxuXHRcdFx0Y2xhc3NOYW1lPXtjbigncmVsYXRpdmUnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2Nyb2xsLWFyZWFcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLlZpZXdwb3J0XG5cdFx0XHRcdHsuLi52aWV3UG9ydFByb3BzfVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBzaXplLWZ1bGwgcm91bmRlZC1baW5oZXJpdF0gdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMScsXG5cdFx0XHRcdFx0dmlld1BvcnRQcm9wcz8uY2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhLXZpZXdwb3J0XCJcblx0XHRcdD5cblx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0PC9TY3JvbGxBcmVhUHJpbWl0aXZlLlZpZXdwb3J0PlxuXHRcdFx0PFNjcm9sbEJhciAvPlxuXHRcdFx0PFNjcm9sbEFyZWFQcmltaXRpdmUuQ29ybmVyIC8+XG5cdFx0PC9TY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3Q+XG5cdClcbn1cblxuZnVuY3Rpb24gU2Nyb2xsQmFyKHtcblx0Y2xhc3NOYW1lLFxuXHRvcmllbnRhdGlvbiA9ICd2ZXJ0aWNhbCcsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLlNjcm9sbEFyZWFTY3JvbGxiYXJcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IHRvdWNoLW5vbmUgcC1weCB0cmFuc2l0aW9uLWNvbG9ycyBzZWxlY3Qtbm9uZScsXG5cdFx0XHRcdG9yaWVudGF0aW9uID09PSAndmVydGljYWwnICYmXG5cdFx0XHRcdFx0J2gtZnVsbCB3LTIuNSBib3JkZXItbCBib3JkZXItbC10cmFuc3BhcmVudCcsXG5cdFx0XHRcdG9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcgJiZcblx0XHRcdFx0XHQnaC0yLjUgZmxleC1jb2wgYm9yZGVyLXQgYm9yZGVyLXQtdHJhbnNwYXJlbnQnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS1zY3JvbGxiYXJcIlxuXHRcdFx0b3JpZW50YXRpb249e29yaWVudGF0aW9ufVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLlNjcm9sbEFyZWFUaHVtYlxuXHRcdFx0XHRjbGFzc05hbWU9XCJiZy1ib3JkZXIgcmVsYXRpdmUgZmxleC0xIHJvdW5kZWQtZnVsbFwiXG5cdFx0XHRcdGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhLXRodW1iXCJcblx0XHRcdC8+XG5cdFx0PC9TY3JvbGxBcmVhUHJpbWl0aXZlLlNjcm9sbEFyZWFTY3JvbGxiYXI+XG5cdClcbn1cblxuZXhwb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH1cbiIsCiAgICAiaW1wb3J0IHsgQ2xvY2sgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9pbnB1dCdcbmltcG9ydCB7XG5cdFBvcG92ZXIsXG5cdFBvcG92ZXJDb250ZW50LFxuXHRQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3BvcG92ZXInXG5pbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgdXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlciB9IGZyb20gJ0AvaG9va3MvdXNlLWF1dG9jb21wbGV0ZS10aW1lcGlja2VyJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB0eXBlIHsgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5cbmNvbnN0IGhhbmRsZVdoZWVsID0gKGU6IFJlYWN0LldoZWVsRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG5cdC8vIFByZXZlbnQgZXZlbnQgZnJvbSBidWJibGluZyB0byBwcmV2ZW50IFBvcG92ZXIgZnJvbSBjbG9zaW5nXG5cdGUuc3RvcFByb3BhZ2F0aW9uKClcbn1cblxuaW50ZXJmYWNlIFRpbWVQaWNrZXJQcm9wcyB7XG5cdHZhbHVlOiBzdHJpbmdcblx0b25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG5cdG1pblRpbWU/OiBzdHJpbmdcblx0bWF4VGltZT86IHN0cmluZ1xuXHR0aW1lRm9ybWF0PzogVGltZUZvcm1hdFxuXHRwbGFjZWhvbGRlcj86IHN0cmluZ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0ZGlzYWJsZWQ/OiBib29sZWFuXG5cdG5hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRpbWVQaWNrZXIoe1xuXHR2YWx1ZSxcblx0b25DaGFuZ2UsXG5cdG1pblRpbWUgPSAnMDA6MDAnLFxuXHRtYXhUaW1lID0gJzIzOjQ1Jyxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0cGxhY2Vob2xkZXIgPSAnU2VsZWN0IHRpbWUuLi4nLFxuXHRjbGFzc05hbWUsXG5cdGRpc2FibGVkID0gZmFsc2UsXG5cdG5hbWUsXG59OiBUaW1lUGlja2VyUHJvcHMpIHtcblx0Y29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cdGNvbnN0IFtzZWFyY2gsIHNldFNlYXJjaF0gPSB1c2VTdGF0ZSgnJylcblx0Y29uc3QgaW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbClcblx0Y29uc3QgdHJpZ2dlclJlZiA9IHVzZVJlZjxIVE1MQnV0dG9uRWxlbWVudD4obnVsbClcblx0Y29uc3QgW3RyaWdnZXJXaWR0aCwgc2V0VHJpZ2dlcldpZHRoXSA9IHVzZVN0YXRlPG51bWJlcj4oMClcblxuXHRjb25zdCB7IHRpbWVPcHRpb25zLCBmb3JtYXRUaW1lIH0gPSB1c2VBdXRvY29tcGxldGVUaW1lcGlja2VyKHtcblx0XHR0aW1lRm9ybWF0LFxuXHRcdG1pblRpbWUsXG5cdFx0bWF4VGltZSxcblx0fSlcblxuXHQvLyBGaWx0ZXIgdGltZSBvcHRpb25zIGJhc2VkIG9uIHNlYXJjaFxuXHRjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSB0aW1lT3B0aW9ucy5maWx0ZXIoKHRpbWUpID0+IHtcblx0XHRjb25zdCBmb3JtYXR0ZWRUaW1lID0gZm9ybWF0VGltZSh0aW1lKVxuXHRcdHJldHVybiBmb3JtYXR0ZWRUaW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoLnRvTG93ZXJDYXNlKCkpXG5cdH0pXG5cblx0Y29uc3QgaGFuZGxlU2VsZWN0ID0gKHRpbWU6IHN0cmluZykgPT4ge1xuXHRcdG9uQ2hhbmdlKHRpbWUpXG5cdFx0c2V0T3BlbihmYWxzZSlcblx0XHRzZXRTZWFyY2goJycpXG5cdH1cblxuXHQvLyBNZWFzdXJlIHRyaWdnZXIgd2lkdGggYW5kIGZvY3VzIGlucHV0IHdoZW4gcG9wb3ZlciBvcGVuc1xuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChvcGVuKSB7XG5cdFx0XHRpZiAodHJpZ2dlclJlZi5jdXJyZW50KSB7XG5cdFx0XHRcdHNldFRyaWdnZXJXaWR0aCh0cmlnZ2VyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGgpXG5cdFx0XHR9XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0aW5wdXRSZWYuY3VycmVudD8uZm9jdXMoKVxuXHRcdFx0fSwgMClcblx0XHR9XG5cdH0sIFtvcGVuXSlcblxuXHRjb25zdCBjdXJyZW50VGltZVN0cmluZyA9IHZhbHVlID8gZm9ybWF0VGltZSh2YWx1ZSkgOiBwbGFjZWhvbGRlclxuXG5cdHJldHVybiAoXG5cdFx0PFBvcG92ZXIgb25PcGVuQ2hhbmdlPXtzZXRPcGVufSBvcGVuPXtvcGVufT5cblx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0YXJpYS1jb250cm9scz1cInRpbWUtcGlja2VyLWxpc3Rib3hcIlxuXHRcdFx0XHRcdGFyaWEtZXhwYW5kZWQ9e29wZW59XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbigndy1mdWxsIGp1c3RpZnktc3RhcnQnLCBjbGFzc05hbWUpfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgdGltZS1waWNrZXItJHtuYW1lfWB9XG5cdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkfVxuXHRcdFx0XHRcdHJlZj17dHJpZ2dlclJlZn1cblx0XHRcdFx0XHRyb2xlPVwiY29tYm9ib3hcIlxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxDbG9jayBjbGFzc05hbWU9XCJtci0yIGgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdHtjdXJyZW50VGltZVN0cmluZ31cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0PFBvcG92ZXJDb250ZW50XG5cdFx0XHRcdGFsaWduPVwic3RhcnRcIlxuXHRcdFx0XHRjbGFzc05hbWU9XCJwLTBcIlxuXHRcdFx0XHRzdHlsZT17eyB3aWR0aDogdHJpZ2dlcldpZHRoIH19XG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicC0yIGJvcmRlci1iXCI+XG5cdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLThcIlxuXHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhlKSA9PiBzZXRTZWFyY2goZS50YXJnZXQudmFsdWUpfVxuXHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9XCJTZWFyY2ggdGltZS4uLlwiXG5cdFx0XHRcdFx0XHRyZWY9e2lucHV0UmVmfVxuXHRcdFx0XHRcdFx0dmFsdWU9e3NlYXJjaH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PFNjcm9sbEFyZWEgY2xhc3NOYW1lPVwiaC1bMjAwcHhdXCIgb25XaGVlbD17aGFuZGxlV2hlZWx9PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicC0xXCI+XG5cdFx0XHRcdFx0XHR7ZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMCA/IChcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJweS02IHRleHQtY2VudGVyIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0Ti9BXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdFx0ZmlsdGVyZWRPcHRpb25zLm1hcCgodGltZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHRpbWVTdHJpbmcgPSBmb3JtYXRUaW1lKHRpbWUpXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgaXNTZWxlY3RlZCA9IHRpbWUgPT09IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdDxidXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQncmVsYXRpdmUgZmxleCB3LWZ1bGwgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgaXRlbXMtY2VudGVyIHJvdW5kZWQtc20gcHgtMiBweS0xLjUgdGV4dC1zbSBvdXRsaW5lLW5vbmUgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlzU2VsZWN0ZWQgJiYgJ2JnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e3RpbWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdCh0aW1lKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0aW1lU3RyaW5nfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9TY3JvbGxBcmVhPlxuXHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHQ8L1BvcG92ZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBUaW1lRm9ybWF0IH0gZnJvbSAnQC90eXBlcydcblxuaW50ZXJmYWNlIFVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXJQcm9wcyB7XG5cdHRpbWVGb3JtYXQ/OiBUaW1lRm9ybWF0XG5cdG1pblRpbWU/OiBzdHJpbmdcblx0bWF4VGltZT86IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlcih7XG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdG1pblRpbWUgPSAnMDA6MDAnLFxuXHRtYXhUaW1lID0gJzIzOjQ1Jyxcbn06IFVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXJQcm9wcykge1xuXHQvLyBHZW5lcmF0ZSB0aW1lIG9wdGlvbnMgKDE1LW1pbnV0ZSBpbnRlcnZhbHMpIHdpdGhpbiBtaW4vbWF4IHJhbmdlXG5cdGNvbnN0IHRpbWVPcHRpb25zID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0Y29uc3QgdGltZXM6IHN0cmluZ1tdID0gW11cblx0XHRjb25zdCBbbWluSG91ciwgbWluTWludXRlXSA9IG1pblRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRcdGNvbnN0IFttYXhIb3VyLCBtYXhNaW51dGVdID0gbWF4VGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cblx0XHRjb25zdCBtaW5Ub3RhbE1pbnV0ZXMgPSBtaW5Ib3VyICogNjAgKyBtaW5NaW51dGVcblx0XHRjb25zdCBtYXhUb3RhbE1pbnV0ZXMgPSBtYXhIb3VyICogNjAgKyBtYXhNaW51dGVcblxuXHRcdGZvciAoXG5cdFx0XHRsZXQgdG90YWxNaW51dGVzID0gbWluVG90YWxNaW51dGVzO1xuXHRcdFx0dG90YWxNaW51dGVzIDw9IG1heFRvdGFsTWludXRlcztcblx0XHRcdHRvdGFsTWludXRlcyArPSAxNVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHRvdGFsTWludXRlcyAvIDYwKVxuXHRcdFx0Y29uc3QgbWludXRlcyA9IHRvdGFsTWludXRlcyAlIDYwXG5cblx0XHRcdGNvbnN0IHRpbWVTdHJpbmcgPSBgJHtob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7bWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YFxuXHRcdFx0dGltZXMucHVzaCh0aW1lU3RyaW5nKVxuXHRcdH1cblxuXHRcdHJldHVybiB0aW1lc1xuXHR9LCBbbWluVGltZSwgbWF4VGltZV0pXG5cblx0Y29uc3QgZm9ybWF0VGltZSA9ICh0aW1lOiBzdHJpbmcpID0+IHtcblx0XHRjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cdFx0Y29uc3QgcGVyaW9kID0gaG91cnMgPj0gMTIgPyAnUE0nIDogJ0FNJ1xuXHRcdGNvbnN0IGRpc3BsYXlIb3VycyA9IGhvdXJzID09PSAwID8gMTIgOiBob3VycyA+IDEyID8gaG91cnMgLSAxMiA6IGhvdXJzXG5cblx0XHRpZiAodGltZUZvcm1hdCA9PT0gJzI0LWhvdXInKSB7XG5cdFx0XHRyZXR1cm4gYCR7aG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWBcblx0XHR9XG5cblx0XHRyZXR1cm4gYCR7ZGlzcGxheUhvdXJzfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfSAke3BlcmlvZH1gXG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdHRpbWVPcHRpb25zLFxuXHRcdGZvcm1hdFRpbWUsXG5cdH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBXZWVrRGF5cyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5jb25zdCBEQVlfVE9fTlVNQkVSOiBSZWNvcmQ8V2Vla0RheXMsIG51bWJlcj4gPSB7XG5cdHN1bmRheTogMCxcblx0bW9uZGF5OiAxLFxuXHR0dWVzZGF5OiAyLFxuXHR3ZWRuZXNkYXk6IDMsXG5cdHRodXJzZGF5OiA0LFxuXHRmcmlkYXk6IDUsXG5cdHNhdHVyZGF5OiA2LFxufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBhcHByb3ByaWF0ZSBidXNpbmVzcyBob3VycyBjb25maWd1cmF0aW9uIGZvciBhIGdpdmVuIGRhdGUuXG4gKiBJZiBidXNpbmVzc0hvdXJzIGlzIGFuIGFycmF5LCBmaW5kcyB0aGUgZmlyc3QgY29uZmlnIHRoYXQgaW5jbHVkZXMgdGhlIGRhdGUncyBkYXkgb2Ygd2Vlay5cbiAqIElmIGJ1c2luZXNzSG91cnMgaXMgYSBzaW5nbGUgb2JqZWN0LCByZXR1cm5zIGl0IGFzLWlzLlxuICpcbiAqIEBwYXJhbSBkYXRlIFRoZSBkYXRlIHRvIGZpbmQgYnVzaW5lc3MgaG91cnMgZm9yXG4gKiBAcGFyYW0gYnVzaW5lc3NIb3VycyBUaGUgYnVzaW5lc3MgaG91cnMgY29uZmlndXJhdGlvbiAoc2luZ2xlIG9yIGFycmF5KVxuICogQHJldHVybnMgVGhlIG1hdGNoaW5nIEJ1c2luZXNzSG91cnMgY29uZmlnIG9yIHVuZGVmaW5lZCBpZiBubyBtYXRjaCBmb3VuZFxuICovXG5leHBvcnQgY29uc3QgZ2V0QnVzaW5lc3NIb3Vyc0ZvckRhdGUgPSAoXG5cdGRhdGU6IGRheWpzLkRheWpzLFxuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuKTogQnVzaW5lc3NIb3VycyB8IHVuZGVmaW5lZCA9PiB7XG5cdGlmICghYnVzaW5lc3NIb3Vycykge1xuXHRcdHJldHVybiB1bmRlZmluZWRcblx0fVxuXG5cdC8vIElmIHNpbmdsZSBvYmplY3QsIHJldHVybiBpdFxuXHRpZiAoIUFycmF5LmlzQXJyYXkoYnVzaW5lc3NIb3VycykpIHtcblx0XHRyZXR1cm4gYnVzaW5lc3NIb3Vyc1xuXHR9XG5cblx0Ly8gSWYgYXJyYXksIGZpbmQgdGhlIGNvbmZpZyB0aGF0IGFwcGxpZXMgdG8gdGhpcyBkYXlcblx0Y29uc3QgZGF5T2ZXZWVrID0gZGF0ZS5kYXkoKVxuXHRyZXR1cm4gYnVzaW5lc3NIb3Vycy5maW5kKChjb25maWcpID0+IHtcblx0XHRpZiAoIWNvbmZpZy5kYXlzT2ZXZWVrKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHR9XG5cdFx0cmV0dXJuIGNvbmZpZy5kYXlzT2ZXZWVrLnNvbWUoKGQpID0+IERBWV9UT19OVU1CRVJbZF0gPT09IGRheU9mV2Vlaylcblx0fSlcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBzcGVjaWZpYyBkYXRlIGlzIGEgYnVzaW5lc3MgZGF5LlxuICpcbiAqIEBwYXJhbSBkYXRlIFRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0gYnVzaW5lc3NIb3VycyBUaGUgYnVzaW5lc3MgaG91cnMgY29uZmlndXJhdGlvbiAoc2luZ2xlIG9yIGFycmF5KVxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgZGF0ZSBpcyBhIGJ1c2luZXNzIGRheSwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0J1c2luZXNzRGF5ID0gKFxuXHRkYXRlOiBkYXlqcy5EYXlqcyxcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbik6IGJvb2xlYW4gPT4ge1xuXHRpZiAoIWJ1c2luZXNzSG91cnMpIHtcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cblx0Y29uc3QgY29uZmlnID0gZ2V0QnVzaW5lc3NIb3Vyc0ZvckRhdGUoZGF0ZSwgYnVzaW5lc3NIb3Vycylcblx0aWYgKCFjb25maWcpIHtcblx0XHRyZXR1cm4gZmFsc2Vcblx0fVxuXG5cdC8vIENoZWNrIGRheSBvZiB3ZWVrXG5cdGlmIChjb25maWcuZGF5c09mV2Vlaykge1xuXHRcdHJldHVybiBjb25maWcuZGF5c09mV2Vlay5zb21lKChkKSA9PiBEQVlfVE9fTlVNQkVSW2RdID09PSBkYXRlLmRheSgpKVxuXHR9XG5cblx0cmV0dXJuIHRydWVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJc0J1c2luZXNzSG91ck9wdGlvbnMge1xuXHRkYXRlOiBkYXlqcy5EYXlqc1xuXHRob3VyPzogbnVtYmVyXG5cdG1pbnV0ZT86IG51bWJlclxuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHNwZWNpZmljIGhvdXIgb24gYSBzcGVjaWZpYyBkYXRlIGlzIHdpdGhpbiBidXNpbmVzcyBob3Vycy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3IgY2hlY2tpbmcgYnVzaW5lc3MgaG91cnNcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHRpbWUgaXMgd2l0aGluIGJ1c2luZXNzIGhvdXJzLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQnVzaW5lc3NIb3VyID0gKHtcblx0ZGF0ZSxcblx0aG91cixcblx0bWludXRlID0gMCxcblx0YnVzaW5lc3NIb3Vycyxcbn06IElzQnVzaW5lc3NIb3VyT3B0aW9ucyk6IGJvb2xlYW4gPT4ge1xuXHQvLyBGaXJzdCBjaGVjayBpZiBpdCdzIGEgYnVzaW5lc3MgZGF5XG5cdGlmICghaXNCdXNpbmVzc0RheShkYXRlLCBidXNpbmVzc0hvdXJzKSkge1xuXHRcdHJldHVybiBmYWxzZVxuXHR9XG5cblx0Ly8gSWYgYnVzaW5lc3MgaG91cnMgYXJlIG5vdCBjb25maWd1cmVkLCBjb25zaWRlciBldmVyeXRoaW5nIGFzIFwiYnVzaW5lc3MgaG91cnNcIlxuXHRpZiAoIWJ1c2luZXNzSG91cnMpIHtcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cblx0Ly8gSWYgaG91ciBpcyBub3QgcHJvdmlkZWQsIHdlIGFzc3VtZSB0aGUgdXNlciBvbmx5IGNhcmVzIGFib3V0IHRoZSBkYXlcblx0Ly8gU2luY2Ugd2UgYWxyZWFkeSBwYXNzZWQgaXNCdXNpbmVzc0RheSBjaGVjaywgd2UgcmV0dXJuIHRydWVcblx0aWYgKGhvdXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB0cnVlXG5cdH1cblxuXHRjb25zdCBjb25maWcgPSBnZXRCdXNpbmVzc0hvdXJzRm9yRGF0ZShkYXRlLCBidXNpbmVzc0hvdXJzKVxuXHRpZiAoIWNvbmZpZykge1xuXHRcdHJldHVybiBmYWxzZVxuXHR9XG5cblx0Ly8gQ2hlY2sgdGltZVxuXHQvLyBzdGFydFRpbWUgYW5kIGVuZFRpbWUgYXJlIG51bWJlcnMgKDAtMjQpXG5cdC8vIFdlIHRyZWF0IHRoZW0gYXMgZXhhY3QgaG91cnMuIGUuZy4gOSBtZWFucyAwOTowMC5cblx0Y29uc3Qgc3RhcnRIID0gY29uZmlnLnN0YXJ0VGltZSA/PyA5XG5cdGNvbnN0IGVuZEggPSBjb25maWcuZW5kVGltZSA/PyAxN1xuXG5cdGNvbnN0IGN1cnJlbnRNaW51dGVzID0gaG91ciAqIDYwICsgbWludXRlXG5cdGNvbnN0IHN0YXJ0TWludXRlcyA9IHN0YXJ0SCAqIDYwXG5cdGNvbnN0IGVuZE1pbnV0ZXMgPSBlbmRIICogNjBcblxuXHRpZiAoY3VycmVudE1pbnV0ZXMgPCBzdGFydE1pbnV0ZXMgfHwgY3VycmVudE1pbnV0ZXMgPj0gZW5kTWludXRlcykge1xuXHRcdHJldHVybiBmYWxzZVxuXHR9XG5cblx0cmV0dXJuIHRydWVcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHtcblx0Z2V0QnVzaW5lc3NIb3Vyc0ZvckRhdGUsXG5cdGlzQnVzaW5lc3NEYXksXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmV4cG9ydCBjb25zdCBidWlsZERhdGVUaW1lID0gKFxuXHRkYXRlOiBEYXRlLFxuXHR0aW1lOiBzdHJpbmcsXG5cdGlzQWxsRGF5OiBib29sZWFuXG4pOiBkYXlqcy5EYXlqcyA9PiB7XG5cdGNvbnN0IFtob3VycywgbWludXRlc10gPSB0aW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblx0Y29uc3QgYmFzZSA9IGRheWpzKGRhdGUpLmhvdXIoaG91cnMpLm1pbnV0ZShtaW51dGVzKVxuXHRyZXR1cm4gaXNBbGxEYXkgPyBiYXNlLmhvdXIoMCkubWludXRlKDApIDogYmFzZVxufVxuXG5leHBvcnQgY29uc3QgYnVpbGRFbmREYXRlVGltZSA9IChcblx0ZGF0ZTogRGF0ZSxcblx0dGltZTogc3RyaW5nLFxuXHRpc0FsbERheTogYm9vbGVhblxuKTogZGF5anMuRGF5anMgPT4ge1xuXHRjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cdGNvbnN0IGJhc2UgPSBkYXlqcyhkYXRlKS5ob3VyKGhvdXJzKS5taW51dGUobWludXRlcylcblx0cmV0dXJuIGlzQWxsRGF5ID8gYmFzZS5ob3VyKDIzKS5taW51dGUoNTkpIDogYmFzZVxufVxuXG5leHBvcnQgY29uc3QgZ2V0VGltZUNvbnN0cmFpbnRzID0gKFxuXHRkYXRlOiBEYXRlLFxuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuKSA9PiB7XG5cdGlmICghYnVzaW5lc3NIb3VycykgcmV0dXJuIHsgbWluOiAnMDA6MDAnLCBtYXg6ICcyMzo1OScgfVxuXG5cdGNvbnN0IGRheWpzRGF0ZSA9IGRheWpzKGRhdGUpXG5cdGlmICghaXNCdXNpbmVzc0RheShkYXlqc0RhdGUsIGJ1c2luZXNzSG91cnMpKSB7XG5cdFx0cmV0dXJuIHsgbWluOiAnMDA6MDAnLCBtYXg6ICcyMzo1OScgfVxuXHR9XG5cblx0Y29uc3QgY29uZmlnID0gZ2V0QnVzaW5lc3NIb3Vyc0ZvckRhdGUoZGF5anNEYXRlLCBidXNpbmVzc0hvdXJzKVxuXHRpZiAoIWNvbmZpZykgcmV0dXJuIHsgbWluOiAnMDA6MDAnLCBtYXg6ICcyMzo1OScgfVxuXG5cdHJldHVybiB7XG5cdFx0bWluOiBgJHsoY29uZmlnLnN0YXJ0VGltZSA/PyA5KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OjAwYCxcblx0XHRtYXg6IGAkeygoY29uZmlnLmVuZFRpbWUgPz8gMTcpIC0gMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfTo0NWAsXG5cdH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBXZWVrZGF5IH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHsgQ2FyZCwgQ2FyZENvbnRlbnQsIENhcmRIZWFkZXIsIENhcmRUaXRsZSB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9jYXJkJ1xuaW1wb3J0IHsgQ2hlY2tib3ggfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2hlY2tib3gnXG5pbXBvcnQgeyBEYXRlUGlja2VyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyJ1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvaW5wdXQnXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9sYWJlbCdcbmltcG9ydCB7XG5cdFNlbGVjdCxcblx0U2VsZWN0Q29udGVudCxcblx0U2VsZWN0SXRlbSxcblx0U2VsZWN0VHJpZ2dlcixcblx0U2VsZWN0VmFsdWUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9zZWxlY3QnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuY29uc3QgRlJFUV9NQVAgPSB7XG5cdERBSUxZOiBSUnVsZS5EQUlMWSxcblx0V0VFS0xZOiBSUnVsZS5XRUVLTFksXG5cdE1PTlRITFk6IFJSdWxlLk1PTlRITFksXG5cdFlFQVJMWTogUlJ1bGUuWUVBUkxZLFxufSBhcyBjb25zdFxuY29uc3QgRlJFUV9UT19TVFIgPSBPYmplY3QuZnJvbUVudHJpZXMoXG5cdE9iamVjdC5lbnRyaWVzKEZSRVFfTUFQKS5tYXAoKFtrLCB2XSkgPT4gW3YsIGtdKVxuKSBhcyBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+XG5jb25zdCBXRUVLREFZUyA9IFtcblx0UlJ1bGUuU1UsXG5cdFJSdWxlLk1PLFxuXHRSUnVsZS5UVSxcblx0UlJ1bGUuV0UsXG5cdFJSdWxlLlRILFxuXHRSUnVsZS5GUixcblx0UlJ1bGUuU0EsXG5dXG5jb25zdCBEQVlfS0VZUyA9IFsnc3VuJywgJ21vbicsICd0dWUnLCAnd2VkJywgJ3RodScsICdmcmknLCAnc2F0J11cbmNvbnN0IHBhcnNlTnVtID0gKHY6IHN0cmluZykgPT4gTWF0aC5tYXgoMSwgTnVtYmVyLnBhcnNlSW50KHYsIDEwKSB8fCAxKVxuXG5jb25zdCBnZXREZXNjcmlwdGlvbiA9IChcblx0b3B0czogUlJ1bGVPcHRpb25zIHwgbnVsbCxcblx0dDogKGs6IHN0cmluZykgPT4gc3RyaW5nXG4pID0+IHtcblx0aWYgKCFvcHRzKSB7XG5cdFx0cmV0dXJuIHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuXHR9XG5cdHRyeSB7XG5cdFx0Y29uc3QgdGV4dCA9IG5ldyBSUnVsZShvcHRzKS50b1RleHQoKVxuXHRcdHJldHVybiB0ZXh0ICYmICF0ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Vycm9yJylcblx0XHRcdD8gdGV4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRleHQuc2xpY2UoMSlcblx0XHRcdDogdCgnY3VzdG9tUmVjdXJyZW5jZScpXG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiB0KCdjdXN0b21SZWN1cnJlbmNlJylcblx0fVxufVxuXG5pbnRlcmZhY2UgUHJvcHMge1xuXHR2YWx1ZT86IFJSdWxlT3B0aW9ucyB8IG51bGxcblx0b25DaGFuZ2U6ICh2OiBSUnVsZU9wdGlvbnMgfCBudWxsKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBjb25zdCBSZWN1cnJlbmNlRWRpdG9yOiBSZWFjdC5GQzxQcm9wcz4gPSAoeyB2YWx1ZSwgb25DaGFuZ2UgfSkgPT4ge1xuXHRjb25zdCB7IHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjdHgpID0+ICh7IHQ6IGN0eC50IH0pKVxuXHRjb25zdCBbc2hvdywgc2V0U2hvd10gPSB1c2VTdGF0ZSghIXZhbHVlKVxuXHRjb25zdCBbb3B0cywgc2V0T3B0c10gPSB1c2VTdGF0ZTxSUnVsZU9wdGlvbnMgfCBudWxsPigoKSA9PiB2YWx1ZSB8fCBudWxsKVxuXG5cdGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBEQVlfS0VZUy5tYXAoKGssIGkpID0+ICh7IHZhbHVlOiBXRUVLREFZU1tpXSwgbGFiZWw6IHQoaykgfSkpLFxuXHRcdFt0XVxuXHQpXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRzZXRTaG93KCEhdmFsdWUpXG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRzZXRPcHRzKHZhbHVlKVxuXHRcdH1cblx0fSwgW3ZhbHVlXSlcblxuXHRjb25zdCB1cGRhdGUgPSAodTogUGFydGlhbDxSUnVsZU9wdGlvbnM+KSA9PiB7XG5cdFx0aWYgKCFvcHRzKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0Y29uc3QgbmV4dCA9IHsgLi4ub3B0cywgLi4udSB9XG5cdFx0c2V0T3B0cyhuZXh0KVxuXHRcdG9uQ2hhbmdlKHNob3cgPyBuZXh0IDogbnVsbClcblx0fVxuXG5cdGNvbnN0IHRvZ2dsZSA9IChjaGVja2VkOiBib29sZWFuKSA9PiB7XG5cdFx0c2V0U2hvdyhjaGVja2VkKVxuXHRcdGlmICghY2hlY2tlZCkge1xuXHRcdFx0b25DaGFuZ2UobnVsbClcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRpZiAob3B0cykge1xuXHRcdFx0b25DaGFuZ2Uob3B0cylcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRjb25zdCBkZWYgPSB7IGZyZXE6IFJSdWxlLkRBSUxZLCBpbnRlcnZhbDogMSB9IGFzIFJSdWxlT3B0aW9uc1xuXHRcdHNldE9wdHMoZGVmKVxuXHRcdG9uQ2hhbmdlKGRlZilcblx0fVxuXG5cdGNvbnN0IHRvZ2dsZURheSA9IChpOiBudW1iZXIpID0+IHtcblx0XHRjb25zdCBjdXJyID0gKG9wdHM/LmJ5d2Vla2RheSBhcyBXZWVrZGF5W10pIHx8IFtdXG5cdFx0Y29uc3QgZGF5ID0gV0VFS0RBWVNbaV1cblx0XHRjb25zdCBuZXh0ID0gY3Vyci5pbmNsdWRlcyhkYXkpXG5cdFx0XHQ/IGN1cnIuZmlsdGVyKChkKSA9PiBkICE9PSBkYXkpXG5cdFx0XHQ6IFsuLi5jdXJyLCBkYXldXG5cdFx0dXBkYXRlKHsgYnl3ZWVrZGF5OiBuZXh0Lmxlbmd0aCA/IG5leHQgOiB1bmRlZmluZWQgfSlcblx0fVxuXG5cdGNvbnN0IHNldEVuZFR5cGUgPSAodHlwZTogJ25ldmVyJyB8ICdjb3VudCcgfCAndW50aWwnKSA9PiB7XG5cdFx0Y29uc3QgdTogUGFydGlhbDxSUnVsZU9wdGlvbnM+ID0geyBjb3VudDogdW5kZWZpbmVkLCB1bnRpbDogdW5kZWZpbmVkIH1cblx0XHRpZiAodHlwZSA9PT0gJ2NvdW50Jykge1xuXHRcdFx0dS5jb3VudCA9IG9wdHM/LmNvdW50IHx8IDFcblx0XHR9XG5cdFx0aWYgKHR5cGUgPT09ICd1bnRpbCcpIHtcblx0XHRcdHUudW50aWwgPSBvcHRzPy51bnRpbCB8fCBkYXlqcygpLmFkZCgxLCAnbW9udGgnKS5lbmRPZignZGF5JykudG9EYXRlKClcblx0XHR9XG5cdFx0dXBkYXRlKHUpXG5cdH1cblxuXHRjb25zdCBlbmRUeXBlID0gb3B0cz8udW50aWwgPyAndW50aWwnIDogb3B0cz8uY291bnQgPyAnY291bnQnIDogJ25ldmVyJ1xuXHRjb25zdCBmcmVxID0gRlJFUV9UT19TVFJbb3B0cz8uZnJlcSA/PyBSUnVsZS5EQUlMWV0gfHwgJ0RBSUxZJ1xuXHRjb25zdCBieXdlZWtkYXkgPSBBcnJheS5pc0FycmF5KG9wdHM/LmJ5d2Vla2RheSlcblx0XHQ/IG9wdHMuYnl3ZWVrZGF5XG5cdFx0OiBvcHRzPy5ieXdlZWtkYXlcblx0XHRcdD8gW29wdHMuYnl3ZWVrZGF5XVxuXHRcdFx0OiBbXVxuXG5cdHJldHVybiAoXG5cdFx0PENhcmQgZGF0YS10ZXN0aWQ9XCJyZWN1cnJlbmNlLWVkaXRvclwiPlxuXHRcdFx0PENhcmRIZWFkZXIgY2xhc3NOYW1lPVwicGItM1wiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0Y2hlY2tlZD17c2hvd31cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwidG9nZ2xlLXJlY3VycmVuY2VcIlxuXHRcdFx0XHRcdFx0aWQ9XCJyZWN1cnJpbmdcIlxuXHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXt0b2dnbGV9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8Q2FyZFRpdGxlIGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVwZWF0Jyl9PC9DYXJkVGl0bGU+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHR7c2hvdyAmJiB2YWx1ZSAmJiAoXG5cdFx0XHRcdFx0PHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdHtnZXREZXNjcmlwdGlvbih2YWx1ZSwgdCl9XG5cdFx0XHRcdFx0PC9wPlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9DYXJkSGVhZGVyPlxuXG5cdFx0XHR7c2hvdyAmJiAoXG5cdFx0XHRcdDxDYXJkQ29udGVudCBjbGFzc05hbWU9XCJwdC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTRcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCIgaHRtbEZvcj1cImZyZXF1ZW5jeVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e3QoJ3JlcGVhdHMnKX1cblx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxTZWxlY3Rcblx0XHRcdFx0XHRcdFx0XHRcdG9uVmFsdWVDaGFuZ2U9eyhmKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGUoeyBmcmVxOiBGUkVRX01BUFtmIGFzIGtleW9mIHR5cGVvZiBGUkVRX01BUF0gfSlcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtmcmVxfVxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RUcmlnZ2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiZnJlcXVlbmN5LXNlbGVjdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiZnJlcXVlbmN5XCJcblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PFNlbGVjdFZhbHVlIC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdFRyaWdnZXI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0Q29udGVudD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e09iamVjdC5rZXlzKEZSRVFfTUFQKS5tYXAoKGYpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0SXRlbSBrZXk9e2Z9IHZhbHVlPXtmfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt0KGYudG9Mb3dlckNhc2UoKSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9TZWxlY3RJdGVtPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0Q29udGVudD5cblx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdD5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwiaW50ZXJ2YWxcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHt0KCdldmVyeScpfVxuXHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLThcIlxuXHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnRlcnZhbFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRtaW49XCIxXCJcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZSkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlKHsgaW50ZXJ2YWw6IHBhcnNlTnVtKGUudGFyZ2V0LnZhbHVlKSB9KVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cIm51bWJlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17b3B0cz8uaW50ZXJ2YWwgfHwgMX1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHR7b3B0cz8uZnJlcSA9PT0gUlJ1bGUuV0VFS0xZICYmIChcblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdyZXBlYXRPbicpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMSBtdC0xXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7d2Vla0RheXMubWFwKChkLCBpKSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0xXCIga2V5PXtkLmxhYmVsfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2J5d2Vla2RheS5pbmNsdWRlcyhkLnZhbHVlKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPXtgZGF5LSR7aX1gfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoKSA9PiB0b2dnbGVEYXkoaSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInRleHQteHMgY3Vyc29yLXBvaW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aHRtbEZvcj17YGRheS0ke2l9YH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ZC5sYWJlbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdCl9XG5cblx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ2VuZHMnKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMiBtdC0xXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjaGVja2VkPXtlbmRUeXBlID09PSAnbmV2ZXInfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cIm5ldmVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoKSA9PiBzZXRFbmRUeXBlKCduZXZlcicpfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCIgaHRtbEZvcj1cIm5ldmVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0KCduZXZlcicpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2VuZFR5cGUgPT09ICdjb3VudCd9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiYWZ0ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eygpID0+IHNldEVuZFR5cGUoJ2NvdW50Jyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwiYWZ0ZXJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ2FmdGVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0e2VuZFR5cGUgPT09ICdjb3VudCcgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLTYgdy0xNiB0ZXh0LXhzXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImNvdW50LWlucHV0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaW49XCIxXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17KGUpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGUoeyBjb3VudDogcGFyc2VOdW0oZS50YXJnZXQudmFsdWUpIH0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJudW1iZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtvcHRzPy5jb3VudCB8fCAxfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHNcIj57dCgnb2NjdXJyZW5jZXMnKX08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjaGVja2VkPXtlbmRUeXBlID09PSAndW50aWwnfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cIm9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoKSA9PiBzZXRFbmRUeXBlKCd1bnRpbCcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCIgaHRtbEZvcj1cIm9uXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0KCdvbicpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdHtlbmRUeXBlID09PSAndW50aWwnICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PERhdGVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLTZcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGU9e29wdHM/LnVudGlsfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZCkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVudGlsOiBkID8gZGF5anMoZCkuZW5kT2YoJ2RheScpLnRvRGF0ZSgpIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0NhcmRDb250ZW50PlxuXHRcdFx0KX1cblx0XHQ8L0NhcmQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gQ2FyZCh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J3RleHQtY2FyZC1mb3JlZ3JvdW5kIGZsZXggZmxleC1jb2wgZ2FwLTYgcm91bmRlZC14bCBib3JkZXIgc2hhZG93LXNtJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkSGVhZGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnQGNvbnRhaW5lci9jYXJkLWhlYWRlciBncmlkIGF1dG8tcm93cy1taW4gZ3JpZC1yb3dzLVthdXRvX2F1dG9dIGl0ZW1zLXN0YXJ0IGdhcC0xLjUgcC00IHBiLTAgaGFzLWRhdGEtW3Nsb3Q9Y2FyZC1hY3Rpb25dOmdyaWQtY29scy1bMWZyX2F1dG9dJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC1oZWFkZXJcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZFRpdGxlKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdsZWFkaW5nLW5vbmUgZm9udC1zZW1pYm9sZCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLXRpdGxlXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmREZXNjcmlwdGlvbih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20nLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC1kZXNjcmlwdGlvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkQWN0aW9uKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnY29sLXN0YXJ0LTIgcm93LXNwYW4tMiByb3ctc3RhcnQtMSBzZWxmLXN0YXJ0IGp1c3RpZnktc2VsZi1lbmQnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWFjdGlvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkQ29udGVudCh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbigncC00IHB0LTAnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC1jb250ZW50XCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRGb290ZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggaXRlbXMtY2VudGVyIHB4LTYgWy5ib3JkZXItdF06cHQtNicsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWZvb3RlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQge1xuXHRDYXJkLFxuXHRDYXJkSGVhZGVyLFxuXHRDYXJkRm9vdGVyLFxuXHRDYXJkVGl0bGUsXG5cdENhcmRBY3Rpb24sXG5cdENhcmREZXNjcmlwdGlvbixcblx0Q2FyZENvbnRlbnQsXG59XG4iLAogICAgImltcG9ydCAqIGFzIFNlbGVjdFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2VsZWN0J1xuaW1wb3J0IHsgQ2hlY2tJY29uLCBDaGV2cm9uRG93bkljb24sIENoZXZyb25VcEljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBTZWxlY3Qoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gPFNlbGVjdFByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cInNlbGVjdFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0R3JvdXAoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5Hcm91cD4pIHtcblx0cmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuR3JvdXAgZGF0YS1zbG90PVwic2VsZWN0LWdyb3VwXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RWYWx1ZSh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlZhbHVlPikge1xuXHRyZXR1cm4gPFNlbGVjdFByaW1pdGl2ZS5WYWx1ZSBkYXRhLXNsb3Q9XCJzZWxlY3QtdmFsdWVcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdFRyaWdnZXIoe1xuXHRjbGFzc05hbWUsXG5cdHNpemUgPSAnZGVmYXVsdCcsXG5cdGNoaWxkcmVuLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5UcmlnZ2VyPiAmIHtcblx0c2l6ZT86ICdzbScgfCAnZGVmYXVsdCdcbn0pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlRyaWdnZXJcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFwiYm9yZGVyLWlucHV0IGRhdGEtW3BsYWNlaG9sZGVyXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgWyZfc3ZnOm5vdChbY2xhc3MqPSd0ZXh0LSddKV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlIGRhcms6YmctaW5wdXQvMzAgZGFyazpob3ZlcjpiZy1pbnB1dC81MCBmbGV4IHctZml0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcm91bmRlZC1tZCBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHgtMyBweS0yIHRleHQtc20gd2hpdGVzcGFjZS1ub3dyYXAgc2hhZG93LXhzIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAgZGF0YS1bc2l6ZT1kZWZhdWx0XTpoLTkgZGF0YS1bc2l6ZT1zbV06aC04ICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmxpbmUtY2xhbXAtMSAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpmbGV4ICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOml0ZW1zLWNlbnRlciAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpnYXAtMiBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTRcIixcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zaXplPXtzaXplfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXRyaWdnZXJcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDxTZWxlY3RQcmltaXRpdmUuSWNvbiBhc0NoaWxkPlxuXHRcdFx0XHQ8Q2hldnJvbkRvd25JY29uIGNsYXNzTmFtZT1cInNpemUtNCBvcGFjaXR5LTUwXCIgLz5cblx0XHRcdDwvU2VsZWN0UHJpbWl0aXZlLkljb24+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuVHJpZ2dlcj5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RDb250ZW50KHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0cG9zaXRpb24gPSAncG9wcGVyJyxcblx0YWxpZ24gPSAnY2VudGVyJyxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuQ29udGVudD4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlBvcnRhbD5cblx0XHRcdDxTZWxlY3RQcmltaXRpdmUuQ29udGVudFxuXHRcdFx0XHRhbGlnbj17YWxpZ259XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2JnLXBvcG92ZXIgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGRhdGEtW3NpZGU9Ym90dG9tXTpzbGlkZS1pbi1mcm9tLXRvcC0yIGRhdGEtW3NpZGU9bGVmdF06c2xpZGUtaW4tZnJvbS1yaWdodC0yIGRhdGEtW3NpZGU9cmlnaHRdOnNsaWRlLWluLWZyb20tbGVmdC0yIGRhdGEtW3NpZGU9dG9wXTpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yIHJlbGF0aXZlIHotNTAgbWF4LWgtKC0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtYXZhaWxhYmxlLWhlaWdodCkgbWluLXctWzhyZW1dIG9yaWdpbi0oLS1yYWRpeC1zZWxlY3QtY29udGVudC10cmFuc2Zvcm0tb3JpZ2luKSBvdmVyZmxvdy14LWhpZGRlbiBvdmVyZmxvdy15LWF1dG8gcm91bmRlZC1tZCBib3JkZXIgc2hhZG93LW1kJyxcblx0XHRcdFx0XHRwb3NpdGlvbiA9PT0gJ3BvcHBlcicgJiZcblx0XHRcdFx0XHRcdCdkYXRhLVtzaWRlPWJvdHRvbV06dHJhbnNsYXRlLXktMSBkYXRhLVtzaWRlPWxlZnRdOi10cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9cmlnaHRdOnRyYW5zbGF0ZS14LTEgZGF0YS1bc2lkZT10b3BdOi10cmFuc2xhdGUteS0xJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LWNvbnRlbnRcIlxuXHRcdFx0XHRwb3NpdGlvbj17cG9zaXRpb259XG5cdFx0XHRcdHsuLi5wcm9wc31cblx0XHRcdD5cblx0XHRcdFx0PFNlbGVjdFNjcm9sbFVwQnV0dG9uIC8+XG5cdFx0XHRcdDxTZWxlY3RQcmltaXRpdmUuVmlld3BvcnRcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J3AtMScsXG5cdFx0XHRcdFx0XHRwb3NpdGlvbiA9PT0gJ3BvcHBlcicgJiZcblx0XHRcdFx0XHRcdFx0J2gtW3ZhcigtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLWhlaWdodCldIHctZnVsbCBtaW4tdy1bdmFyKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItd2lkdGgpXSBzY3JvbGwtbXktMSdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5WaWV3cG9ydD5cblx0XHRcdFx0PFNlbGVjdFNjcm9sbERvd25CdXR0b24gLz5cblx0XHRcdDwvU2VsZWN0UHJpbWl0aXZlLkNvbnRlbnQ+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuUG9ydGFsPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdExhYmVsKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5MYWJlbD4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLkxhYmVsXG5cdFx0XHRjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgcHgtMiBweS0xLjUgdGV4dC14cycsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3QtbGFiZWxcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0SXRlbSh7XG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkl0ZW0+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5JdGVtXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcImZvY3VzOmJnLWFjY2VudCBmb2N1czp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIFsmX3N2Zzpub3QoW2NsYXNzKj0ndGV4dC0nXSldOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCByZWxhdGl2ZSBmbGV4IHctZnVsbCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1zbSBweS0xLjUgcHItOCBwbC0yIHRleHQtc20gb3V0bGluZS1oaWRkZW4gc2VsZWN0LW5vbmUgZGF0YS1bZGlzYWJsZWRdOnBvaW50ZXItZXZlbnRzLW5vbmUgZGF0YS1bZGlzYWJsZWRdOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00ICo6W3NwYW5dOmxhc3Q6ZmxleCAqOltzcGFuXTpsYXN0Oml0ZW1zLWNlbnRlciAqOltzcGFuXTpsYXN0OmdhcC0yXCIsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1pdGVtXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0yIGZsZXggc2l6ZS0zLjUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG5cdFx0XHRcdDxTZWxlY3RQcmltaXRpdmUuSXRlbUluZGljYXRvcj5cblx0XHRcdFx0XHQ8Q2hlY2tJY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG5cdFx0XHRcdDwvU2VsZWN0UHJpbWl0aXZlLkl0ZW1JbmRpY2F0b3I+XG5cdFx0XHQ8L3NwYW4+XG5cdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLkl0ZW1UZXh0PntjaGlsZHJlbn08L1NlbGVjdFByaW1pdGl2ZS5JdGVtVGV4dD5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5JdGVtPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNlcGFyYXRvcih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2VwYXJhdG9yPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuU2VwYXJhdG9yXG5cdFx0XHRjbGFzc05hbWU9e2NuKCdiZy1ib3JkZXIgcG9pbnRlci1ldmVudHMtbm9uZSAtbXgtMSBteS0xIGgtcHgnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXNlcGFyYXRvclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTY3JvbGxVcEJ1dHRvbih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2Nyb2xsVXBCdXR0b24+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTEnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLXVwLWJ1dHRvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENoZXZyb25VcEljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvbj5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTY3JvbGxEb3duQnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTEnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLWRvd24tYnV0dG9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8Q2hldnJvbkRvd25JY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvbj5cblx0KVxufVxuXG5leHBvcnQge1xuXHRTZWxlY3QsXG5cdFNlbGVjdENvbnRlbnQsXG5cdFNlbGVjdEdyb3VwLFxuXHRTZWxlY3RJdGVtLFxuXHRTZWxlY3RMYWJlbCxcblx0U2VsZWN0U2Nyb2xsRG93bkJ1dHRvbixcblx0U2VsZWN0U2Nyb2xsVXBCdXR0b24sXG5cdFNlbGVjdFNlcGFyYXRvcixcblx0U2VsZWN0VHJpZ2dlcixcblx0U2VsZWN0VmFsdWUsXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zKG9uQ29tcGxldGU/OiAoKSA9PiB2b2lkKSB7XG5cdGNvbnN0IHsgdXBkYXRlUmVjdXJyaW5nRXZlbnQsIGRlbGV0ZVJlY3VycmluZ0V2ZW50IH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoe1xuXHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQudXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0XHRkZWxldGVSZWN1cnJpbmdFdmVudDogY29udGV4dC5kZWxldGVSZWN1cnJpbmdFdmVudCxcblx0XHR9KSlcblxuXHRjb25zdCBbZGlhbG9nU3RhdGUsIHNldERpYWxvZ1N0YXRlXSA9IHVzZVN0YXRlPHtcblx0XHRpc09wZW46IGJvb2xlYW5cblx0XHRvcGVyYXRpb25UeXBlOiAnZWRpdCcgfCAnZGVsZXRlJ1xuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRcdHVwZGF0ZXM/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdFx0b25Db25maXJtPzogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB2b2lkXG5cdH0+KHtcblx0XHRpc09wZW46IGZhbHNlLFxuXHRcdG9wZXJhdGlvblR5cGU6ICdlZGl0Jyxcblx0XHRldmVudDogbnVsbCxcblx0fSlcblxuXHRjb25zdCBvcGVuRWRpdERpYWxvZyA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCwgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4ge1xuXHRcdFx0c2V0RGlhbG9nU3RhdGUoe1xuXHRcdFx0XHRpc09wZW46IHRydWUsXG5cdFx0XHRcdG9wZXJhdGlvblR5cGU6ICdlZGl0Jyxcblx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdHVwZGF0ZXMsXG5cdFx0XHRcdG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0XHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQoZXZlbnQsIHVwZGF0ZXMsIHtcblx0XHRcdFx0XHRcdHNjb3BlLFxuXHRcdFx0XHRcdFx0ZXZlbnREYXRlOiBldmVudC5zdGFydCxcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9LFxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFt1cGRhdGVSZWN1cnJpbmdFdmVudF1cblx0KVxuXG5cdGNvbnN0IG9wZW5EZWxldGVEaWFsb2cgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdHNldERpYWxvZ1N0YXRlKHtcblx0XHRcdFx0aXNPcGVuOiB0cnVlLFxuXHRcdFx0XHRvcGVyYXRpb25UeXBlOiAnZGVsZXRlJyxcblx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0XHRcdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQoZXZlbnQsIHtcblx0XHRcdFx0XHRcdHNjb3BlLFxuXHRcdFx0XHRcdFx0ZXZlbnREYXRlOiBldmVudC5zdGFydCxcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9LFxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtkZWxldGVSZWN1cnJpbmdFdmVudF1cblx0KVxuXG5cdGNvbnN0IGNsb3NlRGlhbG9nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdHNldERpYWxvZ1N0YXRlKHtcblx0XHRcdGlzT3BlbjogZmFsc2UsXG5cdFx0XHRvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG5cdFx0XHRldmVudDogbnVsbCxcblx0XHR9KVxuXHR9LCBbXSlcblxuXHRjb25zdCBoYW5kbGVDb25maXJtID0gdXNlQ2FsbGJhY2soXG5cdFx0KHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0XHRpZiAoZGlhbG9nU3RhdGUub25Db25maXJtKSB7XG5cdFx0XHRcdGRpYWxvZ1N0YXRlLm9uQ29uZmlybShzY29wZSlcblx0XHRcdH1cblx0XHRcdGNsb3NlRGlhbG9nKClcblx0XHRcdC8vIENhbGwgb25Db21wbGV0ZSB0byBjbG9zZSB0aGUgcGFyZW50IGZvcm1cblx0XHRcdG9uQ29tcGxldGU/LigpXG5cdFx0fSxcblx0XHRbZGlhbG9nU3RhdGUsIGNsb3NlRGlhbG9nLCBvbkNvbXBsZXRlXVxuXHQpXG5cblx0cmV0dXJuIHtcblx0XHRkaWFsb2dTdGF0ZSxcblx0XHRvcGVuRWRpdERpYWxvZyxcblx0XHRvcGVuRGVsZXRlRGlhbG9nLFxuXHRcdGNsb3NlRGlhbG9nLFxuXHRcdGhhbmRsZUNvbmZpcm0sXG5cdH1cbn1cbiIsCiAgICAiaW1wb3J0IHtcblx0RGlhbG9nLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dEZXNjcmlwdGlvbixcblx0RGlhbG9nSGVhZGVyLFxuXHREaWFsb2dUaXRsZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RpYWxvZydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgRXZlbnRGb3JtIH0gZnJvbSAnLi9ldmVudC1mb3JtJ1xuXG5leHBvcnQgY29uc3QgRXZlbnRGb3JtRGlhbG9nID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0dCxcblx0XHRzZWxlY3RlZEV2ZW50LFxuXHRcdGlzRXZlbnRGb3JtT3Blbixcblx0XHRjbG9zZUV2ZW50Rm9ybSxcblx0XHRhZGRFdmVudCxcblx0XHR1cGRhdGVFdmVudCxcblx0XHRkZWxldGVFdmVudCxcblx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHR0OiBjb250ZXh0LnQsXG5cdFx0c2VsZWN0ZWRFdmVudDogY29udGV4dC5zZWxlY3RlZEV2ZW50LFxuXHRcdGlzRXZlbnRGb3JtT3BlbjogY29udGV4dC5pc0V2ZW50Rm9ybU9wZW4sXG5cdFx0Y2xvc2VFdmVudEZvcm06IGNvbnRleHQuY2xvc2VFdmVudEZvcm0sXG5cdFx0YWRkRXZlbnQ6IGNvbnRleHQuYWRkRXZlbnQsXG5cdFx0dXBkYXRlRXZlbnQ6IGNvbnRleHQudXBkYXRlRXZlbnQsXG5cdFx0ZGVsZXRlRXZlbnQ6IGNvbnRleHQuZGVsZXRlRXZlbnQsXG5cdFx0cmVuZGVyRXZlbnRGb3JtOiBjb250ZXh0LnJlbmRlckV2ZW50Rm9ybSxcblx0fSkpXG5cblx0Y29uc3QgaGFuZGxlT25VcGRhdGUgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHR1cGRhdGVFdmVudChldmVudC5pZCwgZXZlbnQpXG5cdH1cblxuXHRjb25zdCBoYW5kbGVPbkRlbGV0ZSA9IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdGRlbGV0ZUV2ZW50KGV2ZW50LmlkKVxuXHR9XG5cblx0Y29uc3QgZXZlbnRGb3JtUHJvcHMgPSB7XG5cdFx0b3BlbjogaXNFdmVudEZvcm1PcGVuLFxuXHRcdG9uQ2xvc2U6IGNsb3NlRXZlbnRGb3JtLFxuXHRcdHNlbGVjdGVkRXZlbnQsXG5cdFx0b25BZGQ6IGFkZEV2ZW50LFxuXHRcdG9uVXBkYXRlOiBoYW5kbGVPblVwZGF0ZSxcblx0XHRvbkRlbGV0ZTogaGFuZGxlT25EZWxldGUsXG5cdH1cblxuXHRpZiAocmVuZGVyRXZlbnRGb3JtKSB7XG5cdFx0cmV0dXJuIHJlbmRlckV2ZW50Rm9ybShldmVudEZvcm1Qcm9wcylcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PERpYWxvZyBvbk9wZW5DaGFuZ2U9e2Nsb3NlRXZlbnRGb3JtfSBvcGVuPXtpc0V2ZW50Rm9ybU9wZW59PlxuXHRcdFx0PERpYWxvZ0NvbnRlbnQgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBoLVs5MHZoXSB3LVs5MHZ3XSBtYXgtdy1bNTAwcHhdIHAtNCBzbTpwLTYgb3ZlcmZsb3ctaGlkZGVuIGdhcC0wXCI+XG5cdFx0XHRcdDxEaWFsb2dIZWFkZXIgY2xhc3NOYW1lPVwibWItMiBzbTptYi00IHNocmluay0wXCI+XG5cdFx0XHRcdFx0PERpYWxvZ1RpdGxlIGNsYXNzTmFtZT1cInRleHQtYmFzZSBzbTp0ZXh0LWxnXCI+XG5cdFx0XHRcdFx0XHR7c2VsZWN0ZWRFdmVudD8uaWQgPyB0KCdlZGl0RXZlbnQnKSA6IHQoJ2NyZWF0ZUV2ZW50Jyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dUaXRsZT5cblx0XHRcdFx0XHQ8RGlhbG9nRGVzY3JpcHRpb24gY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG5cdFx0XHRcdFx0XHR7c2VsZWN0ZWRFdmVudD8uaWQgPyB0KCdlZGl0RXZlbnREZXRhaWxzJykgOiB0KCdhZGROZXdFdmVudCcpfVxuXHRcdFx0XHRcdDwvRGlhbG9nRGVzY3JpcHRpb24+XG5cdFx0XHRcdDwvRGlhbG9nSGVhZGVyPlxuXG5cdFx0XHRcdDxFdmVudEZvcm0gey4uLmV2ZW50Rm9ybVByb3BzfSAvPlxuXHRcdFx0PC9EaWFsb2dDb250ZW50PlxuXHRcdDwvRGlhbG9nPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IENhbGVuZGFyIGFzIENhbGVuZGFySWNvbiwgRG93bmxvYWQsIE1lbnUsIFBsdXMgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHtcblx0UG9wb3Zlcixcblx0UG9wb3ZlckNvbnRlbnQsXG5cdFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBkb3dubG9hZElDYWxlbmRhciB9IGZyb20gJ0AvbGliL3V0aWxzL2V4cG9ydC1pY2FsJ1xuaW1wb3J0IFRpdGxlQ29udGVudCBmcm9tICcuL3RpdGxlLWNvbnRlbnQnXG5pbXBvcnQgVmlld0NvbnRyb2xzIGZyb20gJy4vdmlldy1jb250cm9scydcblxuaW50ZXJmYWNlIEhlYWRlclByb3BzIHtcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IEhlYWRlcjogUmVhY3QuRkM8SGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lID0gJycgfSkgPT4ge1xuXHRjb25zdCB7XG5cdFx0dmlldyxcblx0XHRzZXRWaWV3LFxuXHRcdG5leHRQZXJpb2QsXG5cdFx0cHJldlBlcmlvZCxcblx0XHR0b2RheSxcblx0XHRvcGVuRXZlbnRGb3JtLFxuXHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0cmF3RXZlbnRzLFxuXHRcdHQsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdHZpZXc6IGN0eC52aWV3LFxuXHRcdHNldFZpZXc6IGN0eC5zZXRWaWV3LFxuXHRcdG5leHRQZXJpb2Q6IGN0eC5uZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2Q6IGN0eC5wcmV2UGVyaW9kLFxuXHRcdHRvZGF5OiBjdHgudG9kYXksXG5cdFx0b3BlbkV2ZW50Rm9ybTogY3R4Lm9wZW5FdmVudEZvcm0sXG5cdFx0aGVhZGVyQ29tcG9uZW50OiBjdHguaGVhZGVyQ29tcG9uZW50LFxuXHRcdGhlYWRlckNsYXNzTmFtZTogY3R4LmhlYWRlckNsYXNzTmFtZSxcblx0XHRyYXdFdmVudHM6IGN0eC5yYXdFdmVudHMsXG5cdFx0dDogY3R4LnQsXG5cdH0pKVxuXG5cdGNvbnN0IFttb2JpbGVNZW51T3Blbiwgc2V0TW9iaWxlTWVudU9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cblx0Y29uc3QgY2xvc2VNb2JpbGVNZW51ID0gKCkgPT4gc2V0TW9iaWxlTWVudU9wZW4oZmFsc2UpXG5cblx0Y29uc3QgaGFuZGxlRXhwb3J0ID0gKCkgPT4ge1xuXHRcdGNvbnN0IGZpbGVuYW1lID0gYGlsYW15LWNhbGVuZGFyLSR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF19Lmljc2Bcblx0XHRkb3dubG9hZElDYWxlbmRhcihyYXdFdmVudHMsIGZpbGVuYW1lLCAnaWxhbXkgQ2FsZW5kYXInKVxuXHRcdGNsb3NlTW9iaWxlTWVudSgpXG5cdH1cblxuXHRjb25zdCBOZXdFdmVudEJ1dHRvbiA9ICgpID0+IChcblx0XHQ8QnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG5cdFx0XHRvbkNsaWNrPXsoKSA9PiBvcGVuRXZlbnRGb3JtKCl9XG5cdFx0XHRzaXplPVwic21cIlxuXHRcdFx0dmFyaWFudD1cImRlZmF1bHRcIlxuXHRcdD5cblx0XHRcdDxQbHVzIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIEA0eGw6aW5saW5lXCI+e3QoJ25ldycpfTwvc3Bhbj5cblx0XHQ8L0J1dHRvbj5cblx0KVxuXG5cdGNvbnN0IEV4cG9ydEJ1dHRvbiA9ICh7IGZ1bGxXaWR0aCA9IGZhbHNlIH06IHsgZnVsbFdpZHRoPzogYm9vbGVhbiB9KSA9PiAoXG5cdFx0PEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEnLCBmdWxsV2lkdGggJiYgJ3ctZnVsbCBnYXAtMicpfVxuXHRcdFx0b25DbGljaz17aGFuZGxlRXhwb3J0fVxuXHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHQ+XG5cdFx0XHQ8RG93bmxvYWQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHR7ZnVsbFdpZHRoID8gKFxuXHRcdFx0XHRgJHt0KCdleHBvcnQnKX0gQ2FsZW5kYXIgKC5pY3MpYFxuXHRcdFx0KSA6IChcblx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIEA0eGwvYmFzZS1oZWFkZXI6aW5saW5lXCI+e3QoJ2V4cG9ydCcpfTwvc3Bhbj5cblx0XHRcdCl9XG5cdFx0PC9CdXR0b24+XG5cdClcblxuXHRpZiAoaGVhZGVyQ29tcG9uZW50KSB7XG5cdFx0cmV0dXJuIGhlYWRlckNvbXBvbmVudFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJAY29udGFpbmVyL2Jhc2UtaGVhZGVyIHctZnVsbFwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImNhbGVuZGFyLWhlYWRlclwiXG5cdFx0PlxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdmbGV4IGp1c3RpZnktY2VudGVyIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1iZXR3ZWVuIGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTInLFxuXHRcdFx0XHRcdGNsYXNzTmFtZSxcblx0XHRcdFx0XHRoZWFkZXJDbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgQDJ4bC9iYXNlLWhlYWRlcjpqdXN0aWZ5LXN0YXJ0XCI+XG5cdFx0XHRcdFx0PENhbGVuZGFySWNvbiBjbGFzc05hbWU9XCJoLTUgdy01XCIgLz5cblx0XHRcdFx0XHQ8VGl0bGVDb250ZW50IC8+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAganVzdGlmeS1zdGFydCBAeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1jZW50ZXIgZ2FwLTEgQDR4bC9iYXNlLWhlYWRlcjpqdXN0aWZ5LWVuZCBvdmVyZmxvdy14LWF1dG9cIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBAbWQvYmFzZS1oZWFkZXI6ZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBnYXAtMVwiPlxuXHRcdFx0XHRcdFx0PFZpZXdDb250cm9sc1xuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJqdXN0aWZ5LWVuZFwiXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRWaWV3PXt2aWV3fVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17c2V0Vmlld31cblx0XHRcdFx0XHRcdFx0b25OZXh0PXtuZXh0UGVyaW9kfVxuXHRcdFx0XHRcdFx0XHRvblByZXZpb3VzPXtwcmV2UGVyaW9kfVxuXHRcdFx0XHRcdFx0XHRvblRvZGF5PXt0b2RheX1cblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImRlZmF1bHRcIlxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDxOZXdFdmVudEJ1dHRvbiAvPlxuXHRcdFx0XHRcdFx0PEV4cG9ydEJ1dHRvbiAvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBnYXAtMSBAbWQvYmFzZS1oZWFkZXI6aGlkZGVuXCI+XG5cdFx0XHRcdFx0XHQ8TmV3RXZlbnRCdXR0b24gLz5cblx0XHRcdFx0XHRcdDxQb3BvdmVyIG9uT3BlbkNoYW5nZT17c2V0TW9iaWxlTWVudU9wZW59IG9wZW49e21vYmlsZU1lbnVPcGVufT5cblx0XHRcdFx0XHRcdFx0PFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG5cdFx0XHRcdFx0XHRcdFx0PEJ1dHRvbiBzaXplPVwic21cIiB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PE1lbnUgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0XHRcdDwvUG9wb3ZlclRyaWdnZXI+XG5cdFx0XHRcdFx0XHRcdDxQb3BvdmVyQ29udGVudCBhbGlnbj1cImVuZFwiIGNsYXNzTmFtZT1cInctWzI0MHB4XSBwLTJcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PFZpZXdDb250cm9sc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50Vmlldz17dmlld31cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyh2KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2V0Vmlldyh2KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsb3NlTW9iaWxlTWVudSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uTmV4dD17KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5leHRQZXJpb2QoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsb3NlTW9iaWxlTWVudSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uUHJldmlvdXM9eygpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmV2UGVyaW9kKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvblRvZGF5PXsoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG9kYXkoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsb3NlTW9iaWxlTWVudSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJncmlkXCJcblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInB0LTIgYm9yZGVyLXRcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PEV4cG9ydEJ1dHRvbiBmdWxsV2lkdGggLz5cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L1BvcG92ZXJDb250ZW50PlxuXHRcdFx0XHRcdFx0PC9Qb3BvdmVyPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IEhlYWRlclxuIiwKICAgICJpbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5jb25zdCBDUkxGID0gJ1xcclxcbidcblxuY29uc3QgVVRDX1ZUSU1FWk9ORSA9IFtcblx0J0JFR0lOOlZUSU1FWk9ORScsXG5cdCdUWklEOlVUQycsXG5cdCdCRUdJTjpTVEFOREFSRCcsXG5cdCdEVFNUQVJUOjE5NzAwMTAxVDAwMDAwMCcsXG5cdCdUWk5BTUU6VVRDJyxcblx0J1RaT0ZGU0VURlJPTTorMDAwMCcsXG5cdCdUWk9GRlNFVFRPOiswMDAwJyxcblx0J0VORDpTVEFOREFSRCcsXG5cdCdFTkQ6VlRJTUVaT05FJyxcbl0uam9pbihDUkxGKVxuXG5jb25zdCBlc2NhcGVUZXh0ID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdHJldHVybiB0ZXh0XG5cdFx0LnJlcGxhY2VBbGwoJ1xcXFwnLCAnXFxcXFxcXFwnKVxuXHRcdC5yZXBsYWNlQWxsKCc7JywgJ1xcXFw7Jylcblx0XHQucmVwbGFjZUFsbCgnLCcsICdcXFxcLCcpXG5cdFx0LnJlcGxhY2VBbGwoJ1xcbicsICdcXFxcbicpXG5cdFx0LnJlcGxhY2VBbGwoJ1xccicsICcnKVxufVxuXG5jb25zdCBmb3JtYXREYXRlID0gKGRhdGU6IGRheWpzLkRheWpzLCBpc0FsbERheSA9IGZhbHNlKTogc3RyaW5nID0+IHtcblx0cmV0dXJuIGlzQWxsRGF5XG5cdFx0PyBkYXRlLmZvcm1hdCgnWVlZWU1NREQnKVxuXHRcdDogZGF0ZS51dGMoKS5mb3JtYXQoJ1lZWVlNTUREW1RdSEhtbXNzW1pdJylcbn1cblxuY29uc3QgZ2V0VUlEID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogc3RyaW5nID0+IHtcblx0cmV0dXJuIGV2ZW50LnVpZCB8fCBgJHtldmVudC5pZH1AaWxhbXkuY2FsZW5kYXJgXG59XG5cbmNvbnN0IGZvcm1hdFJSdWxlID0gKHJydWxlT3B0aW9uczogdW5rbm93bik6IHN0cmluZyA9PiB7XG5cdHRyeSB7XG5cdFx0Y29uc3QgcnJ1bGVTdHJpbmcgPSBuZXcgUlJ1bGUoXG5cdFx0XHRycnVsZU9wdGlvbnMgYXMgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBSUnVsZT5bMF1cblx0XHQpLnRvU3RyaW5nKClcblx0XHRyZXR1cm4gKFxuXHRcdFx0cnJ1bGVTdHJpbmcuc3BsaXQoJ1xcbicpLmZpbmQoKGxpbmUpID0+IGxpbmUuc3RhcnRzV2l0aCgnUlJVTEU6JykpIHx8ICcnXG5cdFx0KVxuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gJydcblx0fVxufVxuXG5jb25zdCBjb252ZXJ0RXZlbnRUb1ZFdmVudCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IHN0cmluZyA9PiB7XG5cdGNvbnN0IHRpbWVzdGFtcCA9IGRheWpzKCkudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG5cdGNvbnN0IGRhdGVQYXJhbSA9IGV2ZW50LmFsbERheSA/ICc7VkFMVUU9REFURScgOiAnJ1xuXHRjb25zdCBycnVsZSA9IGV2ZW50LnJydWxlID8gZm9ybWF0UlJ1bGUoZXZlbnQucnJ1bGUpIDogJydcblxuXHRjb25zdCBleGRhdGVzID0gZXZlbnQuZXhkYXRlcz8ubGVuZ3RoXG5cdFx0PyBldmVudC5leGRhdGVzLm1hcCgoZCkgPT4gZm9ybWF0RGF0ZShkYXlqcyhkKSwgZXZlbnQuYWxsRGF5KSkuam9pbignLCcpXG5cdFx0OiBudWxsXG5cblx0Y29uc3QgcmVjdXJyZW5jZUlkID0gZXZlbnQucmVjdXJyZW5jZUlkXG5cdFx0PyBmb3JtYXREYXRlKGRheWpzKGV2ZW50LnJlY3VycmVuY2VJZCksIGV2ZW50LmFsbERheSlcblx0XHQ6IG51bGxcblxuXHRjb25zdCBsaW5lcyA9IFtcblx0XHQnQkVHSU46VkVWRU5UJyxcblx0XHRgVUlEOiR7Z2V0VUlEKGV2ZW50KX1gLFxuXHRcdGBEVFNUQVJUJHtkYXRlUGFyYW19OiR7Zm9ybWF0RGF0ZShldmVudC5zdGFydCwgZXZlbnQuYWxsRGF5KX1gLFxuXHRcdGBEVEVORCR7ZGF0ZVBhcmFtfToke2Zvcm1hdERhdGUoZXZlbnQuZW5kLCBldmVudC5hbGxEYXkpfWAsXG5cdFx0YFNVTU1BUlk6JHtlc2NhcGVUZXh0KGV2ZW50LnRpdGxlKX1gLFxuXHRcdGV2ZW50LmRlc2NyaXB0aW9uICYmIGBERVNDUklQVElPTjoke2VzY2FwZVRleHQoZXZlbnQuZGVzY3JpcHRpb24pfWAsXG5cdFx0ZXZlbnQubG9jYXRpb24gJiYgYExPQ0FUSU9OOiR7ZXNjYXBlVGV4dChldmVudC5sb2NhdGlvbil9YCxcblx0XHRycnVsZSxcblx0XHRleGRhdGVzICYmIGBFWERBVEU6JHtleGRhdGVzfWAsXG5cdFx0cmVjdXJyZW5jZUlkICYmIGBSRUNVUlJFTkNFLUlEOiR7cmVjdXJyZW5jZUlkfWAsXG5cdFx0YERUU1RBTVA6JHt0aW1lc3RhbXB9YCxcblx0XHRgQ1JFQVRFRDoke3RpbWVzdGFtcH1gLFxuXHRcdGBMQVNULU1PRElGSUVEOiR7dGltZXN0YW1wfWAsXG5cdFx0J1NUQVRVUzpDT05GSVJNRUQnLFxuXHRcdCdTRVFVRU5DRTowJyxcblx0XHQnVFJBTlNQOk9QQVFVRScsXG5cdFx0J0VORDpWRVZFTlQnLFxuXHRdXG5cblx0cmV0dXJuIGxpbmVzLmZpbHRlcihCb29sZWFuKS5qb2luKENSTEYpXG59XG5cbmNvbnN0IGZpbHRlckV2ZW50cyA9IChldmVudHM6IENhbGVuZGFyRXZlbnRbXSk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdGNvbnN0IHNlZW5VSURzID0gbmV3IFNldDxzdHJpbmc+KClcblxuXHRyZXR1cm4gZXZlbnRzLmZpbHRlcigoZXZlbnQpID0+IHtcblx0XHRjb25zdCB1aWQgPSBnZXRVSUQoZXZlbnQpXG5cdFx0Y29uc3QgaXNCYXNlUmVjdXJyaW5nID0gZXZlbnQucnJ1bGUgJiYgIWV2ZW50LnJlY3VycmVuY2VJZFxuXHRcdGNvbnN0IGlzTW9kaWZpZWRJbnN0YW5jZSA9IGV2ZW50LnJlY3VycmVuY2VJZCAmJiAhZXZlbnQucnJ1bGVcblxuXHRcdGlmIChpc0Jhc2VSZWN1cnJpbmcpIHtcblx0XHRcdHNlZW5VSURzLmFkZCh1aWQpXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdH1cblx0XHRpZiAoaXNNb2RpZmllZEluc3RhbmNlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdH1cblx0XHRyZXR1cm4gIWV2ZW50LnJydWxlICYmICFldmVudC5yZWN1cnJlbmNlSWQgJiYgIXNlZW5VSURzLmhhcyh1aWQpXG5cdH0pXG59XG5cbmV4cG9ydCBjb25zdCBleHBvcnRUb0lDYWxlbmRhciA9IChcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W10sXG5cdGNhbGVuZGFyTmFtZSA9ICdpbGFteSBDYWxlbmRhcidcbik6IHN0cmluZyA9PiB7XG5cdGNvbnN0IG5hbWUgPSBlc2NhcGVUZXh0KGNhbGVuZGFyTmFtZSlcblx0Y29uc3QgdmV2ZW50U3RyaW5ncyA9IGZpbHRlckV2ZW50cyhldmVudHMpLm1hcChjb252ZXJ0RXZlbnRUb1ZFdmVudClcblxuXHRyZXR1cm4gW1xuXHRcdCdCRUdJTjpWQ0FMRU5EQVInLFxuXHRcdCdWRVJTSU9OOjIuMCcsXG5cdFx0J1BST0RJRDotLy9pbGFteS8vaWxhbXkgQ2FsZW5kYXIvL0VOJyxcblx0XHQnQ0FMU0NBTEU6R1JFR09SSUFOJyxcblx0XHQnTUVUSE9EOlBVQkxJU0gnLFxuXHRcdGBYLVdSLUNBTE5BTUU6JHtuYW1lfWAsXG5cdFx0YFgtV1ItQ0FMREVTQzpFeHBvcnRlZCBmcm9tICR7bmFtZX1gLFxuXHRcdFVUQ19WVElNRVpPTkUsXG5cdFx0Li4udmV2ZW50U3RyaW5ncyxcblx0XHQnRU5EOlZDQUxFTkRBUicsXG5cdF0uam9pbihDUkxGKVxufVxuXG5leHBvcnQgY29uc3QgZG93bmxvYWRJQ2FsZW5kYXIgPSAoXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdLFxuXHRmaWxlbmFtZSA9ICdjYWxlbmRhci5pY3MnLFxuXHRjYWxlbmRhck5hbWUgPSAnaWxhbXkgQ2FsZW5kYXInXG4pOiB2b2lkID0+IHtcblx0Y29uc3QgYmxvYiA9IG5ldyBCbG9iKFtleHBvcnRUb0lDYWxlbmRhcihldmVudHMsIGNhbGVuZGFyTmFtZSldLCB7XG5cdFx0dHlwZTogJ3RleHQvY2FsZW5kYXI7Y2hhcnNldD11dGYtOCcsXG5cdH0pXG5cdGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYilcblx0Y29uc3Qgbm9ybWFsaXplZEZpbGVuYW1lID0gZmlsZW5hbWUuZW5kc1dpdGgoJy5pY3MnKVxuXHRcdD8gZmlsZW5hbWVcblx0XHQ6IGAke2ZpbGVuYW1lfS5pY3NgXG5cblx0Y29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuXHRsaW5rLmhyZWYgPSB1cmxcblx0bGluay5kb3dubG9hZCA9IG5vcm1hbGl6ZWRGaWxlbmFtZVxuXG5cdGRvY3VtZW50LmJvZHkuYXBwZW5kKGxpbmspXG5cdGxpbmsuY2xpY2soKVxuXHRsaW5rLnJlbW92ZSgpXG5cdFVSTC5yZXZva2VPYmplY3RVUkwodXJsKVxufVxuIiwKICAgICJpbXBvcnQgeyBDaGV2cm9uRG93biB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHsgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuY29uc3QgTU9OVEhfS0VZUyA9IFtcblx0J2phbnVhcnknLFxuXHQnZmVicnVhcnknLFxuXHQnbWFyY2gnLFxuXHQnYXByaWwnLFxuXHQnbWF5Jyxcblx0J2p1bmUnLFxuXHQnanVseScsXG5cdCdhdWd1c3QnLFxuXHQnc2VwdGVtYmVyJyxcblx0J29jdG9iZXInLFxuXHQnbm92ZW1iZXInLFxuXHQnZGVjZW1iZXInLFxuXSBhcyBjb25zdFxuXG5jb25zdCBhbmltYXRpb24gPSB7XG5cdGluaXRpYWw6IHsgb3BhY2l0eTogMCwgeTogMTAgfSxcblx0YW5pbWF0ZTogeyBvcGFjaXR5OiAxLCB5OiAwIH0sXG5cdGV4aXQ6IHsgb3BhY2l0eTogMCwgeTogLTEwIH0sXG59XG5cbmNvbnN0IFRpdGxlQ29udGVudCA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgdmlldywgc2V0Q3VycmVudERhdGUsIHQsIGZpcnN0RGF5T2ZXZWVrIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjdHgpID0+ICh7XG5cdFx0XHRjdXJyZW50RGF0ZTogY3R4LmN1cnJlbnREYXRlLFxuXHRcdFx0dmlldzogY3R4LnZpZXcsXG5cdFx0XHRzZXRDdXJyZW50RGF0ZTogY3R4LnNldEN1cnJlbnREYXRlLFxuXHRcdFx0dDogY3R4LnQsXG5cdFx0XHRmaXJzdERheU9mV2VlazogY3R4LmZpcnN0RGF5T2ZXZWVrLFxuXHRcdH0pKVxuXG5cdGNvbnN0IFtvcGVuUG9wb3Zlciwgc2V0T3BlblBvcG92ZXJdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuXHRjb25zdCBtb250aHMgPSB1c2VNZW1vKCgpID0+IE1PTlRIX0tFWVMubWFwKChrZXkpID0+IHQoa2V5KSksIFt0XSlcblx0Y29uc3QgY3VycmVudFllYXIgPSBjdXJyZW50RGF0ZS55ZWFyKClcblx0Y29uc3QgeWVhcnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMSB9LCAoXywgaSkgPT4gY3VycmVudFllYXIgLSA1ICsgaSlcblx0Y29uc3Qgd2Vla0RheXMgPSBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspXG5cblx0Y29uc3Qgc2VsZWN0RGF0ZSA9IChkYXRlOiBkYXlqcy5EYXlqcykgPT4ge1xuXHRcdHNldEN1cnJlbnREYXRlKGRhdGUpXG5cdFx0c2V0T3BlblBvcG92ZXIobnVsbClcblx0fVxuXG5cdGNvbnN0IHJlbmRlck1vbnRoQ29udGVudCA9ICgpID0+IChcblx0XHQ8PlxuXHRcdFx0e21vbnRocy5tYXAoKG1vbnRoLCBpbmRleCkgPT4gKFxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdGN1cnJlbnREYXRlLm1vbnRoKCkgPT09IGluZGV4ICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0a2V5PXttb250aH1cblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZWxlY3REYXRlKGN1cnJlbnREYXRlLm1vbnRoKGluZGV4KSl9XG5cdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHttb250aH1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQpKX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlclllYXJDb250ZW50ID0gKCkgPT4gKFxuXHRcdDw+XG5cdFx0XHR7eWVhcnMubWFwKCh5ZWFyKSA9PiAoXG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0Y3VycmVudERhdGUueWVhcigpID09PSB5ZWFyICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0a2V5PXt5ZWFyfVxuXHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNlbGVjdERhdGUoY3VycmVudERhdGUueWVhcih5ZWFyKSl9XG5cdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt5ZWFyfVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdCkpfVxuXHRcdDwvPlxuXHQpXG5cblx0Y29uc3QgcmVuZGVyV2Vla0NvbnRlbnQgPSAoKSA9PiAoXG5cdFx0PD5cblx0XHRcdHtBcnJheS5mcm9tKHsgbGVuZ3RoOiA3IH0sIChfLCBpKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHdlZWtEYXRlID0gY3VycmVudERhdGUuc3VidHJhY3QoMywgJ3dlZWsnKS5hZGQoaSwgJ3dlZWsnKVxuXHRcdFx0XHRjb25zdCBkYXlzID0gZ2V0V2Vla0RheXMod2Vla0RhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdFx0XHRjb25zdCBzdGFydCA9IGRheXNbMF1cblx0XHRcdFx0Y29uc3QgZW5kID0gZGF5c1s2XVxuXHRcdFx0XHRjb25zdCBpc0N1cnJlbnRXZWVrID0gd2Vla0RhdGUuaXNTYW1lKGN1cnJlbnREYXRlLCAnd2VlaycpXG5cdFx0XHRcdGNvbnN0IGNyb3NzZXNNb250aCA9IHN0YXJ0Lm1vbnRoKCkgIT09IGVuZC5tb250aCgpXG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHQnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG5cdFx0XHRcdFx0XHRcdGlzQ3VycmVudFdlZWsgJiYgJ2JnLXByaW1hcnkvMTAnXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0a2V5PXtzdGFydC5mb3JtYXQoJ1lZWVktTU0tREQnKX1cblx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNlbGVjdERhdGUoc3RhcnQpfVxuXHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cblx0XHRcdFx0XHRcdFx0PHNwYW4+e2Ake3N0YXJ0LmZvcm1hdCgnTU1NIEQnKX0gLSAke2VuZC5mb3JtYXQoJ0QnKX1gfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0e2Nyb3NzZXNNb250aCAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwibWwtMC41IHRleHQteHMgb3BhY2l0eS03MFwiPntgJHtzdGFydC5mb3JtYXQoJ01NTScpfS0ke2VuZC5mb3JtYXQoJ01NTScpfWB9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvPlxuXHQpXG5cblx0Y29uc3QgcmVuZGVyRGF5Q29udGVudCA9ICgpID0+IHtcblx0XHRjb25zdCBmaXJzdERheSA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcblx0XHRjb25zdCBkYXlzSW5Nb250aCA9IGN1cnJlbnREYXRlLmRheXNJbk1vbnRoKClcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8PlxuXHRcdFx0XHR7QXJyYXkuZnJvbSh7IGxlbmd0aDogZGF5c0luTW9udGggfSwgKF8sIGkpID0+IHtcblx0XHRcdFx0XHRjb25zdCBkYXkgPSBmaXJzdERheS5kYXRlKGkgKyAxKVxuXHRcdFx0XHRcdGNvbnN0IGlzQ3VycmVudERheSA9IGRheS5pc1NhbWUoY3VycmVudERhdGUsICdkYXknKVxuXHRcdFx0XHRcdGNvbnN0IGlzVG9kYXkgPSBkYXkuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHQnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG5cdFx0XHRcdFx0XHRcdFx0aXNDdXJyZW50RGF5ICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRrZXk9e2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cblx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gc2VsZWN0RGF0ZShkYXkpfVxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cblx0XHRcdFx0XHRcdFx0XHQ8c3Bhbj57ZGF5LmZvcm1hdCgnZGRkZCwgTU1NIEQnKX08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0e2lzVG9kYXkgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLXNtIHB4LTEhIHRleHQteHNcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ3RvZGF5Jyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pfVxuXHRcdFx0PC8+XG5cdFx0KVxuXHR9XG5cblx0Y29uc3QgcG9wb3ZlcnMgPSBbXG5cdFx0e1xuXHRcdFx0aWQ6ICdtb250aCcsXG5cdFx0XHRoaWRkZW46IHZpZXcgPT09ICd5ZWFyJyxcblx0XHRcdHRpdGxlOiBjdXJyZW50RGF0ZS5mb3JtYXQoJ01NTU0nKSxcblx0XHRcdHJlbmRlcjogcmVuZGVyTW9udGhDb250ZW50LFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6ICd5ZWFyJyxcblx0XHRcdGhpZGRlbjogZmFsc2UsXG5cdFx0XHR0aXRsZTogY3VycmVudERhdGUuZm9ybWF0KCdZWVlZJyksXG5cdFx0XHRyZW5kZXI6IHJlbmRlclllYXJDb250ZW50LFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6ICd3ZWVrJyxcblx0XHRcdGhpZGRlbjogdmlldyAhPT0gJ3dlZWsnLFxuXHRcdFx0dGl0bGU6IGAke3dlZWtEYXlzWzBdLmZvcm1hdCgnTU1NIEQnKX0gLSAke3dlZWtEYXlzWzZdLmZvcm1hdCgnTU1NIEQnKX1gLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJXZWVrQ29udGVudCxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiAnZGF5Jyxcblx0XHRcdGhpZGRlbjogdmlldyAhPT0gJ2RheScsXG5cdFx0XHR0aXRsZTogY3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCBEJyksXG5cdFx0XHRyZW5kZXI6IHJlbmRlckRheUNvbnRlbnQsXG5cdFx0fSxcblx0XVxuXG5cdHJldHVybiBwb3BvdmVyc1xuXHRcdC5maWx0ZXIoKHApID0+ICFwLmhpZGRlbilcblx0XHQubWFwKChwb3BvdmVyKSA9PiAoXG5cdFx0XHQ8UG9wb3ZlclxuXHRcdFx0XHRrZXk9e3BvcG92ZXIuaWR9XG5cdFx0XHRcdG9uT3BlbkNoYW5nZT17KG9wZW4pID0+IHNldE9wZW5Qb3BvdmVyKG9wZW4gPyBwb3BvdmVyLmlkIDogbnVsbCl9XG5cdFx0XHRcdG9wZW49e29wZW5Qb3BvdmVyID09PSBwb3BvdmVyLmlkfVxuXHRcdFx0PlxuXHRcdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBweC0xISBmb250LXNlbWlib2xkXCJcblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItbW9udGgtYnV0dG9uXCJcblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuXHRcdFx0XHRcdFx0XHQ8bW90aW9uLnNwYW5cblx0XHRcdFx0XHRcdFx0XHRhbmltYXRlPVwiYW5pbWF0ZVwiXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1tb250aC1kaXNwbGF5XCJcblx0XHRcdFx0XHRcdFx0XHRleGl0PVwiZXhpdFwiXG5cdFx0XHRcdFx0XHRcdFx0aW5pdGlhbD1cImluaXRpYWxcIlxuXHRcdFx0XHRcdFx0XHRcdGtleT17YCR7cG9wb3Zlci5pZH0tJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuXHRcdFx0XHRcdFx0XHRcdHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG5cdFx0XHRcdFx0XHRcdFx0dmFyaWFudHM9e2FuaW1hdGlvbn1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHtwb3BvdmVyLnRpdGxlfVxuXHRcdFx0XHRcdFx0XHQ8L21vdGlvbi5zcGFuPlxuXHRcdFx0XHRcdFx0PC9BbmltYXRlUHJlc2VuY2U+XG5cdFx0XHRcdFx0XHQ8Q2hldnJvbkRvd24gY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvUG9wb3ZlclRyaWdnZXI+XG5cdFx0XHRcdDxQb3BvdmVyQ29udGVudCBjbGFzc05hbWU9XCJ3LTQwIHAtMFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtYXgtaC02MCBmbGV4LWNvbCBvdmVyZmxvdy1hdXRvXCI+XG5cdFx0XHRcdFx0XHR7cG9wb3Zlci5yZW5kZXIoKX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHRcdDwvUG9wb3Zlcj5cblx0XHQpKVxufVxuXG5leHBvcnQgZGVmYXVsdCBUaXRsZUNvbnRlbnRcbiIsCiAgICAiaW1wb3J0IHsgQ2hldnJvbkxlZnQsIENoZXZyb25SaWdodCB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbnR5cGUgVmlld1R5cGUgPSAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAneWVhcidcbmNvbnN0IEFWQUlMQUJMRV9WSUVXUzogVmlld1R5cGVbXSA9IFsnZGF5JywgJ3dlZWsnLCAnbW9udGgnLCAneWVhciddXG5cbmludGVyZmFjZSBWaWV3Q29udHJvbHNQcm9wcyB7XG5cdGN1cnJlbnRWaWV3OiBWaWV3VHlwZVxuXHRvbkNoYW5nZTogKHZpZXc6IFZpZXdUeXBlKSA9PiB2b2lkXG5cdG9uVG9kYXk/OiAoKSA9PiB2b2lkXG5cdG9uTmV4dD86ICgpID0+IHZvaWRcblx0b25QcmV2aW91cz86ICgpID0+IHZvaWRcblx0dmFyaWFudD86ICdkZWZhdWx0JyB8ICdncmlkJ1xuXHRzaXplPzogJ3NtJyB8ICdkZWZhdWx0J1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgVmlld0NvbnRyb2xzOiBSZWFjdC5GQzxWaWV3Q29udHJvbHNQcm9wcz4gPSAoe1xuXHRjdXJyZW50Vmlldyxcblx0b25DaGFuZ2UsXG5cdHZhcmlhbnQgPSAnZGVmYXVsdCcsXG5cdHNpemUgPSAnc20nLFxuXHRjbGFzc05hbWUsXG5cdG9uVG9kYXksXG5cdG9uTmV4dCxcblx0b25QcmV2aW91cyxcbn0pID0+IHtcblx0Y29uc3QgeyB0LCByZXNvdXJjZXMgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoe1xuXHRcdHQ6IGNvbnRleHQudCxcblx0XHRyZXNvdXJjZXM6IGNvbnRleHQucmVzb3VyY2VzLFxuXHR9KSlcblx0Y29uc3QgaXNHcmlkID0gdmFyaWFudCA9PT0gJ2dyaWQnXG5cdGNvbnN0IGlzUmVzb3VyY2VDYWxlbmRhciA9IHJlc291cmNlcyAmJiByZXNvdXJjZXMubGVuZ3RoID4gMFxuXG5cdC8vIEV4dHJhY3QgY29tbW9uIGJ1dHRvbiBjbGFzc05hbWUgbG9naWMgdG8gYSBmdW5jdGlvblxuXHRjb25zdCBnZXRCdXR0b25DbGFzc05hbWUgPSAodmlld1R5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0cmV0dXJuIGNuKFxuXHRcdFx0Ly8gQmFzZSB3aWR0aCBmb3IgZ3JpZCBsYXlvdXRcblx0XHRcdGlzR3JpZCA/ICd3LWZ1bGwnIDogJycsXG5cdFx0XHQvLyBBY3RpdmUgdmlldyBzdHlsaW5nXG5cdFx0XHRjdXJyZW50VmlldyA9PT0gdmlld1R5cGUgJiYgJ2JnLXByaW1hcnkvODAnXG5cdFx0KVxuXHR9XG5cblx0Y29uc3QgZ2V0QnRuVmFyaWFudCA9ICh2aWV3VHlwZTogVmlld1R5cGUpID0+IHtcblx0XHRyZXR1cm4gY3VycmVudFZpZXcgPT09IHZpZXdUeXBlID8gJ2RlZmF1bHQnIDogJ291dGxpbmUnXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdGlzR3JpZCA/ICdncmlkIGdyaWQtY29scy0yIGdhcC0yJyA6ICdmbGV4IGdhcC0xJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdD5cblx0XHRcdDxCdXR0b24gb25DbGljaz17b25QcmV2aW91c30gc2l6ZT17c2l6ZX0gdmFyaWFudD1cIm91dGxpbmVcIj5cblx0XHRcdFx0PENoZXZyb25MZWZ0IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uTmV4dH0gc2l6ZT17c2l6ZX0gdmFyaWFudD1cIm91dGxpbmVcIj5cblx0XHRcdFx0PENoZXZyb25SaWdodCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdDwvQnV0dG9uPlxuXG5cdFx0XHR7QVZBSUxBQkxFX1ZJRVdTLm1hcCgodHlwZTogVmlld1R5cGUpID0+IHtcblx0XHRcdFx0aWYgKGlzUmVzb3VyY2VDYWxlbmRhciAmJiB0eXBlID09PSAneWVhcicpIHtcblx0XHRcdFx0XHRyZXR1cm4gbnVsbFxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9e2dldEJ1dHRvbkNsYXNzTmFtZSh0eXBlKX1cblx0XHRcdFx0XHRcdGtleT17dHlwZX1cblx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IG9uQ2hhbmdlKHR5cGUpfVxuXHRcdFx0XHRcdFx0c2l6ZT17c2l6ZX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9e2dldEJ0blZhcmlhbnQodHlwZSl9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0e3QodHlwZSl9XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXG5cdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uVG9kYXl9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdHt0KCd0b2RheScpfVxuXHRcdFx0PC9CdXR0b24+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlld0NvbnRyb2xzXG4iLAogICAgImltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHsgQWxsRGF5Um93IH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93J1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldERheUhvdXJzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuY29uc3QgRGF5VmlldyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgY3VycmVudExvY2FsZSwgdGltZUZvcm1hdCwgdCB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgaXNUb2RheSA9IGN1cnJlbnREYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5Jylcblx0Y29uc3QgaG91cnMgPSBnZXREYXlIb3Vycyh7IHJlZmVyZW5jZURhdGU6IGN1cnJlbnREYXRlIH0pXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB7XG5cdFx0aWQ6ICd0aW1lLWNvbCcsXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0Y2xhc3NOYW1lOlxuXHRcdFx0J3Nocmluay0wIHctMTYgbWluLXctMTYgbWF4LXctMTYgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAnLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IGRheWpzLkRheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcblx0XHRcdFx0XHRob3VyOiAnbnVtZXJpYycsXG5cdFx0XHRcdFx0aG91cjEyOiB0aW1lRm9ybWF0ID09PSAnMTItaG91cicsXG5cdFx0XHRcdH0pLmZvcm1hdChkYXRlLnRvRGF0ZSgpKX1cblx0XHRcdDwvZGl2PlxuXHRcdCksXG5cdH1cblxuXHRjb25zdCBjb2x1bW5zID0ge1xuXHRcdGlkOiBgZGF5LWNvbC0ke2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpfWAsXG5cdFx0ZGF5OiBjdXJyZW50RGF0ZSxcblx0XHRkYXlzOiBob3Vycyxcblx0XHRjbGFzc05hbWU6ICd3LVtjYWxjKDEwMCUtNHJlbSldIGZsZXgtMScsXG5cdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0YWxsRGF5Um93PXs8QWxsRGF5Um93IGRheXM9e1tjdXJyZW50RGF0ZV19IC8+fVxuXHRcdFx0Y2VsbFNsb3RzPXtbMCwgMTUsIDMwLCA0NV19XG5cdFx0XHRjbGFzc2VzPXt7IGhlYWRlcjogJ3ctZnVsbCcsIGJvZHk6ICd3LWZ1bGwnLCBhbGxEYXk6ICd3LWZ1bGwnIH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIGNvbHVtbnNdfVxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHQ+XG5cdFx0XHR7LyogSGVhZGVyICovfVxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9eydmbGV4IGgtZnVsbCBmbGV4LTEganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyJ31cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJkYXktdmlldy1oZWFkZXJcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG5cdFx0XHRcdFx0PG1vdGlvbi5kaXZcblx0XHRcdFx0XHRcdGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0J2ZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHRleHQtY2VudGVyIHRleHQtYmFzZSBmb250LXNlbWlib2xkIHNtOnRleHQteGwnLFxuXHRcdFx0XHRcdFx0XHRpc1RvZGF5ICYmICd0ZXh0LXByaW1hcnknXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0ZXhpdD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cblx0XHRcdFx0XHRcdGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG5cdFx0XHRcdFx0XHRrZXk9e2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpfVxuXHRcdFx0XHRcdFx0dHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC4yNSwgZWFzZTogJ2Vhc2VJbk91dCcgfX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ4czppbmxpbmUgaGlkZGVuXCI+XG5cdFx0XHRcdFx0XHRcdHtjdXJyZW50RGF0ZS5mb3JtYXQoJ2RkZGQsICcpfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0e2N1cnJlbnREYXRlLmZvcm1hdCgnTU1NTSBELCBZWVlZJyl9XG5cdFx0XHRcdFx0XHR7aXNUb2RheSAmJiAoXG5cdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgbWwtMiByb3VuZGVkLWZ1bGwgcHgtMSBweS0wLjUgdGV4dC14cyBzbTpweC0yIHNtOnRleHQtc21cIj5cblx0XHRcdFx0XHRcdFx0XHR7dCgndG9kYXknKX1cblx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHQ8L21vdGlvbi5kaXY+XG5cdFx0XHRcdDwvQW5pbWF0ZVByZXNlbmNlPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cblxuZXhwb3J0IGRlZmF1bHQgRGF5Vmlld1xuIiwKICAgICJpbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdkYXlqcydcbmltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkUm93IH0gZnJvbSAnQC9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQtcm93J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgQWxsRGF5Q2VsbCB9IGZyb20gJy4vYWxsLWRheS1jZWxsJ1xuXG5pbnRlcmZhY2UgQWxsRGF5Um93UHJvcHMge1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdXG5cdGNsYXNzZXM/OiB7IHJvdz86IHN0cmluZzsgY2VsbD86IHN0cmluZzsgc3BhY2VyPzogc3RyaW5nIH1cblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRzaG93U3BhY2VyPzogYm9vbGVhblxufVxuXG5jb25zdCBOb01lbW9BbGxEYXlSb3c6IFJlYWN0LkZDPEFsbERheVJvd1Byb3BzPiA9ICh7XG5cdGRheXMsXG5cdGNsYXNzZXMsXG5cdHJlc291cmNlLFxuXHRzaG93U3BhY2VyID0gdHJ1ZSxcbn0pID0+IHtcblx0Y29uc3QgY29sdW1ucyA9IGRheXMubWFwKChkYXksIGluZGV4KSA9PiAoe1xuXHRcdGlkOiBgYWxsZGF5LWNvbC0ke2RheS50b0lTT1N0cmluZygpfS0ke2luZGV4fWAsXG5cdFx0ZGF5LFxuXHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0XHRjbGFzc05hbWU6IGNuKCdoLWZ1bGwgbWluLWgtMTIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wJywgY2xhc3Nlcz8uY2VsbCksXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9e2NuKCdmbGV4IHctZnVsbCcsIGNsYXNzZXM/LnJvdyl9IGRhdGEtdGVzdGlkPVwiYWxsLWRheS1yb3dcIj5cblx0XHRcdHsvKiBUaW1lIGNvbCBzcGFjZXIgKi99XG5cdFx0XHR7c2hvd1NwYWNlciAmJiA8QWxsRGF5Q2VsbCBjbGFzc05hbWU9e2NsYXNzZXM/LnNwYWNlcn0gLz59XG5cblx0XHRcdHsvKiBEYXkgYWxsIGRheSBjZWxsICovfVxuXHRcdFx0PEhvcml6b250YWxHcmlkUm93XG5cdFx0XHRcdGFsbERheVxuXHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4LTEgbWluLWgtZml0XCJcblx0XHRcdFx0Y29sdW1ucz17Y29sdW1uc31cblx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXswfVxuXHRcdFx0XHRncmlkVHlwZT1cImRheVwiXG5cdFx0XHRcdGlkPXtgYWxsLWRheS1yb3ctJHtyZXNvdXJjZT8uaWQgPz8gJ21haW4nfWB9XG5cdFx0XHRcdGlzTGFzdFJvd1xuXHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHRcdC8+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEFsbERheVJvdyA9IG1lbW8oTm9NZW1vQWxsRGF5Um93KVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgR3JpZENlbGwgfSBmcm9tICcuLi9ncmlkLWNlbGwnXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICcuLi9yZXNvdXJjZS1jZWxsJ1xuaW1wb3J0IHsgSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllciB9IGZyb20gJy4vaG9yaXpvbnRhbC1ncmlkLWV2ZW50cy1sYXllcidcblxuaW50ZXJmYWNlIEhvcml6b250YWxHcmlkQ29sdW1uIHtcblx0aWQ6IHN0cmluZ1xuXHRkYXk6IGRheWpzLkRheWpzXG5cdGdyaWRUeXBlOiAnZGF5JyB8ICdob3VyJ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0cmVuZGVyQ2VsbD86IChyb3c6IEhvcml6b250YWxHcmlkUm93UHJvcHMpID0+IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhvcml6b250YWxHcmlkUm93UHJvcHMge1xuXHRpZDogc3RyaW5nIHwgbnVtYmVyXG5cdHJlc291cmNlPzogUmVzb3VyY2Vcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHR2YXJpYW50PzogJ3JlZ3VsYXInIHwgJ3Jlc291cmNlJ1xuXHRkYXlOdW1iZXJIZWlnaHQ/OiBudW1iZXJcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGNvbHVtbnM/OiBIb3Jpem9udGFsR3JpZENvbHVtbltdXG5cdGFsbERheT86IGJvb2xlYW5cblx0c2hvd0RheU51bWJlcj86IGJvb2xlYW5cblx0aXNMYXN0Um93PzogYm9vbGVhblxufVxuXG5jb25zdCBOb01lbW9Ib3Jpem9udGFsR3JpZFJvdzogUmVhY3QuRkM8SG9yaXpvbnRhbEdyaWRSb3dQcm9wcz4gPSAoe1xuXHRpZCxcblx0cmVzb3VyY2UsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHZhcmlhbnQgPSAncmVzb3VyY2UnLFxuXHRkYXlOdW1iZXJIZWlnaHQsXG5cdGNsYXNzTmFtZSxcblx0Y29sdW1ucyA9IFtdLFxuXHRhbGxEYXksXG5cdHNob3dEYXlOdW1iZXIgPSBmYWxzZSxcblx0aXNMYXN0Um93ID0gZmFsc2UsXG59KSA9PiB7XG5cdGNvbnN0IHsgcmVuZGVyUmVzb3VyY2UgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChzdGF0ZSkgPT4gKHtcblx0XHRyZW5kZXJSZXNvdXJjZTogc3RhdGUucmVuZGVyUmVzb3VyY2UsXG5cdH0pKVxuXG5cdGNvbnN0IGlzUmVzb3VyY2VDYWxlbmRhciA9IHZhcmlhbnQgPT09ICdyZXNvdXJjZSdcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC0xIHJlbGF0aXZlIG1pbi1oLVs2MHB4XScsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXRlc3RpZD17YGhvcml6b250YWwtcm93LSR7aWR9YH1cblx0XHQ+XG5cdFx0XHR7aXNSZXNvdXJjZUNhbGVuZGFyICYmIChcblx0XHRcdFx0PFJlc291cmNlQ2VsbFxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInctNDAgbWluLXctNDAgbWF4LXctNDAgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAgaC1mdWxsXCJcblx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YGhvcml6b250YWwtcm93LWxhYmVsLSR7cmVzb3VyY2U/LmlkfWB9XG5cdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3JlbmRlclJlc291cmNlID8gKFxuXHRcdFx0XHRcdFx0cmVuZGVyUmVzb3VyY2UocmVzb3VyY2UpXG5cdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwid3JhcC1icmVhay13b3JkIHRleHQtc21cIj57cmVzb3VyY2U/LnRpdGxlfTwvZGl2PlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdDwvUmVzb3VyY2VDZWxsPlxuXHRcdFx0KX1cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleC0xIGZsZXhcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbFwiPlxuXHRcdFx0XHRcdHtjb2x1bW5zLm1hcCgoY29sKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J2ZsZXgtMSB3LTIwJyxcblx0XHRcdFx0XHRcdFx0XHRcdGlzTGFzdFJvdyAmJiAnYm9yZGVyLWItMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2wuY2xhc3NOYW1lXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkYXk9e2NvbC5kYXl9XG5cdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdGhvdXI9e2dyaWRUeXBlID09PSAnaG91cicgPyBjb2wuZGF5LmhvdXIoKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2NvbC5kYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZT8uaWR9XG5cdFx0XHRcdFx0XHRcdFx0c2hvd0RheU51bWJlcj17c2hvd0RheU51bWJlcn1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0ey8qIEV2ZW50cyBsYXllciBwb3NpdGlvbmVkIGFic29sdXRlbHkgb3ZlciB0aGUgcm93ICovfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgei0xMCBwb2ludGVyLWV2ZW50cy1ub25lXCI+XG5cdFx0XHRcdFx0PEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJcblx0XHRcdFx0XHRcdGFsbERheT17YWxsRGF5fVxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2Bob3Jpem9udGFsLWV2ZW50cy0ke2lkfWB9XG5cdFx0XHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQ9e2RheU51bWJlckhlaWdodH1cblx0XHRcdFx0XHRcdGRheXM9e2NvbHVtbnMubWFwKChjb2wpID0+IGNvbC5kYXkpLmZpbHRlcihCb29sZWFuKX1cblx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlPy5pZH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBIb3Jpem9udGFsR3JpZFJvdyA9IG1lbW8oTm9NZW1vSG9yaXpvbnRhbEdyaWRSb3cpXG4iLAogICAgImltcG9ydCBSZWFjdCwgeyBtZW1vLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEYXlOdW1iZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvZGF5LW51bWJlcidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGlzQnVzaW5lc3NIb3VyIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3VycydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB0eXBlIHsgU2VsZWN0ZWREYXlFdmVudHMgfSBmcm9tICcuL2FsbC1ldmVudHMtZGlhbG9nJ1xuaW1wb3J0IHsgQWxsRXZlbnREaWFsb2cgfSBmcm9tICcuL2FsbC1ldmVudHMtZGlhbG9nJ1xuaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJy4vZHJvcHBhYmxlLWNlbGwnXG5cbmludGVyZmFjZSBHcmlkUHJvcHMge1xuXHRkYXk6IGRheWpzLkRheWpzXG5cdGhvdXI/OiBudW1iZXIgLy8gT3B0aW9uYWwgaG91ciBmb3IgaG91ci1iYXNlZCBncmlkc1xuXHRtaW51dGU/OiBudW1iZXIgLy8gT3B0aW9uYWwgbWludXRlIGZvciBtb3JlIGdyYW51bGFyIHRpbWUgc2xvdHNcblx0ZGF5TWF4RXZlbnRzPzogbnVtYmVyXG5cdGNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjbGFzc05hbWUgZm9yIGN1c3RvbSBzdHlsaW5nXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXIgLy8gT3B0aW9uYWwgcmVzb3VyY2UgSUQgZm9yIHJlc291cmNlLXNwZWNpZmljIGRheSBjZWxsc1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInIC8vIEZ1dHVyZSB1c2UgZm9yIGRpZmZlcmVudCBncmlkIHR5cGVzXG5cdHNob3VsZFJlbmRlckV2ZW50cz86IGJvb2xlYW4gLy8gRmxhZyB0byBkZXRlcm1pbmUgaWYgZXZlbnRzIHNob3VsZCBiZSByZW5kZXJlZFxuXHRhbGxEYXk/OiBib29sZWFuIC8vIEZsYWcgdG8gaW5kaWNhdGUgaWYgdGhpcyBpcyBhbiBhbGwtZGF5IGNlbGxcblx0c2hvd0RheU51bWJlcj86IGJvb2xlYW4gLy8gRmxhZyB0byBzaG93IG9yIGhpZGUgdGhlIGRheSBudW1iZXJcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5jb25zdCBOb01lbW9HcmlkQ2VsbDogUmVhY3QuRkM8R3JpZFByb3BzPiA9ICh7XG5cdGRheSxcblx0aG91cixcblx0bWludXRlLFxuXHRjbGFzc05hbWUgPSAnJyxcblx0cmVzb3VyY2VJZCxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0c2hvdWxkUmVuZGVyRXZlbnRzID0gdHJ1ZSxcblx0YWxsRGF5ID0gZmFsc2UsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG5cdHNob3dEYXlOdW1iZXIgPSBmYWxzZSxcblx0Y2hpbGRyZW4sXG59KSA9PiB7XG5cdGNvbnN0IGFsbEV2ZW50c0RpYWxvZ1JlZiA9IFJlYWN0LnVzZVJlZjx7XG5cdFx0b3BlbjogKCkgPT4gdm9pZFxuXHRcdGNsb3NlOiAoKSA9PiB2b2lkXG5cdFx0c2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG5cdH0+KG51bGwpXG5cdGNvbnN0IHtcblx0XHRkYXlNYXhFdmVudHMgPSAwLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRjdXJyZW50RGF0ZSxcblx0XHR0LFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChzdGF0ZSkgPT4gKHtcblx0XHRkYXlNYXhFdmVudHM6IHN0YXRlLmRheU1heEV2ZW50cyxcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IHN0YXRlLmdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRjdXJyZW50RGF0ZTogc3RhdGUuY3VycmVudERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWs6IHN0YXRlLmZpcnN0RGF5T2ZXZWVrLFxuXHRcdHQ6IHN0YXRlLnQsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2U6IHN0YXRlLmdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdGJ1c2luZXNzSG91cnM6IHN0YXRlLmJ1c2luZXNzSG91cnMsXG5cdFx0Y3VycmVudExvY2FsZTogc3RhdGUuY3VycmVudExvY2FsZSxcblx0fSkpXG5cblx0Y29uc3QgdG9kYXlFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoIXNob3VsZFJlbmRlckV2ZW50cykge1xuXHRcdFx0cmV0dXJuIFtdXG5cdFx0fVxuXG5cdFx0bGV0IHRvZGF5RXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKFxuXHRcdFx0ZGF5LnN0YXJ0T2YoZ3JpZFR5cGUpLFxuXHRcdFx0ZGF5LmVuZE9mKGdyaWRUeXBlKVxuXHRcdClcblxuXHRcdGlmIChhbGxEYXkpIHtcblx0XHRcdHRvZGF5RXZlbnRzID0gdG9kYXlFdmVudHMuZmlsdGVyKChlKSA9PiBlLmFsbERheSlcblx0XHR9XG5cblx0XHRpZiAocmVzb3VyY2VJZCkge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VFdmVudHMgPSBnZXRFdmVudHNGb3JSZXNvdXJjZShyZXNvdXJjZUlkKSA/PyBbXVxuXG5cdFx0XHRyZXR1cm4gdG9kYXlFdmVudHMuZmlsdGVyKChldmVudCkgPT5cblx0XHRcdFx0cmVzb3VyY2VFdmVudHMuc29tZSgocmUpID0+IFN0cmluZyhyZS5pZCkgPT09IFN0cmluZyhldmVudC5pZCkpXG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRvZGF5RXZlbnRzXG5cdH0sIFtcblx0XHRkYXksXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0Z3JpZFR5cGUsXG5cdFx0c2hvdWxkUmVuZGVyRXZlbnRzLFxuXHRcdGFsbERheSxcblx0XSlcblxuXHQvLyBIYW5kbGVyIGZvciBzaG93aW5nIGFsbCBldmVudHMgaW4gYSBkaWFsb2dcblx0Y29uc3Qgc2hvd0FsbEV2ZW50cyA9IChkYXk6IGRheWpzLkRheWpzLCBldmVudHM6IENhbGVuZGFyRXZlbnRbXSkgPT4ge1xuXHRcdGFsbEV2ZW50c0RpYWxvZ1JlZi5jdXJyZW50Py5zZXRTZWxlY3RlZERheUV2ZW50cyh7XG5cdFx0XHRkYXksXG5cdFx0XHRldmVudHMsXG5cdFx0fSlcblx0XHRhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8ub3BlbigpXG5cdH1cblxuXHRjb25zdCBpc0N1cnJlbnRNb250aCA9IGRheS5tb250aCgpID09PSBjdXJyZW50RGF0ZS5tb250aCgpXG5cblx0Y29uc3QgaGlkZGVuRXZlbnRzQ291bnQgPSB0b2RheUV2ZW50cy5sZW5ndGggLSBkYXlNYXhFdmVudHNcblx0Y29uc3QgaGFzSGlkZGVuRXZlbnRzID0gaGlkZGVuRXZlbnRzQ291bnQgPiAwXG5cblx0Y29uc3QgaXNCdXNpbmVzcyA9IGlzQnVzaW5lc3NIb3VyKHtcblx0XHRkYXRlOiBkYXksXG5cdFx0aG91cjogZ3JpZFR5cGUgPT09ICdob3VyJyA/IGRheS5ob3VyKCkgOiB1bmRlZmluZWQsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0fSlcblxuXHRjb25zdCBob3VyU3RyID0gZGF5LmZvcm1hdCgnSEgnKVxuXHRjb25zdCBtbSA9IGRheS5mb3JtYXQoJ21tJylcblx0Y29uc3QgZGF0ZVRlc3RJZEJhc2UgPVxuXHRcdGdyaWRUeXBlID09PSAnaG91cidcblx0XHRcdD8gYGRheS1jZWxsLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfS0ke2hvdXJTdHJ9LSR7bW19YFxuXHRcdFx0OiBgZGF5LWNlbGwtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YFxuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxEcm9wcGFibGVDZWxsXG5cdFx0XHRcdGFsbERheT17YWxsRGF5fVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdjdXJzb3ItcG9pbnRlciBvdmVyZmxvdy1jbGlwIHAtMSBob3ZlcjpiZy1hY2NlbnQgbWluLWgtWzYwcHhdIHJlbGF0aXZlIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBvbmx5OmJvcmRlci1yIGJvcmRlci1iJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWQgfHwgZGF0ZVRlc3RJZEJhc2V9XG5cdFx0XHRcdGRhdGU9e2RheX1cblx0XHRcdFx0ZGlzYWJsZWQ9eyFpc0J1c2luZXNzIHx8ICFpc0N1cnJlbnRNb250aH1cblx0XHRcdFx0aG91cj17aG91cn1cblx0XHRcdFx0aWQ9e2BkYXktY2VsbC0ke2RheS50b0lTT1N0cmluZygpfSR7cmVzb3VyY2VJZCA/IGAtcmVzb3VyY2UtJHtyZXNvdXJjZUlkfWAgOiAnJ31gfVxuXHRcdFx0XHRtaW51dGU9e21pbnV0ZX1cblx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cblx0XHRcdFx0dHlwZT1cImRheS1jZWxsXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0xIGgtZnVsbCB3LWZ1bGxcIj5cblx0XHRcdFx0XHR7c2hvd0RheU51bWJlciAmJiA8RGF5TnVtYmVyIGRhdGU9e2RheX0gbG9jYWxlPXtjdXJyZW50TG9jYWxlfSAvPn1cblxuXHRcdFx0XHRcdHtzaG91bGRSZW5kZXJFdmVudHMgJiYgKFxuXHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0ey8qIFJlbmRlciBwbGFjZWhvbGRlcnMgZm9yIGV2ZW50cyB0aGF0IG9jY3VyIHRvZGF5IHNvIHRoYXQgdGhlIGNlbGwgaGVpZ2h0IGlzIGFjY29yZGluZyB0byBkYXlNYXhFdmVudHMuICovfVxuXHRcdFx0XHRcdFx0XHR7dG9kYXlFdmVudHMuc2xpY2UoMCwgZGF5TWF4RXZlbnRzKS5tYXAoKGV2ZW50LCByb3dJbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtNSB3LWZ1bGxcIlxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2V2ZW50Py50aXRsZX1cblx0XHRcdFx0XHRcdFx0XHRcdGtleT17YGVtcHR5LSR7cm93SW5kZXh9LSR7ZXZlbnQuaWR9YH1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQpKX1cblxuXHRcdFx0XHRcdFx0XHR7LyogU2hvdyBtb3JlIGV2ZW50cyBidXR0b24gd2l0aCBhY2N1cmF0ZSBjb3VudCAqL31cblx0XHRcdFx0XHRcdFx0e2hhc0hpZGRlbkV2ZW50cyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGhvdmVyOnRleHQtZm9yZWdyb3VuZCBjdXJzb3ItcG9pbnRlciB0ZXh0LVsxMHB4XSB3aGl0ZXNwYWNlLW5vd3JhcCBzbTp0ZXh0LXhzIG10LTFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dBbGxFdmVudHMoZGF5LCB0b2RheUV2ZW50cylcblx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRvbktleURvd249eyhlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChlLmtleSA9PT0gJ0VudGVyJyB8fCBlLmtleSA9PT0gJyAnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dBbGxFdmVudHMoZGF5LCB0b2RheUV2ZW50cylcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdHJvbGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci10YWctb3Zlci1yb2xlXG5cdFx0XHRcdFx0XHRcdFx0XHR0YWJJbmRleD17MH1cblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHQre2hpZGRlbkV2ZW50c0NvdW50fSB7dCgnbW9yZScpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9Ecm9wcGFibGVDZWxsPlxuXG5cdFx0XHR7LyogRGlhbG9nIGZvciBzaG93aW5nIGFsbCBldmVudHMgKi99XG5cdFx0XHQ8QWxsRXZlbnREaWFsb2cgcmVmPXthbGxFdmVudHNEaWFsb2dSZWZ9IC8+XG5cdFx0PC8+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEdyaWRDZWxsID0gbWVtbyhOb01lbW9HcmlkQ2VsbCkgYXMgdHlwZW9mIE5vTWVtb0dyaWRDZWxsXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIERheU51bWJlclByb3BzIHtcblx0ZGF0ZTogZGF5anMuRGF5anNcblx0bG9jYWxlPzogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGRheSBudW1iZXIgZm9yIGEgY2FsZW5kYXIgY2VsbCwgaGlnaGxpZ2h0aW5nICd0b2RheScgd2l0aCBhIHByaW1hcnkgYmFja2dyb3VuZC5cbiAqL1xuZXhwb3J0IGNvbnN0IERheU51bWJlcjogUmVhY3QuRkM8RGF5TnVtYmVyUHJvcHM+ID0gKHtcblx0ZGF0ZSxcblx0bG9jYWxlID0gJ2VuJyxcblx0Y2xhc3NOYW1lLFxufSkgPT4ge1xuXHRjb25zdCBpc1RvZGF5ID0gZGF0ZS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cyBzaHJpbmstMCcsXG5cdFx0XHRcdGlzVG9kYXkgJiYgJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZm9udC1tZWRpdW0nLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17XG5cdFx0XHRcdGlzVG9kYXkgPyAnZGF5LW51bWJlci10b2RheScgOiBgZGF5LW51bWJlci0ke2RhdGUuZm9ybWF0KCdEJyl9YFxuXHRcdFx0fVxuXHRcdD5cblx0XHRcdHtJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwgeyBkYXk6ICdudW1lcmljJyB9KS5mb3JtYXQoZGF0ZS50b0RhdGUoKSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VJbXBlcmF0aXZlSGFuZGxlLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ29udGVudCxcblx0RGlhbG9nSGVhZGVyLFxuXHREaWFsb2dUaXRsZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RpYWxvZydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RlZERheUV2ZW50cyB7XG5cdGRheTogZGF5anMuRGF5anNcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbn1cblxuaW50ZXJmYWNlIEFsbEV2ZW50RGlhbG9nUHJvcHMge1xuXHRyZWY6IFJlYWN0LlJlZjx7XG5cdFx0b3BlbjogKCkgPT4gdm9pZFxuXHRcdGNsb3NlOiAoKSA9PiB2b2lkXG5cdFx0c2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG5cdH0+XG59XG5cbmV4cG9ydCBjb25zdCBBbGxFdmVudERpYWxvZzogUmVhY3QuRkM8QWxsRXZlbnREaWFsb2dQcm9wcz4gPSAoeyByZWYgfSkgPT4ge1xuXHRjb25zdCBbZGlhbG9nT3Blbiwgc2V0RGlhbG9nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkRGF5RXZlbnRzLCBzZXRTZWxlY3RlZERheUV2ZW50c10gPVxuXHRcdHVzZVN0YXRlPFNlbGVjdGVkRGF5RXZlbnRzIHwgbnVsbD4obnVsbClcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWsgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChzdGF0ZSkgPT4gKHtcblx0XHRjdXJyZW50RGF0ZTogc3RhdGUuY3VycmVudERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWs6IHN0YXRlLmZpcnN0RGF5T2ZXZWVrLFxuXHR9KSlcblxuXHR1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcblx0XHRvcGVuOiAoKSA9PiBzZXREaWFsb2dPcGVuKHRydWUpLFxuXHRcdGNsb3NlOiAoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKSxcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+XG5cdFx0XHRzZXRTZWxlY3RlZERheUV2ZW50cyhkYXlFdmVudHMpLFxuXHR9KSlcblxuXHQvLyBHZXQgc3RhcnQgZGF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9udGggdmlldyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuXHRjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cblx0Ly8gQ2FsY3VsYXRlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGNhbGVuZGFyIGdyaWQgY29ycmVjdGx5XG5cdC8vIEZpbmQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIChlLmcuIFN1bmRheSBvciBNb25kYXkpIHRoYXQgY29tZXMgYmVmb3JlIG9yIG9uIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoXG5cdGxldCBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGZpcnN0RGF5T2ZNb250aC5jbG9uZSgpXG5cdHdoaWxlIChhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5kYXkoKSAhPT0gZmlyc3REYXlPZldlZWspIHtcblx0XHRhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLnN1YnRyYWN0KDEsICdkYXknKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17c2V0RGlhbG9nT3Blbn0gb3Blbj17ZGlhbG9nT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtaC1bODB2aF0gbWF4LXctbWQgb3ZlcmZsb3cteS1hdXRvXCI+XG5cdFx0XHRcdDxEaWFsb2dIZWFkZXI+XG5cdFx0XHRcdFx0PERpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRGF5RXZlbnRzPy5kYXkuZm9ybWF0KCdNTU1NIEQsIFlZWVknKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHQ8L0RpYWxvZ0hlYWRlcj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJtdC00IHNwYWNlLXktM1wiPlxuXHRcdFx0XHRcdHtzZWxlY3RlZERheUV2ZW50cz8uZXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxEcmFnZ2FibGVFdmVudFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIG15LTEgaC1bMzBweF1cIiAvLyBVc2UgZXZlbnQgSUQgZm9yIHVuaXF1ZSBpZGVudGlmaWNhdGlvblxuXHRcdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17YGFsbC1ldmVudHMtZGlhbG9nLWV2ZW50LSQke2V2ZW50LmlkfWB9XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQ9e2V2ZW50fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17ZXZlbnQuaWR9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9EaWFsb2dDb250ZW50PlxuXHRcdDwvRGlhbG9nPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZURyYWdnYWJsZSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB0eXBlIHsgQ1NTUHJvcGVydGllcyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgZ2V0Qm9yZGVyUmFkaXVzQ2xhc3MgPSAoXG5cdGlzVHJ1bmNhdGVkU3RhcnQ6IGJvb2xlYW4sXG5cdGlzVHJ1bmNhdGVkRW5kOiBib29sZWFuXG4pID0+IHtcblx0aWYgKGlzVHJ1bmNhdGVkU3RhcnQgJiYgaXNUcnVuY2F0ZWRFbmQpIHtcblx0XHRyZXR1cm4gJ3JvdW5kZWQtbm9uZSdcblx0fVxuXHRpZiAoaXNUcnVuY2F0ZWRTdGFydCkge1xuXHRcdHJldHVybiAncm91bmRlZC1yLW1kIHJvdW5kZWQtbC1ub25lJ1xuXHR9XG5cdGlmIChpc1RydW5jYXRlZEVuZCkge1xuXHRcdHJldHVybiAncm91bmRlZC1sLW1kIHJvdW5kZWQtci1ub25lJ1xuXHR9XG5cdHJldHVybiAncm91bmRlZC1tZCdcbn1cblxuZnVuY3Rpb24gRHJhZ2dhYmxlRXZlbnRVbm1lbW9pemVkKHtcblx0ZWxlbWVudElkLFxuXHRldmVudCxcblx0Y2xhc3NOYW1lLFxuXHRzdHlsZSxcblx0ZGlzYWJsZURyYWcgPSBmYWxzZSxcbn06IHtcblx0ZWxlbWVudElkOiBzdHJpbmdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdHN0eWxlPzogQ1NTUHJvcGVydGllc1xuXHRldmVudDogQ2FsZW5kYXJFdmVudFxuXHRkaXNhYmxlRHJhZz86IGJvb2xlYW5cbn0pIHtcblx0Y29uc3QgeyBvbkV2ZW50Q2xpY2ssIHJlbmRlckV2ZW50LCBkaXNhYmxlRXZlbnRDbGljaywgZGlzYWJsZURyYWdBbmREcm9wIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChzdGF0ZSkgPT4gKHtcblx0XHRcdG9uRXZlbnRDbGljazogc3RhdGUub25FdmVudENsaWNrLFxuXHRcdFx0cmVuZGVyRXZlbnQ6IHN0YXRlLnJlbmRlckV2ZW50LFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2s6IHN0YXRlLmRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wOiBzdGF0ZS5kaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0fSkpXG5cblx0Y29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMsIHNldE5vZGVSZWYsIGlzRHJhZ2dpbmcgfSA9IHVzZURyYWdnYWJsZSh7XG5cdFx0aWQ6IGVsZW1lbnRJZCxcblx0XHRkYXRhOiB7XG5cdFx0XHRldmVudCxcblx0XHRcdHR5cGU6ICdjYWxlbmRhci1ldmVudCcsXG5cdFx0fSxcblx0XHRkaXNhYmxlZDogZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wLFxuXHR9KVxuXG5cdC8vIERlZmF1bHQgZXZlbnQgY29udGVudCB0byByZW5kZXIgaWYgY3VzdG9tIHJlbmRlckV2ZW50IGlzIG5vdCBwcm92aWRlZFxuXHRjb25zdCBEZWZhdWx0RXZlbnRDb250ZW50ID0gKCkgPT4ge1xuXHRcdC8vIENoZWNrIGlmIHRoaXMgZXZlbnQgaGFzIHRydW5jYXRpb24gaW5mb3JtYXRpb25cblx0XHRjb25zdCBlbmhhbmNlZEV2ZW50ID0gZXZlbnQgYXMgdW5rbm93biBhcyB7XG5cdFx0XHRpc1RydW5jYXRlZFN0YXJ0PzogYm9vbGVhblxuXHRcdFx0aXNUcnVuY2F0ZWRFbmQ/OiBib29sZWFuXG5cdFx0fVxuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBlbmhhbmNlZEV2ZW50LmlzVHJ1bmNhdGVkU3RhcnRcblx0XHRjb25zdCBpc1RydW5jYXRlZEVuZCA9IGVuaGFuY2VkRXZlbnQuaXNUcnVuY2F0ZWRFbmRcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0ZXZlbnQuYmFja2dyb3VuZENvbG9yIHx8ICdiZy1ibHVlLTUwMCcsXG5cdFx0XHRcdFx0ZXZlbnQuY29sb3IgfHwgJ3RleHQtd2hpdGUnLFxuXHRcdFx0XHRcdCdoLWZ1bGwgdy1mdWxsIHB4LTEgYm9yZGVyLVsxLjVweF0gYm9yZGVyLWNhcmQgdGV4dC1sZWZ0IG92ZXJmbG93LWNsaXAgcmVsYXRpdmUnLFxuXHRcdFx0XHRcdGdldEJvcmRlclJhZGl1c0NsYXNzKGlzVHJ1bmNhdGVkU3RhcnQsIGlzVHJ1bmNhdGVkRW5kKVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGV2ZW50LmJhY2tncm91bmRDb2xvciwgY29sb3I6IGV2ZW50LmNvbG9yIH19XG5cdFx0XHQ+XG5cdFx0XHRcdHsvKiBMZWZ0IGNvbnRpbnVhdGlvbiBpbmRpY2F0b3IgKi99XG5cdFx0XHRcdHtpc1RydW5jYXRlZFN0YXJ0ICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGxlZnQtMCB0b3AtMCBib3R0b20tMCB3LTAuNSBiZy1mb3JlZ3JvdW5kLzI1XCI+PC9kaXY+XG5cdFx0XHRcdCl9XG5cblx0XHRcdFx0ey8qIEV2ZW50IHRpdGxlICovfVxuXHRcdFx0XHQ8cFxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQndGV4dC1bMTBweF0gZm9udC1zZW1pYm9sZCBzbTp0ZXh0LXhzIG10LTAuNScsXG5cdFx0XHRcdFx0XHQvLyBBZGQgc2xpZ2h0IHBhZGRpbmcgdG8gYXZvaWQgb3ZlcmxhcCB3aXRoIGluZGljYXRvcnNcblx0XHRcdFx0XHRcdGlzVHJ1bmNhdGVkU3RhcnQgJiYgJ3BsLTEnLFxuXHRcdFx0XHRcdFx0aXNUcnVuY2F0ZWRFbmQgJiYgJ3ByLTEnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHtldmVudC50aXRsZX1cblx0XHRcdFx0PC9wPlxuXG5cdFx0XHRcdHsvKiBSaWdodCBjb250aW51YXRpb24gaW5kaWNhdG9yICovfVxuXHRcdFx0XHR7aXNUcnVuY2F0ZWRFbmQgJiYgKFxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtMCB0b3AtMCBib3R0b20tMCB3LTAuNSBiZy1mb3JlZ3JvdW5kLzI1XCI+PC9kaXY+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cblx0XHRcdDxtb3Rpb24uZGl2XG5cdFx0XHRcdGtleT17ZWxlbWVudElkfVxuXHRcdFx0XHRyZWY9e3NldE5vZGVSZWZ9XG5cdFx0XHRcdHsuLi5hdHRyaWJ1dGVzfVxuXHRcdFx0XHR7Li4ubGlzdGVuZXJzfVxuXHRcdFx0XHRhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQndHJ1bmNhdGUgaC1mdWxsIHctZnVsbCcsXG5cdFx0XHRcdFx0ZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wXG5cdFx0XHRcdFx0XHQ/IGRpc2FibGVFdmVudENsaWNrXG5cdFx0XHRcdFx0XHRcdD8gJ2N1cnNvci1kZWZhdWx0J1xuXHRcdFx0XHRcdFx0XHQ6ICdjdXJzb3ItcG9pbnRlcidcblx0XHRcdFx0XHRcdDogJ2N1cnNvci1ncmFiJyxcblx0XHRcdFx0XHRpc0RyYWdnaW5nICYmXG5cdFx0XHRcdFx0XHQhKGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcCkgJiZcblx0XHRcdFx0XHRcdCdjdXJzb3ItZ3JhYmJpbmcgc2hhZG93LWxnJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZXhpdD17eyBvcGFjaXR5OiAwLCB5OiAtNTAgfX1cblx0XHRcdFx0aW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiAtNTAgfX1cblx0XHRcdFx0bGF5b3V0XG5cdFx0XHRcdGxheW91dElkPXtlbGVtZW50SWR9XG5cdFx0XHRcdG9uQ2xpY2s9eyhlKSA9PiB7XG5cdFx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRcdG9uRXZlbnRDbGljayhldmVudClcblx0XHRcdFx0fX1cblx0XHRcdFx0c3R5bGU9e3N0eWxlfVxuXHRcdFx0XHR0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjQsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG5cdFx0XHQ+XG5cdFx0XHRcdHsvKiBVc2UgY3VzdG9tIHJlbmRlckV2ZW50IGZyb20gY29udGV4dCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB1c2UgZGVmYXVsdCAqL31cblx0XHRcdFx0e3JlbmRlckV2ZW50ID8gcmVuZGVyRXZlbnQoZXZlbnQpIDogPERlZmF1bHRFdmVudENvbnRlbnQgLz59XG5cdFx0XHQ8L21vdGlvbi5kaXY+XG5cdFx0PC9BbmltYXRlUHJlc2VuY2U+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IERyYWdnYWJsZUV2ZW50ID0gbWVtbyhcblx0RHJhZ2dhYmxlRXZlbnRVbm1lbW9pemVkLFxuXHQocHJldlByb3BzLCBuZXh0UHJvcHMpID0+IHtcblx0XHQvLyBDb21wYXJlIHRoZSBlc3NlbnRpYWwgcHJvcHMgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzXG5cdFx0cmV0dXJuIChcblx0XHRcdHByZXZQcm9wcy5lbGVtZW50SWQgPT09IG5leHRQcm9wcy5lbGVtZW50SWQgJiZcblx0XHRcdHByZXZQcm9wcy5kaXNhYmxlRHJhZyA9PT0gbmV4dFByb3BzLmRpc2FibGVEcmFnICYmXG5cdFx0XHRwcmV2UHJvcHMuY2xhc3NOYW1lID09PSBuZXh0UHJvcHMuY2xhc3NOYW1lICYmXG5cdFx0XHRwcmV2UHJvcHMuZXZlbnQgPT09IG5leHRQcm9wcy5ldmVudFxuXHRcdClcblx0fVxuKVxuIiwKICAgICIvLyBveGxpbnQtZGlzYWJsZSBuby1uZWdhdGVkLWNvbmRpdGlvblxuXG5pbXBvcnQgeyB1c2VEcm9wcGFibGUgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IERJU0FCTEVEX0NFTExfQ0xBU1NOQU1FIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIERyb3BwYWJsZUNlbGxQcm9wcyB7XG5cdGlkOiBzdHJpbmdcblx0dHlwZTogJ2RheS1jZWxsJyB8ICd0aW1lLWNlbGwnXG5cdGRhdGU6IGRheWpzLkRheWpzXG5cdGhvdXI/OiBudW1iZXJcblx0bWludXRlPzogbnVtYmVyXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0YWxsRGF5PzogYm9vbGVhblxuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0c3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcblx0ZGlzYWJsZWQ/OiBib29sZWFuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEcm9wcGFibGVDZWxsKHtcblx0aWQsXG5cdHR5cGUsXG5cdGRhdGUsXG5cdGhvdXIsXG5cdG1pbnV0ZSxcblx0cmVzb3VyY2VJZCxcblx0YWxsRGF5LFxuXHRjaGlsZHJlbixcblx0Y2xhc3NOYW1lLFxuXHRzdHlsZSxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcblx0ZGlzYWJsZWQgPSBmYWxzZSxcbn06IERyb3BwYWJsZUNlbGxQcm9wcykge1xuXHRjb25zdCB7IG9uQ2VsbENsaWNrLCBkaXNhYmxlRHJhZ0FuZERyb3AsIGRpc2FibGVDZWxsQ2xpY2ssIGNsYXNzZXNPdmVycmlkZSB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoc3RhdGUpID0+ICh7XG5cdFx0XHRvbkNlbGxDbGljazogc3RhdGUub25DZWxsQ2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3A6IHN0YXRlLmRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRcdGRpc2FibGVDZWxsQ2xpY2s6IHN0YXRlLmRpc2FibGVDZWxsQ2xpY2ssXG5cdFx0XHRjbGFzc2VzT3ZlcnJpZGU6IHN0YXRlLmNsYXNzZXNPdmVycmlkZSxcblx0XHR9KSlcblxuXHRjb25zdCB7IGlzT3Zlciwgc2V0Tm9kZVJlZiB9ID0gdXNlRHJvcHBhYmxlKHtcblx0XHRpZCxcblx0XHRkYXRhOiB7XG5cdFx0XHR0eXBlLFxuXHRcdFx0ZGF0ZSxcblx0XHRcdGhvdXIsXG5cdFx0XHRtaW51dGUsXG5cdFx0XHRyZXNvdXJjZUlkLFxuXHRcdFx0YWxsRGF5LFxuXHRcdH0sXG5cdFx0ZGlzYWJsZWQ6IGRpc2FibGVEcmFnQW5kRHJvcCB8fCBkaXNhYmxlZCxcblx0fSlcblxuXHRjb25zdCBoYW5kbGVDZWxsQ2xpY2sgPSAoZTogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuXHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblxuXHRcdGlmIChkaXNhYmxlQ2VsbENsaWNrIHx8IGRpc2FibGVkKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRjb25zdCBzdGFydCA9IGRhdGUuaG91cihob3VyID8/IDApLm1pbnV0ZShtaW51dGUgPz8gMClcblx0XHRsZXQgZW5kID0gc3RhcnQuY2xvbmUoKVxuXHRcdGlmIChob3VyICE9PSB1bmRlZmluZWQgJiYgbWludXRlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGVuZCA9IGVuZC5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGUgKyAxNSkgLy8gZGF5IHZpZXcgdGltZSBzbG90cyBhcmUgMTUgbWludXRlc1xuXHRcdH0gZWxzZSBpZiAoaG91ciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRlbmQgPSBlbmQuaG91cihob3VyICsgMSkubWludXRlKDApIC8vIHdlZWsgdmlldyB0aW1lIHNsb3RzIGFyZSAxIGhvdXJcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZW5kID0gZW5kLmhvdXIoMjMpLm1pbnV0ZSg1OSkgLy8gbW9udGggdmlldyBmdWxsIGRheVxuXHRcdH1cblxuXHRcdG9uQ2VsbENsaWNrKHsgc3RhcnQsIGVuZCwgcmVzb3VyY2VJZCwgYWxsRGF5IH0pXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBjbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2Ryb3BwYWJsZS1jZWxsJyxcblx0XHRcdFx0Y2xhc3NOYW1lLFxuXHRcdFx0XHRpc092ZXIgJiYgIWRpc2FibGVEcmFnQW5kRHJvcCAmJiAhZGlzYWJsZWQgJiYgJ2JnLWFjY2VudCcsXG5cdFx0XHRcdGRpc2FibGVDZWxsQ2xpY2sgfHwgZGlzYWJsZWQgPyAnY3Vyc29yLWRlZmF1bHQnIDogJ2N1cnNvci1wb2ludGVyJyxcblx0XHRcdFx0ZGlzYWJsZWQgJiYgKGNsYXNzZXNPdmVycmlkZT8uZGlzYWJsZWRDZWxsIHx8IERJU0FCTEVEX0NFTExfQ0xBU1NOQU1FKVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkfVxuXHRcdFx0b25DbGljaz17aGFuZGxlQ2VsbENsaWNrfVxuXHRcdFx0cmVmPXtzZXROb2RlUmVmfVxuXHRcdFx0c3R5bGU9e3N0eWxlfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBSZXNvdXJjZUNlbGxQcm9wcyB7XG5cdHJlc291cmNlOiBSZXNvdXJjZVxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDZWxsOiBSZWFjdC5GQzxSZXNvdXJjZUNlbGxQcm9wcz4gPSAoe1xuXHRyZXNvdXJjZSxcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcbn0pID0+IHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC0yIGZsZXgtMSBib3JkZXItciBsYXN0OmJvcmRlci1yLTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdGNvbG9yOiByZXNvdXJjZS5jb2xvcixcblx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiByZXNvdXJjZS5iYWNrZ3JvdW5kQ29sb3IsXG5cdFx0XHR9fVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbiA/PyAoXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bSB0cnVuY2F0ZVwiPntyZXNvdXJjZS50aXRsZX08L2Rpdj5cblx0XHRcdCl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZFdlZWtFdmVudHMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEVWRU5UX0JBUl9IRUlHSFQgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllclByb3BzIHtcblx0ZGF5czogZGF5anMuRGF5anNbXVxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcblx0YWxsRGF5PzogYm9vbGVhblxufVxuXG5jb25zdCBOb01lbW9Ib3Jpem9udGFsR3JpZEV2ZW50c0xheWVyOiBSZWFjdC5GQzxcblx0SG9yaXpvbnRhbEdyaWRFdmVudHNMYXllclByb3BzXG4+ID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0cmVzb3VyY2VJZCxcblx0ZGF5TnVtYmVySGVpZ2h0LFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxuXHRhbGxEYXksXG59KSA9PiB7XG5cdGNvbnN0IHdlZWtTdGFydCA9IGRheXMuYXQoMCkuc3RhcnRPZignZGF5JylcblxuXHRjb25zdCBwcm9jZXNzZWRXZWVrRXZlbnRzID0gdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyh7XG5cdFx0ZGF5cyxcblx0XHRncmlkVHlwZSxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGRheU51bWJlckhlaWdodCxcblx0XHRhbGxEYXksXG5cdH0pXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHBvaW50ZXItZXZlbnRzLW5vbmUgei0xMCBvdmVyZmxvdy1jbGlwXCJcblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkfVxuXHRcdD5cblx0XHRcdHtwcm9jZXNzZWRXZWVrRXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnRLZXkgPSBgJHtldmVudC5pZH0tJHtldmVudC5wb3NpdGlvbn0tJHt3ZWVrU3RhcnQudG9JU09TdHJpbmcoKX0tJHtyZXNvdXJjZUlkID8/ICduby1yZXNvdXJjZSd9YFxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGUgei0xMCBwb2ludGVyLWV2ZW50cy1hdXRvIG92ZXJmbG93LWNsaXBcIlxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2Bob3Jpem9udGFsLWV2ZW50LSR7ZXZlbnQuaWR9YH1cblx0XHRcdFx0XHRcdGtleT17YCR7ZXZlbnRLZXl9LXdyYXBwZXJgfVxuXHRcdFx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRcdFx0bGVmdDogYGNhbGMoJHtldmVudC5sZWZ0fSUgKyB2YXIoLS1zcGFjaW5nKSAqIDAuMjUpYCxcblx0XHRcdFx0XHRcdFx0d2lkdGg6IGBjYWxjKCR7ZXZlbnQud2lkdGh9JSAtIHZhcigtLXNwYWNpbmcpICogMSlgLFxuXHRcdFx0XHRcdFx0XHR0b3A6IGAke2V2ZW50LnRvcH1weGAsXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogYCR7RVZFTlRfQkFSX0hFSUdIVH1weGAsXG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxEcmFnZ2FibGVFdmVudFxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLWZ1bGwgdy1mdWxsIHNoYWRvd1wiXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17ZXZlbnRLZXl9XG5cdFx0XHRcdFx0XHRcdGV2ZW50PXtldmVudH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyID0gbWVtbyhOb01lbW9Ib3Jpem9udGFsR3JpZEV2ZW50c0xheWVyKVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGdldFBvc2l0aW9uZWRFdmVudHMgfSBmcm9tICdAL2xpYi91dGlscy9wb3NpdGlvbi13ZWVrLWV2ZW50cydcblxuaW50ZXJmYWNlIFVzZVByb2Nlc3NlZFdlZWtFdmVudHNQcm9wcyB7XG5cdGRheXM6IGRheWpzLkRheWpzW11cblx0YWxsRGF5PzogYm9vbGVhblxuXHRkYXlOdW1iZXJIZWlnaHQ/OiBudW1iZXJcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzID0gKHtcblx0ZGF5cyxcblx0YWxsRGF5LFxuXHRkYXlOdW1iZXJIZWlnaHQsXG5cdHJlc291cmNlSWQsXG5cdGdyaWRUeXBlLFxufTogVXNlUHJvY2Vzc2VkV2Vla0V2ZW50c1Byb3BzKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdGV2ZW50U3BhY2luZyxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChzdGF0ZSkgPT4gKHtcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IHN0YXRlLmdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRkYXlNYXhFdmVudHM6IHN0YXRlLmRheU1heEV2ZW50cyxcblx0XHRldmVudFNwYWNpbmc6IHN0YXRlLmV2ZW50U3BhY2luZyxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZTogc3RhdGUuZ2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdH0pKVxuXG5cdGNvbnN0IHdlZWtTdGFydCA9IGRheXMuYXQoMCkuc3RhcnRPZignZGF5Jylcblx0Y29uc3Qgd2Vla0VuZCA9IGRheXMuYXQoLTEpLmVuZE9mKCdkYXknKVxuXG5cdGNvbnN0IGV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGxldCB3ZWVrRXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKHdlZWtTdGFydCwgd2Vla0VuZClcblx0XHRpZiAocmVzb3VyY2VJZCkge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VFdmVudHMgPSBnZXRFdmVudHNGb3JSZXNvdXJjZShyZXNvdXJjZUlkKVxuXHRcdFx0d2Vla0V2ZW50cyA9IHdlZWtFdmVudHMuZmlsdGVyKChldmVudCkgPT5cblx0XHRcdFx0cmVzb3VyY2VFdmVudHMuc29tZSgoZSkgPT4gU3RyaW5nKGUuaWQpID09PSBTdHJpbmcoZXZlbnQuaWQpKVxuXHRcdFx0KVxuXHRcdH1cblxuXHRcdGlmIChhbGxEYXkpIHtcblx0XHRcdHdlZWtFdmVudHMgPSB3ZWVrRXZlbnRzLmZpbHRlcigoZSkgPT4gISFlLmFsbERheSA9PT0gYWxsRGF5KVxuXHRcdH1cblxuXHRcdHJldHVybiB3ZWVrRXZlbnRzXG5cdH0sIFtcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0d2Vla1N0YXJ0LFxuXHRcdHdlZWtFbmQsXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRhbGxEYXksXG5cdF0pXG5cblx0Ly8gR2V0IGFsbCBldmVudHMgdGhhdCBpbnRlcnNlY3Qgd2l0aCB0aGlzIHdlZWtcblx0Y29uc3QgcG9zaXRpb25lZEV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdHJldHVybiBnZXRQb3NpdGlvbmVkRXZlbnRzKHtcblx0XHRcdGRheXMsXG5cdFx0XHRldmVudHMsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRkYXlOdW1iZXJIZWlnaHQsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRncmlkVHlwZSxcblx0XHR9KVxuXHR9LCBbZGF5cywgZGF5TWF4RXZlbnRzLCBkYXlOdW1iZXJIZWlnaHQsIGV2ZW50U3BhY2luZywgZXZlbnRzLCBncmlkVHlwZV0pXG5cblx0cmV0dXJuIHBvc2l0aW9uZWRFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHtcblx0REFZX05VTUJFUl9IRUlHSFQsXG5cdEVWRU5UX0JBUl9IRUlHSFQsXG5cdEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxufSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbmludGVyZmFjZSBQb3NpdGlvbmVkRXZlbnQgZXh0ZW5kcyBDYWxlbmRhckV2ZW50IHtcblx0bGVmdDogbnVtYmVyIC8vIExlZnQgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuXHR3aWR0aDogbnVtYmVyIC8vIFdpZHRoIGluIHBlcmNlbnRhZ2Vcblx0dG9wOiBudW1iZXIgLy8gVG9wIHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0aGVpZ2h0OiBudW1iZXIgLy8gSGVpZ2h0IGluIHBlcmNlbnRhZ2Vcblx0cG9zaXRpb246IG51bWJlciAvLyBQb3NpdGlvbiBpbiB0aGUgcm93ICgwIGZvciBmaXJzdCwgMSBmb3Igc2Vjb25kLCBldGMuKVxuXHRpc1RydW5jYXRlZFN0YXJ0OiBib29sZWFuIC8vIFdoZXRoZXIgdGhlIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgc3RhcnRcblx0aXNUcnVuY2F0ZWRFbmQ6IGJvb2xlYW4gLy8gV2hldGhlciB0aGUgZXZlbnQgaXMgdHJ1bmNhdGVkIGF0IHRoZSBlbmRcbn1cblxuaW50ZXJmYWNlIEdldFBvc2l0aW9uZWRFdmVudHNQcm9wcyB7XG5cdGRheXM6IGRheWpzLkRheWpzW11cblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cicgLy8gRnV0dXJlIHVzZSBmb3IgZGlmZmVyZW50IGdyaWQgdHlwZXNcblx0ZXZlbnRTcGFjaW5nPzogbnVtYmVyIC8vIEN1c3RvbSB2ZXJ0aWNhbCBzcGFjaW5nIGJldHdlZW4gZXZlbnRzIChkZWZhdWx0cyB0byBHQVBfQkVUV0VFTl9FTEVNRU5UUylcbn1cblxuZXhwb3J0IGNvbnN0IGdldFBvc2l0aW9uZWRFdmVudHMgPSAoe1xuXHRkYXlzLFxuXHRldmVudHMsXG5cdGRheU1heEV2ZW50cyxcblx0ZGF5TnVtYmVySGVpZ2h0ID0gREFZX05VTUJFUl9IRUlHSFQsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdGV2ZW50U3BhY2luZyA9IEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxufTogR2V0UG9zaXRpb25lZEV2ZW50c1Byb3BzKSA9PiB7XG5cdGNvbnN0IGZpcnN0RGF5ID0gZGF5c1swXS5zdGFydE9mKCdkYXknKVxuXHRjb25zdCBsYXN0RGF5ID0gZGF5cy5hdCgtMSkuZW5kT2YoJ2RheScpXG5cdGNvbnN0IGRheUNvdW50ID0gZGF5cy5sZW5ndGhcblxuXHQvLyBTZXBhcmF0ZSBtdWx0aS1kYXkgYW5kIHNpbmdsZS1kYXkgZXZlbnRzXG5cdGNvbnN0IG11bHRpRGF5RXZlbnRzID0gZXZlbnRzLmZpbHRlcigoZSkgPT4gZS5lbmQuZGlmZihlLnN0YXJ0LCBncmlkVHlwZSkgPiAwKVxuXHRjb25zdCBzaW5nbGVEYXlFdmVudHMgPSBldmVudHMuZmlsdGVyKFxuXHRcdChlKSA9PiBlLmVuZC5kaWZmKGUuc3RhcnQsIGdyaWRUeXBlKSA9PT0gMFxuXHQpXG5cblx0Ly8gU29ydCBtdWx0aS1kYXkgZXZlbnRzIGJ5IHN0YXJ0IGRhdGUsIHRoZW4gYnkgZHVyYXRpb25cblx0Y29uc3Qgc29ydGVkTXVsdGlEYXkgPSBbLi4ubXVsdGlEYXlFdmVudHNdLnNvcnQoKGEsIGIpID0+IHtcblx0XHRjb25zdCBzdGFydERpZmYgPSBhLnN0YXJ0LmRpZmYoYi5zdGFydClcblx0XHRpZiAoc3RhcnREaWZmICE9PSAwKSB7XG5cdFx0XHRyZXR1cm4gc3RhcnREaWZmXG5cdFx0fVxuXHRcdHJldHVybiBiLmVuZC5kaWZmKGIuc3RhcnQpIC0gYS5lbmQuZGlmZihhLnN0YXJ0KSAvLyBMb25nZXIgZXZlbnRzIGZpcnN0XG5cdH0pXG5cblx0Ly8gU29ydCBzaW5nbGUtZGF5IGV2ZW50cyBieSBzdGFydCB0aW1lXG5cdGNvbnN0IHNvcnRlZFNpbmdsZURheSA9IFsuLi5zaW5nbGVEYXlFdmVudHNdLnNvcnQoKGEsIGIpID0+XG5cdFx0YS5zdGFydC5kaWZmKGIuc3RhcnQpXG5cdClcblxuXHQvLyBDcmVhdGUgZGF5Q291bnQgeCBkYXlNYXhFdmVudHMgZ3JpZCB3aXRoIGZsYWdzXG5cdGNvbnN0IGdyaWQ6IHsgdGFrZW46IGJvb2xlYW47IGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbCB9W11bXSA9IFtdXG5cdGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGRheU1heEV2ZW50czsgcm93KyspIHtcblx0XHRncmlkW3Jvd10gPSBbXVxuXHRcdGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IGRheUNvdW50OyBjb2wrKykge1xuXHRcdFx0Z3JpZFtyb3ddW2NvbF0gPSB7IHRha2VuOiBmYWxzZSwgZXZlbnQ6IG51bGwgfVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHByb2Nlc3NlZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W10gPSBbXVxuXG5cdC8vIFN0ZXAgMTogQXNzaWduIHBvc2l0aW9ucyB0byBtdWx0aS1kYXkgZXZlbnRzIGZpcnN0XG5cdGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkTXVsdGlEYXkpIHtcblx0XHRjb25zdCBldmVudFN0YXJ0ID0gZGF5anMubWF4KGV2ZW50LnN0YXJ0LnN0YXJ0T2YoZ3JpZFR5cGUpLCBmaXJzdERheSlcblx0XHRjb25zdCBhZGp1c3RlZEVuZCA9XG5cdFx0XHRncmlkVHlwZSA9PT0gJ2hvdXInID8gZXZlbnQuZW5kLnN1YnRyYWN0KDEsICdtaW51dGUnKSA6IGV2ZW50LmVuZFxuXHRcdGNvbnN0IGV2ZW50RW5kID0gZGF5anMubWluKGFkanVzdGVkRW5kLnN0YXJ0T2YoZ3JpZFR5cGUpLCBsYXN0RGF5KVxuXHRcdGNvbnN0IHN0YXJ0Q29sID0gTWF0aC5tYXgoMCwgZXZlbnRTdGFydC5kaWZmKGZpcnN0RGF5LCBncmlkVHlwZSkpXG5cdFx0Y29uc3QgZW5kQ29sID0gTWF0aC5taW4oZGF5Q291bnQgLSAxLCBldmVudEVuZC5kaWZmKGZpcnN0RGF5LCBncmlkVHlwZSkpXG5cblx0XHQvLyBEZXRlY3QgaWYgZXZlbnQgaXMgdHJ1bmNhdGVkIGF0IHRoZSBib3VuZGFyaWVzXG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRTdGFydCA9IGV2ZW50LnN0YXJ0LnN0YXJ0T2YoZ3JpZFR5cGUpLmlzQmVmb3JlKGZpcnN0RGF5KVxuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkRW5kID0gZXZlbnQuZW5kLnN0YXJ0T2YoZ3JpZFR5cGUpLmlzQWZ0ZXIobGFzdERheSlcblxuXHRcdC8vIFRyeSB0byBwbGFjZSB0aGUgZXZlbnQgc3RhcnRpbmcgZnJvbSBpdHMgb3JpZ2luYWwgc3RhcnQgY29sdW1uXG5cdFx0bGV0IHBsYWNlZFN1Y2Nlc3NmdWxseSA9IGZhbHNlXG5cblx0XHQvLyBGaXJzdCB0cnk6IHBsYWNlIGZyb20gb3JpZ2luYWwgc3RhcnQgcG9zaXRpb25cblx0XHRsZXQgYXNzaWduZWRSb3cgPSAtMVxuXHRcdGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGRheU1heEV2ZW50czsgcm93KyspIHtcblx0XHRcdGxldCBjYW5QbGFjZSA9IHRydWVcblx0XHRcdGZvciAobGV0IGNvbCA9IHN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuXHRcdFx0XHRpZiAoZ3JpZFtyb3ddW2NvbF0udGFrZW4pIHtcblx0XHRcdFx0XHRjYW5QbGFjZSA9IGZhbHNlXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGNhblBsYWNlKSB7XG5cdFx0XHRcdGFzc2lnbmVkUm93ID0gcm93XG5cdFx0XHRcdGJyZWFrXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZm91bmQgYSByb3csIGFzc2lnbiB0aGUgZXZlbnQgdG8gYWxsIGl0cyBjb2x1bW5zXG5cdFx0aWYgKGFzc2lnbmVkUm93ICE9PSAtMSkge1xuXHRcdFx0Zm9yIChsZXQgY29sID0gc3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG5cdFx0XHRcdGdyaWRbYXNzaWduZWRSb3ddW2NvbF0gPSB7IHRha2VuOiB0cnVlLCBldmVudCB9XG5cdFx0XHR9XG5cblx0XHRcdC8vIENyZWF0ZSBwb3NpdGlvbiBkYXRhIGZvciByZW5kZXJpbmdcblx0XHRcdGNvbnN0IHNwYW5EYXlzID0gZW5kQ29sIC0gc3RhcnRDb2wgKyAxXG5cdFx0XHRwcm9jZXNzZWRFdmVudHMucHVzaCh7XG5cdFx0XHRcdGxlZnQ6IChzdGFydENvbCAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdFx0d2lkdGg6IChzcGFuRGF5cyAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdFx0dG9wOlxuXHRcdFx0XHRcdGRheU51bWJlckhlaWdodCArXG5cdFx0XHRcdFx0ZXZlbnRTcGFjaW5nICtcblx0XHRcdFx0XHRhc3NpZ25lZFJvdyAqIChFVkVOVF9CQVJfSEVJR0hUICsgZXZlbnRTcGFjaW5nKSxcblx0XHRcdFx0aGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuXHRcdFx0XHRwb3NpdGlvbjogYXNzaWduZWRSb3csXG5cdFx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0XHRpc1RydW5jYXRlZFN0YXJ0LFxuXHRcdFx0XHRpc1RydW5jYXRlZEVuZCxcblx0XHRcdH0gYXMgUG9zaXRpb25lZEV2ZW50KVxuXHRcdFx0cGxhY2VkU3VjY2Vzc2Z1bGx5ID0gdHJ1ZVxuXHRcdH1cblxuXHRcdC8vIElmIGNvdWxkbid0IHBsYWNlIGF0IG9yaWdpbmFsIHBvc2l0aW9uLCB0cnkgdHJ1bmNhdGVkIHZlcnNpb25zIHN0YXJ0aW5nIGZyb20gbGF0ZXIgZGF5c1xuXHRcdGlmICghcGxhY2VkU3VjY2Vzc2Z1bGx5KSB7XG5cdFx0XHRmb3IgKFxuXHRcdFx0XHRsZXQgdHJ5U3RhcnRDb2wgPSBzdGFydENvbCArIDE7XG5cdFx0XHRcdHRyeVN0YXJ0Q29sIDw9IGVuZENvbDtcblx0XHRcdFx0dHJ5U3RhcnRDb2wrK1xuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIFRyeSB0byBwbGFjZSB0aGUgdHJ1bmNhdGVkIGV2ZW50IHN0YXJ0aW5nIGZyb20gdGhpcyBjb2x1bW5cblx0XHRcdFx0bGV0IHRydW5jYXRlZEFzc2lnbmVkUm93ID0gLTFcblx0XHRcdFx0Zm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuXHRcdFx0XHRcdGxldCBjYW5QbGFjZSA9IHRydWVcblx0XHRcdFx0XHRmb3IgKGxldCBjb2wgPSB0cnlTdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdFx0XHRcdGlmIChncmlkW3Jvd11bY29sXS50YWtlbikge1xuXHRcdFx0XHRcdFx0XHRjYW5QbGFjZSA9IGZhbHNlXG5cdFx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChjYW5QbGFjZSkge1xuXHRcdFx0XHRcdFx0dHJ1bmNhdGVkQXNzaWduZWRSb3cgPSByb3dcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgd2UgZm91bmQgYSByb3cgZm9yIHRoZSB0cnVuY2F0ZWQgdmVyc2lvbiwgcGxhY2UgaXRcblx0XHRcdFx0aWYgKHRydW5jYXRlZEFzc2lnbmVkUm93ICE9PSAtMSkge1xuXHRcdFx0XHRcdGZvciAobGV0IGNvbCA9IHRyeVN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuXHRcdFx0XHRcdFx0Z3JpZFt0cnVuY2F0ZWRBc3NpZ25lZFJvd11bY29sXSA9IHsgdGFrZW46IHRydWUsIGV2ZW50IH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgdGhlIHRydW5jYXRlZCByZW5kZXJpbmdcblx0XHRcdFx0XHRjb25zdCB0cnVuY2F0ZWRTcGFuRGF5cyA9IGVuZENvbCAtIHRyeVN0YXJ0Q29sICsgMVxuXHRcdFx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcblx0XHRcdFx0XHRcdGxlZnQ6ICh0cnlTdGFydENvbCAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdFx0XHRcdHdpZHRoOiAodHJ1bmNhdGVkU3BhbkRheXMgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdFx0XHR0b3A6XG5cdFx0XHRcdFx0XHRcdGRheU51bWJlckhlaWdodCArXG5cdFx0XHRcdFx0XHRcdGV2ZW50U3BhY2luZyArXG5cdFx0XHRcdFx0XHRcdHRydW5jYXRlZEFzc2lnbmVkUm93ICogKEVWRU5UX0JBUl9IRUlHSFQgKyBldmVudFNwYWNpbmcpLFxuXHRcdFx0XHRcdFx0aGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuXHRcdFx0XHRcdFx0cG9zaXRpb246IHRydW5jYXRlZEFzc2lnbmVkUm93LFxuXHRcdFx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdFx0XHRpc1RydW5jYXRlZFN0YXJ0OiB0cnVlLCAvLyBBbHdheXMgdHJ1bmNhdGVkIGF0IHN0YXJ0IHdoZW4gdXNpbmcgdGhpcyBmYWxsYmFjayBsb2dpY1xuXHRcdFx0XHRcdFx0aXNUcnVuY2F0ZWRFbmQsXG5cdFx0XHRcdFx0fSBhcyBQb3NpdGlvbmVkRXZlbnQpXG5cdFx0XHRcdFx0cGxhY2VkU3VjY2Vzc2Z1bGx5ID0gdHJ1ZVxuXHRcdFx0XHRcdGJyZWFrIC8vIFN1Y2Nlc3NmdWxseSBwbGFjZWQsIHN0b3AgdHJ5aW5nIG90aGVyIHN0YXJ0IHBvc2l0aW9uc1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gU3RlcCAyOiBGaWxsIGdhcHMgd2l0aCBzaW5nbGUtZGF5IGV2ZW50c1xuXHRmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZFNpbmdsZURheSkge1xuXHRcdGNvbnN0IGV2ZW50U3RhcnQgPSBkYXlqcy5tYXgoZXZlbnQuc3RhcnQuc3RhcnRPZihncmlkVHlwZSksIGZpcnN0RGF5KVxuXHRcdC8vIENsYW1wIGNvbCB0byB2YWxpZCBncmlkIGJvdW5kcyB0byBwcmV2ZW50IGFjY2Vzc2luZyB1bmRlZmluZWQgZ3JpZCBwb3NpdGlvbnNcblx0XHRjb25zdCBjb2wgPSBNYXRoLm1heChcblx0XHRcdDAsXG5cdFx0XHRNYXRoLm1pbihkYXlDb3VudCAtIDEsIGV2ZW50U3RhcnQuZGlmZihmaXJzdERheSwgZ3JpZFR5cGUpKVxuXHRcdClcblxuXHRcdC8vIFNpbmdsZS1kYXkgZXZlbnRzIGFyZSBub3QgdHJ1bmNhdGVkIGJ5IGRlZmluaXRpb25cblx0XHRjb25zdCBpc1RydW5jYXRlZFN0YXJ0ID0gZmFsc2Vcblx0XHRjb25zdCBpc1RydW5jYXRlZEVuZCA9IGZhbHNlXG5cblx0XHQvLyBGaW5kIHRoZSBmaXJzdCBhdmFpbGFibGUgcm93IGluIHRoaXMgY29sdW1uXG5cdFx0bGV0IGFzc2lnbmVkUm93ID0gLTFcblx0XHRmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG5cdFx0XHRpZiAoIWdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG5cdFx0XHRcdGFzc2lnbmVkUm93ID0gcm93XG5cdFx0XHRcdGJyZWFrXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZm91bmQgYSByb3csIGFzc2lnbiB0aGUgZXZlbnRcblx0XHRpZiAoYXNzaWduZWRSb3cgIT09IC0xKSB7XG5cdFx0XHRncmlkW2Fzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuXG5cdFx0XHQvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgcmVuZGVyaW5nXG5cdFx0XHRwcm9jZXNzZWRFdmVudHMucHVzaCh7XG5cdFx0XHRcdGxlZnQ6IChjb2wgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdHdpZHRoOiAoMSAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdFx0dG9wOlxuXHRcdFx0XHRcdGRheU51bWJlckhlaWdodCArXG5cdFx0XHRcdFx0ZXZlbnRTcGFjaW5nICtcblx0XHRcdFx0XHRhc3NpZ25lZFJvdyAqIChFVkVOVF9CQVJfSEVJR0hUICsgZXZlbnRTcGFjaW5nKSxcblx0XHRcdFx0aGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuXHRcdFx0XHRwb3NpdGlvbjogYXNzaWduZWRSb3csXG5cdFx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0XHRpc1RydW5jYXRlZFN0YXJ0LFxuXHRcdFx0XHRpc1RydW5jYXRlZEVuZCxcblx0XHRcdH0gYXMgUG9zaXRpb25lZEV2ZW50KVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBwcm9jZXNzZWRFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIEFsbERheUNlbGxQcm9wcyB7XG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBOb01lbW9BbGxEYXlDZWxsOiBSZWFjdC5GQzxBbGxEYXlDZWxsUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcblx0Y29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoc3RhdGUpID0+ICh7IHQ6IHN0YXRlLnQgfSkpXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J3ctMTYgYm9yZGVyLXIgc2hyaW5rLTAgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgc206dGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0PlxuXHRcdFx0e3QoJ2FsbERheScpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBBbGxEYXlDZWxsID0gbWVtbyhOb01lbW9BbGxEYXlDZWxsKVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEdyaWRDZWxsIH0gZnJvbSAnLi4vZ3JpZC1jZWxsJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkRXZlbnRzTGF5ZXIgfSBmcm9tICcuL3ZlcnRpY2FsLWdyaWQtZXZlbnRzLWxheWVyJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFZlcnRpY2FsR3JpZENvbFByb3BzIHtcblx0aWQ6IHN0cmluZ1xuXHRkYXk6IGRheWpzLkRheWpzXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0ZGF5czogZGF5anMuRGF5anNbXSAvLyBUaGUgc3BlY2lmaWMgZGF5IHRoaXMgY29sdW1uIHJlcHJlc2VudHNcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRyZW5kZXJIZWFkZXI/OiAoKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0cmVuZGVyQ2VsbD86IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdG5vRXZlbnRzPzogYm9vbGVhblxuXHQvKiogT3B0aW9uYWwgYXJyYXkgb2YgbWludXRlIHNsb3RzIGJ5IHdoaWNoIHRoZSBob3VyIGlzIGRpdmlkZWRcblx0ICogZS5nLiwgWzAsIDE1LCAzMCwgNDVdIGZvciBxdWFydGVyLWhvdXIgc2xvdHNcblx0ICovXG5cdGNlbGxTbG90cz86IG51bWJlcltdXG5cdC8qKiBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgY29sdW1uIGluIHRoZSBncmlkICovXG5cdGlzTGFzdENvbHVtbj86IGJvb2xlYW5cbn1cblxuY29uc3QgTm9NZW1vVmVydGljYWxHcmlkQ29sOiBSZWFjdC5GQzxWZXJ0aWNhbEdyaWRDb2xQcm9wcz4gPSAoe1xuXHRpZCxcblx0ZGF5cyxcblx0cmVzb3VyY2VJZCxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcblx0Z3JpZFR5cGUsXG5cdGNsYXNzTmFtZSxcblx0cmVuZGVyQ2VsbCxcblx0bm9FdmVudHMsXG5cdGNlbGxTbG90cyA9IFs2MF0sIC8vIERlZmF1bHQgdG8gZnVsbCBob3VyIHNsb3RzXG5cdGlzTGFzdENvbHVtbixcbn0pID0+IHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBmbGV4LWNvbCBmbGV4LTEgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1pbi13LTUwIGJnLWJhY2tncm91bmQgcmVsYXRpdmUnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZCB8fCBgdmVydGljYWwtY29sLSR7aWR9YH1cblx0XHQ+XG5cdFx0XHR7LyogVGltZSBzbG90cyAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIHJlbGF0aXZlIGdyaWRcIlxuXHRcdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRcdGdyaWRUZW1wbGF0ZVJvd3M6IGByZXBlYXQoJHtkYXlzLmxlbmd0aH0sIG1pbm1heCgwLCAxZnIpKWAsXG5cdFx0XHRcdH19XG5cdFx0XHQ+XG5cdFx0XHRcdHtkYXlzLm1hcCgoZGF5KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgaG91clN0ciA9IGRheS5mb3JtYXQoJ0hIJylcblx0XHRcdFx0XHRjb25zdCBkYXRlU3RyID0gZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpXG5cblx0XHRcdFx0XHRpZiAocmVuZGVyQ2VsbCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgdGVzdElkID1cblx0XHRcdFx0XHRcdFx0aWQgPT09ICd0aW1lLWNvbCdcblx0XHRcdFx0XHRcdFx0XHQ/IGB2ZXJ0aWNhbC10aW1lLSR7aG91clN0cn1gXG5cdFx0XHRcdFx0XHRcdFx0OiBgdmVydGljYWwtY2VsbC0ke2RhdGVTdHJ9LSR7aG91clN0cn0tMDAke3Jlc291cmNlSWQgPyBgLSR7cmVzb3VyY2VJZH1gIDogJyd9YFxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtWzYwcHhdIGJvcmRlci1iIGJvcmRlci1yXCJcblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17dGVzdElkfVxuXHRcdFx0XHRcdFx0XHRcdGtleT17YCR7ZGF0ZVN0cn0tJHtob3VyU3RyfWB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7cmVuZGVyQ2VsbChkYXkpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gY2VsbFNsb3RzLm1hcCgobWludXRlKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBtID0gbWludXRlID09PSA2MCA/IHVuZGVmaW5lZCA6IG1pbnV0ZVxuXHRcdFx0XHRcdFx0Y29uc3QgbW0gPSBtID09PSB1bmRlZmluZWQgPyAnMDAnIDogU3RyaW5nKG0pLnBhZFN0YXJ0KDIsICcwJylcblx0XHRcdFx0XHRcdGNvbnN0IHRlc3RJZCA9IGB2ZXJ0aWNhbC1jZWxsLSR7ZGF0ZVN0cn0tJHtob3VyU3RyfS0ke21tfSR7cmVzb3VyY2VJZCA/IGAtJHtyZXNvdXJjZUlkfWAgOiAnJ31gXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxHcmlkQ2VsbFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHQnaG92ZXI6YmctYWNjZW50IHJlbGF0aXZlIHotMTAgaC1bNjBweF0gY3Vyc29yLXBvaW50ZXIgYm9yZGVyLWInLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWludXRlID09PSA2MCA/ICcnIDogJ2JvcmRlci1kYXNoZWQgaC1bMTVweF0gbWluLWgtWzE1cHhdJyxcblx0XHRcdFx0XHRcdFx0XHRcdGlzTGFzdENvbHVtbiA/ICdib3JkZXItci0wJyA6ICdib3JkZXItcidcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXt0ZXN0SWR9XG5cdFx0XHRcdFx0XHRcdFx0ZGF5PXttID8gZGF5Lm1pbnV0ZShtKSA6IGRheX1cblx0XHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdFx0aG91cj17ZGF5LmhvdXIoKX1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2Ake2RhdGVTdHJ9LSR7aG91clN0cn0tJHttbX0tJHtyZXNvdXJjZUlkIHx8ICduby1yZXNvdXJjZSd9YH1cblx0XHRcdFx0XHRcdFx0XHRtaW51dGU9e219XG5cdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH0gLy8gRXZlbnRzIGFyZSByZW5kZXJlZCBpbiBhIHNlcGFyYXRlIGxheWVyXG5cdFx0XHRcdFx0XHRcdFx0c2hvdWxkUmVuZGVyRXZlbnRzPXtmYWxzZX1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9KX1cblxuXHRcdFx0XHR7LyogRXZlbnQgYmxvY2tzIGxheWVyICovfVxuXHRcdFx0XHR7IW5vRXZlbnRzICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgei0xMCBwb2ludGVyLWV2ZW50cy1ub25lXCI+XG5cdFx0XHRcdFx0XHQ8VmVydGljYWxHcmlkRXZlbnRzTGF5ZXJcblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B2ZXJ0aWNhbC1ldmVudHMtJHtpZH1gfVxuXHRcdFx0XHRcdFx0XHRkYXlzPXtkYXlzfVxuXHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlSWR9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsR3JpZENvbCA9IG1lbW8oXG5cdE5vTWVtb1ZlcnRpY2FsR3JpZENvbFxuKSBhcyB0eXBlb2YgTm9NZW1vVmVydGljYWxHcmlkQ29sXG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEN1cnJlbnRUaW1lSW5kaWNhdG9yIH0gZnJvbSAnQC9jb21wb25lbnRzL2N1cnJlbnQtdGltZS1pbmRpY2F0b3InXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHsgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBWZXJ0aWNhbEdyaWRFdmVudHNMYXllclByb3BzIHtcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBsYXllciByZXByZXNlbnRzXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5jb25zdCBOb01lbW9WZXJ0aWNhbEdyaWRFdmVudHNMYXllcjogUmVhY3QuRkM8VmVydGljYWxHcmlkRXZlbnRzTGF5ZXJQcm9wcz4gPSAoe1xuXHRkYXlzLFxuXHRncmlkVHlwZSA9ICdob3VyJyxcblx0cmVzb3VyY2VJZCxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcbn0pID0+IHtcblx0Y29uc3QgdG9kYXlFdmVudHMgPSB1c2VQcm9jZXNzZWREYXlFdmVudHMoeyBkYXlzLCBncmlkVHlwZSwgcmVzb3VyY2VJZCB9KVxuXHRjb25zdCByYW5nZVN0YXJ0ID0gZGF5cy5hdCgwKVxuXHRjb25zdCByYW5nZUVuZCA9IGRheXMuYXQoLTEpPy5hZGQoMSwgZ3JpZFR5cGUpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHBvaW50ZXItZXZlbnRzLW5vbmUgei0xMCBvdmVyZmxvdy1jbGlwXCJcblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkfVxuXHRcdD5cblx0XHRcdHtyYW5nZVN0YXJ0ICYmIHJhbmdlRW5kICYmIChcblx0XHRcdFx0PEN1cnJlbnRUaW1lSW5kaWNhdG9yIHJhbmdlRW5kPXtyYW5nZUVuZH0gcmFuZ2VTdGFydD17cmFuZ2VTdGFydH0gLz5cblx0XHRcdCl9XG5cdFx0XHR7dG9kYXlFdmVudHMubWFwKChldmVudCwgaW5kZXgpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnRLZXkgPSBgZXZlbnQtJHtldmVudC5pZH0tJHtpbmRleH0tJHtkYXlzLmF0KDApLnRvSVNPU3RyaW5nKCl9LSR7cmVzb3VyY2VJZCA/PyAnbm8tcmVzb3VyY2UnfWBcblx0XHRcdFx0Y29uc3QgaXNTaG9ydEV2ZW50ID0gZXZlbnQuZW5kLmRpZmYoZXZlbnQuc3RhcnQsICdtaW51dGUnKSA8PSAxNVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGVcIlxuXHRcdFx0XHRcdFx0a2V5PXtgJHtldmVudEtleX0td3JhcHBlcmB9XG5cdFx0XHRcdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRcdFx0XHRsZWZ0OiBgJHtldmVudC5sZWZ0fSVgLFxuXHRcdFx0XHRcdFx0XHR3aWR0aDogYGNhbGMoJHtldmVudC53aWR0aH0lIC0gdmFyKC0tc3BhY2luZykgKiAyKWAsXG5cdFx0XHRcdFx0XHRcdHRvcDogYCR7ZXZlbnQudG9wfSVgLFxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IGAke2V2ZW50LmhlaWdodH0lYCxcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PERyYWdnYWJsZUV2ZW50XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ3BvaW50ZXItZXZlbnRzLWF1dG8gYWJzb2x1dGUnLCB7XG5cdFx0XHRcdFx0XHRcdFx0J1smX3BdOnRleHQtWzEwcHhdIFsmX3BdOm10LTAnOiBpc1Nob3J0RXZlbnQsXG5cdFx0XHRcdFx0XHRcdH0pfVxuXHRcdFx0XHRcdFx0XHRlbGVtZW50SWQ9e2V2ZW50S2V5fVxuXHRcdFx0XHRcdFx0XHRldmVudD17ZXZlbnR9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgVmVydGljYWxHcmlkRXZlbnRzTGF5ZXIgPSBtZW1vKE5vTWVtb1ZlcnRpY2FsR3JpZEV2ZW50c0xheWVyKVxuIiwKICAgICJpbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5cbmludGVyZmFjZSBDdXJyZW50VGltZUluZGljYXRvclByb3BzIHtcblx0LyoqIFRoZSBzdGFydCBkYXRlL3RpbWUgb2YgdGhlIGNvbnRhaW5lcidzIHRpbWVsaW5lIChlLmcuLCB0b3Agb2YgdGhlIGNvbHVtbikgKi9cblx0cmFuZ2VTdGFydDogZGF5anMuRGF5anNcblx0LyoqIFRoZSBlbmQgZGF0ZS90aW1lIG9mIHRoZSBjb250YWluZXIncyB0aW1lbGluZSAoZS5nLiwgYm90dG9tIG9mIHRoZSBjb2x1bW4pICovXG5cdHJhbmdlRW5kOiBkYXlqcy5EYXlqc1xuXHQvKiogT3B0aW9uYWwgcmVmZXJlbmNlIHRpbWUgZm9yIFwibm93XCIgKHVzZWZ1bCBmb3IgdGVzdGluZykgKi9cblx0bm93PzogZGF5anMuRGF5anNcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgaG9yaXpvbnRhbCByZWQgbGluZSBpbmRpY2F0aW5nIHRoZSBjdXJyZW50IHRpbWUgcmVsYXRpdmUgdG8gYSB2ZXJ0aWNhbCBjb250YWluZXIncyB0aW1lbGluZS5cbiAqIFRoZSBpbmRpY2F0b3IgaGFuZGxlcyBpdHMgb3duIHZpc2liaWxpdHkgYmFzZWQgb24gd2hldGhlciAnbm93JyBmYWxscyB3aXRoaW4gdGhlIHByb3ZpZGVkIHJhbmdlLlxuICovXG5jb25zdCBOb01lbW9DdXJyZW50VGltZUluZGljYXRvciA9ICh7XG5cdHJhbmdlU3RhcnQsXG5cdHJhbmdlRW5kLFxuXHRub3c6IHByb3BOb3csXG59OiBDdXJyZW50VGltZUluZGljYXRvclByb3BzKSA9PiB7XG5cdGNvbnN0IG5vdyA9IHByb3BOb3cgPz8gZGF5anMoKVxuXG5cdC8vIENoZWNrIGlmIGN1cnJlbnQgdGltZSBmYWxscyB3aXRoaW4gdGhpcyByYW5nZVxuXHRjb25zdCBpc1dpdGhpblJhbmdlID0gbm93LmlzU2FtZU9yQWZ0ZXIocmFuZ2VTdGFydCkgJiYgbm93LmlzQmVmb3JlKHJhbmdlRW5kKVxuXG5cdGlmICghaXNXaXRoaW5SYW5nZSkge1xuXHRcdHJldHVybiBudWxsXG5cdH1cblxuXHRjb25zdCB0b3RhbER1cmF0aW9uID0gcmFuZ2VFbmQuZGlmZihyYW5nZVN0YXJ0LCAnbWludXRlJylcblx0Y29uc3QgbWludXRlc0Zyb21TdGFydCA9IG5vdy5kaWZmKHJhbmdlU3RhcnQsICdtaW51dGUnKVxuXHRjb25zdCBwcm9ncmVzcyA9IChtaW51dGVzRnJvbVN0YXJ0IC8gdG90YWxEdXJhdGlvbikgKiAxMDBcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImFic29sdXRlIGxlZnQtMCByaWdodC0wIGgtMC41IGJnLXJlZC01MDAgei01MCBwb2ludGVyLWV2ZW50cy1ub25lXCJcblx0XHRcdGRhdGEtdGVzdGlkPVwiY3VycmVudC10aW1lLWluZGljYXRvclwiXG5cdFx0XHRzdHlsZT17e1xuXHRcdFx0XHR0b3A6IGAke3Byb2dyZXNzfSVgLFxuXHRcdFx0fX1cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBDdXJyZW50VGltZUluZGljYXRvciA9IG1lbW8oTm9NZW1vQ3VycmVudFRpbWVJbmRpY2F0b3IpXG4iLAogICAgImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHtcblx0Z2V0UG9zaXRpb25lZERheUV2ZW50cyxcblx0dHlwZSBQb3NpdGlvbmVkRXZlbnQsXG59IGZyb20gJ0AvbGliL3V0aWxzL3Bvc2l0aW9uLWRheS1ldmVudHMnXG5cbmludGVyZmFjZSBVc2VQcm9jZXNzZWREYXlFdmVudHNQcm9wcyB7XG5cdGRheXM6IGRheWpzLkRheWpzW10gLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGNvbHVtbiByZXByZXNlbnRzXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUsXG5cdHJlc291cmNlSWQsXG59OiBVc2VQcm9jZXNzZWREYXlFdmVudHNQcm9wcykgPT4ge1xuXHRjb25zdCB7IGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgZ2V0RXZlbnRzRm9yUmVzb3VyY2UgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKHN0YXRlKSA9PiAoe1xuXHRcdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiBzdGF0ZS5nZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZTogc3RhdGUuZ2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0fSkpXG5cdGNvbnN0IGRheVN0YXJ0ID0gZGF5cy5hdCgwKS5zdGFydE9mKCdkYXknKVxuXHRjb25zdCBkYXlFbmQgPSBkYXlzLmF0KC0xKS5lbmRPZignZGF5JylcblxuXHRjb25zdCBldmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRsZXQgZGF5RXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKGRheVN0YXJ0LCBkYXlFbmQpXG5cdFx0aWYgKHJlc291cmNlSWQpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlRXZlbnRzID0gZ2V0RXZlbnRzRm9yUmVzb3VyY2UocmVzb3VyY2VJZClcblx0XHRcdGRheUV2ZW50cyA9IGRheUV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PlxuXHRcdFx0XHRyZXNvdXJjZUV2ZW50cy5zb21lKChyZSkgPT4gU3RyaW5nKHJlLmlkKSA9PT0gU3RyaW5nKGV2ZW50LmlkKSlcblx0XHRcdClcblx0XHR9XG5cblx0XHQvLyBWZXJ0aWNhbCBncmlkcyAoRGF5L1dlZWsvUmVzb3VyY2UgVmVydGljYWwpIG5ldmVyIHJlbmRlciBhbGwtZGF5IGV2ZW50c1xuXHRcdC8vIGFzIHRob3NlIGFyZSBoYW5kbGVkIGJ5IHRoZSBhbGwtZGF5LXJvdyBvciBhcmUgbm90IGFwcHJvcHJpYXRlIGZvciB0aGUgdGltZSBncmlkLlxuXHRcdHJldHVybiBkYXlFdmVudHMuZmlsdGVyKChlKSA9PiAhZS5hbGxEYXkpXG5cdH0sIFtcblx0XHRkYXlTdGFydCxcblx0XHRkYXlFbmQsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdHJlc291cmNlSWQsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdF0pXG5cblx0Y29uc3QgdG9kYXlFdmVudHMgPSB1c2VNZW1vPFBvc2l0aW9uZWRFdmVudFtdPigoKSA9PiB7XG5cdFx0cmV0dXJuIGdldFBvc2l0aW9uZWREYXlFdmVudHMoe1xuXHRcdFx0ZGF5cyxcblx0XHRcdGV2ZW50cyxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdH0pXG5cdH0sIFtkYXlzLCBncmlkVHlwZSwgZXZlbnRzXSlcblxuXHRyZXR1cm4gdG9kYXlFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBvc2l0aW9uZWRFdmVudCBleHRlbmRzIENhbGVuZGFyRXZlbnQge1xuXHRsZWZ0OiBudW1iZXIgLy8gTGVmdCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdHdpZHRoOiBudW1iZXIgLy8gV2lkdGggaW4gcGVyY2VudGFnZVxuXHR0b3A6IG51bWJlciAvLyBUb3AgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuXHRoZWlnaHQ6IG51bWJlciAvLyBIZWlnaHQgaW4gcGVyY2VudGFnZVxuXHR6SW5kZXg/OiBudW1iZXIgLy8gWi1pbmRleCBmb3IgbGF5ZXJpbmcgb3ZlcmxhcHBpbmcgZXZlbnRzXG59XG5cbmludGVyZmFjZSBHZXRQb3NpdGlvbmVkRGF5RXZlbnRzUGFyYW1zIHtcblx0ZGF5czogZGF5anMuRGF5anNbXVxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInIHwgJ21pbnV0ZSdcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbn1cblxuZXhwb3J0IGNvbnN0IGdldFBvc2l0aW9uZWREYXlFdmVudHMgPSAoe1xuXHRkYXlzLFxuXHRncmlkVHlwZSA9ICdob3VyJyxcblx0ZXZlbnRzLFxufTogR2V0UG9zaXRpb25lZERheUV2ZW50c1BhcmFtcyk6IFBvc2l0aW9uZWRFdmVudFtdID0+IHtcblx0Ly8gRmlsdGVyIG91dCBhbGwtZGF5IGV2ZW50cyBhbmQgc29ydCBieSBzdGFydCB0aW1lXG5cdGNvbnN0IHNvcnRlZEV2ZW50cyA9IGV2ZW50c1xuXHRcdC5maWx0ZXIoKGUpID0+ICFlLmFsbERheSlcblx0XHQudG9Tb3J0ZWQoKGEsIGIpID0+IGEuc3RhcnQuZGlmZihiLnN0YXJ0KSlcblxuXHRpZiAoc29ydGVkRXZlbnRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBbXVxuXHR9XG5cblx0Ly8gRGV0ZXJtaW5lIGdyaWQgYm91bmRhcmllcyBhbmQgbWV0cmljc1xuXHQvLyBVc2UgZXhwbGljaXQgc3RhcnRPZiB0byBlbnN1cmUgd2UgYXJlIGFuY2hvcmVkIHRvIHRoZSBncmlkIHVuaXQgYm91bmRhcmllc1xuXHQvLyBUaGlzIHByZXZlbnRzIG9mZnNldHMgaWYgdGhlIGdyaWQgZGF5cyBhcmUgbm90IG5vcm1hbGl6ZWRcblx0Y29uc3QgZ3JpZFN0YXJ0ID0gZGF5cy5hdCgwKT8uc3RhcnRPZignZGF5JykgfHwgZGF5anMoKVxuXHRjb25zdCB0b3RhbFVuaXRzID0gZGF5cy5sZW5ndGhcblx0Y29uc3QgaXNEaXNjcmV0ZSA9IGdyaWRUeXBlID09PSAnZGF5J1xuXG5cdC8vIFN0ZXAgMTogR3JvdXAgZXZlbnRzIGludG8gY2x1c3RlcnMgb2Ygb3ZlcmxhcHBpbmcgZXZlbnRzXG5cdGNvbnN0IGNsdXN0ZXJzOiBDYWxlbmRhckV2ZW50W11bXSA9IFtdXG5cdGxldCBjdXJyZW50Q2x1c3RlcjogQ2FsZW5kYXJFdmVudFtdID0gW11cblx0bGV0IGxhc3RFdmVudEVuZDogZGF5anMuRGF5anMgfCBudWxsID0gbnVsbFxuXHRmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZEV2ZW50cykge1xuXHRcdGlmIChsYXN0RXZlbnRFbmQgJiYgZXZlbnQuc3RhcnQuaXNTYW1lT3JBZnRlcihsYXN0RXZlbnRFbmQpKSB7XG5cdFx0XHRpZiAoY3VycmVudENsdXN0ZXIubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjbHVzdGVycy5wdXNoKGN1cnJlbnRDbHVzdGVyKVxuXHRcdFx0fVxuXHRcdFx0Y3VycmVudENsdXN0ZXIgPSBbXVxuXHRcdH1cblx0XHRjdXJyZW50Q2x1c3Rlci5wdXNoKGV2ZW50KVxuXHRcdGxhc3RFdmVudEVuZCA9IGxhc3RFdmVudEVuZCA/IGRheWpzLm1heChsYXN0RXZlbnRFbmQsIGV2ZW50LmVuZCkgOiBldmVudC5lbmRcblx0fVxuXHRpZiAoY3VycmVudENsdXN0ZXIubGVuZ3RoID4gMCkge1xuXHRcdGNsdXN0ZXJzLnB1c2goY3VycmVudENsdXN0ZXIpXG5cdH1cblxuXHQvLyBTdGVwIDI6IEZvciBlYWNoIGNsdXN0ZXIsIHVzZSBhIG1vcmUgaW50ZWxsaWdlbnQgY29sdW1uIGFzc2lnbm1lbnRcblx0Y29uc3QgcHJvY2Vzc2VkRXZlbnRzOiBQb3NpdGlvbmVkRXZlbnRbXSA9IFtdXG5cdGZvciAoY29uc3QgY2x1c3RlciBvZiBjbHVzdGVycykge1xuXHRcdGlmIChjbHVzdGVyLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0Ly8gU2luZ2xlIGV2ZW50IHRha2VzIGZ1bGwgd2lkdGhcblx0XHRcdGNvbnN0IGV2ZW50ID0gY2x1c3RlclswXVxuXG5cdFx0XHRsZXQgc3RhcnRUaW1lID0gZXZlbnQuc3RhcnQuZGlmZihncmlkU3RhcnQsIGdyaWRUeXBlLCB0cnVlKVxuXHRcdFx0bGV0IGVuZFRpbWUgPSBldmVudC5lbmQuZGlmZihncmlkU3RhcnQsIGdyaWRUeXBlLCB0cnVlKVxuXG5cdFx0XHRpZiAoaXNEaXNjcmV0ZSkge1xuXHRcdFx0XHRzdGFydFRpbWUgPSBNYXRoLmZsb29yKHN0YXJ0VGltZSlcblx0XHRcdFx0ZW5kVGltZSA9IE1hdGguY2VpbChlbmRUaW1lKVxuXHRcdFx0XHQvLyBFbnN1cmUgYXQgbGVhc3QgMSB1bml0IGR1cmF0aW9uIGZvciBkaXNjcmV0ZSBldmVudHNcblx0XHRcdFx0aWYgKGVuZFRpbWUgPD0gc3RhcnRUaW1lKSB7XG5cdFx0XHRcdFx0ZW5kVGltZSA9IHN0YXJ0VGltZSArIDFcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBDbGFtcCB0byBncmlkIGJvdW5kYXJpZXNcblx0XHRcdGlmIChzdGFydFRpbWUgPCAwKSBzdGFydFRpbWUgPSAwXG5cdFx0XHRpZiAoZW5kVGltZSA+IHRvdGFsVW5pdHMpIGVuZFRpbWUgPSB0b3RhbFVuaXRzXG5cblx0XHRcdGNvbnN0IHRvdGFsRHVyYXRpb24gPSBNYXRoLm1heCgwLCBlbmRUaW1lIC0gc3RhcnRUaW1lKVxuXG5cdFx0XHQvLyBTa2lwIGV2ZW50cyB0aGF0IGFyZSBjb21wbGV0ZWx5IG91dHNpZGUgdGhlIGdyaWRcblx0XHRcdGlmICh0b3RhbER1cmF0aW9uID09PSAwKSBjb250aW51ZVxuXG5cdFx0XHRjb25zdCB0b3AgPSAoc3RhcnRUaW1lIC8gdG90YWxVbml0cykgKiAxMDBcblx0XHRcdGNvbnN0IGhlaWdodCA9ICh0b3RhbER1cmF0aW9uIC8gdG90YWxVbml0cykgKiAxMDBcblxuXHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goeyAuLi5ldmVudCwgbGVmdDogMCwgd2lkdGg6IDEwMCwgdG9wLCBoZWlnaHQgfSlcblx0XHRcdGNvbnRpbnVlXG5cdFx0fVxuXG5cdFx0Ly8gTXVsdGlwbGUgZXZlbnRzIC0gdXNlIGxheWVyZWQgcG9zaXRpb25pbmcgYXBwcm9hY2hcblx0XHQvLyBTb3J0IGJ5IGR1cmF0aW9uIChsb25nZXN0IGZpcnN0KSwgdGhlbiBieSBzdGFydCB0aW1lXG5cdFx0Y29uc3Qgc29ydGVkQ2x1c3RlciA9IFsuLi5jbHVzdGVyXS5zb3J0KChhLCBiKSA9PiB7XG5cdFx0XHRjb25zdCBhRHVyYXRpb24gPSBhLmVuZC5kaWZmKGEuc3RhcnQsICdtaW51dGUnKVxuXHRcdFx0Y29uc3QgYkR1cmF0aW9uID0gYi5lbmQuZGlmZihiLnN0YXJ0LCAnbWludXRlJylcblxuXHRcdFx0Ly8gTG9uZ2VyIGV2ZW50cyBmaXJzdFxuXHRcdFx0aWYgKGFEdXJhdGlvbiAhPT0gYkR1cmF0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBiRHVyYXRpb24gLSBhRHVyYXRpb25cblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgc2FtZSBkdXJhdGlvbiwgZWFybGllciBzdGFydCB0aW1lIGZpcnN0XG5cdFx0XHRyZXR1cm4gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG5cdFx0fSlcblxuXHRcdC8vIFByb2Nlc3MgZXZlbnRzIHdpdGggbGF5ZXJlZCBwb3NpdGlvbmluZ1xuXHRcdGNvbnN0IHRvdGFsRXZlbnRzID0gc29ydGVkQ2x1c3Rlci5sZW5ndGhcblxuXHRcdC8vIENhbGN1bGF0ZSBkeW5hbWljIG9mZnNldCBiYXNlZCBvbiBudW1iZXIgb2Ygb3ZlcmxhcHBpbmcgZXZlbnRzXG5cdFx0Ly8gRmV3ZXIgZXZlbnRzID0gbGFyZ2VyIGluZGl2aWR1YWwgb2Zmc2V0cywgbW9yZSBldmVudHMgPSBzbWFsbGVyIG9mZnNldHNcblx0XHRsZXQgbWF4T2Zmc2V0OiBudW1iZXJcblx0XHRpZiAodG90YWxFdmVudHMgPT09IDIpIHtcblx0XHRcdG1heE9mZnNldCA9IDI1IC8vIDI1JSBvZmZzZXQgZm9yIDIgZXZlbnRzXG5cdFx0fSBlbHNlIGlmICh0b3RhbEV2ZW50cyA9PT0gMykge1xuXHRcdFx0bWF4T2Zmc2V0ID0gNTAgLy8gNTAlIHRvdGFsIGZvciAzIGV2ZW50cyAoMjUlIGVhY2gpXG5cdFx0fSBlbHNlIGlmICh0b3RhbEV2ZW50cyA9PT0gNCkge1xuXHRcdFx0bWF4T2Zmc2V0ID0gNjAgLy8gNjAlIHRvdGFsIGZvciA0IGV2ZW50cyAoMjAlIGVhY2gpXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1heE9mZnNldCA9IDcwIC8vIDcwJSB0b3RhbCBmb3IgNSsgZXZlbnRzXG5cdFx0fVxuXG5cdFx0Y29uc3Qgb2Zmc2V0UGVyRXZlbnQgPSB0b3RhbEV2ZW50cyA+IDEgPyBtYXhPZmZzZXQgLyAodG90YWxFdmVudHMgLSAxKSA6IDBcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkQ2x1c3Rlci5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgZXZlbnQgPSBzb3J0ZWRDbHVzdGVyW2ldXG5cblx0XHRcdGxldCBzdGFydFRpbWUgPSBldmVudC5zdGFydC5kaWZmKGdyaWRTdGFydCwgZ3JpZFR5cGUsIHRydWUpXG5cdFx0XHRsZXQgZW5kVGltZSA9IGV2ZW50LmVuZC5kaWZmKGdyaWRTdGFydCwgZ3JpZFR5cGUsIHRydWUpXG5cblx0XHRcdGlmIChpc0Rpc2NyZXRlKSB7XG5cdFx0XHRcdHN0YXJ0VGltZSA9IE1hdGguZmxvb3Ioc3RhcnRUaW1lKVxuXHRcdFx0XHRlbmRUaW1lID0gTWF0aC5jZWlsKGVuZFRpbWUpXG5cdFx0XHRcdGlmIChlbmRUaW1lIDw9IHN0YXJ0VGltZSkge1xuXHRcdFx0XHRcdGVuZFRpbWUgPSBzdGFydFRpbWUgKyAxXG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2xhbXAgdG8gZ3JpZCBib3VuZGFyaWVzXG5cdFx0XHRpZiAoc3RhcnRUaW1lIDwgMCkgc3RhcnRUaW1lID0gMFxuXHRcdFx0aWYgKGVuZFRpbWUgPiB0b3RhbFVuaXRzKSBlbmRUaW1lID0gdG90YWxVbml0c1xuXG5cdFx0XHRjb25zdCB0b3RhbER1cmF0aW9uID0gTWF0aC5tYXgoMCwgZW5kVGltZSAtIHN0YXJ0VGltZSlcblxuXHRcdFx0aWYgKHRvdGFsRHVyYXRpb24gPT09IDApIGNvbnRpbnVlXG5cblx0XHRcdGNvbnN0IHRvcCA9IChzdGFydFRpbWUgLyB0b3RhbFVuaXRzKSAqIDEwMFxuXHRcdFx0Y29uc3QgaGVpZ2h0ID0gKHRvdGFsRHVyYXRpb24gLyB0b3RhbFVuaXRzKSAqIDEwMFxuXG5cdFx0XHQvLyBDYWxjdWxhdGUgcG9zaXRpb25pbmcgYmFzZWQgb24gbGF5ZXIgYW5kIHRvdGFsIGV2ZW50c1xuXHRcdFx0bGV0IGxlZnQ6IG51bWJlclxuXHRcdFx0bGV0IHdpZHRoOiBudW1iZXJcblx0XHRcdGxldCB6SW5kZXg6IG51bWJlclxuXG5cdFx0XHRpZiAoaSA9PT0gMCkge1xuXHRcdFx0XHQvLyBGaXJzdCBldmVudCAobG9uZ2VzdCkgdGFrZXMgZnVsbCB3aWR0aCBhdCBib3R0b21cblx0XHRcdFx0bGVmdCA9IDBcblx0XHRcdFx0d2lkdGggPSAxMDBcblx0XHRcdFx0ekluZGV4ID0gMVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gU3Vic2VxdWVudCBldmVudHMgYXJlIG9mZnNldCBkeW5hbWljYWxseSBiYXNlZCBvbiB0b3RhbCBldmVudCBjb3VudFxuXHRcdFx0XHRsZWZ0ID0gb2Zmc2V0UGVyRXZlbnQgKiBpXG5cdFx0XHRcdHdpZHRoID0gMTAwIC0gbGVmdCAvLyBSZW1haW5pbmcgd2lkdGhcblx0XHRcdFx0ekluZGV4ID0gaSArIDEgLy8gSGlnaGVyIHotaW5kZXggZm9yIGV2ZW50cyBvbiB0b3Bcblx0XHRcdH1cblxuXHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuXHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0bGVmdCxcblx0XHRcdFx0d2lkdGgsXG5cdFx0XHRcdHRvcCxcblx0XHRcdFx0aGVpZ2h0LFxuXHRcdFx0XHR6SW5kZXgsXG5cdFx0XHR9KVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBwcm9jZXNzZWRFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHMge1xuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc2VzPzogeyBoZWFkZXI/OiBzdHJpbmc7IGFsbERheT86IHN0cmluZyB9XG5cdGFsbERheVJvdz86IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5jb25zdCBOb01lbW9WZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXI6IFJlYWN0LkZDPFxuXHRWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXJQcm9wc1xuPiA9ICh7IGNoaWxkcmVuLCBjbGFzc2VzLCBhbGxEYXlSb3cgfSkgPT4ge1xuXHRjb25zdCB7IHN0aWNreVZpZXdIZWFkZXIsIHZpZXdIZWFkZXJDbGFzc05hbWUgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KFxuXHRcdChzdGF0ZSkgPT4gKHtcblx0XHRcdHN0aWNreVZpZXdIZWFkZXI6IHN0YXRlLnN0aWNreVZpZXdIZWFkZXIsXG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lOiBzdGF0ZS52aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdH0pXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIxIGJnLWJhY2tncm91bmQnLCAvLyBaLWluZGV4IGFib3ZlIHRoZSBsZWZ0IHN0aWNreSByZXNvdXJjZSBjb2x1bW5cblx0XHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2gtMTIgYm9yZGVyLWIgdy1maXQnLCBjbGFzc2VzPy5oZWFkZXIpfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtaGVhZGVyXCJcblx0XHRcdD5cblx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0PC9kaXY+XG5cdFx0XHR7LyogQWxsLWRheSByb3cgKi99XG5cdFx0XHR7YWxsRGF5Um93ICYmIChcblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnZmxleCB3LWZ1bGwgYm9yZGVyLWIgbWluLWgtMTIgaC1mdWxsJyxcblx0XHRcdFx0XHRcdGNsYXNzZXM/LmFsbERheVxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLWFsbC1kYXlcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e2FsbERheVJvd31cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXIgPSBtZW1vKFxuXHROb01lbW9WZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXJcbilcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBTY3JvbGxBcmVhLCBTY3JvbGxCYXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkQ29sLCB0eXBlIFZlcnRpY2FsR3JpZENvbFByb3BzIH0gZnJvbSAnLi92ZXJ0aWNhbC1ncmlkLWNvbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lciB9IGZyb20gJy4vdmVydGljYWwtZ3JpZC1oZWFkZXItY29udGFpbmVyJ1xuXG5jb25zdCBCT0RZX0hFSUdIVCA9ICdoLVtjYWxjKDEwMCUtM3JlbSldJ1xuXG5pbnRlcmZhY2UgVmVydGljYWxHcmlkUHJvcHMge1xuXHRjb2x1bW5zOiBWZXJ0aWNhbEdyaWRDb2xQcm9wc1tdXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0dmFyaWFudD86ICdyZWd1bGFyJyB8ICdyZXNvdXJjZSdcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBib2R5Pzogc3RyaW5nOyBhbGxEYXk/OiBzdHJpbmcgfVxuXHRhbGxEYXlSb3c/OiBSZWFjdC5SZWFjdE5vZGVcblx0LyoqXG5cdCAqIE9wdGlvbmFsIGFycmF5IG9mIG1pbnV0ZSBzbG90cyBieSB3aGljaCB0aGUgaG91ciBpcyBkaXZpZGVkXG5cdCAqIGUuZy4sIFswLCAxNSwgMzAsIDQ1XSBmb3IgcXVhcnRlci1ob3VyIHNsb3RzXG5cdCAqL1xuXHRjZWxsU2xvdHM/OiBudW1iZXJbXVxufVxuXG5leHBvcnQgY29uc3QgVmVydGljYWxHcmlkOiBSZWFjdC5GQzxWZXJ0aWNhbEdyaWRQcm9wcz4gPSAoe1xuXHRjb2x1bW5zLFxuXHRjaGlsZHJlbixcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0dmFyaWFudCA9ICdyZXNvdXJjZScsXG5cdGNsYXNzZXMsXG5cdGFsbERheVJvdyxcblx0Y2VsbFNsb3RzLFxufSkgPT4ge1xuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSB2YXJpYW50ID09PSAncmVzb3VyY2UnXG5cdGNvbnN0IGlzUmVndWxhckNhbGVuZGFyID0gIWlzUmVzb3VyY2VDYWxlbmRhclxuXG5cdGNvbnN0IGhlYWRlciA9IGNoaWxkcmVuICYmIChcblx0XHQ8VmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyXG5cdFx0XHRhbGxEYXlSb3c9e2FsbERheVJvd31cblx0XHRcdGNsYXNzZXM9e3sgaGVhZGVyOiBjbGFzc2VzPy5oZWFkZXIsIGFsbERheTogY2xhc3Nlcz8uYWxsRGF5IH19XG5cdFx0PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyPlxuXHQpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImgtZnVsbFwiIGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1jb250YWluZXJcIj5cblx0XHRcdHsvKiBoZWFkZXIgcm93ICovfVxuXHRcdFx0e2lzUmVndWxhckNhbGVuZGFyICYmIGhlYWRlcn1cblxuXHRcdFx0PFNjcm9sbEFyZWFcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnaC1mdWxsJyxcblx0XHRcdFx0XHRpc1JlZ3VsYXJDYWxlbmRhciAmJiAnb3ZlcmZsb3ctYXV0bycsXG5cdFx0XHRcdFx0aXNSZWd1bGFyQ2FsZW5kYXIgJiYgQk9EWV9IRUlHSFQgLy8gc2Nyb2xsIGFyZWEgYmVjb21lcyBib2R5IGluIHJlZ3VsYXIgY2FsZW5kYXJcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLXNjcm9sbFwiXG5cdFx0XHRcdHZpZXdQb3J0UHJvcHM9e3sgY2xhc3NOYW1lOiAnKjpmbGV4ISAqOmZsZXgtY29sISAqOm1pbi1oLWZ1bGwnIH19XG5cdFx0XHQ+XG5cdFx0XHRcdHsvKiBoZWFkZXIgcm93IGZvciByZXNvdXJjZSBjYWxlbmRhciBpbnNpZGUgc2Nyb2xsIGFyZWEgKi99XG5cdFx0XHRcdHtpc1Jlc291cmNlQ2FsZW5kYXIgJiYgaGVhZGVyfVxuXHRcdFx0XHR7LyogQ2FsZW5kYXIgYXJlYSB3aXRoIHNjcm9sbCAqL31cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnZmxleCBmbGV4LTEgdy1maXQnLFxuXHRcdFx0XHRcdFx0aXNSZXNvdXJjZUNhbGVuZGFyICYmIEJPRFlfSEVJR0hULFxuXHRcdFx0XHRcdFx0Y2xhc3Nlcz8uYm9keVxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLWJvZHlcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0ey8qIERheSBjb2x1bW5zIHdpdGggdGltZSBzbG90cyAqL31cblx0XHRcdFx0XHR7Y29sdW1ucy5tYXAoKGNvbHVtbiwgaW5kZXgpID0+IChcblx0XHRcdFx0XHRcdDxWZXJ0aWNhbEdyaWRDb2xcblx0XHRcdFx0XHRcdFx0a2V5PXtgJHtjb2x1bW4uaWR9LSR7aW5kZXh9YH1cblx0XHRcdFx0XHRcdFx0ey4uLmNvbHVtbn1cblx0XHRcdFx0XHRcdFx0Y2VsbFNsb3RzPXtjZWxsU2xvdHN9XG5cdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0aXNMYXN0Q29sdW1uPXtpbmRleCA9PT0gY29sdW1ucy5sZW5ndGggLSAxfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIC8+IHsvKiB2ZXJ0aWNhbCBzY3JvbGxiYXIgKi99XG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIG9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiIC8+eycgJ31cblx0XHRcdFx0ey8qIGhvcml6b250YWwgc2Nyb2xsYmFyICovfVxuXHRcdFx0PC9TY3JvbGxBcmVhPlxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgSG9yaXpvbnRhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgZ2V0TW9udGhXZWVrcyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBNb250aEhlYWRlciB9IGZyb20gJy4vbW9udGgtaGVhZGVyJ1xuaW1wb3J0IHR5cGUgeyBNb250aFZpZXdQcm9wcyB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBNb250aFZpZXc6IFJlYWN0LkZDPE1vbnRoVmlld1Byb3BzPiA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWsgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgd2Vla3MgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldE1vbnRoV2Vla3MoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKSxcblx0XHRbY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrXVxuXHQpXG5cblx0Y29uc3Qgcm93cyA9IHdlZWtzLm1hcCgoZGF5cywgd2Vla0luZGV4KSA9PiAoe1xuXHRcdGlkOiBgd2Vlay0ke3dlZWtJbmRleH1gLFxuXHRcdGNvbHVtbnM6IGRheXMubWFwKChkYXkpID0+ICh7XG5cdFx0XHRpZDogYGNvbC0ke2RheS50b0lTT1N0cmluZygpfWAsXG5cdFx0XHRkYXksXG5cdFx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdFx0fSkpLFxuXHRcdGNsYXNzTmFtZTogJ2ZsZXgtMScsXG5cdFx0c2hvd0RheU51bWJlcjogdHJ1ZSxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8SG9yaXpvbnRhbEdyaWRcblx0XHRcdGNsYXNzZXM9e3sgYm9keTogJ3ctZnVsbCcsIGhlYWRlcjogJ3ctZnVsbCcgfX1cblx0XHRcdHJvd3M9e3Jvd3N9XG5cdFx0XHR2YXJpYW50PVwicmVndWxhclwiXG5cdFx0PlxuXHRcdFx0PE1vbnRoSGVhZGVyIGNsYXNzTmFtZT1cImgtMTJcIiAvPlxuXHRcdDwvSG9yaXpvbnRhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHMge1xuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgTm9NZW1vSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXIgPSAoe1xuXHRjaGlsZHJlbixcblx0Y2xhc3NOYW1lLFxufTogSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXJQcm9wcykgPT4ge1xuXHRjb25zdCB7IHN0aWNreVZpZXdIZWFkZXIsIHZpZXdIZWFkZXJDbGFzc05hbWUgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KFxuXHRcdChzdGF0ZSkgPT4gKHtcblx0XHRcdHN0aWNreVZpZXdIZWFkZXI6IHN0YXRlLnN0aWNreVZpZXdIZWFkZXIsXG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lOiBzdGF0ZS52aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdH0pXG5cdClcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBoLTEyIHctZml0Jyxcblx0XHRcdFx0c3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMjEgYmctYmFja2dyb3VuZCcsXG5cdFx0XHRcdGNsYXNzTmFtZSxcblx0XHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtdGVzdGlkPVwiaG9yaXpvbnRhbC1ncmlkLWhlYWRlclwiXG5cdFx0PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciA9IG1lbW8oXG5cdE5vTWVtb0hvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyXG4pXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyIH0gZnJvbSAnLi9ob3Jpem9udGFsLWdyaWQtaGVhZGVyLWNvbnRhaW5lcidcbmltcG9ydCB7XG5cdEhvcml6b250YWxHcmlkUm93LFxuXHR0eXBlIEhvcml6b250YWxHcmlkUm93UHJvcHMsXG59IGZyb20gJy4vaG9yaXpvbnRhbC1ncmlkLXJvdydcblxuY29uc3QgQk9EWV9IRUlHSFQgPSAnaC1bY2FsYygxMDAlLTNyZW0pXSdcblxuaW50ZXJmYWNlIEhvcml6b250YWxHcmlkUHJvcHMge1xuXHRyb3dzOiBIb3Jpem9udGFsR3JpZFJvd1Byb3BzW11cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBib2R5Pzogc3RyaW5nIH1cblx0YWxsRGF5PzogYm9vbGVhblxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHZhcmlhbnQ/OiAncmVndWxhcicgfCAncmVzb3VyY2UnXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWQ6IFJlYWN0LkZDPEhvcml6b250YWxHcmlkUHJvcHM+ID0gKHtcblx0cm93cyxcblx0Y2hpbGRyZW4sXG5cdGNsYXNzZXMsXG5cdGFsbERheTogdG9wTGV2ZWxBbGxEYXksXG5cdGdyaWRUeXBlLFxuXHR2YXJpYW50ID0gJ3Jlc291cmNlJyxcblx0ZGF5TnVtYmVySGVpZ2h0LFxufSkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoc3RhdGUpID0+ICh7XG5cdFx0Y3VycmVudERhdGU6IHN0YXRlLmN1cnJlbnREYXRlLFxuXHR9KSlcblxuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSB2YXJpYW50ID09PSAncmVzb3VyY2UnXG5cdGNvbnN0IGlzUmVndWxhckNhbGVuZGFyID0gIWlzUmVzb3VyY2VDYWxlbmRhclxuXG5cdGNvbnN0IGhlYWRlciA9IGNoaWxkcmVuICYmIChcblx0XHQ8SG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXIgY2xhc3NOYW1lPXtjbGFzc2VzPy5oZWFkZXJ9PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXI+XG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiaC1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtY29udGFpbmVyXCI+XG5cdFx0XHR7LyoqXG5cdFx0XHQgKiBoZWFkZXIgcm93IGlzIHJlbmRlcmVkIG91dHNpZGUgc2Nyb2xsIGFyZWEgZm9yIHJlZ3VsYXIgY2FsZW5kYXJcblx0XHRcdCAqL31cblx0XHRcdHtpc1JlZ3VsYXJDYWxlbmRhciAmJiBoZWFkZXJ9XG5cblx0XHRcdDxTY3JvbGxBcmVhXG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2gtZnVsbCcsXG5cdFx0XHRcdFx0aXNSZWd1bGFyQ2FsZW5kYXIgJiYgJ292ZXJmbG93LWF1dG8nLFxuXHRcdFx0XHRcdGlzUmVndWxhckNhbGVuZGFyICYmIEJPRFlfSEVJR0hUIC8vIHNjcm9sbCBhcmVhIGJlY29tZXMgYm9keSBpbiByZWd1bGFyIGNhbGVuZGFyXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwiaG9yaXpvbnRhbC1ncmlkLXNjcm9sbFwiXG5cdFx0XHRcdHZpZXdQb3J0UHJvcHM9e3sgY2xhc3NOYW1lOiAnKjpmbGV4ISAqOmZsZXgtY29sISAqOm1pbi1oLWZ1bGwnIH19XG5cdFx0XHQ+XG5cdFx0XHRcdHsvKipcblx0XHRcdFx0ICogaGVhZGVyIHJvdyBmb3IgcmVzb3VyY2UgY2FsZW5kYXIgaW5zaWRlIHNjcm9sbCBhcmVhXG5cdFx0XHRcdCAqICovfVxuXHRcdFx0XHR7aXNSZXNvdXJjZUNhbGVuZGFyICYmIGhlYWRlcn1cblxuXHRcdFx0XHR7LyogQ2FsZW5kYXIgYXJlYSB3aXRoIHNjcm9sbCAqL31cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnZmxleCBmbGV4LTEgdy1maXQnLFxuXHRcdFx0XHRcdFx0aXNSZXNvdXJjZUNhbGVuZGFyICYmIEJPRFlfSEVJR0hULCAvLyB0aGlzIGJlY29tZXMgYm9keSBpbiByZXNvdXJjZSBjYWxlbmRhclxuXHRcdFx0XHRcdFx0Y2xhc3Nlcz8uYm9keVxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtYm9keVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgZmxleCBmbGV4LWNvbCBmbGV4LTFcIlxuXHRcdFx0XHRcdFx0a2V5PXtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0nKX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7cm93cy5tYXAoKHJvdywgaW5kZXgpID0+IChcblx0XHRcdFx0XHRcdFx0PEhvcml6b250YWxHcmlkUm93XG5cdFx0XHRcdFx0XHRcdFx0YWxsRGF5PXtyb3cuYWxsRGF5ID8/IHRvcExldmVsQWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdGRheU51bWJlckhlaWdodD17ZGF5TnVtYmVySGVpZ2h0fVxuXHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3c9e2luZGV4ID09PSByb3dzLmxlbmd0aCAtIDF9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtyb3cuaWR9XG5cdFx0XHRcdFx0XHRcdFx0dmFyaWFudD17dmFyaWFudH1cblx0XHRcdFx0XHRcdFx0XHR7Li4ucm93fVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIC8+XG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIG9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiIC8+XG5cdFx0XHQ8L1Njcm9sbEFyZWE+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuaW50ZXJmYWNlIE1vbnRoSGVhZGVyUHJvcHMge1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IE1vbnRoSGVhZGVyOiBSZWFjdC5GQzxNb250aEhlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG5cdGNvbnN0IHsgZmlyc3REYXlPZldlZWssIHN0aWNreVZpZXdIZWFkZXIsIHZpZXdIZWFkZXJDbGFzc05hbWUsIGN1cnJlbnREYXRlIH0gPVxuXHRcdHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0Ly8gUmVvcmRlciB3ZWVrIGRheXMgYmFzZWQgb24gZmlyc3REYXlPZldlZWtcblx0Y29uc3Qgd2Vla0RheXMgPSBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCB3LWZ1bGwnLFxuXHRcdFx0XHRzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMCcsXG5cdFx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtdGVzdGlkPVwibW9udGgtaGVhZGVyXCJcblx0XHQ+XG5cdFx0XHR7d2Vla0RheXMubWFwKCh3ZWVrRGF5LCBpbmRleCkgPT4gKFxuXHRcdFx0XHQ8QW5pbWF0ZVByZXNlbmNlIGtleT17d2Vla0RheS50b0lTT1N0cmluZygpfSBtb2RlPVwid2FpdFwiPlxuXHRcdFx0XHRcdDxtb3Rpb24uZGl2XG5cdFx0XHRcdFx0XHRhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInB5LTIgdGV4dC1jZW50ZXIgZm9udC1tZWRpdW0gYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHdlZWtkYXktaGVhZGVyLSR7d2Vla0RheS5mb3JtYXQoJ2RkZCcpLnRvTG93ZXJDYXNlKCl9YH1cblx0XHRcdFx0XHRcdGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG5cdFx0XHRcdFx0XHRpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuXHRcdFx0XHRcdFx0a2V5PXt3ZWVrRGF5LnRvSVNPU3RyaW5nKCl9XG5cdFx0XHRcdFx0XHR0cmFuc2l0aW9uPXt7XG5cdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAwLjI1LFxuXHRcdFx0XHRcdFx0XHRlYXNlOiAnZWFzZUluT3V0Jyxcblx0XHRcdFx0XHRcdFx0ZGVsYXk6IGluZGV4ICogMC4wNSxcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSBjYXBpdGFsaXplXCI+e3dlZWtEYXkuZm9ybWF0KCdkZGQnKX08L3NwYW4+XG5cdFx0XHRcdFx0PC9tb3Rpb24uZGl2PlxuXHRcdFx0XHQ8L0FuaW1hdGVQcmVzZW5jZT5cblx0XHRcdCkpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbGxEYXlSb3cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0RGF5SG91cnMsIGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuY29uc3QgQ0VMTF9DTEFTUyA9ICd3LVtjYWxjKCgxMDAlLTRyZW0pLzcpXSBtaW4tdy1bY2FsYygoMTAwJS00cmVtKS83KV0gZmxleC0xJ1xuY29uc3QgTEVGVF9DT0xfV0lEVEggPSAndy0xMCBzbTp3LTE2IG1pbi13LTEwIHNtOm1pbi13LTE2IG1heC13LTEwIHNtOm1heC13LTE2J1xuXG5jb25zdCBXZWVrVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHR0LFxuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdHNlbGVjdERhdGUsXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHRjdXJyZW50TG9jYWxlLFxuXHRcdHRpbWVGb3JtYXQsXG5cdH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspLFxuXHRcdFtjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCBmaXJzdENvbCA9IHtcblx0XHRpZDogJ3RpbWUtY29sJyxcblx0XHRkYXlzOiBnZXREYXlIb3Vycyh7IHJlZmVyZW5jZURhdGU6IGN1cnJlbnREYXRlIH0pLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGNsYXNzTmFtZTogYHNocmluay0wICR7TEVGVF9DT0xfV0lEVEh9IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwYCxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdGhvdXIxMjogdGltZUZvcm1hdCA9PT0gJzEyLWhvdXInLFxuXHRcdFx0XHR9KS5mb3JtYXQoZGF0ZS50b0RhdGUoKSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Ly8gR2VuZXJhdGUgd2VlayBkYXlzXG5cdGNvbnN0IGNvbHVtbnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRyZXR1cm4gd2Vla0RheXMubWFwKChkYXkpID0+ICh7XG5cdFx0XHRpZDogYGRheS1jb2wtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YCxcblx0XHRcdGRheSxcblx0XHRcdGxhYmVsOiBkYXkuZm9ybWF0KCdEJyksXG5cdFx0XHRjbGFzc05hbWU6IENFTExfQ0xBU1MsXG5cdFx0XHRkYXlzOiBnZXREYXlIb3Vycyh7IHJlZmVyZW5jZURhdGU6IGRheSB9KSxcblx0XHRcdHZhbHVlOiBkYXksXG5cdFx0fSkpXG5cdH0sIFt3ZWVrRGF5c10pXG5cblx0cmV0dXJuIChcblx0XHQ8VmVydGljYWxHcmlkXG5cdFx0XHRhbGxEYXlSb3c9e1xuXHRcdFx0XHQ8QWxsRGF5Um93XG5cdFx0XHRcdFx0Y2xhc3Nlcz17eyBjZWxsOiBDRUxMX0NMQVNTLCBzcGFjZXI6IExFRlRfQ09MX1dJRFRIIH19XG5cdFx0XHRcdFx0ZGF5cz17d2Vla0RheXN9XG5cdFx0XHRcdC8+XG5cdFx0XHR9XG5cdFx0XHRjbGFzc2VzPXt7IGhlYWRlcjogJ3ctZnVsbCBoLTE4JywgYm9keTogJ2gtW2NhbGMoMTAwJS00LjVyZW0pXSB3LWZ1bGwnIH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIC4uLmNvbHVtbnNdfVxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT17J2ZsZXggaC1mdWxsIGZsZXgtMSd9IGRhdGEtdGVzdGlkPVwid2Vlay12aWV3LWhlYWRlclwiPlxuXHRcdFx0XHR7LyogQ29ybmVyIGNlbGwgd2l0aCB3ZWVrIG51bWJlciAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTEwIHNtOnctMTYgaC1mdWxsIHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItciBwLTIgZmxleFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXhzXCI+e3QoJ3dlZWsnKX08L3NwYW4+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPntjdXJyZW50RGF0ZS53ZWVrKCl9PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHR7LyogRGF5IGhlYWRlciBjZWxscyAqL31cblx0XHRcdFx0e3dlZWtEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGlzVG9kYXkgPSBkYXkuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXHRcdFx0XHRcdGNvbnN0IGtleSA9IGB3ZWVrLWRheS1oZWFkZXItJHtkYXkudG9JU09TdHJpbmcoKX1gXG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PEFuaW1hdGVQcmVzZW5jZSBrZXk9e2tleX0gbW9kZT1cIndhaXRcIj5cblx0XHRcdFx0XHRcdFx0PG1vdGlvbi5kaXZcblx0XHRcdFx0XHRcdFx0XHRhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J2hvdmVyOmJnLWFjY2VudCBmbGV4LTEgZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBjdXJzb3ItcG9pbnRlciBwLTEgdGV4dC1jZW50ZXIgc206cC0yIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCB3LTUwIGgtZnVsbCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc1RvZGF5ICYmICdiZy1wcmltYXJ5LzEwIGZvbnQtYm9sZCdcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgd2Vlay1kYXktaGVhZGVyLSR7ZGF5LmZvcm1hdCgnZGRkZCcpLnRvTG93ZXJDYXNlKCl9YH1cblx0XHRcdFx0XHRcdFx0XHRleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuXHRcdFx0XHRcdFx0XHRcdGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG5cdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0RGF0ZShkYXkpXG5cdFx0XHRcdFx0XHRcdFx0XHRvcGVuRXZlbnRGb3JtKHsgc3RhcnQ6IGRheSB9KVxuXHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbj17e1xuXHRcdFx0XHRcdFx0XHRcdFx0ZHVyYXRpb246IDAuMjUsXG5cdFx0XHRcdFx0XHRcdFx0XHRlYXNlOiAnZWFzZUluT3V0Jyxcblx0XHRcdFx0XHRcdFx0XHRcdGRlbGF5OiBpbmRleCAqIDAuMDUsXG5cdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCdteC1hdXRvIG10LTEgZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlzVG9kYXkgJiYgJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQnXG5cdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF5OiAnbnVtZXJpYycsXG5cdFx0XHRcdFx0XHRcdFx0XHR9KS5mb3JtYXQoZGF5LnRvRGF0ZSgpKX1cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9tb3Rpb24uZGl2PlxuXHRcdFx0XHRcdFx0PC9BbmltYXRlUHJlc2VuY2U+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFdlZWtWaWV3XG4iLAogICAgImltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBEQVlfSEVBREVSX05BTUVTID0gWydTJywgJ00nLCAnVCcsICdXJywgJ1QnLCAnRicsICdTJ11cbmNvbnN0IEVWRU5UX0RPVF9DT0xPUlMgPSBbJ2JnLXByaW1hcnknLCAnYmctYmx1ZS01MDAnLCAnYmctZ3JlZW4tNTAwJ11cbmNvbnN0IERBWVNfSU5fTUlOSV9DQUxFTkRBUiA9IDQyXG5cbmNvbnN0IGdldERheVRvb2x0aXAgPSAoZXZlbnRDb3VudDogbnVtYmVyKTogc3RyaW5nID0+IHtcblx0aWYgKGV2ZW50Q291bnQgPT09IDApIHtcblx0XHRyZXR1cm4gJydcblx0fVxuXHRjb25zdCBwbHVyYWwgPSBldmVudENvdW50ID4gMSA/ICdzJyA6ICcnXG5cdHJldHVybiBgJHtldmVudENvdW50fSBldmVudCR7cGx1cmFsfWBcbn1cblxuaW50ZXJmYWNlIE1vbnRoRGF0YSB7XG5cdGRhdGU6IGRheWpzLkRheWpzXG5cdG5hbWU6IHN0cmluZ1xuXHRldmVudENvdW50OiBudW1iZXJcblx0bW9udGhLZXk6IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgRGF5RGF0YSB7XG5cdGRhdGU6IGRheWpzLkRheWpzXG5cdGRheUtleTogc3RyaW5nXG5cdGlzSW5DdXJyZW50TW9udGg6IGJvb2xlYW5cblx0aXNUb2RheTogYm9vbGVhblxuXHRpc1NlbGVjdGVkOiBib29sZWFuXG5cdGV2ZW50Q291bnQ6IG51bWJlclxufVxuXG5jb25zdCBZZWFyVmlldyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgc2VsZWN0RGF0ZSwgZXZlbnRzLCBzZXRWaWV3LCBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIHQgfSA9XG5cdFx0dXNlQ2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgY3VycmVudFllYXIgPSBjdXJyZW50RGF0ZS55ZWFyKClcblxuXHRjb25zdCBnZW5lcmF0ZU1vbnRoc0RhdGEgPSAoKTogTW9udGhEYXRhW10gPT4ge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMiB9LCAoXywgbW9udGhJbmRleCkgPT4ge1xuXHRcdFx0Y29uc3QgbW9udGhEYXRlID0gZGF5anMoKVxuXHRcdFx0XHQueWVhcihjdXJyZW50WWVhcilcblx0XHRcdFx0Lm1vbnRoKG1vbnRoSW5kZXgpXG5cdFx0XHRcdC5zdGFydE9mKCdtb250aCcpXG5cdFx0XHRjb25zdCBldmVudHNJbk1vbnRoID0gZXZlbnRzLmZpbHRlcihcblx0XHRcdFx0KGV2ZW50KSA9PlxuXHRcdFx0XHRcdGV2ZW50LnN0YXJ0LnllYXIoKSA9PT0gY3VycmVudFllYXIgJiZcblx0XHRcdFx0XHRldmVudC5zdGFydC5tb250aCgpID09PSBtb250aEluZGV4XG5cdFx0XHQpXG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGRhdGU6IG1vbnRoRGF0ZSxcblx0XHRcdFx0bmFtZTogbW9udGhEYXRlLmZvcm1hdCgnTU1NTScpLFxuXHRcdFx0XHRldmVudENvdW50OiBldmVudHNJbk1vbnRoLmxlbmd0aCxcblx0XHRcdFx0bW9udGhLZXk6IG1vbnRoRGF0ZS5mb3JtYXQoJ01NJyksXG5cdFx0XHR9XG5cdFx0fSlcblx0fVxuXG5cdGNvbnN0IGdlbmVyYXRlRGF5c0Zvck1vbnRoID0gKG1vbnRoRGF0ZTogZGF5anMuRGF5anMpOiBEYXlEYXRhW10gPT4ge1xuXHRcdGNvbnN0IGZpcnN0RGF5T2ZDYWxlbmRhciA9IG1vbnRoRGF0ZS5zdGFydE9mKCdtb250aCcpLnN0YXJ0T2YoJ3dlZWsnKVxuXG5cdFx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IERBWVNfSU5fTUlOSV9DQUxFTkRBUiB9LCAoXywgZGF5SW5kZXgpID0+IHtcblx0XHRcdGNvbnN0IGRheURhdGUgPSBmaXJzdERheU9mQ2FsZW5kYXIuYWRkKGRheUluZGV4LCAnZGF5Jylcblx0XHRcdGNvbnN0IGRheVN0YXJ0ID0gZGF5RGF0ZS5zdGFydE9mKCdkYXknKVxuXHRcdFx0Y29uc3QgZGF5RW5kID0gZGF5RGF0ZS5lbmRPZignZGF5Jylcblx0XHRcdGNvbnN0IGV2ZW50c09uRGF5ID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKGRheVN0YXJ0LCBkYXlFbmQpXG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGRhdGU6IGRheURhdGUsXG5cdFx0XHRcdGRheUtleTogZGF5RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKSxcblx0XHRcdFx0aXNJbkN1cnJlbnRNb250aDogZGF5RGF0ZS5tb250aCgpID09PSBtb250aERhdGUubW9udGgoKSxcblx0XHRcdFx0aXNUb2RheTogZGF5RGF0ZS5pc1NhbWUoZGF5anMoKSwgJ2RheScpLFxuXHRcdFx0XHRpc1NlbGVjdGVkOiBkYXlEYXRlLmlzU2FtZShjdXJyZW50RGF0ZSwgJ2RheScpLFxuXHRcdFx0XHRldmVudENvdW50OiBldmVudHNPbkRheS5sZW5ndGgsXG5cdFx0XHR9XG5cdFx0fSlcblx0fVxuXG5cdGNvbnN0IG5hdmlnYXRlVG9EYXRlID0gKFxuXHRcdGRhdGU6IGRheWpzLkRheWpzLFxuXHRcdHZpZXc6ICdtb250aCcgfCAnZGF5Jyxcblx0XHRldmVudD86IFJlYWN0Lk1vdXNlRXZlbnRcblx0KSA9PiB7XG5cdFx0ZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0c2VsZWN0RGF0ZShkYXRlKVxuXHRcdHNldFZpZXcodmlldylcblx0fVxuXG5cdGNvbnN0IGdldEV2ZW50Q291bnRMYWJlbCA9IChjb3VudDogbnVtYmVyKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCBldmVudFdvcmQgPSBjb3VudCA9PT0gMSA/IHQoJ2V2ZW50JykgOiB0KCdldmVudHMnKVxuXHRcdHJldHVybiBgJHtjb3VudH0gJHtldmVudFdvcmR9YFxuXHR9XG5cblx0Y29uc3QgZ2V0RGF5Q2xhc3NOYW1lID0gKGRheTogRGF5RGF0YSk6IHN0cmluZyA9PiB7XG5cdFx0Y29uc3QgYmFzZUNsYXNzID1cblx0XHRcdCdyZWxhdGl2ZSBmbGV4IGFzcGVjdC1zcXVhcmUgdy1mdWxsIGN1cnNvci1wb2ludGVyIGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBob3ZlcjpiZy1hY2NlbnQgcm91bmRlZC1zbSB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0yMDAnXG5cdFx0Y29uc3Qgb3V0c2lkZU1vbnRoQ2xhc3MgPSBkYXkuaXNJbkN1cnJlbnRNb250aFxuXHRcdFx0PyAnJ1xuXHRcdFx0OiAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG9wYWNpdHktNTAnXG5cdFx0Y29uc3QgdG9kYXlDbGFzcyA9IGRheS5pc1RvZGF5XG5cdFx0XHQ/ICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtZnVsbCdcblx0XHRcdDogJydcblx0XHRjb25zdCBzZWxlY3RlZENsYXNzID1cblx0XHRcdGRheS5pc1NlbGVjdGVkICYmICFkYXkuaXNUb2RheSA/ICdiZy1tdXRlZCByb3VuZGVkLWZ1bGwgZm9udC1ib2xkJyA6ICcnXG5cdFx0Y29uc3QgaGFzRXZlbnRzQ2xhc3MgPVxuXHRcdFx0ZGF5LmV2ZW50Q291bnQgPiAwICYmICFkYXkuaXNUb2RheSAmJiAhZGF5LmlzU2VsZWN0ZWQgPyAnZm9udC1tZWRpdW0nIDogJydcblxuXHRcdHJldHVybiBjbihcblx0XHRcdGJhc2VDbGFzcyxcblx0XHRcdG91dHNpZGVNb250aENsYXNzLFxuXHRcdFx0dG9kYXlDbGFzcyxcblx0XHRcdHNlbGVjdGVkQ2xhc3MsXG5cdFx0XHRoYXNFdmVudHNDbGFzc1xuXHRcdClcblx0fVxuXG5cdGNvbnN0IGdldEV2ZW50RG90Q2xhc3NOYW1lID0gKGNvbG9yOiBzdHJpbmcsIGlzVG9kYXk6IGJvb2xlYW4pOiBzdHJpbmcgPT4ge1xuXHRcdGNvbnN0IGRvdENvbG9yID0gaXNUb2RheSA/ICdiZy1wcmltYXJ5LWZvcmVncm91bmQnIDogY29sb3Jcblx0XHRyZXR1cm4gY24oJ2gtWzNweF0gdy1bM3B4XSByb3VuZGVkLWZ1bGwnLCBkb3RDb2xvcilcblx0fVxuXG5cdGNvbnN0IG1vbnRoc0RhdGEgPSBnZW5lcmF0ZU1vbnRoc0RhdGEoKVxuXG5cdHJldHVybiAoXG5cdFx0PFNjcm9sbEFyZWEgY2xhc3NOYW1lPVwiaC1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJ5ZWFyLXZpZXdcIj5cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPVwiZ3JpZCBhdXRvLXJvd3MtZnIgZ3JpZC1jb2xzLTEgZ2FwLTQgcC00IHNtOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zXCJcblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ5ZWFyLWdyaWRcIlxuXHRcdFx0PlxuXHRcdFx0XHR7bW9udGhzRGF0YS5tYXAoKG1vbnRoLCBtb250aEluZGV4KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZGF5c0luTW9udGggPSBnZW5lcmF0ZURheXNGb3JNb250aChtb250aC5kYXRlKVxuXHRcdFx0XHRcdGNvbnN0IGFuaW1hdGlvbkRlbGF5ID0gbW9udGhJbmRleCAqIDAuMDVcblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImhvdmVyOmJvcmRlci1wcmltYXJ5IGZsZXggZmxleC1jb2wgcm91bmRlZC1sZyBib3JkZXIgcC0zIHRleHQtbGVmdCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgaG92ZXI6c2hhZG93LW1kXCJcblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B5ZWFyLW1vbnRoLSR7bW9udGgubW9udGhLZXl9YH1cblx0XHRcdFx0XHRcdFx0a2V5PXttb250aC5tb250aEtleX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuXHRcdFx0XHRcdFx0XHRcdDxtb3Rpb24uZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm1iLTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCJcblx0XHRcdFx0XHRcdFx0XHRcdGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG5cdFx0XHRcdFx0XHRcdFx0XHRpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtgbW9udGgtJHttb250aEluZGV4fWB9XG5cdFx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uPXt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAwLjI1LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlYXNlOiAnZWFzZUluT3V0Jyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVsYXk6IGFuaW1hdGlvbkRlbGF5LFxuXHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1tZWRpdW0gaG92ZXI6dW5kZXJsaW5lIGN1cnNvci1wb2ludGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B5ZWFyLW1vbnRoLXRpdGxlLSR7bW9udGgubW9udGhLZXl9YH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gbmF2aWdhdGVUb0RhdGUobW9udGguZGF0ZSwgJ21vbnRoJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7bW9udGgubmFtZX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHR7bW9udGguZXZlbnRDb3VudCA+IDAgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1mdWxsIHB4LTIgcHktMSB0ZXh0LXhzXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHllYXItbW9udGgtZXZlbnQtY291bnQtJHttb250aC5tb250aEtleX1gfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e2dldEV2ZW50Q291bnRMYWJlbChtb250aC5ldmVudENvdW50KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHQ8L21vdGlvbi5kaXY+XG5cdFx0XHRcdFx0XHRcdDwvQW5pbWF0ZVByZXNlbmNlPlxuXG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy03IGdhcC1bMXB4XSB0ZXh0LVswLjZyZW1dXCJcblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHllYXItbWluaS1jYWxlbmRhci0ke21vbnRoLm1vbnRoS2V5fWB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7REFZX0hFQURFUl9OQU1FUy5tYXAoKGRheU5hbWUsIGhlYWRlckluZGV4KSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBoLTMgdGV4dC1jZW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2BoZWFkZXItJHtoZWFkZXJJbmRleH1gfVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7ZGF5TmFtZX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdCkpfVxuXG5cdFx0XHRcdFx0XHRcdFx0e2RheXNJbk1vbnRoLm1hcCgoZGF5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBkYXlUZXN0SWQgPSBgeWVhci1kYXktJHttb250aC5kYXRlLmZvcm1hdCgnWVlZWS1NTScpfS0ke2RheS5kYXlLZXl9YFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgaGFzRXZlbnRzID0gZGF5LmV2ZW50Q291bnQgPiAwXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB2aXNpYmxlRG90Q291bnQgPSBNYXRoLm1pbihkYXkuZXZlbnRDb3VudCwgMylcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHZpc2libGVEb3RDb2xvcnMgPSBFVkVOVF9ET1RfQ09MT1JTLnNsaWNlKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlRG90Q291bnRcblx0XHRcdFx0XHRcdFx0XHRcdClcblxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Z2V0RGF5Q2xhc3NOYW1lKGRheSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2RheVRlc3RJZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2RheS5kYXlLZXl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KGUpID0+IG5hdmlnYXRlVG9EYXRlKGRheS5kYXRlLCAnZGF5JywgZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU9e2dldERheVRvb2x0aXAoZGF5LmV2ZW50Q291bnQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC1jZW50ZXIgbGVhZGluZy1ub25lXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ZGF5LmRhdGUuZGF0ZSgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtoYXNFdmVudHMgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdhYnNvbHV0ZSBib3R0b20tMCBmbGV4IHctZnVsbCBqdXN0aWZ5LWNlbnRlciBzcGFjZS14LVsxcHhdJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXkuaXNUb2RheSAmJiAnYm90dG9tLVsxcHhdJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7dmlzaWJsZURvdENvbG9ycy5tYXAoKGRvdENvbG9yKSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Z2V0RXZlbnREb3RDbGFzc05hbWUoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRvdENvbG9yLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXkuaXNUb2RheVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17ZG90Q29sb3J9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHR9KX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pfVxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiAvPlxuXHRcdDwvU2Nyb2xsQXJlYT5cblx0KVxufVxuXG5leHBvcnQgZGVmYXVsdCBZZWFyVmlld1xuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBFdmVudEZvcm1Qcm9wcyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7XG5cdENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlLFxuXHRDZWxsQ2xpY2tJbmZvLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJFbmdpbmUgfSBmcm9tICdAL2hvb2tzL3VzZS1jYWxlbmRhci1lbmdpbmUnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEdBUF9CRVRXRUVOX0VMRU1FTlRTIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnMsIFRyYW5zbGF0b3JGdW5jdGlvbiB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3LCBUaW1lRm9ybWF0IH0gZnJvbSAnQC90eXBlcydcbmltcG9ydCB7IENhbGVuZGFyQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCdcblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhclByb3ZpZGVyUHJvcHMge1xuXHRjaGlsZHJlbjogUmVhY3ROb2RlXG5cdGV2ZW50cz86IENhbGVuZGFyRXZlbnRbXVxuXHRmaXJzdERheU9mV2Vlaz86IG51bWJlciAvLyAwIGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuXHRpbml0aWFsVmlldz86IENhbGVuZGFyVmlld1xuXHRpbml0aWFsRGF0ZT86IGRheWpzLkRheWpzXG5cdHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdE5vZGVcblx0b25FdmVudENsaWNrPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uQ2VsbENsaWNrPzogKGluZm86IENlbGxDbGlja0luZm8pID0+IHZvaWRcblx0b25WaWV3Q2hhbmdlPzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRvbkV2ZW50QWRkPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRXZlbnRVcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudERlbGV0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkRhdGVDaGFuZ2U/OiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcblx0bG9jYWxlPzogc3RyaW5nXG5cdHRpbWV6b25lPzogc3RyaW5nXG5cdGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuXHRkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGV2ZW50U3BhY2luZz86IG51bWJlclxuXHRzdGlja3lWaWV3SGVhZGVyPzogYm9vbGVhblxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nXG5cdGhlYWRlckNvbXBvbmVudD86IFJlYWN0Tm9kZSAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNvbXBvbmVudFxuXHRoZWFkZXJDbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjbGFzc1xuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRyZW5kZXJFdmVudEZvcm0/OiAocHJvcHM6IEV2ZW50Rm9ybVByb3BzKSA9PiBSZWFjdE5vZGVcblx0Ly8gVHJhbnNsYXRpb24gb3B0aW9ucyAtIHByb3ZpZGUgZWl0aGVyIHRyYW5zbGF0aW9ucyBvYmplY3QgT1IgdHJhbnNsYXRvciBmdW5jdGlvblxuXHR0cmFuc2xhdGlvbnM/OiBUcmFuc2xhdGlvbnNcblx0dHJhbnNsYXRvcj86IFRyYW5zbGF0b3JGdW5jdGlvblxuXHR0aW1lRm9ybWF0PzogVGltZUZvcm1hdFxuXHRjbGFzc2VzT3ZlcnJpZGU/OiBDYWxlbmRhckNsYXNzZXNPdmVycmlkZVxufVxuXG5leHBvcnQgY29uc3QgQ2FsZW5kYXJQcm92aWRlcjogUmVhY3QuRkM8Q2FsZW5kYXJQcm92aWRlclByb3BzPiA9ICh7XG5cdGNoaWxkcmVuLFxuXHRldmVudHMgPSBbXSxcblx0Zmlyc3REYXlPZldlZWsgPSAwLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRyZW5kZXJFdmVudCxcblx0b25FdmVudENsaWNrLFxuXHRvbkNlbGxDbGljayxcblx0b25WaWV3Q2hhbmdlLFxuXHRvbkV2ZW50QWRkLFxuXHRvbkV2ZW50VXBkYXRlLFxuXHRvbkV2ZW50RGVsZXRlLFxuXHRvbkRhdGVDaGFuZ2UsXG5cdGxvY2FsZSxcblx0dGltZXpvbmUsXG5cdGRpc2FibGVDZWxsQ2xpY2ssXG5cdGRpc2FibGVFdmVudENsaWNrLFxuXHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdGRheU1heEV2ZW50cyxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdGhlYWRlckNvbXBvbmVudCxcblx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRidXNpbmVzc0hvdXJzLFxuXHRyZW5kZXJFdmVudEZvcm0sXG5cdHRyYW5zbGF0aW9ucyxcblx0dHJhbnNsYXRvcixcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0Y2xhc3Nlc092ZXJyaWRlLFxufSkgPT4ge1xuXHQvLyBVc2UgdGhlIGNhbGVuZGFyIGVuZ2luZVxuXHRjb25zdCBjYWxlbmRhckVuZ2luZSA9IHVzZUNhbGVuZGFyRW5naW5lKHtcblx0XHRldmVudHMsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0aW5pdGlhbFZpZXcsXG5cdFx0aW5pdGlhbERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRvbkV2ZW50QWRkLFxuXHRcdG9uRXZlbnRVcGRhdGUsXG5cdFx0b25FdmVudERlbGV0ZSxcblx0XHRvbkRhdGVDaGFuZ2UsXG5cdFx0b25WaWV3Q2hhbmdlLFxuXHRcdGxvY2FsZSxcblx0XHR0aW1lem9uZSxcblx0XHR0cmFuc2xhdGlvbnMsXG5cdFx0dHJhbnNsYXRvcixcblx0fSlcblxuXHRjb25zdCBlZGl0RXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRXZlbnQoZXZlbnQpXG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcblx0XHR9LFxuXHRcdFtjYWxlbmRhckVuZ2luZV1cblx0KVxuXG5cdC8vIEN1c3RvbSBoYW5kbGVycyB0aGF0IGNhbGwgZXh0ZXJuYWwgY2FsbGJhY2tzXG5cdGNvbnN0IGhhbmRsZUV2ZW50Q2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGlmIChkaXNhYmxlRXZlbnRDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblx0XHRcdGlmIChvbkV2ZW50Q2xpY2spIHtcblx0XHRcdFx0b25FdmVudENsaWNrKGV2ZW50KVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWRpdEV2ZW50KGV2ZW50KVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W2Rpc2FibGVFdmVudENsaWNrLCBvbkV2ZW50Q2xpY2ssIGVkaXRFdmVudF1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZURhdGVDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUNlbGxDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9uQ2VsbENsaWNrKSB7XG5cdFx0XHRcdG9uQ2VsbENsaWNrKGluZm8pXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5vcGVuRXZlbnRGb3JtKGluZm8pXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbb25DZWxsQ2xpY2ssIGRpc2FibGVDZWxsQ2xpY2ssIGNhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Ly8gQ3JlYXRlIHRoZSBjb250ZXh0IHZhbHVlXG5cdGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdGN1cnJlbnREYXRlOiBjYWxlbmRhckVuZ2luZS5jdXJyZW50RGF0ZSxcblx0XHRcdHZpZXc6IGNhbGVuZGFyRW5naW5lLnZpZXcsXG5cdFx0XHRldmVudHM6IGNhbGVuZGFyRW5naW5lLmV2ZW50cyxcblx0XHRcdHJhd0V2ZW50czogY2FsZW5kYXJFbmdpbmUucmF3RXZlbnRzLFxuXHRcdFx0Y3VycmVudExvY2FsZTogY2FsZW5kYXJFbmdpbmUuY3VycmVudExvY2FsZSxcblx0XHRcdGlzRXZlbnRGb3JtT3BlbjogY2FsZW5kYXJFbmdpbmUuaXNFdmVudEZvcm1PcGVuLFxuXHRcdFx0c2VsZWN0ZWRFdmVudDogY2FsZW5kYXJFbmdpbmUuc2VsZWN0ZWRFdmVudCxcblx0XHRcdHNlbGVjdGVkRGF0ZTogY2FsZW5kYXJFbmdpbmUuc2VsZWN0ZWREYXRlLFxuXHRcdFx0Zmlyc3REYXlPZldlZWs6IGNhbGVuZGFyRW5naW5lLmZpcnN0RGF5T2ZXZWVrLFxuXHRcdFx0c2V0Q3VycmVudERhdGU6IGNhbGVuZGFyRW5naW5lLnNldEN1cnJlbnREYXRlLFxuXHRcdFx0c2VsZWN0RGF0ZTogY2FsZW5kYXJFbmdpbmUuc2VsZWN0RGF0ZSxcblx0XHRcdHNldFZpZXc6IGNhbGVuZGFyRW5naW5lLnNldFZpZXcsXG5cdFx0XHRuZXh0UGVyaW9kOiBjYWxlbmRhckVuZ2luZS5uZXh0UGVyaW9kLFxuXHRcdFx0cHJldlBlcmlvZDogY2FsZW5kYXJFbmdpbmUucHJldlBlcmlvZCxcblx0XHRcdHRvZGF5OiBjYWxlbmRhckVuZ2luZS50b2RheSxcblx0XHRcdGFkZEV2ZW50OiBjYWxlbmRhckVuZ2luZS5hZGRFdmVudCxcblx0XHRcdHVwZGF0ZUV2ZW50OiBjYWxlbmRhckVuZ2luZS51cGRhdGVFdmVudCxcblx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiBjYWxlbmRhckVuZ2luZS51cGRhdGVSZWN1cnJpbmdFdmVudCxcblx0XHRcdGRlbGV0ZUV2ZW50OiBjYWxlbmRhckVuZ2luZS5kZWxldGVFdmVudCxcblx0XHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50OiBjYWxlbmRhckVuZ2luZS5kZWxldGVSZWN1cnJpbmdFdmVudCxcblx0XHRcdG9wZW5FdmVudEZvcm06IGNhbGVuZGFyRW5naW5lLm9wZW5FdmVudEZvcm0sXG5cdFx0XHRjbG9zZUV2ZW50Rm9ybTogY2FsZW5kYXJFbmdpbmUuY2xvc2VFdmVudEZvcm0sXG5cdFx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IGNhbGVuZGFyRW5naW5lLmdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRcdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudDogY2FsZW5kYXJFbmdpbmUuZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LFxuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRvbkV2ZW50Q2xpY2s6IGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRvbkNlbGxDbGljazogaGFuZGxlRGF0ZUNsaWNrLFxuXHRcdFx0bG9jYWxlLFxuXHRcdFx0dGltZXpvbmUsXG5cdFx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdFx0XHR0OiBjYWxlbmRhckVuZ2luZS50LFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHR9KSxcblx0XHRbXG5cdFx0XHRjYWxlbmRhckVuZ2luZSxcblx0XHRcdHJlbmRlckV2ZW50LFxuXHRcdFx0aGFuZGxlRXZlbnRDbGljayxcblx0XHRcdGhhbmRsZURhdGVDbGljayxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRdXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxDYWxlbmRhckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRWYWx1ZX0+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9DYWxlbmRhckNvbnRleHQuUHJvdmlkZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IENhbGVuZGFyRG5kQ29udGV4dCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnLWFuZC1kcm9wL2NhbGVuZGFyLWRuZC1jb250ZXh0J1xuaW1wb3J0IHsgRXZlbnRGb3JtRGlhbG9nIH0gZnJvbSAnQC9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS1kaWFsb2cnXG5pbXBvcnQgeyBIZWFkZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvaGVhZGVyJ1xuaW1wb3J0IHsgUmVzb3VyY2VEYXlWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3J1xuaW1wb3J0IHsgUmVzb3VyY2VNb250aFZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldydcbmltcG9ydCB7IFJlc291cmNlV2Vla1ZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3J1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNhbGVuZGFyQm9keTogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgdmlldyB9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHZpZXdNYXAgPSB7XG5cdFx0bW9udGg6IDxSZXNvdXJjZU1vbnRoVmlldyBrZXk9XCJtb250aFwiIC8+LFxuXHRcdHdlZWs6IDxSZXNvdXJjZVdlZWtWaWV3IGtleT1cIndlZWtcIiAvPixcblx0XHRkYXk6IDxSZXNvdXJjZURheVZpZXcga2V5PVwiZGF5XCIgLz4sXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImlsYW15LXJlc291cmNlLWNhbGVuZGFyXCJcblx0XHQ+XG5cdFx0XHQ8SGVhZGVyIGNsYXNzTmFtZT1cInAtMVwiIC8+XG5cblx0XHRcdHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZVByZXNlbmNlIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuXHRcdFx0PENhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdFx0PEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuXHRcdFx0XHRcdDxtb3Rpb24uZGl2XG5cdFx0XHRcdFx0XHRhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHg6IDAgfX1cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBoLVtjYWxjKDEwMCUtMy41cmVtKV0gQGNvbnRhaW5lci9jYWxlbmRhci1ib2R5XCJcblx0XHRcdFx0XHRcdGV4aXQ9e3sgb3BhY2l0eTogMCwgeDogLTIwIH19XG5cdFx0XHRcdFx0XHRpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHg6IDIwIH19XG5cdFx0XHRcdFx0XHRrZXk9e3ZpZXd9XG5cdFx0XHRcdFx0XHR0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjEsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJib3JkZXIgaC1mdWxsIHctZnVsbFwiIGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItYm9keVwiPlxuXHRcdFx0XHRcdFx0XHR7dmlld01hcFt2aWV3XX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvbW90aW9uLmRpdj5cblx0XHRcdFx0PC9BbmltYXRlUHJlc2VuY2U+XG5cdFx0XHQ8L0NhbGVuZGFyRG5kQ29udGV4dD5cblxuXHRcdFx0ey8qIEV2ZW50IEZvcm0gRGlhbG9nICovfVxuXHRcdFx0PEV2ZW50Rm9ybURpYWxvZyAvPlxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0RGF5SG91cnMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlIb3Jpem9udGFsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgdCwgY3VycmVudExvY2FsZSwgdGltZUZvcm1hdCB9ID1cblx0XHR1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0Ly8gR2VuZXJhdGUgdGltZSBjb2x1bW5zIChob3VybHkgc2xvdHMpXG5cdGNvbnN0IGRheUhvdXJzID0gZ2V0RGF5SG91cnMoeyByZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSB9KVxuXG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlRXZlbnRHcmlkIGRheXM9e2RheUhvdXJzfSBncmlkVHlwZT1cImhvdXJcIj5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidy00MCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVzb3VyY2VzJyl9PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgZmxleCBmbGV4LWNvbFwiPlxuXHRcdFx0XHR7LyogVGltZSBoZWFkZXIgcm93ICovfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMlwiPlxuXHRcdFx0XHRcdHtkYXlIb3Vycy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGlzTm93SG91ciA9IGNvbC5pc1NhbWUoZGF5anMoKSwgJ2hvdXInKVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLWRheS1oZWFkZXItJHtjb2wudG9JU09TdHJpbmcoKX1gXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlUHJlc2VuY2Uga2V5PXtgJHtrZXl9LXByZXNlbmNlYH0gbW9kZT1cIndhaXRcIj5cblx0XHRcdFx0XHRcdFx0XHQ8bW90aW9uLmRpdlxuXHRcdFx0XHRcdFx0XHRcdFx0YW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQndy0yMCBib3JkZXItYiBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC14cyBzaHJpbmstMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlzTm93SG91ciAmJiAnYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwIGZvbnQtbWVkaXVtJ1xuXHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgcmVzb3VyY2UtZGF5LXRpbWUtbGFiZWwtJHtjb2wuZm9ybWF0KCdISCcpfWB9XG5cdFx0XHRcdFx0XHRcdFx0XHRleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuXHRcdFx0XHRcdFx0XHRcdFx0aW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cblx0XHRcdFx0XHRcdFx0XHRcdGtleT17YCR7a2V5fS1tb3Rpb25gfVxuXHRcdFx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbj17e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkdXJhdGlvbjogMC4yNSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWFzZTogJ2Vhc2VJbk91dCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlbGF5OiBpbmRleCAqIDAuMDUsXG5cdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRob3VyMTI6IHRpbWVGb3JtYXQgPT09ICcxMi1ob3VyJyxcblx0XHRcdFx0XHRcdFx0XHRcdH0pLmZvcm1hdChjb2wudG9EYXRlKCkpfVxuXHRcdFx0XHRcdFx0XHRcdDwvbW90aW9uLmRpdj5cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlUHJlc2VuY2U+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgUmVzb3VyY2VFdmVudEdyaWRQcm9wcyB7XG5cdC8qKlxuXHQgKiBBcnJheSBvZiBkYXlzIHRvIGRpc3BsYXkgaW4gdGhlIGdyaWRcblx0ICovXG5cdGRheXM6IGRheWpzLkRheWpzW11cblx0LyoqIFRoZSB0eXBlIG9mIGdyaWQgdG8gZGlzcGxheSAtICdkYXknIGZvciBkYXkgdmlldywgJ2hvdXInIGZvciB3ZWVrIHZpZXdcblx0ICogKGFmZmVjdHMgZXZlbnQgcG9zaXRpb25pbmcgbG9naWMpXG5cdCAqL1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdC8qKlxuXHQgKiBDaGlsZHJlbiB3aWxsIGJlIHJlbmRlcmVkIGFzIGhlYWRlcnMgYWJvdmUgdGhlIGdyaWRcblx0ICogKGUuZy4sIGZvciBkYXkgbmFtZXMgaW4gbW9udGggdmlldylcblx0ICovXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzZXM/OiB7IGhlYWRlcj86IHN0cmluZzsgYm9keT86IHN0cmluZzsgc2Nyb2xsPzogc3RyaW5nIH1cbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlRXZlbnRHcmlkOiBSZWFjdC5GQzxSZXNvdXJjZUV2ZW50R3JpZFByb3BzPiA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdGNoaWxkcmVuLFxuXHRjbGFzc2VzLFxufSkgPT4ge1xuXHRjb25zdCB7IGdldFZpc2libGVSZXNvdXJjZXMgfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB2aXNpYmxlUmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cblx0Y29uc3QgY29sdW1ucyA9IGRheXMubWFwKChkYXkpID0+ICh7XG5cdFx0aWQ6IGBjb2wtJHtkYXkudG9JU09TdHJpbmcoKX1gLFxuXHRcdGRheSxcblx0XHRncmlkVHlwZSxcblx0fSkpXG5cblx0Y29uc3Qgcm93cyA9IHZpc2libGVSZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKHtcblx0XHRpZDogcmVzb3VyY2UuaWQsXG5cdFx0dGl0bGU6IHJlc291cmNlLnRpdGxlLFxuXHRcdHJlc291cmNlOiByZXNvdXJjZSxcblx0XHRjb2x1bW5zLFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxIb3Jpem9udGFsR3JpZFxuXHRcdFx0Y2xhc3Nlcz17Y2xhc3Nlc31cblx0XHRcdGRheU51bWJlckhlaWdodD17MH1cblx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdHJvd3M9e3Jvd3N9XG5cdFx0PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvSG9yaXpvbnRhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbGxEYXlDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktY2VsbCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IFJlc291cmNlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBnZXREYXlIb3VycyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZURheVZlcnRpY2FsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgZ2V0VmlzaWJsZVJlc291cmNlcywgY3VycmVudExvY2FsZSwgdGltZUZvcm1hdCB9ID1cblx0XHR1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgcmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cdGNvbnN0IGhvdXJzID0gZ2V0RGF5SG91cnMoeyByZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSB9KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiAndGltZS1jb2wnLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdGhvdXIxMjogdGltZUZvcm1hdCA9PT0gJzEyLWhvdXInLFxuXHRcdFx0XHR9KS5mb3JtYXQoZGF0ZS50b0RhdGUoKSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdGlkOiBgZGF5LWNvbC0ke2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpfS1yZXNvdXJjZS0ke3Jlc291cmNlLmlkfWAsXG5cdFx0cmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0ZGF5OiBjdXJyZW50RGF0ZSxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGxcIj5cblx0XHRcdFx0XHQ8QWxsRGF5Q2VsbCAvPlxuXHRcdFx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKFxuXHRcdFx0XHRcdFx0PEFsbERheVJvd1xuXHRcdFx0XHRcdFx0XHRjbGFzc2VzPXt7IGNlbGw6ICdtaW4tdy01MCcgfX1cblx0XHRcdFx0XHRcdFx0ZGF5cz17W2N1cnJlbnREYXRlXX1cblx0XHRcdFx0XHRcdFx0a2V5PXtgcmVzb3VyY2UtYWxsZGF5LXJvdy0ke3Jlc291cmNlLmlkfWB9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHRcdFx0c2hvd1NwYWNlcj17ZmFsc2V9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCkpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdH1cblx0XHRcdGNlbGxTbG90cz17WzAsIDE1LCAzMCwgNDVdfVxuXHRcdFx0Y2xhc3Nlcz17eyBib2R5OiAndy1mdWxsJywgaGVhZGVyOiAndy1mdWxsJyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtZGF5XCJcblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0PlxuXHRcdFx0ey8qIEhlYWRlciAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXsnZmxleCBib3JkZXItYiBoLTEyIGZsZXgtMSd9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtbW9udGgtaGVhZGVyXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCBib3JkZXItciB3LTE2IHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCIgLz5cblx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0PFJlc291cmNlQ2VsbFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWluLXctNTBcIlxuXHRcdFx0XHRcdFx0a2V5PXtgcmVzb3VyY2UtY2VsbC0ke3Jlc291cmNlLmlkfWB9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgUmVzb3VyY2VEYXlIb3Jpem9udGFsIH0gZnJvbSAnLi9yZXNvdXJjZS1kYXktaG9yaXpvbnRhbCdcbmltcG9ydCB7IFJlc291cmNlRGF5VmVydGljYWwgfSBmcm9tICcuL3Jlc291cmNlLWRheS12ZXJ0aWNhbCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlRGF5VmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgb3JpZW50YXRpb24gfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRpZiAob3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcpIHtcblx0XHRyZXR1cm4gPFJlc291cmNlRGF5VmVydGljYWwgLz5cblx0fVxuXG5cdHJldHVybiA8UmVzb3VyY2VEYXlIb3Jpem9udGFsIC8+XG59XG4iLAogICAgImltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGdldE1vbnRoRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHQgfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHQvLyBHZW5lcmF0ZSBjYWxlbmRhciBncmlkIC0gZGF5cyBvZiB0aGUgbW9udGhcblx0Y29uc3QgbW9udGhEYXlzID0gdXNlTWVtbzxkYXlqcy5EYXlqc1tdPigoKSA9PiB7XG5cdFx0cmV0dXJuIGdldE1vbnRoRGF5cyhjdXJyZW50RGF0ZSlcblx0fSwgW2N1cnJlbnREYXRlXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUV2ZW50R3JpZCBkYXlzPXttb250aERheXN9PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTQwIGJvcmRlci1iIGJvcmRlci1yIHNocmluay0wIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXNvdXJjZXMnKX08L2Rpdj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHR7bW9udGhEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBrZXkgPSBgcmVzb3VyY2UtbW9udGgtaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9YFxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEFuaW1hdGVQcmVzZW5jZSBrZXk9e2Ake2tleX0tcHJlc2VuY2VgfSBtb2RlPVwid2FpdFwiPlxuXHRcdFx0XHRcdFx0PG1vdGlvbi5kaXZcblx0XHRcdFx0XHRcdFx0YW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctMjAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZmxleC1jb2xcIlxuXHRcdFx0XHRcdFx0XHRleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuXHRcdFx0XHRcdFx0XHRpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuXHRcdFx0XHRcdFx0XHRrZXk9e2Ake2tleX0tbW90aW9uYH1cblx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbj17e1xuXHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAwLjI1LFxuXHRcdFx0XHRcdFx0XHRcdGVhc2U6ICdlYXNlSW5PdXQnLFxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5OiBpbmRleCAqIDAuMDUsXG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LW1lZGl1bVwiPntkYXkuZm9ybWF0KCdEJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnZGRkJyl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9tb3Rpb24uZGl2PlxuXHRcdFx0XHRcdDwvQW5pbWF0ZVByZXNlbmNlPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L1Jlc291cmNlRXZlbnRHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUmVzb3VyY2VDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL3Jlc291cmNlLWNlbGwnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlTW9udGhWZXJ0aWNhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGdldFZpc2libGVSZXNvdXJjZXMgfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCByZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblx0Y29uc3Qgc3RhcnRPZk1vbnRoID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuXHRjb25zdCBkYXlzSW5Nb250aCA9IEFycmF5LmZyb20oXG5cdFx0eyBsZW5ndGg6IGN1cnJlbnREYXRlLmRheXNJbk1vbnRoKCkgfSxcblx0XHQoXywgaSkgPT4gc3RhcnRPZk1vbnRoLmFkZChpLCAnZGF5Jylcblx0KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiAnZGF0ZS1jb2wnLFxuXHRcdGRheXM6IGRheXNJbk1vbnRoLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IGRheWpzLkRheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdDxzcGFuPntkYXRlLmZvcm1hdCgnRCcpfTwvc3Bhbj5cblx0XHRcdFx0PHNwYW4+e2RhdGUuZm9ybWF0KCdkZGQnKX08L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdGlkOiBgbW9udGgtY29sLXJlc291cmNlLSR7cmVzb3VyY2UuaWR9YCxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRkYXlzOiBkYXlzSW5Nb250aCxcblx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6ICd3LWZ1bGwnLCBib2R5OiAndy1mdWxsJyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtbW9udGgtdmVydGljYWwtZ3JpZFwiXG5cdFx0PlxuXHRcdFx0ey8qIEhlYWRlciAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXsnZmxleCBib3JkZXItYiBoLTEyIGZsZXgtMSd9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtbW9udGgtaGVhZGVyXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCBib3JkZXItciB3LTE2IHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCIgLz5cblx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0PFJlc291cmNlQ2VsbFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWluLXctNTBcIlxuXHRcdFx0XHRcdFx0a2V5PXtgcmVzb3VyY2UtY2VsbC0ke3Jlc291cmNlLmlkfWB9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgUmVzb3VyY2VNb250aEhvcml6b250YWwgfSBmcm9tICcuL3Jlc291cmNlLW1vbnRoLWhvcml6b250YWwnXG5pbXBvcnQgeyBSZXNvdXJjZU1vbnRoVmVydGljYWwgfSBmcm9tICcuL3Jlc291cmNlLW1vbnRoLXZlcnRpY2FsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VNb250aFZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IG9yaWVudGF0aW9uIH0gPSB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKG9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XG5cdFx0cmV0dXJuIDxSZXNvdXJjZU1vbnRoVmVydGljYWwgLz5cblx0fVxuXG5cdHJldHVybiA8UmVzb3VyY2VNb250aEhvcml6b250YWwgLz5cbn1cbiIsCiAgICAiaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJlc291cmNlRXZlbnRHcmlkIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXREYXlIb3VycywgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrSG9yaXpvbnRhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrLCB0LCBjdXJyZW50TG9jYWxlLCB0aW1lRm9ybWF0IH0gPVxuXHRcdHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHQvLyBHZW5lcmF0ZSB3ZWVrIGRheXNcblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdC8vIEdlbmVyYXRlIHRpbWUgY29sdW1ucyAoaG91cmx5IHNsb3RzKVxuXHRjb25zdCB3ZWVrSG91cnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRyZXR1cm4gd2Vla0RheXMuZmxhdE1hcCgoZGF5KSA9PiBnZXREYXlIb3Vycyh7IHJlZmVyZW5jZURhdGU6IGRheSB9KSlcblx0fSwgW3dlZWtEYXlzXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUV2ZW50R3JpZFxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6ICdoLTI0JyB9fVxuXHRcdFx0ZGF5cz17d2Vla0hvdXJzfVxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctNDAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0ey8qIERheSBoZWFkZXIgcm93ICovfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMlwiPlxuXHRcdFx0XHRcdHt3ZWVrRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGlzVG9kYXkgPSBkYXkuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9LWRheWBcblxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PEFuaW1hdGVQcmVzZW5jZSBrZXk9e2Ake2tleX0tcHJlc2VuY2VgfSBtb2RlPVwid2FpdFwiPlxuXHRcdFx0XHRcdFx0XHRcdDxtb3Rpb24uZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCdzaHJpbmstMCBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgYm9yZGVyLWIgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXIgZm9udC1tZWRpdW0gdy1bY2FsYygyNCp2YXIoLS1zcGFjaW5nKSoyMCldJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXNUb2RheSAmJiAnYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwJ1xuXHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG5cdFx0XHRcdFx0XHRcdFx0XHRpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uPXt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAwLjI1LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlYXNlOiAnZWFzZUluT3V0Jyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVsYXk6IGluZGV4ICogMC4wNSxcblx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzdGlja3kgbGVmdC0xLzJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e2RheS5mb3JtYXQoJ00vRCcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDwvbW90aW9uLmRpdj5cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlUHJlc2VuY2U+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBUaW1lIGhlYWRlciByb3cgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyIGJvcmRlci1iXCI+XG5cdFx0XHRcdFx0e3dlZWtIb3Vycy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGlzTm93SG91ciA9IGNvbC5pc1NhbWUoZGF5anMoKSwgJ2hvdXInKVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7Y29sLnRvSVNPU3RyaW5nKCl9LWhvdXJgXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlUHJlc2VuY2Uga2V5PXtgJHtrZXl9LXByZXNlbmNlYH0gbW9kZT1cIndhaXRcIj5cblx0XHRcdFx0XHRcdFx0XHQ8bW90aW9uLmRpdlxuXHRcdFx0XHRcdFx0XHRcdFx0YW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQndy0yMCBib3JkZXItciBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXhzIHNocmluay0wJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXNOb3dIb3VyICYmICdiZy1ibHVlLTUwIHRleHQtYmx1ZS02MDAgZm9udC1tZWRpdW0nXG5cdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2ByZXNvdXJjZS13ZWVrLXRpbWUtbGFiZWwtJHtjb2wuZm9ybWF0KCdISCcpfWB9XG5cdFx0XHRcdFx0XHRcdFx0XHRleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuXHRcdFx0XHRcdFx0XHRcdFx0aW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cblx0XHRcdFx0XHRcdFx0XHRcdGtleT17YCR7a2V5fS1tb3Rpb25gfVxuXHRcdFx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbj17e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkdXJhdGlvbjogMC4yNSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWFzZTogJ2Vhc2VJbk91dCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlbGF5OiBpbmRleCAqIDAuMDUsXG5cdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRob3VyMTI6IHRpbWVGb3JtYXQgPT09ICcxMi1ob3VyJyxcblx0XHRcdFx0XHRcdFx0XHRcdH0pLmZvcm1hdChjb2wudG9EYXRlKCkpfVxuXHRcdFx0XHRcdFx0XHRcdDwvbW90aW9uLmRpdj5cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlUHJlc2VuY2U+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQWxsRGF5Q2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LWNlbGwnXG5pbXBvcnQgeyBBbGxEYXlSb3cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldERheUhvdXJzLCBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVdlZWtWZXJ0aWNhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRnZXRWaXNpYmxlUmVzb3VyY2VzLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0dGltZUZvcm1hdCxcblx0XHR0LFxuXHR9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHJlc291cmNlcyA9IGdldFZpc2libGVSZXNvdXJjZXMoKVxuXHQvLyBHZW5lcmF0ZSB3ZWVrIGRheXNcblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0gdXNlTWVtbyhcblx0XHQoKSA9PiAoe1xuXHRcdFx0aWQ6ICd0aW1lLWNvbCcsXG5cdFx0XHRkYXlzOiBnZXREYXlIb3Vycyh7IHJlZmVyZW5jZURhdGU6IGN1cnJlbnREYXRlIH0pLFxuXHRcdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0XHRjbGFzc05hbWU6XG5cdFx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0XHRub0V2ZW50czogdHJ1ZSxcblx0XHRcdHJlbmRlckNlbGw6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gKFxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdFx0e0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuXHRcdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdFx0aG91cjEyOiB0aW1lRm9ybWF0ID09PSAnMTItaG91cicsXG5cdFx0XHRcdFx0fSkuZm9ybWF0KGRhdGUudG9EYXRlKCkpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCksXG5cdFx0fSksXG5cdFx0W2N1cnJlbnREYXRlLCBjdXJyZW50TG9jYWxlLCB0aW1lRm9ybWF0XVxuXHQpXG5cblx0Y29uc3QgY29sdW1ucyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdHJlc291cmNlcy5mbGF0TWFwKChyZXNvdXJjZSkgPT5cblx0XHRcdFx0d2Vla0RheXMubWFwKChkYXkpID0+ICh7XG5cdFx0XHRcdFx0aWQ6IGBkYXktY29sLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfS1yZXNvdXJjZS0ke3Jlc291cmNlLmlkfWAsXG5cdFx0XHRcdFx0cmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG5cdFx0XHRcdFx0ZGF5LFxuXHRcdFx0XHRcdGRheXM6IGdldERheUhvdXJzKHsgcmVmZXJlbmNlRGF0ZTogZGF5IH0pLFxuXHRcdFx0XHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0XHRcdH0pKVxuXHRcdFx0KSxcblx0XHRbcmVzb3VyY2VzLCB3ZWVrRGF5c11cblx0KVxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleFwiPlxuXHRcdFx0XHRcdDxBbGxEYXlDZWxsIC8+XG5cdFx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0XHQ8QWxsRGF5Um93XG5cdFx0XHRcdFx0XHRcdGNsYXNzZXM9e3sgY2VsbDogJ21pbi13LTUwJyB9fVxuXHRcdFx0XHRcdFx0XHRkYXlzPXt3ZWVrRGF5c31cblx0XHRcdFx0XHRcdFx0a2V5PXtgcmVzb3VyY2Utd2Vlay1hbGxkYXktcm93LSR7cmVzb3VyY2UuaWR9YH1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRzaG93U3BhY2VyPXtmYWxzZX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0fVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6ICdoLTI0JyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2Utd2Vla1wiXG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0ey8qIFJlc291cmNlIGhlYWRlciByb3cgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCB3LTE2IGJvcmRlci1yIHotMjAgYmctYmFja2dyb3VuZCBzdGlja3kgbGVmdC0wXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJweC0yIGgtZnVsbCB3LWZ1bGwgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1lbmQgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0e3QoJ3dlZWsnKX1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBrZXkgPSBgcmVzb3VyY2Utd2Vlay1oZWFkZXItJHtyZXNvdXJjZS5pZH0tZGF5YFxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8QW5pbWF0ZVByZXNlbmNlIGtleT17YCR7a2V5fS1wcmVzZW5jZWB9IG1vZGU9XCJ3YWl0XCI+XG5cdFx0XHRcdFx0XHRcdFx0PG1vdGlvbi5kaXZcblx0XHRcdFx0XHRcdFx0XHRcdGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0J3Nocmluay0wIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBib3JkZXItYiBmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciBmb250LW1lZGl1bSB3LVtjYWxjKDcqdmFyKC0tc3BhY2luZykqNTApXSdcblx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuXHRcdFx0XHRcdFx0XHRcdFx0aW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cblx0XHRcdFx0XHRcdFx0XHRcdGtleT17YCR7a2V5fS1tb3Rpb25gfVxuXHRcdFx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbj17e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkdXJhdGlvbjogMC4yNSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWFzZTogJ2Vhc2VJbk91dCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlbGF5OiBpbmRleCAqIDAuMDUsXG5cdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdDxSZXNvdXJjZUNlbGwgY2xhc3NOYW1lPVwiaC1mdWxsXCIgcmVzb3VyY2U9e3Jlc291cmNlfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzdGlja3kgbGVmdC0xLzIgdGV4dC1zbSBmb250LW1lZGl1bSB0cnVuY2F0ZVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtyZXNvdXJjZS50aXRsZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L1Jlc291cmNlQ2VsbD5cblx0XHRcdFx0XHRcdFx0XHQ8L21vdGlvbi5kaXY+XG5cdFx0XHRcdFx0XHRcdDwvQW5pbWF0ZVByZXNlbmNlPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH0pfVxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHR7LyogRGF0ZSBoZWFkZXIgcm93ICovfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMlwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic2hyaW5rLTAgdy0xNiBib3JkZXItciBib3JkZXItYiB6LTIwIGJnLWJhY2tncm91bmQgc3RpY2t5IGxlZnQtMFwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwicHgtMiBoLWZ1bGwgdy1mdWxsIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtc3RhcnQgZm9udC1tZWRpdW1cIj5cblx0XHRcdFx0XHRcdFx0e2N1cnJlbnREYXRlLndlZWsoKX1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHR7Y29sdW1ucy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGRheSA9IGNvbC5kYXlcblx0XHRcdFx0XHRcdGNvbnN0IGtleSA9IGByZXNvdXJjZS13ZWVrLWhlYWRlci0ke2RheS50b0lTT1N0cmluZygpfS1ob3VyLSR7Y29sLnJlc291cmNlSWR9YFxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8QW5pbWF0ZVByZXNlbmNlIGtleT17YCR7a2V5fS1wcmVzZW5jZWB9IG1vZGU9XCJ3YWl0XCI+XG5cdFx0XHRcdFx0XHRcdFx0PG1vdGlvbi5kaXZcblx0XHRcdFx0XHRcdFx0XHRcdGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0J3ctNTAgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQteHMgc2hyaW5rLTAgYmctYmFja2dyb3VuZCdcblx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHJlc291cmNlLXdlZWstdGltZS1sYWJlbC0ke2RheS5mb3JtYXQoJ0hIJyl9YH1cblx0XHRcdFx0XHRcdFx0XHRcdGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG5cdFx0XHRcdFx0XHRcdFx0XHRpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uPXt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAwLjI1LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlYXNlOiAnZWFzZUluT3V0Jyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVsYXk6IGluZGV4ICogMC4wNSxcblx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnTS9EJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8L21vdGlvbi5kaXY+XG5cdFx0XHRcdFx0XHRcdDwvQW5pbWF0ZVByZXNlbmNlPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH0pfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtIb3Jpem9udGFsIH0gZnJvbSAnLi9yZXNvdXJjZS13ZWVrLWhvcml6b250YWwnXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtWZXJ0aWNhbCB9IGZyb20gJy4vcmVzb3VyY2Utd2Vlay12ZXJ0aWNhbCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlV2Vla1ZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IG9yaWVudGF0aW9uIH0gPSB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKG9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XG5cdFx0cmV0dXJuIDxSZXNvdXJjZVdlZWtWZXJ0aWNhbCAvPlxuXHR9XG5cblx0cmV0dXJuIDxSZXNvdXJjZVdlZWtIb3Jpem9udGFsIC8+XG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUge1xuXHRJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wRXZlbnQsXG5cdElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BzLFxufSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHtcblx0REFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0R0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdFdFRUtfREFZU19OVU1CRVJfTUFQLFxufSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBub3JtYWxpemVFdmVudHMsIHNhZmVEYXRlIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyQm9keSB9IGZyb20gJy4vcmVzb3VyY2UtY2FsZW5kYXItYm9keSdcblxuZXhwb3J0IGNvbnN0IElsYW15UmVzb3VyY2VDYWxlbmRhcjogUmVhY3QuRkM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHM+ID0gKHtcblx0ZXZlbnRzID0gW10sXG5cdHJlc291cmNlcyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9ICdzdW5kYXknLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRkaXNhYmxlRHJhZ0FuZERyb3AgPSBmYWxzZSxcblx0ZGF5TWF4RXZlbnRzID0gREFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdC4uLnByb3BzXG59KSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlQ2FsZW5kYXJQcm92aWRlclxuXHRcdFx0ZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3A9e2Rpc2FibGVEcmFnQW5kRHJvcH1cblx0XHRcdGV2ZW50U3BhY2luZz17ZXZlbnRTcGFjaW5nfVxuXHRcdFx0ZXZlbnRzPXtub3JtYWxpemVFdmVudHM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50Pihcblx0XHRcdFx0ZXZlbnRzXG5cdFx0XHQpfVxuXHRcdFx0Zmlyc3REYXlPZldlZWs9e1dFRUtfREFZU19OVU1CRVJfTUFQW2ZpcnN0RGF5T2ZXZWVrXX1cblx0XHRcdGluaXRpYWxEYXRlPXtzYWZlRGF0ZShpbml0aWFsRGF0ZSl9XG5cdFx0XHRpbml0aWFsVmlldz17aW5pdGlhbFZpZXd9XG5cdFx0XHRyZXNvdXJjZXM9e3Jlc291cmNlc31cblx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PFJlc291cmNlQ2FsZW5kYXJCb2R5IC8+XG5cdFx0PC9SZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXI+XG5cdClcbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICJBQUlBLGdCQUFTLGVDSlQsZ0JBQVMsZUNBVCxzQkFDQSwwQ0FDQSw4Q0FDQSwrQ0FDQSwyQ0FDQSx1Q0FDQSx5Q0FDQSxvQ0FDQSx3Q0FDQSwyQ0FHQSxHQUFNLE9BQU8sRUFBTyxFQUNwQixHQUFNLE9BQU8sRUFBVSxFQUN2QixHQUFNLE9BQU8sRUFBYSxFQUMxQixHQUFNLE9BQU8sRUFBYyxFQUMzQixHQUFNLE9BQU8sRUFBUyxFQUN0QixHQUFNLE9BQU8sRUFBTSxFQUNuQixHQUFNLE9BQU8sRUFBUSxFQUNyQixHQUFNLE9BQU8sRUFBRyxFQUNoQixHQUFNLE9BQU8sRUFBVSxFQUV2QixJQUFlLEtDckJmLGVBQVMsY0FDVCxrQkFBUyx3QkFHRixTQUFTLENBQUUsSUFBSSxFQUFzQixDQUMzQyxPQUFPLEdBQVEsR0FBSyxDQUFNLENBQUMsRUFHckIsU0FBUyxFQUFRLENBQ3ZCLEVBQzBCLENBQzFCLEdBQUksSUFBUyxPQUNaLE9BRUQsR0FBSSxFQUFNLFFBQVEsQ0FBSSxFQUNyQixPQUFPLEVBRVIsSUFBTSxFQUFhLEVBQU0sQ0FBSSxFQUM3QixPQUFPLEVBQVcsUUFBUSxFQUFJLEVBQWEsT0FHckMsSUFBTSxHQUFXLENBQ3ZCLEVBQ0EsSUFDZ0IsQ0FDaEIsSUFBTSxFQUFTLElBQUssQ0FBSSxFQUN4QixRQUFXLEtBQU8sRUFDakIsT0FBTyxFQUFPLEdBRWYsT0FBTyxHQWlCRCxTQUFTLEVBTWYsQ0FBQyxF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RCxHQUFzQixNQUFPLEVBQ25DLElBQUssR0FBQyxHQUFELEdBQXFCLEtBQU0sQ0FDakMsRUFFQSxPQUNDLEdBMEJFLE1BMUJGLENBQ0MsVUFBVSw4QkFDVixjQUFZLDBCQUZiLFNBMEJFLENBdEJELEdBQUMsR0FBRCxDQUFRLFVBQVUsTUFBTSxFQUd4QixHQWVFLEdBZkYsVUFDQyxHQWFFLEdBYkYsQ0FBaUIsS0FBSyxPQUF0QixTQUNDLEdBV0UsR0FBTyxJQVhULENBQ0MsUUFBUyxDQUFFLFFBQVMsRUFBRyxFQUFHLENBQUUsRUFDNUIsVUFBVSx3REFDVixLQUFNLENBQUUsUUFBUyxFQUFHLEVBQUcsR0FBSSxFQUMzQixRQUFTLENBQUUsUUFBUyxFQUFHLEVBQUcsRUFBRyxFQUU3QixXQUFZLENBQUUsU0FBVSxJQUFLLEtBQU0sV0FBWSxFQU5oRCxTQVFDLEdBRUUsTUFGRixDQUFLLFVBQVUsdUJBQXVCLGNBQVksZ0JBQWxELFNBQ0UsRUFBUSxHQUNSLEdBTEcsQ0FNSixFQUNELEVBQ0QsRUFHRixHQUFDLEdBQUQsRUFBaUIsR0FDaEIsNENXL0JHLElBQU0sR0FBOEQsRUFDMUUsU0FBUyxDQUFDLEVBQ1YsWUFBWSxDQUFDLEVBQ2IsaUJBQWlCLFNBQ2pCLGNBQWMsUUFDZCxjQUNBLHFCQUFxQixHQUNyQixlQUFlLEdBQ2YsYUFBYSxVQUNiLGVBQWUsTUFDWixLQUNFLENBQ0wsT0FDQyxHQWVFLEdBZkYsQ0FDQyxhQUFjLEVBQ2QsbUJBQW9CLEVBQ3BCLGFBQWMsRUFDZCxPQUFRLEdBQ1AsQ0FDRCxFQUNBLGVBQWdCLEdBQXFCLEdBQ3JDLFlBQWEsR0FBUyxDQUFXLEVBQ2pDLFlBQWEsRUFDYixVQUFXLEVBQ1gsV0FBWSxLQUNSLEVBWkwsU0FjQyxHQUFDLEdBQUQsRUFBc0IsRUFDckIiLAogICJkZWJ1Z0lkIjogIjVDMDJFODNEMEY3NTAyNTI2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
|