/*! For license information please see 931.f8e6afa1.js.LICENSE.txt */ "use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[931],{7303:(e,t,r)=>{r.d(t,{Z:()=>Q});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(7719),m=r(5961),h=r(5108),g=r(948),v=r(1705);const b=r(9032).Z;var Z=r(1588),y=r(4867);function x(e){return(0,y.Z)("MuiSelect",e)}const S=(0,Z.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),O=(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 C(e){return null==e||"string"==typeof e&&!e.trim()}const I=a.forwardRef((function(e,t){var r;const{"aria-describedby":l,"aria-label":m,autoFocus:g,autoWidth:Z,children:y,className:S,defaultOpen:I,defaultValue:F,disabled:$,displayEmpty:W,error:T=!1,IconComponent:j,inputRef:z,labelId:B,MenuProps:N={},multiple:E,name:D,onBlur:_,onChange:V,onClose:L,onFocus:H,onOpen:G,open:U,readOnly:q,renderValue:K,SelectDisplayProps:J={},tabIndex:Q,value:X,variant:Y="standard"}=e,ee=(0,o.Z)(e,A),[te,re]=b({controlled:X,default:F,name:"Select"}),[ne,oe]=b({controlled:U,default:I,name:"Select"}),ae=a.useRef(null),ie=a.useRef(null),[le,se]=a.useState(null),{current:ce}=a.useRef(null!=U),[ue,de]=a.useState(),pe=(0,v.Z)(t,z),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((()=>{I&&ne&&le&&!ce&&(de(Z?null:me.clientWidth),ie.current.focus())}),[le,Z]),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):L&&L(t),ce||(de(Z?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:D}}),V(o,e)}E||he(!1,t)}},be=null!==le&≠let Ze,ye;delete ee["aria-invalid"];const xe=[];let Se=!1,we=!1;((0,h.vd)({value:te})||W)&&(K?Ze=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&&(Ze=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)})(Oe),Ce=(0,n.Z)({},N.PaperProps,null==(r=N.slotProps)?void 0:r.paper),Ie=(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":Ie,"aria-disabled":$?"true":void 0,"aria-expanded":be?"true":"false","aria-haspopup":"listbox","aria-label":m,"aria-labelledby":[B,Re].filter(Boolean).join(" ")||void 0,"aria-describedby":l,onKeyDown:e=>{q||-1!==[" ","ArrowUp","ArrowDown","Enter"].indexOf(e.key)&&(e.preventDefault(),he(!0,e))},onMouseDown:$||q?null:e=>{0===e.button&&(e.preventDefault(),ie.current.focus(),he(!0,e))},onBlur:e=>{!be&&_&&(Object.defineProperty(e,"target",{writable:!0,value:{value:te,name:D}}),_(e))},onFocus:H},J,{ownerState:Oe,className:(0,i.Z)(J.className,Me.select,S),id:Re,children:C(Ze)?w||(w=(0,P.jsx)("span",{className:"notranslate",children:"​"})):Ze})),(0,P.jsx)(O,(0,n.Z)({"aria-invalid":T,value:Array.isArray(te)?te.join(","):te,name:D,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:Oe},ee)),(0,P.jsx)(R,{as:j,className:Me.icon,ownerState:Oe}),(0,P.jsx)(f.Z,(0,n.Z)({id:`menu-${D||""}`,anchorEl:me,open:be,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:Ie},N.MenuListProps),slotProps:(0,n.Z)({},N.slotProps,{paper:(0,n.Z)({},Ce,{style:(0,n.Z)({minWidth:ke},null!=Ce?Ce.style:null)})}),children:Pe}))]})}));var F=r(5704),$=r(4423),W=r(1657);function T(e){return(0,y.Z)("MuiSvgIcon",e)}(0,Z.Z)("MuiSvgIcon",["root","colorPrimary","colorSecondary","colorAction","colorError","colorDisabled","fontSizeInherit","fontSizeSmall","fontSizeMedium","fontSizeLarge"]);const j=["children","className","color","component","fontSize","htmlColor","inheritViewBox","titleAccess","viewBox"],z=(0,g.ZP)("svg",{name:"MuiSvgIcon",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[t.root,"inherit"!==r.color&&t[`color${(0,p.Z)(r.color)}`],t[`fontSize${(0,p.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]}})),B=a.forwardRef((function(e,t){const r=(0,W.Z)({props:e,name:"MuiSvgIcon"}),{children:l,className:s,color:u="inherit",component:d="svg",fontSize:f="medium",htmlColor:m,inheritViewBox:h=!1,titleAccess:g,viewBox:v="0 0 24 24"}=r,b=(0,o.Z)(r,j),Z=a.isValidElement(l)&&"svg"===l.type,y=(0,n.Z)({},r,{color:u,component:d,fontSize:f,instanceFontSize:e.fontSize,inheritViewBox:h,viewBox:v,hasSvgAsChild:Z}),x={};h||(x.viewBox=v);const S=(e=>{const{color:t,fontSize:r,classes:n}=e,o={root:["root","inherit"!==t&&`color${(0,p.Z)(t)}`,`fontSize${(0,p.Z)(r)}`]};return(0,c.Z)(o,T,n)})(y);return(0,P.jsxs)(z,(0,n.Z)({as:d,className:(0,i.Z)(S.root,s),focusable:"false",color:m,"aria-hidden":!g||void 0,role:g?"img":void 0,ref:t},x,b,Z&&l.props,{ownerState:y,children:[Z?l.props.children:l,g?(0,P.jsx)("title",{children:g}):null]}))}));B.muiName="SvgIcon";const N=B,E=function(e,t){function r(t,r){return(0,P.jsx)(N,(0,n.Z)({"data-testid":"ArrowDropDownIcon",ref:r},t,{children:e}))}return r.muiName=N.muiName,a.memo(a.forwardRef(r))}((0,P.jsx)("path",{d:"M7 10l5 5 5-5z"}));var D=r(3981),_=r(6723),V=r(3031);const L=["autoWidth","children","classes","className","defaultOpen","displayEmpty","IconComponent","id","input","inputProps","label","labelId","MenuProps","multiple","native","onClose","onOpen","open","renderValue","SelectDisplayProps","variant"],H=["root"],G={name:"MuiSelect",overridesResolver:(e,t)=>t.root,shouldForwardProp:e=>(0,g.FO)(e)&&"variant"!==e,slot:"Root"},U=(0,g.ZP)(D.Z,G)(""),q=(0,g.ZP)(V.Z,G)(""),K=(0,g.ZP)(_.Z,G)(""),J=a.forwardRef((function(e,t){const r=(0,W.Z)({name:"MuiSelect",props:e}),{autoWidth:s=!1,children:c,classes:u={},className:d,defaultOpen:p=!1,displayEmpty:f=!1,IconComponent:h=E,id:g,input:b,inputProps:Z,label:y,labelId:x,MenuProps:S,multiple:w=!1,native:A=!1,onClose:k,onOpen:R,open:O,renderValue:M,SelectDisplayProps:C,variant:T="outlined"}=r,j=(0,o.Z)(r,L),z=A?m.ZP:I,B=(0,$.Z)(),N=(0,F.Z)({props:r,muiFormControl:B,states:["variant","error"]}),D=N.variant||T,_=(0,n.Z)({},r,{variant:D,classes:u}),V=(e=>{const{classes:t}=e;return t})(_),G=(0,o.Z)(V,H),J=b||{standard:(0,P.jsx)(U,{ownerState:_}),outlined:(0,P.jsx)(q,{label:y,ownerState:_}),filled:(0,P.jsx)(K,{ownerState:_})}[D],Q=(0,v.Z)(t,J.ref);return(0,P.jsx)(a.Fragment,{children:a.cloneElement(J,(0,n.Z)({inputComponent:z,inputProps:(0,n.Z)({children:c,error:N.error,IconComponent:h,variant:D,type:void 0,multiple:w},A?{id:g}:{autoWidth:s,defaultOpen:p,displayEmpty:f,labelId:x,MenuProps:S,onClose:k,onOpen:R,open:O,renderValue:M,SelectDisplayProps:(0,n.Z)({id:g},C)},Z,{classes:Z?(0,l.Z)(G,Z.classes):G},b?b.props.inputProps:{})},w&&A&&"outlined"===D?{notched:!0}:{},{ref:Q,className:(0,i.Z)(J.props.className,d,V.root)},!b&&{variant:D},j))})}));J.muiName="Select";const Q=J},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(7303),b=r(1588),Z=r(4867);function y(e){return(0,Z.Z)("MuiTextField",e)}(0,b.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:b=!1,error:Z=!1,FormHelperTextProps:A,fullWidth:k=!1,helperText:R,id:O,InputLabelProps:M,inputProps:C,InputProps:I,inputRef:F,label:$,maxRows:W,minRows:T,multiline:j=!1,name:z,onBlur:B,onChange:N,onFocus:E,placeholder:D,required:_=!1,rows:V,select:L=!1,SelectProps:H,type:G,value:U,variant:q="outlined"}=r,K=(0,o.Z)(r,S),J=(0,n.Z)({},r,{autoFocus:c,color:f,disabled:b,error:Z,fullWidth:k,multiline:j,required:_,select:L,variant:q}),Q=(e=>{const{classes:t}=e;return(0,l.Z)({root:["root"]},y,t)})(J),X={};"outlined"===q&&(M&&void 0!==M.shrink&&(X.notched=M.shrink),X.label=$),L&&(H&&H.native||(X.id=void 0),X["aria-describedby"]=void 0);const Y=(0,s.Z)(O),ee=R&&Y?`${Y}-helper-text`:void 0,te=$&&Y?`${Y}-label`:void 0,re=w[q],ne=(0,x.jsx)(re,(0,n.Z)({"aria-describedby":ee,autoComplete:a,autoFocus:c,defaultValue:h,fullWidth:k,multiline:j,name:z,rows:V,maxRows:W,minRows:T,type:G,value:U,id:Y,inputRef:F,onBlur:B,onChange:N,onFocus:E,placeholder:D,inputProps:C},X,I));return(0,x.jsxs)(P,(0,n.Z)({className:(0,i.Z)(Q.root,p),disabled:b,error:Z,fullWidth:k,ref:t,required:_,color:f,variant:q,ownerState:J},K,{children:[null!=$&&""!==$&&(0,x.jsx)(m.Z,(0,n.Z)({htmlFor:Y,id:te},M,{children:$})),L?(0,x.jsx)(v.Z,(0,n.Z)({"aria-describedby":ee,id:Y,labelId:te,value:U,input:ne},H,{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}),b=(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)(b.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}))),b={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",subtitle1:"h6",subtitle2:"h6",body1:"p",body2:"p",inherit:"p"},Z={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=>Z[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=b}=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}),O=y||(w?"p":A[P]||b[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:O,ref:t,ownerState:R,className:(0,i.Z)(M.root,f)},k))}))},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:()=>z});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"},b={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"},Z=["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"),b=(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},Z={h1:b(s,96,1.167,-1.5),h2:b(s,60,1.2,-.5),h3:b(c,48,1.167,0),h4:b(c,34,1.235,.25),h5:b(c,24,1.334,0),h6:b(u,20,1.6,.15),subtitle1:b(c,16,1.75,.15),subtitle2:b(u,14,1.57,.1),body1:b(c,16,1.5,.15),body2:b(c,14,1.43,.15),button:b(u,14,1.75,.4,P),caption:b(c,12,1.66,.4),overline:b(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},Z),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 O=["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"],C={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)"},I={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 W(e){const t=(0,n.Z)({},C,e.easing),r=(0,n.Z)({},I,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 T={mobileStepper:1e3,fab:1050,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500},j=["breakpoints","mixins","spacing","palette","transitions","typography","shape"];const z=function(e={},...t){const{mixins:r={},palette:w={},transitions:P={},typography:A={}}=e,R=(0,o.Z)(e,j);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,Z),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:b[400],light:b[300],dark:b[700]}:{main:b[800],light:b[500],dark:b[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 O(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=O(e.main)),e},C={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:O,augmentColor:M,tonalOffset:l},C[t]),s)}(w),C=(0,l.Z)(e);let I=(0,i.Z)(C,{mixins:(F=C.breakpoints,$=r,(0,n.Z)({toolbar:{minHeight:56,[F.up("xs")]:{"@media (orientation: landscape)":{minHeight:48}},[F.up("sm")]:{minHeight:64}}},$)),palette:M,shadows:O.slice(),typography:k(M,A),transitions:W(P),zIndex:(0,n.Z)({},T)});var F,$;return I=(0,i.Z)(I,R),I=t.reduce(((e,t)=>(0,i.Z)(e,t)),I),I.unstable_sxConfig=(0,n.Z)({},s.Z,null==R?void 0:R.unstable_sxConfig),I.unstable_sx=function(e){return(0,c.Z)({sx:e,theme:this})},I}},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},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},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},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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QkFDQ2EsR0FBV3hULEVBQU8sQ0FDbkIyVCxPQUFPLEdBRVgsQ0N0RkEsU0FBU0MsS0FBZ0JDLEdBQ3ZCLE1BQU8sQ0FBQyxHQUFHQSxFQUFHLFFBQVFBLEVBQUcsUUFBUUEsRUFBRyxRQUFRQSxFQUFHLHVCQUE2QyxHQUFHQSxFQUFHLFFBQVFBLEVBQUcsUUFBUUEsRUFBRyxRQUFRQSxFQUFHLHdCQUFnRCxHQUFHQSxFQUFHLFFBQVFBLEVBQUcsUUFBUUEsRUFBRyxTQUFTQSxFQUFHLDBCQUFtRHRPLEtBQUssSUFDclIsQ0FHQSxNQUNBLEVBRGdCLENBQUMsT0FBUXFPLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElB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Q3hDLE1BQTBCLG1CQUFmQSxFQUNXQSxFQUFXQyxJQVExQixPQUFTLENBQUMsRUFBR0EsRUFBWUQsRUFDbEMsQ0FtQnNERSxDQUFxQkQsRUFBWUQsR0FJbkYsT0FIYyxNQUFWbFYsSUFDRkEsRUFBT3FWLEdBQXlCLE9BQWZGLEdBRVpuVixDQUFNLEdBQ1osQ0FBQ2tWLEVBQVlDLElBQ2hCLE9BQW9CLFNBQUtHLEVBQUEsRUFBYUMsU0FBVSxDQUM5Qy9aLE1BQU9pSCxFQUNQdkksU0FBVUEsR0FFZCxtQ0M3Q0EsZ0JBSmtDLGNBQW9CLCtEQ0N2QyxTQUFTb2EsSUFNdEIsT0FMYyxhQUFpQixJQU1qQyxrRUNBZSxTQUFTa0IsRUFBYS9kLEdBQ25DLE1BQU0sT0FDSkMsRUFBTSxhQUNOMmMsRUFBZSxDQUFDLEdBQ2Q1YyxFQUNFZ2UsRUFBaUMsbUJBQVgvZCxFQUF3QnNVLElBQWN0VSxTQVAzRGdlLE9BRFFBLEVBUWtFMUosSUFQVCxJQUE1QnBOLE9BQU8rVyxLQUFLRCxHQUFLNVYsT0FPa0N1VSxFQUFlckksR0FSaEgsSUFBaUIwSixDQVEyRyxFQUFFaGUsRUFDNUgsT0FBb0IsU0FBSyxLQUFRLENBQy9CQSxPQUFRK2QsR0FFWiwwRENQZSxTQUFTbmUsRUFBT3NlLEVBQUtsRixHQWFsQyxPQVpzQixPQUFTa0YsRUFBS2xGLEVBYXRDLENBR08sTUFBTW1GLEVBQXlCLENBQUNELEVBQUtFLEtBR3RDOVgsTUFBTUMsUUFBUTJYLEVBQUlHLG9CQUNwQkgsRUFBSUcsaUJBQW1CRCxFQUFVRixFQUFJRyxrQkFDdkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VDb250cm9sbGVkLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1NlbGVjdC9zZWxlY3RDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1NlbGVjdC9TZWxlY3RJbnB1dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9TdmdJY29uL3N2Z0ljb25DbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1N2Z0ljb24vU3ZnSWNvbi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9pbnRlcm5hbC9zdmctaWNvbnMvQXJyb3dEcm9wRG93bi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9jcmVhdGVTdmdJY29uLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1NlbGVjdC9TZWxlY3QuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVGV4dEZpZWxkL3RleHRGaWVsZENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVGV4dEZpZWxkL1RleHRGaWVsZC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Ub29sYmFyL3Rvb2xiYXJDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1Rvb2xiYXIvVG9vbGJhci5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9UeXBvZ3JhcGh5L3R5cG9ncmFwaHlDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1R5cG9ncmFwaHkvVHlwb2dyYXBoeS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvVGhlbWVQcm92aWRlci5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvY29tbW9uLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9ncmV5LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9wdXJwbGUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL3JlZC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvb3JhbmdlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9ibHVlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9saWdodEJsdWUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2dyZWVuLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVQYWxldHRlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVUeXBvZ3JhcGh5LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9zaGFkb3dzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVUcmFuc2l0aW9ucy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvekluZGV4LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVUaGVtZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlTWl4aW5zLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9kZWZhdWx0VGhlbWUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2dldE92ZXJsYXlBbHBoYS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvaWRlbnRpZmllci5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvc3R5bGVkLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy91c2VUaGVtZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvdXNlVGhlbWVQcm9wcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC90cmFuc2l0aW9ucy91dGlscy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9jYXBpdGFsaXplLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2RlYm91bmNlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2dldFNjcm9sbGJhclNpemUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvaXNNdWlFbGVtZW50LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL293bmVyRG9jdW1lbnQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvb3duZXJXaW5kb3cuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlRW5oYW5jZWRFZmZlY3QuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlRXZlbnRDYWxsYmFjay5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VGb3JrUmVmLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3VzZUlzRm9jdXNWaXNpYmxlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3ByaXZhdGUtdGhlbWluZy9UaGVtZVByb3ZpZGVyL25lc3RlZC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9wcml2YXRlLXRoZW1pbmcvVGhlbWVQcm92aWRlci9UaGVtZVByb3ZpZGVyLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3ByaXZhdGUtdGhlbWluZy91c2VUaGVtZS9UaGVtZUNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvcHJpdmF0ZS10aGVtaW5nL3VzZVRoZW1lL3VzZVRoZW1lLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N0eWxlZC1lbmdpbmUvR2xvYmFsU3R5bGVzL0dsb2JhbFN0eWxlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9zdHlsZWQtZW5naW5lL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgdW5zdGFibGVfdXNlQ29udHJvbGxlZCBhcyB1c2VDb250cm9sbGVkIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCB1c2VDb250cm9sbGVkOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3RVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpU2VsZWN0Jywgc2xvdCk7XG59XG5jb25zdCBzZWxlY3RDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpU2VsZWN0JywgWydyb290JywgJ3NlbGVjdCcsICdtdWx0aXBsZScsICdmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnLCAnZGlzYWJsZWQnLCAnZm9jdXNlZCcsICdpY29uJywgJ2ljb25PcGVuJywgJ2ljb25GaWxsZWQnLCAnaWNvbk91dGxpbmVkJywgJ2ljb25TdGFuZGFyZCcsICduYXRpdmVJbnB1dCcsICdlcnJvciddKTtcbmV4cG9ydCBkZWZhdWx0IHNlbGVjdENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IHsgZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGFzIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UgfSBmcm9tIFwiQG11aS91dGlsc1wiO1xudmFyIF9zcGFuO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYXJpYS1kZXNjcmliZWRieVwiLCBcImFyaWEtbGFiZWxcIiwgXCJhdXRvRm9jdXNcIiwgXCJhdXRvV2lkdGhcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRlZmF1bHRPcGVuXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNwbGF5RW1wdHlcIiwgXCJlcnJvclwiLCBcIkljb25Db21wb25lbnRcIiwgXCJpbnB1dFJlZlwiLCBcImxhYmVsSWRcIiwgXCJNZW51UHJvcHNcIiwgXCJtdWx0aXBsZVwiLCBcIm5hbWVcIiwgXCJvbkJsdXJcIiwgXCJvbkNoYW5nZVwiLCBcIm9uQ2xvc2VcIiwgXCJvbkZvY3VzXCIsIFwib25PcGVuXCIsIFwib3BlblwiLCBcInJlYWRPbmx5XCIsIFwicmVuZGVyVmFsdWVcIiwgXCJTZWxlY3REaXNwbGF5UHJvcHNcIiwgXCJ0YWJJbmRleFwiLCBcInR5cGVcIiwgXCJ2YWx1ZVwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0ZyYWdtZW50IH0gZnJvbSAncmVhY3QtaXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgcmVmVHlwZSwgdW5zdGFibGVfdXNlSWQgYXMgdXNlSWQgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBvd25lckRvY3VtZW50IGZyb20gJy4uL3V0aWxzL293bmVyRG9jdW1lbnQnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgTWVudSBmcm9tICcuLi9NZW51L01lbnUnO1xuaW1wb3J0IHsgbmF0aXZlU2VsZWN0U2VsZWN0U3R5bGVzLCBuYXRpdmVTZWxlY3RJY29uU3R5bGVzIH0gZnJvbSAnLi4vTmF0aXZlU2VsZWN0L05hdGl2ZVNlbGVjdElucHV0JztcbmltcG9ydCB7IGlzRmlsbGVkIH0gZnJvbSAnLi4vSW5wdXRCYXNlL3V0aWxzJztcbmltcG9ydCBzdHlsZWQsIHsgc2xvdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB1c2VDb250cm9sbGVkIGZyb20gJy4uL3V0aWxzL3VzZUNvbnRyb2xsZWQnO1xuaW1wb3J0IHNlbGVjdENsYXNzZXMsIHsgZ2V0U2VsZWN0VXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuL3NlbGVjdENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IFNlbGVjdFNlbGVjdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpU2VsZWN0JyxcbiAgc2xvdDogJ1NlbGVjdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtcbiAgICAvLyBXaW4gc3BlY2lmaWNpdHkgb3ZlciB0aGUgaW5wdXQgYmFzZVxuICAgIHtcbiAgICAgIFtgJi4ke3NlbGVjdENsYXNzZXMuc2VsZWN0fWBdOiBzdHlsZXMuc2VsZWN0XG4gICAgfSwge1xuICAgICAgW2AmLiR7c2VsZWN0Q2xhc3Nlcy5zZWxlY3R9YF06IHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdXG4gICAgfSwge1xuICAgICAgW2AmLiR7c2VsZWN0Q2xhc3Nlcy5lcnJvcn1gXTogc3R5bGVzLmVycm9yXG4gICAgfSwge1xuICAgICAgW2AmLiR7c2VsZWN0Q2xhc3Nlcy5tdWx0aXBsZX1gXTogc3R5bGVzLm11bHRpcGxlXG4gICAgfV07XG4gIH1cbn0pKG5hdGl2ZVNlbGVjdFNlbGVjdFN0eWxlcywge1xuICAvLyBXaW4gc3BlY2lmaWNpdHkgb3ZlciB0aGUgaW5wdXQgYmFzZVxuICBbYCYuJHtzZWxlY3RDbGFzc2VzLnNlbGVjdH1gXToge1xuICAgIGhlaWdodDogJ2F1dG8nLFxuICAgIC8vIFJlc2V0cyBmb3IgbXVsdGlwbGUgc2VsZWN0IHdpdGggY2hpcHNcbiAgICBtaW5IZWlnaHQ6ICcxLjQzNzVlbScsXG4gICAgLy8gUmVxdWlyZWQgZm9yIHNlbGVjdFxcdGV4dC1maWVsZCBoZWlnaHQgY29uc2lzdGVuY3lcbiAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nXG4gIH1cbn0pO1xuY29uc3QgU2VsZWN0SWNvbiA9IHN0eWxlZCgnc3ZnJywge1xuICBuYW1lOiAnTXVpU2VsZWN0JyxcbiAgc2xvdDogJ0ljb24nLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLmljb24sIG93bmVyU3RhdGUudmFyaWFudCAmJiBzdHlsZXNbYGljb24ke2NhcGl0YWxpemUob3duZXJTdGF0ZS52YXJpYW50KX1gXSwgb3duZXJTdGF0ZS5vcGVuICYmIHN0eWxlcy5pY29uT3Blbl07XG4gIH1cbn0pKG5hdGl2ZVNlbGVjdEljb25TdHlsZXMpO1xuY29uc3QgU2VsZWN0TmF0aXZlSW5wdXQgPSBzdHlsZWQoJ2lucHV0Jywge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiBzbG90U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgJiYgcHJvcCAhPT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpU2VsZWN0JyxcbiAgc2xvdDogJ05hdGl2ZUlucHV0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMubmF0aXZlSW5wdXRcbn0pKHtcbiAgYm90dG9tOiAwLFxuICBsZWZ0OiAwLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgb3BhY2l0eTogMCxcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICB3aWR0aDogJzEwMCUnLFxuICBib3hTaXppbmc6ICdib3JkZXItYm94J1xufSk7XG5mdW5jdGlvbiBhcmVFcXVhbFZhbHVlcyhhLCBiKSB7XG4gIGlmICh0eXBlb2YgYiA9PT0gJ29iamVjdCcgJiYgYiAhPT0gbnVsbCkge1xuICAgIHJldHVybiBhID09PSBiO1xuICB9XG5cbiAgLy8gVGhlIHZhbHVlIGNvdWxkIGJlIGEgbnVtYmVyLCB0aGUgRE9NIHdpbGwgc3RyaW5naWZ5IGl0IGFueXdheS5cbiAgcmV0dXJuIFN0cmluZyhhKSA9PT0gU3RyaW5nKGIpO1xufVxuZnVuY3Rpb24gaXNFbXB0eShkaXNwbGF5KSB7XG4gIHJldHVybiBkaXNwbGF5ID09IG51bGwgfHwgdHlwZW9mIGRpc3BsYXkgPT09ICdzdHJpbmcnICYmICFkaXNwbGF5LnRyaW0oKTtcbn1cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIHZhcmlhbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgbXVsdGlwbGUsXG4gICAgb3BlbixcbiAgICBlcnJvclxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgc2VsZWN0OiBbJ3NlbGVjdCcsIHZhcmlhbnQsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIG11bHRpcGxlICYmICdtdWx0aXBsZScsIGVycm9yICYmICdlcnJvciddLFxuICAgIGljb246IFsnaWNvbicsIGBpY29uJHtjYXBpdGFsaXplKHZhcmlhbnQpfWAsIG9wZW4gJiYgJ2ljb25PcGVuJywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJ10sXG4gICAgbmF0aXZlSW5wdXQ6IFsnbmF0aXZlSW5wdXQnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFNlbGVjdFV0aWxpdHlDbGFzc2VzLCBjbGFzc2VzKTtcbn07XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgU2VsZWN0SW5wdXQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBTZWxlY3RJbnB1dChwcm9wcywgcmVmKSB7XG4gIHZhciBfTWVudVByb3BzJHNsb3RQcm9wcztcbiAgY29uc3Qge1xuICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgICAnYXJpYS1sYWJlbCc6IGFyaWFMYWJlbCxcbiAgICAgIGF1dG9Gb2N1cyxcbiAgICAgIGF1dG9XaWR0aCxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZGVmYXVsdE9wZW4sXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGRpc3BsYXlFbXB0eSxcbiAgICAgIGVycm9yID0gZmFsc2UsXG4gICAgICBJY29uQ29tcG9uZW50LFxuICAgICAgaW5wdXRSZWY6IGlucHV0UmVmUHJvcCxcbiAgICAgIGxhYmVsSWQsXG4gICAgICBNZW51UHJvcHMgPSB7fSxcbiAgICAgIG11bHRpcGxlLFxuICAgICAgbmFtZSxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25DbG9zZSxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbk9wZW4sXG4gICAgICBvcGVuOiBvcGVuUHJvcCxcbiAgICAgIHJlYWRPbmx5LFxuICAgICAgcmVuZGVyVmFsdWUsXG4gICAgICBTZWxlY3REaXNwbGF5UHJvcHMgPSB7fSxcbiAgICAgIHRhYkluZGV4OiB0YWJJbmRleFByb3BcbiAgICAgIC8vIGNhdGNoaW5nIGB0eXBlYCBmcm9tIElucHV0IHdoaWNoIG1ha2VzIG5vIHNlbnNlIGZvciBTZWxlY3RJbnB1dFxuICAgICAgLFxuXG4gICAgICB2YWx1ZTogdmFsdWVQcm9wLFxuICAgICAgdmFyaWFudCA9ICdzdGFuZGFyZCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZVN0YXRlXSA9IHVzZUNvbnRyb2xsZWQoe1xuICAgIGNvbnRyb2xsZWQ6IHZhbHVlUHJvcCxcbiAgICBkZWZhdWx0OiBkZWZhdWx0VmFsdWUsXG4gICAgbmFtZTogJ1NlbGVjdCdcbiAgfSk7XG4gIGNvbnN0IFtvcGVuU3RhdGUsIHNldE9wZW5TdGF0ZV0gPSB1c2VDb250cm9sbGVkKHtcbiAgICBjb250cm9sbGVkOiBvcGVuUHJvcCxcbiAgICBkZWZhdWx0OiBkZWZhdWx0T3BlbixcbiAgICBuYW1lOiAnU2VsZWN0J1xuICB9KTtcbiAgY29uc3QgaW5wdXRSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGRpc3BsYXlSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IFtkaXNwbGF5Tm9kZSwgc2V0RGlzcGxheU5vZGVdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IHtcbiAgICBjdXJyZW50OiBpc09wZW5Db250cm9sbGVkXG4gIH0gPSBSZWFjdC51c2VSZWYob3BlblByb3AgIT0gbnVsbCk7XG4gIGNvbnN0IFttZW51TWluV2lkdGhTdGF0ZSwgc2V0TWVudU1pbldpZHRoU3RhdGVdID0gUmVhY3QudXNlU3RhdGUoKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihyZWYsIGlucHV0UmVmUHJvcCk7XG4gIGNvbnN0IGhhbmRsZURpc3BsYXlSZWYgPSBSZWFjdC51c2VDYWxsYmFjayhub2RlID0+IHtcbiAgICBkaXNwbGF5UmVmLmN1cnJlbnQgPSBub2RlO1xuICAgIGlmIChub2RlKSB7XG4gICAgICBzZXREaXNwbGF5Tm9kZShub2RlKTtcbiAgICB9XG4gIH0sIFtdKTtcbiAgY29uc3QgYW5jaG9yRWxlbWVudCA9IGRpc3BsYXlOb2RlID09IG51bGwgPyB2b2lkIDAgOiBkaXNwbGF5Tm9kZS5wYXJlbnROb2RlO1xuICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKGhhbmRsZVJlZiwgKCkgPT4gKHtcbiAgICBmb2N1czogKCkgPT4ge1xuICAgICAgZGlzcGxheVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfSxcbiAgICBub2RlOiBpbnB1dFJlZi5jdXJyZW50LFxuICAgIHZhbHVlXG4gIH0pLCBbdmFsdWVdKTtcblxuICAvLyBSZXNpemUgbWVudSBvbiBgZGVmYXVsdE9wZW5gIGF1dG9tYXRpYyB0b2dnbGUuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRlZmF1bHRPcGVuICYmIG9wZW5TdGF0ZSAmJiBkaXNwbGF5Tm9kZSAmJiAhaXNPcGVuQ29udHJvbGxlZCkge1xuICAgICAgc2V0TWVudU1pbldpZHRoU3RhdGUoYXV0b1dpZHRoID8gbnVsbCA6IGFuY2hvckVsZW1lbnQuY2xpZW50V2lkdGgpO1xuICAgICAgZGlzcGxheVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW2Rpc3BsYXlOb2RlLCBhdXRvV2lkdGhdKTtcbiAgLy8gYGlzT3BlbkNvbnRyb2xsZWRgIGlzIGlnbm9yZWQgYmVjYXVzZSB0aGUgY29tcG9uZW50IHNob3VsZCBuZXZlciBzd2l0Y2ggYmV0d2VlbiBjb250cm9sbGVkIGFuZCB1bmNvbnRyb2xsZWQgbW9kZXMuXG4gIC8vIGBkZWZhdWx0T3BlbmAgYW5kIGBvcGVuU3RhdGVgIGFyZSBpZ25vcmVkIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGNhbGxiYWNrcy5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYXV0b0ZvY3VzKSB7XG4gICAgICBkaXNwbGF5UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gIH0sIFthdXRvRm9jdXNdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWxhYmVsSWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGxhYmVsID0gb3duZXJEb2N1bWVudChkaXNwbGF5UmVmLmN1cnJlbnQpLmdldEVsZW1lbnRCeUlkKGxhYmVsSWQpO1xuICAgIGlmIChsYWJlbCkge1xuICAgICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgaWYgKGdldFNlbGVjdGlvbigpLmlzQ29sbGFwc2VkKSB7XG4gICAgICAgICAgZGlzcGxheVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBsYWJlbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZXIpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgbGFiZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVyKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtsYWJlbElkXSk7XG4gIGNvbnN0IHVwZGF0ZSA9IChvcGVuLCBldmVudCkgPT4ge1xuICAgIGlmIChvcGVuKSB7XG4gICAgICBpZiAob25PcGVuKSB7XG4gICAgICAgIG9uT3BlbihldmVudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvbkNsb3NlKSB7XG4gICAgICBvbkNsb3NlKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKCFpc09wZW5Db250cm9sbGVkKSB7XG4gICAgICBzZXRNZW51TWluV2lkdGhTdGF0ZShhdXRvV2lkdGggPyBudWxsIDogYW5jaG9yRWxlbWVudC5jbGllbnRXaWR0aCk7XG4gICAgICBzZXRPcGVuU3RhdGUob3Blbik7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVNb3VzZURvd24gPSBldmVudCA9PiB7XG4gICAgLy8gSWdub3JlIGV2ZXJ5dGhpbmcgYnV0IGxlZnQtY2xpY2tcbiAgICBpZiAoZXZlbnQuYnV0dG9uICE9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEhpamFjayB0aGUgZGVmYXVsdCBmb2N1cyBiZWhhdmlvci5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGRpc3BsYXlSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIHVwZGF0ZSh0cnVlLCBldmVudCk7XG4gIH07XG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gZXZlbnQgPT4ge1xuICAgIHVwZGF0ZShmYWxzZSwgZXZlbnQpO1xuICB9O1xuICBjb25zdCBjaGlsZHJlbkFycmF5ID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbik7XG5cbiAgLy8gU3VwcG9ydCBhdXRvZmlsbC5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gZXZlbnQgPT4ge1xuICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5BcnJheS5maW5kKGNoaWxkSXRlbSA9PiBjaGlsZEl0ZW0ucHJvcHMudmFsdWUgPT09IGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgaWYgKGNoaWxkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0VmFsdWVTdGF0ZShjaGlsZC5wcm9wcy52YWx1ZSk7XG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICBvbkNoYW5nZShldmVudCwgY2hpbGQpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlSXRlbUNsaWNrID0gY2hpbGQgPT4gZXZlbnQgPT4ge1xuICAgIGxldCBuZXdWYWx1ZTtcblxuICAgIC8vIFdlIHVzZSB0aGUgdGFiaW5kZXggYXR0cmlidXRlIHRvIHNpZ25hbCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuXG4gICAgaWYgKCFldmVudC5jdXJyZW50VGFyZ2V0Lmhhc0F0dHJpYnV0ZSgndGFiaW5kZXgnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgIG5ld1ZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5zbGljZSgpIDogW107XG4gICAgICBjb25zdCBpdGVtSW5kZXggPSB2YWx1ZS5pbmRleE9mKGNoaWxkLnByb3BzLnZhbHVlKTtcbiAgICAgIGlmIChpdGVtSW5kZXggPT09IC0xKSB7XG4gICAgICAgIG5ld1ZhbHVlLnB1c2goY2hpbGQucHJvcHMudmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3VmFsdWUuc3BsaWNlKGl0ZW1JbmRleCwgMSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1ZhbHVlID0gY2hpbGQucHJvcHMudmFsdWU7XG4gICAgfVxuICAgIGlmIChjaGlsZC5wcm9wcy5vbkNsaWNrKSB7XG4gICAgICBjaGlsZC5wcm9wcy5vbkNsaWNrKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgc2V0VmFsdWVTdGF0ZShuZXdWYWx1ZSk7XG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgLy8gUmVkZWZpbmUgdGFyZ2V0IHRvIGFsbG93IG5hbWUgYW5kIHZhbHVlIHRvIGJlIHJlYWQuXG4gICAgICAgIC8vIFRoaXMgYWxsb3dzIHNlYW1sZXNzIGludGVncmF0aW9uIHdpdGggdGhlIG1vc3QgcG9wdWxhciBmb3JtIGxpYnJhcmllcy5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9pc3N1ZXMvMTM0ODUjaXNzdWVjb21tZW50LTY3NjA0ODQ5MlxuICAgICAgICAvLyBDbG9uZSB0aGUgZXZlbnQgdG8gbm90IG92ZXJyaWRlIGB0YXJnZXRgIG9mIHRoZSBvcmlnaW5hbCBldmVudC5cbiAgICAgICAgY29uc3QgbmF0aXZlRXZlbnQgPSBldmVudC5uYXRpdmVFdmVudCB8fCBldmVudDtcbiAgICAgICAgY29uc3QgY2xvbmVkRXZlbnQgPSBuZXcgbmF0aXZlRXZlbnQuY29uc3RydWN0b3IobmF0aXZlRXZlbnQudHlwZSwgbmF0aXZlRXZlbnQpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2xvbmVkRXZlbnQsICd0YXJnZXQnLCB7XG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBvbkNoYW5nZShjbG9uZWRFdmVudCwgY2hpbGQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW11bHRpcGxlKSB7XG4gICAgICB1cGRhdGUoZmFsc2UsIGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSBldmVudCA9PiB7XG4gICAgaWYgKCFyZWFkT25seSkge1xuICAgICAgY29uc3QgdmFsaWRLZXlzID0gWycgJywgJ0Fycm93VXAnLCAnQXJyb3dEb3duJyxcbiAgICAgIC8vIFRoZSBuYXRpdmUgc2VsZWN0IGRvZXNuJ3QgcmVzcG9uZCB0byBlbnRlciBvbiBtYWNPUywgYnV0IGl0J3MgcmVjb21tZW5kZWQgYnlcbiAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvQVJJQS9hcGcvcGF0dGVybnMvY29tYm9ib3gvZXhhbXBsZXMvY29tYm9ib3gtc2VsZWN0LW9ubHkvXG4gICAgICAnRW50ZXInXTtcbiAgICAgIGlmICh2YWxpZEtleXMuaW5kZXhPZihldmVudC5rZXkpICE9PSAtMSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB1cGRhdGUodHJ1ZSwgZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY29uc3Qgb3BlbiA9IGRpc3BsYXlOb2RlICE9PSBudWxsICYmIG9wZW5TdGF0ZTtcbiAgY29uc3QgaGFuZGxlQmx1ciA9IGV2ZW50ID0+IHtcbiAgICAvLyBpZiBvcGVuIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvblxuICAgIGlmICghb3BlbiAmJiBvbkJsdXIpIHtcbiAgICAgIC8vIFByZWFjdCBzdXBwb3J0LCB0YXJnZXQgaXMgcmVhZCBvbmx5IHByb3BlcnR5IG9uIGEgbmF0aXZlIGV2ZW50LlxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV2ZW50LCAndGFyZ2V0Jywge1xuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBuYW1lXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgb25CbHVyKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGRlbGV0ZSBvdGhlclsnYXJpYS1pbnZhbGlkJ107XG4gIGxldCBkaXNwbGF5O1xuICBsZXQgZGlzcGxheVNpbmdsZTtcbiAgY29uc3QgZGlzcGxheU11bHRpcGxlID0gW107XG4gIGxldCBjb21wdXRlRGlzcGxheSA9IGZhbHNlO1xuICBsZXQgZm91bmRNYXRjaCA9IGZhbHNlO1xuXG4gIC8vIE5vIG5lZWQgdG8gZGlzcGxheSBhbnkgdmFsdWUgaWYgdGhlIGZpZWxkIGlzIGVtcHR5LlxuICBpZiAoaXNGaWxsZWQoe1xuICAgIHZhbHVlXG4gIH0pIHx8IGRpc3BsYXlFbXB0eSkge1xuICAgIGlmIChyZW5kZXJWYWx1ZSkge1xuICAgICAgZGlzcGxheSA9IHJlbmRlclZhbHVlKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tcHV0ZURpc3BsYXkgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBjb25zdCBpdGVtcyA9IGNoaWxkcmVuQXJyYXkubWFwKGNoaWxkID0+IHtcbiAgICBpZiAoISAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpc0ZyYWdtZW50KGNoaWxkKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtcIk1VSTogVGhlIFNlbGVjdCBjb21wb25lbnQgZG9lc24ndCBhY2NlcHQgYSBGcmFnbWVudCBhcyBhIGNoaWxkLlwiLCAnQ29uc2lkZXIgcHJvdmlkaW5nIGFuIGFycmF5IGluc3RlYWQuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgc2VsZWN0ZWQ7XG4gICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBUaGUgXFxgdmFsdWVcXGAgcHJvcCBtdXN0IGJlIGFuIGFycmF5IHdoZW4gdXNpbmcgdGhlIFxcYFNlbGVjdFxcYCBjb21wb25lbnQgd2l0aCBcXGBtdWx0aXBsZVxcYC5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgyKSk7XG4gICAgICB9XG4gICAgICBzZWxlY3RlZCA9IHZhbHVlLnNvbWUodiA9PiBhcmVFcXVhbFZhbHVlcyh2LCBjaGlsZC5wcm9wcy52YWx1ZSkpO1xuICAgICAgaWYgKHNlbGVjdGVkICYmIGNvbXB1dGVEaXNwbGF5KSB7XG4gICAgICAgIGRpc3BsYXlNdWx0aXBsZS5wdXNoKGNoaWxkLnByb3BzLmNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0ZWQgPSBhcmVFcXVhbFZhbHVlcyh2YWx1ZSwgY2hpbGQucHJvcHMudmFsdWUpO1xuICAgICAgaWYgKHNlbGVjdGVkICYmIGNvbXB1dGVEaXNwbGF5KSB7XG4gICAgICAgIGRpc3BsYXlTaW5nbGUgPSBjaGlsZC5wcm9wcy5jaGlsZHJlbjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICBmb3VuZE1hdGNoID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICdhcmlhLXNlbGVjdGVkJzogc2VsZWN0ZWQgPyAndHJ1ZScgOiAnZmFsc2UnLFxuICAgICAgb25DbGljazogaGFuZGxlSXRlbUNsaWNrKGNoaWxkKSxcbiAgICAgIG9uS2V5VXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICAgICAgLy8gb3RoZXJ3aXNlIG91ciBNZW51SXRlbXMgZGlzcGF0Y2hlcyBhIGNsaWNrIGV2ZW50XG4gICAgICAgICAgLy8gaXQncyBub3QgYmVoYXZpb3Igb2YgdGhlIG5hdGl2ZSA8b3B0aW9uPiBhbmQgY2F1c2VzXG4gICAgICAgICAgLy8gdGhlIHNlbGVjdCB0byBjbG9zZSBpbW1lZGlhdGVseSBzaW5jZSB3ZSBvcGVuIG9uIHNwYWNlIGtleWRvd25cbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGlsZC5wcm9wcy5vbktleVVwKSB7XG4gICAgICAgICAgY2hpbGQucHJvcHMub25LZXlVcChldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICByb2xlOiAnb3B0aW9uJyxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFRoZSB2YWx1ZSBpcyBtb3N0IGxpa2VseSBub3QgYSB2YWxpZCBIVE1MIGF0dHJpYnV0ZS5cbiAgICAgICdkYXRhLXZhbHVlJzogY2hpbGQucHJvcHMudmFsdWUgLy8gSW5zdGVhZCwgd2UgcHJvdmlkZSBpdCBhcyBhIGRhdGEgYXR0cmlidXRlLlxuICAgIH0pO1xuICB9KTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKCFmb3VuZE1hdGNoICYmICFtdWx0aXBsZSAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gY2hpbGRyZW5BcnJheS5tYXAoY2hpbGQgPT4gY2hpbGQucHJvcHMudmFsdWUpO1xuICAgICAgICBjb25zb2xlLndhcm4oW2BNVUk6IFlvdSBoYXZlIHByb3ZpZGVkIGFuIG91dC1vZi1yYW5nZSB2YWx1ZSBcXGAke3ZhbHVlfVxcYCBmb3IgdGhlIHNlbGVjdCAke25hbWUgPyBgKG5hbWU9XCIke25hbWV9XCIpIGAgOiAnJ31jb21wb25lbnQuYCwgXCJDb25zaWRlciBwcm92aWRpbmcgYSB2YWx1ZSB0aGF0IG1hdGNoZXMgb25lIG9mIHRoZSBhdmFpbGFibGUgb3B0aW9ucyBvciAnJy5cIiwgYFRoZSBhdmFpbGFibGUgdmFsdWVzIGFyZSAke3ZhbHVlcy5maWx0ZXIoeCA9PiB4ICE9IG51bGwpLm1hcCh4ID0+IGBcXGAke3h9XFxgYCkuam9pbignLCAnKSB8fCAnXCJcIid9LmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9LCBbZm91bmRNYXRjaCwgY2hpbGRyZW5BcnJheSwgbXVsdGlwbGUsIG5hbWUsIHZhbHVlXSk7XG4gIH1cbiAgaWYgKGNvbXB1dGVEaXNwbGF5KSB7XG4gICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICBpZiAoZGlzcGxheU11bHRpcGxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkaXNwbGF5ID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3BsYXkgPSBkaXNwbGF5TXVsdGlwbGUucmVkdWNlKChvdXRwdXQsIGNoaWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgIG91dHB1dC5wdXNoKGNoaWxkKTtcbiAgICAgICAgICBpZiAoaW5kZXggPCBkaXNwbGF5TXVsdGlwbGUubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgb3V0cHV0LnB1c2goJywgJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH0sIFtdKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGlzcGxheSA9IGRpc3BsYXlTaW5nbGU7XG4gICAgfVxuICB9XG5cbiAgLy8gQXZvaWQgcGVyZm9ybWluZyBhIGxheW91dCBjb21wdXRhdGlvbiBpbiB0aGUgcmVuZGVyIG1ldGhvZC5cbiAgbGV0IG1lbnVNaW5XaWR0aCA9IG1lbnVNaW5XaWR0aFN0YXRlO1xuICBpZiAoIWF1dG9XaWR0aCAmJiBpc09wZW5Db250cm9sbGVkICYmIGRpc3BsYXlOb2RlKSB7XG4gICAgbWVudU1pbldpZHRoID0gYW5jaG9yRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgfVxuICBsZXQgdGFiSW5kZXg7XG4gIGlmICh0eXBlb2YgdGFiSW5kZXhQcm9wICE9PSAndW5kZWZpbmVkJykge1xuICAgIHRhYkluZGV4ID0gdGFiSW5kZXhQcm9wO1xuICB9IGVsc2Uge1xuICAgIHRhYkluZGV4ID0gZGlzYWJsZWQgPyBudWxsIDogMDtcbiAgfVxuICBjb25zdCBidXR0b25JZCA9IFNlbGVjdERpc3BsYXlQcm9wcy5pZCB8fCAobmFtZSA/IGBtdWktY29tcG9uZW50LXNlbGVjdC0ke25hbWV9YCA6IHVuZGVmaW5lZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICB2YXJpYW50LFxuICAgIHZhbHVlLFxuICAgIG9wZW4sXG4gICAgZXJyb3JcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgcGFwZXJQcm9wcyA9IF9leHRlbmRzKHt9LCBNZW51UHJvcHMuUGFwZXJQcm9wcywgKF9NZW51UHJvcHMkc2xvdFByb3BzID0gTWVudVByb3BzLnNsb3RQcm9wcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9NZW51UHJvcHMkc2xvdFByb3BzLnBhcGVyKTtcbiAgY29uc3QgbGlzdGJveElkID0gdXNlSWQoKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhSZWFjdC5GcmFnbWVudCwge1xuICAgIGNoaWxkcmVuOiBbLyojX19QVVJFX18qL19qc3goU2VsZWN0U2VsZWN0LCBfZXh0ZW5kcyh7XG4gICAgICByZWY6IGhhbmRsZURpc3BsYXlSZWYsXG4gICAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgICByb2xlOiBcImNvbWJvYm94XCIsXG4gICAgICBcImFyaWEtY29udHJvbHNcIjogbGlzdGJveElkLFxuICAgICAgXCJhcmlhLWRpc2FibGVkXCI6IGRpc2FibGVkID8gJ3RydWUnIDogdW5kZWZpbmVkLFxuICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IG9wZW4gPyAndHJ1ZScgOiAnZmFsc2UnLFxuICAgICAgXCJhcmlhLWhhc3BvcHVwXCI6IFwibGlzdGJveFwiLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCxcbiAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFtsYWJlbElkLCBidXR0b25JZF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKSB8fCB1bmRlZmluZWQsXG4gICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogYXJpYURlc2NyaWJlZGJ5LFxuICAgICAgb25LZXlEb3duOiBoYW5kbGVLZXlEb3duLFxuICAgICAgb25Nb3VzZURvd246IGRpc2FibGVkIHx8IHJlYWRPbmx5ID8gbnVsbCA6IGhhbmRsZU1vdXNlRG93bixcbiAgICAgIG9uQmx1cjogaGFuZGxlQmx1cixcbiAgICAgIG9uRm9jdXM6IG9uRm9jdXNcbiAgICB9LCBTZWxlY3REaXNwbGF5UHJvcHMsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goU2VsZWN0RGlzcGxheVByb3BzLmNsYXNzTmFtZSwgY2xhc3Nlcy5zZWxlY3QsIGNsYXNzTmFtZSlcbiAgICAgIC8vIFRoZSBpZCBpcyByZXF1aXJlZCBmb3IgcHJvcGVyIGExMXlcbiAgICAgICxcbiAgICAgIGlkOiBidXR0b25JZCxcbiAgICAgIGNoaWxkcmVuOiBpc0VtcHR5KGRpc3BsYXkpID8gLy8gbm90cmFuc2xhdGUgbmVlZGVkIHdoaWxlIEdvb2dsZSBUcmFuc2xhdGUgd2lsbCBub3QgZml4IHplcm8td2lkdGggc3BhY2UgaXNzdWVcbiAgICAgIF9zcGFuIHx8IChfc3BhbiA9IC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJub3RyYW5zbGF0ZVwiLFxuICAgICAgICBjaGlsZHJlbjogXCJcXHUyMDBCXCJcbiAgICAgIH0pKSA6IGRpc3BsYXlcbiAgICB9KSksIC8qI19fUFVSRV9fKi9fanN4KFNlbGVjdE5hdGl2ZUlucHV0LCBfZXh0ZW5kcyh7XG4gICAgICBcImFyaWEtaW52YWxpZFwiOiBlcnJvcixcbiAgICAgIHZhbHVlOiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywnKSA6IHZhbHVlLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHJlZjogaW5wdXRSZWYsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgICAgdGFiSW5kZXg6IC0xLFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLm5hdGl2ZUlucHV0LFxuICAgICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSwgb3RoZXIpKSwgLyojX19QVVJFX18qL19qc3goU2VsZWN0SWNvbiwge1xuICAgICAgYXM6IEljb25Db21wb25lbnQsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMuaWNvbixcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgICB9KSwgLyojX19QVVJFX18qL19qc3goTWVudSwgX2V4dGVuZHMoe1xuICAgICAgaWQ6IGBtZW51LSR7bmFtZSB8fCAnJ31gLFxuICAgICAgYW5jaG9yRWw6IGFuY2hvckVsZW1lbnQsXG4gICAgICBvcGVuOiBvcGVuLFxuICAgICAgb25DbG9zZTogaGFuZGxlQ2xvc2UsXG4gICAgICBhbmNob3JPcmlnaW46IHtcbiAgICAgICAgdmVydGljYWw6ICdib3R0b20nLFxuICAgICAgICBob3Jpem9udGFsOiAnY2VudGVyJ1xuICAgICAgfSxcbiAgICAgIHRyYW5zZm9ybU9yaWdpbjoge1xuICAgICAgICB2ZXJ0aWNhbDogJ3RvcCcsXG4gICAgICAgIGhvcml6b250YWw6ICdjZW50ZXInXG4gICAgICB9XG4gICAgfSwgTWVudVByb3BzLCB7XG4gICAgICBNZW51TGlzdFByb3BzOiBfZXh0ZW5kcyh7XG4gICAgICAgICdhcmlhLWxhYmVsbGVkYnknOiBsYWJlbElkLFxuICAgICAgICByb2xlOiAnbGlzdGJveCcsXG4gICAgICAgICdhcmlhLW11bHRpc2VsZWN0YWJsZSc6IG11bHRpcGxlID8gJ3RydWUnIDogdW5kZWZpbmVkLFxuICAgICAgICBkaXNhYmxlTGlzdFdyYXA6IHRydWUsXG4gICAgICAgIGlkOiBsaXN0Ym94SWRcbiAgICAgIH0sIE1lbnVQcm9wcy5NZW51TGlzdFByb3BzKSxcbiAgICAgIHNsb3RQcm9wczogX2V4dGVuZHMoe30sIE1lbnVQcm9wcy5zbG90UHJvcHMsIHtcbiAgICAgICAgcGFwZXI6IF9leHRlbmRzKHt9LCBwYXBlclByb3BzLCB7XG4gICAgICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgICAgIG1pbldpZHRoOiBtZW51TWluV2lkdGhcbiAgICAgICAgICB9LCBwYXBlclByb3BzICE9IG51bGwgPyBwYXBlclByb3BzLnN0eWxlIDogbnVsbClcbiAgICAgICAgfSlcbiAgICAgIH0pLFxuICAgICAgY2hpbGRyZW46IGl0ZW1zXG4gICAgfSkpXVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU2VsZWN0SW5wdXQucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgJ2FyaWEtZGVzY3JpYmVkYnknOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgJ2FyaWEtbGFiZWwnOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHdpZHRoIG9mIHRoZSBwb3BvdmVyIHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSBpdGVtcyBpbnNpZGUgdGhlXG4gICAqIG1lbnUsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGF0IGxlYXN0IHRoZSB3aWR0aCBvZiB0aGUgc2VsZWN0IGlucHV0LlxuICAgKi9cbiAgYXV0b1dpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBvcHRpb24gZWxlbWVudHMgdG8gcG9wdWxhdGUgdGhlIHNlbGVjdCB3aXRoLlxuICAgKiBDYW4gYmUgc29tZSBgPE1lbnVJdGVtPmAgZWxlbWVudHMuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIFNlZSBbQ1NTIEFQSV0oI2NzcykgYmVsb3cgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgQ1NTIGNsYXNzIG5hbWUgb2YgdGhlIHNlbGVjdCBlbGVtZW50LlxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHRvZ2dsZWQgb24gbW91bnQuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgb3BlbiBzdGF0ZSBpcyBub3QgY29udHJvbGxlZC5cbiAgICogWW91IGNhbiBvbmx5IHVzZSBpdCB3aGVuIHRoZSBgbmF0aXZlYCBwcm9wIGlzIGBmYWxzZWAgKGRlZmF1bHQpLlxuICAgKi9cbiAgZGVmYXVsdE9wZW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBzZWxlY3QgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBzZWxlY3RlZCBpdGVtIGlzIGRpc3BsYXllZCBldmVuIGlmIGl0cyB2YWx1ZSBpcyBlbXB0eS5cbiAgICovXG4gIGRpc3BsYXlFbXB0eTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgc2VsZWN0IGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGljb24gdGhhdCBkaXNwbGF5cyB0aGUgYXJyb3cuXG4gICAqL1xuICBJY29uQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIEltcGVyYXRpdmUgaGFuZGxlIGltcGxlbWVudGluZyBgeyB2YWx1ZTogVCwgbm9kZTogSFRNTEVsZW1lbnQsIGZvY3VzKCk6IHZvaWQgfWBcbiAgICogRXF1aXZhbGVudCB0byBgcmVmYFxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgYW4gZWxlbWVudCB0aGF0IGFjdHMgYXMgYW4gYWRkaXRpb25hbCBsYWJlbC4gVGhlIFNlbGVjdCB3aWxsXG4gICAqIGJlIGxhYmVsbGVkIGJ5IHRoZSBhZGRpdGlvbmFsIGxhYmVsIGFuZCB0aGUgc2VsZWN0ZWQgdmFsdWUuXG4gICAqL1xuICBsYWJlbElkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BNZW51YF0oL21hdGVyaWFsLXVpL2FwaS9tZW51LykgZWxlbWVudC5cbiAgICovXG4gIE1lbnVQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYHZhbHVlYCBtdXN0IGJlIGFuIGFycmF5IGFuZCB0aGUgbWVudSB3aWxsIHN1cHBvcnQgbXVsdGlwbGUgc2VsZWN0aW9ucy5cbiAgICovXG4gIG11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE5hbWUgYXR0cmlidXRlIG9mIHRoZSBgc2VsZWN0YCBvciBoaWRkZW4gYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIGEgbWVudSBpdGVtIGlzIHNlbGVjdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKGFueSkuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbY2hpbGRdIFRoZSByZWFjdCBlbGVtZW50IHRoYXQgd2FzIHNlbGVjdGVkLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIGNsb3NlZC5cbiAgICogVXNlIGluIGNvbnRyb2xsZWQgbW9kZSAoc2VlIG9wZW4pLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIG9wZW5lZC5cbiAgICogVXNlIGluIGNvbnRyb2xsZWQgbW9kZSAoc2VlIG9wZW4pLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBvbk9wZW46IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIHNlbGVjdGVkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgVGhlIGB2YWx1ZWAgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMge1JlYWN0Tm9kZX1cbiAgICovXG4gIHJlbmRlclZhbHVlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIGNsaWNrYWJsZSBkaXYgZWxlbWVudC5cbiAgICovXG4gIFNlbGVjdERpc3BsYXlQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHRhYkluZGV4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogVGhlIGlucHV0IHZhbHVlLlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydzdGFuZGFyZCcsICdvdXRsaW5lZCcsICdmaWxsZWQnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBTZWxlY3RJbnB1dDsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpU3ZnSWNvbicsIHNsb3QpO1xufVxuY29uc3Qgc3ZnSWNvbkNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlTdmdJY29uJywgWydyb290JywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdjb2xvckFjdGlvbicsICdjb2xvckVycm9yJywgJ2NvbG9yRGlzYWJsZWQnLCAnZm9udFNpemVJbmhlcml0JywgJ2ZvbnRTaXplU21hbGwnLCAnZm9udFNpemVNZWRpdW0nLCAnZm9udFNpemVMYXJnZSddKTtcbmV4cG9ydCBkZWZhdWx0IHN2Z0ljb25DbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRcIiwgXCJmb250U2l6ZVwiLCBcImh0bWxDb2xvclwiLCBcImluaGVyaXRWaWV3Qm94XCIsIFwidGl0bGVBY2Nlc3NcIiwgXCJ2aWV3Qm94XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyB9IGZyb20gJy4vc3ZnSWNvbkNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb2xvcixcbiAgICBmb250U2l6ZSxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBjb2xvciAhPT0gJ2luaGVyaXQnICYmIGBjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YCwgYGZvbnRTaXplJHtjYXBpdGFsaXplKGZvbnRTaXplKX1gXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFN2Z0ljb25VdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IFN2Z0ljb25Sb290ID0gc3R5bGVkKCdzdmcnLCB7XG4gIG5hbWU6ICdNdWlTdmdJY29uJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiBzdHlsZXNbYGNvbG9yJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdLCBzdHlsZXNbYGZvbnRTaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuZm9udFNpemUpfWBdXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgdmFyIF90aGVtZSR0cmFuc2l0aW9ucywgX3RoZW1lJHRyYW5zaXRpb25zJGNyLCBfdGhlbWUkdHJhbnNpdGlvbnMyLCBfdGhlbWUkdHlwb2dyYXBoeSwgX3RoZW1lJHR5cG9ncmFwaHkkcHhULCBfdGhlbWUkdHlwb2dyYXBoeTIsIF90aGVtZSR0eXBvZ3JhcGh5MiRweCwgX3RoZW1lJHR5cG9ncmFwaHkzLCBfdGhlbWUkdHlwb2dyYXBoeTMkcHgsIF9wYWxldHRlJG93bmVyU3RhdGUkYywgX3BhbGV0dGUsIF9wYWxldHRlMiwgX3BhbGV0dGUzO1xuICByZXR1cm4ge1xuICAgIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgICB3aWR0aDogJzFlbScsXG4gICAgaGVpZ2h0OiAnMWVtJyxcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAvLyB0aGUgPHN2Zz4gd2lsbCBkZWZpbmUgdGhlIHByb3BlcnR5IHRoYXQgaGFzIGBjdXJyZW50Q29sb3JgXG4gICAgLy8gZS5nLiBoZXJvaWNvbnMgdXNlcyBmaWxsPVwibm9uZVwiIGFuZCBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgIGZpbGw6IG93bmVyU3RhdGUuaGFzU3ZnQXNDaGlsZCA/IHVuZGVmaW5lZCA6ICdjdXJyZW50Q29sb3InLFxuICAgIGZsZXhTaHJpbms6IDAsXG4gICAgdHJhbnNpdGlvbjogKF90aGVtZSR0cmFuc2l0aW9ucyA9IHRoZW1lLnRyYW5zaXRpb25zKSA9PSBudWxsIHx8IChfdGhlbWUkdHJhbnNpdGlvbnMkY3IgPSBfdGhlbWUkdHJhbnNpdGlvbnMuY3JlYXRlKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHRyYW5zaXRpb25zJGNyLmNhbGwoX3RoZW1lJHRyYW5zaXRpb25zLCAnZmlsbCcsIHtcbiAgICAgIGR1cmF0aW9uOiAoX3RoZW1lJHRyYW5zaXRpb25zMiA9IHRoZW1lLnRyYW5zaXRpb25zKSA9PSBudWxsIHx8IChfdGhlbWUkdHJhbnNpdGlvbnMyID0gX3RoZW1lJHRyYW5zaXRpb25zMi5kdXJhdGlvbikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0cmFuc2l0aW9uczIuc2hvcnRlclxuICAgIH0pLFxuICAgIGZvbnRTaXplOiB7XG4gICAgICBpbmhlcml0OiAnaW5oZXJpdCcsXG4gICAgICBzbWFsbDogKChfdGhlbWUkdHlwb2dyYXBoeSA9IHRoZW1lLnR5cG9ncmFwaHkpID09IG51bGwgfHwgKF90aGVtZSR0eXBvZ3JhcGh5JHB4VCA9IF90aGVtZSR0eXBvZ3JhcGh5LnB4VG9SZW0pID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHlwb2dyYXBoeSRweFQuY2FsbChfdGhlbWUkdHlwb2dyYXBoeSwgMjApKSB8fCAnMS4yNXJlbScsXG4gICAgICBtZWRpdW06ICgoX3RoZW1lJHR5cG9ncmFwaHkyID0gdGhlbWUudHlwb2dyYXBoeSkgPT0gbnVsbCB8fCAoX3RoZW1lJHR5cG9ncmFwaHkyJHB4ID0gX3RoZW1lJHR5cG9ncmFwaHkyLnB4VG9SZW0pID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHlwb2dyYXBoeTIkcHguY2FsbChfdGhlbWUkdHlwb2dyYXBoeTIsIDI0KSkgfHwgJzEuNXJlbScsXG4gICAgICBsYXJnZTogKChfdGhlbWUkdHlwb2dyYXBoeTMgPSB0aGVtZS50eXBvZ3JhcGh5KSA9PSBudWxsIHx8IChfdGhlbWUkdHlwb2dyYXBoeTMkcHggPSBfdGhlbWUkdHlwb2dyYXBoeTMucHhUb1JlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0eXBvZ3JhcGh5MyRweC5jYWxsKF90aGVtZSR0eXBvZ3JhcGh5MywgMzUpKSB8fCAnMi4xODc1cmVtJ1xuICAgIH1bb3duZXJTdGF0ZS5mb250U2l6ZV0sXG4gICAgLy8gVE9ETyB2NSBkZXByZWNhdGUsIHY2IHJlbW92ZSBmb3Igc3hcbiAgICBjb2xvcjogKF9wYWxldHRlJG93bmVyU3RhdGUkYyA9IChfcGFsZXR0ZSA9ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlKSA9PSBudWxsIHx8IChfcGFsZXR0ZSA9IF9wYWxldHRlW293bmVyU3RhdGUuY29sb3JdKSA9PSBudWxsID8gdm9pZCAwIDogX3BhbGV0dGUubWFpbikgIT0gbnVsbCA/IF9wYWxldHRlJG93bmVyU3RhdGUkYyA6IHtcbiAgICAgIGFjdGlvbjogKF9wYWxldHRlMiA9ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlKSA9PSBudWxsIHx8IChfcGFsZXR0ZTIgPSBfcGFsZXR0ZTIuYWN0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogX3BhbGV0dGUyLmFjdGl2ZSxcbiAgICAgIGRpc2FibGVkOiAoX3BhbGV0dGUzID0gKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUpID09IG51bGwgfHwgKF9wYWxldHRlMyA9IF9wYWxldHRlMy5hY3Rpb24pID09IG51bGwgPyB2b2lkIDAgOiBfcGFsZXR0ZTMuZGlzYWJsZWQsXG4gICAgICBpbmhlcml0OiB1bmRlZmluZWRcbiAgICB9W293bmVyU3RhdGUuY29sb3JdXG4gIH07XG59KTtcbmNvbnN0IFN2Z0ljb24gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBTdmdJY29uKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlTdmdJY29uJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb2xvciA9ICdpbmhlcml0JyxcbiAgICAgIGNvbXBvbmVudCA9ICdzdmcnLFxuICAgICAgZm9udFNpemUgPSAnbWVkaXVtJyxcbiAgICAgIGh0bWxDb2xvcixcbiAgICAgIGluaGVyaXRWaWV3Qm94ID0gZmFsc2UsXG4gICAgICB0aXRsZUFjY2VzcyxcbiAgICAgIHZpZXdCb3ggPSAnMCAwIDI0IDI0J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBoYXNTdmdBc0NoaWxkID0gLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJiBjaGlsZHJlbi50eXBlID09PSAnc3ZnJztcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGNvbXBvbmVudCxcbiAgICBmb250U2l6ZSxcbiAgICBpbnN0YW5jZUZvbnRTaXplOiBpblByb3BzLmZvbnRTaXplLFxuICAgIGluaGVyaXRWaWV3Qm94LFxuICAgIHZpZXdCb3gsXG4gICAgaGFzU3ZnQXNDaGlsZFxuICB9KTtcbiAgY29uc3QgbW9yZSA9IHt9O1xuICBpZiAoIWluaGVyaXRWaWV3Qm94KSB7XG4gICAgbW9yZS52aWV3Qm94ID0gdmlld0JveDtcbiAgfVxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoU3ZnSWNvblJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgZm9jdXNhYmxlOiBcImZhbHNlXCIsXG4gICAgY29sb3I6IGh0bWxDb2xvcixcbiAgICBcImFyaWEtaGlkZGVuXCI6IHRpdGxlQWNjZXNzID8gdW5kZWZpbmVkIDogdHJ1ZSxcbiAgICByb2xlOiB0aXRsZUFjY2VzcyA/ICdpbWcnIDogdW5kZWZpbmVkLFxuICAgIHJlZjogcmVmXG4gIH0sIG1vcmUsIG90aGVyLCBoYXNTdmdBc0NoaWxkICYmIGNoaWxkcmVuLnByb3BzLCB7XG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjaGlsZHJlbjogW2hhc1N2Z0FzQ2hpbGQgPyBjaGlsZHJlbi5wcm9wcy5jaGlsZHJlbiA6IGNoaWxkcmVuLCB0aXRsZUFjY2VzcyA/IC8qI19fUFVSRV9fKi9fanN4KFwidGl0bGVcIiwge1xuICAgICAgY2hpbGRyZW46IHRpdGxlQWNjZXNzXG4gICAgfSkgOiBudWxsXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFN2Z0ljb24ucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogTm9kZSBwYXNzZWQgaW50byB0aGUgU1ZHIGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogWW91IGNhbiB1c2UgdGhlIGBodG1sQ29sb3JgIHByb3AgdG8gYXBwbHkgYSBjb2xvciBhdHRyaWJ1dGUgdG8gdGhlIFNWRyBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCAnaW5oZXJpdCdcbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2luaGVyaXQnLCAnYWN0aW9uJywgJ2Rpc2FibGVkJywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFRoZSBmb250U2l6ZSBhcHBsaWVkIHRvIHRoZSBpY29uLiBEZWZhdWx0cyB0byAyNHB4LCBidXQgY2FuIGJlIGNvbmZpZ3VyZSB0byBpbmhlcml0IGZvbnQgc2l6ZS5cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIGZvbnRTaXplOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2luaGVyaXQnLCAnbGFyZ2UnLCAnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBBcHBsaWVzIGEgY29sb3IgYXR0cmlidXRlIHRvIHRoZSBTVkcgZWxlbWVudC5cbiAgICovXG4gIGh0bWxDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJvb3Qgbm9kZSB3aWxsIGluaGVyaXQgdGhlIGN1c3RvbSBgY29tcG9uZW50YCdzIHZpZXdCb3ggYW5kIHRoZSBgdmlld0JveGBcbiAgICogcHJvcCB3aWxsIGJlIGlnbm9yZWQuXG4gICAqIFVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIHJlZmVyZW5jZSBhIGN1c3RvbSBgY29tcG9uZW50YCBhbmQgaGF2ZSBgU3ZnSWNvbmAgcGFzcyB0aGF0XG4gICAqIGBjb21wb25lbnRgJ3Mgdmlld0JveCB0byB0aGUgcm9vdCBub2RlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaW5oZXJpdFZpZXdCb3g6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNoYXBlLXJlbmRlcmluZyBhdHRyaWJ1dGUuIFRoZSBiZWhhdmlvciBvZiB0aGUgZGlmZmVyZW50IG9wdGlvbnMgaXMgZGVzY3JpYmVkIG9uIHRoZVxuICAgKiBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TVkcvQXR0cmlidXRlL3NoYXBlLXJlbmRlcmluZykuXG4gICAqIElmIHlvdSBhcmUgaGF2aW5nIGlzc3VlcyB3aXRoIGJsdXJyeSBpY29ucyB5b3Ugc2hvdWxkIGludmVzdGlnYXRlIHRoaXMgcHJvcC5cbiAgICovXG4gIHNoYXBlUmVuZGVyaW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogUHJvdmlkZXMgYSBodW1hbi1yZWFkYWJsZSB0aXRsZSBmb3IgdGhlIGVsZW1lbnQgdGhhdCBjb250YWlucyBpdC5cbiAgICogaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy1hY2Nlc3MvI0VxdWl2YWxlbnRcbiAgICovXG4gIHRpdGxlQWNjZXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQWxsb3dzIHlvdSB0byByZWRlZmluZSB3aGF0IHRoZSBjb29yZGluYXRlcyB3aXRob3V0IHVuaXRzIG1lYW4gaW5zaWRlIGFuIFNWRyBlbGVtZW50LlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIFNWRyBlbGVtZW50IGlzIDUwMCAod2lkdGgpIGJ5IDIwMCAoaGVpZ2h0KSxcbiAgICogYW5kIHlvdSBwYXNzIHZpZXdCb3g9XCIwIDAgNTAgMjBcIixcbiAgICogdGhpcyBtZWFucyB0aGF0IHRoZSBjb29yZGluYXRlcyBpbnNpZGUgdGhlIFNWRyB3aWxsIGdvIGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lciAoMCwwKVxuICAgKiB0byBib3R0b20gcmlnaHQgKDUwLDIwKSBhbmQgZWFjaCB1bml0IHdpbGwgYmUgd29ydGggMTBweC5cbiAgICogQGRlZmF1bHQgJzAgMCAyNCAyNCdcbiAgICovXG4gIHZpZXdCb3g6IFByb3BUeXBlcy5zdHJpbmdcbn0gOiB2b2lkIDA7XG5TdmdJY29uLm11aU5hbWUgPSAnU3ZnSWNvbic7XG5leHBvcnQgZGVmYXVsdCBTdmdJY29uOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZVN2Z0ljb24gZnJvbSAnLi4vLi4vdXRpbHMvY3JlYXRlU3ZnSWNvbic7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVN2Z0ljb24oIC8qI19fUFVSRV9fKi9fanN4KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTcgMTBsNSA1IDUtNXpcIlxufSksICdBcnJvd0Ryb3BEb3duJyk7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTdmdJY29uIGZyb20gJy4uL1N2Z0ljb24nO1xuXG4vKipcbiAqIFByaXZhdGUgbW9kdWxlIHJlc2VydmVkIGZvciBAbXVpIHBhY2thZ2VzLlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU3ZnSWNvbihwYXRoLCBkaXNwbGF5TmFtZSkge1xuICBmdW5jdGlvbiBDb21wb25lbnQocHJvcHMsIHJlZikge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChTdmdJY29uLCBfZXh0ZW5kcyh7XG4gICAgICBcImRhdGEtdGVzdGlkXCI6IGAke2Rpc3BsYXlOYW1lfUljb25gLFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBwcm9wcywge1xuICAgICAgY2hpbGRyZW46IHBhdGhcbiAgICB9KSk7XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBOZWVkIHRvIHNldCBgZGlzcGxheU5hbWVgIG9uIHRoZSBpbm5lciBjb21wb25lbnQgZm9yIFJlYWN0Lm1lbW8uXG4gICAgLy8gUmVhY3QgcHJpb3IgdG8gMTYuMTQgaWdub3JlcyBgZGlzcGxheU5hbWVgIG9uIHRoZSB3cmFwcGVyLlxuICAgIENvbXBvbmVudC5kaXNwbGF5TmFtZSA9IGAke2Rpc3BsYXlOYW1lfUljb25gO1xuICB9XG4gIENvbXBvbmVudC5tdWlOYW1lID0gU3ZnSWNvbi5tdWlOYW1lO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0Lm1lbW8oIC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKENvbXBvbmVudCkpO1xufSIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImF1dG9XaWR0aFwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3Nlc1wiLCBcImNsYXNzTmFtZVwiLCBcImRlZmF1bHRPcGVuXCIsIFwiZGlzcGxheUVtcHR5XCIsIFwiSWNvbkNvbXBvbmVudFwiLCBcImlkXCIsIFwiaW5wdXRcIiwgXCJpbnB1dFByb3BzXCIsIFwibGFiZWxcIiwgXCJsYWJlbElkXCIsIFwiTWVudVByb3BzXCIsIFwibXVsdGlwbGVcIiwgXCJuYXRpdmVcIiwgXCJvbkNsb3NlXCIsIFwib25PcGVuXCIsIFwib3BlblwiLCBcInJlbmRlclZhbHVlXCIsIFwiU2VsZWN0RGlzcGxheVByb3BzXCIsIFwidmFyaWFudFwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcInJvb3RcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBkZWVwbWVyZ2UgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBTZWxlY3RJbnB1dCBmcm9tICcuL1NlbGVjdElucHV0JztcbmltcG9ydCBmb3JtQ29udHJvbFN0YXRlIGZyb20gJy4uL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sU3RhdGUnO1xuaW1wb3J0IHVzZUZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sJztcbmltcG9ydCBBcnJvd0Ryb3BEb3duSWNvbiBmcm9tICcuLi9pbnRlcm5hbC9zdmctaWNvbnMvQXJyb3dEcm9wRG93bic7XG5pbXBvcnQgSW5wdXQgZnJvbSAnLi4vSW5wdXQnO1xuaW1wb3J0IE5hdGl2ZVNlbGVjdElucHV0IGZyb20gJy4uL05hdGl2ZVNlbGVjdC9OYXRpdmVTZWxlY3RJbnB1dCc7XG5pbXBvcnQgRmlsbGVkSW5wdXQgZnJvbSAnLi4vRmlsbGVkSW5wdXQnO1xuaW1wb3J0IE91dGxpbmVkSW5wdXQgZnJvbSAnLi4vT3V0bGluZWRJbnB1dCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIHJldHVybiBjbGFzc2VzO1xufTtcbmNvbnN0IHN0eWxlZFJvb3RDb25maWcgPSB7XG4gIG5hbWU6ICdNdWlTZWxlY3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290LFxuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgJiYgcHJvcCAhPT0gJ3ZhcmlhbnQnLFxuICBzbG90OiAnUm9vdCdcbn07XG5jb25zdCBTdHlsZWRJbnB1dCA9IHN0eWxlZChJbnB1dCwgc3R5bGVkUm9vdENvbmZpZykoJycpO1xuY29uc3QgU3R5bGVkT3V0bGluZWRJbnB1dCA9IHN0eWxlZChPdXRsaW5lZElucHV0LCBzdHlsZWRSb290Q29uZmlnKSgnJyk7XG5jb25zdCBTdHlsZWRGaWxsZWRJbnB1dCA9IHN0eWxlZChGaWxsZWRJbnB1dCwgc3R5bGVkUm9vdENvbmZpZykoJycpO1xuY29uc3QgU2VsZWN0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gU2VsZWN0KGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIG5hbWU6ICdNdWlTZWxlY3QnLFxuICAgIHByb3BzOiBpblByb3BzXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhdXRvV2lkdGggPSBmYWxzZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NlczogY2xhc3Nlc1Byb3AgPSB7fSxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRlZmF1bHRPcGVuID0gZmFsc2UsXG4gICAgICBkaXNwbGF5RW1wdHkgPSBmYWxzZSxcbiAgICAgIEljb25Db21wb25lbnQgPSBBcnJvd0Ryb3BEb3duSWNvbixcbiAgICAgIGlkLFxuICAgICAgaW5wdXQsXG4gICAgICBpbnB1dFByb3BzLFxuICAgICAgbGFiZWwsXG4gICAgICBsYWJlbElkLFxuICAgICAgTWVudVByb3BzLFxuICAgICAgbXVsdGlwbGUgPSBmYWxzZSxcbiAgICAgIG5hdGl2ZSA9IGZhbHNlLFxuICAgICAgb25DbG9zZSxcbiAgICAgIG9uT3BlbixcbiAgICAgIG9wZW4sXG4gICAgICByZW5kZXJWYWx1ZSxcbiAgICAgIFNlbGVjdERpc3BsYXlQcm9wcyxcbiAgICAgIHZhcmlhbnQ6IHZhcmlhbnRQcm9wID0gJ291dGxpbmVkJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBpbnB1dENvbXBvbmVudCA9IG5hdGl2ZSA/IE5hdGl2ZVNlbGVjdElucHV0IDogU2VsZWN0SW5wdXQ7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgZmNzID0gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gICAgcHJvcHMsXG4gICAgbXVpRm9ybUNvbnRyb2wsXG4gICAgc3RhdGVzOiBbJ3ZhcmlhbnQnLCAnZXJyb3InXVxuICB9KTtcbiAgY29uc3QgdmFyaWFudCA9IGZjcy52YXJpYW50IHx8IHZhcmlhbnRQcm9wO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgdmFyaWFudCxcbiAgICBjbGFzc2VzOiBjbGFzc2VzUHJvcFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCByZXN0T2ZDbGFzc2VzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoY2xhc3NlcywgX2V4Y2x1ZGVkMik7XG4gIGNvbnN0IElucHV0Q29tcG9uZW50ID0gaW5wdXQgfHwge1xuICAgIHN0YW5kYXJkOiAvKiNfX1BVUkVfXyovX2pzeChTdHlsZWRJbnB1dCwge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0pLFxuICAgIG91dGxpbmVkOiAvKiNfX1BVUkVfXyovX2pzeChTdHlsZWRPdXRsaW5lZElucHV0LCB7XG4gICAgICBsYWJlbDogbGFiZWwsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSksXG4gICAgZmlsbGVkOiAvKiNfX1BVUkVfXyovX2pzeChTdHlsZWRGaWxsZWRJbnB1dCwge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0pXG4gIH1bdmFyaWFudF07XG4gIGNvbnN0IGlucHV0Q29tcG9uZW50UmVmID0gdXNlRm9ya1JlZihyZWYsIElucHV0Q29tcG9uZW50LnJlZik7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChSZWFjdC5GcmFnbWVudCwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KElucHV0Q29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICAvLyBNb3N0IG9mIHRoZSBsb2dpYyBpcyBpbXBsZW1lbnRlZCBpbiBgU2VsZWN0SW5wdXRgLlxuICAgICAgLy8gVGhlIGBTZWxlY3RgIGNvbXBvbmVudCBpcyBhIHNpbXBsZSBBUEkgd3JhcHBlciB0byBleHBvc2Ugc29tZXRoaW5nIGJldHRlciB0byBwbGF5IHdpdGguXG4gICAgICBpbnB1dENvbXBvbmVudCxcbiAgICAgIGlucHV0UHJvcHM6IF9leHRlbmRzKHtcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIGVycm9yOiBmY3MuZXJyb3IsXG4gICAgICAgIEljb25Db21wb25lbnQsXG4gICAgICAgIHZhcmlhbnQsXG4gICAgICAgIHR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgLy8gV2UgcmVuZGVyIGEgc2VsZWN0LiBXZSBjYW4gaWdub3JlIHRoZSB0eXBlIHByb3ZpZGVkIGJ5IHRoZSBgSW5wdXRgLlxuICAgICAgICBtdWx0aXBsZVxuICAgICAgfSwgbmF0aXZlID8ge1xuICAgICAgICBpZFxuICAgICAgfSA6IHtcbiAgICAgICAgYXV0b1dpZHRoLFxuICAgICAgICBkZWZhdWx0T3BlbixcbiAgICAgICAgZGlzcGxheUVtcHR5LFxuICAgICAgICBsYWJlbElkLFxuICAgICAgICBNZW51UHJvcHMsXG4gICAgICAgIG9uQ2xvc2UsXG4gICAgICAgIG9uT3BlbixcbiAgICAgICAgb3BlbixcbiAgICAgICAgcmVuZGVyVmFsdWUsXG4gICAgICAgIFNlbGVjdERpc3BsYXlQcm9wczogX2V4dGVuZHMoe1xuICAgICAgICAgIGlkXG4gICAgICAgIH0sIFNlbGVjdERpc3BsYXlQcm9wcylcbiAgICAgIH0sIGlucHV0UHJvcHMsIHtcbiAgICAgICAgY2xhc3NlczogaW5wdXRQcm9wcyA/IGRlZXBtZXJnZShyZXN0T2ZDbGFzc2VzLCBpbnB1dFByb3BzLmNsYXNzZXMpIDogcmVzdE9mQ2xhc3Nlc1xuICAgICAgfSwgaW5wdXQgPyBpbnB1dC5wcm9wcy5pbnB1dFByb3BzIDoge30pXG4gICAgfSwgbXVsdGlwbGUgJiYgbmF0aXZlICYmIHZhcmlhbnQgPT09ICdvdXRsaW5lZCcgPyB7XG4gICAgICBub3RjaGVkOiB0cnVlXG4gICAgfSA6IHt9LCB7XG4gICAgICByZWY6IGlucHV0Q29tcG9uZW50UmVmLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KElucHV0Q29tcG9uZW50LnByb3BzLmNsYXNzTmFtZSwgY2xhc3NOYW1lLCBjbGFzc2VzLnJvb3QpXG4gICAgfSwgIWlucHV0ICYmIHtcbiAgICAgIHZhcmlhbnRcbiAgICB9LCBvdGhlcikpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBTZWxlY3QucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgd2lkdGggb2YgdGhlIHBvcG92ZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNldCBhY2NvcmRpbmcgdG8gdGhlIGl0ZW1zIGluc2lkZSB0aGVcbiAgICogbWVudSwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgYXQgbGVhc3QgdGhlIHdpZHRoIG9mIHRoZSBzZWxlY3QgaW5wdXQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhdXRvV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIG9wdGlvbiBlbGVtZW50cyB0byBwb3B1bGF0ZSB0aGUgc2VsZWN0IHdpdGguXG4gICAqIENhbiBiZSBzb21lIGBNZW51SXRlbWAgd2hlbiBgbmF0aXZlYCBpcyBmYWxzZSBhbmQgYG9wdGlvbmAgd2hlbiBgbmF0aXZlYCBpcyB0cnVlLlxuICAgKlxuICAgKiDimqDvuI9UaGUgYE1lbnVJdGVtYCBlbGVtZW50cyAqKm11c3QqKiBiZSBkaXJlY3QgZGVzY2VuZGFudHMgd2hlbiBgbmF0aXZlYCBpcyBmYWxzZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgaW5pdGlhbGx5IG9wZW4uIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgb3BlbiBzdGF0ZSBpcyBub3QgY29udHJvbGxlZCAoaS5lLiB0aGUgYG9wZW5gIHByb3AgaXMgbm90IGRlZmluZWQpLlxuICAgKiBZb3UgY2FuIG9ubHkgdXNlIGl0IHdoZW4gdGhlIGBuYXRpdmVgIHByb3AgaXMgYGZhbHNlYCAoZGVmYXVsdCkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZWZhdWx0T3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSB2YWx1ZSBpcyBkaXNwbGF5ZWQgZXZlbiBpZiBubyBpdGVtcyBhcmUgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEluIG9yZGVyIHRvIGRpc3BsYXkgYSBtZWFuaW5nZnVsIHZhbHVlLCBhIGZ1bmN0aW9uIGNhbiBiZSBwYXNzZWQgdG8gdGhlIGByZW5kZXJWYWx1ZWAgcHJvcCB3aGljaFxuICAgKiByZXR1cm5zIHRoZSB2YWx1ZSB0byBiZSBkaXNwbGF5ZWQgd2hlbiBubyBpdGVtcyBhcmUgc2VsZWN0ZWQuXG4gICAqXG4gICAqIOKaoO+4jyBXaGVuIHVzaW5nIHRoaXMgcHJvcCwgbWFrZSBzdXJlIHRoZSBsYWJlbCBkb2Vzbid0IG92ZXJsYXAgd2l0aCB0aGUgZW1wdHkgZGlzcGxheWVkIHZhbHVlLlxuICAgKiBUaGUgbGFiZWwgc2hvdWxkIGVpdGhlciBiZSBoaWRkZW4gb3IgZm9yY2VkIHRvIGEgc2hydW5rIHN0YXRlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzcGxheUVtcHR5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBpY29uIHRoYXQgZGlzcGxheXMgdGhlIGFycm93LlxuICAgKiBAZGVmYXVsdCBBcnJvd0Ryb3BEb3duSWNvblxuICAgKi9cbiAgSWNvbkNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogVGhlIGBpZGAgb2YgdGhlIHdyYXBwZXIgZWxlbWVudCBvciB0aGUgYHNlbGVjdGAgZWxlbWVudCB3aGVuIGBuYXRpdmVgLlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBBbiBgSW5wdXRgIGVsZW1lbnQ7IGRvZXMgbm90IGhhdmUgdG8gYmUgYSBtYXRlcmlhbC11aSBzcGVjaWZpYyBgSW5wdXRgLlxuICAgKi9cbiAgaW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50LFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIFdoZW4gYG5hdGl2ZWAgaXMgYHRydWVgLCB0aGUgYXR0cmlidXRlcyBhcmUgYXBwbGllZCBvbiB0aGUgYHNlbGVjdGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBTZWUgW091dGxpbmVkSW5wdXQjbGFiZWxdKC9tYXRlcmlhbC11aS9hcGkvb3V0bGluZWQtaW5wdXQvI3Byb3BzKVxuICAgKi9cbiAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIElEIG9mIGFuIGVsZW1lbnQgdGhhdCBhY3RzIGFzIGFuIGFkZGl0aW9uYWwgbGFiZWwuIFRoZSBTZWxlY3Qgd2lsbFxuICAgKiBiZSBsYWJlbGxlZCBieSB0aGUgYWRkaXRpb25hbCBsYWJlbCBhbmQgdGhlIHNlbGVjdGVkIHZhbHVlLlxuICAgKi9cbiAgbGFiZWxJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgTWVudWBdKC9tYXRlcmlhbC11aS9hcGkvbWVudS8pIGVsZW1lbnQuXG4gICAqL1xuICBNZW51UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGB2YWx1ZWAgbXVzdCBiZSBhbiBhcnJheSBhbmQgdGhlIG1lbnUgd2lsbCBzdXBwb3J0IG11bHRpcGxlIHNlbGVjdGlvbnMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtdWx0aXBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgdXNlcyBhIG5hdGl2ZSBgc2VsZWN0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbmF0aXZlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gYSBtZW51IGl0ZW0gaXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7U2VsZWN0Q2hhbmdlRXZlbnQ8VmFsdWU+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoYW55KS5cbiAgICogKipXYXJuaW5nKio6IFRoaXMgaXMgYSBnZW5lcmljIGV2ZW50LCBub3QgYSBjaGFuZ2UgZXZlbnQsIHVubGVzcyB0aGUgY2hhbmdlIGV2ZW50IGlzIGNhdXNlZCBieSBicm93c2VyIGF1dG9maWxsLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2NoaWxkXSBUaGUgcmVhY3QgZWxlbWVudCB0aGF0IHdhcyBzZWxlY3RlZCB3aGVuIGBuYXRpdmVgIGlzIGBmYWxzZWAgKGRlZmF1bHQpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIGNsb3NlZC5cbiAgICogVXNlIGl0IGluIGVpdGhlciBjb250cm9sbGVkIChzZWUgdGhlIGBvcGVuYCBwcm9wKSwgb3IgdW5jb250cm9sbGVkIG1vZGUgKHRvIGRldGVjdCB3aGVuIHRoZSBTZWxlY3QgY29sbGFwc2VzKS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgb3BlbmVkLlxuICAgKiBVc2UgaXQgaW4gZWl0aGVyIGNvbnRyb2xsZWQgKHNlZSB0aGUgYG9wZW5gIHByb3ApLCBvciB1bmNvbnRyb2xsZWQgbW9kZSAodG8gZGV0ZWN0IHdoZW4gdGhlIFNlbGVjdCBleHBhbmRzKS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKi9cbiAgb25PcGVuOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzaG93bi5cbiAgICogWW91IGNhbiBvbmx5IHVzZSBpdCB3aGVuIHRoZSBgbmF0aXZlYCBwcm9wIGlzIGBmYWxzZWAgKGRlZmF1bHQpLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIHNlbGVjdGVkIHZhbHVlLlxuICAgKiBZb3UgY2FuIG9ubHkgdXNlIGl0IHdoZW4gdGhlIGBuYXRpdmVgIHByb3AgaXMgYGZhbHNlYCAoZGVmYXVsdCkuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZSBUaGUgYHZhbHVlYCBwcm92aWRlZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyB7UmVhY3ROb2RlfVxuICAgKi9cbiAgcmVuZGVyVmFsdWU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgY2xpY2thYmxlIGRpdiBlbGVtZW50LlxuICAgKi9cbiAgU2VsZWN0RGlzcGxheVByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIGBpbnB1dGAgdmFsdWUuIFByb3ZpZGluZyBhbiBlbXB0eSBzdHJpbmcgd2lsbCBzZWxlY3Qgbm8gb3B0aW9ucy5cbiAgICogU2V0IHRvIGFuIGVtcHR5IHN0cmluZyBgJydgIGlmIHlvdSBkb24ndCB3YW50IGFueSBvZiB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgdG8gYmUgc2VsZWN0ZWQuXG4gICAqXG4gICAqIElmIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QgaXQgbXVzdCBoYXZlIHJlZmVyZW5jZSBlcXVhbGl0eSB3aXRoIHRoZSBvcHRpb24gaW4gb3JkZXIgdG8gYmUgc2VsZWN0ZWQuXG4gICAqIElmIHRoZSB2YWx1ZSBpcyBub3QgYW4gb2JqZWN0LCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG11c3QgbWF0Y2ggd2l0aCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvcHRpb24gaW4gb3JkZXIgdG8gYmUgc2VsZWN0ZWQuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnJ10pLCBQcm9wVHlwZXMuYW55XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdvdXRsaW5lZCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKVxufSA6IHZvaWQgMDtcblNlbGVjdC5tdWlOYW1lID0gJ1NlbGVjdCc7XG5leHBvcnQgZGVmYXVsdCBTZWxlY3Q7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRGaWVsZFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpVGV4dEZpZWxkJywgc2xvdCk7XG59XG5jb25zdCB0ZXh0RmllbGRDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpVGV4dEZpZWxkJywgWydyb290J10pO1xuZXhwb3J0IGRlZmF1bHQgdGV4dEZpZWxkQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhdXRvQ29tcGxldGVcIiwgXCJhdXRvRm9jdXNcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcIkZvcm1IZWxwZXJUZXh0UHJvcHNcIiwgXCJmdWxsV2lkdGhcIiwgXCJoZWxwZXJUZXh0XCIsIFwiaWRcIiwgXCJJbnB1dExhYmVsUHJvcHNcIiwgXCJpbnB1dFByb3BzXCIsIFwiSW5wdXRQcm9wc1wiLCBcImlucHV0UmVmXCIsIFwibGFiZWxcIiwgXCJtYXhSb3dzXCIsIFwibWluUm93c1wiLCBcIm11bHRpbGluZVwiLCBcIm5hbWVcIiwgXCJvbkJsdXJcIiwgXCJvbkNoYW5nZVwiLCBcIm9uRm9jdXNcIiwgXCJwbGFjZWhvbGRlclwiLCBcInJlcXVpcmVkXCIsIFwicm93c1wiLCBcInNlbGVjdFwiLCBcIlNlbGVjdFByb3BzXCIsIFwidHlwZVwiLCBcInZhbHVlXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IHJlZlR5cGUsIHVuc3RhYmxlX3VzZUlkIGFzIHVzZUlkIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IElucHV0IGZyb20gJy4uL0lucHV0JztcbmltcG9ydCBGaWxsZWRJbnB1dCBmcm9tICcuLi9GaWxsZWRJbnB1dCc7XG5pbXBvcnQgT3V0bGluZWRJbnB1dCBmcm9tICcuLi9PdXRsaW5lZElucHV0JztcbmltcG9ydCBJbnB1dExhYmVsIGZyb20gJy4uL0lucHV0TGFiZWwnO1xuaW1wb3J0IEZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sJztcbmltcG9ydCBGb3JtSGVscGVyVGV4dCBmcm9tICcuLi9Gb3JtSGVscGVyVGV4dCc7XG5pbXBvcnQgU2VsZWN0IGZyb20gJy4uL1NlbGVjdCc7XG5pbXBvcnQgeyBnZXRUZXh0RmllbGRVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3RleHRGaWVsZENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHZhcmlhbnRDb21wb25lbnQgPSB7XG4gIHN0YW5kYXJkOiBJbnB1dCxcbiAgZmlsbGVkOiBGaWxsZWRJbnB1dCxcbiAgb3V0bGluZWQ6IE91dGxpbmVkSW5wdXRcbn07XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRUZXh0RmllbGRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IFRleHRGaWVsZFJvb3QgPSBzdHlsZWQoRm9ybUNvbnRyb2wsIHtcbiAgbmFtZTogJ011aVRleHRGaWVsZCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe30pO1xuXG4vKipcbiAqIFRoZSBgVGV4dEZpZWxkYCBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIgZm9yIHRoZSBtb3N0IGNvbW1vbiBjYXNlcyAoODAlKS5cbiAqIEl0IGNhbm5vdCBiZSBhbGwgdGhpbmdzIHRvIGFsbCBwZW9wbGUsIG90aGVyd2lzZSB0aGUgQVBJIHdvdWxkIGdyb3cgb3V0IG9mIGNvbnRyb2wuXG4gKlxuICogIyMgQWR2YW5jZWQgQ29uZmlndXJhdGlvblxuICpcbiAqIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhhdCB0aGUgdGV4dCBmaWVsZCBpcyBhIHNpbXBsZSBhYnN0cmFjdGlvblxuICogb24gdG9wIG9mIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czpcbiAqXG4gKiAtIFtGb3JtQ29udHJvbF0oL21hdGVyaWFsLXVpL2FwaS9mb3JtLWNvbnRyb2wvKVxuICogLSBbSW5wdXRMYWJlbF0oL21hdGVyaWFsLXVpL2FwaS9pbnB1dC1sYWJlbC8pXG4gKiAtIFtGaWxsZWRJbnB1dF0oL21hdGVyaWFsLXVpL2FwaS9maWxsZWQtaW5wdXQvKVxuICogLSBbT3V0bGluZWRJbnB1dF0oL21hdGVyaWFsLXVpL2FwaS9vdXRsaW5lZC1pbnB1dC8pXG4gKiAtIFtJbnB1dF0oL21hdGVyaWFsLXVpL2FwaS9pbnB1dC8pXG4gKiAtIFtGb3JtSGVscGVyVGV4dF0oL21hdGVyaWFsLXVpL2FwaS9mb3JtLWhlbHBlci10ZXh0LylcbiAqXG4gKiBJZiB5b3Ugd2lzaCB0byBhbHRlciB0aGUgcHJvcHMgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LCB5b3UgY2FuIGRvIHNvIGFzIGZvbGxvd3M6XG4gKlxuICogYGBganN4XG4gKiBjb25zdCBpbnB1dFByb3BzID0ge1xuICogICBzdGVwOiAzMDAsXG4gKiB9O1xuICpcbiAqIHJldHVybiA8VGV4dEZpZWxkIGlkPVwidGltZVwiIHR5cGU9XCJ0aW1lXCIgaW5wdXRQcm9wcz17aW5wdXRQcm9wc30gLz47XG4gKiBgYGBcbiAqXG4gKiBGb3IgYWR2YW5jZWQgY2FzZXMsIHBsZWFzZSBsb29rIGF0IHRoZSBzb3VyY2Ugb2YgVGV4dEZpZWxkIGJ5IGNsaWNraW5nIG9uIHRoZVxuICogXCJFZGl0IHRoaXMgcGFnZVwiIGJ1dHRvbiBhYm92ZS4gQ29uc2lkZXIgZWl0aGVyOlxuICpcbiAqIC0gdXNpbmcgdGhlIHVwcGVyIGNhc2UgcHJvcHMgZm9yIHBhc3NpbmcgdmFsdWVzIGRpcmVjdGx5IHRvIHRoZSBjb21wb25lbnRzXG4gKiAtIHVzaW5nIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudHMgZGlyZWN0bHkgYXMgc2hvd24gaW4gdGhlIGRlbW9zXG4gKi9cbmNvbnN0IFRleHRGaWVsZCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFRleHRGaWVsZChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVGV4dEZpZWxkJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgYXV0b0NvbXBsZXRlLFxuICAgICAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgIGVycm9yID0gZmFsc2UsXG4gICAgICBGb3JtSGVscGVyVGV4dFByb3BzLFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICBoZWxwZXJUZXh0LFxuICAgICAgaWQ6IGlkT3ZlcnJpZGUsXG4gICAgICBJbnB1dExhYmVsUHJvcHMsXG4gICAgICBpbnB1dFByb3BzLFxuICAgICAgSW5wdXRQcm9wcyxcbiAgICAgIGlucHV0UmVmLFxuICAgICAgbGFiZWwsXG4gICAgICBtYXhSb3dzLFxuICAgICAgbWluUm93cyxcbiAgICAgIG11bHRpbGluZSA9IGZhbHNlLFxuICAgICAgbmFtZSxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgICAgIHJvd3MsXG4gICAgICBzZWxlY3QgPSBmYWxzZSxcbiAgICAgIFNlbGVjdFByb3BzLFxuICAgICAgdHlwZSxcbiAgICAgIHZhbHVlLFxuICAgICAgdmFyaWFudCA9ICdvdXRsaW5lZCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGF1dG9Gb2N1cyxcbiAgICBjb2xvcixcbiAgICBkaXNhYmxlZCxcbiAgICBlcnJvcixcbiAgICBmdWxsV2lkdGgsXG4gICAgbXVsdGlsaW5lLFxuICAgIHJlcXVpcmVkLFxuICAgIHNlbGVjdCxcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHNlbGVjdCAmJiAhY2hpbGRyZW4pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogYGNoaWxkcmVuYCBtdXN0IGJlIHBhc3NlZCB3aGVuIHVzaW5nIHRoZSBgVGV4dEZpZWxkYCBjb21wb25lbnQgd2l0aCBgc2VsZWN0YC4nKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgSW5wdXRNb3JlID0ge307XG4gIGlmICh2YXJpYW50ID09PSAnb3V0bGluZWQnKSB7XG4gICAgaWYgKElucHV0TGFiZWxQcm9wcyAmJiB0eXBlb2YgSW5wdXRMYWJlbFByb3BzLnNocmluayAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIElucHV0TW9yZS5ub3RjaGVkID0gSW5wdXRMYWJlbFByb3BzLnNocmluaztcbiAgICB9XG4gICAgSW5wdXRNb3JlLmxhYmVsID0gbGFiZWw7XG4gIH1cbiAgaWYgKHNlbGVjdCkge1xuICAgIC8vIHVuc2V0IGRlZmF1bHRzIGZyb20gdGV4dGJveCBpbnB1dHNcbiAgICBpZiAoIVNlbGVjdFByb3BzIHx8ICFTZWxlY3RQcm9wcy5uYXRpdmUpIHtcbiAgICAgIElucHV0TW9yZS5pZCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgSW5wdXRNb3JlWydhcmlhLWRlc2NyaWJlZGJ5J10gPSB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgaWQgPSB1c2VJZChpZE92ZXJyaWRlKTtcbiAgY29uc3QgaGVscGVyVGV4dElkID0gaGVscGVyVGV4dCAmJiBpZCA/IGAke2lkfS1oZWxwZXItdGV4dGAgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGlucHV0TGFiZWxJZCA9IGxhYmVsICYmIGlkID8gYCR7aWR9LWxhYmVsYCA6IHVuZGVmaW5lZDtcbiAgY29uc3QgSW5wdXRDb21wb25lbnQgPSB2YXJpYW50Q29tcG9uZW50W3ZhcmlhbnRdO1xuICBjb25zdCBJbnB1dEVsZW1lbnQgPSAvKiNfX1BVUkVfXyovX2pzeChJbnB1dENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBoZWxwZXJUZXh0SWQsXG4gICAgYXV0b0NvbXBsZXRlOiBhdXRvQ29tcGxldGUsXG4gICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgbXVsdGlsaW5lOiBtdWx0aWxpbmUsXG4gICAgbmFtZTogbmFtZSxcbiAgICByb3dzOiByb3dzLFxuICAgIG1heFJvd3M6IG1heFJvd3MsXG4gICAgbWluUm93czogbWluUm93cyxcbiAgICB0eXBlOiB0eXBlLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBpZDogaWQsXG4gICAgaW5wdXRSZWY6IGlucHV0UmVmLFxuICAgIG9uQmx1cjogb25CbHVyLFxuICAgIG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICBvbkZvY3VzOiBvbkZvY3VzLFxuICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcbiAgICBpbnB1dFByb3BzOiBpbnB1dFByb3BzXG4gIH0sIElucHV0TW9yZSwgSW5wdXRQcm9wcykpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFRleHRGaWVsZFJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBlcnJvcjogZXJyb3IsXG4gICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgcmVmOiByZWYsXG4gICAgcmVxdWlyZWQ6IHJlcXVpcmVkLFxuICAgIGNvbG9yOiBjb2xvcixcbiAgICB2YXJpYW50OiB2YXJpYW50LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogW2xhYmVsICE9IG51bGwgJiYgbGFiZWwgIT09ICcnICYmIC8qI19fUFVSRV9fKi9fanN4KElucHV0TGFiZWwsIF9leHRlbmRzKHtcbiAgICAgIGh0bWxGb3I6IGlkLFxuICAgICAgaWQ6IGlucHV0TGFiZWxJZFxuICAgIH0sIElucHV0TGFiZWxQcm9wcywge1xuICAgICAgY2hpbGRyZW46IGxhYmVsXG4gICAgfSkpLCBzZWxlY3QgPyAvKiNfX1BVUkVfXyovX2pzeChTZWxlY3QsIF9leHRlbmRzKHtcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBoZWxwZXJUZXh0SWQsXG4gICAgICBpZDogaWQsXG4gICAgICBsYWJlbElkOiBpbnB1dExhYmVsSWQsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBpbnB1dDogSW5wdXRFbGVtZW50XG4gICAgfSwgU2VsZWN0UHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pKSA6IElucHV0RWxlbWVudCwgaGVscGVyVGV4dCAmJiAvKiNfX1BVUkVfXyovX2pzeChGb3JtSGVscGVyVGV4dCwgX2V4dGVuZHMoe1xuICAgICAgaWQ6IGhlbHBlclRleHRJZFxuICAgIH0sIEZvcm1IZWxwZXJUZXh0UHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBoZWxwZXJUZXh0XG4gICAgfSkpXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRleHRGaWVsZC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgaGVscHMgdXNlcnMgdG8gZmlsbCBmb3JtcyBmYXN0ZXIsIGVzcGVjaWFsbHkgb24gbW9iaWxlIGRldmljZXMuXG4gICAqIFRoZSBuYW1lIGNhbiBiZSBjb25mdXNpbmcsIGFzIGl0J3MgbW9yZSBsaWtlIGFuIGF1dG9maWxsLlxuICAgKiBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgaXQgW2ZvbGxvd2luZyB0aGUgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybS1jb250cm9sLWluZnJhc3RydWN0dXJlLmh0bWwjYXV0b2ZpbGwpLlxuICAgKi9cbiAgYXV0b0NvbXBsZXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeScsICdlcnJvcicsICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBkaXNwbGF5ZWQgaW4gYW4gZXJyb3Igc3RhdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYEZvcm1IZWxwZXJUZXh0YF0oL21hdGVyaWFsLXVpL2FwaS9mb3JtLWhlbHBlci10ZXh0LykgZWxlbWVudC5cbiAgICovXG4gIEZvcm1IZWxwZXJUZXh0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBpbnB1dCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaGVscGVyIHRleHQgY29udGVudC5cbiAgICovXG4gIGhlbHBlclRleHQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIFVzZSB0aGlzIHByb3AgdG8gbWFrZSBgbGFiZWxgIGFuZCBgaGVscGVyVGV4dGAgYWNjZXNzaWJsZSBmb3Igc2NyZWVuIHJlYWRlcnMuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgSW5wdXRMYWJlbGBdKC9tYXRlcmlhbC11aS9hcGkvaW5wdXQtbGFiZWwvKSBlbGVtZW50LlxuICAgKiBQb2ludGVyIGV2ZW50cyBsaWtlIGBvbkNsaWNrYCBhcmUgZW5hYmxlZCBpZiBhbmQgb25seSBpZiBgc2hyaW5rYCBpcyBgdHJ1ZWAuXG4gICAqL1xuICBJbnB1dExhYmVsUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBJbnB1dCBlbGVtZW50LlxuICAgKiBJdCB3aWxsIGJlIGEgW2BGaWxsZWRJbnB1dGBdKC9tYXRlcmlhbC11aS9hcGkvZmlsbGVkLWlucHV0LyksXG4gICAqIFtgT3V0bGluZWRJbnB1dGBdKC9tYXRlcmlhbC11aS9hcGkvb3V0bGluZWQtaW5wdXQvKSBvciBbYElucHV0YF0oL21hdGVyaWFsLXVpL2FwaS9pbnB1dC8pXG4gICAqIGNvbXBvbmVudCBkZXBlbmRpbmcgb24gdGhlIGB2YXJpYW50YCBwcm9wIHZhbHVlLlxuICAgKi9cbiAgSW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogVGhlIGxhYmVsIGNvbnRlbnQuXG4gICAqL1xuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgIG9yIGBub3JtYWxgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nIG9mIHRoaXMgYW5kIGNvbnRhaW5lZCBjb21wb25lbnRzLlxuICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZScsICdub3JtYWwnXSksXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSBgdGV4dGFyZWFgIGVsZW1lbnQgaXMgcmVuZGVyZWQgaW5zdGVhZCBvZiBhbiBpbnB1dC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpbGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBzaG9ydCBoaW50IGRpc3BsYXllZCBpbiB0aGUgYGlucHV0YCBiZWZvcmUgdGhlIHVzZXIgZW50ZXJzIGEgdmFsdWUuXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGRpc3BsYXllZCBhcyByZXF1aXJlZCBhbmQgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyByZXF1aXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgcm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogUmVuZGVyIGEgW2BTZWxlY3RgXSgvbWF0ZXJpYWwtdWkvYXBpL3NlbGVjdC8pIGVsZW1lbnQgd2hpbGUgcGFzc2luZyB0aGUgSW5wdXQgZWxlbWVudCB0byBgU2VsZWN0YCBhcyBgaW5wdXRgIHBhcmFtZXRlci5cbiAgICogSWYgdGhpcyBvcHRpb24gaXMgc2V0IHlvdSBtdXN0IHBhc3MgdGhlIG9wdGlvbnMgb2YgdGhlIHNlbGVjdCBhcyBjaGlsZHJlbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHNlbGVjdDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYFNlbGVjdGBdKC9tYXRlcmlhbC11aS9hcGkvc2VsZWN0LykgZWxlbWVudC5cbiAgICovXG4gIFNlbGVjdFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuIEl0IHNob3VsZCBiZSBbYSB2YWxpZCBIVE1MNSBpbnB1dCB0eXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjRm9ybV8lM0NpbnB1dCUzRV90eXBlcykuXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudCwgcmVxdWlyZWQgZm9yIGEgY29udHJvbGxlZCBjb21wb25lbnQuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgJ291dGxpbmVkJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgVGV4dEZpZWxkOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUb29sYmFyVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUb29sYmFyJywgc2xvdCk7XG59XG5jb25zdCB0b29sYmFyQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVRvb2xiYXInLCBbJ3Jvb3QnLCAnZ3V0dGVycycsICdyZWd1bGFyJywgJ2RlbnNlJ10pO1xuZXhwb3J0IGRlZmF1bHQgdG9vbGJhckNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZUd1dHRlcnNcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGdldFRvb2xiYXJVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3Rvb2xiYXJDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlR3V0dGVycyxcbiAgICB2YXJpYW50XG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCAhZGlzYWJsZUd1dHRlcnMgJiYgJ2d1dHRlcnMnLCB2YXJpYW50XVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFRvb2xiYXJVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IFRvb2xiYXJSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlUb29sYmFyJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsICFvd25lclN0YXRlLmRpc2FibGVHdXR0ZXJzICYmIHN0eWxlcy5ndXR0ZXJzLCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInXG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlR3V0dGVycyAmJiB7XG4gIHBhZGRpbmdMZWZ0OiB0aGVtZS5zcGFjaW5nKDIpLFxuICBwYWRkaW5nUmlnaHQ6IHRoZW1lLnNwYWNpbmcoMiksXG4gIFt0aGVtZS5icmVha3BvaW50cy51cCgnc20nKV06IHtcbiAgICBwYWRkaW5nTGVmdDogdGhlbWUuc3BhY2luZygzKSxcbiAgICBwYWRkaW5nUmlnaHQ6IHRoZW1lLnNwYWNpbmcoMylcbiAgfVxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZGVuc2UnICYmIHtcbiAgbWluSGVpZ2h0OiA0OFxufSksICh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdyZWd1bGFyJyAmJiB0aGVtZS5taXhpbnMudG9vbGJhcik7XG5jb25zdCBUb29sYmFyID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gVG9vbGJhcihpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVG9vbGJhcidcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgICAgZGlzYWJsZUd1dHRlcnMgPSBmYWxzZSxcbiAgICAgIHZhcmlhbnQgPSAncmVndWxhcidcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudCxcbiAgICBkaXNhYmxlR3V0dGVycyxcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUb29sYmFyUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IHJlZixcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gIH0sIG90aGVyKSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRvb2xiYXIucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVGhlIFRvb2xiYXIgY2hpbGRyZW4sIHVzdWFsbHkgYSBtaXh0dXJlIG9mIGBJY29uQnV0dG9uYCwgYEJ1dHRvbmAgYW5kIGBUeXBvZ3JhcGh5YC5cbiAgICogVGhlIFRvb2xiYXIgaXMgYSBmbGV4IGNvbnRhaW5lciwgYWxsb3dpbmcgZmxleCBpdGVtIHByb3BlcnRpZXMgdG8gYmUgdXNlZCB0byBsYXkgb3V0IHRoZSBjaGlsZHJlbi5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgZGlzYWJsZXMgZ3V0dGVyIHBhZGRpbmcuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlR3V0dGVyczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdyZWd1bGFyJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdyZWd1bGFyJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBUb29sYmFyOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUeXBvZ3JhcGh5Jywgc2xvdCk7XG59XG5jb25zdCB0eXBvZ3JhcGh5Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVR5cG9ncmFwaHknLCBbJ3Jvb3QnLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnc3VidGl0bGUxJywgJ3N1YnRpdGxlMicsICdib2R5MScsICdib2R5MicsICdpbmhlcml0JywgJ2J1dHRvbicsICdjYXB0aW9uJywgJ292ZXJsaW5lJywgJ2FsaWduTGVmdCcsICdhbGlnblJpZ2h0JywgJ2FsaWduQ2VudGVyJywgJ2FsaWduSnVzdGlmeScsICdub1dyYXAnLCAnZ3V0dGVyQm90dG9tJywgJ3BhcmFncmFwaCddKTtcbmV4cG9ydCBkZWZhdWx0IHR5cG9ncmFwaHlDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFsaWduXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZ3V0dGVyQm90dG9tXCIsIFwibm9XcmFwXCIsIFwicGFyYWdyYXBoXCIsIFwidmFyaWFudFwiLCBcInZhcmlhbnRNYXBwaW5nXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfZXh0ZW5kU3hQcm9wIGFzIGV4dGVuZFN4UHJvcCB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB7IGdldFR5cG9ncmFwaHlVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3R5cG9ncmFwaHlDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgYWxpZ24sXG4gICAgZ3V0dGVyQm90dG9tLFxuICAgIG5vV3JhcCxcbiAgICBwYXJhZ3JhcGgsXG4gICAgdmFyaWFudCxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCB2YXJpYW50LCBvd25lclN0YXRlLmFsaWduICE9PSAnaW5oZXJpdCcgJiYgYGFsaWduJHtjYXBpdGFsaXplKGFsaWduKX1gLCBndXR0ZXJCb3R0b20gJiYgJ2d1dHRlckJvdHRvbScsIG5vV3JhcCAmJiAnbm9XcmFwJywgcGFyYWdyYXBoICYmICdwYXJhZ3JhcGgnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFR5cG9ncmFwaHlVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBUeXBvZ3JhcGh5Um9vdCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aVR5cG9ncmFwaHknLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS52YXJpYW50ICYmIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdLCBvd25lclN0YXRlLmFsaWduICE9PSAnaW5oZXJpdCcgJiYgc3R5bGVzW2BhbGlnbiR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmFsaWduKX1gXSwgb3duZXJTdGF0ZS5ub1dyYXAgJiYgc3R5bGVzLm5vV3JhcCwgb3duZXJTdGF0ZS5ndXR0ZXJCb3R0b20gJiYgc3R5bGVzLmd1dHRlckJvdHRvbSwgb3duZXJTdGF0ZS5wYXJhZ3JhcGggJiYgc3R5bGVzLnBhcmFncmFwaF07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIG1hcmdpbjogMFxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnaW5oZXJpdCcgJiYge1xuICAvLyBTb21lIGVsZW1lbnRzLCBsaWtlIDxidXR0b24+IG9uIENocm9tZSBoYXZlIGRlZmF1bHQgZm9udCB0aGF0IGRvZXNuJ3QgaW5oZXJpdCwgcmVzZXQgdGhpcy5cbiAgZm9udDogJ2luaGVyaXQnXG59LCBvd25lclN0YXRlLnZhcmlhbnQgIT09ICdpbmhlcml0JyAmJiB0aGVtZS50eXBvZ3JhcGh5W293bmVyU3RhdGUudmFyaWFudF0sIG93bmVyU3RhdGUuYWxpZ24gIT09ICdpbmhlcml0JyAmJiB7XG4gIHRleHRBbGlnbjogb3duZXJTdGF0ZS5hbGlnblxufSwgb3duZXJTdGF0ZS5ub1dyYXAgJiYge1xuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgd2hpdGVTcGFjZTogJ25vd3JhcCdcbn0sIG93bmVyU3RhdGUuZ3V0dGVyQm90dG9tICYmIHtcbiAgbWFyZ2luQm90dG9tOiAnMC4zNWVtJ1xufSwgb3duZXJTdGF0ZS5wYXJhZ3JhcGggJiYge1xuICBtYXJnaW5Cb3R0b206IDE2XG59KSk7XG5jb25zdCBkZWZhdWx0VmFyaWFudE1hcHBpbmcgPSB7XG4gIGgxOiAnaDEnLFxuICBoMjogJ2gyJyxcbiAgaDM6ICdoMycsXG4gIGg0OiAnaDQnLFxuICBoNTogJ2g1JyxcbiAgaDY6ICdoNicsXG4gIHN1YnRpdGxlMTogJ2g2JyxcbiAgc3VidGl0bGUyOiAnaDYnLFxuICBib2R5MTogJ3AnLFxuICBib2R5MjogJ3AnLFxuICBpbmhlcml0OiAncCdcbn07XG5cbi8vIFRPRE8gdjY6IGRlcHJlY2F0ZSB0aGVzZSBjb2xvciB2YWx1ZXMgaW4gdjUueCBhbmQgcmVtb3ZlIHRoZSB0cmFuc2Zvcm1hdGlvbiBpbiB2NlxuY29uc3QgY29sb3JUcmFuc2Zvcm1hdGlvbnMgPSB7XG4gIHByaW1hcnk6ICdwcmltYXJ5Lm1haW4nLFxuICB0ZXh0UHJpbWFyeTogJ3RleHQucHJpbWFyeScsXG4gIHNlY29uZGFyeTogJ3NlY29uZGFyeS5tYWluJyxcbiAgdGV4dFNlY29uZGFyeTogJ3RleHQuc2Vjb25kYXJ5JyxcbiAgZXJyb3I6ICdlcnJvci5tYWluJ1xufTtcbmNvbnN0IHRyYW5zZm9ybURlcHJlY2F0ZWRDb2xvcnMgPSBjb2xvciA9PiB7XG4gIHJldHVybiBjb2xvclRyYW5zZm9ybWF0aW9uc1tjb2xvcl0gfHwgY29sb3I7XG59O1xuY29uc3QgVHlwb2dyYXBoeSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFR5cG9ncmFwaHkoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHRoZW1lUHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVHlwb2dyYXBoeSdcbiAgfSk7XG4gIGNvbnN0IGNvbG9yID0gdHJhbnNmb3JtRGVwcmVjYXRlZENvbG9ycyh0aGVtZVByb3BzLmNvbG9yKTtcbiAgY29uc3QgcHJvcHMgPSBleHRlbmRTeFByb3AoX2V4dGVuZHMoe30sIHRoZW1lUHJvcHMsIHtcbiAgICBjb2xvclxuICB9KSk7XG4gIGNvbnN0IHtcbiAgICAgIGFsaWduID0gJ2luaGVyaXQnLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50LFxuICAgICAgZ3V0dGVyQm90dG9tID0gZmFsc2UsXG4gICAgICBub1dyYXAgPSBmYWxzZSxcbiAgICAgIHBhcmFncmFwaCA9IGZhbHNlLFxuICAgICAgdmFyaWFudCA9ICdib2R5MScsXG4gICAgICB2YXJpYW50TWFwcGluZyA9IGRlZmF1bHRWYXJpYW50TWFwcGluZ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgYWxpZ24sXG4gICAgY29sb3IsXG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbXBvbmVudCxcbiAgICBndXR0ZXJCb3R0b20sXG4gICAgbm9XcmFwLFxuICAgIHBhcmFncmFwaCxcbiAgICB2YXJpYW50LFxuICAgIHZhcmlhbnRNYXBwaW5nXG4gIH0pO1xuICBjb25zdCBDb21wb25lbnQgPSBjb21wb25lbnQgfHwgKHBhcmFncmFwaCA/ICdwJyA6IHZhcmlhbnRNYXBwaW5nW3ZhcmlhbnRdIHx8IGRlZmF1bHRWYXJpYW50TWFwcGluZ1t2YXJpYW50XSkgfHwgJ3NwYW4nO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUeXBvZ3JhcGh5Um9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBDb21wb25lbnQsXG4gICAgcmVmOiByZWYsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpXG4gIH0sIG90aGVyKSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFR5cG9ncmFwaHkucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogU2V0IHRoZSB0ZXh0LWFsaWduIG9uIHRoZSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdpbmhlcml0J1xuICAgKi9cbiAgYWxpZ246IFByb3BUeXBlcy5vbmVPZihbJ2NlbnRlcicsICdpbmhlcml0JywgJ2p1c3RpZnknLCAnbGVmdCcsICdyaWdodCddKSxcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0ZXh0IHdpbGwgaGF2ZSBhIGJvdHRvbSBtYXJnaW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBndXR0ZXJCb3R0b206IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdGV4dCB3aWxsIG5vdCB3cmFwLCBidXQgaW5zdGVhZCB3aWxsIHRydW5jYXRlIHdpdGggYSB0ZXh0IG92ZXJmbG93IGVsbGlwc2lzLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGV4dCBvdmVyZmxvdyBjYW4gb25seSBoYXBwZW4gd2l0aCBibG9jayBvciBpbmxpbmUtYmxvY2sgbGV2ZWwgZWxlbWVudHNcbiAgICogKHRoZSBlbGVtZW50IG5lZWRzIHRvIGhhdmUgYSB3aWR0aCBpbiBvcmRlciB0byBvdmVyZmxvdykuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBub1dyYXA6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgZWxlbWVudCB3aWxsIGJlIGEgcGFyYWdyYXBoIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBwYXJhZ3JhcGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogQXBwbGllcyB0aGUgdGhlbWUgdHlwb2dyYXBoeSBzdHlsZXMuXG4gICAqIEBkZWZhdWx0ICdib2R5MSdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYm9keTEnLCAnYm9keTInLCAnYnV0dG9uJywgJ2NhcHRpb24nLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnaW5oZXJpdCcsICdvdmVybGluZScsICdzdWJ0aXRsZTEnLCAnc3VidGl0bGUyJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IG1hcHMgdGhlIHZhcmlhbnQgcHJvcCB0byBhIHJhbmdlIG9mIGRpZmZlcmVudCBIVE1MIGVsZW1lbnQgdHlwZXMuXG4gICAqIEZvciBpbnN0YW5jZSwgc3VidGl0bGUxIHRvIGA8aDY+YC5cbiAgICogSWYgeW91IHdpc2ggdG8gY2hhbmdlIHRoYXQgbWFwcGluZywgeW91IGNhbiBwcm92aWRlIHlvdXIgb3duLlxuICAgKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSB0aGUgYGNvbXBvbmVudGAgcHJvcC5cbiAgICogQGRlZmF1bHQge1xuICAgKiAgIGgxOiAnaDEnLFxuICAgKiAgIGgyOiAnaDInLFxuICAgKiAgIGgzOiAnaDMnLFxuICAgKiAgIGg0OiAnaDQnLFxuICAgKiAgIGg1OiAnaDUnLFxuICAgKiAgIGg2OiAnaDYnLFxuICAgKiAgIHN1YnRpdGxlMTogJ2g2JyxcbiAgICogICBzdWJ0aXRsZTI6ICdoNicsXG4gICAqICAgYm9keTE6ICdwJyxcbiAgICogICBib2R5MjogJ3AnLFxuICAgKiAgIGluaGVyaXQ6ICdwJyxcbiAgICogfVxuICAgKi9cbiAgdmFyaWFudE1hcHBpbmc6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9iamVjdFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFR5cG9ncmFwaHk7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1widGhlbWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgVGhlbWVQcm92aWRlciBhcyBTeXN0ZW1UaGVtZVByb3ZpZGVyIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IFRIRU1FX0lEIGZyb20gJy4vaWRlbnRpZmllcic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVGhlbWVQcm92aWRlcihfcmVmKSB7XG4gIGxldCB7XG4gICAgICB0aGVtZTogdGhlbWVJbnB1dFxuICAgIH0gPSBfcmVmLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgc2NvcGVkVGhlbWUgPSB0aGVtZUlucHV0W1RIRU1FX0lEXTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFN5c3RlbVRoZW1lUHJvdmlkZXIsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIHRoZW1lSWQ6IHNjb3BlZFRoZW1lID8gVEhFTUVfSUQgOiB1bmRlZmluZWQsXG4gICAgdGhlbWU6IHNjb3BlZFRoZW1lIHx8IHRoZW1lSW5wdXRcbiAgfSkpO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVGhlbWVQcm92aWRlci5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBZb3VyIGNvbXBvbmVudCB0cmVlLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogQSB0aGVtZSBvYmplY3QuIFlvdSBjYW4gcHJvdmlkZSBhIGZ1bmN0aW9uIHRvIGV4dGVuZCB0aGUgb3V0ZXIgdGhlbWUuXG4gICAqL1xuICB0aGVtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmZ1bmNdKS5pc1JlcXVpcmVkXG59IDogdm9pZCAwOyIsImNvbnN0IGNvbW1vbiA9IHtcbiAgYmxhY2s6ICcjMDAwJyxcbiAgd2hpdGU6ICcjZmZmJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1vbjsiLCJjb25zdCBncmV5ID0ge1xuICA1MDogJyNmYWZhZmEnLFxuICAxMDA6ICcjZjVmNWY1JyxcbiAgMjAwOiAnI2VlZWVlZScsXG4gIDMwMDogJyNlMGUwZTAnLFxuICA0MDA6ICcjYmRiZGJkJyxcbiAgNTAwOiAnIzllOWU5ZScsXG4gIDYwMDogJyM3NTc1NzUnLFxuICA3MDA6ICcjNjE2MTYxJyxcbiAgODAwOiAnIzQyNDI0MicsXG4gIDkwMDogJyMyMTIxMjEnLFxuICBBMTAwOiAnI2Y1ZjVmNScsXG4gIEEyMDA6ICcjZWVlZWVlJyxcbiAgQTQwMDogJyNiZGJkYmQnLFxuICBBNzAwOiAnIzYxNjE2MSdcbn07XG5leHBvcnQgZGVmYXVsdCBncmV5OyIsImNvbnN0IHB1cnBsZSA9IHtcbiAgNTA6ICcjZjNlNWY1JyxcbiAgMTAwOiAnI2UxYmVlNycsXG4gIDIwMDogJyNjZTkzZDgnLFxuICAzMDA6ICcjYmE2OGM4JyxcbiAgNDAwOiAnI2FiNDdiYycsXG4gIDUwMDogJyM5YzI3YjAnLFxuICA2MDA6ICcjOGUyNGFhJyxcbiAgNzAwOiAnIzdiMWZhMicsXG4gIDgwMDogJyM2YTFiOWEnLFxuICA5MDA6ICcjNGExNDhjJyxcbiAgQTEwMDogJyNlYTgwZmMnLFxuICBBMjAwOiAnI2UwNDBmYicsXG4gIEE0MDA6ICcjZDUwMGY5JyxcbiAgQTcwMDogJyNhYTAwZmYnXG59O1xuZXhwb3J0IGRlZmF1bHQgcHVycGxlOyIsImNvbnN0IHJlZCA9IHtcbiAgNTA6ICcjZmZlYmVlJyxcbiAgMTAwOiAnI2ZmY2RkMicsXG4gIDIwMDogJyNlZjlhOWEnLFxuICAzMDA6ICcjZTU3MzczJyxcbiAgNDAwOiAnI2VmNTM1MCcsXG4gIDUwMDogJyNmNDQzMzYnLFxuICA2MDA6ICcjZTUzOTM1JyxcbiAgNzAwOiAnI2QzMmYyZicsXG4gIDgwMDogJyNjNjI4MjgnLFxuICA5MDA6ICcjYjcxYzFjJyxcbiAgQTEwMDogJyNmZjhhODAnLFxuICBBMjAwOiAnI2ZmNTI1MicsXG4gIEE0MDA6ICcjZmYxNzQ0JyxcbiAgQTcwMDogJyNkNTAwMDAnXG59O1xuZXhwb3J0IGRlZmF1bHQgcmVkOyIsImNvbnN0IG9yYW5nZSA9IHtcbiAgNTA6ICcjZmZmM2UwJyxcbiAgMTAwOiAnI2ZmZTBiMicsXG4gIDIwMDogJyNmZmNjODAnLFxuICAzMDA6ICcjZmZiNzRkJyxcbiAgNDAwOiAnI2ZmYTcyNicsXG4gIDUwMDogJyNmZjk4MDAnLFxuICA2MDA6ICcjZmI4YzAwJyxcbiAgNzAwOiAnI2Y1N2MwMCcsXG4gIDgwMDogJyNlZjZjMDAnLFxuICA5MDA6ICcjZTY1MTAwJyxcbiAgQTEwMDogJyNmZmQxODAnLFxuICBBMjAwOiAnI2ZmYWI0MCcsXG4gIEE0MDA6ICcjZmY5MTAwJyxcbiAgQTcwMDogJyNmZjZkMDAnXG59O1xuZXhwb3J0IGRlZmF1bHQgb3JhbmdlOyIsImNvbnN0IGJsdWUgPSB7XG4gIDUwOiAnI2UzZjJmZCcsXG4gIDEwMDogJyNiYmRlZmInLFxuICAyMDA6ICcjOTBjYWY5JyxcbiAgMzAwOiAnIzY0YjVmNicsXG4gIDQwMDogJyM0MmE1ZjUnLFxuICA1MDA6ICcjMjE5NmYzJyxcbiAgNjAwOiAnIzFlODhlNScsXG4gIDcwMDogJyMxOTc2ZDInLFxuICA4MDA6ICcjMTU2NWMwJyxcbiAgOTAwOiAnIzBkNDdhMScsXG4gIEExMDA6ICcjODJiMWZmJyxcbiAgQTIwMDogJyM0NDhhZmYnLFxuICBBNDAwOiAnIzI5NzlmZicsXG4gIEE3MDA6ICcjMjk2MmZmJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGJsdWU7IiwiY29uc3QgbGlnaHRCbHVlID0ge1xuICA1MDogJyNlMWY1ZmUnLFxuICAxMDA6ICcjYjNlNWZjJyxcbiAgMjAwOiAnIzgxZDRmYScsXG4gIDMwMDogJyM0ZmMzZjcnLFxuICA0MDA6ICcjMjliNmY2JyxcbiAgNTAwOiAnIzAzYTlmNCcsXG4gIDYwMDogJyMwMzliZTUnLFxuICA3MDA6ICcjMDI4OGQxJyxcbiAgODAwOiAnIzAyNzdiZCcsXG4gIDkwMDogJyMwMTU3OWInLFxuICBBMTAwOiAnIzgwZDhmZicsXG4gIEEyMDA6ICcjNDBjNGZmJyxcbiAgQTQwMDogJyMwMGIwZmYnLFxuICBBNzAwOiAnIzAwOTFlYSdcbn07XG5leHBvcnQgZGVmYXVsdCBsaWdodEJsdWU7IiwiY29uc3QgZ3JlZW4gPSB7XG4gIDUwOiAnI2U4ZjVlOScsXG4gIDEwMDogJyNjOGU2YzknLFxuICAyMDA6ICcjYTVkNmE3JyxcbiAgMzAwOiAnIzgxYzc4NCcsXG4gIDQwMDogJyM2NmJiNmEnLFxuICA1MDA6ICcjNGNhZjUwJyxcbiAgNjAwOiAnIzQzYTA0NycsXG4gIDcwMDogJyMzODhlM2MnLFxuICA4MDA6ICcjMmU3ZDMyJyxcbiAgOTAwOiAnIzFiNWUyMCcsXG4gIEExMDA6ICcjYjlmNmNhJyxcbiAgQTIwMDogJyM2OWYwYWUnLFxuICBBNDAwOiAnIzAwZTY3NicsXG4gIEE3MDA6ICcjMDBjODUzJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGdyZWVuOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgeyBmb3JtYXRNdWlFcnJvck1lc3NhZ2UgYXMgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSB9IGZyb20gXCJAbXVpL3V0aWxzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJtb2RlXCIsIFwiY29udHJhc3RUaHJlc2hvbGRcIiwgXCJ0b25hbE9mZnNldFwiXTtcbmltcG9ydCB7IGRlZXBtZXJnZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgZGFya2VuLCBnZXRDb250cmFzdFJhdGlvLCBsaWdodGVuIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGNvbW1vbiBmcm9tICcuLi9jb2xvcnMvY29tbW9uJztcbmltcG9ydCBncmV5IGZyb20gJy4uL2NvbG9ycy9ncmV5JztcbmltcG9ydCBwdXJwbGUgZnJvbSAnLi4vY29sb3JzL3B1cnBsZSc7XG5pbXBvcnQgcmVkIGZyb20gJy4uL2NvbG9ycy9yZWQnO1xuaW1wb3J0IG9yYW5nZSBmcm9tICcuLi9jb2xvcnMvb3JhbmdlJztcbmltcG9ydCBibHVlIGZyb20gJy4uL2NvbG9ycy9ibHVlJztcbmltcG9ydCBsaWdodEJsdWUgZnJvbSAnLi4vY29sb3JzL2xpZ2h0Qmx1ZSc7XG5pbXBvcnQgZ3JlZW4gZnJvbSAnLi4vY29sb3JzL2dyZWVuJztcbmV4cG9ydCBjb25zdCBsaWdodCA9IHtcbiAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHN0eWxlIHRoZSB0ZXh0LlxuICB0ZXh0OiB7XG4gICAgLy8gVGhlIG1vc3QgaW1wb3J0YW50IHRleHQuXG4gICAgcHJpbWFyeTogJ3JnYmEoMCwgMCwgMCwgMC44NyknLFxuICAgIC8vIFNlY29uZGFyeSB0ZXh0LlxuICAgIHNlY29uZGFyeTogJ3JnYmEoMCwgMCwgMCwgMC42KScsXG4gICAgLy8gRGlzYWJsZWQgdGV4dCBoYXZlIGV2ZW4gbG93ZXIgdmlzdWFsIHByb21pbmVuY2UuXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDAsIDAsIDAsIDAuMzgpJ1xuICB9LFxuICAvLyBUaGUgY29sb3IgdXNlZCB0byBkaXZpZGUgZGlmZmVyZW50IGVsZW1lbnRzLlxuICBkaXZpZGVyOiAncmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gIC8vIFRoZSBiYWNrZ3JvdW5kIGNvbG9ycyB1c2VkIHRvIHN0eWxlIHRoZSBzdXJmYWNlcy5cbiAgLy8gQ29uc2lzdGVuY3kgYmV0d2VlbiB0aGVzZSB2YWx1ZXMgaXMgaW1wb3J0YW50LlxuICBiYWNrZ3JvdW5kOiB7XG4gICAgcGFwZXI6IGNvbW1vbi53aGl0ZSxcbiAgICBkZWZhdWx0OiBjb21tb24ud2hpdGVcbiAgfSxcbiAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHN0eWxlIHRoZSBhY3Rpb24gZWxlbWVudHMuXG4gIGFjdGlvbjoge1xuICAgIC8vIFRoZSBjb2xvciBvZiBhbiBhY3RpdmUgYWN0aW9uIGxpa2UgYW4gaWNvbiBidXR0b24uXG4gICAgYWN0aXZlOiAncmdiYSgwLCAwLCAwLCAwLjU0KScsXG4gICAgLy8gVGhlIGNvbG9yIG9mIGFuIGhvdmVyZWQgYWN0aW9uLlxuICAgIGhvdmVyOiAncmdiYSgwLCAwLCAwLCAwLjA0KScsXG4gICAgaG92ZXJPcGFjaXR5OiAwLjA0LFxuICAgIC8vIFRoZSBjb2xvciBvZiBhIHNlbGVjdGVkIGFjdGlvbi5cbiAgICBzZWxlY3RlZDogJ3JnYmEoMCwgMCwgMCwgMC4wOCknLFxuICAgIHNlbGVjdGVkT3BhY2l0eTogMC4wOCxcbiAgICAvLyBUaGUgY29sb3Igb2YgYSBkaXNhYmxlZCBhY3Rpb24uXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDAsIDAsIDAsIDAuMjYpJyxcbiAgICAvLyBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiBhIGRpc2FibGVkIGFjdGlvbi5cbiAgICBkaXNhYmxlZEJhY2tncm91bmQ6ICdyZ2JhKDAsIDAsIDAsIDAuMTIpJyxcbiAgICBkaXNhYmxlZE9wYWNpdHk6IDAuMzgsXG4gICAgZm9jdXM6ICdyZ2JhKDAsIDAsIDAsIDAuMTIpJyxcbiAgICBmb2N1c09wYWNpdHk6IDAuMTIsXG4gICAgYWN0aXZhdGVkT3BhY2l0eTogMC4xMlxuICB9XG59O1xuZXhwb3J0IGNvbnN0IGRhcmsgPSB7XG4gIHRleHQ6IHtcbiAgICBwcmltYXJ5OiBjb21tb24ud2hpdGUsXG4gICAgc2Vjb25kYXJ5OiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpJyxcbiAgICBkaXNhYmxlZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC41KScsXG4gICAgaWNvbjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSdcbiAgfSxcbiAgZGl2aWRlcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknLFxuICBiYWNrZ3JvdW5kOiB7XG4gICAgcGFwZXI6ICcjMTIxMjEyJyxcbiAgICBkZWZhdWx0OiAnIzEyMTIxMidcbiAgfSxcbiAgYWN0aW9uOiB7XG4gICAgYWN0aXZlOiBjb21tb24ud2hpdGUsXG4gICAgaG92ZXI6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpJyxcbiAgICBob3Zlck9wYWNpdHk6IDAuMDgsXG4gICAgc2VsZWN0ZWQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpJyxcbiAgICBzZWxlY3RlZE9wYWNpdHk6IDAuMTYsXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyknLFxuICAgIGRpc2FibGVkQmFja2dyb3VuZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknLFxuICAgIGRpc2FibGVkT3BhY2l0eTogMC4zOCxcbiAgICBmb2N1czogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknLFxuICAgIGZvY3VzT3BhY2l0eTogMC4xMixcbiAgICBhY3RpdmF0ZWRPcGFjaXR5OiAwLjI0XG4gIH1cbn07XG5mdW5jdGlvbiBhZGRMaWdodE9yRGFyayhpbnRlbnQsIGRpcmVjdGlvbiwgc2hhZGUsIHRvbmFsT2Zmc2V0KSB7XG4gIGNvbnN0IHRvbmFsT2Zmc2V0TGlnaHQgPSB0b25hbE9mZnNldC5saWdodCB8fCB0b25hbE9mZnNldDtcbiAgY29uc3QgdG9uYWxPZmZzZXREYXJrID0gdG9uYWxPZmZzZXQuZGFyayB8fCB0b25hbE9mZnNldCAqIDEuNTtcbiAgaWYgKCFpbnRlbnRbZGlyZWN0aW9uXSkge1xuICAgIGlmIChpbnRlbnQuaGFzT3duUHJvcGVydHkoc2hhZGUpKSB7XG4gICAgICBpbnRlbnRbZGlyZWN0aW9uXSA9IGludGVudFtzaGFkZV07XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdsaWdodCcpIHtcbiAgICAgIGludGVudC5saWdodCA9IGxpZ2h0ZW4oaW50ZW50Lm1haW4sIHRvbmFsT2Zmc2V0TGlnaHQpO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnZGFyaycpIHtcbiAgICAgIGludGVudC5kYXJrID0gZGFya2VuKGludGVudC5tYWluLCB0b25hbE9mZnNldERhcmspO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFByaW1hcnkobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBibHVlWzIwMF0sXG4gICAgICBsaWdodDogYmx1ZVs1MF0sXG4gICAgICBkYXJrOiBibHVlWzQwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogYmx1ZVs3MDBdLFxuICAgIGxpZ2h0OiBibHVlWzQwMF0sXG4gICAgZGFyazogYmx1ZVs4MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0U2Vjb25kYXJ5KG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogcHVycGxlWzIwMF0sXG4gICAgICBsaWdodDogcHVycGxlWzUwXSxcbiAgICAgIGRhcms6IHB1cnBsZVs0MDBdXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1haW46IHB1cnBsZVs1MDBdLFxuICAgIGxpZ2h0OiBwdXJwbGVbMzAwXSxcbiAgICBkYXJrOiBwdXJwbGVbNzAwXVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdEVycm9yKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogcmVkWzUwMF0sXG4gICAgICBsaWdodDogcmVkWzMwMF0sXG4gICAgICBkYXJrOiByZWRbNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiByZWRbNzAwXSxcbiAgICBsaWdodDogcmVkWzQwMF0sXG4gICAgZGFyazogcmVkWzgwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRJbmZvKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogbGlnaHRCbHVlWzQwMF0sXG4gICAgICBsaWdodDogbGlnaHRCbHVlWzMwMF0sXG4gICAgICBkYXJrOiBsaWdodEJsdWVbNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBsaWdodEJsdWVbNzAwXSxcbiAgICBsaWdodDogbGlnaHRCbHVlWzUwMF0sXG4gICAgZGFyazogbGlnaHRCbHVlWzkwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRTdWNjZXNzKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogZ3JlZW5bNDAwXSxcbiAgICAgIGxpZ2h0OiBncmVlblszMDBdLFxuICAgICAgZGFyazogZ3JlZW5bNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBncmVlbls4MDBdLFxuICAgIGxpZ2h0OiBncmVlbls1MDBdLFxuICAgIGRhcms6IGdyZWVuWzkwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRXYXJuaW5nKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogb3JhbmdlWzQwMF0sXG4gICAgICBsaWdodDogb3JhbmdlWzMwMF0sXG4gICAgICBkYXJrOiBvcmFuZ2VbNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiAnI2VkNmMwMicsXG4gICAgLy8gY2xvc2VzdCB0byBvcmFuZ2VbODAwXSB0aGF0IHBhc3MgMzoxLlxuICAgIGxpZ2h0OiBvcmFuZ2VbNTAwXSxcbiAgICBkYXJrOiBvcmFuZ2VbOTAwXVxuICB9O1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUGFsZXR0ZShwYWxldHRlKSB7XG4gIGNvbnN0IHtcbiAgICAgIG1vZGUgPSAnbGlnaHQnLFxuICAgICAgY29udHJhc3RUaHJlc2hvbGQgPSAzLFxuICAgICAgdG9uYWxPZmZzZXQgPSAwLjJcbiAgICB9ID0gcGFsZXR0ZSxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHBhbGV0dGUsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHByaW1hcnkgPSBwYWxldHRlLnByaW1hcnkgfHwgZ2V0RGVmYXVsdFByaW1hcnkobW9kZSk7XG4gIGNvbnN0IHNlY29uZGFyeSA9IHBhbGV0dGUuc2Vjb25kYXJ5IHx8IGdldERlZmF1bHRTZWNvbmRhcnkobW9kZSk7XG4gIGNvbnN0IGVycm9yID0gcGFsZXR0ZS5lcnJvciB8fCBnZXREZWZhdWx0RXJyb3IobW9kZSk7XG4gIGNvbnN0IGluZm8gPSBwYWxldHRlLmluZm8gfHwgZ2V0RGVmYXVsdEluZm8obW9kZSk7XG4gIGNvbnN0IHN1Y2Nlc3MgPSBwYWxldHRlLnN1Y2Nlc3MgfHwgZ2V0RGVmYXVsdFN1Y2Nlc3MobW9kZSk7XG4gIGNvbnN0IHdhcm5pbmcgPSBwYWxldHRlLndhcm5pbmcgfHwgZ2V0RGVmYXVsdFdhcm5pbmcobW9kZSk7XG5cbiAgLy8gVXNlIHRoZSBzYW1lIGxvZ2ljIGFzXG4gIC8vIEJvb3RzdHJhcDogaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvMWQ2ZTM3MTBkZDQ0N2RlMWEyMDBmMjllOGZhNTIxZjhhMDkwOGY3MC9zY3NzL19mdW5jdGlvbnMuc2NzcyNMNTlcbiAgLy8gYW5kIG1hdGVyaWFsLWNvbXBvbmVudHMtd2ViIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRlcmlhbC1jb21wb25lbnRzL21hdGVyaWFsLWNvbXBvbmVudHMtd2ViL2Jsb2IvYWM0NmI4ODYzYzRkYWI5ZmMyMmM0YzY2MmRjNmJkMWI2NWRkNjUyZi9wYWNrYWdlcy9tZGMtdGhlbWUvX2Z1bmN0aW9ucy5zY3NzI0w1NFxuICBmdW5jdGlvbiBnZXRDb250cmFzdFRleHQoYmFja2dyb3VuZCkge1xuICAgIGNvbnN0IGNvbnRyYXN0VGV4dCA9IGdldENvbnRyYXN0UmF0aW8oYmFja2dyb3VuZCwgZGFyay50ZXh0LnByaW1hcnkpID49IGNvbnRyYXN0VGhyZXNob2xkID8gZGFyay50ZXh0LnByaW1hcnkgOiBsaWdodC50ZXh0LnByaW1hcnk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IGNvbnRyYXN0ID0gZ2V0Q29udHJhc3RSYXRpbyhiYWNrZ3JvdW5kLCBjb250cmFzdFRleHQpO1xuICAgICAgaWYgKGNvbnRyYXN0IDwgMykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgY29udHJhc3QgcmF0aW8gb2YgJHtjb250cmFzdH06MSBmb3IgJHtjb250cmFzdFRleHR9IG9uICR7YmFja2dyb3VuZH1gLCAnZmFsbHMgYmVsb3cgdGhlIFdDQUcgcmVjb21tZW5kZWQgYWJzb2x1dGUgbWluaW11bSBjb250cmFzdCByYXRpbyBvZiAzOjEuJywgJ2h0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI3Zpc3VhbC1hdWRpby1jb250cmFzdC1jb250cmFzdCddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbnRyYXN0VGV4dDtcbiAgfVxuICBjb25zdCBhdWdtZW50Q29sb3IgPSAoe1xuICAgIGNvbG9yLFxuICAgIG5hbWUsXG4gICAgbWFpblNoYWRlID0gNTAwLFxuICAgIGxpZ2h0U2hhZGUgPSAzMDAsXG4gICAgZGFya1NoYWRlID0gNzAwXG4gIH0pID0+IHtcbiAgICBjb2xvciA9IF9leHRlbmRzKHt9LCBjb2xvcik7XG4gICAgaWYgKCFjb2xvci5tYWluICYmIGNvbG9yW21haW5TaGFkZV0pIHtcbiAgICAgIGNvbG9yLm1haW4gPSBjb2xvclttYWluU2hhZGVdO1xuICAgIH1cbiAgICBpZiAoIWNvbG9yLmhhc093blByb3BlcnR5KCdtYWluJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBUaGUgY29sb3Ike25hbWUgPyBgICgke25hbWV9KWAgOiAnJ30gcHJvdmlkZWQgdG8gYXVnbWVudENvbG9yKGNvbG9yKSBpcyBpbnZhbGlkLlxuVGhlIGNvbG9yIG9iamVjdCBuZWVkcyB0byBoYXZlIGEgXFxgbWFpblxcYCBwcm9wZXJ0eSBvciBhIFxcYCR7bWFpblNoYWRlfVxcYCBwcm9wZXJ0eS5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxMSwgbmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnLCBtYWluU2hhZGUpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjb2xvci5tYWluICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFRoZSBjb2xvciR7bmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnfSBwcm92aWRlZCB0byBhdWdtZW50Q29sb3IoY29sb3IpIGlzIGludmFsaWQuXG5cXGBjb2xvci5tYWluXFxgIHNob3VsZCBiZSBhIHN0cmluZywgYnV0IFxcYCR7SlNPTi5zdHJpbmdpZnkoY29sb3IubWFpbil9XFxgIHdhcyBwcm92aWRlZCBpbnN0ZWFkLlxuXG5EaWQgeW91IGludGVuZCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgYXBwcm9hY2hlcz9cblxuaW1wb3J0IHsgZ3JlZW4gfSBmcm9tIFwiQG11aS9tYXRlcmlhbC9jb2xvcnNcIjtcblxuY29uc3QgdGhlbWUxID0gY3JlYXRlVGhlbWUoeyBwYWxldHRlOiB7XG4gIHByaW1hcnk6IGdyZWVuLFxufSB9KTtcblxuY29uc3QgdGhlbWUyID0gY3JlYXRlVGhlbWUoeyBwYWxldHRlOiB7XG4gIHByaW1hcnk6IHsgbWFpbjogZ3JlZW5bNTAwXSB9LFxufSB9KTtgIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxMiwgbmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnLCBKU09OLnN0cmluZ2lmeShjb2xvci5tYWluKSkpO1xuICAgIH1cbiAgICBhZGRMaWdodE9yRGFyayhjb2xvciwgJ2xpZ2h0JywgbGlnaHRTaGFkZSwgdG9uYWxPZmZzZXQpO1xuICAgIGFkZExpZ2h0T3JEYXJrKGNvbG9yLCAnZGFyaycsIGRhcmtTaGFkZSwgdG9uYWxPZmZzZXQpO1xuICAgIGlmICghY29sb3IuY29udHJhc3RUZXh0KSB7XG4gICAgICBjb2xvci5jb250cmFzdFRleHQgPSBnZXRDb250cmFzdFRleHQoY29sb3IubWFpbik7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfTtcbiAgY29uc3QgbW9kZXMgPSB7XG4gICAgZGFyayxcbiAgICBsaWdodFxuICB9O1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICghbW9kZXNbbW9kZV0pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogVGhlIHBhbGV0dGUgbW9kZSBcXGAke21vZGV9XFxgIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHBhbGV0dGVPdXRwdXQgPSBkZWVwbWVyZ2UoX2V4dGVuZHMoe1xuICAgIC8vIEEgY29sbGVjdGlvbiBvZiBjb21tb24gY29sb3JzLlxuICAgIGNvbW1vbjogX2V4dGVuZHMoe30sIGNvbW1vbiksXG4gICAgLy8gcHJldmVudCBtdXRhYmxlIG9iamVjdC5cbiAgICAvLyBUaGUgcGFsZXR0ZSBtb2RlLCBjYW4gYmUgbGlnaHQgb3IgZGFyay5cbiAgICBtb2RlLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byByZXByZXNlbnQgcHJpbWFyeSBpbnRlcmZhY2UgZWxlbWVudHMgZm9yIGEgdXNlci5cbiAgICBwcmltYXJ5OiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHByaW1hcnksXG4gICAgICBuYW1lOiAncHJpbWFyeSdcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IHNlY29uZGFyeSBpbnRlcmZhY2UgZWxlbWVudHMgZm9yIGEgdXNlci5cbiAgICBzZWNvbmRhcnk6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogc2Vjb25kYXJ5LFxuICAgICAgbmFtZTogJ3NlY29uZGFyeScsXG4gICAgICBtYWluU2hhZGU6ICdBNDAwJyxcbiAgICAgIGxpZ2h0U2hhZGU6ICdBMjAwJyxcbiAgICAgIGRhcmtTaGFkZTogJ0E3MDAnXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBpbnRlcmZhY2UgZWxlbWVudHMgdGhhdCB0aGUgdXNlciBzaG91bGQgYmUgbWFkZSBhd2FyZSBvZi5cbiAgICBlcnJvcjogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBlcnJvcixcbiAgICAgIG5hbWU6ICdlcnJvcidcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IHBvdGVudGlhbGx5IGRhbmdlcm91cyBhY3Rpb25zIG9yIGltcG9ydGFudCBtZXNzYWdlcy5cbiAgICB3YXJuaW5nOiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHdhcm5pbmcsXG4gICAgICBuYW1lOiAnd2FybmluZydcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcHJlc2VudCBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciB0aGF0IGlzIG5ldXRyYWwgYW5kIG5vdCBuZWNlc3NhcmlseSBpbXBvcnRhbnQuXG4gICAgaW5mbzogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBpbmZvLFxuICAgICAgbmFtZTogJ2luZm8nXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIGluZGljYXRlIHRoZSBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2YgYW4gYWN0aW9uIHRoYXQgdXNlciB0cmlnZ2VyZWQuXG4gICAgc3VjY2VzczogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBzdWNjZXNzLFxuICAgICAgbmFtZTogJ3N1Y2Nlc3MnXG4gICAgfSksXG4gICAgLy8gVGhlIGdyZXkgY29sb3JzLlxuICAgIGdyZXksXG4gICAgLy8gVXNlZCBieSBgZ2V0Q29udHJhc3RUZXh0KClgIHRvIG1heGltaXplIHRoZSBjb250cmFzdCBiZXR3ZWVuXG4gICAgLy8gdGhlIGJhY2tncm91bmQgYW5kIHRoZSB0ZXh0LlxuICAgIGNvbnRyYXN0VGhyZXNob2xkLFxuICAgIC8vIFRha2VzIGEgYmFja2dyb3VuZCBjb2xvciBhbmQgcmV0dXJucyB0aGUgdGV4dCBjb2xvciB0aGF0IG1heGltaXplcyB0aGUgY29udHJhc3QuXG4gICAgZ2V0Q29udHJhc3RUZXh0LFxuICAgIC8vIEdlbmVyYXRlIGEgcmljaCBjb2xvciBvYmplY3QuXG4gICAgYXVnbWVudENvbG9yLFxuICAgIC8vIFVzZWQgYnkgdGhlIGZ1bmN0aW9ucyBiZWxvdyB0byBzaGlmdCBhIGNvbG9yJ3MgbHVtaW5hbmNlIGJ5IGFwcHJveGltYXRlbHlcbiAgICAvLyB0d28gaW5kZXhlcyB3aXRoaW4gaXRzIHRvbmFsIHBhbGV0dGUuXG4gICAgLy8gRS5nLiwgc2hpZnQgZnJvbSBSZWQgNTAwIHRvIFJlZCAzMDAgb3IgUmVkIDcwMC5cbiAgICB0b25hbE9mZnNldFxuICB9LCBtb2Rlc1ttb2RlXSksIG90aGVyKTtcbiAgcmV0dXJuIHBhbGV0dGVPdXRwdXQ7XG59IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImZvbnRGYW1pbHlcIiwgXCJmb250U2l6ZVwiLCBcImZvbnRXZWlnaHRMaWdodFwiLCBcImZvbnRXZWlnaHRSZWd1bGFyXCIsIFwiZm9udFdlaWdodE1lZGl1bVwiLCBcImZvbnRXZWlnaHRCb2xkXCIsIFwiaHRtbEZvbnRTaXplXCIsIFwiYWxsVmFyaWFudHNcIiwgXCJweFRvUmVtXCJdO1xuaW1wb3J0IHsgZGVlcG1lcmdlIH0gZnJvbSAnQG11aS91dGlscyc7XG5mdW5jdGlvbiByb3VuZCh2YWx1ZSkge1xuICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIDFlNSkgLyAxZTU7XG59XG5jb25zdCBjYXNlQWxsQ2FwcyA9IHtcbiAgdGV4dFRyYW5zZm9ybTogJ3VwcGVyY2FzZSdcbn07XG5jb25zdCBkZWZhdWx0Rm9udEZhbWlseSA9ICdcIlJvYm90b1wiLCBcIkhlbHZldGljYVwiLCBcIkFyaWFsXCIsIHNhbnMtc2VyaWYnO1xuXG4vKipcbiAqIEBzZWUgQGxpbmt7aHR0cHM6Ly9tMi5tYXRlcmlhbC5pby9kZXNpZ24vdHlwb2dyYXBoeS90aGUtdHlwZS1zeXN0ZW0uaHRtbH1cbiAqIEBzZWUgQGxpbmt7aHR0cHM6Ly9tMi5tYXRlcmlhbC5pby9kZXNpZ24vdHlwb2dyYXBoeS91bmRlcnN0YW5kaW5nLXR5cG9ncmFwaHkuaHRtbH1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlVHlwb2dyYXBoeShwYWxldHRlLCB0eXBvZ3JhcGh5KSB7XG4gIGNvbnN0IF9yZWYgPSB0eXBlb2YgdHlwb2dyYXBoeSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cG9ncmFwaHkocGFsZXR0ZSkgOiB0eXBvZ3JhcGh5LFxuICAgIHtcbiAgICAgIGZvbnRGYW1pbHkgPSBkZWZhdWx0Rm9udEZhbWlseSxcbiAgICAgIC8vIFRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBvZiB0aGUgTWF0ZXJpYWwgU3BlY2lmaWNhdGlvbi5cbiAgICAgIGZvbnRTaXplID0gMTQsXG4gICAgICAvLyBweFxuICAgICAgZm9udFdlaWdodExpZ2h0ID0gMzAwLFxuICAgICAgZm9udFdlaWdodFJlZ3VsYXIgPSA0MDAsXG4gICAgICBmb250V2VpZ2h0TWVkaXVtID0gNTAwLFxuICAgICAgZm9udFdlaWdodEJvbGQgPSA3MDAsXG4gICAgICAvLyBUZWxsIE1VSSB3aGF0J3MgdGhlIGZvbnQtc2l6ZSBvbiB0aGUgaHRtbCBlbGVtZW50LlxuICAgICAgLy8gMTZweCBpcyB0aGUgZGVmYXVsdCBmb250LXNpemUgdXNlZCBieSBicm93c2Vycy5cbiAgICAgIGh0bWxGb250U2l6ZSA9IDE2LFxuICAgICAgLy8gQXBwbHkgdGhlIENTUyBwcm9wZXJ0aWVzIHRvIGFsbCB0aGUgdmFyaWFudHMuXG4gICAgICBhbGxWYXJpYW50cyxcbiAgICAgIHB4VG9SZW06IHB4VG9SZW0yXG4gICAgfSA9IF9yZWYsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfcmVmLCBfZXhjbHVkZWQpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0eXBlb2YgZm9udFNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdNVUk6IGBmb250U2l6ZWAgaXMgcmVxdWlyZWQgdG8gYmUgYSBudW1iZXIuJyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgaHRtbEZvbnRTaXplICE9PSAnbnVtYmVyJykge1xuICAgICAgY29uc29sZS5lcnJvcignTVVJOiBgaHRtbEZvbnRTaXplYCBpcyByZXF1aXJlZCB0byBiZSBhIG51bWJlci4nKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgY29lZiA9IGZvbnRTaXplIC8gMTQ7XG4gIGNvbnN0IHB4VG9SZW0gPSBweFRvUmVtMiB8fCAoc2l6ZSA9PiBgJHtzaXplIC8gaHRtbEZvbnRTaXplICogY29lZn1yZW1gKTtcbiAgY29uc3QgYnVpbGRWYXJpYW50ID0gKGZvbnRXZWlnaHQsIHNpemUsIGxpbmVIZWlnaHQsIGxldHRlclNwYWNpbmcsIGNhc2luZykgPT4gX2V4dGVuZHMoe1xuICAgIGZvbnRGYW1pbHksXG4gICAgZm9udFdlaWdodCxcbiAgICBmb250U2l6ZTogcHhUb1JlbShzaXplKSxcbiAgICAvLyBVbml0bGVzcyBmb2xsb3dpbmcgaHR0cHM6Ly9tZXllcndlYi5jb20vZXJpYy90aG91Z2h0cy8yMDA2LzAyLzA4L3VuaXRsZXNzLWxpbmUtaGVpZ2h0cy9cbiAgICBsaW5lSGVpZ2h0XG4gIH0sIGZvbnRGYW1pbHkgPT09IGRlZmF1bHRGb250RmFtaWx5ID8ge1xuICAgIGxldHRlclNwYWNpbmc6IGAke3JvdW5kKGxldHRlclNwYWNpbmcgLyBzaXplKX1lbWBcbiAgfSA6IHt9LCBjYXNpbmcsIGFsbFZhcmlhbnRzKTtcbiAgY29uc3QgdmFyaWFudHMgPSB7XG4gICAgaDE6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0TGlnaHQsIDk2LCAxLjE2NywgLTEuNSksXG4gICAgaDI6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0TGlnaHQsIDYwLCAxLjIsIC0wLjUpLFxuICAgIGgzOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDQ4LCAxLjE2NywgMCksXG4gICAgaDQ6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMzQsIDEuMjM1LCAwLjI1KSxcbiAgICBoNTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAyNCwgMS4zMzQsIDApLFxuICAgIGg2OiBidWlsZFZhcmlhbnQoZm9udFdlaWdodE1lZGl1bSwgMjAsIDEuNiwgMC4xNSksXG4gICAgc3VidGl0bGUxOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDE2LCAxLjc1LCAwLjE1KSxcbiAgICBzdWJ0aXRsZTI6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0TWVkaXVtLCAxNCwgMS41NywgMC4xKSxcbiAgICBib2R5MTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxNiwgMS41LCAwLjE1KSxcbiAgICBib2R5MjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxNCwgMS40MywgMC4xNSksXG4gICAgYnV0dG9uOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodE1lZGl1bSwgMTQsIDEuNzUsIDAuNCwgY2FzZUFsbENhcHMpLFxuICAgIGNhcHRpb246IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTIsIDEuNjYsIDAuNCksXG4gICAgb3ZlcmxpbmU6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTIsIDIuNjYsIDEsIGNhc2VBbGxDYXBzKSxcbiAgICAvLyBUT0RPIHY2OiBSZW1vdmUgaGFuZGxpbmcgb2YgJ2luaGVyaXQnIHZhcmlhbnQgZnJvbSB0aGUgdGhlbWUgYXMgaXQgaXMgYWxyZWFkeSBoYW5kbGVkIGluIE1hdGVyaWFsIFVJJ3MgVHlwb2dyYXBoeSBjb21wb25lbnQuIEFsc28sIHJlbWVtYmVyIHRvIHJlbW92ZSB0aGUgYXNzb2NpYXRlZCB0eXBlcy5cbiAgICBpbmhlcml0OiB7XG4gICAgICBmb250RmFtaWx5OiAnaW5oZXJpdCcsXG4gICAgICBmb250V2VpZ2h0OiAnaW5oZXJpdCcsXG4gICAgICBmb250U2l6ZTogJ2luaGVyaXQnLFxuICAgICAgbGluZUhlaWdodDogJ2luaGVyaXQnLFxuICAgICAgbGV0dGVyU3BhY2luZzogJ2luaGVyaXQnXG4gICAgfVxuICB9O1xuICByZXR1cm4gZGVlcG1lcmdlKF9leHRlbmRzKHtcbiAgICBodG1sRm9udFNpemUsXG4gICAgcHhUb1JlbSxcbiAgICBmb250RmFtaWx5LFxuICAgIGZvbnRTaXplLFxuICAgIGZvbnRXZWlnaHRMaWdodCxcbiAgICBmb250V2VpZ2h0UmVndWxhcixcbiAgICBmb250V2VpZ2h0TWVkaXVtLFxuICAgIGZvbnRXZWlnaHRCb2xkXG4gIH0sIHZhcmlhbnRzKSwgb3RoZXIsIHtcbiAgICBjbG9uZTogZmFsc2UgLy8gTm8gbmVlZCB0byBjbG9uZSBkZWVwXG4gIH0pO1xufSIsImNvbnN0IHNoYWRvd0tleVVtYnJhT3BhY2l0eSA9IDAuMjtcbmNvbnN0IHNoYWRvd0tleVBlbnVtYnJhT3BhY2l0eSA9IDAuMTQ7XG5jb25zdCBzaGFkb3dBbWJpZW50U2hhZG93T3BhY2l0eSA9IDAuMTI7XG5mdW5jdGlvbiBjcmVhdGVTaGFkb3coLi4ucHgpIHtcbiAgcmV0dXJuIFtgJHtweFswXX1weCAke3B4WzFdfXB4ICR7cHhbMl19cHggJHtweFszXX1weCByZ2JhKDAsMCwwLCR7c2hhZG93S2V5VW1icmFPcGFjaXR5fSlgLCBgJHtweFs0XX1weCAke3B4WzVdfXB4ICR7cHhbNl19cHggJHtweFs3XX1weCByZ2JhKDAsMCwwLCR7c2hhZG93S2V5UGVudW1icmFPcGFjaXR5fSlgLCBgJHtweFs4XX1weCAke3B4WzldfXB4ICR7cHhbMTBdfXB4ICR7cHhbMTFdfXB4IHJnYmEoMCwwLDAsJHtzaGFkb3dBbWJpZW50U2hhZG93T3BhY2l0eX0pYF0uam9pbignLCcpO1xufVxuXG4vLyBWYWx1ZXMgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWF0ZXJpYWwtY29tcG9uZW50cy9tYXRlcmlhbC1jb21wb25lbnRzLXdlYi9ibG9iL2JlODc0N2Y5NDU3NDY2OWNiNWU3YWRkMWE3YzU0ZmE0MWE4OWNlYzcvcGFja2FnZXMvbWRjLWVsZXZhdGlvbi9fdmFyaWFibGVzLnNjc3NcbmNvbnN0IHNoYWRvd3MgPSBbJ25vbmUnLCBjcmVhdGVTaGFkb3coMCwgMiwgMSwgLTEsIDAsIDEsIDEsIDAsIDAsIDEsIDMsIDApLCBjcmVhdGVTaGFkb3coMCwgMywgMSwgLTIsIDAsIDIsIDIsIDAsIDAsIDEsIDUsIDApLCBjcmVhdGVTaGFkb3coMCwgMywgMywgLTIsIDAsIDMsIDQsIDAsIDAsIDEsIDgsIDApLCBjcmVhdGVTaGFkb3coMCwgMiwgNCwgLTEsIDAsIDQsIDUsIDAsIDAsIDEsIDEwLCAwKSwgY3JlYXRlU2hhZG93KDAsIDMsIDUsIC0xLCAwLCA1LCA4LCAwLCAwLCAxLCAxNCwgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCA1LCAtMSwgMCwgNiwgMTAsIDAsIDAsIDEsIDE4LCAwKSwgY3JlYXRlU2hhZG93KDAsIDQsIDUsIC0yLCAwLCA3LCAxMCwgMSwgMCwgMiwgMTYsIDEpLCBjcmVhdGVTaGFkb3coMCwgNSwgNSwgLTMsIDAsIDgsIDEwLCAxLCAwLCAzLCAxNCwgMiksIGNyZWF0ZVNoYWRvdygwLCA1LCA2LCAtMywgMCwgOSwgMTIsIDEsIDAsIDMsIDE2LCAyKSwgY3JlYXRlU2hhZG93KDAsIDYsIDYsIC0zLCAwLCAxMCwgMTQsIDEsIDAsIDQsIDE4LCAzKSwgY3JlYXRlU2hhZG93KDAsIDYsIDcsIC00LCAwLCAxMSwgMTUsIDEsIDAsIDQsIDIwLCAzKSwgY3JlYXRlU2hhZG93KDAsIDcsIDgsIC00LCAwLCAxMiwgMTcsIDIsIDAsIDUsIDIyLCA0KSwgY3JlYXRlU2hhZG93KDAsIDcsIDgsIC00LCAwLCAxMywgMTksIDIsIDAsIDUsIDI0LCA0KSwgY3JlYXRlU2hhZG93KDAsIDcsIDksIC00LCAwLCAxNCwgMjEsIDIsIDAsIDUsIDI2LCA0KSwgY3JlYXRlU2hhZG93KDAsIDgsIDksIC01LCAwLCAxNSwgMjIsIDIsIDAsIDYsIDI4LCA1KSwgY3JlYXRlU2hhZG93KDAsIDgsIDEwLCAtNSwgMCwgMTYsIDI0LCAyLCAwLCA2LCAzMCwgNSksIGNyZWF0ZVNoYWRvdygwLCA4LCAxMSwgLTUsIDAsIDE3LCAyNiwgMiwgMCwgNiwgMzIsIDUpLCBjcmVhdGVTaGFkb3coMCwgOSwgMTEsIC01LCAwLCAxOCwgMjgsIDIsIDAsIDcsIDM0LCA2KSwgY3JlYXRlU2hhZG93KDAsIDksIDEyLCAtNiwgMCwgMTksIDI5LCAyLCAwLCA3LCAzNiwgNiksIGNyZWF0ZVNoYWRvdygwLCAxMCwgMTMsIC02LCAwLCAyMCwgMzEsIDMsIDAsIDgsIDM4LCA3KSwgY3JlYXRlU2hhZG93KDAsIDEwLCAxMywgLTYsIDAsIDIxLCAzMywgMywgMCwgOCwgNDAsIDcpLCBjcmVhdGVTaGFkb3coMCwgMTAsIDE0LCAtNiwgMCwgMjIsIDM1LCAzLCAwLCA4LCA0MiwgNyksIGNyZWF0ZVNoYWRvdygwLCAxMSwgMTQsIC03LCAwLCAyMywgMzYsIDMsIDAsIDksIDQ0LCA4KSwgY3JlYXRlU2hhZG93KDAsIDExLCAxNSwgLTcsIDAsIDI0LCAzOCwgMywgMCwgOSwgNDYsIDgpXTtcbmV4cG9ydCBkZWZhdWx0IHNoYWRvd3M7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImR1cmF0aW9uXCIsIFwiZWFzaW5nXCIsIFwiZGVsYXlcIl07XG4vLyBGb2xsb3cgaHR0cHM6Ly9tYXRlcmlhbC5nb29nbGUuY29tL21vdGlvbi9kdXJhdGlvbi1lYXNpbmcuaHRtbCNkdXJhdGlvbi1lYXNpbmctbmF0dXJhbC1lYXNpbmctY3VydmVzXG4vLyB0byBsZWFybiB0aGUgY29udGV4dCBpbiB3aGljaCBlYWNoIGVhc2luZyBzaG91bGQgYmUgdXNlZC5cbmV4cG9ydCBjb25zdCBlYXNpbmcgPSB7XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIGVhc2luZyBjdXJ2ZS5cbiAgZWFzZUluT3V0OiAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKScsXG4gIC8vIE9iamVjdHMgZW50ZXIgdGhlIHNjcmVlbiBhdCBmdWxsIHZlbG9jaXR5IGZyb20gb2ZmLXNjcmVlbiBhbmRcbiAgLy8gc2xvd2x5IGRlY2VsZXJhdGUgdG8gYSByZXN0aW5nIHBvaW50LlxuICBlYXNlT3V0OiAnY3ViaWMtYmV6aWVyKDAuMCwgMCwgMC4yLCAxKScsXG4gIC8vIE9iamVjdHMgbGVhdmUgdGhlIHNjcmVlbiBhdCBmdWxsIHZlbG9jaXR5LiBUaGV5IGRvIG5vdCBkZWNlbGVyYXRlIHdoZW4gb2ZmLXNjcmVlbi5cbiAgZWFzZUluOiAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSknLFxuICAvLyBUaGUgc2hhcnAgY3VydmUgaXMgdXNlZCBieSBvYmplY3RzIHRoYXQgbWF5IHJldHVybiB0byB0aGUgc2NyZWVuIGF0IGFueSB0aW1lLlxuICBzaGFycDogJ2N1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSknXG59O1xuXG4vLyBGb2xsb3cgaHR0cHM6Ly9tMi5tYXRlcmlhbC5pby9ndWlkZWxpbmVzL21vdGlvbi9kdXJhdGlvbi1lYXNpbmcuaHRtbCNkdXJhdGlvbi1lYXNpbmctY29tbW9uLWR1cmF0aW9uc1xuLy8gdG8gbGVhcm4gd2hlbiB1c2Ugd2hhdCB0aW1pbmdcbmV4cG9ydCBjb25zdCBkdXJhdGlvbiA9IHtcbiAgc2hvcnRlc3Q6IDE1MCxcbiAgc2hvcnRlcjogMjAwLFxuICBzaG9ydDogMjUwLFxuICAvLyBtb3N0IGJhc2ljIHJlY29tbWVuZGVkIHRpbWluZ1xuICBzdGFuZGFyZDogMzAwLFxuICAvLyB0aGlzIGlzIHRvIGJlIHVzZWQgaW4gY29tcGxleCBhbmltYXRpb25zXG4gIGNvbXBsZXg6IDM3NSxcbiAgLy8gcmVjb21tZW5kZWQgd2hlbiBzb21ldGhpbmcgaXMgZW50ZXJpbmcgc2NyZWVuXG4gIGVudGVyaW5nU2NyZWVuOiAyMjUsXG4gIC8vIHJlY29tbWVuZGVkIHdoZW4gc29tZXRoaW5nIGlzIGxlYXZpbmcgc2NyZWVuXG4gIGxlYXZpbmdTY3JlZW46IDE5NVxufTtcbmZ1bmN0aW9uIGZvcm1hdE1zKG1pbGxpc2Vjb25kcykge1xuICByZXR1cm4gYCR7TWF0aC5yb3VuZChtaWxsaXNlY29uZHMpfW1zYDtcbn1cbmZ1bmN0aW9uIGdldEF1dG9IZWlnaHREdXJhdGlvbihoZWlnaHQpIHtcbiAgaWYgKCFoZWlnaHQpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBjb25zdCBjb25zdGFudCA9IGhlaWdodCAvIDM2O1xuXG4gIC8vIGh0dHBzOi8vd3d3LndvbGZyYW1hbHBoYS5jb20vaW5wdXQvP2k9KDQrJTJCKzE1KyorKHgrJTJGKzM2KykrKiorMC4yNSslMkIrKHgrJTJGKzM2KSslMkYrNSkrKisxMFxuICByZXR1cm4gTWF0aC5yb3VuZCgoNCArIDE1ICogY29uc3RhbnQgKiogMC4yNSArIGNvbnN0YW50IC8gNSkgKiAxMCk7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVUcmFuc2l0aW9ucyhpbnB1dFRyYW5zaXRpb25zKSB7XG4gIGNvbnN0IG1lcmdlZEVhc2luZyA9IF9leHRlbmRzKHt9LCBlYXNpbmcsIGlucHV0VHJhbnNpdGlvbnMuZWFzaW5nKTtcbiAgY29uc3QgbWVyZ2VkRHVyYXRpb24gPSBfZXh0ZW5kcyh7fSwgZHVyYXRpb24sIGlucHV0VHJhbnNpdGlvbnMuZHVyYXRpb24pO1xuICBjb25zdCBjcmVhdGUgPSAocHJvcHMgPSBbJ2FsbCddLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbk9wdGlvbiA9IG1lcmdlZER1cmF0aW9uLnN0YW5kYXJkLFxuICAgICAgICBlYXNpbmc6IGVhc2luZ09wdGlvbiA9IG1lcmdlZEVhc2luZy5lYXNlSW5PdXQsXG4gICAgICAgIGRlbGF5ID0gMFxuICAgICAgfSA9IG9wdGlvbnMsXG4gICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKG9wdGlvbnMsIF9leGNsdWRlZCk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IGlzU3RyaW5nID0gdmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbiAgICAgIC8vIElFMTEgc3VwcG9ydCwgcmVwbGFjZSB3aXRoIE51bWJlci5pc05hTlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICAgICAgY29uc3QgaXNOdW1iZXIgPSB2YWx1ZSA9PiAhaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpO1xuICAgICAgaWYgKCFpc1N0cmluZyhwcm9wcykgJiYgIUFycmF5LmlzQXJyYXkocHJvcHMpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogQXJndW1lbnQgXCJwcm9wc1wiIG11c3QgYmUgYSBzdHJpbmcgb3IgQXJyYXkuJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzTnVtYmVyKGR1cmF0aW9uT3B0aW9uKSAmJiAhaXNTdHJpbmcoZHVyYXRpb25PcHRpb24pKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogQXJndW1lbnQgXCJkdXJhdGlvblwiIG11c3QgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcgYnV0IGZvdW5kICR7ZHVyYXRpb25PcHRpb259LmApO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1N0cmluZyhlYXNpbmdPcHRpb24pKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogQXJndW1lbnQgXCJlYXNpbmdcIiBtdXN0IGJlIGEgc3RyaW5nLicpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc051bWJlcihkZWxheSkgJiYgIWlzU3RyaW5nKGRlbGF5KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IEFyZ3VtZW50IFwiZGVsYXlcIiBtdXN0IGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nLicpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBTZWNvbmcgYXJndW1lbnQgb2YgdHJhbnNpdGlvbi5jcmVhdGUgbXVzdCBiZSBhbiBvYmplY3QuJywgXCJBcmd1bWVudHMgc2hvdWxkIGJlIGVpdGhlciBgY3JlYXRlKCdwcm9wMScsIG9wdGlvbnMpYCBvciBgY3JlYXRlKFsncHJvcDEnLCAncHJvcDInXSwgb3B0aW9ucylgXCJdLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3Qua2V5cyhvdGhlcikubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogVW5yZWNvZ25pemVkIGFyZ3VtZW50KHMpIFske09iamVjdC5rZXlzKG90aGVyKS5qb2luKCcsJyl9XS5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIChBcnJheS5pc0FycmF5KHByb3BzKSA/IHByb3BzIDogW3Byb3BzXSkubWFwKGFuaW1hdGVkUHJvcCA9PiBgJHthbmltYXRlZFByb3B9ICR7dHlwZW9mIGR1cmF0aW9uT3B0aW9uID09PSAnc3RyaW5nJyA/IGR1cmF0aW9uT3B0aW9uIDogZm9ybWF0TXMoZHVyYXRpb25PcHRpb24pfSAke2Vhc2luZ09wdGlvbn0gJHt0eXBlb2YgZGVsYXkgPT09ICdzdHJpbmcnID8gZGVsYXkgOiBmb3JtYXRNcyhkZWxheSl9YCkuam9pbignLCcpO1xuICB9O1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIGdldEF1dG9IZWlnaHREdXJhdGlvbixcbiAgICBjcmVhdGVcbiAgfSwgaW5wdXRUcmFuc2l0aW9ucywge1xuICAgIGVhc2luZzogbWVyZ2VkRWFzaW5nLFxuICAgIGR1cmF0aW9uOiBtZXJnZWREdXJhdGlvblxuICB9KTtcbn0iLCIvLyBXZSBuZWVkIHRvIGNlbnRyYWxpemUgdGhlIHpJbmRleCBkZWZpbml0aW9ucyBhcyB0aGV5IHdvcmtcbi8vIGxpa2UgZ2xvYmFsIHZhbHVlcyBpbiB0aGUgYnJvd3Nlci5cbmNvbnN0IHpJbmRleCA9IHtcbiAgbW9iaWxlU3RlcHBlcjogMTAwMCxcbiAgZmFiOiAxMDUwLFxuICBzcGVlZERpYWw6IDEwNTAsXG4gIGFwcEJhcjogMTEwMCxcbiAgZHJhd2VyOiAxMjAwLFxuICBtb2RhbDogMTMwMCxcbiAgc25hY2tiYXI6IDE0MDAsXG4gIHRvb2x0aXA6IDE1MDBcbn07XG5leHBvcnQgZGVmYXVsdCB6SW5kZXg7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCB7IGZvcm1hdE11aUVycm9yTWVzc2FnZSBhcyBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIH0gZnJvbSBcIkBtdWkvdXRpbHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImJyZWFrcG9pbnRzXCIsIFwibWl4aW5zXCIsIFwic3BhY2luZ1wiLCBcInBhbGV0dGVcIiwgXCJ0cmFuc2l0aW9uc1wiLCBcInR5cG9ncmFwaHlcIiwgXCJzaGFwZVwiXTtcbmltcG9ydCB7IGRlZXBtZXJnZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgY3JlYXRlVGhlbWUgYXMgc3lzdGVtQ3JlYXRlVGhlbWUsIHVuc3RhYmxlX2RlZmF1bHRTeENvbmZpZyBhcyBkZWZhdWx0U3hDb25maWcsIHVuc3RhYmxlX3N0eWxlRnVuY3Rpb25TeCBhcyBzdHlsZUZ1bmN0aW9uU3ggfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuaW1wb3J0IGNyZWF0ZU1peGlucyBmcm9tICcuL2NyZWF0ZU1peGlucyc7XG5pbXBvcnQgY3JlYXRlUGFsZXR0ZSBmcm9tICcuL2NyZWF0ZVBhbGV0dGUnO1xuaW1wb3J0IGNyZWF0ZVR5cG9ncmFwaHkgZnJvbSAnLi9jcmVhdGVUeXBvZ3JhcGh5JztcbmltcG9ydCBzaGFkb3dzIGZyb20gJy4vc2hhZG93cyc7XG5pbXBvcnQgY3JlYXRlVHJhbnNpdGlvbnMgZnJvbSAnLi9jcmVhdGVUcmFuc2l0aW9ucyc7XG5pbXBvcnQgekluZGV4IGZyb20gJy4vekluZGV4JztcbmZ1bmN0aW9uIGNyZWF0ZVRoZW1lKG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICBjb25zdCB7XG4gICAgICBtaXhpbnM6IG1peGluc0lucHV0ID0ge30sXG4gICAgICBwYWxldHRlOiBwYWxldHRlSW5wdXQgPSB7fSxcbiAgICAgIHRyYW5zaXRpb25zOiB0cmFuc2l0aW9uc0lucHV0ID0ge30sXG4gICAgICB0eXBvZ3JhcGh5OiB0eXBvZ3JhcGh5SW5wdXQgPSB7fVxuICAgIH0gPSBvcHRpb25zLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uob3B0aW9ucywgX2V4Y2x1ZGVkKTtcbiAgaWYgKG9wdGlvbnMudmFycykge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBcXGB2YXJzXFxgIGlzIGEgcHJpdmF0ZSBmaWVsZCB1c2VkIGZvciBDU1MgdmFyaWFibGVzIHN1cHBvcnQuXG5QbGVhc2UgdXNlIGFub3RoZXIgbmFtZS5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxOCkpO1xuICB9XG4gIGNvbnN0IHBhbGV0dGUgPSBjcmVhdGVQYWxldHRlKHBhbGV0dGVJbnB1dCk7XG4gIGNvbnN0IHN5c3RlbVRoZW1lID0gc3lzdGVtQ3JlYXRlVGhlbWUob3B0aW9ucyk7XG4gIGxldCBtdWlUaGVtZSA9IGRlZXBtZXJnZShzeXN0ZW1UaGVtZSwge1xuICAgIG1peGluczogY3JlYXRlTWl4aW5zKHN5c3RlbVRoZW1lLmJyZWFrcG9pbnRzLCBtaXhpbnNJbnB1dCksXG4gICAgcGFsZXR0ZSxcbiAgICAvLyBEb24ndCB1c2UgWy4uLnNoYWRvd3NdIHVudGlsIHlvdSd2ZSB2ZXJpZmllZCBpdHMgdHJhbnNwaWxlZCBjb2RlIGlzIG5vdCBpbnZva2luZyB0aGUgaXRlcmF0b3IgcHJvdG9jb2wuXG4gICAgc2hhZG93czogc2hhZG93cy5zbGljZSgpLFxuICAgIHR5cG9ncmFwaHk6IGNyZWF0ZVR5cG9ncmFwaHkocGFsZXR0ZSwgdHlwb2dyYXBoeUlucHV0KSxcbiAgICB0cmFuc2l0aW9uczogY3JlYXRlVHJhbnNpdGlvbnModHJhbnNpdGlvbnNJbnB1dCksXG4gICAgekluZGV4OiBfZXh0ZW5kcyh7fSwgekluZGV4KVxuICB9KTtcbiAgbXVpVGhlbWUgPSBkZWVwbWVyZ2UobXVpVGhlbWUsIG90aGVyKTtcbiAgbXVpVGhlbWUgPSBhcmdzLnJlZHVjZSgoYWNjLCBhcmd1bWVudCkgPT4gZGVlcG1lcmdlKGFjYywgYXJndW1lbnQpLCBtdWlUaGVtZSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gVE9ETyB2NjogUmVmYWN0b3IgdG8gdXNlIGdsb2JhbFN0YXRlQ2xhc3Nlc01hcHBpbmcgZnJvbSBAbXVpL3V0aWxzIG9uY2UgYHJlYWRPbmx5YCBzdGF0ZSBjbGFzcyBpcyB1c2VkIGluIFJhdGluZyBjb21wb25lbnQuXG4gICAgY29uc3Qgc3RhdGVDbGFzc2VzID0gWydhY3RpdmUnLCAnY2hlY2tlZCcsICdjb21wbGV0ZWQnLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnZXhwYW5kZWQnLCAnZm9jdXNlZCcsICdmb2N1c1Zpc2libGUnLCAncmVxdWlyZWQnLCAnc2VsZWN0ZWQnXTtcbiAgICBjb25zdCB0cmF2ZXJzZSA9IChub2RlLCBjb21wb25lbnQpID0+IHtcbiAgICAgIGxldCBrZXk7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBndWFyZC1mb3ItaW4sIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICBmb3IgKGtleSBpbiBub2RlKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gbm9kZVtrZXldO1xuICAgICAgICBpZiAoc3RhdGVDbGFzc2VzLmluZGV4T2Yoa2V5KSAhPT0gLTEgJiYgT2JqZWN0LmtleXMoY2hpbGQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVDbGFzcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzKCcnLCBrZXkpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYCR7Y29tcG9uZW50fVxcYCBjb21wb25lbnQgaW5jcmVhc2VzIGAgKyBgdGhlIENTUyBzcGVjaWZpY2l0eSBvZiB0aGUgXFxgJHtrZXl9XFxgIGludGVybmFsIHN0YXRlLmAsICdZb3UgY2FuIG5vdCBvdmVycmlkZSBpdCBsaWtlIHRoaXM6ICcsIEpTT04uc3RyaW5naWZ5KG5vZGUsIG51bGwsIDIpLCAnJywgYEluc3RlYWQsIHlvdSBuZWVkIHRvIHVzZSB0aGUgJyYuJHtzdGF0ZUNsYXNzfScgc3ludGF4OmAsIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgcm9vdDoge1xuICAgICAgICAgICAgICAgIFtgJi4ke3N0YXRlQ2xhc3N9YF06IGNoaWxkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIG51bGwsIDIpLCAnJywgJ2h0dHBzOi8vbXVpLmNvbS9yL3N0YXRlLWNsYXNzZXMtZ3VpZGUnXS5qb2luKCdcXG4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFJlbW92ZSB0aGUgc3R5bGUgdG8gcHJldmVudCBnbG9iYWwgY29uZmxpY3RzLlxuICAgICAgICAgIG5vZGVba2V5XSA9IHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBPYmplY3Qua2V5cyhtdWlUaGVtZS5jb21wb25lbnRzKS5mb3JFYWNoKGNvbXBvbmVudCA9PiB7XG4gICAgICBjb25zdCBzdHlsZU92ZXJyaWRlcyA9IG11aVRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50XS5zdHlsZU92ZXJyaWRlcztcbiAgICAgIGlmIChzdHlsZU92ZXJyaWRlcyAmJiBjb21wb25lbnQuaW5kZXhPZignTXVpJykgPT09IDApIHtcbiAgICAgICAgdHJhdmVyc2Uoc3R5bGVPdmVycmlkZXMsIGNvbXBvbmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgbXVpVGhlbWUudW5zdGFibGVfc3hDb25maWcgPSBfZXh0ZW5kcyh7fSwgZGVmYXVsdFN4Q29uZmlnLCBvdGhlciA9PSBudWxsID8gdm9pZCAwIDogb3RoZXIudW5zdGFibGVfc3hDb25maWcpO1xuICBtdWlUaGVtZS51bnN0YWJsZV9zeCA9IGZ1bmN0aW9uIHN4KHByb3BzKSB7XG4gICAgcmV0dXJuIHN0eWxlRnVuY3Rpb25TeCh7XG4gICAgICBzeDogcHJvcHMsXG4gICAgICB0aGVtZTogdGhpc1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4gbXVpVGhlbWU7XG59XG5sZXQgd2FybmVkT25jZSA9IGZhbHNlO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU11aVRoZW1lKC4uLmFyZ3MpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoIXdhcm5lZE9uY2UpIHtcbiAgICAgIHdhcm5lZE9uY2UgPSB0cnVlO1xuICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogdGhlIGNyZWF0ZU11aVRoZW1lIGZ1bmN0aW9uIHdhcyByZW5hbWVkIHRvIGNyZWF0ZVRoZW1lLicsICcnLCBcIllvdSBzaG91bGQgdXNlIGBpbXBvcnQgeyBjcmVhdGVUaGVtZSB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJ2BcIl0uam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlVGhlbWUoLi4uYXJncyk7XG59XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVUaGVtZTsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZU1peGlucyhicmVha3BvaW50cywgbWl4aW5zKSB7XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgdG9vbGJhcjoge1xuICAgICAgbWluSGVpZ2h0OiA1NixcbiAgICAgIFticmVha3BvaW50cy51cCgneHMnKV06IHtcbiAgICAgICAgJ0BtZWRpYSAob3JpZW50YXRpb246IGxhbmRzY2FwZSknOiB7XG4gICAgICAgICAgbWluSGVpZ2h0OiA0OFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW2JyZWFrcG9pbnRzLnVwKCdzbScpXToge1xuICAgICAgICBtaW5IZWlnaHQ6IDY0XG4gICAgICB9XG4gICAgfVxuICB9LCBtaXhpbnMpO1xufSIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IGNyZWF0ZVRoZW1lIGZyb20gJy4vY3JlYXRlVGhlbWUnO1xuY29uc3QgZGVmYXVsdFRoZW1lID0gY3JlYXRlVGhlbWUoKTtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRUaGVtZTsiLCIvLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vbWF0ZXJpYWwtY29tcG9uZW50cy9tYXRlcmlhbC1jb21wb25lbnRzLWlvcy9ibG9iL2JjYTM2MTA3NDA1NTk0ZDViN2IxNjI2NWE1YjBlZDY5OGY4NWE1ZWUvY29tcG9uZW50cy9FbGV2YXRpb24vc3JjL1VJQ29sb3IlMkJNYXRlcmlhbEVsZXZhdGlvbi5tI0w2MVxuY29uc3QgZ2V0T3ZlcmxheUFscGhhID0gZWxldmF0aW9uID0+IHtcbiAgbGV0IGFscGhhVmFsdWU7XG4gIGlmIChlbGV2YXRpb24gPCAxKSB7XG4gICAgYWxwaGFWYWx1ZSA9IDUuMTE5MTYgKiBlbGV2YXRpb24gKiogMjtcbiAgfSBlbHNlIHtcbiAgICBhbHBoYVZhbHVlID0gNC41ICogTWF0aC5sb2coZWxldmF0aW9uICsgMSkgKyAyO1xuICB9XG4gIHJldHVybiAoYWxwaGFWYWx1ZSAvIDEwMCkudG9GaXhlZCgyKTtcbn07XG5leHBvcnQgZGVmYXVsdCBnZXRPdmVybGF5QWxwaGE7IiwiZXhwb3J0IGRlZmF1bHQgJyQkbWF0ZXJpYWwnOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgY3JlYXRlU3R5bGVkLCBzaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBkZWZhdWx0VGhlbWUgZnJvbSAnLi9kZWZhdWx0VGhlbWUnO1xuaW1wb3J0IFRIRU1FX0lEIGZyb20gJy4vaWRlbnRpZmllcic7XG5leHBvcnQgY29uc3Qgcm9vdFNob3VsZEZvcndhcmRQcm9wID0gcHJvcCA9PiBzaG91bGRGb3J3YXJkUHJvcChwcm9wKSAmJiBwcm9wICE9PSAnY2xhc3Nlcyc7XG5leHBvcnQgY29uc3Qgc2xvdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3A7XG5jb25zdCBzdHlsZWQgPSBjcmVhdGVTdHlsZWQoe1xuICB0aGVtZUlkOiBUSEVNRV9JRCxcbiAgZGVmYXVsdFRoZW1lLFxuICByb290U2hvdWxkRm9yd2FyZFByb3Bcbn0pO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlVGhlbWUgYXMgdXNlVGhlbWVTeXN0ZW0gfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgZGVmYXVsdFRoZW1lIGZyb20gJy4vZGVmYXVsdFRoZW1lJztcbmltcG9ydCBUSEVNRV9JRCBmcm9tICcuL2lkZW50aWZpZXInO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVGhlbWUoKSB7XG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWVTeXN0ZW0oZGVmYXVsdFRoZW1lKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VEZWJ1Z1ZhbHVlKHRoZW1lKTtcbiAgfVxuICByZXR1cm4gdGhlbWVbVEhFTUVfSURdIHx8IHRoZW1lO1xufSIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgdXNlVGhlbWVQcm9wcyBhcyBzeXN0ZW1Vc2VUaGVtZVByb3BzIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGRlZmF1bHRUaGVtZSBmcm9tICcuL2RlZmF1bHRUaGVtZSc7XG5pbXBvcnQgVEhFTUVfSUQgZnJvbSAnLi9pZGVudGlmaWVyJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRoZW1lUHJvcHMoe1xuICBwcm9wcyxcbiAgbmFtZVxufSkge1xuICByZXR1cm4gc3lzdGVtVXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHMsXG4gICAgbmFtZSxcbiAgICBkZWZhdWx0VGhlbWUsXG4gICAgdGhlbWVJZDogVEhFTUVfSURcbiAgfSk7XG59IiwiZXhwb3J0IGNvbnN0IHJlZmxvdyA9IG5vZGUgPT4gbm9kZS5zY3JvbGxUb3A7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhbnNpdGlvblByb3BzKHByb3BzLCBvcHRpb25zKSB7XG4gIHZhciBfc3R5bGUkdHJhbnNpdGlvbkR1cmEsIF9zdHlsZSR0cmFuc2l0aW9uVGltaTtcbiAgY29uc3Qge1xuICAgIHRpbWVvdXQsXG4gICAgZWFzaW5nLFxuICAgIHN0eWxlID0ge31cbiAgfSA9IHByb3BzO1xuICByZXR1cm4ge1xuICAgIGR1cmF0aW9uOiAoX3N0eWxlJHRyYW5zaXRpb25EdXJhID0gc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uKSAhPSBudWxsID8gX3N0eWxlJHRyYW5zaXRpb25EdXJhIDogdHlwZW9mIHRpbWVvdXQgPT09ICdudW1iZXInID8gdGltZW91dCA6IHRpbWVvdXRbb3B0aW9ucy5tb2RlXSB8fCAwLFxuICAgIGVhc2luZzogKF9zdHlsZSR0cmFuc2l0aW9uVGltaSA9IHN0eWxlLnRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbikgIT0gbnVsbCA/IF9zdHlsZSR0cmFuc2l0aW9uVGltaSA6IHR5cGVvZiBlYXNpbmcgPT09ICdvYmplY3QnID8gZWFzaW5nW29wdGlvbnMubW9kZV0gOiBlYXNpbmcsXG4gICAgZGVsYXk6IHN0eWxlLnRyYW5zaXRpb25EZWxheVxuICB9O1xufSIsImltcG9ydCB7IHVuc3RhYmxlX2NhcGl0YWxpemUgYXMgY2FwaXRhbGl6ZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgY2FwaXRhbGl6ZTsiLCJpbXBvcnQgeyB1bnN0YWJsZV9kZWJvdW5jZSBhcyBkZWJvdW5jZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgZGVib3VuY2U7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2V0U2Nyb2xsYmFyU2l6ZSBhcyBnZXRTY3JvbGxiYXJTaXplIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCBnZXRTY3JvbGxiYXJTaXplOyIsImltcG9ydCB7IHVuc3RhYmxlX2lzTXVpRWxlbWVudCBhcyBpc011aUVsZW1lbnQgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IGlzTXVpRWxlbWVudDsiLCJpbXBvcnQgeyB1bnN0YWJsZV9vd25lckRvY3VtZW50IGFzIG93bmVyRG9jdW1lbnQgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IG93bmVyRG9jdW1lbnQ7IiwiaW1wb3J0IHsgdW5zdGFibGVfb3duZXJXaW5kb3cgYXMgb3duZXJXaW5kb3cgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IG93bmVyV2luZG93OyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgdW5zdGFibGVfdXNlRW5oYW5jZWRFZmZlY3QgYXMgdXNlRW5oYW5jZWRFZmZlY3QgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IHVzZUVuaGFuY2VkRWZmZWN0OyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgdW5zdGFibGVfdXNlRXZlbnRDYWxsYmFjayBhcyB1c2VFdmVudENhbGxiYWNrIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCB1c2VFdmVudENhbGxiYWNrOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgdW5zdGFibGVfdXNlRm9ya1JlZiBhcyB1c2VGb3JrUmVmIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCB1c2VGb3JrUmVmOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgdW5zdGFibGVfdXNlSXNGb2N1c1Zpc2libGUgYXMgdXNlSXNGb2N1c1Zpc2libGUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IHVzZUlzRm9jdXNWaXNpYmxlOyIsImNvbnN0IGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcbmV4cG9ydCBkZWZhdWx0IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ211aS5uZXN0ZWQnKSA6ICdfX1RIRU1FX05FU1RFRF9fJzsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBleGFjdFByb3AgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBUaGVtZUNvbnRleHQgZnJvbSAnLi4vdXNlVGhlbWUvVGhlbWVDb250ZXh0JztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi91c2VUaGVtZSc7XG5pbXBvcnQgbmVzdGVkIGZyb20gJy4vbmVzdGVkJztcblxuLy8gVG8gc3VwcG9ydCBjb21wb3NpdGlvbiBvZiB0aGVtZS5cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBtZXJnZU91dGVyTG9jYWxUaGVtZShvdXRlclRoZW1lLCBsb2NhbFRoZW1lKSB7XG4gIGlmICh0eXBlb2YgbG9jYWxUaGVtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IG1lcmdlZFRoZW1lID0gbG9jYWxUaGVtZShvdXRlclRoZW1lKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCFtZXJnZWRUaGVtZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBZb3Ugc2hvdWxkIHJldHVybiBhbiBvYmplY3QgZnJvbSB5b3VyIHRoZW1lIGZ1bmN0aW9uLCBpLmUuJywgJzxUaGVtZVByb3ZpZGVyIHRoZW1lPXsoKSA9PiAoe30pfSAvPiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlZFRoZW1lO1xuICB9XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3V0ZXJUaGVtZSwgbG9jYWxUaGVtZSk7XG59XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgdGFrZXMgYSBgdGhlbWVgIHByb3AuXG4gKiBJdCBtYWtlcyB0aGUgYHRoZW1lYCBhdmFpbGFibGUgZG93biB0aGUgUmVhY3QgdHJlZSB0aGFua3MgdG8gUmVhY3QgY29udGV4dC5cbiAqIFRoaXMgY29tcG9uZW50IHNob3VsZCBwcmVmZXJhYmx5IGJlIHVzZWQgYXQgKip0aGUgcm9vdCBvZiB5b3VyIGNvbXBvbmVudCB0cmVlKiouXG4gKi9cbmZ1bmN0aW9uIFRoZW1lUHJvdmlkZXIocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIHRoZW1lOiBsb2NhbFRoZW1lXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgb3V0ZXJUaGVtZSA9IHVzZVRoZW1lKCk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKG91dGVyVGhlbWUgPT09IG51bGwgJiYgdHlwZW9mIGxvY2FsVGhlbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFlvdSBhcmUgcHJvdmlkaW5nIGEgdGhlbWUgZnVuY3Rpb24gcHJvcCB0byB0aGUgVGhlbWVQcm92aWRlciBjb21wb25lbnQ6JywgJzxUaGVtZVByb3ZpZGVyIHRoZW1lPXtvdXRlclRoZW1lID0+IG91dGVyVGhlbWV9IC8+JywgJycsICdIb3dldmVyLCBubyBvdXRlciB0aGVtZSBpcyBwcmVzZW50LicsICdNYWtlIHN1cmUgYSB0aGVtZSBpcyBhbHJlYWR5IGluamVjdGVkIGhpZ2hlciBpbiB0aGUgUmVhY3QgdHJlZSAnICsgJ29yIHByb3ZpZGUgYSB0aGVtZSBvYmplY3QuJ10uam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuICBjb25zdCB0aGVtZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IG91dGVyVGhlbWUgPT09IG51bGwgPyBsb2NhbFRoZW1lIDogbWVyZ2VPdXRlckxvY2FsVGhlbWUob3V0ZXJUaGVtZSwgbG9jYWxUaGVtZSk7XG4gICAgaWYgKG91dHB1dCAhPSBudWxsKSB7XG4gICAgICBvdXRwdXRbbmVzdGVkXSA9IG91dGVyVGhlbWUgIT09IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH0sIFtsb2NhbFRoZW1lLCBvdXRlclRoZW1lXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUaGVtZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdGhlbWUsXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVGhlbWVQcm92aWRlci5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBZb3VyIGNvbXBvbmVudCB0cmVlLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogQSB0aGVtZSBvYmplY3QuIFlvdSBjYW4gcHJvdmlkZSBhIGZ1bmN0aW9uIHRvIGV4dGVuZCB0aGUgb3V0ZXIgdGhlbWUuXG4gICAqL1xuICB0aGVtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmZ1bmNdKS5pc1JlcXVpcmVkXG59IDogdm9pZCAwO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVGhlbWVQcm92aWRlci5wcm9wVHlwZXMgPSBleGFjdFByb3AoVGhlbWVQcm92aWRlci5wcm9wVHlwZXMpIDogdm9pZCAwO1xufVxuZXhwb3J0IGRlZmF1bHQgVGhlbWVQcm92aWRlcjsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5jb25zdCBUaGVtZUNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIFRoZW1lQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdUaGVtZUNvbnRleHQnO1xufVxuZXhwb3J0IGRlZmF1bHQgVGhlbWVDb250ZXh0OyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUaGVtZUNvbnRleHQgZnJvbSAnLi9UaGVtZUNvbnRleHQnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVGhlbWUoKSB7XG4gIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIFJlYWN0LnVzZURlYnVnVmFsdWUodGhlbWUpO1xuICB9XG4gIHJldHVybiB0aGVtZTtcbn0iLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gaXNFbXB0eShvYmopIHtcbiAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCB8fCBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEdsb2JhbFN0eWxlcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgc3R5bGVzLFxuICAgIGRlZmF1bHRUaGVtZSA9IHt9XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZ2xvYmFsU3R5bGVzID0gdHlwZW9mIHN0eWxlcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoZW1lSW5wdXQgPT4gc3R5bGVzKGlzRW1wdHkodGhlbWVJbnB1dCkgPyBkZWZhdWx0VGhlbWUgOiB0aGVtZUlucHV0KSA6IHN0eWxlcztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEdsb2JhbCwge1xuICAgIHN0eWxlczogZ2xvYmFsU3R5bGVzXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gR2xvYmFsU3R5bGVzLnByb3BUeXBlcyA9IHtcbiAgZGVmYXVsdFRoZW1lOiBQcm9wVHlwZXMub2JqZWN0LFxuICBzdHlsZXM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheSwgUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmZ1bmNdKVxufSA6IHZvaWQgMDsiLCIvKipcbiAqIEBtdWkvc3R5bGVkLWVuZ2luZSB2NS4xNS4wXG4gKlxuICogQGxpY2Vuc2UgTUlUXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBjbGllbnQnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuaW1wb3J0IGVtU3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdHlsZWQodGFnLCBvcHRpb25zKSB7XG4gIGNvbnN0IHN0eWxlc0ZhY3RvcnkgPSBlbVN0eWxlZCh0YWcsIG9wdGlvbnMpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHJldHVybiAoLi4uc3R5bGVzKSA9PiB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0eXBlb2YgdGFnID09PSAnc3RyaW5nJyA/IGBcIiR7dGFnfVwiYCA6ICdjb21wb25lbnQnO1xuICAgICAgaWYgKHN0eWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogU2VlbXMgbGlrZSB5b3UgY2FsbGVkIFxcYHN0eWxlZCgke2NvbXBvbmVudH0pKClcXGAgd2l0aG91dCBhIFxcYHN0eWxlXFxgIGFyZ3VtZW50LmAsICdZb3UgbXVzdCBwcm92aWRlIGEgYHN0eWxlc2AgYXJndW1lbnQ6IGBzdHlsZWQoXCJkaXZcIikoc3R5bGVZb3VGb3Jnb3RUb1Bhc3MpYC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlcy5zb21lKHN0eWxlID0+IHN0eWxlID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogdGhlIHN0eWxlZCgke2NvbXBvbmVudH0pKC4uLmFyZ3MpIEFQSSByZXF1aXJlcyBhbGwgaXRzIGFyZ3MgdG8gYmUgZGVmaW5lZC5gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHlsZXNGYWN0b3J5KC4uLnN0eWxlcyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gc3R5bGVzRmFjdG9yeTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IGludGVybmFsX3Byb2Nlc3NTdHlsZXMgPSAodGFnLCBwcm9jZXNzb3IpID0+IHtcbiAgLy8gRW1vdGlvbiBhdHRhY2hlcyBhbGwgdGhlIHN0eWxlcyBhcyBgX19lbW90aW9uX3N0eWxlc2AuXG4gIC8vIFJlZjogaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9ibG9iLzE2ZDk3MWQwZGEyMjk1OTZkNmJjYzM5ZDI4MmJhOTc1M2M5ZWU3Y2YvcGFja2FnZXMvc3R5bGVkL3NyYy9iYXNlLmpzI0wxODZcbiAgaWYgKEFycmF5LmlzQXJyYXkodGFnLl9fZW1vdGlvbl9zdHlsZXMpKSB7XG4gICAgdGFnLl9fZW1vdGlvbl9zdHlsZXMgPSBwcm9jZXNzb3IodGFnLl9fZW1vdGlvbl9zdHlsZXMpO1xuICB9XG59O1xuZXhwb3J0IHsgVGhlbWVDb250ZXh0LCBrZXlmcmFtZXMsIGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3R5bGVkRW5naW5lUHJvdmlkZXIgfSBmcm9tICcuL1N0eWxlZEVuZ2luZVByb3ZpZGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgR2xvYmFsU3R5bGVzIH0gZnJvbSAnLi9HbG9iYWxTdHlsZXMnOyJdLCJuYW1lcyI6WyJnZXRTZWxlY3RVdGlsaXR5Q2xhc3NlcyIsInNsb3QiLCJnZW5lcmF0ZVV0aWxpdHlDbGFzcyIsImdlbmVyYXRlVXRpbGl0eUNsYXNzZXMiLCJfc3BhbiIsIl9leGNsdWRlZCIsIlNlbGVjdFNlbGVjdCIsInN0eWxlZCIsIm5hbWUiLCJvdmVycmlkZXNSZXNvbHZlciIsInByb3BzIiwic3R5bGVzIiwib3duZXJTdGF0ZSIsInNlbGVjdCIsInZhcmlhbnQiLCJlcnJvciIsIm11bHRpcGxlIiwiaGVpZ2h0IiwibWluSGVpZ2h0IiwidGV4dE92ZXJmbG93Iiwid2hpdGVTcGFjZSIsIm92ZXJmbG93IiwiU2VsZWN0SWNvbiIsImljb24iLCJjYXBpdGFsaXplIiwib3BlbiIsImljb25PcGVuIiwiU2VsZWN0TmF0aXZlSW5wdXQiLCJzaG91bGRGb3J3YXJkUHJvcCIsInByb3AiLCJuYXRpdmVJbnB1dCIsImJvdHRvbSIsImxlZnQiLCJwb3NpdGlvbiIsIm9wYWNpdHkiLCJwb2ludGVyRXZlbnRzIiwid2lkdGgiLCJib3hTaXppbmciLCJhcmVFcXVhbFZhbHVlcyIsImEiLCJiIiwiU3RyaW5nIiwiaXNFbXB0eSIsImRpc3BsYXkiLCJ0cmltIiwicmVmIiwiX01lbnVQcm9wcyRzbG90UHJvcHMiLCJhcmlhRGVzY3JpYmVkYnkiLCJhcmlhTGFiZWwiLCJhdXRvRm9jdXMiLCJhdXRvV2lkdGgiLCJjaGlsZHJlbiIsImNsYXNzTmFtZSIsImRlZmF1bHRPcGVuIiwiZGVmYXVsdFZhbHVlIiwiZGlzYWJsZWQiLCJkaXNwbGF5RW1wdHkiLCJJY29uQ29tcG9uZW50IiwiaW5wdXRSZWYiLCJpbnB1dFJlZlByb3AiLCJsYWJlbElkIiwiTWVudVByb3BzIiwib25CbHVyIiwib25DaGFuZ2UiLCJvbkNsb3NlIiwib25Gb2N1cyIsIm9uT3BlbiIsIm9wZW5Qcm9wIiwicmVhZE9ubHkiLCJyZW5kZXJWYWx1ZSIsIlNlbGVjdERpc3BsYXlQcm9wcyIsInRhYkluZGV4IiwidGFiSW5kZXhQcm9wIiwidmFsdWUiLCJ2YWx1ZVByb3AiLCJvdGhlciIsInNldFZhbHVlU3RhdGUiLCJjb250cm9sbGVkIiwiZGVmYXVsdCIsIm9wZW5TdGF0ZSIsInNldE9wZW5TdGF0ZSIsImRpc3BsYXlSZWYiLCJkaXNwbGF5Tm9kZSIsInNldERpc3BsYXlOb2RlIiwiY3VycmVudCIsImlzT3BlbkNvbnRyb2xsZWQiLCJtZW51TWluV2lkdGhTdGF0ZSIsInNldE1lbnVNaW5XaWR0aFN0YXRlIiwiaGFuZGxlUmVmIiwidXNlRm9ya1JlZiIsImhhbmRsZURpc3BsYXlSZWYiLCJub2RlIiwiYW5jaG9yRWxlbWVudCIsInBhcmVudE5vZGUiLCJmb2N1cyIsImNsaWVudFdpZHRoIiwibGFiZWwiLCJvd25lckRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJoYW5kbGVyIiwiZ2V0U2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInVwZGF0ZSIsImV2ZW50IiwiY2hpbGRyZW5BcnJheSIsInRvQXJyYXkiLCJoYW5kbGVJdGVtQ2xpY2siLCJjaGlsZCIsIm5ld1ZhbHVlIiwiY3VycmVudFRhcmdldCIsImhhc0F0dHJpYnV0ZSIsIkFycmF5IiwiaXNBcnJheSIsInNsaWNlIiwiaXRlbUluZGV4IiwiaW5kZXhPZiIsInB1c2giLCJzcGxpY2UiLCJvbkNsaWNrIiwibmF0aXZlRXZlbnQiLCJjbG9uZWRFdmVudCIsImNvbnN0cnVjdG9yIiwidHlwZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5Iiwid3JpdGFibGUiLCJkaXNwbGF5U2luZ2xlIiwiZGlzcGxheU11bHRpcGxlIiwiY29tcHV0ZURpc3BsYXkiLCJmb3VuZE1hdGNoIiwiaXRlbXMiLCJtYXAiLCJzZWxlY3RlZCIsIkVycm9yIiwic29tZSIsInYiLCJvbktleVVwIiwia2V5IiwicHJldmVudERlZmF1bHQiLCJyb2xlIiwidW5kZWZpbmVkIiwibGVuZ3RoIiwicmVkdWNlIiwib3V0cHV0IiwiaW5kZXgiLCJtZW51TWluV2lkdGgiLCJidXR0b25JZCIsImlkIiwiY2xhc3NlcyIsInNsb3RzIiwiY29tcG9zZUNsYXNzZXMiLCJ1c2VVdGlsaXR5Q2xhc3NlcyIsInBhcGVyUHJvcHMiLCJQYXBlclByb3BzIiwic2xvdFByb3BzIiwicGFwZXIiLCJsaXN0Ym94SWQiLCJ1c2VJZCIsImZpbHRlciIsIkJvb2xlYW4iLCJqb2luIiwib25LZXlEb3duIiwib25Nb3VzZURvd24iLCJidXR0b24iLCJjbHN4IiwiZmluZCIsImNoaWxkSXRlbSIsInRhcmdldCIsImFzIiwiTWVudSIsImFuY2hvckVsIiwiYW5jaG9yT3JpZ2luIiwidmVydGljYWwiLCJob3Jpem9udGFsIiwidHJhbnNmb3JtT3JpZ2luIiwiTWVudUxpc3RQcm9wcyIsImRpc2FibGVMaXN0V3JhcCIsInN0eWxlIiwibWluV2lkdGgiLCJnZXRTdmdJY29uVXRpbGl0eUNsYXNzIiwiU3ZnSWNvblJvb3QiLCJyb290IiwiY29sb3IiLCJmb250U2l6ZSIsInRoZW1lIiwiX3RoZW1lJHRyYW5zaXRpb25zIiwiX3RoZW1lJHRyYW5zaXRpb25zJGNyIiwiX3RoZW1lJHRyYW5zaXRpb25zMiIsIl90aGVtZSR0eXBvZ3JhcGh5IiwiX3RoZW1lJHR5cG9ncmFwaHkkcHhUIiwiX3RoZW1lJHR5cG9ncmFwaHkyIiwiX3RoZW1lJHR5cG9ncmFwaHkyJHB4IiwiX3RoZW1lJHR5cG9ncmFwaHkzIiwiX3RoZW1lJHR5cG9ncmFwaHkzJHB4IiwiX3BhbGV0dGUkb3duZXJTdGF0ZSRjIiwiX3BhbGV0dGUiLCJfcGFsZXR0ZTIiLCJfcGFsZXR0ZTMiLCJ1c2VyU2VsZWN0IiwiZmlsbCIsImhhc1N2Z0FzQ2hpbGQiLCJmbGV4U2hyaW5rIiwidHJhbnNpdGlvbiIsInRyYW5zaXRpb25zIiwiY3JlYXRlIiwiY2FsbCIsImR1cmF0aW9uIiwic2hvcnRlciIsImluaGVyaXQiLCJzbWFsbCIsInR5cG9ncmFwaHkiLCJweFRvUmVtIiwibWVkaXVtIiwibGFyZ2UiLCJ2YXJzIiwicGFsZXR0ZSIsIm1haW4iLCJhY3Rpb24iLCJhY3RpdmUiLCJTdmdJY29uIiwiaW5Qcm9wcyIsInVzZVRoZW1lUHJvcHMiLCJjb21wb25lbnQiLCJodG1sQ29sb3IiLCJpbmhlcml0Vmlld0JveCIsInRpdGxlQWNjZXNzIiwidmlld0JveCIsImluc3RhbmNlRm9udFNpemUiLCJtb3JlIiwiZm9jdXNhYmxlIiwibXVpTmFtZSIsInBhdGgiLCJkaXNwbGF5TmFtZSIsIkNvbXBvbmVudCIsImQiLCJfZXhjbHVkZWQyIiwic3R5bGVkUm9vdENvbmZpZyIsIlN0eWxlZElucHV0IiwiSW5wdXQiLCJTdHlsZWRPdXRsaW5lZElucHV0IiwiT3V0bGluZWRJbnB1dCIsIlN0eWxlZEZpbGxlZElucHV0IiwiRmlsbGVkSW5wdXQiLCJTZWxlY3QiLCJjbGFzc2VzUHJvcCIsIkFycm93RHJvcERvd24iLCJpbnB1dCIsImlucHV0UHJvcHMiLCJuYXRpdmUiLCJ2YXJpYW50UHJvcCIsImlucHV0Q29tcG9uZW50IiwiTmF0aXZlU2VsZWN0SW5wdXQiLCJtdWlGb3JtQ29udHJvbCIsInVzZUZvcm1Db250cm9sIiwiZmNzIiwiZm9ybUNvbnRyb2xTdGF0ZSIsInN0YXRlcyIsInJlc3RPZkNsYXNzZXMiLCJJbnB1dENvbXBvbmVudCIsInN0YW5kYXJkIiwib3V0bGluZWQiLCJmaWxsZWQiLCJpbnB1dENvbXBvbmVudFJlZiIsImRlZXBtZXJnZSIsIm5vdGNoZWQiLCJnZXRUZXh0RmllbGRVdGlsaXR5Q2xhc3MiLCJ2YXJpYW50Q29tcG9uZW50IiwiVGV4dEZpZWxkUm9vdCIsIkZvcm1Db250cm9sIiwiYXV0b0NvbXBsZXRlIiwiRm9ybUhlbHBlclRleHRQcm9wcyIsImZ1bGxXaWR0aCIsImhlbHBlclRleHQiLCJpZE92ZXJyaWRlIiwiSW5wdXRMYWJlbFByb3BzIiwiSW5wdXRQcm9wcyIsIm1heFJvd3MiLCJtaW5Sb3dzIiwibXVsdGlsaW5lIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsInJvd3MiLCJTZWxlY3RQcm9wcyIsIklucHV0TW9yZSIsInNocmluayIsImhlbHBlclRleHRJZCIsImlucHV0TGFiZWxJZCIsIklucHV0RWxlbWVudCIsIklucHV0TGFiZWwiLCJodG1sRm9yIiwiRm9ybUhlbHBlclRleHQiLCJnZXRUb29sYmFyVXRpbGl0eUNsYXNzIiwiVG9vbGJhclJvb3QiLCJkaXNhYmxlR3V0dGVycyIsImd1dHRlcnMiLCJhbGlnbkl0ZW1zIiwicGFkZGluZ0xlZnQiLCJzcGFjaW5nIiwicGFkZGluZ1JpZ2h0IiwiYnJlYWtwb2ludHMiLCJ1cCIsIm1peGlucyIsInRvb2xiYXIiLCJnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzIiwiVHlwb2dyYXBoeVJvb3QiLCJhbGlnbiIsIm5vV3JhcCIsImd1dHRlckJvdHRvbSIsInBhcmFncmFwaCIsIm1hcmdpbiIsImZvbnQiLCJ0ZXh0QWxpZ24iLCJtYXJnaW5Cb3R0b20iLCJkZWZhdWx0VmFyaWFudE1hcHBpbmciLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJzdWJ0aXRsZTEiLCJzdWJ0aXRsZTIiLCJib2R5MSIsImJvZHkyIiwiY29sb3JUcmFuc2Zvcm1hdGlvbnMiLCJwcmltYXJ5IiwidGV4dFByaW1hcnkiLCJzZWNvbmRhcnkiLCJ0ZXh0U2Vjb25kYXJ5IiwidGhlbWVQcm9wcyIsInRyYW5zZm9ybURlcHJlY2F0ZWRDb2xvcnMiLCJleHRlbmRTeFByb3AiLCJ2YXJpYW50TWFwcGluZyIsIlRoZW1lUHJvdmlkZXIiLCJfcmVmIiwidGhlbWVJbnB1dCIsInNjb3BlZFRoZW1lIiwidGhlbWVJZCIsImJsYWNrIiwid2hpdGUiLCJBMTAwIiwiQTIwMCIsIkE0MDAiLCJBNzAwIiwibGlnaHQiLCJ0ZXh0IiwiZGl2aWRlciIsImJhY2tncm91bmQiLCJob3ZlciIsImhvdmVyT3BhY2l0eSIsInNlbGVjdGVkT3BhY2l0eSIsImRpc2FibGVkQmFja2dyb3VuZCIsImRpc2FibGVkT3BhY2l0eSIsImZvY3VzT3BhY2l0eSIsImFjdGl2YXRlZE9wYWNpdHkiLCJkYXJrIiwiYWRkTGlnaHRPckRhcmsiLCJpbnRlbnQiLCJkaXJlY3Rpb24iLCJzaGFkZSIsInRvbmFsT2Zmc2V0IiwidG9uYWxPZmZzZXRMaWdodCIsInRvbmFsT2Zmc2V0RGFyayIsImhhc093blByb3BlcnR5IiwiY2FzZUFsbENhcHMiLCJ0ZXh0VHJhbnNmb3JtIiwiZGVmYXVsdEZvbnRGYW1pbHkiLCJjcmVhdGVUeXBvZ3JhcGh5IiwiZm9udEZhbWlseSIsImZvbnRXZWlnaHRMaWdodCIsImZvbnRXZWlnaHRSZWd1bGFyIiwiZm9udFdlaWdodE1lZGl1bSIsImZvbnRXZWlnaHRCb2xkIiwiaHRtbEZvbnRTaXplIiwiYWxsVmFyaWFudHMiLCJweFRvUmVtMiIsImNvZWYiLCJzaXplIiwiYnVpbGRWYXJpYW50IiwiZm9udFdlaWdodCIsImxpbmVIZWlnaHQiLCJsZXR0ZXJTcGFjaW5nIiwiY2FzaW5nIiwiTWF0aCIsInJvdW5kIiwidmFyaWFudHMiLCJjYXB0aW9uIiwib3ZlcmxpbmUiLCJjbG9uZSIsImNyZWF0ZVNoYWRvdyIsInB4IiwiZWFzaW5nIiwiZWFzZUluT3V0IiwiZWFzZU91dCIsImVhc2VJbiIsInNoYXJwIiwic2hvcnRlc3QiLCJzaG9ydCIsImNvbXBsZXgiLCJlbnRlcmluZ1NjcmVlbiIsImxlYXZpbmdTY3JlZW4iLCJmb3JtYXRNcyIsIm1pbGxpc2Vjb25kcyIsImdldEF1dG9IZWlnaHREdXJhdGlvbiIsImNvbnN0YW50IiwiY3JlYXRlVHJhbnNpdGlvbnMiLCJpbnB1dFRyYW5zaXRpb25zIiwibWVyZ2VkRWFzaW5nIiwibWVyZ2VkRHVyYXRpb24iLCJvcHRpb25zIiwiZHVyYXRpb25PcHRpb24iLCJlYXNpbmdPcHRpb24iLCJkZWxheSIsImFuaW1hdGVkUHJvcCIsIm1vYmlsZVN0ZXBwZXIiLCJmYWIiLCJzcGVlZERpYWwiLCJhcHBCYXIiLCJkcmF3ZXIiLCJtb2RhbCIsInNuYWNrYmFyIiwidG9vbHRpcCIsImFyZ3MiLCJtaXhpbnNJbnB1dCIsInBhbGV0dGVJbnB1dCIsInRyYW5zaXRpb25zSW5wdXQiLCJ0eXBvZ3JhcGh5SW5wdXQiLCJtb2RlIiwiY29udHJhc3RUaHJlc2hvbGQiLCJnZXREZWZhdWx0UHJpbWFyeSIsImdldERlZmF1bHRTZWNvbmRhcnkiLCJnZXREZWZhdWx0RXJyb3IiLCJpbmZvIiwiZ2V0RGVmYXVsdEluZm8iLCJzdWNjZXNzIiwiZ2V0RGVmYXVsdFN1Y2Nlc3MiLCJ3YXJuaW5nIiwiZ2V0RGVmYXVsdFdhcm5pbmciLCJnZXRDb250cmFzdFRleHQiLCJhdWdtZW50Q29sb3IiLCJtYWluU2hhZGUiLCJsaWdodFNoYWRlIiwiZGFya1NoYWRlIiwiSlNPTiIsInN0cmluZ2lmeSIsImNvbnRyYXN0VGV4dCIsIm1vZGVzIiwiY29tbW9uIiwiZ3JleSIsImNyZWF0ZVBhbGV0dGUiLCJzeXN0ZW1UaGVtZSIsIm11aVRoZW1lIiwic2hhZG93cyIsInpJbmRleCIsImFjYyIsImFyZ3VtZW50IiwidW5zdGFibGVfc3hDb25maWciLCJkZWZhdWx0U3hDb25maWciLCJ1bnN0YWJsZV9zeCIsInN0eWxlRnVuY3Rpb25TeCIsInN4IiwidGhpcyIsImVsZXZhdGlvbiIsImFscGhhVmFsdWUiLCJsb2ciLCJ0b0ZpeGVkIiwicm9vdFNob3VsZEZvcndhcmRQcm9wIiwic2xvdFNob3VsZEZvcndhcmRQcm9wIiwiZGVmYXVsdFRoZW1lIiwidXNlVGhlbWUiLCJyZWZsb3ciLCJzY3JvbGxUb3AiLCJnZXRUcmFuc2l0aW9uUHJvcHMiLCJfc3R5bGUkdHJhbnNpdGlvbkR1cmEiLCJfc3R5bGUkdHJhbnNpdGlvblRpbWkiLCJ0aW1lb3V0IiwidHJhbnNpdGlvbkR1cmF0aW9uIiwidHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uIiwidHJhbnNpdGlvbkRlbGF5IiwiU3ltYm9sIiwiZm9yIiwibG9jYWxUaGVtZSIsIm91dGVyVGhlbWUiLCJtZXJnZU91dGVyTG9jYWxUaGVtZSIsIm5lc3RlZCIsIlRoZW1lQ29udGV4dCIsIlByb3ZpZGVyIiwiR2xvYmFsU3R5bGVzIiwiZ2xvYmFsU3R5bGVzIiwib2JqIiwia2V5cyIsInRhZyIsImludGVybmFsX3Byb2Nlc3NTdHlsZXMiLCJwcm9jZXNzb3IiLCJfX2Vtb3Rpb25fc3R5bGVzIl0sInNvdXJjZVJvb3QiOiIifQ==