/*! For license information please see 1836.2a1eea13.js.LICENSE.txt */
(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[1836],{61980:(e,t,r)=>{"use strict";r.d(t,{Z:()=>ie});var n=r(91189),o=r(83117),i=r(67294),a=r(23659),l=r(69379),s=r(80323),c=r(44415),d=r(43637),u=r(79084),p=r(95815),f=r(24567);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(23279),v=r.n(g),b=r(94184),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=Z(e),o=r;o<n;o++)e.lazyLoadedList.indexOf(o)<0&&t.push(o);return t},S=function(e){return e.currentSlide-x(e)},Z=function(e){return e.currentSlide+C(e)},x=function(e){return e.centerMode?Math.floor(e.slidesToShow/2)+(parseInt(e.centerPadding)>0?1:0):0},C=function(e){return e.centerMode?Math.floor((e.slidesToShow-1)/2)+1+(parseInt(e.centerPadding)>0?1:0):e.slidesToShow},T=function(e){return e&&e.offsetWidth||0},L=function(e){return e&&e.offsetHeight||0},M=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"},E=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},z=function(e,t){var r={};return t.forEach((function(t){return r[t]=e[t]})),r},H=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},W=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+L(n)/2>-1*e.swipeLeft)return r=n,!1}else if(n.offsetLeft-t+T(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},P=function(e,t){return t.reduce((function(t,r){return t&&e.hasOwnProperty(r)}),!0)?null:console.error("Keys Missing:",e)},R=function(e){var t,r;P(e,["left","variableWidth","slideCount","slidesToShow","slideWidth"]);var n=e.slideCount+2*e.slidesToShow;e.vertical?r=n*e.slideHeight:t=F(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)",s=e.vertical?"translateY("+e.left+"px)":"translateX("+e.left+"px)";o=(0,a.Z)((0,a.Z)({},o),{},{WebkitTransform:i,transform:l,msTransform:s})}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},A=function(e){P(e,["left","variableWidth","slideCount","slidesToShow","slideWidth","speed","cssEase"]);var t=R(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},O=function(e){if(e.unslick)return 0;P(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,s=e.slidesToShow,c=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=-I(e),l%c!=0&&n+c>l&&(v=-(n>l?s-(n-l):l%c)),a&&(v+=parseInt(s/2))):(l%c!=0&&n+c>l&&(v=s-l%c),a&&(v=parseInt(s/2))),t=g?n*f*-1+v*f:n*d*-1+v*d,!0===p){var b,m=o&&o.node;if(b=n+I(e),t=(r=m&&m.childNodes[b])?-1*r.offsetLeft:0,!0===a){b=i?n+I(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},I=function(e){return e.unslick||!e.infinite?0:e.variableWidth?e.slideCount:e.slidesToShow+(e.centerMode?1:0)},N=function(e){return e.unslick||!e.infinite?0:e.slideCount},F=function(e){return 1===e.slideCount?1:I(e)+e.slideCount+N(e)},D=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),s=S(e),c=Z(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.Z)((0,a.Z)({},e),{},{index:u})),g=p.props.className||"",v=Y((0,a.Z)((0,a.Z)({},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.Z)((0,a.Z)({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<=I(e)&&l!==e.slidesToShow&&((t=-b)>=s&&(p=d),v=Y((0,a.Z)((0,a.Z)({},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.Z)((0,a.Z)({},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)<c&&(p=d),v=Y((0,a.Z)((0,a.Z)({},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.Z)((0,a.Z)({},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.Z)(r,e);var t=(0,u.Z)(r);function r(){var e;(0,l.Z)(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.Z)((0,c.Z)(e),"node",null),(0,n.Z)((0,c.Z)(e),"handleRef",(function(t){e.node=t})),e}return(0,s.Z)(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.Z)({ref:this.handleRef,className:"slick-track",style:this.props.trackStyle},r),e)}}]),r}(i.PureComponent),U=function(e){(0,d.Z)(r,e);var t=(0,u.Z)(r);function r(){return(0,l.Z)(this,r),t.apply(this,arguments)}return(0,s.Z)(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,s=t.slidesToScroll,c=t.slidesToShow,d=t.slideCount,u=t.currentSlide,p=(e={slideCount:d,slidesToScroll:s,slidesToShow:c,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)*s-1,b=l?v:w(v,0,d-1),k=b-(s-1),y=l?k:w(k,0,d-1),S=m()({"slick-active":l?u>=y&&u<=b:u===y}),Z={message:"dots",index:g,slidesToScroll:s,currentSlide:u},x=this.clickHandler.bind(this,Z);h=h.concat(i.createElement("li",{key:g,className:S},i.cloneElement(this.props.customPaging(g),{onClick:x})))}return i.cloneElement(this.props.appendDots(h),(0,a.Z)({className:this.props.dotsClass},f))}}]),r}(i.PureComponent),V=function(e){(0,d.Z)(r,e);var t=(0,u.Z)(r);function r(){return(0,l.Z)(this,r),t.apply(this,arguments)}return(0,s.Z)(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.Z)((0,a.Z)({},r),n)):i.createElement("button",(0,o.Z)({key:"0",type:"button"},r)," ","Previous")}}]),r}(i.PureComponent),$=function(e){(0,d.Z)(r,e);var t=(0,u.Z)(r);function r(){return(0,l.Z)(this,r),t.apply(this,arguments)}return(0,s.Z)(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"});E(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.Z)((0,a.Z)({},r),n)):i.createElement("button",(0,o.Z)({key:"1",type:"button"},r)," ","Next")}}]),r}(i.PureComponent),K=r(91033),J=function(e){(0,d.Z)(r,e);var t=(0,u.Z)(r);function r(e){var s;(0,l.Z)(this,r),s=t.call(this,e),(0,n.Z)((0,c.Z)(s),"listRefHandler",(function(e){return s.list=e})),(0,n.Z)((0,c.Z)(s),"trackRefHandler",(function(e){return s.track=e})),(0,n.Z)((0,c.Z)(s),"adaptHeight",(function(){if(s.props.adaptiveHeight&&s.list){var e=s.list.querySelector('[data-index="'.concat(s.state.currentSlide,'"]'));s.list.style.height=L(e)+"px"}})),(0,n.Z)((0,c.Z)(s),"componentDidMount",(function(){if(s.props.onInit&&s.props.onInit(),s.props.lazyLoad){var e=y((0,a.Z)((0,a.Z)({},s.props),s.state));e.length>0&&(s.setState((function(t){return{lazyLoadedList:t.lazyLoadedList.concat(e)}})),s.props.onLazyLoad&&s.props.onLazyLoad(e))}var t=(0,a.Z)({listRef:s.list,trackRef:s.track},s.props);s.updateState(t,!0,(function(){s.adaptHeight(),s.props.autoplay&&s.autoPlay("playing")})),"progressive"===s.props.lazyLoad&&(s.lazyLoadTimer=setInterval(s.progressiveLazyLoad,1e3)),s.ro=new K.Z((function(){s.state.animating?(s.onWindowResized(!1),s.callbackTimers.push(setTimeout((function(){return s.onWindowResized()}),s.props.speed))):s.onWindowResized()})),s.ro.observe(s.list),document.querySelectorAll&&Array.prototype.forEach.call(document.querySelectorAll(".slick-slide"),(function(e){e.onfocus=s.props.pauseOnFocus?s.onSlideFocus:null,e.onblur=s.props.pauseOnFocus?s.onSlideBlur:null})),window.addEventListener?window.addEventListener("resize",s.onWindowResized):window.attachEvent("onresize",s.onWindowResized)})),(0,n.Z)((0,c.Z)(s),"componentWillUnmount",(function(){s.animationEndCallback&&clearTimeout(s.animationEndCallback),s.lazyLoadTimer&&clearInterval(s.lazyLoadTimer),s.callbackTimers.length&&(s.callbackTimers.forEach((function(e){return clearTimeout(e)})),s.callbackTimers=[]),window.addEventListener?window.removeEventListener("resize",s.onWindowResized):window.detachEvent("onresize",s.onWindowResized),s.autoplayTimer&&clearInterval(s.autoplayTimer),s.ro.disconnect()})),(0,n.Z)((0,c.Z)(s),"componentDidUpdate",(function(e){if(s.checkImagesLoad(),s.props.onReInit&&s.props.onReInit(),s.props.lazyLoad){var t=y((0,a.Z)((0,a.Z)({},s.props),s.state));t.length>0&&(s.setState((function(e){return{lazyLoadedList:e.lazyLoadedList.concat(t)}})),s.props.onLazyLoad&&s.props.onLazyLoad(t))}s.adaptHeight();var r=(0,a.Z)((0,a.Z)({listRef:s.list,trackRef:s.track},s.props),s.state),n=s.didPropsChange(e);n&&s.updateState(r,n,(function(){s.state.currentSlide>=i.Children.count(s.props.children)&&s.changeSlide({message:"index",index:i.Children.count(s.props.children)-s.props.slidesToShow,currentSlide:s.state.currentSlide}),e.autoplay===s.props.autoplay&&e.autoplaySpeed===s.props.autoplaySpeed||(!e.autoplay&&s.props.autoplay?s.autoPlay("playing"):s.props.autoplay?s.autoPlay("update"):s.pause("paused"))}))})),(0,n.Z)((0,c.Z)(s),"onWindowResized",(function(e){s.debouncedResize&&s.debouncedResize.cancel(),s.debouncedResize=v()((function(){return s.resizeWindow(e)}),50),s.debouncedResize()})),(0,n.Z)((0,c.Z)(s),"resizeWindow",(function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];if(Boolean(s.track&&s.track.node)){var t=(0,a.Z)((0,a.Z)({listRef:s.list,trackRef:s.track},s.props),s.state);s.updateState(t,e,(function(){s.props.autoplay?s.autoPlay("update"):s.pause("paused")})),s.setState({animating:!1}),clearTimeout(s.animationEndCallback),delete s.animationEndCallback}})),(0,n.Z)((0,c.Z)(s),"updateState",(function(e,t,r){var n=function(e){var t,r=i.Children.count(e.children),n=e.listRef,o=Math.ceil(T(n)),l=e.trackRef&&e.trackRef.node,s=Math.ceil(T(l));if(e.vertical)t=o;else{var c=e.centerMode&&2*parseInt(e.centerPadding);"string"==typeof e.centerPadding&&"%"===e.centerPadding.slice(-1)&&(c*=o/100),t=Math.ceil((o-c)/e.slidesToShow)}var d=n&&L(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.Z)((0,a.Z)({},e),{},{currentSlide:p,lazyLoadedList:f})),g={slideCount:r,slideWidth:t,listWidth:o,trackWidth:s,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.Z)((0,a.Z)((0,a.Z)({},e),n),{},{slideIndex:n.currentSlide});var o=O(e);e=(0,a.Z)((0,a.Z)({},e),{},{left:o});var l=R(e);(t||i.Children.count(s.props.children)!==i.Children.count(e.children))&&(n.trackStyle=l),s.setState(n,r)})),(0,n.Z)((0,c.Z)(s),"ssrInit",(function(){if(s.props.variableWidth){var e=0,t=0,r=[],n=I((0,a.Z)((0,a.Z)((0,a.Z)({},s.props),s.state),{},{slideCount:s.props.children.length})),o=N((0,a.Z)((0,a.Z)((0,a.Z)({},s.props),s.state),{},{slideCount:s.props.children.length}));s.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 c=0;c<o;c++)e+=r[c];for(var d=0;d<s.state.currentSlide;d++)t+=r[d];var u={width:e+"px",left:-t+"px"};if(s.props.centerMode){var p="".concat(r[s.state.currentSlide],"px");u.left="calc(".concat(u.left," + (100% - ").concat(p,") / 2 ) ")}return{trackStyle:u}}var f=i.Children.count(s.props.children),h=(0,a.Z)((0,a.Z)((0,a.Z)({},s.props),s.state),{},{slideCount:f}),g=I(h)+N(h)+f,v=100/s.props.slidesToShow*g,b=100/g,m=-b*(I(h)+s.state.currentSlide)*v/100;return s.props.centerMode&&(m+=(100-b*v/100)/2),{slideWidth:b+"%",trackStyle:{width:v+"%",left:m+"%"}}})),(0,n.Z)((0,c.Z)(s),"checkImagesLoad",(function(){var e=s.list&&s.list.querySelectorAll&&s.list.querySelectorAll(".slick-slide img")||[],t=e.length,r=0;Array.prototype.forEach.call(e,(function(e){var n=function(){return++r&&r>=t&&s.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||(s.props.lazyLoad?e.onload=function(){s.adaptHeight(),s.callbackTimers.push(setTimeout(s.onWindowResized,s.props.speed))}:(e.onload=n,e.onerror=function(){n(),s.props.onLazyLoadError&&s.props.onLazyLoadError()}))}))})),(0,n.Z)((0,c.Z)(s),"progressiveLazyLoad",(function(){for(var e=[],t=(0,a.Z)((0,a.Z)({},s.props),s.state),r=s.state.currentSlide;r<s.state.slideCount+N(t);r++)if(s.state.lazyLoadedList.indexOf(r)<0){e.push(r);break}for(var n=s.state.currentSlide-1;n>=-I(t);n--)if(s.state.lazyLoadedList.indexOf(n)<0){e.push(n);break}e.length>0?(s.setState((function(t){return{lazyLoadedList:t.lazyLoadedList.concat(e)}})),s.props.onLazyLoad&&s.props.onLazyLoad(e)):s.lazyLoadTimer&&(clearInterval(s.lazyLoadTimer),delete s.lazyLoadTimer)})),(0,n.Z)((0,c.Z)(s),"slideHandler",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=s.props,n=r.asNavFor,o=r.beforeChange,i=r.onLazyLoad,l=r.speed,c=r.afterChange,d=s.state.currentSlide,u=function(e){var t=e.waitForAnimate,r=e.animating,n=e.fade,o=e.infinite,i=e.index,l=e.slideCount,s=e.lazyLoad,c=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={},Z=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),s&&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):!E(e)&&m>c?m=g=c: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=O((0,a.Z)((0,a.Z)({},e),{},{slideIndex:m})),b=O((0,a.Z)((0,a.Z)({},e),{},{slideIndex:g})),o||(v===b&&(m=g),v=b),s&&(h=h.concat(y((0,a.Z)((0,a.Z)({},e),{},{currentSlide:m})))),f?(k={animating:!0,currentSlide:g,trackStyle:A((0,a.Z)((0,a.Z)({},e),{},{left:v})),lazyLoadedList:h,targetSlide:Z},S={animating:!1,currentSlide:g,trackStyle:R((0,a.Z)((0,a.Z)({},e),{},{left:b})),swipeLeft:null,targetSlide:Z}):k={currentSlide:g,trackStyle:R((0,a.Z)((0,a.Z)({},e),{},{left:b})),lazyLoadedList:h,targetSlide:Z};return{state:k,nextState:S}}((0,a.Z)((0,a.Z)((0,a.Z)({index:e},s.props),s.state),{},{trackRef:s.track,useCSS:s.props.useCSS&&!t})),p=u.state,h=u.nextState;if(p){o&&o(d,p.currentSlide);var g=p.lazyLoadedList.filter((function(e){return s.state.lazyLoadedList.indexOf(e)<0}));i&&g.length>0&&i(g),!s.props.waitForAnimate&&s.animationEndCallback&&(clearTimeout(s.animationEndCallback),c&&c(d),delete s.animationEndCallback),s.setState(p,(function(){n&&s.asNavForIndex!==e&&(s.asNavForIndex=e,n.innerSlider.slideHandler(e)),h&&(s.animationEndCallback=setTimeout((function(){var e=h.animating,t=(0,f.Z)(h,["animating"]);s.setState(t,(function(){s.callbackTimers.push(setTimeout((function(){return s.setState({animating:e})}),10)),c&&c(p.currentSlide),delete s.animationEndCallback}))}),l))}))}})),(0,n.Z)((0,c.Z)(s),"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,s=e.slidesToShow,c=e.slideCount,d=e.currentSlide,u=e.targetSlide,p=e.lazyLoad,f=e.infinite;if(r=c%l!=0?0:(c-d)%l,"previous"===t.message)i=d-(o=0===r?l:s-r),p&&!f&&(i=-1==(n=d-o)?c-1:n),f||(i=u-l);else if("next"===t.message)i=d+(o=0===r?l:r),p&&!f&&(i=(d+l)%c+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=D((0,a.Z)((0,a.Z)({},e),{},{targetSlide:i}));i>t.currentSlide&&"left"===h?i-=c:i<t.currentSlide&&"right"===h&&(i+=c)}}else"index"===t.message&&(i=Number(t.index));return i}((0,a.Z)((0,a.Z)({},s.props),s.state),e);if((0===r||r)&&(!0===t?s.slideHandler(r,t):s.slideHandler(r),s.props.autoplay&&s.autoPlay("update"),s.props.focusOnSelect)){var n=s.list.querySelectorAll(".slick-current");n[0]&&n[0].focus()}})),(0,n.Z)((0,c.Z)(s),"clickHandler",(function(e){!1===s.clickable&&(e.stopPropagation(),e.preventDefault()),s.clickable=!0})),(0,n.Z)((0,c.Z)(s),"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,s.props.accessibility,s.props.rtl);""!==t&&s.changeSlide({message:t})})),(0,n.Z)((0,c.Z)(s),"selectHandler",(function(e){s.changeSlide(e)})),(0,n.Z)((0,c.Z)(s),"disableBodyScroll",(function(){window.ontouchmove=function(e){(e=e||window.event).preventDefault&&e.preventDefault(),e.returnValue=!1}})),(0,n.Z)((0,c.Z)(s),"enableBodyScroll",(function(){window.ontouchmove=null})),(0,n.Z)((0,c.Z)(s),"swipeStart",(function(e){s.props.verticalSwiping&&s.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,s.props.swipe,s.props.draggable);""!==t&&s.setState(t)})),(0,n.Z)((0,c.Z)(s),"swipeMove",(function(e){var t=function(e,t){var r=t.scrolling,n=t.animating,o=t.vertical,i=t.swipeToSlide,l=t.verticalSwiping,s=t.rtl,c=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 Z,x={},C=O(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 T=Math.round(Math.sqrt(Math.pow(m.curY-m.startY,2)));if(!l&&!h&&T>10)return{scrolling:!0};l&&(m.swipeLength=T);var L=(s?-1:1)*(m.curX>m.startX?1:-1);l&&(L=m.curY>m.startY?1:-1);var z=Math.ceil(g/v),H=M(t.touchObject,l),W=m.swipeLength;return b||(0===c&&("right"===H||"down"===H)||c+1>=z&&("left"===H||"up"===H)||!E(t)&&("left"===H||"up"===H))&&(W=m.swipeLength*d,!1===u&&p&&(p(H),x.edgeDragged=!0)),!f&&w&&(w(H),x.swiped=!0),Z=o?C+W*(y/S)*L:s?C-W*L:C+W*L,l&&(Z=C+W*L),x=(0,a.Z)((0,a.Z)({},x),{},{touchObject:m,swipeLeft:Z,trackStyle:R((0,a.Z)((0,a.Z)({},t),{},{left:Z}))}),Math.abs(m.curX-m.startX)<.8*Math.abs(m.curY-m.startY)||m.swipeLength>10&&(x.swiping=!0,k(e)),x}}(e,(0,a.Z)((0,a.Z)((0,a.Z)({},s.props),s.state),{},{trackRef:s.track,listRef:s.list,slideIndex:s.state.currentSlide}));t&&(t.swiping&&(s.clickable=!1),s.setState(t))})),(0,n.Z)((0,c.Z)(s),"swipeEnd",(function(e){var t=function(e,t){var r=t.dragging,n=t.swipe,o=t.touchObject,i=t.listWidth,l=t.touchThreshold,s=t.verticalSwiping,c=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=s?c/l:i/l,b=M(o,s),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+W(t),w=d?H(t,y):y,m.currentDirection=0;break;case"right":case"down":y=S-W(t),w=d?H(t,y):y,m.currentDirection=1;break;default:w=S}m.triggerSlideHandler=w}else{var Z=O(t);m.trackStyle=A((0,a.Z)((0,a.Z)({},t),{},{left:Z}))}return m}(e,(0,a.Z)((0,a.Z)((0,a.Z)({},s.props),s.state),{},{trackRef:s.track,listRef:s.list,slideIndex:s.state.currentSlide}));if(t){var r=t.triggerSlideHandler;delete t.triggerSlideHandler,s.setState(t),void 0!==r&&(s.slideHandler(r),s.props.verticalSwiping&&s.enableBodyScroll())}})),(0,n.Z)((0,c.Z)(s),"touchEnd",(function(e){s.swipeEnd(e),s.clickable=!0})),(0,n.Z)((0,c.Z)(s),"slickPrev",(function(){s.callbackTimers.push(setTimeout((function(){return s.changeSlide({message:"previous"})}),0))})),(0,n.Z)((0,c.Z)(s),"slickNext",(function(){s.callbackTimers.push(setTimeout((function(){return s.changeSlide({message:"next"})}),0))})),(0,n.Z)((0,c.Z)(s),"slickGoTo",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(e=Number(e),isNaN(e))return"";s.callbackTimers.push(setTimeout((function(){return s.changeSlide({message:"index",index:e,currentSlide:s.state.currentSlide},t)}),0))})),(0,n.Z)((0,c.Z)(s),"play",(function(){var e;if(s.props.rtl)e=s.state.currentSlide-s.props.slidesToScroll;else{if(!E((0,a.Z)((0,a.Z)({},s.props),s.state)))return!1;e=s.state.currentSlide+s.props.slidesToScroll}s.slideHandler(e)})),(0,n.Z)((0,c.Z)(s),"autoPlay",(function(e){s.autoplayTimer&&clearInterval(s.autoplayTimer);var t=s.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;s.autoplayTimer=setInterval(s.play,s.props.autoplaySpeed+50),s.setState({autoplaying:"playing"})})),(0,n.Z)((0,c.Z)(s),"pause",(function(e){s.autoplayTimer&&(clearInterval(s.autoplayTimer),s.autoplayTimer=null);var t=s.state.autoplaying;"paused"===e?s.setState({autoplaying:"paused"}):"focused"===e?"hovered"!==t&&"playing"!==t||s.setState({autoplaying:"focused"}):"playing"===t&&s.setState({autoplaying:"hovered"})})),(0,n.Z)((0,c.Z)(s),"onDotsOver",(function(){return s.props.autoplay&&s.pause("hovered")})),(0,n.Z)((0,c.Z)(s),"onDotsLeave",(function(){return s.props.autoplay&&"hovered"===s.state.autoplaying&&s.autoPlay("leave")})),(0,n.Z)((0,c.Z)(s),"onTrackOver",(function(){return s.props.autoplay&&s.pause("hovered")})),(0,n.Z)((0,c.Z)(s),"onTrackLeave",(function(){return s.props.autoplay&&"hovered"===s.state.autoplaying&&s.autoPlay("leave")})),(0,n.Z)((0,c.Z)(s),"onSlideFocus",(function(){return s.props.autoplay&&s.pause("focused")})),(0,n.Z)((0,c.Z)(s),"onSlideBlur",(function(){return s.props.autoplay&&"focused"===s.state.autoplaying&&s.autoPlay("blur")})),(0,n.Z)((0,c.Z)(s),"render",(function(){var e,t,r,n=m()("slick-slider",s.props.className,{"slick-vertical":s.props.vertical,"slick-initialized":!0}),l=(0,a.Z)((0,a.Z)({},s.props),s.state),c=z(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=s.props.pauseOnHover;if(c=(0,a.Z)((0,a.Z)({},c),{},{onMouseEnter:d?s.onTrackOver:null,onMouseLeave:d?s.onTrackLeave:null,onMouseOver:d?s.onTrackOver:null,focusOnSelect:s.props.focusOnSelect&&s.clickable?s.selectHandler:null}),!0===s.props.dots&&s.state.slideCount>=s.props.slidesToShow){var u=z(l,["dotsClass","slideCount","slidesToShow","currentSlide","slidesToScroll","clickHandler","children","customPaging","infinite","appendDots"]),p=s.props.pauseOnDotsHover;u=(0,a.Z)((0,a.Z)({},u),{},{clickHandler:s.changeSlide,onMouseEnter:p?s.onDotsLeave:null,onMouseOver:p?s.onDotsOver:null,onMouseLeave:p?s.onDotsLeave:null}),e=i.createElement(U,u)}var f=z(l,["infinite","centerMode","currentSlide","slideCount","slidesToShow","prevArrow","nextArrow"]);f.clickHandler=s.changeSlide,s.props.arrows&&(t=i.createElement(V,f),r=i.createElement($,f));var h=null;s.props.vertical&&(h={height:s.state.listHeight});var g=null;!1===s.props.vertical?!0===s.props.centerMode&&(g={padding:"0px "+s.props.centerPadding}):!0===s.props.centerMode&&(g={padding:s.props.centerPadding+" 0px"});var v=(0,a.Z)((0,a.Z)({},h),g),b=s.props.touchMove,w={className:"slick-list",style:v,onClick:s.clickHandler,onMouseDown:b?s.swipeStart:null,onMouseMove:s.state.dragging&&b?s.swipeMove:null,onMouseUp:b?s.swipeEnd:null,onMouseLeave:s.state.dragging&&b?s.swipeEnd:null,onTouchStart:b?s.swipeStart:null,onTouchMove:s.state.dragging&&b?s.swipeMove:null,onTouchEnd:b?s.touchEnd:null,onTouchCancel:s.state.dragging&&b?s.swipeEnd:null,onKeyDown:s.props.accessibility?s.keyHandler:null},k={className:n,dir:"ltr",style:s.props.style};return s.props.unslick&&(w={className:"slick-list"},k={className:n}),i.createElement("div",k,s.props.unslick?"":t,i.createElement("div",(0,o.Z)({ref:s.listRefHandler},w),i.createElement(q,(0,o.Z)({ref:s.trackRefHandler},c),s.props.children)),s.props.unslick?"":r,s.props.unslick?"":e)})),s.list=null,s.track=null,s.state=(0,a.Z)((0,a.Z)({},h),{},{currentSlide:s.props.initialSlide,slideCount:i.Children.count(s.props.children)}),s.callbackTimers=[],s.clickable=!0,s.debouncedResize=null;var d=s.ssrInit();return s.state=(0,a.Z)((0,a.Z)({},s.state),d),s}return(0,s.Z)(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.Z)(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(80973),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.Z)(r,e);var t=(0,u.Z)(r);function r(e){var o;return(0,l.Z)(this,r),o=t.call(this,e),(0,n.Z)((0,c.Z)(o),"innerSliderRefHandler",(function(e){return o.innerSlider=e})),(0,n.Z)((0,c.Z)(o),"slickPrev",(function(){return o.innerSlider.slickPrev()})),(0,n.Z)((0,c.Z)(o),"slickNext",(function(){return o.innerSlider.slickNext()})),(0,n.Z)((0,c.Z)(o),"slickGoTo",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return o.innerSlider.slickGoTo(e,t)})),(0,n.Z)((0,c.Z)(o),"slickPause",(function(){return o.innerSlider.pause("paused")})),(0,n.Z)((0,c.Z)(o),"slickPlay",(function(){return o.innerSlider.autoPlay("play")})),o.state={breakpoint:null},o._responsiveMediaHandlers=[],o}return(0,s.Z)(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.Z)((0,a.Z)((0,a.Z)({},te),this.props),t[0].settings):(0,a.Z)((0,a.Z)({},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=[],s=null,c=0;c<n.length;c+=e.rows*e.slidesPerRow){for(var d=[],u=c;u<c+e.rows*e.slidesPerRow;u+=e.slidesPerRow){for(var p=[],f=u;f<u+e.slidesPerRow&&(e.variableWidth&&n[f].props.style&&(s=n[f].props.style.width),!(f>=n.length));f+=1)p.push(i.cloneElement(n[f],{key:100*c+10*u+f,tabIndex:-1,style:{width:"".concat(100/e.slidesPerRow,"%"),display:"inline-block"}}));d.push(i.createElement("div",{key:10*c+u},p))}e.variableWidth?l.push(i.createElement("div",{key:c,style:{width:s}},d)):l.push(i.createElement("div",{key:c},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.Z)({style:this.props.style,ref:this.innerSliderRefHandler},e),l)}}]),r}(i.Component);var ne=r(61975),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,s=e.arrows,c=void 0!==s&&s,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.E_),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.Z)({},h);"fade"===S.effect&&(S.fade=!0);var Z=v("carousel",S.prefixCls),x="slick-dots";S.vertical="left"===f||"right"===f;var C=!!l,T=m()(x,"".concat(x,"-").concat(f),"boolean"!=typeof l&&(null==l?void 0:l.className)),L=m()(Z,(r={},(0,n.Z)(r,"".concat(Z,"-rtl"),"rtl"===b),(0,n.Z)(r,"".concat(Z,"-vertical"),S.vertical),r));return i.createElement("div",{className:L},i.createElement(re,(0,o.Z)({ref:w},S,{dots:C,dotsClass:T,arrows:c,draggable:u})))}))},9984:(e,t,r)=>{"use strict";r.r(t),r.d(t,{render:()=>E});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])},s=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}},c=s(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>"},Z={},x=function(e,t){var r=Z[e]||(Z[e]=[]);if(!(r.push(t)>1)){var n=function(e){var t;return function(){t||(t=1,e.apply(this,arguments))}}((function(){for(delete Z[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=s(i.document)("script",{async:!0,src:e+(-1!==e.indexOf("?")?"&":"?")+"callback=_"}),c=function(){i._&&i._({meta:{}})};v(l,"load",c),v(l,"error",c),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/,c),i.document.getElementsByTagName("head")[0].appendChild(l)}}},C=function(e,t,r){var n=s(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"]||""])]),c=e.appendChild(n("div",{className:"widget"+(a?" widget-lg":"")},[l])),d=l.hostname.replace(/\.$/,"");if(("."+d).substring(d.length-p.length)!=="."+p)return l.removeAttribute("href"),void r(c);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(c);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];x.call(this,f+b,(function(e,t){if(!e){var o=t[v];c.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(c)}))}else r(c)},T=window.devicePixelRatio||1,L=function(e){return(T>1?o.ceil(o.round(e*T)/T*2)/2:o.ceil(e))||0},M=function(e,t){e.style.width=t[0]+"px",e.style.height=t[1]+"px"},E=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=c("span");C(r.attachShadow({mode:"closed"}),e,(function(){t(r)}))}else{var i=c("iframe",{src:"javascript:0",title:e.title||void 0,allowtransparency:!0,scrolling:"no",frameBorder:0});M(i,[0,0]),i.style.border="none";var a=function(){var r,l=i.contentWindow;try{r=l.document.body}catch(s){return void n.body.appendChild(i.parentNode.removeChild(i))}b(i,"load",a),C.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,L(n.width)),r=o.max(r,L(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(){M(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)}}},80973:(e,t,r)=>{var n=r(71169),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)}},71169:e=>{e.exports=function(e){return e.replace(/[A-Z]/g,(function(e){return"-"+e.toLowerCase()})).toLowerCase()}},62719:(e,t,r)=>{"use strict";r.d(t,{Z:()=>i});var n=r(67294);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,9984)).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}}]);