/*! For license information please see 151.4a458159.js.LICENSE.txt */ "use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[151],{583:(e,t,r)=>{r.d(t,{Z:()=>G});var n=r(7462),o=r(3366),a=r(7294),i=r(512),l=r(9766),s=r(1387),c=(r(9864),r(4780)),u=r(2996),d=r(8038),p=r(8216),f=r(401),m=r(5961),h=r(5108),g=r(948),v=r(1705),Z=r(9299),b=r(1588),y=r(4867);function x(e){return(0,y.Z)("MuiSelect",e)}const S=(0,b.Z)("MuiSelect",["root","select","multiple","filled","outlined","standard","disabled","focused","icon","iconOpen","iconFilled","iconOutlined","iconStandard","nativeInput","error"]);var w,P=r(5893);const A=["aria-describedby","aria-label","autoFocus","autoWidth","children","className","defaultOpen","defaultValue","disabled","displayEmpty","error","IconComponent","inputRef","labelId","MenuProps","multiple","name","onBlur","onChange","onClose","onFocus","onOpen","open","readOnly","renderValue","SelectDisplayProps","tabIndex","type","value","variant"],k=(0,g.ZP)("div",{name:"MuiSelect",slot:"Select",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[{[`&.${S.select}`]:t.select},{[`&.${S.select}`]:t[r.variant]},{[`&.${S.error}`]:t.error},{[`&.${S.multiple}`]:t.multiple}]}})(m.wU,{[`&.${S.select}`]:{height:"auto",minHeight:"1.4375em",textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden"}}),R=(0,g.ZP)("svg",{name:"MuiSelect",slot:"Icon",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[t.icon,r.variant&&t[`icon${(0,p.Z)(r.variant)}`],r.open&&t.iconOpen]}})(m.SJ),C=(0,g.ZP)("input",{shouldForwardProp:e=>(0,g.Dz)(e)&&"classes"!==e,name:"MuiSelect",slot:"NativeInput",overridesResolver:(e,t)=>t.nativeInput})({bottom:0,left:0,position:"absolute",opacity:0,pointerEvents:"none",width:"100%",boxSizing:"border-box"});function M(e,t){return"object"==typeof t&&null!==t?e===t:String(e)===String(t)}function I(e){return null==e||"string"==typeof e&&!e.trim()}const O=a.forwardRef((function(e,t){var r;const{"aria-describedby":l,"aria-label":m,autoFocus:g,autoWidth:b,children:y,className:S,defaultOpen:O,defaultValue:F,disabled:$,displayEmpty:z,error:W=!1,IconComponent:T,inputRef:j,labelId:B,MenuProps:N={},multiple:E,name:_,onBlur:D,onChange:V,onClose:H,onFocus:L,onOpen:G,open:q,readOnly:U,renderValue:K,SelectDisplayProps:J={},tabIndex:Q,value:X,variant:Y="standard"}=e,ee=(0,o.Z)(e,A),[te,re]=(0,Z.Z)({controlled:X,default:F,name:"Select"}),[ne,oe]=(0,Z.Z)({controlled:q,default:O,name:"Select"}),ae=a.useRef(null),ie=a.useRef(null),[le,se]=a.useState(null),{current:ce}=a.useRef(null!=q),[ue,de]=a.useState(),pe=(0,v.Z)(t,j),fe=a.useCallback((e=>{ie.current=e,e&&se(e)}),[]),me=null==le?void 0:le.parentNode;a.useImperativeHandle(pe,(()=>({focus:()=>{ie.current.focus()},node:ae.current,value:te})),[te]),a.useEffect((()=>{O&&ne&&le&&!ce&&(de(b?null:me.clientWidth),ie.current.focus())}),[le,b]),a.useEffect((()=>{g&&ie.current.focus()}),[g]),a.useEffect((()=>{if(!B)return;const e=(0,d.Z)(ie.current).getElementById(B);if(e){const t=()=>{getSelection().isCollapsed&&ie.current.focus()};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}}),[B]);const he=(e,t)=>{e?G&&G(t):H&&H(t),ce||(de(b?null:me.clientWidth),oe(e))},ge=a.Children.toArray(y),ve=e=>t=>{let r;if(t.currentTarget.hasAttribute("tabindex")){if(E){r=Array.isArray(te)?te.slice():[];const t=te.indexOf(e.props.value);-1===t?r.push(e.props.value):r.splice(t,1)}else r=e.props.value;if(e.props.onClick&&e.props.onClick(t),te!==r&&(re(r),V)){const n=t.nativeEvent||t,o=new n.constructor(n.type,n);Object.defineProperty(o,"target",{writable:!0,value:{value:r,name:_}}),V(o,e)}E||he(!1,t)}},Ze=null!==le&≠let be,ye;delete ee["aria-invalid"];const xe=[];let Se=!1,we=!1;((0,h.vd)({value:te})||z)&&(K?be=K(te):Se=!0);const Pe=ge.map((e=>{if(!a.isValidElement(e))return null;let t;if(E){if(!Array.isArray(te))throw new Error((0,s.Z)(2));t=te.some((t=>M(t,e.props.value))),t&&Se&&xe.push(e.props.children)}else t=M(te,e.props.value),t&&Se&&(ye=e.props.children);return t&&(we=!0),a.cloneElement(e,{"aria-selected":t?"true":"false",onClick:ve(e),onKeyUp:t=>{" "===t.key&&t.preventDefault(),e.props.onKeyUp&&e.props.onKeyUp(t)},role:"option",selected:t,value:void 0,"data-value":e.props.value})}));Se&&(be=E?0===xe.length?null:xe.reduce(((e,t,r)=>(e.push(t),r{const{classes:t,variant:r,disabled:n,multiple:o,open:a,error:i}=e,l={select:["select",r,n&&"disabled",o&&"multiple",i&&"error"],icon:["icon",`icon${(0,p.Z)(r)}`,a&&"iconOpen",n&&"disabled"],nativeInput:["nativeInput"]};return(0,c.Z)(l,x,t)})(Ce),Ie=(0,n.Z)({},N.PaperProps,null==(r=N.slotProps)?void 0:r.paper),Oe=(0,u.Z)(),Fe=(0,u.Z)();return(0,P.jsxs)(a.Fragment,{children:[(0,P.jsx)(k,(0,n.Z)({ref:fe,tabIndex:Ae,role:"combobox","aria-controls":Oe,"aria-disabled":$?"true":void 0,"aria-expanded":Ze?"true":"false","aria-haspopup":"listbox","aria-label":m,"aria-labelledby":[B,Re].filter(Boolean).join(" ")||void 0,"aria-describedby":l,onKeyDown:e=>{U||-1!==[" ","ArrowUp","ArrowDown","Enter"].indexOf(e.key)&&(e.preventDefault(),he(!0,e))},onMouseDown:$||U?null:e=>{0===e.button&&(e.preventDefault(),ie.current.focus(),he(!0,e))},onBlur:e=>{!Ze&&D&&(Object.defineProperty(e,"target",{writable:!0,value:{value:te,name:_}}),D(e))},onFocus:L},J,{ownerState:Ce,className:(0,i.Z)(J.className,Me.select,S),id:Re,children:I(be)?w||(w=(0,P.jsx)("span",{className:"notranslate",children:"​"})):be})),(0,P.jsx)(C,(0,n.Z)({"aria-invalid":W,value:Array.isArray(te)?te.join(","):te,name:null!=_?_:Fe,ref:ae,"aria-hidden":!0,onChange:e=>{const t=ge.find((t=>t.props.value===e.target.value));void 0!==t&&(re(t.props.value),V&&V(e,t))},tabIndex:-1,disabled:$,className:Me.nativeInput,autoFocus:g,ownerState:Ce},ee)),(0,P.jsx)(R,{as:T,className:Me.icon,ownerState:Ce}),(0,P.jsx)(f.Z,(0,n.Z)({id:`menu-${_||""}`,anchorEl:me,open:Ze,onClose:e=>{he(!1,e)},anchorOrigin:{vertical:"bottom",horizontal:"center"},transformOrigin:{vertical:"top",horizontal:"center"}},N,{MenuListProps:(0,n.Z)({"aria-labelledby":B,role:"listbox","aria-multiselectable":E?"true":void 0,disableListWrap:!0,id:Oe},N.MenuListProps),slotProps:(0,n.Z)({},N.slotProps,{paper:(0,n.Z)({},Ie,{style:(0,n.Z)({minWidth:ke},null!=Ie?Ie.style:null)})}),children:Pe}))]})}));var F=r(5704),$=r(4423);const z=(0,r(5949).Z)((0,P.jsx)("path",{d:"M7 10l5 5 5-5z"}),"ArrowDropDown");var W=r(3981),T=r(6723),j=r(3031),B=r(1657);const N=["autoWidth","children","classes","className","defaultOpen","displayEmpty","IconComponent","id","input","inputProps","label","labelId","MenuProps","multiple","native","onClose","onOpen","open","renderValue","SelectDisplayProps","variant"],E=["root"],_={name:"MuiSelect",overridesResolver:(e,t)=>t.root,shouldForwardProp:e=>(0,g.FO)(e)&&"variant"!==e,slot:"Root"},D=(0,g.ZP)(W.Z,_)(""),V=(0,g.ZP)(j.Z,_)(""),H=(0,g.ZP)(T.Z,_)(""),L=a.forwardRef((function(e,t){const r=(0,B.Z)({name:"MuiSelect",props:e}),{autoWidth:s=!1,children:c,classes:u={},className:d,defaultOpen:p=!1,displayEmpty:f=!1,IconComponent:h=z,id:g,input:Z,inputProps:b,label:y,labelId:x,MenuProps:S,multiple:w=!1,native:A=!1,onClose:k,onOpen:R,open:C,renderValue:M,SelectDisplayProps:I,variant:W="outlined"}=r,T=(0,o.Z)(r,N),j=A?m.ZP:O,_=(0,$.Z)(),L=(0,F.Z)({props:r,muiFormControl:_,states:["variant","error"]}),G=L.variant||W,q=(0,n.Z)({},r,{variant:G,classes:u}),U=(e=>{const{classes:t}=e;return t})(q),K=(0,o.Z)(U,E),J=Z||{standard:(0,P.jsx)(D,{ownerState:q}),outlined:(0,P.jsx)(V,{label:y,ownerState:q}),filled:(0,P.jsx)(H,{ownerState:q})}[G],Q=(0,v.Z)(t,J.ref);return(0,P.jsx)(a.Fragment,{children:a.cloneElement(J,(0,n.Z)({inputComponent:j,inputProps:(0,n.Z)({children:c,error:L.error,IconComponent:h,variant:G,type:void 0,multiple:w},A?{id:g}:{autoWidth:s,defaultOpen:p,displayEmpty:f,labelId:x,MenuProps:S,onClose:k,onOpen:R,open:C,renderValue:M,SelectDisplayProps:(0,n.Z)({id:g},I)},b,{classes:b?(0,l.Z)(K,b.classes):K},Z?Z.props.inputProps:{})},w&&A&&"outlined"===G?{notched:!0}:{},{ref:Q,className:(0,i.Z)(J.props.className,d,U.root)},!Z&&{variant:G},T))})}));L.muiName="Select";const G=L},4659:(e,t,r)=>{r.d(t,{Z:()=>A});var n=r(7462),o=r(3366),a=r(7294),i=r(512),l=r(4780),s=r(2996),c=r(948),u=r(1657),d=r(3981),p=r(6723),f=r(3031),m=r(7666),h=r(6446),g=r(3460),v=r(583),Z=r(1588),b=r(4867);function y(e){return(0,b.Z)("MuiTextField",e)}(0,Z.Z)("MuiTextField",["root"]);var x=r(5893);const S=["autoComplete","autoFocus","children","className","color","defaultValue","disabled","error","FormHelperTextProps","fullWidth","helperText","id","InputLabelProps","inputProps","InputProps","inputRef","label","maxRows","minRows","multiline","name","onBlur","onChange","onFocus","placeholder","required","rows","select","SelectProps","type","value","variant"],w={standard:d.Z,filled:p.Z,outlined:f.Z},P=(0,c.ZP)(h.Z,{name:"MuiTextField",slot:"Root",overridesResolver:(e,t)=>t.root})({}),A=a.forwardRef((function(e,t){const r=(0,u.Z)({props:e,name:"MuiTextField"}),{autoComplete:a,autoFocus:c=!1,children:d,className:p,color:f="primary",defaultValue:h,disabled:Z=!1,error:b=!1,FormHelperTextProps:A,fullWidth:k=!1,helperText:R,id:C,InputLabelProps:M,inputProps:I,InputProps:O,inputRef:F,label:$,maxRows:z,minRows:W,multiline:T=!1,name:j,onBlur:B,onChange:N,onFocus:E,placeholder:_,required:D=!1,rows:V,select:H=!1,SelectProps:L,type:G,value:q,variant:U="outlined"}=r,K=(0,o.Z)(r,S),J=(0,n.Z)({},r,{autoFocus:c,color:f,disabled:Z,error:b,fullWidth:k,multiline:T,required:D,select:H,variant:U}),Q=(e=>{const{classes:t}=e;return(0,l.Z)({root:["root"]},y,t)})(J),X={};"outlined"===U&&(M&&void 0!==M.shrink&&(X.notched=M.shrink),X.label=$),H&&(L&&L.native||(X.id=void 0),X["aria-describedby"]=void 0);const Y=(0,s.Z)(C),ee=R&&Y?`${Y}-helper-text`:void 0,te=$&&Y?`${Y}-label`:void 0,re=w[U],ne=(0,x.jsx)(re,(0,n.Z)({"aria-describedby":ee,autoComplete:a,autoFocus:c,defaultValue:h,fullWidth:k,multiline:T,name:j,rows:V,maxRows:z,minRows:W,type:G,value:q,id:Y,inputRef:F,onBlur:B,onChange:N,onFocus:E,placeholder:_,inputProps:I},X,O));return(0,x.jsxs)(P,(0,n.Z)({className:(0,i.Z)(Q.root,p),disabled:Z,error:b,fullWidth:k,ref:t,required:D,color:f,variant:U,ownerState:J},K,{children:[null!=$&&""!==$&&(0,x.jsx)(m.Z,(0,n.Z)({htmlFor:Y,id:te},M,{children:$})),H?(0,x.jsx)(v.Z,(0,n.Z)({"aria-describedby":ee,id:Y,labelId:te,value:q,input:ne},L,{children:d})):ne,R&&(0,x.jsx)(g.Z,(0,n.Z)({id:ee},A,{children:R}))]}))}))},4386:(e,t,r)=>{r.d(t,{Z:()=>g});var n=r(3366),o=r(7462),a=r(7294),i=r(512),l=r(4780),s=r(1657),c=r(948),u=r(1588),d=r(4867);function p(e){return(0,d.Z)("MuiToolbar",e)}(0,u.Z)("MuiToolbar",["root","gutters","regular","dense"]);var f=r(5893);const m=["className","component","disableGutters","variant"],h=(0,c.ZP)("div",{name:"MuiToolbar",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[t.root,!r.disableGutters&&t.gutters,t[r.variant]]}})((({theme:e,ownerState:t})=>(0,o.Z)({position:"relative",display:"flex",alignItems:"center"},!t.disableGutters&&{paddingLeft:e.spacing(2),paddingRight:e.spacing(2),[e.breakpoints.up("sm")]:{paddingLeft:e.spacing(3),paddingRight:e.spacing(3)}},"dense"===t.variant&&{minHeight:48})),(({theme:e,ownerState:t})=>"regular"===t.variant&&e.mixins.toolbar)),g=a.forwardRef((function(e,t){const r=(0,s.Z)({props:e,name:"MuiToolbar"}),{className:a,component:c="div",disableGutters:u=!1,variant:d="regular"}=r,g=(0,n.Z)(r,m),v=(0,o.Z)({},r,{component:c,disableGutters:u,variant:d}),Z=(e=>{const{classes:t,disableGutters:r,variant:n}=e,o={root:["root",!r&&"gutters",n]};return(0,l.Z)(o,p,t)})(v);return(0,f.jsx)(h,(0,o.Z)({as:c,className:(0,i.Z)(Z.root,a),ref:t,ownerState:v},g))}))},2658:(e,t,r)=>{r.d(t,{Z:()=>y});var n=r(3366),o=r(7462),a=r(7294),i=r(512),l=r(9707),s=r(4780),c=r(948),u=r(1657),d=r(8216),p=r(1588),f=r(4867);function m(e){return(0,f.Z)("MuiTypography",e)}(0,p.Z)("MuiTypography",["root","h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","inherit","button","caption","overline","alignLeft","alignRight","alignCenter","alignJustify","noWrap","gutterBottom","paragraph"]);var h=r(5893);const g=["align","className","component","gutterBottom","noWrap","paragraph","variant","variantMapping"],v=(0,c.ZP)("span",{name:"MuiTypography",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[t.root,r.variant&&t[r.variant],"inherit"!==r.align&&t[`align${(0,d.Z)(r.align)}`],r.noWrap&&t.noWrap,r.gutterBottom&&t.gutterBottom,r.paragraph&&t.paragraph]}})((({theme:e,ownerState:t})=>(0,o.Z)({margin:0},"inherit"===t.variant&&{font:"inherit"},"inherit"!==t.variant&&e.typography[t.variant],"inherit"!==t.align&&{textAlign:t.align},t.noWrap&&{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},t.gutterBottom&&{marginBottom:"0.35em"},t.paragraph&&{marginBottom:16}))),Z={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",subtitle1:"h6",subtitle2:"h6",body1:"p",body2:"p",inherit:"p"},b={primary:"primary.main",textPrimary:"text.primary",secondary:"secondary.main",textSecondary:"text.secondary",error:"error.main"},y=a.forwardRef((function(e,t){const r=(0,u.Z)({props:e,name:"MuiTypography"}),a=(e=>b[e]||e)(r.color),c=(0,l.Z)((0,o.Z)({},r,{color:a})),{align:p="inherit",className:f,component:y,gutterBottom:x=!1,noWrap:S=!1,paragraph:w=!1,variant:P="body1",variantMapping:A=Z}=c,k=(0,n.Z)(c,g),R=(0,o.Z)({},c,{align:p,color:a,className:f,component:y,gutterBottom:x,noWrap:S,paragraph:w,variant:P,variantMapping:A}),C=y||(w?"p":A[P]||Z[P])||"span",M=(e=>{const{align:t,gutterBottom:r,noWrap:n,paragraph:o,variant:a,classes:i}=e,l={root:["root",a,"inherit"!==e.align&&`align${(0,d.Z)(t)}`,r&&"gutterBottom",n&&"noWrap",o&&"paragraph"]};return(0,s.Z)(l,m,i)})(R);return(0,h.jsx)(v,(0,o.Z)({as:C,ref:t,ownerState:R,className:(0,i.Z)(M.root,f)},k))}))},407:(e,t,r)=>{r.d(t,{Z:()=>a}),r(7294);var n=r(5949),o=r(5893);const a=(0,n.Z)((0,o.jsx)("path",{d:"M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"}),"MoreHoriz")},2233:(e,t,r)=>{r.d(t,{Z:()=>c});var n=r(7462),o=r(3366),a=(r(7294),r(1817)),i=r(606),l=r(5893);const s=["theme"];function c(e){let{theme:t}=e,r=(0,o.Z)(e,s);const c=t[i.Z];return(0,l.jsx)(a.Z,(0,n.Z)({},r,{themeId:c?i.Z:void 0,theme:c||t}))}},9617:(e,t,r)=>{r.d(t,{Z:()=>j});var n=r(7462),o=r(3366),a=r(1387),i=r(9766),l=r(6268),s=r(8010),c=r(6523),u=r(1796);const d={black:"#000",white:"#fff"},p={50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"},f={50:"#f3e5f5",100:"#e1bee7",200:"#ce93d8",300:"#ba68c8",400:"#ab47bc",500:"#9c27b0",600:"#8e24aa",700:"#7b1fa2",800:"#6a1b9a",900:"#4a148c",A100:"#ea80fc",A200:"#e040fb",A400:"#d500f9",A700:"#aa00ff"},m={50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c",A100:"#ff8a80",A200:"#ff5252",A400:"#ff1744",A700:"#d50000"},h={50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100",A100:"#ffd180",A200:"#ffab40",A400:"#ff9100",A700:"#ff6d00"},g={50:"#e3f2fd",100:"#bbdefb",200:"#90caf9",300:"#64b5f6",400:"#42a5f5",500:"#2196f3",600:"#1e88e5",700:"#1976d2",800:"#1565c0",900:"#0d47a1",A100:"#82b1ff",A200:"#448aff",A400:"#2979ff",A700:"#2962ff"},v={50:"#e1f5fe",100:"#b3e5fc",200:"#81d4fa",300:"#4fc3f7",400:"#29b6f6",500:"#03a9f4",600:"#039be5",700:"#0288d1",800:"#0277bd",900:"#01579b",A100:"#80d8ff",A200:"#40c4ff",A400:"#00b0ff",A700:"#0091ea"},Z={50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20",A100:"#b9f6ca",A200:"#69f0ae",A400:"#00e676",A700:"#00c853"},b=["mode","contrastThreshold","tonalOffset"],y={text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.38)"},divider:"rgba(0, 0, 0, 0.12)",background:{paper:d.white,default:d.white},action:{active:"rgba(0, 0, 0, 0.54)",hover:"rgba(0, 0, 0, 0.04)",hoverOpacity:.04,selected:"rgba(0, 0, 0, 0.08)",selectedOpacity:.08,disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(0, 0, 0, 0.12)",disabledOpacity:.38,focus:"rgba(0, 0, 0, 0.12)",focusOpacity:.12,activatedOpacity:.12}},x={text:{primary:d.white,secondary:"rgba(255, 255, 255, 0.7)",disabled:"rgba(255, 255, 255, 0.5)",icon:"rgba(255, 255, 255, 0.5)"},divider:"rgba(255, 255, 255, 0.12)",background:{paper:"#121212",default:"#121212"},action:{active:d.white,hover:"rgba(255, 255, 255, 0.08)",hoverOpacity:.08,selected:"rgba(255, 255, 255, 0.16)",selectedOpacity:.16,disabled:"rgba(255, 255, 255, 0.3)",disabledBackground:"rgba(255, 255, 255, 0.12)",disabledOpacity:.38,focus:"rgba(255, 255, 255, 0.12)",focusOpacity:.12,activatedOpacity:.24}};function S(e,t,r,n){const o=n.light||n,a=n.dark||1.5*n;e[t]||(e.hasOwnProperty(r)?e[t]=e[r]:"light"===t?e.light=(0,u.$n)(e.main,o):"dark"===t&&(e.dark=(0,u._j)(e.main,a)))}const w=["fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem"],P={textTransform:"uppercase"},A='"Roboto", "Helvetica", "Arial", sans-serif';function k(e,t){const r="function"==typeof t?t(e):t,{fontFamily:a=A,fontSize:l=14,fontWeightLight:s=300,fontWeightRegular:c=400,fontWeightMedium:u=500,fontWeightBold:d=700,htmlFontSize:p=16,allVariants:f,pxToRem:m}=r,h=(0,o.Z)(r,w),g=l/14,v=m||(e=>e/p*g+"rem"),Z=(e,t,r,o,i)=>{return(0,n.Z)({fontFamily:a,fontWeight:e,fontSize:v(t),lineHeight:r},a===A?{letterSpacing:(l=o/t,Math.round(1e5*l)/1e5+"em")}:{},i,f);var l},b={h1:Z(s,96,1.167,-1.5),h2:Z(s,60,1.2,-.5),h3:Z(c,48,1.167,0),h4:Z(c,34,1.235,.25),h5:Z(c,24,1.334,0),h6:Z(u,20,1.6,.15),subtitle1:Z(c,16,1.75,.15),subtitle2:Z(u,14,1.57,.1),body1:Z(c,16,1.5,.15),body2:Z(c,14,1.43,.15),button:Z(u,14,1.75,.4,P),caption:Z(c,12,1.66,.4),overline:Z(c,12,2.66,1,P),inherit:{fontFamily:"inherit",fontWeight:"inherit",fontSize:"inherit",lineHeight:"inherit",letterSpacing:"inherit"}};return(0,i.Z)((0,n.Z)({htmlFontSize:p,pxToRem:v,fontFamily:a,fontSize:l,fontWeightLight:s,fontWeightRegular:c,fontWeightMedium:u,fontWeightBold:d},b),h,{clone:!1})}function R(...e){return[`${e[0]}px ${e[1]}px ${e[2]}px ${e[3]}px rgba(0,0,0,0.2)`,`${e[4]}px ${e[5]}px ${e[6]}px ${e[7]}px rgba(0,0,0,0.14)`,`${e[8]}px ${e[9]}px ${e[10]}px ${e[11]}px rgba(0,0,0,0.12)`].join(",")}const C=["none",R(0,2,1,-1,0,1,1,0,0,1,3,0),R(0,3,1,-2,0,2,2,0,0,1,5,0),R(0,3,3,-2,0,3,4,0,0,1,8,0),R(0,2,4,-1,0,4,5,0,0,1,10,0),R(0,3,5,-1,0,5,8,0,0,1,14,0),R(0,3,5,-1,0,6,10,0,0,1,18,0),R(0,4,5,-2,0,7,10,1,0,2,16,1),R(0,5,5,-3,0,8,10,1,0,3,14,2),R(0,5,6,-3,0,9,12,1,0,3,16,2),R(0,6,6,-3,0,10,14,1,0,4,18,3),R(0,6,7,-4,0,11,15,1,0,4,20,3),R(0,7,8,-4,0,12,17,2,0,5,22,4),R(0,7,8,-4,0,13,19,2,0,5,24,4),R(0,7,9,-4,0,14,21,2,0,5,26,4),R(0,8,9,-5,0,15,22,2,0,6,28,5),R(0,8,10,-5,0,16,24,2,0,6,30,5),R(0,8,11,-5,0,17,26,2,0,6,32,5),R(0,9,11,-5,0,18,28,2,0,7,34,6),R(0,9,12,-6,0,19,29,2,0,7,36,6),R(0,10,13,-6,0,20,31,3,0,8,38,7),R(0,10,13,-6,0,21,33,3,0,8,40,7),R(0,10,14,-6,0,22,35,3,0,8,42,7),R(0,11,14,-7,0,23,36,3,0,9,44,8),R(0,11,15,-7,0,24,38,3,0,9,46,8)],M=["duration","easing","delay"],I={easeInOut:"cubic-bezier(0.4, 0, 0.2, 1)",easeOut:"cubic-bezier(0.0, 0, 0.2, 1)",easeIn:"cubic-bezier(0.4, 0, 1, 1)",sharp:"cubic-bezier(0.4, 0, 0.6, 1)"},O={shortest:150,shorter:200,short:250,standard:300,complex:375,enteringScreen:225,leavingScreen:195};function F(e){return`${Math.round(e)}ms`}function $(e){if(!e)return 0;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}function z(e){const t=(0,n.Z)({},I,e.easing),r=(0,n.Z)({},O,e.duration);return(0,n.Z)({getAutoHeightDuration:$,create:(e=["all"],n={})=>{const{duration:a=r.standard,easing:i=t.easeInOut,delay:l=0}=n;return(0,o.Z)(n,M),(Array.isArray(e)?e:[e]).map((e=>`${e} ${"string"==typeof a?a:F(a)} ${i} ${"string"==typeof l?l:F(l)}`)).join(",")}},e,{easing:t,duration:r})}const W={mobileStepper:1e3,fab:1050,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500},T=["breakpoints","mixins","spacing","palette","transitions","typography","shape"];const j=function(e={},...t){const{mixins:r={},palette:w={},transitions:P={},typography:A={}}=e,R=(0,o.Z)(e,T);if(e.vars)throw new Error((0,a.Z)(18));const M=function(e){const{mode:t="light",contrastThreshold:r=3,tonalOffset:l=.2}=e,s=(0,o.Z)(e,b),c=e.primary||function(e="light"){return"dark"===e?{main:g[200],light:g[50],dark:g[400]}:{main:g[700],light:g[400],dark:g[800]}}(t),w=e.secondary||function(e="light"){return"dark"===e?{main:f[200],light:f[50],dark:f[400]}:{main:f[500],light:f[300],dark:f[700]}}(t),P=e.error||function(e="light"){return"dark"===e?{main:m[500],light:m[300],dark:m[700]}:{main:m[700],light:m[400],dark:m[800]}}(t),A=e.info||function(e="light"){return"dark"===e?{main:v[400],light:v[300],dark:v[700]}:{main:v[700],light:v[500],dark:v[900]}}(t),k=e.success||function(e="light"){return"dark"===e?{main:Z[400],light:Z[300],dark:Z[700]}:{main:Z[800],light:Z[500],dark:Z[900]}}(t),R=e.warning||function(e="light"){return"dark"===e?{main:h[400],light:h[300],dark:h[700]}:{main:"#ed6c02",light:h[500],dark:h[900]}}(t);function C(e){return(0,u.mi)(e,x.text.primary)>=r?x.text.primary:y.text.primary}const M=({color:e,name:t,mainShade:r=500,lightShade:o=300,darkShade:i=700})=>{if(!(e=(0,n.Z)({},e)).main&&e[r]&&(e.main=e[r]),!e.hasOwnProperty("main"))throw new Error((0,a.Z)(11,t?` (${t})`:"",r));if("string"!=typeof e.main)throw new Error((0,a.Z)(12,t?` (${t})`:"",JSON.stringify(e.main)));return S(e,"light",o,l),S(e,"dark",i,l),e.contrastText||(e.contrastText=C(e.main)),e},I={dark:x,light:y};return(0,i.Z)((0,n.Z)({common:(0,n.Z)({},d),mode:t,primary:M({color:c,name:"primary"}),secondary:M({color:w,name:"secondary",mainShade:"A400",lightShade:"A200",darkShade:"A700"}),error:M({color:P,name:"error"}),warning:M({color:R,name:"warning"}),info:M({color:A,name:"info"}),success:M({color:k,name:"success"}),grey:p,contrastThreshold:r,getContrastText:C,augmentColor:M,tonalOffset:l},I[t]),s)}(w),I=(0,l.Z)(e);let O=(0,i.Z)(I,{mixins:(F=I.breakpoints,$=r,(0,n.Z)({toolbar:{minHeight:56,[F.up("xs")]:{"@media (orientation: landscape)":{minHeight:48}},[F.up("sm")]:{minHeight:64}}},$)),palette:M,shadows:C.slice(),typography:k(M,A),transitions:z(P),zIndex:(0,n.Z)({},W)});var F,$;return O=(0,i.Z)(O,R),O=t.reduce(((e,t)=>(0,i.Z)(e,t)),O),O.unstable_sxConfig=(0,n.Z)({},s.Z,null==R?void 0:R.unstable_sxConfig),O.unstable_sx=function(e){return(0,c.Z)({sx:e,theme:this})},O}},247:(e,t,r)=>{r.d(t,{Z:()=>n});const n=(0,r(9617).Z)()},2029:(e,t,r)=>{r.d(t,{Z:()=>n});const n=e=>{let t;return t=e<1?5.11916*e**2:4.5*Math.log(e+1)+2,(t/100).toFixed(2)}},606:(e,t,r)=>{r.d(t,{Z:()=>n});const n="$$material"},948:(e,t,r)=>{r.d(t,{Dz:()=>l,FO:()=>i,ZP:()=>s});var n=r(2807),o=r(247),a=r(606);const i=e=>(0,n.x9)(e)&&"classes"!==e,l=n.x9,s=(0,n.ZP)({themeId:a.Z,defaultTheme:o.Z,rootShouldForwardProp:i})},2734:(e,t,r)=>{r.d(t,{Z:()=>i}),r(7294);var n=r(6682),o=r(247),a=r(606);function i(){const e=(0,n.Z)(o.Z);return e[a.Z]||e}},1657:(e,t,r)=>{r.d(t,{Z:()=>i});var n=r(7333),o=r(247),a=r(606);function i({props:e,name:t}){return(0,n.Z)({props:e,name:t,defaultTheme:o.Z,themeId:a.Z})}},577:(e,t,r)=>{r.d(t,{C:()=>o,n:()=>n});const n=e=>e.scrollTop;function o(e,t){var r,n;const{timeout:o,easing:a,style:i={}}=e;return{duration:null!=(r=i.transitionDuration)?r:"number"==typeof o?o:o[t.mode]||0,easing:null!=(n=i.transitionTimingFunction)?n:"object"==typeof a?a[t.mode]:a,delay:i.transitionDelay}}},8216:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r(4142).Z},5949:(e,t,r)=>{r.d(t,{Z:()=>b});var n=r(7462),o=r(7294),a=r(3366),i=r(512),l=r(4780),s=r(8216),c=r(1657),u=r(948),d=r(1588),p=r(4867);function f(e){return(0,p.Z)("MuiSvgIcon",e)}(0,d.Z)("MuiSvgIcon",["root","colorPrimary","colorSecondary","colorAction","colorError","colorDisabled","fontSizeInherit","fontSizeSmall","fontSizeMedium","fontSizeLarge"]);var m=r(5893);const h=["children","className","color","component","fontSize","htmlColor","inheritViewBox","titleAccess","viewBox"],g=(0,u.ZP)("svg",{name:"MuiSvgIcon",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[t.root,"inherit"!==r.color&&t[`color${(0,s.Z)(r.color)}`],t[`fontSize${(0,s.Z)(r.fontSize)}`]]}})((({theme:e,ownerState:t})=>{var r,n,o,a,i,l,s,c,u,d,p,f,m;return{userSelect:"none",width:"1em",height:"1em",display:"inline-block",fill:t.hasSvgAsChild?void 0:"currentColor",flexShrink:0,transition:null==(r=e.transitions)||null==(n=r.create)?void 0:n.call(r,"fill",{duration:null==(o=e.transitions)||null==(o=o.duration)?void 0:o.shorter}),fontSize:{inherit:"inherit",small:(null==(a=e.typography)||null==(i=a.pxToRem)?void 0:i.call(a,20))||"1.25rem",medium:(null==(l=e.typography)||null==(s=l.pxToRem)?void 0:s.call(l,24))||"1.5rem",large:(null==(c=e.typography)||null==(u=c.pxToRem)?void 0:u.call(c,35))||"2.1875rem"}[t.fontSize],color:null!=(d=null==(p=(e.vars||e).palette)||null==(p=p[t.color])?void 0:p.main)?d:{action:null==(f=(e.vars||e).palette)||null==(f=f.action)?void 0:f.active,disabled:null==(m=(e.vars||e).palette)||null==(m=m.action)?void 0:m.disabled,inherit:void 0}[t.color]}})),v=o.forwardRef((function(e,t){const r=(0,c.Z)({props:e,name:"MuiSvgIcon"}),{children:u,className:d,color:p="inherit",component:v="svg",fontSize:Z="medium",htmlColor:b,inheritViewBox:y=!1,titleAccess:x,viewBox:S="0 0 24 24"}=r,w=(0,a.Z)(r,h),P=o.isValidElement(u)&&"svg"===u.type,A=(0,n.Z)({},r,{color:p,component:v,fontSize:Z,instanceFontSize:e.fontSize,inheritViewBox:y,viewBox:S,hasSvgAsChild:P}),k={};y||(k.viewBox=S);const R=(e=>{const{color:t,fontSize:r,classes:n}=e,o={root:["root","inherit"!==t&&`color${(0,s.Z)(t)}`,`fontSize${(0,s.Z)(r)}`]};return(0,l.Z)(o,f,n)})(A);return(0,m.jsxs)(g,(0,n.Z)({as:v,className:(0,i.Z)(R.root,d),focusable:"false",color:b,"aria-hidden":!x||void 0,role:x?"img":void 0,ref:t},k,w,P&&u.props,{ownerState:A,children:[P?u.props.children:u,x?(0,m.jsx)("title",{children:x}):null]}))}));v.muiName="SvgIcon";const Z=v;function b(e,t){function r(r,o){return(0,m.jsx)(Z,(0,n.Z)({"data-testid":`${t}Icon`,ref:o},r,{children:e}))}return r.muiName=Z.muiName,o.memo(o.forwardRef(r))}},7144:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r(9336).Z},256:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r(5806).Z},7065:(e,t,r)=>{r.r(t),r.d(t,{capitalize:()=>o.Z,createChainedFunction:()=>a,createSvgIcon:()=>i.Z,debounce:()=>l.Z,deprecatedPropType:()=>s,isMuiElement:()=>c.Z,ownerDocument:()=>u.Z,ownerWindow:()=>d.Z,requirePropFactory:()=>p,setRef:()=>f,unstable_ClassNameGenerator:()=>x,unstable_useEnhancedEffect:()=>m.Z,unstable_useId:()=>h,unsupportedProp:()=>g,useControlled:()=>v.Z,useEventCallback:()=>Z.Z,useForkRef:()=>b.Z,useIsFocusVisible:()=>y.Z});var n=r(7078),o=r(8216);const a=r(9064).Z;var i=r(5949),l=r(7144);const s=r(7421).Z;var c=r(6798),u=r(8038),d=r(5340);const p=r(8986).Z,f=r(7960).Z;var m=r(8974);const h=r(2996).Z,g=r(6964).Z;var v=r(9299),Z=r(2068),b=r(1705),y=r(9674);const x={configure:e=>{n.Z.configure(e)}}},6798:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r(8719).Z},8038:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r(2690).Z},5340:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r(4161).Z},9299:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r(9032).Z},8974:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r(3546).Z},2068:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r(9948).Z},1705:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r(3703).Z},9674:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r(9962).Z},5971:(e,t,r)=>{r.d(t,{Z:()=>c});var n=r(7462),o=r(7294),a=r(4819),i=r(6760);const l="function"==typeof Symbol&&Symbol.for?Symbol.for("mui.nested"):"__THEME_NESTED__";var s=r(5893);const c=function(e){const{children:t,theme:r}=e,c=(0,i.Z)(),u=o.useMemo((()=>{const e=null===c?r:function(e,t){return"function"==typeof t?t(e):(0,n.Z)({},e,t)}(c,r);return null!=e&&(e[l]=null!==c),e}),[r,c]);return(0,s.jsx)(a.Z.Provider,{value:u,children:t})}},4819:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r(7294).createContext(null)},6760:(e,t,r)=>{r.d(t,{Z:()=>a});var n=r(7294),o=r(4819);function a(){return n.useContext(o.Z)}},1234:(e,t,r)=>{r.d(t,{Z:()=>a}),r(7294);var n=r(917),o=r(5893);function a(e){const{styles:t,defaultTheme:r={}}=e,a="function"==typeof t?e=>{return t(null==(n=e)||0===Object.keys(n).length?r:e);var n}:t;return(0,o.jsx)(n.xB,{styles:a})}},8883:(e,t,r)=>{r.d(t,{Co:()=>a,ZP:()=>o});var n=r(932);function o(e,t){return(0,n.Z)(e,t)}const a=(e,t)=>{Array.isArray(e.__emotion_styles)&&(e.__emotion_styles=t(e.__emotion_styles))}}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsSUFBSyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsSUFBSyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsSUFBSyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsSUFBSyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEdBQUksSUFBSyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEdBQUksSUFBSyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEdBQUksSUFBSyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEdBQUksSUFBSyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEdBQUksSUFBSyxFQUFHLEVB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RUFBSUcsa0JBQ3ZDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU2VsZWN0L3NlbGVjdENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU2VsZWN0L1NlbGVjdElucHV0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2ludGVybmFsL3N2Zy1pY29ucy9BcnJvd0Ryb3BEb3duLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1NlbGVjdC9TZWxlY3QuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVGV4dEZpZWxkL3RleHRGaWVsZENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVGV4dEZpZWxkL1RleHRGaWVsZC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Ub29sYmFyL3Rvb2xiYXJDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1Rvb2xiYXIvVG9vbGJhci5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9UeXBvZ3JhcGh5L3R5cG9ncmFwaHlDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1R5cG9ncmFwaHkvVHlwb2dyYXBoeS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9pbnRlcm5hbC9zdmctaWNvbnMvTW9yZUhvcml6LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9UaGVtZVByb3ZpZGVyLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9jb21tb24uanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2dyZXkuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL3B1cnBsZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvcmVkLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9vcmFuZ2UuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2JsdWUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2xpZ2h0Qmx1ZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvZ3JlZW4uanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2NyZWF0ZVBhbGV0dGUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2NyZWF0ZVR5cG9ncmFwaHkuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3NoYWRvd3MuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2NyZWF0ZVRyYW5zaXRpb25zLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy96SW5kZXguanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2NyZWF0ZVRoZW1lLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVNaXhpbnMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2RlZmF1bHRUaGVtZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvZ2V0T3ZlcmxheUFscGhhLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9pZGVudGlmaWVyLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9zdHlsZWQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3VzZVRoZW1lLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy91c2VUaGVtZVByb3BzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3RyYW5zaXRpb25zL3V0aWxzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2NhcGl0YWxpemUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU3ZnSWNvbi9zdmdJY29uQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9TdmdJY29uL1N2Z0ljb24uanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvY3JlYXRlU3ZnSWNvbi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9kZWJvdW5jZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9nZXRTY3JvbGxiYXJTaXplLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2NyZWF0ZUNoYWluZWRGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9kZXByZWNhdGVkUHJvcFR5cGUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvcmVxdWlyZVByb3BGYWN0b3J5LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3NldFJlZi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VJZC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91bnN1cHBvcnRlZFByb3AuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvaXNNdWlFbGVtZW50LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL293bmVyRG9jdW1lbnQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvb3duZXJXaW5kb3cuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlQ29udHJvbGxlZC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VFbmhhbmNlZEVmZmVjdC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VFdmVudENhbGxiYWNrLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3VzZUZvcmtSZWYuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlSXNGb2N1c1Zpc2libGUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvcHJpdmF0ZS10aGVtaW5nL1RoZW1lUHJvdmlkZXIvbmVzdGVkLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3ByaXZhdGUtdGhlbWluZy9UaGVtZVByb3ZpZGVyL1RoZW1lUHJvdmlkZXIuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvcHJpdmF0ZS10aGVtaW5nL3VzZVRoZW1lL1RoZW1lQ29udGV4dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9wcml2YXRlLXRoZW1pbmcvdXNlVGhlbWUvdXNlVGhlbWUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3R5bGVkLWVuZ2luZS9HbG9iYWxTdHlsZXMvR2xvYmFsU3R5bGVzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N0eWxlZC1lbmdpbmUvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdFV0aWxpdHlDbGFzc2VzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlTZWxlY3QnLCBzbG90KTtcbn1cbmNvbnN0IHNlbGVjdENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlTZWxlY3QnLCBbJ3Jvb3QnLCAnc2VsZWN0JywgJ211bHRpcGxlJywgJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCcsICdkaXNhYmxlZCcsICdmb2N1c2VkJywgJ2ljb24nLCAnaWNvbk9wZW4nLCAnaWNvbkZpbGxlZCcsICdpY29uT3V0bGluZWQnLCAnaWNvblN0YW5kYXJkJywgJ25hdGl2ZUlucHV0JywgJ2Vycm9yJ10pO1xuZXhwb3J0IGRlZmF1bHQgc2VsZWN0Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgeyBmb3JtYXRNdWlFcnJvck1lc3NhZ2UgYXMgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSB9IGZyb20gXCJAbXVpL3V0aWxzXCI7XG52YXIgX3NwYW47XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIFwiYXJpYS1sYWJlbFwiLCBcImF1dG9Gb2N1c1wiLCBcImF1dG9XaWR0aFwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGVmYXVsdE9wZW5cIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJkaXNhYmxlZFwiLCBcImRpc3BsYXlFbXB0eVwiLCBcImVycm9yXCIsIFwiSWNvbkNvbXBvbmVudFwiLCBcImlucHV0UmVmXCIsIFwibGFiZWxJZFwiLCBcIk1lbnVQcm9wc1wiLCBcIm11bHRpcGxlXCIsIFwibmFtZVwiLCBcIm9uQmx1clwiLCBcIm9uQ2hhbmdlXCIsIFwib25DbG9zZVwiLCBcIm9uRm9jdXNcIiwgXCJvbk9wZW5cIiwgXCJvcGVuXCIsIFwicmVhZE9ubHlcIiwgXCJyZW5kZXJWYWx1ZVwiLCBcIlNlbGVjdERpc3BsYXlQcm9wc1wiLCBcInRhYkluZGV4XCIsIFwidHlwZVwiLCBcInZhbHVlXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzRnJhZ21lbnQgfSBmcm9tICdyZWFjdC1pcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgeyByZWZUeXBlLCB1bnN0YWJsZV91c2VJZCBhcyB1c2VJZCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IG93bmVyRG9jdW1lbnQgZnJvbSAnLi4vdXRpbHMvb3duZXJEb2N1bWVudCc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBNZW51IGZyb20gJy4uL01lbnUvTWVudSc7XG5pbXBvcnQgeyBuYXRpdmVTZWxlY3RTZWxlY3RTdHlsZXMsIG5hdGl2ZVNlbGVjdEljb25TdHlsZXMgfSBmcm9tICcuLi9OYXRpdmVTZWxlY3QvTmF0aXZlU2VsZWN0SW5wdXQnO1xuaW1wb3J0IHsgaXNGaWxsZWQgfSBmcm9tICcuLi9JbnB1dEJhc2UvdXRpbHMnO1xuaW1wb3J0IHN0eWxlZCwgeyBzbG90U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHVzZUNvbnRyb2xsZWQgZnJvbSAnLi4vdXRpbHMvdXNlQ29udHJvbGxlZCc7XG5pbXBvcnQgc2VsZWN0Q2xhc3NlcywgeyBnZXRTZWxlY3RVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vc2VsZWN0Q2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgU2VsZWN0U2VsZWN0ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlTZWxlY3QnLFxuICBzbG90OiAnU2VsZWN0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW1xuICAgIC8vIFdpbiBzcGVjaWZpY2l0eSBvdmVyIHRoZSBpbnB1dCBiYXNlXG4gICAge1xuICAgICAgW2AmLiR7c2VsZWN0Q2xhc3Nlcy5zZWxlY3R9YF06IHN0eWxlcy5zZWxlY3RcbiAgICB9LCB7XG4gICAgICBbYCYuJHtzZWxlY3RDbGFzc2VzLnNlbGVjdH1gXTogc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF1cbiAgICB9LCB7XG4gICAgICBbYCYuJHtzZWxlY3RDbGFzc2VzLmVycm9yfWBdOiBzdHlsZXMuZXJyb3JcbiAgICB9LCB7XG4gICAgICBbYCYuJHtzZWxlY3RDbGFzc2VzLm11bHRpcGxlfWBdOiBzdHlsZXMubXVsdGlwbGVcbiAgICB9XTtcbiAgfVxufSkobmF0aXZlU2VsZWN0U2VsZWN0U3R5bGVzLCB7XG4gIC8vIFdpbiBzcGVjaWZpY2l0eSBvdmVyIHRoZSBpbnB1dCBiYXNlXG4gIFtgJi4ke3NlbGVjdENsYXNzZXMuc2VsZWN0fWBdOiB7XG4gICAgaGVpZ2h0OiAnYXV0bycsXG4gICAgLy8gUmVzZXRzIGZvciBtdWx0aXBsZSBzZWxlY3Qgd2l0aCBjaGlwc1xuICAgIG1pbkhlaWdodDogJzEuNDM3NWVtJyxcbiAgICAvLyBSZXF1aXJlZCBmb3Igc2VsZWN0XFx0ZXh0LWZpZWxkIGhlaWdodCBjb25zaXN0ZW5jeVxuICAgIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbidcbiAgfVxufSk7XG5jb25zdCBTZWxlY3RJY29uID0gc3R5bGVkKCdzdmcnLCB7XG4gIG5hbWU6ICdNdWlTZWxlY3QnLFxuICBzbG90OiAnSWNvbicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuaWNvbiwgb3duZXJTdGF0ZS52YXJpYW50ICYmIHN0eWxlc1tgaWNvbiR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnZhcmlhbnQpfWBdLCBvd25lclN0YXRlLm9wZW4gJiYgc3R5bGVzLmljb25PcGVuXTtcbiAgfVxufSkobmF0aXZlU2VsZWN0SWNvblN0eWxlcyk7XG5jb25zdCBTZWxlY3ROYXRpdmVJbnB1dCA9IHN0eWxlZCgnaW5wdXQnLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHNsb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSAmJiBwcm9wICE9PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlTZWxlY3QnLFxuICBzbG90OiAnTmF0aXZlSW5wdXQnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5uYXRpdmVJbnB1dFxufSkoe1xuICBib3R0b206IDAsXG4gIGxlZnQ6IDAsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICBvcGFjaXR5OiAwLFxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIHdpZHRoOiAnMTAwJScsXG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnXG59KTtcbmZ1bmN0aW9uIGFyZUVxdWFsVmFsdWVzKGEsIGIpIHtcbiAgaWYgKHR5cGVvZiBiID09PSAnb2JqZWN0JyAmJiBiICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGEgPT09IGI7XG4gIH1cblxuICAvLyBUaGUgdmFsdWUgY291bGQgYmUgYSBudW1iZXIsIHRoZSBET00gd2lsbCBzdHJpbmdpZnkgaXQgYW55d2F5LlxuICByZXR1cm4gU3RyaW5nKGEpID09PSBTdHJpbmcoYik7XG59XG5mdW5jdGlvbiBpc0VtcHR5KGRpc3BsYXkpIHtcbiAgcmV0dXJuIGRpc3BsYXkgPT0gbnVsbCB8fCB0eXBlb2YgZGlzcGxheSA9PT0gJ3N0cmluZycgJiYgIWRpc3BsYXkudHJpbSgpO1xufVxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgdmFyaWFudCxcbiAgICBkaXNhYmxlZCxcbiAgICBtdWx0aXBsZSxcbiAgICBvcGVuLFxuICAgIGVycm9yXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICBzZWxlY3Q6IFsnc2VsZWN0JywgdmFyaWFudCwgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgbXVsdGlwbGUgJiYgJ211bHRpcGxlJywgZXJyb3IgJiYgJ2Vycm9yJ10sXG4gICAgaWNvbjogWydpY29uJywgYGljb24ke2NhcGl0YWxpemUodmFyaWFudCl9YCwgb3BlbiAmJiAnaWNvbk9wZW4nLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnXSxcbiAgICBuYXRpdmVJbnB1dDogWyduYXRpdmVJbnB1dCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0U2VsZWN0VXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBTZWxlY3RJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFNlbGVjdElucHV0KHByb3BzLCByZWYpIHtcbiAgdmFyIF9NZW51UHJvcHMkc2xvdFByb3BzO1xuICBjb25zdCB7XG4gICAgICAnYXJpYS1kZXNjcmliZWRieSc6IGFyaWFEZXNjcmliZWRieSxcbiAgICAgICdhcmlhLWxhYmVsJzogYXJpYUxhYmVsLFxuICAgICAgYXV0b0ZvY3VzLFxuICAgICAgYXV0b1dpZHRoLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkZWZhdWx0T3BlbixcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZGlzcGxheUVtcHR5LFxuICAgICAgZXJyb3IgPSBmYWxzZSxcbiAgICAgIEljb25Db21wb25lbnQsXG4gICAgICBpbnB1dFJlZjogaW5wdXRSZWZQcm9wLFxuICAgICAgbGFiZWxJZCxcbiAgICAgIE1lbnVQcm9wcyA9IHt9LFxuICAgICAgbXVsdGlwbGUsXG4gICAgICBuYW1lLFxuICAgICAgb25CbHVyLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICBvbkNsb3NlLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIG9uT3BlbixcbiAgICAgIG9wZW46IG9wZW5Qcm9wLFxuICAgICAgcmVhZE9ubHksXG4gICAgICByZW5kZXJWYWx1ZSxcbiAgICAgIFNlbGVjdERpc3BsYXlQcm9wcyA9IHt9LFxuICAgICAgdGFiSW5kZXg6IHRhYkluZGV4UHJvcFxuICAgICAgLy8gY2F0Y2hpbmcgYHR5cGVgIGZyb20gSW5wdXQgd2hpY2ggbWFrZXMgbm8gc2Vuc2UgZm9yIFNlbGVjdElucHV0XG4gICAgICAsXG5cbiAgICAgIHZhbHVlOiB2YWx1ZVByb3AsXG4gICAgICB2YXJpYW50ID0gJ3N0YW5kYXJkJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBbdmFsdWUsIHNldFZhbHVlU3RhdGVdID0gdXNlQ29udHJvbGxlZCh7XG4gICAgY29udHJvbGxlZDogdmFsdWVQcm9wLFxuICAgIGRlZmF1bHQ6IGRlZmF1bHRWYWx1ZSxcbiAgICBuYW1lOiAnU2VsZWN0J1xuICB9KTtcbiAgY29uc3QgW29wZW5TdGF0ZSwgc2V0T3BlblN0YXRlXSA9IHVzZUNvbnRyb2xsZWQoe1xuICAgIGNvbnRyb2xsZWQ6IG9wZW5Qcm9wLFxuICAgIGRlZmF1bHQ6IGRlZmF1bHRPcGVuLFxuICAgIG5hbWU6ICdTZWxlY3QnXG4gIH0pO1xuICBjb25zdCBpbnB1dFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgZGlzcGxheVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgW2Rpc3BsYXlOb2RlLCBzZXREaXNwbGF5Tm9kZV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3Qge1xuICAgIGN1cnJlbnQ6IGlzT3BlbkNvbnRyb2xsZWRcbiAgfSA9IFJlYWN0LnVzZVJlZihvcGVuUHJvcCAhPSBudWxsKTtcbiAgY29uc3QgW21lbnVNaW5XaWR0aFN0YXRlLCBzZXRNZW51TWluV2lkdGhTdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZSgpO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKHJlZiwgaW5wdXRSZWZQcm9wKTtcbiAgY29uc3QgaGFuZGxlRGlzcGxheVJlZiA9IFJlYWN0LnVzZUNhbGxiYWNrKG5vZGUgPT4ge1xuICAgIGRpc3BsYXlSZWYuY3VycmVudCA9IG5vZGU7XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIHNldERpc3BsYXlOb2RlKG5vZGUpO1xuICAgIH1cbiAgfSwgW10pO1xuICBjb25zdCBhbmNob3JFbGVtZW50ID0gZGlzcGxheU5vZGUgPT0gbnVsbCA/IHZvaWQgMCA6IGRpc3BsYXlOb2RlLnBhcmVudE5vZGU7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUoaGFuZGxlUmVmLCAoKSA9PiAoe1xuICAgIGZvY3VzOiAoKSA9PiB7XG4gICAgICBkaXNwbGF5UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9LFxuICAgIG5vZGU6IGlucHV0UmVmLmN1cnJlbnQsXG4gICAgdmFsdWVcbiAgfSksIFt2YWx1ZV0pO1xuXG4gIC8vIFJlc2l6ZSBtZW51IG9uIGBkZWZhdWx0T3BlbmAgYXV0b21hdGljIHRvZ2dsZS5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZGVmYXVsdE9wZW4gJiYgb3BlblN0YXRlICYmIGRpc3BsYXlOb2RlICYmICFpc09wZW5Db250cm9sbGVkKSB7XG4gICAgICBzZXRNZW51TWluV2lkdGhTdGF0ZShhdXRvV2lkdGggPyBudWxsIDogYW5jaG9yRWxlbWVudC5jbGllbnRXaWR0aCk7XG4gICAgICBkaXNwbGF5UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbZGlzcGxheU5vZGUsIGF1dG9XaWR0aF0pO1xuICAvLyBgaXNPcGVuQ29udHJvbGxlZGAgaXMgaWdub3JlZCBiZWNhdXNlIHRoZSBjb21wb25lbnQgc2hvdWxkIG5ldmVyIHN3aXRjaCBiZXR3ZWVuIGNvbnRyb2xsZWQgYW5kIHVuY29udHJvbGxlZCBtb2Rlcy5cbiAgLy8gYGRlZmF1bHRPcGVuYCBhbmQgYG9wZW5TdGF0ZWAgYXJlIGlnbm9yZWQgdG8gYXZvaWQgdW5uZWNlc3NhcnkgY2FsbGJhY2tzLlxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChhdXRvRm9jdXMpIHtcbiAgICAgIGRpc3BsYXlSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgfSwgW2F1dG9Gb2N1c10pO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbGFiZWxJZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgbGFiZWwgPSBvd25lckRvY3VtZW50KGRpc3BsYXlSZWYuY3VycmVudCkuZ2V0RWxlbWVudEJ5SWQobGFiZWxJZCk7XG4gICAgaWYgKGxhYmVsKSB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICBpZiAoZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgICBkaXNwbGF5UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGxhYmVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlcik7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBsYWJlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZXIpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW2xhYmVsSWRdKTtcbiAgY29uc3QgdXBkYXRlID0gKG9wZW4sIGV2ZW50KSA9PiB7XG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIGlmIChvbk9wZW4pIHtcbiAgICAgICAgb25PcGVuKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9uQ2xvc2UpIHtcbiAgICAgIG9uQ2xvc2UoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAoIWlzT3BlbkNvbnRyb2xsZWQpIHtcbiAgICAgIHNldE1lbnVNaW5XaWR0aFN0YXRlKGF1dG9XaWR0aCA/IG51bGwgOiBhbmNob3JFbGVtZW50LmNsaWVudFdpZHRoKTtcbiAgICAgIHNldE9wZW5TdGF0ZShvcGVuKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZU1vdXNlRG93biA9IGV2ZW50ID0+IHtcbiAgICAvLyBJZ25vcmUgZXZlcnl0aGluZyBidXQgbGVmdC1jbGlja1xuICAgIGlmIChldmVudC5idXR0b24gIT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gSGlqYWNrIHRoZSBkZWZhdWx0IGZvY3VzIGJlaGF2aW9yLlxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZGlzcGxheVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgdXBkYXRlKHRydWUsIGV2ZW50KTtcbiAgfTtcbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSBldmVudCA9PiB7XG4gICAgdXBkYXRlKGZhbHNlLCBldmVudCk7XG4gIH07XG4gIGNvbnN0IGNoaWxkcmVuQXJyYXkgPSBSZWFjdC5DaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKTtcblxuICAvLyBTdXBwb3J0IGF1dG9maWxsLlxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSBldmVudCA9PiB7XG4gICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbkFycmF5LmZpbmQoY2hpbGRJdGVtID0+IGNoaWxkSXRlbS5wcm9wcy52YWx1ZSA9PT0gZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICBpZiAoY2hpbGQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRWYWx1ZVN0YXRlKGNoaWxkLnByb3BzLnZhbHVlKTtcbiAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgIG9uQ2hhbmdlKGV2ZW50LCBjaGlsZCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVJdGVtQ2xpY2sgPSBjaGlsZCA9PiBldmVudCA9PiB7XG4gICAgbGV0IG5ld1ZhbHVlO1xuXG4gICAgLy8gV2UgdXNlIHRoZSB0YWJpbmRleCBhdHRyaWJ1dGUgdG8gc2lnbmFsIHRoZSBhdmFpbGFibGUgb3B0aW9ucy5cbiAgICBpZiAoIWV2ZW50LmN1cnJlbnRUYXJnZXQuaGFzQXR0cmlidXRlKCd0YWJpbmRleCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgbmV3VmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLnNsaWNlKCkgOiBbXTtcbiAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHZhbHVlLmluZGV4T2YoY2hpbGQucHJvcHMudmFsdWUpO1xuICAgICAgaWYgKGl0ZW1JbmRleCA9PT0gLTEpIHtcbiAgICAgICAgbmV3VmFsdWUucHVzaChjaGlsZC5wcm9wcy52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdWYWx1ZS5zcGxpY2UoaXRlbUluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3VmFsdWUgPSBjaGlsZC5wcm9wcy52YWx1ZTtcbiAgICB9XG4gICAgaWYgKGNoaWxkLnByb3BzLm9uQ2xpY2spIHtcbiAgICAgIGNoaWxkLnByb3BzLm9uQ2xpY2soZXZlbnQpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICBzZXRWYWx1ZVN0YXRlKG5ld1ZhbHVlKTtcbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICAvLyBSZWRlZmluZSB0YXJnZXQgdG8gYWxsb3cgbmFtZSBhbmQgdmFsdWUgdG8gYmUgcmVhZC5cbiAgICAgICAgLy8gVGhpcyBhbGxvd3Mgc2VhbWxlc3MgaW50ZWdyYXRpb24gd2l0aCB0aGUgbW9zdCBwb3B1bGFyIGZvcm0gbGlicmFyaWVzLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL2lzc3Vlcy8xMzQ4NSNpc3N1ZWNvbW1lbnQtNjc2MDQ4NDkyXG4gICAgICAgIC8vIENsb25lIHRoZSBldmVudCB0byBub3Qgb3ZlcnJpZGUgYHRhcmdldGAgb2YgdGhlIG9yaWdpbmFsIGV2ZW50LlxuICAgICAgICBjb25zdCBuYXRpdmVFdmVudCA9IGV2ZW50Lm5hdGl2ZUV2ZW50IHx8IGV2ZW50O1xuICAgICAgICBjb25zdCBjbG9uZWRFdmVudCA9IG5ldyBuYXRpdmVFdmVudC5jb25zdHJ1Y3RvcihuYXRpdmVFdmVudC50eXBlLCBuYXRpdmVFdmVudCk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbG9uZWRFdmVudCwgJ3RhcmdldCcsIHtcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG9uQ2hhbmdlKGNsb25lZEV2ZW50LCBjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghbXVsdGlwbGUpIHtcbiAgICAgIHVwZGF0ZShmYWxzZSwgZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBpZiAoIXJlYWRPbmx5KSB7XG4gICAgICBjb25zdCB2YWxpZEtleXMgPSBbJyAnLCAnQXJyb3dVcCcsICdBcnJvd0Rvd24nLFxuICAgICAgLy8gVGhlIG5hdGl2ZSBzZWxlY3QgZG9lc24ndCByZXNwb25kIHRvIGVudGVyIG9uIG1hY09TLCBidXQgaXQncyByZWNvbW1lbmRlZCBieVxuICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1dBSS9BUklBL2FwZy9wYXR0ZXJucy9jb21ib2JveC9leGFtcGxlcy9jb21ib2JveC1zZWxlY3Qtb25seS9cbiAgICAgICdFbnRlciddO1xuICAgICAgaWYgKHZhbGlkS2V5cy5pbmRleE9mKGV2ZW50LmtleSkgIT09IC0xKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHVwZGF0ZSh0cnVlLCBldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCBvcGVuID0gZGlzcGxheU5vZGUgIT09IG51bGwgJiYgb3BlblN0YXRlO1xuICBjb25zdCBoYW5kbGVCbHVyID0gZXZlbnQgPT4ge1xuICAgIC8vIGlmIG9wZW4gZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uXG4gICAgaWYgKCFvcGVuICYmIG9uQmx1cikge1xuICAgICAgLy8gUHJlYWN0IHN1cHBvcnQsIHRhcmdldCBpcyByZWFkIG9ubHkgcHJvcGVydHkgb24gYSBuYXRpdmUgZXZlbnQuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXZlbnQsICd0YXJnZXQnLCB7XG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIG5hbWVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBvbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgZGVsZXRlIG90aGVyWydhcmlhLWludmFsaWQnXTtcbiAgbGV0IGRpc3BsYXk7XG4gIGxldCBkaXNwbGF5U2luZ2xlO1xuICBjb25zdCBkaXNwbGF5TXVsdGlwbGUgPSBbXTtcbiAgbGV0IGNvbXB1dGVEaXNwbGF5ID0gZmFsc2U7XG4gIGxldCBmb3VuZE1hdGNoID0gZmFsc2U7XG5cbiAgLy8gTm8gbmVlZCB0byBkaXNwbGF5IGFueSB2YWx1ZSBpZiB0aGUgZmllbGQgaXMgZW1wdHkuXG4gIGlmIChpc0ZpbGxlZCh7XG4gICAgdmFsdWVcbiAgfSkgfHwgZGlzcGxheUVtcHR5KSB7XG4gICAgaWYgKHJlbmRlclZhbHVlKSB7XG4gICAgICBkaXNwbGF5ID0gcmVuZGVyVmFsdWUodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21wdXRlRGlzcGxheSA9IHRydWU7XG4gICAgfVxuICB9XG4gIGNvbnN0IGl0ZW1zID0gY2hpbGRyZW5BcnJheS5tYXAoY2hpbGQgPT4ge1xuICAgIGlmICghIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGlzRnJhZ21lbnQoY2hpbGQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW1wiTVVJOiBUaGUgU2VsZWN0IGNvbXBvbmVudCBkb2Vzbid0IGFjY2VwdCBhIEZyYWdtZW50IGFzIGEgY2hpbGQuXCIsICdDb25zaWRlciBwcm92aWRpbmcgYW4gYXJyYXkgaW5zdGVhZC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBzZWxlY3RlZDtcbiAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFRoZSBcXGB2YWx1ZVxcYCBwcm9wIG11c3QgYmUgYW4gYXJyYXkgd2hlbiB1c2luZyB0aGUgXFxgU2VsZWN0XFxgIGNvbXBvbmVudCB3aXRoIFxcYG11bHRpcGxlXFxgLmAgOiBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlKDIpKTtcbiAgICAgIH1cbiAgICAgIHNlbGVjdGVkID0gdmFsdWUuc29tZSh2ID0+IGFyZUVxdWFsVmFsdWVzKHYsIGNoaWxkLnByb3BzLnZhbHVlKSk7XG4gICAgICBpZiAoc2VsZWN0ZWQgJiYgY29tcHV0ZURpc3BsYXkpIHtcbiAgICAgICAgZGlzcGxheU11bHRpcGxlLnB1c2goY2hpbGQucHJvcHMuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3RlZCA9IGFyZUVxdWFsVmFsdWVzKHZhbHVlLCBjaGlsZC5wcm9wcy52YWx1ZSk7XG4gICAgICBpZiAoc2VsZWN0ZWQgJiYgY29tcHV0ZURpc3BsYXkpIHtcbiAgICAgICAgZGlzcGxheVNpbmdsZSA9IGNoaWxkLnByb3BzLmNoaWxkcmVuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgIGZvdW5kTWF0Y2ggPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgJ2FyaWEtc2VsZWN0ZWQnOiBzZWxlY3RlZCA/ICd0cnVlJyA6ICdmYWxzZScsXG4gICAgICBvbkNsaWNrOiBoYW5kbGVJdGVtQ2xpY2soY2hpbGQpLFxuICAgICAgb25LZXlVcDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgICAgICAvLyBvdGhlcndpc2Ugb3VyIE1lbnVJdGVtcyBkaXNwYXRjaGVzIGEgY2xpY2sgZXZlbnRcbiAgICAgICAgICAvLyBpdCdzIG5vdCBiZWhhdmlvciBvZiB0aGUgbmF0aXZlIDxvcHRpb24+IGFuZCBjYXVzZXNcbiAgICAgICAgICAvLyB0aGUgc2VsZWN0IHRvIGNsb3NlIGltbWVkaWF0ZWx5IHNpbmNlIHdlIG9wZW4gb24gc3BhY2Uga2V5ZG93blxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoaWxkLnByb3BzLm9uS2V5VXApIHtcbiAgICAgICAgICBjaGlsZC5wcm9wcy5vbktleVVwKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJvbGU6ICdvcHRpb24nLFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgLy8gVGhlIHZhbHVlIGlzIG1vc3QgbGlrZWx5IG5vdCBhIHZhbGlkIEhUTUwgYXR0cmlidXRlLlxuICAgICAgJ2RhdGEtdmFsdWUnOiBjaGlsZC5wcm9wcy52YWx1ZSAvLyBJbnN0ZWFkLCB3ZSBwcm92aWRlIGl0IGFzIGEgZGF0YSBhdHRyaWJ1dGUuXG4gICAgfSk7XG4gIH0pO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghZm91bmRNYXRjaCAmJiAhbXVsdGlwbGUgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGNoaWxkcmVuQXJyYXkubWFwKGNoaWxkID0+IGNoaWxkLnByb3BzLnZhbHVlKTtcbiAgICAgICAgY29uc29sZS53YXJuKFtgTVVJOiBZb3UgaGF2ZSBwcm92aWRlZCBhbiBvdXQtb2YtcmFuZ2UgdmFsdWUgXFxgJHt2YWx1ZX1cXGAgZm9yIHRoZSBzZWxlY3QgJHtuYW1lID8gYChuYW1lPVwiJHtuYW1lfVwiKSBgIDogJyd9Y29tcG9uZW50LmAsIFwiQ29uc2lkZXIgcHJvdmlkaW5nIGEgdmFsdWUgdGhhdCBtYXRjaGVzIG9uZSBvZiB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgb3IgJycuXCIsIGBUaGUgYXZhaWxhYmxlIHZhbHVlcyBhcmUgJHt2YWx1ZXMuZmlsdGVyKHggPT4geCAhPSBudWxsKS5tYXAoeCA9PiBgXFxgJHt4fVxcYGApLmpvaW4oJywgJykgfHwgJ1wiXCInfS5gXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfSwgW2ZvdW5kTWF0Y2gsIGNoaWxkcmVuQXJyYXksIG11bHRpcGxlLCBuYW1lLCB2YWx1ZV0pO1xuICB9XG4gIGlmIChjb21wdXRlRGlzcGxheSkge1xuICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgaWYgKGRpc3BsYXlNdWx0aXBsZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGlzcGxheSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXNwbGF5ID0gZGlzcGxheU11bHRpcGxlLnJlZHVjZSgob3V0cHV0LCBjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICBvdXRwdXQucHVzaChjaGlsZCk7XG4gICAgICAgICAgaWYgKGluZGV4IDwgZGlzcGxheU11bHRpcGxlLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKCcsICcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9LCBbXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpc3BsYXkgPSBkaXNwbGF5U2luZ2xlO1xuICAgIH1cbiAgfVxuXG4gIC8vIEF2b2lkIHBlcmZvcm1pbmcgYSBsYXlvdXQgY29tcHV0YXRpb24gaW4gdGhlIHJlbmRlciBtZXRob2QuXG4gIGxldCBtZW51TWluV2lkdGggPSBtZW51TWluV2lkdGhTdGF0ZTtcbiAgaWYgKCFhdXRvV2lkdGggJiYgaXNPcGVuQ29udHJvbGxlZCAmJiBkaXNwbGF5Tm9kZSkge1xuICAgIG1lbnVNaW5XaWR0aCA9IGFuY2hvckVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIH1cbiAgbGV0IHRhYkluZGV4O1xuICBpZiAodHlwZW9mIHRhYkluZGV4UHJvcCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0YWJJbmRleCA9IHRhYkluZGV4UHJvcDtcbiAgfSBlbHNlIHtcbiAgICB0YWJJbmRleCA9IGRpc2FibGVkID8gbnVsbCA6IDA7XG4gIH1cbiAgY29uc3QgYnV0dG9uSWQgPSBTZWxlY3REaXNwbGF5UHJvcHMuaWQgfHwgKG5hbWUgPyBgbXVpLWNvbXBvbmVudC1zZWxlY3QtJHtuYW1lfWAgOiB1bmRlZmluZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgdmFyaWFudCxcbiAgICB2YWx1ZSxcbiAgICBvcGVuLFxuICAgIGVycm9yXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IHBhcGVyUHJvcHMgPSBfZXh0ZW5kcyh7fSwgTWVudVByb3BzLlBhcGVyUHJvcHMsIChfTWVudVByb3BzJHNsb3RQcm9wcyA9IE1lbnVQcm9wcy5zbG90UHJvcHMpID09IG51bGwgPyB2b2lkIDAgOiBfTWVudVByb3BzJHNsb3RQcm9wcy5wYXBlcik7XG4gIGNvbnN0IGxpc3Rib3hJZCA9IHVzZUlkKCk7XG4gIGNvbnN0IGhpZGRlbklucHV0SWQgPSB1c2VJZCgpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFsvKiNfX1BVUkVfXyovX2pzeChTZWxlY3RTZWxlY3QsIF9leHRlbmRzKHtcbiAgICAgIHJlZjogaGFuZGxlRGlzcGxheVJlZixcbiAgICAgIHRhYkluZGV4OiB0YWJJbmRleCxcbiAgICAgIHJvbGU6IFwiY29tYm9ib3hcIixcbiAgICAgIFwiYXJpYS1jb250cm9sc1wiOiBsaXN0Ym94SWQsXG4gICAgICBcImFyaWEtZGlzYWJsZWRcIjogZGlzYWJsZWQgPyAndHJ1ZScgOiB1bmRlZmluZWQsXG4gICAgICBcImFyaWEtZXhwYW5kZWRcIjogb3BlbiA/ICd0cnVlJyA6ICdmYWxzZScsXG4gICAgICBcImFyaWEtaGFzcG9wdXBcIjogXCJsaXN0Ym94XCIsXG4gICAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsLFxuICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogW2xhYmVsSWQsIGJ1dHRvbklkXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpIHx8IHVuZGVmaW5lZCxcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgICBvbktleURvd246IGhhbmRsZUtleURvd24sXG4gICAgICBvbk1vdXNlRG93bjogZGlzYWJsZWQgfHwgcmVhZE9ubHkgPyBudWxsIDogaGFuZGxlTW91c2VEb3duLFxuICAgICAgb25CbHVyOiBoYW5kbGVCbHVyLFxuICAgICAgb25Gb2N1czogb25Gb2N1c1xuICAgIH0sIFNlbGVjdERpc3BsYXlQcm9wcywge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChTZWxlY3REaXNwbGF5UHJvcHMuY2xhc3NOYW1lLCBjbGFzc2VzLnNlbGVjdCwgY2xhc3NOYW1lKVxuICAgICAgLy8gVGhlIGlkIGlzIHJlcXVpcmVkIGZvciBwcm9wZXIgYTExeVxuICAgICAgLFxuICAgICAgaWQ6IGJ1dHRvbklkLFxuICAgICAgY2hpbGRyZW46IGlzRW1wdHkoZGlzcGxheSkgPyAvLyBub3RyYW5zbGF0ZSBuZWVkZWQgd2hpbGUgR29vZ2xlIFRyYW5zbGF0ZSB3aWxsIG5vdCBmaXggemVyby13aWR0aCBzcGFjZSBpc3N1ZVxuICAgICAgX3NwYW4gfHwgKF9zcGFuID0gLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcIm5vdHJhbnNsYXRlXCIsXG4gICAgICAgIGNoaWxkcmVuOiBcIlxcdTIwMEJcIlxuICAgICAgfSkpIDogZGlzcGxheVxuICAgIH0pKSwgLyojX19QVVJFX18qL19qc3goU2VsZWN0TmF0aXZlSW5wdXQsIF9leHRlbmRzKHtcbiAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IGVycm9yLFxuICAgICAgdmFsdWU6IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUuam9pbignLCcpIDogdmFsdWUsXG4gICAgICBuYW1lOiBuYW1lICE9IG51bGwgPyBuYW1lIDogaGlkZGVuSW5wdXRJZCxcbiAgICAgIHJlZjogaW5wdXRSZWYsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgICAgdGFiSW5kZXg6IC0xLFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLm5hdGl2ZUlucHV0LFxuICAgICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSwgb3RoZXIpKSwgLyojX19QVVJFX18qL19qc3goU2VsZWN0SWNvbiwge1xuICAgICAgYXM6IEljb25Db21wb25lbnQsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMuaWNvbixcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgICB9KSwgLyojX19QVVJFX18qL19qc3goTWVudSwgX2V4dGVuZHMoe1xuICAgICAgaWQ6IGBtZW51LSR7bmFtZSB8fCAnJ31gLFxuICAgICAgYW5jaG9yRWw6IGFuY2hvckVsZW1lbnQsXG4gICAgICBvcGVuOiBvcGVuLFxuICAgICAgb25DbG9zZTogaGFuZGxlQ2xvc2UsXG4gICAgICBhbmNob3JPcmlnaW46IHtcbiAgICAgICAgdmVydGljYWw6ICdib3R0b20nLFxuICAgICAgICBob3Jpem9udGFsOiAnY2VudGVyJ1xuICAgICAgfSxcbiAgICAgIHRyYW5zZm9ybU9yaWdpbjoge1xuICAgICAgICB2ZXJ0aWNhbDogJ3RvcCcsXG4gICAgICAgIGhvcml6b250YWw6ICdjZW50ZXInXG4gICAgICB9XG4gICAgfSwgTWVudVByb3BzLCB7XG4gICAgICBNZW51TGlzdFByb3BzOiBfZXh0ZW5kcyh7XG4gICAgICAgICdhcmlhLWxhYmVsbGVkYnknOiBsYWJlbElkLFxuICAgICAgICByb2xlOiAnbGlzdGJveCcsXG4gICAgICAgICdhcmlhLW11bHRpc2VsZWN0YWJsZSc6IG11bHRpcGxlID8gJ3RydWUnIDogdW5kZWZpbmVkLFxuICAgICAgICBkaXNhYmxlTGlzdFdyYXA6IHRydWUsXG4gICAgICAgIGlkOiBsaXN0Ym94SWRcbiAgICAgIH0sIE1lbnVQcm9wcy5NZW51TGlzdFByb3BzKSxcbiAgICAgIHNsb3RQcm9wczogX2V4dGVuZHMoe30sIE1lbnVQcm9wcy5zbG90UHJvcHMsIHtcbiAgICAgICAgcGFwZXI6IF9leHRlbmRzKHt9LCBwYXBlclByb3BzLCB7XG4gICAgICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgICAgIG1pbldpZHRoOiBtZW51TWluV2lkdGhcbiAgICAgICAgICB9LCBwYXBlclByb3BzICE9IG51bGwgPyBwYXBlclByb3BzLnN0eWxlIDogbnVsbClcbiAgICAgICAgfSlcbiAgICAgIH0pLFxuICAgICAgY2hpbGRyZW46IGl0ZW1zXG4gICAgfSkpXVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU2VsZWN0SW5wdXQucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgJ2FyaWEtZGVzY3JpYmVkYnknOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgJ2FyaWEtbGFiZWwnOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHdpZHRoIG9mIHRoZSBwb3BvdmVyIHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSBpdGVtcyBpbnNpZGUgdGhlXG4gICAqIG1lbnUsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGF0IGxlYXN0IHRoZSB3aWR0aCBvZiB0aGUgc2VsZWN0IGlucHV0LlxuICAgKi9cbiAgYXV0b1dpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBvcHRpb24gZWxlbWVudHMgdG8gcG9wdWxhdGUgdGhlIHNlbGVjdCB3aXRoLlxuICAgKiBDYW4gYmUgc29tZSBgPE1lbnVJdGVtPmAgZWxlbWVudHMuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIFNlZSBbQ1NTIEFQSV0oI2NzcykgYmVsb3cgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgQ1NTIGNsYXNzIG5hbWUgb2YgdGhlIHNlbGVjdCBlbGVtZW50LlxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHRvZ2dsZWQgb24gbW91bnQuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgb3BlbiBzdGF0ZSBpcyBub3QgY29udHJvbGxlZC5cbiAgICogWW91IGNhbiBvbmx5IHVzZSBpdCB3aGVuIHRoZSBgbmF0aXZlYCBwcm9wIGlzIGBmYWxzZWAgKGRlZmF1bHQpLlxuICAgKi9cbiAgZGVmYXVsdE9wZW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBzZWxlY3QgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBzZWxlY3RlZCBpdGVtIGlzIGRpc3BsYXllZCBldmVuIGlmIGl0cyB2YWx1ZSBpcyBlbXB0eS5cbiAgICovXG4gIGRpc3BsYXlFbXB0eTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgc2VsZWN0IGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGljb24gdGhhdCBkaXNwbGF5cyB0aGUgYXJyb3cuXG4gICAqL1xuICBJY29uQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIEltcGVyYXRpdmUgaGFuZGxlIGltcGxlbWVudGluZyBgeyB2YWx1ZTogVCwgbm9kZTogSFRNTEVsZW1lbnQsIGZvY3VzKCk6IHZvaWQgfWBcbiAgICogRXF1aXZhbGVudCB0byBgcmVmYFxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgYW4gZWxlbWVudCB0aGF0IGFjdHMgYXMgYW4gYWRkaXRpb25hbCBsYWJlbC4gVGhlIFNlbGVjdCB3aWxsXG4gICAqIGJlIGxhYmVsbGVkIGJ5IHRoZSBhZGRpdGlvbmFsIGxhYmVsIGFuZCB0aGUgc2VsZWN0ZWQgdmFsdWUuXG4gICAqL1xuICBsYWJlbElkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BNZW51YF0oL21hdGVyaWFsLXVpL2FwaS9tZW51LykgZWxlbWVudC5cbiAgICovXG4gIE1lbnVQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYHZhbHVlYCBtdXN0IGJlIGFuIGFycmF5IGFuZCB0aGUgbWVudSB3aWxsIHN1cHBvcnQgbXVsdGlwbGUgc2VsZWN0aW9ucy5cbiAgICovXG4gIG11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE5hbWUgYXR0cmlidXRlIG9mIHRoZSBgc2VsZWN0YCBvciBoaWRkZW4gYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIGEgbWVudSBpdGVtIGlzIHNlbGVjdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKGFueSkuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbY2hpbGRdIFRoZSByZWFjdCBlbGVtZW50IHRoYXQgd2FzIHNlbGVjdGVkLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIGNsb3NlZC5cbiAgICogVXNlIGluIGNvbnRyb2xsZWQgbW9kZSAoc2VlIG9wZW4pLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIG9wZW5lZC5cbiAgICogVXNlIGluIGNvbnRyb2xsZWQgbW9kZSAoc2VlIG9wZW4pLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBvbk9wZW46IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIHNlbGVjdGVkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgVGhlIGB2YWx1ZWAgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMge1JlYWN0Tm9kZX1cbiAgICovXG4gIHJlbmRlclZhbHVlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIGNsaWNrYWJsZSBkaXYgZWxlbWVudC5cbiAgICovXG4gIFNlbGVjdERpc3BsYXlQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHRhYkluZGV4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogVGhlIGlucHV0IHZhbHVlLlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydzdGFuZGFyZCcsICdvdXRsaW5lZCcsICdmaWxsZWQnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBTZWxlY3RJbnB1dDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjcmVhdGVTdmdJY29uIGZyb20gJy4uLy4uL3V0aWxzL2NyZWF0ZVN2Z0ljb24nO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVTdmdJY29uKCAvKiNfX1BVUkVfXyovX2pzeChcInBhdGhcIiwge1xuICBkOiBcIk03IDEwbDUgNSA1LTV6XCJcbn0pLCAnQXJyb3dEcm9wRG93bicpOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImF1dG9XaWR0aFwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3Nlc1wiLCBcImNsYXNzTmFtZVwiLCBcImRlZmF1bHRPcGVuXCIsIFwiZGlzcGxheUVtcHR5XCIsIFwiSWNvbkNvbXBvbmVudFwiLCBcImlkXCIsIFwiaW5wdXRcIiwgXCJpbnB1dFByb3BzXCIsIFwibGFiZWxcIiwgXCJsYWJlbElkXCIsIFwiTWVudVByb3BzXCIsIFwibXVsdGlwbGVcIiwgXCJuYXRpdmVcIiwgXCJvbkNsb3NlXCIsIFwib25PcGVuXCIsIFwib3BlblwiLCBcInJlbmRlclZhbHVlXCIsIFwiU2VsZWN0RGlzcGxheVByb3BzXCIsIFwidmFyaWFudFwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcInJvb3RcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBkZWVwbWVyZ2UgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBTZWxlY3RJbnB1dCBmcm9tICcuL1NlbGVjdElucHV0JztcbmltcG9ydCBmb3JtQ29udHJvbFN0YXRlIGZyb20gJy4uL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sU3RhdGUnO1xuaW1wb3J0IHVzZUZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sJztcbmltcG9ydCBBcnJvd0Ryb3BEb3duSWNvbiBmcm9tICcuLi9pbnRlcm5hbC9zdmctaWNvbnMvQXJyb3dEcm9wRG93bic7XG5pbXBvcnQgSW5wdXQgZnJvbSAnLi4vSW5wdXQnO1xuaW1wb3J0IE5hdGl2ZVNlbGVjdElucHV0IGZyb20gJy4uL05hdGl2ZVNlbGVjdC9OYXRpdmVTZWxlY3RJbnB1dCc7XG5pbXBvcnQgRmlsbGVkSW5wdXQgZnJvbSAnLi4vRmlsbGVkSW5wdXQnO1xuaW1wb3J0IE91dGxpbmVkSW5wdXQgZnJvbSAnLi4vT3V0bGluZWRJbnB1dCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIHJldHVybiBjbGFzc2VzO1xufTtcbmNvbnN0IHN0eWxlZFJvb3RDb25maWcgPSB7XG4gIG5hbWU6ICdNdWlTZWxlY3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290LFxuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgJiYgcHJvcCAhPT0gJ3ZhcmlhbnQnLFxuICBzbG90OiAnUm9vdCdcbn07XG5jb25zdCBTdHlsZWRJbnB1dCA9IHN0eWxlZChJbnB1dCwgc3R5bGVkUm9vdENvbmZpZykoJycpO1xuY29uc3QgU3R5bGVkT3V0bGluZWRJbnB1dCA9IHN0eWxlZChPdXRsaW5lZElucHV0LCBzdHlsZWRSb290Q29uZmlnKSgnJyk7XG5jb25zdCBTdHlsZWRGaWxsZWRJbnB1dCA9IHN0eWxlZChGaWxsZWRJbnB1dCwgc3R5bGVkUm9vdENvbmZpZykoJycpO1xuY29uc3QgU2VsZWN0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gU2VsZWN0KGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIG5hbWU6ICdNdWlTZWxlY3QnLFxuICAgIHByb3BzOiBpblByb3BzXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhdXRvV2lkdGggPSBmYWxzZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NlczogY2xhc3Nlc1Byb3AgPSB7fSxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRlZmF1bHRPcGVuID0gZmFsc2UsXG4gICAgICBkaXNwbGF5RW1wdHkgPSBmYWxzZSxcbiAgICAgIEljb25Db21wb25lbnQgPSBBcnJvd0Ryb3BEb3duSWNvbixcbiAgICAgIGlkLFxuICAgICAgaW5wdXQsXG4gICAgICBpbnB1dFByb3BzLFxuICAgICAgbGFiZWwsXG4gICAgICBsYWJlbElkLFxuICAgICAgTWVudVByb3BzLFxuICAgICAgbXVsdGlwbGUgPSBmYWxzZSxcbiAgICAgIG5hdGl2ZSA9IGZhbHNlLFxuICAgICAgb25DbG9zZSxcbiAgICAgIG9uT3BlbixcbiAgICAgIG9wZW4sXG4gICAgICByZW5kZXJWYWx1ZSxcbiAgICAgIFNlbGVjdERpc3BsYXlQcm9wcyxcbiAgICAgIHZhcmlhbnQ6IHZhcmlhbnRQcm9wID0gJ291dGxpbmVkJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBpbnB1dENvbXBvbmVudCA9IG5hdGl2ZSA/IE5hdGl2ZVNlbGVjdElucHV0IDogU2VsZWN0SW5wdXQ7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgZmNzID0gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gICAgcHJvcHMsXG4gICAgbXVpRm9ybUNvbnRyb2wsXG4gICAgc3RhdGVzOiBbJ3ZhcmlhbnQnLCAnZXJyb3InXVxuICB9KTtcbiAgY29uc3QgdmFyaWFudCA9IGZjcy52YXJpYW50IHx8IHZhcmlhbnRQcm9wO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgdmFyaWFudCxcbiAgICBjbGFzc2VzOiBjbGFzc2VzUHJvcFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCByZXN0T2ZDbGFzc2VzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoY2xhc3NlcywgX2V4Y2x1ZGVkMik7XG4gIGNvbnN0IElucHV0Q29tcG9uZW50ID0gaW5wdXQgfHwge1xuICAgIHN0YW5kYXJkOiAvKiNfX1BVUkVfXyovX2pzeChTdHlsZWRJbnB1dCwge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0pLFxuICAgIG91dGxpbmVkOiAvKiNfX1BVUkVfXyovX2pzeChTdHlsZWRPdXRsaW5lZElucHV0LCB7XG4gICAgICBsYWJlbDogbGFiZWwsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSksXG4gICAgZmlsbGVkOiAvKiNfX1BVUkVfXyovX2pzeChTdHlsZWRGaWxsZWRJbnB1dCwge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0pXG4gIH1bdmFyaWFudF07XG4gIGNvbnN0IGlucHV0Q29tcG9uZW50UmVmID0gdXNlRm9ya1JlZihyZWYsIElucHV0Q29tcG9uZW50LnJlZik7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChSZWFjdC5GcmFnbWVudCwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KElucHV0Q29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICAvLyBNb3N0IG9mIHRoZSBsb2dpYyBpcyBpbXBsZW1lbnRlZCBpbiBgU2VsZWN0SW5wdXRgLlxuICAgICAgLy8gVGhlIGBTZWxlY3RgIGNvbXBvbmVudCBpcyBhIHNpbXBsZSBBUEkgd3JhcHBlciB0byBleHBvc2Ugc29tZXRoaW5nIGJldHRlciB0byBwbGF5IHdpdGguXG4gICAgICBpbnB1dENvbXBvbmVudCxcbiAgICAgIGlucHV0UHJvcHM6IF9leHRlbmRzKHtcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIGVycm9yOiBmY3MuZXJyb3IsXG4gICAgICAgIEljb25Db21wb25lbnQsXG4gICAgICAgIHZhcmlhbnQsXG4gICAgICAgIHR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgLy8gV2UgcmVuZGVyIGEgc2VsZWN0LiBXZSBjYW4gaWdub3JlIHRoZSB0eXBlIHByb3ZpZGVkIGJ5IHRoZSBgSW5wdXRgLlxuICAgICAgICBtdWx0aXBsZVxuICAgICAgfSwgbmF0aXZlID8ge1xuICAgICAgICBpZFxuICAgICAgfSA6IHtcbiAgICAgICAgYXV0b1dpZHRoLFxuICAgICAgICBkZWZhdWx0T3BlbixcbiAgICAgICAgZGlzcGxheUVtcHR5LFxuICAgICAgICBsYWJlbElkLFxuICAgICAgICBNZW51UHJvcHMsXG4gICAgICAgIG9uQ2xvc2UsXG4gICAgICAgIG9uT3BlbixcbiAgICAgICAgb3BlbixcbiAgICAgICAgcmVuZGVyVmFsdWUsXG4gICAgICAgIFNlbGVjdERpc3BsYXlQcm9wczogX2V4dGVuZHMoe1xuICAgICAgICAgIGlkXG4gICAgICAgIH0sIFNlbGVjdERpc3BsYXlQcm9wcylcbiAgICAgIH0sIGlucHV0UHJvcHMsIHtcbiAgICAgICAgY2xhc3NlczogaW5wdXRQcm9wcyA/IGRlZXBtZXJnZShyZXN0T2ZDbGFzc2VzLCBpbnB1dFByb3BzLmNsYXNzZXMpIDogcmVzdE9mQ2xhc3Nlc1xuICAgICAgfSwgaW5wdXQgPyBpbnB1dC5wcm9wcy5pbnB1dFByb3BzIDoge30pXG4gICAgfSwgbXVsdGlwbGUgJiYgbmF0aXZlICYmIHZhcmlhbnQgPT09ICdvdXRsaW5lZCcgPyB7XG4gICAgICBub3RjaGVkOiB0cnVlXG4gICAgfSA6IHt9LCB7XG4gICAgICByZWY6IGlucHV0Q29tcG9uZW50UmVmLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KElucHV0Q29tcG9uZW50LnByb3BzLmNsYXNzTmFtZSwgY2xhc3NOYW1lLCBjbGFzc2VzLnJvb3QpXG4gICAgfSwgIWlucHV0ICYmIHtcbiAgICAgIHZhcmlhbnRcbiAgICB9LCBvdGhlcikpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBTZWxlY3QucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgd2lkdGggb2YgdGhlIHBvcG92ZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNldCBhY2NvcmRpbmcgdG8gdGhlIGl0ZW1zIGluc2lkZSB0aGVcbiAgICogbWVudSwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgYXQgbGVhc3QgdGhlIHdpZHRoIG9mIHRoZSBzZWxlY3QgaW5wdXQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhdXRvV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIG9wdGlvbiBlbGVtZW50cyB0byBwb3B1bGF0ZSB0aGUgc2VsZWN0IHdpdGguXG4gICAqIENhbiBiZSBzb21lIGBNZW51SXRlbWAgd2hlbiBgbmF0aXZlYCBpcyBmYWxzZSBhbmQgYG9wdGlvbmAgd2hlbiBgbmF0aXZlYCBpcyB0cnVlLlxuICAgKlxuICAgKiDimqDvuI9UaGUgYE1lbnVJdGVtYCBlbGVtZW50cyAqKm11c3QqKiBiZSBkaXJlY3QgZGVzY2VuZGFudHMgd2hlbiBgbmF0aXZlYCBpcyBmYWxzZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgaW5pdGlhbGx5IG9wZW4uIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgb3BlbiBzdGF0ZSBpcyBub3QgY29udHJvbGxlZCAoaS5lLiB0aGUgYG9wZW5gIHByb3AgaXMgbm90IGRlZmluZWQpLlxuICAgKiBZb3UgY2FuIG9ubHkgdXNlIGl0IHdoZW4gdGhlIGBuYXRpdmVgIHByb3AgaXMgYGZhbHNlYCAoZGVmYXVsdCkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZWZhdWx0T3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSB2YWx1ZSBpcyBkaXNwbGF5ZWQgZXZlbiBpZiBubyBpdGVtcyBhcmUgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEluIG9yZGVyIHRvIGRpc3BsYXkgYSBtZWFuaW5nZnVsIHZhbHVlLCBhIGZ1bmN0aW9uIGNhbiBiZSBwYXNzZWQgdG8gdGhlIGByZW5kZXJWYWx1ZWAgcHJvcCB3aGljaFxuICAgKiByZXR1cm5zIHRoZSB2YWx1ZSB0byBiZSBkaXNwbGF5ZWQgd2hlbiBubyBpdGVtcyBhcmUgc2VsZWN0ZWQuXG4gICAqXG4gICAqIOKaoO+4jyBXaGVuIHVzaW5nIHRoaXMgcHJvcCwgbWFrZSBzdXJlIHRoZSBsYWJlbCBkb2Vzbid0IG92ZXJsYXAgd2l0aCB0aGUgZW1wdHkgZGlzcGxheWVkIHZhbHVlLlxuICAgKiBUaGUgbGFiZWwgc2hvdWxkIGVpdGhlciBiZSBoaWRkZW4gb3IgZm9yY2VkIHRvIGEgc2hydW5rIHN0YXRlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzcGxheUVtcHR5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBpY29uIHRoYXQgZGlzcGxheXMgdGhlIGFycm93LlxuICAgKiBAZGVmYXVsdCBBcnJvd0Ryb3BEb3duSWNvblxuICAgKi9cbiAgSWNvbkNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogVGhlIGBpZGAgb2YgdGhlIHdyYXBwZXIgZWxlbWVudCBvciB0aGUgYHNlbGVjdGAgZWxlbWVudCB3aGVuIGBuYXRpdmVgLlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBBbiBgSW5wdXRgIGVsZW1lbnQ7IGRvZXMgbm90IGhhdmUgdG8gYmUgYSBtYXRlcmlhbC11aSBzcGVjaWZpYyBgSW5wdXRgLlxuICAgKi9cbiAgaW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50LFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIFdoZW4gYG5hdGl2ZWAgaXMgYHRydWVgLCB0aGUgYXR0cmlidXRlcyBhcmUgYXBwbGllZCBvbiB0aGUgYHNlbGVjdGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBTZWUgW091dGxpbmVkSW5wdXQjbGFiZWxdKC9tYXRlcmlhbC11aS9hcGkvb3V0bGluZWQtaW5wdXQvI3Byb3BzKVxuICAgKi9cbiAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIElEIG9mIGFuIGVsZW1lbnQgdGhhdCBhY3RzIGFzIGFuIGFkZGl0aW9uYWwgbGFiZWwuIFRoZSBTZWxlY3Qgd2lsbFxuICAgKiBiZSBsYWJlbGxlZCBieSB0aGUgYWRkaXRpb25hbCBsYWJlbCBhbmQgdGhlIHNlbGVjdGVkIHZhbHVlLlxuICAgKi9cbiAgbGFiZWxJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgTWVudWBdKC9tYXRlcmlhbC11aS9hcGkvbWVudS8pIGVsZW1lbnQuXG4gICAqL1xuICBNZW51UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGB2YWx1ZWAgbXVzdCBiZSBhbiBhcnJheSBhbmQgdGhlIG1lbnUgd2lsbCBzdXBwb3J0IG11bHRpcGxlIHNlbGVjdGlvbnMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtdWx0aXBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgdXNlcyBhIG5hdGl2ZSBgc2VsZWN0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbmF0aXZlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gYSBtZW51IGl0ZW0gaXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7U2VsZWN0Q2hhbmdlRXZlbnQ8VmFsdWU+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoYW55KS5cbiAgICogKipXYXJuaW5nKio6IFRoaXMgaXMgYSBnZW5lcmljIGV2ZW50LCBub3QgYSBjaGFuZ2UgZXZlbnQsIHVubGVzcyB0aGUgY2hhbmdlIGV2ZW50IGlzIGNhdXNlZCBieSBicm93c2VyIGF1dG9maWxsLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2NoaWxkXSBUaGUgcmVhY3QgZWxlbWVudCB0aGF0IHdhcyBzZWxlY3RlZCB3aGVuIGBuYXRpdmVgIGlzIGBmYWxzZWAgKGRlZmF1bHQpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIGNsb3NlZC5cbiAgICogVXNlIGl0IGluIGVpdGhlciBjb250cm9sbGVkIChzZWUgdGhlIGBvcGVuYCBwcm9wKSwgb3IgdW5jb250cm9sbGVkIG1vZGUgKHRvIGRldGVjdCB3aGVuIHRoZSBTZWxlY3QgY29sbGFwc2VzKS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgb3BlbmVkLlxuICAgKiBVc2UgaXQgaW4gZWl0aGVyIGNvbnRyb2xsZWQgKHNlZSB0aGUgYG9wZW5gIHByb3ApLCBvciB1bmNvbnRyb2xsZWQgbW9kZSAodG8gZGV0ZWN0IHdoZW4gdGhlIFNlbGVjdCBleHBhbmRzKS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKi9cbiAgb25PcGVuOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzaG93bi5cbiAgICogWW91IGNhbiBvbmx5IHVzZSBpdCB3aGVuIHRoZSBgbmF0aXZlYCBwcm9wIGlzIGBmYWxzZWAgKGRlZmF1bHQpLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIHNlbGVjdGVkIHZhbHVlLlxuICAgKiBZb3UgY2FuIG9ubHkgdXNlIGl0IHdoZW4gdGhlIGBuYXRpdmVgIHByb3AgaXMgYGZhbHNlYCAoZGVmYXVsdCkuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZSBUaGUgYHZhbHVlYCBwcm92aWRlZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyB7UmVhY3ROb2RlfVxuICAgKi9cbiAgcmVuZGVyVmFsdWU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgY2xpY2thYmxlIGRpdiBlbGVtZW50LlxuICAgKi9cbiAgU2VsZWN0RGlzcGxheVByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIGBpbnB1dGAgdmFsdWUuIFByb3ZpZGluZyBhbiBlbXB0eSBzdHJpbmcgd2lsbCBzZWxlY3Qgbm8gb3B0aW9ucy5cbiAgICogU2V0IHRvIGFuIGVtcHR5IHN0cmluZyBgJydgIGlmIHlvdSBkb24ndCB3YW50IGFueSBvZiB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgdG8gYmUgc2VsZWN0ZWQuXG4gICAqXG4gICAqIElmIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QgaXQgbXVzdCBoYXZlIHJlZmVyZW5jZSBlcXVhbGl0eSB3aXRoIHRoZSBvcHRpb24gaW4gb3JkZXIgdG8gYmUgc2VsZWN0ZWQuXG4gICAqIElmIHRoZSB2YWx1ZSBpcyBub3QgYW4gb2JqZWN0LCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG11c3QgbWF0Y2ggd2l0aCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvcHRpb24gaW4gb3JkZXIgdG8gYmUgc2VsZWN0ZWQuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnJ10pLCBQcm9wVHlwZXMuYW55XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdvdXRsaW5lZCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKVxufSA6IHZvaWQgMDtcblNlbGVjdC5tdWlOYW1lID0gJ1NlbGVjdCc7XG5leHBvcnQgZGVmYXVsdCBTZWxlY3Q7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRGaWVsZFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpVGV4dEZpZWxkJywgc2xvdCk7XG59XG5jb25zdCB0ZXh0RmllbGRDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpVGV4dEZpZWxkJywgWydyb290J10pO1xuZXhwb3J0IGRlZmF1bHQgdGV4dEZpZWxkQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhdXRvQ29tcGxldGVcIiwgXCJhdXRvRm9jdXNcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcIkZvcm1IZWxwZXJUZXh0UHJvcHNcIiwgXCJmdWxsV2lkdGhcIiwgXCJoZWxwZXJUZXh0XCIsIFwiaWRcIiwgXCJJbnB1dExhYmVsUHJvcHNcIiwgXCJpbnB1dFByb3BzXCIsIFwiSW5wdXRQcm9wc1wiLCBcImlucHV0UmVmXCIsIFwibGFiZWxcIiwgXCJtYXhSb3dzXCIsIFwibWluUm93c1wiLCBcIm11bHRpbGluZVwiLCBcIm5hbWVcIiwgXCJvbkJsdXJcIiwgXCJvbkNoYW5nZVwiLCBcIm9uRm9jdXNcIiwgXCJwbGFjZWhvbGRlclwiLCBcInJlcXVpcmVkXCIsIFwicm93c1wiLCBcInNlbGVjdFwiLCBcIlNlbGVjdFByb3BzXCIsIFwidHlwZVwiLCBcInZhbHVlXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IHJlZlR5cGUsIHVuc3RhYmxlX3VzZUlkIGFzIHVzZUlkIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IElucHV0IGZyb20gJy4uL0lucHV0JztcbmltcG9ydCBGaWxsZWRJbnB1dCBmcm9tICcuLi9GaWxsZWRJbnB1dCc7XG5pbXBvcnQgT3V0bGluZWRJbnB1dCBmcm9tICcuLi9PdXRsaW5lZElucHV0JztcbmltcG9ydCBJbnB1dExhYmVsIGZyb20gJy4uL0lucHV0TGFiZWwnO1xuaW1wb3J0IEZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sJztcbmltcG9ydCBGb3JtSGVscGVyVGV4dCBmcm9tICcuLi9Gb3JtSGVscGVyVGV4dCc7XG5pbXBvcnQgU2VsZWN0IGZyb20gJy4uL1NlbGVjdCc7XG5pbXBvcnQgeyBnZXRUZXh0RmllbGRVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3RleHRGaWVsZENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHZhcmlhbnRDb21wb25lbnQgPSB7XG4gIHN0YW5kYXJkOiBJbnB1dCxcbiAgZmlsbGVkOiBGaWxsZWRJbnB1dCxcbiAgb3V0bGluZWQ6IE91dGxpbmVkSW5wdXRcbn07XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRUZXh0RmllbGRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IFRleHRGaWVsZFJvb3QgPSBzdHlsZWQoRm9ybUNvbnRyb2wsIHtcbiAgbmFtZTogJ011aVRleHRGaWVsZCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe30pO1xuXG4vKipcbiAqIFRoZSBgVGV4dEZpZWxkYCBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIgZm9yIHRoZSBtb3N0IGNvbW1vbiBjYXNlcyAoODAlKS5cbiAqIEl0IGNhbm5vdCBiZSBhbGwgdGhpbmdzIHRvIGFsbCBwZW9wbGUsIG90aGVyd2lzZSB0aGUgQVBJIHdvdWxkIGdyb3cgb3V0IG9mIGNvbnRyb2wuXG4gKlxuICogIyMgQWR2YW5jZWQgQ29uZmlndXJhdGlvblxuICpcbiAqIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhhdCB0aGUgdGV4dCBmaWVsZCBpcyBhIHNpbXBsZSBhYnN0cmFjdGlvblxuICogb24gdG9wIG9mIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czpcbiAqXG4gKiAtIFtGb3JtQ29udHJvbF0oL21hdGVyaWFsLXVpL2FwaS9mb3JtLWNvbnRyb2wvKVxuICogLSBbSW5wdXRMYWJlbF0oL21hdGVyaWFsLXVpL2FwaS9pbnB1dC1sYWJlbC8pXG4gKiAtIFtGaWxsZWRJbnB1dF0oL21hdGVyaWFsLXVpL2FwaS9maWxsZWQtaW5wdXQvKVxuICogLSBbT3V0bGluZWRJbnB1dF0oL21hdGVyaWFsLXVpL2FwaS9vdXRsaW5lZC1pbnB1dC8pXG4gKiAtIFtJbnB1dF0oL21hdGVyaWFsLXVpL2FwaS9pbnB1dC8pXG4gKiAtIFtGb3JtSGVscGVyVGV4dF0oL21hdGVyaWFsLXVpL2FwaS9mb3JtLWhlbHBlci10ZXh0LylcbiAqXG4gKiBJZiB5b3Ugd2lzaCB0byBhbHRlciB0aGUgcHJvcHMgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LCB5b3UgY2FuIGRvIHNvIGFzIGZvbGxvd3M6XG4gKlxuICogYGBganN4XG4gKiBjb25zdCBpbnB1dFByb3BzID0ge1xuICogICBzdGVwOiAzMDAsXG4gKiB9O1xuICpcbiAqIHJldHVybiA8VGV4dEZpZWxkIGlkPVwidGltZVwiIHR5cGU9XCJ0aW1lXCIgaW5wdXRQcm9wcz17aW5wdXRQcm9wc30gLz47XG4gKiBgYGBcbiAqXG4gKiBGb3IgYWR2YW5jZWQgY2FzZXMsIHBsZWFzZSBsb29rIGF0IHRoZSBzb3VyY2Ugb2YgVGV4dEZpZWxkIGJ5IGNsaWNraW5nIG9uIHRoZVxuICogXCJFZGl0IHRoaXMgcGFnZVwiIGJ1dHRvbiBhYm92ZS4gQ29uc2lkZXIgZWl0aGVyOlxuICpcbiAqIC0gdXNpbmcgdGhlIHVwcGVyIGNhc2UgcHJvcHMgZm9yIHBhc3NpbmcgdmFsdWVzIGRpcmVjdGx5IHRvIHRoZSBjb21wb25lbnRzXG4gKiAtIHVzaW5nIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudHMgZGlyZWN0bHkgYXMgc2hvd24gaW4gdGhlIGRlbW9zXG4gKi9cbmNvbnN0IFRleHRGaWVsZCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFRleHRGaWVsZChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVGV4dEZpZWxkJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgYXV0b0NvbXBsZXRlLFxuICAgICAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgIGVycm9yID0gZmFsc2UsXG4gICAgICBGb3JtSGVscGVyVGV4dFByb3BzLFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICBoZWxwZXJUZXh0LFxuICAgICAgaWQ6IGlkT3ZlcnJpZGUsXG4gICAgICBJbnB1dExhYmVsUHJvcHMsXG4gICAgICBpbnB1dFByb3BzLFxuICAgICAgSW5wdXRQcm9wcyxcbiAgICAgIGlucHV0UmVmLFxuICAgICAgbGFiZWwsXG4gICAgICBtYXhSb3dzLFxuICAgICAgbWluUm93cyxcbiAgICAgIG11bHRpbGluZSA9IGZhbHNlLFxuICAgICAgbmFtZSxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgICAgIHJvd3MsXG4gICAgICBzZWxlY3QgPSBmYWxzZSxcbiAgICAgIFNlbGVjdFByb3BzLFxuICAgICAgdHlwZSxcbiAgICAgIHZhbHVlLFxuICAgICAgdmFyaWFudCA9ICdvdXRsaW5lZCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGF1dG9Gb2N1cyxcbiAgICBjb2xvcixcbiAgICBkaXNhYmxlZCxcbiAgICBlcnJvcixcbiAgICBmdWxsV2lkdGgsXG4gICAgbXVsdGlsaW5lLFxuICAgIHJlcXVpcmVkLFxuICAgIHNlbGVjdCxcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHNlbGVjdCAmJiAhY2hpbGRyZW4pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogYGNoaWxkcmVuYCBtdXN0IGJlIHBhc3NlZCB3aGVuIHVzaW5nIHRoZSBgVGV4dEZpZWxkYCBjb21wb25lbnQgd2l0aCBgc2VsZWN0YC4nKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgSW5wdXRNb3JlID0ge307XG4gIGlmICh2YXJpYW50ID09PSAnb3V0bGluZWQnKSB7XG4gICAgaWYgKElucHV0TGFiZWxQcm9wcyAmJiB0eXBlb2YgSW5wdXRMYWJlbFByb3BzLnNocmluayAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIElucHV0TW9yZS5ub3RjaGVkID0gSW5wdXRMYWJlbFByb3BzLnNocmluaztcbiAgICB9XG4gICAgSW5wdXRNb3JlLmxhYmVsID0gbGFiZWw7XG4gIH1cbiAgaWYgKHNlbGVjdCkge1xuICAgIC8vIHVuc2V0IGRlZmF1bHRzIGZyb20gdGV4dGJveCBpbnB1dHNcbiAgICBpZiAoIVNlbGVjdFByb3BzIHx8ICFTZWxlY3RQcm9wcy5uYXRpdmUpIHtcbiAgICAgIElucHV0TW9yZS5pZCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgSW5wdXRNb3JlWydhcmlhLWRlc2NyaWJlZGJ5J10gPSB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgaWQgPSB1c2VJZChpZE92ZXJyaWRlKTtcbiAgY29uc3QgaGVscGVyVGV4dElkID0gaGVscGVyVGV4dCAmJiBpZCA/IGAke2lkfS1oZWxwZXItdGV4dGAgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGlucHV0TGFiZWxJZCA9IGxhYmVsICYmIGlkID8gYCR7aWR9LWxhYmVsYCA6IHVuZGVmaW5lZDtcbiAgY29uc3QgSW5wdXRDb21wb25lbnQgPSB2YXJpYW50Q29tcG9uZW50W3ZhcmlhbnRdO1xuICBjb25zdCBJbnB1dEVsZW1lbnQgPSAvKiNfX1BVUkVfXyovX2pzeChJbnB1dENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBoZWxwZXJUZXh0SWQsXG4gICAgYXV0b0NvbXBsZXRlOiBhdXRvQ29tcGxldGUsXG4gICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgbXVsdGlsaW5lOiBtdWx0aWxpbmUsXG4gICAgbmFtZTogbmFtZSxcbiAgICByb3dzOiByb3dzLFxuICAgIG1heFJvd3M6IG1heFJvd3MsXG4gICAgbWluUm93czogbWluUm93cyxcbiAgICB0eXBlOiB0eXBlLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBpZDogaWQsXG4gICAgaW5wdXRSZWY6IGlucHV0UmVmLFxuICAgIG9uQmx1cjogb25CbHVyLFxuICAgIG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICBvbkZvY3VzOiBvbkZvY3VzLFxuICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcbiAgICBpbnB1dFByb3BzOiBpbnB1dFByb3BzXG4gIH0sIElucHV0TW9yZSwgSW5wdXRQcm9wcykpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFRleHRGaWVsZFJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBlcnJvcjogZXJyb3IsXG4gICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgcmVmOiByZWYsXG4gICAgcmVxdWlyZWQ6IHJlcXVpcmVkLFxuICAgIGNvbG9yOiBjb2xvcixcbiAgICB2YXJpYW50OiB2YXJpYW50LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogW2xhYmVsICE9IG51bGwgJiYgbGFiZWwgIT09ICcnICYmIC8qI19fUFVSRV9fKi9fanN4KElucHV0TGFiZWwsIF9leHRlbmRzKHtcbiAgICAgIGh0bWxGb3I6IGlkLFxuICAgICAgaWQ6IGlucHV0TGFiZWxJZFxuICAgIH0sIElucHV0TGFiZWxQcm9wcywge1xuICAgICAgY2hpbGRyZW46IGxhYmVsXG4gICAgfSkpLCBzZWxlY3QgPyAvKiNfX1BVUkVfXyovX2pzeChTZWxlY3QsIF9leHRlbmRzKHtcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBoZWxwZXJUZXh0SWQsXG4gICAgICBpZDogaWQsXG4gICAgICBsYWJlbElkOiBpbnB1dExhYmVsSWQsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBpbnB1dDogSW5wdXRFbGVtZW50XG4gICAgfSwgU2VsZWN0UHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pKSA6IElucHV0RWxlbWVudCwgaGVscGVyVGV4dCAmJiAvKiNfX1BVUkVfXyovX2pzeChGb3JtSGVscGVyVGV4dCwgX2V4dGVuZHMoe1xuICAgICAgaWQ6IGhlbHBlclRleHRJZFxuICAgIH0sIEZvcm1IZWxwZXJUZXh0UHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBoZWxwZXJUZXh0XG4gICAgfSkpXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRleHRGaWVsZC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgaGVscHMgdXNlcnMgdG8gZmlsbCBmb3JtcyBmYXN0ZXIsIGVzcGVjaWFsbHkgb24gbW9iaWxlIGRldmljZXMuXG4gICAqIFRoZSBuYW1lIGNhbiBiZSBjb25mdXNpbmcsIGFzIGl0J3MgbW9yZSBsaWtlIGFuIGF1dG9maWxsLlxuICAgKiBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgaXQgW2ZvbGxvd2luZyB0aGUgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybS1jb250cm9sLWluZnJhc3RydWN0dXJlLmh0bWwjYXV0b2ZpbGwpLlxuICAgKi9cbiAgYXV0b0NvbXBsZXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeScsICdlcnJvcicsICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBkaXNwbGF5ZWQgaW4gYW4gZXJyb3Igc3RhdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYEZvcm1IZWxwZXJUZXh0YF0oL21hdGVyaWFsLXVpL2FwaS9mb3JtLWhlbHBlci10ZXh0LykgZWxlbWVudC5cbiAgICovXG4gIEZvcm1IZWxwZXJUZXh0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBpbnB1dCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaGVscGVyIHRleHQgY29udGVudC5cbiAgICovXG4gIGhlbHBlclRleHQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIFVzZSB0aGlzIHByb3AgdG8gbWFrZSBgbGFiZWxgIGFuZCBgaGVscGVyVGV4dGAgYWNjZXNzaWJsZSBmb3Igc2NyZWVuIHJlYWRlcnMuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgSW5wdXRMYWJlbGBdKC9tYXRlcmlhbC11aS9hcGkvaW5wdXQtbGFiZWwvKSBlbGVtZW50LlxuICAgKiBQb2ludGVyIGV2ZW50cyBsaWtlIGBvbkNsaWNrYCBhcmUgZW5hYmxlZCBpZiBhbmQgb25seSBpZiBgc2hyaW5rYCBpcyBgdHJ1ZWAuXG4gICAqL1xuICBJbnB1dExhYmVsUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBJbnB1dCBlbGVtZW50LlxuICAgKiBJdCB3aWxsIGJlIGEgW2BGaWxsZWRJbnB1dGBdKC9tYXRlcmlhbC11aS9hcGkvZmlsbGVkLWlucHV0LyksXG4gICAqIFtgT3V0bGluZWRJbnB1dGBdKC9tYXRlcmlhbC11aS9hcGkvb3V0bGluZWQtaW5wdXQvKSBvciBbYElucHV0YF0oL21hdGVyaWFsLXVpL2FwaS9pbnB1dC8pXG4gICAqIGNvbXBvbmVudCBkZXBlbmRpbmcgb24gdGhlIGB2YXJpYW50YCBwcm9wIHZhbHVlLlxuICAgKi9cbiAgSW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogVGhlIGxhYmVsIGNvbnRlbnQuXG4gICAqL1xuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgIG9yIGBub3JtYWxgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nIG9mIHRoaXMgYW5kIGNvbnRhaW5lZCBjb21wb25lbnRzLlxuICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZScsICdub3JtYWwnXSksXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSBgdGV4dGFyZWFgIGVsZW1lbnQgaXMgcmVuZGVyZWQgaW5zdGVhZCBvZiBhbiBpbnB1dC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpbGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBzaG9ydCBoaW50IGRpc3BsYXllZCBpbiB0aGUgYGlucHV0YCBiZWZvcmUgdGhlIHVzZXIgZW50ZXJzIGEgdmFsdWUuXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGRpc3BsYXllZCBhcyByZXF1aXJlZCBhbmQgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyByZXF1aXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgcm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogUmVuZGVyIGEgW2BTZWxlY3RgXSgvbWF0ZXJpYWwtdWkvYXBpL3NlbGVjdC8pIGVsZW1lbnQgd2hpbGUgcGFzc2luZyB0aGUgSW5wdXQgZWxlbWVudCB0byBgU2VsZWN0YCBhcyBgaW5wdXRgIHBhcmFtZXRlci5cbiAgICogSWYgdGhpcyBvcHRpb24gaXMgc2V0IHlvdSBtdXN0IHBhc3MgdGhlIG9wdGlvbnMgb2YgdGhlIHNlbGVjdCBhcyBjaGlsZHJlbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHNlbGVjdDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYFNlbGVjdGBdKC9tYXRlcmlhbC11aS9hcGkvc2VsZWN0LykgZWxlbWVudC5cbiAgICovXG4gIFNlbGVjdFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuIEl0IHNob3VsZCBiZSBbYSB2YWxpZCBIVE1MNSBpbnB1dCB0eXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjRm9ybV8lM0NpbnB1dCUzRV90eXBlcykuXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudCwgcmVxdWlyZWQgZm9yIGEgY29udHJvbGxlZCBjb21wb25lbnQuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgJ291dGxpbmVkJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgVGV4dEZpZWxkOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUb29sYmFyVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUb29sYmFyJywgc2xvdCk7XG59XG5jb25zdCB0b29sYmFyQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVRvb2xiYXInLCBbJ3Jvb3QnLCAnZ3V0dGVycycsICdyZWd1bGFyJywgJ2RlbnNlJ10pO1xuZXhwb3J0IGRlZmF1bHQgdG9vbGJhckNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZUd1dHRlcnNcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGdldFRvb2xiYXJVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3Rvb2xiYXJDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlR3V0dGVycyxcbiAgICB2YXJpYW50XG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCAhZGlzYWJsZUd1dHRlcnMgJiYgJ2d1dHRlcnMnLCB2YXJpYW50XVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFRvb2xiYXJVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IFRvb2xiYXJSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlUb29sYmFyJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsICFvd25lclN0YXRlLmRpc2FibGVHdXR0ZXJzICYmIHN0eWxlcy5ndXR0ZXJzLCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInXG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlR3V0dGVycyAmJiB7XG4gIHBhZGRpbmdMZWZ0OiB0aGVtZS5zcGFjaW5nKDIpLFxuICBwYWRkaW5nUmlnaHQ6IHRoZW1lLnNwYWNpbmcoMiksXG4gIFt0aGVtZS5icmVha3BvaW50cy51cCgnc20nKV06IHtcbiAgICBwYWRkaW5nTGVmdDogdGhlbWUuc3BhY2luZygzKSxcbiAgICBwYWRkaW5nUmlnaHQ6IHRoZW1lLnNwYWNpbmcoMylcbiAgfVxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZGVuc2UnICYmIHtcbiAgbWluSGVpZ2h0OiA0OFxufSksICh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdyZWd1bGFyJyAmJiB0aGVtZS5taXhpbnMudG9vbGJhcik7XG5jb25zdCBUb29sYmFyID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gVG9vbGJhcihpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVG9vbGJhcidcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgICAgZGlzYWJsZUd1dHRlcnMgPSBmYWxzZSxcbiAgICAgIHZhcmlhbnQgPSAncmVndWxhcidcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudCxcbiAgICBkaXNhYmxlR3V0dGVycyxcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUb29sYmFyUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IHJlZixcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gIH0sIG90aGVyKSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRvb2xiYXIucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVGhlIFRvb2xiYXIgY2hpbGRyZW4sIHVzdWFsbHkgYSBtaXh0dXJlIG9mIGBJY29uQnV0dG9uYCwgYEJ1dHRvbmAgYW5kIGBUeXBvZ3JhcGh5YC5cbiAgICogVGhlIFRvb2xiYXIgaXMgYSBmbGV4IGNvbnRhaW5lciwgYWxsb3dpbmcgZmxleCBpdGVtIHByb3BlcnRpZXMgdG8gYmUgdXNlZCB0byBsYXkgb3V0IHRoZSBjaGlsZHJlbi5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgZGlzYWJsZXMgZ3V0dGVyIHBhZGRpbmcuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlR3V0dGVyczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdyZWd1bGFyJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdyZWd1bGFyJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBUb29sYmFyOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUeXBvZ3JhcGh5Jywgc2xvdCk7XG59XG5jb25zdCB0eXBvZ3JhcGh5Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVR5cG9ncmFwaHknLCBbJ3Jvb3QnLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnc3VidGl0bGUxJywgJ3N1YnRpdGxlMicsICdib2R5MScsICdib2R5MicsICdpbmhlcml0JywgJ2J1dHRvbicsICdjYXB0aW9uJywgJ292ZXJsaW5lJywgJ2FsaWduTGVmdCcsICdhbGlnblJpZ2h0JywgJ2FsaWduQ2VudGVyJywgJ2FsaWduSnVzdGlmeScsICdub1dyYXAnLCAnZ3V0dGVyQm90dG9tJywgJ3BhcmFncmFwaCddKTtcbmV4cG9ydCBkZWZhdWx0IHR5cG9ncmFwaHlDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFsaWduXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZ3V0dGVyQm90dG9tXCIsIFwibm9XcmFwXCIsIFwicGFyYWdyYXBoXCIsIFwidmFyaWFudFwiLCBcInZhcmlhbnRNYXBwaW5nXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfZXh0ZW5kU3hQcm9wIGFzIGV4dGVuZFN4UHJvcCB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB7IGdldFR5cG9ncmFwaHlVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3R5cG9ncmFwaHlDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgYWxpZ24sXG4gICAgZ3V0dGVyQm90dG9tLFxuICAgIG5vV3JhcCxcbiAgICBwYXJhZ3JhcGgsXG4gICAgdmFyaWFudCxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCB2YXJpYW50LCBvd25lclN0YXRlLmFsaWduICE9PSAnaW5oZXJpdCcgJiYgYGFsaWduJHtjYXBpdGFsaXplKGFsaWduKX1gLCBndXR0ZXJCb3R0b20gJiYgJ2d1dHRlckJvdHRvbScsIG5vV3JhcCAmJiAnbm9XcmFwJywgcGFyYWdyYXBoICYmICdwYXJhZ3JhcGgnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFR5cG9ncmFwaHlVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBUeXBvZ3JhcGh5Um9vdCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aVR5cG9ncmFwaHknLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS52YXJpYW50ICYmIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdLCBvd25lclN0YXRlLmFsaWduICE9PSAnaW5oZXJpdCcgJiYgc3R5bGVzW2BhbGlnbiR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmFsaWduKX1gXSwgb3duZXJTdGF0ZS5ub1dyYXAgJiYgc3R5bGVzLm5vV3JhcCwgb3duZXJTdGF0ZS5ndXR0ZXJCb3R0b20gJiYgc3R5bGVzLmd1dHRlckJvdHRvbSwgb3duZXJTdGF0ZS5wYXJhZ3JhcGggJiYgc3R5bGVzLnBhcmFncmFwaF07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIG1hcmdpbjogMFxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnaW5oZXJpdCcgJiYge1xuICAvLyBTb21lIGVsZW1lbnRzLCBsaWtlIDxidXR0b24+IG9uIENocm9tZSBoYXZlIGRlZmF1bHQgZm9udCB0aGF0IGRvZXNuJ3QgaW5oZXJpdCwgcmVzZXQgdGhpcy5cbiAgZm9udDogJ2luaGVyaXQnXG59LCBvd25lclN0YXRlLnZhcmlhbnQgIT09ICdpbmhlcml0JyAmJiB0aGVtZS50eXBvZ3JhcGh5W293bmVyU3RhdGUudmFyaWFudF0sIG93bmVyU3RhdGUuYWxpZ24gIT09ICdpbmhlcml0JyAmJiB7XG4gIHRleHRBbGlnbjogb3duZXJTdGF0ZS5hbGlnblxufSwgb3duZXJTdGF0ZS5ub1dyYXAgJiYge1xuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgd2hpdGVTcGFjZTogJ25vd3JhcCdcbn0sIG93bmVyU3RhdGUuZ3V0dGVyQm90dG9tICYmIHtcbiAgbWFyZ2luQm90dG9tOiAnMC4zNWVtJ1xufSwgb3duZXJTdGF0ZS5wYXJhZ3JhcGggJiYge1xuICBtYXJnaW5Cb3R0b206IDE2XG59KSk7XG5jb25zdCBkZWZhdWx0VmFyaWFudE1hcHBpbmcgPSB7XG4gIGgxOiAnaDEnLFxuICBoMjogJ2gyJyxcbiAgaDM6ICdoMycsXG4gIGg0OiAnaDQnLFxuICBoNTogJ2g1JyxcbiAgaDY6ICdoNicsXG4gIHN1YnRpdGxlMTogJ2g2JyxcbiAgc3VidGl0bGUyOiAnaDYnLFxuICBib2R5MTogJ3AnLFxuICBib2R5MjogJ3AnLFxuICBpbmhlcml0OiAncCdcbn07XG5cbi8vIFRPRE8gdjY6IGRlcHJlY2F0ZSB0aGVzZSBjb2xvciB2YWx1ZXMgaW4gdjUueCBhbmQgcmVtb3ZlIHRoZSB0cmFuc2Zvcm1hdGlvbiBpbiB2NlxuY29uc3QgY29sb3JUcmFuc2Zvcm1hdGlvbnMgPSB7XG4gIHByaW1hcnk6ICdwcmltYXJ5Lm1haW4nLFxuICB0ZXh0UHJpbWFyeTogJ3RleHQucHJpbWFyeScsXG4gIHNlY29uZGFyeTogJ3NlY29uZGFyeS5tYWluJyxcbiAgdGV4dFNlY29uZGFyeTogJ3RleHQuc2Vjb25kYXJ5JyxcbiAgZXJyb3I6ICdlcnJvci5tYWluJ1xufTtcbmNvbnN0IHRyYW5zZm9ybURlcHJlY2F0ZWRDb2xvcnMgPSBjb2xvciA9PiB7XG4gIHJldHVybiBjb2xvclRyYW5zZm9ybWF0aW9uc1tjb2xvcl0gfHwgY29sb3I7XG59O1xuY29uc3QgVHlwb2dyYXBoeSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFR5cG9ncmFwaHkoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHRoZW1lUHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVHlwb2dyYXBoeSdcbiAgfSk7XG4gIGNvbnN0IGNvbG9yID0gdHJhbnNmb3JtRGVwcmVjYXRlZENvbG9ycyh0aGVtZVByb3BzLmNvbG9yKTtcbiAgY29uc3QgcHJvcHMgPSBleHRlbmRTeFByb3AoX2V4dGVuZHMoe30sIHRoZW1lUHJvcHMsIHtcbiAgICBjb2xvclxuICB9KSk7XG4gIGNvbnN0IHtcbiAgICAgIGFsaWduID0gJ2luaGVyaXQnLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50LFxuICAgICAgZ3V0dGVyQm90dG9tID0gZmFsc2UsXG4gICAgICBub1dyYXAgPSBmYWxzZSxcbiAgICAgIHBhcmFncmFwaCA9IGZhbHNlLFxuICAgICAgdmFyaWFudCA9ICdib2R5MScsXG4gICAgICB2YXJpYW50TWFwcGluZyA9IGRlZmF1bHRWYXJpYW50TWFwcGluZ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgYWxpZ24sXG4gICAgY29sb3IsXG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbXBvbmVudCxcbiAgICBndXR0ZXJCb3R0b20sXG4gICAgbm9XcmFwLFxuICAgIHBhcmFncmFwaCxcbiAgICB2YXJpYW50LFxuICAgIHZhcmlhbnRNYXBwaW5nXG4gIH0pO1xuICBjb25zdCBDb21wb25lbnQgPSBjb21wb25lbnQgfHwgKHBhcmFncmFwaCA/ICdwJyA6IHZhcmlhbnRNYXBwaW5nW3ZhcmlhbnRdIHx8IGRlZmF1bHRWYXJpYW50TWFwcGluZ1t2YXJpYW50XSkgfHwgJ3NwYW4nO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUeXBvZ3JhcGh5Um9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBDb21wb25lbnQsXG4gICAgcmVmOiByZWYsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpXG4gIH0sIG90aGVyKSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFR5cG9ncmFwaHkucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogU2V0IHRoZSB0ZXh0LWFsaWduIG9uIHRoZSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdpbmhlcml0J1xuICAgKi9cbiAgYWxpZ246IFByb3BUeXBlcy5vbmVPZihbJ2NlbnRlcicsICdpbmhlcml0JywgJ2p1c3RpZnknLCAnbGVmdCcsICdyaWdodCddKSxcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0ZXh0IHdpbGwgaGF2ZSBhIGJvdHRvbSBtYXJnaW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBndXR0ZXJCb3R0b206IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdGV4dCB3aWxsIG5vdCB3cmFwLCBidXQgaW5zdGVhZCB3aWxsIHRydW5jYXRlIHdpdGggYSB0ZXh0IG92ZXJmbG93IGVsbGlwc2lzLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGV4dCBvdmVyZmxvdyBjYW4gb25seSBoYXBwZW4gd2l0aCBibG9jayBvciBpbmxpbmUtYmxvY2sgbGV2ZWwgZWxlbWVudHNcbiAgICogKHRoZSBlbGVtZW50IG5lZWRzIHRvIGhhdmUgYSB3aWR0aCBpbiBvcmRlciB0byBvdmVyZmxvdykuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBub1dyYXA6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgZWxlbWVudCB3aWxsIGJlIGEgcGFyYWdyYXBoIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBwYXJhZ3JhcGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogQXBwbGllcyB0aGUgdGhlbWUgdHlwb2dyYXBoeSBzdHlsZXMuXG4gICAqIEBkZWZhdWx0ICdib2R5MSdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYm9keTEnLCAnYm9keTInLCAnYnV0dG9uJywgJ2NhcHRpb24nLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnaW5oZXJpdCcsICdvdmVybGluZScsICdzdWJ0aXRsZTEnLCAnc3VidGl0bGUyJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IG1hcHMgdGhlIHZhcmlhbnQgcHJvcCB0byBhIHJhbmdlIG9mIGRpZmZlcmVudCBIVE1MIGVsZW1lbnQgdHlwZXMuXG4gICAqIEZvciBpbnN0YW5jZSwgc3VidGl0bGUxIHRvIGA8aDY+YC5cbiAgICogSWYgeW91IHdpc2ggdG8gY2hhbmdlIHRoYXQgbWFwcGluZywgeW91IGNhbiBwcm92aWRlIHlvdXIgb3duLlxuICAgKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSB0aGUgYGNvbXBvbmVudGAgcHJvcC5cbiAgICogQGRlZmF1bHQge1xuICAgKiAgIGgxOiAnaDEnLFxuICAgKiAgIGgyOiAnaDInLFxuICAgKiAgIGgzOiAnaDMnLFxuICAgKiAgIGg0OiAnaDQnLFxuICAgKiAgIGg1OiAnaDUnLFxuICAgKiAgIGg2OiAnaDYnLFxuICAgKiAgIHN1YnRpdGxlMTogJ2g2JyxcbiAgICogICBzdWJ0aXRsZTI6ICdoNicsXG4gICAqICAgYm9keTE6ICdwJyxcbiAgICogICBib2R5MjogJ3AnLFxuICAgKiAgIGluaGVyaXQ6ICdwJyxcbiAgICogfVxuICAgKi9cbiAgdmFyaWFudE1hcHBpbmc6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9iamVjdFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFR5cG9ncmFwaHk7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlU3ZnSWNvbiBmcm9tICcuLi8uLi91dGlscy9jcmVhdGVTdmdJY29uJztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU3ZnSWNvbiggLyojX19QVVJFX18qL19qc3goXCJwYXRoXCIsIHtcbiAgZDogXCJNNiAxMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTEyIDBjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0tNiAwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnpcIlxufSksICdNb3JlSG9yaXonKTsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJ0aGVtZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBUaGVtZVByb3ZpZGVyIGFzIFN5c3RlbVRoZW1lUHJvdmlkZXIgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgVEhFTUVfSUQgZnJvbSAnLi9pZGVudGlmaWVyJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUaGVtZVByb3ZpZGVyKF9yZWYpIHtcbiAgbGV0IHtcbiAgICAgIHRoZW1lOiB0aGVtZUlucHV0XG4gICAgfSA9IF9yZWYsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfcmVmLCBfZXhjbHVkZWQpO1xuICBjb25zdCBzY29wZWRUaGVtZSA9IHRoZW1lSW5wdXRbVEhFTUVfSURdO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goU3lzdGVtVGhlbWVQcm92aWRlciwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgdGhlbWVJZDogc2NvcGVkVGhlbWUgPyBUSEVNRV9JRCA6IHVuZGVmaW5lZCxcbiAgICB0aGVtZTogc2NvcGVkVGhlbWUgfHwgdGhlbWVJbnB1dFxuICB9KSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUaGVtZVByb3ZpZGVyLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFlvdXIgY29tcG9uZW50IHRyZWUuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBBIHRoZW1lIG9iamVjdC4gWW91IGNhbiBwcm92aWRlIGEgZnVuY3Rpb24gdG8gZXh0ZW5kIHRoZSBvdXRlciB0aGVtZS5cbiAgICovXG4gIHRoZW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pLmlzUmVxdWlyZWRcbn0gOiB2b2lkIDA7IiwiY29uc3QgY29tbW9uID0ge1xuICBibGFjazogJyMwMDAnLFxuICB3aGl0ZTogJyNmZmYnXG59O1xuZXhwb3J0IGRlZmF1bHQgY29tbW9uOyIsImNvbnN0IGdyZXkgPSB7XG4gIDUwOiAnI2ZhZmFmYScsXG4gIDEwMDogJyNmNWY1ZjUnLFxuICAyMDA6ICcjZWVlZWVlJyxcbiAgMzAwOiAnI2UwZTBlMCcsXG4gIDQwMDogJyNiZGJkYmQnLFxuICA1MDA6ICcjOWU5ZTllJyxcbiAgNjAwOiAnIzc1NzU3NScsXG4gIDcwMDogJyM2MTYxNjEnLFxuICA4MDA6ICcjNDI0MjQyJyxcbiAgOTAwOiAnIzIxMjEyMScsXG4gIEExMDA6ICcjZjVmNWY1JyxcbiAgQTIwMDogJyNlZWVlZWUnLFxuICBBNDAwOiAnI2JkYmRiZCcsXG4gIEE3MDA6ICcjNjE2MTYxJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGdyZXk7IiwiY29uc3QgcHVycGxlID0ge1xuICA1MDogJyNmM2U1ZjUnLFxuICAxMDA6ICcjZTFiZWU3JyxcbiAgMjAwOiAnI2NlOTNkOCcsXG4gIDMwMDogJyNiYTY4YzgnLFxuICA0MDA6ICcjYWI0N2JjJyxcbiAgNTAwOiAnIzljMjdiMCcsXG4gIDYwMDogJyM4ZTI0YWEnLFxuICA3MDA6ICcjN2IxZmEyJyxcbiAgODAwOiAnIzZhMWI5YScsXG4gIDkwMDogJyM0YTE0OGMnLFxuICBBMTAwOiAnI2VhODBmYycsXG4gIEEyMDA6ICcjZTA0MGZiJyxcbiAgQTQwMDogJyNkNTAwZjknLFxuICBBNzAwOiAnI2FhMDBmZidcbn07XG5leHBvcnQgZGVmYXVsdCBwdXJwbGU7IiwiY29uc3QgcmVkID0ge1xuICA1MDogJyNmZmViZWUnLFxuICAxMDA6ICcjZmZjZGQyJyxcbiAgMjAwOiAnI2VmOWE5YScsXG4gIDMwMDogJyNlNTczNzMnLFxuICA0MDA6ICcjZWY1MzUwJyxcbiAgNTAwOiAnI2Y0NDMzNicsXG4gIDYwMDogJyNlNTM5MzUnLFxuICA3MDA6ICcjZDMyZjJmJyxcbiAgODAwOiAnI2M2MjgyOCcsXG4gIDkwMDogJyNiNzFjMWMnLFxuICBBMTAwOiAnI2ZmOGE4MCcsXG4gIEEyMDA6ICcjZmY1MjUyJyxcbiAgQTQwMDogJyNmZjE3NDQnLFxuICBBNzAwOiAnI2Q1MDAwMCdcbn07XG5leHBvcnQgZGVmYXVsdCByZWQ7IiwiY29uc3Qgb3JhbmdlID0ge1xuICA1MDogJyNmZmYzZTAnLFxuICAxMDA6ICcjZmZlMGIyJyxcbiAgMjAwOiAnI2ZmY2M4MCcsXG4gIDMwMDogJyNmZmI3NGQnLFxuICA0MDA6ICcjZmZhNzI2JyxcbiAgNTAwOiAnI2ZmOTgwMCcsXG4gIDYwMDogJyNmYjhjMDAnLFxuICA3MDA6ICcjZjU3YzAwJyxcbiAgODAwOiAnI2VmNmMwMCcsXG4gIDkwMDogJyNlNjUxMDAnLFxuICBBMTAwOiAnI2ZmZDE4MCcsXG4gIEEyMDA6ICcjZmZhYjQwJyxcbiAgQTQwMDogJyNmZjkxMDAnLFxuICBBNzAwOiAnI2ZmNmQwMCdcbn07XG5leHBvcnQgZGVmYXVsdCBvcmFuZ2U7IiwiY29uc3QgYmx1ZSA9IHtcbiAgNTA6ICcjZTNmMmZkJyxcbiAgMTAwOiAnI2JiZGVmYicsXG4gIDIwMDogJyM5MGNhZjknLFxuICAzMDA6ICcjNjRiNWY2JyxcbiAgNDAwOiAnIzQyYTVmNScsXG4gIDUwMDogJyMyMTk2ZjMnLFxuICA2MDA6ICcjMWU4OGU1JyxcbiAgNzAwOiAnIzE5NzZkMicsXG4gIDgwMDogJyMxNTY1YzAnLFxuICA5MDA6ICcjMGQ0N2ExJyxcbiAgQTEwMDogJyM4MmIxZmYnLFxuICBBMjAwOiAnIzQ0OGFmZicsXG4gIEE0MDA6ICcjMjk3OWZmJyxcbiAgQTcwMDogJyMyOTYyZmYnXG59O1xuZXhwb3J0IGRlZmF1bHQgYmx1ZTsiLCJjb25zdCBsaWdodEJsdWUgPSB7XG4gIDUwOiAnI2UxZjVmZScsXG4gIDEwMDogJyNiM2U1ZmMnLFxuICAyMDA6ICcjODFkNGZhJyxcbiAgMzAwOiAnIzRmYzNmNycsXG4gIDQwMDogJyMyOWI2ZjYnLFxuICA1MDA6ICcjMDNhOWY0JyxcbiAgNjAwOiAnIzAzOWJlNScsXG4gIDcwMDogJyMwMjg4ZDEnLFxuICA4MDA6ICcjMDI3N2JkJyxcbiAgOTAwOiAnIzAxNTc5YicsXG4gIEExMDA6ICcjODBkOGZmJyxcbiAgQTIwMDogJyM0MGM0ZmYnLFxuICBBNDAwOiAnIzAwYjBmZicsXG4gIEE3MDA6ICcjMDA5MWVhJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGxpZ2h0Qmx1ZTsiLCJjb25zdCBncmVlbiA9IHtcbiAgNTA6ICcjZThmNWU5JyxcbiAgMTAwOiAnI2M4ZTZjOScsXG4gIDIwMDogJyNhNWQ2YTcnLFxuICAzMDA6ICcjODFjNzg0JyxcbiAgNDAwOiAnIzY2YmI2YScsXG4gIDUwMDogJyM0Y2FmNTAnLFxuICA2MDA6ICcjNDNhMDQ3JyxcbiAgNzAwOiAnIzM4OGUzYycsXG4gIDgwMDogJyMyZTdkMzInLFxuICA5MDA6ICcjMWI1ZTIwJyxcbiAgQTEwMDogJyNiOWY2Y2EnLFxuICBBMjAwOiAnIzY5ZjBhZScsXG4gIEE0MDA6ICcjMDBlNjc2JyxcbiAgQTcwMDogJyMwMGM4NTMnXG59O1xuZXhwb3J0IGRlZmF1bHQgZ3JlZW47IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCB7IGZvcm1hdE11aUVycm9yTWVzc2FnZSBhcyBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIH0gZnJvbSBcIkBtdWkvdXRpbHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm1vZGVcIiwgXCJjb250cmFzdFRocmVzaG9sZFwiLCBcInRvbmFsT2Zmc2V0XCJdO1xuaW1wb3J0IHsgZGVlcG1lcmdlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyBkYXJrZW4sIGdldENvbnRyYXN0UmF0aW8sIGxpZ2h0ZW4gfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgY29tbW9uIGZyb20gJy4uL2NvbG9ycy9jb21tb24nO1xuaW1wb3J0IGdyZXkgZnJvbSAnLi4vY29sb3JzL2dyZXknO1xuaW1wb3J0IHB1cnBsZSBmcm9tICcuLi9jb2xvcnMvcHVycGxlJztcbmltcG9ydCByZWQgZnJvbSAnLi4vY29sb3JzL3JlZCc7XG5pbXBvcnQgb3JhbmdlIGZyb20gJy4uL2NvbG9ycy9vcmFuZ2UnO1xuaW1wb3J0IGJsdWUgZnJvbSAnLi4vY29sb3JzL2JsdWUnO1xuaW1wb3J0IGxpZ2h0Qmx1ZSBmcm9tICcuLi9jb2xvcnMvbGlnaHRCbHVlJztcbmltcG9ydCBncmVlbiBmcm9tICcuLi9jb2xvcnMvZ3JlZW4nO1xuZXhwb3J0IGNvbnN0IGxpZ2h0ID0ge1xuICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gc3R5bGUgdGhlIHRleHQuXG4gIHRleHQ6IHtcbiAgICAvLyBUaGUgbW9zdCBpbXBvcnRhbnQgdGV4dC5cbiAgICBwcmltYXJ5OiAncmdiYSgwLCAwLCAwLCAwLjg3KScsXG4gICAgLy8gU2Vjb25kYXJ5IHRleHQuXG4gICAgc2Vjb25kYXJ5OiAncmdiYSgwLCAwLCAwLCAwLjYpJyxcbiAgICAvLyBEaXNhYmxlZCB0ZXh0IGhhdmUgZXZlbiBsb3dlciB2aXN1YWwgcHJvbWluZW5jZS5cbiAgICBkaXNhYmxlZDogJ3JnYmEoMCwgMCwgMCwgMC4zOCknXG4gIH0sXG4gIC8vIFRoZSBjb2xvciB1c2VkIHRvIGRpdmlkZSBkaWZmZXJlbnQgZWxlbWVudHMuXG4gIGRpdmlkZXI6ICdyZ2JhKDAsIDAsIDAsIDAuMTIpJyxcbiAgLy8gVGhlIGJhY2tncm91bmQgY29sb3JzIHVzZWQgdG8gc3R5bGUgdGhlIHN1cmZhY2VzLlxuICAvLyBDb25zaXN0ZW5jeSBiZXR3ZWVuIHRoZXNlIHZhbHVlcyBpcyBpbXBvcnRhbnQuXG4gIGJhY2tncm91bmQ6IHtcbiAgICBwYXBlcjogY29tbW9uLndoaXRlLFxuICAgIGRlZmF1bHQ6IGNvbW1vbi53aGl0ZVxuICB9LFxuICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gc3R5bGUgdGhlIGFjdGlvbiBlbGVtZW50cy5cbiAgYWN0aW9uOiB7XG4gICAgLy8gVGhlIGNvbG9yIG9mIGFuIGFjdGl2ZSBhY3Rpb24gbGlrZSBhbiBpY29uIGJ1dHRvbi5cbiAgICBhY3RpdmU6ICdyZ2JhKDAsIDAsIDAsIDAuNTQpJyxcbiAgICAvLyBUaGUgY29sb3Igb2YgYW4gaG92ZXJlZCBhY3Rpb24uXG4gICAgaG92ZXI6ICdyZ2JhKDAsIDAsIDAsIDAuMDQpJyxcbiAgICBob3Zlck9wYWNpdHk6IDAuMDQsXG4gICAgLy8gVGhlIGNvbG9yIG9mIGEgc2VsZWN0ZWQgYWN0aW9uLlxuICAgIHNlbGVjdGVkOiAncmdiYSgwLCAwLCAwLCAwLjA4KScsXG4gICAgc2VsZWN0ZWRPcGFjaXR5OiAwLjA4LFxuICAgIC8vIFRoZSBjb2xvciBvZiBhIGRpc2FibGVkIGFjdGlvbi5cbiAgICBkaXNhYmxlZDogJ3JnYmEoMCwgMCwgMCwgMC4yNiknLFxuICAgIC8vIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIGEgZGlzYWJsZWQgYWN0aW9uLlxuICAgIGRpc2FibGVkQmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC4xMiknLFxuICAgIGRpc2FibGVkT3BhY2l0eTogMC4zOCxcbiAgICBmb2N1czogJ3JnYmEoMCwgMCwgMCwgMC4xMiknLFxuICAgIGZvY3VzT3BhY2l0eTogMC4xMixcbiAgICBhY3RpdmF0ZWRPcGFjaXR5OiAwLjEyXG4gIH1cbn07XG5leHBvcnQgY29uc3QgZGFyayA9IHtcbiAgdGV4dDoge1xuICAgIHByaW1hcnk6IGNvbW1vbi53aGl0ZSxcbiAgICBzZWNvbmRhcnk6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknLFxuICAgIGRpc2FibGVkOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpJyxcbiAgICBpY29uOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpJ1xuICB9LFxuICBkaXZpZGVyOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKScsXG4gIGJhY2tncm91bmQ6IHtcbiAgICBwYXBlcjogJyMxMjEyMTInLFxuICAgIGRlZmF1bHQ6ICcjMTIxMjEyJ1xuICB9LFxuICBhY3Rpb246IHtcbiAgICBhY3RpdmU6IGNvbW1vbi53aGl0ZSxcbiAgICBob3ZlcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCknLFxuICAgIGhvdmVyT3BhY2l0eTogMC4wOCxcbiAgICBzZWxlY3RlZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNiknLFxuICAgIHNlbGVjdGVkT3BhY2l0eTogMC4xNixcbiAgICBkaXNhYmxlZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKScsXG4gICAgZGlzYWJsZWRCYWNrZ3JvdW5kOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKScsXG4gICAgZGlzYWJsZWRPcGFjaXR5OiAwLjM4LFxuICAgIGZvY3VzOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKScsXG4gICAgZm9jdXNPcGFjaXR5OiAwLjEyLFxuICAgIGFjdGl2YXRlZE9wYWNpdHk6IDAuMjRcbiAgfVxufTtcbmZ1bmN0aW9uIGFkZExpZ2h0T3JEYXJrKGludGVudCwgZGlyZWN0aW9uLCBzaGFkZSwgdG9uYWxPZmZzZXQpIHtcbiAgY29uc3QgdG9uYWxPZmZzZXRMaWdodCA9IHRvbmFsT2Zmc2V0LmxpZ2h0IHx8IHRvbmFsT2Zmc2V0O1xuICBjb25zdCB0b25hbE9mZnNldERhcmsgPSB0b25hbE9mZnNldC5kYXJrIHx8IHRvbmFsT2Zmc2V0ICogMS41O1xuICBpZiAoIWludGVudFtkaXJlY3Rpb25dKSB7XG4gICAgaWYgKGludGVudC5oYXNPd25Qcm9wZXJ0eShzaGFkZSkpIHtcbiAgICAgIGludGVudFtkaXJlY3Rpb25dID0gaW50ZW50W3NoYWRlXTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2xpZ2h0Jykge1xuICAgICAgaW50ZW50LmxpZ2h0ID0gbGlnaHRlbihpbnRlbnQubWFpbiwgdG9uYWxPZmZzZXRMaWdodCk7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdkYXJrJykge1xuICAgICAgaW50ZW50LmRhcmsgPSBkYXJrZW4oaW50ZW50Lm1haW4sIHRvbmFsT2Zmc2V0RGFyayk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0UHJpbWFyeShtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IGJsdWVbMjAwXSxcbiAgICAgIGxpZ2h0OiBibHVlWzUwXSxcbiAgICAgIGRhcms6IGJsdWVbNDAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBibHVlWzcwMF0sXG4gICAgbGlnaHQ6IGJsdWVbNDAwXSxcbiAgICBkYXJrOiBibHVlWzgwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRTZWNvbmRhcnkobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBwdXJwbGVbMjAwXSxcbiAgICAgIGxpZ2h0OiBwdXJwbGVbNTBdLFxuICAgICAgZGFyazogcHVycGxlWzQwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogcHVycGxlWzUwMF0sXG4gICAgbGlnaHQ6IHB1cnBsZVszMDBdLFxuICAgIGRhcms6IHB1cnBsZVs3MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0RXJyb3IobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiByZWRbNTAwXSxcbiAgICAgIGxpZ2h0OiByZWRbMzAwXSxcbiAgICAgIGRhcms6IHJlZFs3MDBdXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1haW46IHJlZFs3MDBdLFxuICAgIGxpZ2h0OiByZWRbNDAwXSxcbiAgICBkYXJrOiByZWRbODAwXVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdEluZm8obW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBsaWdodEJsdWVbNDAwXSxcbiAgICAgIGxpZ2h0OiBsaWdodEJsdWVbMzAwXSxcbiAgICAgIGRhcms6IGxpZ2h0Qmx1ZVs3MDBdXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1haW46IGxpZ2h0Qmx1ZVs3MDBdLFxuICAgIGxpZ2h0OiBsaWdodEJsdWVbNTAwXSxcbiAgICBkYXJrOiBsaWdodEJsdWVbOTAwXVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFN1Y2Nlc3MobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBncmVlbls0MDBdLFxuICAgICAgbGlnaHQ6IGdyZWVuWzMwMF0sXG4gICAgICBkYXJrOiBncmVlbls3MDBdXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1haW46IGdyZWVuWzgwMF0sXG4gICAgbGlnaHQ6IGdyZWVuWzUwMF0sXG4gICAgZGFyazogZ3JlZW5bOTAwXVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFdhcm5pbmcobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBvcmFuZ2VbNDAwXSxcbiAgICAgIGxpZ2h0OiBvcmFuZ2VbMzAwXSxcbiAgICAgIGRhcms6IG9yYW5nZVs3MDBdXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1haW46ICcjZWQ2YzAyJyxcbiAgICAvLyBjbG9zZXN0IHRvIG9yYW5nZVs4MDBdIHRoYXQgcGFzcyAzOjEuXG4gICAgbGlnaHQ6IG9yYW5nZVs1MDBdLFxuICAgIGRhcms6IG9yYW5nZVs5MDBdXG4gIH07XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVQYWxldHRlKHBhbGV0dGUpIHtcbiAgY29uc3Qge1xuICAgICAgbW9kZSA9ICdsaWdodCcsXG4gICAgICBjb250cmFzdFRocmVzaG9sZCA9IDMsXG4gICAgICB0b25hbE9mZnNldCA9IDAuMlxuICAgIH0gPSBwYWxldHRlLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocGFsZXR0ZSwgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgcHJpbWFyeSA9IHBhbGV0dGUucHJpbWFyeSB8fCBnZXREZWZhdWx0UHJpbWFyeShtb2RlKTtcbiAgY29uc3Qgc2Vjb25kYXJ5ID0gcGFsZXR0ZS5zZWNvbmRhcnkgfHwgZ2V0RGVmYXVsdFNlY29uZGFyeShtb2RlKTtcbiAgY29uc3QgZXJyb3IgPSBwYWxldHRlLmVycm9yIHx8IGdldERlZmF1bHRFcnJvcihtb2RlKTtcbiAgY29uc3QgaW5mbyA9IHBhbGV0dGUuaW5mbyB8fCBnZXREZWZhdWx0SW5mbyhtb2RlKTtcbiAgY29uc3Qgc3VjY2VzcyA9IHBhbGV0dGUuc3VjY2VzcyB8fCBnZXREZWZhdWx0U3VjY2Vzcyhtb2RlKTtcbiAgY29uc3Qgd2FybmluZyA9IHBhbGV0dGUud2FybmluZyB8fCBnZXREZWZhdWx0V2FybmluZyhtb2RlKTtcblxuICAvLyBVc2UgdGhlIHNhbWUgbG9naWMgYXNcbiAgLy8gQm9vdHN0cmFwOiBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi8xZDZlMzcxMGRkNDQ3ZGUxYTIwMGYyOWU4ZmE1MjFmOGEwOTA4ZjcwL3Njc3MvX2Z1bmN0aW9ucy5zY3NzI0w1OVxuICAvLyBhbmQgbWF0ZXJpYWwtY29tcG9uZW50cy13ZWIgaHR0cHM6Ly9naXRodWIuY29tL21hdGVyaWFsLWNvbXBvbmVudHMvbWF0ZXJpYWwtY29tcG9uZW50cy13ZWIvYmxvYi9hYzQ2Yjg4NjNjNGRhYjlmYzIyYzRjNjYyZGM2YmQxYjY1ZGQ2NTJmL3BhY2thZ2VzL21kYy10aGVtZS9fZnVuY3Rpb25zLnNjc3MjTDU0XG4gIGZ1bmN0aW9uIGdldENvbnRyYXN0VGV4dChiYWNrZ3JvdW5kKSB7XG4gICAgY29uc3QgY29udHJhc3RUZXh0ID0gZ2V0Q29udHJhc3RSYXRpbyhiYWNrZ3JvdW5kLCBkYXJrLnRleHQucHJpbWFyeSkgPj0gY29udHJhc3RUaHJlc2hvbGQgPyBkYXJrLnRleHQucHJpbWFyeSA6IGxpZ2h0LnRleHQucHJpbWFyeTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc3QgY29udHJhc3QgPSBnZXRDb250cmFzdFJhdGlvKGJhY2tncm91bmQsIGNvbnRyYXN0VGV4dCk7XG4gICAgICBpZiAoY29udHJhc3QgPCAzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSBjb250cmFzdCByYXRpbyBvZiAke2NvbnRyYXN0fToxIGZvciAke2NvbnRyYXN0VGV4dH0gb24gJHtiYWNrZ3JvdW5kfWAsICdmYWxscyBiZWxvdyB0aGUgV0NBRyByZWNvbW1lbmRlZCBhYnNvbHV0ZSBtaW5pbXVtIGNvbnRyYXN0IHJhdGlvIG9mIDM6MS4nLCAnaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jdmlzdWFsLWF1ZGlvLWNvbnRyYXN0LWNvbnRyYXN0J10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29udHJhc3RUZXh0O1xuICB9XG4gIGNvbnN0IGF1Z21lbnRDb2xvciA9ICh7XG4gICAgY29sb3IsXG4gICAgbmFtZSxcbiAgICBtYWluU2hhZGUgPSA1MDAsXG4gICAgbGlnaHRTaGFkZSA9IDMwMCxcbiAgICBkYXJrU2hhZGUgPSA3MDBcbiAgfSkgPT4ge1xuICAgIGNvbG9yID0gX2V4dGVuZHMoe30sIGNvbG9yKTtcbiAgICBpZiAoIWNvbG9yLm1haW4gJiYgY29sb3JbbWFpblNoYWRlXSkge1xuICAgICAgY29sb3IubWFpbiA9IGNvbG9yW21haW5TaGFkZV07XG4gICAgfVxuICAgIGlmICghY29sb3IuaGFzT3duUHJvcGVydHkoJ21haW4nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFRoZSBjb2xvciR7bmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnfSBwcm92aWRlZCB0byBhdWdtZW50Q29sb3IoY29sb3IpIGlzIGludmFsaWQuXG5UaGUgY29sb3Igb2JqZWN0IG5lZWRzIHRvIGhhdmUgYSBcXGBtYWluXFxgIHByb3BlcnR5IG9yIGEgXFxgJHttYWluU2hhZGV9XFxgIHByb3BlcnR5LmAgOiBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlKDExLCBuYW1lID8gYCAoJHtuYW1lfSlgIDogJycsIG1haW5TaGFkZSkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbG9yLm1haW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogVGhlIGNvbG9yJHtuYW1lID8gYCAoJHtuYW1lfSlgIDogJyd9IHByb3ZpZGVkIHRvIGF1Z21lbnRDb2xvcihjb2xvcikgaXMgaW52YWxpZC5cblxcYGNvbG9yLm1haW5cXGAgc2hvdWxkIGJlIGEgc3RyaW5nLCBidXQgXFxgJHtKU09OLnN0cmluZ2lmeShjb2xvci5tYWluKX1cXGAgd2FzIHByb3ZpZGVkIGluc3RlYWQuXG5cbkRpZCB5b3UgaW50ZW5kIHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBhcHByb2FjaGVzP1xuXG5pbXBvcnQgeyBncmVlbiB9IGZyb20gXCJAbXVpL21hdGVyaWFsL2NvbG9yc1wiO1xuXG5jb25zdCB0aGVtZTEgPSBjcmVhdGVUaGVtZSh7IHBhbGV0dGU6IHtcbiAgcHJpbWFyeTogZ3JlZW4sXG59IH0pO1xuXG5jb25zdCB0aGVtZTIgPSBjcmVhdGVUaGVtZSh7IHBhbGV0dGU6IHtcbiAgcHJpbWFyeTogeyBtYWluOiBncmVlbls1MDBdIH0sXG59IH0pO2AgOiBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlKDEyLCBuYW1lID8gYCAoJHtuYW1lfSlgIDogJycsIEpTT04uc3RyaW5naWZ5KGNvbG9yLm1haW4pKSk7XG4gICAgfVxuICAgIGFkZExpZ2h0T3JEYXJrKGNvbG9yLCAnbGlnaHQnLCBsaWdodFNoYWRlLCB0b25hbE9mZnNldCk7XG4gICAgYWRkTGlnaHRPckRhcmsoY29sb3IsICdkYXJrJywgZGFya1NoYWRlLCB0b25hbE9mZnNldCk7XG4gICAgaWYgKCFjb2xvci5jb250cmFzdFRleHQpIHtcbiAgICAgIGNvbG9yLmNvbnRyYXN0VGV4dCA9IGdldENvbnRyYXN0VGV4dChjb2xvci5tYWluKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9O1xuICBjb25zdCBtb2RlcyA9IHtcbiAgICBkYXJrLFxuICAgIGxpZ2h0XG4gIH07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKCFtb2Rlc1ttb2RlXSkge1xuICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBUaGUgcGFsZXR0ZSBtb2RlIFxcYCR7bW9kZX1cXGAgaXMgbm90IHN1cHBvcnRlZC5gKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcGFsZXR0ZU91dHB1dCA9IGRlZXBtZXJnZShfZXh0ZW5kcyh7XG4gICAgLy8gQSBjb2xsZWN0aW9uIG9mIGNvbW1vbiBjb2xvcnMuXG4gICAgY29tbW9uOiBfZXh0ZW5kcyh7fSwgY29tbW9uKSxcbiAgICAvLyBwcmV2ZW50IG11dGFibGUgb2JqZWN0LlxuICAgIC8vIFRoZSBwYWxldHRlIG1vZGUsIGNhbiBiZSBsaWdodCBvciBkYXJrLlxuICAgIG1vZGUsXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBwcmltYXJ5IGludGVyZmFjZSBlbGVtZW50cyBmb3IgYSB1c2VyLlxuICAgIHByaW1hcnk6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogcHJpbWFyeSxcbiAgICAgIG5hbWU6ICdwcmltYXJ5J1xuICAgIH0pLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byByZXByZXNlbnQgc2Vjb25kYXJ5IGludGVyZmFjZSBlbGVtZW50cyBmb3IgYSB1c2VyLlxuICAgIHNlY29uZGFyeTogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBzZWNvbmRhcnksXG4gICAgICBuYW1lOiAnc2Vjb25kYXJ5JyxcbiAgICAgIG1haW5TaGFkZTogJ0E0MDAnLFxuICAgICAgbGlnaHRTaGFkZTogJ0EyMDAnLFxuICAgICAgZGFya1NoYWRlOiAnQTcwMCdcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IGludGVyZmFjZSBlbGVtZW50cyB0aGF0IHRoZSB1c2VyIHNob3VsZCBiZSBtYWRlIGF3YXJlIG9mLlxuICAgIGVycm9yOiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IGVycm9yLFxuICAgICAgbmFtZTogJ2Vycm9yJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byByZXByZXNlbnQgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGFjdGlvbnMgb3IgaW1wb3J0YW50IG1lc3NhZ2VzLlxuICAgIHdhcm5pbmc6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogd2FybmluZyxcbiAgICAgIG5hbWU6ICd3YXJuaW5nJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byBwcmVzZW50IGluZm9ybWF0aW9uIHRvIHRoZSB1c2VyIHRoYXQgaXMgbmV1dHJhbCBhbmQgbm90IG5lY2Vzc2FyaWx5IGltcG9ydGFudC5cbiAgICBpbmZvOiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IGluZm8sXG4gICAgICBuYW1lOiAnaW5mbydcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiBhbiBhY3Rpb24gdGhhdCB1c2VyIHRyaWdnZXJlZC5cbiAgICBzdWNjZXNzOiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHN1Y2Nlc3MsXG4gICAgICBuYW1lOiAnc3VjY2VzcydcbiAgICB9KSxcbiAgICAvLyBUaGUgZ3JleSBjb2xvcnMuXG4gICAgZ3JleSxcbiAgICAvLyBVc2VkIGJ5IGBnZXRDb250cmFzdFRleHQoKWAgdG8gbWF4aW1pemUgdGhlIGNvbnRyYXN0IGJldHdlZW5cbiAgICAvLyB0aGUgYmFja2dyb3VuZCBhbmQgdGhlIHRleHQuXG4gICAgY29udHJhc3RUaHJlc2hvbGQsXG4gICAgLy8gVGFrZXMgYSBiYWNrZ3JvdW5kIGNvbG9yIGFuZCByZXR1cm5zIHRoZSB0ZXh0IGNvbG9yIHRoYXQgbWF4aW1pemVzIHRoZSBjb250cmFzdC5cbiAgICBnZXRDb250cmFzdFRleHQsXG4gICAgLy8gR2VuZXJhdGUgYSByaWNoIGNvbG9yIG9iamVjdC5cbiAgICBhdWdtZW50Q29sb3IsXG4gICAgLy8gVXNlZCBieSB0aGUgZnVuY3Rpb25zIGJlbG93IHRvIHNoaWZ0IGEgY29sb3IncyBsdW1pbmFuY2UgYnkgYXBwcm94aW1hdGVseVxuICAgIC8vIHR3byBpbmRleGVzIHdpdGhpbiBpdHMgdG9uYWwgcGFsZXR0ZS5cbiAgICAvLyBFLmcuLCBzaGlmdCBmcm9tIFJlZCA1MDAgdG8gUmVkIDMwMCBvciBSZWQgNzAwLlxuICAgIHRvbmFsT2Zmc2V0XG4gIH0sIG1vZGVzW21vZGVdKSwgb3RoZXIpO1xuICByZXR1cm4gcGFsZXR0ZU91dHB1dDtcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiZm9udEZhbWlseVwiLCBcImZvbnRTaXplXCIsIFwiZm9udFdlaWdodExpZ2h0XCIsIFwiZm9udFdlaWdodFJlZ3VsYXJcIiwgXCJmb250V2VpZ2h0TWVkaXVtXCIsIFwiZm9udFdlaWdodEJvbGRcIiwgXCJodG1sRm9udFNpemVcIiwgXCJhbGxWYXJpYW50c1wiLCBcInB4VG9SZW1cIl07XG5pbXBvcnQgeyBkZWVwbWVyZ2UgfSBmcm9tICdAbXVpL3V0aWxzJztcbmZ1bmN0aW9uIHJvdW5kKHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogMWU1KSAvIDFlNTtcbn1cbmNvbnN0IGNhc2VBbGxDYXBzID0ge1xuICB0ZXh0VHJhbnNmb3JtOiAndXBwZXJjYXNlJ1xufTtcbmNvbnN0IGRlZmF1bHRGb250RmFtaWx5ID0gJ1wiUm9ib3RvXCIsIFwiSGVsdmV0aWNhXCIsIFwiQXJpYWxcIiwgc2Fucy1zZXJpZic7XG5cbi8qKlxuICogQHNlZSBAbGlua3todHRwczovL20yLm1hdGVyaWFsLmlvL2Rlc2lnbi90eXBvZ3JhcGh5L3RoZS10eXBlLXN5c3RlbS5odG1sfVxuICogQHNlZSBAbGlua3todHRwczovL20yLm1hdGVyaWFsLmlvL2Rlc2lnbi90eXBvZ3JhcGh5L3VuZGVyc3RhbmRpbmctdHlwb2dyYXBoeS5odG1sfVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVUeXBvZ3JhcGh5KHBhbGV0dGUsIHR5cG9ncmFwaHkpIHtcbiAgY29uc3QgX3JlZiA9IHR5cGVvZiB0eXBvZ3JhcGh5ID09PSAnZnVuY3Rpb24nID8gdHlwb2dyYXBoeShwYWxldHRlKSA6IHR5cG9ncmFwaHksXG4gICAge1xuICAgICAgZm9udEZhbWlseSA9IGRlZmF1bHRGb250RmFtaWx5LFxuICAgICAgLy8gVGhlIGRlZmF1bHQgZm9udCBzaXplIG9mIHRoZSBNYXRlcmlhbCBTcGVjaWZpY2F0aW9uLlxuICAgICAgZm9udFNpemUgPSAxNCxcbiAgICAgIC8vIHB4XG4gICAgICBmb250V2VpZ2h0TGlnaHQgPSAzMDAsXG4gICAgICBmb250V2VpZ2h0UmVndWxhciA9IDQwMCxcbiAgICAgIGZvbnRXZWlnaHRNZWRpdW0gPSA1MDAsXG4gICAgICBmb250V2VpZ2h0Qm9sZCA9IDcwMCxcbiAgICAgIC8vIFRlbGwgTVVJIHdoYXQncyB0aGUgZm9udC1zaXplIG9uIHRoZSBodG1sIGVsZW1lbnQuXG4gICAgICAvLyAxNnB4IGlzIHRoZSBkZWZhdWx0IGZvbnQtc2l6ZSB1c2VkIGJ5IGJyb3dzZXJzLlxuICAgICAgaHRtbEZvbnRTaXplID0gMTYsXG4gICAgICAvLyBBcHBseSB0aGUgQ1NTIHByb3BlcnRpZXMgdG8gYWxsIHRoZSB2YXJpYW50cy5cbiAgICAgIGFsbFZhcmlhbnRzLFxuICAgICAgcHhUb1JlbTogcHhUb1JlbTJcbiAgICB9ID0gX3JlZixcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYsIF9leGNsdWRlZCk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHR5cGVvZiBmb250U2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogYGZvbnRTaXplYCBpcyByZXF1aXJlZCB0byBiZSBhIG51bWJlci4nKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBodG1sRm9udFNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdNVUk6IGBodG1sRm9udFNpemVgIGlzIHJlcXVpcmVkIHRvIGJlIGEgbnVtYmVyLicpO1xuICAgIH1cbiAgfVxuICBjb25zdCBjb2VmID0gZm9udFNpemUgLyAxNDtcbiAgY29uc3QgcHhUb1JlbSA9IHB4VG9SZW0yIHx8IChzaXplID0+IGAke3NpemUgLyBodG1sRm9udFNpemUgKiBjb2VmfXJlbWApO1xuICBjb25zdCBidWlsZFZhcmlhbnQgPSAoZm9udFdlaWdodCwgc2l6ZSwgbGluZUhlaWdodCwgbGV0dGVyU3BhY2luZywgY2FzaW5nKSA9PiBfZXh0ZW5kcyh7XG4gICAgZm9udEZhbWlseSxcbiAgICBmb250V2VpZ2h0LFxuICAgIGZvbnRTaXplOiBweFRvUmVtKHNpemUpLFxuICAgIC8vIFVuaXRsZXNzIGZvbGxvd2luZyBodHRwczovL21leWVyd2ViLmNvbS9lcmljL3Rob3VnaHRzLzIwMDYvMDIvMDgvdW5pdGxlc3MtbGluZS1oZWlnaHRzL1xuICAgIGxpbmVIZWlnaHRcbiAgfSwgZm9udEZhbWlseSA9PT0gZGVmYXVsdEZvbnRGYW1pbHkgPyB7XG4gICAgbGV0dGVyU3BhY2luZzogYCR7cm91bmQobGV0dGVyU3BhY2luZyAvIHNpemUpfWVtYFxuICB9IDoge30sIGNhc2luZywgYWxsVmFyaWFudHMpO1xuICBjb25zdCB2YXJpYW50cyA9IHtcbiAgICBoMTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRMaWdodCwgOTYsIDEuMTY3LCAtMS41KSxcbiAgICBoMjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRMaWdodCwgNjAsIDEuMiwgLTAuNSksXG4gICAgaDM6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgNDgsIDEuMTY3LCAwKSxcbiAgICBoNDogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAzNCwgMS4yMzUsIDAuMjUpLFxuICAgIGg1OiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDI0LCAxLjMzNCwgMCksXG4gICAgaDY6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0TWVkaXVtLCAyMCwgMS42LCAwLjE1KSxcbiAgICBzdWJ0aXRsZTE6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTYsIDEuNzUsIDAuMTUpLFxuICAgIHN1YnRpdGxlMjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRNZWRpdW0sIDE0LCAxLjU3LCAwLjEpLFxuICAgIGJvZHkxOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDE2LCAxLjUsIDAuMTUpLFxuICAgIGJvZHkyOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDE0LCAxLjQzLCAwLjE1KSxcbiAgICBidXR0b246IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0TWVkaXVtLCAxNCwgMS43NSwgMC40LCBjYXNlQWxsQ2FwcyksXG4gICAgY2FwdGlvbjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxMiwgMS42NiwgMC40KSxcbiAgICBvdmVybGluZTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxMiwgMi42NiwgMSwgY2FzZUFsbENhcHMpLFxuICAgIC8vIFRPRE8gdjY6IFJlbW92ZSBoYW5kbGluZyBvZiAnaW5oZXJpdCcgdmFyaWFudCBmcm9tIHRoZSB0aGVtZSBhcyBpdCBpcyBhbHJlYWR5IGhhbmRsZWQgaW4gTWF0ZXJpYWwgVUkncyBUeXBvZ3JhcGh5IGNvbXBvbmVudC4gQWxzbywgcmVtZW1iZXIgdG8gcmVtb3ZlIHRoZSBhc3NvY2lhdGVkIHR5cGVzLlxuICAgIGluaGVyaXQ6IHtcbiAgICAgIGZvbnRGYW1pbHk6ICdpbmhlcml0JyxcbiAgICAgIGZvbnRXZWlnaHQ6ICdpbmhlcml0JyxcbiAgICAgIGZvbnRTaXplOiAnaW5oZXJpdCcsXG4gICAgICBsaW5lSGVpZ2h0OiAnaW5oZXJpdCcsXG4gICAgICBsZXR0ZXJTcGFjaW5nOiAnaW5oZXJpdCdcbiAgICB9XG4gIH07XG4gIHJldHVybiBkZWVwbWVyZ2UoX2V4dGVuZHMoe1xuICAgIGh0bWxGb250U2l6ZSxcbiAgICBweFRvUmVtLFxuICAgIGZvbnRGYW1pbHksXG4gICAgZm9udFNpemUsXG4gICAgZm9udFdlaWdodExpZ2h0LFxuICAgIGZvbnRXZWlnaHRSZWd1bGFyLFxuICAgIGZvbnRXZWlnaHRNZWRpdW0sXG4gICAgZm9udFdlaWdodEJvbGRcbiAgfSwgdmFyaWFudHMpLCBvdGhlciwge1xuICAgIGNsb25lOiBmYWxzZSAvLyBObyBuZWVkIHRvIGNsb25lIGRlZXBcbiAgfSk7XG59IiwiY29uc3Qgc2hhZG93S2V5VW1icmFPcGFjaXR5ID0gMC4yO1xuY29uc3Qgc2hhZG93S2V5UGVudW1icmFPcGFjaXR5ID0gMC4xNDtcbmNvbnN0IHNoYWRvd0FtYmllbnRTaGFkb3dPcGFjaXR5ID0gMC4xMjtcbmZ1bmN0aW9uIGNyZWF0ZVNoYWRvdyguLi5weCkge1xuICByZXR1cm4gW2Ake3B4WzBdfXB4ICR7cHhbMV19cHggJHtweFsyXX1weCAke3B4WzNdfXB4IHJnYmEoMCwwLDAsJHtzaGFkb3dLZXlVbWJyYU9wYWNpdHl9KWAsIGAke3B4WzRdfXB4ICR7cHhbNV19cHggJHtweFs2XX1weCAke3B4WzddfXB4IHJnYmEoMCwwLDAsJHtzaGFkb3dLZXlQZW51bWJyYU9wYWNpdHl9KWAsIGAke3B4WzhdfXB4ICR7cHhbOV19cHggJHtweFsxMF19cHggJHtweFsxMV19cHggcmdiYSgwLDAsMCwke3NoYWRvd0FtYmllbnRTaGFkb3dPcGFjaXR5fSlgXS5qb2luKCcsJyk7XG59XG5cbi8vIFZhbHVlcyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRlcmlhbC1jb21wb25lbnRzL21hdGVyaWFsLWNvbXBvbmVudHMtd2ViL2Jsb2IvYmU4NzQ3Zjk0NTc0NjY5Y2I1ZTdhZGQxYTdjNTRmYTQxYTg5Y2VjNy9wYWNrYWdlcy9tZGMtZWxldmF0aW9uL192YXJpYWJsZXMuc2Nzc1xuY29uc3Qgc2hhZG93cyA9IFsnbm9uZScsIGNyZWF0ZVNoYWRvdygwLCAyLCAxLCAtMSwgMCwgMSwgMSwgMCwgMCwgMSwgMywgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCAxLCAtMiwgMCwgMiwgMiwgMCwgMCwgMSwgNSwgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCAzLCAtMiwgMCwgMywgNCwgMCwgMCwgMSwgOCwgMCksIGNyZWF0ZVNoYWRvdygwLCAyLCA0LCAtMSwgMCwgNCwgNSwgMCwgMCwgMSwgMTAsIDApLCBjcmVhdGVTaGFkb3coMCwgMywgNSwgLTEsIDAsIDUsIDgsIDAsIDAsIDEsIDE0LCAwKSwgY3JlYXRlU2hhZG93KDAsIDMsIDUsIC0xLCAwLCA2LCAxMCwgMCwgMCwgMSwgMTgsIDApLCBjcmVhdGVTaGFkb3coMCwgNCwgNSwgLTIsIDAsIDcsIDEwLCAxLCAwLCAyLCAxNiwgMSksIGNyZWF0ZVNoYWRvdygwLCA1LCA1LCAtMywgMCwgOCwgMTAsIDEsIDAsIDMsIDE0LCAyKSwgY3JlYXRlU2hhZG93KDAsIDUsIDYsIC0zLCAwLCA5LCAxMiwgMSwgMCwgMywgMTYsIDIpLCBjcmVhdGVTaGFkb3coMCwgNiwgNiwgLTMsIDAsIDEwLCAxNCwgMSwgMCwgNCwgMTgsIDMpLCBjcmVhdGVTaGFkb3coMCwgNiwgNywgLTQsIDAsIDExLCAxNSwgMSwgMCwgNCwgMjAsIDMpLCBjcmVhdGVTaGFkb3coMCwgNywgOCwgLTQsIDAsIDEyLCAxNywgMiwgMCwgNSwgMjIsIDQpLCBjcmVhdGVTaGFkb3coMCwgNywgOCwgLTQsIDAsIDEzLCAxOSwgMiwgMCwgNSwgMjQsIDQpLCBjcmVhdGVTaGFkb3coMCwgNywgOSwgLTQsIDAsIDE0LCAyMSwgMiwgMCwgNSwgMjYsIDQpLCBjcmVhdGVTaGFkb3coMCwgOCwgOSwgLTUsIDAsIDE1LCAyMiwgMiwgMCwgNiwgMjgsIDUpLCBjcmVhdGVTaGFkb3coMCwgOCwgMTAsIC01LCAwLCAxNiwgMjQsIDIsIDAsIDYsIDMwLCA1KSwgY3JlYXRlU2hhZG93KDAsIDgsIDExLCAtNSwgMCwgMTcsIDI2LCAyLCAwLCA2LCAzMiwgNSksIGNyZWF0ZVNoYWRvdygwLCA5LCAxMSwgLTUsIDAsIDE4LCAyOCwgMiwgMCwgNywgMzQsIDYpLCBjcmVhdGVTaGFkb3coMCwgOSwgMTIsIC02LCAwLCAxOSwgMjksIDIsIDAsIDcsIDM2LCA2KSwgY3JlYXRlU2hhZG93KDAsIDEwLCAxMywgLTYsIDAsIDIwLCAzMSwgMywgMCwgOCwgMzgsIDcpLCBjcmVhdGVTaGFkb3coMCwgMTAsIDEzLCAtNiwgMCwgMjEsIDMzLCAzLCAwLCA4LCA0MCwgNyksIGNyZWF0ZVNoYWRvdygwLCAxMCwgMTQsIC02LCAwLCAyMiwgMzUsIDMsIDAsIDgsIDQyLCA3KSwgY3JlYXRlU2hhZG93KDAsIDExLCAxNCwgLTcsIDAsIDIzLCAzNiwgMywgMCwgOSwgNDQsIDgpLCBjcmVhdGVTaGFkb3coMCwgMTEsIDE1LCAtNywgMCwgMjQsIDM4LCAzLCAwLCA5LCA0NiwgOCldO1xuZXhwb3J0IGRlZmF1bHQgc2hhZG93czsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiZHVyYXRpb25cIiwgXCJlYXNpbmdcIiwgXCJkZWxheVwiXTtcbi8vIEZvbGxvdyBodHRwczovL21hdGVyaWFsLmdvb2dsZS5jb20vbW90aW9uL2R1cmF0aW9uLWVhc2luZy5odG1sI2R1cmF0aW9uLWVhc2luZy1uYXR1cmFsLWVhc2luZy1jdXJ2ZXNcbi8vIHRvIGxlYXJuIHRoZSBjb250ZXh0IGluIHdoaWNoIGVhY2ggZWFzaW5nIHNob3VsZCBiZSB1c2VkLlxuZXhwb3J0IGNvbnN0IGVhc2luZyA9IHtcbiAgLy8gVGhpcyBpcyB0aGUgbW9zdCBjb21tb24gZWFzaW5nIGN1cnZlLlxuICBlYXNlSW5PdXQ6ICdjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpJyxcbiAgLy8gT2JqZWN0cyBlbnRlciB0aGUgc2NyZWVuIGF0IGZ1bGwgdmVsb2NpdHkgZnJvbSBvZmYtc2NyZWVuIGFuZFxuICAvLyBzbG93bHkgZGVjZWxlcmF0ZSB0byBhIHJlc3RpbmcgcG9pbnQuXG4gIGVhc2VPdXQ6ICdjdWJpYy1iZXppZXIoMC4wLCAwLCAwLjIsIDEpJyxcbiAgLy8gT2JqZWN0cyBsZWF2ZSB0aGUgc2NyZWVuIGF0IGZ1bGwgdmVsb2NpdHkuIFRoZXkgZG8gbm90IGRlY2VsZXJhdGUgd2hlbiBvZmYtc2NyZWVuLlxuICBlYXNlSW46ICdjdWJpYy1iZXppZXIoMC40LCAwLCAxLCAxKScsXG4gIC8vIFRoZSBzaGFycCBjdXJ2ZSBpcyB1c2VkIGJ5IG9iamVjdHMgdGhhdCBtYXkgcmV0dXJuIHRvIHRoZSBzY3JlZW4gYXQgYW55IHRpbWUuXG4gIHNoYXJwOiAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKSdcbn07XG5cbi8vIEZvbGxvdyBodHRwczovL20yLm1hdGVyaWFsLmlvL2d1aWRlbGluZXMvbW90aW9uL2R1cmF0aW9uLWVhc2luZy5odG1sI2R1cmF0aW9uLWVhc2luZy1jb21tb24tZHVyYXRpb25zXG4vLyB0byBsZWFybiB3aGVuIHVzZSB3aGF0IHRpbWluZ1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uID0ge1xuICBzaG9ydGVzdDogMTUwLFxuICBzaG9ydGVyOiAyMDAsXG4gIHNob3J0OiAyNTAsXG4gIC8vIG1vc3QgYmFzaWMgcmVjb21tZW5kZWQgdGltaW5nXG4gIHN0YW5kYXJkOiAzMDAsXG4gIC8vIHRoaXMgaXMgdG8gYmUgdXNlZCBpbiBjb21wbGV4IGFuaW1hdGlvbnNcbiAgY29tcGxleDogMzc1LFxuICAvLyByZWNvbW1lbmRlZCB3aGVuIHNvbWV0aGluZyBpcyBlbnRlcmluZyBzY3JlZW5cbiAgZW50ZXJpbmdTY3JlZW46IDIyNSxcbiAgLy8gcmVjb21tZW5kZWQgd2hlbiBzb21ldGhpbmcgaXMgbGVhdmluZyBzY3JlZW5cbiAgbGVhdmluZ1NjcmVlbjogMTk1XG59O1xuZnVuY3Rpb24gZm9ybWF0TXMobWlsbGlzZWNvbmRzKSB7XG4gIHJldHVybiBgJHtNYXRoLnJvdW5kKG1pbGxpc2Vjb25kcyl9bXNgO1xufVxuZnVuY3Rpb24gZ2V0QXV0b0hlaWdodER1cmF0aW9uKGhlaWdodCkge1xuICBpZiAoIWhlaWdodCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGNvbnN0IGNvbnN0YW50ID0gaGVpZ2h0IC8gMzY7XG5cbiAgLy8gaHR0cHM6Ly93d3cud29sZnJhbWFscGhhLmNvbS9pbnB1dC8/aT0oNCslMkIrMTUrKisoeCslMkYrMzYrKSsqKiswLjI1KyUyQisoeCslMkYrMzYpKyUyRis1KSsqKzEwXG4gIHJldHVybiBNYXRoLnJvdW5kKCg0ICsgMTUgKiBjb25zdGFudCAqKiAwLjI1ICsgY29uc3RhbnQgLyA1KSAqIDEwKTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVRyYW5zaXRpb25zKGlucHV0VHJhbnNpdGlvbnMpIHtcbiAgY29uc3QgbWVyZ2VkRWFzaW5nID0gX2V4dGVuZHMoe30sIGVhc2luZywgaW5wdXRUcmFuc2l0aW9ucy5lYXNpbmcpO1xuICBjb25zdCBtZXJnZWREdXJhdGlvbiA9IF9leHRlbmRzKHt9LCBkdXJhdGlvbiwgaW5wdXRUcmFuc2l0aW9ucy5kdXJhdGlvbik7XG4gIGNvbnN0IGNyZWF0ZSA9IChwcm9wcyA9IFsnYWxsJ10sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uT3B0aW9uID0gbWVyZ2VkRHVyYXRpb24uc3RhbmRhcmQsXG4gICAgICAgIGVhc2luZzogZWFzaW5nT3B0aW9uID0gbWVyZ2VkRWFzaW5nLmVhc2VJbk91dCxcbiAgICAgICAgZGVsYXkgPSAwXG4gICAgICB9ID0gb3B0aW9ucyxcbiAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uob3B0aW9ucywgX2V4Y2x1ZGVkKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc3QgaXNTdHJpbmcgPSB2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xuICAgICAgLy8gSUUxMSBzdXBwb3J0LCByZXBsYWNlIHdpdGggTnVtYmVyLmlzTmFOXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG4gICAgICBjb25zdCBpc051bWJlciA9IHZhbHVlID0+ICFpc05hTihwYXJzZUZsb2F0KHZhbHVlKSk7XG4gICAgICBpZiAoIWlzU3RyaW5nKHByb3BzKSAmJiAhQXJyYXkuaXNBcnJheShwcm9wcykpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTVVJOiBBcmd1bWVudCBcInByb3BzXCIgbXVzdCBiZSBhIHN0cmluZyBvciBBcnJheS4nKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNOdW1iZXIoZHVyYXRpb25PcHRpb24pICYmICFpc1N0cmluZyhkdXJhdGlvbk9wdGlvbikpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBBcmd1bWVudCBcImR1cmF0aW9uXCIgbXVzdCBiZSBhIG51bWJlciBvciBhIHN0cmluZyBidXQgZm91bmQgJHtkdXJhdGlvbk9wdGlvbn0uYCk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzU3RyaW5nKGVhc2luZ09wdGlvbikpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTVVJOiBBcmd1bWVudCBcImVhc2luZ1wiIG11c3QgYmUgYSBzdHJpbmcuJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzTnVtYmVyKGRlbGF5KSAmJiAhaXNTdHJpbmcoZGVsYXkpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogQXJndW1lbnQgXCJkZWxheVwiIG11c3QgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcuJyk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFNlY29uZyBhcmd1bWVudCBvZiB0cmFuc2l0aW9uLmNyZWF0ZSBtdXN0IGJlIGFuIG9iamVjdC4nLCBcIkFyZ3VtZW50cyBzaG91bGQgYmUgZWl0aGVyIGBjcmVhdGUoJ3Byb3AxJywgb3B0aW9ucylgIG9yIGBjcmVhdGUoWydwcm9wMScsICdwcm9wMiddLCBvcHRpb25zKWBcIl0uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5rZXlzKG90aGVyKS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBVbnJlY29nbml6ZWQgYXJndW1lbnQocykgWyR7T2JqZWN0LmtleXMob3RoZXIpLmpvaW4oJywnKX1dLmApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gKEFycmF5LmlzQXJyYXkocHJvcHMpID8gcHJvcHMgOiBbcHJvcHNdKS5tYXAoYW5pbWF0ZWRQcm9wID0+IGAke2FuaW1hdGVkUHJvcH0gJHt0eXBlb2YgZHVyYXRpb25PcHRpb24gPT09ICdzdHJpbmcnID8gZHVyYXRpb25PcHRpb24gOiBmb3JtYXRNcyhkdXJhdGlvbk9wdGlvbil9ICR7ZWFzaW5nT3B0aW9ufSAke3R5cGVvZiBkZWxheSA9PT0gJ3N0cmluZycgPyBkZWxheSA6IGZvcm1hdE1zKGRlbGF5KX1gKS5qb2luKCcsJyk7XG4gIH07XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgZ2V0QXV0b0hlaWdodER1cmF0aW9uLFxuICAgIGNyZWF0ZVxuICB9LCBpbnB1dFRyYW5zaXRpb25zLCB7XG4gICAgZWFzaW5nOiBtZXJnZWRFYXNpbmcsXG4gICAgZHVyYXRpb246IG1lcmdlZER1cmF0aW9uXG4gIH0pO1xufSIsIi8vIFdlIG5lZWQgdG8gY2VudHJhbGl6ZSB0aGUgekluZGV4IGRlZmluaXRpb25zIGFzIHRoZXkgd29ya1xuLy8gbGlrZSBnbG9iYWwgdmFsdWVzIGluIHRoZSBicm93c2VyLlxuY29uc3QgekluZGV4ID0ge1xuICBtb2JpbGVTdGVwcGVyOiAxMDAwLFxuICBmYWI6IDEwNTAsXG4gIHNwZWVkRGlhbDogMTA1MCxcbiAgYXBwQmFyOiAxMTAwLFxuICBkcmF3ZXI6IDEyMDAsXG4gIG1vZGFsOiAxMzAwLFxuICBzbmFja2JhcjogMTQwMCxcbiAgdG9vbHRpcDogMTUwMFxufTtcbmV4cG9ydCBkZWZhdWx0IHpJbmRleDsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IHsgZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGFzIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UgfSBmcm9tIFwiQG11aS91dGlsc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYnJlYWtwb2ludHNcIiwgXCJtaXhpbnNcIiwgXCJzcGFjaW5nXCIsIFwicGFsZXR0ZVwiLCBcInRyYW5zaXRpb25zXCIsIFwidHlwb2dyYXBoeVwiLCBcInNoYXBlXCJdO1xuaW1wb3J0IHsgZGVlcG1lcmdlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyBjcmVhdGVUaGVtZSBhcyBzeXN0ZW1DcmVhdGVUaGVtZSwgdW5zdGFibGVfZGVmYXVsdFN4Q29uZmlnIGFzIGRlZmF1bHRTeENvbmZpZywgdW5zdGFibGVfc3R5bGVGdW5jdGlvblN4IGFzIHN0eWxlRnVuY3Rpb25TeCB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5pbXBvcnQgY3JlYXRlTWl4aW5zIGZyb20gJy4vY3JlYXRlTWl4aW5zJztcbmltcG9ydCBjcmVhdGVQYWxldHRlIGZyb20gJy4vY3JlYXRlUGFsZXR0ZSc7XG5pbXBvcnQgY3JlYXRlVHlwb2dyYXBoeSBmcm9tICcuL2NyZWF0ZVR5cG9ncmFwaHknO1xuaW1wb3J0IHNoYWRvd3MgZnJvbSAnLi9zaGFkb3dzJztcbmltcG9ydCBjcmVhdGVUcmFuc2l0aW9ucyBmcm9tICcuL2NyZWF0ZVRyYW5zaXRpb25zJztcbmltcG9ydCB6SW5kZXggZnJvbSAnLi96SW5kZXgnO1xuZnVuY3Rpb24gY3JlYXRlVGhlbWUob3B0aW9ucyA9IHt9LCAuLi5hcmdzKSB7XG4gIGNvbnN0IHtcbiAgICAgIG1peGluczogbWl4aW5zSW5wdXQgPSB7fSxcbiAgICAgIHBhbGV0dGU6IHBhbGV0dGVJbnB1dCA9IHt9LFxuICAgICAgdHJhbnNpdGlvbnM6IHRyYW5zaXRpb25zSW5wdXQgPSB7fSxcbiAgICAgIHR5cG9ncmFwaHk6IHR5cG9ncmFwaHlJbnB1dCA9IHt9XG4gICAgfSA9IG9wdGlvbnMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShvcHRpb25zLCBfZXhjbHVkZWQpO1xuICBpZiAob3B0aW9ucy52YXJzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFxcYHZhcnNcXGAgaXMgYSBwcml2YXRlIGZpZWxkIHVzZWQgZm9yIENTUyB2YXJpYWJsZXMgc3VwcG9ydC5cblBsZWFzZSB1c2UgYW5vdGhlciBuYW1lLmAgOiBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlKDE4KSk7XG4gIH1cbiAgY29uc3QgcGFsZXR0ZSA9IGNyZWF0ZVBhbGV0dGUocGFsZXR0ZUlucHV0KTtcbiAgY29uc3Qgc3lzdGVtVGhlbWUgPSBzeXN0ZW1DcmVhdGVUaGVtZShvcHRpb25zKTtcbiAgbGV0IG11aVRoZW1lID0gZGVlcG1lcmdlKHN5c3RlbVRoZW1lLCB7XG4gICAgbWl4aW5zOiBjcmVhdGVNaXhpbnMoc3lzdGVtVGhlbWUuYnJlYWtwb2ludHMsIG1peGluc0lucHV0KSxcbiAgICBwYWxldHRlLFxuICAgIC8vIERvbid0IHVzZSBbLi4uc2hhZG93c10gdW50aWwgeW91J3ZlIHZlcmlmaWVkIGl0cyB0cmFuc3BpbGVkIGNvZGUgaXMgbm90IGludm9raW5nIHRoZSBpdGVyYXRvciBwcm90b2NvbC5cbiAgICBzaGFkb3dzOiBzaGFkb3dzLnNsaWNlKCksXG4gICAgdHlwb2dyYXBoeTogY3JlYXRlVHlwb2dyYXBoeShwYWxldHRlLCB0eXBvZ3JhcGh5SW5wdXQpLFxuICAgIHRyYW5zaXRpb25zOiBjcmVhdGVUcmFuc2l0aW9ucyh0cmFuc2l0aW9uc0lucHV0KSxcbiAgICB6SW5kZXg6IF9leHRlbmRzKHt9LCB6SW5kZXgpXG4gIH0pO1xuICBtdWlUaGVtZSA9IGRlZXBtZXJnZShtdWlUaGVtZSwgb3RoZXIpO1xuICBtdWlUaGVtZSA9IGFyZ3MucmVkdWNlKChhY2MsIGFyZ3VtZW50KSA9PiBkZWVwbWVyZ2UoYWNjLCBhcmd1bWVudCksIG11aVRoZW1lKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBUT0RPIHY2OiBSZWZhY3RvciB0byB1c2UgZ2xvYmFsU3RhdGVDbGFzc2VzTWFwcGluZyBmcm9tIEBtdWkvdXRpbHMgb25jZSBgcmVhZE9ubHlgIHN0YXRlIGNsYXNzIGlzIHVzZWQgaW4gUmF0aW5nIGNvbXBvbmVudC5cbiAgICBjb25zdCBzdGF0ZUNsYXNzZXMgPSBbJ2FjdGl2ZScsICdjaGVja2VkJywgJ2NvbXBsZXRlZCcsICdkaXNhYmxlZCcsICdlcnJvcicsICdleHBhbmRlZCcsICdmb2N1c2VkJywgJ2ZvY3VzVmlzaWJsZScsICdyZXF1aXJlZCcsICdzZWxlY3RlZCddO1xuICAgIGNvbnN0IHRyYXZlcnNlID0gKG5vZGUsIGNvbXBvbmVudCkgPT4ge1xuICAgICAgbGV0IGtleTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGd1YXJkLWZvci1pbiwgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgIGZvciAoa2V5IGluIG5vZGUpIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBub2RlW2tleV07XG4gICAgICAgIGlmIChzdGF0ZUNsYXNzZXMuaW5kZXhPZihrZXkpICE9PSAtMSAmJiBPYmplY3Qua2V5cyhjaGlsZCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZUNsYXNzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJycsIGtleSk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgXFxgJHtjb21wb25lbnR9XFxgIGNvbXBvbmVudCBpbmNyZWFzZXMgYCArIGB0aGUgQ1NTIHNwZWNpZmljaXR5IG9mIHRoZSBcXGAke2tleX1cXGAgaW50ZXJuYWwgc3RhdGUuYCwgJ1lvdSBjYW4gbm90IG92ZXJyaWRlIGl0IGxpa2UgdGhpczogJywgSlNPTi5zdHJpbmdpZnkobm9kZSwgbnVsbCwgMiksICcnLCBgSW5zdGVhZCwgeW91IG5lZWQgdG8gdXNlIHRoZSAnJi4ke3N0YXRlQ2xhc3N9JyBzeW50YXg6YCwgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICByb290OiB7XG4gICAgICAgICAgICAgICAgW2AmLiR7c3RhdGVDbGFzc31gXTogY2hpbGRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgbnVsbCwgMiksICcnLCAnaHR0cHM6Ly9tdWkuY29tL3Ivc3RhdGUtY2xhc3Nlcy1ndWlkZSddLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzdHlsZSB0byBwcmV2ZW50IGdsb2JhbCBjb25mbGljdHMuXG4gICAgICAgICAgbm9kZVtrZXldID0ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5rZXlzKG11aVRoZW1lLmNvbXBvbmVudHMpLmZvckVhY2goY29tcG9uZW50ID0+IHtcbiAgICAgIGNvbnN0IHN0eWxlT3ZlcnJpZGVzID0gbXVpVGhlbWUuY29tcG9uZW50c1tjb21wb25lbnRdLnN0eWxlT3ZlcnJpZGVzO1xuICAgICAgaWYgKHN0eWxlT3ZlcnJpZGVzICYmIGNvbXBvbmVudC5pbmRleE9mKCdNdWknKSA9PT0gMCkge1xuICAgICAgICB0cmF2ZXJzZShzdHlsZU92ZXJyaWRlcywgY29tcG9uZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBtdWlUaGVtZS51bnN0YWJsZV9zeENvbmZpZyA9IF9leHRlbmRzKHt9LCBkZWZhdWx0U3hDb25maWcsIG90aGVyID09IG51bGwgPyB2b2lkIDAgOiBvdGhlci51bnN0YWJsZV9zeENvbmZpZyk7XG4gIG11aVRoZW1lLnVuc3RhYmxlX3N4ID0gZnVuY3Rpb24gc3gocHJvcHMpIHtcbiAgICByZXR1cm4gc3R5bGVGdW5jdGlvblN4KHtcbiAgICAgIHN4OiBwcm9wcyxcbiAgICAgIHRoZW1lOiB0aGlzXG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBtdWlUaGVtZTtcbn1cbmxldCB3YXJuZWRPbmNlID0gZmFsc2U7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTXVpVGhlbWUoLi4uYXJncykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICghd2FybmVkT25jZSkge1xuICAgICAgd2FybmVkT25jZSA9IHRydWU7XG4gICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiB0aGUgY3JlYXRlTXVpVGhlbWUgZnVuY3Rpb24gd2FzIHJlbmFtZWQgdG8gY3JlYXRlVGhlbWUuJywgJycsIFwiWW91IHNob3VsZCB1c2UgYGltcG9ydCB7IGNyZWF0ZVRoZW1lIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnYFwiXS5qb2luKCdcXG4nKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVUaGVtZSguLi5hcmdzKTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVRoZW1lOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlTWl4aW5zKGJyZWFrcG9pbnRzLCBtaXhpbnMpIHtcbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICB0b29sYmFyOiB7XG4gICAgICBtaW5IZWlnaHQ6IDU2LFxuICAgICAgW2JyZWFrcG9pbnRzLnVwKCd4cycpXToge1xuICAgICAgICAnQG1lZGlhIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSc6IHtcbiAgICAgICAgICBtaW5IZWlnaHQ6IDQ4XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbYnJlYWtwb2ludHMudXAoJ3NtJyldOiB7XG4gICAgICAgIG1pbkhlaWdodDogNjRcbiAgICAgIH1cbiAgICB9XG4gIH0sIG1peGlucyk7XG59IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgY3JlYXRlVGhlbWUgZnJvbSAnLi9jcmVhdGVUaGVtZSc7XG5jb25zdCBkZWZhdWx0VGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdFRoZW1lOyIsIi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRlcmlhbC1jb21wb25lbnRzL21hdGVyaWFsLWNvbXBvbmVudHMtaW9zL2Jsb2IvYmNhMzYxMDc0MDU1OTRkNWI3YjE2MjY1YTViMGVkNjk4Zjg1YTVlZS9jb21wb25lbnRzL0VsZXZhdGlvbi9zcmMvVUlDb2xvciUyQk1hdGVyaWFsRWxldmF0aW9uLm0jTDYxXG5jb25zdCBnZXRPdmVybGF5QWxwaGEgPSBlbGV2YXRpb24gPT4ge1xuICBsZXQgYWxwaGFWYWx1ZTtcbiAgaWYgKGVsZXZhdGlvbiA8IDEpIHtcbiAgICBhbHBoYVZhbHVlID0gNS4xMTkxNiAqIGVsZXZhdGlvbiAqKiAyO1xuICB9IGVsc2Uge1xuICAgIGFscGhhVmFsdWUgPSA0LjUgKiBNYXRoLmxvZyhlbGV2YXRpb24gKyAxKSArIDI7XG4gIH1cbiAgcmV0dXJuIChhbHBoYVZhbHVlIC8gMTAwKS50b0ZpeGVkKDIpO1xufTtcbmV4cG9ydCBkZWZhdWx0IGdldE92ZXJsYXlBbHBoYTsiLCJleHBvcnQgZGVmYXVsdCAnJCRtYXRlcmlhbCc7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBjcmVhdGVTdHlsZWQsIHNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGRlZmF1bHRUaGVtZSBmcm9tICcuL2RlZmF1bHRUaGVtZSc7XG5pbXBvcnQgVEhFTUVfSUQgZnJvbSAnLi9pZGVudGlmaWVyJztcbmV4cG9ydCBjb25zdCByb290U2hvdWxkRm9yd2FyZFByb3AgPSBwcm9wID0+IHNob3VsZEZvcndhcmRQcm9wKHByb3ApICYmIHByb3AgIT09ICdjbGFzc2VzJztcbmV4cG9ydCBjb25zdCBzbG90U2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcDtcbmNvbnN0IHN0eWxlZCA9IGNyZWF0ZVN0eWxlZCh7XG4gIHRoZW1lSWQ6IFRIRU1FX0lELFxuICBkZWZhdWx0VGhlbWUsXG4gIHJvb3RTaG91bGRGb3J3YXJkUHJvcFxufSk7XG5leHBvcnQgZGVmYXVsdCBzdHlsZWQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUaGVtZSBhcyB1c2VUaGVtZVN5c3RlbSB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBkZWZhdWx0VGhlbWUgZnJvbSAnLi9kZWZhdWx0VGhlbWUnO1xuaW1wb3J0IFRIRU1FX0lEIGZyb20gJy4vaWRlbnRpZmllcic7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUaGVtZSgpIHtcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZVN5c3RlbShkZWZhdWx0VGhlbWUpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIFJlYWN0LnVzZURlYnVnVmFsdWUodGhlbWUpO1xuICB9XG4gIHJldHVybiB0aGVtZVtUSEVNRV9JRF0gfHwgdGhlbWU7XG59IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyB1c2VUaGVtZVByb3BzIGFzIHN5c3RlbVVzZVRoZW1lUHJvcHMgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgZGVmYXVsdFRoZW1lIGZyb20gJy4vZGVmYXVsdFRoZW1lJztcbmltcG9ydCBUSEVNRV9JRCBmcm9tICcuL2lkZW50aWZpZXInO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVGhlbWVQcm9wcyh7XG4gIHByb3BzLFxuICBuYW1lXG59KSB7XG4gIHJldHVybiBzeXN0ZW1Vc2VUaGVtZVByb3BzKHtcbiAgICBwcm9wcyxcbiAgICBuYW1lLFxuICAgIGRlZmF1bHRUaGVtZSxcbiAgICB0aGVtZUlkOiBUSEVNRV9JRFxuICB9KTtcbn0iLCJleHBvcnQgY29uc3QgcmVmbG93ID0gbm9kZSA9PiBub2RlLnNjcm9sbFRvcDtcbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFuc2l0aW9uUHJvcHMocHJvcHMsIG9wdGlvbnMpIHtcbiAgdmFyIF9zdHlsZSR0cmFuc2l0aW9uRHVyYSwgX3N0eWxlJHRyYW5zaXRpb25UaW1pO1xuICBjb25zdCB7XG4gICAgdGltZW91dCxcbiAgICBlYXNpbmcsXG4gICAgc3R5bGUgPSB7fVxuICB9ID0gcHJvcHM7XG4gIHJldHVybiB7XG4gICAgZHVyYXRpb246IChfc3R5bGUkdHJhbnNpdGlvbkR1cmEgPSBzdHlsZS50cmFuc2l0aW9uRHVyYXRpb24pICE9IG51bGwgPyBfc3R5bGUkdHJhbnNpdGlvbkR1cmEgOiB0eXBlb2YgdGltZW91dCA9PT0gJ251bWJlcicgPyB0aW1lb3V0IDogdGltZW91dFtvcHRpb25zLm1vZGVdIHx8IDAsXG4gICAgZWFzaW5nOiAoX3N0eWxlJHRyYW5zaXRpb25UaW1pID0gc3R5bGUudHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKSAhPSBudWxsID8gX3N0eWxlJHRyYW5zaXRpb25UaW1pIDogdHlwZW9mIGVhc2luZyA9PT0gJ29iamVjdCcgPyBlYXNpbmdbb3B0aW9ucy5tb2RlXSA6IGVhc2luZyxcbiAgICBkZWxheTogc3R5bGUudHJhbnNpdGlvbkRlbGF5XG4gIH07XG59IiwiaW1wb3J0IHsgdW5zdGFibGVfY2FwaXRhbGl6ZSBhcyBjYXBpdGFsaXplIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCBjYXBpdGFsaXplOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRTdmdJY29uVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlTdmdJY29uJywgc2xvdCk7XG59XG5jb25zdCBzdmdJY29uQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVN2Z0ljb24nLCBbJ3Jvb3QnLCAnY29sb3JQcmltYXJ5JywgJ2NvbG9yU2Vjb25kYXJ5JywgJ2NvbG9yQWN0aW9uJywgJ2NvbG9yRXJyb3InLCAnY29sb3JEaXNhYmxlZCcsICdmb250U2l6ZUluaGVyaXQnLCAnZm9udFNpemVTbWFsbCcsICdmb250U2l6ZU1lZGl1bScsICdmb250U2l6ZUxhcmdlJ10pO1xuZXhwb3J0IGRlZmF1bHQgc3ZnSWNvbkNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImZvbnRTaXplXCIsIFwiaHRtbENvbG9yXCIsIFwiaW5oZXJpdFZpZXdCb3hcIiwgXCJ0aXRsZUFjY2Vzc1wiLCBcInZpZXdCb3hcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBnZXRTdmdJY29uVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9zdmdJY29uQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNvbG9yLFxuICAgIGZvbnRTaXplLFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGNvbG9yICE9PSAnaW5oZXJpdCcgJiYgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBgZm9udFNpemUke2NhcGl0YWxpemUoZm9udFNpemUpfWBdXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgU3ZnSWNvblJvb3QgPSBzdHlsZWQoJ3N2ZycsIHtcbiAgbmFtZTogJ011aVN2Z0ljb24nLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHN0eWxlc1tgY29sb3Ike2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF0sIHN0eWxlc1tgZm9udFNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5mb250U2l6ZSl9YF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICB2YXIgX3RoZW1lJHRyYW5zaXRpb25zLCBfdGhlbWUkdHJhbnNpdGlvbnMkY3IsIF90aGVtZSR0cmFuc2l0aW9uczIsIF90aGVtZSR0eXBvZ3JhcGh5LCBfdGhlbWUkdHlwb2dyYXBoeSRweFQsIF90aGVtZSR0eXBvZ3JhcGh5MiwgX3RoZW1lJHR5cG9ncmFwaHkyJHB4LCBfdGhlbWUkdHlwb2dyYXBoeTMsIF90aGVtZSR0eXBvZ3JhcGh5MyRweCwgX3BhbGV0dGUkb3duZXJTdGF0ZSRjLCBfcGFsZXR0ZSwgX3BhbGV0dGUyLCBfcGFsZXR0ZTM7XG4gIHJldHVybiB7XG4gICAgdXNlclNlbGVjdDogJ25vbmUnLFxuICAgIHdpZHRoOiAnMWVtJyxcbiAgICBoZWlnaHQ6ICcxZW0nLFxuICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgIC8vIHRoZSA8c3ZnPiB3aWxsIGRlZmluZSB0aGUgcHJvcGVydHkgdGhhdCBoYXMgYGN1cnJlbnRDb2xvcmBcbiAgICAvLyBlLmcuIGhlcm9pY29ucyB1c2VzIGZpbGw9XCJub25lXCIgYW5kIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgZmlsbDogb3duZXJTdGF0ZS5oYXNTdmdBc0NoaWxkID8gdW5kZWZpbmVkIDogJ2N1cnJlbnRDb2xvcicsXG4gICAgZmxleFNocmluazogMCxcbiAgICB0cmFuc2l0aW9uOiAoX3RoZW1lJHRyYW5zaXRpb25zID0gdGhlbWUudHJhbnNpdGlvbnMpID09IG51bGwgfHwgKF90aGVtZSR0cmFuc2l0aW9ucyRjciA9IF90aGVtZSR0cmFuc2l0aW9ucy5jcmVhdGUpID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHJhbnNpdGlvbnMkY3IuY2FsbChfdGhlbWUkdHJhbnNpdGlvbnMsICdmaWxsJywge1xuICAgICAgZHVyYXRpb246IChfdGhlbWUkdHJhbnNpdGlvbnMyID0gdGhlbWUudHJhbnNpdGlvbnMpID09IG51bGwgfHwgKF90aGVtZSR0cmFuc2l0aW9uczIgPSBfdGhlbWUkdHJhbnNpdGlvbnMyLmR1cmF0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHRyYW5zaXRpb25zMi5zaG9ydGVyXG4gICAgfSksXG4gICAgZm9udFNpemU6IHtcbiAgICAgIGluaGVyaXQ6ICdpbmhlcml0JyxcbiAgICAgIHNtYWxsOiAoKF90aGVtZSR0eXBvZ3JhcGh5ID0gdGhlbWUudHlwb2dyYXBoeSkgPT0gbnVsbCB8fCAoX3RoZW1lJHR5cG9ncmFwaHkkcHhUID0gX3RoZW1lJHR5cG9ncmFwaHkucHhUb1JlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0eXBvZ3JhcGh5JHB4VC5jYWxsKF90aGVtZSR0eXBvZ3JhcGh5LCAyMCkpIHx8ICcxLjI1cmVtJyxcbiAgICAgIG1lZGl1bTogKChfdGhlbWUkdHlwb2dyYXBoeTIgPSB0aGVtZS50eXBvZ3JhcGh5KSA9PSBudWxsIHx8IChfdGhlbWUkdHlwb2dyYXBoeTIkcHggPSBfdGhlbWUkdHlwb2dyYXBoeTIucHhUb1JlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0eXBvZ3JhcGh5MiRweC5jYWxsKF90aGVtZSR0eXBvZ3JhcGh5MiwgMjQpKSB8fCAnMS41cmVtJyxcbiAgICAgIGxhcmdlOiAoKF90aGVtZSR0eXBvZ3JhcGh5MyA9IHRoZW1lLnR5cG9ncmFwaHkpID09IG51bGwgfHwgKF90aGVtZSR0eXBvZ3JhcGh5MyRweCA9IF90aGVtZSR0eXBvZ3JhcGh5My5weFRvUmVtKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHR5cG9ncmFwaHkzJHB4LmNhbGwoX3RoZW1lJHR5cG9ncmFwaHkzLCAzNSkpIHx8ICcyLjE4NzVyZW0nXG4gICAgfVtvd25lclN0YXRlLmZvbnRTaXplXSxcbiAgICAvLyBUT0RPIHY1IGRlcHJlY2F0ZSwgdjYgcmVtb3ZlIGZvciBzeFxuICAgIGNvbG9yOiAoX3BhbGV0dGUkb3duZXJTdGF0ZSRjID0gKF9wYWxldHRlID0gKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUpID09IG51bGwgfHwgKF9wYWxldHRlID0gX3BhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0pID09IG51bGwgPyB2b2lkIDAgOiBfcGFsZXR0ZS5tYWluKSAhPSBudWxsID8gX3BhbGV0dGUkb3duZXJTdGF0ZSRjIDoge1xuICAgICAgYWN0aW9uOiAoX3BhbGV0dGUyID0gKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUpID09IG51bGwgfHwgKF9wYWxldHRlMiA9IF9wYWxldHRlMi5hY3Rpb24pID09IG51bGwgPyB2b2lkIDAgOiBfcGFsZXR0ZTIuYWN0aXZlLFxuICAgICAgZGlzYWJsZWQ6IChfcGFsZXR0ZTMgPSAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZSkgPT0gbnVsbCB8fCAoX3BhbGV0dGUzID0gX3BhbGV0dGUzLmFjdGlvbikgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYWxldHRlMy5kaXNhYmxlZCxcbiAgICAgIGluaGVyaXQ6IHVuZGVmaW5lZFxuICAgIH1bb3duZXJTdGF0ZS5jb2xvcl1cbiAgfTtcbn0pO1xuY29uc3QgU3ZnSWNvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFN2Z0ljb24oaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVN2Z0ljb24nXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gJ2luaGVyaXQnLFxuICAgICAgY29tcG9uZW50ID0gJ3N2ZycsXG4gICAgICBmb250U2l6ZSA9ICdtZWRpdW0nLFxuICAgICAgaHRtbENvbG9yLFxuICAgICAgaW5oZXJpdFZpZXdCb3ggPSBmYWxzZSxcbiAgICAgIHRpdGxlQWNjZXNzLFxuICAgICAgdmlld0JveCA9ICcwIDAgMjQgMjQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGhhc1N2Z0FzQ2hpbGQgPSAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmIGNoaWxkcmVuLnR5cGUgPT09ICdzdmcnO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3IsXG4gICAgY29tcG9uZW50LFxuICAgIGZvbnRTaXplLFxuICAgIGluc3RhbmNlRm9udFNpemU6IGluUHJvcHMuZm9udFNpemUsXG4gICAgaW5oZXJpdFZpZXdCb3gsXG4gICAgdmlld0JveCxcbiAgICBoYXNTdmdBc0NoaWxkXG4gIH0pO1xuICBjb25zdCBtb3JlID0ge307XG4gIGlmICghaW5oZXJpdFZpZXdCb3gpIHtcbiAgICBtb3JlLnZpZXdCb3ggPSB2aWV3Qm94O1xuICB9XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhTdmdJY29uUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBmb2N1c2FibGU6IFwiZmFsc2VcIixcbiAgICBjb2xvcjogaHRtbENvbG9yLFxuICAgIFwiYXJpYS1oaWRkZW5cIjogdGl0bGVBY2Nlc3MgPyB1bmRlZmluZWQgOiB0cnVlLFxuICAgIHJvbGU6IHRpdGxlQWNjZXNzID8gJ2ltZycgOiB1bmRlZmluZWQsXG4gICAgcmVmOiByZWZcbiAgfSwgbW9yZSwgb3RoZXIsIGhhc1N2Z0FzQ2hpbGQgJiYgY2hpbGRyZW4ucHJvcHMsIHtcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNoaWxkcmVuOiBbaGFzU3ZnQXNDaGlsZCA/IGNoaWxkcmVuLnByb3BzLmNoaWxkcmVuIDogY2hpbGRyZW4sIHRpdGxlQWNjZXNzID8gLyojX19QVVJFX18qL19qc3goXCJ0aXRsZVwiLCB7XG4gICAgICBjaGlsZHJlbjogdGl0bGVBY2Nlc3NcbiAgICB9KSA6IG51bGxdXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU3ZnSWNvbi5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBOb2RlIHBhc3NlZCBpbnRvIHRoZSBTVkcgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBZb3UgY2FuIHVzZSB0aGUgYGh0bWxDb2xvcmAgcHJvcCB0byBhcHBseSBhIGNvbG9yIGF0dHJpYnV0ZSB0byB0aGUgU1ZHIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0ICdpbmhlcml0J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdhY3Rpb24nLCAnZGlzYWJsZWQnLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogVGhlIGZvbnRTaXplIGFwcGxpZWQgdG8gdGhlIGljb24uIERlZmF1bHRzIHRvIDI0cHgsIGJ1dCBjYW4gYmUgY29uZmlndXJlIHRvIGluaGVyaXQgZm9udCBzaXplLlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgZm9udFNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdsYXJnZScsICdtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIEFwcGxpZXMgYSBjb2xvciBhdHRyaWJ1dGUgdG8gdGhlIFNWRyBlbGVtZW50LlxuICAgKi9cbiAgaHRtbENvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcm9vdCBub2RlIHdpbGwgaW5oZXJpdCB0aGUgY3VzdG9tIGBjb21wb25lbnRgJ3Mgdmlld0JveCBhbmQgdGhlIGB2aWV3Qm94YFxuICAgKiBwcm9wIHdpbGwgYmUgaWdub3JlZC5cbiAgICogVXNlZnVsIHdoZW4geW91IHdhbnQgdG8gcmVmZXJlbmNlIGEgY3VzdG9tIGBjb21wb25lbnRgIGFuZCBoYXZlIGBTdmdJY29uYCBwYXNzIHRoYXRcbiAgICogYGNvbXBvbmVudGAncyB2aWV3Qm94IHRvIHRoZSByb290IG5vZGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpbmhlcml0Vmlld0JveDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc2hhcGUtcmVuZGVyaW5nIGF0dHJpYnV0ZS4gVGhlIGJlaGF2aW9yIG9mIHRoZSBkaWZmZXJlbnQgb3B0aW9ucyBpcyBkZXNjcmliZWQgb24gdGhlXG4gICAqIFtNRE4gV2ViIERvY3NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1NWRy9BdHRyaWJ1dGUvc2hhcGUtcmVuZGVyaW5nKS5cbiAgICogSWYgeW91IGFyZSBoYXZpbmcgaXNzdWVzIHdpdGggYmx1cnJ5IGljb25zIHlvdSBzaG91bGQgaW52ZXN0aWdhdGUgdGhpcyBwcm9wLlxuICAgKi9cbiAgc2hhcGVSZW5kZXJpbmc6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBQcm92aWRlcyBhIGh1bWFuLXJlYWRhYmxlIHRpdGxlIGZvciB0aGUgZWxlbWVudCB0aGF0IGNvbnRhaW5zIGl0LlxuICAgKiBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHLWFjY2Vzcy8jRXF1aXZhbGVudFxuICAgKi9cbiAgdGl0bGVBY2Nlc3M6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBBbGxvd3MgeW91IHRvIHJlZGVmaW5lIHdoYXQgdGhlIGNvb3JkaW5hdGVzIHdpdGhvdXQgdW5pdHMgbWVhbiBpbnNpZGUgYW4gU1ZHIGVsZW1lbnQuXG4gICAqIEZvciBleGFtcGxlLCBpZiB0aGUgU1ZHIGVsZW1lbnQgaXMgNTAwICh3aWR0aCkgYnkgMjAwIChoZWlnaHQpLFxuICAgKiBhbmQgeW91IHBhc3Mgdmlld0JveD1cIjAgMCA1MCAyMFwiLFxuICAgKiB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvb3JkaW5hdGVzIGluc2lkZSB0aGUgU1ZHIHdpbGwgZ28gZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyICgwLDApXG4gICAqIHRvIGJvdHRvbSByaWdodCAoNTAsMjApIGFuZCBlYWNoIHVuaXQgd2lsbCBiZSB3b3J0aCAxMHB4LlxuICAgKiBAZGVmYXVsdCAnMCAwIDI0IDI0J1xuICAgKi9cbiAgdmlld0JveDogUHJvcFR5cGVzLnN0cmluZ1xufSA6IHZvaWQgMDtcblN2Z0ljb24ubXVpTmFtZSA9ICdTdmdJY29uJztcbmV4cG9ydCBkZWZhdWx0IFN2Z0ljb247IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTdmdJY29uIGZyb20gJy4uL1N2Z0ljb24nO1xuXG4vKipcbiAqIFByaXZhdGUgbW9kdWxlIHJlc2VydmVkIGZvciBAbXVpIHBhY2thZ2VzLlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU3ZnSWNvbihwYXRoLCBkaXNwbGF5TmFtZSkge1xuICBmdW5jdGlvbiBDb21wb25lbnQocHJvcHMsIHJlZikge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChTdmdJY29uLCBfZXh0ZW5kcyh7XG4gICAgICBcImRhdGEtdGVzdGlkXCI6IGAke2Rpc3BsYXlOYW1lfUljb25gLFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBwcm9wcywge1xuICAgICAgY2hpbGRyZW46IHBhdGhcbiAgICB9KSk7XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBOZWVkIHRvIHNldCBgZGlzcGxheU5hbWVgIG9uIHRoZSBpbm5lciBjb21wb25lbnQgZm9yIFJlYWN0Lm1lbW8uXG4gICAgLy8gUmVhY3QgcHJpb3IgdG8gMTYuMTQgaWdub3JlcyBgZGlzcGxheU5hbWVgIG9uIHRoZSB3cmFwcGVyLlxuICAgIENvbXBvbmVudC5kaXNwbGF5TmFtZSA9IGAke2Rpc3BsYXlOYW1lfUljb25gO1xuICB9XG4gIENvbXBvbmVudC5tdWlOYW1lID0gU3ZnSWNvbi5tdWlOYW1lO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0Lm1lbW8oIC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKENvbXBvbmVudCkpO1xufSIsImltcG9ydCB7IHVuc3RhYmxlX2RlYm91bmNlIGFzIGRlYm91bmNlIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCBkZWJvdW5jZTsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZXRTY3JvbGxiYXJTaXplIGFzIGdldFNjcm9sbGJhclNpemUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IGdldFNjcm9sbGJhclNpemU7IiwiaW1wb3J0IHsgdW5zdGFibGVfY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uIGFzIGNyZWF0ZUNoYWluZWRGdW5jdGlvbiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uOyIsImltcG9ydCB7IHVuc3RhYmxlX2RlcHJlY2F0ZWRQcm9wVHlwZSBhcyBkZXByZWNhdGVkUHJvcFR5cGUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IGRlcHJlY2F0ZWRQcm9wVHlwZTsiLCJpbXBvcnQgeyB1bnN0YWJsZV9yZXF1aXJlUHJvcEZhY3RvcnkgYXMgcmVxdWlyZVByb3BGYWN0b3J5IH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCByZXF1aXJlUHJvcEZhY3Rvcnk7IiwiaW1wb3J0IHsgdW5zdGFibGVfc2V0UmVmIGFzIHNldFJlZiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgc2V0UmVmOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgdW5zdGFibGVfdXNlSWQgYXMgdXNlSWQgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IHVzZUlkOyIsImltcG9ydCB7IHVuc3RhYmxlX3Vuc3VwcG9ydGVkUHJvcCBhcyB1bnN1cHBvcnRlZFByb3AgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IHVuc3VwcG9ydGVkUHJvcDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHVuc3RhYmxlX0NsYXNzTmFtZUdlbmVyYXRvciBhcyBDbGFzc05hbWVHZW5lcmF0b3IgfSBmcm9tICdAbXVpL2Jhc2UvQ2xhc3NOYW1lR2VuZXJhdG9yJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2FwaXRhbGl6ZSB9IGZyb20gJy4vY2FwaXRhbGl6ZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZUNoYWluZWRGdW5jdGlvbiB9IGZyb20gJy4vY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3JlYXRlU3ZnSWNvbiB9IGZyb20gJy4vY3JlYXRlU3ZnSWNvbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRlYm91bmNlIH0gZnJvbSAnLi9kZWJvdW5jZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRlcHJlY2F0ZWRQcm9wVHlwZSB9IGZyb20gJy4vZGVwcmVjYXRlZFByb3BUeXBlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNNdWlFbGVtZW50IH0gZnJvbSAnLi9pc011aUVsZW1lbnQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBvd25lckRvY3VtZW50IH0gZnJvbSAnLi9vd25lckRvY3VtZW50JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgb3duZXJXaW5kb3cgfSBmcm9tICcuL293bmVyV2luZG93JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcmVxdWlyZVByb3BGYWN0b3J5IH0gZnJvbSAnLi9yZXF1aXJlUHJvcEZhY3RvcnknO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzZXRSZWYgfSBmcm9tICcuL3NldFJlZic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVuc3RhYmxlX3VzZUVuaGFuY2VkRWZmZWN0IH0gZnJvbSAnLi91c2VFbmhhbmNlZEVmZmVjdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVuc3RhYmxlX3VzZUlkIH0gZnJvbSAnLi91c2VJZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVuc3VwcG9ydGVkUHJvcCB9IGZyb20gJy4vdW5zdXBwb3J0ZWRQcm9wJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXNlQ29udHJvbGxlZCB9IGZyb20gJy4vdXNlQ29udHJvbGxlZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZUV2ZW50Q2FsbGJhY2sgfSBmcm9tICcuL3VzZUV2ZW50Q2FsbGJhY2snO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VGb3JrUmVmIH0gZnJvbSAnLi91c2VGb3JrUmVmJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXNlSXNGb2N1c1Zpc2libGUgfSBmcm9tICcuL3VzZUlzRm9jdXNWaXNpYmxlJztcbi8vIFRPRE86IHJlbW92ZSB0aGlzIGV4cG9ydCBvbmNlIENsYXNzTmFtZUdlbmVyYXRvciBpcyBzdGFibGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCB1bnN0YWJsZV9DbGFzc05hbWVHZW5lcmF0b3IgPSB7XG4gIGNvbmZpZ3VyZTogZ2VuZXJhdG9yID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKFsnTVVJOiBgQ2xhc3NOYW1lR2VuZXJhdG9yYCBpbXBvcnQgZnJvbSBgQG11aS9tYXRlcmlhbC91dGlsc2AgaXMgb3V0ZGF0ZWQgYW5kIG1pZ2h0IGNhdXNlIHVuZXhwZWN0ZWQgaXNzdWVzLicsICcnLCBcIllvdSBzaG91bGQgdXNlIGBpbXBvcnQgeyB1bnN0YWJsZV9DbGFzc05hbWVHZW5lcmF0b3IgfSBmcm9tICdAbXVpL21hdGVyaWFsL2NsYXNzTmFtZSdgIGluc3RlYWRcIiwgJycsICdUaGUgZGV0YWlsIG9mIHRoZSBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9pc3N1ZXMvMzAwMTEjaXNzdWVjb21tZW50LTEwMjQ5OTM0MDEnLCAnJywgJ1RoZSB1cGRhdGVkIGRvY3VtZW50YXRpb246IGh0dHBzOi8vbXVpLmNvbS9ndWlkZXMvY2xhc3NuYW1lLWdlbmVyYXRvci8nXS5qb2luKCdcXG4nKSk7XG4gICAgfVxuICAgIENsYXNzTmFtZUdlbmVyYXRvci5jb25maWd1cmUoZ2VuZXJhdG9yKTtcbiAgfVxufTsiLCJpbXBvcnQgeyB1bnN0YWJsZV9pc011aUVsZW1lbnQgYXMgaXNNdWlFbGVtZW50IH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCBpc011aUVsZW1lbnQ7IiwiaW1wb3J0IHsgdW5zdGFibGVfb3duZXJEb2N1bWVudCBhcyBvd25lckRvY3VtZW50IH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCBvd25lckRvY3VtZW50OyIsImltcG9ydCB7IHVuc3RhYmxlX293bmVyV2luZG93IGFzIG93bmVyV2luZG93IH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCBvd25lcldpbmRvdzsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHVuc3RhYmxlX3VzZUNvbnRyb2xsZWQgYXMgdXNlQ29udHJvbGxlZCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgdXNlQ29udHJvbGxlZDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHVuc3RhYmxlX3VzZUVuaGFuY2VkRWZmZWN0IGFzIHVzZUVuaGFuY2VkRWZmZWN0IH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCB1c2VFbmhhbmNlZEVmZmVjdDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHVuc3RhYmxlX3VzZUV2ZW50Q2FsbGJhY2sgYXMgdXNlRXZlbnRDYWxsYmFjayB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgdXNlRXZlbnRDYWxsYmFjazsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHVuc3RhYmxlX3VzZUZvcmtSZWYgYXMgdXNlRm9ya1JlZiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgdXNlRm9ya1JlZjsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHVuc3RhYmxlX3VzZUlzRm9jdXNWaXNpYmxlIGFzIHVzZUlzRm9jdXNWaXNpYmxlIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCB1c2VJc0ZvY3VzVmlzaWJsZTsiLCJjb25zdCBoYXNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG5leHBvcnQgZGVmYXVsdCBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdtdWkubmVzdGVkJykgOiAnX19USEVNRV9ORVNURURfXyc7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgZXhhY3RQcm9wIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgVGhlbWVDb250ZXh0IGZyb20gJy4uL3VzZVRoZW1lL1RoZW1lQ29udGV4dCc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vdXNlVGhlbWUnO1xuaW1wb3J0IG5lc3RlZCBmcm9tICcuL25lc3RlZCc7XG5cbi8vIFRvIHN1cHBvcnQgY29tcG9zaXRpb24gb2YgdGhlbWUuXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gbWVyZ2VPdXRlckxvY2FsVGhlbWUob3V0ZXJUaGVtZSwgbG9jYWxUaGVtZSkge1xuICBpZiAodHlwZW9mIGxvY2FsVGhlbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCBtZXJnZWRUaGVtZSA9IGxvY2FsVGhlbWUob3V0ZXJUaGVtZSk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICghbWVyZ2VkVGhlbWUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogWW91IHNob3VsZCByZXR1cm4gYW4gb2JqZWN0IGZyb20geW91ciB0aGVtZSBmdW5jdGlvbiwgaS5lLicsICc8VGhlbWVQcm92aWRlciB0aGVtZT17KCkgPT4gKHt9KX0gLz4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXJnZWRUaGVtZTtcbiAgfVxuICByZXR1cm4gX2V4dGVuZHMoe30sIG91dGVyVGhlbWUsIGxvY2FsVGhlbWUpO1xufVxuXG4vKipcbiAqIFRoaXMgY29tcG9uZW50IHRha2VzIGEgYHRoZW1lYCBwcm9wLlxuICogSXQgbWFrZXMgdGhlIGB0aGVtZWAgYXZhaWxhYmxlIGRvd24gdGhlIFJlYWN0IHRyZWUgdGhhbmtzIHRvIFJlYWN0IGNvbnRleHQuXG4gKiBUaGlzIGNvbXBvbmVudCBzaG91bGQgcHJlZmVyYWJseSBiZSB1c2VkIGF0ICoqdGhlIHJvb3Qgb2YgeW91ciBjb21wb25lbnQgdHJlZSoqLlxuICovXG5mdW5jdGlvbiBUaGVtZVByb3ZpZGVyKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICB0aGVtZTogbG9jYWxUaGVtZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG91dGVyVGhlbWUgPSB1c2VUaGVtZSgpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChvdXRlclRoZW1lID09PSBudWxsICYmIHR5cGVvZiBsb2NhbFRoZW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBZb3UgYXJlIHByb3ZpZGluZyBhIHRoZW1lIGZ1bmN0aW9uIHByb3AgdG8gdGhlIFRoZW1lUHJvdmlkZXIgY29tcG9uZW50OicsICc8VGhlbWVQcm92aWRlciB0aGVtZT17b3V0ZXJUaGVtZSA9PiBvdXRlclRoZW1lfSAvPicsICcnLCAnSG93ZXZlciwgbm8gb3V0ZXIgdGhlbWUgaXMgcHJlc2VudC4nLCAnTWFrZSBzdXJlIGEgdGhlbWUgaXMgYWxyZWFkeSBpbmplY3RlZCBoaWdoZXIgaW4gdGhlIFJlYWN0IHRyZWUgJyArICdvciBwcm92aWRlIGEgdGhlbWUgb2JqZWN0LiddLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdGhlbWUgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBvdXRlclRoZW1lID09PSBudWxsID8gbG9jYWxUaGVtZSA6IG1lcmdlT3V0ZXJMb2NhbFRoZW1lKG91dGVyVGhlbWUsIGxvY2FsVGhlbWUpO1xuICAgIGlmIChvdXRwdXQgIT0gbnVsbCkge1xuICAgICAgb3V0cHV0W25lc3RlZF0gPSBvdXRlclRoZW1lICE9PSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9LCBbbG9jYWxUaGVtZSwgb3V0ZXJUaGVtZV0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVGhlbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHRoZW1lLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICB9KTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRoZW1lUHJvdmlkZXIucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogWW91ciBjb21wb25lbnQgdHJlZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEEgdGhlbWUgb2JqZWN0LiBZb3UgY2FuIHByb3ZpZGUgYSBmdW5jdGlvbiB0byBleHRlbmQgdGhlIG91dGVyIHRoZW1lLlxuICAgKi9cbiAgdGhlbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5mdW5jXSkuaXNSZXF1aXJlZFxufSA6IHZvaWQgMDtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRoZW1lUHJvdmlkZXIucHJvcFR5cGVzID0gZXhhY3RQcm9wKFRoZW1lUHJvdmlkZXIucHJvcFR5cGVzKSA6IHZvaWQgMDtcbn1cbmV4cG9ydCBkZWZhdWx0IFRoZW1lUHJvdmlkZXI7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuY29uc3QgVGhlbWVDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBUaGVtZUNvbnRleHQuZGlzcGxheU5hbWUgPSAnVGhlbWVDb250ZXh0Jztcbn1cbmV4cG9ydCBkZWZhdWx0IFRoZW1lQ29udGV4dDsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVGhlbWVDb250ZXh0IGZyb20gJy4vVGhlbWVDb250ZXh0JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICBjb25zdCB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VEZWJ1Z1ZhbHVlKHRoZW1lKTtcbiAgfVxuICByZXR1cm4gdGhlbWU7XG59IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gIHJldHVybiBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgfHwgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHbG9iYWxTdHlsZXMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIHN0eWxlcyxcbiAgICBkZWZhdWx0VGhlbWUgPSB7fVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGdsb2JhbFN0eWxlcyA9IHR5cGVvZiBzdHlsZXMgPT09ICdmdW5jdGlvbicgPyB0aGVtZUlucHV0ID0+IHN0eWxlcyhpc0VtcHR5KHRoZW1lSW5wdXQpID8gZGVmYXVsdFRoZW1lIDogdGhlbWVJbnB1dCkgOiBzdHlsZXM7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChHbG9iYWwsIHtcbiAgICBzdHlsZXM6IGdsb2JhbFN0eWxlc1xuICB9KTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEdsb2JhbFN0eWxlcy5wcm9wVHlwZXMgPSB7XG4gIGRlZmF1bHRUaGVtZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgc3R5bGVzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXksIFByb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5mdW5jXSlcbn0gOiB2b2lkIDA7IiwiLyoqXG4gKiBAbXVpL3N0eWxlZC1lbmdpbmUgdjUuMTQuMjBcbiAqXG4gKiBAbGljZW5zZSBNSVRcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIGNsaWVudCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5pbXBvcnQgZW1TdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0eWxlZCh0YWcsIG9wdGlvbnMpIHtcbiAgY29uc3Qgc3R5bGVzRmFjdG9yeSA9IGVtU3R5bGVkKHRhZywgb3B0aW9ucyk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgcmV0dXJuICguLi5zdHlsZXMpID0+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHR5cGVvZiB0YWcgPT09ICdzdHJpbmcnID8gYFwiJHt0YWd9XCJgIDogJ2NvbXBvbmVudCc7XG4gICAgICBpZiAoc3R5bGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBTZWVtcyBsaWtlIHlvdSBjYWxsZWQgXFxgc3R5bGVkKCR7Y29tcG9uZW50fSkoKVxcYCB3aXRob3V0IGEgXFxgc3R5bGVcXGAgYXJndW1lbnQuYCwgJ1lvdSBtdXN0IHByb3ZpZGUgYSBgc3R5bGVzYCBhcmd1bWVudDogYHN0eWxlZChcImRpdlwiKShzdHlsZVlvdUZvcmdvdFRvUGFzcylgLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGVzLnNvbWUoc3R5bGUgPT4gc3R5bGUgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiB0aGUgc3R5bGVkKCR7Y29tcG9uZW50fSkoLi4uYXJncykgQVBJIHJlcXVpcmVzIGFsbCBpdHMgYXJncyB0byBiZSBkZWZpbmVkLmApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlc0ZhY3RvcnkoLi4uc3R5bGVzKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBzdHlsZXNGYWN0b3J5O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgaW50ZXJuYWxfcHJvY2Vzc1N0eWxlcyA9ICh0YWcsIHByb2Nlc3NvcikgPT4ge1xuICAvLyBFbW90aW9uIGF0dGFjaGVzIGFsbCB0aGUgc3R5bGVzIGFzIGBfX2Vtb3Rpb25fc3R5bGVzYC5cbiAgLy8gUmVmOiBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2Jsb2IvMTZkOTcxZDBkYTIyOTU5NmQ2YmNjMzlkMjgyYmE5NzUzYzllZTdjZi9wYWNrYWdlcy9zdHlsZWQvc3JjL2Jhc2UuanMjTDE4NlxuICBpZiAoQXJyYXkuaXNBcnJheSh0YWcuX19lbW90aW9uX3N0eWxlcykpIHtcbiAgICB0YWcuX19lbW90aW9uX3N0eWxlcyA9IHByb2Nlc3Nvcih0YWcuX19lbW90aW9uX3N0eWxlcyk7XG4gIH1cbn07XG5leHBvcnQgeyBUaGVtZUNvbnRleHQsIGtleWZyYW1lcywgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdHlsZWRFbmdpbmVQcm92aWRlciB9IGZyb20gJy4vU3R5bGVkRW5naW5lUHJvdmlkZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBHbG9iYWxTdHlsZXMgfSBmcm9tICcuL0dsb2JhbFN0eWxlcyc7Il0sIm5hbWVzIjpbImdldFNlbGVjdFV0aWxpdHlDbGFzc2VzIiwic2xvdCIsImdlbmVyYXRlVXRpbGl0eUNsYXNzIiwiZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyIsIl9zcGFuIiwiX2V4Y2x1ZGVkIiwiU2VsZWN0U2VsZWN0Iiwic3R5bGVkIiwibmFtZSIsIm92ZXJyaWRlc1Jlc29sdmVyIiwicHJvcHMiLCJzdHlsZXMiLCJvd25lclN0YXRlIiwic2VsZWN0IiwidmFyaWFudCIsImVycm9yIiwibXVsdGlwbGUiLCJoZWlnaHQiLCJtaW5IZWlnaHQiLCJ0ZXh0T3ZlcmZsb3ciLCJ3aGl0ZVNwYWNlIiwib3ZlcmZsb3ciLCJTZWxlY3RJY29uIiwiaWNvbiIsImNhcGl0YWxpemUiLCJvcGVuIiwiaWNvbk9wZW4iLCJTZWxlY3ROYXRpdmVJbnB1dCIsInNob3VsZEZvcndhcmRQcm9wIiwicHJvcCIsIm5hdGl2ZUlucHV0IiwiYm90dG9tIiwibGVmdCIsInBvc2l0aW9uIiwib3BhY2l0eSIsInBvaW50ZXJFdmVudHMiLCJ3aWR0aCIsImJveFNpemluZyIsImFyZUVxdWFsVmFsdWVzIiwiYSIsImIiLCJTdHJpbmciLCJpc0VtcHR5IiwiZGlzcGxheSIsInRyaW0iLCJyZWYiLCJfTWVudVByb3BzJHNsb3RQcm9wcyIsImFyaWFEZXNjcmliZWRieSIsImFyaWFMYWJlbCIsImF1dG9Gb2N1cyIsImF1dG9XaWR0aCIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwiZGVmYXVsdE9wZW4iLCJkZWZhdWx0VmFsdWUiLCJkaXNhYmxlZCIsImRpc3BsYXlFbXB0eSIsIkljb25Db21wb25lbnQiLCJpbnB1dFJlZiIsImlucHV0UmVmUHJvcCIsImxhYmVsSWQiLCJNZW51UHJvcHMiLCJvbkJsdXIiLCJvbkNoYW5nZSIsIm9uQ2xvc2UiLCJvbkZvY3VzIiwib25PcGVuIiwib3BlblByb3AiLCJyZWFkT25seSIsInJlbmRlclZhbHVlIiwiU2VsZWN0RGlzcGxheVByb3BzIiwidGFiSW5kZXgiLCJ0YWJJbmRleFByb3AiLCJ2YWx1ZSIsInZhbHVlUHJvcCIsIm90aGVyIiwic2V0VmFsdWVTdGF0ZSIsInVzZUNvbnRyb2xsZWQiLCJjb250cm9sbGVkIiwiZGVmYXVsdCIsIm9wZW5TdGF0ZSIsInNldE9wZW5TdGF0ZSIsImRpc3BsYXlSZWYiLCJkaXNwbGF5Tm9kZSIsInNldERpc3BsYXlOb2RlIiwiY3VycmVudCIsImlzT3BlbkNvbnRyb2xsZWQiLCJtZW51TWluV2lkdGhTdGF0ZSIsInNldE1lbnVNaW5XaWR0aFN0YXRlIiwiaGFuZGxlUmVmIiwidXNlRm9ya1JlZiIsImhhbmRsZURpc3BsYXlSZWYiLCJub2RlIiwiYW5jaG9yRWxlbWVudCIsInBhcmVudE5vZGUiLCJmb2N1cyIsImNsaWVudFdpZHRoIiwibGFiZWwiLCJvd25lckRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJoYW5kbGVyIiwiZ2V0U2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInVwZGF0ZSIsImV2ZW50IiwiY2hpbGRyZW5BcnJheSIsInRvQXJyYXkiLCJoYW5kbGVJdGVtQ2xpY2siLCJjaGlsZCIsIm5ld1ZhbHVlIiwiY3VycmVudFRhcmdldCIsImhhc0F0dHJpYnV0ZSIsIkFycmF5IiwiaXNBcnJheSIsInNsaWNlIiwiaXRlbUluZGV4IiwiaW5kZXhPZiIsInB1c2giLCJzcGxpY2UiLCJvbkNsaWNrIiwibmF0aXZlRXZlbnQiLCJjbG9uZWRFdmVudCIsImNvbnN0cnVjdG9yIiwidHlwZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5Iiwid3JpdGFibGUiLCJkaXNwbGF5U2luZ2xlIiwiZGlzcGxheU11bHRpcGxlIiwiY29tcHV0ZURpc3BsYXkiLCJmb3VuZE1hdGNoIiwiaXRlbXMiLCJtYXAiLCJzZWxlY3RlZCIsIkVycm9yIiwic29tZSIsInYiLCJvbktleVVwIiwia2V5IiwicHJldmVudERlZmF1bHQiLCJyb2xlIiwidW5kZWZpbmVkIiwibGVuZ3RoIiwicmVkdWNlIiwib3V0cHV0IiwiaW5kZXgiLCJtZW51TWluV2lkdGgiLCJidXR0b25JZCIsImlkIiwiY2xhc3NlcyIsInNsb3RzIiwiY29tcG9zZUNsYXNzZXMiLCJ1c2VVdGlsaXR5Q2xhc3NlcyIsInBhcGVyUHJvcHMiLCJQYXBlclByb3BzIiwic2xvdFByb3BzIiwicGFwZXIiLCJsaXN0Ym94SWQiLCJ1c2VJZCIsImhpZGRlbklucHV0SWQiLCJmaWx0ZXIiLCJCb29sZWFuIiwiam9pbiIsIm9uS2V5RG93biIsIm9uTW91c2VEb3duIiwiYnV0dG9uIiwiY2xzeCIsImZpbmQiLCJjaGlsZEl0ZW0iLCJ0YXJnZXQiLCJhcyIsIk1lbnUiLCJhbmNob3JFbCIsImFuY2hvck9yaWdpbiIsInZlcnRpY2FsIiwiaG9yaXpvbnRhbCIsInRyYW5zZm9ybU9yaWdpbiIsIk1lbnVMaXN0UHJvcHMiLCJkaXNhYmxlTGlzdFdyYXAiLCJzdHlsZSIsIm1pbldpZHRoIiwiZCIsIl9leGNsdWRlZDIiLCJzdHlsZWRSb290Q29uZmlnIiwicm9vdCIsIlN0eWxlZElucHV0IiwiSW5wdXQiLCJTdHlsZWRPdXRsaW5lZElucHV0IiwiT3V0bGluZWRJbnB1dCIsIlN0eWxlZEZpbGxlZElucHV0IiwiRmlsbGVkSW5wdXQiLCJTZWxlY3QiLCJpblByb3BzIiwidXNlVGhlbWVQcm9wcyIsImNsYXNzZXNQcm9wIiwiQXJyb3dEcm9wRG93biIsImlucHV0IiwiaW5wdXRQcm9wcyIsIm5hdGl2ZSIsInZhcmlhbnRQcm9wIiwiaW5wdXRDb21wb25lbnQiLCJOYXRpdmVTZWxlY3RJbnB1dCIsIm11aUZvcm1Db250cm9sIiwidXNlRm9ybUNvbnRyb2wiLCJmY3MiLCJmb3JtQ29udHJvbFN0YXRlIiwic3RhdGVzIiwicmVzdE9mQ2xhc3NlcyIsIklucHV0Q29tcG9uZW50Iiwic3RhbmRhcmQiLCJvdXRsaW5lZCIsImZpbGxlZCIsImlucHV0Q29tcG9uZW50UmVmIiwiZGVlcG1lcmdlIiwibm90Y2hlZCIsIm11aU5hbWUiLCJnZXRUZXh0RmllbGRVdGlsaXR5Q2xhc3MiLCJ2YXJpYW50Q29tcG9uZW50IiwiVGV4dEZpZWxkUm9vdCIsIkZvcm1Db250cm9sIiwiYXV0b0NvbXBsZXRlIiwiY29sb3IiLCJGb3JtSGVscGVyVGV4dFByb3BzIiwiZnVsbFdpZHRoIiwiaGVscGVyVGV4dCIsImlkT3ZlcnJpZGUiLCJJbnB1dExhYmVsUHJvcHMiLCJJbnB1dFByb3BzIiwibWF4Um93cyIsIm1pblJvd3MiLCJtdWx0aWxpbmUiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwicm93cyIsIlNlbGVjdFByb3BzIiwiSW5wdXRNb3JlIiwic2hyaW5rIiwiaGVscGVyVGV4dElkIiwiaW5wdXRMYWJlbElkIiwiSW5wdXRFbGVtZW50IiwiSW5wdXRMYWJlbCIsImh0bWxGb3IiLCJGb3JtSGVscGVyVGV4dCIsImdldFRvb2xiYXJVdGlsaXR5Q2xhc3MiLCJUb29sYmFyUm9vdCIsImRpc2FibGVHdXR0ZXJzIiwiZ3V0dGVycyIsInRoZW1lIiwiYWxpZ25JdGVtcyIsInBhZGRpbmdMZWZ0Iiwic3BhY2luZyIsInBhZGRpbmdSaWdodCIsImJyZWFrcG9pbnRzIiwidXAiLCJtaXhpbnMiLCJ0b29sYmFyIiwiY29tcG9uZW50IiwiZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcyIsIlR5cG9ncmFwaHlSb290IiwiYWxpZ24iLCJub1dyYXAiLCJndXR0ZXJCb3R0b20iLCJwYXJhZ3JhcGgiLCJtYXJnaW4iLCJmb250IiwidHlwb2dyYXBoeSIsInRleHRBbGlnbiIsIm1hcmdpbkJvdHRvbSIsImRlZmF1bHRWYXJpYW50TWFwcGluZyIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsInN1YnRpdGxlMSIsInN1YnRpdGxlMiIsImJvZHkxIiwiYm9keTIiLCJpbmhlcml0IiwiY29sb3JUcmFuc2Zvcm1hdGlvbnMiLCJwcmltYXJ5IiwidGV4dFByaW1hcnkiLCJzZWNvbmRhcnkiLCJ0ZXh0U2Vjb25kYXJ5IiwidGhlbWVQcm9wcyIsInRyYW5zZm9ybURlcHJlY2F0ZWRDb2xvcnMiLCJleHRlbmRTeFByb3AiLCJ2YXJpYW50TWFwcGluZyIsIkNvbXBvbmVudCIsIlRoZW1lUHJvdmlkZXIiLCJfcmVmIiwidGhlbWVJbnB1dCIsInNjb3BlZFRoZW1lIiwidGhlbWVJZCIsImJsYWNrIiwid2hpdGUiLCJBMTAwIiwiQTIwMCIsIkE0MDAiLCJBNzAwIiwibGlnaHQiLCJ0ZXh0IiwiZGl2aWRlciIsImJhY2tncm91bmQiLCJhY3Rpb24iLCJhY3RpdmUiLCJob3ZlciIsImhvdmVyT3BhY2l0eSIsInNlbGVjdGVkT3BhY2l0eSIsImRpc2FibGVkQmFja2dyb3VuZCIsImRpc2FibGVkT3BhY2l0eSIsImZvY3VzT3BhY2l0eSIsImFjdGl2YXRlZE9wYWNpdHkiLCJkYXJrIiwiYWRkTGlnaHRPckRhcmsiLCJpbnRlbnQiLCJkaXJlY3Rpb24iLCJzaGFkZSIsInRvbmFsT2Zmc2V0IiwidG9uYWxPZmZzZXRMaWdodCIsInRvbmFsT2Zmc2V0RGFyayIsImhhc093blByb3BlcnR5IiwibWFpbiIsImNhc2VBbGxDYXBzIiwidGV4dFRyYW5zZm9ybSIsImRlZmF1bHRGb250RmFtaWx5IiwiY3JlYXRlVHlwb2dyYXBoeSIsInBhbGV0dGUiLCJmb250RmFtaWx5IiwiZm9udFNpemUiLCJmb250V2VpZ2h0TGlnaHQiLCJmb250V2VpZ2h0UmVndWxhciIsImZvbnRXZWlnaHRNZWRpdW0iLCJmb250V2VpZ2h0Qm9sZCIsImh0bWxGb250U2l6ZSIsImFsbFZhcmlhbnRzIiwicHhUb1JlbSIsInB4VG9SZW0yIiwiY29lZiIsInNpemUiLCJidWlsZFZhcmlhbnQiLCJmb250V2VpZ2h0IiwibGluZUhlaWdodCIsImxldHRlclNwYWNpbmciLCJjYXNpbmciLCJNYXRoIiwicm91bmQiLCJ2YXJpYW50cyIsImNhcHRpb24iLCJvdmVybGluZSIsImNsb25lIiwiY3JlYXRlU2hhZG93IiwicHgiLCJlYXNpbmciLCJlYXNlSW5PdXQiLCJlYXNlT3V0IiwiZWFzZUluIiwic2hhcnAiLCJkdXJhdGlvbiIsInNob3J0ZXN0Iiwic2hvcnRlciIsInNob3J0IiwiY29tcGxleCIsImVudGVyaW5nU2NyZWVuIiwibGVhdmluZ1NjcmVlbiIsImZvcm1hdE1zIiwibWlsbGlzZWNvbmRzIiwiZ2V0QXV0b0hlaWdodER1cmF0aW9uIiwiY29uc3RhbnQiLCJjcmVhdGVUcmFuc2l0aW9ucyIsImlucHV0VHJhbnNpdGlvbnMiLCJtZXJnZWRFYXNpbmciLCJtZXJnZWREdXJhdGlvbiIsImNyZWF0ZSIsIm9wdGlvbnMiLCJkdXJhdGlvbk9wdGlvbiIsImVhc2luZ09wdGlvbiIsImRlbGF5IiwiYW5pbWF0ZWRQcm9wIiwibW9iaWxlU3RlcHBlciIsImZhYiIsInNwZWVkRGlhbCIsImFwcEJhciIsImRyYXdlciIsIm1vZGFsIiwic25hY2tiYXIiLCJ0b29sdGlwIiwiYXJncyIsIm1peGluc0lucHV0IiwicGFsZXR0ZUlucHV0IiwidHJhbnNpdGlvbnMiLCJ0cmFuc2l0aW9uc0lucHV0IiwidHlwb2dyYXBoeUlucHV0IiwidmFycyIsIm1vZGUiLCJjb250cmFzdFRocmVzaG9sZCIsImdldERlZmF1bHRQcmltYXJ5IiwiZ2V0RGVmYXVsdFNlY29uZGFyeSIsImdldERlZmF1bHRFcnJvciIsImluZm8iLCJnZXREZWZhdWx0SW5mbyIsInN1Y2Nlc3MiLCJnZXREZWZhdWx0U3VjY2VzcyIsIndhcm5pbmciLCJnZXREZWZhdWx0V2FybmluZyIsImdldENvbnRyYXN0VGV4dCIsImF1Z21lbnRDb2xvciIsIm1haW5TaGFkZSIsImxpZ2h0U2hhZGUiLCJkYXJrU2hhZGUiLCJKU09OIiwic3RyaW5naWZ5IiwiY29udHJhc3RUZXh0IiwibW9kZXMiLCJjb21tb24iLCJncmV5IiwiY3JlYXRlUGFsZXR0ZSIsInN5c3RlbVRoZW1lIiwibXVpVGhlbWUiLCJzaGFkb3dzIiwiekluZGV4IiwiYWNjIiwiYXJndW1lbnQiLCJ1bnN0YWJsZV9zeENvbmZpZyIsImRlZmF1bHRTeENvbmZpZyIsInVuc3RhYmxlX3N4Iiwic3R5bGVGdW5jdGlvblN4Iiwic3giLCJ0aGlzIiwiZWxldmF0aW9uIiwiYWxwaGFWYWx1ZSIsImxvZyIsInRvRml4ZWQiLCJyb290U2hvdWxkRm9yd2FyZFByb3AiLCJzbG90U2hvdWxkRm9yd2FyZFByb3AiLCJkZWZhdWx0VGhlbWUiLCJ1c2VUaGVtZSIsInJlZmxvdyIsInNjcm9sbFRvcCIsImdldFRyYW5zaXRpb25Qcm9wcyIsIl9zdHlsZSR0cmFuc2l0aW9uRHVyYSIsIl9zdHlsZSR0cmFuc2l0aW9uVGltaSIsInRpbWVvdXQiLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJ0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24iLCJ0cmFuc2l0aW9uRGVsYXkiLCJnZXRTdmdJY29uVXRpbGl0eUNsYXNzIiwiU3ZnSWNvblJvb3QiLCJfdGhlbWUkdHJhbnNpdGlvbnMiLCJfdGhlbWUkdHJhbnNpdGlvbnMkY3IiLCJfdGhlbWUkdHJhbnNpdGlvbnMyIiwiX3RoZW1lJHR5cG9ncmFwaHkiLCJfdGhlbWUkdHlwb2dyYXBoeSRweFQiLCJfdGhlbWUkdHlwb2dyYXBoeTIiLCJfdGhlbWUkdHlwb2dyYXBoeTIkcHgiLCJfdGhlbWUkdHlwb2dyYXBoeTMiLCJfdGhlbWUkdHlwb2dyYXBoeTMkcHgiLCJfcGFsZXR0ZSRvd25lclN0YXRlJGMiLCJfcGFsZXR0ZSIsIl9wYWxldHRlMiIsIl9wYWxldHRlMyIsInVzZXJTZWxlY3QiLCJmaWxsIiwiaGFzU3ZnQXNDaGlsZCIsImZsZXhTaHJpbmsiLCJ0cmFuc2l0aW9uIiwiY2FsbCIsInNtYWxsIiwibWVkaXVtIiwibGFyZ2UiLCJTdmdJY29uIiwiaHRtbENvbG9yIiwiaW5oZXJpdFZpZXdCb3giLCJ0aXRsZUFjY2VzcyIsInZpZXdCb3giLCJpbnN0YW5jZUZvbnRTaXplIiwibW9yZSIsImZvY3VzYWJsZSIsImNyZWF0ZVN2Z0ljb24iLCJwYXRoIiwiZGlzcGxheU5hbWUiLCJ1bnN0YWJsZV9DbGFzc05hbWVHZW5lcmF0b3IiLCJjb25maWd1cmUiLCJnZW5lcmF0b3IiLCJDbGFzc05hbWVHZW5lcmF0b3IiLCJTeW1ib2wiLCJmb3IiLCJsb2NhbFRoZW1lIiwib3V0ZXJUaGVtZSIsIm1lcmdlT3V0ZXJMb2NhbFRoZW1lIiwibmVzdGVkIiwiVGhlbWVDb250ZXh0IiwiUHJvdmlkZXIiLCJHbG9iYWxTdHlsZXMiLCJnbG9iYWxTdHlsZXMiLCJvYmoiLCJrZXlzIiwidGFnIiwiaW50ZXJuYWxfcHJvY2Vzc1N0eWxlcyIsInByb2Nlc3NvciIsIl9fZW1vdGlvbl9zdHlsZXMiXSwic291cmNlUm9vdCI6IiJ9