"use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[260],{8161:(e,t,o)=>{o.d(t,{A:()=>c});var n=o(7413),r=o(9071),i=o(3478),a=o(8312);const s=(0,o(8413).A)("MuiBox",["root"]),l=(0,i.A)(),c=(0,n.A)({themeId:a.A,defaultTheme:l,defaultClassName:s.root,generateClassName:r.A.generate})},6990:(e,t,o)=>{o.d(t,{A:()=>w});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(3726),l=o(5659),c=o(4279),d=o(1848),u=o(3541),p=o(8850),h=o(8466),m=o(8413),v=o(1609);function b(e){return(0,v.A)("MuiButton",e)}const f=(0,m.A)("MuiButton",["root","text","textInherit","textPrimary","textSecondary","textSuccess","textError","textInfo","textWarning","outlined","outlinedInherit","outlinedPrimary","outlinedSecondary","outlinedSuccess","outlinedError","outlinedInfo","outlinedWarning","contained","containedInherit","containedPrimary","containedSecondary","containedSuccess","containedError","containedInfo","containedWarning","disableElevation","focusVisible","disabled","colorInherit","textSizeSmall","textSizeMedium","textSizeLarge","outlinedSizeSmall","outlinedSizeMedium","outlinedSizeLarge","containedSizeSmall","containedSizeMedium","containedSizeLarge","sizeMedium","sizeSmall","sizeLarge","fullWidth","startIcon","endIcon","iconSizeSmall","iconSizeMedium","iconSizeLarge"]),g=i.createContext({}),x=i.createContext(void 0);var y=o(4848);const A=["children","color","component","className","disabled","disableElevation","disableFocusRipple","endIcon","focusVisibleClassName","fullWidth","size","startIcon","type","variant"],S=e=>(0,r.A)({},"small"===e.size&&{"& > *:nth-of-type(1)":{fontSize:18}},"medium"===e.size&&{"& > *:nth-of-type(1)":{fontSize:20}},"large"===e.size&&{"& > *:nth-of-type(1)":{fontSize:22}}),k=(0,d.Ay)(p.A,{shouldForwardProp:e=>(0,d.ep)(e)||"classes"===e,name:"MuiButton",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,t[o.variant],t[`${o.variant}${(0,h.A)(o.color)}`],t[`size${(0,h.A)(o.size)}`],t[`${o.variant}Size${(0,h.A)(o.size)}`],"inherit"===o.color&&t.colorInherit,o.disableElevation&&t.disableElevation,o.fullWidth&&t.fullWidth]}})((({theme:e,ownerState:t})=>{var o,n;const i="light"===e.palette.mode?e.palette.grey[300]:e.palette.grey[800],a="light"===e.palette.mode?e.palette.grey.A100:e.palette.grey[700];return(0,r.A)({},e.typography.button,{minWidth:64,padding:"6px 16px",borderRadius:(e.vars||e).shape.borderRadius,transition:e.transitions.create(["background-color","box-shadow","border-color","color"],{duration:e.transitions.duration.short}),"&:hover":(0,r.A)({textDecoration:"none",backgroundColor:e.vars?`rgba(${e.vars.palette.text.primaryChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,c.X4)(e.palette.text.primary,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"text"===t.variant&&"inherit"!==t.color&&{backgroundColor:e.vars?`rgba(${e.vars.palette[t.color].mainChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,c.X4)(e.palette[t.color].main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"outlined"===t.variant&&"inherit"!==t.color&&{border:`1px solid ${(e.vars||e).palette[t.color].main}`,backgroundColor:e.vars?`rgba(${e.vars.palette[t.color].mainChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,c.X4)(e.palette[t.color].main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"contained"===t.variant&&{backgroundColor:e.vars?e.vars.palette.Button.inheritContainedHoverBg:a,boxShadow:(e.vars||e).shadows[4],"@media (hover: none)":{boxShadow:(e.vars||e).shadows[2],backgroundColor:(e.vars||e).palette.grey[300]}},"contained"===t.variant&&"inherit"!==t.color&&{backgroundColor:(e.vars||e).palette[t.color].dark,"@media (hover: none)":{backgroundColor:(e.vars||e).palette[t.color].main}}),"&:active":(0,r.A)({},"contained"===t.variant&&{boxShadow:(e.vars||e).shadows[8]}),[`&.${f.focusVisible}`]:(0,r.A)({},"contained"===t.variant&&{boxShadow:(e.vars||e).shadows[6]}),[`&.${f.disabled}`]:(0,r.A)({color:(e.vars||e).palette.action.disabled},"outlined"===t.variant&&{border:`1px solid ${(e.vars||e).palette.action.disabledBackground}`},"contained"===t.variant&&{color:(e.vars||e).palette.action.disabled,boxShadow:(e.vars||e).shadows[0],backgroundColor:(e.vars||e).palette.action.disabledBackground})},"text"===t.variant&&{padding:"6px 8px"},"text"===t.variant&&"inherit"!==t.color&&{color:(e.vars||e).palette[t.color].main},"outlined"===t.variant&&{padding:"5px 15px",border:"1px solid currentColor"},"outlined"===t.variant&&"inherit"!==t.color&&{color:(e.vars||e).palette[t.color].main,border:e.vars?`1px solid rgba(${e.vars.palette[t.color].mainChannel} / 0.5)`:`1px solid ${(0,c.X4)(e.palette[t.color].main,.5)}`},"contained"===t.variant&&{color:e.vars?e.vars.palette.text.primary:null==(o=(n=e.palette).getContrastText)?void 0:o.call(n,e.palette.grey[300]),backgroundColor:e.vars?e.vars.palette.Button.inheritContainedBg:i,boxShadow:(e.vars||e).shadows[2]},"contained"===t.variant&&"inherit"!==t.color&&{color:(e.vars||e).palette[t.color].contrastText,backgroundColor:(e.vars||e).palette[t.color].main},"inherit"===t.color&&{color:"inherit",borderColor:"currentColor"},"small"===t.size&&"text"===t.variant&&{padding:"4px 5px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"text"===t.variant&&{padding:"8px 11px",fontSize:e.typography.pxToRem(15)},"small"===t.size&&"outlined"===t.variant&&{padding:"3px 9px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"outlined"===t.variant&&{padding:"7px 21px",fontSize:e.typography.pxToRem(15)},"small"===t.size&&"contained"===t.variant&&{padding:"4px 10px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"contained"===t.variant&&{padding:"8px 22px",fontSize:e.typography.pxToRem(15)},t.fullWidth&&{width:"100%"})}),(({ownerState:e})=>e.disableElevation&&{boxShadow:"none","&:hover":{boxShadow:"none"},[`&.${f.focusVisible}`]:{boxShadow:"none"},"&:active":{boxShadow:"none"},[`&.${f.disabled}`]:{boxShadow:"none"}})),C=(0,d.Ay)("span",{name:"MuiButton",slot:"StartIcon",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.startIcon,t[`iconSize${(0,h.A)(o.size)}`]]}})((({ownerState:e})=>(0,r.A)({display:"inherit",marginRight:8,marginLeft:-4},"small"===e.size&&{marginLeft:-2},S(e)))),R=(0,d.Ay)("span",{name:"MuiButton",slot:"EndIcon",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.endIcon,t[`iconSize${(0,h.A)(o.size)}`]]}})((({ownerState:e})=>(0,r.A)({display:"inherit",marginRight:-4,marginLeft:8},"small"===e.size&&{marginRight:-2},S(e)))),w=i.forwardRef((function(e,t){const o=i.useContext(g),c=i.useContext(x),d=(0,s.A)(o,e),p=(0,u.A)({props:d,name:"MuiButton"}),{children:m,color:v="primary",component:f="button",className:S,disabled:w=!1,disableElevation:z=!1,disableFocusRipple:M=!1,endIcon:$,focusVisibleClassName:E,fullWidth:T=!1,size:I="medium",startIcon:B,type:P,variant:N="text"}=p,L=(0,n.A)(p,A),V=(0,r.A)({},p,{color:v,component:f,disabled:w,disableElevation:z,disableFocusRipple:M,fullWidth:T,size:I,type:P,variant:N}),W=(e=>{const{color:t,disableElevation:o,fullWidth:n,size:i,variant:a,classes:s}=e,c={root:["root",a,`${a}${(0,h.A)(t)}`,`size${(0,h.A)(i)}`,`${a}Size${(0,h.A)(i)}`,"inherit"===t&&"colorInherit",o&&"disableElevation",n&&"fullWidth"],label:["label"],startIcon:["startIcon",`iconSize${(0,h.A)(i)}`],endIcon:["endIcon",`iconSize${(0,h.A)(i)}`]},d=(0,l.A)(c,b,s);return(0,r.A)({},s,d)})(V),D=B&&(0,y.jsx)(C,{className:W.startIcon,ownerState:V,children:B}),j=$&&(0,y.jsx)(R,{className:W.endIcon,ownerState:V,children:$}),F=c||"";return(0,y.jsxs)(k,(0,r.A)({ownerState:V,className:(0,a.A)(o.className,W.root,S,F),component:f,disabled:w,focusRipple:!M,focusVisibleClassName:(0,a.A)(W.focusVisible,E),ref:t,type:P},L,{classes:W,children:[D,m,j]}))}))},8850:(e,t,o)=>{o.d(t,{A:()=>N});var n=o(8168),r=o(8587),i=o(6540),a=o(4164),s=o(5659),l=o(1848),c=o(3541),d=o(6852),u=o(3034),p=o(8851),h=o(2618),m=o(7437),v=o(4848);var b=o(8413);const f=(0,b.A)("MuiTouchRipple",["root","ripple","rippleVisible","ripplePulsate","child","childLeaving","childPulsate"]),g=["center","classes","className"];let x,y,A,S,k=e=>e;const C=(0,m.i7)(x||(x=k` 0% { transform: scale(0); opacity: 0.1; } 100% { transform: scale(1); opacity: 0.3; } `)),R=(0,m.i7)(y||(y=k` 0% { opacity: 1; } 100% { opacity: 0; } `)),w=(0,m.i7)(A||(A=k` 0% { transform: scale(1); } 50% { transform: scale(0.92); } 100% { transform: scale(1); } `)),z=(0,l.Ay)("span",{name:"MuiTouchRipple",slot:"Root"})({overflow:"hidden",pointerEvents:"none",position:"absolute",zIndex:0,top:0,right:0,bottom:0,left:0,borderRadius:"inherit"}),M=(0,l.Ay)((function(e){const{className:t,classes:o,pulsate:n=!1,rippleX:r,rippleY:s,rippleSize:l,in:c,onExited:d,timeout:u}=e,[p,h]=i.useState(!1),m=(0,a.A)(t,o.ripple,o.rippleVisible,n&&o.ripplePulsate),b={width:l,height:l,top:-l/2+s,left:-l/2+r},f=(0,a.A)(o.child,p&&o.childLeaving,n&&o.childPulsate);return c||p||h(!0),i.useEffect((()=>{if(!c&&null!=d){const e=setTimeout(d,u);return()=>{clearTimeout(e)}}}),[d,c,u]),(0,v.jsx)("span",{className:m,style:b,children:(0,v.jsx)("span",{className:f})})}),{name:"MuiTouchRipple",slot:"Ripple"})(S||(S=k` opacity: 0; position: absolute; &.${0} { opacity: 0.3; transform: scale(1); animation-name: ${0}; animation-duration: ${0}ms; animation-timing-function: ${0}; } &.${0} { animation-duration: ${0}ms; } & .${0} { opacity: 1; display: block; width: 100%; height: 100%; border-radius: 50%; background-color: currentColor; } & .${0} { opacity: 0; animation-name: ${0}; animation-duration: ${0}ms; animation-timing-function: ${0}; } & .${0} { position: absolute; /* @noflip */ left: 0px; top: 0; animation-name: ${0}; animation-duration: 2500ms; animation-timing-function: ${0}; animation-iteration-count: infinite; animation-delay: 200ms; } `),f.rippleVisible,C,550,(({theme:e})=>e.transitions.easing.easeInOut),f.ripplePulsate,(({theme:e})=>e.transitions.duration.shorter),f.child,f.childLeaving,R,550,(({theme:e})=>e.transitions.easing.easeInOut),f.childPulsate,w,(({theme:e})=>e.transitions.easing.easeInOut)),$=i.forwardRef((function(e,t){const o=(0,c.A)({props:e,name:"MuiTouchRipple"}),{center:s=!1,classes:l={},className:d}=o,u=(0,r.A)(o,g),[p,m]=i.useState([]),b=i.useRef(0),x=i.useRef(null);i.useEffect((()=>{x.current&&(x.current(),x.current=null)}),[p]);const y=i.useRef(!1),A=i.useRef(0),S=i.useRef(null),k=i.useRef(null);i.useEffect((()=>()=>{A.current&&clearTimeout(A.current)}),[]);const C=i.useCallback((e=>{const{pulsate:t,rippleX:o,rippleY:n,rippleSize:r,cb:i}=e;m((e=>[...e,(0,v.jsx)(M,{classes:{ripple:(0,a.A)(l.ripple,f.ripple),rippleVisible:(0,a.A)(l.rippleVisible,f.rippleVisible),ripplePulsate:(0,a.A)(l.ripplePulsate,f.ripplePulsate),child:(0,a.A)(l.child,f.child),childLeaving:(0,a.A)(l.childLeaving,f.childLeaving),childPulsate:(0,a.A)(l.childPulsate,f.childPulsate)},timeout:550,pulsate:t,rippleX:o,rippleY:n,rippleSize:r},b.current)])),b.current+=1,x.current=i}),[l]),R=i.useCallback(((e={},t={},o=(()=>{}))=>{const{pulsate:n=!1,center:r=s||t.pulsate,fakeElement:i=!1}=t;if("mousedown"===(null==e?void 0:e.type)&&y.current)return void(y.current=!1);"touchstart"===(null==e?void 0:e.type)&&(y.current=!0);const a=i?null:k.current,l=a?a.getBoundingClientRect():{width:0,height:0,left:0,top:0};let c,d,u;if(r||void 0===e||0===e.clientX&&0===e.clientY||!e.clientX&&!e.touches)c=Math.round(l.width/2),d=Math.round(l.height/2);else{const{clientX:t,clientY:o}=e.touches&&e.touches.length>0?e.touches[0]:e;c=Math.round(t-l.left),d=Math.round(o-l.top)}if(r)u=Math.sqrt((2*l.width**2+l.height**2)/3),u%2==0&&(u+=1);else{const e=2*Math.max(Math.abs((a?a.clientWidth:0)-c),c)+2,t=2*Math.max(Math.abs((a?a.clientHeight:0)-d),d)+2;u=Math.sqrt(e**2+t**2)}null!=e&&e.touches?null===S.current&&(S.current=()=>{C({pulsate:n,rippleX:c,rippleY:d,rippleSize:u,cb:o})},A.current=setTimeout((()=>{S.current&&(S.current(),S.current=null)}),80)):C({pulsate:n,rippleX:c,rippleY:d,rippleSize:u,cb:o})}),[s,C]),w=i.useCallback((()=>{R({},{pulsate:!0})}),[R]),$=i.useCallback(((e,t)=>{if(clearTimeout(A.current),"touchend"===(null==e?void 0:e.type)&&S.current)return S.current(),S.current=null,void(A.current=setTimeout((()=>{$(e,t)})));S.current=null,m((e=>e.length>0?e.slice(1):e)),x.current=t}),[]);return i.useImperativeHandle(t,(()=>({pulsate:w,start:R,stop:$})),[w,R,$]),(0,v.jsx)(z,(0,n.A)({className:(0,a.A)(f.root,l.root,d),ref:k},u,{children:(0,v.jsx)(h.A,{component:null,exit:!0,children:p})}))}));var E=o(1609);function T(e){return(0,E.A)("MuiButtonBase",e)}const I=(0,b.A)("MuiButtonBase",["root","disabled","focusVisible"]),B=["action","centerRipple","children","className","component","disabled","disableRipple","disableTouchRipple","focusRipple","focusVisibleClassName","LinkComponent","onBlur","onClick","onContextMenu","onDragLeave","onFocus","onFocusVisible","onKeyDown","onKeyUp","onMouseDown","onMouseLeave","onMouseUp","onTouchEnd","onTouchMove","onTouchStart","tabIndex","TouchRippleProps","touchRippleRef","type"],P=(0,l.Ay)("button",{name:"MuiButtonBase",slot:"Root",overridesResolver:(e,t)=>t.root})({display:"inline-flex",alignItems:"center",justifyContent:"center",position:"relative",boxSizing:"border-box",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none",textDecoration:"none",color:"inherit","&::-moz-focus-inner":{borderStyle:"none"},[`&.${I.disabled}`]:{pointerEvents:"none",cursor:"default"},"@media print":{colorAdjust:"exact"}}),N=i.forwardRef((function(e,t){const o=(0,c.A)({props:e,name:"MuiButtonBase"}),{action:l,centerRipple:h=!1,children:m,className:b,component:f="button",disabled:g=!1,disableRipple:x=!1,disableTouchRipple:y=!1,focusRipple:A=!1,LinkComponent:S="a",onBlur:k,onClick:C,onContextMenu:R,onDragLeave:w,onFocus:z,onFocusVisible:M,onKeyDown:E,onKeyUp:I,onMouseDown:N,onMouseLeave:L,onMouseUp:V,onTouchEnd:W,onTouchMove:D,onTouchStart:j,tabIndex:F=0,TouchRippleProps:O,touchRippleRef:X,type:H}=o,Y=(0,r.A)(o,B),K=i.useRef(null),U=i.useRef(null),q=(0,d.A)(U,X),{isFocusVisibleRef:G,onFocus:_,onBlur:J,ref:Q}=(0,p.A)(),[Z,ee]=i.useState(!1);g&&Z&&ee(!1),i.useImperativeHandle(l,(()=>({focusVisible:()=>{ee(!0),K.current.focus()}})),[]);const[te,oe]=i.useState(!1);i.useEffect((()=>{oe(!0)}),[]);const ne=te&&!x&&!g;function re(e,t,o=y){return(0,u.A)((n=>(t&&t(n),!o&&U.current&&U.current[e](n),!0)))}i.useEffect((()=>{Z&&A&&!x&&te&&U.current.pulsate()}),[x,A,Z,te]);const ie=re("start",N),ae=re("stop",R),se=re("stop",w),le=re("stop",V),ce=re("stop",(e=>{Z&&e.preventDefault(),L&&L(e)})),de=re("start",j),ue=re("stop",W),pe=re("stop",D),he=re("stop",(e=>{J(e),!1===G.current&&ee(!1),k&&k(e)}),!1),me=(0,u.A)((e=>{K.current||(K.current=e.currentTarget),_(e),!0===G.current&&(ee(!0),M&&M(e)),z&&z(e)})),ve=()=>{const e=K.current;return f&&"button"!==f&&!("A"===e.tagName&&e.href)},be=i.useRef(!1),fe=(0,u.A)((e=>{A&&!be.current&&Z&&U.current&&" "===e.key&&(be.current=!0,U.current.stop(e,(()=>{U.current.start(e)}))),e.target===e.currentTarget&&ve()&&" "===e.key&&e.preventDefault(),E&&E(e),e.target===e.currentTarget&&ve()&&"Enter"===e.key&&!g&&(e.preventDefault(),C&&C(e))})),ge=(0,u.A)((e=>{A&&" "===e.key&&U.current&&Z&&!e.defaultPrevented&&(be.current=!1,U.current.stop(e,(()=>{U.current.pulsate(e)}))),I&&I(e),C&&e.target===e.currentTarget&&ve()&&" "===e.key&&!e.defaultPrevented&&C(e)}));let xe=f;"button"===xe&&(Y.href||Y.to)&&(xe=S);const ye={};"button"===xe?(ye.type=void 0===H?"button":H,ye.disabled=g):(Y.href||Y.to||(ye.role="button"),g&&(ye["aria-disabled"]=g));const Ae=(0,d.A)(t,Q,K),Se=(0,n.A)({},o,{centerRipple:h,component:f,disabled:g,disableRipple:x,disableTouchRipple:y,focusRipple:A,tabIndex:F,focusVisible:Z}),ke=(e=>{const{disabled:t,focusVisible:o,focusVisibleClassName:n,classes:r}=e,i={root:["root",t&&"disabled",o&&"focusVisible"]},a=(0,s.A)(i,T,r);return o&&n&&(a.root+=` ${n}`),a})(Se);return(0,v.jsxs)(P,(0,n.A)({as:xe,className:(0,a.A)(ke.root,b),ownerState:Se,onBlur:he,onClick:C,onContextMenu:ae,onFocus:me,onKeyDown:fe,onKeyUp:ge,onMouseDown:ie,onMouseLeave:ce,onMouseUp:le,onDragLeave:se,onTouchEnd:ue,onTouchMove:pe,onTouchStart:de,ref:Ae,tabIndex:g?-1:F,type:H},ye,Y,{children:[m,ne?(0,v.jsx)($,(0,n.A)({ref:q,center:h},O)):null]}))}))},3357:(e,t,o)=>{o.d(t,{A:()=>z});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(5659),l=o(7437),c=o(8466),d=o(3541),u=o(1848),p=o(8413),h=o(1609);function m(e){return(0,h.A)("MuiCircularProgress",e)}(0,p.A)("MuiCircularProgress",["root","determinate","indeterminate","colorPrimary","colorSecondary","svg","circle","circleDeterminate","circleIndeterminate","circleDisableShrink"]);var v=o(4848);const b=["className","color","disableShrink","size","style","thickness","value","variant"];let f,g,x,y,A=e=>e;const S=(0,l.i7)(f||(f=A` 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } `)),k=(0,l.i7)(g||(g=A` 0% { stroke-dasharray: 1px, 200px; stroke-dashoffset: 0; } 50% { stroke-dasharray: 100px, 200px; stroke-dashoffset: -15px; } 100% { stroke-dasharray: 100px, 200px; stroke-dashoffset: -125px; } `)),C=(0,u.Ay)("span",{name:"MuiCircularProgress",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,t[o.variant],t[`color${(0,c.A)(o.color)}`]]}})((({ownerState:e,theme:t})=>(0,r.A)({display:"inline-block"},"determinate"===e.variant&&{transition:t.transitions.create("transform")},"inherit"!==e.color&&{color:(t.vars||t).palette[e.color].main})),(({ownerState:e})=>"indeterminate"===e.variant&&(0,l.AH)(x||(x=A` animation: ${0} 1.4s linear infinite; `),S))),R=(0,u.Ay)("svg",{name:"MuiCircularProgress",slot:"Svg",overridesResolver:(e,t)=>t.svg})({display:"block"}),w=(0,u.Ay)("circle",{name:"MuiCircularProgress",slot:"Circle",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.circle,t[`circle${(0,c.A)(o.variant)}`],o.disableShrink&&t.circleDisableShrink]}})((({ownerState:e,theme:t})=>(0,r.A)({stroke:"currentColor"},"determinate"===e.variant&&{transition:t.transitions.create("stroke-dashoffset")},"indeterminate"===e.variant&&{strokeDasharray:"80px, 200px",strokeDashoffset:0})),(({ownerState:e})=>"indeterminate"===e.variant&&!e.disableShrink&&(0,l.AH)(y||(y=A` animation: ${0} 1.4s ease-in-out infinite; `),k))),z=i.forwardRef((function(e,t){const o=(0,d.A)({props:e,name:"MuiCircularProgress"}),{className:i,color:l="primary",disableShrink:u=!1,size:p=40,style:h,thickness:f=3.6,value:g=0,variant:x="indeterminate"}=o,y=(0,n.A)(o,b),A=(0,r.A)({},o,{color:l,disableShrink:u,size:p,thickness:f,value:g,variant:x}),S=(e=>{const{classes:t,variant:o,color:n,disableShrink:r}=e,i={root:["root",o,`color${(0,c.A)(n)}`],svg:["svg"],circle:["circle",`circle${(0,c.A)(o)}`,r&&"circleDisableShrink"]};return(0,s.A)(i,m,t)})(A),k={},z={},M={};if("determinate"===x){const e=2*Math.PI*((44-f)/2);k.strokeDasharray=e.toFixed(3),M["aria-valuenow"]=Math.round(g),k.strokeDashoffset=`${((100-g)/100*e).toFixed(3)}px`,z.transform="rotate(-90deg)"}return(0,v.jsx)(C,(0,r.A)({className:(0,a.A)(S.root,i),style:(0,r.A)({width:p,height:p},z,h),ownerState:A,ref:t,role:"progressbar"},M,y,{children:(0,v.jsx)(R,{className:S.svg,ownerState:A,viewBox:"22 22 44 44",children:(0,v.jsx)(w,{className:S.circle,style:k,ownerState:A,cx:44,cy:44,r:(44-f)/2,fill:"none",strokeWidth:f})})}))}))},7951:(e,t,o)=>{o.d(t,{A:()=>s});var n=o(988),r=o(8466),i=o(1848),a=o(3541);const s=(0,n.A)({createStyledComponent:(0,i.Ay)("div",{name:"MuiContainer",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,t[`maxWidth${(0,r.A)(String(o.maxWidth))}`],o.fixed&&t.fixed,o.disableGutters&&t.disableGutters]}}),useThemeProps:e=>(0,a.A)({props:e,name:"MuiContainer"})})},4519:(e,t,o)=>{o.d(t,{Ay:()=>d});var n=o(8168),r=o(6540),i=o(3541),a=o(5327),s=o(4848);const l=(e,t)=>(0,n.A)({WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale",boxSizing:"border-box",WebkitTextSizeAdjust:"100%"},t&&!e.vars&&{colorScheme:e.palette.mode}),c=e=>(0,n.A)({color:(e.vars||e).palette.text.primary},e.typography.body1,{backgroundColor:(e.vars||e).palette.background.default,"@media print":{backgroundColor:(e.vars||e).palette.common.white}}),d=function(e){const t=(0,i.A)({props:e,name:"MuiCssBaseline"}),{children:o,enableColorScheme:d=!1}=t;return(0,s.jsxs)(r.Fragment,{children:[(0,s.jsx)(a.A,{styles:e=>((e,t=!1)=>{var o;const r={};t&&e.colorSchemes&&Object.entries(e.colorSchemes).forEach((([t,o])=>{var n;r[e.getColorSchemeSelector(t).replace(/\s*&/,"")]={colorScheme:null==(n=o.palette)?void 0:n.mode}}));let i=(0,n.A)({html:l(e,t),"*, *::before, *::after":{boxSizing:"inherit"},"strong, b":{fontWeight:e.typography.fontWeightBold},body:(0,n.A)({margin:0},c(e),{"&::backdrop":{backgroundColor:(e.vars||e).palette.background.default}})},r);const a=null==(o=e.components)||null==(o=o.MuiCssBaseline)?void 0:o.styleOverrides;return a&&(i=[i,a]),i})(e,d)}),o]})}},1347:(e,t,o)=>{o.d(t,{A:()=>n});const n=(0,o(8413).A)("MuiDivider",["root","absolute","fullWidth","inset","middle","flexItem","light","vertical","withChildren","withChildrenVertical","textAlignRight","textAlignLeft","wrapper","wrapperVertical"])},973:(e,t,o)=>{o.d(t,{A:()=>h});var n=o(8168),r=o(8587),i=o(6540),a=o(7353),s=o(4675),l=o(5186),c=o(6852),d=o(4848);const u=["addEndListener","appear","children","easing","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","timeout","TransitionComponent"],p={entering:{opacity:1},entered:{opacity:1}},h=i.forwardRef((function(e,t){const o=(0,s.A)(),h={enter:o.transitions.duration.enteringScreen,exit:o.transitions.duration.leavingScreen},{addEndListener:m,appear:v=!0,children:b,easing:f,in:g,onEnter:x,onEntered:y,onEntering:A,onExit:S,onExited:k,onExiting:C,style:R,timeout:w=h,TransitionComponent:z=a.Ay}=e,M=(0,r.A)(e,u),$=i.useRef(null),E=(0,c.A)($,b.ref,t),T=e=>t=>{if(e){const o=$.current;void 0===t?e(o):e(o,t)}},I=T(A),B=T(((e,t)=>{(0,l.q)(e);const n=(0,l.c)({style:R,timeout:w,easing:f},{mode:"enter"});e.style.webkitTransition=o.transitions.create("opacity",n),e.style.transition=o.transitions.create("opacity",n),x&&x(e,t)})),P=T(y),N=T(C),L=T((e=>{const t=(0,l.c)({style:R,timeout:w,easing:f},{mode:"exit"});e.style.webkitTransition=o.transitions.create("opacity",t),e.style.transition=o.transitions.create("opacity",t),S&&S(e)})),V=T(k);return(0,d.jsx)(z,(0,n.A)({appear:v,in:g,nodeRef:$,onEnter:B,onEntered:P,onEntering:I,onExit:L,onExited:V,onExiting:N,addEndListener:e=>{m&&m($.current,e)},timeout:w},M,{children:(e,t)=>i.cloneElement(b,(0,n.A)({style:(0,n.A)({opacity:0,visibility:"exited"!==e||g?void 0:"hidden"},p[e],R,b.props.style),ref:E},t))}))}))}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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TSxRQUFTOE0sRUFDbEMsRUFhQXhPLFFBQVNBLEdBQ1JwQyxFQUFPLENBQ1JSLFNBQVUsQ0FBQ3FSLEVBQU9DLElBQ0ksZUFBbUJ0UixHQUFVLE9BQVMsQ0FDeEQ0RCxPQUFPLE9BQVMsQ0FDZDRMLFFBQVMsRUFDVCtCLFdBQXNCLFdBQVZGLEdBQXVCM08sT0FBb0IzSCxFQUFYLFVBQzNDYyxFQUFPd1YsR0FBUXpOLEVBQU81RCxFQUFTcEUsTUFBTWdJLE9BQ3hDbEUsSUFBSzZMLEdBQ0orRixNQUdULEciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Cb3gvYm94Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Cb3gvQm94LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbi9idXR0b25DbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkdyb3VwL0J1dHRvbkdyb3VwQ29udGV4dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CdXR0b25Hcm91cC9CdXR0b25Hcm91cEJ1dHRvbkNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uL0J1dHRvbi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CdXR0b25CYXNlL3RvdWNoUmlwcGxlQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CdXR0b25CYXNlL1RvdWNoUmlwcGxlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvUmlwcGxlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvYnV0dG9uQmFzZUNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9CdXR0b25CYXNlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0NpcmN1bGFyUHJvZ3Jlc3MvY2lyY3VsYXJQcm9ncmVzc0NsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQ2lyY3VsYXJQcm9ncmVzcy9DaXJjdWxhclByb2dyZXNzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0NvbnRhaW5lci9Db250YWluZXIuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQ3NzQmFzZWxpbmUvQ3NzQmFzZWxpbmUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRGl2aWRlci9kaXZpZGVyQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9GYWRlL0ZhZGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmNvbnN0IGJveENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlCb3gnLCBbJ3Jvb3QnXSk7XG5leHBvcnQgZGVmYXVsdCBib3hDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgY3JlYXRlQm94IH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHVuc3RhYmxlX0NsYXNzTmFtZUdlbmVyYXRvciBhcyBDbGFzc05hbWVHZW5lcmF0b3IgfSBmcm9tICcuLi9jbGFzc05hbWUnO1xuaW1wb3J0IHsgY3JlYXRlVGhlbWUgfSBmcm9tICcuLi9zdHlsZXMnO1xuaW1wb3J0IFRIRU1FX0lEIGZyb20gJy4uL3N0eWxlcy9pZGVudGlmaWVyJztcbmltcG9ydCBib3hDbGFzc2VzIGZyb20gJy4vYm94Q2xhc3Nlcyc7XG5jb25zdCBkZWZhdWx0VGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuY29uc3QgQm94ID0gY3JlYXRlQm94KHtcbiAgdGhlbWVJZDogVEhFTUVfSUQsXG4gIGRlZmF1bHRUaGVtZSxcbiAgZGVmYXVsdENsYXNzTmFtZTogYm94Q2xhc3Nlcy5yb290LFxuICBnZW5lcmF0ZUNsYXNzTmFtZTogQ2xhc3NOYW1lR2VuZXJhdG9yLmdlbmVyYXRlXG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEJveC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEJveDsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvblV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpQnV0dG9uJywgc2xvdCk7XG59XG5jb25zdCBidXR0b25DbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQnV0dG9uJywgWydyb290JywgJ3RleHQnLCAndGV4dEluaGVyaXQnLCAndGV4dFByaW1hcnknLCAndGV4dFNlY29uZGFyeScsICd0ZXh0U3VjY2VzcycsICd0ZXh0RXJyb3InLCAndGV4dEluZm8nLCAndGV4dFdhcm5pbmcnLCAnb3V0bGluZWQnLCAnb3V0bGluZWRJbmhlcml0JywgJ291dGxpbmVkUHJpbWFyeScsICdvdXRsaW5lZFNlY29uZGFyeScsICdvdXRsaW5lZFN1Y2Nlc3MnLCAnb3V0bGluZWRFcnJvcicsICdvdXRsaW5lZEluZm8nLCAnb3V0bGluZWRXYXJuaW5nJywgJ2NvbnRhaW5lZCcsICdjb250YWluZWRJbmhlcml0JywgJ2NvbnRhaW5lZFByaW1hcnknLCAnY29udGFpbmVkU2Vjb25kYXJ5JywgJ2NvbnRhaW5lZFN1Y2Nlc3MnLCAnY29udGFpbmVkRXJyb3InLCAnY29udGFpbmVkSW5mbycsICdjb250YWluZWRXYXJuaW5nJywgJ2Rpc2FibGVFbGV2YXRpb24nLCAnZm9jdXNWaXNpYmxlJywgJ2Rpc2FibGVkJywgJ2NvbG9ySW5oZXJpdCcsICd0ZXh0U2l6ZVNtYWxsJywgJ3RleHRTaXplTWVkaXVtJywgJ3RleHRTaXplTGFyZ2UnLCAnb3V0bGluZWRTaXplU21hbGwnLCAnb3V0bGluZWRTaXplTWVkaXVtJywgJ291dGxpbmVkU2l6ZUxhcmdlJywgJ2NvbnRhaW5lZFNpemVTbWFsbCcsICdjb250YWluZWRTaXplTWVkaXVtJywgJ2NvbnRhaW5lZFNpemVMYXJnZScsICdzaXplTWVkaXVtJywgJ3NpemVTbWFsbCcsICdzaXplTGFyZ2UnLCAnZnVsbFdpZHRoJywgJ3N0YXJ0SWNvbicsICdlbmRJY29uJywgJ2ljb25TaXplU21hbGwnLCAnaWNvblNpemVNZWRpdW0nLCAnaWNvblNpemVMYXJnZSddKTtcbmV4cG9ydCBkZWZhdWx0IGJ1dHRvbkNsYXNzZXM7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBCdXR0b25Hcm91cENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh7fSk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBCdXR0b25Hcm91cENvbnRleHQuZGlzcGxheU5hbWUgPSAnQnV0dG9uR3JvdXBDb250ZXh0Jztcbn1cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkdyb3VwQ29udGV4dDsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IEJ1dHRvbkdyb3VwQnV0dG9uQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBCdXR0b25Hcm91cEJ1dHRvbkNvbnRleHQuZGlzcGxheU5hbWUgPSAnQnV0dG9uR3JvdXBCdXR0b25Db250ZXh0Jztcbn1cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkdyb3VwQnV0dG9uQ29udGV4dDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlRWxldmF0aW9uXCIsIFwiZGlzYWJsZUZvY3VzUmlwcGxlXCIsIFwiZW5kSWNvblwiLCBcImZvY3VzVmlzaWJsZUNsYXNzTmFtZVwiLCBcImZ1bGxXaWR0aFwiLCBcInNpemVcIiwgXCJzdGFydEljb25cIiwgXCJ0eXBlXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGludGVybmFsX3Jlc29sdmVQcm9wcyBhcyByZXNvbHZlUHJvcHMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBCdXR0b25CYXNlIGZyb20gJy4uL0J1dHRvbkJhc2UnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgYnV0dG9uQ2xhc3NlcywgeyBnZXRCdXR0b25VdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2J1dHRvbkNsYXNzZXMnO1xuaW1wb3J0IEJ1dHRvbkdyb3VwQ29udGV4dCBmcm9tICcuLi9CdXR0b25Hcm91cC9CdXR0b25Hcm91cENvbnRleHQnO1xuaW1wb3J0IEJ1dHRvbkdyb3VwQnV0dG9uQ29udGV4dCBmcm9tICcuLi9CdXR0b25Hcm91cC9CdXR0b25Hcm91cEJ1dHRvbkNvbnRleHQnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb2xvcixcbiAgICBkaXNhYmxlRWxldmF0aW9uLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBzaXplLFxuICAgIHZhcmlhbnQsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgdmFyaWFudCwgYCR7dmFyaWFudH0ke2NhcGl0YWxpemUoY29sb3IpfWAsIGBzaXplJHtjYXBpdGFsaXplKHNpemUpfWAsIGAke3ZhcmlhbnR9U2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gLCBjb2xvciA9PT0gJ2luaGVyaXQnICYmICdjb2xvckluaGVyaXQnLCBkaXNhYmxlRWxldmF0aW9uICYmICdkaXNhYmxlRWxldmF0aW9uJywgZnVsbFdpZHRoICYmICdmdWxsV2lkdGgnXSxcbiAgICBsYWJlbDogWydsYWJlbCddLFxuICAgIHN0YXJ0SWNvbjogWydzdGFydEljb24nLCBgaWNvblNpemUke2NhcGl0YWxpemUoc2l6ZSl9YF0sXG4gICAgZW5kSWNvbjogWydlbmRJY29uJywgYGljb25TaXplJHtjYXBpdGFsaXplKHNpemUpfWBdXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRCdXR0b25VdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VkQ2xhc3Nlcyk7XG59O1xuY29uc3QgY29tbW9uSWNvblN0eWxlcyA9IG93bmVyU3RhdGUgPT4gX2V4dGVuZHMoe30sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICcmID4gKjpudGgtb2YtdHlwZSgxKSc6IHtcbiAgICBmb250U2l6ZTogMThcbiAgfVxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnbWVkaXVtJyAmJiB7XG4gICcmID4gKjpudGgtb2YtdHlwZSgxKSc6IHtcbiAgICBmb250U2l6ZTogMjBcbiAgfVxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnbGFyZ2UnICYmIHtcbiAgJyYgPiAqOm50aC1vZi10eXBlKDEpJzoge1xuICAgIGZvbnRTaXplOiAyMlxuICB9XG59KTtcbmNvbnN0IEJ1dHRvblJvb3QgPSBzdHlsZWQoQnV0dG9uQmFzZSwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpQnV0dG9uJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdLCBzdHlsZXNbYCR7b3duZXJTdGF0ZS52YXJpYW50fSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmNvbG9yKX1gXSwgc3R5bGVzW2BzaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2l6ZSl9YF0sIHN0eWxlc1tgJHtvd25lclN0YXRlLnZhcmlhbnR9U2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNpemUpfWBdLCBvd25lclN0YXRlLmNvbG9yID09PSAnaW5oZXJpdCcgJiYgc3R5bGVzLmNvbG9ySW5oZXJpdCwgb3duZXJTdGF0ZS5kaXNhYmxlRWxldmF0aW9uICYmIHN0eWxlcy5kaXNhYmxlRWxldmF0aW9uLCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiBzdHlsZXMuZnVsbFdpZHRoXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgdmFyIF90aGVtZSRwYWxldHRlJGdldENvbiwgX3RoZW1lJHBhbGV0dGU7XG4gIGNvbnN0IGluaGVyaXRDb250YWluZWRCYWNrZ3JvdW5kQ29sb3IgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyB0aGVtZS5wYWxldHRlLmdyZXlbMzAwXSA6IHRoZW1lLnBhbGV0dGUuZ3JleVs4MDBdO1xuICBjb25zdCBpbmhlcml0Q29udGFpbmVkSG92ZXJCYWNrZ3JvdW5kQ29sb3IgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyB0aGVtZS5wYWxldHRlLmdyZXkuQTEwMCA6IHRoZW1lLnBhbGV0dGUuZ3JleVs3MDBdO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIHRoZW1lLnR5cG9ncmFwaHkuYnV0dG9uLCB7XG4gICAgbWluV2lkdGg6IDY0LFxuICAgIHBhZGRpbmc6ICc2cHggMTZweCcsXG4gICAgYm9yZGVyUmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZShbJ2JhY2tncm91bmQtY29sb3InLCAnYm94LXNoYWRvdycsICdib3JkZXItY29sb3InLCAnY29sb3InXSwge1xuICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0XG4gICAgfSksXG4gICAgJyY6aG92ZXInOiBfZXh0ZW5kcyh7XG4gICAgICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUudGV4dC5wcmltYXJ5Q2hhbm5lbH0gLyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5fSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZS50ZXh0LnByaW1hcnksIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eSksXG4gICAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICAgIH1cbiAgICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICd0ZXh0JyAmJiBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbkNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eX0pYCA6IGFscGhhKHRoZW1lLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5KSxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgICAgfVxuICAgIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICAgICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbn1gLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbkNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eX0pYCA6IGFscGhhKHRoZW1lLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5KSxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgICAgfVxuICAgIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gdGhlbWUudmFycy5wYWxldHRlLkJ1dHRvbi5pbmhlcml0Q29udGFpbmVkSG92ZXJCZyA6IGluaGVyaXRDb250YWluZWRIb3ZlckJhY2tncm91bmRDb2xvcixcbiAgICAgIGJveFNoYWRvdzogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYWRvd3NbNF0sXG4gICAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzWzJdLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmdyZXlbMzAwXVxuICAgICAgfVxuICAgIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0uZGFyayxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpblxuICAgICAgfVxuICAgIH0pLFxuICAgICcmOmFjdGl2ZSc6IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIHtcbiAgICAgIGJveFNoYWRvdzogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYWRvd3NbOF1cbiAgICB9KSxcbiAgICBbYCYuJHtidXR0b25DbGFzc2VzLmZvY3VzVmlzaWJsZX1gXTogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgICAgYm94U2hhZG93OiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhZG93c1s2XVxuICAgIH0pLFxuICAgIFtgJi4ke2J1dHRvbkNsYXNzZXMuZGlzYWJsZWR9YF06IF9leHRlbmRzKHtcbiAgICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRcbiAgICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICAgICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkQmFja2dyb3VuZH1gXG4gICAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnY29udGFpbmVkJyAmJiB7XG4gICAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkLFxuICAgICAgYm94U2hhZG93OiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhZG93c1swXSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkQmFja2dyb3VuZFxuICAgIH0pXG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ3RleHQnICYmIHtcbiAgICBwYWRkaW5nOiAnNnB4IDhweCdcbiAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAndGV4dCcgJiYgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpblxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICAgIHBhZGRpbmc6ICc1cHggMTVweCcsXG4gICAgYm9yZGVyOiAnMXB4IHNvbGlkIGN1cnJlbnRDb2xvcidcbiAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sXG4gICAgYm9yZGVyOiB0aGVtZS52YXJzID8gYDFweCBzb2xpZCByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5DaGFubmVsfSAvIDAuNSlgIDogYDFweCBzb2xpZCAke2FscGhhKHRoZW1lLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbiwgMC41KX1gXG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgIGNvbG9yOiB0aGVtZS52YXJzID9cbiAgICAvLyB0aGlzIGlzIHNhZmUgYmVjYXVzZSBncmV5IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIGRlZmF1bHQgbGlnaHQvZGFyayBtb2RlXG4gICAgdGhlbWUudmFycy5wYWxldHRlLnRleHQucHJpbWFyeSA6IChfdGhlbWUkcGFsZXR0ZSRnZXRDb24gPSAoX3RoZW1lJHBhbGV0dGUgPSB0aGVtZS5wYWxldHRlKS5nZXRDb250cmFzdFRleHQpID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkcGFsZXR0ZSRnZXRDb24uY2FsbChfdGhlbWUkcGFsZXR0ZSwgdGhlbWUucGFsZXR0ZS5ncmV5WzMwMF0pLFxuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5CdXR0b24uaW5oZXJpdENvbnRhaW5lZEJnIDogaW5oZXJpdENvbnRhaW5lZEJhY2tncm91bmRDb2xvcixcbiAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzWzJdXG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0uY29udHJhc3RUZXh0LFxuICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpblxuICB9LCBvd25lclN0YXRlLmNvbG9yID09PSAnaW5oZXJpdCcgJiYge1xuICAgIGNvbG9yOiAnaW5oZXJpdCcsXG4gICAgYm9yZGVyQ29sb3I6ICdjdXJyZW50Q29sb3InXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICd0ZXh0JyAmJiB7XG4gICAgcGFkZGluZzogJzRweCA1cHgnLFxuICAgIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMTMpXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ2xhcmdlJyAmJiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICd0ZXh0JyAmJiB7XG4gICAgcGFkZGluZzogJzhweCAxMXB4JyxcbiAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDE1KVxuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgICBwYWRkaW5nOiAnM3B4IDlweCcsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxMylcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnbGFyZ2UnICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gICAgcGFkZGluZzogJzdweCAyMXB4JyxcbiAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDE1KVxuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnY29udGFpbmVkJyAmJiB7XG4gICAgcGFkZGluZzogJzRweCAxMHB4JyxcbiAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDEzKVxuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdsYXJnZScgJiYgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnY29udGFpbmVkJyAmJiB7XG4gICAgcGFkZGluZzogJzhweCAyMnB4JyxcbiAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDE1KVxuICB9LCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiB7XG4gICAgd2lkdGg6ICcxMDAlJ1xuICB9KTtcbn0sICh7XG4gIG93bmVyU3RhdGVcbn0pID0+IG93bmVyU3RhdGUuZGlzYWJsZUVsZXZhdGlvbiAmJiB7XG4gIGJveFNoYWRvdzogJ25vbmUnLFxuICAnJjpob3Zlcic6IHtcbiAgICBib3hTaGFkb3c6ICdub25lJ1xuICB9LFxuICBbYCYuJHtidXR0b25DbGFzc2VzLmZvY3VzVmlzaWJsZX1gXToge1xuICAgIGJveFNoYWRvdzogJ25vbmUnXG4gIH0sXG4gICcmOmFjdGl2ZSc6IHtcbiAgICBib3hTaGFkb3c6ICdub25lJ1xuICB9LFxuICBbYCYuJHtidXR0b25DbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgYm94U2hhZG93OiAnbm9uZSdcbiAgfVxufSk7XG5jb25zdCBCdXR0b25TdGFydEljb24gPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlCdXR0b24nLFxuICBzbG90OiAnU3RhcnRJY29uJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5zdGFydEljb24sIHN0eWxlc1tgaWNvblNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5zaXplKX1gXV07XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2luaGVyaXQnLFxuICBtYXJnaW5SaWdodDogOCxcbiAgbWFyZ2luTGVmdDogLTRcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIG1hcmdpbkxlZnQ6IC0yXG59LCBjb21tb25JY29uU3R5bGVzKG93bmVyU3RhdGUpKSk7XG5jb25zdCBCdXR0b25FbmRJY29uID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpQnV0dG9uJyxcbiAgc2xvdDogJ0VuZEljb24nLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLmVuZEljb24sIHN0eWxlc1tgaWNvblNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5zaXplKX1gXV07XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2luaGVyaXQnLFxuICBtYXJnaW5SaWdodDogLTQsXG4gIG1hcmdpbkxlZnQ6IDhcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIG1hcmdpblJpZ2h0OiAtMlxufSwgY29tbW9uSWNvblN0eWxlcyhvd25lclN0YXRlKSkpO1xuY29uc3QgQnV0dG9uID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQnV0dG9uKGluUHJvcHMsIHJlZikge1xuICAvLyBwcm9wcyBwcmlvcml0eTogYGluUHJvcHNgID4gYGNvbnRleHRQcm9wc2AgPiBgdGhlbWVEZWZhdWx0UHJvcHNgXG4gIGNvbnN0IGNvbnRleHRQcm9wcyA9IFJlYWN0LnVzZUNvbnRleHQoQnV0dG9uR3JvdXBDb250ZXh0KTtcbiAgY29uc3QgYnV0dG9uR3JvdXBCdXR0b25Db250ZXh0UG9zaXRpb25DbGFzc05hbWUgPSBSZWFjdC51c2VDb250ZXh0KEJ1dHRvbkdyb3VwQnV0dG9uQ29udGV4dCk7XG4gIGNvbnN0IHJlc29sdmVkUHJvcHMgPSByZXNvbHZlUHJvcHMoY29udGV4dFByb3BzLCBpblByb3BzKTtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogcmVzb2x2ZWRQcm9wcyxcbiAgICBuYW1lOiAnTXVpQnV0dG9uJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjb2xvciA9ICdwcmltYXJ5JyxcbiAgICAgIGNvbXBvbmVudCA9ICdidXR0b24nLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVFbGV2YXRpb24gPSBmYWxzZSxcbiAgICAgIGRpc2FibGVGb2N1c1JpcHBsZSA9IGZhbHNlLFxuICAgICAgZW5kSWNvbjogZW5kSWNvblByb3AsXG4gICAgICBmb2N1c1Zpc2libGVDbGFzc05hbWUsXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIHNpemUgPSAnbWVkaXVtJyxcbiAgICAgIHN0YXJ0SWNvbjogc3RhcnRJY29uUHJvcCxcbiAgICAgIHR5cGUsXG4gICAgICB2YXJpYW50ID0gJ3RleHQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBjb21wb25lbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgZGlzYWJsZUVsZXZhdGlvbixcbiAgICBkaXNhYmxlRm9jdXNSaXBwbGUsXG4gICAgZnVsbFdpZHRoLFxuICAgIHNpemUsXG4gICAgdHlwZSxcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IHN0YXJ0SWNvbiA9IHN0YXJ0SWNvblByb3AgJiYgLyojX19QVVJFX18qL19qc3goQnV0dG9uU3RhcnRJY29uLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLnN0YXJ0SWNvbixcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNoaWxkcmVuOiBzdGFydEljb25Qcm9wXG4gIH0pO1xuICBjb25zdCBlbmRJY29uID0gZW5kSWNvblByb3AgJiYgLyojX19QVVJFX18qL19qc3goQnV0dG9uRW5kSWNvbiwge1xuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5lbmRJY29uLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2hpbGRyZW46IGVuZEljb25Qcm9wXG4gIH0pO1xuICBjb25zdCBwb3NpdGlvbkNsYXNzTmFtZSA9IGJ1dHRvbkdyb3VwQnV0dG9uQ29udGV4dFBvc2l0aW9uQ2xhc3NOYW1lIHx8ICcnO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKEJ1dHRvblJvb3QsIF9leHRlbmRzKHtcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjb250ZXh0UHJvcHMuY2xhc3NOYW1lLCBjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSwgcG9zaXRpb25DbGFzc05hbWUpLFxuICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBmb2N1c1JpcHBsZTogIWRpc2FibGVGb2N1c1JpcHBsZSxcbiAgICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5mb2N1c1Zpc2libGUsIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSksXG4gICAgcmVmOiByZWYsXG4gICAgdHlwZTogdHlwZVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXMsXG4gICAgY2hpbGRyZW46IFtzdGFydEljb24sIGNoaWxkcmVuLCBlbmRJY29uXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEJ1dHRvbi5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdzdWNjZXNzJywgJ2Vycm9yJywgJ2luZm8nLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIG5vIGVsZXZhdGlvbiBpcyB1c2VkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUVsZXZhdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSAga2V5Ym9hcmQgZm9jdXMgcmlwcGxlIGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUZvY3VzUmlwcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJpcHBsZSBlZmZlY3QgaXMgZGlzYWJsZWQuXG4gICAqXG4gICAqIOKaoO+4jyBXaXRob3V0IGEgcmlwcGxlIHRoZXJlIGlzIG5vIHN0eWxpbmcgZm9yIDpmb2N1cy12aXNpYmxlIGJ5IGRlZmF1bHQuIEJlIHN1cmVcbiAgICogdG8gaGlnaGxpZ2h0IHRoZSBlbGVtZW50IGJ5IGFwcGx5aW5nIHNlcGFyYXRlIHN0eWxlcyB3aXRoIHRoZSBgLk11aS1mb2N1c1Zpc2libGVgIGNsYXNzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBFbGVtZW50IHBsYWNlZCBhZnRlciB0aGUgY2hpbGRyZW4uXG4gICAqL1xuICBlbmRJY29uOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGZvY3VzVmlzaWJsZUNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGJ1dHRvbiB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgVVJMIHRvIGxpbmsgdG8gd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQuXG4gICAqIElmIGRlZmluZWQsIGFuIGBhYCBlbGVtZW50IHdpbGwgYmUgdXNlZCBhcyB0aGUgcm9vdCBub2RlLlxuICAgKi9cbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIGBzbWFsbGAgaXMgZXF1aXZhbGVudCB0byB0aGUgZGVuc2UgYnV0dG9uIHN0eWxpbmcuXG4gICAqIEBkZWZhdWx0ICdtZWRpdW0nXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3NtYWxsJywgJ21lZGl1bScsICdsYXJnZSddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogRWxlbWVudCBwbGFjZWQgYmVmb3JlIHRoZSBjaGlsZHJlbi5cbiAgICovXG4gIHN0YXJ0SWNvbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydidXR0b24nLCAncmVzZXQnLCAnc3VibWl0J10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICd0ZXh0J1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydjb250YWluZWQnLCAnb3V0bGluZWQnLCAndGV4dCddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQnV0dG9uOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VG91Y2hSaXBwbGVVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVRvdWNoUmlwcGxlJywgc2xvdCk7XG59XG5jb25zdCB0b3VjaFJpcHBsZUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlUb3VjaFJpcHBsZScsIFsncm9vdCcsICdyaXBwbGUnLCAncmlwcGxlVmlzaWJsZScsICdyaXBwbGVQdWxzYXRlJywgJ2NoaWxkJywgJ2NoaWxkTGVhdmluZycsICdjaGlsZFB1bHNhdGUnXSk7XG5leHBvcnQgZGVmYXVsdCB0b3VjaFJpcHBsZUNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2VudGVyXCIsIFwiY2xhc3Nlc1wiLCBcImNsYXNzTmFtZVwiXTtcbmxldCBfID0gdCA9PiB0LFxuICBfdCxcbiAgX3QyLFxuICBfdDMsXG4gIF90NDtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBUcmFuc2l0aW9uR3JvdXAgfSBmcm9tICdyZWFjdC10cmFuc2l0aW9uLWdyb3VwJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsga2V5ZnJhbWVzIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBSaXBwbGUgZnJvbSAnLi9SaXBwbGUnO1xuaW1wb3J0IHRvdWNoUmlwcGxlQ2xhc3NlcyBmcm9tICcuL3RvdWNoUmlwcGxlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgRFVSQVRJT04gPSA1NTA7XG5leHBvcnQgY29uc3QgREVMQVlfUklQUExFID0gODA7XG5jb25zdCBlbnRlcktleWZyYW1lID0ga2V5ZnJhbWVzKF90IHx8IChfdCA9IF9gXG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDApO1xuICAgIG9wYWNpdHk6IDAuMTtcbiAgfVxuXG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgb3BhY2l0eTogMC4zO1xuICB9XG5gKSk7XG5jb25zdCBleGl0S2V5ZnJhbWUgPSBrZXlmcmFtZXMoX3QyIHx8IChfdDIgPSBfYFxuICAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbmApKTtcbmNvbnN0IHB1bHNhdGVLZXlmcmFtZSA9IGtleWZyYW1lcyhfdDMgfHwgKF90MyA9IF9gXG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG5cbiAgNTAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTIpO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxuYCkpO1xuZXhwb3J0IGNvbnN0IFRvdWNoUmlwcGxlUm9vdCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aVRvdWNoUmlwcGxlJyxcbiAgc2xvdDogJ1Jvb3QnXG59KSh7XG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgekluZGV4OiAwLFxuICB0b3A6IDAsXG4gIHJpZ2h0OiAwLFxuICBib3R0b206IDAsXG4gIGxlZnQ6IDAsXG4gIGJvcmRlclJhZGl1czogJ2luaGVyaXQnXG59KTtcblxuLy8gVGhpcyBgc3R5bGVkKClgIGZ1bmN0aW9uIGludm9rZXMga2V5ZnJhbWVzLiBgc3R5bGVkLWNvbXBvbmVudHNgIG9ubHkgc3VwcG9ydHMga2V5ZnJhbWVzXG4vLyBpbiBzdHJpbmcgdGVtcGxhdGVzLiBEbyBub3QgY29udmVydCB0aGVzZSBzdHlsZXMgaW4gSlMgb2JqZWN0IGFzIGl0IHdpbGwgYnJlYWsuXG5leHBvcnQgY29uc3QgVG91Y2hSaXBwbGVSaXBwbGUgPSBzdHlsZWQoUmlwcGxlLCB7XG4gIG5hbWU6ICdNdWlUb3VjaFJpcHBsZScsXG4gIHNsb3Q6ICdSaXBwbGUnXG59KShfdDQgfHwgKF90NCA9IF9gXG4gIG9wYWNpdHk6IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcblxuICAmLiR7MH0ge1xuICAgIG9wYWNpdHk6IDAuMztcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIGFuaW1hdGlvbi1uYW1lOiAkezB9O1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogJHswfW1zO1xuICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICR7MH07XG4gIH1cblxuICAmLiR7MH0ge1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogJHswfW1zO1xuICB9XG5cbiAgJiAuJHswfSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgfVxuXG4gICYgLiR7MH0ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgYW5pbWF0aW9uLW5hbWU6ICR7MH07XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAkezB9bXM7XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogJHswfTtcbiAgfVxuXG4gICYgLiR7MH0ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAvKiBAbm9mbGlwICovXG4gICAgbGVmdDogMHB4O1xuICAgIHRvcDogMDtcbiAgICBhbmltYXRpb24tbmFtZTogJHswfTtcbiAgICBhbmltYXRpb24tZHVyYXRpb246IDI1MDBtcztcbiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkezB9O1xuICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xuICAgIGFuaW1hdGlvbi1kZWxheTogMjAwbXM7XG4gIH1cbmApLCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlVmlzaWJsZSwgZW50ZXJLZXlmcmFtZSwgRFVSQVRJT04sICh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZUluT3V0LCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlUHVsc2F0ZSwgKHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXIsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZCwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkTGVhdmluZywgZXhpdEtleWZyYW1lLCBEVVJBVElPTiwgKHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlSW5PdXQsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZFB1bHNhdGUsIHB1bHNhdGVLZXlmcmFtZSwgKHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlSW5PdXQpO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKlxuICogVE9ETyB2NTogTWFrZSBwcml2YXRlXG4gKi9cbmNvbnN0IFRvdWNoUmlwcGxlID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gVG91Y2hSaXBwbGUoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVRvdWNoUmlwcGxlJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2VudGVyOiBjZW50ZXJQcm9wID0gZmFsc2UsXG4gICAgICBjbGFzc2VzID0ge30sXG4gICAgICBjbGFzc05hbWVcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgW3JpcHBsZXMsIHNldFJpcHBsZXNdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICBjb25zdCBuZXh0S2V5ID0gUmVhY3QudXNlUmVmKDApO1xuICBjb25zdCByaXBwbGVDYWxsYmFjayA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocmlwcGxlQ2FsbGJhY2suY3VycmVudCkge1xuICAgICAgcmlwcGxlQ2FsbGJhY2suY3VycmVudCgpO1xuICAgICAgcmlwcGxlQ2FsbGJhY2suY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9LCBbcmlwcGxlc10pO1xuXG4gIC8vIFVzZWQgdG8gZmlsdGVyIG91dCBtb3VzZSBlbXVsYXRlZCBldmVudHMgb24gbW9iaWxlLlxuICBjb25zdCBpZ25vcmluZ01vdXNlRG93biA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIC8vIFdlIHVzZSBhIHRpbWVyIGluIG9yZGVyIHRvIG9ubHkgc2hvdyB0aGUgcmlwcGxlcyBmb3IgdG91Y2ggXCJjbGlja1wiIGxpa2UgZXZlbnRzLlxuICAvLyBXZSBkb24ndCB3YW50IHRvIGRpc3BsYXkgdGhlIHJpcHBsZSBmb3IgdG91Y2ggc2Nyb2xsIGV2ZW50cy5cbiAgY29uc3Qgc3RhcnRUaW1lciA9IFJlYWN0LnVzZVJlZigwKTtcblxuICAvLyBUaGlzIGlzIHRoZSBob29rIGNhbGxlZCBvbmNlIHRoZSBwcmV2aW91cyB0aW1lb3V0IGlzIHJlYWR5LlxuICBjb25zdCBzdGFydFRpbWVyQ29tbWl0ID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBjb250YWluZXIgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChzdGFydFRpbWVyLmN1cnJlbnQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHN0YXJ0VGltZXIuY3VycmVudCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW10pO1xuICBjb25zdCBzdGFydENvbW1pdCA9IFJlYWN0LnVzZUNhbGxiYWNrKHBhcmFtcyA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcHVsc2F0ZSxcbiAgICAgIHJpcHBsZVgsXG4gICAgICByaXBwbGVZLFxuICAgICAgcmlwcGxlU2l6ZSxcbiAgICAgIGNiXG4gICAgfSA9IHBhcmFtcztcbiAgICBzZXRSaXBwbGVzKG9sZFJpcHBsZXMgPT4gWy4uLm9sZFJpcHBsZXMsIC8qI19fUFVSRV9fKi9fanN4KFRvdWNoUmlwcGxlUmlwcGxlLCB7XG4gICAgICBjbGFzc2VzOiB7XG4gICAgICAgIHJpcHBsZTogY2xzeChjbGFzc2VzLnJpcHBsZSwgdG91Y2hSaXBwbGVDbGFzc2VzLnJpcHBsZSksXG4gICAgICAgIHJpcHBsZVZpc2libGU6IGNsc3goY2xhc3Nlcy5yaXBwbGVWaXNpYmxlLCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlVmlzaWJsZSksXG4gICAgICAgIHJpcHBsZVB1bHNhdGU6IGNsc3goY2xhc3Nlcy5yaXBwbGVQdWxzYXRlLCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlUHVsc2F0ZSksXG4gICAgICAgIGNoaWxkOiBjbHN4KGNsYXNzZXMuY2hpbGQsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZCksXG4gICAgICAgIGNoaWxkTGVhdmluZzogY2xzeChjbGFzc2VzLmNoaWxkTGVhdmluZywgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkTGVhdmluZyksXG4gICAgICAgIGNoaWxkUHVsc2F0ZTogY2xzeChjbGFzc2VzLmNoaWxkUHVsc2F0ZSwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkUHVsc2F0ZSlcbiAgICAgIH0sXG4gICAgICB0aW1lb3V0OiBEVVJBVElPTixcbiAgICAgIHB1bHNhdGU6IHB1bHNhdGUsXG4gICAgICByaXBwbGVYOiByaXBwbGVYLFxuICAgICAgcmlwcGxlWTogcmlwcGxlWSxcbiAgICAgIHJpcHBsZVNpemU6IHJpcHBsZVNpemVcbiAgICB9LCBuZXh0S2V5LmN1cnJlbnQpXSk7XG4gICAgbmV4dEtleS5jdXJyZW50ICs9IDE7XG4gICAgcmlwcGxlQ2FsbGJhY2suY3VycmVudCA9IGNiO1xuICB9LCBbY2xhc3Nlc10pO1xuICBjb25zdCBzdGFydCA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCA9IHt9LCBvcHRpb25zID0ge30sIGNiID0gKCkgPT4ge30pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBwdWxzYXRlID0gZmFsc2UsXG4gICAgICBjZW50ZXIgPSBjZW50ZXJQcm9wIHx8IG9wdGlvbnMucHVsc2F0ZSxcbiAgICAgIGZha2VFbGVtZW50ID0gZmFsc2UgLy8gRm9yIHRlc3QgcHVycG9zZXNcbiAgICB9ID0gb3B0aW9ucztcbiAgICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gJ21vdXNlZG93bicgJiYgaWdub3JpbmdNb3VzZURvd24uY3VycmVudCkge1xuICAgICAgaWdub3JpbmdNb3VzZURvd24uY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gJ3RvdWNoc3RhcnQnKSB7XG4gICAgICBpZ25vcmluZ01vdXNlRG93bi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudCA9IGZha2VFbGVtZW50ID8gbnVsbCA6IGNvbnRhaW5lci5jdXJyZW50O1xuICAgIGNvbnN0IHJlY3QgPSBlbGVtZW50ID8gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogMCxcbiAgICAgIHRvcDogMFxuICAgIH07XG5cbiAgICAvLyBHZXQgdGhlIHNpemUgb2YgdGhlIHJpcHBsZVxuICAgIGxldCByaXBwbGVYO1xuICAgIGxldCByaXBwbGVZO1xuICAgIGxldCByaXBwbGVTaXplO1xuICAgIGlmIChjZW50ZXIgfHwgZXZlbnQgPT09IHVuZGVmaW5lZCB8fCBldmVudC5jbGllbnRYID09PSAwICYmIGV2ZW50LmNsaWVudFkgPT09IDAgfHwgIWV2ZW50LmNsaWVudFggJiYgIWV2ZW50LnRvdWNoZXMpIHtcbiAgICAgIHJpcHBsZVggPSBNYXRoLnJvdW5kKHJlY3Qud2lkdGggLyAyKTtcbiAgICAgIHJpcHBsZVkgPSBNYXRoLnJvdW5kKHJlY3QuaGVpZ2h0IC8gMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2xpZW50WCxcbiAgICAgICAgY2xpZW50WVxuICAgICAgfSA9IGV2ZW50LnRvdWNoZXMgJiYgZXZlbnQudG91Y2hlcy5sZW5ndGggPiAwID8gZXZlbnQudG91Y2hlc1swXSA6IGV2ZW50O1xuICAgICAgcmlwcGxlWCA9IE1hdGgucm91bmQoY2xpZW50WCAtIHJlY3QubGVmdCk7XG4gICAgICByaXBwbGVZID0gTWF0aC5yb3VuZChjbGllbnRZIC0gcmVjdC50b3ApO1xuICAgIH1cbiAgICBpZiAoY2VudGVyKSB7XG4gICAgICByaXBwbGVTaXplID0gTWF0aC5zcXJ0KCgyICogcmVjdC53aWR0aCAqKiAyICsgcmVjdC5oZWlnaHQgKiogMikgLyAzKTtcblxuICAgICAgLy8gRm9yIHNvbWUgcmVhc29uIHRoZSBhbmltYXRpb24gaXMgYnJva2VuIG9uIE1vYmlsZSBDaHJvbWUgaWYgdGhlIHNpemUgaXMgZXZlbi5cbiAgICAgIGlmIChyaXBwbGVTaXplICUgMiA9PT0gMCkge1xuICAgICAgICByaXBwbGVTaXplICs9IDE7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNpemVYID0gTWF0aC5tYXgoTWF0aC5hYnMoKGVsZW1lbnQgPyBlbGVtZW50LmNsaWVudFdpZHRoIDogMCkgLSByaXBwbGVYKSwgcmlwcGxlWCkgKiAyICsgMjtcbiAgICAgIGNvbnN0IHNpemVZID0gTWF0aC5tYXgoTWF0aC5hYnMoKGVsZW1lbnQgPyBlbGVtZW50LmNsaWVudEhlaWdodCA6IDApIC0gcmlwcGxlWSksIHJpcHBsZVkpICogMiArIDI7XG4gICAgICByaXBwbGVTaXplID0gTWF0aC5zcXJ0KHNpemVYICoqIDIgKyBzaXplWSAqKiAyKTtcbiAgICB9XG5cbiAgICAvLyBUb3VjaGUgZGV2aWNlc1xuICAgIGlmIChldmVudCAhPSBudWxsICYmIGV2ZW50LnRvdWNoZXMpIHtcbiAgICAgIC8vIGNoZWNrIHRoYXQgdGhpcyBpc24ndCBhbm90aGVyIHRvdWNoc3RhcnQgZHVlIHRvIG11bHRpdG91Y2hcbiAgICAgIC8vIG90aGVyd2lzZSB3ZSB3aWxsIG9ubHkgY2xlYXIgYSBzaW5nbGUgdGltZXIgd2hlbiB1bm1vdW50aW5nIHdoaWxlIHR3b1xuICAgICAgLy8gYXJlIHJ1bm5pbmdcbiAgICAgIGlmIChzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgLy8gUHJlcGFyZSB0aGUgcmlwcGxlIGVmZmVjdC5cbiAgICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID0gKCkgPT4ge1xuICAgICAgICAgIHN0YXJ0Q29tbWl0KHtcbiAgICAgICAgICAgIHB1bHNhdGUsXG4gICAgICAgICAgICByaXBwbGVYLFxuICAgICAgICAgICAgcmlwcGxlWSxcbiAgICAgICAgICAgIHJpcHBsZVNpemUsXG4gICAgICAgICAgICBjYlxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICAvLyBEZWxheSB0aGUgZXhlY3V0aW9uIG9mIHRoZSByaXBwbGUgZWZmZWN0LlxuICAgICAgICBzdGFydFRpbWVyLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAoc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50KSB7XG4gICAgICAgICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQoKTtcbiAgICAgICAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBERUxBWV9SSVBQTEUpOyAvLyBXZSBoYXZlIHRvIG1ha2UgYSB0cmFkZW9mZiB3aXRoIHRoaXMgdmFsdWUuXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0Q29tbWl0KHtcbiAgICAgICAgcHVsc2F0ZSxcbiAgICAgICAgcmlwcGxlWCxcbiAgICAgICAgcmlwcGxlWSxcbiAgICAgICAgcmlwcGxlU2l6ZSxcbiAgICAgICAgY2JcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2NlbnRlclByb3AsIHN0YXJ0Q29tbWl0XSk7XG4gIGNvbnN0IHB1bHNhdGUgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc3RhcnQoe30sIHtcbiAgICAgIHB1bHNhdGU6IHRydWVcbiAgICB9KTtcbiAgfSwgW3N0YXJ0XSk7XG4gIGNvbnN0IHN0b3AgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQsIGNiKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KHN0YXJ0VGltZXIuY3VycmVudCk7XG5cbiAgICAvLyBUaGUgdG91Y2ggaW50ZXJhY3Rpb24gb2NjdXJzIHRvbyBxdWlja2x5LlxuICAgIC8vIFdlIHN0aWxsIHdhbnQgdG8gc2hvdyByaXBwbGUgZWZmZWN0LlxuICAgIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSAndG91Y2hlbmQnICYmIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCkge1xuICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50KCk7XG4gICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPSBudWxsO1xuICAgICAgc3RhcnRUaW1lci5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHN0b3AoZXZlbnQsIGNiKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPSBudWxsO1xuICAgIHNldFJpcHBsZXMob2xkUmlwcGxlcyA9PiB7XG4gICAgICBpZiAob2xkUmlwcGxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBvbGRSaXBwbGVzLnNsaWNlKDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9sZFJpcHBsZXM7XG4gICAgfSk7XG4gICAgcmlwcGxlQ2FsbGJhY2suY3VycmVudCA9IGNiO1xuICB9LCBbXSk7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgIHB1bHNhdGUsXG4gICAgc3RhcnQsXG4gICAgc3RvcFxuICB9KSwgW3B1bHNhdGUsIHN0YXJ0LCBzdG9wXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUb3VjaFJpcHBsZVJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3godG91Y2hSaXBwbGVDbGFzc2VzLnJvb3QsIGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IGNvbnRhaW5lclxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChUcmFuc2l0aW9uR3JvdXAsIHtcbiAgICAgIGNvbXBvbmVudDogbnVsbCxcbiAgICAgIGV4aXQ6IHRydWUsXG4gICAgICBjaGlsZHJlbjogcmlwcGxlc1xuICAgIH0pXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVG91Y2hSaXBwbGUucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlIHN0YXJ0cyBhdCB0aGUgY2VudGVyIG9mIHRoZSBjb21wb25lbnRcbiAgICogcmF0aGVyIHRoYW4gYXQgdGhlIHBvaW50IG9mIGludGVyYWN0aW9uLlxuICAgKi9cbiAgY2VudGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICogU2VlIFtDU1MgQVBJXSgjY3NzKSBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFRvdWNoUmlwcGxlOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBSaXBwbGUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZSxcbiAgICBjbGFzc2VzLFxuICAgIHB1bHNhdGUgPSBmYWxzZSxcbiAgICByaXBwbGVYLFxuICAgIHJpcHBsZVksXG4gICAgcmlwcGxlU2l6ZSxcbiAgICBpbjogaW5Qcm9wLFxuICAgIG9uRXhpdGVkLFxuICAgIHRpbWVvdXRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBbbGVhdmluZywgc2V0TGVhdmluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHJpcHBsZUNsYXNzTmFtZSA9IGNsc3goY2xhc3NOYW1lLCBjbGFzc2VzLnJpcHBsZSwgY2xhc3Nlcy5yaXBwbGVWaXNpYmxlLCBwdWxzYXRlICYmIGNsYXNzZXMucmlwcGxlUHVsc2F0ZSk7XG4gIGNvbnN0IHJpcHBsZVN0eWxlcyA9IHtcbiAgICB3aWR0aDogcmlwcGxlU2l6ZSxcbiAgICBoZWlnaHQ6IHJpcHBsZVNpemUsXG4gICAgdG9wOiAtKHJpcHBsZVNpemUgLyAyKSArIHJpcHBsZVksXG4gICAgbGVmdDogLShyaXBwbGVTaXplIC8gMikgKyByaXBwbGVYXG4gIH07XG4gIGNvbnN0IGNoaWxkQ2xhc3NOYW1lID0gY2xzeChjbGFzc2VzLmNoaWxkLCBsZWF2aW5nICYmIGNsYXNzZXMuY2hpbGRMZWF2aW5nLCBwdWxzYXRlICYmIGNsYXNzZXMuY2hpbGRQdWxzYXRlKTtcbiAgaWYgKCFpblByb3AgJiYgIWxlYXZpbmcpIHtcbiAgICBzZXRMZWF2aW5nKHRydWUpO1xuICB9XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpblByb3AgJiYgb25FeGl0ZWQgIT0gbnVsbCkge1xuICAgICAgLy8gcmVhY3QtdHJhbnNpdGlvbi1ncm91cCNvbkV4aXRlZFxuICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dChvbkV4aXRlZCwgdGltZW91dCk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtvbkV4aXRlZCwgaW5Qcm9wLCB0aW1lb3V0XSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogcmlwcGxlQ2xhc3NOYW1lLFxuICAgIHN0eWxlOiByaXBwbGVTdHlsZXMsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNoaWxkQ2xhc3NOYW1lXG4gICAgfSlcbiAgfSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBSaXBwbGUucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBTZWUgW0NTUyBBUEldKCNjc3MpIGJlbG93IGZvciBtb3JlIGRldGFpbHMuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmUgLSBpbmplY3RlZCBmcm9tIFRyYW5zaXRpb25Hcm91cFxuICAgKi9cbiAgaW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZSAtIGluamVjdGVkIGZyb20gVHJhbnNpdGlvbkdyb3VwXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgcHVsc2F0ZXMsIHR5cGljYWxseSBpbmRpY2F0aW5nIHRoZSBrZXlib2FyZCBmb2N1cyBzdGF0ZSBvZiBhbiBlbGVtZW50LlxuICAgKi9cbiAgcHVsc2F0ZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBEaWFtZXRlciBvZiB0aGUgcmlwcGxlLlxuICAgKi9cbiAgcmlwcGxlU2l6ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIEhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHJpcHBsZSBjZW50ZXIuXG4gICAqL1xuICByaXBwbGVYOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogVmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHJpcHBsZSBjZW50ZXIuXG4gICAqL1xuICByaXBwbGVZOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogZXhpdCBkZWxheVxuICAgKi9cbiAgdGltZW91dDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgUmlwcGxlOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpQnV0dG9uQmFzZScsIHNsb3QpO1xufVxuY29uc3QgYnV0dG9uQmFzZUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlCdXR0b25CYXNlJywgWydyb290JywgJ2Rpc2FibGVkJywgJ2ZvY3VzVmlzaWJsZSddKTtcbmV4cG9ydCBkZWZhdWx0IGJ1dHRvbkJhc2VDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFjdGlvblwiLCBcImNlbnRlclJpcHBsZVwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlUmlwcGxlXCIsIFwiZGlzYWJsZVRvdWNoUmlwcGxlXCIsIFwiZm9jdXNSaXBwbGVcIiwgXCJmb2N1c1Zpc2libGVDbGFzc05hbWVcIiwgXCJMaW5rQ29tcG9uZW50XCIsIFwib25CbHVyXCIsIFwib25DbGlja1wiLCBcIm9uQ29udGV4dE1lbnVcIiwgXCJvbkRyYWdMZWF2ZVwiLCBcIm9uRm9jdXNcIiwgXCJvbkZvY3VzVmlzaWJsZVwiLCBcIm9uS2V5RG93blwiLCBcIm9uS2V5VXBcIiwgXCJvbk1vdXNlRG93blwiLCBcIm9uTW91c2VMZWF2ZVwiLCBcIm9uTW91c2VVcFwiLCBcIm9uVG91Y2hFbmRcIiwgXCJvblRvdWNoTW92ZVwiLCBcIm9uVG91Y2hTdGFydFwiLCBcInRhYkluZGV4XCIsIFwiVG91Y2hSaXBwbGVQcm9wc1wiLCBcInRvdWNoUmlwcGxlUmVmXCIsIFwidHlwZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmLCByZWZUeXBlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICcuLi91dGlscy91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCB1c2VJc0ZvY3VzVmlzaWJsZSBmcm9tICcuLi91dGlscy91c2VJc0ZvY3VzVmlzaWJsZSc7XG5pbXBvcnQgVG91Y2hSaXBwbGUgZnJvbSAnLi9Ub3VjaFJpcHBsZSc7XG5pbXBvcnQgYnV0dG9uQmFzZUNsYXNzZXMsIHsgZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vYnV0dG9uQmFzZUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBkaXNhYmxlZCxcbiAgICBmb2N1c1Zpc2libGUsXG4gICAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lLFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIGZvY3VzVmlzaWJsZSAmJiAnZm9jdXNWaXNpYmxlJ11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEJ1dHRvbkJhc2VVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuICBpZiAoZm9jdXNWaXNpYmxlICYmIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSkge1xuICAgIGNvbXBvc2VkQ2xhc3Nlcy5yb290ICs9IGAgJHtmb2N1c1Zpc2libGVDbGFzc05hbWV9YDtcbiAgfVxuICByZXR1cm4gY29tcG9zZWRDbGFzc2VzO1xufTtcbmV4cG9ydCBjb25zdCBCdXR0b25CYXNlUm9vdCA9IHN0eWxlZCgnYnV0dG9uJywge1xuICBuYW1lOiAnTXVpQnV0dG9uQmFzZScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe1xuICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gIC8vIFJlc2V0IGRlZmF1bHQgdmFsdWVcbiAgLy8gV2UgZGlzYWJsZSB0aGUgZm9jdXMgcmluZyBmb3IgbW91c2UsIHRvdWNoIGFuZCBrZXlib2FyZCB1c2Vycy5cbiAgb3V0bGluZTogMCxcbiAgYm9yZGVyOiAwLFxuICBtYXJnaW46IDAsXG4gIC8vIFJlbW92ZSB0aGUgbWFyZ2luIGluIFNhZmFyaVxuICBib3JkZXJSYWRpdXM6IDAsXG4gIHBhZGRpbmc6IDAsXG4gIC8vIFJlbW92ZSB0aGUgcGFkZGluZyBpbiBGaXJlZm94XG4gIGN1cnNvcjogJ3BvaW50ZXInLFxuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICBNb3pBcHBlYXJhbmNlOiAnbm9uZScsXG4gIC8vIFJlc2V0XG4gIFdlYmtpdEFwcGVhcmFuY2U6ICdub25lJyxcbiAgLy8gUmVzZXRcbiAgdGV4dERlY29yYXRpb246ICdub25lJyxcbiAgLy8gU28gd2UgdGFrZSBwcmVjZWRlbnQgb3ZlciB0aGUgc3R5bGUgb2YgYSBuYXRpdmUgPGEgLz4gZWxlbWVudC5cbiAgY29sb3I6ICdpbmhlcml0JyxcbiAgJyY6Oi1tb3otZm9jdXMtaW5uZXInOiB7XG4gICAgYm9yZGVyU3R5bGU6ICdub25lJyAvLyBSZW1vdmUgRmlyZWZveCBkb3R0ZWQgb3V0bGluZS5cbiAgfSxcbiAgW2AmLiR7YnV0dG9uQmFzZUNsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgLy8gRGlzYWJsZSBsaW5rIGludGVyYWN0aW9uc1xuICAgIGN1cnNvcjogJ2RlZmF1bHQnXG4gIH0sXG4gICdAbWVkaWEgcHJpbnQnOiB7XG4gICAgY29sb3JBZGp1c3Q6ICdleGFjdCdcbiAgfVxufSk7XG5cbi8qKlxuICogYEJ1dHRvbkJhc2VgIGNvbnRhaW5zIGFzIGZldyBzdHlsZXMgYXMgcG9zc2libGUuXG4gKiBJdCBhaW1zIHRvIGJlIGEgc2ltcGxlIGJ1aWxkaW5nIGJsb2NrIGZvciBjcmVhdGluZyBhIGJ1dHRvbi5cbiAqIEl0IGNvbnRhaW5zIGEgbG9hZCBvZiBzdHlsZSByZXNldCBhbmQgc29tZSBmb2N1cy9yaXBwbGUgbG9naWMuXG4gKi9cbmNvbnN0IEJ1dHRvbkJhc2UgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBCdXR0b25CYXNlKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlCdXR0b25CYXNlJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgYWN0aW9uLFxuICAgICAgY2VudGVyUmlwcGxlID0gZmFsc2UsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCA9ICdidXR0b24nLFxuICAgICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVSaXBwbGUgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVUb3VjaFJpcHBsZSA9IGZhbHNlLFxuICAgICAgZm9jdXNSaXBwbGUgPSBmYWxzZSxcbiAgICAgIExpbmtDb21wb25lbnQgPSAnYScsXG4gICAgICBvbkJsdXIsXG4gICAgICBvbkNsaWNrLFxuICAgICAgb25Db250ZXh0TWVudSxcbiAgICAgIG9uRHJhZ0xlYXZlLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIG9uRm9jdXNWaXNpYmxlLFxuICAgICAgb25LZXlEb3duLFxuICAgICAgb25LZXlVcCxcbiAgICAgIG9uTW91c2VEb3duLFxuICAgICAgb25Nb3VzZUxlYXZlLFxuICAgICAgb25Nb3VzZVVwLFxuICAgICAgb25Ub3VjaEVuZCxcbiAgICAgIG9uVG91Y2hNb3ZlLFxuICAgICAgb25Ub3VjaFN0YXJ0LFxuICAgICAgdGFiSW5kZXggPSAwLFxuICAgICAgVG91Y2hSaXBwbGVQcm9wcyxcbiAgICAgIHRvdWNoUmlwcGxlUmVmLFxuICAgICAgdHlwZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBidXR0b25SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IHJpcHBsZVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgaGFuZGxlUmlwcGxlUmVmID0gdXNlRm9ya1JlZihyaXBwbGVSZWYsIHRvdWNoUmlwcGxlUmVmKTtcbiAgY29uc3Qge1xuICAgIGlzRm9jdXNWaXNpYmxlUmVmLFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzVmlzaWJsZSxcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXJWaXNpYmxlLFxuICAgIHJlZjogZm9jdXNWaXNpYmxlUmVmXG4gIH0gPSB1c2VJc0ZvY3VzVmlzaWJsZSgpO1xuICBjb25zdCBbZm9jdXNWaXNpYmxlLCBzZXRGb2N1c1Zpc2libGVdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBpZiAoZGlzYWJsZWQgJiYgZm9jdXNWaXNpYmxlKSB7XG4gICAgc2V0Rm9jdXNWaXNpYmxlKGZhbHNlKTtcbiAgfVxuICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKGFjdGlvbiwgKCkgPT4gKHtcbiAgICBmb2N1c1Zpc2libGU6ICgpID0+IHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZSh0cnVlKTtcbiAgICAgIGJ1dHRvblJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICB9KSwgW10pO1xuICBjb25zdCBbbW91bnRlZFN0YXRlLCBzZXRNb3VudGVkU3RhdGVdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldE1vdW50ZWRTdGF0ZSh0cnVlKTtcbiAgfSwgW10pO1xuICBjb25zdCBlbmFibGVUb3VjaFJpcHBsZSA9IG1vdW50ZWRTdGF0ZSAmJiAhZGlzYWJsZVJpcHBsZSAmJiAhZGlzYWJsZWQ7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGZvY3VzVmlzaWJsZSAmJiBmb2N1c1JpcHBsZSAmJiAhZGlzYWJsZVJpcHBsZSAmJiBtb3VudGVkU3RhdGUpIHtcbiAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnB1bHNhdGUoKTtcbiAgICB9XG4gIH0sIFtkaXNhYmxlUmlwcGxlLCBmb2N1c1JpcHBsZSwgZm9jdXNWaXNpYmxlLCBtb3VudGVkU3RhdGVdKTtcbiAgZnVuY3Rpb24gdXNlUmlwcGxlSGFuZGxlcihyaXBwbGVBY3Rpb24sIGV2ZW50Q2FsbGJhY2ssIHNraXBSaXBwbGVBY3Rpb24gPSBkaXNhYmxlVG91Y2hSaXBwbGUpIHtcbiAgICByZXR1cm4gdXNlRXZlbnRDYWxsYmFjayhldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnRDYWxsYmFjaykge1xuICAgICAgICBldmVudENhbGxiYWNrKGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlnbm9yZSA9IHNraXBSaXBwbGVBY3Rpb247XG4gICAgICBpZiAoIWlnbm9yZSAmJiByaXBwbGVSZWYuY3VycmVudCkge1xuICAgICAgICByaXBwbGVSZWYuY3VycmVudFtyaXBwbGVBY3Rpb25dKGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9XG4gIGNvbnN0IGhhbmRsZU1vdXNlRG93biA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0YXJ0Jywgb25Nb3VzZURvd24pO1xuICBjb25zdCBoYW5kbGVDb250ZXh0TWVudSA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvbkNvbnRleHRNZW51KTtcbiAgY29uc3QgaGFuZGxlRHJhZ0xlYXZlID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uRHJhZ0xlYXZlKTtcbiAgY29uc3QgaGFuZGxlTW91c2VVcCA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvbk1vdXNlVXApO1xuICBjb25zdCBoYW5kbGVNb3VzZUxlYXZlID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIGV2ZW50ID0+IHtcbiAgICBpZiAoZm9jdXNWaXNpYmxlKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAob25Nb3VzZUxlYXZlKSB7XG4gICAgICBvbk1vdXNlTGVhdmUoZXZlbnQpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZVRvdWNoU3RhcnQgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdGFydCcsIG9uVG91Y2hTdGFydCk7XG4gIGNvbnN0IGhhbmRsZVRvdWNoRW5kID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uVG91Y2hFbmQpO1xuICBjb25zdCBoYW5kbGVUb3VjaE1vdmUgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25Ub3VjaE1vdmUpO1xuICBjb25zdCBoYW5kbGVCbHVyID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIGV2ZW50ID0+IHtcbiAgICBoYW5kbGVCbHVyVmlzaWJsZShldmVudCk7XG4gICAgaWYgKGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICBzZXRGb2N1c1Zpc2libGUoZmFsc2UpO1xuICAgIH1cbiAgICBpZiAob25CbHVyKSB7XG4gICAgICBvbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgfSwgZmFsc2UpO1xuICBjb25zdCBoYW5kbGVGb2N1cyA9IHVzZUV2ZW50Q2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIC8vIEZpeCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83NzY5XG4gICAgaWYgKCFidXR0b25SZWYuY3VycmVudCkge1xuICAgICAgYnV0dG9uUmVmLmN1cnJlbnQgPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgIH1cbiAgICBoYW5kbGVGb2N1c1Zpc2libGUoZXZlbnQpO1xuICAgIGlmIChpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50ID09PSB0cnVlKSB7XG4gICAgICBzZXRGb2N1c1Zpc2libGUodHJ1ZSk7XG4gICAgICBpZiAob25Gb2N1c1Zpc2libGUpIHtcbiAgICAgICAgb25Gb2N1c1Zpc2libGUoZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob25Gb2N1cykge1xuICAgICAgb25Gb2N1cyhldmVudCk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaXNOb25OYXRpdmVCdXR0b24gPSAoKSA9PiB7XG4gICAgY29uc3QgYnV0dG9uID0gYnV0dG9uUmVmLmN1cnJlbnQ7XG4gICAgcmV0dXJuIGNvbXBvbmVudCAmJiBjb21wb25lbnQgIT09ICdidXR0b24nICYmICEoYnV0dG9uLnRhZ05hbWUgPT09ICdBJyAmJiBidXR0b24uaHJlZik7XG4gIH07XG5cbiAgLyoqXG4gICAqIElFMTEgc2hpbSBmb3IgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQvcmVwZWF0XG4gICAqL1xuICBjb25zdCBrZXlkb3duUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUV2ZW50Q2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIC8vIENoZWNrIGlmIGtleSBpcyBhbHJlYWR5IGRvd24gdG8gYXZvaWQgcmVwZWF0cyBiZWluZyBjb3VudGVkIGFzIG11bHRpcGxlIGFjdGl2YXRpb25zXG4gICAgaWYgKGZvY3VzUmlwcGxlICYmICFrZXlkb3duUmVmLmN1cnJlbnQgJiYgZm9jdXNWaXNpYmxlICYmIHJpcHBsZVJlZi5jdXJyZW50ICYmIGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICBrZXlkb3duUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgcmlwcGxlUmVmLmN1cnJlbnQuc3RvcChldmVudCwgKCkgPT4ge1xuICAgICAgICByaXBwbGVSZWYuY3VycmVudC5zdGFydChldmVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiBpc05vbk5hdGl2ZUJ1dHRvbigpICYmIGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAob25LZXlEb3duKSB7XG4gICAgICBvbktleURvd24oZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIEtleWJvYXJkIGFjY2Vzc2liaWxpdHkgZm9yIG5vbiBpbnRlcmFjdGl2ZSBlbGVtZW50c1xuICAgIGlmIChldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQgJiYgaXNOb25OYXRpdmVCdXR0b24oKSAmJiBldmVudC5rZXkgPT09ICdFbnRlcicgJiYgIWRpc2FibGVkKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKG9uQ2xpY2spIHtcbiAgICAgICAgb25DbGljayhldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlS2V5VXAgPSB1c2VFdmVudENhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAvLyBjYWxsaW5nIHByZXZlbnREZWZhdWx0IGluIGtleVVwIG9uIGEgPGJ1dHRvbj4gd2lsbCBub3QgZGlzcGF0Y2ggYSBjbGljayBldmVudCBpZiBTcGFjZSBpcyBwcmVzc2VkXG4gICAgLy8gaHR0cHM6Ly9jb2Rlc2FuZGJveC5pby9wL3NhbmRib3gvYnV0dG9uLWtleXVwLXByZXZlbnRkZWZhdWx0LWRuN2YwXG4gICAgaWYgKGZvY3VzUmlwcGxlICYmIGV2ZW50LmtleSA9PT0gJyAnICYmIHJpcHBsZVJlZi5jdXJyZW50ICYmIGZvY3VzVmlzaWJsZSAmJiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAga2V5ZG93blJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICByaXBwbGVSZWYuY3VycmVudC5zdG9wKGV2ZW50LCAoKSA9PiB7XG4gICAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnB1bHNhdGUoZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChvbktleVVwKSB7XG4gICAgICBvbktleVVwKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvLyBLZXlib2FyZCBhY2Nlc3NpYmlsaXR5IGZvciBub24gaW50ZXJhY3RpdmUgZWxlbWVudHNcbiAgICBpZiAob25DbGljayAmJiBldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQgJiYgaXNOb25OYXRpdmVCdXR0b24oKSAmJiBldmVudC5rZXkgPT09ICcgJyAmJiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgb25DbGljayhldmVudCk7XG4gICAgfVxuICB9KTtcbiAgbGV0IENvbXBvbmVudFByb3AgPSBjb21wb25lbnQ7XG4gIGlmIChDb21wb25lbnRQcm9wID09PSAnYnV0dG9uJyAmJiAob3RoZXIuaHJlZiB8fCBvdGhlci50bykpIHtcbiAgICBDb21wb25lbnRQcm9wID0gTGlua0NvbXBvbmVudDtcbiAgfVxuICBjb25zdCBidXR0b25Qcm9wcyA9IHt9O1xuICBpZiAoQ29tcG9uZW50UHJvcCA9PT0gJ2J1dHRvbicpIHtcbiAgICBidXR0b25Qcm9wcy50eXBlID0gdHlwZSA9PT0gdW5kZWZpbmVkID8gJ2J1dHRvbicgOiB0eXBlO1xuICAgIGJ1dHRvblByb3BzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFvdGhlci5ocmVmICYmICFvdGhlci50bykge1xuICAgICAgYnV0dG9uUHJvcHMucm9sZSA9ICdidXR0b24nO1xuICAgIH1cbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIGJ1dHRvblByb3BzWydhcmlhLWRpc2FibGVkJ10gPSBkaXNhYmxlZDtcbiAgICB9XG4gIH1cbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihyZWYsIGZvY3VzVmlzaWJsZVJlZiwgYnV0dG9uUmVmKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGVuYWJsZVRvdWNoUmlwcGxlICYmICFyaXBwbGVSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBUaGUgYGNvbXBvbmVudGAgcHJvcCBwcm92aWRlZCB0byBCdXR0b25CYXNlIGlzIGludmFsaWQuJywgJ1BsZWFzZSBtYWtlIHN1cmUgdGhlIGNoaWxkcmVuIHByb3AgaXMgcmVuZGVyZWQgaW4gdGhpcyBjdXN0b20gY29tcG9uZW50LiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9LCBbZW5hYmxlVG91Y2hSaXBwbGVdKTtcbiAgfVxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY2VudGVyUmlwcGxlLFxuICAgIGNvbXBvbmVudCxcbiAgICBkaXNhYmxlZCxcbiAgICBkaXNhYmxlUmlwcGxlLFxuICAgIGRpc2FibGVUb3VjaFJpcHBsZSxcbiAgICBmb2N1c1JpcHBsZSxcbiAgICB0YWJJbmRleCxcbiAgICBmb2N1c1Zpc2libGVcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhCdXR0b25CYXNlUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBDb21wb25lbnRQcm9wLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXIsXG4gICAgb25DbGljazogb25DbGljayxcbiAgICBvbkNvbnRleHRNZW51OiBoYW5kbGVDb250ZXh0TWVudSxcbiAgICBvbkZvY3VzOiBoYW5kbGVGb2N1cyxcbiAgICBvbktleURvd246IGhhbmRsZUtleURvd24sXG4gICAgb25LZXlVcDogaGFuZGxlS2V5VXAsXG4gICAgb25Nb3VzZURvd246IGhhbmRsZU1vdXNlRG93bixcbiAgICBvbk1vdXNlTGVhdmU6IGhhbmRsZU1vdXNlTGVhdmUsXG4gICAgb25Nb3VzZVVwOiBoYW5kbGVNb3VzZVVwLFxuICAgIG9uRHJhZ0xlYXZlOiBoYW5kbGVEcmFnTGVhdmUsXG4gICAgb25Ub3VjaEVuZDogaGFuZGxlVG91Y2hFbmQsXG4gICAgb25Ub3VjaE1vdmU6IGhhbmRsZVRvdWNoTW92ZSxcbiAgICBvblRvdWNoU3RhcnQ6IGhhbmRsZVRvdWNoU3RhcnQsXG4gICAgcmVmOiBoYW5kbGVSZWYsXG4gICAgdGFiSW5kZXg6IGRpc2FibGVkID8gLTEgOiB0YWJJbmRleCxcbiAgICB0eXBlOiB0eXBlXG4gIH0sIGJ1dHRvblByb3BzLCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBbY2hpbGRyZW4sIGVuYWJsZVRvdWNoUmlwcGxlID9cbiAgICAvKiNfX1BVUkVfXyovXG4gICAgLyogVG91Y2hSaXBwbGUgaXMgb25seSBuZWVkZWQgY2xpZW50LXNpZGUsIHgyIGJvb3N0IG9uIHRoZSBzZXJ2ZXIuICovXG4gICAgX2pzeChUb3VjaFJpcHBsZSwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiBoYW5kbGVSaXBwbGVSZWYsXG4gICAgICBjZW50ZXI6IGNlbnRlclJpcHBsZVxuICAgIH0sIFRvdWNoUmlwcGxlUHJvcHMpKSA6IG51bGxdXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQnV0dG9uQmFzZS5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBBIHJlZiBmb3IgaW1wZXJhdGl2ZSBhY3Rpb25zLlxuICAgKiBJdCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyBgZm9jdXNWaXNpYmxlKClgIGFjdGlvbi5cbiAgICovXG4gIGFjdGlvbjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJpcHBsZXMgYXJlIGNlbnRlcmVkLlxuICAgKiBUaGV5IHdvbid0IHN0YXJ0IGF0IHRoZSBjdXJzb3IgaW50ZXJhY3Rpb24gcG9zaXRpb24uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjZW50ZXJSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlIGVmZmVjdCBpcyBkaXNhYmxlZC5cbiAgICpcbiAgICog4pqg77iPIFdpdGhvdXQgYSByaXBwbGUgdGhlcmUgaXMgbm8gc3R5bGluZyBmb3IgOmZvY3VzLXZpc2libGUgYnkgZGVmYXVsdC4gQmUgc3VyZVxuICAgKiB0byBoaWdobGlnaHQgdGhlIGVsZW1lbnQgYnkgYXBwbHlpbmcgc2VwYXJhdGUgc3R5bGVzIHdpdGggdGhlIGAuTXVpLWZvY3VzVmlzaWJsZWAgY2xhc3MuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUmlwcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRvdWNoIHJpcHBsZSBlZmZlY3QgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlVG91Y2hSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYmFzZSBidXR0b24gd2lsbCBoYXZlIGEga2V5Ym9hcmQgZm9jdXMgcmlwcGxlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZm9jdXNSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhpcyBwcm9wIGNhbiBoZWxwIGlkZW50aWZ5IHdoaWNoIGVsZW1lbnQgaGFzIGtleWJvYXJkIGZvY3VzLlxuICAgKiBUaGUgY2xhc3MgbmFtZSB3aWxsIGJlIGFwcGxpZWQgd2hlbiB0aGUgZWxlbWVudCBnYWlucyB0aGUgZm9jdXMgdGhyb3VnaCBrZXlib2FyZCBpbnRlcmFjdGlvbi5cbiAgICogSXQncyBhIHBvbHlmaWxsIGZvciB0aGUgW0NTUyA6Zm9jdXMtdmlzaWJsZSBzZWxlY3Rvcl0oaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL3NlbGVjdG9ycy00LyN0aGUtZm9jdXMtdmlzaWJsZS1wc2V1ZG8pLlxuICAgKiBUaGUgcmF0aW9uYWxlIGZvciB1c2luZyB0aGlzIGZlYXR1cmUgW2lzIGV4cGxhaW5lZCBoZXJlXShodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlL2Jsb2IvSEVBRC9leHBsYWluZXIubWQpLlxuICAgKiBBIFtwb2x5ZmlsbCBjYW4gYmUgdXNlZF0oaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvZm9jdXMtdmlzaWJsZSkgdG8gYXBwbHkgYSBgZm9jdXMtdmlzaWJsZWAgY2xhc3MgdG8gb3RoZXIgY29tcG9uZW50c1xuICAgKiBpZiBuZWVkZWQuXG4gICAqL1xuICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBocmVmOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5hbnksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgdG8gcmVuZGVyIGEgbGluayB3aGVuIHRoZSBgaHJlZmAgcHJvcCBpcyBwcm92aWRlZC5cbiAgICogQGRlZmF1bHQgJ2EnXG4gICAqL1xuICBMaW5rQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkNvbnRleHRNZW51OiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRHJhZ0xlYXZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGZvY3VzZWQgd2l0aCBhIGtleWJvYXJkLlxuICAgKiBXZSB0cmlnZ2VyIGEgYG9uRm9jdXNgIGNhbGxiYWNrIHRvby5cbiAgICovXG4gIG9uRm9jdXNWaXNpYmxlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbktleVVwOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uTW91c2VEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uTW91c2VMZWF2ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbk1vdXNlVXA6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Ub3VjaEVuZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvblRvdWNoTW92ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvblRvdWNoU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgdGFiSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBgVG91Y2hSaXBwbGVgIGVsZW1lbnQuXG4gICAqL1xuICBUb3VjaFJpcHBsZVByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQSByZWYgdGhhdCBwb2ludHMgdG8gdGhlIGBUb3VjaFJpcHBsZWAgZWxlbWVudC5cbiAgICovXG4gIHRvdWNoUmlwcGxlUmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjdXJyZW50OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgcHVsc2F0ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIHN0YXJ0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgc3RvcDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICAgIH0pXG4gIH0pXSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydidXR0b24nLCAncmVzZXQnLCAnc3VibWl0J10pLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBCdXR0b25CYXNlOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2lyY3VsYXJQcm9ncmVzc1V0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpQ2lyY3VsYXJQcm9ncmVzcycsIHNsb3QpO1xufVxuY29uc3QgY2lyY3VsYXJQcm9ncmVzc0NsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlDaXJjdWxhclByb2dyZXNzJywgWydyb290JywgJ2RldGVybWluYXRlJywgJ2luZGV0ZXJtaW5hdGUnLCAnY29sb3JQcmltYXJ5JywgJ2NvbG9yU2Vjb25kYXJ5JywgJ3N2ZycsICdjaXJjbGUnLCAnY2lyY2xlRGV0ZXJtaW5hdGUnLCAnY2lyY2xlSW5kZXRlcm1pbmF0ZScsICdjaXJjbGVEaXNhYmxlU2hyaW5rJ10pO1xuZXhwb3J0IGRlZmF1bHQgY2lyY3VsYXJQcm9ncmVzc0NsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJkaXNhYmxlU2hyaW5rXCIsIFwic2l6ZVwiLCBcInN0eWxlXCIsIFwidGhpY2tuZXNzXCIsIFwidmFsdWVcIiwgXCJ2YXJpYW50XCJdO1xubGV0IF8gPSB0ID0+IHQsXG4gIF90LFxuICBfdDIsXG4gIF90MyxcbiAgX3Q0O1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgY2hhaW5Qcm9wVHlwZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IGtleWZyYW1lcywgY3NzIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgZ2V0Q2lyY3VsYXJQcm9ncmVzc1V0aWxpdHlDbGFzcyB9IGZyb20gJy4vY2lyY3VsYXJQcm9ncmVzc0NsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IFNJWkUgPSA0NDtcbmNvbnN0IGNpcmN1bGFyUm90YXRlS2V5ZnJhbWUgPSBrZXlmcmFtZXMoX3QgfHwgKF90ID0gX2BcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgfVxuYCkpO1xuY29uc3QgY2lyY3VsYXJEYXNoS2V5ZnJhbWUgPSBrZXlmcmFtZXMoX3QyIHx8IChfdDIgPSBfYFxuICAwJSB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMXB4LCAyMDBweDtcbiAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcbiAgfVxuXG4gIDUwJSB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMTAwcHgsIDIwMHB4O1xuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMTVweDtcbiAgfVxuXG4gIDEwMCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDEwMHB4LCAyMDBweDtcbiAgICBzdHJva2UtZGFzaG9mZnNldDogLTEyNXB4O1xuICB9XG5gKSk7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICB2YXJpYW50LFxuICAgIGNvbG9yLFxuICAgIGRpc2FibGVTaHJpbmtcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIHZhcmlhbnQsIGBjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YF0sXG4gICAgc3ZnOiBbJ3N2ZyddLFxuICAgIGNpcmNsZTogWydjaXJjbGUnLCBgY2lyY2xlJHtjYXBpdGFsaXplKHZhcmlhbnQpfWAsIGRpc2FibGVTaHJpbmsgJiYgJ2NpcmNsZURpc2FibGVTaHJpbmsnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldENpcmN1bGFyUHJvZ3Jlc3NVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IENpcmN1bGFyUHJvZ3Jlc3NSb290ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpQ2lyY3VsYXJQcm9ncmVzcycsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XSwgc3R5bGVzW2Bjb2xvciR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmNvbG9yKX1gXV07XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGUsXG4gIHRoZW1lXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdkZXRlcm1pbmF0ZScgJiYge1xuICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3RyYW5zZm9ybScpXG59LCBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpblxufSksICh7XG4gIG93bmVyU3RhdGVcbn0pID0+IG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2luZGV0ZXJtaW5hdGUnICYmIGNzcyhfdDMgfHwgKF90MyA9IF9gXG4gICAgICBhbmltYXRpb246ICR7MH0gMS40cyBsaW5lYXIgaW5maW5pdGU7XG4gICAgYCksIGNpcmN1bGFyUm90YXRlS2V5ZnJhbWUpKTtcbmNvbnN0IENpcmN1bGFyUHJvZ3Jlc3NTVkcgPSBzdHlsZWQoJ3N2ZycsIHtcbiAgbmFtZTogJ011aUNpcmN1bGFyUHJvZ3Jlc3MnLFxuICBzbG90OiAnU3ZnJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMuc3ZnXG59KSh7XG4gIGRpc3BsYXk6ICdibG9jaycgLy8gS2VlcHMgdGhlIHByb2dyZXNzIGNlbnRlcmVkXG59KTtcbmNvbnN0IENpcmN1bGFyUHJvZ3Jlc3NDaXJjbGUgPSBzdHlsZWQoJ2NpcmNsZScsIHtcbiAgbmFtZTogJ011aUNpcmN1bGFyUHJvZ3Jlc3MnLFxuICBzbG90OiAnQ2lyY2xlJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5jaXJjbGUsIHN0eWxlc1tgY2lyY2xlJHtjYXBpdGFsaXplKG93bmVyU3RhdGUudmFyaWFudCl9YF0sIG93bmVyU3RhdGUuZGlzYWJsZVNocmluayAmJiBzdHlsZXMuY2lyY2xlRGlzYWJsZVNocmlua107XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGUsXG4gIHRoZW1lXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHN0cm9rZTogJ2N1cnJlbnRDb2xvcidcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2RldGVybWluYXRlJyAmJiB7XG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnc3Ryb2tlLWRhc2hvZmZzZXQnKVxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnaW5kZXRlcm1pbmF0ZScgJiYge1xuICAvLyBTb21lIGRlZmF1bHQgdmFsdWUgdGhhdCBsb29rcyBmaW5lIHdhaXRpbmcgZm9yIHRoZSBhbmltYXRpb24gdG8ga2lja3MgaW4uXG4gIHN0cm9rZURhc2hhcnJheTogJzgwcHgsIDIwMHB4JyxcbiAgc3Ryb2tlRGFzaG9mZnNldDogMCAvLyBBZGQgdGhlIHVuaXQgdG8gZml4IGEgRWRnZSAxNiBhbmQgYmVsb3cgYnVnLlxufSksICh7XG4gIG93bmVyU3RhdGVcbn0pID0+IG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2luZGV0ZXJtaW5hdGUnICYmICFvd25lclN0YXRlLmRpc2FibGVTaHJpbmsgJiYgY3NzKF90NCB8fCAoX3Q0ID0gX2BcbiAgICAgIGFuaW1hdGlvbjogJHswfSAxLjRzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICAgIGApLCBjaXJjdWxhckRhc2hLZXlmcmFtZSkpO1xuXG4vKipcbiAqICMjIEFSSUFcbiAqXG4gKiBJZiB0aGUgcHJvZ3Jlc3MgYmFyIGlzIGRlc2NyaWJpbmcgdGhlIGxvYWRpbmcgcHJvZ3Jlc3Mgb2YgYSBwYXJ0aWN1bGFyIHJlZ2lvbiBvZiBhIHBhZ2UsXG4gKiB5b3Ugc2hvdWxkIHVzZSBgYXJpYS1kZXNjcmliZWRieWAgdG8gcG9pbnQgdG8gdGhlIHByb2dyZXNzIGJhciwgYW5kIHNldCB0aGUgYGFyaWEtYnVzeWBcbiAqIGF0dHJpYnV0ZSB0byBgdHJ1ZWAgb24gdGhhdCByZWdpb24gdW50aWwgaXQgaGFzIGZpbmlzaGVkIGxvYWRpbmcuXG4gKi9cbmNvbnN0IENpcmN1bGFyUHJvZ3Jlc3MgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBDaXJjdWxhclByb2dyZXNzKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlDaXJjdWxhclByb2dyZXNzJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgICBkaXNhYmxlU2hyaW5rID0gZmFsc2UsXG4gICAgICBzaXplID0gNDAsXG4gICAgICBzdHlsZSxcbiAgICAgIHRoaWNrbmVzcyA9IDMuNixcbiAgICAgIHZhbHVlID0gMCxcbiAgICAgIHZhcmlhbnQgPSAnaW5kZXRlcm1pbmF0ZSdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGRpc2FibGVTaHJpbmssXG4gICAgc2l6ZSxcbiAgICB0aGlja25lc3MsXG4gICAgdmFsdWUsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBjaXJjbGVTdHlsZSA9IHt9O1xuICBjb25zdCByb290U3R5bGUgPSB7fTtcbiAgY29uc3Qgcm9vdFByb3BzID0ge307XG4gIGlmICh2YXJpYW50ID09PSAnZGV0ZXJtaW5hdGUnKSB7XG4gICAgY29uc3QgY2lyY3VtZmVyZW5jZSA9IDIgKiBNYXRoLlBJICogKChTSVpFIC0gdGhpY2tuZXNzKSAvIDIpO1xuICAgIGNpcmNsZVN0eWxlLnN0cm9rZURhc2hhcnJheSA9IGNpcmN1bWZlcmVuY2UudG9GaXhlZCgzKTtcbiAgICByb290UHJvcHNbJ2FyaWEtdmFsdWVub3cnXSA9IE1hdGgucm91bmQodmFsdWUpO1xuICAgIGNpcmNsZVN0eWxlLnN0cm9rZURhc2hvZmZzZXQgPSBgJHsoKDEwMCAtIHZhbHVlKSAvIDEwMCAqIGNpcmN1bWZlcmVuY2UpLnRvRml4ZWQoMyl9cHhgO1xuICAgIHJvb3RTdHlsZS50cmFuc2Zvcm0gPSAncm90YXRlKC05MGRlZyknO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChDaXJjdWxhclByb2dyZXNzUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgIHdpZHRoOiBzaXplLFxuICAgICAgaGVpZ2h0OiBzaXplXG4gICAgfSwgcm9vdFN0eWxlLCBzdHlsZSksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICByZWY6IHJlZixcbiAgICByb2xlOiBcInByb2dyZXNzYmFyXCJcbiAgfSwgcm9vdFByb3BzLCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChDaXJjdWxhclByb2dyZXNzU1ZHLCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMuc3ZnLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIHZpZXdCb3g6IGAke1NJWkUgLyAyfSAke1NJWkUgLyAyfSAke1NJWkV9ICR7U0laRX1gLFxuICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KENpcmN1bGFyUHJvZ3Jlc3NDaXJjbGUsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmNpcmNsZSxcbiAgICAgICAgc3R5bGU6IGNpcmNsZVN0eWxlLFxuICAgICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgICBjeDogU0laRSxcbiAgICAgICAgY3k6IFNJWkUsXG4gICAgICAgIHI6IChTSVpFIC0gdGhpY2tuZXNzKSAvIDIsXG4gICAgICAgIGZpbGw6IFwibm9uZVwiLFxuICAgICAgICBzdHJva2VXaWR0aDogdGhpY2tuZXNzXG4gICAgICB9KVxuICAgIH0pXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQ2lyY3VsYXJQcm9ncmVzcy5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydpbmhlcml0JywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBzaHJpbmsgYW5pbWF0aW9uIGlzIGRpc2FibGVkLlxuICAgKiBUaGlzIG9ubHkgd29ya3MgaWYgdmFyaWFudCBpcyBgaW5kZXRlcm1pbmF0ZWAuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlU2hyaW5rOiBjaGFpblByb3BUeXBlcyhQcm9wVHlwZXMuYm9vbCwgcHJvcHMgPT4ge1xuICAgIGlmIChwcm9wcy5kaXNhYmxlU2hyaW5rICYmIHByb3BzLnZhcmlhbnQgJiYgcHJvcHMudmFyaWFudCAhPT0gJ2luZGV0ZXJtaW5hdGUnKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdNVUk6IFlvdSBoYXZlIHByb3ZpZGVkIHRoZSBgZGlzYWJsZVNocmlua2AgcHJvcCAnICsgJ3dpdGggYSB2YXJpYW50IG90aGVyIHRoYW4gYGluZGV0ZXJtaW5hdGVgLiBUaGlzIHdpbGwgaGF2ZSBubyBlZmZlY3QuJyk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIElmIHVzaW5nIGEgbnVtYmVyLCB0aGUgcGl4ZWwgdW5pdCBpcyBhc3N1bWVkLlxuICAgKiBJZiB1c2luZyBhIHN0cmluZywgeW91IG5lZWQgdG8gcHJvdmlkZSB0aGUgQ1NTIHVuaXQsIGUuZy4gJzNyZW0nLlxuICAgKiBAZGVmYXVsdCA0MFxuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdGhpY2tuZXNzIG9mIHRoZSBjaXJjbGUuXG4gICAqIEBkZWZhdWx0IDMuNlxuICAgKi9cbiAgdGhpY2tuZXNzOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBwcm9ncmVzcyBpbmRpY2F0b3IgZm9yIHRoZSBkZXRlcm1pbmF0ZSB2YXJpYW50LlxuICAgKiBWYWx1ZSBiZXR3ZWVuIDAgYW5kIDEwMC5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIFVzZSBpbmRldGVybWluYXRlIHdoZW4gdGhlcmUgaXMgbm8gcHJvZ3Jlc3MgdmFsdWUuXG4gICAqIEBkZWZhdWx0ICdpbmRldGVybWluYXRlJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnZGV0ZXJtaW5hdGUnLCAnaW5kZXRlcm1pbmF0ZSddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IENpcmN1bGFyUHJvZ3Jlc3M7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlQ29udGFpbmVyIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuY29uc3QgQ29udGFpbmVyID0gY3JlYXRlQ29udGFpbmVyKHtcbiAgY3JlYXRlU3R5bGVkQ29tcG9uZW50OiBzdHlsZWQoJ2RpdicsIHtcbiAgICBuYW1lOiAnTXVpQ29udGFpbmVyJyxcbiAgICBzbG90OiAnUm9vdCcsXG4gICAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG93bmVyU3RhdGVcbiAgICAgIH0gPSBwcm9wcztcbiAgICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIHN0eWxlc1tgbWF4V2lkdGgke2NhcGl0YWxpemUoU3RyaW5nKG93bmVyU3RhdGUubWF4V2lkdGgpKX1gXSwgb3duZXJTdGF0ZS5maXhlZCAmJiBzdHlsZXMuZml4ZWQsIG93bmVyU3RhdGUuZGlzYWJsZUd1dHRlcnMgJiYgc3R5bGVzLmRpc2FibGVHdXR0ZXJzXTtcbiAgICB9XG4gIH0pLFxuICB1c2VUaGVtZVByb3BzOiBpblByb3BzID0+IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlDb250YWluZXInXG4gIH0pXG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IENvbnRhaW5lci5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsZWZ0IGFuZCByaWdodCBwYWRkaW5nIGlzIHJlbW92ZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlR3V0dGVyczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBTZXQgdGhlIG1heC13aWR0aCB0byBtYXRjaCB0aGUgbWluLXdpZHRoIG9mIHRoZSBjdXJyZW50IGJyZWFrcG9pbnQuXG4gICAqIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSdkIHByZWZlciB0byBkZXNpZ24gZm9yIGEgZml4ZWQgc2V0IG9mIHNpemVzXG4gICAqIGluc3RlYWQgb2YgdHJ5aW5nIHRvIGFjY29tbW9kYXRlIGEgZnVsbHkgZmx1aWQgdmlld3BvcnQuXG4gICAqIEl0J3MgZmx1aWQgYnkgZGVmYXVsdC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZpeGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgbWF4LXdpZHRoIG9mIHRoZSBjb250YWluZXIuXG4gICAqIFRoZSBjb250YWluZXIgd2lkdGggZ3Jvd3Mgd2l0aCB0aGUgc2l6ZSBvZiB0aGUgc2NyZWVuLlxuICAgKiBTZXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIGBtYXhXaWR0aGAuXG4gICAqIEBkZWZhdWx0ICdsZydcbiAgICovXG4gIG1heFdpZHRoOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJywgZmFsc2VdKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQ29udGFpbmVyOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IEdsb2JhbFN0eWxlcyBmcm9tICcuLi9HbG9iYWxTdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBjb25zdCBodG1sID0gKHRoZW1lLCBlbmFibGVDb2xvclNjaGVtZSkgPT4gX2V4dGVuZHMoe1xuICBXZWJraXRGb250U21vb3RoaW5nOiAnYW50aWFsaWFzZWQnLFxuICAvLyBBbnRpYWxpYXNpbmcuXG4gIE1vek9zeEZvbnRTbW9vdGhpbmc6ICdncmF5c2NhbGUnLFxuICAvLyBBbnRpYWxpYXNpbmcuXG4gIC8vIENoYW5nZSBmcm9tIGBib3gtc2l6aW5nOiBjb250ZW50LWJveGAgc28gdGhhdCBgd2lkdGhgXG4gIC8vIGlzIG5vdCBhZmZlY3RlZCBieSBgcGFkZGluZ2Agb3IgYGJvcmRlcmAuXG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAvLyBGaXggZm9udCByZXNpemUgcHJvYmxlbSBpbiBpT1NcbiAgV2Via2l0VGV4dFNpemVBZGp1c3Q6ICcxMDAlJ1xufSwgZW5hYmxlQ29sb3JTY2hlbWUgJiYgIXRoZW1lLnZhcnMgJiYge1xuICBjb2xvclNjaGVtZTogdGhlbWUucGFsZXR0ZS5tb2RlXG59KTtcbmV4cG9ydCBjb25zdCBib2R5ID0gdGhlbWUgPT4gX2V4dGVuZHMoe1xuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5wcmltYXJ5XG59LCB0aGVtZS50eXBvZ3JhcGh5LmJvZHkxLCB7XG4gIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYmFja2dyb3VuZC5kZWZhdWx0LFxuICAnQG1lZGlhIHByaW50Jzoge1xuICAgIC8vIFNhdmUgcHJpbnRlciBpbmsuXG4gICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5jb21tb24ud2hpdGVcbiAgfVxufSk7XG5leHBvcnQgY29uc3Qgc3R5bGVzID0gKHRoZW1lLCBlbmFibGVDb2xvclNjaGVtZSA9IGZhbHNlKSA9PiB7XG4gIHZhciBfdGhlbWUkY29tcG9uZW50cztcbiAgY29uc3QgY29sb3JTY2hlbWVTdHlsZXMgPSB7fTtcbiAgaWYgKGVuYWJsZUNvbG9yU2NoZW1lICYmIHRoZW1lLmNvbG9yU2NoZW1lcykge1xuICAgIE9iamVjdC5lbnRyaWVzKHRoZW1lLmNvbG9yU2NoZW1lcykuZm9yRWFjaCgoW2tleSwgc2NoZW1lXSkgPT4ge1xuICAgICAgdmFyIF9zY2hlbWUkcGFsZXR0ZTtcbiAgICAgIGNvbG9yU2NoZW1lU3R5bGVzW3RoZW1lLmdldENvbG9yU2NoZW1lU2VsZWN0b3Ioa2V5KS5yZXBsYWNlKC9cXHMqJi8sICcnKV0gPSB7XG4gICAgICAgIGNvbG9yU2NoZW1lOiAoX3NjaGVtZSRwYWxldHRlID0gc2NoZW1lLnBhbGV0dGUpID09IG51bGwgPyB2b2lkIDAgOiBfc2NoZW1lJHBhbGV0dGUubW9kZVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICBsZXQgZGVmYXVsdFN0eWxlcyA9IF9leHRlbmRzKHtcbiAgICBodG1sOiBodG1sKHRoZW1lLCBlbmFibGVDb2xvclNjaGVtZSksXG4gICAgJyosICo6OmJlZm9yZSwgKjo6YWZ0ZXInOiB7XG4gICAgICBib3hTaXppbmc6ICdpbmhlcml0J1xuICAgIH0sXG4gICAgJ3N0cm9uZywgYic6IHtcbiAgICAgIGZvbnRXZWlnaHQ6IHRoZW1lLnR5cG9ncmFwaHkuZm9udFdlaWdodEJvbGRcbiAgICB9LFxuICAgIGJvZHk6IF9leHRlbmRzKHtcbiAgICAgIG1hcmdpbjogMFxuICAgIH0sIGJvZHkodGhlbWUpLCB7XG4gICAgICAvLyBBZGQgc3VwcG9ydCBmb3IgZG9jdW1lbnQuYm9keS5yZXF1ZXN0RnVsbFNjcmVlbigpLlxuICAgICAgLy8gT3RoZXIgZWxlbWVudHMsIGlmIGJhY2tncm91bmQgdHJhbnNwYXJlbnQsIGFyZSBub3Qgc3VwcG9ydGVkLlxuICAgICAgJyY6OmJhY2tkcm9wJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmJhY2tncm91bmQuZGVmYXVsdFxuICAgICAgfVxuICAgIH0pXG4gIH0sIGNvbG9yU2NoZW1lU3R5bGVzKTtcbiAgY29uc3QgdGhlbWVPdmVycmlkZXMgPSAoX3RoZW1lJGNvbXBvbmVudHMgPSB0aGVtZS5jb21wb25lbnRzKSA9PSBudWxsIHx8IChfdGhlbWUkY29tcG9uZW50cyA9IF90aGVtZSRjb21wb25lbnRzLk11aUNzc0Jhc2VsaW5lKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJGNvbXBvbmVudHMuc3R5bGVPdmVycmlkZXM7XG4gIGlmICh0aGVtZU92ZXJyaWRlcykge1xuICAgIGRlZmF1bHRTdHlsZXMgPSBbZGVmYXVsdFN0eWxlcywgdGhlbWVPdmVycmlkZXNdO1xuICB9XG4gIHJldHVybiBkZWZhdWx0U3R5bGVzO1xufTtcblxuLyoqXG4gKiBLaWNrc3RhcnQgYW4gZWxlZ2FudCwgY29uc2lzdGVudCwgYW5kIHNpbXBsZSBiYXNlbGluZSB0byBidWlsZCB1cG9uLlxuICovXG5mdW5jdGlvbiBDc3NCYXNlbGluZShpblByb3BzKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUNzc0Jhc2VsaW5lJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGVuYWJsZUNvbG9yU2NoZW1lID0gZmFsc2VcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFsvKiNfX1BVUkVfXyovX2pzeChHbG9iYWxTdHlsZXMsIHtcbiAgICAgIHN0eWxlczogdGhlbWUgPT4gc3R5bGVzKHRoZW1lLCBlbmFibGVDb2xvclNjaGVtZSlcbiAgICB9KSwgY2hpbGRyZW5dXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQ3NzQmFzZWxpbmUucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogWW91IGNhbiB3cmFwIGEgbm9kZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEVuYWJsZSBgY29sb3Itc2NoZW1lYCBDU1MgcHJvcGVydHkgdG8gdXNlIGB0aGVtZS5wYWxldHRlLm1vZGVgLlxuICAgKiBGb3IgbW9yZSBkZXRhaWxzLCBjaGVjayBvdXQgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2NvbG9yLXNjaGVtZVxuICAgKiBGb3IgYnJvd3NlciBzdXBwb3J0LCBjaGVjayBvdXQgaHR0cHM6Ly9jYW5pdXNlLmNvbS8/c2VhcmNoPWNvbG9yLXNjaGVtZVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZW5hYmxlQ29sb3JTY2hlbWU6IFByb3BUeXBlcy5ib29sXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQ3NzQmFzZWxpbmU7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXREaXZpZGVyVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlEaXZpZGVyJywgc2xvdCk7XG59XG5jb25zdCBkaXZpZGVyQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aURpdmlkZXInLCBbJ3Jvb3QnLCAnYWJzb2x1dGUnLCAnZnVsbFdpZHRoJywgJ2luc2V0JywgJ21pZGRsZScsICdmbGV4SXRlbScsICdsaWdodCcsICd2ZXJ0aWNhbCcsICd3aXRoQ2hpbGRyZW4nLCAnd2l0aENoaWxkcmVuVmVydGljYWwnLCAndGV4dEFsaWduUmlnaHQnLCAndGV4dEFsaWduTGVmdCcsICd3cmFwcGVyJywgJ3dyYXBwZXJWZXJ0aWNhbCddKTtcbmV4cG9ydCBkZWZhdWx0IGRpdmlkZXJDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFkZEVuZExpc3RlbmVyXCIsIFwiYXBwZWFyXCIsIFwiY2hpbGRyZW5cIiwgXCJlYXNpbmdcIiwgXCJpblwiLCBcIm9uRW50ZXJcIiwgXCJvbkVudGVyZWRcIiwgXCJvbkVudGVyaW5nXCIsIFwib25FeGl0XCIsIFwib25FeGl0ZWRcIiwgXCJvbkV4aXRpbmdcIiwgXCJzdHlsZVwiLCBcInRpbWVvdXRcIiwgXCJUcmFuc2l0aW9uQ29tcG9uZW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IFRyYW5zaXRpb24gfSBmcm9tICdyZWFjdC10cmFuc2l0aW9uLWdyb3VwJztcbmltcG9ydCB7IGVsZW1lbnRBY2NlcHRpbmdSZWYgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWUnO1xuaW1wb3J0IHsgcmVmbG93LCBnZXRUcmFuc2l0aW9uUHJvcHMgfSBmcm9tICcuLi90cmFuc2l0aW9ucy91dGlscyc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBzdHlsZXMgPSB7XG4gIGVudGVyaW5nOiB7XG4gICAgb3BhY2l0eTogMVxuICB9LFxuICBlbnRlcmVkOiB7XG4gICAgb3BhY2l0eTogMVxuICB9XG59O1xuXG4vKipcbiAqIFRoZSBGYWRlIHRyYW5zaXRpb24gaXMgdXNlZCBieSB0aGUgW01vZGFsXSgvbWF0ZXJpYWwtdWkvcmVhY3QtbW9kYWwvKSBjb21wb25lbnQuXG4gKiBJdCB1c2VzIFtyZWFjdC10cmFuc2l0aW9uLWdyb3VwXShodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwKSBpbnRlcm5hbGx5LlxuICovXG5jb25zdCBGYWRlID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRmFkZShwcm9wcywgcmVmKSB7XG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcbiAgY29uc3QgZGVmYXVsdFRpbWVvdXQgPSB7XG4gICAgZW50ZXI6IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLmVudGVyaW5nU2NyZWVuLFxuICAgIGV4aXQ6IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLmxlYXZpbmdTY3JlZW5cbiAgfTtcbiAgY29uc3Qge1xuICAgICAgYWRkRW5kTGlzdGVuZXIsXG4gICAgICBhcHBlYXIgPSB0cnVlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBlYXNpbmcsXG4gICAgICBpbjogaW5Qcm9wLFxuICAgICAgb25FbnRlcixcbiAgICAgIG9uRW50ZXJlZCxcbiAgICAgIG9uRW50ZXJpbmcsXG4gICAgICBvbkV4aXQsXG4gICAgICBvbkV4aXRlZCxcbiAgICAgIG9uRXhpdGluZyxcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCA9IGRlZmF1bHRUaW1lb3V0LFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3Byb3AtdHlwZXNcbiAgICAgIFRyYW5zaXRpb25Db21wb25lbnQgPSBUcmFuc2l0aW9uXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGVuYWJsZVN0cmljdE1vZGVDb21wYXQgPSB0cnVlO1xuICBjb25zdCBub2RlUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKG5vZGVSZWYsIGNoaWxkcmVuLnJlZiwgcmVmKTtcbiAgY29uc3Qgbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayA9IGNhbGxiYWNrID0+IG1heWJlSXNBcHBlYXJpbmcgPT4ge1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVSZWYuY3VycmVudDtcblxuICAgICAgLy8gb25FbnRlclh4eCBhbmQgb25FeGl0WHh4IGNhbGxiYWNrcyBoYXZlIGEgZGlmZmVyZW50IGFyZ3VtZW50cy5sZW5ndGggdmFsdWUuXG4gICAgICBpZiAobWF5YmVJc0FwcGVhcmluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNhbGxiYWNrKG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sobm9kZSwgbWF5YmVJc0FwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVFbnRlcmluZyA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FbnRlcmluZyk7XG4gIGNvbnN0IGhhbmRsZUVudGVyID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjaygobm9kZSwgaXNBcHBlYXJpbmcpID0+IHtcbiAgICByZWZsb3cobm9kZSk7IC8vIFNvIHRoZSBhbmltYXRpb24gYWx3YXlzIHN0YXJ0IGZyb20gdGhlIHN0YXJ0LlxuXG4gICAgY29uc3QgdHJhbnNpdGlvblByb3BzID0gZ2V0VHJhbnNpdGlvblByb3BzKHtcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVhc2luZ1xuICAgIH0sIHtcbiAgICAgIG1vZGU6ICdlbnRlcidcbiAgICB9KTtcbiAgICBub2RlLnN0eWxlLndlYmtpdFRyYW5zaXRpb24gPSB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB0cmFuc2l0aW9uUHJvcHMpO1xuICAgIG5vZGUuc3R5bGUudHJhbnNpdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHRyYW5zaXRpb25Qcm9wcyk7XG4gICAgaWYgKG9uRW50ZXIpIHtcbiAgICAgIG9uRW50ZXIobm9kZSwgaXNBcHBlYXJpbmcpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUVudGVyZWQgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRW50ZXJlZCk7XG4gIGNvbnN0IGhhbmRsZUV4aXRpbmcgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRXhpdGluZyk7XG4gIGNvbnN0IGhhbmRsZUV4aXQgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG5vZGUgPT4ge1xuICAgIGNvbnN0IHRyYW5zaXRpb25Qcm9wcyA9IGdldFRyYW5zaXRpb25Qcm9wcyh7XG4gICAgICBzdHlsZSxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBlYXNpbmdcbiAgICB9LCB7XG4gICAgICBtb2RlOiAnZXhpdCdcbiAgICB9KTtcbiAgICBub2RlLnN0eWxlLndlYmtpdFRyYW5zaXRpb24gPSB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB0cmFuc2l0aW9uUHJvcHMpO1xuICAgIG5vZGUuc3R5bGUudHJhbnNpdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHRyYW5zaXRpb25Qcm9wcyk7XG4gICAgaWYgKG9uRXhpdCkge1xuICAgICAgb25FeGl0KG5vZGUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUV4aXRlZCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FeGl0ZWQpO1xuICBjb25zdCBoYW5kbGVBZGRFbmRMaXN0ZW5lciA9IG5leHQgPT4ge1xuICAgIGlmIChhZGRFbmRMaXN0ZW5lcikge1xuICAgICAgLy8gT2xkIGNhbGwgc2lnbmF0dXJlIGJlZm9yZSBgcmVhY3QtdHJhbnNpdGlvbi1ncm91cGAgaW1wbGVtZW50ZWQgYG5vZGVSZWZgXG4gICAgICBhZGRFbmRMaXN0ZW5lcihub2RlUmVmLmN1cnJlbnQsIG5leHQpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFRyYW5zaXRpb25Db21wb25lbnQsIF9leHRlbmRzKHtcbiAgICBhcHBlYXI6IGFwcGVhcixcbiAgICBpbjogaW5Qcm9wLFxuICAgIG5vZGVSZWY6IGVuYWJsZVN0cmljdE1vZGVDb21wYXQgPyBub2RlUmVmIDogdW5kZWZpbmVkLFxuICAgIG9uRW50ZXI6IGhhbmRsZUVudGVyLFxuICAgIG9uRW50ZXJlZDogaGFuZGxlRW50ZXJlZCxcbiAgICBvbkVudGVyaW5nOiBoYW5kbGVFbnRlcmluZyxcbiAgICBvbkV4aXQ6IGhhbmRsZUV4aXQsXG4gICAgb25FeGl0ZWQ6IGhhbmRsZUV4aXRlZCxcbiAgICBvbkV4aXRpbmc6IGhhbmRsZUV4aXRpbmcsXG4gICAgYWRkRW5kTGlzdGVuZXI6IGhhbmRsZUFkZEVuZExpc3RlbmVyLFxuICAgIHRpbWVvdXQ6IHRpbWVvdXRcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogKHN0YXRlLCBjaGlsZFByb3BzKSA9PiB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwgX2V4dGVuZHMoe1xuICAgICAgICBzdHlsZTogX2V4dGVuZHMoe1xuICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgdmlzaWJpbGl0eTogc3RhdGUgPT09ICdleGl0ZWQnICYmICFpblByb3AgPyAnaGlkZGVuJyA6IHVuZGVmaW5lZFxuICAgICAgICB9LCBzdHlsZXNbc3RhdGVdLCBzdHlsZSwgY2hpbGRyZW4ucHJvcHMuc3R5bGUpLFxuICAgICAgICByZWY6IGhhbmRsZVJlZlxuICAgICAgfSwgY2hpbGRQcm9wcykpO1xuICAgIH1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGYWRlLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIEFkZCBhIGN1c3RvbSB0cmFuc2l0aW9uIGVuZCB0cmlnZ2VyLiBDYWxsZWQgd2l0aCB0aGUgdHJhbnNpdGlvbmluZyBET01cbiAgICogbm9kZSBhbmQgYSBkb25lIGNhbGxiYWNrLiBBbGxvd3MgZm9yIG1vcmUgZmluZSBncmFpbmVkIHRyYW5zaXRpb24gZW5kXG4gICAqIGxvZ2ljLiBOb3RlOiBUaW1lb3V0cyBhcmUgc3RpbGwgdXNlZCBhcyBhIGZhbGxiYWNrIGlmIHByb3ZpZGVkLlxuICAgKi9cbiAgYWRkRW5kTGlzdGVuZXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogUGVyZm9ybSB0aGUgZW50ZXIgdHJhbnNpdGlvbiB3aGVuIGl0IGZpcnN0IG1vdW50cyBpZiBgaW5gIGlzIGFsc28gYHRydWVgLlxuICAgKiBTZXQgdGhpcyB0byBgZmFsc2VgIHRvIGRpc2FibGUgdGhpcyBiZWhhdmlvci5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXBwZWFyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEEgc2luZ2xlIGNoaWxkIGNvbnRlbnQgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBlbGVtZW50QWNjZXB0aW5nUmVmLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBUaGUgdHJhbnNpdGlvbiB0aW1pbmcgZnVuY3Rpb24uXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSBlYXNpbmcgb3IgYSBvYmplY3QgY29udGFpbmluZyBlbnRlciBhbmQgZXhpdCB2YWx1ZXMuXG4gICAqL1xuICBlYXNpbmc6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgZW50ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZXhpdDogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IHdpbGwgdHJhbnNpdGlvbiBpbi5cbiAgICovXG4gIGluOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcmVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRW50ZXJpbmc6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FeGl0OiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdGluZzogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBmb3IgdGhlIHRyYW5zaXRpb24sIGluIG1pbGxpc2Vjb25kcy5cbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIHRpbWVvdXQgZm9yIGFsbCB0cmFuc2l0aW9ucywgb3IgaW5kaXZpZHVhbGx5IHdpdGggYW4gb2JqZWN0LlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgZW50ZXI6IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLmVudGVyaW5nU2NyZWVuLFxuICAgKiAgIGV4aXQ6IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLmxlYXZpbmdTY3JlZW4sXG4gICAqIH1cbiAgICovXG4gIHRpbWVvdXQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXBwZWFyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGVudGVyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5udW1iZXJcbiAgfSldKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZhZGU7Il0sIm5hbWVzIjpbImRlZmF1bHRUaGVtZSIsImNyZWF0ZVRoZW1lIiwiY3JlYXRlQm94IiwidGhlbWVJZCIsImRlZmF1bHRDbGFzc05hbWUiLCJyb290IiwiZ2VuZXJhdGVDbGFzc05hbWUiLCJDbGFzc05hbWVHZW5lcmF0b3IiLCJnZW5lcmF0ZSIsImdldEJ1dHRvblV0aWxpdHlDbGFzcyIsInNsb3QiLCJnZW5lcmF0ZVV0aWxpdHlDbGFzcyIsImdlbmVyYXRlVXRpbGl0eUNsYXNzZXMiLCJ1bmRlZmluZWQiLCJfZXhjbHVkZWQiLCJjb21tb25JY29uU3R5bGVzIiwib3duZXJTdGF0ZSIsInNpemUiLCJmb250U2l6ZSIsIkJ1dHRvblJvb3QiLCJzdHlsZWQiLCJCdXR0b25CYXNlIiwic2hvdWxkRm9yd2FyZFByb3AiLCJwcm9wIiwibmFtZSIsIm92ZXJyaWRlc1Jlc29sdmVyIiwicHJvcHMiLCJzdHlsZXMiLCJ2YXJpYW50IiwiY2FwaXRhbGl6ZSIsImNvbG9yIiwiY29sb3JJbmhlcml0IiwiZGlzYWJsZUVsZXZhdGlvbiIsImZ1bGxXaWR0aCIsInRoZW1lIiwiX3RoZW1lJHBhbGV0dGUkZ2V0Q29uIiwiX3RoZW1lJHBhbGV0dGUiLCJpbmhlcml0Q29udGFpbmVkQmFja2dyb3VuZENvbG9yIiwicGFsZXR0ZSIsIm1vZGUiLCJncmV5IiwiaW5oZXJpdENvbnRhaW5lZEhvdmVyQmFja2dyb3VuZENvbG9yIiwiQTEwMCIsInR5cG9ncmFwaHkiLCJidXR0b24iLCJtaW5XaWR0aCIsInBhZGRpbmciLCJib3JkZXJSYWRpdXMiLCJ2YXJzIiwic2hhcGUiLCJ0cmFuc2l0aW9uIiwidHJhbnNpdGlvbnMiLCJjcmVhdGUiLCJkdXJhdGlvbiIsInNob3J0IiwidGV4dERlY29yYXRpb24iLCJiYWNrZ3JvdW5kQ29sb3IiLCJ0ZXh0IiwicHJpbWFyeUNoYW5uZWwiLCJhY3Rpb24iLCJob3Zlck9wYWNpdHkiLCJwcmltYXJ5IiwibWFpbkNoYW5uZWwiLCJtYWluIiwiYm9yZGVyIiwiQnV0dG9uIiwiaW5oZXJpdENvbnRhaW5lZEhvdmVyQmciLCJib3hTaGFkb3ciLCJzaGFkb3dzIiwiZGFyayIsImZvY3VzVmlzaWJsZSIsImRpc2FibGVkIiwiZGlzYWJsZWRCYWNrZ3JvdW5kIiwiZ2V0Q29udHJhc3RUZXh0IiwiY2FsbCIsImluaGVyaXRDb250YWluZWRCZyIsImNvbnRyYXN0VGV4dCIsImJvcmRlckNvbG9yIiwicHhUb1JlbSIsIndpZHRoIiwiQnV0dG9uU3RhcnRJY29uIiwic3RhcnRJY29uIiwiZGlzcGxheSIsIm1hcmdpblJpZ2h0IiwibWFyZ2luTGVmdCIsIkJ1dHRvbkVuZEljb24iLCJlbmRJY29uIiwiaW5Qcm9wcyIsInJlZiIsImNvbnRleHRQcm9wcyIsImJ1dHRvbkdyb3VwQnV0dG9uQ29udGV4dFBvc2l0aW9uQ2xhc3NOYW1lIiwicmVzb2x2ZWRQcm9wcyIsInJlc29sdmVQcm9wcyIsInVzZVRoZW1lUHJvcHMiLCJjaGlsZHJlbiIsImNvbXBvbmVudCIsImNsYXNzTmFtZSIsImRpc2FibGVGb2N1c1JpcHBsZSIsImVuZEljb25Qcm9wIiwiZm9jdXNWaXNpYmxlQ2xhc3NOYW1lIiwic3RhcnRJY29uUHJvcCIsInR5cGUiLCJvdGhlciIsImNsYXNzZXMiLCJzbG90cyIsImxhYmVsIiwiY29tcG9zZWRDbGFzc2VzIiwiY29tcG9zZUNsYXNzZXMiLCJ1c2VVdGlsaXR5Q2xhc3NlcyIsInBvc2l0aW9uQ2xhc3NOYW1lIiwiY2xzeCIsImZvY3VzUmlwcGxlIiwiX3QiLCJfdDIiLCJfdDMiLCJfdDQiLCJfIiwidCIsImVudGVyS2V5ZnJhbWUiLCJleGl0S2V5ZnJhbWUiLCJwdWxzYXRlS2V5ZnJhbWUiLCJUb3VjaFJpcHBsZVJvb3QiLCJvdmVyZmxvdyIsInBvaW50ZXJFdmVudHMiLCJwb3NpdGlvbiIsInpJbmRleCIsInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCIsIlRvdWNoUmlwcGxlUmlwcGxlIiwicHVsc2F0ZSIsInJpcHBsZVgiLCJyaXBwbGVZIiwicmlwcGxlU2l6ZSIsImluIiwiaW5Qcm9wIiwib25FeGl0ZWQiLCJ0aW1lb3V0IiwibGVhdmluZyIsInNldExlYXZpbmciLCJyaXBwbGVDbGFzc05hbWUiLCJyaXBwbGUiLCJyaXBwbGVWaXNpYmxlIiwicmlwcGxlUHVsc2F0ZSIsInJpcHBsZVN0eWxlcyIsImhlaWdodCIsImNoaWxkQ2xhc3NOYW1lIiwiY2hpbGQiLCJjaGlsZExlYXZpbmciLCJjaGlsZFB1bHNhdGUiLCJ0aW1lb3V0SWQiLCJzZXRUaW1lb3V0IiwiY2xlYXJUaW1lb3V0Iiwic3R5bGUiLCJlYXNpbmciLCJlYXNlSW5PdXQiLCJzaG9ydGVyIiwiY2VudGVyIiwiY2VudGVyUHJvcCIsInJpcHBsZXMiLCJzZXRSaXBwbGVzIiwibmV4dEtleSIsInJpcHBsZUNhbGxiYWNrIiwiY3VycmVudCIsImlnbm9yaW5nTW91c2VEb3duIiwic3RhcnRUaW1lciIsInN0YXJ0VGltZXJDb21taXQiLCJjb250YWluZXIiLCJzdGFydENvbW1pdCIsInBhcmFtcyIsImNiIiwib2xkUmlwcGxlcyIsInN0YXJ0IiwiZXZlbnQiLCJvcHRpb25zIiwiZmFrZUVsZW1lbnQiLCJlbGVtZW50IiwicmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImNsaWVudFgiLCJjbGllbnRZIiwidG91Y2hlcyIsIk1hdGgiLCJyb3VuZCIsImxlbmd0aCIsInNxcnQiLCJzaXplWCIsIm1heCIsImFicyIsImNsaWVudFdpZHRoIiwic2l6ZVkiLCJjbGllbnRIZWlnaHQiLCJzdG9wIiwic2xpY2UiLCJUcmFuc2l0aW9uR3JvdXAiLCJleGl0IiwiZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcyIsIkJ1dHRvbkJhc2VSb290IiwiYWxpZ25JdGVtcyIsImp1c3RpZnlDb250ZW50IiwiYm94U2l6aW5nIiwiV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3IiLCJvdXRsaW5lIiwibWFyZ2luIiwiY3Vyc29yIiwidXNlclNlbGVjdCIsInZlcnRpY2FsQWxpZ24iLCJNb3pBcHBlYXJhbmNlIiwiV2Via2l0QXBwZWFyYW5jZSIsImJvcmRlclN0eWxlIiwiY29sb3JBZGp1c3QiLCJjZW50ZXJSaXBwbGUiLCJkaXNhYmxlUmlwcGxlIiwiZGlzYWJsZVRvdWNoUmlwcGxlIiwiTGlua0NvbXBvbmVudCIsIm9uQmx1ciIsIm9uQ2xpY2siLCJvbkNvbnRleHRNZW51Iiwib25EcmFnTGVhdmUiLCJvbkZvY3VzIiwib25Gb2N1c1Zpc2libGUiLCJvbktleURvd24iLCJvbktleVVwIiwib25Nb3VzZURvd24iLCJvbk1vdXNlTGVhdmUiLCJvbk1vdXNlVXAiLCJvblRvdWNoRW5kIiwib25Ub3VjaE1vdmUiLCJvblRvdWNoU3RhcnQiLCJ0YWJJbmRleCIsIlRvdWNoUmlwcGxlUHJvcHMiLCJ0b3VjaFJpcHBsZVJlZiIsImJ1dHRvblJlZiIsInJpcHBsZVJlZiIsImhhbmRsZVJpcHBsZVJlZiIsInVzZUZvcmtSZWYiLCJpc0ZvY3VzVmlzaWJsZVJlZiIsImhhbmRsZUZvY3VzVmlzaWJsZSIsImhhbmRsZUJsdXJWaXNpYmxlIiwiZm9jdXNWaXNpYmxlUmVmIiwidXNlSXNGb2N1c1Zpc2libGUiLCJzZXRGb2N1c1Zpc2libGUiLCJmb2N1cyIsIm1vdW50ZWRTdGF0ZSIsInNldE1vdW50ZWRTdGF0ZSIsImVuYWJsZVRvdWNoUmlwcGxlIiwidXNlUmlwcGxlSGFuZGxlciIsInJpcHBsZUFjdGlvbiIsImV2ZW50Q2FsbGJhY2siLCJza2lwUmlwcGxlQWN0aW9uIiwidXNlRXZlbnRDYWxsYmFjayIsImhhbmRsZU1vdXNlRG93biIsImhhbmRsZUNvbnRleHRNZW51IiwiaGFuZGxlRHJhZ0xlYXZlIiwiaGFuZGxlTW91c2VVcCIsImhhbmRsZU1vdXNlTGVhdmUiLCJwcmV2ZW50RGVmYXVsdCIsImhhbmRsZVRvdWNoU3RhcnQiLCJoYW5kbGVUb3VjaEVuZCIsImhhbmRsZVRvdWNoTW92ZSIsImhhbmRsZUJsdXIiLCJoYW5kbGVGb2N1cyIsImN1cnJlbnRUYXJnZXQiLCJpc05vbk5hdGl2ZUJ1dHRvbiIsInRhZ05hbWUiLCJocmVmIiwia2V5ZG93blJlZiIsImhhbmRsZUtleURvd24iLCJrZXkiLCJ0YXJnZXQiLCJoYW5kbGVLZXlVcCIsImRlZmF1bHRQcmV2ZW50ZWQiLCJDb21wb25lbnRQcm9wIiwidG8iLCJidXR0b25Qcm9wcyIsInJvbGUiLCJoYW5kbGVSZWYiLCJhcyIsImdldENpcmN1bGFyUHJvZ3Jlc3NVdGlsaXR5Q2xhc3MiLCJjaXJjdWxhclJvdGF0ZUtleWZyYW1lIiwiY2lyY3VsYXJEYXNoS2V5ZnJhbWUiLCJDaXJjdWxhclByb2dyZXNzUm9vdCIsIkNpcmN1bGFyUHJvZ3Jlc3NTVkciLCJzdmciLCJDaXJjdWxhclByb2dyZXNzQ2lyY2xlIiwiY2lyY2xlIiwiZGlzYWJsZVNocmluayIsImNpcmNsZURpc2FibGVTaHJpbmsiLCJzdHJva2UiLCJzdHJva2VEYXNoYXJyYXkiLCJzdHJva2VEYXNob2Zmc2V0IiwidGhpY2tuZXNzIiwidmFsdWUiLCJjaXJjbGVTdHlsZSIsInJvb3RTdHlsZSIsInJvb3RQcm9wcyIsImNpcmN1bWZlcmVuY2UiLCJQSSIsInRvRml4ZWQiLCJ0cmFuc2Zvcm0iLCJ2aWV3Qm94IiwiY3giLCJjeSIsInIiLCJmaWxsIiwic3Ryb2tlV2lkdGgiLCJjcmVhdGVTdHlsZWRDb21wb25lbnQiLCJTdHJpbmciLCJtYXhXaWR0aCIsImZpeGVkIiwiZGlzYWJsZUd1dHRlcnMiLCJodG1sIiwiZW5hYmxlQ29sb3JTY2hlbWUiLCJXZWJraXRGb250U21vb3RoaW5nIiwiTW96T3N4Rm9udFNtb290aGluZyIsIldlYmtpdFRleHRTaXplQWRqdXN0IiwiY29sb3JTY2hlbWUiLCJib2R5IiwiYm9keTEiLCJiYWNrZ3JvdW5kIiwiZGVmYXVsdCIsImNvbW1vbiIsIndoaXRlIiwiX3RoZW1lJGNvbXBvbmVudHMiLCJjb2xvclNjaGVtZVN0eWxlcyIsImNvbG9yU2NoZW1lcyIsIk9iamVjdCIsImVudHJpZXMiLCJmb3JFYWNoIiwic2NoZW1lIiwiX3NjaGVtZSRwYWxldHRlIiwiZ2V0Q29sb3JTY2hlbWVTZWxlY3RvciIsInJlcGxhY2UiLCJkZWZhdWx0U3R5bGVzIiwiZm9udFdlaWdodCIsImZvbnRXZWlnaHRCb2xkIiwidGhlbWVPdmVycmlkZXMiLCJjb21wb25lbnRzIiwiTXVpQ3NzQmFzZWxpbmUiLCJzdHlsZU92ZXJyaWRlcyIsImVudGVyaW5nIiwib3BhY2l0eSIsImVudGVyZWQiLCJkZWZhdWx0VGltZW91dCIsImVudGVyIiwiZW50ZXJpbmdTY3JlZW4iLCJsZWF2aW5nU2NyZWVuIiwiYWRkRW5kTGlzdGVuZXIiLCJhcHBlYXIiLCJvbkVudGVyIiwib25FbnRlcmVkIiwib25FbnRlcmluZyIsIm9uRXhpdCIsIm9uRXhpdGluZyIsIlRyYW5zaXRpb25Db21wb25lbnQiLCJub2RlUmVmIiwibm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayIsImNhbGxiYWNrIiwibWF5YmVJc0FwcGVhcmluZyIsIm5vZGUiLCJoYW5kbGVFbnRlcmluZyIsImhhbmRsZUVudGVyIiwiaXNBcHBlYXJpbmciLCJ0cmFuc2l0aW9uUHJvcHMiLCJ3ZWJraXRUcmFuc2l0aW9uIiwiaGFuZGxlRW50ZXJlZCIsImhhbmRsZUV4aXRpbmciLCJoYW5kbGVFeGl0IiwiaGFuZGxlRXhpdGVkIiwibmV4dCIsInN0YXRlIiwiY2hpbGRQcm9wcyIsInZpc2liaWxpdHkiXSwic291cmNlUm9vdCI6IiJ9