/*! For license information please see 3848.0206d333.js.LICENSE.txt */
(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[3848],{77296:(e,t,r)=>{"use strict";r.d(t,{c:()=>ie});var n=r(29752),o=r(86404),i=r(11504),a=r(21216),l=r(54960),c=r(61072),s=r(9507),d=r(93704),u=r(86580),p=r(58364),f=r(65816);const h={animating:!1,autoplaying:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,dragging:!1,edgeDragged:!1,initialized:!1,lazyLoadedList:[],listHeight:null,listWidth:null,scrolling:!1,slideCount:null,slideHeight:null,slideWidth:null,swipeLeft:null,swiped:!1,swiping:!1,touchObject:{startX:0,startY:0,curX:0,curY:0},trackStyle:{},trackWidth:0,targetSlide:0};var g=r(73336),v=r.n(g),b=r(89080),m=r.n(b);function w(e,t,r){return Math.max(t,Math.min(e,r))}var k=function(e){["onTouchStart","onTouchMove","onWheel"].includes(e._reactName)||e.preventDefault()},y=function(e){for(var t=[],r=S(e),n=x(e),o=r;o<n;o++)e.lazyLoadedList.indexOf(o)<0&&t.push(o);return t},S=function(e){return e.currentSlide-C(e)},x=function(e){return e.currentSlide+T(e)},C=function(e){return e.centerMode?Math.floor(e.slidesToShow/2)+(parseInt(e.centerPadding)>0?1:0):0},T=function(e){return e.centerMode?Math.floor((e.slidesToShow-1)/2)+1+(parseInt(e.centerPadding)>0?1:0):e.slidesToShow},L=function(e){return e&&e.offsetWidth||0},M=function(e){return e&&e.offsetHeight||0},E=function(e){var t,r,n,o,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return t=e.startX-e.curX,r=e.startY-e.curY,n=Math.atan2(r,t),(o=Math.round(180*n/Math.PI))<0&&(o=360-Math.abs(o)),o<=45&&o>=0||o<=360&&o>=315?"left":o>=135&&o<=225?"right":!0===i?o>=35&&o<=135?"up":"down":"vertical"},z=function(e){var t=!0;return e.infinite||(e.centerMode&&e.currentSlide>=e.slideCount-1||e.slideCount<=e.slidesToShow||e.currentSlide>=e.slideCount-e.slidesToShow)&&(t=!1),t},H=function(e,t){var r={};return t.forEach((function(t){return r[t]=e[t]})),r},W=function(e,t){var r=function(e){for(var t=e.infinite?2*e.slideCount:e.slideCount,r=e.infinite?-1*e.slidesToShow:0,n=e.infinite?-1*e.slidesToShow:0,o=[];r<t;)o.push(r),r=n+e.slidesToScroll,n+=Math.min(e.slidesToScroll,e.slidesToShow);return o}(e),n=0;if(t>r[r.length-1])t=r[r.length-1];else for(var o in r){if(t<r[o]){t=n;break}n=r[o]}return t},P=function(e){var t=e.centerMode?e.slideWidth*Math.floor(e.slidesToShow/2):0;if(e.swipeToSlide){var r,n=e.listRef,o=n.querySelectorAll&&n.querySelectorAll(".slick-slide")||[];if(Array.from(o).every((function(n){if(e.vertical){if(n.offsetTop+M(n)/2>-1*e.swipeLeft)return r=n,!1}else if(n.offsetLeft-t+L(n)/2>-1*e.swipeLeft)return r=n,!1;return!0})),!r)return 0;var i=!0===e.rtl?e.slideCount-e.currentSlide:e.currentSlide;return Math.abs(r.dataset.index-i)||1}return e.slidesToScroll},R=function(e,t){return t.reduce((function(t,r){return t&&e.hasOwnProperty(r)}),!0)?null:console.error("Keys Missing:",e)},A=function(e){var t,r;R(e,["left","variableWidth","slideCount","slidesToShow","slideWidth"]);var n=e.slideCount+2*e.slidesToShow;e.vertical?r=n*e.slideHeight:t=D(e)*e.slideWidth;var o={opacity:1,transition:"",WebkitTransition:""};if(e.useTransform){var i=e.vertical?"translate3d(0px, "+e.left+"px, 0px)":"translate3d("+e.left+"px, 0px, 0px)",l=e.vertical?"translate3d(0px, "+e.left+"px, 0px)":"translate3d("+e.left+"px, 0px, 0px)",c=e.vertical?"translateY("+e.left+"px)":"translateX("+e.left+"px)";o=(0,a.c)((0,a.c)({},o),{},{WebkitTransform:i,transform:l,msTransform:c})}else e.vertical?o.top=e.left:o.left=e.left;return e.fade&&(o={opacity:1}),t&&(o.width=t),r&&(o.height=r),window&&!window.addEventListener&&window.attachEvent&&(e.vertical?o.marginTop=e.left+"px":o.marginLeft=e.left+"px"),o},O=function(e){R(e,["left","variableWidth","slideCount","slidesToShow","slideWidth","speed","cssEase"]);var t=A(e);return e.useTransform?(t.WebkitTransition="-webkit-transform "+e.speed+"ms "+e.cssEase,t.transition="transform "+e.speed+"ms "+e.cssEase):e.vertical?t.transition="top "+e.speed+"ms "+e.cssEase:t.transition="left "+e.speed+"ms "+e.cssEase,t},I=function(e){if(e.unslick)return 0;R(e,["slideIndex","trackRef","infinite","centerMode","slideCount","slidesToShow","slidesToScroll","slideWidth","listWidth","variableWidth","slideHeight"]);var t,r,n=e.slideIndex,o=e.trackRef,i=e.infinite,a=e.centerMode,l=e.slideCount,c=e.slidesToShow,s=e.slidesToScroll,d=e.slideWidth,u=e.listWidth,p=e.variableWidth,f=e.slideHeight,h=e.fade,g=e.vertical;if(h||1===e.slideCount)return 0;var v=0;if(i?(v=-N(e),l%s!=0&&n+s>l&&(v=-(n>l?c-(n-l):l%s)),a&&(v+=parseInt(c/2))):(l%s!=0&&n+s>l&&(v=c-l%s),a&&(v=parseInt(c/2))),t=g?n*f*-1+v*f:n*d*-1+v*d,!0===p){var b,m=o&&o.node;if(b=n+N(e),t=(r=m&&m.childNodes[b])?-1*r.offsetLeft:0,!0===a){b=i?n+N(e):n,r=m&&m.children[b],t=0;for(var w=0;w<b;w++)t-=m&&m.children[w]&&m.children[w].offsetWidth;t-=parseInt(e.centerPadding),t+=r&&(u-r.offsetWidth)/2}}return t},N=function(e){return e.unslick||!e.infinite?0:e.variableWidth?e.slideCount:e.slidesToShow+(e.centerMode?1:0)},F=function(e){return e.unslick||!e.infinite?0:e.slideCount},D=function(e){return 1===e.slideCount?1:N(e)+e.slideCount+F(e)},Z=function(e){return e.targetSlide>e.currentSlide?e.targetSlide>e.currentSlide+_(e)?"left":"right":e.targetSlide<e.currentSlide-X(e)?"right":"left"},_=function(e){var t=e.slidesToShow,r=e.centerMode,n=e.rtl,o=e.centerPadding;if(r){var i=(t-1)/2+1;return parseInt(o)>0&&(i+=1),n&&t%2==0&&(i+=1),i}return n?0:t-1},X=function(e){var t=e.slidesToShow,r=e.centerMode,n=e.rtl,o=e.centerPadding;if(r){var i=(t-1)/2+1;return parseInt(o)>0&&(i+=1),n||t%2!=0||(i+=1),i}return n?t-1:0},G=function(){return!("undefined"==typeof window||!window.document||!window.document.createElement)},Y=function(e){var t,r,n,o,i;return n=(i=e.rtl?e.slideCount-1-e.index:e.index)<0||i>=e.slideCount,e.centerMode?(o=Math.floor(e.slidesToShow/2),r=(i-e.currentSlide)%e.slideCount==0,i>e.currentSlide-o-1&&i<=e.currentSlide+o&&(t=!0)):t=e.currentSlide<=i&&i<e.currentSlide+e.slidesToShow,{"slick-slide":!0,"slick-active":t,"slick-center":r,"slick-cloned":n,"slick-current":i===(e.targetSlide<0?e.targetSlide+e.slideCount:e.targetSlide>=e.slideCount?e.targetSlide-e.slideCount:e.targetSlide)}},j=function(e,t){return e.key+"-"+t},B=function(e){var t,r=[],n=[],o=[],l=i.Children.count(e.children),c=S(e),s=x(e);return i.Children.forEach(e.children,(function(d,u){var p,f={message:"children",index:u,slidesToScroll:e.slidesToScroll,currentSlide:e.currentSlide};p=!e.lazyLoad||e.lazyLoad&&e.lazyLoadedList.indexOf(u)>=0?d:i.createElement("div",null);var h=function(e){var t={};return void 0!==e.variableWidth&&!1!==e.variableWidth||(t.width=e.slideWidth),e.fade&&(t.position="relative",e.vertical?t.top=-e.index*parseInt(e.slideHeight):t.left=-e.index*parseInt(e.slideWidth),t.opacity=e.currentSlide===e.index?1:0,e.useCSS&&(t.transition="opacity "+e.speed+"ms "+e.cssEase+", visibility "+e.speed+"ms "+e.cssEase)),t}((0,a.c)((0,a.c)({},e),{},{index:u})),g=p.props.className||"",v=Y((0,a.c)((0,a.c)({},e),{},{index:u}));if(r.push(i.cloneElement(p,{key:"original"+j(p,u),"data-index":u,className:m()(v,g),tabIndex:"-1","aria-hidden":!v["slick-active"],style:(0,a.c)((0,a.c)({outline:"none"},p.props.style||{}),h),onClick:function(t){p.props&&p.props.onClick&&p.props.onClick(t),e.focusOnSelect&&e.focusOnSelect(f)}})),e.infinite&&!1===e.fade){var b=l-u;b<=N(e)&&l!==e.slidesToShow&&((t=-b)>=c&&(p=d),v=Y((0,a.c)((0,a.c)({},e),{},{index:t})),n.push(i.cloneElement(p,{key:"precloned"+j(p,t),"data-index":t,tabIndex:"-1",className:m()(v,g),"aria-hidden":!v["slick-active"],style:(0,a.c)((0,a.c)({},p.props.style||{}),h),onClick:function(t){p.props&&p.props.onClick&&p.props.onClick(t),e.focusOnSelect&&e.focusOnSelect(f)}}))),l!==e.slidesToShow&&((t=l+u)<s&&(p=d),v=Y((0,a.c)((0,a.c)({},e),{},{index:t})),o.push(i.cloneElement(p,{key:"postcloned"+j(p,t),"data-index":t,tabIndex:"-1",className:m()(v,g),"aria-hidden":!v["slick-active"],style:(0,a.c)((0,a.c)({},p.props.style||{}),h),onClick:function(t){p.props&&p.props.onClick&&p.props.onClick(t),e.focusOnSelect&&e.focusOnSelect(f)}})))}})),e.rtl?n.concat(r,o).reverse():n.concat(r,o)},q=function(e){(0,d.c)(r,e);var t=(0,u.c)(r);function r(){var e;(0,l.c)(this,r);for(var o=arguments.length,i=new Array(o),a=0;a<o;a++)i[a]=arguments[a];return e=t.call.apply(t,[this].concat(i)),(0,n.c)((0,s.c)(e),"node",null),(0,n.c)((0,s.c)(e),"handleRef",(function(t){e.node=t})),e}return(0,c.c)(r,[{key:"render",value:function(){var e=B(this.props),t=this.props,r={onMouseEnter:t.onMouseEnter,onMouseOver:t.onMouseOver,onMouseLeave:t.onMouseLeave};return i.createElement("div",(0,o.c)({ref:this.handleRef,className:"slick-track",style:this.props.trackStyle},r),e)}}]),r}(i.PureComponent),U=function(e){(0,d.c)(r,e);var t=(0,u.c)(r);function r(){return(0,l.c)(this,r),t.apply(this,arguments)}return(0,c.c)(r,[{key:"clickHandler",value:function(e,t){t.preventDefault(),this.props.clickHandler(e)}},{key:"render",value:function(){for(var e,t=this.props,r=t.onMouseEnter,n=t.onMouseOver,o=t.onMouseLeave,l=t.infinite,c=t.slidesToScroll,s=t.slidesToShow,d=t.slideCount,u=t.currentSlide,p=(e={slideCount:d,slidesToScroll:c,slidesToShow:s,infinite:l}).infinite?Math.ceil(e.slideCount/e.slidesToScroll):Math.ceil((e.slideCount-e.slidesToShow)/e.slidesToScroll)+1,f={onMouseEnter:r,onMouseOver:n,onMouseLeave:o},h=[],g=0;g<p;g++){var v=(g+1)*c-1,b=l?v:w(v,0,d-1),k=b-(c-1),y=l?k:w(k,0,d-1),S=m()({"slick-active":l?u>=y&&u<=b:u===y}),x={message:"dots",index:g,slidesToScroll:c,currentSlide:u},C=this.clickHandler.bind(this,x);h=h.concat(i.createElement("li",{key:g,className:S},i.cloneElement(this.props.customPaging(g),{onClick:C})))}return i.cloneElement(this.props.appendDots(h),(0,a.c)({className:this.props.dotsClass},f))}}]),r}(i.PureComponent),V=function(e){(0,d.c)(r,e);var t=(0,u.c)(r);function r(){return(0,l.c)(this,r),t.apply(this,arguments)}return(0,c.c)(r,[{key:"clickHandler",value:function(e,t){t&&t.preventDefault(),this.props.clickHandler(e,t)}},{key:"render",value:function(){var e={"slick-arrow":!0,"slick-prev":!0},t=this.clickHandler.bind(this,{message:"previous"});!this.props.infinite&&(0===this.props.currentSlide||this.props.slideCount<=this.props.slidesToShow)&&(e["slick-disabled"]=!0,t=null);var r={key:"0","data-role":"none",className:m()(e),style:{display:"block"},onClick:t},n={currentSlide:this.props.currentSlide,slideCount:this.props.slideCount};return this.props.prevArrow?i.cloneElement(this.props.prevArrow,(0,a.c)((0,a.c)({},r),n)):i.createElement("button",(0,o.c)({key:"0",type:"button"},r)," ","Previous")}}]),r}(i.PureComponent),$=function(e){(0,d.c)(r,e);var t=(0,u.c)(r);function r(){return(0,l.c)(this,r),t.apply(this,arguments)}return(0,c.c)(r,[{key:"clickHandler",value:function(e,t){t&&t.preventDefault(),this.props.clickHandler(e,t)}},{key:"render",value:function(){var e={"slick-arrow":!0,"slick-next":!0},t=this.clickHandler.bind(this,{message:"next"});z(this.props)||(e["slick-disabled"]=!0,t=null);var r={key:"1","data-role":"none",className:m()(e),style:{display:"block"},onClick:t},n={currentSlide:this.props.currentSlide,slideCount:this.props.slideCount};return this.props.nextArrow?i.cloneElement(this.props.nextArrow,(0,a.c)((0,a.c)({},r),n)):i.createElement("button",(0,o.c)({key:"1",type:"button"},r)," ","Next")}}]),r}(i.PureComponent),K=r(36464),J=function(e){(0,d.c)(r,e);var t=(0,u.c)(r);function r(e){var c;(0,l.c)(this,r),c=t.call(this,e),(0,n.c)((0,s.c)(c),"listRefHandler",(function(e){return c.list=e})),(0,n.c)((0,s.c)(c),"trackRefHandler",(function(e){return c.track=e})),(0,n.c)((0,s.c)(c),"adaptHeight",(function(){if(c.props.adaptiveHeight&&c.list){var e=c.list.querySelector('[data-index="'.concat(c.state.currentSlide,'"]'));c.list.style.height=M(e)+"px"}})),(0,n.c)((0,s.c)(c),"componentDidMount",(function(){if(c.props.onInit&&c.props.onInit(),c.props.lazyLoad){var e=y((0,a.c)((0,a.c)({},c.props),c.state));e.length>0&&(c.setState((function(t){return{lazyLoadedList:t.lazyLoadedList.concat(e)}})),c.props.onLazyLoad&&c.props.onLazyLoad(e))}var t=(0,a.c)({listRef:c.list,trackRef:c.track},c.props);c.updateState(t,!0,(function(){c.adaptHeight(),c.props.autoplay&&c.autoPlay("playing")})),"progressive"===c.props.lazyLoad&&(c.lazyLoadTimer=setInterval(c.progressiveLazyLoad,1e3)),c.ro=new K.c((function(){c.state.animating?(c.onWindowResized(!1),c.callbackTimers.push(setTimeout((function(){return c.onWindowResized()}),c.props.speed))):c.onWindowResized()})),c.ro.observe(c.list),document.querySelectorAll&&Array.prototype.forEach.call(document.querySelectorAll(".slick-slide"),(function(e){e.onfocus=c.props.pauseOnFocus?c.onSlideFocus:null,e.onblur=c.props.pauseOnFocus?c.onSlideBlur:null})),window.addEventListener?window.addEventListener("resize",c.onWindowResized):window.attachEvent("onresize",c.onWindowResized)})),(0,n.c)((0,s.c)(c),"componentWillUnmount",(function(){c.animationEndCallback&&clearTimeout(c.animationEndCallback),c.lazyLoadTimer&&clearInterval(c.lazyLoadTimer),c.callbackTimers.length&&(c.callbackTimers.forEach((function(e){return clearTimeout(e)})),c.callbackTimers=[]),window.addEventListener?window.removeEventListener("resize",c.onWindowResized):window.detachEvent("onresize",c.onWindowResized),c.autoplayTimer&&clearInterval(c.autoplayTimer),c.ro.disconnect()})),(0,n.c)((0,s.c)(c),"componentDidUpdate",(function(e){if(c.checkImagesLoad(),c.props.onReInit&&c.props.onReInit(),c.props.lazyLoad){var t=y((0,a.c)((0,a.c)({},c.props),c.state));t.length>0&&(c.setState((function(e){return{lazyLoadedList:e.lazyLoadedList.concat(t)}})),c.props.onLazyLoad&&c.props.onLazyLoad(t))}c.adaptHeight();var r=(0,a.c)((0,a.c)({listRef:c.list,trackRef:c.track},c.props),c.state),n=c.didPropsChange(e);n&&c.updateState(r,n,(function(){c.state.currentSlide>=i.Children.count(c.props.children)&&c.changeSlide({message:"index",index:i.Children.count(c.props.children)-c.props.slidesToShow,currentSlide:c.state.currentSlide}),e.autoplay===c.props.autoplay&&e.autoplaySpeed===c.props.autoplaySpeed||(!e.autoplay&&c.props.autoplay?c.autoPlay("playing"):c.props.autoplay?c.autoPlay("update"):c.pause("paused"))}))})),(0,n.c)((0,s.c)(c),"onWindowResized",(function(e){c.debouncedResize&&c.debouncedResize.cancel(),c.debouncedResize=v()((function(){return c.resizeWindow(e)}),50),c.debouncedResize()})),(0,n.c)((0,s.c)(c),"resizeWindow",(function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];if(Boolean(c.track&&c.track.node)){var t=(0,a.c)((0,a.c)({listRef:c.list,trackRef:c.track},c.props),c.state);c.updateState(t,e,(function(){c.props.autoplay?c.autoPlay("update"):c.pause("paused")})),c.setState({animating:!1}),clearTimeout(c.animationEndCallback),delete c.animationEndCallback}})),(0,n.c)((0,s.c)(c),"updateState",(function(e,t,r){var n=function(e){var t,r=i.Children.count(e.children),n=e.listRef,o=Math.ceil(L(n)),l=e.trackRef&&e.trackRef.node,c=Math.ceil(L(l));if(e.vertical)t=o;else{var s=e.centerMode&&2*parseInt(e.centerPadding);"string"==typeof e.centerPadding&&"%"===e.centerPadding.slice(-1)&&(s*=o/100),t=Math.ceil((o-s)/e.slidesToShow)}var d=n&&M(n.querySelector('[data-index="0"]')),u=d*e.slidesToShow,p=void 0===e.currentSlide?e.initialSlide:e.currentSlide;e.rtl&&void 0===e.currentSlide&&(p=r-1-e.initialSlide);var f=e.lazyLoadedList||[],h=y((0,a.c)((0,a.c)({},e),{},{currentSlide:p,lazyLoadedList:f})),g={slideCount:r,slideWidth:t,listWidth:o,trackWidth:c,currentSlide:p,slideHeight:d,listHeight:u,lazyLoadedList:f=f.concat(h)};return null===e.autoplaying&&e.autoplay&&(g.autoplaying="playing"),g}(e);e=(0,a.c)((0,a.c)((0,a.c)({},e),n),{},{slideIndex:n.currentSlide});var o=I(e);e=(0,a.c)((0,a.c)({},e),{},{left:o});var l=A(e);(t||i.Children.count(c.props.children)!==i.Children.count(e.children))&&(n.trackStyle=l),c.setState(n,r)})),(0,n.c)((0,s.c)(c),"ssrInit",(function(){if(c.props.variableWidth){var e=0,t=0,r=[],n=N((0,a.c)((0,a.c)((0,a.c)({},c.props),c.state),{},{slideCount:c.props.children.length})),o=F((0,a.c)((0,a.c)((0,a.c)({},c.props),c.state),{},{slideCount:c.props.children.length}));c.props.children.forEach((function(t){r.push(t.props.style.width),e+=t.props.style.width}));for(var l=0;l<n;l++)t+=r[r.length-1-l],e+=r[r.length-1-l];for(var s=0;s<o;s++)e+=r[s];for(var d=0;d<c.state.currentSlide;d++)t+=r[d];var u={width:e+"px",left:-t+"px"};if(c.props.centerMode){var p="".concat(r[c.state.currentSlide],"px");u.left="calc(".concat(u.left," + (100% - ").concat(p,") / 2 ) ")}return{trackStyle:u}}var f=i.Children.count(c.props.children),h=(0,a.c)((0,a.c)((0,a.c)({},c.props),c.state),{},{slideCount:f}),g=N(h)+F(h)+f,v=100/c.props.slidesToShow*g,b=100/g,m=-b*(N(h)+c.state.currentSlide)*v/100;return c.props.centerMode&&(m+=(100-b*v/100)/2),{slideWidth:b+"%",trackStyle:{width:v+"%",left:m+"%"}}})),(0,n.c)((0,s.c)(c),"checkImagesLoad",(function(){var e=c.list&&c.list.querySelectorAll&&c.list.querySelectorAll(".slick-slide img")||[],t=e.length,r=0;Array.prototype.forEach.call(e,(function(e){var n=function(){return++r&&r>=t&&c.onWindowResized()};if(e.onclick){var o=e.onclick;e.onclick=function(){o(),e.parentNode.focus()}}else e.onclick=function(){return e.parentNode.focus()};e.onload||(c.props.lazyLoad?e.onload=function(){c.adaptHeight(),c.callbackTimers.push(setTimeout(c.onWindowResized,c.props.speed))}:(e.onload=n,e.onerror=function(){n(),c.props.onLazyLoadError&&c.props.onLazyLoadError()}))}))})),(0,n.c)((0,s.c)(c),"progressiveLazyLoad",(function(){for(var e=[],t=(0,a.c)((0,a.c)({},c.props),c.state),r=c.state.currentSlide;r<c.state.slideCount+F(t);r++)if(c.state.lazyLoadedList.indexOf(r)<0){e.push(r);break}for(var n=c.state.currentSlide-1;n>=-N(t);n--)if(c.state.lazyLoadedList.indexOf(n)<0){e.push(n);break}e.length>0?(c.setState((function(t){return{lazyLoadedList:t.lazyLoadedList.concat(e)}})),c.props.onLazyLoad&&c.props.onLazyLoad(e)):c.lazyLoadTimer&&(clearInterval(c.lazyLoadTimer),delete c.lazyLoadTimer)})),(0,n.c)((0,s.c)(c),"slideHandler",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=c.props,n=r.asNavFor,o=r.beforeChange,i=r.onLazyLoad,l=r.speed,s=r.afterChange,d=c.state.currentSlide,u=function(e){var t=e.waitForAnimate,r=e.animating,n=e.fade,o=e.infinite,i=e.index,l=e.slideCount,c=e.lazyLoad,s=e.currentSlide,d=e.centerMode,u=e.slidesToScroll,p=e.slidesToShow,f=e.useCSS,h=e.lazyLoadedList;if(t&&r)return{};var g,v,b,m=i,k={},S={},x=o?i:w(i,0,l-1);if(n){if(!o&&(i<0||i>=l))return{};i<0?m=i+l:i>=l&&(m=i-l),c&&h.indexOf(m)<0&&(h=h.concat(m)),k={animating:!0,currentSlide:m,lazyLoadedList:h,targetSlide:m},S={animating:!1,targetSlide:m}}else g=m,m<0?(g=m+l,o?l%u!=0&&(g=l-l%u):g=0):!z(e)&&m>s?m=g=s:d&&m>=l?(m=o?l:l-1,g=o?0:l-1):m>=l&&(g=m-l,o?l%u!=0&&(g=0):g=l-p),!o&&m+p>=l&&(g=l-p),v=I((0,a.c)((0,a.c)({},e),{},{slideIndex:m})),b=I((0,a.c)((0,a.c)({},e),{},{slideIndex:g})),o||(v===b&&(m=g),v=b),c&&(h=h.concat(y((0,a.c)((0,a.c)({},e),{},{currentSlide:m})))),f?(k={animating:!0,currentSlide:g,trackStyle:O((0,a.c)((0,a.c)({},e),{},{left:v})),lazyLoadedList:h,targetSlide:x},S={animating:!1,currentSlide:g,trackStyle:A((0,a.c)((0,a.c)({},e),{},{left:b})),swipeLeft:null,targetSlide:x}):k={currentSlide:g,trackStyle:A((0,a.c)((0,a.c)({},e),{},{left:b})),lazyLoadedList:h,targetSlide:x};return{state:k,nextState:S}}((0,a.c)((0,a.c)((0,a.c)({index:e},c.props),c.state),{},{trackRef:c.track,useCSS:c.props.useCSS&&!t})),p=u.state,h=u.nextState;if(p){o&&o(d,p.currentSlide);var g=p.lazyLoadedList.filter((function(e){return c.state.lazyLoadedList.indexOf(e)<0}));i&&g.length>0&&i(g),!c.props.waitForAnimate&&c.animationEndCallback&&(clearTimeout(c.animationEndCallback),s&&s(d),delete c.animationEndCallback),c.setState(p,(function(){n&&c.asNavForIndex!==e&&(c.asNavForIndex=e,n.innerSlider.slideHandler(e)),h&&(c.animationEndCallback=setTimeout((function(){var e=h.animating,t=(0,f.c)(h,["animating"]);c.setState(t,(function(){c.callbackTimers.push(setTimeout((function(){return c.setState({animating:e})}),10)),s&&s(p.currentSlide),delete c.animationEndCallback}))}),l))}))}})),(0,n.c)((0,s.c)(c),"changeSlide",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=function(e,t){var r,n,o,i,l=e.slidesToScroll,c=e.slidesToShow,s=e.slideCount,d=e.currentSlide,u=e.targetSlide,p=e.lazyLoad,f=e.infinite;if(r=s%l!=0?0:(s-d)%l,"previous"===t.message)i=d-(o=0===r?l:c-r),p&&!f&&(i=-1==(n=d-o)?s-1:n),f||(i=u-l);else if("next"===t.message)i=d+(o=0===r?l:r),p&&!f&&(i=(d+l)%s+r),f||(i=u+l);else if("dots"===t.message)i=t.index*t.slidesToScroll;else if("children"===t.message){if(i=t.index,f){var h=Z((0,a.c)((0,a.c)({},e),{},{targetSlide:i}));i>t.currentSlide&&"left"===h?i-=s:i<t.currentSlide&&"right"===h&&(i+=s)}}else"index"===t.message&&(i=Number(t.index));return i}((0,a.c)((0,a.c)({},c.props),c.state),e);if((0===r||r)&&(!0===t?c.slideHandler(r,t):c.slideHandler(r),c.props.autoplay&&c.autoPlay("update"),c.props.focusOnSelect)){var n=c.list.querySelectorAll(".slick-current");n[0]&&n[0].focus()}})),(0,n.c)((0,s.c)(c),"clickHandler",(function(e){!1===c.clickable&&(e.stopPropagation(),e.preventDefault()),c.clickable=!0})),(0,n.c)((0,s.c)(c),"keyHandler",(function(e){var t=function(e,t,r){return e.target.tagName.match("TEXTAREA|INPUT|SELECT")||!t?"":37===e.keyCode?r?"next":"previous":39===e.keyCode?r?"previous":"next":""}(e,c.props.accessibility,c.props.rtl);""!==t&&c.changeSlide({message:t})})),(0,n.c)((0,s.c)(c),"selectHandler",(function(e){c.changeSlide(e)})),(0,n.c)((0,s.c)(c),"disableBodyScroll",(function(){window.ontouchmove=function(e){(e=e||window.event).preventDefault&&e.preventDefault(),e.returnValue=!1}})),(0,n.c)((0,s.c)(c),"enableBodyScroll",(function(){window.ontouchmove=null})),(0,n.c)((0,s.c)(c),"swipeStart",(function(e){c.props.verticalSwiping&&c.disableBodyScroll();var t=function(e,t,r){return"IMG"===e.target.tagName&&k(e),!t||!r&&-1!==e.type.indexOf("mouse")?"":{dragging:!0,touchObject:{startX:e.touches?e.touches[0].pageX:e.clientX,startY:e.touches?e.touches[0].pageY:e.clientY,curX:e.touches?e.touches[0].pageX:e.clientX,curY:e.touches?e.touches[0].pageY:e.clientY}}}(e,c.props.swipe,c.props.draggable);""!==t&&c.setState(t)})),(0,n.c)((0,s.c)(c),"swipeMove",(function(e){var t=function(e,t){var r=t.scrolling,n=t.animating,o=t.vertical,i=t.swipeToSlide,l=t.verticalSwiping,c=t.rtl,s=t.currentSlide,d=t.edgeFriction,u=t.edgeDragged,p=t.onEdge,f=t.swiped,h=t.swiping,g=t.slideCount,v=t.slidesToScroll,b=t.infinite,m=t.touchObject,w=t.swipeEvent,y=t.listHeight,S=t.listWidth;if(!r){if(n)return k(e);o&&i&&l&&k(e);var x,C={},T=I(t);m.curX=e.touches?e.touches[0].pageX:e.clientX,m.curY=e.touches?e.touches[0].pageY:e.clientY,m.swipeLength=Math.round(Math.sqrt(Math.pow(m.curX-m.startX,2)));var L=Math.round(Math.sqrt(Math.pow(m.curY-m.startY,2)));if(!l&&!h&&L>10)return{scrolling:!0};l&&(m.swipeLength=L);var M=(c?-1:1)*(m.curX>m.startX?1:-1);l&&(M=m.curY>m.startY?1:-1);var H=Math.ceil(g/v),W=E(t.touchObject,l),P=m.swipeLength;return b||(0===s&&("right"===W||"down"===W)||s+1>=H&&("left"===W||"up"===W)||!z(t)&&("left"===W||"up"===W))&&(P=m.swipeLength*d,!1===u&&p&&(p(W),C.edgeDragged=!0)),!f&&w&&(w(W),C.swiped=!0),x=o?T+P*(y/S)*M:c?T-P*M:T+P*M,l&&(x=T+P*M),C=(0,a.c)((0,a.c)({},C),{},{touchObject:m,swipeLeft:x,trackStyle:A((0,a.c)((0,a.c)({},t),{},{left:x}))}),Math.abs(m.curX-m.startX)<.8*Math.abs(m.curY-m.startY)||m.swipeLength>10&&(C.swiping=!0,k(e)),C}}(e,(0,a.c)((0,a.c)((0,a.c)({},c.props),c.state),{},{trackRef:c.track,listRef:c.list,slideIndex:c.state.currentSlide}));t&&(t.swiping&&(c.clickable=!1),c.setState(t))})),(0,n.c)((0,s.c)(c),"swipeEnd",(function(e){var t=function(e,t){var r=t.dragging,n=t.swipe,o=t.touchObject,i=t.listWidth,l=t.touchThreshold,c=t.verticalSwiping,s=t.listHeight,d=t.swipeToSlide,u=t.scrolling,p=t.onSwipe,f=t.targetSlide,h=t.currentSlide,g=t.infinite;if(!r)return n&&k(e),{};var v=c?s/l:i/l,b=E(o,c),m={dragging:!1,edgeDragged:!1,scrolling:!1,swiping:!1,swiped:!1,swipeLeft:null,touchObject:{}};if(u)return m;if(!o.swipeLength)return m;if(o.swipeLength>v){var w,y;k(e),p&&p(b);var S=g?h:f;switch(b){case"left":case"up":y=S+P(t),w=d?W(t,y):y,m.currentDirection=0;break;case"right":case"down":y=S-P(t),w=d?W(t,y):y,m.currentDirection=1;break;default:w=S}m.triggerSlideHandler=w}else{var x=I(t);m.trackStyle=O((0,a.c)((0,a.c)({},t),{},{left:x}))}return m}(e,(0,a.c)((0,a.c)((0,a.c)({},c.props),c.state),{},{trackRef:c.track,listRef:c.list,slideIndex:c.state.currentSlide}));if(t){var r=t.triggerSlideHandler;delete t.triggerSlideHandler,c.setState(t),void 0!==r&&(c.slideHandler(r),c.props.verticalSwiping&&c.enableBodyScroll())}})),(0,n.c)((0,s.c)(c),"touchEnd",(function(e){c.swipeEnd(e),c.clickable=!0})),(0,n.c)((0,s.c)(c),"slickPrev",(function(){c.callbackTimers.push(setTimeout((function(){return c.changeSlide({message:"previous"})}),0))})),(0,n.c)((0,s.c)(c),"slickNext",(function(){c.callbackTimers.push(setTimeout((function(){return c.changeSlide({message:"next"})}),0))})),(0,n.c)((0,s.c)(c),"slickGoTo",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(e=Number(e),isNaN(e))return"";c.callbackTimers.push(setTimeout((function(){return c.changeSlide({message:"index",index:e,currentSlide:c.state.currentSlide},t)}),0))})),(0,n.c)((0,s.c)(c),"play",(function(){var e;if(c.props.rtl)e=c.state.currentSlide-c.props.slidesToScroll;else{if(!z((0,a.c)((0,a.c)({},c.props),c.state)))return!1;e=c.state.currentSlide+c.props.slidesToScroll}c.slideHandler(e)})),(0,n.c)((0,s.c)(c),"autoPlay",(function(e){c.autoplayTimer&&clearInterval(c.autoplayTimer);var t=c.state.autoplaying;if("update"===e){if("hovered"===t||"focused"===t||"paused"===t)return}else if("leave"===e){if("paused"===t||"focused"===t)return}else if("blur"===e&&("paused"===t||"hovered"===t))return;c.autoplayTimer=setInterval(c.play,c.props.autoplaySpeed+50),c.setState({autoplaying:"playing"})})),(0,n.c)((0,s.c)(c),"pause",(function(e){c.autoplayTimer&&(clearInterval(c.autoplayTimer),c.autoplayTimer=null);var t=c.state.autoplaying;"paused"===e?c.setState({autoplaying:"paused"}):"focused"===e?"hovered"!==t&&"playing"!==t||c.setState({autoplaying:"focused"}):"playing"===t&&c.setState({autoplaying:"hovered"})})),(0,n.c)((0,s.c)(c),"onDotsOver",(function(){return c.props.autoplay&&c.pause("hovered")})),(0,n.c)((0,s.c)(c),"onDotsLeave",(function(){return c.props.autoplay&&"hovered"===c.state.autoplaying&&c.autoPlay("leave")})),(0,n.c)((0,s.c)(c),"onTrackOver",(function(){return c.props.autoplay&&c.pause("hovered")})),(0,n.c)((0,s.c)(c),"onTrackLeave",(function(){return c.props.autoplay&&"hovered"===c.state.autoplaying&&c.autoPlay("leave")})),(0,n.c)((0,s.c)(c),"onSlideFocus",(function(){return c.props.autoplay&&c.pause("focused")})),(0,n.c)((0,s.c)(c),"onSlideBlur",(function(){return c.props.autoplay&&"focused"===c.state.autoplaying&&c.autoPlay("blur")})),(0,n.c)((0,s.c)(c),"render",(function(){var e,t,r,n=m()("slick-slider",c.props.className,{"slick-vertical":c.props.vertical,"slick-initialized":!0}),l=(0,a.c)((0,a.c)({},c.props),c.state),s=H(l,["fade","cssEase","speed","infinite","centerMode","focusOnSelect","currentSlide","lazyLoad","lazyLoadedList","rtl","slideWidth","slideHeight","listHeight","vertical","slidesToShow","slidesToScroll","slideCount","trackStyle","variableWidth","unslick","centerPadding","targetSlide","useCSS"]),d=c.props.pauseOnHover;if(s=(0,a.c)((0,a.c)({},s),{},{onMouseEnter:d?c.onTrackOver:null,onMouseLeave:d?c.onTrackLeave:null,onMouseOver:d?c.onTrackOver:null,focusOnSelect:c.props.focusOnSelect&&c.clickable?c.selectHandler:null}),!0===c.props.dots&&c.state.slideCount>=c.props.slidesToShow){var u=H(l,["dotsClass","slideCount","slidesToShow","currentSlide","slidesToScroll","clickHandler","children","customPaging","infinite","appendDots"]),p=c.props.pauseOnDotsHover;u=(0,a.c)((0,a.c)({},u),{},{clickHandler:c.changeSlide,onMouseEnter:p?c.onDotsLeave:null,onMouseOver:p?c.onDotsOver:null,onMouseLeave:p?c.onDotsLeave:null}),e=i.createElement(U,u)}var f=H(l,["infinite","centerMode","currentSlide","slideCount","slidesToShow","prevArrow","nextArrow"]);f.clickHandler=c.changeSlide,c.props.arrows&&(t=i.createElement(V,f),r=i.createElement($,f));var h=null;c.props.vertical&&(h={height:c.state.listHeight});var g=null;!1===c.props.vertical?!0===c.props.centerMode&&(g={padding:"0px "+c.props.centerPadding}):!0===c.props.centerMode&&(g={padding:c.props.centerPadding+" 0px"});var v=(0,a.c)((0,a.c)({},h),g),b=c.props.touchMove,w={className:"slick-list",style:v,onClick:c.clickHandler,onMouseDown:b?c.swipeStart:null,onMouseMove:c.state.dragging&&b?c.swipeMove:null,onMouseUp:b?c.swipeEnd:null,onMouseLeave:c.state.dragging&&b?c.swipeEnd:null,onTouchStart:b?c.swipeStart:null,onTouchMove:c.state.dragging&&b?c.swipeMove:null,onTouchEnd:b?c.touchEnd:null,onTouchCancel:c.state.dragging&&b?c.swipeEnd:null,onKeyDown:c.props.accessibility?c.keyHandler:null},k={className:n,dir:"ltr",style:c.props.style};return c.props.unslick&&(w={className:"slick-list"},k={className:n}),i.createElement("div",k,c.props.unslick?"":t,i.createElement("div",(0,o.c)({ref:c.listRefHandler},w),i.createElement(q,(0,o.c)({ref:c.trackRefHandler},s),c.props.children)),c.props.unslick?"":r,c.props.unslick?"":e)})),c.list=null,c.track=null,c.state=(0,a.c)((0,a.c)({},h),{},{currentSlide:c.props.initialSlide,slideCount:i.Children.count(c.props.children)}),c.callbackTimers=[],c.clickable=!0,c.debouncedResize=null;var d=c.ssrInit();return c.state=(0,a.c)((0,a.c)({},c.state),d),c}return(0,c.c)(r,[{key:"didPropsChange",value:function(e){for(var t=!1,r=0,n=Object.keys(this.props);r<n.length;r++){var o=n[r];if(!e.hasOwnProperty(o)){t=!0;break}if("object"!==(0,p.c)(e[o])&&"function"!=typeof e[o]&&e[o]!==this.props[o]){t=!0;break}}return t||i.Children.count(this.props.children)!==i.Children.count(e.children)}}]),r}(i.Component),Q=r(67820),ee=r.n(Q);const te={accessibility:!0,adaptiveHeight:!1,afterChange:null,appendDots:function(e){return i.createElement("ul",{style:{display:"block"}},e)},arrows:!0,autoplay:!1,autoplaySpeed:3e3,beforeChange:null,centerMode:!1,centerPadding:"50px",className:"",cssEase:"ease",customPaging:function(e){return i.createElement("button",null,e+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,infinite:!0,initialSlide:0,lazyLoad:null,nextArrow:null,onEdge:null,onInit:null,onLazyLoadError:null,onReInit:null,pauseOnDotsHover:!1,pauseOnFocus:!1,pauseOnHover:!0,prevArrow:null,responsive:null,rows:1,rtl:!1,slide:"div",slidesPerRow:1,slidesToScroll:1,slidesToShow:1,speed:500,swipe:!0,swipeEvent:null,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,waitForAnimate:!0};const re=function(e){(0,d.c)(r,e);var t=(0,u.c)(r);function r(e){var o;return(0,l.c)(this,r),o=t.call(this,e),(0,n.c)((0,s.c)(o),"innerSliderRefHandler",(function(e){return o.innerSlider=e})),(0,n.c)((0,s.c)(o),"slickPrev",(function(){return o.innerSlider.slickPrev()})),(0,n.c)((0,s.c)(o),"slickNext",(function(){return o.innerSlider.slickNext()})),(0,n.c)((0,s.c)(o),"slickGoTo",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return o.innerSlider.slickGoTo(e,t)})),(0,n.c)((0,s.c)(o),"slickPause",(function(){return o.innerSlider.pause("paused")})),(0,n.c)((0,s.c)(o),"slickPlay",(function(){return o.innerSlider.autoPlay("play")})),o.state={breakpoint:null},o._responsiveMediaHandlers=[],o}return(0,c.c)(r,[{key:"media",value:function(e,t){var r=window.matchMedia(e),n=function(e){e.matches&&t()};r.addListener(n),n(r),this._responsiveMediaHandlers.push({mql:r,query:e,listener:n})}},{key:"componentDidMount",value:function(){var e=this;if(this.props.responsive){var t=this.props.responsive.map((function(e){return e.breakpoint}));t.sort((function(e,t){return e-t})),t.forEach((function(r,n){var o;o=0===n?ee()({minWidth:0,maxWidth:r}):ee()({minWidth:t[n-1]+1,maxWidth:r}),G()&&e.media(o,(function(){e.setState({breakpoint:r})}))}));var r=ee()({minWidth:t.slice(-1)[0]});G()&&this.media(r,(function(){e.setState({breakpoint:null})}))}}},{key:"componentWillUnmount",value:function(){this._responsiveMediaHandlers.forEach((function(e){e.mql.removeListener(e.listener)}))}},{key:"render",value:function(){var e,t,r=this;(e=this.state.breakpoint?"unslick"===(t=this.props.responsive.filter((function(e){return e.breakpoint===r.state.breakpoint})))[0].settings?"unslick":(0,a.c)((0,a.c)((0,a.c)({},te),this.props),t[0].settings):(0,a.c)((0,a.c)({},te),this.props)).centerMode&&(e.slidesToScroll,e.slidesToScroll=1),e.fade&&(e.slidesToShow,e.slidesToScroll,e.slidesToShow=1,e.slidesToScroll=1);var n=i.Children.toArray(this.props.children);n=n.filter((function(e){return"string"==typeof e?!!e.trim():!!e})),e.variableWidth&&(e.rows>1||e.slidesPerRow>1)&&(console.warn("variableWidth is not supported in case of rows > 1 or slidesPerRow > 1"),e.variableWidth=!1);for(var l=[],c=null,s=0;s<n.length;s+=e.rows*e.slidesPerRow){for(var d=[],u=s;u<s+e.rows*e.slidesPerRow;u+=e.slidesPerRow){for(var p=[],f=u;f<u+e.slidesPerRow&&(e.variableWidth&&n[f].props.style&&(c=n[f].props.style.width),!(f>=n.length));f+=1)p.push(i.cloneElement(n[f],{key:100*s+10*u+f,tabIndex:-1,style:{width:"".concat(100/e.slidesPerRow,"%"),display:"inline-block"}}));d.push(i.createElement("div",{key:10*s+u},p))}e.variableWidth?l.push(i.createElement("div",{key:s,style:{width:c}},d)):l.push(i.createElement("div",{key:s},d))}if("unslick"===e){var h="regular slider "+(this.props.className||"");return i.createElement("div",{className:h},n)}return l.length<=e.slidesToShow&&(e.unslick=!0),i.createElement(J,(0,o.c)({style:this.props.style,ref:this.innerSliderRefHandler},e),l)}}]),r}(i.Component);var ne=r(14756),oe=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r};const ie=i.forwardRef((function(e,t){var r,a=e.dots,l=void 0===a||a,c=e.arrows,s=void 0!==c&&c,d=e.draggable,u=void 0!==d&&d,p=e.dotPosition,f=void 0===p?"bottom":p,h=oe(e,["dots","arrows","draggable","dotPosition"]),g=i.useContext(ne.MT),v=g.getPrefixCls,b=g.direction,w=i.useRef(),k=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];w.current.slickGoTo(e,t)};i.useImperativeHandle(t,(function(){return{goTo:k,autoPlay:w.current.innerSlider.autoPlay,innerSlider:w.current.innerSlider,prev:w.current.slickPrev,next:w.current.slickNext}}),[w.current]);var y=i.useRef(i.Children.count(h.children));i.useEffect((function(){y.current!==i.Children.count(h.children)&&(k(h.initialSlide||0,!1),y.current=i.Children.count(h.children))}),[h.children]);var S=(0,o.c)({},h);"fade"===S.effect&&(S.fade=!0);var x=v("carousel",S.prefixCls),C="slick-dots";S.vertical="left"===f||"right"===f;var T=!!l,L=m()(C,"".concat(C,"-").concat(f),"boolean"!=typeof l&&(null==l?void 0:l.className)),M=m()(x,(r={},(0,n.c)(r,"".concat(x,"-rtl"),"rtl"===b),(0,n.c)(r,"".concat(x,"-vertical"),S.vertical),r));return i.createElement("div",{className:M},i.createElement(re,(0,o.c)({ref:w},S,{dots:T,dotsClass:L,arrows:s,draggable:u})))}))},16060:(e,t,r)=>{"use strict";r.r(t),r.d(t,{render:()=>z});var n=window.document,o=window.Math,i=window.HTMLElement,a=window.XMLHttpRequest,l=function(e,t){for(var r=0,n=e.length;r<n;r++)t(e[r])},c=function(e){return function(t,r,n){var o=e.createElement(t);if(null!=r)for(var i in r){var a=r[i];null!=a&&(null!=o[i]?o[i]=a:o.setAttribute(i,a))}return null!=n&&l(n,(function(t){o.appendChild("string"==typeof t?e.createTextNode(t):t)})),o}},s=c(n),d=function(e,t){return{}.hasOwnProperty.call(e,t)},u=function(e){return(""+e).toLowerCase()},p="github.com",f="https://api."+p,h=a&&"prototype"in a&&"withCredentials"in a.prototype,g=h&&i&&"attachShadow"in i.prototype&&!("prototype"in i.prototype.attachShadow),v=function(e,t,r){e.addEventListener?e.addEventListener(t,r,!1):e.attachEvent("on"+t,r)},b=function(e,t,r){e.removeEventListener?e.removeEventListener(t,r,!1):e.detachEvent("on"+t,r)},m={light:".btn:focus-visible,.social-count:focus-visible{outline:2px solid #0969da;outline-offset:-2px}.btn{color:#24292f;background-color:#ebf0f4;border-color:#ccd1d5;border-color:rgba(31,35,40,.15);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%23f6f8fa'/%3e%3cstop offset='90%25' stop-color='%23ebf0f4'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #f6f8fa, #ebf0f4 90%);background-image:linear-gradient(180deg, #f6f8fa, #ebf0f4 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FFF6F8FA', endColorstr='#FFEAEFF3')}:root .btn{filter:none}.btn:hover,.btn:focus{background-color:#e9ebef;background-position:0 -0.5em;border-color:#cbcdd1;border-color:rgba(31,35,40,.15);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%23f3f4f6'/%3e%3cstop offset='90%25' stop-color='%23e9ebef'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #f3f4f6, #e9ebef 90%);background-image:linear-gradient(180deg, #f3f4f6, #e9ebef 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FFF3F4F6', endColorstr='#FFE8EAEE')}:root .btn:hover,:root .btn:focus{filter:none}.btn:active{background-color:#e5e9ed;border-color:#c7cbcf;border-color:rgba(31,35,40,.15);background-image:none;filter:none}.social-count{color:#24292f;background-color:#fff;border-color:#dddedf;border-color:rgba(31,35,40,.15)}.social-count:hover,.social-count:focus{color:#0969da}.octicon-heart{color:#bf3989}",light_high_contrast:".btn:focus-visible,.social-count:focus-visible{outline:2px solid #0349b4;outline-offset:-2px}.btn{color:#0e1116;background-color:#e7ecf0;border-color:#2f3237;border-color:rgba(1,4,9,.8);background-image:none;filter:none}.btn:hover,.btn:focus{background-color:#c4cdd5;background-position:0 -0.5em;border-color:#282c32;border-color:rgba(1,4,9,.8);background-image:none;filter:none}.btn:active{background-color:#d8dde1;border-color:#2c2f34;border-color:rgba(1,4,9,.8)}.social-count{color:#0e1116;background-color:#fff;border-color:#34363a;border-color:rgba(1,4,9,.8)}.social-count:hover,.social-count:focus{color:#0349b4}.octicon-heart{color:#971368}",dark:".btn:focus-visible,.social-count:focus-visible{outline:2px solid #2f81f7;outline-offset:-2px}.btn{color:#c9d1d9;background-color:#1a1e23;border-color:#2f3439;border-color:rgba(240,246,252,.1);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%2321262d'/%3e%3cstop offset='90%25' stop-color='%231a1e23'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #21262d, #1a1e23 90%);background-image:linear-gradient(180deg, #21262d, #1a1e23 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF21262D', endColorstr='#FF191D22')}:root .btn{filter:none}.btn:hover,.btn:focus{background-color:#292e33;background-position:0 -0.5em;border-color:#8b949e;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%2330363d'/%3e%3cstop offset='90%25' stop-color='%23292e33'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #30363d, #292e33 90%);background-image:linear-gradient(180deg, #30363d, #292e33 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF30363D', endColorstr='#FF282D32')}:root .btn:hover,:root .btn:focus{filter:none}.btn:active{background-color:#161719;border-color:#8b949e;background-image:none;filter:none}.social-count{color:#c9d1d9;background-color:#0d1117;border-color:#24282e;border-color:rgba(240,246,252,.1)}.social-count:hover,.social-count:focus{color:#2f81f7}.octicon-heart{color:#db61a2}",dark_dimmed:".btn:focus-visible,.social-count:focus-visible{outline:2px solid #539bf5;outline-offset:-2px}.btn{color:#adbac7;background-color:#30363d;border-color:#40464e;border-color:rgba(205,217,229,.1);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%23373e47'/%3e%3cstop offset='90%25' stop-color='%2330363d'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #373e47, #30363d 90%);background-image:linear-gradient(180deg, #373e47, #30363d 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF373E47', endColorstr='#FF2F353C')}:root .btn{filter:none}.btn:hover,.btn:focus{background-color:#3c444d;background-position:0 -0.5em;border-color:#768390;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%23444c56'/%3e%3cstop offset='90%25' stop-color='%233c444d'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #444c56, #3c444d 90%);background-image:linear-gradient(180deg, #444c56, #3c444d 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF444C56', endColorstr='#FF3B434C')}:root .btn:hover,:root .btn:focus{filter:none}.btn:active{background-color:#2e3031;border-color:#768390;background-image:none;filter:none}.social-count{color:#adbac7;background-color:#22272e;border-color:#333940;border-color:rgba(205,217,229,.1)}.social-count:hover,.social-count:focus{color:#539bf5}.octicon-heart{color:#c96198}",dark_high_contrast:".btn:focus-visible,.social-count:focus-visible{outline:2px solid #71b7ff;outline-offset:-2px}.btn{color:#f0f3f6;background-color:#272b33;border-color:#7a828e;background-image:none;filter:none}.btn:hover,.btn:focus{background-color:#4a515b;background-position:0 -0.5em;border-color:#bdc4cc;background-image:none;filter:none}.btn:active{background-color:#1d1d1f;border-color:#bdc4cc}.social-count{color:#f0f3f6;background-color:#0a0c10;border-color:#7a828e}.social-count:hover,.social-count:focus{color:#71b7ff}.octicon-heart{color:#ef6eb1}"},w=function(e,t){return"@media(prefers-color-scheme:"+e+"){"+m[d(m,t)?t:e]+"}"},k=function(e){if(null==e)return m.light;if(d(m,e))return m[e];var t=function(e,t,r,n){null==t&&(t="&"),null==r&&(r="="),null==n&&(n=window.decodeURIComponent);var o={};return l(e.split(t),(function(e){if(""!==e){var t=e.split(r);o[n(t[0])]=null!=t[1]?n(t.slice(1).join(r)):void 0}})),o}(e,";",":",(function(e){return e.replace(/^[ \t\n\f\r]+|[ \t\n\f\r]+$/g,"")}));return m[d(m,t["no-preference"])?t["no-preference"]:"light"]+w("light",t.light)+w("dark",t.dark)},y={"comment-discussion":{heights:{16:{width:16,path:'<path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path>'}}},download:{heights:{16:{width:16,path:'<path d="M2.75 14A1.75 1.75 0 0 1 1 12.25v-2.5a.75.75 0 0 1 1.5 0v2.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25v-2.5a.75.75 0 0 1 1.5 0v2.5A1.75 1.75 0 0 1 13.25 14Z"></path><path d="M7.25 7.689V2a.75.75 0 0 1 1.5 0v5.689l1.97-1.969a.749.749 0 1 1 1.06 1.06l-3.25 3.25a.749.749 0 0 1-1.06 0L4.22 6.78a.749.749 0 1 1 1.06-1.06l1.97 1.969Z"></path>'}}},eye:{heights:{16:{width:16,path:'<path d="M8 2c1.981 0 3.671.992 4.933 2.078 1.27 1.091 2.187 2.345 2.637 3.023a1.62 1.62 0 0 1 0 1.798c-.45.678-1.367 1.932-2.637 3.023C11.67 13.008 9.981 14 8 14c-1.981 0-3.671-.992-4.933-2.078C1.797 10.83.88 9.576.43 8.898a1.62 1.62 0 0 1 0-1.798c.45-.677 1.367-1.931 2.637-3.022C4.33 2.992 6.019 2 8 2ZM1.679 7.932a.12.12 0 0 0 0 .136c.411.622 1.241 1.75 2.366 2.717C5.176 11.758 6.527 12.5 8 12.5c1.473 0 2.825-.742 3.955-1.715 1.124-.967 1.954-2.096 2.366-2.717a.12.12 0 0 0 0-.136c-.412-.621-1.242-1.75-2.366-2.717C10.824 4.242 9.473 3.5 8 3.5c-1.473 0-2.825.742-3.955 1.715-1.124.967-1.954 2.096-2.366 2.717ZM8 10a2 2 0 1 1-.001-3.999A2 2 0 0 1 8 10Z"></path>'}}},heart:{heights:{16:{width:16,path:'<path d="m8 14.25.345.666a.75.75 0 0 1-.69 0l-.008-.004-.018-.01a7.152 7.152 0 0 1-.31-.17 22.055 22.055 0 0 1-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.066 22.066 0 0 1-3.744 2.584l-.018.01-.006.003h-.002ZM4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.58 20.58 0 0 0 8 13.393a20.58 20.58 0 0 0 3.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.749.749 0 0 1-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5Z"></path>'}}},"issue-opened":{heights:{16:{width:16,path:'<path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path>'}}},"mark-github":{heights:{16:{width:16,path:'<path d="M8 0c4.42 0 8 3.58 8 8a8.013 8.013 0 0 1-5.45 7.59c-.4.08-.55-.17-.55-.38 0-.27.01-1.13.01-2.2 0-.75-.25-1.23-.54-1.48 1.78-.2 3.65-.88 3.65-3.95 0-.88-.31-1.59-.82-2.15.08-.2.36-1.02-.08-2.12 0 0-.67-.22-2.2.82-.64-.18-1.32-.27-2-.27-.68 0-1.36.09-2 .27-1.53-1.03-2.2-.82-2.2-.82-.44 1.1-.16 1.92-.08 2.12-.51.56-.82 1.28-.82 2.15 0 3.06 1.86 3.75 3.64 3.95-.23.2-.44.55-.51 1.07-.46.21-1.61.55-2.33-.66-.15-.24-.6-.83-1.23-.82-.67.01-.27.38.01.53.34.19.73.9.82 1.13.16.45.68 1.31 2.69.94 0 .67.01 1.3.01 1.49 0 .21-.15.45-.55.38A7.995 7.995 0 0 1 0 8c0-4.42 3.58-8 8-8Z"></path>'}}},package:{heights:{16:{width:16,path:'<path d="m8.878.392 5.25 3.045c.54.314.872.89.872 1.514v6.098a1.75 1.75 0 0 1-.872 1.514l-5.25 3.045a1.75 1.75 0 0 1-1.756 0l-5.25-3.045A1.75 1.75 0 0 1 1 11.049V4.951c0-.624.332-1.201.872-1.514L7.122.392a1.75 1.75 0 0 1 1.756 0ZM7.875 1.69l-4.63 2.685L8 7.133l4.755-2.758-4.63-2.685a.248.248 0 0 0-.25 0ZM2.5 5.677v5.372c0 .09.047.171.125.216l4.625 2.683V8.432Zm6.25 8.271 4.625-2.683a.25.25 0 0 0 .125-.216V5.677L8.75 8.432Z"></path>'}}},play:{heights:{16:{width:16,path:'<path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path>'}}},"repo-forked":{heights:{16:{width:16,path:'<path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path>'}}},"repo-template":{heights:{16:{width:16,path:'<path d="M13.25 8a.75.75 0 0 1 .75.75v4.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-.75a.75.75 0 0 1 0-1.5h.75v-.25a.75.75 0 0 1 .75-.75ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2ZM2.75 8a.75.75 0 0 1 .75.75v.268c.083-.012.166-.018.25-.018h.5a.75.75 0 0 1 0 1.5h-.5a.25.25 0 0 0-.25.25v.75c0 .28.114.532.3.714a.75.75 0 1 1-1.05 1.072A2.495 2.495 0 0 1 2 11.5V8.75A.75.75 0 0 1 2.75 8ZM11 .75a.75.75 0 0 1 .75-.75h1.5a.75.75 0 0 1 .75.75v1.5a.75.75 0 0 1-1.5 0V1.5h-.75A.75.75 0 0 1 11 .75Zm-5 0A.75.75 0 0 1 6.75 0h2.5a.75.75 0 0 1 0 1.5h-2.5A.75.75 0 0 1 6 .75Zm0 9A.75.75 0 0 1 6.75 9h2.5a.75.75 0 0 1 0 1.5h-2.5A.75.75 0 0 1 6 9.75ZM4.992.662a.75.75 0 0 1-.636.848c-.436.063-.783.41-.846.846a.751.751 0 0 1-1.485-.212A2.501 2.501 0 0 1 4.144.025a.75.75 0 0 1 .848.637ZM2.75 4a.75.75 0 0 1 .75.75v1.5a.75.75 0 0 1-1.5 0v-1.5A.75.75 0 0 1 2.75 4Zm10.5 0a.75.75 0 0 1 .75.75v1.5a.75.75 0 0 1-1.5 0v-1.5a.75.75 0 0 1 .75-.75Z"></path>'}}},star:{heights:{16:{width:16,path:'<path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path>'}}}},S=function(e,t){e=u(e).replace(/^octicon-/,""),d(y,e)||(e="mark-github");var r=t>=24&&24 in y[e].heights?24:16,n=y[e].heights[r];return'<svg viewBox="0 0 '+n.width+" "+r+'" width="'+t*n.width/r+'" height="'+t+'" class="octicon octicon-'+e+'" aria-hidden="true">'+n.path+"</svg>"},x={},C=function(e,t){var r=x[e]||(x[e]=[]);if(!(r.push(t)>1)){var n=function(e){var t;return function(){t||(t=1,e.apply(this,arguments))}}((function(){for(delete x[e];t=r.shift();)t.apply(null,arguments)}));if(h){var o=new a;v(o,"abort",n),v(o,"error",n),v(o,"load",(function(){var e;try{e=JSON.parse(this.responseText)}catch(t){return void n(t)}n(200!==this.status,e)})),o.open("GET",e),o.send()}else{var i=this||window;i._=function(e){i._=null,n(200!==e.meta.status,e.data)};var l=c(i.document)("script",{async:!0,src:e+(-1!==e.indexOf("?")?"&":"?")+"callback=_"}),s=function(){i._&&i._({meta:{}})};v(l,"load",s),v(l,"error",s),function(e,t,r){if(null!=e.readyState){var n="readystatechange",o=function(){if(t.test(e.readyState))return b(e,n,o),r.apply(this,arguments)};v(e,n,o)}}(l,/de|m/,s),i.document.getElementsByTagName("head")[0].appendChild(l)}}},T=function(e,t,r){var n=c(e.ownerDocument),o=e.appendChild(n("style",{type:"text/css"})),i="body{margin:0}a{text-decoration:none;outline:0}.widget{display:inline-block;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif;font-size:0;line-height:0;white-space:nowrap}.btn,.social-count{position:relative;display:inline-block;display:inline-flex;height:14px;padding:2px 5px;font-size:11px;font-weight:600;line-height:14px;vertical-align:bottom;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-repeat:repeat-x;background-position:-1px -1px;background-size:110% 110%;border:1px solid}.btn{border-radius:.25em}.btn:not(:last-child){border-radius:.25em 0 0 .25em}.social-count{border-left:0;border-radius:0 .25em .25em 0}.widget-lg .btn,.widget-lg .social-count{height:16px;padding:5px 10px;font-size:12px;line-height:16px}.octicon{display:inline-block;vertical-align:text-top;fill:currentColor;overflow:visible}"+k(t["data-color-scheme"]);o.styleSheet?o.styleSheet.cssText=i:o.appendChild(e.ownerDocument.createTextNode(i));var a="large"===u(t["data-size"]),l=n("a",{className:"btn",href:t.href,rel:"noopener",target:"_blank",title:t.title||void 0,"aria-label":t["aria-label"]||void 0,innerHTML:S(t["data-icon"],a?16:14)+"&nbsp;"},[n("span",{},[t["data-text"]||""])]),s=e.appendChild(n("div",{className:"widget"+(a?" widget-lg":"")},[l])),d=l.hostname.replace(/\.$/,"");if(("."+d).substring(d.length-10)!=="."+p)return l.removeAttribute("href"),void r(s);var h=(" /"+l.pathname).split(/\/+/);if(((d===p||d==="gist."+p)&&"archive"===h[3]||d===p&&"releases"===h[3]&&("download"===h[4]||"latest"===h[4]&&"download"===h[5])||d==="codeload."+p)&&(l.target="_top"),"true"===u(t["data-show-count"])&&d===p&&"marketplace"!==h[1]&&"sponsors"!==h[1]&&"orgs"!==h[1]&&"users"!==h[1]&&"-"!==h[1]){var g,v;if(!h[2]&&h[1])v="followers",g="?tab=followers";else if(!h[3]&&h[2])v="stargazers_count",g="/stargazers";else if(h[4]||"subscription"!==h[3])if(h[4]||"fork"!==h[3]){if("issues"!==h[3])return void r(s);v="open_issues_count",g="/issues"}else v="forks_count",g="/forks";else v="subscribers_count",g="/watchers";var b=h[2]?"/repos/"+h[1]+"/"+h[2]:"/users/"+h[1];C.call(this,f+b,(function(e,t){if(!e){var o=t[v];s.appendChild(n("a",{className:"social-count",href:t.html_url+g,rel:"noopener",target:"_blank","aria-label":o+" "+v.replace(/_count$/,"").replace("_"," ").slice(0,o<2?-1:void 0)+" on GitHub"},[(""+o).replace(/\B(?=(\d{3})+(?!\d))/g,",")]))}r(s)}))}else r(s)},L=window.devicePixelRatio||1,M=function(e){return(L>1?o.ceil(o.round(e*L)/L*2)/2:o.ceil(e))||0},E=function(e,t){e.style.width=t[0]+"px",e.style.height=t[1]+"px"},z=function(e,t){if(null!=e&&null!=t)if(e.getAttribute&&(e=function(e){var t={href:e.href,title:e.title,"aria-label":e.getAttribute("aria-label")};return l(["icon","color-scheme","text","size","show-count"],(function(r){var n="data-"+r;t[n]=e.getAttribute(n)})),null==t["data-text"]&&(t["data-text"]=e.textContent||e.innerText),t}(e)),g){var r=s("span");T(r.attachShadow({mode:"closed"}),e,(function(){t(r)}))}else{var i=s("iframe",{src:"javascript:0",title:e.title||void 0,allowtransparency:!0,scrolling:"no",frameBorder:0});E(i,[0,0]),i.style.border="none";var a=function(){var r,l=i.contentWindow;try{r=l.document.body}catch(c){return void n.body.appendChild(i.parentNode.removeChild(i))}b(i,"load",a),T.call(l,r,e,(function(r){var n=function(e){var t=e.offsetWidth,r=e.offsetHeight;if(e.getBoundingClientRect){var n=e.getBoundingClientRect();t=o.max(t,M(n.width)),r=o.max(r,M(n.height))}return[t,r]}(r);i.parentNode.removeChild(i),function(e,t,r){var n=function(){return b(e,t,n),r.apply(this,arguments)};v(e,t,n)}(i,"load",(function(){E(i,n)})),i.src="https://unpkg.com/github-buttons@2.27.0/dist/buttons.html#"+(i.name=function(e,t,r,n){null==t&&(t="&"),null==r&&(r="="),null==n&&(n=window.encodeURIComponent);var o=[];for(var i in e){var a=e[i];null!=a&&o.push(n(i)+r+n(a))}return o.join(t)}(e)),t(i)}))};v(i,"load",a),n.body.appendChild(i)}}},67820:(e,t,r)=>{var n=r(5776),o=function(e){var t="",r=Object.keys(e);return r.forEach((function(o,i){var a=e[o];(function(e){return/[height|width]$/.test(e)})(o=n(o))&&"number"==typeof a&&(a+="px"),t+=!0===a?o:!1===a?"not "+o:"("+o+": "+a+")",i<r.length-1&&(t+=" and ")})),t};e.exports=function(e){var t="";return"string"==typeof e?e:e instanceof Array?(e.forEach((function(r,n){t+=o(r),n<e.length-1&&(t+=", ")})),t):o(e)}},5776:e=>{e.exports=function(e){return e.replace(/[A-Z]/g,(function(e){return"-"+e.toLowerCase()})).toLowerCase()}},25388:(e,t,r)=>{"use strict";r.d(t,{c:()=>i});var n=r(11504);class o extends n.PureComponent{constructor(e){super(e),this.$=n.createRef(),this._=n.createRef()}render(){return n.createElement("span",{ref:this.$},n.createElement("a",{...this.props,ref:this._},this.props.children))}componentDidMount(){this.paint()}getSnapshotBeforeUpdate(){return this.reset(),null}componentDidUpdate(){this.paint()}componentWillUnmount(){this.reset()}paint(){const e=this.$.current.appendChild(document.createElement("span"));Promise.resolve().then(r.bind(r,16060)).then((({render:t})=>{null!=this._.current&&t(e.appendChild(this._.current),(function(t){try{e.parentNode.replaceChild(t,e)}catch(e){}}))}))}reset(){this.$.current.replaceChild(this._.current,this.$.current.lastChild)}}const i=o}}]);