"use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[68],{8161:(e,t,o)=>{o.d(t,{A:()=>c});var n=o(7413),r=o(9071),i=o(6544),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:()=>M});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(7379),l=o(5659),c=o(771),d=o(1848),p=o(9770),u=o(5669),h=o(8850),m=o(8466),v=o(8413),g=o(1609);function b(e){return(0,g.Ay)("MuiButton",e)}const f=(0,v.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","colorPrimary","colorSecondary","colorSuccess","colorError","colorInfo","colorWarning","textSizeSmall","textSizeMedium","textSizeLarge","outlinedSizeSmall","outlinedSizeMedium","outlinedSizeLarge","containedSizeSmall","containedSizeMedium","containedSizeLarge","sizeMedium","sizeSmall","sizeLarge","fullWidth","startIcon","endIcon","icon","iconSizeSmall","iconSizeMedium","iconSizeLarge"]),x=i.createContext({}),A=i.createContext(void 0);var y=o(4848);const S=["children","color","component","className","disabled","disableElevation","disableFocusRipple","endIcon","focusVisibleClassName","fullWidth","size","startIcon","type","variant"],w=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)(h.A,{shouldForwardProp:e=>(0,p.A)(e)||"classes"===e,name:"MuiButton",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,t[o.variant],t[`${o.variant}${(0,m.A)(o.color)}`],t[`size${(0,m.A)(o.size)}`],t[`${o.variant}Size${(0,m.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,m.A)(o.size)}`]]}})((({ownerState:e})=>(0,r.A)({display:"inherit",marginRight:8,marginLeft:-4},"small"===e.size&&{marginLeft:-2},w(e)))),R=(0,d.Ay)("span",{name:"MuiButton",slot:"EndIcon",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.endIcon,t[`iconSize${(0,m.A)(o.size)}`]]}})((({ownerState:e})=>(0,r.A)({display:"inherit",marginRight:-4,marginLeft:8},"small"===e.size&&{marginRight:-2},w(e)))),M=i.forwardRef((function(e,t){const o=i.useContext(x),c=i.useContext(A),d=(0,s.A)(o,e),p=(0,u.b)({props:d,name:"MuiButton"}),{children:h,color:v="primary",component:g="button",className:f,disabled:w=!1,disableElevation:M=!1,disableFocusRipple:z=!1,endIcon:$,focusVisibleClassName:E,fullWidth:W=!1,size:D="medium",startIcon:T,type:I,variant:P="text"}=p,N=(0,n.A)(p,S),B=(0,r.A)({},p,{color:v,component:g,disabled:w,disableElevation:M,disableFocusRipple:z,fullWidth:W,size:D,type:I,variant:P}),j=(e=>{const{color:t,disableElevation:o,fullWidth:n,size:i,variant:a,classes:s}=e,c={root:["root",a,`${a}${(0,m.A)(t)}`,`size${(0,m.A)(i)}`,`${a}Size${(0,m.A)(i)}`,`color${(0,m.A)(t)}`,o&&"disableElevation",n&&"fullWidth"],label:["label"],startIcon:["icon","startIcon",`iconSize${(0,m.A)(i)}`],endIcon:["icon","endIcon",`iconSize${(0,m.A)(i)}`]},d=(0,l.A)(c,b,s);return(0,r.A)({},s,d)})(B),L=T&&(0,y.jsx)(C,{className:j.startIcon,ownerState:B,children:T}),F=$&&(0,y.jsx)(R,{className:j.endIcon,ownerState:B,children:$}),V=c||"";return(0,y.jsxs)(k,(0,r.A)({ownerState:B,className:(0,a.A)(o.className,j.root,f,V),component:g,disabled:w,focusRipple:!z,focusVisibleClassName:(0,a.A)(j.focusVisible,E),ref:t,type:I},N,{classes:j,children:[L,h,F]}))}))},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(5669),d=o(6852),p=o(3034),u=o(8851),h=o(2618),m=o(7437),v=o(3068),g=o(4848);var b=o(8413);const f=(0,b.A)("MuiTouchRipple",["root","ripple","rippleVisible","ripplePulsate","child","childLeaving","childPulsate"]),x=["center","classes","className"];let A,y,S,w,k=e=>e;const C=(0,m.i7)(A||(A=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; } `)),M=(0,m.i7)(S||(S=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"}),$=(0,l.Ay)((function(e){const{className:t,classes:o,pulsate:n=!1,rippleX:r,rippleY:s,rippleSize:l,in:c,onExited:d,timeout:p}=e,[u,h]=i.useState(!1),m=(0,a.A)(t,o.ripple,o.rippleVisible,n&&o.ripplePulsate),v={width:l,height:l,top:-l/2+s,left:-l/2+r},b=(0,a.A)(o.child,u&&o.childLeaving,n&&o.childPulsate);return c||u||h(!0),i.useEffect((()=>{if(!c&&null!=d){const e=setTimeout(d,p);return()=>{clearTimeout(e)}}}),[d,c,p]),(0,g.jsx)("span",{className:m,style:v,children:(0,g.jsx)("span",{className:b})})}),{name:"MuiTouchRipple",slot:"Ripple"})(w||(w=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,M,(({theme:e})=>e.transitions.easing.easeInOut)),E=i.forwardRef((function(e,t){const o=(0,c.b)({props:e,name:"MuiTouchRipple"}),{center:s=!1,classes:l={},className:d}=o,p=(0,r.A)(o,x),[u,m]=i.useState([]),b=i.useRef(0),A=i.useRef(null);i.useEffect((()=>{A.current&&(A.current(),A.current=null)}),[u]);const y=i.useRef(!1),S=(0,v.A)(),w=i.useRef(null),k=i.useRef(null),C=i.useCallback((e=>{const{pulsate:t,rippleX:o,rippleY:n,rippleSize:r,cb:i}=e;m((e=>[...e,(0,g.jsx)($,{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,A.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,p;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)p=Math.sqrt((2*l.width**2+l.height**2)/3),p%2==0&&(p+=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;p=Math.sqrt(e**2+t**2)}null!=e&&e.touches?null===w.current&&(w.current=()=>{C({pulsate:n,rippleX:c,rippleY:d,rippleSize:p,cb:o})},S.start(80,(()=>{w.current&&(w.current(),w.current=null)}))):C({pulsate:n,rippleX:c,rippleY:d,rippleSize:p,cb:o})}),[s,C,S]),M=i.useCallback((()=>{R({},{pulsate:!0})}),[R]),E=i.useCallback(((e,t)=>{if(S.clear(),"touchend"===(null==e?void 0:e.type)&&w.current)return w.current(),w.current=null,void S.start(0,(()=>{E(e,t)}));w.current=null,m((e=>e.length>0?e.slice(1):e)),A.current=t}),[S]);return i.useImperativeHandle(t,(()=>({pulsate:M,start:R,stop:E})),[M,R,E]),(0,g.jsx)(z,(0,n.A)({className:(0,a.A)(f.root,l.root,d),ref:k},p,{children:(0,g.jsx)(h.A,{component:null,exit:!0,children:u})}))}));var W=o(1609);function D(e){return(0,W.Ay)("MuiButtonBase",e)}const T=(0,b.A)("MuiButtonBase",["root","disabled","focusVisible"]),I=["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"},[`&.${T.disabled}`]:{pointerEvents:"none",cursor:"default"},"@media print":{colorAdjust:"exact"}}),N=i.forwardRef((function(e,t){const o=(0,c.b)({props:e,name:"MuiButtonBase"}),{action:l,centerRipple:h=!1,children:m,className:v,component:b="button",disabled:f=!1,disableRipple:x=!1,disableTouchRipple:A=!1,focusRipple:y=!1,LinkComponent:S="a",onBlur:w,onClick:k,onContextMenu:C,onDragLeave:R,onFocus:M,onFocusVisible:z,onKeyDown:$,onKeyUp:W,onMouseDown:T,onMouseLeave:N,onMouseUp:B,onTouchEnd:j,onTouchMove:L,onTouchStart:F,tabIndex:V=0,TouchRippleProps:X,touchRippleRef:H,type:O}=o,Y=(0,r.A)(o,I),K=i.useRef(null),U=i.useRef(null),q=(0,d.A)(U,H),{isFocusVisibleRef:G,onFocus:_,onBlur:J,ref:Q}=(0,u.A)(),[Z,ee]=i.useState(!1);f&&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&&!f;function re(e,t,o=A){return(0,p.A)((n=>(t&&t(n),!o&&U.current&&U.current[e](n),!0)))}i.useEffect((()=>{Z&&y&&!x&&te&&U.current.pulsate()}),[x,y,Z,te]);const ie=re("start",T),ae=re("stop",C),se=re("stop",R),le=re("stop",B),ce=re("stop",(e=>{Z&&e.preventDefault(),N&&N(e)})),de=re("start",F),pe=re("stop",j),ue=re("stop",L),he=re("stop",(e=>{J(e),!1===G.current&&ee(!1),w&&w(e)}),!1),me=(0,p.A)((e=>{K.current||(K.current=e.currentTarget),_(e),!0===G.current&&(ee(!0),z&&z(e)),M&&M(e)})),ve=()=>{const e=K.current;return b&&"button"!==b&&!("A"===e.tagName&&e.href)},ge=i.useRef(!1),be=(0,p.A)((e=>{y&&!ge.current&&Z&&U.current&&" "===e.key&&(ge.current=!0,U.current.stop(e,(()=>{U.current.start(e)}))),e.target===e.currentTarget&&ve()&&" "===e.key&&e.preventDefault(),$&&$(e),e.target===e.currentTarget&&ve()&&"Enter"===e.key&&!f&&(e.preventDefault(),k&&k(e))})),fe=(0,p.A)((e=>{y&&" "===e.key&&U.current&&Z&&!e.defaultPrevented&&(ge.current=!1,U.current.stop(e,(()=>{U.current.pulsate(e)}))),W&&W(e),k&&e.target===e.currentTarget&&ve()&&" "===e.key&&!e.defaultPrevented&&k(e)}));let xe=b;"button"===xe&&(Y.href||Y.to)&&(xe=S);const Ae={};"button"===xe?(Ae.type=void 0===O?"button":O,Ae.disabled=f):(Y.href||Y.to||(Ae.role="button"),f&&(Ae["aria-disabled"]=f));const ye=(0,d.A)(t,Q,K),Se=(0,n.A)({},o,{centerRipple:h,component:b,disabled:f,disableRipple:x,disableTouchRipple:A,focusRipple:y,tabIndex:V,focusVisible:Z}),we=(e=>{const{disabled:t,focusVisible:o,focusVisibleClassName:n,classes:r}=e,i={root:["root",t&&"disabled",o&&"focusVisible"]},a=(0,s.A)(i,D,r);return o&&n&&(a.root+=` ${n}`),a})(Se);return(0,g.jsxs)(P,(0,n.A)({as:xe,className:(0,a.A)(we.root,v),ownerState:Se,onBlur:he,onClick:k,onContextMenu:ae,onFocus:me,onKeyDown:be,onKeyUp:fe,onMouseDown:ie,onMouseLeave:ce,onMouseUp:le,onDragLeave:se,onTouchEnd:pe,onTouchMove:ue,onTouchStart:de,ref:ye,tabIndex:f?-1:V,type:O},Ae,Y,{children:[m,ne?(0,g.jsx)(E,(0,n.A)({ref:q,center:h},X)):null]}))}))},3357:(e,t,o)=>{o.d(t,{A:()=>M});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(5659),l=o(7437),c=o(8466),d=o(5669),p=o(1848),u=o(8413),h=o(1609);function m(e){return(0,h.Ay)("MuiCircularProgress",e)}(0,u.A)("MuiCircularProgress",["root","determinate","indeterminate","colorPrimary","colorSecondary","svg","circle","circleDeterminate","circleIndeterminate","circleDisableShrink"]);var v=o(4848);const g=["className","color","disableShrink","size","style","thickness","value","variant"];let b,f,x,A,y=e=>e;const S=(0,l.i7)(b||(b=y` 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } `)),w=(0,l.i7)(f||(f=y` 0% { stroke-dasharray: 1px, 200px; stroke-dashoffset: 0; } 50% { stroke-dasharray: 100px, 200px; stroke-dashoffset: -15px; } 100% { stroke-dasharray: 100px, 200px; stroke-dashoffset: -125px; } `)),k=(0,p.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=y` animation: ${0} 1.4s linear infinite; `),S))),C=(0,p.Ay)("svg",{name:"MuiCircularProgress",slot:"Svg",overridesResolver:(e,t)=>t.svg})({display:"block"}),R=(0,p.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)(A||(A=y` animation: ${0} 1.4s ease-in-out infinite; `),w))),M=i.forwardRef((function(e,t){const o=(0,d.b)({props:e,name:"MuiCircularProgress"}),{className:i,color:l="primary",disableShrink:p=!1,size:u=40,style:h,thickness:b=3.6,value:f=0,variant:x="indeterminate"}=o,A=(0,n.A)(o,g),y=(0,r.A)({},o,{color:l,disableShrink:p,size:u,thickness:b,value:f,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)})(y),w={},M={},z={};if("determinate"===x){const e=2*Math.PI*((44-b)/2);w.strokeDasharray=e.toFixed(3),z["aria-valuenow"]=Math.round(f),w.strokeDashoffset=`${((100-f)/100*e).toFixed(3)}px`,M.transform="rotate(-90deg)"}return(0,v.jsx)(k,(0,r.A)({className:(0,a.A)(S.root,i),style:(0,r.A)({width:u,height:u},M,h),ownerState:y,ref:t,role:"progressbar"},z,A,{children:(0,v.jsx)(C,{className:S.svg,ownerState:y,viewBox:"22 22 44 44",children:(0,v.jsx)(R,{className:S.circle,style:w,ownerState:y,cx:44,cy:44,r:(44-b)/2,fill:"none",strokeWidth:b})})}))}))},2848:(e,t,o)=>{o.d(t,{A:()=>C});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(7353),l=o(3068),c=o(5659),d=o(1848),p=o(5669),u=o(7091),h=o(5186),m=o(4675),v=o(6852),g=o(8413),b=o(1609);function f(e){return(0,b.Ay)("MuiCollapse",e)}(0,g.A)("MuiCollapse",["root","horizontal","vertical","entered","hidden","wrapper","wrapperInner"]);var x=o(4848);const A=["addEndListener","children","className","collapsedSize","component","easing","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","orientation","style","timeout","TransitionComponent"],y=(0,d.Ay)("div",{name:"MuiCollapse",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,t[o.orientation],"entered"===o.state&&t.entered,"exited"===o.state&&!o.in&&"0px"===o.collapsedSize&&t.hidden]}})((({theme:e,ownerState:t})=>(0,r.A)({height:0,overflow:"hidden",transition:e.transitions.create("height")},"horizontal"===t.orientation&&{height:"auto",width:0,transition:e.transitions.create("width")},"entered"===t.state&&(0,r.A)({height:"auto",overflow:"visible"},"horizontal"===t.orientation&&{width:"auto"}),"exited"===t.state&&!t.in&&"0px"===t.collapsedSize&&{visibility:"hidden"}))),S=(0,d.Ay)("div",{name:"MuiCollapse",slot:"Wrapper",overridesResolver:(e,t)=>t.wrapper})((({ownerState:e})=>(0,r.A)({display:"flex",width:"100%"},"horizontal"===e.orientation&&{width:"auto",height:"100%"}))),w=(0,d.Ay)("div",{name:"MuiCollapse",slot:"WrapperInner",overridesResolver:(e,t)=>t.wrapperInner})((({ownerState:e})=>(0,r.A)({width:"100%"},"horizontal"===e.orientation&&{width:"auto",height:"100%"}))),k=i.forwardRef((function(e,t){const o=(0,p.b)({props:e,name:"MuiCollapse"}),{addEndListener:d,children:g,className:b,collapsedSize:k="0px",component:C,easing:R,in:M,onEnter:z,onEntered:$,onEntering:E,onExit:W,onExited:D,onExiting:T,orientation:I="vertical",style:P,timeout:N=u.p0.standard,TransitionComponent:B=s.Ay}=o,j=(0,n.A)(o,A),L=(0,r.A)({},o,{orientation:I,collapsedSize:k}),F=(e=>{const{orientation:t,classes:o}=e,n={root:["root",`${t}`],entered:["entered"],hidden:["hidden"],wrapper:["wrapper",`${t}`],wrapperInner:["wrapperInner",`${t}`]};return(0,c.A)(n,f,o)})(L),V=(0,m.A)(),X=(0,l.A)(),H=i.useRef(null),O=i.useRef(),Y="number"==typeof k?`${k}px`:k,K="horizontal"===I,U=K?"width":"height",q=i.useRef(null),G=(0,v.A)(t,q),_=e=>t=>{if(e){const o=q.current;void 0===t?e(o):e(o,t)}},J=()=>H.current?H.current[K?"clientWidth":"clientHeight"]:0,Q=_(((e,t)=>{H.current&&K&&(H.current.style.position="absolute"),e.style[U]=Y,z&&z(e,t)})),Z=_(((e,t)=>{const o=J();H.current&&K&&(H.current.style.position="");const{duration:n,easing:r}=(0,h.c)({style:P,timeout:N,easing:R},{mode:"enter"});if("auto"===N){const t=V.transitions.getAutoHeightDuration(o);e.style.transitionDuration=`${t}ms`,O.current=t}else e.style.transitionDuration="string"==typeof n?n:`${n}ms`;e.style[U]=`${o}px`,e.style.transitionTimingFunction=r,E&&E(e,t)})),ee=_(((e,t)=>{e.style[U]="auto",$&&$(e,t)})),te=_((e=>{e.style[U]=`${J()}px`,W&&W(e)})),oe=_(D),ne=_((e=>{const t=J(),{duration:o,easing:n}=(0,h.c)({style:P,timeout:N,easing:R},{mode:"exit"});if("auto"===N){const o=V.transitions.getAutoHeightDuration(t);e.style.transitionDuration=`${o}ms`,O.current=o}else e.style.transitionDuration="string"==typeof o?o:`${o}ms`;e.style[U]=Y,e.style.transitionTimingFunction=n,T&&T(e)}));return(0,x.jsx)(B,(0,r.A)({in:M,onEnter:Q,onEntered:ee,onEntering:Z,onExit:te,onExited:oe,onExiting:ne,addEndListener:e=>{"auto"===N&&X.start(O.current||0,e),d&&d(q.current,e)},nodeRef:q,timeout:"auto"===N?null:N},j,{children:(e,t)=>(0,x.jsx)(y,(0,r.A)({as:C,className:(0,a.A)(F.root,b,{entered:F.entered,exited:!M&&"0px"===Y&&F.hidden}[e]),style:(0,r.A)({[K?"minWidth":"minHeight"]:Y},P),ref:G},t,{ownerState:(0,r.A)({},L,{state:e}),children:(0,x.jsx)(S,{ownerState:(0,r.A)({},L,{state:e}),className:F.wrapper,ref:H,children:(0,x.jsx)(w,{ownerState:(0,r.A)({},L,{state:e}),className:F.wrapperInner,children:g})})}))}))}));k.muiSupportAuto=!0;const C=k},7951:(e,t,o)=>{o.d(t,{A:()=>s});var n=o(3575),r=o(8466),i=o(1848),a=o(5669);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.b)({props:e,name:"MuiContainer"})})},4519:(e,t,o)=>{o.d(t,{Ay:()=>d});var n=o(8168),r=o(6540),i=o(5669),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.b)({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]})}},5669:(e,t,o)=>{o.d(t,{b:()=>r}),o(6540);var n=o(2221);function r(e){return(0,n.b)(e)}o(4848)},643:(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(4661),c=o(8466),d=o(3025),p=o(973),u=o(538),h=o(5669),m=o(1848),v=o(8413),g=o(1609);function b(e){return(0,g.Ay)("MuiDialog",e)}const f=(0,v.A)("MuiDialog",["root","scrollPaper","scrollBody","container","paper","paperScrollPaper","paperScrollBody","paperWidthFalse","paperWidthXs","paperWidthSm","paperWidthMd","paperWidthLg","paperWidthXl","paperFullWidth","paperFullScreen"]),x=i.createContext({});var A=o(7419),y=o(4675),S=o(4848);const w=["aria-describedby","aria-labelledby","BackdropComponent","BackdropProps","children","className","disableEscapeKeyDown","fullScreen","fullWidth","maxWidth","onBackdropClick","onClick","onClose","open","PaperComponent","PaperProps","scroll","TransitionComponent","transitionDuration","TransitionProps"],k=(0,m.Ay)(A.A,{name:"MuiDialog",slot:"Backdrop",overrides:(e,t)=>t.backdrop})({zIndex:-1}),C=(0,m.Ay)(d.A,{name:"MuiDialog",slot:"Root",overridesResolver:(e,t)=>t.root})({"@media print":{position:"absolute !important"}}),R=(0,m.Ay)("div",{name:"MuiDialog",slot:"Container",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.container,t[`scroll${(0,c.A)(o.scroll)}`]]}})((({ownerState:e})=>(0,r.A)({height:"100%","@media print":{height:"auto"},outline:0},"paper"===e.scroll&&{display:"flex",justifyContent:"center",alignItems:"center"},"body"===e.scroll&&{overflowY:"auto",overflowX:"hidden",textAlign:"center","&::after":{content:'""',display:"inline-block",verticalAlign:"middle",height:"100%",width:"0"}}))),M=(0,m.Ay)(u.A,{name:"MuiDialog",slot:"Paper",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.paper,t[`scrollPaper${(0,c.A)(o.scroll)}`],t[`paperWidth${(0,c.A)(String(o.maxWidth))}`],o.fullWidth&&t.paperFullWidth,o.fullScreen&&t.paperFullScreen]}})((({theme:e,ownerState:t})=>(0,r.A)({margin:32,position:"relative",overflowY:"auto","@media print":{overflowY:"visible",boxShadow:"none"}},"paper"===t.scroll&&{display:"flex",flexDirection:"column",maxHeight:"calc(100% - 64px)"},"body"===t.scroll&&{display:"inline-block",verticalAlign:"middle",textAlign:"left"},!t.maxWidth&&{maxWidth:"calc(100% - 64px)"},"xs"===t.maxWidth&&{maxWidth:"px"===e.breakpoints.unit?Math.max(e.breakpoints.values.xs,444):`max(${e.breakpoints.values.xs}${e.breakpoints.unit}, 444px)`,[`&.${f.paperScrollBody}`]:{[e.breakpoints.down(Math.max(e.breakpoints.values.xs,444)+64)]:{maxWidth:"calc(100% - 64px)"}}},t.maxWidth&&"xs"!==t.maxWidth&&{maxWidth:`${e.breakpoints.values[t.maxWidth]}${e.breakpoints.unit}`,[`&.${f.paperScrollBody}`]:{[e.breakpoints.down(e.breakpoints.values[t.maxWidth]+64)]:{maxWidth:"calc(100% - 64px)"}}},t.fullWidth&&{width:"calc(100% - 64px)"},t.fullScreen&&{margin:0,width:"100%",maxWidth:"100%",height:"100%",maxHeight:"none",borderRadius:0,[`&.${f.paperScrollBody}`]:{margin:0,maxWidth:"100%"}}))),z=i.forwardRef((function(e,t){const o=(0,h.b)({props:e,name:"MuiDialog"}),d=(0,y.A)(),m={enter:d.transitions.duration.enteringScreen,exit:d.transitions.duration.leavingScreen},{"aria-describedby":v,"aria-labelledby":g,BackdropComponent:f,BackdropProps:A,children:z,className:$,disableEscapeKeyDown:E=!1,fullScreen:W=!1,fullWidth:D=!1,maxWidth:T="sm",onBackdropClick:I,onClick:P,onClose:N,open:B,PaperComponent:j=u.A,PaperProps:L={},scroll:F="paper",TransitionComponent:V=p.A,transitionDuration:X=m,TransitionProps:H}=o,O=(0,n.A)(o,w),Y=(0,r.A)({},o,{disableEscapeKeyDown:E,fullScreen:W,fullWidth:D,maxWidth:T,scroll:F}),K=(e=>{const{classes:t,scroll:o,maxWidth:n,fullWidth:r,fullScreen:i}=e,a={root:["root"],container:["container",`scroll${(0,c.A)(o)}`],paper:["paper",`paperScroll${(0,c.A)(o)}`,`paperWidth${(0,c.A)(String(n))}`,r&&"paperFullWidth",i&&"paperFullScreen"]};return(0,s.A)(a,b,t)})(Y),U=i.useRef(),q=(0,l.A)(g),G=i.useMemo((()=>({titleId:q})),[q]);return(0,S.jsx)(C,(0,r.A)({className:(0,a.A)(K.root,$),closeAfterTransition:!0,components:{Backdrop:k},componentsProps:{backdrop:(0,r.A)({transitionDuration:X,as:f},A)},disableEscapeKeyDown:E,onClose:N,open:B,ref:t,onClick:e=>{P&&P(e),U.current&&(U.current=null,I&&I(e),N&&N(e,"backdropClick"))},ownerState:Y},O,{children:(0,S.jsx)(V,(0,r.A)({appear:!0,in:B,timeout:X,role:"presentation"},H,{children:(0,S.jsx)(R,{className:(0,a.A)(K.container),onMouseDown:e=>{U.current=e.target===e.currentTarget},ownerState:Y,children:(0,S.jsx)(M,(0,r.A)({as:j,elevation:24,role:"dialog","aria-describedby":v,"aria-labelledby":q},L,{className:(0,a.A)(K.paper,L.className),ownerState:Y,children:(0,S.jsx)(x.Provider,{value:G,children:z})}))})}))}))}))},8763:(e,t,o)=>{o.d(t,{A:()=>g});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(5659),l=o(1848),c=o(5669),d=o(8413),p=o(1609);function u(e){return(0,p.Ay)("MuiDialogActions",e)}(0,d.A)("MuiDialogActions",["root","spacing"]);var h=o(4848);const m=["className","disableSpacing"],v=(0,l.Ay)("div",{name:"MuiDialogActions",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,!o.disableSpacing&&t.spacing]}})((({ownerState:e})=>(0,r.A)({display:"flex",alignItems:"center",padding:8,justifyContent:"flex-end",flex:"0 0 auto"},!e.disableSpacing&&{"& > :not(style) ~ :not(style)":{marginLeft:8}}))),g=i.forwardRef((function(e,t){const o=(0,c.b)({props:e,name:"MuiDialogActions"}),{className:i,disableSpacing:l=!1}=o,d=(0,n.A)(o,m),p=(0,r.A)({},o,{disableSpacing:l}),g=(e=>{const{classes:t,disableSpacing:o}=e,n={root:["root",!o&&"spacing"]};return(0,s.A)(n,u,t)})(p);return(0,h.jsx)(v,(0,r.A)({className:(0,a.A)(g.root,i),ownerState:p,ref:t},d))}))},7330:(e,t,o)=>{o.d(t,{A:()=>b});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(5659),l=o(1848),c=o(5669),d=o(8413),p=o(1609);function u(e){return(0,p.Ay)("MuiDialogContent",e)}(0,d.A)("MuiDialogContent",["root","dividers"]);const h=(0,d.A)("MuiDialogTitle",["root"]);var m=o(4848);const v=["className","dividers"],g=(0,l.Ay)("div",{name:"MuiDialogContent",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,o.dividers&&t.dividers]}})((({theme:e,ownerState:t})=>(0,r.A)({flex:"1 1 auto",WebkitOverflowScrolling:"touch",overflowY:"auto",padding:"20px 24px"},t.dividers?{padding:"16px 24px",borderTop:`1px solid ${(e.vars||e).palette.divider}`,borderBottom:`1px solid ${(e.vars||e).palette.divider}`}:{[`.${h.root} + &`]:{paddingTop:0}}))),b=i.forwardRef((function(e,t){const o=(0,c.b)({props:e,name:"MuiDialogContent"}),{className:i,dividers:l=!1}=o,d=(0,n.A)(o,v),p=(0,r.A)({},o,{dividers:l}),h=(e=>{const{classes:t,dividers:o}=e,n={root:["root",o&&"dividers"]};return(0,s.A)(n,u,t)})(p);return(0,m.jsx)(g,(0,r.A)({className:(0,a.A)(h.root,i),ownerState:p,ref:t},d))}))},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 p=["addEndListener","appear","children","easing","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","timeout","TransitionComponent"],u={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:g,easing:b,in:f,onEnter:x,onEntered:A,onEntering:y,onExit:S,onExited:w,onExiting:k,style:C,timeout:R=h,TransitionComponent:M=a.Ay}=e,z=(0,r.A)(e,p),$=i.useRef(null),E=(0,c.A)($,g.ref,t),W=e=>t=>{if(e){const o=$.current;void 0===t?e(o):e(o,t)}},D=W(y),T=W(((e,t)=>{(0,l.q)(e);const n=(0,l.c)({style:C,timeout:R,easing:b},{mode:"enter"});e.style.webkitTransition=o.transitions.create("opacity",n),e.style.transition=o.transitions.create("opacity",n),x&&x(e,t)})),I=W(A),P=W(k),N=W((e=>{const t=(0,l.c)({style:C,timeout:R,easing:b},{mode:"exit"});e.style.webkitTransition=o.transitions.create("opacity",t),e.style.transition=o.transitions.create("opacity",t),S&&S(e)})),B=W(w);return(0,d.jsx)(M,(0,n.A)({appear:v,in:f,nodeRef:$,onEnter:T,onEntered:I,onEntering:D,onExit:N,onExited:B,onExiting:P,addEndListener:e=>{m&&m($.current,e)},timeout:R},z,{children:(e,t)=>i.cloneElement(g,(0,n.A)({style:(0,n.A)({opacity:0,visibility:"exited"!==e||f?void 0:"hidden"},u[e],C,g.props.style),ref:E},t))}))}))}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q2hCLElBRUlPLEVBQWdCYixFQUE2QmIsR0FDN0M2QixFQUFnQmhCLEVBQTZCVixHQUM3Q3dCLEVBQWFkLEdBQTZCRyxJQUM5QyxNQUFNMEgsR0FBa0IsT0FBbUIsQ0FDekNyVCxRQUNBaEIsVUFDQWlCLFVBQ0MsQ0FDRG5ILEtBQU0sU0FFUjZTLEVBQUszTCxNQUFNc1QsaUJBQW1CN2EsRUFBTWlCLFlBQVlDLE9BQU8sVUFBVzBaLEdBQ2xFMUgsRUFBSzNMLE1BQU12RyxXQUFhaEIsRUFBTWlCLFlBQVlDLE9BQU8sVUFBVzBaLEdBQ3hEeEksR0FDRkEsRUFBT2MsRUFDVCxJQUVJWSxFQUFlZixFQUE2QnpNLEdBT2xELE9BQW9CLFNBQUtpTSxHQUFxQixPQUFTLENBQ3JEa0gsT0FBUUEsRUFDUnJULEdBQUlDLEVBQ0p5TSxRQUFrQ0EsRUFDbENiLFFBQVNtQixFQUNUbEIsVUFBVzBCLEVBQ1h6QixXQUFZbUIsRUFDWmxCLE9BQVF5QixFQUNSdk4sU0FBVXdOLEVBQ1Z6QixVQUFXMEIsRUFDWGhDLGVBaEIyQmlDLElBQ3ZCakMsR0FFRkEsRUFBZWUsRUFBUTdLLFFBQVMrTCxFQUNsQyxFQWFBek4sUUFBU0EsR0FDUnBDLEVBQU8sQ0FDUlIsU0FBVSxDQUFDME4sRUFBTzRDLElBQ0ksZUFBbUJ0USxHQUFVLE9BQVMsQ0FDeEQ0RCxPQUFPLE9BQVMsQ0FDZG1ULFFBQVMsRUFDVGpKLFdBQXNCLFdBQVZKLEdBQXVCaEwsT0FBb0IzSCxFQUFYLFVBQzNDZSxFQUFPNFIsR0FBUTlKLEVBQU81RCxFQUFTbkUsTUFBTStILE9BQ3hDakUsSUFBSzhMLEdBQ0o2RSxNQUdULEciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Cb3gvYm94Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Cb3gvQm94LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbi9idXR0b25DbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkdyb3VwL0J1dHRvbkdyb3VwQ29udGV4dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CdXR0b25Hcm91cC9CdXR0b25Hcm91cEJ1dHRvbkNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uL0J1dHRvbi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CdXR0b25CYXNlL3RvdWNoUmlwcGxlQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CdXR0b25CYXNlL1RvdWNoUmlwcGxlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvUmlwcGxlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvYnV0dG9uQmFzZUNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9CdXR0b25CYXNlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0NpcmN1bGFyUHJvZ3Jlc3MvY2lyY3VsYXJQcm9ncmVzc0NsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQ2lyY3VsYXJQcm9ncmVzcy9DaXJjdWxhclByb2dyZXNzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0NvbGxhcHNlL2NvbGxhcHNlQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Db2xsYXBzZS9Db2xsYXBzZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Db250YWluZXIvQ29udGFpbmVyLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Nzc0Jhc2VsaW5lL0Nzc0Jhc2VsaW5lLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0RlZmF1bHRQcm9wc1Byb3ZpZGVyL0RlZmF1bHRQcm9wc1Byb3ZpZGVyLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0RpYWxvZy9kaWFsb2dDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0RpYWxvZy9EaWFsb2dDb250ZXh0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0RpYWxvZy9EaWFsb2cuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRGlhbG9nQWN0aW9ucy9kaWFsb2dBY3Rpb25zQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9EaWFsb2dBY3Rpb25zL0RpYWxvZ0FjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRGlhbG9nQ29udGVudC9kaWFsb2dDb250ZW50Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9EaWFsb2dUaXRsZS9kaWFsb2dUaXRsZUNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRGlhbG9nQ29udGVudC9EaWFsb2dDb250ZW50LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0ZhZGUvRmFkZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuY29uc3QgYm94Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUJveCcsIFsncm9vdCddKTtcbmV4cG9ydCBkZWZhdWx0IGJveENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBjcmVhdGVCb3ggfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgdW5zdGFibGVfQ2xhc3NOYW1lR2VuZXJhdG9yIGFzIENsYXNzTmFtZUdlbmVyYXRvciB9IGZyb20gJy4uL2NsYXNzTmFtZSc7XG5pbXBvcnQgeyBjcmVhdGVUaGVtZSB9IGZyb20gJy4uL3N0eWxlcyc7XG5pbXBvcnQgVEhFTUVfSUQgZnJvbSAnLi4vc3R5bGVzL2lkZW50aWZpZXInO1xuaW1wb3J0IGJveENsYXNzZXMgZnJvbSAnLi9ib3hDbGFzc2VzJztcbmNvbnN0IGRlZmF1bHRUaGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG5jb25zdCBCb3ggPSBjcmVhdGVCb3goe1xuICB0aGVtZUlkOiBUSEVNRV9JRCxcbiAgZGVmYXVsdFRoZW1lLFxuICBkZWZhdWx0Q2xhc3NOYW1lOiBib3hDbGFzc2VzLnJvb3QsXG4gIGdlbmVyYXRlQ2xhc3NOYW1lOiBDbGFzc05hbWVHZW5lcmF0b3IuZ2VuZXJhdGVcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQm94LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQm94OyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0QnV0dG9uVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlCdXR0b24nLCBzbG90KTtcbn1cbmNvbnN0IGJ1dHRvbkNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlCdXR0b24nLCBbJ3Jvb3QnLCAndGV4dCcsICd0ZXh0SW5oZXJpdCcsICd0ZXh0UHJpbWFyeScsICd0ZXh0U2Vjb25kYXJ5JywgJ3RleHRTdWNjZXNzJywgJ3RleHRFcnJvcicsICd0ZXh0SW5mbycsICd0ZXh0V2FybmluZycsICdvdXRsaW5lZCcsICdvdXRsaW5lZEluaGVyaXQnLCAnb3V0bGluZWRQcmltYXJ5JywgJ291dGxpbmVkU2Vjb25kYXJ5JywgJ291dGxpbmVkU3VjY2VzcycsICdvdXRsaW5lZEVycm9yJywgJ291dGxpbmVkSW5mbycsICdvdXRsaW5lZFdhcm5pbmcnLCAnY29udGFpbmVkJywgJ2NvbnRhaW5lZEluaGVyaXQnLCAnY29udGFpbmVkUHJpbWFyeScsICdjb250YWluZWRTZWNvbmRhcnknLCAnY29udGFpbmVkU3VjY2VzcycsICdjb250YWluZWRFcnJvcicsICdjb250YWluZWRJbmZvJywgJ2NvbnRhaW5lZFdhcm5pbmcnLCAnZGlzYWJsZUVsZXZhdGlvbicsICdmb2N1c1Zpc2libGUnLCAnZGlzYWJsZWQnLCAnY29sb3JJbmhlcml0JywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdjb2xvclN1Y2Nlc3MnLCAnY29sb3JFcnJvcicsICdjb2xvckluZm8nLCAnY29sb3JXYXJuaW5nJywgJ3RleHRTaXplU21hbGwnLCAndGV4dFNpemVNZWRpdW0nLCAndGV4dFNpemVMYXJnZScsICdvdXRsaW5lZFNpemVTbWFsbCcsICdvdXRsaW5lZFNpemVNZWRpdW0nLCAnb3V0bGluZWRTaXplTGFyZ2UnLCAnY29udGFpbmVkU2l6ZVNtYWxsJywgJ2NvbnRhaW5lZFNpemVNZWRpdW0nLCAnY29udGFpbmVkU2l6ZUxhcmdlJywgJ3NpemVNZWRpdW0nLCAnc2l6ZVNtYWxsJywgJ3NpemVMYXJnZScsICdmdWxsV2lkdGgnLCAnc3RhcnRJY29uJywgJ2VuZEljb24nLCAnaWNvbicsICdpY29uU2l6ZVNtYWxsJywgJ2ljb25TaXplTWVkaXVtJywgJ2ljb25TaXplTGFyZ2UnXSk7XG5leHBvcnQgZGVmYXVsdCBidXR0b25DbGFzc2VzOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgQnV0dG9uR3JvdXBDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgQnV0dG9uR3JvdXBDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0J1dHRvbkdyb3VwQ29udGV4dCc7XG59XG5leHBvcnQgZGVmYXVsdCBCdXR0b25Hcm91cENvbnRleHQ7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBCdXR0b25Hcm91cEJ1dHRvbkNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgQnV0dG9uR3JvdXBCdXR0b25Db250ZXh0LmRpc3BsYXlOYW1lID0gJ0J1dHRvbkdyb3VwQnV0dG9uQ29udGV4dCc7XG59XG5leHBvcnQgZGVmYXVsdCBCdXR0b25Hcm91cEJ1dHRvbkNvbnRleHQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImNsYXNzTmFtZVwiLCBcImRpc2FibGVkXCIsIFwiZGlzYWJsZUVsZXZhdGlvblwiLCBcImRpc2FibGVGb2N1c1JpcHBsZVwiLCBcImVuZEljb25cIiwgXCJmb2N1c1Zpc2libGVDbGFzc05hbWVcIiwgXCJmdWxsV2lkdGhcIiwgXCJzaXplXCIsIFwic3RhcnRJY29uXCIsIFwidHlwZVwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgcmVzb2x2ZVByb3BzIGZyb20gJ0BtdWkvdXRpbHMvcmVzb2x2ZVByb3BzJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0vY29sb3JNYW5pcHVsYXRvcic7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IEJ1dHRvbkJhc2UgZnJvbSAnLi4vQnV0dG9uQmFzZSc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBidXR0b25DbGFzc2VzLCB7IGdldEJ1dHRvblV0aWxpdHlDbGFzcyB9IGZyb20gJy4vYnV0dG9uQ2xhc3Nlcyc7XG5pbXBvcnQgQnV0dG9uR3JvdXBDb250ZXh0IGZyb20gJy4uL0J1dHRvbkdyb3VwL0J1dHRvbkdyb3VwQ29udGV4dCc7XG5pbXBvcnQgQnV0dG9uR3JvdXBCdXR0b25Db250ZXh0IGZyb20gJy4uL0J1dHRvbkdyb3VwL0J1dHRvbkdyb3VwQnV0dG9uQ29udGV4dCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNvbG9yLFxuICAgIGRpc2FibGVFbGV2YXRpb24sXG4gICAgZnVsbFdpZHRoLFxuICAgIHNpemUsXG4gICAgdmFyaWFudCxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCB2YXJpYW50LCBgJHt2YXJpYW50fSR7Y2FwaXRhbGl6ZShjb2xvcil9YCwgYHNpemUke2NhcGl0YWxpemUoc2l6ZSl9YCwgYCR7dmFyaWFudH1TaXplJHtjYXBpdGFsaXplKHNpemUpfWAsIGBjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YCwgZGlzYWJsZUVsZXZhdGlvbiAmJiAnZGlzYWJsZUVsZXZhdGlvbicsIGZ1bGxXaWR0aCAmJiAnZnVsbFdpZHRoJ10sXG4gICAgbGFiZWw6IFsnbGFiZWwnXSxcbiAgICBzdGFydEljb246IFsnaWNvbicsICdzdGFydEljb24nLCBgaWNvblNpemUke2NhcGl0YWxpemUoc2l6ZSl9YF0sXG4gICAgZW5kSWNvbjogWydpY29uJywgJ2VuZEljb24nLCBgaWNvblNpemUke2NhcGl0YWxpemUoc2l6ZSl9YF1cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEJ1dHRvblV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgY2xhc3NlcywgY29tcG9zZWRDbGFzc2VzKTtcbn07XG5jb25zdCBjb21tb25JY29uU3R5bGVzID0gb3duZXJTdGF0ZSA9PiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgJyYgPiAqOm50aC1vZi10eXBlKDEpJzoge1xuICAgIGZvbnRTaXplOiAxOFxuICB9XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdtZWRpdW0nICYmIHtcbiAgJyYgPiAqOm50aC1vZi10eXBlKDEpJzoge1xuICAgIGZvbnRTaXplOiAyMFxuICB9XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdsYXJnZScgJiYge1xuICAnJiA+ICo6bnRoLW9mLXR5cGUoMSknOiB7XG4gICAgZm9udFNpemU6IDIyXG4gIH1cbn0pO1xuY29uc3QgQnV0dG9uUm9vdCA9IHN0eWxlZChCdXR0b25CYXNlLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlCdXR0b24nLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF0sIHN0eWxlc1tgJHtvd25lclN0YXRlLnZhcmlhbnR9JHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdLCBzdHlsZXNbYHNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5zaXplKX1gXSwgc3R5bGVzW2Ake293bmVyU3RhdGUudmFyaWFudH1TaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2l6ZSl9YF0sIG93bmVyU3RhdGUuY29sb3IgPT09ICdpbmhlcml0JyAmJiBzdHlsZXMuY29sb3JJbmhlcml0LCBvd25lclN0YXRlLmRpc2FibGVFbGV2YXRpb24gJiYgc3R5bGVzLmRpc2FibGVFbGV2YXRpb24sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHN0eWxlcy5mdWxsV2lkdGhdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICB2YXIgX3RoZW1lJHBhbGV0dGUkZ2V0Q29uLCBfdGhlbWUkcGFsZXR0ZTtcbiAgY29uc3QgaW5oZXJpdENvbnRhaW5lZEJhY2tncm91bmRDb2xvciA9IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IHRoZW1lLnBhbGV0dGUuZ3JleVszMDBdIDogdGhlbWUucGFsZXR0ZS5ncmV5WzgwMF07XG4gIGNvbnN0IGluaGVyaXRDb250YWluZWRIb3ZlckJhY2tncm91bmRDb2xvciA9IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IHRoZW1lLnBhbGV0dGUuZ3JleS5BMTAwIDogdGhlbWUucGFsZXR0ZS5ncmV5WzcwMF07XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgdGhlbWUudHlwb2dyYXBoeS5idXR0b24sIHtcbiAgICBtaW5XaWR0aDogNjQsXG4gICAgcGFkZGluZzogJzZweCAxNnB4JyxcbiAgICBib3JkZXJSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXMsXG4gICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKFsnYmFja2dyb3VuZC1jb2xvcicsICdib3gtc2hhZG93JywgJ2JvcmRlci1jb2xvcicsICdjb2xvciddLCB7XG4gICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRcbiAgICB9KSxcbiAgICAnJjpob3Zlcic6IF9leHRlbmRzKHtcbiAgICAgIHRleHREZWNvcmF0aW9uOiAnbm9uZScsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS50ZXh0LnByaW1hcnlDaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHl9KWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlLnRleHQucHJpbWFyeSwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5KSxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgICAgfVxuICAgIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ3RleHQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluQ2hhbm5lbH0gLyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5fSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHkpLFxuICAgICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnXG4gICAgICB9XG4gICAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gICAgICBib3JkZXI6IGAxcHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWlufWAsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluQ2hhbm5lbH0gLyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5fSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHkpLFxuICAgICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnXG4gICAgICB9XG4gICAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnY29udGFpbmVkJyAmJiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuQnV0dG9uLmluaGVyaXRDb250YWluZWRIb3ZlckJnIDogaW5oZXJpdENvbnRhaW5lZEhvdmVyQmFja2dyb3VuZENvbG9yLFxuICAgICAgYm94U2hhZG93OiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhZG93c1s0XSxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJveFNoYWRvdzogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYWRvd3NbMl0sXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZ3JleVszMDBdXG4gICAgICB9XG4gICAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnY29udGFpbmVkJyAmJiBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5kYXJrLFxuICAgICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluXG4gICAgICB9XG4gICAgfSksXG4gICAgJyY6YWN0aXZlJzogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgICAgYm94U2hhZG93OiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhZG93c1s4XVxuICAgIH0pLFxuICAgIFtgJi4ke2J1dHRvbkNsYXNzZXMuZm9jdXNWaXNpYmxlfWBdOiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnY29udGFpbmVkJyAmJiB7XG4gICAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzWzZdXG4gICAgfSksXG4gICAgW2AmLiR7YnV0dG9uQ2xhc3Nlcy5kaXNhYmxlZH1gXTogX2V4dGVuZHMoe1xuICAgICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZFxuICAgIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gICAgICBib3JkZXI6IGAxcHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRCYWNrZ3JvdW5kfWBcbiAgICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIHtcbiAgICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWQsXG4gICAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzWzBdLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRCYWNrZ3JvdW5kXG4gICAgfSlcbiAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAndGV4dCcgJiYge1xuICAgIHBhZGRpbmc6ICc2cHggOHB4J1xuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICd0ZXh0JyAmJiBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluXG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gICAgcGFkZGluZzogJzVweCAxNXB4JyxcbiAgICBib3JkZXI6ICcxcHggc29saWQgY3VycmVudENvbG9yJ1xuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbixcbiAgICBib3JkZXI6IHRoZW1lLnZhcnMgPyBgMXB4IHNvbGlkIHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbkNoYW5uZWx9IC8gMC41KWAgOiBgMXB4IHNvbGlkICR7YWxwaGEodGhlbWUucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluLCAwLjUpfWBcbiAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnY29udGFpbmVkJyAmJiB7XG4gICAgY29sb3I6IHRoZW1lLnZhcnMgP1xuICAgIC8vIHRoaXMgaXMgc2FmZSBiZWNhdXNlIGdyZXkgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gZGVmYXVsdCBsaWdodC9kYXJrIG1vZGVcbiAgICB0aGVtZS52YXJzLnBhbGV0dGUudGV4dC5wcmltYXJ5IDogKF90aGVtZSRwYWxldHRlJGdldENvbiA9IChfdGhlbWUkcGFsZXR0ZSA9IHRoZW1lLnBhbGV0dGUpLmdldENvbnRyYXN0VGV4dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSRwYWxldHRlJGdldENvbi5jYWxsKF90aGVtZSRwYWxldHRlLCB0aGVtZS5wYWxldHRlLmdyZXlbMzAwXSksXG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gdGhlbWUudmFycy5wYWxldHRlLkJ1dHRvbi5pbmhlcml0Q29udGFpbmVkQmcgOiBpbmhlcml0Q29udGFpbmVkQmFja2dyb3VuZENvbG9yLFxuICAgIGJveFNoYWRvdzogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYWRvd3NbMl1cbiAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnY29udGFpbmVkJyAmJiBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5jb250cmFzdFRleHQsXG4gICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluXG4gIH0sIG93bmVyU3RhdGUuY29sb3IgPT09ICdpbmhlcml0JyAmJiB7XG4gICAgY29sb3I6ICdpbmhlcml0JyxcbiAgICBib3JkZXJDb2xvcjogJ2N1cnJlbnRDb2xvcidcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ3RleHQnICYmIHtcbiAgICBwYWRkaW5nOiAnNHB4IDVweCcsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxMylcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnbGFyZ2UnICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ3RleHQnICYmIHtcbiAgICBwYWRkaW5nOiAnOHB4IDExcHgnLFxuICAgIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMTUpXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICAgIHBhZGRpbmc6ICczcHggOXB4JyxcbiAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDEzKVxuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdsYXJnZScgJiYgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgICBwYWRkaW5nOiAnN3B4IDIxcHgnLFxuICAgIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMTUpXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIHtcbiAgICBwYWRkaW5nOiAnNHB4IDEwcHgnLFxuICAgIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMTMpXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ2xhcmdlJyAmJiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIHtcbiAgICBwYWRkaW5nOiAnOHB4IDIycHgnLFxuICAgIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMTUpXG4gIH0sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHtcbiAgICB3aWR0aDogJzEwMCUnXG4gIH0pO1xufSwgKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gb3duZXJTdGF0ZS5kaXNhYmxlRWxldmF0aW9uICYmIHtcbiAgYm94U2hhZG93OiAnbm9uZScsXG4gICcmOmhvdmVyJzoge1xuICAgIGJveFNoYWRvdzogJ25vbmUnXG4gIH0sXG4gIFtgJi4ke2J1dHRvbkNsYXNzZXMuZm9jdXNWaXNpYmxlfWBdOiB7XG4gICAgYm94U2hhZG93OiAnbm9uZSdcbiAgfSxcbiAgJyY6YWN0aXZlJzoge1xuICAgIGJveFNoYWRvdzogJ25vbmUnXG4gIH0sXG4gIFtgJi4ke2J1dHRvbkNsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBib3hTaGFkb3c6ICdub25lJ1xuICB9XG59KTtcbmNvbnN0IEJ1dHRvblN0YXJ0SWNvbiA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aUJ1dHRvbicsXG4gIHNsb3Q6ICdTdGFydEljb24nLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnN0YXJ0SWNvbiwgc3R5bGVzW2BpY29uU2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNpemUpfWBdXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnaW5oZXJpdCcsXG4gIG1hcmdpblJpZ2h0OiA4LFxuICBtYXJnaW5MZWZ0OiAtNFxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgbWFyZ2luTGVmdDogLTJcbn0sIGNvbW1vbkljb25TdHlsZXMob3duZXJTdGF0ZSkpKTtcbmNvbnN0IEJ1dHRvbkVuZEljb24gPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlCdXR0b24nLFxuICBzbG90OiAnRW5kSWNvbicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuZW5kSWNvbiwgc3R5bGVzW2BpY29uU2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNpemUpfWBdXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnaW5oZXJpdCcsXG4gIG1hcmdpblJpZ2h0OiAtNCxcbiAgbWFyZ2luTGVmdDogOFxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgbWFyZ2luUmlnaHQ6IC0yXG59LCBjb21tb25JY29uU3R5bGVzKG93bmVyU3RhdGUpKSk7XG5jb25zdCBCdXR0b24gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBCdXR0b24oaW5Qcm9wcywgcmVmKSB7XG4gIC8vIHByb3BzIHByaW9yaXR5OiBgaW5Qcm9wc2AgPiBgY29udGV4dFByb3BzYCA+IGB0aGVtZURlZmF1bHRQcm9wc2BcbiAgY29uc3QgY29udGV4dFByb3BzID0gUmVhY3QudXNlQ29udGV4dChCdXR0b25Hcm91cENvbnRleHQpO1xuICBjb25zdCBidXR0b25Hcm91cEJ1dHRvbkNvbnRleHRQb3NpdGlvbkNsYXNzTmFtZSA9IFJlYWN0LnVzZUNvbnRleHQoQnV0dG9uR3JvdXBCdXR0b25Db250ZXh0KTtcbiAgY29uc3QgcmVzb2x2ZWRQcm9wcyA9IHJlc29sdmVQcm9wcyhjb250ZXh0UHJvcHMsIGluUHJvcHMpO1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IHJlc29sdmVkUHJvcHMsXG4gICAgbmFtZTogJ011aUJ1dHRvbidcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgICBjb21wb25lbnQgPSAnYnV0dG9uJyxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICBkaXNhYmxlRWxldmF0aW9uID0gZmFsc2UsXG4gICAgICBkaXNhYmxlRm9jdXNSaXBwbGUgPSBmYWxzZSxcbiAgICAgIGVuZEljb246IGVuZEljb25Qcm9wLFxuICAgICAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lLFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICBzaXplID0gJ21lZGl1bScsXG4gICAgICBzdGFydEljb246IHN0YXJ0SWNvblByb3AsXG4gICAgICB0eXBlLFxuICAgICAgdmFyaWFudCA9ICd0ZXh0J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3IsXG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVkLFxuICAgIGRpc2FibGVFbGV2YXRpb24sXG4gICAgZGlzYWJsZUZvY3VzUmlwcGxlLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBzaXplLFxuICAgIHR5cGUsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBzdGFydEljb24gPSBzdGFydEljb25Qcm9wICYmIC8qI19fUFVSRV9fKi9fanN4KEJ1dHRvblN0YXJ0SWNvbiwge1xuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5zdGFydEljb24sXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjaGlsZHJlbjogc3RhcnRJY29uUHJvcFxuICB9KTtcbiAgY29uc3QgZW5kSWNvbiA9IGVuZEljb25Qcm9wICYmIC8qI19fUFVSRV9fKi9fanN4KEJ1dHRvbkVuZEljb24sIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMuZW5kSWNvbixcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNoaWxkcmVuOiBlbmRJY29uUHJvcFxuICB9KTtcbiAgY29uc3QgcG9zaXRpb25DbGFzc05hbWUgPSBidXR0b25Hcm91cEJ1dHRvbkNvbnRleHRQb3NpdGlvbkNsYXNzTmFtZSB8fCAnJztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhCdXR0b25Sb290LCBfZXh0ZW5kcyh7XG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY29udGV4dFByb3BzLmNsYXNzTmFtZSwgY2xhc3Nlcy5yb290LCBjbGFzc05hbWUsIHBvc2l0aW9uQ2xhc3NOYW1lKSxcbiAgICBjb21wb25lbnQ6IGNvbXBvbmVudCxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgZm9jdXNSaXBwbGU6ICFkaXNhYmxlRm9jdXNSaXBwbGUsXG4gICAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMuZm9jdXNWaXNpYmxlLCBmb2N1c1Zpc2libGVDbGFzc05hbWUpLFxuICAgIHJlZjogcmVmLFxuICAgIHR5cGU6IHR5cGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjbGFzc2VzOiBjbGFzc2VzLFxuICAgIGNoaWxkcmVuOiBbc3RhcnRJY29uLCBjaGlsZHJlbiwgZW5kSWNvbl1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBCdXR0b24ucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBAZGVmYXVsdCAncHJpbWFyeSdcbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2luaGVyaXQnLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnc3VjY2VzcycsICdlcnJvcicsICdpbmZvJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBubyBlbGV2YXRpb24gaXMgdXNlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVFbGV2YXRpb246IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgIGtleWJvYXJkIGZvY3VzIHJpcHBsZSBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVGb2N1c1JpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgZWZmZWN0IGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiDimqDvuI8gV2l0aG91dCBhIHJpcHBsZSB0aGVyZSBpcyBubyBzdHlsaW5nIGZvciA6Zm9jdXMtdmlzaWJsZSBieSBkZWZhdWx0LiBCZSBzdXJlXG4gICAqIHRvIGhpZ2hsaWdodCB0aGUgZWxlbWVudCBieSBhcHBseWluZyBzZXBhcmF0ZSBzdHlsZXMgd2l0aCB0aGUgYC5NdWktZm9jdXNWaXNpYmxlYCBjbGFzcy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRWxlbWVudCBwbGFjZWQgYWZ0ZXIgdGhlIGNoaWxkcmVuLlxuICAgKi9cbiAgZW5kSWNvbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBidXR0b24gd2lsbCB0YWtlIHVwIHRoZSBmdWxsIHdpZHRoIG9mIGl0cyBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIFVSTCB0byBsaW5rIHRvIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkLlxuICAgKiBJZiBkZWZpbmVkLCBhbiBgYWAgZWxlbWVudCB3aWxsIGJlIHVzZWQgYXMgdGhlIHJvb3Qgbm9kZS5cbiAgICovXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBgc21hbGxgIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGRlbnNlIGJ1dHRvbiBzdHlsaW5nLlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydzbWFsbCcsICdtZWRpdW0nLCAnbGFyZ2UnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIEVsZW1lbnQgcGxhY2VkIGJlZm9yZSB0aGUgY2hpbGRyZW4uXG4gICAqL1xuICBzdGFydEljb246IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYnV0dG9uJywgJ3Jlc2V0JywgJ3N1Ym1pdCddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKiBAZGVmYXVsdCAndGV4dCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnY29udGFpbmVkJywgJ291dGxpbmVkJywgJ3RleHQnXSksIFByb3BUeXBlcy5zdHJpbmddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbjsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRvdWNoUmlwcGxlVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUb3VjaFJpcHBsZScsIHNsb3QpO1xufVxuY29uc3QgdG91Y2hSaXBwbGVDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpVG91Y2hSaXBwbGUnLCBbJ3Jvb3QnLCAncmlwcGxlJywgJ3JpcHBsZVZpc2libGUnLCAncmlwcGxlUHVsc2F0ZScsICdjaGlsZCcsICdjaGlsZExlYXZpbmcnLCAnY2hpbGRQdWxzYXRlJ10pO1xuZXhwb3J0IGRlZmF1bHQgdG91Y2hSaXBwbGVDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNlbnRlclwiLCBcImNsYXNzZXNcIiwgXCJjbGFzc05hbWVcIl07XG5sZXQgXyA9IHQgPT4gdCxcbiAgX3QsXG4gIF90MixcbiAgX3QzLFxuICBfdDQ7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgVHJhbnNpdGlvbkdyb3VwIH0gZnJvbSAncmVhY3QtdHJhbnNpdGlvbi1ncm91cCc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGtleWZyYW1lcyB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCB1c2VUaW1lb3V0IGZyb20gJ0BtdWkvdXRpbHMvdXNlVGltZW91dCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IFJpcHBsZSBmcm9tICcuL1JpcHBsZSc7XG5pbXBvcnQgdG91Y2hSaXBwbGVDbGFzc2VzIGZyb20gJy4vdG91Y2hSaXBwbGVDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBEVVJBVElPTiA9IDU1MDtcbmV4cG9ydCBjb25zdCBERUxBWV9SSVBQTEUgPSA4MDtcbmNvbnN0IGVudGVyS2V5ZnJhbWUgPSBrZXlmcmFtZXMoX3QgfHwgKF90ID0gX2BcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XG4gICAgb3BhY2l0eTogMC4xO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBvcGFjaXR5OiAwLjM7XG4gIH1cbmApKTtcbmNvbnN0IGV4aXRLZXlmcmFtZSA9IGtleWZyYW1lcyhfdDIgfHwgKF90MiA9IF9gXG4gIDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuYCkpO1xuY29uc3QgcHVsc2F0ZUtleWZyYW1lID0ga2V5ZnJhbWVzKF90MyB8fCAoX3QzID0gX2BcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cblxuICA1MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45Mik7XG4gIH1cblxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG5gKSk7XG5leHBvcnQgY29uc3QgVG91Y2hSaXBwbGVSb290ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpVG91Y2hSaXBwbGUnLFxuICBzbG90OiAnUm9vdCdcbn0pKHtcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB6SW5kZXg6IDAsXG4gIHRvcDogMCxcbiAgcmlnaHQ6IDAsXG4gIGJvdHRvbTogMCxcbiAgbGVmdDogMCxcbiAgYm9yZGVyUmFkaXVzOiAnaW5oZXJpdCdcbn0pO1xuXG4vLyBUaGlzIGBzdHlsZWQoKWAgZnVuY3Rpb24gaW52b2tlcyBrZXlmcmFtZXMuIGBzdHlsZWQtY29tcG9uZW50c2Agb25seSBzdXBwb3J0cyBrZXlmcmFtZXNcbi8vIGluIHN0cmluZyB0ZW1wbGF0ZXMuIERvIG5vdCBjb252ZXJ0IHRoZXNlIHN0eWxlcyBpbiBKUyBvYmplY3QgYXMgaXQgd2lsbCBicmVhay5cbmV4cG9ydCBjb25zdCBUb3VjaFJpcHBsZVJpcHBsZSA9IHN0eWxlZChSaXBwbGUsIHtcbiAgbmFtZTogJ011aVRvdWNoUmlwcGxlJyxcbiAgc2xvdDogJ1JpcHBsZSdcbn0pKF90NCB8fCAoX3Q0ID0gX2BcbiAgb3BhY2l0eTogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuXG4gICYuJHswfSB7XG4gICAgb3BhY2l0eTogMC4zO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgYW5pbWF0aW9uLW5hbWU6ICR7MH07XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAkezB9bXM7XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogJHswfTtcbiAgfVxuXG4gICYuJHswfSB7XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAkezB9bXM7XG4gIH1cblxuICAmIC4kezB9IHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICB9XG5cbiAgJiAuJHswfSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICBhbmltYXRpb24tbmFtZTogJHswfTtcbiAgICBhbmltYXRpb24tZHVyYXRpb246ICR7MH1tcztcbiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkezB9O1xuICB9XG5cbiAgJiAuJHswfSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIC8qIEBub2ZsaXAgKi9cbiAgICBsZWZ0OiAwcHg7XG4gICAgdG9wOiAwO1xuICAgIGFuaW1hdGlvbi1uYW1lOiAkezB9O1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMjUwMG1zO1xuICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICR7MH07XG4gICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAyMDBtcztcbiAgfVxuYCksIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGVWaXNpYmxlLCBlbnRlcktleWZyYW1lLCBEVVJBVElPTiwgKHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlSW5PdXQsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGVQdWxzYXRlLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlciwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGRMZWF2aW5nLCBleGl0S2V5ZnJhbWUsIERVUkFUSU9OLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VJbk91dCwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkUHVsc2F0ZSwgcHVsc2F0ZUtleWZyYW1lLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VJbk91dCk7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqXG4gKiBUT0RPIHY1OiBNYWtlIHByaXZhdGVcbiAqL1xuY29uc3QgVG91Y2hSaXBwbGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBUb3VjaFJpcHBsZShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlUb3VjaFJpcHBsZSdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNlbnRlcjogY2VudGVyUHJvcCA9IGZhbHNlLFxuICAgICAgY2xhc3NlcyA9IHt9LFxuICAgICAgY2xhc3NOYW1lXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IFtyaXBwbGVzLCBzZXRSaXBwbGVzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgY29uc3QgbmV4dEtleSA9IFJlYWN0LnVzZVJlZigwKTtcbiAgY29uc3QgcmlwcGxlQ2FsbGJhY2sgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJpcHBsZUNhbGxiYWNrLmN1cnJlbnQpIHtcbiAgICAgIHJpcHBsZUNhbGxiYWNrLmN1cnJlbnQoKTtcbiAgICAgIHJpcHBsZUNhbGxiYWNrLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfSwgW3JpcHBsZXNdKTtcblxuICAvLyBVc2VkIHRvIGZpbHRlciBvdXQgbW91c2UgZW11bGF0ZWQgZXZlbnRzIG9uIG1vYmlsZS5cbiAgY29uc3QgaWdub3JpbmdNb3VzZURvd24gPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICAvLyBXZSB1c2UgYSB0aW1lciBpbiBvcmRlciB0byBvbmx5IHNob3cgdGhlIHJpcHBsZXMgZm9yIHRvdWNoIFwiY2xpY2tcIiBsaWtlIGV2ZW50cy5cbiAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5IHRoZSByaXBwbGUgZm9yIHRvdWNoIHNjcm9sbCBldmVudHMuXG4gIGNvbnN0IHN0YXJ0VGltZXIgPSB1c2VUaW1lb3V0KCk7XG5cbiAgLy8gVGhpcyBpcyB0aGUgaG9vayBjYWxsZWQgb25jZSB0aGUgcHJldmlvdXMgdGltZW91dCBpcyByZWFkeS5cbiAgY29uc3Qgc3RhcnRUaW1lckNvbW1pdCA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgY29udGFpbmVyID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBzdGFydENvbW1pdCA9IFJlYWN0LnVzZUNhbGxiYWNrKHBhcmFtcyA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcHVsc2F0ZSxcbiAgICAgIHJpcHBsZVgsXG4gICAgICByaXBwbGVZLFxuICAgICAgcmlwcGxlU2l6ZSxcbiAgICAgIGNiXG4gICAgfSA9IHBhcmFtcztcbiAgICBzZXRSaXBwbGVzKG9sZFJpcHBsZXMgPT4gWy4uLm9sZFJpcHBsZXMsIC8qI19fUFVSRV9fKi9fanN4KFRvdWNoUmlwcGxlUmlwcGxlLCB7XG4gICAgICBjbGFzc2VzOiB7XG4gICAgICAgIHJpcHBsZTogY2xzeChjbGFzc2VzLnJpcHBsZSwgdG91Y2hSaXBwbGVDbGFzc2VzLnJpcHBsZSksXG4gICAgICAgIHJpcHBsZVZpc2libGU6IGNsc3goY2xhc3Nlcy5yaXBwbGVWaXNpYmxlLCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlVmlzaWJsZSksXG4gICAgICAgIHJpcHBsZVB1bHNhdGU6IGNsc3goY2xhc3Nlcy5yaXBwbGVQdWxzYXRlLCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlUHVsc2F0ZSksXG4gICAgICAgIGNoaWxkOiBjbHN4KGNsYXNzZXMuY2hpbGQsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZCksXG4gICAgICAgIGNoaWxkTGVhdmluZzogY2xzeChjbGFzc2VzLmNoaWxkTGVhdmluZywgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkTGVhdmluZyksXG4gICAgICAgIGNoaWxkUHVsc2F0ZTogY2xzeChjbGFzc2VzLmNoaWxkUHVsc2F0ZSwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkUHVsc2F0ZSlcbiAgICAgIH0sXG4gICAgICB0aW1lb3V0OiBEVVJBVElPTixcbiAgICAgIHB1bHNhdGU6IHB1bHNhdGUsXG4gICAgICByaXBwbGVYOiByaXBwbGVYLFxuICAgICAgcmlwcGxlWTogcmlwcGxlWSxcbiAgICAgIHJpcHBsZVNpemU6IHJpcHBsZVNpemVcbiAgICB9LCBuZXh0S2V5LmN1cnJlbnQpXSk7XG4gICAgbmV4dEtleS5jdXJyZW50ICs9IDE7XG4gICAgcmlwcGxlQ2FsbGJhY2suY3VycmVudCA9IGNiO1xuICB9LCBbY2xhc3Nlc10pO1xuICBjb25zdCBzdGFydCA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCA9IHt9LCBvcHRpb25zID0ge30sIGNiID0gKCkgPT4ge30pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBwdWxzYXRlID0gZmFsc2UsXG4gICAgICBjZW50ZXIgPSBjZW50ZXJQcm9wIHx8IG9wdGlvbnMucHVsc2F0ZSxcbiAgICAgIGZha2VFbGVtZW50ID0gZmFsc2UgLy8gRm9yIHRlc3QgcHVycG9zZXNcbiAgICB9ID0gb3B0aW9ucztcbiAgICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gJ21vdXNlZG93bicgJiYgaWdub3JpbmdNb3VzZURvd24uY3VycmVudCkge1xuICAgICAgaWdub3JpbmdNb3VzZURvd24uY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gJ3RvdWNoc3RhcnQnKSB7XG4gICAgICBpZ25vcmluZ01vdXNlRG93bi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudCA9IGZha2VFbGVtZW50ID8gbnVsbCA6IGNvbnRhaW5lci5jdXJyZW50O1xuICAgIGNvbnN0IHJlY3QgPSBlbGVtZW50ID8gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogMCxcbiAgICAgIHRvcDogMFxuICAgIH07XG5cbiAgICAvLyBHZXQgdGhlIHNpemUgb2YgdGhlIHJpcHBsZVxuICAgIGxldCByaXBwbGVYO1xuICAgIGxldCByaXBwbGVZO1xuICAgIGxldCByaXBwbGVTaXplO1xuICAgIGlmIChjZW50ZXIgfHwgZXZlbnQgPT09IHVuZGVmaW5lZCB8fCBldmVudC5jbGllbnRYID09PSAwICYmIGV2ZW50LmNsaWVudFkgPT09IDAgfHwgIWV2ZW50LmNsaWVudFggJiYgIWV2ZW50LnRvdWNoZXMpIHtcbiAgICAgIHJpcHBsZVggPSBNYXRoLnJvdW5kKHJlY3Qud2lkdGggLyAyKTtcbiAgICAgIHJpcHBsZVkgPSBNYXRoLnJvdW5kKHJlY3QuaGVpZ2h0IC8gMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2xpZW50WCxcbiAgICAgICAgY2xpZW50WVxuICAgICAgfSA9IGV2ZW50LnRvdWNoZXMgJiYgZXZlbnQudG91Y2hlcy5sZW5ndGggPiAwID8gZXZlbnQudG91Y2hlc1swXSA6IGV2ZW50O1xuICAgICAgcmlwcGxlWCA9IE1hdGgucm91bmQoY2xpZW50WCAtIHJlY3QubGVmdCk7XG4gICAgICByaXBwbGVZID0gTWF0aC5yb3VuZChjbGllbnRZIC0gcmVjdC50b3ApO1xuICAgIH1cbiAgICBpZiAoY2VudGVyKSB7XG4gICAgICByaXBwbGVTaXplID0gTWF0aC5zcXJ0KCgyICogcmVjdC53aWR0aCAqKiAyICsgcmVjdC5oZWlnaHQgKiogMikgLyAzKTtcblxuICAgICAgLy8gRm9yIHNvbWUgcmVhc29uIHRoZSBhbmltYXRpb24gaXMgYnJva2VuIG9uIE1vYmlsZSBDaHJvbWUgaWYgdGhlIHNpemUgaXMgZXZlbi5cbiAgICAgIGlmIChyaXBwbGVTaXplICUgMiA9PT0gMCkge1xuICAgICAgICByaXBwbGVTaXplICs9IDE7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNpemVYID0gTWF0aC5tYXgoTWF0aC5hYnMoKGVsZW1lbnQgPyBlbGVtZW50LmNsaWVudFdpZHRoIDogMCkgLSByaXBwbGVYKSwgcmlwcGxlWCkgKiAyICsgMjtcbiAgICAgIGNvbnN0IHNpemVZID0gTWF0aC5tYXgoTWF0aC5hYnMoKGVsZW1lbnQgPyBlbGVtZW50LmNsaWVudEhlaWdodCA6IDApIC0gcmlwcGxlWSksIHJpcHBsZVkpICogMiArIDI7XG4gICAgICByaXBwbGVTaXplID0gTWF0aC5zcXJ0KHNpemVYICoqIDIgKyBzaXplWSAqKiAyKTtcbiAgICB9XG5cbiAgICAvLyBUb3VjaGUgZGV2aWNlc1xuICAgIGlmIChldmVudCAhPSBudWxsICYmIGV2ZW50LnRvdWNoZXMpIHtcbiAgICAgIC8vIGNoZWNrIHRoYXQgdGhpcyBpc24ndCBhbm90aGVyIHRvdWNoc3RhcnQgZHVlIHRvIG11bHRpdG91Y2hcbiAgICAgIC8vIG90aGVyd2lzZSB3ZSB3aWxsIG9ubHkgY2xlYXIgYSBzaW5nbGUgdGltZXIgd2hlbiB1bm1vdW50aW5nIHdoaWxlIHR3b1xuICAgICAgLy8gYXJlIHJ1bm5pbmdcbiAgICAgIGlmIChzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgLy8gUHJlcGFyZSB0aGUgcmlwcGxlIGVmZmVjdC5cbiAgICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID0gKCkgPT4ge1xuICAgICAgICAgIHN0YXJ0Q29tbWl0KHtcbiAgICAgICAgICAgIHB1bHNhdGUsXG4gICAgICAgICAgICByaXBwbGVYLFxuICAgICAgICAgICAgcmlwcGxlWSxcbiAgICAgICAgICAgIHJpcHBsZVNpemUsXG4gICAgICAgICAgICBjYlxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICAvLyBEZWxheSB0aGUgZXhlY3V0aW9uIG9mIHRoZSByaXBwbGUgZWZmZWN0LlxuICAgICAgICAvLyBXZSBoYXZlIHRvIG1ha2UgYSB0cmFkZW9mZiB3aXRoIHRoaXMgZGVsYXkgdmFsdWUuXG4gICAgICAgIHN0YXJ0VGltZXIuc3RhcnQoREVMQVlfUklQUExFLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXJ0VGltZXJDb21taXQuY3VycmVudCkge1xuICAgICAgICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50KCk7XG4gICAgICAgICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0Q29tbWl0KHtcbiAgICAgICAgcHVsc2F0ZSxcbiAgICAgICAgcmlwcGxlWCxcbiAgICAgICAgcmlwcGxlWSxcbiAgICAgICAgcmlwcGxlU2l6ZSxcbiAgICAgICAgY2JcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2NlbnRlclByb3AsIHN0YXJ0Q29tbWl0LCBzdGFydFRpbWVyXSk7XG4gIGNvbnN0IHB1bHNhdGUgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc3RhcnQoe30sIHtcbiAgICAgIHB1bHNhdGU6IHRydWVcbiAgICB9KTtcbiAgfSwgW3N0YXJ0XSk7XG4gIGNvbnN0IHN0b3AgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQsIGNiKSA9PiB7XG4gICAgc3RhcnRUaW1lci5jbGVhcigpO1xuXG4gICAgLy8gVGhlIHRvdWNoIGludGVyYWN0aW9uIG9jY3VycyB0b28gcXVpY2tseS5cbiAgICAvLyBXZSBzdGlsbCB3YW50IHRvIHNob3cgcmlwcGxlIGVmZmVjdC5cbiAgICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gJ3RvdWNoZW5kJyAmJiBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQpIHtcbiAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCgpO1xuICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID0gbnVsbDtcbiAgICAgIHN0YXJ0VGltZXIuc3RhcnQoMCwgKCkgPT4ge1xuICAgICAgICBzdG9wKGV2ZW50LCBjYik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID0gbnVsbDtcbiAgICBzZXRSaXBwbGVzKG9sZFJpcHBsZXMgPT4ge1xuICAgICAgaWYgKG9sZFJpcHBsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gb2xkUmlwcGxlcy5zbGljZSgxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvbGRSaXBwbGVzO1xuICAgIH0pO1xuICAgIHJpcHBsZUNhbGxiYWNrLmN1cnJlbnQgPSBjYjtcbiAgfSwgW3N0YXJ0VGltZXJdKTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG4gICAgcHVsc2F0ZSxcbiAgICBzdGFydCxcbiAgICBzdG9wXG4gIH0pLCBbcHVsc2F0ZSwgc3RhcnQsIHN0b3BdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFRvdWNoUmlwcGxlUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeCh0b3VjaFJpcHBsZUNsYXNzZXMucm9vdCwgY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIHJlZjogY29udGFpbmVyXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFRyYW5zaXRpb25Hcm91cCwge1xuICAgICAgY29tcG9uZW50OiBudWxsLFxuICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgIGNoaWxkcmVuOiByaXBwbGVzXG4gICAgfSlcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUb3VjaFJpcHBsZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgc3RhcnRzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIGNvbXBvbmVudFxuICAgKiByYXRoZXIgdGhhbiBhdCB0aGUgcG9pbnQgb2YgaW50ZXJhY3Rpb24uXG4gICAqL1xuICBjZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFRvdWNoUmlwcGxlOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBSaXBwbGUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZSxcbiAgICBjbGFzc2VzLFxuICAgIHB1bHNhdGUgPSBmYWxzZSxcbiAgICByaXBwbGVYLFxuICAgIHJpcHBsZVksXG4gICAgcmlwcGxlU2l6ZSxcbiAgICBpbjogaW5Qcm9wLFxuICAgIG9uRXhpdGVkLFxuICAgIHRpbWVvdXRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBbbGVhdmluZywgc2V0TGVhdmluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHJpcHBsZUNsYXNzTmFtZSA9IGNsc3goY2xhc3NOYW1lLCBjbGFzc2VzLnJpcHBsZSwgY2xhc3Nlcy5yaXBwbGVWaXNpYmxlLCBwdWxzYXRlICYmIGNsYXNzZXMucmlwcGxlUHVsc2F0ZSk7XG4gIGNvbnN0IHJpcHBsZVN0eWxlcyA9IHtcbiAgICB3aWR0aDogcmlwcGxlU2l6ZSxcbiAgICBoZWlnaHQ6IHJpcHBsZVNpemUsXG4gICAgdG9wOiAtKHJpcHBsZVNpemUgLyAyKSArIHJpcHBsZVksXG4gICAgbGVmdDogLShyaXBwbGVTaXplIC8gMikgKyByaXBwbGVYXG4gIH07XG4gIGNvbnN0IGNoaWxkQ2xhc3NOYW1lID0gY2xzeChjbGFzc2VzLmNoaWxkLCBsZWF2aW5nICYmIGNsYXNzZXMuY2hpbGRMZWF2aW5nLCBwdWxzYXRlICYmIGNsYXNzZXMuY2hpbGRQdWxzYXRlKTtcbiAgaWYgKCFpblByb3AgJiYgIWxlYXZpbmcpIHtcbiAgICBzZXRMZWF2aW5nKHRydWUpO1xuICB9XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpblByb3AgJiYgb25FeGl0ZWQgIT0gbnVsbCkge1xuICAgICAgLy8gcmVhY3QtdHJhbnNpdGlvbi1ncm91cCNvbkV4aXRlZFxuICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dChvbkV4aXRlZCwgdGltZW91dCk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtvbkV4aXRlZCwgaW5Qcm9wLCB0aW1lb3V0XSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogcmlwcGxlQ2xhc3NOYW1lLFxuICAgIHN0eWxlOiByaXBwbGVTdHlsZXMsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNoaWxkQ2xhc3NOYW1lXG4gICAgfSlcbiAgfSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBSaXBwbGUucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBAaWdub3JlIC0gaW5qZWN0ZWQgZnJvbSBUcmFuc2l0aW9uR3JvdXBcbiAgICovXG4gIGluOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEBpZ25vcmUgLSBpbmplY3RlZCBmcm9tIFRyYW5zaXRpb25Hcm91cFxuICAgKi9cbiAgb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlIHB1bHNhdGVzLCB0eXBpY2FsbHkgaW5kaWNhdGluZyB0aGUga2V5Ym9hcmQgZm9jdXMgc3RhdGUgb2YgYW4gZWxlbWVudC5cbiAgICovXG4gIHB1bHNhdGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRGlhbWV0ZXIgb2YgdGhlIHJpcHBsZS5cbiAgICovXG4gIHJpcHBsZVNpemU6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBIb3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSByaXBwbGUgY2VudGVyLlxuICAgKi9cbiAgcmlwcGxlWDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIFZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSByaXBwbGUgY2VudGVyLlxuICAgKi9cbiAgcmlwcGxlWTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIGV4aXQgZGVsYXlcbiAgICovXG4gIHRpbWVvdXQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFJpcHBsZTsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvbkJhc2VVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUJ1dHRvbkJhc2UnLCBzbG90KTtcbn1cbmNvbnN0IGJ1dHRvbkJhc2VDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQnV0dG9uQmFzZScsIFsncm9vdCcsICdkaXNhYmxlZCcsICdmb2N1c1Zpc2libGUnXSk7XG5leHBvcnQgZGVmYXVsdCBidXR0b25CYXNlQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhY3Rpb25cIiwgXCJjZW50ZXJSaXBwbGVcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVkXCIsIFwiZGlzYWJsZVJpcHBsZVwiLCBcImRpc2FibGVUb3VjaFJpcHBsZVwiLCBcImZvY3VzUmlwcGxlXCIsIFwiZm9jdXNWaXNpYmxlQ2xhc3NOYW1lXCIsIFwiTGlua0NvbXBvbmVudFwiLCBcIm9uQmx1clwiLCBcIm9uQ2xpY2tcIiwgXCJvbkNvbnRleHRNZW51XCIsIFwib25EcmFnTGVhdmVcIiwgXCJvbkZvY3VzXCIsIFwib25Gb2N1c1Zpc2libGVcIiwgXCJvbktleURvd25cIiwgXCJvbktleVVwXCIsIFwib25Nb3VzZURvd25cIiwgXCJvbk1vdXNlTGVhdmVcIiwgXCJvbk1vdXNlVXBcIiwgXCJvblRvdWNoRW5kXCIsIFwib25Ub3VjaE1vdmVcIiwgXCJvblRvdWNoU3RhcnRcIiwgXCJ0YWJJbmRleFwiLCBcIlRvdWNoUmlwcGxlUHJvcHNcIiwgXCJ0b3VjaFJpcHBsZVJlZlwiLCBcInR5cGVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmIGZyb20gJ0BtdWkvdXRpbHMvZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnLi4vdXRpbHMvdXNlRXZlbnRDYWxsYmFjayc7XG5pbXBvcnQgdXNlSXNGb2N1c1Zpc2libGUgZnJvbSAnLi4vdXRpbHMvdXNlSXNGb2N1c1Zpc2libGUnO1xuaW1wb3J0IFRvdWNoUmlwcGxlIGZyb20gJy4vVG91Y2hSaXBwbGUnO1xuaW1wb3J0IGJ1dHRvbkJhc2VDbGFzc2VzLCB7IGdldEJ1dHRvbkJhc2VVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2J1dHRvbkJhc2VDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgZGlzYWJsZWQsXG4gICAgZm9jdXNWaXNpYmxlLFxuICAgIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBmb2N1c1Zpc2libGUgJiYgJ2ZvY3VzVmlzaWJsZSddXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRCdXR0b25CYXNlVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgaWYgKGZvY3VzVmlzaWJsZSAmJiBmb2N1c1Zpc2libGVDbGFzc05hbWUpIHtcbiAgICBjb21wb3NlZENsYXNzZXMucm9vdCArPSBgICR7Zm9jdXNWaXNpYmxlQ2xhc3NOYW1lfWA7XG4gIH1cbiAgcmV0dXJuIGNvbXBvc2VkQ2xhc3Nlcztcbn07XG5leHBvcnQgY29uc3QgQnV0dG9uQmFzZVJvb3QgPSBzdHlsZWQoJ2J1dHRvbicsIHtcbiAgbmFtZTogJ011aUJ1dHRvbkJhc2UnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnJvb3Rcbn0pKHtcbiAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICBXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAvLyBSZXNldCBkZWZhdWx0IHZhbHVlXG4gIC8vIFdlIGRpc2FibGUgdGhlIGZvY3VzIHJpbmcgZm9yIG1vdXNlLCB0b3VjaCBhbmQga2V5Ym9hcmQgdXNlcnMuXG4gIG91dGxpbmU6IDAsXG4gIGJvcmRlcjogMCxcbiAgbWFyZ2luOiAwLFxuICAvLyBSZW1vdmUgdGhlIG1hcmdpbiBpbiBTYWZhcmlcbiAgYm9yZGVyUmFkaXVzOiAwLFxuICBwYWRkaW5nOiAwLFxuICAvLyBSZW1vdmUgdGhlIHBhZGRpbmcgaW4gRmlyZWZveFxuICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgdXNlclNlbGVjdDogJ25vbmUnLFxuICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgTW96QXBwZWFyYW5jZTogJ25vbmUnLFxuICAvLyBSZXNldFxuICBXZWJraXRBcHBlYXJhbmNlOiAnbm9uZScsXG4gIC8vIFJlc2V0XG4gIHRleHREZWNvcmF0aW9uOiAnbm9uZScsXG4gIC8vIFNvIHdlIHRha2UgcHJlY2VkZW50IG92ZXIgdGhlIHN0eWxlIG9mIGEgbmF0aXZlIDxhIC8+IGVsZW1lbnQuXG4gIGNvbG9yOiAnaW5oZXJpdCcsXG4gICcmOjotbW96LWZvY3VzLWlubmVyJzoge1xuICAgIGJvcmRlclN0eWxlOiAnbm9uZScgLy8gUmVtb3ZlIEZpcmVmb3ggZG90dGVkIG91dGxpbmUuXG4gIH0sXG4gIFtgJi4ke2J1dHRvbkJhc2VDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgIC8vIERpc2FibGUgbGluayBpbnRlcmFjdGlvbnNcbiAgICBjdXJzb3I6ICdkZWZhdWx0J1xuICB9LFxuICAnQG1lZGlhIHByaW50Jzoge1xuICAgIGNvbG9yQWRqdXN0OiAnZXhhY3QnXG4gIH1cbn0pO1xuXG4vKipcbiAqIGBCdXR0b25CYXNlYCBjb250YWlucyBhcyBmZXcgc3R5bGVzIGFzIHBvc3NpYmxlLlxuICogSXQgYWltcyB0byBiZSBhIHNpbXBsZSBidWlsZGluZyBibG9jayBmb3IgY3JlYXRpbmcgYSBidXR0b24uXG4gKiBJdCBjb250YWlucyBhIGxvYWQgb2Ygc3R5bGUgcmVzZXQgYW5kIHNvbWUgZm9jdXMvcmlwcGxlIGxvZ2ljLlxuICovXG5jb25zdCBCdXR0b25CYXNlID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQnV0dG9uQmFzZShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlCdXR0b25CYXNlJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgYWN0aW9uLFxuICAgICAgY2VudGVyUmlwcGxlID0gZmFsc2UsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCA9ICdidXR0b24nLFxuICAgICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVSaXBwbGUgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVUb3VjaFJpcHBsZSA9IGZhbHNlLFxuICAgICAgZm9jdXNSaXBwbGUgPSBmYWxzZSxcbiAgICAgIExpbmtDb21wb25lbnQgPSAnYScsXG4gICAgICBvbkJsdXIsXG4gICAgICBvbkNsaWNrLFxuICAgICAgb25Db250ZXh0TWVudSxcbiAgICAgIG9uRHJhZ0xlYXZlLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIG9uRm9jdXNWaXNpYmxlLFxuICAgICAgb25LZXlEb3duLFxuICAgICAgb25LZXlVcCxcbiAgICAgIG9uTW91c2VEb3duLFxuICAgICAgb25Nb3VzZUxlYXZlLFxuICAgICAgb25Nb3VzZVVwLFxuICAgICAgb25Ub3VjaEVuZCxcbiAgICAgIG9uVG91Y2hNb3ZlLFxuICAgICAgb25Ub3VjaFN0YXJ0LFxuICAgICAgdGFiSW5kZXggPSAwLFxuICAgICAgVG91Y2hSaXBwbGVQcm9wcyxcbiAgICAgIHRvdWNoUmlwcGxlUmVmLFxuICAgICAgdHlwZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBidXR0b25SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IHJpcHBsZVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgaGFuZGxlUmlwcGxlUmVmID0gdXNlRm9ya1JlZihyaXBwbGVSZWYsIHRvdWNoUmlwcGxlUmVmKTtcbiAgY29uc3Qge1xuICAgIGlzRm9jdXNWaXNpYmxlUmVmLFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzVmlzaWJsZSxcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXJWaXNpYmxlLFxuICAgIHJlZjogZm9jdXNWaXNpYmxlUmVmXG4gIH0gPSB1c2VJc0ZvY3VzVmlzaWJsZSgpO1xuICBjb25zdCBbZm9jdXNWaXNpYmxlLCBzZXRGb2N1c1Zpc2libGVdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBpZiAoZGlzYWJsZWQgJiYgZm9jdXNWaXNpYmxlKSB7XG4gICAgc2V0Rm9jdXNWaXNpYmxlKGZhbHNlKTtcbiAgfVxuICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKGFjdGlvbiwgKCkgPT4gKHtcbiAgICBmb2N1c1Zpc2libGU6ICgpID0+IHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZSh0cnVlKTtcbiAgICAgIGJ1dHRvblJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICB9KSwgW10pO1xuICBjb25zdCBbbW91bnRlZFN0YXRlLCBzZXRNb3VudGVkU3RhdGVdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldE1vdW50ZWRTdGF0ZSh0cnVlKTtcbiAgfSwgW10pO1xuICBjb25zdCBlbmFibGVUb3VjaFJpcHBsZSA9IG1vdW50ZWRTdGF0ZSAmJiAhZGlzYWJsZVJpcHBsZSAmJiAhZGlzYWJsZWQ7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGZvY3VzVmlzaWJsZSAmJiBmb2N1c1JpcHBsZSAmJiAhZGlzYWJsZVJpcHBsZSAmJiBtb3VudGVkU3RhdGUpIHtcbiAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnB1bHNhdGUoKTtcbiAgICB9XG4gIH0sIFtkaXNhYmxlUmlwcGxlLCBmb2N1c1JpcHBsZSwgZm9jdXNWaXNpYmxlLCBtb3VudGVkU3RhdGVdKTtcbiAgZnVuY3Rpb24gdXNlUmlwcGxlSGFuZGxlcihyaXBwbGVBY3Rpb24sIGV2ZW50Q2FsbGJhY2ssIHNraXBSaXBwbGVBY3Rpb24gPSBkaXNhYmxlVG91Y2hSaXBwbGUpIHtcbiAgICByZXR1cm4gdXNlRXZlbnRDYWxsYmFjayhldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnRDYWxsYmFjaykge1xuICAgICAgICBldmVudENhbGxiYWNrKGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlnbm9yZSA9IHNraXBSaXBwbGVBY3Rpb247XG4gICAgICBpZiAoIWlnbm9yZSAmJiByaXBwbGVSZWYuY3VycmVudCkge1xuICAgICAgICByaXBwbGVSZWYuY3VycmVudFtyaXBwbGVBY3Rpb25dKGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9XG4gIGNvbnN0IGhhbmRsZU1vdXNlRG93biA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0YXJ0Jywgb25Nb3VzZURvd24pO1xuICBjb25zdCBoYW5kbGVDb250ZXh0TWVudSA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvbkNvbnRleHRNZW51KTtcbiAgY29uc3QgaGFuZGxlRHJhZ0xlYXZlID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uRHJhZ0xlYXZlKTtcbiAgY29uc3QgaGFuZGxlTW91c2VVcCA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvbk1vdXNlVXApO1xuICBjb25zdCBoYW5kbGVNb3VzZUxlYXZlID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIGV2ZW50ID0+IHtcbiAgICBpZiAoZm9jdXNWaXNpYmxlKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAob25Nb3VzZUxlYXZlKSB7XG4gICAgICBvbk1vdXNlTGVhdmUoZXZlbnQpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZVRvdWNoU3RhcnQgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdGFydCcsIG9uVG91Y2hTdGFydCk7XG4gIGNvbnN0IGhhbmRsZVRvdWNoRW5kID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uVG91Y2hFbmQpO1xuICBjb25zdCBoYW5kbGVUb3VjaE1vdmUgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25Ub3VjaE1vdmUpO1xuICBjb25zdCBoYW5kbGVCbHVyID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIGV2ZW50ID0+IHtcbiAgICBoYW5kbGVCbHVyVmlzaWJsZShldmVudCk7XG4gICAgaWYgKGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICBzZXRGb2N1c1Zpc2libGUoZmFsc2UpO1xuICAgIH1cbiAgICBpZiAob25CbHVyKSB7XG4gICAgICBvbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgfSwgZmFsc2UpO1xuICBjb25zdCBoYW5kbGVGb2N1cyA9IHVzZUV2ZW50Q2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIC8vIEZpeCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83NzY5XG4gICAgaWYgKCFidXR0b25SZWYuY3VycmVudCkge1xuICAgICAgYnV0dG9uUmVmLmN1cnJlbnQgPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgIH1cbiAgICBoYW5kbGVGb2N1c1Zpc2libGUoZXZlbnQpO1xuICAgIGlmIChpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50ID09PSB0cnVlKSB7XG4gICAgICBzZXRGb2N1c1Zpc2libGUodHJ1ZSk7XG4gICAgICBpZiAob25Gb2N1c1Zpc2libGUpIHtcbiAgICAgICAgb25Gb2N1c1Zpc2libGUoZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob25Gb2N1cykge1xuICAgICAgb25Gb2N1cyhldmVudCk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaXNOb25OYXRpdmVCdXR0b24gPSAoKSA9PiB7XG4gICAgY29uc3QgYnV0dG9uID0gYnV0dG9uUmVmLmN1cnJlbnQ7XG4gICAgcmV0dXJuIGNvbXBvbmVudCAmJiBjb21wb25lbnQgIT09ICdidXR0b24nICYmICEoYnV0dG9uLnRhZ05hbWUgPT09ICdBJyAmJiBidXR0b24uaHJlZik7XG4gIH07XG5cbiAgLyoqXG4gICAqIElFMTEgc2hpbSBmb3IgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQvcmVwZWF0XG4gICAqL1xuICBjb25zdCBrZXlkb3duUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUV2ZW50Q2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIC8vIENoZWNrIGlmIGtleSBpcyBhbHJlYWR5IGRvd24gdG8gYXZvaWQgcmVwZWF0cyBiZWluZyBjb3VudGVkIGFzIG11bHRpcGxlIGFjdGl2YXRpb25zXG4gICAgaWYgKGZvY3VzUmlwcGxlICYmICFrZXlkb3duUmVmLmN1cnJlbnQgJiYgZm9jdXNWaXNpYmxlICYmIHJpcHBsZVJlZi5jdXJyZW50ICYmIGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICBrZXlkb3duUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgcmlwcGxlUmVmLmN1cnJlbnQuc3RvcChldmVudCwgKCkgPT4ge1xuICAgICAgICByaXBwbGVSZWYuY3VycmVudC5zdGFydChldmVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiBpc05vbk5hdGl2ZUJ1dHRvbigpICYmIGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAob25LZXlEb3duKSB7XG4gICAgICBvbktleURvd24oZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIEtleWJvYXJkIGFjY2Vzc2liaWxpdHkgZm9yIG5vbiBpbnRlcmFjdGl2ZSBlbGVtZW50c1xuICAgIGlmIChldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQgJiYgaXNOb25OYXRpdmVCdXR0b24oKSAmJiBldmVudC5rZXkgPT09ICdFbnRlcicgJiYgIWRpc2FibGVkKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKG9uQ2xpY2spIHtcbiAgICAgICAgb25DbGljayhldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlS2V5VXAgPSB1c2VFdmVudENhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAvLyBjYWxsaW5nIHByZXZlbnREZWZhdWx0IGluIGtleVVwIG9uIGEgPGJ1dHRvbj4gd2lsbCBub3QgZGlzcGF0Y2ggYSBjbGljayBldmVudCBpZiBTcGFjZSBpcyBwcmVzc2VkXG4gICAgLy8gaHR0cHM6Ly9jb2Rlc2FuZGJveC5pby9wL3NhbmRib3gvYnV0dG9uLWtleXVwLXByZXZlbnRkZWZhdWx0LWRuN2YwXG4gICAgaWYgKGZvY3VzUmlwcGxlICYmIGV2ZW50LmtleSA9PT0gJyAnICYmIHJpcHBsZVJlZi5jdXJyZW50ICYmIGZvY3VzVmlzaWJsZSAmJiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAga2V5ZG93blJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICByaXBwbGVSZWYuY3VycmVudC5zdG9wKGV2ZW50LCAoKSA9PiB7XG4gICAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnB1bHNhdGUoZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChvbktleVVwKSB7XG4gICAgICBvbktleVVwKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvLyBLZXlib2FyZCBhY2Nlc3NpYmlsaXR5IGZvciBub24gaW50ZXJhY3RpdmUgZWxlbWVudHNcbiAgICBpZiAob25DbGljayAmJiBldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQgJiYgaXNOb25OYXRpdmVCdXR0b24oKSAmJiBldmVudC5rZXkgPT09ICcgJyAmJiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgb25DbGljayhldmVudCk7XG4gICAgfVxuICB9KTtcbiAgbGV0IENvbXBvbmVudFByb3AgPSBjb21wb25lbnQ7XG4gIGlmIChDb21wb25lbnRQcm9wID09PSAnYnV0dG9uJyAmJiAob3RoZXIuaHJlZiB8fCBvdGhlci50bykpIHtcbiAgICBDb21wb25lbnRQcm9wID0gTGlua0NvbXBvbmVudDtcbiAgfVxuICBjb25zdCBidXR0b25Qcm9wcyA9IHt9O1xuICBpZiAoQ29tcG9uZW50UHJvcCA9PT0gJ2J1dHRvbicpIHtcbiAgICBidXR0b25Qcm9wcy50eXBlID0gdHlwZSA9PT0gdW5kZWZpbmVkID8gJ2J1dHRvbicgOiB0eXBlO1xuICAgIGJ1dHRvblByb3BzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFvdGhlci5ocmVmICYmICFvdGhlci50bykge1xuICAgICAgYnV0dG9uUHJvcHMucm9sZSA9ICdidXR0b24nO1xuICAgIH1cbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIGJ1dHRvblByb3BzWydhcmlhLWRpc2FibGVkJ10gPSBkaXNhYmxlZDtcbiAgICB9XG4gIH1cbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihyZWYsIGZvY3VzVmlzaWJsZVJlZiwgYnV0dG9uUmVmKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGVuYWJsZVRvdWNoUmlwcGxlICYmICFyaXBwbGVSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBUaGUgYGNvbXBvbmVudGAgcHJvcCBwcm92aWRlZCB0byBCdXR0b25CYXNlIGlzIGludmFsaWQuJywgJ1BsZWFzZSBtYWtlIHN1cmUgdGhlIGNoaWxkcmVuIHByb3AgaXMgcmVuZGVyZWQgaW4gdGhpcyBjdXN0b20gY29tcG9uZW50LiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9LCBbZW5hYmxlVG91Y2hSaXBwbGVdKTtcbiAgfVxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY2VudGVyUmlwcGxlLFxuICAgIGNvbXBvbmVudCxcbiAgICBkaXNhYmxlZCxcbiAgICBkaXNhYmxlUmlwcGxlLFxuICAgIGRpc2FibGVUb3VjaFJpcHBsZSxcbiAgICBmb2N1c1JpcHBsZSxcbiAgICB0YWJJbmRleCxcbiAgICBmb2N1c1Zpc2libGVcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhCdXR0b25CYXNlUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBDb21wb25lbnRQcm9wLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXIsXG4gICAgb25DbGljazogb25DbGljayxcbiAgICBvbkNvbnRleHRNZW51OiBoYW5kbGVDb250ZXh0TWVudSxcbiAgICBvbkZvY3VzOiBoYW5kbGVGb2N1cyxcbiAgICBvbktleURvd246IGhhbmRsZUtleURvd24sXG4gICAgb25LZXlVcDogaGFuZGxlS2V5VXAsXG4gICAgb25Nb3VzZURvd246IGhhbmRsZU1vdXNlRG93bixcbiAgICBvbk1vdXNlTGVhdmU6IGhhbmRsZU1vdXNlTGVhdmUsXG4gICAgb25Nb3VzZVVwOiBoYW5kbGVNb3VzZVVwLFxuICAgIG9uRHJhZ0xlYXZlOiBoYW5kbGVEcmFnTGVhdmUsXG4gICAgb25Ub3VjaEVuZDogaGFuZGxlVG91Y2hFbmQsXG4gICAgb25Ub3VjaE1vdmU6IGhhbmRsZVRvdWNoTW92ZSxcbiAgICBvblRvdWNoU3RhcnQ6IGhhbmRsZVRvdWNoU3RhcnQsXG4gICAgcmVmOiBoYW5kbGVSZWYsXG4gICAgdGFiSW5kZXg6IGRpc2FibGVkID8gLTEgOiB0YWJJbmRleCxcbiAgICB0eXBlOiB0eXBlXG4gIH0sIGJ1dHRvblByb3BzLCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBbY2hpbGRyZW4sIGVuYWJsZVRvdWNoUmlwcGxlID9cbiAgICAvKiNfX1BVUkVfXyovXG4gICAgLyogVG91Y2hSaXBwbGUgaXMgb25seSBuZWVkZWQgY2xpZW50LXNpZGUsIHgyIGJvb3N0IG9uIHRoZSBzZXJ2ZXIuICovXG4gICAgX2pzeChUb3VjaFJpcHBsZSwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiBoYW5kbGVSaXBwbGVSZWYsXG4gICAgICBjZW50ZXI6IGNlbnRlclJpcHBsZVxuICAgIH0sIFRvdWNoUmlwcGxlUHJvcHMpKSA6IG51bGxdXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQnV0dG9uQmFzZS5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBBIHJlZiBmb3IgaW1wZXJhdGl2ZSBhY3Rpb25zLlxuICAgKiBJdCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyBgZm9jdXNWaXNpYmxlKClgIGFjdGlvbi5cbiAgICovXG4gIGFjdGlvbjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJpcHBsZXMgYXJlIGNlbnRlcmVkLlxuICAgKiBUaGV5IHdvbid0IHN0YXJ0IGF0IHRoZSBjdXJzb3IgaW50ZXJhY3Rpb24gcG9zaXRpb24uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjZW50ZXJSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlIGVmZmVjdCBpcyBkaXNhYmxlZC5cbiAgICpcbiAgICog4pqg77iPIFdpdGhvdXQgYSByaXBwbGUgdGhlcmUgaXMgbm8gc3R5bGluZyBmb3IgOmZvY3VzLXZpc2libGUgYnkgZGVmYXVsdC4gQmUgc3VyZVxuICAgKiB0byBoaWdobGlnaHQgdGhlIGVsZW1lbnQgYnkgYXBwbHlpbmcgc2VwYXJhdGUgc3R5bGVzIHdpdGggdGhlIGAuTXVpLWZvY3VzVmlzaWJsZWAgY2xhc3MuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUmlwcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRvdWNoIHJpcHBsZSBlZmZlY3QgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlVG91Y2hSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYmFzZSBidXR0b24gd2lsbCBoYXZlIGEga2V5Ym9hcmQgZm9jdXMgcmlwcGxlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZm9jdXNSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhpcyBwcm9wIGNhbiBoZWxwIGlkZW50aWZ5IHdoaWNoIGVsZW1lbnQgaGFzIGtleWJvYXJkIGZvY3VzLlxuICAgKiBUaGUgY2xhc3MgbmFtZSB3aWxsIGJlIGFwcGxpZWQgd2hlbiB0aGUgZWxlbWVudCBnYWlucyB0aGUgZm9jdXMgdGhyb3VnaCBrZXlib2FyZCBpbnRlcmFjdGlvbi5cbiAgICogSXQncyBhIHBvbHlmaWxsIGZvciB0aGUgW0NTUyA6Zm9jdXMtdmlzaWJsZSBzZWxlY3Rvcl0oaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL3NlbGVjdG9ycy00LyN0aGUtZm9jdXMtdmlzaWJsZS1wc2V1ZG8pLlxuICAgKiBUaGUgcmF0aW9uYWxlIGZvciB1c2luZyB0aGlzIGZlYXR1cmUgW2lzIGV4cGxhaW5lZCBoZXJlXShodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlL2Jsb2IvSEVBRC9leHBsYWluZXIubWQpLlxuICAgKiBBIFtwb2x5ZmlsbCBjYW4gYmUgdXNlZF0oaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvZm9jdXMtdmlzaWJsZSkgdG8gYXBwbHkgYSBgZm9jdXMtdmlzaWJsZWAgY2xhc3MgdG8gb3RoZXIgY29tcG9uZW50c1xuICAgKiBpZiBuZWVkZWQuXG4gICAqL1xuICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBocmVmOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5hbnksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgdG8gcmVuZGVyIGEgbGluayB3aGVuIHRoZSBgaHJlZmAgcHJvcCBpcyBwcm92aWRlZC5cbiAgICogQGRlZmF1bHQgJ2EnXG4gICAqL1xuICBMaW5rQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkNvbnRleHRNZW51OiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRHJhZ0xlYXZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGZvY3VzZWQgd2l0aCBhIGtleWJvYXJkLlxuICAgKiBXZSB0cmlnZ2VyIGEgYG9uRm9jdXNgIGNhbGxiYWNrIHRvby5cbiAgICovXG4gIG9uRm9jdXNWaXNpYmxlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbktleVVwOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uTW91c2VEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uTW91c2VMZWF2ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbk1vdXNlVXA6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Ub3VjaEVuZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvblRvdWNoTW92ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvblRvdWNoU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgdGFiSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBgVG91Y2hSaXBwbGVgIGVsZW1lbnQuXG4gICAqL1xuICBUb3VjaFJpcHBsZVByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQSByZWYgdGhhdCBwb2ludHMgdG8gdGhlIGBUb3VjaFJpcHBsZWAgZWxlbWVudC5cbiAgICovXG4gIHRvdWNoUmlwcGxlUmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjdXJyZW50OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgcHVsc2F0ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIHN0YXJ0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgc3RvcDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICAgIH0pXG4gIH0pXSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydidXR0b24nLCAncmVzZXQnLCAnc3VibWl0J10pLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBCdXR0b25CYXNlOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2lyY3VsYXJQcm9ncmVzc1V0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpQ2lyY3VsYXJQcm9ncmVzcycsIHNsb3QpO1xufVxuY29uc3QgY2lyY3VsYXJQcm9ncmVzc0NsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlDaXJjdWxhclByb2dyZXNzJywgWydyb290JywgJ2RldGVybWluYXRlJywgJ2luZGV0ZXJtaW5hdGUnLCAnY29sb3JQcmltYXJ5JywgJ2NvbG9yU2Vjb25kYXJ5JywgJ3N2ZycsICdjaXJjbGUnLCAnY2lyY2xlRGV0ZXJtaW5hdGUnLCAnY2lyY2xlSW5kZXRlcm1pbmF0ZScsICdjaXJjbGVEaXNhYmxlU2hyaW5rJ10pO1xuZXhwb3J0IGRlZmF1bHQgY2lyY3VsYXJQcm9ncmVzc0NsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJkaXNhYmxlU2hyaW5rXCIsIFwic2l6ZVwiLCBcInN0eWxlXCIsIFwidGhpY2tuZXNzXCIsIFwidmFsdWVcIiwgXCJ2YXJpYW50XCJdO1xubGV0IF8gPSB0ID0+IHQsXG4gIF90LFxuICBfdDIsXG4gIF90MyxcbiAgX3Q0O1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNoYWluUHJvcFR5cGVzIGZyb20gJ0BtdWkvdXRpbHMvY2hhaW5Qcm9wVHlwZXMnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsga2V5ZnJhbWVzLCBjc3MgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBnZXRDaXJjdWxhclByb2dyZXNzVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9jaXJjdWxhclByb2dyZXNzQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgU0laRSA9IDQ0O1xuY29uc3QgY2lyY3VsYXJSb3RhdGVLZXlmcmFtZSA9IGtleWZyYW1lcyhfdCB8fCAoX3QgPSBfYFxuICAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gIH1cblxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICB9XG5gKSk7XG5jb25zdCBjaXJjdWxhckRhc2hLZXlmcmFtZSA9IGtleWZyYW1lcyhfdDIgfHwgKF90MiA9IF9gXG4gIDAlIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAxcHgsIDIwMHB4O1xuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwO1xuICB9XG5cbiAgNTAlIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAxMDBweCwgMjAwcHg7XG4gICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IC0xNXB4O1xuICB9XG5cbiAgMTAwJSB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMTAwcHgsIDIwMHB4O1xuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMTI1cHg7XG4gIH1cbmApKTtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIHZhcmlhbnQsXG4gICAgY29sb3IsXG4gICAgZGlzYWJsZVNocmlua1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgdmFyaWFudCwgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gXSxcbiAgICBzdmc6IFsnc3ZnJ10sXG4gICAgY2lyY2xlOiBbJ2NpcmNsZScsIGBjaXJjbGUke2NhcGl0YWxpemUodmFyaWFudCl9YCwgZGlzYWJsZVNocmluayAmJiAnY2lyY2xlRGlzYWJsZVNocmluayddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Q2lyY3VsYXJQcm9ncmVzc1V0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgQ2lyY3VsYXJQcm9ncmVzc1Jvb3QgPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlDaXJjdWxhclByb2dyZXNzJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdLCBzdHlsZXNbYGNvbG9yJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZSxcbiAgdGhlbWVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2lubGluZS1ibG9jaydcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2RldGVybWluYXRlJyAmJiB7XG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJylcbn0sIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluXG59KSwgKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gb3duZXJTdGF0ZS52YXJpYW50ID09PSAnaW5kZXRlcm1pbmF0ZScgJiYgY3NzKF90MyB8fCAoX3QzID0gX2BcbiAgICAgIGFuaW1hdGlvbjogJHswfSAxLjRzIGxpbmVhciBpbmZpbml0ZTtcbiAgICBgKSwgY2lyY3VsYXJSb3RhdGVLZXlmcmFtZSkpO1xuY29uc3QgQ2lyY3VsYXJQcm9ncmVzc1NWRyA9IHN0eWxlZCgnc3ZnJywge1xuICBuYW1lOiAnTXVpQ2lyY3VsYXJQcm9ncmVzcycsXG4gIHNsb3Q6ICdTdmcnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5zdmdcbn0pKHtcbiAgZGlzcGxheTogJ2Jsb2NrJyAvLyBLZWVwcyB0aGUgcHJvZ3Jlc3MgY2VudGVyZWRcbn0pO1xuY29uc3QgQ2lyY3VsYXJQcm9ncmVzc0NpcmNsZSA9IHN0eWxlZCgnY2lyY2xlJywge1xuICBuYW1lOiAnTXVpQ2lyY3VsYXJQcm9ncmVzcycsXG4gIHNsb3Q6ICdDaXJjbGUnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLmNpcmNsZSwgc3R5bGVzW2BjaXJjbGUke2NhcGl0YWxpemUob3duZXJTdGF0ZS52YXJpYW50KX1gXSwgb3duZXJTdGF0ZS5kaXNhYmxlU2hyaW5rICYmIHN0eWxlcy5jaXJjbGVEaXNhYmxlU2hyaW5rXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZSxcbiAgdGhlbWVcbn0pID0+IF9leHRlbmRzKHtcbiAgc3Ryb2tlOiAnY3VycmVudENvbG9yJ1xufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZGV0ZXJtaW5hdGUnICYmIHtcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdzdHJva2UtZGFzaG9mZnNldCcpXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdpbmRldGVybWluYXRlJyAmJiB7XG4gIC8vIFNvbWUgZGVmYXVsdCB2YWx1ZSB0aGF0IGxvb2tzIGZpbmUgd2FpdGluZyBmb3IgdGhlIGFuaW1hdGlvbiB0byBraWNrcyBpbi5cbiAgc3Ryb2tlRGFzaGFycmF5OiAnODBweCwgMjAwcHgnLFxuICBzdHJva2VEYXNob2Zmc2V0OiAwIC8vIEFkZCB0aGUgdW5pdCB0byBmaXggYSBFZGdlIDE2IGFuZCBiZWxvdyBidWcuXG59KSwgKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gb3duZXJTdGF0ZS52YXJpYW50ID09PSAnaW5kZXRlcm1pbmF0ZScgJiYgIW93bmVyU3RhdGUuZGlzYWJsZVNocmluayAmJiBjc3MoX3Q0IHx8IChfdDQgPSBfYFxuICAgICAgYW5pbWF0aW9uOiAkezB9IDEuNHMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG4gICAgYCksIGNpcmN1bGFyRGFzaEtleWZyYW1lKSk7XG5cbi8qKlxuICogIyMgQVJJQVxuICpcbiAqIElmIHRoZSBwcm9ncmVzcyBiYXIgaXMgZGVzY3JpYmluZyB0aGUgbG9hZGluZyBwcm9ncmVzcyBvZiBhIHBhcnRpY3VsYXIgcmVnaW9uIG9mIGEgcGFnZSxcbiAqIHlvdSBzaG91bGQgdXNlIGBhcmlhLWRlc2NyaWJlZGJ5YCB0byBwb2ludCB0byB0aGUgcHJvZ3Jlc3MgYmFyLCBhbmQgc2V0IHRoZSBgYXJpYS1idXN5YFxuICogYXR0cmlidXRlIHRvIGB0cnVlYCBvbiB0aGF0IHJlZ2lvbiB1bnRpbCBpdCBoYXMgZmluaXNoZWQgbG9hZGluZy5cbiAqL1xuY29uc3QgQ2lyY3VsYXJQcm9ncmVzcyA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIENpcmN1bGFyUHJvZ3Jlc3MoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQ2lyY3VsYXJQcm9ncmVzcydcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgICAgZGlzYWJsZVNocmluayA9IGZhbHNlLFxuICAgICAgc2l6ZSA9IDQwLFxuICAgICAgc3R5bGUsXG4gICAgICB0aGlja25lc3MgPSAzLjYsXG4gICAgICB2YWx1ZSA9IDAsXG4gICAgICB2YXJpYW50ID0gJ2luZGV0ZXJtaW5hdGUnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBkaXNhYmxlU2hyaW5rLFxuICAgIHNpemUsXG4gICAgdGhpY2tuZXNzLFxuICAgIHZhbHVlLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgY2lyY2xlU3R5bGUgPSB7fTtcbiAgY29uc3Qgcm9vdFN0eWxlID0ge307XG4gIGNvbnN0IHJvb3RQcm9wcyA9IHt9O1xuICBpZiAodmFyaWFudCA9PT0gJ2RldGVybWluYXRlJykge1xuICAgIGNvbnN0IGNpcmN1bWZlcmVuY2UgPSAyICogTWF0aC5QSSAqICgoU0laRSAtIHRoaWNrbmVzcykgLyAyKTtcbiAgICBjaXJjbGVTdHlsZS5zdHJva2VEYXNoYXJyYXkgPSBjaXJjdW1mZXJlbmNlLnRvRml4ZWQoMyk7XG4gICAgcm9vdFByb3BzWydhcmlhLXZhbHVlbm93J10gPSBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgICBjaXJjbGVTdHlsZS5zdHJva2VEYXNob2Zmc2V0ID0gYCR7KCgxMDAgLSB2YWx1ZSkgLyAxMDAgKiBjaXJjdW1mZXJlbmNlKS50b0ZpeGVkKDMpfXB4YDtcbiAgICByb290U3R5bGUudHJhbnNmb3JtID0gJ3JvdGF0ZSgtOTBkZWcpJztcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goQ2lyY3VsYXJQcm9ncmVzc1Jvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICB3aWR0aDogc2l6ZSxcbiAgICAgIGhlaWdodDogc2l6ZVxuICAgIH0sIHJvb3RTdHlsZSwgc3R5bGUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWYsXG4gICAgcm9sZTogXCJwcm9ncmVzc2JhclwiXG4gIH0sIHJvb3RQcm9wcywgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goQ2lyY3VsYXJQcm9ncmVzc1NWRywge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLnN2ZyxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICB2aWV3Qm94OiBgJHtTSVpFIC8gMn0gJHtTSVpFIC8gMn0gJHtTSVpFfSAke1NJWkV9YCxcbiAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChDaXJjdWxhclByb2dyZXNzQ2lyY2xlLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5jaXJjbGUsXG4gICAgICAgIHN0eWxlOiBjaXJjbGVTdHlsZSxcbiAgICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgICAgY3g6IFNJWkUsXG4gICAgICAgIGN5OiBTSVpFLFxuICAgICAgICByOiAoU0laRSAtIHRoaWNrbmVzcykgLyAyLFxuICAgICAgICBmaWxsOiBcIm5vbmVcIixcbiAgICAgICAgc3Ryb2tlV2lkdGg6IHRoaWNrbmVzc1xuICAgICAgfSlcbiAgICB9KVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IENpcmN1bGFyUHJvZ3Jlc3MucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdlcnJvcicsICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgc2hyaW5rIGFuaW1hdGlvbiBpcyBkaXNhYmxlZC5cbiAgICogVGhpcyBvbmx5IHdvcmtzIGlmIHZhcmlhbnQgaXMgYGluZGV0ZXJtaW5hdGVgLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVNocmluazogY2hhaW5Qcm9wVHlwZXMoUHJvcFR5cGVzLmJvb2wsIHByb3BzID0+IHtcbiAgICBpZiAocHJvcHMuZGlzYWJsZVNocmluayAmJiBwcm9wcy52YXJpYW50ICYmIHByb3BzLnZhcmlhbnQgIT09ICdpbmRldGVybWluYXRlJykge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcignTVVJOiBZb3UgaGF2ZSBwcm92aWRlZCB0aGUgYGRpc2FibGVTaHJpbmtgIHByb3AgJyArICd3aXRoIGEgdmFyaWFudCBvdGhlciB0aGFuIGBpbmRldGVybWluYXRlYC4gVGhpcyB3aWxsIGhhdmUgbm8gZWZmZWN0LicpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJZiB1c2luZyBhIG51bWJlciwgdGhlIHBpeGVsIHVuaXQgaXMgYXNzdW1lZC5cbiAgICogSWYgdXNpbmcgYSBzdHJpbmcsIHlvdSBuZWVkIHRvIHByb3ZpZGUgdGhlIENTUyB1bml0LCBmb3IgZXhhbXBsZSAnM3JlbScuXG4gICAqIEBkZWZhdWx0IDQwXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB0aGlja25lc3Mgb2YgdGhlIGNpcmNsZS5cbiAgICogQGRlZmF1bHQgMy42XG4gICAqL1xuICB0aGlja25lc3M6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIHByb2dyZXNzIGluZGljYXRvciBmb3IgdGhlIGRldGVybWluYXRlIHZhcmlhbnQuXG4gICAqIFZhbHVlIGJldHdlZW4gMCBhbmQgMTAwLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogVXNlIGluZGV0ZXJtaW5hdGUgd2hlbiB0aGVyZSBpcyBubyBwcm9ncmVzcyB2YWx1ZS5cbiAgICogQGRlZmF1bHQgJ2luZGV0ZXJtaW5hdGUnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydkZXRlcm1pbmF0ZScsICdpbmRldGVybWluYXRlJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQ2lyY3VsYXJQcm9ncmVzczsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbGxhcHNlVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlDb2xsYXBzZScsIHNsb3QpO1xufVxuY29uc3QgY29sbGFwc2VDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQ29sbGFwc2UnLCBbJ3Jvb3QnLCAnaG9yaXpvbnRhbCcsICd2ZXJ0aWNhbCcsICdlbnRlcmVkJywgJ2hpZGRlbicsICd3cmFwcGVyJywgJ3dyYXBwZXJJbm5lciddKTtcbmV4cG9ydCBkZWZhdWx0IGNvbGxhcHNlQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhZGRFbmRMaXN0ZW5lclwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sbGFwc2VkU2l6ZVwiLCBcImNvbXBvbmVudFwiLCBcImVhc2luZ1wiLCBcImluXCIsIFwib25FbnRlclwiLCBcIm9uRW50ZXJlZFwiLCBcIm9uRW50ZXJpbmdcIiwgXCJvbkV4aXRcIiwgXCJvbkV4aXRlZFwiLCBcIm9uRXhpdGluZ1wiLCBcIm9yaWVudGF0aW9uXCIsIFwic3R5bGVcIiwgXCJ0aW1lb3V0XCIsIFwiVHJhbnNpdGlvbkNvbXBvbmVudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IFRyYW5zaXRpb24gfSBmcm9tICdyZWFjdC10cmFuc2l0aW9uLWdyb3VwJztcbmltcG9ydCB1c2VUaW1lb3V0IGZyb20gJ0BtdWkvdXRpbHMvdXNlVGltZW91dCc7XG5pbXBvcnQgZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYgZnJvbSAnQG11aS91dGlscy9lbGVtZW50VHlwZUFjY2VwdGluZ1JlZic7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IHsgZHVyYXRpb24gfSBmcm9tICcuLi9zdHlsZXMvY3JlYXRlVHJhbnNpdGlvbnMnO1xuaW1wb3J0IHsgZ2V0VHJhbnNpdGlvblByb3BzIH0gZnJvbSAnLi4vdHJhbnNpdGlvbnMvdXRpbHMnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZSc7XG5pbXBvcnQgeyB1c2VGb3JrUmVmIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0Q29sbGFwc2VVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2NvbGxhcHNlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIG9yaWVudGF0aW9uLFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGAke29yaWVudGF0aW9ufWBdLFxuICAgIGVudGVyZWQ6IFsnZW50ZXJlZCddLFxuICAgIGhpZGRlbjogWydoaWRkZW4nXSxcbiAgICB3cmFwcGVyOiBbJ3dyYXBwZXInLCBgJHtvcmllbnRhdGlvbn1gXSxcbiAgICB3cmFwcGVySW5uZXI6IFsnd3JhcHBlcklubmVyJywgYCR7b3JpZW50YXRpb259YF1cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRDb2xsYXBzZVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgQ29sbGFwc2VSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlDb2xsYXBzZScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBzdHlsZXNbb3duZXJTdGF0ZS5vcmllbnRhdGlvbl0sIG93bmVyU3RhdGUuc3RhdGUgPT09ICdlbnRlcmVkJyAmJiBzdHlsZXMuZW50ZXJlZCwgb3duZXJTdGF0ZS5zdGF0ZSA9PT0gJ2V4aXRlZCcgJiYgIW93bmVyU3RhdGUuaW4gJiYgb3duZXJTdGF0ZS5jb2xsYXBzZWRTaXplID09PSAnMHB4JyAmJiBzdHlsZXMuaGlkZGVuXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgaGVpZ2h0OiAwLFxuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnaGVpZ2h0Jylcbn0sIG93bmVyU3RhdGUub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyAmJiB7XG4gIGhlaWdodDogJ2F1dG8nLFxuICB3aWR0aDogMCxcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd3aWR0aCcpXG59LCBvd25lclN0YXRlLnN0YXRlID09PSAnZW50ZXJlZCcgJiYgX2V4dGVuZHMoe1xuICBoZWlnaHQ6ICdhdXRvJyxcbiAgb3ZlcmZsb3c6ICd2aXNpYmxlJ1xufSwgb3duZXJTdGF0ZS5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnICYmIHtcbiAgd2lkdGg6ICdhdXRvJ1xufSksIG93bmVyU3RhdGUuc3RhdGUgPT09ICdleGl0ZWQnICYmICFvd25lclN0YXRlLmluICYmIG93bmVyU3RhdGUuY29sbGFwc2VkU2l6ZSA9PT0gJzBweCcgJiYge1xuICB2aXNpYmlsaXR5OiAnaGlkZGVuJ1xufSkpO1xuY29uc3QgQ29sbGFwc2VXcmFwcGVyID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlDb2xsYXBzZScsXG4gIHNsb3Q6ICdXcmFwcGVyJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMud3JhcHBlclxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICAvLyBIYWNrIHRvIGdldCBjaGlsZHJlbiB3aXRoIGEgbmVnYXRpdmUgbWFyZ2luIHRvIG5vdCBmYWxzaWZ5IHRoZSBoZWlnaHQgY29tcHV0YXRpb24uXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgd2lkdGg6ICcxMDAlJ1xufSwgb3duZXJTdGF0ZS5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnICYmIHtcbiAgd2lkdGg6ICdhdXRvJyxcbiAgaGVpZ2h0OiAnMTAwJSdcbn0pKTtcbmNvbnN0IENvbGxhcHNlV3JhcHBlcklubmVyID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlDb2xsYXBzZScsXG4gIHNsb3Q6ICdXcmFwcGVySW5uZXInLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy53cmFwcGVySW5uZXJcbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgd2lkdGg6ICcxMDAlJ1xufSwgb3duZXJTdGF0ZS5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnICYmIHtcbiAgd2lkdGg6ICdhdXRvJyxcbiAgaGVpZ2h0OiAnMTAwJSdcbn0pKTtcblxuLyoqXG4gKiBUaGUgQ29sbGFwc2UgdHJhbnNpdGlvbiBpcyB1c2VkIGJ5IHRoZVxuICogW1ZlcnRpY2FsIFN0ZXBwZXJdKC9tYXRlcmlhbC11aS9yZWFjdC1zdGVwcGVyLyN2ZXJ0aWNhbC1zdGVwcGVyKSBTdGVwQ29udGVudCBjb21wb25lbnQuXG4gKiBJdCB1c2VzIFtyZWFjdC10cmFuc2l0aW9uLWdyb3VwXShodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwKSBpbnRlcm5hbGx5LlxuICovXG5jb25zdCBDb2xsYXBzZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIENvbGxhcHNlKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUNvbGxhcHNlJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgYWRkRW5kTGlzdGVuZXIsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbGxhcHNlZFNpemU6IGNvbGxhcHNlZFNpemVQcm9wID0gJzBweCcsXG4gICAgICBjb21wb25lbnQsXG4gICAgICBlYXNpbmcsXG4gICAgICBpbjogaW5Qcm9wLFxuICAgICAgb25FbnRlcixcbiAgICAgIG9uRW50ZXJlZCxcbiAgICAgIG9uRW50ZXJpbmcsXG4gICAgICBvbkV4aXQsXG4gICAgICBvbkV4aXRlZCxcbiAgICAgIG9uRXhpdGluZyxcbiAgICAgIG9yaWVudGF0aW9uID0gJ3ZlcnRpY2FsJyxcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCA9IGR1cmF0aW9uLnN0YW5kYXJkLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3Byb3AtdHlwZXNcbiAgICAgIFRyYW5zaXRpb25Db21wb25lbnQgPSBUcmFuc2l0aW9uXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBvcmllbnRhdGlvbixcbiAgICBjb2xsYXBzZWRTaXplOiBjb2xsYXBzZWRTaXplUHJvcFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IHRpbWVyID0gdXNlVGltZW91dCgpO1xuICBjb25zdCB3cmFwcGVyUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBhdXRvVHJhbnNpdGlvbkR1cmF0aW9uID0gUmVhY3QudXNlUmVmKCk7XG4gIGNvbnN0IGNvbGxhcHNlZFNpemUgPSB0eXBlb2YgY29sbGFwc2VkU2l6ZVByb3AgPT09ICdudW1iZXInID8gYCR7Y29sbGFwc2VkU2l6ZVByb3B9cHhgIDogY29sbGFwc2VkU2l6ZVByb3A7XG4gIGNvbnN0IGlzSG9yaXpvbnRhbCA9IG9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCc7XG4gIGNvbnN0IHNpemUgPSBpc0hvcml6b250YWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG4gIGNvbnN0IG5vZGVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYocmVmLCBub2RlUmVmKTtcbiAgY29uc3Qgbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayA9IGNhbGxiYWNrID0+IG1heWJlSXNBcHBlYXJpbmcgPT4ge1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVSZWYuY3VycmVudDtcblxuICAgICAgLy8gb25FbnRlclh4eCBhbmQgb25FeGl0WHh4IGNhbGxiYWNrcyBoYXZlIGEgZGlmZmVyZW50IGFyZ3VtZW50cy5sZW5ndGggdmFsdWUuXG4gICAgICBpZiAobWF5YmVJc0FwcGVhcmluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNhbGxiYWNrKG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sobm9kZSwgbWF5YmVJc0FwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCBnZXRXcmFwcGVyU2l6ZSA9ICgpID0+IHdyYXBwZXJSZWYuY3VycmVudCA/IHdyYXBwZXJSZWYuY3VycmVudFtpc0hvcml6b250YWwgPyAnY2xpZW50V2lkdGgnIDogJ2NsaWVudEhlaWdodCddIDogMDtcbiAgY29uc3QgaGFuZGxlRW50ZXIgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKChub2RlLCBpc0FwcGVhcmluZykgPT4ge1xuICAgIGlmICh3cmFwcGVyUmVmLmN1cnJlbnQgJiYgaXNIb3Jpem9udGFsKSB7XG4gICAgICAvLyBTZXQgYWJzb2x1dGUgcG9zaXRpb24gdG8gZ2V0IHRoZSBzaXplIG9mIGNvbGxhcHNlZCBjb250ZW50XG4gICAgICB3cmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIH1cbiAgICBub2RlLnN0eWxlW3NpemVdID0gY29sbGFwc2VkU2l6ZTtcbiAgICBpZiAob25FbnRlcikge1xuICAgICAgb25FbnRlcihub2RlLCBpc0FwcGVhcmluZyk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlRW50ZXJpbmcgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKChub2RlLCBpc0FwcGVhcmluZykgPT4ge1xuICAgIGNvbnN0IHdyYXBwZXJTaXplID0gZ2V0V3JhcHBlclNpemUoKTtcbiAgICBpZiAod3JhcHBlclJlZi5jdXJyZW50ICYmIGlzSG9yaXpvbnRhbCkge1xuICAgICAgLy8gQWZ0ZXIgdGhlIHNpemUgaXMgcmVhZCByZXNldCB0aGUgcG9zaXRpb24gYmFjayB0byBkZWZhdWx0XG4gICAgICB3cmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUucG9zaXRpb24gPSAnJztcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgZHVyYXRpb246IHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICAgIGVhc2luZzogdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uXG4gICAgfSA9IGdldFRyYW5zaXRpb25Qcm9wcyh7XG4gICAgICBzdHlsZSxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBlYXNpbmdcbiAgICB9LCB7XG4gICAgICBtb2RlOiAnZW50ZXInXG4gICAgfSk7XG4gICAgaWYgKHRpbWVvdXQgPT09ICdhdXRvJykge1xuICAgICAgY29uc3QgZHVyYXRpb24yID0gdGhlbWUudHJhbnNpdGlvbnMuZ2V0QXV0b0hlaWdodER1cmF0aW9uKHdyYXBwZXJTaXplKTtcbiAgICAgIG5vZGUuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gYCR7ZHVyYXRpb24yfW1zYDtcbiAgICAgIGF1dG9UcmFuc2l0aW9uRHVyYXRpb24uY3VycmVudCA9IGR1cmF0aW9uMjtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSB0eXBlb2YgdHJhbnNpdGlvbkR1cmF0aW9uID09PSAnc3RyaW5nJyA/IHRyYW5zaXRpb25EdXJhdGlvbiA6IGAke3RyYW5zaXRpb25EdXJhdGlvbn1tc2A7XG4gICAgfVxuICAgIG5vZGUuc3R5bGVbc2l6ZV0gPSBgJHt3cmFwcGVyU2l6ZX1weGA7XG4gICAgbm9kZS5zdHlsZS50cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24gPSB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb247XG4gICAgaWYgKG9uRW50ZXJpbmcpIHtcbiAgICAgIG9uRW50ZXJpbmcobm9kZSwgaXNBcHBlYXJpbmcpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUVudGVyZWQgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKChub2RlLCBpc0FwcGVhcmluZykgPT4ge1xuICAgIG5vZGUuc3R5bGVbc2l6ZV0gPSAnYXV0byc7XG4gICAgaWYgKG9uRW50ZXJlZCkge1xuICAgICAgb25FbnRlcmVkKG5vZGUsIGlzQXBwZWFyaW5nKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVFeGl0ID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhub2RlID0+IHtcbiAgICBub2RlLnN0eWxlW3NpemVdID0gYCR7Z2V0V3JhcHBlclNpemUoKX1weGA7XG4gICAgaWYgKG9uRXhpdCkge1xuICAgICAgb25FeGl0KG5vZGUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUV4aXRlZCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FeGl0ZWQpO1xuICBjb25zdCBoYW5kbGVFeGl0aW5nID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhub2RlID0+IHtcbiAgICBjb25zdCB3cmFwcGVyU2l6ZSA9IGdldFdyYXBwZXJTaXplKCk7XG4gICAgY29uc3Qge1xuICAgICAgZHVyYXRpb246IHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICAgIGVhc2luZzogdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uXG4gICAgfSA9IGdldFRyYW5zaXRpb25Qcm9wcyh7XG4gICAgICBzdHlsZSxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBlYXNpbmdcbiAgICB9LCB7XG4gICAgICBtb2RlOiAnZXhpdCdcbiAgICB9KTtcbiAgICBpZiAodGltZW91dCA9PT0gJ2F1dG8nKSB7XG4gICAgICAvLyBUT0RPOiByZW5hbWUgZ2V0QXV0b0hlaWdodER1cmF0aW9uIHRvIHNvbWV0aGluZyBtb3JlIGdlbmVyaWMgKHdpZHRoIHN1cHBvcnQpXG4gICAgICAvLyBBY3R1YWxseSBpdCBqdXN0IGNhbGN1bGF0ZXMgYW5pbWF0aW9uIGR1cmF0aW9uIGJhc2VkIG9uIHNpemVcbiAgICAgIGNvbnN0IGR1cmF0aW9uMiA9IHRoZW1lLnRyYW5zaXRpb25zLmdldEF1dG9IZWlnaHREdXJhdGlvbih3cmFwcGVyU2l6ZSk7XG4gICAgICBub2RlLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9IGAke2R1cmF0aW9uMn1tc2A7XG4gICAgICBhdXRvVHJhbnNpdGlvbkR1cmF0aW9uLmN1cnJlbnQgPSBkdXJhdGlvbjI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gdHlwZW9mIHRyYW5zaXRpb25EdXJhdGlvbiA9PT0gJ3N0cmluZycgPyB0cmFuc2l0aW9uRHVyYXRpb24gOiBgJHt0cmFuc2l0aW9uRHVyYXRpb259bXNgO1xuICAgIH1cbiAgICBub2RlLnN0eWxlW3NpemVdID0gY29sbGFwc2VkU2l6ZTtcbiAgICBub2RlLnN0eWxlLnRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbiA9IHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjtcbiAgICBpZiAob25FeGl0aW5nKSB7XG4gICAgICBvbkV4aXRpbmcobm9kZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlQWRkRW5kTGlzdGVuZXIgPSBuZXh0ID0+IHtcbiAgICBpZiAodGltZW91dCA9PT0gJ2F1dG8nKSB7XG4gICAgICB0aW1lci5zdGFydChhdXRvVHJhbnNpdGlvbkR1cmF0aW9uLmN1cnJlbnQgfHwgMCwgbmV4dCk7XG4gICAgfVxuICAgIGlmIChhZGRFbmRMaXN0ZW5lcikge1xuICAgICAgLy8gT2xkIGNhbGwgc2lnbmF0dXJlIGJlZm9yZSBgcmVhY3QtdHJhbnNpdGlvbi1ncm91cGAgaW1wbGVtZW50ZWQgYG5vZGVSZWZgXG4gICAgICBhZGRFbmRMaXN0ZW5lcihub2RlUmVmLmN1cnJlbnQsIG5leHQpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFRyYW5zaXRpb25Db21wb25lbnQsIF9leHRlbmRzKHtcbiAgICBpbjogaW5Qcm9wLFxuICAgIG9uRW50ZXI6IGhhbmRsZUVudGVyLFxuICAgIG9uRW50ZXJlZDogaGFuZGxlRW50ZXJlZCxcbiAgICBvbkVudGVyaW5nOiBoYW5kbGVFbnRlcmluZyxcbiAgICBvbkV4aXQ6IGhhbmRsZUV4aXQsXG4gICAgb25FeGl0ZWQ6IGhhbmRsZUV4aXRlZCxcbiAgICBvbkV4aXRpbmc6IGhhbmRsZUV4aXRpbmcsXG4gICAgYWRkRW5kTGlzdGVuZXI6IGhhbmRsZUFkZEVuZExpc3RlbmVyLFxuICAgIG5vZGVSZWY6IG5vZGVSZWYsXG4gICAgdGltZW91dDogdGltZW91dCA9PT0gJ2F1dG8nID8gbnVsbCA6IHRpbWVvdXRcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogKHN0YXRlLCBjaGlsZFByb3BzKSA9PiAvKiNfX1BVUkVfXyovX2pzeChDb2xsYXBzZVJvb3QsIF9leHRlbmRzKHtcbiAgICAgIGFzOiBjb21wb25lbnQsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUsIHtcbiAgICAgICAgJ2VudGVyZWQnOiBjbGFzc2VzLmVudGVyZWQsXG4gICAgICAgICdleGl0ZWQnOiAhaW5Qcm9wICYmIGNvbGxhcHNlZFNpemUgPT09ICcwcHgnICYmIGNsYXNzZXMuaGlkZGVuXG4gICAgICB9W3N0YXRlXSksXG4gICAgICBzdHlsZTogX2V4dGVuZHMoe1xuICAgICAgICBbaXNIb3Jpem9udGFsID8gJ21pbldpZHRoJyA6ICdtaW5IZWlnaHQnXTogY29sbGFwc2VkU2l6ZVxuICAgICAgfSwgc3R5bGUpLFxuICAgICAgcmVmOiBoYW5kbGVSZWZcbiAgICB9LCBjaGlsZFByb3BzLCB7XG4gICAgICAvLyBgb3duZXJTdGF0ZWAgaXMgc2V0IGFmdGVyIGBjaGlsZFByb3BzYCB0byBvdmVycmlkZSBhbnkgZXhpc3RpbmcgYG93bmVyU3RhdGVgIHByb3BlcnR5IGluIGBjaGlsZFByb3BzYFxuICAgICAgLy8gdGhhdCBtaWdodCBoYXZlIGJlZW4gZm9yd2FyZGVkIGZyb20gdGhlIFRyYW5zaXRpb24gY29tcG9uZW50LlxuICAgICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUsIHtcbiAgICAgICAgc3RhdGVcbiAgICAgIH0pLFxuICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KENvbGxhcHNlV3JhcHBlciwge1xuICAgICAgICBvd25lclN0YXRlOiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZSwge1xuICAgICAgICAgIHN0YXRlXG4gICAgICAgIH0pLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMud3JhcHBlcixcbiAgICAgICAgcmVmOiB3cmFwcGVyUmVmLFxuICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goQ29sbGFwc2VXcmFwcGVySW5uZXIsIHtcbiAgICAgICAgICBvd25lclN0YXRlOiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZSwge1xuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMud3JhcHBlcklubmVyLFxuICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9KSlcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBDb2xsYXBzZS5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBBZGQgYSBjdXN0b20gdHJhbnNpdGlvbiBlbmQgdHJpZ2dlci4gQ2FsbGVkIHdpdGggdGhlIHRyYW5zaXRpb25pbmcgRE9NXG4gICAqIG5vZGUgYW5kIGEgZG9uZSBjYWxsYmFjay4gQWxsb3dzIGZvciBtb3JlIGZpbmUgZ3JhaW5lZCB0cmFuc2l0aW9uIGVuZFxuICAgKiBsb2dpYy4gTm90ZTogVGltZW91dHMgYXJlIHN0aWxsIHVzZWQgYXMgYSBmYWxsYmFjayBpZiBwcm92aWRlZC5cbiAgICovXG4gIGFkZEVuZExpc3RlbmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG5vZGUgdG8gYmUgY29sbGFwc2VkLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSB3aWR0aCAoaG9yaXpvbnRhbCkgb3IgaGVpZ2h0ICh2ZXJ0aWNhbCkgb2YgdGhlIGNvbnRhaW5lciB3aGVuIGNvbGxhcHNlZC5cbiAgICogQGRlZmF1bHQgJzBweCdcbiAgICovXG4gIGNvbGxhcHNlZFNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYsXG4gIC8qKlxuICAgKiBUaGUgdHJhbnNpdGlvbiB0aW1pbmcgZnVuY3Rpb24uXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSBlYXNpbmcgb3IgYSBvYmplY3QgY29udGFpbmluZyBlbnRlciBhbmQgZXhpdCB2YWx1ZXMuXG4gICAqL1xuICBlYXNpbmc6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgZW50ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZXhpdDogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IHdpbGwgdHJhbnNpdGlvbiBpbi5cbiAgICovXG4gIGluOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcmVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRW50ZXJpbmc6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FeGl0OiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdGluZzogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgdHJhbnNpdGlvbiBvcmllbnRhdGlvbi5cbiAgICogQGRlZmF1bHQgJ3ZlcnRpY2FsJ1xuICAgKi9cbiAgb3JpZW50YXRpb246IFByb3BUeXBlcy5vbmVPZihbJ2hvcml6b250YWwnLCAndmVydGljYWwnXSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBmb3IgdGhlIHRyYW5zaXRpb24sIGluIG1pbGxpc2Vjb25kcy5cbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIHRpbWVvdXQgZm9yIGFsbCB0cmFuc2l0aW9ucywgb3IgaW5kaXZpZHVhbGx5IHdpdGggYW4gb2JqZWN0LlxuICAgKlxuICAgKiBTZXQgdG8gJ2F1dG8nIHRvIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlIHRyYW5zaXRpb24gdGltZSBiYXNlZCBvbiBoZWlnaHQuXG4gICAqIEBkZWZhdWx0IGR1cmF0aW9uLnN0YW5kYXJkXG4gICAqL1xuICB0aW1lb3V0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydhdXRvJ10pLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFwcGVhcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBlbnRlcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBleGl0OiBQcm9wVHlwZXMubnVtYmVyXG4gIH0pXSlcbn0gOiB2b2lkIDA7XG5Db2xsYXBzZS5tdWlTdXBwb3J0QXV0byA9IHRydWU7XG5leHBvcnQgZGVmYXVsdCBDb2xsYXBzZTsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVDb250YWluZXIgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5jb25zdCBDb250YWluZXIgPSBjcmVhdGVDb250YWluZXIoe1xuICBjcmVhdGVTdHlsZWRDb21wb25lbnQ6IHN0eWxlZCgnZGl2Jywge1xuICAgIG5hbWU6ICdNdWlDb250YWluZXInLFxuICAgIHNsb3Q6ICdSb290JyxcbiAgICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgb3duZXJTdGF0ZVxuICAgICAgfSA9IHByb3BzO1xuICAgICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgc3R5bGVzW2BtYXhXaWR0aCR7Y2FwaXRhbGl6ZShTdHJpbmcob3duZXJTdGF0ZS5tYXhXaWR0aCkpfWBdLCBvd25lclN0YXRlLmZpeGVkICYmIHN0eWxlcy5maXhlZCwgb3duZXJTdGF0ZS5kaXNhYmxlR3V0dGVycyAmJiBzdHlsZXMuZGlzYWJsZUd1dHRlcnNdO1xuICAgIH1cbiAgfSksXG4gIHVzZVRoZW1lUHJvcHM6IGluUHJvcHMgPT4gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQ29udGFpbmVyJ1xuICB9KVxufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBDb250YWluZXIucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGVmdCBhbmQgcmlnaHQgcGFkZGluZyBpcyByZW1vdmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUd1dHRlcnM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogU2V0IHRoZSBtYXgtd2lkdGggdG8gbWF0Y2ggdGhlIG1pbi13aWR0aCBvZiB0aGUgY3VycmVudCBicmVha3BvaW50LlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UnZCBwcmVmZXIgdG8gZGVzaWduIGZvciBhIGZpeGVkIHNldCBvZiBzaXplc1xuICAgKiBpbnN0ZWFkIG9mIHRyeWluZyB0byBhY2NvbW1vZGF0ZSBhIGZ1bGx5IGZsdWlkIHZpZXdwb3J0LlxuICAgKiBJdCdzIGZsdWlkIGJ5IGRlZmF1bHQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmaXhlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIG1heC13aWR0aCBvZiB0aGUgY29udGFpbmVyLlxuICAgKiBUaGUgY29udGFpbmVyIHdpZHRoIGdyb3dzIHdpdGggdGhlIHNpemUgb2YgdGhlIHNjcmVlbi5cbiAgICogU2V0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZSBgbWF4V2lkdGhgLlxuICAgKiBAZGVmYXVsdCAnbGcnXG4gICAqL1xuICBtYXhXaWR0aDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWyd4cycsICdzbScsICdtZCcsICdsZycsICd4bCcsIGZhbHNlXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IENvbnRhaW5lcjsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBHbG9iYWxTdHlsZXMgZnJvbSAnLi4vR2xvYmFsU3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgY29uc3QgaHRtbCA9ICh0aGVtZSwgZW5hYmxlQ29sb3JTY2hlbWUpID0+IF9leHRlbmRzKHtcbiAgV2Via2l0Rm9udFNtb290aGluZzogJ2FudGlhbGlhc2VkJyxcbiAgLy8gQW50aWFsaWFzaW5nLlxuICBNb3pPc3hGb250U21vb3RoaW5nOiAnZ3JheXNjYWxlJyxcbiAgLy8gQW50aWFsaWFzaW5nLlxuICAvLyBDaGFuZ2UgZnJvbSBgYm94LXNpemluZzogY29udGVudC1ib3hgIHNvIHRoYXQgYHdpZHRoYFxuICAvLyBpcyBub3QgYWZmZWN0ZWQgYnkgYHBhZGRpbmdgIG9yIGBib3JkZXJgLlxuICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgLy8gRml4IGZvbnQgcmVzaXplIHByb2JsZW0gaW4gaU9TXG4gIFdlYmtpdFRleHRTaXplQWRqdXN0OiAnMTAwJSdcbn0sIGVuYWJsZUNvbG9yU2NoZW1lICYmICF0aGVtZS52YXJzICYmIHtcbiAgY29sb3JTY2hlbWU6IHRoZW1lLnBhbGV0dGUubW9kZVxufSk7XG5leHBvcnQgY29uc3QgYm9keSA9IHRoZW1lID0+IF9leHRlbmRzKHtcbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQucHJpbWFyeVxufSwgdGhlbWUudHlwb2dyYXBoeS5ib2R5MSwge1xuICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmJhY2tncm91bmQuZGVmYXVsdCxcbiAgJ0BtZWRpYSBwcmludCc6IHtcbiAgICAvLyBTYXZlIHByaW50ZXIgaW5rLlxuICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuY29tbW9uLndoaXRlXG4gIH1cbn0pO1xuZXhwb3J0IGNvbnN0IHN0eWxlcyA9ICh0aGVtZSwgZW5hYmxlQ29sb3JTY2hlbWUgPSBmYWxzZSkgPT4ge1xuICB2YXIgX3RoZW1lJGNvbXBvbmVudHM7XG4gIGNvbnN0IGNvbG9yU2NoZW1lU3R5bGVzID0ge307XG4gIGlmIChlbmFibGVDb2xvclNjaGVtZSAmJiB0aGVtZS5jb2xvclNjaGVtZXMpIHtcbiAgICBPYmplY3QuZW50cmllcyh0aGVtZS5jb2xvclNjaGVtZXMpLmZvckVhY2goKFtrZXksIHNjaGVtZV0pID0+IHtcbiAgICAgIHZhciBfc2NoZW1lJHBhbGV0dGU7XG4gICAgICBjb2xvclNjaGVtZVN0eWxlc1t0aGVtZS5nZXRDb2xvclNjaGVtZVNlbGVjdG9yKGtleSkucmVwbGFjZSgvXFxzKiYvLCAnJyldID0ge1xuICAgICAgICBjb2xvclNjaGVtZTogKF9zY2hlbWUkcGFsZXR0ZSA9IHNjaGVtZS5wYWxldHRlKSA9PSBudWxsID8gdm9pZCAwIDogX3NjaGVtZSRwYWxldHRlLm1vZGVcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgbGV0IGRlZmF1bHRTdHlsZXMgPSBfZXh0ZW5kcyh7XG4gICAgaHRtbDogaHRtbCh0aGVtZSwgZW5hYmxlQ29sb3JTY2hlbWUpLFxuICAgICcqLCAqOjpiZWZvcmUsICo6OmFmdGVyJzoge1xuICAgICAgYm94U2l6aW5nOiAnaW5oZXJpdCdcbiAgICB9LFxuICAgICdzdHJvbmcsIGInOiB7XG4gICAgICBmb250V2VpZ2h0OiB0aGVtZS50eXBvZ3JhcGh5LmZvbnRXZWlnaHRCb2xkXG4gICAgfSxcbiAgICBib2R5OiBfZXh0ZW5kcyh7XG4gICAgICBtYXJnaW46IDBcbiAgICB9LCBib2R5KHRoZW1lKSwge1xuICAgICAgLy8gQWRkIHN1cHBvcnQgZm9yIGRvY3VtZW50LmJvZHkucmVxdWVzdEZ1bGxTY3JlZW4oKS5cbiAgICAgIC8vIE90aGVyIGVsZW1lbnRzLCBpZiBiYWNrZ3JvdW5kIHRyYW5zcGFyZW50LCBhcmUgbm90IHN1cHBvcnRlZC5cbiAgICAgICcmOjpiYWNrZHJvcCc6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5iYWNrZ3JvdW5kLmRlZmF1bHRcbiAgICAgIH1cbiAgICB9KVxuICB9LCBjb2xvclNjaGVtZVN0eWxlcyk7XG4gIGNvbnN0IHRoZW1lT3ZlcnJpZGVzID0gKF90aGVtZSRjb21wb25lbnRzID0gdGhlbWUuY29tcG9uZW50cykgPT0gbnVsbCB8fCAoX3RoZW1lJGNvbXBvbmVudHMgPSBfdGhlbWUkY29tcG9uZW50cy5NdWlDc3NCYXNlbGluZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSRjb21wb25lbnRzLnN0eWxlT3ZlcnJpZGVzO1xuICBpZiAodGhlbWVPdmVycmlkZXMpIHtcbiAgICBkZWZhdWx0U3R5bGVzID0gW2RlZmF1bHRTdHlsZXMsIHRoZW1lT3ZlcnJpZGVzXTtcbiAgfVxuICByZXR1cm4gZGVmYXVsdFN0eWxlcztcbn07XG5cbi8qKlxuICogS2lja3N0YXJ0IGFuIGVsZWdhbnQsIGNvbnNpc3RlbnQsIGFuZCBzaW1wbGUgYmFzZWxpbmUgdG8gYnVpbGQgdXBvbi5cbiAqL1xuZnVuY3Rpb24gQ3NzQmFzZWxpbmUoaW5Qcm9wcykge1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUNzc0Jhc2VsaW5lJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGVuYWJsZUNvbG9yU2NoZW1lID0gZmFsc2VcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFsvKiNfX1BVUkVfXyovX2pzeChHbG9iYWxTdHlsZXMsIHtcbiAgICAgIHN0eWxlczogdGhlbWUgPT4gc3R5bGVzKHRoZW1lLCBlbmFibGVDb2xvclNjaGVtZSlcbiAgICB9KSwgY2hpbGRyZW5dXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQ3NzQmFzZWxpbmUucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogWW91IGNhbiB3cmFwIGEgbm9kZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEVuYWJsZSBgY29sb3Itc2NoZW1lYCBDU1MgcHJvcGVydHkgdG8gdXNlIGB0aGVtZS5wYWxldHRlLm1vZGVgLlxuICAgKiBGb3IgbW9yZSBkZXRhaWxzLCBjaGVjayBvdXQgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2NvbG9yLXNjaGVtZVxuICAgKiBGb3IgYnJvd3NlciBzdXBwb3J0LCBjaGVjayBvdXQgaHR0cHM6Ly9jYW5pdXNlLmNvbS8/c2VhcmNoPWNvbG9yLXNjaGVtZVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZW5hYmxlQ29sb3JTY2hlbWU6IFByb3BUeXBlcy5ib29sXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQ3NzQmFzZWxpbmU7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgU3lzdGVtRGVmYXVsdFByb3BzUHJvdmlkZXIsIHsgdXNlRGVmYXVsdFByb3BzIGFzIHVzZVN5c3RlbURlZmF1bHRQcm9wcyB9IGZyb20gJ0BtdWkvc3lzdGVtL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBEZWZhdWx0UHJvcHNQcm92aWRlcihwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goU3lzdGVtRGVmYXVsdFByb3BzUHJvdmlkZXIsIF9leHRlbmRzKHt9LCBwcm9wcykpO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRGVmYXVsdFByb3BzUHJvdmlkZXIucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBUeXBlU2NyaXB0IHR5cGVzIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4g4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IERlZmF1bHRQcm9wc1Byb3ZpZGVyO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZURlZmF1bHRQcm9wcyhwYXJhbXMpIHtcbiAgcmV0dXJuIHVzZVN5c3RlbURlZmF1bHRQcm9wcyhwYXJhbXMpO1xufSIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlhbG9nVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlEaWFsb2cnLCBzbG90KTtcbn1cbmNvbnN0IGRpYWxvZ0NsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlEaWFsb2cnLCBbJ3Jvb3QnLCAnc2Nyb2xsUGFwZXInLCAnc2Nyb2xsQm9keScsICdjb250YWluZXInLCAncGFwZXInLCAncGFwZXJTY3JvbGxQYXBlcicsICdwYXBlclNjcm9sbEJvZHknLCAncGFwZXJXaWR0aEZhbHNlJywgJ3BhcGVyV2lkdGhYcycsICdwYXBlcldpZHRoU20nLCAncGFwZXJXaWR0aE1kJywgJ3BhcGVyV2lkdGhMZycsICdwYXBlcldpZHRoWGwnLCAncGFwZXJGdWxsV2lkdGgnLCAncGFwZXJGdWxsU2NyZWVuJ10pO1xuZXhwb3J0IGRlZmF1bHQgZGlhbG9nQ2xhc3NlczsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5jb25zdCBEaWFsb2dDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRGlhbG9nQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdEaWFsb2dDb250ZXh0Jztcbn1cbmV4cG9ydCBkZWZhdWx0IERpYWxvZ0NvbnRleHQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYXJpYS1kZXNjcmliZWRieVwiLCBcImFyaWEtbGFiZWxsZWRieVwiLCBcIkJhY2tkcm9wQ29tcG9uZW50XCIsIFwiQmFja2Ryb3BQcm9wc1wiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZUVzY2FwZUtleURvd25cIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFdpZHRoXCIsIFwibWF4V2lkdGhcIiwgXCJvbkJhY2tkcm9wQ2xpY2tcIiwgXCJvbkNsaWNrXCIsIFwib25DbG9zZVwiLCBcIm9wZW5cIiwgXCJQYXBlckNvbXBvbmVudFwiLCBcIlBhcGVyUHJvcHNcIiwgXCJzY3JvbGxcIiwgXCJUcmFuc2l0aW9uQ29tcG9uZW50XCIsIFwidHJhbnNpdGlvbkR1cmF0aW9uXCIsIFwiVHJhbnNpdGlvblByb3BzXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHVzZUlkIGZyb20gJ0BtdWkvdXRpbHMvdXNlSWQnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgTW9kYWwgZnJvbSAnLi4vTW9kYWwnO1xuaW1wb3J0IEZhZGUgZnJvbSAnLi4vRmFkZSc7XG5pbXBvcnQgUGFwZXIgZnJvbSAnLi4vUGFwZXInO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCBkaWFsb2dDbGFzc2VzLCB7IGdldERpYWxvZ1V0aWxpdHlDbGFzcyB9IGZyb20gJy4vZGlhbG9nQ2xhc3Nlcyc7XG5pbXBvcnQgRGlhbG9nQ29udGV4dCBmcm9tICcuL0RpYWxvZ0NvbnRleHQnO1xuaW1wb3J0IEJhY2tkcm9wIGZyb20gJy4uL0JhY2tkcm9wJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWUnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IERpYWxvZ0JhY2tkcm9wID0gc3R5bGVkKEJhY2tkcm9wLCB7XG4gIG5hbWU6ICdNdWlEaWFsb2cnLFxuICBzbG90OiAnQmFja2Ryb3AnLFxuICBvdmVycmlkZXM6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMuYmFja2Ryb3Bcbn0pKHtcbiAgLy8gSW1wcm92ZSBzY3JvbGxhYmxlIGRpYWxvZyBzdXBwb3J0LlxuICB6SW5kZXg6IC0xXG59KTtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIHNjcm9sbCxcbiAgICBtYXhXaWR0aCxcbiAgICBmdWxsV2lkdGgsXG4gICAgZnVsbFNjcmVlblxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290J10sXG4gICAgY29udGFpbmVyOiBbJ2NvbnRhaW5lcicsIGBzY3JvbGwke2NhcGl0YWxpemUoc2Nyb2xsKX1gXSxcbiAgICBwYXBlcjogWydwYXBlcicsIGBwYXBlclNjcm9sbCR7Y2FwaXRhbGl6ZShzY3JvbGwpfWAsIGBwYXBlcldpZHRoJHtjYXBpdGFsaXplKFN0cmluZyhtYXhXaWR0aCkpfWAsIGZ1bGxXaWR0aCAmJiAncGFwZXJGdWxsV2lkdGgnLCBmdWxsU2NyZWVuICYmICdwYXBlckZ1bGxTY3JlZW4nXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldERpYWxvZ1V0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgRGlhbG9nUm9vdCA9IHN0eWxlZChNb2RhbCwge1xuICBuYW1lOiAnTXVpRGlhbG9nJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG59KSh7XG4gICdAbWVkaWEgcHJpbnQnOiB7XG4gICAgLy8gVXNlICFpbXBvcnRhbnQgdG8gb3ZlcnJpZGUgdGhlIE1vZGFsIGlubGluZS1zdHlsZS5cbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlICFpbXBvcnRhbnQnXG4gIH1cbn0pO1xuY29uc3QgRGlhbG9nQ29udGFpbmVyID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlEaWFsb2cnLFxuICBzbG90OiAnQ29udGFpbmVyJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5jb250YWluZXIsIHN0eWxlc1tgc2Nyb2xsJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2Nyb2xsKX1gXV07XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgaGVpZ2h0OiAnMTAwJScsXG4gICdAbWVkaWEgcHJpbnQnOiB7XG4gICAgaGVpZ2h0OiAnYXV0bydcbiAgfSxcbiAgLy8gV2UgZGlzYWJsZSB0aGUgZm9jdXMgcmluZyBmb3IgbW91c2UsIHRvdWNoIGFuZCBrZXlib2FyZCB1c2Vycy5cbiAgb3V0bGluZTogMFxufSwgb3duZXJTdGF0ZS5zY3JvbGwgPT09ICdwYXBlcicgJiYge1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcidcbn0sIG93bmVyU3RhdGUuc2Nyb2xsID09PSAnYm9keScgJiYge1xuICBvdmVyZmxvd1k6ICdhdXRvJyxcbiAgb3ZlcmZsb3dYOiAnaGlkZGVuJyxcbiAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgJyY6OmFmdGVyJzoge1xuICAgIGNvbnRlbnQ6ICdcIlwiJyxcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICB3aWR0aDogJzAnXG4gIH1cbn0pKTtcbmNvbnN0IERpYWxvZ1BhcGVyID0gc3R5bGVkKFBhcGVyLCB7XG4gIG5hbWU6ICdNdWlEaWFsb2cnLFxuICBzbG90OiAnUGFwZXInLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnBhcGVyLCBzdHlsZXNbYHNjcm9sbFBhcGVyJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2Nyb2xsKX1gXSwgc3R5bGVzW2BwYXBlcldpZHRoJHtjYXBpdGFsaXplKFN0cmluZyhvd25lclN0YXRlLm1heFdpZHRoKSl9YF0sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHN0eWxlcy5wYXBlckZ1bGxXaWR0aCwgb3duZXJTdGF0ZS5mdWxsU2NyZWVuICYmIHN0eWxlcy5wYXBlckZ1bGxTY3JlZW5dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBtYXJnaW46IDMyLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gIC8vIEZpeCBJRTExIGlzc3VlLCB0byByZW1vdmUgYXQgc29tZSBwb2ludC5cbiAgJ0BtZWRpYSBwcmludCc6IHtcbiAgICBvdmVyZmxvd1k6ICd2aXNpYmxlJyxcbiAgICBib3hTaGFkb3c6ICdub25lJ1xuICB9XG59LCBvd25lclN0YXRlLnNjcm9sbCA9PT0gJ3BhcGVyJyAmJiB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIG1heEhlaWdodDogJ2NhbGMoMTAwJSAtIDY0cHgpJ1xufSwgb3duZXJTdGF0ZS5zY3JvbGwgPT09ICdib2R5JyAmJiB7XG4gIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgdGV4dEFsaWduOiAnbGVmdCcgLy8gJ2luaXRpYWwnIGRvZXNuJ3Qgd29yayBvbiBJRTExXG59LCAhb3duZXJTdGF0ZS5tYXhXaWR0aCAmJiB7XG4gIG1heFdpZHRoOiAnY2FsYygxMDAlIC0gNjRweCknXG59LCBvd25lclN0YXRlLm1heFdpZHRoID09PSAneHMnICYmIHtcbiAgbWF4V2lkdGg6IHRoZW1lLmJyZWFrcG9pbnRzLnVuaXQgPT09ICdweCcgPyBNYXRoLm1heCh0aGVtZS5icmVha3BvaW50cy52YWx1ZXMueHMsIDQ0NCkgOiBgbWF4KCR7dGhlbWUuYnJlYWtwb2ludHMudmFsdWVzLnhzfSR7dGhlbWUuYnJlYWtwb2ludHMudW5pdH0sIDQ0NHB4KWAsXG4gIFtgJi4ke2RpYWxvZ0NsYXNzZXMucGFwZXJTY3JvbGxCb2R5fWBdOiB7XG4gICAgW3RoZW1lLmJyZWFrcG9pbnRzLmRvd24oTWF0aC5tYXgodGhlbWUuYnJlYWtwb2ludHMudmFsdWVzLnhzLCA0NDQpICsgMzIgKiAyKV06IHtcbiAgICAgIG1heFdpZHRoOiAnY2FsYygxMDAlIC0gNjRweCknXG4gICAgfVxuICB9XG59LCBvd25lclN0YXRlLm1heFdpZHRoICYmIG93bmVyU3RhdGUubWF4V2lkdGggIT09ICd4cycgJiYge1xuICBtYXhXaWR0aDogYCR7dGhlbWUuYnJlYWtwb2ludHMudmFsdWVzW293bmVyU3RhdGUubWF4V2lkdGhdfSR7dGhlbWUuYnJlYWtwb2ludHMudW5pdH1gLFxuICBbYCYuJHtkaWFsb2dDbGFzc2VzLnBhcGVyU2Nyb2xsQm9keX1gXToge1xuICAgIFt0aGVtZS5icmVha3BvaW50cy5kb3duKHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlc1tvd25lclN0YXRlLm1heFdpZHRoXSArIDMyICogMildOiB7XG4gICAgICBtYXhXaWR0aDogJ2NhbGMoMTAwJSAtIDY0cHgpJ1xuICAgIH1cbiAgfVxufSwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYge1xuICB3aWR0aDogJ2NhbGMoMTAwJSAtIDY0cHgpJ1xufSwgb3duZXJTdGF0ZS5mdWxsU2NyZWVuICYmIHtcbiAgbWFyZ2luOiAwLFxuICB3aWR0aDogJzEwMCUnLFxuICBtYXhXaWR0aDogJzEwMCUnLFxuICBoZWlnaHQ6ICcxMDAlJyxcbiAgbWF4SGVpZ2h0OiAnbm9uZScsXG4gIGJvcmRlclJhZGl1czogMCxcbiAgW2AmLiR7ZGlhbG9nQ2xhc3Nlcy5wYXBlclNjcm9sbEJvZHl9YF06IHtcbiAgICBtYXJnaW46IDAsXG4gICAgbWF4V2lkdGg6ICcxMDAlJ1xuICB9XG59KSk7XG5cbi8qKlxuICogRGlhbG9ncyBhcmUgb3ZlcmxhaWQgbW9kYWwgcGFwZXIgYmFzZWQgY29tcG9uZW50cyB3aXRoIGEgYmFja2Ryb3AuXG4gKi9cbmNvbnN0IERpYWxvZyA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIERpYWxvZyhpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlEaWFsb2cnXG4gIH0pO1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IGRlZmF1bHRUcmFuc2l0aW9uRHVyYXRpb24gPSB7XG4gICAgZW50ZXI6IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLmVudGVyaW5nU2NyZWVuLFxuICAgIGV4aXQ6IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLmxlYXZpbmdTY3JlZW5cbiAgfTtcbiAgY29uc3Qge1xuICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogYXJpYUxhYmVsbGVkYnlQcm9wLFxuICAgICAgQmFja2Ryb3BDb21wb25lbnQsXG4gICAgICBCYWNrZHJvcFByb3BzLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkaXNhYmxlRXNjYXBlS2V5RG93biA9IGZhbHNlLFxuICAgICAgZnVsbFNjcmVlbiA9IGZhbHNlLFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICBtYXhXaWR0aCA9ICdzbScsXG4gICAgICBvbkJhY2tkcm9wQ2xpY2ssXG4gICAgICBvbkNsaWNrLFxuICAgICAgb25DbG9zZSxcbiAgICAgIG9wZW4sXG4gICAgICBQYXBlckNvbXBvbmVudCA9IFBhcGVyLFxuICAgICAgUGFwZXJQcm9wcyA9IHt9LFxuICAgICAgc2Nyb2xsID0gJ3BhcGVyJyxcbiAgICAgIFRyYW5zaXRpb25Db21wb25lbnQgPSBGYWRlLFxuICAgICAgdHJhbnNpdGlvbkR1cmF0aW9uID0gZGVmYXVsdFRyYW5zaXRpb25EdXJhdGlvbixcbiAgICAgIFRyYW5zaXRpb25Qcm9wc1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZGlzYWJsZUVzY2FwZUtleURvd24sXG4gICAgZnVsbFNjcmVlbixcbiAgICBmdWxsV2lkdGgsXG4gICAgbWF4V2lkdGgsXG4gICAgc2Nyb2xsXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IGJhY2tkcm9wQ2xpY2sgPSBSZWFjdC51c2VSZWYoKTtcbiAgY29uc3QgaGFuZGxlTW91c2VEb3duID0gZXZlbnQgPT4ge1xuICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY2xvc2UgdGhlIGRpYWxvZyB3aGVuIGNsaWNraW5nIHRoZSBkaWFsb2cgY29udGVudC5cbiAgICAvLyBNYWtlIHN1cmUgdGhlIGV2ZW50IHN0YXJ0cyBhbmQgZW5kcyBvbiB0aGUgc2FtZSBET00gZWxlbWVudC5cbiAgICBiYWNrZHJvcENsaWNrLmN1cnJlbnQgPSBldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gIH07XG4gIGNvbnN0IGhhbmRsZUJhY2tkcm9wQ2xpY2sgPSBldmVudCA9PiB7XG4gICAgaWYgKG9uQ2xpY2spIHtcbiAgICAgIG9uQ2xpY2soZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIElnbm9yZSB0aGUgZXZlbnRzIG5vdCBjb21pbmcgZnJvbSB0aGUgXCJiYWNrZHJvcFwiLlxuICAgIGlmICghYmFja2Ryb3BDbGljay5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGJhY2tkcm9wQ2xpY2suY3VycmVudCA9IG51bGw7XG4gICAgaWYgKG9uQmFja2Ryb3BDbGljaykge1xuICAgICAgb25CYWNrZHJvcENsaWNrKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgIG9uQ2xvc2UoZXZlbnQsICdiYWNrZHJvcENsaWNrJyk7XG4gICAgfVxuICB9O1xuICBjb25zdCBhcmlhTGFiZWxsZWRieSA9IHVzZUlkKGFyaWFMYWJlbGxlZGJ5UHJvcCk7XG4gIGNvbnN0IGRpYWxvZ0NvbnRleHRWYWx1ZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZUlkOiBhcmlhTGFiZWxsZWRieVxuICAgIH07XG4gIH0sIFthcmlhTGFiZWxsZWRieV0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goRGlhbG9nUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgY2xvc2VBZnRlclRyYW5zaXRpb246IHRydWUsXG4gICAgY29tcG9uZW50czoge1xuICAgICAgQmFja2Ryb3A6IERpYWxvZ0JhY2tkcm9wXG4gICAgfSxcbiAgICBjb21wb25lbnRzUHJvcHM6IHtcbiAgICAgIGJhY2tkcm9wOiBfZXh0ZW5kcyh7XG4gICAgICAgIHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICAgICAgYXM6IEJhY2tkcm9wQ29tcG9uZW50XG4gICAgICB9LCBCYWNrZHJvcFByb3BzKVxuICAgIH0sXG4gICAgZGlzYWJsZUVzY2FwZUtleURvd246IGRpc2FibGVFc2NhcGVLZXlEb3duLFxuICAgIG9uQ2xvc2U6IG9uQ2xvc2UsXG4gICAgb3Blbjogb3BlbixcbiAgICByZWY6IHJlZixcbiAgICBvbkNsaWNrOiBoYW5kbGVCYWNrZHJvcENsaWNrLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goVHJhbnNpdGlvbkNvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgICAgYXBwZWFyOiB0cnVlLFxuICAgICAgaW46IG9wZW4sXG4gICAgICB0aW1lb3V0OiB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgICByb2xlOiBcInByZXNlbnRhdGlvblwiXG4gICAgfSwgVHJhbnNpdGlvblByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goRGlhbG9nQ29udGFpbmVyLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLmNvbnRhaW5lciksXG4gICAgICAgIG9uTW91c2VEb3duOiBoYW5kbGVNb3VzZURvd24sXG4gICAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChEaWFsb2dQYXBlciwgX2V4dGVuZHMoe1xuICAgICAgICAgIGFzOiBQYXBlckNvbXBvbmVudCxcbiAgICAgICAgICBlbGV2YXRpb246IDI0LFxuICAgICAgICAgIHJvbGU6IFwiZGlhbG9nXCIsXG4gICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGFyaWFEZXNjcmliZWRieSxcbiAgICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBhcmlhTGFiZWxsZWRieVxuICAgICAgICB9LCBQYXBlclByb3BzLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucGFwZXIsIFBhcGVyUHJvcHMuY2xhc3NOYW1lKSxcbiAgICAgICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChEaWFsb2dDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgICAgICB2YWx1ZTogZGlhbG9nQ29udGV4dFZhbHVlLFxuICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICAgICAgfSlcbiAgICAgICAgfSkpXG4gICAgICB9KVxuICAgIH0pKVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IERpYWxvZy5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGUgaWQocykgb2YgdGhlIGVsZW1lbnQocykgdGhhdCBkZXNjcmliZSB0aGUgZGlhbG9nLlxuICAgKi9cbiAgJ2FyaWEtZGVzY3JpYmVkYnknOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGlkKHMpIG9mIHRoZSBlbGVtZW50KHMpIHRoYXQgbGFiZWwgdGhlIGRpYWxvZy5cbiAgICovXG4gICdhcmlhLWxhYmVsbGVkYnknOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQSBiYWNrZHJvcCBjb21wb25lbnQuIFRoaXMgcHJvcCBlbmFibGVzIGN1c3RvbSBiYWNrZHJvcCByZW5kZXJpbmcuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgc2xvdHMuYmFja2Ryb3BgIGluc3RlYWQuIFdoaWxlIHRoaXMgcHJvcCBjdXJyZW50bHkgd29ya3MsIGl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uLlxuICAgKiBVc2UgdGhlIGBzbG90cy5iYWNrZHJvcGAgcHJvcCB0byBtYWtlIHlvdXIgYXBwbGljYXRpb24gcmVhZHkgZm9yIHRoZSBuZXh0IHZlcnNpb24gb2YgTWF0ZXJpYWwgVUkuXG4gICAqIEBkZWZhdWx0IHN0eWxlZChCYWNrZHJvcCwge1xuICAgKiAgIG5hbWU6ICdNdWlNb2RhbCcsXG4gICAqICAgc2xvdDogJ0JhY2tkcm9wJyxcbiAgICogICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICogICAgIHJldHVybiBzdHlsZXMuYmFja2Ryb3A7XG4gICAqICAgfSxcbiAgICogfSkoe1xuICAgKiAgIHpJbmRleDogLTEsXG4gICAqIH0pXG4gICAqL1xuICBCYWNrZHJvcENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQmFja2Ryb3BQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIERpYWxvZyBjaGlsZHJlbiwgdXN1YWxseSB0aGUgaW5jbHVkZWQgc3ViLWNvbXBvbmVudHMuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBoaXR0aW5nIGVzY2FwZSB3aWxsIG5vdCBmaXJlIHRoZSBgb25DbG9zZWAgY2FsbGJhY2suXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlRXNjYXBlS2V5RG93bjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBkaWFsb2cgaXMgZnVsbC1zY3JlZW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmdWxsU2NyZWVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGRpYWxvZyBzdHJldGNoZXMgdG8gYG1heFdpZHRoYC5cbiAgICpcbiAgICogTm90aWNlIHRoYXQgdGhlIGRpYWxvZyB3aWR0aCBncm93IGlzIGxpbWl0ZWQgYnkgdGhlIGRlZmF1bHQgbWFyZ2luLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgbWF4LXdpZHRoIG9mIHRoZSBkaWFsb2cuXG4gICAqIFRoZSBkaWFsb2cgd2lkdGggZ3Jvd3Mgd2l0aCB0aGUgc2l6ZSBvZiB0aGUgc2NyZWVuLlxuICAgKiBTZXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIGBtYXhXaWR0aGAuXG4gICAqIEBkZWZhdWx0ICdzbSdcbiAgICovXG4gIG1heFdpZHRoOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJywgZmFsc2VdKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgYmFja2Ryb3AgaXMgY2xpY2tlZC5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBgb25DbG9zZWAgcHJvcCB3aXRoIHRoZSBgcmVhc29uYCBhcmd1bWVudCB0byBoYW5kbGUgdGhlIGBiYWNrZHJvcENsaWNrYCBldmVudHMuXG4gICAqL1xuICBvbkJhY2tkcm9wQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgY2xvc2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gQ2FuIGJlOiBgXCJlc2NhcGVLZXlEb3duXCJgLCBgXCJiYWNrZHJvcENsaWNrXCJgLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIHRvIHJlbmRlciB0aGUgYm9keSBvZiB0aGUgZGlhbG9nLlxuICAgKiBAZGVmYXVsdCBQYXBlclxuICAgKi9cbiAgUGFwZXJDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgUGFwZXJgXSgvbWF0ZXJpYWwtdWkvYXBpL3BhcGVyLykgZWxlbWVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIFBhcGVyUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIGNvbnRhaW5lciBmb3Igc2Nyb2xsaW5nIHRoZSBkaWFsb2cuXG4gICAqIEBkZWZhdWx0ICdwYXBlcidcbiAgICovXG4gIHNjcm9sbDogUHJvcFR5cGVzLm9uZU9mKFsnYm9keScsICdwYXBlciddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHRyYW5zaXRpb24uXG4gICAqIFtGb2xsb3cgdGhpcyBndWlkZV0oL21hdGVyaWFsLXVpL3RyYW5zaXRpb25zLyN0cmFuc2l0aW9uY29tcG9uZW50LXByb3ApIHRvIGxlYXJuIG1vcmUgYWJvdXQgdGhlIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IEZhZGVcbiAgICovXG4gIFRyYW5zaXRpb25Db21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBmb3IgdGhlIHRyYW5zaXRpb24sIGluIG1pbGxpc2Vjb25kcy5cbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIHRpbWVvdXQgZm9yIGFsbCB0cmFuc2l0aW9ucywgb3IgaW5kaXZpZHVhbGx5IHdpdGggYW4gb2JqZWN0LlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgZW50ZXI6IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLmVudGVyaW5nU2NyZWVuLFxuICAgKiAgIGV4aXQ6IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLmxlYXZpbmdTY3JlZW4sXG4gICAqIH1cbiAgICovXG4gIHRyYW5zaXRpb25EdXJhdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcHBlYXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZW50ZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZXhpdDogUHJvcFR5cGVzLm51bWJlclxuICB9KV0pLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgdHJhbnNpdGlvbiBlbGVtZW50LlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgZWxlbWVudCBpcyBiYXNlZCBvbiB0aGlzIFtgVHJhbnNpdGlvbmBdKGh0dHBzOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbi8pIGNvbXBvbmVudC5cbiAgICovXG4gIFRyYW5zaXRpb25Qcm9wczogUHJvcFR5cGVzLm9iamVjdFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IERpYWxvZzsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpYWxvZ0FjdGlvbnNVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aURpYWxvZ0FjdGlvbnMnLCBzbG90KTtcbn1cbmNvbnN0IGRpYWxvZ0FjdGlvbnNDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpRGlhbG9nQWN0aW9ucycsIFsncm9vdCcsICdzcGFjaW5nJ10pO1xuZXhwb3J0IGRlZmF1bHQgZGlhbG9nQWN0aW9uc0NsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZVNwYWNpbmdcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IHsgZ2V0RGlhbG9nQWN0aW9uc1V0aWxpdHlDbGFzcyB9IGZyb20gJy4vZGlhbG9nQWN0aW9uc0NsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGRpc2FibGVTcGFjaW5nXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCAhZGlzYWJsZVNwYWNpbmcgJiYgJ3NwYWNpbmcnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldERpYWxvZ0FjdGlvbnNVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IERpYWxvZ0FjdGlvbnNSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlEaWFsb2dBY3Rpb25zJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsICFvd25lclN0YXRlLmRpc2FibGVTcGFjaW5nICYmIHN0eWxlcy5zcGFjaW5nXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBwYWRkaW5nOiA4LFxuICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyxcbiAgZmxleDogJzAgMCBhdXRvJ1xufSwgIW93bmVyU3RhdGUuZGlzYWJsZVNwYWNpbmcgJiYge1xuICAnJiA+IDpub3Qoc3R5bGUpIH4gOm5vdChzdHlsZSknOiB7XG4gICAgbWFyZ2luTGVmdDogOFxuICB9XG59KSk7XG5jb25zdCBEaWFsb2dBY3Rpb25zID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRGlhbG9nQWN0aW9ucyhpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlEaWFsb2dBY3Rpb25zJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZGlzYWJsZVNwYWNpbmcgPSBmYWxzZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZGlzYWJsZVNwYWNpbmdcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KERpYWxvZ0FjdGlvbnNSb290LCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIHJlZjogcmVmXG4gIH0sIG90aGVyKSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IERpYWxvZ0FjdGlvbnMucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBhY3Rpb25zIGRvIG5vdCBoYXZlIGFkZGl0aW9uYWwgbWFyZ2luLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVNwYWNpbmc6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRGlhbG9nQWN0aW9uczsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpYWxvZ0NvbnRlbnRVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aURpYWxvZ0NvbnRlbnQnLCBzbG90KTtcbn1cbmNvbnN0IGRpYWxvZ0NvbnRlbnRDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpRGlhbG9nQ29udGVudCcsIFsncm9vdCcsICdkaXZpZGVycyddKTtcbmV4cG9ydCBkZWZhdWx0IGRpYWxvZ0NvbnRlbnRDbGFzc2VzOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlhbG9nVGl0bGVVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aURpYWxvZ1RpdGxlJywgc2xvdCk7XG59XG5jb25zdCBkaWFsb2dUaXRsZUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlEaWFsb2dUaXRsZScsIFsncm9vdCddKTtcbmV4cG9ydCBkZWZhdWx0IGRpYWxvZ1RpdGxlQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJkaXZpZGVyc1wiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgeyBnZXREaWFsb2dDb250ZW50VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9kaWFsb2dDb250ZW50Q2xhc3Nlcyc7XG5pbXBvcnQgZGlhbG9nVGl0bGVDbGFzc2VzIGZyb20gJy4uL0RpYWxvZ1RpdGxlL2RpYWxvZ1RpdGxlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZGl2aWRlcnNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGRpdmlkZXJzICYmICdkaXZpZGVycyddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0RGlhbG9nQ29udGVudFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgRGlhbG9nQ29udGVudFJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aURpYWxvZ0NvbnRlbnQnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5kaXZpZGVycyAmJiBzdHlsZXMuZGl2aWRlcnNdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBmbGV4OiAnMSAxIGF1dG8nLFxuICAvLyBBZGQgaU9TIG1vbWVudHVtIHNjcm9sbGluZyBmb3IgaU9TIDwgMTMuMFxuICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJyxcbiAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gIHBhZGRpbmc6ICcyMHB4IDI0cHgnXG59LCBvd25lclN0YXRlLmRpdmlkZXJzID8ge1xuICBwYWRkaW5nOiAnMTZweCAyNHB4JyxcbiAgYm9yZGVyVG9wOiBgMXB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZGl2aWRlcn1gLFxuICBib3JkZXJCb3R0b206IGAxcHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5kaXZpZGVyfWBcbn0gOiB7XG4gIFtgLiR7ZGlhbG9nVGl0bGVDbGFzc2VzLnJvb3R9ICsgJmBdOiB7XG4gICAgcGFkZGluZ1RvcDogMFxuICB9XG59KSk7XG5jb25zdCBEaWFsb2dDb250ZW50ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRGlhbG9nQ29udGVudChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlEaWFsb2dDb250ZW50J1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZGl2aWRlcnMgPSBmYWxzZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZGl2aWRlcnNcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KERpYWxvZ0NvbnRlbnRSb290LCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIHJlZjogcmVmXG4gIH0sIG90aGVyKSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IERpYWxvZ0NvbnRlbnQucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBEaXNwbGF5IHRoZSB0b3AgYW5kIGJvdHRvbSBkaXZpZGVycy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpdmlkZXJzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IERpYWxvZ0NvbnRlbnQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWRkRW5kTGlzdGVuZXJcIiwgXCJhcHBlYXJcIiwgXCJjaGlsZHJlblwiLCBcImVhc2luZ1wiLCBcImluXCIsIFwib25FbnRlclwiLCBcIm9uRW50ZXJlZFwiLCBcIm9uRW50ZXJpbmdcIiwgXCJvbkV4aXRcIiwgXCJvbkV4aXRlZFwiLCBcIm9uRXhpdGluZ1wiLCBcInN0eWxlXCIsIFwidGltZW91dFwiLCBcIlRyYW5zaXRpb25Db21wb25lbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuaW1wb3J0IGVsZW1lbnRBY2NlcHRpbmdSZWYgZnJvbSAnQG11aS91dGlscy9lbGVtZW50QWNjZXB0aW5nUmVmJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWUnO1xuaW1wb3J0IHsgcmVmbG93LCBnZXRUcmFuc2l0aW9uUHJvcHMgfSBmcm9tICcuLi90cmFuc2l0aW9ucy91dGlscyc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBzdHlsZXMgPSB7XG4gIGVudGVyaW5nOiB7XG4gICAgb3BhY2l0eTogMVxuICB9LFxuICBlbnRlcmVkOiB7XG4gICAgb3BhY2l0eTogMVxuICB9XG59O1xuXG4vKipcbiAqIFRoZSBGYWRlIHRyYW5zaXRpb24gaXMgdXNlZCBieSB0aGUgW01vZGFsXSgvbWF0ZXJpYWwtdWkvcmVhY3QtbW9kYWwvKSBjb21wb25lbnQuXG4gKiBJdCB1c2VzIFtyZWFjdC10cmFuc2l0aW9uLWdyb3VwXShodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwKSBpbnRlcm5hbGx5LlxuICovXG5jb25zdCBGYWRlID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRmFkZShwcm9wcywgcmVmKSB7XG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcbiAgY29uc3QgZGVmYXVsdFRpbWVvdXQgPSB7XG4gICAgZW50ZXI6IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLmVudGVyaW5nU2NyZWVuLFxuICAgIGV4aXQ6IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLmxlYXZpbmdTY3JlZW5cbiAgfTtcbiAgY29uc3Qge1xuICAgICAgYWRkRW5kTGlzdGVuZXIsXG4gICAgICBhcHBlYXIgPSB0cnVlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBlYXNpbmcsXG4gICAgICBpbjogaW5Qcm9wLFxuICAgICAgb25FbnRlcixcbiAgICAgIG9uRW50ZXJlZCxcbiAgICAgIG9uRW50ZXJpbmcsXG4gICAgICBvbkV4aXQsXG4gICAgICBvbkV4aXRlZCxcbiAgICAgIG9uRXhpdGluZyxcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCA9IGRlZmF1bHRUaW1lb3V0LFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3Byb3AtdHlwZXNcbiAgICAgIFRyYW5zaXRpb25Db21wb25lbnQgPSBUcmFuc2l0aW9uXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGVuYWJsZVN0cmljdE1vZGVDb21wYXQgPSB0cnVlO1xuICBjb25zdCBub2RlUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKG5vZGVSZWYsIGNoaWxkcmVuLnJlZiwgcmVmKTtcbiAgY29uc3Qgbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayA9IGNhbGxiYWNrID0+IG1heWJlSXNBcHBlYXJpbmcgPT4ge1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVSZWYuY3VycmVudDtcblxuICAgICAgLy8gb25FbnRlclh4eCBhbmQgb25FeGl0WHh4IGNhbGxiYWNrcyBoYXZlIGEgZGlmZmVyZW50IGFyZ3VtZW50cy5sZW5ndGggdmFsdWUuXG4gICAgICBpZiAobWF5YmVJc0FwcGVhcmluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNhbGxiYWNrKG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sobm9kZSwgbWF5YmVJc0FwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVFbnRlcmluZyA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FbnRlcmluZyk7XG4gIGNvbnN0IGhhbmRsZUVudGVyID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjaygobm9kZSwgaXNBcHBlYXJpbmcpID0+IHtcbiAgICByZWZsb3cobm9kZSk7IC8vIFNvIHRoZSBhbmltYXRpb24gYWx3YXlzIHN0YXJ0IGZyb20gdGhlIHN0YXJ0LlxuXG4gICAgY29uc3QgdHJhbnNpdGlvblByb3BzID0gZ2V0VHJhbnNpdGlvblByb3BzKHtcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVhc2luZ1xuICAgIH0sIHtcbiAgICAgIG1vZGU6ICdlbnRlcidcbiAgICB9KTtcbiAgICBub2RlLnN0eWxlLndlYmtpdFRyYW5zaXRpb24gPSB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB0cmFuc2l0aW9uUHJvcHMpO1xuICAgIG5vZGUuc3R5bGUudHJhbnNpdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHRyYW5zaXRpb25Qcm9wcyk7XG4gICAgaWYgKG9uRW50ZXIpIHtcbiAgICAgIG9uRW50ZXIobm9kZSwgaXNBcHBlYXJpbmcpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUVudGVyZWQgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRW50ZXJlZCk7XG4gIGNvbnN0IGhhbmRsZUV4aXRpbmcgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRXhpdGluZyk7XG4gIGNvbnN0IGhhbmRsZUV4aXQgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG5vZGUgPT4ge1xuICAgIGNvbnN0IHRyYW5zaXRpb25Qcm9wcyA9IGdldFRyYW5zaXRpb25Qcm9wcyh7XG4gICAgICBzdHlsZSxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBlYXNpbmdcbiAgICB9LCB7XG4gICAgICBtb2RlOiAnZXhpdCdcbiAgICB9KTtcbiAgICBub2RlLnN0eWxlLndlYmtpdFRyYW5zaXRpb24gPSB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB0cmFuc2l0aW9uUHJvcHMpO1xuICAgIG5vZGUuc3R5bGUudHJhbnNpdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHRyYW5zaXRpb25Qcm9wcyk7XG4gICAgaWYgKG9uRXhpdCkge1xuICAgICAgb25FeGl0KG5vZGUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUV4aXRlZCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FeGl0ZWQpO1xuICBjb25zdCBoYW5kbGVBZGRFbmRMaXN0ZW5lciA9IG5leHQgPT4ge1xuICAgIGlmIChhZGRFbmRMaXN0ZW5lcikge1xuICAgICAgLy8gT2xkIGNhbGwgc2lnbmF0dXJlIGJlZm9yZSBgcmVhY3QtdHJhbnNpdGlvbi1ncm91cGAgaW1wbGVtZW50ZWQgYG5vZGVSZWZgXG4gICAgICBhZGRFbmRMaXN0ZW5lcihub2RlUmVmLmN1cnJlbnQsIG5leHQpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFRyYW5zaXRpb25Db21wb25lbnQsIF9leHRlbmRzKHtcbiAgICBhcHBlYXI6IGFwcGVhcixcbiAgICBpbjogaW5Qcm9wLFxuICAgIG5vZGVSZWY6IGVuYWJsZVN0cmljdE1vZGVDb21wYXQgPyBub2RlUmVmIDogdW5kZWZpbmVkLFxuICAgIG9uRW50ZXI6IGhhbmRsZUVudGVyLFxuICAgIG9uRW50ZXJlZDogaGFuZGxlRW50ZXJlZCxcbiAgICBvbkVudGVyaW5nOiBoYW5kbGVFbnRlcmluZyxcbiAgICBvbkV4aXQ6IGhhbmRsZUV4aXQsXG4gICAgb25FeGl0ZWQ6IGhhbmRsZUV4aXRlZCxcbiAgICBvbkV4aXRpbmc6IGhhbmRsZUV4aXRpbmcsXG4gICAgYWRkRW5kTGlzdGVuZXI6IGhhbmRsZUFkZEVuZExpc3RlbmVyLFxuICAgIHRpbWVvdXQ6IHRpbWVvdXRcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogKHN0YXRlLCBjaGlsZFByb3BzKSA9PiB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwgX2V4dGVuZHMoe1xuICAgICAgICBzdHlsZTogX2V4dGVuZHMoe1xuICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgdmlzaWJpbGl0eTogc3RhdGUgPT09ICdleGl0ZWQnICYmICFpblByb3AgPyAnaGlkZGVuJyA6IHVuZGVmaW5lZFxuICAgICAgICB9LCBzdHlsZXNbc3RhdGVdLCBzdHlsZSwgY2hpbGRyZW4ucHJvcHMuc3R5bGUpLFxuICAgICAgICByZWY6IGhhbmRsZVJlZlxuICAgICAgfSwgY2hpbGRQcm9wcykpO1xuICAgIH1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGYWRlLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIEFkZCBhIGN1c3RvbSB0cmFuc2l0aW9uIGVuZCB0cmlnZ2VyLiBDYWxsZWQgd2l0aCB0aGUgdHJhbnNpdGlvbmluZyBET01cbiAgICogbm9kZSBhbmQgYSBkb25lIGNhbGxiYWNrLiBBbGxvd3MgZm9yIG1vcmUgZmluZSBncmFpbmVkIHRyYW5zaXRpb24gZW5kXG4gICAqIGxvZ2ljLiBOb3RlOiBUaW1lb3V0cyBhcmUgc3RpbGwgdXNlZCBhcyBhIGZhbGxiYWNrIGlmIHByb3ZpZGVkLlxuICAgKi9cbiAgYWRkRW5kTGlzdGVuZXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogUGVyZm9ybSB0aGUgZW50ZXIgdHJhbnNpdGlvbiB3aGVuIGl0IGZpcnN0IG1vdW50cyBpZiBgaW5gIGlzIGFsc28gYHRydWVgLlxuICAgKiBTZXQgdGhpcyB0byBgZmFsc2VgIHRvIGRpc2FibGUgdGhpcyBiZWhhdmlvci5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXBwZWFyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEEgc2luZ2xlIGNoaWxkIGNvbnRlbnQgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBlbGVtZW50QWNjZXB0aW5nUmVmLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBUaGUgdHJhbnNpdGlvbiB0aW1pbmcgZnVuY3Rpb24uXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSBlYXNpbmcgb3IgYSBvYmplY3QgY29udGFpbmluZyBlbnRlciBhbmQgZXhpdCB2YWx1ZXMuXG4gICAqL1xuICBlYXNpbmc6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgZW50ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZXhpdDogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IHdpbGwgdHJhbnNpdGlvbiBpbi5cbiAgICovXG4gIGluOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcmVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRW50ZXJpbmc6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FeGl0OiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdGluZzogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBmb3IgdGhlIHRyYW5zaXRpb24sIGluIG1pbGxpc2Vjb25kcy5cbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIHRpbWVvdXQgZm9yIGFsbCB0cmFuc2l0aW9ucywgb3IgaW5kaXZpZHVhbGx5IHdpdGggYW4gb2JqZWN0LlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgZW50ZXI6IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLmVudGVyaW5nU2NyZWVuLFxuICAgKiAgIGV4aXQ6IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLmxlYXZpbmdTY3JlZW4sXG4gICAqIH1cbiAgICovXG4gIHRpbWVvdXQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXBwZWFyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGVudGVyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5udW1iZXJcbiAgfSldKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZhZGU7Il0sIm5hbWVzIjpbImRlZmF1bHRUaGVtZSIsImNyZWF0ZVRoZW1lIiwiY3JlYXRlQm94IiwidGhlbWVJZCIsImRlZmF1bHRDbGFzc05hbWUiLCJyb290IiwiZ2VuZXJhdGVDbGFzc05hbWUiLCJDbGFzc05hbWVHZW5lcmF0b3IiLCJnZW5lcmF0ZSIsImdldEJ1dHRvblV0aWxpdHlDbGFzcyIsInNsb3QiLCJnZW5lcmF0ZVV0aWxpdHlDbGFzcyIsImdlbmVyYXRlVXRpbGl0eUNsYXNzZXMiLCJ1bmRlZmluZWQiLCJfZXhjbHVkZWQiLCJjb21tb25JY29uU3R5bGVzIiwib3duZXJTdGF0ZSIsInNpemUiLCJmb250U2l6ZSIsIkJ1dHRvblJvb3QiLCJzdHlsZWQiLCJCdXR0b25CYXNlIiwic2hvdWxkRm9yd2FyZFByb3AiLCJwcm9wIiwicm9vdFNob3VsZEZvcndhcmRQcm9wIiwibmFtZSIsIm92ZXJyaWRlc1Jlc29sdmVyIiwicHJvcHMiLCJzdHlsZXMiLCJ2YXJpYW50IiwiY2FwaXRhbGl6ZSIsImNvbG9yIiwiY29sb3JJbmhlcml0IiwiZGlzYWJsZUVsZXZhdGlvbiIsImZ1bGxXaWR0aCIsInRoZW1lIiwiX3RoZW1lJHBhbGV0dGUkZ2V0Q29uIiwiX3RoZW1lJHBhbGV0dGUiLCJpbmhlcml0Q29udGFpbmVkQmFja2dyb3VuZENvbG9yIiwicGFsZXR0ZSIsIm1vZGUiLCJncmV5IiwiaW5oZXJpdENvbnRhaW5lZEhvdmVyQmFja2dyb3VuZENvbG9yIiwiQTEwMCIsInR5cG9ncmFwaHkiLCJidXR0b24iLCJtaW5XaWR0aCIsInBhZGRpbmciLCJib3JkZXJSYWRpdXMiLCJ2YXJzIiwic2hhcGUiLCJ0cmFuc2l0aW9uIiwidHJhbnNpdGlvbnMiLCJjcmVhdGUiLCJkdXJhdGlvbiIsInNob3J0IiwidGV4dERlY29yYXRpb24iLCJiYWNrZ3JvdW5kQ29sb3IiLCJ0ZXh0IiwicHJpbWFyeUNoYW5uZWwiLCJhY3Rpb24iLCJob3Zlck9wYWNpdHkiLCJwcmltYXJ5IiwibWFpbkNoYW5uZWwiLCJtYWluIiwiYm9yZGVyIiwiQnV0dG9uIiwiaW5oZXJpdENvbnRhaW5lZEhvdmVyQmciLCJib3hTaGFkb3ciLCJzaGFkb3dzIiwiZGFyayIsImZvY3VzVmlzaWJsZSIsImRpc2FibGVkIiwiZGlzYWJsZWRCYWNrZ3JvdW5kIiwiZ2V0Q29udHJhc3RUZXh0IiwiY2FsbCIsImluaGVyaXRDb250YWluZWRCZyIsImNvbnRyYXN0VGV4dCIsImJvcmRlckNvbG9yIiwicHhUb1JlbSIsIndpZHRoIiwiQnV0dG9uU3RhcnRJY29uIiwic3RhcnRJY29uIiwiZGlzcGxheSIsIm1hcmdpblJpZ2h0IiwibWFyZ2luTGVmdCIsIkJ1dHRvbkVuZEljb24iLCJlbmRJY29uIiwiaW5Qcm9wcyIsInJlZiIsImNvbnRleHRQcm9wcyIsImJ1dHRvbkdyb3VwQnV0dG9uQ29udGV4dFBvc2l0aW9uQ2xhc3NOYW1lIiwicmVzb2x2ZWRQcm9wcyIsInJlc29sdmVQcm9wcyIsImNoaWxkcmVuIiwiY29tcG9uZW50IiwiY2xhc3NOYW1lIiwiZGlzYWJsZUZvY3VzUmlwcGxlIiwiZW5kSWNvblByb3AiLCJmb2N1c1Zpc2libGVDbGFzc05hbWUiLCJzdGFydEljb25Qcm9wIiwidHlwZSIsIm90aGVyIiwiY2xhc3NlcyIsInNsb3RzIiwibGFiZWwiLCJjb21wb3NlZENsYXNzZXMiLCJjb21wb3NlQ2xhc3NlcyIsInVzZVV0aWxpdHlDbGFzc2VzIiwicG9zaXRpb25DbGFzc05hbWUiLCJjbHN4IiwiZm9jdXNSaXBwbGUiLCJfdCIsIl90MiIsIl90MyIsIl90NCIsIl8iLCJ0IiwiZW50ZXJLZXlmcmFtZSIsImV4aXRLZXlmcmFtZSIsInB1bHNhdGVLZXlmcmFtZSIsIlRvdWNoUmlwcGxlUm9vdCIsIm92ZXJmbG93IiwicG9pbnRlckV2ZW50cyIsInBvc2l0aW9uIiwiekluZGV4IiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwiVG91Y2hSaXBwbGVSaXBwbGUiLCJwdWxzYXRlIiwicmlwcGxlWCIsInJpcHBsZVkiLCJyaXBwbGVTaXplIiwiaW4iLCJpblByb3AiLCJvbkV4aXRlZCIsInRpbWVvdXQiLCJsZWF2aW5nIiwic2V0TGVhdmluZyIsInJpcHBsZUNsYXNzTmFtZSIsInJpcHBsZSIsInJpcHBsZVZpc2libGUiLCJyaXBwbGVQdWxzYXRlIiwicmlwcGxlU3R5bGVzIiwiaGVpZ2h0IiwiY2hpbGRDbGFzc05hbWUiLCJjaGlsZCIsImNoaWxkTGVhdmluZyIsImNoaWxkUHVsc2F0ZSIsInRpbWVvdXRJZCIsInNldFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJzdHlsZSIsImVhc2luZyIsImVhc2VJbk91dCIsInNob3J0ZXIiLCJjZW50ZXIiLCJjZW50ZXJQcm9wIiwicmlwcGxlcyIsInNldFJpcHBsZXMiLCJuZXh0S2V5IiwicmlwcGxlQ2FsbGJhY2siLCJjdXJyZW50IiwiaWdub3JpbmdNb3VzZURvd24iLCJzdGFydFRpbWVyIiwidXNlVGltZW91dCIsInN0YXJ0VGltZXJDb21taXQiLCJjb250YWluZXIiLCJzdGFydENvbW1pdCIsInBhcmFtcyIsImNiIiwib2xkUmlwcGxlcyIsInN0YXJ0IiwiZXZlbnQiLCJvcHRpb25zIiwiZmFrZUVsZW1lbnQiLCJlbGVtZW50IiwicmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImNsaWVudFgiLCJjbGllbnRZIiwidG91Y2hlcyIsIk1hdGgiLCJyb3VuZCIsImxlbmd0aCIsInNxcnQiLCJzaXplWCIsIm1heCIsImFicyIsImNsaWVudFdpZHRoIiwic2l6ZVkiLCJjbGllbnRIZWlnaHQiLCJzdG9wIiwiY2xlYXIiLCJzbGljZSIsIlRyYW5zaXRpb25Hcm91cCIsImV4aXQiLCJnZXRCdXR0b25CYXNlVXRpbGl0eUNsYXNzIiwiQnV0dG9uQmFzZVJvb3QiLCJhbGlnbkl0ZW1zIiwianVzdGlmeUNvbnRlbnQiLCJib3hTaXppbmciLCJXZWJraXRUYXBIaWdobGlnaHRDb2xvciIsIm91dGxpbmUiLCJtYXJnaW4iLCJjdXJzb3IiLCJ1c2VyU2VsZWN0IiwidmVydGljYWxBbGlnbiIsIk1vekFwcGVhcmFuY2UiLCJXZWJraXRBcHBlYXJhbmNlIiwiYm9yZGVyU3R5bGUiLCJjb2xvckFkanVzdCIsImNlbnRlclJpcHBsZSIsImRpc2FibGVSaXBwbGUiLCJkaXNhYmxlVG91Y2hSaXBwbGUiLCJMaW5rQ29tcG9uZW50Iiwib25CbHVyIiwib25DbGljayIsIm9uQ29udGV4dE1lbnUiLCJvbkRyYWdMZWF2ZSIsIm9uRm9jdXMiLCJvbkZvY3VzVmlzaWJsZSIsIm9uS2V5RG93biIsIm9uS2V5VXAiLCJvbk1vdXNlRG93biIsIm9uTW91c2VMZWF2ZSIsIm9uTW91c2VVcCIsIm9uVG91Y2hFbmQiLCJvblRvdWNoTW92ZSIsIm9uVG91Y2hTdGFydCIsInRhYkluZGV4IiwiVG91Y2hSaXBwbGVQcm9wcyIsInRvdWNoUmlwcGxlUmVmIiwiYnV0dG9uUmVmIiwicmlwcGxlUmVmIiwiaGFuZGxlUmlwcGxlUmVmIiwidXNlRm9ya1JlZiIsImlzRm9jdXNWaXNpYmxlUmVmIiwiaGFuZGxlRm9jdXNWaXNpYmxlIiwiaGFuZGxlQmx1clZpc2libGUiLCJmb2N1c1Zpc2libGVSZWYiLCJ1c2VJc0ZvY3VzVmlzaWJsZSIsInNldEZvY3VzVmlzaWJsZSIsImZvY3VzIiwibW91bnRlZFN0YXRlIiwic2V0TW91bnRlZFN0YXRlIiwiZW5hYmxlVG91Y2hSaXBwbGUiLCJ1c2VSaXBwbGVIYW5kbGVyIiwicmlwcGxlQWN0aW9uIiwiZXZlbnRDYWxsYmFjayIsInNraXBSaXBwbGVBY3Rpb24iLCJ1c2VFdmVudENhbGxiYWNrIiwiaGFuZGxlTW91c2VEb3duIiwiaGFuZGxlQ29udGV4dE1lbnUiLCJoYW5kbGVEcmFnTGVhdmUiLCJoYW5kbGVNb3VzZVVwIiwiaGFuZGxlTW91c2VMZWF2ZSIsInByZXZlbnREZWZhdWx0IiwiaGFuZGxlVG91Y2hTdGFydCIsImhhbmRsZVRvdWNoRW5kIiwiaGFuZGxlVG91Y2hNb3ZlIiwiaGFuZGxlQmx1ciIsImhhbmRsZUZvY3VzIiwiY3VycmVudFRhcmdldCIsImlzTm9uTmF0aXZlQnV0dG9uIiwidGFnTmFtZSIsImhyZWYiLCJrZXlkb3duUmVmIiwiaGFuZGxlS2V5RG93biIsImtleSIsInRhcmdldCIsImhhbmRsZUtleVVwIiwiZGVmYXVsdFByZXZlbnRlZCIsIkNvbXBvbmVudFByb3AiLCJ0byIsImJ1dHRvblByb3BzIiwicm9sZSIsImhhbmRsZVJlZiIsImFzIiwiZ2V0Q2lyY3VsYXJQcm9ncmVzc1V0aWxpdHlDbGFzcyIsImNpcmN1bGFyUm90YXRlS2V5ZnJhbWUiLCJjaXJjdWxhckRhc2hLZXlmcmFtZSIsIkNpcmN1bGFyUHJvZ3Jlc3NSb290IiwiQ2lyY3VsYXJQcm9ncmVzc1NWRyIsInN2ZyIsIkNpcmN1bGFyUHJvZ3Jlc3NDaXJjbGUiLCJjaXJjbGUiLCJkaXNhYmxlU2hyaW5rIiwiY2lyY2xlRGlzYWJsZVNocmluayIsInN0cm9rZSIsInN0cm9rZURhc2hhcnJheSIsInN0cm9rZURhc2hvZmZzZXQiLCJ0aGlja25lc3MiLCJ2YWx1ZSIsImNpcmNsZVN0eWxlIiwicm9vdFN0eWxlIiwicm9vdFByb3BzIiwiY2lyY3VtZmVyZW5jZSIsIlBJIiwidG9GaXhlZCIsInRyYW5zZm9ybSIsInZpZXdCb3giLCJjeCIsImN5IiwiciIsImZpbGwiLCJzdHJva2VXaWR0aCIsImdldENvbGxhcHNlVXRpbGl0eUNsYXNzIiwiQ29sbGFwc2VSb290Iiwib3JpZW50YXRpb24iLCJzdGF0ZSIsImVudGVyZWQiLCJjb2xsYXBzZWRTaXplIiwiaGlkZGVuIiwidmlzaWJpbGl0eSIsIkNvbGxhcHNlV3JhcHBlciIsIndyYXBwZXIiLCJDb2xsYXBzZVdyYXBwZXJJbm5lciIsIndyYXBwZXJJbm5lciIsIkNvbGxhcHNlIiwiYWRkRW5kTGlzdGVuZXIiLCJjb2xsYXBzZWRTaXplUHJvcCIsIm9uRW50ZXIiLCJvbkVudGVyZWQiLCJvbkVudGVyaW5nIiwib25FeGl0Iiwib25FeGl0aW5nIiwic3RhbmRhcmQiLCJUcmFuc2l0aW9uQ29tcG9uZW50IiwiVHJhbnNpdGlvbiIsInVzZVRoZW1lIiwidGltZXIiLCJ3cmFwcGVyUmVmIiwiYXV0b1RyYW5zaXRpb25EdXJhdGlvbiIsImlzSG9yaXpvbnRhbCIsIm5vZGVSZWYiLCJub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrIiwiY2FsbGJhY2siLCJtYXliZUlzQXBwZWFyaW5nIiwibm9kZSIsImdldFdyYXBwZXJTaXplIiwiaGFuZGxlRW50ZXIiLCJpc0FwcGVhcmluZyIsImhhbmRsZUVudGVyaW5nIiwid3JhcHBlclNpemUiLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJ0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24iLCJkdXJhdGlvbjIiLCJnZXRBdXRvSGVpZ2h0RHVyYXRpb24iLCJoYW5kbGVFbnRlcmVkIiwiaGFuZGxlRXhpdCIsImhhbmRsZUV4aXRlZCIsImhhbmRsZUV4aXRpbmciLCJuZXh0IiwiY2hpbGRQcm9wcyIsIm11aVN1cHBvcnRBdXRvIiwiY3JlYXRlU3R5bGVkQ29tcG9uZW50IiwiU3RyaW5nIiwibWF4V2lkdGgiLCJmaXhlZCIsImRpc2FibGVHdXR0ZXJzIiwidXNlVGhlbWVQcm9wcyIsImh0bWwiLCJlbmFibGVDb2xvclNjaGVtZSIsIldlYmtpdEZvbnRTbW9vdGhpbmciLCJNb3pPc3hGb250U21vb3RoaW5nIiwiV2Via2l0VGV4dFNpemVBZGp1c3QiLCJjb2xvclNjaGVtZSIsImJvZHkiLCJib2R5MSIsImJhY2tncm91bmQiLCJkZWZhdWx0IiwiY29tbW9uIiwid2hpdGUiLCJfdGhlbWUkY29tcG9uZW50cyIsImNvbG9yU2NoZW1lU3R5bGVzIiwiY29sb3JTY2hlbWVzIiwiT2JqZWN0IiwiZW50cmllcyIsImZvckVhY2giLCJzY2hlbWUiLCJfc2NoZW1lJHBhbGV0dGUiLCJnZXRDb2xvclNjaGVtZVNlbGVjdG9yIiwicmVwbGFjZSIsImRlZmF1bHRTdHlsZXMiLCJmb250V2VpZ2h0IiwiZm9udFdlaWdodEJvbGQiLCJ0aGVtZU92ZXJyaWRlcyIsImNvbXBvbmVudHMiLCJNdWlDc3NCYXNlbGluZSIsInN0eWxlT3ZlcnJpZGVzIiwidXNlRGVmYXVsdFByb3BzIiwiZ2V0RGlhbG9nVXRpbGl0eUNsYXNzIiwiRGlhbG9nQmFja2Ryb3AiLCJCYWNrZHJvcCIsIm92ZXJyaWRlcyIsImJhY2tkcm9wIiwiRGlhbG9nUm9vdCIsIk1vZGFsIiwiRGlhbG9nQ29udGFpbmVyIiwic2Nyb2xsIiwib3ZlcmZsb3dZIiwib3ZlcmZsb3dYIiwidGV4dEFsaWduIiwiY29udGVudCIsIkRpYWxvZ1BhcGVyIiwiUGFwZXIiLCJwYXBlciIsInBhcGVyRnVsbFdpZHRoIiwiZnVsbFNjcmVlbiIsInBhcGVyRnVsbFNjcmVlbiIsImZsZXhEaXJlY3Rpb24iLCJtYXhIZWlnaHQiLCJicmVha3BvaW50cyIsInVuaXQiLCJ2YWx1ZXMiLCJ4cyIsInBhcGVyU2Nyb2xsQm9keSIsImRvd24iLCJkZWZhdWx0VHJhbnNpdGlvbkR1cmF0aW9uIiwiZW50ZXIiLCJlbnRlcmluZ1NjcmVlbiIsImxlYXZpbmdTY3JlZW4iLCJhcmlhRGVzY3JpYmVkYnkiLCJhcmlhTGFiZWxsZWRieVByb3AiLCJCYWNrZHJvcENvbXBvbmVudCIsIkJhY2tkcm9wUHJvcHMiLCJkaXNhYmxlRXNjYXBlS2V5RG93biIsIm9uQmFja2Ryb3BDbGljayIsIm9uQ2xvc2UiLCJvcGVuIiwiUGFwZXJDb21wb25lbnQiLCJQYXBlclByb3BzIiwiRmFkZSIsIlRyYW5zaXRpb25Qcm9wcyIsImJhY2tkcm9wQ2xpY2siLCJhcmlhTGFiZWxsZWRieSIsInVzZUlkIiwiZGlhbG9nQ29udGV4dFZhbHVlIiwidGl0bGVJZCIsImNsb3NlQWZ0ZXJUcmFuc2l0aW9uIiwiY29tcG9uZW50c1Byb3BzIiwiYXBwZWFyIiwiZWxldmF0aW9uIiwiUHJvdmlkZXIiLCJnZXREaWFsb2dBY3Rpb25zVXRpbGl0eUNsYXNzIiwiRGlhbG9nQWN0aW9uc1Jvb3QiLCJkaXNhYmxlU3BhY2luZyIsInNwYWNpbmciLCJmbGV4IiwiZ2V0RGlhbG9nQ29udGVudFV0aWxpdHlDbGFzcyIsIkRpYWxvZ0NvbnRlbnRSb290IiwiZGl2aWRlcnMiLCJXZWJraXRPdmVyZmxvd1Njcm9sbGluZyIsImJvcmRlclRvcCIsImRpdmlkZXIiLCJib3JkZXJCb3R0b20iLCJwYWRkaW5nVG9wIiwiZW50ZXJpbmciLCJvcGFjaXR5IiwiZGVmYXVsdFRpbWVvdXQiLCJ0cmFuc2l0aW9uUHJvcHMiLCJ3ZWJraXRUcmFuc2l0aW9uIl0sInNvdXJjZVJvb3QiOiIifQ==