/*! For license information please see 7029.96f14d38.js.LICENSE.txt */
(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[7029],{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),m=r(94184),b=r.n(m);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-C(e)},Z=function(e){return e.currentSlide+x(e)},C=function(e){return e.centerMode?Math.floor(e.slidesToShow/2)+(parseInt(e.centerPadding)>0?1:0):0},x=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},T=function(e){return e&&e.offsetHeight||0},z=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"},M=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},E=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+T(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},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 m,b=o&&o.node;if(m=n+I(e),t=(r=b&&b.childNodes[m])?-1*r.offsetLeft:0,!0===a){m=i?n+I(e):n,r=b&&b.children[m],t=0;for(var w=0;w<m;w++)t-=b&&b.children[w]&&b.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:b()(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 m=l-u;m<=I(e)&&l!==e.slidesToShow&&((t=-m)>=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:b()(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:b()(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,m=l?v:w(v,0,d-1),k=m-(s-1),y=l?k:w(k,0,d-1),S=b()({"slick-active":l?u>=y&&u<=m:u===y}),Z={message:"dots",index:g,slidesToScroll:s,currentSlide:u},C=this.clickHandler.bind(this,Z);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.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:b()(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"});M(this.props)||(e["slick-disabled"]=!0,t=null);var r={key:"1","data-role":"none",className:b()(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=T(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(L(n)),l=e.trackRef&&e.trackRef.node,s=Math.ceil(L(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&&T(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,m=100/g,b=-m*(I(h)+s.state.currentSlide)*v/100;return s.props.centerMode&&(b+=(100-m*v/100)/2),{slideWidth:m+"%",trackStyle:{width:v+"%",left:b+"%"}}})),(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,m,b=i,k={},S={},Z=o?i:w(i,0,l-1);if(n){if(!o&&(i<0||i>=l))return{};i<0?b=i+l:i>=l&&(b=i-l),s&&h.indexOf(b)<0&&(h=h.concat(b)),k={animating:!0,currentSlide:b,lazyLoadedList:h,targetSlide:b},S={animating:!1,targetSlide:b}}else g=b,b<0?(g=b+l,o?l%u!=0&&(g=l-l%u):g=0):!M(e)&&b>c?b=g=c:d&&b>=l?(b=o?l:l-1,g=o?0:l-1):b>=l&&(g=b-l,o?l%u!=0&&(g=0):g=l-p),!o&&b+p>=l&&(g=l-p),v=O((0,a.Z)((0,a.Z)({},e),{},{slideIndex:b})),m=O((0,a.Z)((0,a.Z)({},e),{},{slideIndex:g})),o||(v===m&&(b=g),v=m),s&&(h=h.concat(y((0,a.Z)((0,a.Z)({},e),{},{currentSlide:b})))),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:m})),swipeLeft:null,targetSlide:Z}):k={currentSlide:g,trackStyle:R((0,a.Z)((0,a.Z)({},e),{},{left:m})),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,m=t.infinite,b=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,C={},x=O(t);b.curX=e.touches?e.touches[0].pageX:e.clientX,b.curY=e.touches?e.touches[0].pageY:e.clientY,b.swipeLength=Math.round(Math.sqrt(Math.pow(b.curX-b.startX,2)));var L=Math.round(Math.sqrt(Math.pow(b.curY-b.startY,2)));if(!l&&!h&&L>10)return{scrolling:!0};l&&(b.swipeLength=L);var T=(s?-1:1)*(b.curX>b.startX?1:-1);l&&(T=b.curY>b.startY?1:-1);var E=Math.ceil(g/v),H=z(t.touchObject,l),W=b.swipeLength;return m||(0===c&&("right"===H||"down"===H)||c+1>=E&&("left"===H||"up"===H)||!M(t)&&("left"===H||"up"===H))&&(W=b.swipeLength*d,!1===u&&p&&(p(H),C.edgeDragged=!0)),!f&&w&&(w(H),C.swiped=!0),Z=o?x+W*(y/S)*T:s?x-W*T:x+W*T,l&&(Z=x+W*T),C=(0,a.Z)((0,a.Z)({},C),{},{touchObject:b,swipeLeft:Z,trackStyle:R((0,a.Z)((0,a.Z)({},t),{},{left:Z}))}),Math.abs(b.curX-b.startX)<.8*Math.abs(b.curY-b.startY)||b.swipeLength>10&&(C.swiping=!0,k(e)),C}}(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,m=z(o,s),b={dragging:!1,edgeDragged:!1,scrolling:!1,swiping:!1,swiped:!1,swipeLeft:null,touchObject:{}};if(u)return b;if(!o.swipeLength)return b;if(o.swipeLength>v){var w,y;k(e),p&&p(m);var S=g?h:f;switch(m){case"left":case"up":y=S+W(t),w=d?H(t,y):y,b.currentDirection=0;break;case"right":case"down":y=S-W(t),w=d?H(t,y):y,b.currentDirection=1;break;default:w=S}b.triggerSlideHandler=w}else{var Z=O(t);b.trackStyle=A((0,a.Z)((0,a.Z)({},t),{},{left:Z}))}return b}(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(!M((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=b()("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=E(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=E(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=E(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),m=s.props.touchMove,w={className:"slick-list",style:v,onClick:s.clickHandler,onMouseDown:m?s.swipeStart:null,onMouseMove:s.state.dragging&&m?s.swipeMove:null,onMouseUp:m?s.swipeEnd:null,onMouseLeave:s.state.dragging&&m?s.swipeEnd:null,onTouchStart:m?s.swipeStart:null,onTouchMove:s.state.dragging&&m?s.swipeMove:null,onTouchEnd:m?s.touchEnd:null,onTouchCancel:s.state.dragging&&m?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,m=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),C="slick-dots";S.vertical="left"===f||"right"===f;var x=!!l,L=b()(C,"".concat(C,"-").concat(f),"boolean"!=typeof l&&(null==l?void 0:l.className)),T=b()(Z,(r={},(0,n.Z)(r,"".concat(Z,"-rtl"),"rtl"===m),(0,n.Z)(r,"".concat(Z,"-vertical"),S.vertical),r));return i.createElement("div",{className:T},i.createElement(re,(0,o.Z)({ref:w},S,{dots:x,dotsClass:L,arrows:c,draggable:u})))}))},9984:(e,t,r)=>{"use strict";r.r(t),r.d(t,{render:()=>M});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)},m=function(e,t,r){e.removeEventListener?e.removeEventListener(t,r,!1):e.detachEvent("on"+t,r)},b={light:".btn{color:#24292f;background-color:#ebf0f4;border-color:#ccd1d5;border-color:rgba(27,31,36,.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:focus,.btn:hover{background-color:#e9ebef;background-position:0 -0.5em;border-color:#caccd1;border-color:rgba(27,31,36,.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:focus,:root .btn:hover{filter:none}.btn:active{background-color:#e5e9ed;border-color:#c7cbcf;border-color:rgba(27,31,36,.15);box-shadow:inset 0 .15em .3em rgba(27,31,36,.15);background-image:none;filter:none}.social-count{color:#24292f;background-color:#fff;border-color:#ddddde;border-color:rgba(27,31,36,.15)}.social-count:focus,.social-count:hover{color:#0969da}.octicon-heart{color:#bf3989}",light_high_contrast:".btn{color:#0e1116;background-color:#e7ecf0;border-color:#2f3237;border-color:rgba(1,4,9,.8);background-image:none;filter:none}.btn:focus,.btn:hover{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);box-shadow:inset 0 .15em .3em rgba(1,4,9,.15)}.social-count{color:#0e1116;background-color:#fff;border-color:#34363a;border-color:rgba(1,4,9,.8)}.social-count:focus,.social-count:hover{color:#0349b4}.octicon-heart{color:#971368}",dark:".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:focus,.btn:hover{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:focus,:root .btn:hover{filter:none}.btn:active{background-color:#161719;border-color:#8b949e;box-shadow:inset 0 .15em .3em rgba(1,4,9,.15);background-image:none;filter:none}.social-count{color:#c9d1d9;background-color:#0d1117;border-color:#24282e;border-color:rgba(240,246,252,.1)}.social-count:focus,.social-count:hover{color:#58a6ff}.octicon-heart{color:#db61a2}",dark_dimmed:".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:focus,.btn:hover{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:focus,:root .btn:hover{filter:none}.btn:active{background-color:#2e3031;border-color:#768390;box-shadow:inset 0 .15em .3em rgba(28,33,40,.15);background-image:none;filter:none}.social-count{color:#adbac7;background-color:#22272e;border-color:#333940;border-color:rgba(205,217,229,.1)}.social-count:focus,.social-count:hover{color:#539bf5}.octicon-heart{color:#c96198}",dark_high_contrast:".btn{color:#f0f3f6;background-color:#272b33;border-color:#7a828e;background-image:none;filter:none}.btn:focus,.btn:hover{background-color:#4a515b;background-position:0 -0.5em;border-color:#bdc4cc;background-image:none;filter:none}.btn:active{background-color:#1d1d1f;border-color:#bdc4cc;box-shadow:inset 0 .15em .3em rgba(1,4,9,.15)}.social-count{color:#f0f3f6;background-color:#0a0c10;border-color:#7a828e}.social-count:focus,.social-count:hover{color:#71b7ff}.octicon-heart{color:#ef6eb1}"},w=function(e,t){return"@media(prefers-color-scheme:"+e+"){"+b[d(b,t)?t:e]+"}"},k=function(e){if(null==e)return b.light;if(d(b,e))return b[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 b[d(b,t["no-preference"])?t["no-preference"]:"light"]+w("light",t.light)+w("dark",t.dark)},y={"comment-discussion":{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M1.5 2.75a.25.25 0 01.25-.25h8.5a.25.25 0 01.25.25v5.5a.25.25 0 01-.25.25h-3.5a.75.75 0 00-.53.22L3.5 11.44V9.25a.75.75 0 00-.75-.75h-1a.25.25 0 01-.25-.25v-5.5zM1.75 1A1.75 1.75 0 000 2.75v5.5C0 9.216.784 10 1.75 10H2v1.543a1.457 1.457 0 002.487 1.03L7.061 10h3.189A1.75 1.75 0 0012 8.25v-5.5A1.75 1.75 0 0010.25 1h-8.5zM14.5 4.75a.25.25 0 00-.25-.25h-.5a.75.75 0 110-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0114.25 12H14v1.543a1.457 1.457 0 01-2.487 1.03L9.22 12.28a.75.75 0 111.06-1.06l2.22 2.22v-2.19a.75.75 0 01.75-.75h1a.25.25 0 00.25-.25v-5.5z"></path>'}}},download:{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M7.47 10.78a.75.75 0 001.06 0l3.75-3.75a.75.75 0 00-1.06-1.06L8.75 8.44V1.75a.75.75 0 00-1.5 0v6.69L4.78 5.97a.75.75 0 00-1.06 1.06l3.75 3.75zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z"></path>'}}},eye:{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z"></path>'}}},heart:{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.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.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-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.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"></path>'}}},"issue-opened":{heights:{16:{width:16,path:'<path d="M8 9.5a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path><path fill-rule="evenodd" d="M8 0a8 8 0 100 16A8 8 0 008 0zM1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0z"></path>'}}},"mark-github":{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path>'}}},package:{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M8.878.392a1.75 1.75 0 00-1.756 0l-5.25 3.045A1.75 1.75 0 001 4.951v6.098c0 .624.332 1.2.872 1.514l5.25 3.045a1.75 1.75 0 001.756 0l5.25-3.045c.54-.313.872-.89.872-1.514V4.951c0-.624-.332-1.2-.872-1.514L8.878.392zM7.875 1.69a.25.25 0 01.25 0l4.63 2.685L8 7.133 3.245 4.375l4.63-2.685zM2.5 5.677v5.372c0 .09.047.171.125.216l4.625 2.683V8.432L2.5 5.677zm6.25 8.271l4.625-2.683a.25.25 0 00.125-.216V5.677L8.75 8.432v5.516z"></path>'}}},play:{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zM6.379 5.227A.25.25 0 006 5.442v5.117a.25.25 0 00.379.214l4.264-2.559a.25.25 0 000-.428L6.379 5.227z"></path>'}}},"repo-forked":{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.251 2.251 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878zm3.75 7.378a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm3-8.75a.75.75 0 100-1.5.75.75 0 000 1.5z"></path>'}}},"repo-template":{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M6 .75A.75.75 0 016.75 0h2.5a.75.75 0 010 1.5h-2.5A.75.75 0 016 .75zm5 0a.75.75 0 01.75-.75h1.5a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0V1.5h-.75A.75.75 0 0111 .75zM4.992.662a.75.75 0 01-.636.848c-.436.063-.783.41-.846.846a.75.75 0 01-1.485-.212A2.501 2.501 0 014.144.025a.75.75 0 01.848.637zM2.75 4a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5A.75.75 0 012.75 4zm10.5 0a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5a.75.75 0 01.75-.75zM2.75 8a.75.75 0 01.75.75v.268A1.72 1.72 0 013.75 9h.5a.75.75 0 010 1.5h-.5a.25.25 0 00-.25.25v.75c0 .28.114.532.3.714a.75.75 0 01-1.05 1.072A2.495 2.495 0 012 11.5V8.75A.75.75 0 012.75 8zm10.5 0a.75.75 0 01.75.75v4.5a.75.75 0 01-.75.75h-2.5a.75.75 0 010-1.5h1.75v-2h-.75a.75.75 0 010-1.5h.75v-.25a.75.75 0 01.75-.75zM6 9.75A.75.75 0 016.75 9h2.5a.75.75 0 010 1.5h-2.5A.75.75 0 016 9.75zm-1 2.5v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path>'}}},star:{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z"></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={},C=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 m(e,n,o),r.apply(this,arguments)};v(e,n,o)}}(l,/de|m/,c),i.document.getElementsByTagName("head")[0].appendChild(l)}}},x=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="/network/members";else v="subscribers_count",g="/watchers";var m=h[2]?"/repos/"+h[1]+"/"+h[2]:"/users/"+h[1];C.call(this,f+m,(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)},L=window.devicePixelRatio||1,T=function(e){return(L>1?o.ceil(o.round(e*L)/L*2)/2:o.ceil(e))||0},z=function(e,t){e.style.width=t[0]+"px",e.style.height=t[1]+"px"},M=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");x(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});z(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))}m(i,"load",a),x.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,T(n.width)),r=o.max(r,T(n.height))}return[t,r]}(r);i.parentNode.removeChild(i),function(e,t,r){var n=function(){return m(e,t,n),r.apply(this,arguments)};v(e,t,n)}(i,"load",(function(){z(i,n)})),i.src="https://unpkg.com/github-buttons@2.21.1/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)}},18930:(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},71169:e=>{e.exports=function(e){return e.replace(/[A-Z]/g,(function(e){return"-"+e.toLowerCase()})).toLowerCase()}}}]);